diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-07-18 13:31:12 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-18 13:31:12 -0400 |
commit | 3e370b29d35fb01bfb92c2814d6f79bf6a2cb970 (patch) | |
tree | 3b8fb467d60bfe6a34686f4abdc3a60050ba40a4 /include | |
parent | 88d1dce3a74367291f65a757fbdcaf17f042f30c (diff) | |
parent | 5b664cb235e97afbf34db9c4d77f08ebd725335e (diff) |
Merge branch 'linus' into x86/pci-ioapic-boot-irq-quirks
Conflicts:
drivers/pci/quirks.c
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include')
573 files changed, 18702 insertions, 22523 deletions
diff --git a/include/Kbuild b/include/Kbuild index b52288774345..bdca155028ec 100644 --- a/include/Kbuild +++ b/include/Kbuild | |||
@@ -4,5 +4,6 @@ header-y += sound/ | |||
4 | header-y += mtd/ | 4 | header-y += mtd/ |
5 | header-y += rdma/ | 5 | header-y += rdma/ |
6 | header-y += video/ | 6 | header-y += video/ |
7 | header-y += drm/ | ||
7 | 8 | ||
8 | header-y += asm-$(ARCH)/ | 9 | header-y += asm-$(ARCH)/ |
diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h index 28fe8bae1037..4eb75a88795a 100644 --- a/include/acpi/acconfig.h +++ b/include/acpi/acconfig.h | |||
@@ -63,7 +63,7 @@ | |||
63 | 63 | ||
64 | /* Current ACPICA subsystem version in YYYYMMDD format */ | 64 | /* Current ACPICA subsystem version in YYYYMMDD format */ |
65 | 65 | ||
66 | #define ACPI_CA_VERSION 0x20080321 | 66 | #define ACPI_CA_VERSION 0x20080609 |
67 | 67 | ||
68 | /* | 68 | /* |
69 | * OS name, used for the _OS object. The _OS object is essentially obsolete, | 69 | * OS name, used for the _OS object. The _OS object is essentially obsolete, |
diff --git a/include/acpi/acdisasm.h b/include/acpi/acdisasm.h index 788f88782012..f53faca8ec80 100644 --- a/include/acpi/acdisasm.h +++ b/include/acpi/acdisasm.h | |||
@@ -162,6 +162,7 @@ extern struct acpi_dmtable_info acpi_dm_table_info_dmar_hdr[]; | |||
162 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar_scope[]; | 162 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar_scope[]; |
163 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar0[]; | 163 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar0[]; |
164 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar1[]; | 164 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar1[]; |
165 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar2[]; | ||
165 | extern struct acpi_dmtable_info acpi_dm_table_info_ecdt[]; | 166 | extern struct acpi_dmtable_info acpi_dm_table_info_ecdt[]; |
166 | extern struct acpi_dmtable_info acpi_dm_table_info_einj[]; | 167 | extern struct acpi_dmtable_info acpi_dm_table_info_einj[]; |
167 | extern struct acpi_dmtable_info acpi_dm_table_info_einj0[]; | 168 | extern struct acpi_dmtable_info acpi_dm_table_info_einj0[]; |
diff --git a/include/acpi/acdispat.h b/include/acpi/acdispat.h index 910f018d92c7..21a73a105d0a 100644 --- a/include/acpi/acdispat.h +++ b/include/acpi/acdispat.h | |||
@@ -221,7 +221,7 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state); | |||
221 | * dsinit | 221 | * dsinit |
222 | */ | 222 | */ |
223 | acpi_status | 223 | acpi_status |
224 | acpi_ds_initialize_objects(acpi_native_uint table_index, | 224 | acpi_ds_initialize_objects(u32 table_index, |
225 | struct acpi_namespace_node *start_node); | 225 | struct acpi_namespace_node *start_node); |
226 | 226 | ||
227 | /* | 227 | /* |
diff --git a/include/acpi/acexcep.h b/include/acpi/acexcep.h index 1f591171bf31..e5a890ffeb02 100644 --- a/include/acpi/acexcep.h +++ b/include/acpi/acexcep.h | |||
@@ -108,8 +108,9 @@ | |||
108 | #define AE_BAD_HEX_CONSTANT (acpi_status) (0x0007 | AE_CODE_PROGRAMMER) | 108 | #define AE_BAD_HEX_CONSTANT (acpi_status) (0x0007 | AE_CODE_PROGRAMMER) |
109 | #define AE_BAD_OCTAL_CONSTANT (acpi_status) (0x0008 | AE_CODE_PROGRAMMER) | 109 | #define AE_BAD_OCTAL_CONSTANT (acpi_status) (0x0008 | AE_CODE_PROGRAMMER) |
110 | #define AE_BAD_DECIMAL_CONSTANT (acpi_status) (0x0009 | AE_CODE_PROGRAMMER) | 110 | #define AE_BAD_DECIMAL_CONSTANT (acpi_status) (0x0009 | AE_CODE_PROGRAMMER) |
111 | #define AE_MISSING_ARGUMENTS (acpi_status) (0x000A | AE_CODE_PROGRAMMER) | ||
111 | 112 | ||
112 | #define AE_CODE_PGM_MAX 0x0009 | 113 | #define AE_CODE_PGM_MAX 0x000A |
113 | 114 | ||
114 | /* | 115 | /* |
115 | * Acpi table exceptions | 116 | * Acpi table exceptions |
@@ -225,6 +226,7 @@ char const *acpi_gbl_exception_names_env[] = { | |||
225 | }; | 226 | }; |
226 | 227 | ||
227 | char const *acpi_gbl_exception_names_pgm[] = { | 228 | char const *acpi_gbl_exception_names_pgm[] = { |
229 | NULL, | ||
228 | "AE_BAD_PARAMETER", | 230 | "AE_BAD_PARAMETER", |
229 | "AE_BAD_CHARACTER", | 231 | "AE_BAD_CHARACTER", |
230 | "AE_BAD_PATHNAME", | 232 | "AE_BAD_PATHNAME", |
@@ -233,10 +235,12 @@ char const *acpi_gbl_exception_names_pgm[] = { | |||
233 | "AE_ALIGNMENT", | 235 | "AE_ALIGNMENT", |
234 | "AE_BAD_HEX_CONSTANT", | 236 | "AE_BAD_HEX_CONSTANT", |
235 | "AE_BAD_OCTAL_CONSTANT", | 237 | "AE_BAD_OCTAL_CONSTANT", |
236 | "AE_BAD_DECIMAL_CONSTANT" | 238 | "AE_BAD_DECIMAL_CONSTANT", |
239 | "AE_MISSING_ARGUMENTS" | ||
237 | }; | 240 | }; |
238 | 241 | ||
239 | char const *acpi_gbl_exception_names_tbl[] = { | 242 | char const *acpi_gbl_exception_names_tbl[] = { |
243 | NULL, | ||
240 | "AE_BAD_SIGNATURE", | 244 | "AE_BAD_SIGNATURE", |
241 | "AE_BAD_HEADER", | 245 | "AE_BAD_HEADER", |
242 | "AE_BAD_CHECKSUM", | 246 | "AE_BAD_CHECKSUM", |
@@ -246,6 +250,7 @@ char const *acpi_gbl_exception_names_tbl[] = { | |||
246 | }; | 250 | }; |
247 | 251 | ||
248 | char const *acpi_gbl_exception_names_aml[] = { | 252 | char const *acpi_gbl_exception_names_aml[] = { |
253 | NULL, | ||
249 | "AE_AML_ERROR", | 254 | "AE_AML_ERROR", |
250 | "AE_AML_PARSE", | 255 | "AE_AML_PARSE", |
251 | "AE_AML_BAD_OPCODE", | 256 | "AE_AML_BAD_OPCODE", |
@@ -283,6 +288,7 @@ char const *acpi_gbl_exception_names_aml[] = { | |||
283 | }; | 288 | }; |
284 | 289 | ||
285 | char const *acpi_gbl_exception_names_ctrl[] = { | 290 | char const *acpi_gbl_exception_names_ctrl[] = { |
291 | NULL, | ||
286 | "AE_CTRL_RETURN_VALUE", | 292 | "AE_CTRL_RETURN_VALUE", |
287 | "AE_CTRL_PENDING", | 293 | "AE_CTRL_PENDING", |
288 | "AE_CTRL_TERMINATE", | 294 | "AE_CTRL_TERMINATE", |
diff --git a/include/acpi/acglobal.h b/include/acpi/acglobal.h index 74ad971241db..15dda46b70d1 100644 --- a/include/acpi/acglobal.h +++ b/include/acpi/acglobal.h | |||
@@ -140,7 +140,7 @@ ACPI_EXTERN u32 acpi_gbl_trace_flags; | |||
140 | */ | 140 | */ |
141 | ACPI_EXTERN struct acpi_internal_rsdt acpi_gbl_root_table_list; | 141 | ACPI_EXTERN struct acpi_internal_rsdt acpi_gbl_root_table_list; |
142 | ACPI_EXTERN struct acpi_table_fadt acpi_gbl_FADT; | 142 | ACPI_EXTERN struct acpi_table_fadt acpi_gbl_FADT; |
143 | extern acpi_native_uint acpi_gbl_permanent_mmap; | 143 | extern u8 acpi_gbl_permanent_mmap; |
144 | 144 | ||
145 | /* These addresses are calculated from FADT address values */ | 145 | /* These addresses are calculated from FADT address values */ |
146 | 146 | ||
diff --git a/include/acpi/achware.h b/include/acpi/achware.h index d4fb9bbc903c..97a72b193276 100644 --- a/include/acpi/achware.h +++ b/include/acpi/achware.h | |||
@@ -87,6 +87,8 @@ acpi_status acpi_hw_clear_acpi_status(void); | |||
87 | /* | 87 | /* |
88 | * hwgpe - GPE support | 88 | * hwgpe - GPE support |
89 | */ | 89 | */ |
90 | acpi_status acpi_hw_low_disable_gpe(struct acpi_gpe_event_info *gpe_event_info); | ||
91 | |||
90 | acpi_status | 92 | acpi_status |
91 | acpi_hw_write_gpe_enable_reg(struct acpi_gpe_event_info *gpe_event_info); | 93 | acpi_hw_write_gpe_enable_reg(struct acpi_gpe_event_info *gpe_event_info); |
92 | 94 | ||
@@ -100,11 +102,9 @@ acpi_status | |||
100 | acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, | 102 | acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, |
101 | struct acpi_gpe_block_info *gpe_block); | 103 | struct acpi_gpe_block_info *gpe_block); |
102 | 104 | ||
103 | #ifdef ACPI_FUTURE_USAGE | ||
104 | acpi_status | 105 | acpi_status |
105 | acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info, | 106 | acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info, |
106 | acpi_event_status * event_status); | 107 | acpi_event_status * event_status); |
107 | #endif /* ACPI_FUTURE_USAGE */ | ||
108 | 108 | ||
109 | acpi_status acpi_hw_disable_all_gpes(void); | 109 | acpi_status acpi_hw_disable_all_gpes(void); |
110 | 110 | ||
diff --git a/include/acpi/acinterp.h b/include/acpi/acinterp.h index e249ce5d3300..e8db7a3143a5 100644 --- a/include/acpi/acinterp.h +++ b/include/acpi/acinterp.h | |||
@@ -366,10 +366,7 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth); | |||
366 | 366 | ||
367 | void | 367 | void |
368 | acpi_ex_dump_operands(union acpi_operand_object **operands, | 368 | acpi_ex_dump_operands(union acpi_operand_object **operands, |
369 | acpi_interpreter_mode interpreter_mode, | 369 | const char *opcode_name, u32 num_opcodes); |
370 | char *ident, | ||
371 | u32 num_levels, | ||
372 | char *note, char *module_name, u32 line_number); | ||
373 | 370 | ||
374 | #ifdef ACPI_FUTURE_USAGE | 371 | #ifdef ACPI_FUTURE_USAGE |
375 | void | 372 | void |
diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h index c5cdc32ac2f8..b221c8583ddd 100644 --- a/include/acpi/aclocal.h +++ b/include/acpi/aclocal.h | |||
@@ -98,8 +98,8 @@ union acpi_parse_object; | |||
98 | 98 | ||
99 | static char *acpi_gbl_mutex_names[ACPI_NUM_MUTEX] = { | 99 | static char *acpi_gbl_mutex_names[ACPI_NUM_MUTEX] = { |
100 | "ACPI_MTX_Interpreter", | 100 | "ACPI_MTX_Interpreter", |
101 | "ACPI_MTX_Tables", | ||
102 | "ACPI_MTX_Namespace", | 101 | "ACPI_MTX_Namespace", |
102 | "ACPI_MTX_Tables", | ||
103 | "ACPI_MTX_Events", | 103 | "ACPI_MTX_Events", |
104 | "ACPI_MTX_Caches", | 104 | "ACPI_MTX_Caches", |
105 | "ACPI_MTX_Memory", | 105 | "ACPI_MTX_Memory", |
@@ -282,8 +282,8 @@ struct acpi_predefined_names { | |||
282 | /* Info structure used to convert external<->internal namestrings */ | 282 | /* Info structure used to convert external<->internal namestrings */ |
283 | 283 | ||
284 | struct acpi_namestring_info { | 284 | struct acpi_namestring_info { |
285 | char *external_name; | 285 | const char *external_name; |
286 | char *next_external_char; | 286 | const char *next_external_char; |
287 | char *internal_name; | 287 | char *internal_name; |
288 | u32 length; | 288 | u32 length; |
289 | u32 num_segments; | 289 | u32 num_segments; |
diff --git a/include/acpi/acmacros.h b/include/acpi/acmacros.h index fb41a3b802fc..57ab9e9d7593 100644 --- a/include/acpi/acmacros.h +++ b/include/acpi/acmacros.h | |||
@@ -80,12 +80,12 @@ | |||
80 | */ | 80 | */ |
81 | #define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p)) | 81 | #define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p)) |
82 | #define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (acpi_uintptr_t) (p)) | 82 | #define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (acpi_uintptr_t) (p)) |
83 | #define ACPI_ADD_PTR(t,a,b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8,(a)) + (acpi_native_uint)(b))) | 83 | #define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8,(a)) + (acpi_size)(b))) |
84 | #define ACPI_PTR_DIFF(a,b) (acpi_native_uint) (ACPI_CAST_PTR (u8,(a)) - ACPI_CAST_PTR (u8,(b))) | 84 | #define ACPI_PTR_DIFF(a, b) (acpi_size) (ACPI_CAST_PTR (u8,(a)) - ACPI_CAST_PTR (u8,(b))) |
85 | 85 | ||
86 | /* Pointer/Integer type conversions */ | 86 | /* Pointer/Integer type conversions */ |
87 | 87 | ||
88 | #define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void,(void *) NULL,(acpi_native_uint) i) | 88 | #define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL, (acpi_size) i) |
89 | #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p,(void *) NULL) | 89 | #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p,(void *) NULL) |
90 | #define ACPI_OFFSET(d,f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f),(void *) NULL) | 90 | #define ACPI_OFFSET(d,f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f),(void *) NULL) |
91 | #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) | 91 | #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) |
@@ -296,22 +296,22 @@ struct acpi_integer_overlay { | |||
296 | /* | 296 | /* |
297 | * Rounding macros (Power of two boundaries only) | 297 | * Rounding macros (Power of two boundaries only) |
298 | */ | 298 | */ |
299 | #define ACPI_ROUND_DOWN(value,boundary) (((acpi_native_uint)(value)) & \ | 299 | #define ACPI_ROUND_DOWN(value, boundary) (((acpi_size)(value)) & \ |
300 | (~(((acpi_native_uint) boundary)-1))) | 300 | (~(((acpi_size) boundary)-1))) |
301 | 301 | ||
302 | #define ACPI_ROUND_UP(value,boundary) ((((acpi_native_uint)(value)) + \ | 302 | #define ACPI_ROUND_UP(value, boundary) ((((acpi_size)(value)) + \ |
303 | (((acpi_native_uint) boundary)-1)) & \ | 303 | (((acpi_size) boundary)-1)) & \ |
304 | (~(((acpi_native_uint) boundary)-1))) | 304 | (~(((acpi_size) boundary)-1))) |
305 | 305 | ||
306 | /* Note: sizeof(acpi_native_uint) evaluates to either 2, 4, or 8 */ | 306 | /* Note: sizeof(acpi_size) evaluates to either 4 or 8 (32- vs 64-bit mode) */ |
307 | 307 | ||
308 | #define ACPI_ROUND_DOWN_TO_32BIT(a) ACPI_ROUND_DOWN(a,4) | 308 | #define ACPI_ROUND_DOWN_TO_32BIT(a) ACPI_ROUND_DOWN(a,4) |
309 | #define ACPI_ROUND_DOWN_TO_64BIT(a) ACPI_ROUND_DOWN(a,8) | 309 | #define ACPI_ROUND_DOWN_TO_64BIT(a) ACPI_ROUND_DOWN(a,8) |
310 | #define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a) ACPI_ROUND_DOWN(a,sizeof(acpi_native_uint)) | 310 | #define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a) ACPI_ROUND_DOWN(a,sizeof(acpi_size)) |
311 | 311 | ||
312 | #define ACPI_ROUND_UP_TO_32BIT(a) ACPI_ROUND_UP(a,4) | 312 | #define ACPI_ROUND_UP_TO_32BIT(a) ACPI_ROUND_UP(a,4) |
313 | #define ACPI_ROUND_UP_TO_64BIT(a) ACPI_ROUND_UP(a,8) | 313 | #define ACPI_ROUND_UP_TO_64BIT(a) ACPI_ROUND_UP(a,8) |
314 | #define ACPI_ROUND_UP_TO_NATIVE_WORD(a) ACPI_ROUND_UP(a,sizeof(acpi_native_uint)) | 314 | #define ACPI_ROUND_UP_TO_NATIVE_WORD(a) ACPI_ROUND_UP(a,sizeof(acpi_size)) |
315 | 315 | ||
316 | #define ACPI_ROUND_BITS_UP_TO_BYTES(a) ACPI_DIV_8((a) + 7) | 316 | #define ACPI_ROUND_BITS_UP_TO_BYTES(a) ACPI_DIV_8((a) + 7) |
317 | #define ACPI_ROUND_BITS_DOWN_TO_BYTES(a) ACPI_DIV_8((a)) | 317 | #define ACPI_ROUND_BITS_DOWN_TO_BYTES(a) ACPI_DIV_8((a)) |
@@ -322,7 +322,7 @@ struct acpi_integer_overlay { | |||
322 | 322 | ||
323 | #define ACPI_ROUND_UP_TO(value,boundary) (((value) + ((boundary)-1)) / (boundary)) | 323 | #define ACPI_ROUND_UP_TO(value,boundary) (((value) + ((boundary)-1)) / (boundary)) |
324 | 324 | ||
325 | #define ACPI_IS_MISALIGNED(value) (((acpi_native_uint)value) & (sizeof(acpi_native_uint)-1)) | 325 | #define ACPI_IS_MISALIGNED(value) (((acpi_size)value) & (sizeof(acpi_size)-1)) |
326 | 326 | ||
327 | /* | 327 | /* |
328 | * Bitmask creation | 328 | * Bitmask creation |
@@ -414,7 +414,7 @@ struct acpi_integer_overlay { | |||
414 | * error messages. The __FILE__ macro is not very useful for this, because it | 414 | * error messages. The __FILE__ macro is not very useful for this, because it |
415 | * often includes the entire pathname to the module | 415 | * often includes the entire pathname to the module |
416 | */ | 416 | */ |
417 | #define ACPI_MODULE_NAME(name) static char ACPI_UNUSED_VAR *_acpi_module_name = name; | 417 | #define ACPI_MODULE_NAME(name) static const char ACPI_UNUSED_VAR _acpi_module_name[] = name; |
418 | #else | 418 | #else |
419 | #define ACPI_MODULE_NAME(name) | 419 | #define ACPI_MODULE_NAME(name) |
420 | #endif | 420 | #endif |
@@ -467,19 +467,17 @@ struct acpi_integer_overlay { | |||
467 | /* | 467 | /* |
468 | * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header, | 468 | * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header, |
469 | * define it now. This is the case where there the compiler does not support | 469 | * define it now. This is the case where there the compiler does not support |
470 | * a __FUNCTION__ macro or equivalent. We save the function name on the | 470 | * a __FUNCTION__ macro or equivalent. |
471 | * local stack. | ||
472 | */ | 471 | */ |
473 | #ifndef ACPI_GET_FUNCTION_NAME | 472 | #ifndef ACPI_GET_FUNCTION_NAME |
474 | #define ACPI_GET_FUNCTION_NAME _acpi_function_name | 473 | #define ACPI_GET_FUNCTION_NAME _acpi_function_name |
475 | /* | 474 | /* |
476 | * The Name parameter should be the procedure name as a quoted string. | 475 | * The Name parameter should be the procedure name as a quoted string. |
477 | * This is declared as a local string ("MyFunctionName") so that it can | 476 | * The function name is also used by the function exit macros below. |
478 | * be also used by the function exit macros below. | ||
479 | * Note: (const char) is used to be compatible with the debug interfaces | 477 | * Note: (const char) is used to be compatible with the debug interfaces |
480 | * and macros such as __FUNCTION__. | 478 | * and macros such as __FUNCTION__. |
481 | */ | 479 | */ |
482 | #define ACPI_FUNCTION_NAME(name) const char *_acpi_function_name = #name; | 480 | #define ACPI_FUNCTION_NAME(name) static const char _acpi_function_name[] = #name; |
483 | 481 | ||
484 | #else | 482 | #else |
485 | /* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */ | 483 | /* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */ |
@@ -599,7 +597,7 @@ struct acpi_integer_overlay { | |||
599 | /* Stack and buffer dumping */ | 597 | /* Stack and buffer dumping */ |
600 | 598 | ||
601 | #define ACPI_DUMP_STACK_ENTRY(a) acpi_ex_dump_operand((a),0) | 599 | #define ACPI_DUMP_STACK_ENTRY(a) acpi_ex_dump_operand((a),0) |
602 | #define ACPI_DUMP_OPERANDS(a,b,c,d,e) acpi_ex_dump_operands(a,b,c,d,e,_acpi_module_name,__LINE__) | 600 | #define ACPI_DUMP_OPERANDS(a,b,c) acpi_ex_dump_operands(a,b,c) |
603 | 601 | ||
604 | #define ACPI_DUMP_ENTRY(a,b) acpi_ns_dump_entry (a,b) | 602 | #define ACPI_DUMP_ENTRY(a,b) acpi_ns_dump_entry (a,b) |
605 | #define ACPI_DUMP_PATHNAME(a,b,c,d) acpi_ns_dump_pathname(a,b,c,d) | 603 | #define ACPI_DUMP_PATHNAME(a,b,c,d) acpi_ns_dump_pathname(a,b,c,d) |
@@ -635,7 +633,7 @@ struct acpi_integer_overlay { | |||
635 | #define ACPI_FUNCTION_VALUE_EXIT(s) do { } while(0) | 633 | #define ACPI_FUNCTION_VALUE_EXIT(s) do { } while(0) |
636 | #define ACPI_FUNCTION_ENTRY() do { } while(0) | 634 | #define ACPI_FUNCTION_ENTRY() do { } while(0) |
637 | #define ACPI_DUMP_STACK_ENTRY(a) do { } while(0) | 635 | #define ACPI_DUMP_STACK_ENTRY(a) do { } while(0) |
638 | #define ACPI_DUMP_OPERANDS(a,b,c,d,e) do { } while(0) | 636 | #define ACPI_DUMP_OPERANDS(a,b,c) do { } while(0) |
639 | #define ACPI_DUMP_ENTRY(a,b) do { } while(0) | 637 | #define ACPI_DUMP_ENTRY(a,b) do { } while(0) |
640 | #define ACPI_DUMP_TABLES(a,b) do { } while(0) | 638 | #define ACPI_DUMP_TABLES(a,b) do { } while(0) |
641 | #define ACPI_DUMP_PATHNAME(a,b,c,d) do { } while(0) | 639 | #define ACPI_DUMP_PATHNAME(a,b,c,d) do { } while(0) |
diff --git a/include/acpi/acnamesp.h b/include/acpi/acnamesp.h index 713b30903fe5..9ed70a050580 100644 --- a/include/acpi/acnamesp.h +++ b/include/acpi/acnamesp.h | |||
@@ -86,8 +86,7 @@ acpi_status acpi_ns_initialize_devices(void); | |||
86 | acpi_status acpi_ns_load_namespace(void); | 86 | acpi_status acpi_ns_load_namespace(void); |
87 | 87 | ||
88 | acpi_status | 88 | acpi_status |
89 | acpi_ns_load_table(acpi_native_uint table_index, | 89 | acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node); |
90 | struct acpi_namespace_node *node); | ||
91 | 90 | ||
92 | /* | 91 | /* |
93 | * nswalk - walk the namespace | 92 | * nswalk - walk the namespace |
@@ -108,12 +107,11 @@ struct acpi_namespace_node *acpi_ns_get_next_node(acpi_object_type type, struct | |||
108 | * nsparse - table parsing | 107 | * nsparse - table parsing |
109 | */ | 108 | */ |
110 | acpi_status | 109 | acpi_status |
111 | acpi_ns_parse_table(acpi_native_uint table_index, | 110 | acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node); |
112 | struct acpi_namespace_node *start_node); | ||
113 | 111 | ||
114 | acpi_status | 112 | acpi_status |
115 | acpi_ns_one_complete_parse(acpi_native_uint pass_number, | 113 | acpi_ns_one_complete_parse(u32 pass_number, |
116 | acpi_native_uint table_index, | 114 | u32 table_index, |
117 | struct acpi_namespace_node *start_node); | 115 | struct acpi_namespace_node *start_node); |
118 | 116 | ||
119 | /* | 117 | /* |
@@ -201,7 +199,7 @@ acpi_ns_pattern_match(struct acpi_namespace_node *obj_node, char *search_for); | |||
201 | 199 | ||
202 | acpi_status | 200 | acpi_status |
203 | acpi_ns_get_node(struct acpi_namespace_node *prefix_node, | 201 | acpi_ns_get_node(struct acpi_namespace_node *prefix_node, |
204 | char *external_pathname, | 202 | const char *external_pathname, |
205 | u32 flags, struct acpi_namespace_node **out_node); | 203 | u32 flags, struct acpi_namespace_node **out_node); |
206 | 204 | ||
207 | acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node); | 205 | acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node); |
@@ -265,28 +263,30 @@ acpi_object_type acpi_ns_get_type(struct acpi_namespace_node *node); | |||
265 | u32 acpi_ns_local(acpi_object_type type); | 263 | u32 acpi_ns_local(acpi_object_type type); |
266 | 264 | ||
267 | void | 265 | void |
268 | acpi_ns_report_error(char *module_name, | 266 | acpi_ns_report_error(const char *module_name, |
269 | u32 line_number, | 267 | u32 line_number, |
270 | char *internal_name, acpi_status lookup_status); | 268 | const char *internal_name, acpi_status lookup_status); |
271 | 269 | ||
272 | void | 270 | void |
273 | acpi_ns_report_method_error(char *module_name, | 271 | acpi_ns_report_method_error(const char *module_name, |
274 | u32 line_number, | 272 | u32 line_number, |
275 | char *message, | 273 | const char *message, |
276 | struct acpi_namespace_node *node, | 274 | struct acpi_namespace_node *node, |
277 | char *path, acpi_status lookup_status); | 275 | const char *path, acpi_status lookup_status); |
278 | 276 | ||
279 | void acpi_ns_print_node_pathname(struct acpi_namespace_node *node, char *msg); | 277 | void |
278 | acpi_ns_print_node_pathname(struct acpi_namespace_node *node, const char *msg); | ||
280 | 279 | ||
281 | acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info); | 280 | acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info); |
282 | 281 | ||
283 | void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info); | 282 | void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info); |
284 | 283 | ||
285 | acpi_status acpi_ns_internalize_name(char *dotted_name, char **converted_name); | 284 | acpi_status |
285 | acpi_ns_internalize_name(const char *dotted_name, char **converted_name); | ||
286 | 286 | ||
287 | acpi_status | 287 | acpi_status |
288 | acpi_ns_externalize_name(u32 internal_name_length, | 288 | acpi_ns_externalize_name(u32 internal_name_length, |
289 | char *internal_name, | 289 | const char *internal_name, |
290 | u32 * converted_name_length, char **converted_name); | 290 | u32 * converted_name_length, char **converted_name); |
291 | 291 | ||
292 | struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle); | 292 | struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle); |
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 2f1c68c7a727..a5ac0bc7f52e 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -259,6 +259,7 @@ struct acpi_device_perf { | |||
259 | /* Wakeup Management */ | 259 | /* Wakeup Management */ |
260 | struct acpi_device_wakeup_flags { | 260 | struct acpi_device_wakeup_flags { |
261 | u8 valid:1; /* Can successfully enable wakeup? */ | 261 | u8 valid:1; /* Can successfully enable wakeup? */ |
262 | u8 prepared:1; /* Has the wake-up capability been enabled? */ | ||
262 | u8 run_wake:1; /* Run-Wake GPE devices */ | 263 | u8 run_wake:1; /* Run-Wake GPE devices */ |
263 | }; | 264 | }; |
264 | 265 | ||
@@ -335,6 +336,8 @@ void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context); | |||
335 | int acpi_bus_get_status(struct acpi_device *device); | 336 | int acpi_bus_get_status(struct acpi_device *device); |
336 | int acpi_bus_get_power(acpi_handle handle, int *state); | 337 | int acpi_bus_get_power(acpi_handle handle, int *state); |
337 | int acpi_bus_set_power(acpi_handle handle, int state); | 338 | int acpi_bus_set_power(acpi_handle handle, int state); |
339 | bool acpi_bus_power_manageable(acpi_handle handle); | ||
340 | bool acpi_bus_can_wakeup(acpi_handle handle); | ||
338 | #ifdef CONFIG_ACPI_PROC_EVENT | 341 | #ifdef CONFIG_ACPI_PROC_EVENT |
339 | int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data); | 342 | int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data); |
340 | int acpi_bus_generate_proc_event4(const char *class, const char *bid, u8 type, int data); | 343 | int acpi_bus_generate_proc_event4(const char *class, const char *bid, u8 type, int data); |
@@ -376,14 +379,19 @@ acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int); | |||
376 | #define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle)) | 379 | #define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle)) |
377 | 380 | ||
378 | #ifdef CONFIG_PM_SLEEP | 381 | #ifdef CONFIG_PM_SLEEP |
379 | int acpi_pm_device_sleep_state(struct device *, int, int *); | 382 | int acpi_pm_device_sleep_state(struct device *, int *); |
383 | int acpi_pm_device_sleep_wake(struct device *, bool); | ||
380 | #else /* !CONFIG_PM_SLEEP */ | 384 | #else /* !CONFIG_PM_SLEEP */ |
381 | static inline int acpi_pm_device_sleep_state(struct device *d, int w, int *p) | 385 | static inline int acpi_pm_device_sleep_state(struct device *d, int *p) |
382 | { | 386 | { |
383 | if (p) | 387 | if (p) |
384 | *p = ACPI_STATE_D0; | 388 | *p = ACPI_STATE_D0; |
385 | return ACPI_STATE_D3; | 389 | return ACPI_STATE_D3; |
386 | } | 390 | } |
391 | static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable) | ||
392 | { | ||
393 | return -ENODEV; | ||
394 | } | ||
387 | #endif /* !CONFIG_PM_SLEEP */ | 395 | #endif /* !CONFIG_PM_SLEEP */ |
388 | 396 | ||
389 | #endif /* CONFIG_ACPI */ | 397 | #endif /* CONFIG_ACPI */ |
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h index 9757a040a505..e5f38e5ce86f 100644 --- a/include/acpi/acpi_drivers.h +++ b/include/acpi/acpi_drivers.h | |||
@@ -87,7 +87,9 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_device *device, int domain, | |||
87 | -------------------------------------------------------------------------- */ | 87 | -------------------------------------------------------------------------- */ |
88 | 88 | ||
89 | #ifdef CONFIG_ACPI_POWER | 89 | #ifdef CONFIG_ACPI_POWER |
90 | int acpi_enable_wakeup_device_power(struct acpi_device *dev); | 90 | int acpi_device_sleep_wake(struct acpi_device *dev, |
91 | int enable, int sleep_state, int dev_state); | ||
92 | int acpi_enable_wakeup_device_power(struct acpi_device *dev, int sleep_state); | ||
91 | int acpi_disable_wakeup_device_power(struct acpi_device *dev); | 93 | int acpi_disable_wakeup_device_power(struct acpi_device *dev); |
92 | int acpi_power_get_inferred_state(struct acpi_device *device); | 94 | int acpi_power_get_inferred_state(struct acpi_device *device); |
93 | int acpi_power_transition(struct acpi_device *device, int state); | 95 | int acpi_power_transition(struct acpi_device *device, int state); |
diff --git a/include/acpi/acpiosxf.h b/include/acpi/acpiosxf.h index d4a560d2deb6..3f93a6b4e17f 100644 --- a/include/acpi/acpiosxf.h +++ b/include/acpi/acpiosxf.h | |||
@@ -144,7 +144,7 @@ void acpi_os_release_mutex(acpi_mutex handle); | |||
144 | void *acpi_os_allocate(acpi_size size); | 144 | void *acpi_os_allocate(acpi_size size); |
145 | 145 | ||
146 | void __iomem *acpi_os_map_memory(acpi_physical_address where, | 146 | void __iomem *acpi_os_map_memory(acpi_physical_address where, |
147 | acpi_native_uint length); | 147 | acpi_size length); |
148 | 148 | ||
149 | void acpi_os_unmap_memory(void __iomem * logical_address, acpi_size size); | 149 | void acpi_os_unmap_memory(void __iomem * logical_address, acpi_size size); |
150 | 150 | ||
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 2c3806e6546f..94d94e126e9f 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
@@ -98,7 +98,7 @@ void acpi_free(void *address); | |||
98 | */ | 98 | */ |
99 | acpi_status acpi_reallocate_root_table(void); | 99 | acpi_status acpi_reallocate_root_table(void); |
100 | 100 | ||
101 | acpi_status acpi_find_root_pointer(acpi_native_uint * rsdp_address); | 101 | acpi_status acpi_find_root_pointer(acpi_size *rsdp_address); |
102 | 102 | ||
103 | acpi_status acpi_load_tables(void); | 103 | acpi_status acpi_load_tables(void); |
104 | 104 | ||
@@ -108,15 +108,15 @@ acpi_status acpi_unload_table_id(acpi_owner_id id); | |||
108 | 108 | ||
109 | acpi_status | 109 | acpi_status |
110 | acpi_get_table_header(acpi_string signature, | 110 | acpi_get_table_header(acpi_string signature, |
111 | acpi_native_uint instance, | 111 | u32 instance, |
112 | struct acpi_table_header *out_table_header); | 112 | struct acpi_table_header *out_table_header); |
113 | 113 | ||
114 | acpi_status | 114 | acpi_status |
115 | acpi_get_table(acpi_string signature, | 115 | acpi_get_table(acpi_string signature, |
116 | acpi_native_uint instance, struct acpi_table_header **out_table); | 116 | u32 instance, struct acpi_table_header **out_table); |
117 | 117 | ||
118 | acpi_status | 118 | acpi_status |
119 | acpi_get_table_by_index(acpi_native_uint table_index, | 119 | acpi_get_table_by_index(u32 table_index, |
120 | struct acpi_table_header **out_table); | 120 | struct acpi_table_header **out_table); |
121 | 121 | ||
122 | acpi_status | 122 | acpi_status |
@@ -248,9 +248,7 @@ acpi_status acpi_disable_event(u32 event, u32 flags); | |||
248 | 248 | ||
249 | acpi_status acpi_clear_event(u32 event); | 249 | acpi_status acpi_clear_event(u32 event); |
250 | 250 | ||
251 | #ifdef ACPI_FUTURE_USAGE | ||
252 | acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status); | 251 | acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status); |
253 | #endif /* ACPI_FUTURE_USAGE */ | ||
254 | 252 | ||
255 | acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type); | 253 | acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type); |
256 | 254 | ||
@@ -260,12 +258,10 @@ acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags); | |||
260 | 258 | ||
261 | acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags); | 259 | acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags); |
262 | 260 | ||
263 | #ifdef ACPI_FUTURE_USAGE | ||
264 | acpi_status | 261 | acpi_status |
265 | acpi_get_gpe_status(acpi_handle gpe_device, | 262 | acpi_get_gpe_status(acpi_handle gpe_device, |
266 | u32 gpe_number, | 263 | u32 gpe_number, |
267 | u32 flags, acpi_event_status * event_status); | 264 | u32 flags, acpi_event_status * event_status); |
268 | #endif /* ACPI_FUTURE_USAGE */ | ||
269 | 265 | ||
270 | acpi_status | 266 | acpi_status |
271 | acpi_install_gpe_block(acpi_handle gpe_device, | 267 | acpi_install_gpe_block(acpi_handle gpe_device, |
diff --git a/include/acpi/acstruct.h b/include/acpi/acstruct.h index a907c67d651e..7980a26bad35 100644 --- a/include/acpi/acstruct.h +++ b/include/acpi/acstruct.h | |||
@@ -108,7 +108,6 @@ struct acpi_walk_state { | |||
108 | union acpi_operand_object **caller_return_desc; | 108 | union acpi_operand_object **caller_return_desc; |
109 | union acpi_generic_state *control_state; /* List of control states (nested IFs) */ | 109 | union acpi_generic_state *control_state; /* List of control states (nested IFs) */ |
110 | struct acpi_namespace_node *deferred_node; /* Used when executing deferred opcodes */ | 110 | struct acpi_namespace_node *deferred_node; /* Used when executing deferred opcodes */ |
111 | struct acpi_gpe_event_info *gpe_event_info; /* Info for GPE (_Lxx/_Exx methods only */ | ||
112 | union acpi_operand_object *implicit_return_obj; | 111 | union acpi_operand_object *implicit_return_obj; |
113 | struct acpi_namespace_node *method_call_node; /* Called method Node */ | 112 | struct acpi_namespace_node *method_call_node; /* Called method Node */ |
114 | union acpi_parse_object *method_call_op; /* method_call Op if running a method */ | 113 | union acpi_parse_object *method_call_op; /* method_call Op if running a method */ |
@@ -143,7 +142,7 @@ struct acpi_init_walk_info { | |||
143 | u16 package_init; | 142 | u16 package_init; |
144 | u16 object_count; | 143 | u16 object_count; |
145 | acpi_owner_id owner_id; | 144 | acpi_owner_id owner_id; |
146 | acpi_native_uint table_index; | 145 | u32 table_index; |
147 | }; | 146 | }; |
148 | 147 | ||
149 | struct acpi_get_devices_info { | 148 | struct acpi_get_devices_info { |
@@ -189,17 +188,12 @@ struct acpi_evaluate_info { | |||
189 | union acpi_operand_object **parameters; | 188 | union acpi_operand_object **parameters; |
190 | struct acpi_namespace_node *resolved_node; | 189 | struct acpi_namespace_node *resolved_node; |
191 | union acpi_operand_object *return_object; | 190 | union acpi_operand_object *return_object; |
191 | u8 param_count; | ||
192 | u8 pass_number; | 192 | u8 pass_number; |
193 | u8 parameter_type; | ||
194 | u8 return_object_type; | 193 | u8 return_object_type; |
195 | u8 flags; | 194 | u8 flags; |
196 | }; | 195 | }; |
197 | 196 | ||
198 | /* Types for parameter_type above */ | ||
199 | |||
200 | #define ACPI_PARAM_ARGS 0 | ||
201 | #define ACPI_PARAM_GPE 1 | ||
202 | |||
203 | /* Values for Flags above */ | 197 | /* Values for Flags above */ |
204 | 198 | ||
205 | #define ACPI_IGNORE_RETURN_VALUE 1 | 199 | #define ACPI_IGNORE_RETURN_VALUE 1 |
diff --git a/include/acpi/actables.h b/include/acpi/actables.h index 4b36a55b0b3b..0cbe1b9ab522 100644 --- a/include/acpi/actables.h +++ b/include/acpi/actables.h | |||
@@ -49,7 +49,7 @@ acpi_status acpi_allocate_root_table(u32 initial_table_count); | |||
49 | /* | 49 | /* |
50 | * tbfadt - FADT parse/convert/validate | 50 | * tbfadt - FADT parse/convert/validate |
51 | */ | 51 | */ |
52 | void acpi_tb_parse_fadt(acpi_native_uint table_index, u8 flags); | 52 | void acpi_tb_parse_fadt(u32 table_index, u8 flags); |
53 | 53 | ||
54 | void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length); | 54 | void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length); |
55 | 55 | ||
@@ -58,8 +58,7 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length); | |||
58 | */ | 58 | */ |
59 | acpi_status | 59 | acpi_status |
60 | acpi_tb_find_table(char *signature, | 60 | acpi_tb_find_table(char *signature, |
61 | char *oem_id, | 61 | char *oem_id, char *oem_table_id, u32 *table_index); |
62 | char *oem_table_id, acpi_native_uint * table_index); | ||
63 | 62 | ||
64 | /* | 63 | /* |
65 | * tbinstal - Table removal and deletion | 64 | * tbinstal - Table removal and deletion |
@@ -69,30 +68,28 @@ acpi_status acpi_tb_resize_root_table_list(void); | |||
69 | acpi_status acpi_tb_verify_table(struct acpi_table_desc *table_desc); | 68 | acpi_status acpi_tb_verify_table(struct acpi_table_desc *table_desc); |
70 | 69 | ||
71 | acpi_status | 70 | acpi_status |
72 | acpi_tb_add_table(struct acpi_table_desc *table_desc, | 71 | acpi_tb_add_table(struct acpi_table_desc *table_desc, u32 *table_index); |
73 | acpi_native_uint * table_index); | ||
74 | 72 | ||
75 | acpi_status | 73 | acpi_status |
76 | acpi_tb_store_table(acpi_physical_address address, | 74 | acpi_tb_store_table(acpi_physical_address address, |
77 | struct acpi_table_header *table, | 75 | struct acpi_table_header *table, |
78 | u32 length, u8 flags, acpi_native_uint * table_index); | 76 | u32 length, u8 flags, u32 *table_index); |
79 | 77 | ||
80 | void acpi_tb_delete_table(struct acpi_table_desc *table_desc); | 78 | void acpi_tb_delete_table(struct acpi_table_desc *table_desc); |
81 | 79 | ||
82 | void acpi_tb_terminate(void); | 80 | void acpi_tb_terminate(void); |
83 | 81 | ||
84 | void acpi_tb_delete_namespace_by_owner(acpi_native_uint table_index); | 82 | void acpi_tb_delete_namespace_by_owner(u32 table_index); |
85 | 83 | ||
86 | acpi_status acpi_tb_allocate_owner_id(acpi_native_uint table_index); | 84 | acpi_status acpi_tb_allocate_owner_id(u32 table_index); |
87 | 85 | ||
88 | acpi_status acpi_tb_release_owner_id(acpi_native_uint table_index); | 86 | acpi_status acpi_tb_release_owner_id(u32 table_index); |
89 | 87 | ||
90 | acpi_status | 88 | acpi_status acpi_tb_get_owner_id(u32 table_index, acpi_owner_id *owner_id); |
91 | acpi_tb_get_owner_id(acpi_native_uint table_index, acpi_owner_id * owner_id); | ||
92 | 89 | ||
93 | u8 acpi_tb_is_table_loaded(acpi_native_uint table_index); | 90 | u8 acpi_tb_is_table_loaded(u32 table_index); |
94 | 91 | ||
95 | void acpi_tb_set_table_loaded_flag(acpi_native_uint table_index, u8 is_loaded); | 92 | void acpi_tb_set_table_loaded_flag(u32 table_index, u8 is_loaded); |
96 | 93 | ||
97 | /* | 94 | /* |
98 | * tbutils - table manager utilities | 95 | * tbutils - table manager utilities |
@@ -103,14 +100,14 @@ void | |||
103 | acpi_tb_print_table_header(acpi_physical_address address, | 100 | acpi_tb_print_table_header(acpi_physical_address address, |
104 | struct acpi_table_header *header); | 101 | struct acpi_table_header *header); |
105 | 102 | ||
106 | u8 acpi_tb_checksum(u8 * buffer, acpi_native_uint length); | 103 | u8 acpi_tb_checksum(u8 *buffer, u32 length); |
107 | 104 | ||
108 | acpi_status | 105 | acpi_status |
109 | acpi_tb_verify_checksum(struct acpi_table_header *table, u32 length); | 106 | acpi_tb_verify_checksum(struct acpi_table_header *table, u32 length); |
110 | 107 | ||
111 | void | 108 | void |
112 | acpi_tb_install_table(acpi_physical_address address, | 109 | acpi_tb_install_table(acpi_physical_address address, |
113 | u8 flags, char *signature, acpi_native_uint table_index); | 110 | u8 flags, char *signature, u32 table_index); |
114 | 111 | ||
115 | acpi_status | 112 | acpi_status |
116 | acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags); | 113 | acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags); |
diff --git a/include/acpi/actbl1.h b/include/acpi/actbl1.h index 9af239bd1153..d38f9be2f6ee 100644 --- a/include/acpi/actbl1.h +++ b/include/acpi/actbl1.h | |||
@@ -300,6 +300,7 @@ struct acpi_table_dbgp { | |||
300 | /******************************************************************************* | 300 | /******************************************************************************* |
301 | * | 301 | * |
302 | * DMAR - DMA Remapping table | 302 | * DMAR - DMA Remapping table |
303 | * From "Intel Virtualization Technology for Directed I/O", Sept. 2007 | ||
303 | * | 304 | * |
304 | ******************************************************************************/ | 305 | ******************************************************************************/ |
305 | 306 | ||
@@ -310,6 +311,10 @@ struct acpi_table_dmar { | |||
310 | u8 reserved[10]; | 311 | u8 reserved[10]; |
311 | }; | 312 | }; |
312 | 313 | ||
314 | /* Flags */ | ||
315 | |||
316 | #define ACPI_DMAR_INTR_REMAP (1) | ||
317 | |||
313 | /* DMAR subtable header */ | 318 | /* DMAR subtable header */ |
314 | 319 | ||
315 | struct acpi_dmar_header { | 320 | struct acpi_dmar_header { |
@@ -382,6 +387,20 @@ struct acpi_dmar_reserved_memory { | |||
382 | 387 | ||
383 | #define ACPI_DMAR_ALLOW_ALL (1) | 388 | #define ACPI_DMAR_ALLOW_ALL (1) |
384 | 389 | ||
390 | |||
391 | /* 2: Root Port ATS Capability Reporting Structure */ | ||
392 | |||
393 | struct acpi_dmar_atsr { | ||
394 | struct acpi_dmar_header header; | ||
395 | u8 flags; | ||
396 | u8 reserved; | ||
397 | u16 segment; | ||
398 | }; | ||
399 | |||
400 | /* Flags */ | ||
401 | |||
402 | #define ACPI_DMAR_ALL_PORTS (1) | ||
403 | |||
385 | /******************************************************************************* | 404 | /******************************************************************************* |
386 | * | 405 | * |
387 | * ECDT - Embedded Controller Boot Resources Table | 406 | * ECDT - Embedded Controller Boot Resources Table |
@@ -1156,9 +1175,9 @@ struct acpi_srat_mem_affinity { | |||
1156 | u16 reserved; /* Reserved, must be zero */ | 1175 | u16 reserved; /* Reserved, must be zero */ |
1157 | u64 base_address; | 1176 | u64 base_address; |
1158 | u64 length; | 1177 | u64 length; |
1159 | u32 memory_type; /* See acpi_address_range_id */ | 1178 | u32 reserved1; |
1160 | u32 flags; | 1179 | u32 flags; |
1161 | u64 reserved1; /* Reserved, must be zero */ | 1180 | u64 reserved2; /* Reserved, must be zero */ |
1162 | }; | 1181 | }; |
1163 | 1182 | ||
1164 | /* Flags */ | 1183 | /* Flags */ |
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index dfea2d440488..4ea4f40bf894 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
@@ -110,10 +110,10 @@ | |||
110 | * usually used for memory allocation, efficient loop counters, and array | 110 | * usually used for memory allocation, efficient loop counters, and array |
111 | * indexes. The types are similar to the size_t type in the C library and are | 111 | * indexes. The types are similar to the size_t type in the C library and are |
112 | * required because there is no C type that consistently represents the native | 112 | * required because there is no C type that consistently represents the native |
113 | * data width. | 113 | * data width. ACPI_SIZE is needed because there is no guarantee that a |
114 | * kernel-level C library is present. | ||
114 | * | 115 | * |
115 | * ACPI_SIZE 16/32/64-bit unsigned value | 116 | * ACPI_SIZE 16/32/64-bit unsigned value |
116 | * ACPI_NATIVE_UINT 16/32/64-bit unsigned value | ||
117 | * ACPI_NATIVE_INT 16/32/64-bit signed value | 117 | * ACPI_NATIVE_INT 16/32/64-bit signed value |
118 | * | 118 | * |
119 | */ | 119 | */ |
@@ -147,9 +147,9 @@ typedef int INT32; | |||
147 | 147 | ||
148 | /*! [End] no source code translation !*/ | 148 | /*! [End] no source code translation !*/ |
149 | 149 | ||
150 | typedef u64 acpi_native_uint; | ||
151 | typedef s64 acpi_native_int; | 150 | typedef s64 acpi_native_int; |
152 | 151 | ||
152 | typedef u64 acpi_size; | ||
153 | typedef u64 acpi_io_address; | 153 | typedef u64 acpi_io_address; |
154 | typedef u64 acpi_physical_address; | 154 | typedef u64 acpi_physical_address; |
155 | 155 | ||
@@ -186,9 +186,9 @@ typedef int INT32; | |||
186 | 186 | ||
187 | /*! [End] no source code translation !*/ | 187 | /*! [End] no source code translation !*/ |
188 | 188 | ||
189 | typedef u32 acpi_native_uint; | ||
190 | typedef s32 acpi_native_int; | 189 | typedef s32 acpi_native_int; |
191 | 190 | ||
191 | typedef u32 acpi_size; | ||
192 | typedef u32 acpi_io_address; | 192 | typedef u32 acpi_io_address; |
193 | typedef u32 acpi_physical_address; | 193 | typedef u32 acpi_physical_address; |
194 | 194 | ||
@@ -202,10 +202,6 @@ typedef u32 acpi_physical_address; | |||
202 | #error unknown ACPI_MACHINE_WIDTH | 202 | #error unknown ACPI_MACHINE_WIDTH |
203 | #endif | 203 | #endif |
204 | 204 | ||
205 | /* Variable-width type, used instead of clib size_t */ | ||
206 | |||
207 | typedef acpi_native_uint acpi_size; | ||
208 | |||
209 | /******************************************************************************* | 205 | /******************************************************************************* |
210 | * | 206 | * |
211 | * OS-dependent and compiler-dependent types | 207 | * OS-dependent and compiler-dependent types |
@@ -219,7 +215,7 @@ typedef acpi_native_uint acpi_size; | |||
219 | /* Value returned by acpi_os_get_thread_id */ | 215 | /* Value returned by acpi_os_get_thread_id */ |
220 | 216 | ||
221 | #ifndef acpi_thread_id | 217 | #ifndef acpi_thread_id |
222 | #define acpi_thread_id acpi_native_uint | 218 | #define acpi_thread_id acpi_size |
223 | #endif | 219 | #endif |
224 | 220 | ||
225 | /* Object returned from acpi_os_create_lock */ | 221 | /* Object returned from acpi_os_create_lock */ |
@@ -231,7 +227,7 @@ typedef acpi_native_uint acpi_size; | |||
231 | /* Flags for acpi_os_acquire_lock/acpi_os_release_lock */ | 227 | /* Flags for acpi_os_acquire_lock/acpi_os_release_lock */ |
232 | 228 | ||
233 | #ifndef acpi_cpu_flags | 229 | #ifndef acpi_cpu_flags |
234 | #define acpi_cpu_flags acpi_native_uint | 230 | #define acpi_cpu_flags acpi_size |
235 | #endif | 231 | #endif |
236 | 232 | ||
237 | /* Object returned from acpi_os_create_cache */ | 233 | /* Object returned from acpi_os_create_cache */ |
diff --git a/include/acpi/acutils.h b/include/acpi/acutils.h index b42cadf07302..69f8888771ff 100644 --- a/include/acpi/acutils.h +++ b/include/acpi/acutils.h | |||
@@ -172,7 +172,7 @@ char *acpi_ut_strstr(char *string1, char *string2); | |||
172 | 172 | ||
173 | void *acpi_ut_memcpy(void *dest, const void *src, acpi_size count); | 173 | void *acpi_ut_memcpy(void *dest, const void *src, acpi_size count); |
174 | 174 | ||
175 | void *acpi_ut_memset(void *dest, acpi_native_uint value, acpi_size count); | 175 | void *acpi_ut_memset(void *dest, u8 value, acpi_size count); |
176 | 176 | ||
177 | int acpi_ut_to_upper(int c); | 177 | int acpi_ut_to_upper(int c); |
178 | 178 | ||
@@ -245,41 +245,45 @@ void acpi_ut_track_stack_ptr(void); | |||
245 | 245 | ||
246 | void | 246 | void |
247 | acpi_ut_trace(u32 line_number, | 247 | acpi_ut_trace(u32 line_number, |
248 | const char *function_name, char *module_name, u32 component_id); | 248 | const char *function_name, |
249 | const char *module_name, u32 component_id); | ||
249 | 250 | ||
250 | void | 251 | void |
251 | acpi_ut_trace_ptr(u32 line_number, | 252 | acpi_ut_trace_ptr(u32 line_number, |
252 | const char *function_name, | 253 | const char *function_name, |
253 | char *module_name, u32 component_id, void *pointer); | 254 | const char *module_name, u32 component_id, void *pointer); |
254 | 255 | ||
255 | void | 256 | void |
256 | acpi_ut_trace_u32(u32 line_number, | 257 | acpi_ut_trace_u32(u32 line_number, |
257 | const char *function_name, | 258 | const char *function_name, |
258 | char *module_name, u32 component_id, u32 integer); | 259 | const char *module_name, u32 component_id, u32 integer); |
259 | 260 | ||
260 | void | 261 | void |
261 | acpi_ut_trace_str(u32 line_number, | 262 | acpi_ut_trace_str(u32 line_number, |
262 | const char *function_name, | 263 | const char *function_name, |
263 | char *module_name, u32 component_id, char *string); | 264 | const char *module_name, u32 component_id, char *string); |
264 | 265 | ||
265 | void | 266 | void |
266 | acpi_ut_exit(u32 line_number, | 267 | acpi_ut_exit(u32 line_number, |
267 | const char *function_name, char *module_name, u32 component_id); | 268 | const char *function_name, |
269 | const char *module_name, u32 component_id); | ||
268 | 270 | ||
269 | void | 271 | void |
270 | acpi_ut_status_exit(u32 line_number, | 272 | acpi_ut_status_exit(u32 line_number, |
271 | const char *function_name, | 273 | const char *function_name, |
272 | char *module_name, u32 component_id, acpi_status status); | 274 | const char *module_name, |
275 | u32 component_id, acpi_status status); | ||
273 | 276 | ||
274 | void | 277 | void |
275 | acpi_ut_value_exit(u32 line_number, | 278 | acpi_ut_value_exit(u32 line_number, |
276 | const char *function_name, | 279 | const char *function_name, |
277 | char *module_name, u32 component_id, acpi_integer value); | 280 | const char *module_name, |
281 | u32 component_id, acpi_integer value); | ||
278 | 282 | ||
279 | void | 283 | void |
280 | acpi_ut_ptr_exit(u32 line_number, | 284 | acpi_ut_ptr_exit(u32 line_number, |
281 | const char *function_name, | 285 | const char *function_name, |
282 | char *module_name, u32 component_id, u8 * ptr); | 286 | const char *module_name, u32 component_id, u8 *ptr); |
283 | 287 | ||
284 | void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id); | 288 | void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id); |
285 | 289 | ||
@@ -297,33 +301,35 @@ void ACPI_INTERNAL_VAR_XFACE | |||
297 | acpi_ut_debug_print(u32 requested_debug_level, | 301 | acpi_ut_debug_print(u32 requested_debug_level, |
298 | u32 line_number, | 302 | u32 line_number, |
299 | const char *function_name, | 303 | const char *function_name, |
300 | char *module_name, | 304 | const char *module_name, |
301 | u32 component_id, char *format, ...) ACPI_PRINTF_LIKE(6); | 305 | u32 component_id, |
306 | const char *format, ...) ACPI_PRINTF_LIKE(6); | ||
302 | 307 | ||
303 | void ACPI_INTERNAL_VAR_XFACE | 308 | void ACPI_INTERNAL_VAR_XFACE |
304 | acpi_ut_debug_print_raw(u32 requested_debug_level, | 309 | acpi_ut_debug_print_raw(u32 requested_debug_level, |
305 | u32 line_number, | 310 | u32 line_number, |
306 | const char *function_name, | 311 | const char *function_name, |
307 | char *module_name, | 312 | const char *module_name, |
308 | u32 component_id, | 313 | u32 component_id, |
309 | char *format, ...) ACPI_PRINTF_LIKE(6); | 314 | const char *format, ...) ACPI_PRINTF_LIKE(6); |
310 | 315 | ||
311 | void ACPI_INTERNAL_VAR_XFACE | 316 | void ACPI_INTERNAL_VAR_XFACE |
312 | acpi_ut_error(char *module_name, | 317 | acpi_ut_error(const char *module_name, |
313 | u32 line_number, char *format, ...) ACPI_PRINTF_LIKE(3); | 318 | u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); |
314 | 319 | ||
315 | void ACPI_INTERNAL_VAR_XFACE | 320 | void ACPI_INTERNAL_VAR_XFACE |
316 | acpi_ut_exception(char *module_name, | 321 | acpi_ut_exception(const char *module_name, |
317 | u32 line_number, | 322 | u32 line_number, |
318 | acpi_status status, char *format, ...) ACPI_PRINTF_LIKE(4); | 323 | acpi_status status, |
324 | const char *format, ...) ACPI_PRINTF_LIKE(4); | ||
319 | 325 | ||
320 | void ACPI_INTERNAL_VAR_XFACE | 326 | void ACPI_INTERNAL_VAR_XFACE |
321 | acpi_ut_warning(char *module_name, | 327 | acpi_ut_warning(const char *module_name, |
322 | u32 line_number, char *format, ...) ACPI_PRINTF_LIKE(3); | 328 | u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); |
323 | 329 | ||
324 | void ACPI_INTERNAL_VAR_XFACE | 330 | void ACPI_INTERNAL_VAR_XFACE |
325 | acpi_ut_info(char *module_name, | 331 | acpi_ut_info(const char *module_name, |
326 | u32 line_number, char *format, ...) ACPI_PRINTF_LIKE(3); | 332 | u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); |
327 | 333 | ||
328 | /* | 334 | /* |
329 | * utdelete - Object deletion and reference counts | 335 | * utdelete - Object deletion and reference counts |
@@ -376,13 +382,14 @@ acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest); | |||
376 | /* | 382 | /* |
377 | * utobject - internal object create/delete/cache routines | 383 | * utobject - internal object create/delete/cache routines |
378 | */ | 384 | */ |
379 | union acpi_operand_object *acpi_ut_create_internal_object_dbg(char *module_name, | 385 | union acpi_operand_object *acpi_ut_create_internal_object_dbg(const char |
386 | *module_name, | ||
380 | u32 line_number, | 387 | u32 line_number, |
381 | u32 component_id, | 388 | u32 component_id, |
382 | acpi_object_type | 389 | acpi_object_type |
383 | type); | 390 | type); |
384 | 391 | ||
385 | void *acpi_ut_allocate_object_desc_dbg(char *module_name, | 392 | void *acpi_ut_allocate_object_desc_dbg(const char *module_name, |
386 | u32 line_number, u32 component_id); | 393 | u32 line_number, u32 component_id); |
387 | 394 | ||
388 | #define acpi_ut_create_internal_object(t) acpi_ut_create_internal_object_dbg (_acpi_module_name,__LINE__,_COMPONENT,t) | 395 | #define acpi_ut_create_internal_object(t) acpi_ut_create_internal_object_dbg (_acpi_module_name,__LINE__,_COMPONENT,t) |
@@ -476,7 +483,7 @@ u8 acpi_ut_valid_acpi_name(u32 name); | |||
476 | 483 | ||
477 | acpi_name acpi_ut_repair_name(char *name); | 484 | acpi_name acpi_ut_repair_name(char *name); |
478 | 485 | ||
479 | u8 acpi_ut_valid_acpi_char(char character, acpi_native_uint position); | 486 | u8 acpi_ut_valid_acpi_char(char character, u32 position); |
480 | 487 | ||
481 | acpi_status | 488 | acpi_status |
482 | acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer); | 489 | acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer); |
@@ -543,26 +550,29 @@ acpi_status | |||
543 | acpi_ut_initialize_buffer(struct acpi_buffer *buffer, | 550 | acpi_ut_initialize_buffer(struct acpi_buffer *buffer, |
544 | acpi_size required_length); | 551 | acpi_size required_length); |
545 | 552 | ||
546 | void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line); | 553 | void *acpi_ut_allocate(acpi_size size, |
554 | u32 component, const char *module, u32 line); | ||
547 | 555 | ||
548 | void *acpi_ut_allocate_zeroed(acpi_size size, | 556 | void *acpi_ut_allocate_zeroed(acpi_size size, |
549 | u32 component, char *module, u32 line); | 557 | u32 component, const char *module, u32 line); |
550 | 558 | ||
551 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | 559 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS |
552 | void *acpi_ut_allocate_and_track(acpi_size size, | 560 | void *acpi_ut_allocate_and_track(acpi_size size, |
553 | u32 component, char *module, u32 line); | 561 | u32 component, const char *module, u32 line); |
554 | 562 | ||
555 | void *acpi_ut_allocate_zeroed_and_track(acpi_size size, | 563 | void *acpi_ut_allocate_zeroed_and_track(acpi_size size, |
556 | u32 component, char *module, u32 line); | 564 | u32 component, |
565 | const char *module, u32 line); | ||
557 | 566 | ||
558 | void | 567 | void |
559 | acpi_ut_free_and_track(void *address, u32 component, char *module, u32 line); | 568 | acpi_ut_free_and_track(void *address, |
569 | u32 component, const char *module, u32 line); | ||
560 | 570 | ||
561 | #ifdef ACPI_FUTURE_USAGE | 571 | #ifdef ACPI_FUTURE_USAGE |
562 | void acpi_ut_dump_allocation_info(void); | 572 | void acpi_ut_dump_allocation_info(void); |
563 | #endif /* ACPI_FUTURE_USAGE */ | 573 | #endif /* ACPI_FUTURE_USAGE */ |
564 | 574 | ||
565 | void acpi_ut_dump_allocations(u32 component, char *module); | 575 | void acpi_ut_dump_allocations(u32 component, const char *module); |
566 | 576 | ||
567 | acpi_status | 577 | acpi_status |
568 | acpi_ut_create_list(char *list_name, | 578 | acpi_ut_create_list(char *list_name, |
diff --git a/include/acpi/processor.h b/include/acpi/processor.h index 06ebb6ef72aa..3795590e152a 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h | |||
@@ -255,7 +255,7 @@ extern void acpi_processor_unregister_performance(struct | |||
255 | int acpi_processor_notify_smm(struct module *calling_module); | 255 | int acpi_processor_notify_smm(struct module *calling_module); |
256 | 256 | ||
257 | /* for communication between multiple parts of the processor kernel module */ | 257 | /* for communication between multiple parts of the processor kernel module */ |
258 | extern struct acpi_processor *processors[NR_CPUS]; | 258 | DECLARE_PER_CPU(struct acpi_processor *, processors); |
259 | extern struct acpi_processor_errata errata; | 259 | extern struct acpi_processor_errata errata; |
260 | 260 | ||
261 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr); | 261 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr); |
diff --git a/include/acpi/reboot.h b/include/acpi/reboot.h index 8857f57e0b78..0419184ce886 100644 --- a/include/acpi/reboot.h +++ b/include/acpi/reboot.h | |||
@@ -1,9 +1,11 @@ | |||
1 | #ifndef __ACPI_REBOOT_H | ||
2 | #define __ACPI_REBOOT_H | ||
3 | |||
4 | #ifdef CONFIG_ACPI | ||
5 | extern void acpi_reboot(void); | ||
6 | #else | ||
7 | static inline void acpi_reboot(void) { } | ||
8 | #endif | ||
1 | 9 | ||
2 | /* | ||
3 | * Dummy placeholder to make the EFI patches apply to the x86 tree. | ||
4 | * Andrew/Len, please just kill this file if you encounter it. | ||
5 | */ | ||
6 | #ifndef acpi_reboot | ||
7 | # define acpi_reboot() do { } while (0) | ||
8 | #endif | 10 | #endif |
9 | 11 | ||
diff --git a/include/asm-alpha/smp.h b/include/asm-alpha/smp.h index 286e1d844f63..544c69af8168 100644 --- a/include/asm-alpha/smp.h +++ b/include/asm-alpha/smp.h | |||
@@ -47,12 +47,13 @@ extern struct cpuinfo_alpha cpu_data[NR_CPUS]; | |||
47 | extern int smp_num_cpus; | 47 | extern int smp_num_cpus; |
48 | #define cpu_possible_map cpu_present_map | 48 | #define cpu_possible_map cpu_present_map |
49 | 49 | ||
50 | int smp_call_function_on_cpu(void (*func) (void *info), void *info,int retry, int wait, cpumask_t cpu); | 50 | extern void arch_send_call_function_single_ipi(int cpu); |
51 | extern void arch_send_call_function_ipi(cpumask_t mask); | ||
51 | 52 | ||
52 | #else /* CONFIG_SMP */ | 53 | #else /* CONFIG_SMP */ |
53 | 54 | ||
54 | #define hard_smp_processor_id() 0 | 55 | #define hard_smp_processor_id() 0 |
55 | #define smp_call_function_on_cpu(func,info,retry,wait,cpu) ({ 0; }) | 56 | #define smp_call_function_on_cpu(func,info,wait,cpu) ({ 0; }) |
56 | 57 | ||
57 | #endif /* CONFIG_SMP */ | 58 | #endif /* CONFIG_SMP */ |
58 | 59 | ||
diff --git a/include/asm-arm/arch-at91/at91_mci.h b/include/asm-arm/arch-at91/at91_mci.h index 1551fc24eb43..400ec10014b4 100644 --- a/include/asm-arm/arch-at91/at91_mci.h +++ b/include/asm-arm/arch-at91/at91_mci.h | |||
@@ -75,6 +75,10 @@ | |||
75 | #define AT91_MCI_TRTYP_MULTIPLE (1 << 19) | 75 | #define AT91_MCI_TRTYP_MULTIPLE (1 << 19) |
76 | #define AT91_MCI_TRTYP_STREAM (2 << 19) | 76 | #define AT91_MCI_TRTYP_STREAM (2 << 19) |
77 | 77 | ||
78 | #define AT91_MCI_BLKR 0x18 /* Block Register */ | ||
79 | #define AT91_MCI_BLKR_BCNT(n) ((0xffff & (n)) << 0) /* Block count */ | ||
80 | #define AT91_MCI_BLKR_BLKLEN(n) ((0xffff & (n)) << 16) /* Block lenght */ | ||
81 | |||
78 | #define AT91_MCI_RSPR(n) (0x20 + ((n) * 4)) /* Response Registers 0-3 */ | 82 | #define AT91_MCI_RSPR(n) (0x20 + ((n) * 4)) /* Response Registers 0-3 */ |
79 | #define AT91_MCR_RDR 0x30 /* Receive Data Register */ | 83 | #define AT91_MCR_RDR 0x30 /* Receive Data Register */ |
80 | #define AT91_MCR_TDR 0x34 /* Transmit Data Register */ | 84 | #define AT91_MCR_TDR 0x34 /* Transmit Data Register */ |
diff --git a/include/asm-arm/arch-at91/at91_pmc.h b/include/asm-arm/arch-at91/at91_pmc.h index c2b13c280155..2001e81f2267 100644 --- a/include/asm-arm/arch-at91/at91_pmc.h +++ b/include/asm-arm/arch-at91/at91_pmc.h | |||
@@ -39,10 +39,14 @@ | |||
39 | #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */ | 39 | #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */ |
40 | 40 | ||
41 | #define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [SAM9RL, CAP9] */ | 41 | #define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [SAM9RL, CAP9] */ |
42 | #define AT91_PMC_UPLLEN (1 << 16) /* UTMI PLL Enable */ | ||
43 | #define AT91_PMC_UPLLCOUNT (0xf << 20) /* UTMI PLL Start-up Time */ | ||
44 | #define AT91_PMC_BIASEN (1 << 24) /* UTMI BIAS Enable */ | ||
45 | #define AT91_PMC_BIASCOUNT (0xf << 28) /* UTMI PLL Start-up Time */ | ||
42 | 46 | ||
43 | #define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */ | 47 | #define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */ |
44 | #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */ | 48 | #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */ |
45 | #define AT91_PMC_OSCBYPASS (1 << 1) /* Oscillator Bypass [AT91SAM926x only] */ | 49 | #define AT91_PMC_OSCBYPASS (1 << 1) /* Oscillator Bypass [SAM9x, CAP9] */ |
46 | #define AT91_PMC_OSCOUNT (0xff << 8) /* Main Oscillator Start-up Time */ | 50 | #define AT91_PMC_OSCOUNT (0xff << 8) /* Main Oscillator Start-up Time */ |
47 | 51 | ||
48 | #define AT91_CKGR_MCFR (AT91_PMC + 0x24) /* Main Clock Frequency Register */ | 52 | #define AT91_CKGR_MCFR (AT91_PMC + 0x24) /* Main Clock Frequency Register */ |
@@ -97,6 +101,7 @@ | |||
97 | #define AT91_PMC_LOCKA (1 << 1) /* PLLA Lock */ | 101 | #define AT91_PMC_LOCKA (1 << 1) /* PLLA Lock */ |
98 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ | 102 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ |
99 | #define AT91_PMC_MCKRDY (1 << 3) /* Master Clock */ | 103 | #define AT91_PMC_MCKRDY (1 << 3) /* Master Clock */ |
104 | #define AT91_PMC_LOCKU (1 << 6) /* UPLL Lock [AT91CAP9 only] */ | ||
100 | #define AT91_PMC_PCK0RDY (1 << 8) /* Programmable Clock 0 */ | 105 | #define AT91_PMC_PCK0RDY (1 << 8) /* Programmable Clock 0 */ |
101 | #define AT91_PMC_PCK1RDY (1 << 9) /* Programmable Clock 1 */ | 106 | #define AT91_PMC_PCK1RDY (1 << 9) /* Programmable Clock 1 */ |
102 | #define AT91_PMC_PCK2RDY (1 << 10) /* Programmable Clock 2 */ | 107 | #define AT91_PMC_PCK2RDY (1 << 10) /* Programmable Clock 2 */ |
diff --git a/include/asm-arm/arch-at91/at91cap9.h b/include/asm-arm/arch-at91/at91cap9.h index bac83adb5050..6f14d9053ac7 100644 --- a/include/asm-arm/arch-at91/at91cap9.h +++ b/include/asm-arm/arch-at91/at91cap9.h | |||
@@ -118,7 +118,7 @@ | |||
118 | #define AT91CAP9_ROM_SIZE (32 * SZ_1K) /* Internal ROM size (32Kb) */ | 118 | #define AT91CAP9_ROM_SIZE (32 * SZ_1K) /* Internal ROM size (32Kb) */ |
119 | 119 | ||
120 | #define AT91CAP9_LCDC_BASE 0x00500000 /* LCD Controller */ | 120 | #define AT91CAP9_LCDC_BASE 0x00500000 /* LCD Controller */ |
121 | #define AT91CAP9_UDPHS_BASE 0x00600000 /* USB High Speed Device Port */ | 121 | #define AT91CAP9_UDPHS_FIFO 0x00600000 /* USB High Speed Device Port */ |
122 | #define AT91CAP9_UHP_BASE 0x00700000 /* USB Host controller */ | 122 | #define AT91CAP9_UHP_BASE 0x00700000 /* USB Host controller */ |
123 | 123 | ||
124 | #define CONFIG_DRAM_BASE AT91_CHIPSELECT_6 | 124 | #define CONFIG_DRAM_BASE AT91_CHIPSELECT_6 |
diff --git a/include/asm-arm/arch-at91/at91cap9_matrix.h b/include/asm-arm/arch-at91/at91cap9_matrix.h index a641686b6c3d..ddbd4873c842 100644 --- a/include/asm-arm/arch-at91/at91cap9_matrix.h +++ b/include/asm-arm/arch-at91/at91cap9_matrix.h | |||
@@ -106,6 +106,11 @@ | |||
106 | #define AT91_MPBS0_SFR (AT91_MATRIX + 0x114) /* MPBlock Slave 0 Special Function Register */ | 106 | #define AT91_MPBS0_SFR (AT91_MATRIX + 0x114) /* MPBlock Slave 0 Special Function Register */ |
107 | #define AT91_MPBS1_SFR (AT91_MATRIX + 0x11C) /* MPBlock Slave 1 Special Function Register */ | 107 | #define AT91_MPBS1_SFR (AT91_MATRIX + 0x11C) /* MPBlock Slave 1 Special Function Register */ |
108 | 108 | ||
109 | #define AT91_MATRIX_UDPHS (AT91_MATRIX + 0x118) /* USBHS Special Function Register [AT91CAP9 only] */ | ||
110 | #define AT91_MATRIX_SELECT_UDPHS (0 << 31) /* select High Speed UDP */ | ||
111 | #define AT91_MATRIX_SELECT_UDP (1 << 31) /* select standard UDP */ | ||
112 | #define AT91_MATRIX_UDPHS_BYPASS_LOCK (1 << 30) /* bypass lock bit */ | ||
113 | |||
109 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x120) /* EBI Chip Select Assignment Register */ | 114 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x120) /* EBI Chip Select Assignment Register */ |
110 | #define AT91_MATRIX_EBI_CS1A (1 << 1) /* Chip Select 1 Assignment */ | 115 | #define AT91_MATRIX_EBI_CS1A (1 << 1) /* Chip Select 1 Assignment */ |
111 | #define AT91_MATRIX_EBI_CS1A_SMC (0 << 1) | 116 | #define AT91_MATRIX_EBI_CS1A_SMC (0 << 1) |
diff --git a/include/asm-arm/arch-at91/at91sam9260.h b/include/asm-arm/arch-at91/at91sam9260.h index c8934fe34dc5..889872a3f2a9 100644 --- a/include/asm-arm/arch-at91/at91sam9260.h +++ b/include/asm-arm/arch-at91/at91sam9260.h | |||
@@ -6,6 +6,8 @@ | |||
6 | * Common definitions. | 6 | * Common definitions. |
7 | * Based on AT91SAM9260 datasheet revision A (Preliminary). | 7 | * Based on AT91SAM9260 datasheet revision A (Preliminary). |
8 | * | 8 | * |
9 | * Includes also definitions for AT91SAM9XE and AT91SAM9G families | ||
10 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
10 | * 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 |
11 | * the Free Software Foundation; either version 2 of the License, or | 13 | * the Free Software Foundation; either version 2 of the License, or |
@@ -123,5 +125,14 @@ | |||
123 | #define AT91SAM9XE_FLASH_BASE 0x00200000 /* Internal FLASH base address */ | 125 | #define AT91SAM9XE_FLASH_BASE 0x00200000 /* Internal FLASH base address */ |
124 | #define AT91SAM9XE_SRAM_BASE 0x00300000 /* Internal SRAM base address */ | 126 | #define AT91SAM9XE_SRAM_BASE 0x00300000 /* Internal SRAM base address */ |
125 | 127 | ||
128 | #define AT91SAM9G20_ROM_BASE 0x00100000 /* Internal ROM base address */ | ||
129 | #define AT91SAM9G20_ROM_SIZE SZ_32K /* Internal ROM size (32Kb) */ | ||
130 | |||
131 | #define AT91SAM9G20_SRAM0_BASE 0x00200000 /* Internal SRAM 0 base address */ | ||
132 | #define AT91SAM9G20_SRAM0_SIZE SZ_16K /* Internal SRAM 0 size (16Kb) */ | ||
133 | #define AT91SAM9G20_SRAM1_BASE 0x00300000 /* Internal SRAM 1 base address */ | ||
134 | #define AT91SAM9G20_SRAM1_SIZE SZ_16K /* Internal SRAM 1 size (16Kb) */ | ||
135 | |||
136 | #define AT91SAM9G20_UHP_BASE 0x00500000 /* USB Host controller */ | ||
126 | 137 | ||
127 | #endif | 138 | #endif |
diff --git a/include/asm-arm/arch-at91/at91sam9rl.h b/include/asm-arm/arch-at91/at91sam9rl.h index 16d2832f6c0a..622e56f81d42 100644 --- a/include/asm-arm/arch-at91/at91sam9rl.h +++ b/include/asm-arm/arch-at91/at91sam9rl.h | |||
@@ -110,6 +110,6 @@ | |||
110 | #define AT91SAM9RL_ROM_SIZE (2 * SZ_16K) /* Internal ROM size (32Kb) */ | 110 | #define AT91SAM9RL_ROM_SIZE (2 * SZ_16K) /* Internal ROM size (32Kb) */ |
111 | 111 | ||
112 | #define AT91SAM9RL_LCDC_BASE 0x00500000 /* LCD Controller */ | 112 | #define AT91SAM9RL_LCDC_BASE 0x00500000 /* LCD Controller */ |
113 | #define AT91SAM9RL_UDPHS_BASE 0x00600000 /* USB Device HS controller */ | 113 | #define AT91SAM9RL_UDPHS_FIFO 0x00600000 /* USB Device HS controller */ |
114 | 114 | ||
115 | #endif | 115 | #endif |
diff --git a/include/asm-arm/arch-at91/board.h b/include/asm-arm/arch-at91/board.h index dc189f01c5b3..94de788da76e 100644 --- a/include/asm-arm/arch-at91/board.h +++ b/include/asm-arm/arch-at91/board.h | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/i2c.h> | 36 | #include <linux/i2c.h> |
37 | #include <linux/leds.h> | 37 | #include <linux/leds.h> |
38 | #include <linux/spi/spi.h> | 38 | #include <linux/spi/spi.h> |
39 | #include <linux/usb/atmel_usba_udc.h> | ||
39 | 40 | ||
40 | /* USB Device */ | 41 | /* USB Device */ |
41 | struct at91_udc_data { | 42 | struct at91_udc_data { |
@@ -45,6 +46,9 @@ struct at91_udc_data { | |||
45 | }; | 46 | }; |
46 | extern void __init at91_add_device_udc(struct at91_udc_data *data); | 47 | extern void __init at91_add_device_udc(struct at91_udc_data *data); |
47 | 48 | ||
49 | /* USB High Speed Device */ | ||
50 | extern void __init at91_add_device_usba(struct usba_platform_data *data); | ||
51 | |||
48 | /* Compact Flash */ | 52 | /* Compact Flash */ |
49 | struct at91_cf_data { | 53 | struct at91_cf_data { |
50 | u8 irq_pin; /* I/O IRQ */ | 54 | u8 irq_pin; /* I/O IRQ */ |
@@ -73,7 +77,7 @@ struct at91_eth_data { | |||
73 | }; | 77 | }; |
74 | extern void __init at91_add_device_eth(struct at91_eth_data *data); | 78 | extern void __init at91_add_device_eth(struct at91_eth_data *data); |
75 | 79 | ||
76 | #if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91CAP9) | 80 | #if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91SAM9G20) || defined(CONFIG_ARCH_AT91CAP9) |
77 | #define eth_platform_data at91_eth_data | 81 | #define eth_platform_data at91_eth_data |
78 | #endif | 82 | #endif |
79 | 83 | ||
diff --git a/include/asm-arm/arch-at91/cpu.h b/include/asm-arm/arch-at91/cpu.h index 7145166826a2..52df794205cb 100644 --- a/include/asm-arm/arch-at91/cpu.h +++ b/include/asm-arm/arch-at91/cpu.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #define ARCH_ID_AT91SAM9260 0x019803a0 | 21 | #define ARCH_ID_AT91SAM9260 0x019803a0 |
22 | #define ARCH_ID_AT91SAM9261 0x019703a0 | 22 | #define ARCH_ID_AT91SAM9261 0x019703a0 |
23 | #define ARCH_ID_AT91SAM9263 0x019607a0 | 23 | #define ARCH_ID_AT91SAM9263 0x019607a0 |
24 | #define ARCH_ID_AT91SAM9G20 0x019905a0 | ||
24 | #define ARCH_ID_AT91SAM9RL64 0x019b03a0 | 25 | #define ARCH_ID_AT91SAM9RL64 0x019b03a0 |
25 | #define ARCH_ID_AT91CAP9 0x039A03A0 | 26 | #define ARCH_ID_AT91CAP9 0x039A03A0 |
26 | 27 | ||
@@ -63,6 +64,12 @@ static inline unsigned long at91_arch_identify(void) | |||
63 | #define cpu_is_at91sam9260() (0) | 64 | #define cpu_is_at91sam9260() (0) |
64 | #endif | 65 | #endif |
65 | 66 | ||
67 | #ifdef CONFIG_ARCH_AT91SAM9G20 | ||
68 | #define cpu_is_at91sam9g20() (at91_cpu_identify() == ARCH_ID_AT91SAM9G20) | ||
69 | #else | ||
70 | #define cpu_is_at91sam9g20() (0) | ||
71 | #endif | ||
72 | |||
66 | #ifdef CONFIG_ARCH_AT91SAM9261 | 73 | #ifdef CONFIG_ARCH_AT91SAM9261 |
67 | #define cpu_is_at91sam9261() (at91_cpu_identify() == ARCH_ID_AT91SAM9261) | 74 | #define cpu_is_at91sam9261() (at91_cpu_identify() == ARCH_ID_AT91SAM9261) |
68 | #else | 75 | #else |
diff --git a/include/asm-arm/arch-at91/hardware.h b/include/asm-arm/arch-at91/hardware.h index 2c826d8247a3..016a3a3f6633 100644 --- a/include/asm-arm/arch-at91/hardware.h +++ b/include/asm-arm/arch-at91/hardware.h | |||
@@ -18,7 +18,7 @@ | |||
18 | 18 | ||
19 | #if defined(CONFIG_ARCH_AT91RM9200) | 19 | #if defined(CONFIG_ARCH_AT91RM9200) |
20 | #include <asm/arch/at91rm9200.h> | 20 | #include <asm/arch/at91rm9200.h> |
21 | #elif defined(CONFIG_ARCH_AT91SAM9260) | 21 | #elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20) |
22 | #include <asm/arch/at91sam9260.h> | 22 | #include <asm/arch/at91sam9260.h> |
23 | #elif defined(CONFIG_ARCH_AT91SAM9261) | 23 | #elif defined(CONFIG_ARCH_AT91SAM9261) |
24 | #include <asm/arch/at91sam9261.h> | 24 | #include <asm/arch/at91sam9261.h> |
diff --git a/include/asm-arm/arch-at91/timex.h b/include/asm-arm/arch-at91/timex.h index f1933b0fa43f..298d8313cdac 100644 --- a/include/asm-arm/arch-at91/timex.h +++ b/include/asm-arm/arch-at91/timex.h | |||
@@ -27,14 +27,29 @@ | |||
27 | 27 | ||
28 | #define CLOCK_TICK_RATE (AT91_SLOW_CLOCK) | 28 | #define CLOCK_TICK_RATE (AT91_SLOW_CLOCK) |
29 | 29 | ||
30 | #elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9261) | 30 | #elif defined(CONFIG_ARCH_AT91SAM9260) |
31 | |||
32 | #if defined(CONFIG_MACH_USB_A9260) || defined(CONFIG_MACH_QIL_A9260) | ||
33 | #define AT91SAM9_MASTER_CLOCK 90000000 | ||
34 | #else | ||
35 | #define AT91SAM9_MASTER_CLOCK 99300000 | ||
36 | #endif | ||
37 | |||
38 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | ||
39 | |||
40 | #elif defined(CONFIG_ARCH_AT91SAM9261) | ||
31 | 41 | ||
32 | #define AT91SAM9_MASTER_CLOCK 99300000 | 42 | #define AT91SAM9_MASTER_CLOCK 99300000 |
33 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | 43 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) |
34 | 44 | ||
35 | #elif defined(CONFIG_ARCH_AT91SAM9263) | 45 | #elif defined(CONFIG_ARCH_AT91SAM9263) |
36 | 46 | ||
47 | #if defined(CONFIG_MACH_USB_A9263) | ||
48 | #define AT91SAM9_MASTER_CLOCK 90000000 | ||
49 | #else | ||
37 | #define AT91SAM9_MASTER_CLOCK 99959500 | 50 | #define AT91SAM9_MASTER_CLOCK 99959500 |
51 | #endif | ||
52 | |||
38 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | 53 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) |
39 | 54 | ||
40 | #elif defined(CONFIG_ARCH_AT91SAM9RL) | 55 | #elif defined(CONFIG_ARCH_AT91SAM9RL) |
@@ -42,6 +57,11 @@ | |||
42 | #define AT91SAM9_MASTER_CLOCK 100000000 | 57 | #define AT91SAM9_MASTER_CLOCK 100000000 |
43 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | 58 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) |
44 | 59 | ||
60 | #elif defined(CONFIG_ARCH_AT91SAM9G20) | ||
61 | |||
62 | #define AT91SAM9_MASTER_CLOCK 132096000 | ||
63 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | ||
64 | |||
45 | #elif defined(CONFIG_ARCH_AT91CAP9) | 65 | #elif defined(CONFIG_ARCH_AT91CAP9) |
46 | 66 | ||
47 | #define AT91CAP9_MASTER_CLOCK 100000000 | 67 | #define AT91CAP9_MASTER_CLOCK 100000000 |
diff --git a/include/asm-arm/arch-ebsa285/hardware.h b/include/asm-arm/arch-ebsa285/hardware.h index daad8ee2d194..74610c2c63d4 100644 --- a/include/asm-arm/arch-ebsa285/hardware.h +++ b/include/asm-arm/arch-ebsa285/hardware.h | |||
@@ -14,7 +14,6 @@ | |||
14 | 14 | ||
15 | #include <asm/arch/memory.h> | 15 | #include <asm/arch/memory.h> |
16 | 16 | ||
17 | #ifdef CONFIG_ARCH_FOOTBRIDGE | ||
18 | /* Virtual Physical Size | 17 | /* Virtual Physical Size |
19 | * 0xff800000 0x40000000 1MB X-Bus | 18 | * 0xff800000 0x40000000 1MB X-Bus |
20 | * 0xff000000 0x7c000000 1MB PCI I/O space | 19 | * 0xff000000 0x7c000000 1MB PCI I/O space |
@@ -50,31 +49,6 @@ | |||
50 | #define PCIMEM_SIZE 0x01000000 | 49 | #define PCIMEM_SIZE 0x01000000 |
51 | #define PCIMEM_BASE 0xf0000000 | 50 | #define PCIMEM_BASE 0xf0000000 |
52 | 51 | ||
53 | #elif defined(CONFIG_ARCH_CO285) | ||
54 | /* | ||
55 | * This is the COEBSA285 cut-down mapping | ||
56 | */ | ||
57 | #define PCIMEM_SIZE 0x80000000 | ||
58 | #define PCIMEM_BASE 0x80000000 | ||
59 | |||
60 | #define WFLUSH_SIZE 0x01000000 | ||
61 | #define WFLUSH_BASE 0x7d000000 | ||
62 | |||
63 | #define ARMCSR_SIZE 0x00100000 | ||
64 | #define ARMCSR_BASE 0x7cf00000 | ||
65 | |||
66 | #define XBUS_SIZE 0x00020000 | ||
67 | #define XBUS_BASE 0x7cee0000 | ||
68 | |||
69 | #define PCIO_SIZE 0x00010000 | ||
70 | #define PCIO_BASE 0x7ced0000 | ||
71 | |||
72 | #else | ||
73 | |||
74 | #error "Undefined footbridge architecture" | ||
75 | |||
76 | #endif | ||
77 | |||
78 | #define XBUS_LEDS ((volatile unsigned char *)(XBUS_BASE + 0x12000)) | 52 | #define XBUS_LEDS ((volatile unsigned char *)(XBUS_BASE + 0x12000)) |
79 | #define XBUS_LED_AMBER (1 << 0) | 53 | #define XBUS_LED_AMBER (1 << 0) |
80 | #define XBUS_LED_GREEN (1 << 1) | 54 | #define XBUS_LED_GREEN (1 << 1) |
diff --git a/include/asm-arm/arch-ebsa285/memory.h b/include/asm-arm/arch-ebsa285/memory.h index cbd7ae64bcc9..9019a3bf5ab9 100644 --- a/include/asm-arm/arch-ebsa285/memory.h +++ b/include/asm-arm/arch-ebsa285/memory.h | |||
@@ -42,8 +42,6 @@ extern unsigned long __bus_to_virt(unsigned long); | |||
42 | 42 | ||
43 | #endif | 43 | #endif |
44 | 44 | ||
45 | #if defined(CONFIG_ARCH_FOOTBRIDGE) | ||
46 | |||
47 | /* Task size and page offset at 3GB */ | 45 | /* Task size and page offset at 3GB */ |
48 | #define TASK_SIZE UL(0xbf000000) | 46 | #define TASK_SIZE UL(0xbf000000) |
49 | #define PAGE_OFFSET UL(0xc0000000) | 47 | #define PAGE_OFFSET UL(0xc0000000) |
@@ -53,23 +51,6 @@ extern unsigned long __bus_to_virt(unsigned long); | |||
53 | */ | 51 | */ |
54 | #define FLUSH_BASE 0xf9000000 | 52 | #define FLUSH_BASE 0xf9000000 |
55 | 53 | ||
56 | #elif defined(CONFIG_ARCH_CO285) | ||
57 | |||
58 | /* Task size and page offset at 1.5GB */ | ||
59 | #define TASK_SIZE UL(0x5f000000) | ||
60 | #define PAGE_OFFSET UL(0x60000000) | ||
61 | |||
62 | /* | ||
63 | * Cache flushing area. | ||
64 | */ | ||
65 | #define FLUSH_BASE 0x7e000000 | ||
66 | |||
67 | #else | ||
68 | |||
69 | #error "Undefined footbridge architecture" | ||
70 | |||
71 | #endif | ||
72 | |||
73 | /* | 54 | /* |
74 | * Physical DRAM offset. | 55 | * Physical DRAM offset. |
75 | */ | 56 | */ |
diff --git a/include/asm-arm/arch-ebsa285/vmalloc.h b/include/asm-arm/arch-ebsa285/vmalloc.h index 02598200997d..e487d7e8c8a6 100644 --- a/include/asm-arm/arch-ebsa285/vmalloc.h +++ b/include/asm-arm/arch-ebsa285/vmalloc.h | |||
@@ -7,8 +7,4 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | 9 | ||
10 | #ifdef CONFIG_ARCH_FOOTBRIDGE | ||
11 | #define VMALLOC_END (PAGE_OFFSET + 0x30000000) | 10 | #define VMALLOC_END (PAGE_OFFSET + 0x30000000) |
12 | #else | ||
13 | #define VMALLOC_END (PAGE_OFFSET + 0x20000000) | ||
14 | #endif | ||
diff --git a/include/asm-arm/arch-imx/hardware.h b/include/asm-arm/arch-imx/hardware.h index adffb6acf42a..6542ca5e8c33 100644 --- a/include/asm-arm/arch-imx/hardware.h +++ b/include/asm-arm/arch-imx/hardware.h | |||
@@ -73,14 +73,6 @@ | |||
73 | */ | 73 | */ |
74 | extern void imx_gpio_mode( int gpio_mode ); | 74 | extern void imx_gpio_mode( int gpio_mode ); |
75 | 75 | ||
76 | /* get frequencies in Hz */ | ||
77 | extern unsigned int imx_get_system_clk(void); | ||
78 | extern unsigned int imx_get_mcu_clk(void); | ||
79 | extern unsigned int imx_get_perclk1(void); /* UART[12], Timer[12], PWM */ | ||
80 | extern unsigned int imx_get_perclk2(void); /* LCD, SD, SPI[12] */ | ||
81 | extern unsigned int imx_get_perclk3(void); /* SSI */ | ||
82 | extern unsigned int imx_get_hclk(void); /* SDRAM, CSI, Memory Stick,*/ | ||
83 | /* I2C, DMA */ | ||
84 | #endif | 76 | #endif |
85 | 77 | ||
86 | #define MAXIRQNUM 62 | 78 | #define MAXIRQNUM 62 |
diff --git a/include/asm-arm/arch-imx/imx-dma.h b/include/asm-arm/arch-imx/imx-dma.h index 5b1066da4e1f..44d89c35539a 100644 --- a/include/asm-arm/arch-imx/imx-dma.h +++ b/include/asm-arm/arch-imx/imx-dma.h | |||
@@ -88,7 +88,7 @@ int imx_dma_request(imx_dmach_t dma_ch, const char *name); | |||
88 | 88 | ||
89 | void imx_dma_free(imx_dmach_t dma_ch); | 89 | void imx_dma_free(imx_dmach_t dma_ch); |
90 | 90 | ||
91 | int imx_dma_request_by_prio(imx_dmach_t *pdma_ch, const char *name, imx_dma_prio prio); | 91 | imx_dmach_t imx_dma_request_by_prio(const char *name, imx_dma_prio prio); |
92 | 92 | ||
93 | 93 | ||
94 | #endif /* _ASM_ARCH_IMX_DMA_H */ | 94 | #endif /* _ASM_ARCH_IMX_DMA_H */ |
diff --git a/include/asm-arm/arch-imx/imx-uart.h b/include/asm-arm/arch-imx/imx-uart.h index 3a685e1780ea..d54eb1d48026 100644 --- a/include/asm-arm/arch-imx/imx-uart.h +++ b/include/asm-arm/arch-imx/imx-uart.h | |||
@@ -4,6 +4,8 @@ | |||
4 | #define IMXUART_HAVE_RTSCTS (1<<0) | 4 | #define IMXUART_HAVE_RTSCTS (1<<0) |
5 | 5 | ||
6 | struct imxuart_platform_data { | 6 | struct imxuart_platform_data { |
7 | int (*init)(struct platform_device *pdev); | ||
8 | void (*exit)(struct platform_device *pdev); | ||
7 | unsigned int flags; | 9 | unsigned int flags; |
8 | }; | 10 | }; |
9 | 11 | ||
diff --git a/include/asm-arm/arch-iop13xx/dma.h b/include/asm-arm/arch-iop13xx/dma.h index 2e15da53ff79..d79846fbb394 100644 --- a/include/asm-arm/arch-iop13xx/dma.h +++ b/include/asm-arm/arch-iop13xx/dma.h | |||
@@ -1,3 +1,3 @@ | |||
1 | #ifndef _IOP13XX_DMA_H | 1 | #ifndef _IOP13XX_DMA_H |
2 | #define _IOP13XX_DMA_H_ | 2 | #define _IOP13XX_DMA_H |
3 | #endif | 3 | #endif |
diff --git a/include/asm-arm/arch-iop32x/gpio.h b/include/asm-arm/arch-iop32x/gpio.h new file mode 100644 index 000000000000..708f4ec9db1d --- /dev/null +++ b/include/asm-arm/arch-iop32x/gpio.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_ARCH_IOP32X_GPIO_H | ||
2 | #define __ASM_ARCH_IOP32X_GPIO_H | ||
3 | |||
4 | #include <asm/hardware/iop3xx-gpio.h> | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-arm/arch-iop33x/gpio.h b/include/asm-arm/arch-iop33x/gpio.h new file mode 100644 index 000000000000..ddd55bba9bb9 --- /dev/null +++ b/include/asm-arm/arch-iop33x/gpio.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_ARCH_IOP33X_GPIO_H | ||
2 | #define __ASM_ARCH_IOP33X_GPIO_H | ||
3 | |||
4 | #include <asm/hardware/iop3xx-gpio.h> | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-arm/arch-ixp4xx/fsg.h b/include/asm-arm/arch-ixp4xx/fsg.h new file mode 100644 index 000000000000..c0100cc7981c --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/fsg.h | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/fsg.h | ||
3 | * | ||
4 | * Freecom FSG-3 platform specific definitions | ||
5 | * | ||
6 | * Author: Rod Whitby <rod@whitby.id.au> | ||
7 | * Author: Tomasz Chmielewski <mangoo@wpkg.org> | ||
8 | * Maintainers: http://www.nslu2-linux.org | ||
9 | * | ||
10 | * Based on coyote.h by | ||
11 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
12 | * | ||
13 | * This file is licensed under the terms of the GNU General Public | ||
14 | * License version 2. This program is licensed "as is" without any | ||
15 | * warranty of any kind, whether express or implied. | ||
16 | */ | ||
17 | |||
18 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
19 | #error "Do not include this directly, instead #include <asm/hardware.h>" | ||
20 | #endif | ||
21 | |||
22 | #define FSG_SDA_PIN 12 | ||
23 | #define FSG_SCL_PIN 13 | ||
24 | |||
25 | /* | ||
26 | * FSG PCI IRQs | ||
27 | */ | ||
28 | #define FSG_PCI_MAX_DEV 3 | ||
29 | #define FSG_PCI_IRQ_LINES 3 | ||
30 | |||
31 | |||
32 | /* PCI controller GPIO to IRQ pin mappings */ | ||
33 | #define FSG_PCI_INTA_PIN 6 | ||
34 | #define FSG_PCI_INTB_PIN 7 | ||
35 | #define FSG_PCI_INTC_PIN 5 | ||
36 | |||
37 | /* Buttons */ | ||
38 | |||
39 | #define FSG_SB_GPIO 4 /* sync button */ | ||
40 | #define FSG_RB_GPIO 9 /* reset button */ | ||
41 | #define FSG_UB_GPIO 10 /* usb button */ | ||
42 | |||
43 | /* LEDs */ | ||
44 | |||
45 | #define FSG_LED_WLAN_BIT 0 | ||
46 | #define FSG_LED_WAN_BIT 1 | ||
47 | #define FSG_LED_SATA_BIT 2 | ||
48 | #define FSG_LED_USB_BIT 4 | ||
49 | #define FSG_LED_RING_BIT 5 | ||
50 | #define FSG_LED_SYNC_BIT 7 | ||
diff --git a/include/asm-arm/arch-ixp4xx/hardware.h b/include/asm-arm/arch-ixp4xx/hardware.h index 73e8dc36f6a4..fa723a627854 100644 --- a/include/asm-arm/arch-ixp4xx/hardware.h +++ b/include/asm-arm/arch-ixp4xx/hardware.h | |||
@@ -45,5 +45,6 @@ | |||
45 | #include "nslu2.h" | 45 | #include "nslu2.h" |
46 | #include "nas100d.h" | 46 | #include "nas100d.h" |
47 | #include "dsmg600.h" | 47 | #include "dsmg600.h" |
48 | #include "fsg.h" | ||
48 | 49 | ||
49 | #endif /* _ASM_ARCH_HARDWARE_H */ | 50 | #endif /* _ASM_ARCH_HARDWARE_H */ |
diff --git a/include/asm-arm/arch-ixp4xx/irqs.h b/include/asm-arm/arch-ixp4xx/irqs.h index 11801605047b..674af4a84147 100644 --- a/include/asm-arm/arch-ixp4xx/irqs.h +++ b/include/asm-arm/arch-ixp4xx/irqs.h | |||
@@ -128,4 +128,11 @@ | |||
128 | #define IRQ_DSMG600_PCI_INTE IRQ_IXP4XX_GPIO7 | 128 | #define IRQ_DSMG600_PCI_INTE IRQ_IXP4XX_GPIO7 |
129 | #define IRQ_DSMG600_PCI_INTF IRQ_IXP4XX_GPIO6 | 129 | #define IRQ_DSMG600_PCI_INTF IRQ_IXP4XX_GPIO6 |
130 | 130 | ||
131 | /* | ||
132 | * Freecom FSG-3 Board IRQs | ||
133 | */ | ||
134 | #define IRQ_FSG_PCI_INTA IRQ_IXP4XX_GPIO6 | ||
135 | #define IRQ_FSG_PCI_INTB IRQ_IXP4XX_GPIO7 | ||
136 | #define IRQ_FSG_PCI_INTC IRQ_IXP4XX_GPIO5 | ||
137 | |||
131 | #endif | 138 | #endif |
diff --git a/include/asm-arm/arch-kirkwood/debug-macro.S b/include/asm-arm/arch-kirkwood/debug-macro.S new file mode 100644 index 000000000000..f55fb8ad9ee4 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/debug-macro.S | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/debug-macro.S | ||
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 version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #include <asm/arch/kirkwood.h> | ||
10 | |||
11 | .macro addruart,rx | ||
12 | mrc p15, 0, \rx, c1, c0 | ||
13 | tst \rx, #1 @ MMU enabled? | ||
14 | ldreq \rx, =KIRKWOOD_REGS_PHYS_BASE | ||
15 | ldrne \rx, =KIRKWOOD_REGS_VIRT_BASE | ||
16 | orr \rx, \rx, #0x00012000 | ||
17 | .endm | ||
18 | |||
19 | #define UART_SHIFT 2 | ||
20 | #include <asm/hardware/debug-8250.S> | ||
diff --git a/include/asm-arm/arch-kirkwood/dma.h b/include/asm-arm/arch-kirkwood/dma.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-arm/arch-kirkwood/dma.h | |||
@@ -0,0 +1 @@ | |||
/* empty */ | |||
diff --git a/include/asm-arm/arch-kirkwood/entry-macro.S b/include/asm-arm/arch-kirkwood/entry-macro.S new file mode 100644 index 000000000000..fc6a43d9355c --- /dev/null +++ b/include/asm-arm/arch-kirkwood/entry-macro.S | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Marvell Kirkwood platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <asm/arch/kirkwood.h> | ||
12 | |||
13 | .macro disable_fiq | ||
14 | .endm | ||
15 | |||
16 | .macro arch_ret_to_user, tmp1, tmp2 | ||
17 | .endm | ||
18 | |||
19 | .macro get_irqnr_preamble, base, tmp | ||
20 | ldr \base, =IRQ_VIRT_BASE | ||
21 | .endm | ||
22 | |||
23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
24 | @ check low interrupts | ||
25 | ldr \irqstat, [\base, #IRQ_CAUSE_LOW_OFF] | ||
26 | ldr \tmp, [\base, #IRQ_MASK_LOW_OFF] | ||
27 | mov \irqnr, #31 | ||
28 | ands \irqstat, \irqstat, \tmp | ||
29 | bne 1001f | ||
30 | |||
31 | @ if no low interrupts set, check high interrupts | ||
32 | ldr \irqstat, [\base, #IRQ_CAUSE_HIGH_OFF] | ||
33 | ldr \tmp, [\base, #IRQ_MASK_HIGH_OFF] | ||
34 | mov \irqnr, #63 | ||
35 | ands \irqstat, \irqstat, \tmp | ||
36 | |||
37 | @ find first active interrupt source | ||
38 | 1001: clzne \irqstat, \irqstat | ||
39 | subne \irqnr, \irqnr, \irqstat | ||
40 | .endm | ||
diff --git a/include/asm-arm/arch-kirkwood/hardware.h b/include/asm-arm/arch-kirkwood/hardware.h new file mode 100644 index 000000000000..e695719771a5 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/hardware.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/hardware.h | ||
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 version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_HARDWARE_H | ||
10 | #define __ASM_ARCH_HARDWARE_H | ||
11 | |||
12 | #include "kirkwood.h" | ||
13 | |||
14 | #define pcibios_assign_all_busses() 1 | ||
15 | |||
16 | #define PCIBIOS_MIN_IO 0x00001000 | ||
17 | #define PCIBIOS_MIN_MEM 0x01000000 | ||
18 | #define PCIMEM_BASE KIRKWOOD_PCIE_MEM_PHYS_BASE /* mem base for VGA */ | ||
19 | |||
20 | |||
21 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/io.h b/include/asm-arm/arch-kirkwood/io.h new file mode 100644 index 000000000000..0ef6e95f5d5b --- /dev/null +++ b/include/asm-arm/arch-kirkwood/io.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/io.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_IO_H | ||
10 | #define __ASM_ARCH_IO_H | ||
11 | |||
12 | #include "kirkwood.h" | ||
13 | |||
14 | #define IO_SPACE_LIMIT 0xffffffff | ||
15 | |||
16 | static inline void __iomem *__io(unsigned long addr) | ||
17 | { | ||
18 | return (void __iomem *)((addr - KIRKWOOD_PCIE_IO_PHYS_BASE) | ||
19 | + KIRKWOOD_PCIE_IO_VIRT_BASE); | ||
20 | } | ||
21 | |||
22 | #define __io(a) __io(a) | ||
23 | #define __mem_pci(a) (a) | ||
24 | |||
25 | |||
26 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/irqs.h b/include/asm-arm/arch-kirkwood/irqs.h new file mode 100644 index 000000000000..2e7b5da6335c --- /dev/null +++ b/include/asm-arm/arch-kirkwood/irqs.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/irqs.h | ||
3 | * | ||
4 | * IRQ definitions for Marvell Kirkwood SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_IRQS_H | ||
12 | #define __ASM_ARCH_IRQS_H | ||
13 | |||
14 | #include "kirkwood.h" /* need GPIO_MAX */ | ||
15 | |||
16 | /* | ||
17 | * Low Interrupt Controller | ||
18 | */ | ||
19 | #define IRQ_KIRKWOOD_HIGH_SUM 0 | ||
20 | #define IRQ_KIRKWOOD_BRIDGE 1 | ||
21 | #define IRQ_KIRKWOOD_HOST2CPU 2 | ||
22 | #define IRQ_KIRKWOOD_CPU2HOST 3 | ||
23 | #define IRQ_KIRKWOOD_XOR_00 5 | ||
24 | #define IRQ_KIRKWOOD_XOR_01 6 | ||
25 | #define IRQ_KIRKWOOD_XOR_10 7 | ||
26 | #define IRQ_KIRKWOOD_XOR_11 8 | ||
27 | #define IRQ_KIRKWOOD_PCIE 9 | ||
28 | #define IRQ_KIRKWOOD_GE00_SUM 11 | ||
29 | #define IRQ_KIRKWOOD_GE01_SUM 15 | ||
30 | #define IRQ_KIRKWOOD_USB 19 | ||
31 | #define IRQ_KIRKWOOD_SATA 21 | ||
32 | #define IRQ_KIRKWOOD_CRYPTO 22 | ||
33 | #define IRQ_KIRKWOOD_SPI 23 | ||
34 | #define IRQ_KIRKWOOD_I2S 24 | ||
35 | #define IRQ_KIRKWOOD_TS_0 26 | ||
36 | #define IRQ_KIRKWOOD_SDIO 28 | ||
37 | #define IRQ_KIRKWOOD_TWSI 29 | ||
38 | #define IRQ_KIRKWOOD_AVB 30 | ||
39 | #define IRQ_KIRKWOOD_TDMI 31 | ||
40 | |||
41 | /* | ||
42 | * High Interrupt Controller | ||
43 | */ | ||
44 | #define IRQ_KIRKWOOD_UART_0 33 | ||
45 | #define IRQ_KIRKWOOD_UART_1 34 | ||
46 | #define IRQ_KIRKWOOD_GPIO_LOW_0_7 35 | ||
47 | #define IRQ_KIRKWOOD_GPIO_LOW_8_15 36 | ||
48 | #define IRQ_KIRKWOOD_GPIO_LOW_16_23 37 | ||
49 | #define IRQ_KIRKWOOD_GPIO_LOW_24_31 38 | ||
50 | #define IRQ_KIRKWOOD_GPIO_HIGH_0_7 39 | ||
51 | #define IRQ_KIRKWOOD_GPIO_HIGH_8_15 40 | ||
52 | #define IRQ_KIRKWOOD_GPIO_HIGH_16_23 41 | ||
53 | |||
54 | /* | ||
55 | * KIRKWOOD General Purpose Pins | ||
56 | */ | ||
57 | #define IRQ_KIRKWOOD_GPIO_START 64 | ||
58 | #define NR_GPIO_IRQS GPIO_MAX | ||
59 | |||
60 | #define NR_IRQS (IRQ_KIRKWOOD_GPIO_START + NR_GPIO_IRQS) | ||
61 | |||
62 | |||
63 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/kirkwood.h b/include/asm-arm/arch-kirkwood/kirkwood.h new file mode 100644 index 000000000000..bb31b315c350 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/kirkwood.h | |||
@@ -0,0 +1,100 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/kirkwood.h | ||
3 | * | ||
4 | * Generic definitions for Marvell Kirkwood SoC flavors: | ||
5 | * 88F6180, 88F6192 and 88F6281. | ||
6 | * | ||
7 | * This file is licensed under the terms of the GNU General Public | ||
8 | * License version 2. This program is licensed "as is" without any | ||
9 | * warranty of any kind, whether express or implied. | ||
10 | */ | ||
11 | |||
12 | #ifndef __ASM_ARCH_KIRKWOOD_H | ||
13 | #define __ASM_ARCH_KIRKWOOD_H | ||
14 | |||
15 | /* | ||
16 | * Marvell Kirkwood address maps. | ||
17 | * | ||
18 | * phys | ||
19 | * e0000000 PCIe Memory space | ||
20 | * f1000000 on-chip peripheral registers | ||
21 | * f2000000 PCIe I/O space | ||
22 | * f3000000 NAND controller address window | ||
23 | * | ||
24 | * virt phys size | ||
25 | * fee00000 f1000000 1M on-chip peripheral registers | ||
26 | * fef00000 f2000000 1M PCIe I/O space | ||
27 | */ | ||
28 | |||
29 | #define KIRKWOOD_NAND_MEM_PHYS_BASE 0xf3000000 | ||
30 | #define KIRKWOOD_NAND_MEM_SIZE SZ_64K /* 1K is sufficient, but 64K | ||
31 | * is the minimal window size | ||
32 | */ | ||
33 | |||
34 | #define KIRKWOOD_PCIE_IO_PHYS_BASE 0xf2000000 | ||
35 | #define KIRKWOOD_PCIE_IO_VIRT_BASE 0xfef00000 | ||
36 | #define KIRKWOOD_PCIE_IO_BUS_BASE 0x00000000 | ||
37 | #define KIRKWOOD_PCIE_IO_SIZE SZ_1M | ||
38 | |||
39 | #define KIRKWOOD_REGS_PHYS_BASE 0xf1000000 | ||
40 | #define KIRKWOOD_REGS_VIRT_BASE 0xfee00000 | ||
41 | #define KIRKWOOD_REGS_SIZE SZ_1M | ||
42 | |||
43 | #define KIRKWOOD_PCIE_MEM_PHYS_BASE 0xe0000000 | ||
44 | #define KIRKWOOD_PCIE_MEM_SIZE SZ_128M | ||
45 | |||
46 | /* | ||
47 | * MBUS bridge registers. | ||
48 | */ | ||
49 | #define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x20000) | ||
50 | #define CPU_CONTROL (BRIDGE_VIRT_BASE | 0x0104) | ||
51 | #define CPU_RESET 0x00000002 | ||
52 | #define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108) | ||
53 | #define SOFT_RESET_OUT_EN 0x00000004 | ||
54 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | ||
55 | #define SOFT_RESET 0x00000001 | ||
56 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | ||
57 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
58 | #define BRIDGE_INT_TIMER0 0x0002 | ||
59 | #define BRIDGE_INT_TIMER1 0x0004 | ||
60 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | ||
61 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | ||
62 | #define IRQ_CAUSE_LOW_OFF 0x0000 | ||
63 | #define IRQ_MASK_LOW_OFF 0x0004 | ||
64 | #define IRQ_CAUSE_HIGH_OFF 0x0010 | ||
65 | #define IRQ_MASK_HIGH_OFF 0x0014 | ||
66 | #define TIMER_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0300) | ||
67 | #define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128) | ||
68 | #define L2_WRITETHROUGH 0x00000010 | ||
69 | |||
70 | /* | ||
71 | * Register Map | ||
72 | */ | ||
73 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000) | ||
74 | #define DDR_WINDOW_CPU_BASE (DDR_VIRT_BASE | 0x1500) | ||
75 | |||
76 | #define DEV_BUS_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x10000) | ||
77 | #define DEV_BUS_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x10000) | ||
78 | #define SAMPLE_AT_RESET (DEV_BUS_VIRT_BASE | 0x0030) | ||
79 | #define DEVICE_ID (DEV_BUS_VIRT_BASE | 0x0034) | ||
80 | #define RTC_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x0300) | ||
81 | #define SPI_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x0600) | ||
82 | #define UART0_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2000) | ||
83 | #define UART0_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2000) | ||
84 | #define UART1_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2100) | ||
85 | #define UART1_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2100) | ||
86 | |||
87 | #define PCIE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x40000) | ||
88 | |||
89 | #define USB_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x50000) | ||
90 | |||
91 | #define GE00_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x70000) | ||
92 | #define GE01_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x74000) | ||
93 | |||
94 | #define SATA_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x80000) | ||
95 | |||
96 | |||
97 | #define GPIO_MAX 50 | ||
98 | |||
99 | |||
100 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/memory.h b/include/asm-arm/arch-kirkwood/memory.h new file mode 100644 index 000000000000..e5108f408ce6 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/memory.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/memory.h | ||
3 | */ | ||
4 | |||
5 | #ifndef __ASM_ARCH_MEMORY_H | ||
6 | #define __ASM_ARCH_MEMORY_H | ||
7 | |||
8 | #define PHYS_OFFSET UL(0x00000000) | ||
9 | |||
10 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
11 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
12 | |||
13 | |||
14 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/system.h b/include/asm-arm/arch-kirkwood/system.h new file mode 100644 index 000000000000..8dde7e379855 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/system.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/system.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_SYSTEM_H | ||
10 | #define __ASM_ARCH_SYSTEM_H | ||
11 | |||
12 | #include <asm/arch/hardware.h> | ||
13 | #include <asm/arch/kirkwood.h> | ||
14 | |||
15 | static inline void arch_idle(void) | ||
16 | { | ||
17 | cpu_do_idle(); | ||
18 | } | ||
19 | |||
20 | static inline void arch_reset(char mode) | ||
21 | { | ||
22 | /* | ||
23 | * Enable soft reset to assert RSTOUTn. | ||
24 | */ | ||
25 | writel(SOFT_RESET_OUT_EN, RSTOUTn_MASK); | ||
26 | |||
27 | /* | ||
28 | * Assert soft reset. | ||
29 | */ | ||
30 | writel(SOFT_RESET, SYSTEM_SOFT_RESET); | ||
31 | |||
32 | while (1) | ||
33 | ; | ||
34 | } | ||
35 | |||
36 | |||
37 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/timex.h b/include/asm-arm/arch-kirkwood/timex.h new file mode 100644 index 000000000000..82122e134e3c --- /dev/null +++ b/include/asm-arm/arch-kirkwood/timex.h | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/timex.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #define CLOCK_TICK_RATE (100 * HZ) | ||
10 | |||
11 | #define KIRKWOOD_TCLK 166666667 | ||
diff --git a/include/asm-arm/arch-kirkwood/uncompress.h b/include/asm-arm/arch-kirkwood/uncompress.h new file mode 100644 index 000000000000..a9062b6d7680 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/uncompress.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/uncompress.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #include <linux/serial_reg.h> | ||
10 | #include <asm/arch/kirkwood.h> | ||
11 | |||
12 | #define SERIAL_BASE ((unsigned char *)UART0_PHYS_BASE) | ||
13 | |||
14 | static void putc(const char c) | ||
15 | { | ||
16 | unsigned char *base = SERIAL_BASE; | ||
17 | int i; | ||
18 | |||
19 | for (i = 0; i < 0x1000; i++) { | ||
20 | if (base[UART_LSR << 2] & UART_LSR_THRE) | ||
21 | break; | ||
22 | barrier(); | ||
23 | } | ||
24 | |||
25 | base[UART_TX << 2] = c; | ||
26 | } | ||
27 | |||
28 | static void flush(void) | ||
29 | { | ||
30 | unsigned char *base = SERIAL_BASE; | ||
31 | unsigned char mask; | ||
32 | int i; | ||
33 | |||
34 | mask = UART_LSR_TEMT | UART_LSR_THRE; | ||
35 | |||
36 | for (i = 0; i < 0x1000; i++) { | ||
37 | if ((base[UART_LSR << 2] & mask) == mask) | ||
38 | break; | ||
39 | barrier(); | ||
40 | } | ||
41 | } | ||
42 | |||
43 | /* | ||
44 | * nothing to do | ||
45 | */ | ||
46 | #define arch_decomp_setup() | ||
47 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-kirkwood/vmalloc.h b/include/asm-arm/arch-kirkwood/vmalloc.h new file mode 100644 index 000000000000..41852c6e77f3 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/vmalloc.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | #define VMALLOC_END 0xfe800000 | ||
diff --git a/include/asm-arm/arch-loki/debug-macro.S b/include/asm-arm/arch-loki/debug-macro.S new file mode 100644 index 000000000000..585502e96513 --- /dev/null +++ b/include/asm-arm/arch-loki/debug-macro.S | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/debug-macro.S | ||
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 version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #include <asm/arch/loki.h> | ||
10 | |||
11 | .macro addruart,rx | ||
12 | mrc p15, 0, \rx, c1, c0 | ||
13 | tst \rx, #1 @ MMU enabled? | ||
14 | ldreq \rx, =LOKI_REGS_PHYS_BASE | ||
15 | ldrne \rx, =LOKI_REGS_VIRT_BASE | ||
16 | orr \rx, \rx, #0x00012000 | ||
17 | .endm | ||
18 | |||
19 | #define UART_SHIFT 2 | ||
20 | #include <asm/hardware/debug-8250.S> | ||
diff --git a/include/asm-arm/arch-loki/dma.h b/include/asm-arm/arch-loki/dma.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-arm/arch-loki/dma.h | |||
@@ -0,0 +1 @@ | |||
/* empty */ | |||
diff --git a/include/asm-arm/arch-loki/entry-macro.S b/include/asm-arm/arch-loki/entry-macro.S new file mode 100644 index 000000000000..693257cdbeb8 --- /dev/null +++ b/include/asm-arm/arch-loki/entry-macro.S | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Marvell Loki (88RC8480) platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <asm/arch/loki.h> | ||
12 | |||
13 | .macro disable_fiq | ||
14 | .endm | ||
15 | |||
16 | .macro arch_ret_to_user, tmp1, tmp2 | ||
17 | .endm | ||
18 | |||
19 | .macro get_irqnr_preamble, base, tmp | ||
20 | ldr \base, =IRQ_VIRT_BASE | ||
21 | .endm | ||
22 | |||
23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
24 | ldr \irqstat, [\base, #IRQ_CAUSE_OFF] | ||
25 | ldr \tmp, [\base, #IRQ_MASK_OFF] | ||
26 | mov \irqnr, #0 | ||
27 | ands \irqstat, \irqstat, \tmp | ||
28 | clzne \irqnr, \irqstat | ||
29 | rsbne \irqnr, \irqnr, #31 | ||
30 | .endm | ||
diff --git a/include/asm-arm/arch-loki/hardware.h b/include/asm-arm/arch-loki/hardware.h new file mode 100644 index 000000000000..f65b01c733b6 --- /dev/null +++ b/include/asm-arm/arch-loki/hardware.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/hardware.h | ||
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 version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_HARDWARE_H | ||
10 | #define __ASM_ARCH_HARDWARE_H | ||
11 | |||
12 | #include "loki.h" | ||
13 | |||
14 | |||
15 | #endif | ||
diff --git a/include/asm-arm/arch-loki/io.h b/include/asm-arm/arch-loki/io.h new file mode 100644 index 000000000000..e7418a915e75 --- /dev/null +++ b/include/asm-arm/arch-loki/io.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/io.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_IO_H | ||
10 | #define __ASM_ARCH_IO_H | ||
11 | |||
12 | #include "loki.h" | ||
13 | |||
14 | #define IO_SPACE_LIMIT 0xffffffff | ||
15 | |||
16 | static inline void __iomem *__io(unsigned long addr) | ||
17 | { | ||
18 | return (void __iomem *)((addr - LOKI_PCIE0_IO_PHYS_BASE) | ||
19 | + LOKI_PCIE0_IO_VIRT_BASE); | ||
20 | } | ||
21 | |||
22 | #define __io(a) __io(a) | ||
23 | #define __mem_pci(a) (a) | ||
24 | |||
25 | |||
26 | #endif | ||
diff --git a/include/asm-arm/arch-loki/irqs.h b/include/asm-arm/arch-loki/irqs.h new file mode 100644 index 000000000000..7e4971438072 --- /dev/null +++ b/include/asm-arm/arch-loki/irqs.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/irqs.h | ||
3 | * | ||
4 | * IRQ definitions for Marvell Loki (88RC8480) SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_IRQS_H | ||
12 | #define __ASM_ARCH_IRQS_H | ||
13 | |||
14 | #include "loki.h" /* need GPIO_MAX */ | ||
15 | |||
16 | /* | ||
17 | * Interrupt Controller | ||
18 | */ | ||
19 | #define IRQ_LOKI_PCIE_A_CPU_DRBL 0 | ||
20 | #define IRQ_LOKI_CPU_PCIE_A_DRBL 1 | ||
21 | #define IRQ_LOKI_PCIE_B_CPU_DRBL 2 | ||
22 | #define IRQ_LOKI_CPU_PCIE_B_DRBL 3 | ||
23 | #define IRQ_LOKI_COM_A_ERR 6 | ||
24 | #define IRQ_LOKI_COM_A_IN 7 | ||
25 | #define IRQ_LOKI_COM_A_OUT 8 | ||
26 | #define IRQ_LOKI_COM_B_ERR 9 | ||
27 | #define IRQ_LOKI_COM_B_IN 10 | ||
28 | #define IRQ_LOKI_COM_B_OUT 11 | ||
29 | #define IRQ_LOKI_DMA_A 12 | ||
30 | #define IRQ_LOKI_DMA_B 13 | ||
31 | #define IRQ_LOKI_SAS_A 14 | ||
32 | #define IRQ_LOKI_SAS_B 15 | ||
33 | #define IRQ_LOKI_DDR 16 | ||
34 | #define IRQ_LOKI_XOR 17 | ||
35 | #define IRQ_LOKI_BRIDGE 18 | ||
36 | #define IRQ_LOKI_PCIE_A_ERR 20 | ||
37 | #define IRQ_LOKI_PCIE_A_INT 21 | ||
38 | #define IRQ_LOKI_PCIE_B_ERR 22 | ||
39 | #define IRQ_LOKI_PCIE_B_INT 23 | ||
40 | #define IRQ_LOKI_GBE_A_INT 24 | ||
41 | #define IRQ_LOKI_GBE_B_INT 25 | ||
42 | #define IRQ_LOKI_DEV_ERR 26 | ||
43 | #define IRQ_LOKI_UART0 27 | ||
44 | #define IRQ_LOKI_UART1 28 | ||
45 | #define IRQ_LOKI_TWSI 29 | ||
46 | #define IRQ_LOKI_GPIO_23_0 30 | ||
47 | #define IRQ_LOKI_GPIO_25_24 31 | ||
48 | |||
49 | /* | ||
50 | * Loki General Purpose Pins | ||
51 | */ | ||
52 | #define IRQ_LOKI_GPIO_START 32 | ||
53 | #define NR_GPIO_IRQS GPIO_MAX | ||
54 | |||
55 | #define NR_IRQS (IRQ_LOKI_GPIO_START + NR_GPIO_IRQS) | ||
56 | |||
57 | |||
58 | #endif | ||
diff --git a/include/asm-arm/arch-loki/loki.h b/include/asm-arm/arch-loki/loki.h new file mode 100644 index 000000000000..5dd05ee0a4e6 --- /dev/null +++ b/include/asm-arm/arch-loki/loki.h | |||
@@ -0,0 +1,97 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/loki.h | ||
3 | * | ||
4 | * Generic definitions for Marvell Loki (88RC8480) SoC flavors | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_LOKI_H | ||
12 | #define __ASM_ARCH_LOKI_H | ||
13 | |||
14 | /* | ||
15 | * Marvell Loki (88RC8480) address maps. | ||
16 | * | ||
17 | * phys | ||
18 | * d0000000 on-chip peripheral registers | ||
19 | * e0000000 PCIe 0 Memory space | ||
20 | * e8000000 PCIe 1 Memory space | ||
21 | * f0000000 PCIe 0 I/O space | ||
22 | * f0100000 PCIe 1 I/O space | ||
23 | * | ||
24 | * virt phys size | ||
25 | * fed00000 d0000000 1M on-chip peripheral registers | ||
26 | * fee00000 f0000000 64K PCIe 0 I/O space | ||
27 | * fef00000 f0100000 64K PCIe 1 I/O space | ||
28 | */ | ||
29 | |||
30 | #define LOKI_REGS_PHYS_BASE 0xd0000000 | ||
31 | #define LOKI_REGS_VIRT_BASE 0xfed00000 | ||
32 | #define LOKI_REGS_SIZE SZ_1M | ||
33 | |||
34 | #define LOKI_PCIE0_IO_PHYS_BASE 0xf0000000 | ||
35 | #define LOKI_PCIE0_IO_VIRT_BASE 0xfee00000 | ||
36 | #define LOKI_PCIE0_IO_BUS_BASE 0x00000000 | ||
37 | #define LOKI_PCIE0_IO_SIZE SZ_64K | ||
38 | |||
39 | #define LOKI_PCIE1_IO_PHYS_BASE 0xf0100000 | ||
40 | #define LOKI_PCIE1_IO_VIRT_BASE 0xfef00000 | ||
41 | #define LOKI_PCIE1_IO_BUS_BASE 0x00000000 | ||
42 | #define LOKI_PCIE1_IO_SIZE SZ_64K | ||
43 | |||
44 | #define LOKI_PCIE0_MEM_PHYS_BASE 0xe0000000 | ||
45 | #define LOKI_PCIE0_MEM_SIZE SZ_128M | ||
46 | |||
47 | #define LOKI_PCIE1_MEM_PHYS_BASE 0xe8000000 | ||
48 | #define LOKI_PCIE1_MEM_SIZE SZ_128M | ||
49 | |||
50 | /* | ||
51 | * Register Map | ||
52 | */ | ||
53 | #define DEV_BUS_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0x10000) | ||
54 | #define DEV_BUS_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0x10000) | ||
55 | #define UART0_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2000) | ||
56 | #define UART0_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2000) | ||
57 | #define UART1_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2100) | ||
58 | #define UART1_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2100) | ||
59 | |||
60 | #define BRIDGE_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0x20000) | ||
61 | #define BRIDGE_REG(x) (BRIDGE_VIRT_BASE | (x)) | ||
62 | #define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108) | ||
63 | #define SOFT_RESET_OUT_EN 0x00000004 | ||
64 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | ||
65 | #define SOFT_RESET 0x00000001 | ||
66 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | ||
67 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
68 | #define BRIDGE_INT_TIMER0 0x0002 | ||
69 | #define BRIDGE_INT_TIMER1 0x0004 | ||
70 | #define BRIDGE_INT_TIMER1_CLR 0x0004 | ||
71 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | ||
72 | #define IRQ_CAUSE_OFF 0x0000 | ||
73 | #define IRQ_MASK_OFF 0x0004 | ||
74 | #define TIMER_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0300) | ||
75 | |||
76 | #define PCIE0_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0x30000) | ||
77 | |||
78 | #define PCIE1_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0x40000) | ||
79 | |||
80 | #define SAS0_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0x80000) | ||
81 | |||
82 | #define SAS1_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0x90000) | ||
83 | |||
84 | #define GE0_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0xa0000) | ||
85 | #define GE0_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0xa0000) | ||
86 | |||
87 | #define GE1_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0xb0000) | ||
88 | #define GE1_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0xb0000) | ||
89 | |||
90 | #define DDR_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0xf0000) | ||
91 | #define DDR_REG(x) (DDR_VIRT_BASE | (x)) | ||
92 | |||
93 | |||
94 | #define GPIO_MAX 8 | ||
95 | |||
96 | |||
97 | #endif | ||
diff --git a/include/asm-arm/arch-loki/memory.h b/include/asm-arm/arch-loki/memory.h new file mode 100644 index 000000000000..835101e49875 --- /dev/null +++ b/include/asm-arm/arch-loki/memory.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/memory.h | ||
3 | */ | ||
4 | |||
5 | #ifndef __ASM_ARCH_MEMORY_H | ||
6 | #define __ASM_ARCH_MEMORY_H | ||
7 | |||
8 | #define PHYS_OFFSET UL(0x00000000) | ||
9 | |||
10 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
11 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
12 | |||
13 | |||
14 | #endif | ||
diff --git a/include/asm-arm/arch-loki/system.h b/include/asm-arm/arch-loki/system.h new file mode 100644 index 000000000000..a3568ac8ec35 --- /dev/null +++ b/include/asm-arm/arch-loki/system.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/system.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_SYSTEM_H | ||
10 | #define __ASM_ARCH_SYSTEM_H | ||
11 | |||
12 | #include <asm/arch/hardware.h> | ||
13 | #include <asm/arch/loki.h> | ||
14 | |||
15 | static inline void arch_idle(void) | ||
16 | { | ||
17 | cpu_do_idle(); | ||
18 | } | ||
19 | |||
20 | static inline void arch_reset(char mode) | ||
21 | { | ||
22 | /* | ||
23 | * Enable soft reset to assert RSTOUTn. | ||
24 | */ | ||
25 | writel(SOFT_RESET_OUT_EN, RSTOUTn_MASK); | ||
26 | |||
27 | /* | ||
28 | * Assert soft reset. | ||
29 | */ | ||
30 | writel(SOFT_RESET, SYSTEM_SOFT_RESET); | ||
31 | |||
32 | while (1) | ||
33 | ; | ||
34 | } | ||
35 | |||
36 | |||
37 | #endif | ||
diff --git a/include/asm-arm/arch-loki/timex.h b/include/asm-arm/arch-loki/timex.h new file mode 100644 index 000000000000..940014f97cae --- /dev/null +++ b/include/asm-arm/arch-loki/timex.h | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/timex.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #define CLOCK_TICK_RATE (100 * HZ) | ||
10 | |||
11 | #define LOKI_TCLK 180000000 | ||
diff --git a/include/asm-arm/arch-loki/uncompress.h b/include/asm-arm/arch-loki/uncompress.h new file mode 100644 index 000000000000..89a0cf88d3a5 --- /dev/null +++ b/include/asm-arm/arch-loki/uncompress.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/uncompress.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #include <linux/serial_reg.h> | ||
10 | #include <asm/arch/loki.h> | ||
11 | |||
12 | #define SERIAL_BASE ((unsigned char *)UART0_PHYS_BASE) | ||
13 | |||
14 | static void putc(const char c) | ||
15 | { | ||
16 | unsigned char *base = SERIAL_BASE; | ||
17 | int i; | ||
18 | |||
19 | for (i = 0; i < 0x1000; i++) { | ||
20 | if (base[UART_LSR << 2] & UART_LSR_THRE) | ||
21 | break; | ||
22 | barrier(); | ||
23 | } | ||
24 | |||
25 | base[UART_TX << 2] = c; | ||
26 | } | ||
27 | |||
28 | static void flush(void) | ||
29 | { | ||
30 | unsigned char *base = SERIAL_BASE; | ||
31 | unsigned char mask; | ||
32 | int i; | ||
33 | |||
34 | mask = UART_LSR_TEMT | UART_LSR_THRE; | ||
35 | |||
36 | for (i = 0; i < 0x1000; i++) { | ||
37 | if ((base[UART_LSR << 2] & mask) == mask) | ||
38 | break; | ||
39 | barrier(); | ||
40 | } | ||
41 | } | ||
42 | |||
43 | /* | ||
44 | * nothing to do | ||
45 | */ | ||
46 | #define arch_decomp_setup() | ||
47 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-loki/vmalloc.h b/include/asm-arm/arch-loki/vmalloc.h new file mode 100644 index 000000000000..f5be06220491 --- /dev/null +++ b/include/asm-arm/arch-loki/vmalloc.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | #define VMALLOC_END 0xfe800000 | ||
diff --git a/include/asm-arm/arch-msm/irqs.h b/include/asm-arm/arch-msm/irqs.h index 565430cfaa7e..e62a108b1857 100644 --- a/include/asm-arm/arch-msm/irqs.h +++ b/include/asm-arm/arch-msm/irqs.h | |||
@@ -15,6 +15,7 @@ | |||
15 | */ | 15 | */ |
16 | 16 | ||
17 | #ifndef __ASM_ARCH_MSM_IRQS_H | 17 | #ifndef __ASM_ARCH_MSM_IRQS_H |
18 | #define __ASM_ARCH_MSM_IRQS_H | ||
18 | 19 | ||
19 | /* MSM ARM11 Interrupt Numbers */ | 20 | /* MSM ARM11 Interrupt Numbers */ |
20 | /* See 80-VE113-1 A, pp219-221 */ | 21 | /* See 80-VE113-1 A, pp219-221 */ |
diff --git a/include/asm-arm/arch-msm/timex.h b/include/asm-arm/arch-msm/timex.h index 154b23fb3599..8724487ab4c9 100644 --- a/include/asm-arm/arch-msm/timex.h +++ b/include/asm-arm/arch-msm/timex.h | |||
@@ -14,6 +14,7 @@ | |||
14 | */ | 14 | */ |
15 | 15 | ||
16 | #ifndef __ASM_ARCH_MSM_TIMEX_H | 16 | #ifndef __ASM_ARCH_MSM_TIMEX_H |
17 | #define __ASM_ARCH_MSM_TIMEX_H | ||
17 | 18 | ||
18 | #define CLOCK_TICK_RATE 1000000 | 19 | #define CLOCK_TICK_RATE 1000000 |
19 | 20 | ||
diff --git a/include/asm-arm/arch-mv78xx0/debug-macro.S b/include/asm-arm/arch-mv78xx0/debug-macro.S new file mode 100644 index 000000000000..d0595bd645e5 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/debug-macro.S | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/debug-macro.S | ||
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 version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #include <asm/arch/mv78xx0.h> | ||
10 | |||
11 | .macro addruart,rx | ||
12 | mrc p15, 0, \rx, c1, c0 | ||
13 | tst \rx, #1 @ MMU enabled? | ||
14 | ldreq \rx, =MV78XX0_REGS_PHYS_BASE | ||
15 | ldrne \rx, =MV78XX0_REGS_VIRT_BASE | ||
16 | orr \rx, \rx, #0x00012000 | ||
17 | .endm | ||
18 | |||
19 | #define UART_SHIFT 2 | ||
20 | #include <asm/hardware/debug-8250.S> | ||
diff --git a/include/asm-arm/arch-mv78xx0/dma.h b/include/asm-arm/arch-mv78xx0/dma.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/dma.h | |||
@@ -0,0 +1 @@ | |||
/* empty */ | |||
diff --git a/include/asm-arm/arch-mv78xx0/entry-macro.S b/include/asm-arm/arch-mv78xx0/entry-macro.S new file mode 100644 index 000000000000..e9a606b12669 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/entry-macro.S | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Marvell MV78xx0 platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <asm/arch/mv78xx0.h> | ||
12 | |||
13 | .macro disable_fiq | ||
14 | .endm | ||
15 | |||
16 | .macro arch_ret_to_user, tmp1, tmp2 | ||
17 | .endm | ||
18 | |||
19 | .macro get_irqnr_preamble, base, tmp | ||
20 | ldr \base, =IRQ_VIRT_BASE | ||
21 | .endm | ||
22 | |||
23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
24 | @ check low interrupts | ||
25 | ldr \irqstat, [\base, #IRQ_CAUSE_LOW_OFF] | ||
26 | ldr \tmp, [\base, #IRQ_MASK_LOW_OFF] | ||
27 | mov \irqnr, #31 | ||
28 | ands \irqstat, \irqstat, \tmp | ||
29 | |||
30 | @ if no low interrupts set, check high interrupts | ||
31 | ldreq \irqstat, [\base, #IRQ_CAUSE_HIGH_OFF] | ||
32 | ldreq \tmp, [\base, #IRQ_MASK_HIGH_OFF] | ||
33 | moveq \irqnr, #63 | ||
34 | andeqs \irqstat, \irqstat, \tmp | ||
35 | |||
36 | @ find first active interrupt source | ||
37 | clzne \irqstat, \irqstat | ||
38 | subne \irqnr, \irqnr, \irqstat | ||
39 | .endm | ||
diff --git a/include/asm-arm/arch-mv78xx0/hardware.h b/include/asm-arm/arch-mv78xx0/hardware.h new file mode 100644 index 000000000000..8e17926086c6 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/hardware.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/hardware.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_HARDWARE_H | ||
10 | #define __ASM_ARCH_HARDWARE_H | ||
11 | |||
12 | #include "mv78xx0.h" | ||
13 | |||
14 | #define pcibios_assign_all_busses() 1 | ||
15 | |||
16 | #define PCIBIOS_MIN_IO 0x00001000 | ||
17 | #define PCIBIOS_MIN_MEM 0x01000000 | ||
18 | #define PCIMEM_BASE MV78XX0_PCIE_MEM_PHYS_BASE /* mem base for VGA */ | ||
19 | |||
20 | |||
21 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/io.h b/include/asm-arm/arch-mv78xx0/io.h new file mode 100644 index 000000000000..415d4c98e3d1 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/io.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/io.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_IO_H | ||
10 | #define __ASM_ARCH_IO_H | ||
11 | |||
12 | #include "mv78xx0.h" | ||
13 | |||
14 | #define IO_SPACE_LIMIT 0xffffffff | ||
15 | |||
16 | static inline void __iomem *__io(unsigned long addr) | ||
17 | { | ||
18 | return (void __iomem *)((addr - MV78XX0_PCIE_IO_PHYS_BASE(0)) | ||
19 | + MV78XX0_PCIE_IO_VIRT_BASE(0)); | ||
20 | } | ||
21 | |||
22 | #define __io(a) __io(a) | ||
23 | #define __mem_pci(a) (a) | ||
24 | |||
25 | |||
26 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/irqs.h b/include/asm-arm/arch-mv78xx0/irqs.h new file mode 100644 index 000000000000..75930450cd65 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/irqs.h | |||
@@ -0,0 +1,91 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/irqs.h | ||
3 | * | ||
4 | * IRQ definitions for Marvell MV78xx0 SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_IRQS_H | ||
12 | #define __ASM_ARCH_IRQS_H | ||
13 | |||
14 | #include "mv78xx0.h" /* need GPIO_MAX */ | ||
15 | |||
16 | /* | ||
17 | * MV78xx0 Low Interrupt Controller | ||
18 | */ | ||
19 | #define IRQ_MV78XX0_ERR 0 | ||
20 | #define IRQ_MV78XX0_SPI 1 | ||
21 | #define IRQ_MV78XX0_I2C_0 2 | ||
22 | #define IRQ_MV78XX0_I2C_1 3 | ||
23 | #define IRQ_MV78XX0_IDMA_0 4 | ||
24 | #define IRQ_MV78XX0_IDMA_1 5 | ||
25 | #define IRQ_MV78XX0_IDMA_2 6 | ||
26 | #define IRQ_MV78XX0_IDMA_3 7 | ||
27 | #define IRQ_MV78XX0_TIMER_0 8 | ||
28 | #define IRQ_MV78XX0_TIMER_1 9 | ||
29 | #define IRQ_MV78XX0_TIMER_2 10 | ||
30 | #define IRQ_MV78XX0_TIMER_3 11 | ||
31 | #define IRQ_MV78XX0_UART_0 12 | ||
32 | #define IRQ_MV78XX0_UART_1 13 | ||
33 | #define IRQ_MV78XX0_UART_2 14 | ||
34 | #define IRQ_MV78XX0_UART_3 15 | ||
35 | #define IRQ_MV78XX0_USB_0 16 | ||
36 | #define IRQ_MV78XX0_USB_1 17 | ||
37 | #define IRQ_MV78XX0_USB_2 18 | ||
38 | #define IRQ_MV78XX0_CRYPTO 19 | ||
39 | #define IRQ_MV78XX0_SDIO_0 20 | ||
40 | #define IRQ_MV78XX0_SDIO_1 21 | ||
41 | #define IRQ_MV78XX0_XOR_0 22 | ||
42 | #define IRQ_MV78XX0_XOR_1 23 | ||
43 | #define IRQ_MV78XX0_I2S_0 24 | ||
44 | #define IRQ_MV78XX0_I2S_1 25 | ||
45 | #define IRQ_MV78XX0_SATA 26 | ||
46 | #define IRQ_MV78XX0_TDMI 27 | ||
47 | |||
48 | /* | ||
49 | * MV78xx0 High Interrupt Controller | ||
50 | */ | ||
51 | #define IRQ_MV78XX0_PCIE_00 32 | ||
52 | #define IRQ_MV78XX0_PCIE_01 33 | ||
53 | #define IRQ_MV78XX0_PCIE_02 34 | ||
54 | #define IRQ_MV78XX0_PCIE_03 35 | ||
55 | #define IRQ_MV78XX0_PCIE_10 36 | ||
56 | #define IRQ_MV78XX0_PCIE_11 37 | ||
57 | #define IRQ_MV78XX0_PCIE_12 38 | ||
58 | #define IRQ_MV78XX0_PCIE_13 39 | ||
59 | #define IRQ_MV78XX0_GE00_SUM 40 | ||
60 | #define IRQ_MV78XX0_GE00_RX 41 | ||
61 | #define IRQ_MV78XX0_GE00_TX 42 | ||
62 | #define IRQ_MV78XX0_GE00_MISC 43 | ||
63 | #define IRQ_MV78XX0_GE01_SUM 44 | ||
64 | #define IRQ_MV78XX0_GE01_RX 45 | ||
65 | #define IRQ_MV78XX0_GE01_TX 46 | ||
66 | #define IRQ_MV78XX0_GE01_MISC 47 | ||
67 | #define IRQ_MV78XX0_GE10_SUM 48 | ||
68 | #define IRQ_MV78XX0_GE10_RX 49 | ||
69 | #define IRQ_MV78XX0_GE10_TX 50 | ||
70 | #define IRQ_MV78XX0_GE10_MISC 51 | ||
71 | #define IRQ_MV78XX0_GE11_SUM 52 | ||
72 | #define IRQ_MV78XX0_GE11_RX 53 | ||
73 | #define IRQ_MV78XX0_GE11_TX 54 | ||
74 | #define IRQ_MV78XX0_GE11_MISC 55 | ||
75 | #define IRQ_MV78XX0_GPIO_0_7 56 | ||
76 | #define IRQ_MV78XX0_GPIO_8_15 57 | ||
77 | #define IRQ_MV78XX0_GPIO_16_23 58 | ||
78 | #define IRQ_MV78XX0_GPIO_24_31 59 | ||
79 | #define IRQ_MV78XX0_DB_IN 60 | ||
80 | #define IRQ_MV78XX0_DB_OUT 61 | ||
81 | |||
82 | /* | ||
83 | * MV78XX0 General Purpose Pins | ||
84 | */ | ||
85 | #define IRQ_MV78XX0_GPIO_START 64 | ||
86 | #define NR_GPIO_IRQS GPIO_MAX | ||
87 | |||
88 | #define NR_IRQS (IRQ_MV78XX0_GPIO_START + NR_GPIO_IRQS) | ||
89 | |||
90 | |||
91 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/memory.h b/include/asm-arm/arch-mv78xx0/memory.h new file mode 100644 index 000000000000..721a6b185b91 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/memory.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/memory.h | ||
3 | */ | ||
4 | |||
5 | #ifndef __ASM_ARCH_MEMORY_H | ||
6 | #define __ASM_ARCH_MEMORY_H | ||
7 | |||
8 | #define PHYS_OFFSET UL(0x00000000) | ||
9 | |||
10 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
11 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
12 | |||
13 | |||
14 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/mv78xx0.h b/include/asm-arm/arch-mv78xx0/mv78xx0.h new file mode 100644 index 000000000000..9f5d83c73faa --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/mv78xx0.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/mv78xx0.h | ||
3 | * | ||
4 | * Generic definitions for Marvell MV78xx0 SoC flavors: | ||
5 | * MV781x0 and MV782x0. | ||
6 | * | ||
7 | * This file is licensed under the terms of the GNU General Public | ||
8 | * License version 2. This program is licensed "as is" without any | ||
9 | * warranty of any kind, whether express or implied. | ||
10 | */ | ||
11 | |||
12 | #ifndef __ASM_ARCH_MV78XX0_H | ||
13 | #define __ASM_ARCH_MV78XX0_H | ||
14 | |||
15 | /* | ||
16 | * Marvell MV78xx0 address maps. | ||
17 | * | ||
18 | * phys | ||
19 | * c0000000 PCIe Memory space | ||
20 | * f0800000 PCIe #0 I/O space | ||
21 | * f0900000 PCIe #1 I/O space | ||
22 | * f0a00000 PCIe #2 I/O space | ||
23 | * f0b00000 PCIe #3 I/O space | ||
24 | * f0c00000 PCIe #4 I/O space | ||
25 | * f0d00000 PCIe #5 I/O space | ||
26 | * f0e00000 PCIe #6 I/O space | ||
27 | * f0f00000 PCIe #7 I/O space | ||
28 | * f1000000 on-chip peripheral registers | ||
29 | * | ||
30 | * virt phys size | ||
31 | * fe400000 f102x000 16K core-specific peripheral registers | ||
32 | * fe700000 f0800000 1M PCIe #0 I/O space | ||
33 | * fe800000 f0900000 1M PCIe #1 I/O space | ||
34 | * fe900000 f0a00000 1M PCIe #2 I/O space | ||
35 | * fea00000 f0b00000 1M PCIe #3 I/O space | ||
36 | * feb00000 f0c00000 1M PCIe #4 I/O space | ||
37 | * fec00000 f0d00000 1M PCIe #5 I/O space | ||
38 | * fed00000 f0e00000 1M PCIe #6 I/O space | ||
39 | * fee00000 f0f00000 1M PCIe #7 I/O space | ||
40 | * fef00000 f1000000 1M on-chip peripheral registers | ||
41 | */ | ||
42 | #define MV78XX0_CORE0_REGS_PHYS_BASE 0xf1020000 | ||
43 | #define MV78XX0_CORE1_REGS_PHYS_BASE 0xf1024000 | ||
44 | #define MV78XX0_CORE_REGS_VIRT_BASE 0xfe400000 | ||
45 | #define MV78XX0_CORE_REGS_SIZE SZ_16K | ||
46 | |||
47 | #define MV78XX0_PCIE_IO_PHYS_BASE(i) (0xf0800000 + ((i) << 20)) | ||
48 | #define MV78XX0_PCIE_IO_VIRT_BASE(i) (0xfe700000 + ((i) << 20)) | ||
49 | #define MV78XX0_PCIE_IO_SIZE SZ_1M | ||
50 | |||
51 | #define MV78XX0_REGS_PHYS_BASE 0xf1000000 | ||
52 | #define MV78XX0_REGS_VIRT_BASE 0xfef00000 | ||
53 | #define MV78XX0_REGS_SIZE SZ_1M | ||
54 | |||
55 | #define MV78XX0_PCIE_MEM_PHYS_BASE 0xc0000000 | ||
56 | #define MV78XX0_PCIE_MEM_SIZE 0x30000000 | ||
57 | |||
58 | /* | ||
59 | * Core-specific peripheral registers. | ||
60 | */ | ||
61 | #define BRIDGE_VIRT_BASE (MV78XX0_CORE_REGS_VIRT_BASE) | ||
62 | #define CPU_CONTROL (BRIDGE_VIRT_BASE | 0x0104) | ||
63 | #define L2_WRITETHROUGH 0x00020000 | ||
64 | #define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108) | ||
65 | #define SOFT_RESET_OUT_EN 0x00000004 | ||
66 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | ||
67 | #define SOFT_RESET 0x00000001 | ||
68 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | ||
69 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
70 | #define BRIDGE_INT_TIMER0 0x0002 | ||
71 | #define BRIDGE_INT_TIMER1 0x0004 | ||
72 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | ||
73 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | ||
74 | #define IRQ_CAUSE_LOW_OFF 0x0004 | ||
75 | #define IRQ_CAUSE_HIGH_OFF 0x0008 | ||
76 | #define IRQ_MASK_LOW_OFF 0x0010 | ||
77 | #define IRQ_MASK_HIGH_OFF 0x0014 | ||
78 | #define TIMER_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0300) | ||
79 | |||
80 | /* | ||
81 | * Register Map | ||
82 | */ | ||
83 | #define DDR_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x00000) | ||
84 | #define DDR_WINDOW_CPU0_BASE (DDR_VIRT_BASE | 0x1500) | ||
85 | #define DDR_WINDOW_CPU1_BASE (DDR_VIRT_BASE | 0x1700) | ||
86 | |||
87 | #define DEV_BUS_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x10000) | ||
88 | #define DEV_BUS_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x10000) | ||
89 | #define SAMPLE_AT_RESET_LOW (DEV_BUS_VIRT_BASE | 0x0030) | ||
90 | #define SAMPLE_AT_RESET_HIGH (DEV_BUS_VIRT_BASE | 0x0034) | ||
91 | #define UART0_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2000) | ||
92 | #define UART0_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2000) | ||
93 | #define UART1_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2100) | ||
94 | #define UART1_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2100) | ||
95 | #define UART2_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2200) | ||
96 | #define UART2_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2200) | ||
97 | #define UART3_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2300) | ||
98 | #define UART3_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2300) | ||
99 | |||
100 | #define GE10_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x30000) | ||
101 | #define GE11_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x34000) | ||
102 | |||
103 | #define PCIE00_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x40000) | ||
104 | #define PCIE01_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x44000) | ||
105 | #define PCIE02_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x48000) | ||
106 | #define PCIE03_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x4c000) | ||
107 | |||
108 | #define USB0_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x50000) | ||
109 | #define USB1_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x51000) | ||
110 | #define USB2_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x52000) | ||
111 | |||
112 | #define GE00_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x70000) | ||
113 | #define GE01_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x74000) | ||
114 | |||
115 | #define PCIE10_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x80000) | ||
116 | #define PCIE11_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x84000) | ||
117 | #define PCIE12_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x88000) | ||
118 | #define PCIE13_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x8c000) | ||
119 | |||
120 | #define SATA_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0xa0000) | ||
121 | |||
122 | |||
123 | #define GPIO_MAX 32 | ||
124 | |||
125 | |||
126 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/system.h b/include/asm-arm/arch-mv78xx0/system.h new file mode 100644 index 000000000000..7eb47d376db9 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/system.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/system.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_SYSTEM_H | ||
10 | #define __ASM_ARCH_SYSTEM_H | ||
11 | |||
12 | #include <asm/arch/hardware.h> | ||
13 | #include <asm/arch/mv78xx0.h> | ||
14 | |||
15 | static inline void arch_idle(void) | ||
16 | { | ||
17 | cpu_do_idle(); | ||
18 | } | ||
19 | |||
20 | static inline void arch_reset(char mode) | ||
21 | { | ||
22 | /* | ||
23 | * Enable soft reset to assert RSTOUTn. | ||
24 | */ | ||
25 | writel(SOFT_RESET_OUT_EN, RSTOUTn_MASK); | ||
26 | |||
27 | /* | ||
28 | * Assert soft reset. | ||
29 | */ | ||
30 | writel(SOFT_RESET, SYSTEM_SOFT_RESET); | ||
31 | |||
32 | while (1) | ||
33 | ; | ||
34 | } | ||
35 | |||
36 | |||
37 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/timex.h b/include/asm-arm/arch-mv78xx0/timex.h new file mode 100644 index 000000000000..a854b1ccbd01 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/timex.h | |||
@@ -0,0 +1,9 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/timex.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #define CLOCK_TICK_RATE (100 * HZ) | ||
diff --git a/include/asm-arm/arch-mv78xx0/uncompress.h b/include/asm-arm/arch-mv78xx0/uncompress.h new file mode 100644 index 000000000000..3bfe0a293ef7 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/uncompress.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/uncompress.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #include <linux/serial_reg.h> | ||
10 | #include <asm/arch/mv78xx0.h> | ||
11 | |||
12 | #define SERIAL_BASE ((unsigned char *)UART0_PHYS_BASE) | ||
13 | |||
14 | static void putc(const char c) | ||
15 | { | ||
16 | unsigned char *base = SERIAL_BASE; | ||
17 | int i; | ||
18 | |||
19 | for (i = 0; i < 0x1000; i++) { | ||
20 | if (base[UART_LSR << 2] & UART_LSR_THRE) | ||
21 | break; | ||
22 | barrier(); | ||
23 | } | ||
24 | |||
25 | base[UART_TX << 2] = c; | ||
26 | } | ||
27 | |||
28 | static void flush(void) | ||
29 | { | ||
30 | unsigned char *base = SERIAL_BASE; | ||
31 | unsigned char mask; | ||
32 | int i; | ||
33 | |||
34 | mask = UART_LSR_TEMT | UART_LSR_THRE; | ||
35 | |||
36 | for (i = 0; i < 0x1000; i++) { | ||
37 | if ((base[UART_LSR << 2] & mask) == mask) | ||
38 | break; | ||
39 | barrier(); | ||
40 | } | ||
41 | } | ||
42 | |||
43 | /* | ||
44 | * nothing to do | ||
45 | */ | ||
46 | #define arch_decomp_setup() | ||
47 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-mv78xx0/vmalloc.h b/include/asm-arm/arch-mv78xx0/vmalloc.h new file mode 100644 index 000000000000..f2c512197579 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/vmalloc.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | #define VMALLOC_END 0xfe000000 | ||
diff --git a/include/asm-arm/arch-mxc/board-mx27ads.h b/include/asm-arm/arch-mxc/board-mx27ads.h new file mode 100644 index 000000000000..61e66dac90ef --- /dev/null +++ b/include/asm-arm/arch-mxc/board-mx27ads.h | |||
@@ -0,0 +1,354 @@ | |||
1 | /* | ||
2 | * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | */ | ||
4 | |||
5 | /* | ||
6 | * The code contained herein is licensed under the GNU General Public | ||
7 | * License. You may obtain a copy of the GNU General Public License | ||
8 | * Version 2 or later at the following locations: | ||
9 | * | ||
10 | * http://www.opensource.org/licenses/gpl-license.html | ||
11 | * http://www.gnu.org/copyleft/gpl.html | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARCH_MXC_BOARD_MX27ADS_H__ | ||
15 | #define __ASM_ARCH_MXC_BOARD_MX27ADS_H__ | ||
16 | |||
17 | /* external interrupt multiplexer */ | ||
18 | #define MXC_EXP_IO_BASE (MXC_GPIO_BASE + MXC_MAX_GPIO_LINES) | ||
19 | |||
20 | #define MXC_VIRTUAL_INTS_BASE (MXC_EXP_IO_BASE + MXC_MAX_EXP_IO_LINES) | ||
21 | #define MXC_SDIO1_CARD_IRQ MXC_VIRTUAL_INTS_BASE | ||
22 | #define MXC_SDIO2_CARD_IRQ (MXC_VIRTUAL_INTS_BASE + 1) | ||
23 | #define MXC_SDIO3_CARD_IRQ (MXC_VIRTUAL_INTS_BASE + 2) | ||
24 | |||
25 | #define MXC_MAX_BOARD_INTS (MXC_MAX_EXP_IO_LINES + \ | ||
26 | MXC_MAX_VIRTUAL_INTS) | ||
27 | |||
28 | /* | ||
29 | * MXC UART EVB board level configurations | ||
30 | */ | ||
31 | |||
32 | #define MXC_LL_EXTUART_PADDR (CS4_BASE_ADDR + 0x20000) | ||
33 | #define MXC_LL_EXTUART_VADDR (CS4_BASE_ADDR_VIRT + 0x20000) | ||
34 | #define MXC_LL_EXTUART_16BIT_BUS | ||
35 | |||
36 | #define MXC_LL_UART_PADDR UART1_BASE_ADDR | ||
37 | #define MXC_LL_UART_VADDR AIPI_IO_ADDRESS(UART1_BASE_ADDR) | ||
38 | |||
39 | /* | ||
40 | * @name Memory Size parameters | ||
41 | */ | ||
42 | |||
43 | /* | ||
44 | * Size of SDRAM memory | ||
45 | */ | ||
46 | #define SDRAM_MEM_SIZE SZ_128M | ||
47 | |||
48 | /* | ||
49 | * PBC Controller parameters | ||
50 | */ | ||
51 | |||
52 | /* | ||
53 | * Base address of PBC controller, CS4 | ||
54 | */ | ||
55 | #define PBC_BASE_ADDRESS 0xEB000000 | ||
56 | #define PBC_REG_ADDR(offset) (PBC_BASE_ADDRESS + (offset)) | ||
57 | |||
58 | /* | ||
59 | * PBC Interupt name definitions | ||
60 | */ | ||
61 | #define PBC_GPIO1_0 0 | ||
62 | #define PBC_GPIO1_1 1 | ||
63 | #define PBC_GPIO1_2 2 | ||
64 | #define PBC_GPIO1_3 3 | ||
65 | #define PBC_GPIO1_4 4 | ||
66 | #define PBC_GPIO1_5 5 | ||
67 | |||
68 | #define PBC_INTR_MAX_NUM 6 | ||
69 | #define PBC_INTR_SHARED_MAX_NUM 8 | ||
70 | |||
71 | /* When the PBC address connection is fixed in h/w, defined as 1 */ | ||
72 | #define PBC_ADDR_SH 0 | ||
73 | |||
74 | /* Offsets for the PBC Controller register */ | ||
75 | /* | ||
76 | * PBC Board version register offset | ||
77 | */ | ||
78 | #define PBC_VERSION_REG PBC_REG_ADDR(0x00000 >> PBC_ADDR_SH) | ||
79 | /* | ||
80 | * PBC Board control register 1 set address. | ||
81 | */ | ||
82 | #define PBC_BCTRL1_SET_REG PBC_REG_ADDR(0x00008 >> PBC_ADDR_SH) | ||
83 | /* | ||
84 | * PBC Board control register 1 clear address. | ||
85 | */ | ||
86 | #define PBC_BCTRL1_CLEAR_REG PBC_REG_ADDR(0x0000C >> PBC_ADDR_SH) | ||
87 | /* | ||
88 | * PBC Board control register 2 set address. | ||
89 | */ | ||
90 | #define PBC_BCTRL2_SET_REG PBC_REG_ADDR(0x00010 >> PBC_ADDR_SH) | ||
91 | /* | ||
92 | * PBC Board control register 2 clear address. | ||
93 | */ | ||
94 | #define PBC_BCTRL2_CLEAR_REG PBC_REG_ADDR(0x00014 >> PBC_ADDR_SH) | ||
95 | /* | ||
96 | * PBC Board control register 3 set address. | ||
97 | */ | ||
98 | #define PBC_BCTRL3_SET_REG PBC_REG_ADDR(0x00018 >> PBC_ADDR_SH) | ||
99 | /* | ||
100 | * PBC Board control register 3 clear address. | ||
101 | */ | ||
102 | #define PBC_BCTRL3_CLEAR_REG PBC_REG_ADDR(0x0001C >> PBC_ADDR_SH) | ||
103 | /* | ||
104 | * PBC Board control register 3 set address. | ||
105 | */ | ||
106 | #define PBC_BCTRL4_SET_REG PBC_REG_ADDR(0x00020 >> PBC_ADDR_SH) | ||
107 | /* | ||
108 | * PBC Board control register 4 clear address. | ||
109 | */ | ||
110 | #define PBC_BCTRL4_CLEAR_REG PBC_REG_ADDR(0x00024 >> PBC_ADDR_SH) | ||
111 | /*PBC_ADDR_SH | ||
112 | * PBC Board status register 1. | ||
113 | */ | ||
114 | #define PBC_BSTAT1_REG PBC_REG_ADDR(0x00028 >> PBC_ADDR_SH) | ||
115 | /* | ||
116 | * PBC Board interrupt status register. | ||
117 | */ | ||
118 | #define PBC_INTSTATUS_REG PBC_REG_ADDR(0x0002C >> PBC_ADDR_SH) | ||
119 | /* | ||
120 | * PBC Board interrupt current status register. | ||
121 | */ | ||
122 | #define PBC_INTCURR_STATUS_REG PBC_REG_ADDR(0x00034 >> PBC_ADDR_SH) | ||
123 | /* | ||
124 | * PBC Interrupt mask register set address. | ||
125 | */ | ||
126 | #define PBC_INTMASK_SET_REG PBC_REG_ADDR(0x00038 >> PBC_ADDR_SH) | ||
127 | /* | ||
128 | * PBC Interrupt mask register clear address. | ||
129 | */ | ||
130 | #define PBC_INTMASK_CLEAR_REG PBC_REG_ADDR(0x0003C >> PBC_ADDR_SH) | ||
131 | /* | ||
132 | * External UART A. | ||
133 | */ | ||
134 | #define PBC_SC16C652_UARTA_REG PBC_REG_ADDR(0x20000 >> PBC_ADDR_SH) | ||
135 | /* | ||
136 | * UART 4 Expanding Signal Status. | ||
137 | */ | ||
138 | #define PBC_UART_STATUS_REG PBC_REG_ADDR(0x22000 >> PBC_ADDR_SH) | ||
139 | /* | ||
140 | * UART 4 Expanding Signal Control Set. | ||
141 | */ | ||
142 | #define PBC_UCTRL_SET_REG PBC_REG_ADDR(0x24000 >> PBC_ADDR_SH) | ||
143 | /* | ||
144 | * UART 4 Expanding Signal Control Clear. | ||
145 | */ | ||
146 | #define PBC_UCTRL_CLR_REG PBC_REG_ADDR(0x26000 >> PBC_ADDR_SH) | ||
147 | /* | ||
148 | * Ethernet Controller IO base address. | ||
149 | */ | ||
150 | #define PBC_CS8900A_IOBASE_REG PBC_REG_ADDR(0x40000 >> PBC_ADDR_SH) | ||
151 | /* | ||
152 | * Ethernet Controller Memory base address. | ||
153 | */ | ||
154 | #define PBC_CS8900A_MEMBASE_REG PBC_REG_ADDR(0x42000 >> PBC_ADDR_SH) | ||
155 | /* | ||
156 | * Ethernet Controller DMA base address. | ||
157 | */ | ||
158 | #define PBC_CS8900A_DMABASE_REG PBC_REG_ADDR(0x44000 >> PBC_ADDR_SH) | ||
159 | |||
160 | /* PBC Board Version Register bit definition */ | ||
161 | #define PBC_VERSION_ADS 0x8000 /* Bit15=1 means version for ads */ | ||
162 | #define PBC_VERSION_EVB_REVB 0x4000 /* BIT14=1 means version for evb revb */ | ||
163 | |||
164 | /* PBC Board Control Register 1 bit definitions */ | ||
165 | #define PBC_BCTRL1_ERST 0x0001 /* Ethernet Reset */ | ||
166 | #define PBC_BCTRL1_URST 0x0002 /* Reset External UART controller */ | ||
167 | #define PBC_BCTRL1_FRST 0x0004 /* FEC Reset */ | ||
168 | #define PBC_BCTRL1_ESLEEP 0x0010 /* Enable ethernet Sleep */ | ||
169 | #define PBC_BCTRL1_LCDON 0x0800 /* Enable the LCD */ | ||
170 | |||
171 | /* PBC Board Control Register 2 bit definitions */ | ||
172 | #define PBC_BCTRL2_VCC_EN 0x0004 /* Enable VCC */ | ||
173 | #define PBC_BCTRL2_VPP_EN 0x0008 /* Enable Vpp */ | ||
174 | #define PBC_BCTRL2_ATAFEC_EN 0X0010 | ||
175 | #define PBC_BCTRL2_ATAFEC_SEL 0X0020 | ||
176 | #define PBC_BCTRL2_ATA_EN 0X0040 | ||
177 | #define PBC_BCTRL2_IRDA_SD 0X0080 | ||
178 | #define PBC_BCTRL2_IRDA_EN 0X0100 | ||
179 | #define PBC_BCTRL2_CCTL10 0X0200 | ||
180 | #define PBC_BCTRL2_CCTL11 0X0400 | ||
181 | |||
182 | /* PBC Board Control Register 3 bit definitions */ | ||
183 | #define PBC_BCTRL3_HSH_EN 0X0020 | ||
184 | #define PBC_BCTRL3_FSH_MOD 0X0040 | ||
185 | #define PBC_BCTRL3_OTG_HS_EN 0X0080 | ||
186 | #define PBC_BCTRL3_OTG_VBUS_EN 0X0100 | ||
187 | #define PBC_BCTRL3_FSH_VBUS_EN 0X0200 | ||
188 | #define PBC_BCTRL3_USB_OTG_ON 0X0800 | ||
189 | #define PBC_BCTRL3_USB_FSH_ON 0X1000 | ||
190 | |||
191 | /* PBC Board Control Register 4 bit definitions */ | ||
192 | #define PBC_BCTRL4_REGEN_SEL 0X0001 | ||
193 | #define PBC_BCTRL4_USER_OFF 0X0002 | ||
194 | #define PBC_BCTRL4_VIB_EN 0X0004 | ||
195 | #define PBC_BCTRL4_PWRGT1_EN 0X0008 | ||
196 | #define PBC_BCTRL4_PWRGT2_EN 0X0010 | ||
197 | #define PBC_BCTRL4_STDBY_PRI 0X0020 | ||
198 | |||
199 | #ifndef __ASSEMBLY__ | ||
200 | /* | ||
201 | * Enumerations for SD cards and memory stick card. This corresponds to | ||
202 | * the card EN bits in the IMR: SD1_EN | MS_EN | SD3_EN | SD2_EN. | ||
203 | */ | ||
204 | enum mxc_card_no { | ||
205 | MXC_CARD_SD2 = 0, | ||
206 | MXC_CARD_SD3, | ||
207 | MXC_CARD_MS, | ||
208 | MXC_CARD_SD1, | ||
209 | MXC_CARD_MIN = MXC_CARD_SD2, | ||
210 | MXC_CARD_MAX = MXC_CARD_SD1, | ||
211 | }; | ||
212 | #endif | ||
213 | |||
214 | #define MXC_CPLD_VER_1_50 0x01 | ||
215 | |||
216 | /* | ||
217 | * PBC BSTAT Register bit definitions | ||
218 | */ | ||
219 | #define PBC_BSTAT_PRI_INT 0X0001 | ||
220 | #define PBC_BSTAT_USB_BYP 0X0002 | ||
221 | #define PBC_BSTAT_ATA_IOCS16 0X0004 | ||
222 | #define PBC_BSTAT_ATA_CBLID 0X0008 | ||
223 | #define PBC_BSTAT_ATA_DASP 0X0010 | ||
224 | #define PBC_BSTAT_PWR_RDY 0X0020 | ||
225 | #define PBC_BSTAT_SD3_WP 0X0100 | ||
226 | #define PBC_BSTAT_SD2_WP 0X0200 | ||
227 | #define PBC_BSTAT_SD1_WP 0X0400 | ||
228 | #define PBC_BSTAT_SD3_DET 0X0800 | ||
229 | #define PBC_BSTAT_SD2_DET 0X1000 | ||
230 | #define PBC_BSTAT_SD1_DET 0X2000 | ||
231 | #define PBC_BSTAT_MS_DET 0X4000 | ||
232 | #define PBC_BSTAT_SD3_DET_BIT 11 | ||
233 | #define PBC_BSTAT_SD2_DET_BIT 12 | ||
234 | #define PBC_BSTAT_SD1_DET_BIT 13 | ||
235 | #define PBC_BSTAT_MS_DET_BIT 14 | ||
236 | #define MXC_BSTAT_BIT(n) ((n == MXC_CARD_SD2) ? PBC_BSTAT_SD2_DET : \ | ||
237 | ((n == MXC_CARD_SD3) ? PBC_BSTAT_SD3_DET : \ | ||
238 | ((n == MXC_CARD_SD1) ? PBC_BSTAT_SD1_DET : \ | ||
239 | ((n == MXC_CARD_MS) ? PBC_BSTAT_MS_DET : \ | ||
240 | 0x0)))) | ||
241 | |||
242 | /* | ||
243 | * PBC UART Control Register bit definitions | ||
244 | */ | ||
245 | #define PBC_UCTRL_DCE_DCD 0X0001 | ||
246 | #define PBC_UCTRL_DCE_DSR 0X0002 | ||
247 | #define PBC_UCTRL_DCE_RI 0X0004 | ||
248 | #define PBC_UCTRL_DTE_DTR 0X0100 | ||
249 | |||
250 | /* | ||
251 | * PBC UART Status Register bit definitions | ||
252 | */ | ||
253 | #define PBC_USTAT_DTE_DCD 0X0001 | ||
254 | #define PBC_USTAT_DTE_DSR 0X0002 | ||
255 | #define PBC_USTAT_DTE_RI 0X0004 | ||
256 | #define PBC_USTAT_DCE_DTR 0X0100 | ||
257 | |||
258 | /* | ||
259 | * PBC Interupt mask register bit definitions | ||
260 | */ | ||
261 | #define PBC_INTR_SD3_R_EN_BIT 4 | ||
262 | #define PBC_INTR_SD2_R_EN_BIT 0 | ||
263 | #define PBC_INTR_SD1_R_EN_BIT 6 | ||
264 | #define PBC_INTR_MS_R_EN_BIT 5 | ||
265 | #define PBC_INTR_SD3_EN_BIT 13 | ||
266 | #define PBC_INTR_SD2_EN_BIT 12 | ||
267 | #define PBC_INTR_MS_EN_BIT 14 | ||
268 | #define PBC_INTR_SD1_EN_BIT 15 | ||
269 | |||
270 | #define PBC_INTR_SD2_R_EN 0x0001 | ||
271 | #define PBC_INTR_LOW_BAT 0X0002 | ||
272 | #define PBC_INTR_OTG_FSOVER 0X0004 | ||
273 | #define PBC_INTR_FSH_OVER 0X0008 | ||
274 | #define PBC_INTR_SD3_R_EN 0x0010 | ||
275 | #define PBC_INTR_MS_R_EN 0x0020 | ||
276 | #define PBC_INTR_SD1_R_EN 0x0040 | ||
277 | #define PBC_INTR_FEC_INT 0X0080 | ||
278 | #define PBC_INTR_ENET_INT 0X0100 | ||
279 | #define PBC_INTR_OTGFS_INT 0X0200 | ||
280 | #define PBC_INTR_XUART_INT 0X0400 | ||
281 | #define PBC_INTR_CCTL12 0X0800 | ||
282 | #define PBC_INTR_SD2_EN 0x1000 | ||
283 | #define PBC_INTR_SD3_EN 0x2000 | ||
284 | #define PBC_INTR_MS_EN 0x4000 | ||
285 | #define PBC_INTR_SD1_EN 0x8000 | ||
286 | |||
287 | |||
288 | |||
289 | /* For interrupts like xuart, enet etc */ | ||
290 | #define EXPIO_PARENT_INT IOMUX_TO_IRQ(MX27_PIN_TIN) | ||
291 | #define MXC_MAX_EXP_IO_LINES 16 | ||
292 | |||
293 | /* | ||
294 | * This corresponds to PBC_INTMASK_SET_REG at offset 0x38. | ||
295 | * | ||
296 | */ | ||
297 | #define EXPIO_INT_LOW_BAT (MXC_EXP_IO_BASE + 1) | ||
298 | #define EXPIO_INT_OTG_FS_OVR (MXC_EXP_IO_BASE + 2) | ||
299 | #define EXPIO_INT_FSH_OVR (MXC_EXP_IO_BASE + 3) | ||
300 | #define EXPIO_INT_RES4 (MXC_EXP_IO_BASE + 4) | ||
301 | #define EXPIO_INT_RES5 (MXC_EXP_IO_BASE + 5) | ||
302 | #define EXPIO_INT_RES6 (MXC_EXP_IO_BASE + 6) | ||
303 | #define EXPIO_INT_FEC (MXC_EXP_IO_BASE + 7) | ||
304 | #define EXPIO_INT_ENET_INT (MXC_EXP_IO_BASE + 8) | ||
305 | #define EXPIO_INT_OTG_FS_INT (MXC_EXP_IO_BASE + 9) | ||
306 | #define EXPIO_INT_XUART_INTA (MXC_EXP_IO_BASE + 10) | ||
307 | #define EXPIO_INT_CCTL12_INT (MXC_EXP_IO_BASE + 11) | ||
308 | #define EXPIO_INT_SD2_EN (MXC_EXP_IO_BASE + 12) | ||
309 | #define EXPIO_INT_SD3_EN (MXC_EXP_IO_BASE + 13) | ||
310 | #define EXPIO_INT_MS_EN (MXC_EXP_IO_BASE + 14) | ||
311 | #define EXPIO_INT_SD1_EN (MXC_EXP_IO_BASE + 15) | ||
312 | |||
313 | /* | ||
314 | * This is System IRQ used by CS8900A for interrupt generation | ||
315 | * taken from platform.h | ||
316 | */ | ||
317 | #define CS8900AIRQ EXPIO_INT_ENET_INT | ||
318 | /* This is I/O Base address used to access registers of CS8900A on MXC ADS */ | ||
319 | #define CS8900A_BASE_ADDRESS (PBC_CS8900A_IOBASE_REG + 0x300) | ||
320 | |||
321 | #define MXC_PMIC_INT_LINE IOMUX_TO_IRQ(MX27_PIN_TOUT) | ||
322 | |||
323 | /* | ||
324 | * This is used to detect if the CPLD version is for mx27 evb board rev-a | ||
325 | */ | ||
326 | #define PBC_CPLD_VERSION_IS_REVA() \ | ||
327 | ((__raw_readw(PBC_VERSION_REG) & \ | ||
328 | (PBC_VERSION_ADS | PBC_VERSION_EVB_REVB))\ | ||
329 | == 0) | ||
330 | |||
331 | /* This is used to active or inactive ata signal in CPLD . | ||
332 | * It is dependent with hardware | ||
333 | */ | ||
334 | #define PBC_ATA_SIGNAL_ACTIVE() \ | ||
335 | __raw_writew( \ | ||
336 | PBC_BCTRL2_ATAFEC_EN|PBC_BCTRL2_ATAFEC_SEL|PBC_BCTRL2_ATA_EN, \ | ||
337 | PBC_BCTRL2_CLEAR_REG) | ||
338 | |||
339 | #define PBC_ATA_SIGNAL_INACTIVE() \ | ||
340 | __raw_writew( \ | ||
341 | PBC_BCTRL2_ATAFEC_EN|PBC_BCTRL2_ATAFEC_SEL|PBC_BCTRL2_ATA_EN, \ | ||
342 | PBC_BCTRL2_SET_REG) | ||
343 | |||
344 | #define MXC_BD_LED1 (1 << 5) | ||
345 | #define MXC_BD_LED2 (1 << 6) | ||
346 | #define MXC_BD_LED_ON(led) \ | ||
347 | __raw_writew(led, PBC_BCTRL1_SET_REG) | ||
348 | #define MXC_BD_LED_OFF(led) \ | ||
349 | __raw_writew(led, PBC_BCTRL1_CLEAR_REG) | ||
350 | |||
351 | /* to determine the correct external crystal reference */ | ||
352 | #define CKIH_27MHZ_BIT_SET (1 << 3) | ||
353 | |||
354 | #endif /* __ASM_ARCH_MXC_BOARD_MX27ADS_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/board-mx31ads.h b/include/asm-arm/arch-mxc/board-mx31ads.h index 8590127760a8..1bc6fb0f9a83 100644 --- a/include/asm-arm/arch-mxc/board-mx31ads.h +++ b/include/asm-arm/arch-mxc/board-mx31ads.h | |||
@@ -109,4 +109,9 @@ | |||
109 | 109 | ||
110 | #define MXC_MAX_EXP_IO_LINES 16 | 110 | #define MXC_MAX_EXP_IO_LINES 16 |
111 | 111 | ||
112 | /* mandatory for CONFIG_LL_DEBUG */ | ||
113 | |||
114 | #define MXC_LL_UART_PADDR UART1_BASE_ADDR | ||
115 | #define MXC_LL_UART_VADDR AIPS1_IO_ADDRESS(UART1_BASE_ADDR) | ||
116 | |||
112 | #endif /* __ASM_ARCH_MXC_BOARD_MX31ADS_H__ */ | 117 | #endif /* __ASM_ARCH_MXC_BOARD_MX31ADS_H__ */ |
diff --git a/include/asm-arm/arch-mxc/board-mx31lite.h b/include/asm-arm/arch-mxc/board-mx31lite.h new file mode 100644 index 000000000000..e4e5cf5ad7db --- /dev/null +++ b/include/asm-arm/arch-mxc/board-mx31lite.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * Copyright 2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | */ | ||
4 | |||
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 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_MXC_BOARD_MX31LITE_H__ | ||
12 | #define __ASM_ARCH_MXC_BOARD_MX31LITE_H__ | ||
13 | |||
14 | #define MXC_MAX_EXP_IO_LINES 16 | ||
15 | |||
16 | |||
17 | /* | ||
18 | * Memory Size parameters | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | * Size of SDRAM memory | ||
23 | */ | ||
24 | #define SDRAM_MEM_SIZE SZ_128M | ||
25 | /* | ||
26 | * Size of MBX buffer memory | ||
27 | */ | ||
28 | #define MXC_MBX_MEM_SIZE SZ_16M | ||
29 | /* | ||
30 | * Size of memory available to kernel | ||
31 | */ | ||
32 | #define MEM_SIZE (SDRAM_MEM_SIZE - MXC_MBX_MEM_SIZE) | ||
33 | |||
34 | #define MXC_LL_UART_PADDR UART1_BASE_ADDR | ||
35 | #define MXC_LL_UART_VADDR AIPS1_IO_ADDRESS(UART1_BASE_ADDR) | ||
36 | |||
37 | #endif /* __ASM_ARCH_MXC_BOARD_MX31ADS_H__ */ | ||
38 | |||
diff --git a/include/asm-arm/arch-mxc/board-pcm037.h b/include/asm-arm/arch-mxc/board-pcm037.h new file mode 100644 index 000000000000..82232ba3c8fc --- /dev/null +++ b/include/asm-arm/arch-mxc/board-pcm037.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008 Sascha Hauer, Pengutronix | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_MXC_BOARD_PCM037_H__ | ||
20 | #define __ASM_ARCH_MXC_BOARD_PCM037_H__ | ||
21 | |||
22 | /* mandatory for CONFIG_LL_DEBUG */ | ||
23 | |||
24 | #define MXC_LL_UART_PADDR UART1_BASE_ADDR | ||
25 | #define MXC_LL_UART_VADDR AIPS1_IO_ADDRESS(UART1_BASE_ADDR) | ||
26 | |||
27 | #endif /* __ASM_ARCH_MXC_BOARD_PCM037_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/board-pcm038.h b/include/asm-arm/arch-mxc/board-pcm038.h new file mode 100644 index 000000000000..750c62afd90f --- /dev/null +++ b/include/asm-arm/arch-mxc/board-pcm038.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License | ||
6 | * as published by the Free Software Foundation; either version 2 | ||
7 | * of the License, or (at your option) any later version. | ||
8 | * This program is distributed in the hope that it will be useful, | ||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | * GNU General Public License for more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License | ||
14 | * along with this program; if not, write to the Free Software | ||
15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
16 | * MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_MXC_BOARD_PCM038_H__ | ||
20 | #define __ASM_ARCH_MXC_BOARD_PCM038_H__ | ||
21 | |||
22 | /* mandatory for CONFIG_LL_DEBUG */ | ||
23 | |||
24 | #define MXC_LL_UART_PADDR UART1_BASE_ADDR | ||
25 | #define MXC_LL_UART_VADDR (AIPI_BASE_ADDR_VIRT + 0x0A000) | ||
26 | |||
27 | #ifndef __ASSEMBLY__ | ||
28 | /* | ||
29 | * This CPU module needs a baseboard to work. After basic initializing | ||
30 | * its own devices, it calls baseboard's init function. | ||
31 | * TODO: Add your own baseboard init function and call it from | ||
32 | * inside pcm038_init(). | ||
33 | * | ||
34 | * This example here is for the development board. Refer pcm970-baseboard.c | ||
35 | */ | ||
36 | |||
37 | extern void pcm970_baseboard_init(void); | ||
38 | |||
39 | #endif | ||
40 | |||
41 | #endif /* __ASM_ARCH_MXC_BOARD_PCM038_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/clock.h b/include/asm-arm/arch-mxc/clock.h new file mode 100644 index 000000000000..24caa2b7c91d --- /dev/null +++ b/include/asm-arm/arch-mxc/clock.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * as published by the Free Software Foundation; either version 2 | ||
8 | * of the License, or (at your option) any later version. | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
17 | * MA 02110-1301, USA. | ||
18 | */ | ||
19 | |||
20 | #ifndef __ASM_ARCH_MXC_CLOCK_H__ | ||
21 | #define __ASM_ARCH_MXC_CLOCK_H__ | ||
22 | |||
23 | #ifndef __ASSEMBLY__ | ||
24 | #include <linux/list.h> | ||
25 | |||
26 | struct module; | ||
27 | |||
28 | struct clk { | ||
29 | struct list_head node; | ||
30 | struct module *owner; | ||
31 | const char *name; | ||
32 | int id; | ||
33 | /* Source clock this clk depends on */ | ||
34 | struct clk *parent; | ||
35 | /* Secondary clock to enable/disable with this clock */ | ||
36 | struct clk *secondary; | ||
37 | /* Reference count of clock enable/disable */ | ||
38 | __s8 usecount; | ||
39 | /* Register bit position for clock's enable/disable control. */ | ||
40 | u8 enable_shift; | ||
41 | /* Register address for clock's enable/disable control. */ | ||
42 | u32 enable_reg; | ||
43 | u32 flags; | ||
44 | /* get the current clock rate (always a fresh value) */ | ||
45 | unsigned long (*get_rate) (struct clk *); | ||
46 | /* Function ptr to set the clock to a new rate. The rate must match a | ||
47 | supported rate returned from round_rate. Leave blank if clock is not | ||
48 | programmable */ | ||
49 | int (*set_rate) (struct clk *, unsigned long); | ||
50 | /* Function ptr to round the requested clock rate to the nearest | ||
51 | supported rate that is less than or equal to the requested rate. */ | ||
52 | unsigned long (*round_rate) (struct clk *, unsigned long); | ||
53 | /* Function ptr to enable the clock. Leave blank if clock can not | ||
54 | be gated. */ | ||
55 | int (*enable) (struct clk *); | ||
56 | /* Function ptr to disable the clock. Leave blank if clock can not | ||
57 | be gated. */ | ||
58 | void (*disable) (struct clk *); | ||
59 | /* Function ptr to set the parent clock of the clock. */ | ||
60 | int (*set_parent) (struct clk *, struct clk *); | ||
61 | }; | ||
62 | |||
63 | int clk_register(struct clk *clk); | ||
64 | void clk_unregister(struct clk *clk); | ||
65 | |||
66 | #endif /* __ASSEMBLY__ */ | ||
67 | #endif /* __ASM_ARCH_MXC_CLOCK_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/common.h b/include/asm-arm/arch-mxc/common.h index 23b4350edbd6..a6d2e24aab15 100644 --- a/include/asm-arm/arch-mxc/common.h +++ b/include/asm-arm/arch-mxc/common.h | |||
@@ -11,10 +11,10 @@ | |||
11 | #ifndef __ASM_ARCH_MXC_COMMON_H__ | 11 | #ifndef __ASM_ARCH_MXC_COMMON_H__ |
12 | #define __ASM_ARCH_MXC_COMMON_H__ | 12 | #define __ASM_ARCH_MXC_COMMON_H__ |
13 | 13 | ||
14 | struct sys_timer; | ||
15 | |||
16 | extern void mxc_map_io(void); | 14 | extern void mxc_map_io(void); |
17 | extern void mxc_init_irq(void); | 15 | extern void mxc_init_irq(void); |
18 | extern struct sys_timer mxc_timer; | 16 | extern void mxc_timer_init(const char *clk_timer); |
17 | extern int mxc_clocks_init(unsigned long fref); | ||
18 | extern int mxc_register_gpios(void); | ||
19 | 19 | ||
20 | #endif | 20 | #endif |
diff --git a/include/asm-arm/arch-mxc/debug-macro.S b/include/asm-arm/arch-mxc/debug-macro.S new file mode 100644 index 000000000000..575087f8561a --- /dev/null +++ b/include/asm-arm/arch-mxc/debug-macro.S | |||
@@ -0,0 +1,49 @@ | |||
1 | /* linux/include/asm-arm/arch-imx/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #include <asm/arch/hardware.h> | ||
15 | |||
16 | #ifdef CONFIG_MACH_MX31ADS | ||
17 | #include <asm/arch/board-mx31ads.h> | ||
18 | #endif | ||
19 | #ifdef CONFIG_MACH_PCM037 | ||
20 | #include <asm/arch/board-pcm037.h> | ||
21 | #endif | ||
22 | #ifdef CONFIG_MACH_MX31LITE | ||
23 | #include <asm/arch/board-mx31lite.h> | ||
24 | #endif | ||
25 | #ifdef CONFIG_MACH_MX27ADS | ||
26 | #include <asm/arch/board-mx27ads.h> | ||
27 | #endif | ||
28 | #ifdef CONFIG_MACH_PCM038 | ||
29 | #include <asm/arch/board-pcm038.h> | ||
30 | #endif | ||
31 | .macro addruart,rx | ||
32 | mrc p15, 0, \rx, c1, c0 | ||
33 | tst \rx, #1 @ MMU enabled? | ||
34 | ldreq \rx, =MXC_LL_UART_PADDR @ physical | ||
35 | ldrne \rx, =MXC_LL_UART_VADDR @ virtual | ||
36 | .endm | ||
37 | |||
38 | .macro senduart,rd,rx | ||
39 | str \rd, [\rx, #0x40] @ TXDATA | ||
40 | .endm | ||
41 | |||
42 | .macro waituart,rd,rx | ||
43 | .endm | ||
44 | |||
45 | .macro busyuart,rd,rx | ||
46 | 1002: ldr \rd, [\rx, #0x98] @ SR2 | ||
47 | tst \rd, #1 << 3 @ TXDC | ||
48 | beq 1002b @ wait until transmit done | ||
49 | .endm | ||
diff --git a/include/asm-arm/arch-mxc/gpio.h b/include/asm-arm/arch-mxc/gpio.h new file mode 100644 index 000000000000..d393e15f5a6b --- /dev/null +++ b/include/asm-arm/arch-mxc/gpio.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * Copyright 2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * as published by the Free Software Foundation; either version 2 | ||
8 | * of the License, or (at your option) any later version. | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_MXC_GPIO_H__ | ||
20 | #define __ASM_ARCH_MXC_GPIO_H__ | ||
21 | |||
22 | #include <asm/hardware.h> | ||
23 | #include <asm-generic/gpio.h> | ||
24 | |||
25 | /* use gpiolib dispatchers */ | ||
26 | #define gpio_get_value __gpio_get_value | ||
27 | #define gpio_set_value __gpio_set_value | ||
28 | #define gpio_cansleep __gpio_cansleep | ||
29 | |||
30 | #define gpio_to_irq(gpio) (MXC_MAX_INT_LINES + (gpio)) | ||
31 | #define irq_to_gpio(irq) ((irq) - MXC_MAX_INT_LINES) | ||
32 | |||
33 | struct mxc_gpio_port { | ||
34 | void __iomem *base; | ||
35 | int irq; | ||
36 | int virtual_irq_start; | ||
37 | struct gpio_chip chip; | ||
38 | }; | ||
39 | |||
40 | int mxc_gpio_init(struct mxc_gpio_port*, int); | ||
41 | |||
42 | #endif | ||
diff --git a/include/asm-arm/arch-mxc/hardware.h b/include/asm-arm/arch-mxc/hardware.h index e87ff0679d5e..37cddbaaade7 100644 --- a/include/asm-arm/arch-mxc/hardware.h +++ b/include/asm-arm/arch-mxc/hardware.h | |||
@@ -1,11 +1,20 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. |
3 | */ | 3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de |
4 | 4 | * | |
5 | /* | 5 | * This program is free software; you can redistribute it and/or |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * modify it under the terms of the GNU General Public License |
7 | * it under the terms of the GNU General Public License version 2 as | 7 | * as published by the Free Software Foundation; either version 2 |
8 | * published by the Free Software Foundation. | 8 | * of the License, or (at your option) any later version. |
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
17 | * MA 02110-1301, USA. | ||
9 | */ | 18 | */ |
10 | 19 | ||
11 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ | 20 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ |
@@ -17,15 +26,12 @@ | |||
17 | # include <asm/arch/mx31.h> | 26 | # include <asm/arch/mx31.h> |
18 | #endif | 27 | #endif |
19 | 28 | ||
20 | #include <asm/arch/mxc.h> | 29 | #ifdef CONFIG_ARCH_MX2 |
21 | 30 | # ifdef CONFIG_MACH_MX27 | |
22 | /* | 31 | # include <asm/arch/mx27.h> |
23 | * --------------------------------------------------------------------------- | 32 | # endif |
24 | * Board specific defines | ||
25 | * --------------------------------------------------------------------------- | ||
26 | */ | ||
27 | #ifdef CONFIG_MACH_MX31ADS | ||
28 | # include <asm/arch/board-mx31ads.h> | ||
29 | #endif | 33 | #endif |
30 | 34 | ||
35 | #include <asm/arch/mxc.h> | ||
36 | |||
31 | #endif /* __ASM_ARCH_MXC_HARDWARE_H__ */ | 37 | #endif /* __ASM_ARCH_MXC_HARDWARE_H__ */ |
diff --git a/include/asm-arm/arch-mxc/iim.h b/include/asm-arm/arch-mxc/iim.h new file mode 100644 index 000000000000..315bffadafda --- /dev/null +++ b/include/asm-arm/arch-mxc/iim.h | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * as published by the Free Software Foundation; either version 2 | ||
8 | * of the License, or (at your option) any later version. | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
17 | * MA 02110-1301, USA. | ||
18 | */ | ||
19 | |||
20 | #ifndef __ASM_ARCH_MXC_IIM_H__ | ||
21 | #define __ASM_ARCH_MXC_IIM_H__ | ||
22 | |||
23 | /* Register offsets */ | ||
24 | #define MXC_IIMSTAT 0x0000 | ||
25 | #define MXC_IIMSTATM 0x0004 | ||
26 | #define MXC_IIMERR 0x0008 | ||
27 | #define MXC_IIMEMASK 0x000C | ||
28 | #define MXC_IIMFCTL 0x0010 | ||
29 | #define MXC_IIMUA 0x0014 | ||
30 | #define MXC_IIMLA 0x0018 | ||
31 | #define MXC_IIMSDAT 0x001C | ||
32 | #define MXC_IIMPREV 0x0020 | ||
33 | #define MXC_IIMSREV 0x0024 | ||
34 | #define MXC_IIMPRG_P 0x0028 | ||
35 | #define MXC_IIMSCS0 0x002C | ||
36 | #define MXC_IIMSCS1 0x0030 | ||
37 | #define MXC_IIMSCS2 0x0034 | ||
38 | #define MXC_IIMSCS3 0x0038 | ||
39 | #define MXC_IIMFBAC0 0x0800 | ||
40 | #define MXC_IIMJAC 0x0804 | ||
41 | #define MXC_IIMHWV1 0x0808 | ||
42 | #define MXC_IIMHWV2 0x080C | ||
43 | #define MXC_IIMHAB0 0x0810 | ||
44 | #define MXC_IIMHAB1 0x0814 | ||
45 | /* Definitions for i.MX27 TO2 */ | ||
46 | #define MXC_IIMMAC 0x0814 | ||
47 | #define MXC_IIMPREV_FUSE 0x0818 | ||
48 | #define MXC_IIMSREV_FUSE 0x081C | ||
49 | #define MXC_IIMSJC_CHALL_0 0x0820 | ||
50 | #define MXC_IIMSJC_CHALL_7 0x083C | ||
51 | #define MXC_IIMFB0UC17 0x0840 | ||
52 | #define MXC_IIMFB0UC255 0x0BFC | ||
53 | #define MXC_IIMFBAC1 0x0C00 | ||
54 | /* Definitions for i.MX27 TO2 */ | ||
55 | #define MXC_IIMSUID 0x0C04 | ||
56 | #define MXC_IIMKEY0 0x0C04 | ||
57 | #define MXC_IIMKEY20 0x0C54 | ||
58 | #define MXC_IIMSJC_RESP_0 0x0C58 | ||
59 | #define MXC_IIMSJC_RESP_7 0x0C74 | ||
60 | #define MXC_IIMFB1UC30 0x0C78 | ||
61 | #define MXC_IIMFB1UC255 0x0FFC | ||
62 | |||
63 | /* Bit definitions */ | ||
64 | |||
65 | #define MXC_IIMHWV1_WLOCK (0x1 << 7) | ||
66 | #define MXC_IIMHWV1_MCU_ENDIAN (0x1 << 6) | ||
67 | #define MXC_IIMHWV1_DSP_ENDIAN (0x1 << 5) | ||
68 | #define MXC_IIMHWV1_BOOT_INT (0x1 << 4) | ||
69 | #define MXC_IIMHWV1_SCC_DISABLE (0x1 << 3) | ||
70 | #define MXC_IIMHWV1_HANTRO_DISABLE (0x1 << 2) | ||
71 | #define MXC_IIMHWV1_MEMSTICK_DIS (0x1 << 1) | ||
72 | |||
73 | #define MXC_IIMHWV2_WLOCK (0x1 << 7) | ||
74 | #define MXC_IIMHWV2_BP_SDMA (0x1 << 6) | ||
75 | #define MXC_IIMHWV2_SCM_DCM (0x1 << 5) | ||
76 | |||
77 | #endif /* __ASM_ARCH_MXC_IIM_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/imx-uart.h b/include/asm-arm/arch-mxc/imx-uart.h new file mode 100644 index 000000000000..83fb72c4048a --- /dev/null +++ b/include/asm-arm/arch-mxc/imx-uart.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License | ||
6 | * as published by the Free Software Foundation; either version 2 | ||
7 | * of the License, or (at your option) any later version. | ||
8 | * This program is distributed in the hope that it will be useful, | ||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | * GNU General Public License for more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License | ||
14 | * along with this program; if not, write to the Free Software | ||
15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
16 | * MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef ASMARM_ARCH_UART_H | ||
20 | #define ASMARM_ARCH_UART_H | ||
21 | |||
22 | #define IMXUART_HAVE_RTSCTS (1<<0) | ||
23 | |||
24 | struct imxuart_platform_data { | ||
25 | int (*init)(struct platform_device *pdev); | ||
26 | int (*exit)(struct platform_device *pdev); | ||
27 | unsigned int flags; | ||
28 | }; | ||
29 | |||
30 | int __init imx_init_uart(int uart_no, struct imxuart_platform_data *pdata); | ||
31 | |||
32 | #endif | ||
diff --git a/include/asm-arm/arch-mxc/iomux-mx1-mx2.h b/include/asm-arm/arch-mxc/iomux-mx1-mx2.h new file mode 100644 index 000000000000..076d37b38eb2 --- /dev/null +++ b/include/asm-arm/arch-mxc/iomux-mx1-mx2.h | |||
@@ -0,0 +1,372 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License | ||
6 | * as published by the Free Software Foundation; either version 2 | ||
7 | * of the License, or (at your option) any later version. | ||
8 | * This program is distributed in the hope that it will be useful, | ||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | * GNU General Public License for more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License | ||
14 | * along with this program; if not, write to the Free Software | ||
15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
16 | * MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef _MXC_GPIO_MX1_MX2_H | ||
20 | #define _MXC_GPIO_MX1_MX2_H | ||
21 | |||
22 | #include <linux/io.h> | ||
23 | |||
24 | #define MXC_GPIO_ALLOC_MODE_NORMAL 0 | ||
25 | #define MXC_GPIO_ALLOC_MODE_NO_ALLOC 1 | ||
26 | #define MXC_GPIO_ALLOC_MODE_TRY_ALLOC 2 | ||
27 | #define MXC_GPIO_ALLOC_MODE_ALLOC_ONLY 4 | ||
28 | #define MXC_GPIO_ALLOC_MODE_RELEASE 8 | ||
29 | |||
30 | /* | ||
31 | * GPIO Module and I/O Multiplexer | ||
32 | * x = 0..3 for reg_A, reg_B, reg_C, reg_D | ||
33 | */ | ||
34 | #define VA_GPIO_BASE IO_ADDRESS(GPIO_BASE_ADDR) | ||
35 | #define MXC_DDIR(x) (0x00 + ((x) << 8)) | ||
36 | #define MXC_OCR1(x) (0x04 + ((x) << 8)) | ||
37 | #define MXC_OCR2(x) (0x08 + ((x) << 8)) | ||
38 | #define MXC_ICONFA1(x) (0x0c + ((x) << 8)) | ||
39 | #define MXC_ICONFA2(x) (0x10 + ((x) << 8)) | ||
40 | #define MXC_ICONFB1(x) (0x14 + ((x) << 8)) | ||
41 | #define MXC_ICONFB2(x) (0x18 + ((x) << 8)) | ||
42 | #define MXC_DR(x) (0x1c + ((x) << 8)) | ||
43 | #define MXC_GIUS(x) (0x20 + ((x) << 8)) | ||
44 | #define MXC_SSR(x) (0x24 + ((x) << 8)) | ||
45 | #define MXC_ICR1(x) (0x28 + ((x) << 8)) | ||
46 | #define MXC_ICR2(x) (0x2c + ((x) << 8)) | ||
47 | #define MXC_IMR(x) (0x30 + ((x) << 8)) | ||
48 | #define MXC_ISR(x) (0x34 + ((x) << 8)) | ||
49 | #define MXC_GPR(x) (0x38 + ((x) << 8)) | ||
50 | #define MXC_SWR(x) (0x3c + ((x) << 8)) | ||
51 | #define MXC_PUEN(x) (0x40 + ((x) << 8)) | ||
52 | |||
53 | #ifdef CONFIG_ARCH_MX1 | ||
54 | # define GPIO_PORT_MAX 3 | ||
55 | #endif | ||
56 | #ifdef CONFIG_ARCH_MX2 | ||
57 | # define GPIO_PORT_MAX 5 | ||
58 | #endif | ||
59 | |||
60 | #ifndef GPIO_PORT_MAX | ||
61 | # error "GPIO config port count unknown!" | ||
62 | #endif | ||
63 | |||
64 | #define GPIO_PIN_MASK 0x1f | ||
65 | |||
66 | #define GPIO_PORT_SHIFT 5 | ||
67 | #define GPIO_PORT_MASK (0x7 << GPIO_PORT_SHIFT) | ||
68 | |||
69 | #define GPIO_PORTA (0 << GPIO_PORT_SHIFT) | ||
70 | #define GPIO_PORTB (1 << GPIO_PORT_SHIFT) | ||
71 | #define GPIO_PORTC (2 << GPIO_PORT_SHIFT) | ||
72 | #define GPIO_PORTD (3 << GPIO_PORT_SHIFT) | ||
73 | #define GPIO_PORTE (4 << GPIO_PORT_SHIFT) | ||
74 | #define GPIO_PORTF (5 << GPIO_PORT_SHIFT) | ||
75 | |||
76 | #define GPIO_OUT (1 << 8) | ||
77 | #define GPIO_IN (0 << 8) | ||
78 | #define GPIO_PUEN (1 << 9) | ||
79 | |||
80 | #define GPIO_PF (1 << 10) | ||
81 | #define GPIO_AF (1 << 11) | ||
82 | |||
83 | #define GPIO_OCR_SHIFT 12 | ||
84 | #define GPIO_OCR_MASK (3 << GPIO_OCR_SHIFT) | ||
85 | #define GPIO_AIN (0 << GPIO_OCR_SHIFT) | ||
86 | #define GPIO_BIN (1 << GPIO_OCR_SHIFT) | ||
87 | #define GPIO_CIN (2 << GPIO_OCR_SHIFT) | ||
88 | #define GPIO_GPIO (3 << GPIO_OCR_SHIFT) | ||
89 | |||
90 | #define GPIO_AOUT_SHIFT 14 | ||
91 | #define GPIO_AOUT_MASK (3 << GPIO_AOUT_SHIFT) | ||
92 | #define GPIO_AOUT (0 << GPIO_AOUT_SHIFT) | ||
93 | #define GPIO_AOUT_ISR (1 << GPIO_AOUT_SHIFT) | ||
94 | #define GPIO_AOUT_0 (2 << GPIO_AOUT_SHIFT) | ||
95 | #define GPIO_AOUT_1 (3 << GPIO_AOUT_SHIFT) | ||
96 | |||
97 | #define GPIO_BOUT_SHIFT 16 | ||
98 | #define GPIO_BOUT_MASK (3 << GPIO_BOUT_SHIFT) | ||
99 | #define GPIO_BOUT (0 << GPIO_BOUT_SHIFT) | ||
100 | #define GPIO_BOUT_ISR (1 << GPIO_BOUT_SHIFT) | ||
101 | #define GPIO_BOUT_0 (2 << GPIO_BOUT_SHIFT) | ||
102 | #define GPIO_BOUT_1 (3 << GPIO_BOUT_SHIFT) | ||
103 | |||
104 | extern void mxc_gpio_mode(int gpio_mode); | ||
105 | extern int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count, | ||
106 | int alloc_mode, const char *label); | ||
107 | |||
108 | /*-------------------------------------------------------------------------*/ | ||
109 | |||
110 | /* assignements for GPIO alternate/primary functions */ | ||
111 | |||
112 | /* FIXME: This list is not completed. The correct directions are | ||
113 | * missing on some (many) pins | ||
114 | */ | ||
115 | #ifdef CONFIG_ARCH_MX1 | ||
116 | #define PA0_AIN_SPI2_CLK (GPIO_GIUS | GPIO_PORTA | GPIO_OUT | 0) | ||
117 | #define PA0_AF_ETMTRACESYNC (GPIO_PORTA | GPIO_AF | 0) | ||
118 | #define PA1_AOUT_SPI2_RXD (GPIO_GIUS | GPIO_PORTA | GPIO_IN | 1) | ||
119 | #define PA1_PF_TIN (GPIO_PORTA | GPIO_PF | 1) | ||
120 | #define PA2_PF_PWM0 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 2) | ||
121 | #define PA3_PF_CSI_MCLK (GPIO_PORTA | GPIO_PF | 3) | ||
122 | #define PA4_PF_CSI_D0 (GPIO_PORTA | GPIO_PF | 4) | ||
123 | #define PA5_PF_CSI_D1 (GPIO_PORTA | GPIO_PF | 5) | ||
124 | #define PA6_PF_CSI_D2 (GPIO_PORTA | GPIO_PF | 6) | ||
125 | #define PA7_PF_CSI_D3 (GPIO_PORTA | GPIO_PF | 7) | ||
126 | #define PA8_PF_CSI_D4 (GPIO_PORTA | GPIO_PF | 8) | ||
127 | #define PA9_PF_CSI_D5 (GPIO_PORTA | GPIO_PF | 9) | ||
128 | #define PA10_PF_CSI_D6 (GPIO_PORTA | GPIO_PF | 10) | ||
129 | #define PA11_PF_CSI_D7 (GPIO_PORTA | GPIO_PF | 11) | ||
130 | #define PA12_PF_CSI_VSYNC (GPIO_PORTA | GPIO_PF | 12) | ||
131 | #define PA13_PF_CSI_HSYNC (GPIO_PORTA | GPIO_PF | 13) | ||
132 | #define PA14_PF_CSI_PIXCLK (GPIO_PORTA | GPIO_PF | 14) | ||
133 | #define PA15_PF_I2C_SDA (GPIO_PORTA | GPIO_OUT | GPIO_PF | 15) | ||
134 | #define PA16_PF_I2C_SCL (GPIO_PORTA | GPIO_OUT | GPIO_PF | 16) | ||
135 | #define PA17_AF_ETMTRACEPKT4 (GPIO_PORTA | GPIO_AF | 17) | ||
136 | #define PA17_AIN_SPI2_SS (GPIO_GIUS | GPIO_PORTA | GPIO_OUT | 17) | ||
137 | #define PA18_AF_ETMTRACEPKT5 (GPIO_PORTA | GPIO_AF | 18) | ||
138 | #define PA19_AF_ETMTRACEPKT6 (GPIO_PORTA | GPIO_AF | 19) | ||
139 | #define PA20_AF_ETMTRACEPKT7 (GPIO_PORTA | GPIO_AF | 20) | ||
140 | #define PA21_PF_A0 (GPIO_PORTA | GPIO_PF | 21) | ||
141 | #define PA22_PF_CS4 (GPIO_PORTA | GPIO_PF | 22) | ||
142 | #define PA23_PF_CS5 (GPIO_PORTA | GPIO_PF | 23) | ||
143 | #define PA24_PF_A16 (GPIO_PORTA | GPIO_PF | 24) | ||
144 | #define PA24_AF_ETMTRACEPKT0 (GPIO_PORTA | GPIO_AF | 24) | ||
145 | #define PA25_PF_A17 (GPIO_PORTA | GPIO_PF | 25) | ||
146 | #define PA25_AF_ETMTRACEPKT1 (GPIO_PORTA | GPIO_AF | 25) | ||
147 | #define PA26_PF_A18 (GPIO_PORTA | GPIO_PF | 26) | ||
148 | #define PA26_AF_ETMTRACEPKT2 (GPIO_PORTA | GPIO_AF | 26) | ||
149 | #define PA27_PF_A19 (GPIO_PORTA | GPIO_PF | 27) | ||
150 | #define PA27_AF_ETMTRACEPKT3 (GPIO_PORTA | GPIO_AF | 27) | ||
151 | #define PA28_PF_A20 (GPIO_PORTA | GPIO_PF | 28) | ||
152 | #define PA28_AF_ETMPIPESTAT0 (GPIO_PORTA | GPIO_AF | 28) | ||
153 | #define PA29_PF_A21 (GPIO_PORTA | GPIO_PF | 29) | ||
154 | #define PA29_AF_ETMPIPESTAT1 (GPIO_PORTA | GPIO_AF | 29) | ||
155 | #define PA30_PF_A22 (GPIO_PORTA | GPIO_PF | 30) | ||
156 | #define PA30_AF_ETMPIPESTAT2 (GPIO_PORTA | GPIO_AF | 30) | ||
157 | #define PA31_PF_A23 (GPIO_PORTA | GPIO_PF | 31) | ||
158 | #define PA31_AF_ETMTRACECLK (GPIO_PORTA | GPIO_AF | 31) | ||
159 | #define PB8_PF_SD_DAT0 (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 8) | ||
160 | #define PB8_AF_MS_PIO (GPIO_PORTB | GPIO_AF | 8) | ||
161 | #define PB9_PF_SD_DAT1 (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 9) | ||
162 | #define PB9_AF_MS_PI1 (GPIO_PORTB | GPIO_AF | 9) | ||
163 | #define PB10_PF_SD_DAT2 (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 10) | ||
164 | #define PB10_AF_MS_SCLKI (GPIO_PORTB | GPIO_AF | 10) | ||
165 | #define PB11_PF_SD_DAT3 (GPIO_PORTB | GPIO_PF | 11) | ||
166 | #define PB11_AF_MS_SDIO (GPIO_PORTB | GPIO_AF | 11) | ||
167 | #define PB12_PF_SD_CLK (GPIO_PORTB | GPIO_PF | 12) | ||
168 | #define PB12_AF_MS_SCLK0 (GPIO_PORTB | GPIO_AF | 12) | ||
169 | #define PB13_PF_SD_CMD (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 13) | ||
170 | #define PB13_AF_MS_BS (GPIO_PORTB | GPIO_AF | 13) | ||
171 | #define PB14_AF_SSI_RXFS (GPIO_PORTB | GPIO_AF | 14) | ||
172 | #define PB15_AF_SSI_RXCLK (GPIO_PORTB | GPIO_AF | 15) | ||
173 | #define PB16_AF_SSI_RXDAT (GPIO_PORTB | GPIO_IN | GPIO_AF | 16) | ||
174 | #define PB17_AF_SSI_TXDAT (GPIO_PORTB | GPIO_OUT | GPIO_AF | 17) | ||
175 | #define PB18_AF_SSI_TXFS (GPIO_PORTB | GPIO_AF | 18) | ||
176 | #define PB19_AF_SSI_TXCLK (GPIO_PORTB | GPIO_AF | 19) | ||
177 | #define PB20_PF_USBD_AFE (GPIO_PORTB | GPIO_PF | 20) | ||
178 | #define PB21_PF_USBD_OE (GPIO_PORTB | GPIO_PF | 21) | ||
179 | #define PB22_PFUSBD_RCV (GPIO_PORTB | GPIO_PF | 22) | ||
180 | #define PB23_PF_USBD_SUSPND (GPIO_PORTB | GPIO_PF | 23) | ||
181 | #define PB24_PF_USBD_VP (GPIO_PORTB | GPIO_PF | 24) | ||
182 | #define PB25_PF_USBD_VM (GPIO_PORTB | GPIO_PF | 25) | ||
183 | #define PB26_PF_USBD_VPO (GPIO_PORTB | GPIO_PF | 26) | ||
184 | #define PB27_PF_USBD_VMO (GPIO_PORTB | GPIO_PF | 27) | ||
185 | #define PB28_PF_UART2_CTS (GPIO_PORTB | GPIO_OUT | GPIO_PF | 28) | ||
186 | #define PB29_PF_UART2_RTS (GPIO_PORTB | GPIO_IN | GPIO_PF | 29) | ||
187 | #define PB30_PF_UART2_TXD (GPIO_PORTB | GPIO_OUT | GPIO_PF | 30) | ||
188 | #define PB31_PF_UART2_RXD (GPIO_PORTB | GPIO_IN | GPIO_PF | 31) | ||
189 | #define PC3_PF_SSI_RXFS (GPIO_PORTC | GPIO_PF | 3) | ||
190 | #define PC4_PF_SSI_RXCLK (GPIO_PORTC | GPIO_PF | 4) | ||
191 | #define PC5_PF_SSI_RXDAT (GPIO_PORTC | GPIO_IN | GPIO_PF | 5) | ||
192 | #define PC6_PF_SSI_TXDAT (GPIO_PORTC | GPIO_OUT | GPIO_PF | 6) | ||
193 | #define PC7_PF_SSI_TXFS (GPIO_PORTC | GPIO_PF | 7) | ||
194 | #define PC8_PF_SSI_TXCLK (GPIO_PORTC | GPIO_PF | 8) | ||
195 | #define PC9_PF_UART1_CTS (GPIO_PORTC | GPIO_OUT | GPIO_PF | 9) | ||
196 | #define PC10_PF_UART1_RTS (GPIO_PORTC | GPIO_IN | GPIO_PF | 10) | ||
197 | #define PC11_PF_UART1_TXD (GPIO_PORTC | GPIO_OUT | GPIO_PF | 11) | ||
198 | #define PC12_PF_UART1_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 12) | ||
199 | #define PC13_PF_SPI1_SPI_RDY (GPIO_PORTC | GPIO_PF | 13) | ||
200 | #define PC14_PF_SPI1_SCLK (GPIO_PORTC | GPIO_PF | 14) | ||
201 | #define PC15_PF_SPI1_SS (GPIO_PORTC | GPIO_PF | 15) | ||
202 | #define PC16_PF_SPI1_MISO (GPIO_PORTC | GPIO_PF | 16) | ||
203 | #define PC17_PF_SPI1_MOSI (GPIO_PORTC | GPIO_PF | 17) | ||
204 | #define PC24_BIN_UART3_RI (GPIO_GIUS | GPIO_PORTC | GPIO_OUT | GPIO_BIN | 24) | ||
205 | #define PC25_BIN_UART3_DSR (GPIO_GIUS | GPIO_PORTC | GPIO_OUT | GPIO_BIN | 25) | ||
206 | #define PC26_AOUT_UART3_DTR (GPIO_GIUS | GPIO_PORTC | GPIO_IN | 26) | ||
207 | #define PC27_BIN_UART3_DCD (GPIO_GIUS | GPIO_PORTC | GPIO_OUT | GPIO_BIN | 27) | ||
208 | #define PC28_BIN_UART3_CTS (GPIO_GIUS | GPIO_PORTC | GPIO_OUT | GPIO_BIN | 28) | ||
209 | #define PC29_AOUT_UART3_RTS (GPIO_GIUS | GPIO_PORTC | GPIO_IN | 29) | ||
210 | #define PC30_BIN_UART3_TX (GPIO_GIUS | GPIO_PORTC | GPIO_BIN | 30) | ||
211 | #define PC31_AOUT_UART3_RX (GPIO_GIUS | GPIO_PORTC | GPIO_IN | 31) | ||
212 | #define PD6_PF_LSCLK (GPIO_PORTD | GPIO_OUT | GPIO_PF | 6) | ||
213 | #define PD7_PF_REV (GPIO_PORTD | GPIO_PF | 7) | ||
214 | #define PD7_AF_UART2_DTR (GPIO_GIUS | GPIO_PORTD | GPIO_IN | GPIO_AF | 7) | ||
215 | #define PD7_AIN_SPI2_SCLK (GPIO_GIUS | GPIO_PORTD | GPIO_AIN | 7) | ||
216 | #define PD8_PF_CLS (GPIO_PORTD | GPIO_PF | 8) | ||
217 | #define PD8_AF_UART2_DCD (GPIO_PORTD | GPIO_OUT | GPIO_AF | 8) | ||
218 | #define PD8_AIN_SPI2_SS (GPIO_GIUS | GPIO_PORTD | GPIO_AIN | 8) | ||
219 | #define PD9_PF_PS (GPIO_PORTD | GPIO_PF | 9) | ||
220 | #define PD9_AF_UART2_RI (GPIO_PORTD | GPIO_OUT | GPIO_AF | 9) | ||
221 | #define PD9_AOUT_SPI2_RXD (GPIO_GIUS | GPIO_PORTD | GPIO_IN | 9) | ||
222 | #define PD10_PF_SPL_SPR (GPIO_PORTD | GPIO_OUT | GPIO_PF | 10) | ||
223 | #define PD10_AF_UART2_DSR (GPIO_PORTD | GPIO_OUT | GPIO_AF | 10) | ||
224 | #define PD10_AIN_SPI2_TXD (GPIO_GIUS | GPIO_PORTD | GPIO_OUT | 10) | ||
225 | #define PD11_PF_CONTRAST (GPIO_PORTD | GPIO_OUT | GPIO_PF | 11) | ||
226 | #define PD12_PF_ACD_OE (GPIO_PORTD | GPIO_OUT | GPIO_PF | 12) | ||
227 | #define PD13_PF_LP_HSYNC (GPIO_PORTD | GPIO_OUT | GPIO_PF | 13) | ||
228 | #define PD14_PF_FLM_VSYNC (GPIO_PORTD | GPIO_OUT | GPIO_PF | 14) | ||
229 | #define PD15_PF_LD0 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 15) | ||
230 | #define PD16_PF_LD1 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 16) | ||
231 | #define PD17_PF_LD2 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 17) | ||
232 | #define PD18_PF_LD3 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 18) | ||
233 | #define PD19_PF_LD4 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 19) | ||
234 | #define PD20_PF_LD5 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 20) | ||
235 | #define PD21_PF_LD6 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 21) | ||
236 | #define PD22_PF_LD7 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 22) | ||
237 | #define PD23_PF_LD8 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 23) | ||
238 | #define PD24_PF_LD9 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 24) | ||
239 | #define PD25_PF_LD10 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 25) | ||
240 | #define PD26_PF_LD11 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 26) | ||
241 | #define PD27_PF_LD12 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 27) | ||
242 | #define PD28_PF_LD13 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 28) | ||
243 | #define PD29_PF_LD14 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 29) | ||
244 | #define PD30_PF_LD15 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 30) | ||
245 | #define PD31_PF_TMR2OUT (GPIO_PORTD | GPIO_PF | 31) | ||
246 | #define PD31_BIN_SPI2_TXD (GPIO_GIUS | GPIO_PORTD | GPIO_BIN | 31) | ||
247 | #endif | ||
248 | |||
249 | #ifdef CONFIG_ARCH_MX2 | ||
250 | #define PA5_PF_LSCLK (GPIO_PORTA | GPIO_OUT | GPIO_PF | 5) | ||
251 | #define PA6_PF_LD0 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 6) | ||
252 | #define PA7_PF_LD1 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 7) | ||
253 | #define PA8_PF_LD2 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 8) | ||
254 | #define PA9_PF_LD3 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 9) | ||
255 | #define PA10_PF_LD4 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 10) | ||
256 | #define PA11_PF_LD5 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 11) | ||
257 | #define PA12_PF_LD6 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 12) | ||
258 | #define PA13_PF_LD7 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 13) | ||
259 | #define PA14_PF_LD8 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 14) | ||
260 | #define PA15_PF_LD9 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 15) | ||
261 | #define PA16_PF_LD10 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 16) | ||
262 | #define PA17_PF_LD11 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 17) | ||
263 | #define PA18_PF_LD12 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 18) | ||
264 | #define PA19_PF_LD13 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 19) | ||
265 | #define PA20_PF_LD14 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 20) | ||
266 | #define PA21_PF_LD15 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 21) | ||
267 | #define PA22_PF_LD16 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 22) | ||
268 | #define PA23_PF_LD17 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 23) | ||
269 | #define PA24_PF_REV (GPIO_PORTA | GPIO_OUT | GPIO_PF | 24) | ||
270 | #define PA25_PF_CLS (GPIO_PORTA | GPIO_OUT | GPIO_PF | 25) | ||
271 | #define PA26_PF_PS (GPIO_PORTA | GPIO_OUT | GPIO_PF | 26) | ||
272 | #define PA27_PF_SPL_SPR (GPIO_PORTA | GPIO_OUT | GPIO_PF | 27) | ||
273 | #define PA28_PF_HSYNC (GPIO_PORTA | GPIO_OUT | GPIO_PF | 28) | ||
274 | #define PA29_PF_VSYNC (GPIO_PORTA | GPIO_OUT | GPIO_PF | 29) | ||
275 | #define PA30_PF_CONTRAST (GPIO_PORTA | GPIO_OUT | GPIO_PF | 30) | ||
276 | #define PA31_PF_OE_ACD (GPIO_PORTA | GPIO_OUT | GPIO_PF | 31) | ||
277 | #define PB10_PF_CSI_D0 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 10) | ||
278 | #define PB10_AF_UART6_TXD (GPIO_PORTB | GPIO_OUT | GPIO_AF | 10) | ||
279 | #define PB11_PF_CSI_D1 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 11) | ||
280 | #define PB11_AF_UART6_RXD (GPIO_PORTB | GPIO_IN | GPIO_AF | 11) | ||
281 | #define PB12_PF_CSI_D2 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 12) | ||
282 | #define PB12_AF_UART6_CTS (GPIO_PORTB | GPIO_OUT | GPIO_AF | 12) | ||
283 | #define PB13_PF_CSI_D3 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 13) | ||
284 | #define PB13_AF_UART6_RTS (GPIO_PORTB | GPIO_IN | GPIO_AF | 13) | ||
285 | #define PB14_PF_CSI_D4 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 14) | ||
286 | #define PB15_PF_CSI_MCLK (GPIO_PORTB | GPIO_OUT | GPIO_PF | 15) | ||
287 | #define PB16_PF_CSI_PIXCLK (GPIO_PORTB | GPIO_OUT | GPIO_PF | 16) | ||
288 | #define PB17_PF_CSI_D5 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 17) | ||
289 | #define PB18_PF_CSI_D6 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 18) | ||
290 | #define PB18_AF_UART5_TXD (GPIO_PORTB | GPIO_OUT | GPIO_AF | 18) | ||
291 | #define PB19_PF_CSI_D7 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 19) | ||
292 | #define PB19_AF_UART5_RXD (GPIO_PORTB | GPIO_IN | GPIO_AF | 19) | ||
293 | #define PB20_PF_CSI_VSYNC (GPIO_PORTB | GPIO_OUT | GPIO_PF | 20) | ||
294 | #define PB20_AF_UART5_CTS (GPIO_PORTB | GPIO_OUT | GPIO_AF | 20) | ||
295 | #define PB21_PF_CSI_HSYNC (GPIO_PORTB | GPIO_OUT | GPIO_PF | 21) | ||
296 | #define PB21_AF_UART5_RTS (GPIO_PORTB | GPIO_IN | GPIO_AF | 21) | ||
297 | #define PB26_AF_UART4_RTS (GPIO_PORTB | GPIO_IN | GPIO_PF | 26) | ||
298 | #define PB28_AF_UART4_TXD (GPIO_PORTB | GPIO_OUT | GPIO_AF | 28) | ||
299 | #define PB29_AF_UART4_CTS (GPIO_PORTB | GPIO_OUT | GPIO_AF | 29) | ||
300 | #define PB31_AF_UART4_RXD (GPIO_PORTB | GPIO_IN | GPIO_AF | 31) | ||
301 | #define PC5_PF_I2C2_SDA (GPIO_PORTC | GPIO_IN | GPIO_PF | 5) | ||
302 | #define PC6_PF_I2C2_SCL (GPIO_PORTC | GPIO_IN | GPIO_PF | 6) | ||
303 | #define PC16_PF_SSI4_FS (GPIO_PORTC | GPIO_IN | GPIO_PF | 16) | ||
304 | #define PC17_PF_SSI4_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 17) | ||
305 | #define PC18_PF_SSI4_TXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 18) | ||
306 | #define PC19_PF_SSI4_CLK (GPIO_PORTC | GPIO_IN | GPIO_PF | 19) | ||
307 | #define PC20_PF_SSI1_FS (GPIO_PORTC | GPIO_IN | GPIO_PF | 20) | ||
308 | #define PC21_PF_SSI1_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 21) | ||
309 | #define PC22_PF_SSI1_TXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 22) | ||
310 | #define PC23_PF_SSI1_CLK (GPIO_PORTC | GPIO_IN | GPIO_PF | 23) | ||
311 | #define PC24_PF_SSI2_FS (GPIO_PORTC | GPIO_IN | GPIO_PF | 24) | ||
312 | #define PC25_PF_SSI2_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 25) | ||
313 | #define PC26_PF_SSI2_TXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 26) | ||
314 | #define PC27_PF_SSI2_CLK (GPIO_PORTC | GPIO_IN | GPIO_PF | 27) | ||
315 | #define PC28_PF_SSI3_FS (GPIO_PORTC | GPIO_IN | GPIO_PF | 28) | ||
316 | #define PC29_PF_SSI3_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 29) | ||
317 | #define PC30_PF_SSI3_TXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 30) | ||
318 | #define PC31_PF_SSI3_CLK (GPIO_PORTC | GPIO_IN | GPIO_PF | 31) | ||
319 | #define PD0_AIN_FEC_TXD0 (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 0) | ||
320 | #define PD1_AIN_FEC_TXD1 (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 1) | ||
321 | #define PD2_AIN_FEC_TXD2 (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 2) | ||
322 | #define PD3_AIN_FEC_TXD3 (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 3) | ||
323 | #define PD4_AOUT_FEC_RX_ER (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 4) | ||
324 | #define PD5_AOUT_FEC_RXD1 (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 5) | ||
325 | #define PD6_AOUT_FEC_RXD2 (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 6) | ||
326 | #define PD7_AOUT_FEC_RXD3 (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 7) | ||
327 | #define PD8_AF_FEC_MDIO (GPIO_PORTD | GPIO_IN | GPIO_AF | 8) | ||
328 | #define PD9_AIN_FEC_MDC (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 9) | ||
329 | #define PD10_AOUT_FEC_CRS (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 10) | ||
330 | #define PD11_AOUT_FEC_TX_CLK (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 11) | ||
331 | #define PD12_AOUT_FEC_RXD0 (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 12) | ||
332 | #define PD13_AOUT_FEC_RX_DV (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 13) | ||
333 | #define PD14_AOUT_FEC_CLR (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 14) | ||
334 | #define PD15_AOUT_FEC_COL (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 15) | ||
335 | #define PD16_AIN_FEC_TX_ER (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 16) | ||
336 | #define PD17_PF_I2C_DATA (GPIO_PORTD | GPIO_OUT | GPIO_PF | 17) | ||
337 | #define PD18_PF_I2C_CLK (GPIO_PORTD | GPIO_OUT | GPIO_PF | 18) | ||
338 | #define PD25_PF_CSPI1_RDY (GPIO_PORTD | GPIO_OUT | GPIO_PF | 25) | ||
339 | #define PD26_PF_CSPI1_SS2 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 26) | ||
340 | #define PD27_PF_CSPI1_SS1 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 27) | ||
341 | #define PD28_PF_CSPI1_SS0 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 28) | ||
342 | #define PD29_PF_CSPI1_SCLK (GPIO_PORTD | GPIO_OUT | GPIO_PF | 29) | ||
343 | #define PD30_PF_CSPI1_MISO (GPIO_PORTD | GPIO_IN | GPIO_PF | 30) | ||
344 | #define PD31_PF_CSPI1_MOSI (GPIO_PORTD | GPIO_OUT | GPIO_PF | 31) | ||
345 | #define PF23_AIN_FEC_TX_EN (GPIO_PORTF | GPIO_OUT | GPIO_AIN | 23) | ||
346 | #define PE3_PF_UART2_CTS (GPIO_PORTE | GPIO_OUT | GPIO_PF | 3) | ||
347 | #define PE4_PF_UART2_RTS (GPIO_PORTE | GPIO_IN | GPIO_PF | 4) | ||
348 | #define PE6_PF_UART2_TXD (GPIO_PORTE | GPIO_OUT | GPIO_PF | 6) | ||
349 | #define PE7_PF_UART2_RXD (GPIO_PORTE | GPIO_IN | GPIO_PF | 7) | ||
350 | #define PE8_PF_UART3_TXD (GPIO_PORTE | GPIO_OUT | GPIO_PF | 8) | ||
351 | #define PE9_PF_UART3_RXD (GPIO_PORTE | GPIO_IN | GPIO_PF | 9) | ||
352 | #define PE10_PF_UART3_CTS (GPIO_PORTE | GPIO_OUT | GPIO_PF | 10) | ||
353 | #define PE11_PF_UART3_RTS (GPIO_PORTE | GPIO_IN | GPIO_PF | 11) | ||
354 | #define PE12_PF_UART1_TXD (GPIO_PORTE | GPIO_OUT | GPIO_PF | 12) | ||
355 | #define PE13_PF_UART1_RXD (GPIO_PORTE | GPIO_IN | GPIO_PF | 13) | ||
356 | #define PE14_PF_UART1_CTS (GPIO_PORTE | GPIO_OUT | GPIO_PF | 14) | ||
357 | #define PE15_PF_UART1_RTS (GPIO_PORTE | GPIO_IN | GPIO_PF | 15) | ||
358 | #define PE18_AF_CSPI3_MISO (GPIO_PORTE | GPIO_IN | GPIO_AF | 18) | ||
359 | #define PE21_AF_CSPI3_SS (GPIO_PORTE | GPIO_OUT | GPIO_AF | 21) | ||
360 | #define PE22_AF_CSPI3_MOSI (GPIO_PORTE | GPIO_OUT | GPIO_AF | 22) | ||
361 | #define PE23_AF_CSPI3_SCLK (GPIO_PORTE | GPIO_OUT | GPIO_AF | 23) | ||
362 | #endif | ||
363 | |||
364 | /* decode irq number to use with IMR(x), ISR(x) and friends */ | ||
365 | #define IRQ_TO_REG(irq) ((irq - MXC_MAX_INT_LINES) >> 5) | ||
366 | |||
367 | #define IRQ_GPIOA(x) (MXC_MAX_INT_LINES + x) | ||
368 | #define IRQ_GPIOB(x) (IRQ_GPIOA(32) + x) | ||
369 | #define IRQ_GPIOC(x) (IRQ_GPIOB(32) + x) | ||
370 | #define IRQ_GPIOD(x) (IRQ_GPIOC(32) + x) | ||
371 | |||
372 | #endif /* _MXC_GPIO_MX1_MX2_H */ | ||
diff --git a/include/asm-arm/arch-mxc/iomux-mx3.h b/include/asm-arm/arch-mxc/iomux-mx3.h new file mode 100644 index 000000000000..7509e7692f08 --- /dev/null +++ b/include/asm-arm/arch-mxc/iomux-mx3.h | |||
@@ -0,0 +1,501 @@ | |||
1 | /* | ||
2 | * Copyright 2004-2006 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * as published by the Free Software Foundation; either version 2 | ||
8 | * of the License, or (at your option) any later version. | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
17 | * MA 02110-1301, USA. | ||
18 | */ | ||
19 | |||
20 | #ifndef __MACH_MX31_IOMUX_H__ | ||
21 | #define __MACH_MX31_IOMUX_H__ | ||
22 | |||
23 | #include <linux/types.h> | ||
24 | |||
25 | /* | ||
26 | * various IOMUX output functions | ||
27 | */ | ||
28 | |||
29 | #define IOMUX_OCONFIG_GPIO (0 << 4) /* used as GPIO */ | ||
30 | #define IOMUX_OCONFIG_FUNC (1 << 4) /* used as function */ | ||
31 | #define IOMUX_OCONFIG_ALT1 (2 << 4) /* used as alternate function 1 */ | ||
32 | #define IOMUX_OCONFIG_ALT2 (3 << 4) /* used as alternate function 2 */ | ||
33 | #define IOMUX_OCONFIG_ALT3 (4 << 4) /* used as alternate function 3 */ | ||
34 | #define IOMUX_OCONFIG_ALT4 (5 << 4) /* used as alternate function 4 */ | ||
35 | #define IOMUX_OCONFIG_ALT5 (6 << 4) /* used as alternate function 5 */ | ||
36 | #define IOMUX_OCONFIG_ALT6 (7 << 4) /* used as alternate function 6 */ | ||
37 | #define IOMUX_ICONFIG_NONE 0 /* not configured for input */ | ||
38 | #define IOMUX_ICONFIG_GPIO 1 /* used as GPIO */ | ||
39 | #define IOMUX_ICONFIG_FUNC 2 /* used as function */ | ||
40 | #define IOMUX_ICONFIG_ALT1 4 /* used as alternate function 1 */ | ||
41 | #define IOMUX_ICONFIG_ALT2 8 /* used as alternate function 2 */ | ||
42 | |||
43 | #define IOMUX_CONFIG_GPIO (IOMUX_OCONFIG_GPIO | IOMUX_ICONFIG_GPIO) | ||
44 | #define IOMUX_CONFIG_FUNC (IOMUX_OCONFIG_FUNC | IOMUX_ICONFIG_FUNC) | ||
45 | #define IOMUX_CONFIG_ALT1 (IOMUX_OCONFIG_ALT1 | IOMUX_ICONFIG_ALT1) | ||
46 | #define IOMUX_CONFIG_ALT2 (IOMUX_OCONFIG_ALT2 | IOMUX_ICONFIG_ALT2) | ||
47 | |||
48 | /* | ||
49 | * various IOMUX pad functions | ||
50 | */ | ||
51 | enum iomux_pad_config { | ||
52 | PAD_CTL_NOLOOPBACK = 0x0 << 9, | ||
53 | PAD_CTL_LOOPBACK = 0x1 << 9, | ||
54 | PAD_CTL_PKE_NONE = 0x0 << 8, | ||
55 | PAD_CTL_PKE_ENABLE = 0x1 << 8, | ||
56 | PAD_CTL_PUE_KEEPER = 0x0 << 7, | ||
57 | PAD_CTL_PUE_PUD = 0x1 << 7, | ||
58 | PAD_CTL_100K_PD = 0x0 << 5, | ||
59 | PAD_CTL_100K_PU = 0x1 << 5, | ||
60 | PAD_CTL_47K_PU = 0x2 << 5, | ||
61 | PAD_CTL_22K_PU = 0x3 << 5, | ||
62 | PAD_CTL_HYS_CMOS = 0x0 << 4, | ||
63 | PAD_CTL_HYS_SCHMITZ = 0x1 << 4, | ||
64 | PAD_CTL_ODE_CMOS = 0x0 << 3, | ||
65 | PAD_CTL_ODE_OpenDrain = 0x1 << 3, | ||
66 | PAD_CTL_DRV_NORMAL = 0x0 << 1, | ||
67 | PAD_CTL_DRV_HIGH = 0x1 << 1, | ||
68 | PAD_CTL_DRV_MAX = 0x2 << 1, | ||
69 | PAD_CTL_SRE_SLOW = 0x0 << 0, | ||
70 | PAD_CTL_SRE_FAST = 0x1 << 0 | ||
71 | }; | ||
72 | |||
73 | /* | ||
74 | * various IOMUX general purpose functions | ||
75 | */ | ||
76 | enum iomux_gp_func { | ||
77 | MUX_PGP_FIRI = 1 << 0, | ||
78 | MUX_DDR_MODE = 1 << 1, | ||
79 | MUX_PGP_CSPI_BB = 1 << 2, | ||
80 | MUX_PGP_ATA_1 = 1 << 3, | ||
81 | MUX_PGP_ATA_2 = 1 << 4, | ||
82 | MUX_PGP_ATA_3 = 1 << 5, | ||
83 | MUX_PGP_ATA_4 = 1 << 6, | ||
84 | MUX_PGP_ATA_5 = 1 << 7, | ||
85 | MUX_PGP_ATA_6 = 1 << 8, | ||
86 | MUX_PGP_ATA_7 = 1 << 9, | ||
87 | MUX_PGP_ATA_8 = 1 << 10, | ||
88 | MUX_PGP_UH2 = 1 << 11, | ||
89 | MUX_SDCTL_CSD0_SEL = 1 << 12, | ||
90 | MUX_SDCTL_CSD1_SEL = 1 << 13, | ||
91 | MUX_CSPI1_UART3 = 1 << 14, | ||
92 | MUX_EXTDMAREQ2_MBX_SEL = 1 << 15, | ||
93 | MUX_TAMPER_DETECT_EN = 1 << 16, | ||
94 | MUX_PGP_USB_4WIRE = 1 << 17, | ||
95 | MUX_PGB_USB_COMMON = 1 << 18, | ||
96 | MUX_SDHC_MEMSTICK1 = 1 << 19, | ||
97 | MUX_SDHC_MEMSTICK2 = 1 << 20, | ||
98 | MUX_PGP_SPLL_BYP = 1 << 21, | ||
99 | MUX_PGP_UPLL_BYP = 1 << 22, | ||
100 | MUX_PGP_MSHC1_CLK_SEL = 1 << 23, | ||
101 | MUX_PGP_MSHC2_CLK_SEL = 1 << 24, | ||
102 | MUX_CSPI3_UART5_SEL = 1 << 25, | ||
103 | MUX_PGP_ATA_9 = 1 << 26, | ||
104 | MUX_PGP_USB_SUSPEND = 1 << 27, | ||
105 | MUX_PGP_USB_OTG_LOOPBACK = 1 << 28, | ||
106 | MUX_PGP_USB_HS1_LOOPBACK = 1 << 29, | ||
107 | MUX_PGP_USB_HS2_LOOPBACK = 1 << 30, | ||
108 | MUX_CLKO_DDR_MODE = 1 << 31, | ||
109 | }; | ||
110 | |||
111 | /* | ||
112 | * This function enables/disables the general purpose function for a particular | ||
113 | * signal. | ||
114 | */ | ||
115 | void iomux_config_gpr(enum iomux_gp_func , bool); | ||
116 | |||
117 | /* | ||
118 | * set the mode for a IOMUX pin. | ||
119 | */ | ||
120 | int mxc_iomux_mode(unsigned int); | ||
121 | |||
122 | /* | ||
123 | * This function enables/disables the general purpose function for a particular | ||
124 | * signal. | ||
125 | */ | ||
126 | void mxc_iomux_set_gpr(enum iomux_gp_func, bool); | ||
127 | |||
128 | #define IOMUX_PADNUM_MASK 0x1ff | ||
129 | #define IOMUX_GPIONUM_SHIFT 9 | ||
130 | #define IOMUX_GPIONUM_MASK (0xff << IOMUX_GPIONUM_SHIFT) | ||
131 | #define IOMUX_MODE_SHIFT 17 | ||
132 | #define IOMUX_MODE_MASK (0xff << IOMUX_MODE_SHIFT) | ||
133 | |||
134 | #define IOMUX_PIN(gpionum, padnum) \ | ||
135 | (((gpionum << IOMUX_GPIONUM_SHIFT) & IOMUX_GPIONUM_MASK) | \ | ||
136 | (padnum & IOMUX_PADNUM_MASK)) | ||
137 | |||
138 | #define IOMUX_MODE(pin, mode) (pin | mode << IOMUX_MODE_SHIFT) | ||
139 | |||
140 | #define IOMUX_TO_GPIO(iomux_pin) \ | ||
141 | ((iomux_pin & IOMUX_GPIONUM_MASK) >> IOMUX_GPIONUM_SHIFT) | ||
142 | #define IOMUX_TO_IRQ(iomux_pin) \ | ||
143 | (((iomux_pin & IOMUX_GPIONUM_MASK) >> IOMUX_GPIONUM_SHIFT) + \ | ||
144 | MXC_GPIO_INT_BASE) | ||
145 | |||
146 | /* | ||
147 | * This enumeration is constructed based on the Section | ||
148 | * "sw_pad_ctl & sw_mux_ctl details" of the MX31 IC Spec. Each enumerated | ||
149 | * value is constructed based on the rules described above. | ||
150 | */ | ||
151 | |||
152 | enum iomux_pins { | ||
153 | MX31_PIN_TTM_PAD = IOMUX_PIN(0xff, 0), | ||
154 | MX31_PIN_CSPI3_SPI_RDY = IOMUX_PIN(0xff, 1), | ||
155 | MX31_PIN_CSPI3_SCLK = IOMUX_PIN(0xff, 2), | ||
156 | MX31_PIN_CSPI3_MISO = IOMUX_PIN(0xff, 3), | ||
157 | MX31_PIN_CSPI3_MOSI = IOMUX_PIN(0xff, 4), | ||
158 | MX31_PIN_CLKSS = IOMUX_PIN(0xff, 5), | ||
159 | MX31_PIN_CE_CONTROL = IOMUX_PIN(0xff, 6), | ||
160 | MX31_PIN_ATA_RESET_B = IOMUX_PIN(95, 7), | ||
161 | MX31_PIN_ATA_DMACK = IOMUX_PIN(94, 8), | ||
162 | MX31_PIN_ATA_DIOW = IOMUX_PIN(93, 9), | ||
163 | MX31_PIN_ATA_DIOR = IOMUX_PIN(92, 10), | ||
164 | MX31_PIN_ATA_CS1 = IOMUX_PIN(91, 11), | ||
165 | MX31_PIN_ATA_CS0 = IOMUX_PIN(90, 12), | ||
166 | MX31_PIN_SD1_DATA3 = IOMUX_PIN(63, 13), | ||
167 | MX31_PIN_SD1_DATA2 = IOMUX_PIN(62, 14), | ||
168 | MX31_PIN_SD1_DATA1 = IOMUX_PIN(61, 15), | ||
169 | MX31_PIN_SD1_DATA0 = IOMUX_PIN(60, 16), | ||
170 | MX31_PIN_SD1_CLK = IOMUX_PIN(59, 17), | ||
171 | MX31_PIN_SD1_CMD = IOMUX_PIN(58, 18), | ||
172 | MX31_PIN_D3_SPL = IOMUX_PIN(0xff, 19), | ||
173 | MX31_PIN_D3_CLS = IOMUX_PIN(0xff, 20), | ||
174 | MX31_PIN_D3_REV = IOMUX_PIN(0xff, 21), | ||
175 | MX31_PIN_CONTRAST = IOMUX_PIN(0xff, 22), | ||
176 | MX31_PIN_VSYNC3 = IOMUX_PIN(0xff, 23), | ||
177 | MX31_PIN_READ = IOMUX_PIN(0xff, 24), | ||
178 | MX31_PIN_WRITE = IOMUX_PIN(0xff, 25), | ||
179 | MX31_PIN_PAR_RS = IOMUX_PIN(0xff, 26), | ||
180 | MX31_PIN_SER_RS = IOMUX_PIN(89, 27), | ||
181 | MX31_PIN_LCS1 = IOMUX_PIN(88, 28), | ||
182 | MX31_PIN_LCS0 = IOMUX_PIN(87, 29), | ||
183 | MX31_PIN_SD_D_CLK = IOMUX_PIN(86, 30), | ||
184 | MX31_PIN_SD_D_IO = IOMUX_PIN(85, 31), | ||
185 | MX31_PIN_SD_D_I = IOMUX_PIN(84, 32), | ||
186 | MX31_PIN_DRDY0 = IOMUX_PIN(0xff, 33), | ||
187 | MX31_PIN_FPSHIFT = IOMUX_PIN(0xff, 34), | ||
188 | MX31_PIN_HSYNC = IOMUX_PIN(0xff, 35), | ||
189 | MX31_PIN_VSYNC0 = IOMUX_PIN(0xff, 36), | ||
190 | MX31_PIN_LD17 = IOMUX_PIN(0xff, 37), | ||
191 | MX31_PIN_LD16 = IOMUX_PIN(0xff, 38), | ||
192 | MX31_PIN_LD15 = IOMUX_PIN(0xff, 39), | ||
193 | MX31_PIN_LD14 = IOMUX_PIN(0xff, 40), | ||
194 | MX31_PIN_LD13 = IOMUX_PIN(0xff, 41), | ||
195 | MX31_PIN_LD12 = IOMUX_PIN(0xff, 42), | ||
196 | MX31_PIN_LD11 = IOMUX_PIN(0xff, 43), | ||
197 | MX31_PIN_LD10 = IOMUX_PIN(0xff, 44), | ||
198 | MX31_PIN_LD9 = IOMUX_PIN(0xff, 45), | ||
199 | MX31_PIN_LD8 = IOMUX_PIN(0xff, 46), | ||
200 | MX31_PIN_LD7 = IOMUX_PIN(0xff, 47), | ||
201 | MX31_PIN_LD6 = IOMUX_PIN(0xff, 48), | ||
202 | MX31_PIN_LD5 = IOMUX_PIN(0xff, 49), | ||
203 | MX31_PIN_LD4 = IOMUX_PIN(0xff, 50), | ||
204 | MX31_PIN_LD3 = IOMUX_PIN(0xff, 51), | ||
205 | MX31_PIN_LD2 = IOMUX_PIN(0xff, 52), | ||
206 | MX31_PIN_LD1 = IOMUX_PIN(0xff, 53), | ||
207 | MX31_PIN_LD0 = IOMUX_PIN(0xff, 54), | ||
208 | MX31_PIN_USBH2_DATA1 = IOMUX_PIN(0xff, 55), | ||
209 | MX31_PIN_USBH2_DATA0 = IOMUX_PIN(0xff, 56), | ||
210 | MX31_PIN_USBH2_NXT = IOMUX_PIN(0xff, 57), | ||
211 | MX31_PIN_USBH2_STP = IOMUX_PIN(0xff, 58), | ||
212 | MX31_PIN_USBH2_DIR = IOMUX_PIN(0xff, 59), | ||
213 | MX31_PIN_USBH2_CLK = IOMUX_PIN(0xff, 60), | ||
214 | MX31_PIN_USBOTG_DATA7 = IOMUX_PIN(0xff, 61), | ||
215 | MX31_PIN_USBOTG_DATA6 = IOMUX_PIN(0xff, 62), | ||
216 | MX31_PIN_USBOTG_DATA5 = IOMUX_PIN(0xff, 63), | ||
217 | MX31_PIN_USBOTG_DATA4 = IOMUX_PIN(0xff, 64), | ||
218 | MX31_PIN_USBOTG_DATA3 = IOMUX_PIN(0xff, 65), | ||
219 | MX31_PIN_USBOTG_DATA2 = IOMUX_PIN(0xff, 66), | ||
220 | MX31_PIN_USBOTG_DATA1 = IOMUX_PIN(0xff, 67), | ||
221 | MX31_PIN_USBOTG_DATA0 = IOMUX_PIN(0xff, 68), | ||
222 | MX31_PIN_USBOTG_NXT = IOMUX_PIN(0xff, 69), | ||
223 | MX31_PIN_USBOTG_STP = IOMUX_PIN(0xff, 70), | ||
224 | MX31_PIN_USBOTG_DIR = IOMUX_PIN(0xff, 71), | ||
225 | MX31_PIN_USBOTG_CLK = IOMUX_PIN(0xff, 72), | ||
226 | MX31_PIN_USB_BYP = IOMUX_PIN(31, 73), | ||
227 | MX31_PIN_USB_OC = IOMUX_PIN(30, 74), | ||
228 | MX31_PIN_USB_PWR = IOMUX_PIN(29, 75), | ||
229 | MX31_PIN_SJC_MOD = IOMUX_PIN(0xff, 76), | ||
230 | MX31_PIN_DE_B = IOMUX_PIN(0xff, 77), | ||
231 | MX31_PIN_TRSTB = IOMUX_PIN(0xff, 78), | ||
232 | MX31_PIN_TDO = IOMUX_PIN(0xff, 79), | ||
233 | MX31_PIN_TDI = IOMUX_PIN(0xff, 80), | ||
234 | MX31_PIN_TMS = IOMUX_PIN(0xff, 81), | ||
235 | MX31_PIN_TCK = IOMUX_PIN(0xff, 82), | ||
236 | MX31_PIN_RTCK = IOMUX_PIN(0xff, 83), | ||
237 | MX31_PIN_KEY_COL7 = IOMUX_PIN(57, 84), | ||
238 | MX31_PIN_KEY_COL6 = IOMUX_PIN(56, 85), | ||
239 | MX31_PIN_KEY_COL5 = IOMUX_PIN(55, 86), | ||
240 | MX31_PIN_KEY_COL4 = IOMUX_PIN(54, 87), | ||
241 | MX31_PIN_KEY_COL3 = IOMUX_PIN(0xff, 88), | ||
242 | MX31_PIN_KEY_COL2 = IOMUX_PIN(0xff, 89), | ||
243 | MX31_PIN_KEY_COL1 = IOMUX_PIN(0xff, 90), | ||
244 | MX31_PIN_KEY_COL0 = IOMUX_PIN(0xff, 91), | ||
245 | MX31_PIN_KEY_ROW7 = IOMUX_PIN(53, 92), | ||
246 | MX31_PIN_KEY_ROW6 = IOMUX_PIN(52, 93), | ||
247 | MX31_PIN_KEY_ROW5 = IOMUX_PIN(51, 94), | ||
248 | MX31_PIN_KEY_ROW4 = IOMUX_PIN(50, 95), | ||
249 | MX31_PIN_KEY_ROW3 = IOMUX_PIN(0xff, 96), | ||
250 | MX31_PIN_KEY_ROW2 = IOMUX_PIN(0xff, 97), | ||
251 | MX31_PIN_KEY_ROW1 = IOMUX_PIN(0xff, 98), | ||
252 | MX31_PIN_KEY_ROW0 = IOMUX_PIN(0xff, 99), | ||
253 | MX31_PIN_BATT_LINE = IOMUX_PIN(49, 100), | ||
254 | MX31_PIN_CTS2 = IOMUX_PIN(0xff, 101), | ||
255 | MX31_PIN_RTS2 = IOMUX_PIN(0xff, 102), | ||
256 | MX31_PIN_TXD2 = IOMUX_PIN(28, 103), | ||
257 | MX31_PIN_RXD2 = IOMUX_PIN(27, 104), | ||
258 | MX31_PIN_DTR_DCE2 = IOMUX_PIN(48, 105), | ||
259 | MX31_PIN_DCD_DTE1 = IOMUX_PIN(47, 106), | ||
260 | MX31_PIN_RI_DTE1 = IOMUX_PIN(46, 107), | ||
261 | MX31_PIN_DSR_DTE1 = IOMUX_PIN(45, 108), | ||
262 | MX31_PIN_DTR_DTE1 = IOMUX_PIN(44, 109), | ||
263 | MX31_PIN_DCD_DCE1 = IOMUX_PIN(43, 110), | ||
264 | MX31_PIN_RI_DCE1 = IOMUX_PIN(42, 111), | ||
265 | MX31_PIN_DSR_DCE1 = IOMUX_PIN(41, 112), | ||
266 | MX31_PIN_DTR_DCE1 = IOMUX_PIN(40, 113), | ||
267 | MX31_PIN_CTS1 = IOMUX_PIN(39, 114), | ||
268 | MX31_PIN_RTS1 = IOMUX_PIN(38, 115), | ||
269 | MX31_PIN_TXD1 = IOMUX_PIN(37, 116), | ||
270 | MX31_PIN_RXD1 = IOMUX_PIN(36, 117), | ||
271 | MX31_PIN_CSPI2_SPI_RDY = IOMUX_PIN(0xff, 118), | ||
272 | MX31_PIN_CSPI2_SCLK = IOMUX_PIN(0xff, 119), | ||
273 | MX31_PIN_CSPI2_SS2 = IOMUX_PIN(0xff, 120), | ||
274 | MX31_PIN_CSPI2_SS1 = IOMUX_PIN(0xff, 121), | ||
275 | MX31_PIN_CSPI2_SS0 = IOMUX_PIN(0xff, 122), | ||
276 | MX31_PIN_CSPI2_MISO = IOMUX_PIN(0xff, 123), | ||
277 | MX31_PIN_CSPI2_MOSI = IOMUX_PIN(0xff, 124), | ||
278 | MX31_PIN_CSPI1_SPI_RDY = IOMUX_PIN(0xff, 125), | ||
279 | MX31_PIN_CSPI1_SCLK = IOMUX_PIN(0xff, 126), | ||
280 | MX31_PIN_CSPI1_SS2 = IOMUX_PIN(0xff, 127), | ||
281 | MX31_PIN_CSPI1_SS1 = IOMUX_PIN(0xff, 128), | ||
282 | MX31_PIN_CSPI1_SS0 = IOMUX_PIN(0xff, 129), | ||
283 | MX31_PIN_CSPI1_MISO = IOMUX_PIN(0xff, 130), | ||
284 | MX31_PIN_CSPI1_MOSI = IOMUX_PIN(0xff, 131), | ||
285 | MX31_PIN_SFS6 = IOMUX_PIN(26, 132), | ||
286 | MX31_PIN_SCK6 = IOMUX_PIN(25, 133), | ||
287 | MX31_PIN_SRXD6 = IOMUX_PIN(24, 134), | ||
288 | MX31_PIN_STXD6 = IOMUX_PIN(23, 135), | ||
289 | MX31_PIN_SFS5 = IOMUX_PIN(0xff, 136), | ||
290 | MX31_PIN_SCK5 = IOMUX_PIN(0xff, 137), | ||
291 | MX31_PIN_SRXD5 = IOMUX_PIN(22, 138), | ||
292 | MX31_PIN_STXD5 = IOMUX_PIN(21, 139), | ||
293 | MX31_PIN_SFS4 = IOMUX_PIN(0xff, 140), | ||
294 | MX31_PIN_SCK4 = IOMUX_PIN(0xff, 141), | ||
295 | MX31_PIN_SRXD4 = IOMUX_PIN(20, 142), | ||
296 | MX31_PIN_STXD4 = IOMUX_PIN(19, 143), | ||
297 | MX31_PIN_SFS3 = IOMUX_PIN(0xff, 144), | ||
298 | MX31_PIN_SCK3 = IOMUX_PIN(0xff, 145), | ||
299 | MX31_PIN_SRXD3 = IOMUX_PIN(18, 146), | ||
300 | MX31_PIN_STXD3 = IOMUX_PIN(17, 147), | ||
301 | MX31_PIN_I2C_DAT = IOMUX_PIN(0xff, 148), | ||
302 | MX31_PIN_I2C_CLK = IOMUX_PIN(0xff, 149), | ||
303 | MX31_PIN_CSI_PIXCLK = IOMUX_PIN(83, 150), | ||
304 | MX31_PIN_CSI_HSYNC = IOMUX_PIN(82, 151), | ||
305 | MX31_PIN_CSI_VSYNC = IOMUX_PIN(81, 152), | ||
306 | MX31_PIN_CSI_MCLK = IOMUX_PIN(80, 153), | ||
307 | MX31_PIN_CSI_D15 = IOMUX_PIN(79, 154), | ||
308 | MX31_PIN_CSI_D14 = IOMUX_PIN(78, 155), | ||
309 | MX31_PIN_CSI_D13 = IOMUX_PIN(77, 156), | ||
310 | MX31_PIN_CSI_D12 = IOMUX_PIN(76, 157), | ||
311 | MX31_PIN_CSI_D11 = IOMUX_PIN(75, 158), | ||
312 | MX31_PIN_CSI_D10 = IOMUX_PIN(74, 159), | ||
313 | MX31_PIN_CSI_D9 = IOMUX_PIN(73, 160), | ||
314 | MX31_PIN_CSI_D8 = IOMUX_PIN(72, 161), | ||
315 | MX31_PIN_CSI_D7 = IOMUX_PIN(71, 162), | ||
316 | MX31_PIN_CSI_D6 = IOMUX_PIN(70, 163), | ||
317 | MX31_PIN_CSI_D5 = IOMUX_PIN(69, 164), | ||
318 | MX31_PIN_CSI_D4 = IOMUX_PIN(68, 165), | ||
319 | MX31_PIN_M_GRANT = IOMUX_PIN(0xff, 166), | ||
320 | MX31_PIN_M_REQUEST = IOMUX_PIN(0xff, 167), | ||
321 | MX31_PIN_PC_POE = IOMUX_PIN(0xff, 168), | ||
322 | MX31_PIN_PC_RW_B = IOMUX_PIN(0xff, 169), | ||
323 | MX31_PIN_IOIS16 = IOMUX_PIN(0xff, 170), | ||
324 | MX31_PIN_PC_RST = IOMUX_PIN(0xff, 171), | ||
325 | MX31_PIN_PC_BVD2 = IOMUX_PIN(0xff, 172), | ||
326 | MX31_PIN_PC_BVD1 = IOMUX_PIN(0xff, 173), | ||
327 | MX31_PIN_PC_VS2 = IOMUX_PIN(0xff, 174), | ||
328 | MX31_PIN_PC_VS1 = IOMUX_PIN(0xff, 175), | ||
329 | MX31_PIN_PC_PWRON = IOMUX_PIN(0xff, 176), | ||
330 | MX31_PIN_PC_READY = IOMUX_PIN(0xff, 177), | ||
331 | MX31_PIN_PC_WAIT_B = IOMUX_PIN(0xff, 178), | ||
332 | MX31_PIN_PC_CD2_B = IOMUX_PIN(0xff, 179), | ||
333 | MX31_PIN_PC_CD1_B = IOMUX_PIN(0xff, 180), | ||
334 | MX31_PIN_D0 = IOMUX_PIN(0xff, 181), | ||
335 | MX31_PIN_D1 = IOMUX_PIN(0xff, 182), | ||
336 | MX31_PIN_D2 = IOMUX_PIN(0xff, 183), | ||
337 | MX31_PIN_D3 = IOMUX_PIN(0xff, 184), | ||
338 | MX31_PIN_D4 = IOMUX_PIN(0xff, 185), | ||
339 | MX31_PIN_D5 = IOMUX_PIN(0xff, 186), | ||
340 | MX31_PIN_D6 = IOMUX_PIN(0xff, 187), | ||
341 | MX31_PIN_D7 = IOMUX_PIN(0xff, 188), | ||
342 | MX31_PIN_D8 = IOMUX_PIN(0xff, 189), | ||
343 | MX31_PIN_D9 = IOMUX_PIN(0xff, 190), | ||
344 | MX31_PIN_D10 = IOMUX_PIN(0xff, 191), | ||
345 | MX31_PIN_D11 = IOMUX_PIN(0xff, 192), | ||
346 | MX31_PIN_D12 = IOMUX_PIN(0xff, 193), | ||
347 | MX31_PIN_D13 = IOMUX_PIN(0xff, 194), | ||
348 | MX31_PIN_D14 = IOMUX_PIN(0xff, 195), | ||
349 | MX31_PIN_D15 = IOMUX_PIN(0xff, 196), | ||
350 | MX31_PIN_NFRB = IOMUX_PIN(16, 197), | ||
351 | MX31_PIN_NFCE_B = IOMUX_PIN(15, 198), | ||
352 | MX31_PIN_NFWP_B = IOMUX_PIN(14, 199), | ||
353 | MX31_PIN_NFCLE = IOMUX_PIN(13, 200), | ||
354 | MX31_PIN_NFALE = IOMUX_PIN(12, 201), | ||
355 | MX31_PIN_NFRE_B = IOMUX_PIN(11, 202), | ||
356 | MX31_PIN_NFWE_B = IOMUX_PIN(10, 203), | ||
357 | MX31_PIN_SDQS3 = IOMUX_PIN(0xff, 204), | ||
358 | MX31_PIN_SDQS2 = IOMUX_PIN(0xff, 205), | ||
359 | MX31_PIN_SDQS1 = IOMUX_PIN(0xff, 206), | ||
360 | MX31_PIN_SDQS0 = IOMUX_PIN(0xff, 207), | ||
361 | MX31_PIN_SDCLK_B = IOMUX_PIN(0xff, 208), | ||
362 | MX31_PIN_SDCLK = IOMUX_PIN(0xff, 209), | ||
363 | MX31_PIN_SDCKE1 = IOMUX_PIN(0xff, 210), | ||
364 | MX31_PIN_SDCKE0 = IOMUX_PIN(0xff, 211), | ||
365 | MX31_PIN_SDWE = IOMUX_PIN(0xff, 212), | ||
366 | MX31_PIN_CAS = IOMUX_PIN(0xff, 213), | ||
367 | MX31_PIN_RAS = IOMUX_PIN(0xff, 214), | ||
368 | MX31_PIN_RW = IOMUX_PIN(0xff, 215), | ||
369 | MX31_PIN_BCLK = IOMUX_PIN(0xff, 216), | ||
370 | MX31_PIN_LBA = IOMUX_PIN(0xff, 217), | ||
371 | MX31_PIN_ECB = IOMUX_PIN(0xff, 218), | ||
372 | MX31_PIN_CS5 = IOMUX_PIN(0xff, 219), | ||
373 | MX31_PIN_CS4 = IOMUX_PIN(0xff, 220), | ||
374 | MX31_PIN_CS3 = IOMUX_PIN(0xff, 221), | ||
375 | MX31_PIN_CS2 = IOMUX_PIN(0xff, 222), | ||
376 | MX31_PIN_CS1 = IOMUX_PIN(0xff, 223), | ||
377 | MX31_PIN_CS0 = IOMUX_PIN(0xff, 224), | ||
378 | MX31_PIN_OE = IOMUX_PIN(0xff, 225), | ||
379 | MX31_PIN_EB1 = IOMUX_PIN(0xff, 226), | ||
380 | MX31_PIN_EB0 = IOMUX_PIN(0xff, 227), | ||
381 | MX31_PIN_DQM3 = IOMUX_PIN(0xff, 228), | ||
382 | MX31_PIN_DQM2 = IOMUX_PIN(0xff, 229), | ||
383 | MX31_PIN_DQM1 = IOMUX_PIN(0xff, 230), | ||
384 | MX31_PIN_DQM0 = IOMUX_PIN(0xff, 231), | ||
385 | MX31_PIN_SD31 = IOMUX_PIN(0xff, 232), | ||
386 | MX31_PIN_SD30 = IOMUX_PIN(0xff, 233), | ||
387 | MX31_PIN_SD29 = IOMUX_PIN(0xff, 234), | ||
388 | MX31_PIN_SD28 = IOMUX_PIN(0xff, 235), | ||
389 | MX31_PIN_SD27 = IOMUX_PIN(0xff, 236), | ||
390 | MX31_PIN_SD26 = IOMUX_PIN(0xff, 237), | ||
391 | MX31_PIN_SD25 = IOMUX_PIN(0xff, 238), | ||
392 | MX31_PIN_SD24 = IOMUX_PIN(0xff, 239), | ||
393 | MX31_PIN_SD23 = IOMUX_PIN(0xff, 240), | ||
394 | MX31_PIN_SD22 = IOMUX_PIN(0xff, 241), | ||
395 | MX31_PIN_SD21 = IOMUX_PIN(0xff, 242), | ||
396 | MX31_PIN_SD20 = IOMUX_PIN(0xff, 243), | ||
397 | MX31_PIN_SD19 = IOMUX_PIN(0xff, 244), | ||
398 | MX31_PIN_SD18 = IOMUX_PIN(0xff, 245), | ||
399 | MX31_PIN_SD17 = IOMUX_PIN(0xff, 246), | ||
400 | MX31_PIN_SD16 = IOMUX_PIN(0xff, 247), | ||
401 | MX31_PIN_SD15 = IOMUX_PIN(0xff, 248), | ||
402 | MX31_PIN_SD14 = IOMUX_PIN(0xff, 249), | ||
403 | MX31_PIN_SD13 = IOMUX_PIN(0xff, 250), | ||
404 | MX31_PIN_SD12 = IOMUX_PIN(0xff, 251), | ||
405 | MX31_PIN_SD11 = IOMUX_PIN(0xff, 252), | ||
406 | MX31_PIN_SD10 = IOMUX_PIN(0xff, 253), | ||
407 | MX31_PIN_SD9 = IOMUX_PIN(0xff, 254), | ||
408 | MX31_PIN_SD8 = IOMUX_PIN(0xff, 255), | ||
409 | MX31_PIN_SD7 = IOMUX_PIN(0xff, 256), | ||
410 | MX31_PIN_SD6 = IOMUX_PIN(0xff, 257), | ||
411 | MX31_PIN_SD5 = IOMUX_PIN(0xff, 258), | ||
412 | MX31_PIN_SD4 = IOMUX_PIN(0xff, 259), | ||
413 | MX31_PIN_SD3 = IOMUX_PIN(0xff, 260), | ||
414 | MX31_PIN_SD2 = IOMUX_PIN(0xff, 261), | ||
415 | MX31_PIN_SD1 = IOMUX_PIN(0xff, 262), | ||
416 | MX31_PIN_SD0 = IOMUX_PIN(0xff, 263), | ||
417 | MX31_PIN_SDBA0 = IOMUX_PIN(0xff, 264), | ||
418 | MX31_PIN_SDBA1 = IOMUX_PIN(0xff, 265), | ||
419 | MX31_PIN_A25 = IOMUX_PIN(0xff, 266), | ||
420 | MX31_PIN_A24 = IOMUX_PIN(0xff, 267), | ||
421 | MX31_PIN_A23 = IOMUX_PIN(0xff, 268), | ||
422 | MX31_PIN_A22 = IOMUX_PIN(0xff, 269), | ||
423 | MX31_PIN_A21 = IOMUX_PIN(0xff, 270), | ||
424 | MX31_PIN_A20 = IOMUX_PIN(0xff, 271), | ||
425 | MX31_PIN_A19 = IOMUX_PIN(0xff, 272), | ||
426 | MX31_PIN_A18 = IOMUX_PIN(0xff, 273), | ||
427 | MX31_PIN_A17 = IOMUX_PIN(0xff, 274), | ||
428 | MX31_PIN_A16 = IOMUX_PIN(0xff, 275), | ||
429 | MX31_PIN_A14 = IOMUX_PIN(0xff, 276), | ||
430 | MX31_PIN_A15 = IOMUX_PIN(0xff, 277), | ||
431 | MX31_PIN_A13 = IOMUX_PIN(0xff, 278), | ||
432 | MX31_PIN_A12 = IOMUX_PIN(0xff, 279), | ||
433 | MX31_PIN_A11 = IOMUX_PIN(0xff, 280), | ||
434 | MX31_PIN_MA10 = IOMUX_PIN(0xff, 281), | ||
435 | MX31_PIN_A10 = IOMUX_PIN(0xff, 282), | ||
436 | MX31_PIN_A9 = IOMUX_PIN(0xff, 283), | ||
437 | MX31_PIN_A8 = IOMUX_PIN(0xff, 284), | ||
438 | MX31_PIN_A7 = IOMUX_PIN(0xff, 285), | ||
439 | MX31_PIN_A6 = IOMUX_PIN(0xff, 286), | ||
440 | MX31_PIN_A5 = IOMUX_PIN(0xff, 287), | ||
441 | MX31_PIN_A4 = IOMUX_PIN(0xff, 288), | ||
442 | MX31_PIN_A3 = IOMUX_PIN(0xff, 289), | ||
443 | MX31_PIN_A2 = IOMUX_PIN(0xff, 290), | ||
444 | MX31_PIN_A1 = IOMUX_PIN(0xff, 291), | ||
445 | MX31_PIN_A0 = IOMUX_PIN(0xff, 292), | ||
446 | MX31_PIN_VPG1 = IOMUX_PIN(0xff, 293), | ||
447 | MX31_PIN_VPG0 = IOMUX_PIN(0xff, 294), | ||
448 | MX31_PIN_DVFS1 = IOMUX_PIN(0xff, 295), | ||
449 | MX31_PIN_DVFS0 = IOMUX_PIN(0xff, 296), | ||
450 | MX31_PIN_VSTBY = IOMUX_PIN(0xff, 297), | ||
451 | MX31_PIN_POWER_FAIL = IOMUX_PIN(0xff, 298), | ||
452 | MX31_PIN_CKIL = IOMUX_PIN(0xff, 299), | ||
453 | MX31_PIN_BOOT_MODE4 = IOMUX_PIN(0xff, 300), | ||
454 | MX31_PIN_BOOT_MODE3 = IOMUX_PIN(0xff, 301), | ||
455 | MX31_PIN_BOOT_MODE2 = IOMUX_PIN(0xff, 302), | ||
456 | MX31_PIN_BOOT_MODE1 = IOMUX_PIN(0xff, 303), | ||
457 | MX31_PIN_BOOT_MODE0 = IOMUX_PIN(0xff, 304), | ||
458 | MX31_PIN_CLKO = IOMUX_PIN(0xff, 305), | ||
459 | MX31_PIN_POR_B = IOMUX_PIN(0xff, 306), | ||
460 | MX31_PIN_RESET_IN_B = IOMUX_PIN(0xff, 307), | ||
461 | MX31_PIN_CKIH = IOMUX_PIN(0xff, 308), | ||
462 | MX31_PIN_SIMPD0 = IOMUX_PIN(35, 309), | ||
463 | MX31_PIN_SRX0 = IOMUX_PIN(34, 310), | ||
464 | MX31_PIN_STX0 = IOMUX_PIN(33, 311), | ||
465 | MX31_PIN_SVEN0 = IOMUX_PIN(32, 312), | ||
466 | MX31_PIN_SRST0 = IOMUX_PIN(67, 313), | ||
467 | MX31_PIN_SCLK0 = IOMUX_PIN(66, 314), | ||
468 | MX31_PIN_GPIO3_1 = IOMUX_PIN(65, 315), | ||
469 | MX31_PIN_GPIO3_0 = IOMUX_PIN(64, 316), | ||
470 | MX31_PIN_GPIO1_6 = IOMUX_PIN( 6, 317), | ||
471 | MX31_PIN_GPIO1_5 = IOMUX_PIN( 5, 318), | ||
472 | MX31_PIN_GPIO1_4 = IOMUX_PIN( 4, 319), | ||
473 | MX31_PIN_GPIO1_3 = IOMUX_PIN( 3, 320), | ||
474 | MX31_PIN_GPIO1_2 = IOMUX_PIN( 2, 321), | ||
475 | MX31_PIN_GPIO1_1 = IOMUX_PIN( 1, 322), | ||
476 | MX31_PIN_GPIO1_0 = IOMUX_PIN( 0, 323), | ||
477 | MX31_PIN_PWMO = IOMUX_PIN( 9, 324), | ||
478 | MX31_PIN_WATCHDOG_RST = IOMUX_PIN(0xff, 325), | ||
479 | MX31_PIN_COMPARE = IOMUX_PIN( 8, 326), | ||
480 | MX31_PIN_CAPTURE = IOMUX_PIN( 7, 327), | ||
481 | }; | ||
482 | |||
483 | /* | ||
484 | * Convenience values for use with mxc_iomux_mode() | ||
485 | * | ||
486 | * Format here is MX31_PIN_(pin name)__(function) | ||
487 | */ | ||
488 | #define MX31_PIN_CSPI3_MOSI__RXD3 IOMUX_MODE(MX31_PIN_CSPI3_MOSI, IOMUX_CONFIG_ALT1) | ||
489 | #define MX31_PIN_CSPI3_MISO__TXD3 IOMUX_MODE(MX31_PIN_CSPI3_MISO, IOMUX_CONFIG_ALT1) | ||
490 | #define MX31_PIN_CTS1__CTS1 IOMUX_MODE(MX31_PIN_CTS1, IOMUX_CONFIG_FUNC) | ||
491 | #define MX31_PIN_RTS1__RTS1 IOMUX_MODE(MX31_PIN_RTS1, IOMUX_CONFIG_FUNC) | ||
492 | #define MX31_PIN_TXD1__TXD1 IOMUX_MODE(MX31_PIN_TXD1, IOMUX_CONFIG_FUNC) | ||
493 | #define MX31_PIN_RXD1__RXD1 IOMUX_MODE(MX31_PIN_RXD1, IOMUX_CONFIG_FUNC) | ||
494 | |||
495 | /* | ||
496 | * This function configures the pad value for a IOMUX pin. | ||
497 | */ | ||
498 | void mxc_iomux_set_pad(enum iomux_pins, u32); | ||
499 | |||
500 | #endif | ||
501 | |||
diff --git a/include/asm-arm/arch-mxc/irqs.h b/include/asm-arm/arch-mxc/irqs.h index b2c5205e1962..f416130718cf 100644 --- a/include/asm-arm/arch-mxc/irqs.h +++ b/include/asm-arm/arch-mxc/irqs.h | |||
@@ -13,17 +13,4 @@ | |||
13 | 13 | ||
14 | #include <asm/hardware.h> | 14 | #include <asm/hardware.h> |
15 | 15 | ||
16 | #define MXC_IRQ_TO_EXPIO(irq) ((irq) - MXC_EXP_IO_BASE) | ||
17 | |||
18 | #define MXC_IRQ_TO_GPIO(irq) ((irq) - MXC_GPIO_INT_BASE) | ||
19 | #define MXC_GPIO_TO_IRQ(x) (MXC_GPIO_INT_BASE + x) | ||
20 | |||
21 | /* Number of normal interrupts */ | ||
22 | #define NR_IRQS (MXC_MAX_INT_LINES + \ | ||
23 | MXC_MAX_GPIO_LINES + \ | ||
24 | MXC_MAX_VIRTUAL_INTS) | ||
25 | |||
26 | /* Number of fast interrupts */ | ||
27 | #define NR_FIQS MXC_MAX_INTS | ||
28 | |||
29 | #endif /* __ASM_ARCH_MXC_IRQS_H__ */ | 16 | #endif /* __ASM_ARCH_MXC_IRQS_H__ */ |
diff --git a/include/asm-arm/arch-mxc/mx27.h b/include/asm-arm/arch-mxc/mx27.h new file mode 100644 index 000000000000..212ecc246626 --- /dev/null +++ b/include/asm-arm/arch-mxc/mx27.h | |||
@@ -0,0 +1,302 @@ | |||
1 | /* | ||
2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * as published by the Free Software Foundation; either version 2 | ||
8 | * of the License, or (at your option) any later version. | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
17 | * MA 02110-1301, USA. | ||
18 | */ | ||
19 | |||
20 | #ifndef __ASM_ARCH_MXC_MX27_H__ | ||
21 | #define __ASM_ARCH_MXC_MX27_H__ | ||
22 | |||
23 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ | ||
24 | #error "Do not include directly." | ||
25 | #endif | ||
26 | |||
27 | /* IRAM */ | ||
28 | #define IRAM_BASE_ADDR 0xFFFF4C00 /* internal ram */ | ||
29 | |||
30 | /* Register offests */ | ||
31 | #define AIPI_BASE_ADDR 0x10000000 | ||
32 | #define AIPI_BASE_ADDR_VIRT 0xF4000000 | ||
33 | #define AIPI_SIZE SZ_1M | ||
34 | |||
35 | #define DMA_BASE_ADDR (AIPI_BASE_ADDR + 0x01000) | ||
36 | #define WDOG_BASE_ADDR (AIPI_BASE_ADDR + 0x02000) | ||
37 | #define GPT1_BASE_ADDR (AIPI_BASE_ADDR + 0x03000) | ||
38 | #define GPT2_BASE_ADDR (AIPI_BASE_ADDR + 0x04000) | ||
39 | #define GPT3_BASE_ADDR (AIPI_BASE_ADDR + 0x05000) | ||
40 | #define PWM_BASE_ADDR (AIPI_BASE_ADDR + 0x06000) | ||
41 | #define RTC_BASE_ADDR (AIPI_BASE_ADDR + 0x07000) | ||
42 | #define KPP_BASE_ADDR (AIPI_BASE_ADDR + 0x08000) | ||
43 | #define OWIRE_BASE_ADDR (AIPI_BASE_ADDR + 0x09000) | ||
44 | #define UART1_BASE_ADDR (AIPI_BASE_ADDR + 0x0A000) | ||
45 | #define UART2_BASE_ADDR (AIPI_BASE_ADDR + 0x0B000) | ||
46 | #define UART3_BASE_ADDR (AIPI_BASE_ADDR + 0x0C000) | ||
47 | #define UART4_BASE_ADDR (AIPI_BASE_ADDR + 0x0D000) | ||
48 | #define CSPI1_BASE_ADDR (AIPI_BASE_ADDR + 0x0E000) | ||
49 | #define CSPI2_BASE_ADDR (AIPI_BASE_ADDR + 0x0F000) | ||
50 | #define SSI1_BASE_ADDR (AIPI_BASE_ADDR + 0x10000) | ||
51 | #define SSI2_BASE_ADDR (AIPI_BASE_ADDR + 0x11000) | ||
52 | #define I2C_BASE_ADDR (AIPI_BASE_ADDR + 0x12000) | ||
53 | #define SDHC1_BASE_ADDR (AIPI_BASE_ADDR + 0x13000) | ||
54 | #define SDHC2_BASE_ADDR (AIPI_BASE_ADDR + 0x14000) | ||
55 | #define GPIO_BASE_ADDR (AIPI_BASE_ADDR + 0x15000) | ||
56 | #define AUDMUX_BASE_ADDR (AIPI_BASE_ADDR + 0x16000) | ||
57 | |||
58 | #define CSPI3_BASE_ADDR (AIPI_BASE_ADDR + 0x17000) | ||
59 | #define MSHC_BASE_ADDR (AIPI_BASE_ADDR + 0x18000) | ||
60 | #define GPT5_BASE_ADDR (AIPI_BASE_ADDR + 0x19000) | ||
61 | #define GPT4_BASE_ADDR (AIPI_BASE_ADDR + 0x1A000) | ||
62 | #define UART5_BASE_ADDR (AIPI_BASE_ADDR + 0x1B000) | ||
63 | #define UART6_BASE_ADDR (AIPI_BASE_ADDR + 0x1C000) | ||
64 | #define I2C2_BASE_ADDR (AIPI_BASE_ADDR + 0x1D000) | ||
65 | #define SDHC3_BASE_ADDR (AIPI_BASE_ADDR + 0x1E000) | ||
66 | #define GPT6_BASE_ADDR (AIPI_BASE_ADDR + 0x1F000) | ||
67 | |||
68 | #define LCDC_BASE_ADDR (AIPI_BASE_ADDR + 0x21000) | ||
69 | #define SLCDC_BASE_ADDR (AIPI_BASE_ADDR + 0x22000) | ||
70 | #define VPU_BASE_ADDR (AIPI_BASE_ADDR + 0x23000) | ||
71 | #define USBOTG_BASE_ADDR (AIPI_BASE_ADDR + 0x24000) | ||
72 | /* for mx27*/ | ||
73 | #define OTG_BASE_ADDR USBOTG_BASE_ADDR | ||
74 | #define SAHARA_BASE_ADDR (AIPI_BASE_ADDR + 0x25000) | ||
75 | #define EMMA_BASE_ADDR (AIPI_BASE_ADDR + 0x26400) | ||
76 | #define CCM_BASE_ADDR (AIPI_BASE_ADDR + 0x27000) | ||
77 | #define SYSCTRL_BASE_ADDR (AIPI_BASE_ADDR + 0x27800) | ||
78 | #define IIM_BASE_ADDR (AIPI_BASE_ADDR + 0x28000) | ||
79 | |||
80 | #define RTIC_BASE_ADDR (AIPI_BASE_ADDR + 0x2A000) | ||
81 | #define FEC_BASE_ADDR (AIPI_BASE_ADDR + 0x2B000) | ||
82 | #define SCC_BASE_ADDR (AIPI_BASE_ADDR + 0x2C000) | ||
83 | #define ETB_BASE_ADDR (AIPI_BASE_ADDR + 0x3B000) | ||
84 | #define ETB_RAM_BASE_ADDR (AIPI_BASE_ADDR + 0x3C000) | ||
85 | |||
86 | #define JAM_BASE_ADDR (AIPI_BASE_ADDR + 0x3E000) | ||
87 | #define MAX_BASE_ADDR (AIPI_BASE_ADDR + 0x3F000) | ||
88 | |||
89 | /* ROMP and AVIC */ | ||
90 | #define ROMP_BASE_ADDR 0x10041000 | ||
91 | |||
92 | #define AVIC_BASE_ADDR 0x10040000 | ||
93 | |||
94 | #define SAHB1_BASE_ADDR 0x80000000 | ||
95 | #define SAHB1_BASE_ADDR_VIRT 0xF4100000 | ||
96 | #define SAHB1_SIZE SZ_1M | ||
97 | |||
98 | #define CSI_BASE_ADDR (SAHB1_BASE_ADDR + 0x0000) | ||
99 | #define ATA_BASE_ADDR (SAHB1_BASE_ADDR + 0x1000) | ||
100 | |||
101 | /* NAND, SDRAM, WEIM, M3IF, EMI controllers */ | ||
102 | #define X_MEMC_BASE_ADDR 0xD8000000 | ||
103 | #define X_MEMC_BASE_ADDR_VIRT 0xF4200000 | ||
104 | #define X_MEMC_SIZE SZ_1M | ||
105 | |||
106 | #define NFC_BASE_ADDR (X_MEMC_BASE_ADDR) | ||
107 | #define SDRAMC_BASE_ADDR (X_MEMC_BASE_ADDR + 0x1000) | ||
108 | #define WEIM_BASE_ADDR (X_MEMC_BASE_ADDR + 0x2000) | ||
109 | #define M3IF_BASE_ADDR (X_MEMC_BASE_ADDR + 0x3000) | ||
110 | #define PCMCIA_CTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x4000) | ||
111 | |||
112 | /* Memory regions and CS */ | ||
113 | #define SDRAM_BASE_ADDR 0xA0000000 | ||
114 | #define CSD1_BASE_ADDR 0xB0000000 | ||
115 | |||
116 | #define CS0_BASE_ADDR 0xC0000000 | ||
117 | #define CS1_BASE_ADDR 0xC8000000 | ||
118 | #define CS2_BASE_ADDR 0xD0000000 | ||
119 | #define CS3_BASE_ADDR 0xD2000000 | ||
120 | #define CS4_BASE_ADDR 0xD4000000 | ||
121 | #define CS5_BASE_ADDR 0xD6000000 | ||
122 | #define PCMCIA_MEM_BASE_ADDR 0xDC000000 | ||
123 | |||
124 | /* | ||
125 | * This macro defines the physical to virtual address mapping for all the | ||
126 | * peripheral modules. It is used by passing in the physical address as x | ||
127 | * and returning the virtual address. If the physical address is not mapped, | ||
128 | * it returns 0xDEADBEEF | ||
129 | */ | ||
130 | #define IO_ADDRESS(x) \ | ||
131 | (((x >= AIPI_BASE_ADDR) && (x < (AIPI_BASE_ADDR + AIPI_SIZE))) ? \ | ||
132 | AIPI_IO_ADDRESS(x) : \ | ||
133 | ((x >= SAHB1_BASE_ADDR) && (x < (SAHB1_BASE_ADDR + SAHB1_SIZE))) ? \ | ||
134 | SAHB1_IO_ADDRESS(x) : \ | ||
135 | ((x >= X_MEMC_BASE_ADDR) && (x < (X_MEMC_BASE_ADDR + X_MEMC_SIZE))) ? \ | ||
136 | X_MEMC_IO_ADDRESS(x) : 0xDEADBEEF) | ||
137 | |||
138 | /* define the address mapping macros: in physical address order */ | ||
139 | #define AIPI_IO_ADDRESS(x) \ | ||
140 | (((x) - AIPI_BASE_ADDR) + AIPI_BASE_ADDR_VIRT) | ||
141 | |||
142 | #define AVIC_IO_ADDRESS(x) AIPI_IO_ADDRESS(x) | ||
143 | |||
144 | #define SAHB1_IO_ADDRESS(x) \ | ||
145 | (((x) - SAHB1_BASE_ADDR) + SAHB1_BASE_ADDR_VIRT) | ||
146 | |||
147 | #define CS4_IO_ADDRESS(x) \ | ||
148 | (((x) - CS4_BASE_ADDR) + CS4_BASE_ADDR_VIRT) | ||
149 | |||
150 | #define X_MEMC_IO_ADDRESS(x) \ | ||
151 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
152 | |||
153 | #define PCMCIA_IO_ADDRESS(x) \ | ||
154 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
155 | |||
156 | /* fixed interrput numbers */ | ||
157 | #define MXC_INT_CCM 63 | ||
158 | #define MXC_INT_IIM 62 | ||
159 | #define MXC_INT_LCDC 61 | ||
160 | #define MXC_INT_SLCDC 60 | ||
161 | #define MXC_INT_SAHARA 59 | ||
162 | #define MXC_INT_SCC_SCM 58 | ||
163 | #define MXC_INT_SCC_SMN 57 | ||
164 | #define MXC_INT_USB3 56 | ||
165 | #define MXC_INT_USB2 55 | ||
166 | #define MXC_INT_USB1 54 | ||
167 | #define MXC_INT_VPU 53 | ||
168 | #define MXC_INT_EMMAPP 52 | ||
169 | #define MXC_INT_EMMAPRP 51 | ||
170 | #define MXC_INT_FEC 50 | ||
171 | #define MXC_INT_UART5 49 | ||
172 | #define MXC_INT_UART6 48 | ||
173 | #define MXC_INT_DMACH15 47 | ||
174 | #define MXC_INT_DMACH14 46 | ||
175 | #define MXC_INT_DMACH13 45 | ||
176 | #define MXC_INT_DMACH12 44 | ||
177 | #define MXC_INT_DMACH11 43 | ||
178 | #define MXC_INT_DMACH10 42 | ||
179 | #define MXC_INT_DMACH9 41 | ||
180 | #define MXC_INT_DMACH8 40 | ||
181 | #define MXC_INT_DMACH7 39 | ||
182 | #define MXC_INT_DMACH6 38 | ||
183 | #define MXC_INT_DMACH5 37 | ||
184 | #define MXC_INT_DMACH4 36 | ||
185 | #define MXC_INT_DMACH3 35 | ||
186 | #define MXC_INT_DMACH2 34 | ||
187 | #define MXC_INT_DMACH1 33 | ||
188 | #define MXC_INT_DMACH0 32 | ||
189 | #define MXC_INT_CSI 31 | ||
190 | #define MXC_INT_ATA 30 | ||
191 | #define MXC_INT_NANDFC 29 | ||
192 | #define MXC_INT_PCMCIA 28 | ||
193 | #define MXC_INT_WDOG 27 | ||
194 | #define MXC_INT_GPT1 26 | ||
195 | #define MXC_INT_GPT2 25 | ||
196 | #define MXC_INT_GPT3 24 | ||
197 | #define MXC_INT_GPT INT_GPT1 | ||
198 | #define MXC_INT_PWM 23 | ||
199 | #define MXC_INT_RTC 22 | ||
200 | #define MXC_INT_KPP 21 | ||
201 | #define MXC_INT_UART1 20 | ||
202 | #define MXC_INT_UART2 19 | ||
203 | #define MXC_INT_UART3 18 | ||
204 | #define MXC_INT_UART4 17 | ||
205 | #define MXC_INT_CSPI1 16 | ||
206 | #define MXC_INT_CSPI2 15 | ||
207 | #define MXC_INT_SSI1 14 | ||
208 | #define MXC_INT_SSI2 13 | ||
209 | #define MXC_INT_I2C 12 | ||
210 | #define MXC_INT_SDHC1 11 | ||
211 | #define MXC_INT_SDHC2 10 | ||
212 | #define MXC_INT_SDHC3 9 | ||
213 | #define MXC_INT_GPIO 8 | ||
214 | #define MXC_INT_SDHC 7 | ||
215 | #define MXC_INT_CSPI3 6 | ||
216 | #define MXC_INT_RTIC 5 | ||
217 | #define MXC_INT_GPT4 4 | ||
218 | #define MXC_INT_GPT5 3 | ||
219 | #define MXC_INT_GPT6 2 | ||
220 | #define MXC_INT_I2C2 1 | ||
221 | |||
222 | /* fixed DMA request numbers */ | ||
223 | #define DMA_REQ_NFC 37 | ||
224 | #define DMA_REQ_SDHC3 36 | ||
225 | #define DMA_REQ_UART6_RX 35 | ||
226 | #define DMA_REQ_UART6_TX 34 | ||
227 | #define DMA_REQ_UART5_RX 33 | ||
228 | #define DMA_REQ_UART5_TX 32 | ||
229 | #define DMA_REQ_CSI_RX 31 | ||
230 | #define DMA_REQ_CSI_STAT 30 | ||
231 | #define DMA_REQ_ATA_RCV 29 | ||
232 | #define DMA_REQ_ATA_TX 28 | ||
233 | #define DMA_REQ_UART1_TX 27 | ||
234 | #define DMA_REQ_UART1_RX 26 | ||
235 | #define DMA_REQ_UART2_TX 25 | ||
236 | #define DMA_REQ_UART2_RX 24 | ||
237 | #define DMA_REQ_UART3_TX 23 | ||
238 | #define DMA_REQ_UART3_RX 22 | ||
239 | #define DMA_REQ_UART4_TX 21 | ||
240 | #define DMA_REQ_UART4_RX 20 | ||
241 | #define DMA_REQ_CSPI1_TX 19 | ||
242 | #define DMA_REQ_CSPI1_RX 18 | ||
243 | #define DMA_REQ_CSPI2_TX 17 | ||
244 | #define DMA_REQ_CSPI2_RX 16 | ||
245 | #define DMA_REQ_SSI1_TX1 15 | ||
246 | #define DMA_REQ_SSI1_RX1 14 | ||
247 | #define DMA_REQ_SSI1_TX0 13 | ||
248 | #define DMA_REQ_SSI1_RX0 12 | ||
249 | #define DMA_REQ_SSI2_TX1 11 | ||
250 | #define DMA_REQ_SSI2_RX1 10 | ||
251 | #define DMA_REQ_SSI2_TX0 9 | ||
252 | #define DMA_REQ_SSI2_RX0 8 | ||
253 | #define DMA_REQ_SDHC1 7 | ||
254 | #define DMA_REQ_SDHC2 6 | ||
255 | #define DMA_REQ_MSHC 4 | ||
256 | #define DMA_REQ_EXT 3 | ||
257 | #define DMA_REQ_CSPI3_TX 2 | ||
258 | #define DMA_REQ_CSPI3_RX 1 | ||
259 | |||
260 | /* silicon revisions specific to i.MX27 */ | ||
261 | #define CHIP_REV_1_0 0x00 | ||
262 | #define CHIP_REV_2_0 0x01 | ||
263 | |||
264 | #ifndef __ASSEMBLY__ | ||
265 | extern int mx27_revision(void); | ||
266 | #endif | ||
267 | |||
268 | /* gpio and gpio based interrupt handling */ | ||
269 | #define GPIO_DR 0x1C | ||
270 | #define GPIO_GDIR 0x00 | ||
271 | #define GPIO_PSR 0x24 | ||
272 | #define GPIO_ICR1 0x28 | ||
273 | #define GPIO_ICR2 0x2C | ||
274 | #define GPIO_IMR 0x30 | ||
275 | #define GPIO_ISR 0x34 | ||
276 | #define GPIO_INT_LOW_LEV 0x3 | ||
277 | #define GPIO_INT_HIGH_LEV 0x2 | ||
278 | #define GPIO_INT_RISE_EDGE 0x0 | ||
279 | #define GPIO_INT_FALL_EDGE 0x1 | ||
280 | #define GPIO_INT_NONE 0x4 | ||
281 | |||
282 | /* Mandatory defines used globally */ | ||
283 | |||
284 | /* this is an i.MX27 CPU */ | ||
285 | #define cpu_is_mx27() (1) | ||
286 | |||
287 | /* this CPU supports up to 192 GPIOs (don't forget the baseboard!) */ | ||
288 | #define ARCH_NR_GPIOS (192 + 16) | ||
289 | |||
290 | /* OS clock tick rate */ | ||
291 | #define CLOCK_TICK_RATE 13300000 | ||
292 | |||
293 | /* Start of RAM */ | ||
294 | #define PHYS_OFFSET SDRAM_BASE_ADDR | ||
295 | |||
296 | /* max interrupt lines count */ | ||
297 | #define NR_IRQS 256 | ||
298 | |||
299 | /* count of internal interrupt sources */ | ||
300 | #define MXC_MAX_INT_LINES 64 | ||
301 | |||
302 | #endif /* __ASM_ARCH_MXC_MX27_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/mx31.h b/include/asm-arm/arch-mxc/mx31.h index 36a1af495bb3..a7373e4a56cb 100644 --- a/include/asm-arm/arch-mxc/mx31.h +++ b/include/asm-arm/arch-mxc/mx31.h | |||
@@ -320,6 +320,8 @@ | |||
320 | #define MXC_MAX_GPIO_LINES (GPIO_NUM_PIN * GPIO_PORT_NUM) | 320 | #define MXC_MAX_GPIO_LINES (GPIO_NUM_PIN * GPIO_PORT_NUM) |
321 | #define MXC_MAX_VIRTUAL_INTS 16 | 321 | #define MXC_MAX_VIRTUAL_INTS 16 |
322 | 322 | ||
323 | #define NR_IRQS (MXC_MAX_INT_LINES + MXC_MAX_GPIO_LINES + MXC_MAX_VIRTUAL_INTS) | ||
324 | |||
323 | /*! | 325 | /*! |
324 | * Number of GPIO port as defined in the IC Spec | 326 | * Number of GPIO port as defined in the IC Spec |
325 | */ | 327 | */ |
@@ -347,6 +349,25 @@ | |||
347 | #define SYSTEM_REV_MIN CHIP_REV_1_0 | 349 | #define SYSTEM_REV_MIN CHIP_REV_1_0 |
348 | #define SYSTEM_REV_NUM 3 | 350 | #define SYSTEM_REV_NUM 3 |
349 | 351 | ||
352 | /* gpio and gpio based interrupt handling */ | ||
353 | #define GPIO_DR 0x00 | ||
354 | #define GPIO_GDIR 0x04 | ||
355 | #define GPIO_PSR 0x08 | ||
356 | #define GPIO_ICR1 0x0C | ||
357 | #define GPIO_ICR2 0x10 | ||
358 | #define GPIO_IMR 0x14 | ||
359 | #define GPIO_ISR 0x18 | ||
360 | #define GPIO_INT_LOW_LEV 0x0 | ||
361 | #define GPIO_INT_HIGH_LEV 0x1 | ||
362 | #define GPIO_INT_RISE_EDGE 0x2 | ||
363 | #define GPIO_INT_FALL_EDGE 0x3 | ||
364 | #define GPIO_INT_NONE 0x4 | ||
365 | |||
366 | /* Mandatory defines used globally */ | ||
367 | |||
368 | /* this CPU supports up to 96 GPIOs */ | ||
369 | #define ARCH_NR_GPIOS 96 | ||
370 | |||
350 | #if !defined(__ASSEMBLY__) && !defined(__MXC_BOOT_UNCOMPRESS) | 371 | #if !defined(__ASSEMBLY__) && !defined(__MXC_BOOT_UNCOMPRESS) |
351 | 372 | ||
352 | /* this is a i.MX31 CPU */ | 373 | /* this is a i.MX31 CPU */ |
diff --git a/include/asm-arm/arch-mxc/mxc.h b/include/asm-arm/arch-mxc/mxc.h index 146d3f60951a..332eda4dbd3b 100644 --- a/include/asm-arm/arch-mxc/mxc.h +++ b/include/asm-arm/arch-mxc/mxc.h | |||
@@ -1,11 +1,20 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. |
3 | */ | 3 | * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) |
4 | 4 | * | |
5 | /* | 5 | * This program is free software; you can redistribute it and/or |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * modify it under the terms of the GNU General Public License |
7 | * it under the terms of the GNU General Public License version 2 as | 7 | * as published by the Free Software Foundation; either version 2 |
8 | * published by the Free Software Foundation. | 8 | * of the License, or (at your option) any later version. |
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
17 | * MA 02110-1301, USA. | ||
9 | */ | 18 | */ |
10 | 19 | ||
11 | #ifndef __ASM_ARCH_MXC_H__ | 20 | #ifndef __ASM_ARCH_MXC_H__ |
@@ -20,133 +29,8 @@ | |||
20 | # define cpu_is_mx31() (0) | 29 | # define cpu_is_mx31() (0) |
21 | #endif | 30 | #endif |
22 | 31 | ||
23 | /* | 32 | #ifndef CONFIG_MACH_MX27 |
24 | ***************************************** | 33 | # define cpu_is_mx27() (0) |
25 | * GPT Register definitions * | 34 | #endif |
26 | ***************************************** | ||
27 | */ | ||
28 | #define MXC_GPT_GPTCR IO_ADDRESS(GPT1_BASE_ADDR + 0x00) | ||
29 | #define MXC_GPT_GPTPR IO_ADDRESS(GPT1_BASE_ADDR + 0x04) | ||
30 | #define MXC_GPT_GPTSR IO_ADDRESS(GPT1_BASE_ADDR + 0x08) | ||
31 | #define MXC_GPT_GPTIR IO_ADDRESS(GPT1_BASE_ADDR + 0x0C) | ||
32 | #define MXC_GPT_GPTOCR1 IO_ADDRESS(GPT1_BASE_ADDR + 0x10) | ||
33 | #define MXC_GPT_GPTOCR2 IO_ADDRESS(GPT1_BASE_ADDR + 0x14) | ||
34 | #define MXC_GPT_GPTOCR3 IO_ADDRESS(GPT1_BASE_ADDR + 0x18) | ||
35 | #define MXC_GPT_GPTICR1 IO_ADDRESS(GPT1_BASE_ADDR + 0x1C) | ||
36 | #define MXC_GPT_GPTICR2 IO_ADDRESS(GPT1_BASE_ADDR + 0x20) | ||
37 | #define MXC_GPT_GPTCNT IO_ADDRESS(GPT1_BASE_ADDR + 0x24) | ||
38 | |||
39 | /* GPT Control register bit definitions */ | ||
40 | #define GPTCR_FO3 (1 << 31) | ||
41 | #define GPTCR_FO2 (1 << 30) | ||
42 | #define GPTCR_FO1 (1 << 29) | ||
43 | |||
44 | #define GPTCR_OM3_SHIFT 26 | ||
45 | #define GPTCR_OM3_MASK (7 << GPTCR_OM3_SHIFT) | ||
46 | #define GPTCR_OM3_DISCONNECTED (0 << GPTCR_OM3_SHIFT) | ||
47 | #define GPTCR_OM3_TOGGLE (1 << GPTCR_OM3_SHIFT) | ||
48 | #define GPTCR_OM3_CLEAR (2 << GPTCR_OM3_SHIFT) | ||
49 | #define GPTCR_OM3_SET (3 << GPTCR_OM3_SHIFT) | ||
50 | #define GPTCR_OM3_GENERATE_LOW (7 << GPTCR_OM3_SHIFT) | ||
51 | |||
52 | #define GPTCR_OM2_SHIFT 23 | ||
53 | #define GPTCR_OM2_MASK (7 << GPTCR_OM2_SHIFT) | ||
54 | #define GPTCR_OM2_DISCONNECTED (0 << GPTCR_OM2_SHIFT) | ||
55 | #define GPTCR_OM2_TOGGLE (1 << GPTCR_OM2_SHIFT) | ||
56 | #define GPTCR_OM2_CLEAR (2 << GPTCR_OM2_SHIFT) | ||
57 | #define GPTCR_OM2_SET (3 << GPTCR_OM2_SHIFT) | ||
58 | #define GPTCR_OM2_GENERATE_LOW (7 << GPTCR_OM2_SHIFT) | ||
59 | |||
60 | #define GPTCR_OM1_SHIFT 20 | ||
61 | #define GPTCR_OM1_MASK (7 << GPTCR_OM1_SHIFT) | ||
62 | #define GPTCR_OM1_DISCONNECTED (0 << GPTCR_OM1_SHIFT) | ||
63 | #define GPTCR_OM1_TOGGLE (1 << GPTCR_OM1_SHIFT) | ||
64 | #define GPTCR_OM1_CLEAR (2 << GPTCR_OM1_SHIFT) | ||
65 | #define GPTCR_OM1_SET (3 << GPTCR_OM1_SHIFT) | ||
66 | #define GPTCR_OM1_GENERATE_LOW (7 << GPTCR_OM1_SHIFT) | ||
67 | |||
68 | #define GPTCR_IM2_SHIFT 18 | ||
69 | #define GPTCR_IM2_MASK (3 << GPTCR_IM2_SHIFT) | ||
70 | #define GPTCR_IM2_CAPTURE_DISABLE (0 << GPTCR_IM2_SHIFT) | ||
71 | #define GPTCR_IM2_CAPTURE_RISING (1 << GPTCR_IM2_SHIFT) | ||
72 | #define GPTCR_IM2_CAPTURE_FALLING (2 << GPTCR_IM2_SHIFT) | ||
73 | #define GPTCR_IM2_CAPTURE_BOTH (3 << GPTCR_IM2_SHIFT) | ||
74 | |||
75 | #define GPTCR_IM1_SHIFT 16 | ||
76 | #define GPTCR_IM1_MASK (3 << GPTCR_IM1_SHIFT) | ||
77 | #define GPTCR_IM1_CAPTURE_DISABLE (0 << GPTCR_IM1_SHIFT) | ||
78 | #define GPTCR_IM1_CAPTURE_RISING (1 << GPTCR_IM1_SHIFT) | ||
79 | #define GPTCR_IM1_CAPTURE_FALLING (2 << GPTCR_IM1_SHIFT) | ||
80 | #define GPTCR_IM1_CAPTURE_BOTH (3 << GPTCR_IM1_SHIFT) | ||
81 | |||
82 | #define GPTCR_SWR (1 << 15) | ||
83 | #define GPTCR_FRR (1 << 9) | ||
84 | |||
85 | #define GPTCR_CLKSRC_SHIFT 6 | ||
86 | #define GPTCR_CLKSRC_MASK (7 << GPTCR_CLKSRC_SHIFT) | ||
87 | #define GPTCR_CLKSRC_NOCLOCK (0 << GPTCR_CLKSRC_SHIFT) | ||
88 | #define GPTCR_CLKSRC_HIGHFREQ (2 << GPTCR_CLKSRC_SHIFT) | ||
89 | #define GPTCR_CLKSRC_CLKIN (3 << GPTCR_CLKSRC_SHIFT) | ||
90 | #define GPTCR_CLKSRC_CLK32K (7 << GPTCR_CLKSRC_SHIFT) | ||
91 | |||
92 | #define GPTCR_STOPEN (1 << 5) | ||
93 | #define GPTCR_DOZEN (1 << 4) | ||
94 | #define GPTCR_WAITEN (1 << 3) | ||
95 | #define GPTCR_DBGEN (1 << 2) | ||
96 | |||
97 | #define GPTCR_ENMOD (1 << 1) | ||
98 | #define GPTCR_ENABLE (1 << 0) | ||
99 | |||
100 | #define GPTSR_OF1 (1 << 0) | ||
101 | #define GPTSR_OF2 (1 << 1) | ||
102 | #define GPTSR_OF3 (1 << 2) | ||
103 | #define GPTSR_IF1 (1 << 3) | ||
104 | #define GPTSR_IF2 (1 << 4) | ||
105 | #define GPTSR_ROV (1 << 5) | ||
106 | |||
107 | #define GPTIR_OF1IE GPTSR_OF1 | ||
108 | #define GPTIR_OF2IE GPTSR_OF2 | ||
109 | #define GPTIR_OF3IE GPTSR_OF3 | ||
110 | #define GPTIR_IF1IE GPTSR_IF1 | ||
111 | #define GPTIR_IF2IE GPTSR_IF2 | ||
112 | #define GPTIR_ROVIE GPTSR_ROV | ||
113 | |||
114 | /* | ||
115 | ***************************************** | ||
116 | * AVIC Registers * | ||
117 | ***************************************** | ||
118 | */ | ||
119 | #define AVIC_BASE IO_ADDRESS(AVIC_BASE_ADDR) | ||
120 | #define AVIC_INTCNTL (AVIC_BASE + 0x00) /* int control reg */ | ||
121 | #define AVIC_NIMASK (AVIC_BASE + 0x04) /* int mask reg */ | ||
122 | #define AVIC_INTENNUM (AVIC_BASE + 0x08) /* int enable number reg */ | ||
123 | #define AVIC_INTDISNUM (AVIC_BASE + 0x0C) /* int disable number reg */ | ||
124 | #define AVIC_INTENABLEH (AVIC_BASE + 0x10) /* int enable reg high */ | ||
125 | #define AVIC_INTENABLEL (AVIC_BASE + 0x14) /* int enable reg low */ | ||
126 | #define AVIC_INTTYPEH (AVIC_BASE + 0x18) /* int type reg high */ | ||
127 | #define AVIC_INTTYPEL (AVIC_BASE + 0x1C) /* int type reg low */ | ||
128 | #define AVIC_NIPRIORITY7 (AVIC_BASE + 0x20) /* norm int priority lvl7 */ | ||
129 | #define AVIC_NIPRIORITY6 (AVIC_BASE + 0x24) /* norm int priority lvl6 */ | ||
130 | #define AVIC_NIPRIORITY5 (AVIC_BASE + 0x28) /* norm int priority lvl5 */ | ||
131 | #define AVIC_NIPRIORITY4 (AVIC_BASE + 0x2C) /* norm int priority lvl4 */ | ||
132 | #define AVIC_NIPRIORITY3 (AVIC_BASE + 0x30) /* norm int priority lvl3 */ | ||
133 | #define AVIC_NIPRIORITY2 (AVIC_BASE + 0x34) /* norm int priority lvl2 */ | ||
134 | #define AVIC_NIPRIORITY1 (AVIC_BASE + 0x38) /* norm int priority lvl1 */ | ||
135 | #define AVIC_NIPRIORITY0 (AVIC_BASE + 0x3C) /* norm int priority lvl0 */ | ||
136 | #define AVIC_NIVECSR (AVIC_BASE + 0x40) /* norm int vector/status */ | ||
137 | #define AVIC_FIVECSR (AVIC_BASE + 0x44) /* fast int vector/status */ | ||
138 | #define AVIC_INTSRCH (AVIC_BASE + 0x48) /* int source reg high */ | ||
139 | #define AVIC_INTSRCL (AVIC_BASE + 0x4C) /* int source reg low */ | ||
140 | #define AVIC_INTFRCH (AVIC_BASE + 0x50) /* int force reg high */ | ||
141 | #define AVIC_INTFRCL (AVIC_BASE + 0x54) /* int force reg low */ | ||
142 | #define AVIC_NIPNDH (AVIC_BASE + 0x58) /* norm int pending high */ | ||
143 | #define AVIC_NIPNDL (AVIC_BASE + 0x5C) /* norm int pending low */ | ||
144 | #define AVIC_FIPNDH (AVIC_BASE + 0x60) /* fast int pending high */ | ||
145 | #define AVIC_FIPNDL (AVIC_BASE + 0x64) /* fast int pending low */ | ||
146 | |||
147 | #define SYSTEM_PREV_REG IO_ADDRESS(IIM_BASE_ADDR + 0x20) | ||
148 | #define SYSTEM_SREV_REG IO_ADDRESS(IIM_BASE_ADDR + 0x24) | ||
149 | #define IIM_PROD_REV_SH 3 | ||
150 | #define IIM_PROD_REV_LEN 5 | ||
151 | 35 | ||
152 | #endif /* __ASM_ARCH_MXC_H__ */ | 36 | #endif /* __ASM_ARCH_MXC_H__ */ |
diff --git a/include/asm-arm/arch-mxc/mxc_timer.h b/include/asm-arm/arch-mxc/mxc_timer.h new file mode 100644 index 000000000000..6cb11f4f1a06 --- /dev/null +++ b/include/asm-arm/arch-mxc/mxc_timer.h | |||
@@ -0,0 +1,158 @@ | |||
1 | /* | ||
2 | * mxc_timer.h | ||
3 | * | ||
4 | * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) | ||
5 | * | ||
6 | * Platform independent (i.MX1, i.MX2, i.MX3) definition for timer handling. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
20 | * Boston, MA 02110-1301, USA. | ||
21 | */ | ||
22 | |||
23 | #ifndef __PLAT_MXC_TIMER_H | ||
24 | #define __PLAT_MXC_TIMER_H | ||
25 | |||
26 | #include <linux/clk.h> | ||
27 | #include <asm/hardware.h> | ||
28 | |||
29 | #ifdef CONFIG_ARCH_IMX | ||
30 | #define TIMER_BASE IO_ADDRESS(TIM1_BASE_ADDR) | ||
31 | #define TIMER_INTERRUPT TIM1_INT | ||
32 | |||
33 | #define TCTL_VAL TCTL_CLK_PCLK1 | ||
34 | #define TCTL_IRQEN (1<<4) | ||
35 | #define TCTL_FRR (1<<8) | ||
36 | #define TCTL_CLK_PCLK1 (1<<1) | ||
37 | #define TCTL_CLK_PCLK1_4 (2<<1) | ||
38 | #define TCTL_CLK_TIN (3<<1) | ||
39 | #define TCTL_CLK_32 (4<<1) | ||
40 | |||
41 | #define MXC_TCTL 0x00 | ||
42 | #define MXC_TPRER 0x04 | ||
43 | #define MXC_TCMP 0x08 | ||
44 | #define MXC_TCR 0x0c | ||
45 | #define MXC_TCN 0x10 | ||
46 | #define MXC_TSTAT 0x14 | ||
47 | #define TSTAT_CAPT (1<<1) | ||
48 | #define TSTAT_COMP (1<<0) | ||
49 | |||
50 | static inline void gpt_irq_disable(void) | ||
51 | { | ||
52 | unsigned int tmp; | ||
53 | |||
54 | tmp = __raw_readl(TIMER_BASE + MXC_TCTL); | ||
55 | __raw_writel(tmp & ~TCTL_IRQEN, TIMER_BASE + MXC_TCTL); | ||
56 | } | ||
57 | |||
58 | static inline void gpt_irq_enable(void) | ||
59 | { | ||
60 | __raw_writel(__raw_readl(TIMER_BASE + MXC_TCTL) | TCTL_IRQEN, | ||
61 | TIMER_BASE + MXC_TCTL); | ||
62 | } | ||
63 | |||
64 | static void gpt_irq_acknowledge(void) | ||
65 | { | ||
66 | __raw_writel(0, TIMER_BASE + MXC_TSTAT); | ||
67 | } | ||
68 | #endif /* CONFIG_ARCH_IMX */ | ||
69 | |||
70 | #ifdef CONFIG_ARCH_MX2 | ||
71 | #define TIMER_BASE IO_ADDRESS(GPT1_BASE_ADDR) | ||
72 | #define TIMER_INTERRUPT MXC_INT_GPT1 | ||
73 | |||
74 | #define MXC_TCTL 0x00 | ||
75 | #define TCTL_VAL TCTL_CLK_PCLK1 | ||
76 | #define TCTL_CLK_PCLK1 (1<<1) | ||
77 | #define TCTL_CLK_PCLK1_4 (2<<1) | ||
78 | #define TCTL_IRQEN (1<<4) | ||
79 | #define TCTL_FRR (1<<8) | ||
80 | #define MXC_TPRER 0x04 | ||
81 | #define MXC_TCMP 0x08 | ||
82 | #define MXC_TCR 0x0c | ||
83 | #define MXC_TCN 0x10 | ||
84 | #define MXC_TSTAT 0x14 | ||
85 | #define TSTAT_CAPT (1<<1) | ||
86 | #define TSTAT_COMP (1<<0) | ||
87 | |||
88 | static inline void gpt_irq_disable(void) | ||
89 | { | ||
90 | unsigned int tmp; | ||
91 | |||
92 | tmp = __raw_readl(TIMER_BASE + MXC_TCTL); | ||
93 | __raw_writel(tmp & ~TCTL_IRQEN, TIMER_BASE + MXC_TCTL); | ||
94 | } | ||
95 | |||
96 | static inline void gpt_irq_enable(void) | ||
97 | { | ||
98 | __raw_writel(__raw_readl(TIMER_BASE + MXC_TCTL) | TCTL_IRQEN, | ||
99 | TIMER_BASE + MXC_TCTL); | ||
100 | } | ||
101 | |||
102 | static void gpt_irq_acknowledge(void) | ||
103 | { | ||
104 | __raw_writel(TSTAT_CAPT | TSTAT_COMP, TIMER_BASE + MXC_TSTAT); | ||
105 | } | ||
106 | #endif /* CONFIG_ARCH_MX2 */ | ||
107 | |||
108 | #ifdef CONFIG_ARCH_MX3 | ||
109 | #define TIMER_BASE IO_ADDRESS(GPT1_BASE_ADDR) | ||
110 | #define TIMER_INTERRUPT MXC_INT_GPT | ||
111 | |||
112 | #define MXC_TCTL 0x00 | ||
113 | #define TCTL_VAL (TCTL_CLK_IPG | TCTL_WAITEN) | ||
114 | #define TCTL_CLK_IPG (1<<6) | ||
115 | #define TCTL_FRR (1<<9) | ||
116 | #define TCTL_WAITEN (1<<3) | ||
117 | |||
118 | #define MXC_TPRER 0x04 | ||
119 | #define MXC_TSTAT 0x08 | ||
120 | #define TSTAT_OF1 (1<<0) | ||
121 | #define TSTAT_OF2 (1<<1) | ||
122 | #define TSTAT_OF3 (1<<2) | ||
123 | #define TSTAT_IF1 (1<<3) | ||
124 | #define TSTAT_IF2 (1<<4) | ||
125 | #define TSTAT_ROV (1<<5) | ||
126 | #define MXC_IR 0x0c | ||
127 | #define MXC_TCMP 0x10 | ||
128 | #define MXC_TCMP2 0x14 | ||
129 | #define MXC_TCMP3 0x18 | ||
130 | #define MXC_TCR 0x1c | ||
131 | #define MXC_TCN 0x24 | ||
132 | |||
133 | static inline void gpt_irq_disable(void) | ||
134 | { | ||
135 | __raw_writel(0, TIMER_BASE + MXC_IR); | ||
136 | } | ||
137 | |||
138 | static inline void gpt_irq_enable(void) | ||
139 | { | ||
140 | __raw_writel(1<<0, TIMER_BASE + MXC_IR); | ||
141 | } | ||
142 | |||
143 | static inline void gpt_irq_acknowledge(void) | ||
144 | { | ||
145 | __raw_writel(TSTAT_OF1, TIMER_BASE + MXC_TSTAT); | ||
146 | } | ||
147 | #endif /* CONFIG_ARCH_MX3 */ | ||
148 | |||
149 | #define TCTL_SWR (1<<15) | ||
150 | #define TCTL_CC (1<<10) | ||
151 | #define TCTL_OM (1<<9) | ||
152 | #define TCTL_CAP_RIS (1<<6) | ||
153 | #define TCTL_CAP_FAL (2<<6) | ||
154 | #define TCTL_CAP_RIS_FAL (3<<6) | ||
155 | #define TCTL_CAP_ENA (1<<5) | ||
156 | #define TCTL_TEN (1<<0) | ||
157 | |||
158 | #endif | ||
diff --git a/include/asm-arm/arch-ns9xxx/hardware.h b/include/asm-arm/arch-ns9xxx/hardware.h index 0b7b34603f1c..0dca11ce21fc 100644 --- a/include/asm-arm/arch-ns9xxx/hardware.h +++ b/include/asm-arm/arch-ns9xxx/hardware.h | |||
@@ -66,13 +66,13 @@ | |||
66 | __REGGET(var, reg ## _ ## field) / __REGSHIFT(reg ## _ ## field) | 66 | __REGGET(var, reg ## _ ## field) / __REGSHIFT(reg ## _ ## field) |
67 | 67 | ||
68 | # define REGGETIM_IDX(var, reg, field, idx) \ | 68 | # define REGGETIM_IDX(var, reg, field, idx) \ |
69 | __REGGET(var, reg ## _ ## field((idx))) / \ | 69 | __REGGET(var, reg ## _ ## field((idx))) / \ |
70 | __REGSHIFT(reg ## _ ## field((idx))) | 70 | __REGSHIFT(reg ## _ ## field((idx))) |
71 | 71 | ||
72 | #else | 72 | #else |
73 | 73 | ||
74 | # define __REG(x) io_p2v(x) | 74 | # define __REG(x) io_p2v(x) |
75 | # define __REG2(x, y) io_p2v((x) + (y)) | 75 | # define __REG2(x, y) io_p2v((x) + 4 * (y)) |
76 | 76 | ||
77 | #endif | 77 | #endif |
78 | 78 | ||
diff --git a/include/asm-arm/arch-omap/board-2430sdp.h b/include/asm-arm/arch-omap/board-2430sdp.h index e9c65ce3cb12..c7db9004ec31 100644 --- a/include/asm-arm/arch-omap/board-2430sdp.h +++ b/include/asm-arm/arch-omap/board-2430sdp.h | |||
@@ -36,9 +36,4 @@ | |||
36 | 36 | ||
37 | #define TWL4030_IRQNUM INT_24XX_SYS_NIRQ | 37 | #define TWL4030_IRQNUM INT_24XX_SYS_NIRQ |
38 | 38 | ||
39 | /* TWL4030 Primary Interrupt Handler (PIH) interrupts */ | ||
40 | #define IH_TWL4030_BASE IH_BOARD_BASE | ||
41 | #define IH_TWL4030_END (IH_TWL4030_BASE+8) | ||
42 | #define NR_IRQS (IH_TWL4030_END) | ||
43 | |||
44 | #endif /* __ASM_ARCH_OMAP_2430SDP_H */ | 39 | #endif /* __ASM_ARCH_OMAP_2430SDP_H */ |
diff --git a/include/asm-arm/arch-omap/board-h3.h b/include/asm-arm/arch-omap/board-h3.h index 0f6404435ea8..c5d0f32a40ac 100644 --- a/include/asm-arm/arch-omap/board-h3.h +++ b/include/asm-arm/arch-omap/board-h3.h | |||
@@ -30,12 +30,6 @@ | |||
30 | /* In OMAP1710 H3 the Ethernet is directly connected to CS1 */ | 30 | /* In OMAP1710 H3 the Ethernet is directly connected to CS1 */ |
31 | #define OMAP1710_ETHR_START 0x04000300 | 31 | #define OMAP1710_ETHR_START 0x04000300 |
32 | 32 | ||
33 | #define MAXIRQNUM (IH_BOARD_BASE) | ||
34 | #define MAXFIQNUM MAXIRQNUM | ||
35 | #define MAXSWINUM MAXIRQNUM | ||
36 | |||
37 | #define NR_IRQS (MAXIRQNUM + 1) | ||
38 | |||
39 | extern void h3_mmc_init(void); | 33 | extern void h3_mmc_init(void); |
40 | extern void h3_mmc_slot_cover_handler(void *arg, int state); | 34 | extern void h3_mmc_slot_cover_handler(void *arg, int state); |
41 | 35 | ||
diff --git a/include/asm-arm/arch-omap/board-innovator.h b/include/asm-arm/arch-omap/board-innovator.h index 56d2c98e143c..9ca03dec9d36 100644 --- a/include/asm-arm/arch-omap/board-innovator.h +++ b/include/asm-arm/arch-omap/board-innovator.h | |||
@@ -36,9 +36,6 @@ | |||
36 | #define OMAP1510P1_EMIFS_PRI_VALUE 0x00 | 36 | #define OMAP1510P1_EMIFS_PRI_VALUE 0x00 |
37 | #define OMAP1510P1_EMIFF_PRI_VALUE 0x00 | 37 | #define OMAP1510P1_EMIFF_PRI_VALUE 0x00 |
38 | 38 | ||
39 | #define NR_FPGA_IRQS 24 | ||
40 | #define NR_IRQS (IH_BOARD_BASE + NR_FPGA_IRQS) | ||
41 | |||
42 | #ifndef __ASSEMBLY__ | 39 | #ifndef __ASSEMBLY__ |
43 | void fpga_write(unsigned char val, int reg); | 40 | void fpga_write(unsigned char val, int reg); |
44 | unsigned char fpga_read(int reg); | 41 | unsigned char fpga_read(int reg); |
diff --git a/include/asm-arm/arch-omap/board-perseus2.h b/include/asm-arm/arch-omap/board-perseus2.h index eb74420cb439..d7429cb0f726 100644 --- a/include/asm-arm/arch-omap/board-perseus2.h +++ b/include/asm-arm/arch-omap/board-perseus2.h | |||
@@ -36,10 +36,4 @@ | |||
36 | #define OMAP_SDRAM_DEVICE D256M_1X16_4B | 36 | #define OMAP_SDRAM_DEVICE D256M_1X16_4B |
37 | #endif | 37 | #endif |
38 | 38 | ||
39 | #define MAXIRQNUM IH_BOARD_BASE | ||
40 | #define MAXFIQNUM MAXIRQNUM | ||
41 | #define MAXSWINUM MAXIRQNUM | ||
42 | |||
43 | #define NR_IRQS (MAXIRQNUM + 1) | ||
44 | |||
45 | #endif | 39 | #endif |
diff --git a/include/asm-arm/arch-omap/clock.h b/include/asm-arm/arch-omap/clock.h index 12a5e4de9518..4c7b3514f71a 100644 --- a/include/asm-arm/arch-omap/clock.h +++ b/include/asm-arm/arch-omap/clock.h | |||
@@ -33,12 +33,24 @@ struct dpll_data { | |||
33 | void __iomem *mult_div1_reg; | 33 | void __iomem *mult_div1_reg; |
34 | u32 mult_mask; | 34 | u32 mult_mask; |
35 | u32 div1_mask; | 35 | u32 div1_mask; |
36 | u16 last_rounded_m; | ||
37 | u8 last_rounded_n; | ||
38 | unsigned long last_rounded_rate; | ||
39 | unsigned int rate_tolerance; | ||
40 | u16 max_multiplier; | ||
41 | u8 max_divider; | ||
42 | u32 max_tolerance; | ||
36 | # if defined(CONFIG_ARCH_OMAP3) | 43 | # if defined(CONFIG_ARCH_OMAP3) |
44 | u8 modes; | ||
37 | void __iomem *control_reg; | 45 | void __iomem *control_reg; |
38 | u32 enable_mask; | 46 | u32 enable_mask; |
39 | u8 auto_recal_bit; | 47 | u8 auto_recal_bit; |
40 | u8 recal_en_bit; | 48 | u8 recal_en_bit; |
41 | u8 recal_st_bit; | 49 | u8 recal_st_bit; |
50 | void __iomem *autoidle_reg; | ||
51 | u32 autoidle_mask; | ||
52 | void __iomem *idlest_reg; | ||
53 | u8 idlest_bit; | ||
42 | # endif | 54 | # endif |
43 | }; | 55 | }; |
44 | 56 | ||
@@ -66,11 +78,14 @@ struct clk { | |||
66 | void __iomem *clksel_reg; | 78 | void __iomem *clksel_reg; |
67 | u32 clksel_mask; | 79 | u32 clksel_mask; |
68 | const struct clksel *clksel; | 80 | const struct clksel *clksel; |
69 | const struct dpll_data *dpll_data; | 81 | struct dpll_data *dpll_data; |
70 | #else | 82 | #else |
71 | __u8 rate_offset; | 83 | __u8 rate_offset; |
72 | __u8 src_offset; | 84 | __u8 src_offset; |
73 | #endif | 85 | #endif |
86 | #if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS) | ||
87 | struct dentry *dent; /* For visible tree hierarchy */ | ||
88 | #endif | ||
74 | }; | 89 | }; |
75 | 90 | ||
76 | struct cpufreq_frequency_table; | 91 | struct cpufreq_frequency_table; |
diff --git a/include/asm-arm/arch-omap/common.h b/include/asm-arm/arch-omap/common.h index 36a3b62d4d8d..8ac03071f60c 100644 --- a/include/asm-arm/arch-omap/common.h +++ b/include/asm-arm/arch-omap/common.h | |||
@@ -47,8 +47,23 @@ static inline int omap_register_i2c_bus(int bus_id, u32 clkrate, | |||
47 | } | 47 | } |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | /* IO bases for various OMAP processors */ | ||
51 | struct omap_globals { | ||
52 | void __iomem *tap; /* Control module ID code */ | ||
53 | void __iomem *sdrc; /* SDRAM Controller */ | ||
54 | void __iomem *sms; /* SDRAM Memory Scheduler */ | ||
55 | void __iomem *ctrl; /* System Control Module */ | ||
56 | void __iomem *prm; /* Power and Reset Management */ | ||
57 | void __iomem *cm; /* Clock Management */ | ||
58 | }; | ||
59 | |||
50 | void omap2_set_globals_242x(void); | 60 | void omap2_set_globals_242x(void); |
51 | void omap2_set_globals_243x(void); | 61 | void omap2_set_globals_243x(void); |
52 | void omap2_set_globals_343x(void); | 62 | void omap2_set_globals_343x(void); |
53 | 63 | ||
64 | /* These get called from omap2_set_globals_xxxx(), do not call these */ | ||
65 | void omap2_set_globals_memory(struct omap_globals *); | ||
66 | void omap2_set_globals_control(struct omap_globals *); | ||
67 | void omap2_set_globals_prcm(struct omap_globals *); | ||
68 | |||
54 | #endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */ | 69 | #endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */ |
diff --git a/include/asm-arm/arch-omap/control.h b/include/asm-arm/arch-omap/control.h index 59c0686f8be7..987553e3eeb9 100644 --- a/include/asm-arm/arch-omap/control.h +++ b/include/asm-arm/arch-omap/control.h | |||
@@ -167,8 +167,7 @@ | |||
167 | 167 | ||
168 | #ifndef __ASSEMBLY__ | 168 | #ifndef __ASSEMBLY__ |
169 | #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) | 169 | #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) |
170 | extern void omap_ctrl_base_set(u32 base); | 170 | extern void __iomem *omap_ctrl_base_get(void); |
171 | extern u32 omap_ctrl_base_get(void); | ||
172 | extern u8 omap_ctrl_readb(u16 offset); | 171 | extern u8 omap_ctrl_readb(u16 offset); |
173 | extern u16 omap_ctrl_readw(u16 offset); | 172 | extern u16 omap_ctrl_readw(u16 offset); |
174 | extern u32 omap_ctrl_readl(u16 offset); | 173 | extern u32 omap_ctrl_readl(u16 offset); |
@@ -176,7 +175,6 @@ extern void omap_ctrl_writeb(u8 val, u16 offset); | |||
176 | extern void omap_ctrl_writew(u16 val, u16 offset); | 175 | extern void omap_ctrl_writew(u16 val, u16 offset); |
177 | extern void omap_ctrl_writel(u32 val, u16 offset); | 176 | extern void omap_ctrl_writel(u32 val, u16 offset); |
178 | #else | 177 | #else |
179 | #define omap_ctrl_base_set(x) WARN_ON(1) | ||
180 | #define omap_ctrl_base_get() 0 | 178 | #define omap_ctrl_base_get() 0 |
181 | #define omap_ctrl_readb(x) 0 | 179 | #define omap_ctrl_readb(x) 0 |
182 | #define omap_ctrl_readw(x) 0 | 180 | #define omap_ctrl_readw(x) 0 |
diff --git a/include/asm-arm/arch-omap/cpu.h b/include/asm-arm/arch-omap/cpu.h index e8a4cf52778b..52db09f83281 100644 --- a/include/asm-arm/arch-omap/cpu.h +++ b/include/asm-arm/arch-omap/cpu.h | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * OMAP cpu type detection | 4 | * OMAP cpu type detection |
5 | * | 5 | * |
6 | * Copyright (C) 2004 Nokia Corporation | 6 | * Copyright (C) 2004, 2008 Nokia Corporation |
7 | * | 7 | * |
8 | * Written by Tony Lindgren <tony.lindgren@nokia.com> | 8 | * Written by Tony Lindgren <tony.lindgren@nokia.com> |
9 | * | 9 | * |
@@ -26,6 +26,12 @@ | |||
26 | #ifndef __ASM_ARCH_OMAP_CPU_H | 26 | #ifndef __ASM_ARCH_OMAP_CPU_H |
27 | #define __ASM_ARCH_OMAP_CPU_H | 27 | #define __ASM_ARCH_OMAP_CPU_H |
28 | 28 | ||
29 | struct omap_chip_id { | ||
30 | u8 oc; | ||
31 | }; | ||
32 | |||
33 | #define OMAP_CHIP_INIT(x) { .oc = x } | ||
34 | |||
29 | extern unsigned int system_rev; | 35 | extern unsigned int system_rev; |
30 | 36 | ||
31 | #define omap2_cpu_rev() ((system_rev >> 12) & 0x0f) | 37 | #define omap2_cpu_rev() ((system_rev >> 12) & 0x0f) |
@@ -345,6 +351,33 @@ IS_OMAP_TYPE(3430, 0x3430) | |||
345 | #define OMAP2430_REV_ES1_0 0x24300000 | 351 | #define OMAP2430_REV_ES1_0 0x24300000 |
346 | #define OMAP3430_REV_ES1_0 0x34300000 | 352 | #define OMAP3430_REV_ES1_0 0x34300000 |
347 | #define OMAP3430_REV_ES2_0 0x34301000 | 353 | #define OMAP3430_REV_ES2_0 0x34301000 |
354 | #define OMAP3430_REV_ES2_1 0x34302000 | ||
355 | #define OMAP3430_REV_ES2_2 0x34303000 | ||
356 | |||
357 | /* | ||
358 | * omap_chip bits | ||
359 | * | ||
360 | * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is | ||
361 | * valid on all chips of that type. CHIP_IS_OMAP3430ES{1,2} indicates | ||
362 | * something that is only valid on that particular ES revision. | ||
363 | * | ||
364 | * These bits may be ORed together to indicate structures that are | ||
365 | * available on multiple chip types. | ||
366 | * | ||
367 | * To test whether a particular structure matches the current OMAP chip type, | ||
368 | * use omap_chip_is(). | ||
369 | * | ||
370 | */ | ||
371 | #define CHIP_IS_OMAP2420 (1 << 0) | ||
372 | #define CHIP_IS_OMAP2430 (1 << 1) | ||
373 | #define CHIP_IS_OMAP3430 (1 << 2) | ||
374 | #define CHIP_IS_OMAP3430ES1 (1 << 3) | ||
375 | #define CHIP_IS_OMAP3430ES2 (1 << 4) | ||
376 | |||
377 | #define CHIP_IS_OMAP24XX (CHIP_IS_OMAP2420 | CHIP_IS_OMAP2430) | ||
378 | |||
379 | int omap_chip_is(struct omap_chip_id oci); | ||
380 | |||
348 | 381 | ||
349 | /* | 382 | /* |
350 | * Macro to detect device type i.e. EMU/HS/TST/GP/BAD | 383 | * Macro to detect device type i.e. EMU/HS/TST/GP/BAD |
@@ -362,6 +395,8 @@ IS_OMAP_TYPE(3430, 0x3430) | |||
362 | #define is_device_type_gp() (get_device_type() == DEVICE_TYPE_GP) | 395 | #define is_device_type_gp() (get_device_type() == DEVICE_TYPE_GP) |
363 | #define is_device_type_bad() (get_device_type() == DEVICE_TYPE_BAD) | 396 | #define is_device_type_bad() (get_device_type() == DEVICE_TYPE_BAD) |
364 | 397 | ||
365 | #endif | 398 | void omap2_check_revision(void); |
399 | |||
400 | #endif /* defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) */ | ||
366 | 401 | ||
367 | #endif | 402 | #endif |
diff --git a/include/asm-arm/arch-omap/dma.h b/include/asm-arm/arch-omap/dma.h index 24acf090030d..f4dcb9587869 100644 --- a/include/asm-arm/arch-omap/dma.h +++ b/include/asm-arm/arch-omap/dma.h | |||
@@ -22,108 +22,128 @@ | |||
22 | #define __ASM_ARCH_DMA_H | 22 | #define __ASM_ARCH_DMA_H |
23 | 23 | ||
24 | /* Hardware registers for omap1 */ | 24 | /* Hardware registers for omap1 */ |
25 | #define OMAP_DMA_BASE (0xfffed800) | 25 | #define OMAP1_DMA_BASE (0xfffed800) |
26 | #define OMAP_DMA_GCR (OMAP_DMA_BASE + 0x400) | 26 | |
27 | #define OMAP_DMA_GSCR (OMAP_DMA_BASE + 0x404) | 27 | #define OMAP1_DMA_GCR 0x400 |
28 | #define OMAP_DMA_GRST (OMAP_DMA_BASE + 0x408) | 28 | #define OMAP1_DMA_GSCR 0x404 |
29 | #define OMAP_DMA_HW_ID (OMAP_DMA_BASE + 0x442) | 29 | #define OMAP1_DMA_GRST 0x408 |
30 | #define OMAP_DMA_PCH2_ID (OMAP_DMA_BASE + 0x444) | 30 | #define OMAP1_DMA_HW_ID 0x442 |
31 | #define OMAP_DMA_PCH0_ID (OMAP_DMA_BASE + 0x446) | 31 | #define OMAP1_DMA_PCH2_ID 0x444 |
32 | #define OMAP_DMA_PCH1_ID (OMAP_DMA_BASE + 0x448) | 32 | #define OMAP1_DMA_PCH0_ID 0x446 |
33 | #define OMAP_DMA_PCHG_ID (OMAP_DMA_BASE + 0x44a) | 33 | #define OMAP1_DMA_PCH1_ID 0x448 |
34 | #define OMAP_DMA_PCHD_ID (OMAP_DMA_BASE + 0x44c) | 34 | #define OMAP1_DMA_PCHG_ID 0x44a |
35 | #define OMAP_DMA_CAPS_0_U (OMAP_DMA_BASE + 0x44e) | 35 | #define OMAP1_DMA_PCHD_ID 0x44c |
36 | #define OMAP_DMA_CAPS_0_L (OMAP_DMA_BASE + 0x450) | 36 | #define OMAP1_DMA_CAPS_0_U 0x44e |
37 | #define OMAP_DMA_CAPS_1_U (OMAP_DMA_BASE + 0x452) | 37 | #define OMAP1_DMA_CAPS_0_L 0x450 |
38 | #define OMAP_DMA_CAPS_1_L (OMAP_DMA_BASE + 0x454) | 38 | #define OMAP1_DMA_CAPS_1_U 0x452 |
39 | #define OMAP_DMA_CAPS_2 (OMAP_DMA_BASE + 0x456) | 39 | #define OMAP1_DMA_CAPS_1_L 0x454 |
40 | #define OMAP_DMA_CAPS_3 (OMAP_DMA_BASE + 0x458) | 40 | #define OMAP1_DMA_CAPS_2 0x456 |
41 | #define OMAP_DMA_CAPS_4 (OMAP_DMA_BASE + 0x45a) | 41 | #define OMAP1_DMA_CAPS_3 0x458 |
42 | #define OMAP_DMA_PCH2_SR (OMAP_DMA_BASE + 0x460) | 42 | #define OMAP1_DMA_CAPS_4 0x45a |
43 | #define OMAP_DMA_PCH0_SR (OMAP_DMA_BASE + 0x480) | 43 | #define OMAP1_DMA_PCH2_SR 0x460 |
44 | #define OMAP_DMA_PCH1_SR (OMAP_DMA_BASE + 0x482) | 44 | #define OMAP1_DMA_PCH0_SR 0x480 |
45 | #define OMAP_DMA_PCHD_SR (OMAP_DMA_BASE + 0x4c0) | 45 | #define OMAP1_DMA_PCH1_SR 0x482 |
46 | 46 | #define OMAP1_DMA_PCHD_SR 0x4c0 | |
47 | /* Hardware registers for omap2 */ | 47 | |
48 | #if defined(CONFIG_ARCH_OMAP3) | 48 | /* Hardware registers for omap2 and omap3 */ |
49 | #define OMAP_DMA4_BASE (L4_34XX_BASE + 0x56000) | 49 | #define OMAP24XX_DMA4_BASE (L4_24XX_BASE + 0x56000) |
50 | #else /* CONFIG_ARCH_OMAP2 */ | 50 | #define OMAP34XX_DMA4_BASE (L4_34XX_BASE + 0x56000) |
51 | #define OMAP_DMA4_BASE (L4_24XX_BASE + 0x56000) | 51 | |
52 | #endif | 52 | #define OMAP_DMA4_REVISION 0x00 |
53 | 53 | #define OMAP_DMA4_GCR 0x78 | |
54 | #define OMAP_DMA4_REVISION (OMAP_DMA4_BASE + 0x00) | 54 | #define OMAP_DMA4_IRQSTATUS_L0 0x08 |
55 | #define OMAP_DMA4_GCR_REG (OMAP_DMA4_BASE + 0x78) | 55 | #define OMAP_DMA4_IRQSTATUS_L1 0x0c |
56 | #define OMAP_DMA4_IRQSTATUS_L0 (OMAP_DMA4_BASE + 0x08) | 56 | #define OMAP_DMA4_IRQSTATUS_L2 0x10 |
57 | #define OMAP_DMA4_IRQSTATUS_L1 (OMAP_DMA4_BASE + 0x0c) | 57 | #define OMAP_DMA4_IRQSTATUS_L3 0x14 |
58 | #define OMAP_DMA4_IRQSTATUS_L2 (OMAP_DMA4_BASE + 0x10) | 58 | #define OMAP_DMA4_IRQENABLE_L0 0x18 |
59 | #define OMAP_DMA4_IRQSTATUS_L3 (OMAP_DMA4_BASE + 0x14) | 59 | #define OMAP_DMA4_IRQENABLE_L1 0x1c |
60 | #define OMAP_DMA4_IRQENABLE_L0 (OMAP_DMA4_BASE + 0x18) | 60 | #define OMAP_DMA4_IRQENABLE_L2 0x20 |
61 | #define OMAP_DMA4_IRQENABLE_L1 (OMAP_DMA4_BASE + 0x1c) | 61 | #define OMAP_DMA4_IRQENABLE_L3 0x24 |
62 | #define OMAP_DMA4_IRQENABLE_L2 (OMAP_DMA4_BASE + 0x20) | 62 | #define OMAP_DMA4_SYSSTATUS 0x28 |
63 | #define OMAP_DMA4_IRQENABLE_L3 (OMAP_DMA4_BASE + 0x24) | 63 | #define OMAP_DMA4_OCP_SYSCONFIG 0x2c |
64 | #define OMAP_DMA4_SYSSTATUS (OMAP_DMA4_BASE + 0x28) | 64 | #define OMAP_DMA4_CAPS_0 0x64 |
65 | #define OMAP_DMA4_OCP_SYSCONFIG (OMAP_DMA4_BASE + 0x2c) | 65 | #define OMAP_DMA4_CAPS_2 0x6c |
66 | #define OMAP_DMA4_CAPS_0 (OMAP_DMA4_BASE + 0x64) | 66 | #define OMAP_DMA4_CAPS_3 0x70 |
67 | #define OMAP_DMA4_CAPS_2 (OMAP_DMA4_BASE + 0x6c) | 67 | #define OMAP_DMA4_CAPS_4 0x74 |
68 | #define OMAP_DMA4_CAPS_3 (OMAP_DMA4_BASE + 0x70) | 68 | |
69 | #define OMAP_DMA4_CAPS_4 (OMAP_DMA4_BASE + 0x74) | 69 | #define OMAP1_LOGICAL_DMA_CH_COUNT 17 |
70 | 70 | #define OMAP_DMA4_LOGICAL_DMA_CH_COUNT 32 /* REVISIT: Is this 32 + 2? */ | |
71 | #ifdef CONFIG_ARCH_OMAP1 | ||
72 | |||
73 | #define OMAP_LOGICAL_DMA_CH_COUNT 17 | ||
74 | 71 | ||
75 | /* Common channel specific registers for omap1 */ | 72 | /* Common channel specific registers for omap1 */ |
76 | #define OMAP_DMA_CSDP_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x00) | 73 | #define OMAP1_DMA_CH_BASE(n) (0x40 * (n) + 0x00) |
77 | #define OMAP_DMA_CCR_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x02) | 74 | #define OMAP1_DMA_CSDP(n) (0x40 * (n) + 0x00) |
78 | #define OMAP_DMA_CICR_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x04) | 75 | #define OMAP1_DMA_CCR(n) (0x40 * (n) + 0x02) |
79 | #define OMAP_DMA_CSR_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x06) | 76 | #define OMAP1_DMA_CICR(n) (0x40 * (n) + 0x04) |
80 | #define OMAP_DMA_CEN_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x10) | 77 | #define OMAP1_DMA_CSR(n) (0x40 * (n) + 0x06) |
81 | #define OMAP_DMA_CFN_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x12) | 78 | #define OMAP1_DMA_CEN(n) (0x40 * (n) + 0x10) |
82 | #define OMAP_DMA_CSFI_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x14) | 79 | #define OMAP1_DMA_CFN(n) (0x40 * (n) + 0x12) |
83 | #define OMAP_DMA_CSEI_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x16) | 80 | #define OMAP1_DMA_CSFI(n) (0x40 * (n) + 0x14) |
84 | #define OMAP_DMA_CSAC_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x18) | 81 | #define OMAP1_DMA_CSEI(n) (0x40 * (n) + 0x16) |
85 | #define OMAP_DMA_CDAC_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x1a) | 82 | #define OMAP1_DMA_CPC(n) (0x40 * (n) + 0x18) /* 15xx only */ |
86 | #define OMAP_DMA_CDEI_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x1c) | 83 | #define OMAP1_DMA_CSAC(n) (0x40 * (n) + 0x18) |
87 | #define OMAP_DMA_CDFI_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x1e) | 84 | #define OMAP1_DMA_CDAC(n) (0x40 * (n) + 0x1a) |
88 | #define OMAP_DMA_CLNK_CTRL_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x28) | 85 | #define OMAP1_DMA_CDEI(n) (0x40 * (n) + 0x1c) |
89 | 86 | #define OMAP1_DMA_CDFI(n) (0x40 * (n) + 0x1e) | |
90 | #else | 87 | #define OMAP1_DMA_CLNK_CTRL(n) (0x40 * (n) + 0x28) |
91 | |||
92 | #define OMAP_LOGICAL_DMA_CH_COUNT 32 /* REVISIT: Is this 32 + 2? */ | ||
93 | 88 | ||
94 | /* Common channel specific registers for omap2 */ | 89 | /* Common channel specific registers for omap2 */ |
95 | #define OMAP_DMA_CCR_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0x80) | 90 | #define OMAP_DMA4_CH_BASE(n) (0x60 * (n) + 0x80) |
96 | #define OMAP_DMA_CLNK_CTRL_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0x84) | 91 | #define OMAP_DMA4_CCR(n) (0x60 * (n) + 0x80) |
97 | #define OMAP_DMA_CICR_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0x88) | 92 | #define OMAP_DMA4_CLNK_CTRL(n) (0x60 * (n) + 0x84) |
98 | #define OMAP_DMA_CSR_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0x8c) | 93 | #define OMAP_DMA4_CICR(n) (0x60 * (n) + 0x88) |
99 | #define OMAP_DMA_CSDP_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0x90) | 94 | #define OMAP_DMA4_CSR(n) (0x60 * (n) + 0x8c) |
100 | #define OMAP_DMA_CEN_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0x94) | 95 | #define OMAP_DMA4_CSDP(n) (0x60 * (n) + 0x90) |
101 | #define OMAP_DMA_CFN_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0x98) | 96 | #define OMAP_DMA4_CEN(n) (0x60 * (n) + 0x94) |
102 | #define OMAP_DMA_CSEI_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xa4) | 97 | #define OMAP_DMA4_CFN(n) (0x60 * (n) + 0x98) |
103 | #define OMAP_DMA_CSFI_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xa8) | 98 | #define OMAP_DMA4_CSEI(n) (0x60 * (n) + 0xa4) |
104 | #define OMAP_DMA_CDEI_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xac) | 99 | #define OMAP_DMA4_CSFI(n) (0x60 * (n) + 0xa8) |
105 | #define OMAP_DMA_CDFI_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xb0) | 100 | #define OMAP_DMA4_CDEI(n) (0x60 * (n) + 0xac) |
106 | #define OMAP_DMA_CSAC_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xb4) | 101 | #define OMAP_DMA4_CDFI(n) (0x60 * (n) + 0xb0) |
107 | #define OMAP_DMA_CDAC_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xb8) | 102 | #define OMAP_DMA4_CSAC(n) (0x60 * (n) + 0xb4) |
108 | 103 | #define OMAP_DMA4_CDAC(n) (0x60 * (n) + 0xb8) | |
109 | #endif | ||
110 | 104 | ||
111 | /* Channel specific registers only on omap1 */ | 105 | /* Channel specific registers only on omap1 */ |
112 | #define OMAP1_DMA_CSSA_L_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x08) | 106 | #define OMAP1_DMA_CSSA_L(n) (0x40 * (n) + 0x08) |
113 | #define OMAP1_DMA_CSSA_U_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x0a) | 107 | #define OMAP1_DMA_CSSA_U(n) (0x40 * (n) + 0x0a) |
114 | #define OMAP1_DMA_CDSA_L_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x0c) | 108 | #define OMAP1_DMA_CDSA_L(n) (0x40 * (n) + 0x0c) |
115 | #define OMAP1_DMA_CDSA_U_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x0e) | 109 | #define OMAP1_DMA_CDSA_U(n) (0x40 * (n) + 0x0e) |
116 | #define OMAP1_DMA_COLOR_L_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x20) | 110 | #define OMAP1_DMA_COLOR_L(n) (0x40 * (n) + 0x20) |
117 | #define OMAP1_DMA_CCR2_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x24) | 111 | #define OMAP1_DMA_COLOR_U(n) (0x40 * (n) + 0x22) |
118 | #define OMAP1_DMA_COLOR_U_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x22) | 112 | #define OMAP1_DMA_CCR2(n) (0x40 * (n) + 0x24) |
119 | #define OMAP1_DMA_LCH_CTRL_REG(n) __REG16(OMAP_DMA_BASE + 0x40 * (n) + 0x2a) | 113 | #define OMAP1_DMA_LCH_CTRL(n) (0x40 * (n) + 0x2a) /* not on 15xx */ |
114 | #define OMAP1_DMA_CCEN(n) 0 | ||
115 | #define OMAP1_DMA_CCFN(n) 0 | ||
120 | 116 | ||
121 | /* Channel specific registers only on omap2 */ | 117 | /* Channel specific registers only on omap2 */ |
122 | #define OMAP2_DMA_CSSA_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0x9c) | 118 | #define OMAP_DMA4_CSSA(n) (0x60 * (n) + 0x9c) |
123 | #define OMAP2_DMA_CDSA_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xa0) | 119 | #define OMAP_DMA4_CDSA(n) (0x60 * (n) + 0xa0) |
124 | #define OMAP2_DMA_CCEN_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xbc) | 120 | #define OMAP_DMA4_CCEN(n) (0x60 * (n) + 0xbc) |
125 | #define OMAP2_DMA_CCFN_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xc0) | 121 | #define OMAP_DMA4_CCFN(n) (0x60 * (n) + 0xc0) |
126 | #define OMAP2_DMA_COLOR_REG(n) __REG32(OMAP_DMA4_BASE + 0x60 * (n) + 0xc4) | 122 | #define OMAP_DMA4_COLOR(n) (0x60 * (n) + 0xc4) |
123 | |||
124 | /* Dummy defines to keep multi-omap compiles happy */ | ||
125 | #define OMAP1_DMA_REVISION 0 | ||
126 | #define OMAP1_DMA_IRQSTATUS_L0 0 | ||
127 | #define OMAP1_DMA_IRQENABLE_L0 0 | ||
128 | #define OMAP1_DMA_OCP_SYSCONFIG 0 | ||
129 | #define OMAP_DMA4_HW_ID 0 | ||
130 | #define OMAP_DMA4_CAPS_0_L 0 | ||
131 | #define OMAP_DMA4_CAPS_0_U 0 | ||
132 | #define OMAP_DMA4_CAPS_1_L 0 | ||
133 | #define OMAP_DMA4_CAPS_1_U 0 | ||
134 | #define OMAP_DMA4_GSCR 0 | ||
135 | #define OMAP_DMA4_CPC(n) 0 | ||
136 | |||
137 | #define OMAP_DMA4_LCH_CTRL(n) 0 | ||
138 | #define OMAP_DMA4_COLOR_L(n) 0 | ||
139 | #define OMAP_DMA4_COLOR_U(n) 0 | ||
140 | #define OMAP_DMA4_CCR2(n) 0 | ||
141 | #define OMAP1_DMA_CSSA(n) 0 | ||
142 | #define OMAP1_DMA_CDSA(n) 0 | ||
143 | #define OMAP_DMA4_CSSA_L(n) 0 | ||
144 | #define OMAP_DMA4_CSSA_U(n) 0 | ||
145 | #define OMAP_DMA4_CDSA_L(n) 0 | ||
146 | #define OMAP_DMA4_CDSA_U(n) 0 | ||
127 | 147 | ||
128 | /*----------------------------------------------------------------------------*/ | 148 | /*----------------------------------------------------------------------------*/ |
129 | 149 | ||
@@ -196,63 +216,98 @@ | |||
196 | #define OMAP24XX_DMA_GPMC 4 /* S_DMA_3 */ | 216 | #define OMAP24XX_DMA_GPMC 4 /* S_DMA_3 */ |
197 | #define OMAP24XX_DMA_GFX 5 /* S_DMA_4 */ | 217 | #define OMAP24XX_DMA_GFX 5 /* S_DMA_4 */ |
198 | #define OMAP24XX_DMA_DSS 6 /* S_DMA_5 */ | 218 | #define OMAP24XX_DMA_DSS 6 /* S_DMA_5 */ |
199 | #define OMAP24XX_DMA_VLYNQ_TX 7 /* S_DMA_6 */ | 219 | #define OMAP242X_DMA_VLYNQ_TX 7 /* S_DMA_6 */ |
220 | #define OMAP24XX_DMA_EXT_DMAREQ2 7 /* S_DMA_6 */ | ||
200 | #define OMAP24XX_DMA_CWT 8 /* S_DMA_7 */ | 221 | #define OMAP24XX_DMA_CWT 8 /* S_DMA_7 */ |
201 | #define OMAP24XX_DMA_AES_TX 9 /* S_DMA_8 */ | 222 | #define OMAP24XX_DMA_AES_TX 9 /* S_DMA_8 */ |
202 | #define OMAP24XX_DMA_AES_RX 10 /* S_DMA_9 */ | 223 | #define OMAP24XX_DMA_AES_RX 10 /* S_DMA_9 */ |
203 | #define OMAP24XX_DMA_DES_TX 11 /* S_DMA_10 */ | 224 | #define OMAP24XX_DMA_DES_TX 11 /* S_DMA_10 */ |
204 | #define OMAP24XX_DMA_DES_RX 12 /* S_DMA_11 */ | 225 | #define OMAP24XX_DMA_DES_RX 12 /* S_DMA_11 */ |
205 | #define OMAP24XX_DMA_SHA1MD5_RX 13 /* S_DMA_12 */ | 226 | #define OMAP24XX_DMA_SHA1MD5_RX 13 /* S_DMA_12 */ |
206 | #define OMAP24XX_DMA_EXT_DMAREQ2 14 /* S_DMA_13 */ | 227 | #define OMAP34XX_DMA_SHA2MD5_RX 13 /* S_DMA_12 */ |
207 | #define OMAP24XX_DMA_EXT_DMAREQ3 15 /* S_DMA_14 */ | 228 | #define OMAP242X_DMA_EXT_DMAREQ2 14 /* S_DMA_13 */ |
208 | #define OMAP24XX_DMA_EXT_DMAREQ4 16 /* S_DMA_15 */ | 229 | #define OMAP242X_DMA_EXT_DMAREQ3 15 /* S_DMA_14 */ |
209 | #define OMAP24XX_DMA_EAC_AC_RD 17 /* S_DMA_16 */ | 230 | #define OMAP242X_DMA_EXT_DMAREQ4 16 /* S_DMA_15 */ |
210 | #define OMAP24XX_DMA_EAC_AC_WR 18 /* S_DMA_17 */ | 231 | #define OMAP242X_DMA_EAC_AC_RD 17 /* S_DMA_16 */ |
211 | #define OMAP24XX_DMA_EAC_MD_UL_RD 19 /* S_DMA_18 */ | 232 | #define OMAP242X_DMA_EAC_AC_WR 18 /* S_DMA_17 */ |
212 | #define OMAP24XX_DMA_EAC_MD_UL_WR 20 /* S_DMA_19 */ | 233 | #define OMAP242X_DMA_EAC_MD_UL_RD 19 /* S_DMA_18 */ |
213 | #define OMAP24XX_DMA_EAC_MD_DL_RD 21 /* S_DMA_20 */ | 234 | #define OMAP242X_DMA_EAC_MD_UL_WR 20 /* S_DMA_19 */ |
214 | #define OMAP24XX_DMA_EAC_MD_DL_WR 22 /* S_DMA_21 */ | 235 | #define OMAP242X_DMA_EAC_MD_DL_RD 21 /* S_DMA_20 */ |
215 | #define OMAP24XX_DMA_EAC_BT_UL_RD 23 /* S_DMA_22 */ | 236 | #define OMAP242X_DMA_EAC_MD_DL_WR 22 /* S_DMA_21 */ |
216 | #define OMAP24XX_DMA_EAC_BT_UL_WR 24 /* S_DMA_23 */ | 237 | #define OMAP242X_DMA_EAC_BT_UL_RD 23 /* S_DMA_22 */ |
217 | #define OMAP24XX_DMA_EAC_BT_DL_RD 25 /* S_DMA_24 */ | 238 | #define OMAP242X_DMA_EAC_BT_UL_WR 24 /* S_DMA_23 */ |
218 | #define OMAP24XX_DMA_EAC_BT_DL_WR 26 /* S_DMA_25 */ | 239 | #define OMAP242X_DMA_EAC_BT_DL_RD 25 /* S_DMA_24 */ |
240 | #define OMAP242X_DMA_EAC_BT_DL_WR 26 /* S_DMA_25 */ | ||
241 | #define OMAP243X_DMA_EXT_DMAREQ3 14 /* S_DMA_13 */ | ||
242 | #define OMAP24XX_DMA_SPI3_TX0 15 /* S_DMA_14 */ | ||
243 | #define OMAP24XX_DMA_SPI3_RX0 16 /* S_DMA_15 */ | ||
244 | #define OMAP24XX_DMA_MCBSP3_TX 17 /* S_DMA_16 */ | ||
245 | #define OMAP24XX_DMA_MCBSP3_RX 18 /* S_DMA_17 */ | ||
246 | #define OMAP24XX_DMA_MCBSP4_TX 19 /* S_DMA_18 */ | ||
247 | #define OMAP24XX_DMA_MCBSP4_RX 20 /* S_DMA_19 */ | ||
248 | #define OMAP24XX_DMA_MCBSP5_TX 21 /* S_DMA_20 */ | ||
249 | #define OMAP24XX_DMA_MCBSP5_RX 22 /* S_DMA_21 */ | ||
250 | #define OMAP24XX_DMA_SPI3_TX1 23 /* S_DMA_22 */ | ||
251 | #define OMAP24XX_DMA_SPI3_RX1 24 /* S_DMA_23 */ | ||
252 | #define OMAP243X_DMA_EXT_DMAREQ4 25 /* S_DMA_24 */ | ||
253 | #define OMAP243X_DMA_EXT_DMAREQ5 26 /* S_DMA_25 */ | ||
254 | #define OMAP34XX_DMA_I2C3_TX 25 /* S_DMA_24 */ | ||
255 | #define OMAP34XX_DMA_I2C3_RX 26 /* S_DMA_25 */ | ||
219 | #define OMAP24XX_DMA_I2C1_TX 27 /* S_DMA_26 */ | 256 | #define OMAP24XX_DMA_I2C1_TX 27 /* S_DMA_26 */ |
220 | #define OMAP24XX_DMA_I2C1_RX 28 /* S_DMA_27 */ | 257 | #define OMAP24XX_DMA_I2C1_RX 28 /* S_DMA_27 */ |
221 | #define OMAP24XX_DMA_I2C2_TX 29 /* S_DMA_28 */ | 258 | #define OMAP24XX_DMA_I2C2_TX 29 /* S_DMA_28 */ |
222 | #define OMAP24XX_DMA_I2C2_RX 30 /* S_DMA_29 */ | 259 | #define OMAP24XX_DMA_I2C2_RX 30 /* S_DMA_29 */ |
223 | #define OMAP24XX_DMA_MCBSP1_TX 31 /* SDMA_30 */ | 260 | #define OMAP24XX_DMA_MCBSP1_TX 31 /* S_DMA_30 */ |
224 | #define OMAP24XX_DMA_MCBSP1_RX 32 /* SDMA_31 */ | 261 | #define OMAP24XX_DMA_MCBSP1_RX 32 /* S_DMA_31 */ |
225 | #define OMAP24XX_DMA_MCBSP2_TX 33 /* SDMA_32 */ | 262 | #define OMAP24XX_DMA_MCBSP2_TX 33 /* S_DMA_32 */ |
226 | #define OMAP24XX_DMA_MCBSP2_RX 34 /* SDMA_33 */ | 263 | #define OMAP24XX_DMA_MCBSP2_RX 34 /* S_DMA_33 */ |
227 | #define OMAP24XX_DMA_SPI1_TX0 35 /* SDMA_34 */ | 264 | #define OMAP24XX_DMA_SPI1_TX0 35 /* S_DMA_34 */ |
228 | #define OMAP24XX_DMA_SPI1_RX0 36 /* SDMA_35 */ | 265 | #define OMAP24XX_DMA_SPI1_RX0 36 /* S_DMA_35 */ |
229 | #define OMAP24XX_DMA_SPI1_TX1 37 /* SDMA_36 */ | 266 | #define OMAP24XX_DMA_SPI1_TX1 37 /* S_DMA_36 */ |
230 | #define OMAP24XX_DMA_SPI1_RX1 38 /* SDMA_37 */ | 267 | #define OMAP24XX_DMA_SPI1_RX1 38 /* S_DMA_37 */ |
231 | #define OMAP24XX_DMA_SPI1_TX2 39 /* SDMA_38 */ | 268 | #define OMAP24XX_DMA_SPI1_TX2 39 /* S_DMA_38 */ |
232 | #define OMAP24XX_DMA_SPI1_RX2 40 /* SDMA_39 */ | 269 | #define OMAP24XX_DMA_SPI1_RX2 40 /* S_DMA_39 */ |
233 | #define OMAP24XX_DMA_SPI1_TX3 41 /* SDMA_40 */ | 270 | #define OMAP24XX_DMA_SPI1_TX3 41 /* S_DMA_40 */ |
234 | #define OMAP24XX_DMA_SPI1_RX3 42 /* SDMA_41 */ | 271 | #define OMAP24XX_DMA_SPI1_RX3 42 /* S_DMA_41 */ |
235 | #define OMAP24XX_DMA_SPI2_TX0 43 /* SDMA_42 */ | 272 | #define OMAP24XX_DMA_SPI2_TX0 43 /* S_DMA_42 */ |
236 | #define OMAP24XX_DMA_SPI2_RX0 44 /* SDMA_43 */ | 273 | #define OMAP24XX_DMA_SPI2_RX0 44 /* S_DMA_43 */ |
237 | #define OMAP24XX_DMA_SPI2_TX1 45 /* SDMA_44 */ | 274 | #define OMAP24XX_DMA_SPI2_TX1 45 /* S_DMA_44 */ |
238 | #define OMAP24XX_DMA_SPI2_RX1 46 /* SDMA_45 */ | 275 | #define OMAP24XX_DMA_SPI2_RX1 46 /* S_DMA_45 */ |
239 | 276 | #define OMAP24XX_DMA_MMC2_TX 47 /* S_DMA_46 */ | |
240 | #define OMAP24XX_DMA_UART1_TX 49 /* SDMA_48 */ | 277 | #define OMAP24XX_DMA_MMC2_RX 48 /* S_DMA_47 */ |
241 | #define OMAP24XX_DMA_UART1_RX 50 /* SDMA_49 */ | 278 | #define OMAP24XX_DMA_UART1_TX 49 /* S_DMA_48 */ |
242 | #define OMAP24XX_DMA_UART2_TX 51 /* SDMA_50 */ | 279 | #define OMAP24XX_DMA_UART1_RX 50 /* S_DMA_49 */ |
243 | #define OMAP24XX_DMA_UART2_RX 52 /* SDMA_51 */ | 280 | #define OMAP24XX_DMA_UART2_TX 51 /* S_DMA_50 */ |
244 | #define OMAP24XX_DMA_UART3_TX 53 /* SDMA_52 */ | 281 | #define OMAP24XX_DMA_UART2_RX 52 /* S_DMA_51 */ |
245 | #define OMAP24XX_DMA_UART3_RX 54 /* SDMA_53 */ | 282 | #define OMAP24XX_DMA_UART3_TX 53 /* S_DMA_52 */ |
246 | #define OMAP24XX_DMA_USB_W2FC_TX0 55 /* SDMA_54 */ | 283 | #define OMAP24XX_DMA_UART3_RX 54 /* S_DMA_53 */ |
247 | #define OMAP24XX_DMA_USB_W2FC_RX0 56 /* SDMA_55 */ | 284 | #define OMAP24XX_DMA_USB_W2FC_TX0 55 /* S_DMA_54 */ |
248 | #define OMAP24XX_DMA_USB_W2FC_TX1 57 /* SDMA_56 */ | 285 | #define OMAP24XX_DMA_USB_W2FC_RX0 56 /* S_DMA_55 */ |
249 | #define OMAP24XX_DMA_USB_W2FC_RX1 58 /* SDMA_57 */ | 286 | #define OMAP24XX_DMA_USB_W2FC_TX1 57 /* S_DMA_56 */ |
250 | #define OMAP24XX_DMA_USB_W2FC_TX2 59 /* SDMA_58 */ | 287 | #define OMAP24XX_DMA_USB_W2FC_RX1 58 /* S_DMA_57 */ |
251 | #define OMAP24XX_DMA_USB_W2FC_RX2 60 /* SDMA_59 */ | 288 | #define OMAP24XX_DMA_USB_W2FC_TX2 59 /* S_DMA_58 */ |
252 | #define OMAP24XX_DMA_MMC1_TX 61 /* SDMA_60 */ | 289 | #define OMAP24XX_DMA_USB_W2FC_RX2 60 /* S_DMA_59 */ |
253 | #define OMAP24XX_DMA_MMC1_RX 62 /* SDMA_61 */ | 290 | #define OMAP24XX_DMA_MMC1_TX 61 /* S_DMA_60 */ |
254 | #define OMAP24XX_DMA_MS 63 /* SDMA_62 */ | 291 | #define OMAP24XX_DMA_MMC1_RX 62 /* S_DMA_61 */ |
255 | #define OMAP24XX_DMA_EXT_DMAREQ5 64 /* S_DMA_63 */ | 292 | #define OMAP24XX_DMA_MS 63 /* S_DMA_62 */ |
293 | #define OMAP242X_DMA_EXT_DMAREQ5 64 /* S_DMA_63 */ | ||
294 | #define OMAP243X_DMA_EXT_DMAREQ6 64 /* S_DMA_63 */ | ||
295 | #define OMAP34XX_DMA_EXT_DMAREQ3 64 /* S_DMA_63 */ | ||
296 | #define OMAP34XX_DMA_AES2_TX 65 /* S_DMA_64 */ | ||
297 | #define OMAP34XX_DMA_AES2_RX 66 /* S_DMA_65 */ | ||
298 | #define OMAP34XX_DMA_DES2_TX 67 /* S_DMA_66 */ | ||
299 | #define OMAP34XX_DMA_DES2_RX 68 /* S_DMA_67 */ | ||
300 | #define OMAP34XX_DMA_SHA1MD5_RX 69 /* S_DMA_68 */ | ||
301 | #define OMAP34XX_DMA_SPI4_TX0 70 /* S_DMA_69 */ | ||
302 | #define OMAP34XX_DMA_SPI4_RX0 71 /* S_DMA_70 */ | ||
303 | #define OMAP34XX_DSS_DMA0 72 /* S_DMA_71 */ | ||
304 | #define OMAP34XX_DSS_DMA1 73 /* S_DMA_72 */ | ||
305 | #define OMAP34XX_DSS_DMA2 74 /* S_DMA_73 */ | ||
306 | #define OMAP34XX_DSS_DMA3 75 /* S_DMA_74 */ | ||
307 | #define OMAP34XX_DMA_MMC3_TX 77 /* S_DMA_76 */ | ||
308 | #define OMAP34XX_DMA_MMC3_RX 78 /* S_DMA_77 */ | ||
309 | #define OMAP34XX_DMA_USIM_TX 79 /* S_DMA_78 */ | ||
310 | #define OMAP34XX_DMA_USIM_RX 80 /* S_DMA_79 */ | ||
256 | 311 | ||
257 | /*----------------------------------------------------------------------------*/ | 312 | /*----------------------------------------------------------------------------*/ |
258 | 313 | ||
@@ -358,6 +413,11 @@ enum omap_dma_burst_mode { | |||
358 | OMAP_DMA_DATA_BURST_16, | 413 | OMAP_DMA_DATA_BURST_16, |
359 | }; | 414 | }; |
360 | 415 | ||
416 | enum end_type { | ||
417 | OMAP_DMA_LITTLE_ENDIAN = 0, | ||
418 | OMAP_DMA_BIG_ENDIAN | ||
419 | }; | ||
420 | |||
361 | enum omap_dma_color_mode { | 421 | enum omap_dma_color_mode { |
362 | OMAP_DMA_COLOR_DIS = 0, | 422 | OMAP_DMA_COLOR_DIS = 0, |
363 | OMAP_DMA_CONSTANT_FILL, | 423 | OMAP_DMA_CONSTANT_FILL, |
@@ -370,24 +430,34 @@ enum omap_dma_write_mode { | |||
370 | OMAP_DMA_WRITE_LAST_NON_POSTED | 430 | OMAP_DMA_WRITE_LAST_NON_POSTED |
371 | }; | 431 | }; |
372 | 432 | ||
433 | enum omap_dma_channel_mode { | ||
434 | OMAP_DMA_LCH_2D = 0, | ||
435 | OMAP_DMA_LCH_G, | ||
436 | OMAP_DMA_LCH_P, | ||
437 | OMAP_DMA_LCH_PD | ||
438 | }; | ||
439 | |||
373 | struct omap_dma_channel_params { | 440 | struct omap_dma_channel_params { |
374 | int data_type; /* data type 8,16,32 */ | 441 | int data_type; /* data type 8,16,32 */ |
375 | int elem_count; /* number of elements in a frame */ | 442 | int elem_count; /* number of elements in a frame */ |
376 | int frame_count; /* number of frames in a element */ | 443 | int frame_count; /* number of frames in a element */ |
377 | 444 | ||
378 | int src_port; /* Only on OMAP1 REVISIT: Is this needed? */ | 445 | int src_port; /* Only on OMAP1 REVISIT: Is this needed? */ |
379 | int src_amode; /* constant , post increment, indexed , double indexed */ | 446 | int src_amode; /* constant, post increment, indexed, |
447 | double indexed */ | ||
380 | unsigned long src_start; /* source address : physical */ | 448 | unsigned long src_start; /* source address : physical */ |
381 | int src_ei; /* source element index */ | 449 | int src_ei; /* source element index */ |
382 | int src_fi; /* source frame index */ | 450 | int src_fi; /* source frame index */ |
383 | 451 | ||
384 | int dst_port; /* Only on OMAP1 REVISIT: Is this needed? */ | 452 | int dst_port; /* Only on OMAP1 REVISIT: Is this needed? */ |
385 | int dst_amode; /* constant , post increment, indexed , double indexed */ | 453 | int dst_amode; /* constant, post increment, indexed, |
454 | double indexed */ | ||
386 | unsigned long dst_start; /* source address : physical */ | 455 | unsigned long dst_start; /* source address : physical */ |
387 | int dst_ei; /* source element index */ | 456 | int dst_ei; /* source element index */ |
388 | int dst_fi; /* source frame index */ | 457 | int dst_fi; /* source frame index */ |
389 | 458 | ||
390 | int trigger; /* trigger attached if the channel is synchronized */ | 459 | int trigger; /* trigger attached if the channel is |
460 | synchronized */ | ||
391 | int sync_mode; /* sycn on element, frame , block or packet */ | 461 | int sync_mode; /* sycn on element, frame , block or packet */ |
392 | int src_or_dst_synch; /* source synch(1) or destination synch(0) */ | 462 | int src_or_dst_synch; /* source synch(1) or destination synch(0) */ |
393 | 463 | ||
@@ -404,8 +474,8 @@ struct omap_dma_channel_params { | |||
404 | 474 | ||
405 | extern void omap_set_dma_priority(int lch, int dst_port, int priority); | 475 | extern void omap_set_dma_priority(int lch, int dst_port, int priority); |
406 | extern int omap_request_dma(int dev_id, const char *dev_name, | 476 | extern int omap_request_dma(int dev_id, const char *dev_name, |
407 | void (* callback)(int lch, u16 ch_status, void *data), | 477 | void (*callback)(int lch, u16 ch_status, void *data), |
408 | void *data, int *dma_ch); | 478 | void *data, int *dma_ch); |
409 | extern void omap_enable_dma_irq(int ch, u16 irq_bits); | 479 | extern void omap_enable_dma_irq(int ch, u16 irq_bits); |
410 | extern void omap_disable_dma_irq(int ch, u16 irq_bits); | 480 | extern void omap_disable_dma_irq(int ch, u16 irq_bits); |
411 | extern void omap_free_dma(int ch); | 481 | extern void omap_free_dma(int ch); |
@@ -418,6 +488,7 @@ extern void omap_set_dma_transfer_params(int lch, int data_type, | |||
418 | extern void omap_set_dma_color_mode(int lch, enum omap_dma_color_mode mode, | 488 | extern void omap_set_dma_color_mode(int lch, enum omap_dma_color_mode mode, |
419 | u32 color); | 489 | u32 color); |
420 | extern void omap_set_dma_write_mode(int lch, enum omap_dma_write_mode mode); | 490 | extern void omap_set_dma_write_mode(int lch, enum omap_dma_write_mode mode); |
491 | extern void omap_set_dma_channel_mode(int lch, enum omap_dma_channel_mode mode); | ||
421 | 492 | ||
422 | extern void omap_set_dma_src_params(int lch, int src_port, int src_amode, | 493 | extern void omap_set_dma_src_params(int lch, int src_port, int src_amode, |
423 | unsigned long src_start, | 494 | unsigned long src_start, |
@@ -436,23 +507,26 @@ extern void omap_set_dma_dest_burst_mode(int lch, | |||
436 | enum omap_dma_burst_mode burst_mode); | 507 | enum omap_dma_burst_mode burst_mode); |
437 | 508 | ||
438 | extern void omap_set_dma_params(int lch, | 509 | extern void omap_set_dma_params(int lch, |
439 | struct omap_dma_channel_params * params); | 510 | struct omap_dma_channel_params *params); |
440 | 511 | ||
441 | extern void omap_dma_link_lch (int lch_head, int lch_queue); | 512 | extern void omap_dma_link_lch(int lch_head, int lch_queue); |
442 | extern void omap_dma_unlink_lch (int lch_head, int lch_queue); | 513 | extern void omap_dma_unlink_lch(int lch_head, int lch_queue); |
443 | 514 | ||
444 | extern int omap_set_dma_callback(int lch, | 515 | extern int omap_set_dma_callback(int lch, |
445 | void (* callback)(int lch, u16 ch_status, void *data), | 516 | void (*callback)(int lch, u16 ch_status, void *data), |
446 | void *data); | 517 | void *data); |
447 | extern dma_addr_t omap_get_dma_src_pos(int lch); | 518 | extern dma_addr_t omap_get_dma_src_pos(int lch); |
448 | extern dma_addr_t omap_get_dma_dst_pos(int lch); | 519 | extern dma_addr_t omap_get_dma_dst_pos(int lch); |
449 | extern int omap_get_dma_src_addr_counter(int lch); | ||
450 | extern void omap_clear_dma(int lch); | 520 | extern void omap_clear_dma(int lch); |
521 | extern int omap_get_dma_active_status(int lch); | ||
451 | extern int omap_dma_running(void); | 522 | extern int omap_dma_running(void); |
452 | extern void omap_dma_set_global_params(int arb_rate, int max_fifo_depth, | 523 | extern void omap_dma_set_global_params(int arb_rate, int max_fifo_depth, |
453 | int tparams); | 524 | int tparams); |
454 | extern int omap_dma_set_prio_lch(int lch, unsigned char read_prio, | 525 | extern int omap_dma_set_prio_lch(int lch, unsigned char read_prio, |
455 | unsigned char write_prio); | 526 | unsigned char write_prio); |
527 | extern void omap_set_dma_dst_endian_type(int lch, enum end_type etype); | ||
528 | extern void omap_set_dma_src_endian_type(int lch, enum end_type etype); | ||
529 | extern int omap_get_dma_index(int lch, int *ei, int *fi); | ||
456 | 530 | ||
457 | /* Chaining APIs */ | 531 | /* Chaining APIs */ |
458 | #ifndef CONFIG_ARCH_OMAP1 | 532 | #ifndef CONFIG_ARCH_OMAP1 |
@@ -478,7 +552,7 @@ extern int omap_dma_chain_status(int chain_id); | |||
478 | #endif | 552 | #endif |
479 | 553 | ||
480 | /* LCD DMA functions */ | 554 | /* LCD DMA functions */ |
481 | extern int omap_request_lcd_dma(void (* callback)(u16 status, void *data), | 555 | extern int omap_request_lcd_dma(void (*callback)(u16 status, void *data), |
482 | void *data); | 556 | void *data); |
483 | extern void omap_free_lcd_dma(void); | 557 | extern void omap_free_lcd_dma(void); |
484 | extern void omap_setup_lcd_dma(void); | 558 | extern void omap_setup_lcd_dma(void); |
diff --git a/include/asm-arm/arch-omap/dmtimer.h b/include/asm-arm/arch-omap/dmtimer.h index fefb276ed402..02b29e8437ae 100644 --- a/include/asm-arm/arch-omap/dmtimer.h +++ b/include/asm-arm/arch-omap/dmtimer.h | |||
@@ -66,6 +66,7 @@ void omap_dm_timer_stop(struct omap_dm_timer *timer); | |||
66 | 66 | ||
67 | void omap_dm_timer_set_source(struct omap_dm_timer *timer, int source); | 67 | void omap_dm_timer_set_source(struct omap_dm_timer *timer, int source); |
68 | void omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload, unsigned int value); | 68 | void omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload, unsigned int value); |
69 | void omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload, unsigned int value); | ||
69 | void omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable, unsigned int match); | 70 | void omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable, unsigned int match); |
70 | void omap_dm_timer_set_pwm(struct omap_dm_timer *timer, int def_on, int toggle, int trigger); | 71 | void omap_dm_timer_set_pwm(struct omap_dm_timer *timer, int def_on, int toggle, int trigger); |
71 | void omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler); | 72 | void omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler); |
diff --git a/include/asm-arm/arch-omap/fpga.h b/include/asm-arm/arch-omap/fpga.h index 6a883e0bdbb8..f420881d2a3b 100644 --- a/include/asm-arm/arch-omap/fpga.h +++ b/include/asm-arm/arch-omap/fpga.h | |||
@@ -169,30 +169,29 @@ struct h2p2_dbg_fpga { | |||
169 | #define OMAP1510_INT_FPGA (IH_GPIO_BASE + 13) | 169 | #define OMAP1510_INT_FPGA (IH_GPIO_BASE + 13) |
170 | 170 | ||
171 | /* IRQ Numbers for interrupts muxed through the FPGA */ | 171 | /* IRQ Numbers for interrupts muxed through the FPGA */ |
172 | #define OMAP1510_IH_FPGA_BASE IH_BOARD_BASE | 172 | #define OMAP1510_INT_FPGA_ATN (OMAP_FPGA_IRQ_BASE + 0) |
173 | #define OMAP1510_INT_FPGA_ATN (OMAP1510_IH_FPGA_BASE + 0) | 173 | #define OMAP1510_INT_FPGA_ACK (OMAP_FPGA_IRQ_BASE + 1) |
174 | #define OMAP1510_INT_FPGA_ACK (OMAP1510_IH_FPGA_BASE + 1) | 174 | #define OMAP1510_INT_FPGA2 (OMAP_FPGA_IRQ_BASE + 2) |
175 | #define OMAP1510_INT_FPGA2 (OMAP1510_IH_FPGA_BASE + 2) | 175 | #define OMAP1510_INT_FPGA3 (OMAP_FPGA_IRQ_BASE + 3) |
176 | #define OMAP1510_INT_FPGA3 (OMAP1510_IH_FPGA_BASE + 3) | 176 | #define OMAP1510_INT_FPGA4 (OMAP_FPGA_IRQ_BASE + 4) |
177 | #define OMAP1510_INT_FPGA4 (OMAP1510_IH_FPGA_BASE + 4) | 177 | #define OMAP1510_INT_FPGA5 (OMAP_FPGA_IRQ_BASE + 5) |
178 | #define OMAP1510_INT_FPGA5 (OMAP1510_IH_FPGA_BASE + 5) | 178 | #define OMAP1510_INT_FPGA6 (OMAP_FPGA_IRQ_BASE + 6) |
179 | #define OMAP1510_INT_FPGA6 (OMAP1510_IH_FPGA_BASE + 6) | 179 | #define OMAP1510_INT_FPGA7 (OMAP_FPGA_IRQ_BASE + 7) |
180 | #define OMAP1510_INT_FPGA7 (OMAP1510_IH_FPGA_BASE + 7) | 180 | #define OMAP1510_INT_FPGA8 (OMAP_FPGA_IRQ_BASE + 8) |
181 | #define OMAP1510_INT_FPGA8 (OMAP1510_IH_FPGA_BASE + 8) | 181 | #define OMAP1510_INT_FPGA9 (OMAP_FPGA_IRQ_BASE + 9) |
182 | #define OMAP1510_INT_FPGA9 (OMAP1510_IH_FPGA_BASE + 9) | 182 | #define OMAP1510_INT_FPGA10 (OMAP_FPGA_IRQ_BASE + 10) |
183 | #define OMAP1510_INT_FPGA10 (OMAP1510_IH_FPGA_BASE + 10) | 183 | #define OMAP1510_INT_FPGA11 (OMAP_FPGA_IRQ_BASE + 11) |
184 | #define OMAP1510_INT_FPGA11 (OMAP1510_IH_FPGA_BASE + 11) | 184 | #define OMAP1510_INT_FPGA12 (OMAP_FPGA_IRQ_BASE + 12) |
185 | #define OMAP1510_INT_FPGA12 (OMAP1510_IH_FPGA_BASE + 12) | 185 | #define OMAP1510_INT_ETHER (OMAP_FPGA_IRQ_BASE + 13) |
186 | #define OMAP1510_INT_ETHER (OMAP1510_IH_FPGA_BASE + 13) | 186 | #define OMAP1510_INT_FPGAUART1 (OMAP_FPGA_IRQ_BASE + 14) |
187 | #define OMAP1510_INT_FPGAUART1 (OMAP1510_IH_FPGA_BASE + 14) | 187 | #define OMAP1510_INT_FPGAUART2 (OMAP_FPGA_IRQ_BASE + 15) |
188 | #define OMAP1510_INT_FPGAUART2 (OMAP1510_IH_FPGA_BASE + 15) | 188 | #define OMAP1510_INT_FPGA_TS (OMAP_FPGA_IRQ_BASE + 16) |
189 | #define OMAP1510_INT_FPGA_TS (OMAP1510_IH_FPGA_BASE + 16) | 189 | #define OMAP1510_INT_FPGA17 (OMAP_FPGA_IRQ_BASE + 17) |
190 | #define OMAP1510_INT_FPGA17 (OMAP1510_IH_FPGA_BASE + 17) | 190 | #define OMAP1510_INT_FPGA_CAM (OMAP_FPGA_IRQ_BASE + 18) |
191 | #define OMAP1510_INT_FPGA_CAM (OMAP1510_IH_FPGA_BASE + 18) | 191 | #define OMAP1510_INT_FPGA_RTC_A (OMAP_FPGA_IRQ_BASE + 19) |
192 | #define OMAP1510_INT_FPGA_RTC_A (OMAP1510_IH_FPGA_BASE + 19) | 192 | #define OMAP1510_INT_FPGA_RTC_B (OMAP_FPGA_IRQ_BASE + 20) |
193 | #define OMAP1510_INT_FPGA_RTC_B (OMAP1510_IH_FPGA_BASE + 20) | 193 | #define OMAP1510_INT_FPGA_CD (OMAP_FPGA_IRQ_BASE + 21) |
194 | #define OMAP1510_INT_FPGA_CD (OMAP1510_IH_FPGA_BASE + 21) | 194 | #define OMAP1510_INT_FPGA22 (OMAP_FPGA_IRQ_BASE + 22) |
195 | #define OMAP1510_INT_FPGA22 (OMAP1510_IH_FPGA_BASE + 22) | 195 | #define OMAP1510_INT_FPGA23 (OMAP_FPGA_IRQ_BASE + 23) |
196 | #define OMAP1510_INT_FPGA23 (OMAP1510_IH_FPGA_BASE + 23) | ||
197 | 196 | ||
198 | #endif | 197 | #endif |
diff --git a/include/asm-arm/arch-omap/hardware.h b/include/asm-arm/arch-omap/hardware.h index 91d85b3417b7..45fdfccbd5d4 100644 --- a/include/asm-arm/arch-omap/hardware.h +++ b/include/asm-arm/arch-omap/hardware.h | |||
@@ -284,6 +284,7 @@ | |||
284 | #include "omap1510.h" | 284 | #include "omap1510.h" |
285 | #include "omap24xx.h" | 285 | #include "omap24xx.h" |
286 | #include "omap16xx.h" | 286 | #include "omap16xx.h" |
287 | #include "omap34xx.h" | ||
287 | 288 | ||
288 | #ifndef __ASSEMBLER__ | 289 | #ifndef __ASSEMBLER__ |
289 | 290 | ||
diff --git a/include/asm-arm/arch-omap/io.h b/include/asm-arm/arch-omap/io.h index 160578e1f557..0b13557fd30b 100644 --- a/include/asm-arm/arch-omap/io.h +++ b/include/asm-arm/arch-omap/io.h | |||
@@ -60,6 +60,7 @@ | |||
60 | #define IO_SIZE 0x40000 | 60 | #define IO_SIZE 0x40000 |
61 | #define IO_VIRT (IO_PHYS - IO_OFFSET) | 61 | #define IO_VIRT (IO_PHYS - IO_OFFSET) |
62 | #define IO_ADDRESS(pa) ((pa) - IO_OFFSET) | 62 | #define IO_ADDRESS(pa) ((pa) - IO_OFFSET) |
63 | #define OMAP1_IO_ADDRESS(pa) ((pa) - IO_OFFSET) | ||
63 | #define io_p2v(pa) ((pa) - IO_OFFSET) | 64 | #define io_p2v(pa) ((pa) - IO_OFFSET) |
64 | #define io_v2p(va) ((va) + IO_OFFSET) | 65 | #define io_v2p(va) ((va) + IO_OFFSET) |
65 | 66 | ||
@@ -91,6 +92,7 @@ | |||
91 | 92 | ||
92 | #define IO_OFFSET 0x90000000 | 93 | #define IO_OFFSET 0x90000000 |
93 | #define IO_ADDRESS(pa) ((pa) + IO_OFFSET) /* Works for L3 and L4 */ | 94 | #define IO_ADDRESS(pa) ((pa) + IO_OFFSET) /* Works for L3 and L4 */ |
95 | #define OMAP2_IO_ADDRESS(pa) ((pa) + IO_OFFSET) /* Works for L3 and L4 */ | ||
94 | #define io_p2v(pa) ((pa) + IO_OFFSET) /* Works for L3 and L4 */ | 96 | #define io_p2v(pa) ((pa) + IO_OFFSET) /* Works for L3 and L4 */ |
95 | #define io_v2p(va) ((va) - IO_OFFSET) /* Works for L3 and L4 */ | 97 | #define io_v2p(va) ((va) - IO_OFFSET) /* Works for L3 and L4 */ |
96 | 98 | ||
@@ -148,6 +150,7 @@ | |||
148 | 150 | ||
149 | #define IO_OFFSET 0x90000000 | 151 | #define IO_OFFSET 0x90000000 |
150 | #define IO_ADDRESS(pa) ((pa) + IO_OFFSET)/* Works for L3 and L4 */ | 152 | #define IO_ADDRESS(pa) ((pa) + IO_OFFSET)/* Works for L3 and L4 */ |
153 | #define OMAP2_IO_ADDRESS(pa) ((pa) + IO_OFFSET)/* Works for L3 and L4 */ | ||
151 | #define io_p2v(pa) ((pa) + IO_OFFSET)/* Works for L3 and L4 */ | 154 | #define io_p2v(pa) ((pa) + IO_OFFSET)/* Works for L3 and L4 */ |
152 | #define io_v2p(va) ((va) - IO_OFFSET)/* Works for L3 and L4 */ | 155 | #define io_v2p(va) ((va) - IO_OFFSET)/* Works for L3 and L4 */ |
153 | 156 | ||
@@ -183,35 +186,12 @@ | |||
183 | #define omap_writew(v,a) (*(volatile unsigned short *)IO_ADDRESS(a) = (v)) | 186 | #define omap_writew(v,a) (*(volatile unsigned short *)IO_ADDRESS(a) = (v)) |
184 | #define omap_writel(v,a) (*(volatile unsigned int *)IO_ADDRESS(a) = (v)) | 187 | #define omap_writel(v,a) (*(volatile unsigned int *)IO_ADDRESS(a) = (v)) |
185 | 188 | ||
186 | /* 16 bit uses LDRH/STRH, base +/- offset_8 */ | ||
187 | typedef struct { volatile u16 offset[256]; } __regbase16; | ||
188 | #define __REGV16(vaddr) ((__regbase16 *)((vaddr)&~0xff)) \ | ||
189 | ->offset[((vaddr)&0xff)>>1] | ||
190 | #define __REG16(paddr) __REGV16(io_p2v(paddr)) | ||
191 | |||
192 | /* 8/32 bit uses LDR/STR, base +/- offset_12 */ | ||
193 | typedef struct { volatile u8 offset[4096]; } __regbase8; | ||
194 | #define __REGV8(vaddr) ((__regbase8 *)((vaddr)&~4095)) \ | ||
195 | ->offset[((vaddr)&4095)>>0] | ||
196 | #define __REG8(paddr) __REGV8(io_p2v(paddr)) | ||
197 | |||
198 | typedef struct { volatile u32 offset[4096]; } __regbase32; | ||
199 | #define __REGV32(vaddr) ((__regbase32 *)((vaddr)&~4095)) \ | ||
200 | ->offset[((vaddr)&4095)>>2] | ||
201 | #define __REG32(paddr) __REGV32(io_p2v(paddr)) | ||
202 | |||
203 | extern void omap1_map_common_io(void); | 189 | extern void omap1_map_common_io(void); |
204 | extern void omap1_init_common_hw(void); | 190 | extern void omap1_init_common_hw(void); |
205 | 191 | ||
206 | extern void omap2_map_common_io(void); | 192 | extern void omap2_map_common_io(void); |
207 | extern void omap2_init_common_hw(void); | 193 | extern void omap2_init_common_hw(void); |
208 | 194 | ||
209 | #else | ||
210 | |||
211 | #define __REG8(paddr) io_p2v(paddr) | ||
212 | #define __REG16(paddr) io_p2v(paddr) | ||
213 | #define __REG32(paddr) io_p2v(paddr) | ||
214 | |||
215 | #endif | 195 | #endif |
216 | 196 | ||
217 | #endif | 197 | #endif |
diff --git a/include/asm-arm/arch-omap/irqs.h b/include/asm-arm/arch-omap/irqs.h index 87973654e625..7464c694859b 100644 --- a/include/asm-arm/arch-omap/irqs.h +++ b/include/asm-arm/arch-omap/irqs.h | |||
@@ -285,7 +285,41 @@ | |||
285 | #define OMAP_MAX_GPIO_LINES 192 | 285 | #define OMAP_MAX_GPIO_LINES 192 |
286 | #define IH_GPIO_BASE (128 + IH2_BASE) | 286 | #define IH_GPIO_BASE (128 + IH2_BASE) |
287 | #define IH_MPUIO_BASE (OMAP_MAX_GPIO_LINES + IH_GPIO_BASE) | 287 | #define IH_MPUIO_BASE (OMAP_MAX_GPIO_LINES + IH_GPIO_BASE) |
288 | #define IH_BOARD_BASE (16 + IH_MPUIO_BASE) | 288 | #define OMAP_IRQ_END (IH_MPUIO_BASE + 16) |
289 | |||
290 | /* External FPGA handles interrupts on Innovator boards */ | ||
291 | #define OMAP_FPGA_IRQ_BASE (OMAP_IRQ_END) | ||
292 | #ifdef CONFIG_MACH_OMAP_INNOVATOR | ||
293 | #define OMAP_FPGA_NR_IRQS 24 | ||
294 | #else | ||
295 | #define OMAP_FPGA_NR_IRQS 0 | ||
296 | #endif | ||
297 | #define OMAP_FPGA_IRQ_END (OMAP_FPGA_IRQ_BASE + OMAP_FPGA_NR_IRQS) | ||
298 | |||
299 | /* External TWL4030 can handle interrupts on 2430 and 34xx boards */ | ||
300 | #define TWL4030_IRQ_BASE (OMAP_FPGA_IRQ_END) | ||
301 | #ifdef CONFIG_TWL4030_CORE | ||
302 | #define TWL4030_BASE_NR_IRQS 8 | ||
303 | #define TWL4030_PWR_NR_IRQS 8 | ||
304 | #else | ||
305 | #define TWL4030_BASE_NR_IRQS 0 | ||
306 | #define TWL4030_PWR_NR_IRQS 0 | ||
307 | #endif | ||
308 | #define TWL4030_IRQ_END (TWL4030_IRQ_BASE + TWL4030_BASE_NR_IRQS) | ||
309 | #define TWL4030_PWR_IRQ_BASE TWL4030_IRQ_END | ||
310 | #define TWL4030_PWR_IRQ_END (TWL4030_PWR_IRQ_BASE + TWL4030_PWR_NR_IRQS) | ||
311 | |||
312 | /* External TWL4030 gpio interrupts are optional */ | ||
313 | #define TWL4030_GPIO_IRQ_BASE TWL4030_PWR_IRQ_END | ||
314 | #ifdef CONFIG_TWL4030_GPIO | ||
315 | #define TWL4030_GPIO_NR_IRQS 18 | ||
316 | #else | ||
317 | #define TWL4030_GPIO_NR_IRQS 0 | ||
318 | #endif | ||
319 | #define TWL4030_GPIO_IRQ_END (TWL4030_GPIO_IRQ_BASE + TWL4030_GPIO_NR_IRQS) | ||
320 | |||
321 | /* Total number of interrupts depends on the enabled blocks above */ | ||
322 | #define NR_IRQS TWL4030_GPIO_IRQ_END | ||
289 | 323 | ||
290 | #define OMAP_IRQ_BIT(irq) (1 << ((irq) % 32)) | 324 | #define OMAP_IRQ_BIT(irq) (1 << ((irq) % 32)) |
291 | 325 | ||
@@ -293,14 +327,6 @@ | |||
293 | extern void omap_init_irq(void); | 327 | extern void omap_init_irq(void); |
294 | #endif | 328 | #endif |
295 | 329 | ||
296 | /* | ||
297 | * The definition of NR_IRQS is in board-specific header file, which is | ||
298 | * included via hardware.h | ||
299 | */ | ||
300 | #include <asm/hardware.h> | 330 | #include <asm/hardware.h> |
301 | 331 | ||
302 | #ifndef NR_IRQS | ||
303 | #define NR_IRQS IH_BOARD_BASE | ||
304 | #endif | ||
305 | |||
306 | #endif | 332 | #endif |
diff --git a/include/asm-arm/arch-omap/mcbsp.h b/include/asm-arm/arch-omap/mcbsp.h index c7a0cc1c4e93..26c78f67dc8e 100644 --- a/include/asm-arm/arch-omap/mcbsp.h +++ b/include/asm-arm/arch-omap/mcbsp.h | |||
@@ -24,7 +24,11 @@ | |||
24 | #ifndef __ASM_ARCH_OMAP_MCBSP_H | 24 | #ifndef __ASM_ARCH_OMAP_MCBSP_H |
25 | #define __ASM_ARCH_OMAP_MCBSP_H | 25 | #define __ASM_ARCH_OMAP_MCBSP_H |
26 | 26 | ||
27 | #include <linux/completion.h> | ||
28 | #include <linux/spinlock.h> | ||
29 | |||
27 | #include <asm/hardware.h> | 30 | #include <asm/hardware.h> |
31 | #include <asm/arch/clock.h> | ||
28 | 32 | ||
29 | #define OMAP730_MCBSP1_BASE 0xfffb1000 | 33 | #define OMAP730_MCBSP1_BASE 0xfffb1000 |
30 | #define OMAP730_MCBSP2_BASE 0xfffb1800 | 34 | #define OMAP730_MCBSP2_BASE 0xfffb1800 |
@@ -40,6 +44,9 @@ | |||
40 | #define OMAP24XX_MCBSP1_BASE 0x48074000 | 44 | #define OMAP24XX_MCBSP1_BASE 0x48074000 |
41 | #define OMAP24XX_MCBSP2_BASE 0x48076000 | 45 | #define OMAP24XX_MCBSP2_BASE 0x48076000 |
42 | 46 | ||
47 | #define OMAP34XX_MCBSP1_BASE 0x48074000 | ||
48 | #define OMAP34XX_MCBSP2_BASE 0x49022000 | ||
49 | |||
43 | #if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP730) | 50 | #if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP730) |
44 | 51 | ||
45 | #define OMAP_MCBSP_REG_DRR2 0x00 | 52 | #define OMAP_MCBSP_REG_DRR2 0x00 |
@@ -74,7 +81,8 @@ | |||
74 | #define OMAP_MCBSP_REG_XCERG 0x3A | 81 | #define OMAP_MCBSP_REG_XCERG 0x3A |
75 | #define OMAP_MCBSP_REG_XCERH 0x3C | 82 | #define OMAP_MCBSP_REG_XCERH 0x3C |
76 | 83 | ||
77 | #define OMAP_MAX_MCBSP_COUNT 3 | 84 | #define OMAP_MAX_MCBSP_COUNT 3 |
85 | #define MAX_MCBSP_CLOCKS 3 | ||
78 | 86 | ||
79 | #define AUDIO_MCBSP_DATAWRITE (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DXR1) | 87 | #define AUDIO_MCBSP_DATAWRITE (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DXR1) |
80 | #define AUDIO_MCBSP_DATAREAD (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DRR1) | 88 | #define AUDIO_MCBSP_DATAREAD (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DRR1) |
@@ -117,7 +125,8 @@ | |||
117 | #define OMAP_MCBSP_REG_XCERG 0x74 | 125 | #define OMAP_MCBSP_REG_XCERG 0x74 |
118 | #define OMAP_MCBSP_REG_XCERH 0x78 | 126 | #define OMAP_MCBSP_REG_XCERH 0x78 |
119 | 127 | ||
120 | #define OMAP_MAX_MCBSP_COUNT 2 | 128 | #define OMAP_MAX_MCBSP_COUNT 2 |
129 | #define MAX_MCBSP_CLOCKS 2 | ||
121 | 130 | ||
122 | #define AUDIO_MCBSP_DATAWRITE (OMAP24XX_MCBSP2_BASE + OMAP_MCBSP_REG_DXR1) | 131 | #define AUDIO_MCBSP_DATAWRITE (OMAP24XX_MCBSP2_BASE + OMAP_MCBSP_REG_DXR1) |
123 | #define AUDIO_MCBSP_DATAREAD (OMAP24XX_MCBSP2_BASE + OMAP_MCBSP_REG_DRR1) | 132 | #define AUDIO_MCBSP_DATAREAD (OMAP24XX_MCBSP2_BASE + OMAP_MCBSP_REG_DRR1) |
@@ -298,6 +307,55 @@ struct omap_mcbsp_spi_cfg { | |||
298 | omap_mcbsp_word_length word_length; | 307 | omap_mcbsp_word_length word_length; |
299 | }; | 308 | }; |
300 | 309 | ||
310 | /* Platform specific configuration */ | ||
311 | struct omap_mcbsp_ops { | ||
312 | void (*request)(unsigned int); | ||
313 | void (*free)(unsigned int); | ||
314 | int (*check)(unsigned int); | ||
315 | }; | ||
316 | |||
317 | struct omap_mcbsp_platform_data { | ||
318 | u32 virt_base; | ||
319 | u8 dma_rx_sync, dma_tx_sync; | ||
320 | u16 rx_irq, tx_irq; | ||
321 | struct omap_mcbsp_ops *ops; | ||
322 | char const *clk_name; | ||
323 | }; | ||
324 | |||
325 | struct omap_mcbsp { | ||
326 | struct device *dev; | ||
327 | u32 io_base; | ||
328 | u8 id; | ||
329 | u8 free; | ||
330 | omap_mcbsp_word_length rx_word_length; | ||
331 | omap_mcbsp_word_length tx_word_length; | ||
332 | |||
333 | omap_mcbsp_io_type_t io_type; /* IRQ or poll */ | ||
334 | /* IRQ based TX/RX */ | ||
335 | int rx_irq; | ||
336 | int tx_irq; | ||
337 | |||
338 | /* DMA stuff */ | ||
339 | u8 dma_rx_sync; | ||
340 | short dma_rx_lch; | ||
341 | u8 dma_tx_sync; | ||
342 | short dma_tx_lch; | ||
343 | |||
344 | /* Completion queues */ | ||
345 | struct completion tx_irq_completion; | ||
346 | struct completion rx_irq_completion; | ||
347 | struct completion tx_dma_completion; | ||
348 | struct completion rx_dma_completion; | ||
349 | |||
350 | /* Protect the field .free, while checking if the mcbsp is in use */ | ||
351 | spinlock_t lock; | ||
352 | struct omap_mcbsp_platform_data *pdata; | ||
353 | struct clk *clk; | ||
354 | }; | ||
355 | |||
356 | int omap_mcbsp_init(void); | ||
357 | void omap_mcbsp_register_board_cfg(struct omap_mcbsp_platform_data *config, | ||
358 | int size); | ||
301 | void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config); | 359 | void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config); |
302 | int omap_mcbsp_request(unsigned int id); | 360 | int omap_mcbsp_request(unsigned int id); |
303 | void omap_mcbsp_free(unsigned int id); | 361 | void omap_mcbsp_free(unsigned int id); |
diff --git a/include/asm-arm/arch-omap/omap34xx.h b/include/asm-arm/arch-omap/omap34xx.h new file mode 100644 index 000000000000..aa30c6d10abd --- /dev/null +++ b/include/asm-arm/arch-omap/omap34xx.h | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-omap/omap34xx.h | ||
3 | * | ||
4 | * This file contains the processor specific definitions of the TI OMAP34XX. | ||
5 | * | ||
6 | * Copyright (C) 2007 Texas Instruments. | ||
7 | * Copyright (C) 2007 Nokia Corporation. | ||
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 as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | |||
24 | #ifndef __ASM_ARCH_OMAP34XX_H | ||
25 | #define __ASM_ARCH_OMAP34XX_H | ||
26 | |||
27 | /* | ||
28 | * Please place only base defines here and put the rest in device | ||
29 | * specific headers. | ||
30 | */ | ||
31 | |||
32 | #define L4_34XX_BASE 0x48000000 | ||
33 | #define L4_WK_34XX_BASE 0x48300000 | ||
34 | #define L4_WK_OMAP_BASE L4_WK_34XX_BASE | ||
35 | #define L4_PER_34XX_BASE 0x49000000 | ||
36 | #define L4_PER_OMAP_BASE L4_PER_34XX_BASE | ||
37 | #define L4_EMU_34XX_BASE 0x54000000 | ||
38 | #define L4_EMU_BASE L4_EMU_34XX_BASE | ||
39 | #define L3_34XX_BASE 0x68000000 | ||
40 | #define L3_OMAP_BASE L3_34XX_BASE | ||
41 | |||
42 | #define OMAP3430_32KSYNCT_BASE 0x48320000 | ||
43 | #define OMAP3430_CM_BASE 0x48004800 | ||
44 | #define OMAP3430_PRM_BASE 0x48306800 | ||
45 | #define OMAP343X_SMS_BASE 0x6C000000 | ||
46 | #define OMAP343X_SDRC_BASE 0x6D000000 | ||
47 | #define OMAP34XX_GPMC_BASE 0x6E000000 | ||
48 | #define OMAP343X_SCM_BASE 0x48002000 | ||
49 | #define OMAP343X_CTRL_BASE OMAP343X_SCM_BASE | ||
50 | |||
51 | #define OMAP34XX_IC_BASE 0x48200000 | ||
52 | #define OMAP34XX_IVA_INTC_BASE 0x40000000 | ||
53 | #define OMAP34XX_HSUSB_OTG_BASE (L4_34XX_BASE + 0xAB000) | ||
54 | #define OMAP34XX_HSUSB_HOST_BASE (L4_34XX_BASE + 0x64000) | ||
55 | #define OMAP34XX_USBTLL_BASE (L4_34XX_BASE + 0x62000) | ||
56 | |||
57 | |||
58 | #if defined(CONFIG_ARCH_OMAP3430) | ||
59 | |||
60 | #define OMAP2_32KSYNCT_BASE OMAP3430_32KSYNCT_BASE | ||
61 | #define OMAP2_CM_BASE OMAP3430_CM_BASE | ||
62 | #define OMAP2_PRM_BASE OMAP3430_PRM_BASE | ||
63 | #define OMAP2_VA_IC_BASE IO_ADDRESS(OMAP34XX_IC_BASE) | ||
64 | |||
65 | #endif | ||
66 | |||
67 | #define OMAP34XX_DSP_BASE 0x58000000 | ||
68 | #define OMAP34XX_DSP_MEM_BASE (OMAP34XX_DSP_BASE + 0x0) | ||
69 | #define OMAP34XX_DSP_IPI_BASE (OMAP34XX_DSP_BASE + 0x1000000) | ||
70 | #define OMAP34XX_DSP_MMU_BASE (OMAP34XX_DSP_BASE + 0x2000000) | ||
71 | #endif /* __ASM_ARCH_OMAP34XX_H */ | ||
72 | |||
diff --git a/include/asm-arm/arch-omap/sram.h b/include/asm-arm/arch-omap/sram.h index bb9bb3fd532f..be59f4a9828b 100644 --- a/include/asm-arm/arch-omap/sram.h +++ b/include/asm-arm/arch-omap/sram.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #ifndef __ARCH_ARM_OMAP_SRAM_H | 11 | #ifndef __ARCH_ARM_OMAP_SRAM_H |
12 | #define __ARCH_ARM_OMAP_SRAM_H | 12 | #define __ARCH_ARM_OMAP_SRAM_H |
13 | 13 | ||
14 | extern int __init omap_sram_init(void); | ||
14 | extern void * omap_sram_push(void * start, unsigned long size); | 15 | extern void * omap_sram_push(void * start, unsigned long size); |
15 | extern void omap_sram_reprogram_clock(u32 dpllctl, u32 ckctl); | 16 | extern void omap_sram_reprogram_clock(u32 dpllctl, u32 ckctl); |
16 | 17 | ||
@@ -21,17 +22,35 @@ extern void omap2_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, | |||
21 | extern u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass); | 22 | extern u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass); |
22 | 23 | ||
23 | /* Do not use these */ | 24 | /* Do not use these */ |
24 | extern void sram_reprogram_clock(u32 ckctl, u32 dpllctl); | 25 | extern void omap1_sram_reprogram_clock(u32 ckctl, u32 dpllctl); |
25 | extern unsigned long sram_reprogram_clock_sz; | 26 | extern unsigned long omap1_sram_reprogram_clock_sz; |
26 | 27 | ||
27 | extern void sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl, | 28 | extern void omap24xx_sram_reprogram_clock(u32 ckctl, u32 dpllctl); |
28 | u32 base_cs, u32 force_unlock); | 29 | extern unsigned long omap24xx_sram_reprogram_clock_sz; |
29 | extern unsigned long sram_ddr_init_sz; | ||
30 | 30 | ||
31 | extern u32 sram_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass); | 31 | extern void omap242x_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl, |
32 | extern unsigned long sram_set_prcm_sz; | 32 | u32 base_cs, u32 force_unlock); |
33 | extern unsigned long omap242x_sram_ddr_init_sz; | ||
33 | 34 | ||
34 | extern void sram_reprogram_sdrc(u32 perf_level, u32 dll_val, u32 mem_type); | 35 | extern u32 omap242x_sram_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, |
35 | extern unsigned long sram_reprogram_sdrc_sz; | 36 | int bypass); |
37 | extern unsigned long omap242x_sram_set_prcm_sz; | ||
38 | |||
39 | extern void omap242x_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, | ||
40 | u32 mem_type); | ||
41 | extern unsigned long omap242x_sram_reprogram_sdrc_sz; | ||
42 | |||
43 | |||
44 | extern void omap243x_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl, | ||
45 | u32 base_cs, u32 force_unlock); | ||
46 | extern unsigned long omap243x_sram_ddr_init_sz; | ||
47 | |||
48 | extern u32 omap243x_sram_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, | ||
49 | int bypass); | ||
50 | extern unsigned long omap243x_sram_set_prcm_sz; | ||
51 | |||
52 | extern void omap243x_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, | ||
53 | u32 mem_type); | ||
54 | extern unsigned long omap243x_sram_reprogram_sdrc_sz; | ||
36 | 55 | ||
37 | #endif | 56 | #endif |
diff --git a/include/asm-arm/arch-omap/tc.h b/include/asm-arm/arch-omap/tc.h index 8ded218cbea5..65a9c82d3bf7 100644 --- a/include/asm-arm/arch-omap/tc.h +++ b/include/asm-arm/arch-omap/tc.h | |||
@@ -75,16 +75,14 @@ | |||
75 | #ifndef __ASSEMBLER__ | 75 | #ifndef __ASSEMBLER__ |
76 | 76 | ||
77 | /* EMIF Slow Interface Configuration Register */ | 77 | /* EMIF Slow Interface Configuration Register */ |
78 | #define OMAP_EMIFS_CONFIG_REG __REG32(EMIFS_CONFIG) | ||
79 | |||
80 | #define OMAP_EMIFS_CONFIG_FR (1 << 4) | 78 | #define OMAP_EMIFS_CONFIG_FR (1 << 4) |
81 | #define OMAP_EMIFS_CONFIG_PDE (1 << 3) | 79 | #define OMAP_EMIFS_CONFIG_PDE (1 << 3) |
82 | #define OMAP_EMIFS_CONFIG_PWD_EN (1 << 2) | 80 | #define OMAP_EMIFS_CONFIG_PWD_EN (1 << 2) |
83 | #define OMAP_EMIFS_CONFIG_BM (1 << 1) | 81 | #define OMAP_EMIFS_CONFIG_BM (1 << 1) |
84 | #define OMAP_EMIFS_CONFIG_WP (1 << 0) | 82 | #define OMAP_EMIFS_CONFIG_WP (1 << 0) |
85 | 83 | ||
86 | #define EMIFS_CCS(n) __REG32(EMIFS_CS0_CONFIG + (4 * (n))) | 84 | #define EMIFS_CCS(n) (EMIFS_CS0_CONFIG + (4 * (n))) |
87 | #define EMIFS_ACS(n) __REG32(EMIFS_ACS0 + (4 * (n))) | 85 | #define EMIFS_ACS(n) (EMIFS_ACS0 + (4 * (n))) |
88 | 86 | ||
89 | /* Almost all documentation for chip and board memory maps assumes | 87 | /* Almost all documentation for chip and board memory maps assumes |
90 | * BM is clear. Most devel boards have a switch to control booting | 88 | * BM is clear. Most devel boards have a switch to control booting |
@@ -93,13 +91,13 @@ | |||
93 | */ | 91 | */ |
94 | static inline u32 omap_cs0_phys(void) | 92 | static inline u32 omap_cs0_phys(void) |
95 | { | 93 | { |
96 | return (OMAP_EMIFS_CONFIG_REG & OMAP_EMIFS_CONFIG_BM) | 94 | return (omap_readl(EMIFS_CONFIG) & OMAP_EMIFS_CONFIG_BM) |
97 | ? OMAP_CS3_PHYS : 0; | 95 | ? OMAP_CS3_PHYS : 0; |
98 | } | 96 | } |
99 | 97 | ||
100 | static inline u32 omap_cs3_phys(void) | 98 | static inline u32 omap_cs3_phys(void) |
101 | { | 99 | { |
102 | return (OMAP_EMIFS_CONFIG_REG & OMAP_EMIFS_CONFIG_BM) | 100 | return (omap_readl(EMIFS_CONFIG) & OMAP_EMIFS_CONFIG_BM) |
103 | ? 0 : OMAP_CS3_PHYS; | 101 | ? 0 : OMAP_CS3_PHYS; |
104 | } | 102 | } |
105 | 103 | ||
diff --git a/include/asm-arm/arch-omap/usb.h b/include/asm-arm/arch-omap/usb.h index 2147d18aaeae..ddf1861e6df9 100644 --- a/include/asm-arm/arch-omap/usb.h +++ b/include/asm-arm/arch-omap/usb.h | |||
@@ -34,11 +34,8 @@ | |||
34 | /* | 34 | /* |
35 | * OTG and transceiver registers, for OMAPs starting with ARM926 | 35 | * OTG and transceiver registers, for OMAPs starting with ARM926 |
36 | */ | 36 | */ |
37 | #define OTG_REG32(offset) __REG32(OTG_BASE + (offset)) | 37 | #define OTG_REV (OTG_BASE + 0x00) |
38 | #define OTG_REG16(offset) __REG16(OTG_BASE + (offset)) | 38 | #define OTG_SYSCON_1 (OTG_BASE + 0x04) |
39 | |||
40 | #define OTG_REV_REG OTG_REG32(0x00) | ||
41 | #define OTG_SYSCON_1_REG OTG_REG32(0x04) | ||
42 | # define USB2_TRX_MODE(w) (((w)>>24)&0x07) | 39 | # define USB2_TRX_MODE(w) (((w)>>24)&0x07) |
43 | # define USB1_TRX_MODE(w) (((w)>>20)&0x07) | 40 | # define USB1_TRX_MODE(w) (((w)>>20)&0x07) |
44 | # define USB0_TRX_MODE(w) (((w)>>16)&0x07) | 41 | # define USB0_TRX_MODE(w) (((w)>>16)&0x07) |
@@ -47,7 +44,7 @@ | |||
47 | # define DEV_IDLE_EN (1 << 13) | 44 | # define DEV_IDLE_EN (1 << 13) |
48 | # define OTG_RESET_DONE (1 << 2) | 45 | # define OTG_RESET_DONE (1 << 2) |
49 | # define OTG_SOFT_RESET (1 << 1) | 46 | # define OTG_SOFT_RESET (1 << 1) |
50 | #define OTG_SYSCON_2_REG OTG_REG32(0x08) | 47 | #define OTG_SYSCON_2 (OTG_BASE + 0x08) |
51 | # define OTG_EN (1 << 31) | 48 | # define OTG_EN (1 << 31) |
52 | # define USBX_SYNCHRO (1 << 30) | 49 | # define USBX_SYNCHRO (1 << 30) |
53 | # define OTG_MST16 (1 << 29) | 50 | # define OTG_MST16 (1 << 29) |
@@ -65,7 +62,7 @@ | |||
65 | # define HMC_TLLSPEED (1 << 7) | 62 | # define HMC_TLLSPEED (1 << 7) |
66 | # define HMC_TLLATTACH (1 << 6) | 63 | # define HMC_TLLATTACH (1 << 6) |
67 | # define OTG_HMC(w) (((w)>>0)&0x3f) | 64 | # define OTG_HMC(w) (((w)>>0)&0x3f) |
68 | #define OTG_CTRL_REG OTG_REG32(0x0c) | 65 | #define OTG_CTRL (OTG_BASE + 0x0c) |
69 | # define OTG_USB2_EN (1 << 29) | 66 | # define OTG_USB2_EN (1 << 29) |
70 | # define OTG_USB2_DP (1 << 28) | 67 | # define OTG_USB2_DP (1 << 28) |
71 | # define OTG_USB2_DM (1 << 27) | 68 | # define OTG_USB2_DM (1 << 27) |
@@ -92,7 +89,7 @@ | |||
92 | # define OTG_PD_VBUS (1 << 2) | 89 | # define OTG_PD_VBUS (1 << 2) |
93 | # define OTG_PU_VBUS (1 << 1) | 90 | # define OTG_PU_VBUS (1 << 1) |
94 | # define OTG_PU_ID (1 << 0) | 91 | # define OTG_PU_ID (1 << 0) |
95 | #define OTG_IRQ_EN_REG OTG_REG16(0x10) | 92 | #define OTG_IRQ_EN (OTG_BASE + 0x10) /* 16-bit */ |
96 | # define DRIVER_SWITCH (1 << 15) | 93 | # define DRIVER_SWITCH (1 << 15) |
97 | # define A_VBUS_ERR (1 << 13) | 94 | # define A_VBUS_ERR (1 << 13) |
98 | # define A_REQ_TMROUT (1 << 12) | 95 | # define A_REQ_TMROUT (1 << 12) |
@@ -102,9 +99,9 @@ | |||
102 | # define B_SRP_DONE (1 << 8) | 99 | # define B_SRP_DONE (1 << 8) |
103 | # define B_SRP_STARTED (1 << 7) | 100 | # define B_SRP_STARTED (1 << 7) |
104 | # define OPRT_CHG (1 << 0) | 101 | # define OPRT_CHG (1 << 0) |
105 | #define OTG_IRQ_SRC_REG OTG_REG16(0x14) | 102 | #define OTG_IRQ_SRC (OTG_BASE + 0x14) /* 16-bit */ |
106 | // same bits as in IRQ_EN | 103 | // same bits as in IRQ_EN |
107 | #define OTG_OUTCTRL_REG OTG_REG16(0x18) | 104 | #define OTG_OUTCTRL (OTG_BASE + 0x18) /* 16-bit */ |
108 | # define OTGVPD (1 << 14) | 105 | # define OTGVPD (1 << 14) |
109 | # define OTGVPU (1 << 13) | 106 | # define OTGVPU (1 << 13) |
110 | # define OTGPUID (1 << 12) | 107 | # define OTGPUID (1 << 12) |
@@ -117,13 +114,13 @@ | |||
117 | # define USB0VDR (1 << 2) | 114 | # define USB0VDR (1 << 2) |
118 | # define USB0PDEN (1 << 1) | 115 | # define USB0PDEN (1 << 1) |
119 | # define USB0PUEN (1 << 0) | 116 | # define USB0PUEN (1 << 0) |
120 | #define OTG_TEST_REG OTG_REG16(0x20) | 117 | #define OTG_TEST (OTG_BASE + 0x20) /* 16-bit */ |
121 | #define OTG_VENDOR_CODE_REG OTG_REG32(0xfc) | 118 | #define OTG_VENDOR_CODE (OTG_BASE + 0xfc) /* 16-bit */ |
122 | 119 | ||
123 | /*-------------------------------------------------------------------------*/ | 120 | /*-------------------------------------------------------------------------*/ |
124 | 121 | ||
125 | /* OMAP1 */ | 122 | /* OMAP1 */ |
126 | #define USB_TRANSCEIVER_CTRL_REG __REG32(0xfffe1000 + 0x0064) | 123 | #define USB_TRANSCEIVER_CTRL (0xfffe1000 + 0x0064) |
127 | # define CONF_USB2_UNI_R (1 << 8) | 124 | # define CONF_USB2_UNI_R (1 << 8) |
128 | # define CONF_USB1_UNI_R (1 << 7) | 125 | # define CONF_USB1_UNI_R (1 << 7) |
129 | # define CONF_USB_PORT0_R(x) (((x)>>4)&0x7) | 126 | # define CONF_USB_PORT0_R(x) (((x)>>4)&0x7) |
diff --git a/include/asm-arm/arch-orion5x/io.h b/include/asm-arm/arch-orion5x/io.h index 50f8c8802206..59f1bc96a23b 100644 --- a/include/asm-arm/arch-orion5x/io.h +++ b/include/asm-arm/arch-orion5x/io.h | |||
@@ -14,7 +14,6 @@ | |||
14 | #include "orion5x.h" | 14 | #include "orion5x.h" |
15 | 15 | ||
16 | #define IO_SPACE_LIMIT 0xffffffff | 16 | #define IO_SPACE_LIMIT 0xffffffff |
17 | #define IO_SPACE_REMAP ORION5X_PCI_SYS_IO_BASE | ||
18 | 17 | ||
19 | static inline void __iomem * | 18 | static inline void __iomem * |
20 | __arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype) | 19 | __arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype) |
@@ -53,15 +52,12 @@ static inline void __iomem *__io(unsigned long addr) | |||
53 | /***************************************************************************** | 52 | /***************************************************************************** |
54 | * Helpers to access Orion registers | 53 | * Helpers to access Orion registers |
55 | ****************************************************************************/ | 54 | ****************************************************************************/ |
56 | #define orion5x_read(r) __raw_readl(r) | ||
57 | #define orion5x_write(r, val) __raw_writel(val, r) | ||
58 | |||
59 | /* | 55 | /* |
60 | * These are not preempt-safe. Locks, if needed, must be taken | 56 | * These are not preempt-safe. Locks, if needed, must be taken |
61 | * care of by the caller. | 57 | * care of by the caller. |
62 | */ | 58 | */ |
63 | #define orion5x_setbits(r, mask) orion5x_write((r), orion5x_read(r) | (mask)) | 59 | #define orion5x_setbits(r, mask) writel(readl(r) | (mask), (r)) |
64 | #define orion5x_clrbits(r, mask) orion5x_write((r), orion5x_read(r) & ~(mask)) | 60 | #define orion5x_clrbits(r, mask) writel(readl(r) & ~(mask), (r)) |
65 | 61 | ||
66 | 62 | ||
67 | #endif | 63 | #endif |
diff --git a/include/asm-arm/arch-orion5x/orion5x.h b/include/asm-arm/arch-orion5x/orion5x.h index 206ddd71e193..10257f5c5e9e 100644 --- a/include/asm-arm/arch-orion5x/orion5x.h +++ b/include/asm-arm/arch-orion5x/orion5x.h | |||
@@ -2,7 +2,7 @@ | |||
2 | * include/asm-arm/arch-orion5x/orion5x.h | 2 | * include/asm-arm/arch-orion5x/orion5x.h |
3 | * | 3 | * |
4 | * Generic definitions of Orion SoC flavors: | 4 | * Generic definitions of Orion SoC flavors: |
5 | * Orion-1, Orion-NAS, Orion-VoIP, and Orion-2. | 5 | * Orion-1, Orion-VoIP, Orion-NAS, and Orion-2. |
6 | * | 6 | * |
7 | * Maintainer: Tzachi Perelstein <tzachi@marvell.com> | 7 | * Maintainer: Tzachi Perelstein <tzachi@marvell.com> |
8 | * | 8 | * |
@@ -63,9 +63,11 @@ | |||
63 | /******************************************************************************* | 63 | /******************************************************************************* |
64 | * Supported Devices & Revisions | 64 | * Supported Devices & Revisions |
65 | ******************************************************************************/ | 65 | ******************************************************************************/ |
66 | /* Orion-1 (88F5181) */ | 66 | /* Orion-1 (88F5181) and Orion-VoIP (88F5181L) */ |
67 | #define MV88F5181_DEV_ID 0x5181 | 67 | #define MV88F5181_DEV_ID 0x5181 |
68 | #define MV88F5181_REV_B1 3 | 68 | #define MV88F5181_REV_B1 3 |
69 | #define MV88F5181L_REV_A0 8 | ||
70 | #define MV88F5181L_REV_A1 9 | ||
69 | /* Orion-NAS (88F5182) */ | 71 | /* Orion-NAS (88F5182) */ |
70 | #define MV88F5182_DEV_ID 0x5182 | 72 | #define MV88F5182_DEV_ID 0x5182 |
71 | #define MV88F5182_REV_A2 2 | 73 | #define MV88F5182_REV_A2 2 |
@@ -152,6 +154,7 @@ | |||
152 | #define BRIDGE_MASK ORION5X_BRIDGE_REG(0x114) | 154 | #define BRIDGE_MASK ORION5X_BRIDGE_REG(0x114) |
153 | #define BRIDGE_INT_TIMER0 0x0002 | 155 | #define BRIDGE_INT_TIMER0 0x0002 |
154 | #define BRIDGE_INT_TIMER1 0x0004 | 156 | #define BRIDGE_INT_TIMER1 0x0004 |
157 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | ||
155 | #define MAIN_IRQ_CAUSE ORION5X_BRIDGE_REG(0x200) | 158 | #define MAIN_IRQ_CAUSE ORION5X_BRIDGE_REG(0x200) |
156 | #define MAIN_IRQ_MASK ORION5X_BRIDGE_REG(0x204) | 159 | #define MAIN_IRQ_MASK ORION5X_BRIDGE_REG(0x204) |
157 | 160 | ||
diff --git a/include/asm-arm/arch-orion5x/uncompress.h b/include/asm-arm/arch-orion5x/uncompress.h index 5c13d4fafb4e..7548cedf2d76 100644 --- a/include/asm-arm/arch-orion5x/uncompress.h +++ b/include/asm-arm/arch-orion5x/uncompress.h | |||
@@ -8,23 +8,38 @@ | |||
8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/serial_reg.h> | ||
11 | #include <asm/arch/orion5x.h> | 12 | #include <asm/arch/orion5x.h> |
12 | 13 | ||
13 | #define MV_UART_THR ((volatile unsigned char *)(UART0_PHYS_BASE + 0x0)) | 14 | #define SERIAL_BASE ((unsigned char *)UART0_PHYS_BASE) |
14 | #define MV_UART_LSR ((volatile unsigned char *)(UART0_PHYS_BASE + 0x14)) | ||
15 | |||
16 | #define LSR_THRE 0x20 | ||
17 | 15 | ||
18 | static void putc(const char c) | 16 | static void putc(const char c) |
19 | { | 17 | { |
20 | int j = 0x1000; | 18 | unsigned char *base = SERIAL_BASE; |
21 | while (--j && !(*MV_UART_LSR & LSR_THRE)) | 19 | int i; |
20 | |||
21 | for (i = 0; i < 0x1000; i++) { | ||
22 | if (base[UART_LSR << 2] & UART_LSR_THRE) | ||
23 | break; | ||
22 | barrier(); | 24 | barrier(); |
23 | *MV_UART_THR = c; | 25 | } |
26 | |||
27 | base[UART_TX << 2] = c; | ||
24 | } | 28 | } |
25 | 29 | ||
26 | static void flush(void) | 30 | static void flush(void) |
27 | { | 31 | { |
32 | unsigned char *base = SERIAL_BASE; | ||
33 | unsigned char mask; | ||
34 | int i; | ||
35 | |||
36 | mask = UART_LSR_TEMT | UART_LSR_THRE; | ||
37 | |||
38 | for (i = 0; i < 0x1000; i++) { | ||
39 | if ((base[UART_LSR << 2] & mask) == mask) | ||
40 | break; | ||
41 | barrier(); | ||
42 | } | ||
28 | } | 43 | } |
29 | 44 | ||
30 | /* | 45 | /* |
diff --git a/include/asm-arm/arch-pxa/audio.h b/include/asm-arm/arch-pxa/audio.h index 52bbe3bc25e1..f82f96dd1053 100644 --- a/include/asm-arm/arch-pxa/audio.h +++ b/include/asm-arm/arch-pxa/audio.h | |||
@@ -12,4 +12,6 @@ typedef struct { | |||
12 | void *priv; | 12 | void *priv; |
13 | } pxa2xx_audio_ops_t; | 13 | } pxa2xx_audio_ops_t; |
14 | 14 | ||
15 | extern void pxa_set_ac97_info(pxa2xx_audio_ops_t *ops); | ||
16 | |||
15 | #endif | 17 | #endif |
diff --git a/include/asm-arm/arch-pxa/hardware.h b/include/asm-arm/arch-pxa/hardware.h index e25558faa5a4..d9af6dabc899 100644 --- a/include/asm-arm/arch-pxa/hardware.h +++ b/include/asm-arm/arch-pxa/hardware.h | |||
@@ -192,15 +192,6 @@ extern int pxa_gpio_get_value(unsigned gpio); | |||
192 | extern void pxa_gpio_set_value(unsigned gpio, int value); | 192 | extern void pxa_gpio_set_value(unsigned gpio, int value); |
193 | 193 | ||
194 | /* | 194 | /* |
195 | * Routine to enable or disable CKEN | ||
196 | */ | ||
197 | static inline void __deprecated pxa_set_cken(int clock, int enable) | ||
198 | { | ||
199 | extern void __pxa_set_cken(int clock, int enable); | ||
200 | __pxa_set_cken(clock, enable); | ||
201 | } | ||
202 | |||
203 | /* | ||
204 | * return current memory and LCD clock frequency in units of 10kHz | 195 | * return current memory and LCD clock frequency in units of 10kHz |
205 | */ | 196 | */ |
206 | extern unsigned int get_memclk_frequency_10khz(void); | 197 | extern unsigned int get_memclk_frequency_10khz(void); |
diff --git a/include/asm-arm/arch-pxa/irda.h b/include/asm-arm/arch-pxa/irda.h index 99f4f423a8e1..0a50c3c763df 100644 --- a/include/asm-arm/arch-pxa/irda.h +++ b/include/asm-arm/arch-pxa/irda.h | |||
@@ -16,4 +16,8 @@ struct pxaficp_platform_data { | |||
16 | 16 | ||
17 | extern void pxa_set_ficp_info(struct pxaficp_platform_data *info); | 17 | extern void pxa_set_ficp_info(struct pxaficp_platform_data *info); |
18 | 18 | ||
19 | #if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x) | ||
20 | void pxa2xx_transceiver_mode(struct device *dev, int mode); | ||
21 | #endif | ||
22 | |||
19 | #endif | 23 | #endif |
diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h index 4b2ea1e95c57..dce9308626b7 100644 --- a/include/asm-arm/arch-pxa/pxa-regs.h +++ b/include/asm-arm/arch-pxa/pxa-regs.h | |||
@@ -600,418 +600,6 @@ | |||
600 | 600 | ||
601 | 601 | ||
602 | /* | 602 | /* |
603 | * USB Device Controller | ||
604 | * PXA25x and PXA27x USB device controller registers are different. | ||
605 | */ | ||
606 | #if defined(CONFIG_PXA25x) | ||
607 | |||
608 | #define UDC_RES1 __REG(0x40600004) /* UDC Undocumented - Reserved1 */ | ||
609 | #define UDC_RES2 __REG(0x40600008) /* UDC Undocumented - Reserved2 */ | ||
610 | #define UDC_RES3 __REG(0x4060000C) /* UDC Undocumented - Reserved3 */ | ||
611 | |||
612 | #define UDCCR __REG(0x40600000) /* UDC Control Register */ | ||
613 | #define UDCCR_UDE (1 << 0) /* UDC enable */ | ||
614 | #define UDCCR_UDA (1 << 1) /* UDC active */ | ||
615 | #define UDCCR_RSM (1 << 2) /* Device resume */ | ||
616 | #define UDCCR_RESIR (1 << 3) /* Resume interrupt request */ | ||
617 | #define UDCCR_SUSIR (1 << 4) /* Suspend interrupt request */ | ||
618 | #define UDCCR_SRM (1 << 5) /* Suspend/resume interrupt mask */ | ||
619 | #define UDCCR_RSTIR (1 << 6) /* Reset interrupt request */ | ||
620 | #define UDCCR_REM (1 << 7) /* Reset interrupt mask */ | ||
621 | |||
622 | #define UDCCS0 __REG(0x40600010) /* UDC Endpoint 0 Control/Status Register */ | ||
623 | #define UDCCS0_OPR (1 << 0) /* OUT packet ready */ | ||
624 | #define UDCCS0_IPR (1 << 1) /* IN packet ready */ | ||
625 | #define UDCCS0_FTF (1 << 2) /* Flush Tx FIFO */ | ||
626 | #define UDCCS0_DRWF (1 << 3) /* Device remote wakeup feature */ | ||
627 | #define UDCCS0_SST (1 << 4) /* Sent stall */ | ||
628 | #define UDCCS0_FST (1 << 5) /* Force stall */ | ||
629 | #define UDCCS0_RNE (1 << 6) /* Receive FIFO no empty */ | ||
630 | #define UDCCS0_SA (1 << 7) /* Setup active */ | ||
631 | |||
632 | /* Bulk IN - Endpoint 1,6,11 */ | ||
633 | #define UDCCS1 __REG(0x40600014) /* UDC Endpoint 1 (IN) Control/Status Register */ | ||
634 | #define UDCCS6 __REG(0x40600028) /* UDC Endpoint 6 (IN) Control/Status Register */ | ||
635 | #define UDCCS11 __REG(0x4060003C) /* UDC Endpoint 11 (IN) Control/Status Register */ | ||
636 | |||
637 | #define UDCCS_BI_TFS (1 << 0) /* Transmit FIFO service */ | ||
638 | #define UDCCS_BI_TPC (1 << 1) /* Transmit packet complete */ | ||
639 | #define UDCCS_BI_FTF (1 << 2) /* Flush Tx FIFO */ | ||
640 | #define UDCCS_BI_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
641 | #define UDCCS_BI_SST (1 << 4) /* Sent stall */ | ||
642 | #define UDCCS_BI_FST (1 << 5) /* Force stall */ | ||
643 | #define UDCCS_BI_TSP (1 << 7) /* Transmit short packet */ | ||
644 | |||
645 | /* Bulk OUT - Endpoint 2,7,12 */ | ||
646 | #define UDCCS2 __REG(0x40600018) /* UDC Endpoint 2 (OUT) Control/Status Register */ | ||
647 | #define UDCCS7 __REG(0x4060002C) /* UDC Endpoint 7 (OUT) Control/Status Register */ | ||
648 | #define UDCCS12 __REG(0x40600040) /* UDC Endpoint 12 (OUT) Control/Status Register */ | ||
649 | |||
650 | #define UDCCS_BO_RFS (1 << 0) /* Receive FIFO service */ | ||
651 | #define UDCCS_BO_RPC (1 << 1) /* Receive packet complete */ | ||
652 | #define UDCCS_BO_DME (1 << 3) /* DMA enable */ | ||
653 | #define UDCCS_BO_SST (1 << 4) /* Sent stall */ | ||
654 | #define UDCCS_BO_FST (1 << 5) /* Force stall */ | ||
655 | #define UDCCS_BO_RNE (1 << 6) /* Receive FIFO not empty */ | ||
656 | #define UDCCS_BO_RSP (1 << 7) /* Receive short packet */ | ||
657 | |||
658 | /* Isochronous IN - Endpoint 3,8,13 */ | ||
659 | #define UDCCS3 __REG(0x4060001C) /* UDC Endpoint 3 (IN) Control/Status Register */ | ||
660 | #define UDCCS8 __REG(0x40600030) /* UDC Endpoint 8 (IN) Control/Status Register */ | ||
661 | #define UDCCS13 __REG(0x40600044) /* UDC Endpoint 13 (IN) Control/Status Register */ | ||
662 | |||
663 | #define UDCCS_II_TFS (1 << 0) /* Transmit FIFO service */ | ||
664 | #define UDCCS_II_TPC (1 << 1) /* Transmit packet complete */ | ||
665 | #define UDCCS_II_FTF (1 << 2) /* Flush Tx FIFO */ | ||
666 | #define UDCCS_II_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
667 | #define UDCCS_II_TSP (1 << 7) /* Transmit short packet */ | ||
668 | |||
669 | /* Isochronous OUT - Endpoint 4,9,14 */ | ||
670 | #define UDCCS4 __REG(0x40600020) /* UDC Endpoint 4 (OUT) Control/Status Register */ | ||
671 | #define UDCCS9 __REG(0x40600034) /* UDC Endpoint 9 (OUT) Control/Status Register */ | ||
672 | #define UDCCS14 __REG(0x40600048) /* UDC Endpoint 14 (OUT) Control/Status Register */ | ||
673 | |||
674 | #define UDCCS_IO_RFS (1 << 0) /* Receive FIFO service */ | ||
675 | #define UDCCS_IO_RPC (1 << 1) /* Receive packet complete */ | ||
676 | #define UDCCS_IO_ROF (1 << 2) /* Receive overflow */ | ||
677 | #define UDCCS_IO_DME (1 << 3) /* DMA enable */ | ||
678 | #define UDCCS_IO_RNE (1 << 6) /* Receive FIFO not empty */ | ||
679 | #define UDCCS_IO_RSP (1 << 7) /* Receive short packet */ | ||
680 | |||
681 | /* Interrupt IN - Endpoint 5,10,15 */ | ||
682 | #define UDCCS5 __REG(0x40600024) /* UDC Endpoint 5 (Interrupt) Control/Status Register */ | ||
683 | #define UDCCS10 __REG(0x40600038) /* UDC Endpoint 10 (Interrupt) Control/Status Register */ | ||
684 | #define UDCCS15 __REG(0x4060004C) /* UDC Endpoint 15 (Interrupt) Control/Status Register */ | ||
685 | |||
686 | #define UDCCS_INT_TFS (1 << 0) /* Transmit FIFO service */ | ||
687 | #define UDCCS_INT_TPC (1 << 1) /* Transmit packet complete */ | ||
688 | #define UDCCS_INT_FTF (1 << 2) /* Flush Tx FIFO */ | ||
689 | #define UDCCS_INT_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
690 | #define UDCCS_INT_SST (1 << 4) /* Sent stall */ | ||
691 | #define UDCCS_INT_FST (1 << 5) /* Force stall */ | ||
692 | #define UDCCS_INT_TSP (1 << 7) /* Transmit short packet */ | ||
693 | |||
694 | #define UFNRH __REG(0x40600060) /* UDC Frame Number Register High */ | ||
695 | #define UFNRL __REG(0x40600064) /* UDC Frame Number Register Low */ | ||
696 | #define UBCR2 __REG(0x40600068) /* UDC Byte Count Reg 2 */ | ||
697 | #define UBCR4 __REG(0x4060006c) /* UDC Byte Count Reg 4 */ | ||
698 | #define UBCR7 __REG(0x40600070) /* UDC Byte Count Reg 7 */ | ||
699 | #define UBCR9 __REG(0x40600074) /* UDC Byte Count Reg 9 */ | ||
700 | #define UBCR12 __REG(0x40600078) /* UDC Byte Count Reg 12 */ | ||
701 | #define UBCR14 __REG(0x4060007c) /* UDC Byte Count Reg 14 */ | ||
702 | #define UDDR0 __REG(0x40600080) /* UDC Endpoint 0 Data Register */ | ||
703 | #define UDDR1 __REG(0x40600100) /* UDC Endpoint 1 Data Register */ | ||
704 | #define UDDR2 __REG(0x40600180) /* UDC Endpoint 2 Data Register */ | ||
705 | #define UDDR3 __REG(0x40600200) /* UDC Endpoint 3 Data Register */ | ||
706 | #define UDDR4 __REG(0x40600400) /* UDC Endpoint 4 Data Register */ | ||
707 | #define UDDR5 __REG(0x406000A0) /* UDC Endpoint 5 Data Register */ | ||
708 | #define UDDR6 __REG(0x40600600) /* UDC Endpoint 6 Data Register */ | ||
709 | #define UDDR7 __REG(0x40600680) /* UDC Endpoint 7 Data Register */ | ||
710 | #define UDDR8 __REG(0x40600700) /* UDC Endpoint 8 Data Register */ | ||
711 | #define UDDR9 __REG(0x40600900) /* UDC Endpoint 9 Data Register */ | ||
712 | #define UDDR10 __REG(0x406000C0) /* UDC Endpoint 10 Data Register */ | ||
713 | #define UDDR11 __REG(0x40600B00) /* UDC Endpoint 11 Data Register */ | ||
714 | #define UDDR12 __REG(0x40600B80) /* UDC Endpoint 12 Data Register */ | ||
715 | #define UDDR13 __REG(0x40600C00) /* UDC Endpoint 13 Data Register */ | ||
716 | #define UDDR14 __REG(0x40600E00) /* UDC Endpoint 14 Data Register */ | ||
717 | #define UDDR15 __REG(0x406000E0) /* UDC Endpoint 15 Data Register */ | ||
718 | |||
719 | #define UICR0 __REG(0x40600050) /* UDC Interrupt Control Register 0 */ | ||
720 | |||
721 | #define UICR0_IM0 (1 << 0) /* Interrupt mask ep 0 */ | ||
722 | #define UICR0_IM1 (1 << 1) /* Interrupt mask ep 1 */ | ||
723 | #define UICR0_IM2 (1 << 2) /* Interrupt mask ep 2 */ | ||
724 | #define UICR0_IM3 (1 << 3) /* Interrupt mask ep 3 */ | ||
725 | #define UICR0_IM4 (1 << 4) /* Interrupt mask ep 4 */ | ||
726 | #define UICR0_IM5 (1 << 5) /* Interrupt mask ep 5 */ | ||
727 | #define UICR0_IM6 (1 << 6) /* Interrupt mask ep 6 */ | ||
728 | #define UICR0_IM7 (1 << 7) /* Interrupt mask ep 7 */ | ||
729 | |||
730 | #define UICR1 __REG(0x40600054) /* UDC Interrupt Control Register 1 */ | ||
731 | |||
732 | #define UICR1_IM8 (1 << 0) /* Interrupt mask ep 8 */ | ||
733 | #define UICR1_IM9 (1 << 1) /* Interrupt mask ep 9 */ | ||
734 | #define UICR1_IM10 (1 << 2) /* Interrupt mask ep 10 */ | ||
735 | #define UICR1_IM11 (1 << 3) /* Interrupt mask ep 11 */ | ||
736 | #define UICR1_IM12 (1 << 4) /* Interrupt mask ep 12 */ | ||
737 | #define UICR1_IM13 (1 << 5) /* Interrupt mask ep 13 */ | ||
738 | #define UICR1_IM14 (1 << 6) /* Interrupt mask ep 14 */ | ||
739 | #define UICR1_IM15 (1 << 7) /* Interrupt mask ep 15 */ | ||
740 | |||
741 | #define USIR0 __REG(0x40600058) /* UDC Status Interrupt Register 0 */ | ||
742 | |||
743 | #define USIR0_IR0 (1 << 0) /* Interrupt request ep 0 */ | ||
744 | #define USIR0_IR1 (1 << 1) /* Interrupt request ep 1 */ | ||
745 | #define USIR0_IR2 (1 << 2) /* Interrupt request ep 2 */ | ||
746 | #define USIR0_IR3 (1 << 3) /* Interrupt request ep 3 */ | ||
747 | #define USIR0_IR4 (1 << 4) /* Interrupt request ep 4 */ | ||
748 | #define USIR0_IR5 (1 << 5) /* Interrupt request ep 5 */ | ||
749 | #define USIR0_IR6 (1 << 6) /* Interrupt request ep 6 */ | ||
750 | #define USIR0_IR7 (1 << 7) /* Interrupt request ep 7 */ | ||
751 | |||
752 | #define USIR1 __REG(0x4060005C) /* UDC Status Interrupt Register 1 */ | ||
753 | |||
754 | #define USIR1_IR8 (1 << 0) /* Interrupt request ep 8 */ | ||
755 | #define USIR1_IR9 (1 << 1) /* Interrupt request ep 9 */ | ||
756 | #define USIR1_IR10 (1 << 2) /* Interrupt request ep 10 */ | ||
757 | #define USIR1_IR11 (1 << 3) /* Interrupt request ep 11 */ | ||
758 | #define USIR1_IR12 (1 << 4) /* Interrupt request ep 12 */ | ||
759 | #define USIR1_IR13 (1 << 5) /* Interrupt request ep 13 */ | ||
760 | #define USIR1_IR14 (1 << 6) /* Interrupt request ep 14 */ | ||
761 | #define USIR1_IR15 (1 << 7) /* Interrupt request ep 15 */ | ||
762 | |||
763 | #elif defined(CONFIG_PXA27x) | ||
764 | |||
765 | #define UDCCR __REG(0x40600000) /* UDC Control Register */ | ||
766 | #define UDCCR_OEN (1 << 31) /* On-the-Go Enable */ | ||
767 | #define UDCCR_AALTHNP (1 << 30) /* A-device Alternate Host Negotiation | ||
768 | Protocol Port Support */ | ||
769 | #define UDCCR_AHNP (1 << 29) /* A-device Host Negotiation Protocol | ||
770 | Support */ | ||
771 | #define UDCCR_BHNP (1 << 28) /* B-device Host Negotiation Protocol | ||
772 | Enable */ | ||
773 | #define UDCCR_DWRE (1 << 16) /* Device Remote Wake-up Enable */ | ||
774 | #define UDCCR_ACN (0x03 << 11) /* Active UDC configuration Number */ | ||
775 | #define UDCCR_ACN_S 11 | ||
776 | #define UDCCR_AIN (0x07 << 8) /* Active UDC interface Number */ | ||
777 | #define UDCCR_AIN_S 8 | ||
778 | #define UDCCR_AAISN (0x07 << 5) /* Active UDC Alternate Interface | ||
779 | Setting Number */ | ||
780 | #define UDCCR_AAISN_S 5 | ||
781 | #define UDCCR_SMAC (1 << 4) /* Switch Endpoint Memory to Active | ||
782 | Configuration */ | ||
783 | #define UDCCR_EMCE (1 << 3) /* Endpoint Memory Configuration | ||
784 | Error */ | ||
785 | #define UDCCR_UDR (1 << 2) /* UDC Resume */ | ||
786 | #define UDCCR_UDA (1 << 1) /* UDC Active */ | ||
787 | #define UDCCR_UDE (1 << 0) /* UDC Enable */ | ||
788 | |||
789 | #define UDCICR0 __REG(0x40600004) /* UDC Interrupt Control Register0 */ | ||
790 | #define UDCICR1 __REG(0x40600008) /* UDC Interrupt Control Register1 */ | ||
791 | #define UDCICR_FIFOERR (1 << 1) /* FIFO Error interrupt for EP */ | ||
792 | #define UDCICR_PKTCOMPL (1 << 0) /* Packet Complete interrupt for EP */ | ||
793 | |||
794 | #define UDC_INT_FIFOERROR (0x2) | ||
795 | #define UDC_INT_PACKETCMP (0x1) | ||
796 | |||
797 | #define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2)) | ||
798 | #define UDCICR1_IECC (1 << 31) /* IntEn - Configuration Change */ | ||
799 | #define UDCICR1_IESOF (1 << 30) /* IntEn - Start of Frame */ | ||
800 | #define UDCICR1_IERU (1 << 29) /* IntEn - Resume */ | ||
801 | #define UDCICR1_IESU (1 << 28) /* IntEn - Suspend */ | ||
802 | #define UDCICR1_IERS (1 << 27) /* IntEn - Reset */ | ||
803 | |||
804 | #define UDCISR0 __REG(0x4060000C) /* UDC Interrupt Status Register 0 */ | ||
805 | #define UDCISR1 __REG(0x40600010) /* UDC Interrupt Status Register 1 */ | ||
806 | #define UDCISR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2)) | ||
807 | #define UDCISR1_IRCC (1 << 31) /* IntReq - Configuration Change */ | ||
808 | #define UDCISR1_IRSOF (1 << 30) /* IntReq - Start of Frame */ | ||
809 | #define UDCISR1_IRRU (1 << 29) /* IntReq - Resume */ | ||
810 | #define UDCISR1_IRSU (1 << 28) /* IntReq - Suspend */ | ||
811 | #define UDCISR1_IRRS (1 << 27) /* IntReq - Reset */ | ||
812 | |||
813 | #define UDCFNR __REG(0x40600014) /* UDC Frame Number Register */ | ||
814 | #define UDCOTGICR __REG(0x40600018) /* UDC On-The-Go interrupt control */ | ||
815 | #define UDCOTGICR_IESF (1 << 24) /* OTG SET_FEATURE command recvd */ | ||
816 | #define UDCOTGICR_IEXR (1 << 17) /* Extra Transciever Interrupt | ||
817 | Rising Edge Interrupt Enable */ | ||
818 | #define UDCOTGICR_IEXF (1 << 16) /* Extra Transciever Interrupt | ||
819 | Falling Edge Interrupt Enable */ | ||
820 | #define UDCOTGICR_IEVV40R (1 << 9) /* OTG Vbus Valid 4.0V Rising Edge | ||
821 | Interrupt Enable */ | ||
822 | #define UDCOTGICR_IEVV40F (1 << 8) /* OTG Vbus Valid 4.0V Falling Edge | ||
823 | Interrupt Enable */ | ||
824 | #define UDCOTGICR_IEVV44R (1 << 7) /* OTG Vbus Valid 4.4V Rising Edge | ||
825 | Interrupt Enable */ | ||
826 | #define UDCOTGICR_IEVV44F (1 << 6) /* OTG Vbus Valid 4.4V Falling Edge | ||
827 | Interrupt Enable */ | ||
828 | #define UDCOTGICR_IESVR (1 << 5) /* OTG Session Valid Rising Edge | ||
829 | Interrupt Enable */ | ||
830 | #define UDCOTGICR_IESVF (1 << 4) /* OTG Session Valid Falling Edge | ||
831 | Interrupt Enable */ | ||
832 | #define UDCOTGICR_IESDR (1 << 3) /* OTG A-Device SRP Detect Rising | ||
833 | Edge Interrupt Enable */ | ||
834 | #define UDCOTGICR_IESDF (1 << 2) /* OTG A-Device SRP Detect Falling | ||
835 | Edge Interrupt Enable */ | ||
836 | #define UDCOTGICR_IEIDR (1 << 1) /* OTG ID Change Rising Edge | ||
837 | Interrupt Enable */ | ||
838 | #define UDCOTGICR_IEIDF (1 << 0) /* OTG ID Change Falling Edge | ||
839 | Interrupt Enable */ | ||
840 | |||
841 | #define UP2OCR __REG(0x40600020) /* USB Port 2 Output Control register */ | ||
842 | |||
843 | #define UP2OCR_CPVEN (1 << 0) /* Charge Pump Vbus Enable */ | ||
844 | #define UP2OCR_CPVPE (1 << 1) /* Charge Pump Vbus Pulse Enable */ | ||
845 | #define UP2OCR_DPPDE (1 << 2) /* Host Port 2 Transceiver D+ Pull Down Enable */ | ||
846 | #define UP2OCR_DMPDE (1 << 3) /* Host Port 2 Transceiver D- Pull Down Enable */ | ||
847 | #define UP2OCR_DPPUE (1 << 4) /* Host Port 2 Transceiver D+ Pull Up Enable */ | ||
848 | #define UP2OCR_DMPUE (1 << 5) /* Host Port 2 Transceiver D- Pull Up Enable */ | ||
849 | #define UP2OCR_DPPUBE (1 << 6) /* Host Port 2 Transceiver D+ Pull Up Bypass Enable */ | ||
850 | #define UP2OCR_DMPUBE (1 << 7) /* Host Port 2 Transceiver D- Pull Up Bypass Enable */ | ||
851 | #define UP2OCR_EXSP (1 << 8) /* External Transceiver Speed Control */ | ||
852 | #define UP2OCR_EXSUS (1 << 9) /* External Transceiver Speed Enable */ | ||
853 | #define UP2OCR_IDON (1 << 10) /* OTG ID Read Enable */ | ||
854 | #define UP2OCR_HXS (1 << 16) /* Host Port 2 Transceiver Output Select */ | ||
855 | #define UP2OCR_HXOE (1 << 17) /* Host Port 2 Transceiver Output Enable */ | ||
856 | #define UP2OCR_SEOS (1 << 24) /* Single-Ended Output Select */ | ||
857 | |||
858 | #define UDCCSN(x) __REG2(0x40600100, (x) << 2) | ||
859 | #define UDCCSR0 __REG(0x40600100) /* UDC Control/Status register - Endpoint 0 */ | ||
860 | #define UDCCSR0_SA (1 << 7) /* Setup Active */ | ||
861 | #define UDCCSR0_RNE (1 << 6) /* Receive FIFO Not Empty */ | ||
862 | #define UDCCSR0_FST (1 << 5) /* Force Stall */ | ||
863 | #define UDCCSR0_SST (1 << 4) /* Sent Stall */ | ||
864 | #define UDCCSR0_DME (1 << 3) /* DMA Enable */ | ||
865 | #define UDCCSR0_FTF (1 << 2) /* Flush Transmit FIFO */ | ||
866 | #define UDCCSR0_IPR (1 << 1) /* IN Packet Ready */ | ||
867 | #define UDCCSR0_OPC (1 << 0) /* OUT Packet Complete */ | ||
868 | |||
869 | #define UDCCSRA __REG(0x40600104) /* UDC Control/Status register - Endpoint A */ | ||
870 | #define UDCCSRB __REG(0x40600108) /* UDC Control/Status register - Endpoint B */ | ||
871 | #define UDCCSRC __REG(0x4060010C) /* UDC Control/Status register - Endpoint C */ | ||
872 | #define UDCCSRD __REG(0x40600110) /* UDC Control/Status register - Endpoint D */ | ||
873 | #define UDCCSRE __REG(0x40600114) /* UDC Control/Status register - Endpoint E */ | ||
874 | #define UDCCSRF __REG(0x40600118) /* UDC Control/Status register - Endpoint F */ | ||
875 | #define UDCCSRG __REG(0x4060011C) /* UDC Control/Status register - Endpoint G */ | ||
876 | #define UDCCSRH __REG(0x40600120) /* UDC Control/Status register - Endpoint H */ | ||
877 | #define UDCCSRI __REG(0x40600124) /* UDC Control/Status register - Endpoint I */ | ||
878 | #define UDCCSRJ __REG(0x40600128) /* UDC Control/Status register - Endpoint J */ | ||
879 | #define UDCCSRK __REG(0x4060012C) /* UDC Control/Status register - Endpoint K */ | ||
880 | #define UDCCSRL __REG(0x40600130) /* UDC Control/Status register - Endpoint L */ | ||
881 | #define UDCCSRM __REG(0x40600134) /* UDC Control/Status register - Endpoint M */ | ||
882 | #define UDCCSRN __REG(0x40600138) /* UDC Control/Status register - Endpoint N */ | ||
883 | #define UDCCSRP __REG(0x4060013C) /* UDC Control/Status register - Endpoint P */ | ||
884 | #define UDCCSRQ __REG(0x40600140) /* UDC Control/Status register - Endpoint Q */ | ||
885 | #define UDCCSRR __REG(0x40600144) /* UDC Control/Status register - Endpoint R */ | ||
886 | #define UDCCSRS __REG(0x40600148) /* UDC Control/Status register - Endpoint S */ | ||
887 | #define UDCCSRT __REG(0x4060014C) /* UDC Control/Status register - Endpoint T */ | ||
888 | #define UDCCSRU __REG(0x40600150) /* UDC Control/Status register - Endpoint U */ | ||
889 | #define UDCCSRV __REG(0x40600154) /* UDC Control/Status register - Endpoint V */ | ||
890 | #define UDCCSRW __REG(0x40600158) /* UDC Control/Status register - Endpoint W */ | ||
891 | #define UDCCSRX __REG(0x4060015C) /* UDC Control/Status register - Endpoint X */ | ||
892 | |||
893 | #define UDCCSR_DPE (1 << 9) /* Data Packet Error */ | ||
894 | #define UDCCSR_FEF (1 << 8) /* Flush Endpoint FIFO */ | ||
895 | #define UDCCSR_SP (1 << 7) /* Short Packet Control/Status */ | ||
896 | #define UDCCSR_BNE (1 << 6) /* Buffer Not Empty (IN endpoints) */ | ||
897 | #define UDCCSR_BNF (1 << 6) /* Buffer Not Full (OUT endpoints) */ | ||
898 | #define UDCCSR_FST (1 << 5) /* Force STALL */ | ||
899 | #define UDCCSR_SST (1 << 4) /* Sent STALL */ | ||
900 | #define UDCCSR_DME (1 << 3) /* DMA Enable */ | ||
901 | #define UDCCSR_TRN (1 << 2) /* Tx/Rx NAK */ | ||
902 | #define UDCCSR_PC (1 << 1) /* Packet Complete */ | ||
903 | #define UDCCSR_FS (1 << 0) /* FIFO needs service */ | ||
904 | |||
905 | #define UDCBCN(x) __REG2(0x40600200, (x)<<2) | ||
906 | #define UDCBCR0 __REG(0x40600200) /* Byte Count Register - EP0 */ | ||
907 | #define UDCBCRA __REG(0x40600204) /* Byte Count Register - EPA */ | ||
908 | #define UDCBCRB __REG(0x40600208) /* Byte Count Register - EPB */ | ||
909 | #define UDCBCRC __REG(0x4060020C) /* Byte Count Register - EPC */ | ||
910 | #define UDCBCRD __REG(0x40600210) /* Byte Count Register - EPD */ | ||
911 | #define UDCBCRE __REG(0x40600214) /* Byte Count Register - EPE */ | ||
912 | #define UDCBCRF __REG(0x40600218) /* Byte Count Register - EPF */ | ||
913 | #define UDCBCRG __REG(0x4060021C) /* Byte Count Register - EPG */ | ||
914 | #define UDCBCRH __REG(0x40600220) /* Byte Count Register - EPH */ | ||
915 | #define UDCBCRI __REG(0x40600224) /* Byte Count Register - EPI */ | ||
916 | #define UDCBCRJ __REG(0x40600228) /* Byte Count Register - EPJ */ | ||
917 | #define UDCBCRK __REG(0x4060022C) /* Byte Count Register - EPK */ | ||
918 | #define UDCBCRL __REG(0x40600230) /* Byte Count Register - EPL */ | ||
919 | #define UDCBCRM __REG(0x40600234) /* Byte Count Register - EPM */ | ||
920 | #define UDCBCRN __REG(0x40600238) /* Byte Count Register - EPN */ | ||
921 | #define UDCBCRP __REG(0x4060023C) /* Byte Count Register - EPP */ | ||
922 | #define UDCBCRQ __REG(0x40600240) /* Byte Count Register - EPQ */ | ||
923 | #define UDCBCRR __REG(0x40600244) /* Byte Count Register - EPR */ | ||
924 | #define UDCBCRS __REG(0x40600248) /* Byte Count Register - EPS */ | ||
925 | #define UDCBCRT __REG(0x4060024C) /* Byte Count Register - EPT */ | ||
926 | #define UDCBCRU __REG(0x40600250) /* Byte Count Register - EPU */ | ||
927 | #define UDCBCRV __REG(0x40600254) /* Byte Count Register - EPV */ | ||
928 | #define UDCBCRW __REG(0x40600258) /* Byte Count Register - EPW */ | ||
929 | #define UDCBCRX __REG(0x4060025C) /* Byte Count Register - EPX */ | ||
930 | |||
931 | #define UDCDN(x) __REG2(0x40600300, (x)<<2) | ||
932 | #define PHYS_UDCDN(x) (0x40600300 + ((x)<<2)) | ||
933 | #define PUDCDN(x) (volatile u32 *)(io_p2v(PHYS_UDCDN((x)))) | ||
934 | #define UDCDR0 __REG(0x40600300) /* Data Register - EP0 */ | ||
935 | #define UDCDRA __REG(0x40600304) /* Data Register - EPA */ | ||
936 | #define UDCDRB __REG(0x40600308) /* Data Register - EPB */ | ||
937 | #define UDCDRC __REG(0x4060030C) /* Data Register - EPC */ | ||
938 | #define UDCDRD __REG(0x40600310) /* Data Register - EPD */ | ||
939 | #define UDCDRE __REG(0x40600314) /* Data Register - EPE */ | ||
940 | #define UDCDRF __REG(0x40600318) /* Data Register - EPF */ | ||
941 | #define UDCDRG __REG(0x4060031C) /* Data Register - EPG */ | ||
942 | #define UDCDRH __REG(0x40600320) /* Data Register - EPH */ | ||
943 | #define UDCDRI __REG(0x40600324) /* Data Register - EPI */ | ||
944 | #define UDCDRJ __REG(0x40600328) /* Data Register - EPJ */ | ||
945 | #define UDCDRK __REG(0x4060032C) /* Data Register - EPK */ | ||
946 | #define UDCDRL __REG(0x40600330) /* Data Register - EPL */ | ||
947 | #define UDCDRM __REG(0x40600334) /* Data Register - EPM */ | ||
948 | #define UDCDRN __REG(0x40600338) /* Data Register - EPN */ | ||
949 | #define UDCDRP __REG(0x4060033C) /* Data Register - EPP */ | ||
950 | #define UDCDRQ __REG(0x40600340) /* Data Register - EPQ */ | ||
951 | #define UDCDRR __REG(0x40600344) /* Data Register - EPR */ | ||
952 | #define UDCDRS __REG(0x40600348) /* Data Register - EPS */ | ||
953 | #define UDCDRT __REG(0x4060034C) /* Data Register - EPT */ | ||
954 | #define UDCDRU __REG(0x40600350) /* Data Register - EPU */ | ||
955 | #define UDCDRV __REG(0x40600354) /* Data Register - EPV */ | ||
956 | #define UDCDRW __REG(0x40600358) /* Data Register - EPW */ | ||
957 | #define UDCDRX __REG(0x4060035C) /* Data Register - EPX */ | ||
958 | |||
959 | #define UDCCN(x) __REG2(0x40600400, (x)<<2) | ||
960 | #define UDCCRA __REG(0x40600404) /* Configuration register EPA */ | ||
961 | #define UDCCRB __REG(0x40600408) /* Configuration register EPB */ | ||
962 | #define UDCCRC __REG(0x4060040C) /* Configuration register EPC */ | ||
963 | #define UDCCRD __REG(0x40600410) /* Configuration register EPD */ | ||
964 | #define UDCCRE __REG(0x40600414) /* Configuration register EPE */ | ||
965 | #define UDCCRF __REG(0x40600418) /* Configuration register EPF */ | ||
966 | #define UDCCRG __REG(0x4060041C) /* Configuration register EPG */ | ||
967 | #define UDCCRH __REG(0x40600420) /* Configuration register EPH */ | ||
968 | #define UDCCRI __REG(0x40600424) /* Configuration register EPI */ | ||
969 | #define UDCCRJ __REG(0x40600428) /* Configuration register EPJ */ | ||
970 | #define UDCCRK __REG(0x4060042C) /* Configuration register EPK */ | ||
971 | #define UDCCRL __REG(0x40600430) /* Configuration register EPL */ | ||
972 | #define UDCCRM __REG(0x40600434) /* Configuration register EPM */ | ||
973 | #define UDCCRN __REG(0x40600438) /* Configuration register EPN */ | ||
974 | #define UDCCRP __REG(0x4060043C) /* Configuration register EPP */ | ||
975 | #define UDCCRQ __REG(0x40600440) /* Configuration register EPQ */ | ||
976 | #define UDCCRR __REG(0x40600444) /* Configuration register EPR */ | ||
977 | #define UDCCRS __REG(0x40600448) /* Configuration register EPS */ | ||
978 | #define UDCCRT __REG(0x4060044C) /* Configuration register EPT */ | ||
979 | #define UDCCRU __REG(0x40600450) /* Configuration register EPU */ | ||
980 | #define UDCCRV __REG(0x40600454) /* Configuration register EPV */ | ||
981 | #define UDCCRW __REG(0x40600458) /* Configuration register EPW */ | ||
982 | #define UDCCRX __REG(0x4060045C) /* Configuration register EPX */ | ||
983 | |||
984 | #define UDCCONR_CN (0x03 << 25) /* Configuration Number */ | ||
985 | #define UDCCONR_CN_S (25) | ||
986 | #define UDCCONR_IN (0x07 << 22) /* Interface Number */ | ||
987 | #define UDCCONR_IN_S (22) | ||
988 | #define UDCCONR_AISN (0x07 << 19) /* Alternate Interface Number */ | ||
989 | #define UDCCONR_AISN_S (19) | ||
990 | #define UDCCONR_EN (0x0f << 15) /* Endpoint Number */ | ||
991 | #define UDCCONR_EN_S (15) | ||
992 | #define UDCCONR_ET (0x03 << 13) /* Endpoint Type: */ | ||
993 | #define UDCCONR_ET_S (13) | ||
994 | #define UDCCONR_ET_INT (0x03 << 13) /* Interrupt */ | ||
995 | #define UDCCONR_ET_BULK (0x02 << 13) /* Bulk */ | ||
996 | #define UDCCONR_ET_ISO (0x01 << 13) /* Isochronous */ | ||
997 | #define UDCCONR_ET_NU (0x00 << 13) /* Not used */ | ||
998 | #define UDCCONR_ED (1 << 12) /* Endpoint Direction */ | ||
999 | #define UDCCONR_MPS (0x3ff << 2) /* Maximum Packet Size */ | ||
1000 | #define UDCCONR_MPS_S (2) | ||
1001 | #define UDCCONR_DE (1 << 1) /* Double Buffering Enable */ | ||
1002 | #define UDCCONR_EE (1 << 0) /* Endpoint Enable */ | ||
1003 | |||
1004 | |||
1005 | #define UDC_INT_FIFOERROR (0x2) | ||
1006 | #define UDC_INT_PACKETCMP (0x1) | ||
1007 | |||
1008 | #define UDC_FNR_MASK (0x7ff) | ||
1009 | |||
1010 | #define UDCCSR_WR_MASK (UDCCSR_DME|UDCCSR_FST) | ||
1011 | #define UDC_BCR_MASK (0x3ff) | ||
1012 | #endif | ||
1013 | |||
1014 | /* | ||
1015 | * Fast Infrared Communication Port | 603 | * Fast Infrared Communication Port |
1016 | */ | 604 | */ |
1017 | 605 | ||
@@ -1237,120 +825,9 @@ | |||
1237 | #endif | 825 | #endif |
1238 | 826 | ||
1239 | /* | 827 | /* |
1240 | * Power Manager | 828 | * Power Manager - see pxa2xx-regs.h |
1241 | */ | 829 | */ |
1242 | 830 | ||
1243 | #define PMCR __REG(0x40F00000) /* Power Manager Control Register */ | ||
1244 | #define PSSR __REG(0x40F00004) /* Power Manager Sleep Status Register */ | ||
1245 | #define PSPR __REG(0x40F00008) /* Power Manager Scratch Pad Register */ | ||
1246 | #define PWER __REG(0x40F0000C) /* Power Manager Wake-up Enable Register */ | ||
1247 | #define PRER __REG(0x40F00010) /* Power Manager GPIO Rising-Edge Detect Enable Register */ | ||
1248 | #define PFER __REG(0x40F00014) /* Power Manager GPIO Falling-Edge Detect Enable Register */ | ||
1249 | #define PEDR __REG(0x40F00018) /* Power Manager GPIO Edge Detect Status Register */ | ||
1250 | #define PCFR __REG(0x40F0001C) /* Power Manager General Configuration Register */ | ||
1251 | #define PGSR0 __REG(0x40F00020) /* Power Manager GPIO Sleep State Register for GP[31-0] */ | ||
1252 | #define PGSR1 __REG(0x40F00024) /* Power Manager GPIO Sleep State Register for GP[63-32] */ | ||
1253 | #define PGSR2 __REG(0x40F00028) /* Power Manager GPIO Sleep State Register for GP[84-64] */ | ||
1254 | #define PGSR3 __REG(0x40F0002C) /* Power Manager GPIO Sleep State Register for GP[118-96] */ | ||
1255 | #define RCSR __REG(0x40F00030) /* Reset Controller Status Register */ | ||
1256 | |||
1257 | #define PSLR __REG(0x40F00034) /* Power Manager Sleep Config Register */ | ||
1258 | #define PSTR __REG(0x40F00038) /*Power Manager Standby Config Register */ | ||
1259 | #define PSNR __REG(0x40F0003C) /*Power Manager Sense Config Register */ | ||
1260 | #define PVCR __REG(0x40F00040) /*Power Manager VoltageControl Register */ | ||
1261 | #define PKWR __REG(0x40F00050) /* Power Manager KB Wake-up Enable Reg */ | ||
1262 | #define PKSR __REG(0x40F00054) /* Power Manager KB Level-Detect Register */ | ||
1263 | #define PCMD(x) __REG2(0x40F00080, (x)<<2) | ||
1264 | #define PCMD0 __REG(0x40F00080 + 0 * 4) | ||
1265 | #define PCMD1 __REG(0x40F00080 + 1 * 4) | ||
1266 | #define PCMD2 __REG(0x40F00080 + 2 * 4) | ||
1267 | #define PCMD3 __REG(0x40F00080 + 3 * 4) | ||
1268 | #define PCMD4 __REG(0x40F00080 + 4 * 4) | ||
1269 | #define PCMD5 __REG(0x40F00080 + 5 * 4) | ||
1270 | #define PCMD6 __REG(0x40F00080 + 6 * 4) | ||
1271 | #define PCMD7 __REG(0x40F00080 + 7 * 4) | ||
1272 | #define PCMD8 __REG(0x40F00080 + 8 * 4) | ||
1273 | #define PCMD9 __REG(0x40F00080 + 9 * 4) | ||
1274 | #define PCMD10 __REG(0x40F00080 + 10 * 4) | ||
1275 | #define PCMD11 __REG(0x40F00080 + 11 * 4) | ||
1276 | #define PCMD12 __REG(0x40F00080 + 12 * 4) | ||
1277 | #define PCMD13 __REG(0x40F00080 + 13 * 4) | ||
1278 | #define PCMD14 __REG(0x40F00080 + 14 * 4) | ||
1279 | #define PCMD15 __REG(0x40F00080 + 15 * 4) | ||
1280 | #define PCMD16 __REG(0x40F00080 + 16 * 4) | ||
1281 | #define PCMD17 __REG(0x40F00080 + 17 * 4) | ||
1282 | #define PCMD18 __REG(0x40F00080 + 18 * 4) | ||
1283 | #define PCMD19 __REG(0x40F00080 + 19 * 4) | ||
1284 | #define PCMD20 __REG(0x40F00080 + 20 * 4) | ||
1285 | #define PCMD21 __REG(0x40F00080 + 21 * 4) | ||
1286 | #define PCMD22 __REG(0x40F00080 + 22 * 4) | ||
1287 | #define PCMD23 __REG(0x40F00080 + 23 * 4) | ||
1288 | #define PCMD24 __REG(0x40F00080 + 24 * 4) | ||
1289 | #define PCMD25 __REG(0x40F00080 + 25 * 4) | ||
1290 | #define PCMD26 __REG(0x40F00080 + 26 * 4) | ||
1291 | #define PCMD27 __REG(0x40F00080 + 27 * 4) | ||
1292 | #define PCMD28 __REG(0x40F00080 + 28 * 4) | ||
1293 | #define PCMD29 __REG(0x40F00080 + 29 * 4) | ||
1294 | #define PCMD30 __REG(0x40F00080 + 30 * 4) | ||
1295 | #define PCMD31 __REG(0x40F00080 + 31 * 4) | ||
1296 | |||
1297 | #define PCMD_MBC (1<<12) | ||
1298 | #define PCMD_DCE (1<<11) | ||
1299 | #define PCMD_LC (1<<10) | ||
1300 | /* FIXME: PCMD_SQC need be checked. */ | ||
1301 | #define PCMD_SQC (3<<8) /* currently only bit 8 is changeable, | ||
1302 | bit 9 should be 0 all day. */ | ||
1303 | #define PVCR_VCSA (0x1<<14) | ||
1304 | #define PVCR_CommandDelay (0xf80) | ||
1305 | #define PCFR_PI2C_EN (0x1 << 6) | ||
1306 | |||
1307 | #define PSSR_OTGPH (1 << 6) /* OTG Peripheral control Hold */ | ||
1308 | #define PSSR_RDH (1 << 5) /* Read Disable Hold */ | ||
1309 | #define PSSR_PH (1 << 4) /* Peripheral Control Hold */ | ||
1310 | #define PSSR_STS (1 << 3) /* Standby Mode Status */ | ||
1311 | #define PSSR_VFS (1 << 2) /* VDD Fault Status */ | ||
1312 | #define PSSR_BFS (1 << 1) /* Battery Fault Status */ | ||
1313 | #define PSSR_SSS (1 << 0) /* Software Sleep Status */ | ||
1314 | |||
1315 | #define PSLR_SL_ROD (1 << 20) /* Sleep-Mode/Depp-Sleep Mode nRESET_OUT Disable */ | ||
1316 | |||
1317 | #define PCFR_RO (1 << 15) /* RDH Override */ | ||
1318 | #define PCFR_PO (1 << 14) /* PH Override */ | ||
1319 | #define PCFR_GPROD (1 << 12) /* GPIO nRESET_OUT Disable */ | ||
1320 | #define PCFR_L1_EN (1 << 11) /* Sleep Mode L1 converter Enable */ | ||
1321 | #define PCFR_FVC (1 << 10) /* Frequency/Voltage Change */ | ||
1322 | #define PCFR_DC_EN (1 << 7) /* Sleep/deep-sleep DC-DC Converter Enable */ | ||
1323 | #define PCFR_PI2CEN (1 << 6) /* Enable PI2C controller */ | ||
1324 | #define PCFR_GPR_EN (1 << 4) /* nRESET_GPIO Pin Enable */ | ||
1325 | #define PCFR_DS (1 << 3) /* Deep Sleep Mode */ | ||
1326 | #define PCFR_FS (1 << 2) /* Float Static Chip Selects */ | ||
1327 | #define PCFR_FP (1 << 1) /* Float PCMCIA controls */ | ||
1328 | #define PCFR_OPDE (1 << 0) /* 3.6864 MHz oscillator power-down enable */ | ||
1329 | |||
1330 | #define RCSR_GPR (1 << 3) /* GPIO Reset */ | ||
1331 | #define RCSR_SMR (1 << 2) /* Sleep Mode */ | ||
1332 | #define RCSR_WDR (1 << 1) /* Watchdog Reset */ | ||
1333 | #define RCSR_HWR (1 << 0) /* Hardware Reset */ | ||
1334 | |||
1335 | #define PWER_GPIO(Nb) (1 << Nb) /* GPIO [0..15] wake-up enable */ | ||
1336 | #define PWER_GPIO0 PWER_GPIO (0) /* GPIO [0] wake-up enable */ | ||
1337 | #define PWER_GPIO1 PWER_GPIO (1) /* GPIO [1] wake-up enable */ | ||
1338 | #define PWER_GPIO2 PWER_GPIO (2) /* GPIO [2] wake-up enable */ | ||
1339 | #define PWER_GPIO3 PWER_GPIO (3) /* GPIO [3] wake-up enable */ | ||
1340 | #define PWER_GPIO4 PWER_GPIO (4) /* GPIO [4] wake-up enable */ | ||
1341 | #define PWER_GPIO5 PWER_GPIO (5) /* GPIO [5] wake-up enable */ | ||
1342 | #define PWER_GPIO6 PWER_GPIO (6) /* GPIO [6] wake-up enable */ | ||
1343 | #define PWER_GPIO7 PWER_GPIO (7) /* GPIO [7] wake-up enable */ | ||
1344 | #define PWER_GPIO8 PWER_GPIO (8) /* GPIO [8] wake-up enable */ | ||
1345 | #define PWER_GPIO9 PWER_GPIO (9) /* GPIO [9] wake-up enable */ | ||
1346 | #define PWER_GPIO10 PWER_GPIO (10) /* GPIO [10] wake-up enable */ | ||
1347 | #define PWER_GPIO11 PWER_GPIO (11) /* GPIO [11] wake-up enable */ | ||
1348 | #define PWER_GPIO12 PWER_GPIO (12) /* GPIO [12] wake-up enable */ | ||
1349 | #define PWER_GPIO13 PWER_GPIO (13) /* GPIO [13] wake-up enable */ | ||
1350 | #define PWER_GPIO14 PWER_GPIO (14) /* GPIO [14] wake-up enable */ | ||
1351 | #define PWER_GPIO15 PWER_GPIO (15) /* GPIO [15] wake-up enable */ | ||
1352 | #define PWER_RTC 0x80000000 /* RTC alarm wake-up enable */ | ||
1353 | |||
1354 | /* | 831 | /* |
1355 | * SSP Serial Port Registers - see include/asm-arm/arch-pxa/regs-ssp.h | 832 | * SSP Serial Port Registers - see include/asm-arm/arch-pxa/regs-ssp.h |
1356 | */ | 833 | */ |
@@ -1360,52 +837,9 @@ | |||
1360 | */ | 837 | */ |
1361 | 838 | ||
1362 | /* | 839 | /* |
1363 | * Core Clock | 840 | * Core Clock - see include/asm-arm/arch-pxa/pxa2xx-regs.h |
1364 | */ | 841 | */ |
1365 | 842 | ||
1366 | #define CCCR __REG(0x41300000) /* Core Clock Configuration Register */ | ||
1367 | #define CKEN __REG(0x41300004) /* Clock Enable Register */ | ||
1368 | #define OSCC __REG(0x41300008) /* Oscillator Configuration Register */ | ||
1369 | #define CCSR __REG(0x4130000C) /* Core Clock Status Register */ | ||
1370 | |||
1371 | #define CCCR_N_MASK 0x0380 /* Run Mode Frequency to Turbo Mode Frequency Multiplier */ | ||
1372 | #define CCCR_M_MASK 0x0060 /* Memory Frequency to Run Mode Frequency Multiplier */ | ||
1373 | #define CCCR_L_MASK 0x001f /* Crystal Frequency to Memory Frequency Multiplier */ | ||
1374 | |||
1375 | #define CKEN_AC97CONF (31) /* AC97 Controller Configuration */ | ||
1376 | #define CKEN_CAMERA (24) /* Camera Interface Clock Enable */ | ||
1377 | #define CKEN_SSP1 (23) /* SSP1 Unit Clock Enable */ | ||
1378 | #define CKEN_MEMC (22) /* Memory Controller Clock Enable */ | ||
1379 | #define CKEN_MEMSTK (21) /* Memory Stick Host Controller */ | ||
1380 | #define CKEN_IM (20) /* Internal Memory Clock Enable */ | ||
1381 | #define CKEN_KEYPAD (19) /* Keypad Interface Clock Enable */ | ||
1382 | #define CKEN_USIM (18) /* USIM Unit Clock Enable */ | ||
1383 | #define CKEN_MSL (17) /* MSL Unit Clock Enable */ | ||
1384 | #define CKEN_LCD (16) /* LCD Unit Clock Enable */ | ||
1385 | #define CKEN_PWRI2C (15) /* PWR I2C Unit Clock Enable */ | ||
1386 | #define CKEN_I2C (14) /* I2C Unit Clock Enable */ | ||
1387 | #define CKEN_FICP (13) /* FICP Unit Clock Enable */ | ||
1388 | #define CKEN_MMC (12) /* MMC Unit Clock Enable */ | ||
1389 | #define CKEN_USB (11) /* USB Unit Clock Enable */ | ||
1390 | #define CKEN_ASSP (10) /* ASSP (SSP3) Clock Enable */ | ||
1391 | #define CKEN_USBHOST (10) /* USB Host Unit Clock Enable */ | ||
1392 | #define CKEN_OSTIMER (9) /* OS Timer Unit Clock Enable */ | ||
1393 | #define CKEN_NSSP (9) /* NSSP (SSP2) Clock Enable */ | ||
1394 | #define CKEN_I2S (8) /* I2S Unit Clock Enable */ | ||
1395 | #define CKEN_BTUART (7) /* BTUART Unit Clock Enable */ | ||
1396 | #define CKEN_FFUART (6) /* FFUART Unit Clock Enable */ | ||
1397 | #define CKEN_STUART (5) /* STUART Unit Clock Enable */ | ||
1398 | #define CKEN_HWUART (4) /* HWUART Unit Clock Enable */ | ||
1399 | #define CKEN_SSP3 (4) /* SSP3 Unit Clock Enable */ | ||
1400 | #define CKEN_SSP (3) /* SSP Unit Clock Enable */ | ||
1401 | #define CKEN_SSP2 (3) /* SSP2 Unit Clock Enable */ | ||
1402 | #define CKEN_AC97 (2) /* AC97 Unit Clock Enable */ | ||
1403 | #define CKEN_PWM1 (1) /* PWM1 Clock Enable */ | ||
1404 | #define CKEN_PWM0 (0) /* PWM0 Clock Enable */ | ||
1405 | |||
1406 | #define OSCC_OON (1 << 1) /* 32.768kHz OON (write-once only bit) */ | ||
1407 | #define OSCC_OOK (1 << 0) /* 32.768kHz OOK (read-only bit) */ | ||
1408 | |||
1409 | #ifdef CONFIG_PXA27x | 843 | #ifdef CONFIG_PXA27x |
1410 | 844 | ||
1411 | /* Camera Interface */ | 845 | /* Camera Interface */ |
diff --git a/include/asm-arm/arch-pxa/pxa25x-udc.h b/include/asm-arm/arch-pxa/pxa25x-udc.h new file mode 100644 index 000000000000..840305916b6d --- /dev/null +++ b/include/asm-arm/arch-pxa/pxa25x-udc.h | |||
@@ -0,0 +1,163 @@ | |||
1 | #ifndef _ASM_ARCH_PXA25X_UDC_H | ||
2 | #define _ASM_ARCH_PXA25X_UDC_H | ||
3 | |||
4 | #ifdef _ASM_ARCH_PXA27X_UDC_H | ||
5 | #error You can't include both PXA25x and PXA27x UDC support | ||
6 | #endif | ||
7 | |||
8 | #define UDC_RES1 __REG(0x40600004) /* UDC Undocumented - Reserved1 */ | ||
9 | #define UDC_RES2 __REG(0x40600008) /* UDC Undocumented - Reserved2 */ | ||
10 | #define UDC_RES3 __REG(0x4060000C) /* UDC Undocumented - Reserved3 */ | ||
11 | |||
12 | #define UDCCR __REG(0x40600000) /* UDC Control Register */ | ||
13 | #define UDCCR_UDE (1 << 0) /* UDC enable */ | ||
14 | #define UDCCR_UDA (1 << 1) /* UDC active */ | ||
15 | #define UDCCR_RSM (1 << 2) /* Device resume */ | ||
16 | #define UDCCR_RESIR (1 << 3) /* Resume interrupt request */ | ||
17 | #define UDCCR_SUSIR (1 << 4) /* Suspend interrupt request */ | ||
18 | #define UDCCR_SRM (1 << 5) /* Suspend/resume interrupt mask */ | ||
19 | #define UDCCR_RSTIR (1 << 6) /* Reset interrupt request */ | ||
20 | #define UDCCR_REM (1 << 7) /* Reset interrupt mask */ | ||
21 | |||
22 | #define UDCCS0 __REG(0x40600010) /* UDC Endpoint 0 Control/Status Register */ | ||
23 | #define UDCCS0_OPR (1 << 0) /* OUT packet ready */ | ||
24 | #define UDCCS0_IPR (1 << 1) /* IN packet ready */ | ||
25 | #define UDCCS0_FTF (1 << 2) /* Flush Tx FIFO */ | ||
26 | #define UDCCS0_DRWF (1 << 3) /* Device remote wakeup feature */ | ||
27 | #define UDCCS0_SST (1 << 4) /* Sent stall */ | ||
28 | #define UDCCS0_FST (1 << 5) /* Force stall */ | ||
29 | #define UDCCS0_RNE (1 << 6) /* Receive FIFO no empty */ | ||
30 | #define UDCCS0_SA (1 << 7) /* Setup active */ | ||
31 | |||
32 | /* Bulk IN - Endpoint 1,6,11 */ | ||
33 | #define UDCCS1 __REG(0x40600014) /* UDC Endpoint 1 (IN) Control/Status Register */ | ||
34 | #define UDCCS6 __REG(0x40600028) /* UDC Endpoint 6 (IN) Control/Status Register */ | ||
35 | #define UDCCS11 __REG(0x4060003C) /* UDC Endpoint 11 (IN) Control/Status Register */ | ||
36 | |||
37 | #define UDCCS_BI_TFS (1 << 0) /* Transmit FIFO service */ | ||
38 | #define UDCCS_BI_TPC (1 << 1) /* Transmit packet complete */ | ||
39 | #define UDCCS_BI_FTF (1 << 2) /* Flush Tx FIFO */ | ||
40 | #define UDCCS_BI_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
41 | #define UDCCS_BI_SST (1 << 4) /* Sent stall */ | ||
42 | #define UDCCS_BI_FST (1 << 5) /* Force stall */ | ||
43 | #define UDCCS_BI_TSP (1 << 7) /* Transmit short packet */ | ||
44 | |||
45 | /* Bulk OUT - Endpoint 2,7,12 */ | ||
46 | #define UDCCS2 __REG(0x40600018) /* UDC Endpoint 2 (OUT) Control/Status Register */ | ||
47 | #define UDCCS7 __REG(0x4060002C) /* UDC Endpoint 7 (OUT) Control/Status Register */ | ||
48 | #define UDCCS12 __REG(0x40600040) /* UDC Endpoint 12 (OUT) Control/Status Register */ | ||
49 | |||
50 | #define UDCCS_BO_RFS (1 << 0) /* Receive FIFO service */ | ||
51 | #define UDCCS_BO_RPC (1 << 1) /* Receive packet complete */ | ||
52 | #define UDCCS_BO_DME (1 << 3) /* DMA enable */ | ||
53 | #define UDCCS_BO_SST (1 << 4) /* Sent stall */ | ||
54 | #define UDCCS_BO_FST (1 << 5) /* Force stall */ | ||
55 | #define UDCCS_BO_RNE (1 << 6) /* Receive FIFO not empty */ | ||
56 | #define UDCCS_BO_RSP (1 << 7) /* Receive short packet */ | ||
57 | |||
58 | /* Isochronous IN - Endpoint 3,8,13 */ | ||
59 | #define UDCCS3 __REG(0x4060001C) /* UDC Endpoint 3 (IN) Control/Status Register */ | ||
60 | #define UDCCS8 __REG(0x40600030) /* UDC Endpoint 8 (IN) Control/Status Register */ | ||
61 | #define UDCCS13 __REG(0x40600044) /* UDC Endpoint 13 (IN) Control/Status Register */ | ||
62 | |||
63 | #define UDCCS_II_TFS (1 << 0) /* Transmit FIFO service */ | ||
64 | #define UDCCS_II_TPC (1 << 1) /* Transmit packet complete */ | ||
65 | #define UDCCS_II_FTF (1 << 2) /* Flush Tx FIFO */ | ||
66 | #define UDCCS_II_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
67 | #define UDCCS_II_TSP (1 << 7) /* Transmit short packet */ | ||
68 | |||
69 | /* Isochronous OUT - Endpoint 4,9,14 */ | ||
70 | #define UDCCS4 __REG(0x40600020) /* UDC Endpoint 4 (OUT) Control/Status Register */ | ||
71 | #define UDCCS9 __REG(0x40600034) /* UDC Endpoint 9 (OUT) Control/Status Register */ | ||
72 | #define UDCCS14 __REG(0x40600048) /* UDC Endpoint 14 (OUT) Control/Status Register */ | ||
73 | |||
74 | #define UDCCS_IO_RFS (1 << 0) /* Receive FIFO service */ | ||
75 | #define UDCCS_IO_RPC (1 << 1) /* Receive packet complete */ | ||
76 | #define UDCCS_IO_ROF (1 << 2) /* Receive overflow */ | ||
77 | #define UDCCS_IO_DME (1 << 3) /* DMA enable */ | ||
78 | #define UDCCS_IO_RNE (1 << 6) /* Receive FIFO not empty */ | ||
79 | #define UDCCS_IO_RSP (1 << 7) /* Receive short packet */ | ||
80 | |||
81 | /* Interrupt IN - Endpoint 5,10,15 */ | ||
82 | #define UDCCS5 __REG(0x40600024) /* UDC Endpoint 5 (Interrupt) Control/Status Register */ | ||
83 | #define UDCCS10 __REG(0x40600038) /* UDC Endpoint 10 (Interrupt) Control/Status Register */ | ||
84 | #define UDCCS15 __REG(0x4060004C) /* UDC Endpoint 15 (Interrupt) Control/Status Register */ | ||
85 | |||
86 | #define UDCCS_INT_TFS (1 << 0) /* Transmit FIFO service */ | ||
87 | #define UDCCS_INT_TPC (1 << 1) /* Transmit packet complete */ | ||
88 | #define UDCCS_INT_FTF (1 << 2) /* Flush Tx FIFO */ | ||
89 | #define UDCCS_INT_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
90 | #define UDCCS_INT_SST (1 << 4) /* Sent stall */ | ||
91 | #define UDCCS_INT_FST (1 << 5) /* Force stall */ | ||
92 | #define UDCCS_INT_TSP (1 << 7) /* Transmit short packet */ | ||
93 | |||
94 | #define UFNRH __REG(0x40600060) /* UDC Frame Number Register High */ | ||
95 | #define UFNRL __REG(0x40600064) /* UDC Frame Number Register Low */ | ||
96 | #define UBCR2 __REG(0x40600068) /* UDC Byte Count Reg 2 */ | ||
97 | #define UBCR4 __REG(0x4060006c) /* UDC Byte Count Reg 4 */ | ||
98 | #define UBCR7 __REG(0x40600070) /* UDC Byte Count Reg 7 */ | ||
99 | #define UBCR9 __REG(0x40600074) /* UDC Byte Count Reg 9 */ | ||
100 | #define UBCR12 __REG(0x40600078) /* UDC Byte Count Reg 12 */ | ||
101 | #define UBCR14 __REG(0x4060007c) /* UDC Byte Count Reg 14 */ | ||
102 | #define UDDR0 __REG(0x40600080) /* UDC Endpoint 0 Data Register */ | ||
103 | #define UDDR1 __REG(0x40600100) /* UDC Endpoint 1 Data Register */ | ||
104 | #define UDDR2 __REG(0x40600180) /* UDC Endpoint 2 Data Register */ | ||
105 | #define UDDR3 __REG(0x40600200) /* UDC Endpoint 3 Data Register */ | ||
106 | #define UDDR4 __REG(0x40600400) /* UDC Endpoint 4 Data Register */ | ||
107 | #define UDDR5 __REG(0x406000A0) /* UDC Endpoint 5 Data Register */ | ||
108 | #define UDDR6 __REG(0x40600600) /* UDC Endpoint 6 Data Register */ | ||
109 | #define UDDR7 __REG(0x40600680) /* UDC Endpoint 7 Data Register */ | ||
110 | #define UDDR8 __REG(0x40600700) /* UDC Endpoint 8 Data Register */ | ||
111 | #define UDDR9 __REG(0x40600900) /* UDC Endpoint 9 Data Register */ | ||
112 | #define UDDR10 __REG(0x406000C0) /* UDC Endpoint 10 Data Register */ | ||
113 | #define UDDR11 __REG(0x40600B00) /* UDC Endpoint 11 Data Register */ | ||
114 | #define UDDR12 __REG(0x40600B80) /* UDC Endpoint 12 Data Register */ | ||
115 | #define UDDR13 __REG(0x40600C00) /* UDC Endpoint 13 Data Register */ | ||
116 | #define UDDR14 __REG(0x40600E00) /* UDC Endpoint 14 Data Register */ | ||
117 | #define UDDR15 __REG(0x406000E0) /* UDC Endpoint 15 Data Register */ | ||
118 | |||
119 | #define UICR0 __REG(0x40600050) /* UDC Interrupt Control Register 0 */ | ||
120 | |||
121 | #define UICR0_IM0 (1 << 0) /* Interrupt mask ep 0 */ | ||
122 | #define UICR0_IM1 (1 << 1) /* Interrupt mask ep 1 */ | ||
123 | #define UICR0_IM2 (1 << 2) /* Interrupt mask ep 2 */ | ||
124 | #define UICR0_IM3 (1 << 3) /* Interrupt mask ep 3 */ | ||
125 | #define UICR0_IM4 (1 << 4) /* Interrupt mask ep 4 */ | ||
126 | #define UICR0_IM5 (1 << 5) /* Interrupt mask ep 5 */ | ||
127 | #define UICR0_IM6 (1 << 6) /* Interrupt mask ep 6 */ | ||
128 | #define UICR0_IM7 (1 << 7) /* Interrupt mask ep 7 */ | ||
129 | |||
130 | #define UICR1 __REG(0x40600054) /* UDC Interrupt Control Register 1 */ | ||
131 | |||
132 | #define UICR1_IM8 (1 << 0) /* Interrupt mask ep 8 */ | ||
133 | #define UICR1_IM9 (1 << 1) /* Interrupt mask ep 9 */ | ||
134 | #define UICR1_IM10 (1 << 2) /* Interrupt mask ep 10 */ | ||
135 | #define UICR1_IM11 (1 << 3) /* Interrupt mask ep 11 */ | ||
136 | #define UICR1_IM12 (1 << 4) /* Interrupt mask ep 12 */ | ||
137 | #define UICR1_IM13 (1 << 5) /* Interrupt mask ep 13 */ | ||
138 | #define UICR1_IM14 (1 << 6) /* Interrupt mask ep 14 */ | ||
139 | #define UICR1_IM15 (1 << 7) /* Interrupt mask ep 15 */ | ||
140 | |||
141 | #define USIR0 __REG(0x40600058) /* UDC Status Interrupt Register 0 */ | ||
142 | |||
143 | #define USIR0_IR0 (1 << 0) /* Interrupt request ep 0 */ | ||
144 | #define USIR0_IR1 (1 << 1) /* Interrupt request ep 1 */ | ||
145 | #define USIR0_IR2 (1 << 2) /* Interrupt request ep 2 */ | ||
146 | #define USIR0_IR3 (1 << 3) /* Interrupt request ep 3 */ | ||
147 | #define USIR0_IR4 (1 << 4) /* Interrupt request ep 4 */ | ||
148 | #define USIR0_IR5 (1 << 5) /* Interrupt request ep 5 */ | ||
149 | #define USIR0_IR6 (1 << 6) /* Interrupt request ep 6 */ | ||
150 | #define USIR0_IR7 (1 << 7) /* Interrupt request ep 7 */ | ||
151 | |||
152 | #define USIR1 __REG(0x4060005C) /* UDC Status Interrupt Register 1 */ | ||
153 | |||
154 | #define USIR1_IR8 (1 << 0) /* Interrupt request ep 8 */ | ||
155 | #define USIR1_IR9 (1 << 1) /* Interrupt request ep 9 */ | ||
156 | #define USIR1_IR10 (1 << 2) /* Interrupt request ep 10 */ | ||
157 | #define USIR1_IR11 (1 << 3) /* Interrupt request ep 11 */ | ||
158 | #define USIR1_IR12 (1 << 4) /* Interrupt request ep 12 */ | ||
159 | #define USIR1_IR13 (1 << 5) /* Interrupt request ep 13 */ | ||
160 | #define USIR1_IR14 (1 << 6) /* Interrupt request ep 14 */ | ||
161 | #define USIR1_IR15 (1 << 7) /* Interrupt request ep 15 */ | ||
162 | |||
163 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/pxa27x-udc.h b/include/asm-arm/arch-pxa/pxa27x-udc.h new file mode 100644 index 000000000000..bc1cf7d0773a --- /dev/null +++ b/include/asm-arm/arch-pxa/pxa27x-udc.h | |||
@@ -0,0 +1,257 @@ | |||
1 | #ifndef _ASM_ARCH_PXA27X_UDC_H | ||
2 | #define _ASM_ARCH_PXA27X_UDC_H | ||
3 | |||
4 | #ifdef _ASM_ARCH_PXA25X_UDC_H | ||
5 | #error You cannot include both PXA25x and PXA27x UDC support | ||
6 | #endif | ||
7 | |||
8 | #define UDCCR __REG(0x40600000) /* UDC Control Register */ | ||
9 | #define UDCCR_OEN (1 << 31) /* On-the-Go Enable */ | ||
10 | #define UDCCR_AALTHNP (1 << 30) /* A-device Alternate Host Negotiation | ||
11 | Protocol Port Support */ | ||
12 | #define UDCCR_AHNP (1 << 29) /* A-device Host Negotiation Protocol | ||
13 | Support */ | ||
14 | #define UDCCR_BHNP (1 << 28) /* B-device Host Negotiation Protocol | ||
15 | Enable */ | ||
16 | #define UDCCR_DWRE (1 << 16) /* Device Remote Wake-up Enable */ | ||
17 | #define UDCCR_ACN (0x03 << 11) /* Active UDC configuration Number */ | ||
18 | #define UDCCR_ACN_S 11 | ||
19 | #define UDCCR_AIN (0x07 << 8) /* Active UDC interface Number */ | ||
20 | #define UDCCR_AIN_S 8 | ||
21 | #define UDCCR_AAISN (0x07 << 5) /* Active UDC Alternate Interface | ||
22 | Setting Number */ | ||
23 | #define UDCCR_AAISN_S 5 | ||
24 | #define UDCCR_SMAC (1 << 4) /* Switch Endpoint Memory to Active | ||
25 | Configuration */ | ||
26 | #define UDCCR_EMCE (1 << 3) /* Endpoint Memory Configuration | ||
27 | Error */ | ||
28 | #define UDCCR_UDR (1 << 2) /* UDC Resume */ | ||
29 | #define UDCCR_UDA (1 << 1) /* UDC Active */ | ||
30 | #define UDCCR_UDE (1 << 0) /* UDC Enable */ | ||
31 | |||
32 | #define UDCICR0 __REG(0x40600004) /* UDC Interrupt Control Register0 */ | ||
33 | #define UDCICR1 __REG(0x40600008) /* UDC Interrupt Control Register1 */ | ||
34 | #define UDCICR_FIFOERR (1 << 1) /* FIFO Error interrupt for EP */ | ||
35 | #define UDCICR_PKTCOMPL (1 << 0) /* Packet Complete interrupt for EP */ | ||
36 | |||
37 | #define UDC_INT_FIFOERROR (0x2) | ||
38 | #define UDC_INT_PACKETCMP (0x1) | ||
39 | |||
40 | #define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2)) | ||
41 | #define UDCICR1_IECC (1 << 31) /* IntEn - Configuration Change */ | ||
42 | #define UDCICR1_IESOF (1 << 30) /* IntEn - Start of Frame */ | ||
43 | #define UDCICR1_IERU (1 << 29) /* IntEn - Resume */ | ||
44 | #define UDCICR1_IESU (1 << 28) /* IntEn - Suspend */ | ||
45 | #define UDCICR1_IERS (1 << 27) /* IntEn - Reset */ | ||
46 | |||
47 | #define UDCISR0 __REG(0x4060000C) /* UDC Interrupt Status Register 0 */ | ||
48 | #define UDCISR1 __REG(0x40600010) /* UDC Interrupt Status Register 1 */ | ||
49 | #define UDCISR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2)) | ||
50 | #define UDCISR1_IRCC (1 << 31) /* IntReq - Configuration Change */ | ||
51 | #define UDCISR1_IRSOF (1 << 30) /* IntReq - Start of Frame */ | ||
52 | #define UDCISR1_IRRU (1 << 29) /* IntReq - Resume */ | ||
53 | #define UDCISR1_IRSU (1 << 28) /* IntReq - Suspend */ | ||
54 | #define UDCISR1_IRRS (1 << 27) /* IntReq - Reset */ | ||
55 | |||
56 | #define UDCFNR __REG(0x40600014) /* UDC Frame Number Register */ | ||
57 | #define UDCOTGICR __REG(0x40600018) /* UDC On-The-Go interrupt control */ | ||
58 | #define UDCOTGICR_IESF (1 << 24) /* OTG SET_FEATURE command recvd */ | ||
59 | #define UDCOTGICR_IEXR (1 << 17) /* Extra Transciever Interrupt | ||
60 | Rising Edge Interrupt Enable */ | ||
61 | #define UDCOTGICR_IEXF (1 << 16) /* Extra Transciever Interrupt | ||
62 | Falling Edge Interrupt Enable */ | ||
63 | #define UDCOTGICR_IEVV40R (1 << 9) /* OTG Vbus Valid 4.0V Rising Edge | ||
64 | Interrupt Enable */ | ||
65 | #define UDCOTGICR_IEVV40F (1 << 8) /* OTG Vbus Valid 4.0V Falling Edge | ||
66 | Interrupt Enable */ | ||
67 | #define UDCOTGICR_IEVV44R (1 << 7) /* OTG Vbus Valid 4.4V Rising Edge | ||
68 | Interrupt Enable */ | ||
69 | #define UDCOTGICR_IEVV44F (1 << 6) /* OTG Vbus Valid 4.4V Falling Edge | ||
70 | Interrupt Enable */ | ||
71 | #define UDCOTGICR_IESVR (1 << 5) /* OTG Session Valid Rising Edge | ||
72 | Interrupt Enable */ | ||
73 | #define UDCOTGICR_IESVF (1 << 4) /* OTG Session Valid Falling Edge | ||
74 | Interrupt Enable */ | ||
75 | #define UDCOTGICR_IESDR (1 << 3) /* OTG A-Device SRP Detect Rising | ||
76 | Edge Interrupt Enable */ | ||
77 | #define UDCOTGICR_IESDF (1 << 2) /* OTG A-Device SRP Detect Falling | ||
78 | Edge Interrupt Enable */ | ||
79 | #define UDCOTGICR_IEIDR (1 << 1) /* OTG ID Change Rising Edge | ||
80 | Interrupt Enable */ | ||
81 | #define UDCOTGICR_IEIDF (1 << 0) /* OTG ID Change Falling Edge | ||
82 | Interrupt Enable */ | ||
83 | |||
84 | #define UP2OCR __REG(0x40600020) /* USB Port 2 Output Control register */ | ||
85 | #define UP3OCR __REG(0x40600024) /* USB Port 2 Output Control register */ | ||
86 | |||
87 | #define UP2OCR_CPVEN (1 << 0) /* Charge Pump Vbus Enable */ | ||
88 | #define UP2OCR_CPVPE (1 << 1) /* Charge Pump Vbus Pulse Enable */ | ||
89 | #define UP2OCR_DPPDE (1 << 2) /* Host Port 2 Transceiver D+ Pull Down Enable */ | ||
90 | #define UP2OCR_DMPDE (1 << 3) /* Host Port 2 Transceiver D- Pull Down Enable */ | ||
91 | #define UP2OCR_DPPUE (1 << 4) /* Host Port 2 Transceiver D+ Pull Up Enable */ | ||
92 | #define UP2OCR_DMPUE (1 << 5) /* Host Port 2 Transceiver D- Pull Up Enable */ | ||
93 | #define UP2OCR_DPPUBE (1 << 6) /* Host Port 2 Transceiver D+ Pull Up Bypass Enable */ | ||
94 | #define UP2OCR_DMPUBE (1 << 7) /* Host Port 2 Transceiver D- Pull Up Bypass Enable */ | ||
95 | #define UP2OCR_EXSP (1 << 8) /* External Transceiver Speed Control */ | ||
96 | #define UP2OCR_EXSUS (1 << 9) /* External Transceiver Speed Enable */ | ||
97 | #define UP2OCR_IDON (1 << 10) /* OTG ID Read Enable */ | ||
98 | #define UP2OCR_HXS (1 << 16) /* Host Port 2 Transceiver Output Select */ | ||
99 | #define UP2OCR_HXOE (1 << 17) /* Host Port 2 Transceiver Output Enable */ | ||
100 | #define UP2OCR_SEOS (1 << 24) /* Single-Ended Output Select */ | ||
101 | |||
102 | #define UDCCSN(x) __REG2(0x40600100, (x) << 2) | ||
103 | #define UDCCSR0 __REG(0x40600100) /* UDC Control/Status register - Endpoint 0 */ | ||
104 | #define UDCCSR0_SA (1 << 7) /* Setup Active */ | ||
105 | #define UDCCSR0_RNE (1 << 6) /* Receive FIFO Not Empty */ | ||
106 | #define UDCCSR0_FST (1 << 5) /* Force Stall */ | ||
107 | #define UDCCSR0_SST (1 << 4) /* Sent Stall */ | ||
108 | #define UDCCSR0_DME (1 << 3) /* DMA Enable */ | ||
109 | #define UDCCSR0_FTF (1 << 2) /* Flush Transmit FIFO */ | ||
110 | #define UDCCSR0_IPR (1 << 1) /* IN Packet Ready */ | ||
111 | #define UDCCSR0_OPC (1 << 0) /* OUT Packet Complete */ | ||
112 | |||
113 | #define UDCCSRA __REG(0x40600104) /* UDC Control/Status register - Endpoint A */ | ||
114 | #define UDCCSRB __REG(0x40600108) /* UDC Control/Status register - Endpoint B */ | ||
115 | #define UDCCSRC __REG(0x4060010C) /* UDC Control/Status register - Endpoint C */ | ||
116 | #define UDCCSRD __REG(0x40600110) /* UDC Control/Status register - Endpoint D */ | ||
117 | #define UDCCSRE __REG(0x40600114) /* UDC Control/Status register - Endpoint E */ | ||
118 | #define UDCCSRF __REG(0x40600118) /* UDC Control/Status register - Endpoint F */ | ||
119 | #define UDCCSRG __REG(0x4060011C) /* UDC Control/Status register - Endpoint G */ | ||
120 | #define UDCCSRH __REG(0x40600120) /* UDC Control/Status register - Endpoint H */ | ||
121 | #define UDCCSRI __REG(0x40600124) /* UDC Control/Status register - Endpoint I */ | ||
122 | #define UDCCSRJ __REG(0x40600128) /* UDC Control/Status register - Endpoint J */ | ||
123 | #define UDCCSRK __REG(0x4060012C) /* UDC Control/Status register - Endpoint K */ | ||
124 | #define UDCCSRL __REG(0x40600130) /* UDC Control/Status register - Endpoint L */ | ||
125 | #define UDCCSRM __REG(0x40600134) /* UDC Control/Status register - Endpoint M */ | ||
126 | #define UDCCSRN __REG(0x40600138) /* UDC Control/Status register - Endpoint N */ | ||
127 | #define UDCCSRP __REG(0x4060013C) /* UDC Control/Status register - Endpoint P */ | ||
128 | #define UDCCSRQ __REG(0x40600140) /* UDC Control/Status register - Endpoint Q */ | ||
129 | #define UDCCSRR __REG(0x40600144) /* UDC Control/Status register - Endpoint R */ | ||
130 | #define UDCCSRS __REG(0x40600148) /* UDC Control/Status register - Endpoint S */ | ||
131 | #define UDCCSRT __REG(0x4060014C) /* UDC Control/Status register - Endpoint T */ | ||
132 | #define UDCCSRU __REG(0x40600150) /* UDC Control/Status register - Endpoint U */ | ||
133 | #define UDCCSRV __REG(0x40600154) /* UDC Control/Status register - Endpoint V */ | ||
134 | #define UDCCSRW __REG(0x40600158) /* UDC Control/Status register - Endpoint W */ | ||
135 | #define UDCCSRX __REG(0x4060015C) /* UDC Control/Status register - Endpoint X */ | ||
136 | |||
137 | #define UDCCSR_DPE (1 << 9) /* Data Packet Error */ | ||
138 | #define UDCCSR_FEF (1 << 8) /* Flush Endpoint FIFO */ | ||
139 | #define UDCCSR_SP (1 << 7) /* Short Packet Control/Status */ | ||
140 | #define UDCCSR_BNE (1 << 6) /* Buffer Not Empty (IN endpoints) */ | ||
141 | #define UDCCSR_BNF (1 << 6) /* Buffer Not Full (OUT endpoints) */ | ||
142 | #define UDCCSR_FST (1 << 5) /* Force STALL */ | ||
143 | #define UDCCSR_SST (1 << 4) /* Sent STALL */ | ||
144 | #define UDCCSR_DME (1 << 3) /* DMA Enable */ | ||
145 | #define UDCCSR_TRN (1 << 2) /* Tx/Rx NAK */ | ||
146 | #define UDCCSR_PC (1 << 1) /* Packet Complete */ | ||
147 | #define UDCCSR_FS (1 << 0) /* FIFO needs service */ | ||
148 | |||
149 | #define UDCBCN(x) __REG2(0x40600200, (x)<<2) | ||
150 | #define UDCBCR0 __REG(0x40600200) /* Byte Count Register - EP0 */ | ||
151 | #define UDCBCRA __REG(0x40600204) /* Byte Count Register - EPA */ | ||
152 | #define UDCBCRB __REG(0x40600208) /* Byte Count Register - EPB */ | ||
153 | #define UDCBCRC __REG(0x4060020C) /* Byte Count Register - EPC */ | ||
154 | #define UDCBCRD __REG(0x40600210) /* Byte Count Register - EPD */ | ||
155 | #define UDCBCRE __REG(0x40600214) /* Byte Count Register - EPE */ | ||
156 | #define UDCBCRF __REG(0x40600218) /* Byte Count Register - EPF */ | ||
157 | #define UDCBCRG __REG(0x4060021C) /* Byte Count Register - EPG */ | ||
158 | #define UDCBCRH __REG(0x40600220) /* Byte Count Register - EPH */ | ||
159 | #define UDCBCRI __REG(0x40600224) /* Byte Count Register - EPI */ | ||
160 | #define UDCBCRJ __REG(0x40600228) /* Byte Count Register - EPJ */ | ||
161 | #define UDCBCRK __REG(0x4060022C) /* Byte Count Register - EPK */ | ||
162 | #define UDCBCRL __REG(0x40600230) /* Byte Count Register - EPL */ | ||
163 | #define UDCBCRM __REG(0x40600234) /* Byte Count Register - EPM */ | ||
164 | #define UDCBCRN __REG(0x40600238) /* Byte Count Register - EPN */ | ||
165 | #define UDCBCRP __REG(0x4060023C) /* Byte Count Register - EPP */ | ||
166 | #define UDCBCRQ __REG(0x40600240) /* Byte Count Register - EPQ */ | ||
167 | #define UDCBCRR __REG(0x40600244) /* Byte Count Register - EPR */ | ||
168 | #define UDCBCRS __REG(0x40600248) /* Byte Count Register - EPS */ | ||
169 | #define UDCBCRT __REG(0x4060024C) /* Byte Count Register - EPT */ | ||
170 | #define UDCBCRU __REG(0x40600250) /* Byte Count Register - EPU */ | ||
171 | #define UDCBCRV __REG(0x40600254) /* Byte Count Register - EPV */ | ||
172 | #define UDCBCRW __REG(0x40600258) /* Byte Count Register - EPW */ | ||
173 | #define UDCBCRX __REG(0x4060025C) /* Byte Count Register - EPX */ | ||
174 | |||
175 | #define UDCDN(x) __REG2(0x40600300, (x)<<2) | ||
176 | #define PHYS_UDCDN(x) (0x40600300 + ((x)<<2)) | ||
177 | #define PUDCDN(x) (volatile u32 *)(io_p2v(PHYS_UDCDN((x)))) | ||
178 | #define UDCDR0 __REG(0x40600300) /* Data Register - EP0 */ | ||
179 | #define UDCDRA __REG(0x40600304) /* Data Register - EPA */ | ||
180 | #define UDCDRB __REG(0x40600308) /* Data Register - EPB */ | ||
181 | #define UDCDRC __REG(0x4060030C) /* Data Register - EPC */ | ||
182 | #define UDCDRD __REG(0x40600310) /* Data Register - EPD */ | ||
183 | #define UDCDRE __REG(0x40600314) /* Data Register - EPE */ | ||
184 | #define UDCDRF __REG(0x40600318) /* Data Register - EPF */ | ||
185 | #define UDCDRG __REG(0x4060031C) /* Data Register - EPG */ | ||
186 | #define UDCDRH __REG(0x40600320) /* Data Register - EPH */ | ||
187 | #define UDCDRI __REG(0x40600324) /* Data Register - EPI */ | ||
188 | #define UDCDRJ __REG(0x40600328) /* Data Register - EPJ */ | ||
189 | #define UDCDRK __REG(0x4060032C) /* Data Register - EPK */ | ||
190 | #define UDCDRL __REG(0x40600330) /* Data Register - EPL */ | ||
191 | #define UDCDRM __REG(0x40600334) /* Data Register - EPM */ | ||
192 | #define UDCDRN __REG(0x40600338) /* Data Register - EPN */ | ||
193 | #define UDCDRP __REG(0x4060033C) /* Data Register - EPP */ | ||
194 | #define UDCDRQ __REG(0x40600340) /* Data Register - EPQ */ | ||
195 | #define UDCDRR __REG(0x40600344) /* Data Register - EPR */ | ||
196 | #define UDCDRS __REG(0x40600348) /* Data Register - EPS */ | ||
197 | #define UDCDRT __REG(0x4060034C) /* Data Register - EPT */ | ||
198 | #define UDCDRU __REG(0x40600350) /* Data Register - EPU */ | ||
199 | #define UDCDRV __REG(0x40600354) /* Data Register - EPV */ | ||
200 | #define UDCDRW __REG(0x40600358) /* Data Register - EPW */ | ||
201 | #define UDCDRX __REG(0x4060035C) /* Data Register - EPX */ | ||
202 | |||
203 | #define UDCCN(x) __REG2(0x40600400, (x)<<2) | ||
204 | #define UDCCRA __REG(0x40600404) /* Configuration register EPA */ | ||
205 | #define UDCCRB __REG(0x40600408) /* Configuration register EPB */ | ||
206 | #define UDCCRC __REG(0x4060040C) /* Configuration register EPC */ | ||
207 | #define UDCCRD __REG(0x40600410) /* Configuration register EPD */ | ||
208 | #define UDCCRE __REG(0x40600414) /* Configuration register EPE */ | ||
209 | #define UDCCRF __REG(0x40600418) /* Configuration register EPF */ | ||
210 | #define UDCCRG __REG(0x4060041C) /* Configuration register EPG */ | ||
211 | #define UDCCRH __REG(0x40600420) /* Configuration register EPH */ | ||
212 | #define UDCCRI __REG(0x40600424) /* Configuration register EPI */ | ||
213 | #define UDCCRJ __REG(0x40600428) /* Configuration register EPJ */ | ||
214 | #define UDCCRK __REG(0x4060042C) /* Configuration register EPK */ | ||
215 | #define UDCCRL __REG(0x40600430) /* Configuration register EPL */ | ||
216 | #define UDCCRM __REG(0x40600434) /* Configuration register EPM */ | ||
217 | #define UDCCRN __REG(0x40600438) /* Configuration register EPN */ | ||
218 | #define UDCCRP __REG(0x4060043C) /* Configuration register EPP */ | ||
219 | #define UDCCRQ __REG(0x40600440) /* Configuration register EPQ */ | ||
220 | #define UDCCRR __REG(0x40600444) /* Configuration register EPR */ | ||
221 | #define UDCCRS __REG(0x40600448) /* Configuration register EPS */ | ||
222 | #define UDCCRT __REG(0x4060044C) /* Configuration register EPT */ | ||
223 | #define UDCCRU __REG(0x40600450) /* Configuration register EPU */ | ||
224 | #define UDCCRV __REG(0x40600454) /* Configuration register EPV */ | ||
225 | #define UDCCRW __REG(0x40600458) /* Configuration register EPW */ | ||
226 | #define UDCCRX __REG(0x4060045C) /* Configuration register EPX */ | ||
227 | |||
228 | #define UDCCONR_CN (0x03 << 25) /* Configuration Number */ | ||
229 | #define UDCCONR_CN_S (25) | ||
230 | #define UDCCONR_IN (0x07 << 22) /* Interface Number */ | ||
231 | #define UDCCONR_IN_S (22) | ||
232 | #define UDCCONR_AISN (0x07 << 19) /* Alternate Interface Number */ | ||
233 | #define UDCCONR_AISN_S (19) | ||
234 | #define UDCCONR_EN (0x0f << 15) /* Endpoint Number */ | ||
235 | #define UDCCONR_EN_S (15) | ||
236 | #define UDCCONR_ET (0x03 << 13) /* Endpoint Type: */ | ||
237 | #define UDCCONR_ET_S (13) | ||
238 | #define UDCCONR_ET_INT (0x03 << 13) /* Interrupt */ | ||
239 | #define UDCCONR_ET_BULK (0x02 << 13) /* Bulk */ | ||
240 | #define UDCCONR_ET_ISO (0x01 << 13) /* Isochronous */ | ||
241 | #define UDCCONR_ET_NU (0x00 << 13) /* Not used */ | ||
242 | #define UDCCONR_ED (1 << 12) /* Endpoint Direction */ | ||
243 | #define UDCCONR_MPS (0x3ff << 2) /* Maximum Packet Size */ | ||
244 | #define UDCCONR_MPS_S (2) | ||
245 | #define UDCCONR_DE (1 << 1) /* Double Buffering Enable */ | ||
246 | #define UDCCONR_EE (1 << 0) /* Endpoint Enable */ | ||
247 | |||
248 | |||
249 | #define UDC_INT_FIFOERROR (0x2) | ||
250 | #define UDC_INT_PACKETCMP (0x1) | ||
251 | |||
252 | #define UDC_FNR_MASK (0x7ff) | ||
253 | |||
254 | #define UDCCSR_WR_MASK (UDCCSR_DME|UDCCSR_FST) | ||
255 | #define UDC_BCR_MASK (0x3ff) | ||
256 | |||
257 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/pxa2xx-gpio.h b/include/asm-arm/arch-pxa/pxa2xx-gpio.h index b81cd63cb2eb..6ef1dd09970b 100644 --- a/include/asm-arm/arch-pxa/pxa2xx-gpio.h +++ b/include/asm-arm/arch-pxa/pxa2xx-gpio.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __ASM_ARCH_PXA2XX_GPIO_H | 1 | #ifndef __ASM_ARCH_PXA2XX_GPIO_H |
2 | #define __ASM_ARCH_PXA2XX_GPIO_H | 2 | #define __ASM_ARCH_PXA2XX_GPIO_H |
3 | 3 | ||
4 | #warning Please use mfp-pxa2[57]x.h instead of pxa2xx-gpio.h | ||
5 | |||
4 | /* GPIO alternate function assignments */ | 6 | /* GPIO alternate function assignments */ |
5 | 7 | ||
6 | #define GPIO1_RST 1 /* reset */ | 8 | #define GPIO1_RST 1 /* reset */ |
diff --git a/include/asm-arm/arch-pxa/pxa2xx-regs.h b/include/asm-arm/arch-pxa/pxa2xx-regs.h index 9553b54fa5bc..73e0a329cf7f 100644 --- a/include/asm-arm/arch-pxa/pxa2xx-regs.h +++ b/include/asm-arm/arch-pxa/pxa2xx-regs.h | |||
@@ -81,4 +81,166 @@ | |||
81 | 81 | ||
82 | #endif | 82 | #endif |
83 | 83 | ||
84 | |||
85 | /* | ||
86 | * Power Manager | ||
87 | */ | ||
88 | |||
89 | #define PMCR __REG(0x40F00000) /* Power Manager Control Register */ | ||
90 | #define PSSR __REG(0x40F00004) /* Power Manager Sleep Status Register */ | ||
91 | #define PSPR __REG(0x40F00008) /* Power Manager Scratch Pad Register */ | ||
92 | #define PWER __REG(0x40F0000C) /* Power Manager Wake-up Enable Register */ | ||
93 | #define PRER __REG(0x40F00010) /* Power Manager GPIO Rising-Edge Detect Enable Register */ | ||
94 | #define PFER __REG(0x40F00014) /* Power Manager GPIO Falling-Edge Detect Enable Register */ | ||
95 | #define PEDR __REG(0x40F00018) /* Power Manager GPIO Edge Detect Status Register */ | ||
96 | #define PCFR __REG(0x40F0001C) /* Power Manager General Configuration Register */ | ||
97 | #define PGSR0 __REG(0x40F00020) /* Power Manager GPIO Sleep State Register for GP[31-0] */ | ||
98 | #define PGSR1 __REG(0x40F00024) /* Power Manager GPIO Sleep State Register for GP[63-32] */ | ||
99 | #define PGSR2 __REG(0x40F00028) /* Power Manager GPIO Sleep State Register for GP[84-64] */ | ||
100 | #define PGSR3 __REG(0x40F0002C) /* Power Manager GPIO Sleep State Register for GP[118-96] */ | ||
101 | #define RCSR __REG(0x40F00030) /* Reset Controller Status Register */ | ||
102 | |||
103 | #define PSLR __REG(0x40F00034) /* Power Manager Sleep Config Register */ | ||
104 | #define PSTR __REG(0x40F00038) /* Power Manager Standby Config Register */ | ||
105 | #define PSNR __REG(0x40F0003C) /* Power Manager Sense Config Register */ | ||
106 | #define PVCR __REG(0x40F00040) /* Power Manager VoltageControl Register */ | ||
107 | #define PKWR __REG(0x40F00050) /* Power Manager KB Wake-up Enable Reg */ | ||
108 | #define PKSR __REG(0x40F00054) /* Power Manager KB Level-Detect Register */ | ||
109 | #define PCMD(x) __REG2(0x40F00080, (x)<<2) | ||
110 | #define PCMD0 __REG(0x40F00080 + 0 * 4) | ||
111 | #define PCMD1 __REG(0x40F00080 + 1 * 4) | ||
112 | #define PCMD2 __REG(0x40F00080 + 2 * 4) | ||
113 | #define PCMD3 __REG(0x40F00080 + 3 * 4) | ||
114 | #define PCMD4 __REG(0x40F00080 + 4 * 4) | ||
115 | #define PCMD5 __REG(0x40F00080 + 5 * 4) | ||
116 | #define PCMD6 __REG(0x40F00080 + 6 * 4) | ||
117 | #define PCMD7 __REG(0x40F00080 + 7 * 4) | ||
118 | #define PCMD8 __REG(0x40F00080 + 8 * 4) | ||
119 | #define PCMD9 __REG(0x40F00080 + 9 * 4) | ||
120 | #define PCMD10 __REG(0x40F00080 + 10 * 4) | ||
121 | #define PCMD11 __REG(0x40F00080 + 11 * 4) | ||
122 | #define PCMD12 __REG(0x40F00080 + 12 * 4) | ||
123 | #define PCMD13 __REG(0x40F00080 + 13 * 4) | ||
124 | #define PCMD14 __REG(0x40F00080 + 14 * 4) | ||
125 | #define PCMD15 __REG(0x40F00080 + 15 * 4) | ||
126 | #define PCMD16 __REG(0x40F00080 + 16 * 4) | ||
127 | #define PCMD17 __REG(0x40F00080 + 17 * 4) | ||
128 | #define PCMD18 __REG(0x40F00080 + 18 * 4) | ||
129 | #define PCMD19 __REG(0x40F00080 + 19 * 4) | ||
130 | #define PCMD20 __REG(0x40F00080 + 20 * 4) | ||
131 | #define PCMD21 __REG(0x40F00080 + 21 * 4) | ||
132 | #define PCMD22 __REG(0x40F00080 + 22 * 4) | ||
133 | #define PCMD23 __REG(0x40F00080 + 23 * 4) | ||
134 | #define PCMD24 __REG(0x40F00080 + 24 * 4) | ||
135 | #define PCMD25 __REG(0x40F00080 + 25 * 4) | ||
136 | #define PCMD26 __REG(0x40F00080 + 26 * 4) | ||
137 | #define PCMD27 __REG(0x40F00080 + 27 * 4) | ||
138 | #define PCMD28 __REG(0x40F00080 + 28 * 4) | ||
139 | #define PCMD29 __REG(0x40F00080 + 29 * 4) | ||
140 | #define PCMD30 __REG(0x40F00080 + 30 * 4) | ||
141 | #define PCMD31 __REG(0x40F00080 + 31 * 4) | ||
142 | |||
143 | #define PCMD_MBC (1<<12) | ||
144 | #define PCMD_DCE (1<<11) | ||
145 | #define PCMD_LC (1<<10) | ||
146 | /* FIXME: PCMD_SQC need be checked. */ | ||
147 | #define PCMD_SQC (3<<8) /* currently only bit 8 is changeable, | ||
148 | bit 9 should be 0 all day. */ | ||
149 | #define PVCR_VCSA (0x1<<14) | ||
150 | #define PVCR_CommandDelay (0xf80) | ||
151 | #define PCFR_PI2C_EN (0x1 << 6) | ||
152 | |||
153 | #define PSSR_OTGPH (1 << 6) /* OTG Peripheral control Hold */ | ||
154 | #define PSSR_RDH (1 << 5) /* Read Disable Hold */ | ||
155 | #define PSSR_PH (1 << 4) /* Peripheral Control Hold */ | ||
156 | #define PSSR_STS (1 << 3) /* Standby Mode Status */ | ||
157 | #define PSSR_VFS (1 << 2) /* VDD Fault Status */ | ||
158 | #define PSSR_BFS (1 << 1) /* Battery Fault Status */ | ||
159 | #define PSSR_SSS (1 << 0) /* Software Sleep Status */ | ||
160 | |||
161 | #define PSLR_SL_ROD (1 << 20) /* Sleep-Mode/Depp-Sleep Mode nRESET_OUT Disable */ | ||
162 | |||
163 | #define PCFR_RO (1 << 15) /* RDH Override */ | ||
164 | #define PCFR_PO (1 << 14) /* PH Override */ | ||
165 | #define PCFR_GPROD (1 << 12) /* GPIO nRESET_OUT Disable */ | ||
166 | #define PCFR_L1_EN (1 << 11) /* Sleep Mode L1 converter Enable */ | ||
167 | #define PCFR_FVC (1 << 10) /* Frequency/Voltage Change */ | ||
168 | #define PCFR_DC_EN (1 << 7) /* Sleep/deep-sleep DC-DC Converter Enable */ | ||
169 | #define PCFR_PI2CEN (1 << 6) /* Enable PI2C controller */ | ||
170 | #define PCFR_GPR_EN (1 << 4) /* nRESET_GPIO Pin Enable */ | ||
171 | #define PCFR_DS (1 << 3) /* Deep Sleep Mode */ | ||
172 | #define PCFR_FS (1 << 2) /* Float Static Chip Selects */ | ||
173 | #define PCFR_FP (1 << 1) /* Float PCMCIA controls */ | ||
174 | #define PCFR_OPDE (1 << 0) /* 3.6864 MHz oscillator power-down enable */ | ||
175 | |||
176 | #define RCSR_GPR (1 << 3) /* GPIO Reset */ | ||
177 | #define RCSR_SMR (1 << 2) /* Sleep Mode */ | ||
178 | #define RCSR_WDR (1 << 1) /* Watchdog Reset */ | ||
179 | #define RCSR_HWR (1 << 0) /* Hardware Reset */ | ||
180 | |||
181 | #define PWER_GPIO(Nb) (1 << Nb) /* GPIO [0..15] wake-up enable */ | ||
182 | #define PWER_GPIO0 PWER_GPIO (0) /* GPIO [0] wake-up enable */ | ||
183 | #define PWER_GPIO1 PWER_GPIO (1) /* GPIO [1] wake-up enable */ | ||
184 | #define PWER_GPIO2 PWER_GPIO (2) /* GPIO [2] wake-up enable */ | ||
185 | #define PWER_GPIO3 PWER_GPIO (3) /* GPIO [3] wake-up enable */ | ||
186 | #define PWER_GPIO4 PWER_GPIO (4) /* GPIO [4] wake-up enable */ | ||
187 | #define PWER_GPIO5 PWER_GPIO (5) /* GPIO [5] wake-up enable */ | ||
188 | #define PWER_GPIO6 PWER_GPIO (6) /* GPIO [6] wake-up enable */ | ||
189 | #define PWER_GPIO7 PWER_GPIO (7) /* GPIO [7] wake-up enable */ | ||
190 | #define PWER_GPIO8 PWER_GPIO (8) /* GPIO [8] wake-up enable */ | ||
191 | #define PWER_GPIO9 PWER_GPIO (9) /* GPIO [9] wake-up enable */ | ||
192 | #define PWER_GPIO10 PWER_GPIO (10) /* GPIO [10] wake-up enable */ | ||
193 | #define PWER_GPIO11 PWER_GPIO (11) /* GPIO [11] wake-up enable */ | ||
194 | #define PWER_GPIO12 PWER_GPIO (12) /* GPIO [12] wake-up enable */ | ||
195 | #define PWER_GPIO13 PWER_GPIO (13) /* GPIO [13] wake-up enable */ | ||
196 | #define PWER_GPIO14 PWER_GPIO (14) /* GPIO [14] wake-up enable */ | ||
197 | #define PWER_GPIO15 PWER_GPIO (15) /* GPIO [15] wake-up enable */ | ||
198 | #define PWER_RTC 0x80000000 /* RTC alarm wake-up enable */ | ||
199 | |||
200 | /* | ||
201 | * PXA2xx specific Core clock definitions | ||
202 | */ | ||
203 | #define CCCR __REG(0x41300000) /* Core Clock Configuration Register */ | ||
204 | #define CCSR __REG(0x4130000C) /* Core Clock Status Register */ | ||
205 | #define CKEN __REG(0x41300004) /* Clock Enable Register */ | ||
206 | #define OSCC __REG(0x41300008) /* Oscillator Configuration Register */ | ||
207 | |||
208 | #define CCCR_N_MASK 0x0380 /* Run Mode Frequency to Turbo Mode Frequency Multiplier */ | ||
209 | #define CCCR_M_MASK 0x0060 /* Memory Frequency to Run Mode Frequency Multiplier */ | ||
210 | #define CCCR_L_MASK 0x001f /* Crystal Frequency to Memory Frequency Multiplier */ | ||
211 | |||
212 | #define CKEN_AC97CONF (31) /* AC97 Controller Configuration */ | ||
213 | #define CKEN_CAMERA (24) /* Camera Interface Clock Enable */ | ||
214 | #define CKEN_SSP1 (23) /* SSP1 Unit Clock Enable */ | ||
215 | #define CKEN_MEMC (22) /* Memory Controller Clock Enable */ | ||
216 | #define CKEN_MEMSTK (21) /* Memory Stick Host Controller */ | ||
217 | #define CKEN_IM (20) /* Internal Memory Clock Enable */ | ||
218 | #define CKEN_KEYPAD (19) /* Keypad Interface Clock Enable */ | ||
219 | #define CKEN_USIM (18) /* USIM Unit Clock Enable */ | ||
220 | #define CKEN_MSL (17) /* MSL Unit Clock Enable */ | ||
221 | #define CKEN_LCD (16) /* LCD Unit Clock Enable */ | ||
222 | #define CKEN_PWRI2C (15) /* PWR I2C Unit Clock Enable */ | ||
223 | #define CKEN_I2C (14) /* I2C Unit Clock Enable */ | ||
224 | #define CKEN_FICP (13) /* FICP Unit Clock Enable */ | ||
225 | #define CKEN_MMC (12) /* MMC Unit Clock Enable */ | ||
226 | #define CKEN_USB (11) /* USB Unit Clock Enable */ | ||
227 | #define CKEN_ASSP (10) /* ASSP (SSP3) Clock Enable */ | ||
228 | #define CKEN_USBHOST (10) /* USB Host Unit Clock Enable */ | ||
229 | #define CKEN_OSTIMER (9) /* OS Timer Unit Clock Enable */ | ||
230 | #define CKEN_NSSP (9) /* NSSP (SSP2) Clock Enable */ | ||
231 | #define CKEN_I2S (8) /* I2S Unit Clock Enable */ | ||
232 | #define CKEN_BTUART (7) /* BTUART Unit Clock Enable */ | ||
233 | #define CKEN_FFUART (6) /* FFUART Unit Clock Enable */ | ||
234 | #define CKEN_STUART (5) /* STUART Unit Clock Enable */ | ||
235 | #define CKEN_HWUART (4) /* HWUART Unit Clock Enable */ | ||
236 | #define CKEN_SSP3 (4) /* SSP3 Unit Clock Enable */ | ||
237 | #define CKEN_SSP (3) /* SSP Unit Clock Enable */ | ||
238 | #define CKEN_SSP2 (3) /* SSP2 Unit Clock Enable */ | ||
239 | #define CKEN_AC97 (2) /* AC97 Unit Clock Enable */ | ||
240 | #define CKEN_PWM1 (1) /* PWM1 Clock Enable */ | ||
241 | #define CKEN_PWM0 (0) /* PWM0 Clock Enable */ | ||
242 | |||
243 | #define OSCC_OON (1 << 1) /* 32.768kHz OON (write-once only bit) */ | ||
244 | #define OSCC_OOK (1 << 0) /* 32.768kHz OOK (read-only bit) */ | ||
245 | |||
84 | #endif | 246 | #endif |
diff --git a/include/asm-arm/arch-pxa/system.h b/include/asm-arm/arch-pxa/system.h index 9aa6c2e939e8..ba7e132de1b3 100644 --- a/include/asm-arm/arch-pxa/system.h +++ b/include/asm-arm/arch-pxa/system.h | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <asm/proc-fns.h> | 13 | #include <asm/proc-fns.h> |
14 | #include "hardware.h" | 14 | #include "hardware.h" |
15 | #include "pxa2xx-regs.h" | ||
15 | #include "pxa-regs.h" | 16 | #include "pxa-regs.h" |
16 | 17 | ||
17 | static inline void arch_idle(void) | 18 | static inline void arch_idle(void) |
diff --git a/include/asm-arm/arch-pxa/zylonite.h b/include/asm-arm/arch-pxa/zylonite.h index 4881b80f0f90..de577de8d18c 100644 --- a/include/asm-arm/arch-pxa/zylonite.h +++ b/include/asm-arm/arch-pxa/zylonite.h | |||
@@ -15,7 +15,6 @@ struct platform_mmc_slot { | |||
15 | 15 | ||
16 | extern struct platform_mmc_slot zylonite_mmc_slot[]; | 16 | extern struct platform_mmc_slot zylonite_mmc_slot[]; |
17 | 17 | ||
18 | extern int gpio_backlight; | ||
19 | extern int gpio_eth_irq; | 18 | extern int gpio_eth_irq; |
20 | 19 | ||
21 | extern int wm9713_irq; | 20 | extern int wm9713_irq; |
diff --git a/include/asm-arm/arch-rpc/io.h b/include/asm-arm/arch-rpc/io.h index b4da08d7a336..6bd2295c0e01 100644 --- a/include/asm-arm/arch-rpc/io.h +++ b/include/asm-arm/arch-rpc/io.h | |||
@@ -126,7 +126,7 @@ static inline unsigned sz __in##fnsuffix (unsigned int port) \ | |||
126 | return (unsigned sz)value; \ | 126 | return (unsigned sz)value; \ |
127 | } | 127 | } |
128 | 128 | ||
129 | static inline void __iomem *__ioaddr(unsigned int port) | 129 | static inline void __iomem *__deprecated __ioaddr(unsigned int port) |
130 | { | 130 | { |
131 | void __iomem *ret; | 131 | void __iomem *ret; |
132 | if (__PORT_PCIO(port)) | 132 | if (__PORT_PCIO(port)) |
@@ -232,8 +232,7 @@ DECLARE_IO(int,l,"") | |||
232 | result; \ | 232 | result; \ |
233 | }) | 233 | }) |
234 | 234 | ||
235 | #define __ioaddrc(port) \ | 235 | #define __ioaddrc(port) __ioaddr(port) |
236 | ((__PORT_PCIO(port) ? PCIO_BASE : IO_BASE) + ((port) << 2)) | ||
237 | 236 | ||
238 | #define inb(p) (__builtin_constant_p((p)) ? __inbc(p) : __inb(p)) | 237 | #define inb(p) (__builtin_constant_p((p)) ? __inbc(p) : __inb(p)) |
239 | #define inw(p) (__builtin_constant_p((p)) ? __inwc(p) : __inw(p)) | 238 | #define inw(p) (__builtin_constant_p((p)) ? __inwc(p) : __inw(p)) |
diff --git a/include/asm-arm/arch-s3c2410/gpio.h b/include/asm-arm/arch-s3c2410/gpio.h index 7583895fd336..18e10d2c35ea 100644 --- a/include/asm-arm/arch-s3c2410/gpio.h +++ b/include/asm-arm/arch-s3c2410/gpio.h | |||
@@ -1,68 +1,18 @@ | |||
1 | /* | 1 | /* linux/include/asm-arm/arch-s3c2410/gpio.h |
2 | * linux/include/asm-arm/arch-s3c2410/gpio.h | ||
3 | * | 2 | * |
4 | * S3C2410 GPIO wrappers for arch-neutral GPIO calls | 3 | * Copyright (c) 2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | 6 | * |
6 | * Written by Philipp Zabel <philipp.zabel@gmail.com> | 7 | * S3C2410 - GPIO lib support |
7 | * | 8 | * |
8 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 10 | * it under the terms of the GNU General Public License version 2 as |
10 | * the Free Software Foundation; either version 2 of the License, or | 11 | * published by the Free Software Foundation. |
11 | * (at your option) any later version. | 12 | */ |
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | #ifndef __ASM_ARCH_S3C2410_GPIO_H | ||
25 | #define __ASM_ARCH_S3C2410_GPIO_H | ||
26 | |||
27 | #include <asm/irq.h> | ||
28 | #include <asm/hardware.h> | ||
29 | #include <asm/arch/regs-gpio.h> | ||
30 | |||
31 | static inline int gpio_request(unsigned gpio, const char *label) | ||
32 | { | ||
33 | return 0; | ||
34 | } | ||
35 | |||
36 | static inline void gpio_free(unsigned gpio) | ||
37 | { | ||
38 | return; | ||
39 | } | ||
40 | |||
41 | static inline int gpio_direction_input(unsigned gpio) | ||
42 | { | ||
43 | s3c2410_gpio_cfgpin(gpio, S3C2410_GPIO_INPUT); | ||
44 | return 0; | ||
45 | } | ||
46 | |||
47 | static inline int gpio_direction_output(unsigned gpio, int value) | ||
48 | { | ||
49 | s3c2410_gpio_cfgpin(gpio, S3C2410_GPIO_OUTPUT); | ||
50 | /* REVISIT can we write the value first, to avoid glitching? */ | ||
51 | s3c2410_gpio_setpin(gpio, value); | ||
52 | return 0; | ||
53 | } | ||
54 | |||
55 | #define gpio_get_value(gpio) s3c2410_gpio_getpin(gpio) | ||
56 | #define gpio_set_value(gpio,value) s3c2410_gpio_setpin(gpio, value) | ||
57 | |||
58 | #include <asm-generic/gpio.h> /* cansleep wrappers */ | ||
59 | |||
60 | #ifdef CONFIG_CPU_S3C2400 | ||
61 | #define gpio_to_irq(gpio) s3c2400_gpio_getirq(gpio) | ||
62 | #else | ||
63 | #define gpio_to_irq(gpio) s3c2410_gpio_getirq(gpio) | ||
64 | #endif | ||
65 | 13 | ||
66 | /* FIXME implement irq_to_gpio() */ | 14 | #define gpio_get_value __gpio_get_value |
15 | #define gpio_set_value __gpio_set_value | ||
16 | #define gpio_cansleep __gpio_cansleep | ||
67 | 17 | ||
68 | #endif | 18 | #include <asm-generic/gpio.h> |
diff --git a/include/asm-arm/arch-s3c2410/regs-clock.h b/include/asm-arm/arch-s3c2410/regs-clock.h index ecae9e7f5e45..37661358b42b 100644 --- a/include/asm-arm/arch-s3c2410/regs-clock.h +++ b/include/asm-arm/arch-s3c2410/regs-clock.h | |||
@@ -189,6 +189,8 @@ s3c2410_get_pll(unsigned int pllval, unsigned int baseclk) | |||
189 | #define S3C2412_CLKSRC_I2SCLK_MPLL (1<<9) | 189 | #define S3C2412_CLKSRC_I2SCLK_MPLL (1<<9) |
190 | #define S3C2412_CLKSRC_USBCLK_HCLK (1<<10) | 190 | #define S3C2412_CLKSRC_USBCLK_HCLK (1<<10) |
191 | #define S3C2412_CLKSRC_CAMCLK_HCLK (1<<11) | 191 | #define S3C2412_CLKSRC_CAMCLK_HCLK (1<<11) |
192 | #define S3C2412_CLKSRC_UREFCLK_EXTCLK (1<<12) | ||
193 | #define S3C2412_CLKSRC_EREFCLK_EXTCLK (1<<14) | ||
192 | 194 | ||
193 | #endif /* CONFIG_CPU_S3C2412 | CONFIG_CPU_S3C2413 */ | 195 | #endif /* CONFIG_CPU_S3C2412 | CONFIG_CPU_S3C2413 */ |
194 | 196 | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-sdi.h b/include/asm-arm/arch-s3c2410/regs-sdi.h index bb9d30b72952..bfb222fa4abb 100644 --- a/include/asm-arm/arch-s3c2410/regs-sdi.h +++ b/include/asm-arm/arch-s3c2410/regs-sdi.h | |||
@@ -28,9 +28,15 @@ | |||
28 | #define S3C2410_SDIDCNT (0x30) | 28 | #define S3C2410_SDIDCNT (0x30) |
29 | #define S3C2410_SDIDSTA (0x34) | 29 | #define S3C2410_SDIDSTA (0x34) |
30 | #define S3C2410_SDIFSTA (0x38) | 30 | #define S3C2410_SDIFSTA (0x38) |
31 | |||
31 | #define S3C2410_SDIDATA (0x3C) | 32 | #define S3C2410_SDIDATA (0x3C) |
32 | #define S3C2410_SDIIMSK (0x40) | 33 | #define S3C2410_SDIIMSK (0x40) |
33 | 34 | ||
35 | #define S3C2440_SDIDATA (0x40) | ||
36 | #define S3C2440_SDIIMSK (0x3C) | ||
37 | |||
38 | #define S3C2440_SDICON_SDRESET (1<<8) | ||
39 | #define S3C2440_SDICON_MMCCLOCK (1<<5) | ||
34 | #define S3C2410_SDICON_BYTEORDER (1<<4) | 40 | #define S3C2410_SDICON_BYTEORDER (1<<4) |
35 | #define S3C2410_SDICON_SDIOIRQ (1<<3) | 41 | #define S3C2410_SDICON_SDIOIRQ (1<<3) |
36 | #define S3C2410_SDICON_RWAITEN (1<<2) | 42 | #define S3C2410_SDICON_RWAITEN (1<<2) |
@@ -42,7 +48,8 @@ | |||
42 | #define S3C2410_SDICMDCON_LONGRSP (1<<10) | 48 | #define S3C2410_SDICMDCON_LONGRSP (1<<10) |
43 | #define S3C2410_SDICMDCON_WAITRSP (1<<9) | 49 | #define S3C2410_SDICMDCON_WAITRSP (1<<9) |
44 | #define S3C2410_SDICMDCON_CMDSTART (1<<8) | 50 | #define S3C2410_SDICMDCON_CMDSTART (1<<8) |
45 | #define S3C2410_SDICMDCON_INDEX (0xff) | 51 | #define S3C2410_SDICMDCON_SENDERHOST (1<<6) |
52 | #define S3C2410_SDICMDCON_INDEX (0x3f) | ||
46 | 53 | ||
47 | #define S3C2410_SDICMDSTAT_CRCFAIL (1<<12) | 54 | #define S3C2410_SDICMDSTAT_CRCFAIL (1<<12) |
48 | #define S3C2410_SDICMDSTAT_CMDSENT (1<<11) | 55 | #define S3C2410_SDICMDSTAT_CMDSENT (1<<11) |
@@ -51,6 +58,9 @@ | |||
51 | #define S3C2410_SDICMDSTAT_XFERING (1<<8) | 58 | #define S3C2410_SDICMDSTAT_XFERING (1<<8) |
52 | #define S3C2410_SDICMDSTAT_INDEX (0xff) | 59 | #define S3C2410_SDICMDSTAT_INDEX (0xff) |
53 | 60 | ||
61 | #define S3C2440_SDIDCON_DS_BYTE (0<<22) | ||
62 | #define S3C2440_SDIDCON_DS_HALFWORD (1<<22) | ||
63 | #define S3C2440_SDIDCON_DS_WORD (2<<22) | ||
54 | #define S3C2410_SDIDCON_IRQPERIOD (1<<21) | 64 | #define S3C2410_SDIDCON_IRQPERIOD (1<<21) |
55 | #define S3C2410_SDIDCON_TXAFTERRESP (1<<20) | 65 | #define S3C2410_SDIDCON_TXAFTERRESP (1<<20) |
56 | #define S3C2410_SDIDCON_RXAFTERCMD (1<<19) | 66 | #define S3C2410_SDIDCON_RXAFTERCMD (1<<19) |
@@ -59,6 +69,7 @@ | |||
59 | #define S3C2410_SDIDCON_WIDEBUS (1<<16) | 69 | #define S3C2410_SDIDCON_WIDEBUS (1<<16) |
60 | #define S3C2410_SDIDCON_DMAEN (1<<15) | 70 | #define S3C2410_SDIDCON_DMAEN (1<<15) |
61 | #define S3C2410_SDIDCON_STOP (1<<14) | 71 | #define S3C2410_SDIDCON_STOP (1<<14) |
72 | #define S3C2440_SDIDCON_DATSTART (1<<14) | ||
62 | #define S3C2410_SDIDCON_DATMODE (3<<12) | 73 | #define S3C2410_SDIDCON_DATMODE (3<<12) |
63 | #define S3C2410_SDIDCON_BLKNUM (0x7ff) | 74 | #define S3C2410_SDIDCON_BLKNUM (0x7ff) |
64 | 75 | ||
@@ -68,6 +79,7 @@ | |||
68 | #define S3C2410_SDIDCON_XFER_RXSTART (2<<12) | 79 | #define S3C2410_SDIDCON_XFER_RXSTART (2<<12) |
69 | #define S3C2410_SDIDCON_XFER_TXSTART (3<<12) | 80 | #define S3C2410_SDIDCON_XFER_TXSTART (3<<12) |
70 | 81 | ||
82 | #define S3C2410_SDIDCON_BLKNUM_MASK (0xFFF) | ||
71 | #define S3C2410_SDIDCNT_BLKNUM_SHIFT (12) | 83 | #define S3C2410_SDIDCNT_BLKNUM_SHIFT (12) |
72 | 84 | ||
73 | #define S3C2410_SDIDSTA_RDYWAITREQ (1<<10) | 85 | #define S3C2410_SDIDSTA_RDYWAITREQ (1<<10) |
@@ -82,10 +94,12 @@ | |||
82 | #define S3C2410_SDIDSTA_TXDATAON (1<<1) | 94 | #define S3C2410_SDIDSTA_TXDATAON (1<<1) |
83 | #define S3C2410_SDIDSTA_RXDATAON (1<<0) | 95 | #define S3C2410_SDIDSTA_RXDATAON (1<<0) |
84 | 96 | ||
97 | #define S3C2440_SDIFSTA_FIFORESET (1<<16) | ||
98 | #define S3C2440_SDIFSTA_FIFOFAIL (3<<14) /* 3 is correct (2 bits) */ | ||
85 | #define S3C2410_SDIFSTA_TFDET (1<<13) | 99 | #define S3C2410_SDIFSTA_TFDET (1<<13) |
86 | #define S3C2410_SDIFSTA_RFDET (1<<12) | 100 | #define S3C2410_SDIFSTA_RFDET (1<<12) |
87 | #define S3C2410_SDIFSTA_TXHALF (1<<11) | 101 | #define S3C2410_SDIFSTA_TFHALF (1<<11) |
88 | #define S3C2410_SDIFSTA_TXEMPTY (1<<10) | 102 | #define S3C2410_SDIFSTA_TFEMPTY (1<<10) |
89 | #define S3C2410_SDIFSTA_RFLAST (1<<9) | 103 | #define S3C2410_SDIFSTA_RFLAST (1<<9) |
90 | #define S3C2410_SDIFSTA_RFFULL (1<<8) | 104 | #define S3C2410_SDIFSTA_RFFULL (1<<8) |
91 | #define S3C2410_SDIFSTA_RFHALF (1<<7) | 105 | #define S3C2410_SDIFSTA_RFHALF (1<<7) |
diff --git a/include/asm-arm/assembler.h b/include/asm-arm/assembler.h index fce832820825..911393b2c6f0 100644 --- a/include/asm-arm/assembler.h +++ b/include/asm-arm/assembler.h | |||
@@ -56,6 +56,21 @@ | |||
56 | #endif | 56 | #endif |
57 | 57 | ||
58 | /* | 58 | /* |
59 | * This can be used to enable code to cacheline align the destination | ||
60 | * pointer when bulk writing to memory. Experiments on StrongARM and | ||
61 | * XScale didn't show this a worthwhile thing to do when the cache is not | ||
62 | * set to write-allocate (this would need further testing on XScale when WA | ||
63 | * is used). | ||
64 | * | ||
65 | * On Feroceon there is much to gain however, regardless of cache mode. | ||
66 | */ | ||
67 | #ifdef CONFIG_CPU_FEROCEON | ||
68 | #define CALGN(code...) code | ||
69 | #else | ||
70 | #define CALGN(code...) | ||
71 | #endif | ||
72 | |||
73 | /* | ||
59 | * Enable and disable interrupts | 74 | * Enable and disable interrupts |
60 | */ | 75 | */ |
61 | #if __LINUX_ARM_ARCH__ >= 6 | 76 | #if __LINUX_ARM_ARCH__ >= 6 |
diff --git a/include/asm-arm/cacheflush.h b/include/asm-arm/cacheflush.h index 759a97b56eed..70b0fe724b62 100644 --- a/include/asm-arm/cacheflush.h +++ b/include/asm-arm/cacheflush.h | |||
@@ -95,11 +95,7 @@ | |||
95 | #endif | 95 | #endif |
96 | 96 | ||
97 | #if defined(CONFIG_CPU_FEROCEON) | 97 | #if defined(CONFIG_CPU_FEROCEON) |
98 | # ifdef _CACHE | 98 | # define MULTI_CACHE 1 |
99 | # define MULTI_CACHE 1 | ||
100 | # else | ||
101 | # define _CACHE feroceon | ||
102 | # endif | ||
103 | #endif | 99 | #endif |
104 | 100 | ||
105 | #if defined(CONFIG_CPU_V6) | 101 | #if defined(CONFIG_CPU_V6) |
@@ -410,6 +406,13 @@ extern void flush_dcache_page(struct page *); | |||
410 | 406 | ||
411 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); | 407 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); |
412 | 408 | ||
409 | static inline void __flush_icache_all(void) | ||
410 | { | ||
411 | asm("mcr p15, 0, %0, c7, c5, 0 @ invalidate I-cache\n" | ||
412 | : | ||
413 | : "r" (0)); | ||
414 | } | ||
415 | |||
413 | #define ARCH_HAS_FLUSH_ANON_PAGE | 416 | #define ARCH_HAS_FLUSH_ANON_PAGE |
414 | static inline void flush_anon_page(struct vm_area_struct *vma, | 417 | static inline void flush_anon_page(struct vm_area_struct *vma, |
415 | struct page *page, unsigned long vmaddr) | 418 | struct page *page, unsigned long vmaddr) |
diff --git a/include/asm-arm/dyntick.h b/include/asm-arm/dyntick.h deleted file mode 100644 index 19fab2d2b760..000000000000 --- a/include/asm-arm/dyntick.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef _ASMARM_DYNTICK_H | ||
2 | #define _ASMARM_DYNTICK_H | ||
3 | |||
4 | #include <asm/mach/time.h> | ||
5 | |||
6 | #endif /* _ASMARM_DYNTICK_H */ | ||
diff --git a/include/asm-arm/ecard.h b/include/asm-arm/ecard.h index 684fe0645239..5e22881a630d 100644 --- a/include/asm-arm/ecard.h +++ b/include/asm-arm/ecard.h | |||
@@ -85,19 +85,6 @@ | |||
85 | 85 | ||
86 | #define MAX_ECARDS 9 | 86 | #define MAX_ECARDS 9 |
87 | 87 | ||
88 | typedef enum { /* Cards address space */ | ||
89 | ECARD_IOC, | ||
90 | ECARD_MEMC, | ||
91 | ECARD_EASI | ||
92 | } card_type_t; | ||
93 | |||
94 | typedef enum { /* Speed for ECARD_IOC space */ | ||
95 | ECARD_SLOW = 0, | ||
96 | ECARD_MEDIUM = 1, | ||
97 | ECARD_FAST = 2, | ||
98 | ECARD_SYNC = 3 | ||
99 | } card_speed_t; | ||
100 | |||
101 | struct ecard_id { /* Card ID structure */ | 88 | struct ecard_id { /* Card ID structure */ |
102 | unsigned short manufacturer; | 89 | unsigned short manufacturer; |
103 | unsigned short product; | 90 | unsigned short product; |
@@ -190,16 +177,6 @@ struct in_chunk_dir { | |||
190 | }; | 177 | }; |
191 | 178 | ||
192 | /* | 179 | /* |
193 | * ecard_claim: claim an expansion card entry | ||
194 | */ | ||
195 | #define ecard_claim(ec) ((ec)->claimed = 1) | ||
196 | |||
197 | /* | ||
198 | * ecard_release: release an expansion card entry | ||
199 | */ | ||
200 | #define ecard_release(ec) ((ec)->claimed = 0) | ||
201 | |||
202 | /* | ||
203 | * Read a chunk from an expansion card | 180 | * Read a chunk from an expansion card |
204 | * cd : where to put read data | 181 | * cd : where to put read data |
205 | * ec : expansion card info struct | 182 | * ec : expansion card info struct |
@@ -209,18 +186,6 @@ struct in_chunk_dir { | |||
209 | extern int ecard_readchunk (struct in_chunk_dir *cd, struct expansion_card *ec, int id, int num); | 186 | extern int ecard_readchunk (struct in_chunk_dir *cd, struct expansion_card *ec, int id, int num); |
210 | 187 | ||
211 | /* | 188 | /* |
212 | * Obtain the address of a card. This returns the "old style" address | ||
213 | * and should no longer be used. | ||
214 | */ | ||
215 | static inline unsigned int __deprecated | ||
216 | ecard_address(struct expansion_card *ec, card_type_t type, card_speed_t speed) | ||
217 | { | ||
218 | extern unsigned int __ecard_address(struct expansion_card *, | ||
219 | card_type_t, card_speed_t); | ||
220 | return __ecard_address(ec, type, speed); | ||
221 | } | ||
222 | |||
223 | /* | ||
224 | * Request and release ecard resources | 189 | * Request and release ecard resources |
225 | */ | 190 | */ |
226 | extern int ecard_request_resources(struct expansion_card *ec); | 191 | extern int ecard_request_resources(struct expansion_card *ec); |
diff --git a/include/asm-arm/ftrace.h b/include/asm-arm/ftrace.h new file mode 100644 index 000000000000..584ef9a8e5a5 --- /dev/null +++ b/include/asm-arm/ftrace.h | |||
@@ -0,0 +1,14 @@ | |||
1 | #ifndef _ASM_ARM_FTRACE | ||
2 | #define _ASM_ARM_FTRACE | ||
3 | |||
4 | #ifdef CONFIG_FTRACE | ||
5 | #define MCOUNT_ADDR ((long)(mcount)) | ||
6 | #define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */ | ||
7 | |||
8 | #ifndef __ASSEMBLY__ | ||
9 | extern void mcount(void); | ||
10 | #endif | ||
11 | |||
12 | #endif | ||
13 | |||
14 | #endif /* _ASM_ARM_FTRACE */ | ||
diff --git a/include/asm-arm/hardware/iop3xx-gpio.h b/include/asm-arm/hardware/iop3xx-gpio.h new file mode 100644 index 000000000000..0c9331f9ac24 --- /dev/null +++ b/include/asm-arm/hardware/iop3xx-gpio.h | |||
@@ -0,0 +1,73 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/iop3xx-gpio.h | ||
3 | * | ||
4 | * IOP3xx GPIO wrappers | ||
5 | * | ||
6 | * Copyright (c) 2008 Arnaud Patard <arnaud.patard@rtp-net.org> | ||
7 | * Based on IXP4XX gpio.h file | ||
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 as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | * | ||
23 | */ | ||
24 | |||
25 | #ifndef __ASM_ARM_HARDWARE_IOP3XX_GPIO_H | ||
26 | #define __ASM_ARM_HARDWARE_IOP3XX_GPIO_H | ||
27 | |||
28 | #include <asm/hardware.h> | ||
29 | #include <asm-generic/gpio.h> | ||
30 | |||
31 | #define IOP3XX_N_GPIOS 8 | ||
32 | |||
33 | static inline int gpio_get_value(unsigned gpio) | ||
34 | { | ||
35 | if (gpio > IOP3XX_N_GPIOS) | ||
36 | return __gpio_get_value(gpio); | ||
37 | |||
38 | return gpio_line_get(gpio); | ||
39 | } | ||
40 | |||
41 | static inline void gpio_set_value(unsigned gpio, int value) | ||
42 | { | ||
43 | if (gpio > IOP3XX_N_GPIOS) { | ||
44 | __gpio_set_value(gpio, value); | ||
45 | return; | ||
46 | } | ||
47 | gpio_line_set(gpio, value); | ||
48 | } | ||
49 | |||
50 | static inline int gpio_cansleep(unsigned gpio) | ||
51 | { | ||
52 | if (gpio < IOP3XX_N_GPIOS) | ||
53 | return 0; | ||
54 | else | ||
55 | return __gpio_cansleep(gpio); | ||
56 | } | ||
57 | |||
58 | /* | ||
59 | * The GPIOs are not generating any interrupt | ||
60 | * Note : manuals are not clear about this | ||
61 | */ | ||
62 | static inline int gpio_to_irq(int gpio) | ||
63 | { | ||
64 | return -EINVAL; | ||
65 | } | ||
66 | |||
67 | static inline int irq_to_gpio(int gpio) | ||
68 | { | ||
69 | return -EINVAL; | ||
70 | } | ||
71 | |||
72 | #endif | ||
73 | |||
diff --git a/include/asm-arm/hw_irq.h b/include/asm-arm/hw_irq.h index 98d594a973d6..f1a08a500604 100644 --- a/include/asm-arm/hw_irq.h +++ b/include/asm-arm/hw_irq.h | |||
@@ -6,15 +6,4 @@ | |||
6 | 6 | ||
7 | #include <asm/mach/irq.h> | 7 | #include <asm/mach/irq.h> |
8 | 8 | ||
9 | #if defined(CONFIG_NO_IDLE_HZ) | ||
10 | # include <asm/dyntick.h> | ||
11 | # define handle_dynamic_tick(action) \ | ||
12 | if (!(action->flags & IRQF_TIMER) && system_timer->dyn_tick) { \ | ||
13 | write_seqlock(&xtime_lock); \ | ||
14 | if (system_timer->dyn_tick->state & DYN_TICK_ENABLED) \ | ||
15 | system_timer->dyn_tick->handler(irq, NULL); \ | ||
16 | write_sequnlock(&xtime_lock); \ | ||
17 | } | ||
18 | #endif | ||
19 | |||
20 | #endif | 9 | #endif |
diff --git a/include/asm-arm/kexec.h b/include/asm-arm/kexec.h index 47fe34d692da..c8986bb99ed5 100644 --- a/include/asm-arm/kexec.h +++ b/include/asm-arm/kexec.h | |||
@@ -14,8 +14,6 @@ | |||
14 | 14 | ||
15 | #define KEXEC_ARCH KEXEC_ARCH_ARM | 15 | #define KEXEC_ARCH KEXEC_ARCH_ARM |
16 | 16 | ||
17 | #define KEXEC_BOOT_PARAMS_SIZE 1536 | ||
18 | |||
19 | #define KEXEC_ARM_ATAGS_OFFSET 0x1000 | 17 | #define KEXEC_ARM_ATAGS_OFFSET 0x1000 |
20 | #define KEXEC_ARM_ZIMAGE_OFFSET 0x8000 | 18 | #define KEXEC_ARM_ZIMAGE_OFFSET 0x8000 |
21 | 19 | ||
diff --git a/include/asm-arm/kprobes.h b/include/asm-arm/kprobes.h index c042194d3ab5..b1a37876942d 100644 --- a/include/asm-arm/kprobes.h +++ b/include/asm-arm/kprobes.h | |||
@@ -59,6 +59,7 @@ struct kprobe_ctlblk { | |||
59 | }; | 59 | }; |
60 | 60 | ||
61 | void arch_remove_kprobe(struct kprobe *); | 61 | void arch_remove_kprobe(struct kprobe *); |
62 | void kretprobe_trampoline(void); | ||
62 | 63 | ||
63 | int kprobe_trap_handler(struct pt_regs *regs, unsigned int instr); | 64 | int kprobe_trap_handler(struct pt_regs *regs, unsigned int instr); |
64 | int kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr); | 65 | int kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr); |
diff --git a/include/asm-arm/mach/time.h b/include/asm-arm/mach/time.h index 5dc357013b79..2fd36ea0130d 100644 --- a/include/asm-arm/mach/time.h +++ b/include/asm-arm/mach/time.h | |||
@@ -41,30 +41,8 @@ struct sys_timer { | |||
41 | #ifndef CONFIG_GENERIC_TIME | 41 | #ifndef CONFIG_GENERIC_TIME |
42 | unsigned long (*offset)(void); | 42 | unsigned long (*offset)(void); |
43 | #endif | 43 | #endif |
44 | |||
45 | #ifdef CONFIG_NO_IDLE_HZ | ||
46 | struct dyn_tick_timer *dyn_tick; | ||
47 | #endif | ||
48 | }; | ||
49 | |||
50 | #ifdef CONFIG_NO_IDLE_HZ | ||
51 | |||
52 | #define DYN_TICK_ENABLED (1 << 1) | ||
53 | |||
54 | struct dyn_tick_timer { | ||
55 | spinlock_t lock; | ||
56 | unsigned int state; /* Current state */ | ||
57 | int (*enable)(void); /* Enables dynamic tick */ | ||
58 | int (*disable)(void); /* Disables dynamic tick */ | ||
59 | void (*reprogram)(unsigned long); /* Reprograms the timer */ | ||
60 | int (*handler)(int, void *); | ||
61 | }; | 44 | }; |
62 | 45 | ||
63 | void timer_dyn_reprogram(void); | ||
64 | #else | ||
65 | #define timer_dyn_reprogram() do { } while (0) | ||
66 | #endif | ||
67 | |||
68 | extern struct sys_timer *system_timer; | 46 | extern struct sys_timer *system_timer; |
69 | extern void timer_tick(void); | 47 | extern void timer_tick(void); |
70 | 48 | ||
diff --git a/include/asm-arm/mmu_context.h b/include/asm-arm/mmu_context.h index 6913d02ca5d6..91b9dfdfed52 100644 --- a/include/asm-arm/mmu_context.h +++ b/include/asm-arm/mmu_context.h | |||
@@ -97,6 +97,11 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next, | |||
97 | #ifdef CONFIG_MMU | 97 | #ifdef CONFIG_MMU |
98 | unsigned int cpu = smp_processor_id(); | 98 | unsigned int cpu = smp_processor_id(); |
99 | 99 | ||
100 | #ifdef CONFIG_SMP | ||
101 | /* check for possible thread migration */ | ||
102 | if (!cpus_empty(next->cpu_vm_mask) && !cpu_isset(cpu, next->cpu_vm_mask)) | ||
103 | __flush_icache_all(); | ||
104 | #endif | ||
100 | if (!cpu_test_and_set(cpu, next->cpu_vm_mask) || prev != next) { | 105 | if (!cpu_test_and_set(cpu, next->cpu_vm_mask) || prev != next) { |
101 | check_context(next); | 106 | check_context(next); |
102 | cpu_switch_mm(next->pgd, next); | 107 | cpu_switch_mm(next->pgd, next); |
diff --git a/include/asm-arm/plat-orion/cache-feroceon-l2.h b/include/asm-arm/plat-orion/cache-feroceon-l2.h new file mode 100644 index 000000000000..ba4e016d3ec0 --- /dev/null +++ b/include/asm-arm/plat-orion/cache-feroceon-l2.h | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | * include/asm-arm/plat-orion/cache-feroceon-l2.h | ||
3 | * | ||
4 | * Copyright (C) 2008 Marvell Semiconductor | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | extern void __init feroceon_l2_init(int l2_wt_override); | ||
diff --git a/include/asm-arm/plat-orion/orion_nand.h b/include/asm-arm/plat-orion/orion_nand.h index ffd3852a0dd7..ad4ce94c1998 100644 --- a/include/asm-arm/plat-orion/orion_nand.h +++ b/include/asm-arm/plat-orion/orion_nand.h | |||
@@ -18,6 +18,7 @@ struct orion_nand_data { | |||
18 | u8 ale; /* address line number connected to ALE */ | 18 | u8 ale; /* address line number connected to ALE */ |
19 | u8 cle; /* address line number connected to CLE */ | 19 | u8 cle; /* address line number connected to CLE */ |
20 | u8 width; /* buswidth */ | 20 | u8 width; /* buswidth */ |
21 | u8 chip_delay; | ||
21 | }; | 22 | }; |
22 | 23 | ||
23 | 24 | ||
diff --git a/include/asm-arm/plat-orion/pcie.h b/include/asm-arm/plat-orion/pcie.h index 6434ac685d21..e61b7bd97af5 100644 --- a/include/asm-arm/plat-orion/pcie.h +++ b/include/asm-arm/plat-orion/pcie.h | |||
@@ -14,6 +14,7 @@ | |||
14 | u32 orion_pcie_dev_id(void __iomem *base); | 14 | u32 orion_pcie_dev_id(void __iomem *base); |
15 | u32 orion_pcie_rev(void __iomem *base); | 15 | u32 orion_pcie_rev(void __iomem *base); |
16 | int orion_pcie_link_up(void __iomem *base); | 16 | int orion_pcie_link_up(void __iomem *base); |
17 | int orion_pcie_x4_mode(void __iomem *base); | ||
17 | int orion_pcie_get_local_bus_nr(void __iomem *base); | 18 | int orion_pcie_get_local_bus_nr(void __iomem *base); |
18 | void orion_pcie_set_local_bus_nr(void __iomem *base, int nr); | 19 | void orion_pcie_set_local_bus_nr(void __iomem *base, int nr); |
19 | void orion_pcie_setup(void __iomem *base, | 20 | void orion_pcie_setup(void __iomem *base, |
diff --git a/include/asm-arm/plat-s3c/regs-timer.h b/include/asm-arm/plat-s3c/regs-timer.h index 8b0d594397b1..b5bc692f3489 100644 --- a/include/asm-arm/plat-s3c/regs-timer.h +++ b/include/asm-arm/plat-s3c/regs-timer.h | |||
@@ -65,6 +65,15 @@ | |||
65 | #define S3C2410_TCFG1_MUX0_TCLK0 (4<<0) | 65 | #define S3C2410_TCFG1_MUX0_TCLK0 (4<<0) |
66 | #define S3C2410_TCFG1_MUX0_MASK (15<<0) | 66 | #define S3C2410_TCFG1_MUX0_MASK (15<<0) |
67 | 67 | ||
68 | #define S3C2410_TCFG1_MUX_DIV2 (0<<0) | ||
69 | #define S3C2410_TCFG1_MUX_DIV4 (1<<0) | ||
70 | #define S3C2410_TCFG1_MUX_DIV8 (2<<0) | ||
71 | #define S3C2410_TCFG1_MUX_DIV16 (3<<0) | ||
72 | #define S3C2410_TCFG1_MUX_TCLK (4<<0) | ||
73 | #define S3C2410_TCFG1_MUX_MASK (15<<0) | ||
74 | |||
75 | #define S3C2410_TCFG1_SHIFT(x) ((x) * 4) | ||
76 | |||
68 | /* for each timer, we have an count buffer, an compare buffer and | 77 | /* for each timer, we have an count buffer, an compare buffer and |
69 | * an observation buffer | 78 | * an observation buffer |
70 | */ | 79 | */ |
diff --git a/include/asm-arm/plat-s3c24xx/devs.h b/include/asm-arm/plat-s3c24xx/devs.h index f9d6f0317bc1..badaac9d64a8 100644 --- a/include/asm-arm/plat-s3c24xx/devs.h +++ b/include/asm-arm/plat-s3c24xx/devs.h | |||
@@ -21,6 +21,8 @@ extern struct s3c24xx_uart_resources s3c2410_uart_resources[]; | |||
21 | extern struct platform_device *s3c24xx_uart_devs[]; | 21 | extern struct platform_device *s3c24xx_uart_devs[]; |
22 | extern struct platform_device *s3c24xx_uart_src[]; | 22 | extern struct platform_device *s3c24xx_uart_src[]; |
23 | 23 | ||
24 | extern struct platform_device s3c_device_timer[]; | ||
25 | |||
24 | extern struct platform_device s3c_device_usb; | 26 | extern struct platform_device s3c_device_usb; |
25 | extern struct platform_device s3c_device_lcd; | 27 | extern struct platform_device s3c_device_lcd; |
26 | extern struct platform_device s3c_device_wdt; | 28 | extern struct platform_device s3c_device_wdt; |
@@ -36,11 +38,6 @@ extern struct platform_device s3c_device_spi1; | |||
36 | 38 | ||
37 | extern struct platform_device s3c_device_nand; | 39 | extern struct platform_device s3c_device_nand; |
38 | 40 | ||
39 | extern struct platform_device s3c_device_timer0; | ||
40 | extern struct platform_device s3c_device_timer1; | ||
41 | extern struct platform_device s3c_device_timer2; | ||
42 | extern struct platform_device s3c_device_timer3; | ||
43 | |||
44 | extern struct platform_device s3c_device_usbgadget; | 41 | extern struct platform_device s3c_device_usbgadget; |
45 | 42 | ||
46 | /* s3c2440 specific devices */ | 43 | /* s3c2440 specific devices */ |
diff --git a/include/asm-arm/plat-s3c24xx/mci.h b/include/asm-arm/plat-s3c24xx/mci.h new file mode 100644 index 000000000000..2d0852ac3b27 --- /dev/null +++ b/include/asm-arm/plat-s3c24xx/mci.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef _ARCH_MCI_H | ||
2 | #define _ARCH_MCI_H | ||
3 | |||
4 | struct s3c24xx_mci_pdata { | ||
5 | unsigned int wprotect_invert : 1; | ||
6 | unsigned int detect_invert : 1; /* set => detect active high. */ | ||
7 | |||
8 | unsigned int gpio_detect; | ||
9 | unsigned int gpio_wprotect; | ||
10 | unsigned long ocr_avail; | ||
11 | void (*set_power)(unsigned char power_mode, | ||
12 | unsigned short vdd); | ||
13 | }; | ||
14 | |||
15 | #endif /* _ARCH_NCI_H */ | ||
diff --git a/include/asm-arm/rtc.h b/include/asm-arm/rtc.h deleted file mode 100644 index 1a5c9232a91e..000000000000 --- a/include/asm-arm/rtc.h +++ /dev/null | |||
@@ -1,43 +0,0 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/rtc.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Deep Blue Solutions Ltd. | ||
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 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef ASMARM_RTC_H | ||
11 | #define ASMARM_RTC_H | ||
12 | |||
13 | struct module; | ||
14 | |||
15 | struct rtc_ops { | ||
16 | struct module *owner; | ||
17 | int (*open)(void); | ||
18 | void (*release)(void); | ||
19 | int (*ioctl)(unsigned int, unsigned long); | ||
20 | |||
21 | int (*read_time)(struct rtc_time *); | ||
22 | int (*set_time)(struct rtc_time *); | ||
23 | int (*read_alarm)(struct rtc_wkalrm *); | ||
24 | int (*set_alarm)(struct rtc_wkalrm *); | ||
25 | int (*proc)(char *buf); | ||
26 | }; | ||
27 | |||
28 | void rtc_next_alarm_time(struct rtc_time *, struct rtc_time *, struct rtc_time *); | ||
29 | void rtc_update(unsigned long, unsigned long); | ||
30 | int register_rtc(struct rtc_ops *); | ||
31 | void unregister_rtc(struct rtc_ops *); | ||
32 | |||
33 | static inline int rtc_periodic_alarm(struct rtc_time *tm) | ||
34 | { | ||
35 | return (tm->tm_year == -1) || | ||
36 | ((unsigned)tm->tm_mon >= 12) || | ||
37 | ((unsigned)(tm->tm_mday - 1) >= 31) || | ||
38 | ((unsigned)tm->tm_hour > 23) || | ||
39 | ((unsigned)tm->tm_min > 59) || | ||
40 | ((unsigned)tm->tm_sec > 59); | ||
41 | } | ||
42 | |||
43 | #endif | ||
diff --git a/include/asm-arm/smp.h b/include/asm-arm/smp.h index af99636db400..7fffa2404b8e 100644 --- a/include/asm-arm/smp.h +++ b/include/asm-arm/smp.h | |||
@@ -101,6 +101,9 @@ extern void platform_cpu_die(unsigned int cpu); | |||
101 | extern int platform_cpu_kill(unsigned int cpu); | 101 | extern int platform_cpu_kill(unsigned int cpu); |
102 | extern void platform_cpu_enable(unsigned int cpu); | 102 | extern void platform_cpu_enable(unsigned int cpu); |
103 | 103 | ||
104 | extern void arch_send_call_function_single_ipi(int cpu); | ||
105 | extern void arch_send_call_function_ipi(cpumask_t mask); | ||
106 | |||
104 | /* | 107 | /* |
105 | * Local timer interrupt handling function (can be IPI'ed). | 108 | * Local timer interrupt handling function (can be IPI'ed). |
106 | */ | 109 | */ |
diff --git a/include/asm-arm/tlbflush.h b/include/asm-arm/tlbflush.h index 8c6bc1bb9d1a..909656c747ef 100644 --- a/include/asm-arm/tlbflush.h +++ b/include/asm-arm/tlbflush.h | |||
@@ -39,6 +39,7 @@ | |||
39 | #define TLB_V6_D_ASID (1 << 17) | 39 | #define TLB_V6_D_ASID (1 << 17) |
40 | #define TLB_V6_I_ASID (1 << 18) | 40 | #define TLB_V6_I_ASID (1 << 18) |
41 | 41 | ||
42 | #define TLB_L2CLEAN_FR (1 << 29) /* Feroceon */ | ||
42 | #define TLB_DCLEAN (1 << 30) | 43 | #define TLB_DCLEAN (1 << 30) |
43 | #define TLB_WB (1 << 31) | 44 | #define TLB_WB (1 << 31) |
44 | 45 | ||
@@ -51,6 +52,7 @@ | |||
51 | * v4 - ARMv4 without write buffer | 52 | * v4 - ARMv4 without write buffer |
52 | * v4wb - ARMv4 with write buffer without I TLB flush entry instruction | 53 | * v4wb - ARMv4 with write buffer without I TLB flush entry instruction |
53 | * v4wbi - ARMv4 with write buffer with I TLB flush entry instruction | 54 | * v4wbi - ARMv4 with write buffer with I TLB flush entry instruction |
55 | * fr - Feroceon (v4wbi with non-outer-cacheable page table walks) | ||
54 | * v6wbi - ARMv6 with write buffer with I TLB flush entry instruction | 56 | * v6wbi - ARMv6 with write buffer with I TLB flush entry instruction |
55 | */ | 57 | */ |
56 | #undef _TLB | 58 | #undef _TLB |
@@ -103,6 +105,23 @@ | |||
103 | # define v4wbi_always_flags (-1UL) | 105 | # define v4wbi_always_flags (-1UL) |
104 | #endif | 106 | #endif |
105 | 107 | ||
108 | #define fr_tlb_flags (TLB_WB | TLB_DCLEAN | TLB_L2CLEAN_FR | \ | ||
109 | TLB_V4_I_FULL | TLB_V4_D_FULL | \ | ||
110 | TLB_V4_I_PAGE | TLB_V4_D_PAGE) | ||
111 | |||
112 | #ifdef CONFIG_CPU_TLB_FEROCEON | ||
113 | # define fr_possible_flags fr_tlb_flags | ||
114 | # define fr_always_flags fr_tlb_flags | ||
115 | # ifdef _TLB | ||
116 | # define MULTI_TLB 1 | ||
117 | # else | ||
118 | # define _TLB v4wbi | ||
119 | # endif | ||
120 | #else | ||
121 | # define fr_possible_flags 0 | ||
122 | # define fr_always_flags (-1UL) | ||
123 | #endif | ||
124 | |||
106 | #define v4wb_tlb_flags (TLB_WB | TLB_DCLEAN | \ | 125 | #define v4wb_tlb_flags (TLB_WB | TLB_DCLEAN | \ |
107 | TLB_V4_I_FULL | TLB_V4_D_FULL | \ | 126 | TLB_V4_I_FULL | TLB_V4_D_FULL | \ |
108 | TLB_V4_D_PAGE) | 127 | TLB_V4_D_PAGE) |
@@ -245,12 +264,14 @@ extern struct cpu_tlb_fns cpu_tlb; | |||
245 | #define possible_tlb_flags (v3_possible_flags | \ | 264 | #define possible_tlb_flags (v3_possible_flags | \ |
246 | v4_possible_flags | \ | 265 | v4_possible_flags | \ |
247 | v4wbi_possible_flags | \ | 266 | v4wbi_possible_flags | \ |
267 | fr_possible_flags | \ | ||
248 | v4wb_possible_flags | \ | 268 | v4wb_possible_flags | \ |
249 | v6wbi_possible_flags) | 269 | v6wbi_possible_flags) |
250 | 270 | ||
251 | #define always_tlb_flags (v3_always_flags & \ | 271 | #define always_tlb_flags (v3_always_flags & \ |
252 | v4_always_flags & \ | 272 | v4_always_flags & \ |
253 | v4wbi_always_flags & \ | 273 | v4wbi_always_flags & \ |
274 | fr_always_flags & \ | ||
254 | v4wb_always_flags & \ | 275 | v4wb_always_flags & \ |
255 | v6wbi_always_flags) | 276 | v6wbi_always_flags) |
256 | 277 | ||
@@ -417,6 +438,11 @@ static inline void flush_pmd_entry(pmd_t *pmd) | |||
417 | if (tlb_flag(TLB_DCLEAN)) | 438 | if (tlb_flag(TLB_DCLEAN)) |
418 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" | 439 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" |
419 | : : "r" (pmd) : "cc"); | 440 | : : "r" (pmd) : "cc"); |
441 | |||
442 | if (tlb_flag(TLB_L2CLEAN_FR)) | ||
443 | asm("mcr p15, 1, %0, c15, c9, 1 @ L2 flush_pmd" | ||
444 | : : "r" (pmd) : "cc"); | ||
445 | |||
420 | if (tlb_flag(TLB_WB)) | 446 | if (tlb_flag(TLB_WB)) |
421 | dsb(); | 447 | dsb(); |
422 | } | 448 | } |
@@ -428,6 +454,10 @@ static inline void clean_pmd_entry(pmd_t *pmd) | |||
428 | if (tlb_flag(TLB_DCLEAN)) | 454 | if (tlb_flag(TLB_DCLEAN)) |
429 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" | 455 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" |
430 | : : "r" (pmd) : "cc"); | 456 | : : "r" (pmd) : "cc"); |
457 | |||
458 | if (tlb_flag(TLB_L2CLEAN_FR)) | ||
459 | asm("mcr p15, 1, %0, c15, c9, 1 @ L2 flush_pmd" | ||
460 | : : "r" (pmd) : "cc"); | ||
431 | } | 461 | } |
432 | 462 | ||
433 | #undef tlb_flag | 463 | #undef tlb_flag |
diff --git a/include/asm-avr32/arch-at32ap/board.h b/include/asm-avr32/arch-at32ap/board.h index a4e2d28bfb58..a3783861cdd2 100644 --- a/include/asm-avr32/arch-at32ap/board.h +++ b/include/asm-avr32/arch-at32ap/board.h | |||
@@ -8,6 +8,12 @@ | |||
8 | 8 | ||
9 | #define GPIO_PIN_NONE (-1) | 9 | #define GPIO_PIN_NONE (-1) |
10 | 10 | ||
11 | /* | ||
12 | * Clock rates for various on-board oscillators. The number of entries | ||
13 | * in this array is chip-dependent. | ||
14 | */ | ||
15 | extern unsigned long at32_board_osc_rates[]; | ||
16 | |||
11 | /* Add basic devices: system manager, interrupt controller, portmuxes, etc. */ | 17 | /* Add basic devices: system manager, interrupt controller, portmuxes, etc. */ |
12 | void at32_add_system_devices(void); | 18 | void at32_add_system_devices(void); |
13 | 19 | ||
@@ -36,7 +42,8 @@ at32_add_device_spi(unsigned int id, struct spi_board_info *b, unsigned int n); | |||
36 | struct atmel_lcdfb_info; | 42 | struct atmel_lcdfb_info; |
37 | struct platform_device * | 43 | struct platform_device * |
38 | at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data, | 44 | at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data, |
39 | unsigned long fbmem_start, unsigned long fbmem_len); | 45 | unsigned long fbmem_start, unsigned long fbmem_len, |
46 | unsigned int pin_config); | ||
40 | 47 | ||
41 | struct usba_platform_data; | 48 | struct usba_platform_data; |
42 | struct platform_device * | 49 | struct platform_device * |
@@ -70,9 +77,14 @@ struct i2c_board_info; | |||
70 | struct platform_device *at32_add_device_twi(unsigned int id, | 77 | struct platform_device *at32_add_device_twi(unsigned int id, |
71 | struct i2c_board_info *b, | 78 | struct i2c_board_info *b, |
72 | unsigned int n); | 79 | unsigned int n); |
73 | struct platform_device *at32_add_device_mci(unsigned int id); | 80 | |
81 | struct mci_platform_data; | ||
82 | struct platform_device * | ||
83 | at32_add_device_mci(unsigned int id, struct mci_platform_data *data); | ||
84 | |||
74 | struct platform_device *at32_add_device_ac97c(unsigned int id); | 85 | struct platform_device *at32_add_device_ac97c(unsigned int id); |
75 | struct platform_device *at32_add_device_abdac(unsigned int id); | 86 | struct platform_device *at32_add_device_abdac(unsigned int id); |
87 | struct platform_device *at32_add_device_psif(unsigned int id); | ||
76 | 88 | ||
77 | struct cf_platform_data { | 89 | struct cf_platform_data { |
78 | int detect_pin; | 90 | int detect_pin; |
diff --git a/include/asm-avr32/arch-at32ap/init.h b/include/asm-avr32/arch-at32ap/init.h index 5e75d850d707..bc40e3d46150 100644 --- a/include/asm-avr32/arch-at32ap/init.h +++ b/include/asm-avr32/arch-at32ap/init.h | |||
@@ -13,10 +13,6 @@ | |||
13 | void setup_platform(void); | 13 | void setup_platform(void); |
14 | void setup_board(void); | 14 | void setup_board(void); |
15 | 15 | ||
16 | /* Called by setup_platform */ | ||
17 | void at32_clock_init(void); | ||
18 | void at32_portmux_init(void); | ||
19 | |||
20 | void at32_setup_serial_console(unsigned int usart_id); | 16 | void at32_setup_serial_console(unsigned int usart_id); |
21 | 17 | ||
22 | #endif /* __ASM_AVR32_AT32AP_INIT_H__ */ | 18 | #endif /* __ASM_AVR32_AT32AP_INIT_H__ */ |
diff --git a/include/asm-avr32/arch-at32ap/pm.h b/include/asm-avr32/arch-at32ap/pm.h index 356e43064903..979b355b77b6 100644 --- a/include/asm-avr32/arch-at32ap/pm.h +++ b/include/asm-avr32/arch-at32ap/pm.h | |||
@@ -19,6 +19,7 @@ | |||
19 | 19 | ||
20 | #ifndef __ASSEMBLY__ | 20 | #ifndef __ASSEMBLY__ |
21 | extern void cpu_enter_idle(void); | 21 | extern void cpu_enter_idle(void); |
22 | extern void cpu_enter_standby(unsigned long sdramc_base); | ||
22 | 23 | ||
23 | extern bool disable_idle_sleep; | 24 | extern bool disable_idle_sleep; |
24 | 25 | ||
@@ -43,6 +44,8 @@ static inline void cpu_idle_sleep(void) | |||
43 | else | 44 | else |
44 | cpu_enter_idle(); | 45 | cpu_enter_idle(); |
45 | } | 46 | } |
47 | |||
48 | void intc_set_suspend_handler(unsigned long offset); | ||
46 | #endif | 49 | #endif |
47 | 50 | ||
48 | #endif /* __ASM_AVR32_ARCH_PM_H */ | 51 | #endif /* __ASM_AVR32_ARCH_PM_H */ |
diff --git a/include/asm-avr32/arch-at32ap/sram.h b/include/asm-avr32/arch-at32ap/sram.h new file mode 100644 index 000000000000..4838dae7601a --- /dev/null +++ b/include/asm-avr32/arch-at32ap/sram.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * Simple SRAM allocator | ||
3 | * | ||
4 | * Copyright (C) 2008 Atmel Corporation | ||
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 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_AVR32_ARCH_SRAM_H | ||
11 | #define __ASM_AVR32_ARCH_SRAM_H | ||
12 | |||
13 | #include <linux/genalloc.h> | ||
14 | |||
15 | extern struct gen_pool *sram_pool; | ||
16 | |||
17 | static inline unsigned long sram_alloc(size_t len) | ||
18 | { | ||
19 | if (!sram_pool) | ||
20 | return 0UL; | ||
21 | |||
22 | return gen_pool_alloc(sram_pool, len); | ||
23 | } | ||
24 | |||
25 | static inline void sram_free(unsigned long addr, size_t len) | ||
26 | { | ||
27 | return gen_pool_free(sram_pool, addr, len); | ||
28 | } | ||
29 | |||
30 | #endif /* __ASM_AVR32_ARCH_SRAM_H */ | ||
diff --git a/include/asm-avr32/atmel-mci.h b/include/asm-avr32/atmel-mci.h new file mode 100644 index 000000000000..c2ea6e1c9aa1 --- /dev/null +++ b/include/asm-avr32/atmel-mci.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef __ASM_AVR32_ATMEL_MCI_H | ||
2 | #define __ASM_AVR32_ATMEL_MCI_H | ||
3 | |||
4 | struct mci_platform_data { | ||
5 | int detect_pin; | ||
6 | int wp_pin; | ||
7 | }; | ||
8 | |||
9 | #endif /* __ASM_AVR32_ATMEL_MCI_H */ | ||
diff --git a/include/asm-avr32/mmu_context.h b/include/asm-avr32/mmu_context.h index c37c391faef6..27ff23407100 100644 --- a/include/asm-avr32/mmu_context.h +++ b/include/asm-avr32/mmu_context.h | |||
@@ -13,7 +13,6 @@ | |||
13 | #define __ASM_AVR32_MMU_CONTEXT_H | 13 | #define __ASM_AVR32_MMU_CONTEXT_H |
14 | 14 | ||
15 | #include <asm/tlbflush.h> | 15 | #include <asm/tlbflush.h> |
16 | #include <asm/pgalloc.h> | ||
17 | #include <asm/sysreg.h> | 16 | #include <asm/sysreg.h> |
18 | #include <asm-generic/mm_hooks.h> | 17 | #include <asm-generic/mm_hooks.h> |
19 | 18 | ||
diff --git a/include/asm-avr32/pci.h b/include/asm-avr32/pci.h index 0f5f134b896a..a32a02372017 100644 --- a/include/asm-avr32/pci.h +++ b/include/asm-avr32/pci.h | |||
@@ -5,4 +5,6 @@ | |||
5 | 5 | ||
6 | #define PCI_DMA_BUS_IS_PHYS (1) | 6 | #define PCI_DMA_BUS_IS_PHYS (1) |
7 | 7 | ||
8 | #include <asm-generic/pci-dma-compat.h> | ||
9 | |||
8 | #endif /* __ASM_AVR32_PCI_H__ */ | 10 | #endif /* __ASM_AVR32_PCI_H__ */ |
diff --git a/include/asm-avr32/pgalloc.h b/include/asm-avr32/pgalloc.h index 51fc1f6e4b17..640821323943 100644 --- a/include/asm-avr32/pgalloc.h +++ b/include/asm-avr32/pgalloc.h | |||
@@ -8,65 +8,79 @@ | |||
8 | #ifndef __ASM_AVR32_PGALLOC_H | 8 | #ifndef __ASM_AVR32_PGALLOC_H |
9 | #define __ASM_AVR32_PGALLOC_H | 9 | #define __ASM_AVR32_PGALLOC_H |
10 | 10 | ||
11 | #include <asm/processor.h> | 11 | #include <linux/quicklist.h> |
12 | #include <linux/threads.h> | 12 | #include <asm/page.h> |
13 | #include <linux/slab.h> | 13 | #include <asm/pgtable.h> |
14 | #include <linux/mm.h> | ||
15 | 14 | ||
16 | #define pmd_populate_kernel(mm, pmd, pte) \ | 15 | #define QUICK_PGD 0 /* Preserve kernel mappings over free */ |
17 | set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte))) | 16 | #define QUICK_PT 1 /* Zero on free */ |
18 | 17 | ||
19 | static __inline__ void pmd_populate(struct mm_struct *mm, pmd_t *pmd, | 18 | static inline void pmd_populate_kernel(struct mm_struct *mm, |
19 | pmd_t *pmd, pte_t *pte) | ||
20 | { | ||
21 | set_pmd(pmd, __pmd((unsigned long)pte)); | ||
22 | } | ||
23 | |||
24 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, | ||
20 | pgtable_t pte) | 25 | pgtable_t pte) |
21 | { | 26 | { |
22 | set_pmd(pmd, __pmd(_PAGE_TABLE + page_to_phys(pte))); | 27 | set_pmd(pmd, __pmd((unsigned long)page_address(pte))); |
23 | } | 28 | } |
24 | #define pmd_pgtable(pmd) pmd_page(pmd) | 29 | #define pmd_pgtable(pmd) pmd_page(pmd) |
25 | 30 | ||
31 | static inline void pgd_ctor(void *x) | ||
32 | { | ||
33 | pgd_t *pgd = x; | ||
34 | |||
35 | memcpy(pgd + USER_PTRS_PER_PGD, | ||
36 | swapper_pg_dir + USER_PTRS_PER_PGD, | ||
37 | (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); | ||
38 | } | ||
39 | |||
26 | /* | 40 | /* |
27 | * Allocate and free page tables | 41 | * Allocate and free page tables |
28 | */ | 42 | */ |
29 | static __inline__ pgd_t *pgd_alloc(struct mm_struct *mm) | 43 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) |
30 | { | 44 | { |
31 | return kcalloc(USER_PTRS_PER_PGD, sizeof(pgd_t), GFP_KERNEL); | 45 | return quicklist_alloc(QUICK_PGD, GFP_KERNEL | __GFP_REPEAT, pgd_ctor); |
32 | } | 46 | } |
33 | 47 | ||
34 | static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) | 48 | static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) |
35 | { | 49 | { |
36 | kfree(pgd); | 50 | quicklist_free(QUICK_PGD, NULL, pgd); |
37 | } | 51 | } |
38 | 52 | ||
39 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | 53 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, |
40 | unsigned long address) | 54 | unsigned long address) |
41 | { | 55 | { |
42 | pte_t *pte; | 56 | return quicklist_alloc(QUICK_PT, GFP_KERNEL | __GFP_REPEAT, NULL); |
43 | |||
44 | pte = (pte_t *)get_zeroed_page(GFP_KERNEL | __GFP_REPEAT); | ||
45 | |||
46 | return pte; | ||
47 | } | 57 | } |
48 | 58 | ||
49 | static inline struct page *pte_alloc_one(struct mm_struct *mm, | 59 | static inline pgtable_t pte_alloc_one(struct mm_struct *mm, |
50 | unsigned long address) | 60 | unsigned long address) |
51 | { | 61 | { |
52 | struct page *pte; | 62 | struct page *page; |
63 | void *pg; | ||
53 | 64 | ||
54 | pte = alloc_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); | 65 | pg = quicklist_alloc(QUICK_PT, GFP_KERNEL | __GFP_REPEAT, NULL); |
55 | if (!pte) | 66 | if (!pg) |
56 | return NULL; | 67 | return NULL; |
57 | pgtable_page_ctor(pte); | 68 | |
58 | return pte; | 69 | page = virt_to_page(pg); |
70 | pgtable_page_ctor(page); | ||
71 | |||
72 | return page; | ||
59 | } | 73 | } |
60 | 74 | ||
61 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) | 75 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) |
62 | { | 76 | { |
63 | free_page((unsigned long)pte); | 77 | quicklist_free(QUICK_PT, NULL, pte); |
64 | } | 78 | } |
65 | 79 | ||
66 | static inline void pte_free(struct mm_struct *mm, pgtable_t pte) | 80 | static inline void pte_free(struct mm_struct *mm, pgtable_t pte) |
67 | { | 81 | { |
68 | pgtable_page_dtor(pte); | 82 | pgtable_page_dtor(pte); |
69 | __free_page(pte); | 83 | quicklist_free_page(QUICK_PT, NULL, pte); |
70 | } | 84 | } |
71 | 85 | ||
72 | #define __pte_free_tlb(tlb,pte) \ | 86 | #define __pte_free_tlb(tlb,pte) \ |
@@ -75,6 +89,10 @@ do { \ | |||
75 | tlb_remove_page((tlb), pte); \ | 89 | tlb_remove_page((tlb), pte); \ |
76 | } while (0) | 90 | } while (0) |
77 | 91 | ||
78 | #define check_pgt_cache() do { } while(0) | 92 | static inline void check_pgt_cache(void) |
93 | { | ||
94 | quicklist_trim(QUICK_PGD, NULL, 25, 16); | ||
95 | quicklist_trim(QUICK_PT, NULL, 25, 16); | ||
96 | } | ||
79 | 97 | ||
80 | #endif /* __ASM_AVR32_PGALLOC_H */ | 98 | #endif /* __ASM_AVR32_PGALLOC_H */ |
diff --git a/include/asm-avr32/pgtable.h b/include/asm-avr32/pgtable.h index c0e5e29417df..fecdda16f444 100644 --- a/include/asm-avr32/pgtable.h +++ b/include/asm-avr32/pgtable.h | |||
@@ -129,13 +129,6 @@ extern struct page *empty_zero_page; | |||
129 | 129 | ||
130 | #define _PAGE_FLAGS_CACHE_MASK (_PAGE_CACHABLE | _PAGE_BUFFER | _PAGE_WT) | 130 | #define _PAGE_FLAGS_CACHE_MASK (_PAGE_CACHABLE | _PAGE_BUFFER | _PAGE_WT) |
131 | 131 | ||
132 | /* TODO: Check for saneness */ | ||
133 | /* User-mode page table flags (to be set in a pgd or pmd entry) */ | ||
134 | #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_TYPE_SMALL | _PAGE_RW \ | ||
135 | | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) | ||
136 | /* Kernel-mode page table flags */ | ||
137 | #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_TYPE_SMALL | _PAGE_RW \ | ||
138 | | _PAGE_ACCESSED | _PAGE_DIRTY) | ||
139 | /* Flags that may be modified by software */ | 132 | /* Flags that may be modified by software */ |
140 | #define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY \ | 133 | #define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY \ |
141 | | _PAGE_FLAGS_CACHE_MASK) | 134 | | _PAGE_FLAGS_CACHE_MASK) |
@@ -262,10 +255,14 @@ static inline pte_t pte_mkspecial(pte_t pte) | |||
262 | } | 255 | } |
263 | 256 | ||
264 | #define pmd_none(x) (!pmd_val(x)) | 257 | #define pmd_none(x) (!pmd_val(x)) |
265 | #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT) | 258 | #define pmd_present(x) (pmd_val(x)) |
266 | #define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) | 259 | |
267 | #define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) \ | 260 | static inline void pmd_clear(pmd_t *pmdp) |
268 | != _KERNPG_TABLE) | 261 | { |
262 | set_pmd(pmdp, __pmd(0)); | ||
263 | } | ||
264 | |||
265 | #define pmd_bad(x) (pmd_val(x) & ~PAGE_MASK) | ||
269 | 266 | ||
270 | /* | 267 | /* |
271 | * Permanent address of a page. We don't support highmem, so this is | 268 | * Permanent address of a page. We don't support highmem, so this is |
@@ -303,19 +300,16 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
303 | 300 | ||
304 | #define page_pte(page) page_pte_prot(page, __pgprot(0)) | 301 | #define page_pte(page) page_pte_prot(page, __pgprot(0)) |
305 | 302 | ||
306 | #define pmd_page_vaddr(pmd) \ | 303 | #define pmd_page_vaddr(pmd) pmd_val(pmd) |
307 | ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) | 304 | #define pmd_page(pmd) (virt_to_page(pmd_val(pmd))) |
308 | |||
309 | #define pmd_page(pmd) (phys_to_page(pmd_val(pmd))) | ||
310 | 305 | ||
311 | /* to find an entry in a page-table-directory. */ | 306 | /* to find an entry in a page-table-directory. */ |
312 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) | 307 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) \ |
313 | #define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) | 308 | & (PTRS_PER_PGD - 1)) |
314 | #define pgd_offset_current(address) \ | 309 | #define pgd_offset(mm, address) ((mm)->pgd + pgd_index(address)) |
315 | ((pgd_t *)__mfsr(SYSREG_PTBR) + pgd_index(address)) | ||
316 | 310 | ||
317 | /* to find an entry in a kernel page-table-directory */ | 311 | /* to find an entry in a kernel page-table-directory */ |
318 | #define pgd_offset_k(address) pgd_offset(&init_mm, address) | 312 | #define pgd_offset_k(address) pgd_offset(&init_mm, address) |
319 | 313 | ||
320 | /* Find an entry in the third-level page table.. */ | 314 | /* Find an entry in the third-level page table.. */ |
321 | #define pte_index(address) \ | 315 | #define pte_index(address) \ |
diff --git a/include/asm-avr32/thread_info.h b/include/asm-avr32/thread_info.h index 07049f6c0d41..df68631b7b27 100644 --- a/include/asm-avr32/thread_info.h +++ b/include/asm-avr32/thread_info.h | |||
@@ -88,6 +88,7 @@ static inline struct thread_info *current_thread_info(void) | |||
88 | #define TIF_MEMDIE 6 | 88 | #define TIF_MEMDIE 6 |
89 | #define TIF_RESTORE_SIGMASK 7 /* restore signal mask in do_signal */ | 89 | #define TIF_RESTORE_SIGMASK 7 /* restore signal mask in do_signal */ |
90 | #define TIF_CPU_GOING_TO_SLEEP 8 /* CPU is entering sleep 0 mode */ | 90 | #define TIF_CPU_GOING_TO_SLEEP 8 /* CPU is entering sleep 0 mode */ |
91 | #define TIF_FREEZE 29 | ||
91 | #define TIF_DEBUG 30 /* debugging enabled */ | 92 | #define TIF_DEBUG 30 /* debugging enabled */ |
92 | #define TIF_USERSPACE 31 /* true if FS sets userspace */ | 93 | #define TIF_USERSPACE 31 /* true if FS sets userspace */ |
93 | 94 | ||
diff --git a/include/asm-avr32/tlbflush.h b/include/asm-avr32/tlbflush.h index 5bc7c88a5770..bf90a786f6be 100644 --- a/include/asm-avr32/tlbflush.h +++ b/include/asm-avr32/tlbflush.h | |||
@@ -26,7 +26,6 @@ extern void flush_tlb_mm(struct mm_struct *mm); | |||
26 | extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, | 26 | extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, |
27 | unsigned long end); | 27 | unsigned long end); |
28 | extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long page); | 28 | extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long page); |
29 | extern void __flush_tlb_page(unsigned long asid, unsigned long page); | ||
30 | 29 | ||
31 | extern void flush_tlb_kernel_range(unsigned long start, unsigned long end); | 30 | extern void flush_tlb_kernel_range(unsigned long start, unsigned long end); |
32 | 31 | ||
diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h index 4fce3db2cecc..ef87f889ef62 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h | |||
@@ -195,7 +195,6 @@ static inline int pmd_none_or_clear_bad(pmd_t *pmd) | |||
195 | } | 195 | } |
196 | return 0; | 196 | return 0; |
197 | } | 197 | } |
198 | #endif /* CONFIG_MMU */ | ||
199 | 198 | ||
200 | static inline pte_t __ptep_modify_prot_start(struct mm_struct *mm, | 199 | static inline pte_t __ptep_modify_prot_start(struct mm_struct *mm, |
201 | unsigned long addr, | 200 | unsigned long addr, |
@@ -253,6 +252,7 @@ static inline void ptep_modify_prot_commit(struct mm_struct *mm, | |||
253 | __ptep_modify_prot_commit(mm, addr, ptep, pte); | 252 | __ptep_modify_prot_commit(mm, addr, ptep, pte); |
254 | } | 253 | } |
255 | #endif /* __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION */ | 254 | #endif /* __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION */ |
255 | #endif /* CONFIG_MMU */ | ||
256 | 256 | ||
257 | /* | 257 | /* |
258 | * A facility to provide lazy MMU batching. This allows PTE updates and | 258 | * A facility to provide lazy MMU batching. This allows PTE updates and |
diff --git a/include/asm-generic/topology.h b/include/asm-generic/topology.h index a6aea79bca4f..54bbf6e04ee8 100644 --- a/include/asm-generic/topology.h +++ b/include/asm-generic/topology.h | |||
@@ -60,7 +60,8 @@ | |||
60 | #ifndef node_to_cpumask_ptr | 60 | #ifndef node_to_cpumask_ptr |
61 | 61 | ||
62 | #define node_to_cpumask_ptr(v, node) \ | 62 | #define node_to_cpumask_ptr(v, node) \ |
63 | cpumask_t _##v = node_to_cpumask(node), *v = &_##v | 63 | cpumask_t _##v = node_to_cpumask(node); \ |
64 | const cpumask_t *v = &_##v | ||
64 | 65 | ||
65 | #define node_to_cpumask_ptr_next(v, node) \ | 66 | #define node_to_cpumask_ptr_next(v, node) \ |
66 | _##v = node_to_cpumask(node) | 67 | _##v = node_to_cpumask(node) |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index f1992dc5c424..729f6b0a60e9 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -67,6 +67,8 @@ | |||
67 | *(.rodata1) \ | 67 | *(.rodata1) \ |
68 | } \ | 68 | } \ |
69 | \ | 69 | \ |
70 | BUG_TABLE \ | ||
71 | \ | ||
70 | /* PCI quirks */ \ | 72 | /* PCI quirks */ \ |
71 | .pci_fixup : AT(ADDR(.pci_fixup) - LOAD_OFFSET) { \ | 73 | .pci_fixup : AT(ADDR(.pci_fixup) - LOAD_OFFSET) { \ |
72 | VMLINUX_SYMBOL(__start_pci_fixups_early) = .; \ | 74 | VMLINUX_SYMBOL(__start_pci_fixups_early) = .; \ |
@@ -84,6 +86,19 @@ | |||
84 | VMLINUX_SYMBOL(__start_pci_fixups_resume) = .; \ | 86 | VMLINUX_SYMBOL(__start_pci_fixups_resume) = .; \ |
85 | *(.pci_fixup_resume) \ | 87 | *(.pci_fixup_resume) \ |
86 | VMLINUX_SYMBOL(__end_pci_fixups_resume) = .; \ | 88 | VMLINUX_SYMBOL(__end_pci_fixups_resume) = .; \ |
89 | VMLINUX_SYMBOL(__start_pci_fixups_resume_early) = .; \ | ||
90 | *(.pci_fixup_resume_early) \ | ||
91 | VMLINUX_SYMBOL(__end_pci_fixups_resume_early) = .; \ | ||
92 | VMLINUX_SYMBOL(__start_pci_fixups_suspend) = .; \ | ||
93 | *(.pci_fixup_suspend) \ | ||
94 | VMLINUX_SYMBOL(__end_pci_fixups_suspend) = .; \ | ||
95 | } \ | ||
96 | \ | ||
97 | /* Built-in firmware blobs */ \ | ||
98 | .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) { \ | ||
99 | VMLINUX_SYMBOL(__start_builtin_fw) = .; \ | ||
100 | *(.builtin_fw) \ | ||
101 | VMLINUX_SYMBOL(__end_builtin_fw) = .; \ | ||
87 | } \ | 102 | } \ |
88 | \ | 103 | \ |
89 | /* RapidIO route ops */ \ | 104 | /* RapidIO route ops */ \ |
@@ -312,6 +327,7 @@ | |||
312 | .stab.indexstr 0 : { *(.stab.indexstr) } \ | 327 | .stab.indexstr 0 : { *(.stab.indexstr) } \ |
313 | .comment 0 : { *(.comment) } | 328 | .comment 0 : { *(.comment) } |
314 | 329 | ||
330 | #ifdef CONFIG_GENERIC_BUG | ||
315 | #define BUG_TABLE \ | 331 | #define BUG_TABLE \ |
316 | . = ALIGN(8); \ | 332 | . = ALIGN(8); \ |
317 | __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \ | 333 | __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \ |
@@ -319,6 +335,9 @@ | |||
319 | *(__bug_table) \ | 335 | *(__bug_table) \ |
320 | __stop___bug_table = .; \ | 336 | __stop___bug_table = .; \ |
321 | } | 337 | } |
338 | #else | ||
339 | #define BUG_TABLE | ||
340 | #endif | ||
322 | 341 | ||
323 | #ifdef CONFIG_PM_TRACE | 342 | #ifdef CONFIG_PM_TRACE |
324 | #define TRACEDATA \ | 343 | #define TRACEDATA \ |
diff --git a/include/asm-ia64/processor.h b/include/asm-ia64/processor.h index 6aff126fc07e..f88fa054d01d 100644 --- a/include/asm-ia64/processor.h +++ b/include/asm-ia64/processor.h | |||
@@ -763,6 +763,8 @@ prefetchw (const void *x) | |||
763 | #define spin_lock_prefetch(x) prefetchw(x) | 763 | #define spin_lock_prefetch(x) prefetchw(x) |
764 | 764 | ||
765 | extern unsigned long boot_option_idle_override; | 765 | extern unsigned long boot_option_idle_override; |
766 | extern unsigned long idle_halt; | ||
767 | extern unsigned long idle_nomwait; | ||
766 | 768 | ||
767 | #endif /* !__ASSEMBLY__ */ | 769 | #endif /* !__ASSEMBLY__ */ |
768 | 770 | ||
diff --git a/include/asm-ia64/smp.h b/include/asm-ia64/smp.h index ec5f355fb7e3..27731e032ee9 100644 --- a/include/asm-ia64/smp.h +++ b/include/asm-ia64/smp.h | |||
@@ -38,9 +38,6 @@ ia64_get_lid (void) | |||
38 | return lid.f.id << 8 | lid.f.eid; | 38 | return lid.f.id << 8 | lid.f.eid; |
39 | } | 39 | } |
40 | 40 | ||
41 | extern int smp_call_function_mask(cpumask_t mask, void (*func)(void *), | ||
42 | void *info, int wait); | ||
43 | |||
44 | #define hard_smp_processor_id() ia64_get_lid() | 41 | #define hard_smp_processor_id() ia64_get_lid() |
45 | 42 | ||
46 | #ifdef CONFIG_SMP | 43 | #ifdef CONFIG_SMP |
@@ -124,11 +121,12 @@ extern void __init init_smp_config (void); | |||
124 | extern void smp_do_timer (struct pt_regs *regs); | 121 | extern void smp_do_timer (struct pt_regs *regs); |
125 | 122 | ||
126 | extern void smp_send_reschedule (int cpu); | 123 | extern void smp_send_reschedule (int cpu); |
127 | extern void lock_ipi_calllock(void); | ||
128 | extern void unlock_ipi_calllock(void); | ||
129 | extern void identify_siblings (struct cpuinfo_ia64 *); | 124 | extern void identify_siblings (struct cpuinfo_ia64 *); |
130 | extern int is_multithreading_enabled(void); | 125 | extern int is_multithreading_enabled(void); |
131 | 126 | ||
127 | extern void arch_send_call_function_single_ipi(int cpu); | ||
128 | extern void arch_send_call_function_ipi(cpumask_t mask); | ||
129 | |||
132 | #else /* CONFIG_SMP */ | 130 | #else /* CONFIG_SMP */ |
133 | 131 | ||
134 | #define cpu_logical_id(i) 0 | 132 | #define cpu_logical_id(i) 0 |
diff --git a/include/asm-m32r/smp.h b/include/asm-m32r/smp.h index 078e1a51a042..c5dd66916692 100644 --- a/include/asm-m32r/smp.h +++ b/include/asm-m32r/smp.h | |||
@@ -89,6 +89,9 @@ static __inline__ unsigned int num_booting_cpus(void) | |||
89 | extern void smp_send_timer(void); | 89 | extern void smp_send_timer(void); |
90 | extern unsigned long send_IPI_mask_phys(cpumask_t, int, int); | 90 | extern unsigned long send_IPI_mask_phys(cpumask_t, int, int); |
91 | 91 | ||
92 | extern void arch_send_call_function_single_ipi(int cpu); | ||
93 | extern void arch_send_call_function_ipi(cpumask_t mask); | ||
94 | |||
92 | #endif /* not __ASSEMBLY__ */ | 95 | #endif /* not __ASSEMBLY__ */ |
93 | 96 | ||
94 | #define NO_PROC_ID (0xff) /* No processor magic marker */ | 97 | #define NO_PROC_ID (0xff) /* No processor magic marker */ |
@@ -104,6 +107,7 @@ extern unsigned long send_IPI_mask_phys(cpumask_t, int, int); | |||
104 | #define LOCAL_TIMER_IPI (M32R_IRQ_IPI3-M32R_IRQ_IPI0) | 107 | #define LOCAL_TIMER_IPI (M32R_IRQ_IPI3-M32R_IRQ_IPI0) |
105 | #define INVALIDATE_CACHE_IPI (M32R_IRQ_IPI4-M32R_IRQ_IPI0) | 108 | #define INVALIDATE_CACHE_IPI (M32R_IRQ_IPI4-M32R_IRQ_IPI0) |
106 | #define CPU_BOOT_IPI (M32R_IRQ_IPI5-M32R_IRQ_IPI0) | 109 | #define CPU_BOOT_IPI (M32R_IRQ_IPI5-M32R_IRQ_IPI0) |
110 | #define CALL_FUNC_SINGLE_IPI (M32R_IRQ_IPI6-M32R_IRQ_IPI0) | ||
107 | 111 | ||
108 | #define IPI_SHIFT (0) | 112 | #define IPI_SHIFT (0) |
109 | #define NR_IPIS (8) | 113 | #define NR_IPIS (8) |
diff --git a/include/asm-mips/barrier.h b/include/asm-mips/barrier.h index 9d8cfbb5e796..8e9ac313ca3b 100644 --- a/include/asm-mips/barrier.h +++ b/include/asm-mips/barrier.h | |||
@@ -92,11 +92,25 @@ | |||
92 | #define fast_wmb() __sync() | 92 | #define fast_wmb() __sync() |
93 | #define fast_rmb() __sync() | 93 | #define fast_rmb() __sync() |
94 | #define fast_mb() __sync() | 94 | #define fast_mb() __sync() |
95 | #ifdef CONFIG_SGI_IP28 | ||
96 | #define fast_iob() \ | ||
97 | __asm__ __volatile__( \ | ||
98 | ".set push\n\t" \ | ||
99 | ".set noreorder\n\t" \ | ||
100 | "lw $0,%0\n\t" \ | ||
101 | "sync\n\t" \ | ||
102 | "lw $0,%0\n\t" \ | ||
103 | ".set pop" \ | ||
104 | : /* no output */ \ | ||
105 | : "m" (*(int *)CKSEG1ADDR(0x1fa00004)) \ | ||
106 | : "memory") | ||
107 | #else | ||
95 | #define fast_iob() \ | 108 | #define fast_iob() \ |
96 | do { \ | 109 | do { \ |
97 | __sync(); \ | 110 | __sync(); \ |
98 | __fast_iob(); \ | 111 | __fast_iob(); \ |
99 | } while (0) | 112 | } while (0) |
113 | #endif | ||
100 | 114 | ||
101 | #ifdef CONFIG_CPU_HAS_WB | 115 | #ifdef CONFIG_CPU_HAS_WB |
102 | 116 | ||
diff --git a/include/asm-mips/bitops.h b/include/asm-mips/bitops.h index 642724734eba..9a7274ba6a0b 100644 --- a/include/asm-mips/bitops.h +++ b/include/asm-mips/bitops.h | |||
@@ -82,7 +82,7 @@ static inline void set_bit(unsigned long nr, volatile unsigned long *addr) | |||
82 | "2: b 1b \n" | 82 | "2: b 1b \n" |
83 | " .previous \n" | 83 | " .previous \n" |
84 | : "=&r" (temp), "=m" (*m) | 84 | : "=&r" (temp), "=m" (*m) |
85 | : "ir" (bit), "m" (*m), "r" (~0)); | 85 | : "i" (bit), "m" (*m), "r" (~0)); |
86 | #endif /* CONFIG_CPU_MIPSR2 */ | 86 | #endif /* CONFIG_CPU_MIPSR2 */ |
87 | } else if (cpu_has_llsc) { | 87 | } else if (cpu_has_llsc) { |
88 | __asm__ __volatile__( | 88 | __asm__ __volatile__( |
@@ -147,7 +147,7 @@ static inline void clear_bit(unsigned long nr, volatile unsigned long *addr) | |||
147 | "2: b 1b \n" | 147 | "2: b 1b \n" |
148 | " .previous \n" | 148 | " .previous \n" |
149 | : "=&r" (temp), "=m" (*m) | 149 | : "=&r" (temp), "=m" (*m) |
150 | : "ir" (bit), "m" (*m)); | 150 | : "i" (bit), "m" (*m)); |
151 | #endif /* CONFIG_CPU_MIPSR2 */ | 151 | #endif /* CONFIG_CPU_MIPSR2 */ |
152 | } else if (cpu_has_llsc) { | 152 | } else if (cpu_has_llsc) { |
153 | __asm__ __volatile__( | 153 | __asm__ __volatile__( |
@@ -428,7 +428,7 @@ static inline int test_and_clear_bit(unsigned long nr, | |||
428 | "2: b 1b \n" | 428 | "2: b 1b \n" |
429 | " .previous \n" | 429 | " .previous \n" |
430 | : "=&r" (temp), "=m" (*m), "=&r" (res) | 430 | : "=&r" (temp), "=m" (*m), "=&r" (res) |
431 | : "ri" (bit), "m" (*m) | 431 | : "i" (bit), "m" (*m) |
432 | : "memory"); | 432 | : "memory"); |
433 | #endif | 433 | #endif |
434 | } else if (cpu_has_llsc) { | 434 | } else if (cpu_has_llsc) { |
diff --git a/include/asm-mips/bootinfo.h b/include/asm-mips/bootinfo.h index e031bdff9920..d39e143b4a3c 100644 --- a/include/asm-mips/bootinfo.h +++ b/include/asm-mips/bootinfo.h | |||
@@ -26,13 +26,6 @@ | |||
26 | #define MACH_UNKNOWN 0 /* whatever... */ | 26 | #define MACH_UNKNOWN 0 /* whatever... */ |
27 | 27 | ||
28 | /* | 28 | /* |
29 | * Valid machtype values for group JAZZ | ||
30 | */ | ||
31 | #define MACH_ACER_PICA_61 0 /* Acer PICA-61 (PICA1) */ | ||
32 | #define MACH_MIPS_MAGNUM_4000 1 /* Mips Magnum 4000 "RC4030" */ | ||
33 | #define MACH_OLIVETTI_M700 2 /* Olivetti M700-10 (-15 ??) */ | ||
34 | |||
35 | /* | ||
36 | * Valid machtype for group DEC | 29 | * Valid machtype for group DEC |
37 | */ | 30 | */ |
38 | #define MACH_DSUNKNOWN 0 | 31 | #define MACH_DSUNKNOWN 0 |
@@ -48,42 +41,6 @@ | |||
48 | #define MACH_DS5900 10 /* DECsystem 5900 */ | 41 | #define MACH_DS5900 10 /* DECsystem 5900 */ |
49 | 42 | ||
50 | /* | 43 | /* |
51 | * Valid machtype for group SNI_RM | ||
52 | */ | ||
53 | #define MACH_SNI_RM200_PCI 0 /* RM200/RM300/RM400 PCI series */ | ||
54 | |||
55 | /* | ||
56 | * Valid machtype for group SGI | ||
57 | */ | ||
58 | #define MACH_SGI_IP22 0 /* Indy, Indigo2, Challenge S */ | ||
59 | #define MACH_SGI_IP27 1 /* Origin 200, Origin 2000, Onyx 2 */ | ||
60 | #define MACH_SGI_IP28 2 /* Indigo2 Impact */ | ||
61 | #define MACH_SGI_IP32 3 /* O2 */ | ||
62 | #define MACH_SGI_IP30 4 /* Octane, Octane2 */ | ||
63 | |||
64 | /* | ||
65 | * Valid machtypes for group Toshiba | ||
66 | */ | ||
67 | #define MACH_PALLAS 0 | ||
68 | #define MACH_TOPAS 1 | ||
69 | #define MACH_JMR 2 | ||
70 | #define MACH_TOSHIBA_JMR3927 3 /* JMR-TX3927 CPU/IO board */ | ||
71 | #define MACH_TOSHIBA_RBTX4927 4 | ||
72 | #define MACH_TOSHIBA_RBTX4937 5 | ||
73 | #define MACH_TOSHIBA_RBTX4938 6 | ||
74 | |||
75 | /* | ||
76 | * Valid machtype for group LASAT | ||
77 | */ | ||
78 | #define MACH_LASAT_100 0 /* Masquerade II/SP100/SP50/SP25 */ | ||
79 | #define MACH_LASAT_200 1 /* Masquerade PRO/SP200 */ | ||
80 | |||
81 | /* | ||
82 | * Valid machtype for group NEC EMMA2RH | ||
83 | */ | ||
84 | #define MACH_NEC_MARKEINS 0 /* NEC EMMA2RH Mark-eins */ | ||
85 | |||
86 | /* | ||
87 | * Valid machtype for group PMC-MSP | 44 | * Valid machtype for group PMC-MSP |
88 | */ | 45 | */ |
89 | #define MACH_MSP4200_EVAL 0 /* PMC-Sierra MSP4200 Evaluation */ | 46 | #define MACH_MSP4200_EVAL 0 /* PMC-Sierra MSP4200 Evaluation */ |
diff --git a/include/asm-mips/cpu.h b/include/asm-mips/cpu.h index 1c35cac6f35b..229a786101d9 100644 --- a/include/asm-mips/cpu.h +++ b/include/asm-mips/cpu.h | |||
@@ -66,8 +66,10 @@ | |||
66 | #define PRID_IMP_RM7000 0x2700 | 66 | #define PRID_IMP_RM7000 0x2700 |
67 | #define PRID_IMP_NEVADA 0x2800 /* RM5260 ??? */ | 67 | #define PRID_IMP_NEVADA 0x2800 /* RM5260 ??? */ |
68 | #define PRID_IMP_RM9000 0x3400 | 68 | #define PRID_IMP_RM9000 0x3400 |
69 | #define PRID_IMP_LOONGSON1 0x4200 | ||
69 | #define PRID_IMP_R5432 0x5400 | 70 | #define PRID_IMP_R5432 0x5400 |
70 | #define PRID_IMP_R5500 0x5500 | 71 | #define PRID_IMP_R5500 0x5500 |
72 | #define PRID_IMP_LOONGSON2 0x6300 | ||
71 | 73 | ||
72 | #define PRID_IMP_UNKNOWN 0xff00 | 74 | #define PRID_IMP_UNKNOWN 0xff00 |
73 | 75 | ||
@@ -90,8 +92,6 @@ | |||
90 | #define PRID_IMP_24KE 0x9600 | 92 | #define PRID_IMP_24KE 0x9600 |
91 | #define PRID_IMP_74K 0x9700 | 93 | #define PRID_IMP_74K 0x9700 |
92 | #define PRID_IMP_1004K 0x9900 | 94 | #define PRID_IMP_1004K 0x9900 |
93 | #define PRID_IMP_LOONGSON1 0x4200 | ||
94 | #define PRID_IMP_LOONGSON2 0x6300 | ||
95 | 95 | ||
96 | /* | 96 | /* |
97 | * These are the PRID's for when 23:16 == PRID_COMP_SIBYTE | 97 | * These are the PRID's for when 23:16 == PRID_COMP_SIBYTE |
diff --git a/include/asm-mips/dec/kn05.h b/include/asm-mips/dec/kn05.h index 15fe8f881e60..56d22dc8803a 100644 --- a/include/asm-mips/dec/kn05.h +++ b/include/asm-mips/dec/kn05.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * KN04-CA) and DECsystem 5900/260 (KN05) R4k CPU card MB ASIC | 6 | * KN04-CA) and DECsystem 5900/260 (KN05) R4k CPU card MB ASIC |
7 | * definitions. | 7 | * definitions. |
8 | * | 8 | * |
9 | * Copyright (C) 2002, 2003, 2005 Maciej W. Rozycki | 9 | * Copyright (C) 2002, 2003, 2005, 2008 Maciej W. Rozycki |
10 | * | 10 | * |
11 | * This program is free software; you can redistribute it and/or | 11 | * This program is free software; you can redistribute it and/or |
12 | * modify it under the terms of the GNU General Public License | 12 | * modify it under the terms of the GNU General Public License |
@@ -54,11 +54,11 @@ | |||
54 | */ | 54 | */ |
55 | #define KN4K_MB_INT_TC (1<<0) /* TURBOchannel? */ | 55 | #define KN4K_MB_INT_TC (1<<0) /* TURBOchannel? */ |
56 | #define KN4K_MB_INT_RTC (1<<1) /* RTC? */ | 56 | #define KN4K_MB_INT_RTC (1<<1) /* RTC? */ |
57 | #define KN4K_MB_INT_MT (1<<3) /* ??? */ | 57 | #define KN4K_MB_INT_MT (1<<3) /* I/O ASIC cascade */ |
58 | 58 | ||
59 | /* | 59 | /* |
60 | * Bits for the MB control & status register. | 60 | * Bits for the MB control & status register. |
61 | * Set to 0x00bf8001 on my system by the ROM. | 61 | * Set to 0x00bf8001 for KN05 and to 0x003f8000 for KN04 by the firmware. |
62 | */ | 62 | */ |
63 | #define KN4K_MB_CSR_PF (1<<0) /* PreFetching enable? */ | 63 | #define KN4K_MB_CSR_PF (1<<0) /* PreFetching enable? */ |
64 | #define KN4K_MB_CSR_F (1<<1) /* ??? */ | 64 | #define KN4K_MB_CSR_F (1<<1) /* ??? */ |
@@ -69,7 +69,8 @@ | |||
69 | #define KN4K_MB_CSR_IM (1<<13) /* ??? */ | 69 | #define KN4K_MB_CSR_IM (1<<13) /* ??? */ |
70 | #define KN4K_MB_CSR_NC (1<<14) /* ??? */ | 70 | #define KN4K_MB_CSR_NC (1<<14) /* ??? */ |
71 | #define KN4K_MB_CSR_EE (1<<15) /* (bus) Exception Enable? */ | 71 | #define KN4K_MB_CSR_EE (1<<15) /* (bus) Exception Enable? */ |
72 | #define KN4K_MB_CSR_MSK (0x1f<<16) /* ??? */ | 72 | #define KN4K_MB_CSR_MSK (0x1f<<16) /* CPU Int[4:0] mask */ |
73 | #define KN4K_MB_CSR_FW (1<<21) /* ??? */ | 73 | #define KN4K_MB_CSR_FW (1<<21) /* ??? */ |
74 | #define KN4K_MB_CSR_W (1<<31) /* ??? */ | ||
74 | 75 | ||
75 | #endif /* __ASM_MIPS_DEC_KN05_H */ | 76 | #endif /* __ASM_MIPS_DEC_KN05_H */ |
diff --git a/include/asm-mips/inventory.h b/include/asm-mips/inventory.h deleted file mode 100644 index cc88aed23f0f..000000000000 --- a/include/asm-mips/inventory.h +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | /* | ||
2 | * Miguel de Icaza | ||
3 | */ | ||
4 | #ifndef __ASM_INVENTORY_H | ||
5 | #define __ASM_INVENTORY_H | ||
6 | |||
7 | #include <linux/compiler.h> | ||
8 | |||
9 | typedef struct inventory_s { | ||
10 | struct inventory_s *inv_next; | ||
11 | int inv_class; | ||
12 | int inv_type; | ||
13 | int inv_controller; | ||
14 | int inv_unit; | ||
15 | int inv_state; | ||
16 | } inventory_t; | ||
17 | |||
18 | extern int inventory_items; | ||
19 | |||
20 | extern void add_to_inventory(int class, int type, int controller, int unit, int state); | ||
21 | extern int dump_inventory_to_user(void __user *userbuf, int size); | ||
22 | extern int __init init_inventory(void); | ||
23 | |||
24 | #endif /* __ASM_INVENTORY_H */ | ||
diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index f18d2816cbec..501a40b9f18d 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h | |||
@@ -161,13 +161,6 @@ static inline void * isa_bus_to_virt(unsigned long address) | |||
161 | #define bus_to_virt phys_to_virt | 161 | #define bus_to_virt phys_to_virt |
162 | 162 | ||
163 | /* | 163 | /* |
164 | * isa_slot_offset is the address where E(ISA) busaddress 0 is mapped | ||
165 | * for the processor. This implies the assumption that there is only | ||
166 | * one of these busses. | ||
167 | */ | ||
168 | extern unsigned long isa_slot_offset; | ||
169 | |||
170 | /* | ||
171 | * Change "struct page" to physical address. | 164 | * Change "struct page" to physical address. |
172 | */ | 165 | */ |
173 | #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) | 166 | #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) |
@@ -528,16 +521,6 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int | |||
528 | } | 521 | } |
529 | 522 | ||
530 | /* | 523 | /* |
531 | * ISA space is 'always mapped' on currently supported MIPS systems, no need | ||
532 | * to explicitly ioremap() it. The fact that the ISA IO space is mapped | ||
533 | * to PAGE_OFFSET is pure coincidence - it does not mean ISA values | ||
534 | * are physical addresses. The following constant pointer can be | ||
535 | * used as the IO-area pointer (it can be iounmapped as well, so the | ||
536 | * analogy with PCI is quite large): | ||
537 | */ | ||
538 | #define __ISA_IO_base ((char *)(isa_slot_offset)) | ||
539 | |||
540 | /* | ||
541 | * The caches on some architectures aren't dma-coherent and have need to | 524 | * The caches on some architectures aren't dma-coherent and have need to |
542 | * handle this in software. There are three types of operations that | 525 | * handle this in software. There are three types of operations that |
543 | * can be applied to dma buffers. | 526 | * can be applied to dma buffers. |
diff --git a/include/asm-mips/lasat/lasat.h b/include/asm-mips/lasat/lasat.h index ea04d9262edc..caeba1e302a2 100644 --- a/include/asm-mips/lasat/lasat.h +++ b/include/asm-mips/lasat/lasat.h | |||
@@ -240,6 +240,8 @@ static inline void lasat_ndelay(unsigned int ns) | |||
240 | __delay(ns / lasat_ndelay_divider); | 240 | __delay(ns / lasat_ndelay_divider); |
241 | } | 241 | } |
242 | 242 | ||
243 | #define IS_LASAT_200() (current_cpu_data.cputype == CPU_R5000) | ||
244 | |||
243 | #endif /* !defined (_LANGUAGE_ASSEMBLY) */ | 245 | #endif /* !defined (_LANGUAGE_ASSEMBLY) */ |
244 | 246 | ||
245 | #define LASAT_SERVICEMODE_MAGIC_1 0xdeadbeef | 247 | #define LASAT_SERVICEMODE_MAGIC_1 0xdeadbeef |
diff --git a/include/asm-mips/mach-atlas/mc146818rtc.h b/include/asm-mips/mach-atlas/mc146818rtc.h deleted file mode 100644 index 51d337e1bbd1..000000000000 --- a/include/asm-mips/mach-atlas/mc146818rtc.h +++ /dev/null | |||
@@ -1,60 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1999, 2000, 2005 MIPS Technologies, Inc. | ||
3 | * All rights reserved. | ||
4 | * Authors: Carsten Langgaard <carstenl@mips.com> | ||
5 | * Maciej W. Rozycki <macro@mips.com> | ||
6 | * Copyright (C) 2003, 05 Ralf Baechle (ralf@linux-mips.org) | ||
7 | * | ||
8 | * This program is free software; you can distribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License (Version 2) as | ||
10 | * 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 | ||
15 | * for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License along | ||
18 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
19 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
20 | */ | ||
21 | #ifndef __ASM_MACH_ATLAS_MC146818RTC_H | ||
22 | #define __ASM_MACH_ATLAS_MC146818RTC_H | ||
23 | |||
24 | #include <linux/types.h> | ||
25 | |||
26 | #include <asm/addrspace.h> | ||
27 | |||
28 | #include <asm/mips-boards/atlas.h> | ||
29 | #include <asm/mips-boards/atlasint.h> | ||
30 | |||
31 | #define ARCH_RTC_LOCATION | ||
32 | |||
33 | #define RTC_PORT(x) (ATLAS_RTC_ADR_REG + (x) * 8) | ||
34 | #define RTC_IO_EXTENT 0x100 | ||
35 | #define RTC_IOMAPPED 0 | ||
36 | #define RTC_IRQ ATLAS_INT_RTC | ||
37 | |||
38 | static inline unsigned char CMOS_READ(unsigned long addr) | ||
39 | { | ||
40 | volatile u32 *ireg = (void *)CKSEG1ADDR(RTC_PORT(0)); | ||
41 | volatile u32 *dreg = (void *)CKSEG1ADDR(RTC_PORT(1)); | ||
42 | |||
43 | *ireg = addr; | ||
44 | return *dreg; | ||
45 | } | ||
46 | |||
47 | static inline void CMOS_WRITE(unsigned char data, unsigned long addr) | ||
48 | { | ||
49 | volatile u32 *ireg = (void *)CKSEG1ADDR(RTC_PORT(0)); | ||
50 | volatile u32 *dreg = (void *)CKSEG1ADDR(RTC_PORT(1)); | ||
51 | |||
52 | *ireg = addr; | ||
53 | *dreg = data; | ||
54 | } | ||
55 | |||
56 | #define RTC_ALWAYS_BCD 0 | ||
57 | |||
58 | #define mc146818_decode_year(year) ((year) < 70 ? (year) + 2000 : (year) + 1900) | ||
59 | |||
60 | #endif /* __ASM_MACH_ATLAS_MC146818RTC_H */ | ||
diff --git a/include/asm-mips/mach-au1x00/au1100_mmc.h b/include/asm-mips/mach-au1x00/au1100_mmc.h index 9e0028f60a43..c35e20918490 100644 --- a/include/asm-mips/mach-au1x00/au1100_mmc.h +++ b/include/asm-mips/mach-au1x00/au1100_mmc.h | |||
@@ -38,15 +38,15 @@ | |||
38 | #ifndef __ASM_AU1100_MMC_H | 38 | #ifndef __ASM_AU1100_MMC_H |
39 | #define __ASM_AU1100_MMC_H | 39 | #define __ASM_AU1100_MMC_H |
40 | 40 | ||
41 | 41 | #include <linux/leds.h> | |
42 | #define NUM_AU1100_MMC_CONTROLLERS 2 | 42 | |
43 | 43 | struct au1xmmc_platform_data { | |
44 | #if defined(CONFIG_SOC_AU1100) | 44 | int(*cd_setup)(void *mmc_host, int on); |
45 | #define AU1100_SD_IRQ AU1100_SD_INT | 45 | int(*card_inserted)(void *mmc_host); |
46 | #elif defined(CONFIG_SOC_AU1200) | 46 | int(*card_readonly)(void *mmc_host); |
47 | #define AU1100_SD_IRQ AU1200_SD_INT | 47 | void(*set_power)(void *mmc_host, int state); |
48 | #endif | 48 | struct led_classdev *led; |
49 | 49 | }; | |
50 | 50 | ||
51 | #define SD0_BASE 0xB0600000 | 51 | #define SD0_BASE 0xB0600000 |
52 | #define SD1_BASE 0xB0680000 | 52 | #define SD1_BASE 0xB0680000 |
diff --git a/include/asm-mips/mach-au1x00/au1xxx_psc.h b/include/asm-mips/mach-au1x00/au1xxx_psc.h index dae4eca2417e..892b7f168eb4 100644 --- a/include/asm-mips/mach-au1x00/au1xxx_psc.h +++ b/include/asm-mips/mach-au1x00/au1xxx_psc.h | |||
@@ -204,6 +204,14 @@ typedef struct psc_i2s { | |||
204 | u32 psc_i2sudf; | 204 | u32 psc_i2sudf; |
205 | } psc_i2s_t; | 205 | } psc_i2s_t; |
206 | 206 | ||
207 | #define PSC_I2SCFG_OFFSET 0x08 | ||
208 | #define PSC_I2SMASK_OFFSET 0x0C | ||
209 | #define PSC_I2SPCR_OFFSET 0x10 | ||
210 | #define PSC_I2SSTAT_OFFSET 0x14 | ||
211 | #define PSC_I2SEVENT_OFFSET 0x18 | ||
212 | #define PSC_I2SRXTX_OFFSET 0x1C | ||
213 | #define PSC_I2SUDF_OFFSET 0x20 | ||
214 | |||
207 | /* I2S Config Register. */ | 215 | /* I2S Config Register. */ |
208 | #define PSC_I2SCFG_RT_MASK (3 << 30) | 216 | #define PSC_I2SCFG_RT_MASK (3 << 30) |
209 | #define PSC_I2SCFG_RT_FIFO1 (0 << 30) | 217 | #define PSC_I2SCFG_RT_FIFO1 (0 << 30) |
diff --git a/include/asm-mips/mach-db1x00/db1x00.h b/include/asm-mips/mach-db1x00/db1x00.h index 612ae90dbcb8..1a515b8c870f 100644 --- a/include/asm-mips/mach-db1x00/db1x00.h +++ b/include/asm-mips/mach-db1x00/db1x00.h | |||
@@ -146,51 +146,6 @@ typedef volatile struct | |||
146 | ((((VCC) << 2) | ((VPP) << 0)) << ((SLOT) * 8)) | 146 | ((((VCC) << 2) | ((VPP) << 0)) << ((SLOT) * 8)) |
147 | 147 | ||
148 | /* | 148 | /* |
149 | * SD controller macros | ||
150 | */ | ||
151 | |||
152 | /* Detect card. */ | ||
153 | #define mmc_card_inserted(_n_, _res_) \ | ||
154 | do { \ | ||
155 | BCSR * const bcsr = (BCSR *)0xAE000000; \ | ||
156 | unsigned long mmc_wp, board_specific; \ | ||
157 | if ((_n_)) { \ | ||
158 | mmc_wp = BCSR_BOARD_SD1_WP; \ | ||
159 | } else { \ | ||
160 | mmc_wp = BCSR_BOARD_SD0_WP; \ | ||
161 | } \ | ||
162 | board_specific = au_readl((unsigned long)(&bcsr->specific)); \ | ||
163 | if (!(board_specific & mmc_wp)) {/* low means card present */ \ | ||
164 | *(int *)(_res_) = 1; \ | ||
165 | } else { \ | ||
166 | *(int *)(_res_) = 0; \ | ||
167 | } \ | ||
168 | } while (0) | ||
169 | |||
170 | /* | ||
171 | * Apply power to card slot(s). | ||
172 | */ | ||
173 | #define mmc_power_on(_n_) \ | ||
174 | do { \ | ||
175 | BCSR * const bcsr = (BCSR *)0xAE000000; \ | ||
176 | unsigned long mmc_pwr, mmc_wp, board_specific; \ | ||
177 | if ((_n_)) { \ | ||
178 | mmc_pwr = BCSR_BOARD_SD1_PWR; \ | ||
179 | mmc_wp = BCSR_BOARD_SD1_WP; \ | ||
180 | } else { \ | ||
181 | mmc_pwr = BCSR_BOARD_SD0_PWR; \ | ||
182 | mmc_wp = BCSR_BOARD_SD0_WP; \ | ||
183 | } \ | ||
184 | board_specific = au_readl((unsigned long)(&bcsr->specific)); \ | ||
185 | if (!(board_specific & mmc_wp)) {/* low means card present */ \ | ||
186 | board_specific |= mmc_pwr; \ | ||
187 | au_writel(board_specific, (int)(&bcsr->specific)); \ | ||
188 | au_sync(); \ | ||
189 | } \ | ||
190 | } while (0) | ||
191 | |||
192 | |||
193 | /* | ||
194 | * NAND defines | 149 | * NAND defines |
195 | * | 150 | * |
196 | * Timing values as described in databook, * ns value stripped of the | 151 | * Timing values as described in databook, * ns value stripped of the |
diff --git a/include/asm-mips/mach-mips/cpu-feature-overrides.h b/include/asm-mips/mach-malta/cpu-feature-overrides.h index 7f3e3f9bd23a..7f3e3f9bd23a 100644 --- a/include/asm-mips/mach-mips/cpu-feature-overrides.h +++ b/include/asm-mips/mach-malta/cpu-feature-overrides.h | |||
diff --git a/include/asm-mips/mach-mips/irq.h b/include/asm-mips/mach-malta/irq.h index 9b9da26683c2..9b9da26683c2 100644 --- a/include/asm-mips/mach-mips/irq.h +++ b/include/asm-mips/mach-malta/irq.h | |||
diff --git a/include/asm-mips/mach-mips/kernel-entry-init.h b/include/asm-mips/mach-malta/kernel-entry-init.h index 0b793e7bf67e..0b793e7bf67e 100644 --- a/include/asm-mips/mach-mips/kernel-entry-init.h +++ b/include/asm-mips/mach-malta/kernel-entry-init.h | |||
diff --git a/include/asm-mips/mach-mips/mach-gt64120.h b/include/asm-mips/mach-malta/mach-gt64120.h index 0f863148f3b6..0f863148f3b6 100644 --- a/include/asm-mips/mach-mips/mach-gt64120.h +++ b/include/asm-mips/mach-malta/mach-gt64120.h | |||
diff --git a/include/asm-mips/mach-mips/mc146818rtc.h b/include/asm-mips/mach-malta/mc146818rtc.h index ea612f37f614..ea612f37f614 100644 --- a/include/asm-mips/mach-mips/mc146818rtc.h +++ b/include/asm-mips/mach-malta/mc146818rtc.h | |||
diff --git a/include/asm-mips/mach-mips/war.h b/include/asm-mips/mach-malta/war.h index 7c6931d5f45f..7c6931d5f45f 100644 --- a/include/asm-mips/mach-mips/war.h +++ b/include/asm-mips/mach-malta/war.h | |||
diff --git a/include/asm-mips/mach-jmr3927/ioremap.h b/include/asm-mips/mach-tx39xx/ioremap.h index 29989ff10d66..93c6c04ffda3 100644 --- a/include/asm-mips/mach-jmr3927/ioremap.h +++ b/include/asm-mips/mach-tx39xx/ioremap.h | |||
@@ -1,13 +1,13 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm-mips/mach-jmr3927/ioremap.h | 2 | * include/asm-mips/mach-tx39xx/ioremap.h |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or | 4 | * This program is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU General Public License | 5 | * modify it under the terms of the GNU General Public License |
6 | * as published by the Free Software Foundation; either version | 6 | * as published by the Free Software Foundation; either version |
7 | * 2 of the License, or (at your option) any later version. | 7 | * 2 of the License, or (at your option) any later version. |
8 | */ | 8 | */ |
9 | #ifndef __ASM_MACH_JMR3927_IOREMAP_H | 9 | #ifndef __ASM_MACH_TX39XX_IOREMAP_H |
10 | #define __ASM_MACH_JMR3927_IOREMAP_H | 10 | #define __ASM_MACH_TX39XX_IOREMAP_H |
11 | 11 | ||
12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
13 | 13 | ||
@@ -35,4 +35,4 @@ static inline int plat_iounmap(const volatile void __iomem *addr) | |||
35 | return (unsigned long)addr >= TXX9_DIRECTMAP_BASE; | 35 | return (unsigned long)addr >= TXX9_DIRECTMAP_BASE; |
36 | } | 36 | } |
37 | 37 | ||
38 | #endif /* __ASM_MACH_JMR3927_IOREMAP_H */ | 38 | #endif /* __ASM_MACH_TX39XX_IOREMAP_H */ |
diff --git a/include/asm-mips/mach-jmr3927/mangle-port.h b/include/asm-mips/mach-tx39xx/mangle-port.h index 11bffcd1043b..ef0b502fd8b7 100644 --- a/include/asm-mips/mach-jmr3927/mangle-port.h +++ b/include/asm-mips/mach-tx39xx/mangle-port.h | |||
@@ -1,7 +1,12 @@ | |||
1 | #ifndef __ASM_MACH_JMR3927_MANGLE_PORT_H | 1 | #ifndef __ASM_MACH_TX39XX_MANGLE_PORT_H |
2 | #define __ASM_MACH_JMR3927_MANGLE_PORT_H | 2 | #define __ASM_MACH_TX39XX_MANGLE_PORT_H |
3 | 3 | ||
4 | extern unsigned long __swizzle_addr_b(unsigned long port); | 4 | #if defined(CONFIG_TOSHIBA_JMR3927) |
5 | extern unsigned long (*__swizzle_addr_b)(unsigned long port); | ||
6 | #define NEEDS_TXX9_SWIZZLE_ADDR_B | ||
7 | #else | ||
8 | #define __swizzle_addr_b(port) (port) | ||
9 | #endif | ||
5 | #define __swizzle_addr_w(port) (port) | 10 | #define __swizzle_addr_w(port) (port) |
6 | #define __swizzle_addr_l(port) (port) | 11 | #define __swizzle_addr_l(port) (port) |
7 | #define __swizzle_addr_q(port) (port) | 12 | #define __swizzle_addr_q(port) (port) |
@@ -15,4 +20,4 @@ extern unsigned long __swizzle_addr_b(unsigned long port); | |||
15 | #define ioswabq(a, x) le64_to_cpu(x) | 20 | #define ioswabq(a, x) le64_to_cpu(x) |
16 | #define __mem_ioswabq(a, x) (x) | 21 | #define __mem_ioswabq(a, x) (x) |
17 | 22 | ||
18 | #endif /* __ASM_MACH_JMR3927_MANGLE_PORT_H */ | 23 | #endif /* __ASM_MACH_TX39XX_MANGLE_PORT_H */ |
diff --git a/include/asm-mips/mach-jmr3927/war.h b/include/asm-mips/mach-tx39xx/war.h index 1ff55fb3fbcb..433814616359 100644 --- a/include/asm-mips/mach-jmr3927/war.h +++ b/include/asm-mips/mach-tx39xx/war.h | |||
@@ -5,8 +5,8 @@ | |||
5 | * | 5 | * |
6 | * Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org> | 6 | * Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org> |
7 | */ | 7 | */ |
8 | #ifndef __ASM_MIPS_MACH_JMR3927_WAR_H | 8 | #ifndef __ASM_MIPS_MACH_TX39XX_WAR_H |
9 | #define __ASM_MIPS_MACH_JMR3927_WAR_H | 9 | #define __ASM_MIPS_MACH_TX39XX_WAR_H |
10 | 10 | ||
11 | #define R4600_V1_INDEX_ICACHEOP_WAR 0 | 11 | #define R4600_V1_INDEX_ICACHEOP_WAR 0 |
12 | #define R4600_V1_HIT_CACHEOP_WAR 0 | 12 | #define R4600_V1_HIT_CACHEOP_WAR 0 |
@@ -22,4 +22,4 @@ | |||
22 | #define R10000_LLSC_WAR 0 | 22 | #define R10000_LLSC_WAR 0 |
23 | #define MIPS34K_MISSED_ITLB_WAR 0 | 23 | #define MIPS34K_MISSED_ITLB_WAR 0 |
24 | 24 | ||
25 | #endif /* __ASM_MIPS_MACH_JMR3927_WAR_H */ | 25 | #endif /* __ASM_MIPS_MACH_TX39XX_WAR_H */ |
diff --git a/include/asm-mips/mach-vr41xx/irq.h b/include/asm-mips/mach-vr41xx/irq.h index 848812296052..862058d3f81b 100644 --- a/include/asm-mips/mach-vr41xx/irq.h +++ b/include/asm-mips/mach-vr41xx/irq.h | |||
@@ -2,9 +2,6 @@ | |||
2 | #define __ASM_MACH_VR41XX_IRQ_H | 2 | #define __ASM_MACH_VR41XX_IRQ_H |
3 | 3 | ||
4 | #include <asm/vr41xx/irq.h> /* for MIPS_CPU_IRQ_BASE */ | 4 | #include <asm/vr41xx/irq.h> /* for MIPS_CPU_IRQ_BASE */ |
5 | #ifdef CONFIG_NEC_CMBVR4133 | ||
6 | #include <asm/vr41xx/cmbvr4133.h> /* for I8259A_IRQ_BASE */ | ||
7 | #endif | ||
8 | 5 | ||
9 | #include_next <irq.h> | 6 | #include_next <irq.h> |
10 | 7 | ||
diff --git a/include/asm-mips/mips-boards/generic.h b/include/asm-mips/mips-boards/generic.h index 33407bee4e73..7f0b034dd9a5 100644 --- a/include/asm-mips/mips-boards/generic.h +++ b/include/asm-mips/mips-boards/generic.h | |||
@@ -27,12 +27,8 @@ | |||
27 | /* | 27 | /* |
28 | * Display register base. | 28 | * Display register base. |
29 | */ | 29 | */ |
30 | #ifdef CONFIG_MIPS_SEAD | ||
31 | #define ASCII_DISPLAY_POS_BASE 0x1f0005c0 | ||
32 | #else | ||
33 | #define ASCII_DISPLAY_WORD_BASE 0x1f000410 | 30 | #define ASCII_DISPLAY_WORD_BASE 0x1f000410 |
34 | #define ASCII_DISPLAY_POS_BASE 0x1f000418 | 31 | #define ASCII_DISPLAY_POS_BASE 0x1f000418 |
35 | #endif | ||
36 | 32 | ||
37 | 33 | ||
38 | /* | 34 | /* |
@@ -44,13 +40,8 @@ | |||
44 | /* | 40 | /* |
45 | * Reset register. | 41 | * Reset register. |
46 | */ | 42 | */ |
47 | #ifdef CONFIG_MIPS_SEAD | ||
48 | #define SOFTRES_REG 0x1e800050 | ||
49 | #define GORESET 0x4d | ||
50 | #else | ||
51 | #define SOFTRES_REG 0x1f000500 | 43 | #define SOFTRES_REG 0x1f000500 |
52 | #define GORESET 0x42 | 44 | #define GORESET 0x42 |
53 | #endif | ||
54 | 45 | ||
55 | /* | 46 | /* |
56 | * Revision register. | 47 | * Revision register. |
diff --git a/include/asm-mips/namei.h b/include/asm-mips/namei.h index c94d12d1f868..a6605a752469 100644 --- a/include/asm-mips/namei.h +++ b/include/asm-mips/namei.h | |||
@@ -1,26 +1,11 @@ | |||
1 | #ifndef _ASM_NAMEI_H | 1 | #ifndef _ASM_NAMEI_H |
2 | #define _ASM_NAMEI_H | 2 | #define _ASM_NAMEI_H |
3 | 3 | ||
4 | #include <linux/personality.h> | 4 | /* |
5 | #include <linux/stddef.h> | 5 | * This dummy routine maybe changed to something useful |
6 | * for /usr/gnemul/ emulation stuff. | ||
7 | */ | ||
6 | 8 | ||
7 | #define IRIX_EMUL "/usr/gnemul/irix/" | 9 | #define __emul_prefix() NULL |
8 | #define RISCOS_EMUL "/usr/gnemul/riscos/" | ||
9 | |||
10 | static inline char *__emul_prefix(void) | ||
11 | { | ||
12 | switch (current->personality) { | ||
13 | case PER_IRIX32: | ||
14 | case PER_IRIXN32: | ||
15 | case PER_IRIX64: | ||
16 | return IRIX_EMUL; | ||
17 | |||
18 | case PER_RISCOS: | ||
19 | return RISCOS_EMUL; | ||
20 | |||
21 | default: | ||
22 | return NULL; | ||
23 | } | ||
24 | } | ||
25 | 10 | ||
26 | #endif /* _ASM_NAMEI_H */ | 11 | #endif /* _ASM_NAMEI_H */ |
diff --git a/include/asm-mips/pci.h b/include/asm-mips/pci.h index 301ff2f28012..d3be83436070 100644 --- a/include/asm-mips/pci.h +++ b/include/asm-mips/pci.h | |||
@@ -172,4 +172,7 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | |||
172 | return channel ? 15 : 14; | 172 | return channel ? 15 : 14; |
173 | } | 173 | } |
174 | 174 | ||
175 | extern int pci_probe_only; | ||
176 | extern unsigned int pcibios_max_latency; | ||
177 | |||
175 | #endif /* _ASM_PCI_H */ | 178 | #endif /* _ASM_PCI_H */ |
diff --git a/include/asm-mips/prctl.h b/include/asm-mips/prctl.h deleted file mode 100644 index 8121a9a75bfd..000000000000 --- a/include/asm-mips/prctl.h +++ /dev/null | |||
@@ -1,41 +0,0 @@ | |||
1 | /* | ||
2 | * IRIX prctl interface | ||
3 | * | ||
4 | * The IRIX kernel maps a page at PRDA_ADDRESS with the | ||
5 | * contents of prda and fills it the bits on prda_sys. | ||
6 | */ | ||
7 | |||
8 | #ifndef __PRCTL_H__ | ||
9 | #define __PRCTL_H__ | ||
10 | |||
11 | #define PRDA_ADDRESS 0x200000L | ||
12 | #define PRDA ((struct prda *) PRDA_ADDRESS) | ||
13 | |||
14 | struct prda_sys { | ||
15 | pid_t t_pid; | ||
16 | u32 t_hint; | ||
17 | u32 t_dlactseq; | ||
18 | u32 t_fpflags; | ||
19 | u32 t_prid; /* processor type, $prid CP0 register */ | ||
20 | u32 t_dlendseq; | ||
21 | u64 t_unused1[5]; | ||
22 | pid_t t_rpid; | ||
23 | s32 t_resched; | ||
24 | u32 t_unused[8]; | ||
25 | u32 t_cpu; /* current/last cpu */ | ||
26 | |||
27 | /* FIXME: The signal information, not supported by Linux now */ | ||
28 | u32 t_flags; /* if true, then the sigprocmask is in userspace */ | ||
29 | u32 t_sigprocmask [1]; /* the sigprocmask */ | ||
30 | }; | ||
31 | |||
32 | struct prda { | ||
33 | char fill [0xe00]; | ||
34 | struct prda_sys prda_sys; | ||
35 | }; | ||
36 | |||
37 | #define t_sys prda_sys | ||
38 | |||
39 | ptrdiff_t prctl(int op, int v1, int v2); | ||
40 | |||
41 | #endif | ||
diff --git a/include/asm-mips/setup.h b/include/asm-mips/setup.h index 70009a902639..883f59bfa097 100644 --- a/include/asm-mips/setup.h +++ b/include/asm-mips/setup.h | |||
@@ -3,4 +3,6 @@ | |||
3 | 3 | ||
4 | #define COMMAND_LINE_SIZE 256 | 4 | #define COMMAND_LINE_SIZE 256 |
5 | 5 | ||
6 | extern void setup_early_printk(void); | ||
7 | |||
6 | #endif /* __SETUP_H */ | 8 | #endif /* __SETUP_H */ |
diff --git a/include/asm-mips/signal.h b/include/asm-mips/signal.h index 7a28989f7ee3..bee5153aca48 100644 --- a/include/asm-mips/signal.h +++ b/include/asm-mips/signal.h | |||
@@ -119,9 +119,6 @@ struct sigaction { | |||
119 | 119 | ||
120 | struct k_sigaction { | 120 | struct k_sigaction { |
121 | struct sigaction sa; | 121 | struct sigaction sa; |
122 | #ifdef CONFIG_BINFMT_IRIX | ||
123 | void (*sa_restorer)(void); | ||
124 | #endif | ||
125 | }; | 122 | }; |
126 | 123 | ||
127 | /* IRIX compatible stack_t */ | 124 | /* IRIX compatible stack_t */ |
diff --git a/include/asm-mips/smp.h b/include/asm-mips/smp.h index 84fef1aeec0c..0ff5b523ea77 100644 --- a/include/asm-mips/smp.h +++ b/include/asm-mips/smp.h | |||
@@ -35,16 +35,6 @@ extern int __cpu_logical_map[NR_CPUS]; | |||
35 | 35 | ||
36 | #define NO_PROC_ID (-1) | 36 | #define NO_PROC_ID (-1) |
37 | 37 | ||
38 | struct call_data_struct { | ||
39 | void (*func)(void *); | ||
40 | void *info; | ||
41 | atomic_t started; | ||
42 | atomic_t finished; | ||
43 | int wait; | ||
44 | }; | ||
45 | |||
46 | extern struct call_data_struct *call_data; | ||
47 | |||
48 | #define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */ | 38 | #define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */ |
49 | #define SMP_CALL_FUNCTION 0x2 | 39 | #define SMP_CALL_FUNCTION 0x2 |
50 | 40 | ||
@@ -67,4 +57,7 @@ static inline void smp_send_reschedule(int cpu) | |||
67 | 57 | ||
68 | extern asmlinkage void smp_call_function_interrupt(void); | 58 | extern asmlinkage void smp_call_function_interrupt(void); |
69 | 59 | ||
60 | extern void arch_send_call_function_single_ipi(int cpu); | ||
61 | extern void arch_send_call_function_ipi(cpumask_t mask); | ||
62 | |||
70 | #endif /* __ASM_SMP_H */ | 63 | #endif /* __ASM_SMP_H */ |
diff --git a/include/asm-mips/traps.h b/include/asm-mips/traps.h index e5dbde625ec2..90ff2f497c50 100644 --- a/include/asm-mips/traps.h +++ b/include/asm-mips/traps.h | |||
@@ -24,6 +24,5 @@ extern int (*board_be_handler)(struct pt_regs *regs, int is_fixup); | |||
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); | 26 | extern void (*board_bind_eic_interrupt)(int irq, int regset); |
27 | extern void (*board_watchpoint_handler)(struct pt_regs *regs); | ||
28 | 27 | ||
29 | #endif /* _ASM_TRAPS_H */ | 28 | #endif /* _ASM_TRAPS_H */ |
diff --git a/include/asm-mips/tx4927/tx4927.h b/include/asm-mips/tx4927/tx4927.h deleted file mode 100644 index 193e80a17c12..000000000000 --- a/include/asm-mips/tx4927/tx4927.h +++ /dev/null | |||
@@ -1,46 +0,0 @@ | |||
1 | /* | ||
2 | * Author: MontaVista Software, Inc. | ||
3 | * source@mvista.com | ||
4 | * | ||
5 | * Copyright 2001-2006 MontaVista Software Inc. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||
15 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
17 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS | ||
18 | * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
19 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR | ||
20 | * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE | ||
21 | * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | #ifndef __ASM_TX4927_TX4927_H | ||
28 | #define __ASM_TX4927_TX4927_H | ||
29 | |||
30 | #include <asm/txx9irq.h> | ||
31 | |||
32 | #define TX4927_IRQ_CP0_BEG MIPS_CPU_IRQ_BASE | ||
33 | #define TX4927_IRQ_CP0_END (MIPS_CPU_IRQ_BASE + 8 - 1) | ||
34 | |||
35 | #define TX4927_IRQ_PIC_BEG TXX9_IRQ_BASE | ||
36 | #define TX4927_IRQ_PIC_END (TXX9_IRQ_BASE + TXx9_MAX_IR - 1) | ||
37 | |||
38 | |||
39 | #define TX4927_IRQ_USER0 (TX4927_IRQ_CP0_BEG+0) | ||
40 | #define TX4927_IRQ_USER1 (TX4927_IRQ_CP0_BEG+1) | ||
41 | #define TX4927_IRQ_NEST_PIC_ON_CP0 (TX4927_IRQ_CP0_BEG+2) | ||
42 | #define TX4927_IRQ_CPU_TIMER (TX4927_IRQ_CP0_BEG+7) | ||
43 | |||
44 | #define TX4927_IRQ_NEST_EXT_ON_PIC (TX4927_IRQ_PIC_BEG+3) | ||
45 | |||
46 | #endif /* __ASM_TX4927_TX4927_H */ | ||
diff --git a/include/asm-mips/tx4927/tx4927_pci.h b/include/asm-mips/tx4927/tx4927_pci.h deleted file mode 100644 index 0be77df70f2b..000000000000 --- a/include/asm-mips/tx4927/tx4927_pci.h +++ /dev/null | |||
@@ -1,268 +0,0 @@ | |||
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-2001 Toshiba Corporation | ||
7 | */ | ||
8 | #ifndef __ASM_TX4927_TX4927_PCI_H | ||
9 | #define __ASM_TX4927_TX4927_PCI_H | ||
10 | |||
11 | #define TX4927_CCFG_TOE 0x00004000 | ||
12 | #define TX4927_CCFG_WR 0x00008000 | ||
13 | #define TX4927_CCFG_TINTDIS 0x01000000 | ||
14 | |||
15 | #define TX4927_PCIMEM 0x08000000 | ||
16 | #define TX4927_PCIMEM_SIZE 0x08000000 | ||
17 | #define TX4927_PCIIO 0x16000000 | ||
18 | #define TX4927_PCIIO_SIZE 0x01000000 | ||
19 | |||
20 | #define TX4927_SDRAMC_REG 0xff1f8000 | ||
21 | #define TX4927_EBUSC_REG 0xff1f9000 | ||
22 | #define TX4927_PCIC_REG 0xff1fd000 | ||
23 | #define TX4927_CCFG_REG 0xff1fe000 | ||
24 | #define TX4927_IRC_REG 0xff1ff600 | ||
25 | #define TX4927_NR_TMR 3 | ||
26 | #define TX4927_TMR_REG(ch) (0xff1ff000 + (ch) * 0x100) | ||
27 | #define TX4927_CE3 0x17f00000 /* 1M */ | ||
28 | #define TX4927_PCIRESET_ADDR 0xbc00f006 | ||
29 | #define TX4927_PCI_CLK_ADDR (KSEG1 + TX4927_CE3 + 0x00040020) | ||
30 | |||
31 | #define TX4927_IMSTAT_ADDR(n) (KSEG1 + TX4927_CE3 + 0x0004001a + (n)) | ||
32 | #define tx4927_imstat_ptr(n) \ | ||
33 | ((volatile unsigned char *)TX4927_IMSTAT_ADDR(n)) | ||
34 | |||
35 | /* bits for ISTAT3/IMASK3/IMSTAT3 */ | ||
36 | #define TX4927_INT3B_PCID 0 | ||
37 | #define TX4927_INT3B_PCIC 1 | ||
38 | #define TX4927_INT3B_PCIB 2 | ||
39 | #define TX4927_INT3B_PCIA 3 | ||
40 | #define TX4927_INT3F_PCID (1 << TX4927_INT3B_PCID) | ||
41 | #define TX4927_INT3F_PCIC (1 << TX4927_INT3B_PCIC) | ||
42 | #define TX4927_INT3F_PCIB (1 << TX4927_INT3B_PCIB) | ||
43 | #define TX4927_INT3F_PCIA (1 << TX4927_INT3B_PCIA) | ||
44 | |||
45 | /* bits for PCI_CLK (S6) */ | ||
46 | #define TX4927_PCI_CLK_HOST 0x80 | ||
47 | #define TX4927_PCI_CLK_MASK (0x0f << 3) | ||
48 | #define TX4927_PCI_CLK_33 (0x01 << 3) | ||
49 | #define TX4927_PCI_CLK_25 (0x04 << 3) | ||
50 | #define TX4927_PCI_CLK_66 (0x09 << 3) | ||
51 | #define TX4927_PCI_CLK_50 (0x0c << 3) | ||
52 | #define TX4927_PCI_CLK_ACK 0x04 | ||
53 | #define TX4927_PCI_CLK_ACE 0x02 | ||
54 | #define TX4927_PCI_CLK_ENDIAN 0x01 | ||
55 | #define TX4927_NR_IRQ_LOCAL TX4927_IRQ_PIC_BEG | ||
56 | #define TX4927_NR_IRQ_IRC 32 /* On-Chip IRC */ | ||
57 | |||
58 | #define TX4927_IR_PCIC 16 | ||
59 | #define TX4927_IR_PCIERR 22 | ||
60 | #define TX4927_IR_PCIPMA 23 | ||
61 | #define TX4927_IRQ_IRC_PCIC (TX4927_NR_IRQ_LOCAL + TX4927_IR_PCIC) | ||
62 | #define TX4927_IRQ_IRC_PCIERR (TX4927_NR_IRQ_LOCAL + TX4927_IR_PCIERR) | ||
63 | #define TX4927_IRQ_IOC1 (TX4927_NR_IRQ_LOCAL + TX4927_NR_IRQ_IRC) | ||
64 | #define TX4927_IRQ_IOC_PCID (TX4927_IRQ_IOC1 + TX4927_INT3B_PCID) | ||
65 | #define TX4927_IRQ_IOC_PCIC (TX4927_IRQ_IOC1 + TX4927_INT3B_PCIC) | ||
66 | #define TX4927_IRQ_IOC_PCIB (TX4927_IRQ_IOC1 + TX4927_INT3B_PCIB) | ||
67 | #define TX4927_IRQ_IOC_PCIA (TX4927_IRQ_IOC1 + TX4927_INT3B_PCIA) | ||
68 | |||
69 | #ifdef _LANGUAGE_ASSEMBLY | ||
70 | #define _CONST64(c) c | ||
71 | #else | ||
72 | #define _CONST64(c) c##ull | ||
73 | |||
74 | #include <asm/byteorder.h> | ||
75 | |||
76 | #define tx4927_pcireset_ptr \ | ||
77 | ((volatile unsigned char *)TX4927_PCIRESET_ADDR) | ||
78 | #define tx4927_pci_clk_ptr \ | ||
79 | ((volatile unsigned char *)TX4927_PCI_CLK_ADDR) | ||
80 | |||
81 | struct tx4927_sdramc_reg { | ||
82 | volatile unsigned long long cr[4]; | ||
83 | volatile unsigned long long unused0[4]; | ||
84 | volatile unsigned long long tr; | ||
85 | volatile unsigned long long unused1[2]; | ||
86 | volatile unsigned long long cmd; | ||
87 | }; | ||
88 | |||
89 | struct tx4927_ebusc_reg { | ||
90 | volatile unsigned long long cr[8]; | ||
91 | }; | ||
92 | |||
93 | struct tx4927_ccfg_reg { | ||
94 | volatile unsigned long long ccfg; | ||
95 | volatile unsigned long long crir; | ||
96 | volatile unsigned long long pcfg; | ||
97 | volatile unsigned long long tear; | ||
98 | volatile unsigned long long clkctr; | ||
99 | volatile unsigned long long unused0; | ||
100 | volatile unsigned long long garbc; | ||
101 | volatile unsigned long long unused1; | ||
102 | volatile unsigned long long unused2; | ||
103 | volatile unsigned long long ramp; | ||
104 | }; | ||
105 | |||
106 | struct tx4927_pcic_reg { | ||
107 | volatile unsigned long pciid; | ||
108 | volatile unsigned long pcistatus; | ||
109 | volatile unsigned long pciccrev; | ||
110 | volatile unsigned long pcicfg1; | ||
111 | volatile unsigned long p2gm0plbase; /* +10 */ | ||
112 | volatile unsigned long p2gm0pubase; | ||
113 | volatile unsigned long p2gm1plbase; | ||
114 | volatile unsigned long p2gm1pubase; | ||
115 | volatile unsigned long p2gm2pbase; /* +20 */ | ||
116 | volatile unsigned long p2giopbase; | ||
117 | volatile unsigned long unused0; | ||
118 | volatile unsigned long pcisid; | ||
119 | volatile unsigned long unused1; /* +30 */ | ||
120 | volatile unsigned long pcicapptr; | ||
121 | volatile unsigned long unused2; | ||
122 | volatile unsigned long pcicfg2; | ||
123 | volatile unsigned long g2ptocnt; /* +40 */ | ||
124 | volatile unsigned long unused3[15]; | ||
125 | volatile unsigned long g2pstatus; /* +80 */ | ||
126 | volatile unsigned long g2pmask; | ||
127 | volatile unsigned long pcisstatus; | ||
128 | volatile unsigned long pcimask; | ||
129 | volatile unsigned long p2gcfg; /* +90 */ | ||
130 | volatile unsigned long p2gstatus; | ||
131 | volatile unsigned long p2gmask; | ||
132 | volatile unsigned long p2gccmd; | ||
133 | volatile unsigned long unused4[24]; /* +a0 */ | ||
134 | volatile unsigned long pbareqport; /* +100 */ | ||
135 | volatile unsigned long pbacfg; | ||
136 | volatile unsigned long pbastatus; | ||
137 | volatile unsigned long pbamask; | ||
138 | volatile unsigned long pbabm; /* +110 */ | ||
139 | volatile unsigned long pbacreq; | ||
140 | volatile unsigned long pbacgnt; | ||
141 | volatile unsigned long pbacstate; | ||
142 | volatile unsigned long long g2pmgbase[3]; /* +120 */ | ||
143 | volatile unsigned long long g2piogbase; | ||
144 | volatile unsigned long g2pmmask[3]; /* +140 */ | ||
145 | volatile unsigned long g2piomask; | ||
146 | volatile unsigned long long g2pmpbase[3]; /* +150 */ | ||
147 | volatile unsigned long long g2piopbase; | ||
148 | volatile unsigned long pciccfg; /* +170 */ | ||
149 | volatile unsigned long pcicstatus; | ||
150 | volatile unsigned long pcicmask; | ||
151 | volatile unsigned long unused5; | ||
152 | volatile unsigned long long p2gmgbase[3]; /* +180 */ | ||
153 | volatile unsigned long long p2giogbase; | ||
154 | volatile unsigned long g2pcfgadrs; /* +1a0 */ | ||
155 | volatile unsigned long g2pcfgdata; | ||
156 | volatile unsigned long unused6[8]; | ||
157 | volatile unsigned long g2pintack; | ||
158 | volatile unsigned long g2pspc; | ||
159 | volatile unsigned long unused7[12]; /* +1d0 */ | ||
160 | volatile unsigned long long pdmca; /* +200 */ | ||
161 | volatile unsigned long long pdmga; | ||
162 | volatile unsigned long long pdmpa; | ||
163 | volatile unsigned long long pdmcut; | ||
164 | volatile unsigned long long pdmcnt; /* +220 */ | ||
165 | volatile unsigned long long pdmsts; | ||
166 | volatile unsigned long long unused8[2]; | ||
167 | volatile unsigned long long pdmdb[4]; /* +240 */ | ||
168 | volatile unsigned long long pdmtdh; /* +260 */ | ||
169 | volatile unsigned long long pdmdms; | ||
170 | }; | ||
171 | |||
172 | #endif /* _LANGUAGE_ASSEMBLY */ | ||
173 | |||
174 | /* | ||
175 | * PCIC | ||
176 | */ | ||
177 | |||
178 | /* bits for G2PSTATUS/G2PMASK */ | ||
179 | #define TX4927_PCIC_G2PSTATUS_ALL 0x00000003 | ||
180 | #define TX4927_PCIC_G2PSTATUS_TTOE 0x00000002 | ||
181 | #define TX4927_PCIC_G2PSTATUS_RTOE 0x00000001 | ||
182 | |||
183 | /* bits for PCIMASK (see also PCI_STATUS_XXX in linux/pci.h */ | ||
184 | #define TX4927_PCIC_PCISTATUS_ALL 0x0000f900 | ||
185 | |||
186 | /* bits for PBACFG */ | ||
187 | #define TX4927_PCIC_PBACFG_RPBA 0x00000004 | ||
188 | #define TX4927_PCIC_PBACFG_PBAEN 0x00000002 | ||
189 | #define TX4927_PCIC_PBACFG_BMCEN 0x00000001 | ||
190 | |||
191 | /* bits for G2PMnGBASE */ | ||
192 | #define TX4927_PCIC_G2PMnGBASE_BSDIS _CONST64(0x0000002000000000) | ||
193 | #define TX4927_PCIC_G2PMnGBASE_ECHG _CONST64(0x0000001000000000) | ||
194 | |||
195 | /* bits for G2PIOGBASE */ | ||
196 | #define TX4927_PCIC_G2PIOGBASE_BSDIS _CONST64(0x0000002000000000) | ||
197 | #define TX4927_PCIC_G2PIOGBASE_ECHG _CONST64(0x0000001000000000) | ||
198 | |||
199 | /* bits for PCICSTATUS/PCICMASK */ | ||
200 | #define TX4927_PCIC_PCICSTATUS_ALL 0x000007dc | ||
201 | |||
202 | /* bits for PCICCFG */ | ||
203 | #define TX4927_PCIC_PCICCFG_LBWC_MASK 0x0fff0000 | ||
204 | #define TX4927_PCIC_PCICCFG_HRST 0x00000800 | ||
205 | #define TX4927_PCIC_PCICCFG_SRST 0x00000400 | ||
206 | #define TX4927_PCIC_PCICCFG_IRBER 0x00000200 | ||
207 | #define TX4927_PCIC_PCICCFG_IMSE0 0x00000100 | ||
208 | #define TX4927_PCIC_PCICCFG_IMSE1 0x00000080 | ||
209 | #define TX4927_PCIC_PCICCFG_IMSE2 0x00000040 | ||
210 | #define TX4927_PCIC_PCICCFG_IISE 0x00000020 | ||
211 | #define TX4927_PCIC_PCICCFG_ATR 0x00000010 | ||
212 | #define TX4927_PCIC_PCICCFG_ICAE 0x00000008 | ||
213 | |||
214 | /* bits for P2GMnGBASE */ | ||
215 | #define TX4927_PCIC_P2GMnGBASE_TMEMEN _CONST64(0x0000004000000000) | ||
216 | #define TX4927_PCIC_P2GMnGBASE_TBSDIS _CONST64(0x0000002000000000) | ||
217 | #define TX4927_PCIC_P2GMnGBASE_TECHG _CONST64(0x0000001000000000) | ||
218 | |||
219 | /* bits for P2GIOGBASE */ | ||
220 | #define TX4927_PCIC_P2GIOGBASE_TIOEN _CONST64(0x0000004000000000) | ||
221 | #define TX4927_PCIC_P2GIOGBASE_TBSDIS _CONST64(0x0000002000000000) | ||
222 | #define TX4927_PCIC_P2GIOGBASE_TECHG _CONST64(0x0000001000000000) | ||
223 | |||
224 | #define TX4927_PCIC_IDSEL_AD_TO_SLOT(ad) ((ad) - 11) | ||
225 | #define TX4927_PCIC_MAX_DEVNU TX4927_PCIC_IDSEL_AD_TO_SLOT(32) | ||
226 | |||
227 | /* | ||
228 | * CCFG | ||
229 | */ | ||
230 | /* CCFG : Chip Configuration */ | ||
231 | #define TX4927_CCFG_PCI66 0x00800000 | ||
232 | #define TX4927_CCFG_PCIMIDE 0x00400000 | ||
233 | #define TX4927_CCFG_PCIXARB 0x00002000 | ||
234 | #define TX4927_CCFG_PCIDIVMODE_MASK 0x00001800 | ||
235 | #define TX4927_CCFG_PCIDIVMODE_2_5 0x00000000 | ||
236 | #define TX4927_CCFG_PCIDIVMODE_3 0x00000800 | ||
237 | #define TX4927_CCFG_PCIDIVMODE_5 0x00001000 | ||
238 | #define TX4927_CCFG_PCIDIVMODE_6 0x00001800 | ||
239 | |||
240 | #define TX4937_CCFG_PCIDIVMODE_MASK 0x00001c00 | ||
241 | #define TX4937_CCFG_PCIDIVMODE_8 0x00000000 | ||
242 | #define TX4937_CCFG_PCIDIVMODE_4 0x00000400 | ||
243 | #define TX4937_CCFG_PCIDIVMODE_9 0x00000800 | ||
244 | #define TX4937_CCFG_PCIDIVMODE_4_5 0x00000c00 | ||
245 | #define TX4937_CCFG_PCIDIVMODE_10 0x00001000 | ||
246 | #define TX4937_CCFG_PCIDIVMODE_5 0x00001400 | ||
247 | #define TX4937_CCFG_PCIDIVMODE_11 0x00001800 | ||
248 | #define TX4937_CCFG_PCIDIVMODE_5_5 0x00001c00 | ||
249 | |||
250 | /* PCFG : Pin Configuration */ | ||
251 | #define TX4927_PCFG_PCICLKEN_ALL 0x003f0000 | ||
252 | #define TX4927_PCFG_PCICLKEN(ch) (0x00010000<<(ch)) | ||
253 | |||
254 | /* CLKCTR : Clock Control */ | ||
255 | #define TX4927_CLKCTR_PCICKD 0x00400000 | ||
256 | #define TX4927_CLKCTR_PCIRST 0x00000040 | ||
257 | |||
258 | |||
259 | #ifndef _LANGUAGE_ASSEMBLY | ||
260 | |||
261 | #define tx4927_sdramcptr ((struct tx4927_sdramc_reg *)TX4927_SDRAMC_REG) | ||
262 | #define tx4927_pcicptr ((struct tx4927_pcic_reg *)TX4927_PCIC_REG) | ||
263 | #define tx4927_ccfgptr ((struct tx4927_ccfg_reg *)TX4927_CCFG_REG) | ||
264 | #define tx4927_ebuscptr ((struct tx4927_ebusc_reg *)TX4927_EBUSC_REG) | ||
265 | |||
266 | #endif /* _LANGUAGE_ASSEMBLY */ | ||
267 | |||
268 | #endif /* __ASM_TX4927_TX4927_PCI_H */ | ||
diff --git a/include/asm-mips/txx9/generic.h b/include/asm-mips/txx9/generic.h new file mode 100644 index 000000000000..d8756660523d --- /dev/null +++ b/include/asm-mips/txx9/generic.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * linux/include/asm-mips/txx9/generic.h | ||
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 | #ifndef __ASM_TXX9_GENERIC_H | ||
9 | #define __ASM_TXX9_GENERIC_H | ||
10 | |||
11 | #include <linux/init.h> | ||
12 | #include <linux/ioport.h> /* for struct resource */ | ||
13 | |||
14 | extern struct resource txx9_ce_res[]; | ||
15 | extern char txx9_pcode_str[8]; | ||
16 | void txx9_reg_res_init(unsigned int pcode, unsigned long base, | ||
17 | unsigned long size); | ||
18 | |||
19 | extern unsigned int txx9_master_clock; | ||
20 | extern unsigned int txx9_cpu_clock; | ||
21 | extern unsigned int txx9_gbus_clock; | ||
22 | |||
23 | struct pci_dev; | ||
24 | struct txx9_board_vec { | ||
25 | const char *system; | ||
26 | void (*prom_init)(void); | ||
27 | void (*mem_setup)(void); | ||
28 | void (*irq_setup)(void); | ||
29 | void (*time_init)(void); | ||
30 | void (*arch_init)(void); | ||
31 | void (*device_init)(void); | ||
32 | #ifdef CONFIG_PCI | ||
33 | int (*pci_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin); | ||
34 | #endif | ||
35 | }; | ||
36 | extern struct txx9_board_vec *txx9_board_vec; | ||
37 | extern int (*txx9_irq_dispatch)(int pending); | ||
38 | void prom_init_cmdline(void); | ||
39 | char *prom_getcmdline(void); | ||
40 | |||
41 | #endif /* __ASM_TXX9_GENERIC_H */ | ||
diff --git a/include/asm-mips/jmr3927/jmr3927.h b/include/asm-mips/txx9/jmr3927.h index a162268f17df..d6eb1b6a54eb 100644 --- a/include/asm-mips/jmr3927/jmr3927.h +++ b/include/asm-mips/txx9/jmr3927.h | |||
@@ -7,10 +7,10 @@ | |||
7 | * | 7 | * |
8 | * Copyright (C) 2000-2001 Toshiba Corporation | 8 | * Copyright (C) 2000-2001 Toshiba Corporation |
9 | */ | 9 | */ |
10 | #ifndef __ASM_TX3927_JMR3927_H | 10 | #ifndef __ASM_TXX9_JMR3927_H |
11 | #define __ASM_TX3927_JMR3927_H | 11 | #define __ASM_TXX9_JMR3927_H |
12 | 12 | ||
13 | #include <asm/jmr3927/tx3927.h> | 13 | #include <asm/txx9/tx3927.h> |
14 | #include <asm/addrspace.h> | 14 | #include <asm/addrspace.h> |
15 | #include <asm/system.h> | 15 | #include <asm/system.h> |
16 | #include <asm/txx9irq.h> | 16 | #include <asm/txx9irq.h> |
@@ -174,4 +174,9 @@ | |||
174 | * INT[3:0] | 174 | * INT[3:0] |
175 | */ | 175 | */ |
176 | 176 | ||
177 | #endif /* __ASM_TX3927_JMR3927_H */ | 177 | void jmr3927_prom_init(void); |
178 | void jmr3927_irq_setup(void); | ||
179 | struct pci_dev; | ||
180 | int jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin); | ||
181 | |||
182 | #endif /* __ASM_TXX9_JMR3927_H */ | ||
diff --git a/include/asm-mips/txx9/pci.h b/include/asm-mips/txx9/pci.h new file mode 100644 index 000000000000..d89a45091e24 --- /dev/null +++ b/include/asm-mips/txx9/pci.h | |||
@@ -0,0 +1,36 @@ | |||
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 | #ifndef __ASM_TXX9_PCI_H | ||
7 | #define __ASM_TXX9_PCI_H | ||
8 | |||
9 | #include <linux/pci.h> | ||
10 | |||
11 | extern struct pci_controller txx9_primary_pcic; | ||
12 | struct pci_controller * | ||
13 | txx9_alloc_pci_controller(struct pci_controller *pcic, | ||
14 | unsigned long mem_base, unsigned long mem_size, | ||
15 | unsigned long io_base, unsigned long io_size); | ||
16 | |||
17 | int txx9_pci66_check(struct pci_controller *hose, int top_bus, | ||
18 | int current_bus); | ||
19 | extern int txx9_pci_mem_high __initdata; | ||
20 | |||
21 | extern int txx9_pci_option; | ||
22 | #define TXX9_PCI_OPT_PICMG 0x0002 | ||
23 | #define TXX9_PCI_OPT_CLK_33 0x0008 | ||
24 | #define TXX9_PCI_OPT_CLK_66 0x0010 | ||
25 | #define TXX9_PCI_OPT_CLK_MASK \ | ||
26 | (TXX9_PCI_OPT_CLK_33 | TXX9_PCI_OPT_CLK_66) | ||
27 | #define TXX9_PCI_OPT_CLK_AUTO TXX9_PCI_OPT_CLK_MASK | ||
28 | |||
29 | enum txx9_pci_err_action { | ||
30 | TXX9_PCI_ERR_REPORT, | ||
31 | TXX9_PCI_ERR_IGNORE, | ||
32 | TXX9_PCI_ERR_PANIC, | ||
33 | }; | ||
34 | extern enum txx9_pci_err_action txx9_pci_err_action; | ||
35 | |||
36 | #endif /* __ASM_TXX9_PCI_H */ | ||
diff --git a/include/asm-mips/tx4927/toshiba_rbtx4927.h b/include/asm-mips/txx9/rbtx4927.h index b188a659ce02..bf194589216f 100644 --- a/include/asm-mips/tx4927/toshiba_rbtx4927.h +++ b/include/asm-mips/txx9/rbtx4927.h | |||
@@ -24,18 +24,42 @@ | |||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | 24 | * with this program; if not, write to the Free Software Foundation, Inc., |
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | 25 | * 675 Mass Ave, Cambridge, MA 02139, USA. |
26 | */ | 26 | */ |
27 | #ifndef __ASM_TX4927_TOSHIBA_RBTX4927_H | 27 | #ifndef __ASM_TXX9_RBTX4927_H |
28 | #define __ASM_TX4927_TOSHIBA_RBTX4927_H | 28 | #define __ASM_TXX9_RBTX4927_H |
29 | 29 | ||
30 | #include <asm/tx4927/tx4927.h> | 30 | #include <asm/txx9/tx4927.h> |
31 | #ifdef CONFIG_PCI | 31 | |
32 | #include <asm/tx4927/tx4927_pci.h> | 32 | #define RBTX4927_PCIMEM 0x08000000 |
33 | #endif | 33 | #define RBTX4927_PCIMEM_SIZE 0x08000000 |
34 | #define RBTX4927_PCIIO 0x16000000 | ||
35 | #define RBTX4927_PCIIO_SIZE 0x01000000 | ||
36 | |||
37 | #define rbtx4927_pcireset_addr ((__u8 __iomem *)0xbc00f006UL) | ||
38 | |||
39 | /* bits for ISTAT/IMASK/IMSTAT */ | ||
40 | #define RBTX4927_INTB_PCID 0 | ||
41 | #define RBTX4927_INTB_PCIC 1 | ||
42 | #define RBTX4927_INTB_PCIB 2 | ||
43 | #define RBTX4927_INTB_PCIA 3 | ||
44 | #define RBTX4927_INTF_PCID (1 << RBTX4927_INTB_PCID) | ||
45 | #define RBTX4927_INTF_PCIC (1 << RBTX4927_INTB_PCIC) | ||
46 | #define RBTX4927_INTF_PCIB (1 << RBTX4927_INTB_PCIB) | ||
47 | #define RBTX4927_INTF_PCIA (1 << RBTX4927_INTB_PCIA) | ||
48 | |||
49 | #define RBTX4927_NR_IRQ_IOC 8 /* IOC */ | ||
50 | |||
51 | #define RBTX4927_IRQ_IOC (TXX9_IRQ_BASE + TX4927_NUM_IR) | ||
52 | #define RBTX4927_IRQ_IOC_PCID (RBTX4927_IRQ_IOC + RBTX4927_INTB_PCID) | ||
53 | #define RBTX4927_IRQ_IOC_PCIC (RBTX4927_IRQ_IOC + RBTX4927_INTB_PCIC) | ||
54 | #define RBTX4927_IRQ_IOC_PCIB (RBTX4927_IRQ_IOC + RBTX4927_INTB_PCIB) | ||
55 | #define RBTX4927_IRQ_IOC_PCIA (RBTX4927_IRQ_IOC + RBTX4927_INTB_PCIA) | ||
56 | |||
57 | #define RBTX4927_IRQ_IOCINT (TXX9_IRQ_BASE + TX4927_IR_INT(1)) | ||
34 | 58 | ||
35 | #ifdef CONFIG_PCI | 59 | #ifdef CONFIG_PCI |
36 | #define TBTX4927_ISA_IO_OFFSET TX4927_PCIIO | 60 | #define RBTX4927_ISA_IO_OFFSET RBTX4927_PCIIO |
37 | #else | 61 | #else |
38 | #define TBTX4927_ISA_IO_OFFSET 0 | 62 | #define RBTX4927_ISA_IO_OFFSET 0 |
39 | #endif | 63 | #endif |
40 | 64 | ||
41 | #define RBTX4927_SW_RESET_DO (void __iomem *)0xbc00f000UL | 65 | #define RBTX4927_SW_RESET_DO (void __iomem *)0xbc00f000UL |
@@ -44,10 +68,12 @@ | |||
44 | #define RBTX4927_SW_RESET_ENABLE (void __iomem *)0xbc00f002UL | 68 | #define RBTX4927_SW_RESET_ENABLE (void __iomem *)0xbc00f002UL |
45 | #define RBTX4927_SW_RESET_ENABLE_SET 0x01 | 69 | #define RBTX4927_SW_RESET_ENABLE_SET 0x01 |
46 | 70 | ||
71 | #define RBTX4927_RTL_8019_BASE (0x1c020280 - RBTX4927_ISA_IO_OFFSET) | ||
72 | #define RBTX4927_RTL_8019_IRQ (TXX9_IRQ_BASE + TX4927_IR_INT(3)) | ||
47 | 73 | ||
48 | #define RBTX4927_RTL_8019_BASE (0x1c020280-TBTX4927_ISA_IO_OFFSET) | 74 | void rbtx4927_prom_init(void); |
49 | #define RBTX4927_RTL_8019_IRQ (TX4927_IRQ_PIC_BEG + 5) | 75 | void rbtx4927_irq_setup(void); |
50 | 76 | struct pci_dev; | |
51 | int toshiba_rbtx4927_irq_nested(int sw_irq); | 77 | int rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin); |
52 | 78 | ||
53 | #endif /* __ASM_TX4927_TOSHIBA_RBTX4927_H */ | 79 | #endif /* __ASM_TXX9_RBTX4927_H */ |
diff --git a/include/asm-mips/tx4938/rbtx4938.h b/include/asm-mips/txx9/rbtx4938.h index dfed7beb533f..2f5d5e705a41 100644 --- a/include/asm-mips/tx4938/rbtx4938.h +++ b/include/asm-mips/txx9/rbtx4938.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * linux/include/asm-mips/tx4938/rbtx4938.h | ||
3 | * Definitions for TX4937/TX4938 | 2 | * Definitions for TX4937/TX4938 |
4 | * | 3 | * |
5 | * 2003-2005 (c) MontaVista Software, Inc. This file is licensed under the | 4 | * 2003-2005 (c) MontaVista Software, Inc. This file is licensed under the |
@@ -9,12 +8,12 @@ | |||
9 | * | 8 | * |
10 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) | 9 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) |
11 | */ | 10 | */ |
12 | #ifndef __ASM_TX_BOARDS_RBTX4938_H | 11 | #ifndef __ASM_TXX9_RBTX4938_H |
13 | #define __ASM_TX_BOARDS_RBTX4938_H | 12 | #define __ASM_TXX9_RBTX4938_H |
14 | 13 | ||
15 | #include <asm/addrspace.h> | 14 | #include <asm/addrspace.h> |
16 | #include <asm/tx4938/tx4938.h> | ||
17 | #include <asm/txx9irq.h> | 15 | #include <asm/txx9irq.h> |
16 | #include <asm/txx9/tx4938.h> | ||
18 | 17 | ||
19 | /* CS */ | 18 | /* CS */ |
20 | #define RBTX4938_CE0 0x1c000000 /* 64M */ | 19 | #define RBTX4938_CE0 0x1c000000 /* 64M */ |
@@ -102,35 +101,12 @@ | |||
102 | * that particular IRQ on an RBTX4938 machine. Add new 'spaces' as new | 101 | * that particular IRQ on an RBTX4938 machine. Add new 'spaces' as new |
103 | * IRQ hardware is supported. | 102 | * IRQ hardware is supported. |
104 | */ | 103 | */ |
105 | #define RBTX4938_NR_IRQ_LOCAL 8 | ||
106 | #define RBTX4938_NR_IRQ_IRC 32 /* On-Chip IRC */ | ||
107 | #define RBTX4938_NR_IRQ_IOC 8 | 104 | #define RBTX4938_NR_IRQ_IOC 8 |
108 | 105 | ||
109 | #define TX4938_IRQ_CP0_BEG MIPS_CPU_IRQ_BASE | 106 | #define RBTX4938_IRQ_IRC TXX9_IRQ_BASE |
110 | #define TX4938_IRQ_CP0_END (MIPS_CPU_IRQ_BASE + 8 - 1) | 107 | #define RBTX4938_IRQ_IOC (TXX9_IRQ_BASE + TX4938_NUM_IR) |
111 | |||
112 | #define TX4938_IRQ_PIC_BEG TXX9_IRQ_BASE | ||
113 | #define TX4938_IRQ_PIC_END (TXX9_IRQ_BASE + TXx9_MAX_IR - 1) | ||
114 | #define TX4938_IRQ_NEST_EXT_ON_PIC (TX4938_IRQ_PIC_BEG+2) | ||
115 | #define TX4938_IRQ_NEST_PIC_ON_CP0 (TX4938_IRQ_CP0_BEG+2) | ||
116 | #define TX4938_IRQ_USER0 (TX4938_IRQ_CP0_BEG+0) | ||
117 | #define TX4938_IRQ_USER1 (TX4938_IRQ_CP0_BEG+1) | ||
118 | #define TX4938_IRQ_CPU_TIMER (TX4938_IRQ_CP0_BEG+7) | ||
119 | |||
120 | #define TOSHIBA_RBTX4938_IRQ_IOC_RAW_BEG 0 | ||
121 | #define TOSHIBA_RBTX4938_IRQ_IOC_RAW_END 7 | ||
122 | |||
123 | #define TOSHIBA_RBTX4938_IRQ_IOC_BEG ((TX4938_IRQ_PIC_END+1)+TOSHIBA_RBTX4938_IRQ_IOC_RAW_BEG) /* 56 */ | ||
124 | #define TOSHIBA_RBTX4938_IRQ_IOC_END ((TX4938_IRQ_PIC_END+1)+TOSHIBA_RBTX4938_IRQ_IOC_RAW_END) /* 63 */ | ||
125 | #define RBTX4938_IRQ_LOCAL TX4938_IRQ_CP0_BEG | ||
126 | #define RBTX4938_IRQ_IRC (RBTX4938_IRQ_LOCAL + RBTX4938_NR_IRQ_LOCAL) | ||
127 | #define RBTX4938_IRQ_IOC (RBTX4938_IRQ_IRC + RBTX4938_NR_IRQ_IRC) | ||
128 | #define RBTX4938_IRQ_END (RBTX4938_IRQ_IOC + RBTX4938_NR_IRQ_IOC) | 108 | #define RBTX4938_IRQ_END (RBTX4938_IRQ_IOC + RBTX4938_NR_IRQ_IOC) |
129 | 109 | ||
130 | #define RBTX4938_IRQ_LOCAL_SOFT0 (RBTX4938_IRQ_LOCAL + RBTX4938_SOFT_INT0) | ||
131 | #define RBTX4938_IRQ_LOCAL_SOFT1 (RBTX4938_IRQ_LOCAL + RBTX4938_SOFT_INT1) | ||
132 | #define RBTX4938_IRQ_LOCAL_IRC (RBTX4938_IRQ_LOCAL + RBTX4938_IRC_INT) | ||
133 | #define RBTX4938_IRQ_LOCAL_TIMER (RBTX4938_IRQ_LOCAL + RBTX4938_TIMER_INT) | ||
134 | #define RBTX4938_IRQ_IRC_ECCERR (RBTX4938_IRQ_IRC + TX4938_IR_ECCERR) | 110 | #define RBTX4938_IRQ_IRC_ECCERR (RBTX4938_IRQ_IRC + TX4938_IR_ECCERR) |
135 | #define RBTX4938_IRQ_IRC_WTOERR (RBTX4938_IRQ_IRC + TX4938_IR_WTOERR) | 111 | #define RBTX4938_IRQ_IRC_WTOERR (RBTX4938_IRQ_IRC + TX4938_IR_WTOERR) |
136 | #define RBTX4938_IRQ_IRC_INT(n) (RBTX4938_IRQ_IRC + TX4938_IR_INT(n)) | 112 | #define RBTX4938_IRQ_IRC_INT(n) (RBTX4938_IRQ_IRC + TX4938_IR_INT(n)) |
@@ -158,11 +134,16 @@ | |||
158 | 134 | ||
159 | 135 | ||
160 | /* IOC (PCI, etc) */ | 136 | /* IOC (PCI, etc) */ |
161 | #define RBTX4938_IRQ_IOCINT (TX4938_IRQ_NEST_EXT_ON_PIC) | 137 | #define RBTX4938_IRQ_IOCINT (TXX9_IRQ_BASE + TX4938_IR_INT(0)) |
162 | /* Onboard 10M Ether */ | 138 | /* Onboard 10M Ether */ |
163 | #define RBTX4938_IRQ_ETHER (TX4938_IRQ_NEST_EXT_ON_PIC + 1) | 139 | #define RBTX4938_IRQ_ETHER (TXX9_IRQ_BASE + TX4938_IR_INT(1)) |
164 | 140 | ||
165 | #define RBTX4938_RTL_8019_BASE (RBTX4938_ETHER_ADDR - mips_io_port_base) | 141 | #define RBTX4938_RTL_8019_BASE (RBTX4938_ETHER_ADDR - mips_io_port_base) |
166 | #define RBTX4938_RTL_8019_IRQ (RBTX4938_IRQ_ETHER) | 142 | #define RBTX4938_RTL_8019_IRQ (RBTX4938_IRQ_ETHER) |
167 | 143 | ||
168 | #endif /* __ASM_TX_BOARDS_RBTX4938_H */ | 144 | void rbtx4938_prom_init(void); |
145 | void rbtx4938_irq_setup(void); | ||
146 | struct pci_dev; | ||
147 | int rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin); | ||
148 | |||
149 | #endif /* __ASM_TXX9_RBTX4938_H */ | ||
diff --git a/include/asm-mips/tx4927/smsc_fdc37m81x.h b/include/asm-mips/txx9/smsc_fdc37m81x.h index 5d93bab51254..9375e4fc2289 100644 --- a/include/asm-mips/tx4927/smsc_fdc37m81x.h +++ b/include/asm-mips/txx9/smsc_fdc37m81x.h | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * linux/include/asm-mips/tx4927/smsc_fdc37m81x.h | ||
3 | * | ||
4 | * Interface for smsc fdc48m81x Super IO chip | 2 | * Interface for smsc fdc48m81x Super IO chip |
5 | * | 3 | * |
6 | * Author: MontaVista Software, Inc. source@mvista.com | 4 | * Author: MontaVista Software, Inc. source@mvista.com |
diff --git a/include/asm-mips/tx4938/spi.h b/include/asm-mips/txx9/spi.h index 6a60c83e152b..ddfb2a0dc432 100644 --- a/include/asm-mips/tx4938/spi.h +++ b/include/asm-mips/txx9/spi.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * linux/include/asm-mips/tx4938/spi.h | ||
3 | * Definitions for TX4937/TX4938 SPI | 2 | * Definitions for TX4937/TX4938 SPI |
4 | * | 3 | * |
5 | * Copyright (C) 2000-2001 Toshiba Corporation | 4 | * Copyright (C) 2000-2001 Toshiba Corporation |
@@ -11,10 +10,10 @@ | |||
11 | * | 10 | * |
12 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) | 11 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) |
13 | */ | 12 | */ |
14 | #ifndef __ASM_TX_BOARDS_TX4938_SPI_H | 13 | #ifndef __ASM_TXX9_SPI_H |
15 | #define __ASM_TX_BOARDS_TX4938_SPI_H | 14 | #define __ASM_TXX9_SPI_H |
16 | 15 | ||
17 | extern int spi_eeprom_register(int chipid); | 16 | extern int spi_eeprom_register(int chipid); |
18 | extern int spi_eeprom_read(int chipid, int address, unsigned char *buf, int len); | 17 | extern int spi_eeprom_read(int chipid, int address, unsigned char *buf, int len); |
19 | 18 | ||
20 | #endif /* __ASM_TX_BOARDS_TX4938_SPI_H */ | 19 | #endif /* __ASM_TXX9_SPI_H */ |
diff --git a/include/asm-mips/jmr3927/tx3927.h b/include/asm-mips/txx9/tx3927.h index fb580333c102..ca414c7624e1 100644 --- a/include/asm-mips/jmr3927/tx3927.h +++ b/include/asm-mips/txx9/tx3927.h | |||
@@ -5,10 +5,10 @@ | |||
5 | * | 5 | * |
6 | * Copyright (C) 2000 Toshiba Corporation | 6 | * Copyright (C) 2000 Toshiba Corporation |
7 | */ | 7 | */ |
8 | #ifndef __ASM_TX3927_H | 8 | #ifndef __ASM_TXX9_TX3927_H |
9 | #define __ASM_TX3927_H | 9 | #define __ASM_TXX9_TX3927_H |
10 | 10 | ||
11 | #include <asm/jmr3927/txx927.h> | 11 | #include <asm/txx9/txx927.h> |
12 | 12 | ||
13 | #define TX3927_SDRAMC_REG 0xfffe8000 | 13 | #define TX3927_SDRAMC_REG 0xfffe8000 |
14 | #define TX3927_ROMC_REG 0xfffe9000 | 14 | #define TX3927_ROMC_REG 0xfffe9000 |
@@ -316,4 +316,8 @@ struct tx3927_ccfg_reg { | |||
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 txx9_pio_reg __iomem *)TX3927_PIO_REG) | 317 | #define tx3927_pioptr ((struct txx9_pio_reg __iomem *)TX3927_PIO_REG) |
318 | 318 | ||
319 | #endif /* __ASM_TX3927_H */ | 319 | struct pci_controller; |
320 | void __init tx3927_pcic_setup(struct pci_controller *channel, | ||
321 | unsigned long sdram_size, int extarb); | ||
322 | |||
323 | #endif /* __ASM_TXX9_TX3927_H */ | ||
diff --git a/include/asm-mips/txx9/tx4927.h b/include/asm-mips/txx9/tx4927.h new file mode 100644 index 000000000000..46d60afc038b --- /dev/null +++ b/include/asm-mips/txx9/tx4927.h | |||
@@ -0,0 +1,219 @@ | |||
1 | /* | ||
2 | * Author: MontaVista Software, Inc. | ||
3 | * source@mvista.com | ||
4 | * | ||
5 | * Copyright 2001-2006 MontaVista Software Inc. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||
15 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
17 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS | ||
18 | * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
19 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR | ||
20 | * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE | ||
21 | * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | #ifndef __ASM_TXX9_TX4927_H | ||
28 | #define __ASM_TXX9_TX4927_H | ||
29 | |||
30 | #include <linux/types.h> | ||
31 | #include <linux/io.h> | ||
32 | #include <asm/txx9irq.h> | ||
33 | #include <asm/txx9/tx4927pcic.h> | ||
34 | |||
35 | #define TX4927_SDRAMC_REG 0xff1f8000 | ||
36 | #define TX4927_EBUSC_REG 0xff1f9000 | ||
37 | #define TX4927_PCIC_REG 0xff1fd000 | ||
38 | #define TX4927_CCFG_REG 0xff1fe000 | ||
39 | #define TX4927_IRC_REG 0xff1ff600 | ||
40 | #define TX4927_NR_TMR 3 | ||
41 | #define TX4927_TMR_REG(ch) (0xff1ff000 + (ch) * 0x100) | ||
42 | |||
43 | #define TX4927_IR_INT(n) (2 + (n)) | ||
44 | #define TX4927_IR_SIO(n) (8 + (n)) | ||
45 | #define TX4927_IR_PCIC 16 | ||
46 | #define TX4927_IR_PCIERR 22 | ||
47 | #define TX4927_NUM_IR 32 | ||
48 | |||
49 | #define TX4927_IRC_INT 2 /* IP[2] in Status register */ | ||
50 | |||
51 | struct tx4927_sdramc_reg { | ||
52 | volatile unsigned long long cr[4]; | ||
53 | volatile unsigned long long unused0[4]; | ||
54 | volatile unsigned long long tr; | ||
55 | volatile unsigned long long unused1[2]; | ||
56 | volatile unsigned long long cmd; | ||
57 | }; | ||
58 | |||
59 | struct tx4927_ebusc_reg { | ||
60 | volatile unsigned long long cr[8]; | ||
61 | }; | ||
62 | |||
63 | struct tx4927_ccfg_reg { | ||
64 | u64 ccfg; | ||
65 | u64 crir; | ||
66 | u64 pcfg; | ||
67 | u64 toea; | ||
68 | u64 clkctr; | ||
69 | u64 unused0; | ||
70 | u64 garbc; | ||
71 | u64 unused1; | ||
72 | u64 unused2; | ||
73 | u64 ramp; | ||
74 | }; | ||
75 | |||
76 | /* | ||
77 | * CCFG | ||
78 | */ | ||
79 | /* CCFG : Chip Configuration */ | ||
80 | #define TX4927_CCFG_WDRST 0x0000020000000000ULL | ||
81 | #define TX4927_CCFG_WDREXEN 0x0000010000000000ULL | ||
82 | #define TX4927_CCFG_BCFG_MASK 0x000000ff00000000ULL | ||
83 | #define TX4927_CCFG_TINTDIS 0x01000000 | ||
84 | #define TX4927_CCFG_PCI66 0x00800000 | ||
85 | #define TX4927_CCFG_PCIMODE 0x00400000 | ||
86 | #define TX4927_CCFG_DIVMODE_MASK 0x000e0000 | ||
87 | #define TX4927_CCFG_DIVMODE_8 (0x0 << 17) | ||
88 | #define TX4927_CCFG_DIVMODE_12 (0x1 << 17) | ||
89 | #define TX4927_CCFG_DIVMODE_16 (0x2 << 17) | ||
90 | #define TX4927_CCFG_DIVMODE_10 (0x3 << 17) | ||
91 | #define TX4927_CCFG_DIVMODE_2 (0x4 << 17) | ||
92 | #define TX4927_CCFG_DIVMODE_3 (0x5 << 17) | ||
93 | #define TX4927_CCFG_DIVMODE_4 (0x6 << 17) | ||
94 | #define TX4927_CCFG_DIVMODE_2_5 (0x7 << 17) | ||
95 | #define TX4927_CCFG_BEOW 0x00010000 | ||
96 | #define TX4927_CCFG_WR 0x00008000 | ||
97 | #define TX4927_CCFG_TOE 0x00004000 | ||
98 | #define TX4927_CCFG_PCIARB 0x00002000 | ||
99 | #define TX4927_CCFG_PCIDIVMODE_MASK 0x00001800 | ||
100 | #define TX4927_CCFG_PCIDIVMODE_2_5 0x00000000 | ||
101 | #define TX4927_CCFG_PCIDIVMODE_3 0x00000800 | ||
102 | #define TX4927_CCFG_PCIDIVMODE_5 0x00001000 | ||
103 | #define TX4927_CCFG_PCIDIVMODE_6 0x00001800 | ||
104 | #define TX4927_CCFG_SYSSP_MASK 0x000000c0 | ||
105 | #define TX4927_CCFG_ENDIAN 0x00000004 | ||
106 | #define TX4927_CCFG_HALT 0x00000002 | ||
107 | #define TX4927_CCFG_ACEHOLD 0x00000001 | ||
108 | #define TX4927_CCFG_W1CBITS (TX4927_CCFG_WDRST | TX4927_CCFG_BEOW) | ||
109 | |||
110 | /* PCFG : Pin Configuration */ | ||
111 | #define TX4927_PCFG_SDCLKDLY_MASK 0x30000000 | ||
112 | #define TX4927_PCFG_SDCLKDLY(d) ((d)<<28) | ||
113 | #define TX4927_PCFG_SYSCLKEN 0x08000000 | ||
114 | #define TX4927_PCFG_SDCLKEN_ALL 0x07800000 | ||
115 | #define TX4927_PCFG_SDCLKEN(ch) (0x00800000<<(ch)) | ||
116 | #define TX4927_PCFG_PCICLKEN_ALL 0x003f0000 | ||
117 | #define TX4927_PCFG_PCICLKEN(ch) (0x00010000<<(ch)) | ||
118 | #define TX4927_PCFG_SEL2 0x00000200 | ||
119 | #define TX4927_PCFG_SEL1 0x00000100 | ||
120 | #define TX4927_PCFG_DMASEL_ALL 0x000000ff | ||
121 | #define TX4927_PCFG_DMASEL0_MASK 0x00000003 | ||
122 | #define TX4927_PCFG_DMASEL1_MASK 0x0000000c | ||
123 | #define TX4927_PCFG_DMASEL2_MASK 0x00000030 | ||
124 | #define TX4927_PCFG_DMASEL3_MASK 0x000000c0 | ||
125 | #define TX4927_PCFG_DMASEL0_DRQ0 0x00000000 | ||
126 | #define TX4927_PCFG_DMASEL0_SIO1 0x00000001 | ||
127 | #define TX4927_PCFG_DMASEL0_ACL0 0x00000002 | ||
128 | #define TX4927_PCFG_DMASEL0_ACL2 0x00000003 | ||
129 | #define TX4927_PCFG_DMASEL1_DRQ1 0x00000000 | ||
130 | #define TX4927_PCFG_DMASEL1_SIO1 0x00000004 | ||
131 | #define TX4927_PCFG_DMASEL1_ACL1 0x00000008 | ||
132 | #define TX4927_PCFG_DMASEL1_ACL3 0x0000000c | ||
133 | #define TX4927_PCFG_DMASEL2_DRQ2 0x00000000 /* SEL2=0 */ | ||
134 | #define TX4927_PCFG_DMASEL2_SIO0 0x00000010 /* SEL2=0 */ | ||
135 | #define TX4927_PCFG_DMASEL2_ACL1 0x00000000 /* SEL2=1 */ | ||
136 | #define TX4927_PCFG_DMASEL2_ACL2 0x00000020 /* SEL2=1 */ | ||
137 | #define TX4927_PCFG_DMASEL2_ACL0 0x00000030 /* SEL2=1 */ | ||
138 | #define TX4927_PCFG_DMASEL3_DRQ3 0x00000000 | ||
139 | #define TX4927_PCFG_DMASEL3_SIO0 0x00000040 | ||
140 | #define TX4927_PCFG_DMASEL3_ACL3 0x00000080 | ||
141 | #define TX4927_PCFG_DMASEL3_ACL1 0x000000c0 | ||
142 | |||
143 | /* CLKCTR : Clock Control */ | ||
144 | #define TX4927_CLKCTR_ACLCKD 0x02000000 | ||
145 | #define TX4927_CLKCTR_PIOCKD 0x01000000 | ||
146 | #define TX4927_CLKCTR_DMACKD 0x00800000 | ||
147 | #define TX4927_CLKCTR_PCICKD 0x00400000 | ||
148 | #define TX4927_CLKCTR_TM0CKD 0x00100000 | ||
149 | #define TX4927_CLKCTR_TM1CKD 0x00080000 | ||
150 | #define TX4927_CLKCTR_TM2CKD 0x00040000 | ||
151 | #define TX4927_CLKCTR_SIO0CKD 0x00020000 | ||
152 | #define TX4927_CLKCTR_SIO1CKD 0x00010000 | ||
153 | #define TX4927_CLKCTR_ACLRST 0x00000200 | ||
154 | #define TX4927_CLKCTR_PIORST 0x00000100 | ||
155 | #define TX4927_CLKCTR_DMARST 0x00000080 | ||
156 | #define TX4927_CLKCTR_PCIRST 0x00000040 | ||
157 | #define TX4927_CLKCTR_TM0RST 0x00000010 | ||
158 | #define TX4927_CLKCTR_TM1RST 0x00000008 | ||
159 | #define TX4927_CLKCTR_TM2RST 0x00000004 | ||
160 | #define TX4927_CLKCTR_SIO0RST 0x00000002 | ||
161 | #define TX4927_CLKCTR_SIO1RST 0x00000001 | ||
162 | |||
163 | #define tx4927_sdramcptr ((struct tx4927_sdramc_reg *)TX4927_SDRAMC_REG) | ||
164 | #define tx4927_pcicptr \ | ||
165 | ((struct tx4927_pcic_reg __iomem *)TX4927_PCIC_REG) | ||
166 | #define tx4927_ccfgptr \ | ||
167 | ((struct tx4927_ccfg_reg __iomem *)TX4927_CCFG_REG) | ||
168 | #define tx4927_ebuscptr ((struct tx4927_ebusc_reg *)TX4927_EBUSC_REG) | ||
169 | |||
170 | /* utilities */ | ||
171 | static inline void txx9_clear64(__u64 __iomem *adr, __u64 bits) | ||
172 | { | ||
173 | #ifdef CONFIG_32BIT | ||
174 | unsigned long flags; | ||
175 | local_irq_save(flags); | ||
176 | #endif | ||
177 | ____raw_writeq(____raw_readq(adr) & ~bits, adr); | ||
178 | #ifdef CONFIG_32BIT | ||
179 | local_irq_restore(flags); | ||
180 | #endif | ||
181 | } | ||
182 | static inline void txx9_set64(__u64 __iomem *adr, __u64 bits) | ||
183 | { | ||
184 | #ifdef CONFIG_32BIT | ||
185 | unsigned long flags; | ||
186 | local_irq_save(flags); | ||
187 | #endif | ||
188 | ____raw_writeq(____raw_readq(adr) | bits, adr); | ||
189 | #ifdef CONFIG_32BIT | ||
190 | local_irq_restore(flags); | ||
191 | #endif | ||
192 | } | ||
193 | |||
194 | /* These functions are not interrupt safe. */ | ||
195 | static inline void tx4927_ccfg_clear(__u64 bits) | ||
196 | { | ||
197 | ____raw_writeq(____raw_readq(&tx4927_ccfgptr->ccfg) | ||
198 | & ~(TX4927_CCFG_W1CBITS | bits), | ||
199 | &tx4927_ccfgptr->ccfg); | ||
200 | } | ||
201 | static inline void tx4927_ccfg_set(__u64 bits) | ||
202 | { | ||
203 | ____raw_writeq((____raw_readq(&tx4927_ccfgptr->ccfg) | ||
204 | & ~TX4927_CCFG_W1CBITS) | bits, | ||
205 | &tx4927_ccfgptr->ccfg); | ||
206 | } | ||
207 | static inline void tx4927_ccfg_change(__u64 change, __u64 new) | ||
208 | { | ||
209 | ____raw_writeq((____raw_readq(&tx4927_ccfgptr->ccfg) | ||
210 | & ~(TX4927_CCFG_W1CBITS | change)) | | ||
211 | new, | ||
212 | &tx4927_ccfgptr->ccfg); | ||
213 | } | ||
214 | |||
215 | int tx4927_report_pciclk(void); | ||
216 | int tx4927_pciclk66_setup(void); | ||
217 | void tx4927_irq_init(void); | ||
218 | |||
219 | #endif /* __ASM_TXX9_TX4927_H */ | ||
diff --git a/include/asm-mips/txx9/tx4927pcic.h b/include/asm-mips/txx9/tx4927pcic.h new file mode 100644 index 000000000000..d61c3d09c4a2 --- /dev/null +++ b/include/asm-mips/txx9/tx4927pcic.h | |||
@@ -0,0 +1,199 @@ | |||
1 | /* | ||
2 | * include/asm-mips/txx9/tx4927pcic.h | ||
3 | * TX4927 PCI 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_TXX9_TX4927PCIC_H | ||
10 | #define __ASM_TXX9_TX4927PCIC_H | ||
11 | |||
12 | #include <linux/pci.h> | ||
13 | |||
14 | struct tx4927_pcic_reg { | ||
15 | u32 pciid; | ||
16 | u32 pcistatus; | ||
17 | u32 pciccrev; | ||
18 | u32 pcicfg1; | ||
19 | u32 p2gm0plbase; /* +10 */ | ||
20 | u32 p2gm0pubase; | ||
21 | u32 p2gm1plbase; | ||
22 | u32 p2gm1pubase; | ||
23 | u32 p2gm2pbase; /* +20 */ | ||
24 | u32 p2giopbase; | ||
25 | u32 unused0; | ||
26 | u32 pcisid; | ||
27 | u32 unused1; /* +30 */ | ||
28 | u32 pcicapptr; | ||
29 | u32 unused2; | ||
30 | u32 pcicfg2; | ||
31 | u32 g2ptocnt; /* +40 */ | ||
32 | u32 unused3[15]; | ||
33 | u32 g2pstatus; /* +80 */ | ||
34 | u32 g2pmask; | ||
35 | u32 pcisstatus; | ||
36 | u32 pcimask; | ||
37 | u32 p2gcfg; /* +90 */ | ||
38 | u32 p2gstatus; | ||
39 | u32 p2gmask; | ||
40 | u32 p2gccmd; | ||
41 | u32 unused4[24]; /* +a0 */ | ||
42 | u32 pbareqport; /* +100 */ | ||
43 | u32 pbacfg; | ||
44 | u32 pbastatus; | ||
45 | u32 pbamask; | ||
46 | u32 pbabm; /* +110 */ | ||
47 | u32 pbacreq; | ||
48 | u32 pbacgnt; | ||
49 | u32 pbacstate; | ||
50 | u64 g2pmgbase[3]; /* +120 */ | ||
51 | u64 g2piogbase; | ||
52 | u32 g2pmmask[3]; /* +140 */ | ||
53 | u32 g2piomask; | ||
54 | u64 g2pmpbase[3]; /* +150 */ | ||
55 | u64 g2piopbase; | ||
56 | u32 pciccfg; /* +170 */ | ||
57 | u32 pcicstatus; | ||
58 | u32 pcicmask; | ||
59 | u32 unused5; | ||
60 | u64 p2gmgbase[3]; /* +180 */ | ||
61 | u64 p2giogbase; | ||
62 | u32 g2pcfgadrs; /* +1a0 */ | ||
63 | u32 g2pcfgdata; | ||
64 | u32 unused6[8]; | ||
65 | u32 g2pintack; | ||
66 | u32 g2pspc; | ||
67 | u32 unused7[12]; /* +1d0 */ | ||
68 | u64 pdmca; /* +200 */ | ||
69 | u64 pdmga; | ||
70 | u64 pdmpa; | ||
71 | u64 pdmctr; | ||
72 | u64 pdmcfg; /* +220 */ | ||
73 | u64 pdmsts; | ||
74 | }; | ||
75 | |||
76 | /* bits for PCICMD */ | ||
77 | /* see PCI_COMMAND_XXX in linux/pci_regs.h */ | ||
78 | |||
79 | /* bits for PCISTAT */ | ||
80 | /* see PCI_STATUS_XXX in linux/pci_regs.h */ | ||
81 | |||
82 | /* bits for IOBA/MBA */ | ||
83 | /* see PCI_BASE_ADDRESS_XXX in linux/pci_regs.h */ | ||
84 | |||
85 | /* bits for G2PSTATUS/G2PMASK */ | ||
86 | #define TX4927_PCIC_G2PSTATUS_ALL 0x00000003 | ||
87 | #define TX4927_PCIC_G2PSTATUS_TTOE 0x00000002 | ||
88 | #define TX4927_PCIC_G2PSTATUS_RTOE 0x00000001 | ||
89 | |||
90 | /* bits for PCIMASK (see also PCI_STATUS_XXX in linux/pci_regs.h */ | ||
91 | #define TX4927_PCIC_PCISTATUS_ALL 0x0000f900 | ||
92 | |||
93 | /* bits for PBACFG */ | ||
94 | #define TX4927_PCIC_PBACFG_FIXPA 0x00000008 | ||
95 | #define TX4927_PCIC_PBACFG_RPBA 0x00000004 | ||
96 | #define TX4927_PCIC_PBACFG_PBAEN 0x00000002 | ||
97 | #define TX4927_PCIC_PBACFG_BMCEN 0x00000001 | ||
98 | |||
99 | /* bits for PBASTATUS/PBAMASK */ | ||
100 | #define TX4927_PCIC_PBASTATUS_ALL 0x00000001 | ||
101 | #define TX4927_PCIC_PBASTATUS_BM 0x00000001 | ||
102 | |||
103 | /* bits for G2PMnGBASE */ | ||
104 | #define TX4927_PCIC_G2PMnGBASE_BSDIS 0x0000002000000000ULL | ||
105 | #define TX4927_PCIC_G2PMnGBASE_ECHG 0x0000001000000000ULL | ||
106 | |||
107 | /* bits for G2PIOGBASE */ | ||
108 | #define TX4927_PCIC_G2PIOGBASE_BSDIS 0x0000002000000000ULL | ||
109 | #define TX4927_PCIC_G2PIOGBASE_ECHG 0x0000001000000000ULL | ||
110 | |||
111 | /* bits for PCICSTATUS/PCICMASK */ | ||
112 | #define TX4927_PCIC_PCICSTATUS_ALL 0x000007b8 | ||
113 | #define TX4927_PCIC_PCICSTATUS_PME 0x00000400 | ||
114 | #define TX4927_PCIC_PCICSTATUS_TLB 0x00000200 | ||
115 | #define TX4927_PCIC_PCICSTATUS_NIB 0x00000100 | ||
116 | #define TX4927_PCIC_PCICSTATUS_ZIB 0x00000080 | ||
117 | #define TX4927_PCIC_PCICSTATUS_PERR 0x00000020 | ||
118 | #define TX4927_PCIC_PCICSTATUS_SERR 0x00000010 | ||
119 | #define TX4927_PCIC_PCICSTATUS_GBE 0x00000008 | ||
120 | #define TX4927_PCIC_PCICSTATUS_IWB 0x00000002 | ||
121 | #define TX4927_PCIC_PCICSTATUS_E2PDONE 0x00000001 | ||
122 | |||
123 | /* bits for PCICCFG */ | ||
124 | #define TX4927_PCIC_PCICCFG_GBWC_MASK 0x0fff0000 | ||
125 | #define TX4927_PCIC_PCICCFG_HRST 0x00000800 | ||
126 | #define TX4927_PCIC_PCICCFG_SRST 0x00000400 | ||
127 | #define TX4927_PCIC_PCICCFG_IRBER 0x00000200 | ||
128 | #define TX4927_PCIC_PCICCFG_G2PMEN(ch) (0x00000100>>(ch)) | ||
129 | #define TX4927_PCIC_PCICCFG_G2PM0EN 0x00000100 | ||
130 | #define TX4927_PCIC_PCICCFG_G2PM1EN 0x00000080 | ||
131 | #define TX4927_PCIC_PCICCFG_G2PM2EN 0x00000040 | ||
132 | #define TX4927_PCIC_PCICCFG_G2PIOEN 0x00000020 | ||
133 | #define TX4927_PCIC_PCICCFG_TCAR 0x00000010 | ||
134 | #define TX4927_PCIC_PCICCFG_ICAEN 0x00000008 | ||
135 | |||
136 | /* bits for P2GMnGBASE */ | ||
137 | #define TX4927_PCIC_P2GMnGBASE_TMEMEN 0x0000004000000000ULL | ||
138 | #define TX4927_PCIC_P2GMnGBASE_TBSDIS 0x0000002000000000ULL | ||
139 | #define TX4927_PCIC_P2GMnGBASE_TECHG 0x0000001000000000ULL | ||
140 | |||
141 | /* bits for P2GIOGBASE */ | ||
142 | #define TX4927_PCIC_P2GIOGBASE_TIOEN 0x0000004000000000ULL | ||
143 | #define TX4927_PCIC_P2GIOGBASE_TBSDIS 0x0000002000000000ULL | ||
144 | #define TX4927_PCIC_P2GIOGBASE_TECHG 0x0000001000000000ULL | ||
145 | |||
146 | #define TX4927_PCIC_IDSEL_AD_TO_SLOT(ad) ((ad) - 11) | ||
147 | #define TX4927_PCIC_MAX_DEVNU TX4927_PCIC_IDSEL_AD_TO_SLOT(32) | ||
148 | |||
149 | /* bits for PDMCFG */ | ||
150 | #define TX4927_PCIC_PDMCFG_RSTFIFO 0x00200000 | ||
151 | #define TX4927_PCIC_PDMCFG_EXFER 0x00100000 | ||
152 | #define TX4927_PCIC_PDMCFG_REQDLY_MASK 0x00003800 | ||
153 | #define TX4927_PCIC_PDMCFG_REQDLY_NONE (0 << 11) | ||
154 | #define TX4927_PCIC_PDMCFG_REQDLY_16 (1 << 11) | ||
155 | #define TX4927_PCIC_PDMCFG_REQDLY_32 (2 << 11) | ||
156 | #define TX4927_PCIC_PDMCFG_REQDLY_64 (3 << 11) | ||
157 | #define TX4927_PCIC_PDMCFG_REQDLY_128 (4 << 11) | ||
158 | #define TX4927_PCIC_PDMCFG_REQDLY_256 (5 << 11) | ||
159 | #define TX4927_PCIC_PDMCFG_REQDLY_512 (6 << 11) | ||
160 | #define TX4927_PCIC_PDMCFG_REQDLY_1024 (7 << 11) | ||
161 | #define TX4927_PCIC_PDMCFG_ERRIE 0x00000400 | ||
162 | #define TX4927_PCIC_PDMCFG_NCCMPIE 0x00000200 | ||
163 | #define TX4927_PCIC_PDMCFG_NTCMPIE 0x00000100 | ||
164 | #define TX4927_PCIC_PDMCFG_CHNEN 0x00000080 | ||
165 | #define TX4927_PCIC_PDMCFG_XFRACT 0x00000040 | ||
166 | #define TX4927_PCIC_PDMCFG_BSWAP 0x00000020 | ||
167 | #define TX4927_PCIC_PDMCFG_XFRSIZE_MASK 0x0000000c | ||
168 | #define TX4927_PCIC_PDMCFG_XFRSIZE_1DW 0x00000000 | ||
169 | #define TX4927_PCIC_PDMCFG_XFRSIZE_1QW 0x00000004 | ||
170 | #define TX4927_PCIC_PDMCFG_XFRSIZE_4QW 0x00000008 | ||
171 | #define TX4927_PCIC_PDMCFG_XFRDIRC 0x00000002 | ||
172 | #define TX4927_PCIC_PDMCFG_CHRST 0x00000001 | ||
173 | |||
174 | /* bits for PDMSTS */ | ||
175 | #define TX4927_PCIC_PDMSTS_REQCNT_MASK 0x3f000000 | ||
176 | #define TX4927_PCIC_PDMSTS_FIFOCNT_MASK 0x00f00000 | ||
177 | #define TX4927_PCIC_PDMSTS_FIFOWP_MASK 0x000c0000 | ||
178 | #define TX4927_PCIC_PDMSTS_FIFORP_MASK 0x00030000 | ||
179 | #define TX4927_PCIC_PDMSTS_ERRINT 0x00000800 | ||
180 | #define TX4927_PCIC_PDMSTS_DONEINT 0x00000400 | ||
181 | #define TX4927_PCIC_PDMSTS_CHNEN 0x00000200 | ||
182 | #define TX4927_PCIC_PDMSTS_XFRACT 0x00000100 | ||
183 | #define TX4927_PCIC_PDMSTS_ACCMP 0x00000080 | ||
184 | #define TX4927_PCIC_PDMSTS_NCCMP 0x00000040 | ||
185 | #define TX4927_PCIC_PDMSTS_NTCMP 0x00000020 | ||
186 | #define TX4927_PCIC_PDMSTS_CFGERR 0x00000008 | ||
187 | #define TX4927_PCIC_PDMSTS_PCIERR 0x00000004 | ||
188 | #define TX4927_PCIC_PDMSTS_CHNERR 0x00000002 | ||
189 | #define TX4927_PCIC_PDMSTS_DATAERR 0x00000001 | ||
190 | #define TX4927_PCIC_PDMSTS_ALL_CMP 0x000000e0 | ||
191 | #define TX4927_PCIC_PDMSTS_ALL_ERR 0x0000000f | ||
192 | |||
193 | struct tx4927_pcic_reg __iomem *get_tx4927_pcicptr( | ||
194 | struct pci_controller *channel); | ||
195 | void __init tx4927_pcic_setup(struct tx4927_pcic_reg __iomem *pcicptr, | ||
196 | struct pci_controller *channel, int extarb); | ||
197 | void tx4927_report_pcic_status(void); | ||
198 | |||
199 | #endif /* __ASM_TXX9_TX4927PCIC_H */ | ||
diff --git a/include/asm-mips/tx4938/tx4938.h b/include/asm-mips/txx9/tx4938.h index e8807f5c61e9..12de68a4c10a 100644 --- a/include/asm-mips/tx4938/tx4938.h +++ b/include/asm-mips/txx9/tx4938.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * linux/include/asm-mips/tx4938/tx4938.h | ||
3 | * Definitions for TX4937/TX4938 | 2 | * Definitions for TX4937/TX4938 |
4 | * Copyright (C) 2000-2001 Toshiba Corporation | 3 | * Copyright (C) 2000-2001 Toshiba Corporation |
5 | * | 4 | * |
@@ -10,17 +9,15 @@ | |||
10 | * | 9 | * |
11 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) | 10 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) |
12 | */ | 11 | */ |
13 | #ifndef __ASM_TX_BOARDS_TX4938_H | 12 | #ifndef __ASM_TXX9_TX4938_H |
14 | #define __ASM_TX_BOARDS_TX4938_H | 13 | #define __ASM_TXX9_TX4938_H |
14 | |||
15 | /* some controllers are compatible with 4927 */ | ||
16 | #include <asm/txx9/tx4927.h> | ||
15 | 17 | ||
16 | #define tx4938_read_nfmc(addr) (*(volatile unsigned int *)(addr)) | 18 | #define tx4938_read_nfmc(addr) (*(volatile unsigned int *)(addr)) |
17 | #define tx4938_write_nfmc(b, addr) (*(volatile unsigned int *)(addr)) = (b) | 19 | #define tx4938_write_nfmc(b, addr) (*(volatile unsigned int *)(addr)) = (b) |
18 | 20 | ||
19 | #define TX4938_NR_IRQ_LOCAL TX4938_IRQ_PIC_BEG | ||
20 | |||
21 | #define TX4938_IRQ_IRC_PCIC (TX4938_NR_IRQ_LOCAL + TX4938_IR_PCIC) | ||
22 | #define TX4938_IRQ_IRC_PCIERR (TX4938_NR_IRQ_LOCAL + TX4938_IR_PCIERR) | ||
23 | |||
24 | #define TX4938_PCIIO_0 0x10000000 | 21 | #define TX4938_PCIIO_0 0x10000000 |
25 | #define TX4938_PCIIO_1 0x01010000 | 22 | #define TX4938_PCIIO_1 0x01010000 |
26 | #define TX4938_PCIMEM_0 0x08000000 | 23 | #define TX4938_PCIMEM_0 0x08000000 |
@@ -52,9 +49,6 @@ | |||
52 | #define TX4938_ACLC_REG (TX4938_REG_BASE + 0xf700) | 49 | #define TX4938_ACLC_REG (TX4938_REG_BASE + 0xf700) |
53 | #define TX4938_SPI_REG (TX4938_REG_BASE + 0xf800) | 50 | #define TX4938_SPI_REG (TX4938_REG_BASE + 0xf800) |
54 | 51 | ||
55 | #ifdef __ASSEMBLY__ | ||
56 | #define _CONST64(c) c | ||
57 | #else | ||
58 | #define _CONST64(c) c##ull | 52 | #define _CONST64(c) c##ull |
59 | 53 | ||
60 | #include <asm/byteorder.h> | 54 | #include <asm/byteorder.h> |
@@ -114,68 +108,6 @@ struct tx4938_dma_reg { | |||
114 | endian_def_l2(unused0, mcr); | 108 | endian_def_l2(unused0, mcr); |
115 | }; | 109 | }; |
116 | 110 | ||
117 | struct tx4938_pcic_reg { | ||
118 | volatile unsigned long pciid; | ||
119 | volatile unsigned long pcistatus; | ||
120 | volatile unsigned long pciccrev; | ||
121 | volatile unsigned long pcicfg1; | ||
122 | volatile unsigned long p2gm0plbase; /* +10 */ | ||
123 | volatile unsigned long p2gm0pubase; | ||
124 | volatile unsigned long p2gm1plbase; | ||
125 | volatile unsigned long p2gm1pubase; | ||
126 | volatile unsigned long p2gm2pbase; /* +20 */ | ||
127 | volatile unsigned long p2giopbase; | ||
128 | volatile unsigned long unused0; | ||
129 | volatile unsigned long pcisid; | ||
130 | volatile unsigned long unused1; /* +30 */ | ||
131 | volatile unsigned long pcicapptr; | ||
132 | volatile unsigned long unused2; | ||
133 | volatile unsigned long pcicfg2; | ||
134 | volatile unsigned long g2ptocnt; /* +40 */ | ||
135 | volatile unsigned long unused3[15]; | ||
136 | volatile unsigned long g2pstatus; /* +80 */ | ||
137 | volatile unsigned long g2pmask; | ||
138 | volatile unsigned long pcisstatus; | ||
139 | volatile unsigned long pcimask; | ||
140 | volatile unsigned long p2gcfg; /* +90 */ | ||
141 | volatile unsigned long p2gstatus; | ||
142 | volatile unsigned long p2gmask; | ||
143 | volatile unsigned long p2gccmd; | ||
144 | volatile unsigned long unused4[24]; /* +a0 */ | ||
145 | volatile unsigned long pbareqport; /* +100 */ | ||
146 | volatile unsigned long pbacfg; | ||
147 | volatile unsigned long pbastatus; | ||
148 | volatile unsigned long pbamask; | ||
149 | volatile unsigned long pbabm; /* +110 */ | ||
150 | volatile unsigned long pbacreq; | ||
151 | volatile unsigned long pbacgnt; | ||
152 | volatile unsigned long pbacstate; | ||
153 | volatile unsigned long long g2pmgbase[3]; /* +120 */ | ||
154 | volatile unsigned long long g2piogbase; | ||
155 | volatile unsigned long g2pmmask[3]; /* +140 */ | ||
156 | volatile unsigned long g2piomask; | ||
157 | volatile unsigned long long g2pmpbase[3]; /* +150 */ | ||
158 | volatile unsigned long long g2piopbase; | ||
159 | volatile unsigned long pciccfg; /* +170 */ | ||
160 | volatile unsigned long pcicstatus; | ||
161 | volatile unsigned long pcicmask; | ||
162 | volatile unsigned long unused5; | ||
163 | volatile unsigned long long p2gmgbase[3]; /* +180 */ | ||
164 | volatile unsigned long long p2giogbase; | ||
165 | volatile unsigned long g2pcfgadrs; /* +1a0 */ | ||
166 | volatile unsigned long g2pcfgdata; | ||
167 | volatile unsigned long unused6[8]; | ||
168 | volatile unsigned long g2pintack; | ||
169 | volatile unsigned long g2pspc; | ||
170 | volatile unsigned long unused7[12]; /* +1d0 */ | ||
171 | volatile unsigned long long pdmca; /* +200 */ | ||
172 | volatile unsigned long long pdmga; | ||
173 | volatile unsigned long long pdmpa; | ||
174 | volatile unsigned long long pdmctr; | ||
175 | volatile unsigned long long pdmcfg; /* +220 */ | ||
176 | volatile unsigned long long pdmsts; | ||
177 | }; | ||
178 | |||
179 | struct tx4938_aclc_reg { | 111 | struct tx4938_aclc_reg { |
180 | volatile unsigned long acctlen; | 112 | volatile unsigned long acctlen; |
181 | volatile unsigned long acctldis; | 113 | volatile unsigned long acctldis; |
@@ -263,18 +195,18 @@ struct tx4938_sramc_reg { | |||
263 | }; | 195 | }; |
264 | 196 | ||
265 | struct tx4938_ccfg_reg { | 197 | struct tx4938_ccfg_reg { |
266 | volatile unsigned long long ccfg; | 198 | u64 ccfg; |
267 | volatile unsigned long long crir; | 199 | u64 crir; |
268 | volatile unsigned long long pcfg; | 200 | u64 pcfg; |
269 | volatile unsigned long long tear; | 201 | u64 toea; |
270 | volatile unsigned long long clkctr; | 202 | u64 clkctr; |
271 | volatile unsigned long long unused0; | 203 | u64 unused0; |
272 | volatile unsigned long long garbc; | 204 | u64 garbc; |
273 | volatile unsigned long long unused1; | 205 | u64 unused1; |
274 | volatile unsigned long long unused2; | 206 | u64 unused2; |
275 | volatile unsigned long long ramp; | 207 | u64 ramp; |
276 | volatile unsigned long long unused3; | 208 | u64 unused3; |
277 | volatile unsigned long long jmpadr; | 209 | u64 jmpadr; |
278 | }; | 210 | }; |
279 | 211 | ||
280 | #undef endian_def_l2 | 212 | #undef endian_def_l2 |
@@ -283,8 +215,6 @@ struct tx4938_ccfg_reg { | |||
283 | #undef endian_def_b2s | 215 | #undef endian_def_b2s |
284 | #undef endian_def_b4 | 216 | #undef endian_def_b4 |
285 | 217 | ||
286 | #endif /* __ASSEMBLY__ */ | ||
287 | |||
288 | /* | 218 | /* |
289 | * NDFMC | 219 | * NDFMC |
290 | */ | 220 | */ |
@@ -336,6 +266,8 @@ struct tx4938_ccfg_reg { | |||
336 | #define TX4938_IR_ETH0 TX4938_IR_INT(4) | 266 | #define TX4938_IR_ETH0 TX4938_IR_INT(4) |
337 | #define TX4938_IR_ETH1 TX4938_IR_INT(3) | 267 | #define TX4938_IR_ETH1 TX4938_IR_INT(3) |
338 | 268 | ||
269 | #define TX4938_IRC_INT 2 /* IP[2] in Status register */ | ||
270 | |||
339 | /* | 271 | /* |
340 | * CCFG | 272 | * CCFG |
341 | */ | 273 | */ |
@@ -361,7 +293,7 @@ struct tx4938_ccfg_reg { | |||
361 | #define TX4938_CCFG_BEOW 0x00010000 | 293 | #define TX4938_CCFG_BEOW 0x00010000 |
362 | #define TX4938_CCFG_WR 0x00008000 | 294 | #define TX4938_CCFG_WR 0x00008000 |
363 | #define TX4938_CCFG_TOE 0x00004000 | 295 | #define TX4938_CCFG_TOE 0x00004000 |
364 | #define TX4938_CCFG_PCIXARB 0x00002000 | 296 | #define TX4938_CCFG_PCIARB 0x00002000 |
365 | #define TX4938_CCFG_PCIDIVMODE_MASK 0x00001c00 | 297 | #define TX4938_CCFG_PCIDIVMODE_MASK 0x00001c00 |
366 | #define TX4938_CCFG_PCIDIVMODE_4 (0x1 << 10) | 298 | #define TX4938_CCFG_PCIDIVMODE_4 (0x1 << 10) |
367 | #define TX4938_CCFG_PCIDIVMODE_4_5 (0x3 << 10) | 299 | #define TX4938_CCFG_PCIDIVMODE_4_5 (0x3 << 10) |
@@ -437,110 +369,6 @@ struct tx4938_ccfg_reg { | |||
437 | #define TX4938_CLKCTR_SIO0RST 0x00000002 | 369 | #define TX4938_CLKCTR_SIO0RST 0x00000002 |
438 | #define TX4938_CLKCTR_SIO1RST 0x00000001 | 370 | #define TX4938_CLKCTR_SIO1RST 0x00000001 |
439 | 371 | ||
440 | /* bits for G2PSTATUS/G2PMASK */ | ||
441 | #define TX4938_PCIC_G2PSTATUS_ALL 0x00000003 | ||
442 | #define TX4938_PCIC_G2PSTATUS_TTOE 0x00000002 | ||
443 | #define TX4938_PCIC_G2PSTATUS_RTOE 0x00000001 | ||
444 | |||
445 | /* bits for PCIMASK (see also PCI_STATUS_XXX in linux/pci.h */ | ||
446 | #define TX4938_PCIC_PCISTATUS_ALL 0x0000f900 | ||
447 | |||
448 | /* bits for PBACFG */ | ||
449 | #define TX4938_PCIC_PBACFG_FIXPA 0x00000008 | ||
450 | #define TX4938_PCIC_PBACFG_RPBA 0x00000004 | ||
451 | #define TX4938_PCIC_PBACFG_PBAEN 0x00000002 | ||
452 | #define TX4938_PCIC_PBACFG_BMCEN 0x00000001 | ||
453 | |||
454 | /* bits for G2PMnGBASE */ | ||
455 | #define TX4938_PCIC_G2PMnGBASE_BSDIS _CONST64(0x0000002000000000) | ||
456 | #define TX4938_PCIC_G2PMnGBASE_ECHG _CONST64(0x0000001000000000) | ||
457 | |||
458 | /* bits for G2PIOGBASE */ | ||
459 | #define TX4938_PCIC_G2PIOGBASE_BSDIS _CONST64(0x0000002000000000) | ||
460 | #define TX4938_PCIC_G2PIOGBASE_ECHG _CONST64(0x0000001000000000) | ||
461 | |||
462 | /* bits for PCICSTATUS/PCICMASK */ | ||
463 | #define TX4938_PCIC_PCICSTATUS_ALL 0x000007b8 | ||
464 | #define TX4938_PCIC_PCICSTATUS_PME 0x00000400 | ||
465 | #define TX4938_PCIC_PCICSTATUS_TLB 0x00000200 | ||
466 | #define TX4938_PCIC_PCICSTATUS_NIB 0x00000100 | ||
467 | #define TX4938_PCIC_PCICSTATUS_ZIB 0x00000080 | ||
468 | #define TX4938_PCIC_PCICSTATUS_PERR 0x00000020 | ||
469 | #define TX4938_PCIC_PCICSTATUS_SERR 0x00000010 | ||
470 | #define TX4938_PCIC_PCICSTATUS_GBE 0x00000008 | ||
471 | #define TX4938_PCIC_PCICSTATUS_IWB 0x00000002 | ||
472 | #define TX4938_PCIC_PCICSTATUS_E2PDONE 0x00000001 | ||
473 | |||
474 | /* bits for PCICCFG */ | ||
475 | #define TX4938_PCIC_PCICCFG_GBWC_MASK 0x0fff0000 | ||
476 | #define TX4938_PCIC_PCICCFG_HRST 0x00000800 | ||
477 | #define TX4938_PCIC_PCICCFG_SRST 0x00000400 | ||
478 | #define TX4938_PCIC_PCICCFG_IRBER 0x00000200 | ||
479 | #define TX4938_PCIC_PCICCFG_G2PMEN(ch) (0x00000100>>(ch)) | ||
480 | #define TX4938_PCIC_PCICCFG_G2PM0EN 0x00000100 | ||
481 | #define TX4938_PCIC_PCICCFG_G2PM1EN 0x00000080 | ||
482 | #define TX4938_PCIC_PCICCFG_G2PM2EN 0x00000040 | ||
483 | #define TX4938_PCIC_PCICCFG_G2PIOEN 0x00000020 | ||
484 | #define TX4938_PCIC_PCICCFG_TCAR 0x00000010 | ||
485 | #define TX4938_PCIC_PCICCFG_ICAEN 0x00000008 | ||
486 | |||
487 | /* bits for P2GMnGBASE */ | ||
488 | #define TX4938_PCIC_P2GMnGBASE_TMEMEN _CONST64(0x0000004000000000) | ||
489 | #define TX4938_PCIC_P2GMnGBASE_TBSDIS _CONST64(0x0000002000000000) | ||
490 | #define TX4938_PCIC_P2GMnGBASE_TECHG _CONST64(0x0000001000000000) | ||
491 | |||
492 | /* bits for P2GIOGBASE */ | ||
493 | #define TX4938_PCIC_P2GIOGBASE_TIOEN _CONST64(0x0000004000000000) | ||
494 | #define TX4938_PCIC_P2GIOGBASE_TBSDIS _CONST64(0x0000002000000000) | ||
495 | #define TX4938_PCIC_P2GIOGBASE_TECHG _CONST64(0x0000001000000000) | ||
496 | |||
497 | #define TX4938_PCIC_IDSEL_AD_TO_SLOT(ad) ((ad) - 11) | ||
498 | #define TX4938_PCIC_MAX_DEVNU TX4938_PCIC_IDSEL_AD_TO_SLOT(32) | ||
499 | |||
500 | /* bits for PDMCFG */ | ||
501 | #define TX4938_PCIC_PDMCFG_RSTFIFO 0x00200000 | ||
502 | #define TX4938_PCIC_PDMCFG_EXFER 0x00100000 | ||
503 | #define TX4938_PCIC_PDMCFG_REQDLY_MASK 0x00003800 | ||
504 | #define TX4938_PCIC_PDMCFG_REQDLY_NONE (0 << 11) | ||
505 | #define TX4938_PCIC_PDMCFG_REQDLY_16 (1 << 11) | ||
506 | #define TX4938_PCIC_PDMCFG_REQDLY_32 (2 << 11) | ||
507 | #define TX4938_PCIC_PDMCFG_REQDLY_64 (3 << 11) | ||
508 | #define TX4938_PCIC_PDMCFG_REQDLY_128 (4 << 11) | ||
509 | #define TX4938_PCIC_PDMCFG_REQDLY_256 (5 << 11) | ||
510 | #define TX4938_PCIC_PDMCFG_REQDLY_512 (6 << 11) | ||
511 | #define TX4938_PCIC_PDMCFG_REQDLY_1024 (7 << 11) | ||
512 | #define TX4938_PCIC_PDMCFG_ERRIE 0x00000400 | ||
513 | #define TX4938_PCIC_PDMCFG_NCCMPIE 0x00000200 | ||
514 | #define TX4938_PCIC_PDMCFG_NTCMPIE 0x00000100 | ||
515 | #define TX4938_PCIC_PDMCFG_CHNEN 0x00000080 | ||
516 | #define TX4938_PCIC_PDMCFG_XFRACT 0x00000040 | ||
517 | #define TX4938_PCIC_PDMCFG_BSWAP 0x00000020 | ||
518 | #define TX4938_PCIC_PDMCFG_XFRSIZE_MASK 0x0000000c | ||
519 | #define TX4938_PCIC_PDMCFG_XFRSIZE_1DW 0x00000000 | ||
520 | #define TX4938_PCIC_PDMCFG_XFRSIZE_1QW 0x00000004 | ||
521 | #define TX4938_PCIC_PDMCFG_XFRSIZE_4QW 0x00000008 | ||
522 | #define TX4938_PCIC_PDMCFG_XFRDIRC 0x00000002 | ||
523 | #define TX4938_PCIC_PDMCFG_CHRST 0x00000001 | ||
524 | |||
525 | /* bits for PDMSTS */ | ||
526 | #define TX4938_PCIC_PDMSTS_REQCNT_MASK 0x3f000000 | ||
527 | #define TX4938_PCIC_PDMSTS_FIFOCNT_MASK 0x00f00000 | ||
528 | #define TX4938_PCIC_PDMSTS_FIFOWP_MASK 0x000c0000 | ||
529 | #define TX4938_PCIC_PDMSTS_FIFORP_MASK 0x00030000 | ||
530 | #define TX4938_PCIC_PDMSTS_ERRINT 0x00000800 | ||
531 | #define TX4938_PCIC_PDMSTS_DONEINT 0x00000400 | ||
532 | #define TX4938_PCIC_PDMSTS_CHNEN 0x00000200 | ||
533 | #define TX4938_PCIC_PDMSTS_XFRACT 0x00000100 | ||
534 | #define TX4938_PCIC_PDMSTS_ACCMP 0x00000080 | ||
535 | #define TX4938_PCIC_PDMSTS_NCCMP 0x00000040 | ||
536 | #define TX4938_PCIC_PDMSTS_NTCMP 0x00000020 | ||
537 | #define TX4938_PCIC_PDMSTS_CFGERR 0x00000008 | ||
538 | #define TX4938_PCIC_PDMSTS_PCIERR 0x00000004 | ||
539 | #define TX4938_PCIC_PDMSTS_CHNERR 0x00000002 | ||
540 | #define TX4938_PCIC_PDMSTS_DATAERR 0x00000001 | ||
541 | #define TX4938_PCIC_PDMSTS_ALL_CMP 0x000000e0 | ||
542 | #define TX4938_PCIC_PDMSTS_ALL_ERR 0x0000000f | ||
543 | |||
544 | /* | 372 | /* |
545 | * DMA | 373 | * DMA |
546 | */ | 374 | */ |
@@ -596,15 +424,15 @@ struct tx4938_ccfg_reg { | |||
596 | #define TX4938_DMA_CSR_DESERR 0x00000002 | 424 | #define TX4938_DMA_CSR_DESERR 0x00000002 |
597 | #define TX4938_DMA_CSR_SORERR 0x00000001 | 425 | #define TX4938_DMA_CSR_SORERR 0x00000001 |
598 | 426 | ||
599 | #ifndef __ASSEMBLY__ | ||
600 | |||
601 | #define tx4938_sdramcptr ((struct tx4938_sdramc_reg *)TX4938_SDRAMC_REG) | 427 | #define tx4938_sdramcptr ((struct tx4938_sdramc_reg *)TX4938_SDRAMC_REG) |
602 | #define tx4938_ebuscptr ((struct tx4938_ebusc_reg *)TX4938_EBUSC_REG) | 428 | #define tx4938_ebuscptr ((struct tx4938_ebusc_reg *)TX4938_EBUSC_REG) |
603 | #define tx4938_dmaptr(ch) ((struct tx4938_dma_reg *)TX4938_DMA_REG(ch)) | 429 | #define tx4938_dmaptr(ch) ((struct tx4938_dma_reg *)TX4938_DMA_REG(ch)) |
604 | #define tx4938_ndfmcptr ((struct tx4938_ndfmc_reg *)TX4938_NDFMC_REG) | 430 | #define tx4938_ndfmcptr ((struct tx4938_ndfmc_reg *)TX4938_NDFMC_REG) |
605 | #define tx4938_pcicptr ((struct tx4938_pcic_reg *)TX4938_PCIC_REG) | 431 | #define tx4938_pcicptr tx4927_pcicptr |
606 | #define tx4938_pcic1ptr ((struct tx4938_pcic_reg *)TX4938_PCIC1_REG) | 432 | #define tx4938_pcic1ptr \ |
607 | #define tx4938_ccfgptr ((struct tx4938_ccfg_reg *)TX4938_CCFG_REG) | 433 | ((struct tx4927_pcic_reg __iomem *)TX4938_PCIC1_REG) |
434 | #define tx4938_ccfgptr \ | ||
435 | ((struct tx4938_ccfg_reg __iomem *)TX4938_CCFG_REG) | ||
608 | #define tx4938_sioptr(ch) ((struct tx4938_sio_reg *)TX4938_SIO_REG(ch)) | 436 | #define tx4938_sioptr(ch) ((struct tx4938_sio_reg *)TX4938_SIO_REG(ch)) |
609 | #define tx4938_pioptr ((struct txx9_pio_reg __iomem *)TX4938_PIO_REG) | 437 | #define tx4938_pioptr ((struct txx9_pio_reg __iomem *)TX4938_PIO_REG) |
610 | #define tx4938_aclcptr ((struct tx4938_aclc_reg *)TX4938_ACLC_REG) | 438 | #define tx4938_aclcptr ((struct tx4938_aclc_reg *)TX4938_ACLC_REG) |
@@ -612,17 +440,26 @@ struct tx4938_ccfg_reg { | |||
612 | #define tx4938_sramcptr ((struct tx4938_sramc_reg *)TX4938_SRAMC_REG) | 440 | #define tx4938_sramcptr ((struct tx4938_sramc_reg *)TX4938_SRAMC_REG) |
613 | 441 | ||
614 | 442 | ||
615 | #define TX4938_REV_MAJ_MIN() ((unsigned long)tx4938_ccfgptr->crir & 0x00ff) | 443 | #define TX4938_REV_PCODE() \ |
616 | #define TX4938_REV_PCODE() ((unsigned long)tx4938_ccfgptr->crir >> 16) | 444 | ((__u32)__raw_readq(&tx4938_ccfgptr->crir) >> 16) |
445 | |||
446 | #define tx4938_ccfg_clear(bits) tx4927_ccfg_clear(bits) | ||
447 | #define tx4938_ccfg_set(bits) tx4927_ccfg_set(bits) | ||
448 | #define tx4938_ccfg_change(change, new) tx4927_ccfg_change(change, new) | ||
617 | 449 | ||
618 | #define TX4938_SDRAMC_BA(ch) ((tx4938_sdramcptr->cr[ch] >> 49) << 21) | 450 | #define TX4938_SDRAMC_BA(ch) ((tx4938_sdramcptr->cr[ch] >> 49) << 21) |
619 | #define TX4938_SDRAMC_SIZE(ch) (((tx4938_sdramcptr->cr[ch] >> 33) + 1) << 21) | 451 | #define TX4938_SDRAMC_SIZE(ch) (((tx4938_sdramcptr->cr[ch] >> 33) + 1) << 21) |
620 | 452 | ||
453 | #define TX4938_EBUSC_CR(ch) __raw_readq(&tx4938_ebuscptr->cr[(ch)]) | ||
621 | #define TX4938_EBUSC_BA(ch) ((tx4938_ebuscptr->cr[ch] >> 48) << 20) | 454 | #define TX4938_EBUSC_BA(ch) ((tx4938_ebuscptr->cr[ch] >> 48) << 20) |
622 | #define TX4938_EBUSC_SIZE(ch) \ | 455 | #define TX4938_EBUSC_SIZE(ch) \ |
623 | (0x00100000 << ((unsigned long)(tx4938_ebuscptr->cr[ch] >> 8) & 0xf)) | 456 | (0x00100000 << ((unsigned long)(tx4938_ebuscptr->cr[ch] >> 8) & 0xf)) |
624 | 457 | ||
625 | 458 | int tx4938_report_pciclk(void); | |
626 | #endif /* !__ASSEMBLY__ */ | 459 | void tx4938_report_pci1clk(void); |
460 | int tx4938_pciclk66_setup(void); | ||
461 | struct pci_dev; | ||
462 | int tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot); | ||
463 | void tx4938_irq_init(void); | ||
627 | 464 | ||
628 | #endif | 465 | #endif |
diff --git a/include/asm-mips/jmr3927/txx927.h b/include/asm-mips/txx9/txx927.h index 25dcf2feb095..97dd7ad1a890 100644 --- a/include/asm-mips/jmr3927/txx927.h +++ b/include/asm-mips/txx9/txx927.h | |||
@@ -7,8 +7,8 @@ | |||
7 | * | 7 | * |
8 | * Copyright (C) 2000 Toshiba Corporation | 8 | * Copyright (C) 2000 Toshiba Corporation |
9 | */ | 9 | */ |
10 | #ifndef __ASM_TXX927_H | 10 | #ifndef __ASM_TXX9_TXX927_H |
11 | #define __ASM_TXX927_H | 11 | #define __ASM_TXX9_TXX927_H |
12 | 12 | ||
13 | struct txx927_sio_reg { | 13 | struct txx927_sio_reg { |
14 | volatile unsigned long lcr; | 14 | volatile unsigned long lcr; |
@@ -118,4 +118,4 @@ struct txx927_sio_reg { | |||
118 | * PIO | 118 | * PIO |
119 | */ | 119 | */ |
120 | 120 | ||
121 | #endif /* __ASM_TXX927_H */ | 121 | #endif /* __ASM_TXX9_TXX927_H */ |
diff --git a/include/asm-mips/vr41xx/cmbvr4133.h b/include/asm-mips/vr41xx/cmbvr4133.h deleted file mode 100644 index 42300037d593..000000000000 --- a/include/asm-mips/vr41xx/cmbvr4133.h +++ /dev/null | |||
@@ -1,56 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-mips/vr41xx/cmbvr4133.h | ||
3 | * | ||
4 | * Include file for NEC CMB-VR4133. | ||
5 | * | ||
6 | * Author: Yoichi Yuasa <yyuasa@mvista.com, or source@mvista.com> and | ||
7 | * Jun Sun <jsun@mvista.com, or source@mvista.com> and | ||
8 | * Alex Sapkov <asapkov@ru.mvista.com> | ||
9 | * | ||
10 | * 2002-2004 (c) MontaVista, Software, Inc. This file is licensed under | ||
11 | * the terms of the GNU General Public License version 2. This program | ||
12 | * is licensed "as is" without any warranty of any kind, whether express | ||
13 | * or implied. | ||
14 | */ | ||
15 | #ifndef __NEC_CMBVR4133_H | ||
16 | #define __NEC_CMBVR4133_H | ||
17 | |||
18 | #include <asm/vr41xx/irq.h> | ||
19 | |||
20 | /* | ||
21 | * General-Purpose I/O Pin Number | ||
22 | */ | ||
23 | #define CMBVR41XX_INTA_PIN 1 | ||
24 | #define CMBVR41XX_INTB_PIN 1 | ||
25 | #define CMBVR41XX_INTC_PIN 3 | ||
26 | #define CMBVR41XX_INTD_PIN 1 | ||
27 | #define CMBVR41XX_INTE_PIN 1 | ||
28 | |||
29 | /* | ||
30 | * Interrupt Number | ||
31 | */ | ||
32 | #define CMBVR41XX_INTA_IRQ GIU_IRQ(CMBVR41XX_INTA_PIN) | ||
33 | #define CMBVR41XX_INTB_IRQ GIU_IRQ(CMBVR41XX_INTB_PIN) | ||
34 | #define CMBVR41XX_INTC_IRQ GIU_IRQ(CMBVR41XX_INTC_PIN) | ||
35 | #define CMBVR41XX_INTD_IRQ GIU_IRQ(CMBVR41XX_INTD_PIN) | ||
36 | #define CMBVR41XX_INTE_IRQ GIU_IRQ(CMBVR41XX_INTE_PIN) | ||
37 | |||
38 | #define I8259A_IRQ_BASE 72 | ||
39 | #define I8259_IRQ(x) (I8259A_IRQ_BASE + (x)) | ||
40 | #define TIMER_IRQ I8259_IRQ(0) | ||
41 | #define KEYBOARD_IRQ I8259_IRQ(1) | ||
42 | #define I8259_SLAVE_IRQ I8259_IRQ(2) | ||
43 | #define UART3_IRQ I8259_IRQ(3) | ||
44 | #define UART1_IRQ I8259_IRQ(4) | ||
45 | #define UART2_IRQ I8259_IRQ(5) | ||
46 | #define FDC_IRQ I8259_IRQ(6) | ||
47 | #define PARPORT_IRQ I8259_IRQ(7) | ||
48 | #define RTC_IRQ I8259_IRQ(8) | ||
49 | #define USB_IRQ I8259_IRQ(9) | ||
50 | #define I8259_INTA_IRQ I8259_IRQ(10) | ||
51 | #define AUDIO_IRQ I8259_IRQ(11) | ||
52 | #define AUX_IRQ I8259_IRQ(12) | ||
53 | #define IDE_PRIMARY_IRQ I8259_IRQ(14) | ||
54 | #define IDE_SECONDARY_IRQ I8259_IRQ(15) | ||
55 | |||
56 | #endif /* __NEC_CMBVR4133_H */ | ||
diff --git a/include/asm-parisc/smp.h b/include/asm-parisc/smp.h index 306f4950e32e..398cdbaf4e54 100644 --- a/include/asm-parisc/smp.h +++ b/include/asm-parisc/smp.h | |||
@@ -30,6 +30,9 @@ extern cpumask_t cpu_online_map; | |||
30 | extern void smp_send_reschedule(int cpu); | 30 | extern void smp_send_reschedule(int cpu); |
31 | extern void smp_send_all_nop(void); | 31 | extern void smp_send_all_nop(void); |
32 | 32 | ||
33 | extern void arch_send_call_function_single_ipi(int cpu); | ||
34 | extern void arch_send_call_function_ipi(cpumask_t mask); | ||
35 | |||
33 | #endif /* !ASSEMBLY */ | 36 | #endif /* !ASSEMBLY */ |
34 | 37 | ||
35 | /* | 38 | /* |
diff --git a/include/asm-powerpc/Kbuild b/include/asm-powerpc/Kbuild index bca352e033c3..04ce8f8a2ee7 100644 --- a/include/asm-powerpc/Kbuild +++ b/include/asm-powerpc/Kbuild | |||
@@ -2,7 +2,6 @@ include include/asm-generic/Kbuild.asm | |||
2 | 2 | ||
3 | header-y += auxvec.h | 3 | header-y += auxvec.h |
4 | header-y += ioctls.h | 4 | header-y += ioctls.h |
5 | header-y += mman.h | ||
6 | header-y += sembuf.h | 5 | header-y += sembuf.h |
7 | header-y += siginfo.h | 6 | header-y += siginfo.h |
8 | header-y += stat.h | 7 | header-y += stat.h |
@@ -23,7 +22,6 @@ header-y += sigcontext.h | |||
23 | header-y += statfs.h | 22 | header-y += statfs.h |
24 | header-y += ps3fb.h | 23 | header-y += ps3fb.h |
25 | 24 | ||
26 | unifdef-y += asm-compat.h | ||
27 | unifdef-y += bootx.h | 25 | unifdef-y += bootx.h |
28 | unifdef-y += byteorder.h | 26 | unifdef-y += byteorder.h |
29 | unifdef-y += cputable.h | 27 | unifdef-y += cputable.h |
diff --git a/include/asm-powerpc/asm-compat.h b/include/asm-powerpc/asm-compat.h index c19e7367fce6..8ec2e1da68bf 100644 --- a/include/asm-powerpc/asm-compat.h +++ b/include/asm-powerpc/asm-compat.h | |||
@@ -15,57 +15,6 @@ | |||
15 | #endif | 15 | #endif |
16 | 16 | ||
17 | 17 | ||
18 | /* | ||
19 | * Feature section common macros | ||
20 | * | ||
21 | * Note that the entries now contain offsets between the table entry | ||
22 | * and the code rather than absolute code pointers in order to be | ||
23 | * useable with the vdso shared library. There is also an assumption | ||
24 | * that values will be negative, that is, the fixup table has to be | ||
25 | * located after the code it fixes up. | ||
26 | */ | ||
27 | #ifdef CONFIG_PPC64 | ||
28 | #ifdef __powerpc64__ | ||
29 | /* 64 bits kernel, 64 bits code */ | ||
30 | #define MAKE_FTR_SECTION_ENTRY(msk, val, label, sect) \ | ||
31 | 99: \ | ||
32 | .section sect,"a"; \ | ||
33 | .align 3; \ | ||
34 | 98: \ | ||
35 | .llong msk; \ | ||
36 | .llong val; \ | ||
37 | .llong label##b-98b; \ | ||
38 | .llong 99b-98b; \ | ||
39 | .previous | ||
40 | #else /* __powerpc64__ */ | ||
41 | /* 64 bits kernel, 32 bits code (ie. vdso32) */ | ||
42 | #define MAKE_FTR_SECTION_ENTRY(msk, val, label, sect) \ | ||
43 | 99: \ | ||
44 | .section sect,"a"; \ | ||
45 | .align 3; \ | ||
46 | 98: \ | ||
47 | .llong msk; \ | ||
48 | .llong val; \ | ||
49 | .long 0xffffffff; \ | ||
50 | .long label##b-98b; \ | ||
51 | .long 0xffffffff; \ | ||
52 | .long 99b-98b; \ | ||
53 | .previous | ||
54 | #endif /* !__powerpc64__ */ | ||
55 | #else /* CONFIG_PPC64 */ | ||
56 | /* 32 bits kernel, 32 bits code */ | ||
57 | #define MAKE_FTR_SECTION_ENTRY(msk, val, label, sect) \ | ||
58 | 99: \ | ||
59 | .section sect,"a"; \ | ||
60 | .align 2; \ | ||
61 | 98: \ | ||
62 | .long msk; \ | ||
63 | .long val; \ | ||
64 | .long label##b-98b; \ | ||
65 | .long 99b-98b; \ | ||
66 | .previous | ||
67 | #endif /* !CONFIG_PPC64 */ | ||
68 | |||
69 | #ifdef __powerpc64__ | 18 | #ifdef __powerpc64__ |
70 | 19 | ||
71 | /* operations for longs and pointers */ | 20 | /* operations for longs and pointers */ |
diff --git a/include/asm-powerpc/cache.h b/include/asm-powerpc/cache.h index 53507046a1b1..81de6eb3455d 100644 --- a/include/asm-powerpc/cache.h +++ b/include/asm-powerpc/cache.h | |||
@@ -8,6 +8,9 @@ | |||
8 | #if defined(CONFIG_8xx) || defined(CONFIG_403GCX) | 8 | #if defined(CONFIG_8xx) || defined(CONFIG_403GCX) |
9 | #define L1_CACHE_SHIFT 4 | 9 | #define L1_CACHE_SHIFT 4 |
10 | #define MAX_COPY_PREFETCH 1 | 10 | #define MAX_COPY_PREFETCH 1 |
11 | #elif defined(CONFIG_PPC_E500MC) | ||
12 | #define L1_CACHE_SHIFT 6 | ||
13 | #define MAX_COPY_PREFETCH 4 | ||
11 | #elif defined(CONFIG_PPC32) | 14 | #elif defined(CONFIG_PPC32) |
12 | #define L1_CACHE_SHIFT 5 | 15 | #define L1_CACHE_SHIFT 5 |
13 | #define MAX_COPY_PREFETCH 4 | 16 | #define MAX_COPY_PREFETCH 4 |
diff --git a/include/asm-powerpc/code-patching.h b/include/asm-powerpc/code-patching.h new file mode 100644 index 000000000000..107d9b915e33 --- /dev/null +++ b/include/asm-powerpc/code-patching.h | |||
@@ -0,0 +1,54 @@ | |||
1 | #ifndef _ASM_POWERPC_CODE_PATCHING_H | ||
2 | #define _ASM_POWERPC_CODE_PATCHING_H | ||
3 | |||
4 | /* | ||
5 | * Copyright 2008, Michael Ellerman, IBM Corporation. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License | ||
9 | * as published by the Free Software Foundation; either version | ||
10 | * 2 of the License, or (at your option) any later version. | ||
11 | */ | ||
12 | |||
13 | #include <asm/types.h> | ||
14 | |||
15 | #define PPC_NOP_INSTR 0x60000000 | ||
16 | #define PPC_LWSYNC_INSTR 0x7c2004ac | ||
17 | |||
18 | /* Flags for create_branch: | ||
19 | * "b" == create_branch(addr, target, 0); | ||
20 | * "ba" == create_branch(addr, target, BRANCH_ABSOLUTE); | ||
21 | * "bl" == create_branch(addr, target, BRANCH_SET_LINK); | ||
22 | * "bla" == create_branch(addr, target, BRANCH_ABSOLUTE | BRANCH_SET_LINK); | ||
23 | */ | ||
24 | #define BRANCH_SET_LINK 0x1 | ||
25 | #define BRANCH_ABSOLUTE 0x2 | ||
26 | |||
27 | unsigned int create_branch(const unsigned int *addr, | ||
28 | unsigned long target, int flags); | ||
29 | unsigned int create_cond_branch(const unsigned int *addr, | ||
30 | unsigned long target, int flags); | ||
31 | void patch_branch(unsigned int *addr, unsigned long target, int flags); | ||
32 | void patch_instruction(unsigned int *addr, unsigned int instr); | ||
33 | |||
34 | int instr_is_relative_branch(unsigned int instr); | ||
35 | int instr_is_branch_to_addr(const unsigned int *instr, unsigned long addr); | ||
36 | unsigned long branch_target(const unsigned int *instr); | ||
37 | unsigned int translate_branch(const unsigned int *dest, | ||
38 | const unsigned int *src); | ||
39 | |||
40 | static inline unsigned long ppc_function_entry(void *func) | ||
41 | { | ||
42 | #ifdef CONFIG_PPC64 | ||
43 | /* | ||
44 | * On PPC64 the function pointer actually points to the function's | ||
45 | * descriptor. The first entry in the descriptor is the address | ||
46 | * of the function text. | ||
47 | */ | ||
48 | return ((func_descr_t *)func)->entry; | ||
49 | #else | ||
50 | return (unsigned long)func; | ||
51 | #endif | ||
52 | } | ||
53 | |||
54 | #endif /* _ASM_POWERPC_CODE_PATCHING_H */ | ||
diff --git a/include/asm-powerpc/cpm.h b/include/asm-powerpc/cpm.h index ede38ffe466a..63a55337c2de 100644 --- a/include/asm-powerpc/cpm.h +++ b/include/asm-powerpc/cpm.h | |||
@@ -96,6 +96,7 @@ unsigned long cpm_muram_alloc(unsigned long size, unsigned long align); | |||
96 | int cpm_muram_free(unsigned long offset); | 96 | int cpm_muram_free(unsigned long offset); |
97 | unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size); | 97 | unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size); |
98 | void __iomem *cpm_muram_addr(unsigned long offset); | 98 | void __iomem *cpm_muram_addr(unsigned long offset); |
99 | unsigned long cpm_muram_offset(void __iomem *addr); | ||
99 | dma_addr_t cpm_muram_dma(void __iomem *addr); | 100 | dma_addr_t cpm_muram_dma(void __iomem *addr); |
100 | int cpm_command(u32 command, u8 opcode); | 101 | int cpm_command(u32 command, u8 opcode); |
101 | 102 | ||
diff --git a/include/asm-powerpc/cpm1.h b/include/asm-powerpc/cpm1.h index 3df439678006..2ff798744c1d 100644 --- a/include/asm-powerpc/cpm1.h +++ b/include/asm-powerpc/cpm1.h | |||
@@ -42,35 +42,15 @@ | |||
42 | 42 | ||
43 | #define mk_cr_cmd(CH, CMD) ((CMD << 8) | (CH << 4)) | 43 | #define mk_cr_cmd(CH, CMD) ((CMD << 8) | (CH << 4)) |
44 | 44 | ||
45 | #ifndef CONFIG_PPC_CPM_NEW_BINDING | ||
46 | /* The dual ported RAM is multi-functional. Some areas can be (and are | ||
47 | * being) used for microcode. There is an area that can only be used | ||
48 | * as data ram for buffer descriptors, which is all we use right now. | ||
49 | * Currently the first 512 and last 256 bytes are used for microcode. | ||
50 | */ | ||
51 | #define CPM_DATAONLY_BASE ((uint)0x0800) | ||
52 | #define CPM_DATAONLY_SIZE ((uint)0x0700) | ||
53 | #define CPM_DP_NOSPACE ((uint)0x7fffffff) | ||
54 | #endif | ||
55 | |||
56 | /* Export the base address of the communication processor registers | 45 | /* Export the base address of the communication processor registers |
57 | * and dual port ram. | 46 | * and dual port ram. |
58 | */ | 47 | */ |
59 | extern cpm8xx_t __iomem *cpmp; /* Pointer to comm processor */ | 48 | extern cpm8xx_t __iomem *cpmp; /* Pointer to comm processor */ |
60 | 49 | ||
61 | #ifdef CONFIG_PPC_CPM_NEW_BINDING | ||
62 | #define cpm_dpalloc cpm_muram_alloc | 50 | #define cpm_dpalloc cpm_muram_alloc |
63 | #define cpm_dpfree cpm_muram_free | 51 | #define cpm_dpfree cpm_muram_free |
64 | #define cpm_dpram_addr cpm_muram_addr | 52 | #define cpm_dpram_addr cpm_muram_addr |
65 | #define cpm_dpram_phys cpm_muram_dma | 53 | #define cpm_dpram_phys cpm_muram_dma |
66 | #else | ||
67 | extern unsigned long cpm_dpalloc(uint size, uint align); | ||
68 | extern int cpm_dpfree(unsigned long offset); | ||
69 | extern unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align); | ||
70 | extern void cpm_dpdump(void); | ||
71 | extern void *cpm_dpram_addr(unsigned long offset); | ||
72 | extern uint cpm_dpram_phys(u8 *addr); | ||
73 | #endif | ||
74 | 54 | ||
75 | extern void cpm_setbrg(uint brg, uint rate); | 55 | extern void cpm_setbrg(uint brg, uint rate); |
76 | 56 | ||
diff --git a/include/asm-powerpc/cpm2.h b/include/asm-powerpc/cpm2.h index 4c85ed9cd43f..2c7fd9cee291 100644 --- a/include/asm-powerpc/cpm2.h +++ b/include/asm-powerpc/cpm2.h | |||
@@ -78,24 +78,6 @@ | |||
78 | #define mk_cr_cmd(PG, SBC, MCN, OP) \ | 78 | #define mk_cr_cmd(PG, SBC, MCN, OP) \ |
79 | ((PG << 26) | (SBC << 21) | (MCN << 6) | OP) | 79 | ((PG << 26) | (SBC << 21) | (MCN << 6) | OP) |
80 | 80 | ||
81 | #ifndef CONFIG_PPC_CPM_NEW_BINDING | ||
82 | /* Dual Port RAM addresses. The first 16K is available for almost | ||
83 | * any CPM use, so we put the BDs there. The first 128 bytes are | ||
84 | * used for SMC1 and SMC2 parameter RAM, so we start allocating | ||
85 | * BDs above that. All of this must change when we start | ||
86 | * downloading RAM microcode. | ||
87 | */ | ||
88 | #define CPM_DATAONLY_BASE ((uint)128) | ||
89 | #define CPM_DP_NOSPACE ((uint)0x7fffffff) | ||
90 | #if defined(CONFIG_8272) || defined(CONFIG_MPC8555) | ||
91 | #define CPM_DATAONLY_SIZE ((uint)(8 * 1024) - CPM_DATAONLY_BASE) | ||
92 | #define CPM_FCC_SPECIAL_BASE ((uint)0x00009000) | ||
93 | #else | ||
94 | #define CPM_DATAONLY_SIZE ((uint)(16 * 1024) - CPM_DATAONLY_BASE) | ||
95 | #define CPM_FCC_SPECIAL_BASE ((uint)0x0000b000) | ||
96 | #endif | ||
97 | #endif | ||
98 | |||
99 | /* The number of pages of host memory we allocate for CPM. This is | 81 | /* The number of pages of host memory we allocate for CPM. This is |
100 | * done early in kernel initialization to get physically contiguous | 82 | * done early in kernel initialization to get physically contiguous |
101 | * pages. | 83 | * pages. |
@@ -107,17 +89,9 @@ | |||
107 | */ | 89 | */ |
108 | extern cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor */ | 90 | extern cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor */ |
109 | 91 | ||
110 | #ifdef CONFIG_PPC_CPM_NEW_BINDING | ||
111 | #define cpm_dpalloc cpm_muram_alloc | 92 | #define cpm_dpalloc cpm_muram_alloc |
112 | #define cpm_dpfree cpm_muram_free | 93 | #define cpm_dpfree cpm_muram_free |
113 | #define cpm_dpram_addr cpm_muram_addr | 94 | #define cpm_dpram_addr cpm_muram_addr |
114 | #else | ||
115 | extern unsigned long cpm_dpalloc(uint size, uint align); | ||
116 | extern int cpm_dpfree(unsigned long offset); | ||
117 | extern unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align); | ||
118 | extern void cpm_dpdump(void); | ||
119 | extern void *cpm_dpram_addr(unsigned long offset); | ||
120 | #endif | ||
121 | 95 | ||
122 | extern void cpm_setbrg(uint brg, uint rate); | 96 | extern void cpm_setbrg(uint brg, uint rate); |
123 | extern void cpm2_fastbrg(uint brg, uint rate, int div16); | 97 | extern void cpm2_fastbrg(uint brg, uint rate, int div16); |
diff --git a/include/asm-powerpc/cputable.h b/include/asm-powerpc/cputable.h index 1e79673b7316..2a3e9075a5a0 100644 --- a/include/asm-powerpc/cputable.h +++ b/include/asm-powerpc/cputable.h | |||
@@ -1,8 +1,6 @@ | |||
1 | #ifndef __ASM_POWERPC_CPUTABLE_H | 1 | #ifndef __ASM_POWERPC_CPUTABLE_H |
2 | #define __ASM_POWERPC_CPUTABLE_H | 2 | #define __ASM_POWERPC_CPUTABLE_H |
3 | 3 | ||
4 | #include <asm/asm-compat.h> | ||
5 | |||
6 | #define PPC_FEATURE_32 0x80000000 | 4 | #define PPC_FEATURE_32 0x80000000 |
7 | #define PPC_FEATURE_64 0x40000000 | 5 | #define PPC_FEATURE_64 0x40000000 |
8 | #define PPC_FEATURE_601_INSTR 0x20000000 | 6 | #define PPC_FEATURE_601_INSTR 0x20000000 |
@@ -26,11 +24,20 @@ | |||
26 | #define PPC_FEATURE_PA6T 0x00000800 | 24 | #define PPC_FEATURE_PA6T 0x00000800 |
27 | #define PPC_FEATURE_HAS_DFP 0x00000400 | 25 | #define PPC_FEATURE_HAS_DFP 0x00000400 |
28 | #define PPC_FEATURE_POWER6_EXT 0x00000200 | 26 | #define PPC_FEATURE_POWER6_EXT 0x00000200 |
27 | #define PPC_FEATURE_ARCH_2_06 0x00000100 | ||
28 | #define PPC_FEATURE_HAS_VSX 0x00000080 | ||
29 | |||
30 | #define PPC_FEATURE_PSERIES_PERFMON_COMPAT \ | ||
31 | 0x00000040 | ||
29 | 32 | ||
30 | #define PPC_FEATURE_TRUE_LE 0x00000002 | 33 | #define PPC_FEATURE_TRUE_LE 0x00000002 |
31 | #define PPC_FEATURE_PPC_LE 0x00000001 | 34 | #define PPC_FEATURE_PPC_LE 0x00000001 |
32 | 35 | ||
33 | #ifdef __KERNEL__ | 36 | #ifdef __KERNEL__ |
37 | |||
38 | #include <asm/asm-compat.h> | ||
39 | #include <asm/feature-fixups.h> | ||
40 | |||
34 | #ifndef __ASSEMBLY__ | 41 | #ifndef __ASSEMBLY__ |
35 | 42 | ||
36 | /* This structure can grow, it's real size is used by head.S code | 43 | /* This structure can grow, it's real size is used by head.S code |
@@ -132,7 +139,7 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
132 | #define CPU_FTR_TAU ASM_CONST(0x0000000000000010) | 139 | #define CPU_FTR_TAU ASM_CONST(0x0000000000000010) |
133 | #define CPU_FTR_CAN_DOZE ASM_CONST(0x0000000000000020) | 140 | #define CPU_FTR_CAN_DOZE ASM_CONST(0x0000000000000020) |
134 | #define CPU_FTR_USE_TB ASM_CONST(0x0000000000000040) | 141 | #define CPU_FTR_USE_TB ASM_CONST(0x0000000000000040) |
135 | #define CPU_FTR_604_PERF_MON ASM_CONST(0x0000000000000080) | 142 | #define CPU_FTR_L2CSR ASM_CONST(0x0000000000000080) |
136 | #define CPU_FTR_601 ASM_CONST(0x0000000000000100) | 143 | #define CPU_FTR_601 ASM_CONST(0x0000000000000100) |
137 | #define CPU_FTR_HPTE_TABLE ASM_CONST(0x0000000000000200) | 144 | #define CPU_FTR_HPTE_TABLE ASM_CONST(0x0000000000000200) |
138 | #define CPU_FTR_CAN_NAP ASM_CONST(0x0000000000000400) | 145 | #define CPU_FTR_CAN_NAP ASM_CONST(0x0000000000000400) |
@@ -152,6 +159,7 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
152 | #define CPU_FTR_UNIFIED_ID_CACHE ASM_CONST(0x0000000001000000) | 159 | #define CPU_FTR_UNIFIED_ID_CACHE ASM_CONST(0x0000000001000000) |
153 | #define CPU_FTR_SPE ASM_CONST(0x0000000002000000) | 160 | #define CPU_FTR_SPE ASM_CONST(0x0000000002000000) |
154 | #define CPU_FTR_NEED_PAIRED_STWCX ASM_CONST(0x0000000004000000) | 161 | #define CPU_FTR_NEED_PAIRED_STWCX ASM_CONST(0x0000000004000000) |
162 | #define CPU_FTR_LWSYNC ASM_CONST(0x0000000008000000) | ||
155 | 163 | ||
156 | /* | 164 | /* |
157 | * Add the 64-bit processor unique features in the top half of the word; | 165 | * Add the 64-bit processor unique features in the top half of the word; |
@@ -180,6 +188,8 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
180 | #define CPU_FTR_DSCR LONG_ASM_CONST(0x0002000000000000) | 188 | #define CPU_FTR_DSCR LONG_ASM_CONST(0x0002000000000000) |
181 | #define CPU_FTR_1T_SEGMENT LONG_ASM_CONST(0x0004000000000000) | 189 | #define CPU_FTR_1T_SEGMENT LONG_ASM_CONST(0x0004000000000000) |
182 | #define CPU_FTR_NO_SLBIE_B LONG_ASM_CONST(0x0008000000000000) | 190 | #define CPU_FTR_NO_SLBIE_B LONG_ASM_CONST(0x0008000000000000) |
191 | #define CPU_FTR_VSX LONG_ASM_CONST(0x0010000000000000) | ||
192 | #define CPU_FTR_SAO LONG_ASM_CONST(0x0020000000000000) | ||
183 | 193 | ||
184 | #ifndef __ASSEMBLY__ | 194 | #ifndef __ASSEMBLY__ |
185 | 195 | ||
@@ -198,6 +208,17 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
198 | #define PPC_FEATURE_HAS_ALTIVEC_COMP 0 | 208 | #define PPC_FEATURE_HAS_ALTIVEC_COMP 0 |
199 | #endif | 209 | #endif |
200 | 210 | ||
211 | /* We only set the VSX features if the kernel was compiled with VSX | ||
212 | * support | ||
213 | */ | ||
214 | #ifdef CONFIG_VSX | ||
215 | #define CPU_FTR_VSX_COMP CPU_FTR_VSX | ||
216 | #define PPC_FEATURE_HAS_VSX_COMP PPC_FEATURE_HAS_VSX | ||
217 | #else | ||
218 | #define CPU_FTR_VSX_COMP 0 | ||
219 | #define PPC_FEATURE_HAS_VSX_COMP 0 | ||
220 | #endif | ||
221 | |||
201 | /* We only set the spe features if the kernel was compiled with spe | 222 | /* We only set the spe features if the kernel was compiled with spe |
202 | * support | 223 | * support |
203 | */ | 224 | */ |
@@ -245,8 +266,7 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
245 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \ | 266 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \ |
246 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) | 267 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
247 | #define CPU_FTRS_604 (CPU_FTR_COMMON | \ | 268 | #define CPU_FTRS_604 (CPU_FTR_COMMON | \ |
248 | CPU_FTR_USE_TB | CPU_FTR_604_PERF_MON | CPU_FTR_HPTE_TABLE | \ | 269 | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE | CPU_FTR_PPC_LE) |
249 | CPU_FTR_PPC_LE) | ||
250 | #define CPU_FTRS_740_NOTAU (CPU_FTR_COMMON | \ | 270 | #define CPU_FTRS_740_NOTAU (CPU_FTR_COMMON | \ |
251 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ | 271 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
252 | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) | 272 | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
@@ -347,40 +367,50 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
347 | #define CPU_FTRS_E200 (CPU_FTR_USE_TB | CPU_FTR_SPE_COMP | \ | 367 | #define CPU_FTRS_E200 (CPU_FTR_USE_TB | CPU_FTR_SPE_COMP | \ |
348 | CPU_FTR_NODSISRALIGN | CPU_FTR_COHERENT_ICACHE | \ | 368 | CPU_FTR_NODSISRALIGN | CPU_FTR_COHERENT_ICACHE | \ |
349 | CPU_FTR_UNIFIED_ID_CACHE) | 369 | CPU_FTR_UNIFIED_ID_CACHE) |
350 | #define CPU_FTRS_E500 (CPU_FTR_USE_TB | CPU_FTR_SPE_COMP | \ | 370 | #define CPU_FTRS_E500 (CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \ |
371 | CPU_FTR_SPE_COMP | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_NODSISRALIGN) | ||
372 | #define CPU_FTRS_E500_2 (CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \ | ||
373 | CPU_FTR_SPE_COMP | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_BIG_PHYS | \ | ||
351 | CPU_FTR_NODSISRALIGN) | 374 | CPU_FTR_NODSISRALIGN) |
352 | #define CPU_FTRS_E500_2 (CPU_FTR_USE_TB | CPU_FTR_SPE_COMP | \ | 375 | #define CPU_FTRS_E500MC (CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \ |
353 | CPU_FTR_BIG_PHYS | CPU_FTR_NODSISRALIGN) | 376 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_BIG_PHYS | CPU_FTR_NODSISRALIGN | \ |
377 | CPU_FTR_L2CSR | CPU_FTR_LWSYNC) | ||
354 | #define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN) | 378 | #define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN) |
355 | 379 | ||
356 | /* 64-bit CPUs */ | 380 | /* 64-bit CPUs */ |
357 | #define CPU_FTRS_POWER3 (CPU_FTR_USE_TB | \ | 381 | #define CPU_FTRS_POWER3 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
358 | CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | CPU_FTR_PPC_LE) | 382 | CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | CPU_FTR_PPC_LE) |
359 | #define CPU_FTRS_RS64 (CPU_FTR_USE_TB | \ | 383 | #define CPU_FTRS_RS64 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
360 | CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | \ | 384 | CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | \ |
361 | CPU_FTR_MMCRA | CPU_FTR_CTRL) | 385 | CPU_FTR_MMCRA | CPU_FTR_CTRL) |
362 | #define CPU_FTRS_POWER4 (CPU_FTR_USE_TB | \ | 386 | #define CPU_FTRS_POWER4 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
363 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | 387 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
364 | CPU_FTR_MMCRA) | 388 | CPU_FTR_MMCRA) |
365 | #define CPU_FTRS_PPC970 (CPU_FTR_USE_TB | \ | 389 | #define CPU_FTRS_PPC970 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
366 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | 390 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
367 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA) | 391 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA) |
368 | #define CPU_FTRS_POWER5 (CPU_FTR_USE_TB | \ | 392 | #define CPU_FTRS_POWER5 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
369 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | 393 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
370 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 394 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
371 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ | 395 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ |
372 | CPU_FTR_PURR) | 396 | CPU_FTR_PURR) |
373 | #define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | \ | 397 | #define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
374 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | 398 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
375 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 399 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
376 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ | 400 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ |
377 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ | 401 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ |
378 | CPU_FTR_DSCR) | 402 | CPU_FTR_DSCR) |
379 | #define CPU_FTRS_CELL (CPU_FTR_USE_TB | \ | 403 | #define CPU_FTRS_POWER7 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
404 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | ||
405 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | ||
406 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ | ||
407 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ | ||
408 | CPU_FTR_DSCR | CPU_FTR_SAO) | ||
409 | #define CPU_FTRS_CELL (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ | ||
380 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | 410 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
381 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 411 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
382 | CPU_FTR_PAUSE_ZERO | CPU_FTR_CI_LARGE_PAGE | CPU_FTR_CELL_TB_BUG) | 412 | CPU_FTR_PAUSE_ZERO | CPU_FTR_CI_LARGE_PAGE | CPU_FTR_CELL_TB_BUG) |
383 | #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | \ | 413 | #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
384 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ | 414 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ |
385 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_CI_LARGE_PAGE | \ | 415 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_CI_LARGE_PAGE | \ |
386 | CPU_FTR_PURR | CPU_FTR_REAL_LE | CPU_FTR_NO_SLBIE_B) | 416 | CPU_FTR_PURR | CPU_FTR_REAL_LE | CPU_FTR_NO_SLBIE_B) |
@@ -391,7 +421,8 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
391 | #define CPU_FTRS_POSSIBLE \ | 421 | #define CPU_FTRS_POSSIBLE \ |
392 | (CPU_FTRS_POWER3 | CPU_FTRS_RS64 | CPU_FTRS_POWER4 | \ | 422 | (CPU_FTRS_POWER3 | CPU_FTRS_RS64 | CPU_FTRS_POWER4 | \ |
393 | CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | CPU_FTRS_POWER6 | \ | 423 | CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | CPU_FTRS_POWER6 | \ |
394 | CPU_FTRS_CELL | CPU_FTRS_PA6T | CPU_FTR_1T_SEGMENT) | 424 | CPU_FTRS_POWER7 | CPU_FTRS_CELL | CPU_FTRS_PA6T | \ |
425 | CPU_FTR_1T_SEGMENT | CPU_FTR_VSX) | ||
395 | #else | 426 | #else |
396 | enum { | 427 | enum { |
397 | CPU_FTRS_POSSIBLE = | 428 | CPU_FTRS_POSSIBLE = |
@@ -421,7 +452,7 @@ enum { | |||
421 | CPU_FTRS_E200 | | 452 | CPU_FTRS_E200 | |
422 | #endif | 453 | #endif |
423 | #ifdef CONFIG_E500 | 454 | #ifdef CONFIG_E500 |
424 | CPU_FTRS_E500 | CPU_FTRS_E500_2 | | 455 | CPU_FTRS_E500 | CPU_FTRS_E500_2 | CPU_FTRS_E500MC | |
425 | #endif | 456 | #endif |
426 | 0, | 457 | 0, |
427 | }; | 458 | }; |
@@ -431,7 +462,7 @@ enum { | |||
431 | #define CPU_FTRS_ALWAYS \ | 462 | #define CPU_FTRS_ALWAYS \ |
432 | (CPU_FTRS_POWER3 & CPU_FTRS_RS64 & CPU_FTRS_POWER4 & \ | 463 | (CPU_FTRS_POWER3 & CPU_FTRS_RS64 & CPU_FTRS_POWER4 & \ |
433 | CPU_FTRS_PPC970 & CPU_FTRS_POWER5 & CPU_FTRS_POWER6 & \ | 464 | CPU_FTRS_PPC970 & CPU_FTRS_POWER5 & CPU_FTRS_POWER6 & \ |
434 | CPU_FTRS_CELL & CPU_FTRS_PA6T & CPU_FTRS_POSSIBLE) | 465 | CPU_FTRS_POWER7 & CPU_FTRS_CELL & CPU_FTRS_PA6T & CPU_FTRS_POSSIBLE) |
435 | #else | 466 | #else |
436 | enum { | 467 | enum { |
437 | CPU_FTRS_ALWAYS = | 468 | CPU_FTRS_ALWAYS = |
@@ -461,7 +492,7 @@ enum { | |||
461 | CPU_FTRS_E200 & | 492 | CPU_FTRS_E200 & |
462 | #endif | 493 | #endif |
463 | #ifdef CONFIG_E500 | 494 | #ifdef CONFIG_E500 |
464 | CPU_FTRS_E500 & CPU_FTRS_E500_2 & | 495 | CPU_FTRS_E500 & CPU_FTRS_E500_2 & CPU_FTRS_E500MC & |
465 | #endif | 496 | #endif |
466 | CPU_FTRS_POSSIBLE, | 497 | CPU_FTRS_POSSIBLE, |
467 | }; | 498 | }; |
@@ -477,18 +508,5 @@ static inline int cpu_has_feature(unsigned long feature) | |||
477 | 508 | ||
478 | #endif /* !__ASSEMBLY__ */ | 509 | #endif /* !__ASSEMBLY__ */ |
479 | 510 | ||
480 | #ifdef __ASSEMBLY__ | ||
481 | |||
482 | #define BEGIN_FTR_SECTION_NESTED(label) label: | ||
483 | #define BEGIN_FTR_SECTION BEGIN_FTR_SECTION_NESTED(97) | ||
484 | #define END_FTR_SECTION_NESTED(msk, val, label) \ | ||
485 | MAKE_FTR_SECTION_ENTRY(msk, val, label, __ftr_fixup) | ||
486 | #define END_FTR_SECTION(msk, val) \ | ||
487 | END_FTR_SECTION_NESTED(msk, val, 97) | ||
488 | |||
489 | #define END_FTR_SECTION_IFSET(msk) END_FTR_SECTION((msk), (msk)) | ||
490 | #define END_FTR_SECTION_IFCLR(msk) END_FTR_SECTION((msk), 0) | ||
491 | #endif /* __ASSEMBLY__ */ | ||
492 | |||
493 | #endif /* __KERNEL__ */ | 511 | #endif /* __KERNEL__ */ |
494 | #endif /* __ASM_POWERPC_CPUTABLE_H */ | 512 | #endif /* __ASM_POWERPC_CPUTABLE_H */ |
diff --git a/include/asm-powerpc/dcr-generic.h b/include/asm-powerpc/dcr-generic.h new file mode 100644 index 000000000000..35b71599ec46 --- /dev/null +++ b/include/asm-powerpc/dcr-generic.h | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * (c) Copyright 2006 Benjamin Herrenschmidt, IBM Corp. | ||
3 | * <benh@kernel.crashing.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See | ||
13 | * the GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
18 | */ | ||
19 | |||
20 | #ifndef _ASM_POWERPC_DCR_GENERIC_H | ||
21 | #define _ASM_POWERPC_DCR_GENERIC_H | ||
22 | #ifdef __KERNEL__ | ||
23 | #ifndef __ASSEMBLY__ | ||
24 | |||
25 | enum host_type_t {DCR_HOST_MMIO, DCR_HOST_NATIVE, DCR_HOST_INVALID}; | ||
26 | |||
27 | typedef struct { | ||
28 | enum host_type_t type; | ||
29 | union { | ||
30 | dcr_host_mmio_t mmio; | ||
31 | dcr_host_native_t native; | ||
32 | } host; | ||
33 | } dcr_host_t; | ||
34 | |||
35 | extern bool dcr_map_ok_generic(dcr_host_t host); | ||
36 | |||
37 | extern dcr_host_t dcr_map_generic(struct device_node *dev, unsigned int dcr_n, | ||
38 | unsigned int dcr_c); | ||
39 | extern void dcr_unmap_generic(dcr_host_t host, unsigned int dcr_c); | ||
40 | |||
41 | extern u32 dcr_read_generic(dcr_host_t host, unsigned int dcr_n); | ||
42 | |||
43 | extern void dcr_write_generic(dcr_host_t host, unsigned int dcr_n, u32 value); | ||
44 | |||
45 | #endif /* __ASSEMBLY__ */ | ||
46 | #endif /* __KERNEL__ */ | ||
47 | #endif /* _ASM_POWERPC_DCR_GENERIC_H */ | ||
48 | |||
49 | |||
diff --git a/include/asm-powerpc/dcr-mmio.h b/include/asm-powerpc/dcr-mmio.h index 08532ff1899c..acd491dbd45a 100644 --- a/include/asm-powerpc/dcr-mmio.h +++ b/include/asm-powerpc/dcr-mmio.h | |||
@@ -27,20 +27,26 @@ typedef struct { | |||
27 | void __iomem *token; | 27 | void __iomem *token; |
28 | unsigned int stride; | 28 | unsigned int stride; |
29 | unsigned int base; | 29 | unsigned int base; |
30 | } dcr_host_t; | 30 | } dcr_host_mmio_t; |
31 | 31 | ||
32 | #define DCR_MAP_OK(host) ((host).token != NULL) | 32 | static inline bool dcr_map_ok_mmio(dcr_host_mmio_t host) |
33 | { | ||
34 | return host.token != NULL; | ||
35 | } | ||
33 | 36 | ||
34 | extern dcr_host_t dcr_map(struct device_node *dev, unsigned int dcr_n, | 37 | extern dcr_host_mmio_t dcr_map_mmio(struct device_node *dev, |
35 | unsigned int dcr_c); | 38 | unsigned int dcr_n, |
36 | extern void dcr_unmap(dcr_host_t host, unsigned int dcr_c); | 39 | unsigned int dcr_c); |
40 | extern void dcr_unmap_mmio(dcr_host_mmio_t host, unsigned int dcr_c); | ||
37 | 41 | ||
38 | static inline u32 dcr_read(dcr_host_t host, unsigned int dcr_n) | 42 | static inline u32 dcr_read_mmio(dcr_host_mmio_t host, unsigned int dcr_n) |
39 | { | 43 | { |
40 | return in_be32(host.token + ((host.base + dcr_n) * host.stride)); | 44 | return in_be32(host.token + ((host.base + dcr_n) * host.stride)); |
41 | } | 45 | } |
42 | 46 | ||
43 | static inline void dcr_write(dcr_host_t host, unsigned int dcr_n, u32 value) | 47 | static inline void dcr_write_mmio(dcr_host_mmio_t host, |
48 | unsigned int dcr_n, | ||
49 | u32 value) | ||
44 | { | 50 | { |
45 | out_be32(host.token + ((host.base + dcr_n) * host.stride), value); | 51 | out_be32(host.token + ((host.base + dcr_n) * host.stride), value); |
46 | } | 52 | } |
diff --git a/include/asm-powerpc/dcr-native.h b/include/asm-powerpc/dcr-native.h index f8398ce80372..72d2b72c7390 100644 --- a/include/asm-powerpc/dcr-native.h +++ b/include/asm-powerpc/dcr-native.h | |||
@@ -26,14 +26,18 @@ | |||
26 | 26 | ||
27 | typedef struct { | 27 | typedef struct { |
28 | unsigned int base; | 28 | unsigned int base; |
29 | } dcr_host_t; | 29 | } dcr_host_native_t; |
30 | 30 | ||
31 | #define DCR_MAP_OK(host) (1) | 31 | static inline bool dcr_map_ok_native(dcr_host_native_t host) |
32 | { | ||
33 | return 1; | ||
34 | } | ||
32 | 35 | ||
33 | #define dcr_map(dev, dcr_n, dcr_c) ((dcr_host_t){ .base = (dcr_n) }) | 36 | #define dcr_map_native(dev, dcr_n, dcr_c) \ |
34 | #define dcr_unmap(host, dcr_c) do {} while (0) | 37 | ((dcr_host_native_t){ .base = (dcr_n) }) |
35 | #define dcr_read(host, dcr_n) mfdcr(dcr_n + host.base) | 38 | #define dcr_unmap_native(host, dcr_c) do {} while (0) |
36 | #define dcr_write(host, dcr_n, value) mtdcr(dcr_n + host.base, value) | 39 | #define dcr_read_native(host, dcr_n) mfdcr(dcr_n + host.base) |
40 | #define dcr_write_native(host, dcr_n, value) mtdcr(dcr_n + host.base, value) | ||
37 | 41 | ||
38 | /* Device Control Registers */ | 42 | /* Device Control Registers */ |
39 | void __mtdcr(int reg, unsigned int val); | 43 | void __mtdcr(int reg, unsigned int val); |
diff --git a/include/asm-powerpc/dcr.h b/include/asm-powerpc/dcr.h index 9338d50538f1..53b283050ab3 100644 --- a/include/asm-powerpc/dcr.h +++ b/include/asm-powerpc/dcr.h | |||
@@ -20,14 +20,50 @@ | |||
20 | #ifndef _ASM_POWERPC_DCR_H | 20 | #ifndef _ASM_POWERPC_DCR_H |
21 | #define _ASM_POWERPC_DCR_H | 21 | #define _ASM_POWERPC_DCR_H |
22 | #ifdef __KERNEL__ | 22 | #ifdef __KERNEL__ |
23 | #ifndef __ASSEMBLY__ | ||
23 | #ifdef CONFIG_PPC_DCR | 24 | #ifdef CONFIG_PPC_DCR |
24 | 25 | ||
25 | #ifdef CONFIG_PPC_DCR_NATIVE | 26 | #ifdef CONFIG_PPC_DCR_NATIVE |
26 | #include <asm/dcr-native.h> | 27 | #include <asm/dcr-native.h> |
27 | #else | 28 | #endif |
29 | |||
30 | #ifdef CONFIG_PPC_DCR_MMIO | ||
28 | #include <asm/dcr-mmio.h> | 31 | #include <asm/dcr-mmio.h> |
29 | #endif | 32 | #endif |
30 | 33 | ||
34 | |||
35 | /* Indirection layer for providing both NATIVE and MMIO support. */ | ||
36 | |||
37 | #if defined(CONFIG_PPC_DCR_NATIVE) && defined(CONFIG_PPC_DCR_MMIO) | ||
38 | |||
39 | #include <asm/dcr-generic.h> | ||
40 | |||
41 | #define DCR_MAP_OK(host) dcr_map_ok_generic(host) | ||
42 | #define dcr_map(dev, dcr_n, dcr_c) dcr_map_generic(dev, dcr_n, dcr_c) | ||
43 | #define dcr_unmap(host, dcr_c) dcr_unmap_generic(host, dcr_c) | ||
44 | #define dcr_read(host, dcr_n) dcr_read_generic(host, dcr_n) | ||
45 | #define dcr_write(host, dcr_n, value) dcr_write_generic(host, dcr_n, value) | ||
46 | |||
47 | #else | ||
48 | |||
49 | #ifdef CONFIG_PPC_DCR_NATIVE | ||
50 | typedef dcr_host_native_t dcr_host_t; | ||
51 | #define DCR_MAP_OK(host) dcr_map_ok_native(host) | ||
52 | #define dcr_map(dev, dcr_n, dcr_c) dcr_map_native(dev, dcr_n, dcr_c) | ||
53 | #define dcr_unmap(host, dcr_c) dcr_unmap_native(host, dcr_c) | ||
54 | #define dcr_read(host, dcr_n) dcr_read_native(host, dcr_n) | ||
55 | #define dcr_write(host, dcr_n, value) dcr_write_native(host, dcr_n, value) | ||
56 | #else | ||
57 | typedef dcr_host_mmio_t dcr_host_t; | ||
58 | #define DCR_MAP_OK(host) dcr_map_ok_mmio(host) | ||
59 | #define dcr_map(dev, dcr_n, dcr_c) dcr_map_mmio(dev, dcr_n, dcr_c) | ||
60 | #define dcr_unmap(host, dcr_c) dcr_unmap_mmio(host, dcr_c) | ||
61 | #define dcr_read(host, dcr_n) dcr_read_mmio(host, dcr_n) | ||
62 | #define dcr_write(host, dcr_n, value) dcr_write_mmio(host, dcr_n, value) | ||
63 | #endif | ||
64 | |||
65 | #endif /* defined(CONFIG_PPC_DCR_NATIVE) && defined(CONFIG_PPC_DCR_MMIO) */ | ||
66 | |||
31 | /* | 67 | /* |
32 | * On CONFIG_PPC_MERGE, we have additional helpers to read the DCR | 68 | * On CONFIG_PPC_MERGE, we have additional helpers to read the DCR |
33 | * base from the device-tree | 69 | * base from the device-tree |
@@ -41,5 +77,6 @@ extern unsigned int dcr_resource_len(struct device_node *np, | |||
41 | #endif /* CONFIG_PPC_MERGE */ | 77 | #endif /* CONFIG_PPC_MERGE */ |
42 | 78 | ||
43 | #endif /* CONFIG_PPC_DCR */ | 79 | #endif /* CONFIG_PPC_DCR */ |
80 | #endif /* __ASSEMBLY__ */ | ||
44 | #endif /* __KERNEL__ */ | 81 | #endif /* __KERNEL__ */ |
45 | #endif /* _ASM_POWERPC_DCR_H */ | 82 | #endif /* _ASM_POWERPC_DCR_H */ |
diff --git a/include/asm-powerpc/dma-mapping.h b/include/asm-powerpc/dma-mapping.h index bbefb69bfb67..74c549780987 100644 --- a/include/asm-powerpc/dma-mapping.h +++ b/include/asm-powerpc/dma-mapping.h | |||
@@ -13,6 +13,7 @@ | |||
13 | /* need struct page definitions */ | 13 | /* need struct page definitions */ |
14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
15 | #include <linux/scatterlist.h> | 15 | #include <linux/scatterlist.h> |
16 | #include <linux/dma-attrs.h> | ||
16 | #include <asm/io.h> | 17 | #include <asm/io.h> |
17 | 18 | ||
18 | #define DMA_ERROR_CODE (~(dma_addr_t)0x0) | 19 | #define DMA_ERROR_CODE (~(dma_addr_t)0x0) |
@@ -44,6 +45,15 @@ extern void __dma_sync_page(struct page *page, unsigned long offset, | |||
44 | #endif /* ! CONFIG_NOT_COHERENT_CACHE */ | 45 | #endif /* ! CONFIG_NOT_COHERENT_CACHE */ |
45 | 46 | ||
46 | #ifdef CONFIG_PPC64 | 47 | #ifdef CONFIG_PPC64 |
48 | |||
49 | static inline unsigned long device_to_mask(struct device *dev) | ||
50 | { | ||
51 | if (dev->dma_mask && *dev->dma_mask) | ||
52 | return *dev->dma_mask; | ||
53 | /* Assume devices without mask can take 32 bit addresses */ | ||
54 | return 0xfffffffful; | ||
55 | } | ||
56 | |||
47 | /* | 57 | /* |
48 | * DMA operations are abstracted for G5 vs. i/pSeries, PCI vs. VIO | 58 | * DMA operations are abstracted for G5 vs. i/pSeries, PCI vs. VIO |
49 | */ | 59 | */ |
@@ -53,13 +63,17 @@ struct dma_mapping_ops { | |||
53 | void (*free_coherent)(struct device *dev, size_t size, | 63 | void (*free_coherent)(struct device *dev, size_t size, |
54 | void *vaddr, dma_addr_t dma_handle); | 64 | void *vaddr, dma_addr_t dma_handle); |
55 | dma_addr_t (*map_single)(struct device *dev, void *ptr, | 65 | dma_addr_t (*map_single)(struct device *dev, void *ptr, |
56 | size_t size, enum dma_data_direction direction); | 66 | size_t size, enum dma_data_direction direction, |
67 | struct dma_attrs *attrs); | ||
57 | void (*unmap_single)(struct device *dev, dma_addr_t dma_addr, | 68 | void (*unmap_single)(struct device *dev, dma_addr_t dma_addr, |
58 | size_t size, enum dma_data_direction direction); | 69 | size_t size, enum dma_data_direction direction, |
70 | struct dma_attrs *attrs); | ||
59 | int (*map_sg)(struct device *dev, struct scatterlist *sg, | 71 | int (*map_sg)(struct device *dev, struct scatterlist *sg, |
60 | int nents, enum dma_data_direction direction); | 72 | int nents, enum dma_data_direction direction, |
73 | struct dma_attrs *attrs); | ||
61 | void (*unmap_sg)(struct device *dev, struct scatterlist *sg, | 74 | void (*unmap_sg)(struct device *dev, struct scatterlist *sg, |
62 | int nents, enum dma_data_direction direction); | 75 | int nents, enum dma_data_direction direction, |
76 | struct dma_attrs *attrs); | ||
63 | int (*dma_supported)(struct device *dev, u64 mask); | 77 | int (*dma_supported)(struct device *dev, u64 mask); |
64 | int (*set_dma_mask)(struct device *dev, u64 dma_mask); | 78 | int (*set_dma_mask)(struct device *dev, u64 dma_mask); |
65 | }; | 79 | }; |
@@ -109,6 +123,77 @@ static inline int dma_set_mask(struct device *dev, u64 dma_mask) | |||
109 | return 0; | 123 | return 0; |
110 | } | 124 | } |
111 | 125 | ||
126 | static inline dma_addr_t dma_map_single_attrs(struct device *dev, | ||
127 | void *cpu_addr, | ||
128 | size_t size, | ||
129 | enum dma_data_direction direction, | ||
130 | struct dma_attrs *attrs) | ||
131 | { | ||
132 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | ||
133 | |||
134 | BUG_ON(!dma_ops); | ||
135 | return dma_ops->map_single(dev, cpu_addr, size, direction, attrs); | ||
136 | } | ||
137 | |||
138 | static inline void dma_unmap_single_attrs(struct device *dev, | ||
139 | dma_addr_t dma_addr, | ||
140 | size_t size, | ||
141 | enum dma_data_direction direction, | ||
142 | struct dma_attrs *attrs) | ||
143 | { | ||
144 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | ||
145 | |||
146 | BUG_ON(!dma_ops); | ||
147 | dma_ops->unmap_single(dev, dma_addr, size, direction, attrs); | ||
148 | } | ||
149 | |||
150 | static inline dma_addr_t dma_map_page_attrs(struct device *dev, | ||
151 | struct page *page, | ||
152 | unsigned long offset, size_t size, | ||
153 | enum dma_data_direction direction, | ||
154 | struct dma_attrs *attrs) | ||
155 | { | ||
156 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | ||
157 | |||
158 | BUG_ON(!dma_ops); | ||
159 | return dma_ops->map_single(dev, page_address(page) + offset, size, | ||
160 | direction, attrs); | ||
161 | } | ||
162 | |||
163 | static inline void dma_unmap_page_attrs(struct device *dev, | ||
164 | dma_addr_t dma_address, | ||
165 | size_t size, | ||
166 | enum dma_data_direction direction, | ||
167 | struct dma_attrs *attrs) | ||
168 | { | ||
169 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | ||
170 | |||
171 | BUG_ON(!dma_ops); | ||
172 | dma_ops->unmap_single(dev, dma_address, size, direction, attrs); | ||
173 | } | ||
174 | |||
175 | static inline int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, | ||
176 | int nents, enum dma_data_direction direction, | ||
177 | struct dma_attrs *attrs) | ||
178 | { | ||
179 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | ||
180 | |||
181 | BUG_ON(!dma_ops); | ||
182 | return dma_ops->map_sg(dev, sg, nents, direction, attrs); | ||
183 | } | ||
184 | |||
185 | static inline void dma_unmap_sg_attrs(struct device *dev, | ||
186 | struct scatterlist *sg, | ||
187 | int nhwentries, | ||
188 | enum dma_data_direction direction, | ||
189 | struct dma_attrs *attrs) | ||
190 | { | ||
191 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | ||
192 | |||
193 | BUG_ON(!dma_ops); | ||
194 | dma_ops->unmap_sg(dev, sg, nhwentries, direction, attrs); | ||
195 | } | ||
196 | |||
112 | static inline void *dma_alloc_coherent(struct device *dev, size_t size, | 197 | static inline void *dma_alloc_coherent(struct device *dev, size_t size, |
113 | dma_addr_t *dma_handle, gfp_t flag) | 198 | dma_addr_t *dma_handle, gfp_t flag) |
114 | { | 199 | { |
@@ -131,63 +216,43 @@ static inline dma_addr_t dma_map_single(struct device *dev, void *cpu_addr, | |||
131 | size_t size, | 216 | size_t size, |
132 | enum dma_data_direction direction) | 217 | enum dma_data_direction direction) |
133 | { | 218 | { |
134 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 219 | return dma_map_single_attrs(dev, cpu_addr, size, direction, NULL); |
135 | |||
136 | BUG_ON(!dma_ops); | ||
137 | return dma_ops->map_single(dev, cpu_addr, size, direction); | ||
138 | } | 220 | } |
139 | 221 | ||
140 | static inline void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, | 222 | static inline void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, |
141 | size_t size, | 223 | size_t size, |
142 | enum dma_data_direction direction) | 224 | enum dma_data_direction direction) |
143 | { | 225 | { |
144 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 226 | dma_unmap_single_attrs(dev, dma_addr, size, direction, NULL); |
145 | |||
146 | BUG_ON(!dma_ops); | ||
147 | dma_ops->unmap_single(dev, dma_addr, size, direction); | ||
148 | } | 227 | } |
149 | 228 | ||
150 | static inline dma_addr_t dma_map_page(struct device *dev, struct page *page, | 229 | static inline dma_addr_t dma_map_page(struct device *dev, struct page *page, |
151 | unsigned long offset, size_t size, | 230 | unsigned long offset, size_t size, |
152 | enum dma_data_direction direction) | 231 | enum dma_data_direction direction) |
153 | { | 232 | { |
154 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 233 | return dma_map_page_attrs(dev, page, offset, size, direction, NULL); |
155 | |||
156 | BUG_ON(!dma_ops); | ||
157 | return dma_ops->map_single(dev, page_address(page) + offset, size, | ||
158 | direction); | ||
159 | } | 234 | } |
160 | 235 | ||
161 | static inline void dma_unmap_page(struct device *dev, dma_addr_t dma_address, | 236 | static inline void dma_unmap_page(struct device *dev, dma_addr_t dma_address, |
162 | size_t size, | 237 | size_t size, |
163 | enum dma_data_direction direction) | 238 | enum dma_data_direction direction) |
164 | { | 239 | { |
165 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 240 | dma_unmap_page_attrs(dev, dma_address, size, direction, NULL); |
166 | |||
167 | BUG_ON(!dma_ops); | ||
168 | dma_ops->unmap_single(dev, dma_address, size, direction); | ||
169 | } | 241 | } |
170 | 242 | ||
171 | static inline int dma_map_sg(struct device *dev, struct scatterlist *sg, | 243 | static inline int dma_map_sg(struct device *dev, struct scatterlist *sg, |
172 | int nents, enum dma_data_direction direction) | 244 | int nents, enum dma_data_direction direction) |
173 | { | 245 | { |
174 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 246 | return dma_map_sg_attrs(dev, sg, nents, direction, NULL); |
175 | |||
176 | BUG_ON(!dma_ops); | ||
177 | return dma_ops->map_sg(dev, sg, nents, direction); | ||
178 | } | 247 | } |
179 | 248 | ||
180 | static inline void dma_unmap_sg(struct device *dev, struct scatterlist *sg, | 249 | static inline void dma_unmap_sg(struct device *dev, struct scatterlist *sg, |
181 | int nhwentries, | 250 | int nhwentries, |
182 | enum dma_data_direction direction) | 251 | enum dma_data_direction direction) |
183 | { | 252 | { |
184 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 253 | dma_unmap_sg_attrs(dev, sg, nhwentries, direction, NULL); |
185 | |||
186 | BUG_ON(!dma_ops); | ||
187 | dma_ops->unmap_sg(dev, sg, nhwentries, direction); | ||
188 | } | 254 | } |
189 | 255 | ||
190 | |||
191 | /* | 256 | /* |
192 | * Available generic sets of operations | 257 | * Available generic sets of operations |
193 | */ | 258 | */ |
diff --git a/include/asm-powerpc/elf.h b/include/asm-powerpc/elf.h index 9080d85cb9d0..89664675b469 100644 --- a/include/asm-powerpc/elf.h +++ b/include/asm-powerpc/elf.h | |||
@@ -109,6 +109,7 @@ typedef elf_gregset_t32 compat_elf_gregset_t; | |||
109 | #ifdef __powerpc64__ | 109 | #ifdef __powerpc64__ |
110 | # define ELF_NVRREG32 33 /* includes vscr & vrsave stuffed together */ | 110 | # define ELF_NVRREG32 33 /* includes vscr & vrsave stuffed together */ |
111 | # define ELF_NVRREG 34 /* includes vscr & vrsave in split vectors */ | 111 | # define ELF_NVRREG 34 /* includes vscr & vrsave in split vectors */ |
112 | # define ELF_NVSRHALFREG 32 /* Half the vsx registers */ | ||
112 | # define ELF_GREG_TYPE elf_greg_t64 | 113 | # define ELF_GREG_TYPE elf_greg_t64 |
113 | #else | 114 | #else |
114 | # define ELF_NEVRREG 34 /* includes acc (as 2) */ | 115 | # define ELF_NEVRREG 34 /* includes acc (as 2) */ |
@@ -158,6 +159,7 @@ typedef __vector128 elf_vrreg_t; | |||
158 | typedef elf_vrreg_t elf_vrregset_t[ELF_NVRREG]; | 159 | typedef elf_vrreg_t elf_vrregset_t[ELF_NVRREG]; |
159 | #ifdef __powerpc64__ | 160 | #ifdef __powerpc64__ |
160 | typedef elf_vrreg_t elf_vrregset_t32[ELF_NVRREG32]; | 161 | typedef elf_vrreg_t elf_vrregset_t32[ELF_NVRREG32]; |
162 | typedef elf_fpreg_t elf_vsrreghalf_t32[ELF_NVSRHALFREG]; | ||
161 | #endif | 163 | #endif |
162 | 164 | ||
163 | #ifdef __KERNEL__ | 165 | #ifdef __KERNEL__ |
@@ -202,30 +204,8 @@ static inline void ppc_elf_core_copy_regs(elf_gregset_t elf_regs, | |||
202 | } | 204 | } |
203 | #define ELF_CORE_COPY_REGS(gregs, regs) ppc_elf_core_copy_regs(gregs, regs); | 205 | #define ELF_CORE_COPY_REGS(gregs, regs) ppc_elf_core_copy_regs(gregs, regs); |
204 | 206 | ||
205 | static inline int dump_task_regs(struct task_struct *tsk, | ||
206 | elf_gregset_t *elf_regs) | ||
207 | { | ||
208 | struct pt_regs *regs = tsk->thread.regs; | ||
209 | if (regs) | ||
210 | ppc_elf_core_copy_regs(*elf_regs, regs); | ||
211 | |||
212 | return 1; | ||
213 | } | ||
214 | #define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs) | ||
215 | |||
216 | extern int dump_task_fpu(struct task_struct *, elf_fpregset_t *); | ||
217 | #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs) | ||
218 | |||
219 | typedef elf_vrregset_t elf_fpxregset_t; | 207 | typedef elf_vrregset_t elf_fpxregset_t; |
220 | 208 | ||
221 | #ifdef CONFIG_ALTIVEC | ||
222 | extern int dump_task_altivec(struct task_struct *, elf_vrregset_t *vrregs); | ||
223 | #define ELF_CORE_COPY_XFPREGS(tsk, regs) dump_task_altivec(tsk, regs) | ||
224 | #define ELF_CORE_XFPREG_TYPE NT_PPC_VMX | ||
225 | #endif | ||
226 | |||
227 | #endif /* __KERNEL__ */ | ||
228 | |||
229 | /* ELF_HWCAP yields a mask that user programs can use to figure out what | 209 | /* ELF_HWCAP yields a mask that user programs can use to figure out what |
230 | instruction set this cpu supports. This could be done in userspace, | 210 | instruction set this cpu supports. This could be done in userspace, |
231 | but it's not easy, and we've already done it here. */ | 211 | but it's not easy, and we've already done it here. */ |
@@ -243,8 +223,6 @@ extern int dump_task_altivec(struct task_struct *, elf_vrregset_t *vrregs); | |||
243 | } while (0) | 223 | } while (0) |
244 | #endif /* __powerpc64__ */ | 224 | #endif /* __powerpc64__ */ |
245 | 225 | ||
246 | #ifdef __KERNEL__ | ||
247 | |||
248 | #ifdef __powerpc64__ | 226 | #ifdef __powerpc64__ |
249 | # define SET_PERSONALITY(ex, ibcs2) \ | 227 | # define SET_PERSONALITY(ex, ibcs2) \ |
250 | do { \ | 228 | do { \ |
@@ -257,7 +235,8 @@ do { \ | |||
257 | else \ | 235 | else \ |
258 | clear_thread_flag(TIF_ABI_PENDING); \ | 236 | clear_thread_flag(TIF_ABI_PENDING); \ |
259 | if (personality(current->personality) != PER_LINUX32) \ | 237 | if (personality(current->personality) != PER_LINUX32) \ |
260 | set_personality(PER_LINUX); \ | 238 | set_personality(PER_LINUX | \ |
239 | (current->personality & (~PER_MASK))); \ | ||
261 | } while (0) | 240 | } while (0) |
262 | /* | 241 | /* |
263 | * An executable for which elf_read_implies_exec() returns TRUE will | 242 | * An executable for which elf_read_implies_exec() returns TRUE will |
@@ -272,8 +251,6 @@ do { \ | |||
272 | # define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX) | 251 | # define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX) |
273 | #endif /* __powerpc64__ */ | 252 | #endif /* __powerpc64__ */ |
274 | 253 | ||
275 | #endif /* __KERNEL__ */ | ||
276 | |||
277 | extern int dcache_bsize; | 254 | extern int dcache_bsize; |
278 | extern int icache_bsize; | 255 | extern int icache_bsize; |
279 | extern int ucache_bsize; | 256 | extern int ucache_bsize; |
@@ -285,6 +262,8 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm, | |||
285 | int executable_stack); | 262 | int executable_stack); |
286 | #define VDSO_AUX_ENT(a,b) NEW_AUX_ENT(a,b); | 263 | #define VDSO_AUX_ENT(a,b) NEW_AUX_ENT(a,b); |
287 | 264 | ||
265 | #endif /* __KERNEL__ */ | ||
266 | |||
288 | /* | 267 | /* |
289 | * The requirements here are: | 268 | * The requirements here are: |
290 | * - keep the final alignment of sp (sp & 0xf) | 269 | * - keep the final alignment of sp (sp & 0xf) |
@@ -422,6 +401,8 @@ do { \ | |||
422 | /* Keep this the last entry. */ | 401 | /* Keep this the last entry. */ |
423 | #define R_PPC64_NUM 107 | 402 | #define R_PPC64_NUM 107 |
424 | 403 | ||
404 | #ifdef __KERNEL__ | ||
405 | |||
425 | #ifdef CONFIG_SPU_BASE | 406 | #ifdef CONFIG_SPU_BASE |
426 | /* Notes used in ET_CORE. Note name is "SPU/<fd>/<filename>". */ | 407 | /* Notes used in ET_CORE. Note name is "SPU/<fd>/<filename>". */ |
427 | #define NT_SPU 1 | 408 | #define NT_SPU 1 |
@@ -430,4 +411,6 @@ do { \ | |||
430 | 411 | ||
431 | #endif /* CONFIG_SPU_BASE */ | 412 | #endif /* CONFIG_SPU_BASE */ |
432 | 413 | ||
414 | #endif /* __KERNEL */ | ||
415 | |||
433 | #endif /* _ASM_POWERPC_ELF_H */ | 416 | #endif /* _ASM_POWERPC_ELF_H */ |
diff --git a/include/asm-powerpc/feature-fixups.h b/include/asm-powerpc/feature-fixups.h new file mode 100644 index 000000000000..a1029967620b --- /dev/null +++ b/include/asm-powerpc/feature-fixups.h | |||
@@ -0,0 +1,126 @@ | |||
1 | #ifndef __ASM_POWERPC_FEATURE_FIXUPS_H | ||
2 | #define __ASM_POWERPC_FEATURE_FIXUPS_H | ||
3 | |||
4 | /* | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * as published by the Free Software Foundation; either version | ||
8 | * 2 of the License, or (at your option) any later version. | ||
9 | */ | ||
10 | |||
11 | #ifdef __ASSEMBLY__ | ||
12 | |||
13 | /* | ||
14 | * Feature section common macros | ||
15 | * | ||
16 | * Note that the entries now contain offsets between the table entry | ||
17 | * and the code rather than absolute code pointers in order to be | ||
18 | * useable with the vdso shared library. There is also an assumption | ||
19 | * that values will be negative, that is, the fixup table has to be | ||
20 | * located after the code it fixes up. | ||
21 | */ | ||
22 | #if defined(CONFIG_PPC64) && !defined(__powerpc64__) | ||
23 | /* 64 bits kernel, 32 bits code (ie. vdso32) */ | ||
24 | #define FTR_ENTRY_LONG .llong | ||
25 | #define FTR_ENTRY_OFFSET .long 0xffffffff; .long | ||
26 | #else | ||
27 | /* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */ | ||
28 | #define FTR_ENTRY_LONG PPC_LONG | ||
29 | #define FTR_ENTRY_OFFSET PPC_LONG | ||
30 | #endif | ||
31 | |||
32 | #define START_FTR_SECTION(label) label##1: | ||
33 | |||
34 | #define FTR_SECTION_ELSE_NESTED(label) \ | ||
35 | label##2: \ | ||
36 | .pushsection __ftr_alt_##label,"a"; \ | ||
37 | .align 2; \ | ||
38 | label##3: | ||
39 | |||
40 | #define MAKE_FTR_SECTION_ENTRY(msk, val, label, sect) \ | ||
41 | label##4: \ | ||
42 | .popsection; \ | ||
43 | .pushsection sect,"a"; \ | ||
44 | .align 3; \ | ||
45 | label##5: \ | ||
46 | FTR_ENTRY_LONG msk; \ | ||
47 | FTR_ENTRY_LONG val; \ | ||
48 | FTR_ENTRY_OFFSET label##1b-label##5b; \ | ||
49 | FTR_ENTRY_OFFSET label##2b-label##5b; \ | ||
50 | FTR_ENTRY_OFFSET label##3b-label##5b; \ | ||
51 | FTR_ENTRY_OFFSET label##4b-label##5b; \ | ||
52 | .popsection; | ||
53 | |||
54 | |||
55 | /* CPU feature dependent sections */ | ||
56 | #define BEGIN_FTR_SECTION_NESTED(label) START_FTR_SECTION(label) | ||
57 | #define BEGIN_FTR_SECTION START_FTR_SECTION(97) | ||
58 | |||
59 | #define END_FTR_SECTION_NESTED(msk, val, label) \ | ||
60 | FTR_SECTION_ELSE_NESTED(label) \ | ||
61 | MAKE_FTR_SECTION_ENTRY(msk, val, label, __ftr_fixup) | ||
62 | |||
63 | #define END_FTR_SECTION(msk, val) \ | ||
64 | END_FTR_SECTION_NESTED(msk, val, 97) | ||
65 | |||
66 | #define END_FTR_SECTION_IFSET(msk) END_FTR_SECTION((msk), (msk)) | ||
67 | #define END_FTR_SECTION_IFCLR(msk) END_FTR_SECTION((msk), 0) | ||
68 | |||
69 | /* CPU feature sections with alternatives, use BEGIN_FTR_SECTION to start */ | ||
70 | #define FTR_SECTION_ELSE FTR_SECTION_ELSE_NESTED(97) | ||
71 | #define ALT_FTR_SECTION_END_NESTED(msk, val, label) \ | ||
72 | MAKE_FTR_SECTION_ENTRY(msk, val, label, __ftr_fixup) | ||
73 | #define ALT_FTR_SECTION_END_NESTED_IFSET(msk, label) \ | ||
74 | ALT_FTR_SECTION_END_NESTED(msk, msk, label) | ||
75 | #define ALT_FTR_SECTION_END_NESTED_IFCLR(msk, label) \ | ||
76 | ALT_FTR_SECTION_END_NESTED(msk, 0, label) | ||
77 | #define ALT_FTR_SECTION_END(msk, val) \ | ||
78 | ALT_FTR_SECTION_END_NESTED(msk, val, 97) | ||
79 | #define ALT_FTR_SECTION_END_IFSET(msk) \ | ||
80 | ALT_FTR_SECTION_END_NESTED_IFSET(msk, 97) | ||
81 | #define ALT_FTR_SECTION_END_IFCLR(msk) \ | ||
82 | ALT_FTR_SECTION_END_NESTED_IFCLR(msk, 97) | ||
83 | |||
84 | /* Firmware feature dependent sections */ | ||
85 | #define BEGIN_FW_FTR_SECTION_NESTED(label) START_FTR_SECTION(label) | ||
86 | #define BEGIN_FW_FTR_SECTION START_FTR_SECTION(97) | ||
87 | |||
88 | #define END_FW_FTR_SECTION_NESTED(msk, val, label) \ | ||
89 | FTR_SECTION_ELSE_NESTED(label) \ | ||
90 | MAKE_FTR_SECTION_ENTRY(msk, val, label, __fw_ftr_fixup) | ||
91 | |||
92 | #define END_FW_FTR_SECTION(msk, val) \ | ||
93 | END_FW_FTR_SECTION_NESTED(msk, val, 97) | ||
94 | |||
95 | #define END_FW_FTR_SECTION_IFSET(msk) END_FW_FTR_SECTION((msk), (msk)) | ||
96 | #define END_FW_FTR_SECTION_IFCLR(msk) END_FW_FTR_SECTION((msk), 0) | ||
97 | |||
98 | /* Firmware feature sections with alternatives */ | ||
99 | #define FW_FTR_SECTION_ELSE_NESTED(label) FTR_SECTION_ELSE_NESTED(label) | ||
100 | #define FW_FTR_SECTION_ELSE FTR_SECTION_ELSE_NESTED(97) | ||
101 | #define ALT_FW_FTR_SECTION_END_NESTED(msk, val, label) \ | ||
102 | MAKE_FTR_SECTION_ENTRY(msk, val, label, __fw_ftr_fixup) | ||
103 | #define ALT_FW_FTR_SECTION_END_NESTED_IFSET(msk, label) \ | ||
104 | ALT_FW_FTR_SECTION_END_NESTED(msk, msk, label) | ||
105 | #define ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, label) \ | ||
106 | ALT_FW_FTR_SECTION_END_NESTED(msk, 0, label) | ||
107 | #define ALT_FW_FTR_SECTION_END(msk, val) \ | ||
108 | ALT_FW_FTR_SECTION_END_NESTED(msk, val, 97) | ||
109 | #define ALT_FW_FTR_SECTION_END_IFSET(msk) \ | ||
110 | ALT_FW_FTR_SECTION_END_NESTED_IFSET(msk, 97) | ||
111 | #define ALT_FW_FTR_SECTION_END_IFCLR(msk) \ | ||
112 | ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97) | ||
113 | |||
114 | #endif /* __ASSEMBLY__ */ | ||
115 | |||
116 | /* LWSYNC feature sections */ | ||
117 | #define START_LWSYNC_SECTION(label) label##1: | ||
118 | #define MAKE_LWSYNC_SECTION_ENTRY(label, sect) \ | ||
119 | label##2: \ | ||
120 | .pushsection sect,"a"; \ | ||
121 | .align 2; \ | ||
122 | label##3: \ | ||
123 | .long label##1b-label##3b; \ | ||
124 | .popsection; | ||
125 | |||
126 | #endif /* __ASM_POWERPC_FEATURE_FIXUPS_H */ | ||
diff --git a/include/asm-powerpc/firmware.h b/include/asm-powerpc/firmware.h index 1e41bd1c8502..ef328995ba9d 100644 --- a/include/asm-powerpc/firmware.h +++ b/include/asm-powerpc/firmware.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #ifdef __KERNEL__ | 15 | #ifdef __KERNEL__ |
16 | 16 | ||
17 | #include <asm/asm-compat.h> | 17 | #include <asm/asm-compat.h> |
18 | #include <asm/feature-fixups.h> | ||
18 | 19 | ||
19 | /* firmware feature bitmask values */ | 20 | /* firmware feature bitmask values */ |
20 | #define FIRMWARE_MAX_FEATURES 63 | 21 | #define FIRMWARE_MAX_FEATURES 63 |
@@ -125,18 +126,6 @@ extern int fwnmi_active; | |||
125 | 126 | ||
126 | extern unsigned int __start___fw_ftr_fixup, __stop___fw_ftr_fixup; | 127 | extern unsigned int __start___fw_ftr_fixup, __stop___fw_ftr_fixup; |
127 | 128 | ||
128 | #else /* __ASSEMBLY__ */ | ||
129 | |||
130 | #define BEGIN_FW_FTR_SECTION_NESTED(label) label: | ||
131 | #define BEGIN_FW_FTR_SECTION BEGIN_FW_FTR_SECTION_NESTED(97) | ||
132 | #define END_FW_FTR_SECTION_NESTED(msk, val, label) \ | ||
133 | MAKE_FTR_SECTION_ENTRY(msk, val, label, __fw_ftr_fixup) | ||
134 | #define END_FW_FTR_SECTION(msk, val) \ | ||
135 | END_FW_FTR_SECTION_NESTED(msk, val, 97) | ||
136 | |||
137 | #define END_FW_FTR_SECTION_IFSET(msk) END_FW_FTR_SECTION((msk), (msk)) | ||
138 | #define END_FW_FTR_SECTION_IFCLR(msk) END_FW_FTR_SECTION((msk), 0) | ||
139 | |||
140 | #endif /* __ASSEMBLY__ */ | 129 | #endif /* __ASSEMBLY__ */ |
141 | #endif /* __KERNEL__ */ | 130 | #endif /* __KERNEL__ */ |
142 | #endif /* __ASM_POWERPC_FIRMWARE_H */ | 131 | #endif /* __ASM_POWERPC_FIRMWARE_H */ |
diff --git a/include/asm-powerpc/fsl_gtm.h b/include/asm-powerpc/fsl_gtm.h new file mode 100644 index 000000000000..8e8c9b5032d3 --- /dev/null +++ b/include/asm-powerpc/fsl_gtm.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Freescale General-purpose Timers Module | ||
3 | * | ||
4 | * Copyright (c) Freescale Semicondutor, Inc. 2006. | ||
5 | * Shlomi Gridish <gridish@freescale.com> | ||
6 | * Jerry Huang <Chang-Ming.Huang@freescale.com> | ||
7 | * Copyright (c) MontaVista Software, Inc. 2008. | ||
8 | * Anton Vorontsov <avorontsov@ru.mvista.com> | ||
9 | * | ||
10 | * 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 | ||
12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
13 | * option) any later version. | ||
14 | */ | ||
15 | |||
16 | #ifndef __ASM_FSL_GTM_H | ||
17 | #define __ASM_FSL_GTM_H | ||
18 | |||
19 | #include <linux/types.h> | ||
20 | |||
21 | struct gtm; | ||
22 | |||
23 | struct gtm_timer { | ||
24 | unsigned int irq; | ||
25 | |||
26 | struct gtm *gtm; | ||
27 | bool requested; | ||
28 | u8 __iomem *gtcfr; | ||
29 | __be16 __iomem *gtmdr; | ||
30 | __be16 __iomem *gtpsr; | ||
31 | __be16 __iomem *gtcnr; | ||
32 | __be16 __iomem *gtrfr; | ||
33 | __be16 __iomem *gtevr; | ||
34 | }; | ||
35 | |||
36 | extern struct gtm_timer *gtm_get_timer16(void); | ||
37 | extern struct gtm_timer *gtm_get_specific_timer16(struct gtm *gtm, | ||
38 | unsigned int timer); | ||
39 | extern void gtm_put_timer16(struct gtm_timer *tmr); | ||
40 | extern int gtm_set_timer16(struct gtm_timer *tmr, unsigned long usec, | ||
41 | bool reload); | ||
42 | extern int gtm_set_exact_timer16(struct gtm_timer *tmr, u16 usec, | ||
43 | bool reload); | ||
44 | extern void gtm_stop_timer16(struct gtm_timer *tmr); | ||
45 | extern void gtm_ack_timer16(struct gtm_timer *tmr, u16 events); | ||
46 | |||
47 | #endif /* __ASM_FSL_GTM_H */ | ||
diff --git a/include/asm-powerpc/ftrace.h b/include/asm-powerpc/ftrace.h new file mode 100644 index 000000000000..de921326cca8 --- /dev/null +++ b/include/asm-powerpc/ftrace.h | |||
@@ -0,0 +1,14 @@ | |||
1 | #ifndef _ASM_POWERPC_FTRACE | ||
2 | #define _ASM_POWERPC_FTRACE | ||
3 | |||
4 | #ifdef CONFIG_FTRACE | ||
5 | #define MCOUNT_ADDR ((long)(_mcount)) | ||
6 | #define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */ | ||
7 | |||
8 | #ifndef __ASSEMBLY__ | ||
9 | extern void _mcount(void); | ||
10 | #endif | ||
11 | |||
12 | #endif | ||
13 | |||
14 | #endif /* _ASM_POWERPC_FTRACE */ | ||
diff --git a/include/asm-powerpc/hw_irq.h b/include/asm-powerpc/hw_irq.h index ad8c9f7fd0e3..f75a5fc64d2e 100644 --- a/include/asm-powerpc/hw_irq.h +++ b/include/asm-powerpc/hw_irq.h | |||
@@ -59,6 +59,11 @@ extern void iseries_handle_interrupts(void); | |||
59 | get_paca()->hard_enabled = 0; \ | 59 | get_paca()->hard_enabled = 0; \ |
60 | } while(0) | 60 | } while(0) |
61 | 61 | ||
62 | static inline int irqs_disabled_flags(unsigned long flags) | ||
63 | { | ||
64 | return flags == 0; | ||
65 | } | ||
66 | |||
62 | #else | 67 | #else |
63 | 68 | ||
64 | #if defined(CONFIG_BOOKE) | 69 | #if defined(CONFIG_BOOKE) |
@@ -113,6 +118,11 @@ static inline void local_irq_save_ptr(unsigned long *flags) | |||
113 | #define hard_irq_enable() local_irq_enable() | 118 | #define hard_irq_enable() local_irq_enable() |
114 | #define hard_irq_disable() local_irq_disable() | 119 | #define hard_irq_disable() local_irq_disable() |
115 | 120 | ||
121 | static inline int irqs_disabled_flags(unsigned long flags) | ||
122 | { | ||
123 | return (flags & MSR_EE) == 0; | ||
124 | } | ||
125 | |||
116 | #endif /* CONFIG_PPC64 */ | 126 | #endif /* CONFIG_PPC64 */ |
117 | 127 | ||
118 | /* | 128 | /* |
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index 89189488e286..8b627823f5f9 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
@@ -95,33 +95,60 @@ extern resource_size_t isa_mem_base; | |||
95 | #define IO_SET_SYNC_FLAG() | 95 | #define IO_SET_SYNC_FLAG() |
96 | #endif | 96 | #endif |
97 | 97 | ||
98 | #define DEF_MMIO_IN(name, type, insn) \ | 98 | /* gcc 4.0 and older doesn't have 'Z' constraint */ |
99 | static inline type name(const volatile type __iomem *addr) \ | 99 | #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ == 0) |
100 | #define DEF_MMIO_IN_LE(name, size, insn) \ | ||
101 | static inline u##size name(const volatile u##size __iomem *addr) \ | ||
100 | { \ | 102 | { \ |
101 | type ret; \ | 103 | u##size ret; \ |
102 | __asm__ __volatile__("sync;" insn ";twi 0,%0,0;isync" \ | 104 | __asm__ __volatile__("sync;"#insn" %0,0,%1;twi 0,%0,0;isync" \ |
103 | : "=r" (ret) : "r" (addr), "m" (*addr) : "memory"); \ | 105 | : "=r" (ret) : "r" (addr), "m" (*addr) : "memory"); \ |
104 | return ret; \ | 106 | return ret; \ |
105 | } | 107 | } |
106 | 108 | ||
107 | #define DEF_MMIO_OUT(name, type, insn) \ | 109 | #define DEF_MMIO_OUT_LE(name, size, insn) \ |
108 | static inline void name(volatile type __iomem *addr, type val) \ | 110 | static inline void name(volatile u##size __iomem *addr, u##size val) \ |
109 | { \ | 111 | { \ |
110 | __asm__ __volatile__("sync;" insn \ | 112 | __asm__ __volatile__("sync;"#insn" %1,0,%2" \ |
111 | : "=m" (*addr) : "r" (val), "r" (addr) : "memory"); \ | 113 | : "=m" (*addr) : "r" (val), "r" (addr) : "memory"); \ |
112 | IO_SET_SYNC_FLAG(); \ | 114 | IO_SET_SYNC_FLAG(); \ |
113 | } | 115 | } |
116 | #else /* newer gcc */ | ||
117 | #define DEF_MMIO_IN_LE(name, size, insn) \ | ||
118 | static inline u##size name(const volatile u##size __iomem *addr) \ | ||
119 | { \ | ||
120 | u##size ret; \ | ||
121 | __asm__ __volatile__("sync;"#insn" %0,%y1;twi 0,%0,0;isync" \ | ||
122 | : "=r" (ret) : "Z" (*addr) : "memory"); \ | ||
123 | return ret; \ | ||
124 | } | ||
125 | |||
126 | #define DEF_MMIO_OUT_LE(name, size, insn) \ | ||
127 | static inline void name(volatile u##size __iomem *addr, u##size val) \ | ||
128 | { \ | ||
129 | __asm__ __volatile__("sync;"#insn" %1,%y0" \ | ||
130 | : "=Z" (*addr) : "r" (val) : "memory"); \ | ||
131 | IO_SET_SYNC_FLAG(); \ | ||
132 | } | ||
133 | #endif | ||
114 | 134 | ||
135 | #define DEF_MMIO_IN_BE(name, size, insn) \ | ||
136 | static inline u##size name(const volatile u##size __iomem *addr) \ | ||
137 | { \ | ||
138 | u##size ret; \ | ||
139 | __asm__ __volatile__("sync;"#insn"%U1%X1 %0,%1;twi 0,%0,0;isync"\ | ||
140 | : "=r" (ret) : "m" (*addr) : "memory"); \ | ||
141 | return ret; \ | ||
142 | } | ||
115 | 143 | ||
116 | #define DEF_MMIO_IN_BE(name, size, insn) \ | 144 | #define DEF_MMIO_OUT_BE(name, size, insn) \ |
117 | DEF_MMIO_IN(name, u##size, __stringify(insn)"%U2%X2 %0,%2") | 145 | static inline void name(volatile u##size __iomem *addr, u##size val) \ |
118 | #define DEF_MMIO_IN_LE(name, size, insn) \ | 146 | { \ |
119 | DEF_MMIO_IN(name, u##size, __stringify(insn)" %0,0,%1") | 147 | __asm__ __volatile__("sync;"#insn"%U0%X0 %1,%0" \ |
148 | : "=m" (*addr) : "r" (val) : "memory"); \ | ||
149 | IO_SET_SYNC_FLAG(); \ | ||
150 | } | ||
120 | 151 | ||
121 | #define DEF_MMIO_OUT_BE(name, size, insn) \ | ||
122 | DEF_MMIO_OUT(name, u##size, __stringify(insn)"%U0%X0 %1,%0") | ||
123 | #define DEF_MMIO_OUT_LE(name, size, insn) \ | ||
124 | DEF_MMIO_OUT(name, u##size, __stringify(insn)" %1,0,%2") | ||
125 | 152 | ||
126 | DEF_MMIO_IN_BE(in_8, 8, lbz); | 153 | DEF_MMIO_IN_BE(in_8, 8, lbz); |
127 | DEF_MMIO_IN_BE(in_be16, 16, lhz); | 154 | DEF_MMIO_IN_BE(in_be16, 16, lhz); |
@@ -745,7 +772,7 @@ static inline void * bus_to_virt(unsigned long address) | |||
745 | #define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set) | 772 | #define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set) |
746 | 773 | ||
747 | #define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set) | 774 | #define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set) |
748 | #define clrsetbits_le16(addr, clear, set) clrsetbits(le32, addr, clear, set) | 775 | #define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set) |
749 | 776 | ||
750 | #define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set) | 777 | #define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set) |
751 | 778 | ||
diff --git a/include/asm-powerpc/ioctl.h b/include/asm-powerpc/ioctl.h index 8eb99848c402..57d68304218b 100644 --- a/include/asm-powerpc/ioctl.h +++ b/include/asm-powerpc/ioctl.h | |||
@@ -1,69 +1,13 @@ | |||
1 | #ifndef _ASM_POWERPC_IOCTL_H | 1 | #ifndef _ASM_POWERPC_IOCTL_H |
2 | #define _ASM_POWERPC_IOCTL_H | 2 | #define _ASM_POWERPC_IOCTL_H |
3 | 3 | ||
4 | |||
5 | /* | ||
6 | * this was copied from the alpha as it's a bit cleaner there. | ||
7 | * -- Cort | ||
8 | */ | ||
9 | |||
10 | #define _IOC_NRBITS 8 | ||
11 | #define _IOC_TYPEBITS 8 | ||
12 | #define _IOC_SIZEBITS 13 | 4 | #define _IOC_SIZEBITS 13 |
13 | #define _IOC_DIRBITS 3 | 5 | #define _IOC_DIRBITS 3 |
14 | 6 | ||
15 | #define _IOC_NRMASK ((1 << _IOC_NRBITS)-1) | ||
16 | #define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1) | ||
17 | #define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1) | ||
18 | #define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1) | ||
19 | |||
20 | #define _IOC_NRSHIFT 0 | ||
21 | #define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS) | ||
22 | #define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS) | ||
23 | #define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS) | ||
24 | |||
25 | /* | ||
26 | * Direction bits _IOC_NONE could be 0, but OSF/1 gives it a bit. | ||
27 | * And this turns out useful to catch old ioctl numbers in header | ||
28 | * files for us. | ||
29 | */ | ||
30 | #define _IOC_NONE 1U | 7 | #define _IOC_NONE 1U |
31 | #define _IOC_READ 2U | 8 | #define _IOC_READ 2U |
32 | #define _IOC_WRITE 4U | 9 | #define _IOC_WRITE 4U |
33 | 10 | ||
34 | #define _IOC(dir,type,nr,size) \ | 11 | #include <asm-generic/ioctl.h> |
35 | (((dir) << _IOC_DIRSHIFT) | \ | ||
36 | ((type) << _IOC_TYPESHIFT) | \ | ||
37 | ((nr) << _IOC_NRSHIFT) | \ | ||
38 | ((size) << _IOC_SIZESHIFT)) | ||
39 | |||
40 | /* provoke compile error for invalid uses of size argument */ | ||
41 | extern unsigned int __invalid_size_argument_for_IOC; | ||
42 | #define _IOC_TYPECHECK(t) \ | ||
43 | ((sizeof(t) == sizeof(t[1]) && \ | ||
44 | sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ | ||
45 | sizeof(t) : __invalid_size_argument_for_IOC) | ||
46 | |||
47 | /* used to create numbers */ | ||
48 | #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) | ||
49 | #define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size))) | ||
50 | #define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) | ||
51 | #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) | ||
52 | #define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) | ||
53 | #define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) | ||
54 | #define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) | ||
55 | |||
56 | /* used to decode them.. */ | ||
57 | #define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) | ||
58 | #define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK) | ||
59 | #define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK) | ||
60 | #define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK) | ||
61 | |||
62 | /* various drivers, such as the pcmcia stuff, need these... */ | ||
63 | #define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT) | ||
64 | #define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT) | ||
65 | #define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT) | ||
66 | #define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT) | ||
67 | #define IOCSIZE_SHIFT (_IOC_SIZESHIFT) | ||
68 | 12 | ||
69 | #endif /* _ASM_POWERPC_IOCTL_H */ | 13 | #endif /* _ASM_POWERPC_IOCTL_H */ |
diff --git a/include/asm-powerpc/iommu.h b/include/asm-powerpc/iommu.h index 852e15f51a1e..51ecfef8d843 100644 --- a/include/asm-powerpc/iommu.h +++ b/include/asm-powerpc/iommu.h | |||
@@ -79,11 +79,13 @@ extern void iommu_free_table(struct iommu_table *tbl, const char *node_name); | |||
79 | extern struct iommu_table *iommu_init_table(struct iommu_table * tbl, | 79 | extern struct iommu_table *iommu_init_table(struct iommu_table * tbl, |
80 | int nid); | 80 | int nid); |
81 | 81 | ||
82 | extern int iommu_map_sg(struct device *dev, struct scatterlist *sglist, | 82 | extern int iommu_map_sg(struct device *dev, struct iommu_table *tbl, |
83 | int nelems, unsigned long mask, | 83 | struct scatterlist *sglist, int nelems, |
84 | enum dma_data_direction direction); | 84 | unsigned long mask, enum dma_data_direction direction, |
85 | struct dma_attrs *attrs); | ||
85 | extern void iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist, | 86 | extern void iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist, |
86 | int nelems, enum dma_data_direction direction); | 87 | int nelems, enum dma_data_direction direction, |
88 | struct dma_attrs *attrs); | ||
87 | 89 | ||
88 | extern void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl, | 90 | extern void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl, |
89 | size_t size, dma_addr_t *dma_handle, | 91 | size_t size, dma_addr_t *dma_handle, |
@@ -92,9 +94,11 @@ extern void iommu_free_coherent(struct iommu_table *tbl, size_t size, | |||
92 | void *vaddr, dma_addr_t dma_handle); | 94 | void *vaddr, dma_addr_t dma_handle); |
93 | extern dma_addr_t iommu_map_single(struct device *dev, struct iommu_table *tbl, | 95 | extern dma_addr_t iommu_map_single(struct device *dev, struct iommu_table *tbl, |
94 | void *vaddr, size_t size, unsigned long mask, | 96 | void *vaddr, size_t size, unsigned long mask, |
95 | enum dma_data_direction direction); | 97 | enum dma_data_direction direction, |
98 | struct dma_attrs *attrs); | ||
96 | extern void iommu_unmap_single(struct iommu_table *tbl, dma_addr_t dma_handle, | 99 | extern void iommu_unmap_single(struct iommu_table *tbl, dma_addr_t dma_handle, |
97 | size_t size, enum dma_data_direction direction); | 100 | size_t size, enum dma_data_direction direction, |
101 | struct dma_attrs *attrs); | ||
98 | 102 | ||
99 | extern void iommu_init_early_pSeries(void); | 103 | extern void iommu_init_early_pSeries(void); |
100 | extern void iommu_init_early_iSeries(void); | 104 | extern void iommu_init_early_iSeries(void); |
diff --git a/include/asm-powerpc/irq.h b/include/asm-powerpc/irq.h index 5089deb8fec3..1ef8e304e0ea 100644 --- a/include/asm-powerpc/irq.h +++ b/include/asm-powerpc/irq.h | |||
@@ -619,6 +619,19 @@ struct pt_regs; | |||
619 | 619 | ||
620 | #define __ARCH_HAS_DO_SOFTIRQ | 620 | #define __ARCH_HAS_DO_SOFTIRQ |
621 | 621 | ||
622 | #if defined(CONFIG_BOOKE) || defined(CONFIG_40x) | ||
623 | /* | ||
624 | * Per-cpu stacks for handling critical, debug and machine check | ||
625 | * level interrupts. | ||
626 | */ | ||
627 | extern struct thread_info *critirq_ctx[NR_CPUS]; | ||
628 | extern struct thread_info *dbgirq_ctx[NR_CPUS]; | ||
629 | extern struct thread_info *mcheckirq_ctx[NR_CPUS]; | ||
630 | extern void exc_lvl_ctx_init(void); | ||
631 | #else | ||
632 | #define exc_lvl_ctx_init() | ||
633 | #endif | ||
634 | |||
622 | #ifdef CONFIG_IRQSTACKS | 635 | #ifdef CONFIG_IRQSTACKS |
623 | /* | 636 | /* |
624 | * Per-cpu stacks for handling hard and soft interrupts. | 637 | * Per-cpu stacks for handling hard and soft interrupts. |
diff --git a/include/asm-powerpc/kexec.h b/include/asm-powerpc/kexec.h index 701857bc8e24..acdcdc66f1b6 100644 --- a/include/asm-powerpc/kexec.h +++ b/include/asm-powerpc/kexec.h | |||
@@ -34,6 +34,8 @@ | |||
34 | #ifndef __ASSEMBLY__ | 34 | #ifndef __ASSEMBLY__ |
35 | #include <linux/cpumask.h> | 35 | #include <linux/cpumask.h> |
36 | 36 | ||
37 | typedef void (*crash_shutdown_t)(void); | ||
38 | |||
37 | #ifdef CONFIG_KEXEC | 39 | #ifdef CONFIG_KEXEC |
38 | 40 | ||
39 | #ifdef __powerpc64__ | 41 | #ifdef __powerpc64__ |
@@ -123,7 +125,6 @@ struct pt_regs; | |||
123 | extern void default_machine_kexec(struct kimage *image); | 125 | extern void default_machine_kexec(struct kimage *image); |
124 | extern int default_machine_kexec_prepare(struct kimage *image); | 126 | extern int default_machine_kexec_prepare(struct kimage *image); |
125 | extern void default_machine_crash_shutdown(struct pt_regs *regs); | 127 | extern void default_machine_crash_shutdown(struct pt_regs *regs); |
126 | typedef void (*crash_shutdown_t)(void); | ||
127 | extern int crash_shutdown_register(crash_shutdown_t handler); | 128 | extern int crash_shutdown_register(crash_shutdown_t handler); |
128 | extern int crash_shutdown_unregister(crash_shutdown_t handler); | 129 | extern int crash_shutdown_unregister(crash_shutdown_t handler); |
129 | 130 | ||
@@ -143,6 +144,16 @@ static inline int overlaps_crashkernel(unsigned long start, unsigned long size) | |||
143 | 144 | ||
144 | static inline void reserve_crashkernel(void) { ; } | 145 | static inline void reserve_crashkernel(void) { ; } |
145 | 146 | ||
147 | static inline int crash_shutdown_register(crash_shutdown_t handler) | ||
148 | { | ||
149 | return 0; | ||
150 | } | ||
151 | |||
152 | static inline int crash_shutdown_unregister(crash_shutdown_t handler) | ||
153 | { | ||
154 | return 0; | ||
155 | } | ||
156 | |||
146 | #endif /* CONFIG_KEXEC */ | 157 | #endif /* CONFIG_KEXEC */ |
147 | #endif /* ! __ASSEMBLY__ */ | 158 | #endif /* ! __ASSEMBLY__ */ |
148 | #endif /* __KERNEL__ */ | 159 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h index 54ed64df95b8..989922621e35 100644 --- a/include/asm-powerpc/machdep.h +++ b/include/asm-powerpc/machdep.h | |||
@@ -262,6 +262,7 @@ struct machdep_calls { | |||
262 | #endif | 262 | #endif |
263 | }; | 263 | }; |
264 | 264 | ||
265 | extern void e500_idle(void); | ||
265 | extern void power4_idle(void); | 266 | extern void power4_idle(void); |
266 | extern void power4_cpu_offline_powersave(void); | 267 | extern void power4_cpu_offline_powersave(void); |
267 | extern void ppc6xx_idle(void); | 268 | extern void ppc6xx_idle(void); |
diff --git a/include/asm-powerpc/mman.h b/include/asm-powerpc/mman.h index 24cf664a8295..9209f755763e 100644 --- a/include/asm-powerpc/mman.h +++ b/include/asm-powerpc/mman.h | |||
@@ -10,6 +10,8 @@ | |||
10 | * 2 of the License, or (at your option) any later version. | 10 | * 2 of the License, or (at your option) any later version. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #define PROT_SAO 0x10 /* Strong Access Ordering */ | ||
14 | |||
13 | #define MAP_RENAME MAP_ANONYMOUS /* In SunOS terminology */ | 15 | #define MAP_RENAME MAP_ANONYMOUS /* In SunOS terminology */ |
14 | #define MAP_NORESERVE 0x40 /* don't reserve swap pages */ | 16 | #define MAP_NORESERVE 0x40 /* don't reserve swap pages */ |
15 | #define MAP_LOCKED 0x80 | 17 | #define MAP_LOCKED 0x80 |
@@ -24,4 +26,38 @@ | |||
24 | #define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ | 26 | #define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ |
25 | #define MAP_NONBLOCK 0x10000 /* do not block on IO */ | 27 | #define MAP_NONBLOCK 0x10000 /* do not block on IO */ |
26 | 28 | ||
29 | #ifdef __KERNEL__ | ||
30 | #ifdef CONFIG_PPC64 | ||
31 | |||
32 | #include <asm/cputable.h> | ||
33 | #include <linux/mm.h> | ||
34 | |||
35 | /* | ||
36 | * This file is included by linux/mman.h, so we can't use cacl_vm_prot_bits() | ||
37 | * here. How important is the optimization? | ||
38 | */ | ||
39 | static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot) | ||
40 | { | ||
41 | return (prot & PROT_SAO) ? VM_SAO : 0; | ||
42 | } | ||
43 | #define arch_calc_vm_prot_bits(prot) arch_calc_vm_prot_bits(prot) | ||
44 | |||
45 | static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags) | ||
46 | { | ||
47 | return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : 0; | ||
48 | } | ||
49 | #define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags) | ||
50 | |||
51 | static inline int arch_validate_prot(unsigned long prot) | ||
52 | { | ||
53 | if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM | PROT_SAO)) | ||
54 | return 0; | ||
55 | if ((prot & PROT_SAO) && !cpu_has_feature(CPU_FTR_SAO)) | ||
56 | return 0; | ||
57 | return 1; | ||
58 | } | ||
59 | #define arch_validate_prot(prot) arch_validate_prot(prot) | ||
60 | |||
61 | #endif /* CONFIG_PPC64 */ | ||
62 | #endif /* __KERNEL__ */ | ||
27 | #endif /* _ASM_POWERPC_MMAN_H */ | 63 | #endif /* _ASM_POWERPC_MMAN_H */ |
diff --git a/include/asm-powerpc/mmu-hash32.h b/include/asm-powerpc/mmu-hash32.h index 6e21ca618ec3..16b1a1e77e64 100644 --- a/include/asm-powerpc/mmu-hash32.h +++ b/include/asm-powerpc/mmu-hash32.h | |||
@@ -28,24 +28,18 @@ | |||
28 | #define BPP_RW 0x02 /* Read/write */ | 28 | #define BPP_RW 0x02 /* Read/write */ |
29 | 29 | ||
30 | #ifndef __ASSEMBLY__ | 30 | #ifndef __ASSEMBLY__ |
31 | /* Contort a phys_addr_t into the right format/bits for a BAT */ | ||
32 | #ifdef CONFIG_PHYS_64BIT | ||
33 | #define BAT_PHYS_ADDR(x) ((u32)((x & 0x00000000fffe0000ULL) | \ | ||
34 | ((x & 0x0000000e00000000ULL) >> 24) | \ | ||
35 | ((x & 0x0000000100000000ULL) >> 30))) | ||
36 | #else | ||
37 | #define BAT_PHYS_ADDR(x) (x) | ||
38 | #endif | ||
39 | |||
31 | struct ppc_bat { | 40 | struct ppc_bat { |
32 | struct { | 41 | u32 batu; |
33 | unsigned long bepi:15; /* Effective page index (virtual address) */ | 42 | u32 batl; |
34 | unsigned long :4; /* Unused */ | ||
35 | unsigned long bl:11; /* Block size mask */ | ||
36 | unsigned long vs:1; /* Supervisor valid */ | ||
37 | unsigned long vp:1; /* User valid */ | ||
38 | } batu; /* Upper register */ | ||
39 | struct { | ||
40 | unsigned long brpn:15; /* Real page index (physical address) */ | ||
41 | unsigned long :10; /* Unused */ | ||
42 | unsigned long w:1; /* Write-thru cache */ | ||
43 | unsigned long i:1; /* Cache inhibit */ | ||
44 | unsigned long m:1; /* Memory coherence */ | ||
45 | unsigned long g:1; /* Guarded (MBZ in IBAT) */ | ||
46 | unsigned long :1; /* Unused */ | ||
47 | unsigned long pp:2; /* Page access protections */ | ||
48 | } batl; /* Lower register */ | ||
49 | }; | 43 | }; |
50 | #endif /* !__ASSEMBLY__ */ | 44 | #endif /* !__ASSEMBLY__ */ |
51 | 45 | ||
diff --git a/include/asm-powerpc/mmu-hash64.h b/include/asm-powerpc/mmu-hash64.h index 39c5c5f62bf5..d1dc16afb118 100644 --- a/include/asm-powerpc/mmu-hash64.h +++ b/include/asm-powerpc/mmu-hash64.h | |||
@@ -182,6 +182,7 @@ extern int mmu_io_psize; | |||
182 | extern int mmu_kernel_ssize; | 182 | extern int mmu_kernel_ssize; |
183 | extern int mmu_highuser_ssize; | 183 | extern int mmu_highuser_ssize; |
184 | extern u16 mmu_slb_size; | 184 | extern u16 mmu_slb_size; |
185 | extern unsigned long tce_alloc_start, tce_alloc_end; | ||
185 | 186 | ||
186 | /* | 187 | /* |
187 | * If the processor supports 64k normal pages but not 64k cache | 188 | * If the processor supports 64k normal pages but not 64k cache |
diff --git a/include/asm-powerpc/mpc6xx.h b/include/asm-powerpc/mpc6xx.h new file mode 100644 index 000000000000..effc2291beb2 --- /dev/null +++ b/include/asm-powerpc/mpc6xx.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_POWERPC_MPC6xx_H | ||
2 | #define __ASM_POWERPC_MPC6xx_H | ||
3 | |||
4 | void mpc6xx_enter_standby(void); | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-powerpc/mpic.h b/include/asm-powerpc/mpic.h index a4d0f876b427..fe566a348a86 100644 --- a/include/asm-powerpc/mpic.h +++ b/include/asm-powerpc/mpic.h | |||
@@ -353,6 +353,8 @@ struct mpic | |||
353 | #define MPIC_ENABLE_MCK 0x00000200 | 353 | #define MPIC_ENABLE_MCK 0x00000200 |
354 | /* Disable bias among target selection, spread interrupts evenly */ | 354 | /* Disable bias among target selection, spread interrupts evenly */ |
355 | #define MPIC_NO_BIAS 0x00000400 | 355 | #define MPIC_NO_BIAS 0x00000400 |
356 | /* Ignore NIRQS as reported by FRR */ | ||
357 | #define MPIC_BROKEN_FRR_NIRQS 0x00000800 | ||
356 | 358 | ||
357 | /* MPIC HW modification ID */ | 359 | /* MPIC HW modification ID */ |
358 | #define MPIC_REGSET_MASK 0xf0000000 | 360 | #define MPIC_REGSET_MASK 0xf0000000 |
diff --git a/include/asm-powerpc/of_device.h b/include/asm-powerpc/of_device.h index 6526e139a463..3c123990ca2e 100644 --- a/include/asm-powerpc/of_device.h +++ b/include/asm-powerpc/of_device.h | |||
@@ -21,8 +21,6 @@ extern struct of_device *of_device_alloc(struct device_node *np, | |||
21 | const char *bus_id, | 21 | const char *bus_id, |
22 | struct device *parent); | 22 | struct device *parent); |
23 | 23 | ||
24 | extern ssize_t of_device_get_modalias(struct of_device *ofdev, | ||
25 | char *str, ssize_t len); | ||
26 | extern int of_device_uevent(struct device *dev, | 24 | extern int of_device_uevent(struct device *dev, |
27 | struct kobj_uevent_env *env); | 25 | struct kobj_uevent_env *env); |
28 | 26 | ||
diff --git a/include/asm-powerpc/pSeries_reconfig.h b/include/asm-powerpc/pSeries_reconfig.h index ea6cfb8efb84..e482e5352e69 100644 --- a/include/asm-powerpc/pSeries_reconfig.h +++ b/include/asm-powerpc/pSeries_reconfig.h | |||
@@ -9,8 +9,10 @@ | |||
9 | * added or removed on pSeries systems. | 9 | * added or removed on pSeries systems. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #define PSERIES_RECONFIG_ADD 0x0001 | 12 | #define PSERIES_RECONFIG_ADD 0x0001 |
13 | #define PSERIES_RECONFIG_REMOVE 0x0002 | 13 | #define PSERIES_RECONFIG_REMOVE 0x0002 |
14 | #define PSERIES_DRCONF_MEM_ADD 0x0003 | ||
15 | #define PSERIES_DRCONF_MEM_REMOVE 0x0004 | ||
14 | 16 | ||
15 | #ifdef CONFIG_PPC_PSERIES | 17 | #ifdef CONFIG_PPC_PSERIES |
16 | extern int pSeries_reconfig_notifier_register(struct notifier_block *); | 18 | extern int pSeries_reconfig_notifier_register(struct notifier_block *); |
diff --git a/include/asm-powerpc/page_64.h b/include/asm-powerpc/page_64.h index 25af4fc8daf4..02fd80710e9d 100644 --- a/include/asm-powerpc/page_64.h +++ b/include/asm-powerpc/page_64.h | |||
@@ -126,16 +126,22 @@ extern unsigned int get_slice_psize(struct mm_struct *mm, | |||
126 | 126 | ||
127 | extern void slice_init_context(struct mm_struct *mm, unsigned int psize); | 127 | 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 | extern void slice_set_range_psize(struct mm_struct *mm, unsigned long start, | ||
130 | unsigned long len, unsigned int psize); | ||
131 | |||
129 | #define slice_mm_new_context(mm) ((mm)->context.id == 0) | 132 | #define slice_mm_new_context(mm) ((mm)->context.id == 0) |
130 | 133 | ||
131 | #endif /* __ASSEMBLY__ */ | 134 | #endif /* __ASSEMBLY__ */ |
132 | #else | 135 | #else |
133 | #define slice_init() | 136 | #define slice_init() |
137 | #define get_slice_psize(mm, addr) ((mm)->context.user_psize) | ||
134 | #define slice_set_user_psize(mm, psize) \ | 138 | #define slice_set_user_psize(mm, psize) \ |
135 | do { \ | 139 | do { \ |
136 | (mm)->context.user_psize = (psize); \ | 140 | (mm)->context.user_psize = (psize); \ |
137 | (mm)->context.sllp = SLB_VSID_USER | mmu_psize_defs[(psize)].sllp; \ | 141 | (mm)->context.sllp = SLB_VSID_USER | mmu_psize_defs[(psize)].sllp; \ |
138 | } while (0) | 142 | } while (0) |
143 | #define slice_set_range_psize(mm, start, len, psize) \ | ||
144 | slice_set_user_psize((mm), (psize)) | ||
139 | #define slice_mm_new_context(mm) 1 | 145 | #define slice_mm_new_context(mm) 1 |
140 | #endif /* CONFIG_PPC_MM_SLICES */ | 146 | #endif /* CONFIG_PPC_MM_SLICES */ |
141 | 147 | ||
diff --git a/include/asm-powerpc/pci-bridge.h b/include/asm-powerpc/pci-bridge.h index b95d033ae6e6..ae2ea803a0f2 100644 --- a/include/asm-powerpc/pci-bridge.h +++ b/include/asm-powerpc/pci-bridge.h | |||
@@ -92,12 +92,15 @@ struct pci_controller { | |||
92 | * anything but the PHB. Only allow talking to the PHB if this is | 92 | * anything but the PHB. Only allow talking to the PHB if this is |
93 | * set. | 93 | * set. |
94 | * BIG_ENDIAN - cfg_addr is a big endian register | 94 | * BIG_ENDIAN - cfg_addr is a big endian register |
95 | * BROKEN_MRM - the 440EPx/GRx chips have an errata that causes hangs on | ||
96 | * the PLB4. Effectively disable MRM commands by setting this. | ||
95 | */ | 97 | */ |
96 | #define PPC_INDIRECT_TYPE_SET_CFG_TYPE 0x00000001 | 98 | #define PPC_INDIRECT_TYPE_SET_CFG_TYPE 0x00000001 |
97 | #define PPC_INDIRECT_TYPE_EXT_REG 0x00000002 | 99 | #define PPC_INDIRECT_TYPE_EXT_REG 0x00000002 |
98 | #define PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS 0x00000004 | 100 | #define PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS 0x00000004 |
99 | #define PPC_INDIRECT_TYPE_NO_PCIE_LINK 0x00000008 | 101 | #define PPC_INDIRECT_TYPE_NO_PCIE_LINK 0x00000008 |
100 | #define PPC_INDIRECT_TYPE_BIG_ENDIAN 0x00000010 | 102 | #define PPC_INDIRECT_TYPE_BIG_ENDIAN 0x00000010 |
103 | #define PPC_INDIRECT_TYPE_BROKEN_MRM 0x00000020 | ||
101 | u32 indirect_type; | 104 | u32 indirect_type; |
102 | #endif /* !CONFIG_PPC64 */ | 105 | #endif /* !CONFIG_PPC64 */ |
103 | /* Currently, we limit ourselves to 1 IO range and 3 mem | 106 | /* Currently, we limit ourselves to 1 IO range and 3 mem |
diff --git a/include/asm-powerpc/pgtable-4k.h b/include/asm-powerpc/pgtable-4k.h index 818e2abc81e2..fd2090dc1dce 100644 --- a/include/asm-powerpc/pgtable-4k.h +++ b/include/asm-powerpc/pgtable-4k.h | |||
@@ -41,6 +41,7 @@ | |||
41 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) | 41 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) |
42 | 42 | ||
43 | /* PTE bits */ | 43 | /* PTE bits */ |
44 | #define _PAGE_HASHPTE 0x0400 /* software: pte has an associated HPTE */ | ||
44 | #define _PAGE_SECONDARY 0x8000 /* software: HPTE is in secondary group */ | 45 | #define _PAGE_SECONDARY 0x8000 /* software: HPTE is in secondary group */ |
45 | #define _PAGE_GROUP_IX 0x7000 /* software: HPTE index within group */ | 46 | #define _PAGE_GROUP_IX 0x7000 /* software: HPTE index within group */ |
46 | #define _PAGE_F_SECOND _PAGE_SECONDARY | 47 | #define _PAGE_F_SECOND _PAGE_SECONDARY |
diff --git a/include/asm-powerpc/pgtable-64k.h b/include/asm-powerpc/pgtable-64k.h index 1cbd6b377eea..c5007712473f 100644 --- a/include/asm-powerpc/pgtable-64k.h +++ b/include/asm-powerpc/pgtable-64k.h | |||
@@ -75,6 +75,20 @@ static inline struct subpage_prot_table *pgd_subpage_prot(pgd_t *pgd) | |||
75 | #define _PAGE_COMBO 0x10000000 /* this is a combo 4k page */ | 75 | #define _PAGE_COMBO 0x10000000 /* this is a combo 4k page */ |
76 | #define _PAGE_4K_PFN 0x20000000 /* PFN is for a single 4k page */ | 76 | #define _PAGE_4K_PFN 0x20000000 /* PFN is for a single 4k page */ |
77 | 77 | ||
78 | /* For 64K page, we don't have a separate _PAGE_HASHPTE bit. Instead, | ||
79 | * we set that to be the whole sub-bits mask. The C code will only | ||
80 | * test this, so a multi-bit mask will work. For combo pages, this | ||
81 | * is equivalent as effectively, the old _PAGE_HASHPTE was an OR of | ||
82 | * all the sub bits. For real 64k pages, we now have the assembly set | ||
83 | * _PAGE_HPTE_SUB0 in addition to setting the HIDX bits which overlap | ||
84 | * that mask. This is fine as long as the HIDX bits are never set on | ||
85 | * a PTE that isn't hashed, which is the case today. | ||
86 | * | ||
87 | * A little nit is for the huge page C code, which does the hashing | ||
88 | * in C, we need to provide which bit to use. | ||
89 | */ | ||
90 | #define _PAGE_HASHPTE _PAGE_HPTE_SUB | ||
91 | |||
78 | /* Note the full page bits must be in the same location as for normal | 92 | /* Note the full page bits must be in the same location as for normal |
79 | * 4k pages as the same asssembly will be used to insert 64K pages | 93 | * 4k pages as the same asssembly will be used to insert 64K pages |
80 | * wether the kernel has CONFIG_PPC_64K_PAGES or not | 94 | * wether the kernel has CONFIG_PPC_64K_PAGES or not |
@@ -83,8 +97,7 @@ static inline struct subpage_prot_table *pgd_subpage_prot(pgd_t *pgd) | |||
83 | #define _PAGE_F_GIX 0x00007000 /* full page: hidx bits */ | 97 | #define _PAGE_F_GIX 0x00007000 /* full page: hidx bits */ |
84 | 98 | ||
85 | /* PTE flags to conserve for HPTE identification */ | 99 | /* PTE flags to conserve for HPTE identification */ |
86 | #define _PAGE_HPTEFLAGS (_PAGE_BUSY | _PAGE_HASHPTE | _PAGE_HPTE_SUB |\ | 100 | #define _PAGE_HPTEFLAGS (_PAGE_BUSY | _PAGE_HASHPTE | _PAGE_COMBO) |
87 | _PAGE_COMBO) | ||
88 | 101 | ||
89 | /* Shift to put page number into pte. | 102 | /* Shift to put page number into pte. |
90 | * | 103 | * |
diff --git a/include/asm-powerpc/pgtable-ppc32.h b/include/asm-powerpc/pgtable-ppc32.h index c08e714d0c42..73015f0139de 100644 --- a/include/asm-powerpc/pgtable-ppc32.h +++ b/include/asm-powerpc/pgtable-ppc32.h | |||
@@ -182,6 +182,9 @@ extern int icache_44x_need_flush; | |||
182 | #define _PMD_SIZE_16M 0x0e0 | 182 | #define _PMD_SIZE_16M 0x0e0 |
183 | #define PMD_PAGE_SIZE(pmdval) (1024 << (((pmdval) & _PMD_SIZE) >> 4)) | 183 | #define PMD_PAGE_SIZE(pmdval) (1024 << (((pmdval) & _PMD_SIZE) >> 4)) |
184 | 184 | ||
185 | /* Until my rework is finished, 40x still needs atomic PTE updates */ | ||
186 | #define PTE_ATOMIC_UPDATES 1 | ||
187 | |||
185 | #elif defined(CONFIG_44x) | 188 | #elif defined(CONFIG_44x) |
186 | /* | 189 | /* |
187 | * Definitions for PPC440 | 190 | * Definitions for PPC440 |
@@ -253,17 +256,17 @@ extern int icache_44x_need_flush; | |||
253 | */ | 256 | */ |
254 | 257 | ||
255 | #define _PAGE_PRESENT 0x00000001 /* S: PTE valid */ | 258 | #define _PAGE_PRESENT 0x00000001 /* S: PTE valid */ |
256 | #define _PAGE_RW 0x00000002 /* S: Write permission */ | 259 | #define _PAGE_RW 0x00000002 /* S: Write permission */ |
257 | #define _PAGE_FILE 0x00000004 /* S: nonlinear file mapping */ | 260 | #define _PAGE_FILE 0x00000004 /* S: nonlinear file mapping */ |
261 | #define _PAGE_HWEXEC 0x00000004 /* H: Execute permission */ | ||
258 | #define _PAGE_ACCESSED 0x00000008 /* S: Page referenced */ | 262 | #define _PAGE_ACCESSED 0x00000008 /* S: Page referenced */ |
259 | #define _PAGE_HWWRITE 0x00000010 /* H: Dirty & RW */ | 263 | #define _PAGE_DIRTY 0x00000010 /* S: Page dirty */ |
260 | #define _PAGE_HWEXEC 0x00000020 /* H: Execute permission */ | 264 | #define _PAGE_USER 0x00000040 /* S: User page */ |
261 | #define _PAGE_USER 0x00000040 /* S: User page */ | 265 | #define _PAGE_ENDIAN 0x00000080 /* H: E bit */ |
262 | #define _PAGE_ENDIAN 0x00000080 /* H: E bit */ | 266 | #define _PAGE_GUARDED 0x00000100 /* H: G bit */ |
263 | #define _PAGE_GUARDED 0x00000100 /* H: G bit */ | 267 | #define _PAGE_COHERENT 0x00000200 /* H: M bit */ |
264 | #define _PAGE_DIRTY 0x00000200 /* S: Page dirty */ | 268 | #define _PAGE_NO_CACHE 0x00000400 /* H: I bit */ |
265 | #define _PAGE_NO_CACHE 0x00000400 /* H: I bit */ | 269 | #define _PAGE_WRITETHRU 0x00000800 /* H: W bit */ |
266 | #define _PAGE_WRITETHRU 0x00000800 /* H: W bit */ | ||
267 | 270 | ||
268 | /* TODO: Add large page lowmem mapping support */ | 271 | /* TODO: Add large page lowmem mapping support */ |
269 | #define _PMD_PRESENT 0 | 272 | #define _PMD_PRESENT 0 |
@@ -273,6 +276,7 @@ extern int icache_44x_need_flush; | |||
273 | /* ERPN in a PTE never gets cleared, ignore it */ | 276 | /* ERPN in a PTE never gets cleared, ignore it */ |
274 | #define _PTE_NONE_MASK 0xffffffff00000000ULL | 277 | #define _PTE_NONE_MASK 0xffffffff00000000ULL |
275 | 278 | ||
279 | |||
276 | #elif defined(CONFIG_FSL_BOOKE) | 280 | #elif defined(CONFIG_FSL_BOOKE) |
277 | /* | 281 | /* |
278 | MMU Assist Register 3: | 282 | MMU Assist Register 3: |
@@ -315,6 +319,9 @@ extern int icache_44x_need_flush; | |||
315 | #define _PMD_PRESENT_MASK (PAGE_MASK) | 319 | #define _PMD_PRESENT_MASK (PAGE_MASK) |
316 | #define _PMD_BAD (~PAGE_MASK) | 320 | #define _PMD_BAD (~PAGE_MASK) |
317 | 321 | ||
322 | /* Until my rework is finished, FSL BookE still needs atomic PTE updates */ | ||
323 | #define PTE_ATOMIC_UPDATES 1 | ||
324 | |||
318 | #elif defined(CONFIG_8xx) | 325 | #elif defined(CONFIG_8xx) |
319 | /* Definitions for 8xx embedded chips. */ | 326 | /* Definitions for 8xx embedded chips. */ |
320 | #define _PAGE_PRESENT 0x0001 /* Page is valid */ | 327 | #define _PAGE_PRESENT 0x0001 /* Page is valid */ |
@@ -345,6 +352,9 @@ extern int icache_44x_need_flush; | |||
345 | 352 | ||
346 | #define _PTE_NONE_MASK _PAGE_ACCESSED | 353 | #define _PTE_NONE_MASK _PAGE_ACCESSED |
347 | 354 | ||
355 | /* Until my rework is finished, 8xx still needs atomic PTE updates */ | ||
356 | #define PTE_ATOMIC_UPDATES 1 | ||
357 | |||
348 | #else /* CONFIG_6xx */ | 358 | #else /* CONFIG_6xx */ |
349 | /* Definitions for 60x, 740/750, etc. */ | 359 | /* Definitions for 60x, 740/750, etc. */ |
350 | #define _PAGE_PRESENT 0x001 /* software: pte contains a translation */ | 360 | #define _PAGE_PRESENT 0x001 /* software: pte contains a translation */ |
@@ -365,6 +375,10 @@ extern int icache_44x_need_flush; | |||
365 | #define _PMD_PRESENT 0 | 375 | #define _PMD_PRESENT 0 |
366 | #define _PMD_PRESENT_MASK (PAGE_MASK) | 376 | #define _PMD_PRESENT_MASK (PAGE_MASK) |
367 | #define _PMD_BAD (~PAGE_MASK) | 377 | #define _PMD_BAD (~PAGE_MASK) |
378 | |||
379 | /* Hash table based platforms need atomic updates of the linux PTE */ | ||
380 | #define PTE_ATOMIC_UPDATES 1 | ||
381 | |||
368 | #endif | 382 | #endif |
369 | 383 | ||
370 | /* | 384 | /* |
@@ -557,9 +571,11 @@ extern void add_hash_page(unsigned context, unsigned long va, | |||
557 | * low PTE word since we expect ALL flag bits to be there | 571 | * low PTE word since we expect ALL flag bits to be there |
558 | */ | 572 | */ |
559 | #ifndef CONFIG_PTE_64BIT | 573 | #ifndef CONFIG_PTE_64BIT |
560 | static inline unsigned long pte_update(pte_t *p, unsigned long clr, | 574 | static inline unsigned long pte_update(pte_t *p, |
575 | unsigned long clr, | ||
561 | unsigned long set) | 576 | unsigned long set) |
562 | { | 577 | { |
578 | #ifdef PTE_ATOMIC_UPDATES | ||
563 | unsigned long old, tmp; | 579 | unsigned long old, tmp; |
564 | 580 | ||
565 | __asm__ __volatile__("\ | 581 | __asm__ __volatile__("\ |
@@ -572,16 +588,26 @@ static inline unsigned long pte_update(pte_t *p, unsigned long clr, | |||
572 | : "=&r" (old), "=&r" (tmp), "=m" (*p) | 588 | : "=&r" (old), "=&r" (tmp), "=m" (*p) |
573 | : "r" (p), "r" (clr), "r" (set), "m" (*p) | 589 | : "r" (p), "r" (clr), "r" (set), "m" (*p) |
574 | : "cc" ); | 590 | : "cc" ); |
591 | #else /* PTE_ATOMIC_UPDATES */ | ||
592 | unsigned long old = pte_val(*p); | ||
593 | *p = __pte((old & ~clr) | set); | ||
594 | #endif /* !PTE_ATOMIC_UPDATES */ | ||
595 | |||
575 | #ifdef CONFIG_44x | 596 | #ifdef CONFIG_44x |
576 | if ((old & _PAGE_USER) && (old & _PAGE_HWEXEC)) | 597 | if ((old & _PAGE_USER) && (old & _PAGE_HWEXEC)) |
577 | icache_44x_need_flush = 1; | 598 | icache_44x_need_flush = 1; |
578 | #endif | 599 | #endif |
579 | return old; | 600 | return old; |
580 | } | 601 | } |
581 | #else | 602 | #else /* CONFIG_PTE_64BIT */ |
582 | static inline unsigned long long pte_update(pte_t *p, unsigned long clr, | 603 | /* TODO: Change that to only modify the low word and move set_pte_at() |
583 | unsigned long set) | 604 | * out of line |
605 | */ | ||
606 | static inline unsigned long long pte_update(pte_t *p, | ||
607 | unsigned long clr, | ||
608 | unsigned long set) | ||
584 | { | 609 | { |
610 | #ifdef PTE_ATOMIC_UPDATES | ||
585 | unsigned long long old; | 611 | unsigned long long old; |
586 | unsigned long tmp; | 612 | unsigned long tmp; |
587 | 613 | ||
@@ -596,13 +622,18 @@ static inline unsigned long long pte_update(pte_t *p, unsigned long clr, | |||
596 | : "=&r" (old), "=&r" (tmp), "=m" (*p) | 622 | : "=&r" (old), "=&r" (tmp), "=m" (*p) |
597 | : "r" (p), "r" ((unsigned long)(p) + 4), "r" (clr), "r" (set), "m" (*p) | 623 | : "r" (p), "r" ((unsigned long)(p) + 4), "r" (clr), "r" (set), "m" (*p) |
598 | : "cc" ); | 624 | : "cc" ); |
625 | #else /* PTE_ATOMIC_UPDATES */ | ||
626 | unsigned long long old = pte_val(*p); | ||
627 | *p = __pte((old & ~(unsigned long long)clr) | set); | ||
628 | #endif /* !PTE_ATOMIC_UPDATES */ | ||
629 | |||
599 | #ifdef CONFIG_44x | 630 | #ifdef CONFIG_44x |
600 | if ((old & _PAGE_USER) && (old & _PAGE_HWEXEC)) | 631 | if ((old & _PAGE_USER) && (old & _PAGE_HWEXEC)) |
601 | icache_44x_need_flush = 1; | 632 | icache_44x_need_flush = 1; |
602 | #endif | 633 | #endif |
603 | return old; | 634 | return old; |
604 | } | 635 | } |
605 | #endif | 636 | #endif /* CONFIG_PTE_64BIT */ |
606 | 637 | ||
607 | /* | 638 | /* |
608 | * set_pte stores a linux PTE into the linux page table. | 639 | * set_pte stores a linux PTE into the linux page table. |
@@ -620,8 +651,8 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, | |||
620 | } | 651 | } |
621 | 652 | ||
622 | /* | 653 | /* |
623 | * 2.6 calles this without flushing the TLB entry, this is wrong | 654 | * 2.6 calls this without flushing the TLB entry; this is wrong |
624 | * for our hash-based implementation, we fix that up here | 655 | * for our hash-based implementation, we fix that up here. |
625 | */ | 656 | */ |
626 | #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG | 657 | #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG |
627 | static inline int __ptep_test_and_clear_young(unsigned int context, unsigned long addr, pte_t *ptep) | 658 | static inline int __ptep_test_and_clear_young(unsigned int context, unsigned long addr, pte_t *ptep) |
@@ -652,6 +683,12 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, | |||
652 | { | 683 | { |
653 | pte_update(ptep, (_PAGE_RW | _PAGE_HWWRITE), 0); | 684 | pte_update(ptep, (_PAGE_RW | _PAGE_HWWRITE), 0); |
654 | } | 685 | } |
686 | static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, | ||
687 | unsigned long addr, pte_t *ptep) | ||
688 | { | ||
689 | ptep_set_wrprotect(mm, addr, ptep); | ||
690 | } | ||
691 | |||
655 | 692 | ||
656 | #define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS | 693 | #define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS |
657 | static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry, int dirty) | 694 | static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry, int dirty) |
@@ -665,7 +702,7 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry, int dirty) | |||
665 | ({ \ | 702 | ({ \ |
666 | int __changed = !pte_same(*(__ptep), __entry); \ | 703 | int __changed = !pte_same(*(__ptep), __entry); \ |
667 | if (__changed) { \ | 704 | if (__changed) { \ |
668 | __ptep_set_access_flags(__ptep, __entry, __dirty); \ | 705 | __ptep_set_access_flags(__ptep, __entry, __dirty); \ |
669 | flush_tlb_page_nohash(__vma, __address); \ | 706 | flush_tlb_page_nohash(__vma, __address); \ |
670 | } \ | 707 | } \ |
671 | __changed; \ | 708 | __changed; \ |
diff --git a/include/asm-powerpc/pgtable-ppc64.h b/include/asm-powerpc/pgtable-ppc64.h index 7686569a0bef..ab98a9c80b28 100644 --- a/include/asm-powerpc/pgtable-ppc64.h +++ b/include/asm-powerpc/pgtable-ppc64.h | |||
@@ -91,9 +91,11 @@ | |||
91 | #define _PAGE_DIRTY 0x0080 /* C: page changed */ | 91 | #define _PAGE_DIRTY 0x0080 /* C: page changed */ |
92 | #define _PAGE_ACCESSED 0x0100 /* R: page referenced */ | 92 | #define _PAGE_ACCESSED 0x0100 /* R: page referenced */ |
93 | #define _PAGE_RW 0x0200 /* software: user write access allowed */ | 93 | #define _PAGE_RW 0x0200 /* software: user write access allowed */ |
94 | #define _PAGE_HASHPTE 0x0400 /* software: pte has an associated HPTE */ | ||
95 | #define _PAGE_BUSY 0x0800 /* software: PTE & hash are busy */ | 94 | #define _PAGE_BUSY 0x0800 /* software: PTE & hash are busy */ |
96 | 95 | ||
96 | /* Strong Access Ordering */ | ||
97 | #define _PAGE_SAO (_PAGE_WRITETHRU | _PAGE_NO_CACHE | _PAGE_COHERENT) | ||
98 | |||
97 | #define _PAGE_BASE (_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_COHERENT) | 99 | #define _PAGE_BASE (_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_COHERENT) |
98 | 100 | ||
99 | #define _PAGE_WRENABLE (_PAGE_RW | _PAGE_DIRTY) | 101 | #define _PAGE_WRENABLE (_PAGE_RW | _PAGE_DIRTY) |
diff --git a/include/asm-powerpc/ppc_asm.h b/include/asm-powerpc/ppc_asm.h index 2dbd4e7884fa..0966899d974b 100644 --- a/include/asm-powerpc/ppc_asm.h +++ b/include/asm-powerpc/ppc_asm.h | |||
@@ -6,6 +6,7 @@ | |||
6 | 6 | ||
7 | #include <linux/stringify.h> | 7 | #include <linux/stringify.h> |
8 | #include <asm/asm-compat.h> | 8 | #include <asm/asm-compat.h> |
9 | #include <asm/processor.h> | ||
9 | 10 | ||
10 | #ifndef __ASSEMBLY__ | 11 | #ifndef __ASSEMBLY__ |
11 | #error __FILE__ should only be used in assembler files | 12 | #error __FILE__ should only be used in assembler files |
@@ -73,6 +74,15 @@ END_FTR_SECTION_IFCLR(CPU_FTR_PURR); \ | |||
73 | REST_10GPRS(22, base) | 74 | REST_10GPRS(22, base) |
74 | #endif | 75 | #endif |
75 | 76 | ||
77 | /* | ||
78 | * Define what the VSX XX1 form instructions will look like, then add | ||
79 | * the 128 bit load store instructions based on that. | ||
80 | */ | ||
81 | #define VSX_XX1(xs, ra, rb) (((xs) & 0x1f) << 21 | ((ra) << 16) | \ | ||
82 | ((rb) << 11) | (((xs) >> 5))) | ||
83 | |||
84 | #define STXVD2X(xs, ra, rb) .long (0x7c000798 | VSX_XX1((xs), (ra), (rb))) | ||
85 | #define LXVD2X(xs, ra, rb) .long (0x7c000698 | VSX_XX1((xs), (ra), (rb))) | ||
76 | 86 | ||
77 | #define SAVE_2GPRS(n, base) SAVE_GPR(n, base); SAVE_GPR(n+1, base) | 87 | #define SAVE_2GPRS(n, base) SAVE_GPR(n, base); SAVE_GPR(n+1, base) |
78 | #define SAVE_4GPRS(n, base) SAVE_2GPRS(n, base); SAVE_2GPRS(n+2, base) | 88 | #define SAVE_4GPRS(n, base) SAVE_2GPRS(n, base); SAVE_2GPRS(n+2, base) |
@@ -83,13 +93,13 @@ END_FTR_SECTION_IFCLR(CPU_FTR_PURR); \ | |||
83 | #define REST_8GPRS(n, base) REST_4GPRS(n, base); REST_4GPRS(n+4, base) | 93 | #define REST_8GPRS(n, base) REST_4GPRS(n, base); REST_4GPRS(n+4, base) |
84 | #define REST_10GPRS(n, base) REST_8GPRS(n, base); REST_2GPRS(n+8, base) | 94 | #define REST_10GPRS(n, base) REST_8GPRS(n, base); REST_2GPRS(n+8, base) |
85 | 95 | ||
86 | #define SAVE_FPR(n, base) stfd n,THREAD_FPR0+8*(n)(base) | 96 | #define SAVE_FPR(n, base) stfd n,THREAD_FPR0+8*TS_FPRWIDTH*(n)(base) |
87 | #define SAVE_2FPRS(n, base) SAVE_FPR(n, base); SAVE_FPR(n+1, base) | 97 | #define SAVE_2FPRS(n, base) SAVE_FPR(n, base); SAVE_FPR(n+1, base) |
88 | #define SAVE_4FPRS(n, base) SAVE_2FPRS(n, base); SAVE_2FPRS(n+2, base) | 98 | #define SAVE_4FPRS(n, base) SAVE_2FPRS(n, base); SAVE_2FPRS(n+2, base) |
89 | #define SAVE_8FPRS(n, base) SAVE_4FPRS(n, base); SAVE_4FPRS(n+4, base) | 99 | #define SAVE_8FPRS(n, base) SAVE_4FPRS(n, base); SAVE_4FPRS(n+4, base) |
90 | #define SAVE_16FPRS(n, base) SAVE_8FPRS(n, base); SAVE_8FPRS(n+8, base) | 100 | #define SAVE_16FPRS(n, base) SAVE_8FPRS(n, base); SAVE_8FPRS(n+8, base) |
91 | #define SAVE_32FPRS(n, base) SAVE_16FPRS(n, base); SAVE_16FPRS(n+16, base) | 101 | #define SAVE_32FPRS(n, base) SAVE_16FPRS(n, base); SAVE_16FPRS(n+16, base) |
92 | #define REST_FPR(n, base) lfd n,THREAD_FPR0+8*(n)(base) | 102 | #define REST_FPR(n, base) lfd n,THREAD_FPR0+8*TS_FPRWIDTH*(n)(base) |
93 | #define REST_2FPRS(n, base) REST_FPR(n, base); REST_FPR(n+1, base) | 103 | #define REST_2FPRS(n, base) REST_FPR(n, base); REST_FPR(n+1, base) |
94 | #define REST_4FPRS(n, base) REST_2FPRS(n, base); REST_2FPRS(n+2, base) | 104 | #define REST_4FPRS(n, base) REST_2FPRS(n, base); REST_2FPRS(n+2, base) |
95 | #define REST_8FPRS(n, base) REST_4FPRS(n, base); REST_4FPRS(n+4, base) | 105 | #define REST_8FPRS(n, base) REST_4FPRS(n, base); REST_4FPRS(n+4, base) |
@@ -109,6 +119,33 @@ END_FTR_SECTION_IFCLR(CPU_FTR_PURR); \ | |||
109 | #define REST_16VRS(n,b,base) REST_8VRS(n,b,base); REST_8VRS(n+8,b,base) | 119 | #define REST_16VRS(n,b,base) REST_8VRS(n,b,base); REST_8VRS(n+8,b,base) |
110 | #define REST_32VRS(n,b,base) REST_16VRS(n,b,base); REST_16VRS(n+16,b,base) | 120 | #define REST_32VRS(n,b,base) REST_16VRS(n,b,base); REST_16VRS(n+16,b,base) |
111 | 121 | ||
122 | /* Save the lower 32 VSRs in the thread VSR region */ | ||
123 | #define SAVE_VSR(n,b,base) li b,THREAD_VSR0+(16*(n)); STXVD2X(n,b,base) | ||
124 | #define SAVE_2VSRS(n,b,base) SAVE_VSR(n,b,base); SAVE_VSR(n+1,b,base) | ||
125 | #define SAVE_4VSRS(n,b,base) SAVE_2VSRS(n,b,base); SAVE_2VSRS(n+2,b,base) | ||
126 | #define SAVE_8VSRS(n,b,base) SAVE_4VSRS(n,b,base); SAVE_4VSRS(n+4,b,base) | ||
127 | #define SAVE_16VSRS(n,b,base) SAVE_8VSRS(n,b,base); SAVE_8VSRS(n+8,b,base) | ||
128 | #define SAVE_32VSRS(n,b,base) SAVE_16VSRS(n,b,base); SAVE_16VSRS(n+16,b,base) | ||
129 | #define REST_VSR(n,b,base) li b,THREAD_VSR0+(16*(n)); LXVD2X(n,b,base) | ||
130 | #define REST_2VSRS(n,b,base) REST_VSR(n,b,base); REST_VSR(n+1,b,base) | ||
131 | #define REST_4VSRS(n,b,base) REST_2VSRS(n,b,base); REST_2VSRS(n+2,b,base) | ||
132 | #define REST_8VSRS(n,b,base) REST_4VSRS(n,b,base); REST_4VSRS(n+4,b,base) | ||
133 | #define REST_16VSRS(n,b,base) REST_8VSRS(n,b,base); REST_8VSRS(n+8,b,base) | ||
134 | #define REST_32VSRS(n,b,base) REST_16VSRS(n,b,base); REST_16VSRS(n+16,b,base) | ||
135 | /* Save the upper 32 VSRs (32-63) in the thread VSX region (0-31) */ | ||
136 | #define SAVE_VSRU(n,b,base) li b,THREAD_VR0+(16*(n)); STXVD2X(n+32,b,base) | ||
137 | #define SAVE_2VSRSU(n,b,base) SAVE_VSRU(n,b,base); SAVE_VSRU(n+1,b,base) | ||
138 | #define SAVE_4VSRSU(n,b,base) SAVE_2VSRSU(n,b,base); SAVE_2VSRSU(n+2,b,base) | ||
139 | #define SAVE_8VSRSU(n,b,base) SAVE_4VSRSU(n,b,base); SAVE_4VSRSU(n+4,b,base) | ||
140 | #define SAVE_16VSRSU(n,b,base) SAVE_8VSRSU(n,b,base); SAVE_8VSRSU(n+8,b,base) | ||
141 | #define SAVE_32VSRSU(n,b,base) SAVE_16VSRSU(n,b,base); SAVE_16VSRSU(n+16,b,base) | ||
142 | #define REST_VSRU(n,b,base) li b,THREAD_VR0+(16*(n)); LXVD2X(n+32,b,base) | ||
143 | #define REST_2VSRSU(n,b,base) REST_VSRU(n,b,base); REST_VSRU(n+1,b,base) | ||
144 | #define REST_4VSRSU(n,b,base) REST_2VSRSU(n,b,base); REST_2VSRSU(n+2,b,base) | ||
145 | #define REST_8VSRSU(n,b,base) REST_4VSRSU(n,b,base); REST_4VSRSU(n+4,b,base) | ||
146 | #define REST_16VSRSU(n,b,base) REST_8VSRSU(n,b,base); REST_8VSRSU(n+8,b,base) | ||
147 | #define REST_32VSRSU(n,b,base) REST_16VSRSU(n,b,base); REST_16VSRSU(n+16,b,base) | ||
148 | |||
112 | #define SAVE_EVR(n,s,base) evmergehi s,s,n; stw s,THREAD_EVR0+4*(n)(base) | 149 | #define SAVE_EVR(n,s,base) evmergehi s,s,n; stw s,THREAD_EVR0+4*(n)(base) |
113 | #define SAVE_2EVRS(n,s,base) SAVE_EVR(n,s,base); SAVE_EVR(n+1,s,base) | 150 | #define SAVE_2EVRS(n,s,base) SAVE_EVR(n,s,base); SAVE_EVR(n+1,s,base) |
114 | #define SAVE_4EVRS(n,s,base) SAVE_2EVRS(n,s,base); SAVE_2EVRS(n+2,s,base) | 151 | #define SAVE_4EVRS(n,s,base) SAVE_2EVRS(n,s,base); SAVE_2EVRS(n+2,s,base) |
@@ -356,6 +393,12 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601) | |||
356 | #define toreal(rd) | 393 | #define toreal(rd) |
357 | #define fromreal(rd) | 394 | #define fromreal(rd) |
358 | 395 | ||
396 | /* | ||
397 | * We use addis to ensure compatibility with the "classic" ppc versions of | ||
398 | * these macros, which use rs = 0 to get the tophys offset in rd, rather than | ||
399 | * converting the address in r0, and so this version has to do that too | ||
400 | * (i.e. set register rd to 0 when rs == 0). | ||
401 | */ | ||
359 | #define tophys(rd,rs) \ | 402 | #define tophys(rd,rs) \ |
360 | addis rd,rs,0 | 403 | addis rd,rs,0 |
361 | 404 | ||
@@ -533,6 +576,73 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601) | |||
533 | #define vr30 30 | 576 | #define vr30 30 |
534 | #define vr31 31 | 577 | #define vr31 31 |
535 | 578 | ||
579 | /* VSX Registers (VSRs) */ | ||
580 | |||
581 | #define vsr0 0 | ||
582 | #define vsr1 1 | ||
583 | #define vsr2 2 | ||
584 | #define vsr3 3 | ||
585 | #define vsr4 4 | ||
586 | #define vsr5 5 | ||
587 | #define vsr6 6 | ||
588 | #define vsr7 7 | ||
589 | #define vsr8 8 | ||
590 | #define vsr9 9 | ||
591 | #define vsr10 10 | ||
592 | #define vsr11 11 | ||
593 | #define vsr12 12 | ||
594 | #define vsr13 13 | ||
595 | #define vsr14 14 | ||
596 | #define vsr15 15 | ||
597 | #define vsr16 16 | ||
598 | #define vsr17 17 | ||
599 | #define vsr18 18 | ||
600 | #define vsr19 19 | ||
601 | #define vsr20 20 | ||
602 | #define vsr21 21 | ||
603 | #define vsr22 22 | ||
604 | #define vsr23 23 | ||
605 | #define vsr24 24 | ||
606 | #define vsr25 25 | ||
607 | #define vsr26 26 | ||
608 | #define vsr27 27 | ||
609 | #define vsr28 28 | ||
610 | #define vsr29 29 | ||
611 | #define vsr30 30 | ||
612 | #define vsr31 31 | ||
613 | #define vsr32 32 | ||
614 | #define vsr33 33 | ||
615 | #define vsr34 34 | ||
616 | #define vsr35 35 | ||
617 | #define vsr36 36 | ||
618 | #define vsr37 37 | ||
619 | #define vsr38 38 | ||
620 | #define vsr39 39 | ||
621 | #define vsr40 40 | ||
622 | #define vsr41 41 | ||
623 | #define vsr42 42 | ||
624 | #define vsr43 43 | ||
625 | #define vsr44 44 | ||
626 | #define vsr45 45 | ||
627 | #define vsr46 46 | ||
628 | #define vsr47 47 | ||
629 | #define vsr48 48 | ||
630 | #define vsr49 49 | ||
631 | #define vsr50 50 | ||
632 | #define vsr51 51 | ||
633 | #define vsr52 52 | ||
634 | #define vsr53 53 | ||
635 | #define vsr54 54 | ||
636 | #define vsr55 55 | ||
637 | #define vsr56 56 | ||
638 | #define vsr57 57 | ||
639 | #define vsr58 58 | ||
640 | #define vsr59 59 | ||
641 | #define vsr60 60 | ||
642 | #define vsr61 61 | ||
643 | #define vsr62 62 | ||
644 | #define vsr63 63 | ||
645 | |||
536 | /* SPE Registers (EVPRs) */ | 646 | /* SPE Registers (EVPRs) */ |
537 | 647 | ||
538 | #define evr0 0 | 648 | #define evr0 0 |
diff --git a/include/asm-powerpc/processor.h b/include/asm-powerpc/processor.h index cf83f2d7e2a5..101ed87f7d84 100644 --- a/include/asm-powerpc/processor.h +++ b/include/asm-powerpc/processor.h | |||
@@ -12,6 +12,12 @@ | |||
12 | 12 | ||
13 | #include <asm/reg.h> | 13 | #include <asm/reg.h> |
14 | 14 | ||
15 | #ifdef CONFIG_VSX | ||
16 | #define TS_FPRWIDTH 2 | ||
17 | #else | ||
18 | #define TS_FPRWIDTH 1 | ||
19 | #endif | ||
20 | |||
15 | #ifndef __ASSEMBLY__ | 21 | #ifndef __ASSEMBLY__ |
16 | #include <linux/compiler.h> | 22 | #include <linux/compiler.h> |
17 | #include <asm/ptrace.h> | 23 | #include <asm/ptrace.h> |
@@ -78,9 +84,14 @@ extern long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); | |||
78 | /* Lazy FPU handling on uni-processor */ | 84 | /* Lazy FPU handling on uni-processor */ |
79 | extern struct task_struct *last_task_used_math; | 85 | extern struct task_struct *last_task_used_math; |
80 | extern struct task_struct *last_task_used_altivec; | 86 | extern struct task_struct *last_task_used_altivec; |
87 | extern struct task_struct *last_task_used_vsx; | ||
81 | extern struct task_struct *last_task_used_spe; | 88 | extern struct task_struct *last_task_used_spe; |
82 | 89 | ||
83 | #ifdef CONFIG_PPC32 | 90 | #ifdef CONFIG_PPC32 |
91 | |||
92 | #if CONFIG_TASK_SIZE > CONFIG_KERNEL_START | ||
93 | #error User TASK_SIZE overlaps with KERNEL_START address | ||
94 | #endif | ||
84 | #define TASK_SIZE (CONFIG_TASK_SIZE) | 95 | #define TASK_SIZE (CONFIG_TASK_SIZE) |
85 | 96 | ||
86 | /* This decides where the kernel will search for a free chunk of vm | 97 | /* This decides where the kernel will search for a free chunk of vm |
@@ -136,6 +147,10 @@ typedef struct { | |||
136 | unsigned long seg; | 147 | unsigned long seg; |
137 | } mm_segment_t; | 148 | } mm_segment_t; |
138 | 149 | ||
150 | #define TS_FPROFFSET 0 | ||
151 | #define TS_VSRLOWOFFSET 1 | ||
152 | #define TS_FPR(i) fpr[i][TS_FPROFFSET] | ||
153 | |||
139 | struct thread_struct { | 154 | struct thread_struct { |
140 | unsigned long ksp; /* Kernel stack pointer */ | 155 | unsigned long ksp; /* Kernel stack pointer */ |
141 | unsigned long ksp_limit; /* if ksp <= ksp_limit stack overflow */ | 156 | unsigned long ksp_limit; /* if ksp <= ksp_limit stack overflow */ |
@@ -152,8 +167,9 @@ struct thread_struct { | |||
152 | unsigned long dbcr0; /* debug control register values */ | 167 | unsigned long dbcr0; /* debug control register values */ |
153 | unsigned long dbcr1; | 168 | unsigned long dbcr1; |
154 | #endif | 169 | #endif |
155 | double fpr[32]; /* Complete floating point set */ | 170 | /* FP and VSX 0-31 register set */ |
156 | struct { /* fpr ... fpscr must be contiguous */ | 171 | double fpr[32][TS_FPRWIDTH]; |
172 | struct { | ||
157 | 173 | ||
158 | unsigned int pad; | 174 | unsigned int pad; |
159 | unsigned int val; /* Floating point status */ | 175 | unsigned int val; /* Floating point status */ |
@@ -173,6 +189,10 @@ struct thread_struct { | |||
173 | unsigned long vrsave; | 189 | unsigned long vrsave; |
174 | int used_vr; /* set if process has used altivec */ | 190 | int used_vr; /* set if process has used altivec */ |
175 | #endif /* CONFIG_ALTIVEC */ | 191 | #endif /* CONFIG_ALTIVEC */ |
192 | #ifdef CONFIG_VSX | ||
193 | /* VSR status */ | ||
194 | int used_vsr; /* set if process has used altivec */ | ||
195 | #endif /* CONFIG_VSX */ | ||
176 | #ifdef CONFIG_SPE | 196 | #ifdef CONFIG_SPE |
177 | unsigned long evr[32]; /* upper 32-bits of SPE regs */ | 197 | unsigned long evr[32]; /* upper 32-bits of SPE regs */ |
178 | u64 acc; /* Accumulator */ | 198 | u64 acc; /* Accumulator */ |
@@ -202,7 +222,7 @@ struct thread_struct { | |||
202 | .ksp_limit = INIT_SP_LIMIT, \ | 222 | .ksp_limit = INIT_SP_LIMIT, \ |
203 | .regs = (struct pt_regs *)INIT_SP - 1, /* XXX bogus, I think */ \ | 223 | .regs = (struct pt_regs *)INIT_SP - 1, /* XXX bogus, I think */ \ |
204 | .fs = KERNEL_DS, \ | 224 | .fs = KERNEL_DS, \ |
205 | .fpr = {0}, \ | 225 | .fpr = {{0}}, \ |
206 | .fpscr = { .val = 0, }, \ | 226 | .fpscr = { .val = 0, }, \ |
207 | .fpexc_mode = 0, \ | 227 | .fpexc_mode = 0, \ |
208 | } | 228 | } |
@@ -214,6 +234,8 @@ struct thread_struct { | |||
214 | #define thread_saved_pc(tsk) \ | 234 | #define thread_saved_pc(tsk) \ |
215 | ((tsk)->thread.regs? (tsk)->thread.regs->nip: 0) | 235 | ((tsk)->thread.regs? (tsk)->thread.regs->nip: 0) |
216 | 236 | ||
237 | #define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.regs) | ||
238 | |||
217 | unsigned long get_wchan(struct task_struct *p); | 239 | unsigned long get_wchan(struct task_struct *p); |
218 | 240 | ||
219 | #define KSTK_EIP(tsk) ((tsk)->thread.regs? (tsk)->thread.regs->nip: 0) | 241 | #define KSTK_EIP(tsk) ((tsk)->thread.regs? (tsk)->thread.regs->nip: 0) |
diff --git a/include/asm-powerpc/prom.h b/include/asm-powerpc/prom.h index 78b7b0d494c0..eb3bd2e1c7f6 100644 --- a/include/asm-powerpc/prom.h +++ b/include/asm-powerpc/prom.h | |||
@@ -212,8 +212,16 @@ extern u64 of_translate_dma_address(struct device_node *dev, | |||
212 | */ | 212 | */ |
213 | extern const u32 *of_get_address(struct device_node *dev, int index, | 213 | extern const u32 *of_get_address(struct device_node *dev, int index, |
214 | u64 *size, unsigned int *flags); | 214 | u64 *size, unsigned int *flags); |
215 | #ifdef CONFIG_PCI | ||
215 | extern const u32 *of_get_pci_address(struct device_node *dev, int bar_no, | 216 | extern const u32 *of_get_pci_address(struct device_node *dev, int bar_no, |
216 | u64 *size, unsigned int *flags); | 217 | u64 *size, unsigned int *flags); |
218 | #else | ||
219 | static inline const u32 *of_get_pci_address(struct device_node *dev, | ||
220 | int bar_no, u64 *size, unsigned int *flags) | ||
221 | { | ||
222 | return NULL; | ||
223 | } | ||
224 | #endif /* CONFIG_PCI */ | ||
217 | 225 | ||
218 | /* Get an address as a resource. Note that if your address is | 226 | /* Get an address as a resource. Note that if your address is |
219 | * a PIO address, the conversion will fail if the physical address | 227 | * a PIO address, the conversion will fail if the physical address |
@@ -223,8 +231,16 @@ extern const u32 *of_get_pci_address(struct device_node *dev, int bar_no, | |||
223 | */ | 231 | */ |
224 | extern int of_address_to_resource(struct device_node *dev, int index, | 232 | extern int of_address_to_resource(struct device_node *dev, int index, |
225 | struct resource *r); | 233 | struct resource *r); |
234 | #ifdef CONFIG_PCI | ||
226 | extern int of_pci_address_to_resource(struct device_node *dev, int bar, | 235 | extern int of_pci_address_to_resource(struct device_node *dev, int bar, |
227 | struct resource *r); | 236 | struct resource *r); |
237 | #else | ||
238 | static inline int of_pci_address_to_resource(struct device_node *dev, int bar, | ||
239 | struct resource *r) | ||
240 | { | ||
241 | return -ENOSYS; | ||
242 | } | ||
243 | #endif /* CONFIG_PCI */ | ||
228 | 244 | ||
229 | /* Parse the ibm,dma-window property of an OF node into the busno, phys and | 245 | /* Parse the ibm,dma-window property of an OF node into the busno, phys and |
230 | * size parameters. | 246 | * size parameters. |
diff --git a/include/asm-powerpc/ptrace.h b/include/asm-powerpc/ptrace.h index 39023dde1cc4..3d6e31024e56 100644 --- a/include/asm-powerpc/ptrace.h +++ b/include/asm-powerpc/ptrace.h | |||
@@ -119,6 +119,7 @@ extern int ptrace_put_reg(struct task_struct *task, int regno, | |||
119 | #ifndef __powerpc64__ | 119 | #ifndef __powerpc64__ |
120 | #define IS_CRITICAL_EXC(regs) (((regs)->trap & 2) != 0) | 120 | #define IS_CRITICAL_EXC(regs) (((regs)->trap & 2) != 0) |
121 | #define IS_MCHECK_EXC(regs) (((regs)->trap & 4) != 0) | 121 | #define IS_MCHECK_EXC(regs) (((regs)->trap & 4) != 0) |
122 | #define IS_DEBUG_EXC(regs) (((regs)->trap & 8) != 0) | ||
122 | #endif /* ! __powerpc64__ */ | 123 | #endif /* ! __powerpc64__ */ |
123 | #define TRAP(regs) ((regs)->trap & ~0xF) | 124 | #define TRAP(regs) ((regs)->trap & ~0xF) |
124 | #ifdef __powerpc64__ | 125 | #ifdef __powerpc64__ |
@@ -223,6 +224,14 @@ extern void user_disable_single_step(struct task_struct *); | |||
223 | #define PT_VRSAVE_32 (PT_VR0 + 33*4) | 224 | #define PT_VRSAVE_32 (PT_VR0 + 33*4) |
224 | #endif | 225 | #endif |
225 | 226 | ||
227 | /* | ||
228 | * Only store first 32 VSRs here. The second 32 VSRs in VR0-31 | ||
229 | */ | ||
230 | #define PT_VSR0 150 /* each VSR reg occupies 2 slots in 64-bit */ | ||
231 | #define PT_VSR31 (PT_VSR0 + 2*31) | ||
232 | #ifdef __KERNEL__ | ||
233 | #define PT_VSR0_32 300 /* each VSR reg occupies 4 slots in 32-bit */ | ||
234 | #endif | ||
226 | #endif /* __powerpc64__ */ | 235 | #endif /* __powerpc64__ */ |
227 | 236 | ||
228 | /* | 237 | /* |
@@ -245,6 +254,10 @@ extern void user_disable_single_step(struct task_struct *); | |||
245 | #define PTRACE_GETEVRREGS 20 | 254 | #define PTRACE_GETEVRREGS 20 |
246 | #define PTRACE_SETEVRREGS 21 | 255 | #define PTRACE_SETEVRREGS 21 |
247 | 256 | ||
257 | /* Get the first 32 128bit VSX registers */ | ||
258 | #define PTRACE_GETVSRREGS 27 | ||
259 | #define PTRACE_SETVSRREGS 28 | ||
260 | |||
248 | /* | 261 | /* |
249 | * Get or set a debug register. The first 16 are DABR registers and the | 262 | * Get or set a debug register. The first 16 are DABR registers and the |
250 | * second 16 are IABR registers. | 263 | * second 16 are IABR registers. |
diff --git a/include/asm-powerpc/qe.h b/include/asm-powerpc/qe.h index c3be6e2e1490..edee15d269ea 100644 --- a/include/asm-powerpc/qe.h +++ b/include/asm-powerpc/qe.h | |||
@@ -16,6 +16,8 @@ | |||
16 | #define _ASM_POWERPC_QE_H | 16 | #define _ASM_POWERPC_QE_H |
17 | #ifdef __KERNEL__ | 17 | #ifdef __KERNEL__ |
18 | 18 | ||
19 | #include <linux/spinlock.h> | ||
20 | #include <asm/cpm.h> | ||
19 | #include <asm/immap_qe.h> | 21 | #include <asm/immap_qe.h> |
20 | 22 | ||
21 | #define QE_NUM_OF_SNUM 28 | 23 | #define QE_NUM_OF_SNUM 28 |
@@ -74,10 +76,38 @@ enum qe_clock { | |||
74 | QE_CLK_DUMMY | 76 | QE_CLK_DUMMY |
75 | }; | 77 | }; |
76 | 78 | ||
79 | static inline bool qe_clock_is_brg(enum qe_clock clk) | ||
80 | { | ||
81 | return clk >= QE_BRG1 && clk <= QE_BRG16; | ||
82 | } | ||
83 | |||
84 | extern spinlock_t cmxgcr_lock; | ||
85 | |||
77 | /* Export QE common operations */ | 86 | /* Export QE common operations */ |
78 | extern void qe_reset(void); | 87 | extern void __init qe_reset(void); |
88 | |||
89 | /* QE PIO */ | ||
90 | #define QE_PIO_PINS 32 | ||
91 | |||
92 | struct qe_pio_regs { | ||
93 | __be32 cpodr; /* Open drain register */ | ||
94 | __be32 cpdata; /* Data register */ | ||
95 | __be32 cpdir1; /* Direction register */ | ||
96 | __be32 cpdir2; /* Direction register */ | ||
97 | __be32 cppar1; /* Pin assignment register */ | ||
98 | __be32 cppar2; /* Pin assignment register */ | ||
99 | #ifdef CONFIG_PPC_85xx | ||
100 | u8 pad[8]; | ||
101 | #endif | ||
102 | }; | ||
103 | |||
79 | extern int par_io_init(struct device_node *np); | 104 | extern int par_io_init(struct device_node *np); |
80 | extern int par_io_of_config(struct device_node *np); | 105 | extern int par_io_of_config(struct device_node *np); |
106 | #define QE_PIO_DIR_IN 2 | ||
107 | #define QE_PIO_DIR_OUT 1 | ||
108 | extern void __par_io_config_pin(struct qe_pio_regs __iomem *par_io, u8 pin, | ||
109 | int dir, int open_drain, int assignment, | ||
110 | int has_irq); | ||
81 | extern int par_io_config_pin(u8 port, u8 pin, int dir, int open_drain, | 111 | extern int par_io_config_pin(u8 port, u8 pin, int dir, int open_drain, |
82 | int assignment, int has_irq); | 112 | int assignment, int has_irq); |
83 | extern int par_io_data_set(u8 port, u8 pin, u8 val); | 113 | extern int par_io_data_set(u8 port, u8 pin, u8 val); |
@@ -89,20 +119,13 @@ unsigned int qe_get_brg_clk(void); | |||
89 | int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier); | 119 | int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier); |
90 | int qe_get_snum(void); | 120 | int qe_get_snum(void); |
91 | void qe_put_snum(u8 snum); | 121 | void qe_put_snum(u8 snum); |
92 | unsigned long qe_muram_alloc(int size, int align); | 122 | /* we actually use cpm_muram implementation, define this for convenience */ |
93 | int qe_muram_free(unsigned long offset); | 123 | #define qe_muram_init cpm_muram_init |
94 | unsigned long qe_muram_alloc_fixed(unsigned long offset, int size); | 124 | #define qe_muram_alloc cpm_muram_alloc |
95 | void qe_muram_dump(void); | 125 | #define qe_muram_alloc_fixed cpm_muram_alloc_fixed |
96 | 126 | #define qe_muram_free cpm_muram_free | |
97 | static inline void __iomem *qe_muram_addr(unsigned long offset) | 127 | #define qe_muram_addr cpm_muram_addr |
98 | { | 128 | #define qe_muram_offset cpm_muram_offset |
99 | return (void __iomem *)&qe_immr->muram[offset]; | ||
100 | } | ||
101 | |||
102 | static inline unsigned long qe_muram_offset(void __iomem *addr) | ||
103 | { | ||
104 | return addr - (void __iomem *)qe_immr->muram; | ||
105 | } | ||
106 | 129 | ||
107 | /* Structure that defines QE firmware binary files. | 130 | /* Structure that defines QE firmware binary files. |
108 | * | 131 | * |
@@ -156,6 +179,9 @@ int qe_upload_firmware(const struct qe_firmware *firmware); | |||
156 | /* Obtain information on the uploaded firmware */ | 179 | /* Obtain information on the uploaded firmware */ |
157 | struct qe_firmware_info *qe_get_firmware_info(void); | 180 | struct qe_firmware_info *qe_get_firmware_info(void); |
158 | 181 | ||
182 | /* QE USB */ | ||
183 | int qe_usb_clock_set(enum qe_clock clk, int rate); | ||
184 | |||
159 | /* Buffer descriptors */ | 185 | /* Buffer descriptors */ |
160 | struct qe_bd { | 186 | struct qe_bd { |
161 | __be16 status; | 187 | __be16 status; |
@@ -166,20 +192,6 @@ struct qe_bd { | |||
166 | #define BD_STATUS_MASK 0xffff0000 | 192 | #define BD_STATUS_MASK 0xffff0000 |
167 | #define BD_LENGTH_MASK 0x0000ffff | 193 | #define BD_LENGTH_MASK 0x0000ffff |
168 | 194 | ||
169 | #define BD_SC_EMPTY 0x8000 /* Receive is empty */ | ||
170 | #define BD_SC_READY 0x8000 /* Transmit is ready */ | ||
171 | #define BD_SC_WRAP 0x2000 /* Last buffer descriptor */ | ||
172 | #define BD_SC_INTRPT 0x1000 /* Interrupt on change */ | ||
173 | #define BD_SC_LAST 0x0800 /* Last buffer in frame */ | ||
174 | #define BD_SC_CM 0x0200 /* Continous mode */ | ||
175 | #define BD_SC_ID 0x0100 /* Rec'd too many idles */ | ||
176 | #define BD_SC_P 0x0100 /* xmt preamble */ | ||
177 | #define BD_SC_BR 0x0020 /* Break received */ | ||
178 | #define BD_SC_FR 0x0010 /* Framing error */ | ||
179 | #define BD_SC_PR 0x0008 /* Parity error */ | ||
180 | #define BD_SC_OV 0x0002 /* Overrun */ | ||
181 | #define BD_SC_CD 0x0001 /* ?? */ | ||
182 | |||
183 | /* Alignment */ | 195 | /* Alignment */ |
184 | #define QE_INTR_TABLE_ALIGN 16 /* ??? */ | 196 | #define QE_INTR_TABLE_ALIGN 16 /* ??? */ |
185 | #define QE_ALIGNMENT_OF_BD 8 | 197 | #define QE_ALIGNMENT_OF_BD 8 |
@@ -254,6 +266,16 @@ enum comm_dir { | |||
254 | #define QE_CMXGCR_MII_ENET_MNG 0x00007000 | 266 | #define QE_CMXGCR_MII_ENET_MNG 0x00007000 |
255 | #define QE_CMXGCR_MII_ENET_MNG_SHIFT 12 | 267 | #define QE_CMXGCR_MII_ENET_MNG_SHIFT 12 |
256 | #define QE_CMXGCR_USBCS 0x0000000f | 268 | #define QE_CMXGCR_USBCS 0x0000000f |
269 | #define QE_CMXGCR_USBCS_CLK3 0x1 | ||
270 | #define QE_CMXGCR_USBCS_CLK5 0x2 | ||
271 | #define QE_CMXGCR_USBCS_CLK7 0x3 | ||
272 | #define QE_CMXGCR_USBCS_CLK9 0x4 | ||
273 | #define QE_CMXGCR_USBCS_CLK13 0x5 | ||
274 | #define QE_CMXGCR_USBCS_CLK17 0x6 | ||
275 | #define QE_CMXGCR_USBCS_CLK19 0x7 | ||
276 | #define QE_CMXGCR_USBCS_CLK21 0x8 | ||
277 | #define QE_CMXGCR_USBCS_BRG9 0x9 | ||
278 | #define QE_CMXGCR_USBCS_BRG10 0xa | ||
257 | 279 | ||
258 | /* QE CECR Commands. | 280 | /* QE CECR Commands. |
259 | */ | 281 | */ |
@@ -283,7 +305,7 @@ enum comm_dir { | |||
283 | #define QE_HPAC_START_TX 0x0000060b | 305 | #define QE_HPAC_START_TX 0x0000060b |
284 | #define QE_HPAC_START_RX 0x0000070b | 306 | #define QE_HPAC_START_RX 0x0000070b |
285 | #define QE_USB_STOP_TX 0x0000000a | 307 | #define QE_USB_STOP_TX 0x0000000a |
286 | #define QE_USB_RESTART_TX 0x0000000b | 308 | #define QE_USB_RESTART_TX 0x0000000c |
287 | #define QE_QMC_STOP_TX 0x0000000c | 309 | #define QE_QMC_STOP_TX 0x0000000c |
288 | #define QE_QMC_STOP_RX 0x0000000d | 310 | #define QE_QMC_STOP_RX 0x0000000d |
289 | #define QE_SS7_SU_FIL_RESET 0x0000000e | 311 | #define QE_SS7_SU_FIL_RESET 0x0000000e |
diff --git a/include/asm-powerpc/reg.h b/include/asm-powerpc/reg.h index edc0cfd7f6e2..bbccadfee0d6 100644 --- a/include/asm-powerpc/reg.h +++ b/include/asm-powerpc/reg.h | |||
@@ -30,6 +30,7 @@ | |||
30 | #define MSR_ISF_LG 61 /* Interrupt 64b mode valid on 630 */ | 30 | #define MSR_ISF_LG 61 /* Interrupt 64b mode valid on 630 */ |
31 | #define MSR_HV_LG 60 /* Hypervisor state */ | 31 | #define MSR_HV_LG 60 /* Hypervisor state */ |
32 | #define MSR_VEC_LG 25 /* Enable AltiVec */ | 32 | #define MSR_VEC_LG 25 /* Enable AltiVec */ |
33 | #define MSR_VSX_LG 23 /* Enable VSX */ | ||
33 | #define MSR_POW_LG 18 /* Enable Power Management */ | 34 | #define MSR_POW_LG 18 /* Enable Power Management */ |
34 | #define MSR_WE_LG 18 /* Wait State Enable */ | 35 | #define MSR_WE_LG 18 /* Wait State Enable */ |
35 | #define MSR_TGPR_LG 17 /* TLB Update registers in use */ | 36 | #define MSR_TGPR_LG 17 /* TLB Update registers in use */ |
@@ -71,6 +72,7 @@ | |||
71 | #endif | 72 | #endif |
72 | 73 | ||
73 | #define MSR_VEC __MASK(MSR_VEC_LG) /* Enable AltiVec */ | 74 | #define MSR_VEC __MASK(MSR_VEC_LG) /* Enable AltiVec */ |
75 | #define MSR_VSX __MASK(MSR_VSX_LG) /* Enable VSX */ | ||
74 | #define MSR_POW __MASK(MSR_POW_LG) /* Enable Power Management */ | 76 | #define MSR_POW __MASK(MSR_POW_LG) /* Enable Power Management */ |
75 | #define MSR_WE __MASK(MSR_WE_LG) /* Wait State Enable */ | 77 | #define MSR_WE __MASK(MSR_WE_LG) /* Wait State Enable */ |
76 | #define MSR_TGPR __MASK(MSR_TGPR_LG) /* TLB Update registers in use */ | 78 | #define MSR_TGPR __MASK(MSR_TGPR_LG) /* TLB Update registers in use */ |
@@ -240,7 +242,7 @@ | |||
240 | #define HID0_DAPUEN (1<<8) /* Debug APU enable */ | 242 | #define HID0_DAPUEN (1<<8) /* Debug APU enable */ |
241 | #define HID0_SGE (1<<7) /* Store Gathering Enable */ | 243 | #define HID0_SGE (1<<7) /* Store Gathering Enable */ |
242 | #define HID0_SIED (1<<7) /* Serial Instr. Execution [Disable] */ | 244 | #define HID0_SIED (1<<7) /* Serial Instr. Execution [Disable] */ |
243 | #define HID0_DFCA (1<<6) /* Data Cache Flush Assist */ | 245 | #define HID0_DCFA (1<<6) /* Data Cache Flush Assist */ |
244 | #define HID0_LRSTK (1<<4) /* Link register stack - 745x */ | 246 | #define HID0_LRSTK (1<<4) /* Link register stack - 745x */ |
245 | #define HID0_BTIC (1<<5) /* Branch Target Instr Cache Enable */ | 247 | #define HID0_BTIC (1<<5) /* Branch Target Instr Cache Enable */ |
246 | #define HID0_ABE (1<<3) /* Address Broadcast Enable */ | 248 | #define HID0_ABE (1<<3) /* Address Broadcast Enable */ |
@@ -732,6 +734,8 @@ | |||
732 | " .llong %1\n" \ | 734 | " .llong %1\n" \ |
733 | " .llong 97b-98b\n" \ | 735 | " .llong 97b-98b\n" \ |
734 | " .llong 99b-98b\n" \ | 736 | " .llong 99b-98b\n" \ |
737 | " .llong 0\n" \ | ||
738 | " .llong 0\n" \ | ||
735 | ".previous" \ | 739 | ".previous" \ |
736 | : "=r" (rval) : "i" (CPU_FTR_CELL_TB_BUG)); rval;}) | 740 | : "=r" (rval) : "i" (CPU_FTR_CELL_TB_BUG)); rval;}) |
737 | #else | 741 | #else |
diff --git a/include/asm-powerpc/reg_booke.h b/include/asm-powerpc/reg_booke.h index cf54a3f31753..be980f4ee495 100644 --- a/include/asm-powerpc/reg_booke.h +++ b/include/asm-powerpc/reg_booke.h | |||
@@ -61,6 +61,8 @@ | |||
61 | #define SPRN_SPEFSCR 0x200 /* SPE & Embedded FP Status & Control */ | 61 | #define SPRN_SPEFSCR 0x200 /* SPE & Embedded FP Status & Control */ |
62 | #define SPRN_BBEAR 0x201 /* Branch Buffer Entry Address Register */ | 62 | #define SPRN_BBEAR 0x201 /* Branch Buffer Entry Address Register */ |
63 | #define SPRN_BBTAR 0x202 /* Branch Buffer Target Address Register */ | 63 | #define SPRN_BBTAR 0x202 /* Branch Buffer Target Address Register */ |
64 | #define SPRN_L1CFG0 0x203 /* L1 Cache Configure Register 0 */ | ||
65 | #define SPRN_L1CFG1 0x204 /* L1 Cache Configure Register 1 */ | ||
64 | #define SPRN_ATB 0x20E /* Alternate Time Base */ | 66 | #define SPRN_ATB 0x20E /* Alternate Time Base */ |
65 | #define SPRN_ATBL 0x20E /* Alternate Time Base Lower */ | 67 | #define SPRN_ATBL 0x20E /* Alternate Time Base Lower */ |
66 | #define SPRN_ATBU 0x20F /* Alternate Time Base Upper */ | 68 | #define SPRN_ATBU 0x20F /* Alternate Time Base Upper */ |
@@ -78,6 +80,7 @@ | |||
78 | #define SPRN_DSRR1 0x23F /* Debug Save and Restore Register 1 */ | 80 | #define SPRN_DSRR1 0x23F /* Debug Save and Restore Register 1 */ |
79 | #define SPRN_SPRG8 0x25C /* Special Purpose Register General 8 */ | 81 | #define SPRN_SPRG8 0x25C /* Special Purpose Register General 8 */ |
80 | #define SPRN_SPRG9 0x25D /* Special Purpose Register General 9 */ | 82 | #define SPRN_SPRG9 0x25D /* Special Purpose Register General 9 */ |
83 | #define SPRN_L1CSR2 0x25E /* L1 Cache Control and Status Register 2 */ | ||
81 | #define SPRN_MAS0 0x270 /* MMU Assist Register 0 */ | 84 | #define SPRN_MAS0 0x270 /* MMU Assist Register 0 */ |
82 | #define SPRN_MAS1 0x271 /* MMU Assist Register 1 */ | 85 | #define SPRN_MAS1 0x271 /* MMU Assist Register 1 */ |
83 | #define SPRN_MAS2 0x272 /* MMU Assist Register 2 */ | 86 | #define SPRN_MAS2 0x272 /* MMU Assist Register 2 */ |
@@ -108,6 +111,8 @@ | |||
108 | #define SPRN_L1CSR1 0x3F3 /* L1 Cache Control and Status Register 1 */ | 111 | #define SPRN_L1CSR1 0x3F3 /* L1 Cache Control and Status Register 1 */ |
109 | #define SPRN_PIT 0x3DB /* Programmable Interval Timer */ | 112 | #define SPRN_PIT 0x3DB /* Programmable Interval Timer */ |
110 | #define SPRN_BUCSR 0x3F5 /* Branch Unit Control and Status */ | 113 | #define SPRN_BUCSR 0x3F5 /* Branch Unit Control and Status */ |
114 | #define SPRN_L2CSR0 0x3F9 /* L2 Data Cache Control and Status Register 0 */ | ||
115 | #define SPRN_L2CSR1 0x3FA /* L2 Data Cache Control and Status Register 1 */ | ||
111 | #define SPRN_DCCR 0x3FA /* Data Cache Cacheability Register */ | 116 | #define SPRN_DCCR 0x3FA /* Data Cache Cacheability Register */ |
112 | #define SPRN_ICCR 0x3FB /* Instruction Cache Cacheability Register */ | 117 | #define SPRN_ICCR 0x3FB /* Instruction Cache Cacheability Register */ |
113 | #define SPRN_SVR 0x3FF /* System Version Register */ | 118 | #define SPRN_SVR 0x3FF /* System Version Register */ |
@@ -210,6 +215,7 @@ | |||
210 | #ifdef CONFIG_BOOKE | 215 | #ifdef CONFIG_BOOKE |
211 | #define DBSR_IC 0x08000000 /* Instruction Completion */ | 216 | #define DBSR_IC 0x08000000 /* Instruction Completion */ |
212 | #define DBSR_BT 0x04000000 /* Branch Taken */ | 217 | #define DBSR_BT 0x04000000 /* Branch Taken */ |
218 | #define DBSR_IRPT 0x02000000 /* Exception Debug Event */ | ||
213 | #define DBSR_TIE 0x01000000 /* Trap Instruction Event */ | 219 | #define DBSR_TIE 0x01000000 /* Trap Instruction Event */ |
214 | #define DBSR_IAC1 0x00800000 /* Instr Address Compare 1 Event */ | 220 | #define DBSR_IAC1 0x00800000 /* Instr Address Compare 1 Event */ |
215 | #define DBSR_IAC2 0x00400000 /* Instr Address Compare 2 Event */ | 221 | #define DBSR_IAC2 0x00400000 /* Instr Address Compare 2 Event */ |
@@ -219,10 +225,14 @@ | |||
219 | #define DBSR_DAC1W 0x00040000 /* Data Addr Compare 1 Write Event */ | 225 | #define DBSR_DAC1W 0x00040000 /* Data Addr Compare 1 Write Event */ |
220 | #define DBSR_DAC2R 0x00020000 /* Data Addr Compare 2 Read Event */ | 226 | #define DBSR_DAC2R 0x00020000 /* Data Addr Compare 2 Read Event */ |
221 | #define DBSR_DAC2W 0x00010000 /* Data Addr Compare 2 Write Event */ | 227 | #define DBSR_DAC2W 0x00010000 /* Data Addr Compare 2 Write Event */ |
228 | #define DBSR_RET 0x00008000 /* Return Debug Event */ | ||
229 | #define DBSR_CIRPT 0x00000040 /* Critical Interrupt Taken Event */ | ||
230 | #define DBSR_CRET 0x00000020 /* Critical Return Debug Event */ | ||
222 | #endif | 231 | #endif |
223 | #ifdef CONFIG_40x | 232 | #ifdef CONFIG_40x |
224 | #define DBSR_IC 0x80000000 /* Instruction Completion */ | 233 | #define DBSR_IC 0x80000000 /* Instruction Completion */ |
225 | #define DBSR_BT 0x40000000 /* Branch taken */ | 234 | #define DBSR_BT 0x40000000 /* Branch taken */ |
235 | #define DBSR_IRPT 0x20000000 /* Exception Debug Event */ | ||
226 | #define DBSR_TIE 0x10000000 /* Trap Instruction debug Event */ | 236 | #define DBSR_TIE 0x10000000 /* Trap Instruction debug Event */ |
227 | #define DBSR_IAC1 0x04000000 /* Instruction Address Compare 1 Event */ | 237 | #define DBSR_IAC1 0x04000000 /* Instruction Address Compare 1 Event */ |
228 | #define DBSR_IAC2 0x02000000 /* Instruction Address Compare 2 Event */ | 238 | #define DBSR_IAC2 0x02000000 /* Instruction Address Compare 2 Event */ |
@@ -253,6 +263,7 @@ | |||
253 | #define ESR_BO 0x00020000 /* Byte Ordering */ | 263 | #define ESR_BO 0x00020000 /* Byte Ordering */ |
254 | 264 | ||
255 | /* Bit definitions related to the DBCR0. */ | 265 | /* Bit definitions related to the DBCR0. */ |
266 | #if defined(CONFIG_40x) | ||
256 | #define DBCR0_EDM 0x80000000 /* External Debug Mode */ | 267 | #define DBCR0_EDM 0x80000000 /* External Debug Mode */ |
257 | #define DBCR0_IDM 0x40000000 /* Internal Debug Mode */ | 268 | #define DBCR0_IDM 0x40000000 /* Internal Debug Mode */ |
258 | #define DBCR0_RST 0x30000000 /* all the bits in the RST field */ | 269 | #define DBCR0_RST 0x30000000 /* all the bits in the RST field */ |
@@ -261,20 +272,69 @@ | |||
261 | #define DBCR0_RST_CORE 0x10000000 /* Core Reset */ | 272 | #define DBCR0_RST_CORE 0x10000000 /* Core Reset */ |
262 | #define DBCR0_RST_NONE 0x00000000 /* No Reset */ | 273 | #define DBCR0_RST_NONE 0x00000000 /* No Reset */ |
263 | #define DBCR0_IC 0x08000000 /* Instruction Completion */ | 274 | #define DBCR0_IC 0x08000000 /* Instruction Completion */ |
275 | #define DBCR0_ICMP DBCR0_IC | ||
264 | #define DBCR0_BT 0x04000000 /* Branch Taken */ | 276 | #define DBCR0_BT 0x04000000 /* Branch Taken */ |
277 | #define DBCR0_BRT DBCR0_BT | ||
265 | #define DBCR0_EDE 0x02000000 /* Exception Debug Event */ | 278 | #define DBCR0_EDE 0x02000000 /* Exception Debug Event */ |
279 | #define DBCR0_IRPT DBCR0_EDE | ||
266 | #define DBCR0_TDE 0x01000000 /* TRAP Debug Event */ | 280 | #define DBCR0_TDE 0x01000000 /* TRAP Debug Event */ |
267 | #define DBCR0_IA1 0x00800000 /* Instr Addr compare 1 enable */ | 281 | #define DBCR0_IA1 0x00800000 /* Instr Addr compare 1 enable */ |
282 | #define DBCR0_IAC1 DBCR0_IA1 | ||
268 | #define DBCR0_IA2 0x00400000 /* Instr Addr compare 2 enable */ | 283 | #define DBCR0_IA2 0x00400000 /* Instr Addr compare 2 enable */ |
284 | #define DBCR0_IAC2 DBCR0_IA2 | ||
269 | #define DBCR0_IA12 0x00200000 /* Instr Addr 1-2 range enable */ | 285 | #define DBCR0_IA12 0x00200000 /* Instr Addr 1-2 range enable */ |
270 | #define DBCR0_IA12X 0x00100000 /* Instr Addr 1-2 range eXclusive */ | 286 | #define DBCR0_IA12X 0x00100000 /* Instr Addr 1-2 range eXclusive */ |
271 | #define DBCR0_IA3 0x00080000 /* Instr Addr compare 3 enable */ | 287 | #define DBCR0_IA3 0x00080000 /* Instr Addr compare 3 enable */ |
288 | #define DBCR0_IAC3 DBCR0_IA3 | ||
272 | #define DBCR0_IA4 0x00040000 /* Instr Addr compare 4 enable */ | 289 | #define DBCR0_IA4 0x00040000 /* Instr Addr compare 4 enable */ |
290 | #define DBCR0_IAC4 DBCR0_IA4 | ||
273 | #define DBCR0_IA34 0x00020000 /* Instr Addr 3-4 range Enable */ | 291 | #define DBCR0_IA34 0x00020000 /* Instr Addr 3-4 range Enable */ |
274 | #define DBCR0_IA34X 0x00010000 /* Instr Addr 3-4 range eXclusive */ | 292 | #define DBCR0_IA34X 0x00010000 /* Instr Addr 3-4 range eXclusive */ |
275 | #define DBCR0_IA12T 0x00008000 /* Instr Addr 1-2 range Toggle */ | 293 | #define DBCR0_IA12T 0x00008000 /* Instr Addr 1-2 range Toggle */ |
276 | #define DBCR0_IA34T 0x00004000 /* Instr Addr 3-4 range Toggle */ | 294 | #define DBCR0_IA34T 0x00004000 /* Instr Addr 3-4 range Toggle */ |
277 | #define DBCR0_FT 0x00000001 /* Freeze Timers on debug event */ | 295 | #define DBCR0_FT 0x00000001 /* Freeze Timers on debug event */ |
296 | #elif defined(CONFIG_BOOKE) | ||
297 | #define DBCR0_EDM 0x80000000 /* External Debug Mode */ | ||
298 | #define DBCR0_IDM 0x40000000 /* Internal Debug Mode */ | ||
299 | #define DBCR0_RST 0x30000000 /* all the bits in the RST field */ | ||
300 | /* DBCR0_RST_* is 44x specific and not followed in fsl booke */ | ||
301 | #define DBCR0_RST_SYSTEM 0x30000000 /* System Reset */ | ||
302 | #define DBCR0_RST_CHIP 0x20000000 /* Chip Reset */ | ||
303 | #define DBCR0_RST_CORE 0x10000000 /* Core Reset */ | ||
304 | #define DBCR0_RST_NONE 0x00000000 /* No Reset */ | ||
305 | #define DBCR0_ICMP 0x08000000 /* Instruction Completion */ | ||
306 | #define DBCR0_IC DBCR0_ICMP | ||
307 | #define DBCR0_BRT 0x04000000 /* Branch Taken */ | ||
308 | #define DBCR0_BT DBCR0_BRT | ||
309 | #define DBCR0_IRPT 0x02000000 /* Exception Debug Event */ | ||
310 | #define DBCR0_TDE 0x01000000 /* TRAP Debug Event */ | ||
311 | #define DBCR0_TIE DBCR0_TDE | ||
312 | #define DBCR0_IAC1 0x00800000 /* Instr Addr compare 1 enable */ | ||
313 | #define DBCR0_IAC2 0x00400000 /* Instr Addr compare 2 enable */ | ||
314 | #define DBCR0_IAC3 0x00200000 /* Instr Addr compare 3 enable */ | ||
315 | #define DBCR0_IAC4 0x00100000 /* Instr Addr compare 4 enable */ | ||
316 | #define DBCR0_DAC1R 0x00080000 /* DAC 1 Read enable */ | ||
317 | #define DBCR0_DAC1W 0x00040000 /* DAC 1 Write enable */ | ||
318 | #define DBCR0_DAC2R 0x00020000 /* DAC 2 Read enable */ | ||
319 | #define DBCR0_DAC2W 0x00010000 /* DAC 2 Write enable */ | ||
320 | #define DBCR0_RET 0x00008000 /* Return Debug Event */ | ||
321 | #define DBCR0_CIRPT 0x00000040 /* Critical Interrupt Taken Event */ | ||
322 | #define DBCR0_CRET 0x00000020 /* Critical Return Debug Event */ | ||
323 | #define DBCR0_FT 0x00000001 /* Freeze Timers on debug event */ | ||
324 | |||
325 | /* Bit definitions related to the DBCR1. */ | ||
326 | #define DBCR1_IAC12M 0x00800000 /* Instr Addr 1-2 range enable */ | ||
327 | #define DBCR1_IAC12MX 0x00C00000 /* Instr Addr 1-2 range eXclusive */ | ||
328 | #define DBCR1_IAC12AT 0x00010000 /* Instr Addr 1-2 range Toggle */ | ||
329 | #define DBCR1_IAC34M 0x00000080 /* Instr Addr 3-4 range enable */ | ||
330 | #define DBCR1_IAC34MX 0x000000C0 /* Instr Addr 3-4 range eXclusive */ | ||
331 | #define DBCR1_IAC34AT 0x00000001 /* Instr Addr 3-4 range Toggle */ | ||
332 | |||
333 | /* Bit definitions related to the DBCR2. */ | ||
334 | #define DBCR2_DAC12M 0x00800000 /* DAC 1-2 range enable */ | ||
335 | #define DBCR2_DAC12MX 0x00C00000 /* DAC 1-2 range eXclusive */ | ||
336 | #define DBCR2_DAC12A 0x00200000 /* DAC 1-2 Asynchronous */ | ||
337 | #endif | ||
278 | 338 | ||
279 | /* Bit definitions related to the TCR. */ | 339 | /* Bit definitions related to the TCR. */ |
280 | #define TCR_WP(x) (((x)&0x3)<<30) /* WDT Period */ | 340 | #define TCR_WP(x) (((x)&0x3)<<30) /* WDT Period */ |
@@ -336,6 +396,20 @@ | |||
336 | #define L1CSR1_ICFI 0x00000002 /* Instr Cache Flash Invalidate */ | 396 | #define L1CSR1_ICFI 0x00000002 /* Instr Cache Flash Invalidate */ |
337 | #define L1CSR1_ICE 0x00000001 /* Instr Cache Enable */ | 397 | #define L1CSR1_ICE 0x00000001 /* Instr Cache Enable */ |
338 | 398 | ||
399 | /* Bit definitions for L2CSR0. */ | ||
400 | #define L2CSR0_L2E 0x80000000 /* L2 Cache Enable */ | ||
401 | #define L2CSR0_L2PE 0x40000000 /* L2 Cache Parity/ECC Enable */ | ||
402 | #define L2CSR0_L2WP 0x1c000000 /* L2 I/D Way Partioning */ | ||
403 | #define L2CSR0_L2CM 0x03000000 /* L2 Cache Coherency Mode */ | ||
404 | #define L2CSR0_L2FI 0x00200000 /* L2 Cache Flash Invalidate */ | ||
405 | #define L2CSR0_L2IO 0x00100000 /* L2 Cache Instruction Only */ | ||
406 | #define L2CSR0_L2DO 0x00010000 /* L2 Cache Data Only */ | ||
407 | #define L2CSR0_L2REP 0x00003000 /* L2 Line Replacement Algo */ | ||
408 | #define L2CSR0_L2FL 0x00000800 /* L2 Cache Flush */ | ||
409 | #define L2CSR0_L2LFC 0x00000400 /* L2 Cache Lock Flash Clear */ | ||
410 | #define L2CSR0_L2LOA 0x00000080 /* L2 Cache Lock Overflow Allocate */ | ||
411 | #define L2CSR0_L2LO 0x00000020 /* L2 Cache Lock Overflow */ | ||
412 | |||
339 | /* Bit definitions for SGR. */ | 413 | /* Bit definitions for SGR. */ |
340 | #define SGR_NORMAL 0 /* Speculative fetching allowed. */ | 414 | #define SGR_NORMAL 0 /* Speculative fetching allowed. */ |
341 | #define SGR_GUARDED 1 /* Speculative fetching disallowed. */ | 415 | #define SGR_GUARDED 1 /* Speculative fetching disallowed. */ |
diff --git a/include/asm-powerpc/sigcontext.h b/include/asm-powerpc/sigcontext.h index 165d630e1cf3..9c1f24fd5d11 100644 --- a/include/asm-powerpc/sigcontext.h +++ b/include/asm-powerpc/sigcontext.h | |||
@@ -43,9 +43,44 @@ struct sigcontext { | |||
43 | * it must be copied via a vector register to/from storage) or as a word. | 43 | * it must be copied via a vector register to/from storage) or as a word. |
44 | * The entry with index 33 contains the vrsave as the first word (offset 0) | 44 | * The entry with index 33 contains the vrsave as the first word (offset 0) |
45 | * within the quadword. | 45 | * within the quadword. |
46 | * | ||
47 | * Part of the VSX data is stored here also by extending vmx_restore | ||
48 | * by an additional 32 double words. Architecturally the layout of | ||
49 | * the VSR registers and how they overlap on top of the legacy FPR and | ||
50 | * VR registers is shown below: | ||
51 | * | ||
52 | * VSR doubleword 0 VSR doubleword 1 | ||
53 | * ---------------------------------------------------------------- | ||
54 | * VSR[0] | FPR[0] | | | ||
55 | * ---------------------------------------------------------------- | ||
56 | * VSR[1] | FPR[1] | | | ||
57 | * ---------------------------------------------------------------- | ||
58 | * | ... | | | ||
59 | * | ... | | | ||
60 | * ---------------------------------------------------------------- | ||
61 | * VSR[30] | FPR[30] | | | ||
62 | * ---------------------------------------------------------------- | ||
63 | * VSR[31] | FPR[31] | | | ||
64 | * ---------------------------------------------------------------- | ||
65 | * VSR[32] | VR[0] | | ||
66 | * ---------------------------------------------------------------- | ||
67 | * VSR[33] | VR[1] | | ||
68 | * ---------------------------------------------------------------- | ||
69 | * | ... | | ||
70 | * | ... | | ||
71 | * ---------------------------------------------------------------- | ||
72 | * VSR[62] | VR[30] | | ||
73 | * ---------------------------------------------------------------- | ||
74 | * VSR[63] | VR[31] | | ||
75 | * ---------------------------------------------------------------- | ||
76 | * | ||
77 | * FPR/VSR 0-31 doubleword 0 is stored in fp_regs, and VMX/VSR 32-63 | ||
78 | * is stored at the start of vmx_reserve. vmx_reserve is extended for | ||
79 | * backwards compatility to store VSR 0-31 doubleword 1 after the VMX | ||
80 | * registers and vscr/vrsave. | ||
46 | */ | 81 | */ |
47 | elf_vrreg_t __user *v_regs; | 82 | elf_vrreg_t __user *v_regs; |
48 | long vmx_reserve[ELF_NVRREG+ELF_NVRREG+1]; | 83 | long vmx_reserve[ELF_NVRREG+ELF_NVRREG+32+1]; |
49 | #endif | 84 | #endif |
50 | }; | 85 | }; |
51 | 86 | ||
diff --git a/include/asm-powerpc/smp.h b/include/asm-powerpc/smp.h index 505f35bacaa9..416d4c288cea 100644 --- a/include/asm-powerpc/smp.h +++ b/include/asm-powerpc/smp.h | |||
@@ -37,6 +37,8 @@ extern void cpu_die(void); | |||
37 | extern void smp_send_debugger_break(int cpu); | 37 | extern void smp_send_debugger_break(int cpu); |
38 | extern void smp_message_recv(int); | 38 | extern void smp_message_recv(int); |
39 | 39 | ||
40 | DECLARE_PER_CPU(unsigned int, pvr); | ||
41 | |||
40 | #ifdef CONFIG_HOTPLUG_CPU | 42 | #ifdef CONFIG_HOTPLUG_CPU |
41 | extern void fixup_irqs(cpumask_t map); | 43 | extern void fixup_irqs(cpumask_t map); |
42 | int generic_cpu_disable(void); | 44 | int generic_cpu_disable(void); |
@@ -67,10 +69,7 @@ DECLARE_PER_CPU(cpumask_t, cpu_sibling_map); | |||
67 | * in /proc/interrupts will be wrong!!! --Troy */ | 69 | * in /proc/interrupts will be wrong!!! --Troy */ |
68 | #define PPC_MSG_CALL_FUNCTION 0 | 70 | #define PPC_MSG_CALL_FUNCTION 0 |
69 | #define PPC_MSG_RESCHEDULE 1 | 71 | #define PPC_MSG_RESCHEDULE 1 |
70 | /* This is unused now */ | 72 | #define PPC_MSG_CALL_FUNC_SINGLE 2 |
71 | #if 0 | ||
72 | #define PPC_MSG_MIGRATE_TASK 2 | ||
73 | #endif | ||
74 | #define PPC_MSG_DEBUGGER_BREAK 3 | 73 | #define PPC_MSG_DEBUGGER_BREAK 3 |
75 | 74 | ||
76 | void smp_init_iSeries(void); | 75 | void smp_init_iSeries(void); |
@@ -117,6 +116,9 @@ extern void smp_generic_take_timebase(void); | |||
117 | 116 | ||
118 | extern struct smp_ops_t *smp_ops; | 117 | extern struct smp_ops_t *smp_ops; |
119 | 118 | ||
119 | extern void arch_send_call_function_single_ipi(int cpu); | ||
120 | extern void arch_send_call_function_ipi(cpumask_t mask); | ||
121 | |||
120 | #endif /* __ASSEMBLY__ */ | 122 | #endif /* __ASSEMBLY__ */ |
121 | 123 | ||
122 | #endif /* __KERNEL__ */ | 124 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/sparsemem.h b/include/asm-powerpc/sparsemem.h index 9aea8e9f0bd1..54a47ea2c3aa 100644 --- a/include/asm-powerpc/sparsemem.h +++ b/include/asm-powerpc/sparsemem.h | |||
@@ -13,6 +13,8 @@ | |||
13 | #define MAX_PHYSADDR_BITS 44 | 13 | #define MAX_PHYSADDR_BITS 44 |
14 | #define MAX_PHYSMEM_BITS 44 | 14 | #define MAX_PHYSMEM_BITS 44 |
15 | 15 | ||
16 | #endif /* CONFIG_SPARSEMEM */ | ||
17 | |||
16 | #ifdef CONFIG_MEMORY_HOTPLUG | 18 | #ifdef CONFIG_MEMORY_HOTPLUG |
17 | extern void create_section_mapping(unsigned long start, unsigned long end); | 19 | extern void create_section_mapping(unsigned long start, unsigned long end); |
18 | extern int remove_section_mapping(unsigned long start, unsigned long end); | 20 | extern int remove_section_mapping(unsigned long start, unsigned long end); |
@@ -26,7 +28,5 @@ static inline int hot_add_scn_to_nid(unsigned long scn_addr) | |||
26 | #endif /* CONFIG_NUMA */ | 28 | #endif /* CONFIG_NUMA */ |
27 | #endif /* CONFIG_MEMORY_HOTPLUG */ | 29 | #endif /* CONFIG_MEMORY_HOTPLUG */ |
28 | 30 | ||
29 | #endif /* CONFIG_SPARSEMEM */ | ||
30 | |||
31 | #endif /* __KERNEL__ */ | 31 | #endif /* __KERNEL__ */ |
32 | #endif /* _ASM_POWERPC_SPARSEMEM_H */ | 32 | #endif /* _ASM_POWERPC_SPARSEMEM_H */ |
diff --git a/include/asm-powerpc/spinlock.h b/include/asm-powerpc/spinlock.h index 258c93993190..f56a843f4705 100644 --- a/include/asm-powerpc/spinlock.h +++ b/include/asm-powerpc/spinlock.h | |||
@@ -54,7 +54,7 @@ | |||
54 | * This returns the old value in the lock, so we succeeded | 54 | * This returns the old value in the lock, so we succeeded |
55 | * in getting the lock if the return value is 0. | 55 | * in getting the lock if the return value is 0. |
56 | */ | 56 | */ |
57 | static __inline__ unsigned long __spin_trylock(raw_spinlock_t *lock) | 57 | static inline unsigned long __spin_trylock(raw_spinlock_t *lock) |
58 | { | 58 | { |
59 | unsigned long tmp, token; | 59 | unsigned long tmp, token; |
60 | 60 | ||
@@ -73,7 +73,7 @@ static __inline__ unsigned long __spin_trylock(raw_spinlock_t *lock) | |||
73 | return tmp; | 73 | return tmp; |
74 | } | 74 | } |
75 | 75 | ||
76 | static int __inline__ __raw_spin_trylock(raw_spinlock_t *lock) | 76 | static inline int __raw_spin_trylock(raw_spinlock_t *lock) |
77 | { | 77 | { |
78 | CLEAR_IO_SYNC; | 78 | CLEAR_IO_SYNC; |
79 | return __spin_trylock(lock) == 0; | 79 | return __spin_trylock(lock) == 0; |
@@ -104,7 +104,7 @@ extern void __rw_yield(raw_rwlock_t *lock); | |||
104 | #define SHARED_PROCESSOR 0 | 104 | #define SHARED_PROCESSOR 0 |
105 | #endif | 105 | #endif |
106 | 106 | ||
107 | static void __inline__ __raw_spin_lock(raw_spinlock_t *lock) | 107 | static inline void __raw_spin_lock(raw_spinlock_t *lock) |
108 | { | 108 | { |
109 | CLEAR_IO_SYNC; | 109 | CLEAR_IO_SYNC; |
110 | while (1) { | 110 | while (1) { |
@@ -119,7 +119,8 @@ static void __inline__ __raw_spin_lock(raw_spinlock_t *lock) | |||
119 | } | 119 | } |
120 | } | 120 | } |
121 | 121 | ||
122 | static void __inline__ __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) | 122 | static inline |
123 | void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) | ||
123 | { | 124 | { |
124 | unsigned long flags_dis; | 125 | unsigned long flags_dis; |
125 | 126 | ||
@@ -139,7 +140,7 @@ static void __inline__ __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long | |||
139 | } | 140 | } |
140 | } | 141 | } |
141 | 142 | ||
142 | static __inline__ void __raw_spin_unlock(raw_spinlock_t *lock) | 143 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) |
143 | { | 144 | { |
144 | SYNC_IO; | 145 | SYNC_IO; |
145 | __asm__ __volatile__("# __raw_spin_unlock\n\t" | 146 | __asm__ __volatile__("# __raw_spin_unlock\n\t" |
@@ -180,7 +181,7 @@ extern void __raw_spin_unlock_wait(raw_spinlock_t *lock); | |||
180 | * This returns the old value in the lock + 1, | 181 | * This returns the old value in the lock + 1, |
181 | * so we got a read lock if the return value is > 0. | 182 | * so we got a read lock if the return value is > 0. |
182 | */ | 183 | */ |
183 | static long __inline__ __read_trylock(raw_rwlock_t *rw) | 184 | static inline long __read_trylock(raw_rwlock_t *rw) |
184 | { | 185 | { |
185 | long tmp; | 186 | long tmp; |
186 | 187 | ||
@@ -204,7 +205,7 @@ static long __inline__ __read_trylock(raw_rwlock_t *rw) | |||
204 | * This returns the old value in the lock, | 205 | * This returns the old value in the lock, |
205 | * so we got the write lock if the return value is 0. | 206 | * so we got the write lock if the return value is 0. |
206 | */ | 207 | */ |
207 | static __inline__ long __write_trylock(raw_rwlock_t *rw) | 208 | static inline long __write_trylock(raw_rwlock_t *rw) |
208 | { | 209 | { |
209 | long tmp, token; | 210 | long tmp, token; |
210 | 211 | ||
@@ -224,7 +225,7 @@ static __inline__ long __write_trylock(raw_rwlock_t *rw) | |||
224 | return tmp; | 225 | return tmp; |
225 | } | 226 | } |
226 | 227 | ||
227 | static void __inline__ __raw_read_lock(raw_rwlock_t *rw) | 228 | static inline void __raw_read_lock(raw_rwlock_t *rw) |
228 | { | 229 | { |
229 | while (1) { | 230 | while (1) { |
230 | if (likely(__read_trylock(rw) > 0)) | 231 | if (likely(__read_trylock(rw) > 0)) |
@@ -238,7 +239,7 @@ static void __inline__ __raw_read_lock(raw_rwlock_t *rw) | |||
238 | } | 239 | } |
239 | } | 240 | } |
240 | 241 | ||
241 | static void __inline__ __raw_write_lock(raw_rwlock_t *rw) | 242 | static inline void __raw_write_lock(raw_rwlock_t *rw) |
242 | { | 243 | { |
243 | while (1) { | 244 | while (1) { |
244 | if (likely(__write_trylock(rw) == 0)) | 245 | if (likely(__write_trylock(rw) == 0)) |
@@ -252,17 +253,17 @@ static void __inline__ __raw_write_lock(raw_rwlock_t *rw) | |||
252 | } | 253 | } |
253 | } | 254 | } |
254 | 255 | ||
255 | static int __inline__ __raw_read_trylock(raw_rwlock_t *rw) | 256 | static inline int __raw_read_trylock(raw_rwlock_t *rw) |
256 | { | 257 | { |
257 | return __read_trylock(rw) > 0; | 258 | return __read_trylock(rw) > 0; |
258 | } | 259 | } |
259 | 260 | ||
260 | static int __inline__ __raw_write_trylock(raw_rwlock_t *rw) | 261 | static inline int __raw_write_trylock(raw_rwlock_t *rw) |
261 | { | 262 | { |
262 | return __write_trylock(rw) == 0; | 263 | return __write_trylock(rw) == 0; |
263 | } | 264 | } |
264 | 265 | ||
265 | static void __inline__ __raw_read_unlock(raw_rwlock_t *rw) | 266 | static inline void __raw_read_unlock(raw_rwlock_t *rw) |
266 | { | 267 | { |
267 | long tmp; | 268 | long tmp; |
268 | 269 | ||
@@ -279,7 +280,7 @@ static void __inline__ __raw_read_unlock(raw_rwlock_t *rw) | |||
279 | : "cr0", "memory"); | 280 | : "cr0", "memory"); |
280 | } | 281 | } |
281 | 282 | ||
282 | static __inline__ void __raw_write_unlock(raw_rwlock_t *rw) | 283 | static inline void __raw_write_unlock(raw_rwlock_t *rw) |
283 | { | 284 | { |
284 | __asm__ __volatile__("# write_unlock\n\t" | 285 | __asm__ __volatile__("# write_unlock\n\t" |
285 | LWSYNC_ON_SMP: : :"memory"); | 286 | LWSYNC_ON_SMP: : :"memory"); |
diff --git a/include/asm-powerpc/spu.h b/include/asm-powerpc/spu.h index 99348c1f4cab..8b2eb044270a 100644 --- a/include/asm-powerpc/spu.h +++ b/include/asm-powerpc/spu.h | |||
@@ -191,6 +191,7 @@ struct cbe_spu_info { | |||
191 | struct list_head spus; | 191 | struct list_head spus; |
192 | int n_spus; | 192 | int n_spus; |
193 | int nr_active; | 193 | int nr_active; |
194 | atomic_t busy_spus; | ||
194 | atomic_t reserved_spus; | 195 | atomic_t reserved_spus; |
195 | }; | 196 | }; |
196 | 197 | ||
diff --git a/include/asm-powerpc/synch.h b/include/asm-powerpc/synch.h index 2cda3c38a9fa..45963e80f557 100644 --- a/include/asm-powerpc/synch.h +++ b/include/asm-powerpc/synch.h | |||
@@ -3,34 +3,42 @@ | |||
3 | #ifdef __KERNEL__ | 3 | #ifdef __KERNEL__ |
4 | 4 | ||
5 | #include <linux/stringify.h> | 5 | #include <linux/stringify.h> |
6 | #include <asm/feature-fixups.h> | ||
6 | 7 | ||
7 | #ifdef __powerpc64__ | 8 | #ifndef __ASSEMBLY__ |
8 | #define __SUBARCH_HAS_LWSYNC | 9 | extern unsigned int __start___lwsync_fixup, __stop___lwsync_fixup; |
9 | #endif | 10 | extern void do_lwsync_fixups(unsigned long value, void *fixup_start, |
11 | void *fixup_end); | ||
12 | |||
13 | static inline void eieio(void) | ||
14 | { | ||
15 | __asm__ __volatile__ ("eieio" : : : "memory"); | ||
16 | } | ||
17 | |||
18 | static inline void isync(void) | ||
19 | { | ||
20 | __asm__ __volatile__ ("isync" : : : "memory"); | ||
21 | } | ||
22 | #endif /* __ASSEMBLY__ */ | ||
10 | 23 | ||
11 | #ifdef __SUBARCH_HAS_LWSYNC | 24 | #if defined(__powerpc64__) |
12 | # define LWSYNC lwsync | 25 | # define LWSYNC lwsync |
26 | #elif defined(CONFIG_E500) | ||
27 | # define LWSYNC \ | ||
28 | START_LWSYNC_SECTION(96); \ | ||
29 | sync; \ | ||
30 | MAKE_LWSYNC_SECTION_ENTRY(96, __lwsync_fixup); | ||
13 | #else | 31 | #else |
14 | # define LWSYNC sync | 32 | # define LWSYNC sync |
15 | #endif | 33 | #endif |
16 | 34 | ||
17 | #ifdef CONFIG_SMP | 35 | #ifdef CONFIG_SMP |
18 | #define ISYNC_ON_SMP "\n\tisync\n" | 36 | #define ISYNC_ON_SMP "\n\tisync\n" |
19 | #define LWSYNC_ON_SMP __stringify(LWSYNC) "\n" | 37 | #define LWSYNC_ON_SMP stringify_in_c(LWSYNC) "\n" |
20 | #else | 38 | #else |
21 | #define ISYNC_ON_SMP | 39 | #define ISYNC_ON_SMP |
22 | #define LWSYNC_ON_SMP | 40 | #define LWSYNC_ON_SMP |
23 | #endif | 41 | #endif |
24 | 42 | ||
25 | static inline void eieio(void) | ||
26 | { | ||
27 | __asm__ __volatile__ ("eieio" : : : "memory"); | ||
28 | } | ||
29 | |||
30 | static inline void isync(void) | ||
31 | { | ||
32 | __asm__ __volatile__ ("isync" : : : "memory"); | ||
33 | } | ||
34 | |||
35 | #endif /* __KERNEL__ */ | 43 | #endif /* __KERNEL__ */ |
36 | #endif /* _ASM_POWERPC_SYNCH_H */ | 44 | #endif /* _ASM_POWERPC_SYNCH_H */ |
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h index 5235f875b932..e6e25e2364eb 100644 --- a/include/asm-powerpc/system.h +++ b/include/asm-powerpc/system.h | |||
@@ -30,8 +30,8 @@ | |||
30 | * | 30 | * |
31 | * For wmb(), we use sync since wmb is used in drivers to order | 31 | * For wmb(), we use sync since wmb is used in drivers to order |
32 | * stores to system memory with respect to writes to the device. | 32 | * stores to system memory with respect to writes to the device. |
33 | * However, smp_wmb() can be a lighter-weight eieio barrier on | 33 | * However, smp_wmb() can be a lighter-weight lwsync or eieio barrier |
34 | * SMP since it is only used to order updates to system memory. | 34 | * on SMP since it is only used to order updates to system memory. |
35 | */ | 35 | */ |
36 | #define mb() __asm__ __volatile__ ("sync" : : : "memory") | 36 | #define mb() __asm__ __volatile__ ("sync" : : : "memory") |
37 | #define rmb() __asm__ __volatile__ ("sync" : : : "memory") | 37 | #define rmb() __asm__ __volatile__ ("sync" : : : "memory") |
@@ -43,9 +43,16 @@ | |||
43 | #ifdef __KERNEL__ | 43 | #ifdef __KERNEL__ |
44 | #define AT_VECTOR_SIZE_ARCH 6 /* entries in ARCH_DLINFO */ | 44 | #define AT_VECTOR_SIZE_ARCH 6 /* entries in ARCH_DLINFO */ |
45 | #ifdef CONFIG_SMP | 45 | #ifdef CONFIG_SMP |
46 | |||
47 | #ifdef __SUBARCH_HAS_LWSYNC | ||
48 | # define SMPWMB lwsync | ||
49 | #else | ||
50 | # define SMPWMB eieio | ||
51 | #endif | ||
52 | |||
46 | #define smp_mb() mb() | 53 | #define smp_mb() mb() |
47 | #define smp_rmb() rmb() | 54 | #define smp_rmb() rmb() |
48 | #define smp_wmb() eieio() | 55 | #define smp_wmb() __asm__ __volatile__ (__stringify(SMPWMB) : : :"memory") |
49 | #define smp_read_barrier_depends() read_barrier_depends() | 56 | #define smp_read_barrier_depends() read_barrier_depends() |
50 | #else | 57 | #else |
51 | #define smp_mb() barrier() | 58 | #define smp_mb() barrier() |
@@ -132,6 +139,8 @@ extern void enable_kernel_altivec(void); | |||
132 | extern void giveup_altivec(struct task_struct *); | 139 | extern void giveup_altivec(struct task_struct *); |
133 | extern void load_up_altivec(struct task_struct *); | 140 | extern void load_up_altivec(struct task_struct *); |
134 | extern int emulate_altivec(struct pt_regs *); | 141 | extern int emulate_altivec(struct pt_regs *); |
142 | extern void __giveup_vsx(struct task_struct *); | ||
143 | extern void giveup_vsx(struct task_struct *); | ||
135 | extern void enable_kernel_spe(void); | 144 | extern void enable_kernel_spe(void); |
136 | extern void giveup_spe(struct task_struct *); | 145 | extern void giveup_spe(struct task_struct *); |
137 | extern void load_up_spe(struct task_struct *); | 146 | extern void load_up_spe(struct task_struct *); |
@@ -155,6 +164,14 @@ static inline void flush_altivec_to_thread(struct task_struct *t) | |||
155 | } | 164 | } |
156 | #endif | 165 | #endif |
157 | 166 | ||
167 | #ifdef CONFIG_VSX | ||
168 | extern void flush_vsx_to_thread(struct task_struct *); | ||
169 | #else | ||
170 | static inline void flush_vsx_to_thread(struct task_struct *t) | ||
171 | { | ||
172 | } | ||
173 | #endif | ||
174 | |||
158 | #ifdef CONFIG_SPE | 175 | #ifdef CONFIG_SPE |
159 | extern void flush_spe_to_thread(struct task_struct *); | 176 | extern void flush_spe_to_thread(struct task_struct *); |
160 | #else | 177 | #else |
@@ -190,6 +207,7 @@ extern struct task_struct *_switch(struct thread_struct *prev, | |||
190 | 207 | ||
191 | extern unsigned int rtas_data; | 208 | extern unsigned int rtas_data; |
192 | extern int mem_init_done; /* set on boot once kmalloc can be called */ | 209 | extern int mem_init_done; /* set on boot once kmalloc can be called */ |
210 | extern int init_bootmem_done; /* set on !NUMA once bootmem is available */ | ||
193 | extern unsigned long memory_limit; | 211 | extern unsigned long memory_limit; |
194 | extern unsigned long klimit; | 212 | extern unsigned long klimit; |
195 | 213 | ||
@@ -518,54 +536,6 @@ extern void reloc_got2(unsigned long); | |||
518 | 536 | ||
519 | #define PTRRELOC(x) ((typeof(x)) add_reloc_offset((unsigned long)(x))) | 537 | #define PTRRELOC(x) ((typeof(x)) add_reloc_offset((unsigned long)(x))) |
520 | 538 | ||
521 | static inline void create_instruction(unsigned long addr, unsigned int instr) | ||
522 | { | ||
523 | unsigned int *p; | ||
524 | p = (unsigned int *)addr; | ||
525 | *p = instr; | ||
526 | asm ("dcbst 0, %0; sync; icbi 0,%0; sync; isync" : : "r" (p)); | ||
527 | } | ||
528 | |||
529 | /* Flags for create_branch: | ||
530 | * "b" == create_branch(addr, target, 0); | ||
531 | * "ba" == create_branch(addr, target, BRANCH_ABSOLUTE); | ||
532 | * "bl" == create_branch(addr, target, BRANCH_SET_LINK); | ||
533 | * "bla" == create_branch(addr, target, BRANCH_ABSOLUTE | BRANCH_SET_LINK); | ||
534 | */ | ||
535 | #define BRANCH_SET_LINK 0x1 | ||
536 | #define BRANCH_ABSOLUTE 0x2 | ||
537 | |||
538 | static inline void create_branch(unsigned long addr, | ||
539 | unsigned long target, int flags) | ||
540 | { | ||
541 | unsigned int instruction; | ||
542 | |||
543 | if (! (flags & BRANCH_ABSOLUTE)) | ||
544 | target = target - addr; | ||
545 | |||
546 | /* Mask out the flags and target, so they don't step on each other. */ | ||
547 | instruction = 0x48000000 | (flags & 0x3) | (target & 0x03FFFFFC); | ||
548 | |||
549 | create_instruction(addr, instruction); | ||
550 | } | ||
551 | |||
552 | static inline void create_function_call(unsigned long addr, void * func) | ||
553 | { | ||
554 | unsigned long func_addr; | ||
555 | |||
556 | #ifdef CONFIG_PPC64 | ||
557 | /* | ||
558 | * On PPC64 the function pointer actually points to the function's | ||
559 | * descriptor. The first entry in the descriptor is the address | ||
560 | * of the function text. | ||
561 | */ | ||
562 | func_addr = *(unsigned long *)func; | ||
563 | #else | ||
564 | func_addr = (unsigned long)func; | ||
565 | #endif | ||
566 | create_branch(addr, func_addr, BRANCH_SET_LINK); | ||
567 | } | ||
568 | |||
569 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 539 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING |
570 | extern void account_system_vtime(struct task_struct *); | 540 | extern void account_system_vtime(struct task_struct *); |
571 | #endif | 541 | #endif |
diff --git a/include/asm-powerpc/thread_info.h b/include/asm-powerpc/thread_info.h index d030f5ce39ad..b705c2a7651a 100644 --- a/include/asm-powerpc/thread_info.h +++ b/include/asm-powerpc/thread_info.h | |||
@@ -116,7 +116,6 @@ static inline struct thread_info *current_thread_info(void) | |||
116 | #define TIF_SECCOMP 10 /* secure computing */ | 116 | #define TIF_SECCOMP 10 /* secure computing */ |
117 | #define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */ | 117 | #define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */ |
118 | #define TIF_NOERROR 12 /* Force successful syscall return */ | 118 | #define TIF_NOERROR 12 /* Force successful syscall return */ |
119 | #define TIF_RESTORE_SIGMASK 13 /* Restore signal mask in do_signal */ | ||
120 | #define TIF_FREEZE 14 /* Freezing for suspend */ | 119 | #define TIF_FREEZE 14 /* Freezing for suspend */ |
121 | #define TIF_RUNLATCH 15 /* Is the runlatch enabled? */ | 120 | #define TIF_RUNLATCH 15 /* Is the runlatch enabled? */ |
122 | #define TIF_ABI_PENDING 16 /* 32/64 bit switch needed */ | 121 | #define TIF_ABI_PENDING 16 /* 32/64 bit switch needed */ |
@@ -134,21 +133,33 @@ static inline struct thread_info *current_thread_info(void) | |||
134 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) | 133 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) |
135 | #define _TIF_RESTOREALL (1<<TIF_RESTOREALL) | 134 | #define _TIF_RESTOREALL (1<<TIF_RESTOREALL) |
136 | #define _TIF_NOERROR (1<<TIF_NOERROR) | 135 | #define _TIF_NOERROR (1<<TIF_NOERROR) |
137 | #define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) | ||
138 | #define _TIF_FREEZE (1<<TIF_FREEZE) | 136 | #define _TIF_FREEZE (1<<TIF_FREEZE) |
139 | #define _TIF_RUNLATCH (1<<TIF_RUNLATCH) | 137 | #define _TIF_RUNLATCH (1<<TIF_RUNLATCH) |
140 | #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) | 138 | #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) |
141 | #define _TIF_SYSCALL_T_OR_A (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP) | 139 | #define _TIF_SYSCALL_T_OR_A (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP) |
142 | 140 | ||
143 | #define _TIF_USER_WORK_MASK ( _TIF_SIGPENDING | \ | 141 | #define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED) |
144 | _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK) | ||
145 | #define _TIF_PERSYSCALL_MASK (_TIF_RESTOREALL|_TIF_NOERROR) | 142 | #define _TIF_PERSYSCALL_MASK (_TIF_RESTOREALL|_TIF_NOERROR) |
146 | 143 | ||
147 | /* Bits in local_flags */ | 144 | /* Bits in local_flags */ |
148 | /* Don't move TLF_NAPPING without adjusting the code in entry_32.S */ | 145 | /* Don't move TLF_NAPPING without adjusting the code in entry_32.S */ |
149 | #define TLF_NAPPING 0 /* idle thread enabled NAP mode */ | 146 | #define TLF_NAPPING 0 /* idle thread enabled NAP mode */ |
147 | #define TLF_SLEEPING 1 /* suspend code enabled SLEEP mode */ | ||
148 | #define TLF_RESTORE_SIGMASK 2 /* Restore signal mask in do_signal */ | ||
150 | 149 | ||
151 | #define _TLF_NAPPING (1 << TLF_NAPPING) | 150 | #define _TLF_NAPPING (1 << TLF_NAPPING) |
151 | #define _TLF_SLEEPING (1 << TLF_SLEEPING) | ||
152 | #define _TLF_RESTORE_SIGMASK (1 << TLF_RESTORE_SIGMASK) | ||
153 | |||
154 | #ifndef __ASSEMBLY__ | ||
155 | #define HAVE_SET_RESTORE_SIGMASK 1 | ||
156 | static inline void set_restore_sigmask(void) | ||
157 | { | ||
158 | struct thread_info *ti = current_thread_info(); | ||
159 | ti->local_flags |= _TLF_RESTORE_SIGMASK; | ||
160 | set_bit(TIF_SIGPENDING, &ti->flags); | ||
161 | } | ||
162 | #endif /* !__ASSEMBLY__ */ | ||
152 | 163 | ||
153 | #endif /* __KERNEL__ */ | 164 | #endif /* __KERNEL__ */ |
154 | 165 | ||
diff --git a/include/asm-powerpc/time.h b/include/asm-powerpc/time.h index ce5de6e0e690..febd581ec9b0 100644 --- a/include/asm-powerpc/time.h +++ b/include/asm-powerpc/time.h | |||
@@ -33,6 +33,7 @@ extern unsigned tb_to_us; | |||
33 | 33 | ||
34 | struct rtc_time; | 34 | struct rtc_time; |
35 | extern void to_tm(int tim, struct rtc_time * tm); | 35 | extern void to_tm(int tim, struct rtc_time * tm); |
36 | extern void GregorianDay(struct rtc_time *tm); | ||
36 | extern time_t last_rtc_update; | 37 | extern time_t last_rtc_update; |
37 | 38 | ||
38 | extern void generic_calibrate_decr(void); | 39 | extern void generic_calibrate_decr(void); |
diff --git a/include/asm-powerpc/timex.h b/include/asm-powerpc/timex.h index 92dedde761d1..c55e14f7ef44 100644 --- a/include/asm-powerpc/timex.h +++ b/include/asm-powerpc/timex.h | |||
@@ -38,6 +38,8 @@ static inline cycles_t get_cycles(void) | |||
38 | " .long 0\n" | 38 | " .long 0\n" |
39 | " .long 97b-98b\n" | 39 | " .long 97b-98b\n" |
40 | " .long 99b-98b\n" | 40 | " .long 99b-98b\n" |
41 | " .long 0\n" | ||
42 | " .long 0\n" | ||
41 | ".previous" | 43 | ".previous" |
42 | : "=r" (ret) : "i" (CPU_FTR_601)); | 44 | : "=r" (ret) : "i" (CPU_FTR_601)); |
43 | return ret; | 45 | return ret; |
diff --git a/include/asm-powerpc/xmon.h b/include/asm-powerpc/xmon.h index 88320a05f0a8..5eb8e599e5cc 100644 --- a/include/asm-powerpc/xmon.h +++ b/include/asm-powerpc/xmon.h | |||
@@ -12,13 +12,22 @@ | |||
12 | 12 | ||
13 | #ifdef __KERNEL__ | 13 | #ifdef __KERNEL__ |
14 | 14 | ||
15 | #include <linux/irqreturn.h> | ||
16 | |||
15 | #ifdef CONFIG_XMON | 17 | #ifdef CONFIG_XMON |
16 | extern void xmon_setup(void); | 18 | extern void xmon_setup(void); |
17 | extern void xmon_register_spus(struct list_head *list); | 19 | extern void xmon_register_spus(struct list_head *list); |
20 | struct pt_regs; | ||
21 | extern int xmon(struct pt_regs *excp); | ||
22 | extern irqreturn_t xmon_irq(int, void *); | ||
18 | #else | 23 | #else |
19 | static inline void xmon_setup(void) { }; | 24 | static inline void xmon_setup(void) { }; |
20 | static inline void xmon_register_spus(struct list_head *list) { }; | 25 | static inline void xmon_register_spus(struct list_head *list) { }; |
21 | #endif | 26 | #endif |
22 | 27 | ||
28 | #if defined(CONFIG_XMON) && defined(CONFIG_SMP) | ||
29 | extern int cpus_are_in_xmon(void); | ||
30 | #endif | ||
31 | |||
23 | #endif /* __KERNEL __ */ | 32 | #endif /* __KERNEL __ */ |
24 | #endif /* __ASM_POWERPC_XMON_H */ | 33 | #endif /* __ASM_POWERPC_XMON_H */ |
diff --git a/include/asm-ppc/8xx_immap.h b/include/asm-ppc/8xx_immap.h deleted file mode 100644 index 4b0e15206006..000000000000 --- a/include/asm-ppc/8xx_immap.h +++ /dev/null | |||
@@ -1,564 +0,0 @@ | |||
1 | /* | ||
2 | * MPC8xx Internal Memory Map | ||
3 | * Copyright (c) 1997 Dan Malek (dmalek@jlc.net) | ||
4 | * | ||
5 | * The I/O on the MPC860 is comprised of blocks of special registers | ||
6 | * and the dual port ram for the Communication Processor Module. | ||
7 | * Within this space are functional units such as the SIU, memory | ||
8 | * controller, system timers, and other control functions. It is | ||
9 | * a combination that I found difficult to separate into logical | ||
10 | * functional files.....but anyone else is welcome to try. -- Dan | ||
11 | */ | ||
12 | #ifdef __KERNEL__ | ||
13 | #ifndef __IMMAP_8XX__ | ||
14 | #define __IMMAP_8XX__ | ||
15 | |||
16 | /* System configuration registers. | ||
17 | */ | ||
18 | typedef struct sys_conf { | ||
19 | uint sc_siumcr; | ||
20 | uint sc_sypcr; | ||
21 | uint sc_swt; | ||
22 | char res1[2]; | ||
23 | ushort sc_swsr; | ||
24 | uint sc_sipend; | ||
25 | uint sc_simask; | ||
26 | uint sc_siel; | ||
27 | uint sc_sivec; | ||
28 | uint sc_tesr; | ||
29 | char res2[0xc]; | ||
30 | uint sc_sdcr; | ||
31 | char res3[0x4c]; | ||
32 | } sysconf8xx_t; | ||
33 | |||
34 | /* PCMCIA configuration registers. | ||
35 | */ | ||
36 | typedef struct pcmcia_conf { | ||
37 | uint pcmc_pbr0; | ||
38 | uint pcmc_por0; | ||
39 | uint pcmc_pbr1; | ||
40 | uint pcmc_por1; | ||
41 | uint pcmc_pbr2; | ||
42 | uint pcmc_por2; | ||
43 | uint pcmc_pbr3; | ||
44 | uint pcmc_por3; | ||
45 | uint pcmc_pbr4; | ||
46 | uint pcmc_por4; | ||
47 | uint pcmc_pbr5; | ||
48 | uint pcmc_por5; | ||
49 | uint pcmc_pbr6; | ||
50 | uint pcmc_por6; | ||
51 | uint pcmc_pbr7; | ||
52 | uint pcmc_por7; | ||
53 | char res1[0x20]; | ||
54 | uint pcmc_pgcra; | ||
55 | uint pcmc_pgcrb; | ||
56 | uint pcmc_pscr; | ||
57 | char res2[4]; | ||
58 | uint pcmc_pipr; | ||
59 | char res3[4]; | ||
60 | uint pcmc_per; | ||
61 | char res4[4]; | ||
62 | } pcmconf8xx_t; | ||
63 | |||
64 | /* Memory controller registers. | ||
65 | */ | ||
66 | typedef struct mem_ctlr { | ||
67 | uint memc_br0; | ||
68 | uint memc_or0; | ||
69 | uint memc_br1; | ||
70 | uint memc_or1; | ||
71 | uint memc_br2; | ||
72 | uint memc_or2; | ||
73 | uint memc_br3; | ||
74 | uint memc_or3; | ||
75 | uint memc_br4; | ||
76 | uint memc_or4; | ||
77 | uint memc_br5; | ||
78 | uint memc_or5; | ||
79 | uint memc_br6; | ||
80 | uint memc_or6; | ||
81 | uint memc_br7; | ||
82 | uint memc_or7; | ||
83 | char res1[0x24]; | ||
84 | uint memc_mar; | ||
85 | uint memc_mcr; | ||
86 | char res2[4]; | ||
87 | uint memc_mamr; | ||
88 | uint memc_mbmr; | ||
89 | ushort memc_mstat; | ||
90 | ushort memc_mptpr; | ||
91 | uint memc_mdr; | ||
92 | char res3[0x80]; | ||
93 | } memctl8xx_t; | ||
94 | |||
95 | /*----------------------------------------------------------------------- | ||
96 | * BR - Memory Controler: Base Register 16-9 | ||
97 | */ | ||
98 | #define BR_BA_MSK 0xffff8000 /* Base Address Mask */ | ||
99 | #define BR_AT_MSK 0x00007000 /* Address Type Mask */ | ||
100 | #define BR_PS_MSK 0x00000c00 /* Port Size Mask */ | ||
101 | #define BR_PS_32 0x00000000 /* 32 bit port size */ | ||
102 | #define BR_PS_16 0x00000800 /* 16 bit port size */ | ||
103 | #define BR_PS_8 0x00000400 /* 8 bit port size */ | ||
104 | #define BR_PARE 0x00000200 /* Parity Enable */ | ||
105 | #define BR_WP 0x00000100 /* Write Protect */ | ||
106 | #define BR_MS_MSK 0x000000c0 /* Machine Select Mask */ | ||
107 | #define BR_MS_GPCM 0x00000000 /* G.P.C.M. Machine Select */ | ||
108 | #define BR_MS_UPMA 0x00000080 /* U.P.M.A Machine Select */ | ||
109 | #define BR_MS_UPMB 0x000000c0 /* U.P.M.B Machine Select */ | ||
110 | #define BR_V 0x00000001 /* Bank Valid */ | ||
111 | |||
112 | /*----------------------------------------------------------------------- | ||
113 | * OR - Memory Controler: Option Register 16-11 | ||
114 | */ | ||
115 | #define OR_AM_MSK 0xffff8000 /* Address Mask Mask */ | ||
116 | #define OR_ATM_MSK 0x00007000 /* Address Type Mask Mask */ | ||
117 | #define OR_CSNT_SAM 0x00000800 /* Chip Select Negation Time/ Start */ | ||
118 | /* Address Multiplex */ | ||
119 | #define OR_ACS_MSK 0x00000600 /* Address to Chip Select Setup mask */ | ||
120 | #define OR_ACS_DIV1 0x00000000 /* CS is output at the same time */ | ||
121 | #define OR_ACS_DIV4 0x00000400 /* CS is output 1/4 a clock later */ | ||
122 | #define OR_ACS_DIV2 0x00000600 /* CS is output 1/2 a clock later */ | ||
123 | #define OR_G5LA 0x00000400 /* Output #GPL5 on #GPL_A5 */ | ||
124 | #define OR_G5LS 0x00000200 /* Drive #GPL high on falling edge of...*/ | ||
125 | #define OR_BI 0x00000100 /* Burst inhibit */ | ||
126 | #define OR_SCY_MSK 0x000000f0 /* Cycle Length in Clocks */ | ||
127 | #define OR_SCY_0_CLK 0x00000000 /* 0 clock cycles wait states */ | ||
128 | #define OR_SCY_1_CLK 0x00000010 /* 1 clock cycles wait states */ | ||
129 | #define OR_SCY_2_CLK 0x00000020 /* 2 clock cycles wait states */ | ||
130 | #define OR_SCY_3_CLK 0x00000030 /* 3 clock cycles wait states */ | ||
131 | #define OR_SCY_4_CLK 0x00000040 /* 4 clock cycles wait states */ | ||
132 | #define OR_SCY_5_CLK 0x00000050 /* 5 clock cycles wait states */ | ||
133 | #define OR_SCY_6_CLK 0x00000060 /* 6 clock cycles wait states */ | ||
134 | #define OR_SCY_7_CLK 0x00000070 /* 7 clock cycles wait states */ | ||
135 | #define OR_SCY_8_CLK 0x00000080 /* 8 clock cycles wait states */ | ||
136 | #define OR_SCY_9_CLK 0x00000090 /* 9 clock cycles wait states */ | ||
137 | #define OR_SCY_10_CLK 0x000000a0 /* 10 clock cycles wait states */ | ||
138 | #define OR_SCY_11_CLK 0x000000b0 /* 11 clock cycles wait states */ | ||
139 | #define OR_SCY_12_CLK 0x000000c0 /* 12 clock cycles wait states */ | ||
140 | #define OR_SCY_13_CLK 0x000000d0 /* 13 clock cycles wait states */ | ||
141 | #define OR_SCY_14_CLK 0x000000e0 /* 14 clock cycles wait states */ | ||
142 | #define OR_SCY_15_CLK 0x000000f0 /* 15 clock cycles wait states */ | ||
143 | #define OR_SETA 0x00000008 /* External Transfer Acknowledge */ | ||
144 | #define OR_TRLX 0x00000004 /* Timing Relaxed */ | ||
145 | #define OR_EHTR 0x00000002 /* Extended Hold Time on Read */ | ||
146 | |||
147 | /* System Integration Timers. | ||
148 | */ | ||
149 | typedef struct sys_int_timers { | ||
150 | ushort sit_tbscr; | ||
151 | char res0[0x02]; | ||
152 | uint sit_tbreff0; | ||
153 | uint sit_tbreff1; | ||
154 | char res1[0x14]; | ||
155 | ushort sit_rtcsc; | ||
156 | char res2[0x02]; | ||
157 | uint sit_rtc; | ||
158 | uint sit_rtsec; | ||
159 | uint sit_rtcal; | ||
160 | char res3[0x10]; | ||
161 | ushort sit_piscr; | ||
162 | char res4[2]; | ||
163 | uint sit_pitc; | ||
164 | uint sit_pitr; | ||
165 | char res5[0x34]; | ||
166 | } sit8xx_t; | ||
167 | |||
168 | #define TBSCR_TBIRQ_MASK ((ushort)0xff00) | ||
169 | #define TBSCR_REFA ((ushort)0x0080) | ||
170 | #define TBSCR_REFB ((ushort)0x0040) | ||
171 | #define TBSCR_REFAE ((ushort)0x0008) | ||
172 | #define TBSCR_REFBE ((ushort)0x0004) | ||
173 | #define TBSCR_TBF ((ushort)0x0002) | ||
174 | #define TBSCR_TBE ((ushort)0x0001) | ||
175 | |||
176 | #define RTCSC_RTCIRQ_MASK ((ushort)0xff00) | ||
177 | #define RTCSC_SEC ((ushort)0x0080) | ||
178 | #define RTCSC_ALR ((ushort)0x0040) | ||
179 | #define RTCSC_38K ((ushort)0x0010) | ||
180 | #define RTCSC_SIE ((ushort)0x0008) | ||
181 | #define RTCSC_ALE ((ushort)0x0004) | ||
182 | #define RTCSC_RTF ((ushort)0x0002) | ||
183 | #define RTCSC_RTE ((ushort)0x0001) | ||
184 | |||
185 | #define PISCR_PIRQ_MASK ((ushort)0xff00) | ||
186 | #define PISCR_PS ((ushort)0x0080) | ||
187 | #define PISCR_PIE ((ushort)0x0004) | ||
188 | #define PISCR_PTF ((ushort)0x0002) | ||
189 | #define PISCR_PTE ((ushort)0x0001) | ||
190 | |||
191 | /* Clocks and Reset. | ||
192 | */ | ||
193 | typedef struct clk_and_reset { | ||
194 | uint car_sccr; | ||
195 | uint car_plprcr; | ||
196 | uint car_rsr; | ||
197 | char res[0x74]; /* Reserved area */ | ||
198 | } car8xx_t; | ||
199 | |||
200 | /* System Integration Timers keys. | ||
201 | */ | ||
202 | typedef struct sitk { | ||
203 | uint sitk_tbscrk; | ||
204 | uint sitk_tbreff0k; | ||
205 | uint sitk_tbreff1k; | ||
206 | uint sitk_tbk; | ||
207 | char res1[0x10]; | ||
208 | uint sitk_rtcsck; | ||
209 | uint sitk_rtck; | ||
210 | uint sitk_rtseck; | ||
211 | uint sitk_rtcalk; | ||
212 | char res2[0x10]; | ||
213 | uint sitk_piscrk; | ||
214 | uint sitk_pitck; | ||
215 | char res3[0x38]; | ||
216 | } sitk8xx_t; | ||
217 | |||
218 | /* Clocks and reset keys. | ||
219 | */ | ||
220 | typedef struct cark { | ||
221 | uint cark_sccrk; | ||
222 | uint cark_plprcrk; | ||
223 | uint cark_rsrk; | ||
224 | char res[0x474]; | ||
225 | } cark8xx_t; | ||
226 | |||
227 | /* The key to unlock registers maintained by keep-alive power. | ||
228 | */ | ||
229 | #define KAPWR_KEY ((unsigned int)0x55ccaa33) | ||
230 | |||
231 | /* Video interface. MPC823 Only. | ||
232 | */ | ||
233 | typedef struct vid823 { | ||
234 | ushort vid_vccr; | ||
235 | ushort res1; | ||
236 | u_char vid_vsr; | ||
237 | u_char res2; | ||
238 | u_char vid_vcmr; | ||
239 | u_char res3; | ||
240 | uint vid_vbcb; | ||
241 | uint res4; | ||
242 | uint vid_vfcr0; | ||
243 | uint vid_vfaa0; | ||
244 | uint vid_vfba0; | ||
245 | uint vid_vfcr1; | ||
246 | uint vid_vfaa1; | ||
247 | uint vid_vfba1; | ||
248 | u_char res5[0x18]; | ||
249 | } vid823_t; | ||
250 | |||
251 | /* LCD interface. 823 Only. | ||
252 | */ | ||
253 | typedef struct lcd { | ||
254 | uint lcd_lccr; | ||
255 | uint lcd_lchcr; | ||
256 | uint lcd_lcvcr; | ||
257 | char res1[4]; | ||
258 | uint lcd_lcfaa; | ||
259 | uint lcd_lcfba; | ||
260 | char lcd_lcsr; | ||
261 | char res2[0x7]; | ||
262 | } lcd823_t; | ||
263 | |||
264 | /* I2C | ||
265 | */ | ||
266 | typedef struct i2c { | ||
267 | u_char i2c_i2mod; | ||
268 | char res1[3]; | ||
269 | u_char i2c_i2add; | ||
270 | char res2[3]; | ||
271 | u_char i2c_i2brg; | ||
272 | char res3[3]; | ||
273 | u_char i2c_i2com; | ||
274 | char res4[3]; | ||
275 | u_char i2c_i2cer; | ||
276 | char res5[3]; | ||
277 | u_char i2c_i2cmr; | ||
278 | char res6[0x8b]; | ||
279 | } i2c8xx_t; | ||
280 | |||
281 | /* DMA control/status registers. | ||
282 | */ | ||
283 | typedef struct sdma_csr { | ||
284 | char res1[4]; | ||
285 | uint sdma_sdar; | ||
286 | u_char sdma_sdsr; | ||
287 | char res3[3]; | ||
288 | u_char sdma_sdmr; | ||
289 | char res4[3]; | ||
290 | u_char sdma_idsr1; | ||
291 | char res5[3]; | ||
292 | u_char sdma_idmr1; | ||
293 | char res6[3]; | ||
294 | u_char sdma_idsr2; | ||
295 | char res7[3]; | ||
296 | u_char sdma_idmr2; | ||
297 | char res8[0x13]; | ||
298 | } sdma8xx_t; | ||
299 | |||
300 | /* Communication Processor Module Interrupt Controller. | ||
301 | */ | ||
302 | typedef struct cpm_ic { | ||
303 | ushort cpic_civr; | ||
304 | char res[0xe]; | ||
305 | uint cpic_cicr; | ||
306 | uint cpic_cipr; | ||
307 | uint cpic_cimr; | ||
308 | uint cpic_cisr; | ||
309 | } cpic8xx_t; | ||
310 | |||
311 | /* Input/Output Port control/status registers. | ||
312 | */ | ||
313 | typedef struct io_port { | ||
314 | ushort iop_padir; | ||
315 | ushort iop_papar; | ||
316 | ushort iop_paodr; | ||
317 | ushort iop_padat; | ||
318 | char res1[8]; | ||
319 | ushort iop_pcdir; | ||
320 | ushort iop_pcpar; | ||
321 | ushort iop_pcso; | ||
322 | ushort iop_pcdat; | ||
323 | ushort iop_pcint; | ||
324 | char res2[6]; | ||
325 | ushort iop_pddir; | ||
326 | ushort iop_pdpar; | ||
327 | char res3[2]; | ||
328 | ushort iop_pddat; | ||
329 | uint utmode; | ||
330 | char res4[4]; | ||
331 | } iop8xx_t; | ||
332 | |||
333 | /* Communication Processor Module Timers | ||
334 | */ | ||
335 | typedef struct cpm_timers { | ||
336 | ushort cpmt_tgcr; | ||
337 | char res1[0xe]; | ||
338 | ushort cpmt_tmr1; | ||
339 | ushort cpmt_tmr2; | ||
340 | ushort cpmt_trr1; | ||
341 | ushort cpmt_trr2; | ||
342 | ushort cpmt_tcr1; | ||
343 | ushort cpmt_tcr2; | ||
344 | ushort cpmt_tcn1; | ||
345 | ushort cpmt_tcn2; | ||
346 | ushort cpmt_tmr3; | ||
347 | ushort cpmt_tmr4; | ||
348 | ushort cpmt_trr3; | ||
349 | ushort cpmt_trr4; | ||
350 | ushort cpmt_tcr3; | ||
351 | ushort cpmt_tcr4; | ||
352 | ushort cpmt_tcn3; | ||
353 | ushort cpmt_tcn4; | ||
354 | ushort cpmt_ter1; | ||
355 | ushort cpmt_ter2; | ||
356 | ushort cpmt_ter3; | ||
357 | ushort cpmt_ter4; | ||
358 | char res2[8]; | ||
359 | } cpmtimer8xx_t; | ||
360 | |||
361 | /* Finally, the Communication Processor stuff..... | ||
362 | */ | ||
363 | typedef struct scc { /* Serial communication channels */ | ||
364 | uint scc_gsmrl; | ||
365 | uint scc_gsmrh; | ||
366 | ushort scc_psmr; | ||
367 | char res1[2]; | ||
368 | ushort scc_todr; | ||
369 | ushort scc_dsr; | ||
370 | ushort scc_scce; | ||
371 | char res2[2]; | ||
372 | ushort scc_sccm; | ||
373 | char res3; | ||
374 | u_char scc_sccs; | ||
375 | char res4[8]; | ||
376 | } scc_t; | ||
377 | |||
378 | typedef struct smc { /* Serial management channels */ | ||
379 | char res1[2]; | ||
380 | ushort smc_smcmr; | ||
381 | char res2[2]; | ||
382 | u_char smc_smce; | ||
383 | char res3[3]; | ||
384 | u_char smc_smcm; | ||
385 | char res4[5]; | ||
386 | } smc_t; | ||
387 | |||
388 | /* MPC860T Fast Ethernet Controller. It isn't part of the CPM, but | ||
389 | * it fits within the address space. | ||
390 | */ | ||
391 | |||
392 | typedef struct fec { | ||
393 | uint fec_addr_low; /* lower 32 bits of station address */ | ||
394 | ushort fec_addr_high; /* upper 16 bits of station address */ | ||
395 | ushort res1; /* reserved */ | ||
396 | uint fec_hash_table_high; /* upper 32-bits of hash table */ | ||
397 | uint fec_hash_table_low; /* lower 32-bits of hash table */ | ||
398 | uint fec_r_des_start; /* beginning of Rx descriptor ring */ | ||
399 | uint fec_x_des_start; /* beginning of Tx descriptor ring */ | ||
400 | uint fec_r_buff_size; /* Rx buffer size */ | ||
401 | uint res2[9]; /* reserved */ | ||
402 | uint fec_ecntrl; /* ethernet control register */ | ||
403 | uint fec_ievent; /* interrupt event register */ | ||
404 | uint fec_imask; /* interrupt mask register */ | ||
405 | uint fec_ivec; /* interrupt level and vector status */ | ||
406 | uint fec_r_des_active; /* Rx ring updated flag */ | ||
407 | uint fec_x_des_active; /* Tx ring updated flag */ | ||
408 | uint res3[10]; /* reserved */ | ||
409 | uint fec_mii_data; /* MII data register */ | ||
410 | uint fec_mii_speed; /* MII speed control register */ | ||
411 | uint res4[17]; /* reserved */ | ||
412 | uint fec_r_bound; /* end of RAM (read-only) */ | ||
413 | uint fec_r_fstart; /* Rx FIFO start address */ | ||
414 | uint res5[6]; /* reserved */ | ||
415 | uint fec_x_fstart; /* Tx FIFO start address */ | ||
416 | uint res6[17]; /* reserved */ | ||
417 | uint fec_fun_code; /* fec SDMA function code */ | ||
418 | uint res7[3]; /* reserved */ | ||
419 | uint fec_r_cntrl; /* Rx control register */ | ||
420 | uint fec_r_hash; /* Rx hash register */ | ||
421 | uint res8[14]; /* reserved */ | ||
422 | uint fec_x_cntrl; /* Tx control register */ | ||
423 | uint res9[0x1e]; /* reserved */ | ||
424 | } fec_t; | ||
425 | |||
426 | /* The FEC and LCD color map share the same address space.... | ||
427 | * I guess we will never see an 823T :-). | ||
428 | */ | ||
429 | union fec_lcd { | ||
430 | fec_t fl_un_fec; | ||
431 | u_char fl_un_cmap[0x200]; | ||
432 | }; | ||
433 | |||
434 | typedef struct comm_proc { | ||
435 | /* General control and status registers. | ||
436 | */ | ||
437 | ushort cp_cpcr; | ||
438 | u_char res1[2]; | ||
439 | ushort cp_rccr; | ||
440 | u_char res2; | ||
441 | u_char cp_rmds; | ||
442 | u_char res3[4]; | ||
443 | ushort cp_cpmcr1; | ||
444 | ushort cp_cpmcr2; | ||
445 | ushort cp_cpmcr3; | ||
446 | ushort cp_cpmcr4; | ||
447 | u_char res4[2]; | ||
448 | ushort cp_rter; | ||
449 | u_char res5[2]; | ||
450 | ushort cp_rtmr; | ||
451 | u_char res6[0x14]; | ||
452 | |||
453 | /* Baud rate generators. | ||
454 | */ | ||
455 | uint cp_brgc1; | ||
456 | uint cp_brgc2; | ||
457 | uint cp_brgc3; | ||
458 | uint cp_brgc4; | ||
459 | |||
460 | /* Serial Communication Channels. | ||
461 | */ | ||
462 | scc_t cp_scc[4]; | ||
463 | |||
464 | /* Serial Management Channels. | ||
465 | */ | ||
466 | smc_t cp_smc[2]; | ||
467 | |||
468 | /* Serial Peripheral Interface. | ||
469 | */ | ||
470 | ushort cp_spmode; | ||
471 | u_char res7[4]; | ||
472 | u_char cp_spie; | ||
473 | u_char res8[3]; | ||
474 | u_char cp_spim; | ||
475 | u_char res9[2]; | ||
476 | u_char cp_spcom; | ||
477 | u_char res10[2]; | ||
478 | |||
479 | /* Parallel Interface Port. | ||
480 | */ | ||
481 | u_char res11[2]; | ||
482 | ushort cp_pipc; | ||
483 | u_char res12[2]; | ||
484 | ushort cp_ptpr; | ||
485 | uint cp_pbdir; | ||
486 | uint cp_pbpar; | ||
487 | u_char res13[2]; | ||
488 | ushort cp_pbodr; | ||
489 | uint cp_pbdat; | ||
490 | |||
491 | /* Port E - MPC87x/88x only. | ||
492 | */ | ||
493 | uint cp_pedir; | ||
494 | uint cp_pepar; | ||
495 | uint cp_peso; | ||
496 | uint cp_peodr; | ||
497 | uint cp_pedat; | ||
498 | |||
499 | /* Communications Processor Timing Register - | ||
500 | Contains RMII Timing for the FECs on MPC87x/88x only. | ||
501 | */ | ||
502 | uint cp_cptr; | ||
503 | |||
504 | /* Serial Interface and Time Slot Assignment. | ||
505 | */ | ||
506 | uint cp_simode; | ||
507 | u_char cp_sigmr; | ||
508 | u_char res15; | ||
509 | u_char cp_sistr; | ||
510 | u_char cp_sicmr; | ||
511 | u_char res16[4]; | ||
512 | uint cp_sicr; | ||
513 | uint cp_sirp; | ||
514 | u_char res17[0xc]; | ||
515 | |||
516 | /* 256 bytes of MPC823 video controller RAM array. | ||
517 | */ | ||
518 | u_char cp_vcram[0x100]; | ||
519 | u_char cp_siram[0x200]; | ||
520 | |||
521 | /* The fast ethernet controller is not really part of the CPM, | ||
522 | * but it resides in the address space. | ||
523 | * The LCD color map is also here. | ||
524 | */ | ||
525 | union fec_lcd fl_un; | ||
526 | #define cp_fec fl_un.fl_un_fec | ||
527 | #define lcd_cmap fl_un.fl_un_cmap | ||
528 | char res18[0xE00]; | ||
529 | |||
530 | /* The DUET family has a second FEC here */ | ||
531 | fec_t cp_fec2; | ||
532 | #define cp_fec1 cp_fec /* consistency macro */ | ||
533 | |||
534 | /* Dual Ported RAM follows. | ||
535 | * There are many different formats for this memory area | ||
536 | * depending upon the devices used and options chosen. | ||
537 | * Some processors don't have all of it populated. | ||
538 | */ | ||
539 | u_char cp_dpmem[0x1C00]; /* BD / Data / ucode */ | ||
540 | u_char cp_dparam[0x400]; /* Parameter RAM */ | ||
541 | } cpm8xx_t; | ||
542 | |||
543 | /* Internal memory map. | ||
544 | */ | ||
545 | typedef struct immap { | ||
546 | sysconf8xx_t im_siu_conf; /* SIU Configuration */ | ||
547 | pcmconf8xx_t im_pcmcia; /* PCMCIA Configuration */ | ||
548 | memctl8xx_t im_memctl; /* Memory Controller */ | ||
549 | sit8xx_t im_sit; /* System integration timers */ | ||
550 | car8xx_t im_clkrst; /* Clocks and reset */ | ||
551 | sitk8xx_t im_sitk; /* Sys int timer keys */ | ||
552 | cark8xx_t im_clkrstk; /* Clocks and reset keys */ | ||
553 | vid823_t im_vid; /* Video (823 only) */ | ||
554 | lcd823_t im_lcd; /* LCD (823 only) */ | ||
555 | i2c8xx_t im_i2c; /* I2C control/status */ | ||
556 | sdma8xx_t im_sdma; /* SDMA control/status */ | ||
557 | cpic8xx_t im_cpic; /* CPM Interrupt Controller */ | ||
558 | iop8xx_t im_ioport; /* IO Port control/status */ | ||
559 | cpmtimer8xx_t im_cpmtimer; /* CPM timers */ | ||
560 | cpm8xx_t im_cpm; /* Communication processor */ | ||
561 | } immap_t; | ||
562 | |||
563 | #endif /* __IMMAP_8XX__ */ | ||
564 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/amigayle.h b/include/asm-ppc/amigayle.h deleted file mode 100644 index 1fe0b87859b0..000000000000 --- a/include/asm-ppc/amigayle.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-m68k/amigayle.h> | ||
diff --git a/include/asm-ppc/amipcmcia.h b/include/asm-ppc/amipcmcia.h deleted file mode 100644 index 3f65f63f508f..000000000000 --- a/include/asm-ppc/amipcmcia.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-m68k/amipcmcia.h> | ||
diff --git a/include/asm-ppc/bootinfo.h b/include/asm-ppc/bootinfo.h deleted file mode 100644 index f6ed77aee328..000000000000 --- a/include/asm-ppc/bootinfo.h +++ /dev/null | |||
@@ -1,46 +0,0 @@ | |||
1 | /* | ||
2 | * Non-machine dependent bootinfo structure. Basic idea | ||
3 | * borrowed from the m68k. | ||
4 | * | ||
5 | * Copyright (C) 1999 Cort Dougan <cort@ppc.kernel.org> | ||
6 | */ | ||
7 | |||
8 | #ifdef __KERNEL__ | ||
9 | #ifndef _PPC_BOOTINFO_H | ||
10 | #define _PPC_BOOTINFO_H | ||
11 | |||
12 | #include <asm/page.h> | ||
13 | |||
14 | struct bi_record { | ||
15 | unsigned long tag; /* tag ID */ | ||
16 | unsigned long size; /* size of record (in bytes) */ | ||
17 | unsigned long data[0]; /* data */ | ||
18 | }; | ||
19 | |||
20 | #define BI_FIRST 0x1010 /* first record - marker */ | ||
21 | #define BI_LAST 0x1011 /* last record - marker */ | ||
22 | #define BI_CMD_LINE 0x1012 | ||
23 | #define BI_BOOTLOADER_ID 0x1013 | ||
24 | #define BI_INITRD 0x1014 | ||
25 | #define BI_SYSMAP 0x1015 | ||
26 | #define BI_MACHTYPE 0x1016 | ||
27 | #define BI_MEMSIZE 0x1017 | ||
28 | #define BI_BOARD_INFO 0x1018 | ||
29 | |||
30 | extern struct bi_record *find_bootinfo(void); | ||
31 | extern void bootinfo_init(struct bi_record *rec); | ||
32 | extern void bootinfo_append(unsigned long tag, unsigned long size, void * data); | ||
33 | extern void parse_bootinfo(struct bi_record *rec); | ||
34 | extern unsigned long boot_mem_size; | ||
35 | |||
36 | static inline struct bi_record * | ||
37 | bootinfo_addr(unsigned long offset) | ||
38 | { | ||
39 | |||
40 | return (struct bi_record *)_ALIGN((offset) + (1 << 20) - 1, | ||
41 | (1 << 20)); | ||
42 | } | ||
43 | |||
44 | |||
45 | #endif /* _PPC_BOOTINFO_H */ | ||
46 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/bootx.h b/include/asm-ppc/bootx.h deleted file mode 100644 index b0c51b45d7a2..000000000000 --- a/include/asm-ppc/bootx.h +++ /dev/null | |||
@@ -1,135 +0,0 @@ | |||
1 | /* | ||
2 | * This file describes the structure passed from the BootX application | ||
3 | * (for MacOS) when it is used to boot Linux. | ||
4 | * | ||
5 | * Written by Benjamin Herrenschmidt. | ||
6 | */ | ||
7 | |||
8 | |||
9 | #ifndef __ASM_BOOTX_H__ | ||
10 | #define __ASM_BOOTX_H__ | ||
11 | |||
12 | #ifdef macintosh | ||
13 | #include <Types.h> | ||
14 | #include "linux_type_defs.h" | ||
15 | #endif | ||
16 | |||
17 | #ifdef macintosh | ||
18 | /* All this requires PowerPC alignment */ | ||
19 | #pragma options align=power | ||
20 | #endif | ||
21 | |||
22 | /* On kernel entry: | ||
23 | * | ||
24 | * r3 = 0x426f6f58 ('BooX') | ||
25 | * r4 = pointer to boot_infos | ||
26 | * r5 = NULL | ||
27 | * | ||
28 | * Data and instruction translation disabled, interrupts | ||
29 | * disabled, kernel loaded at physical 0x00000000 on PCI | ||
30 | * machines (will be different on NuBus). | ||
31 | */ | ||
32 | |||
33 | #define BOOT_INFO_VERSION 5 | ||
34 | #define BOOT_INFO_COMPATIBLE_VERSION 1 | ||
35 | |||
36 | /* Bit in the architecture flag mask. More to be defined in | ||
37 | future versions. Note that either BOOT_ARCH_PCI or | ||
38 | BOOT_ARCH_NUBUS is set. The other BOOT_ARCH_NUBUS_xxx are | ||
39 | set additionally when BOOT_ARCH_NUBUS is set. | ||
40 | */ | ||
41 | #define BOOT_ARCH_PCI 0x00000001UL | ||
42 | #define BOOT_ARCH_NUBUS 0x00000002UL | ||
43 | #define BOOT_ARCH_NUBUS_PDM 0x00000010UL | ||
44 | #define BOOT_ARCH_NUBUS_PERFORMA 0x00000020UL | ||
45 | #define BOOT_ARCH_NUBUS_POWERBOOK 0x00000040UL | ||
46 | |||
47 | /* Maximum number of ranges in phys memory map */ | ||
48 | #define MAX_MEM_MAP_SIZE 26 | ||
49 | |||
50 | /* This is the format of an element in the physical memory map. Note that | ||
51 | the map is optional and current BootX will only build it for pre-PCI | ||
52 | machines */ | ||
53 | typedef struct boot_info_map_entry | ||
54 | { | ||
55 | __u32 physAddr; /* Physical starting address */ | ||
56 | __u32 size; /* Size in bytes */ | ||
57 | } boot_info_map_entry_t; | ||
58 | |||
59 | |||
60 | /* Here are the boot informations that are passed to the bootstrap | ||
61 | * Note that the kernel arguments and the device tree are appended | ||
62 | * at the end of this structure. */ | ||
63 | typedef struct boot_infos | ||
64 | { | ||
65 | /* Version of this structure */ | ||
66 | __u32 version; | ||
67 | /* backward compatible down to version: */ | ||
68 | __u32 compatible_version; | ||
69 | |||
70 | /* NEW (vers. 2) this holds the current _logical_ base addr of | ||
71 | the frame buffer (for use by early boot message) */ | ||
72 | __u8* logicalDisplayBase; | ||
73 | |||
74 | /* NEW (vers. 4) Apple's machine identification */ | ||
75 | __u32 machineID; | ||
76 | |||
77 | /* NEW (vers. 4) Detected hw architecture */ | ||
78 | __u32 architecture; | ||
79 | |||
80 | /* The device tree (internal addresses relative to the beginning of the tree, | ||
81 | * device tree offset relative to the beginning of this structure). | ||
82 | * On pre-PCI macintosh (BOOT_ARCH_PCI bit set to 0 in architecture), this | ||
83 | * field is 0. | ||
84 | */ | ||
85 | __u32 deviceTreeOffset; /* Device tree offset */ | ||
86 | __u32 deviceTreeSize; /* Size of the device tree */ | ||
87 | |||
88 | /* Some infos about the current MacOS display */ | ||
89 | __u32 dispDeviceRect[4]; /* left,top,right,bottom */ | ||
90 | __u32 dispDeviceDepth; /* (8, 16 or 32) */ | ||
91 | __u8* dispDeviceBase; /* base address (physical) */ | ||
92 | __u32 dispDeviceRowBytes; /* rowbytes (in bytes) */ | ||
93 | __u32 dispDeviceColorsOffset; /* Colormap (8 bits only) or 0 (*) */ | ||
94 | /* Optional offset in the registry to the current | ||
95 | * MacOS display. (Can be 0 when not detected) */ | ||
96 | __u32 dispDeviceRegEntryOffset; | ||
97 | |||
98 | /* Optional pointer to boot ramdisk (offset from this structure) */ | ||
99 | __u32 ramDisk; | ||
100 | __u32 ramDiskSize; /* size of ramdisk image */ | ||
101 | |||
102 | /* Kernel command line arguments (offset from this structure) */ | ||
103 | __u32 kernelParamsOffset; | ||
104 | |||
105 | /* ALL BELOW NEW (vers. 4) */ | ||
106 | |||
107 | /* This defines the physical memory. Valid with BOOT_ARCH_NUBUS flag | ||
108 | (non-PCI) only. On PCI, memory is contiguous and it's size is in the | ||
109 | device-tree. */ | ||
110 | boot_info_map_entry_t | ||
111 | physMemoryMap[MAX_MEM_MAP_SIZE]; /* Where the phys memory is */ | ||
112 | __u32 physMemoryMapSize; /* How many entries in map */ | ||
113 | |||
114 | |||
115 | /* The framebuffer size (optional, currently 0) */ | ||
116 | __u32 frameBufferSize; /* Represents a max size, can be 0. */ | ||
117 | |||
118 | /* NEW (vers. 5) */ | ||
119 | |||
120 | /* Total params size (args + colormap + device tree + ramdisk) */ | ||
121 | __u32 totalParamsSize; | ||
122 | |||
123 | } boot_infos_t; | ||
124 | |||
125 | /* (*) The format of the colormap is 256 * 3 * 2 bytes. Each color index is represented | ||
126 | * by 3 short words containing a 16 bits (unsigned) color component. | ||
127 | * Later versions may contain the gamma table for direct-color devices here. | ||
128 | */ | ||
129 | #define BOOTX_COLORTABLE_SIZE (256UL*3UL*2UL) | ||
130 | |||
131 | #ifdef macintosh | ||
132 | #pragma options align=reset | ||
133 | #endif | ||
134 | |||
135 | #endif | ||
diff --git a/include/asm-ppc/btext.h b/include/asm-ppc/btext.h deleted file mode 100644 index ed3630251b3b..000000000000 --- a/include/asm-ppc/btext.h +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | /* | ||
2 | * Definitions for using the procedures in btext.c. | ||
3 | * | ||
4 | * Benjamin Herrenschmidt <benh@kernel.crashing.org> | ||
5 | */ | ||
6 | #ifndef __PPC_BTEXT_H | ||
7 | #define __PPC_BTEXT_H | ||
8 | #ifdef __KERNEL__ | ||
9 | |||
10 | #include <asm/bootx.h> | ||
11 | |||
12 | extern void btext_clearscreen(void); | ||
13 | extern void btext_flushscreen(void); | ||
14 | |||
15 | extern unsigned long disp_BAT[2]; | ||
16 | |||
17 | extern boot_infos_t disp_bi; | ||
18 | extern int boot_text_mapped; | ||
19 | |||
20 | extern void btext_init(boot_infos_t *bi); | ||
21 | extern void btext_welcome(void); | ||
22 | extern void btext_prepare_BAT(void); | ||
23 | extern void btext_setup_display(int width, int height, int depth, int pitch, | ||
24 | unsigned long address); | ||
25 | extern void map_boot_text(void); | ||
26 | extern void btext_update_display(unsigned long phys, int width, int height, | ||
27 | int depth, int pitch); | ||
28 | |||
29 | extern void btext_drawchar(char c); | ||
30 | extern void btext_drawstring(const char *str); | ||
31 | extern void btext_drawhex(unsigned long v); | ||
32 | |||
33 | #endif /* __KERNEL__ */ | ||
34 | #endif /* __PPC_BTEXT_H */ | ||
diff --git a/include/asm-ppc/cpm1.h b/include/asm-ppc/cpm1.h deleted file mode 100644 index 03035acd85c6..000000000000 --- a/include/asm-ppc/cpm1.h +++ /dev/null | |||
@@ -1,688 +0,0 @@ | |||
1 | /* | ||
2 | * MPC8xx Communication Processor Module. | ||
3 | * Copyright (c) 1997 Dan Malek (dmalek@jlc.net) | ||
4 | * | ||
5 | * This file contains structures and information for the communication | ||
6 | * processor channels. Some CPM control and status is available | ||
7 | * throught the MPC8xx internal memory map. See immap.h for details. | ||
8 | * This file only contains what I need for the moment, not the total | ||
9 | * CPM capabilities. I (or someone else) will add definitions as they | ||
10 | * are needed. -- Dan | ||
11 | * | ||
12 | * On the MBX board, EPPC-Bug loads CPM microcode into the first 512 | ||
13 | * bytes of the DP RAM and relocates the I2C parameter area to the | ||
14 | * IDMA1 space. The remaining DP RAM is available for buffer descriptors | ||
15 | * or other use. | ||
16 | */ | ||
17 | #ifndef __CPM1__ | ||
18 | #define __CPM1__ | ||
19 | |||
20 | #include <asm/8xx_immap.h> | ||
21 | #include <asm/ptrace.h> | ||
22 | |||
23 | /* CPM Command register. | ||
24 | */ | ||
25 | #define CPM_CR_RST ((ushort)0x8000) | ||
26 | #define CPM_CR_OPCODE ((ushort)0x0f00) | ||
27 | #define CPM_CR_CHAN ((ushort)0x00f0) | ||
28 | #define CPM_CR_FLG ((ushort)0x0001) | ||
29 | |||
30 | /* Some commands (there are more...later) | ||
31 | */ | ||
32 | #define CPM_CR_INIT_TRX ((ushort)0x0000) | ||
33 | #define CPM_CR_INIT_RX ((ushort)0x0001) | ||
34 | #define CPM_CR_INIT_TX ((ushort)0x0002) | ||
35 | #define CPM_CR_HUNT_MODE ((ushort)0x0003) | ||
36 | #define CPM_CR_STOP_TX ((ushort)0x0004) | ||
37 | #define CPM_CR_GRA_STOP_TX ((ushort)0x0005) | ||
38 | #define CPM_CR_RESTART_TX ((ushort)0x0006) | ||
39 | #define CPM_CR_CLOSE_RX_BD ((ushort)0x0007) | ||
40 | #define CPM_CR_SET_GADDR ((ushort)0x0008) | ||
41 | #define CPM_CR_SET_TIMER CPM_CR_SET_GADDR | ||
42 | |||
43 | /* Channel numbers. | ||
44 | */ | ||
45 | #define CPM_CR_CH_SCC1 ((ushort)0x0000) | ||
46 | #define CPM_CR_CH_I2C ((ushort)0x0001) /* I2C and IDMA1 */ | ||
47 | #define CPM_CR_CH_SCC2 ((ushort)0x0004) | ||
48 | #define CPM_CR_CH_SPI ((ushort)0x0005) /* SPI / IDMA2 / Timers */ | ||
49 | #define CPM_CR_CH_TIMER CPM_CR_CH_SPI | ||
50 | #define CPM_CR_CH_SCC3 ((ushort)0x0008) | ||
51 | #define CPM_CR_CH_SMC1 ((ushort)0x0009) /* SMC1 / DSP1 */ | ||
52 | #define CPM_CR_CH_SCC4 ((ushort)0x000c) | ||
53 | #define CPM_CR_CH_SMC2 ((ushort)0x000d) /* SMC2 / DSP2 */ | ||
54 | |||
55 | #define mk_cr_cmd(CH, CMD) ((CMD << 8) | (CH << 4)) | ||
56 | |||
57 | /* The dual ported RAM is multi-functional. Some areas can be (and are | ||
58 | * being) used for microcode. There is an area that can only be used | ||
59 | * as data ram for buffer descriptors, which is all we use right now. | ||
60 | * Currently the first 512 and last 256 bytes are used for microcode. | ||
61 | */ | ||
62 | #define CPM_DATAONLY_BASE ((uint)0x0800) | ||
63 | #define CPM_DATAONLY_SIZE ((uint)0x0700) | ||
64 | #define CPM_DP_NOSPACE ((uint)0x7fffffff) | ||
65 | |||
66 | /* Export the base address of the communication processor registers | ||
67 | * and dual port ram. | ||
68 | */ | ||
69 | extern cpm8xx_t *cpmp; /* Pointer to comm processor */ | ||
70 | extern unsigned long cpm_dpalloc(uint size, uint align); | ||
71 | extern int cpm_dpfree(unsigned long offset); | ||
72 | extern unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align); | ||
73 | extern void cpm_dpdump(void); | ||
74 | extern void *cpm_dpram_addr(unsigned long offset); | ||
75 | extern uint cpm_dpram_phys(u8 *addr); | ||
76 | extern void cpm_setbrg(uint brg, uint rate); | ||
77 | |||
78 | extern void cpm_load_patch(volatile immap_t *immr); | ||
79 | |||
80 | /* Buffer descriptors used by many of the CPM protocols. | ||
81 | */ | ||
82 | typedef struct cpm_buf_desc { | ||
83 | ushort cbd_sc; /* Status and Control */ | ||
84 | ushort cbd_datlen; /* Data length in buffer */ | ||
85 | uint cbd_bufaddr; /* Buffer address in host memory */ | ||
86 | } cbd_t; | ||
87 | |||
88 | #define BD_SC_EMPTY ((ushort)0x8000) /* Receive is empty */ | ||
89 | #define BD_SC_READY ((ushort)0x8000) /* Transmit is ready */ | ||
90 | #define BD_SC_WRAP ((ushort)0x2000) /* Last buffer descriptor */ | ||
91 | #define BD_SC_INTRPT ((ushort)0x1000) /* Interrupt on change */ | ||
92 | #define BD_SC_LAST ((ushort)0x0800) /* Last buffer in frame */ | ||
93 | #define BD_SC_TC ((ushort)0x0400) /* Transmit CRC */ | ||
94 | #define BD_SC_CM ((ushort)0x0200) /* Continous mode */ | ||
95 | #define BD_SC_ID ((ushort)0x0100) /* Rec'd too many idles */ | ||
96 | #define BD_SC_P ((ushort)0x0100) /* xmt preamble */ | ||
97 | #define BD_SC_BR ((ushort)0x0020) /* Break received */ | ||
98 | #define BD_SC_FR ((ushort)0x0010) /* Framing error */ | ||
99 | #define BD_SC_PR ((ushort)0x0008) /* Parity error */ | ||
100 | #define BD_SC_NAK ((ushort)0x0004) /* NAK - did not respond */ | ||
101 | #define BD_SC_OV ((ushort)0x0002) /* Overrun */ | ||
102 | #define BD_SC_UN ((ushort)0x0002) /* Underrun */ | ||
103 | #define BD_SC_CD ((ushort)0x0001) /* ?? */ | ||
104 | #define BD_SC_CL ((ushort)0x0001) /* Collision */ | ||
105 | |||
106 | /* Parameter RAM offsets. | ||
107 | */ | ||
108 | #define PROFF_SCC1 ((uint)0x0000) | ||
109 | #define PROFF_IIC ((uint)0x0080) | ||
110 | #define PROFF_SCC2 ((uint)0x0100) | ||
111 | #define PROFF_SPI ((uint)0x0180) | ||
112 | #define PROFF_SCC3 ((uint)0x0200) | ||
113 | #define PROFF_SMC1 ((uint)0x0280) | ||
114 | #define PROFF_SCC4 ((uint)0x0300) | ||
115 | #define PROFF_SMC2 ((uint)0x0380) | ||
116 | |||
117 | /* Define enough so I can at least use the serial port as a UART. | ||
118 | * The MBX uses SMC1 as the host serial port. | ||
119 | */ | ||
120 | typedef struct smc_uart { | ||
121 | ushort smc_rbase; /* Rx Buffer descriptor base address */ | ||
122 | ushort smc_tbase; /* Tx Buffer descriptor base address */ | ||
123 | u_char smc_rfcr; /* Rx function code */ | ||
124 | u_char smc_tfcr; /* Tx function code */ | ||
125 | ushort smc_mrblr; /* Max receive buffer length */ | ||
126 | uint smc_rstate; /* Internal */ | ||
127 | uint smc_idp; /* Internal */ | ||
128 | ushort smc_rbptr; /* Internal */ | ||
129 | ushort smc_ibc; /* Internal */ | ||
130 | uint smc_rxtmp; /* Internal */ | ||
131 | uint smc_tstate; /* Internal */ | ||
132 | uint smc_tdp; /* Internal */ | ||
133 | ushort smc_tbptr; /* Internal */ | ||
134 | ushort smc_tbc; /* Internal */ | ||
135 | uint smc_txtmp; /* Internal */ | ||
136 | ushort smc_maxidl; /* Maximum idle characters */ | ||
137 | ushort smc_tmpidl; /* Temporary idle counter */ | ||
138 | ushort smc_brklen; /* Last received break length */ | ||
139 | ushort smc_brkec; /* rcv'd break condition counter */ | ||
140 | ushort smc_brkcr; /* xmt break count register */ | ||
141 | ushort smc_rmask; /* Temporary bit mask */ | ||
142 | char res1[8]; /* Reserved */ | ||
143 | ushort smc_rpbase; /* Relocation pointer */ | ||
144 | } smc_uart_t; | ||
145 | |||
146 | /* Function code bits. | ||
147 | */ | ||
148 | #define SMC_EB ((u_char)0x10) /* Set big endian byte order */ | ||
149 | |||
150 | /* SMC uart mode register. | ||
151 | */ | ||
152 | #define SMCMR_REN ((ushort)0x0001) | ||
153 | #define SMCMR_TEN ((ushort)0x0002) | ||
154 | #define SMCMR_DM ((ushort)0x000c) | ||
155 | #define SMCMR_SM_GCI ((ushort)0x0000) | ||
156 | #define SMCMR_SM_UART ((ushort)0x0020) | ||
157 | #define SMCMR_SM_TRANS ((ushort)0x0030) | ||
158 | #define SMCMR_SM_MASK ((ushort)0x0030) | ||
159 | #define SMCMR_PM_EVEN ((ushort)0x0100) /* Even parity, else odd */ | ||
160 | #define SMCMR_REVD SMCMR_PM_EVEN | ||
161 | #define SMCMR_PEN ((ushort)0x0200) /* Parity enable */ | ||
162 | #define SMCMR_BS SMCMR_PEN | ||
163 | #define SMCMR_SL ((ushort)0x0400) /* Two stops, else one */ | ||
164 | #define SMCR_CLEN_MASK ((ushort)0x7800) /* Character length */ | ||
165 | #define smcr_mk_clen(C) (((C) << 11) & SMCR_CLEN_MASK) | ||
166 | |||
167 | /* SMC2 as Centronics parallel printer. It is half duplex, in that | ||
168 | * it can only receive or transmit. The parameter ram values for | ||
169 | * each direction are either unique or properly overlap, so we can | ||
170 | * include them in one structure. | ||
171 | */ | ||
172 | typedef struct smc_centronics { | ||
173 | ushort scent_rbase; | ||
174 | ushort scent_tbase; | ||
175 | u_char scent_cfcr; | ||
176 | u_char scent_smask; | ||
177 | ushort scent_mrblr; | ||
178 | uint scent_rstate; | ||
179 | uint scent_r_ptr; | ||
180 | ushort scent_rbptr; | ||
181 | ushort scent_r_cnt; | ||
182 | uint scent_rtemp; | ||
183 | uint scent_tstate; | ||
184 | uint scent_t_ptr; | ||
185 | ushort scent_tbptr; | ||
186 | ushort scent_t_cnt; | ||
187 | uint scent_ttemp; | ||
188 | ushort scent_max_sl; | ||
189 | ushort scent_sl_cnt; | ||
190 | ushort scent_character1; | ||
191 | ushort scent_character2; | ||
192 | ushort scent_character3; | ||
193 | ushort scent_character4; | ||
194 | ushort scent_character5; | ||
195 | ushort scent_character6; | ||
196 | ushort scent_character7; | ||
197 | ushort scent_character8; | ||
198 | ushort scent_rccm; | ||
199 | ushort scent_rccr; | ||
200 | } smc_cent_t; | ||
201 | |||
202 | /* Centronics Status Mask Register. | ||
203 | */ | ||
204 | #define SMC_CENT_F ((u_char)0x08) | ||
205 | #define SMC_CENT_PE ((u_char)0x04) | ||
206 | #define SMC_CENT_S ((u_char)0x02) | ||
207 | |||
208 | /* SMC Event and Mask register. | ||
209 | */ | ||
210 | #define SMCM_BRKE ((unsigned char)0x40) /* When in UART Mode */ | ||
211 | #define SMCM_BRK ((unsigned char)0x10) /* When in UART Mode */ | ||
212 | #define SMCM_TXE ((unsigned char)0x10) /* When in Transparent Mode */ | ||
213 | #define SMCM_BSY ((unsigned char)0x04) | ||
214 | #define SMCM_TX ((unsigned char)0x02) | ||
215 | #define SMCM_RX ((unsigned char)0x01) | ||
216 | |||
217 | /* Baud rate generators. | ||
218 | */ | ||
219 | #define CPM_BRG_RST ((uint)0x00020000) | ||
220 | #define CPM_BRG_EN ((uint)0x00010000) | ||
221 | #define CPM_BRG_EXTC_INT ((uint)0x00000000) | ||
222 | #define CPM_BRG_EXTC_CLK2 ((uint)0x00004000) | ||
223 | #define CPM_BRG_EXTC_CLK6 ((uint)0x00008000) | ||
224 | #define CPM_BRG_ATB ((uint)0x00002000) | ||
225 | #define CPM_BRG_CD_MASK ((uint)0x00001ffe) | ||
226 | #define CPM_BRG_DIV16 ((uint)0x00000001) | ||
227 | |||
228 | /* SI Clock Route Register | ||
229 | */ | ||
230 | #define SICR_RCLK_SCC1_BRG1 ((uint)0x00000000) | ||
231 | #define SICR_TCLK_SCC1_BRG1 ((uint)0x00000000) | ||
232 | #define SICR_RCLK_SCC2_BRG2 ((uint)0x00000800) | ||
233 | #define SICR_TCLK_SCC2_BRG2 ((uint)0x00000100) | ||
234 | #define SICR_RCLK_SCC3_BRG3 ((uint)0x00100000) | ||
235 | #define SICR_TCLK_SCC3_BRG3 ((uint)0x00020000) | ||
236 | #define SICR_RCLK_SCC4_BRG4 ((uint)0x18000000) | ||
237 | #define SICR_TCLK_SCC4_BRG4 ((uint)0x03000000) | ||
238 | |||
239 | /* SCCs. | ||
240 | */ | ||
241 | #define SCC_GSMRH_IRP ((uint)0x00040000) | ||
242 | #define SCC_GSMRH_GDE ((uint)0x00010000) | ||
243 | #define SCC_GSMRH_TCRC_CCITT ((uint)0x00008000) | ||
244 | #define SCC_GSMRH_TCRC_BISYNC ((uint)0x00004000) | ||
245 | #define SCC_GSMRH_TCRC_HDLC ((uint)0x00000000) | ||
246 | #define SCC_GSMRH_REVD ((uint)0x00002000) | ||
247 | #define SCC_GSMRH_TRX ((uint)0x00001000) | ||
248 | #define SCC_GSMRH_TTX ((uint)0x00000800) | ||
249 | #define SCC_GSMRH_CDP ((uint)0x00000400) | ||
250 | #define SCC_GSMRH_CTSP ((uint)0x00000200) | ||
251 | #define SCC_GSMRH_CDS ((uint)0x00000100) | ||
252 | #define SCC_GSMRH_CTSS ((uint)0x00000080) | ||
253 | #define SCC_GSMRH_TFL ((uint)0x00000040) | ||
254 | #define SCC_GSMRH_RFW ((uint)0x00000020) | ||
255 | #define SCC_GSMRH_TXSY ((uint)0x00000010) | ||
256 | #define SCC_GSMRH_SYNL16 ((uint)0x0000000c) | ||
257 | #define SCC_GSMRH_SYNL8 ((uint)0x00000008) | ||
258 | #define SCC_GSMRH_SYNL4 ((uint)0x00000004) | ||
259 | #define SCC_GSMRH_RTSM ((uint)0x00000002) | ||
260 | #define SCC_GSMRH_RSYN ((uint)0x00000001) | ||
261 | |||
262 | #define SCC_GSMRL_SIR ((uint)0x80000000) /* SCC2 only */ | ||
263 | #define SCC_GSMRL_EDGE_NONE ((uint)0x60000000) | ||
264 | #define SCC_GSMRL_EDGE_NEG ((uint)0x40000000) | ||
265 | #define SCC_GSMRL_EDGE_POS ((uint)0x20000000) | ||
266 | #define SCC_GSMRL_EDGE_BOTH ((uint)0x00000000) | ||
267 | #define SCC_GSMRL_TCI ((uint)0x10000000) | ||
268 | #define SCC_GSMRL_TSNC_3 ((uint)0x0c000000) | ||
269 | #define SCC_GSMRL_TSNC_4 ((uint)0x08000000) | ||
270 | #define SCC_GSMRL_TSNC_14 ((uint)0x04000000) | ||
271 | #define SCC_GSMRL_TSNC_INF ((uint)0x00000000) | ||
272 | #define SCC_GSMRL_RINV ((uint)0x02000000) | ||
273 | #define SCC_GSMRL_TINV ((uint)0x01000000) | ||
274 | #define SCC_GSMRL_TPL_128 ((uint)0x00c00000) | ||
275 | #define SCC_GSMRL_TPL_64 ((uint)0x00a00000) | ||
276 | #define SCC_GSMRL_TPL_48 ((uint)0x00800000) | ||
277 | #define SCC_GSMRL_TPL_32 ((uint)0x00600000) | ||
278 | #define SCC_GSMRL_TPL_16 ((uint)0x00400000) | ||
279 | #define SCC_GSMRL_TPL_8 ((uint)0x00200000) | ||
280 | #define SCC_GSMRL_TPL_NONE ((uint)0x00000000) | ||
281 | #define SCC_GSMRL_TPP_ALL1 ((uint)0x00180000) | ||
282 | #define SCC_GSMRL_TPP_01 ((uint)0x00100000) | ||
283 | #define SCC_GSMRL_TPP_10 ((uint)0x00080000) | ||
284 | #define SCC_GSMRL_TPP_ZEROS ((uint)0x00000000) | ||
285 | #define SCC_GSMRL_TEND ((uint)0x00040000) | ||
286 | #define SCC_GSMRL_TDCR_32 ((uint)0x00030000) | ||
287 | #define SCC_GSMRL_TDCR_16 ((uint)0x00020000) | ||
288 | #define SCC_GSMRL_TDCR_8 ((uint)0x00010000) | ||
289 | #define SCC_GSMRL_TDCR_1 ((uint)0x00000000) | ||
290 | #define SCC_GSMRL_RDCR_32 ((uint)0x0000c000) | ||
291 | #define SCC_GSMRL_RDCR_16 ((uint)0x00008000) | ||
292 | #define SCC_GSMRL_RDCR_8 ((uint)0x00004000) | ||
293 | #define SCC_GSMRL_RDCR_1 ((uint)0x00000000) | ||
294 | #define SCC_GSMRL_RENC_DFMAN ((uint)0x00003000) | ||
295 | #define SCC_GSMRL_RENC_MANCH ((uint)0x00002000) | ||
296 | #define SCC_GSMRL_RENC_FM0 ((uint)0x00001000) | ||
297 | #define SCC_GSMRL_RENC_NRZI ((uint)0x00000800) | ||
298 | #define SCC_GSMRL_RENC_NRZ ((uint)0x00000000) | ||
299 | #define SCC_GSMRL_TENC_DFMAN ((uint)0x00000600) | ||
300 | #define SCC_GSMRL_TENC_MANCH ((uint)0x00000400) | ||
301 | #define SCC_GSMRL_TENC_FM0 ((uint)0x00000200) | ||
302 | #define SCC_GSMRL_TENC_NRZI ((uint)0x00000100) | ||
303 | #define SCC_GSMRL_TENC_NRZ ((uint)0x00000000) | ||
304 | #define SCC_GSMRL_DIAG_LE ((uint)0x000000c0) /* Loop and echo */ | ||
305 | #define SCC_GSMRL_DIAG_ECHO ((uint)0x00000080) | ||
306 | #define SCC_GSMRL_DIAG_LOOP ((uint)0x00000040) | ||
307 | #define SCC_GSMRL_DIAG_NORM ((uint)0x00000000) | ||
308 | #define SCC_GSMRL_ENR ((uint)0x00000020) | ||
309 | #define SCC_GSMRL_ENT ((uint)0x00000010) | ||
310 | #define SCC_GSMRL_MODE_ENET ((uint)0x0000000c) | ||
311 | #define SCC_GSMRL_MODE_QMC ((uint)0x0000000a) | ||
312 | #define SCC_GSMRL_MODE_DDCMP ((uint)0x00000009) | ||
313 | #define SCC_GSMRL_MODE_BISYNC ((uint)0x00000008) | ||
314 | #define SCC_GSMRL_MODE_V14 ((uint)0x00000007) | ||
315 | #define SCC_GSMRL_MODE_AHDLC ((uint)0x00000006) | ||
316 | #define SCC_GSMRL_MODE_PROFIBUS ((uint)0x00000005) | ||
317 | #define SCC_GSMRL_MODE_UART ((uint)0x00000004) | ||
318 | #define SCC_GSMRL_MODE_SS7 ((uint)0x00000003) | ||
319 | #define SCC_GSMRL_MODE_ATALK ((uint)0x00000002) | ||
320 | #define SCC_GSMRL_MODE_HDLC ((uint)0x00000000) | ||
321 | |||
322 | #define SCC_TODR_TOD ((ushort)0x8000) | ||
323 | |||
324 | /* SCC Event and Mask register. | ||
325 | */ | ||
326 | #define SCCM_TXE ((unsigned char)0x10) | ||
327 | #define SCCM_BSY ((unsigned char)0x04) | ||
328 | #define SCCM_TX ((unsigned char)0x02) | ||
329 | #define SCCM_RX ((unsigned char)0x01) | ||
330 | |||
331 | typedef struct scc_param { | ||
332 | ushort scc_rbase; /* Rx Buffer descriptor base address */ | ||
333 | ushort scc_tbase; /* Tx Buffer descriptor base address */ | ||
334 | u_char scc_rfcr; /* Rx function code */ | ||
335 | u_char scc_tfcr; /* Tx function code */ | ||
336 | ushort scc_mrblr; /* Max receive buffer length */ | ||
337 | uint scc_rstate; /* Internal */ | ||
338 | uint scc_idp; /* Internal */ | ||
339 | ushort scc_rbptr; /* Internal */ | ||
340 | ushort scc_ibc; /* Internal */ | ||
341 | uint scc_rxtmp; /* Internal */ | ||
342 | uint scc_tstate; /* Internal */ | ||
343 | uint scc_tdp; /* Internal */ | ||
344 | ushort scc_tbptr; /* Internal */ | ||
345 | ushort scc_tbc; /* Internal */ | ||
346 | uint scc_txtmp; /* Internal */ | ||
347 | uint scc_rcrc; /* Internal */ | ||
348 | uint scc_tcrc; /* Internal */ | ||
349 | } sccp_t; | ||
350 | |||
351 | /* Function code bits. | ||
352 | */ | ||
353 | #define SCC_EB ((u_char)0x10) /* Set big endian byte order */ | ||
354 | |||
355 | /* CPM Ethernet through SCCx. | ||
356 | */ | ||
357 | typedef struct scc_enet { | ||
358 | sccp_t sen_genscc; | ||
359 | uint sen_cpres; /* Preset CRC */ | ||
360 | uint sen_cmask; /* Constant mask for CRC */ | ||
361 | uint sen_crcec; /* CRC Error counter */ | ||
362 | uint sen_alec; /* alignment error counter */ | ||
363 | uint sen_disfc; /* discard frame counter */ | ||
364 | ushort sen_pads; /* Tx short frame pad character */ | ||
365 | ushort sen_retlim; /* Retry limit threshold */ | ||
366 | ushort sen_retcnt; /* Retry limit counter */ | ||
367 | ushort sen_maxflr; /* maximum frame length register */ | ||
368 | ushort sen_minflr; /* minimum frame length register */ | ||
369 | ushort sen_maxd1; /* maximum DMA1 length */ | ||
370 | ushort sen_maxd2; /* maximum DMA2 length */ | ||
371 | ushort sen_maxd; /* Rx max DMA */ | ||
372 | ushort sen_dmacnt; /* Rx DMA counter */ | ||
373 | ushort sen_maxb; /* Max BD byte count */ | ||
374 | ushort sen_gaddr1; /* Group address filter */ | ||
375 | ushort sen_gaddr2; | ||
376 | ushort sen_gaddr3; | ||
377 | ushort sen_gaddr4; | ||
378 | uint sen_tbuf0data0; /* Save area 0 - current frame */ | ||
379 | uint sen_tbuf0data1; /* Save area 1 - current frame */ | ||
380 | uint sen_tbuf0rba; /* Internal */ | ||
381 | uint sen_tbuf0crc; /* Internal */ | ||
382 | ushort sen_tbuf0bcnt; /* Internal */ | ||
383 | ushort sen_paddrh; /* physical address (MSB) */ | ||
384 | ushort sen_paddrm; | ||
385 | ushort sen_paddrl; /* physical address (LSB) */ | ||
386 | ushort sen_pper; /* persistence */ | ||
387 | ushort sen_rfbdptr; /* Rx first BD pointer */ | ||
388 | ushort sen_tfbdptr; /* Tx first BD pointer */ | ||
389 | ushort sen_tlbdptr; /* Tx last BD pointer */ | ||
390 | uint sen_tbuf1data0; /* Save area 0 - current frame */ | ||
391 | uint sen_tbuf1data1; /* Save area 1 - current frame */ | ||
392 | uint sen_tbuf1rba; /* Internal */ | ||
393 | uint sen_tbuf1crc; /* Internal */ | ||
394 | ushort sen_tbuf1bcnt; /* Internal */ | ||
395 | ushort sen_txlen; /* Tx Frame length counter */ | ||
396 | ushort sen_iaddr1; /* Individual address filter */ | ||
397 | ushort sen_iaddr2; | ||
398 | ushort sen_iaddr3; | ||
399 | ushort sen_iaddr4; | ||
400 | ushort sen_boffcnt; /* Backoff counter */ | ||
401 | |||
402 | /* NOTE: Some versions of the manual have the following items | ||
403 | * incorrectly documented. Below is the proper order. | ||
404 | */ | ||
405 | ushort sen_taddrh; /* temp address (MSB) */ | ||
406 | ushort sen_taddrm; | ||
407 | ushort sen_taddrl; /* temp address (LSB) */ | ||
408 | } scc_enet_t; | ||
409 | |||
410 | /* SCC Event register as used by Ethernet. | ||
411 | */ | ||
412 | #define SCCE_ENET_GRA ((ushort)0x0080) /* Graceful stop complete */ | ||
413 | #define SCCE_ENET_TXE ((ushort)0x0010) /* Transmit Error */ | ||
414 | #define SCCE_ENET_RXF ((ushort)0x0008) /* Full frame received */ | ||
415 | #define SCCE_ENET_BSY ((ushort)0x0004) /* All incoming buffers full */ | ||
416 | #define SCCE_ENET_TXB ((ushort)0x0002) /* A buffer was transmitted */ | ||
417 | #define SCCE_ENET_RXB ((ushort)0x0001) /* A buffer was received */ | ||
418 | |||
419 | /* SCC Mode Register (PMSR) as used by Ethernet. | ||
420 | */ | ||
421 | #define SCC_PSMR_HBC ((ushort)0x8000) /* Enable heartbeat */ | ||
422 | #define SCC_PSMR_FC ((ushort)0x4000) /* Force collision */ | ||
423 | #define SCC_PSMR_RSH ((ushort)0x2000) /* Receive short frames */ | ||
424 | #define SCC_PSMR_IAM ((ushort)0x1000) /* Check individual hash */ | ||
425 | #define SCC_PSMR_ENCRC ((ushort)0x0800) /* Ethernet CRC mode */ | ||
426 | #define SCC_PSMR_PRO ((ushort)0x0200) /* Promiscuous mode */ | ||
427 | #define SCC_PSMR_BRO ((ushort)0x0100) /* Catch broadcast pkts */ | ||
428 | #define SCC_PSMR_SBT ((ushort)0x0080) /* Special backoff timer */ | ||
429 | #define SCC_PSMR_LPB ((ushort)0x0040) /* Set Loopback mode */ | ||
430 | #define SCC_PSMR_SIP ((ushort)0x0020) /* Sample Input Pins */ | ||
431 | #define SCC_PSMR_LCW ((ushort)0x0010) /* Late collision window */ | ||
432 | #define SCC_PSMR_NIB22 ((ushort)0x000a) /* Start frame search */ | ||
433 | #define SCC_PSMR_FDE ((ushort)0x0001) /* Full duplex enable */ | ||
434 | |||
435 | /* Buffer descriptor control/status used by Ethernet receive. | ||
436 | */ | ||
437 | #define BD_ENET_RX_EMPTY ((ushort)0x8000) | ||
438 | #define BD_ENET_RX_WRAP ((ushort)0x2000) | ||
439 | #define BD_ENET_RX_INTR ((ushort)0x1000) | ||
440 | #define BD_ENET_RX_LAST ((ushort)0x0800) | ||
441 | #define BD_ENET_RX_FIRST ((ushort)0x0400) | ||
442 | #define BD_ENET_RX_MISS ((ushort)0x0100) | ||
443 | #define BD_ENET_RX_LG ((ushort)0x0020) | ||
444 | #define BD_ENET_RX_NO ((ushort)0x0010) | ||
445 | #define BD_ENET_RX_SH ((ushort)0x0008) | ||
446 | #define BD_ENET_RX_CR ((ushort)0x0004) | ||
447 | #define BD_ENET_RX_OV ((ushort)0x0002) | ||
448 | #define BD_ENET_RX_CL ((ushort)0x0001) | ||
449 | #define BD_ENET_RX_BC ((ushort)0x0080) /* DA is Broadcast */ | ||
450 | #define BD_ENET_RX_MC ((ushort)0x0040) /* DA is Multicast */ | ||
451 | #define BD_ENET_RX_STATS ((ushort)0x013f) /* All status bits */ | ||
452 | |||
453 | /* Buffer descriptor control/status used by Ethernet transmit. | ||
454 | */ | ||
455 | #define BD_ENET_TX_READY ((ushort)0x8000) | ||
456 | #define BD_ENET_TX_PAD ((ushort)0x4000) | ||
457 | #define BD_ENET_TX_WRAP ((ushort)0x2000) | ||
458 | #define BD_ENET_TX_INTR ((ushort)0x1000) | ||
459 | #define BD_ENET_TX_LAST ((ushort)0x0800) | ||
460 | #define BD_ENET_TX_TC ((ushort)0x0400) | ||
461 | #define BD_ENET_TX_DEF ((ushort)0x0200) | ||
462 | #define BD_ENET_TX_HB ((ushort)0x0100) | ||
463 | #define BD_ENET_TX_LC ((ushort)0x0080) | ||
464 | #define BD_ENET_TX_RL ((ushort)0x0040) | ||
465 | #define BD_ENET_TX_RCMASK ((ushort)0x003c) | ||
466 | #define BD_ENET_TX_UN ((ushort)0x0002) | ||
467 | #define BD_ENET_TX_CSL ((ushort)0x0001) | ||
468 | #define BD_ENET_TX_STATS ((ushort)0x03ff) /* All status bits */ | ||
469 | |||
470 | /* SCC as UART | ||
471 | */ | ||
472 | typedef struct scc_uart { | ||
473 | sccp_t scc_genscc; | ||
474 | char res1[8]; /* Reserved */ | ||
475 | ushort scc_maxidl; /* Maximum idle chars */ | ||
476 | ushort scc_idlc; /* temp idle counter */ | ||
477 | ushort scc_brkcr; /* Break count register */ | ||
478 | ushort scc_parec; /* receive parity error counter */ | ||
479 | ushort scc_frmec; /* receive framing error counter */ | ||
480 | ushort scc_nosec; /* receive noise counter */ | ||
481 | ushort scc_brkec; /* receive break condition counter */ | ||
482 | ushort scc_brkln; /* last received break length */ | ||
483 | ushort scc_uaddr1; /* UART address character 1 */ | ||
484 | ushort scc_uaddr2; /* UART address character 2 */ | ||
485 | ushort scc_rtemp; /* Temp storage */ | ||
486 | ushort scc_toseq; /* Transmit out of sequence char */ | ||
487 | ushort scc_char1; /* control character 1 */ | ||
488 | ushort scc_char2; /* control character 2 */ | ||
489 | ushort scc_char3; /* control character 3 */ | ||
490 | ushort scc_char4; /* control character 4 */ | ||
491 | ushort scc_char5; /* control character 5 */ | ||
492 | ushort scc_char6; /* control character 6 */ | ||
493 | ushort scc_char7; /* control character 7 */ | ||
494 | ushort scc_char8; /* control character 8 */ | ||
495 | ushort scc_rccm; /* receive control character mask */ | ||
496 | ushort scc_rccr; /* receive control character register */ | ||
497 | ushort scc_rlbc; /* receive last break character */ | ||
498 | } scc_uart_t; | ||
499 | |||
500 | /* SCC Event and Mask registers when it is used as a UART. | ||
501 | */ | ||
502 | #define UART_SCCM_GLR ((ushort)0x1000) | ||
503 | #define UART_SCCM_GLT ((ushort)0x0800) | ||
504 | #define UART_SCCM_AB ((ushort)0x0200) | ||
505 | #define UART_SCCM_IDL ((ushort)0x0100) | ||
506 | #define UART_SCCM_GRA ((ushort)0x0080) | ||
507 | #define UART_SCCM_BRKE ((ushort)0x0040) | ||
508 | #define UART_SCCM_BRKS ((ushort)0x0020) | ||
509 | #define UART_SCCM_CCR ((ushort)0x0008) | ||
510 | #define UART_SCCM_BSY ((ushort)0x0004) | ||
511 | #define UART_SCCM_TX ((ushort)0x0002) | ||
512 | #define UART_SCCM_RX ((ushort)0x0001) | ||
513 | |||
514 | /* The SCC PMSR when used as a UART. | ||
515 | */ | ||
516 | #define SCU_PSMR_FLC ((ushort)0x8000) | ||
517 | #define SCU_PSMR_SL ((ushort)0x4000) | ||
518 | #define SCU_PSMR_CL ((ushort)0x3000) | ||
519 | #define SCU_PSMR_UM ((ushort)0x0c00) | ||
520 | #define SCU_PSMR_FRZ ((ushort)0x0200) | ||
521 | #define SCU_PSMR_RZS ((ushort)0x0100) | ||
522 | #define SCU_PSMR_SYN ((ushort)0x0080) | ||
523 | #define SCU_PSMR_DRT ((ushort)0x0040) | ||
524 | #define SCU_PSMR_PEN ((ushort)0x0010) | ||
525 | #define SCU_PSMR_RPM ((ushort)0x000c) | ||
526 | #define SCU_PSMR_REVP ((ushort)0x0008) | ||
527 | #define SCU_PSMR_TPM ((ushort)0x0003) | ||
528 | #define SCU_PSMR_TEVP ((ushort)0x0002) | ||
529 | |||
530 | /* CPM Transparent mode SCC. | ||
531 | */ | ||
532 | typedef struct scc_trans { | ||
533 | sccp_t st_genscc; | ||
534 | uint st_cpres; /* Preset CRC */ | ||
535 | uint st_cmask; /* Constant mask for CRC */ | ||
536 | } scc_trans_t; | ||
537 | |||
538 | #define BD_SCC_TX_LAST ((ushort)0x0800) | ||
539 | |||
540 | /* IIC parameter RAM. | ||
541 | */ | ||
542 | typedef struct iic { | ||
543 | ushort iic_rbase; /* Rx Buffer descriptor base address */ | ||
544 | ushort iic_tbase; /* Tx Buffer descriptor base address */ | ||
545 | u_char iic_rfcr; /* Rx function code */ | ||
546 | u_char iic_tfcr; /* Tx function code */ | ||
547 | ushort iic_mrblr; /* Max receive buffer length */ | ||
548 | uint iic_rstate; /* Internal */ | ||
549 | uint iic_rdp; /* Internal */ | ||
550 | ushort iic_rbptr; /* Internal */ | ||
551 | ushort iic_rbc; /* Internal */ | ||
552 | uint iic_rxtmp; /* Internal */ | ||
553 | uint iic_tstate; /* Internal */ | ||
554 | uint iic_tdp; /* Internal */ | ||
555 | ushort iic_tbptr; /* Internal */ | ||
556 | ushort iic_tbc; /* Internal */ | ||
557 | uint iic_txtmp; /* Internal */ | ||
558 | char res1[4]; /* Reserved */ | ||
559 | ushort iic_rpbase; /* Relocation pointer */ | ||
560 | char res2[2]; /* Reserved */ | ||
561 | } iic_t; | ||
562 | |||
563 | #define BD_IIC_START ((ushort)0x0400) | ||
564 | |||
565 | /* SPI parameter RAM. | ||
566 | */ | ||
567 | typedef struct spi { | ||
568 | ushort spi_rbase; /* Rx Buffer descriptor base address */ | ||
569 | ushort spi_tbase; /* Tx Buffer descriptor base address */ | ||
570 | u_char spi_rfcr; /* Rx function code */ | ||
571 | u_char spi_tfcr; /* Tx function code */ | ||
572 | ushort spi_mrblr; /* Max receive buffer length */ | ||
573 | uint spi_rstate; /* Internal */ | ||
574 | uint spi_rdp; /* Internal */ | ||
575 | ushort spi_rbptr; /* Internal */ | ||
576 | ushort spi_rbc; /* Internal */ | ||
577 | uint spi_rxtmp; /* Internal */ | ||
578 | uint spi_tstate; /* Internal */ | ||
579 | uint spi_tdp; /* Internal */ | ||
580 | ushort spi_tbptr; /* Internal */ | ||
581 | ushort spi_tbc; /* Internal */ | ||
582 | uint spi_txtmp; /* Internal */ | ||
583 | uint spi_res; | ||
584 | ushort spi_rpbase; /* Relocation pointer */ | ||
585 | ushort spi_res2; | ||
586 | } spi_t; | ||
587 | |||
588 | /* SPI Mode register. | ||
589 | */ | ||
590 | #define SPMODE_LOOP ((ushort)0x4000) /* Loopback */ | ||
591 | #define SPMODE_CI ((ushort)0x2000) /* Clock Invert */ | ||
592 | #define SPMODE_CP ((ushort)0x1000) /* Clock Phase */ | ||
593 | #define SPMODE_DIV16 ((ushort)0x0800) /* BRG/16 mode */ | ||
594 | #define SPMODE_REV ((ushort)0x0400) /* Reversed Data */ | ||
595 | #define SPMODE_MSTR ((ushort)0x0200) /* SPI Master */ | ||
596 | #define SPMODE_EN ((ushort)0x0100) /* Enable */ | ||
597 | #define SPMODE_LENMSK ((ushort)0x00f0) /* character length */ | ||
598 | #define SPMODE_LEN4 ((ushort)0x0030) /* 4 bits per char */ | ||
599 | #define SPMODE_LEN8 ((ushort)0x0070) /* 8 bits per char */ | ||
600 | #define SPMODE_LEN16 ((ushort)0x00f0) /* 16 bits per char */ | ||
601 | #define SPMODE_PMMSK ((ushort)0x000f) /* prescale modulus */ | ||
602 | |||
603 | /* SPIE fields */ | ||
604 | #define SPIE_MME 0x20 | ||
605 | #define SPIE_TXE 0x10 | ||
606 | #define SPIE_BSY 0x04 | ||
607 | #define SPIE_TXB 0x02 | ||
608 | #define SPIE_RXB 0x01 | ||
609 | |||
610 | /* | ||
611 | * RISC Controller Configuration Register definitons | ||
612 | */ | ||
613 | #define RCCR_TIME 0x8000 /* RISC Timer Enable */ | ||
614 | #define RCCR_TIMEP(t) (((t) & 0x3F)<<8) /* RISC Timer Period */ | ||
615 | #define RCCR_TIME_MASK 0x00FF /* not RISC Timer related bits */ | ||
616 | |||
617 | /* RISC Timer Parameter RAM offset */ | ||
618 | #define PROFF_RTMR ((uint)0x01B0) | ||
619 | |||
620 | typedef struct risc_timer_pram { | ||
621 | unsigned short tm_base; /* RISC Timer Table Base Address */ | ||
622 | unsigned short tm_ptr; /* RISC Timer Table Pointer (internal) */ | ||
623 | unsigned short r_tmr; /* RISC Timer Mode Register */ | ||
624 | unsigned short r_tmv; /* RISC Timer Valid Register */ | ||
625 | unsigned long tm_cmd; /* RISC Timer Command Register */ | ||
626 | unsigned long tm_cnt; /* RISC Timer Internal Count */ | ||
627 | } rt_pram_t; | ||
628 | |||
629 | /* Bits in RISC Timer Command Register */ | ||
630 | #define TM_CMD_VALID 0x80000000 /* Valid - Enables the timer */ | ||
631 | #define TM_CMD_RESTART 0x40000000 /* Restart - for automatic restart */ | ||
632 | #define TM_CMD_PWM 0x20000000 /* Run in Pulse Width Modulation Mode */ | ||
633 | #define TM_CMD_NUM(n) (((n)&0xF)<<16) /* Timer Number */ | ||
634 | #define TM_CMD_PERIOD(p) ((p)&0xFFFF) /* Timer Period */ | ||
635 | |||
636 | /* CPM interrupts. There are nearly 32 interrupts generated by CPM | ||
637 | * channels or devices. All of these are presented to the PPC core | ||
638 | * as a single interrupt. The CPM interrupt handler dispatches its | ||
639 | * own handlers, in a similar fashion to the PPC core handler. We | ||
640 | * use the table as defined in the manuals (i.e. no special high | ||
641 | * priority and SCC1 == SCCa, etc...). | ||
642 | */ | ||
643 | #define CPMVEC_NR 32 | ||
644 | #define CPMVEC_PIO_PC15 ((ushort)0x1f) | ||
645 | #define CPMVEC_SCC1 ((ushort)0x1e) | ||
646 | #define CPMVEC_SCC2 ((ushort)0x1d) | ||
647 | #define CPMVEC_SCC3 ((ushort)0x1c) | ||
648 | #define CPMVEC_SCC4 ((ushort)0x1b) | ||
649 | #define CPMVEC_PIO_PC14 ((ushort)0x1a) | ||
650 | #define CPMVEC_TIMER1 ((ushort)0x19) | ||
651 | #define CPMVEC_PIO_PC13 ((ushort)0x18) | ||
652 | #define CPMVEC_PIO_PC12 ((ushort)0x17) | ||
653 | #define CPMVEC_SDMA_CB_ERR ((ushort)0x16) | ||
654 | #define CPMVEC_IDMA1 ((ushort)0x15) | ||
655 | #define CPMVEC_IDMA2 ((ushort)0x14) | ||
656 | #define CPMVEC_TIMER2 ((ushort)0x12) | ||
657 | #define CPMVEC_RISCTIMER ((ushort)0x11) | ||
658 | #define CPMVEC_I2C ((ushort)0x10) | ||
659 | #define CPMVEC_PIO_PC11 ((ushort)0x0f) | ||
660 | #define CPMVEC_PIO_PC10 ((ushort)0x0e) | ||
661 | #define CPMVEC_TIMER3 ((ushort)0x0c) | ||
662 | #define CPMVEC_PIO_PC9 ((ushort)0x0b) | ||
663 | #define CPMVEC_PIO_PC8 ((ushort)0x0a) | ||
664 | #define CPMVEC_PIO_PC7 ((ushort)0x09) | ||
665 | #define CPMVEC_TIMER4 ((ushort)0x07) | ||
666 | #define CPMVEC_PIO_PC6 ((ushort)0x06) | ||
667 | #define CPMVEC_SPI ((ushort)0x05) | ||
668 | #define CPMVEC_SMC1 ((ushort)0x04) | ||
669 | #define CPMVEC_SMC2 ((ushort)0x03) | ||
670 | #define CPMVEC_PIO_PC5 ((ushort)0x02) | ||
671 | #define CPMVEC_PIO_PC4 ((ushort)0x01) | ||
672 | #define CPMVEC_ERROR ((ushort)0x00) | ||
673 | |||
674 | /* CPM interrupt configuration vector. | ||
675 | */ | ||
676 | #define CICR_SCD_SCC4 ((uint)0x00c00000) /* SCC4 @ SCCd */ | ||
677 | #define CICR_SCC_SCC3 ((uint)0x00200000) /* SCC3 @ SCCc */ | ||
678 | #define CICR_SCB_SCC2 ((uint)0x00040000) /* SCC2 @ SCCb */ | ||
679 | #define CICR_SCA_SCC1 ((uint)0x00000000) /* SCC1 @ SCCa */ | ||
680 | #define CICR_IRL_MASK ((uint)0x0000e000) /* Core interrupt */ | ||
681 | #define CICR_HP_MASK ((uint)0x00001f00) /* Hi-pri int. */ | ||
682 | #define CICR_IEN ((uint)0x00000080) /* Int. enable */ | ||
683 | #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ | ||
684 | |||
685 | extern void cpm_install_handler(int vec, void (*handler)(void *), void *dev_id); | ||
686 | extern void cpm_free_handler(int vec); | ||
687 | |||
688 | #endif /* __CPM1__ */ | ||
diff --git a/include/asm-ppc/cpm2.h b/include/asm-ppc/cpm2.h deleted file mode 100644 index 4c538228e42f..000000000000 --- a/include/asm-ppc/cpm2.h +++ /dev/null | |||
@@ -1,1248 +0,0 @@ | |||
1 | /* | ||
2 | * Communication Processor Module v2. | ||
3 | * | ||
4 | * This file contains structures and information for the communication | ||
5 | * processor channels found in the dual port RAM or parameter RAM. | ||
6 | * All CPM control and status is available through the CPM2 internal | ||
7 | * memory map. See immap_cpm2.h for details. | ||
8 | */ | ||
9 | #ifdef __KERNEL__ | ||
10 | #ifndef __CPM2__ | ||
11 | #define __CPM2__ | ||
12 | |||
13 | #include <asm/immap_cpm2.h> | ||
14 | |||
15 | /* CPM Command register. | ||
16 | */ | ||
17 | #define CPM_CR_RST ((uint)0x80000000) | ||
18 | #define CPM_CR_PAGE ((uint)0x7c000000) | ||
19 | #define CPM_CR_SBLOCK ((uint)0x03e00000) | ||
20 | #define CPM_CR_FLG ((uint)0x00010000) | ||
21 | #define CPM_CR_MCN ((uint)0x00003fc0) | ||
22 | #define CPM_CR_OPCODE ((uint)0x0000000f) | ||
23 | |||
24 | /* Device sub-block and page codes. | ||
25 | */ | ||
26 | #define CPM_CR_SCC1_SBLOCK (0x04) | ||
27 | #define CPM_CR_SCC2_SBLOCK (0x05) | ||
28 | #define CPM_CR_SCC3_SBLOCK (0x06) | ||
29 | #define CPM_CR_SCC4_SBLOCK (0x07) | ||
30 | #define CPM_CR_SMC1_SBLOCK (0x08) | ||
31 | #define CPM_CR_SMC2_SBLOCK (0x09) | ||
32 | #define CPM_CR_SPI_SBLOCK (0x0a) | ||
33 | #define CPM_CR_I2C_SBLOCK (0x0b) | ||
34 | #define CPM_CR_TIMER_SBLOCK (0x0f) | ||
35 | #define CPM_CR_RAND_SBLOCK (0x0e) | ||
36 | #define CPM_CR_FCC1_SBLOCK (0x10) | ||
37 | #define CPM_CR_FCC2_SBLOCK (0x11) | ||
38 | #define CPM_CR_FCC3_SBLOCK (0x12) | ||
39 | #define CPM_CR_IDMA1_SBLOCK (0x14) | ||
40 | #define CPM_CR_IDMA2_SBLOCK (0x15) | ||
41 | #define CPM_CR_IDMA3_SBLOCK (0x16) | ||
42 | #define CPM_CR_IDMA4_SBLOCK (0x17) | ||
43 | #define CPM_CR_MCC1_SBLOCK (0x1c) | ||
44 | |||
45 | #define CPM_CR_FCC_SBLOCK(x) (x + 0x10) | ||
46 | |||
47 | #define CPM_CR_SCC1_PAGE (0x00) | ||
48 | #define CPM_CR_SCC2_PAGE (0x01) | ||
49 | #define CPM_CR_SCC3_PAGE (0x02) | ||
50 | #define CPM_CR_SCC4_PAGE (0x03) | ||
51 | #define CPM_CR_SMC1_PAGE (0x07) | ||
52 | #define CPM_CR_SMC2_PAGE (0x08) | ||
53 | #define CPM_CR_SPI_PAGE (0x09) | ||
54 | #define CPM_CR_I2C_PAGE (0x0a) | ||
55 | #define CPM_CR_TIMER_PAGE (0x0a) | ||
56 | #define CPM_CR_RAND_PAGE (0x0a) | ||
57 | #define CPM_CR_FCC1_PAGE (0x04) | ||
58 | #define CPM_CR_FCC2_PAGE (0x05) | ||
59 | #define CPM_CR_FCC3_PAGE (0x06) | ||
60 | #define CPM_CR_IDMA1_PAGE (0x07) | ||
61 | #define CPM_CR_IDMA2_PAGE (0x08) | ||
62 | #define CPM_CR_IDMA3_PAGE (0x09) | ||
63 | #define CPM_CR_IDMA4_PAGE (0x0a) | ||
64 | #define CPM_CR_MCC1_PAGE (0x07) | ||
65 | #define CPM_CR_MCC2_PAGE (0x08) | ||
66 | |||
67 | #define CPM_CR_FCC_PAGE(x) (x + 0x04) | ||
68 | |||
69 | /* Some opcodes (there are more...later) | ||
70 | */ | ||
71 | #define CPM_CR_INIT_TRX ((ushort)0x0000) | ||
72 | #define CPM_CR_INIT_RX ((ushort)0x0001) | ||
73 | #define CPM_CR_INIT_TX ((ushort)0x0002) | ||
74 | #define CPM_CR_HUNT_MODE ((ushort)0x0003) | ||
75 | #define CPM_CR_STOP_TX ((ushort)0x0004) | ||
76 | #define CPM_CR_GRA_STOP_TX ((ushort)0x0005) | ||
77 | #define CPM_CR_RESTART_TX ((ushort)0x0006) | ||
78 | #define CPM_CR_SET_GADDR ((ushort)0x0008) | ||
79 | #define CPM_CR_START_IDMA ((ushort)0x0009) | ||
80 | #define CPM_CR_STOP_IDMA ((ushort)0x000b) | ||
81 | |||
82 | #define mk_cr_cmd(PG, SBC, MCN, OP) \ | ||
83 | ((PG << 26) | (SBC << 21) | (MCN << 6) | OP) | ||
84 | |||
85 | /* Dual Port RAM addresses. The first 16K is available for almost | ||
86 | * any CPM use, so we put the BDs there. The first 128 bytes are | ||
87 | * used for SMC1 and SMC2 parameter RAM, so we start allocating | ||
88 | * BDs above that. All of this must change when we start | ||
89 | * downloading RAM microcode. | ||
90 | */ | ||
91 | #define CPM_DATAONLY_BASE ((uint)128) | ||
92 | #define CPM_DP_NOSPACE ((uint)0x7fffffff) | ||
93 | #if defined(CONFIG_8272) | ||
94 | #define CPM_DATAONLY_SIZE ((uint)(8 * 1024) - CPM_DATAONLY_BASE) | ||
95 | #define CPM_FCC_SPECIAL_BASE ((uint)0x00009000) | ||
96 | #else | ||
97 | #define CPM_DATAONLY_SIZE ((uint)(16 * 1024) - CPM_DATAONLY_BASE) | ||
98 | #define CPM_FCC_SPECIAL_BASE ((uint)0x0000b000) | ||
99 | #endif | ||
100 | |||
101 | /* The number of pages of host memory we allocate for CPM. This is | ||
102 | * done early in kernel initialization to get physically contiguous | ||
103 | * pages. | ||
104 | */ | ||
105 | #define NUM_CPM_HOST_PAGES 2 | ||
106 | |||
107 | /* Export the base address of the communication processor registers | ||
108 | * and dual port ram. | ||
109 | */ | ||
110 | extern cpm_cpm2_t *cpmp; /* Pointer to comm processor */ | ||
111 | |||
112 | extern unsigned long cpm_dpalloc(uint size, uint align); | ||
113 | extern int cpm_dpfree(unsigned long offset); | ||
114 | extern unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align); | ||
115 | extern void cpm_dpdump(void); | ||
116 | extern void *cpm_dpram_addr(unsigned long offset); | ||
117 | extern void cpm_setbrg(uint brg, uint rate); | ||
118 | extern void cpm2_fastbrg(uint brg, uint rate, int div16); | ||
119 | extern void cpm2_reset(void); | ||
120 | |||
121 | |||
122 | /* Buffer descriptors used by many of the CPM protocols. | ||
123 | */ | ||
124 | typedef struct cpm_buf_desc { | ||
125 | ushort cbd_sc; /* Status and Control */ | ||
126 | ushort cbd_datlen; /* Data length in buffer */ | ||
127 | uint cbd_bufaddr; /* Buffer address in host memory */ | ||
128 | } cbd_t; | ||
129 | |||
130 | #define BD_SC_EMPTY ((ushort)0x8000) /* Receive is empty */ | ||
131 | #define BD_SC_READY ((ushort)0x8000) /* Transmit is ready */ | ||
132 | #define BD_SC_WRAP ((ushort)0x2000) /* Last buffer descriptor */ | ||
133 | #define BD_SC_INTRPT ((ushort)0x1000) /* Interrupt on change */ | ||
134 | #define BD_SC_LAST ((ushort)0x0800) /* Last buffer in frame */ | ||
135 | #define BD_SC_CM ((ushort)0x0200) /* Continous mode */ | ||
136 | #define BD_SC_ID ((ushort)0x0100) /* Rec'd too many idles */ | ||
137 | #define BD_SC_P ((ushort)0x0100) /* xmt preamble */ | ||
138 | #define BD_SC_BR ((ushort)0x0020) /* Break received */ | ||
139 | #define BD_SC_FR ((ushort)0x0010) /* Framing error */ | ||
140 | #define BD_SC_PR ((ushort)0x0008) /* Parity error */ | ||
141 | #define BD_SC_OV ((ushort)0x0002) /* Overrun */ | ||
142 | #define BD_SC_CD ((ushort)0x0001) /* ?? */ | ||
143 | |||
144 | /* Function code bits, usually generic to devices. | ||
145 | */ | ||
146 | #define CPMFCR_GBL ((u_char)0x20) /* Set memory snooping */ | ||
147 | #define CPMFCR_EB ((u_char)0x10) /* Set big endian byte order */ | ||
148 | #define CPMFCR_TC2 ((u_char)0x04) /* Transfer code 2 value */ | ||
149 | #define CPMFCR_DTB ((u_char)0x02) /* Use local bus for data when set */ | ||
150 | #define CPMFCR_BDB ((u_char)0x01) /* Use local bus for BD when set */ | ||
151 | |||
152 | /* Parameter RAM offsets from the base. | ||
153 | */ | ||
154 | #define PROFF_SCC1 ((uint)0x8000) | ||
155 | #define PROFF_SCC2 ((uint)0x8100) | ||
156 | #define PROFF_SCC3 ((uint)0x8200) | ||
157 | #define PROFF_SCC4 ((uint)0x8300) | ||
158 | #define PROFF_FCC1 ((uint)0x8400) | ||
159 | #define PROFF_FCC2 ((uint)0x8500) | ||
160 | #define PROFF_FCC3 ((uint)0x8600) | ||
161 | #define PROFF_MCC1 ((uint)0x8700) | ||
162 | #define PROFF_SMC1_BASE ((uint)0x87fc) | ||
163 | #define PROFF_IDMA1_BASE ((uint)0x87fe) | ||
164 | #define PROFF_MCC2 ((uint)0x8800) | ||
165 | #define PROFF_SMC2_BASE ((uint)0x88fc) | ||
166 | #define PROFF_IDMA2_BASE ((uint)0x88fe) | ||
167 | #define PROFF_SPI_BASE ((uint)0x89fc) | ||
168 | #define PROFF_IDMA3_BASE ((uint)0x89fe) | ||
169 | #define PROFF_TIMERS ((uint)0x8ae0) | ||
170 | #define PROFF_REVNUM ((uint)0x8af0) | ||
171 | #define PROFF_RAND ((uint)0x8af8) | ||
172 | #define PROFF_I2C_BASE ((uint)0x8afc) | ||
173 | #define PROFF_IDMA4_BASE ((uint)0x8afe) | ||
174 | |||
175 | #define PROFF_SCC_SIZE ((uint)0x100) | ||
176 | #define PROFF_FCC_SIZE ((uint)0x100) | ||
177 | #define PROFF_SMC_SIZE ((uint)64) | ||
178 | |||
179 | /* The SMCs are relocated to any of the first eight DPRAM pages. | ||
180 | * We will fix these at the first locations of DPRAM, until we | ||
181 | * get some microcode patches :-). | ||
182 | * The parameter ram space for the SMCs is fifty-some bytes, and | ||
183 | * they are required to start on a 64 byte boundary. | ||
184 | */ | ||
185 | #define PROFF_SMC1 (0) | ||
186 | #define PROFF_SMC2 (64) | ||
187 | |||
188 | |||
189 | /* Define enough so I can at least use the serial port as a UART. | ||
190 | */ | ||
191 | typedef struct smc_uart { | ||
192 | ushort smc_rbase; /* Rx Buffer descriptor base address */ | ||
193 | ushort smc_tbase; /* Tx Buffer descriptor base address */ | ||
194 | u_char smc_rfcr; /* Rx function code */ | ||
195 | u_char smc_tfcr; /* Tx function code */ | ||
196 | ushort smc_mrblr; /* Max receive buffer length */ | ||
197 | uint smc_rstate; /* Internal */ | ||
198 | uint smc_idp; /* Internal */ | ||
199 | ushort smc_rbptr; /* Internal */ | ||
200 | ushort smc_ibc; /* Internal */ | ||
201 | uint smc_rxtmp; /* Internal */ | ||
202 | uint smc_tstate; /* Internal */ | ||
203 | uint smc_tdp; /* Internal */ | ||
204 | ushort smc_tbptr; /* Internal */ | ||
205 | ushort smc_tbc; /* Internal */ | ||
206 | uint smc_txtmp; /* Internal */ | ||
207 | ushort smc_maxidl; /* Maximum idle characters */ | ||
208 | ushort smc_tmpidl; /* Temporary idle counter */ | ||
209 | ushort smc_brklen; /* Last received break length */ | ||
210 | ushort smc_brkec; /* rcv'd break condition counter */ | ||
211 | ushort smc_brkcr; /* xmt break count register */ | ||
212 | ushort smc_rmask; /* Temporary bit mask */ | ||
213 | uint smc_stmp; /* SDMA Temp */ | ||
214 | } smc_uart_t; | ||
215 | |||
216 | /* SMC uart mode register (Internal memory map). | ||
217 | */ | ||
218 | #define SMCMR_REN ((ushort)0x0001) | ||
219 | #define SMCMR_TEN ((ushort)0x0002) | ||
220 | #define SMCMR_DM ((ushort)0x000c) | ||
221 | #define SMCMR_SM_GCI ((ushort)0x0000) | ||
222 | #define SMCMR_SM_UART ((ushort)0x0020) | ||
223 | #define SMCMR_SM_TRANS ((ushort)0x0030) | ||
224 | #define SMCMR_SM_MASK ((ushort)0x0030) | ||
225 | #define SMCMR_PM_EVEN ((ushort)0x0100) /* Even parity, else odd */ | ||
226 | #define SMCMR_REVD SMCMR_PM_EVEN | ||
227 | #define SMCMR_PEN ((ushort)0x0200) /* Parity enable */ | ||
228 | #define SMCMR_BS SMCMR_PEN | ||
229 | #define SMCMR_SL ((ushort)0x0400) /* Two stops, else one */ | ||
230 | #define SMCR_CLEN_MASK ((ushort)0x7800) /* Character length */ | ||
231 | #define smcr_mk_clen(C) (((C) << 11) & SMCR_CLEN_MASK) | ||
232 | |||
233 | /* SMC Event and Mask register. | ||
234 | */ | ||
235 | #define SMCM_BRKE ((unsigned char)0x40) /* When in UART Mode */ | ||
236 | #define SMCM_BRK ((unsigned char)0x10) /* When in UART Mode */ | ||
237 | #define SMCM_TXE ((unsigned char)0x10) | ||
238 | #define SMCM_BSY ((unsigned char)0x04) | ||
239 | #define SMCM_TX ((unsigned char)0x02) | ||
240 | #define SMCM_RX ((unsigned char)0x01) | ||
241 | |||
242 | /* Baud rate generators. | ||
243 | */ | ||
244 | #define CPM_BRG_RST ((uint)0x00020000) | ||
245 | #define CPM_BRG_EN ((uint)0x00010000) | ||
246 | #define CPM_BRG_EXTC_INT ((uint)0x00000000) | ||
247 | #define CPM_BRG_EXTC_CLK3_9 ((uint)0x00004000) | ||
248 | #define CPM_BRG_EXTC_CLK5_15 ((uint)0x00008000) | ||
249 | #define CPM_BRG_ATB ((uint)0x00002000) | ||
250 | #define CPM_BRG_CD_MASK ((uint)0x00001ffe) | ||
251 | #define CPM_BRG_DIV16 ((uint)0x00000001) | ||
252 | |||
253 | /* SCCs. | ||
254 | */ | ||
255 | #define SCC_GSMRH_IRP ((uint)0x00040000) | ||
256 | #define SCC_GSMRH_GDE ((uint)0x00010000) | ||
257 | #define SCC_GSMRH_TCRC_CCITT ((uint)0x00008000) | ||
258 | #define SCC_GSMRH_TCRC_BISYNC ((uint)0x00004000) | ||
259 | #define SCC_GSMRH_TCRC_HDLC ((uint)0x00000000) | ||
260 | #define SCC_GSMRH_REVD ((uint)0x00002000) | ||
261 | #define SCC_GSMRH_TRX ((uint)0x00001000) | ||
262 | #define SCC_GSMRH_TTX ((uint)0x00000800) | ||
263 | #define SCC_GSMRH_CDP ((uint)0x00000400) | ||
264 | #define SCC_GSMRH_CTSP ((uint)0x00000200) | ||
265 | #define SCC_GSMRH_CDS ((uint)0x00000100) | ||
266 | #define SCC_GSMRH_CTSS ((uint)0x00000080) | ||
267 | #define SCC_GSMRH_TFL ((uint)0x00000040) | ||
268 | #define SCC_GSMRH_RFW ((uint)0x00000020) | ||
269 | #define SCC_GSMRH_TXSY ((uint)0x00000010) | ||
270 | #define SCC_GSMRH_SYNL16 ((uint)0x0000000c) | ||
271 | #define SCC_GSMRH_SYNL8 ((uint)0x00000008) | ||
272 | #define SCC_GSMRH_SYNL4 ((uint)0x00000004) | ||
273 | #define SCC_GSMRH_RTSM ((uint)0x00000002) | ||
274 | #define SCC_GSMRH_RSYN ((uint)0x00000001) | ||
275 | |||
276 | #define SCC_GSMRL_SIR ((uint)0x80000000) /* SCC2 only */ | ||
277 | #define SCC_GSMRL_EDGE_NONE ((uint)0x60000000) | ||
278 | #define SCC_GSMRL_EDGE_NEG ((uint)0x40000000) | ||
279 | #define SCC_GSMRL_EDGE_POS ((uint)0x20000000) | ||
280 | #define SCC_GSMRL_EDGE_BOTH ((uint)0x00000000) | ||
281 | #define SCC_GSMRL_TCI ((uint)0x10000000) | ||
282 | #define SCC_GSMRL_TSNC_3 ((uint)0x0c000000) | ||
283 | #define SCC_GSMRL_TSNC_4 ((uint)0x08000000) | ||
284 | #define SCC_GSMRL_TSNC_14 ((uint)0x04000000) | ||
285 | #define SCC_GSMRL_TSNC_INF ((uint)0x00000000) | ||
286 | #define SCC_GSMRL_RINV ((uint)0x02000000) | ||
287 | #define SCC_GSMRL_TINV ((uint)0x01000000) | ||
288 | #define SCC_GSMRL_TPL_128 ((uint)0x00c00000) | ||
289 | #define SCC_GSMRL_TPL_64 ((uint)0x00a00000) | ||
290 | #define SCC_GSMRL_TPL_48 ((uint)0x00800000) | ||
291 | #define SCC_GSMRL_TPL_32 ((uint)0x00600000) | ||
292 | #define SCC_GSMRL_TPL_16 ((uint)0x00400000) | ||
293 | #define SCC_GSMRL_TPL_8 ((uint)0x00200000) | ||
294 | #define SCC_GSMRL_TPL_NONE ((uint)0x00000000) | ||
295 | #define SCC_GSMRL_TPP_ALL1 ((uint)0x00180000) | ||
296 | #define SCC_GSMRL_TPP_01 ((uint)0x00100000) | ||
297 | #define SCC_GSMRL_TPP_10 ((uint)0x00080000) | ||
298 | #define SCC_GSMRL_TPP_ZEROS ((uint)0x00000000) | ||
299 | #define SCC_GSMRL_TEND ((uint)0x00040000) | ||
300 | #define SCC_GSMRL_TDCR_32 ((uint)0x00030000) | ||
301 | #define SCC_GSMRL_TDCR_16 ((uint)0x00020000) | ||
302 | #define SCC_GSMRL_TDCR_8 ((uint)0x00010000) | ||
303 | #define SCC_GSMRL_TDCR_1 ((uint)0x00000000) | ||
304 | #define SCC_GSMRL_RDCR_32 ((uint)0x0000c000) | ||
305 | #define SCC_GSMRL_RDCR_16 ((uint)0x00008000) | ||
306 | #define SCC_GSMRL_RDCR_8 ((uint)0x00004000) | ||
307 | #define SCC_GSMRL_RDCR_1 ((uint)0x00000000) | ||
308 | #define SCC_GSMRL_RENC_DFMAN ((uint)0x00003000) | ||
309 | #define SCC_GSMRL_RENC_MANCH ((uint)0x00002000) | ||
310 | #define SCC_GSMRL_RENC_FM0 ((uint)0x00001000) | ||
311 | #define SCC_GSMRL_RENC_NRZI ((uint)0x00000800) | ||
312 | #define SCC_GSMRL_RENC_NRZ ((uint)0x00000000) | ||
313 | #define SCC_GSMRL_TENC_DFMAN ((uint)0x00000600) | ||
314 | #define SCC_GSMRL_TENC_MANCH ((uint)0x00000400) | ||
315 | #define SCC_GSMRL_TENC_FM0 ((uint)0x00000200) | ||
316 | #define SCC_GSMRL_TENC_NRZI ((uint)0x00000100) | ||
317 | #define SCC_GSMRL_TENC_NRZ ((uint)0x00000000) | ||
318 | #define SCC_GSMRL_DIAG_LE ((uint)0x000000c0) /* Loop and echo */ | ||
319 | #define SCC_GSMRL_DIAG_ECHO ((uint)0x00000080) | ||
320 | #define SCC_GSMRL_DIAG_LOOP ((uint)0x00000040) | ||
321 | #define SCC_GSMRL_DIAG_NORM ((uint)0x00000000) | ||
322 | #define SCC_GSMRL_ENR ((uint)0x00000020) | ||
323 | #define SCC_GSMRL_ENT ((uint)0x00000010) | ||
324 | #define SCC_GSMRL_MODE_ENET ((uint)0x0000000c) | ||
325 | #define SCC_GSMRL_MODE_DDCMP ((uint)0x00000009) | ||
326 | #define SCC_GSMRL_MODE_BISYNC ((uint)0x00000008) | ||
327 | #define SCC_GSMRL_MODE_V14 ((uint)0x00000007) | ||
328 | #define SCC_GSMRL_MODE_AHDLC ((uint)0x00000006) | ||
329 | #define SCC_GSMRL_MODE_PROFIBUS ((uint)0x00000005) | ||
330 | #define SCC_GSMRL_MODE_UART ((uint)0x00000004) | ||
331 | #define SCC_GSMRL_MODE_SS7 ((uint)0x00000003) | ||
332 | #define SCC_GSMRL_MODE_ATALK ((uint)0x00000002) | ||
333 | #define SCC_GSMRL_MODE_HDLC ((uint)0x00000000) | ||
334 | |||
335 | #define SCC_TODR_TOD ((ushort)0x8000) | ||
336 | |||
337 | /* SCC Event and Mask register. | ||
338 | */ | ||
339 | #define SCCM_TXE ((unsigned char)0x10) | ||
340 | #define SCCM_BSY ((unsigned char)0x04) | ||
341 | #define SCCM_TX ((unsigned char)0x02) | ||
342 | #define SCCM_RX ((unsigned char)0x01) | ||
343 | |||
344 | typedef struct scc_param { | ||
345 | ushort scc_rbase; /* Rx Buffer descriptor base address */ | ||
346 | ushort scc_tbase; /* Tx Buffer descriptor base address */ | ||
347 | u_char scc_rfcr; /* Rx function code */ | ||
348 | u_char scc_tfcr; /* Tx function code */ | ||
349 | ushort scc_mrblr; /* Max receive buffer length */ | ||
350 | uint scc_rstate; /* Internal */ | ||
351 | uint scc_idp; /* Internal */ | ||
352 | ushort scc_rbptr; /* Internal */ | ||
353 | ushort scc_ibc; /* Internal */ | ||
354 | uint scc_rxtmp; /* Internal */ | ||
355 | uint scc_tstate; /* Internal */ | ||
356 | uint scc_tdp; /* Internal */ | ||
357 | ushort scc_tbptr; /* Internal */ | ||
358 | ushort scc_tbc; /* Internal */ | ||
359 | uint scc_txtmp; /* Internal */ | ||
360 | uint scc_rcrc; /* Internal */ | ||
361 | uint scc_tcrc; /* Internal */ | ||
362 | } sccp_t; | ||
363 | |||
364 | /* CPM Ethernet through SCC1. | ||
365 | */ | ||
366 | typedef struct scc_enet { | ||
367 | sccp_t sen_genscc; | ||
368 | uint sen_cpres; /* Preset CRC */ | ||
369 | uint sen_cmask; /* Constant mask for CRC */ | ||
370 | uint sen_crcec; /* CRC Error counter */ | ||
371 | uint sen_alec; /* alignment error counter */ | ||
372 | uint sen_disfc; /* discard frame counter */ | ||
373 | ushort sen_pads; /* Tx short frame pad character */ | ||
374 | ushort sen_retlim; /* Retry limit threshold */ | ||
375 | ushort sen_retcnt; /* Retry limit counter */ | ||
376 | ushort sen_maxflr; /* maximum frame length register */ | ||
377 | ushort sen_minflr; /* minimum frame length register */ | ||
378 | ushort sen_maxd1; /* maximum DMA1 length */ | ||
379 | ushort sen_maxd2; /* maximum DMA2 length */ | ||
380 | ushort sen_maxd; /* Rx max DMA */ | ||
381 | ushort sen_dmacnt; /* Rx DMA counter */ | ||
382 | ushort sen_maxb; /* Max BD byte count */ | ||
383 | ushort sen_gaddr1; /* Group address filter */ | ||
384 | ushort sen_gaddr2; | ||
385 | ushort sen_gaddr3; | ||
386 | ushort sen_gaddr4; | ||
387 | uint sen_tbuf0data0; /* Save area 0 - current frame */ | ||
388 | uint sen_tbuf0data1; /* Save area 1 - current frame */ | ||
389 | uint sen_tbuf0rba; /* Internal */ | ||
390 | uint sen_tbuf0crc; /* Internal */ | ||
391 | ushort sen_tbuf0bcnt; /* Internal */ | ||
392 | ushort sen_paddrh; /* physical address (MSB) */ | ||
393 | ushort sen_paddrm; | ||
394 | ushort sen_paddrl; /* physical address (LSB) */ | ||
395 | ushort sen_pper; /* persistence */ | ||
396 | ushort sen_rfbdptr; /* Rx first BD pointer */ | ||
397 | ushort sen_tfbdptr; /* Tx first BD pointer */ | ||
398 | ushort sen_tlbdptr; /* Tx last BD pointer */ | ||
399 | uint sen_tbuf1data0; /* Save area 0 - current frame */ | ||
400 | uint sen_tbuf1data1; /* Save area 1 - current frame */ | ||
401 | uint sen_tbuf1rba; /* Internal */ | ||
402 | uint sen_tbuf1crc; /* Internal */ | ||
403 | ushort sen_tbuf1bcnt; /* Internal */ | ||
404 | ushort sen_txlen; /* Tx Frame length counter */ | ||
405 | ushort sen_iaddr1; /* Individual address filter */ | ||
406 | ushort sen_iaddr2; | ||
407 | ushort sen_iaddr3; | ||
408 | ushort sen_iaddr4; | ||
409 | ushort sen_boffcnt; /* Backoff counter */ | ||
410 | |||
411 | /* NOTE: Some versions of the manual have the following items | ||
412 | * incorrectly documented. Below is the proper order. | ||
413 | */ | ||
414 | ushort sen_taddrh; /* temp address (MSB) */ | ||
415 | ushort sen_taddrm; | ||
416 | ushort sen_taddrl; /* temp address (LSB) */ | ||
417 | } scc_enet_t; | ||
418 | |||
419 | |||
420 | /* SCC Event register as used by Ethernet. | ||
421 | */ | ||
422 | #define SCCE_ENET_GRA ((ushort)0x0080) /* Graceful stop complete */ | ||
423 | #define SCCE_ENET_TXE ((ushort)0x0010) /* Transmit Error */ | ||
424 | #define SCCE_ENET_RXF ((ushort)0x0008) /* Full frame received */ | ||
425 | #define SCCE_ENET_BSY ((ushort)0x0004) /* All incoming buffers full */ | ||
426 | #define SCCE_ENET_TXB ((ushort)0x0002) /* A buffer was transmitted */ | ||
427 | #define SCCE_ENET_RXB ((ushort)0x0001) /* A buffer was received */ | ||
428 | |||
429 | /* SCC Mode Register (PSMR) as used by Ethernet. | ||
430 | */ | ||
431 | #define SCC_PSMR_HBC ((ushort)0x8000) /* Enable heartbeat */ | ||
432 | #define SCC_PSMR_FC ((ushort)0x4000) /* Force collision */ | ||
433 | #define SCC_PSMR_RSH ((ushort)0x2000) /* Receive short frames */ | ||
434 | #define SCC_PSMR_IAM ((ushort)0x1000) /* Check individual hash */ | ||
435 | #define SCC_PSMR_ENCRC ((ushort)0x0800) /* Ethernet CRC mode */ | ||
436 | #define SCC_PSMR_PRO ((ushort)0x0200) /* Promiscuous mode */ | ||
437 | #define SCC_PSMR_BRO ((ushort)0x0100) /* Catch broadcast pkts */ | ||
438 | #define SCC_PSMR_SBT ((ushort)0x0080) /* Special backoff timer */ | ||
439 | #define SCC_PSMR_LPB ((ushort)0x0040) /* Set Loopback mode */ | ||
440 | #define SCC_PSMR_SIP ((ushort)0x0020) /* Sample Input Pins */ | ||
441 | #define SCC_PSMR_LCW ((ushort)0x0010) /* Late collision window */ | ||
442 | #define SCC_PSMR_NIB22 ((ushort)0x000a) /* Start frame search */ | ||
443 | #define SCC_PSMR_FDE ((ushort)0x0001) /* Full duplex enable */ | ||
444 | |||
445 | /* Buffer descriptor control/status used by Ethernet receive. | ||
446 | * Common to SCC and FCC. | ||
447 | */ | ||
448 | #define BD_ENET_RX_EMPTY ((ushort)0x8000) | ||
449 | #define BD_ENET_RX_WRAP ((ushort)0x2000) | ||
450 | #define BD_ENET_RX_INTR ((ushort)0x1000) | ||
451 | #define BD_ENET_RX_LAST ((ushort)0x0800) | ||
452 | #define BD_ENET_RX_FIRST ((ushort)0x0400) | ||
453 | #define BD_ENET_RX_MISS ((ushort)0x0100) | ||
454 | #define BD_ENET_RX_BC ((ushort)0x0080) /* FCC Only */ | ||
455 | #define BD_ENET_RX_MC ((ushort)0x0040) /* FCC Only */ | ||
456 | #define BD_ENET_RX_LG ((ushort)0x0020) | ||
457 | #define BD_ENET_RX_NO ((ushort)0x0010) | ||
458 | #define BD_ENET_RX_SH ((ushort)0x0008) | ||
459 | #define BD_ENET_RX_CR ((ushort)0x0004) | ||
460 | #define BD_ENET_RX_OV ((ushort)0x0002) | ||
461 | #define BD_ENET_RX_CL ((ushort)0x0001) | ||
462 | #define BD_ENET_RX_STATS ((ushort)0x01ff) /* All status bits */ | ||
463 | |||
464 | /* Buffer descriptor control/status used by Ethernet transmit. | ||
465 | * Common to SCC and FCC. | ||
466 | */ | ||
467 | #define BD_ENET_TX_READY ((ushort)0x8000) | ||
468 | #define BD_ENET_TX_PAD ((ushort)0x4000) | ||
469 | #define BD_ENET_TX_WRAP ((ushort)0x2000) | ||
470 | #define BD_ENET_TX_INTR ((ushort)0x1000) | ||
471 | #define BD_ENET_TX_LAST ((ushort)0x0800) | ||
472 | #define BD_ENET_TX_TC ((ushort)0x0400) | ||
473 | #define BD_ENET_TX_DEF ((ushort)0x0200) | ||
474 | #define BD_ENET_TX_HB ((ushort)0x0100) | ||
475 | #define BD_ENET_TX_LC ((ushort)0x0080) | ||
476 | #define BD_ENET_TX_RL ((ushort)0x0040) | ||
477 | #define BD_ENET_TX_RCMASK ((ushort)0x003c) | ||
478 | #define BD_ENET_TX_UN ((ushort)0x0002) | ||
479 | #define BD_ENET_TX_CSL ((ushort)0x0001) | ||
480 | #define BD_ENET_TX_STATS ((ushort)0x03ff) /* All status bits */ | ||
481 | |||
482 | /* SCC as UART | ||
483 | */ | ||
484 | typedef struct scc_uart { | ||
485 | sccp_t scc_genscc; | ||
486 | uint scc_res1; /* Reserved */ | ||
487 | uint scc_res2; /* Reserved */ | ||
488 | ushort scc_maxidl; /* Maximum idle chars */ | ||
489 | ushort scc_idlc; /* temp idle counter */ | ||
490 | ushort scc_brkcr; /* Break count register */ | ||
491 | ushort scc_parec; /* receive parity error counter */ | ||
492 | ushort scc_frmec; /* receive framing error counter */ | ||
493 | ushort scc_nosec; /* receive noise counter */ | ||
494 | ushort scc_brkec; /* receive break condition counter */ | ||
495 | ushort scc_brkln; /* last received break length */ | ||
496 | ushort scc_uaddr1; /* UART address character 1 */ | ||
497 | ushort scc_uaddr2; /* UART address character 2 */ | ||
498 | ushort scc_rtemp; /* Temp storage */ | ||
499 | ushort scc_toseq; /* Transmit out of sequence char */ | ||
500 | ushort scc_char1; /* control character 1 */ | ||
501 | ushort scc_char2; /* control character 2 */ | ||
502 | ushort scc_char3; /* control character 3 */ | ||
503 | ushort scc_char4; /* control character 4 */ | ||
504 | ushort scc_char5; /* control character 5 */ | ||
505 | ushort scc_char6; /* control character 6 */ | ||
506 | ushort scc_char7; /* control character 7 */ | ||
507 | ushort scc_char8; /* control character 8 */ | ||
508 | ushort scc_rccm; /* receive control character mask */ | ||
509 | ushort scc_rccr; /* receive control character register */ | ||
510 | ushort scc_rlbc; /* receive last break character */ | ||
511 | } scc_uart_t; | ||
512 | |||
513 | /* SCC Event and Mask registers when it is used as a UART. | ||
514 | */ | ||
515 | #define UART_SCCM_GLR ((ushort)0x1000) | ||
516 | #define UART_SCCM_GLT ((ushort)0x0800) | ||
517 | #define UART_SCCM_AB ((ushort)0x0200) | ||
518 | #define UART_SCCM_IDL ((ushort)0x0100) | ||
519 | #define UART_SCCM_GRA ((ushort)0x0080) | ||
520 | #define UART_SCCM_BRKE ((ushort)0x0040) | ||
521 | #define UART_SCCM_BRKS ((ushort)0x0020) | ||
522 | #define UART_SCCM_CCR ((ushort)0x0008) | ||
523 | #define UART_SCCM_BSY ((ushort)0x0004) | ||
524 | #define UART_SCCM_TX ((ushort)0x0002) | ||
525 | #define UART_SCCM_RX ((ushort)0x0001) | ||
526 | |||
527 | /* The SCC PSMR when used as a UART. | ||
528 | */ | ||
529 | #define SCU_PSMR_FLC ((ushort)0x8000) | ||
530 | #define SCU_PSMR_SL ((ushort)0x4000) | ||
531 | #define SCU_PSMR_CL ((ushort)0x3000) | ||
532 | #define SCU_PSMR_UM ((ushort)0x0c00) | ||
533 | #define SCU_PSMR_FRZ ((ushort)0x0200) | ||
534 | #define SCU_PSMR_RZS ((ushort)0x0100) | ||
535 | #define SCU_PSMR_SYN ((ushort)0x0080) | ||
536 | #define SCU_PSMR_DRT ((ushort)0x0040) | ||
537 | #define SCU_PSMR_PEN ((ushort)0x0010) | ||
538 | #define SCU_PSMR_RPM ((ushort)0x000c) | ||
539 | #define SCU_PSMR_REVP ((ushort)0x0008) | ||
540 | #define SCU_PSMR_TPM ((ushort)0x0003) | ||
541 | #define SCU_PSMR_TEVP ((ushort)0x0002) | ||
542 | |||
543 | /* CPM Transparent mode SCC. | ||
544 | */ | ||
545 | typedef struct scc_trans { | ||
546 | sccp_t st_genscc; | ||
547 | uint st_cpres; /* Preset CRC */ | ||
548 | uint st_cmask; /* Constant mask for CRC */ | ||
549 | } scc_trans_t; | ||
550 | |||
551 | #define BD_SCC_TX_LAST ((ushort)0x0800) | ||
552 | |||
553 | /* How about some FCCs..... | ||
554 | */ | ||
555 | #define FCC_GFMR_DIAG_NORM ((uint)0x00000000) | ||
556 | #define FCC_GFMR_DIAG_LE ((uint)0x40000000) | ||
557 | #define FCC_GFMR_DIAG_AE ((uint)0x80000000) | ||
558 | #define FCC_GFMR_DIAG_ALE ((uint)0xc0000000) | ||
559 | #define FCC_GFMR_TCI ((uint)0x20000000) | ||
560 | #define FCC_GFMR_TRX ((uint)0x10000000) | ||
561 | #define FCC_GFMR_TTX ((uint)0x08000000) | ||
562 | #define FCC_GFMR_TTX ((uint)0x08000000) | ||
563 | #define FCC_GFMR_CDP ((uint)0x04000000) | ||
564 | #define FCC_GFMR_CTSP ((uint)0x02000000) | ||
565 | #define FCC_GFMR_CDS ((uint)0x01000000) | ||
566 | #define FCC_GFMR_CTSS ((uint)0x00800000) | ||
567 | #define FCC_GFMR_SYNL_NONE ((uint)0x00000000) | ||
568 | #define FCC_GFMR_SYNL_AUTO ((uint)0x00004000) | ||
569 | #define FCC_GFMR_SYNL_8 ((uint)0x00008000) | ||
570 | #define FCC_GFMR_SYNL_16 ((uint)0x0000c000) | ||
571 | #define FCC_GFMR_RTSM ((uint)0x00002000) | ||
572 | #define FCC_GFMR_RENC_NRZ ((uint)0x00000000) | ||
573 | #define FCC_GFMR_RENC_NRZI ((uint)0x00000800) | ||
574 | #define FCC_GFMR_REVD ((uint)0x00000400) | ||
575 | #define FCC_GFMR_TENC_NRZ ((uint)0x00000000) | ||
576 | #define FCC_GFMR_TENC_NRZI ((uint)0x00000100) | ||
577 | #define FCC_GFMR_TCRC_16 ((uint)0x00000000) | ||
578 | #define FCC_GFMR_TCRC_32 ((uint)0x00000080) | ||
579 | #define FCC_GFMR_ENR ((uint)0x00000020) | ||
580 | #define FCC_GFMR_ENT ((uint)0x00000010) | ||
581 | #define FCC_GFMR_MODE_ENET ((uint)0x0000000c) | ||
582 | #define FCC_GFMR_MODE_ATM ((uint)0x0000000a) | ||
583 | #define FCC_GFMR_MODE_HDLC ((uint)0x00000000) | ||
584 | |||
585 | /* Generic FCC parameter ram. | ||
586 | */ | ||
587 | typedef struct fcc_param { | ||
588 | ushort fcc_riptr; /* Rx Internal temp pointer */ | ||
589 | ushort fcc_tiptr; /* Tx Internal temp pointer */ | ||
590 | ushort fcc_res1; | ||
591 | ushort fcc_mrblr; /* Max receive buffer length, mod 32 bytes */ | ||
592 | uint fcc_rstate; /* Upper byte is Func code, must be set */ | ||
593 | uint fcc_rbase; /* Receive BD base */ | ||
594 | ushort fcc_rbdstat; /* RxBD status */ | ||
595 | ushort fcc_rbdlen; /* RxBD down counter */ | ||
596 | uint fcc_rdptr; /* RxBD internal data pointer */ | ||
597 | uint fcc_tstate; /* Upper byte is Func code, must be set */ | ||
598 | uint fcc_tbase; /* Transmit BD base */ | ||
599 | ushort fcc_tbdstat; /* TxBD status */ | ||
600 | ushort fcc_tbdlen; /* TxBD down counter */ | ||
601 | uint fcc_tdptr; /* TxBD internal data pointer */ | ||
602 | uint fcc_rbptr; /* Rx BD Internal buf pointer */ | ||
603 | uint fcc_tbptr; /* Tx BD Internal buf pointer */ | ||
604 | uint fcc_rcrc; /* Rx temp CRC */ | ||
605 | uint fcc_res2; | ||
606 | uint fcc_tcrc; /* Tx temp CRC */ | ||
607 | } fccp_t; | ||
608 | |||
609 | |||
610 | /* Ethernet controller through FCC. | ||
611 | */ | ||
612 | typedef struct fcc_enet { | ||
613 | fccp_t fen_genfcc; | ||
614 | uint fen_statbuf; /* Internal status buffer */ | ||
615 | uint fen_camptr; /* CAM address */ | ||
616 | uint fen_cmask; /* Constant mask for CRC */ | ||
617 | uint fen_cpres; /* Preset CRC */ | ||
618 | uint fen_crcec; /* CRC Error counter */ | ||
619 | uint fen_alec; /* alignment error counter */ | ||
620 | uint fen_disfc; /* discard frame counter */ | ||
621 | ushort fen_retlim; /* Retry limit */ | ||
622 | ushort fen_retcnt; /* Retry counter */ | ||
623 | ushort fen_pper; /* Persistence */ | ||
624 | ushort fen_boffcnt; /* backoff counter */ | ||
625 | uint fen_gaddrh; /* Group address filter, high 32-bits */ | ||
626 | uint fen_gaddrl; /* Group address filter, low 32-bits */ | ||
627 | ushort fen_tfcstat; /* out of sequence TxBD */ | ||
628 | ushort fen_tfclen; | ||
629 | uint fen_tfcptr; | ||
630 | ushort fen_mflr; /* Maximum frame length (1518) */ | ||
631 | ushort fen_paddrh; /* MAC address */ | ||
632 | ushort fen_paddrm; | ||
633 | ushort fen_paddrl; | ||
634 | ushort fen_ibdcount; /* Internal BD counter */ | ||
635 | ushort fen_ibdstart; /* Internal BD start pointer */ | ||
636 | ushort fen_ibdend; /* Internal BD end pointer */ | ||
637 | ushort fen_txlen; /* Internal Tx frame length counter */ | ||
638 | uint fen_ibdbase[8]; /* Internal use */ | ||
639 | uint fen_iaddrh; /* Individual address filter */ | ||
640 | uint fen_iaddrl; | ||
641 | ushort fen_minflr; /* Minimum frame length (64) */ | ||
642 | ushort fen_taddrh; /* Filter transfer MAC address */ | ||
643 | ushort fen_taddrm; | ||
644 | ushort fen_taddrl; | ||
645 | ushort fen_padptr; /* Pointer to pad byte buffer */ | ||
646 | ushort fen_cftype; /* control frame type */ | ||
647 | ushort fen_cfrange; /* control frame range */ | ||
648 | ushort fen_maxb; /* maximum BD count */ | ||
649 | ushort fen_maxd1; /* Max DMA1 length (1520) */ | ||
650 | ushort fen_maxd2; /* Max DMA2 length (1520) */ | ||
651 | ushort fen_maxd; /* internal max DMA count */ | ||
652 | ushort fen_dmacnt; /* internal DMA counter */ | ||
653 | uint fen_octc; /* Total octect counter */ | ||
654 | uint fen_colc; /* Total collision counter */ | ||
655 | uint fen_broc; /* Total broadcast packet counter */ | ||
656 | uint fen_mulc; /* Total multicast packet count */ | ||
657 | uint fen_uspc; /* Total packets < 64 bytes */ | ||
658 | uint fen_frgc; /* Total packets < 64 bytes with errors */ | ||
659 | uint fen_ospc; /* Total packets > 1518 */ | ||
660 | uint fen_jbrc; /* Total packets > 1518 with errors */ | ||
661 | uint fen_p64c; /* Total packets == 64 bytes */ | ||
662 | uint fen_p65c; /* Total packets 64 < bytes <= 127 */ | ||
663 | uint fen_p128c; /* Total packets 127 < bytes <= 255 */ | ||
664 | uint fen_p256c; /* Total packets 256 < bytes <= 511 */ | ||
665 | uint fen_p512c; /* Total packets 512 < bytes <= 1023 */ | ||
666 | uint fen_p1024c; /* Total packets 1024 < bytes <= 1518 */ | ||
667 | uint fen_cambuf; /* Internal CAM buffer poiner */ | ||
668 | ushort fen_rfthr; /* Received frames threshold */ | ||
669 | ushort fen_rfcnt; /* Received frames count */ | ||
670 | } fcc_enet_t; | ||
671 | |||
672 | /* FCC Event/Mask register as used by Ethernet. | ||
673 | */ | ||
674 | #define FCC_ENET_GRA ((ushort)0x0080) /* Graceful stop complete */ | ||
675 | #define FCC_ENET_RXC ((ushort)0x0040) /* Control Frame Received */ | ||
676 | #define FCC_ENET_TXC ((ushort)0x0020) /* Out of seq. Tx sent */ | ||
677 | #define FCC_ENET_TXE ((ushort)0x0010) /* Transmit Error */ | ||
678 | #define FCC_ENET_RXF ((ushort)0x0008) /* Full frame received */ | ||
679 | #define FCC_ENET_BSY ((ushort)0x0004) /* Busy. Rx Frame dropped */ | ||
680 | #define FCC_ENET_TXB ((ushort)0x0002) /* A buffer was transmitted */ | ||
681 | #define FCC_ENET_RXB ((ushort)0x0001) /* A buffer was received */ | ||
682 | |||
683 | /* FCC Mode Register (FPSMR) as used by Ethernet. | ||
684 | */ | ||
685 | #define FCC_PSMR_HBC ((uint)0x80000000) /* Enable heartbeat */ | ||
686 | #define FCC_PSMR_FC ((uint)0x40000000) /* Force Collision */ | ||
687 | #define FCC_PSMR_SBT ((uint)0x20000000) /* Stop backoff timer */ | ||
688 | #define FCC_PSMR_LPB ((uint)0x10000000) /* Local protect. 1 = FDX */ | ||
689 | #define FCC_PSMR_LCW ((uint)0x08000000) /* Late collision select */ | ||
690 | #define FCC_PSMR_FDE ((uint)0x04000000) /* Full Duplex Enable */ | ||
691 | #define FCC_PSMR_MON ((uint)0x02000000) /* RMON Enable */ | ||
692 | #define FCC_PSMR_PRO ((uint)0x00400000) /* Promiscuous Enable */ | ||
693 | #define FCC_PSMR_FCE ((uint)0x00200000) /* Flow Control Enable */ | ||
694 | #define FCC_PSMR_RSH ((uint)0x00100000) /* Receive Short Frames */ | ||
695 | #define FCC_PSMR_CAM ((uint)0x00000400) /* CAM enable */ | ||
696 | #define FCC_PSMR_BRO ((uint)0x00000200) /* Broadcast pkt discard */ | ||
697 | #define FCC_PSMR_ENCRC ((uint)0x00000080) /* Use 32-bit CRC */ | ||
698 | |||
699 | /* IIC parameter RAM. | ||
700 | */ | ||
701 | typedef struct iic { | ||
702 | ushort iic_rbase; /* Rx Buffer descriptor base address */ | ||
703 | ushort iic_tbase; /* Tx Buffer descriptor base address */ | ||
704 | u_char iic_rfcr; /* Rx function code */ | ||
705 | u_char iic_tfcr; /* Tx function code */ | ||
706 | ushort iic_mrblr; /* Max receive buffer length */ | ||
707 | uint iic_rstate; /* Internal */ | ||
708 | uint iic_rdp; /* Internal */ | ||
709 | ushort iic_rbptr; /* Internal */ | ||
710 | ushort iic_rbc; /* Internal */ | ||
711 | uint iic_rxtmp; /* Internal */ | ||
712 | uint iic_tstate; /* Internal */ | ||
713 | uint iic_tdp; /* Internal */ | ||
714 | ushort iic_tbptr; /* Internal */ | ||
715 | ushort iic_tbc; /* Internal */ | ||
716 | uint iic_txtmp; /* Internal */ | ||
717 | } iic_t; | ||
718 | |||
719 | /* SPI parameter RAM. | ||
720 | */ | ||
721 | typedef struct spi { | ||
722 | ushort spi_rbase; /* Rx Buffer descriptor base address */ | ||
723 | ushort spi_tbase; /* Tx Buffer descriptor base address */ | ||
724 | u_char spi_rfcr; /* Rx function code */ | ||
725 | u_char spi_tfcr; /* Tx function code */ | ||
726 | ushort spi_mrblr; /* Max receive buffer length */ | ||
727 | uint spi_rstate; /* Internal */ | ||
728 | uint spi_rdp; /* Internal */ | ||
729 | ushort spi_rbptr; /* Internal */ | ||
730 | ushort spi_rbc; /* Internal */ | ||
731 | uint spi_rxtmp; /* Internal */ | ||
732 | uint spi_tstate; /* Internal */ | ||
733 | uint spi_tdp; /* Internal */ | ||
734 | ushort spi_tbptr; /* Internal */ | ||
735 | ushort spi_tbc; /* Internal */ | ||
736 | uint spi_txtmp; /* Internal */ | ||
737 | uint spi_res; /* Tx temp. */ | ||
738 | uint spi_res1[4]; /* SDMA temp. */ | ||
739 | } spi_t; | ||
740 | |||
741 | /* SPI Mode register. | ||
742 | */ | ||
743 | #define SPMODE_LOOP ((ushort)0x4000) /* Loopback */ | ||
744 | #define SPMODE_CI ((ushort)0x2000) /* Clock Invert */ | ||
745 | #define SPMODE_CP ((ushort)0x1000) /* Clock Phase */ | ||
746 | #define SPMODE_DIV16 ((ushort)0x0800) /* BRG/16 mode */ | ||
747 | #define SPMODE_REV ((ushort)0x0400) /* Reversed Data */ | ||
748 | #define SPMODE_MSTR ((ushort)0x0200) /* SPI Master */ | ||
749 | #define SPMODE_EN ((ushort)0x0100) /* Enable */ | ||
750 | #define SPMODE_LENMSK ((ushort)0x00f0) /* character length */ | ||
751 | #define SPMODE_PMMSK ((ushort)0x000f) /* prescale modulus */ | ||
752 | |||
753 | #define SPMODE_LEN(x) ((((x)-1)&0xF)<<4) | ||
754 | #define SPMODE_PM(x) ((x) &0xF) | ||
755 | |||
756 | #define SPI_EB ((u_char)0x10) /* big endian byte order */ | ||
757 | |||
758 | #define BD_IIC_START ((ushort)0x0400) | ||
759 | |||
760 | /* IDMA parameter RAM | ||
761 | */ | ||
762 | typedef struct idma { | ||
763 | ushort ibase; /* IDMA buffer descriptor table base address */ | ||
764 | ushort dcm; /* DMA channel mode */ | ||
765 | ushort ibdptr; /* IDMA current buffer descriptor pointer */ | ||
766 | ushort dpr_buf; /* IDMA transfer buffer base address */ | ||
767 | ushort buf_inv; /* internal buffer inventory */ | ||
768 | ushort ss_max; /* steady-state maximum transfer size */ | ||
769 | ushort dpr_in_ptr; /* write pointer inside the internal buffer */ | ||
770 | ushort sts; /* source transfer size */ | ||
771 | ushort dpr_out_ptr; /* read pointer inside the internal buffer */ | ||
772 | ushort seob; /* source end of burst */ | ||
773 | ushort deob; /* destination end of burst */ | ||
774 | ushort dts; /* destination transfer size */ | ||
775 | ushort ret_add; /* return address when working in ERM=1 mode */ | ||
776 | ushort res0; /* reserved */ | ||
777 | uint bd_cnt; /* internal byte count */ | ||
778 | uint s_ptr; /* source internal data pointer */ | ||
779 | uint d_ptr; /* destination internal data pointer */ | ||
780 | uint istate; /* internal state */ | ||
781 | u_char res1[20]; /* pad to 64-byte length */ | ||
782 | } idma_t; | ||
783 | |||
784 | /* DMA channel mode bit fields | ||
785 | */ | ||
786 | #define IDMA_DCM_FB ((ushort)0x8000) /* fly-by mode */ | ||
787 | #define IDMA_DCM_LP ((ushort)0x4000) /* low priority */ | ||
788 | #define IDMA_DCM_TC2 ((ushort)0x0400) /* value driven on TC[2] */ | ||
789 | #define IDMA_DCM_DMA_WRAP_MASK ((ushort)0x01c0) /* mask for DMA wrap */ | ||
790 | #define IDMA_DCM_DMA_WRAP_64 ((ushort)0x0000) /* 64-byte DMA xfer buffer */ | ||
791 | #define IDMA_DCM_DMA_WRAP_128 ((ushort)0x0040) /* 128-byte DMA xfer buffer */ | ||
792 | #define IDMA_DCM_DMA_WRAP_256 ((ushort)0x0080) /* 256-byte DMA xfer buffer */ | ||
793 | #define IDMA_DCM_DMA_WRAP_512 ((ushort)0x00c0) /* 512-byte DMA xfer buffer */ | ||
794 | #define IDMA_DCM_DMA_WRAP_1024 ((ushort)0x0100) /* 1024-byte DMA xfer buffer */ | ||
795 | #define IDMA_DCM_DMA_WRAP_2048 ((ushort)0x0140) /* 2048-byte DMA xfer buffer */ | ||
796 | #define IDMA_DCM_SINC ((ushort)0x0020) /* source inc addr */ | ||
797 | #define IDMA_DCM_DINC ((ushort)0x0010) /* destination inc addr */ | ||
798 | #define IDMA_DCM_ERM ((ushort)0x0008) /* external request mode */ | ||
799 | #define IDMA_DCM_DT ((ushort)0x0004) /* DONE treatment */ | ||
800 | #define IDMA_DCM_SD_MASK ((ushort)0x0003) /* mask for SD bit field */ | ||
801 | #define IDMA_DCM_SD_MEM2MEM ((ushort)0x0000) /* memory-to-memory xfer */ | ||
802 | #define IDMA_DCM_SD_PER2MEM ((ushort)0x0002) /* peripheral-to-memory xfer */ | ||
803 | #define IDMA_DCM_SD_MEM2PER ((ushort)0x0001) /* memory-to-peripheral xfer */ | ||
804 | |||
805 | /* IDMA Buffer Descriptors | ||
806 | */ | ||
807 | typedef struct idma_bd { | ||
808 | uint flags; | ||
809 | uint len; /* data length */ | ||
810 | uint src; /* source data buffer pointer */ | ||
811 | uint dst; /* destination data buffer pointer */ | ||
812 | } idma_bd_t; | ||
813 | |||
814 | /* IDMA buffer descriptor flag bit fields | ||
815 | */ | ||
816 | #define IDMA_BD_V ((uint)0x80000000) /* valid */ | ||
817 | #define IDMA_BD_W ((uint)0x20000000) /* wrap */ | ||
818 | #define IDMA_BD_I ((uint)0x10000000) /* interrupt */ | ||
819 | #define IDMA_BD_L ((uint)0x08000000) /* last */ | ||
820 | #define IDMA_BD_CM ((uint)0x02000000) /* continuous mode */ | ||
821 | #define IDMA_BD_SDN ((uint)0x00400000) /* source done */ | ||
822 | #define IDMA_BD_DDN ((uint)0x00200000) /* destination done */ | ||
823 | #define IDMA_BD_DGBL ((uint)0x00100000) /* destination global */ | ||
824 | #define IDMA_BD_DBO_LE ((uint)0x00040000) /* little-end dest byte order */ | ||
825 | #define IDMA_BD_DBO_BE ((uint)0x00080000) /* big-end dest byte order */ | ||
826 | #define IDMA_BD_DDTB ((uint)0x00010000) /* destination data bus */ | ||
827 | #define IDMA_BD_SGBL ((uint)0x00002000) /* source global */ | ||
828 | #define IDMA_BD_SBO_LE ((uint)0x00000800) /* little-end src byte order */ | ||
829 | #define IDMA_BD_SBO_BE ((uint)0x00001000) /* big-end src byte order */ | ||
830 | #define IDMA_BD_SDTB ((uint)0x00000200) /* source data bus */ | ||
831 | |||
832 | /* per-channel IDMA registers | ||
833 | */ | ||
834 | typedef struct im_idma { | ||
835 | u_char idsr; /* IDMAn event status register */ | ||
836 | u_char res0[3]; | ||
837 | u_char idmr; /* IDMAn event mask register */ | ||
838 | u_char res1[3]; | ||
839 | } im_idma_t; | ||
840 | |||
841 | /* IDMA event register bit fields | ||
842 | */ | ||
843 | #define IDMA_EVENT_SC ((unsigned char)0x08) /* stop completed */ | ||
844 | #define IDMA_EVENT_OB ((unsigned char)0x04) /* out of buffers */ | ||
845 | #define IDMA_EVENT_EDN ((unsigned char)0x02) /* external DONE asserted */ | ||
846 | #define IDMA_EVENT_BC ((unsigned char)0x01) /* buffer descriptor complete */ | ||
847 | |||
848 | /* RISC Controller Configuration Register (RCCR) bit fields | ||
849 | */ | ||
850 | #define RCCR_TIME ((uint)0x80000000) /* timer enable */ | ||
851 | #define RCCR_TIMEP_MASK ((uint)0x3f000000) /* mask for timer period bit field */ | ||
852 | #define RCCR_DR0M ((uint)0x00800000) /* IDMA0 request mode */ | ||
853 | #define RCCR_DR1M ((uint)0x00400000) /* IDMA1 request mode */ | ||
854 | #define RCCR_DR2M ((uint)0x00000080) /* IDMA2 request mode */ | ||
855 | #define RCCR_DR3M ((uint)0x00000040) /* IDMA3 request mode */ | ||
856 | #define RCCR_DR0QP_MASK ((uint)0x00300000) /* mask for IDMA0 req priority */ | ||
857 | #define RCCR_DR0QP_HIGH ((uint)0x00000000) /* IDMA0 has high req priority */ | ||
858 | #define RCCR_DR0QP_MED ((uint)0x00100000) /* IDMA0 has medium req priority */ | ||
859 | #define RCCR_DR0QP_LOW ((uint)0x00200000) /* IDMA0 has low req priority */ | ||
860 | #define RCCR_DR1QP_MASK ((uint)0x00030000) /* mask for IDMA1 req priority */ | ||
861 | #define RCCR_DR1QP_HIGH ((uint)0x00000000) /* IDMA1 has high req priority */ | ||
862 | #define RCCR_DR1QP_MED ((uint)0x00010000) /* IDMA1 has medium req priority */ | ||
863 | #define RCCR_DR1QP_LOW ((uint)0x00020000) /* IDMA1 has low req priority */ | ||
864 | #define RCCR_DR2QP_MASK ((uint)0x00000030) /* mask for IDMA2 req priority */ | ||
865 | #define RCCR_DR2QP_HIGH ((uint)0x00000000) /* IDMA2 has high req priority */ | ||
866 | #define RCCR_DR2QP_MED ((uint)0x00000010) /* IDMA2 has medium req priority */ | ||
867 | #define RCCR_DR2QP_LOW ((uint)0x00000020) /* IDMA2 has low req priority */ | ||
868 | #define RCCR_DR3QP_MASK ((uint)0x00000003) /* mask for IDMA3 req priority */ | ||
869 | #define RCCR_DR3QP_HIGH ((uint)0x00000000) /* IDMA3 has high req priority */ | ||
870 | #define RCCR_DR3QP_MED ((uint)0x00000001) /* IDMA3 has medium req priority */ | ||
871 | #define RCCR_DR3QP_LOW ((uint)0x00000002) /* IDMA3 has low req priority */ | ||
872 | #define RCCR_EIE ((uint)0x00080000) /* external interrupt enable */ | ||
873 | #define RCCR_SCD ((uint)0x00040000) /* scheduler configuration */ | ||
874 | #define RCCR_ERAM_MASK ((uint)0x0000e000) /* mask for enable RAM microcode */ | ||
875 | #define RCCR_ERAM_0KB ((uint)0x00000000) /* use 0KB of dpram for microcode */ | ||
876 | #define RCCR_ERAM_2KB ((uint)0x00002000) /* use 2KB of dpram for microcode */ | ||
877 | #define RCCR_ERAM_4KB ((uint)0x00004000) /* use 4KB of dpram for microcode */ | ||
878 | #define RCCR_ERAM_6KB ((uint)0x00006000) /* use 6KB of dpram for microcode */ | ||
879 | #define RCCR_ERAM_8KB ((uint)0x00008000) /* use 8KB of dpram for microcode */ | ||
880 | #define RCCR_ERAM_10KB ((uint)0x0000a000) /* use 10KB of dpram for microcode */ | ||
881 | #define RCCR_ERAM_12KB ((uint)0x0000c000) /* use 12KB of dpram for microcode */ | ||
882 | #define RCCR_EDM0 ((uint)0x00000800) /* DREQ0 edge detect mode */ | ||
883 | #define RCCR_EDM1 ((uint)0x00000400) /* DREQ1 edge detect mode */ | ||
884 | #define RCCR_EDM2 ((uint)0x00000200) /* DREQ2 edge detect mode */ | ||
885 | #define RCCR_EDM3 ((uint)0x00000100) /* DREQ3 edge detect mode */ | ||
886 | #define RCCR_DEM01 ((uint)0x00000008) /* DONE0/DONE1 edge detect mode */ | ||
887 | #define RCCR_DEM23 ((uint)0x00000004) /* DONE2/DONE3 edge detect mode */ | ||
888 | |||
889 | /*----------------------------------------------------------------------- | ||
890 | * CMXFCR - CMX FCC Clock Route Register | ||
891 | */ | ||
892 | #define CMXFCR_FC1 0x40000000 /* FCC1 connection */ | ||
893 | #define CMXFCR_RF1CS_MSK 0x38000000 /* Receive FCC1 Clock Source Mask */ | ||
894 | #define CMXFCR_TF1CS_MSK 0x07000000 /* Transmit FCC1 Clock Source Mask */ | ||
895 | #define CMXFCR_FC2 0x00400000 /* FCC2 connection */ | ||
896 | #define CMXFCR_RF2CS_MSK 0x00380000 /* Receive FCC2 Clock Source Mask */ | ||
897 | #define CMXFCR_TF2CS_MSK 0x00070000 /* Transmit FCC2 Clock Source Mask */ | ||
898 | #define CMXFCR_FC3 0x00004000 /* FCC3 connection */ | ||
899 | #define CMXFCR_RF3CS_MSK 0x00003800 /* Receive FCC3 Clock Source Mask */ | ||
900 | #define CMXFCR_TF3CS_MSK 0x00000700 /* Transmit FCC3 Clock Source Mask */ | ||
901 | |||
902 | #define CMXFCR_RF1CS_BRG5 0x00000000 /* Receive FCC1 Clock Source is BRG5 */ | ||
903 | #define CMXFCR_RF1CS_BRG6 0x08000000 /* Receive FCC1 Clock Source is BRG6 */ | ||
904 | #define CMXFCR_RF1CS_BRG7 0x10000000 /* Receive FCC1 Clock Source is BRG7 */ | ||
905 | #define CMXFCR_RF1CS_BRG8 0x18000000 /* Receive FCC1 Clock Source is BRG8 */ | ||
906 | #define CMXFCR_RF1CS_CLK9 0x20000000 /* Receive FCC1 Clock Source is CLK9 */ | ||
907 | #define CMXFCR_RF1CS_CLK10 0x28000000 /* Receive FCC1 Clock Source is CLK10 */ | ||
908 | #define CMXFCR_RF1CS_CLK11 0x30000000 /* Receive FCC1 Clock Source is CLK11 */ | ||
909 | #define CMXFCR_RF1CS_CLK12 0x38000000 /* Receive FCC1 Clock Source is CLK12 */ | ||
910 | |||
911 | #define CMXFCR_TF1CS_BRG5 0x00000000 /* Transmit FCC1 Clock Source is BRG5 */ | ||
912 | #define CMXFCR_TF1CS_BRG6 0x01000000 /* Transmit FCC1 Clock Source is BRG6 */ | ||
913 | #define CMXFCR_TF1CS_BRG7 0x02000000 /* Transmit FCC1 Clock Source is BRG7 */ | ||
914 | #define CMXFCR_TF1CS_BRG8 0x03000000 /* Transmit FCC1 Clock Source is BRG8 */ | ||
915 | #define CMXFCR_TF1CS_CLK9 0x04000000 /* Transmit FCC1 Clock Source is CLK9 */ | ||
916 | #define CMXFCR_TF1CS_CLK10 0x05000000 /* Transmit FCC1 Clock Source is CLK10 */ | ||
917 | #define CMXFCR_TF1CS_CLK11 0x06000000 /* Transmit FCC1 Clock Source is CLK11 */ | ||
918 | #define CMXFCR_TF1CS_CLK12 0x07000000 /* Transmit FCC1 Clock Source is CLK12 */ | ||
919 | |||
920 | #define CMXFCR_RF2CS_BRG5 0x00000000 /* Receive FCC2 Clock Source is BRG5 */ | ||
921 | #define CMXFCR_RF2CS_BRG6 0x00080000 /* Receive FCC2 Clock Source is BRG6 */ | ||
922 | #define CMXFCR_RF2CS_BRG7 0x00100000 /* Receive FCC2 Clock Source is BRG7 */ | ||
923 | #define CMXFCR_RF2CS_BRG8 0x00180000 /* Receive FCC2 Clock Source is BRG8 */ | ||
924 | #define CMXFCR_RF2CS_CLK13 0x00200000 /* Receive FCC2 Clock Source is CLK13 */ | ||
925 | #define CMXFCR_RF2CS_CLK14 0x00280000 /* Receive FCC2 Clock Source is CLK14 */ | ||
926 | #define CMXFCR_RF2CS_CLK15 0x00300000 /* Receive FCC2 Clock Source is CLK15 */ | ||
927 | #define CMXFCR_RF2CS_CLK16 0x00380000 /* Receive FCC2 Clock Source is CLK16 */ | ||
928 | |||
929 | #define CMXFCR_TF2CS_BRG5 0x00000000 /* Transmit FCC2 Clock Source is BRG5 */ | ||
930 | #define CMXFCR_TF2CS_BRG6 0x00010000 /* Transmit FCC2 Clock Source is BRG6 */ | ||
931 | #define CMXFCR_TF2CS_BRG7 0x00020000 /* Transmit FCC2 Clock Source is BRG7 */ | ||
932 | #define CMXFCR_TF2CS_BRG8 0x00030000 /* Transmit FCC2 Clock Source is BRG8 */ | ||
933 | #define CMXFCR_TF2CS_CLK13 0x00040000 /* Transmit FCC2 Clock Source is CLK13 */ | ||
934 | #define CMXFCR_TF2CS_CLK14 0x00050000 /* Transmit FCC2 Clock Source is CLK14 */ | ||
935 | #define CMXFCR_TF2CS_CLK15 0x00060000 /* Transmit FCC2 Clock Source is CLK15 */ | ||
936 | #define CMXFCR_TF2CS_CLK16 0x00070000 /* Transmit FCC2 Clock Source is CLK16 */ | ||
937 | |||
938 | #define CMXFCR_RF3CS_BRG5 0x00000000 /* Receive FCC3 Clock Source is BRG5 */ | ||
939 | #define CMXFCR_RF3CS_BRG6 0x00000800 /* Receive FCC3 Clock Source is BRG6 */ | ||
940 | #define CMXFCR_RF3CS_BRG7 0x00001000 /* Receive FCC3 Clock Source is BRG7 */ | ||
941 | #define CMXFCR_RF3CS_BRG8 0x00001800 /* Receive FCC3 Clock Source is BRG8 */ | ||
942 | #define CMXFCR_RF3CS_CLK13 0x00002000 /* Receive FCC3 Clock Source is CLK13 */ | ||
943 | #define CMXFCR_RF3CS_CLK14 0x00002800 /* Receive FCC3 Clock Source is CLK14 */ | ||
944 | #define CMXFCR_RF3CS_CLK15 0x00003000 /* Receive FCC3 Clock Source is CLK15 */ | ||
945 | #define CMXFCR_RF3CS_CLK16 0x00003800 /* Receive FCC3 Clock Source is CLK16 */ | ||
946 | |||
947 | #define CMXFCR_TF3CS_BRG5 0x00000000 /* Transmit FCC3 Clock Source is BRG5 */ | ||
948 | #define CMXFCR_TF3CS_BRG6 0x00000100 /* Transmit FCC3 Clock Source is BRG6 */ | ||
949 | #define CMXFCR_TF3CS_BRG7 0x00000200 /* Transmit FCC3 Clock Source is BRG7 */ | ||
950 | #define CMXFCR_TF3CS_BRG8 0x00000300 /* Transmit FCC3 Clock Source is BRG8 */ | ||
951 | #define CMXFCR_TF3CS_CLK13 0x00000400 /* Transmit FCC3 Clock Source is CLK13 */ | ||
952 | #define CMXFCR_TF3CS_CLK14 0x00000500 /* Transmit FCC3 Clock Source is CLK14 */ | ||
953 | #define CMXFCR_TF3CS_CLK15 0x00000600 /* Transmit FCC3 Clock Source is CLK15 */ | ||
954 | #define CMXFCR_TF3CS_CLK16 0x00000700 /* Transmit FCC3 Clock Source is CLK16 */ | ||
955 | |||
956 | /*----------------------------------------------------------------------- | ||
957 | * CMXSCR - CMX SCC Clock Route Register | ||
958 | */ | ||
959 | #define CMXSCR_GR1 0x80000000 /* Grant Support of SCC1 */ | ||
960 | #define CMXSCR_SC1 0x40000000 /* SCC1 connection */ | ||
961 | #define CMXSCR_RS1CS_MSK 0x38000000 /* Receive SCC1 Clock Source Mask */ | ||
962 | #define CMXSCR_TS1CS_MSK 0x07000000 /* Transmit SCC1 Clock Source Mask */ | ||
963 | #define CMXSCR_GR2 0x00800000 /* Grant Support of SCC2 */ | ||
964 | #define CMXSCR_SC2 0x00400000 /* SCC2 connection */ | ||
965 | #define CMXSCR_RS2CS_MSK 0x00380000 /* Receive SCC2 Clock Source Mask */ | ||
966 | #define CMXSCR_TS2CS_MSK 0x00070000 /* Transmit SCC2 Clock Source Mask */ | ||
967 | #define CMXSCR_GR3 0x00008000 /* Grant Support of SCC3 */ | ||
968 | #define CMXSCR_SC3 0x00004000 /* SCC3 connection */ | ||
969 | #define CMXSCR_RS3CS_MSK 0x00003800 /* Receive SCC3 Clock Source Mask */ | ||
970 | #define CMXSCR_TS3CS_MSK 0x00000700 /* Transmit SCC3 Clock Source Mask */ | ||
971 | #define CMXSCR_GR4 0x00000080 /* Grant Support of SCC4 */ | ||
972 | #define CMXSCR_SC4 0x00000040 /* SCC4 connection */ | ||
973 | #define CMXSCR_RS4CS_MSK 0x00000038 /* Receive SCC4 Clock Source Mask */ | ||
974 | #define CMXSCR_TS4CS_MSK 0x00000007 /* Transmit SCC4 Clock Source Mask */ | ||
975 | |||
976 | #define CMXSCR_RS1CS_BRG1 0x00000000 /* SCC1 Rx Clock Source is BRG1 */ | ||
977 | #define CMXSCR_RS1CS_BRG2 0x08000000 /* SCC1 Rx Clock Source is BRG2 */ | ||
978 | #define CMXSCR_RS1CS_BRG3 0x10000000 /* SCC1 Rx Clock Source is BRG3 */ | ||
979 | #define CMXSCR_RS1CS_BRG4 0x18000000 /* SCC1 Rx Clock Source is BRG4 */ | ||
980 | #define CMXSCR_RS1CS_CLK11 0x20000000 /* SCC1 Rx Clock Source is CLK11 */ | ||
981 | #define CMXSCR_RS1CS_CLK12 0x28000000 /* SCC1 Rx Clock Source is CLK12 */ | ||
982 | #define CMXSCR_RS1CS_CLK3 0x30000000 /* SCC1 Rx Clock Source is CLK3 */ | ||
983 | #define CMXSCR_RS1CS_CLK4 0x38000000 /* SCC1 Rx Clock Source is CLK4 */ | ||
984 | |||
985 | #define CMXSCR_TS1CS_BRG1 0x00000000 /* SCC1 Tx Clock Source is BRG1 */ | ||
986 | #define CMXSCR_TS1CS_BRG2 0x01000000 /* SCC1 Tx Clock Source is BRG2 */ | ||
987 | #define CMXSCR_TS1CS_BRG3 0x02000000 /* SCC1 Tx Clock Source is BRG3 */ | ||
988 | #define CMXSCR_TS1CS_BRG4 0x03000000 /* SCC1 Tx Clock Source is BRG4 */ | ||
989 | #define CMXSCR_TS1CS_CLK11 0x04000000 /* SCC1 Tx Clock Source is CLK11 */ | ||
990 | #define CMXSCR_TS1CS_CLK12 0x05000000 /* SCC1 Tx Clock Source is CLK12 */ | ||
991 | #define CMXSCR_TS1CS_CLK3 0x06000000 /* SCC1 Tx Clock Source is CLK3 */ | ||
992 | #define CMXSCR_TS1CS_CLK4 0x07000000 /* SCC1 Tx Clock Source is CLK4 */ | ||
993 | |||
994 | #define CMXSCR_RS2CS_BRG1 0x00000000 /* SCC2 Rx Clock Source is BRG1 */ | ||
995 | #define CMXSCR_RS2CS_BRG2 0x00080000 /* SCC2 Rx Clock Source is BRG2 */ | ||
996 | #define CMXSCR_RS2CS_BRG3 0x00100000 /* SCC2 Rx Clock Source is BRG3 */ | ||
997 | #define CMXSCR_RS2CS_BRG4 0x00180000 /* SCC2 Rx Clock Source is BRG4 */ | ||
998 | #define CMXSCR_RS2CS_CLK11 0x00200000 /* SCC2 Rx Clock Source is CLK11 */ | ||
999 | #define CMXSCR_RS2CS_CLK12 0x00280000 /* SCC2 Rx Clock Source is CLK12 */ | ||
1000 | #define CMXSCR_RS2CS_CLK3 0x00300000 /* SCC2 Rx Clock Source is CLK3 */ | ||
1001 | #define CMXSCR_RS2CS_CLK4 0x00380000 /* SCC2 Rx Clock Source is CLK4 */ | ||
1002 | |||
1003 | #define CMXSCR_TS2CS_BRG1 0x00000000 /* SCC2 Tx Clock Source is BRG1 */ | ||
1004 | #define CMXSCR_TS2CS_BRG2 0x00010000 /* SCC2 Tx Clock Source is BRG2 */ | ||
1005 | #define CMXSCR_TS2CS_BRG3 0x00020000 /* SCC2 Tx Clock Source is BRG3 */ | ||
1006 | #define CMXSCR_TS2CS_BRG4 0x00030000 /* SCC2 Tx Clock Source is BRG4 */ | ||
1007 | #define CMXSCR_TS2CS_CLK11 0x00040000 /* SCC2 Tx Clock Source is CLK11 */ | ||
1008 | #define CMXSCR_TS2CS_CLK12 0x00050000 /* SCC2 Tx Clock Source is CLK12 */ | ||
1009 | #define CMXSCR_TS2CS_CLK3 0x00060000 /* SCC2 Tx Clock Source is CLK3 */ | ||
1010 | #define CMXSCR_TS2CS_CLK4 0x00070000 /* SCC2 Tx Clock Source is CLK4 */ | ||
1011 | |||
1012 | #define CMXSCR_RS3CS_BRG1 0x00000000 /* SCC3 Rx Clock Source is BRG1 */ | ||
1013 | #define CMXSCR_RS3CS_BRG2 0x00000800 /* SCC3 Rx Clock Source is BRG2 */ | ||
1014 | #define CMXSCR_RS3CS_BRG3 0x00001000 /* SCC3 Rx Clock Source is BRG3 */ | ||
1015 | #define CMXSCR_RS3CS_BRG4 0x00001800 /* SCC3 Rx Clock Source is BRG4 */ | ||
1016 | #define CMXSCR_RS3CS_CLK5 0x00002000 /* SCC3 Rx Clock Source is CLK5 */ | ||
1017 | #define CMXSCR_RS3CS_CLK6 0x00002800 /* SCC3 Rx Clock Source is CLK6 */ | ||
1018 | #define CMXSCR_RS3CS_CLK7 0x00003000 /* SCC3 Rx Clock Source is CLK7 */ | ||
1019 | #define CMXSCR_RS3CS_CLK8 0x00003800 /* SCC3 Rx Clock Source is CLK8 */ | ||
1020 | |||
1021 | #define CMXSCR_TS3CS_BRG1 0x00000000 /* SCC3 Tx Clock Source is BRG1 */ | ||
1022 | #define CMXSCR_TS3CS_BRG2 0x00000100 /* SCC3 Tx Clock Source is BRG2 */ | ||
1023 | #define CMXSCR_TS3CS_BRG3 0x00000200 /* SCC3 Tx Clock Source is BRG3 */ | ||
1024 | #define CMXSCR_TS3CS_BRG4 0x00000300 /* SCC3 Tx Clock Source is BRG4 */ | ||
1025 | #define CMXSCR_TS3CS_CLK5 0x00000400 /* SCC3 Tx Clock Source is CLK5 */ | ||
1026 | #define CMXSCR_TS3CS_CLK6 0x00000500 /* SCC3 Tx Clock Source is CLK6 */ | ||
1027 | #define CMXSCR_TS3CS_CLK7 0x00000600 /* SCC3 Tx Clock Source is CLK7 */ | ||
1028 | #define CMXSCR_TS3CS_CLK8 0x00000700 /* SCC3 Tx Clock Source is CLK8 */ | ||
1029 | |||
1030 | #define CMXSCR_RS4CS_BRG1 0x00000000 /* SCC4 Rx Clock Source is BRG1 */ | ||
1031 | #define CMXSCR_RS4CS_BRG2 0x00000008 /* SCC4 Rx Clock Source is BRG2 */ | ||
1032 | #define CMXSCR_RS4CS_BRG3 0x00000010 /* SCC4 Rx Clock Source is BRG3 */ | ||
1033 | #define CMXSCR_RS4CS_BRG4 0x00000018 /* SCC4 Rx Clock Source is BRG4 */ | ||
1034 | #define CMXSCR_RS4CS_CLK5 0x00000020 /* SCC4 Rx Clock Source is CLK5 */ | ||
1035 | #define CMXSCR_RS4CS_CLK6 0x00000028 /* SCC4 Rx Clock Source is CLK6 */ | ||
1036 | #define CMXSCR_RS4CS_CLK7 0x00000030 /* SCC4 Rx Clock Source is CLK7 */ | ||
1037 | #define CMXSCR_RS4CS_CLK8 0x00000038 /* SCC4 Rx Clock Source is CLK8 */ | ||
1038 | |||
1039 | #define CMXSCR_TS4CS_BRG1 0x00000000 /* SCC4 Tx Clock Source is BRG1 */ | ||
1040 | #define CMXSCR_TS4CS_BRG2 0x00000001 /* SCC4 Tx Clock Source is BRG2 */ | ||
1041 | #define CMXSCR_TS4CS_BRG3 0x00000002 /* SCC4 Tx Clock Source is BRG3 */ | ||
1042 | #define CMXSCR_TS4CS_BRG4 0x00000003 /* SCC4 Tx Clock Source is BRG4 */ | ||
1043 | #define CMXSCR_TS4CS_CLK5 0x00000004 /* SCC4 Tx Clock Source is CLK5 */ | ||
1044 | #define CMXSCR_TS4CS_CLK6 0x00000005 /* SCC4 Tx Clock Source is CLK6 */ | ||
1045 | #define CMXSCR_TS4CS_CLK7 0x00000006 /* SCC4 Tx Clock Source is CLK7 */ | ||
1046 | #define CMXSCR_TS4CS_CLK8 0x00000007 /* SCC4 Tx Clock Source is CLK8 */ | ||
1047 | |||
1048 | /*----------------------------------------------------------------------- | ||
1049 | * SIUMCR - SIU Module Configuration Register 4-31 | ||
1050 | */ | ||
1051 | #define SIUMCR_BBD 0x80000000 /* Bus Busy Disable */ | ||
1052 | #define SIUMCR_ESE 0x40000000 /* External Snoop Enable */ | ||
1053 | #define SIUMCR_PBSE 0x20000000 /* Parity Byte Select Enable */ | ||
1054 | #define SIUMCR_CDIS 0x10000000 /* Core Disable */ | ||
1055 | #define SIUMCR_DPPC00 0x00000000 /* Data Parity Pins Configuration*/ | ||
1056 | #define SIUMCR_DPPC01 0x04000000 /* - " - */ | ||
1057 | #define SIUMCR_DPPC10 0x08000000 /* - " - */ | ||
1058 | #define SIUMCR_DPPC11 0x0c000000 /* - " - */ | ||
1059 | #define SIUMCR_L2CPC00 0x00000000 /* L2 Cache Pins Configuration */ | ||
1060 | #define SIUMCR_L2CPC01 0x01000000 /* - " - */ | ||
1061 | #define SIUMCR_L2CPC10 0x02000000 /* - " - */ | ||
1062 | #define SIUMCR_L2CPC11 0x03000000 /* - " - */ | ||
1063 | #define SIUMCR_LBPC00 0x00000000 /* Local Bus Pins Configuration */ | ||
1064 | #define SIUMCR_LBPC01 0x00400000 /* - " - */ | ||
1065 | #define SIUMCR_LBPC10 0x00800000 /* - " - */ | ||
1066 | #define SIUMCR_LBPC11 0x00c00000 /* - " - */ | ||
1067 | #define SIUMCR_APPC00 0x00000000 /* Address Parity Pins Configuration*/ | ||
1068 | #define SIUMCR_APPC01 0x00100000 /* - " - */ | ||
1069 | #define SIUMCR_APPC10 0x00200000 /* - " - */ | ||
1070 | #define SIUMCR_APPC11 0x00300000 /* - " - */ | ||
1071 | #define SIUMCR_CS10PC00 0x00000000 /* CS10 Pin Configuration */ | ||
1072 | #define SIUMCR_CS10PC01 0x00040000 /* - " - */ | ||
1073 | #define SIUMCR_CS10PC10 0x00080000 /* - " - */ | ||
1074 | #define SIUMCR_CS10PC11 0x000c0000 /* - " - */ | ||
1075 | #define SIUMCR_BCTLC00 0x00000000 /* Buffer Control Configuration */ | ||
1076 | #define SIUMCR_BCTLC01 0x00010000 /* - " - */ | ||
1077 | #define SIUMCR_BCTLC10 0x00020000 /* - " - */ | ||
1078 | #define SIUMCR_BCTLC11 0x00030000 /* - " - */ | ||
1079 | #define SIUMCR_MMR00 0x00000000 /* Mask Masters Requests */ | ||
1080 | #define SIUMCR_MMR01 0x00004000 /* - " - */ | ||
1081 | #define SIUMCR_MMR10 0x00008000 /* - " - */ | ||
1082 | #define SIUMCR_MMR11 0x0000c000 /* - " - */ | ||
1083 | #define SIUMCR_LPBSE 0x00002000 /* LocalBus Parity Byte Select Enable*/ | ||
1084 | |||
1085 | /*----------------------------------------------------------------------- | ||
1086 | * SCCR - System Clock Control Register 9-8 | ||
1087 | */ | ||
1088 | #define SCCR_PCI_MODE 0x00000100 /* PCI Mode */ | ||
1089 | #define SCCR_PCI_MODCK 0x00000080 /* Value of PCI_MODCK pin */ | ||
1090 | #define SCCR_PCIDF_MSK 0x00000078 /* PCI division factor */ | ||
1091 | #define SCCR_PCIDF_SHIFT 3 | ||
1092 | |||
1093 | #ifndef CPM_IMMR_OFFSET | ||
1094 | #define CPM_IMMR_OFFSET 0x101a8 | ||
1095 | #endif | ||
1096 | |||
1097 | #define FCC_PSMR_RMII ((uint)0x00020000) /* Use RMII interface */ | ||
1098 | |||
1099 | /* FCC iop & clock configuration. BSP code is responsible to define Fx_RXCLK & Fx_TXCLK | ||
1100 | * in order to use clock-computing stuff below for the FCC x | ||
1101 | */ | ||
1102 | |||
1103 | /* Automatically generates register configurations */ | ||
1104 | #define PC_CLK(x) ((uint)(1<<(x-1))) /* FCC CLK I/O ports */ | ||
1105 | |||
1106 | #define CMXFCR_RF1CS(x) ((uint)((x-5)<<27)) /* FCC1 Receive Clock Source */ | ||
1107 | #define CMXFCR_TF1CS(x) ((uint)((x-5)<<24)) /* FCC1 Transmit Clock Source */ | ||
1108 | #define CMXFCR_RF2CS(x) ((uint)((x-9)<<19)) /* FCC2 Receive Clock Source */ | ||
1109 | #define CMXFCR_TF2CS(x) ((uint)((x-9)<<16)) /* FCC2 Transmit Clock Source */ | ||
1110 | #define CMXFCR_RF3CS(x) ((uint)((x-9)<<11)) /* FCC3 Receive Clock Source */ | ||
1111 | #define CMXFCR_TF3CS(x) ((uint)((x-9)<<8)) /* FCC3 Transmit Clock Source */ | ||
1112 | |||
1113 | #define PC_F1RXCLK PC_CLK(F1_RXCLK) | ||
1114 | #define PC_F1TXCLK PC_CLK(F1_TXCLK) | ||
1115 | #define CMX1_CLK_ROUTE (CMXFCR_RF1CS(F1_RXCLK) | CMXFCR_TF1CS(F1_TXCLK)) | ||
1116 | #define CMX1_CLK_MASK ((uint)0xff000000) | ||
1117 | |||
1118 | #define PC_F2RXCLK PC_CLK(F2_RXCLK) | ||
1119 | #define PC_F2TXCLK PC_CLK(F2_TXCLK) | ||
1120 | #define CMX2_CLK_ROUTE (CMXFCR_RF2CS(F2_RXCLK) | CMXFCR_TF2CS(F2_TXCLK)) | ||
1121 | #define CMX2_CLK_MASK ((uint)0x00ff0000) | ||
1122 | |||
1123 | #define PC_F3RXCLK PC_CLK(F3_RXCLK) | ||
1124 | #define PC_F3TXCLK PC_CLK(F3_TXCLK) | ||
1125 | #define CMX3_CLK_ROUTE (CMXFCR_RF3CS(F3_RXCLK) | CMXFCR_TF3CS(F3_TXCLK)) | ||
1126 | #define CMX3_CLK_MASK ((uint)0x0000ff00) | ||
1127 | |||
1128 | #define CPMUX_CLK_MASK (CMX3_CLK_MASK | CMX2_CLK_MASK) | ||
1129 | #define CPMUX_CLK_ROUTE (CMX3_CLK_ROUTE | CMX2_CLK_ROUTE) | ||
1130 | |||
1131 | #define CLK_TRX (PC_F3TXCLK | PC_F3RXCLK | PC_F2TXCLK | PC_F2RXCLK) | ||
1132 | |||
1133 | /* I/O Pin assignment for FCC1. I don't yet know the best way to do this, | ||
1134 | * but there is little variation among the choices. | ||
1135 | */ | ||
1136 | #define PA1_COL 0x00000001U | ||
1137 | #define PA1_CRS 0x00000002U | ||
1138 | #define PA1_TXER 0x00000004U | ||
1139 | #define PA1_TXEN 0x00000008U | ||
1140 | #define PA1_RXDV 0x00000010U | ||
1141 | #define PA1_RXER 0x00000020U | ||
1142 | #define PA1_TXDAT 0x00003c00U | ||
1143 | #define PA1_RXDAT 0x0003c000U | ||
1144 | #define PA1_PSORA0 (PA1_RXDAT | PA1_TXDAT) | ||
1145 | #define PA1_PSORA1 (PA1_COL | PA1_CRS | PA1_TXER | PA1_TXEN | \ | ||
1146 | PA1_RXDV | PA1_RXER) | ||
1147 | #define PA1_DIRA0 (PA1_RXDAT | PA1_CRS | PA1_COL | PA1_RXER | PA1_RXDV) | ||
1148 | #define PA1_DIRA1 (PA1_TXDAT | PA1_TXEN | PA1_TXER) | ||
1149 | |||
1150 | |||
1151 | /* I/O Pin assignment for FCC2. I don't yet know the best way to do this, | ||
1152 | * but there is little variation among the choices. | ||
1153 | */ | ||
1154 | #define PB2_TXER 0x00000001U | ||
1155 | #define PB2_RXDV 0x00000002U | ||
1156 | #define PB2_TXEN 0x00000004U | ||
1157 | #define PB2_RXER 0x00000008U | ||
1158 | #define PB2_COL 0x00000010U | ||
1159 | #define PB2_CRS 0x00000020U | ||
1160 | #define PB2_TXDAT 0x000003c0U | ||
1161 | #define PB2_RXDAT 0x00003c00U | ||
1162 | #define PB2_PSORB0 (PB2_RXDAT | PB2_TXDAT | PB2_CRS | PB2_COL | \ | ||
1163 | PB2_RXER | PB2_RXDV | PB2_TXER) | ||
1164 | #define PB2_PSORB1 (PB2_TXEN) | ||
1165 | #define PB2_DIRB0 (PB2_RXDAT | PB2_CRS | PB2_COL | PB2_RXER | PB2_RXDV) | ||
1166 | #define PB2_DIRB1 (PB2_TXDAT | PB2_TXEN | PB2_TXER) | ||
1167 | |||
1168 | |||
1169 | /* I/O Pin assignment for FCC3. I don't yet know the best way to do this, | ||
1170 | * but there is little variation among the choices. | ||
1171 | */ | ||
1172 | #define PB3_RXDV 0x00004000U | ||
1173 | #define PB3_RXER 0x00008000U | ||
1174 | #define PB3_TXER 0x00010000U | ||
1175 | #define PB3_TXEN 0x00020000U | ||
1176 | #define PB3_COL 0x00040000U | ||
1177 | #define PB3_CRS 0x00080000U | ||
1178 | #define PB3_TXDAT 0x0f000000U | ||
1179 | #define PC3_TXDAT 0x00000010U | ||
1180 | #define PB3_RXDAT 0x00f00000U | ||
1181 | #define PB3_PSORB0 (PB3_RXDAT | PB3_TXDAT | PB3_CRS | PB3_COL | \ | ||
1182 | PB3_RXER | PB3_RXDV | PB3_TXER | PB3_TXEN) | ||
1183 | #define PB3_PSORB1 0 | ||
1184 | #define PB3_DIRB0 (PB3_RXDAT | PB3_CRS | PB3_COL | PB3_RXER | PB3_RXDV) | ||
1185 | #define PB3_DIRB1 (PB3_TXDAT | PB3_TXEN | PB3_TXER) | ||
1186 | #define PC3_DIRC1 (PC3_TXDAT) | ||
1187 | |||
1188 | /* Handy macro to specify mem for FCCs*/ | ||
1189 | #define FCC_MEM_OFFSET(x) (CPM_FCC_SPECIAL_BASE + (x*128)) | ||
1190 | #define FCC1_MEM_OFFSET FCC_MEM_OFFSET(0) | ||
1191 | #define FCC2_MEM_OFFSET FCC_MEM_OFFSET(1) | ||
1192 | #define FCC3_MEM_OFFSET FCC_MEM_OFFSET(2) | ||
1193 | |||
1194 | /* Clocks and GRG's */ | ||
1195 | |||
1196 | enum cpm_clk_dir { | ||
1197 | CPM_CLK_RX, | ||
1198 | CPM_CLK_TX, | ||
1199 | CPM_CLK_RTX | ||
1200 | }; | ||
1201 | |||
1202 | enum cpm_clk_target { | ||
1203 | CPM_CLK_SCC1, | ||
1204 | CPM_CLK_SCC2, | ||
1205 | CPM_CLK_SCC3, | ||
1206 | CPM_CLK_SCC4, | ||
1207 | CPM_CLK_FCC1, | ||
1208 | CPM_CLK_FCC2, | ||
1209 | CPM_CLK_FCC3 | ||
1210 | }; | ||
1211 | |||
1212 | enum cpm_clk { | ||
1213 | CPM_CLK_NONE = 0, | ||
1214 | CPM_BRG1, /* Baud Rate Generator 1 */ | ||
1215 | CPM_BRG2, /* Baud Rate Generator 2 */ | ||
1216 | CPM_BRG3, /* Baud Rate Generator 3 */ | ||
1217 | CPM_BRG4, /* Baud Rate Generator 4 */ | ||
1218 | CPM_BRG5, /* Baud Rate Generator 5 */ | ||
1219 | CPM_BRG6, /* Baud Rate Generator 6 */ | ||
1220 | CPM_BRG7, /* Baud Rate Generator 7 */ | ||
1221 | CPM_BRG8, /* Baud Rate Generator 8 */ | ||
1222 | CPM_CLK1, /* Clock 1 */ | ||
1223 | CPM_CLK2, /* Clock 2 */ | ||
1224 | CPM_CLK3, /* Clock 3 */ | ||
1225 | CPM_CLK4, /* Clock 4 */ | ||
1226 | CPM_CLK5, /* Clock 5 */ | ||
1227 | CPM_CLK6, /* Clock 6 */ | ||
1228 | CPM_CLK7, /* Clock 7 */ | ||
1229 | CPM_CLK8, /* Clock 8 */ | ||
1230 | CPM_CLK9, /* Clock 9 */ | ||
1231 | CPM_CLK10, /* Clock 10 */ | ||
1232 | CPM_CLK11, /* Clock 11 */ | ||
1233 | CPM_CLK12, /* Clock 12 */ | ||
1234 | CPM_CLK13, /* Clock 13 */ | ||
1235 | CPM_CLK14, /* Clock 14 */ | ||
1236 | CPM_CLK15, /* Clock 15 */ | ||
1237 | CPM_CLK16, /* Clock 16 */ | ||
1238 | CPM_CLK17, /* Clock 17 */ | ||
1239 | CPM_CLK18, /* Clock 18 */ | ||
1240 | CPM_CLK19, /* Clock 19 */ | ||
1241 | CPM_CLK20, /* Clock 20 */ | ||
1242 | CPM_CLK_DUMMY | ||
1243 | }; | ||
1244 | |||
1245 | extern int cpm2_clk_setup(enum cpm_clk_target target, int clock, int mode); | ||
1246 | |||
1247 | #endif /* __CPM2__ */ | ||
1248 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/delay.h b/include/asm-ppc/delay.h deleted file mode 100644 index badde6845af2..000000000000 --- a/include/asm-ppc/delay.h +++ /dev/null | |||
@@ -1,66 +0,0 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | #ifndef _PPC_DELAY_H | ||
3 | #define _PPC_DELAY_H | ||
4 | |||
5 | #include <asm/param.h> | ||
6 | |||
7 | /* | ||
8 | * Copyright 1996, Paul Mackerras. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of the GNU General Public License | ||
12 | * as published by the Free Software Foundation; either version | ||
13 | * 2 of the License, or (at your option) any later version. | ||
14 | */ | ||
15 | |||
16 | extern unsigned long loops_per_jiffy; | ||
17 | |||
18 | extern void __delay(unsigned int loops); | ||
19 | |||
20 | /* | ||
21 | * Note that 19 * 226 == 4294 ==~ 2^32 / 10^6, so | ||
22 | * loops = (4294 * usecs * loops_per_jiffy * HZ) / 2^32. | ||
23 | * | ||
24 | * The mulhwu instruction gives us loops = (a * b) / 2^32. | ||
25 | * We choose a = usecs * 19 * HZ and b = loops_per_jiffy * 226 | ||
26 | * because this lets us support a wide range of HZ and | ||
27 | * loops_per_jiffy values without either a or b overflowing 2^32. | ||
28 | * Thus we need usecs * HZ <= (2^32 - 1) / 19 = 226050910 and | ||
29 | * loops_per_jiffy <= (2^32 - 1) / 226 = 19004280 | ||
30 | * (which corresponds to ~3800 bogomips at HZ = 100). | ||
31 | * -- paulus | ||
32 | */ | ||
33 | #define __MAX_UDELAY (226050910UL/HZ) /* maximum udelay argument */ | ||
34 | #define __MAX_NDELAY (4294967295UL/HZ) /* maximum ndelay argument */ | ||
35 | |||
36 | extern __inline__ void __udelay(unsigned int x) | ||
37 | { | ||
38 | unsigned int loops; | ||
39 | |||
40 | __asm__("mulhwu %0,%1,%2" : "=r" (loops) : | ||
41 | "r" (x), "r" (loops_per_jiffy * 226)); | ||
42 | __delay(loops); | ||
43 | } | ||
44 | |||
45 | extern __inline__ void __ndelay(unsigned int x) | ||
46 | { | ||
47 | unsigned int loops; | ||
48 | |||
49 | __asm__("mulhwu %0,%1,%2" : "=r" (loops) : | ||
50 | "r" (x), "r" (loops_per_jiffy * 5)); | ||
51 | __delay(loops); | ||
52 | } | ||
53 | |||
54 | extern void __bad_udelay(void); /* deliberately undefined */ | ||
55 | extern void __bad_ndelay(void); /* deliberately undefined */ | ||
56 | |||
57 | #define udelay(n) (__builtin_constant_p(n)? \ | ||
58 | ((n) > __MAX_UDELAY? __bad_udelay(): __udelay((n) * (19 * HZ))) : \ | ||
59 | __udelay((n) * (19 * HZ))) | ||
60 | |||
61 | #define ndelay(n) (__builtin_constant_p(n)? \ | ||
62 | ((n) > __MAX_NDELAY? __bad_ndelay(): __ndelay((n) * HZ)) : \ | ||
63 | __ndelay((n) * HZ)) | ||
64 | |||
65 | #endif /* defined(_PPC_DELAY_H) */ | ||
66 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/device.h b/include/asm-ppc/device.h deleted file mode 100644 index d8f9872b0e2d..000000000000 --- a/include/asm-ppc/device.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | /* | ||
2 | * Arch specific extensions to struct device | ||
3 | * | ||
4 | * This file is released under the GPLv2 | ||
5 | */ | ||
6 | #include <asm-generic/device.h> | ||
7 | |||
diff --git a/include/asm-ppc/floppy.h b/include/asm-ppc/floppy.h deleted file mode 100644 index 7d9b3f430d92..000000000000 --- a/include/asm-ppc/floppy.h +++ /dev/null | |||
@@ -1,178 +0,0 @@ | |||
1 | /* | ||
2 | * Architecture specific parts of the Floppy driver | ||
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) 1995 | ||
9 | */ | ||
10 | #ifdef __KERNEL__ | ||
11 | #ifndef __ASM_PPC_FLOPPY_H | ||
12 | #define __ASM_PPC_FLOPPY_H | ||
13 | |||
14 | #define fd_inb(port) inb_p(port) | ||
15 | #define fd_outb(value,port) outb_p(value,port) | ||
16 | |||
17 | #define fd_disable_dma() fd_ops->_disable_dma(FLOPPY_DMA) | ||
18 | #define fd_free_dma() fd_ops->_free_dma(FLOPPY_DMA) | ||
19 | #define fd_get_dma_residue() fd_ops->_get_dma_residue(FLOPPY_DMA) | ||
20 | #define fd_dma_setup(addr, size, mode, io) fd_ops->_dma_setup(addr, size, mode, io) | ||
21 | #define fd_enable_irq() enable_irq(FLOPPY_IRQ) | ||
22 | #define fd_disable_irq() disable_irq(FLOPPY_IRQ) | ||
23 | #define fd_free_irq() free_irq(FLOPPY_IRQ, NULL); | ||
24 | |||
25 | static int fd_request_dma(void); | ||
26 | |||
27 | struct fd_dma_ops { | ||
28 | void (*_disable_dma)(unsigned int dmanr); | ||
29 | void (*_free_dma)(unsigned int dmanr); | ||
30 | int (*_get_dma_residue)(unsigned int dummy); | ||
31 | int (*_dma_setup)(char *addr, unsigned long size, int mode, int io); | ||
32 | }; | ||
33 | |||
34 | static int virtual_dma_count; | ||
35 | static int virtual_dma_residue; | ||
36 | static char *virtual_dma_addr; | ||
37 | static int virtual_dma_mode; | ||
38 | static int doing_vdma; | ||
39 | static struct fd_dma_ops *fd_ops; | ||
40 | |||
41 | static irqreturn_t floppy_hardint(int irq, void *dev_id) | ||
42 | { | ||
43 | unsigned char st; | ||
44 | int lcount; | ||
45 | char *lptr; | ||
46 | |||
47 | if (!doing_vdma) | ||
48 | return floppy_interrupt(irq, dev_id); | ||
49 | |||
50 | |||
51 | st = 1; | ||
52 | for (lcount=virtual_dma_count, lptr=virtual_dma_addr; | ||
53 | lcount; lcount--, lptr++) { | ||
54 | st=inb(virtual_dma_port+4) & 0xa0 ; | ||
55 | if (st != 0xa0) | ||
56 | break; | ||
57 | if (virtual_dma_mode) | ||
58 | outb_p(*lptr, virtual_dma_port+5); | ||
59 | else | ||
60 | *lptr = inb_p(virtual_dma_port+5); | ||
61 | } | ||
62 | virtual_dma_count = lcount; | ||
63 | virtual_dma_addr = lptr; | ||
64 | st = inb(virtual_dma_port+4); | ||
65 | |||
66 | if (st == 0x20) | ||
67 | return IRQ_HANDLED; | ||
68 | if (!(st & 0x20)) { | ||
69 | virtual_dma_residue += virtual_dma_count; | ||
70 | virtual_dma_count=0; | ||
71 | doing_vdma = 0; | ||
72 | floppy_interrupt(irq, dev_id); | ||
73 | return IRQ_HANDLED; | ||
74 | } | ||
75 | return IRQ_HANDLED; | ||
76 | } | ||
77 | |||
78 | static void vdma_disable_dma(unsigned int dummy) | ||
79 | { | ||
80 | doing_vdma = 0; | ||
81 | virtual_dma_residue += virtual_dma_count; | ||
82 | virtual_dma_count=0; | ||
83 | } | ||
84 | |||
85 | static void vdma_nop(unsigned int dummy) | ||
86 | { | ||
87 | } | ||
88 | |||
89 | |||
90 | static int vdma_get_dma_residue(unsigned int dummy) | ||
91 | { | ||
92 | return virtual_dma_count + virtual_dma_residue; | ||
93 | } | ||
94 | |||
95 | |||
96 | static int fd_request_irq(void) | ||
97 | { | ||
98 | if (can_use_virtual_dma) | ||
99 | return request_irq(FLOPPY_IRQ, floppy_hardint, | ||
100 | IRQF_DISABLED, "floppy", NULL); | ||
101 | else | ||
102 | return request_irq(FLOPPY_IRQ, floppy_interrupt, | ||
103 | IRQF_DISABLED, "floppy", NULL); | ||
104 | } | ||
105 | |||
106 | static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io) | ||
107 | { | ||
108 | doing_vdma = 1; | ||
109 | virtual_dma_port = io; | ||
110 | virtual_dma_mode = (mode == DMA_MODE_WRITE); | ||
111 | virtual_dma_addr = addr; | ||
112 | virtual_dma_count = size; | ||
113 | virtual_dma_residue = 0; | ||
114 | return 0; | ||
115 | } | ||
116 | |||
117 | static int hard_dma_setup(char *addr, unsigned long size, int mode, int io) | ||
118 | { | ||
119 | /* actual, physical DMA */ | ||
120 | doing_vdma = 0; | ||
121 | clear_dma_ff(FLOPPY_DMA); | ||
122 | set_dma_mode(FLOPPY_DMA,mode); | ||
123 | set_dma_addr(FLOPPY_DMA,(unsigned int)virt_to_bus(addr)); | ||
124 | set_dma_count(FLOPPY_DMA,size); | ||
125 | enable_dma(FLOPPY_DMA); | ||
126 | return 0; | ||
127 | } | ||
128 | |||
129 | static struct fd_dma_ops real_dma_ops = | ||
130 | { | ||
131 | ._disable_dma = disable_dma, | ||
132 | ._free_dma = free_dma, | ||
133 | ._get_dma_residue = get_dma_residue, | ||
134 | ._dma_setup = hard_dma_setup | ||
135 | }; | ||
136 | |||
137 | static struct fd_dma_ops virt_dma_ops = | ||
138 | { | ||
139 | ._disable_dma = vdma_disable_dma, | ||
140 | ._free_dma = vdma_nop, | ||
141 | ._get_dma_residue = vdma_get_dma_residue, | ||
142 | ._dma_setup = vdma_dma_setup | ||
143 | }; | ||
144 | |||
145 | static int fd_request_dma() | ||
146 | { | ||
147 | if (can_use_virtual_dma & 1) { | ||
148 | fd_ops = &virt_dma_ops; | ||
149 | return 0; | ||
150 | } | ||
151 | else { | ||
152 | fd_ops = &real_dma_ops; | ||
153 | return request_dma(FLOPPY_DMA, "floppy"); | ||
154 | } | ||
155 | } | ||
156 | |||
157 | static int FDC1 = 0x3f0; | ||
158 | static int FDC2 = -1; | ||
159 | |||
160 | /* | ||
161 | * Again, the CMOS information not available | ||
162 | */ | ||
163 | #define FLOPPY0_TYPE 6 | ||
164 | #define FLOPPY1_TYPE 0 | ||
165 | |||
166 | #define N_FDC 2 /* Don't change this! */ | ||
167 | #define N_DRIVE 8 | ||
168 | |||
169 | /* | ||
170 | * The PowerPC has no problems with floppy DMA crossing 64k borders. | ||
171 | */ | ||
172 | #define CROSS_64KB(a,s) (0) | ||
173 | |||
174 | #endif /* __ASM_PPC_FLOPPY_H */ | ||
175 | |||
176 | #define EXTRA_FLOPPY_PARAMS | ||
177 | |||
178 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/fs_pd.h b/include/asm-ppc/fs_pd.h deleted file mode 100644 index 8691327653af..000000000000 --- a/include/asm-ppc/fs_pd.h +++ /dev/null | |||
@@ -1,36 +0,0 @@ | |||
1 | /* | ||
2 | * Platform information definitions. | ||
3 | * | ||
4 | * 2006 (c) MontaVista Software, Inc. | ||
5 | * Vitaly Bordug <vbordug@ru.mvista.com> | ||
6 | * | ||
7 | * This file is licensed under the terms of the GNU General Public License | ||
8 | * version 2. This program is licensed "as is" without any warranty of any | ||
9 | * kind, whether express or implied. | ||
10 | */ | ||
11 | |||
12 | #ifndef FS_PD_H | ||
13 | #define FS_PD_H | ||
14 | |||
15 | static inline int uart_baudrate(void) | ||
16 | { | ||
17 | int baud; | ||
18 | bd_t *bd = (bd_t *) __res; | ||
19 | |||
20 | if (bd->bi_baudrate) | ||
21 | baud = bd->bi_baudrate; | ||
22 | else | ||
23 | baud = -1; | ||
24 | return baud; | ||
25 | } | ||
26 | |||
27 | static inline int uart_clock(void) | ||
28 | { | ||
29 | return (((bd_t *) __res)->bi_intfreq); | ||
30 | } | ||
31 | |||
32 | #define cpm2_map(member) (&cpm2_immr->member) | ||
33 | #define cpm2_map_size(member, size) (&cpm2_immr->member) | ||
34 | #define cpm2_unmap(addr) do {} while(0) | ||
35 | |||
36 | #endif | ||
diff --git a/include/asm-ppc/gg2.h b/include/asm-ppc/gg2.h deleted file mode 100644 index 341ae55b99fb..000000000000 --- a/include/asm-ppc/gg2.h +++ /dev/null | |||
@@ -1,61 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/gg2.h -- VLSI VAS96011/12 `Golden Gate 2' register definitions | ||
3 | * | ||
4 | * Copyright (C) 1997 Geert Uytterhoeven | ||
5 | * | ||
6 | * This file is based on the following documentation: | ||
7 | * | ||
8 | * The VAS96011/12 Chipset, Data Book, Edition 1.0 | ||
9 | * VLSI Technology, Inc. | ||
10 | * | ||
11 | * This file is subject to the terms and conditions of the GNU General Public | ||
12 | * License. See the file COPYING in the main directory of this archive | ||
13 | * for more details. | ||
14 | */ | ||
15 | |||
16 | #ifndef _ASMPPC_GG2_H | ||
17 | #define _ASMPPC_GG2_H | ||
18 | |||
19 | /* | ||
20 | * Memory Map (CHRP mode) | ||
21 | */ | ||
22 | |||
23 | #define GG2_PCI_MEM_BASE 0xc0000000 /* Peripheral memory space */ | ||
24 | #define GG2_ISA_MEM_BASE 0xf7000000 /* Peripheral memory alias */ | ||
25 | #define GG2_ISA_IO_BASE 0xf8000000 /* Peripheral I/O space */ | ||
26 | #define GG2_PCI_CONFIG_BASE 0xfec00000 /* PCI configuration space */ | ||
27 | #define GG2_INT_ACK_SPECIAL 0xfec80000 /* Interrupt acknowledge and */ | ||
28 | /* special PCI cycles */ | ||
29 | #define GG2_ROM_BASE0 0xff000000 /* ROM bank 0 */ | ||
30 | #define GG2_ROM_BASE1 0xff800000 /* ROM bank 1 */ | ||
31 | |||
32 | |||
33 | /* | ||
34 | * GG2 specific PCI Registers | ||
35 | */ | ||
36 | |||
37 | extern void __iomem *gg2_pci_config_base; /* kernel virtual address */ | ||
38 | |||
39 | #define GG2_PCI_BUSNO 0x40 /* Bus number */ | ||
40 | #define GG2_PCI_SUBBUSNO 0x41 /* Subordinate bus number */ | ||
41 | #define GG2_PCI_DISCCTR 0x42 /* Disconnect counter */ | ||
42 | #define GG2_PCI_PPC_CTRL 0x50 /* PowerPC interface control register */ | ||
43 | #define GG2_PCI_ADDR_MAP 0x5c /* Address map */ | ||
44 | #define GG2_PCI_PCI_CTRL 0x60 /* PCI interface control register */ | ||
45 | #define GG2_PCI_ROM_CTRL 0x70 /* ROM interface control register */ | ||
46 | #define GG2_PCI_ROM_TIME 0x74 /* ROM timing */ | ||
47 | #define GG2_PCI_CC_CTRL 0x80 /* Cache controller control register */ | ||
48 | #define GG2_PCI_DRAM_BANK0 0x90 /* Control register for DRAM bank #0 */ | ||
49 | #define GG2_PCI_DRAM_BANK1 0x94 /* Control register for DRAM bank #1 */ | ||
50 | #define GG2_PCI_DRAM_BANK2 0x98 /* Control register for DRAM bank #2 */ | ||
51 | #define GG2_PCI_DRAM_BANK3 0x9c /* Control register for DRAM bank #3 */ | ||
52 | #define GG2_PCI_DRAM_BANK4 0xa0 /* Control register for DRAM bank #4 */ | ||
53 | #define GG2_PCI_DRAM_BANK5 0xa4 /* Control register for DRAM bank #5 */ | ||
54 | #define GG2_PCI_DRAM_TIME0 0xb0 /* Timing parameters set #0 */ | ||
55 | #define GG2_PCI_DRAM_TIME1 0xb4 /* Timing parameters set #1 */ | ||
56 | #define GG2_PCI_DRAM_CTRL 0xc0 /* DRAM control */ | ||
57 | #define GG2_PCI_ERR_CTRL 0xd0 /* Error control register */ | ||
58 | #define GG2_PCI_ERR_STATUS 0xd4 /* Error status register */ | ||
59 | /* Cleared when read */ | ||
60 | |||
61 | #endif /* _ASMPPC_GG2_H */ | ||
diff --git a/include/asm-ppc/gt64260.h b/include/asm-ppc/gt64260.h deleted file mode 100644 index 9e63b3cfffca..000000000000 --- a/include/asm-ppc/gt64260.h +++ /dev/null | |||
@@ -1,322 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/gt64260.h | ||
3 | * | ||
4 | * Prototypes, etc. for the Marvell/Galileo GT64260 host bridge routines. | ||
5 | * | ||
6 | * Author: Mark A. Greer <mgreer@mvista.com> | ||
7 | * | ||
8 | * 2001 (c) MontaVista, Software, Inc. This file is licensed under | ||
9 | * the terms of the GNU General Public License version 2. This program | ||
10 | * is licensed "as is" without any warranty of any kind, whether express | ||
11 | * or implied. | ||
12 | */ | ||
13 | #ifndef __ASMPPC_GT64260_H | ||
14 | #define __ASMPPC_GT64260_H | ||
15 | |||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/pci.h> | ||
19 | #include <linux/slab.h> | ||
20 | |||
21 | #include <asm/byteorder.h> | ||
22 | #include <asm/io.h> | ||
23 | #include <asm/irq.h> | ||
24 | #include <asm/uaccess.h> | ||
25 | #include <asm/machdep.h> | ||
26 | #include <asm/pci-bridge.h> | ||
27 | #include <asm/gt64260_defs.h> | ||
28 | |||
29 | |||
30 | extern u32 gt64260_base; | ||
31 | extern u32 gt64260_irq_base; /* We handle the next 96 IRQs from here */ | ||
32 | extern u32 gt64260_revision; | ||
33 | extern u8 gt64260_pci_exclude_bridge; | ||
34 | |||
35 | #ifndef TRUE | ||
36 | #define TRUE 1 | ||
37 | #endif | ||
38 | |||
39 | #ifndef FALSE | ||
40 | #define FALSE 0 | ||
41 | #endif | ||
42 | |||
43 | /* IRQs defined by the 64260 */ | ||
44 | #define GT64260_IRQ_MPSC0 40 | ||
45 | #define GT64260_IRQ_MPSC1 42 | ||
46 | #define GT64260_IRQ_SDMA 36 | ||
47 | |||
48 | /* | ||
49 | * Define a default physical memory map to be set up on the bridge. | ||
50 | * Also define a struct to pass that info from board-specific routines to | ||
51 | * GT64260 generic set up routines. By passing this info in, the board | ||
52 | * support developer can modify it at will. | ||
53 | */ | ||
54 | |||
55 | /* | ||
56 | * This is the default memory map: | ||
57 | * CPU PCI | ||
58 | * --- --- | ||
59 | * PCI 0 I/O: 0xfa000000-0xfaffffff 0x00000000-0x00ffffff | ||
60 | * PCI 1 I/O: 0xfb000000-0xfbffffff 0x01000000-0x01ffffff | ||
61 | * PCI 0 MEM: 0x80000000-0x8fffffff 0x80000000-0x8fffffff | ||
62 | * PCI 1 MEM: 0x90000000-0x9fffffff 0x90000000-0x9fffffff | ||
63 | */ | ||
64 | |||
65 | /* Default physical memory map for the GT64260 bridge */ | ||
66 | |||
67 | /* | ||
68 | * PCI Bus 0 Definitions | ||
69 | */ | ||
70 | #define GT64260_PCI_0_IO_SIZE 0x01000000U | ||
71 | #define GT64260_PCI_0_MEM_SIZE 0x10000000U | ||
72 | |||
73 | /* Processor Physical addresses */ | ||
74 | #define GT64260_PCI_0_IO_START_PROC 0xfa000000U | ||
75 | #define GT64260_PCI_0_IO_END_PROC (GT64260_PCI_0_IO_START_PROC + \ | ||
76 | GT64260_PCI_0_IO_SIZE - 1) | ||
77 | |||
78 | /* PCI 0 addresses */ | ||
79 | #define GT64260_PCI_0_IO_START 0x00000000U | ||
80 | #define GT64260_PCI_0_IO_END (GT64260_PCI_0_IO_START + \ | ||
81 | GT64260_PCI_0_IO_SIZE - 1) | ||
82 | |||
83 | /* Processor Physical addresses */ | ||
84 | #define GT64260_PCI_0_MEM_START_PROC 0x80000000U | ||
85 | #define GT64260_PCI_0_MEM_END_PROC (GT64260_PCI_0_MEM_START_PROC + \ | ||
86 | GT64260_PCI_0_MEM_SIZE - 1) | ||
87 | |||
88 | /* PCI 0 addresses */ | ||
89 | #define GT64260_PCI_0_MEM_START 0x80000000U | ||
90 | #define GT64260_PCI_0_MEM_END (GT64260_PCI_0_MEM_START + \ | ||
91 | GT64260_PCI_0_MEM_SIZE - 1) | ||
92 | |||
93 | /* | ||
94 | * PCI Bus 1 Definitions | ||
95 | */ | ||
96 | #define GT64260_PCI_1_IO_SIZE 0x01000000U | ||
97 | #define GT64260_PCI_1_MEM_SIZE 0x10000000U | ||
98 | |||
99 | /* PCI 1 addresses */ | ||
100 | #define GT64260_PCI_1_IO_START 0x01000000U | ||
101 | #define GT64260_PCI_1_IO_END (GT64260_PCI_1_IO_START + \ | ||
102 | GT64260_PCI_1_IO_SIZE - 1) | ||
103 | |||
104 | /* Processor Physical addresses */ | ||
105 | #define GT64260_PCI_1_IO_START_PROC 0xfb000000U | ||
106 | #define GT64260_PCI_1_IO_END_PROC (GT64260_PCI_1_IO_START_PROC + \ | ||
107 | GT64260_PCI_1_IO_SIZE - 1) | ||
108 | |||
109 | /* PCI 1 addresses */ | ||
110 | #define GT64260_PCI_1_MEM_START 0x90000000U | ||
111 | #define GT64260_PCI_1_MEM_END (GT64260_PCI_1_MEM_START + \ | ||
112 | GT64260_PCI_1_MEM_SIZE - 1) | ||
113 | |||
114 | /* Processor Physical addresses */ | ||
115 | #define GT64260_PCI_1_MEM_START_PROC 0x90000000U | ||
116 | #define GT64260_PCI_1_MEM_END_PROC (GT64260_PCI_1_MEM_START_PROC + \ | ||
117 | GT64260_PCI_1_MEM_SIZE - 1) | ||
118 | |||
119 | /* Define struct to pass mem-map info into gt64260_common.c code */ | ||
120 | typedef struct { | ||
121 | struct pci_controller *hose_a; | ||
122 | struct pci_controller *hose_b; | ||
123 | |||
124 | u32 mem_size; | ||
125 | |||
126 | u32 pci_0_io_start_proc; | ||
127 | u32 pci_0_io_start_pci; | ||
128 | u32 pci_0_io_size; | ||
129 | u32 pci_0_io_swap; | ||
130 | |||
131 | u32 pci_0_mem_start_proc; | ||
132 | u32 pci_0_mem_start_pci_hi; | ||
133 | u32 pci_0_mem_start_pci_lo; | ||
134 | u32 pci_0_mem_size; | ||
135 | u32 pci_0_mem_swap; | ||
136 | |||
137 | u32 pci_1_io_start_proc; | ||
138 | u32 pci_1_io_start_pci; | ||
139 | u32 pci_1_io_size; | ||
140 | u32 pci_1_io_swap; | ||
141 | |||
142 | u32 pci_1_mem_start_proc; | ||
143 | u32 pci_1_mem_start_pci_hi; | ||
144 | u32 pci_1_mem_start_pci_lo; | ||
145 | u32 pci_1_mem_size; | ||
146 | u32 pci_1_mem_swap; | ||
147 | } gt64260_bridge_info_t; | ||
148 | |||
149 | #define GT64260_BRIDGE_INFO_DEFAULT(ip, ms) { \ | ||
150 | (ip)->mem_size = (ms); \ | ||
151 | \ | ||
152 | (ip)->pci_0_io_start_proc = GT64260_PCI_0_IO_START_PROC; \ | ||
153 | (ip)->pci_0_io_start_pci = GT64260_PCI_0_IO_START; \ | ||
154 | (ip)->pci_0_io_size = GT64260_PCI_0_IO_SIZE; \ | ||
155 | (ip)->pci_0_io_swap = GT64260_CPU_PCI_SWAP_NONE; \ | ||
156 | \ | ||
157 | (ip)->pci_0_mem_start_proc = GT64260_PCI_0_MEM_START_PROC; \ | ||
158 | (ip)->pci_0_mem_start_pci_hi = 0x00000000; \ | ||
159 | (ip)->pci_0_mem_start_pci_lo = GT64260_PCI_0_MEM_START; \ | ||
160 | (ip)->pci_0_mem_size = GT64260_PCI_0_MEM_SIZE; \ | ||
161 | (ip)->pci_0_mem_swap = GT64260_CPU_PCI_SWAP_NONE; \ | ||
162 | \ | ||
163 | (ip)->pci_1_io_start_proc = GT64260_PCI_1_IO_START_PROC; \ | ||
164 | (ip)->pci_1_io_start_pci = GT64260_PCI_1_IO_START; \ | ||
165 | (ip)->pci_1_io_size = GT64260_PCI_1_IO_SIZE; \ | ||
166 | (ip)->pci_1_io_swap = GT64260_CPU_PCI_SWAP_NONE; \ | ||
167 | \ | ||
168 | (ip)->pci_1_mem_start_proc = GT64260_PCI_1_MEM_START_PROC; \ | ||
169 | (ip)->pci_1_mem_start_pci_hi = 0x00000000; \ | ||
170 | (ip)->pci_1_mem_start_pci_lo = GT64260_PCI_1_MEM_START; \ | ||
171 | (ip)->pci_1_mem_size = GT64260_PCI_1_MEM_SIZE; \ | ||
172 | (ip)->pci_1_mem_swap = GT64260_CPU_PCI_SWAP_NONE; \ | ||
173 | } | ||
174 | |||
175 | /* | ||
176 | ***************************************************************************** | ||
177 | * | ||
178 | * I/O macros to access the 64260's registers | ||
179 | * | ||
180 | ***************************************************************************** | ||
181 | */ | ||
182 | |||
183 | extern inline uint32_t gt_read(uint32_t offs){ | ||
184 | return (in_le32((volatile uint *)(gt64260_base + offs))); | ||
185 | } | ||
186 | extern inline void gt_write(uint32_t offs, uint32_t d){ | ||
187 | out_le32((volatile uint *)(gt64260_base + offs), d); | ||
188 | } | ||
189 | |||
190 | #if 0 /* paranoid SMP version */ | ||
191 | extern inline void gt_modify(u32 offs, u32 data, u32 mask) \ | ||
192 | { | ||
193 | uint32_t reg; | ||
194 | spin_lock(>64260_lock); | ||
195 | reg = gt_read(offs) & (~mask); /* zero any bits we care about*/ | ||
196 | reg |= data & mask; /* set bits from the data */ | ||
197 | gt_write(offs, reg); | ||
198 | spin_unlock(>64260_lock); | ||
199 | } | ||
200 | #else | ||
201 | extern inline void gt_modify(uint32_t offs, uint32_t data, uint32_t mask) | ||
202 | { | ||
203 | uint32_t reg; | ||
204 | reg = gt_read(offs) & (~(mask)); /* zero any bits we care about*/ | ||
205 | reg |= (data) & (mask); /* set bits from the data */ | ||
206 | gt_write(offs, reg); | ||
207 | } | ||
208 | #endif | ||
209 | #define gt_set_bits(offs, bits) gt_modify(offs, ~0, bits) | ||
210 | |||
211 | #define gt_clr_bits(offs, bits) gt_modify(offs, 0, bits) | ||
212 | |||
213 | |||
214 | /* | ||
215 | ***************************************************************************** | ||
216 | * | ||
217 | * Function Prototypes | ||
218 | * | ||
219 | ***************************************************************************** | ||
220 | */ | ||
221 | |||
222 | int gt64260_find_bridges(u32 phys_base_addr, gt64260_bridge_info_t *info, | ||
223 | int ((*map_irq)(struct pci_dev *, unsigned char, unsigned char))); | ||
224 | int gt64260_bridge_init(gt64260_bridge_info_t *info); | ||
225 | int gt64260_cpu_scs_set_window(u32 window, | ||
226 | u32 base_addr, | ||
227 | u32 size); | ||
228 | int gt64260_cpu_cs_set_window(u32 window, | ||
229 | u32 base_addr, | ||
230 | u32 size); | ||
231 | int gt64260_cpu_boot_set_window(u32 base_addr, | ||
232 | u32 size); | ||
233 | int gt64260_cpu_set_pci_io_window(u32 pci_bus, | ||
234 | u32 cpu_base_addr, | ||
235 | u32 pci_base_addr, | ||
236 | u32 size, | ||
237 | u32 swap); | ||
238 | int gt64260_cpu_set_pci_mem_window(u32 pci_bus, | ||
239 | u32 window, | ||
240 | u32 cpu_base_addr, | ||
241 | u32 pci_base_addr_hi, | ||
242 | u32 pci_base_addr_lo, | ||
243 | u32 size, | ||
244 | u32 swap_64bit); | ||
245 | int gt64260_cpu_prot_set_window(u32 window, | ||
246 | u32 base_addr, | ||
247 | u32 size, | ||
248 | u32 access_bits); | ||
249 | int gt64260_cpu_snoop_set_window(u32 window, | ||
250 | u32 base_addr, | ||
251 | u32 size, | ||
252 | u32 snoop_type); | ||
253 | void gt64260_cpu_disable_all_windows(void); | ||
254 | int gt64260_pci_bar_enable(u32 pci_bus, u32 enable_bits); | ||
255 | int gt64260_pci_slave_scs_set_window(struct pci_controller *hose, | ||
256 | u32 window, | ||
257 | u32 pci_base_addr, | ||
258 | u32 cpu_base_addr, | ||
259 | u32 size); | ||
260 | int gt64260_pci_slave_cs_set_window(struct pci_controller *hose, | ||
261 | u32 window, | ||
262 | u32 pci_base_addr, | ||
263 | u32 cpu_base_addr, | ||
264 | u32 size); | ||
265 | int gt64260_pci_slave_boot_set_window(struct pci_controller *hose, | ||
266 | u32 pci_base_addr, | ||
267 | u32 cpu_base_addr, | ||
268 | u32 size); | ||
269 | int gt64260_pci_slave_p2p_mem_set_window(struct pci_controller *hose, | ||
270 | u32 window, | ||
271 | u32 pci_base_addr, | ||
272 | u32 other_bus_base_addr, | ||
273 | u32 size); | ||
274 | int gt64260_pci_slave_p2p_io_set_window(struct pci_controller *hose, | ||
275 | u32 pci_base_addr, | ||
276 | u32 other_bus_base_addr, | ||
277 | u32 size); | ||
278 | int gt64260_pci_slave_dac_scs_set_window(struct pci_controller *hose, | ||
279 | u32 window, | ||
280 | u32 pci_base_addr_hi, | ||
281 | u32 pci_base_addr_lo, | ||
282 | u32 cpu_base_addr, | ||
283 | u32 size); | ||
284 | int gt64260_pci_slave_dac_cs_set_window(struct pci_controller *hose, | ||
285 | u32 window, | ||
286 | u32 pci_base_addr_hi, | ||
287 | u32 pci_base_addr_lo, | ||
288 | u32 cpu_base_addr, | ||
289 | u32 size); | ||
290 | int gt64260_pci_slave_dac_boot_set_window(struct pci_controller *hose, | ||
291 | u32 pci_base_addr_hi, | ||
292 | u32 pci_base_addr_lo, | ||
293 | u32 cpu_base_addr, | ||
294 | u32 size); | ||
295 | int gt64260_pci_slave_dac_p2p_mem_set_window(struct pci_controller *hose, | ||
296 | u32 window, | ||
297 | u32 pci_base_addr_hi, | ||
298 | u32 pci_base_addr_lo, | ||
299 | u32 other_bus_base_addr, | ||
300 | u32 size); | ||
301 | int gt64260_pci_acc_cntl_set_window(u32 pci_bus, | ||
302 | u32 window, | ||
303 | u32 base_addr_hi, | ||
304 | u32 base_addr_lo, | ||
305 | u32 size, | ||
306 | u32 features); | ||
307 | int gt64260_pci_snoop_set_window(u32 pci_bus, | ||
308 | u32 window, | ||
309 | u32 base_addr_hi, | ||
310 | u32 base_addr_lo, | ||
311 | u32 size, | ||
312 | u32 snoop_type); | ||
313 | int gt64260_set_base(u32 new_base); | ||
314 | int gt64260_get_base(u32 *base); | ||
315 | int gt64260_pci_exclude_device(u8 bus, u8 devfn); | ||
316 | |||
317 | void gt64260_init_irq(void); | ||
318 | int gt64260_get_irq(void); | ||
319 | |||
320 | void gt64260_mpsc_progress(char *s, unsigned short hex); | ||
321 | |||
322 | #endif /* __ASMPPC_GT64260_H */ | ||
diff --git a/include/asm-ppc/gt64260_defs.h b/include/asm-ppc/gt64260_defs.h deleted file mode 100644 index 6ffd01a5373e..000000000000 --- a/include/asm-ppc/gt64260_defs.h +++ /dev/null | |||
@@ -1,1010 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/gt64260_defs.h | ||
3 | * | ||
4 | * Register definitions for the Marvell/Galileo GT64260 host bridge. | ||
5 | * | ||
6 | * Author: Mark A. Greer <mgreer@mvista.com> | ||
7 | * | ||
8 | * 2001 (c) MontaVista, Software, Inc. This file is licensed under | ||
9 | * the terms of the GNU General Public License version 2. This program | ||
10 | * is licensed "as is" without any warranty of any kind, whether express | ||
11 | * or implied. | ||
12 | */ | ||
13 | #ifndef __ASMPPC_GT64260_DEFS_H | ||
14 | #define __ASMPPC_GT64260_DEFS_H | ||
15 | |||
16 | /* | ||
17 | * Define a macro to represent the supported version of the 64260. | ||
18 | */ | ||
19 | #define GT64260 0x01 | ||
20 | #define GT64260A 0x10 | ||
21 | |||
22 | /* | ||
23 | ***************************************************************************** | ||
24 | * | ||
25 | * CPU Interface Registers | ||
26 | * | ||
27 | ***************************************************************************** | ||
28 | */ | ||
29 | |||
30 | /* CPU physical address of 64260's registers */ | ||
31 | #define GT64260_INTERNAL_SPACE_DECODE 0x0068 | ||
32 | #define GT64260_INTERNAL_SPACE_SIZE 0x10000 | ||
33 | #define GT64260_INTERNAL_SPACE_DEFAULT_ADDR 0x14000000 | ||
34 | |||
35 | /* CPU Memory Controller Window Registers (4 windows) */ | ||
36 | #define GT64260_CPU_SCS_DECODE_WINDOWS 4 | ||
37 | |||
38 | #define GT64260_CPU_SCS_DECODE_0_BOT 0x0008 | ||
39 | #define GT64260_CPU_SCS_DECODE_0_TOP 0x0010 | ||
40 | #define GT64260_CPU_SCS_DECODE_1_BOT 0x0208 | ||
41 | #define GT64260_CPU_SCS_DECODE_1_TOP 0x0210 | ||
42 | #define GT64260_CPU_SCS_DECODE_2_BOT 0x0018 | ||
43 | #define GT64260_CPU_SCS_DECODE_2_TOP 0x0020 | ||
44 | #define GT64260_CPU_SCS_DECODE_3_BOT 0x0218 | ||
45 | #define GT64260_CPU_SCS_DECODE_3_TOP 0x0220 | ||
46 | |||
47 | /* CPU Device Controller Window Registers (4 windows) */ | ||
48 | #define GT64260_CPU_CS_DECODE_WINDOWS 4 | ||
49 | |||
50 | #define GT64260_CPU_CS_DECODE_0_BOT 0x0028 | ||
51 | #define GT64260_CPU_CS_DECODE_0_TOP 0x0030 | ||
52 | #define GT64260_CPU_CS_DECODE_1_BOT 0x0228 | ||
53 | #define GT64260_CPU_CS_DECODE_1_TOP 0x0230 | ||
54 | #define GT64260_CPU_CS_DECODE_2_BOT 0x0248 | ||
55 | #define GT64260_CPU_CS_DECODE_2_TOP 0x0250 | ||
56 | #define GT64260_CPU_CS_DECODE_3_BOT 0x0038 | ||
57 | #define GT64260_CPU_CS_DECODE_3_TOP 0x0040 | ||
58 | |||
59 | #define GT64260_CPU_BOOT_CS_DECODE_0_BOT 0x0238 | ||
60 | #define GT64260_CPU_BOOT_CS_DECODE_0_TOP 0x0240 | ||
61 | |||
62 | /* CPU Windows to PCI space (2 PCI buses each w/ 1 I/O & 4 MEM windows) */ | ||
63 | #define GT64260_PCI_BUSES 2 | ||
64 | #define GT64260_PCI_IO_WINDOWS_PER_BUS 1 | ||
65 | #define GT64260_PCI_MEM_WINDOWS_PER_BUS 4 | ||
66 | |||
67 | #define GT64260_CPU_PCI_SWAP_BYTE 0x00000000 | ||
68 | #define GT64260_CPU_PCI_SWAP_NONE 0x01000000 | ||
69 | #define GT64260_CPU_PCI_SWAP_BYTE_WORD 0x02000000 | ||
70 | #define GT64260_CPU_PCI_SWAP_WORD 0x03000000 | ||
71 | #define GT64260_CPU_PCI_SWAP_MASK 0x07000000 | ||
72 | |||
73 | #define GT64260_CPU_PCI_MEM_REQ64 (1<<27) | ||
74 | |||
75 | #define GT64260_CPU_PCI_0_IO_DECODE_BOT 0x0048 | ||
76 | #define GT64260_CPU_PCI_0_IO_DECODE_TOP 0x0050 | ||
77 | #define GT64260_CPU_PCI_0_MEM_0_DECODE_BOT 0x0058 | ||
78 | #define GT64260_CPU_PCI_0_MEM_0_DECODE_TOP 0x0060 | ||
79 | #define GT64260_CPU_PCI_0_MEM_1_DECODE_BOT 0x0080 | ||
80 | #define GT64260_CPU_PCI_0_MEM_1_DECODE_TOP 0x0088 | ||
81 | #define GT64260_CPU_PCI_0_MEM_2_DECODE_BOT 0x0258 | ||
82 | #define GT64260_CPU_PCI_0_MEM_2_DECODE_TOP 0x0260 | ||
83 | #define GT64260_CPU_PCI_0_MEM_3_DECODE_BOT 0x0280 | ||
84 | #define GT64260_CPU_PCI_0_MEM_3_DECODE_TOP 0x0288 | ||
85 | |||
86 | #define GT64260_CPU_PCI_0_IO_REMAP 0x00f0 | ||
87 | #define GT64260_CPU_PCI_0_MEM_0_REMAP_LO 0x00f8 | ||
88 | #define GT64260_CPU_PCI_0_MEM_0_REMAP_HI 0x0320 | ||
89 | #define GT64260_CPU_PCI_0_MEM_1_REMAP_LO 0x0100 | ||
90 | #define GT64260_CPU_PCI_0_MEM_1_REMAP_HI 0x0328 | ||
91 | #define GT64260_CPU_PCI_0_MEM_2_REMAP_LO 0x02f8 | ||
92 | #define GT64260_CPU_PCI_0_MEM_2_REMAP_HI 0x0330 | ||
93 | #define GT64260_CPU_PCI_0_MEM_3_REMAP_LO 0x0300 | ||
94 | #define GT64260_CPU_PCI_0_MEM_3_REMAP_HI 0x0338 | ||
95 | |||
96 | #define GT64260_CPU_PCI_1_IO_DECODE_BOT 0x0090 | ||
97 | #define GT64260_CPU_PCI_1_IO_DECODE_TOP 0x0098 | ||
98 | #define GT64260_CPU_PCI_1_MEM_0_DECODE_BOT 0x00a0 | ||
99 | #define GT64260_CPU_PCI_1_MEM_0_DECODE_TOP 0x00a8 | ||
100 | #define GT64260_CPU_PCI_1_MEM_1_DECODE_BOT 0x00b0 | ||
101 | #define GT64260_CPU_PCI_1_MEM_1_DECODE_TOP 0x00b8 | ||
102 | #define GT64260_CPU_PCI_1_MEM_2_DECODE_BOT 0x02a0 | ||
103 | #define GT64260_CPU_PCI_1_MEM_2_DECODE_TOP 0x02a8 | ||
104 | #define GT64260_CPU_PCI_1_MEM_3_DECODE_BOT 0x02b0 | ||
105 | #define GT64260_CPU_PCI_1_MEM_3_DECODE_TOP 0x02b8 | ||
106 | |||
107 | #define GT64260_CPU_PCI_1_IO_REMAP 0x0108 | ||
108 | #define GT64260_CPU_PCI_1_MEM_0_REMAP_LO 0x0110 | ||
109 | #define GT64260_CPU_PCI_1_MEM_0_REMAP_HI 0x0340 | ||
110 | #define GT64260_CPU_PCI_1_MEM_1_REMAP_LO 0x0118 | ||
111 | #define GT64260_CPU_PCI_1_MEM_1_REMAP_HI 0x0348 | ||
112 | #define GT64260_CPU_PCI_1_MEM_2_REMAP_LO 0x0310 | ||
113 | #define GT64260_CPU_PCI_1_MEM_2_REMAP_HI 0x0350 | ||
114 | #define GT64260_CPU_PCI_1_MEM_3_REMAP_LO 0x0318 | ||
115 | #define GT64260_CPU_PCI_1_MEM_3_REMAP_HI 0x0358 | ||
116 | |||
117 | /* CPU Control Registers */ | ||
118 | #define GT64260_CPU_CONFIG 0x0000 | ||
119 | #define GT64260_CPU_MODE 0x0120 | ||
120 | #define GT64260_CPU_MASTER_CNTL 0x0160 | ||
121 | #define GT64260_CPU_XBAR_CNTL_LO 0x0150 | ||
122 | #define GT64260_CPU_XBAR_CNTL_HI 0x0158 | ||
123 | #define GT64260_CPU_XBAR_TO 0x0168 | ||
124 | #define GT64260_CPU_RR_XBAR_CNTL_LO 0x0170 | ||
125 | #define GT64260_CPU_RR_XBAR_CNTL_HI 0x0178 | ||
126 | |||
127 | /* CPU Sync Barrier Registers */ | ||
128 | #define GT64260_CPU_SYNC_BARRIER_PCI_0 0x00c0 | ||
129 | #define GT64260_CPU_SYNC_BARRIER_PCI_1 0x00c8 | ||
130 | |||
131 | /* CPU Access Protection Registers */ | ||
132 | #define GT64260_CPU_PROT_WINDOWS 8 | ||
133 | |||
134 | #define GT64260_CPU_PROT_ACCPROTECT (1<<16) | ||
135 | #define GT64260_CPU_PROT_WRPROTECT (1<<17) | ||
136 | #define GT64260_CPU_PROT_CACHEPROTECT (1<<18) | ||
137 | |||
138 | #define GT64260_CPU_PROT_BASE_0 0x0180 | ||
139 | #define GT64260_CPU_PROT_TOP_0 0x0188 | ||
140 | #define GT64260_CPU_PROT_BASE_1 0x0190 | ||
141 | #define GT64260_CPU_PROT_TOP_1 0x0198 | ||
142 | #define GT64260_CPU_PROT_BASE_2 0x01a0 | ||
143 | #define GT64260_CPU_PROT_TOP_2 0x01a8 | ||
144 | #define GT64260_CPU_PROT_BASE_3 0x01b0 | ||
145 | #define GT64260_CPU_PROT_TOP_3 0x01b8 | ||
146 | #define GT64260_CPU_PROT_BASE_4 0x01c0 | ||
147 | #define GT64260_CPU_PROT_TOP_4 0x01c8 | ||
148 | #define GT64260_CPU_PROT_BASE_5 0x01d0 | ||
149 | #define GT64260_CPU_PROT_TOP_5 0x01d8 | ||
150 | #define GT64260_CPU_PROT_BASE_6 0x01e0 | ||
151 | #define GT64260_CPU_PROT_TOP_6 0x01e8 | ||
152 | #define GT64260_CPU_PROT_BASE_7 0x01f0 | ||
153 | #define GT64260_CPU_PROT_TOP_7 0x01f8 | ||
154 | |||
155 | /* CPU Snoop Control Registers */ | ||
156 | #define GT64260_CPU_SNOOP_WINDOWS 4 | ||
157 | |||
158 | #define GT64260_CPU_SNOOP_NONE 0x00000000 | ||
159 | #define GT64260_CPU_SNOOP_WT 0x00010000 | ||
160 | #define GT64260_CPU_SNOOP_WB 0x00020000 | ||
161 | #define GT64260_CPU_SNOOP_MASK 0x00030000 | ||
162 | #define GT64260_CPU_SNOOP_ALL_BITS GT64260_CPU_SNOOP_MASK | ||
163 | |||
164 | #define GT64260_CPU_SNOOP_BASE_0 0x0380 | ||
165 | #define GT64260_CPU_SNOOP_TOP_0 0x0388 | ||
166 | #define GT64260_CPU_SNOOP_BASE_1 0x0390 | ||
167 | #define GT64260_CPU_SNOOP_TOP_1 0x0398 | ||
168 | #define GT64260_CPU_SNOOP_BASE_2 0x03a0 | ||
169 | #define GT64260_CPU_SNOOP_TOP_2 0x03a8 | ||
170 | #define GT64260_CPU_SNOOP_BASE_3 0x03b0 | ||
171 | #define GT64260_CPU_SNOOP_TOP_3 0x03b8 | ||
172 | |||
173 | /* CPU Error Report Registers */ | ||
174 | #define GT64260_CPU_ERR_ADDR_LO 0x0070 | ||
175 | #define GT64260_CPU_ERR_ADDR_HI 0x0078 | ||
176 | #define GT64260_CPU_ERR_DATA_LO 0x0128 | ||
177 | #define GT64260_CPU_ERR_DATA_HI 0x0130 | ||
178 | #define GT64260_CPU_ERR_PARITY 0x0138 | ||
179 | #define GT64260_CPU_ERR_CAUSE 0x0140 | ||
180 | #define GT64260_CPU_ERR_MASK 0x0148 | ||
181 | |||
182 | |||
183 | /* | ||
184 | ***************************************************************************** | ||
185 | * | ||
186 | * SDRAM Cotnroller Registers | ||
187 | * | ||
188 | ***************************************************************************** | ||
189 | */ | ||
190 | |||
191 | /* SDRAM Config Registers */ | ||
192 | #define GT64260_SDRAM_CONFIG 0x0448 | ||
193 | #define GT64260_SDRAM_OPERATION_MODE 0x0474 | ||
194 | #define GT64260_SDRAM_ADDR_CNTL 0x047c | ||
195 | #define GT64260_SDRAM_TIMING_PARAMS 0x04b4 | ||
196 | #define GT64260_SDRAM_UMA_CNTL 0x04a4 | ||
197 | #define GT64260_SDRAM_XBAR_CNTL_LO 0x04a8 | ||
198 | #define GT64260_SDRAM_XBAR_CNTL_HI 0x04ac | ||
199 | #define GT64260_SDRAM_XBAR_CNTL_TO 0x04b0 | ||
200 | |||
201 | /* SDRAM Banks Parameters Registers */ | ||
202 | #define GT64260_SDRAM_BANK_PARAMS_0 0x044c | ||
203 | #define GT64260_SDRAM_BANK_PARAMS_1 0x0450 | ||
204 | #define GT64260_SDRAM_BANK_PARAMS_2 0x0454 | ||
205 | #define GT64260_SDRAM_BANK_PARAMS_3 0x0458 | ||
206 | |||
207 | /* SDRAM Error Report Registers */ | ||
208 | #define GT64260_SDRAM_ERR_DATA_LO 0x0484 | ||
209 | #define GT64260_SDRAM_ERR_DATA_HI 0x0480 | ||
210 | #define GT64260_SDRAM_ERR_ADDR 0x0490 | ||
211 | #define GT64260_SDRAM_ERR_ECC_RCVD 0x0488 | ||
212 | #define GT64260_SDRAM_ERR_ECC_CALC 0x048c | ||
213 | #define GT64260_SDRAM_ERR_ECC_CNTL 0x0494 | ||
214 | #define GT64260_SDRAM_ERR_ECC_ERR_CNT 0x0498 | ||
215 | |||
216 | |||
217 | /* | ||
218 | ***************************************************************************** | ||
219 | * | ||
220 | * Device/BOOT Cotnroller Registers | ||
221 | * | ||
222 | ***************************************************************************** | ||
223 | */ | ||
224 | |||
225 | /* Device Control Registers */ | ||
226 | #define GT64260_DEV_BANK_PARAMS_0 0x045c | ||
227 | #define GT64260_DEV_BANK_PARAMS_1 0x0460 | ||
228 | #define GT64260_DEV_BANK_PARAMS_2 0x0464 | ||
229 | #define GT64260_DEV_BANK_PARAMS_3 0x0468 | ||
230 | #define GT64260_DEV_BOOT_PARAMS 0x046c | ||
231 | #define GT64260_DEV_IF_CNTL 0x04c0 | ||
232 | #define GT64260_DEV_IF_XBAR_CNTL_LO 0x04c8 | ||
233 | #define GT64260_DEV_IF_XBAR_CNTL_HI 0x04cc | ||
234 | #define GT64260_DEV_IF_XBAR_CNTL_TO 0x04c4 | ||
235 | |||
236 | /* Device Interrupt Registers */ | ||
237 | #define GT64260_DEV_INTR_CAUSE 0x04d0 | ||
238 | #define GT64260_DEV_INTR_MASK 0x04d4 | ||
239 | #define GT64260_DEV_INTR_ERR_ADDR 0x04d8 | ||
240 | |||
241 | |||
242 | /* | ||
243 | ***************************************************************************** | ||
244 | * | ||
245 | * PCI Bridge Interface Registers | ||
246 | * | ||
247 | ***************************************************************************** | ||
248 | */ | ||
249 | |||
250 | /* PCI Configuration Access Registers */ | ||
251 | #define GT64260_PCI_0_CONFIG_ADDR 0x0cf8 | ||
252 | #define GT64260_PCI_0_CONFIG_DATA 0x0cfc | ||
253 | #define GT64260_PCI_0_IACK 0x0c34 | ||
254 | |||
255 | #define GT64260_PCI_1_CONFIG_ADDR 0x0c78 | ||
256 | #define GT64260_PCI_1_CONFIG_DATA 0x0c7c | ||
257 | #define GT64260_PCI_1_IACK 0x0cb4 | ||
258 | |||
259 | /* PCI Control Registers */ | ||
260 | #define GT64260_PCI_0_CMD 0x0c00 | ||
261 | #define GT64260_PCI_0_MODE 0x0d00 | ||
262 | #define GT64260_PCI_0_TO_RETRY 0x0c04 | ||
263 | #define GT64260_PCI_0_RD_BUF_DISCARD_TIMER 0x0d04 | ||
264 | #define GT64260_PCI_0_MSI_TRIGGER_TIMER 0x0c38 | ||
265 | #define GT64260_PCI_0_ARBITER_CNTL 0x1d00 | ||
266 | #define GT64260_PCI_0_XBAR_CNTL_LO 0x1d08 | ||
267 | #define GT64260_PCI_0_XBAR_CNTL_HI 0x1d0c | ||
268 | #define GT64260_PCI_0_XBAR_CNTL_TO 0x1d04 | ||
269 | #define GT64260_PCI_0_RD_RESP_XBAR_CNTL_LO 0x1d18 | ||
270 | #define GT64260_PCI_0_RD_RESP_XBAR_CNTL_HI 0x1d1c | ||
271 | #define GT64260_PCI_0_SYNC_BARRIER 0x1d10 | ||
272 | #define GT64260_PCI_0_P2P_CONFIG 0x1d14 | ||
273 | #define GT64260_PCI_0_P2P_SWAP_CNTL 0x1d54 | ||
274 | |||
275 | #define GT64260_PCI_1_CMD 0x0c80 | ||
276 | #define GT64260_PCI_1_MODE 0x0d80 | ||
277 | #define GT64260_PCI_1_TO_RETRY 0x0c84 | ||
278 | #define GT64260_PCI_1_RD_BUF_DISCARD_TIMER 0x0d84 | ||
279 | #define GT64260_PCI_1_MSI_TRIGGER_TIMER 0x0cb8 | ||
280 | #define GT64260_PCI_1_ARBITER_CNTL 0x1d80 | ||
281 | #define GT64260_PCI_1_XBAR_CNTL_LO 0x1d88 | ||
282 | #define GT64260_PCI_1_XBAR_CNTL_HI 0x1d8c | ||
283 | #define GT64260_PCI_1_XBAR_CNTL_TO 0x1d84 | ||
284 | #define GT64260_PCI_1_RD_RESP_XBAR_CNTL_LO 0x1d98 | ||
285 | #define GT64260_PCI_1_RD_RESP_XBAR_CNTL_HI 0x1d9c | ||
286 | #define GT64260_PCI_1_SYNC_BARRIER 0x1d90 | ||
287 | #define GT64260_PCI_1_P2P_CONFIG 0x1d94 | ||
288 | #define GT64260_PCI_1_P2P_SWAP_CNTL 0x1dd4 | ||
289 | |||
290 | /* PCI Access Control Regions Registers */ | ||
291 | #define GT64260_PCI_ACC_CNTL_WINDOWS 8 | ||
292 | |||
293 | #define GT64260_PCI_ACC_CNTL_PREFETCHEN (1<<12) | ||
294 | #define GT64260_PCI_ACC_CNTL_DREADEN (1<<13) | ||
295 | #define GT64260_PCI_ACC_CNTL_RDPREFETCH (1<<16) | ||
296 | #define GT64260_PCI_ACC_CNTL_RDLINEPREFETCH (1<<17) | ||
297 | #define GT64260_PCI_ACC_CNTL_RDMULPREFETCH (1<<18) | ||
298 | #define GT64260_PCI_ACC_CNTL_MBURST_4_WORDS 0x00000000 | ||
299 | #define GT64260_PCI_ACC_CNTL_MBURST_8_WORDS 0x00100000 | ||
300 | #define GT64260_PCI_ACC_CNTL_MBURST_16_WORDS 0x00200000 | ||
301 | #define GT64260_PCI_ACC_CNTL_MBURST_MASK 0x00300000 | ||
302 | #define GT64260_PCI_ACC_CNTL_SWAP_BYTE 0x00000000 | ||
303 | #define GT64260_PCI_ACC_CNTL_SWAP_NONE 0x01000000 | ||
304 | #define GT64260_PCI_ACC_CNTL_SWAP_BYTE_WORD 0x02000000 | ||
305 | #define GT64260_PCI_ACC_CNTL_SWAP_WORD 0x03000000 | ||
306 | #define GT64260_PCI_ACC_CNTL_SWAP_MASK 0x03000000 | ||
307 | #define GT64260_PCI_ACC_CNTL_ACCPROT (1<<28) | ||
308 | #define GT64260_PCI_ACC_CNTL_WRPROT (1<<29) | ||
309 | |||
310 | #define GT64260_PCI_ACC_CNTL_ALL_BITS (GT64260_PCI_ACC_CNTL_PREFETCHEN | \ | ||
311 | GT64260_PCI_ACC_CNTL_DREADEN | \ | ||
312 | GT64260_PCI_ACC_CNTL_RDPREFETCH | \ | ||
313 | GT64260_PCI_ACC_CNTL_RDLINEPREFETCH |\ | ||
314 | GT64260_PCI_ACC_CNTL_RDMULPREFETCH | \ | ||
315 | GT64260_PCI_ACC_CNTL_MBURST_MASK | \ | ||
316 | GT64260_PCI_ACC_CNTL_SWAP_MASK | \ | ||
317 | GT64260_PCI_ACC_CNTL_ACCPROT| \ | ||
318 | GT64260_PCI_ACC_CNTL_WRPROT) | ||
319 | |||
320 | #define GT64260_PCI_0_ACC_CNTL_0_BASE_LO 0x1e00 | ||
321 | #define GT64260_PCI_0_ACC_CNTL_0_BASE_HI 0x1e04 | ||
322 | #define GT64260_PCI_0_ACC_CNTL_0_TOP 0x1e08 | ||
323 | #define GT64260_PCI_0_ACC_CNTL_1_BASE_LO 0x1e10 | ||
324 | #define GT64260_PCI_0_ACC_CNTL_1_BASE_HI 0x1e14 | ||
325 | #define GT64260_PCI_0_ACC_CNTL_1_TOP 0x1e18 | ||
326 | #define GT64260_PCI_0_ACC_CNTL_2_BASE_LO 0x1e20 | ||
327 | #define GT64260_PCI_0_ACC_CNTL_2_BASE_HI 0x1e24 | ||
328 | #define GT64260_PCI_0_ACC_CNTL_2_TOP 0x1e28 | ||
329 | #define GT64260_PCI_0_ACC_CNTL_3_BASE_LO 0x1e30 | ||
330 | #define GT64260_PCI_0_ACC_CNTL_3_BASE_HI 0x1e34 | ||
331 | #define GT64260_PCI_0_ACC_CNTL_3_TOP 0x1e38 | ||
332 | #define GT64260_PCI_0_ACC_CNTL_4_BASE_LO 0x1e40 | ||
333 | #define GT64260_PCI_0_ACC_CNTL_4_BASE_HI 0x1e44 | ||
334 | #define GT64260_PCI_0_ACC_CNTL_4_TOP 0x1e48 | ||
335 | #define GT64260_PCI_0_ACC_CNTL_5_BASE_LO 0x1e50 | ||
336 | #define GT64260_PCI_0_ACC_CNTL_5_BASE_HI 0x1e54 | ||
337 | #define GT64260_PCI_0_ACC_CNTL_5_TOP 0x1e58 | ||
338 | #define GT64260_PCI_0_ACC_CNTL_6_BASE_LO 0x1e60 | ||
339 | #define GT64260_PCI_0_ACC_CNTL_6_BASE_HI 0x1e64 | ||
340 | #define GT64260_PCI_0_ACC_CNTL_6_TOP 0x1e68 | ||
341 | #define GT64260_PCI_0_ACC_CNTL_7_BASE_LO 0x1e70 | ||
342 | #define GT64260_PCI_0_ACC_CNTL_7_BASE_HI 0x1e74 | ||
343 | #define GT64260_PCI_0_ACC_CNTL_7_TOP 0x1e78 | ||
344 | |||
345 | #define GT64260_PCI_1_ACC_CNTL_0_BASE_LO 0x1e80 | ||
346 | #define GT64260_PCI_1_ACC_CNTL_0_BASE_HI 0x1e84 | ||
347 | #define GT64260_PCI_1_ACC_CNTL_0_TOP 0x1e88 | ||
348 | #define GT64260_PCI_1_ACC_CNTL_1_BASE_LO 0x1e90 | ||
349 | #define GT64260_PCI_1_ACC_CNTL_1_BASE_HI 0x1e94 | ||
350 | #define GT64260_PCI_1_ACC_CNTL_1_TOP 0x1e98 | ||
351 | #define GT64260_PCI_1_ACC_CNTL_2_BASE_LO 0x1ea0 | ||
352 | #define GT64260_PCI_1_ACC_CNTL_2_BASE_HI 0x1ea4 | ||
353 | #define GT64260_PCI_1_ACC_CNTL_2_TOP 0x1ea8 | ||
354 | #define GT64260_PCI_1_ACC_CNTL_3_BASE_LO 0x1eb0 | ||
355 | #define GT64260_PCI_1_ACC_CNTL_3_BASE_HI 0x1eb4 | ||
356 | #define GT64260_PCI_1_ACC_CNTL_3_TOP 0x1eb8 | ||
357 | #define GT64260_PCI_1_ACC_CNTL_4_BASE_LO 0x1ec0 | ||
358 | #define GT64260_PCI_1_ACC_CNTL_4_BASE_HI 0x1ec4 | ||
359 | #define GT64260_PCI_1_ACC_CNTL_4_TOP 0x1ec8 | ||
360 | #define GT64260_PCI_1_ACC_CNTL_5_BASE_LO 0x1ed0 | ||
361 | #define GT64260_PCI_1_ACC_CNTL_5_BASE_HI 0x1ed4 | ||
362 | #define GT64260_PCI_1_ACC_CNTL_5_TOP 0x1ed8 | ||
363 | #define GT64260_PCI_1_ACC_CNTL_6_BASE_LO 0x1ee0 | ||
364 | #define GT64260_PCI_1_ACC_CNTL_6_BASE_HI 0x1ee4 | ||
365 | #define GT64260_PCI_1_ACC_CNTL_6_TOP 0x1ee8 | ||
366 | #define GT64260_PCI_1_ACC_CNTL_7_BASE_LO 0x1ef0 | ||
367 | #define GT64260_PCI_1_ACC_CNTL_7_BASE_HI 0x1ef4 | ||
368 | #define GT64260_PCI_1_ACC_CNTL_7_TOP 0x1ef8 | ||
369 | |||
370 | /* PCI Snoop Control Registers */ | ||
371 | #define GT64260_PCI_SNOOP_WINDOWS 4 | ||
372 | |||
373 | #define GT64260_PCI_SNOOP_NONE 0x00000000 | ||
374 | #define GT64260_PCI_SNOOP_WT 0x00001000 | ||
375 | #define GT64260_PCI_SNOOP_WB 0x00002000 | ||
376 | |||
377 | #define GT64260_PCI_0_SNOOP_0_BASE_LO 0x1f00 | ||
378 | #define GT64260_PCI_0_SNOOP_0_BASE_HI 0x1f04 | ||
379 | #define GT64260_PCI_0_SNOOP_0_TOP 0x1f08 | ||
380 | #define GT64260_PCI_0_SNOOP_1_BASE_LO 0x1f10 | ||
381 | #define GT64260_PCI_0_SNOOP_1_BASE_HI 0x1f14 | ||
382 | #define GT64260_PCI_0_SNOOP_1_TOP 0x1f18 | ||
383 | #define GT64260_PCI_0_SNOOP_2_BASE_LO 0x1f20 | ||
384 | #define GT64260_PCI_0_SNOOP_2_BASE_HI 0x1f24 | ||
385 | #define GT64260_PCI_0_SNOOP_2_TOP 0x1f28 | ||
386 | #define GT64260_PCI_0_SNOOP_3_BASE_LO 0x1f30 | ||
387 | #define GT64260_PCI_0_SNOOP_3_BASE_HI 0x1f34 | ||
388 | #define GT64260_PCI_0_SNOOP_3_TOP 0x1f38 | ||
389 | |||
390 | #define GT64260_PCI_1_SNOOP_0_BASE_LO 0x1f80 | ||
391 | #define GT64260_PCI_1_SNOOP_0_BASE_HI 0x1f84 | ||
392 | #define GT64260_PCI_1_SNOOP_0_TOP 0x1f88 | ||
393 | #define GT64260_PCI_1_SNOOP_1_BASE_LO 0x1f90 | ||
394 | #define GT64260_PCI_1_SNOOP_1_BASE_HI 0x1f94 | ||
395 | #define GT64260_PCI_1_SNOOP_1_TOP 0x1f98 | ||
396 | #define GT64260_PCI_1_SNOOP_2_BASE_LO 0x1fa0 | ||
397 | #define GT64260_PCI_1_SNOOP_2_BASE_HI 0x1fa4 | ||
398 | #define GT64260_PCI_1_SNOOP_2_TOP 0x1fa8 | ||
399 | #define GT64260_PCI_1_SNOOP_3_BASE_LO 0x1fb0 | ||
400 | #define GT64260_PCI_1_SNOOP_3_BASE_HI 0x1fb4 | ||
401 | #define GT64260_PCI_1_SNOOP_3_TOP 0x1fb8 | ||
402 | |||
403 | /* PCI Error Report Registers */ | ||
404 | #define GT64260_PCI_0_ERR_SERR_MASK 0x0c28 | ||
405 | #define GT64260_PCI_0_ERR_ADDR_LO 0x1d40 | ||
406 | #define GT64260_PCI_0_ERR_ADDR_HI 0x1d44 | ||
407 | #define GT64260_PCI_0_ERR_DATA_LO 0x1d48 | ||
408 | #define GT64260_PCI_0_ERR_DATA_HI 0x1d4c | ||
409 | #define GT64260_PCI_0_ERR_CMD 0x1d50 | ||
410 | #define GT64260_PCI_0_ERR_CAUSE 0x1d58 | ||
411 | #define GT64260_PCI_0_ERR_MASK 0x1d5c | ||
412 | |||
413 | #define GT64260_PCI_1_ERR_SERR_MASK 0x0ca8 | ||
414 | #define GT64260_PCI_1_ERR_ADDR_LO 0x1dc0 | ||
415 | #define GT64260_PCI_1_ERR_ADDR_HI 0x1dc4 | ||
416 | #define GT64260_PCI_1_ERR_DATA_LO 0x1dc8 | ||
417 | #define GT64260_PCI_1_ERR_DATA_HI 0x1dcc | ||
418 | #define GT64260_PCI_1_ERR_CMD 0x1dd0 | ||
419 | #define GT64260_PCI_1_ERR_CAUSE 0x1dd8 | ||
420 | #define GT64260_PCI_1_ERR_MASK 0x1ddc | ||
421 | |||
422 | /* PCI Slave Address Decoding Registers */ | ||
423 | #define GT64260_PCI_SCS_WINDOWS 4 | ||
424 | #define GT64260_PCI_CS_WINDOWS 4 | ||
425 | #define GT64260_PCI_BOOT_WINDOWS 1 | ||
426 | #define GT64260_PCI_P2P_MEM_WINDOWS 2 | ||
427 | #define GT64260_PCI_P2P_IO_WINDOWS 1 | ||
428 | #define GT64260_PCI_DAC_SCS_WINDOWS 4 | ||
429 | #define GT64260_PCI_DAC_CS_WINDOWS 4 | ||
430 | #define GT64260_PCI_DAC_BOOT_WINDOWS 1 | ||
431 | #define GT64260_PCI_DAC_P2P_MEM_WINDOWS 2 | ||
432 | |||
433 | #define GT64260_PCI_0_SLAVE_SCS_0_SIZE 0x0c08 | ||
434 | #define GT64260_PCI_0_SLAVE_SCS_1_SIZE 0x0d08 | ||
435 | #define GT64260_PCI_0_SLAVE_SCS_2_SIZE 0x0c0c | ||
436 | #define GT64260_PCI_0_SLAVE_SCS_3_SIZE 0x0d0c | ||
437 | #define GT64260_PCI_0_SLAVE_CS_0_SIZE 0x0c10 | ||
438 | #define GT64260_PCI_0_SLAVE_CS_1_SIZE 0x0d10 | ||
439 | #define GT64260_PCI_0_SLAVE_CS_2_SIZE 0x0d18 | ||
440 | #define GT64260_PCI_0_SLAVE_CS_3_SIZE 0x0c14 | ||
441 | #define GT64260_PCI_0_SLAVE_BOOT_SIZE 0x0d14 | ||
442 | #define GT64260_PCI_0_SLAVE_P2P_MEM_0_SIZE 0x0d1c | ||
443 | #define GT64260_PCI_0_SLAVE_P2P_MEM_1_SIZE 0x0d20 | ||
444 | #define GT64260_PCI_0_SLAVE_P2P_IO_SIZE 0x0d24 | ||
445 | #define GT64260_PCI_0_SLAVE_CPU_SIZE 0x0d28 | ||
446 | |||
447 | #define GT64260_PCI_0_SLAVE_DAC_SCS_0_SIZE 0x0e00 | ||
448 | #define GT64260_PCI_0_SLAVE_DAC_SCS_1_SIZE 0x0e04 | ||
449 | #define GT64260_PCI_0_SLAVE_DAC_SCS_2_SIZE 0x0e08 | ||
450 | #define GT64260_PCI_0_SLAVE_DAC_SCS_3_SIZE 0x0e0c | ||
451 | #define GT64260_PCI_0_SLAVE_DAC_CS_0_SIZE 0x0e10 | ||
452 | #define GT64260_PCI_0_SLAVE_DAC_CS_1_SIZE 0x0e14 | ||
453 | #define GT64260_PCI_0_SLAVE_DAC_CS_2_SIZE 0x0e18 | ||
454 | #define GT64260_PCI_0_SLAVE_DAC_CS_3_SIZE 0x0e1c | ||
455 | #define GT64260_PCI_0_SLAVE_DAC_BOOT_SIZE 0x0e20 | ||
456 | #define GT64260_PCI_0_SLAVE_DAC_P2P_MEM_0_SIZE 0x0e24 | ||
457 | #define GT64260_PCI_0_SLAVE_DAC_P2P_MEM_1_SIZE 0x0e28 | ||
458 | #define GT64260_PCI_0_SLAVE_DAC_CPU_SIZE 0x0e2c | ||
459 | |||
460 | #define GT64260_PCI_0_SLAVE_EXP_ROM_SIZE 0x0d2c | ||
461 | |||
462 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_SCS_0 (1<<0) | ||
463 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_SCS_1 (1<<1) | ||
464 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_SCS_2 (1<<2) | ||
465 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_SCS_3 (1<<3) | ||
466 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_CS_0 (1<<4) | ||
467 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_CS_1 (1<<5) | ||
468 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_CS_2 (1<<6) | ||
469 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_CS_3 (1<<7) | ||
470 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_BOOT (1<<8) | ||
471 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_REG_MEM (1<<9) | ||
472 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_REG_IO (1<<10) | ||
473 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_P2P_MEM_0 (1<<11) | ||
474 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_P2P_MEM_1 (1<<12) | ||
475 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_P2P_IO (1<<13) | ||
476 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_CPU (1<<14) | ||
477 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_SCS_0 (1<<15) | ||
478 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_SCS_1 (1<<16) | ||
479 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_SCS_2 (1<<17) | ||
480 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_SCS_3 (1<<18) | ||
481 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_CS_0 (1<<19) | ||
482 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_CS_1 (1<<20) | ||
483 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_CS_2 (1<<21) | ||
484 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_CS_3 (1<<22) | ||
485 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_BOOT (1<<23) | ||
486 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_P2P_MEM_0 (1<<24) | ||
487 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_P2P_MEM_1 (1<<25) | ||
488 | #define GT64260_PCI_SLAVE_BAR_REG_ENABLES_DAC_CPU (1<<26) | ||
489 | |||
490 | #define GT64260_PCI_0_SLAVE_BAR_REG_ENABLES 0x0c3c | ||
491 | #define GT64260_PCI_0_SLAVE_SCS_0_REMAP 0x0c48 | ||
492 | #define GT64260_PCI_0_SLAVE_SCS_1_REMAP 0x0d48 | ||
493 | #define GT64260_PCI_0_SLAVE_SCS_2_REMAP 0x0c4c | ||
494 | #define GT64260_PCI_0_SLAVE_SCS_3_REMAP 0x0d4c | ||
495 | #define GT64260_PCI_0_SLAVE_CS_0_REMAP 0x0c50 | ||
496 | #define GT64260_PCI_0_SLAVE_CS_1_REMAP 0x0d50 | ||
497 | #define GT64260_PCI_0_SLAVE_CS_2_REMAP 0x0d58 | ||
498 | #define GT64260_PCI_0_SLAVE_CS_3_REMAP 0x0c54 | ||
499 | #define GT64260_PCI_0_SLAVE_BOOT_REMAP 0x0d54 | ||
500 | #define GT64260_PCI_0_SLAVE_P2P_MEM_0_REMAP_LO 0x0d5c | ||
501 | #define GT64260_PCI_0_SLAVE_P2P_MEM_0_REMAP_HI 0x0d60 | ||
502 | #define GT64260_PCI_0_SLAVE_P2P_MEM_1_REMAP_LO 0x0d64 | ||
503 | #define GT64260_PCI_0_SLAVE_P2P_MEM_1_REMAP_HI 0x0d68 | ||
504 | #define GT64260_PCI_0_SLAVE_P2P_IO_REMAP 0x0d6c | ||
505 | #define GT64260_PCI_0_SLAVE_CPU_REMAP 0x0d70 | ||
506 | |||
507 | #define GT64260_PCI_0_SLAVE_DAC_SCS_0_REMAP 0x0f00 | ||
508 | #define GT64260_PCI_0_SLAVE_DAC_SCS_1_REMAP 0x0f04 | ||
509 | #define GT64260_PCI_0_SLAVE_DAC_SCS_2_REMAP 0x0f08 | ||
510 | #define GT64260_PCI_0_SLAVE_DAC_SCS_3_REMAP 0x0f0c | ||
511 | #define GT64260_PCI_0_SLAVE_DAC_CS_0_REMAP 0x0f10 | ||
512 | #define GT64260_PCI_0_SLAVE_DAC_CS_1_REMAP 0x0f14 | ||
513 | #define GT64260_PCI_0_SLAVE_DAC_CS_2_REMAP 0x0f18 | ||
514 | #define GT64260_PCI_0_SLAVE_DAC_CS_3_REMAP 0x0f1c | ||
515 | #define GT64260_PCI_0_SLAVE_DAC_BOOT_REMAP 0x0f20 | ||
516 | #define GT64260_PCI_0_SLAVE_DAC_P2P_MEM_0_REMAP_LO 0x0f24 | ||
517 | #define GT64260_PCI_0_SLAVE_DAC_P2P_MEM_0_REMAP_HI 0x0f28 | ||
518 | #define GT64260_PCI_0_SLAVE_DAC_P2P_MEM_1_REMAP_LO 0x0f2c | ||
519 | #define GT64260_PCI_0_SLAVE_DAC_P2P_MEM_1_REMAP_HI 0x0f30 | ||
520 | #define GT64260_PCI_0_SLAVE_DAC_CPU_REMAP 0x0f34 | ||
521 | |||
522 | #define GT64260_PCI_0_SLAVE_EXP_ROM_REMAP 0x0f38 | ||
523 | #define GT64260_PCI_0_SLAVE_PCI_DECODE_CNTL 0x0d3c | ||
524 | |||
525 | #define GT64260_PCI_1_SLAVE_SCS_0_SIZE 0x0c88 | ||
526 | #define GT64260_PCI_1_SLAVE_SCS_1_SIZE 0x0d88 | ||
527 | #define GT64260_PCI_1_SLAVE_SCS_2_SIZE 0x0c8c | ||
528 | #define GT64260_PCI_1_SLAVE_SCS_3_SIZE 0x0d8c | ||
529 | #define GT64260_PCI_1_SLAVE_CS_0_SIZE 0x0c90 | ||
530 | #define GT64260_PCI_1_SLAVE_CS_1_SIZE 0x0d90 | ||
531 | #define GT64260_PCI_1_SLAVE_CS_2_SIZE 0x0d98 | ||
532 | #define GT64260_PCI_1_SLAVE_CS_3_SIZE 0x0c94 | ||
533 | #define GT64260_PCI_1_SLAVE_BOOT_SIZE 0x0d94 | ||
534 | #define GT64260_PCI_1_SLAVE_P2P_MEM_0_SIZE 0x0d9c | ||
535 | #define GT64260_PCI_1_SLAVE_P2P_MEM_1_SIZE 0x0da0 | ||
536 | #define GT64260_PCI_1_SLAVE_P2P_IO_SIZE 0x0da4 | ||
537 | #define GT64260_PCI_1_SLAVE_CPU_SIZE 0x0da8 | ||
538 | |||
539 | #define GT64260_PCI_1_SLAVE_DAC_SCS_0_SIZE 0x0e80 | ||
540 | #define GT64260_PCI_1_SLAVE_DAC_SCS_1_SIZE 0x0e84 | ||
541 | #define GT64260_PCI_1_SLAVE_DAC_SCS_2_SIZE 0x0e88 | ||
542 | #define GT64260_PCI_1_SLAVE_DAC_SCS_3_SIZE 0x0e8c | ||
543 | #define GT64260_PCI_1_SLAVE_DAC_CS_0_SIZE 0x0e90 | ||
544 | #define GT64260_PCI_1_SLAVE_DAC_CS_1_SIZE 0x0e94 | ||
545 | #define GT64260_PCI_1_SLAVE_DAC_CS_2_SIZE 0x0e98 | ||
546 | #define GT64260_PCI_1_SLAVE_DAC_CS_3_SIZE 0x0e9c | ||
547 | #define GT64260_PCI_1_SLAVE_DAC_BOOT_SIZE 0x0ea0 | ||
548 | #define GT64260_PCI_1_SLAVE_DAC_P2P_MEM_0_SIZE 0x0ea4 | ||
549 | #define GT64260_PCI_1_SLAVE_DAC_P2P_MEM_1_SIZE 0x0ea8 | ||
550 | #define GT64260_PCI_1_SLAVE_DAC_CPU_SIZE 0x0eac | ||
551 | |||
552 | #define GT64260_PCI_1_SLAVE_EXP_ROM_SIZE 0x0dac | ||
553 | |||
554 | #define GT64260_PCI_1_SLAVE_BAR_REG_ENABLES 0x0cbc | ||
555 | #define GT64260_PCI_1_SLAVE_SCS_0_REMAP 0x0cc8 | ||
556 | #define GT64260_PCI_1_SLAVE_SCS_1_REMAP 0x0dc8 | ||
557 | #define GT64260_PCI_1_SLAVE_SCS_2_REMAP 0x0ccc | ||
558 | #define GT64260_PCI_1_SLAVE_SCS_3_REMAP 0x0dcc | ||
559 | #define GT64260_PCI_1_SLAVE_CS_0_REMAP 0x0cd0 | ||
560 | #define GT64260_PCI_1_SLAVE_CS_1_REMAP 0x0dd0 | ||
561 | #define GT64260_PCI_1_SLAVE_CS_2_REMAP 0x0dd8 | ||
562 | #define GT64260_PCI_1_SLAVE_CS_3_REMAP 0x0cd4 | ||
563 | #define GT64260_PCI_1_SLAVE_BOOT_REMAP 0x0dd4 | ||
564 | #define GT64260_PCI_1_SLAVE_P2P_MEM_0_REMAP_LO 0x0ddc | ||
565 | #define GT64260_PCI_1_SLAVE_P2P_MEM_0_REMAP_HI 0x0de0 | ||
566 | #define GT64260_PCI_1_SLAVE_P2P_MEM_1_REMAP_LO 0x0de4 | ||
567 | #define GT64260_PCI_1_SLAVE_P2P_MEM_1_REMAP_HI 0x0de8 | ||
568 | #define GT64260_PCI_1_SLAVE_P2P_IO_REMAP 0x0dec | ||
569 | #define GT64260_PCI_1_SLAVE_CPU_REMAP 0x0df0 | ||
570 | |||
571 | #define GT64260_PCI_1_SLAVE_DAC_SCS_0_REMAP 0x0f80 | ||
572 | #define GT64260_PCI_1_SLAVE_DAC_SCS_1_REMAP 0x0f84 | ||
573 | #define GT64260_PCI_1_SLAVE_DAC_SCS_2_REMAP 0x0f88 | ||
574 | #define GT64260_PCI_1_SLAVE_DAC_SCS_3_REMAP 0x0f8c | ||
575 | #define GT64260_PCI_1_SLAVE_DAC_CS_0_REMAP 0x0f90 | ||
576 | #define GT64260_PCI_1_SLAVE_DAC_CS_1_REMAP 0x0f94 | ||
577 | #define GT64260_PCI_1_SLAVE_DAC_CS_2_REMAP 0x0f98 | ||
578 | #define GT64260_PCI_1_SLAVE_DAC_CS_3_REMAP 0x0f9c | ||
579 | #define GT64260_PCI_1_SLAVE_DAC_BOOT_REMAP 0x0fa0 | ||
580 | #define GT64260_PCI_1_SLAVE_DAC_P2P_MEM_0_REMAP_LO 0x0fa4 | ||
581 | #define GT64260_PCI_1_SLAVE_DAC_P2P_MEM_0_REMAP_HI 0x0fa8 | ||
582 | #define GT64260_PCI_1_SLAVE_DAC_P2P_MEM_1_REMAP_LO 0x0fac | ||
583 | #define GT64260_PCI_1_SLAVE_DAC_P2P_MEM_1_REMAP_HI 0x0fb0 | ||
584 | #define GT64260_PCI_1_SLAVE_DAC_CPU_REMAP 0x0fb4 | ||
585 | |||
586 | #define GT64260_PCI_1_SLAVE_EXP_ROM_REMAP 0x0fb8 | ||
587 | #define GT64260_PCI_1_SLAVE_PCI_DECODE_CNTL 0x0dbc | ||
588 | |||
589 | |||
590 | /* | ||
591 | ***************************************************************************** | ||
592 | * | ||
593 | * I2O Controller Interface Registers | ||
594 | * | ||
595 | ***************************************************************************** | ||
596 | */ | ||
597 | |||
598 | /* FIXME: fill in */ | ||
599 | |||
600 | |||
601 | |||
602 | /* | ||
603 | ***************************************************************************** | ||
604 | * | ||
605 | * DMA Controller Interface Registers | ||
606 | * | ||
607 | ***************************************************************************** | ||
608 | */ | ||
609 | |||
610 | /* FIXME: fill in */ | ||
611 | |||
612 | |||
613 | /* | ||
614 | ***************************************************************************** | ||
615 | * | ||
616 | * Timer/Counter Interface Registers | ||
617 | * | ||
618 | ***************************************************************************** | ||
619 | */ | ||
620 | |||
621 | /* FIXME: fill in */ | ||
622 | |||
623 | |||
624 | /* | ||
625 | ***************************************************************************** | ||
626 | * | ||
627 | * Communications Controller (Enet, Serial, etc.) Interface Registers | ||
628 | * | ||
629 | ***************************************************************************** | ||
630 | */ | ||
631 | |||
632 | #define GT64260_ENET_0_CNTL_LO 0xf200 | ||
633 | #define GT64260_ENET_0_CNTL_HI 0xf204 | ||
634 | #define GT64260_ENET_0_RX_BUF_PCI_ADDR_HI 0xf208 | ||
635 | #define GT64260_ENET_0_TX_BUF_PCI_ADDR_HI 0xf20c | ||
636 | #define GT64260_ENET_0_RX_DESC_ADDR_HI 0xf210 | ||
637 | #define GT64260_ENET_0_TX_DESC_ADDR_HI 0xf214 | ||
638 | #define GT64260_ENET_0_HASH_TAB_PCI_ADDR_HI 0xf218 | ||
639 | #define GT64260_ENET_1_CNTL_LO 0xf220 | ||
640 | #define GT64260_ENET_1_CNTL_HI 0xf224 | ||
641 | #define GT64260_ENET_1_RX_BUF_PCI_ADDR_HI 0xf228 | ||
642 | #define GT64260_ENET_1_TX_BUF_PCI_ADDR_HI 0xf22c | ||
643 | #define GT64260_ENET_1_RX_DESC_ADDR_HI 0xf230 | ||
644 | #define GT64260_ENET_1_TX_DESC_ADDR_HI 0xf234 | ||
645 | #define GT64260_ENET_1_HASH_TAB_PCI_ADDR_HI 0xf238 | ||
646 | #define GT64260_ENET_2_CNTL_LO 0xf240 | ||
647 | #define GT64260_ENET_2_CNTL_HI 0xf244 | ||
648 | #define GT64260_ENET_2_RX_BUF_PCI_ADDR_HI 0xf248 | ||
649 | #define GT64260_ENET_2_TX_BUF_PCI_ADDR_HI 0xf24c | ||
650 | #define GT64260_ENET_2_RX_DESC_ADDR_HI 0xf250 | ||
651 | #define GT64260_ENET_2_TX_DESC_ADDR_HI 0xf254 | ||
652 | #define GT64260_ENET_2_HASH_TAB_PCI_ADDR_HI 0xf258 | ||
653 | |||
654 | #define GT64260_MPSC_0_CNTL_LO 0xf280 | ||
655 | #define GT64260_MPSC_0_CNTL_HI 0xf284 | ||
656 | #define GT64260_MPSC_0_RX_BUF_PCI_ADDR_HI 0xf288 | ||
657 | #define GT64260_MPSC_0_TX_BUF_PCI_ADDR_HI 0xf28c | ||
658 | #define GT64260_MPSC_0_RX_DESC_ADDR_HI 0xf290 | ||
659 | #define GT64260_MPSC_0_TX_DESC_ADDR_HI 0xf294 | ||
660 | #define GT64260_MPSC_1_CNTL_LO 0xf2c0 | ||
661 | #define GT64260_MPSC_1_CNTL_HI 0xf2c4 | ||
662 | #define GT64260_MPSC_1_RX_BUF_PCI_ADDR_HI 0xf2c8 | ||
663 | #define GT64260_MPSC_1_TX_BUF_PCI_ADDR_HI 0xf2cc | ||
664 | #define GT64260_MPSC_1_RX_DESC_ADDR_HI 0xf2d0 | ||
665 | #define GT64260_MPSC_1_TX_DESC_ADDR_HI 0xf2d4 | ||
666 | |||
667 | #define GT64260_SER_INIT_PCI_ADDR_HI 0xf320 | ||
668 | #define GT64260_SER_INIT_LAST_DATA 0xf324 | ||
669 | #define GT64260_SER_INIT_CONTROL 0xf328 | ||
670 | #define GT64260_SER_INIT_STATUS 0xf32c | ||
671 | |||
672 | #define GT64260_COMM_ARBITER_CNTL 0xf300 | ||
673 | #define GT64260_COMM_CONFIG 0xb40c | ||
674 | #define GT64260_COMM_XBAR_TO 0xf304 | ||
675 | #define GT64260_COMM_INTR_CAUSE 0xf310 | ||
676 | #define GT64260_COMM_INTR_MASK 0xf314 | ||
677 | #define GT64260_COMM_ERR_ADDR 0xf318 | ||
678 | |||
679 | |||
680 | /* | ||
681 | ***************************************************************************** | ||
682 | * | ||
683 | * Fast Ethernet Controller Interface Registers | ||
684 | * | ||
685 | ***************************************************************************** | ||
686 | */ | ||
687 | |||
688 | #define GT64260_ENET_PHY_ADDR 0x2000 | ||
689 | #define GT64260_ENET_ESMIR 0x2010 | ||
690 | |||
691 | #define GT64260_ENET_E0PCR 0x2400 | ||
692 | #define GT64260_ENET_E0PCXR 0x2408 | ||
693 | #define GT64260_ENET_E0PCMR 0x2410 | ||
694 | #define GT64260_ENET_E0PSR 0x2418 | ||
695 | #define GT64260_ENET_E0SPR 0x2420 | ||
696 | #define GT64260_ENET_E0HTPR 0x2428 | ||
697 | #define GT64260_ENET_E0FCSAL 0x2430 | ||
698 | #define GT64260_ENET_E0FCSAH 0x2438 | ||
699 | #define GT64260_ENET_E0SDCR 0x2440 | ||
700 | #define GT64260_ENET_E0SDCMR 0x2448 | ||
701 | #define GT64260_ENET_E0ICR 0x2450 | ||
702 | #define GT64260_ENET_E0IMR 0x2458 | ||
703 | #define GT64260_ENET_E0FRDP0 0x2480 | ||
704 | #define GT64260_ENET_E0FRDP1 0x2484 | ||
705 | #define GT64260_ENET_E0FRDP2 0x2488 | ||
706 | #define GT64260_ENET_E0FRDP3 0x248c | ||
707 | #define GT64260_ENET_E0CRDP0 0x24a0 | ||
708 | #define GT64260_ENET_E0CRDP1 0x24a4 | ||
709 | #define GT64260_ENET_E0CRDP2 0x24a8 | ||
710 | #define GT64260_ENET_E0CRDP3 0x24ac | ||
711 | #define GT64260_ENET_E0CTDP0 0x24e0 | ||
712 | #define GT64260_ENET_E0CTDP1 0x24e4 | ||
713 | #define GT64260_ENET_0_DSCP2P0L 0x2460 | ||
714 | #define GT64260_ENET_0_DSCP2P0H 0x2464 | ||
715 | #define GT64260_ENET_0_DSCP2P1L 0x2468 | ||
716 | #define GT64260_ENET_0_DSCP2P1H 0x246c | ||
717 | #define GT64260_ENET_0_VPT2P 0x2470 | ||
718 | #define GT64260_ENET_0_MIB_CTRS 0x2500 | ||
719 | |||
720 | #define GT64260_ENET_E1PCR 0x2800 | ||
721 | #define GT64260_ENET_E1PCXR 0x2808 | ||
722 | #define GT64260_ENET_E1PCMR 0x2810 | ||
723 | #define GT64260_ENET_E1PSR 0x2818 | ||
724 | #define GT64260_ENET_E1SPR 0x2820 | ||
725 | #define GT64260_ENET_E1HTPR 0x2828 | ||
726 | #define GT64260_ENET_E1FCSAL 0x2830 | ||
727 | #define GT64260_ENET_E1FCSAH 0x2838 | ||
728 | #define GT64260_ENET_E1SDCR 0x2840 | ||
729 | #define GT64260_ENET_E1SDCMR 0x2848 | ||
730 | #define GT64260_ENET_E1ICR 0x2850 | ||
731 | #define GT64260_ENET_E1IMR 0x2858 | ||
732 | #define GT64260_ENET_E1FRDP0 0x2880 | ||
733 | #define GT64260_ENET_E1FRDP1 0x2884 | ||
734 | #define GT64260_ENET_E1FRDP2 0x2888 | ||
735 | #define GT64260_ENET_E1FRDP3 0x288c | ||
736 | #define GT64260_ENET_E1CRDP0 0x28a0 | ||
737 | #define GT64260_ENET_E1CRDP1 0x28a4 | ||
738 | #define GT64260_ENET_E1CRDP2 0x28a8 | ||
739 | #define GT64260_ENET_E1CRDP3 0x28ac | ||
740 | #define GT64260_ENET_E1CTDP0 0x28e0 | ||
741 | #define GT64260_ENET_E1CTDP1 0x28e4 | ||
742 | #define GT64260_ENET_1_DSCP2P0L 0x2860 | ||
743 | #define GT64260_ENET_1_DSCP2P0H 0x2864 | ||
744 | #define GT64260_ENET_1_DSCP2P1L 0x2868 | ||
745 | #define GT64260_ENET_1_DSCP2P1H 0x286c | ||
746 | #define GT64260_ENET_1_VPT2P 0x2870 | ||
747 | #define GT64260_ENET_1_MIB_CTRS 0x2900 | ||
748 | |||
749 | #define GT64260_ENET_E2PCR 0x2c00 | ||
750 | #define GT64260_ENET_E2PCXR 0x2c08 | ||
751 | #define GT64260_ENET_E2PCMR 0x2c10 | ||
752 | #define GT64260_ENET_E2PSR 0x2c18 | ||
753 | #define GT64260_ENET_E2SPR 0x2c20 | ||
754 | #define GT64260_ENET_E2HTPR 0x2c28 | ||
755 | #define GT64260_ENET_E2FCSAL 0x2c30 | ||
756 | #define GT64260_ENET_E2FCSAH 0x2c38 | ||
757 | #define GT64260_ENET_E2SDCR 0x2c40 | ||
758 | #define GT64260_ENET_E2SDCMR 0x2c48 | ||
759 | #define GT64260_ENET_E2ICR 0x2c50 | ||
760 | #define GT64260_ENET_E2IMR 0x2c58 | ||
761 | #define GT64260_ENET_E2FRDP0 0x2c80 | ||
762 | #define GT64260_ENET_E2FRDP1 0x2c84 | ||
763 | #define GT64260_ENET_E2FRDP2 0x2c88 | ||
764 | #define GT64260_ENET_E2FRDP3 0x2c8c | ||
765 | #define GT64260_ENET_E2CRDP0 0x2ca0 | ||
766 | #define GT64260_ENET_E2CRDP1 0x2ca4 | ||
767 | #define GT64260_ENET_E2CRDP2 0x2ca8 | ||
768 | #define GT64260_ENET_E2CRDP3 0x2cac | ||
769 | #define GT64260_ENET_E2CTDP0 0x2ce0 | ||
770 | #define GT64260_ENET_E2CTDP1 0x2ce4 | ||
771 | #define GT64260_ENET_2_DSCP2P0L 0x2c60 | ||
772 | #define GT64260_ENET_2_DSCP2P0H 0x2c64 | ||
773 | #define GT64260_ENET_2_DSCP2P1L 0x2c68 | ||
774 | #define GT64260_ENET_2_DSCP2P1H 0x2c6c | ||
775 | #define GT64260_ENET_2_VPT2P 0x2c70 | ||
776 | #define GT64260_ENET_2_MIB_CTRS 0x2d00 | ||
777 | |||
778 | |||
779 | /* | ||
780 | ***************************************************************************** | ||
781 | * | ||
782 | * Multi-Protocol Serial Controller Interface Registers | ||
783 | * | ||
784 | ***************************************************************************** | ||
785 | */ | ||
786 | |||
787 | /* Signal Routing */ | ||
788 | #define GT64260_MPSC_MRR 0xb400 | ||
789 | #define GT64260_MPSC_RCRR 0xb404 | ||
790 | #define GT64260_MPSC_TCRR 0xb408 | ||
791 | |||
792 | /* Main Configuratino Registers */ | ||
793 | #define GT64260_MPSC_0_MMCRL 0x8000 | ||
794 | #define GT64260_MPSC_0_MMCRH 0x8004 | ||
795 | #define GT64260_MPSC_0_MPCR 0x8008 | ||
796 | #define GT64260_MPSC_0_CHR_1 0x800c | ||
797 | #define GT64260_MPSC_0_CHR_2 0x8010 | ||
798 | #define GT64260_MPSC_0_CHR_3 0x8014 | ||
799 | #define GT64260_MPSC_0_CHR_4 0x8018 | ||
800 | #define GT64260_MPSC_0_CHR_5 0x801c | ||
801 | #define GT64260_MPSC_0_CHR_6 0x8020 | ||
802 | #define GT64260_MPSC_0_CHR_7 0x8024 | ||
803 | #define GT64260_MPSC_0_CHR_8 0x8028 | ||
804 | #define GT64260_MPSC_0_CHR_9 0x802c | ||
805 | #define GT64260_MPSC_0_CHR_10 0x8030 | ||
806 | #define GT64260_MPSC_0_CHR_11 0x8034 | ||
807 | |||
808 | #define GT64260_MPSC_1_MMCRL 0x9000 | ||
809 | #define GT64260_MPSC_1_MMCRH 0x9004 | ||
810 | #define GT64260_MPSC_1_MPCR 0x9008 | ||
811 | #define GT64260_MPSC_1_CHR_1 0x900c | ||
812 | #define GT64260_MPSC_1_CHR_2 0x9010 | ||
813 | #define GT64260_MPSC_1_CHR_3 0x9014 | ||
814 | #define GT64260_MPSC_1_CHR_4 0x9018 | ||
815 | #define GT64260_MPSC_1_CHR_5 0x901c | ||
816 | #define GT64260_MPSC_1_CHR_6 0x9020 | ||
817 | #define GT64260_MPSC_1_CHR_7 0x9024 | ||
818 | #define GT64260_MPSC_1_CHR_8 0x9028 | ||
819 | #define GT64260_MPSC_1_CHR_9 0x902c | ||
820 | #define GT64260_MPSC_1_CHR_10 0x9030 | ||
821 | #define GT64260_MPSC_1_CHR_11 0x9034 | ||
822 | |||
823 | #define GT64260_MPSC_0_INTR_CAUSE 0xb804 | ||
824 | #define GT64260_MPSC_0_INTR_MASK 0xb884 | ||
825 | #define GT64260_MPSC_1_INTR_CAUSE 0xb80c | ||
826 | #define GT64260_MPSC_1_INTR_MASK 0xb88c | ||
827 | |||
828 | #define GT64260_MPSC_UART_CR_TEV (1<<1) | ||
829 | #define GT64260_MPSC_UART_CR_TA (1<<7) | ||
830 | #define GT64260_MPSC_UART_CR_TTCS (1<<9) | ||
831 | #define GT64260_MPSC_UART_CR_REV (1<<17) | ||
832 | #define GT64260_MPSC_UART_CR_RA (1<<23) | ||
833 | #define GT64260_MPSC_UART_CR_CRD (1<<25) | ||
834 | #define GT64260_MPSC_UART_CR_EH (1<<31) | ||
835 | |||
836 | #define GT64260_MPSC_UART_ESR_CTS (1<<0) | ||
837 | #define GT64260_MPSC_UART_ESR_CD (1<<1) | ||
838 | #define GT64260_MPSC_UART_ESR_TIDLE (1<<3) | ||
839 | #define GT64260_MPSC_UART_ESR_RHS (1<<5) | ||
840 | #define GT64260_MPSC_UART_ESR_RLS (1<<7) | ||
841 | #define GT64260_MPSC_UART_ESR_RLIDL (1<<11) | ||
842 | |||
843 | |||
844 | /* | ||
845 | ***************************************************************************** | ||
846 | * | ||
847 | * Serial DMA Controller Interface Registers | ||
848 | * | ||
849 | ***************************************************************************** | ||
850 | */ | ||
851 | |||
852 | #define GT64260_SDMA_0_SDC 0x4000 | ||
853 | #define GT64260_SDMA_0_SDCM 0x4008 | ||
854 | #define GT64260_SDMA_0_RX_DESC 0x4800 | ||
855 | #define GT64260_SDMA_0_RX_BUF_PTR 0x4808 | ||
856 | #define GT64260_SDMA_0_SCRDP 0x4810 | ||
857 | #define GT64260_SDMA_0_TX_DESC 0x4c00 | ||
858 | #define GT64260_SDMA_0_SCTDP 0x4c10 | ||
859 | #define GT64260_SDMA_0_SFTDP 0x4c14 | ||
860 | |||
861 | #define GT64260_SDMA_1_SDC 0x6000 | ||
862 | #define GT64260_SDMA_1_SDCM 0x6008 | ||
863 | #define GT64260_SDMA_1_RX_DESC 0x6800 | ||
864 | #define GT64260_SDMA_1_RX_BUF_PTR 0x6808 | ||
865 | #define GT64260_SDMA_1_SCRDP 0x6810 | ||
866 | #define GT64260_SDMA_1_TX_DESC 0x6c00 | ||
867 | #define GT64260_SDMA_1_SCTDP 0x6c10 | ||
868 | #define GT64260_SDMA_1_SFTDP 0x6c14 | ||
869 | |||
870 | #define GT64260_SDMA_INTR_CAUSE 0xb800 | ||
871 | #define GT64260_SDMA_INTR_MASK 0xb880 | ||
872 | |||
873 | #define GT64260_SDMA_DESC_CMDSTAT_PE (1<<0) | ||
874 | #define GT64260_SDMA_DESC_CMDSTAT_CDL (1<<1) | ||
875 | #define GT64260_SDMA_DESC_CMDSTAT_FR (1<<3) | ||
876 | #define GT64260_SDMA_DESC_CMDSTAT_OR (1<<6) | ||
877 | #define GT64260_SDMA_DESC_CMDSTAT_BR (1<<9) | ||
878 | #define GT64260_SDMA_DESC_CMDSTAT_MI (1<<10) | ||
879 | #define GT64260_SDMA_DESC_CMDSTAT_A (1<<11) | ||
880 | #define GT64260_SDMA_DESC_CMDSTAT_AM (1<<12) | ||
881 | #define GT64260_SDMA_DESC_CMDSTAT_CT (1<<13) | ||
882 | #define GT64260_SDMA_DESC_CMDSTAT_C (1<<14) | ||
883 | #define GT64260_SDMA_DESC_CMDSTAT_ES (1<<15) | ||
884 | #define GT64260_SDMA_DESC_CMDSTAT_L (1<<16) | ||
885 | #define GT64260_SDMA_DESC_CMDSTAT_F (1<<17) | ||
886 | #define GT64260_SDMA_DESC_CMDSTAT_P (1<<18) | ||
887 | #define GT64260_SDMA_DESC_CMDSTAT_EI (1<<23) | ||
888 | #define GT64260_SDMA_DESC_CMDSTAT_O (1<<31) | ||
889 | |||
890 | #define GT64260_SDMA_SDC_RFT (1<<0) | ||
891 | #define GT64260_SDMA_SDC_SFM (1<<1) | ||
892 | #define GT64260_SDMA_SDC_BLMR (1<<6) | ||
893 | #define GT64260_SDMA_SDC_BLMT (1<<7) | ||
894 | #define GT64260_SDMA_SDC_POVR (1<<8) | ||
895 | #define GT64260_SDMA_SDC_RIFB (1<<9) | ||
896 | |||
897 | #define GT64260_SDMA_SDCM_ERD (1<<7) | ||
898 | #define GT64260_SDMA_SDCM_AR (1<<15) | ||
899 | #define GT64260_SDMA_SDCM_STD (1<<16) | ||
900 | #define GT64260_SDMA_SDCM_TXD (1<<23) | ||
901 | #define GT64260_SDMA_SDCM_AT (1<<31) | ||
902 | |||
903 | #define GT64260_SDMA_0_CAUSE_RXBUF (1<<0) | ||
904 | #define GT64260_SDMA_0_CAUSE_RXERR (1<<1) | ||
905 | #define GT64260_SDMA_0_CAUSE_TXBUF (1<<2) | ||
906 | #define GT64260_SDMA_0_CAUSE_TXEND (1<<3) | ||
907 | #define GT64260_SDMA_1_CAUSE_RXBUF (1<<8) | ||
908 | #define GT64260_SDMA_1_CAUSE_RXERR (1<<9) | ||
909 | #define GT64260_SDMA_1_CAUSE_TXBUF (1<<10) | ||
910 | #define GT64260_SDMA_1_CAUSE_TXEND (1<<11) | ||
911 | |||
912 | |||
913 | /* | ||
914 | ***************************************************************************** | ||
915 | * | ||
916 | * Baud Rate Generator Interface Registers | ||
917 | * | ||
918 | ***************************************************************************** | ||
919 | */ | ||
920 | |||
921 | #define GT64260_BRG_0_BCR 0xb200 | ||
922 | #define GT64260_BRG_0_BTR 0xb204 | ||
923 | #define GT64260_BRG_1_BCR 0xb208 | ||
924 | #define GT64260_BRG_1_BTR 0xb20c | ||
925 | #define GT64260_BRG_2_BCR 0xb210 | ||
926 | #define GT64260_BRG_2_BTR 0xb214 | ||
927 | |||
928 | #define GT64260_BRG_INTR_CAUSE 0xb834 | ||
929 | #define GT64260_BRG_INTR_MASK 0xb8b4 | ||
930 | |||
931 | |||
932 | /* | ||
933 | ***************************************************************************** | ||
934 | * | ||
935 | * Watchdog Timer Interface Registers | ||
936 | * | ||
937 | ***************************************************************************** | ||
938 | */ | ||
939 | |||
940 | #define GT64260_WDT_WDC 0xb410 | ||
941 | #define GT64260_WDT_WDV 0xb414 | ||
942 | |||
943 | |||
944 | /* | ||
945 | ***************************************************************************** | ||
946 | * | ||
947 | * General Purpose Pins Controller Interface Registers | ||
948 | * | ||
949 | ***************************************************************************** | ||
950 | */ | ||
951 | |||
952 | #define GT64260_GPP_IO_CNTL 0xf100 | ||
953 | #define GT64260_GPP_LEVEL_CNTL 0xf110 | ||
954 | #define GT64260_GPP_VALUE 0xf104 | ||
955 | #define GT64260_GPP_INTR_CAUSE 0xf108 | ||
956 | #define GT64260_GPP_INTR_MASK 0xf10c | ||
957 | |||
958 | |||
959 | /* | ||
960 | ***************************************************************************** | ||
961 | * | ||
962 | * Multi-Purpose Pins Controller Interface Registers | ||
963 | * | ||
964 | ***************************************************************************** | ||
965 | */ | ||
966 | |||
967 | #define GT64260_MPP_CNTL_0 0xf000 | ||
968 | #define GT64260_MPP_CNTL_1 0xf004 | ||
969 | #define GT64260_MPP_CNTL_2 0xf008 | ||
970 | #define GT64260_MPP_CNTL_3 0xf00c | ||
971 | #define GT64260_MPP_SERIAL_PORTS_MULTIPLEX 0xf010 | ||
972 | |||
973 | |||
974 | /* | ||
975 | ***************************************************************************** | ||
976 | * | ||
977 | * I2C Controller Interface Registers | ||
978 | * | ||
979 | ***************************************************************************** | ||
980 | */ | ||
981 | |||
982 | /* FIXME: fill in */ | ||
983 | |||
984 | |||
985 | /* | ||
986 | ***************************************************************************** | ||
987 | * | ||
988 | * Interrupt Controller Interface Registers | ||
989 | * | ||
990 | ***************************************************************************** | ||
991 | */ | ||
992 | |||
993 | #define GT64260_IC_MAIN_CAUSE_LO 0x0c18 | ||
994 | #define GT64260_IC_MAIN_CAUSE_HI 0x0c68 | ||
995 | #define GT64260_IC_CPU_INTR_MASK_LO 0x0c1c | ||
996 | #define GT64260_IC_CPU_INTR_MASK_HI 0x0c6c | ||
997 | #define GT64260_IC_CPU_SELECT_CAUSE 0x0c70 | ||
998 | #define GT64260_IC_PCI_0_INTR_MASK_LO 0x0c24 | ||
999 | #define GT64260_IC_PCI_0_INTR_MASK_HI 0x0c64 | ||
1000 | #define GT64260_IC_PCI_0_SELECT_CAUSE 0x0c74 | ||
1001 | #define GT64260_IC_PCI_1_INTR_MASK_LO 0x0ca4 | ||
1002 | #define GT64260_IC_PCI_1_INTR_MASK_HI 0x0ce4 | ||
1003 | #define GT64260_IC_PCI_1_SELECT_CAUSE 0x0cf4 | ||
1004 | #define GT64260_IC_CPU_INT_0_MASK 0x0e60 | ||
1005 | #define GT64260_IC_CPU_INT_1_MASK 0x0e64 | ||
1006 | #define GT64260_IC_CPU_INT_2_MASK 0x0e68 | ||
1007 | #define GT64260_IC_CPU_INT_3_MASK 0x0e6c | ||
1008 | |||
1009 | |||
1010 | #endif /* __ASMPPC_GT64260_DEFS_H */ | ||
diff --git a/include/asm-ppc/harrier.h b/include/asm-ppc/harrier.h deleted file mode 100644 index 7acd7fc126ec..000000000000 --- a/include/asm-ppc/harrier.h +++ /dev/null | |||
@@ -1,43 +0,0 @@ | |||
1 | /* | ||
2 | * Definitions for Motorola MCG Harrier North Bridge & Memory controller | ||
3 | * | ||
4 | * Author: Dale Farnsworth | ||
5 | * dale.farnsworth@mvista.com | ||
6 | * | ||
7 | * Modified by: Randy Vinson | ||
8 | * rvinson@mvista.com | ||
9 | * | ||
10 | * Copyright 2001-2002 MontaVista Software Inc. | ||
11 | * | ||
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 | ||
14 | * Free Software Foundation; either version 2 of the License, or (at your | ||
15 | * option) any later version. | ||
16 | */ | ||
17 | |||
18 | #ifndef __ASMPPC_HARRIER_H | ||
19 | #define __ASMPPC_HARRIER_H | ||
20 | |||
21 | #include <linux/types.h> | ||
22 | #include <asm/pci-bridge.h> | ||
23 | |||
24 | struct pci_controller; | ||
25 | int harrier_init(struct pci_controller *hose, | ||
26 | uint ppc_reg_base, | ||
27 | ulong processor_pci_mem_start, | ||
28 | ulong processor_pci_mem_end, | ||
29 | ulong processor_pci_io_start, | ||
30 | ulong processor_pci_io_end, | ||
31 | ulong processor_mpic_base); | ||
32 | |||
33 | unsigned long harrier_get_mem_size(uint smc_base); | ||
34 | |||
35 | int harrier_mpic_init(unsigned int pci_mem_offset); | ||
36 | |||
37 | void harrier_setup_nonmonarch(uint ppc_reg_base, | ||
38 | uint in0_size); | ||
39 | void harrier_release_eready(uint ppc_reg_base); | ||
40 | |||
41 | void harrier_wait_eready(uint ppc_reg_base); | ||
42 | |||
43 | #endif /* __ASMPPC_HARRIER_H */ | ||
diff --git a/include/asm-ppc/hawk.h b/include/asm-ppc/hawk.h deleted file mode 100644 index f347007d22af..000000000000 --- a/include/asm-ppc/hawk.h +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/hawk.h | ||
3 | * | ||
4 | * Support functions for MCG Falcon/Raven & HAWK North Bridge & Memory ctlr. | ||
5 | * | ||
6 | * Author: Mark A. Greer | ||
7 | * mgreer@mvista.com | ||
8 | * | ||
9 | * Modified by Randy Vinson (rvinson@mvista.com) | ||
10 | * | ||
11 | * 2001,2004 (c) MontaVista, Software, Inc. This file is licensed under | ||
12 | * the terms of the GNU General Public License version 2. This program | ||
13 | * is licensed "as is" without any warranty of any kind, whether express | ||
14 | * or implied. | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASMPPC_HAWK_H | ||
18 | #define __ASMPPC_HAWK_H | ||
19 | |||
20 | #include <asm/pci-bridge.h> | ||
21 | #include <asm/hawk_defs.h> | ||
22 | |||
23 | extern int hawk_init(struct pci_controller *hose, | ||
24 | unsigned int ppc_reg_base, unsigned long processor_pci_mem_start, | ||
25 | unsigned long processor_pci_mem_end, | ||
26 | unsigned long processor_pci_io_start, | ||
27 | unsigned long processor_pci_io_end, | ||
28 | unsigned long processor_mpic_base); | ||
29 | extern unsigned long hawk_get_mem_size(unsigned int smc_base); | ||
30 | extern int hawk_mpic_init(unsigned int pci_mem_offset); | ||
31 | |||
32 | #endif /* __ASMPPC_HAWK_H */ | ||
diff --git a/include/asm-ppc/hawk_defs.h b/include/asm-ppc/hawk_defs.h deleted file mode 100644 index 6d1d2baf648c..000000000000 --- a/include/asm-ppc/hawk_defs.h +++ /dev/null | |||
@@ -1,76 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/hawk_defs.h | ||
3 | * | ||
4 | * Definitions for Motorola MCG Falcon/Raven & HAWK North Bridge & Memory ctlr. | ||
5 | * | ||
6 | * Author: Mark A. Greer | ||
7 | * mgreer@mvista.com | ||
8 | * | ||
9 | * Modified by Randy Vinson (rvinson@mvista.com) | ||
10 | * | ||
11 | * 2001-2004 (c) MontaVista, Software, Inc. This file is licensed under | ||
12 | * the terms of the GNU General Public License version 2. This program | ||
13 | * is licensed "as is" without any warranty of any kind, whether express | ||
14 | * or implied. | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASMPPC_HAWK_DEFS_H | ||
18 | #define __ASMPPC_HAWK_DEFS_H | ||
19 | |||
20 | #include <asm/pci-bridge.h> | ||
21 | |||
22 | /* | ||
23 | * The Falcon/Raven and HAWK have 4 sets of registers: | ||
24 | * 1) PPC Registers which define the mappings from PPC bus to PCI bus, | ||
25 | * etc. | ||
26 | * 2) PCI Registers which define the mappings from PCI bus to PPC bus and the | ||
27 | * MPIC base address. | ||
28 | * 3) MPIC registers | ||
29 | * 4) System Memory Controller (SMC) registers. | ||
30 | */ | ||
31 | |||
32 | #define HAWK_PCI_CONFIG_ADDR_OFF 0x00000cf8 | ||
33 | #define HAWK_PCI_CONFIG_DATA_OFF 0x00000cfc | ||
34 | |||
35 | #define HAWK_MPIC_SIZE 0x00040000U | ||
36 | #define HAWK_SMC_SIZE 0x00001000U | ||
37 | |||
38 | /* | ||
39 | * Define PPC register offsets. | ||
40 | */ | ||
41 | #define HAWK_PPC_XSADD0_OFF 0x40 | ||
42 | #define HAWK_PPC_XSOFF0_OFF 0x44 | ||
43 | #define HAWK_PPC_XSADD1_OFF 0x48 | ||
44 | #define HAWK_PPC_XSOFF1_OFF 0x4c | ||
45 | #define HAWK_PPC_XSADD2_OFF 0x50 | ||
46 | #define HAWK_PPC_XSOFF2_OFF 0x54 | ||
47 | #define HAWK_PPC_XSADD3_OFF 0x58 | ||
48 | #define HAWK_PPC_XSOFF3_OFF 0x5c | ||
49 | |||
50 | /* | ||
51 | * Define PCI register offsets. | ||
52 | */ | ||
53 | #define HAWK_PCI_PSADD0_OFF 0x80 | ||
54 | #define HAWK_PCI_PSOFF0_OFF 0x84 | ||
55 | #define HAWK_PCI_PSADD1_OFF 0x88 | ||
56 | #define HAWK_PCI_PSOFF1_OFF 0x8c | ||
57 | #define HAWK_PCI_PSADD2_OFF 0x90 | ||
58 | #define HAWK_PCI_PSOFF2_OFF 0x94 | ||
59 | #define HAWK_PCI_PSADD3_OFF 0x98 | ||
60 | #define HAWK_PCI_PSOFF3_OFF 0x9c | ||
61 | |||
62 | /* | ||
63 | * Define the System Memory Controller (SMC) register offsets. | ||
64 | */ | ||
65 | #define HAWK_SMC_RAM_A_SIZE_REG_OFF 0x10 | ||
66 | #define HAWK_SMC_RAM_B_SIZE_REG_OFF 0x11 | ||
67 | #define HAWK_SMC_RAM_C_SIZE_REG_OFF 0x12 | ||
68 | #define HAWK_SMC_RAM_D_SIZE_REG_OFF 0x13 | ||
69 | #define HAWK_SMC_RAM_E_SIZE_REG_OFF 0xc0 /* HAWK Only */ | ||
70 | #define HAWK_SMC_RAM_F_SIZE_REG_OFF 0xc1 /* HAWK Only */ | ||
71 | #define HAWK_SMC_RAM_G_SIZE_REG_OFF 0xc2 /* HAWK Only */ | ||
72 | #define HAWK_SMC_RAM_H_SIZE_REG_OFF 0xc3 /* HAWK Only */ | ||
73 | |||
74 | #define FALCON_SMC_REG_COUNT 4 | ||
75 | #define HAWK_SMC_REG_COUNT 8 | ||
76 | #endif /* __ASMPPC_HAWK_DEFS_H */ | ||
diff --git a/include/asm-ppc/highmem.h b/include/asm-ppc/highmem.h deleted file mode 100644 index f7b21ee302b4..000000000000 --- a/include/asm-ppc/highmem.h +++ /dev/null | |||
@@ -1,135 +0,0 @@ | |||
1 | /* | ||
2 | * highmem.h: virtual kernel memory mappings for high memory | ||
3 | * | ||
4 | * PowerPC version, stolen from the i386 version. | ||
5 | * | ||
6 | * Used in CONFIG_HIGHMEM systems for memory pages which | ||
7 | * are not addressable by direct kernel virtual addresses. | ||
8 | * | ||
9 | * Copyright (C) 1999 Gerhard Wichert, Siemens AG | ||
10 | * Gerhard.Wichert@pdb.siemens.de | ||
11 | * | ||
12 | * | ||
13 | * Redesigned the x86 32-bit VM architecture to deal with | ||
14 | * up to 16 Terrabyte physical memory. With current x86 CPUs | ||
15 | * we now support up to 64 Gigabytes physical RAM. | ||
16 | * | ||
17 | * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com> | ||
18 | */ | ||
19 | |||
20 | #ifndef _ASM_HIGHMEM_H | ||
21 | #define _ASM_HIGHMEM_H | ||
22 | |||
23 | #ifdef __KERNEL__ | ||
24 | |||
25 | #include <linux/init.h> | ||
26 | #include <linux/interrupt.h> | ||
27 | #include <asm/kmap_types.h> | ||
28 | #include <asm/tlbflush.h> | ||
29 | #include <asm/page.h> | ||
30 | |||
31 | /* undef for production */ | ||
32 | #define HIGHMEM_DEBUG 1 | ||
33 | |||
34 | extern pte_t *kmap_pte; | ||
35 | extern pgprot_t kmap_prot; | ||
36 | extern pte_t *pkmap_page_table; | ||
37 | |||
38 | /* | ||
39 | * Right now we initialize only a single pte table. It can be extended | ||
40 | * easily, subsequent pte tables have to be allocated in one physical | ||
41 | * chunk of RAM. | ||
42 | */ | ||
43 | #define PKMAP_BASE CONFIG_HIGHMEM_START | ||
44 | #define LAST_PKMAP (1 << PTE_SHIFT) | ||
45 | #define LAST_PKMAP_MASK (LAST_PKMAP-1) | ||
46 | #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) | ||
47 | #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) | ||
48 | |||
49 | #define KMAP_FIX_BEGIN (PKMAP_BASE + 0x00400000UL) | ||
50 | |||
51 | extern void *kmap_high(struct page *page); | ||
52 | extern void kunmap_high(struct page *page); | ||
53 | |||
54 | static inline void *kmap(struct page *page) | ||
55 | { | ||
56 | might_sleep(); | ||
57 | if (!PageHighMem(page)) | ||
58 | return page_address(page); | ||
59 | return kmap_high(page); | ||
60 | } | ||
61 | |||
62 | static inline void kunmap(struct page *page) | ||
63 | { | ||
64 | BUG_ON(in_interrupt()); | ||
65 | if (!PageHighMem(page)) | ||
66 | return; | ||
67 | kunmap_high(page); | ||
68 | } | ||
69 | |||
70 | /* | ||
71 | * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap | ||
72 | * gives a more generic (and caching) interface. But kmap_atomic can | ||
73 | * be used in IRQ contexts, so in some (very limited) cases we need | ||
74 | * it. | ||
75 | */ | ||
76 | static inline void *kmap_atomic(struct page *page, enum km_type type) | ||
77 | { | ||
78 | unsigned int idx; | ||
79 | unsigned long vaddr; | ||
80 | |||
81 | /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ | ||
82 | pagefault_disable(); | ||
83 | if (!PageHighMem(page)) | ||
84 | return page_address(page); | ||
85 | |||
86 | idx = type + KM_TYPE_NR*smp_processor_id(); | ||
87 | vaddr = KMAP_FIX_BEGIN + idx * PAGE_SIZE; | ||
88 | #ifdef HIGHMEM_DEBUG | ||
89 | BUG_ON(!pte_none(*(kmap_pte+idx))); | ||
90 | #endif | ||
91 | set_pte_at(&init_mm, vaddr, kmap_pte+idx, mk_pte(page, kmap_prot)); | ||
92 | flush_tlb_page(NULL, vaddr); | ||
93 | |||
94 | return (void*) vaddr; | ||
95 | } | ||
96 | |||
97 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) | ||
98 | { | ||
99 | #ifdef HIGHMEM_DEBUG | ||
100 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; | ||
101 | unsigned int idx = type + KM_TYPE_NR*smp_processor_id(); | ||
102 | |||
103 | if (vaddr < KMAP_FIX_BEGIN) { // FIXME | ||
104 | pagefault_enable(); | ||
105 | return; | ||
106 | } | ||
107 | |||
108 | BUG_ON(vaddr != KMAP_FIX_BEGIN + idx * PAGE_SIZE); | ||
109 | |||
110 | /* | ||
111 | * force other mappings to Oops if they'll try to access | ||
112 | * this pte without first remap it | ||
113 | */ | ||
114 | pte_clear(&init_mm, vaddr, kmap_pte+idx); | ||
115 | flush_tlb_page(NULL, vaddr); | ||
116 | #endif | ||
117 | pagefault_enable(); | ||
118 | } | ||
119 | |||
120 | static inline struct page *kmap_atomic_to_page(void *ptr) | ||
121 | { | ||
122 | unsigned long idx, vaddr = (unsigned long) ptr; | ||
123 | |||
124 | if (vaddr < KMAP_FIX_BEGIN) | ||
125 | return virt_to_page(ptr); | ||
126 | |||
127 | idx = (vaddr - KMAP_FIX_BEGIN) >> PAGE_SHIFT; | ||
128 | return pte_page(kmap_pte[idx]); | ||
129 | } | ||
130 | |||
131 | #define flush_cache_kmaps() flush_cache_all() | ||
132 | |||
133 | #endif /* __KERNEL__ */ | ||
134 | |||
135 | #endif /* _ASM_HIGHMEM_H */ | ||
diff --git a/include/asm-ppc/hydra.h b/include/asm-ppc/hydra.h deleted file mode 100644 index 1ad4eed07fbe..000000000000 --- a/include/asm-ppc/hydra.h +++ /dev/null | |||
@@ -1,102 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/hydra.h -- Mac I/O `Hydra' definitions | ||
3 | * | ||
4 | * Copyright (C) 1997 Geert Uytterhoeven | ||
5 | * | ||
6 | * This file is based on the following documentation: | ||
7 | * | ||
8 | * Macintosh Technology in the Common Hardware Reference Platform | ||
9 | * Apple Computer, Inc. | ||
10 | * | ||
11 | * © Copyright 1995 Apple Computer, Inc. All rights reserved. | ||
12 | * | ||
13 | * It's available online from http://chrp.apple.com/MacTech.pdf. | ||
14 | * You can obtain paper copies of this book from computer bookstores or by | ||
15 | * writing Morgan Kaufmann Publishers, Inc., 340 Pine Street, Sixth Floor, San | ||
16 | * Francisco, CA 94104. Reference ISBN 1-55860-393-X. | ||
17 | * | ||
18 | * This file is subject to the terms and conditions of the GNU General Public | ||
19 | * License. See the file COPYING in the main directory of this archive | ||
20 | * for more details. | ||
21 | */ | ||
22 | |||
23 | #ifndef _ASMPPC_HYDRA_H | ||
24 | #define _ASMPPC_HYDRA_H | ||
25 | |||
26 | #ifdef __KERNEL__ | ||
27 | |||
28 | struct Hydra { | ||
29 | /* DBDMA Controller Register Space */ | ||
30 | char Pad1[0x30]; | ||
31 | u_int CachePD; | ||
32 | u_int IDs; | ||
33 | u_int Feature_Control; | ||
34 | char Pad2[0x7fc4]; | ||
35 | /* DBDMA Channel Register Space */ | ||
36 | char SCSI_DMA[0x100]; | ||
37 | char Pad3[0x300]; | ||
38 | char SCCA_Tx_DMA[0x100]; | ||
39 | char SCCA_Rx_DMA[0x100]; | ||
40 | char SCCB_Tx_DMA[0x100]; | ||
41 | char SCCB_Rx_DMA[0x100]; | ||
42 | char Pad4[0x7800]; | ||
43 | /* Device Register Space */ | ||
44 | char SCSI[0x1000]; | ||
45 | char ADB[0x1000]; | ||
46 | char SCC_Legacy[0x1000]; | ||
47 | char SCC[0x1000]; | ||
48 | char Pad9[0x2000]; | ||
49 | char VIA[0x2000]; | ||
50 | char Pad10[0x28000]; | ||
51 | char OpenPIC[0x40000]; | ||
52 | }; | ||
53 | |||
54 | extern volatile struct Hydra __iomem *Hydra; | ||
55 | |||
56 | |||
57 | /* | ||
58 | * Feature Control Register | ||
59 | */ | ||
60 | |||
61 | #define HYDRA_FC_SCC_CELL_EN 0x00000001 /* Enable SCC Clock */ | ||
62 | #define HYDRA_FC_SCSI_CELL_EN 0x00000002 /* Enable SCSI Clock */ | ||
63 | #define HYDRA_FC_SCCA_ENABLE 0x00000004 /* Enable SCC A Lines */ | ||
64 | #define HYDRA_FC_SCCB_ENABLE 0x00000008 /* Enable SCC B Lines */ | ||
65 | #define HYDRA_FC_ARB_BYPASS 0x00000010 /* Bypass Internal Arbiter */ | ||
66 | #define HYDRA_FC_RESET_SCC 0x00000020 /* Reset SCC */ | ||
67 | #define HYDRA_FC_MPIC_ENABLE 0x00000040 /* Enable OpenPIC */ | ||
68 | #define HYDRA_FC_SLOW_SCC_PCLK 0x00000080 /* 1=15.6672, 0=25 MHz */ | ||
69 | #define HYDRA_FC_MPIC_IS_MASTER 0x00000100 /* OpenPIC Master Mode */ | ||
70 | |||
71 | |||
72 | /* | ||
73 | * OpenPIC Interrupt Sources | ||
74 | */ | ||
75 | |||
76 | #define HYDRA_INT_SIO 0 | ||
77 | #define HYDRA_INT_SCSI_DMA 1 | ||
78 | #define HYDRA_INT_SCCA_TX_DMA 2 | ||
79 | #define HYDRA_INT_SCCA_RX_DMA 3 | ||
80 | #define HYDRA_INT_SCCB_TX_DMA 4 | ||
81 | #define HYDRA_INT_SCCB_RX_DMA 5 | ||
82 | #define HYDRA_INT_SCSI 6 | ||
83 | #define HYDRA_INT_SCCA 7 | ||
84 | #define HYDRA_INT_SCCB 8 | ||
85 | #define HYDRA_INT_VIA 9 | ||
86 | #define HYDRA_INT_ADB 10 | ||
87 | #define HYDRA_INT_ADB_NMI 11 | ||
88 | #define HYDRA_INT_EXT1 12 /* PCI IRQW */ | ||
89 | #define HYDRA_INT_EXT2 13 /* PCI IRQX */ | ||
90 | #define HYDRA_INT_EXT3 14 /* PCI IRQY */ | ||
91 | #define HYDRA_INT_EXT4 15 /* PCI IRQZ */ | ||
92 | #define HYDRA_INT_EXT5 16 /* IDE Primay/Secondary */ | ||
93 | #define HYDRA_INT_EXT6 17 /* IDE Secondary */ | ||
94 | #define HYDRA_INT_EXT7 18 /* Power Off Request */ | ||
95 | #define HYDRA_INT_SPARE 19 | ||
96 | |||
97 | extern int hydra_init(void); | ||
98 | extern void macio_adb_init(void); | ||
99 | |||
100 | #endif /* __KERNEL__ */ | ||
101 | |||
102 | #endif /* _ASMPPC_HYDRA_H */ | ||
diff --git a/include/asm-ppc/ibm403.h b/include/asm-ppc/ibm403.h deleted file mode 100644 index c9c5d539cfdb..000000000000 --- a/include/asm-ppc/ibm403.h +++ /dev/null | |||
@@ -1,478 +0,0 @@ | |||
1 | /* | ||
2 | * Authors: Armin Kuster <akuster@mvista.com> and Tom Rini <trini@mvista.com> | ||
3 | * | ||
4 | * 2001 (c) MontaVista, Software, Inc. This file is licensed under | ||
5 | * the terms of the GNU General Public License version 2. This program | ||
6 | * is licensed "as is" without any warranty of any kind, whether express | ||
7 | * or implied. | ||
8 | */ | ||
9 | |||
10 | |||
11 | #ifdef __KERNEL__ | ||
12 | #ifndef __ASM_IBM403_H__ | ||
13 | #define __ASM_IBM403_H__ | ||
14 | |||
15 | |||
16 | #if defined(CONFIG_403GCX) | ||
17 | |||
18 | #define DCRN_BE_BASE 0x090 | ||
19 | #define DCRN_DMA0_BASE 0x0C0 | ||
20 | #define DCRN_DMA1_BASE 0x0C8 | ||
21 | #define DCRN_DMA2_BASE 0x0D0 | ||
22 | #define DCRN_DMA3_BASE 0x0D8 | ||
23 | #define DCRNCAP_DMA_CC 1 /* have DMA chained count capability */ | ||
24 | #define DCRN_DMASR_BASE 0x0E0 | ||
25 | |||
26 | #define DCRN_EXIER_BASE 0x042 | ||
27 | #define DCRN_EXISR_BASE 0x040 | ||
28 | #define DCRN_IOCR_BASE 0x0A0 | ||
29 | |||
30 | |||
31 | /* ------------------------------------------------------------------------- */ | ||
32 | #endif | ||
33 | |||
34 | |||
35 | |||
36 | #ifdef DCRN_BE_BASE | ||
37 | #define DCRN_BEAR (DCRN_BE_BASE + 0x0) /* Bus Error Address Register */ | ||
38 | #define DCRN_BESR (DCRN_BE_BASE + 0x1) /* Bus Error Syndrome Register*/ | ||
39 | #endif | ||
40 | /* DCRN_BESR */ | ||
41 | #define BESR_DSES 0x80000000 /* Data-Side Error Status */ | ||
42 | #define BESR_DMES 0x40000000 /* DMA Error Status */ | ||
43 | #define BESR_RWS 0x20000000 /* Read/Write Status */ | ||
44 | #define BESR_ETMASK 0x1C000000 /* Error Type */ | ||
45 | #define ET_PROT 0 | ||
46 | #define ET_PARITY 1 | ||
47 | #define ET_NCFG 2 | ||
48 | #define ET_BUSERR 4 | ||
49 | #define ET_BUSTO 6 | ||
50 | |||
51 | #ifdef DCRN_CHCR_BASE | ||
52 | #define DCRN_CHCR0 (DCRN_CHCR_BASE + 0x0) /* Chip Control Register 1 */ | ||
53 | #define DCRN_CHCR1 (DCRN_CHCR_BASE + 0x1) /* Chip Control Register 2 */ | ||
54 | #endif | ||
55 | #define CHR1_CETE 0x00800000 /* CPU external timer enable */ | ||
56 | #define CHR1_PCIPW 0x00008000 /* PCI Int enable/Peripheral Write enable */ | ||
57 | |||
58 | #ifdef DCRN_CHPSR_BASE | ||
59 | #define DCRN_CHPSR (DCRN_CHPSR_BASE + 0x0) /* Chip Pin Strapping */ | ||
60 | #endif | ||
61 | |||
62 | #ifdef DCRN_CIC_BASE | ||
63 | #define DCRN_CICCR (DCRN_CIC_BASE + 0x0) /* CIC Control Register */ | ||
64 | #define DCRN_DMAS1 (DCRN_CIC_BASE + 0x1) /* DMA Select1 Register */ | ||
65 | #define DCRN_DMAS2 (DCRN_CIC_BASE + 0x2) /* DMA Select2 Register */ | ||
66 | #define DCRN_CICVCR (DCRN_CIC_BASE + 0x3) /* CIC Video COntro Register */ | ||
67 | #define DCRN_CICSEL3 (DCRN_CIC_BASE + 0x5) /* CIC Select 3 Register */ | ||
68 | #define DCRN_SGPO (DCRN_CIC_BASE + 0x6) /* CIC GPIO Output Register */ | ||
69 | #define DCRN_SGPOD (DCRN_CIC_BASE + 0x7) /* CIC GPIO OD Register */ | ||
70 | #define DCRN_SGPTC (DCRN_CIC_BASE + 0x8) /* CIC GPIO Tristate Ctrl Reg */ | ||
71 | #define DCRN_SGPI (DCRN_CIC_BASE + 0x9) /* CIC GPIO Input Reg */ | ||
72 | #endif | ||
73 | |||
74 | #ifdef DCRN_CPMFR_BASE | ||
75 | #define DCRN_CPMFR (DCRN_CPMFR_BASE + 0x0) /* CPM Force */ | ||
76 | #endif | ||
77 | |||
78 | #ifndef CPM_AUD | ||
79 | #define CPM_AUD 0x00000000 | ||
80 | #endif | ||
81 | #ifndef CPM_BRG | ||
82 | #define CPM_BRG 0x00000000 | ||
83 | #endif | ||
84 | #ifndef CPM_CBS | ||
85 | #define CPM_CBS 0x00000000 | ||
86 | #endif | ||
87 | #ifndef CPM_CPU | ||
88 | #define CPM_CPU 0x00000000 | ||
89 | #endif | ||
90 | #ifndef CPM_DCP | ||
91 | #define CPM_DCP 0x00000000 | ||
92 | #endif | ||
93 | #ifndef CPM_DCRX | ||
94 | #define CPM_DCRX 0x00000000 | ||
95 | #endif | ||
96 | #ifndef CPM_DENC | ||
97 | #define CPM_DENC 0x00000000 | ||
98 | #endif | ||
99 | #ifndef CPM_DMA | ||
100 | #define CPM_DMA 0x00000000 | ||
101 | #endif | ||
102 | #ifndef CPM_DSCR | ||
103 | #define CPM_DSCR 0x00000000 | ||
104 | #endif | ||
105 | #ifndef CPM_EBC | ||
106 | #define CPM_EBC 0x00000000 | ||
107 | #endif | ||
108 | #ifndef CPM_EBIU | ||
109 | #define CPM_EBIU 0x00000000 | ||
110 | #endif | ||
111 | #ifndef CPM_EMAC_MM | ||
112 | #define CPM_EMAC_MM 0x00000000 | ||
113 | #endif | ||
114 | #ifndef CPM_EMAC_RM | ||
115 | #define CPM_EMAC_RM 0x00000000 | ||
116 | #endif | ||
117 | #ifndef CPM_EMAC_TM | ||
118 | #define CPM_EMAC_TM 0x00000000 | ||
119 | #endif | ||
120 | #ifndef CPM_GPIO0 | ||
121 | #define CPM_GPIO0 0x00000000 | ||
122 | #endif | ||
123 | #ifndef CPM_GPT | ||
124 | #define CPM_GPT 0x00000000 | ||
125 | #endif | ||
126 | #ifndef CPM_I1284 | ||
127 | #define CPM_I1284 0x00000000 | ||
128 | #endif | ||
129 | #ifndef CPM_IIC0 | ||
130 | #define CPM_IIC0 0x00000000 | ||
131 | #endif | ||
132 | #ifndef CPM_IIC1 | ||
133 | #define CPM_IIC1 0x00000000 | ||
134 | #endif | ||
135 | #ifndef CPM_MSI | ||
136 | #define CPM_MSI 0x00000000 | ||
137 | #endif | ||
138 | #ifndef CPM_PCI | ||
139 | #define CPM_PCI 0x00000000 | ||
140 | #endif | ||
141 | #ifndef CPM_PLB | ||
142 | #define CPM_PLB 0x00000000 | ||
143 | #endif | ||
144 | #ifndef CPM_SC0 | ||
145 | #define CPM_SC0 0x00000000 | ||
146 | #endif | ||
147 | #ifndef CPM_SC1 | ||
148 | #define CPM_SC1 0x00000000 | ||
149 | #endif | ||
150 | #ifndef CPM_SDRAM0 | ||
151 | #define CPM_SDRAM0 0x00000000 | ||
152 | #endif | ||
153 | #ifndef CPM_SDRAM1 | ||
154 | #define CPM_SDRAM1 0x00000000 | ||
155 | #endif | ||
156 | #ifndef CPM_TMRCLK | ||
157 | #define CPM_TMRCLK 0x00000000 | ||
158 | #endif | ||
159 | #ifndef CPM_UART0 | ||
160 | #define CPM_UART0 0x00000000 | ||
161 | #endif | ||
162 | #ifndef CPM_UART1 | ||
163 | #define CPM_UART1 0x00000000 | ||
164 | #endif | ||
165 | #ifndef CPM_UART2 | ||
166 | #define CPM_UART2 0x00000000 | ||
167 | #endif | ||
168 | #ifndef CPM_UIC | ||
169 | #define CPM_UIC 0x00000000 | ||
170 | #endif | ||
171 | #ifndef CPM_VID2 | ||
172 | #define CPM_VID2 0x00000000 | ||
173 | #endif | ||
174 | #ifndef CPM_XPT27 | ||
175 | #define CPM_XPT27 0x00000000 | ||
176 | #endif | ||
177 | #ifndef CPM_XPT54 | ||
178 | #define CPM_XPT54 0x00000000 | ||
179 | #endif | ||
180 | |||
181 | #ifdef DCRN_CPMSR_BASE | ||
182 | #define DCRN_CPMSR (DCRN_CPMSR_BASE + 0x0) /* CPM Status */ | ||
183 | #define DCRN_CPMER (DCRN_CPMSR_BASE + 0x1) /* CPM Enable */ | ||
184 | #endif | ||
185 | |||
186 | #ifdef DCRN_DCP0_BASE | ||
187 | #define DCRN_DCP0_CFGADDR (DCRN_DCP0_BASE + 0x0) /* Decompression Controller Address */ | ||
188 | #define DCRN_DCP0_CFGDATA (DCRN_DCP0_BASE + 0x1) /* Decompression Controller Data */ | ||
189 | #endif | ||
190 | |||
191 | #ifdef DCRN_DCRX_BASE | ||
192 | #define DCRN_DCRXICR (DCRN_DCRX_BASE + 0x0) /* Internal Control Register */ | ||
193 | #define DCRN_DCRXISR (DCRN_DCRX_BASE + 0x1) /* Internal Status Register */ | ||
194 | #define DCRN_DCRXECR (DCRN_DCRX_BASE + 0x2) /* External Control Register */ | ||
195 | #define DCRN_DCRXESR (DCRN_DCRX_BASE + 0x3) /* External Status Register */ | ||
196 | #define DCRN_DCRXTAR (DCRN_DCRX_BASE + 0x4) /* Target Address Register */ | ||
197 | #define DCRN_DCRXTDR (DCRN_DCRX_BASE + 0x5) /* Target Data Register */ | ||
198 | #define DCRN_DCRXIGR (DCRN_DCRX_BASE + 0x6) /* Interrupt Generation Register */ | ||
199 | #define DCRN_DCRXBCR (DCRN_DCRX_BASE + 0x7) /* Line Buffer Control Register */ | ||
200 | #endif | ||
201 | |||
202 | #ifdef DCRN_DMA0_BASE | ||
203 | #define DCRN_DMACR0 (DCRN_DMA0_BASE + 0x0) /* DMA Channel Control Register 0 */ | ||
204 | #define DCRN_DMACT0 (DCRN_DMA0_BASE + 0x1) /* DMA Count Register 0 */ | ||
205 | #define DCRN_DMADA0 (DCRN_DMA0_BASE + 0x2) /* DMA Destination Address Register 0 */ | ||
206 | #define DCRN_DMASA0 (DCRN_DMA0_BASE + 0x3) /* DMA Source Address Register 0 */ | ||
207 | #ifdef DCRNCAP_DMA_CC | ||
208 | #define DCRN_DMACC0 (DCRN_DMA0_BASE + 0x4) /* DMA Chained Count Register 0 */ | ||
209 | #endif | ||
210 | |||
211 | #ifdef DCRNCAP_DMA_SG | ||
212 | #define DCRN_ASG0 (DCRN_DMA0_BASE + 0x4) /* DMA Scatter/Gather Descriptor Addr 0 */ | ||
213 | #endif | ||
214 | #endif | ||
215 | |||
216 | #ifdef DCRN_DMA1_BASE | ||
217 | #define DCRN_DMACR1 (DCRN_DMA1_BASE + 0x0) /* DMA Channel Control Register 1 */ | ||
218 | #define DCRN_DMACT1 (DCRN_DMA1_BASE + 0x1) /* DMA Count Register 1 */ | ||
219 | #define DCRN_DMADA1 (DCRN_DMA1_BASE + 0x2) /* DMA Destination Address Register 1 */ | ||
220 | #define DCRN_DMASA1 (DCRN_DMA1_BASE + 0x3) /* DMA Source Address Register 1 */ | ||
221 | |||
222 | #ifdef DCRNCAP_DMA_CC | ||
223 | #define DCRN_DMACC1 (DCRN_DMA1_BASE + 0x4) /* DMA Chained Count Register 1 */ | ||
224 | #endif | ||
225 | #ifdef DCRNCAP_DMA_SG | ||
226 | #define DCRN_ASG1 (DCRN_DMA1_BASE + 0x4) /* DMA Scatter/Gather Descriptor Addr 1 */ | ||
227 | #endif | ||
228 | #endif | ||
229 | |||
230 | #ifdef DCRN_DMA2_BASE | ||
231 | #define DCRN_DMACR2 (DCRN_DMA2_BASE + 0x0) /* DMA Channel Control Register 2 */ | ||
232 | #define DCRN_DMACT2 (DCRN_DMA2_BASE + 0x1) /* DMA Count Register 2 */ | ||
233 | #define DCRN_DMADA2 (DCRN_DMA2_BASE + 0x2) /* DMA Destination Address Register 2 */ | ||
234 | #define DCRN_DMASA2 (DCRN_DMA2_BASE + 0x3) /* DMA Source Address Register 2 */ | ||
235 | #ifdef DCRNCAP_DMA_CC | ||
236 | #define DCRN_DMACC2 (DCRN_DMA2_BASE + 0x4) /* DMA Chained Count Register 2 */ | ||
237 | #endif | ||
238 | #ifdef DCRNCAP_DMA_SG | ||
239 | #define DCRN_ASG2 (DCRN_DMA2_BASE + 0x4) /* DMA Scatter/Gather Descriptor Addr 2 */ | ||
240 | #endif | ||
241 | #endif | ||
242 | |||
243 | #ifdef DCRN_DMA3_BASE | ||
244 | #define DCRN_DMACR3 (DCRN_DMA3_BASE + 0x0) /* DMA Channel Control Register 3 */ | ||
245 | #define DCRN_DMACT3 (DCRN_DMA3_BASE + 0x1) /* DMA Count Register 3 */ | ||
246 | #define DCRN_DMADA3 (DCRN_DMA3_BASE + 0x2) /* DMA Destination Address Register 3 */ | ||
247 | #define DCRN_DMASA3 (DCRN_DMA3_BASE + 0x3) /* DMA Source Address Register 3 */ | ||
248 | #ifdef DCRNCAP_DMA_CC | ||
249 | #define DCRN_DMACC3 (DCRN_DMA3_BASE + 0x4) /* DMA Chained Count Register 3 */ | ||
250 | #endif | ||
251 | #ifdef DCRNCAP_DMA_SG | ||
252 | #define DCRN_ASG3 (DCRN_DMA3_BASE + 0x4) /* DMA Scatter/Gather Descriptor Addr 3 */ | ||
253 | #endif | ||
254 | #endif | ||
255 | |||
256 | #ifdef DCRN_DMASR_BASE | ||
257 | #define DCRN_DMASR (DCRN_DMASR_BASE + 0x0) /* DMA Status Register */ | ||
258 | #ifdef DCRNCAP_DMA_SG | ||
259 | #define DCRN_ASGC (DCRN_DMASR_BASE + 0x3) /* DMA Scatter/Gather Command */ | ||
260 | /* don't know if these two registers always exist if scatter/gather exists */ | ||
261 | #define DCRN_POL (DCRN_DMASR_BASE + 0x6) /* DMA Polarity Register */ | ||
262 | #define DCRN_SLP (DCRN_DMASR_BASE + 0x5) /* DMA Sleep Register */ | ||
263 | #endif | ||
264 | #endif | ||
265 | |||
266 | #ifdef DCRN_EBC_BASE | ||
267 | #define DCRN_EBCCFGADR (DCRN_EBC_BASE + 0x0) /* Peripheral Controller Address */ | ||
268 | #define DCRN_EBCCFGDATA (DCRN_EBC_BASE + 0x1) /* Peripheral Controller Data */ | ||
269 | #endif | ||
270 | |||
271 | #ifdef DCRN_EXIER_BASE | ||
272 | #define DCRN_EXIER (DCRN_EXIER_BASE + 0x0) /* External Interrupt Enable Register */ | ||
273 | #endif | ||
274 | |||
275 | #ifdef DCRN_EBIMC_BASE | ||
276 | #define DCRN_BRCRH0 (DCRN_EBIMC_BASE + 0x0) /* Bus Region Config High 0 */ | ||
277 | #define DCRN_BRCRH1 (DCRN_EBIMC_BASE + 0x1) /* Bus Region Config High 1 */ | ||
278 | #define DCRN_BRCRH2 (DCRN_EBIMC_BASE + 0x2) /* Bus Region Config High 2 */ | ||
279 | #define DCRN_BRCRH3 (DCRN_EBIMC_BASE + 0x3) /* Bus Region Config High 3 */ | ||
280 | #define DCRN_BRCRH4 (DCRN_EBIMC_BASE + 0x4) /* Bus Region Config High 4 */ | ||
281 | #define DCRN_BRCRH5 (DCRN_EBIMC_BASE + 0x5) /* Bus Region Config High 5 */ | ||
282 | #define DCRN_BRCRH6 (DCRN_EBIMC_BASE + 0x6) /* Bus Region Config High 6 */ | ||
283 | #define DCRN_BRCRH7 (DCRN_EBIMC_BASE + 0x7) /* Bus Region Config High 7 */ | ||
284 | #define DCRN_BRCR0 (DCRN_EBIMC_BASE + 0x10)/* BRC 0 */ | ||
285 | #define DCRN_BRCR1 (DCRN_EBIMC_BASE + 0x11)/* BRC 1 */ | ||
286 | #define DCRN_BRCR2 (DCRN_EBIMC_BASE + 0x12)/* BRC 2 */ | ||
287 | #define DCRN_BRCR3 (DCRN_EBIMC_BASE + 0x13)/* BRC 3 */ | ||
288 | #define DCRN_BRCR4 (DCRN_EBIMC_BASE + 0x14)/* BRC 4 */ | ||
289 | #define DCRN_BRCR5 (DCRN_EBIMC_BASE + 0x15)/* BRC 5 */ | ||
290 | #define DCRN_BRCR6 (DCRN_EBIMC_BASE + 0x16)/* BRC 6 */ | ||
291 | #define DCRN_BRCR7 (DCRN_EBIMC_BASE + 0x17)/* BRC 7 */ | ||
292 | #define DCRN_BEAR0 (DCRN_EBIMC_BASE + 0x20)/* Bus Error Address Register */ | ||
293 | #define DCRN_BESR0 (DCRN_EBIMC_BASE + 0x21)/* Bus Error Status Register */ | ||
294 | #define DCRN_BIUCR (DCRN_EBIMC_BASE + 0x2A)/* Bus Interfac Unit Ctrl Reg */ | ||
295 | #endif | ||
296 | |||
297 | #ifdef DCRN_EXISR_BASE | ||
298 | #define DCRN_EXISR (DCRN_EXISR_BASE + 0x0) /* External Interrupt Status Register */ | ||
299 | #endif | ||
300 | #define EXIER_CIE 0x80000000 /* Critical Interrupt Enable */ | ||
301 | #define EXIER_SRIE 0x08000000 /* Serial Port Rx Int. Enable */ | ||
302 | #define EXIER_STIE 0x04000000 /* Serial Port Tx Int. Enable */ | ||
303 | #define EXIER_JRIE 0x02000000 /* JTAG Serial Port Rx Int. Enable */ | ||
304 | #define EXIER_JTIE 0x01000000 /* JTAG Serial Port Tx Int. Enable */ | ||
305 | #define EXIER_D0IE 0x00800000 /* DMA Channel 0 Interrupt Enable */ | ||
306 | #define EXIER_D1IE 0x00400000 /* DMA Channel 1 Interrupt Enable */ | ||
307 | #define EXIER_D2IE 0x00200000 /* DMA Channel 2 Interrupt Enable */ | ||
308 | #define EXIER_D3IE 0x00100000 /* DMA Channel 3 Interrupt Enable */ | ||
309 | #define EXIER_E0IE 0x00000010 /* External Interrupt 0 Enable */ | ||
310 | #define EXIER_E1IE 0x00000008 /* External Interrupt 1 Enable */ | ||
311 | #define EXIER_E2IE 0x00000004 /* External Interrupt 2 Enable */ | ||
312 | #define EXIER_E3IE 0x00000002 /* External Interrupt 3 Enable */ | ||
313 | #define EXIER_E4IE 0x00000001 /* External Interrupt 4 Enable */ | ||
314 | |||
315 | #ifdef DCRN_IOCR_BASE | ||
316 | #define DCRN_IOCR (DCRN_IOCR_BASE + 0x0) /* Input/Output Configuration Register */ | ||
317 | #endif | ||
318 | #define IOCR_E0TE 0x80000000 | ||
319 | #define IOCR_E0LP 0x40000000 | ||
320 | #define IOCR_E1TE 0x20000000 | ||
321 | #define IOCR_E1LP 0x10000000 | ||
322 | #define IOCR_E2TE 0x08000000 | ||
323 | #define IOCR_E2LP 0x04000000 | ||
324 | #define IOCR_E3TE 0x02000000 | ||
325 | #define IOCR_E3LP 0x01000000 | ||
326 | #define IOCR_E4TE 0x00800000 | ||
327 | #define IOCR_E4LP 0x00400000 | ||
328 | #define IOCR_EDT 0x00080000 | ||
329 | #define IOCR_SOR 0x00040000 | ||
330 | #define IOCR_EDO 0x00008000 | ||
331 | #define IOCR_2XC 0x00004000 | ||
332 | #define IOCR_ATC 0x00002000 | ||
333 | #define IOCR_SPD 0x00001000 | ||
334 | #define IOCR_BEM 0x00000800 | ||
335 | #define IOCR_PTD 0x00000400 | ||
336 | #define IOCR_ARE 0x00000080 | ||
337 | #define IOCR_DRC 0x00000020 | ||
338 | #define IOCR_RDM(x) (((x) & 0x3) << 3) | ||
339 | #define IOCR_TCS 0x00000004 | ||
340 | #define IOCR_SCS 0x00000002 | ||
341 | #define IOCR_SPC 0x00000001 | ||
342 | |||
343 | #ifdef DCRN_MAL_BASE | ||
344 | #define DCRN_MALCR (DCRN_MAL_BASE + 0x0) /* MAL Configuration */ | ||
345 | #define DCRN_MALDBR (DCRN_MAL_BASE + 0x3) /* Debug Register */ | ||
346 | #define DCRN_MALESR (DCRN_MAL_BASE + 0x1) /* Error Status */ | ||
347 | #define DCRN_MALIER (DCRN_MAL_BASE + 0x2) /* Interrupt Enable */ | ||
348 | #define DCRN_MALTXCARR (DCRN_MAL_BASE + 0x5) /* TX Channed Active Reset Register */ | ||
349 | #define DCRN_MALTXCASR (DCRN_MAL_BASE + 0x4) /* TX Channel Active Set Register */ | ||
350 | #define DCRN_MALTXDEIR (DCRN_MAL_BASE + 0x7) /* Tx Descriptor Error Interrupt */ | ||
351 | #define DCRN_MALTXEOBISR (DCRN_MAL_BASE + 0x6) /* Tx End of Buffer Interrupt Status */ | ||
352 | #define DCRN_MALRXCARR (DCRN_MAL_BASE + 0x11) /* RX Channed Active Reset Register */ | ||
353 | #define DCRN_MALRXCASR (DCRN_MAL_BASE + 0x10) /* RX Channel Active Set Register */ | ||
354 | #define DCRN_MALRXDEIR (DCRN_MAL_BASE + 0x13) /* Rx Descriptor Error Interrupt */ | ||
355 | #define DCRN_MALRXEOBISR (DCRN_MAL_BASE + 0x12) /* Rx End of Buffer Interrupt Status */ | ||
356 | #define DCRN_MALRXCTP0R (DCRN_MAL_BASE + 0x40) /* Channel Rx 0 Channel Table Pointer */ | ||
357 | #define DCRN_MALTXCTP0R (DCRN_MAL_BASE + 0x20) /* Channel Tx 0 Channel Table Pointer */ | ||
358 | #define DCRN_MALTXCTP1R (DCRN_MAL_BASE + 0x21) /* Channel Tx 1 Channel Table Pointer */ | ||
359 | #define DCRN_MALRCBS0 (DCRN_MAL_BASE + 0x60) /* Channel Rx 0 Channel Buffer Size */ | ||
360 | #endif | ||
361 | /* DCRN_MALCR */ | ||
362 | #define MALCR_MMSR 0x80000000/* MAL Software reset */ | ||
363 | #define MALCR_PLBP_1 0x00400000 /* MAL reqest priority: */ | ||
364 | #define MALCR_PLBP_2 0x00800000 /* lowsest is 00 */ | ||
365 | #define MALCR_PLBP_3 0x00C00000 /* highest */ | ||
366 | #define MALCR_GA 0x00200000 /* Guarded Active Bit */ | ||
367 | #define MALCR_OA 0x00100000 /* Ordered Active Bit */ | ||
368 | #define MALCR_PLBLE 0x00080000 /* PLB Lock Error Bit */ | ||
369 | #define MALCR_PLBLT_1 0x00040000 /* PLB Latency Timer */ | ||
370 | #define MALCR_PLBLT_2 0x00020000 | ||
371 | #define MALCR_PLBLT_3 0x00010000 | ||
372 | #define MALCR_PLBLT_4 0x00008000 | ||
373 | #define MALCR_PLBLT_DEFAULT 0x00078000 /* JSP: Is this a valid default?? */ | ||
374 | #define MALCR_PLBB 0x00004000 /* PLB Burst Deactivation Bit */ | ||
375 | #define MALCR_OPBBL 0x00000080 /* OPB Lock Bit */ | ||
376 | #define MALCR_EOPIE 0x00000004 /* End Of Packet Interrupt Enable */ | ||
377 | #define MALCR_LEA 0x00000002 /* Locked Error Active */ | ||
378 | #define MALCR_MSD 0x00000001 /* MAL Scroll Descriptor Bit */ | ||
379 | /* DCRN_MALESR */ | ||
380 | #define MALESR_EVB 0x80000000 /* Error Valid Bit */ | ||
381 | #define MALESR_CIDRX 0x40000000 /* Channel ID Receive */ | ||
382 | #define MALESR_DE 0x00100000 /* Descriptor Error */ | ||
383 | #define MALESR_OEN 0x00080000 /* OPB Non-Fullword Error */ | ||
384 | #define MALESR_OTE 0x00040000 /* OPB Timeout Error */ | ||
385 | #define MALESR_OSE 0x00020000 /* OPB Slave Error */ | ||
386 | #define MALESR_PEIN 0x00010000 /* PLB Bus Error Indication */ | ||
387 | #define MALESR_DEI 0x00000010 /* Descriptor Error Interrupt */ | ||
388 | #define MALESR_ONEI 0x00000008 /* OPB Non-Fullword Error Interrupt */ | ||
389 | #define MALESR_OTEI 0x00000004 /* OPB Timeout Error Interrupt */ | ||
390 | #define MALESR_OSEI 0x00000002 /* OPB Slace Error Interrupt */ | ||
391 | #define MALESR_PBEI 0x00000001 /* PLB Bus Error Interrupt */ | ||
392 | /* DCRN_MALIER */ | ||
393 | #define MALIER_DE 0x00000010 /* Descriptor Error Interrupt Enable */ | ||
394 | #define MALIER_NE 0x00000008 /* OPB Non-word Transfer Int Enable */ | ||
395 | #define MALIER_TE 0x00000004 /* OPB Time Out Error Interrupt Enable */ | ||
396 | #define MALIER_OPBE 0x00000002 /* OPB Slave Error Interrupt Enable */ | ||
397 | #define MALIER_PLBE 0x00000001 /* PLB Error Interrupt Enable */ | ||
398 | /* DCRN_MALTXEOBISR */ | ||
399 | #define MALOBISR_CH0 0x80000000 /* EOB channel 1 bit */ | ||
400 | #define MALOBISR_CH2 0x40000000 /* EOB channel 2 bit */ | ||
401 | |||
402 | #ifdef DCRN_OCM0_BASE | ||
403 | #define DCRN_OCMISARC (DCRN_OCM0_BASE + 0x0) /* OCM Instr Side Addr Range Compare */ | ||
404 | #define DCRN_OCMISCR (DCRN_OCM0_BASE + 0x1) /* OCM Instr Side Control */ | ||
405 | #define DCRN_OCMDSARC (DCRN_OCM0_BASE + 0x2) /* OCM Data Side Addr Range Compare */ | ||
406 | #define DCRN_OCMDSCR (DCRN_OCM0_BASE + 0x3) /* OCM Data Side Control */ | ||
407 | #endif | ||
408 | |||
409 | #ifdef DCRN_PLB0_BASE | ||
410 | #define DCRN_PLB0_BESR (DCRN_PLB0_BASE + 0x0) | ||
411 | #define DCRN_PLB0_BEAR (DCRN_PLB0_BASE + 0x2) | ||
412 | /* doesn't exist on stb03xxx? */ | ||
413 | #define DCRN_PLB0_ACR (DCRN_PLB0_BASE + 0x3) | ||
414 | #endif | ||
415 | |||
416 | #ifdef DCRN_PLB1_BASE | ||
417 | #define DCRN_PLB1_BESR (DCRN_PLB1_BASE + 0x0) | ||
418 | #define DCRN_PLB1_BEAR (DCRN_PLB1_BASE + 0x1) | ||
419 | /* doesn't exist on stb03xxx? */ | ||
420 | #define DCRN_PLB1_ACR (DCRN_PLB1_BASE + 0x2) | ||
421 | #endif | ||
422 | |||
423 | #ifdef DCRN_PLLMR_BASE | ||
424 | #define DCRN_PLLMR (DCRN_PLLMR_BASE + 0x0) /* PL1 Mode */ | ||
425 | #endif | ||
426 | |||
427 | #ifdef DCRN_POB0_BASE | ||
428 | #define DCRN_POB0_BESR0 (DCRN_POB0_BASE + 0x0) | ||
429 | #define DCRN_POB0_BEAR (DCRN_POB0_BASE + 0x2) | ||
430 | #define DCRN_POB0_BESR1 (DCRN_POB0_BASE + 0x4) | ||
431 | #endif | ||
432 | |||
433 | #ifdef DCRN_SCCR_BASE | ||
434 | #define DCRN_SCCR (DCRN_SCCR_BASE + 0x0) | ||
435 | #endif | ||
436 | |||
437 | #ifdef DCRN_SDRAM0_BASE | ||
438 | #define DCRN_SDRAM0_CFGADDR (DCRN_SDRAM0_BASE + 0x0) /* Mem Ctrlr Address */ | ||
439 | #define DCRN_SDRAM0_CFGDATA (DCRN_SDRAM0_BASE + 0x1) /* Mem Ctrlr Data */ | ||
440 | #endif | ||
441 | |||
442 | #ifdef DCRN_UIC0_BASE | ||
443 | #define DCRN_UIC0_SR (DCRN_UIC0_BASE + 0x0) | ||
444 | #define DCRN_UIC0_ER (DCRN_UIC0_BASE + 0x2) | ||
445 | #define DCRN_UIC0_CR (DCRN_UIC0_BASE + 0x3) | ||
446 | #define DCRN_UIC0_PR (DCRN_UIC0_BASE + 0x4) | ||
447 | #define DCRN_UIC0_TR (DCRN_UIC0_BASE + 0x5) | ||
448 | #define DCRN_UIC0_MSR (DCRN_UIC0_BASE + 0x6) | ||
449 | #define DCRN_UIC0_VR (DCRN_UIC0_BASE + 0x7) | ||
450 | #define DCRN_UIC0_VCR (DCRN_UIC0_BASE + 0x8) | ||
451 | #endif | ||
452 | |||
453 | #ifdef DCRN_UIC1_BASE | ||
454 | #define DCRN_UIC1_SR (DCRN_UIC1_BASE + 0x0) | ||
455 | #define DCRN_UIC1_SRS (DCRN_UIC1_BASE + 0x1) | ||
456 | #define DCRN_UIC1_ER (DCRN_UIC1_BASE + 0x2) | ||
457 | #define DCRN_UIC1_CR (DCRN_UIC1_BASE + 0x3) | ||
458 | #define DCRN_UIC1_PR (DCRN_UIC1_BASE + 0x4) | ||
459 | #define DCRN_UIC1_TR (DCRN_UIC1_BASE + 0x5) | ||
460 | #define DCRN_UIC1_MSR (DCRN_UIC1_BASE + 0x6) | ||
461 | #define DCRN_UIC1_VR (DCRN_UIC1_BASE + 0x7) | ||
462 | #define DCRN_UIC1_VCR (DCRN_UIC1_BASE + 0x8) | ||
463 | #endif | ||
464 | |||
465 | #ifdef DCRN_SDRAM0_BASE | ||
466 | #define DCRN_SDRAM0_CFGADDR (DCRN_SDRAM0_BASE + 0x0) /* Memory Controller Address */ | ||
467 | #define DCRN_SDRAM0_CFGDATA (DCRN_SDRAM0_BASE + 0x1) /* Memory Controller Data */ | ||
468 | #endif | ||
469 | |||
470 | #ifdef DCRN_OCM0_BASE | ||
471 | #define DCRN_OCMISARC (DCRN_OCM0_BASE + 0x0) /* OCM Instr Side Addr Range Compare */ | ||
472 | #define DCRN_OCMISCR (DCRN_OCM0_BASE + 0x1) /* OCM Instr Side Control */ | ||
473 | #define DCRN_OCMDSARC (DCRN_OCM0_BASE + 0x2) /* OCM Data Side Addr Range Compare */ | ||
474 | #define DCRN_OCMDSCR (DCRN_OCM0_BASE + 0x3) /* OCM Data Side Control */ | ||
475 | #endif | ||
476 | |||
477 | #endif /* __ASM_IBM403_H__ */ | ||
478 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/ibm405.h b/include/asm-ppc/ibm405.h deleted file mode 100644 index 4e5be9e2c153..000000000000 --- a/include/asm-ppc/ibm405.h +++ /dev/null | |||
@@ -1,299 +0,0 @@ | |||
1 | /* | ||
2 | * Author: Armin Kuster <akuster@mvista.com> | ||
3 | * | ||
4 | * 2002 (c) MontaVista, Software, Inc. This file is licensed under | ||
5 | * the terms of the GNU General Public License version 2. This program | ||
6 | * is licensed "as is" without any warranty of any kind, whether express | ||
7 | * or implied. | ||
8 | */ | ||
9 | |||
10 | #ifdef __KERNEL__ | ||
11 | #ifndef __ASM_IBM405_H__ | ||
12 | #define __ASM_IBM405_H__ | ||
13 | |||
14 | #ifdef DCRN_BE_BASE | ||
15 | #define DCRN_BEAR (DCRN_BE_BASE + 0x0) /* Bus Error Address Register */ | ||
16 | #define DCRN_BESR (DCRN_BE_BASE + 0x1) /* Bus Error Syndrome Register */ | ||
17 | #endif | ||
18 | /* DCRN_BESR */ | ||
19 | #define BESR_DSES 0x80000000 /* Data-Side Error Status */ | ||
20 | #define BESR_DMES 0x40000000 /* DMA Error Status */ | ||
21 | #define BESR_RWS 0x20000000 /* Read/Write Status */ | ||
22 | #define BESR_ETMASK 0x1C000000 /* Error Type */ | ||
23 | #define ET_PROT 0 | ||
24 | #define ET_PARITY 1 | ||
25 | #define ET_NCFG 2 | ||
26 | #define ET_BUSERR 4 | ||
27 | #define ET_BUSTO 6 | ||
28 | |||
29 | /* Clock and power management shifts for emacs */ | ||
30 | #define IBM_CPM_EMMII 0 /* Shift value for MII */ | ||
31 | #define IBM_CPM_EMRX 1 /* Shift value for recv */ | ||
32 | #define IBM_CPM_EMTX 2 /* Shift value for MAC */ | ||
33 | |||
34 | #ifdef DCRN_CHCR_BASE | ||
35 | #define DCRN_CHCR0 (DCRN_CHCR_BASE + 0x0) /* Chip Control Register 1 */ | ||
36 | #define DCRN_CHCR1 (DCRN_CHCR_BASE + 0x1) /* Chip Control Register 2 */ | ||
37 | #endif | ||
38 | #define CHR1_PCIPW 0x00008000 /* PCI Int enable/Peripheral Write enable */ | ||
39 | |||
40 | #ifdef DCRN_CHPSR_BASE | ||
41 | #define DCRN_CHPSR (DCRN_CHPSR_BASE + 0x0) /* Chip Pin Strapping */ | ||
42 | #endif | ||
43 | |||
44 | #ifdef DCRN_CPMFR_BASE | ||
45 | #define DCRN_CPMFR (DCRN_CPMFR_BASE + 0x0) /* CPM Force */ | ||
46 | #endif | ||
47 | |||
48 | #ifdef DCRN_CPMSR_BASE | ||
49 | #define DCRN_CPMSR (DCRN_CPMSR_BASE + 0x0) /* CPM Status */ | ||
50 | #define DCRN_CPMER (DCRN_CPMSR_BASE + 0x1) /* CPM Enable */ | ||
51 | #endif | ||
52 | |||
53 | #ifdef DCRN_DCP0_BASE | ||
54 | /* Decompression Controller Address */ | ||
55 | #define DCRN_DCP0_CFGADDR (DCRN_DCP0_BASE + 0x0) | ||
56 | /* Decompression Controller Data */ | ||
57 | #define DCRN_DCP0_CFGDATA (DCRN_DCP0_BASE + 0x1) | ||
58 | #else | ||
59 | #define DCRN_DCP0_CFGADDR 0x0 | ||
60 | #define DCRN_DCP0_CFGDATA 0x0 | ||
61 | #endif | ||
62 | |||
63 | #ifdef DCRN_DMA0_BASE | ||
64 | /* DMA Channel Control Register 0 */ | ||
65 | #define DCRN_DMACR0 (DCRN_DMA0_BASE + 0x0) | ||
66 | #define DCRN_DMACT0 (DCRN_DMA0_BASE + 0x1) /* DMA Count Register 0 */ | ||
67 | /* DMA Destination Address Register 0 */ | ||
68 | #define DCRN_DMADA0 (DCRN_DMA0_BASE + 0x2) | ||
69 | /* DMA Source Address Register 0 */ | ||
70 | #define DCRN_DMASA0 (DCRN_DMA0_BASE + 0x3) | ||
71 | #ifdef DCRNCAP_DMA_CC | ||
72 | /* DMA Chained Count Register 0 */ | ||
73 | #define DCRN_DMACC0 (DCRN_DMA0_BASE + 0x4) | ||
74 | #endif | ||
75 | #ifdef DCRNCAP_DMA_SG | ||
76 | /* DMA Scatter/Gather Descriptor Addr 0 */ | ||
77 | #define DCRN_ASG0 (DCRN_DMA0_BASE + 0x4) | ||
78 | #endif | ||
79 | #endif | ||
80 | |||
81 | #ifdef DCRN_DMA1_BASE | ||
82 | /* DMA Channel Control Register 1 */ | ||
83 | #define DCRN_DMACR1 (DCRN_DMA1_BASE + 0x0) | ||
84 | #define DCRN_DMACT1 (DCRN_DMA1_BASE + 0x1) /* DMA Count Register 1 */ | ||
85 | /* DMA Destination Address Register 1 */ | ||
86 | #define DCRN_DMADA1 (DCRN_DMA1_BASE + 0x2) | ||
87 | /* DMA Source Address Register 1 */ | ||
88 | #define DCRN_DMASA1 (DCRN_DMA1_BASE + 0x3) /* DMA Source Address Register 1 */ | ||
89 | #ifdef DCRNCAP_DMA_CC | ||
90 | /* DMA Chained Count Register 1 */ | ||
91 | #define DCRN_DMACC1 (DCRN_DMA1_BASE + 0x4) | ||
92 | #endif | ||
93 | #ifdef DCRNCAP_DMA_SG | ||
94 | /* DMA Scatter/Gather Descriptor Addr 1 */ | ||
95 | #define DCRN_ASG1 (DCRN_DMA1_BASE + 0x4) | ||
96 | #endif | ||
97 | #endif | ||
98 | |||
99 | #ifdef DCRN_DMA2_BASE | ||
100 | #define DCRN_DMACR2 (DCRN_DMA2_BASE + 0x0) /* DMA Channel Control Register 2 */ | ||
101 | #define DCRN_DMACT2 (DCRN_DMA2_BASE + 0x1) /* DMA Count Register 2 */ | ||
102 | #define DCRN_DMADA2 (DCRN_DMA2_BASE + 0x2) /* DMA Destination Address Register 2 */ | ||
103 | #define DCRN_DMASA2 (DCRN_DMA2_BASE + 0x3) /* DMA Source Address Register 2 */ | ||
104 | #ifdef DCRNCAP_DMA_CC | ||
105 | #define DCRN_DMACC2 (DCRN_DMA2_BASE + 0x4) /* DMA Chained Count Register 2 */ | ||
106 | #endif | ||
107 | #ifdef DCRNCAP_DMA_SG | ||
108 | #define DCRN_ASG2 (DCRN_DMA2_BASE + 0x4) /* DMA Scatter/Gather Descriptor Addr 2 */ | ||
109 | #endif | ||
110 | #endif | ||
111 | |||
112 | #ifdef DCRN_DMA3_BASE | ||
113 | #define DCRN_DMACR3 (DCRN_DMA3_BASE + 0x0) /* DMA Channel Control Register 3 */ | ||
114 | #define DCRN_DMACT3 (DCRN_DMA3_BASE + 0x1) /* DMA Count Register 3 */ | ||
115 | #define DCRN_DMADA3 (DCRN_DMA3_BASE + 0x2) /* DMA Destination Address Register 3 */ | ||
116 | #define DCRN_DMASA3 (DCRN_DMA3_BASE + 0x3) /* DMA Source Address Register 3 */ | ||
117 | #ifdef DCRNCAP_DMA_CC | ||
118 | #define DCRN_DMACC3 (DCRN_DMA3_BASE + 0x4) /* DMA Chained Count Register 3 */ | ||
119 | #endif | ||
120 | #ifdef DCRNCAP_DMA_SG | ||
121 | #define DCRN_ASG3 (DCRN_DMA3_BASE + 0x4) /* DMA Scatter/Gather Descriptor Addr 3 */ | ||
122 | #endif | ||
123 | #endif | ||
124 | |||
125 | #ifdef DCRN_DMASR_BASE | ||
126 | #define DCRN_DMASR (DCRN_DMASR_BASE + 0x0) /* DMA Status Register */ | ||
127 | #ifdef DCRNCAP_DMA_SG | ||
128 | #define DCRN_ASGC (DCRN_DMASR_BASE + 0x3) /* DMA Scatter/Gather Command */ | ||
129 | /* don't know if these two registers always exist if scatter/gather exists */ | ||
130 | #define DCRN_POL (DCRN_DMASR_BASE + 0x6) /* DMA Polarity Register */ | ||
131 | #define DCRN_SLP (DCRN_DMASR_BASE + 0x5) /* DMA Sleep Register */ | ||
132 | #endif | ||
133 | #endif | ||
134 | |||
135 | #ifdef DCRN_EBC_BASE | ||
136 | #define DCRN_EBCCFGADR (DCRN_EBC_BASE + 0x0) /* Peripheral Controller Address */ | ||
137 | #define DCRN_EBCCFGDATA (DCRN_EBC_BASE + 0x1) /* Peripheral Controller Data */ | ||
138 | #endif | ||
139 | |||
140 | #ifdef DCRN_EXIER_BASE | ||
141 | #define DCRN_EXIER (DCRN_EXIER_BASE + 0x0) /* External Interrupt Enable Register */ | ||
142 | #endif | ||
143 | |||
144 | #ifdef DCRN_EXISR_BASE | ||
145 | #define DCRN_EXISR (DCRN_EXISR_BASE + 0x0) /* External Interrupt Status Register */ | ||
146 | #endif | ||
147 | |||
148 | #define EXIER_CIE 0x80000000 /* Critical Interrupt Enable */ | ||
149 | #define EXIER_SRIE 0x08000000 /* Serial Port Rx Int. Enable */ | ||
150 | #define EXIER_STIE 0x04000000 /* Serial Port Tx Int. Enable */ | ||
151 | #define EXIER_JRIE 0x02000000 /* JTAG Serial Port Rx Int. Enable */ | ||
152 | #define EXIER_JTIE 0x01000000 /* JTAG Serial Port Tx Int. Enable */ | ||
153 | #define EXIER_D0IE 0x00800000 /* DMA Channel 0 Interrupt Enable */ | ||
154 | #define EXIER_D1IE 0x00400000 /* DMA Channel 1 Interrupt Enable */ | ||
155 | #define EXIER_D2IE 0x00200000 /* DMA Channel 2 Interrupt Enable */ | ||
156 | #define EXIER_D3IE 0x00100000 /* DMA Channel 3 Interrupt Enable */ | ||
157 | #define EXIER_E0IE 0x00000010 /* External Interrupt 0 Enable */ | ||
158 | #define EXIER_E1IE 0x00000008 /* External Interrupt 1 Enable */ | ||
159 | #define EXIER_E2IE 0x00000004 /* External Interrupt 2 Enable */ | ||
160 | #define EXIER_E3IE 0x00000002 /* External Interrupt 3 Enable */ | ||
161 | #define EXIER_E4IE 0x00000001 /* External Interrupt 4 Enable */ | ||
162 | |||
163 | #ifdef DCRN_IOCR_BASE | ||
164 | #define DCRN_IOCR (DCRN_IOCR_BASE + 0x0) /* Input/Output Configuration Register */ | ||
165 | #endif | ||
166 | #define IOCR_E0TE 0x80000000 | ||
167 | #define IOCR_E0LP 0x40000000 | ||
168 | #define IOCR_E1TE 0x20000000 | ||
169 | #define IOCR_E1LP 0x10000000 | ||
170 | #define IOCR_E2TE 0x08000000 | ||
171 | #define IOCR_E2LP 0x04000000 | ||
172 | #define IOCR_E3TE 0x02000000 | ||
173 | #define IOCR_E3LP 0x01000000 | ||
174 | #define IOCR_E4TE 0x00800000 | ||
175 | #define IOCR_E4LP 0x00400000 | ||
176 | #define IOCR_EDT 0x00080000 | ||
177 | #define IOCR_SOR 0x00040000 | ||
178 | #define IOCR_EDO 0x00008000 | ||
179 | #define IOCR_2XC 0x00004000 | ||
180 | #define IOCR_ATC 0x00002000 | ||
181 | #define IOCR_SPD 0x00001000 | ||
182 | #define IOCR_BEM 0x00000800 | ||
183 | #define IOCR_PTD 0x00000400 | ||
184 | #define IOCR_ARE 0x00000080 | ||
185 | #define IOCR_DRC 0x00000020 | ||
186 | #define IOCR_RDM(x) (((x) & 0x3) << 3) | ||
187 | #define IOCR_TCS 0x00000004 | ||
188 | #define IOCR_SCS 0x00000002 | ||
189 | #define IOCR_SPC 0x00000001 | ||
190 | |||
191 | #define DCRN_MALCR(base) (base + 0x0) /* MAL Configuration */ | ||
192 | #define DCRN_MALDBR(base) ((base) + 0x3) /* Debug Register */ | ||
193 | #define DCRN_MALESR(base) ((base) + 0x1) /* Error Status */ | ||
194 | #define DCRN_MALIER(base) ((base) + 0x2) /* Interrupt Enable */ | ||
195 | #define DCRN_MALTXCARR(base) ((base) + 0x5) /* TX Channed Active Reset Register */ | ||
196 | #define DCRN_MALTXCASR(base) ((base) + 0x4) /* TX Channel Active Set Register */ | ||
197 | #define DCRN_MALTXDEIR(base) ((base) + 0x7) /* Tx Descriptor Error Interrupt */ | ||
198 | #define DCRN_MALTXEOBISR(base) ((base) + 0x6) /* Tx End of Buffer Interrupt Status */ | ||
199 | #define DCRN_MALRXCARR(base) ((base) + 0x11) /* RX Channed Active Reset Register */ | ||
200 | #define DCRN_MALRXCASR(base) ((base) + 0x10) /* RX Channel Active Set Register */ | ||
201 | #define DCRN_MALRXDEIR(base) ((base) + 0x13) /* Rx Descriptor Error Interrupt */ | ||
202 | #define DCRN_MALRXEOBISR(base) ((base) + 0x12) /* Rx End of Buffer Interrupt Status */ | ||
203 | #define DCRN_MALRXCTP0R(base) ((base) + 0x40) /* Channel Rx 0 Channel Table Pointer */ | ||
204 | #define DCRN_MALRXCTP1R(base) ((base) + 0x41) /* Channel Rx 1 Channel Table Pointer */ | ||
205 | #define DCRN_MALTXCTP0R(base) ((base) + 0x20) /* Channel Tx 0 Channel Table Pointer */ | ||
206 | #define DCRN_MALTXCTP1R(base) ((base) + 0x21) /* Channel Tx 1 Channel Table Pointer */ | ||
207 | #define DCRN_MALTXCTP2R(base) ((base) + 0x22) /* Channel Tx 2 Channel Table Pointer */ | ||
208 | #define DCRN_MALTXCTP3R(base) ((base) + 0x23) /* Channel Tx 3 Channel Table Pointer */ | ||
209 | #define DCRN_MALRCBS0(base) ((base) + 0x60) /* Channel Rx 0 Channel Buffer Size */ | ||
210 | #define DCRN_MALRCBS1(base) ((base) + 0x61) /* Channel Rx 1 Channel Buffer Size */ | ||
211 | |||
212 | /* DCRN_MALCR */ | ||
213 | #define MALCR_MMSR 0x80000000 /* MAL Software reset */ | ||
214 | #define MALCR_PLBP_1 0x00400000 /* MAL reqest priority: */ | ||
215 | #define MALCR_PLBP_2 0x00800000 /* lowsest is 00 */ | ||
216 | #define MALCR_PLBP_3 0x00C00000 /* highest */ | ||
217 | #define MALCR_GA 0x00200000 /* Guarded Active Bit */ | ||
218 | #define MALCR_OA 0x00100000 /* Ordered Active Bit */ | ||
219 | #define MALCR_PLBLE 0x00080000 /* PLB Lock Error Bit */ | ||
220 | #define MALCR_PLBLT_1 0x00040000 /* PLB Latency Timer */ | ||
221 | #define MALCR_PLBLT_2 0x00020000 | ||
222 | #define MALCR_PLBLT_3 0x00010000 | ||
223 | #define MALCR_PLBLT_4 0x00008000 | ||
224 | #define MALCR_PLBLT_DEFAULT 0x00078000 /* JSP: Is this a valid default?? */ | ||
225 | #define MALCR_PLBB 0x00004000 /* PLB Burst Deactivation Bit */ | ||
226 | #define MALCR_OPBBL 0x00000080 /* OPB Lock Bit */ | ||
227 | #define MALCR_EOPIE 0x00000004 /* End Of Packet Interrupt Enable */ | ||
228 | #define MALCR_LEA 0x00000002 /* Locked Error Active */ | ||
229 | #define MALCR_MSD 0x00000001 /* MAL Scroll Descriptor Bit */ | ||
230 | /* DCRN_MALESR */ | ||
231 | #define MALESR_EVB 0x80000000 /* Error Valid Bit */ | ||
232 | #define MALESR_CIDRX 0x40000000 /* Channel ID Receive */ | ||
233 | #define MALESR_DE 0x00100000 /* Descriptor Error */ | ||
234 | #define MALESR_OEN 0x00080000 /* OPB Non-Fullword Error */ | ||
235 | #define MALESR_OTE 0x00040000 /* OPB Timeout Error */ | ||
236 | #define MALESR_OSE 0x00020000 /* OPB Slave Error */ | ||
237 | #define MALESR_PEIN 0x00010000 /* PLB Bus Error Indication */ | ||
238 | #define MALESR_DEI 0x00000010 /* Descriptor Error Interrupt */ | ||
239 | #define MALESR_ONEI 0x00000008 /* OPB Non-Fullword Error Interrupt */ | ||
240 | #define MALESR_OTEI 0x00000004 /* OPB Timeout Error Interrupt */ | ||
241 | #define MALESR_OSEI 0x00000002 /* OPB Slace Error Interrupt */ | ||
242 | #define MALESR_PBEI 0x00000001 /* PLB Bus Error Interrupt */ | ||
243 | /* DCRN_MALIER */ | ||
244 | #define MALIER_DE 0x00000010 /* Descriptor Error Interrupt Enable */ | ||
245 | #define MALIER_NE 0x00000008 /* OPB Non-word Transfer Int Enable */ | ||
246 | #define MALIER_TE 0x00000004 /* OPB Time Out Error Interrupt Enable */ | ||
247 | #define MALIER_OPBE 0x00000002 /* OPB Slave Error Interrupt Enable */ | ||
248 | #define MALIER_PLBE 0x00000001 /* PLB Error Interrupt Enable */ | ||
249 | /* DCRN_MALTXEOBISR */ | ||
250 | #define MALOBISR_CH0 0x80000000 /* EOB channel 1 bit */ | ||
251 | #define MALOBISR_CH2 0x40000000 /* EOB channel 2 bit */ | ||
252 | |||
253 | #ifdef DCRN_PLB0_BASE | ||
254 | #define DCRN_PLB0_BESR (DCRN_PLB0_BASE + 0x0) | ||
255 | #define DCRN_PLB0_BEAR (DCRN_PLB0_BASE + 0x2) | ||
256 | /* doesn't exist on stb03xxx? */ | ||
257 | #define DCRN_PLB0_ACR (DCRN_PLB0_BASE + 0x3) | ||
258 | #endif | ||
259 | |||
260 | #ifdef DCRN_PLB1_BASE | ||
261 | #define DCRN_PLB1_BESR (DCRN_PLB1_BASE + 0x0) | ||
262 | #define DCRN_PLB1_BEAR (DCRN_PLB1_BASE + 0x1) | ||
263 | /* doesn't exist on stb03xxx? */ | ||
264 | #define DCRN_PLB1_ACR (DCRN_PLB1_BASE + 0x2) | ||
265 | #endif | ||
266 | |||
267 | #ifdef DCRN_PLLMR_BASE | ||
268 | #define DCRN_PLLMR (DCRN_PLLMR_BASE + 0x0) /* PL1 Mode */ | ||
269 | #endif | ||
270 | |||
271 | #ifdef DCRN_POB0_BASE | ||
272 | #define DCRN_POB0_BESR0 (DCRN_POB0_BASE + 0x0) | ||
273 | #define DCRN_POB0_BEAR (DCRN_POB0_BASE + 0x2) | ||
274 | #define DCRN_POB0_BESR1 (DCRN_POB0_BASE + 0x4) | ||
275 | #endif | ||
276 | |||
277 | #define DCRN_UIC_SR(base) (base + 0x0) | ||
278 | #define DCRN_UIC_ER(base) (base + 0x2) | ||
279 | #define DCRN_UIC_CR(base) (base + 0x3) | ||
280 | #define DCRN_UIC_PR(base) (base + 0x4) | ||
281 | #define DCRN_UIC_TR(base) (base + 0x5) | ||
282 | #define DCRN_UIC_MSR(base) (base + 0x6) | ||
283 | #define DCRN_UIC_VR(base) (base + 0x7) | ||
284 | #define DCRN_UIC_VCR(base) (base + 0x8) | ||
285 | |||
286 | #ifdef DCRN_SDRAM0_BASE | ||
287 | #define DCRN_SDRAM0_CFGADDR (DCRN_SDRAM0_BASE + 0x0) /* Memory Controller Address */ | ||
288 | #define DCRN_SDRAM0_CFGDATA (DCRN_SDRAM0_BASE + 0x1) /* Memory Controller Data */ | ||
289 | #endif | ||
290 | |||
291 | #ifdef DCRN_OCM0_BASE | ||
292 | #define DCRN_OCMISARC (DCRN_OCM0_BASE + 0x0) /* OCM Instr Side Addr Range Compare */ | ||
293 | #define DCRN_OCMISCR (DCRN_OCM0_BASE + 0x1) /* OCM Instr Side Control */ | ||
294 | #define DCRN_OCMDSARC (DCRN_OCM0_BASE + 0x2) /* OCM Data Side Addr Range Compare */ | ||
295 | #define DCRN_OCMDSCR (DCRN_OCM0_BASE + 0x3) /* OCM Data Side Control */ | ||
296 | #endif | ||
297 | |||
298 | #endif /* __ASM_IBM405_H__ */ | ||
299 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/ibm44x.h b/include/asm-ppc/ibm44x.h deleted file mode 100644 index 7818b54b6e37..000000000000 --- a/include/asm-ppc/ibm44x.h +++ /dev/null | |||
@@ -1,674 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/ibm44x.h | ||
3 | * | ||
4 | * PPC44x definitions | ||
5 | * | ||
6 | * Matt Porter <mporter@kernel.crashing.org> | ||
7 | * | ||
8 | * Copyright 2002-2005 MontaVista Software Inc. | ||
9 | * | ||
10 | * 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 | ||
12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
13 | * option) any later version. | ||
14 | */ | ||
15 | |||
16 | #ifdef __KERNEL__ | ||
17 | #ifndef __ASM_IBM44x_H__ | ||
18 | #define __ASM_IBM44x_H__ | ||
19 | |||
20 | |||
21 | #ifndef NR_BOARD_IRQS | ||
22 | #define NR_BOARD_IRQS 0 | ||
23 | #endif | ||
24 | |||
25 | #define _IO_BASE isa_io_base | ||
26 | #define _ISA_MEM_BASE isa_mem_base | ||
27 | #define PCI_DRAM_OFFSET pci_dram_offset | ||
28 | |||
29 | /* TLB entry offset/size used for pinning kernel lowmem */ | ||
30 | #define PPC44x_PIN_SHIFT 28 | ||
31 | #define PPC_PIN_SIZE (1 << PPC44x_PIN_SHIFT) | ||
32 | |||
33 | /* Lowest TLB slot consumed by the default pinned TLBs */ | ||
34 | #define PPC44x_LOW_SLOT 63 | ||
35 | |||
36 | /* | ||
37 | * Least significant 32-bits and extended real page number (ERPN) of | ||
38 | * UART0 physical address location for early serial text debug | ||
39 | */ | ||
40 | #if defined(CONFIG_440SP) | ||
41 | #define UART0_PHYS_ERPN 1 | ||
42 | #define UART0_PHYS_IO_BASE 0xf0000200 | ||
43 | #elif defined(CONFIG_440SPE) | ||
44 | #define UART0_PHYS_ERPN 4 | ||
45 | #define UART0_PHYS_IO_BASE 0xf0000200 | ||
46 | #elif defined(CONFIG_440EP) | ||
47 | #define UART0_PHYS_IO_BASE 0xe0000000 | ||
48 | #else | ||
49 | #define UART0_PHYS_ERPN 1 | ||
50 | #define UART0_PHYS_IO_BASE 0x40000200 | ||
51 | #endif | ||
52 | |||
53 | /* | ||
54 | * XXX This 36-bit trap stuff will move somewhere in syslib/ | ||
55 | * when we rework/abstract the PPC44x PCI-X handling -mdp | ||
56 | */ | ||
57 | |||
58 | /* | ||
59 | * Standard 4GB "page" definitions | ||
60 | */ | ||
61 | #if defined(CONFIG_440SP) | ||
62 | #define PPC44x_IO_PAGE 0x0000000100000000ULL | ||
63 | #define PPC44x_PCICFG_PAGE 0x0000000900000000ULL | ||
64 | #define PPC44x_PCIIO_PAGE PPC44x_PCICFG_PAGE | ||
65 | #define PPC44x_PCIMEM_PAGE 0x0000000a00000000ULL | ||
66 | #elif defined(CONFIG_440SPE) | ||
67 | #define PPC44x_IO_PAGE 0x0000000400000000ULL | ||
68 | #define PPC44x_PCICFG_PAGE 0x0000000c00000000ULL | ||
69 | #define PPC44x_PCIIO_PAGE PPC44x_PCICFG_PAGE | ||
70 | #define PPC44x_PCIMEM_PAGE 0x0000000d00000000ULL | ||
71 | #elif defined(CONFIG_440EP) | ||
72 | #define PPC44x_IO_PAGE 0x0000000000000000ULL | ||
73 | #define PPC44x_PCICFG_PAGE 0x0000000000000000ULL | ||
74 | #define PPC44x_PCIIO_PAGE PPC44x_PCICFG_PAGE | ||
75 | #define PPC44x_PCIMEM_PAGE 0x0000000000000000ULL | ||
76 | #else | ||
77 | #define PPC44x_IO_PAGE 0x0000000100000000ULL | ||
78 | #define PPC44x_PCICFG_PAGE 0x0000000200000000ULL | ||
79 | #define PPC44x_PCIIO_PAGE PPC44x_PCICFG_PAGE | ||
80 | #define PPC44x_PCIMEM_PAGE 0x0000000300000000ULL | ||
81 | #endif | ||
82 | |||
83 | /* | ||
84 | * 36-bit trap ranges | ||
85 | */ | ||
86 | #if defined(CONFIG_440SP) || defined(CONFIG_440SPE) | ||
87 | #define PPC44x_IO_LO 0xf0000000UL | ||
88 | #define PPC44x_IO_HI 0xf0000fffUL | ||
89 | #define PPC44x_PCI0CFG_LO 0x0ec00000UL | ||
90 | #define PPC44x_PCI0CFG_HI 0x0ec00007UL | ||
91 | #define PPC44x_PCI1CFG_LO 0x1ec00000UL | ||
92 | #define PPC44x_PCI1CFG_HI 0x1ec00007UL | ||
93 | #define PPC44x_PCI2CFG_LO 0x2ec00000UL | ||
94 | #define PPC44x_PCI2CFG_HI 0x2ec00007UL | ||
95 | #define PPC44x_PCIMEM_LO 0x80000000UL | ||
96 | #define PPC44x_PCIMEM_HI 0xdfffffffUL | ||
97 | #elif defined(CONFIG_440EP) | ||
98 | #define PPC44x_IO_LO 0xef500000UL | ||
99 | #define PPC44x_IO_HI 0xefffffffUL | ||
100 | #define PPC44x_PCI0CFG_LO 0xeec00000UL | ||
101 | #define PPC44x_PCI0CFG_HI 0xeecfffffUL | ||
102 | #define PPC44x_PCIMEM_LO 0xa0000000UL | ||
103 | #define PPC44x_PCIMEM_HI 0xdfffffffUL | ||
104 | #else | ||
105 | #define PPC44x_IO_LO 0x40000000UL | ||
106 | #define PPC44x_IO_HI 0x40000fffUL | ||
107 | #define PPC44x_PCI0CFG_LO 0x0ec00000UL | ||
108 | #define PPC44x_PCI0CFG_HI 0x0ec00007UL | ||
109 | #define PPC44x_PCIMEM_LO 0x80002000UL | ||
110 | #define PPC44x_PCIMEM_HI 0xffffffffUL | ||
111 | #endif | ||
112 | |||
113 | /* | ||
114 | * The "residual" board information structure the boot loader passes | ||
115 | * into the kernel. | ||
116 | */ | ||
117 | #ifndef __ASSEMBLY__ | ||
118 | |||
119 | /* | ||
120 | * DCRN definitions | ||
121 | */ | ||
122 | |||
123 | |||
124 | /* CPRs (440GX and 440SP/440SPe) */ | ||
125 | #define DCRN_CPR_CONFIG_ADDR 0xc | ||
126 | #define DCRN_CPR_CONFIG_DATA 0xd | ||
127 | |||
128 | #define DCRN_CPR_CLKUPD 0x0020 | ||
129 | #define DCRN_CPR_PLLC 0x0040 | ||
130 | #define DCRN_CPR_PLLD 0x0060 | ||
131 | #define DCRN_CPR_PRIMAD 0x0080 | ||
132 | #define DCRN_CPR_PRIMBD 0x00a0 | ||
133 | #define DCRN_CPR_OPBD 0x00c0 | ||
134 | #define DCRN_CPR_PERD 0x00e0 | ||
135 | #define DCRN_CPR_MALD 0x0100 | ||
136 | |||
137 | /* CPRs read/write helper macros */ | ||
138 | #define CPR_READ(offset) ({\ | ||
139 | mtdcr(DCRN_CPR_CONFIG_ADDR, offset); \ | ||
140 | mfdcr(DCRN_CPR_CONFIG_DATA);}) | ||
141 | #define CPR_WRITE(offset, data) ({\ | ||
142 | mtdcr(DCRN_CPR_CONFIG_ADDR, offset); \ | ||
143 | mtdcr(DCRN_CPR_CONFIG_DATA, data);}) | ||
144 | |||
145 | /* SDRs (440GX and 440SP/440SPe) */ | ||
146 | #define DCRN_SDR_CONFIG_ADDR 0xe | ||
147 | #define DCRN_SDR_CONFIG_DATA 0xf | ||
148 | #define DCRN_SDR_PFC0 0x4100 | ||
149 | #define DCRN_SDR_PFC1 0x4101 | ||
150 | #define DCRN_SDR_PFC1_EPS 0x1c00000 | ||
151 | #define DCRN_SDR_PFC1_EPS_SHIFT 22 | ||
152 | #define DCRN_SDR_PFC1_RMII 0x02000000 | ||
153 | #define DCRN_SDR_MFR 0x4300 | ||
154 | #define DCRN_SDR_MFR_TAH0 0x80000000 /* TAHOE0 Enable */ | ||
155 | #define DCRN_SDR_MFR_TAH1 0x40000000 /* TAHOE1 Enable */ | ||
156 | #define DCRN_SDR_MFR_PCM 0x10000000 /* PPC440GP irq compat mode */ | ||
157 | #define DCRN_SDR_MFR_ECS 0x08000000 /* EMAC int clk */ | ||
158 | #define DCRN_SDR_MFR_T0TXFL 0x00080000 | ||
159 | #define DCRN_SDR_MFR_T0TXFH 0x00040000 | ||
160 | #define DCRN_SDR_MFR_T1TXFL 0x00020000 | ||
161 | #define DCRN_SDR_MFR_T1TXFH 0x00010000 | ||
162 | #define DCRN_SDR_MFR_E0TXFL 0x00008000 | ||
163 | #define DCRN_SDR_MFR_E0TXFH 0x00004000 | ||
164 | #define DCRN_SDR_MFR_E0RXFL 0x00002000 | ||
165 | #define DCRN_SDR_MFR_E0RXFH 0x00001000 | ||
166 | #define DCRN_SDR_MFR_E1TXFL 0x00000800 | ||
167 | #define DCRN_SDR_MFR_E1TXFH 0x00000400 | ||
168 | #define DCRN_SDR_MFR_E1RXFL 0x00000200 | ||
169 | #define DCRN_SDR_MFR_E1RXFH 0x00000100 | ||
170 | #define DCRN_SDR_MFR_E2TXFL 0x00000080 | ||
171 | #define DCRN_SDR_MFR_E2TXFH 0x00000040 | ||
172 | #define DCRN_SDR_MFR_E2RXFL 0x00000020 | ||
173 | #define DCRN_SDR_MFR_E2RXFH 0x00000010 | ||
174 | #define DCRN_SDR_MFR_E3TXFL 0x00000008 | ||
175 | #define DCRN_SDR_MFR_E3TXFH 0x00000004 | ||
176 | #define DCRN_SDR_MFR_E3RXFL 0x00000002 | ||
177 | #define DCRN_SDR_MFR_E3RXFH 0x00000001 | ||
178 | #define DCRN_SDR_UART0 0x0120 | ||
179 | #define DCRN_SDR_UART1 0x0121 | ||
180 | |||
181 | #ifdef CONFIG_440EP | ||
182 | #define DCRN_SDR_UART2 0x0122 | ||
183 | #define DCRN_SDR_UART3 0x0123 | ||
184 | #define DCRN_SDR_CUST0 0x4000 | ||
185 | #endif | ||
186 | |||
187 | /* SDR read/write helper macros */ | ||
188 | #define SDR_READ(offset) ({\ | ||
189 | mtdcr(DCRN_SDR_CONFIG_ADDR, offset); \ | ||
190 | mfdcr(DCRN_SDR_CONFIG_DATA);}) | ||
191 | #define SDR_WRITE(offset, data) ({\ | ||
192 | mtdcr(DCRN_SDR_CONFIG_ADDR, offset); \ | ||
193 | mtdcr(DCRN_SDR_CONFIG_DATA,data);}) | ||
194 | |||
195 | /* DMA (excluding 440SP/440SPe) */ | ||
196 | #define DCRN_DMA0_BASE 0x100 | ||
197 | #define DCRN_DMA1_BASE 0x108 | ||
198 | #define DCRN_DMA2_BASE 0x110 | ||
199 | #define DCRN_DMA3_BASE 0x118 | ||
200 | #define DCRN_DMASR_BASE 0x120 | ||
201 | #define DCRNCAP_DMA_SG 1 /* have DMA scatter/gather capability */ | ||
202 | #define DCRN_MAL_BASE 0x180 | ||
203 | |||
204 | #ifdef CONFIG_440EP | ||
205 | #define DCRN_DMA2P40_BASE 0x300 | ||
206 | #define DCRN_DMA2P41_BASE 0x308 | ||
207 | #define DCRN_DMA2P42_BASE 0x310 | ||
208 | #define DCRN_DMA2P43_BASE 0x318 | ||
209 | #define DCRN_DMA2P4SR_BASE 0x320 | ||
210 | #endif | ||
211 | |||
212 | /* UIC */ | ||
213 | #define DCRN_UIC0_BASE 0xc0 | ||
214 | #define DCRN_UIC1_BASE 0xd0 | ||
215 | #define UIC0 DCRN_UIC0_BASE | ||
216 | #define UIC1 DCRN_UIC1_BASE | ||
217 | |||
218 | #ifdef CONFIG_440SPE | ||
219 | #define DCRN_UIC2_BASE 0xe0 | ||
220 | #define DCRN_UIC3_BASE 0xf0 | ||
221 | #define UIC2 DCRN_UIC2_BASE | ||
222 | #define UIC3 DCRN_UIC3_BASE | ||
223 | #else | ||
224 | #define DCRN_UIC2_BASE 0x210 | ||
225 | #define DCRN_UICB_BASE 0x200 | ||
226 | #define UIC2 DCRN_UIC2_BASE | ||
227 | #define UICB DCRN_UICB_BASE | ||
228 | #endif | ||
229 | |||
230 | #define DCRN_UIC_SR(base) (base + 0x0) | ||
231 | #define DCRN_UIC_ER(base) (base + 0x2) | ||
232 | #define DCRN_UIC_CR(base) (base + 0x3) | ||
233 | #define DCRN_UIC_PR(base) (base + 0x4) | ||
234 | #define DCRN_UIC_TR(base) (base + 0x5) | ||
235 | #define DCRN_UIC_MSR(base) (base + 0x6) | ||
236 | #define DCRN_UIC_VR(base) (base + 0x7) | ||
237 | #define DCRN_UIC_VCR(base) (base + 0x8) | ||
238 | |||
239 | #define UIC0_UIC1NC 0x00000002 | ||
240 | |||
241 | #ifdef CONFIG_440SPE | ||
242 | #define UIC0_UIC1NC 0x00000002 | ||
243 | #define UIC0_UIC2NC 0x00200000 | ||
244 | #define UIC0_UIC3NC 0x00008000 | ||
245 | #endif | ||
246 | |||
247 | #define UICB_UIC0NC 0x40000000 | ||
248 | #define UICB_UIC1NC 0x10000000 | ||
249 | #define UICB_UIC2NC 0x04000000 | ||
250 | |||
251 | /* 440 MAL DCRs */ | ||
252 | #define DCRN_MALCR(base) (base + 0x0) /* Configuration */ | ||
253 | #define DCRN_MALESR(base) (base + 0x1) /* Error Status */ | ||
254 | #define DCRN_MALIER(base) (base + 0x2) /* Interrupt Enable */ | ||
255 | #define DCRN_MALTXCASR(base) (base + 0x4) /* Tx Channel Active Set */ | ||
256 | #define DCRN_MALTXCARR(base) (base + 0x5) /* Tx Channel Active Reset */ | ||
257 | #define DCRN_MALTXEOBISR(base) (base + 0x6) /* Tx End of Buffer Interrupt Status */ | ||
258 | #define DCRN_MALTXDEIR(base) (base + 0x7) /* Tx Descriptor Error Interrupt */ | ||
259 | #define DCRN_MALRXCASR(base) (base + 0x10) /* Rx Channel Active Set */ | ||
260 | #define DCRN_MALRXCARR(base) (base + 0x11) /* Rx Channel Active Reset */ | ||
261 | #define DCRN_MALRXEOBISR(base) (base + 0x12) /* Rx End of Buffer Interrupt Status */ | ||
262 | #define DCRN_MALRXDEIR(base) (base + 0x13) /* Rx Descriptor Error Interrupt */ | ||
263 | #define DCRN_MALTXCTP0R(base) (base + 0x20) /* Channel Tx 0 Channel Table Pointer */ | ||
264 | #define DCRN_MALTXCTP1R(base) (base + 0x21) /* Channel Tx 1 Channel Table Pointer */ | ||
265 | #define DCRN_MALTXCTP2R(base) (base + 0x22) /* Channel Tx 2 Channel Table Pointer */ | ||
266 | #define DCRN_MALTXCTP3R(base) (base + 0x23) /* Channel Tx 3 Channel Table Pointer */ | ||
267 | #define DCRN_MALRXCTP0R(base) (base + 0x40) /* Channel Rx 0 Channel Table Pointer */ | ||
268 | #define DCRN_MALRXCTP1R(base) (base + 0x41) /* Channel Rx 1 Channel Table Pointer */ | ||
269 | #define DCRN_MALRCBS0(base) (base + 0x60) /* Channel Rx 0 Channel Buffer Size */ | ||
270 | #define DCRN_MALRCBS1(base) (base + 0x61) /* Channel Rx 1 Channel Buffer Size */ | ||
271 | |||
272 | /* Compatibility DCRN's */ | ||
273 | #define DCRN_MALRXCTP2R(base) ((base) + 0x42) /* Channel Rx 2 Channel Table Pointer */ | ||
274 | #define DCRN_MALRXCTP3R(base) ((base) + 0x43) /* Channel Rx 3 Channel Table Pointer */ | ||
275 | #define DCRN_MALTXCTP4R(base) ((base) + 0x24) /* Channel Tx 4 Channel Table Pointer */ | ||
276 | #define DCRN_MALTXCTP5R(base) ((base) + 0x25) /* Channel Tx 5 Channel Table Pointer */ | ||
277 | #define DCRN_MALTXCTP6R(base) ((base) + 0x26) /* Channel Tx 6 Channel Table Pointer */ | ||
278 | #define DCRN_MALTXCTP7R(base) ((base) + 0x27) /* Channel Tx 7 Channel Table Pointer */ | ||
279 | #define DCRN_MALRCBS2(base) ((base) + 0x62) /* Channel Rx 2 Channel Buffer Size */ | ||
280 | #define DCRN_MALRCBS3(base) ((base) + 0x63) /* Channel Rx 3 Channel Buffer Size */ | ||
281 | |||
282 | #define MALCR_MMSR 0x80000000 /* MAL Software reset */ | ||
283 | #define MALCR_PLBP_1 0x00400000 /* MAL reqest priority: */ | ||
284 | #define MALCR_PLBP_2 0x00800000 /* lowsest is 00 */ | ||
285 | #define MALCR_PLBP_3 0x00C00000 /* highest */ | ||
286 | #define MALCR_GA 0x00200000 /* Guarded Active Bit */ | ||
287 | #define MALCR_OA 0x00100000 /* Ordered Active Bit */ | ||
288 | #define MALCR_PLBLE 0x00080000 /* PLB Lock Error Bit */ | ||
289 | #define MALCR_PLBLT_1 0x00040000 /* PLB Latency Timer */ | ||
290 | #define MALCR_PLBLT_2 0x00020000 | ||
291 | #define MALCR_PLBLT_3 0x00010000 | ||
292 | #define MALCR_PLBLT_4 0x00008000 | ||
293 | #ifdef CONFIG_440GP | ||
294 | #define MALCR_PLBLT_DEFAULT 0x00330000 /* PLB Latency Timer default */ | ||
295 | #else | ||
296 | #define MALCR_PLBLT_DEFAULT 0x00ff0000 /* PLB Latency Timer default */ | ||
297 | #endif | ||
298 | #define MALCR_PLBB 0x00004000 /* PLB Burst Deactivation Bit */ | ||
299 | #define MALCR_OPBBL 0x00000080 /* OPB Lock Bit */ | ||
300 | #define MALCR_EOPIE 0x00000004 /* End Of Packet Interrupt Enable */ | ||
301 | #define MALCR_LEA 0x00000002 /* Locked Error Active */ | ||
302 | #define MALCR_MSD 0x00000001 /* MAL Scroll Descriptor Bit */ | ||
303 | /* DCRN_MALESR */ | ||
304 | #define MALESR_EVB 0x80000000 /* Error Valid Bit */ | ||
305 | #define MALESR_CIDRX 0x40000000 /* Channel ID Receive */ | ||
306 | #define MALESR_DE 0x00100000 /* Descriptor Error */ | ||
307 | #define MALESR_OEN 0x00080000 /* OPB Non-Fullword Error */ | ||
308 | #define MALESR_OTE 0x00040000 /* OPB Timeout Error */ | ||
309 | #define MALESR_OSE 0x00020000 /* OPB Slave Error */ | ||
310 | #define MALESR_PEIN 0x00010000 /* PLB Bus Error Indication */ | ||
311 | #define MALESR_DEI 0x00000010 /* Descriptor Error Interrupt */ | ||
312 | #define MALESR_ONEI 0x00000008 /* OPB Non-Fullword Error Interrupt */ | ||
313 | #define MALESR_OTEI 0x00000004 /* OPB Timeout Error Interrupt */ | ||
314 | #define MALESR_OSEI 0x00000002 /* OPB Slace Error Interrupt */ | ||
315 | #define MALESR_PBEI 0x00000001 /* PLB Bus Error Interrupt */ | ||
316 | /* DCRN_MALIER */ | ||
317 | #define MALIER_DE 0x00000010 /* Descriptor Error Interrupt Enable */ | ||
318 | #define MALIER_NE 0x00000008 /* OPB Non-word Transfer Int Enable */ | ||
319 | #define MALIER_TE 0x00000004 /* OPB Time Out Error Interrupt Enable */ | ||
320 | #define MALIER_OPBE 0x00000002 /* OPB Slave Error Interrupt Enable */ | ||
321 | #define MALIER_PLBE 0x00000001 /* PLB Error Interrupt Enable */ | ||
322 | /* DCRN_MALTXEOBISR */ | ||
323 | #define MALOBISR_CH0 0x80000000 /* EOB channel 1 bit */ | ||
324 | #define MALOBISR_CH2 0x40000000 /* EOB channel 2 bit */ | ||
325 | |||
326 | #if defined(CONFIG_440SP) || defined(CONFIG_440SPE) | ||
327 | /* 440SP/440SPe PLB Arbiter DCRs */ | ||
328 | #define DCRN_PLB_REVID 0x080 /* PLB Revision ID */ | ||
329 | #define DCRN_PLB_CCR 0x088 /* PLB Crossbar Control */ | ||
330 | |||
331 | #define DCRN_PLB0_ACR 0x081 /* PLB Arbiter Control */ | ||
332 | #define DCRN_PLB0_BESRL 0x082 /* PLB Error Status */ | ||
333 | #define DCRN_PLB0_BESRH 0x083 /* PLB Error Status */ | ||
334 | #define DCRN_PLB0_BEARL 0x084 /* PLB Error Address Low */ | ||
335 | #define DCRN_PLB0_BEARH 0x085 /* PLB Error Address High */ | ||
336 | |||
337 | #define DCRN_PLB1_ACR 0x089 /* PLB Arbiter Control */ | ||
338 | #define DCRN_PLB1_BESRL 0x08a /* PLB Error Status */ | ||
339 | #define DCRN_PLB1_BESRH 0x08b /* PLB Error Status */ | ||
340 | #define DCRN_PLB1_BEARL 0x08c /* PLB Error Address Low */ | ||
341 | #define DCRN_PLB1_BEARH 0x08d /* PLB Error Address High */ | ||
342 | #else | ||
343 | /* 440GP/GX PLB Arbiter DCRs */ | ||
344 | #define DCRN_PLB0_REVID 0x082 /* PLB Arbiter Revision ID */ | ||
345 | #define DCRN_PLB0_ACR 0x083 /* PLB Arbiter Control */ | ||
346 | #define DCRN_PLB0_BESR 0x084 /* PLB Error Status */ | ||
347 | #define DCRN_PLB0_BEARL 0x086 /* PLB Error Address Low */ | ||
348 | #define DCRN_PLB0_BEAR DCRN_PLB0_BEARL /* 40x compatibility */ | ||
349 | #define DCRN_PLB0_BEARH 0x087 /* PLB Error Address High */ | ||
350 | #endif | ||
351 | |||
352 | /* 440GP/GX PLB to OPB bridge DCRs */ | ||
353 | #define DCRN_POB0_BESR0 0x090 | ||
354 | #define DCRN_POB0_BESR1 0x094 | ||
355 | #define DCRN_POB0_BEARL 0x092 | ||
356 | #define DCRN_POB0_BEARH 0x093 | ||
357 | |||
358 | /* 440GP/GX OPB to PLB bridge DCRs */ | ||
359 | #define DCRN_OPB0_BSTAT 0x0a9 | ||
360 | #define DCRN_OPB0_BEARL 0x0aa | ||
361 | #define DCRN_OPB0_BEARH 0x0ab | ||
362 | |||
363 | /* 440GP Clock, PM, chip control */ | ||
364 | #define DCRN_CPC0_SR 0x0b0 | ||
365 | #define DCRN_CPC0_ER 0x0b1 | ||
366 | #define DCRN_CPC0_FR 0x0b2 | ||
367 | #define DCRN_CPC0_SYS0 0x0e0 | ||
368 | #define DCRN_CPC0_SYS1 0x0e1 | ||
369 | #define DCRN_CPC0_CUST0 0x0e2 | ||
370 | #define DCRN_CPC0_CUST1 0x0e3 | ||
371 | #define DCRN_CPC0_STRP0 0x0e4 | ||
372 | #define DCRN_CPC0_STRP1 0x0e5 | ||
373 | #define DCRN_CPC0_STRP2 0x0e6 | ||
374 | #define DCRN_CPC0_STRP3 0x0e7 | ||
375 | #define DCRN_CPC0_GPIO 0x0e8 | ||
376 | #define DCRN_CPC0_PLB 0x0e9 | ||
377 | #define DCRN_CPC0_CR1 0x0ea | ||
378 | #define DCRN_CPC0_CR0 0x0eb | ||
379 | #define DCRN_CPC0_MIRQ0 0x0ec | ||
380 | #define DCRN_CPC0_MIRQ1 0x0ed | ||
381 | #define DCRN_CPC0_JTAGID 0x0ef | ||
382 | |||
383 | /* 440GP DMA controller DCRs */ | ||
384 | #define DCRN_DMACR0 (DCRN_DMA0_BASE + 0x0) /* DMA Channel Control 0 */ | ||
385 | #define DCRN_DMACT0 (DCRN_DMA0_BASE + 0x1) /* DMA Count 0 */ | ||
386 | #define DCRN_DMASAH0 (DCRN_DMA0_BASE + 0x2) /* DMA Src Addr High 0 */ | ||
387 | #define DCRN_DMASA0 (DCRN_DMA0_BASE + 0x3) /* DMA Src Addr Low 0 */ | ||
388 | #define DCRN_DMADAH0 (DCRN_DMA0_BASE + 0x4) /* DMA Dest Addr High 0 */ | ||
389 | #define DCRN_DMADA0 (DCRN_DMA0_BASE + 0x5) /* DMA Dest Addr Low 0 */ | ||
390 | #define DCRN_ASGH0 (DCRN_DMA0_BASE + 0x6) /* DMA SG Desc Addr High 0 */ | ||
391 | #define DCRN_ASG0 (DCRN_DMA0_BASE + 0x7) /* DMA SG Desc Addr Low 0 */ | ||
392 | |||
393 | #define DCRN_DMACR1 (DCRN_DMA1_BASE + 0x0) /* DMA Channel Control 1 */ | ||
394 | #define DCRN_DMACT1 (DCRN_DMA1_BASE + 0x1) /* DMA Count 1 */ | ||
395 | #define DCRN_DMASAH1 (DCRN_DMA1_BASE + 0x2) /* DMA Src Addr High 1 */ | ||
396 | #define DCRN_DMASA1 (DCRN_DMA1_BASE + 0x3) /* DMA Src Addr Low 1 */ | ||
397 | #define DCRN_DMADAH1 (DCRN_DMA1_BASE + 0x4) /* DMA Dest Addr High 1 */ | ||
398 | #define DCRN_DMADA1 (DCRN_DMA1_BASE + 0x5) /* DMA Dest Addr Low 1 */ | ||
399 | #define DCRN_ASGH1 (DCRN_DMA1_BASE + 0x6) /* DMA SG Desc Addr High 1 */ | ||
400 | #define DCRN_ASG1 (DCRN_DMA1_BASE + 0x7) /* DMA SG Desc Addr Low 1 */ | ||
401 | |||
402 | #define DCRN_DMACR2 (DCRN_DMA2_BASE + 0x0) /* DMA Channel Control 2 */ | ||
403 | #define DCRN_DMACT2 (DCRN_DMA2_BASE + 0x1) /* DMA Count 2 */ | ||
404 | #define DCRN_DMASAH2 (DCRN_DMA2_BASE + 0x2) /* DMA Src Addr High 2 */ | ||
405 | #define DCRN_DMASA2 (DCRN_DMA2_BASE + 0x3) /* DMA Src Addr Low 2 */ | ||
406 | #define DCRN_DMADAH2 (DCRN_DMA2_BASE + 0x4) /* DMA Dest Addr High 2 */ | ||
407 | #define DCRN_DMADA2 (DCRN_DMA2_BASE + 0x5) /* DMA Dest Addr Low 2 */ | ||
408 | #define DCRN_ASGH2 (DCRN_DMA2_BASE + 0x6) /* DMA SG Desc Addr High 2 */ | ||
409 | #define DCRN_ASG2 (DCRN_DMA2_BASE + 0x7) /* DMA SG Desc Addr Low 2 */ | ||
410 | |||
411 | #define DCRN_DMACR3 (DCRN_DMA3_BASE + 0x0) /* DMA Channel Control 3 */ | ||
412 | #define DCRN_DMACT3 (DCRN_DMA3_BASE + 0x1) /* DMA Count 3 */ | ||
413 | #define DCRN_DMASAH3 (DCRN_DMA3_BASE + 0x2) /* DMA Src Addr High 3 */ | ||
414 | #define DCRN_DMASA3 (DCRN_DMA3_BASE + 0x3) /* DMA Src Addr Low 3 */ | ||
415 | #define DCRN_DMADAH3 (DCRN_DMA3_BASE + 0x4) /* DMA Dest Addr High 3 */ | ||
416 | #define DCRN_DMADA3 (DCRN_DMA3_BASE + 0x5) /* DMA Dest Addr Low 3 */ | ||
417 | #define DCRN_ASGH3 (DCRN_DMA3_BASE + 0x6) /* DMA SG Desc Addr High 3 */ | ||
418 | #define DCRN_ASG3 (DCRN_DMA3_BASE + 0x7) /* DMA SG Desc Addr Low 3 */ | ||
419 | |||
420 | #define DCRN_DMASR (DCRN_DMASR_BASE + 0x0) /* DMA Status Register */ | ||
421 | #define DCRN_ASGC (DCRN_DMASR_BASE + 0x3) /* DMA Scatter/Gather Command */ | ||
422 | #define DCRN_SLP (DCRN_DMASR_BASE + 0x5) /* DMA Sleep Register */ | ||
423 | #define DCRN_POL (DCRN_DMASR_BASE + 0x6) /* DMA Polarity Register */ | ||
424 | |||
425 | /* 440GP/440GX SDRAM controller DCRs */ | ||
426 | #define DCRN_SDRAM0_CFGADDR 0x010 | ||
427 | #define DCRN_SDRAM0_CFGDATA 0x011 | ||
428 | |||
429 | #define SDRAM0_B0CR 0x40 | ||
430 | #define SDRAM0_B1CR 0x44 | ||
431 | #define SDRAM0_B2CR 0x48 | ||
432 | #define SDRAM0_B3CR 0x4c | ||
433 | |||
434 | #define SDRAM_CONFIG_BANK_ENABLE 0x00000001 | ||
435 | #define SDRAM_CONFIG_SIZE_MASK 0x000e0000 | ||
436 | #define SDRAM_CONFIG_BANK_SIZE(reg) ((reg & SDRAM_CONFIG_SIZE_MASK) >> 17) | ||
437 | #define SDRAM_CONFIG_SIZE_8M 0x00000001 | ||
438 | #define SDRAM_CONFIG_SIZE_16M 0x00000002 | ||
439 | #define SDRAM_CONFIG_SIZE_32M 0x00000003 | ||
440 | #define SDRAM_CONFIG_SIZE_64M 0x00000004 | ||
441 | #define SDRAM_CONFIG_SIZE_128M 0x00000005 | ||
442 | #define SDRAM_CONFIG_SIZE_256M 0x00000006 | ||
443 | #define SDRAM_CONFIG_SIZE_512M 0x00000007 | ||
444 | #define PPC44x_MEM_SIZE_8M 0x00800000 | ||
445 | #define PPC44x_MEM_SIZE_16M 0x01000000 | ||
446 | #define PPC44x_MEM_SIZE_32M 0x02000000 | ||
447 | #define PPC44x_MEM_SIZE_64M 0x04000000 | ||
448 | #define PPC44x_MEM_SIZE_128M 0x08000000 | ||
449 | #define PPC44x_MEM_SIZE_256M 0x10000000 | ||
450 | #define PPC44x_MEM_SIZE_512M 0x20000000 | ||
451 | #define PPC44x_MEM_SIZE_1G 0x40000000 | ||
452 | #define PPC44x_MEM_SIZE_2G 0x80000000 | ||
453 | |||
454 | /* 440SP/440SPe memory controller DCRs */ | ||
455 | #define DCRN_MQ0_BS0BAS 0x40 | ||
456 | #if defined(CONFIG_440SP) | ||
457 | #define MQ0_NUM_BANKS 2 | ||
458 | #elif defined(CONFIG_440SPE) | ||
459 | #define MQ0_NUM_BANKS 4 | ||
460 | #endif | ||
461 | |||
462 | #define MQ0_CONFIG_SIZE_MASK 0x0000fff0 | ||
463 | #define MQ0_CONFIG_SIZE_8M 0x0000ffc0 | ||
464 | #define MQ0_CONFIG_SIZE_16M 0x0000ff80 | ||
465 | #define MQ0_CONFIG_SIZE_32M 0x0000ff00 | ||
466 | #define MQ0_CONFIG_SIZE_64M 0x0000fe00 | ||
467 | #define MQ0_CONFIG_SIZE_128M 0x0000fc00 | ||
468 | #define MQ0_CONFIG_SIZE_256M 0x0000f800 | ||
469 | #define MQ0_CONFIG_SIZE_512M 0x0000f000 | ||
470 | #define MQ0_CONFIG_SIZE_1G 0x0000e000 | ||
471 | #define MQ0_CONFIG_SIZE_2G 0x0000c000 | ||
472 | #define MQ0_CONFIG_SIZE_4G 0x00008000 | ||
473 | |||
474 | /* Internal SRAM Controller 440GX/440SP/440SPe */ | ||
475 | #define DCRN_SRAM0_BASE 0x000 | ||
476 | |||
477 | #define DCRN_SRAM0_SB0CR (DCRN_SRAM0_BASE + 0x020) | ||
478 | #define DCRN_SRAM0_SB1CR (DCRN_SRAM0_BASE + 0x021) | ||
479 | #define DCRN_SRAM0_SB2CR (DCRN_SRAM0_BASE + 0x022) | ||
480 | #define DCRN_SRAM0_SB3CR (DCRN_SRAM0_BASE + 0x023) | ||
481 | #define SRAM_SBCR_BAS0 0x80000000 | ||
482 | #define SRAM_SBCR_BAS1 0x80010000 | ||
483 | #define SRAM_SBCR_BAS2 0x80020000 | ||
484 | #define SRAM_SBCR_BAS3 0x80030000 | ||
485 | #define SRAM_SBCR_BU_MASK 0x00000180 | ||
486 | #define SRAM_SBCR_BS_64KB 0x00000800 | ||
487 | #define SRAM_SBCR_BU_RO 0x00000080 | ||
488 | #define SRAM_SBCR_BU_RW 0x00000180 | ||
489 | #define DCRN_SRAM0_BEAR (DCRN_SRAM0_BASE + 0x024) | ||
490 | #define DCRN_SRAM0_BESR0 (DCRN_SRAM0_BASE + 0x025) | ||
491 | #define DCRN_SRAM0_BESR1 (DCRN_SRAM0_BASE + 0x026) | ||
492 | #define DCRN_SRAM0_PMEG (DCRN_SRAM0_BASE + 0x027) | ||
493 | #define DCRN_SRAM0_CID (DCRN_SRAM0_BASE + 0x028) | ||
494 | #define DCRN_SRAM0_REVID (DCRN_SRAM0_BASE + 0x029) | ||
495 | #define DCRN_SRAM0_DPC (DCRN_SRAM0_BASE + 0x02a) | ||
496 | #define SRAM_DPC_ENABLE 0x80000000 | ||
497 | |||
498 | /* L2 Cache Controller 440GX/440SP/440SPe */ | ||
499 | #define DCRN_L2C0_CFG 0x030 | ||
500 | #define L2C_CFG_L2M 0x80000000 | ||
501 | #define L2C_CFG_ICU 0x40000000 | ||
502 | #define L2C_CFG_DCU 0x20000000 | ||
503 | #define L2C_CFG_DCW_MASK 0x1e000000 | ||
504 | #define L2C_CFG_TPC 0x01000000 | ||
505 | #define L2C_CFG_CPC 0x00800000 | ||
506 | #define L2C_CFG_FRAN 0x00200000 | ||
507 | #define L2C_CFG_SS_MASK 0x00180000 | ||
508 | #define L2C_CFG_SS_256 0x00000000 | ||
509 | #define L2C_CFG_CPIM 0x00040000 | ||
510 | #define L2C_CFG_TPIM 0x00020000 | ||
511 | #define L2C_CFG_LIM 0x00010000 | ||
512 | #define L2C_CFG_PMUX_MASK 0x00007000 | ||
513 | #define L2C_CFG_PMUX_SNP 0x00000000 | ||
514 | #define L2C_CFG_PMUX_IF 0x00001000 | ||
515 | #define L2C_CFG_PMUX_DF 0x00002000 | ||
516 | #define L2C_CFG_PMUX_DS 0x00003000 | ||
517 | #define L2C_CFG_PMIM 0x00000800 | ||
518 | #define L2C_CFG_TPEI 0x00000400 | ||
519 | #define L2C_CFG_CPEI 0x00000200 | ||
520 | #define L2C_CFG_NAM 0x00000100 | ||
521 | #define L2C_CFG_SMCM 0x00000080 | ||
522 | #define L2C_CFG_NBRM 0x00000040 | ||
523 | #define DCRN_L2C0_CMD 0x031 | ||
524 | #define L2C_CMD_CLR 0x80000000 | ||
525 | #define L2C_CMD_DIAG 0x40000000 | ||
526 | #define L2C_CMD_INV 0x20000000 | ||
527 | #define L2C_CMD_CCP 0x10000000 | ||
528 | #define L2C_CMD_CTE 0x08000000 | ||
529 | #define L2C_CMD_STRC 0x04000000 | ||
530 | #define L2C_CMD_STPC 0x02000000 | ||
531 | #define L2C_CMD_RPMC 0x01000000 | ||
532 | #define L2C_CMD_HCC 0x00800000 | ||
533 | #define DCRN_L2C0_ADDR 0x032 | ||
534 | #define DCRN_L2C0_DATA 0x033 | ||
535 | #define DCRN_L2C0_SR 0x034 | ||
536 | #define L2C_SR_CC 0x80000000 | ||
537 | #define L2C_SR_CPE 0x40000000 | ||
538 | #define L2C_SR_TPE 0x20000000 | ||
539 | #define L2C_SR_LRU 0x10000000 | ||
540 | #define L2C_SR_PCS 0x08000000 | ||
541 | #define DCRN_L2C0_REVID 0x035 | ||
542 | #define DCRN_L2C0_SNP0 0x036 | ||
543 | #define DCRN_L2C0_SNP1 0x037 | ||
544 | #define L2C_SNP_BA_MASK 0xffff0000 | ||
545 | #define L2C_SNP_SSR_MASK 0x0000f000 | ||
546 | #define L2C_SNP_SSR_32G 0x0000f000 | ||
547 | #define L2C_SNP_ESR 0x00000800 | ||
548 | |||
549 | /* | ||
550 | * PCI-X definitions | ||
551 | */ | ||
552 | #define PCIX0_CFGA 0x0ec00000UL | ||
553 | #define PCIX1_CFGA 0x1ec00000UL | ||
554 | #define PCIX2_CFGA 0x2ec00000UL | ||
555 | #define PCIX0_CFGD 0x0ec00004UL | ||
556 | #define PCIX1_CFGD 0x1ec00004UL | ||
557 | #define PCIX2_CFGD 0x2ec00004UL | ||
558 | |||
559 | #define PCIX0_IO_BASE 0x0000000908000000ULL | ||
560 | #define PCIX1_IO_BASE 0x0000000908000000ULL | ||
561 | #define PCIX2_IO_BASE 0x0000000908000000ULL | ||
562 | #define PCIX_IO_SIZE 0x00010000 | ||
563 | |||
564 | #ifdef CONFIG_440SP | ||
565 | #define PCIX0_REG_BASE 0x000000090ec80000ULL | ||
566 | #else | ||
567 | #define PCIX0_REG_BASE 0x000000020ec80000ULL | ||
568 | #endif | ||
569 | #define PCIX_REG_OFFSET 0x10000000 | ||
570 | #define PCIX_REG_SIZE 0x200 | ||
571 | |||
572 | #define PCIX0_VENDID 0x000 | ||
573 | #define PCIX0_DEVID 0x002 | ||
574 | #define PCIX0_COMMAND 0x004 | ||
575 | #define PCIX0_STATUS 0x006 | ||
576 | #define PCIX0_REVID 0x008 | ||
577 | #define PCIX0_CLS 0x009 | ||
578 | #define PCIX0_CACHELS 0x00c | ||
579 | #define PCIX0_LATTIM 0x00d | ||
580 | #define PCIX0_HDTYPE 0x00e | ||
581 | #define PCIX0_BIST 0x00f | ||
582 | #define PCIX0_BAR0L 0x010 | ||
583 | #define PCIX0_BAR0H 0x014 | ||
584 | #define PCIX0_BAR1 0x018 | ||
585 | #define PCIX0_BAR2L 0x01c | ||
586 | #define PCIX0_BAR2H 0x020 | ||
587 | #define PCIX0_BAR3 0x024 | ||
588 | #define PCIX0_CISPTR 0x028 | ||
589 | #define PCIX0_SBSYSVID 0x02c | ||
590 | #define PCIX0_SBSYSID 0x02e | ||
591 | #define PCIX0_EROMBA 0x030 | ||
592 | #define PCIX0_CAP 0x034 | ||
593 | #define PCIX0_RES0 0x035 | ||
594 | #define PCIX0_RES1 0x036 | ||
595 | #define PCIX0_RES2 0x038 | ||
596 | #define PCIX0_INTLN 0x03c | ||
597 | #define PCIX0_INTPN 0x03d | ||
598 | #define PCIX0_MINGNT 0x03e | ||
599 | #define PCIX0_MAXLTNCY 0x03f | ||
600 | #define PCIX0_BRDGOPT1 0x040 | ||
601 | #define PCIX0_BRDGOPT2 0x044 | ||
602 | #define PCIX0_ERREN 0x050 | ||
603 | #define PCIX0_ERRSTS 0x054 | ||
604 | #define PCIX0_PLBBESR 0x058 | ||
605 | #define PCIX0_PLBBEARL 0x05c | ||
606 | #define PCIX0_PLBBEARH 0x060 | ||
607 | #define PCIX0_POM0LAL 0x068 | ||
608 | #define PCIX0_POM0LAH 0x06c | ||
609 | #define PCIX0_POM0SA 0x070 | ||
610 | #define PCIX0_POM0PCIAL 0x074 | ||
611 | #define PCIX0_POM0PCIAH 0x078 | ||
612 | #define PCIX0_POM1LAL 0x07c | ||
613 | #define PCIX0_POM1LAH 0x080 | ||
614 | #define PCIX0_POM1SA 0x084 | ||
615 | #define PCIX0_POM1PCIAL 0x088 | ||
616 | #define PCIX0_POM1PCIAH 0x08c | ||
617 | #define PCIX0_POM2SA 0x090 | ||
618 | #define PCIX0_PIM0SAL 0x098 | ||
619 | #define PCIX0_PIM0SA PCIX0_PIM0SAL | ||
620 | #define PCIX0_PIM0LAL 0x09c | ||
621 | #define PCIX0_PIM0LAH 0x0a0 | ||
622 | #define PCIX0_PIM1SA 0x0a4 | ||
623 | #define PCIX0_PIM1LAL 0x0a8 | ||
624 | #define PCIX0_PIM1LAH 0x0ac | ||
625 | #define PCIX0_PIM2SAL 0x0b0 | ||
626 | #define PCIX0_PIM2SA PCIX0_PIM2SAL | ||
627 | #define PCIX0_PIM2LAL 0x0b4 | ||
628 | #define PCIX0_PIM2LAH 0x0b8 | ||
629 | #define PCIX0_OMCAPID 0x0c0 | ||
630 | #define PCIX0_OMNIPTR 0x0c1 | ||
631 | #define PCIX0_OMMC 0x0c2 | ||
632 | #define PCIX0_OMMA 0x0c4 | ||
633 | #define PCIX0_OMMUA 0x0c8 | ||
634 | #define PCIX0_OMMDATA 0x0cc | ||
635 | #define PCIX0_OMMEOI 0x0ce | ||
636 | #define PCIX0_PMCAPID 0x0d0 | ||
637 | #define PCIX0_PMNIPTR 0x0d1 | ||
638 | #define PCIX0_PMC 0x0d2 | ||
639 | #define PCIX0_PMCSR 0x0d4 | ||
640 | #define PCIX0_PMCSRBSE 0x0d6 | ||
641 | #define PCIX0_PMDATA 0x0d7 | ||
642 | #define PCIX0_PMSCRR 0x0d8 | ||
643 | #define PCIX0_CAPID 0x0dc | ||
644 | #define PCIX0_NIPTR 0x0dd | ||
645 | #define PCIX0_CMD 0x0de | ||
646 | #define PCIX0_STS 0x0e0 | ||
647 | #define PCIX0_IDR 0x0e4 | ||
648 | #define PCIX0_CID 0x0e8 | ||
649 | #define PCIX0_RID 0x0ec | ||
650 | #define PCIX0_PIM0SAH 0x0f8 | ||
651 | #define PCIX0_PIM2SAH 0x0fc | ||
652 | #define PCIX0_MSGIL 0x100 | ||
653 | #define PCIX0_MSGIH 0x104 | ||
654 | #define PCIX0_MSGOL 0x108 | ||
655 | #define PCIX0_MSGOH 0x10c | ||
656 | #define PCIX0_IM 0x1f8 | ||
657 | |||
658 | #define IIC_OWN 0x55 | ||
659 | #define IIC_CLOCK 50 | ||
660 | |||
661 | #undef NR_UICS | ||
662 | #if defined(CONFIG_440GX) | ||
663 | #define NR_UICS 3 | ||
664 | #elif defined(CONFIG_440SPE) | ||
665 | #define NR_UICS 4 | ||
666 | #else | ||
667 | #define NR_UICS 2 | ||
668 | #endif | ||
669 | |||
670 | #include <asm/ibm4xx.h> | ||
671 | |||
672 | #endif /* __ASSEMBLY__ */ | ||
673 | #endif /* __ASM_IBM44x_H__ */ | ||
674 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/ibm4xx.h b/include/asm-ppc/ibm4xx.h deleted file mode 100644 index ed6891af05d3..000000000000 --- a/include/asm-ppc/ibm4xx.h +++ /dev/null | |||
@@ -1,124 +0,0 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Copyright (c) 1999 Grant Erickson <grant@lcse.umn.edu> | ||
4 | * | ||
5 | * Module name: ibm4xx.h | ||
6 | * | ||
7 | * Description: | ||
8 | * A generic include file which pulls in appropriate include files | ||
9 | * for specific board types based on configuration settings. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | #ifndef __ASM_IBM4XX_H__ | ||
15 | #define __ASM_IBM4XX_H__ | ||
16 | |||
17 | #include <asm/types.h> | ||
18 | #include <asm/dcr.h> | ||
19 | |||
20 | #ifdef CONFIG_40x | ||
21 | |||
22 | #if defined(CONFIG_BUBINGA) | ||
23 | #include <platforms/4xx/bubinga.h> | ||
24 | #endif | ||
25 | |||
26 | #if defined(CONFIG_CPCI405) | ||
27 | #include <platforms/4xx/cpci405.h> | ||
28 | #endif | ||
29 | |||
30 | #if defined(CONFIG_EP405) | ||
31 | #include <platforms/4xx/ep405.h> | ||
32 | #endif | ||
33 | |||
34 | #if defined(CONFIG_REDWOOD_5) | ||
35 | #include <platforms/4xx/redwood5.h> | ||
36 | #endif | ||
37 | |||
38 | #if defined(CONFIG_REDWOOD_6) | ||
39 | #include <platforms/4xx/redwood6.h> | ||
40 | #endif | ||
41 | |||
42 | #if defined(CONFIG_SYCAMORE) | ||
43 | #include <platforms/4xx/sycamore.h> | ||
44 | #endif | ||
45 | |||
46 | #if defined(CONFIG_WALNUT) | ||
47 | #include <platforms/4xx/walnut.h> | ||
48 | #endif | ||
49 | |||
50 | #if defined(CONFIG_XILINX_VIRTEX) | ||
51 | #include <platforms/4xx/virtex.h> | ||
52 | #endif | ||
53 | |||
54 | #ifndef __ASSEMBLY__ | ||
55 | |||
56 | #ifdef CONFIG_40x | ||
57 | /* | ||
58 | * The "residual" board information structure the boot loader passes | ||
59 | * into the kernel. | ||
60 | */ | ||
61 | extern bd_t __res; | ||
62 | #endif | ||
63 | |||
64 | void ppc4xx_setup_arch(void); | ||
65 | void ppc4xx_map_io(void); | ||
66 | void ppc4xx_init_IRQ(void); | ||
67 | void ppc4xx_init(unsigned long r3, unsigned long r4, unsigned long r5, | ||
68 | unsigned long r6, unsigned long r7); | ||
69 | #endif | ||
70 | |||
71 | #ifndef PPC4xx_MACHINE_NAME | ||
72 | #define PPC4xx_MACHINE_NAME "Unidentified 4xx class" | ||
73 | #endif | ||
74 | |||
75 | |||
76 | /* IO_BASE is for PCI I/O. | ||
77 | * ISA not supported, just here to resolve copilation. | ||
78 | */ | ||
79 | |||
80 | #ifndef _IO_BASE | ||
81 | #define _IO_BASE 0xe8000000 /* The PCI address window */ | ||
82 | #define _ISA_MEM_BASE 0 | ||
83 | #define PCI_DRAM_OFFSET 0 | ||
84 | #endif | ||
85 | |||
86 | #elif defined(CONFIG_44x) | ||
87 | |||
88 | #if defined(CONFIG_BAMBOO) | ||
89 | #include <platforms/4xx/bamboo.h> | ||
90 | #endif | ||
91 | |||
92 | #if defined(CONFIG_EBONY) | ||
93 | #include <platforms/4xx/ebony.h> | ||
94 | #endif | ||
95 | |||
96 | #if defined(CONFIG_LUAN) | ||
97 | #include <platforms/4xx/luan.h> | ||
98 | #endif | ||
99 | |||
100 | #if defined(CONFIG_YUCCA) | ||
101 | #include <platforms/4xx/yucca.h> | ||
102 | #endif | ||
103 | |||
104 | #if defined(CONFIG_OCOTEA) | ||
105 | #include <platforms/4xx/ocotea.h> | ||
106 | #endif | ||
107 | |||
108 | #if defined(CONFIG_TAISHAN) | ||
109 | #include <platforms/4xx/taishan.h> | ||
110 | #endif | ||
111 | |||
112 | #ifndef __ASSEMBLY__ | ||
113 | #ifdef CONFIG_40x | ||
114 | /* | ||
115 | * The "residual" board information structure the boot loader passes | ||
116 | * into the kernel. | ||
117 | */ | ||
118 | extern bd_t __res; | ||
119 | #endif | ||
120 | #endif | ||
121 | #endif /* CONFIG_40x */ | ||
122 | |||
123 | #endif /* __ASM_IBM4XX_H__ */ | ||
124 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/ibm_ocp.h b/include/asm-ppc/ibm_ocp.h deleted file mode 100644 index ddce616f765a..000000000000 --- a/include/asm-ppc/ibm_ocp.h +++ /dev/null | |||
@@ -1,204 +0,0 @@ | |||
1 | /* | ||
2 | * ibm_ocp.h | ||
3 | * | ||
4 | * (c) Benjamin Herrenschmidt (benh@kernel.crashing.org) | ||
5 | * Mipsys - France | ||
6 | * | ||
7 | * Derived from work (c) Armin Kuster akuster@pacbell.net | ||
8 | * | ||
9 | * Additional support and port to 2.6 LDM/sysfs by | ||
10 | * Matt Porter <mporter@kernel.crashing.org> | ||
11 | * Copyright 2003-2004 MontaVista Software, Inc. | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify it | ||
14 | * under the terms of the GNU General Public License as published by the | ||
15 | * Free Software Foundation; either version 2 of the License, or (at your | ||
16 | * option) any later version. | ||
17 | * | ||
18 | */ | ||
19 | #ifdef __KERNEL__ | ||
20 | #ifndef __IBM_OCP_H__ | ||
21 | #define __IBM_OCP_H__ | ||
22 | |||
23 | #include <asm/types.h> | ||
24 | |||
25 | /* | ||
26 | * IBM 4xx OCP system information | ||
27 | */ | ||
28 | struct ocp_sys_info_data { | ||
29 | int opb_bus_freq; /* OPB Bus Frequency (Hz) */ | ||
30 | int ebc_bus_freq; /* EBC Bus Frequency (Hz) */ | ||
31 | }; | ||
32 | |||
33 | extern struct ocp_sys_info_data ocp_sys_info; | ||
34 | |||
35 | /* | ||
36 | * EMAC additional data and sysfs support | ||
37 | * | ||
38 | * Note about mdio_idx: When you have a zmii, it's usually | ||
39 | * not necessary, it covers the case of the 405EP which has | ||
40 | * the MDIO lines on EMAC0 only | ||
41 | * | ||
42 | * Note about phy_map: Per EMAC map of PHY ids which should | ||
43 | * be probed by emac_probe. Different EMACs can have | ||
44 | * overlapping maps. | ||
45 | * | ||
46 | * Note, this map uses inverse logic for bits: | ||
47 | * 0 - id should be probed | ||
48 | * 1 - id should be ignored | ||
49 | * | ||
50 | * Default value of 0x00000000 - will result in usual | ||
51 | * auto-detection logic. | ||
52 | * | ||
53 | */ | ||
54 | |||
55 | struct ocp_func_emac_data { | ||
56 | int rgmii_idx; /* RGMII device index or -1 */ | ||
57 | int rgmii_mux; /* RGMII input of this EMAC */ | ||
58 | int zmii_idx; /* ZMII device index or -1 */ | ||
59 | int zmii_mux; /* ZMII input of this EMAC */ | ||
60 | int mal_idx; /* MAL device index */ | ||
61 | int mal_rx_chan; /* MAL rx channel number */ | ||
62 | int mal_tx_chan; /* MAL tx channel number */ | ||
63 | int wol_irq; /* WOL interrupt */ | ||
64 | int mdio_idx; /* EMAC idx of MDIO master or -1 */ | ||
65 | int tah_idx; /* TAH device index or -1 */ | ||
66 | int phy_mode; /* PHY type or configurable mode */ | ||
67 | u8 mac_addr[6]; /* EMAC mac address */ | ||
68 | u32 phy_map; /* EMAC phy map */ | ||
69 | u32 phy_feat_exc; /* Excluded PHY features */ | ||
70 | }; | ||
71 | |||
72 | /* Sysfs support */ | ||
73 | #define OCP_SYSFS_EMAC_DATA() \ | ||
74 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, rgmii_idx) \ | ||
75 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, rgmii_mux) \ | ||
76 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, zmii_idx) \ | ||
77 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, zmii_mux) \ | ||
78 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, mal_idx) \ | ||
79 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, mal_rx_chan) \ | ||
80 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, mal_tx_chan) \ | ||
81 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, wol_irq) \ | ||
82 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, mdio_idx) \ | ||
83 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, tah_idx) \ | ||
84 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, phy_mode) \ | ||
85 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "0x%08x\n", emac, phy_map) \ | ||
86 | OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "0x%08x\n", emac, phy_feat_exc)\ | ||
87 | \ | ||
88 | void ocp_show_emac_data(struct device *dev) \ | ||
89 | { \ | ||
90 | device_create_file(dev, &dev_attr_emac_rgmii_idx); \ | ||
91 | device_create_file(dev, &dev_attr_emac_rgmii_mux); \ | ||
92 | device_create_file(dev, &dev_attr_emac_zmii_idx); \ | ||
93 | device_create_file(dev, &dev_attr_emac_zmii_mux); \ | ||
94 | device_create_file(dev, &dev_attr_emac_mal_idx); \ | ||
95 | device_create_file(dev, &dev_attr_emac_mal_rx_chan); \ | ||
96 | device_create_file(dev, &dev_attr_emac_mal_tx_chan); \ | ||
97 | device_create_file(dev, &dev_attr_emac_wol_irq); \ | ||
98 | device_create_file(dev, &dev_attr_emac_mdio_idx); \ | ||
99 | device_create_file(dev, &dev_attr_emac_tah_idx); \ | ||
100 | device_create_file(dev, &dev_attr_emac_phy_mode); \ | ||
101 | device_create_file(dev, &dev_attr_emac_phy_map); \ | ||
102 | device_create_file(dev, &dev_attr_emac_phy_feat_exc); \ | ||
103 | } | ||
104 | |||
105 | /* | ||
106 | * PHY mode settings (EMAC <-> ZMII/RGMII bridge <-> PHY) | ||
107 | */ | ||
108 | #define PHY_MODE_NA 0 | ||
109 | #define PHY_MODE_MII 1 | ||
110 | #define PHY_MODE_RMII 2 | ||
111 | #define PHY_MODE_SMII 3 | ||
112 | #define PHY_MODE_RGMII 4 | ||
113 | #define PHY_MODE_TBI 5 | ||
114 | #define PHY_MODE_GMII 6 | ||
115 | #define PHY_MODE_RTBI 7 | ||
116 | #define PHY_MODE_SGMII 8 | ||
117 | |||
118 | #ifdef CONFIG_40x | ||
119 | /* | ||
120 | * Helper function to copy MAC addresses from the bd_t to OCP EMAC | ||
121 | * additions. | ||
122 | * | ||
123 | * The range of EMAC indices (inclusive) to be copied are the arguments. | ||
124 | */ | ||
125 | static inline void ibm_ocp_set_emac(int start, int end) | ||
126 | { | ||
127 | int i; | ||
128 | struct ocp_def *def; | ||
129 | |||
130 | /* Copy MAC addresses to EMAC additions */ | ||
131 | for (i=start; i<=end; i++) { | ||
132 | def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, i); | ||
133 | if (i == 0) | ||
134 | memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr, | ||
135 | __res.bi_enetaddr, 6); | ||
136 | #if defined(CONFIG_405EP) || defined(CONFIG_44x) | ||
137 | else if (i == 1) | ||
138 | memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr, | ||
139 | __res.bi_enet1addr, 6); | ||
140 | #endif | ||
141 | #if defined(CONFIG_440GX) | ||
142 | else if (i == 2) | ||
143 | memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr, | ||
144 | __res.bi_enet2addr, 6); | ||
145 | else if (i == 3) | ||
146 | memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr, | ||
147 | __res.bi_enet3addr, 6); | ||
148 | #endif | ||
149 | } | ||
150 | } | ||
151 | #endif | ||
152 | |||
153 | /* | ||
154 | * MAL additional data and sysfs support | ||
155 | */ | ||
156 | struct ocp_func_mal_data { | ||
157 | int num_tx_chans; /* Number of TX channels */ | ||
158 | int num_rx_chans; /* Number of RX channels */ | ||
159 | int txeob_irq; /* TX End Of Buffer IRQ */ | ||
160 | int rxeob_irq; /* RX End Of Buffer IRQ */ | ||
161 | int txde_irq; /* TX Descriptor Error IRQ */ | ||
162 | int rxde_irq; /* RX Descriptor Error IRQ */ | ||
163 | int serr_irq; /* MAL System Error IRQ */ | ||
164 | int dcr_base; /* MALx_CFG DCR number */ | ||
165 | }; | ||
166 | |||
167 | #define OCP_SYSFS_MAL_DATA() \ | ||
168 | OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, num_tx_chans) \ | ||
169 | OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, num_rx_chans) \ | ||
170 | OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, txeob_irq) \ | ||
171 | OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, rxeob_irq) \ | ||
172 | OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, txde_irq) \ | ||
173 | OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, rxde_irq) \ | ||
174 | OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, serr_irq) \ | ||
175 | OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, dcr_base) \ | ||
176 | \ | ||
177 | void ocp_show_mal_data(struct device *dev) \ | ||
178 | { \ | ||
179 | device_create_file(dev, &dev_attr_mal_num_tx_chans); \ | ||
180 | device_create_file(dev, &dev_attr_mal_num_rx_chans); \ | ||
181 | device_create_file(dev, &dev_attr_mal_txeob_irq); \ | ||
182 | device_create_file(dev, &dev_attr_mal_rxeob_irq); \ | ||
183 | device_create_file(dev, &dev_attr_mal_txde_irq); \ | ||
184 | device_create_file(dev, &dev_attr_mal_rxde_irq); \ | ||
185 | device_create_file(dev, &dev_attr_mal_serr_irq); \ | ||
186 | device_create_file(dev, &dev_attr_mal_dcr_base); \ | ||
187 | } | ||
188 | |||
189 | /* | ||
190 | * IIC additional data and sysfs support | ||
191 | */ | ||
192 | struct ocp_func_iic_data { | ||
193 | int fast_mode; /* IIC fast mode enabled */ | ||
194 | }; | ||
195 | |||
196 | #define OCP_SYSFS_IIC_DATA() \ | ||
197 | OCP_SYSFS_ADDTL(struct ocp_func_iic_data, "%d\n", iic, fast_mode) \ | ||
198 | \ | ||
199 | void ocp_show_iic_data(struct device *dev) \ | ||
200 | { \ | ||
201 | device_create_file(dev, &dev_attr_iic_fast_mode); \ | ||
202 | } | ||
203 | #endif /* __IBM_OCP_H__ */ | ||
204 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/ibm_ocp_pci.h b/include/asm-ppc/ibm_ocp_pci.h deleted file mode 100644 index a81ab6144358..000000000000 --- a/include/asm-ppc/ibm_ocp_pci.h +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | /* | ||
2 | * Author: Armin Kuster <akuster@mvista.com> | ||
3 | * | ||
4 | * 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under | ||
5 | * the terms of the GNU General Public License version 2. This program | ||
6 | * is licensed "as is" without any warranty of any kind, whether express | ||
7 | * or implied. | ||
8 | */ | ||
9 | |||
10 | #ifdef __KERNEL__ | ||
11 | #ifndef __ASM_IBM_OCP_PCI_H__ | ||
12 | #define __ASM_IBM_OCP_PCI_H__ | ||
13 | |||
14 | /* PCI 32 */ | ||
15 | |||
16 | struct pmm_regs { | ||
17 | u32 la; | ||
18 | u32 ma; | ||
19 | u32 pcila; | ||
20 | u32 pciha; | ||
21 | }; | ||
22 | |||
23 | typedef struct pcil0_regs { | ||
24 | struct pmm_regs pmm[3]; | ||
25 | u32 ptm1ms; | ||
26 | u32 ptm1la; | ||
27 | u32 ptm2ms; | ||
28 | u32 ptm2la; | ||
29 | } pci0_t; | ||
30 | |||
31 | #endif /* __ASM_IBM_OCP_PCI_H__ */ | ||
32 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/immap_cpm2.h b/include/asm-ppc/immap_cpm2.h deleted file mode 100644 index 3c23d9cb47a6..000000000000 --- a/include/asm-ppc/immap_cpm2.h +++ /dev/null | |||
@@ -1,648 +0,0 @@ | |||
1 | /* | ||
2 | * CPM2 Internal Memory Map | ||
3 | * Copyright (c) 1999 Dan Malek (dmalek@jlc.net) | ||
4 | * | ||
5 | * The Internal Memory Map for devices with CPM2 on them. This | ||
6 | * is the superset of all CPM2 devices (8260, 8266, 8280, 8272, | ||
7 | * 8560). | ||
8 | */ | ||
9 | #ifdef __KERNEL__ | ||
10 | #ifndef __IMMAP_CPM2__ | ||
11 | #define __IMMAP_CPM2__ | ||
12 | |||
13 | /* System configuration registers. | ||
14 | */ | ||
15 | typedef struct sys_82xx_conf { | ||
16 | u32 sc_siumcr; | ||
17 | u32 sc_sypcr; | ||
18 | u8 res1[6]; | ||
19 | u16 sc_swsr; | ||
20 | u8 res2[20]; | ||
21 | u32 sc_bcr; | ||
22 | u8 sc_ppc_acr; | ||
23 | u8 res3[3]; | ||
24 | u32 sc_ppc_alrh; | ||
25 | u32 sc_ppc_alrl; | ||
26 | u8 sc_lcl_acr; | ||
27 | u8 res4[3]; | ||
28 | u32 sc_lcl_alrh; | ||
29 | u32 sc_lcl_alrl; | ||
30 | u32 sc_tescr1; | ||
31 | u32 sc_tescr2; | ||
32 | u32 sc_ltescr1; | ||
33 | u32 sc_ltescr2; | ||
34 | u32 sc_pdtea; | ||
35 | u8 sc_pdtem; | ||
36 | u8 res5[3]; | ||
37 | u32 sc_ldtea; | ||
38 | u8 sc_ldtem; | ||
39 | u8 res6[163]; | ||
40 | } sysconf_82xx_cpm2_t; | ||
41 | |||
42 | typedef struct sys_85xx_conf { | ||
43 | u32 sc_cear; | ||
44 | u16 sc_ceer; | ||
45 | u16 sc_cemr; | ||
46 | u8 res1[70]; | ||
47 | u32 sc_smaer; | ||
48 | u8 res2[4]; | ||
49 | u32 sc_smevr; | ||
50 | u32 sc_smctr; | ||
51 | u32 sc_lmaer; | ||
52 | u8 res3[4]; | ||
53 | u32 sc_lmevr; | ||
54 | u32 sc_lmctr; | ||
55 | u8 res4[144]; | ||
56 | } sysconf_85xx_cpm2_t; | ||
57 | |||
58 | typedef union sys_conf { | ||
59 | sysconf_82xx_cpm2_t siu_82xx; | ||
60 | sysconf_85xx_cpm2_t siu_85xx; | ||
61 | } sysconf_cpm2_t; | ||
62 | |||
63 | |||
64 | |||
65 | /* Memory controller registers. | ||
66 | */ | ||
67 | typedef struct mem_ctlr { | ||
68 | u32 memc_br0; | ||
69 | u32 memc_or0; | ||
70 | u32 memc_br1; | ||
71 | u32 memc_or1; | ||
72 | u32 memc_br2; | ||
73 | u32 memc_or2; | ||
74 | u32 memc_br3; | ||
75 | u32 memc_or3; | ||
76 | u32 memc_br4; | ||
77 | u32 memc_or4; | ||
78 | u32 memc_br5; | ||
79 | u32 memc_or5; | ||
80 | u32 memc_br6; | ||
81 | u32 memc_or6; | ||
82 | u32 memc_br7; | ||
83 | u32 memc_or7; | ||
84 | u32 memc_br8; | ||
85 | u32 memc_or8; | ||
86 | u32 memc_br9; | ||
87 | u32 memc_or9; | ||
88 | u32 memc_br10; | ||
89 | u32 memc_or10; | ||
90 | u32 memc_br11; | ||
91 | u32 memc_or11; | ||
92 | u8 res1[8]; | ||
93 | u32 memc_mar; | ||
94 | u8 res2[4]; | ||
95 | u32 memc_mamr; | ||
96 | u32 memc_mbmr; | ||
97 | u32 memc_mcmr; | ||
98 | u8 res3[8]; | ||
99 | u16 memc_mptpr; | ||
100 | u8 res4[2]; | ||
101 | u32 memc_mdr; | ||
102 | u8 res5[4]; | ||
103 | u32 memc_psdmr; | ||
104 | u32 memc_lsdmr; | ||
105 | u8 memc_purt; | ||
106 | u8 res6[3]; | ||
107 | u8 memc_psrt; | ||
108 | u8 res7[3]; | ||
109 | u8 memc_lurt; | ||
110 | u8 res8[3]; | ||
111 | u8 memc_lsrt; | ||
112 | u8 res9[3]; | ||
113 | u32 memc_immr; | ||
114 | u32 memc_pcibr0; | ||
115 | u32 memc_pcibr1; | ||
116 | u8 res10[16]; | ||
117 | u32 memc_pcimsk0; | ||
118 | u32 memc_pcimsk1; | ||
119 | u8 res11[52]; | ||
120 | } memctl_cpm2_t; | ||
121 | |||
122 | /* System Integration Timers. | ||
123 | */ | ||
124 | typedef struct sys_int_timers { | ||
125 | u8 res1[32]; | ||
126 | u16 sit_tmcntsc; | ||
127 | u8 res2[2]; | ||
128 | u32 sit_tmcnt; | ||
129 | u8 res3[4]; | ||
130 | u32 sit_tmcntal; | ||
131 | u8 res4[16]; | ||
132 | u16 sit_piscr; | ||
133 | u8 res5[2]; | ||
134 | u32 sit_pitc; | ||
135 | u32 sit_pitr; | ||
136 | u8 res6[94]; | ||
137 | u8 res7[390]; | ||
138 | } sit_cpm2_t; | ||
139 | |||
140 | #define PISCR_PIRQ_MASK ((u16)0xff00) | ||
141 | #define PISCR_PS ((u16)0x0080) | ||
142 | #define PISCR_PIE ((u16)0x0004) | ||
143 | #define PISCR_PTF ((u16)0x0002) | ||
144 | #define PISCR_PTE ((u16)0x0001) | ||
145 | |||
146 | /* PCI Controller. | ||
147 | */ | ||
148 | typedef struct pci_ctlr { | ||
149 | u32 pci_omisr; | ||
150 | u32 pci_omimr; | ||
151 | u8 res1[8]; | ||
152 | u32 pci_ifqpr; | ||
153 | u32 pci_ofqpr; | ||
154 | u8 res2[8]; | ||
155 | u32 pci_imr0; | ||
156 | u32 pci_imr1; | ||
157 | u32 pci_omr0; | ||
158 | u32 pci_omr1; | ||
159 | u32 pci_odr; | ||
160 | u8 res3[4]; | ||
161 | u32 pci_idr; | ||
162 | u8 res4[20]; | ||
163 | u32 pci_imisr; | ||
164 | u32 pci_imimr; | ||
165 | u8 res5[24]; | ||
166 | u32 pci_ifhpr; | ||
167 | u8 res6[4]; | ||
168 | u32 pci_iftpr; | ||
169 | u8 res7[4]; | ||
170 | u32 pci_iphpr; | ||
171 | u8 res8[4]; | ||
172 | u32 pci_iptpr; | ||
173 | u8 res9[4]; | ||
174 | u32 pci_ofhpr; | ||
175 | u8 res10[4]; | ||
176 | u32 pci_oftpr; | ||
177 | u8 res11[4]; | ||
178 | u32 pci_ophpr; | ||
179 | u8 res12[4]; | ||
180 | u32 pci_optpr; | ||
181 | u8 res13[8]; | ||
182 | u32 pci_mucr; | ||
183 | u8 res14[8]; | ||
184 | u32 pci_qbar; | ||
185 | u8 res15[12]; | ||
186 | u32 pci_dmamr0; | ||
187 | u32 pci_dmasr0; | ||
188 | u32 pci_dmacdar0; | ||
189 | u8 res16[4]; | ||
190 | u32 pci_dmasar0; | ||
191 | u8 res17[4]; | ||
192 | u32 pci_dmadar0; | ||
193 | u8 res18[4]; | ||
194 | u32 pci_dmabcr0; | ||
195 | u32 pci_dmandar0; | ||
196 | u8 res19[86]; | ||
197 | u32 pci_dmamr1; | ||
198 | u32 pci_dmasr1; | ||
199 | u32 pci_dmacdar1; | ||
200 | u8 res20[4]; | ||
201 | u32 pci_dmasar1; | ||
202 | u8 res21[4]; | ||
203 | u32 pci_dmadar1; | ||
204 | u8 res22[4]; | ||
205 | u32 pci_dmabcr1; | ||
206 | u32 pci_dmandar1; | ||
207 | u8 res23[88]; | ||
208 | u32 pci_dmamr2; | ||
209 | u32 pci_dmasr2; | ||
210 | u32 pci_dmacdar2; | ||
211 | u8 res24[4]; | ||
212 | u32 pci_dmasar2; | ||
213 | u8 res25[4]; | ||
214 | u32 pci_dmadar2; | ||
215 | u8 res26[4]; | ||
216 | u32 pci_dmabcr2; | ||
217 | u32 pci_dmandar2; | ||
218 | u8 res27[88]; | ||
219 | u32 pci_dmamr3; | ||
220 | u32 pci_dmasr3; | ||
221 | u32 pci_dmacdar3; | ||
222 | u8 res28[4]; | ||
223 | u32 pci_dmasar3; | ||
224 | u8 res29[4]; | ||
225 | u32 pci_dmadar3; | ||
226 | u8 res30[4]; | ||
227 | u32 pci_dmabcr3; | ||
228 | u32 pci_dmandar3; | ||
229 | u8 res31[344]; | ||
230 | u32 pci_potar0; | ||
231 | u8 res32[4]; | ||
232 | u32 pci_pobar0; | ||
233 | u8 res33[4]; | ||
234 | u32 pci_pocmr0; | ||
235 | u8 res34[4]; | ||
236 | u32 pci_potar1; | ||
237 | u8 res35[4]; | ||
238 | u32 pci_pobar1; | ||
239 | u8 res36[4]; | ||
240 | u32 pci_pocmr1; | ||
241 | u8 res37[4]; | ||
242 | u32 pci_potar2; | ||
243 | u8 res38[4]; | ||
244 | u32 pci_pobar2; | ||
245 | u8 res39[4]; | ||
246 | u32 pci_pocmr2; | ||
247 | u8 res40[50]; | ||
248 | u32 pci_ptcr; | ||
249 | u32 pci_gpcr; | ||
250 | u32 pci_gcr; | ||
251 | u32 pci_esr; | ||
252 | u32 pci_emr; | ||
253 | u32 pci_ecr; | ||
254 | u32 pci_eacr; | ||
255 | u8 res41[4]; | ||
256 | u32 pci_edcr; | ||
257 | u8 res42[4]; | ||
258 | u32 pci_eccr; | ||
259 | u8 res43[44]; | ||
260 | u32 pci_pitar1; | ||
261 | u8 res44[4]; | ||
262 | u32 pci_pibar1; | ||
263 | u8 res45[4]; | ||
264 | u32 pci_picmr1; | ||
265 | u8 res46[4]; | ||
266 | u32 pci_pitar0; | ||
267 | u8 res47[4]; | ||
268 | u32 pci_pibar0; | ||
269 | u8 res48[4]; | ||
270 | u32 pci_picmr0; | ||
271 | u8 res49[4]; | ||
272 | u32 pci_cfg_addr; | ||
273 | u32 pci_cfg_data; | ||
274 | u32 pci_int_ack; | ||
275 | u8 res50[756]; | ||
276 | } pci_cpm2_t; | ||
277 | |||
278 | /* Interrupt Controller. | ||
279 | */ | ||
280 | typedef struct interrupt_controller { | ||
281 | u16 ic_sicr; | ||
282 | u8 res1[2]; | ||
283 | u32 ic_sivec; | ||
284 | u32 ic_sipnrh; | ||
285 | u32 ic_sipnrl; | ||
286 | u32 ic_siprr; | ||
287 | u32 ic_scprrh; | ||
288 | u32 ic_scprrl; | ||
289 | u32 ic_simrh; | ||
290 | u32 ic_simrl; | ||
291 | u32 ic_siexr; | ||
292 | u8 res2[88]; | ||
293 | } intctl_cpm2_t; | ||
294 | |||
295 | /* Clocks and Reset. | ||
296 | */ | ||
297 | typedef struct clk_and_reset { | ||
298 | u32 car_sccr; | ||
299 | u8 res1[4]; | ||
300 | u32 car_scmr; | ||
301 | u8 res2[4]; | ||
302 | u32 car_rsr; | ||
303 | u32 car_rmr; | ||
304 | u8 res[104]; | ||
305 | } car_cpm2_t; | ||
306 | |||
307 | /* Input/Output Port control/status registers. | ||
308 | * Names consistent with processor manual, although they are different | ||
309 | * from the original 8xx names....... | ||
310 | */ | ||
311 | typedef struct io_port { | ||
312 | u32 iop_pdira; | ||
313 | u32 iop_ppara; | ||
314 | u32 iop_psora; | ||
315 | u32 iop_podra; | ||
316 | u32 iop_pdata; | ||
317 | u8 res1[12]; | ||
318 | u32 iop_pdirb; | ||
319 | u32 iop_pparb; | ||
320 | u32 iop_psorb; | ||
321 | u32 iop_podrb; | ||
322 | u32 iop_pdatb; | ||
323 | u8 res2[12]; | ||
324 | u32 iop_pdirc; | ||
325 | u32 iop_pparc; | ||
326 | u32 iop_psorc; | ||
327 | u32 iop_podrc; | ||
328 | u32 iop_pdatc; | ||
329 | u8 res3[12]; | ||
330 | u32 iop_pdird; | ||
331 | u32 iop_ppard; | ||
332 | u32 iop_psord; | ||
333 | u32 iop_podrd; | ||
334 | u32 iop_pdatd; | ||
335 | u8 res4[12]; | ||
336 | } iop_cpm2_t; | ||
337 | |||
338 | /* Communication Processor Module Timers | ||
339 | */ | ||
340 | typedef struct cpm_timers { | ||
341 | u8 cpmt_tgcr1; | ||
342 | u8 res1[3]; | ||
343 | u8 cpmt_tgcr2; | ||
344 | u8 res2[11]; | ||
345 | u16 cpmt_tmr1; | ||
346 | u16 cpmt_tmr2; | ||
347 | u16 cpmt_trr1; | ||
348 | u16 cpmt_trr2; | ||
349 | u16 cpmt_tcr1; | ||
350 | u16 cpmt_tcr2; | ||
351 | u16 cpmt_tcn1; | ||
352 | u16 cpmt_tcn2; | ||
353 | u16 cpmt_tmr3; | ||
354 | u16 cpmt_tmr4; | ||
355 | u16 cpmt_trr3; | ||
356 | u16 cpmt_trr4; | ||
357 | u16 cpmt_tcr3; | ||
358 | u16 cpmt_tcr4; | ||
359 | u16 cpmt_tcn3; | ||
360 | u16 cpmt_tcn4; | ||
361 | u16 cpmt_ter1; | ||
362 | u16 cpmt_ter2; | ||
363 | u16 cpmt_ter3; | ||
364 | u16 cpmt_ter4; | ||
365 | u8 res3[584]; | ||
366 | } cpmtimer_cpm2_t; | ||
367 | |||
368 | /* DMA control/status registers. | ||
369 | */ | ||
370 | typedef struct sdma_csr { | ||
371 | u8 res0[24]; | ||
372 | u8 sdma_sdsr; | ||
373 | u8 res1[3]; | ||
374 | u8 sdma_sdmr; | ||
375 | u8 res2[3]; | ||
376 | u8 sdma_idsr1; | ||
377 | u8 res3[3]; | ||
378 | u8 sdma_idmr1; | ||
379 | u8 res4[3]; | ||
380 | u8 sdma_idsr2; | ||
381 | u8 res5[3]; | ||
382 | u8 sdma_idmr2; | ||
383 | u8 res6[3]; | ||
384 | u8 sdma_idsr3; | ||
385 | u8 res7[3]; | ||
386 | u8 sdma_idmr3; | ||
387 | u8 res8[3]; | ||
388 | u8 sdma_idsr4; | ||
389 | u8 res9[3]; | ||
390 | u8 sdma_idmr4; | ||
391 | u8 res10[707]; | ||
392 | } sdma_cpm2_t; | ||
393 | |||
394 | /* Fast controllers | ||
395 | */ | ||
396 | typedef struct fcc { | ||
397 | u32 fcc_gfmr; | ||
398 | u32 fcc_fpsmr; | ||
399 | u16 fcc_ftodr; | ||
400 | u8 res1[2]; | ||
401 | u16 fcc_fdsr; | ||
402 | u8 res2[2]; | ||
403 | u16 fcc_fcce; | ||
404 | u8 res3[2]; | ||
405 | u16 fcc_fccm; | ||
406 | u8 res4[2]; | ||
407 | u8 fcc_fccs; | ||
408 | u8 res5[3]; | ||
409 | u8 fcc_ftirr_phy[4]; | ||
410 | } fcc_t; | ||
411 | |||
412 | /* Fast controllers continued | ||
413 | */ | ||
414 | typedef struct fcc_c { | ||
415 | u32 fcc_firper; | ||
416 | u32 fcc_firer; | ||
417 | u32 fcc_firsr_hi; | ||
418 | u32 fcc_firsr_lo; | ||
419 | u8 fcc_gfemr; | ||
420 | u8 res1[15]; | ||
421 | } fcc_c_t; | ||
422 | |||
423 | /* TC Layer | ||
424 | */ | ||
425 | typedef struct tclayer { | ||
426 | u16 tc_tcmode; | ||
427 | u16 tc_cdsmr; | ||
428 | u16 tc_tcer; | ||
429 | u16 tc_rcc; | ||
430 | u16 tc_tcmr; | ||
431 | u16 tc_fcc; | ||
432 | u16 tc_ccc; | ||
433 | u16 tc_icc; | ||
434 | u16 tc_tcc; | ||
435 | u16 tc_ecc; | ||
436 | u8 res1[12]; | ||
437 | } tclayer_t; | ||
438 | |||
439 | |||
440 | /* I2C | ||
441 | */ | ||
442 | typedef struct i2c { | ||
443 | u8 i2c_i2mod; | ||
444 | u8 res1[3]; | ||
445 | u8 i2c_i2add; | ||
446 | u8 res2[3]; | ||
447 | u8 i2c_i2brg; | ||
448 | u8 res3[3]; | ||
449 | u8 i2c_i2com; | ||
450 | u8 res4[3]; | ||
451 | u8 i2c_i2cer; | ||
452 | u8 res5[3]; | ||
453 | u8 i2c_i2cmr; | ||
454 | u8 res6[331]; | ||
455 | } i2c_cpm2_t; | ||
456 | |||
457 | typedef struct scc { /* Serial communication channels */ | ||
458 | u32 scc_gsmrl; | ||
459 | u32 scc_gsmrh; | ||
460 | u16 scc_psmr; | ||
461 | u8 res1[2]; | ||
462 | u16 scc_todr; | ||
463 | u16 scc_dsr; | ||
464 | u16 scc_scce; | ||
465 | u8 res2[2]; | ||
466 | u16 scc_sccm; | ||
467 | u8 res3; | ||
468 | u8 scc_sccs; | ||
469 | u8 res4[8]; | ||
470 | } scc_t; | ||
471 | |||
472 | typedef struct smc { /* Serial management channels */ | ||
473 | u8 res1[2]; | ||
474 | u16 smc_smcmr; | ||
475 | u8 res2[2]; | ||
476 | u8 smc_smce; | ||
477 | u8 res3[3]; | ||
478 | u8 smc_smcm; | ||
479 | u8 res4[5]; | ||
480 | } smc_t; | ||
481 | |||
482 | /* Serial Peripheral Interface. | ||
483 | */ | ||
484 | typedef struct spi_ctrl { | ||
485 | u16 spi_spmode; | ||
486 | u8 res1[4]; | ||
487 | u8 spi_spie; | ||
488 | u8 res2[3]; | ||
489 | u8 spi_spim; | ||
490 | u8 res3[2]; | ||
491 | u8 spi_spcom; | ||
492 | u8 res4[82]; | ||
493 | } spictl_cpm2_t; | ||
494 | |||
495 | /* CPM Mux. | ||
496 | */ | ||
497 | typedef struct cpmux { | ||
498 | u8 cmx_si1cr; | ||
499 | u8 res1; | ||
500 | u8 cmx_si2cr; | ||
501 | u8 res2; | ||
502 | u32 cmx_fcr; | ||
503 | u32 cmx_scr; | ||
504 | u8 cmx_smr; | ||
505 | u8 res3; | ||
506 | u16 cmx_uar; | ||
507 | u8 res4[16]; | ||
508 | } cpmux_t; | ||
509 | |||
510 | /* SIRAM control | ||
511 | */ | ||
512 | typedef struct siram { | ||
513 | u16 si_amr; | ||
514 | u16 si_bmr; | ||
515 | u16 si_cmr; | ||
516 | u16 si_dmr; | ||
517 | u8 si_gmr; | ||
518 | u8 res1; | ||
519 | u8 si_cmdr; | ||
520 | u8 res2; | ||
521 | u8 si_str; | ||
522 | u8 res3; | ||
523 | u16 si_rsr; | ||
524 | } siramctl_t; | ||
525 | |||
526 | typedef struct mcc { | ||
527 | u16 mcc_mcce; | ||
528 | u8 res1[2]; | ||
529 | u16 mcc_mccm; | ||
530 | u8 res2[2]; | ||
531 | u8 mcc_mccf; | ||
532 | u8 res3[7]; | ||
533 | } mcc_t; | ||
534 | |||
535 | typedef struct comm_proc { | ||
536 | u32 cp_cpcr; | ||
537 | u32 cp_rccr; | ||
538 | u8 res1[14]; | ||
539 | u16 cp_rter; | ||
540 | u8 res2[2]; | ||
541 | u16 cp_rtmr; | ||
542 | u16 cp_rtscr; | ||
543 | u8 res3[2]; | ||
544 | u32 cp_rtsr; | ||
545 | u8 res4[12]; | ||
546 | } cpm_cpm2_t; | ||
547 | |||
548 | /* USB Controller. | ||
549 | */ | ||
550 | typedef struct usb_ctlr { | ||
551 | u8 usb_usmod; | ||
552 | u8 usb_usadr; | ||
553 | u8 usb_uscom; | ||
554 | u8 res1[1]; | ||
555 | u16 usb_usep1; | ||
556 | u16 usb_usep2; | ||
557 | u16 usb_usep3; | ||
558 | u16 usb_usep4; | ||
559 | u8 res2[4]; | ||
560 | u16 usb_usber; | ||
561 | u8 res3[2]; | ||
562 | u16 usb_usbmr; | ||
563 | u8 usb_usbs; | ||
564 | u8 res4[7]; | ||
565 | } usb_cpm2_t; | ||
566 | |||
567 | /* ...and the whole thing wrapped up.... | ||
568 | */ | ||
569 | |||
570 | typedef struct immap { | ||
571 | /* Some references are into the unique and known dpram spaces, | ||
572 | * others are from the generic base. | ||
573 | */ | ||
574 | #define im_dprambase im_dpram1 | ||
575 | u8 im_dpram1[16*1024]; | ||
576 | u8 res1[16*1024]; | ||
577 | u8 im_dpram2[4*1024]; | ||
578 | u8 res2[8*1024]; | ||
579 | u8 im_dpram3[4*1024]; | ||
580 | u8 res3[16*1024]; | ||
581 | |||
582 | sysconf_cpm2_t im_siu_conf; /* SIU Configuration */ | ||
583 | memctl_cpm2_t im_memctl; /* Memory Controller */ | ||
584 | sit_cpm2_t im_sit; /* System Integration Timers */ | ||
585 | pci_cpm2_t im_pci; /* PCI Controller */ | ||
586 | intctl_cpm2_t im_intctl; /* Interrupt Controller */ | ||
587 | car_cpm2_t im_clkrst; /* Clocks and reset */ | ||
588 | iop_cpm2_t im_ioport; /* IO Port control/status */ | ||
589 | cpmtimer_cpm2_t im_cpmtimer; /* CPM timers */ | ||
590 | sdma_cpm2_t im_sdma; /* SDMA control/status */ | ||
591 | |||
592 | fcc_t im_fcc[3]; /* Three FCCs */ | ||
593 | u8 res4z[32]; | ||
594 | fcc_c_t im_fcc_c[3]; /* Continued FCCs */ | ||
595 | |||
596 | u8 res4[32]; | ||
597 | |||
598 | tclayer_t im_tclayer[8]; /* Eight TCLayers */ | ||
599 | u16 tc_tcgsr; | ||
600 | u16 tc_tcger; | ||
601 | |||
602 | /* First set of baud rate generators. | ||
603 | */ | ||
604 | u8 res[236]; | ||
605 | u32 im_brgc5; | ||
606 | u32 im_brgc6; | ||
607 | u32 im_brgc7; | ||
608 | u32 im_brgc8; | ||
609 | |||
610 | u8 res5[608]; | ||
611 | |||
612 | i2c_cpm2_t im_i2c; /* I2C control/status */ | ||
613 | cpm_cpm2_t im_cpm; /* Communication processor */ | ||
614 | |||
615 | /* Second set of baud rate generators. | ||
616 | */ | ||
617 | u32 im_brgc1; | ||
618 | u32 im_brgc2; | ||
619 | u32 im_brgc3; | ||
620 | u32 im_brgc4; | ||
621 | |||
622 | scc_t im_scc[4]; /* Four SCCs */ | ||
623 | smc_t im_smc[2]; /* Couple of SMCs */ | ||
624 | spictl_cpm2_t im_spi; /* A SPI */ | ||
625 | cpmux_t im_cpmux; /* CPM clock route mux */ | ||
626 | siramctl_t im_siramctl1; /* First SI RAM Control */ | ||
627 | mcc_t im_mcc1; /* First MCC */ | ||
628 | siramctl_t im_siramctl2; /* Second SI RAM Control */ | ||
629 | mcc_t im_mcc2; /* Second MCC */ | ||
630 | usb_cpm2_t im_usb; /* USB Controller */ | ||
631 | |||
632 | u8 res6[1153]; | ||
633 | |||
634 | u16 im_si1txram[256]; | ||
635 | u8 res7[512]; | ||
636 | u16 im_si1rxram[256]; | ||
637 | u8 res8[512]; | ||
638 | u16 im_si2txram[256]; | ||
639 | u8 res9[512]; | ||
640 | u16 im_si2rxram[256]; | ||
641 | u8 res10[512]; | ||
642 | u8 res11[4096]; | ||
643 | } cpm2_map_t; | ||
644 | |||
645 | extern cpm2_map_t *cpm2_immr; | ||
646 | |||
647 | #endif /* __IMMAP_CPM2__ */ | ||
648 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/io.h b/include/asm-ppc/io.h deleted file mode 100644 index a0d409a5d80f..000000000000 --- a/include/asm-ppc/io.h +++ /dev/null | |||
@@ -1,502 +0,0 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | #ifndef _PPC_IO_H | ||
3 | #define _PPC_IO_H | ||
4 | |||
5 | #include <linux/string.h> | ||
6 | #include <linux/types.h> | ||
7 | |||
8 | #include <asm/page.h> | ||
9 | #include <asm/byteorder.h> | ||
10 | #include <asm/synch.h> | ||
11 | #include <asm/mmu.h> | ||
12 | |||
13 | #define SIO_CONFIG_RA 0x398 | ||
14 | #define SIO_CONFIG_RD 0x399 | ||
15 | |||
16 | #define SLOW_DOWN_IO | ||
17 | |||
18 | #define PMAC_ISA_MEM_BASE 0 | ||
19 | #define PMAC_PCI_DRAM_OFFSET 0 | ||
20 | #define CHRP_ISA_IO_BASE 0xf8000000 | ||
21 | #define CHRP_ISA_MEM_BASE 0xf7000000 | ||
22 | #define CHRP_PCI_DRAM_OFFSET 0 | ||
23 | #define PREP_ISA_IO_BASE 0x80000000 | ||
24 | #define PREP_ISA_MEM_BASE 0xc0000000 | ||
25 | #define PREP_PCI_DRAM_OFFSET 0x80000000 | ||
26 | |||
27 | #if defined(CONFIG_4xx) | ||
28 | #include <asm/ibm4xx.h> | ||
29 | #elif defined(CONFIG_8xx) | ||
30 | #include <asm/mpc8xx.h> | ||
31 | #elif defined(CONFIG_8260) | ||
32 | #include <asm/mpc8260.h> | ||
33 | #elif !defined(CONFIG_PCI) | ||
34 | #define _IO_BASE 0 | ||
35 | #define _ISA_MEM_BASE 0 | ||
36 | #define PCI_DRAM_OFFSET 0 | ||
37 | #else /* Everyone else */ | ||
38 | #define _IO_BASE isa_io_base | ||
39 | #define _ISA_MEM_BASE isa_mem_base | ||
40 | #define PCI_DRAM_OFFSET pci_dram_offset | ||
41 | #endif /* Platform-dependent I/O */ | ||
42 | |||
43 | #define ___IO_BASE ((void __iomem *)_IO_BASE) | ||
44 | extern unsigned long isa_io_base; | ||
45 | extern unsigned long isa_mem_base; | ||
46 | extern unsigned long pci_dram_offset; | ||
47 | |||
48 | /* | ||
49 | * 8, 16 and 32 bit, big and little endian I/O operations, with barrier. | ||
50 | * | ||
51 | * Read operations have additional twi & isync to make sure the read | ||
52 | * is actually performed (i.e. the data has come back) before we start | ||
53 | * executing any following instructions. | ||
54 | */ | ||
55 | extern inline int in_8(const volatile unsigned char __iomem *addr) | ||
56 | { | ||
57 | int ret; | ||
58 | |||
59 | __asm__ __volatile__( | ||
60 | "sync; lbz%U1%X1 %0,%1;\n" | ||
61 | "twi 0,%0,0;\n" | ||
62 | "isync" : "=r" (ret) : "m" (*addr)); | ||
63 | return ret; | ||
64 | } | ||
65 | |||
66 | extern inline void out_8(volatile unsigned char __iomem *addr, int val) | ||
67 | { | ||
68 | __asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val)); | ||
69 | } | ||
70 | |||
71 | extern inline int in_le16(const volatile unsigned short __iomem *addr) | ||
72 | { | ||
73 | int ret; | ||
74 | |||
75 | __asm__ __volatile__("sync; lhbrx %0,0,%1;\n" | ||
76 | "twi 0,%0,0;\n" | ||
77 | "isync" : "=r" (ret) : | ||
78 | "r" (addr), "m" (*addr)); | ||
79 | return ret; | ||
80 | } | ||
81 | |||
82 | extern inline int in_be16(const volatile unsigned short __iomem *addr) | ||
83 | { | ||
84 | int ret; | ||
85 | |||
86 | __asm__ __volatile__("sync; lhz%U1%X1 %0,%1;\n" | ||
87 | "twi 0,%0,0;\n" | ||
88 | "isync" : "=r" (ret) : "m" (*addr)); | ||
89 | return ret; | ||
90 | } | ||
91 | |||
92 | extern inline void out_le16(volatile unsigned short __iomem *addr, int val) | ||
93 | { | ||
94 | __asm__ __volatile__("sync; sthbrx %1,0,%2" : "=m" (*addr) : | ||
95 | "r" (val), "r" (addr)); | ||
96 | } | ||
97 | |||
98 | extern inline void out_be16(volatile unsigned short __iomem *addr, int val) | ||
99 | { | ||
100 | __asm__ __volatile__("sync; sth%U0%X0 %1,%0" : "=m" (*addr) : "r" (val)); | ||
101 | } | ||
102 | |||
103 | extern inline unsigned in_le32(const volatile unsigned __iomem *addr) | ||
104 | { | ||
105 | unsigned ret; | ||
106 | |||
107 | __asm__ __volatile__("sync; lwbrx %0,0,%1;\n" | ||
108 | "twi 0,%0,0;\n" | ||
109 | "isync" : "=r" (ret) : | ||
110 | "r" (addr), "m" (*addr)); | ||
111 | return ret; | ||
112 | } | ||
113 | |||
114 | extern inline unsigned in_be32(const volatile unsigned __iomem *addr) | ||
115 | { | ||
116 | unsigned ret; | ||
117 | |||
118 | __asm__ __volatile__("sync; lwz%U1%X1 %0,%1;\n" | ||
119 | "twi 0,%0,0;\n" | ||
120 | "isync" : "=r" (ret) : "m" (*addr)); | ||
121 | return ret; | ||
122 | } | ||
123 | |||
124 | extern inline void out_le32(volatile unsigned __iomem *addr, int val) | ||
125 | { | ||
126 | __asm__ __volatile__("sync; stwbrx %1,0,%2" : "=m" (*addr) : | ||
127 | "r" (val), "r" (addr)); | ||
128 | } | ||
129 | |||
130 | extern inline void out_be32(volatile unsigned __iomem *addr, int val) | ||
131 | { | ||
132 | __asm__ __volatile__("sync; stw%U0%X0 %1,%0" : "=m" (*addr) : "r" (val)); | ||
133 | } | ||
134 | #if defined (CONFIG_8260_PCI9) | ||
135 | #define readb(addr) in_8((volatile u8 *)(addr)) | ||
136 | #define writeb(b,addr) out_8((volatile u8 *)(addr), (b)) | ||
137 | #else | ||
138 | static inline __u8 readb(const volatile void __iomem *addr) | ||
139 | { | ||
140 | return in_8(addr); | ||
141 | } | ||
142 | static inline void writeb(__u8 b, volatile void __iomem *addr) | ||
143 | { | ||
144 | out_8(addr, b); | ||
145 | } | ||
146 | #endif | ||
147 | |||
148 | #if defined (CONFIG_8260_PCI9) | ||
149 | /* Use macros if PCI9 workaround enabled */ | ||
150 | #define readw(addr) in_le16((volatile u16 *)(addr)) | ||
151 | #define readl(addr) in_le32((volatile u32 *)(addr)) | ||
152 | #define writew(b,addr) out_le16((volatile u16 *)(addr),(b)) | ||
153 | #define writel(b,addr) out_le32((volatile u32 *)(addr),(b)) | ||
154 | #else | ||
155 | static inline __u16 readw(const volatile void __iomem *addr) | ||
156 | { | ||
157 | return in_le16(addr); | ||
158 | } | ||
159 | static inline __u32 readl(const volatile void __iomem *addr) | ||
160 | { | ||
161 | return in_le32(addr); | ||
162 | } | ||
163 | static inline void writew(__u16 b, volatile void __iomem *addr) | ||
164 | { | ||
165 | out_le16(addr, b); | ||
166 | } | ||
167 | static inline void writel(__u32 b, volatile void __iomem *addr) | ||
168 | { | ||
169 | out_le32(addr, b); | ||
170 | } | ||
171 | #endif /* CONFIG_8260_PCI9 */ | ||
172 | |||
173 | #define readb_relaxed(addr) readb(addr) | ||
174 | #define readw_relaxed(addr) readw(addr) | ||
175 | #define readl_relaxed(addr) readl(addr) | ||
176 | |||
177 | static inline __u8 __raw_readb(const volatile void __iomem *addr) | ||
178 | { | ||
179 | return *(__force volatile __u8 *)(addr); | ||
180 | } | ||
181 | static inline __u16 __raw_readw(const volatile void __iomem *addr) | ||
182 | { | ||
183 | return *(__force volatile __u16 *)(addr); | ||
184 | } | ||
185 | static inline __u32 __raw_readl(const volatile void __iomem *addr) | ||
186 | { | ||
187 | return *(__force volatile __u32 *)(addr); | ||
188 | } | ||
189 | static inline void __raw_writeb(__u8 b, volatile void __iomem *addr) | ||
190 | { | ||
191 | *(__force volatile __u8 *)(addr) = b; | ||
192 | } | ||
193 | static inline void __raw_writew(__u16 b, volatile void __iomem *addr) | ||
194 | { | ||
195 | *(__force volatile __u16 *)(addr) = b; | ||
196 | } | ||
197 | static inline void __raw_writel(__u32 b, volatile void __iomem *addr) | ||
198 | { | ||
199 | *(__force volatile __u32 *)(addr) = b; | ||
200 | } | ||
201 | |||
202 | #define mmiowb() | ||
203 | |||
204 | /* | ||
205 | * The insw/outsw/insl/outsl macros don't do byte-swapping. | ||
206 | * They are only used in practice for transferring buffers which | ||
207 | * are arrays of bytes, and byte-swapping is not appropriate in | ||
208 | * that case. - paulus | ||
209 | */ | ||
210 | #define insb(port, buf, ns) _insb((port)+___IO_BASE, (buf), (ns)) | ||
211 | #define outsb(port, buf, ns) _outsb((port)+___IO_BASE, (buf), (ns)) | ||
212 | #define insw(port, buf, ns) _insw_ns((port)+___IO_BASE, (buf), (ns)) | ||
213 | #define outsw(port, buf, ns) _outsw_ns((port)+___IO_BASE, (buf), (ns)) | ||
214 | #define insl(port, buf, nl) _insl_ns((port)+___IO_BASE, (buf), (nl)) | ||
215 | #define outsl(port, buf, nl) _outsl_ns((port)+___IO_BASE, (buf), (nl)) | ||
216 | |||
217 | #define readsb(a, b, n) _insb((a), (b), (n)) | ||
218 | #define readsw(a, b, n) _insw_ns((a), (b), (n)) | ||
219 | #define readsl(a, b, n) _insl_ns((a), (b), (n)) | ||
220 | #define writesb(a, b, n) _outsb((a),(b),(n)) | ||
221 | #define writesw(a, b, n) _outsw_ns((a),(b),(n)) | ||
222 | #define writesl(a, b, n) _outsl_ns((a),(b),(n)) | ||
223 | |||
224 | |||
225 | /* | ||
226 | * On powermacs and 8xx we will get a machine check exception | ||
227 | * if we try to read data from a non-existent I/O port. Because | ||
228 | * the machine check is an asynchronous exception, it isn't | ||
229 | * well-defined which instruction SRR0 will point to when the | ||
230 | * exception occurs. | ||
231 | * With the sequence below (twi; isync; nop), we have found that | ||
232 | * the machine check occurs on one of the three instructions on | ||
233 | * all PPC implementations tested so far. The twi and isync are | ||
234 | * needed on the 601 (in fact twi; sync works too), the isync and | ||
235 | * nop are needed on 604[e|r], and any of twi, sync or isync will | ||
236 | * work on 603[e], 750, 74xx. | ||
237 | * The twi creates an explicit data dependency on the returned | ||
238 | * value which seems to be needed to make the 601 wait for the | ||
239 | * load to finish. | ||
240 | */ | ||
241 | |||
242 | #define __do_in_asm(name, op) \ | ||
243 | extern __inline__ unsigned int name(unsigned int port) \ | ||
244 | { \ | ||
245 | unsigned int x; \ | ||
246 | __asm__ __volatile__( \ | ||
247 | "sync\n" \ | ||
248 | "0:" op " %0,0,%1\n" \ | ||
249 | "1: twi 0,%0,0\n" \ | ||
250 | "2: isync\n" \ | ||
251 | "3: nop\n" \ | ||
252 | "4:\n" \ | ||
253 | ".section .fixup,\"ax\"\n" \ | ||
254 | "5: li %0,-1\n" \ | ||
255 | " b 4b\n" \ | ||
256 | ".previous\n" \ | ||
257 | ".section __ex_table,\"a\"\n" \ | ||
258 | " .align 2\n" \ | ||
259 | " .long 0b,5b\n" \ | ||
260 | " .long 1b,5b\n" \ | ||
261 | " .long 2b,5b\n" \ | ||
262 | " .long 3b,5b\n" \ | ||
263 | ".previous" \ | ||
264 | : "=&r" (x) \ | ||
265 | : "r" (port + ___IO_BASE)); \ | ||
266 | return x; \ | ||
267 | } | ||
268 | |||
269 | #define __do_out_asm(name, op) \ | ||
270 | extern __inline__ void name(unsigned int val, unsigned int port) \ | ||
271 | { \ | ||
272 | __asm__ __volatile__( \ | ||
273 | "sync\n" \ | ||
274 | "0:" op " %0,0,%1\n" \ | ||
275 | "1: sync\n" \ | ||
276 | "2:\n" \ | ||
277 | ".section __ex_table,\"a\"\n" \ | ||
278 | " .align 2\n" \ | ||
279 | " .long 0b,2b\n" \ | ||
280 | " .long 1b,2b\n" \ | ||
281 | ".previous" \ | ||
282 | : : "r" (val), "r" (port + ___IO_BASE)); \ | ||
283 | } | ||
284 | |||
285 | __do_out_asm(outb, "stbx") | ||
286 | #if defined (CONFIG_8260_PCI9) | ||
287 | /* in asm cannot be defined if PCI9 workaround is used */ | ||
288 | #define inb(port) in_8((port)+___IO_BASE) | ||
289 | #define inw(port) in_le16((port)+___IO_BASE) | ||
290 | #define inl(port) in_le32((port)+___IO_BASE) | ||
291 | __do_out_asm(outw, "sthbrx") | ||
292 | __do_out_asm(outl, "stwbrx") | ||
293 | #else | ||
294 | __do_in_asm(inb, "lbzx") | ||
295 | __do_in_asm(inw, "lhbrx") | ||
296 | __do_in_asm(inl, "lwbrx") | ||
297 | __do_out_asm(outw, "sthbrx") | ||
298 | __do_out_asm(outl, "stwbrx") | ||
299 | |||
300 | #endif | ||
301 | |||
302 | #define inb_p(port) inb((port)) | ||
303 | #define outb_p(val, port) outb((val), (port)) | ||
304 | #define inw_p(port) inw((port)) | ||
305 | #define outw_p(val, port) outw((val), (port)) | ||
306 | #define inl_p(port) inl((port)) | ||
307 | #define outl_p(val, port) outl((val), (port)) | ||
308 | |||
309 | extern void _insb(const volatile u8 __iomem *addr, void *buf, long count); | ||
310 | extern void _outsb(volatile u8 __iomem *addr,const void *buf,long count); | ||
311 | extern void _insw_ns(const volatile u16 __iomem *addr, void *buf, long count); | ||
312 | extern void _outsw_ns(volatile u16 __iomem *addr, const void *buf, long count); | ||
313 | extern void _insl_ns(const volatile u32 __iomem *addr, void *buf, long count); | ||
314 | extern void _outsl_ns(volatile u32 __iomem *addr, const void *buf, long count); | ||
315 | |||
316 | |||
317 | #define IO_SPACE_LIMIT ~0 | ||
318 | |||
319 | #if defined (CONFIG_8260_PCI9) | ||
320 | #define memset_io(a,b,c) memset((void *)(a),(b),(c)) | ||
321 | #define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c)) | ||
322 | #define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c)) | ||
323 | #else | ||
324 | static inline void memset_io(volatile void __iomem *addr, unsigned char val, int count) | ||
325 | { | ||
326 | memset((void __force *)addr, val, count); | ||
327 | } | ||
328 | static inline void memcpy_fromio(void *dst,const volatile void __iomem *src, int count) | ||
329 | { | ||
330 | memcpy(dst, (void __force *) src, count); | ||
331 | } | ||
332 | static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int count) | ||
333 | { | ||
334 | memcpy((void __force *) dst, src, count); | ||
335 | } | ||
336 | #endif | ||
337 | |||
338 | /* | ||
339 | * Map in an area of physical address space, for accessing | ||
340 | * I/O devices etc. | ||
341 | */ | ||
342 | extern void __iomem *__ioremap(phys_addr_t address, unsigned long size, | ||
343 | unsigned long flags); | ||
344 | extern void __iomem *ioremap(phys_addr_t address, unsigned long size); | ||
345 | #ifdef CONFIG_44x | ||
346 | extern void __iomem *ioremap64(unsigned long long address, unsigned long size); | ||
347 | #endif | ||
348 | #define ioremap_nocache(addr, size) ioremap((addr), (size)) | ||
349 | extern void iounmap(volatile void __iomem *addr); | ||
350 | extern unsigned long iopa(unsigned long addr); | ||
351 | extern void io_block_mapping(unsigned long virt, phys_addr_t phys, | ||
352 | unsigned int size, int flags); | ||
353 | |||
354 | /* | ||
355 | * The PCI bus is inherently Little-Endian. The PowerPC is being | ||
356 | * run Big-Endian. Thus all values which cross the [PCI] barrier | ||
357 | * must be endian-adjusted. Also, the local DRAM has a different | ||
358 | * address from the PCI point of view, thus buffer addresses also | ||
359 | * have to be modified [mapped] appropriately. | ||
360 | */ | ||
361 | extern inline unsigned long virt_to_bus(volatile void * address) | ||
362 | { | ||
363 | if (address == (void *)0) | ||
364 | return 0; | ||
365 | return (unsigned long)address - KERNELBASE + PCI_DRAM_OFFSET; | ||
366 | } | ||
367 | |||
368 | extern inline void * bus_to_virt(unsigned long address) | ||
369 | { | ||
370 | if (address == 0) | ||
371 | return NULL; | ||
372 | return (void *)(address - PCI_DRAM_OFFSET + KERNELBASE); | ||
373 | } | ||
374 | |||
375 | /* | ||
376 | * Change virtual addresses to physical addresses and vv, for | ||
377 | * addresses in the area where the kernel has the RAM mapped. | ||
378 | */ | ||
379 | extern inline unsigned long virt_to_phys(volatile void * address) | ||
380 | { | ||
381 | return (unsigned long) address - KERNELBASE; | ||
382 | } | ||
383 | |||
384 | extern inline void * phys_to_virt(unsigned long address) | ||
385 | { | ||
386 | return (void *) (address + KERNELBASE); | ||
387 | } | ||
388 | |||
389 | /* | ||
390 | * Change "struct page" to physical address. | ||
391 | */ | ||
392 | #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) | ||
393 | #define page_to_bus(page) (page_to_phys(page) + PCI_DRAM_OFFSET) | ||
394 | |||
395 | /* Enforce in-order execution of data I/O. | ||
396 | * No distinction between read/write on PPC; use eieio for all three. | ||
397 | */ | ||
398 | #define iobarrier_rw() eieio() | ||
399 | #define iobarrier_r() eieio() | ||
400 | #define iobarrier_w() eieio() | ||
401 | |||
402 | /* | ||
403 | * Here comes the ppc implementation of the IOMAP | ||
404 | * interfaces. | ||
405 | */ | ||
406 | static inline unsigned int ioread8(void __iomem *addr) | ||
407 | { | ||
408 | return readb(addr); | ||
409 | } | ||
410 | |||
411 | static inline unsigned int ioread16(void __iomem *addr) | ||
412 | { | ||
413 | return readw(addr); | ||
414 | } | ||
415 | |||
416 | static inline unsigned int ioread32(void __iomem *addr) | ||
417 | { | ||
418 | return readl(addr); | ||
419 | } | ||
420 | |||
421 | static inline void iowrite8(u8 val, void __iomem *addr) | ||
422 | { | ||
423 | writeb(val, addr); | ||
424 | } | ||
425 | |||
426 | static inline void iowrite16(u16 val, void __iomem *addr) | ||
427 | { | ||
428 | writew(val, addr); | ||
429 | } | ||
430 | |||
431 | static inline void iowrite32(u32 val, void __iomem *addr) | ||
432 | { | ||
433 | writel(val, addr); | ||
434 | } | ||
435 | |||
436 | static inline void ioread8_rep(void __iomem *addr, void *dst, unsigned long count) | ||
437 | { | ||
438 | _insb(addr, dst, count); | ||
439 | } | ||
440 | |||
441 | static inline void ioread16_rep(void __iomem *addr, void *dst, unsigned long count) | ||
442 | { | ||
443 | _insw_ns(addr, dst, count); | ||
444 | } | ||
445 | |||
446 | static inline void ioread32_rep(void __iomem *addr, void *dst, unsigned long count) | ||
447 | { | ||
448 | _insl_ns(addr, dst, count); | ||
449 | } | ||
450 | |||
451 | static inline void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count) | ||
452 | { | ||
453 | _outsb(addr, src, count); | ||
454 | } | ||
455 | |||
456 | static inline void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count) | ||
457 | { | ||
458 | _outsw_ns(addr, src, count); | ||
459 | } | ||
460 | |||
461 | static inline void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count) | ||
462 | { | ||
463 | _outsl_ns(addr, src, count); | ||
464 | } | ||
465 | |||
466 | /* Create a virtual mapping cookie for an IO port range */ | ||
467 | extern void __iomem *ioport_map(unsigned long port, unsigned int nr); | ||
468 | extern void ioport_unmap(void __iomem *); | ||
469 | |||
470 | /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ | ||
471 | struct pci_dev; | ||
472 | extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); | ||
473 | extern void pci_iounmap(struct pci_dev *dev, void __iomem *); | ||
474 | |||
475 | #endif /* _PPC_IO_H */ | ||
476 | |||
477 | #ifdef CONFIG_8260_PCI9 | ||
478 | #include <asm/mpc8260_pci9.h> | ||
479 | #endif | ||
480 | |||
481 | /* | ||
482 | * Convert a physical pointer to a virtual kernel pointer for /dev/mem | ||
483 | * access | ||
484 | */ | ||
485 | #define xlate_dev_mem_ptr(p) __va(p) | ||
486 | |||
487 | /* | ||
488 | * Convert a virtual cached pointer to an uncached pointer | ||
489 | */ | ||
490 | #define xlate_dev_kmem_ptr(p) p | ||
491 | |||
492 | /* access ports */ | ||
493 | #define setbits32(_addr, _v) out_be32((_addr), in_be32(_addr) | (_v)) | ||
494 | #define clrbits32(_addr, _v) out_be32((_addr), in_be32(_addr) & ~(_v)) | ||
495 | |||
496 | #define setbits16(_addr, _v) out_be16((_addr), in_be16(_addr) | (_v)) | ||
497 | #define clrbits16(_addr, _v) out_be16((_addr), in_be16(_addr) & ~(_v)) | ||
498 | |||
499 | #define setbits8(_addr, _v) out_8((_addr), in_8(_addr) | (_v)) | ||
500 | #define clrbits8(_addr, _v) out_8((_addr), in_8(_addr) & ~(_v)) | ||
501 | |||
502 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/irq_regs.h b/include/asm-ppc/irq_regs.h deleted file mode 100644 index 3dd9c0b70270..000000000000 --- a/include/asm-ppc/irq_regs.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/irq_regs.h> | ||
diff --git a/include/asm-ppc/kdebug.h b/include/asm-ppc/kdebug.h deleted file mode 100644 index 6ece1b037665..000000000000 --- a/include/asm-ppc/kdebug.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/kdebug.h> | ||
diff --git a/include/asm-ppc/kgdb.h b/include/asm-ppc/kgdb.h deleted file mode 100644 index b617dac82969..000000000000 --- a/include/asm-ppc/kgdb.h +++ /dev/null | |||
@@ -1,57 +0,0 @@ | |||
1 | /* | ||
2 | * kgdb.h: Defines and declarations for serial line source level | ||
3 | * remote debugging of the Linux kernel using gdb. | ||
4 | * | ||
5 | * PPC Mods (C) 1998 Michael Tesch (tesch@cs.wisc.edu) | ||
6 | * | ||
7 | * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) | ||
8 | */ | ||
9 | #ifdef __KERNEL__ | ||
10 | #ifndef _PPC_KGDB_H | ||
11 | #define _PPC_KGDB_H | ||
12 | |||
13 | #ifndef __ASSEMBLY__ | ||
14 | |||
15 | /* Things specific to the gen550 backend. */ | ||
16 | struct uart_port; | ||
17 | |||
18 | extern void gen550_progress(char *, unsigned short); | ||
19 | extern void gen550_kgdb_map_scc(void); | ||
20 | extern void gen550_init(int, struct uart_port *); | ||
21 | |||
22 | /* Things specific to the pmac backend. */ | ||
23 | extern void zs_kgdb_hook(int tty_num); | ||
24 | |||
25 | /* To init the kgdb engine. (called by serial hook)*/ | ||
26 | extern void set_debug_traps(void); | ||
27 | |||
28 | /* To enter the debugger explicitly. */ | ||
29 | extern void breakpoint(void); | ||
30 | |||
31 | /* For taking exceptions | ||
32 | * these are defined in traps.c | ||
33 | */ | ||
34 | extern int (*debugger)(struct pt_regs *regs); | ||
35 | extern int (*debugger_bpt)(struct pt_regs *regs); | ||
36 | extern int (*debugger_sstep)(struct pt_regs *regs); | ||
37 | extern int (*debugger_iabr_match)(struct pt_regs *regs); | ||
38 | extern int (*debugger_dabr_match)(struct pt_regs *regs); | ||
39 | extern void (*debugger_fault_handler)(struct pt_regs *regs); | ||
40 | |||
41 | /* What we bring to the party */ | ||
42 | int kgdb_bpt(struct pt_regs *regs); | ||
43 | int kgdb_sstep(struct pt_regs *regs); | ||
44 | void kgdb(struct pt_regs *regs); | ||
45 | int kgdb_iabr_match(struct pt_regs *regs); | ||
46 | int kgdb_dabr_match(struct pt_regs *regs); | ||
47 | |||
48 | /* | ||
49 | * external low-level support routines (ie macserial.c) | ||
50 | */ | ||
51 | extern void kgdb_interruptible(int); /* control interrupts from serial */ | ||
52 | extern void putDebugChar(char); /* write a single character */ | ||
53 | extern char getDebugChar(void); /* read and return a single char */ | ||
54 | |||
55 | #endif /* !(__ASSEMBLY__) */ | ||
56 | #endif /* !(_PPC_KGDB_H) */ | ||
57 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/m8260_pci.h b/include/asm-ppc/m8260_pci.h deleted file mode 100644 index bf9e05dd54b5..000000000000 --- a/include/asm-ppc/m8260_pci.h +++ /dev/null | |||
@@ -1,187 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/m8260_pci.h | ||
3 | * | ||
4 | * Definitions for the MPC8250/MPC8265/MPC8266 integrated PCI host bridge. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | */ | ||
11 | |||
12 | #ifdef __KERNEL__ | ||
13 | #ifndef __M8260_PCI_H | ||
14 | #define __M8260_PCI_H | ||
15 | |||
16 | #include <linux/pci_ids.h> | ||
17 | |||
18 | /* | ||
19 | * Define the vendor/device ID for the MPC8265. | ||
20 | */ | ||
21 | #define PCI_DEVICE_ID_MPC8265 ((0x18C0 << 16) | PCI_VENDOR_ID_MOTOROLA) | ||
22 | #define PCI_DEVICE_ID_MPC8272 ((0x18C1 << 16) | PCI_VENDOR_ID_MOTOROLA) | ||
23 | |||
24 | #define M8265_PCIBR0 0x101ac | ||
25 | #define M8265_PCIBR1 0x101b0 | ||
26 | #define M8265_PCIMSK0 0x101c4 | ||
27 | #define M8265_PCIMSK1 0x101c8 | ||
28 | |||
29 | /* Bit definitions for PCIBR registers */ | ||
30 | |||
31 | #define PCIBR_ENABLE 0x00000001 | ||
32 | |||
33 | /* Bit definitions for PCIMSK registers */ | ||
34 | |||
35 | #define PCIMSK_32KiB 0xFFFF8000 /* Size of window, smallest */ | ||
36 | #define PCIMSK_64KiB 0xFFFF0000 | ||
37 | #define PCIMSK_128KiB 0xFFFE0000 | ||
38 | #define PCIMSK_256KiB 0xFFFC0000 | ||
39 | #define PCIMSK_512KiB 0xFFF80000 | ||
40 | #define PCIMSK_1MiB 0xFFF00000 | ||
41 | #define PCIMSK_2MiB 0xFFE00000 | ||
42 | #define PCIMSK_4MiB 0xFFC00000 | ||
43 | #define PCIMSK_8MiB 0xFF800000 | ||
44 | #define PCIMSK_16MiB 0xFF000000 | ||
45 | #define PCIMSK_32MiB 0xFE000000 | ||
46 | #define PCIMSK_64MiB 0xFC000000 | ||
47 | #define PCIMSK_128MiB 0xF8000000 | ||
48 | #define PCIMSK_256MiB 0xF0000000 | ||
49 | #define PCIMSK_512MiB 0xE0000000 | ||
50 | #define PCIMSK_1GiB 0xC0000000 /* Size of window, largest */ | ||
51 | |||
52 | |||
53 | #define M826X_SCCR_PCI_MODE_EN 0x100 | ||
54 | |||
55 | |||
56 | /* | ||
57 | * Outbound ATU registers (3 sets). These registers control how 60x bus (local) | ||
58 | * addresses are translated to PCI addresses when the MPC826x is a PCI bus | ||
59 | * master (initiator). | ||
60 | */ | ||
61 | |||
62 | #define POTAR_REG0 0x10800 /* PCI Outbound Translation Addr registers */ | ||
63 | #define POTAR_REG1 0x10818 | ||
64 | #define POTAR_REG2 0x10830 | ||
65 | |||
66 | #define POBAR_REG0 0x10808 /* PCI Outbound Base Addr registers */ | ||
67 | #define POBAR_REG1 0x10820 | ||
68 | #define POBAR_REG2 0x10838 | ||
69 | |||
70 | #define POCMR_REG0 0x10810 /* PCI Outbound Comparison Mask registers */ | ||
71 | #define POCMR_REG1 0x10828 | ||
72 | #define POCMR_REG2 0x10840 | ||
73 | |||
74 | /* Bit definitions for POMCR registers */ | ||
75 | |||
76 | #define POCMR_MASK_4KiB 0x000FFFFF | ||
77 | #define POCMR_MASK_8KiB 0x000FFFFE | ||
78 | #define POCMR_MASK_16KiB 0x000FFFFC | ||
79 | #define POCMR_MASK_32KiB 0x000FFFF8 | ||
80 | #define POCMR_MASK_64KiB 0x000FFFF0 | ||
81 | #define POCMR_MASK_128KiB 0x000FFFE0 | ||
82 | #define POCMR_MASK_256KiB 0x000FFFC0 | ||
83 | #define POCMR_MASK_512KiB 0x000FFF80 | ||
84 | #define POCMR_MASK_1MiB 0x000FFF00 | ||
85 | #define POCMR_MASK_2MiB 0x000FFE00 | ||
86 | #define POCMR_MASK_4MiB 0x000FFC00 | ||
87 | #define POCMR_MASK_8MiB 0x000FF800 | ||
88 | #define POCMR_MASK_16MiB 0x000FF000 | ||
89 | #define POCMR_MASK_32MiB 0x000FE000 | ||
90 | #define POCMR_MASK_64MiB 0x000FC000 | ||
91 | #define POCMR_MASK_128MiB 0x000F8000 | ||
92 | #define POCMR_MASK_256MiB 0x000F0000 | ||
93 | #define POCMR_MASK_512MiB 0x000E0000 | ||
94 | #define POCMR_MASK_1GiB 0x000C0000 | ||
95 | |||
96 | #define POCMR_ENABLE 0x80000000 | ||
97 | #define POCMR_PCI_IO 0x40000000 | ||
98 | #define POCMR_PREFETCH_EN 0x20000000 | ||
99 | |||
100 | /* Soft PCI reset */ | ||
101 | |||
102 | #define PCI_GCR_REG 0x10880 | ||
103 | |||
104 | /* Bit definitions for PCI_GCR registers */ | ||
105 | |||
106 | #define PCIGCR_PCI_BUS_EN 0x1 | ||
107 | |||
108 | #define PCI_EMR_REG 0x10888 | ||
109 | /* | ||
110 | * Inbound ATU registers (2 sets). These registers control how PCI addresses | ||
111 | * are translated to 60x bus (local) addresses when the MPC826x is a PCI bus target. | ||
112 | */ | ||
113 | |||
114 | #define PITAR_REG1 0x108D0 | ||
115 | #define PIBAR_REG1 0x108D8 | ||
116 | #define PICMR_REG1 0x108E0 | ||
117 | #define PITAR_REG0 0x108E8 | ||
118 | #define PIBAR_REG0 0x108F0 | ||
119 | #define PICMR_REG0 0x108F8 | ||
120 | |||
121 | /* Bit definitions for PCI Inbound Comparison Mask registers */ | ||
122 | |||
123 | #define PICMR_MASK_4KiB 0x000FFFFF | ||
124 | #define PICMR_MASK_8KiB 0x000FFFFE | ||
125 | #define PICMR_MASK_16KiB 0x000FFFFC | ||
126 | #define PICMR_MASK_32KiB 0x000FFFF8 | ||
127 | #define PICMR_MASK_64KiB 0x000FFFF0 | ||
128 | #define PICMR_MASK_128KiB 0x000FFFE0 | ||
129 | #define PICMR_MASK_256KiB 0x000FFFC0 | ||
130 | #define PICMR_MASK_512KiB 0x000FFF80 | ||
131 | #define PICMR_MASK_1MiB 0x000FFF00 | ||
132 | #define PICMR_MASK_2MiB 0x000FFE00 | ||
133 | #define PICMR_MASK_4MiB 0x000FFC00 | ||
134 | #define PICMR_MASK_8MiB 0x000FF800 | ||
135 | #define PICMR_MASK_16MiB 0x000FF000 | ||
136 | #define PICMR_MASK_32MiB 0x000FE000 | ||
137 | #define PICMR_MASK_64MiB 0x000FC000 | ||
138 | #define PICMR_MASK_128MiB 0x000F8000 | ||
139 | #define PICMR_MASK_256MiB 0x000F0000 | ||
140 | #define PICMR_MASK_512MiB 0x000E0000 | ||
141 | #define PICMR_MASK_1GiB 0x000C0000 | ||
142 | |||
143 | #define PICMR_ENABLE 0x80000000 | ||
144 | #define PICMR_NO_SNOOP_EN 0x40000000 | ||
145 | #define PICMR_PREFETCH_EN 0x20000000 | ||
146 | |||
147 | /* PCI error Registers */ | ||
148 | |||
149 | #define PCI_ERROR_STATUS_REG 0x10884 | ||
150 | #define PCI_ERROR_MASK_REG 0x10888 | ||
151 | #define PCI_ERROR_CONTROL_REG 0x1088C | ||
152 | #define PCI_ERROR_ADRS_CAPTURE_REG 0x10890 | ||
153 | #define PCI_ERROR_DATA_CAPTURE_REG 0x10898 | ||
154 | #define PCI_ERROR_CTRL_CAPTURE_REG 0x108A0 | ||
155 | |||
156 | /* PCI error Register bit defines */ | ||
157 | |||
158 | #define PCI_ERROR_PCI_ADDR_PAR 0x00000001 | ||
159 | #define PCI_ERROR_PCI_DATA_PAR_WR 0x00000002 | ||
160 | #define PCI_ERROR_PCI_DATA_PAR_RD 0x00000004 | ||
161 | #define PCI_ERROR_PCI_NO_RSP 0x00000008 | ||
162 | #define PCI_ERROR_PCI_TAR_ABT 0x00000010 | ||
163 | #define PCI_ERROR_PCI_SERR 0x00000020 | ||
164 | #define PCI_ERROR_PCI_PERR_RD 0x00000040 | ||
165 | #define PCI_ERROR_PCI_PERR_WR 0x00000080 | ||
166 | #define PCI_ERROR_I2O_OFQO 0x00000100 | ||
167 | #define PCI_ERROR_I2O_IPQO 0x00000200 | ||
168 | #define PCI_ERROR_IRA 0x00000400 | ||
169 | #define PCI_ERROR_NMI 0x00000800 | ||
170 | #define PCI_ERROR_I2O_DBMC 0x00001000 | ||
171 | |||
172 | /* | ||
173 | * Register pair used to generate configuration cycles on the PCI bus | ||
174 | * and access the MPC826x's own PCI configuration registers. | ||
175 | */ | ||
176 | |||
177 | #define PCI_CFG_ADDR_REG 0x10900 | ||
178 | #define PCI_CFG_DATA_REG 0x10904 | ||
179 | |||
180 | /* Bus parking decides where the bus control sits when idle */ | ||
181 | /* If modifying memory controllers for PCI park on the core */ | ||
182 | |||
183 | #define PPC_ACR_BUS_PARK_CORE 0x6 | ||
184 | #define PPC_ACR_BUS_PARK_PCI 0x3 | ||
185 | |||
186 | #endif /* __M8260_PCI_H */ | ||
187 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/machdep.h b/include/asm-ppc/machdep.h deleted file mode 100644 index a20b499b0186..000000000000 --- a/include/asm-ppc/machdep.h +++ /dev/null | |||
@@ -1,178 +0,0 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | #ifndef _PPC_MACHDEP_H | ||
3 | #define _PPC_MACHDEP_H | ||
4 | |||
5 | #include <linux/init.h> | ||
6 | #include <linux/kexec.h> | ||
7 | |||
8 | #include <asm/setup.h> | ||
9 | #include <asm/page.h> | ||
10 | |||
11 | struct pt_regs; | ||
12 | struct pci_bus; | ||
13 | struct pci_dev; | ||
14 | struct seq_file; | ||
15 | struct file; | ||
16 | |||
17 | /* | ||
18 | * This is for compatibility with ARCH=powerpc. | ||
19 | */ | ||
20 | #define machine_is(x) __MACHINE_IS_##x | ||
21 | #define __MACHINE_IS_powermac 0 | ||
22 | #define __MACHINE_IS_chrp 0 | ||
23 | #ifdef CONFIG_PPC_PREP | ||
24 | #define __MACHINE_IS_prep 1 | ||
25 | #else | ||
26 | #define __MACHINE_IS_prep 0 | ||
27 | #endif | ||
28 | |||
29 | /* We export this macro for external modules like Alsa to know if | ||
30 | * ppc_md.feature_call is implemented or not | ||
31 | */ | ||
32 | #define CONFIG_PPC_HAS_FEATURE_CALLS | ||
33 | |||
34 | struct machdep_calls { | ||
35 | void (*setup_arch)(void); | ||
36 | /* Optional, may be NULL. */ | ||
37 | int (*show_cpuinfo)(struct seq_file *m); | ||
38 | int (*show_percpuinfo)(struct seq_file *m, int i); | ||
39 | /* Optional, may be NULL. */ | ||
40 | unsigned int (*irq_canonicalize)(unsigned int irq); | ||
41 | void (*init_IRQ)(void); | ||
42 | int (*get_irq)(void); | ||
43 | |||
44 | /* A general init function, called by ppc_init in init/main.c. | ||
45 | May be NULL. DEPRECATED ! */ | ||
46 | void (*init)(void); | ||
47 | /* For compatibility with merged platforms */ | ||
48 | void (*init_early)(void); | ||
49 | |||
50 | void (*restart)(char *cmd); | ||
51 | void (*power_off)(void); | ||
52 | void (*halt)(void); | ||
53 | |||
54 | void (*idle_loop)(void); | ||
55 | void (*power_save)(void); | ||
56 | |||
57 | long (*time_init)(void); /* Optional, may be NULL */ | ||
58 | int (*set_rtc_time)(unsigned long nowtime); | ||
59 | unsigned long (*get_rtc_time)(void); | ||
60 | unsigned char (*rtc_read_val)(int addr); | ||
61 | void (*rtc_write_val)(int addr, unsigned char val); | ||
62 | void (*calibrate_decr)(void); | ||
63 | |||
64 | void (*heartbeat)(void); | ||
65 | unsigned long heartbeat_reset; | ||
66 | unsigned long heartbeat_count; | ||
67 | |||
68 | unsigned long (*find_end_of_memory)(void); | ||
69 | void (*setup_io_mappings)(void); | ||
70 | |||
71 | void (*early_serial_map)(void); | ||
72 | void (*progress)(char *, unsigned short); | ||
73 | void (*kgdb_map_scc)(void); | ||
74 | |||
75 | unsigned char (*nvram_read_val)(int addr); | ||
76 | void (*nvram_write_val)(int addr, unsigned char val); | ||
77 | void (*nvram_sync)(void); | ||
78 | |||
79 | /* | ||
80 | * optional PCI "hooks" | ||
81 | */ | ||
82 | |||
83 | /* Called after scanning the bus, before allocating resources */ | ||
84 | void (*pcibios_fixup)(void); | ||
85 | |||
86 | /* Called after PPC generic resource fixup to perform | ||
87 | machine specific fixups */ | ||
88 | void (*pcibios_fixup_resources)(struct pci_dev *); | ||
89 | |||
90 | /* Called for each PCI bus in the system when it's probed */ | ||
91 | void (*pcibios_fixup_bus)(struct pci_bus *); | ||
92 | |||
93 | /* Called when pci_enable_device() is called (initial=0) or | ||
94 | * when a device with no assigned resource is found (initial=1). | ||
95 | * Returns 0 to allow assignment/enabling of the device. */ | ||
96 | int (*pcibios_enable_device_hook)(struct pci_dev *, int initial); | ||
97 | |||
98 | /* For interrupt routing */ | ||
99 | unsigned char (*pci_swizzle)(struct pci_dev *, unsigned char *); | ||
100 | int (*pci_map_irq)(struct pci_dev *, unsigned char, unsigned char); | ||
101 | |||
102 | /* Called in indirect_* to avoid touching devices */ | ||
103 | int (*pci_exclude_device)(unsigned char, unsigned char); | ||
104 | |||
105 | /* Called at then very end of pcibios_init() */ | ||
106 | void (*pcibios_after_init)(void); | ||
107 | |||
108 | /* Get access protection for /dev/mem */ | ||
109 | pgprot_t (*phys_mem_access_prot)(struct file *file, | ||
110 | unsigned long pfn, | ||
111 | unsigned long size, | ||
112 | pgprot_t vma_prot); | ||
113 | |||
114 | /* Motherboard/chipset features. This is a kind of general purpose | ||
115 | * hook used to control some machine specific features (like reset | ||
116 | * lines, chip power control, etc...). | ||
117 | */ | ||
118 | long (*feature_call)(unsigned int feature, ...); | ||
119 | |||
120 | #ifdef CONFIG_SMP | ||
121 | /* functions for dealing with other cpus */ | ||
122 | struct smp_ops_t *smp_ops; | ||
123 | #endif /* CONFIG_SMP */ | ||
124 | |||
125 | #ifdef CONFIG_KEXEC | ||
126 | /* Called to shutdown machine specific hardware not already controlled | ||
127 | * by other drivers. | ||
128 | * XXX Should we move this one out of kexec scope? | ||
129 | */ | ||
130 | void (*machine_shutdown)(void); | ||
131 | |||
132 | /* Called to do the minimal shutdown needed to run a kexec'd kernel | ||
133 | * to run successfully. | ||
134 | * XXX Should we move this one out of kexec scope? | ||
135 | */ | ||
136 | void (*machine_crash_shutdown)(void); | ||
137 | |||
138 | /* Called to do what every setup is needed on image and the | ||
139 | * reboot code buffer. Returns 0 on success. | ||
140 | * Provide your own (maybe dummy) implementation if your platform | ||
141 | * claims to support kexec. | ||
142 | */ | ||
143 | int (*machine_kexec_prepare)(struct kimage *image); | ||
144 | |||
145 | /* Called to handle any machine specific cleanup on image */ | ||
146 | void (*machine_kexec_cleanup)(struct kimage *image); | ||
147 | |||
148 | /* Called to perform the _real_ kexec. | ||
149 | * Do NOT allocate memory or fail here. We are past the point of | ||
150 | * no return. | ||
151 | */ | ||
152 | void (*machine_kexec)(struct kimage *image); | ||
153 | #endif /* CONFIG_KEXEC */ | ||
154 | }; | ||
155 | |||
156 | extern struct machdep_calls ppc_md; | ||
157 | extern char cmd_line[COMMAND_LINE_SIZE]; | ||
158 | |||
159 | extern void setup_pci_ptrs(void); | ||
160 | |||
161 | #ifdef CONFIG_SMP | ||
162 | struct smp_ops_t { | ||
163 | void (*message_pass)(int target, int msg); | ||
164 | int (*probe)(void); | ||
165 | void (*kick_cpu)(int nr); | ||
166 | void (*setup_cpu)(int nr); | ||
167 | void (*space_timers)(int nr); | ||
168 | void (*take_timebase)(void); | ||
169 | void (*give_timebase)(void); | ||
170 | }; | ||
171 | |||
172 | /* Poor default implementations */ | ||
173 | extern void __devinit smp_generic_give_timebase(void); | ||
174 | extern void __devinit smp_generic_take_timebase(void); | ||
175 | #endif /* CONFIG_SMP */ | ||
176 | |||
177 | #endif /* _PPC_MACHDEP_H */ | ||
178 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/md.h b/include/asm-ppc/md.h deleted file mode 100644 index 9a9b6b42b4b4..000000000000 --- a/include/asm-ppc/md.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | /* | ||
2 | * md.h: High speed xor_block operation for RAID4/5 | ||
3 | * | ||
4 | */ | ||
5 | |||
6 | #ifdef __KERNEL__ | ||
7 | #ifndef __ASM_MD_H | ||
8 | #define __ASM_MD_H | ||
9 | |||
10 | /* #define HAVE_ARCH_XORBLOCK */ | ||
11 | |||
12 | #define MD_XORBLOCK_ALIGNMENT sizeof(long) | ||
13 | |||
14 | #endif /* __ASM_MD_H */ | ||
15 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/mk48t59.h b/include/asm-ppc/mk48t59.h deleted file mode 100644 index 6a0ed6fc2d56..000000000000 --- a/include/asm-ppc/mk48t59.h +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | /* | ||
2 | * Registers for the mk48t59 real-time-clock | ||
3 | */ | ||
4 | |||
5 | #ifndef _PPC_MK48T59_H | ||
6 | #define _PPC_MK48T59_H | ||
7 | |||
8 | /* RTC Offsets */ | ||
9 | |||
10 | #define MK48T59_RTC_SECONDS 0x1FF9 | ||
11 | #define MK48T59_RTC_MINUTES 0x1FFA | ||
12 | #define MK48T59_RTC_HOURS 0x1FFB | ||
13 | #define MK48T59_RTC_DAY_OF_WEEK 0x1FFC | ||
14 | #define MK48T59_RTC_DAY_OF_MONTH 0x1FFD | ||
15 | #define MK48T59_RTC_MONTH 0x1FFE | ||
16 | #define MK48T59_RTC_YEAR 0x1FFF | ||
17 | |||
18 | #define MK48T59_RTC_CONTROLA 0x1FF8 | ||
19 | #define MK48T59_RTC_CA_WRITE 0x80 | ||
20 | #define MK48T59_RTC_CA_READ 0x40 | ||
21 | #define MK48T59_RTC_CA_CALIB_SIGN 0x20 | ||
22 | #define MK48T59_RTC_CA_CALIB_MASK 0x1f | ||
23 | |||
24 | #define MK48T59_RTC_CONTROLB 0x1FF9 | ||
25 | #define MK48T59_RTC_CB_STOP 0x80 | ||
26 | |||
27 | #endif /* _PPC_MK48T59_H */ | ||
diff --git a/include/asm-ppc/mmu.h b/include/asm-ppc/mmu.h deleted file mode 100644 index d76ef098ed37..000000000000 --- a/include/asm-ppc/mmu.h +++ /dev/null | |||
@@ -1,444 +0,0 @@ | |||
1 | /* | ||
2 | * PowerPC memory management structures | ||
3 | */ | ||
4 | |||
5 | #ifdef __KERNEL__ | ||
6 | #ifndef _PPC_MMU_H_ | ||
7 | #define _PPC_MMU_H_ | ||
8 | |||
9 | |||
10 | #ifndef __ASSEMBLY__ | ||
11 | |||
12 | /* | ||
13 | * Define physical address type. Machines using split size | ||
14 | * virtual/physical addressing like 32-bit virtual / 36-bit | ||
15 | * physical need a larger than native word size type. -Matt | ||
16 | */ | ||
17 | #ifndef CONFIG_PHYS_64BIT | ||
18 | #define PHYS_FMT "%.8lx" | ||
19 | #else | ||
20 | extern phys_addr_t fixup_bigphys_addr(phys_addr_t, phys_addr_t); | ||
21 | #define PHYS_FMT "%16Lx" | ||
22 | #endif | ||
23 | |||
24 | typedef struct { | ||
25 | unsigned long id; | ||
26 | unsigned long vdso_base; | ||
27 | } mm_context_t; | ||
28 | |||
29 | /* Hardware Page Table Entry */ | ||
30 | typedef struct _PTE { | ||
31 | unsigned long v:1; /* Entry is valid */ | ||
32 | unsigned long vsid:24; /* Virtual segment identifier */ | ||
33 | unsigned long h:1; /* Hash algorithm indicator */ | ||
34 | unsigned long api:6; /* Abbreviated page index */ | ||
35 | unsigned long rpn:20; /* Real (physical) page number */ | ||
36 | unsigned long :3; /* Unused */ | ||
37 | unsigned long r:1; /* Referenced */ | ||
38 | unsigned long c:1; /* Changed */ | ||
39 | unsigned long w:1; /* Write-thru cache mode */ | ||
40 | unsigned long i:1; /* Cache inhibited */ | ||
41 | unsigned long m:1; /* Memory coherence */ | ||
42 | unsigned long g:1; /* Guarded */ | ||
43 | unsigned long :1; /* Unused */ | ||
44 | unsigned long pp:2; /* Page protection */ | ||
45 | } PTE; | ||
46 | |||
47 | /* Values for PP (assumes Ks=0, Kp=1) */ | ||
48 | #define PP_RWXX 0 /* Supervisor read/write, User none */ | ||
49 | #define PP_RWRX 1 /* Supervisor read/write, User read */ | ||
50 | #define PP_RWRW 2 /* Supervisor read/write, User read/write */ | ||
51 | #define PP_RXRX 3 /* Supervisor read, User read */ | ||
52 | |||
53 | /* Segment Register */ | ||
54 | typedef struct _SEGREG { | ||
55 | unsigned long t:1; /* Normal or I/O type */ | ||
56 | unsigned long ks:1; /* Supervisor 'key' (normally 0) */ | ||
57 | unsigned long kp:1; /* User 'key' (normally 1) */ | ||
58 | unsigned long n:1; /* No-execute */ | ||
59 | unsigned long :4; /* Unused */ | ||
60 | unsigned long vsid:24; /* Virtual Segment Identifier */ | ||
61 | } SEGREG; | ||
62 | |||
63 | /* Block Address Translation (BAT) Registers */ | ||
64 | typedef struct _P601_BATU { /* Upper part of BAT for 601 processor */ | ||
65 | unsigned long bepi:15; /* Effective page index (virtual address) */ | ||
66 | unsigned long :8; /* unused */ | ||
67 | unsigned long w:1; | ||
68 | unsigned long i:1; /* Cache inhibit */ | ||
69 | unsigned long m:1; /* Memory coherence */ | ||
70 | unsigned long ks:1; /* Supervisor key (normally 0) */ | ||
71 | unsigned long kp:1; /* User key (normally 1) */ | ||
72 | unsigned long pp:2; /* Page access protections */ | ||
73 | } P601_BATU; | ||
74 | |||
75 | typedef struct _BATU { /* Upper part of BAT (all except 601) */ | ||
76 | unsigned long bepi:15; /* Effective page index (virtual address) */ | ||
77 | unsigned long :4; /* Unused */ | ||
78 | unsigned long bl:11; /* Block size mask */ | ||
79 | unsigned long vs:1; /* Supervisor valid */ | ||
80 | unsigned long vp:1; /* User valid */ | ||
81 | } BATU; | ||
82 | |||
83 | typedef struct _P601_BATL { /* Lower part of BAT for 601 processor */ | ||
84 | unsigned long brpn:15; /* Real page index (physical address) */ | ||
85 | unsigned long :10; /* Unused */ | ||
86 | unsigned long v:1; /* Valid bit */ | ||
87 | unsigned long bl:6; /* Block size mask */ | ||
88 | } P601_BATL; | ||
89 | |||
90 | typedef struct _BATL { /* Lower part of BAT (all except 601) */ | ||
91 | unsigned long brpn:15; /* Real page index (physical address) */ | ||
92 | unsigned long :10; /* Unused */ | ||
93 | unsigned long w:1; /* Write-thru cache */ | ||
94 | unsigned long i:1; /* Cache inhibit */ | ||
95 | unsigned long m:1; /* Memory coherence */ | ||
96 | unsigned long g:1; /* Guarded (MBZ in IBAT) */ | ||
97 | unsigned long :1; /* Unused */ | ||
98 | unsigned long pp:2; /* Page access protections */ | ||
99 | } BATL; | ||
100 | |||
101 | typedef struct _BAT { | ||
102 | BATU batu; /* Upper register */ | ||
103 | BATL batl; /* Lower register */ | ||
104 | } BAT; | ||
105 | |||
106 | typedef struct _P601_BAT { | ||
107 | P601_BATU batu; /* Upper register */ | ||
108 | P601_BATL batl; /* Lower register */ | ||
109 | } P601_BAT; | ||
110 | |||
111 | #endif /* __ASSEMBLY__ */ | ||
112 | |||
113 | /* Block size masks */ | ||
114 | #define BL_128K 0x000 | ||
115 | #define BL_256K 0x001 | ||
116 | #define BL_512K 0x003 | ||
117 | #define BL_1M 0x007 | ||
118 | #define BL_2M 0x00F | ||
119 | #define BL_4M 0x01F | ||
120 | #define BL_8M 0x03F | ||
121 | #define BL_16M 0x07F | ||
122 | #define BL_32M 0x0FF | ||
123 | #define BL_64M 0x1FF | ||
124 | #define BL_128M 0x3FF | ||
125 | #define BL_256M 0x7FF | ||
126 | |||
127 | /* BAT Access Protection */ | ||
128 | #define BPP_XX 0x00 /* No access */ | ||
129 | #define BPP_RX 0x01 /* Read only */ | ||
130 | #define BPP_RW 0x02 /* Read/write */ | ||
131 | |||
132 | /* Control/status registers for the MPC8xx. | ||
133 | * A write operation to these registers causes serialized access. | ||
134 | * During software tablewalk, the registers used perform mask/shift-add | ||
135 | * operations when written/read. A TLB entry is created when the Mx_RPN | ||
136 | * is written, and the contents of several registers are used to | ||
137 | * create the entry. | ||
138 | */ | ||
139 | #define SPRN_MI_CTR 784 /* Instruction TLB control register */ | ||
140 | #define MI_GPM 0x80000000 /* Set domain manager mode */ | ||
141 | #define MI_PPM 0x40000000 /* Set subpage protection */ | ||
142 | #define MI_CIDEF 0x20000000 /* Set cache inhibit when MMU dis */ | ||
143 | #define MI_RSV4I 0x08000000 /* Reserve 4 TLB entries */ | ||
144 | #define MI_PPCS 0x02000000 /* Use MI_RPN prob/priv state */ | ||
145 | #define MI_IDXMASK 0x00001f00 /* TLB index to be loaded */ | ||
146 | #define MI_RESETVAL 0x00000000 /* Value of register at reset */ | ||
147 | |||
148 | /* These are the Ks and Kp from the PowerPC books. For proper operation, | ||
149 | * Ks = 0, Kp = 1. | ||
150 | */ | ||
151 | #define SPRN_MI_AP 786 | ||
152 | #define MI_Ks 0x80000000 /* Should not be set */ | ||
153 | #define MI_Kp 0x40000000 /* Should always be set */ | ||
154 | |||
155 | /* The effective page number register. When read, contains the information | ||
156 | * about the last instruction TLB miss. When MI_RPN is written, bits in | ||
157 | * this register are used to create the TLB entry. | ||
158 | */ | ||
159 | #define SPRN_MI_EPN 787 | ||
160 | #define MI_EPNMASK 0xfffff000 /* Effective page number for entry */ | ||
161 | #define MI_EVALID 0x00000200 /* Entry is valid */ | ||
162 | #define MI_ASIDMASK 0x0000000f /* ASID match value */ | ||
163 | /* Reset value is undefined */ | ||
164 | |||
165 | /* A "level 1" or "segment" or whatever you want to call it register. | ||
166 | * For the instruction TLB, it contains bits that get loaded into the | ||
167 | * TLB entry when the MI_RPN is written. | ||
168 | */ | ||
169 | #define SPRN_MI_TWC 789 | ||
170 | #define MI_APG 0x000001e0 /* Access protection group (0) */ | ||
171 | #define MI_GUARDED 0x00000010 /* Guarded storage */ | ||
172 | #define MI_PSMASK 0x0000000c /* Mask of page size bits */ | ||
173 | #define MI_PS8MEG 0x0000000c /* 8M page size */ | ||
174 | #define MI_PS512K 0x00000004 /* 512K page size */ | ||
175 | #define MI_PS4K_16K 0x00000000 /* 4K or 16K page size */ | ||
176 | #define MI_SVALID 0x00000001 /* Segment entry is valid */ | ||
177 | /* Reset value is undefined */ | ||
178 | |||
179 | /* Real page number. Defined by the pte. Writing this register | ||
180 | * causes a TLB entry to be created for the instruction TLB, using | ||
181 | * additional information from the MI_EPN, and MI_TWC registers. | ||
182 | */ | ||
183 | #define SPRN_MI_RPN 790 | ||
184 | |||
185 | /* Define an RPN value for mapping kernel memory to large virtual | ||
186 | * pages for boot initialization. This has real page number of 0, | ||
187 | * large page size, shared page, cache enabled, and valid. | ||
188 | * Also mark all subpages valid and write access. | ||
189 | */ | ||
190 | #define MI_BOOTINIT 0x000001fd | ||
191 | |||
192 | #define SPRN_MD_CTR 792 /* Data TLB control register */ | ||
193 | #define MD_GPM 0x80000000 /* Set domain manager mode */ | ||
194 | #define MD_PPM 0x40000000 /* Set subpage protection */ | ||
195 | #define MD_CIDEF 0x20000000 /* Set cache inhibit when MMU dis */ | ||
196 | #define MD_WTDEF 0x10000000 /* Set writethrough when MMU dis */ | ||
197 | #define MD_RSV4I 0x08000000 /* Reserve 4 TLB entries */ | ||
198 | #define MD_TWAM 0x04000000 /* Use 4K page hardware assist */ | ||
199 | #define MD_PPCS 0x02000000 /* Use MI_RPN prob/priv state */ | ||
200 | #define MD_IDXMASK 0x00001f00 /* TLB index to be loaded */ | ||
201 | #define MD_RESETVAL 0x04000000 /* Value of register at reset */ | ||
202 | |||
203 | #define SPRN_M_CASID 793 /* Address space ID (context) to match */ | ||
204 | #define MC_ASIDMASK 0x0000000f /* Bits used for ASID value */ | ||
205 | |||
206 | |||
207 | /* These are the Ks and Kp from the PowerPC books. For proper operation, | ||
208 | * Ks = 0, Kp = 1. | ||
209 | */ | ||
210 | #define SPRN_MD_AP 794 | ||
211 | #define MD_Ks 0x80000000 /* Should not be set */ | ||
212 | #define MD_Kp 0x40000000 /* Should always be set */ | ||
213 | |||
214 | /* The effective page number register. When read, contains the information | ||
215 | * about the last instruction TLB miss. When MD_RPN is written, bits in | ||
216 | * this register are used to create the TLB entry. | ||
217 | */ | ||
218 | #define SPRN_MD_EPN 795 | ||
219 | #define MD_EPNMASK 0xfffff000 /* Effective page number for entry */ | ||
220 | #define MD_EVALID 0x00000200 /* Entry is valid */ | ||
221 | #define MD_ASIDMASK 0x0000000f /* ASID match value */ | ||
222 | /* Reset value is undefined */ | ||
223 | |||
224 | /* The pointer to the base address of the first level page table. | ||
225 | * During a software tablewalk, reading this register provides the address | ||
226 | * of the entry associated with MD_EPN. | ||
227 | */ | ||
228 | #define SPRN_M_TWB 796 | ||
229 | #define M_L1TB 0xfffff000 /* Level 1 table base address */ | ||
230 | #define M_L1INDX 0x00000ffc /* Level 1 index, when read */ | ||
231 | /* Reset value is undefined */ | ||
232 | |||
233 | /* A "level 1" or "segment" or whatever you want to call it register. | ||
234 | * For the data TLB, it contains bits that get loaded into the TLB entry | ||
235 | * when the MD_RPN is written. It is also provides the hardware assist | ||
236 | * for finding the PTE address during software tablewalk. | ||
237 | */ | ||
238 | #define SPRN_MD_TWC 797 | ||
239 | #define MD_L2TB 0xfffff000 /* Level 2 table base address */ | ||
240 | #define MD_L2INDX 0xfffffe00 /* Level 2 index (*pte), when read */ | ||
241 | #define MD_APG 0x000001e0 /* Access protection group (0) */ | ||
242 | #define MD_GUARDED 0x00000010 /* Guarded storage */ | ||
243 | #define MD_PSMASK 0x0000000c /* Mask of page size bits */ | ||
244 | #define MD_PS8MEG 0x0000000c /* 8M page size */ | ||
245 | #define MD_PS512K 0x00000004 /* 512K page size */ | ||
246 | #define MD_PS4K_16K 0x00000000 /* 4K or 16K page size */ | ||
247 | #define MD_WT 0x00000002 /* Use writethrough page attribute */ | ||
248 | #define MD_SVALID 0x00000001 /* Segment entry is valid */ | ||
249 | /* Reset value is undefined */ | ||
250 | |||
251 | |||
252 | /* Real page number. Defined by the pte. Writing this register | ||
253 | * causes a TLB entry to be created for the data TLB, using | ||
254 | * additional information from the MD_EPN, and MD_TWC registers. | ||
255 | */ | ||
256 | #define SPRN_MD_RPN 798 | ||
257 | |||
258 | /* This is a temporary storage register that could be used to save | ||
259 | * a processor working register during a tablewalk. | ||
260 | */ | ||
261 | #define SPRN_M_TW 799 | ||
262 | |||
263 | /* | ||
264 | * At present, all PowerPC 400-class processors share a similar TLB | ||
265 | * architecture. The instruction and data sides share a unified, | ||
266 | * 64-entry, fully-associative TLB which is maintained totally under | ||
267 | * software control. In addition, the instruction side has a | ||
268 | * hardware-managed, 4-entry, fully- associative TLB which serves as a | ||
269 | * first level to the shared TLB. These two TLBs are known as the UTLB | ||
270 | * and ITLB, respectively. | ||
271 | */ | ||
272 | |||
273 | #define PPC4XX_TLB_SIZE 64 | ||
274 | |||
275 | /* | ||
276 | * TLB entries are defined by a "high" tag portion and a "low" data | ||
277 | * portion. On all architectures, the data portion is 32-bits. | ||
278 | * | ||
279 | * TLB entries are managed entirely under software control by reading, | ||
280 | * writing, and searchoing using the 4xx-specific tlbre, tlbwr, and tlbsx | ||
281 | * instructions. | ||
282 | */ | ||
283 | |||
284 | #define TLB_LO 1 | ||
285 | #define TLB_HI 0 | ||
286 | |||
287 | #define TLB_DATA TLB_LO | ||
288 | #define TLB_TAG TLB_HI | ||
289 | |||
290 | /* Tag portion */ | ||
291 | |||
292 | #define TLB_EPN_MASK 0xFFFFFC00 /* Effective Page Number */ | ||
293 | #define TLB_PAGESZ_MASK 0x00000380 | ||
294 | #define TLB_PAGESZ(x) (((x) & 0x7) << 7) | ||
295 | #define PAGESZ_1K 0 | ||
296 | #define PAGESZ_4K 1 | ||
297 | #define PAGESZ_16K 2 | ||
298 | #define PAGESZ_64K 3 | ||
299 | #define PAGESZ_256K 4 | ||
300 | #define PAGESZ_1M 5 | ||
301 | #define PAGESZ_4M 6 | ||
302 | #define PAGESZ_16M 7 | ||
303 | #define TLB_VALID 0x00000040 /* Entry is valid */ | ||
304 | |||
305 | /* Data portion */ | ||
306 | |||
307 | #define TLB_RPN_MASK 0xFFFFFC00 /* Real Page Number */ | ||
308 | #define TLB_PERM_MASK 0x00000300 | ||
309 | #define TLB_EX 0x00000200 /* Instruction execution allowed */ | ||
310 | #define TLB_WR 0x00000100 /* Writes permitted */ | ||
311 | #define TLB_ZSEL_MASK 0x000000F0 | ||
312 | #define TLB_ZSEL(x) (((x) & 0xF) << 4) | ||
313 | #define TLB_ATTR_MASK 0x0000000F | ||
314 | #define TLB_W 0x00000008 /* Caching is write-through */ | ||
315 | #define TLB_I 0x00000004 /* Caching is inhibited */ | ||
316 | #define TLB_M 0x00000002 /* Memory is coherent */ | ||
317 | #define TLB_G 0x00000001 /* Memory is guarded from prefetch */ | ||
318 | |||
319 | /* | ||
320 | * PPC440 support | ||
321 | */ | ||
322 | #define PPC44x_MMUCR_TID 0x000000ff | ||
323 | #define PPC44x_MMUCR_STS 0x00010000 | ||
324 | |||
325 | #define PPC44x_TLB_PAGEID 0 | ||
326 | #define PPC44x_TLB_XLAT 1 | ||
327 | #define PPC44x_TLB_ATTRIB 2 | ||
328 | |||
329 | /* Page identification fields */ | ||
330 | #define PPC44x_TLB_EPN_MASK 0xfffffc00 /* Effective Page Number */ | ||
331 | #define PPC44x_TLB_VALID 0x00000200 /* Valid flag */ | ||
332 | #define PPC44x_TLB_TS 0x00000100 /* Translation address space */ | ||
333 | #define PPC44x_TLB_1K 0x00000000 /* Page sizes */ | ||
334 | #define PPC44x_TLB_4K 0x00000010 | ||
335 | #define PPC44x_TLB_16K 0x00000020 | ||
336 | #define PPC44x_TLB_64K 0x00000030 | ||
337 | #define PPC44x_TLB_256K 0x00000040 | ||
338 | #define PPC44x_TLB_1M 0x00000050 | ||
339 | #define PPC44x_TLB_16M 0x00000070 | ||
340 | #define PPC44x_TLB_256M 0x00000090 | ||
341 | |||
342 | /* Translation fields */ | ||
343 | #define PPC44x_TLB_RPN_MASK 0xfffffc00 /* Real Page Number */ | ||
344 | #define PPC44x_TLB_ERPN_MASK 0x0000000f | ||
345 | |||
346 | /* Storage attribute and access control fields */ | ||
347 | #define PPC44x_TLB_ATTR_MASK 0x0000ff80 | ||
348 | #define PPC44x_TLB_U0 0x00008000 /* User 0 */ | ||
349 | #define PPC44x_TLB_U1 0x00004000 /* User 1 */ | ||
350 | #define PPC44x_TLB_U2 0x00002000 /* User 2 */ | ||
351 | #define PPC44x_TLB_U3 0x00001000 /* User 3 */ | ||
352 | #define PPC44x_TLB_W 0x00000800 /* Caching is write-through */ | ||
353 | #define PPC44x_TLB_I 0x00000400 /* Caching is inhibited */ | ||
354 | #define PPC44x_TLB_M 0x00000200 /* Memory is coherent */ | ||
355 | #define PPC44x_TLB_G 0x00000100 /* Memory is guarded */ | ||
356 | #define PPC44x_TLB_E 0x00000080 /* Memory is guarded */ | ||
357 | |||
358 | #define PPC44x_TLB_PERM_MASK 0x0000003f | ||
359 | #define PPC44x_TLB_UX 0x00000020 /* User execution */ | ||
360 | #define PPC44x_TLB_UW 0x00000010 /* User write */ | ||
361 | #define PPC44x_TLB_UR 0x00000008 /* User read */ | ||
362 | #define PPC44x_TLB_SX 0x00000004 /* Super execution */ | ||
363 | #define PPC44x_TLB_SW 0x00000002 /* Super write */ | ||
364 | #define PPC44x_TLB_SR 0x00000001 /* Super read */ | ||
365 | |||
366 | /* Book-E defined page sizes */ | ||
367 | #define BOOKE_PAGESZ_1K 0 | ||
368 | #define BOOKE_PAGESZ_4K 1 | ||
369 | #define BOOKE_PAGESZ_16K 2 | ||
370 | #define BOOKE_PAGESZ_64K 3 | ||
371 | #define BOOKE_PAGESZ_256K 4 | ||
372 | #define BOOKE_PAGESZ_1M 5 | ||
373 | #define BOOKE_PAGESZ_4M 6 | ||
374 | #define BOOKE_PAGESZ_16M 7 | ||
375 | #define BOOKE_PAGESZ_64M 8 | ||
376 | #define BOOKE_PAGESZ_256M 9 | ||
377 | #define BOOKE_PAGESZ_1GB 10 | ||
378 | #define BOOKE_PAGESZ_4GB 11 | ||
379 | #define BOOKE_PAGESZ_16GB 12 | ||
380 | #define BOOKE_PAGESZ_64GB 13 | ||
381 | #define BOOKE_PAGESZ_256GB 14 | ||
382 | #define BOOKE_PAGESZ_1TB 15 | ||
383 | |||
384 | #ifndef CONFIG_SERIAL_TEXT_DEBUG | ||
385 | #define PPC44x_EARLY_TLBS 1 | ||
386 | #else | ||
387 | #define PPC44x_EARLY_TLBS 2 | ||
388 | #endif | ||
389 | |||
390 | /* | ||
391 | * Freescale Book-E MMU support | ||
392 | */ | ||
393 | |||
394 | #define MAS0_TLBSEL(x) ((x << 28) & 0x30000000) | ||
395 | #define MAS0_ESEL(x) ((x << 16) & 0x0FFF0000) | ||
396 | #define MAS0_NV(x) ((x) & 0x00000FFF) | ||
397 | |||
398 | #define MAS1_VALID 0x80000000 | ||
399 | #define MAS1_IPROT 0x40000000 | ||
400 | #define MAS1_TID(x) ((x << 16) & 0x3FFF0000) | ||
401 | #define MAS1_TS 0x00001000 | ||
402 | #define MAS1_TSIZE(x) ((x << 8) & 0x00000F00) | ||
403 | |||
404 | #define MAS2_EPN 0xFFFFF000 | ||
405 | #define MAS2_X0 0x00000040 | ||
406 | #define MAS2_X1 0x00000020 | ||
407 | #define MAS2_W 0x00000010 | ||
408 | #define MAS2_I 0x00000008 | ||
409 | #define MAS2_M 0x00000004 | ||
410 | #define MAS2_G 0x00000002 | ||
411 | #define MAS2_E 0x00000001 | ||
412 | |||
413 | #define MAS3_RPN 0xFFFFF000 | ||
414 | #define MAS3_U0 0x00000200 | ||
415 | #define MAS3_U1 0x00000100 | ||
416 | #define MAS3_U2 0x00000080 | ||
417 | #define MAS3_U3 0x00000040 | ||
418 | #define MAS3_UX 0x00000020 | ||
419 | #define MAS3_SX 0x00000010 | ||
420 | #define MAS3_UW 0x00000008 | ||
421 | #define MAS3_SW 0x00000004 | ||
422 | #define MAS3_UR 0x00000002 | ||
423 | #define MAS3_SR 0x00000001 | ||
424 | |||
425 | #define MAS4_TLBSELD(x) MAS0_TLBSEL(x) | ||
426 | #define MAS4_TIDDSEL 0x000F0000 | ||
427 | #define MAS4_TSIZED(x) MAS1_TSIZE(x) | ||
428 | #define MAS4_X0D 0x00000040 | ||
429 | #define MAS4_X1D 0x00000020 | ||
430 | #define MAS4_WD 0x00000010 | ||
431 | #define MAS4_ID 0x00000008 | ||
432 | #define MAS4_MD 0x00000004 | ||
433 | #define MAS4_GD 0x00000002 | ||
434 | #define MAS4_ED 0x00000001 | ||
435 | |||
436 | #define MAS6_SPID0 0x3FFF0000 | ||
437 | #define MAS6_SPID1 0x00007FFE | ||
438 | #define MAS6_SAS 0x00000001 | ||
439 | #define MAS6_SPID MAS6_SPID0 | ||
440 | |||
441 | #define MAS7_RPN 0xFFFFFFFF | ||
442 | |||
443 | #endif /* _PPC_MMU_H_ */ | ||
444 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/mmu_context.h b/include/asm-ppc/mmu_context.h deleted file mode 100644 index 9f097e25b169..000000000000 --- a/include/asm-ppc/mmu_context.h +++ /dev/null | |||
@@ -1,198 +0,0 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | #ifndef __PPC_MMU_CONTEXT_H | ||
3 | #define __PPC_MMU_CONTEXT_H | ||
4 | |||
5 | #include <linux/bitops.h> | ||
6 | |||
7 | #include <asm/atomic.h> | ||
8 | #include <asm/mmu.h> | ||
9 | #include <asm/cputable.h> | ||
10 | #include <asm-generic/mm_hooks.h> | ||
11 | |||
12 | /* | ||
13 | * On 32-bit PowerPC 6xx/7xx/7xxx CPUs, we use a set of 16 VSIDs | ||
14 | * (virtual segment identifiers) for each context. Although the | ||
15 | * hardware supports 24-bit VSIDs, and thus >1 million contexts, | ||
16 | * we only use 32,768 of them. That is ample, since there can be | ||
17 | * at most around 30,000 tasks in the system anyway, and it means | ||
18 | * that we can use a bitmap to indicate which contexts are in use. | ||
19 | * Using a bitmap means that we entirely avoid all of the problems | ||
20 | * that we used to have when the context number overflowed, | ||
21 | * particularly on SMP systems. | ||
22 | * -- paulus. | ||
23 | */ | ||
24 | |||
25 | /* | ||
26 | * This function defines the mapping from contexts to VSIDs (virtual | ||
27 | * segment IDs). We use a skew on both the context and the high 4 bits | ||
28 | * of the 32-bit virtual address (the "effective segment ID") in order | ||
29 | * to spread out the entries in the MMU hash table. Note, if this | ||
30 | * function is changed then arch/ppc/mm/hashtable.S will have to be | ||
31 | * changed to correspond. | ||
32 | */ | ||
33 | #define CTX_TO_VSID(ctx, va) (((ctx) * (897 * 16) + ((va) >> 28) * 0x111) \ | ||
34 | & 0xffffff) | ||
35 | |||
36 | /* | ||
37 | The MPC8xx has only 16 contexts. We rotate through them on each | ||
38 | task switch. A better way would be to keep track of tasks that | ||
39 | own contexts, and implement an LRU usage. That way very active | ||
40 | tasks don't always have to pay the TLB reload overhead. The | ||
41 | kernel pages are mapped shared, so the kernel can run on behalf | ||
42 | of any task that makes a kernel entry. Shared does not mean they | ||
43 | are not protected, just that the ASID comparison is not performed. | ||
44 | -- Dan | ||
45 | |||
46 | The IBM4xx has 256 contexts, so we can just rotate through these | ||
47 | as a way of "switching" contexts. If the TID of the TLB is zero, | ||
48 | the PID/TID comparison is disabled, so we can use a TID of zero | ||
49 | to represent all kernel pages as shared among all contexts. | ||
50 | -- Dan | ||
51 | */ | ||
52 | |||
53 | static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) | ||
54 | { | ||
55 | } | ||
56 | |||
57 | #ifdef CONFIG_8xx | ||
58 | #define NO_CONTEXT 16 | ||
59 | #define LAST_CONTEXT 15 | ||
60 | #define FIRST_CONTEXT 0 | ||
61 | |||
62 | #elif defined(CONFIG_4xx) | ||
63 | #define NO_CONTEXT 256 | ||
64 | #define LAST_CONTEXT 255 | ||
65 | #define FIRST_CONTEXT 1 | ||
66 | |||
67 | #else | ||
68 | |||
69 | /* PPC 6xx, 7xx CPUs */ | ||
70 | #define NO_CONTEXT ((unsigned long) -1) | ||
71 | #define LAST_CONTEXT 32767 | ||
72 | #define FIRST_CONTEXT 1 | ||
73 | #endif | ||
74 | |||
75 | /* | ||
76 | * Set the current MMU context. | ||
77 | * On 32-bit PowerPCs (other than the 8xx embedded chips), this is done by | ||
78 | * loading up the segment registers for the user part of the address space. | ||
79 | * | ||
80 | * Since the PGD is immediately available, it is much faster to simply | ||
81 | * pass this along as a second parameter, which is required for 8xx and | ||
82 | * can be used for debugging on all processors (if you happen to have | ||
83 | * an Abatron). | ||
84 | */ | ||
85 | extern void set_context(unsigned long contextid, pgd_t *pgd); | ||
86 | |||
87 | /* | ||
88 | * Bitmap of contexts in use. | ||
89 | * The size of this bitmap is LAST_CONTEXT + 1 bits. | ||
90 | */ | ||
91 | extern unsigned long context_map[]; | ||
92 | |||
93 | /* | ||
94 | * This caches the next context number that we expect to be free. | ||
95 | * Its use is an optimization only, we can't rely on this context | ||
96 | * number to be free, but it usually will be. | ||
97 | */ | ||
98 | extern unsigned long next_mmu_context; | ||
99 | |||
100 | /* | ||
101 | * If we don't have sufficient contexts to give one to every task | ||
102 | * that could be in the system, we need to be able to steal contexts. | ||
103 | * These variables support that. | ||
104 | */ | ||
105 | #if LAST_CONTEXT < 30000 | ||
106 | #define FEW_CONTEXTS 1 | ||
107 | extern atomic_t nr_free_contexts; | ||
108 | extern struct mm_struct *context_mm[LAST_CONTEXT+1]; | ||
109 | extern void steal_context(void); | ||
110 | #endif | ||
111 | |||
112 | /* | ||
113 | * Get a new mmu context for the address space described by `mm'. | ||
114 | */ | ||
115 | static inline void get_mmu_context(struct mm_struct *mm) | ||
116 | { | ||
117 | unsigned long ctx; | ||
118 | |||
119 | if (mm->context.id != NO_CONTEXT) | ||
120 | return; | ||
121 | #ifdef FEW_CONTEXTS | ||
122 | while (atomic_dec_if_positive(&nr_free_contexts) < 0) | ||
123 | steal_context(); | ||
124 | #endif | ||
125 | ctx = next_mmu_context; | ||
126 | while (test_and_set_bit(ctx, context_map)) { | ||
127 | ctx = find_next_zero_bit(context_map, LAST_CONTEXT+1, ctx); | ||
128 | if (ctx > LAST_CONTEXT) | ||
129 | ctx = 0; | ||
130 | } | ||
131 | next_mmu_context = (ctx + 1) & LAST_CONTEXT; | ||
132 | mm->context.id = ctx; | ||
133 | #ifdef FEW_CONTEXTS | ||
134 | context_mm[ctx] = mm; | ||
135 | #endif | ||
136 | } | ||
137 | |||
138 | /* | ||
139 | * Set up the context for a new address space. | ||
140 | */ | ||
141 | static inline int init_new_context(struct task_struct *t, struct mm_struct *mm) | ||
142 | { | ||
143 | mm->context.id = NO_CONTEXT; | ||
144 | mm->context.vdso_base = 0; | ||
145 | return 0; | ||
146 | } | ||
147 | |||
148 | /* | ||
149 | * We're finished using the context for an address space. | ||
150 | */ | ||
151 | static inline void destroy_context(struct mm_struct *mm) | ||
152 | { | ||
153 | preempt_disable(); | ||
154 | if (mm->context.id != NO_CONTEXT) { | ||
155 | clear_bit(mm->context.id, context_map); | ||
156 | mm->context.id = NO_CONTEXT; | ||
157 | #ifdef FEW_CONTEXTS | ||
158 | atomic_inc(&nr_free_contexts); | ||
159 | #endif | ||
160 | } | ||
161 | preempt_enable(); | ||
162 | } | ||
163 | |||
164 | static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, | ||
165 | struct task_struct *tsk) | ||
166 | { | ||
167 | #ifdef CONFIG_ALTIVEC | ||
168 | if (cpu_has_feature(CPU_FTR_ALTIVEC)) | ||
169 | asm volatile ("dssall;\n" | ||
170 | #ifndef CONFIG_POWER4 | ||
171 | "sync;\n" /* G4 needs a sync here, G5 apparently not */ | ||
172 | #endif | ||
173 | : : ); | ||
174 | #endif /* CONFIG_ALTIVEC */ | ||
175 | |||
176 | tsk->thread.pgdir = next->pgd; | ||
177 | |||
178 | /* No need to flush userspace segments if the mm doesnt change */ | ||
179 | if (prev == next) | ||
180 | return; | ||
181 | |||
182 | /* Setup new userspace context */ | ||
183 | get_mmu_context(next); | ||
184 | set_context(next->context.id, next->pgd); | ||
185 | } | ||
186 | |||
187 | #define deactivate_mm(tsk,mm) do { } while (0) | ||
188 | |||
189 | /* | ||
190 | * After we have set current->mm to a new value, this activates | ||
191 | * the context for the new mm so we see the new mappings. | ||
192 | */ | ||
193 | #define activate_mm(active_mm, mm) switch_mm(active_mm, mm, current) | ||
194 | |||
195 | extern void mmu_context_init(void); | ||
196 | |||
197 | #endif /* __PPC_MMU_CONTEXT_H */ | ||
198 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/mpc10x.h b/include/asm-ppc/mpc10x.h deleted file mode 100644 index b30a6a3b5bd2..000000000000 --- a/include/asm-ppc/mpc10x.h +++ /dev/null | |||
@@ -1,180 +0,0 @@ | |||
1 | /* | ||
2 | * Common routines for the Motorola SPS MPC106/8240/107 Host bridge/Mem | ||
3 | * ctlr/EPIC/etc. | ||
4 | * | ||
5 | * Author: Mark A. Greer | ||
6 | * mgreer@mvista.com | ||
7 | * | ||
8 | * 2001 (c) MontaVista, Software, Inc. This file is licensed under | ||
9 | * the terms of the GNU General Public License version 2. This program | ||
10 | * is licensed "as is" without any warranty of any kind, whether express | ||
11 | * or implied. | ||
12 | */ | ||
13 | #ifndef __PPC_KERNEL_MPC10X_H | ||
14 | #define __PPC_KERNEL_MPC10X_H | ||
15 | |||
16 | #include <linux/pci_ids.h> | ||
17 | #include <asm/pci-bridge.h> | ||
18 | |||
19 | /* | ||
20 | * The values here don't completely map everything but should work in most | ||
21 | * cases. | ||
22 | * | ||
23 | * MAP A (PReP Map) | ||
24 | * Processor: 0x80000000 - 0x807fffff -> PCI I/O: 0x00000000 - 0x007fffff | ||
25 | * Processor: 0xc0000000 - 0xdfffffff -> PCI MEM: 0x00000000 - 0x1fffffff | ||
26 | * PCI MEM: 0x80000000 -> Processor System Memory: 0x00000000 | ||
27 | * EUMB mapped to: ioremap_base - 0x00100000 (ioremap_base - 1 MB) | ||
28 | * | ||
29 | * MAP B (CHRP Map) | ||
30 | * Processor: 0xfe000000 - 0xfebfffff -> PCI I/O: 0x00000000 - 0x00bfffff | ||
31 | * Processor: 0x80000000 - 0xbfffffff -> PCI MEM: 0x80000000 - 0xbfffffff | ||
32 | * PCI MEM: 0x00000000 -> Processor System Memory: 0x00000000 | ||
33 | * EUMB mapped to: ioremap_base - 0x00100000 (ioremap_base - 1 MB) | ||
34 | */ | ||
35 | |||
36 | /* | ||
37 | * Define the vendor/device IDs for the various bridges--should be added to | ||
38 | * <linux/pci_ids.h> | ||
39 | */ | ||
40 | #define MPC10X_BRIDGE_106 ((PCI_DEVICE_ID_MOTOROLA_MPC106 << 16) | \ | ||
41 | PCI_VENDOR_ID_MOTOROLA) | ||
42 | #define MPC10X_BRIDGE_8240 ((0x0003 << 16) | PCI_VENDOR_ID_MOTOROLA) | ||
43 | #define MPC10X_BRIDGE_107 ((0x0004 << 16) | PCI_VENDOR_ID_MOTOROLA) | ||
44 | #define MPC10X_BRIDGE_8245 ((0x0006 << 16) | PCI_VENDOR_ID_MOTOROLA) | ||
45 | |||
46 | /* Define the type of map to use */ | ||
47 | #define MPC10X_MEM_MAP_A 1 | ||
48 | #define MPC10X_MEM_MAP_B 2 | ||
49 | |||
50 | /* Map A (PReP Map) Defines */ | ||
51 | #define MPC10X_MAPA_CNFG_ADDR 0x80000cf8 | ||
52 | #define MPC10X_MAPA_CNFG_DATA 0x80000cfc | ||
53 | |||
54 | #define MPC10X_MAPA_ISA_IO_BASE 0x80000000 | ||
55 | #define MPC10X_MAPA_ISA_MEM_BASE 0xc0000000 | ||
56 | #define MPC10X_MAPA_DRAM_OFFSET 0x80000000 | ||
57 | |||
58 | #define MPC10X_MAPA_PCI_INTACK_ADDR 0xbffffff0 | ||
59 | #define MPC10X_MAPA_PCI_IO_START 0x00000000 | ||
60 | #define MPC10X_MAPA_PCI_IO_END (0x00800000 - 1) | ||
61 | #define MPC10X_MAPA_PCI_MEM_START 0x00000000 | ||
62 | #define MPC10X_MAPA_PCI_MEM_END (0x20000000 - 1) | ||
63 | |||
64 | #define MPC10X_MAPA_PCI_MEM_OFFSET (MPC10X_MAPA_ISA_MEM_BASE - \ | ||
65 | MPC10X_MAPA_PCI_MEM_START) | ||
66 | |||
67 | /* Map B (CHRP Map) Defines */ | ||
68 | #define MPC10X_MAPB_CNFG_ADDR 0xfec00000 | ||
69 | #define MPC10X_MAPB_CNFG_DATA 0xfee00000 | ||
70 | |||
71 | #define MPC10X_MAPB_ISA_IO_BASE 0xfe000000 | ||
72 | #define MPC10X_MAPB_ISA_MEM_BASE 0x80000000 | ||
73 | #define MPC10X_MAPB_DRAM_OFFSET 0x00000000 | ||
74 | |||
75 | #define MPC10X_MAPB_PCI_INTACK_ADDR 0xfef00000 | ||
76 | #define MPC10X_MAPB_PCI_IO_START 0x00000000 | ||
77 | #define MPC10X_MAPB_PCI_IO_END (0x00c00000 - 1) | ||
78 | #define MPC10X_MAPB_PCI_MEM_START 0x80000000 | ||
79 | #define MPC10X_MAPB_PCI_MEM_END (0xc0000000 - 1) | ||
80 | |||
81 | #define MPC10X_MAPB_PCI_MEM_OFFSET (MPC10X_MAPB_ISA_MEM_BASE - \ | ||
82 | MPC10X_MAPB_PCI_MEM_START) | ||
83 | |||
84 | /* Set hose members to values appropriate for the mem map used */ | ||
85 | #define MPC10X_SETUP_HOSE(hose, map) { \ | ||
86 | (hose)->pci_mem_offset = MPC10X_MAP##map##_PCI_MEM_OFFSET; \ | ||
87 | (hose)->io_space.start = MPC10X_MAP##map##_PCI_IO_START; \ | ||
88 | (hose)->io_space.end = MPC10X_MAP##map##_PCI_IO_END; \ | ||
89 | (hose)->mem_space.start = MPC10X_MAP##map##_PCI_MEM_START; \ | ||
90 | (hose)->mem_space.end = MPC10X_MAP##map##_PCI_MEM_END; \ | ||
91 | (hose)->io_base_virt = (void *)MPC10X_MAP##map##_ISA_IO_BASE; \ | ||
92 | } | ||
93 | |||
94 | |||
95 | /* Miscellaneous Configuration register offsets */ | ||
96 | #define MPC10X_CFG_PIR_REG 0x09 | ||
97 | #define MPC10X_CFG_PIR_HOST_BRIDGE 0x00 | ||
98 | #define MPC10X_CFG_PIR_AGENT 0x01 | ||
99 | |||
100 | #define MPC10X_CFG_EUMBBAR 0x78 | ||
101 | |||
102 | #define MPC10X_CFG_PICR1_REG 0xa8 | ||
103 | #define MPC10X_CFG_PICR1_ADDR_MAP_MASK 0x00010000 | ||
104 | #define MPC10X_CFG_PICR1_ADDR_MAP_A 0x00010000 | ||
105 | #define MPC10X_CFG_PICR1_ADDR_MAP_B 0x00000000 | ||
106 | #define MPC10X_CFG_PICR1_SPEC_PCI_RD 0x00000004 | ||
107 | #define MPC10X_CFG_PICR1_ST_GATH_EN 0x00000040 | ||
108 | |||
109 | #define MPC10X_CFG_PICR2_REG 0xac | ||
110 | #define MPC10X_CFG_PICR2_COPYBACK_OPT 0x00000001 | ||
111 | |||
112 | #define MPC10X_CFG_MAPB_OPTIONS_REG 0xe0 | ||
113 | #define MPC10X_CFG_MAPB_OPTIONS_CFAE 0x80 /* CPU_FD_ALIAS_EN */ | ||
114 | #define MPC10X_CFG_MAPB_OPTIONS_PFAE 0x40 /* PCI_FD_ALIAS_EN */ | ||
115 | #define MPC10X_CFG_MAPB_OPTIONS_DR 0x20 /* DLL_RESET */ | ||
116 | #define MPC10X_CFG_MAPB_OPTIONS_PCICH 0x08 /* PCI_COMPATIBILITY_HOLE */ | ||
117 | #define MPC10X_CFG_MAPB_OPTIONS_PROCCH 0x04 /* PROC_COMPATIBILITY_HOLE */ | ||
118 | |||
119 | /* Define offsets for the memory controller registers in the config space */ | ||
120 | #define MPC10X_MCTLR_MEM_START_1 0x80 /* Banks 0-3 */ | ||
121 | #define MPC10X_MCTLR_MEM_START_2 0x84 /* Banks 4-7 */ | ||
122 | #define MPC10X_MCTLR_EXT_MEM_START_1 0x88 /* Banks 0-3 */ | ||
123 | #define MPC10X_MCTLR_EXT_MEM_START_2 0x8c /* Banks 4-7 */ | ||
124 | |||
125 | #define MPC10X_MCTLR_MEM_END_1 0x90 /* Banks 0-3 */ | ||
126 | #define MPC10X_MCTLR_MEM_END_2 0x94 /* Banks 4-7 */ | ||
127 | #define MPC10X_MCTLR_EXT_MEM_END_1 0x98 /* Banks 0-3 */ | ||
128 | #define MPC10X_MCTLR_EXT_MEM_END_2 0x9c /* Banks 4-7 */ | ||
129 | |||
130 | #define MPC10X_MCTLR_MEM_BANK_ENABLES 0xa0 | ||
131 | |||
132 | /* Define some offset in the EUMB */ | ||
133 | #define MPC10X_EUMB_SIZE 0x00100000 /* Total EUMB size (1MB) */ | ||
134 | |||
135 | #define MPC10X_EUMB_MU_OFFSET 0x00000000 /* Msg Unit reg offset */ | ||
136 | #define MPC10X_EUMB_MU_SIZE 0x00001000 /* Msg Unit reg size */ | ||
137 | #define MPC10X_EUMB_DMA_OFFSET 0x00001000 /* DMA Unit reg offset */ | ||
138 | #define MPC10X_EUMB_DMA_SIZE 0x00001000 /* DMA Unit reg size */ | ||
139 | #define MPC10X_EUMB_ATU_OFFSET 0x00002000 /* Addr xlate reg offset */ | ||
140 | #define MPC10X_EUMB_ATU_SIZE 0x00001000 /* Addr xlate reg size */ | ||
141 | #define MPC10X_EUMB_I2C_OFFSET 0x00003000 /* I2C Unit reg offset */ | ||
142 | #define MPC10X_EUMB_I2C_SIZE 0x00001000 /* I2C Unit reg size */ | ||
143 | #define MPC10X_EUMB_DUART_OFFSET 0x00004000 /* DUART Unit reg offset (8245) */ | ||
144 | #define MPC10X_EUMB_DUART_SIZE 0x00001000 /* DUART Unit reg size (8245) */ | ||
145 | #define MPC10X_EUMB_EPIC_OFFSET 0x00040000 /* EPIC offset in EUMB */ | ||
146 | #define MPC10X_EUMB_EPIC_SIZE 0x00030000 /* EPIC size */ | ||
147 | #define MPC10X_EUMB_PM_OFFSET 0x000fe000 /* Performance Monitor reg offset (8245) */ | ||
148 | #define MPC10X_EUMB_PM_SIZE 0x00001000 /* Performance Monitor reg size (8245) */ | ||
149 | #define MPC10X_EUMB_WP_OFFSET 0x000ff000 /* Data path diagnostic, watchpoint reg offset */ | ||
150 | #define MPC10X_EUMB_WP_SIZE 0x00001000 /* Data path diagnostic, watchpoint reg size */ | ||
151 | |||
152 | /* | ||
153 | * Define some recommended places to put the EUMB regs. | ||
154 | * For both maps, recommend putting the EUMB from 0xeff00000 to 0xefffffff. | ||
155 | */ | ||
156 | extern unsigned long ioremap_base; | ||
157 | #define MPC10X_MAPA_EUMB_BASE (ioremap_base - MPC10X_EUMB_SIZE) | ||
158 | #define MPC10X_MAPB_EUMB_BASE MPC10X_MAPA_EUMB_BASE | ||
159 | |||
160 | enum ppc_sys_devices { | ||
161 | MPC10X_IIC1, | ||
162 | MPC10X_DMA0, | ||
163 | MPC10X_DMA1, | ||
164 | MPC10X_UART0, | ||
165 | MPC10X_UART1, | ||
166 | NUM_PPC_SYS_DEVS, | ||
167 | }; | ||
168 | |||
169 | int mpc10x_bridge_init(struct pci_controller *hose, | ||
170 | uint current_map, | ||
171 | uint new_map, | ||
172 | uint phys_eumb_base); | ||
173 | unsigned long mpc10x_get_mem_size(uint mem_map); | ||
174 | int mpc10x_enable_store_gathering(struct pci_controller *hose); | ||
175 | int mpc10x_disable_store_gathering(struct pci_controller *hose); | ||
176 | |||
177 | /* For MPC107 boards that use the built-in openpic */ | ||
178 | void mpc10x_set_openpic(void); | ||
179 | |||
180 | #endif /* __PPC_KERNEL_MPC10X_H */ | ||
diff --git a/include/asm-ppc/mpc52xx.h b/include/asm-ppc/mpc52xx.h deleted file mode 100644 index d9d21aa68ba3..000000000000 --- a/include/asm-ppc/mpc52xx.h +++ /dev/null | |||
@@ -1,450 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/mpc52xx.h | ||
3 | * | ||
4 | * Prototypes, etc. for the Freescale MPC52xx embedded cpu chips | ||
5 | * May need to be cleaned as the port goes on ... | ||
6 | * | ||
7 | * | ||
8 | * Maintainer : Sylvain Munaut <tnt@246tNt.com> | ||
9 | * | ||
10 | * Originally written by Dale Farnsworth <dfarnsworth@mvista.com> | ||
11 | * for the 2.4 kernel. | ||
12 | * | ||
13 | * Copyright (C) 2004-2005 Sylvain Munaut <tnt@246tNt.com> | ||
14 | * Copyright (C) 2003 MontaVista, Software, Inc. | ||
15 | * | ||
16 | * This file is licensed under the terms of the GNU General Public License | ||
17 | * version 2. This program is licensed "as is" without any warranty of any | ||
18 | * kind, whether express or implied. | ||
19 | */ | ||
20 | |||
21 | #ifndef __ASM_MPC52xx_H__ | ||
22 | #define __ASM_MPC52xx_H__ | ||
23 | |||
24 | #ifndef __ASSEMBLY__ | ||
25 | #include <asm/ppcboot.h> | ||
26 | #include <asm/types.h> | ||
27 | |||
28 | struct pt_regs; | ||
29 | #endif /* __ASSEMBLY__ */ | ||
30 | |||
31 | |||
32 | /* ======================================================================== */ | ||
33 | /* PPC Sys devices definition */ | ||
34 | /* ======================================================================== */ | ||
35 | |||
36 | enum ppc_sys_devices { | ||
37 | MPC52xx_MSCAN1, | ||
38 | MPC52xx_MSCAN2, | ||
39 | MPC52xx_SPI, | ||
40 | MPC52xx_USB, | ||
41 | MPC52xx_BDLC, | ||
42 | MPC52xx_PSC1, | ||
43 | MPC52xx_PSC2, | ||
44 | MPC52xx_PSC3, | ||
45 | MPC52xx_PSC4, | ||
46 | MPC52xx_PSC5, | ||
47 | MPC52xx_PSC6, | ||
48 | MPC52xx_FEC, | ||
49 | MPC52xx_ATA, | ||
50 | MPC52xx_I2C1, | ||
51 | MPC52xx_I2C2, | ||
52 | NUM_PPC_SYS_DEVS, | ||
53 | }; | ||
54 | |||
55 | |||
56 | /* ======================================================================== */ | ||
57 | /* Main registers/struct addresses */ | ||
58 | /* ======================================================================== */ | ||
59 | |||
60 | /* MBAR position */ | ||
61 | #define MPC52xx_MBAR 0xf0000000 /* Phys address */ | ||
62 | #define MPC52xx_MBAR_VIRT 0xf0000000 /* Virt address */ | ||
63 | #define MPC52xx_MBAR_SIZE 0x00010000 | ||
64 | |||
65 | #define MPC52xx_PA(x) ((phys_addr_t)(MPC52xx_MBAR + (x))) | ||
66 | #define MPC52xx_VA(x) ((void __iomem *)(MPC52xx_MBAR_VIRT + (x))) | ||
67 | |||
68 | /* Registers zone offset/size */ | ||
69 | #define MPC52xx_MMAP_CTL_OFFSET 0x0000 | ||
70 | #define MPC52xx_MMAP_CTL_SIZE 0x068 | ||
71 | #define MPC52xx_SDRAM_OFFSET 0x0100 | ||
72 | #define MPC52xx_SDRAM_SIZE 0x010 | ||
73 | #define MPC52xx_CDM_OFFSET 0x0200 | ||
74 | #define MPC52xx_CDM_SIZE 0x038 | ||
75 | #define MPC52xx_INTR_OFFSET 0x0500 | ||
76 | #define MPC52xx_INTR_SIZE 0x04c | ||
77 | #define MPC52xx_GPTx_OFFSET(x) (0x0600 + ((x)<<4)) | ||
78 | #define MPC52xx_GPT_SIZE 0x010 | ||
79 | #define MPC52xx_RTC_OFFSET 0x0800 | ||
80 | #define MPC52xx_RTC_SIZE 0x024 | ||
81 | #define MPC52xx_GPIO_OFFSET 0x0b00 | ||
82 | #define MPC52xx_GPIO_SIZE 0x040 | ||
83 | #define MPC52xx_GPIO_WKUP_OFFSET 0x0c00 | ||
84 | #define MPC52xx_GPIO_WKUP_SIZE 0x028 | ||
85 | #define MPC52xx_PCI_OFFSET 0x0d00 | ||
86 | #define MPC52xx_PCI_SIZE 0x100 | ||
87 | #define MPC52xx_SDMA_OFFSET 0x1200 | ||
88 | #define MPC52xx_SDMA_SIZE 0x100 | ||
89 | #define MPC52xx_XLB_OFFSET 0x1f00 | ||
90 | #define MPC52xx_XLB_SIZE 0x100 | ||
91 | #define MPC52xx_PSCx_OFFSET(x) (((x)!=6)?(0x1e00+((x)<<9)):0x2c00) | ||
92 | #define MPC52xx_PSC_SIZE 0x0a0 | ||
93 | |||
94 | /* SRAM used for SDMA */ | ||
95 | #define MPC52xx_SRAM_OFFSET 0x8000 | ||
96 | #define MPC52xx_SRAM_SIZE 0x4000 | ||
97 | |||
98 | |||
99 | /* ======================================================================== */ | ||
100 | /* IRQ mapping */ | ||
101 | /* ======================================================================== */ | ||
102 | /* Be sure to look at mpc52xx_pic.h if you wish for whatever reason to change | ||
103 | * this | ||
104 | */ | ||
105 | |||
106 | #define MPC52xx_CRIT_IRQ_NUM 4 | ||
107 | #define MPC52xx_MAIN_IRQ_NUM 17 | ||
108 | #define MPC52xx_SDMA_IRQ_NUM 17 | ||
109 | #define MPC52xx_PERP_IRQ_NUM 23 | ||
110 | |||
111 | #define MPC52xx_CRIT_IRQ_BASE 1 | ||
112 | #define MPC52xx_MAIN_IRQ_BASE (MPC52xx_CRIT_IRQ_BASE + MPC52xx_CRIT_IRQ_NUM) | ||
113 | #define MPC52xx_SDMA_IRQ_BASE (MPC52xx_MAIN_IRQ_BASE + MPC52xx_MAIN_IRQ_NUM) | ||
114 | #define MPC52xx_PERP_IRQ_BASE (MPC52xx_SDMA_IRQ_BASE + MPC52xx_SDMA_IRQ_NUM) | ||
115 | |||
116 | #define MPC52xx_IRQ0 (MPC52xx_CRIT_IRQ_BASE + 0) | ||
117 | #define MPC52xx_SLICE_TIMER_0_IRQ (MPC52xx_CRIT_IRQ_BASE + 1) | ||
118 | #define MPC52xx_HI_INT_IRQ (MPC52xx_CRIT_IRQ_BASE + 2) | ||
119 | #define MPC52xx_CCS_IRQ (MPC52xx_CRIT_IRQ_BASE + 3) | ||
120 | |||
121 | #define MPC52xx_IRQ1 (MPC52xx_MAIN_IRQ_BASE + 1) | ||
122 | #define MPC52xx_IRQ2 (MPC52xx_MAIN_IRQ_BASE + 2) | ||
123 | #define MPC52xx_IRQ3 (MPC52xx_MAIN_IRQ_BASE + 3) | ||
124 | |||
125 | #define MPC52xx_SDMA_IRQ (MPC52xx_PERP_IRQ_BASE + 0) | ||
126 | #define MPC52xx_PSC1_IRQ (MPC52xx_PERP_IRQ_BASE + 1) | ||
127 | #define MPC52xx_PSC2_IRQ (MPC52xx_PERP_IRQ_BASE + 2) | ||
128 | #define MPC52xx_PSC3_IRQ (MPC52xx_PERP_IRQ_BASE + 3) | ||
129 | #define MPC52xx_PSC6_IRQ (MPC52xx_PERP_IRQ_BASE + 4) | ||
130 | #define MPC52xx_IRDA_IRQ (MPC52xx_PERP_IRQ_BASE + 4) | ||
131 | #define MPC52xx_FEC_IRQ (MPC52xx_PERP_IRQ_BASE + 5) | ||
132 | #define MPC52xx_USB_IRQ (MPC52xx_PERP_IRQ_BASE + 6) | ||
133 | #define MPC52xx_ATA_IRQ (MPC52xx_PERP_IRQ_BASE + 7) | ||
134 | #define MPC52xx_PCI_CNTRL_IRQ (MPC52xx_PERP_IRQ_BASE + 8) | ||
135 | #define MPC52xx_PCI_SCIRX_IRQ (MPC52xx_PERP_IRQ_BASE + 9) | ||
136 | #define MPC52xx_PCI_SCITX_IRQ (MPC52xx_PERP_IRQ_BASE + 10) | ||
137 | #define MPC52xx_PSC4_IRQ (MPC52xx_PERP_IRQ_BASE + 11) | ||
138 | #define MPC52xx_PSC5_IRQ (MPC52xx_PERP_IRQ_BASE + 12) | ||
139 | #define MPC52xx_SPI_MODF_IRQ (MPC52xx_PERP_IRQ_BASE + 13) | ||
140 | #define MPC52xx_SPI_SPIF_IRQ (MPC52xx_PERP_IRQ_BASE + 14) | ||
141 | #define MPC52xx_I2C1_IRQ (MPC52xx_PERP_IRQ_BASE + 15) | ||
142 | #define MPC52xx_I2C2_IRQ (MPC52xx_PERP_IRQ_BASE + 16) | ||
143 | #define MPC52xx_MSCAN1_IRQ (MPC52xx_PERP_IRQ_BASE + 17) | ||
144 | #define MPC52xx_MSCAN2_IRQ (MPC52xx_PERP_IRQ_BASE + 18) | ||
145 | #define MPC52xx_IR_RX_IRQ (MPC52xx_PERP_IRQ_BASE + 19) | ||
146 | #define MPC52xx_IR_TX_IRQ (MPC52xx_PERP_IRQ_BASE + 20) | ||
147 | #define MPC52xx_XLB_ARB_IRQ (MPC52xx_PERP_IRQ_BASE + 21) | ||
148 | #define MPC52xx_BDLC_IRQ (MPC52xx_PERP_IRQ_BASE + 22) | ||
149 | |||
150 | |||
151 | |||
152 | /* ======================================================================== */ | ||
153 | /* Structures mapping of some unit register set */ | ||
154 | /* ======================================================================== */ | ||
155 | |||
156 | #ifndef __ASSEMBLY__ | ||
157 | |||
158 | /* Memory Mapping Control */ | ||
159 | struct mpc52xx_mmap_ctl { | ||
160 | u32 mbar; /* MMAP_CTRL + 0x00 */ | ||
161 | |||
162 | u32 cs0_start; /* MMAP_CTRL + 0x04 */ | ||
163 | u32 cs0_stop; /* MMAP_CTRL + 0x08 */ | ||
164 | u32 cs1_start; /* MMAP_CTRL + 0x0c */ | ||
165 | u32 cs1_stop; /* MMAP_CTRL + 0x10 */ | ||
166 | u32 cs2_start; /* MMAP_CTRL + 0x14 */ | ||
167 | u32 cs2_stop; /* MMAP_CTRL + 0x18 */ | ||
168 | u32 cs3_start; /* MMAP_CTRL + 0x1c */ | ||
169 | u32 cs3_stop; /* MMAP_CTRL + 0x20 */ | ||
170 | u32 cs4_start; /* MMAP_CTRL + 0x24 */ | ||
171 | u32 cs4_stop; /* MMAP_CTRL + 0x28 */ | ||
172 | u32 cs5_start; /* MMAP_CTRL + 0x2c */ | ||
173 | u32 cs5_stop; /* MMAP_CTRL + 0x30 */ | ||
174 | |||
175 | u32 sdram0; /* MMAP_CTRL + 0x34 */ | ||
176 | u32 sdram1; /* MMAP_CTRL + 0X38 */ | ||
177 | |||
178 | u32 reserved[4]; /* MMAP_CTRL + 0x3c .. 0x48 */ | ||
179 | |||
180 | u32 boot_start; /* MMAP_CTRL + 0x4c */ | ||
181 | u32 boot_stop; /* MMAP_CTRL + 0x50 */ | ||
182 | |||
183 | u32 ipbi_ws_ctrl; /* MMAP_CTRL + 0x54 */ | ||
184 | |||
185 | u32 cs6_start; /* MMAP_CTRL + 0x58 */ | ||
186 | u32 cs6_stop; /* MMAP_CTRL + 0x5c */ | ||
187 | u32 cs7_start; /* MMAP_CTRL + 0x60 */ | ||
188 | u32 cs7_stop; /* MMAP_CTRL + 0x64 */ | ||
189 | }; | ||
190 | |||
191 | /* SDRAM control */ | ||
192 | struct mpc52xx_sdram { | ||
193 | u32 mode; /* SDRAM + 0x00 */ | ||
194 | u32 ctrl; /* SDRAM + 0x04 */ | ||
195 | u32 config1; /* SDRAM + 0x08 */ | ||
196 | u32 config2; /* SDRAM + 0x0c */ | ||
197 | }; | ||
198 | |||
199 | /* Interrupt controller */ | ||
200 | struct mpc52xx_intr { | ||
201 | u32 per_mask; /* INTR + 0x00 */ | ||
202 | u32 per_pri1; /* INTR + 0x04 */ | ||
203 | u32 per_pri2; /* INTR + 0x08 */ | ||
204 | u32 per_pri3; /* INTR + 0x0c */ | ||
205 | u32 ctrl; /* INTR + 0x10 */ | ||
206 | u32 main_mask; /* INTR + 0x14 */ | ||
207 | u32 main_pri1; /* INTR + 0x18 */ | ||
208 | u32 main_pri2; /* INTR + 0x1c */ | ||
209 | u32 reserved1; /* INTR + 0x20 */ | ||
210 | u32 enc_status; /* INTR + 0x24 */ | ||
211 | u32 crit_status; /* INTR + 0x28 */ | ||
212 | u32 main_status; /* INTR + 0x2c */ | ||
213 | u32 per_status; /* INTR + 0x30 */ | ||
214 | u32 reserved2; /* INTR + 0x34 */ | ||
215 | u32 per_error; /* INTR + 0x38 */ | ||
216 | }; | ||
217 | |||
218 | /* SDMA */ | ||
219 | struct mpc52xx_sdma { | ||
220 | u32 taskBar; /* SDMA + 0x00 */ | ||
221 | u32 currentPointer; /* SDMA + 0x04 */ | ||
222 | u32 endPointer; /* SDMA + 0x08 */ | ||
223 | u32 variablePointer;/* SDMA + 0x0c */ | ||
224 | |||
225 | u8 IntVect1; /* SDMA + 0x10 */ | ||
226 | u8 IntVect2; /* SDMA + 0x11 */ | ||
227 | u16 PtdCntrl; /* SDMA + 0x12 */ | ||
228 | |||
229 | u32 IntPend; /* SDMA + 0x14 */ | ||
230 | u32 IntMask; /* SDMA + 0x18 */ | ||
231 | |||
232 | u16 tcr[16]; /* SDMA + 0x1c .. 0x3a */ | ||
233 | |||
234 | u8 ipr[32]; /* SDMA + 0x3c .. 0x5b */ | ||
235 | |||
236 | u32 cReqSelect; /* SDMA + 0x5c */ | ||
237 | u32 task_size0; /* SDMA + 0x60 */ | ||
238 | u32 task_size1; /* SDMA + 0x64 */ | ||
239 | u32 MDEDebug; /* SDMA + 0x68 */ | ||
240 | u32 ADSDebug; /* SDMA + 0x6c */ | ||
241 | u32 Value1; /* SDMA + 0x70 */ | ||
242 | u32 Value2; /* SDMA + 0x74 */ | ||
243 | u32 Control; /* SDMA + 0x78 */ | ||
244 | u32 Status; /* SDMA + 0x7c */ | ||
245 | u32 PTDDebug; /* SDMA + 0x80 */ | ||
246 | }; | ||
247 | |||
248 | /* GPT */ | ||
249 | struct mpc52xx_gpt { | ||
250 | u32 mode; /* GPTx + 0x00 */ | ||
251 | u32 count; /* GPTx + 0x04 */ | ||
252 | u32 pwm; /* GPTx + 0x08 */ | ||
253 | u32 status; /* GPTx + 0X0c */ | ||
254 | }; | ||
255 | |||
256 | /* RTC */ | ||
257 | struct mpc52xx_rtc { | ||
258 | u32 time_set; /* RTC + 0x00 */ | ||
259 | u32 date_set; /* RTC + 0x04 */ | ||
260 | u32 stopwatch; /* RTC + 0x08 */ | ||
261 | u32 int_enable; /* RTC + 0x0c */ | ||
262 | u32 time; /* RTC + 0x10 */ | ||
263 | u32 date; /* RTC + 0x14 */ | ||
264 | u32 stopwatch_intr; /* RTC + 0x18 */ | ||
265 | u32 bus_error; /* RTC + 0x1c */ | ||
266 | u32 dividers; /* RTC + 0x20 */ | ||
267 | }; | ||
268 | |||
269 | /* GPIO */ | ||
270 | struct mpc52xx_gpio { | ||
271 | u32 port_config; /* GPIO + 0x00 */ | ||
272 | u32 simple_gpioe; /* GPIO + 0x04 */ | ||
273 | u32 simple_ode; /* GPIO + 0x08 */ | ||
274 | u32 simple_ddr; /* GPIO + 0x0c */ | ||
275 | u32 simple_dvo; /* GPIO + 0x10 */ | ||
276 | u32 simple_ival; /* GPIO + 0x14 */ | ||
277 | u8 outo_gpioe; /* GPIO + 0x18 */ | ||
278 | u8 reserved1[3]; /* GPIO + 0x19 */ | ||
279 | u8 outo_dvo; /* GPIO + 0x1c */ | ||
280 | u8 reserved2[3]; /* GPIO + 0x1d */ | ||
281 | u8 sint_gpioe; /* GPIO + 0x20 */ | ||
282 | u8 reserved3[3]; /* GPIO + 0x21 */ | ||
283 | u8 sint_ode; /* GPIO + 0x24 */ | ||
284 | u8 reserved4[3]; /* GPIO + 0x25 */ | ||
285 | u8 sint_ddr; /* GPIO + 0x28 */ | ||
286 | u8 reserved5[3]; /* GPIO + 0x29 */ | ||
287 | u8 sint_dvo; /* GPIO + 0x2c */ | ||
288 | u8 reserved6[3]; /* GPIO + 0x2d */ | ||
289 | u8 sint_inten; /* GPIO + 0x30 */ | ||
290 | u8 reserved7[3]; /* GPIO + 0x31 */ | ||
291 | u16 sint_itype; /* GPIO + 0x34 */ | ||
292 | u16 reserved8; /* GPIO + 0x36 */ | ||
293 | u8 gpio_control; /* GPIO + 0x38 */ | ||
294 | u8 reserved9[3]; /* GPIO + 0x39 */ | ||
295 | u8 sint_istat; /* GPIO + 0x3c */ | ||
296 | u8 sint_ival; /* GPIO + 0x3d */ | ||
297 | u8 bus_errs; /* GPIO + 0x3e */ | ||
298 | u8 reserved10; /* GPIO + 0x3f */ | ||
299 | }; | ||
300 | |||
301 | #define MPC52xx_GPIO_PSC_CONFIG_UART_WITHOUT_CD 4 | ||
302 | #define MPC52xx_GPIO_PSC_CONFIG_UART_WITH_CD 5 | ||
303 | #define MPC52xx_GPIO_PCI_DIS (1<<15) | ||
304 | |||
305 | /* GPIO with WakeUp*/ | ||
306 | struct mpc52xx_gpio_wkup { | ||
307 | u8 wkup_gpioe; /* GPIO_WKUP + 0x00 */ | ||
308 | u8 reserved1[3]; /* GPIO_WKUP + 0x03 */ | ||
309 | u8 wkup_ode; /* GPIO_WKUP + 0x04 */ | ||
310 | u8 reserved2[3]; /* GPIO_WKUP + 0x05 */ | ||
311 | u8 wkup_ddr; /* GPIO_WKUP + 0x08 */ | ||
312 | u8 reserved3[3]; /* GPIO_WKUP + 0x09 */ | ||
313 | u8 wkup_dvo; /* GPIO_WKUP + 0x0C */ | ||
314 | u8 reserved4[3]; /* GPIO_WKUP + 0x0D */ | ||
315 | u8 wkup_inten; /* GPIO_WKUP + 0x10 */ | ||
316 | u8 reserved5[3]; /* GPIO_WKUP + 0x11 */ | ||
317 | u8 wkup_iinten; /* GPIO_WKUP + 0x14 */ | ||
318 | u8 reserved6[3]; /* GPIO_WKUP + 0x15 */ | ||
319 | u16 wkup_itype; /* GPIO_WKUP + 0x18 */ | ||
320 | u8 reserved7[2]; /* GPIO_WKUP + 0x1A */ | ||
321 | u8 wkup_maste; /* GPIO_WKUP + 0x1C */ | ||
322 | u8 reserved8[3]; /* GPIO_WKUP + 0x1D */ | ||
323 | u8 wkup_ival; /* GPIO_WKUP + 0x20 */ | ||
324 | u8 reserved9[3]; /* GPIO_WKUP + 0x21 */ | ||
325 | u8 wkup_istat; /* GPIO_WKUP + 0x24 */ | ||
326 | u8 reserved10[3]; /* GPIO_WKUP + 0x25 */ | ||
327 | }; | ||
328 | |||
329 | /* XLB Bus control */ | ||
330 | struct mpc52xx_xlb { | ||
331 | u8 reserved[0x40]; | ||
332 | u32 config; /* XLB + 0x40 */ | ||
333 | u32 version; /* XLB + 0x44 */ | ||
334 | u32 status; /* XLB + 0x48 */ | ||
335 | u32 int_enable; /* XLB + 0x4c */ | ||
336 | u32 addr_capture; /* XLB + 0x50 */ | ||
337 | u32 bus_sig_capture; /* XLB + 0x54 */ | ||
338 | u32 addr_timeout; /* XLB + 0x58 */ | ||
339 | u32 data_timeout; /* XLB + 0x5c */ | ||
340 | u32 bus_act_timeout; /* XLB + 0x60 */ | ||
341 | u32 master_pri_enable; /* XLB + 0x64 */ | ||
342 | u32 master_priority; /* XLB + 0x68 */ | ||
343 | u32 base_address; /* XLB + 0x6c */ | ||
344 | u32 snoop_window; /* XLB + 0x70 */ | ||
345 | }; | ||
346 | |||
347 | #define MPC52xx_XLB_CFG_PLDIS (1 << 31) | ||
348 | #define MPC52xx_XLB_CFG_SNOOP (1 << 15) | ||
349 | |||
350 | /* Clock Distribution control */ | ||
351 | struct mpc52xx_cdm { | ||
352 | u32 jtag_id; /* CDM + 0x00 reg0 read only */ | ||
353 | u32 rstcfg; /* CDM + 0x04 reg1 read only */ | ||
354 | u32 breadcrumb; /* CDM + 0x08 reg2 */ | ||
355 | |||
356 | u8 mem_clk_sel; /* CDM + 0x0c reg3 byte0 */ | ||
357 | u8 xlb_clk_sel; /* CDM + 0x0d reg3 byte1 read only */ | ||
358 | u8 ipb_clk_sel; /* CDM + 0x0e reg3 byte2 */ | ||
359 | u8 pci_clk_sel; /* CDM + 0x0f reg3 byte3 */ | ||
360 | |||
361 | u8 ext_48mhz_en; /* CDM + 0x10 reg4 byte0 */ | ||
362 | u8 fd_enable; /* CDM + 0x11 reg4 byte1 */ | ||
363 | u16 fd_counters; /* CDM + 0x12 reg4 byte2,3 */ | ||
364 | |||
365 | u32 clk_enables; /* CDM + 0x14 reg5 */ | ||
366 | |||
367 | u8 osc_disable; /* CDM + 0x18 reg6 byte0 */ | ||
368 | u8 reserved0[3]; /* CDM + 0x19 reg6 byte1,2,3 */ | ||
369 | |||
370 | u8 ccs_sleep_enable; /* CDM + 0x1c reg7 byte0 */ | ||
371 | u8 osc_sleep_enable; /* CDM + 0x1d reg7 byte1 */ | ||
372 | u8 reserved1; /* CDM + 0x1e reg7 byte2 */ | ||
373 | u8 ccs_qreq_test; /* CDM + 0x1f reg7 byte3 */ | ||
374 | |||
375 | u8 soft_reset; /* CDM + 0x20 u8 byte0 */ | ||
376 | u8 no_ckstp; /* CDM + 0x21 u8 byte0 */ | ||
377 | u8 reserved2[2]; /* CDM + 0x22 u8 byte1,2,3 */ | ||
378 | |||
379 | u8 pll_lock; /* CDM + 0x24 reg9 byte0 */ | ||
380 | u8 pll_looselock; /* CDM + 0x25 reg9 byte1 */ | ||
381 | u8 pll_sm_lockwin; /* CDM + 0x26 reg9 byte2 */ | ||
382 | u8 reserved3; /* CDM + 0x27 reg9 byte3 */ | ||
383 | |||
384 | u16 reserved4; /* CDM + 0x28 reg10 byte0,1 */ | ||
385 | u16 mclken_div_psc1; /* CDM + 0x2a reg10 byte2,3 */ | ||
386 | |||
387 | u16 reserved5; /* CDM + 0x2c reg11 byte0,1 */ | ||
388 | u16 mclken_div_psc2; /* CDM + 0x2e reg11 byte2,3 */ | ||
389 | |||
390 | u16 reserved6; /* CDM + 0x30 reg12 byte0,1 */ | ||
391 | u16 mclken_div_psc3; /* CDM + 0x32 reg12 byte2,3 */ | ||
392 | |||
393 | u16 reserved7; /* CDM + 0x34 reg13 byte0,1 */ | ||
394 | u16 mclken_div_psc6; /* CDM + 0x36 reg13 byte2,3 */ | ||
395 | }; | ||
396 | |||
397 | #endif /* __ASSEMBLY__ */ | ||
398 | |||
399 | |||
400 | /* ========================================================================= */ | ||
401 | /* Prototypes for MPC52xx syslib */ | ||
402 | /* ========================================================================= */ | ||
403 | |||
404 | #ifndef __ASSEMBLY__ | ||
405 | |||
406 | extern void mpc52xx_init_irq(void); | ||
407 | extern int mpc52xx_get_irq(void); | ||
408 | |||
409 | extern unsigned long mpc52xx_find_end_of_memory(void); | ||
410 | extern void mpc52xx_set_bat(void); | ||
411 | extern void mpc52xx_map_io(void); | ||
412 | extern void mpc52xx_restart(char *cmd); | ||
413 | extern void mpc52xx_halt(void); | ||
414 | extern void mpc52xx_power_off(void); | ||
415 | extern void mpc52xx_progress(char *s, unsigned short hex); | ||
416 | extern void mpc52xx_calibrate_decr(void); | ||
417 | |||
418 | extern void mpc52xx_find_bridges(void); | ||
419 | |||
420 | extern void mpc52xx_setup_cpu(void); | ||
421 | |||
422 | |||
423 | |||
424 | /* Matching of PSC function */ | ||
425 | struct mpc52xx_psc_func { | ||
426 | int id; | ||
427 | char *func; | ||
428 | }; | ||
429 | |||
430 | extern int mpc52xx_match_psc_function(int psc_idx, const char *func); | ||
431 | extern struct mpc52xx_psc_func mpc52xx_psc_functions[]; | ||
432 | /* This array is to be defined in platform file */ | ||
433 | |||
434 | #endif /* __ASSEMBLY__ */ | ||
435 | |||
436 | |||
437 | /* ========================================================================= */ | ||
438 | /* Platform configuration */ | ||
439 | /* ========================================================================= */ | ||
440 | |||
441 | /* The U-Boot platform information struct */ | ||
442 | extern bd_t __res; | ||
443 | |||
444 | /* Platform options */ | ||
445 | #if defined(CONFIG_LITE5200) | ||
446 | #include <platforms/lite5200.h> | ||
447 | #endif | ||
448 | |||
449 | |||
450 | #endif /* __ASM_MPC52xx_H__ */ | ||
diff --git a/include/asm-ppc/mpc52xx_psc.h b/include/asm-ppc/mpc52xx_psc.h deleted file mode 100644 index 39fcd02cd4e8..000000000000 --- a/include/asm-ppc/mpc52xx_psc.h +++ /dev/null | |||
@@ -1,200 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/mpc52xx_psc.h | ||
3 | * | ||
4 | * Definitions of consts/structs to drive the Freescale MPC52xx OnChip | ||
5 | * PSCs. Theses are shared between multiple drivers since a PSC can be | ||
6 | * UART, AC97, IR, I2S, ... So this header is in asm-ppc. | ||
7 | * | ||
8 | * | ||
9 | * Maintainer : Sylvain Munaut <tnt@246tNt.com> | ||
10 | * | ||
11 | * Based/Extracted from some header of the 2.4 originally written by | ||
12 | * Dale Farnsworth <dfarnsworth@mvista.com> | ||
13 | * | ||
14 | * Copyright (C) 2004 Sylvain Munaut <tnt@246tNt.com> | ||
15 | * Copyright (C) 2003 MontaVista, Software, Inc. | ||
16 | * | ||
17 | * This file is licensed under the terms of the GNU General Public License | ||
18 | * version 2. This program is licensed "as is" without any warranty of any | ||
19 | * kind, whether express or implied. | ||
20 | */ | ||
21 | |||
22 | #ifndef __ASM_MPC52xx_PSC_H__ | ||
23 | #define __ASM_MPC52xx_PSC_H__ | ||
24 | |||
25 | #include <asm/types.h> | ||
26 | |||
27 | /* Max number of PSCs */ | ||
28 | #define MPC52xx_PSC_MAXNUM 6 | ||
29 | |||
30 | /* Programmable Serial Controller (PSC) status register bits */ | ||
31 | #define MPC52xx_PSC_SR_UNEX_RX 0x0001 | ||
32 | #define MPC52xx_PSC_SR_DATA_VAL 0x0002 | ||
33 | #define MPC52xx_PSC_SR_DATA_OVR 0x0004 | ||
34 | #define MPC52xx_PSC_SR_CMDSEND 0x0008 | ||
35 | #define MPC52xx_PSC_SR_CDE 0x0080 | ||
36 | #define MPC52xx_PSC_SR_RXRDY 0x0100 | ||
37 | #define MPC52xx_PSC_SR_RXFULL 0x0200 | ||
38 | #define MPC52xx_PSC_SR_TXRDY 0x0400 | ||
39 | #define MPC52xx_PSC_SR_TXEMP 0x0800 | ||
40 | #define MPC52xx_PSC_SR_OE 0x1000 | ||
41 | #define MPC52xx_PSC_SR_PE 0x2000 | ||
42 | #define MPC52xx_PSC_SR_FE 0x4000 | ||
43 | #define MPC52xx_PSC_SR_RB 0x8000 | ||
44 | |||
45 | /* PSC Command values */ | ||
46 | #define MPC52xx_PSC_RX_ENABLE 0x0001 | ||
47 | #define MPC52xx_PSC_RX_DISABLE 0x0002 | ||
48 | #define MPC52xx_PSC_TX_ENABLE 0x0004 | ||
49 | #define MPC52xx_PSC_TX_DISABLE 0x0008 | ||
50 | #define MPC52xx_PSC_SEL_MODE_REG_1 0x0010 | ||
51 | #define MPC52xx_PSC_RST_RX 0x0020 | ||
52 | #define MPC52xx_PSC_RST_TX 0x0030 | ||
53 | #define MPC52xx_PSC_RST_ERR_STAT 0x0040 | ||
54 | #define MPC52xx_PSC_RST_BRK_CHG_INT 0x0050 | ||
55 | #define MPC52xx_PSC_START_BRK 0x0060 | ||
56 | #define MPC52xx_PSC_STOP_BRK 0x0070 | ||
57 | |||
58 | /* PSC TxRx FIFO status bits */ | ||
59 | #define MPC52xx_PSC_RXTX_FIFO_ERR 0x0040 | ||
60 | #define MPC52xx_PSC_RXTX_FIFO_UF 0x0020 | ||
61 | #define MPC52xx_PSC_RXTX_FIFO_OF 0x0010 | ||
62 | #define MPC52xx_PSC_RXTX_FIFO_FR 0x0008 | ||
63 | #define MPC52xx_PSC_RXTX_FIFO_FULL 0x0004 | ||
64 | #define MPC52xx_PSC_RXTX_FIFO_ALARM 0x0002 | ||
65 | #define MPC52xx_PSC_RXTX_FIFO_EMPTY 0x0001 | ||
66 | |||
67 | /* PSC interrupt mask bits */ | ||
68 | #define MPC52xx_PSC_IMR_TXRDY 0x0100 | ||
69 | #define MPC52xx_PSC_IMR_RXRDY 0x0200 | ||
70 | #define MPC52xx_PSC_IMR_DB 0x0400 | ||
71 | #define MPC52xx_PSC_IMR_IPC 0x8000 | ||
72 | |||
73 | /* PSC input port change bit */ | ||
74 | #define MPC52xx_PSC_CTS 0x01 | ||
75 | #define MPC52xx_PSC_DCD 0x02 | ||
76 | #define MPC52xx_PSC_D_CTS 0x10 | ||
77 | #define MPC52xx_PSC_D_DCD 0x20 | ||
78 | |||
79 | /* PSC mode fields */ | ||
80 | #define MPC52xx_PSC_MODE_5_BITS 0x00 | ||
81 | #define MPC52xx_PSC_MODE_6_BITS 0x01 | ||
82 | #define MPC52xx_PSC_MODE_7_BITS 0x02 | ||
83 | #define MPC52xx_PSC_MODE_8_BITS 0x03 | ||
84 | #define MPC52xx_PSC_MODE_BITS_MASK 0x03 | ||
85 | #define MPC52xx_PSC_MODE_PAREVEN 0x00 | ||
86 | #define MPC52xx_PSC_MODE_PARODD 0x04 | ||
87 | #define MPC52xx_PSC_MODE_PARFORCE 0x08 | ||
88 | #define MPC52xx_PSC_MODE_PARNONE 0x10 | ||
89 | #define MPC52xx_PSC_MODE_ERR 0x20 | ||
90 | #define MPC52xx_PSC_MODE_FFULL 0x40 | ||
91 | #define MPC52xx_PSC_MODE_RXRTS 0x80 | ||
92 | |||
93 | #define MPC52xx_PSC_MODE_ONE_STOP_5_BITS 0x00 | ||
94 | #define MPC52xx_PSC_MODE_ONE_STOP 0x07 | ||
95 | #define MPC52xx_PSC_MODE_TWO_STOP 0x0f | ||
96 | |||
97 | #define MPC52xx_PSC_RFNUM_MASK 0x01ff | ||
98 | |||
99 | |||
100 | /* Structure of the hardware registers */ | ||
101 | struct mpc52xx_psc { | ||
102 | u8 mode; /* PSC + 0x00 */ | ||
103 | u8 reserved0[3]; | ||
104 | union { /* PSC + 0x04 */ | ||
105 | u16 status; | ||
106 | u16 clock_select; | ||
107 | } sr_csr; | ||
108 | #define mpc52xx_psc_status sr_csr.status | ||
109 | #define mpc52xx_psc_clock_select sr_csr.clock_select | ||
110 | u16 reserved1; | ||
111 | u8 command; /* PSC + 0x08 */ | ||
112 | u8 reserved2[3]; | ||
113 | union { /* PSC + 0x0c */ | ||
114 | u8 buffer_8; | ||
115 | u16 buffer_16; | ||
116 | u32 buffer_32; | ||
117 | } buffer; | ||
118 | #define mpc52xx_psc_buffer_8 buffer.buffer_8 | ||
119 | #define mpc52xx_psc_buffer_16 buffer.buffer_16 | ||
120 | #define mpc52xx_psc_buffer_32 buffer.buffer_32 | ||
121 | union { /* PSC + 0x10 */ | ||
122 | u8 ipcr; | ||
123 | u8 acr; | ||
124 | } ipcr_acr; | ||
125 | #define mpc52xx_psc_ipcr ipcr_acr.ipcr | ||
126 | #define mpc52xx_psc_acr ipcr_acr.acr | ||
127 | u8 reserved3[3]; | ||
128 | union { /* PSC + 0x14 */ | ||
129 | u16 isr; | ||
130 | u16 imr; | ||
131 | } isr_imr; | ||
132 | #define mpc52xx_psc_isr isr_imr.isr | ||
133 | #define mpc52xx_psc_imr isr_imr.imr | ||
134 | u16 reserved4; | ||
135 | u8 ctur; /* PSC + 0x18 */ | ||
136 | u8 reserved5[3]; | ||
137 | u8 ctlr; /* PSC + 0x1c */ | ||
138 | u8 reserved6[3]; | ||
139 | u32 ccr; /* PSC + 0x20 */ | ||
140 | u32 ac97_slots; /* PSC + 0x24 */ | ||
141 | u32 ac97_cmd; /* PSC + 0x28 */ | ||
142 | u32 ac97_data; /* PSC + 0x2c */ | ||
143 | u8 ivr; /* PSC + 0x30 */ | ||
144 | u8 reserved8[3]; | ||
145 | u8 ip; /* PSC + 0x34 */ | ||
146 | u8 reserved9[3]; | ||
147 | u8 op1; /* PSC + 0x38 */ | ||
148 | u8 reserved10[3]; | ||
149 | u8 op0; /* PSC + 0x3c */ | ||
150 | u8 reserved11[3]; | ||
151 | u32 sicr; /* PSC + 0x40 */ | ||
152 | u8 ircr1; /* PSC + 0x44 */ | ||
153 | u8 reserved13[3]; | ||
154 | u8 ircr2; /* PSC + 0x44 */ | ||
155 | u8 reserved14[3]; | ||
156 | u8 irsdr; /* PSC + 0x4c */ | ||
157 | u8 reserved15[3]; | ||
158 | u8 irmdr; /* PSC + 0x50 */ | ||
159 | u8 reserved16[3]; | ||
160 | u8 irfdr; /* PSC + 0x54 */ | ||
161 | u8 reserved17[3]; | ||
162 | }; | ||
163 | |||
164 | struct mpc52xx_psc_fifo { | ||
165 | u16 rfnum; /* PSC + 0x58 */ | ||
166 | u16 reserved18; | ||
167 | u16 tfnum; /* PSC + 0x5c */ | ||
168 | u16 reserved19; | ||
169 | u32 rfdata; /* PSC + 0x60 */ | ||
170 | u16 rfstat; /* PSC + 0x64 */ | ||
171 | u16 reserved20; | ||
172 | u8 rfcntl; /* PSC + 0x68 */ | ||
173 | u8 reserved21[5]; | ||
174 | u16 rfalarm; /* PSC + 0x6e */ | ||
175 | u16 reserved22; | ||
176 | u16 rfrptr; /* PSC + 0x72 */ | ||
177 | u16 reserved23; | ||
178 | u16 rfwptr; /* PSC + 0x76 */ | ||
179 | u16 reserved24; | ||
180 | u16 rflrfptr; /* PSC + 0x7a */ | ||
181 | u16 reserved25; | ||
182 | u16 rflwfptr; /* PSC + 0x7e */ | ||
183 | u32 tfdata; /* PSC + 0x80 */ | ||
184 | u16 tfstat; /* PSC + 0x84 */ | ||
185 | u16 reserved26; | ||
186 | u8 tfcntl; /* PSC + 0x88 */ | ||
187 | u8 reserved27[5]; | ||
188 | u16 tfalarm; /* PSC + 0x8e */ | ||
189 | u16 reserved28; | ||
190 | u16 tfrptr; /* PSC + 0x92 */ | ||
191 | u16 reserved29; | ||
192 | u16 tfwptr; /* PSC + 0x96 */ | ||
193 | u16 reserved30; | ||
194 | u16 tflrfptr; /* PSC + 0x9a */ | ||
195 | u16 reserved31; | ||
196 | u16 tflwfptr; /* PSC + 0x9e */ | ||
197 | }; | ||
198 | |||
199 | |||
200 | #endif /* __ASM_MPC52xx_PSC_H__ */ | ||
diff --git a/include/asm-ppc/mpc8260.h b/include/asm-ppc/mpc8260.h deleted file mode 100644 index 402ba15c2e80..000000000000 --- a/include/asm-ppc/mpc8260.h +++ /dev/null | |||
@@ -1,98 +0,0 @@ | |||
1 | /* | ||
2 | * Since there are many different boards and no standard configuration, | ||
3 | * we have a unique include file for each. Rather than change every | ||
4 | * file that has to include MPC8260 configuration, they all include | ||
5 | * this one and the configuration switching is done here. | ||
6 | */ | ||
7 | #ifdef __KERNEL__ | ||
8 | #ifndef __ASM_PPC_MPC8260_H__ | ||
9 | #define __ASM_PPC_MPC8260_H__ | ||
10 | |||
11 | |||
12 | #ifdef CONFIG_8260 | ||
13 | |||
14 | #ifdef CONFIG_EST8260 | ||
15 | #include <platforms/est8260.h> | ||
16 | #endif | ||
17 | |||
18 | #ifdef CONFIG_SBC82xx | ||
19 | #include <platforms/sbc82xx.h> | ||
20 | #endif | ||
21 | |||
22 | #ifdef CONFIG_SBS8260 | ||
23 | #include <platforms/sbs8260.h> | ||
24 | #endif | ||
25 | |||
26 | #ifdef CONFIG_RPX8260 | ||
27 | #include <platforms/rpx8260.h> | ||
28 | #endif | ||
29 | |||
30 | #ifdef CONFIG_WILLOW | ||
31 | #include <platforms/willow.h> | ||
32 | #endif | ||
33 | |||
34 | #ifdef CONFIG_TQM8260 | ||
35 | #include <platforms/tqm8260.h> | ||
36 | #endif | ||
37 | |||
38 | #ifdef CONFIG_PCI_8260 | ||
39 | #include <syslib/m82xx_pci.h> | ||
40 | #endif | ||
41 | |||
42 | /* Make sure the memory translation stuff is there if PCI not used. | ||
43 | */ | ||
44 | #ifndef _IO_BASE | ||
45 | #define _IO_BASE 0 | ||
46 | #endif | ||
47 | |||
48 | #ifndef _ISA_MEM_BASE | ||
49 | #define _ISA_MEM_BASE 0 | ||
50 | #endif | ||
51 | |||
52 | #ifndef PCI_DRAM_OFFSET | ||
53 | #define PCI_DRAM_OFFSET 0 | ||
54 | #endif | ||
55 | |||
56 | /* Map 256MB I/O region | ||
57 | */ | ||
58 | #ifndef IO_PHYS_ADDR | ||
59 | #define IO_PHYS_ADDR 0xe0000000 | ||
60 | #endif | ||
61 | #ifndef IO_VIRT_ADDR | ||
62 | #define IO_VIRT_ADDR IO_PHYS_ADDR | ||
63 | #endif | ||
64 | |||
65 | enum ppc_sys_devices { | ||
66 | MPC82xx_CPM_FCC1, | ||
67 | MPC82xx_CPM_FCC2, | ||
68 | MPC82xx_CPM_FCC3, | ||
69 | MPC82xx_CPM_I2C, | ||
70 | MPC82xx_CPM_SCC1, | ||
71 | MPC82xx_CPM_SCC2, | ||
72 | MPC82xx_CPM_SCC3, | ||
73 | MPC82xx_CPM_SCC4, | ||
74 | MPC82xx_CPM_SPI, | ||
75 | MPC82xx_CPM_MCC1, | ||
76 | MPC82xx_CPM_MCC2, | ||
77 | MPC82xx_CPM_SMC1, | ||
78 | MPC82xx_CPM_SMC2, | ||
79 | MPC82xx_CPM_USB, | ||
80 | MPC82xx_SEC1, | ||
81 | MPC82xx_MDIO_BB, | ||
82 | NUM_PPC_SYS_DEVS, | ||
83 | }; | ||
84 | |||
85 | #ifndef __ASSEMBLY__ | ||
86 | /* The "residual" data board information structure the boot loader | ||
87 | * hands to us. | ||
88 | */ | ||
89 | extern unsigned char __res[]; | ||
90 | #endif | ||
91 | |||
92 | #ifndef BOARD_CHIP_NAME | ||
93 | #define BOARD_CHIP_NAME "" | ||
94 | #endif | ||
95 | |||
96 | #endif /* CONFIG_8260 */ | ||
97 | #endif /* !__ASM_PPC_MPC8260_H__ */ | ||
98 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/mpc8260_pci9.h b/include/asm-ppc/mpc8260_pci9.h deleted file mode 100644 index 9f7176881c56..000000000000 --- a/include/asm-ppc/mpc8260_pci9.h +++ /dev/null | |||
@@ -1,47 +0,0 @@ | |||
1 | /* include/asm-ppc/mpc8260_pci9.h | ||
2 | * | ||
3 | * Undefine the PCI read* and in* macros so we can define them as functions | ||
4 | * that implement the workaround for the MPC8260 device erratum PCI 9. | ||
5 | * | ||
6 | * This header file should only be included at the end of include/asm-ppc/io.h | ||
7 | * and never included directly anywhere else. | ||
8 | * | ||
9 | * Author: andy_lowe@mvista.com | ||
10 | * | ||
11 | * 2003 (c) MontaVista Software, Inc. This file is licensed under | ||
12 | * the terms of the GNU General Public License version 2. This program | ||
13 | * is licensed "as is" without any warranty of any kind, whether express | ||
14 | * or implied. | ||
15 | */ | ||
16 | #ifndef _PPC_IO_H | ||
17 | #error "Do not include mpc8260_pci9.h directly." | ||
18 | #endif | ||
19 | |||
20 | #ifdef __KERNEL__ | ||
21 | #ifndef __CONFIG_8260_PCI9_DEFS | ||
22 | #define __CONFIG_8260_PCI9_DEFS | ||
23 | |||
24 | #undef readb | ||
25 | #undef readw | ||
26 | #undef readl | ||
27 | #undef insb | ||
28 | #undef insw | ||
29 | #undef insl | ||
30 | #undef inb | ||
31 | #undef inw | ||
32 | #undef inl | ||
33 | #undef memcpy_fromio | ||
34 | |||
35 | extern int readb(volatile unsigned char *addr); | ||
36 | extern int readw(volatile unsigned short *addr); | ||
37 | extern unsigned readl(volatile unsigned *addr); | ||
38 | extern void insb(unsigned port, void *buf, int ns); | ||
39 | extern void insw(unsigned port, void *buf, int ns); | ||
40 | extern void insl(unsigned port, void *buf, int nl); | ||
41 | extern int inb(unsigned port); | ||
42 | extern int inw(unsigned port); | ||
43 | extern unsigned inl(unsigned port); | ||
44 | extern void *memcpy_fromio(void *dest, unsigned long src, size_t count); | ||
45 | |||
46 | #endif /* !__CONFIG_8260_PCI9_DEFS */ | ||
47 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/mpc8xx.h b/include/asm-ppc/mpc8xx.h deleted file mode 100644 index b9e3060b0278..000000000000 --- a/include/asm-ppc/mpc8xx.h +++ /dev/null | |||
@@ -1,122 +0,0 @@ | |||
1 | /* This is the single file included by all MPC8xx build options. | ||
2 | * Since there are many different boards and no standard configuration, | ||
3 | * we have a unique include file for each. Rather than change every | ||
4 | * file that has to include MPC8xx configuration, they all include | ||
5 | * this one and the configuration switching is done here. | ||
6 | */ | ||
7 | #ifdef __KERNEL__ | ||
8 | #ifndef __CONFIG_8xx_DEFS | ||
9 | #define __CONFIG_8xx_DEFS | ||
10 | |||
11 | |||
12 | #ifdef CONFIG_8xx | ||
13 | |||
14 | #ifdef CONFIG_MBX | ||
15 | #include <platforms/mbx.h> | ||
16 | #endif | ||
17 | |||
18 | #ifdef CONFIG_FADS | ||
19 | #include <platforms/fads.h> | ||
20 | #endif | ||
21 | |||
22 | #ifdef CONFIG_RPXLITE | ||
23 | #include <platforms/rpxlite.h> | ||
24 | #endif | ||
25 | |||
26 | #ifdef CONFIG_BSEIP | ||
27 | #include <platforms/bseip.h> | ||
28 | #endif | ||
29 | |||
30 | #ifdef CONFIG_RPXCLASSIC | ||
31 | #include <platforms/rpxclassic.h> | ||
32 | #endif | ||
33 | |||
34 | #if defined(CONFIG_TQM8xxL) | ||
35 | #include <platforms/tqm8xx.h> | ||
36 | #endif | ||
37 | |||
38 | #if defined(CONFIG_IVMS8) || defined(CONFIG_IVML24) | ||
39 | #include <platforms/ivms8.h> | ||
40 | #endif | ||
41 | |||
42 | #if defined(CONFIG_HERMES_PRO) | ||
43 | #include <platforms/hermes.h> | ||
44 | #endif | ||
45 | |||
46 | #if defined(CONFIG_IP860) | ||
47 | #include <platforms/ip860.h> | ||
48 | #endif | ||
49 | |||
50 | #if defined(CONFIG_LWMON) | ||
51 | #include <platforms/lwmon.h> | ||
52 | #endif | ||
53 | |||
54 | #if defined(CONFIG_PCU_E) | ||
55 | #include <platforms/pcu_e.h> | ||
56 | #endif | ||
57 | |||
58 | #if defined(CONFIG_CCM) | ||
59 | #include <platforms/ccm.h> | ||
60 | #endif | ||
61 | |||
62 | #if defined(CONFIG_LANTEC) | ||
63 | #include <platforms/lantec.h> | ||
64 | #endif | ||
65 | |||
66 | /* Currently, all 8xx boards that support a processor to PCI/ISA bridge | ||
67 | * use the same memory map. | ||
68 | */ | ||
69 | #if 0 | ||
70 | #if defined(CONFIG_PCI) && defined(PCI_ISA_IO_ADDR) | ||
71 | #define _IO_BASE PCI_ISA_IO_ADDR | ||
72 | #define _ISA_MEM_BASE PCI_ISA_MEM_ADDR | ||
73 | #define PCI_DRAM_OFFSET 0x80000000 | ||
74 | #else | ||
75 | #define _IO_BASE 0 | ||
76 | #define _ISA_MEM_BASE 0 | ||
77 | #define PCI_DRAM_OFFSET 0 | ||
78 | #endif | ||
79 | #else | ||
80 | #if !defined(_IO_BASE) /* defined in board specific header */ | ||
81 | #define _IO_BASE 0 | ||
82 | #endif | ||
83 | #define _ISA_MEM_BASE 0 | ||
84 | #define PCI_DRAM_OFFSET 0 | ||
85 | #endif | ||
86 | |||
87 | #ifndef __ASSEMBLY__ | ||
88 | /* The "residual" data board information structure the boot loader | ||
89 | * hands to us. | ||
90 | */ | ||
91 | extern unsigned char __res[]; | ||
92 | |||
93 | struct pt_regs; | ||
94 | |||
95 | enum ppc_sys_devices { | ||
96 | MPC8xx_CPM_FEC1, | ||
97 | MPC8xx_CPM_FEC2, | ||
98 | MPC8xx_CPM_I2C, | ||
99 | MPC8xx_CPM_SCC1, | ||
100 | MPC8xx_CPM_SCC2, | ||
101 | MPC8xx_CPM_SCC3, | ||
102 | MPC8xx_CPM_SCC4, | ||
103 | MPC8xx_CPM_SPI, | ||
104 | MPC8xx_CPM_MCC1, | ||
105 | MPC8xx_CPM_MCC2, | ||
106 | MPC8xx_CPM_SMC1, | ||
107 | MPC8xx_CPM_SMC2, | ||
108 | MPC8xx_CPM_USB, | ||
109 | MPC8xx_MDIO_FEC, | ||
110 | NUM_PPC_SYS_DEVS, | ||
111 | }; | ||
112 | |||
113 | #define PPC_PIN_SIZE (24 * 1024 * 1024) /* 24Mbytes of data pinned */ | ||
114 | |||
115 | #ifndef BOARD_CHIP_NAME | ||
116 | #define BOARD_CHIP_NAME "" | ||
117 | #endif | ||
118 | |||
119 | #endif /* !__ASSEMBLY__ */ | ||
120 | #endif /* CONFIG_8xx */ | ||
121 | #endif /* __CONFIG_8xx_DEFS */ | ||
122 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/mv64x60.h b/include/asm-ppc/mv64x60.h deleted file mode 100644 index 2963d6aa3ea5..000000000000 --- a/include/asm-ppc/mv64x60.h +++ /dev/null | |||
@@ -1,353 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/mv64x60.h | ||
3 | * | ||
4 | * Prototypes, etc. for the Marvell/Galileo MV64x60 host bridge routines. | ||
5 | * | ||
6 | * Author: Mark A. Greer <mgreer@mvista.com> | ||
7 | * | ||
8 | * 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under | ||
9 | * the terms of the GNU General Public License version 2. This program | ||
10 | * is licensed "as is" without any warranty of any kind, whether express | ||
11 | * or implied. | ||
12 | */ | ||
13 | #ifndef __ASMPPC_MV64x60_H | ||
14 | #define __ASMPPC_MV64x60_H | ||
15 | |||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/pci.h> | ||
19 | #include <linux/slab.h> | ||
20 | |||
21 | #include <asm/byteorder.h> | ||
22 | #include <asm/io.h> | ||
23 | #include <asm/irq.h> | ||
24 | #include <asm/uaccess.h> | ||
25 | #include <asm/machdep.h> | ||
26 | #include <asm/pci-bridge.h> | ||
27 | #include <asm/mv64x60_defs.h> | ||
28 | |||
29 | struct platform_device; | ||
30 | |||
31 | extern u8 mv64x60_pci_exclude_bridge; | ||
32 | |||
33 | extern spinlock_t mv64x60_lock; | ||
34 | |||
35 | /* 32-bit Window table entry defines */ | ||
36 | #define MV64x60_CPU2MEM_0_WIN 0 | ||
37 | #define MV64x60_CPU2MEM_1_WIN 1 | ||
38 | #define MV64x60_CPU2MEM_2_WIN 2 | ||
39 | #define MV64x60_CPU2MEM_3_WIN 3 | ||
40 | #define MV64x60_CPU2DEV_0_WIN 4 | ||
41 | #define MV64x60_CPU2DEV_1_WIN 5 | ||
42 | #define MV64x60_CPU2DEV_2_WIN 6 | ||
43 | #define MV64x60_CPU2DEV_3_WIN 7 | ||
44 | #define MV64x60_CPU2BOOT_WIN 8 | ||
45 | #define MV64x60_CPU2PCI0_IO_WIN 9 | ||
46 | #define MV64x60_CPU2PCI0_MEM_0_WIN 10 | ||
47 | #define MV64x60_CPU2PCI0_MEM_1_WIN 11 | ||
48 | #define MV64x60_CPU2PCI0_MEM_2_WIN 12 | ||
49 | #define MV64x60_CPU2PCI0_MEM_3_WIN 13 | ||
50 | #define MV64x60_CPU2PCI1_IO_WIN 14 | ||
51 | #define MV64x60_CPU2PCI1_MEM_0_WIN 15 | ||
52 | #define MV64x60_CPU2PCI1_MEM_1_WIN 16 | ||
53 | #define MV64x60_CPU2PCI1_MEM_2_WIN 17 | ||
54 | #define MV64x60_CPU2PCI1_MEM_3_WIN 18 | ||
55 | #define MV64x60_CPU2SRAM_WIN 19 | ||
56 | #define MV64x60_CPU2PCI0_IO_REMAP_WIN 20 | ||
57 | #define MV64x60_CPU2PCI1_IO_REMAP_WIN 21 | ||
58 | #define MV64x60_CPU_PROT_0_WIN 22 | ||
59 | #define MV64x60_CPU_PROT_1_WIN 23 | ||
60 | #define MV64x60_CPU_PROT_2_WIN 24 | ||
61 | #define MV64x60_CPU_PROT_3_WIN 25 | ||
62 | #define MV64x60_CPU_SNOOP_0_WIN 26 | ||
63 | #define MV64x60_CPU_SNOOP_1_WIN 27 | ||
64 | #define MV64x60_CPU_SNOOP_2_WIN 28 | ||
65 | #define MV64x60_CPU_SNOOP_3_WIN 29 | ||
66 | #define MV64x60_PCI02MEM_REMAP_0_WIN 30 | ||
67 | #define MV64x60_PCI02MEM_REMAP_1_WIN 31 | ||
68 | #define MV64x60_PCI02MEM_REMAP_2_WIN 32 | ||
69 | #define MV64x60_PCI02MEM_REMAP_3_WIN 33 | ||
70 | #define MV64x60_PCI12MEM_REMAP_0_WIN 34 | ||
71 | #define MV64x60_PCI12MEM_REMAP_1_WIN 35 | ||
72 | #define MV64x60_PCI12MEM_REMAP_2_WIN 36 | ||
73 | #define MV64x60_PCI12MEM_REMAP_3_WIN 37 | ||
74 | #define MV64x60_ENET2MEM_0_WIN 38 | ||
75 | #define MV64x60_ENET2MEM_1_WIN 39 | ||
76 | #define MV64x60_ENET2MEM_2_WIN 40 | ||
77 | #define MV64x60_ENET2MEM_3_WIN 41 | ||
78 | #define MV64x60_ENET2MEM_4_WIN 42 | ||
79 | #define MV64x60_ENET2MEM_5_WIN 43 | ||
80 | #define MV64x60_MPSC2MEM_0_WIN 44 | ||
81 | #define MV64x60_MPSC2MEM_1_WIN 45 | ||
82 | #define MV64x60_MPSC2MEM_2_WIN 46 | ||
83 | #define MV64x60_MPSC2MEM_3_WIN 47 | ||
84 | #define MV64x60_IDMA2MEM_0_WIN 48 | ||
85 | #define MV64x60_IDMA2MEM_1_WIN 49 | ||
86 | #define MV64x60_IDMA2MEM_2_WIN 50 | ||
87 | #define MV64x60_IDMA2MEM_3_WIN 51 | ||
88 | #define MV64x60_IDMA2MEM_4_WIN 52 | ||
89 | #define MV64x60_IDMA2MEM_5_WIN 53 | ||
90 | #define MV64x60_IDMA2MEM_6_WIN 54 | ||
91 | #define MV64x60_IDMA2MEM_7_WIN 55 | ||
92 | |||
93 | #define MV64x60_32BIT_WIN_COUNT 56 | ||
94 | |||
95 | /* 64-bit Window table entry defines */ | ||
96 | #define MV64x60_CPU2PCI0_MEM_0_REMAP_WIN 0 | ||
97 | #define MV64x60_CPU2PCI0_MEM_1_REMAP_WIN 1 | ||
98 | #define MV64x60_CPU2PCI0_MEM_2_REMAP_WIN 2 | ||
99 | #define MV64x60_CPU2PCI0_MEM_3_REMAP_WIN 3 | ||
100 | #define MV64x60_CPU2PCI1_MEM_0_REMAP_WIN 4 | ||
101 | #define MV64x60_CPU2PCI1_MEM_1_REMAP_WIN 5 | ||
102 | #define MV64x60_CPU2PCI1_MEM_2_REMAP_WIN 6 | ||
103 | #define MV64x60_CPU2PCI1_MEM_3_REMAP_WIN 7 | ||
104 | #define MV64x60_PCI02MEM_ACC_CNTL_0_WIN 8 | ||
105 | #define MV64x60_PCI02MEM_ACC_CNTL_1_WIN 9 | ||
106 | #define MV64x60_PCI02MEM_ACC_CNTL_2_WIN 10 | ||
107 | #define MV64x60_PCI02MEM_ACC_CNTL_3_WIN 11 | ||
108 | #define MV64x60_PCI12MEM_ACC_CNTL_0_WIN 12 | ||
109 | #define MV64x60_PCI12MEM_ACC_CNTL_1_WIN 13 | ||
110 | #define MV64x60_PCI12MEM_ACC_CNTL_2_WIN 14 | ||
111 | #define MV64x60_PCI12MEM_ACC_CNTL_3_WIN 15 | ||
112 | #define MV64x60_PCI02MEM_SNOOP_0_WIN 16 | ||
113 | #define MV64x60_PCI02MEM_SNOOP_1_WIN 17 | ||
114 | #define MV64x60_PCI02MEM_SNOOP_2_WIN 18 | ||
115 | #define MV64x60_PCI02MEM_SNOOP_3_WIN 19 | ||
116 | #define MV64x60_PCI12MEM_SNOOP_0_WIN 20 | ||
117 | #define MV64x60_PCI12MEM_SNOOP_1_WIN 21 | ||
118 | #define MV64x60_PCI12MEM_SNOOP_2_WIN 22 | ||
119 | #define MV64x60_PCI12MEM_SNOOP_3_WIN 23 | ||
120 | |||
121 | #define MV64x60_64BIT_WIN_COUNT 24 | ||
122 | |||
123 | /* | ||
124 | * Define a structure that's used to pass in config information to the | ||
125 | * core routines. | ||
126 | */ | ||
127 | struct mv64x60_pci_window { | ||
128 | u32 cpu_base; | ||
129 | u32 pci_base_hi; | ||
130 | u32 pci_base_lo; | ||
131 | u32 size; | ||
132 | u32 swap; | ||
133 | }; | ||
134 | |||
135 | struct mv64x60_pci_info { | ||
136 | u8 enable_bus; /* allow access to this PCI bus? */ | ||
137 | |||
138 | struct mv64x60_pci_window pci_io; | ||
139 | struct mv64x60_pci_window pci_mem[3]; | ||
140 | |||
141 | u32 acc_cntl_options[MV64x60_CPU2MEM_WINDOWS]; | ||
142 | u32 snoop_options[MV64x60_CPU2MEM_WINDOWS]; | ||
143 | u16 pci_cmd_bits; | ||
144 | u16 latency_timer; | ||
145 | }; | ||
146 | |||
147 | struct mv64x60_setup_info { | ||
148 | u32 phys_reg_base; | ||
149 | u32 window_preserve_mask_32_hi; | ||
150 | u32 window_preserve_mask_32_lo; | ||
151 | u32 window_preserve_mask_64; | ||
152 | |||
153 | u32 cpu_prot_options[MV64x60_CPU2MEM_WINDOWS]; | ||
154 | u32 cpu_snoop_options[MV64x60_CPU2MEM_WINDOWS]; | ||
155 | u32 enet_options[MV64x60_CPU2MEM_WINDOWS]; | ||
156 | u32 mpsc_options[MV64x60_CPU2MEM_WINDOWS]; | ||
157 | u32 idma_options[MV64x60_CPU2MEM_WINDOWS]; | ||
158 | |||
159 | struct mv64x60_pci_info pci_0; | ||
160 | struct mv64x60_pci_info pci_1; | ||
161 | }; | ||
162 | |||
163 | /* Define what the top bits in the extra member of a window entry means. */ | ||
164 | #define MV64x60_EXTRA_INVALID 0x00000000 | ||
165 | #define MV64x60_EXTRA_CPUWIN_ENAB 0x10000000 | ||
166 | #define MV64x60_EXTRA_CPUPROT_ENAB 0x20000000 | ||
167 | #define MV64x60_EXTRA_ENET_ENAB 0x30000000 | ||
168 | #define MV64x60_EXTRA_MPSC_ENAB 0x40000000 | ||
169 | #define MV64x60_EXTRA_IDMA_ENAB 0x50000000 | ||
170 | #define MV64x60_EXTRA_PCIACC_ENAB 0x60000000 | ||
171 | |||
172 | #define MV64x60_EXTRA_MASK 0xf0000000 | ||
173 | |||
174 | /* | ||
175 | * Define the 'handle' struct that will be passed between the 64x60 core | ||
176 | * code and the platform-specific code that will use it. The handle | ||
177 | * will contain pointers to chip-specific routines & information. | ||
178 | */ | ||
179 | struct mv64x60_32bit_window { | ||
180 | u32 base_reg; | ||
181 | u32 size_reg; | ||
182 | u8 base_bits; | ||
183 | u8 size_bits; | ||
184 | u32 (*get_from_field)(u32 val, u32 num_bits); | ||
185 | u32 (*map_to_field)(u32 val, u32 num_bits); | ||
186 | u32 extra; | ||
187 | }; | ||
188 | |||
189 | struct mv64x60_64bit_window { | ||
190 | u32 base_hi_reg; | ||
191 | u32 base_lo_reg; | ||
192 | u32 size_reg; | ||
193 | u8 base_lo_bits; | ||
194 | u8 size_bits; | ||
195 | u32 (*get_from_field)(u32 val, u32 num_bits); | ||
196 | u32 (*map_to_field)(u32 val, u32 num_bits); | ||
197 | u32 extra; | ||
198 | }; | ||
199 | |||
200 | typedef struct mv64x60_handle mv64x60_handle_t; | ||
201 | struct mv64x60_chip_info { | ||
202 | u32 (*translate_size)(u32 base, u32 size, u32 num_bits); | ||
203 | u32 (*untranslate_size)(u32 base, u32 size, u32 num_bits); | ||
204 | void (*set_pci2mem_window)(struct pci_controller *hose, u32 bus, | ||
205 | u32 window, u32 base); | ||
206 | void (*set_pci2regs_window)(struct mv64x60_handle *bh, | ||
207 | struct pci_controller *hose, u32 bus, u32 base); | ||
208 | u32 (*is_enabled_32bit)(mv64x60_handle_t *bh, u32 window); | ||
209 | void (*enable_window_32bit)(mv64x60_handle_t *bh, u32 window); | ||
210 | void (*disable_window_32bit)(mv64x60_handle_t *bh, u32 window); | ||
211 | void (*enable_window_64bit)(mv64x60_handle_t *bh, u32 window); | ||
212 | void (*disable_window_64bit)(mv64x60_handle_t *bh, u32 window); | ||
213 | void (*disable_all_windows)(mv64x60_handle_t *bh, | ||
214 | struct mv64x60_setup_info *si); | ||
215 | void (*config_io2mem_windows)(mv64x60_handle_t *bh, | ||
216 | struct mv64x60_setup_info *si, | ||
217 | u32 mem_windows[MV64x60_CPU2MEM_WINDOWS][2]); | ||
218 | void (*set_mpsc2regs_window)(struct mv64x60_handle *bh, u32 base); | ||
219 | void (*chip_specific_init)(mv64x60_handle_t *bh, | ||
220 | struct mv64x60_setup_info *si); | ||
221 | |||
222 | struct mv64x60_32bit_window *window_tab_32bit; | ||
223 | struct mv64x60_64bit_window *window_tab_64bit; | ||
224 | }; | ||
225 | |||
226 | struct mv64x60_handle { | ||
227 | u32 type; /* type of bridge */ | ||
228 | u32 rev; /* revision of bridge */ | ||
229 | void __iomem *v_base;/* virtual base addr of bridge regs */ | ||
230 | phys_addr_t p_base; /* physical base addr of bridge regs */ | ||
231 | |||
232 | u32 pci_mode_a; /* pci 0 mode: conventional pci, pci-x*/ | ||
233 | u32 pci_mode_b; /* pci 1 mode: conventional pci, pci-x*/ | ||
234 | |||
235 | u32 io_base_a; /* vaddr of pci 0's I/O space */ | ||
236 | u32 io_base_b; /* vaddr of pci 1's I/O space */ | ||
237 | |||
238 | struct pci_controller *hose_a; | ||
239 | struct pci_controller *hose_b; | ||
240 | |||
241 | struct mv64x60_chip_info *ci; /* chip/bridge-specific info */ | ||
242 | }; | ||
243 | |||
244 | |||
245 | /* Define I/O routines for accessing registers on the 64x60 bridge. */ | ||
246 | extern inline void | ||
247 | mv64x60_write(struct mv64x60_handle *bh, u32 offset, u32 val) { | ||
248 | ulong flags; | ||
249 | |||
250 | spin_lock_irqsave(&mv64x60_lock, flags); | ||
251 | out_le32(bh->v_base + offset, val); | ||
252 | spin_unlock_irqrestore(&mv64x60_lock, flags); | ||
253 | } | ||
254 | |||
255 | extern inline u32 | ||
256 | mv64x60_read(struct mv64x60_handle *bh, u32 offset) { | ||
257 | ulong flags; | ||
258 | u32 reg; | ||
259 | |||
260 | spin_lock_irqsave(&mv64x60_lock, flags); | ||
261 | reg = in_le32(bh->v_base + offset); | ||
262 | spin_unlock_irqrestore(&mv64x60_lock, flags); | ||
263 | return reg; | ||
264 | } | ||
265 | |||
266 | extern inline void | ||
267 | mv64x60_modify(struct mv64x60_handle *bh, u32 offs, u32 data, u32 mask) | ||
268 | { | ||
269 | u32 reg; | ||
270 | ulong flags; | ||
271 | |||
272 | spin_lock_irqsave(&mv64x60_lock, flags); | ||
273 | reg = in_le32(bh->v_base + offs) & (~mask); | ||
274 | reg |= data & mask; | ||
275 | out_le32(bh->v_base + offs, reg); | ||
276 | spin_unlock_irqrestore(&mv64x60_lock, flags); | ||
277 | } | ||
278 | |||
279 | #define mv64x60_set_bits(bh, offs, bits) mv64x60_modify(bh, offs, ~0, bits) | ||
280 | #define mv64x60_clr_bits(bh, offs, bits) mv64x60_modify(bh, offs, 0, bits) | ||
281 | |||
282 | #if defined(CONFIG_SYSFS) && !defined(CONFIG_GT64260) | ||
283 | #define MV64XXX_DEV_NAME "mv64xxx" | ||
284 | |||
285 | struct mv64xxx_pdata { | ||
286 | u32 hs_reg_valid; | ||
287 | }; | ||
288 | #endif | ||
289 | |||
290 | /* Externally visible function prototypes */ | ||
291 | int mv64x60_init(struct mv64x60_handle *bh, struct mv64x60_setup_info *si); | ||
292 | u32 mv64x60_get_mem_size(u32 bridge_base, u32 chip_type); | ||
293 | void mv64x60_early_init(struct mv64x60_handle *bh, | ||
294 | struct mv64x60_setup_info *si); | ||
295 | void mv64x60_alloc_hose(struct mv64x60_handle *bh, u32 cfg_addr, | ||
296 | u32 cfg_data, struct pci_controller **hose); | ||
297 | int mv64x60_get_type(struct mv64x60_handle *bh); | ||
298 | int mv64x60_setup_for_chip(struct mv64x60_handle *bh); | ||
299 | void __iomem *mv64x60_get_bridge_vbase(void); | ||
300 | u32 mv64x60_get_bridge_type(void); | ||
301 | u32 mv64x60_get_bridge_rev(void); | ||
302 | void mv64x60_get_mem_windows(struct mv64x60_handle *bh, | ||
303 | u32 mem_windows[MV64x60_CPU2MEM_WINDOWS][2]); | ||
304 | void mv64x60_config_cpu2mem_windows(struct mv64x60_handle *bh, | ||
305 | struct mv64x60_setup_info *si, | ||
306 | u32 mem_windows[MV64x60_CPU2MEM_WINDOWS][2]); | ||
307 | void mv64x60_config_cpu2pci_windows(struct mv64x60_handle *bh, | ||
308 | struct mv64x60_pci_info *pi, u32 bus); | ||
309 | void mv64x60_config_pci2mem_windows(struct mv64x60_handle *bh, | ||
310 | struct pci_controller *hose, struct mv64x60_pci_info *pi, u32 bus, | ||
311 | u32 mem_windows[MV64x60_CPU2MEM_WINDOWS][2]); | ||
312 | void mv64x60_config_resources(struct pci_controller *hose, | ||
313 | struct mv64x60_pci_info *pi, u32 io_base); | ||
314 | void mv64x60_config_pci_params(struct pci_controller *hose, | ||
315 | struct mv64x60_pci_info *pi); | ||
316 | void mv64x60_pd_fixup(struct mv64x60_handle *bh, | ||
317 | struct platform_device *pd_devs[], u32 entries); | ||
318 | void mv64x60_get_32bit_window(struct mv64x60_handle *bh, u32 window, | ||
319 | u32 *base, u32 *size); | ||
320 | void mv64x60_set_32bit_window(struct mv64x60_handle *bh, u32 window, u32 base, | ||
321 | u32 size, u32 other_bits); | ||
322 | void mv64x60_get_64bit_window(struct mv64x60_handle *bh, u32 window, | ||
323 | u32 *base_hi, u32 *base_lo, u32 *size); | ||
324 | void mv64x60_set_64bit_window(struct mv64x60_handle *bh, u32 window, | ||
325 | u32 base_hi, u32 base_lo, u32 size, u32 other_bits); | ||
326 | void mv64x60_set_bus(struct mv64x60_handle *bh, u32 bus, u32 child_bus); | ||
327 | int mv64x60_pci_exclude_device(u8 bus, u8 devfn); | ||
328 | |||
329 | |||
330 | void gt64260_init_irq(void); | ||
331 | int gt64260_get_irq(void); | ||
332 | void mv64360_init_irq(void); | ||
333 | int mv64360_get_irq(void); | ||
334 | |||
335 | u32 mv64x60_mask(u32 val, u32 num_bits); | ||
336 | u32 mv64x60_shift_left(u32 val, u32 num_bits); | ||
337 | u32 mv64x60_shift_right(u32 val, u32 num_bits); | ||
338 | u32 mv64x60_calc_mem_size(struct mv64x60_handle *bh, | ||
339 | u32 mem_windows[MV64x60_CPU2MEM_WINDOWS][2]); | ||
340 | |||
341 | void mv64x60_progress_init(u32 base); | ||
342 | void mv64x60_mpsc_progress(char *s, unsigned short hex); | ||
343 | |||
344 | extern struct mv64x60_32bit_window | ||
345 | gt64260_32bit_windows[MV64x60_32BIT_WIN_COUNT]; | ||
346 | extern struct mv64x60_64bit_window | ||
347 | gt64260_64bit_windows[MV64x60_64BIT_WIN_COUNT]; | ||
348 | extern struct mv64x60_32bit_window | ||
349 | mv64360_32bit_windows[MV64x60_32BIT_WIN_COUNT]; | ||
350 | extern struct mv64x60_64bit_window | ||
351 | mv64360_64bit_windows[MV64x60_64BIT_WIN_COUNT]; | ||
352 | |||
353 | #endif /* __ASMPPC_MV64x60_H */ | ||
diff --git a/include/asm-ppc/mv64x60_defs.h b/include/asm-ppc/mv64x60_defs.h deleted file mode 100644 index 5b0704a3e6ea..000000000000 --- a/include/asm-ppc/mv64x60_defs.h +++ /dev/null | |||
@@ -1,976 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/mv64x60_defs.h | ||
3 | * | ||
4 | * Register definitions for the Marvell/Galileo GT64260, MV64360, etc. | ||
5 | * host bridges. | ||
6 | * | ||
7 | * Author: Mark A. Greer <mgreer@mvista.com> | ||
8 | * | ||
9 | * 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under | ||
10 | * the terms of the GNU General Public License version 2. This program | ||
11 | * is licensed "as is" without any warranty of any kind, whether express | ||
12 | * or implied. | ||
13 | */ | ||
14 | #ifndef __ASMPPC_MV64x60_DEFS_H | ||
15 | #define __ASMPPC_MV64x60_DEFS_H | ||
16 | |||
17 | /* | ||
18 | * Define the Marvell bridges that are supported | ||
19 | */ | ||
20 | #define MV64x60_TYPE_INVALID 0 | ||
21 | #define MV64x60_TYPE_GT64260A 1 | ||
22 | #define MV64x60_TYPE_GT64260B 2 | ||
23 | #define MV64x60_TYPE_MV64360 3 | ||
24 | #define MV64x60_TYPE_MV64361 4 | ||
25 | #define MV64x60_TYPE_MV64362 5 | ||
26 | #define MV64x60_TYPE_MV64460 6 | ||
27 | |||
28 | |||
29 | /* Revisions of each supported chip */ | ||
30 | #define GT64260_REV_A 0x10 | ||
31 | #define GT64260_REV_B 0x20 | ||
32 | #define MV64360 0x01 | ||
33 | #define MV64460 0x01 | ||
34 | |||
35 | /* Minimum window size supported by 64260 is 1MB */ | ||
36 | #define GT64260_WINDOW_SIZE_MIN 0x00100000 | ||
37 | #define MV64360_WINDOW_SIZE_MIN 0x00010000 | ||
38 | |||
39 | #define MV64x60_TCLK_FREQ_MAX 133333333U | ||
40 | |||
41 | /* IRQ's for embedded controllers */ | ||
42 | #define MV64x60_IRQ_DEV 1 | ||
43 | #define MV64x60_IRQ_CPU_ERR 3 | ||
44 | #define MV64x60_IRQ_TIMER_0_1 8 | ||
45 | #define MV64x60_IRQ_TIMER_2_3 9 | ||
46 | #define MV64x60_IRQ_TIMER_4_5 10 | ||
47 | #define MV64x60_IRQ_TIMER_6_7 11 | ||
48 | #define MV64x60_IRQ_P1_GPP_0_7 24 | ||
49 | #define MV64x60_IRQ_P1_GPP_8_15 25 | ||
50 | #define MV64x60_IRQ_P1_GPP_16_23 26 | ||
51 | #define MV64x60_IRQ_P1_GPP_24_31 27 | ||
52 | #define MV64x60_IRQ_DOORBELL 28 | ||
53 | #define MV64x60_IRQ_ETH_0 32 | ||
54 | #define MV64x60_IRQ_ETH_1 33 | ||
55 | #define MV64x60_IRQ_ETH_2 34 | ||
56 | #define MV64x60_IRQ_SDMA_0 36 | ||
57 | #define MV64x60_IRQ_I2C 37 | ||
58 | #define MV64x60_IRQ_BRG 39 | ||
59 | #define MV64x60_IRQ_MPSC_0 40 | ||
60 | #define MV64x60_IRQ_MPSC_1 42 | ||
61 | #define MV64x60_IRQ_COMM 43 | ||
62 | #define MV64x60_IRQ_P0_GPP_0_7 56 | ||
63 | #define MV64x60_IRQ_P0_GPP_8_15 57 | ||
64 | #define MV64x60_IRQ_P0_GPP_16_23 58 | ||
65 | #define MV64x60_IRQ_P0_GPP_24_31 59 | ||
66 | |||
67 | #define MV64360_IRQ_PCI0 12 | ||
68 | #define MV64360_IRQ_SRAM_PAR_ERR 13 | ||
69 | #define MV64360_IRQ_PCI1 16 | ||
70 | #define MV64360_IRQ_SDMA_1 38 | ||
71 | |||
72 | #define MV64x60_IRQ_GPP0 64 | ||
73 | #define MV64x60_IRQ_GPP1 65 | ||
74 | #define MV64x60_IRQ_GPP2 66 | ||
75 | #define MV64x60_IRQ_GPP3 67 | ||
76 | #define MV64x60_IRQ_GPP4 68 | ||
77 | #define MV64x60_IRQ_GPP5 69 | ||
78 | #define MV64x60_IRQ_GPP6 70 | ||
79 | #define MV64x60_IRQ_GPP7 71 | ||
80 | #define MV64x60_IRQ_GPP8 72 | ||
81 | #define MV64x60_IRQ_GPP9 73 | ||
82 | #define MV64x60_IRQ_GPP10 74 | ||
83 | #define MV64x60_IRQ_GPP11 75 | ||
84 | #define MV64x60_IRQ_GPP12 76 | ||
85 | #define MV64x60_IRQ_GPP13 77 | ||
86 | #define MV64x60_IRQ_GPP14 78 | ||
87 | #define MV64x60_IRQ_GPP15 79 | ||
88 | #define MV64x60_IRQ_GPP16 80 | ||
89 | #define MV64x60_IRQ_GPP17 81 | ||
90 | #define MV64x60_IRQ_GPP18 82 | ||
91 | #define MV64x60_IRQ_GPP19 83 | ||
92 | #define MV64x60_IRQ_GPP20 84 | ||
93 | #define MV64x60_IRQ_GPP21 85 | ||
94 | #define MV64x60_IRQ_GPP22 86 | ||
95 | #define MV64x60_IRQ_GPP23 87 | ||
96 | #define MV64x60_IRQ_GPP24 88 | ||
97 | #define MV64x60_IRQ_GPP25 89 | ||
98 | #define MV64x60_IRQ_GPP26 90 | ||
99 | #define MV64x60_IRQ_GPP27 91 | ||
100 | #define MV64x60_IRQ_GPP28 92 | ||
101 | #define MV64x60_IRQ_GPP29 93 | ||
102 | #define MV64x60_IRQ_GPP30 94 | ||
103 | #define MV64x60_IRQ_GPP31 95 | ||
104 | |||
105 | /* Offsets for register blocks */ | ||
106 | #define GT64260_ENET_PHY_ADDR 0x2000 | ||
107 | #define GT64260_ENET_ESMIR 0x2010 | ||
108 | #define GT64260_ENET_0_OFFSET 0x2400 | ||
109 | #define GT64260_ENET_1_OFFSET 0x2800 | ||
110 | #define GT64260_ENET_2_OFFSET 0x2c00 | ||
111 | #define MV64x60_SDMA_0_OFFSET 0x4000 | ||
112 | #define MV64x60_SDMA_1_OFFSET 0x6000 | ||
113 | #define MV64x60_MPSC_0_OFFSET 0x8000 | ||
114 | #define MV64x60_MPSC_1_OFFSET 0x9000 | ||
115 | #define MV64x60_MPSC_ROUTING_OFFSET 0xb400 | ||
116 | #define MV64x60_SDMA_INTR_OFFSET 0xb800 | ||
117 | #define MV64x60_BRG_0_OFFSET 0xb200 | ||
118 | #define MV64x60_BRG_1_OFFSET 0xb208 | ||
119 | |||
120 | /* | ||
121 | ***************************************************************************** | ||
122 | * | ||
123 | * CPU Interface Registers | ||
124 | * | ||
125 | ***************************************************************************** | ||
126 | */ | ||
127 | |||
128 | /* CPU physical address of bridge's registers */ | ||
129 | #define MV64x60_INTERNAL_SPACE_DECODE 0x0068 | ||
130 | #define MV64x60_INTERNAL_SPACE_SIZE 0x10000 | ||
131 | #define MV64x60_INTERNAL_SPACE_DEFAULT_ADDR 0x14000000 | ||
132 | |||
133 | #define MV64360_CPU_BAR_ENABLE 0x0278 | ||
134 | |||
135 | /* CPU Memory Controller Window Registers (4 windows) */ | ||
136 | #define MV64x60_CPU2MEM_WINDOWS 4 | ||
137 | |||
138 | #define MV64x60_CPU2MEM_0_BASE 0x0008 | ||
139 | #define MV64x60_CPU2MEM_0_SIZE 0x0010 | ||
140 | #define MV64x60_CPU2MEM_1_BASE 0x0208 | ||
141 | #define MV64x60_CPU2MEM_1_SIZE 0x0210 | ||
142 | #define MV64x60_CPU2MEM_2_BASE 0x0018 | ||
143 | #define MV64x60_CPU2MEM_2_SIZE 0x0020 | ||
144 | #define MV64x60_CPU2MEM_3_BASE 0x0218 | ||
145 | #define MV64x60_CPU2MEM_3_SIZE 0x0220 | ||
146 | |||
147 | /* CPU Device Controller Window Registers (4 windows) */ | ||
148 | #define MV64x60_CPU2DEV_WINDOWS 4 | ||
149 | |||
150 | #define MV64x60_CPU2DEV_0_BASE 0x0028 | ||
151 | #define MV64x60_CPU2DEV_0_SIZE 0x0030 | ||
152 | #define MV64x60_CPU2DEV_1_BASE 0x0228 | ||
153 | #define MV64x60_CPU2DEV_1_SIZE 0x0230 | ||
154 | #define MV64x60_CPU2DEV_2_BASE 0x0248 | ||
155 | #define MV64x60_CPU2DEV_2_SIZE 0x0250 | ||
156 | #define MV64x60_CPU2DEV_3_BASE 0x0038 | ||
157 | #define MV64x60_CPU2DEV_3_SIZE 0x0040 | ||
158 | |||
159 | #define MV64x60_CPU2BOOT_0_BASE 0x0238 | ||
160 | #define MV64x60_CPU2BOOT_0_SIZE 0x0240 | ||
161 | |||
162 | #define MV64360_CPU2SRAM_BASE 0x0268 | ||
163 | |||
164 | /* CPU Windows to PCI space (2 PCI buses each w/ 1 I/O & 4 MEM windows) */ | ||
165 | #define MV64x60_PCI_BUSES 2 | ||
166 | #define MV64x60_PCI_IO_WINDOWS_PER_BUS 1 | ||
167 | #define MV64x60_PCI_MEM_WINDOWS_PER_BUS 4 | ||
168 | |||
169 | #define MV64x60_CPU2PCI_SWAP_BYTE 0x00000000 | ||
170 | #define MV64x60_CPU2PCI_SWAP_NONE 0x01000000 | ||
171 | #define MV64x60_CPU2PCI_SWAP_BYTE_WORD 0x02000000 | ||
172 | #define MV64x60_CPU2PCI_SWAP_WORD 0x03000000 | ||
173 | |||
174 | #define MV64x60_CPU2PCI_MEM_REQ64 (1<<27) | ||
175 | |||
176 | #define MV64x60_CPU2PCI0_IO_BASE 0x0048 | ||
177 | #define MV64x60_CPU2PCI0_IO_SIZE 0x0050 | ||
178 | #define MV64x60_CPU2PCI0_MEM_0_BASE 0x0058 | ||
179 | #define MV64x60_CPU2PCI0_MEM_0_SIZE 0x0060 | ||
180 | #define MV64x60_CPU2PCI0_MEM_1_BASE 0x0080 | ||
181 | #define MV64x60_CPU2PCI0_MEM_1_SIZE 0x0088 | ||
182 | #define MV64x60_CPU2PCI0_MEM_2_BASE 0x0258 | ||
183 | #define MV64x60_CPU2PCI0_MEM_2_SIZE 0x0260 | ||
184 | #define MV64x60_CPU2PCI0_MEM_3_BASE 0x0280 | ||
185 | #define MV64x60_CPU2PCI0_MEM_3_SIZE 0x0288 | ||
186 | |||
187 | #define MV64x60_CPU2PCI0_IO_REMAP 0x00f0 | ||
188 | #define MV64x60_CPU2PCI0_MEM_0_REMAP_LO 0x00f8 | ||
189 | #define MV64x60_CPU2PCI0_MEM_0_REMAP_HI 0x0320 | ||
190 | #define MV64x60_CPU2PCI0_MEM_1_REMAP_LO 0x0100 | ||
191 | #define MV64x60_CPU2PCI0_MEM_1_REMAP_HI 0x0328 | ||
192 | #define MV64x60_CPU2PCI0_MEM_2_REMAP_LO 0x02f8 | ||
193 | #define MV64x60_CPU2PCI0_MEM_2_REMAP_HI 0x0330 | ||
194 | #define MV64x60_CPU2PCI0_MEM_3_REMAP_LO 0x0300 | ||
195 | #define MV64x60_CPU2PCI0_MEM_3_REMAP_HI 0x0338 | ||
196 | |||
197 | #define MV64x60_CPU2PCI1_IO_BASE 0x0090 | ||
198 | #define MV64x60_CPU2PCI1_IO_SIZE 0x0098 | ||
199 | #define MV64x60_CPU2PCI1_MEM_0_BASE 0x00a0 | ||
200 | #define MV64x60_CPU2PCI1_MEM_0_SIZE 0x00a8 | ||
201 | #define MV64x60_CPU2PCI1_MEM_1_BASE 0x00b0 | ||
202 | #define MV64x60_CPU2PCI1_MEM_1_SIZE 0x00b8 | ||
203 | #define MV64x60_CPU2PCI1_MEM_2_BASE 0x02a0 | ||
204 | #define MV64x60_CPU2PCI1_MEM_2_SIZE 0x02a8 | ||
205 | #define MV64x60_CPU2PCI1_MEM_3_BASE 0x02b0 | ||
206 | #define MV64x60_CPU2PCI1_MEM_3_SIZE 0x02b8 | ||
207 | |||
208 | #define MV64x60_CPU2PCI1_IO_REMAP 0x0108 | ||
209 | #define MV64x60_CPU2PCI1_MEM_0_REMAP_LO 0x0110 | ||
210 | #define MV64x60_CPU2PCI1_MEM_0_REMAP_HI 0x0340 | ||
211 | #define MV64x60_CPU2PCI1_MEM_1_REMAP_LO 0x0118 | ||
212 | #define MV64x60_CPU2PCI1_MEM_1_REMAP_HI 0x0348 | ||
213 | #define MV64x60_CPU2PCI1_MEM_2_REMAP_LO 0x0310 | ||
214 | #define MV64x60_CPU2PCI1_MEM_2_REMAP_HI 0x0350 | ||
215 | #define MV64x60_CPU2PCI1_MEM_3_REMAP_LO 0x0318 | ||
216 | #define MV64x60_CPU2PCI1_MEM_3_REMAP_HI 0x0358 | ||
217 | |||
218 | /* CPU Control Registers */ | ||
219 | #define MV64x60_CPU_CONFIG 0x0000 | ||
220 | #define MV64x60_CPU_MODE 0x0120 | ||
221 | #define MV64x60_CPU_MASTER_CNTL 0x0160 | ||
222 | #define MV64x60_CPU_XBAR_CNTL_LO 0x0150 | ||
223 | #define MV64x60_CPU_XBAR_CNTL_HI 0x0158 | ||
224 | #define MV64x60_CPU_XBAR_TO 0x0168 | ||
225 | |||
226 | #define GT64260_CPU_RR_XBAR_CNTL_LO 0x0170 | ||
227 | #define GT64260_CPU_RR_XBAR_CNTL_HI 0x0178 | ||
228 | |||
229 | #define MV64360_CPU_PADS_CALIBRATION 0x03b4 | ||
230 | #define MV64360_CPU_RESET_SAMPLE_LO 0x03c4 | ||
231 | #define MV64360_CPU_RESET_SAMPLE_HI 0x03d4 | ||
232 | |||
233 | /* SMP Register Map */ | ||
234 | #define MV64360_WHO_AM_I 0x0200 | ||
235 | #define MV64360_CPU0_DOORBELL 0x0214 | ||
236 | #define MV64360_CPU0_DOORBELL_CLR 0x021c | ||
237 | #define MV64360_CPU0_DOORBELL_MASK 0x0234 | ||
238 | #define MV64360_CPU1_DOORBELL 0x0224 | ||
239 | #define MV64360_CPU1_DOORBELL_CLR 0x022c | ||
240 | #define MV64360_CPU1_DOORBELL_MASK 0x023c | ||
241 | #define MV64360_CPUx_DOORBELL(x) (0x0214 + ((x)*0x10)) | ||
242 | #define MV64360_CPUx_DOORBELL_CLR(x) (0x021c + ((x)*0x10)) | ||
243 | #define MV64360_CPUx_DOORBELL_MASK(x) (0x0234 + ((x)*0x08)) | ||
244 | #define MV64360_SEMAPHORE_0 0x0244 | ||
245 | #define MV64360_SEMAPHORE_1 0x024c | ||
246 | #define MV64360_SEMAPHORE_2 0x0254 | ||
247 | #define MV64360_SEMAPHORE_3 0x025c | ||
248 | #define MV64360_SEMAPHORE_4 0x0264 | ||
249 | #define MV64360_SEMAPHORE_5 0x026c | ||
250 | #define MV64360_SEMAPHORE_6 0x0274 | ||
251 | #define MV64360_SEMAPHORE_7 0x027c | ||
252 | |||
253 | /* CPU Sync Barrier Registers */ | ||
254 | #define GT64260_CPU_SYNC_BARRIER_PCI0 0x00c0 | ||
255 | #define GT64260_CPU_SYNC_BARRIER_PCI1 0x00c8 | ||
256 | |||
257 | #define MV64360_CPU0_SYNC_BARRIER_TRIG 0x00c0 | ||
258 | #define MV64360_CPU0_SYNC_BARRIER_VIRT 0x00c8 | ||
259 | #define MV64360_CPU1_SYNC_BARRIER_TRIG 0x00d0 | ||
260 | #define MV64360_CPU1_SYNC_BARRIER_VIRT 0x00d8 | ||
261 | |||
262 | /* CPU Deadlock and Ordering registers (Rev B part only) */ | ||
263 | #define GT64260_CPU_DEADLOCK_ORDERING 0x02d0 | ||
264 | #define GT64260_CPU_WB_PRIORITY_BUFFER_DEPTH 0x02d8 | ||
265 | #define GT64260_CPU_COUNTERS_SYNC_BARRIER_ATTRIBUTE 0x02e0 | ||
266 | |||
267 | /* CPU Access Protection Registers (gt64260 realy has 8 but don't need) */ | ||
268 | #define MV64x260_CPU_PROT_WINDOWS 4 | ||
269 | |||
270 | #define GT64260_CPU_PROT_ACCPROTECT (1<<16) | ||
271 | #define GT64260_CPU_PROT_WRPROTECT (1<<17) | ||
272 | #define GT64260_CPU_PROT_CACHEPROTECT (1<<18) | ||
273 | |||
274 | #define MV64360_CPU_PROT_ACCPROTECT (1<<20) | ||
275 | #define MV64360_CPU_PROT_WRPROTECT (1<<21) | ||
276 | #define MV64360_CPU_PROT_CACHEPROTECT (1<<22) | ||
277 | #define MV64360_CPU_PROT_WIN_ENABLE (1<<31) | ||
278 | |||
279 | #define MV64x60_CPU_PROT_BASE_0 0x0180 | ||
280 | #define MV64x60_CPU_PROT_SIZE_0 0x0188 | ||
281 | #define MV64x60_CPU_PROT_BASE_1 0x0190 | ||
282 | #define MV64x60_CPU_PROT_SIZE_1 0x0198 | ||
283 | #define MV64x60_CPU_PROT_BASE_2 0x01a0 | ||
284 | #define MV64x60_CPU_PROT_SIZE_2 0x01a8 | ||
285 | #define MV64x60_CPU_PROT_BASE_3 0x01b0 | ||
286 | #define MV64x60_CPU_PROT_SIZE_3 0x01b8 | ||
287 | |||
288 | #define GT64260_CPU_PROT_BASE_4 0x01c0 | ||
289 | #define GT64260_CPU_PROT_SIZE_4 0x01c8 | ||
290 | #define GT64260_CPU_PROT_BASE_5 0x01d0 | ||
291 | #define GT64260_CPU_PROT_SIZE_5 0x01d8 | ||
292 | #define GT64260_CPU_PROT_BASE_6 0x01e0 | ||
293 | #define GT64260_CPU_PROT_SIZE_6 0x01e8 | ||
294 | #define GT64260_CPU_PROT_BASE_7 0x01f0 | ||
295 | #define GT64260_CPU_PROT_SIZE_7 0x01f8 | ||
296 | |||
297 | /* CPU Snoop Control Registers (64260 only) */ | ||
298 | #define GT64260_CPU_SNOOP_WINDOWS 4 | ||
299 | |||
300 | #define GT64260_CPU_SNOOP_NONE 0x00000000 | ||
301 | #define GT64260_CPU_SNOOP_WT 0x00010000 | ||
302 | #define GT64260_CPU_SNOOP_WB 0x00020000 | ||
303 | #define GT64260_CPU_SNOOP_MASK 0x00030000 | ||
304 | #define GT64260_CPU_SNOOP_ALL_BITS GT64260_CPU_SNOOP_MASK | ||
305 | |||
306 | #define GT64260_CPU_SNOOP_BASE_0 0x0380 | ||
307 | #define GT64260_CPU_SNOOP_SIZE_0 0x0388 | ||
308 | #define GT64260_CPU_SNOOP_BASE_1 0x0390 | ||
309 | #define GT64260_CPU_SNOOP_SIZE_1 0x0398 | ||
310 | #define GT64260_CPU_SNOOP_BASE_2 0x03a0 | ||
311 | #define GT64260_CPU_SNOOP_SIZE_2 0x03a8 | ||
312 | #define GT64260_CPU_SNOOP_BASE_3 0x03b0 | ||
313 | #define GT64260_CPU_SNOOP_SIZE_3 0x03b8 | ||
314 | |||
315 | /* CPU Snoop Control Registers (64360 only) */ | ||
316 | #define MV64360_CPU_SNOOP_WINDOWS 4 | ||
317 | #define MV64360_CPU_SNOOP_NONE 0x00000000 | ||
318 | #define MV64360_CPU_SNOOP_WT 0x00010000 | ||
319 | #define MV64360_CPU_SNOOP_WB 0x00020000 | ||
320 | #define MV64360_CPU_SNOOP_MASK 0x00030000 | ||
321 | #define MV64360_CPU_SNOOP_ALL_BITS MV64360_CPU_SNOOP_MASK | ||
322 | |||
323 | |||
324 | /* CPU Error Report Registers */ | ||
325 | #define MV64x60_CPU_ERR_ADDR_LO 0x0070 | ||
326 | #define MV64x60_CPU_ERR_ADDR_HI 0x0078 | ||
327 | #define MV64x60_CPU_ERR_DATA_LO 0x0128 | ||
328 | #define MV64x60_CPU_ERR_DATA_HI 0x0130 | ||
329 | #define MV64x60_CPU_ERR_PARITY 0x0138 | ||
330 | #define MV64x60_CPU_ERR_CAUSE 0x0140 | ||
331 | #define MV64x60_CPU_ERR_MASK 0x0148 | ||
332 | |||
333 | /* | ||
334 | ***************************************************************************** | ||
335 | * | ||
336 | * SRAM Controller Registers | ||
337 | * | ||
338 | ***************************************************************************** | ||
339 | */ | ||
340 | |||
341 | #define MV64360_SRAM_CONFIG 0x0380 | ||
342 | #define MV64360_SRAM_TEST_MODE 0x03f4 | ||
343 | #define MV64360_SRAM_ERR_CAUSE 0x0388 | ||
344 | #define MV64360_SRAM_ERR_ADDR_LO 0x0390 | ||
345 | #define MV64360_SRAM_ERR_ADDR_HI 0x03f8 | ||
346 | #define MV64360_SRAM_ERR_DATA_LO 0x0398 | ||
347 | #define MV64360_SRAM_ERR_DATA_HI 0x03a0 | ||
348 | #define MV64360_SRAM_ERR_PARITY 0x03a8 | ||
349 | |||
350 | #define MV64360_SRAM_SIZE 0x00040000 /* 2Mb/256KB SRAM */ | ||
351 | |||
352 | /* | ||
353 | ***************************************************************************** | ||
354 | * | ||
355 | * SDRAM/MEM Controller Registers | ||
356 | * | ||
357 | ***************************************************************************** | ||
358 | */ | ||
359 | |||
360 | /* SDRAM Config Registers (64260) */ | ||
361 | #define GT64260_SDRAM_CONFIG 0x0448 | ||
362 | |||
363 | /* SDRAM Error Report Registers (64260) */ | ||
364 | #define GT64260_SDRAM_ERR_DATA_LO 0x0484 | ||
365 | #define GT64260_SDRAM_ERR_DATA_HI 0x0480 | ||
366 | #define GT64260_SDRAM_ERR_ADDR 0x0490 | ||
367 | #define GT64260_SDRAM_ERR_ECC_RCVD 0x0488 | ||
368 | #define GT64260_SDRAM_ERR_ECC_CALC 0x048c | ||
369 | #define GT64260_SDRAM_ERR_ECC_CNTL 0x0494 | ||
370 | #define GT64260_SDRAM_ERR_ECC_ERR_CNT 0x0498 | ||
371 | |||
372 | /* SDRAM Config Registers (64360) */ | ||
373 | #define MV64360_SDRAM_CONFIG 0x1400 | ||
374 | |||
375 | /* SDRAM Control Registers */ | ||
376 | #define MV64360_D_UNIT_CONTROL_LOW 0x1404 | ||
377 | #define MV64360_D_UNIT_CONTROL_HIGH 0x1424 | ||
378 | #define MV64460_D_UNIT_MMASK 0x14b0 | ||
379 | |||
380 | /* SDRAM Error Report Registers (64360) */ | ||
381 | #define MV64360_SDRAM_ERR_DATA_LO 0x1444 | ||
382 | #define MV64360_SDRAM_ERR_DATA_HI 0x1440 | ||
383 | #define MV64360_SDRAM_ERR_ADDR 0x1450 | ||
384 | #define MV64360_SDRAM_ERR_ECC_RCVD 0x1448 | ||
385 | #define MV64360_SDRAM_ERR_ECC_CALC 0x144c | ||
386 | #define MV64360_SDRAM_ERR_ECC_CNTL 0x1454 | ||
387 | #define MV64360_SDRAM_ERR_ECC_ERR_CNT 0x1458 | ||
388 | |||
389 | /* | ||
390 | ***************************************************************************** | ||
391 | * | ||
392 | * Device/BOOT Controller Registers | ||
393 | * | ||
394 | ***************************************************************************** | ||
395 | */ | ||
396 | |||
397 | /* Device Control Registers */ | ||
398 | #define MV64x60_DEV_BANK_PARAMS_0 0x045c | ||
399 | #define MV64x60_DEV_BANK_PARAMS_1 0x0460 | ||
400 | #define MV64x60_DEV_BANK_PARAMS_2 0x0464 | ||
401 | #define MV64x60_DEV_BANK_PARAMS_3 0x0468 | ||
402 | #define MV64x60_DEV_BOOT_PARAMS 0x046c | ||
403 | #define MV64x60_DEV_IF_CNTL 0x04c0 | ||
404 | #define MV64x60_DEV_IF_XBAR_CNTL_LO 0x04c8 | ||
405 | #define MV64x60_DEV_IF_XBAR_CNTL_HI 0x04cc | ||
406 | #define MV64x60_DEV_IF_XBAR_CNTL_TO 0x04c4 | ||
407 | |||
408 | /* Device Interrupt Registers */ | ||
409 | #define MV64x60_DEV_INTR_CAUSE 0x04d0 | ||
410 | #define MV64x60_DEV_INTR_MASK 0x04d4 | ||
411 | #define MV64x60_DEV_INTR_ERR_ADDR 0x04d8 | ||
412 | |||
413 | #define MV64360_DEV_INTR_ERR_DATA 0x04dc | ||
414 | #define MV64360_DEV_INTR_ERR_PAR 0x04e0 | ||
415 | |||
416 | /* | ||
417 | ***************************************************************************** | ||
418 | * | ||
419 | * PCI Bridge Interface Registers | ||
420 | * | ||
421 | ***************************************************************************** | ||
422 | */ | ||
423 | |||
424 | /* PCI Configuration Access Registers */ | ||
425 | #define MV64x60_PCI0_CONFIG_ADDR 0x0cf8 | ||
426 | #define MV64x60_PCI0_CONFIG_DATA 0x0cfc | ||
427 | #define MV64x60_PCI0_IACK 0x0c34 | ||
428 | |||
429 | #define MV64x60_PCI1_CONFIG_ADDR 0x0c78 | ||
430 | #define MV64x60_PCI1_CONFIG_DATA 0x0c7c | ||
431 | #define MV64x60_PCI1_IACK 0x0cb4 | ||
432 | |||
433 | /* PCI Control Registers */ | ||
434 | #define MV64x60_PCI0_CMD 0x0c00 | ||
435 | #define MV64x60_PCI0_MODE 0x0d00 | ||
436 | #define MV64x60_PCI0_TO_RETRY 0x0c04 | ||
437 | #define MV64x60_PCI0_RD_BUF_DISCARD_TIMER 0x0d04 | ||
438 | #define MV64x60_PCI0_MSI_TRIGGER_TIMER 0x0c38 | ||
439 | #define MV64x60_PCI0_ARBITER_CNTL 0x1d00 | ||
440 | #define MV64x60_PCI0_XBAR_CNTL_LO 0x1d08 | ||
441 | #define MV64x60_PCI0_XBAR_CNTL_HI 0x1d0c | ||
442 | #define MV64x60_PCI0_XBAR_CNTL_TO 0x1d04 | ||
443 | #define MV64x60_PCI0_RD_RESP_XBAR_CNTL_LO 0x1d18 | ||
444 | #define MV64x60_PCI0_RD_RESP_XBAR_CNTL_HI 0x1d1c | ||
445 | #define MV64x60_PCI0_SYNC_BARRIER 0x1d10 | ||
446 | #define MV64x60_PCI0_P2P_CONFIG 0x1d14 | ||
447 | #define MV64x60_PCI0_INTR_MASK | ||
448 | |||
449 | #define GT64260_PCI0_P2P_SWAP_CNTL 0x1d54 | ||
450 | |||
451 | #define MV64x60_PCI1_CMD 0x0c80 | ||
452 | #define MV64x60_PCI1_MODE 0x0d80 | ||
453 | #define MV64x60_PCI1_TO_RETRY 0x0c84 | ||
454 | #define MV64x60_PCI1_RD_BUF_DISCARD_TIMER 0x0d84 | ||
455 | #define MV64x60_PCI1_MSI_TRIGGER_TIMER 0x0cb8 | ||
456 | #define MV64x60_PCI1_ARBITER_CNTL 0x1d80 | ||
457 | #define MV64x60_PCI1_XBAR_CNTL_LO 0x1d88 | ||
458 | #define MV64x60_PCI1_XBAR_CNTL_HI 0x1d8c | ||
459 | #define MV64x60_PCI1_XBAR_CNTL_TO 0x1d84 | ||
460 | #define MV64x60_PCI1_RD_RESP_XBAR_CNTL_LO 0x1d98 | ||
461 | #define MV64x60_PCI1_RD_RESP_XBAR_CNTL_HI 0x1d9c | ||
462 | #define MV64x60_PCI1_SYNC_BARRIER 0x1d90 | ||
463 | #define MV64x60_PCI1_P2P_CONFIG 0x1d94 | ||
464 | |||
465 | #define GT64260_PCI1_P2P_SWAP_CNTL 0x1dd4 | ||
466 | |||
467 | /* Different modes that the pci hoses can be in (bits 5:4 in PCI Mode reg) */ | ||
468 | #define MV64x60_PCIMODE_CONVENTIONAL 0 | ||
469 | #define MV64x60_PCIMODE_PCIX_66 (1 << 4) | ||
470 | #define MV64x60_PCIMODE_PCIX_100 (2 << 4) | ||
471 | #define MV64x60_PCIMODE_PCIX_133 (3 << 4) | ||
472 | #define MV64x60_PCIMODE_MASK (0x3 << 4) | ||
473 | |||
474 | /* PCI Access Control Regions Registers */ | ||
475 | #define GT64260_PCI_ACC_CNTL_PREFETCHEN (1<<12) | ||
476 | #define GT64260_PCI_ACC_CNTL_DREADEN (1<<13) | ||
477 | #define GT64260_PCI_ACC_CNTL_RDPREFETCH (1<<16) | ||
478 | #define GT64260_PCI_ACC_CNTL_RDLINEPREFETCH (1<<17) | ||
479 | #define GT64260_PCI_ACC_CNTL_RDMULPREFETCH (1<<18) | ||
480 | #define GT64260_PCI_ACC_CNTL_MBURST_32_BTYES 0x00000000 | ||
481 | #define GT64260_PCI_ACC_CNTL_MBURST_64_BYTES 0x00100000 | ||
482 | #define GT64260_PCI_ACC_CNTL_MBURST_128_BYTES 0x00200000 | ||
483 | #define GT64260_PCI_ACC_CNTL_MBURST_MASK 0x00300000 | ||
484 | #define GT64260_PCI_ACC_CNTL_SWAP_BYTE 0x00000000 | ||
485 | #define GT64260_PCI_ACC_CNTL_SWAP_NONE 0x01000000 | ||
486 | #define GT64260_PCI_ACC_CNTL_SWAP_BYTE_WORD 0x02000000 | ||
487 | #define GT64260_PCI_ACC_CNTL_SWAP_WORD 0x03000000 | ||
488 | #define GT64260_PCI_ACC_CNTL_SWAP_MASK 0x03000000 | ||
489 | #define GT64260_PCI_ACC_CNTL_ACCPROT (1<<28) | ||
490 | #define GT64260_PCI_ACC_CNTL_WRPROT (1<<29) | ||
491 | |||
492 | #define GT64260_PCI_ACC_CNTL_ALL_BITS (GT64260_PCI_ACC_CNTL_PREFETCHEN | \ | ||
493 | GT64260_PCI_ACC_CNTL_DREADEN | \ | ||
494 | GT64260_PCI_ACC_CNTL_RDPREFETCH | \ | ||
495 | GT64260_PCI_ACC_CNTL_RDLINEPREFETCH |\ | ||
496 | GT64260_PCI_ACC_CNTL_RDMULPREFETCH | \ | ||
497 | GT64260_PCI_ACC_CNTL_MBURST_MASK | \ | ||
498 | GT64260_PCI_ACC_CNTL_SWAP_MASK | \ | ||
499 | GT64260_PCI_ACC_CNTL_ACCPROT| \ | ||
500 | GT64260_PCI_ACC_CNTL_WRPROT) | ||
501 | |||
502 | #define MV64360_PCI_ACC_CNTL_ENABLE (1<<0) | ||
503 | #define MV64360_PCI_ACC_CNTL_REQ64 (1<<1) | ||
504 | #define MV64360_PCI_ACC_CNTL_SNOOP_NONE 0x00000000 | ||
505 | #define MV64360_PCI_ACC_CNTL_SNOOP_WT 0x00000004 | ||
506 | #define MV64360_PCI_ACC_CNTL_SNOOP_WB 0x00000008 | ||
507 | #define MV64360_PCI_ACC_CNTL_SNOOP_MASK 0x0000000c | ||
508 | #define MV64360_PCI_ACC_CNTL_ACCPROT (1<<4) | ||
509 | #define MV64360_PCI_ACC_CNTL_WRPROT (1<<5) | ||
510 | #define MV64360_PCI_ACC_CNTL_SWAP_BYTE 0x00000000 | ||
511 | #define MV64360_PCI_ACC_CNTL_SWAP_NONE 0x00000040 | ||
512 | #define MV64360_PCI_ACC_CNTL_SWAP_BYTE_WORD 0x00000080 | ||
513 | #define MV64360_PCI_ACC_CNTL_SWAP_WORD 0x000000c0 | ||
514 | #define MV64360_PCI_ACC_CNTL_SWAP_MASK 0x000000c0 | ||
515 | #define MV64360_PCI_ACC_CNTL_MBURST_32_BYTES 0x00000000 | ||
516 | #define MV64360_PCI_ACC_CNTL_MBURST_64_BYTES 0x00000100 | ||
517 | #define MV64360_PCI_ACC_CNTL_MBURST_128_BYTES 0x00000200 | ||
518 | #define MV64360_PCI_ACC_CNTL_MBURST_MASK 0x00000300 | ||
519 | #define MV64360_PCI_ACC_CNTL_RDSIZE_32_BYTES 0x00000000 | ||
520 | #define MV64360_PCI_ACC_CNTL_RDSIZE_64_BYTES 0x00000400 | ||
521 | #define MV64360_PCI_ACC_CNTL_RDSIZE_128_BYTES 0x00000800 | ||
522 | #define MV64360_PCI_ACC_CNTL_RDSIZE_256_BYTES 0x00000c00 | ||
523 | #define MV64360_PCI_ACC_CNTL_RDSIZE_MASK 0x00000c00 | ||
524 | |||
525 | #define MV64360_PCI_ACC_CNTL_ALL_BITS (MV64360_PCI_ACC_CNTL_ENABLE | \ | ||
526 | MV64360_PCI_ACC_CNTL_REQ64 | \ | ||
527 | MV64360_PCI_ACC_CNTL_SNOOP_MASK | \ | ||
528 | MV64360_PCI_ACC_CNTL_ACCPROT | \ | ||
529 | MV64360_PCI_ACC_CNTL_WRPROT | \ | ||
530 | MV64360_PCI_ACC_CNTL_SWAP_MASK | \ | ||
531 | MV64360_PCI_ACC_CNTL_MBURST_MASK | \ | ||
532 | MV64360_PCI_ACC_CNTL_RDSIZE_MASK) | ||
533 | |||
534 | #define MV64x60_PCI0_ACC_CNTL_0_BASE_LO 0x1e00 | ||
535 | #define MV64x60_PCI0_ACC_CNTL_0_BASE_HI 0x1e04 | ||
536 | #define MV64x60_PCI0_ACC_CNTL_0_SIZE 0x1e08 | ||
537 | #define MV64x60_PCI0_ACC_CNTL_1_BASE_LO 0x1e10 | ||
538 | #define MV64x60_PCI0_ACC_CNTL_1_BASE_HI 0x1e14 | ||
539 | #define MV64x60_PCI0_ACC_CNTL_1_SIZE 0x1e18 | ||
540 | #define MV64x60_PCI0_ACC_CNTL_2_BASE_LO 0x1e20 | ||
541 | #define MV64x60_PCI0_ACC_CNTL_2_BASE_HI 0x1e24 | ||
542 | #define MV64x60_PCI0_ACC_CNTL_2_SIZE 0x1e28 | ||
543 | #define MV64x60_PCI0_ACC_CNTL_3_BASE_LO 0x1e30 | ||
544 | #define MV64x60_PCI0_ACC_CNTL_3_BASE_HI 0x1e34 | ||
545 | #define MV64x60_PCI0_ACC_CNTL_3_SIZE 0x1e38 | ||
546 | #define MV64x60_PCI0_ACC_CNTL_4_BASE_LO 0x1e40 | ||
547 | #define MV64x60_PCI0_ACC_CNTL_4_BASE_HI 0x1e44 | ||
548 | #define MV64x60_PCI0_ACC_CNTL_4_SIZE 0x1e48 | ||
549 | #define MV64x60_PCI0_ACC_CNTL_5_BASE_LO 0x1e50 | ||
550 | #define MV64x60_PCI0_ACC_CNTL_5_BASE_HI 0x1e54 | ||
551 | #define MV64x60_PCI0_ACC_CNTL_5_SIZE 0x1e58 | ||
552 | |||
553 | #define GT64260_PCI0_ACC_CNTL_6_BASE_LO 0x1e60 | ||
554 | #define GT64260_PCI0_ACC_CNTL_6_BASE_HI 0x1e64 | ||
555 | #define GT64260_PCI0_ACC_CNTL_6_SIZE 0x1e68 | ||
556 | #define GT64260_PCI0_ACC_CNTL_7_BASE_LO 0x1e70 | ||
557 | #define GT64260_PCI0_ACC_CNTL_7_BASE_HI 0x1e74 | ||
558 | #define GT64260_PCI0_ACC_CNTL_7_SIZE 0x1e78 | ||
559 | |||
560 | #define MV64x60_PCI1_ACC_CNTL_0_BASE_LO 0x1e80 | ||
561 | #define MV64x60_PCI1_ACC_CNTL_0_BASE_HI 0x1e84 | ||
562 | #define MV64x60_PCI1_ACC_CNTL_0_SIZE 0x1e88 | ||
563 | #define MV64x60_PCI1_ACC_CNTL_1_BASE_LO 0x1e90 | ||
564 | #define MV64x60_PCI1_ACC_CNTL_1_BASE_HI 0x1e94 | ||
565 | #define MV64x60_PCI1_ACC_CNTL_1_SIZE 0x1e98 | ||
566 | #define MV64x60_PCI1_ACC_CNTL_2_BASE_LO 0x1ea0 | ||
567 | #define MV64x60_PCI1_ACC_CNTL_2_BASE_HI 0x1ea4 | ||
568 | #define MV64x60_PCI1_ACC_CNTL_2_SIZE 0x1ea8 | ||
569 | #define MV64x60_PCI1_ACC_CNTL_3_BASE_LO 0x1eb0 | ||
570 | #define MV64x60_PCI1_ACC_CNTL_3_BASE_HI 0x1eb4 | ||
571 | #define MV64x60_PCI1_ACC_CNTL_3_SIZE 0x1eb8 | ||
572 | #define MV64x60_PCI1_ACC_CNTL_4_BASE_LO 0x1ec0 | ||
573 | #define MV64x60_PCI1_ACC_CNTL_4_BASE_HI 0x1ec4 | ||
574 | #define MV64x60_PCI1_ACC_CNTL_4_SIZE 0x1ec8 | ||
575 | #define MV64x60_PCI1_ACC_CNTL_5_BASE_LO 0x1ed0 | ||
576 | #define MV64x60_PCI1_ACC_CNTL_5_BASE_HI 0x1ed4 | ||
577 | #define MV64x60_PCI1_ACC_CNTL_5_SIZE 0x1ed8 | ||
578 | |||
579 | #define GT64260_PCI1_ACC_CNTL_6_BASE_LO 0x1ee0 | ||
580 | #define GT64260_PCI1_ACC_CNTL_6_BASE_HI 0x1ee4 | ||
581 | #define GT64260_PCI1_ACC_CNTL_6_SIZE 0x1ee8 | ||
582 | #define GT64260_PCI1_ACC_CNTL_7_BASE_LO 0x1ef0 | ||
583 | #define GT64260_PCI1_ACC_CNTL_7_BASE_HI 0x1ef4 | ||
584 | #define GT64260_PCI1_ACC_CNTL_7_SIZE 0x1ef8 | ||
585 | |||
586 | /* PCI Snoop Control Registers (64260 only) */ | ||
587 | #define GT64260_PCI_SNOOP_NONE 0x00000000 | ||
588 | #define GT64260_PCI_SNOOP_WT 0x00001000 | ||
589 | #define GT64260_PCI_SNOOP_WB 0x00002000 | ||
590 | |||
591 | #define GT64260_PCI0_SNOOP_0_BASE_LO 0x1f00 | ||
592 | #define GT64260_PCI0_SNOOP_0_BASE_HI 0x1f04 | ||
593 | #define GT64260_PCI0_SNOOP_0_SIZE 0x1f08 | ||
594 | #define GT64260_PCI0_SNOOP_1_BASE_LO 0x1f10 | ||
595 | #define GT64260_PCI0_SNOOP_1_BASE_HI 0x1f14 | ||
596 | #define GT64260_PCI0_SNOOP_1_SIZE 0x1f18 | ||
597 | #define GT64260_PCI0_SNOOP_2_BASE_LO 0x1f20 | ||
598 | #define GT64260_PCI0_SNOOP_2_BASE_HI 0x1f24 | ||
599 | #define GT64260_PCI0_SNOOP_2_SIZE 0x1f28 | ||
600 | #define GT64260_PCI0_SNOOP_3_BASE_LO 0x1f30 | ||
601 | #define GT64260_PCI0_SNOOP_3_BASE_HI 0x1f34 | ||
602 | #define GT64260_PCI0_SNOOP_3_SIZE 0x1f38 | ||
603 | |||
604 | #define GT64260_PCI1_SNOOP_0_BASE_LO 0x1f80 | ||
605 | #define GT64260_PCI1_SNOOP_0_BASE_HI 0x1f84 | ||
606 | #define GT64260_PCI1_SNOOP_0_SIZE 0x1f88 | ||
607 | #define GT64260_PCI1_SNOOP_1_BASE_LO 0x1f90 | ||
608 | #define GT64260_PCI1_SNOOP_1_BASE_HI 0x1f94 | ||
609 | #define GT64260_PCI1_SNOOP_1_SIZE 0x1f98 | ||
610 | #define GT64260_PCI1_SNOOP_2_BASE_LO 0x1fa0 | ||
611 | #define GT64260_PCI1_SNOOP_2_BASE_HI 0x1fa4 | ||
612 | #define GT64260_PCI1_SNOOP_2_SIZE 0x1fa8 | ||
613 | #define GT64260_PCI1_SNOOP_3_BASE_LO 0x1fb0 | ||
614 | #define GT64260_PCI1_SNOOP_3_BASE_HI 0x1fb4 | ||
615 | #define GT64260_PCI1_SNOOP_3_SIZE 0x1fb8 | ||
616 | |||
617 | /* PCI Error Report Registers */ | ||
618 | #define MV64x60_PCI0_ERR_SERR_MASK 0x0c28 | ||
619 | #define MV64x60_PCI0_ERR_ADDR_LO 0x1d40 | ||
620 | #define MV64x60_PCI0_ERR_ADDR_HI 0x1d44 | ||
621 | #define MV64x60_PCI0_ERR_DATA_LO 0x1d48 | ||
622 | #define MV64x60_PCI0_ERR_DATA_HI 0x1d4c | ||
623 | #define MV64x60_PCI0_ERR_CMD 0x1d50 | ||
624 | #define MV64x60_PCI0_ERR_CAUSE 0x1d58 | ||
625 | #define MV64x60_PCI0_ERR_MASK 0x1d5c | ||
626 | |||
627 | #define MV64x60_PCI1_ERR_SERR_MASK 0x0ca8 | ||
628 | #define MV64x60_PCI1_ERR_ADDR_LO 0x1dc0 | ||
629 | #define MV64x60_PCI1_ERR_ADDR_HI 0x1dc4 | ||
630 | #define MV64x60_PCI1_ERR_DATA_LO 0x1dc8 | ||
631 | #define MV64x60_PCI1_ERR_DATA_HI 0x1dcc | ||
632 | #define MV64x60_PCI1_ERR_CMD 0x1dd0 | ||
633 | #define MV64x60_PCI1_ERR_CAUSE 0x1dd8 | ||
634 | #define MV64x60_PCI1_ERR_MASK 0x1ddc | ||
635 | |||
636 | /* PCI Slave Address Decoding Registers */ | ||
637 | #define MV64x60_PCI0_MEM_0_SIZE 0x0c08 | ||
638 | #define MV64x60_PCI0_MEM_1_SIZE 0x0d08 | ||
639 | #define MV64x60_PCI0_MEM_2_SIZE 0x0c0c | ||
640 | #define MV64x60_PCI0_MEM_3_SIZE 0x0d0c | ||
641 | #define MV64x60_PCI1_MEM_0_SIZE 0x0c88 | ||
642 | #define MV64x60_PCI1_MEM_1_SIZE 0x0d88 | ||
643 | #define MV64x60_PCI1_MEM_2_SIZE 0x0c8c | ||
644 | #define MV64x60_PCI1_MEM_3_SIZE 0x0d8c | ||
645 | |||
646 | #define MV64x60_PCI0_BAR_ENABLE 0x0c3c | ||
647 | #define MV64x60_PCI1_BAR_ENABLE 0x0cbc | ||
648 | |||
649 | #define MV64x60_PCI0_PCI_DECODE_CNTL 0x0d3c | ||
650 | #define MV64x60_PCI1_PCI_DECODE_CNTL 0x0dbc | ||
651 | |||
652 | #define MV64x60_PCI0_SLAVE_MEM_0_REMAP 0x0c48 | ||
653 | #define MV64x60_PCI0_SLAVE_MEM_1_REMAP 0x0d48 | ||
654 | #define MV64x60_PCI0_SLAVE_MEM_2_REMAP 0x0c4c | ||
655 | #define MV64x60_PCI0_SLAVE_MEM_3_REMAP 0x0d4c | ||
656 | #define MV64x60_PCI0_SLAVE_DEV_0_REMAP 0x0c50 | ||
657 | #define MV64x60_PCI0_SLAVE_DEV_1_REMAP 0x0d50 | ||
658 | #define MV64x60_PCI0_SLAVE_DEV_2_REMAP 0x0d58 | ||
659 | #define MV64x60_PCI0_SLAVE_DEV_3_REMAP 0x0c54 | ||
660 | #define MV64x60_PCI0_SLAVE_BOOT_REMAP 0x0d54 | ||
661 | #define MV64x60_PCI0_SLAVE_P2P_MEM_0_REMAP_LO 0x0d5c | ||
662 | #define MV64x60_PCI0_SLAVE_P2P_MEM_0_REMAP_HI 0x0d60 | ||
663 | #define MV64x60_PCI0_SLAVE_P2P_MEM_1_REMAP_LO 0x0d64 | ||
664 | #define MV64x60_PCI0_SLAVE_P2P_MEM_1_REMAP_HI 0x0d68 | ||
665 | #define MV64x60_PCI0_SLAVE_P2P_IO_REMAP 0x0d6c | ||
666 | #define MV64x60_PCI0_SLAVE_CPU_REMAP 0x0d70 | ||
667 | |||
668 | #define MV64x60_PCI1_SLAVE_MEM_0_REMAP 0x0cc8 | ||
669 | #define MV64x60_PCI1_SLAVE_MEM_1_REMAP 0x0dc8 | ||
670 | #define MV64x60_PCI1_SLAVE_MEM_2_REMAP 0x0ccc | ||
671 | #define MV64x60_PCI1_SLAVE_MEM_3_REMAP 0x0dcc | ||
672 | #define MV64x60_PCI1_SLAVE_DEV_0_REMAP 0x0cd0 | ||
673 | #define MV64x60_PCI1_SLAVE_DEV_1_REMAP 0x0dd0 | ||
674 | #define MV64x60_PCI1_SLAVE_DEV_2_REMAP 0x0dd8 | ||
675 | #define MV64x60_PCI1_SLAVE_DEV_3_REMAP 0x0cd4 | ||
676 | #define MV64x60_PCI1_SLAVE_BOOT_REMAP 0x0dd4 | ||
677 | #define MV64x60_PCI1_SLAVE_P2P_MEM_0_REMAP_LO 0x0ddc | ||
678 | #define MV64x60_PCI1_SLAVE_P2P_MEM_0_REMAP_HI 0x0de0 | ||
679 | #define MV64x60_PCI1_SLAVE_P2P_MEM_1_REMAP_LO 0x0de4 | ||
680 | #define MV64x60_PCI1_SLAVE_P2P_MEM_1_REMAP_HI 0x0de8 | ||
681 | #define MV64x60_PCI1_SLAVE_P2P_IO_REMAP 0x0dec | ||
682 | #define MV64x60_PCI1_SLAVE_CPU_REMAP 0x0df0 | ||
683 | |||
684 | #define MV64360_PCICFG_CPCI_HOTSWAP 0x68 | ||
685 | |||
686 | /* | ||
687 | ***************************************************************************** | ||
688 | * | ||
689 | * ENET Controller Interface Registers | ||
690 | * | ||
691 | ***************************************************************************** | ||
692 | */ | ||
693 | |||
694 | /* ENET Controller Window Registers (6 windows) */ | ||
695 | #define MV64360_ENET2MEM_WINDOWS 6 | ||
696 | |||
697 | #define MV64360_ENET2MEM_0_BASE 0x2200 | ||
698 | #define MV64360_ENET2MEM_0_SIZE 0x2204 | ||
699 | #define MV64360_ENET2MEM_1_BASE 0x2208 | ||
700 | #define MV64360_ENET2MEM_1_SIZE 0x220c | ||
701 | #define MV64360_ENET2MEM_2_BASE 0x2210 | ||
702 | #define MV64360_ENET2MEM_2_SIZE 0x2214 | ||
703 | #define MV64360_ENET2MEM_3_BASE 0x2218 | ||
704 | #define MV64360_ENET2MEM_3_SIZE 0x221c | ||
705 | #define MV64360_ENET2MEM_4_BASE 0x2220 | ||
706 | #define MV64360_ENET2MEM_4_SIZE 0x2224 | ||
707 | #define MV64360_ENET2MEM_5_BASE 0x2228 | ||
708 | #define MV64360_ENET2MEM_5_SIZE 0x222c | ||
709 | |||
710 | #define MV64360_ENET2MEM_SNOOP_NONE 0x00000000 | ||
711 | #define MV64360_ENET2MEM_SNOOP_WT 0x00001000 | ||
712 | #define MV64360_ENET2MEM_SNOOP_WB 0x00002000 | ||
713 | |||
714 | #define MV64360_ENET2MEM_BAR_ENABLE 0x2290 | ||
715 | |||
716 | #define MV64360_ENET2MEM_ACC_PROT_0 0x2294 | ||
717 | #define MV64360_ENET2MEM_ACC_PROT_1 0x2298 | ||
718 | #define MV64360_ENET2MEM_ACC_PROT_2 0x229c | ||
719 | |||
720 | /* | ||
721 | ***************************************************************************** | ||
722 | * | ||
723 | * MPSC Controller Interface Registers | ||
724 | * | ||
725 | ***************************************************************************** | ||
726 | */ | ||
727 | |||
728 | /* MPSC Controller Window Registers (4 windows) */ | ||
729 | #define MV64360_MPSC2MEM_WINDOWS 4 | ||
730 | |||
731 | #define MV64360_MPSC2MEM_0_BASE 0xf200 | ||
732 | #define MV64360_MPSC2MEM_0_SIZE 0xf204 | ||
733 | #define MV64360_MPSC2MEM_1_BASE 0xf208 | ||
734 | #define MV64360_MPSC2MEM_1_SIZE 0xf20c | ||
735 | #define MV64360_MPSC2MEM_2_BASE 0xf210 | ||
736 | #define MV64360_MPSC2MEM_2_SIZE 0xf214 | ||
737 | #define MV64360_MPSC2MEM_3_BASE 0xf218 | ||
738 | #define MV64360_MPSC2MEM_3_SIZE 0xf21c | ||
739 | |||
740 | #define MV64360_MPSC_0_REMAP 0xf240 | ||
741 | #define MV64360_MPSC_1_REMAP 0xf244 | ||
742 | |||
743 | #define MV64360_MPSC2MEM_SNOOP_NONE 0x00000000 | ||
744 | #define MV64360_MPSC2MEM_SNOOP_WT 0x00001000 | ||
745 | #define MV64360_MPSC2MEM_SNOOP_WB 0x00002000 | ||
746 | |||
747 | #define MV64360_MPSC2MEM_BAR_ENABLE 0xf250 | ||
748 | |||
749 | #define MV64360_MPSC2MEM_ACC_PROT_0 0xf254 | ||
750 | #define MV64360_MPSC2MEM_ACC_PROT_1 0xf258 | ||
751 | |||
752 | #define MV64360_MPSC2REGS_BASE 0xf25c | ||
753 | |||
754 | /* | ||
755 | ***************************************************************************** | ||
756 | * | ||
757 | * Timer/Counter Interface Registers | ||
758 | * | ||
759 | ***************************************************************************** | ||
760 | */ | ||
761 | |||
762 | #define MV64x60_TIMR_CNTR_0 0x0850 | ||
763 | #define MV64x60_TIMR_CNTR_1 0x0854 | ||
764 | #define MV64x60_TIMR_CNTR_2 0x0858 | ||
765 | #define MV64x60_TIMR_CNTR_3 0x085c | ||
766 | #define MV64x60_TIMR_CNTR_0_3_CNTL 0x0864 | ||
767 | #define MV64x60_TIMR_CNTR_0_3_INTR_CAUSE 0x0868 | ||
768 | #define MV64x60_TIMR_CNTR_0_3_INTR_MASK 0x086c | ||
769 | |||
770 | #define GT64260_TIMR_CNTR_4 0x0950 | ||
771 | #define GT64260_TIMR_CNTR_5 0x0954 | ||
772 | #define GT64260_TIMR_CNTR_6 0x0958 | ||
773 | #define GT64260_TIMR_CNTR_7 0x095c | ||
774 | #define GT64260_TIMR_CNTR_4_7_CNTL 0x0964 | ||
775 | #define GT64260_TIMR_CNTR_4_7_INTR_CAUSE 0x0968 | ||
776 | #define GT64260_TIMR_CNTR_4_7_INTR_MASK 0x096c | ||
777 | |||
778 | /* | ||
779 | ***************************************************************************** | ||
780 | * | ||
781 | * Communications Controller | ||
782 | * | ||
783 | ***************************************************************************** | ||
784 | */ | ||
785 | |||
786 | #define GT64260_SER_INIT_PCI_ADDR_HI 0xf320 | ||
787 | #define GT64260_SER_INIT_LAST_DATA 0xf324 | ||
788 | #define GT64260_SER_INIT_CONTROL 0xf328 | ||
789 | #define GT64260_SER_INIT_STATUS 0xf32c | ||
790 | |||
791 | #define MV64x60_COMM_ARBITER_CNTL 0xf300 | ||
792 | #define MV64x60_COMM_CONFIG 0xb40c | ||
793 | #define MV64x60_COMM_XBAR_TO 0xf304 | ||
794 | #define MV64x60_COMM_INTR_CAUSE 0xf310 | ||
795 | #define MV64x60_COMM_INTR_MASK 0xf314 | ||
796 | #define MV64x60_COMM_ERR_ADDR 0xf318 | ||
797 | |||
798 | #define MV64360_COMM_ARBITER_CNTL 0xf300 | ||
799 | |||
800 | /* | ||
801 | ***************************************************************************** | ||
802 | * | ||
803 | * IDMA Controller Interface Registers | ||
804 | * | ||
805 | ***************************************************************************** | ||
806 | */ | ||
807 | |||
808 | /* IDMA Controller Window Registers (8 windows) */ | ||
809 | #define MV64360_IDMA2MEM_WINDOWS 8 | ||
810 | |||
811 | #define MV64360_IDMA2MEM_0_BASE 0x0a00 | ||
812 | #define MV64360_IDMA2MEM_0_SIZE 0x0a04 | ||
813 | #define MV64360_IDMA2MEM_1_BASE 0x0a08 | ||
814 | #define MV64360_IDMA2MEM_1_SIZE 0x0a0c | ||
815 | #define MV64360_IDMA2MEM_2_BASE 0x0a10 | ||
816 | #define MV64360_IDMA2MEM_2_SIZE 0x0a14 | ||
817 | #define MV64360_IDMA2MEM_3_BASE 0x0a18 | ||
818 | #define MV64360_IDMA2MEM_3_SIZE 0x0a1c | ||
819 | #define MV64360_IDMA2MEM_4_BASE 0x0a20 | ||
820 | #define MV64360_IDMA2MEM_4_SIZE 0x0a24 | ||
821 | #define MV64360_IDMA2MEM_5_BASE 0x0a28 | ||
822 | #define MV64360_IDMA2MEM_5_SIZE 0x0a2c | ||
823 | #define MV64360_IDMA2MEM_6_BASE 0x0a30 | ||
824 | #define MV64360_IDMA2MEM_6_SIZE 0x0a34 | ||
825 | #define MV64360_IDMA2MEM_7_BASE 0x0a38 | ||
826 | #define MV64360_IDMA2MEM_7_SIZE 0x0a3c | ||
827 | |||
828 | #define MV64360_IDMA2MEM_SNOOP_NONE 0x00000000 | ||
829 | #define MV64360_IDMA2MEM_SNOOP_WT 0x00001000 | ||
830 | #define MV64360_IDMA2MEM_SNOOP_WB 0x00002000 | ||
831 | |||
832 | #define MV64360_IDMA2MEM_BAR_ENABLE 0x0a80 | ||
833 | |||
834 | #define MV64360_IDMA2MEM_ACC_PROT_0 0x0a70 | ||
835 | #define MV64360_IDMA2MEM_ACC_PROT_1 0x0a74 | ||
836 | #define MV64360_IDMA2MEM_ACC_PROT_2 0x0a78 | ||
837 | #define MV64360_IDMA2MEM_ACC_PROT_3 0x0a7c | ||
838 | |||
839 | #define MV64x60_IDMA_0_OFFSET 0x0800 | ||
840 | #define MV64x60_IDMA_1_OFFSET 0x0804 | ||
841 | #define MV64x60_IDMA_2_OFFSET 0x0808 | ||
842 | #define MV64x60_IDMA_3_OFFSET 0x080c | ||
843 | #define MV64x60_IDMA_4_OFFSET 0x0900 | ||
844 | #define MV64x60_IDMA_5_OFFSET 0x0904 | ||
845 | #define MV64x60_IDMA_6_OFFSET 0x0908 | ||
846 | #define MV64x60_IDMA_7_OFFSET 0x090c | ||
847 | |||
848 | #define MV64x60_IDMA_BYTE_COUNT (0x0800 - MV64x60_IDMA_0_OFFSET) | ||
849 | #define MV64x60_IDMA_SRC_ADDR (0x0810 - MV64x60_IDMA_0_OFFSET) | ||
850 | #define MV64x60_IDMA_DST_ADDR (0x0820 - MV64x60_IDMA_0_OFFSET) | ||
851 | #define MV64x60_IDMA_NEXT_DESC (0x0830 - MV64x60_IDMA_0_OFFSET) | ||
852 | #define MV64x60_IDMA_CUR_DESC (0x0870 - MV64x60_IDMA_0_OFFSET) | ||
853 | #define MV64x60_IDMA_SRC_PCI_ADDR_HI (0x0890 - MV64x60_IDMA_0_OFFSET) | ||
854 | #define MV64x60_IDMA_DST_PCI_ADDR_HI (0x08a0 - MV64x60_IDMA_0_OFFSET) | ||
855 | #define MV64x60_IDMA_NEXT_DESC_PCI_ADDR_HI (0x08b0 - MV64x60_IDMA_0_OFFSET) | ||
856 | #define MV64x60_IDMA_CONTROL_LO (0x0840 - MV64x60_IDMA_0_OFFSET) | ||
857 | #define MV64x60_IDMA_CONTROL_HI (0x0880 - MV64x60_IDMA_0_OFFSET) | ||
858 | |||
859 | #define MV64x60_IDMA_0_3_ARBITER_CNTL 0x0860 | ||
860 | #define MV64x60_IDMA_4_7_ARBITER_CNTL 0x0960 | ||
861 | |||
862 | #define MV64x60_IDMA_0_3_XBAR_TO 0x08d0 | ||
863 | #define MV64x60_IDMA_4_7_XBAR_TO 0x09d0 | ||
864 | |||
865 | #define MV64x60_IDMA_0_3_INTR_CAUSE 0x08c0 | ||
866 | #define MV64x60_IDMA_0_3_INTR_MASK 0x08c4 | ||
867 | #define MV64x60_IDMA_0_3_ERROR_ADDR 0x08c8 | ||
868 | #define MV64x60_IDMA_0_3_ERROR_SELECT 0x08cc | ||
869 | #define MV64x60_IDMA_4_7_INTR_CAUSE 0x09c0 | ||
870 | #define MV64x60_IDMA_4_7_INTR_MASK 0x09c4 | ||
871 | #define MV64x60_IDMA_4_7_ERROR_ADDR 0x09c8 | ||
872 | #define MV64x60_IDMA_4_7_ERROR_SELECT 0x09cc | ||
873 | |||
874 | /* | ||
875 | ***************************************************************************** | ||
876 | * | ||
877 | * Watchdog Timer Interface Registers | ||
878 | * | ||
879 | ***************************************************************************** | ||
880 | */ | ||
881 | |||
882 | #define MV64x60_WDT_WDC 0xb410 | ||
883 | #define MV64x60_WDT_WDV 0xb414 | ||
884 | |||
885 | |||
886 | /* | ||
887 | ***************************************************************************** | ||
888 | * | ||
889 | * General Purpose Pins Controller Interface Registers | ||
890 | * | ||
891 | ***************************************************************************** | ||
892 | */ | ||
893 | |||
894 | #define MV64x60_GPP_IO_CNTL 0xf100 | ||
895 | #define MV64x60_GPP_LEVEL_CNTL 0xf110 | ||
896 | #define MV64x60_GPP_VALUE 0xf104 | ||
897 | #define MV64x60_GPP_INTR_CAUSE 0xf108 | ||
898 | #define MV64x60_GPP_INTR_MASK 0xf10c | ||
899 | #define MV64x60_GPP_VALUE_SET 0xf118 | ||
900 | #define MV64x60_GPP_VALUE_CLR 0xf11c | ||
901 | |||
902 | |||
903 | /* | ||
904 | ***************************************************************************** | ||
905 | * | ||
906 | * Multi-Purpose Pins Controller Interface Registers | ||
907 | * | ||
908 | ***************************************************************************** | ||
909 | */ | ||
910 | |||
911 | #define MV64x60_MPP_CNTL_0 0xf000 | ||
912 | #define MV64x60_MPP_CNTL_1 0xf004 | ||
913 | #define MV64x60_MPP_CNTL_2 0xf008 | ||
914 | #define MV64x60_MPP_CNTL_3 0xf00c | ||
915 | #define GT64260_MPP_SERIAL_PORTS_MULTIPLEX 0xf010 | ||
916 | |||
917 | #define MV64x60_ETH_BAR_GAP 0x8 | ||
918 | #define MV64x60_ETH_SIZE_REG_GAP 0x8 | ||
919 | #define MV64x60_ETH_HIGH_ADDR_REMAP_REG_GAP 0x4 | ||
920 | #define MV64x60_ETH_PORT_ACCESS_CTRL_GAP 0x4 | ||
921 | |||
922 | #define MV64x60_EBAR_ATTR_DRAM_CS0 0x00000E00 | ||
923 | #define MV64x60_EBAR_ATTR_DRAM_CS1 0x00000D00 | ||
924 | #define MV64x60_EBAR_ATTR_DRAM_CS2 0x00000B00 | ||
925 | #define MV64x60_EBAR_ATTR_DRAM_CS3 0x00000700 | ||
926 | |||
927 | #define MV64x60_EBAR_ATTR_CBS_SRAM_BLOCK0 0x00000000 | ||
928 | #define MV64x60_EBAR_ATTR_CBS_SRAM_BLOCK1 0x00000100 | ||
929 | #define MV64x60_EBAR_ATTR_CBS_SRAM 0x00000000 | ||
930 | #define MV64x60_EBAR_ATTR_CBS_CPU_BUS 0x00000800 | ||
931 | |||
932 | |||
933 | /* | ||
934 | ***************************************************************************** | ||
935 | * | ||
936 | * Interrupt Controller Interface Registers | ||
937 | * | ||
938 | ***************************************************************************** | ||
939 | */ | ||
940 | |||
941 | #define GT64260_IC_OFFSET 0x0c18 | ||
942 | |||
943 | #define GT64260_IC_MAIN_CAUSE_LO 0x0c18 | ||
944 | #define GT64260_IC_MAIN_CAUSE_HI 0x0c68 | ||
945 | #define GT64260_IC_CPU_INTR_MASK_LO 0x0c1c | ||
946 | #define GT64260_IC_CPU_INTR_MASK_HI 0x0c6c | ||
947 | #define GT64260_IC_CPU_SELECT_CAUSE 0x0c70 | ||
948 | #define GT64260_IC_PCI0_INTR_MASK_LO 0x0c24 | ||
949 | #define GT64260_IC_PCI0_INTR_MASK_HI 0x0c64 | ||
950 | #define GT64260_IC_PCI0_SELECT_CAUSE 0x0c74 | ||
951 | #define GT64260_IC_PCI1_INTR_MASK_LO 0x0ca4 | ||
952 | #define GT64260_IC_PCI1_INTR_MASK_HI 0x0ce4 | ||
953 | #define GT64260_IC_PCI1_SELECT_CAUSE 0x0cf4 | ||
954 | #define GT64260_IC_CPU_INT_0_MASK 0x0e60 | ||
955 | #define GT64260_IC_CPU_INT_1_MASK 0x0e64 | ||
956 | #define GT64260_IC_CPU_INT_2_MASK 0x0e68 | ||
957 | #define GT64260_IC_CPU_INT_3_MASK 0x0e6c | ||
958 | |||
959 | #define MV64360_IC_OFFSET 0x0000 | ||
960 | |||
961 | #define MV64360_IC_MAIN_CAUSE_LO 0x0004 | ||
962 | #define MV64360_IC_MAIN_CAUSE_HI 0x000c | ||
963 | #define MV64360_IC_CPU0_INTR_MASK_LO 0x0014 | ||
964 | #define MV64360_IC_CPU0_INTR_MASK_HI 0x001c | ||
965 | #define MV64360_IC_CPU0_SELECT_CAUSE 0x0024 | ||
966 | #define MV64360_IC_CPU1_INTR_MASK_LO 0x0034 | ||
967 | #define MV64360_IC_CPU1_INTR_MASK_HI 0x003c | ||
968 | #define MV64360_IC_CPU1_SELECT_CAUSE 0x0044 | ||
969 | #define MV64360_IC_INT0_MASK_LO 0x0054 | ||
970 | #define MV64360_IC_INT0_MASK_HI 0x005c | ||
971 | #define MV64360_IC_INT0_SELECT_CAUSE 0x0064 | ||
972 | #define MV64360_IC_INT1_MASK_LO 0x0074 | ||
973 | #define MV64360_IC_INT1_MASK_HI 0x007c | ||
974 | #define MV64360_IC_INT1_SELECT_CAUSE 0x0084 | ||
975 | |||
976 | #endif /* __ASMPPC_MV64x60_DEFS_H */ | ||
diff --git a/include/asm-ppc/ocp.h b/include/asm-ppc/ocp.h deleted file mode 100644 index 3909a2eec286..000000000000 --- a/include/asm-ppc/ocp.h +++ /dev/null | |||
@@ -1,204 +0,0 @@ | |||
1 | /* | ||
2 | * ocp.h | ||
3 | * | ||
4 | * (c) Benjamin Herrenschmidt (benh@kernel.crashing.org) | ||
5 | * Mipsys - France | ||
6 | * | ||
7 | * Derived from work (c) Armin Kuster akuster@pacbell.net | ||
8 | * | ||
9 | * Additional support and port to 2.6 LDM/sysfs by | ||
10 | * Matt Porter <mporter@kernel.crashing.org> | ||
11 | * Copyright 2003-2004 MontaVista Software, Inc. | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify it | ||
14 | * under the terms of the GNU General Public License as published by the | ||
15 | * Free Software Foundation; either version 2 of the License, or (at your | ||
16 | * option) any later version. | ||
17 | * | ||
18 | * TODO: - Add get/put interface & fixup locking to provide same API for | ||
19 | * 2.4 and 2.5 | ||
20 | * - Rework PM callbacks | ||
21 | */ | ||
22 | |||
23 | #ifdef __KERNEL__ | ||
24 | #ifndef __OCP_H__ | ||
25 | #define __OCP_H__ | ||
26 | |||
27 | #include <linux/init.h> | ||
28 | #include <linux/list.h> | ||
29 | #include <linux/device.h> | ||
30 | #include <linux/rwsem.h> | ||
31 | |||
32 | #include <asm/mmu.h> | ||
33 | #include <asm/ocp_ids.h> | ||
34 | |||
35 | #ifdef CONFIG_PPC_OCP | ||
36 | |||
37 | #define OCP_MAX_IRQS 7 | ||
38 | #define MAX_EMACS 4 | ||
39 | #define OCP_IRQ_NA -1 /* used when ocp device does not have an irq */ | ||
40 | #define OCP_IRQ_MUL -2 /* used for ocp devices with multiply irqs */ | ||
41 | #define OCP_NULL_TYPE -1 /* used to mark end of list */ | ||
42 | #define OCP_CPM_NA 0 /* No Clock or Power Management avaliable */ | ||
43 | #define OCP_PADDR_NA 0 /* No MMIO registers */ | ||
44 | |||
45 | #define OCP_ANY_ID (~0) | ||
46 | #define OCP_ANY_INDEX -1 | ||
47 | |||
48 | extern struct list_head ocp_devices; | ||
49 | extern struct rw_semaphore ocp_devices_sem; | ||
50 | |||
51 | struct ocp_device_id { | ||
52 | unsigned int vendor, function; /* Vendor and function ID or OCP_ANY_ID */ | ||
53 | unsigned long driver_data; /* Data private to the driver */ | ||
54 | }; | ||
55 | |||
56 | |||
57 | /* | ||
58 | * Static definition of an OCP device. | ||
59 | * | ||
60 | * @vendor: Vendor code. It is _STRONGLY_ discouraged to use | ||
61 | * the vendor code as a way to match a unique device, | ||
62 | * though I kept that possibility open, you should | ||
63 | * really define different function codes for different | ||
64 | * device types | ||
65 | * @function: This is the function code for this device. | ||
66 | * @index: This index is used for mapping the Nth function of a | ||
67 | * given core. This is typically used for cross-driver | ||
68 | * matching, like looking for a given MAL or ZMII from | ||
69 | * an EMAC or for getting to the proper set of DCRs. | ||
70 | * Indices are no longer magically calculated based on | ||
71 | * structure ordering, they have to be actually coded | ||
72 | * into the ocp_def to avoid any possible confusion | ||
73 | * I _STRONGLY_ (again ? wow !) encourage anybody relying | ||
74 | * on index mapping to encode the "target" index in an | ||
75 | * associated structure pointed to by "additions", see | ||
76 | * how it's done for the EMAC driver. | ||
77 | * @paddr: Device physical address (may not mean anything...) | ||
78 | * @irq: Interrupt line for this device (TODO: think about making | ||
79 | * an array with this) | ||
80 | * @pm: Currently, contains the bitmask in CPMFR DCR for the device | ||
81 | * @additions: Optionally points to a function specific structure | ||
82 | * providing additional informations for a given device | ||
83 | * instance. It's currently used by the EMAC driver for MAL | ||
84 | * channel & ZMII port mapping among others. | ||
85 | * @show: Optionally points to a function specific structure | ||
86 | * providing a sysfs show routine for additions fields. | ||
87 | */ | ||
88 | struct ocp_def { | ||
89 | unsigned int vendor; | ||
90 | unsigned int function; | ||
91 | int index; | ||
92 | phys_addr_t paddr; | ||
93 | int irq; | ||
94 | unsigned long pm; | ||
95 | void *additions; | ||
96 | void (*show)(struct device *); | ||
97 | }; | ||
98 | |||
99 | |||
100 | /* Struct for a given device instance */ | ||
101 | struct ocp_device { | ||
102 | struct list_head link; | ||
103 | char name[80]; /* device name */ | ||
104 | struct ocp_def *def; /* device definition */ | ||
105 | void *drvdata; /* driver data for this device */ | ||
106 | struct ocp_driver *driver; | ||
107 | u32 current_state; /* Current operating state. In ACPI-speak, | ||
108 | this is D0-D3, D0 being fully functional, | ||
109 | and D3 being off. */ | ||
110 | struct device dev; | ||
111 | }; | ||
112 | |||
113 | struct ocp_driver { | ||
114 | struct list_head node; | ||
115 | char *name; | ||
116 | const struct ocp_device_id *id_table; /* NULL if wants all devices */ | ||
117 | int (*probe) (struct ocp_device *dev); /* New device inserted */ | ||
118 | void (*remove) (struct ocp_device *dev); /* Device removed (NULL if not a hot-plug capable driver) */ | ||
119 | int (*suspend) (struct ocp_device *dev, pm_message_t state); /* Device suspended */ | ||
120 | int (*resume) (struct ocp_device *dev); /* Device woken up */ | ||
121 | struct device_driver driver; | ||
122 | }; | ||
123 | |||
124 | #define to_ocp_dev(n) container_of(n, struct ocp_device, dev) | ||
125 | #define to_ocp_drv(n) container_of(n, struct ocp_driver, driver) | ||
126 | |||
127 | /* Similar to the helpers above, these manipulate per-ocp_dev | ||
128 | * driver-specific data. Currently stored as ocp_dev::ocpdev, | ||
129 | * a void pointer, but it is not present on older kernels. | ||
130 | */ | ||
131 | static inline void * | ||
132 | ocp_get_drvdata(struct ocp_device *pdev) | ||
133 | { | ||
134 | return pdev->drvdata; | ||
135 | } | ||
136 | |||
137 | static inline void | ||
138 | ocp_set_drvdata(struct ocp_device *pdev, void *data) | ||
139 | { | ||
140 | pdev->drvdata = data; | ||
141 | } | ||
142 | |||
143 | #if defined (CONFIG_PM) | ||
144 | /* | ||
145 | * This is right for the IBM 405 and 440 but will need to be | ||
146 | * generalized if the OCP stuff gets used on other processors. | ||
147 | */ | ||
148 | static inline void | ||
149 | ocp_force_power_off(struct ocp_device *odev) | ||
150 | { | ||
151 | mtdcr(DCRN_CPMFR, mfdcr(DCRN_CPMFR) | odev->def->pm); | ||
152 | } | ||
153 | |||
154 | static inline void | ||
155 | ocp_force_power_on(struct ocp_device *odev) | ||
156 | { | ||
157 | mtdcr(DCRN_CPMFR, mfdcr(DCRN_CPMFR) & ~odev->def->pm); | ||
158 | } | ||
159 | #else | ||
160 | #define ocp_force_power_off(x) (void)(x) | ||
161 | #define ocp_force_power_on(x) (void)(x) | ||
162 | #endif | ||
163 | |||
164 | /* Register/Unregister an OCP driver */ | ||
165 | extern int ocp_register_driver(struct ocp_driver *drv); | ||
166 | extern void ocp_unregister_driver(struct ocp_driver *drv); | ||
167 | |||
168 | /* Build list of devices */ | ||
169 | extern int ocp_early_init(void) __init; | ||
170 | |||
171 | /* Find a device by index */ | ||
172 | extern struct ocp_device *ocp_find_device(unsigned int vendor, unsigned int function, int index); | ||
173 | |||
174 | /* Get a def by index */ | ||
175 | extern struct ocp_def *ocp_get_one_device(unsigned int vendor, unsigned int function, int index); | ||
176 | |||
177 | /* Add a device by index */ | ||
178 | extern int ocp_add_one_device(struct ocp_def *def); | ||
179 | |||
180 | /* Remove a device by index */ | ||
181 | extern int ocp_remove_one_device(unsigned int vendor, unsigned int function, int index); | ||
182 | |||
183 | /* Iterate over devices and execute a routine */ | ||
184 | extern void ocp_for_each_device(void(*callback)(struct ocp_device *, void *arg), void *arg); | ||
185 | |||
186 | /* Sysfs support */ | ||
187 | #define OCP_SYSFS_ADDTL(type, format, name, field) \ | ||
188 | static ssize_t \ | ||
189 | show_##name##_##field(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
190 | { \ | ||
191 | struct ocp_device *odev = to_ocp_dev(dev); \ | ||
192 | type *add = odev->def->additions; \ | ||
193 | \ | ||
194 | return sprintf(buf, format, add->field); \ | ||
195 | } \ | ||
196 | static DEVICE_ATTR(name##_##field, S_IRUGO, show_##name##_##field, NULL); | ||
197 | |||
198 | #ifdef CONFIG_IBM_OCP | ||
199 | #include <asm/ibm_ocp.h> | ||
200 | #endif | ||
201 | |||
202 | #endif /* CONFIG_PPC_OCP */ | ||
203 | #endif /* __OCP_H__ */ | ||
204 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/ocp_ids.h b/include/asm-ppc/ocp_ids.h deleted file mode 100644 index 8ae4b311a37c..000000000000 --- a/include/asm-ppc/ocp_ids.h +++ /dev/null | |||
@@ -1,73 +0,0 @@ | |||
1 | /* | ||
2 | * ocp_ids.h | ||
3 | * | ||
4 | * OCP device ids based on the ideas from PCI | ||
5 | * | ||
6 | * The numbers below are almost completely arbitrary, and in fact | ||
7 | * strings might work better. -- paulus | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License as published by the | ||
11 | * Free Software Foundation; either version 2 of the License, or (at your | ||
12 | * option) any later version. | ||
13 | */ | ||
14 | |||
15 | /* | ||
16 | * Vender device | ||
17 | * [xxxx] [xxxx] | ||
18 | * | ||
19 | * Keep in order, please | ||
20 | */ | ||
21 | |||
22 | /* Vendor IDs 0x0001 - 0xFFFF copied from pci_ids.h */ | ||
23 | |||
24 | #define OCP_VENDOR_INVALID 0x0000 | ||
25 | #define OCP_VENDOR_ARM 0x0004 | ||
26 | #define OCP_VENDOR_FREESCALE 0x1057 | ||
27 | #define OCP_VENDOR_IBM 0x1014 | ||
28 | #define OCP_VENDOR_MOTOROLA OCP_VENDOR_FREESCALE | ||
29 | #define OCP_VENDOR_XILINX 0x10ee | ||
30 | #define OCP_VENDOR_UNKNOWN 0xFFFF | ||
31 | |||
32 | /* device identification */ | ||
33 | |||
34 | /* define type */ | ||
35 | #define OCP_FUNC_INVALID 0x0000 | ||
36 | |||
37 | /* system 0x0001 - 0x001F */ | ||
38 | |||
39 | /* Timers 0x0020 - 0x002F */ | ||
40 | |||
41 | /* Serial 0x0030 - 0x006F*/ | ||
42 | #define OCP_FUNC_16550 0x0031 | ||
43 | #define OCP_FUNC_IIC 0x0032 | ||
44 | #define OCP_FUNC_USB 0x0033 | ||
45 | #define OCP_FUNC_PSC_UART 0x0034 | ||
46 | |||
47 | /* Memory devices 0x0090 - 0x009F */ | ||
48 | #define OCP_FUNC_MAL 0x0090 | ||
49 | #define OCP_FUNC_DMA 0x0091 | ||
50 | |||
51 | /* Display 0x00A0 - 0x00AF */ | ||
52 | |||
53 | /* Sound 0x00B0 - 0x00BF */ | ||
54 | |||
55 | /* Mass Storage 0x00C0 - 0xxCF */ | ||
56 | #define OCP_FUNC_IDE 0x00C0 | ||
57 | |||
58 | /* Misc 0x00D0 - 0x00DF*/ | ||
59 | #define OCP_FUNC_GPIO 0x00D0 | ||
60 | #define OCP_FUNC_ZMII 0x00D1 | ||
61 | #define OCP_FUNC_PERFMON 0x00D2 /* Performance Monitor */ | ||
62 | #define OCP_FUNC_RGMII 0x00D3 | ||
63 | #define OCP_FUNC_TAH 0x00D4 | ||
64 | #define OCP_FUNC_SEC2 0x00D5 /* Crypto/Security 2.0 */ | ||
65 | |||
66 | /* Network 0x0200 - 0x02FF */ | ||
67 | #define OCP_FUNC_EMAC 0x0200 | ||
68 | #define OCP_FUNC_GFAR 0x0201 /* TSEC & FEC */ | ||
69 | |||
70 | /* Bridge devices 0xE00 - 0xEFF */ | ||
71 | #define OCP_FUNC_OPB 0x0E00 | ||
72 | |||
73 | #define OCP_FUNC_UNKNOWN 0xFFFF | ||
diff --git a/include/asm-ppc/open_pic.h b/include/asm-ppc/open_pic.h deleted file mode 100644 index 778d5726212c..000000000000 --- a/include/asm-ppc/open_pic.h +++ /dev/null | |||
@@ -1,98 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/open_pic.h -- OpenPIC Interrupt Handling | ||
3 | * | ||
4 | * Copyright (C) 1997 Geert Uytterhoeven | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file COPYING in the main directory of this archive | ||
8 | * for more details. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #ifndef _PPC_KERNEL_OPEN_PIC_H | ||
13 | #define _PPC_KERNEL_OPEN_PIC_H | ||
14 | |||
15 | #include <linux/irq.h> | ||
16 | |||
17 | #define OPENPIC_SIZE 0x40000 | ||
18 | |||
19 | /* | ||
20 | * Non-offset'ed vector numbers | ||
21 | */ | ||
22 | |||
23 | #define OPENPIC_VEC_TIMER 110 /* and up */ | ||
24 | #define OPENPIC_VEC_IPI 118 /* and up */ | ||
25 | #define OPENPIC_VEC_SPURIOUS 255 | ||
26 | |||
27 | /* Priorities */ | ||
28 | #define OPENPIC_PRIORITY_IPI_BASE 10 | ||
29 | #define OPENPIC_PRIORITY_DEFAULT 4 | ||
30 | #define OPENPIC_PRIORITY_NMI 9 | ||
31 | |||
32 | /* OpenPIC IRQ controller structure */ | ||
33 | extern struct hw_interrupt_type open_pic; | ||
34 | |||
35 | /* OpenPIC IPI controller structure */ | ||
36 | #ifdef CONFIG_SMP | ||
37 | extern struct hw_interrupt_type open_pic_ipi; | ||
38 | #endif /* CONFIG_SMP */ | ||
39 | |||
40 | extern u_int OpenPIC_NumInitSenses; | ||
41 | extern u_char *OpenPIC_InitSenses; | ||
42 | extern void __iomem * OpenPIC_Addr; | ||
43 | extern int epic_serial_mode; | ||
44 | |||
45 | /* Exported functions */ | ||
46 | extern void openpic_set_sources(int first_irq, int num_irqs, void __iomem *isr); | ||
47 | extern void openpic_init(int linux_irq_offset); | ||
48 | extern void openpic_init_nmi_irq(u_int irq); | ||
49 | extern void openpic_set_irq_priority(u_int irq, u_int pri); | ||
50 | extern void openpic_hookup_cascade(u_int irq, char *name, | ||
51 | int (*cascade_fn)(void)); | ||
52 | extern u_int openpic_irq(void); | ||
53 | extern void openpic_eoi(void); | ||
54 | extern void openpic_request_IPIs(void); | ||
55 | extern void do_openpic_setup_cpu(void); | ||
56 | extern int openpic_get_irq(void); | ||
57 | extern void openpic_reset_processor_phys(u_int cpumask); | ||
58 | extern void openpic_setup_ISU(int isu_num, unsigned long addr); | ||
59 | extern void openpic_cause_IPI(u_int ipi, cpumask_t cpumask); | ||
60 | extern void smp_openpic_message_pass(int target, int msg); | ||
61 | extern void openpic_set_k2_cascade(int irq); | ||
62 | extern void openpic_set_priority(u_int pri); | ||
63 | extern u_int openpic_get_priority(void); | ||
64 | |||
65 | extern inline int openpic_to_irq(int irq) | ||
66 | { | ||
67 | /* IRQ 0 usually means 'disabled'.. don't mess with it | ||
68 | * exceptions to this (sandpoint maybe?) | ||
69 | * shouldn't use openpic_to_irq | ||
70 | */ | ||
71 | if (irq != 0){ | ||
72 | return irq += NUM_8259_INTERRUPTS; | ||
73 | } else { | ||
74 | return 0; | ||
75 | } | ||
76 | } | ||
77 | /* Support for second openpic on G5 macs */ | ||
78 | |||
79 | // FIXME: To be replaced by sane cascaded controller management */ | ||
80 | |||
81 | #define PMAC_OPENPIC2_OFFSET 128 | ||
82 | |||
83 | #define OPENPIC2_VEC_TIMER 110 /* and up */ | ||
84 | #define OPENPIC2_VEC_IPI 118 /* and up */ | ||
85 | #define OPENPIC2_VEC_SPURIOUS 127 | ||
86 | |||
87 | |||
88 | extern void* OpenPIC2_Addr; | ||
89 | |||
90 | /* Exported functions */ | ||
91 | extern void openpic2_set_sources(int first_irq, int num_irqs, void *isr); | ||
92 | extern void openpic2_init(int linux_irq_offset); | ||
93 | extern void openpic2_init_nmi_irq(u_int irq); | ||
94 | extern u_int openpic2_irq(void); | ||
95 | extern void openpic2_eoi(void); | ||
96 | extern int openpic2_get_irq(void); | ||
97 | extern void openpic2_setup_ISU(int isu_num, unsigned long addr); | ||
98 | #endif /* _PPC_KERNEL_OPEN_PIC_H */ | ||
diff --git a/include/asm-ppc/page.h b/include/asm-ppc/page.h deleted file mode 100644 index 37e4756b6b2d..000000000000 --- a/include/asm-ppc/page.h +++ /dev/null | |||
@@ -1,140 +0,0 @@ | |||
1 | #ifndef _PPC_PAGE_H | ||
2 | #define _PPC_PAGE_H | ||
3 | |||
4 | #include <asm/asm-compat.h> | ||
5 | |||
6 | /* PAGE_SHIFT determines the page size */ | ||
7 | #define PAGE_SHIFT 12 | ||
8 | #define PAGE_SIZE (ASM_CONST(1) << PAGE_SHIFT) | ||
9 | |||
10 | /* | ||
11 | * Subtle: this is an int (not an unsigned long) and so it | ||
12 | * gets extended to 64 bits the way want (i.e. with 1s). -- paulus | ||
13 | */ | ||
14 | #define PAGE_MASK (~((1 << PAGE_SHIFT) - 1)) | ||
15 | |||
16 | #ifdef __KERNEL__ | ||
17 | |||
18 | /* This must match what is in arch/ppc/Makefile */ | ||
19 | #define PAGE_OFFSET CONFIG_KERNEL_START | ||
20 | #define KERNELBASE PAGE_OFFSET | ||
21 | #define is_kernel_addr(x) ((x) >= PAGE_OFFSET) | ||
22 | |||
23 | #ifndef __ASSEMBLY__ | ||
24 | |||
25 | /* | ||
26 | * The basic type of a PTE - 64 bits for those CPUs with > 32 bit | ||
27 | * physical addressing. For now this just the IBM PPC440. | ||
28 | */ | ||
29 | #ifdef CONFIG_PTE_64BIT | ||
30 | typedef unsigned long long pte_basic_t; | ||
31 | #define PTE_SHIFT (PAGE_SHIFT - 3) /* 512 ptes per page */ | ||
32 | #define PTE_FMT "%16Lx" | ||
33 | #else | ||
34 | typedef unsigned long pte_basic_t; | ||
35 | #define PTE_SHIFT (PAGE_SHIFT - 2) /* 1024 ptes per page */ | ||
36 | #define PTE_FMT "%.8lx" | ||
37 | #endif | ||
38 | |||
39 | /* align addr on a size boundary - adjust address up/down if needed */ | ||
40 | #define _ALIGN_UP(addr,size) (((addr)+((size)-1))&(~((size)-1))) | ||
41 | #define _ALIGN_DOWN(addr,size) ((addr)&(~((size)-1))) | ||
42 | |||
43 | /* align addr on a size boundary - adjust address up if needed */ | ||
44 | #define _ALIGN(addr,size) _ALIGN_UP(addr,size) | ||
45 | |||
46 | /* to align the pointer to the (next) page boundary */ | ||
47 | #define PAGE_ALIGN(addr) _ALIGN(addr, PAGE_SIZE) | ||
48 | |||
49 | |||
50 | #undef STRICT_MM_TYPECHECKS | ||
51 | |||
52 | #ifdef STRICT_MM_TYPECHECKS | ||
53 | /* | ||
54 | * These are used to make use of C type-checking.. | ||
55 | */ | ||
56 | typedef struct { pte_basic_t pte; } pte_t; | ||
57 | typedef struct { unsigned long pmd; } pmd_t; | ||
58 | typedef struct { unsigned long pgd; } pgd_t; | ||
59 | typedef struct { unsigned long pgprot; } pgprot_t; | ||
60 | |||
61 | #define pte_val(x) ((x).pte) | ||
62 | #define pmd_val(x) ((x).pmd) | ||
63 | #define pgd_val(x) ((x).pgd) | ||
64 | #define pgprot_val(x) ((x).pgprot) | ||
65 | |||
66 | #define __pte(x) ((pte_t) { (x) } ) | ||
67 | #define __pmd(x) ((pmd_t) { (x) } ) | ||
68 | #define __pgd(x) ((pgd_t) { (x) } ) | ||
69 | #define __pgprot(x) ((pgprot_t) { (x) } ) | ||
70 | |||
71 | #else | ||
72 | /* | ||
73 | * .. while these make it easier on the compiler | ||
74 | */ | ||
75 | typedef pte_basic_t pte_t; | ||
76 | typedef unsigned long pmd_t; | ||
77 | typedef unsigned long pgd_t; | ||
78 | typedef unsigned long pgprot_t; | ||
79 | |||
80 | #define pte_val(x) (x) | ||
81 | #define pmd_val(x) (x) | ||
82 | #define pgd_val(x) (x) | ||
83 | #define pgprot_val(x) (x) | ||
84 | |||
85 | #define __pte(x) (x) | ||
86 | #define __pmd(x) (x) | ||
87 | #define __pgd(x) (x) | ||
88 | #define __pgprot(x) (x) | ||
89 | |||
90 | #endif | ||
91 | |||
92 | struct page; | ||
93 | extern void clear_pages(void *page, int order); | ||
94 | static inline void clear_page(void *page) { clear_pages(page, 0); } | ||
95 | extern void copy_page(void *to, void *from); | ||
96 | extern void clear_user_page(void *page, unsigned long vaddr, struct page *pg); | ||
97 | extern void copy_user_page(void *to, void *from, unsigned long vaddr, | ||
98 | struct page *pg); | ||
99 | |||
100 | #define PPC_MEMSTART 0 | ||
101 | #define PPC_MEMOFFSET PAGE_OFFSET | ||
102 | |||
103 | #define ___pa(vaddr) ((vaddr)-PPC_MEMOFFSET) | ||
104 | #define ___va(paddr) ((paddr)+PPC_MEMOFFSET) | ||
105 | |||
106 | extern int page_is_ram(unsigned long pfn); | ||
107 | |||
108 | #define __pa(x) ___pa((unsigned long)(x)) | ||
109 | #define __va(x) ((void *)(___va((unsigned long)(x)))) | ||
110 | |||
111 | #define ARCH_PFN_OFFSET 0 | ||
112 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) | ||
113 | #define page_to_virt(page) __va(page_to_pfn(page) << PAGE_SHIFT) | ||
114 | |||
115 | #define pfn_valid(pfn) ((pfn) < max_mapnr) | ||
116 | #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) | ||
117 | |||
118 | /* Pure 2^n version of get_order */ | ||
119 | extern __inline__ int get_order(unsigned long size) | ||
120 | { | ||
121 | int lz; | ||
122 | |||
123 | size = (size-1) >> PAGE_SHIFT; | ||
124 | asm ("cntlzw %0,%1" : "=r" (lz) : "r" (size)); | ||
125 | return 32 - lz; | ||
126 | } | ||
127 | |||
128 | typedef struct page *pgtable_t; | ||
129 | |||
130 | #endif /* __ASSEMBLY__ */ | ||
131 | |||
132 | #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ | ||
133 | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) | ||
134 | |||
135 | /* We do define AT_SYSINFO_EHDR but don't use the gate mechanism */ | ||
136 | #define __HAVE_ARCH_GATE_AREA 1 | ||
137 | |||
138 | #include <asm-generic/memory_model.h> | ||
139 | #endif /* __KERNEL__ */ | ||
140 | #endif /* _PPC_PAGE_H */ | ||
diff --git a/include/asm-ppc/pc_serial.h b/include/asm-ppc/pc_serial.h deleted file mode 100644 index 81a2d0fdaf00..000000000000 --- a/include/asm-ppc/pc_serial.h +++ /dev/null | |||
@@ -1,42 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/pc_serial.h | ||
3 | * | ||
4 | * This is basically a copy of include/asm-i386/serial.h. | ||
5 | * It is used on platforms which have an ISA bus and thus are likely | ||
6 | * to have PC-style serial ports at the legacy I/O port addresses. | ||
7 | * It also includes the definitions for the fourport, accent, boca | ||
8 | * and hub6 multiport serial cards, although I have never heard of | ||
9 | * anyone using any of those on a PPC platform. -- paulus | ||
10 | */ | ||
11 | |||
12 | |||
13 | /* | ||
14 | * This assumes you have a 1.8432 MHz clock for your UART. | ||
15 | * | ||
16 | * It'd be nice if someone built a serial card with a 24.576 MHz | ||
17 | * clock, since the 16550A is capable of handling a top speed of 1.5 | ||
18 | * megabits/second; but this requires the faster clock. | ||
19 | */ | ||
20 | #define BASE_BAUD ( 1843200 / 16 ) | ||
21 | |||
22 | #ifdef CONFIG_SERIAL_MANY_PORTS | ||
23 | #define RS_TABLE_SIZE 64 | ||
24 | #else | ||
25 | #define RS_TABLE_SIZE 4 | ||
26 | #endif | ||
27 | |||
28 | /* Standard COM flags (except for COM4, because of the 8514 problem) */ | ||
29 | #ifdef CONFIG_SERIAL_DETECT_IRQ | ||
30 | #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ) | ||
31 | #define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ) | ||
32 | #else | ||
33 | #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) | ||
34 | #define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF | ||
35 | #endif | ||
36 | |||
37 | #define SERIAL_PORT_DFNS \ | ||
38 | /* UART CLK PORT IRQ FLAGS */ \ | ||
39 | { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \ | ||
40 | { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \ | ||
41 | { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ | ||
42 | { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ | ||
diff --git a/include/asm-ppc/pci-bridge.h b/include/asm-ppc/pci-bridge.h deleted file mode 100644 index 4d35b844bc58..000000000000 --- a/include/asm-ppc/pci-bridge.h +++ /dev/null | |||
@@ -1,151 +0,0 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | #ifndef _ASM_PCI_BRIDGE_H | ||
3 | #define _ASM_PCI_BRIDGE_H | ||
4 | |||
5 | #include <linux/ioport.h> | ||
6 | #include <linux/pci.h> | ||
7 | |||
8 | struct device_node; | ||
9 | struct pci_controller; | ||
10 | |||
11 | /* | ||
12 | * pci_io_base returns the memory address at which you can access | ||
13 | * the I/O space for PCI bus number `bus' (or NULL on error). | ||
14 | */ | ||
15 | extern void __iomem *pci_bus_io_base(unsigned int bus); | ||
16 | extern unsigned long pci_bus_io_base_phys(unsigned int bus); | ||
17 | extern unsigned long pci_bus_mem_base_phys(unsigned int bus); | ||
18 | |||
19 | /* Allocate a new PCI host bridge structure */ | ||
20 | extern struct pci_controller* pcibios_alloc_controller(void); | ||
21 | |||
22 | /* Helper function for setting up resources */ | ||
23 | extern void pci_init_resource(struct resource *res, resource_size_t start, | ||
24 | resource_size_t end, int flags, char *name); | ||
25 | |||
26 | /* Get the PCI host controller for a bus */ | ||
27 | extern struct pci_controller* pci_bus_to_hose(int bus); | ||
28 | |||
29 | /* Get the PCI host controller for an OF device */ | ||
30 | extern struct pci_controller* | ||
31 | pci_find_hose_for_OF_device(struct device_node* node); | ||
32 | |||
33 | /* Fill up host controller resources from the OF node */ | ||
34 | extern void | ||
35 | pci_process_bridge_OF_ranges(struct pci_controller *hose, | ||
36 | struct device_node *dev, int primary); | ||
37 | |||
38 | /* | ||
39 | * Structure of a PCI controller (host bridge) | ||
40 | */ | ||
41 | struct pci_controller { | ||
42 | int index; /* PCI domain number */ | ||
43 | struct pci_controller *next; | ||
44 | struct pci_bus *bus; | ||
45 | void *arch_data; | ||
46 | struct device *parent; | ||
47 | |||
48 | int first_busno; | ||
49 | int last_busno; | ||
50 | int bus_offset; | ||
51 | |||
52 | void __iomem *io_base_virt; | ||
53 | resource_size_t io_base_phys; | ||
54 | |||
55 | /* Some machines (PReP) have a non 1:1 mapping of | ||
56 | * the PCI memory space in the CPU bus space | ||
57 | */ | ||
58 | resource_size_t pci_mem_offset; | ||
59 | |||
60 | struct pci_ops *ops; | ||
61 | volatile unsigned int __iomem *cfg_addr; | ||
62 | volatile void __iomem *cfg_data; | ||
63 | /* | ||
64 | * If set, indirect method will set the cfg_type bit as | ||
65 | * needed to generate type 1 configuration transactions. | ||
66 | */ | ||
67 | int set_cfg_type; | ||
68 | |||
69 | /* Currently, we limit ourselves to 1 IO range and 3 mem | ||
70 | * ranges since the common pci_bus structure can't handle more | ||
71 | */ | ||
72 | struct resource io_resource; | ||
73 | struct resource mem_resources[3]; | ||
74 | int mem_resource_count; | ||
75 | |||
76 | /* Host bridge I/O and Memory space | ||
77 | * Used for BAR placement algorithms | ||
78 | */ | ||
79 | struct resource io_space; | ||
80 | struct resource mem_space; | ||
81 | }; | ||
82 | |||
83 | static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus) | ||
84 | { | ||
85 | return bus->sysdata; | ||
86 | } | ||
87 | |||
88 | /* These are used for config access before all the PCI probing | ||
89 | has been done. */ | ||
90 | int early_read_config_byte(struct pci_controller *hose, int bus, int dev_fn, | ||
91 | int where, u8 *val); | ||
92 | int early_read_config_word(struct pci_controller *hose, int bus, int dev_fn, | ||
93 | int where, u16 *val); | ||
94 | int early_read_config_dword(struct pci_controller *hose, int bus, int dev_fn, | ||
95 | int where, u32 *val); | ||
96 | int early_write_config_byte(struct pci_controller *hose, int bus, int dev_fn, | ||
97 | int where, u8 val); | ||
98 | int early_write_config_word(struct pci_controller *hose, int bus, int dev_fn, | ||
99 | int where, u16 val); | ||
100 | int early_write_config_dword(struct pci_controller *hose, int bus, int dev_fn, | ||
101 | int where, u32 val); | ||
102 | |||
103 | extern void setup_indirect_pci_nomap(struct pci_controller* hose, | ||
104 | void __iomem *cfg_addr, void __iomem *cfg_data); | ||
105 | extern void setup_indirect_pci(struct pci_controller* hose, | ||
106 | u32 cfg_addr, u32 cfg_data); | ||
107 | extern void setup_grackle(struct pci_controller *hose); | ||
108 | |||
109 | extern unsigned char common_swizzle(struct pci_dev *, unsigned char *); | ||
110 | |||
111 | /* | ||
112 | * The following code swizzles for exactly one bridge. The routine | ||
113 | * common_swizzle below handles multiple bridges. But there are a | ||
114 | * some boards that don't follow the PCI spec's suggestion so we | ||
115 | * break this piece out separately. | ||
116 | */ | ||
117 | static inline unsigned char bridge_swizzle(unsigned char pin, | ||
118 | unsigned char idsel) | ||
119 | { | ||
120 | return (((pin-1) + idsel) % 4) + 1; | ||
121 | } | ||
122 | |||
123 | /* | ||
124 | * The following macro is used to lookup irqs in a standard table | ||
125 | * format for those PPC systems that do not already have PCI | ||
126 | * interrupts properly routed. | ||
127 | */ | ||
128 | /* FIXME - double check this */ | ||
129 | #define PCI_IRQ_TABLE_LOOKUP \ | ||
130 | ({ long _ctl_ = -1; \ | ||
131 | if (idsel >= min_idsel && idsel <= max_idsel && pin <= irqs_per_slot) \ | ||
132 | _ctl_ = pci_irq_table[idsel - min_idsel][pin-1]; \ | ||
133 | _ctl_; }) | ||
134 | |||
135 | /* | ||
136 | * Scan the buses below a given PCI host bridge and assign suitable | ||
137 | * resources to all devices found. | ||
138 | */ | ||
139 | extern int pciauto_bus_scan(struct pci_controller *, int); | ||
140 | |||
141 | #ifdef CONFIG_PCI | ||
142 | extern unsigned long pci_address_to_pio(phys_addr_t address); | ||
143 | #else | ||
144 | static inline unsigned long pci_address_to_pio(phys_addr_t address) | ||
145 | { | ||
146 | return (unsigned long)-1; | ||
147 | } | ||
148 | #endif | ||
149 | |||
150 | #endif | ||
151 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/pci.h b/include/asm-ppc/pci.h deleted file mode 100644 index d2442cd72a59..000000000000 --- a/include/asm-ppc/pci.h +++ /dev/null | |||
@@ -1,156 +0,0 @@ | |||
1 | #ifndef __PPC_PCI_H | ||
2 | #define __PPC_PCI_H | ||
3 | #ifdef __KERNEL__ | ||
4 | |||
5 | #include <linux/types.h> | ||
6 | #include <linux/slab.h> | ||
7 | #include <linux/string.h> | ||
8 | #include <linux/mm.h> | ||
9 | #include <asm/scatterlist.h> | ||
10 | #include <asm/io.h> | ||
11 | #include <asm/pci-bridge.h> | ||
12 | #include <asm-generic/pci-dma-compat.h> | ||
13 | |||
14 | struct pci_dev; | ||
15 | |||
16 | /* Values for the `which' argument to sys_pciconfig_iobase syscall. */ | ||
17 | #define IOBASE_BRIDGE_NUMBER 0 | ||
18 | #define IOBASE_MEMORY 1 | ||
19 | #define IOBASE_IO 2 | ||
20 | #define IOBASE_ISA_IO 3 | ||
21 | #define IOBASE_ISA_MEM 4 | ||
22 | |||
23 | /* | ||
24 | * Set this to 1 if you want the kernel to re-assign all PCI | ||
25 | * bus numbers | ||
26 | */ | ||
27 | extern int pci_assign_all_buses; | ||
28 | |||
29 | #define pcibios_assign_all_busses() (pci_assign_all_buses) | ||
30 | #define pcibios_scan_all_fns(a, b) 0 | ||
31 | |||
32 | #define PCIBIOS_MIN_IO 0x1000 | ||
33 | #define PCIBIOS_MIN_MEM 0x10000000 | ||
34 | |||
35 | extern inline void pcibios_set_master(struct pci_dev *dev) | ||
36 | { | ||
37 | /* No special bus mastering setup handling */ | ||
38 | } | ||
39 | |||
40 | extern inline void pcibios_penalize_isa_irq(int irq, int active) | ||
41 | { | ||
42 | /* We don't do dynamic PCI IRQ allocation */ | ||
43 | } | ||
44 | |||
45 | extern unsigned long pci_resource_to_bus(struct pci_dev *pdev, struct resource *res); | ||
46 | |||
47 | /* | ||
48 | * The PCI bus bridge can translate addresses issued by the processor(s) | ||
49 | * into a different address on the PCI bus. On 32-bit cpus, we assume | ||
50 | * this mapping is 1-1, but on 64-bit systems it often isn't. | ||
51 | * | ||
52 | * Obsolete ! Drivers should now use pci_resource_to_bus | ||
53 | */ | ||
54 | extern unsigned long phys_to_bus(unsigned long pa); | ||
55 | extern unsigned long pci_phys_to_bus(unsigned long pa, int busnr); | ||
56 | extern unsigned long pci_bus_to_phys(unsigned int ba, int busnr); | ||
57 | |||
58 | /* The PCI address space does equal the physical memory | ||
59 | * address space. The networking and block device layers use | ||
60 | * this boolean for bounce buffer decisions. | ||
61 | */ | ||
62 | #define PCI_DMA_BUS_IS_PHYS (1) | ||
63 | |||
64 | #ifdef CONFIG_NOT_COHERENT_CACHE | ||
65 | /* | ||
66 | * pci_unmap_{page,single} are NOPs but pci_dma_sync_single_for_cpu() | ||
67 | * and so on are not, so... | ||
68 | */ | ||
69 | |||
70 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ | ||
71 | dma_addr_t ADDR_NAME; | ||
72 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ | ||
73 | __u32 LEN_NAME; | ||
74 | #define pci_unmap_addr(PTR, ADDR_NAME) \ | ||
75 | ((PTR)->ADDR_NAME) | ||
76 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ | ||
77 | (((PTR)->ADDR_NAME) = (VAL)) | ||
78 | #define pci_unmap_len(PTR, LEN_NAME) \ | ||
79 | ((PTR)->LEN_NAME) | ||
80 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ | ||
81 | (((PTR)->LEN_NAME) = (VAL)) | ||
82 | |||
83 | #else /* coherent */ | ||
84 | |||
85 | /* pci_unmap_{page,single} is a nop so... */ | ||
86 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) | ||
87 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) | ||
88 | #define pci_unmap_addr(PTR, ADDR_NAME) (0) | ||
89 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) | ||
90 | #define pci_unmap_len(PTR, LEN_NAME) (0) | ||
91 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) | ||
92 | |||
93 | #endif /* CONFIG_NOT_COHERENT_CACHE */ | ||
94 | |||
95 | #ifdef CONFIG_PCI | ||
96 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, | ||
97 | enum pci_dma_burst_strategy *strat, | ||
98 | unsigned long *strategy_parameter) | ||
99 | { | ||
100 | *strat = PCI_DMA_BURST_INFINITY; | ||
101 | *strategy_parameter = ~0UL; | ||
102 | } | ||
103 | #endif | ||
104 | |||
105 | /* Return the index of the PCI controller for device PDEV. */ | ||
106 | #define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index | ||
107 | |||
108 | /* Set the name of the bus as it appears in /proc/bus/pci */ | ||
109 | static inline int pci_proc_domain(struct pci_bus *bus) | ||
110 | { | ||
111 | return 0; | ||
112 | } | ||
113 | |||
114 | /* Map a range of PCI memory or I/O space for a device into user space */ | ||
115 | int pci_mmap_page_range(struct pci_dev *pdev, struct vm_area_struct *vma, | ||
116 | enum pci_mmap_state mmap_state, int write_combine); | ||
117 | |||
118 | /* Tell drivers/pci/proc.c that we have pci_mmap_page_range() */ | ||
119 | #define HAVE_PCI_MMAP 1 | ||
120 | |||
121 | extern void | ||
122 | pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
123 | struct resource *res); | ||
124 | |||
125 | extern void | ||
126 | pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
127 | struct pci_bus_region *region); | ||
128 | |||
129 | static inline struct resource * | ||
130 | pcibios_select_root(struct pci_dev *pdev, struct resource *res) | ||
131 | { | ||
132 | struct resource *root = NULL; | ||
133 | |||
134 | if (res->flags & IORESOURCE_IO) | ||
135 | root = &ioport_resource; | ||
136 | if (res->flags & IORESOURCE_MEM) | ||
137 | root = &iomem_resource; | ||
138 | |||
139 | return root; | ||
140 | } | ||
141 | |||
142 | struct file; | ||
143 | extern pgprot_t pci_phys_mem_access_prot(struct file *file, | ||
144 | unsigned long pfn, | ||
145 | unsigned long size, | ||
146 | pgprot_t prot); | ||
147 | |||
148 | #define HAVE_ARCH_PCI_RESOURCE_TO_USER | ||
149 | extern void pci_resource_to_user(const struct pci_dev *dev, int bar, | ||
150 | const struct resource *rsrc, | ||
151 | resource_size_t *start, resource_size_t *end); | ||
152 | |||
153 | |||
154 | #endif /* __KERNEL__ */ | ||
155 | |||
156 | #endif /* __PPC_PCI_H */ | ||
diff --git a/include/asm-ppc/pgalloc.h b/include/asm-ppc/pgalloc.h deleted file mode 100644 index fd4d1d74cfb1..000000000000 --- a/include/asm-ppc/pgalloc.h +++ /dev/null | |||
@@ -1,45 +0,0 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | #ifndef _PPC_PGALLOC_H | ||
3 | #define _PPC_PGALLOC_H | ||
4 | |||
5 | #include <linux/threads.h> | ||
6 | |||
7 | extern void __bad_pte(pmd_t *pmd); | ||
8 | |||
9 | extern pgd_t *pgd_alloc(struct mm_struct *mm); | ||
10 | extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); | ||
11 | |||
12 | /* | ||
13 | * We don't have any real pmd's, and this code never triggers because | ||
14 | * the pgd will always be present.. | ||
15 | */ | ||
16 | #define pmd_alloc_one(mm,address) ({ BUG(); ((pmd_t *)2); }) | ||
17 | #define pmd_free(mm, x) do { } while (0) | ||
18 | #define __pmd_free_tlb(tlb,x) do { } while (0) | ||
19 | #define pgd_populate(mm, pmd, pte) BUG() | ||
20 | |||
21 | #ifndef CONFIG_BOOKE | ||
22 | #define pmd_populate_kernel(mm, pmd, pte) \ | ||
23 | (pmd_val(*(pmd)) = __pa(pte) | _PMD_PRESENT) | ||
24 | #define pmd_populate(mm, pmd, pte) \ | ||
25 | (pmd_val(*(pmd)) = (page_to_pfn(pte) << PAGE_SHIFT) | _PMD_PRESENT) | ||
26 | #define pmd_pgtable(pmd) pmd_page(pmd) | ||
27 | #else | ||
28 | #define pmd_populate_kernel(mm, pmd, pte) \ | ||
29 | (pmd_val(*(pmd)) = (unsigned long)pte | _PMD_PRESENT) | ||
30 | #define pmd_populate(mm, pmd, pte) \ | ||
31 | (pmd_val(*(pmd)) = (unsigned long)lowmem_page_address(pte) | _PMD_PRESENT) | ||
32 | #define pmd_pgtable(pmd) pmd_page(pmd) | ||
33 | #endif | ||
34 | |||
35 | extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); | ||
36 | extern pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr); | ||
37 | extern void pte_free_kernel(struct mm_struct *mm, pte_t *pte); | ||
38 | extern void pte_free(struct mm_struct *mm, pgtable_t pte); | ||
39 | |||
40 | #define __pte_free_tlb(tlb, pte) pte_free((tlb)->mm, (pte)) | ||
41 | |||
42 | #define check_pgt_cache() do { } while (0) | ||
43 | |||
44 | #endif /* _PPC_PGALLOC_H */ | ||
45 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/pgtable.h b/include/asm-ppc/pgtable.h deleted file mode 100644 index 55f9d38e3bf8..000000000000 --- a/include/asm-ppc/pgtable.h +++ /dev/null | |||
@@ -1,771 +0,0 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | #ifndef _PPC_PGTABLE_H | ||
3 | #define _PPC_PGTABLE_H | ||
4 | |||
5 | #include <asm-generic/4level-fixup.h> | ||
6 | |||
7 | |||
8 | #ifndef __ASSEMBLY__ | ||
9 | #include <linux/sched.h> | ||
10 | #include <linux/threads.h> | ||
11 | #include <asm/processor.h> /* For TASK_SIZE */ | ||
12 | #include <asm/mmu.h> | ||
13 | #include <asm/page.h> | ||
14 | #include <asm/io.h> /* For sub-arch specific PPC_PIN_SIZE */ | ||
15 | struct mm_struct; | ||
16 | |||
17 | extern unsigned long va_to_phys(unsigned long address); | ||
18 | extern pte_t *va_to_pte(unsigned long address); | ||
19 | extern unsigned long ioremap_bot, ioremap_base; | ||
20 | #endif /* __ASSEMBLY__ */ | ||
21 | |||
22 | /* | ||
23 | * The PowerPC MMU uses a hash table containing PTEs, together with | ||
24 | * a set of 16 segment registers (on 32-bit implementations), to define | ||
25 | * the virtual to physical address mapping. | ||
26 | * | ||
27 | * We use the hash table as an extended TLB, i.e. a cache of currently | ||
28 | * active mappings. We maintain a two-level page table tree, much | ||
29 | * like that used by the i386, for the sake of the Linux memory | ||
30 | * management code. Low-level assembler code in hashtable.S | ||
31 | * (procedure hash_page) is responsible for extracting ptes from the | ||
32 | * tree and putting them into the hash table when necessary, and | ||
33 | * updating the accessed and modified bits in the page table tree. | ||
34 | */ | ||
35 | |||
36 | /* | ||
37 | * The PowerPC MPC8xx uses a TLB with hardware assisted, software tablewalk. | ||
38 | * We also use the two level tables, but we can put the real bits in them | ||
39 | * needed for the TLB and tablewalk. These definitions require Mx_CTR.PPM = 0, | ||
40 | * Mx_CTR.PPCS = 0, and MD_CTR.TWAM = 1. The level 2 descriptor has | ||
41 | * additional page protection (when Mx_CTR.PPCS = 1) that allows TLB hit | ||
42 | * based upon user/super access. The TLB does not have accessed nor write | ||
43 | * protect. We assume that if the TLB get loaded with an entry it is | ||
44 | * accessed, and overload the changed bit for write protect. We use | ||
45 | * two bits in the software pte that are supposed to be set to zero in | ||
46 | * the TLB entry (24 and 25) for these indicators. Although the level 1 | ||
47 | * descriptor contains the guarded and writethrough/copyback bits, we can | ||
48 | * set these at the page level since they get copied from the Mx_TWC | ||
49 | * register when the TLB entry is loaded. We will use bit 27 for guard, since | ||
50 | * that is where it exists in the MD_TWC, and bit 26 for writethrough. | ||
51 | * These will get masked from the level 2 descriptor at TLB load time, and | ||
52 | * copied to the MD_TWC before it gets loaded. | ||
53 | * Large page sizes added. We currently support two sizes, 4K and 8M. | ||
54 | * This also allows a TLB hander optimization because we can directly | ||
55 | * load the PMD into MD_TWC. The 8M pages are only used for kernel | ||
56 | * mapping of well known areas. The PMD (PGD) entries contain control | ||
57 | * flags in addition to the address, so care must be taken that the | ||
58 | * software no longer assumes these are only pointers. | ||
59 | */ | ||
60 | |||
61 | /* | ||
62 | * At present, all PowerPC 400-class processors share a similar TLB | ||
63 | * architecture. The instruction and data sides share a unified, | ||
64 | * 64-entry, fully-associative TLB which is maintained totally under | ||
65 | * software control. In addition, the instruction side has a | ||
66 | * hardware-managed, 4-entry, fully-associative TLB which serves as a | ||
67 | * first level to the shared TLB. These two TLBs are known as the UTLB | ||
68 | * and ITLB, respectively (see "mmu.h" for definitions). | ||
69 | */ | ||
70 | |||
71 | /* | ||
72 | * The normal case is that PTEs are 32-bits and we have a 1-page | ||
73 | * 1024-entry pgdir pointing to 1-page 1024-entry PTE pages. -- paulus | ||
74 | * | ||
75 | * For any >32-bit physical address platform, we can use the following | ||
76 | * two level page table layout where the pgdir is 8KB and the MS 13 bits | ||
77 | * are an index to the second level table. The combined pgdir/pmd first | ||
78 | * level has 2048 entries and the second level has 512 64-bit PTE entries. | ||
79 | * -Matt | ||
80 | */ | ||
81 | /* PMD_SHIFT determines the size of the area mapped by the PTE pages */ | ||
82 | #define PMD_SHIFT (PAGE_SHIFT + PTE_SHIFT) | ||
83 | #define PMD_SIZE (1UL << PMD_SHIFT) | ||
84 | #define PMD_MASK (~(PMD_SIZE-1)) | ||
85 | |||
86 | /* PGDIR_SHIFT determines what a top-level page table entry can map */ | ||
87 | #define PGDIR_SHIFT PMD_SHIFT | ||
88 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) | ||
89 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) | ||
90 | |||
91 | /* | ||
92 | * entries per page directory level: our page-table tree is two-level, so | ||
93 | * we don't really have any PMD directory. | ||
94 | */ | ||
95 | #define PTRS_PER_PTE (1 << PTE_SHIFT) | ||
96 | #define PTRS_PER_PMD 1 | ||
97 | #define PTRS_PER_PGD (1 << (32 - PGDIR_SHIFT)) | ||
98 | |||
99 | #define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE) | ||
100 | #define FIRST_USER_ADDRESS 0 | ||
101 | |||
102 | #define USER_PGD_PTRS (PAGE_OFFSET >> PGDIR_SHIFT) | ||
103 | #define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS) | ||
104 | |||
105 | #define pte_ERROR(e) \ | ||
106 | printk("%s:%d: bad pte "PTE_FMT".\n", __FILE__, __LINE__, pte_val(e)) | ||
107 | #define pmd_ERROR(e) \ | ||
108 | printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e)) | ||
109 | #define pgd_ERROR(e) \ | ||
110 | printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) | ||
111 | |||
112 | /* | ||
113 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
114 | * current 64MB value just means that there will be a 64MB "hole" after the | ||
115 | * physical memory until the kernel virtual memory starts. That means that | ||
116 | * any out-of-bounds memory accesses will hopefully be caught. | ||
117 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
118 | * area for the same reason. ;) | ||
119 | * | ||
120 | * We no longer map larger than phys RAM with the BATs so we don't have | ||
121 | * to worry about the VMALLOC_OFFSET causing problems. We do have to worry | ||
122 | * about clashes between our early calls to ioremap() that start growing down | ||
123 | * from ioremap_base being run into the VM area allocations (growing upwards | ||
124 | * from VMALLOC_START). For this reason we have ioremap_bot to check when | ||
125 | * we actually run into our mappings setup in the early boot with the VM | ||
126 | * system. This really does become a problem for machines with good amounts | ||
127 | * of RAM. -- Cort | ||
128 | */ | ||
129 | #define VMALLOC_OFFSET (0x1000000) /* 16M */ | ||
130 | #ifdef PPC_PIN_SIZE | ||
131 | #define VMALLOC_START (((_ALIGN((long)high_memory, PPC_PIN_SIZE) + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))) | ||
132 | #else | ||
133 | #define VMALLOC_START ((((long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))) | ||
134 | #endif | ||
135 | #define VMALLOC_END ioremap_bot | ||
136 | |||
137 | /* | ||
138 | * Bits in a linux-style PTE. These match the bits in the | ||
139 | * (hardware-defined) PowerPC PTE as closely as possible. | ||
140 | */ | ||
141 | |||
142 | #if defined(CONFIG_40x) | ||
143 | |||
144 | /* There are several potential gotchas here. The 40x hardware TLBLO | ||
145 | field looks like this: | ||
146 | |||
147 | 0 1 2 3 4 ... 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ||
148 | RPN..................... 0 0 EX WR ZSEL....... W I M G | ||
149 | |||
150 | Where possible we make the Linux PTE bits match up with this | ||
151 | |||
152 | - bits 20 and 21 must be cleared, because we use 4k pages (40x can | ||
153 | support down to 1k pages), this is done in the TLBMiss exception | ||
154 | handler. | ||
155 | - We use only zones 0 (for kernel pages) and 1 (for user pages) | ||
156 | of the 16 available. Bit 24-26 of the TLB are cleared in the TLB | ||
157 | miss handler. Bit 27 is PAGE_USER, thus selecting the correct | ||
158 | zone. | ||
159 | - PRESENT *must* be in the bottom two bits because swap cache | ||
160 | entries use the top 30 bits. Because 40x doesn't support SMP | ||
161 | anyway, M is irrelevant so we borrow it for PAGE_PRESENT. Bit 30 | ||
162 | is cleared in the TLB miss handler before the TLB entry is loaded. | ||
163 | - All other bits of the PTE are loaded into TLBLO without | ||
164 | modification, leaving us only the bits 20, 21, 24, 25, 26, 30 for | ||
165 | software PTE bits. We actually use use bits 21, 24, 25, and | ||
166 | 30 respectively for the software bits: ACCESSED, DIRTY, RW, and | ||
167 | PRESENT. | ||
168 | */ | ||
169 | |||
170 | /* Definitions for 40x embedded chips. */ | ||
171 | #define _PAGE_GUARDED 0x001 /* G: page is guarded from prefetch */ | ||
172 | #define _PAGE_FILE 0x001 /* when !present: nonlinear file mapping */ | ||
173 | #define _PAGE_PRESENT 0x002 /* software: PTE contains a translation */ | ||
174 | #define _PAGE_NO_CACHE 0x004 /* I: caching is inhibited */ | ||
175 | #define _PAGE_WRITETHRU 0x008 /* W: caching is write-through */ | ||
176 | #define _PAGE_USER 0x010 /* matches one of the zone permission bits */ | ||
177 | #define _PAGE_RW 0x040 /* software: Writes permitted */ | ||
178 | #define _PAGE_DIRTY 0x080 /* software: dirty page */ | ||
179 | #define _PAGE_HWWRITE 0x100 /* hardware: Dirty & RW, set in exception */ | ||
180 | #define _PAGE_HWEXEC 0x200 /* hardware: EX permission */ | ||
181 | #define _PAGE_ACCESSED 0x400 /* software: R: page referenced */ | ||
182 | |||
183 | #define _PMD_PRESENT 0x400 /* PMD points to page of PTEs */ | ||
184 | #define _PMD_BAD 0x802 | ||
185 | #define _PMD_SIZE 0x0e0 /* size field, != 0 for large-page PMD entry */ | ||
186 | #define _PMD_SIZE_4M 0x0c0 | ||
187 | #define _PMD_SIZE_16M 0x0e0 | ||
188 | #define PMD_PAGE_SIZE(pmdval) (1024 << (((pmdval) & _PMD_SIZE) >> 4)) | ||
189 | |||
190 | #elif defined(CONFIG_44x) | ||
191 | /* | ||
192 | * Definitions for PPC440 | ||
193 | * | ||
194 | * Because of the 3 word TLB entries to support 36-bit addressing, | ||
195 | * the attribute are difficult to map in such a fashion that they | ||
196 | * are easily loaded during exception processing. I decided to | ||
197 | * organize the entry so the ERPN is the only portion in the | ||
198 | * upper word of the PTE and the attribute bits below are packed | ||
199 | * in as sensibly as they can be in the area below a 4KB page size | ||
200 | * oriented RPN. This at least makes it easy to load the RPN and | ||
201 | * ERPN fields in the TLB. -Matt | ||
202 | * | ||
203 | * Note that these bits preclude future use of a page size | ||
204 | * less than 4KB. | ||
205 | * | ||
206 | * | ||
207 | * PPC 440 core has following TLB attribute fields; | ||
208 | * | ||
209 | * TLB1: | ||
210 | * 0 1 2 3 4 ... 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ||
211 | * RPN................................. - - - - - - ERPN....... | ||
212 | * | ||
213 | * TLB2: | ||
214 | * 0 1 2 3 4 ... 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ||
215 | * - - - - - - U0 U1 U2 U3 W I M G E - UX UW UR SX SW SR | ||
216 | * | ||
217 | * There are some constrains and options, to decide mapping software bits | ||
218 | * into TLB entry. | ||
219 | * | ||
220 | * - PRESENT *must* be in the bottom three bits because swap cache | ||
221 | * entries use the top 29 bits for TLB2. | ||
222 | * | ||
223 | * - FILE *must* be in the bottom three bits because swap cache | ||
224 | * entries use the top 29 bits for TLB2. | ||
225 | * | ||
226 | * - CACHE COHERENT bit (M) has no effect on PPC440 core, because it | ||
227 | * doesn't support SMP. So we can use this as software bit, like | ||
228 | * DIRTY. | ||
229 | * | ||
230 | * With the PPC 44x Linux implementation, the 0-11th LSBs of the PTE are used | ||
231 | * for memory protection related functions (see PTE structure in | ||
232 | * include/asm-ppc/mmu.h). The _PAGE_XXX definitions in this file map to the | ||
233 | * above bits. Note that the bit values are CPU specific, not architecture | ||
234 | * specific. | ||
235 | * | ||
236 | * The kernel PTE entry holds an arch-dependent swp_entry structure under | ||
237 | * certain situations. In other words, in such situations some portion of | ||
238 | * the PTE bits are used as a swp_entry. In the PPC implementation, the | ||
239 | * 3-24th LSB are shared with swp_entry, however the 0-2nd three LSB still | ||
240 | * hold protection values. That means the three protection bits are | ||
241 | * reserved for both PTE and SWAP entry at the most significant three | ||
242 | * LSBs. | ||
243 | * | ||
244 | * There are three protection bits available for SWAP entry: | ||
245 | * _PAGE_PRESENT | ||
246 | * _PAGE_FILE | ||
247 | * _PAGE_HASHPTE (if HW has) | ||
248 | * | ||
249 | * So those three bits have to be inside of 0-2nd LSB of PTE. | ||
250 | * | ||
251 | */ | ||
252 | |||
253 | #define _PAGE_PRESENT 0x00000001 /* S: PTE valid */ | ||
254 | #define _PAGE_RW 0x00000002 /* S: Write permission */ | ||
255 | #define _PAGE_FILE 0x00000004 /* S: nonlinear file mapping */ | ||
256 | #define _PAGE_ACCESSED 0x00000008 /* S: Page referenced */ | ||
257 | #define _PAGE_HWWRITE 0x00000010 /* H: Dirty & RW */ | ||
258 | #define _PAGE_HWEXEC 0x00000020 /* H: Execute permission */ | ||
259 | #define _PAGE_USER 0x00000040 /* S: User page */ | ||
260 | #define _PAGE_ENDIAN 0x00000080 /* H: E bit */ | ||
261 | #define _PAGE_GUARDED 0x00000100 /* H: G bit */ | ||
262 | #define _PAGE_DIRTY 0x00000200 /* S: Page dirty */ | ||
263 | #define _PAGE_NO_CACHE 0x00000400 /* H: I bit */ | ||
264 | #define _PAGE_WRITETHRU 0x00000800 /* H: W bit */ | ||
265 | |||
266 | /* TODO: Add large page lowmem mapping support */ | ||
267 | #define _PMD_PRESENT 0 | ||
268 | #define _PMD_PRESENT_MASK (PAGE_MASK) | ||
269 | #define _PMD_BAD (~PAGE_MASK) | ||
270 | |||
271 | /* ERPN in a PTE never gets cleared, ignore it */ | ||
272 | #define _PTE_NONE_MASK 0xffffffff00000000ULL | ||
273 | |||
274 | #elif defined(CONFIG_8xx) | ||
275 | /* Definitions for 8xx embedded chips. */ | ||
276 | #define _PAGE_PRESENT 0x0001 /* Page is valid */ | ||
277 | #define _PAGE_FILE 0x0002 /* when !present: nonlinear file mapping */ | ||
278 | #define _PAGE_NO_CACHE 0x0002 /* I: cache inhibit */ | ||
279 | #define _PAGE_SHARED 0x0004 /* No ASID (context) compare */ | ||
280 | |||
281 | /* These five software bits must be masked out when the entry is loaded | ||
282 | * into the TLB. | ||
283 | */ | ||
284 | #define _PAGE_EXEC 0x0008 /* software: i-cache coherency required */ | ||
285 | #define _PAGE_GUARDED 0x0010 /* software: guarded access */ | ||
286 | #define _PAGE_DIRTY 0x0020 /* software: page changed */ | ||
287 | #define _PAGE_RW 0x0040 /* software: user write access allowed */ | ||
288 | #define _PAGE_ACCESSED 0x0080 /* software: page referenced */ | ||
289 | |||
290 | /* Setting any bits in the nibble with the follow two controls will | ||
291 | * require a TLB exception handler change. It is assumed unused bits | ||
292 | * are always zero. | ||
293 | */ | ||
294 | #define _PAGE_HWWRITE 0x0100 /* h/w write enable: never set in Linux PTE */ | ||
295 | #define _PAGE_USER 0x0800 /* One of the PP bits, the other is USER&~RW */ | ||
296 | |||
297 | #define _PMD_PRESENT 0x0001 | ||
298 | #define _PMD_BAD 0x0ff0 | ||
299 | #define _PMD_PAGE_MASK 0x000c | ||
300 | #define _PMD_PAGE_8M 0x000c | ||
301 | |||
302 | #define _PTE_NONE_MASK _PAGE_ACCESSED | ||
303 | |||
304 | #else /* CONFIG_6xx */ | ||
305 | /* Definitions for 60x, 740/750, etc. */ | ||
306 | #define _PAGE_PRESENT 0x001 /* software: pte contains a translation */ | ||
307 | #define _PAGE_HASHPTE 0x002 /* hash_page has made an HPTE for this pte */ | ||
308 | #define _PAGE_FILE 0x004 /* when !present: nonlinear file mapping */ | ||
309 | #define _PAGE_USER 0x004 /* usermode access allowed */ | ||
310 | #define _PAGE_GUARDED 0x008 /* G: prohibit speculative access */ | ||
311 | #define _PAGE_COHERENT 0x010 /* M: enforce memory coherence (SMP systems) */ | ||
312 | #define _PAGE_NO_CACHE 0x020 /* I: cache inhibit */ | ||
313 | #define _PAGE_WRITETHRU 0x040 /* W: cache write-through */ | ||
314 | #define _PAGE_DIRTY 0x080 /* C: page changed */ | ||
315 | #define _PAGE_ACCESSED 0x100 /* R: page referenced */ | ||
316 | #define _PAGE_EXEC 0x200 /* software: i-cache coherency required */ | ||
317 | #define _PAGE_RW 0x400 /* software: user write access allowed */ | ||
318 | |||
319 | #define _PTE_NONE_MASK _PAGE_HASHPTE | ||
320 | |||
321 | #define _PMD_PRESENT 0 | ||
322 | #define _PMD_PRESENT_MASK (PAGE_MASK) | ||
323 | #define _PMD_BAD (~PAGE_MASK) | ||
324 | #endif | ||
325 | |||
326 | /* | ||
327 | * Some bits are only used on some cpu families... | ||
328 | */ | ||
329 | #ifndef _PAGE_HASHPTE | ||
330 | #define _PAGE_HASHPTE 0 | ||
331 | #endif | ||
332 | #ifndef _PTE_NONE_MASK | ||
333 | #define _PTE_NONE_MASK 0 | ||
334 | #endif | ||
335 | #ifndef _PAGE_SHARED | ||
336 | #define _PAGE_SHARED 0 | ||
337 | #endif | ||
338 | #ifndef _PAGE_HWWRITE | ||
339 | #define _PAGE_HWWRITE 0 | ||
340 | #endif | ||
341 | #ifndef _PAGE_HWEXEC | ||
342 | #define _PAGE_HWEXEC 0 | ||
343 | #endif | ||
344 | #ifndef _PAGE_EXEC | ||
345 | #define _PAGE_EXEC 0 | ||
346 | #endif | ||
347 | #ifndef _PMD_PRESENT_MASK | ||
348 | #define _PMD_PRESENT_MASK _PMD_PRESENT | ||
349 | #endif | ||
350 | #ifndef _PMD_SIZE | ||
351 | #define _PMD_SIZE 0 | ||
352 | #define PMD_PAGE_SIZE(pmd) bad_call_to_PMD_PAGE_SIZE() | ||
353 | #endif | ||
354 | |||
355 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) | ||
356 | |||
357 | /* | ||
358 | * Note: the _PAGE_COHERENT bit automatically gets set in the hardware | ||
359 | * PTE if CONFIG_SMP is defined (hash_page does this); there is no need | ||
360 | * to have it in the Linux PTE, and in fact the bit could be reused for | ||
361 | * another purpose. -- paulus. | ||
362 | */ | ||
363 | |||
364 | #ifdef CONFIG_44x | ||
365 | #define _PAGE_BASE (_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_GUARDED) | ||
366 | #else | ||
367 | #define _PAGE_BASE (_PAGE_PRESENT | _PAGE_ACCESSED) | ||
368 | #endif | ||
369 | #define _PAGE_WRENABLE (_PAGE_RW | _PAGE_DIRTY | _PAGE_HWWRITE) | ||
370 | #define _PAGE_KERNEL (_PAGE_BASE | _PAGE_SHARED | _PAGE_WRENABLE) | ||
371 | |||
372 | #ifdef CONFIG_PPC_STD_MMU | ||
373 | /* On standard PPC MMU, no user access implies kernel read/write access, | ||
374 | * so to write-protect kernel memory we must turn on user access */ | ||
375 | #define _PAGE_KERNEL_RO (_PAGE_BASE | _PAGE_SHARED | _PAGE_USER) | ||
376 | #else | ||
377 | #define _PAGE_KERNEL_RO (_PAGE_BASE | _PAGE_SHARED) | ||
378 | #endif | ||
379 | |||
380 | #define _PAGE_IO (_PAGE_KERNEL | _PAGE_NO_CACHE | _PAGE_GUARDED) | ||
381 | #define _PAGE_RAM (_PAGE_KERNEL | _PAGE_HWEXEC) | ||
382 | |||
383 | #if defined(CONFIG_KGDB) || defined(CONFIG_XMON) || defined(CONFIG_BDI_SWITCH) | ||
384 | /* We want the debuggers to be able to set breakpoints anywhere, so | ||
385 | * don't write protect the kernel text */ | ||
386 | #define _PAGE_RAM_TEXT _PAGE_RAM | ||
387 | #else | ||
388 | #define _PAGE_RAM_TEXT (_PAGE_KERNEL_RO | _PAGE_HWEXEC) | ||
389 | #endif | ||
390 | |||
391 | #define PAGE_NONE __pgprot(_PAGE_BASE) | ||
392 | #define PAGE_READONLY __pgprot(_PAGE_BASE | _PAGE_USER) | ||
393 | #define PAGE_READONLY_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_EXEC) | ||
394 | #define PAGE_SHARED __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RW) | ||
395 | #define PAGE_SHARED_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RW | _PAGE_EXEC) | ||
396 | #define PAGE_COPY __pgprot(_PAGE_BASE | _PAGE_USER) | ||
397 | #define PAGE_COPY_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_EXEC) | ||
398 | |||
399 | #define PAGE_KERNEL __pgprot(_PAGE_RAM) | ||
400 | #define PAGE_KERNEL_NOCACHE __pgprot(_PAGE_IO) | ||
401 | |||
402 | /* | ||
403 | * The PowerPC can only do execute protection on a segment (256MB) basis, | ||
404 | * not on a page basis. So we consider execute permission the same as read. | ||
405 | * Also, write permissions imply read permissions. | ||
406 | * This is the closest we can get.. | ||
407 | */ | ||
408 | #define __P000 PAGE_NONE | ||
409 | #define __P001 PAGE_READONLY_X | ||
410 | #define __P010 PAGE_COPY | ||
411 | #define __P011 PAGE_COPY_X | ||
412 | #define __P100 PAGE_READONLY | ||
413 | #define __P101 PAGE_READONLY_X | ||
414 | #define __P110 PAGE_COPY | ||
415 | #define __P111 PAGE_COPY_X | ||
416 | |||
417 | #define __S000 PAGE_NONE | ||
418 | #define __S001 PAGE_READONLY_X | ||
419 | #define __S010 PAGE_SHARED | ||
420 | #define __S011 PAGE_SHARED_X | ||
421 | #define __S100 PAGE_READONLY | ||
422 | #define __S101 PAGE_READONLY_X | ||
423 | #define __S110 PAGE_SHARED | ||
424 | #define __S111 PAGE_SHARED_X | ||
425 | |||
426 | #ifndef __ASSEMBLY__ | ||
427 | /* Make sure we get a link error if PMD_PAGE_SIZE is ever called on a | ||
428 | * kernel without large page PMD support */ | ||
429 | extern unsigned long bad_call_to_PMD_PAGE_SIZE(void); | ||
430 | |||
431 | /* | ||
432 | * Conversions between PTE values and page frame numbers. | ||
433 | */ | ||
434 | |||
435 | /* in some case we want to additionaly adjust where the pfn is in the pte to | ||
436 | * allow room for more flags */ | ||
437 | #define PFN_SHIFT_OFFSET (PAGE_SHIFT) | ||
438 | |||
439 | #define pte_pfn(x) (pte_val(x) >> PFN_SHIFT_OFFSET) | ||
440 | #define pte_page(x) pfn_to_page(pte_pfn(x)) | ||
441 | |||
442 | #define pfn_pte(pfn, prot) __pte(((pte_basic_t)(pfn) << PFN_SHIFT_OFFSET) |\ | ||
443 | pgprot_val(prot)) | ||
444 | #define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot) | ||
445 | |||
446 | /* | ||
447 | * ZERO_PAGE is a global shared page that is always zero: used | ||
448 | * for zero-mapped memory areas etc.. | ||
449 | */ | ||
450 | extern unsigned long empty_zero_page[1024]; | ||
451 | #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) | ||
452 | |||
453 | #endif /* __ASSEMBLY__ */ | ||
454 | |||
455 | #define pte_none(pte) ((pte_val(pte) & ~_PTE_NONE_MASK) == 0) | ||
456 | #define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT) | ||
457 | #define pte_clear(mm,addr,ptep) do { set_pte_at((mm), (addr), (ptep), __pte(0)); } while (0) | ||
458 | |||
459 | #define pmd_none(pmd) (!pmd_val(pmd)) | ||
460 | #define pmd_bad(pmd) (pmd_val(pmd) & _PMD_BAD) | ||
461 | #define pmd_present(pmd) (pmd_val(pmd) & _PMD_PRESENT_MASK) | ||
462 | #define pmd_clear(pmdp) do { pmd_val(*(pmdp)) = 0; } while (0) | ||
463 | |||
464 | #ifndef __ASSEMBLY__ | ||
465 | /* | ||
466 | * The "pgd_xxx()" functions here are trivial for a folded two-level | ||
467 | * setup: the pgd is never bad, and a pmd always exists (as it's folded | ||
468 | * into the pgd entry) | ||
469 | */ | ||
470 | static inline int pgd_none(pgd_t pgd) { return 0; } | ||
471 | static inline int pgd_bad(pgd_t pgd) { return 0; } | ||
472 | static inline int pgd_present(pgd_t pgd) { return 1; } | ||
473 | #define pgd_clear(xp) do { } while (0) | ||
474 | |||
475 | #define pgd_page_vaddr(pgd) \ | ||
476 | ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) | ||
477 | |||
478 | /* | ||
479 | * The following only work if pte_present() is true. | ||
480 | * Undefined behaviour if not.. | ||
481 | */ | ||
482 | 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; } | ||
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; } | ||
486 | static inline int pte_special(pte_t pte) { return 0; } | ||
487 | |||
488 | static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } | ||
489 | static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } | ||
490 | |||
491 | static inline pte_t pte_wrprotect(pte_t pte) { | ||
492 | pte_val(pte) &= ~(_PAGE_RW | _PAGE_HWWRITE); return pte; } | ||
493 | static inline pte_t pte_mkclean(pte_t pte) { | ||
494 | pte_val(pte) &= ~(_PAGE_DIRTY | _PAGE_HWWRITE); return pte; } | ||
495 | static inline pte_t pte_mkold(pte_t pte) { | ||
496 | pte_val(pte) &= ~_PAGE_ACCESSED; return pte; } | ||
497 | |||
498 | static inline pte_t pte_mkwrite(pte_t pte) { | ||
499 | pte_val(pte) |= _PAGE_RW; return pte; } | ||
500 | static inline pte_t pte_mkdirty(pte_t pte) { | ||
501 | pte_val(pte) |= _PAGE_DIRTY; return pte; } | ||
502 | static inline pte_t pte_mkyoung(pte_t pte) { | ||
503 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } | ||
504 | static inline pte_t pte_mkspecial(pte_t pte) { | ||
505 | return pte; } | ||
506 | |||
507 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | ||
508 | { | ||
509 | pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot); | ||
510 | return pte; | ||
511 | } | ||
512 | |||
513 | /* | ||
514 | * When flushing the tlb entry for a page, we also need to flush the hash | ||
515 | * table entry. flush_hash_pages is assembler (for speed) in hashtable.S. | ||
516 | */ | ||
517 | extern int flush_hash_pages(unsigned context, unsigned long va, | ||
518 | unsigned long pmdval, int count); | ||
519 | |||
520 | /* Add an HPTE to the hash table */ | ||
521 | extern void add_hash_page(unsigned context, unsigned long va, | ||
522 | unsigned long pmdval); | ||
523 | |||
524 | /* | ||
525 | * Atomic PTE updates. | ||
526 | * | ||
527 | * pte_update clears and sets bit atomically, and returns | ||
528 | * the old pte value. In the 64-bit PTE case we lock around the | ||
529 | * low PTE word since we expect ALL flag bits to be there | ||
530 | */ | ||
531 | #ifndef CONFIG_PTE_64BIT | ||
532 | static inline unsigned long pte_update(pte_t *p, unsigned long clr, | ||
533 | unsigned long set) | ||
534 | { | ||
535 | unsigned long old, tmp; | ||
536 | |||
537 | __asm__ __volatile__("\ | ||
538 | 1: lwarx %0,0,%3\n\ | ||
539 | andc %1,%0,%4\n\ | ||
540 | or %1,%1,%5\n" | ||
541 | PPC405_ERR77(0,%3) | ||
542 | " stwcx. %1,0,%3\n\ | ||
543 | bne- 1b" | ||
544 | : "=&r" (old), "=&r" (tmp), "=m" (*p) | ||
545 | : "r" (p), "r" (clr), "r" (set), "m" (*p) | ||
546 | : "cc" ); | ||
547 | return old; | ||
548 | } | ||
549 | #else | ||
550 | static inline unsigned long long pte_update(pte_t *p, unsigned long clr, | ||
551 | unsigned long set) | ||
552 | { | ||
553 | unsigned long long old; | ||
554 | unsigned long tmp; | ||
555 | |||
556 | __asm__ __volatile__("\ | ||
557 | 1: lwarx %L0,0,%4\n\ | ||
558 | lwzx %0,0,%3\n\ | ||
559 | andc %1,%L0,%5\n\ | ||
560 | or %1,%1,%6\n" | ||
561 | PPC405_ERR77(0,%3) | ||
562 | " stwcx. %1,0,%4\n\ | ||
563 | bne- 1b" | ||
564 | : "=&r" (old), "=&r" (tmp), "=m" (*p) | ||
565 | : "r" (p), "r" ((unsigned long)(p) + 4), "r" (clr), "r" (set), "m" (*p) | ||
566 | : "cc" ); | ||
567 | return old; | ||
568 | } | ||
569 | #endif | ||
570 | |||
571 | /* | ||
572 | * set_pte stores a linux PTE into the linux page table. | ||
573 | * On machines which use an MMU hash table we avoid changing the | ||
574 | * _PAGE_HASHPTE bit. | ||
575 | */ | ||
576 | static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, | ||
577 | pte_t *ptep, pte_t pte) | ||
578 | { | ||
579 | #if _PAGE_HASHPTE != 0 | ||
580 | pte_update(ptep, ~_PAGE_HASHPTE, pte_val(pte) & ~_PAGE_HASHPTE); | ||
581 | #else | ||
582 | *ptep = pte; | ||
583 | #endif | ||
584 | } | ||
585 | |||
586 | /* | ||
587 | * 2.6 calles this without flushing the TLB entry, this is wrong | ||
588 | * for our hash-based implementation, we fix that up here | ||
589 | */ | ||
590 | #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG | ||
591 | static inline int __ptep_test_and_clear_young(unsigned int context, unsigned long addr, pte_t *ptep) | ||
592 | { | ||
593 | unsigned long old; | ||
594 | old = pte_update(ptep, _PAGE_ACCESSED, 0); | ||
595 | #if _PAGE_HASHPTE != 0 | ||
596 | if (old & _PAGE_HASHPTE) { | ||
597 | unsigned long ptephys = __pa(ptep) & PAGE_MASK; | ||
598 | flush_hash_pages(context, addr, ptephys, 1); | ||
599 | } | ||
600 | #endif | ||
601 | return (old & _PAGE_ACCESSED) != 0; | ||
602 | } | ||
603 | #define ptep_test_and_clear_young(__vma, __addr, __ptep) \ | ||
604 | __ptep_test_and_clear_young((__vma)->vm_mm->context.id, __addr, __ptep) | ||
605 | |||
606 | #define __HAVE_ARCH_PTEP_GET_AND_CLEAR | ||
607 | static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, | ||
608 | pte_t *ptep) | ||
609 | { | ||
610 | return __pte(pte_update(ptep, ~_PAGE_HASHPTE, 0)); | ||
611 | } | ||
612 | |||
613 | #define __HAVE_ARCH_PTEP_SET_WRPROTECT | ||
614 | static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, | ||
615 | pte_t *ptep) | ||
616 | { | ||
617 | pte_update(ptep, (_PAGE_RW | _PAGE_HWWRITE), 0); | ||
618 | } | ||
619 | |||
620 | #define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS | ||
621 | static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry, int dirty) | ||
622 | { | ||
623 | unsigned long bits = pte_val(entry) & | ||
624 | (_PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_RW); | ||
625 | pte_update(ptep, 0, bits); | ||
626 | } | ||
627 | |||
628 | #define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \ | ||
629 | ({ \ | ||
630 | int __changed = !pte_same(*(__ptep), __entry); \ | ||
631 | if (__changed) { \ | ||
632 | __ptep_set_access_flags(__ptep, __entry, __dirty); \ | ||
633 | flush_tlb_page_nohash(__vma, __address); \ | ||
634 | } \ | ||
635 | __changed; \ | ||
636 | }) | ||
637 | |||
638 | /* | ||
639 | * Macro to mark a page protection value as "uncacheable". | ||
640 | */ | ||
641 | #define pgprot_noncached(prot) (__pgprot(pgprot_val(prot) | _PAGE_NO_CACHE | _PAGE_GUARDED)) | ||
642 | |||
643 | struct file; | ||
644 | extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, | ||
645 | unsigned long size, pgprot_t vma_prot); | ||
646 | #define __HAVE_PHYS_MEM_ACCESS_PROT | ||
647 | |||
648 | #define __HAVE_ARCH_PTE_SAME | ||
649 | #define pte_same(A,B) (((pte_val(A) ^ pte_val(B)) & ~_PAGE_HASHPTE) == 0) | ||
650 | |||
651 | /* | ||
652 | * Note that on Book E processors, the pmd contains the kernel virtual | ||
653 | * (lowmem) address of the pte page. The physical address is less useful | ||
654 | * because everything runs with translation enabled (even the TLB miss | ||
655 | * handler). On everything else the pmd contains the physical address | ||
656 | * of the pte page. -- paulus | ||
657 | */ | ||
658 | #ifndef CONFIG_BOOKE | ||
659 | #define pmd_page_vaddr(pmd) \ | ||
660 | ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) | ||
661 | #define pmd_page(pmd) \ | ||
662 | (mem_map + (pmd_val(pmd) >> PAGE_SHIFT)) | ||
663 | #else | ||
664 | #define pmd_page_vaddr(pmd) \ | ||
665 | ((unsigned long) (pmd_val(pmd) & PAGE_MASK)) | ||
666 | #define pmd_page(pmd) \ | ||
667 | (mem_map + (__pa(pmd_val(pmd)) >> PAGE_SHIFT)) | ||
668 | #endif | ||
669 | |||
670 | /* to find an entry in a kernel page-table-directory */ | ||
671 | #define pgd_offset_k(address) pgd_offset(&init_mm, address) | ||
672 | |||
673 | /* to find an entry in a page-table-directory */ | ||
674 | #define pgd_index(address) ((address) >> PGDIR_SHIFT) | ||
675 | #define pgd_offset(mm, address) ((mm)->pgd + pgd_index(address)) | ||
676 | |||
677 | /* Find an entry in the second-level page table.. */ | ||
678 | static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) | ||
679 | { | ||
680 | return (pmd_t *) dir; | ||
681 | } | ||
682 | |||
683 | /* Find an entry in the third-level page table.. */ | ||
684 | #define pte_index(address) \ | ||
685 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) | ||
686 | #define pte_offset_kernel(dir, addr) \ | ||
687 | ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(addr)) | ||
688 | #define pte_offset_map(dir, addr) \ | ||
689 | ((pte_t *) kmap_atomic(pmd_page(*(dir)), KM_PTE0) + pte_index(addr)) | ||
690 | #define pte_offset_map_nested(dir, addr) \ | ||
691 | ((pte_t *) kmap_atomic(pmd_page(*(dir)), KM_PTE1) + pte_index(addr)) | ||
692 | |||
693 | #define pte_unmap(pte) kunmap_atomic(pte, KM_PTE0) | ||
694 | #define pte_unmap_nested(pte) kunmap_atomic(pte, KM_PTE1) | ||
695 | |||
696 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; | ||
697 | |||
698 | extern void paging_init(void); | ||
699 | |||
700 | /* | ||
701 | * Encode and decode a swap entry. | ||
702 | * Note that the bits we use in a PTE for representing a swap entry | ||
703 | * must not include the _PAGE_PRESENT bit, the _PAGE_FILE bit, or the | ||
704 | *_PAGE_HASHPTE bit (if used). -- paulus | ||
705 | */ | ||
706 | #define __swp_type(entry) ((entry).val & 0x1f) | ||
707 | #define __swp_offset(entry) ((entry).val >> 5) | ||
708 | #define __swp_entry(type, offset) ((swp_entry_t) { (type) | ((offset) << 5) }) | ||
709 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 3 }) | ||
710 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val << 3 }) | ||
711 | |||
712 | /* Encode and decode a nonlinear file mapping entry */ | ||
713 | #define PTE_FILE_MAX_BITS 29 | ||
714 | #define pte_to_pgoff(pte) (pte_val(pte) >> 3) | ||
715 | #define pgoff_to_pte(off) ((pte_t) { ((off) << 3) | _PAGE_FILE }) | ||
716 | |||
717 | /* Values for nocacheflag and cmode */ | ||
718 | /* These are not used by the APUS kernel_map, but prevents | ||
719 | compilation errors. */ | ||
720 | #define KERNELMAP_FULL_CACHING 0 | ||
721 | #define KERNELMAP_NOCACHE_SER 1 | ||
722 | #define KERNELMAP_NOCACHE_NONSER 2 | ||
723 | #define KERNELMAP_NO_COPYBACK 3 | ||
724 | |||
725 | /* | ||
726 | * Map some physical address range into the kernel address space. | ||
727 | */ | ||
728 | extern unsigned long kernel_map(unsigned long paddr, unsigned long size, | ||
729 | int nocacheflag, unsigned long *memavailp ); | ||
730 | |||
731 | /* | ||
732 | * Set cache mode of (kernel space) address range. | ||
733 | */ | ||
734 | extern void kernel_set_cachemode (unsigned long address, unsigned long size, | ||
735 | unsigned int cmode); | ||
736 | |||
737 | /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ | ||
738 | #define kern_addr_valid(addr) (1) | ||
739 | |||
740 | #ifdef CONFIG_PHYS_64BIT | ||
741 | extern int remap_pfn_range(struct vm_area_struct *vma, unsigned long from, | ||
742 | unsigned long paddr, unsigned long size, pgprot_t prot); | ||
743 | |||
744 | static inline int io_remap_pfn_range(struct vm_area_struct *vma, | ||
745 | unsigned long vaddr, | ||
746 | unsigned long pfn, | ||
747 | unsigned long size, | ||
748 | pgprot_t prot) | ||
749 | { | ||
750 | phys_addr_t paddr64 = fixup_bigphys_addr(pfn << PAGE_SHIFT, size); | ||
751 | return remap_pfn_range(vma, vaddr, paddr64 >> PAGE_SHIFT, size, prot); | ||
752 | } | ||
753 | #else | ||
754 | #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ | ||
755 | remap_pfn_range(vma, vaddr, pfn, size, prot) | ||
756 | #endif | ||
757 | |||
758 | /* | ||
759 | * No page table caches to initialise | ||
760 | */ | ||
761 | #define pgtable_cache_init() do { } while (0) | ||
762 | |||
763 | extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep, | ||
764 | pmd_t **pmdp); | ||
765 | |||
766 | #include <asm-generic/pgtable.h> | ||
767 | |||
768 | #endif /* !__ASSEMBLY__ */ | ||
769 | |||
770 | #endif /* _PPC_PGTABLE_H */ | ||
771 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/pnp.h b/include/asm-ppc/pnp.h deleted file mode 100644 index 6f6760b30dd8..000000000000 --- a/include/asm-ppc/pnp.h +++ /dev/null | |||
@@ -1,645 +0,0 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | /* 11/02/95 */ | ||
3 | /*----------------------------------------------------------------------------*/ | ||
4 | /* Plug and Play header definitions */ | ||
5 | /*----------------------------------------------------------------------------*/ | ||
6 | |||
7 | /* Structure map for PnP on PowerPC Reference Platform */ | ||
8 | /* See Plug and Play ISA Specification, Version 1.0, May 28, 1993. It */ | ||
9 | /* (or later versions) is available on Compuserve in the PLUGPLAY area. */ | ||
10 | /* This code has extensions to that specification, namely new short and */ | ||
11 | /* long tag types for platform dependent information */ | ||
12 | |||
13 | /* Warning: LE notation used throughout this file */ | ||
14 | |||
15 | /* For enum's: if given in hex then they are bit significant, i.e. */ | ||
16 | /* only one bit is on for each enum */ | ||
17 | |||
18 | #ifndef _PNP_ | ||
19 | #define _PNP_ | ||
20 | |||
21 | #ifndef __ASSEMBLY__ | ||
22 | #define MAX_MEM_REGISTERS 9 | ||
23 | #define MAX_IO_PORTS 20 | ||
24 | #define MAX_IRQS 7 | ||
25 | /*#define MAX_DMA_CHANNELS 7*/ | ||
26 | |||
27 | /* Interrupt controllers */ | ||
28 | |||
29 | #define PNPinterrupt0 "PNP0000" /* AT Interrupt Controller */ | ||
30 | #define PNPinterrupt1 "PNP0001" /* EISA Interrupt Controller */ | ||
31 | #define PNPinterrupt2 "PNP0002" /* MCA Interrupt Controller */ | ||
32 | #define PNPinterrupt3 "PNP0003" /* APIC */ | ||
33 | #define PNPExtInt "IBM000D" /* PowerPC Extended Interrupt Controller */ | ||
34 | |||
35 | /* Timers */ | ||
36 | |||
37 | #define PNPtimer0 "PNP0100" /* AT Timer */ | ||
38 | #define PNPtimer1 "PNP0101" /* EISA Timer */ | ||
39 | #define PNPtimer2 "PNP0102" /* MCA Timer */ | ||
40 | |||
41 | /* DMA controllers */ | ||
42 | |||
43 | #define PNPdma0 "PNP0200" /* AT DMA Controller */ | ||
44 | #define PNPdma1 "PNP0201" /* EISA DMA Controller */ | ||
45 | #define PNPdma2 "PNP0202" /* MCA DMA Controller */ | ||
46 | |||
47 | /* start of August 15, 1994 additions */ | ||
48 | /* CMOS */ | ||
49 | #define PNPCMOS "IBM0009" /* CMOS */ | ||
50 | |||
51 | /* L2 Cache */ | ||
52 | #define PNPL2 "IBM0007" /* L2 Cache */ | ||
53 | |||
54 | /* NVRAM */ | ||
55 | #define PNPNVRAM "IBM0008" /* NVRAM */ | ||
56 | |||
57 | /* Power Management */ | ||
58 | #define PNPPM "IBM0005" /* Power Management */ | ||
59 | /* end of August 15, 1994 additions */ | ||
60 | |||
61 | /* Keyboards */ | ||
62 | |||
63 | #define PNPkeyboard0 "PNP0300" /* IBM PC/XT KB Cntlr (83 key, no mouse) */ | ||
64 | #define PNPkeyboard1 "PNP0301" /* Olivetti ICO (102 key) */ | ||
65 | #define PNPkeyboard2 "PNP0302" /* IBM PC/AT KB Cntlr (84 key) */ | ||
66 | #define PNPkeyboard3 "PNP0303" /* IBM Enhanced (101/2 key, PS/2 mouse) */ | ||
67 | #define PNPkeyboard4 "PNP0304" /* Nokia 1050 KB Cntlr */ | ||
68 | #define PNPkeyboard5 "PNP0305" /* Nokia 9140 KB Cntlr */ | ||
69 | #define PNPkeyboard6 "PNP0306" /* Standard Japanese KB Cntlr */ | ||
70 | #define PNPkeyboard7 "PNP0307" /* Microsoft Windows (R) KB Cntlr */ | ||
71 | |||
72 | /* Parallel port controllers */ | ||
73 | |||
74 | #define PNPparallel0 "PNP0400" /* Standard LPT Parallel Port */ | ||
75 | #define PNPparallel1 "PNP0401" /* ECP Parallel Port */ | ||
76 | #define PNPepp "IBM001C" /* EPP Parallel Port */ | ||
77 | |||
78 | /* Serial port controllers */ | ||
79 | |||
80 | #define PNPserial0 "PNP0500" /* Standard PC Serial port */ | ||
81 | #define PNPSerial1 "PNP0501" /* 16550A Compatible Serial port */ | ||
82 | |||
83 | /* Disk controllers */ | ||
84 | |||
85 | #define PNPdisk0 "PNP0600" /* Generic ESDI/IDE/ATA Compat HD Cntlr */ | ||
86 | #define PNPdisk1 "PNP0601" /* Plus Hardcard II */ | ||
87 | #define PNPdisk2 "PNP0602" /* Plus Hardcard IIXL/EZ */ | ||
88 | |||
89 | /* Diskette controllers */ | ||
90 | |||
91 | #define PNPdiskette0 "PNP0700" /* PC Standard Floppy Disk Controller */ | ||
92 | |||
93 | /* Display controllers */ | ||
94 | |||
95 | #define PNPdisplay0 "PNP0900" /* VGA Compatible */ | ||
96 | #define PNPdisplay1 "PNP0901" /* Video Seven VGA */ | ||
97 | #define PNPdisplay2 "PNP0902" /* 8514/A Compatible */ | ||
98 | #define PNPdisplay3 "PNP0903" /* Trident VGA */ | ||
99 | #define PNPdisplay4 "PNP0904" /* Cirrus Logic Laptop VGA */ | ||
100 | #define PNPdisplay5 "PNP0905" /* Cirrus Logic VGA */ | ||
101 | #define PNPdisplay6 "PNP0906" /* Tseng ET4000 or ET4000/W32 */ | ||
102 | #define PNPdisplay7 "PNP0907" /* Western Digital VGA */ | ||
103 | #define PNPdisplay8 "PNP0908" /* Western Digital Laptop VGA */ | ||
104 | #define PNPdisplay9 "PNP0909" /* S3 */ | ||
105 | #define PNPdisplayA "PNP090A" /* ATI Ultra Pro/Plus (Mach 32) */ | ||
106 | #define PNPdisplayB "PNP090B" /* ATI Ultra (Mach 8) */ | ||
107 | #define PNPdisplayC "PNP090C" /* XGA Compatible */ | ||
108 | #define PNPdisplayD "PNP090D" /* ATI VGA Wonder */ | ||
109 | #define PNPdisplayE "PNP090E" /* Weitek P9000 Graphics Adapter */ | ||
110 | #define PNPdisplayF "PNP090F" /* Oak Technology VGA */ | ||
111 | |||
112 | /* Peripheral busses */ | ||
113 | |||
114 | #define PNPbuses0 "PNP0A00" /* ISA Bus */ | ||
115 | #define PNPbuses1 "PNP0A01" /* EISA Bus */ | ||
116 | #define PNPbuses2 "PNP0A02" /* MCA Bus */ | ||
117 | #define PNPbuses3 "PNP0A03" /* PCI Bus */ | ||
118 | #define PNPbuses4 "PNP0A04" /* VESA/VL Bus */ | ||
119 | |||
120 | /* RTC, BIOS, planar devices */ | ||
121 | |||
122 | #define PNPspeaker0 "PNP0800" /* AT Style Speaker Sound */ | ||
123 | #define PNPrtc0 "PNP0B00" /* AT RTC */ | ||
124 | #define PNPpnpbios0 "PNP0C00" /* PNP BIOS (only created by root enum) */ | ||
125 | #define PNPpnpbios1 "PNP0C01" /* System Board Memory Device */ | ||
126 | #define PNPpnpbios2 "PNP0C02" /* Math Coprocessor */ | ||
127 | #define PNPpnpbios3 "PNP0C03" /* PNP BIOS Event Notification Interrupt */ | ||
128 | |||
129 | /* PCMCIA controller */ | ||
130 | |||
131 | #define PNPpcmcia0 "PNP0E00" /* Intel 82365 Compatible PCMCIA Cntlr */ | ||
132 | |||
133 | /* Mice */ | ||
134 | |||
135 | #define PNPmouse0 "PNP0F00" /* Microsoft Bus Mouse */ | ||
136 | #define PNPmouse1 "PNP0F01" /* Microsoft Serial Mouse */ | ||
137 | #define PNPmouse2 "PNP0F02" /* Microsoft Inport Mouse */ | ||
138 | #define PNPmouse3 "PNP0F03" /* Microsoft PS/2 Mouse */ | ||
139 | #define PNPmouse4 "PNP0F04" /* Mousesystems Mouse */ | ||
140 | #define PNPmouse5 "PNP0F05" /* Mousesystems 3 Button Mouse - COM2 */ | ||
141 | #define PNPmouse6 "PNP0F06" /* Genius Mouse - COM1 */ | ||
142 | #define PNPmouse7 "PNP0F07" /* Genius Mouse - COM2 */ | ||
143 | #define PNPmouse8 "PNP0F08" /* Logitech Serial Mouse */ | ||
144 | #define PNPmouse9 "PNP0F09" /* Microsoft Ballpoint Serial Mouse */ | ||
145 | #define PNPmouseA "PNP0F0A" /* Microsoft PNP Mouse */ | ||
146 | #define PNPmouseB "PNP0F0B" /* Microsoft PNP Ballpoint Mouse */ | ||
147 | |||
148 | /* Modems */ | ||
149 | |||
150 | #define PNPmodem0 "PNP9000" /* Specific IDs TBD */ | ||
151 | |||
152 | /* Network controllers */ | ||
153 | |||
154 | #define PNPnetworkC9 "PNP80C9" /* IBM Token Ring */ | ||
155 | #define PNPnetworkCA "PNP80CA" /* IBM Token Ring II */ | ||
156 | #define PNPnetworkCB "PNP80CB" /* IBM Token Ring II/Short */ | ||
157 | #define PNPnetworkCC "PNP80CC" /* IBM Token Ring 4/16Mbs */ | ||
158 | #define PNPnetwork27 "PNP8327" /* IBM Token Ring (All types) */ | ||
159 | #define PNPnetworket "IBM0010" /* IBM Ethernet used by Power PC */ | ||
160 | #define PNPneteisaet "IBM2001" /* IBM Ethernet EISA adapter */ | ||
161 | #define PNPAMD79C970 "IBM0016" /* AMD 79C970 (PCI Ethernet) */ | ||
162 | |||
163 | /* SCSI controllers */ | ||
164 | |||
165 | #define PNPscsi0 "PNPA000" /* Adaptec 154x Compatible SCSI Cntlr */ | ||
166 | #define PNPscsi1 "PNPA001" /* Adaptec 174x Compatible SCSI Cntlr */ | ||
167 | #define PNPscsi2 "PNPA002" /* Future Domain 16-700 Compat SCSI Cntlr*/ | ||
168 | #define PNPscsi3 "PNPA003" /* Panasonic CDROM Adapter (SBPro/SB16) */ | ||
169 | #define PNPscsiF "IBM000F" /* NCR 810 SCSI Controller */ | ||
170 | #define PNPscsi825 "IBM001B" /* NCR 825 SCSI Controller */ | ||
171 | #define PNPscsi875 "IBM0018" /* NCR 875 SCSI Controller */ | ||
172 | |||
173 | /* Sound/Video, Multimedia */ | ||
174 | |||
175 | #define PNPmm0 "PNPB000" /* Sound Blaster Compatible Sound Device */ | ||
176 | #define PNPmm1 "PNPB001" /* MS Windows Sound System Compat Device */ | ||
177 | #define PNPmmF "IBM000E" /* Crystal CS4231 Audio Device */ | ||
178 | #define PNPv7310 "IBM0015" /* ASCII V7310 Video Capture Device */ | ||
179 | #define PNPmm4232 "IBM0017" /* Crystal CS4232 Audio Device */ | ||
180 | #define PNPpmsyn "IBM001D" /* YMF 289B chip (Yamaha) */ | ||
181 | #define PNPgp4232 "IBM0012" /* Crystal CS4232 Game Port */ | ||
182 | #define PNPmidi4232 "IBM0013" /* Crystal CS4232 MIDI */ | ||
183 | |||
184 | /* Operator Panel */ | ||
185 | #define PNPopctl "IBM000B" /* Operator's panel */ | ||
186 | |||
187 | /* Service Processor */ | ||
188 | #define PNPsp "IBM0011" /* IBM Service Processor */ | ||
189 | #define PNPLTsp "IBM001E" /* Lightning/Terlingua Support Processor */ | ||
190 | #define PNPLTmsp "IBM001F" /* Lightning/Terlingua Mini-SP */ | ||
191 | |||
192 | /* Memory Controller */ | ||
193 | #define PNPmemctl "IBM000A" /* Memory controller */ | ||
194 | |||
195 | /* Graphics Assist */ | ||
196 | #define PNPg_assist "IBM0014" /* Graphics Assist */ | ||
197 | |||
198 | /* Miscellaneous Device Controllers */ | ||
199 | #define PNPtablet "IBM0019" /* IBM Tablet Controller */ | ||
200 | |||
201 | /* PNP Packet Handles */ | ||
202 | |||
203 | #define S1_Packet 0x0A /* Version resource */ | ||
204 | #define S2_Packet 0x15 /* Logical DEVID (without flags) */ | ||
205 | #define S2_Packet_flags 0x16 /* Logical DEVID (with flags) */ | ||
206 | #define S3_Packet 0x1C /* Compatible device ID */ | ||
207 | #define S4_Packet 0x22 /* IRQ resource (without flags) */ | ||
208 | #define S4_Packet_flags 0x23 /* IRQ resource (with flags) */ | ||
209 | #define S5_Packet 0x2A /* DMA resource */ | ||
210 | #define S6_Packet 0x30 /* Depend funct start (w/o priority) */ | ||
211 | #define S6_Packet_priority 0x31 /* Depend funct start (w/ priority) */ | ||
212 | #define S7_Packet 0x38 /* Depend funct end */ | ||
213 | #define S8_Packet 0x47 /* I/O port resource (w/o fixed loc) */ | ||
214 | #define S9_Packet_fixed 0x4B /* I/O port resource (w/ fixed loc) */ | ||
215 | #define S14_Packet 0x71 /* Vendor defined */ | ||
216 | #define S15_Packet 0x78 /* End of resource (w/o checksum) */ | ||
217 | #define S15_Packet_checksum 0x79 /* End of resource (w/ checksum) */ | ||
218 | #define L1_Packet 0x81 /* Memory range */ | ||
219 | #define L1_Shadow 0x20 /* Memory is shadowable */ | ||
220 | #define L1_32bit_mem 0x18 /* 32-bit memory only */ | ||
221 | #define L1_8_16bit_mem 0x10 /* 8- and 16-bit supported */ | ||
222 | #define L1_Decode_Hi 0x04 /* decode supports high address */ | ||
223 | #define L1_Cache 0x02 /* read cacheable, write-through */ | ||
224 | #define L1_Writeable 0x01 /* Memory is writeable */ | ||
225 | #define L2_Packet 0x82 /* ANSI ID string */ | ||
226 | #define L3_Packet 0x83 /* Unicode ID string */ | ||
227 | #define L4_Packet 0x84 /* Vendor defined */ | ||
228 | #define L5_Packet 0x85 /* Large I/O */ | ||
229 | #define L6_Packet 0x86 /* 32-bit Fixed Loc Mem Range Desc */ | ||
230 | #define END_TAG 0x78 /* End of resource */ | ||
231 | #define DF_START_TAG 0x30 /* Dependent function start */ | ||
232 | #define DF_START_TAG_priority 0x31 /* Dependent function start */ | ||
233 | #define DF_END_TAG 0x38 /* Dependent function end */ | ||
234 | #define SUBOPTIMAL_CONFIGURATION 0x2 /* Priority byte sub optimal config */ | ||
235 | |||
236 | /* Device Base Type Codes */ | ||
237 | |||
238 | typedef enum _PnP_BASE_TYPE { | ||
239 | Reserved = 0, | ||
240 | MassStorageDevice = 1, | ||
241 | NetworkInterfaceController = 2, | ||
242 | DisplayController = 3, | ||
243 | MultimediaController = 4, | ||
244 | MemoryController = 5, | ||
245 | BridgeController = 6, | ||
246 | CommunicationsDevice = 7, | ||
247 | SystemPeripheral = 8, | ||
248 | InputDevice = 9, | ||
249 | ServiceProcessor = 0x0A, /* 11/2/95 */ | ||
250 | } PnP_BASE_TYPE; | ||
251 | |||
252 | /* Device Sub Type Codes */ | ||
253 | |||
254 | typedef enum _PnP_SUB_TYPE { | ||
255 | SCSIController = 0, | ||
256 | IDEController = 1, | ||
257 | FloppyController = 2, | ||
258 | IPIController = 3, | ||
259 | OtherMassStorageController = 0x80, | ||
260 | |||
261 | EthernetController = 0, | ||
262 | TokenRingController = 1, | ||
263 | FDDIController = 2, | ||
264 | OtherNetworkController = 0x80, | ||
265 | |||
266 | VGAController= 0, | ||
267 | SVGAController= 1, | ||
268 | XGAController= 2, | ||
269 | OtherDisplayController = 0x80, | ||
270 | |||
271 | VideoController = 0, | ||
272 | AudioController = 1, | ||
273 | OtherMultimediaController = 0x80, | ||
274 | |||
275 | RAM = 0, | ||
276 | FLASH = 1, | ||
277 | OtherMemoryDevice = 0x80, | ||
278 | |||
279 | HostProcessorBridge = 0, | ||
280 | ISABridge = 1, | ||
281 | EISABridge = 2, | ||
282 | MicroChannelBridge = 3, | ||
283 | PCIBridge = 4, | ||
284 | PCMCIABridge = 5, | ||
285 | VMEBridge = 6, | ||
286 | OtherBridgeDevice = 0x80, | ||
287 | |||
288 | RS232Device = 0, | ||
289 | ATCompatibleParallelPort = 1, | ||
290 | OtherCommunicationsDevice = 0x80, | ||
291 | |||
292 | ProgrammableInterruptController = 0, | ||
293 | DMAController = 1, | ||
294 | SystemTimer = 2, | ||
295 | RealTimeClock = 3, | ||
296 | L2Cache = 4, | ||
297 | NVRAM = 5, | ||
298 | PowerManagement = 6, | ||
299 | CMOS = 7, | ||
300 | OperatorPanel = 8, | ||
301 | ServiceProcessorClass1 = 9, | ||
302 | ServiceProcessorClass2 = 0xA, | ||
303 | ServiceProcessorClass3 = 0xB, | ||
304 | GraphicAssist = 0xC, | ||
305 | SystemPlanar = 0xF, /* 10/5/95 */ | ||
306 | OtherSystemPeripheral = 0x80, | ||
307 | |||
308 | KeyboardController = 0, | ||
309 | Digitizer = 1, | ||
310 | MouseController = 2, | ||
311 | TabletController = 3, /* 10/27/95 */ | ||
312 | OtherInputController = 0x80, | ||
313 | |||
314 | GeneralMemoryController = 0, | ||
315 | } PnP_SUB_TYPE; | ||
316 | |||
317 | /* Device Interface Type Codes */ | ||
318 | |||
319 | typedef enum _PnP_INTERFACE { | ||
320 | General = 0, | ||
321 | GeneralSCSI = 0, | ||
322 | GeneralIDE = 0, | ||
323 | ATACompatible = 1, | ||
324 | |||
325 | GeneralFloppy = 0, | ||
326 | Compatible765 = 1, | ||
327 | NS398_Floppy = 2, /* NS Super I/O wired to use index | ||
328 | register at port 398 and data | ||
329 | register at port 399 */ | ||
330 | NS26E_Floppy = 3, /* Ports 26E and 26F */ | ||
331 | NS15C_Floppy = 4, /* Ports 15C and 15D */ | ||
332 | NS2E_Floppy = 5, /* Ports 2E and 2F */ | ||
333 | CHRP_Floppy = 6, /* CHRP Floppy in PR*P system */ | ||
334 | |||
335 | GeneralIPI = 0, | ||
336 | |||
337 | GeneralEther = 0, | ||
338 | GeneralToken = 0, | ||
339 | GeneralFDDI = 0, | ||
340 | |||
341 | GeneralVGA = 0, | ||
342 | GeneralSVGA = 0, | ||
343 | GeneralXGA = 0, | ||
344 | |||
345 | GeneralVideo = 0, | ||
346 | GeneralAudio = 0, | ||
347 | CS4232Audio = 1, /* CS 4232 Plug 'n Play Configured */ | ||
348 | |||
349 | GeneralRAM = 0, | ||
350 | GeneralFLASH = 0, | ||
351 | PCIMemoryController = 0, /* PCI Config Method */ | ||
352 | RS6KMemoryController = 1, /* RS6K Config Method */ | ||
353 | |||
354 | GeneralHostBridge = 0, | ||
355 | GeneralISABridge = 0, | ||
356 | GeneralEISABridge = 0, | ||
357 | GeneralMCABridge = 0, | ||
358 | GeneralPCIBridge = 0, | ||
359 | PCIBridgeDirect = 0, | ||
360 | PCIBridgeIndirect = 1, | ||
361 | PCIBridgeRS6K = 2, | ||
362 | GeneralPCMCIABridge = 0, | ||
363 | GeneralVMEBridge = 0, | ||
364 | |||
365 | GeneralRS232 = 0, | ||
366 | COMx = 1, | ||
367 | Compatible16450 = 2, | ||
368 | Compatible16550 = 3, | ||
369 | NS398SerPort = 4, /* NS Super I/O wired to use index | ||
370 | register at port 398 and data | ||
371 | register at port 399 */ | ||
372 | NS26ESerPort = 5, /* Ports 26E and 26F */ | ||
373 | NS15CSerPort = 6, /* Ports 15C and 15D */ | ||
374 | NS2ESerPort = 7, /* Ports 2E and 2F */ | ||
375 | |||
376 | GeneralParPort = 0, | ||
377 | LPTx = 1, | ||
378 | NS398ParPort = 2, /* NS Super I/O wired to use index | ||
379 | register at port 398 and data | ||
380 | register at port 399 */ | ||
381 | NS26EParPort = 3, /* Ports 26E and 26F */ | ||
382 | NS15CParPort = 4, /* Ports 15C and 15D */ | ||
383 | NS2EParPort = 5, /* Ports 2E and 2F */ | ||
384 | |||
385 | GeneralPIC = 0, | ||
386 | ISA_PIC = 1, | ||
387 | EISA_PIC = 2, | ||
388 | MPIC = 3, | ||
389 | RS6K_PIC = 4, | ||
390 | |||
391 | GeneralDMA = 0, | ||
392 | ISA_DMA = 1, | ||
393 | EISA_DMA = 2, | ||
394 | |||
395 | GeneralTimer = 0, | ||
396 | ISA_Timer = 1, | ||
397 | EISA_Timer = 2, | ||
398 | GeneralRTC = 0, | ||
399 | ISA_RTC = 1, | ||
400 | |||
401 | StoreThruOnly = 1, | ||
402 | StoreInEnabled = 2, | ||
403 | RS6KL2Cache = 3, | ||
404 | |||
405 | IndirectNVRAM = 0, /* Indirectly addressed */ | ||
406 | DirectNVRAM = 1, /* Memory Mapped */ | ||
407 | IndirectNVRAM24 = 2, /* Indirectly addressed - 24 bit */ | ||
408 | |||
409 | GeneralPowerManagement = 0, | ||
410 | EPOWPowerManagement = 1, | ||
411 | PowerControl = 2, // d1378 | ||
412 | |||
413 | GeneralCMOS = 0, | ||
414 | |||
415 | GeneralOPPanel = 0, | ||
416 | HarddiskLight = 1, | ||
417 | CDROMLight = 2, | ||
418 | PowerLight = 3, | ||
419 | KeyLock = 4, | ||
420 | ANDisplay = 5, /* AlphaNumeric Display */ | ||
421 | SystemStatusLED = 6, /* 3 digit 7 segment LED */ | ||
422 | CHRP_SystemStatusLED = 7, /* CHRP LEDs in PR*P system */ | ||
423 | |||
424 | GeneralServiceProcessor = 0, | ||
425 | |||
426 | TransferData = 1, | ||
427 | IGMC32 = 2, | ||
428 | IGMC64 = 3, | ||
429 | |||
430 | GeneralSystemPlanar = 0, /* 10/5/95 */ | ||
431 | |||
432 | } PnP_INTERFACE; | ||
433 | |||
434 | /* PnP resources */ | ||
435 | |||
436 | /* Compressed ASCII is 5 bits per char; 00001=A ... 11010=Z */ | ||
437 | |||
438 | typedef struct _SERIAL_ID { | ||
439 | unsigned char VendorID0; /* Bit(7)=0 */ | ||
440 | /* Bits(6:2)=1st character in */ | ||
441 | /* compressed ASCII */ | ||
442 | /* Bits(1:0)=2nd character in */ | ||
443 | /* compressed ASCII bits(4:3) */ | ||
444 | unsigned char VendorID1; /* Bits(7:5)=2nd character in */ | ||
445 | /* compressed ASCII bits(2:0) */ | ||
446 | /* Bits(4:0)=3rd character in */ | ||
447 | /* compressed ASCII */ | ||
448 | unsigned char VendorID2; /* Product number - vendor assigned */ | ||
449 | unsigned char VendorID3; /* Product number - vendor assigned */ | ||
450 | |||
451 | /* Serial number is to provide uniqueness if more than one board of same */ | ||
452 | /* type is in system. Must be "FFFFFFFF" if feature not supported. */ | ||
453 | |||
454 | unsigned char Serial0; /* Unique serial number bits (7:0) */ | ||
455 | unsigned char Serial1; /* Unique serial number bits (15:8) */ | ||
456 | unsigned char Serial2; /* Unique serial number bits (23:16) */ | ||
457 | unsigned char Serial3; /* Unique serial number bits (31:24) */ | ||
458 | unsigned char Checksum; | ||
459 | } SERIAL_ID; | ||
460 | |||
461 | typedef enum _PnPItemName { | ||
462 | Unused = 0, | ||
463 | PnPVersion = 1, | ||
464 | LogicalDevice = 2, | ||
465 | CompatibleDevice = 3, | ||
466 | IRQFormat = 4, | ||
467 | DMAFormat = 5, | ||
468 | StartDepFunc = 6, | ||
469 | EndDepFunc = 7, | ||
470 | IOPort = 8, | ||
471 | FixedIOPort = 9, | ||
472 | Res1 = 10, | ||
473 | Res2 = 11, | ||
474 | Res3 = 12, | ||
475 | SmallVendorItem = 14, | ||
476 | EndTag = 15, | ||
477 | MemoryRange = 1, | ||
478 | ANSIIdentifier = 2, | ||
479 | UnicodeIdentifier = 3, | ||
480 | LargeVendorItem = 4, | ||
481 | MemoryRange32 = 5, | ||
482 | MemoryRangeFixed32 = 6, | ||
483 | } PnPItemName; | ||
484 | |||
485 | /* Define a bunch of access functions for the bits in the tag field */ | ||
486 | |||
487 | /* Tag type - 0 = small; 1 = large */ | ||
488 | #define tag_type(t) (((t) & 0x80)>>7) | ||
489 | #define set_tag_type(t,v) (t = (t & 0x7f) | ((v)<<7)) | ||
490 | |||
491 | /* Small item name is 4 bits - one of PnPItemName enum above */ | ||
492 | #define tag_small_item_name(t) (((t) & 0x78)>>3) | ||
493 | #define set_tag_small_item_name(t,v) (t = (t & 0x07) | ((v)<<3)) | ||
494 | |||
495 | /* Small item count is 3 bits - count of further bytes in packet */ | ||
496 | #define tag_small_count(t) ((t) & 0x07) | ||
497 | #define set_tag_count(t,v) (t = (t & 0x78) | (v)) | ||
498 | |||
499 | /* Large item name is 7 bits - one of PnPItemName enum above */ | ||
500 | #define tag_large_item_name(t) ((t) & 0x7f) | ||
501 | #define set_tag_large_item_name(t,v) (t = (t | 0x80) | (v)) | ||
502 | |||
503 | /* a PnP resource is a bunch of contiguous TAG packets ending with an end tag */ | ||
504 | |||
505 | typedef union _PnP_TAG_PACKET { | ||
506 | struct _S1_Pack{ /* VERSION PACKET */ | ||
507 | unsigned char Tag; /* small tag = 0x0a */ | ||
508 | unsigned char Version[2]; /* PnP version, Vendor version */ | ||
509 | } S1_Pack; | ||
510 | |||
511 | struct _S2_Pack{ /* LOGICAL DEVICE ID PACKET */ | ||
512 | unsigned char Tag; /* small tag = 0x15 or 0x16 */ | ||
513 | unsigned char DevId[4]; /* Logical device id */ | ||
514 | unsigned char Flags[2]; /* bit(0) boot device; */ | ||
515 | /* bit(7:1) cmd in range x31-x37 */ | ||
516 | /* bit(7:0) cmd in range x28-x3f (opt)*/ | ||
517 | } S2_Pack; | ||
518 | |||
519 | struct _S3_Pack{ /* COMPATIBLE DEVICE ID PACKET */ | ||
520 | unsigned char Tag; /* small tag = 0x1c */ | ||
521 | unsigned char CompatId[4]; /* Compatible device id */ | ||
522 | } S3_Pack; | ||
523 | |||
524 | struct _S4_Pack{ /* IRQ PACKET */ | ||
525 | unsigned char Tag; /* small tag = 0x22 or 0x23 */ | ||
526 | unsigned char IRQMask[2]; /* bit(0) is IRQ0, ...; */ | ||
527 | /* bit(0) is IRQ8 ... */ | ||
528 | unsigned char IRQInfo; /* optional; assume bit(0)=1; else */ | ||
529 | /* bit(0) - high true edge sensitive */ | ||
530 | /* bit(1) - low true edge sensitive */ | ||
531 | /* bit(2) - high true level sensitive*/ | ||
532 | /* bit(3) - low true level sensitive */ | ||
533 | /* bit(7:4) - must be 0 */ | ||
534 | } S4_Pack; | ||
535 | |||
536 | struct _S5_Pack{ /* DMA PACKET */ | ||
537 | unsigned char Tag; /* small tag = 0x2a */ | ||
538 | unsigned char DMAMask; /* bit(0) is channel 0 ... */ | ||
539 | unsigned char DMAInfo; | ||
540 | } S5_Pack; | ||
541 | |||
542 | struct _S6_Pack{ /* START DEPENDENT FUNCTION PACKET */ | ||
543 | unsigned char Tag; /* small tag = 0x30 or 0x31 */ | ||
544 | unsigned char Priority; /* Optional; if missing then x01; else*/ | ||
545 | /* x00 = best possible */ | ||
546 | /* x01 = acceptible */ | ||
547 | /* x02 = sub-optimal but functional */ | ||
548 | } S6_Pack; | ||
549 | |||
550 | struct _S7_Pack{ /* END DEPENDENT FUNCTION PACKET */ | ||
551 | unsigned char Tag; /* small tag = 0x38 */ | ||
552 | } S7_Pack; | ||
553 | |||
554 | struct _S8_Pack{ /* VARIABLE I/O PORT PACKET */ | ||
555 | unsigned char Tag; /* small tag x47 */ | ||
556 | unsigned char IOInfo; /* x0 = decode only bits(9:0); */ | ||
557 | #define ISAAddr16bit 0x01 /* x01 = decode bits(15:0) */ | ||
558 | unsigned char RangeMin[2]; /* Min base address */ | ||
559 | unsigned char RangeMax[2]; /* Max base address */ | ||
560 | unsigned char IOAlign; /* base alignmt, incr in 1B blocks */ | ||
561 | unsigned char IONum; /* number of contiguous I/O ports */ | ||
562 | } S8_Pack; | ||
563 | |||
564 | struct _S9_Pack{ /* FIXED I/O PORT PACKET */ | ||
565 | unsigned char Tag; /* small tag = 0x4b */ | ||
566 | unsigned char Range[2]; /* base address 10 bits */ | ||
567 | unsigned char IONum; /* number of contiguous I/O ports */ | ||
568 | } S9_Pack; | ||
569 | |||
570 | struct _S14_Pack{ /* VENDOR DEFINED PACKET */ | ||
571 | unsigned char Tag; /* small tag = 0x7m m = 1-7 */ | ||
572 | union _S14_Data{ | ||
573 | unsigned char Data[7]; /* Vendor defined */ | ||
574 | struct _S14_PPCPack{ /* Pr*p s14 pack */ | ||
575 | unsigned char Type; /* 00=non-IBM */ | ||
576 | unsigned char PPCData[6]; /* Vendor defined */ | ||
577 | } S14_PPCPack; | ||
578 | } S14_Data; | ||
579 | } S14_Pack; | ||
580 | |||
581 | struct _S15_Pack{ /* END PACKET */ | ||
582 | unsigned char Tag; /* small tag = 0x78 or 0x79 */ | ||
583 | unsigned char Check; /* optional - checksum */ | ||
584 | } S15_Pack; | ||
585 | |||
586 | struct _L1_Pack{ /* MEMORY RANGE PACKET */ | ||
587 | unsigned char Tag; /* large tag = 0x81 */ | ||
588 | unsigned char Count0; /* x09 */ | ||
589 | unsigned char Count1; /* x00 */ | ||
590 | unsigned char Data[9]; /* a variable array of bytes, */ | ||
591 | /* count in tag */ | ||
592 | } L1_Pack; | ||
593 | |||
594 | struct _L2_Pack{ /* ANSI ID STRING PACKET */ | ||
595 | unsigned char Tag; /* large tag = 0x82 */ | ||
596 | unsigned char Count0; /* Length of string */ | ||
597 | unsigned char Count1; | ||
598 | unsigned char Identifier[1]; /* a variable array of bytes, */ | ||
599 | /* count in tag */ | ||
600 | } L2_Pack; | ||
601 | |||
602 | struct _L3_Pack{ /* UNICODE ID STRING PACKET */ | ||
603 | unsigned char Tag; /* large tag = 0x83 */ | ||
604 | unsigned char Count0; /* Length + 2 of string */ | ||
605 | unsigned char Count1; | ||
606 | unsigned char Country0; /* TBD */ | ||
607 | unsigned char Country1; /* TBD */ | ||
608 | unsigned char Identifier[1]; /* a variable array of bytes, */ | ||
609 | /* count in tag */ | ||
610 | } L3_Pack; | ||
611 | |||
612 | struct _L4_Pack{ /* VENDOR DEFINED PACKET */ | ||
613 | unsigned char Tag; /* large tag = 0x84 */ | ||
614 | unsigned char Count0; | ||
615 | unsigned char Count1; | ||
616 | union _L4_Data{ | ||
617 | unsigned char Data[1]; /* a variable array of bytes, */ | ||
618 | /* count in tag */ | ||
619 | struct _L4_PPCPack{ /* Pr*p L4 packet */ | ||
620 | unsigned char Type; /* 00=non-IBM */ | ||
621 | unsigned char PPCData[1]; /* a variable array of bytes, */ | ||
622 | /* count in tag */ | ||
623 | } L4_PPCPack; | ||
624 | } L4_Data; | ||
625 | } L4_Pack; | ||
626 | |||
627 | struct _L5_Pack{ | ||
628 | unsigned char Tag; /* large tag = 0x85 */ | ||
629 | unsigned char Count0; /* Count = 17 */ | ||
630 | unsigned char Count1; | ||
631 | unsigned char Data[17]; | ||
632 | } L5_Pack; | ||
633 | |||
634 | struct _L6_Pack{ | ||
635 | unsigned char Tag; /* large tag = 0x86 */ | ||
636 | unsigned char Count0; /* Count = 9 */ | ||
637 | unsigned char Count1; | ||
638 | unsigned char Data[9]; | ||
639 | } L6_Pack; | ||
640 | |||
641 | } PnP_TAG_PACKET; | ||
642 | |||
643 | #endif /* __ASSEMBLY__ */ | ||
644 | #endif /* ndef _PNP_ */ | ||
645 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/ppc4xx_dma.h b/include/asm-ppc/ppc4xx_dma.h deleted file mode 100644 index 935d1e05366b..000000000000 --- a/include/asm-ppc/ppc4xx_dma.h +++ /dev/null | |||
@@ -1,579 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/ppc4xx_dma.h | ||
3 | * | ||
4 | * IBM PPC4xx DMA engine library | ||
5 | * | ||
6 | * Copyright 2000-2004 MontaVista Software Inc. | ||
7 | * | ||
8 | * Cleaned up a bit more, Matt Porter <mporter@kernel.crashing.org> | ||
9 | * | ||
10 | * Original code by Armin Kuster <akuster@mvista.com> | ||
11 | * and Pete Popov <ppopov@mvista.com> | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify it | ||
14 | * under the terms of the GNU General Public License as published by the | ||
15 | * Free Software Foundation; either version 2 of the License, or (at your | ||
16 | * option) any later version. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along | ||
19 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
20 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
21 | */ | ||
22 | |||
23 | #ifdef __KERNEL__ | ||
24 | #ifndef __ASMPPC_PPC4xx_DMA_H | ||
25 | #define __ASMPPC_PPC4xx_DMA_H | ||
26 | |||
27 | #include <linux/types.h> | ||
28 | #include <asm/mmu.h> | ||
29 | #include <asm/ibm4xx.h> | ||
30 | |||
31 | #undef DEBUG_4xxDMA | ||
32 | |||
33 | #define MAX_PPC4xx_DMA_CHANNELS 4 | ||
34 | |||
35 | /* | ||
36 | * Function return status codes | ||
37 | * These values are used to indicate whether or not the function | ||
38 | * call was successful, or a bad/invalid parameter was passed. | ||
39 | */ | ||
40 | #define DMA_STATUS_GOOD 0 | ||
41 | #define DMA_STATUS_BAD_CHANNEL 1 | ||
42 | #define DMA_STATUS_BAD_HANDLE 2 | ||
43 | #define DMA_STATUS_BAD_MODE 3 | ||
44 | #define DMA_STATUS_NULL_POINTER 4 | ||
45 | #define DMA_STATUS_OUT_OF_MEMORY 5 | ||
46 | #define DMA_STATUS_SGL_LIST_EMPTY 6 | ||
47 | #define DMA_STATUS_GENERAL_ERROR 7 | ||
48 | #define DMA_STATUS_CHANNEL_NOTFREE 8 | ||
49 | |||
50 | #define DMA_CHANNEL_BUSY 0x80000000 | ||
51 | |||
52 | /* | ||
53 | * These indicate status as returned from the DMA Status Register. | ||
54 | */ | ||
55 | #define DMA_STATUS_NO_ERROR 0 | ||
56 | #define DMA_STATUS_CS 1 /* Count Status */ | ||
57 | #define DMA_STATUS_TS 2 /* Transfer Status */ | ||
58 | #define DMA_STATUS_DMA_ERROR 3 /* DMA Error Occurred */ | ||
59 | #define DMA_STATUS_DMA_BUSY 4 /* The channel is busy */ | ||
60 | |||
61 | |||
62 | /* | ||
63 | * DMA Channel Control Registers | ||
64 | */ | ||
65 | |||
66 | #ifdef CONFIG_44x | ||
67 | #define PPC4xx_DMA_64BIT | ||
68 | #define DMA_CR_OFFSET 1 | ||
69 | #else | ||
70 | #define DMA_CR_OFFSET 0 | ||
71 | #endif | ||
72 | |||
73 | #define DMA_CE_ENABLE (1<<31) /* DMA Channel Enable */ | ||
74 | #define SET_DMA_CE_ENABLE(x) (((x)&0x1)<<31) | ||
75 | #define GET_DMA_CE_ENABLE(x) (((x)&DMA_CE_ENABLE)>>31) | ||
76 | |||
77 | #define DMA_CIE_ENABLE (1<<30) /* DMA Channel Interrupt Enable */ | ||
78 | #define SET_DMA_CIE_ENABLE(x) (((x)&0x1)<<30) | ||
79 | #define GET_DMA_CIE_ENABLE(x) (((x)&DMA_CIE_ENABLE)>>30) | ||
80 | |||
81 | #define DMA_TD (1<<29) | ||
82 | #define SET_DMA_TD(x) (((x)&0x1)<<29) | ||
83 | #define GET_DMA_TD(x) (((x)&DMA_TD)>>29) | ||
84 | |||
85 | #define DMA_PL (1<<28) /* Peripheral Location */ | ||
86 | #define SET_DMA_PL(x) (((x)&0x1)<<28) | ||
87 | #define GET_DMA_PL(x) (((x)&DMA_PL)>>28) | ||
88 | |||
89 | #define EXTERNAL_PERIPHERAL 0 | ||
90 | #define INTERNAL_PERIPHERAL 1 | ||
91 | |||
92 | #define SET_DMA_PW(x) (((x)&0x3)<<(26-DMA_CR_OFFSET)) /* Peripheral Width */ | ||
93 | #define DMA_PW_MASK SET_DMA_PW(3) | ||
94 | #define PW_8 0 | ||
95 | #define PW_16 1 | ||
96 | #define PW_32 2 | ||
97 | #define PW_64 3 | ||
98 | /* FIXME: Add PW_128 support for 440GP DMA block */ | ||
99 | #define GET_DMA_PW(x) (((x)&DMA_PW_MASK)>>(26-DMA_CR_OFFSET)) | ||
100 | |||
101 | #define DMA_DAI (1<<(25-DMA_CR_OFFSET)) /* Destination Address Increment */ | ||
102 | #define SET_DMA_DAI(x) (((x)&0x1)<<(25-DMA_CR_OFFSET)) | ||
103 | |||
104 | #define DMA_SAI (1<<(24-DMA_CR_OFFSET)) /* Source Address Increment */ | ||
105 | #define SET_DMA_SAI(x) (((x)&0x1)<<(24-DMA_CR_OFFSET)) | ||
106 | |||
107 | #define DMA_BEN (1<<(23-DMA_CR_OFFSET)) /* Buffer Enable */ | ||
108 | #define SET_DMA_BEN(x) (((x)&0x1)<<(23-DMA_CR_OFFSET)) | ||
109 | |||
110 | #define SET_DMA_TM(x) (((x)&0x3)<<(21-DMA_CR_OFFSET)) /* Transfer Mode */ | ||
111 | #define DMA_TM_MASK SET_DMA_TM(3) | ||
112 | #define TM_PERIPHERAL 0 /* Peripheral */ | ||
113 | #define TM_RESERVED 1 /* Reserved */ | ||
114 | #define TM_S_MM 2 /* Memory to Memory */ | ||
115 | #define TM_D_MM 3 /* Device Paced Memory to Memory */ | ||
116 | #define GET_DMA_TM(x) (((x)&DMA_TM_MASK)>>(21-DMA_CR_OFFSET)) | ||
117 | |||
118 | #define SET_DMA_PSC(x) (((x)&0x3)<<(19-DMA_CR_OFFSET)) /* Peripheral Setup Cycles */ | ||
119 | #define DMA_PSC_MASK SET_DMA_PSC(3) | ||
120 | #define GET_DMA_PSC(x) (((x)&DMA_PSC_MASK)>>(19-DMA_CR_OFFSET)) | ||
121 | |||
122 | #define SET_DMA_PWC(x) (((x)&0x3F)<<(13-DMA_CR_OFFSET)) /* Peripheral Wait Cycles */ | ||
123 | #define DMA_PWC_MASK SET_DMA_PWC(0x3F) | ||
124 | #define GET_DMA_PWC(x) (((x)&DMA_PWC_MASK)>>(13-DMA_CR_OFFSET)) | ||
125 | |||
126 | #define SET_DMA_PHC(x) (((x)&0x7)<<(10-DMA_CR_OFFSET)) /* Peripheral Hold Cycles */ | ||
127 | #define DMA_PHC_MASK SET_DMA_PHC(0x7) | ||
128 | #define GET_DMA_PHC(x) (((x)&DMA_PHC_MASK)>>(10-DMA_CR_OFFSET)) | ||
129 | |||
130 | #define DMA_ETD_OUTPUT (1<<(9-DMA_CR_OFFSET)) /* EOT pin is a TC output */ | ||
131 | #define SET_DMA_ETD(x) (((x)&0x1)<<(9-DMA_CR_OFFSET)) | ||
132 | |||
133 | #define DMA_TCE_ENABLE (1<<(8-DMA_CR_OFFSET)) | ||
134 | #define SET_DMA_TCE(x) (((x)&0x1)<<(8-DMA_CR_OFFSET)) | ||
135 | |||
136 | #define DMA_DEC (1<<(2)) /* Address Decrement */ | ||
137 | #define SET_DMA_DEC(x) (((x)&0x1)<<2) | ||
138 | #define GET_DMA_DEC(x) (((x)&DMA_DEC)>>2) | ||
139 | |||
140 | |||
141 | /* | ||
142 | * Transfer Modes | ||
143 | * These modes are defined in a way that makes it possible to | ||
144 | * simply "or" in the value in the control register. | ||
145 | */ | ||
146 | |||
147 | #define DMA_MODE_MM (SET_DMA_TM(TM_S_MM)) /* memory to memory */ | ||
148 | |||
149 | /* Device-paced memory to memory, */ | ||
150 | /* device is at source address */ | ||
151 | #define DMA_MODE_MM_DEVATSRC (DMA_TD | SET_DMA_TM(TM_D_MM)) | ||
152 | |||
153 | /* Device-paced memory to memory, */ | ||
154 | /* device is at destination address */ | ||
155 | #define DMA_MODE_MM_DEVATDST (SET_DMA_TM(TM_D_MM)) | ||
156 | |||
157 | /* 405gp/440gp */ | ||
158 | #define SET_DMA_PREFETCH(x) (((x)&0x3)<<(4-DMA_CR_OFFSET)) /* Memory Read Prefetch */ | ||
159 | #define DMA_PREFETCH_MASK SET_DMA_PREFETCH(3) | ||
160 | #define PREFETCH_1 0 /* Prefetch 1 Double Word */ | ||
161 | #define PREFETCH_2 1 | ||
162 | #define PREFETCH_4 2 | ||
163 | #define GET_DMA_PREFETCH(x) (((x)&DMA_PREFETCH_MASK)>>(4-DMA_CR_OFFSET)) | ||
164 | |||
165 | #define DMA_PCE (1<<(3-DMA_CR_OFFSET)) /* Parity Check Enable */ | ||
166 | #define SET_DMA_PCE(x) (((x)&0x1)<<(3-DMA_CR_OFFSET)) | ||
167 | #define GET_DMA_PCE(x) (((x)&DMA_PCE)>>(3-DMA_CR_OFFSET)) | ||
168 | |||
169 | /* stb3x */ | ||
170 | |||
171 | #define DMA_ECE_ENABLE (1<<5) | ||
172 | #define SET_DMA_ECE(x) (((x)&0x1)<<5) | ||
173 | #define GET_DMA_ECE(x) (((x)&DMA_ECE_ENABLE)>>5) | ||
174 | |||
175 | #define DMA_TCD_DISABLE (1<<4) | ||
176 | #define SET_DMA_TCD(x) (((x)&0x1)<<4) | ||
177 | #define GET_DMA_TCD(x) (((x)&DMA_TCD_DISABLE)>>4) | ||
178 | |||
179 | typedef uint32_t sgl_handle_t; | ||
180 | |||
181 | #ifdef CONFIG_PPC4xx_EDMA | ||
182 | |||
183 | #define SGL_LIST_SIZE 4096 | ||
184 | #define DMA_PPC4xx_SIZE SGL_LIST_SIZE | ||
185 | |||
186 | #define SET_DMA_PRIORITY(x) (((x)&0x3)<<(6-DMA_CR_OFFSET)) /* DMA Channel Priority */ | ||
187 | #define DMA_PRIORITY_MASK SET_DMA_PRIORITY(3) | ||
188 | #define PRIORITY_LOW 0 | ||
189 | #define PRIORITY_MID_LOW 1 | ||
190 | #define PRIORITY_MID_HIGH 2 | ||
191 | #define PRIORITY_HIGH 3 | ||
192 | #define GET_DMA_PRIORITY(x) (((x)&DMA_PRIORITY_MASK)>>(6-DMA_CR_OFFSET)) | ||
193 | |||
194 | /* | ||
195 | * DMA Polarity Configuration Register | ||
196 | */ | ||
197 | #define DMAReq_ActiveLow(chan) (1<<(31-(chan*3))) | ||
198 | #define DMAAck_ActiveLow(chan) (1<<(30-(chan*3))) | ||
199 | #define EOT_ActiveLow(chan) (1<<(29-(chan*3))) /* End of Transfer */ | ||
200 | |||
201 | /* | ||
202 | * DMA Sleep Mode Register | ||
203 | */ | ||
204 | #define SLEEP_MODE_ENABLE (1<<21) | ||
205 | |||
206 | /* | ||
207 | * DMA Status Register | ||
208 | */ | ||
209 | #define DMA_CS0 (1<<31) /* Terminal Count has been reached */ | ||
210 | #define DMA_CS1 (1<<30) | ||
211 | #define DMA_CS2 (1<<29) | ||
212 | #define DMA_CS3 (1<<28) | ||
213 | |||
214 | #define DMA_TS0 (1<<27) /* End of Transfer has been requested */ | ||
215 | #define DMA_TS1 (1<<26) | ||
216 | #define DMA_TS2 (1<<25) | ||
217 | #define DMA_TS3 (1<<24) | ||
218 | |||
219 | #define DMA_CH0_ERR (1<<23) /* DMA Chanel 0 Error */ | ||
220 | #define DMA_CH1_ERR (1<<22) | ||
221 | #define DMA_CH2_ERR (1<<21) | ||
222 | #define DMA_CH3_ERR (1<<20) | ||
223 | |||
224 | #define DMA_IN_DMA_REQ0 (1<<19) /* Internal DMA Request is pending */ | ||
225 | #define DMA_IN_DMA_REQ1 (1<<18) | ||
226 | #define DMA_IN_DMA_REQ2 (1<<17) | ||
227 | #define DMA_IN_DMA_REQ3 (1<<16) | ||
228 | |||
229 | #define DMA_EXT_DMA_REQ0 (1<<15) /* External DMA Request is pending */ | ||
230 | #define DMA_EXT_DMA_REQ1 (1<<14) | ||
231 | #define DMA_EXT_DMA_REQ2 (1<<13) | ||
232 | #define DMA_EXT_DMA_REQ3 (1<<12) | ||
233 | |||
234 | #define DMA_CH0_BUSY (1<<11) /* DMA Channel 0 Busy */ | ||
235 | #define DMA_CH1_BUSY (1<<10) | ||
236 | #define DMA_CH2_BUSY (1<<9) | ||
237 | #define DMA_CH3_BUSY (1<<8) | ||
238 | |||
239 | #define DMA_SG0 (1<<7) /* DMA Channel 0 Scatter/Gather in progress */ | ||
240 | #define DMA_SG1 (1<<6) | ||
241 | #define DMA_SG2 (1<<5) | ||
242 | #define DMA_SG3 (1<<4) | ||
243 | |||
244 | /* DMA Channel Count Register */ | ||
245 | #define DMA_CTC_BTEN (1<<23) /* Burst Enable/Disable bit */ | ||
246 | #define DMA_CTC_BSIZ_MSK (3<<21) /* Mask of the Burst size bits */ | ||
247 | #define DMA_CTC_BSIZ_2 (0) | ||
248 | #define DMA_CTC_BSIZ_4 (1<<21) | ||
249 | #define DMA_CTC_BSIZ_8 (2<<21) | ||
250 | #define DMA_CTC_BSIZ_16 (3<<21) | ||
251 | |||
252 | /* | ||
253 | * DMA SG Command Register | ||
254 | */ | ||
255 | #define SSG_ENABLE(chan) (1<<(31-chan)) /* Start Scatter Gather */ | ||
256 | #define SSG_MASK_ENABLE(chan) (1<<(15-chan)) /* Enable writing to SSG0 bit */ | ||
257 | |||
258 | /* | ||
259 | * DMA Scatter/Gather Descriptor Bit fields | ||
260 | */ | ||
261 | #define SG_LINK (1<<31) /* Link */ | ||
262 | #define SG_TCI_ENABLE (1<<29) /* Enable Terminal Count Interrupt */ | ||
263 | #define SG_ETI_ENABLE (1<<28) /* Enable End of Transfer Interrupt */ | ||
264 | #define SG_ERI_ENABLE (1<<27) /* Enable Error Interrupt */ | ||
265 | #define SG_COUNT_MASK 0xFFFF /* Count Field */ | ||
266 | |||
267 | #define SET_DMA_CONTROL \ | ||
268 | (SET_DMA_CIE_ENABLE(p_init->int_enable) | /* interrupt enable */ \ | ||
269 | SET_DMA_BEN(p_init->buffer_enable) | /* buffer enable */\ | ||
270 | SET_DMA_ETD(p_init->etd_output) | /* end of transfer pin */ \ | ||
271 | SET_DMA_TCE(p_init->tce_enable) | /* terminal count enable */ \ | ||
272 | SET_DMA_PL(p_init->pl) | /* peripheral location */ \ | ||
273 | SET_DMA_DAI(p_init->dai) | /* dest addr increment */ \ | ||
274 | SET_DMA_SAI(p_init->sai) | /* src addr increment */ \ | ||
275 | SET_DMA_PRIORITY(p_init->cp) | /* channel priority */ \ | ||
276 | SET_DMA_PW(p_init->pwidth) | /* peripheral/bus width */ \ | ||
277 | SET_DMA_PSC(p_init->psc) | /* peripheral setup cycles */ \ | ||
278 | SET_DMA_PWC(p_init->pwc) | /* peripheral wait cycles */ \ | ||
279 | SET_DMA_PHC(p_init->phc) | /* peripheral hold cycles */ \ | ||
280 | SET_DMA_PREFETCH(p_init->pf) /* read prefetch */) | ||
281 | |||
282 | #define GET_DMA_POLARITY(chan) (DMAReq_ActiveLow(chan) | DMAAck_ActiveLow(chan) | EOT_ActiveLow(chan)) | ||
283 | |||
284 | #elif defined(CONFIG_STB03xxx) /* stb03xxx */ | ||
285 | |||
286 | #define DMA_PPC4xx_SIZE 4096 | ||
287 | |||
288 | /* | ||
289 | * DMA Status Register | ||
290 | */ | ||
291 | |||
292 | #define SET_DMA_PRIORITY(x) (((x)&0x00800001)) /* DMA Channel Priority */ | ||
293 | #define DMA_PRIORITY_MASK 0x00800001 | ||
294 | #define PRIORITY_LOW 0x00000000 | ||
295 | #define PRIORITY_MID_LOW 0x00000001 | ||
296 | #define PRIORITY_MID_HIGH 0x00800000 | ||
297 | #define PRIORITY_HIGH 0x00800001 | ||
298 | #define GET_DMA_PRIORITY(x) (((((x)&DMA_PRIORITY_MASK) &0x00800000) >> 22 ) | (((x)&DMA_PRIORITY_MASK) &0x00000001)) | ||
299 | |||
300 | #define DMA_CS0 (1<<31) /* Terminal Count has been reached */ | ||
301 | #define DMA_CS1 (1<<30) | ||
302 | #define DMA_CS2 (1<<29) | ||
303 | #define DMA_CS3 (1<<28) | ||
304 | |||
305 | #define DMA_TS0 (1<<27) /* End of Transfer has been requested */ | ||
306 | #define DMA_TS1 (1<<26) | ||
307 | #define DMA_TS2 (1<<25) | ||
308 | #define DMA_TS3 (1<<24) | ||
309 | |||
310 | #define DMA_CH0_ERR (1<<23) /* DMA Chanel 0 Error */ | ||
311 | #define DMA_CH1_ERR (1<<22) | ||
312 | #define DMA_CH2_ERR (1<<21) | ||
313 | #define DMA_CH3_ERR (1<<20) | ||
314 | |||
315 | #define DMA_CT0 (1<<19) /* Chained transfere */ | ||
316 | |||
317 | #define DMA_IN_DMA_REQ0 (1<<18) /* Internal DMA Request is pending */ | ||
318 | #define DMA_IN_DMA_REQ1 (1<<17) | ||
319 | #define DMA_IN_DMA_REQ2 (1<<16) | ||
320 | #define DMA_IN_DMA_REQ3 (1<<15) | ||
321 | |||
322 | #define DMA_EXT_DMA_REQ0 (1<<14) /* External DMA Request is pending */ | ||
323 | #define DMA_EXT_DMA_REQ1 (1<<13) | ||
324 | #define DMA_EXT_DMA_REQ2 (1<<12) | ||
325 | #define DMA_EXT_DMA_REQ3 (1<<11) | ||
326 | |||
327 | #define DMA_CH0_BUSY (1<<10) /* DMA Channel 0 Busy */ | ||
328 | #define DMA_CH1_BUSY (1<<9) | ||
329 | #define DMA_CH2_BUSY (1<<8) | ||
330 | #define DMA_CH3_BUSY (1<<7) | ||
331 | |||
332 | #define DMA_CT1 (1<<6) /* Chained transfere */ | ||
333 | #define DMA_CT2 (1<<5) | ||
334 | #define DMA_CT3 (1<<4) | ||
335 | |||
336 | #define DMA_CH_ENABLE (1<<7) | ||
337 | #define SET_DMA_CH(x) (((x)&0x1)<<7) | ||
338 | #define GET_DMA_CH(x) (((x)&DMA_CH_ENABLE)>>7) | ||
339 | |||
340 | /* STBx25xxx dma unique */ | ||
341 | /* enable device port on a dma channel | ||
342 | * example ext 0 on dma 1 | ||
343 | */ | ||
344 | |||
345 | #define SSP0_RECV 15 | ||
346 | #define SSP0_XMIT 14 | ||
347 | #define EXT_DMA_0 12 | ||
348 | #define SC1_XMIT 11 | ||
349 | #define SC1_RECV 10 | ||
350 | #define EXT_DMA_2 9 | ||
351 | #define EXT_DMA_3 8 | ||
352 | #define SERIAL2_XMIT 7 | ||
353 | #define SERIAL2_RECV 6 | ||
354 | #define SC0_XMIT 5 | ||
355 | #define SC0_RECV 4 | ||
356 | #define SERIAL1_XMIT 3 | ||
357 | #define SERIAL1_RECV 2 | ||
358 | #define SERIAL0_XMIT 1 | ||
359 | #define SERIAL0_RECV 0 | ||
360 | |||
361 | #define DMA_CHAN_0 1 | ||
362 | #define DMA_CHAN_1 2 | ||
363 | #define DMA_CHAN_2 3 | ||
364 | #define DMA_CHAN_3 4 | ||
365 | |||
366 | /* end STBx25xx */ | ||
367 | |||
368 | /* | ||
369 | * Bit 30 must be one for Redwoods, otherwise transfers may receive errors. | ||
370 | */ | ||
371 | #define DMA_CR_MB0 0x2 | ||
372 | |||
373 | #define SET_DMA_CONTROL \ | ||
374 | (SET_DMA_CIE_ENABLE(p_init->int_enable) | /* interrupt enable */ \ | ||
375 | SET_DMA_ETD(p_init->etd_output) | /* end of transfer pin */ \ | ||
376 | SET_DMA_TCE(p_init->tce_enable) | /* terminal count enable */ \ | ||
377 | SET_DMA_PL(p_init->pl) | /* peripheral location */ \ | ||
378 | SET_DMA_DAI(p_init->dai) | /* dest addr increment */ \ | ||
379 | SET_DMA_SAI(p_init->sai) | /* src addr increment */ \ | ||
380 | SET_DMA_PRIORITY(p_init->cp) | /* channel priority */ \ | ||
381 | SET_DMA_PW(p_init->pwidth) | /* peripheral/bus width */ \ | ||
382 | SET_DMA_PSC(p_init->psc) | /* peripheral setup cycles */ \ | ||
383 | SET_DMA_PWC(p_init->pwc) | /* peripheral wait cycles */ \ | ||
384 | SET_DMA_PHC(p_init->phc) | /* peripheral hold cycles */ \ | ||
385 | SET_DMA_TCD(p_init->tcd_disable) | /* TC chain mode disable */ \ | ||
386 | SET_DMA_ECE(p_init->ece_enable) | /* ECE chanin mode enable */ \ | ||
387 | SET_DMA_CH(p_init->ch_enable) | /* Chain enable */ \ | ||
388 | DMA_CR_MB0 /* must be one */) | ||
389 | |||
390 | #define GET_DMA_POLARITY(chan) chan | ||
391 | |||
392 | #endif | ||
393 | |||
394 | typedef struct { | ||
395 | unsigned short in_use; /* set when channel is being used, clr when | ||
396 | * available. | ||
397 | */ | ||
398 | /* | ||
399 | * Valid polarity settings: | ||
400 | * DMAReq_ActiveLow(n) | ||
401 | * DMAAck_ActiveLow(n) | ||
402 | * EOT_ActiveLow(n) | ||
403 | * | ||
404 | * n is 0 to max dma chans | ||
405 | */ | ||
406 | unsigned int polarity; | ||
407 | |||
408 | char buffer_enable; /* Boolean: buffer enable */ | ||
409 | char tce_enable; /* Boolean: terminal count enable */ | ||
410 | char etd_output; /* Boolean: eot pin is a tc output */ | ||
411 | char pce; /* Boolean: parity check enable */ | ||
412 | |||
413 | /* | ||
414 | * Peripheral location: | ||
415 | * INTERNAL_PERIPHERAL (UART0 on the 405GP) | ||
416 | * EXTERNAL_PERIPHERAL | ||
417 | */ | ||
418 | char pl; /* internal/external peripheral */ | ||
419 | |||
420 | /* | ||
421 | * Valid pwidth settings: | ||
422 | * PW_8 | ||
423 | * PW_16 | ||
424 | * PW_32 | ||
425 | * PW_64 | ||
426 | */ | ||
427 | unsigned int pwidth; | ||
428 | |||
429 | char dai; /* Boolean: dst address increment */ | ||
430 | char sai; /* Boolean: src address increment */ | ||
431 | |||
432 | /* | ||
433 | * Valid psc settings: 0-3 | ||
434 | */ | ||
435 | unsigned int psc; /* Peripheral Setup Cycles */ | ||
436 | |||
437 | /* | ||
438 | * Valid pwc settings: | ||
439 | * 0-63 | ||
440 | */ | ||
441 | unsigned int pwc; /* Peripheral Wait Cycles */ | ||
442 | |||
443 | /* | ||
444 | * Valid phc settings: | ||
445 | * 0-7 | ||
446 | */ | ||
447 | unsigned int phc; /* Peripheral Hold Cycles */ | ||
448 | |||
449 | /* | ||
450 | * Valid cp (channel priority) settings: | ||
451 | * PRIORITY_LOW | ||
452 | * PRIORITY_MID_LOW | ||
453 | * PRIORITY_MID_HIGH | ||
454 | * PRIORITY_HIGH | ||
455 | */ | ||
456 | unsigned int cp; /* channel priority */ | ||
457 | |||
458 | /* | ||
459 | * Valid pf (memory read prefetch) settings: | ||
460 | * | ||
461 | * PREFETCH_1 | ||
462 | * PREFETCH_2 | ||
463 | * PREFETCH_4 | ||
464 | */ | ||
465 | unsigned int pf; /* memory read prefetch */ | ||
466 | |||
467 | /* | ||
468 | * Boolean: channel interrupt enable | ||
469 | * NOTE: for sgl transfers, only the last descriptor will be setup to | ||
470 | * interrupt. | ||
471 | */ | ||
472 | char int_enable; | ||
473 | |||
474 | char shift; /* easy access to byte_count shift, based on */ | ||
475 | /* the width of the channel */ | ||
476 | |||
477 | uint32_t control; /* channel control word */ | ||
478 | |||
479 | /* These variabled are used ONLY in single dma transfers */ | ||
480 | unsigned int mode; /* transfer mode */ | ||
481 | phys_addr_t addr; | ||
482 | char ce; /* channel enable */ | ||
483 | #ifdef CONFIG_STB03xxx | ||
484 | char ch_enable; | ||
485 | char tcd_disable; | ||
486 | char ece_enable; | ||
487 | char td; /* transfer direction */ | ||
488 | #endif | ||
489 | |||
490 | char int_on_final_sg;/* for scatter/gather - only interrupt on last sg */ | ||
491 | } ppc_dma_ch_t; | ||
492 | |||
493 | /* | ||
494 | * PPC44x DMA implementations have a slightly different | ||
495 | * descriptor layout. Probably moved about due to the | ||
496 | * change to 64-bit addresses and link pointer. I don't | ||
497 | * know why they didn't just leave control_count after | ||
498 | * the dst_addr. | ||
499 | */ | ||
500 | #ifdef PPC4xx_DMA_64BIT | ||
501 | typedef struct { | ||
502 | uint32_t control; | ||
503 | uint32_t control_count; | ||
504 | phys_addr_t src_addr; | ||
505 | phys_addr_t dst_addr; | ||
506 | phys_addr_t next; | ||
507 | } ppc_sgl_t; | ||
508 | #else | ||
509 | typedef struct { | ||
510 | uint32_t control; | ||
511 | phys_addr_t src_addr; | ||
512 | phys_addr_t dst_addr; | ||
513 | uint32_t control_count; | ||
514 | uint32_t next; | ||
515 | } ppc_sgl_t; | ||
516 | #endif | ||
517 | |||
518 | typedef struct { | ||
519 | unsigned int dmanr; | ||
520 | uint32_t control; /* channel ctrl word; loaded from each descrptr */ | ||
521 | uint32_t sgl_control; /* LK, TCI, ETI, and ERI bits in sgl descriptor */ | ||
522 | dma_addr_t dma_addr; /* dma (physical) address of this list */ | ||
523 | ppc_sgl_t *phead; | ||
524 | dma_addr_t phead_dma; | ||
525 | ppc_sgl_t *ptail; | ||
526 | dma_addr_t ptail_dma; | ||
527 | } sgl_list_info_t; | ||
528 | |||
529 | typedef struct { | ||
530 | phys_addr_t *src_addr; | ||
531 | phys_addr_t *dst_addr; | ||
532 | phys_addr_t dma_src_addr; | ||
533 | phys_addr_t dma_dst_addr; | ||
534 | } pci_alloc_desc_t; | ||
535 | |||
536 | extern ppc_dma_ch_t dma_channels[]; | ||
537 | |||
538 | /* | ||
539 | * The DMA API are in ppc4xx_dma.c and ppc4xx_sgdma.c | ||
540 | */ | ||
541 | extern int ppc4xx_init_dma_channel(unsigned int, ppc_dma_ch_t *); | ||
542 | extern int ppc4xx_get_channel_config(unsigned int, ppc_dma_ch_t *); | ||
543 | extern int ppc4xx_set_channel_priority(unsigned int, unsigned int); | ||
544 | extern unsigned int ppc4xx_get_peripheral_width(unsigned int); | ||
545 | extern void ppc4xx_set_sg_addr(int, phys_addr_t); | ||
546 | extern int ppc4xx_add_dma_sgl(sgl_handle_t, phys_addr_t, phys_addr_t, unsigned int); | ||
547 | extern void ppc4xx_enable_dma_sgl(sgl_handle_t); | ||
548 | extern void ppc4xx_disable_dma_sgl(sgl_handle_t); | ||
549 | extern int ppc4xx_get_dma_sgl_residue(sgl_handle_t, phys_addr_t *, phys_addr_t *); | ||
550 | extern int ppc4xx_delete_dma_sgl_element(sgl_handle_t, phys_addr_t *, phys_addr_t *); | ||
551 | extern int ppc4xx_alloc_dma_handle(sgl_handle_t *, unsigned int, unsigned int); | ||
552 | extern void ppc4xx_free_dma_handle(sgl_handle_t); | ||
553 | extern int ppc4xx_get_dma_status(void); | ||
554 | extern int ppc4xx_enable_burst(unsigned int); | ||
555 | extern int ppc4xx_disable_burst(unsigned int); | ||
556 | extern int ppc4xx_set_burst_size(unsigned int, unsigned int); | ||
557 | extern void ppc4xx_set_src_addr(int dmanr, phys_addr_t src_addr); | ||
558 | extern void ppc4xx_set_dst_addr(int dmanr, phys_addr_t dst_addr); | ||
559 | extern void ppc4xx_enable_dma(unsigned int dmanr); | ||
560 | extern void ppc4xx_disable_dma(unsigned int dmanr); | ||
561 | extern void ppc4xx_set_dma_count(unsigned int dmanr, unsigned int count); | ||
562 | extern int ppc4xx_get_dma_residue(unsigned int dmanr); | ||
563 | extern void ppc4xx_set_dma_addr2(unsigned int dmanr, phys_addr_t src_dma_addr, | ||
564 | phys_addr_t dst_dma_addr); | ||
565 | extern int ppc4xx_enable_dma_interrupt(unsigned int dmanr); | ||
566 | extern int ppc4xx_disable_dma_interrupt(unsigned int dmanr); | ||
567 | extern int ppc4xx_clr_dma_status(unsigned int dmanr); | ||
568 | extern int ppc4xx_map_dma_port(unsigned int dmanr, unsigned int ocp_dma,short dma_chan); | ||
569 | extern int ppc4xx_disable_dma_port(unsigned int dmanr, unsigned int ocp_dma,short dma_chan); | ||
570 | extern int ppc4xx_set_dma_mode(unsigned int dmanr, unsigned int mode); | ||
571 | |||
572 | /* These are in kernel/dma.c: */ | ||
573 | |||
574 | /* reserve a DMA channel */ | ||
575 | extern int request_dma(unsigned int dmanr, const char *device_id); | ||
576 | /* release it again */ | ||
577 | extern void free_dma(unsigned int dmanr); | ||
578 | #endif | ||
579 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/ppc4xx_pic.h b/include/asm-ppc/ppc4xx_pic.h deleted file mode 100644 index e44261206f8b..000000000000 --- a/include/asm-ppc/ppc4xx_pic.h +++ /dev/null | |||
@@ -1,52 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/ppc4xx_pic.h | ||
3 | * | ||
4 | * Interrupt controller driver for PowerPC 4xx-based processors. | ||
5 | * | ||
6 | * Copyright (c) 1999 Grant Erickson <grant@lcse.umn.edu> | ||
7 | * | ||
8 | * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net> | ||
9 | * Copyright (c) 2004 Zultys Technologies | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify it | ||
12 | * under the terms of the GNU General Public License as published by the | ||
13 | * Free Software Foundation; either version 2 of the License, or (at your | ||
14 | * option) any later version. | ||
15 | */ | ||
16 | |||
17 | #ifndef __PPC4XX_PIC_H__ | ||
18 | #define __PPC4XX_PIC_H__ | ||
19 | |||
20 | #include <linux/types.h> | ||
21 | #include <linux/irq.h> | ||
22 | |||
23 | /* "Fixed" UIC settings (they are chip, not board specific), | ||
24 | * e.g. polarity/triggerring for internal interrupt sources. | ||
25 | * | ||
26 | * Platform port should provide NR_UICS-sized array named ppc4xx_core_uic_cfg | ||
27 | * with these "fixed" settings: .polarity contains exact value which will | ||
28 | * be written (masked with "ext_irq_mask") into UICx_PR register, | ||
29 | * .triggering - to UICx_TR. | ||
30 | * | ||
31 | * Settings for external IRQs can be specified separately by the | ||
32 | * board support code. In this case properly sized array of unsigned | ||
33 | * char named ppc4xx_uic_ext_irq_cfg should be filled with correct | ||
34 | * values using IRQ_SENSE_XXXXX and IRQ_POLARITY_XXXXXXX defines. | ||
35 | * | ||
36 | * If these arrays aren't provided, UIC initialization code keeps firmware | ||
37 | * configuration. Also, ppc4xx_uic_ext_irq_cfg implies ppc4xx_core_uic_cfg | ||
38 | * is defined. | ||
39 | * | ||
40 | * Both ppc4xx_core_uic_cfg and ppc4xx_uic_ext_irq_cfg are declared as | ||
41 | * "weak" symbols in ppc4xx_pic.c | ||
42 | * | ||
43 | */ | ||
44 | struct ppc4xx_uic_settings { | ||
45 | u32 polarity; | ||
46 | u32 triggering; | ||
47 | u32 ext_irq_mask; | ||
48 | }; | ||
49 | |||
50 | extern void ppc4xx_pic_init(void); | ||
51 | |||
52 | #endif /* __PPC4XX_PIC_H__ */ | ||
diff --git a/include/asm-ppc/ppc_sys.h b/include/asm-ppc/ppc_sys.h deleted file mode 100644 index d2fee41d600b..000000000000 --- a/include/asm-ppc/ppc_sys.h +++ /dev/null | |||
@@ -1,106 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/ppc_sys.h | ||
3 | * | ||
4 | * PPC system definitions and library functions | ||
5 | * | ||
6 | * Maintainer: Kumar Gala <galak@kernel.crashing.org> | ||
7 | * | ||
8 | * Copyright 2005 Freescale Semiconductor, Inc | ||
9 | * | ||
10 | * 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 | ||
12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
13 | * option) any later version. | ||
14 | */ | ||
15 | |||
16 | #ifdef __KERNEL__ | ||
17 | #ifndef __ASM_PPC_SYS_H | ||
18 | #define __ASM_PPC_SYS_H | ||
19 | |||
20 | #include <linux/init.h> | ||
21 | #include <linux/platform_device.h> | ||
22 | #include <linux/types.h> | ||
23 | |||
24 | #if defined(CONFIG_8260) | ||
25 | #include <asm/mpc8260.h> | ||
26 | #elif defined(CONFIG_8xx) | ||
27 | #include <asm/mpc8xx.h> | ||
28 | #elif defined(CONFIG_PPC_MPC52xx) | ||
29 | #include <asm/mpc52xx.h> | ||
30 | #elif defined(CONFIG_MPC10X_BRIDGE) | ||
31 | #include <asm/mpc10x.h> | ||
32 | #else | ||
33 | #error "need definition of ppc_sys_devices" | ||
34 | #endif | ||
35 | |||
36 | #define PPC_SYS_IORESOURCE_FIXUPPED 0x00000001 | ||
37 | |||
38 | struct ppc_sys_spec { | ||
39 | /* PPC sys is matched via (ID & mask) == value, id could be | ||
40 | * PVR, SVR, IMMR, * etc. */ | ||
41 | u32 mask; | ||
42 | u32 value; | ||
43 | u32 num_devices; | ||
44 | char *ppc_sys_name; | ||
45 | u8 config[NUM_PPC_SYS_DEVS]; | ||
46 | enum ppc_sys_devices *device_list; | ||
47 | }; | ||
48 | |||
49 | struct platform_notify_dev_map { | ||
50 | const char *bus_id; | ||
51 | void (*rtn)(struct platform_device * pdev, int idx); | ||
52 | }; | ||
53 | |||
54 | enum platform_device_func { | ||
55 | PPC_SYS_FUNC_DUMMY = 0, | ||
56 | PPC_SYS_FUNC_ETH = 1, | ||
57 | PPC_SYS_FUNC_UART = 2, | ||
58 | PPC_SYS_FUNC_HLDC = 3, | ||
59 | PPC_SYS_FUNC_USB = 4, | ||
60 | PPC_SYS_FUNC_IRDA = 5, | ||
61 | }; | ||
62 | |||
63 | #define PPC_SYS_CONFIG_DISABLED 1 | ||
64 | |||
65 | /* describes all specific chips and which devices they have on them */ | ||
66 | extern struct ppc_sys_spec ppc_sys_specs[]; | ||
67 | extern struct ppc_sys_spec *cur_ppc_sys_spec; | ||
68 | |||
69 | /* determine which specific SOC we are */ | ||
70 | extern void identify_ppc_sys_by_id(u32 id) __init; | ||
71 | extern void identify_ppc_sys_by_name(char *name) __init; | ||
72 | extern void identify_ppc_sys_by_name_and_id(char *name, u32 id) __init; | ||
73 | |||
74 | /* describes all devices that may exist in a given family of processors */ | ||
75 | extern struct platform_device ppc_sys_platform_devices[]; | ||
76 | |||
77 | /* allow any platform_device fixup to occur before device is registered */ | ||
78 | extern int (*ppc_sys_device_fixup) (struct platform_device * pdev); | ||
79 | |||
80 | /* Update all memory resources by paddr, call before platform_device_register */ | ||
81 | extern void ppc_sys_fixup_mem_resource(struct platform_device *pdev, | ||
82 | phys_addr_t paddr) __init; | ||
83 | |||
84 | /* Get platform_data pointer out of platform device, call before platform_device_register */ | ||
85 | extern void *ppc_sys_get_pdata(enum ppc_sys_devices dev) __init; | ||
86 | |||
87 | /* remove a device from the system */ | ||
88 | extern void ppc_sys_device_remove(enum ppc_sys_devices dev); | ||
89 | |||
90 | /* Function assignment stuff */ | ||
91 | void ppc_sys_device_initfunc(void); | ||
92 | void ppc_sys_device_setfunc(enum ppc_sys_devices dev, | ||
93 | enum platform_device_func func); | ||
94 | void ppc_sys_device_set_func_all(enum platform_device_func func); | ||
95 | |||
96 | void platform_notify_map(const struct platform_notify_dev_map *map, | ||
97 | struct device *dev); | ||
98 | |||
99 | /* Enable / disable stuff */ | ||
100 | void ppc_sys_device_disable(enum ppc_sys_devices dev); | ||
101 | void ppc_sys_device_enable(enum ppc_sys_devices dev); | ||
102 | void ppc_sys_device_enable_all(void); | ||
103 | void ppc_sys_device_disable_all(void); | ||
104 | |||
105 | #endif /* __ASM_PPC_SYS_H */ | ||
106 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/ppcboot.h b/include/asm-ppc/ppcboot.h deleted file mode 100644 index 3819e17cd7b0..000000000000 --- a/include/asm-ppc/ppcboot.h +++ /dev/null | |||
@@ -1,100 +0,0 @@ | |||
1 | /* | ||
2 | * (C) Copyright 2000, 2001 | ||
3 | * Wolfgang Denk, DENX Software Engineering, wd@denx.de. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of | ||
8 | * the License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
18 | * MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #ifndef __ASM_PPCBOOT_H__ | ||
22 | #define __ASM_PPCBOOT_H__ | ||
23 | |||
24 | /* | ||
25 | * Board information passed to kernel from PPCBoot | ||
26 | * | ||
27 | * include/asm-ppc/ppcboot.h | ||
28 | */ | ||
29 | |||
30 | #ifndef __ASSEMBLY__ | ||
31 | #include <linux/types.h> | ||
32 | |||
33 | typedef struct bd_info { | ||
34 | unsigned long bi_memstart; /* start of DRAM memory */ | ||
35 | unsigned long bi_memsize; /* size of DRAM memory in bytes */ | ||
36 | unsigned long bi_flashstart; /* start of FLASH memory */ | ||
37 | unsigned long bi_flashsize; /* size of FLASH memory */ | ||
38 | unsigned long bi_flashoffset; /* reserved area for startup monitor */ | ||
39 | unsigned long bi_sramstart; /* start of SRAM memory */ | ||
40 | unsigned long bi_sramsize; /* size of SRAM memory */ | ||
41 | #if defined(CONFIG_8xx) || defined(CONFIG_CPM2) | ||
42 | unsigned long bi_immr_base; /* base of IMMR register */ | ||
43 | #endif | ||
44 | #if defined(CONFIG_PPC_MPC52xx) | ||
45 | unsigned long bi_mbar_base; /* base of internal registers */ | ||
46 | #endif | ||
47 | unsigned long bi_bootflags; /* boot / reboot flag (for LynxOS) */ | ||
48 | unsigned long bi_ip_addr; /* IP Address */ | ||
49 | unsigned char bi_enetaddr[6]; /* Ethernet address */ | ||
50 | unsigned short bi_ethspeed; /* Ethernet speed in Mbps */ | ||
51 | unsigned long bi_intfreq; /* Internal Freq, in MHz */ | ||
52 | unsigned long bi_busfreq; /* Bus Freq, in MHz */ | ||
53 | #if defined(CONFIG_CPM2) | ||
54 | unsigned long bi_cpmfreq; /* CPM_CLK Freq, in MHz */ | ||
55 | unsigned long bi_brgfreq; /* BRG_CLK Freq, in MHz */ | ||
56 | unsigned long bi_sccfreq; /* SCC_CLK Freq, in MHz */ | ||
57 | unsigned long bi_vco; /* VCO Out from PLL, in MHz */ | ||
58 | #endif | ||
59 | #if defined(CONFIG_PPC_MPC52xx) | ||
60 | unsigned long bi_ipbfreq; /* IPB Bus Freq, in MHz */ | ||
61 | unsigned long bi_pcifreq; /* PCI Bus Freq, in MHz */ | ||
62 | #endif | ||
63 | unsigned long bi_baudrate; /* Console Baudrate */ | ||
64 | #if defined(CONFIG_4xx) | ||
65 | unsigned char bi_s_version[4]; /* Version of this structure */ | ||
66 | unsigned char bi_r_version[32]; /* Version of the ROM (IBM) */ | ||
67 | unsigned int bi_procfreq; /* CPU (Internal) Freq, in Hz */ | ||
68 | unsigned int bi_plb_busfreq; /* PLB Bus speed, in Hz */ | ||
69 | unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */ | ||
70 | unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */ | ||
71 | #endif | ||
72 | #if defined(CONFIG_HYMOD) | ||
73 | hymod_conf_t bi_hymod_conf; /* hymod configuration information */ | ||
74 | #endif | ||
75 | #if defined(CONFIG_EVB64260) || defined(CONFIG_405EP) || defined(CONFIG_44x) | ||
76 | /* second onboard ethernet port */ | ||
77 | unsigned char bi_enet1addr[6]; | ||
78 | #endif | ||
79 | #if defined(CONFIG_EVB64260) || defined(CONFIG_440GX) | ||
80 | /* third onboard ethernet ports */ | ||
81 | unsigned char bi_enet2addr[6]; | ||
82 | #endif | ||
83 | #if defined(CONFIG_440GX) | ||
84 | /* fourth onboard ethernet ports */ | ||
85 | unsigned char bi_enet3addr[6]; | ||
86 | #endif | ||
87 | #if defined(CONFIG_4xx) | ||
88 | unsigned int bi_opbfreq; /* OB clock in Hz */ | ||
89 | int bi_iic_fast[2]; /* Use fast i2c mode */ | ||
90 | #endif | ||
91 | #if defined(CONFIG_440GX) | ||
92 | int bi_phynum[4]; /* phy mapping */ | ||
93 | int bi_phymode[4]; /* phy mode */ | ||
94 | #endif | ||
95 | } bd_t; | ||
96 | |||
97 | #define bi_tbfreq bi_intfreq | ||
98 | |||
99 | #endif /* __ASSEMBLY__ */ | ||
100 | #endif /* __ASM_PPCBOOT_H__ */ | ||
diff --git a/include/asm-ppc/prep_nvram.h b/include/asm-ppc/prep_nvram.h deleted file mode 100644 index 6dbc36a84df2..000000000000 --- a/include/asm-ppc/prep_nvram.h +++ /dev/null | |||
@@ -1,153 +0,0 @@ | |||
1 | /* | ||
2 | * PreP compliant NVRAM access | ||
3 | */ | ||
4 | |||
5 | /* Corey Minyard (minyard@acm.org) - Stolen from PReP book. Per the | ||
6 | license I must say: | ||
7 | (C) Copyright (Corey Minyard), (1998). All rights reserved | ||
8 | */ | ||
9 | |||
10 | /* Structure map for NVRAM on PowerPC Reference Platform */ | ||
11 | /* All fields are either character/byte strings which are valid either | ||
12 | endian or they are big-endian numbers. | ||
13 | |||
14 | There are a number of Date and Time fields which are in RTC format, | ||
15 | big-endian. These are stored in UT (GMT). | ||
16 | |||
17 | For enum's: if given in hex then they are bit significant, i.e. only | ||
18 | one bit is on for each enum. | ||
19 | */ | ||
20 | #ifdef __KERNEL__ | ||
21 | #ifndef _PPC_PREP_NVRAM_H | ||
22 | #define _PPC_PREP_NVRAM_H | ||
23 | |||
24 | #define MAX_PREP_NVRAM 0x8000 | ||
25 | #define PREP_NVRAM_AS0 0x74 | ||
26 | #define PREP_NVRAM_AS1 0x75 | ||
27 | #define PREP_NVRAM_DATA 0x77 | ||
28 | |||
29 | #define NVSIZE 4096 /* size of NVRAM */ | ||
30 | #define OSAREASIZE 512 /* size of OSArea space */ | ||
31 | #define CONFSIZE 1024 /* guess at size of Configuration space */ | ||
32 | |||
33 | typedef struct _SECURITY { | ||
34 | unsigned long BootErrCnt; /* Count of boot password errors */ | ||
35 | unsigned long ConfigErrCnt; /* Count of config password errors */ | ||
36 | unsigned long BootErrorDT[2]; /* Date&Time from RTC of last error in pw */ | ||
37 | unsigned long ConfigErrorDT[2]; /* Date&Time from RTC of last error in pw */ | ||
38 | unsigned long BootCorrectDT[2]; /* Date&Time from RTC of last correct pw */ | ||
39 | unsigned long ConfigCorrectDT[2]; /* Date&Time from RTC of last correct pw */ | ||
40 | unsigned long BootSetDT[2]; /* Date&Time from RTC of last set of pw */ | ||
41 | unsigned long ConfigSetDT[2]; /* Date&Time from RTC of last set of pw */ | ||
42 | unsigned char Serial[16]; /* Box serial number */ | ||
43 | } SECURITY; | ||
44 | |||
45 | typedef enum _OS_ID { | ||
46 | Unknown = 0, | ||
47 | Firmware = 1, | ||
48 | AIX = 2, | ||
49 | NT = 3, | ||
50 | MKOS2 = 4, | ||
51 | MKAIX = 5, | ||
52 | Taligent = 6, | ||
53 | Solaris = 7, | ||
54 | MK = 12 | ||
55 | } OS_ID; | ||
56 | |||
57 | typedef struct _ERROR_LOG { | ||
58 | unsigned char ErrorLogEntry[40]; /* To be architected */ | ||
59 | } ERROR_LOG; | ||
60 | |||
61 | typedef enum _BOOT_STATUS { | ||
62 | BootStarted = 0x01, | ||
63 | BootFinished = 0x02, | ||
64 | RestartStarted = 0x04, | ||
65 | RestartFinished = 0x08, | ||
66 | PowerFailStarted = 0x10, | ||
67 | PowerFailFinished = 0x20, | ||
68 | ProcessorReady = 0x40, | ||
69 | ProcessorRunning = 0x80, | ||
70 | ProcessorStart = 0x0100 | ||
71 | } BOOT_STATUS; | ||
72 | |||
73 | typedef struct _RESTART_BLOCK { | ||
74 | unsigned short Version; | ||
75 | unsigned short Revision; | ||
76 | unsigned long ResumeReserve1[2]; | ||
77 | volatile unsigned long BootStatus; | ||
78 | unsigned long CheckSum; /* Checksum of RESTART_BLOCK */ | ||
79 | void * RestartAddress; | ||
80 | void * SaveAreaAddr; | ||
81 | unsigned long SaveAreaLength; | ||
82 | } RESTART_BLOCK; | ||
83 | |||
84 | typedef enum _OSAREA_USAGE { | ||
85 | Empty = 0, | ||
86 | Used = 1 | ||
87 | } OSAREA_USAGE; | ||
88 | |||
89 | typedef enum _PM_MODE { | ||
90 | Suspend = 0x80, /* Part of state is in memory */ | ||
91 | Normal = 0x00 /* No power management in effect */ | ||
92 | } PMMODE; | ||
93 | |||
94 | typedef struct _HEADER { | ||
95 | unsigned short Size; /* NVRAM size in K(1024) */ | ||
96 | unsigned char Version; /* Structure map different */ | ||
97 | unsigned char Revision; /* Structure map the same -may | ||
98 | be new values in old fields | ||
99 | in other words old code still works */ | ||
100 | unsigned short Crc1; /* check sum from beginning of nvram to OSArea */ | ||
101 | unsigned short Crc2; /* check sum of config */ | ||
102 | unsigned char LastOS; /* OS_ID */ | ||
103 | unsigned char Endian; /* B if big endian, L if little endian */ | ||
104 | unsigned char OSAreaUsage; /* OSAREA_USAGE */ | ||
105 | unsigned char PMMode; /* Shutdown mode */ | ||
106 | RESTART_BLOCK RestartBlock; | ||
107 | SECURITY Security; | ||
108 | ERROR_LOG ErrorLog[2]; | ||
109 | |||
110 | /* Global Environment information */ | ||
111 | void * GEAddress; | ||
112 | unsigned long GELength; | ||
113 | |||
114 | /* Date&Time from RTC of last change to Global Environment */ | ||
115 | unsigned long GELastWriteDT[2]; | ||
116 | |||
117 | /* Configuration information */ | ||
118 | void * ConfigAddress; | ||
119 | unsigned long ConfigLength; | ||
120 | |||
121 | /* Date&Time from RTC of last change to Configuration */ | ||
122 | unsigned long ConfigLastWriteDT[2]; | ||
123 | unsigned long ConfigCount; /* Count of entries in Configuration */ | ||
124 | |||
125 | /* OS dependent temp area */ | ||
126 | void * OSAreaAddress; | ||
127 | unsigned long OSAreaLength; | ||
128 | |||
129 | /* Date&Time from RTC of last change to OSAreaArea */ | ||
130 | unsigned long OSAreaLastWriteDT[2]; | ||
131 | } HEADER; | ||
132 | |||
133 | /* Here is the whole map of the NVRAM */ | ||
134 | typedef struct _NVRAM_MAP { | ||
135 | HEADER Header; | ||
136 | unsigned char GEArea[NVSIZE-CONFSIZE-OSAREASIZE-sizeof(HEADER)]; | ||
137 | unsigned char OSArea[OSAREASIZE]; | ||
138 | unsigned char ConfigArea[CONFSIZE]; | ||
139 | } NVRAM_MAP; | ||
140 | |||
141 | /* Routines to manipulate the NVRAM */ | ||
142 | void init_prep_nvram(void); | ||
143 | char *prep_nvram_get_var(const char *name); | ||
144 | char *prep_nvram_first_var(void); | ||
145 | char *prep_nvram_next_var(char *name); | ||
146 | |||
147 | /* Routines to read and write directly to the NVRAM */ | ||
148 | unsigned char prep_nvram_read_val(int addr); | ||
149 | void prep_nvram_write_val(int addr, | ||
150 | unsigned char val); | ||
151 | |||
152 | #endif /* _PPC_PREP_NVRAM_H */ | ||
153 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/prom.h b/include/asm-ppc/prom.h deleted file mode 100644 index 71f4c996fe75..000000000000 --- a/include/asm-ppc/prom.h +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | /* | ||
2 | * Definitions for talking to the Open Firmware PROM on | ||
3 | * Power Macintosh computers. | ||
4 | * | ||
5 | * Copyright (C) 1996 Paul Mackerras. | ||
6 | */ | ||
7 | #ifdef __KERNEL__ | ||
8 | #ifndef _PPC_PROM_H | ||
9 | #define _PPC_PROM_H | ||
10 | |||
11 | /* This is used in arch/ppc/mm/mem_pieces.h */ | ||
12 | struct reg_property { | ||
13 | unsigned int address; | ||
14 | unsigned int size; | ||
15 | }; | ||
16 | |||
17 | /* | ||
18 | * These macros assist in performing the address calculations that we | ||
19 | * need to do to access data when the kernel is running at an address | ||
20 | * that is different from the address that the kernel is linked at. | ||
21 | * The reloc_offset() function returns the difference between these | ||
22 | * two addresses and the macros simplify the process of adding or | ||
23 | * subtracting this offset to/from pointer values. | ||
24 | */ | ||
25 | extern unsigned long reloc_offset(void); | ||
26 | extern unsigned long add_reloc_offset(unsigned long); | ||
27 | extern unsigned long sub_reloc_offset(unsigned long); | ||
28 | |||
29 | #define PTRRELOC(x) ((typeof(x))add_reloc_offset((unsigned long)(x))) | ||
30 | #define PTRUNRELOC(x) ((typeof(x))sub_reloc_offset((unsigned long)(x))) | ||
31 | |||
32 | /* | ||
33 | * Fallback definitions since we don't support OF in arch/ppc any more. | ||
34 | */ | ||
35 | #define machine_is_compatible(x) 0 | ||
36 | #define of_find_compatible_node(f, t, c) NULL | ||
37 | #define of_get_property(p, n, l) NULL | ||
38 | |||
39 | #endif /* _PPC_PROM_H */ | ||
40 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/raven.h b/include/asm-ppc/raven.h deleted file mode 100644 index 66f52cc0a03c..000000000000 --- a/include/asm-ppc/raven.h +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/raven.h -- Raven MPIC chip. | ||
3 | * | ||
4 | * Copyright (C) 1998 Johnnie Peters | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file COPYING in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | |||
11 | #ifdef __KERNEL__ | ||
12 | #ifndef _ASMPPC_RAVEN_H | ||
13 | #define _ASMPPC_RAVEN_H | ||
14 | |||
15 | #define MVME2600_INT_SIO 0 | ||
16 | #define MVME2600_INT_FALCN_ECC_ERR 1 | ||
17 | #define MVME2600_INT_PCI_ETHERNET 2 | ||
18 | #define MVME2600_INT_PCI_SCSI 3 | ||
19 | #define MVME2600_INT_PCI_GRAPHICS 4 | ||
20 | #define MVME2600_INT_PCI_VME0 5 | ||
21 | #define MVME2600_INT_PCI_VME1 6 | ||
22 | #define MVME2600_INT_PCI_VME2 7 | ||
23 | #define MVME2600_INT_PCI_VME3 8 | ||
24 | #define MVME2600_INT_PCI_INTA 9 | ||
25 | #define MVME2600_INT_PCI_INTB 10 | ||
26 | #define MVME2600_INT_PCI_INTC 11 | ||
27 | #define MVME2600_INT_PCI_INTD 12 | ||
28 | #define MVME2600_INT_LM_SIG0 13 | ||
29 | #define MVME2600_INT_LM_SIG1 14 | ||
30 | |||
31 | extern struct hw_interrupt_type raven_pic; | ||
32 | |||
33 | extern int raven_init(void); | ||
34 | #endif /* _ASMPPC_RAVEN_H */ | ||
35 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/reg_booke.h b/include/asm-ppc/reg_booke.h deleted file mode 100644 index 91e96af88bd8..000000000000 --- a/include/asm-ppc/reg_booke.h +++ /dev/null | |||
@@ -1,443 +0,0 @@ | |||
1 | /* | ||
2 | * Contains register definitions common to the Book E PowerPC | ||
3 | * specification. Notice that while the IBM-40x series of CPUs | ||
4 | * are not true Book E PowerPCs, they borrowed a number of features | ||
5 | * before Book E was finalized, and are included here as well. Unfortunatly, | ||
6 | * they sometimes used different locations than true Book E CPUs did. | ||
7 | */ | ||
8 | #ifdef __KERNEL__ | ||
9 | #ifndef __ASM_PPC_REG_BOOKE_H__ | ||
10 | #define __ASM_PPC_REG_BOOKE_H__ | ||
11 | |||
12 | #ifndef __ASSEMBLY__ | ||
13 | /* Performance Monitor Registers */ | ||
14 | #define mfpmr(rn) ({unsigned int rval; \ | ||
15 | asm volatile("mfpmr %0," __stringify(rn) \ | ||
16 | : "=r" (rval)); rval;}) | ||
17 | #define mtpmr(rn, v) asm volatile("mtpmr " __stringify(rn) ",%0" : : "r" (v)) | ||
18 | #endif /* __ASSEMBLY__ */ | ||
19 | |||
20 | /* Freescale Book E Performance Monitor APU Registers */ | ||
21 | #define PMRN_PMC0 0x010 /* Performance Monitor Counter 0 */ | ||
22 | #define PMRN_PMC1 0x011 /* Performance Monitor Counter 1 */ | ||
23 | #define PMRN_PMC2 0x012 /* Performance Monitor Counter 1 */ | ||
24 | #define PMRN_PMC3 0x013 /* Performance Monitor Counter 1 */ | ||
25 | #define PMRN_PMLCA0 0x090 /* PM Local Control A0 */ | ||
26 | #define PMRN_PMLCA1 0x091 /* PM Local Control A1 */ | ||
27 | #define PMRN_PMLCA2 0x092 /* PM Local Control A2 */ | ||
28 | #define PMRN_PMLCA3 0x093 /* PM Local Control A3 */ | ||
29 | |||
30 | #define PMLCA_FC 0x80000000 /* Freeze Counter */ | ||
31 | #define PMLCA_FCS 0x40000000 /* Freeze in Supervisor */ | ||
32 | #define PMLCA_FCU 0x20000000 /* Freeze in User */ | ||
33 | #define PMLCA_FCM1 0x10000000 /* Freeze when PMM==1 */ | ||
34 | #define PMLCA_FCM0 0x08000000 /* Freeze when PMM==0 */ | ||
35 | #define PMLCA_CE 0x04000000 /* Condition Enable */ | ||
36 | |||
37 | #define PMLCA_EVENT_MASK 0x007f0000 /* Event field */ | ||
38 | #define PMLCA_EVENT_SHIFT 16 | ||
39 | |||
40 | #define PMRN_PMLCB0 0x110 /* PM Local Control B0 */ | ||
41 | #define PMRN_PMLCB1 0x111 /* PM Local Control B1 */ | ||
42 | #define PMRN_PMLCB2 0x112 /* PM Local Control B2 */ | ||
43 | #define PMRN_PMLCB3 0x113 /* PM Local Control B3 */ | ||
44 | |||
45 | #define PMLCB_THRESHMUL_MASK 0x0700 /* Threshhold Multiple Field */ | ||
46 | #define PMLCB_THRESHMUL_SHIFT 8 | ||
47 | |||
48 | #define PMLCB_THRESHOLD_MASK 0x003f /* Threshold Field */ | ||
49 | #define PMLCB_THRESHOLD_SHIFT 0 | ||
50 | |||
51 | #define PMRN_PMGC0 0x190 /* PM Global Control 0 */ | ||
52 | |||
53 | #define PMGC0_FAC 0x80000000 /* Freeze all Counters */ | ||
54 | #define PMGC0_PMIE 0x40000000 /* Interrupt Enable */ | ||
55 | #define PMGC0_FCECE 0x20000000 /* Freeze countes on | ||
56 | Enabled Condition or | ||
57 | Event */ | ||
58 | |||
59 | #define PMRN_UPMC0 0x000 /* User Performance Monitor Counter 0 */ | ||
60 | #define PMRN_UPMC1 0x001 /* User Performance Monitor Counter 1 */ | ||
61 | #define PMRN_UPMC2 0x002 /* User Performance Monitor Counter 1 */ | ||
62 | #define PMRN_UPMC3 0x003 /* User Performance Monitor Counter 1 */ | ||
63 | #define PMRN_UPMLCA0 0x080 /* User PM Local Control A0 */ | ||
64 | #define PMRN_UPMLCA1 0x081 /* User PM Local Control A1 */ | ||
65 | #define PMRN_UPMLCA2 0x082 /* User PM Local Control A2 */ | ||
66 | #define PMRN_UPMLCA3 0x083 /* User PM Local Control A3 */ | ||
67 | #define PMRN_UPMLCB0 0x100 /* User PM Local Control B0 */ | ||
68 | #define PMRN_UPMLCB1 0x101 /* User PM Local Control B1 */ | ||
69 | #define PMRN_UPMLCB2 0x102 /* User PM Local Control B2 */ | ||
70 | #define PMRN_UPMLCB3 0x103 /* User PM Local Control B3 */ | ||
71 | #define PMRN_UPMGC0 0x180 /* User PM Global Control 0 */ | ||
72 | |||
73 | |||
74 | /* Machine State Register (MSR) Fields */ | ||
75 | #define MSR_UCLE (1<<26) /* User-mode cache lock enable */ | ||
76 | #define MSR_SPE (1<<25) /* Enable SPE */ | ||
77 | #define MSR_DWE (1<<10) /* Debug Wait Enable */ | ||
78 | #define MSR_UBLE (1<<10) /* BTB lock enable (e500) */ | ||
79 | #define MSR_IS MSR_IR /* Instruction Space */ | ||
80 | #define MSR_DS MSR_DR /* Data Space */ | ||
81 | #define MSR_PMM (1<<2) /* Performance monitor mark bit */ | ||
82 | |||
83 | /* Default MSR for kernel mode. */ | ||
84 | #if defined (CONFIG_40x) | ||
85 | #define MSR_KERNEL (MSR_ME|MSR_RI|MSR_IR|MSR_DR|MSR_CE) | ||
86 | #elif defined(CONFIG_BOOKE) | ||
87 | #define MSR_KERNEL (MSR_ME|MSR_RI|MSR_CE) | ||
88 | #endif | ||
89 | |||
90 | /* Special Purpose Registers (SPRNs)*/ | ||
91 | #define SPRN_DECAR 0x036 /* Decrementer Auto Reload Register */ | ||
92 | #define SPRN_IVPR 0x03F /* Interrupt Vector Prefix Register */ | ||
93 | #define SPRN_USPRG0 0x100 /* User Special Purpose Register General 0 */ | ||
94 | #define SPRN_SPRG4R 0x104 /* Special Purpose Register General 4 Read */ | ||
95 | #define SPRN_SPRG5R 0x105 /* Special Purpose Register General 5 Read */ | ||
96 | #define SPRN_SPRG6R 0x106 /* Special Purpose Register General 6 Read */ | ||
97 | #define SPRN_SPRG7R 0x107 /* Special Purpose Register General 7 Read */ | ||
98 | #define SPRN_SPRG4W 0x114 /* Special Purpose Register General 4 Write */ | ||
99 | #define SPRN_SPRG5W 0x115 /* Special Purpose Register General 5 Write */ | ||
100 | #define SPRN_SPRG6W 0x116 /* Special Purpose Register General 6 Write */ | ||
101 | #define SPRN_SPRG7W 0x117 /* Special Purpose Register General 7 Write */ | ||
102 | #define SPRN_DBCR2 0x136 /* Debug Control Register 2 */ | ||
103 | #define SPRN_IAC3 0x13A /* Instruction Address Compare 3 */ | ||
104 | #define SPRN_IAC4 0x13B /* Instruction Address Compare 4 */ | ||
105 | #define SPRN_DVC1 0x13E /* Data Value Compare Register 1 */ | ||
106 | #define SPRN_DVC2 0x13F /* Data Value Compare Register 2 */ | ||
107 | #define SPRN_IVOR0 0x190 /* Interrupt Vector Offset Register 0 */ | ||
108 | #define SPRN_IVOR1 0x191 /* Interrupt Vector Offset Register 1 */ | ||
109 | #define SPRN_IVOR2 0x192 /* Interrupt Vector Offset Register 2 */ | ||
110 | #define SPRN_IVOR3 0x193 /* Interrupt Vector Offset Register 3 */ | ||
111 | #define SPRN_IVOR4 0x194 /* Interrupt Vector Offset Register 4 */ | ||
112 | #define SPRN_IVOR5 0x195 /* Interrupt Vector Offset Register 5 */ | ||
113 | #define SPRN_IVOR6 0x196 /* Interrupt Vector Offset Register 6 */ | ||
114 | #define SPRN_IVOR7 0x197 /* Interrupt Vector Offset Register 7 */ | ||
115 | #define SPRN_IVOR8 0x198 /* Interrupt Vector Offset Register 8 */ | ||
116 | #define SPRN_IVOR9 0x199 /* Interrupt Vector Offset Register 9 */ | ||
117 | #define SPRN_IVOR10 0x19A /* Interrupt Vector Offset Register 10 */ | ||
118 | #define SPRN_IVOR11 0x19B /* Interrupt Vector Offset Register 11 */ | ||
119 | #define SPRN_IVOR12 0x19C /* Interrupt Vector Offset Register 12 */ | ||
120 | #define SPRN_IVOR13 0x19D /* Interrupt Vector Offset Register 13 */ | ||
121 | #define SPRN_IVOR14 0x19E /* Interrupt Vector Offset Register 14 */ | ||
122 | #define SPRN_IVOR15 0x19F /* Interrupt Vector Offset Register 15 */ | ||
123 | #define SPRN_SPEFSCR 0x200 /* SPE & Embedded FP Status & Control */ | ||
124 | #define SPRN_BBEAR 0x201 /* Branch Buffer Entry Address Register */ | ||
125 | #define SPRN_BBTAR 0x202 /* Branch Buffer Target Address Register */ | ||
126 | #define SPRN_IVOR32 0x210 /* Interrupt Vector Offset Register 32 */ | ||
127 | #define SPRN_IVOR33 0x211 /* Interrupt Vector Offset Register 33 */ | ||
128 | #define SPRN_IVOR34 0x212 /* Interrupt Vector Offset Register 34 */ | ||
129 | #define SPRN_IVOR35 0x213 /* Interrupt Vector Offset Register 35 */ | ||
130 | #define SPRN_MCSRR0 0x23A /* Machine Check Save and Restore Register 0 */ | ||
131 | #define SPRN_MCSRR1 0x23B /* Machine Check Save and Restore Register 1 */ | ||
132 | #define SPRN_MCSR 0x23C /* Machine Check Status Register */ | ||
133 | #define SPRN_MCAR 0x23D /* Machine Check Address Register */ | ||
134 | #define SPRN_DSRR0 0x23E /* Debug Save and Restore Register 0 */ | ||
135 | #define SPRN_DSRR1 0x23F /* Debug Save and Restore Register 1 */ | ||
136 | #define SPRN_MAS0 0x270 /* MMU Assist Register 0 */ | ||
137 | #define SPRN_MAS1 0x271 /* MMU Assist Register 1 */ | ||
138 | #define SPRN_MAS2 0x272 /* MMU Assist Register 2 */ | ||
139 | #define SPRN_MAS3 0x273 /* MMU Assist Register 3 */ | ||
140 | #define SPRN_MAS4 0x274 /* MMU Assist Register 4 */ | ||
141 | #define SPRN_MAS5 0x275 /* MMU Assist Register 5 */ | ||
142 | #define SPRN_MAS6 0x276 /* MMU Assist Register 6 */ | ||
143 | #define SPRN_MAS7 0x3b0 /* MMU Assist Register 7 */ | ||
144 | #define SPRN_PID1 0x279 /* Process ID Register 1 */ | ||
145 | #define SPRN_PID2 0x27A /* Process ID Register 2 */ | ||
146 | #define SPRN_TLB0CFG 0x2B0 /* TLB 0 Config Register */ | ||
147 | #define SPRN_TLB1CFG 0x2B1 /* TLB 1 Config Register */ | ||
148 | #define SPRN_CCR1 0x378 /* Core Configuration Register 1 */ | ||
149 | #define SPRN_ZPR 0x3B0 /* Zone Protection Register (40x) */ | ||
150 | #define SPRN_MMUCR 0x3B2 /* MMU Control Register */ | ||
151 | #define SPRN_CCR0 0x3B3 /* Core Configuration Register 0 */ | ||
152 | #define SPRN_SGR 0x3B9 /* Storage Guarded Register */ | ||
153 | #define SPRN_DCWR 0x3BA /* Data Cache Write-thru Register */ | ||
154 | #define SPRN_SLER 0x3BB /* Little-endian real mode */ | ||
155 | #define SPRN_SU0R 0x3BC /* "User 0" real mode (40x) */ | ||
156 | #define SPRN_DCMP 0x3D1 /* Data TLB Compare Register */ | ||
157 | #define SPRN_ICDBDR 0x3D3 /* Instruction Cache Debug Data Register */ | ||
158 | #define SPRN_EVPR 0x3D6 /* Exception Vector Prefix Register */ | ||
159 | #define SPRN_L1CSR0 0x3F2 /* L1 Cache Control and Status Register 0 */ | ||
160 | #define SPRN_L1CSR1 0x3F3 /* L1 Cache Control and Status Register 1 */ | ||
161 | #define SPRN_PIT 0x3DB /* Programmable Interval Timer */ | ||
162 | #define SPRN_DCCR 0x3FA /* Data Cache Cacheability Register */ | ||
163 | #define SPRN_ICCR 0x3FB /* Instruction Cache Cacheability Register */ | ||
164 | #define SPRN_SVR 0x3FF /* System Version Register */ | ||
165 | |||
166 | /* | ||
167 | * SPRs which have conflicting definitions on true Book E versus classic, | ||
168 | * or IBM 40x. | ||
169 | */ | ||
170 | #ifdef CONFIG_BOOKE | ||
171 | #define SPRN_PID 0x030 /* Process ID */ | ||
172 | #define SPRN_PID0 SPRN_PID/* Process ID Register 0 */ | ||
173 | #define SPRN_CSRR0 0x03A /* Critical Save and Restore Register 0 */ | ||
174 | #define SPRN_CSRR1 0x03B /* Critical Save and Restore Register 1 */ | ||
175 | #define SPRN_DEAR 0x03D /* Data Error Address Register */ | ||
176 | #define SPRN_ESR 0x03E /* Exception Syndrome Register */ | ||
177 | #define SPRN_PIR 0x11E /* Processor Identification Register */ | ||
178 | #define SPRN_DBSR 0x130 /* Debug Status Register */ | ||
179 | #define SPRN_DBCR0 0x134 /* Debug Control Register 0 */ | ||
180 | #define SPRN_DBCR1 0x135 /* Debug Control Register 1 */ | ||
181 | #define SPRN_IAC1 0x138 /* Instruction Address Compare 1 */ | ||
182 | #define SPRN_IAC2 0x139 /* Instruction Address Compare 2 */ | ||
183 | #define SPRN_DAC1 0x13C /* Data Address Compare 1 */ | ||
184 | #define SPRN_DAC2 0x13D /* Data Address Compare 2 */ | ||
185 | #define SPRN_TSR 0x150 /* Timer Status Register */ | ||
186 | #define SPRN_TCR 0x154 /* Timer Control Register */ | ||
187 | #endif /* Book E */ | ||
188 | #ifdef CONFIG_40x | ||
189 | #define SPRN_PID 0x3B1 /* Process ID */ | ||
190 | #define SPRN_DBCR1 0x3BD /* Debug Control Register 1 */ | ||
191 | #define SPRN_ESR 0x3D4 /* Exception Syndrome Register */ | ||
192 | #define SPRN_DEAR 0x3D5 /* Data Error Address Register */ | ||
193 | #define SPRN_TSR 0x3D8 /* Timer Status Register */ | ||
194 | #define SPRN_TCR 0x3DA /* Timer Control Register */ | ||
195 | #define SPRN_SRR2 0x3DE /* Save/Restore Register 2 */ | ||
196 | #define SPRN_SRR3 0x3DF /* Save/Restore Register 3 */ | ||
197 | #define SPRN_DBSR 0x3F0 /* Debug Status Register */ | ||
198 | #define SPRN_DBCR0 0x3F2 /* Debug Control Register 0 */ | ||
199 | #define SPRN_DAC1 0x3F6 /* Data Address Compare 1 */ | ||
200 | #define SPRN_DAC2 0x3F7 /* Data Address Compare 2 */ | ||
201 | #define SPRN_CSRR0 SPRN_SRR2 /* Critical Save and Restore Register 0 */ | ||
202 | #define SPRN_CSRR1 SPRN_SRR3 /* Critical Save and Restore Register 1 */ | ||
203 | #endif | ||
204 | |||
205 | /* Bit definitions for CCR1. */ | ||
206 | #define CCR1_DPC 0x00000100 /* Disable L1 I-Cache/D-Cache parity checking */ | ||
207 | #define CCR1_TCS 0x00000080 /* Timer Clock Select */ | ||
208 | |||
209 | /* Bit definitions for the MCSR. */ | ||
210 | #ifdef CONFIG_4xx | ||
211 | #define MCSR_MCS 0x80000000 /* Machine Check Summary */ | ||
212 | #define MCSR_IB 0x40000000 /* Instruction PLB Error */ | ||
213 | #define MCSR_DRB 0x20000000 /* Data Read PLB Error */ | ||
214 | #define MCSR_DWB 0x10000000 /* Data Write PLB Error */ | ||
215 | #define MCSR_TLBP 0x08000000 /* TLB Parity Error */ | ||
216 | #define MCSR_ICP 0x04000000 /* I-Cache Parity Error */ | ||
217 | #define MCSR_DCSP 0x02000000 /* D-Cache Search Parity Error */ | ||
218 | #define MCSR_DCFP 0x01000000 /* D-Cache Flush Parity Error */ | ||
219 | #define MCSR_IMPE 0x00800000 /* Imprecise Machine Check Exception */ | ||
220 | #endif | ||
221 | |||
222 | /* Bit definitions for the DBSR. */ | ||
223 | /* | ||
224 | * DBSR bits which have conflicting definitions on true Book E versus IBM 40x. | ||
225 | */ | ||
226 | #ifdef CONFIG_BOOKE | ||
227 | #define DBSR_IC 0x08000000 /* Instruction Completion */ | ||
228 | #define DBSR_BT 0x04000000 /* Branch Taken */ | ||
229 | #define DBSR_TIE 0x01000000 /* Trap Instruction Event */ | ||
230 | #define DBSR_IAC1 0x00800000 /* Instr Address Compare 1 Event */ | ||
231 | #define DBSR_IAC2 0x00400000 /* Instr Address Compare 2 Event */ | ||
232 | #define DBSR_IAC3 0x00200000 /* Instr Address Compare 3 Event */ | ||
233 | #define DBSR_IAC4 0x00100000 /* Instr Address Compare 4 Event */ | ||
234 | #define DBSR_DAC1R 0x00080000 /* Data Addr Compare 1 Read Event */ | ||
235 | #define DBSR_DAC1W 0x00040000 /* Data Addr Compare 1 Write Event */ | ||
236 | #define DBSR_DAC2R 0x00020000 /* Data Addr Compare 2 Read Event */ | ||
237 | #define DBSR_DAC2W 0x00010000 /* Data Addr Compare 2 Write Event */ | ||
238 | #endif | ||
239 | #ifdef CONFIG_40x | ||
240 | #define DBSR_IC 0x80000000 /* Instruction Completion */ | ||
241 | #define DBSR_BT 0x40000000 /* Branch taken */ | ||
242 | #define DBSR_TIE 0x10000000 /* Trap Instruction debug Event */ | ||
243 | #define DBSR_IAC1 0x04000000 /* Instruction Address Compare 1 Event */ | ||
244 | #define DBSR_IAC2 0x02000000 /* Instruction Address Compare 2 Event */ | ||
245 | #define DBSR_IAC3 0x00080000 /* Instruction Address Compare 3 Event */ | ||
246 | #define DBSR_IAC4 0x00040000 /* Instruction Address Compare 4 Event */ | ||
247 | #define DBSR_DAC1R 0x01000000 /* Data Address Compare 1 Read Event */ | ||
248 | #define DBSR_DAC1W 0x00800000 /* Data Address Compare 1 Write Event */ | ||
249 | #define DBSR_DAC2R 0x00400000 /* Data Address Compare 2 Read Event */ | ||
250 | #define DBSR_DAC2W 0x00200000 /* Data Address Compare 2 Write Event */ | ||
251 | #endif | ||
252 | |||
253 | /* Bit definitions related to the ESR. */ | ||
254 | #define ESR_MCI 0x80000000 /* Machine Check - Instruction */ | ||
255 | #define ESR_IMCP 0x80000000 /* Instr. Machine Check - Protection */ | ||
256 | #define ESR_IMCN 0x40000000 /* Instr. Machine Check - Non-config */ | ||
257 | #define ESR_IMCB 0x20000000 /* Instr. Machine Check - Bus error */ | ||
258 | #define ESR_IMCT 0x10000000 /* Instr. Machine Check - Timeout */ | ||
259 | #define ESR_PIL 0x08000000 /* Program Exception - Illegal */ | ||
260 | #define ESR_PPR 0x04000000 /* Program Exception - Privileged */ | ||
261 | #define ESR_PTR 0x02000000 /* Program Exception - Trap */ | ||
262 | #define ESR_FP 0x01000000 /* Floating Point Operation */ | ||
263 | #define ESR_DST 0x00800000 /* Storage Exception - Data miss */ | ||
264 | #define ESR_DIZ 0x00400000 /* Storage Exception - Zone fault */ | ||
265 | #define ESR_ST 0x00800000 /* Store Operation */ | ||
266 | #define ESR_DLK 0x00200000 /* Data Cache Locking */ | ||
267 | #define ESR_ILK 0x00100000 /* Instr. Cache Locking */ | ||
268 | #define ESR_PUO 0x00040000 /* Unimplemented Operation exception */ | ||
269 | #define ESR_BO 0x00020000 /* Byte Ordering */ | ||
270 | |||
271 | /* Bit definitions related to the DBCR0. */ | ||
272 | #define DBCR0_EDM 0x80000000 /* External Debug Mode */ | ||
273 | #define DBCR0_IDM 0x40000000 /* Internal Debug Mode */ | ||
274 | #define DBCR0_RST 0x30000000 /* all the bits in the RST field */ | ||
275 | #define DBCR0_RST_SYSTEM 0x30000000 /* System Reset */ | ||
276 | #define DBCR0_RST_CHIP 0x20000000 /* Chip Reset */ | ||
277 | #define DBCR0_RST_CORE 0x10000000 /* Core Reset */ | ||
278 | #define DBCR0_RST_NONE 0x00000000 /* No Reset */ | ||
279 | #define DBCR0_IC 0x08000000 /* Instruction Completion */ | ||
280 | #define DBCR0_BT 0x04000000 /* Branch Taken */ | ||
281 | #define DBCR0_EDE 0x02000000 /* Exception Debug Event */ | ||
282 | #define DBCR0_TDE 0x01000000 /* TRAP Debug Event */ | ||
283 | #define DBCR0_IA1 0x00800000 /* Instr Addr compare 1 enable */ | ||
284 | #define DBCR0_IA2 0x00400000 /* Instr Addr compare 2 enable */ | ||
285 | #define DBCR0_IA12 0x00200000 /* Instr Addr 1-2 range enable */ | ||
286 | #define DBCR0_IA12X 0x00100000 /* Instr Addr 1-2 range eXclusive */ | ||
287 | #define DBCR0_IA3 0x00080000 /* Instr Addr compare 3 enable */ | ||
288 | #define DBCR0_IA4 0x00040000 /* Instr Addr compare 4 enable */ | ||
289 | #define DBCR0_IA34 0x00020000 /* Instr Addr 3-4 range Enable */ | ||
290 | #define DBCR0_IA34X 0x00010000 /* Instr Addr 3-4 range eXclusive */ | ||
291 | #define DBCR0_IA12T 0x00008000 /* Instr Addr 1-2 range Toggle */ | ||
292 | #define DBCR0_IA34T 0x00004000 /* Instr Addr 3-4 range Toggle */ | ||
293 | #define DBCR0_FT 0x00000001 /* Freeze Timers on debug event */ | ||
294 | |||
295 | /* Bit definitions related to the TCR. */ | ||
296 | #define TCR_WP(x) (((x)&0x3)<<30) /* WDT Period */ | ||
297 | #define TCR_WP_MASK TCR_WP(3) | ||
298 | #define WP_2_17 0 /* 2^17 clocks */ | ||
299 | #define WP_2_21 1 /* 2^21 clocks */ | ||
300 | #define WP_2_25 2 /* 2^25 clocks */ | ||
301 | #define WP_2_29 3 /* 2^29 clocks */ | ||
302 | #define TCR_WRC(x) (((x)&0x3)<<28) /* WDT Reset Control */ | ||
303 | #define TCR_WRC_MASK TCR_WRC(3) | ||
304 | #define WRC_NONE 0 /* No reset will occur */ | ||
305 | #define WRC_CORE 1 /* Core reset will occur */ | ||
306 | #define WRC_CHIP 2 /* Chip reset will occur */ | ||
307 | #define WRC_SYSTEM 3 /* System reset will occur */ | ||
308 | #define TCR_WIE 0x08000000 /* WDT Interrupt Enable */ | ||
309 | #define TCR_PIE 0x04000000 /* PIT Interrupt Enable */ | ||
310 | #define TCR_DIE TCR_PIE /* DEC Interrupt Enable */ | ||
311 | #define TCR_FP(x) (((x)&0x3)<<24) /* FIT Period */ | ||
312 | #define TCR_FP_MASK TCR_FP(3) | ||
313 | #define FP_2_9 0 /* 2^9 clocks */ | ||
314 | #define FP_2_13 1 /* 2^13 clocks */ | ||
315 | #define FP_2_17 2 /* 2^17 clocks */ | ||
316 | #define FP_2_21 3 /* 2^21 clocks */ | ||
317 | #define TCR_FIE 0x00800000 /* FIT Interrupt Enable */ | ||
318 | #define TCR_ARE 0x00400000 /* Auto Reload Enable */ | ||
319 | |||
320 | /* Bit definitions for the TSR. */ | ||
321 | #define TSR_ENW 0x80000000 /* Enable Next Watchdog */ | ||
322 | #define TSR_WIS 0x40000000 /* WDT Interrupt Status */ | ||
323 | #define TSR_WRS(x) (((x)&0x3)<<28) /* WDT Reset Status */ | ||
324 | #define WRS_NONE 0 /* No WDT reset occurred */ | ||
325 | #define WRS_CORE 1 /* WDT forced core reset */ | ||
326 | #define WRS_CHIP 2 /* WDT forced chip reset */ | ||
327 | #define WRS_SYSTEM 3 /* WDT forced system reset */ | ||
328 | #define TSR_PIS 0x08000000 /* PIT Interrupt Status */ | ||
329 | #define TSR_DIS TSR_PIS /* DEC Interrupt Status */ | ||
330 | #define TSR_FIS 0x04000000 /* FIT Interrupt Status */ | ||
331 | |||
332 | /* Bit definitions for the DCCR. */ | ||
333 | #define DCCR_NOCACHE 0 /* Noncacheable */ | ||
334 | #define DCCR_CACHE 1 /* Cacheable */ | ||
335 | |||
336 | /* Bit definitions for DCWR. */ | ||
337 | #define DCWR_COPY 0 /* Copy-back */ | ||
338 | #define DCWR_WRITE 1 /* Write-through */ | ||
339 | |||
340 | /* Bit definitions for ICCR. */ | ||
341 | #define ICCR_NOCACHE 0 /* Noncacheable */ | ||
342 | #define ICCR_CACHE 1 /* Cacheable */ | ||
343 | |||
344 | /* Bit definitions for L1CSR0. */ | ||
345 | #define L1CSR0_CLFC 0x00000100 /* Cache Lock Bits Flash Clear */ | ||
346 | #define L1CSR0_DCFI 0x00000002 /* Data Cache Flash Invalidate */ | ||
347 | #define L1CSR0_CFI 0x00000002 /* Cache Flash Invalidate */ | ||
348 | #define L1CSR0_DCE 0x00000001 /* Data Cache Enable */ | ||
349 | |||
350 | /* Bit definitions for L1CSR1. */ | ||
351 | #define L1CSR1_ICLFR 0x00000100 /* Instr Cache Lock Bits Flash Reset */ | ||
352 | #define L1CSR1_ICFI 0x00000002 /* Instr Cache Flash Invalidate */ | ||
353 | #define L1CSR1_ICE 0x00000001 /* Instr Cache Enable */ | ||
354 | |||
355 | /* Bit definitions for SGR. */ | ||
356 | #define SGR_NORMAL 0 /* Speculative fetching allowed. */ | ||
357 | #define SGR_GUARDED 1 /* Speculative fetching disallowed. */ | ||
358 | |||
359 | /* Bit definitions for SPEFSCR. */ | ||
360 | #define SPEFSCR_SOVH 0x80000000 /* Summary integer overflow high */ | ||
361 | #define SPEFSCR_OVH 0x40000000 /* Integer overflow high */ | ||
362 | #define SPEFSCR_FGH 0x20000000 /* Embedded FP guard bit high */ | ||
363 | #define SPEFSCR_FXH 0x10000000 /* Embedded FP sticky bit high */ | ||
364 | #define SPEFSCR_FINVH 0x08000000 /* Embedded FP invalid operation high */ | ||
365 | #define SPEFSCR_FDBZH 0x04000000 /* Embedded FP div by zero high */ | ||
366 | #define SPEFSCR_FUNFH 0x02000000 /* Embedded FP underflow high */ | ||
367 | #define SPEFSCR_FOVFH 0x01000000 /* Embedded FP overflow high */ | ||
368 | #define SPEFSCR_FINXS 0x00200000 /* Embedded FP inexact sticky */ | ||
369 | #define SPEFSCR_FINVS 0x00100000 /* Embedded FP invalid op. sticky */ | ||
370 | #define SPEFSCR_FDBZS 0x00080000 /* Embedded FP div by zero sticky */ | ||
371 | #define SPEFSCR_FUNFS 0x00040000 /* Embedded FP underflow sticky */ | ||
372 | #define SPEFSCR_FOVFS 0x00020000 /* Embedded FP overflow sticky */ | ||
373 | #define SPEFSCR_MODE 0x00010000 /* Embedded FP mode */ | ||
374 | #define SPEFSCR_SOV 0x00008000 /* Integer summary overflow */ | ||
375 | #define SPEFSCR_OV 0x00004000 /* Integer overflow */ | ||
376 | #define SPEFSCR_FG 0x00002000 /* Embedded FP guard bit */ | ||
377 | #define SPEFSCR_FX 0x00001000 /* Embedded FP sticky bit */ | ||
378 | #define SPEFSCR_FINV 0x00000800 /* Embedded FP invalid operation */ | ||
379 | #define SPEFSCR_FDBZ 0x00000400 /* Embedded FP div by zero */ | ||
380 | #define SPEFSCR_FUNF 0x00000200 /* Embedded FP underflow */ | ||
381 | #define SPEFSCR_FOVF 0x00000100 /* Embedded FP overflow */ | ||
382 | #define SPEFSCR_FINXE 0x00000040 /* Embedded FP inexact enable */ | ||
383 | #define SPEFSCR_FINVE 0x00000020 /* Embedded FP invalid op. enable */ | ||
384 | #define SPEFSCR_FDBZE 0x00000010 /* Embedded FP div by zero enable */ | ||
385 | #define SPEFSCR_FUNFE 0x00000008 /* Embedded FP underflow enable */ | ||
386 | #define SPEFSCR_FOVFE 0x00000004 /* Embedded FP overflow enable */ | ||
387 | #define SPEFSCR_FRMC 0x00000003 /* Embedded FP rounding mode control */ | ||
388 | |||
389 | /* | ||
390 | * The IBM-403 is an even more odd special case, as it is much | ||
391 | * older than the IBM-405 series. We put these down here incase someone | ||
392 | * wishes to support these machines again. | ||
393 | */ | ||
394 | #ifdef CONFIG_403GCX | ||
395 | /* Special Purpose Registers (SPRNs)*/ | ||
396 | #define SPRN_TBHU 0x3CC /* Time Base High User-mode */ | ||
397 | #define SPRN_TBLU 0x3CD /* Time Base Low User-mode */ | ||
398 | #define SPRN_CDBCR 0x3D7 /* Cache Debug Control Register */ | ||
399 | #define SPRN_TBHI 0x3DC /* Time Base High */ | ||
400 | #define SPRN_TBLO 0x3DD /* Time Base Low */ | ||
401 | #define SPRN_DBCR 0x3F2 /* Debug Control Regsiter */ | ||
402 | #define SPRN_PBL1 0x3FC /* Protection Bound Lower 1 */ | ||
403 | #define SPRN_PBL2 0x3FE /* Protection Bound Lower 2 */ | ||
404 | #define SPRN_PBU1 0x3FD /* Protection Bound Upper 1 */ | ||
405 | #define SPRN_PBU2 0x3FF /* Protection Bound Upper 2 */ | ||
406 | |||
407 | |||
408 | /* Bit definitions for the DBCR. */ | ||
409 | #define DBCR_EDM DBCR0_EDM | ||
410 | #define DBCR_IDM DBCR0_IDM | ||
411 | #define DBCR_RST(x) (((x) & 0x3) << 28) | ||
412 | #define DBCR_RST_NONE 0 | ||
413 | #define DBCR_RST_CORE 1 | ||
414 | #define DBCR_RST_CHIP 2 | ||
415 | #define DBCR_RST_SYSTEM 3 | ||
416 | #define DBCR_IC DBCR0_IC /* Instruction Completion Debug Evnt */ | ||
417 | #define DBCR_BT DBCR0_BT /* Branch Taken Debug Event */ | ||
418 | #define DBCR_EDE DBCR0_EDE /* Exception Debug Event */ | ||
419 | #define DBCR_TDE DBCR0_TDE /* TRAP Debug Event */ | ||
420 | #define DBCR_FER 0x00F80000 /* First Events Remaining Mask */ | ||
421 | #define DBCR_FT 0x00040000 /* Freeze Timers on Debug Event */ | ||
422 | #define DBCR_IA1 0x00020000 /* Instr. Addr. Compare 1 Enable */ | ||
423 | #define DBCR_IA2 0x00010000 /* Instr. Addr. Compare 2 Enable */ | ||
424 | #define DBCR_D1R 0x00008000 /* Data Addr. Compare 1 Read Enable */ | ||
425 | #define DBCR_D1W 0x00004000 /* Data Addr. Compare 1 Write Enable */ | ||
426 | #define DBCR_D1S(x) (((x) & 0x3) << 12) /* Data Adrr. Compare 1 Size */ | ||
427 | #define DAC_BYTE 0 | ||
428 | #define DAC_HALF 1 | ||
429 | #define DAC_WORD 2 | ||
430 | #define DAC_QUAD 3 | ||
431 | #define DBCR_D2R 0x00000800 /* Data Addr. Compare 2 Read Enable */ | ||
432 | #define DBCR_D2W 0x00000400 /* Data Addr. Compare 2 Write Enable */ | ||
433 | #define DBCR_D2S(x) (((x) & 0x3) << 8) /* Data Addr. Compare 2 Size */ | ||
434 | #define DBCR_SBT 0x00000040 /* Second Branch Taken Debug Event */ | ||
435 | #define DBCR_SED 0x00000020 /* Second Exception Debug Event */ | ||
436 | #define DBCR_STD 0x00000010 /* Second Trap Debug Event */ | ||
437 | #define DBCR_SIA 0x00000008 /* Second IAC Enable */ | ||
438 | #define DBCR_SDA 0x00000004 /* Second DAC Enable */ | ||
439 | #define DBCR_JOI 0x00000002 /* JTAG Serial Outbound Int. Enable */ | ||
440 | #define DBCR_JII 0x00000001 /* JTAG Serial Inbound Int. Enable */ | ||
441 | #endif /* 403GCX */ | ||
442 | #endif /* __ASM_PPC_REG_BOOKE_H__ */ | ||
443 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/residual.h b/include/asm-ppc/residual.h deleted file mode 100644 index 934810d25667..000000000000 --- a/include/asm-ppc/residual.h +++ /dev/null | |||
@@ -1,350 +0,0 @@ | |||
1 | /* 7/18/95 */ | ||
2 | /*----------------------------------------------------------------------------*/ | ||
3 | /* Residual Data header definitions and prototypes */ | ||
4 | /*----------------------------------------------------------------------------*/ | ||
5 | |||
6 | /* Structure map for RESIDUAL on PowerPC Reference Platform */ | ||
7 | /* residual.h - Residual data structure passed in r3. */ | ||
8 | /* Load point passed in r4 to boot image. */ | ||
9 | /* For enum's: if given in hex then they are bit significant, */ | ||
10 | /* i.e. only one bit is on for each enum */ | ||
11 | /* Reserved fields must be filled with zeros. */ | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | #ifndef _RESIDUAL_ | ||
15 | #define _RESIDUAL_ | ||
16 | |||
17 | #ifndef __ASSEMBLY__ | ||
18 | |||
19 | #define MAX_CPUS 32 /* These should be set to the maximum */ | ||
20 | #define MAX_MEMS 64 /* number possible for this system. */ | ||
21 | #define MAX_DEVICES 256 /* Changing these will change the */ | ||
22 | #define AVE_PNP_SIZE 32 /* structure, hence the version of */ | ||
23 | #define MAX_MEM_SEGS 64 /* this header file. */ | ||
24 | |||
25 | /*----------------------------------------------------------------------------*/ | ||
26 | /* Public structures... */ | ||
27 | /*----------------------------------------------------------------------------*/ | ||
28 | |||
29 | #include <asm/pnp.h> | ||
30 | |||
31 | typedef enum _L1CACHE_TYPE { | ||
32 | NoneCAC = 0, | ||
33 | SplitCAC = 1, | ||
34 | CombinedCAC = 2 | ||
35 | } L1CACHE_TYPE; | ||
36 | |||
37 | typedef enum _TLB_TYPE { | ||
38 | NoneTLB = 0, | ||
39 | SplitTLB = 1, | ||
40 | CombinedTLB = 2 | ||
41 | } TLB_TYPE; | ||
42 | |||
43 | typedef enum _FIRMWARE_SUPPORT { | ||
44 | Conventional = 0x01, | ||
45 | OpenFirmware = 0x02, | ||
46 | Diagnostics = 0x04, | ||
47 | LowDebug = 0x08, | ||
48 | Multiboot = 0x10, | ||
49 | LowClient = 0x20, | ||
50 | Hex41 = 0x40, | ||
51 | FAT = 0x80, | ||
52 | ISO9660 = 0x0100, | ||
53 | SCSI_InitiatorID_Override = 0x0200, | ||
54 | Tape_Boot = 0x0400, | ||
55 | FW_Boot_Path = 0x0800 | ||
56 | } FIRMWARE_SUPPORT; | ||
57 | |||
58 | typedef enum _FIRMWARE_SUPPLIERS { | ||
59 | IBMFirmware = 0x00, | ||
60 | MotoFirmware = 0x01, /* 7/18/95 */ | ||
61 | FirmWorks = 0x02, /* 10/5/95 */ | ||
62 | Bull = 0x03, /* 04/03/96 */ | ||
63 | } FIRMWARE_SUPPLIERS; | ||
64 | |||
65 | typedef enum _ENDIAN_SWITCH_METHODS { | ||
66 | UsePort92 = 0x01, | ||
67 | UsePCIConfigA8 = 0x02, | ||
68 | UseFF001030 = 0x03, | ||
69 | } ENDIAN_SWITCH_METHODS; | ||
70 | |||
71 | typedef enum _SPREAD_IO_METHODS { | ||
72 | UsePort850 = 0x00, | ||
73 | /*UsePCIConfigA8 = 0x02,*/ | ||
74 | } SPREAD_IO_METHODS; | ||
75 | |||
76 | typedef struct _VPD { | ||
77 | |||
78 | /* Box dependent stuff */ | ||
79 | unsigned char PrintableModel[32]; /* Null terminated string. | ||
80 | Must be of the form: | ||
81 | vvv,<20h>,<model designation>,<0x0> | ||
82 | where vvv is the vendor ID | ||
83 | e.g. IBM PPS MODEL 6015<0x0> */ | ||
84 | unsigned char Serial[16]; /* 12/94: | ||
85 | Serial Number; must be of the form: | ||
86 | vvv<serial number> where vvv is the | ||
87 | vendor ID. | ||
88 | e.g. IBM60151234567<20h><20h> */ | ||
89 | unsigned char Reserved[48]; | ||
90 | unsigned long FirmwareSupplier; /* See FirmwareSuppliers enum */ | ||
91 | unsigned long FirmwareSupports; /* See FirmwareSupport enum */ | ||
92 | unsigned long NvramSize; /* Size of nvram in bytes */ | ||
93 | unsigned long NumSIMMSlots; | ||
94 | unsigned short EndianSwitchMethod; /* See EndianSwitchMethods enum */ | ||
95 | unsigned short SpreadIOMethod; /* See SpreadIOMethods enum */ | ||
96 | unsigned long SmpIar; | ||
97 | unsigned long RAMErrLogOffset; /* Heap offset to error log */ | ||
98 | unsigned long Reserved5; | ||
99 | unsigned long Reserved6; | ||
100 | unsigned long ProcessorHz; /* Processor clock frequency in Hertz */ | ||
101 | unsigned long ProcessorBusHz; /* Processor bus clock frequency */ | ||
102 | unsigned long Reserved7; | ||
103 | unsigned long TimeBaseDivisor; /* (Bus clocks per timebase tic)*1000 */ | ||
104 | unsigned long WordWidth; /* Word width in bits */ | ||
105 | unsigned long PageSize; /* Page size in bytes */ | ||
106 | unsigned long CoherenceBlockSize; /* Unit of transfer in/out of cache | ||
107 | for which coherency is maintained; | ||
108 | normally <= CacheLineSize. */ | ||
109 | unsigned long GranuleSize; /* Unit of lock allocation to avoid */ | ||
110 | /* false sharing of locks. */ | ||
111 | |||
112 | /* L1 Cache variables */ | ||
113 | unsigned long CacheSize; /* L1 Cache size in KB. This is the */ | ||
114 | /* total size of the L1, whether */ | ||
115 | /* combined or split */ | ||
116 | unsigned long CacheAttrib; /* L1CACHE_TYPE */ | ||
117 | unsigned long CacheAssoc; /* L1 Cache associativity. Use this | ||
118 | for combined cache. If split, put | ||
119 | zeros here. */ | ||
120 | unsigned long CacheLineSize; /* L1 Cache line size in bytes. Use | ||
121 | for combined cache. If split, put | ||
122 | zeros here. */ | ||
123 | /* For split L1 Cache: (= combined if combined cache) */ | ||
124 | unsigned long I_CacheSize; | ||
125 | unsigned long I_CacheAssoc; | ||
126 | unsigned long I_CacheLineSize; | ||
127 | unsigned long D_CacheSize; | ||
128 | unsigned long D_CacheAssoc; | ||
129 | unsigned long D_CacheLineSize; | ||
130 | |||
131 | /* Translation Lookaside Buffer variables */ | ||
132 | unsigned long TLBSize; /* Total number of TLBs on the system */ | ||
133 | unsigned long TLBAttrib; /* Combined I+D or split TLB */ | ||
134 | unsigned long TLBAssoc; /* TLB Associativity. Use this for | ||
135 | combined TLB. If split, put zeros | ||
136 | here. */ | ||
137 | /* For split TLB: (= combined if combined TLB) */ | ||
138 | unsigned long I_TLBSize; | ||
139 | unsigned long I_TLBAssoc; | ||
140 | unsigned long D_TLBSize; | ||
141 | unsigned long D_TLBAssoc; | ||
142 | |||
143 | unsigned long ExtendedVPD; /* Offset to extended VPD area; | ||
144 | null if unused */ | ||
145 | } VPD; | ||
146 | |||
147 | typedef enum _DEVICE_FLAGS { | ||
148 | Enabled = 0x4000, /* 1 - PCI device is enabled */ | ||
149 | Integrated = 0x2000, | ||
150 | Failed = 0x1000, /* 1 - device failed POST code tests */ | ||
151 | Static = 0x0800, /* 0 - dynamically configurable | ||
152 | 1 - static */ | ||
153 | Dock = 0x0400, /* 0 - not a docking station device | ||
154 | 1 - is a docking station device */ | ||
155 | Boot = 0x0200, /* 0 - device cannot be used for BOOT | ||
156 | 1 - can be a BOOT device */ | ||
157 | Configurable = 0x0100, /* 1 - device is configurable */ | ||
158 | Disableable = 0x80, /* 1 - device can be disabled */ | ||
159 | PowerManaged = 0x40, /* 0 - not managed; 1 - managed */ | ||
160 | ReadOnly = 0x20, /* 1 - device is read only */ | ||
161 | Removable = 0x10, /* 1 - device is removable */ | ||
162 | ConsoleIn = 0x08, | ||
163 | ConsoleOut = 0x04, | ||
164 | Input = 0x02, | ||
165 | Output = 0x01 | ||
166 | } DEVICE_FLAGS; | ||
167 | |||
168 | typedef enum _BUS_ID { | ||
169 | ISADEVICE = 0x01, | ||
170 | EISADEVICE = 0x02, | ||
171 | PCIDEVICE = 0x04, | ||
172 | PCMCIADEVICE = 0x08, | ||
173 | PNPISADEVICE = 0x10, | ||
174 | MCADEVICE = 0x20, | ||
175 | MXDEVICE = 0x40, /* Devices on mezzanine bus */ | ||
176 | PROCESSORDEVICE = 0x80, /* Devices on processor bus */ | ||
177 | VMEDEVICE = 0x100, | ||
178 | } BUS_ID; | ||
179 | |||
180 | typedef struct _DEVICE_ID { | ||
181 | unsigned long BusId; /* See BUS_ID enum above */ | ||
182 | unsigned long DevId; /* Big Endian format */ | ||
183 | unsigned long SerialNum; /* For multiple usage of a single | ||
184 | DevId */ | ||
185 | unsigned long Flags; /* See DEVICE_FLAGS enum above */ | ||
186 | unsigned char BaseType; /* See pnp.h for bit definitions */ | ||
187 | unsigned char SubType; /* See pnp.h for bit definitions */ | ||
188 | unsigned char Interface; /* See pnp.h for bit definitions */ | ||
189 | unsigned char Spare; | ||
190 | } DEVICE_ID; | ||
191 | |||
192 | typedef union _BUS_ACCESS { | ||
193 | struct _PnPAccess{ | ||
194 | unsigned char CSN; | ||
195 | unsigned char LogicalDevNumber; | ||
196 | unsigned short ReadDataPort; | ||
197 | } PnPAccess; | ||
198 | struct _ISAAccess{ | ||
199 | unsigned char SlotNumber; /* ISA Slot Number generally not | ||
200 | available; 0 if unknown */ | ||
201 | unsigned char LogicalDevNumber; | ||
202 | unsigned short ISAReserved; | ||
203 | } ISAAccess; | ||
204 | struct _MCAAccess{ | ||
205 | unsigned char SlotNumber; | ||
206 | unsigned char LogicalDevNumber; | ||
207 | unsigned short MCAReserved; | ||
208 | } MCAAccess; | ||
209 | struct _PCMCIAAccess{ | ||
210 | unsigned char SlotNumber; | ||
211 | unsigned char LogicalDevNumber; | ||
212 | unsigned short PCMCIAReserved; | ||
213 | } PCMCIAAccess; | ||
214 | struct _EISAAccess{ | ||
215 | unsigned char SlotNumber; | ||
216 | unsigned char FunctionNumber; | ||
217 | unsigned short EISAReserved; | ||
218 | } EISAAccess; | ||
219 | struct _PCIAccess{ | ||
220 | unsigned char BusNumber; | ||
221 | unsigned char DevFuncNumber; | ||
222 | unsigned short PCIReserved; | ||
223 | } PCIAccess; | ||
224 | struct _ProcBusAccess{ | ||
225 | unsigned char BusNumber; | ||
226 | unsigned char BUID; | ||
227 | unsigned short ProcBusReserved; | ||
228 | } ProcBusAccess; | ||
229 | } BUS_ACCESS; | ||
230 | |||
231 | /* Per logical device information */ | ||
232 | typedef struct _PPC_DEVICE { | ||
233 | DEVICE_ID DeviceId; | ||
234 | BUS_ACCESS BusAccess; | ||
235 | |||
236 | /* The following three are offsets into the DevicePnPHeap */ | ||
237 | /* All are in PnP compressed format */ | ||
238 | unsigned long AllocatedOffset; /* Allocated resource description */ | ||
239 | unsigned long PossibleOffset; /* Possible resource description */ | ||
240 | unsigned long CompatibleOffset; /* Compatible device identifiers */ | ||
241 | } PPC_DEVICE; | ||
242 | |||
243 | typedef enum _CPU_STATE { | ||
244 | CPU_GOOD = 0, /* CPU is present, and active */ | ||
245 | CPU_GOOD_FW = 1, /* CPU is present, and in firmware */ | ||
246 | CPU_OFF = 2, /* CPU is present, but inactive */ | ||
247 | CPU_FAILED = 3, /* CPU is present, but failed POST */ | ||
248 | CPU_NOT_PRESENT = 255 /* CPU not present */ | ||
249 | } CPU_STATE; | ||
250 | |||
251 | typedef struct _PPC_CPU { | ||
252 | unsigned long CpuType; /* Result of mfspr from Processor | ||
253 | Version Register (PVR). | ||
254 | PVR(0-15) = Version (e.g. 601) | ||
255 | PVR(16-31 = EC Level */ | ||
256 | unsigned char CpuNumber; /* CPU Number for this processor */ | ||
257 | unsigned char CpuState; /* CPU State, see CPU_STATE enum */ | ||
258 | unsigned short Reserved; | ||
259 | } PPC_CPU; | ||
260 | |||
261 | typedef struct _PPC_MEM { | ||
262 | unsigned long SIMMSize; /* 0 - absent or bad | ||
263 | 8M, 32M (in MB) */ | ||
264 | } PPC_MEM; | ||
265 | |||
266 | typedef enum _MEM_USAGE { | ||
267 | Other = 0x8000, | ||
268 | ResumeBlock = 0x4000, /* for use by power management */ | ||
269 | SystemROM = 0x2000, /* Flash memory (populated) */ | ||
270 | UnPopSystemROM = 0x1000, /* Unpopulated part of SystemROM area */ | ||
271 | IOMemory = 0x0800, | ||
272 | SystemIO = 0x0400, | ||
273 | SystemRegs = 0x0200, | ||
274 | PCIAddr = 0x0100, | ||
275 | PCIConfig = 0x80, | ||
276 | ISAAddr = 0x40, | ||
277 | Unpopulated = 0x20, /* Unpopulated part of System Memory */ | ||
278 | Free = 0x10, /* Free part of System Memory */ | ||
279 | BootImage = 0x08, /* BootImage part of System Memory */ | ||
280 | FirmwareCode = 0x04, /* FirmwareCode part of System Memory */ | ||
281 | FirmwareHeap = 0x02, /* FirmwareHeap part of System Memory */ | ||
282 | FirmwareStack = 0x01 /* FirmwareStack part of System Memory*/ | ||
283 | } MEM_USAGE; | ||
284 | |||
285 | typedef struct _MEM_MAP { | ||
286 | unsigned long Usage; /* See MEM_USAGE above */ | ||
287 | unsigned long BasePage; /* Page number measured in 4KB pages */ | ||
288 | unsigned long PageCount; /* Page count measured in 4KB pages */ | ||
289 | } MEM_MAP; | ||
290 | |||
291 | typedef struct _RESIDUAL { | ||
292 | unsigned long ResidualLength; /* Length of Residual */ | ||
293 | unsigned char Version; /* of this data structure */ | ||
294 | unsigned char Revision; /* of this data structure */ | ||
295 | unsigned short EC; /* of this data structure */ | ||
296 | /* VPD */ | ||
297 | VPD VitalProductData; | ||
298 | /* CPU */ | ||
299 | unsigned short MaxNumCpus; /* Max CPUs in this system */ | ||
300 | unsigned short ActualNumCpus; /* ActualNumCpus < MaxNumCpus means */ | ||
301 | /* that there are unpopulated or */ | ||
302 | /* otherwise unusable cpu locations */ | ||
303 | PPC_CPU Cpus[MAX_CPUS]; | ||
304 | /* Memory */ | ||
305 | unsigned long TotalMemory; /* Total amount of memory installed */ | ||
306 | unsigned long GoodMemory; /* Total amount of good memory */ | ||
307 | unsigned long ActualNumMemSegs; | ||
308 | MEM_MAP Segs[MAX_MEM_SEGS]; | ||
309 | unsigned long ActualNumMemories; | ||
310 | PPC_MEM Memories[MAX_MEMS]; | ||
311 | /* Devices */ | ||
312 | unsigned long ActualNumDevices; | ||
313 | PPC_DEVICE Devices[MAX_DEVICES]; | ||
314 | unsigned char DevicePnPHeap[2*MAX_DEVICES*AVE_PNP_SIZE]; | ||
315 | } RESIDUAL; | ||
316 | |||
317 | |||
318 | /* | ||
319 | * Forward declaration - we can't include <linux/pci.h> because it | ||
320 | * breaks the boot loader | ||
321 | */ | ||
322 | struct pci_dev; | ||
323 | |||
324 | extern RESIDUAL *res; | ||
325 | extern void print_residual_device_info(void); | ||
326 | extern PPC_DEVICE *residual_find_device(unsigned long BusMask, | ||
327 | unsigned char * DevID, int BaseType, | ||
328 | int SubType, int Interface, int n); | ||
329 | extern int residual_pcidev_irq(struct pci_dev *dev); | ||
330 | extern void residual_irq_mask(char *irq_edge_mask_lo, char *irq_edge_mask_hi); | ||
331 | extern unsigned int residual_isapic_addr(void); | ||
332 | extern PnP_TAG_PACKET *PnP_find_packet(unsigned char *p, unsigned packet_tag, | ||
333 | int n); | ||
334 | extern PnP_TAG_PACKET *PnP_find_small_vendor_packet(unsigned char *p, | ||
335 | unsigned packet_type, | ||
336 | int n); | ||
337 | extern PnP_TAG_PACKET *PnP_find_large_vendor_packet(unsigned char *p, | ||
338 | unsigned packet_type, | ||
339 | int n); | ||
340 | |||
341 | #ifdef CONFIG_PREP_RESIDUAL | ||
342 | #define have_residual_data (res && res->ResidualLength) | ||
343 | #else | ||
344 | #define have_residual_data 0 | ||
345 | #endif | ||
346 | |||
347 | #endif /* __ASSEMBLY__ */ | ||
348 | #endif /* ndef _RESIDUAL_ */ | ||
349 | |||
350 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/rtc.h b/include/asm-ppc/rtc.h deleted file mode 100644 index 6025b46d0a2a..000000000000 --- a/include/asm-ppc/rtc.h +++ /dev/null | |||
@@ -1,95 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/rtc.h | ||
3 | * | ||
4 | * Author: Tom Rini <trini@mvista.com> | ||
5 | * | ||
6 | * 2002 (c) MontaVista, Software, Inc. This file is licensed under | ||
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 | ||
9 | * or implied. | ||
10 | * | ||
11 | * Based on: | ||
12 | * include/asm-m68k/rtc.h | ||
13 | * | ||
14 | * Copyright Richard Zidlicky | ||
15 | * implementation details for genrtc/q40rtc driver | ||
16 | * | ||
17 | * And the old drivers/macintosh/rtc.c which was heavily based on: | ||
18 | * Linux/SPARC Real Time Clock Driver | ||
19 | * Copyright (C) 1996 Thomas K. Dyas (tdyas@eden.rutgers.edu) | ||
20 | * | ||
21 | * With additional work by Paul Mackerras and Franz Sirl. | ||
22 | */ | ||
23 | |||
24 | #ifndef __ASM_RTC_H__ | ||
25 | #define __ASM_RTC_H__ | ||
26 | |||
27 | #ifdef __KERNEL__ | ||
28 | |||
29 | #include <linux/rtc.h> | ||
30 | |||
31 | #include <asm/machdep.h> | ||
32 | #include <asm/time.h> | ||
33 | |||
34 | #define RTC_PIE 0x40 /* periodic interrupt enable */ | ||
35 | #define RTC_AIE 0x20 /* alarm interrupt enable */ | ||
36 | #define RTC_UIE 0x10 /* update-finished interrupt enable */ | ||
37 | |||
38 | /* some dummy definitions */ | ||
39 | #define RTC_BATT_BAD 0x100 /* battery bad */ | ||
40 | #define RTC_SQWE 0x08 /* enable square-wave output */ | ||
41 | #define RTC_DM_BINARY 0x04 /* all time/date values are BCD if clear */ | ||
42 | #define RTC_24H 0x02 /* 24 hour mode - else hours bit 7 means pm */ | ||
43 | #define RTC_DST_EN 0x01 /* auto switch DST - works f. USA only */ | ||
44 | |||
45 | static inline unsigned int get_rtc_time(struct rtc_time *time) | ||
46 | { | ||
47 | if (ppc_md.get_rtc_time) { | ||
48 | unsigned long nowtime; | ||
49 | |||
50 | nowtime = (ppc_md.get_rtc_time)(); | ||
51 | |||
52 | to_tm(nowtime, time); | ||
53 | |||
54 | time->tm_year -= 1900; | ||
55 | time->tm_mon -= 1; /* Make sure userland has a 0-based month */ | ||
56 | } | ||
57 | return RTC_24H; | ||
58 | } | ||
59 | |||
60 | /* Set the current date and time in the real time clock. */ | ||
61 | static inline int set_rtc_time(struct rtc_time *time) | ||
62 | { | ||
63 | if (ppc_md.get_rtc_time) { | ||
64 | unsigned long nowtime; | ||
65 | |||
66 | nowtime = mktime(time->tm_year+1900, time->tm_mon+1, | ||
67 | time->tm_mday, time->tm_hour, time->tm_min, | ||
68 | time->tm_sec); | ||
69 | |||
70 | (ppc_md.set_rtc_time)(nowtime); | ||
71 | |||
72 | return 0; | ||
73 | } else | ||
74 | return -EINVAL; | ||
75 | } | ||
76 | |||
77 | static inline unsigned int get_rtc_ss(void) | ||
78 | { | ||
79 | struct rtc_time h; | ||
80 | |||
81 | get_rtc_time(&h); | ||
82 | return h.tm_sec; | ||
83 | } | ||
84 | |||
85 | static inline int get_rtc_pll(struct rtc_pll_info *pll) | ||
86 | { | ||
87 | return -EINVAL; | ||
88 | } | ||
89 | static inline int set_rtc_pll(struct rtc_pll_info *pll) | ||
90 | { | ||
91 | return -EINVAL; | ||
92 | } | ||
93 | |||
94 | #endif /* __KERNEL__ */ | ||
95 | #endif /* __ASM_RTC_H__ */ | ||
diff --git a/include/asm-ppc/serial.h b/include/asm-ppc/serial.h deleted file mode 100644 index d35ed10315b1..000000000000 --- a/include/asm-ppc/serial.h +++ /dev/null | |||
@@ -1,43 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/serial.h | ||
3 | */ | ||
4 | |||
5 | #ifdef __KERNEL__ | ||
6 | #ifndef __ASM_SERIAL_H__ | ||
7 | #define __ASM_SERIAL_H__ | ||
8 | |||
9 | |||
10 | #if defined(CONFIG_EV64260) | ||
11 | #include <platforms/ev64260.h> | ||
12 | #elif defined(CONFIG_CHESTNUT) | ||
13 | #include <platforms/chestnut.h> | ||
14 | #elif defined(CONFIG_POWERPMC250) | ||
15 | #include <platforms/powerpmc250.h> | ||
16 | #elif defined(CONFIG_LOPEC) | ||
17 | #include <platforms/lopec.h> | ||
18 | #elif defined(CONFIG_MVME5100) | ||
19 | #include <platforms/mvme5100.h> | ||
20 | #elif defined(CONFIG_PAL4) | ||
21 | #include <platforms/pal4_serial.h> | ||
22 | #elif defined(CONFIG_PRPMC750) | ||
23 | #include <platforms/prpmc750.h> | ||
24 | #elif defined(CONFIG_PRPMC800) | ||
25 | #include <platforms/prpmc800.h> | ||
26 | #elif defined(CONFIG_SANDPOINT) | ||
27 | #include <platforms/sandpoint.h> | ||
28 | #elif defined(CONFIG_SPRUCE) | ||
29 | #include <platforms/spruce.h> | ||
30 | #elif defined(CONFIG_4xx) | ||
31 | #include <asm/ibm4xx.h> | ||
32 | #elif defined(CONFIG_RADSTONE_PPC7D) | ||
33 | #include <platforms/radstone_ppc7d.h> | ||
34 | #else | ||
35 | |||
36 | /* | ||
37 | * XXX Assume it has PC-style ISA serial ports - true for PReP at least. | ||
38 | */ | ||
39 | #include <asm/pc_serial.h> | ||
40 | |||
41 | #endif /* !CONFIG_GEMINI and others */ | ||
42 | #endif /* __ASM_SERIAL_H__ */ | ||
43 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/smp.h b/include/asm-ppc/smp.h deleted file mode 100644 index e75791ea33a6..000000000000 --- a/include/asm-ppc/smp.h +++ /dev/null | |||
@@ -1,75 +0,0 @@ | |||
1 | /* smp.h: PPC specific SMP stuff. | ||
2 | * | ||
3 | * Original was a copy of sparc smp.h. Now heavily modified | ||
4 | * for PPC. | ||
5 | * | ||
6 | * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) | ||
7 | * Copyright (C) 1996-2001 Cort Dougan <cort@fsmlabs.com> | ||
8 | */ | ||
9 | #ifdef __KERNEL__ | ||
10 | #ifndef _PPC_SMP_H | ||
11 | #define _PPC_SMP_H | ||
12 | |||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/bitops.h> | ||
15 | #include <linux/errno.h> | ||
16 | #include <linux/cpumask.h> | ||
17 | #include <linux/threads.h> | ||
18 | |||
19 | #ifdef CONFIG_SMP | ||
20 | |||
21 | #ifndef __ASSEMBLY__ | ||
22 | |||
23 | struct cpuinfo_PPC { | ||
24 | unsigned long loops_per_jiffy; | ||
25 | unsigned long pvr; | ||
26 | unsigned long *pgd_cache; | ||
27 | unsigned long *pte_cache; | ||
28 | unsigned long pgtable_cache_sz; | ||
29 | }; | ||
30 | |||
31 | extern struct cpuinfo_PPC cpu_data[]; | ||
32 | extern cpumask_t cpu_online_map; | ||
33 | extern cpumask_t cpu_possible_map; | ||
34 | extern unsigned long smp_proc_in_lock[]; | ||
35 | extern volatile unsigned long cpu_callin_map[]; | ||
36 | extern int smp_tb_synchronized; | ||
37 | extern struct smp_ops_t *smp_ops; | ||
38 | |||
39 | extern void smp_send_tlb_invalidate(int); | ||
40 | extern void smp_send_xmon_break(int cpu); | ||
41 | struct pt_regs; | ||
42 | extern void smp_message_recv(int); | ||
43 | |||
44 | extern int __cpu_disable(void); | ||
45 | extern void __cpu_die(unsigned int cpu); | ||
46 | extern void cpu_die(void) __attribute__((noreturn)); | ||
47 | |||
48 | #define raw_smp_processor_id() (current_thread_info()->cpu) | ||
49 | |||
50 | extern int __cpu_up(unsigned int cpu); | ||
51 | |||
52 | extern int smp_hw_index[]; | ||
53 | #define hard_smp_processor_id() (smp_hw_index[smp_processor_id()]) | ||
54 | #define get_hard_smp_processor_id(cpu) (smp_hw_index[(cpu)]) | ||
55 | #define set_hard_smp_processor_id(cpu, phys)\ | ||
56 | (smp_hw_index[(cpu)] = (phys)) | ||
57 | |||
58 | #endif /* __ASSEMBLY__ */ | ||
59 | |||
60 | #else /* !(CONFIG_SMP) */ | ||
61 | |||
62 | static inline void cpu_die(void) { } | ||
63 | #define get_hard_smp_processor_id(cpu) 0 | ||
64 | #define set_hard_smp_processor_id(cpu, phys) | ||
65 | #define hard_smp_processor_id() 0 | ||
66 | |||
67 | #endif /* !(CONFIG_SMP) */ | ||
68 | |||
69 | #ifndef __ASSEMBLY__ | ||
70 | extern int boot_cpuid; | ||
71 | extern int boot_cpuid_phys; | ||
72 | #endif | ||
73 | |||
74 | #endif /* !(_PPC_SMP_H) */ | ||
75 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/spinlock.h b/include/asm-ppc/spinlock.h deleted file mode 100644 index fccaf5531e57..000000000000 --- a/include/asm-ppc/spinlock.h +++ /dev/null | |||
@@ -1,168 +0,0 @@ | |||
1 | #ifndef __ASM_SPINLOCK_H | ||
2 | #define __ASM_SPINLOCK_H | ||
3 | |||
4 | #include <asm/system.h> | ||
5 | |||
6 | /* | ||
7 | * Simple spin lock operations. | ||
8 | * | ||
9 | * (the type definitions are in asm/raw_spinlock_types.h) | ||
10 | */ | ||
11 | |||
12 | #define __raw_spin_is_locked(x) ((x)->slock != 0) | ||
13 | #define __raw_spin_unlock_wait(lock) \ | ||
14 | do { while (__raw_spin_is_locked(lock)) cpu_relax(); } while (0) | ||
15 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) | ||
16 | |||
17 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | ||
18 | { | ||
19 | unsigned long tmp; | ||
20 | |||
21 | __asm__ __volatile__( | ||
22 | "b 1f # __raw_spin_lock\n\ | ||
23 | 2: lwzx %0,0,%1\n\ | ||
24 | cmpwi 0,%0,0\n\ | ||
25 | bne+ 2b\n\ | ||
26 | 1: lwarx %0,0,%1\n\ | ||
27 | cmpwi 0,%0,0\n\ | ||
28 | bne- 2b\n" | ||
29 | PPC405_ERR77(0,%1) | ||
30 | " stwcx. %2,0,%1\n\ | ||
31 | bne- 2b\n\ | ||
32 | isync" | ||
33 | : "=&r"(tmp) | ||
34 | : "r"(&lock->slock), "r"(1) | ||
35 | : "cr0", "memory"); | ||
36 | } | ||
37 | |||
38 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) | ||
39 | { | ||
40 | __asm__ __volatile__("eieio # __raw_spin_unlock": : :"memory"); | ||
41 | lock->slock = 0; | ||
42 | } | ||
43 | |||
44 | #define __raw_spin_trylock(l) (!test_and_set_bit(0,(volatile unsigned long *)(&(l)->slock))) | ||
45 | |||
46 | /* | ||
47 | * Read-write spinlocks, allowing multiple readers | ||
48 | * but only one writer. | ||
49 | * | ||
50 | * NOTE! it is quite common to have readers in interrupts | ||
51 | * but no interrupt writers. For those circumstances we | ||
52 | * can "mix" irq-safe locks - any writer needs to get a | ||
53 | * irq-safe write-lock, but readers can get non-irqsafe | ||
54 | * read-locks. | ||
55 | */ | ||
56 | |||
57 | #define __raw_read_can_lock(rw) ((rw)->lock >= 0) | ||
58 | #define __raw_write_can_lock(rw) (!(rw)->lock) | ||
59 | |||
60 | static __inline__ int __raw_read_trylock(raw_rwlock_t *rw) | ||
61 | { | ||
62 | signed int tmp; | ||
63 | |||
64 | __asm__ __volatile__( | ||
65 | "2: lwarx %0,0,%1 # read_trylock\n\ | ||
66 | addic. %0,%0,1\n\ | ||
67 | ble- 1f\n" | ||
68 | PPC405_ERR77(0,%1) | ||
69 | " stwcx. %0,0,%1\n\ | ||
70 | bne- 2b\n\ | ||
71 | isync\n\ | ||
72 | 1:" | ||
73 | : "=&r"(tmp) | ||
74 | : "r"(&rw->lock) | ||
75 | : "cr0", "memory"); | ||
76 | |||
77 | return tmp > 0; | ||
78 | } | ||
79 | |||
80 | static __inline__ void __raw_read_lock(raw_rwlock_t *rw) | ||
81 | { | ||
82 | signed int tmp; | ||
83 | |||
84 | __asm__ __volatile__( | ||
85 | "b 2f # read_lock\n\ | ||
86 | 1: lwzx %0,0,%1\n\ | ||
87 | cmpwi 0,%0,0\n\ | ||
88 | blt+ 1b\n\ | ||
89 | 2: lwarx %0,0,%1\n\ | ||
90 | addic. %0,%0,1\n\ | ||
91 | ble- 1b\n" | ||
92 | PPC405_ERR77(0,%1) | ||
93 | " stwcx. %0,0,%1\n\ | ||
94 | bne- 2b\n\ | ||
95 | isync" | ||
96 | : "=&r"(tmp) | ||
97 | : "r"(&rw->lock) | ||
98 | : "cr0", "memory"); | ||
99 | } | ||
100 | |||
101 | static __inline__ void __raw_read_unlock(raw_rwlock_t *rw) | ||
102 | { | ||
103 | signed int tmp; | ||
104 | |||
105 | __asm__ __volatile__( | ||
106 | "eieio # read_unlock\n\ | ||
107 | 1: lwarx %0,0,%1\n\ | ||
108 | addic %0,%0,-1\n" | ||
109 | PPC405_ERR77(0,%1) | ||
110 | " stwcx. %0,0,%1\n\ | ||
111 | bne- 1b" | ||
112 | : "=&r"(tmp) | ||
113 | : "r"(&rw->lock) | ||
114 | : "cr0", "memory"); | ||
115 | } | ||
116 | |||
117 | static __inline__ int __raw_write_trylock(raw_rwlock_t *rw) | ||
118 | { | ||
119 | signed int tmp; | ||
120 | |||
121 | __asm__ __volatile__( | ||
122 | "2: lwarx %0,0,%1 # write_trylock\n\ | ||
123 | cmpwi 0,%0,0\n\ | ||
124 | bne- 1f\n" | ||
125 | PPC405_ERR77(0,%1) | ||
126 | " stwcx. %2,0,%1\n\ | ||
127 | bne- 2b\n\ | ||
128 | isync\n\ | ||
129 | 1:" | ||
130 | : "=&r"(tmp) | ||
131 | : "r"(&rw->lock), "r"(-1) | ||
132 | : "cr0", "memory"); | ||
133 | |||
134 | return tmp == 0; | ||
135 | } | ||
136 | |||
137 | static __inline__ void __raw_write_lock(raw_rwlock_t *rw) | ||
138 | { | ||
139 | signed int tmp; | ||
140 | |||
141 | __asm__ __volatile__( | ||
142 | "b 2f # write_lock\n\ | ||
143 | 1: lwzx %0,0,%1\n\ | ||
144 | cmpwi 0,%0,0\n\ | ||
145 | bne+ 1b\n\ | ||
146 | 2: lwarx %0,0,%1\n\ | ||
147 | cmpwi 0,%0,0\n\ | ||
148 | bne- 1b\n" | ||
149 | PPC405_ERR77(0,%1) | ||
150 | " stwcx. %2,0,%1\n\ | ||
151 | bne- 2b\n\ | ||
152 | isync" | ||
153 | : "=&r"(tmp) | ||
154 | : "r"(&rw->lock), "r"(-1) | ||
155 | : "cr0", "memory"); | ||
156 | } | ||
157 | |||
158 | static __inline__ void __raw_write_unlock(raw_rwlock_t *rw) | ||
159 | { | ||
160 | __asm__ __volatile__("eieio # write_unlock": : :"memory"); | ||
161 | rw->lock = 0; | ||
162 | } | ||
163 | |||
164 | #define _raw_spin_relax(lock) cpu_relax() | ||
165 | #define _raw_read_relax(lock) cpu_relax() | ||
166 | #define _raw_write_relax(lock) cpu_relax() | ||
167 | |||
168 | #endif /* __ASM_SPINLOCK_H */ | ||
diff --git a/include/asm-ppc/suspend.h b/include/asm-ppc/suspend.h deleted file mode 100644 index 3df9f32bd834..000000000000 --- a/include/asm-ppc/suspend.h +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | static inline int arch_prepare_suspend(void) | ||
2 | { | ||
3 | return 0; | ||
4 | } | ||
5 | |||
6 | static inline void save_processor_state(void) | ||
7 | { | ||
8 | } | ||
9 | |||
10 | static inline void restore_processor_state(void) | ||
11 | { | ||
12 | } | ||
diff --git a/include/asm-ppc/system.h b/include/asm-ppc/system.h deleted file mode 100644 index 70ebd333c55b..000000000000 --- a/include/asm-ppc/system.h +++ /dev/null | |||
@@ -1,289 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu> | ||
3 | */ | ||
4 | #ifndef __PPC_SYSTEM_H | ||
5 | #define __PPC_SYSTEM_H | ||
6 | |||
7 | #include <linux/kernel.h> | ||
8 | |||
9 | #include <asm/hw_irq.h> | ||
10 | |||
11 | /* | ||
12 | * Memory barrier. | ||
13 | * The sync instruction guarantees that all memory accesses initiated | ||
14 | * by this processor have been performed (with respect to all other | ||
15 | * mechanisms that access memory). The eieio instruction is a barrier | ||
16 | * providing an ordering (separately) for (a) cacheable stores and (b) | ||
17 | * loads and stores to non-cacheable memory (e.g. I/O devices). | ||
18 | * | ||
19 | * mb() prevents loads and stores being reordered across this point. | ||
20 | * rmb() prevents loads being reordered across this point. | ||
21 | * wmb() prevents stores being reordered across this point. | ||
22 | * read_barrier_depends() prevents data-dependent loads being reordered | ||
23 | * across this point (nop on PPC). | ||
24 | * | ||
25 | * We can use the eieio instruction for wmb, but since it doesn't | ||
26 | * give any ordering guarantees about loads, we have to use the | ||
27 | * stronger but slower sync instruction for mb and rmb. | ||
28 | */ | ||
29 | #define mb() __asm__ __volatile__ ("sync" : : : "memory") | ||
30 | #define rmb() __asm__ __volatile__ ("sync" : : : "memory") | ||
31 | #define wmb() __asm__ __volatile__ ("eieio" : : : "memory") | ||
32 | #define read_barrier_depends() do { } while(0) | ||
33 | |||
34 | #define set_mb(var, value) do { var = value; mb(); } while (0) | ||
35 | |||
36 | #define AT_VECTOR_SIZE_ARCH 6 /* entries in ARCH_DLINFO */ | ||
37 | #ifdef CONFIG_SMP | ||
38 | #define smp_mb() mb() | ||
39 | #define smp_rmb() rmb() | ||
40 | #define smp_wmb() __asm__ __volatile__ ("eieio" : : : "memory") | ||
41 | #define smp_read_barrier_depends() read_barrier_depends() | ||
42 | #else | ||
43 | #define smp_mb() barrier() | ||
44 | #define smp_rmb() barrier() | ||
45 | #define smp_wmb() barrier() | ||
46 | #define smp_read_barrier_depends() do { } while(0) | ||
47 | #endif /* CONFIG_SMP */ | ||
48 | |||
49 | #ifdef __KERNEL__ | ||
50 | struct task_struct; | ||
51 | struct pt_regs; | ||
52 | |||
53 | extern void print_backtrace(unsigned long *); | ||
54 | extern void show_regs(struct pt_regs * regs); | ||
55 | extern void flush_instruction_cache(void); | ||
56 | extern void hard_reset_now(void); | ||
57 | extern void poweroff_now(void); | ||
58 | extern int set_dabr(unsigned long dabr); | ||
59 | #ifdef CONFIG_6xx | ||
60 | extern long _get_L2CR(void); | ||
61 | extern long _get_L3CR(void); | ||
62 | extern void _set_L2CR(unsigned long); | ||
63 | extern void _set_L3CR(unsigned long); | ||
64 | #else | ||
65 | #define _get_L2CR() 0L | ||
66 | #define _get_L3CR() 0L | ||
67 | #define _set_L2CR(val) do { } while(0) | ||
68 | #define _set_L3CR(val) do { } while(0) | ||
69 | #endif | ||
70 | extern void via_cuda_init(void); | ||
71 | extern void pmac_nvram_init(void); | ||
72 | extern void chrp_nvram_init(void); | ||
73 | extern void read_rtc_time(void); | ||
74 | extern void pmac_find_display(void); | ||
75 | extern void giveup_fpu(struct task_struct *); | ||
76 | extern void disable_kernel_fp(void); | ||
77 | extern void enable_kernel_fp(void); | ||
78 | extern void flush_fp_to_thread(struct task_struct *); | ||
79 | extern void enable_kernel_altivec(void); | ||
80 | extern void giveup_altivec(struct task_struct *); | ||
81 | extern void load_up_altivec(struct task_struct *); | ||
82 | extern int emulate_altivec(struct pt_regs *); | ||
83 | extern void giveup_spe(struct task_struct *); | ||
84 | extern void load_up_spe(struct task_struct *); | ||
85 | extern int fix_alignment(struct pt_regs *); | ||
86 | extern void cvt_fd(float *from, double *to, struct thread_struct *thread); | ||
87 | extern void cvt_df(double *from, float *to, struct thread_struct *thread); | ||
88 | |||
89 | #ifndef CONFIG_SMP | ||
90 | extern void discard_lazy_cpu_state(void); | ||
91 | #else | ||
92 | static inline void discard_lazy_cpu_state(void) | ||
93 | { | ||
94 | } | ||
95 | #endif | ||
96 | |||
97 | #ifdef CONFIG_ALTIVEC | ||
98 | extern void flush_altivec_to_thread(struct task_struct *); | ||
99 | #else | ||
100 | static inline void flush_altivec_to_thread(struct task_struct *t) | ||
101 | { | ||
102 | } | ||
103 | #endif | ||
104 | |||
105 | #ifdef CONFIG_SPE | ||
106 | extern void flush_spe_to_thread(struct task_struct *); | ||
107 | #else | ||
108 | static inline void flush_spe_to_thread(struct task_struct *t) | ||
109 | { | ||
110 | } | ||
111 | #endif | ||
112 | |||
113 | extern int call_rtas(const char *, int, int, unsigned long *, ...); | ||
114 | extern void cacheable_memzero(void *p, unsigned int nb); | ||
115 | extern void *cacheable_memcpy(void *, const void *, unsigned int); | ||
116 | extern int do_page_fault(struct pt_regs *, unsigned long, unsigned long); | ||
117 | extern void bad_page_fault(struct pt_regs *, unsigned long, int); | ||
118 | extern int die(const char *, struct pt_regs *, long); | ||
119 | extern void _exception(int, struct pt_regs *, int, unsigned long); | ||
120 | void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val); | ||
121 | |||
122 | #ifdef CONFIG_BOOKE_WDT | ||
123 | extern u32 booke_wdt_enabled; | ||
124 | extern u32 booke_wdt_period; | ||
125 | #endif /* CONFIG_BOOKE_WDT */ | ||
126 | |||
127 | struct device_node; | ||
128 | extern void note_scsi_host(struct device_node *, void *); | ||
129 | |||
130 | extern struct task_struct *__switch_to(struct task_struct *, | ||
131 | struct task_struct *); | ||
132 | #define switch_to(prev, next, last) ((last) = __switch_to((prev), (next))) | ||
133 | |||
134 | struct thread_struct; | ||
135 | extern struct task_struct *_switch(struct thread_struct *prev, | ||
136 | struct thread_struct *next); | ||
137 | |||
138 | extern unsigned int rtas_data; | ||
139 | |||
140 | static __inline__ unsigned long | ||
141 | xchg_u32(volatile void *p, unsigned long val) | ||
142 | { | ||
143 | unsigned long prev; | ||
144 | |||
145 | __asm__ __volatile__ ("\n\ | ||
146 | 1: lwarx %0,0,%2 \n" | ||
147 | PPC405_ERR77(0,%2) | ||
148 | " stwcx. %3,0,%2 \n\ | ||
149 | bne- 1b" | ||
150 | : "=&r" (prev), "=m" (*(volatile unsigned long *)p) | ||
151 | : "r" (p), "r" (val), "m" (*(volatile unsigned long *)p) | ||
152 | : "cc", "memory"); | ||
153 | |||
154 | return prev; | ||
155 | } | ||
156 | |||
157 | /* | ||
158 | * This function doesn't exist, so you'll get a linker error | ||
159 | * if something tries to do an invalid xchg(). | ||
160 | */ | ||
161 | extern void __xchg_called_with_bad_pointer(void); | ||
162 | |||
163 | #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | ||
164 | |||
165 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size) | ||
166 | { | ||
167 | switch (size) { | ||
168 | case 4: | ||
169 | return (unsigned long) xchg_u32(ptr, x); | ||
170 | #if 0 /* xchg_u64 doesn't exist on 32-bit PPC */ | ||
171 | case 8: | ||
172 | return (unsigned long) xchg_u64(ptr, x); | ||
173 | #endif /* 0 */ | ||
174 | } | ||
175 | __xchg_called_with_bad_pointer(); | ||
176 | return x; | ||
177 | |||
178 | |||
179 | } | ||
180 | |||
181 | static inline void * xchg_ptr(void * m, void * val) | ||
182 | { | ||
183 | return (void *) xchg_u32(m, (unsigned long) val); | ||
184 | } | ||
185 | |||
186 | |||
187 | #define __HAVE_ARCH_CMPXCHG 1 | ||
188 | |||
189 | static __inline__ unsigned long | ||
190 | __cmpxchg_u32(volatile unsigned int *p, unsigned int old, unsigned int new) | ||
191 | { | ||
192 | unsigned int prev; | ||
193 | |||
194 | __asm__ __volatile__ ("\n\ | ||
195 | 1: lwarx %0,0,%2 \n\ | ||
196 | cmpw 0,%0,%3 \n\ | ||
197 | bne 2f \n" | ||
198 | PPC405_ERR77(0,%2) | ||
199 | " stwcx. %4,0,%2 \n\ | ||
200 | bne- 1b\n" | ||
201 | #ifdef CONFIG_SMP | ||
202 | " sync\n" | ||
203 | #endif /* CONFIG_SMP */ | ||
204 | "2:" | ||
205 | : "=&r" (prev), "=m" (*p) | ||
206 | : "r" (p), "r" (old), "r" (new), "m" (*p) | ||
207 | : "cc", "memory"); | ||
208 | |||
209 | return prev; | ||
210 | } | ||
211 | |||
212 | static inline unsigned long | ||
213 | __cmpxchg_u32_local(volatile unsigned int *p, unsigned int old, | ||
214 | unsigned int new) | ||
215 | { | ||
216 | unsigned int prev; | ||
217 | |||
218 | __asm__ __volatile__ ("\n\ | ||
219 | 1: lwarx %0,0,%2 \n\ | ||
220 | cmpw 0,%0,%3 \n\ | ||
221 | bne 2f \n" | ||
222 | PPC405_ERR77(0,%2) | ||
223 | " stwcx. %4,0,%2 \n\ | ||
224 | bne- 1b\n" | ||
225 | "2:" | ||
226 | : "=&r" (prev), "=m" (*p) | ||
227 | : "r" (p), "r" (old), "r" (new), "m" (*p) | ||
228 | : "cc", "memory"); | ||
229 | |||
230 | return prev; | ||
231 | } | ||
232 | |||
233 | /* This function doesn't exist, so you'll get a linker error | ||
234 | if something tries to do an invalid cmpxchg(). */ | ||
235 | extern void __cmpxchg_called_with_bad_pointer(void); | ||
236 | |||
237 | static __inline__ unsigned long | ||
238 | __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, | ||
239 | unsigned int size) | ||
240 | { | ||
241 | switch (size) { | ||
242 | case 4: | ||
243 | return __cmpxchg_u32(ptr, old, new); | ||
244 | #if 0 /* we don't have __cmpxchg_u64 on 32-bit PPC */ | ||
245 | case 8: | ||
246 | return __cmpxchg_u64(ptr, old, new); | ||
247 | #endif /* 0 */ | ||
248 | } | ||
249 | __cmpxchg_called_with_bad_pointer(); | ||
250 | return old; | ||
251 | } | ||
252 | |||
253 | #define cmpxchg(ptr, o, n) \ | ||
254 | ({ \ | ||
255 | __typeof__(*(ptr)) _o_ = (o); \ | ||
256 | __typeof__(*(ptr)) _n_ = (n); \ | ||
257 | (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ | ||
258 | (unsigned long)_n_, sizeof(*(ptr))); \ | ||
259 | }) | ||
260 | |||
261 | #include <asm-generic/cmpxchg-local.h> | ||
262 | |||
263 | static inline unsigned long __cmpxchg_local(volatile void *ptr, | ||
264 | unsigned long old, | ||
265 | unsigned long new, int size) | ||
266 | { | ||
267 | switch (size) { | ||
268 | case 4: | ||
269 | return __cmpxchg_u32_local(ptr, old, new); | ||
270 | default: | ||
271 | return __cmpxchg_local_generic(ptr, old, new, size); | ||
272 | } | ||
273 | |||
274 | return old; | ||
275 | } | ||
276 | |||
277 | /* | ||
278 | * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make | ||
279 | * them available. | ||
280 | */ | ||
281 | #define cmpxchg_local(ptr, o, n) \ | ||
282 | ((__typeof__(*(ptr)))__cmpxchg_local((ptr), (unsigned long)(o), \ | ||
283 | (unsigned long)(n), sizeof(*(ptr)))) | ||
284 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||
285 | |||
286 | #define arch_align_stack(x) (x) | ||
287 | |||
288 | #endif /* __KERNEL__ */ | ||
289 | #endif /* __PPC_SYSTEM_H */ | ||
diff --git a/include/asm-ppc/time.h b/include/asm-ppc/time.h deleted file mode 100644 index 81dbcd43a501..000000000000 --- a/include/asm-ppc/time.h +++ /dev/null | |||
@@ -1,161 +0,0 @@ | |||
1 | /* | ||
2 | * Common time prototypes and such for all ppc machines. | ||
3 | * | ||
4 | * Written by Cort Dougan (cort@fsmlabs.com) to merge | ||
5 | * Paul Mackerras' version and mine for PReP and Pmac. | ||
6 | */ | ||
7 | |||
8 | #ifdef __KERNEL__ | ||
9 | #ifndef __ASM_TIME_H__ | ||
10 | #define __ASM_TIME_H__ | ||
11 | |||
12 | #include <linux/types.h> | ||
13 | #include <linux/rtc.h> | ||
14 | #include <linux/threads.h> | ||
15 | |||
16 | #include <asm/reg.h> | ||
17 | |||
18 | /* time.c */ | ||
19 | extern unsigned tb_ticks_per_jiffy; | ||
20 | extern unsigned tb_to_us; | ||
21 | extern unsigned tb_last_stamp; | ||
22 | extern unsigned long disarm_decr[NR_CPUS]; | ||
23 | |||
24 | extern void to_tm(int tim, struct rtc_time * tm); | ||
25 | extern time_t last_rtc_update; | ||
26 | |||
27 | extern void set_dec_cpu6(unsigned int val); | ||
28 | |||
29 | int via_calibrate_decr(void); | ||
30 | |||
31 | /* Accessor functions for the decrementer register. | ||
32 | * The 4xx doesn't even have a decrementer. I tried to use the | ||
33 | * generic timer interrupt code, which seems OK, with the 4xx PIT | ||
34 | * in auto-reload mode. The problem is PIT stops counting when it | ||
35 | * hits zero. If it would wrap, we could use it just like a decrementer. | ||
36 | */ | ||
37 | static __inline__ unsigned int get_dec(void) | ||
38 | { | ||
39 | #if defined(CONFIG_40x) | ||
40 | return (mfspr(SPRN_PIT)); | ||
41 | #else | ||
42 | return (mfspr(SPRN_DEC)); | ||
43 | #endif | ||
44 | } | ||
45 | |||
46 | static __inline__ void set_dec(unsigned int val) | ||
47 | { | ||
48 | #if defined(CONFIG_40x) | ||
49 | return; /* Have to let it auto-reload */ | ||
50 | #elif defined(CONFIG_8xx_CPU6) | ||
51 | set_dec_cpu6(val); | ||
52 | #else | ||
53 | mtspr(SPRN_DEC, val); | ||
54 | #endif | ||
55 | } | ||
56 | |||
57 | /* Accessor functions for the timebase (RTC on 601) registers. */ | ||
58 | /* If one day CONFIG_POWER is added just define __USE_RTC as 1 */ | ||
59 | #ifdef CONFIG_6xx | ||
60 | extern __inline__ int __pure __USE_RTC(void) { | ||
61 | return (mfspr(SPRN_PVR)>>16) == 1; | ||
62 | } | ||
63 | #else | ||
64 | #define __USE_RTC() 0 | ||
65 | #endif | ||
66 | |||
67 | extern __inline__ unsigned long get_tbl(void) { | ||
68 | unsigned long tbl; | ||
69 | #if defined(CONFIG_403GCX) | ||
70 | asm volatile("mfspr %0, 0x3dd" : "=r" (tbl)); | ||
71 | #else | ||
72 | asm volatile("mftb %0" : "=r" (tbl)); | ||
73 | #endif | ||
74 | return tbl; | ||
75 | } | ||
76 | |||
77 | extern __inline__ unsigned long get_tbu(void) { | ||
78 | unsigned long tbl; | ||
79 | #if defined(CONFIG_403GCX) | ||
80 | asm volatile("mfspr %0, 0x3dc" : "=r" (tbl)); | ||
81 | #else | ||
82 | asm volatile("mftbu %0" : "=r" (tbl)); | ||
83 | #endif | ||
84 | return tbl; | ||
85 | } | ||
86 | |||
87 | extern __inline__ void set_tb(unsigned int upper, unsigned int lower) | ||
88 | { | ||
89 | mtspr(SPRN_TBWL, 0); | ||
90 | mtspr(SPRN_TBWU, upper); | ||
91 | mtspr(SPRN_TBWL, lower); | ||
92 | } | ||
93 | |||
94 | extern __inline__ unsigned long get_rtcl(void) { | ||
95 | unsigned long rtcl; | ||
96 | asm volatile("mfrtcl %0" : "=r" (rtcl)); | ||
97 | return rtcl; | ||
98 | } | ||
99 | |||
100 | extern __inline__ unsigned long get_rtcu(void) | ||
101 | { | ||
102 | unsigned long rtcu; | ||
103 | asm volatile("mfrtcu %0" : "=r" (rtcu)); | ||
104 | return rtcu; | ||
105 | } | ||
106 | |||
107 | extern __inline__ unsigned get_native_tbl(void) { | ||
108 | if (__USE_RTC()) | ||
109 | return get_rtcl(); | ||
110 | else | ||
111 | return get_tbl(); | ||
112 | } | ||
113 | |||
114 | /* On machines with RTC, this function can only be used safely | ||
115 | * after the timestamp and for 1 second. It is only used by gettimeofday | ||
116 | * however so it should not matter. | ||
117 | */ | ||
118 | extern __inline__ unsigned tb_ticks_since(unsigned tstamp) { | ||
119 | if (__USE_RTC()) { | ||
120 | int delta = get_rtcl() - tstamp; | ||
121 | return delta<0 ? delta + 1000000000 : delta; | ||
122 | } else { | ||
123 | return get_tbl() - tstamp; | ||
124 | } | ||
125 | } | ||
126 | |||
127 | #if 0 | ||
128 | extern __inline__ unsigned long get_bin_rtcl(void) { | ||
129 | unsigned long rtcl, rtcu1, rtcu2; | ||
130 | asm volatile("\ | ||
131 | 1: mfrtcu %0\n\ | ||
132 | mfrtcl %1\n\ | ||
133 | mfrtcu %2\n\ | ||
134 | cmpw %0,%2\n\ | ||
135 | bne- 1b\n" | ||
136 | : "=r" (rtcu1), "=r" (rtcl), "=r" (rtcu2) | ||
137 | : : "cr0"); | ||
138 | return rtcu2*1000000000+rtcl; | ||
139 | } | ||
140 | |||
141 | extern __inline__ unsigned binary_tbl(void) { | ||
142 | if (__USE_RTC()) | ||
143 | return get_bin_rtcl(); | ||
144 | else | ||
145 | return get_tbl(); | ||
146 | } | ||
147 | #endif | ||
148 | |||
149 | /* Use mulhwu to scale processor timebase to timeval */ | ||
150 | /* Specifically, this computes (x * y) / 2^32. -- paulus */ | ||
151 | #define mulhwu(x,y) \ | ||
152 | ({unsigned z; asm ("mulhwu %0,%1,%2" : "=r" (z) : "r" (x), "r" (y)); z;}) | ||
153 | |||
154 | unsigned mulhwu_scale_factor(unsigned, unsigned); | ||
155 | |||
156 | #define account_process_vtime(tsk) do { } while (0) | ||
157 | #define calculate_steal_time() do { } while (0) | ||
158 | #define snapshot_timebases() do { } while (0) | ||
159 | |||
160 | #endif /* __ASM_TIME_H__ */ | ||
161 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-ppc/todc.h b/include/asm-ppc/todc.h deleted file mode 100644 index 937c7dbe6e5c..000000000000 --- a/include/asm-ppc/todc.h +++ /dev/null | |||
@@ -1,488 +0,0 @@ | |||
1 | /* | ||
2 | * Definitions for the M48Txx and mc146818 series of Time of day/Real Time | ||
3 | * Clock chips. | ||
4 | * | ||
5 | * Author: Mark A. Greer | ||
6 | * mgreer@mvista.com | ||
7 | * | ||
8 | * 2001 (c) MontaVista, Software, Inc. This file is licensed under | ||
9 | * the terms of the GNU General Public License version 2. This program | ||
10 | * is licensed "as is" without any warranty of any kind, whether express | ||
11 | * or implied. | ||
12 | */ | ||
13 | |||
14 | /* | ||
15 | * Support for the M48T37/M48T59/.../mc146818 Real Time Clock chips. | ||
16 | * Purpose is to make one generic file that handles all of these chips instead | ||
17 | * of every platform implementing the same code over & over again. | ||
18 | */ | ||
19 | |||
20 | #ifndef __PPC_KERNEL_TODC_H | ||
21 | #define __PPC_KERNEL_TODC_H | ||
22 | |||
23 | typedef struct { | ||
24 | uint rtc_type; /* your particular chip */ | ||
25 | |||
26 | /* | ||
27 | * Following are the addresses of the AS0, AS1, and DATA registers | ||
28 | * of these chips. Note that these are board-specific. | ||
29 | */ | ||
30 | unsigned int nvram_as0; | ||
31 | unsigned int nvram_as1; | ||
32 | unsigned int nvram_data; | ||
33 | |||
34 | /* | ||
35 | * Define bits to stop external set of regs from changing so | ||
36 | * the chip can be read/written reliably. | ||
37 | */ | ||
38 | unsigned char enable_read; | ||
39 | unsigned char enable_write; | ||
40 | |||
41 | /* | ||
42 | * Following is the number of AS0 address bits. This is normally | ||
43 | * 8 but some bad hardware routes address lines incorrectly. | ||
44 | */ | ||
45 | int as0_bits; | ||
46 | |||
47 | int nvram_size; /* Size of NVRAM on chip */ | ||
48 | int sw_flags; /* Software control flags */ | ||
49 | |||
50 | /* Following are the register offsets for the particular chip */ | ||
51 | int year; | ||
52 | int month; | ||
53 | int day_of_month; | ||
54 | int day_of_week; | ||
55 | int hours; | ||
56 | int minutes; | ||
57 | int seconds; | ||
58 | int control_b; | ||
59 | int control_a; | ||
60 | int watchdog; | ||
61 | int interrupts; | ||
62 | int alarm_date; | ||
63 | int alarm_hour; | ||
64 | int alarm_minutes; | ||
65 | int alarm_seconds; | ||
66 | int century; | ||
67 | int flags; | ||
68 | |||
69 | /* | ||
70 | * Some RTC chips have their NVRAM buried behind a addr/data pair of | ||
71 | * regs on the first level/clock registers. The following fields | ||
72 | * are the addresses for those addr/data regs. | ||
73 | */ | ||
74 | int nvram_addr_reg; | ||
75 | int nvram_data_reg; | ||
76 | } todc_info_t; | ||
77 | |||
78 | /* | ||
79 | * Define the types of TODC/RTC variants that are supported in | ||
80 | * arch/ppc/kernel/todc_time.c | ||
81 | * Make a new one of these for any chip somehow differs from what's already | ||
82 | * defined. That way, if you ever need to put in code to touch those | ||
83 | * bits/registers in todc_time.c, you can put it inside an | ||
84 | * 'if (todc_info->rtc_type == TODC_TYPE_XXX)' so you won't break | ||
85 | * anyone else. | ||
86 | */ | ||
87 | #define TODC_TYPE_MK48T35 1 | ||
88 | #define TODC_TYPE_MK48T37 2 | ||
89 | #define TODC_TYPE_MK48T59 3 | ||
90 | #define TODC_TYPE_DS1693 4 /* Dallas DS1693 RTC */ | ||
91 | #define TODC_TYPE_DS1743 5 /* Dallas DS1743 RTC */ | ||
92 | #define TODC_TYPE_DS1746 6 /* Dallas DS1746 RTC */ | ||
93 | #define TODC_TYPE_DS1747 7 /* Dallas DS1747 RTC */ | ||
94 | #define TODC_TYPE_DS1501 8 /* Dallas DS1501 RTC */ | ||
95 | #define TODC_TYPE_DS1643 9 /* Dallas DS1643 RTC */ | ||
96 | #define TODC_TYPE_PC97307 10 /* PC97307 internal RTC */ | ||
97 | #define TODC_TYPE_DS1557 11 /* Dallas DS1557 RTC */ | ||
98 | #define TODC_TYPE_DS17285 12 /* Dallas DS17285 RTC */ | ||
99 | #define TODC_TYPE_DS1553 13 /* Dallas DS1553 RTC */ | ||
100 | #define TODC_TYPE_MC146818 100 /* Leave room for m48txx's */ | ||
101 | |||
102 | /* | ||
103 | * Bit to clear/set to enable reads/writes to the chip | ||
104 | */ | ||
105 | #define TODC_MK48TXX_CNTL_A_R 0x40 | ||
106 | #define TODC_MK48TXX_CNTL_A_W 0x80 | ||
107 | #define TODC_MK48TXX_DAY_CB 0x80 | ||
108 | |||
109 | #define TODC_DS1501_CNTL_B_TE 0x80 | ||
110 | |||
111 | /* | ||
112 | * Define flag bits used by todc routines. | ||
113 | */ | ||
114 | #define TODC_FLAG_2_LEVEL_NVRAM 0x00000001 | ||
115 | |||
116 | /* | ||
117 | * Define the values for the various RTC's that should to into the todc_info | ||
118 | * table. | ||
119 | * Note: The XXX_NVRAM_SIZE, XXX_NVRAM_ADDR_REG, and XXX_NVRAM_DATA_REG only | ||
120 | * matter if XXX_SW_FLAGS has TODC_FLAG_2_LEVEL_NVRAM set. | ||
121 | */ | ||
122 | #define TODC_TYPE_MK48T35_NVRAM_SIZE 0x7ff8 | ||
123 | #define TODC_TYPE_MK48T35_SW_FLAGS 0 | ||
124 | #define TODC_TYPE_MK48T35_YEAR 0x7fff | ||
125 | #define TODC_TYPE_MK48T35_MONTH 0x7ffe | ||
126 | #define TODC_TYPE_MK48T35_DOM 0x7ffd /* Day of Month */ | ||
127 | #define TODC_TYPE_MK48T35_DOW 0x7ffc /* Day of Week */ | ||
128 | #define TODC_TYPE_MK48T35_HOURS 0x7ffb | ||
129 | #define TODC_TYPE_MK48T35_MINUTES 0x7ffa | ||
130 | #define TODC_TYPE_MK48T35_SECONDS 0x7ff9 | ||
131 | #define TODC_TYPE_MK48T35_CNTL_B 0x7ff9 | ||
132 | #define TODC_TYPE_MK48T35_CNTL_A 0x7ff8 | ||
133 | #define TODC_TYPE_MK48T35_WATCHDOG 0x0000 | ||
134 | #define TODC_TYPE_MK48T35_INTERRUPTS 0x0000 | ||
135 | #define TODC_TYPE_MK48T35_ALARM_DATE 0x0000 | ||
136 | #define TODC_TYPE_MK48T35_ALARM_HOUR 0x0000 | ||
137 | #define TODC_TYPE_MK48T35_ALARM_MINUTES 0x0000 | ||
138 | #define TODC_TYPE_MK48T35_ALARM_SECONDS 0x0000 | ||
139 | #define TODC_TYPE_MK48T35_CENTURY 0x0000 | ||
140 | #define TODC_TYPE_MK48T35_FLAGS 0x0000 | ||
141 | #define TODC_TYPE_MK48T35_NVRAM_ADDR_REG 0 | ||
142 | #define TODC_TYPE_MK48T35_NVRAM_DATA_REG 0 | ||
143 | |||
144 | #define TODC_TYPE_MK48T37_NVRAM_SIZE 0x7ff0 | ||
145 | #define TODC_TYPE_MK48T37_SW_FLAGS 0 | ||
146 | #define TODC_TYPE_MK48T37_YEAR 0x7fff | ||
147 | #define TODC_TYPE_MK48T37_MONTH 0x7ffe | ||
148 | #define TODC_TYPE_MK48T37_DOM 0x7ffd /* Day of Month */ | ||
149 | #define TODC_TYPE_MK48T37_DOW 0x7ffc /* Day of Week */ | ||
150 | #define TODC_TYPE_MK48T37_HOURS 0x7ffb | ||
151 | #define TODC_TYPE_MK48T37_MINUTES 0x7ffa | ||
152 | #define TODC_TYPE_MK48T37_SECONDS 0x7ff9 | ||
153 | #define TODC_TYPE_MK48T37_CNTL_B 0x7ff9 | ||
154 | #define TODC_TYPE_MK48T37_CNTL_A 0x7ff8 | ||
155 | #define TODC_TYPE_MK48T37_WATCHDOG 0x7ff7 | ||
156 | #define TODC_TYPE_MK48T37_INTERRUPTS 0x7ff6 | ||
157 | #define TODC_TYPE_MK48T37_ALARM_DATE 0x7ff5 | ||
158 | #define TODC_TYPE_MK48T37_ALARM_HOUR 0x7ff4 | ||
159 | #define TODC_TYPE_MK48T37_ALARM_MINUTES 0x7ff3 | ||
160 | #define TODC_TYPE_MK48T37_ALARM_SECONDS 0x7ff2 | ||
161 | #define TODC_TYPE_MK48T37_CENTURY 0x7ff1 | ||
162 | #define TODC_TYPE_MK48T37_FLAGS 0x7ff0 | ||
163 | #define TODC_TYPE_MK48T37_NVRAM_ADDR_REG 0 | ||
164 | #define TODC_TYPE_MK48T37_NVRAM_DATA_REG 0 | ||
165 | |||
166 | #define TODC_TYPE_MK48T59_NVRAM_SIZE 0x1ff0 | ||
167 | #define TODC_TYPE_MK48T59_SW_FLAGS 0 | ||
168 | #define TODC_TYPE_MK48T59_YEAR 0x1fff | ||
169 | #define TODC_TYPE_MK48T59_MONTH 0x1ffe | ||
170 | #define TODC_TYPE_MK48T59_DOM 0x1ffd /* Day of Month */ | ||
171 | #define TODC_TYPE_MK48T59_DOW 0x1ffc /* Day of Week */ | ||
172 | #define TODC_TYPE_MK48T59_HOURS 0x1ffb | ||
173 | #define TODC_TYPE_MK48T59_MINUTES 0x1ffa | ||
174 | #define TODC_TYPE_MK48T59_SECONDS 0x1ff9 | ||
175 | #define TODC_TYPE_MK48T59_CNTL_B 0x1ff9 | ||
176 | #define TODC_TYPE_MK48T59_CNTL_A 0x1ff8 | ||
177 | #define TODC_TYPE_MK48T59_WATCHDOG 0x1fff | ||
178 | #define TODC_TYPE_MK48T59_INTERRUPTS 0x1fff | ||
179 | #define TODC_TYPE_MK48T59_ALARM_DATE 0x1fff | ||
180 | #define TODC_TYPE_MK48T59_ALARM_HOUR 0x1fff | ||
181 | #define TODC_TYPE_MK48T59_ALARM_MINUTES 0x1fff | ||
182 | #define TODC_TYPE_MK48T59_ALARM_SECONDS 0x1fff | ||
183 | #define TODC_TYPE_MK48T59_CENTURY 0x1fff | ||
184 | #define TODC_TYPE_MK48T59_FLAGS 0x1fff | ||
185 | #define TODC_TYPE_MK48T59_NVRAM_ADDR_REG 0 | ||
186 | #define TODC_TYPE_MK48T59_NVRAM_DATA_REG 0 | ||
187 | |||
188 | #define TODC_TYPE_DS1501_NVRAM_SIZE 0x100 | ||
189 | #define TODC_TYPE_DS1501_SW_FLAGS TODC_FLAG_2_LEVEL_NVRAM | ||
190 | #define TODC_TYPE_DS1501_YEAR (TODC_TYPE_DS1501_NVRAM_SIZE + 0x06) | ||
191 | #define TODC_TYPE_DS1501_MONTH (TODC_TYPE_DS1501_NVRAM_SIZE + 0x05) | ||
192 | #define TODC_TYPE_DS1501_DOM (TODC_TYPE_DS1501_NVRAM_SIZE + 0x04) | ||
193 | #define TODC_TYPE_DS1501_DOW (TODC_TYPE_DS1501_NVRAM_SIZE + 0x03) | ||
194 | #define TODC_TYPE_DS1501_HOURS (TODC_TYPE_DS1501_NVRAM_SIZE + 0x02) | ||
195 | #define TODC_TYPE_DS1501_MINUTES (TODC_TYPE_DS1501_NVRAM_SIZE + 0x01) | ||
196 | #define TODC_TYPE_DS1501_SECONDS (TODC_TYPE_DS1501_NVRAM_SIZE + 0x00) | ||
197 | #define TODC_TYPE_DS1501_CNTL_B (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0f) | ||
198 | #define TODC_TYPE_DS1501_CNTL_A (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0f) | ||
199 | #define TODC_TYPE_DS1501_WATCHDOG (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff) | ||
200 | #define TODC_TYPE_DS1501_INTERRUPTS (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff) | ||
201 | #define TODC_TYPE_DS1501_ALARM_DATE (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0b) | ||
202 | #define TODC_TYPE_DS1501_ALARM_HOUR (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0a) | ||
203 | #define TODC_TYPE_DS1501_ALARM_MINUTES (TODC_TYPE_DS1501_NVRAM_SIZE + 0x09) | ||
204 | #define TODC_TYPE_DS1501_ALARM_SECONDS (TODC_TYPE_DS1501_NVRAM_SIZE + 0x08) | ||
205 | #define TODC_TYPE_DS1501_CENTURY (TODC_TYPE_DS1501_NVRAM_SIZE + 0x07) | ||
206 | #define TODC_TYPE_DS1501_FLAGS (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff) | ||
207 | #define TODC_TYPE_DS1501_NVRAM_ADDR_REG 0x10 | ||
208 | #define TODC_TYPE_DS1501_NVRAM_DATA_REG 0x13 | ||
209 | |||
210 | #define TODC_TYPE_DS1553_NVRAM_SIZE 0x1ff0 | ||
211 | #define TODC_TYPE_DS1553_SW_FLAGS 0 | ||
212 | #define TODC_TYPE_DS1553_YEAR 0x1fff | ||
213 | #define TODC_TYPE_DS1553_MONTH 0x1ffe | ||
214 | #define TODC_TYPE_DS1553_DOM 0x1ffd /* Day of Month */ | ||
215 | #define TODC_TYPE_DS1553_DOW 0x1ffc /* Day of Week */ | ||
216 | #define TODC_TYPE_DS1553_HOURS 0x1ffb | ||
217 | #define TODC_TYPE_DS1553_MINUTES 0x1ffa | ||
218 | #define TODC_TYPE_DS1553_SECONDS 0x1ff9 | ||
219 | #define TODC_TYPE_DS1553_CNTL_B 0x1ff9 | ||
220 | #define TODC_TYPE_DS1553_CNTL_A 0x1ff8 /* control_a R/W regs */ | ||
221 | #define TODC_TYPE_DS1553_WATCHDOG 0x1ff7 | ||
222 | #define TODC_TYPE_DS1553_INTERRUPTS 0x1ff6 | ||
223 | #define TODC_TYPE_DS1553_ALARM_DATE 0x1ff5 | ||
224 | #define TODC_TYPE_DS1553_ALARM_HOUR 0x1ff4 | ||
225 | #define TODC_TYPE_DS1553_ALARM_MINUTES 0x1ff3 | ||
226 | #define TODC_TYPE_DS1553_ALARM_SECONDS 0x1ff2 | ||
227 | #define TODC_TYPE_DS1553_CENTURY 0x1ff8 | ||
228 | #define TODC_TYPE_DS1553_FLAGS 0x1ff0 | ||
229 | #define TODC_TYPE_DS1553_NVRAM_ADDR_REG 0 | ||
230 | #define TODC_TYPE_DS1553_NVRAM_DATA_REG 0 | ||
231 | |||
232 | #define TODC_TYPE_DS1557_NVRAM_SIZE 0x7fff0 | ||
233 | #define TODC_TYPE_DS1557_SW_FLAGS 0 | ||
234 | #define TODC_TYPE_DS1557_YEAR 0x7ffff | ||
235 | #define TODC_TYPE_DS1557_MONTH 0x7fffe | ||
236 | #define TODC_TYPE_DS1557_DOM 0x7fffd /* Day of Month */ | ||
237 | #define TODC_TYPE_DS1557_DOW 0x7fffc /* Day of Week */ | ||
238 | #define TODC_TYPE_DS1557_HOURS 0x7fffb | ||
239 | #define TODC_TYPE_DS1557_MINUTES 0x7fffa | ||
240 | #define TODC_TYPE_DS1557_SECONDS 0x7fff9 | ||
241 | #define TODC_TYPE_DS1557_CNTL_B 0x7fff9 | ||
242 | #define TODC_TYPE_DS1557_CNTL_A 0x7fff8 /* control_a R/W regs */ | ||
243 | #define TODC_TYPE_DS1557_WATCHDOG 0x7fff7 | ||
244 | #define TODC_TYPE_DS1557_INTERRUPTS 0x7fff6 | ||
245 | #define TODC_TYPE_DS1557_ALARM_DATE 0x7fff5 | ||
246 | #define TODC_TYPE_DS1557_ALARM_HOUR 0x7fff4 | ||
247 | #define TODC_TYPE_DS1557_ALARM_MINUTES 0x7fff3 | ||
248 | #define TODC_TYPE_DS1557_ALARM_SECONDS 0x7fff2 | ||
249 | #define TODC_TYPE_DS1557_CENTURY 0x7fff8 | ||
250 | #define TODC_TYPE_DS1557_FLAGS 0x7fff0 | ||
251 | #define TODC_TYPE_DS1557_NVRAM_ADDR_REG 0 | ||
252 | #define TODC_TYPE_DS1557_NVRAM_DATA_REG 0 | ||
253 | |||
254 | #define TODC_TYPE_DS1643_NVRAM_SIZE 0x1ff8 | ||
255 | #define TODC_TYPE_DS1643_SW_FLAGS 0 | ||
256 | #define TODC_TYPE_DS1643_YEAR 0x1fff | ||
257 | #define TODC_TYPE_DS1643_MONTH 0x1ffe | ||
258 | #define TODC_TYPE_DS1643_DOM 0x1ffd /* Day of Month */ | ||
259 | #define TODC_TYPE_DS1643_DOW 0x1ffc /* Day of Week */ | ||
260 | #define TODC_TYPE_DS1643_HOURS 0x1ffb | ||
261 | #define TODC_TYPE_DS1643_MINUTES 0x1ffa | ||
262 | #define TODC_TYPE_DS1643_SECONDS 0x1ff9 | ||
263 | #define TODC_TYPE_DS1643_CNTL_B 0x1ff9 | ||
264 | #define TODC_TYPE_DS1643_CNTL_A 0x1ff8 /* control_a R/W regs */ | ||
265 | #define TODC_TYPE_DS1643_WATCHDOG 0x1fff | ||
266 | #define TODC_TYPE_DS1643_INTERRUPTS 0x1fff | ||
267 | #define TODC_TYPE_DS1643_ALARM_DATE 0x1fff | ||
268 | #define TODC_TYPE_DS1643_ALARM_HOUR 0x1fff | ||
269 | #define TODC_TYPE_DS1643_ALARM_MINUTES 0x1fff | ||
270 | #define TODC_TYPE_DS1643_ALARM_SECONDS 0x1fff | ||
271 | #define TODC_TYPE_DS1643_CENTURY 0x1ff8 | ||
272 | #define TODC_TYPE_DS1643_FLAGS 0x1fff | ||
273 | #define TODC_TYPE_DS1643_NVRAM_ADDR_REG 0 | ||
274 | #define TODC_TYPE_DS1643_NVRAM_DATA_REG 0 | ||
275 | |||
276 | #define TODC_TYPE_DS1693_NVRAM_SIZE 0 /* Not handled yet */ | ||
277 | #define TODC_TYPE_DS1693_SW_FLAGS 0 | ||
278 | #define TODC_TYPE_DS1693_YEAR 0x09 | ||
279 | #define TODC_TYPE_DS1693_MONTH 0x08 | ||
280 | #define TODC_TYPE_DS1693_DOM 0x07 /* Day of Month */ | ||
281 | #define TODC_TYPE_DS1693_DOW 0x06 /* Day of Week */ | ||
282 | #define TODC_TYPE_DS1693_HOURS 0x04 | ||
283 | #define TODC_TYPE_DS1693_MINUTES 0x02 | ||
284 | #define TODC_TYPE_DS1693_SECONDS 0x00 | ||
285 | #define TODC_TYPE_DS1693_CNTL_B 0x0b | ||
286 | #define TODC_TYPE_DS1693_CNTL_A 0x0a | ||
287 | #define TODC_TYPE_DS1693_WATCHDOG 0xff | ||
288 | #define TODC_TYPE_DS1693_INTERRUPTS 0xff | ||
289 | #define TODC_TYPE_DS1693_ALARM_DATE 0x49 | ||
290 | #define TODC_TYPE_DS1693_ALARM_HOUR 0x05 | ||
291 | #define TODC_TYPE_DS1693_ALARM_MINUTES 0x03 | ||
292 | #define TODC_TYPE_DS1693_ALARM_SECONDS 0x01 | ||
293 | #define TODC_TYPE_DS1693_CENTURY 0x48 | ||
294 | #define TODC_TYPE_DS1693_FLAGS 0xff | ||
295 | #define TODC_TYPE_DS1693_NVRAM_ADDR_REG 0 | ||
296 | #define TODC_TYPE_DS1693_NVRAM_DATA_REG 0 | ||
297 | |||
298 | #define TODC_TYPE_DS1743_NVRAM_SIZE 0x1ff8 | ||
299 | #define TODC_TYPE_DS1743_SW_FLAGS 0 | ||
300 | #define TODC_TYPE_DS1743_YEAR 0x1fff | ||
301 | #define TODC_TYPE_DS1743_MONTH 0x1ffe | ||
302 | #define TODC_TYPE_DS1743_DOM 0x1ffd /* Day of Month */ | ||
303 | #define TODC_TYPE_DS1743_DOW 0x1ffc /* Day of Week */ | ||
304 | #define TODC_TYPE_DS1743_HOURS 0x1ffb | ||
305 | #define TODC_TYPE_DS1743_MINUTES 0x1ffa | ||
306 | #define TODC_TYPE_DS1743_SECONDS 0x1ff9 | ||
307 | #define TODC_TYPE_DS1743_CNTL_B 0x1ff9 | ||
308 | #define TODC_TYPE_DS1743_CNTL_A 0x1ff8 /* control_a R/W regs */ | ||
309 | #define TODC_TYPE_DS1743_WATCHDOG 0x1fff | ||
310 | #define TODC_TYPE_DS1743_INTERRUPTS 0x1fff | ||
311 | #define TODC_TYPE_DS1743_ALARM_DATE 0x1fff | ||
312 | #define TODC_TYPE_DS1743_ALARM_HOUR 0x1fff | ||
313 | #define TODC_TYPE_DS1743_ALARM_MINUTES 0x1fff | ||
314 | #define TODC_TYPE_DS1743_ALARM_SECONDS 0x1fff | ||
315 | #define TODC_TYPE_DS1743_CENTURY 0x1ff8 | ||
316 | #define TODC_TYPE_DS1743_FLAGS 0x1fff | ||
317 | #define TODC_TYPE_DS1743_NVRAM_ADDR_REG 0 | ||
318 | #define TODC_TYPE_DS1743_NVRAM_DATA_REG 0 | ||
319 | |||
320 | #define TODC_TYPE_DS1746_NVRAM_SIZE 0x1fff8 | ||
321 | #define TODC_TYPE_DS1746_SW_FLAGS 0 | ||
322 | #define TODC_TYPE_DS1746_YEAR 0x1ffff | ||
323 | #define TODC_TYPE_DS1746_MONTH 0x1fffe | ||
324 | #define TODC_TYPE_DS1746_DOM 0x1fffd /* Day of Month */ | ||
325 | #define TODC_TYPE_DS1746_DOW 0x1fffc /* Day of Week */ | ||
326 | #define TODC_TYPE_DS1746_HOURS 0x1fffb | ||
327 | #define TODC_TYPE_DS1746_MINUTES 0x1fffa | ||
328 | #define TODC_TYPE_DS1746_SECONDS 0x1fff9 | ||
329 | #define TODC_TYPE_DS1746_CNTL_B 0x1fff9 | ||
330 | #define TODC_TYPE_DS1746_CNTL_A 0x1fff8 /* control_a R/W regs */ | ||
331 | #define TODC_TYPE_DS1746_WATCHDOG 0x00000 | ||
332 | #define TODC_TYPE_DS1746_INTERRUPTS 0x00000 | ||
333 | #define TODC_TYPE_DS1746_ALARM_DATE 0x00000 | ||
334 | #define TODC_TYPE_DS1746_ALARM_HOUR 0x00000 | ||
335 | #define TODC_TYPE_DS1746_ALARM_MINUTES 0x00000 | ||
336 | #define TODC_TYPE_DS1746_ALARM_SECONDS 0x00000 | ||
337 | #define TODC_TYPE_DS1746_CENTURY 0x00000 | ||
338 | #define TODC_TYPE_DS1746_FLAGS 0x00000 | ||
339 | #define TODC_TYPE_DS1746_NVRAM_ADDR_REG 0 | ||
340 | #define TODC_TYPE_DS1746_NVRAM_DATA_REG 0 | ||
341 | |||
342 | #define TODC_TYPE_DS1747_NVRAM_SIZE 0x7fff8 | ||
343 | #define TODC_TYPE_DS1747_SW_FLAGS 0 | ||
344 | #define TODC_TYPE_DS1747_YEAR 0x7ffff | ||
345 | #define TODC_TYPE_DS1747_MONTH 0x7fffe | ||
346 | #define TODC_TYPE_DS1747_DOM 0x7fffd /* Day of Month */ | ||
347 | #define TODC_TYPE_DS1747_DOW 0x7fffc /* Day of Week */ | ||
348 | #define TODC_TYPE_DS1747_HOURS 0x7fffb | ||
349 | #define TODC_TYPE_DS1747_MINUTES 0x7fffa | ||
350 | #define TODC_TYPE_DS1747_SECONDS 0x7fff9 | ||
351 | #define TODC_TYPE_DS1747_CNTL_B 0x7fff9 | ||
352 | #define TODC_TYPE_DS1747_CNTL_A 0x7fff8 /* control_a R/W regs */ | ||
353 | #define TODC_TYPE_DS1747_WATCHDOG 0x00000 | ||
354 | #define TODC_TYPE_DS1747_INTERRUPTS 0x00000 | ||
355 | #define TODC_TYPE_DS1747_ALARM_DATE 0x00000 | ||
356 | #define TODC_TYPE_DS1747_ALARM_HOUR 0x00000 | ||
357 | #define TODC_TYPE_DS1747_ALARM_MINUTES 0x00000 | ||
358 | #define TODC_TYPE_DS1747_ALARM_SECONDS 0x00000 | ||
359 | #define TODC_TYPE_DS1747_CENTURY 0x00000 | ||
360 | #define TODC_TYPE_DS1747_FLAGS 0x00000 | ||
361 | #define TODC_TYPE_DS1747_NVRAM_ADDR_REG 0 | ||
362 | #define TODC_TYPE_DS1747_NVRAM_DATA_REG 0 | ||
363 | |||
364 | #define TODC_TYPE_DS17285_NVRAM_SIZE (0x1000-0x80) /* 4Kx8 NVRAM (minus RTC regs) */ | ||
365 | #define TODC_TYPE_DS17285_SW_FLAGS TODC_FLAG_2_LEVEL_NVRAM | ||
366 | #define TODC_TYPE_DS17285_SECONDS (TODC_TYPE_DS17285_NVRAM_SIZE + 0x00) | ||
367 | #define TODC_TYPE_DS17285_ALARM_SECONDS (TODC_TYPE_DS17285_NVRAM_SIZE + 0x01) | ||
368 | #define TODC_TYPE_DS17285_MINUTES (TODC_TYPE_DS17285_NVRAM_SIZE + 0x02) | ||
369 | #define TODC_TYPE_DS17285_ALARM_MINUTES (TODC_TYPE_DS17285_NVRAM_SIZE + 0x03) | ||
370 | #define TODC_TYPE_DS17285_HOURS (TODC_TYPE_DS17285_NVRAM_SIZE + 0x04) | ||
371 | #define TODC_TYPE_DS17285_ALARM_HOUR (TODC_TYPE_DS17285_NVRAM_SIZE + 0x05) | ||
372 | #define TODC_TYPE_DS17285_DOW (TODC_TYPE_DS17285_NVRAM_SIZE + 0x06) | ||
373 | #define TODC_TYPE_DS17285_DOM (TODC_TYPE_DS17285_NVRAM_SIZE + 0x07) | ||
374 | #define TODC_TYPE_DS17285_MONTH (TODC_TYPE_DS17285_NVRAM_SIZE + 0x08) | ||
375 | #define TODC_TYPE_DS17285_YEAR (TODC_TYPE_DS17285_NVRAM_SIZE + 0x09) | ||
376 | #define TODC_TYPE_DS17285_CNTL_A (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0A) | ||
377 | #define TODC_TYPE_DS17285_CNTL_B (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0B) | ||
378 | #define TODC_TYPE_DS17285_CNTL_C (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0C) | ||
379 | #define TODC_TYPE_DS17285_CNTL_D (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0D) | ||
380 | #define TODC_TYPE_DS17285_WATCHDOG 0 | ||
381 | #define TODC_TYPE_DS17285_INTERRUPTS 0 | ||
382 | #define TODC_TYPE_DS17285_ALARM_DATE 0 | ||
383 | #define TODC_TYPE_DS17285_CENTURY 0 | ||
384 | #define TODC_TYPE_DS17285_FLAGS 0 | ||
385 | #define TODC_TYPE_DS17285_NVRAM_ADDR_REG 0x50 | ||
386 | #define TODC_TYPE_DS17285_NVRAM_DATA_REG 0x53 | ||
387 | |||
388 | #define TODC_TYPE_MC146818_NVRAM_SIZE 0 /* XXXX */ | ||
389 | #define TODC_TYPE_MC146818_SW_FLAGS 0 | ||
390 | #define TODC_TYPE_MC146818_YEAR 0x09 | ||
391 | #define TODC_TYPE_MC146818_MONTH 0x08 | ||
392 | #define TODC_TYPE_MC146818_DOM 0x07 /* Day of Month */ | ||
393 | #define TODC_TYPE_MC146818_DOW 0x06 /* Day of Week */ | ||
394 | #define TODC_TYPE_MC146818_HOURS 0x04 | ||
395 | #define TODC_TYPE_MC146818_MINUTES 0x02 | ||
396 | #define TODC_TYPE_MC146818_SECONDS 0x00 | ||
397 | #define TODC_TYPE_MC146818_CNTL_B 0x0a | ||
398 | #define TODC_TYPE_MC146818_CNTL_A 0x0b /* control_a R/W regs */ | ||
399 | #define TODC_TYPE_MC146818_WATCHDOG 0 | ||
400 | #define TODC_TYPE_MC146818_INTERRUPTS 0x0c | ||
401 | #define TODC_TYPE_MC146818_ALARM_DATE 0xff | ||
402 | #define TODC_TYPE_MC146818_ALARM_HOUR 0x05 | ||
403 | #define TODC_TYPE_MC146818_ALARM_MINUTES 0x03 | ||
404 | #define TODC_TYPE_MC146818_ALARM_SECONDS 0x01 | ||
405 | #define TODC_TYPE_MC146818_CENTURY 0xff | ||
406 | #define TODC_TYPE_MC146818_FLAGS 0xff | ||
407 | #define TODC_TYPE_MC146818_NVRAM_ADDR_REG 0 | ||
408 | #define TODC_TYPE_MC146818_NVRAM_DATA_REG 0 | ||
409 | |||
410 | #define TODC_TYPE_PC97307_NVRAM_SIZE 0 /* No NVRAM? */ | ||
411 | #define TODC_TYPE_PC97307_SW_FLAGS 0 | ||
412 | #define TODC_TYPE_PC97307_YEAR 0x09 | ||
413 | #define TODC_TYPE_PC97307_MONTH 0x08 | ||
414 | #define TODC_TYPE_PC97307_DOM 0x07 /* Day of Month */ | ||
415 | #define TODC_TYPE_PC97307_DOW 0x06 /* Day of Week */ | ||
416 | #define TODC_TYPE_PC97307_HOURS 0x04 | ||
417 | #define TODC_TYPE_PC97307_MINUTES 0x02 | ||
418 | #define TODC_TYPE_PC97307_SECONDS 0x00 | ||
419 | #define TODC_TYPE_PC97307_CNTL_B 0x0a | ||
420 | #define TODC_TYPE_PC97307_CNTL_A 0x0b /* control_a R/W regs */ | ||
421 | #define TODC_TYPE_PC97307_WATCHDOG 0x0c | ||
422 | #define TODC_TYPE_PC97307_INTERRUPTS 0x0d | ||
423 | #define TODC_TYPE_PC97307_ALARM_DATE 0xff | ||
424 | #define TODC_TYPE_PC97307_ALARM_HOUR 0x05 | ||
425 | #define TODC_TYPE_PC97307_ALARM_MINUTES 0x03 | ||
426 | #define TODC_TYPE_PC97307_ALARM_SECONDS 0x01 | ||
427 | #define TODC_TYPE_PC97307_CENTURY 0xff | ||
428 | #define TODC_TYPE_PC97307_FLAGS 0xff | ||
429 | #define TODC_TYPE_PC97307_NVRAM_ADDR_REG 0 | ||
430 | #define TODC_TYPE_PC97307_NVRAM_DATA_REG 0 | ||
431 | |||
432 | /* | ||
433 | * Define macros to allocate and init the todc_info_t table that will | ||
434 | * be used by the todc_time.c routines. | ||
435 | */ | ||
436 | #define TODC_ALLOC() \ | ||
437 | static todc_info_t todc_info_alloc; \ | ||
438 | todc_info_t *todc_info = &todc_info_alloc; | ||
439 | |||
440 | #define TODC_INIT(clock_type, as0, as1, data, bits) { \ | ||
441 | todc_info->rtc_type = clock_type; \ | ||
442 | \ | ||
443 | todc_info->nvram_as0 = (unsigned int)(as0); \ | ||
444 | todc_info->nvram_as1 = (unsigned int)(as1); \ | ||
445 | todc_info->nvram_data = (unsigned int)(data); \ | ||
446 | \ | ||
447 | todc_info->as0_bits = (bits); \ | ||
448 | \ | ||
449 | todc_info->nvram_size = clock_type ##_NVRAM_SIZE; \ | ||
450 | todc_info->sw_flags = clock_type ##_SW_FLAGS; \ | ||
451 | \ | ||
452 | todc_info->year = clock_type ##_YEAR; \ | ||
453 | todc_info->month = clock_type ##_MONTH; \ | ||
454 | todc_info->day_of_month = clock_type ##_DOM; \ | ||
455 | todc_info->day_of_week = clock_type ##_DOW; \ | ||
456 | todc_info->hours = clock_type ##_HOURS; \ | ||
457 | todc_info->minutes = clock_type ##_MINUTES; \ | ||
458 | todc_info->seconds = clock_type ##_SECONDS; \ | ||
459 | todc_info->control_b = clock_type ##_CNTL_B; \ | ||
460 | todc_info->control_a = clock_type ##_CNTL_A; \ | ||
461 | todc_info->watchdog = clock_type ##_WATCHDOG; \ | ||
462 | todc_info->interrupts = clock_type ##_INTERRUPTS; \ | ||
463 | todc_info->alarm_date = clock_type ##_ALARM_DATE; \ | ||
464 | todc_info->alarm_hour = clock_type ##_ALARM_HOUR; \ | ||
465 | todc_info->alarm_minutes = clock_type ##_ALARM_MINUTES; \ | ||
466 | todc_info->alarm_seconds = clock_type ##_ALARM_SECONDS; \ | ||
467 | todc_info->century = clock_type ##_CENTURY; \ | ||
468 | todc_info->flags = clock_type ##_FLAGS; \ | ||
469 | \ | ||
470 | todc_info->nvram_addr_reg = clock_type ##_NVRAM_ADDR_REG; \ | ||
471 | todc_info->nvram_data_reg = clock_type ##_NVRAM_DATA_REG; \ | ||
472 | } | ||
473 | |||
474 | extern todc_info_t *todc_info; | ||
475 | |||
476 | unsigned char todc_direct_read_val(int addr); | ||
477 | void todc_direct_write_val(int addr, unsigned char val); | ||
478 | unsigned char todc_m48txx_read_val(int addr); | ||
479 | void todc_m48txx_write_val(int addr, unsigned char val); | ||
480 | unsigned char todc_mc146818_read_val(int addr); | ||
481 | void todc_mc146818_write_val(int addr, unsigned char val); | ||
482 | |||
483 | long todc_time_init(void); | ||
484 | unsigned long todc_get_rtc_time(void); | ||
485 | int todc_set_rtc_time(unsigned long nowtime); | ||
486 | void todc_calibrate_decr(void); | ||
487 | |||
488 | #endif /* __PPC_KERNEL_TODC_H */ | ||
diff --git a/include/asm-ppc/traps.h b/include/asm-ppc/traps.h deleted file mode 100644 index 68e7326b56f1..000000000000 --- a/include/asm-ppc/traps.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-m68k/traps.h> | ||
diff --git a/include/asm-ppc/zorro.h b/include/asm-ppc/zorro.h deleted file mode 100644 index 1e5fbc65e77b..000000000000 --- a/include/asm-ppc/zorro.h +++ /dev/null | |||
@@ -1,30 +0,0 @@ | |||
1 | #ifndef _ASM_PPC_ZORRO_H | ||
2 | #define _ASM_PPC_ZORRO_H | ||
3 | |||
4 | #include <asm/io.h> | ||
5 | |||
6 | #define z_readb in_8 | ||
7 | #define z_readw in_be16 | ||
8 | #define z_readl in_be32 | ||
9 | |||
10 | #define z_writeb(val, port) out_8((port), (val)) | ||
11 | #define z_writew(val, port) out_be16((port), (val)) | ||
12 | #define z_writel(val, port) out_be32((port), (val)) | ||
13 | |||
14 | #define z_memset_io(a,b,c) memset((void *)(a),(b),(c)) | ||
15 | #define z_memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c)) | ||
16 | #define z_memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c)) | ||
17 | |||
18 | extern void *__ioremap(unsigned long address, unsigned long size, | ||
19 | unsigned long flags); | ||
20 | |||
21 | extern void *ioremap(unsigned long address, unsigned long size); | ||
22 | extern void iounmap(void *addr); | ||
23 | |||
24 | extern void *__ioremap(unsigned long address, unsigned long size, | ||
25 | unsigned long flags); | ||
26 | |||
27 | #define z_ioremap ioremap | ||
28 | #define z_iounmap iounmap | ||
29 | |||
30 | #endif /* _ASM_PPC_ZORRO_H */ | ||
diff --git a/include/asm-s390/Kbuild b/include/asm-s390/Kbuild index 13c9805349f1..bb5e9edb9825 100644 --- a/include/asm-s390/Kbuild +++ b/include/asm-s390/Kbuild | |||
@@ -8,6 +8,9 @@ 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 | header-y += kvm.h |
11 | header-y += chsc.h | ||
11 | 12 | ||
12 | unifdef-y += cmb.h | 13 | unifdef-y += cmb.h |
13 | unifdef-y += debug.h | 14 | unifdef-y += debug.h |
15 | unifdef-y += chpid.h | ||
16 | unifdef-y += schid.h | ||
diff --git a/include/asm-s390/airq.h b/include/asm-s390/airq.h index 41d028cb52a4..1ac80d6b0588 100644 --- a/include/asm-s390/airq.h +++ b/include/asm-s390/airq.h | |||
@@ -13,7 +13,7 @@ | |||
13 | 13 | ||
14 | typedef void (*adapter_int_handler_t)(void *, void *); | 14 | typedef void (*adapter_int_handler_t)(void *, void *); |
15 | 15 | ||
16 | void *s390_register_adapter_interrupt(adapter_int_handler_t, void *); | 16 | void *s390_register_adapter_interrupt(adapter_int_handler_t, void *, u8); |
17 | void s390_unregister_adapter_interrupt(void *); | 17 | void s390_unregister_adapter_interrupt(void *, u8); |
18 | 18 | ||
19 | #endif /* _ASM_S390_AIRQ_H */ | 19 | #endif /* _ASM_S390_AIRQ_H */ |
diff --git a/include/asm-s390/ccwdev.h b/include/asm-s390/ccwdev.h index 066aa70518ce..ba007d8df941 100644 --- a/include/asm-s390/ccwdev.h +++ b/include/asm-s390/ccwdev.h | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <linux/device.h> | 13 | #include <linux/device.h> |
14 | #include <linux/mod_devicetable.h> | 14 | #include <linux/mod_devicetable.h> |
15 | #include <asm/fcx.h> | ||
15 | 16 | ||
16 | /* structs from asm/cio.h */ | 17 | /* structs from asm/cio.h */ |
17 | struct irb; | 18 | struct irb; |
@@ -157,6 +158,17 @@ extern int ccw_device_start_timeout_key(struct ccw_device *, struct ccw1 *, | |||
157 | extern int ccw_device_resume(struct ccw_device *); | 158 | extern int ccw_device_resume(struct ccw_device *); |
158 | extern int ccw_device_halt(struct ccw_device *, unsigned long); | 159 | extern int ccw_device_halt(struct ccw_device *, unsigned long); |
159 | extern int ccw_device_clear(struct ccw_device *, unsigned long); | 160 | extern int ccw_device_clear(struct ccw_device *, unsigned long); |
161 | int ccw_device_tm_start_key(struct ccw_device *cdev, struct tcw *tcw, | ||
162 | unsigned long intparm, u8 lpm, u8 key); | ||
163 | int ccw_device_tm_start_key(struct ccw_device *, struct tcw *, | ||
164 | unsigned long, u8, u8); | ||
165 | int ccw_device_tm_start_timeout_key(struct ccw_device *, struct tcw *, | ||
166 | unsigned long, u8, u8, int); | ||
167 | int ccw_device_tm_start(struct ccw_device *, struct tcw *, | ||
168 | unsigned long, u8); | ||
169 | int ccw_device_tm_start_timeout(struct ccw_device *, struct tcw *, | ||
170 | unsigned long, u8, int); | ||
171 | int ccw_device_tm_intrg(struct ccw_device *cdev); | ||
160 | 172 | ||
161 | extern int ccw_device_set_online(struct ccw_device *cdev); | 173 | extern int ccw_device_set_online(struct ccw_device *cdev); |
162 | extern int ccw_device_set_offline(struct ccw_device *cdev); | 174 | extern int ccw_device_set_offline(struct ccw_device *cdev); |
diff --git a/include/asm-s390/chpid.h b/include/asm-s390/chpid.h index b203336fd892..dfe3c7f3439a 100644 --- a/include/asm-s390/chpid.h +++ b/include/asm-s390/chpid.h | |||
@@ -10,7 +10,6 @@ | |||
10 | 10 | ||
11 | #include <linux/string.h> | 11 | #include <linux/string.h> |
12 | #include <asm/types.h> | 12 | #include <asm/types.h> |
13 | #include <asm/cio.h> | ||
14 | 13 | ||
15 | #define __MAX_CHPID 255 | 14 | #define __MAX_CHPID 255 |
16 | 15 | ||
@@ -21,6 +20,9 @@ struct chp_id { | |||
21 | u8 id; | 20 | u8 id; |
22 | } __attribute__((packed)); | 21 | } __attribute__((packed)); |
23 | 22 | ||
23 | #ifdef __KERNEL__ | ||
24 | #include <asm/cio.h> | ||
25 | |||
24 | static inline void chp_id_init(struct chp_id *chpid) | 26 | static inline void chp_id_init(struct chp_id *chpid) |
25 | { | 27 | { |
26 | memset(chpid, 0, sizeof(struct chp_id)); | 28 | memset(chpid, 0, sizeof(struct chp_id)); |
@@ -49,5 +51,6 @@ static inline int chp_id_is_valid(struct chp_id *chpid) | |||
49 | 51 | ||
50 | #define chp_id_for_each(c) \ | 52 | #define chp_id_for_each(c) \ |
51 | for (chp_id_init(c); chp_id_is_valid(c); chp_id_next(c)) | 53 | for (chp_id_init(c); chp_id_is_valid(c); chp_id_next(c)) |
54 | #endif /* __KERNEL */ | ||
52 | 55 | ||
53 | #endif /* _ASM_S390_CHPID_H */ | 56 | #endif /* _ASM_S390_CHPID_H */ |
diff --git a/include/asm-s390/chsc.h b/include/asm-s390/chsc.h new file mode 100644 index 000000000000..d38d0cf62d4b --- /dev/null +++ b/include/asm-s390/chsc.h | |||
@@ -0,0 +1,127 @@ | |||
1 | /* | ||
2 | * ioctl interface for /dev/chsc | ||
3 | * | ||
4 | * Copyright 2008 IBM Corp. | ||
5 | * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> | ||
6 | */ | ||
7 | |||
8 | #ifndef _ASM_CHSC_H | ||
9 | #define _ASM_CHSC_H | ||
10 | |||
11 | #include <asm/chpid.h> | ||
12 | #include <asm/schid.h> | ||
13 | |||
14 | struct chsc_async_header { | ||
15 | __u16 length; | ||
16 | __u16 code; | ||
17 | __u32 cmd_dependend; | ||
18 | __u32 key : 4; | ||
19 | __u32 : 28; | ||
20 | struct subchannel_id sid; | ||
21 | } __attribute__ ((packed)); | ||
22 | |||
23 | struct chsc_async_area { | ||
24 | struct chsc_async_header header; | ||
25 | __u8 data[PAGE_SIZE - 16 /* size of chsc_async_header */]; | ||
26 | } __attribute__ ((packed)); | ||
27 | |||
28 | |||
29 | struct chsc_response_struct { | ||
30 | __u16 length; | ||
31 | __u16 code; | ||
32 | __u32 parms; | ||
33 | __u8 data[PAGE_SIZE - 8]; | ||
34 | } __attribute__ ((packed)); | ||
35 | |||
36 | struct chsc_chp_cd { | ||
37 | struct chp_id chpid; | ||
38 | int m; | ||
39 | int fmt; | ||
40 | struct chsc_response_struct cpcb; | ||
41 | }; | ||
42 | |||
43 | struct chsc_cu_cd { | ||
44 | __u16 cun; | ||
45 | __u8 cssid; | ||
46 | int m; | ||
47 | int fmt; | ||
48 | struct chsc_response_struct cucb; | ||
49 | }; | ||
50 | |||
51 | struct chsc_sch_cud { | ||
52 | struct subchannel_id schid; | ||
53 | int fmt; | ||
54 | struct chsc_response_struct scub; | ||
55 | }; | ||
56 | |||
57 | struct conf_id { | ||
58 | int m; | ||
59 | __u8 cssid; | ||
60 | __u8 ssid; | ||
61 | }; | ||
62 | |||
63 | struct chsc_conf_info { | ||
64 | struct conf_id id; | ||
65 | int fmt; | ||
66 | struct chsc_response_struct scid; | ||
67 | }; | ||
68 | |||
69 | struct ccl_parm_chpid { | ||
70 | int m; | ||
71 | struct chp_id chp; | ||
72 | }; | ||
73 | |||
74 | struct ccl_parm_cssids { | ||
75 | __u8 f_cssid; | ||
76 | __u8 l_cssid; | ||
77 | }; | ||
78 | |||
79 | struct chsc_comp_list { | ||
80 | struct { | ||
81 | enum { | ||
82 | CCL_CU_ON_CHP = 1, | ||
83 | CCL_CHP_TYPE_CAP = 2, | ||
84 | CCL_CSS_IMG = 4, | ||
85 | CCL_CSS_IMG_CONF_CHAR = 5, | ||
86 | CCL_IOP_CHP = 6, | ||
87 | } ctype; | ||
88 | int fmt; | ||
89 | struct ccl_parm_chpid chpid; | ||
90 | struct ccl_parm_cssids cssids; | ||
91 | } req; | ||
92 | struct chsc_response_struct sccl; | ||
93 | }; | ||
94 | |||
95 | struct chsc_dcal { | ||
96 | struct { | ||
97 | enum { | ||
98 | DCAL_CSS_IID_PN = 4, | ||
99 | } atype; | ||
100 | __u32 list_parm[2]; | ||
101 | int fmt; | ||
102 | } req; | ||
103 | struct chsc_response_struct sdcal; | ||
104 | }; | ||
105 | |||
106 | struct chsc_cpd_info { | ||
107 | struct chp_id chpid; | ||
108 | int m; | ||
109 | int fmt; | ||
110 | int rfmt; | ||
111 | int c; | ||
112 | struct chsc_response_struct chpdb; | ||
113 | }; | ||
114 | |||
115 | #define CHSC_IOCTL_MAGIC 'c' | ||
116 | |||
117 | #define CHSC_START _IOWR(CHSC_IOCTL_MAGIC, 0x81, struct chsc_async_area) | ||
118 | #define CHSC_INFO_CHANNEL_PATH _IOWR(CHSC_IOCTL_MAGIC, 0x82, \ | ||
119 | struct chsc_chp_cd) | ||
120 | #define CHSC_INFO_CU _IOWR(CHSC_IOCTL_MAGIC, 0x83, struct chsc_cu_cd) | ||
121 | #define CHSC_INFO_SCH_CU _IOWR(CHSC_IOCTL_MAGIC, 0x84, struct chsc_sch_cud) | ||
122 | #define CHSC_INFO_CI _IOWR(CHSC_IOCTL_MAGIC, 0x85, struct chsc_conf_info) | ||
123 | #define CHSC_INFO_CCL _IOWR(CHSC_IOCTL_MAGIC, 0x86, struct chsc_comp_list) | ||
124 | #define CHSC_INFO_CPD _IOWR(CHSC_IOCTL_MAGIC, 0x87, struct chsc_cpd_info) | ||
125 | #define CHSC_INFO_DCAL _IOWR(CHSC_IOCTL_MAGIC, 0x88, struct chsc_dcal) | ||
126 | |||
127 | #endif | ||
diff --git a/include/asm-s390/cio.h b/include/asm-s390/cio.h index 0818ecd30ca6..6dccb071aec3 100644 --- a/include/asm-s390/cio.h +++ b/include/asm-s390/cio.h | |||
@@ -16,7 +16,7 @@ | |||
16 | #define __MAX_CSSID 0 | 16 | #define __MAX_CSSID 0 |
17 | 17 | ||
18 | /** | 18 | /** |
19 | * struct scsw - subchannel status word | 19 | * struct cmd_scsw - command-mode subchannel status word |
20 | * @key: subchannel key | 20 | * @key: subchannel key |
21 | * @sctl: suspend control | 21 | * @sctl: suspend control |
22 | * @eswf: esw format | 22 | * @eswf: esw format |
@@ -38,7 +38,7 @@ | |||
38 | * @cstat: subchannel status | 38 | * @cstat: subchannel status |
39 | * @count: residual count | 39 | * @count: residual count |
40 | */ | 40 | */ |
41 | struct scsw { | 41 | struct cmd_scsw { |
42 | __u32 key : 4; | 42 | __u32 key : 4; |
43 | __u32 sctl : 1; | 43 | __u32 sctl : 1; |
44 | __u32 eswf : 1; | 44 | __u32 eswf : 1; |
@@ -61,6 +61,114 @@ struct scsw { | |||
61 | __u32 count : 16; | 61 | __u32 count : 16; |
62 | } __attribute__ ((packed)); | 62 | } __attribute__ ((packed)); |
63 | 63 | ||
64 | /** | ||
65 | * struct tm_scsw - transport-mode subchannel status word | ||
66 | * @key: subchannel key | ||
67 | * @eswf: esw format | ||
68 | * @cc: deferred condition code | ||
69 | * @fmt: format | ||
70 | * @x: IRB-format control | ||
71 | * @q: interrogate-complete | ||
72 | * @ectl: extended control | ||
73 | * @pno: path not operational | ||
74 | * @fctl: function control | ||
75 | * @actl: activity control | ||
76 | * @stctl: status control | ||
77 | * @tcw: TCW address | ||
78 | * @dstat: device status | ||
79 | * @cstat: subchannel status | ||
80 | * @fcxs: FCX status | ||
81 | * @schxs: subchannel-extended status | ||
82 | */ | ||
83 | struct tm_scsw { | ||
84 | u32 key:4; | ||
85 | u32 :1; | ||
86 | u32 eswf:1; | ||
87 | u32 cc:2; | ||
88 | u32 fmt:3; | ||
89 | u32 x:1; | ||
90 | u32 q:1; | ||
91 | u32 :1; | ||
92 | u32 ectl:1; | ||
93 | u32 pno:1; | ||
94 | u32 :1; | ||
95 | u32 fctl:3; | ||
96 | u32 actl:7; | ||
97 | u32 stctl:5; | ||
98 | u32 tcw; | ||
99 | u32 dstat:8; | ||
100 | u32 cstat:8; | ||
101 | u32 fcxs:8; | ||
102 | u32 schxs:8; | ||
103 | } __attribute__ ((packed)); | ||
104 | |||
105 | /** | ||
106 | * union scsw - subchannel status word | ||
107 | * @cmd: command-mode SCSW | ||
108 | * @tm: transport-mode SCSW | ||
109 | */ | ||
110 | union scsw { | ||
111 | struct cmd_scsw cmd; | ||
112 | struct tm_scsw tm; | ||
113 | } __attribute__ ((packed)); | ||
114 | |||
115 | int scsw_is_tm(union scsw *scsw); | ||
116 | u32 scsw_key(union scsw *scsw); | ||
117 | u32 scsw_eswf(union scsw *scsw); | ||
118 | u32 scsw_cc(union scsw *scsw); | ||
119 | u32 scsw_ectl(union scsw *scsw); | ||
120 | u32 scsw_pno(union scsw *scsw); | ||
121 | u32 scsw_fctl(union scsw *scsw); | ||
122 | u32 scsw_actl(union scsw *scsw); | ||
123 | u32 scsw_stctl(union scsw *scsw); | ||
124 | u32 scsw_dstat(union scsw *scsw); | ||
125 | u32 scsw_cstat(union scsw *scsw); | ||
126 | int scsw_is_solicited(union scsw *scsw); | ||
127 | int scsw_is_valid_key(union scsw *scsw); | ||
128 | int scsw_is_valid_eswf(union scsw *scsw); | ||
129 | int scsw_is_valid_cc(union scsw *scsw); | ||
130 | int scsw_is_valid_ectl(union scsw *scsw); | ||
131 | int scsw_is_valid_pno(union scsw *scsw); | ||
132 | int scsw_is_valid_fctl(union scsw *scsw); | ||
133 | int scsw_is_valid_actl(union scsw *scsw); | ||
134 | int scsw_is_valid_stctl(union scsw *scsw); | ||
135 | int scsw_is_valid_dstat(union scsw *scsw); | ||
136 | int scsw_is_valid_cstat(union scsw *scsw); | ||
137 | int scsw_cmd_is_valid_key(union scsw *scsw); | ||
138 | int scsw_cmd_is_valid_sctl(union scsw *scsw); | ||
139 | int scsw_cmd_is_valid_eswf(union scsw *scsw); | ||
140 | int scsw_cmd_is_valid_cc(union scsw *scsw); | ||
141 | int scsw_cmd_is_valid_fmt(union scsw *scsw); | ||
142 | int scsw_cmd_is_valid_pfch(union scsw *scsw); | ||
143 | int scsw_cmd_is_valid_isic(union scsw *scsw); | ||
144 | int scsw_cmd_is_valid_alcc(union scsw *scsw); | ||
145 | int scsw_cmd_is_valid_ssi(union scsw *scsw); | ||
146 | int scsw_cmd_is_valid_zcc(union scsw *scsw); | ||
147 | int scsw_cmd_is_valid_ectl(union scsw *scsw); | ||
148 | int scsw_cmd_is_valid_pno(union scsw *scsw); | ||
149 | int scsw_cmd_is_valid_fctl(union scsw *scsw); | ||
150 | int scsw_cmd_is_valid_actl(union scsw *scsw); | ||
151 | int scsw_cmd_is_valid_stctl(union scsw *scsw); | ||
152 | int scsw_cmd_is_valid_dstat(union scsw *scsw); | ||
153 | int scsw_cmd_is_valid_cstat(union scsw *scsw); | ||
154 | int scsw_cmd_is_solicited(union scsw *scsw); | ||
155 | int scsw_tm_is_valid_key(union scsw *scsw); | ||
156 | int scsw_tm_is_valid_eswf(union scsw *scsw); | ||
157 | int scsw_tm_is_valid_cc(union scsw *scsw); | ||
158 | int scsw_tm_is_valid_fmt(union scsw *scsw); | ||
159 | int scsw_tm_is_valid_x(union scsw *scsw); | ||
160 | int scsw_tm_is_valid_q(union scsw *scsw); | ||
161 | int scsw_tm_is_valid_ectl(union scsw *scsw); | ||
162 | int scsw_tm_is_valid_pno(union scsw *scsw); | ||
163 | int scsw_tm_is_valid_fctl(union scsw *scsw); | ||
164 | int scsw_tm_is_valid_actl(union scsw *scsw); | ||
165 | int scsw_tm_is_valid_stctl(union scsw *scsw); | ||
166 | int scsw_tm_is_valid_dstat(union scsw *scsw); | ||
167 | int scsw_tm_is_valid_cstat(union scsw *scsw); | ||
168 | int scsw_tm_is_valid_fcxs(union scsw *scsw); | ||
169 | int scsw_tm_is_valid_schxs(union scsw *scsw); | ||
170 | int scsw_tm_is_solicited(union scsw *scsw); | ||
171 | |||
64 | #define SCSW_FCTL_CLEAR_FUNC 0x1 | 172 | #define SCSW_FCTL_CLEAR_FUNC 0x1 |
65 | #define SCSW_FCTL_HALT_FUNC 0x2 | 173 | #define SCSW_FCTL_HALT_FUNC 0x2 |
66 | #define SCSW_FCTL_START_FUNC 0x4 | 174 | #define SCSW_FCTL_START_FUNC 0x4 |
@@ -303,7 +411,7 @@ struct esw3 { | |||
303 | * if applicable). | 411 | * if applicable). |
304 | */ | 412 | */ |
305 | struct irb { | 413 | struct irb { |
306 | struct scsw scsw; | 414 | union scsw scsw; |
307 | union { | 415 | union { |
308 | struct esw0 esw0; | 416 | struct esw0 esw0; |
309 | struct esw1 esw1; | 417 | struct esw1 esw1; |
diff --git a/include/asm-s390/elf.h b/include/asm-s390/elf.h index b3ac262c4582..3cad56923815 100644 --- a/include/asm-s390/elf.h +++ b/include/asm-s390/elf.h | |||
@@ -113,6 +113,9 @@ | |||
113 | typedef s390_fp_regs elf_fpregset_t; | 113 | typedef s390_fp_regs elf_fpregset_t; |
114 | typedef s390_regs elf_gregset_t; | 114 | typedef s390_regs elf_gregset_t; |
115 | 115 | ||
116 | typedef s390_fp_regs compat_elf_fpregset_t; | ||
117 | typedef s390_compat_regs compat_elf_gregset_t; | ||
118 | |||
116 | #include <linux/sched.h> /* for task_struct */ | 119 | #include <linux/sched.h> /* for task_struct */ |
117 | #include <asm/system.h> /* for save_access_regs */ | 120 | #include <asm/system.h> /* for save_access_regs */ |
118 | #include <asm/mmu_context.h> | 121 | #include <asm/mmu_context.h> |
@@ -123,6 +126,10 @@ typedef s390_regs elf_gregset_t; | |||
123 | #define elf_check_arch(x) \ | 126 | #define elf_check_arch(x) \ |
124 | (((x)->e_machine == EM_S390 || (x)->e_machine == EM_S390_OLD) \ | 127 | (((x)->e_machine == EM_S390 || (x)->e_machine == EM_S390_OLD) \ |
125 | && (x)->e_ident[EI_CLASS] == ELF_CLASS) | 128 | && (x)->e_ident[EI_CLASS] == ELF_CLASS) |
129 | #define compat_elf_check_arch(x) \ | ||
130 | (((x)->e_machine == EM_S390 || (x)->e_machine == EM_S390_OLD) \ | ||
131 | && (x)->e_ident[EI_CLASS] == ELF_CLASS) | ||
132 | #define compat_start_thread start_thread31 | ||
126 | 133 | ||
127 | /* For SVR4/S390 the function pointer to be registered with `atexit` is | 134 | /* For SVR4/S390 the function pointer to be registered with `atexit` is |
128 | passed in R14. */ | 135 | passed in R14. */ |
@@ -131,6 +138,7 @@ typedef s390_regs elf_gregset_t; | |||
131 | _r->gprs[14] = 0; \ | 138 | _r->gprs[14] = 0; \ |
132 | } while (0) | 139 | } while (0) |
133 | 140 | ||
141 | #define CORE_DUMP_USE_REGSET | ||
134 | #define USE_ELF_CORE_DUMP | 142 | #define USE_ELF_CORE_DUMP |
135 | #define ELF_EXEC_PAGESIZE 4096 | 143 | #define ELF_EXEC_PAGESIZE 4096 |
136 | 144 | ||
@@ -140,44 +148,6 @@ typedef s390_regs elf_gregset_t; | |||
140 | that it will "exec", and that there is sufficient room for the brk. */ | 148 | that it will "exec", and that there is sufficient room for the brk. */ |
141 | #define ELF_ET_DYN_BASE (STACK_TOP / 3 * 2) | 149 | #define ELF_ET_DYN_BASE (STACK_TOP / 3 * 2) |
142 | 150 | ||
143 | /* Wow, the "main" arch needs arch dependent functions too.. :) */ | ||
144 | |||
145 | /* regs is struct pt_regs, pr_reg is elf_gregset_t (which is | ||
146 | now struct_user_regs, they are different) */ | ||
147 | |||
148 | static inline int dump_regs(struct pt_regs *ptregs, elf_gregset_t *regs) | ||
149 | { | ||
150 | memcpy(®s->psw, &ptregs->psw, sizeof(regs->psw)+sizeof(regs->gprs)); | ||
151 | save_access_regs(regs->acrs); | ||
152 | regs->orig_gpr2 = ptregs->orig_gpr2; | ||
153 | return 1; | ||
154 | } | ||
155 | |||
156 | #define ELF_CORE_COPY_REGS(pr_reg, regs) dump_regs(regs, &pr_reg); | ||
157 | |||
158 | static inline int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs) | ||
159 | { | ||
160 | struct pt_regs *ptregs = task_pt_regs(tsk); | ||
161 | memcpy(®s->psw, &ptregs->psw, sizeof(regs->psw)+sizeof(regs->gprs)); | ||
162 | memcpy(regs->acrs, tsk->thread.acrs, sizeof(regs->acrs)); | ||
163 | regs->orig_gpr2 = ptregs->orig_gpr2; | ||
164 | return 1; | ||
165 | } | ||
166 | |||
167 | #define ELF_CORE_COPY_TASK_REGS(tsk, regs) dump_task_regs(tsk, regs) | ||
168 | |||
169 | static inline int dump_task_fpu(struct task_struct *tsk, elf_fpregset_t *fpregs) | ||
170 | { | ||
171 | if (tsk == current) | ||
172 | save_fp_regs(fpregs); | ||
173 | else | ||
174 | memcpy(fpregs, &tsk->thread.fp_regs, sizeof(elf_fpregset_t)); | ||
175 | return 1; | ||
176 | } | ||
177 | |||
178 | #define ELF_CORE_COPY_FPREGS(tsk, fpregs) dump_task_fpu(tsk, fpregs) | ||
179 | |||
180 | |||
181 | /* This yields a mask that user programs can use to figure out what | 151 | /* This yields a mask that user programs can use to figure out what |
182 | instruction set this CPU supports. */ | 152 | instruction set this CPU supports. */ |
183 | 153 | ||
@@ -204,7 +174,10 @@ do { \ | |||
204 | set_personality(PER_SVR4); \ | 174 | set_personality(PER_SVR4); \ |
205 | else if (current->personality != PER_LINUX32) \ | 175 | else if (current->personality != PER_LINUX32) \ |
206 | set_personality(PER_LINUX); \ | 176 | set_personality(PER_LINUX); \ |
207 | clear_thread_flag(TIF_31BIT); \ | 177 | if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ |
178 | set_thread_flag(TIF_31BIT); \ | ||
179 | else \ | ||
180 | clear_thread_flag(TIF_31BIT); \ | ||
208 | } while (0) | 181 | } while (0) |
209 | #endif /* __s390x__ */ | 182 | #endif /* __s390x__ */ |
210 | 183 | ||
diff --git a/include/asm-s390/etr.h b/include/asm-s390/etr.h index b498f19bb9a7..80ef58c61970 100644 --- a/include/asm-s390/etr.h +++ b/include/asm-s390/etr.h | |||
@@ -122,7 +122,7 @@ struct etr_aib { | |||
122 | } __attribute__ ((packed,aligned(8))); | 122 | } __attribute__ ((packed,aligned(8))); |
123 | 123 | ||
124 | /* ETR interruption parameter */ | 124 | /* ETR interruption parameter */ |
125 | struct etr_interruption_parameter { | 125 | struct etr_irq_parm { |
126 | unsigned int _pad0 : 8; | 126 | unsigned int _pad0 : 8; |
127 | unsigned int pc0 : 1; /* port 0 state change */ | 127 | unsigned int pc0 : 1; /* port 0 state change */ |
128 | unsigned int pc1 : 1; /* port 1 state change */ | 128 | unsigned int pc1 : 1; /* port 1 state change */ |
@@ -213,7 +213,46 @@ static inline int etr_ptff(void *ptff_block, unsigned int func) | |||
213 | #define ETR_PTFF_SGS 0x43 /* set gross steering rate */ | 213 | #define ETR_PTFF_SGS 0x43 /* set gross steering rate */ |
214 | 214 | ||
215 | /* Functions needed by the machine check handler */ | 215 | /* Functions needed by the machine check handler */ |
216 | extern void etr_switch_to_local(void); | 216 | void etr_switch_to_local(void); |
217 | extern void etr_sync_check(void); | 217 | void etr_sync_check(void); |
218 | |||
219 | /* STP interruption parameter */ | ||
220 | struct stp_irq_parm { | ||
221 | unsigned int _pad0 : 14; | ||
222 | unsigned int tsc : 1; /* Timing status change */ | ||
223 | unsigned int lac : 1; /* Link availability change */ | ||
224 | unsigned int tcpc : 1; /* Time control parameter change */ | ||
225 | unsigned int _pad2 : 15; | ||
226 | } __attribute__ ((packed)); | ||
227 | |||
228 | #define STP_OP_SYNC 1 | ||
229 | #define STP_OP_CTRL 3 | ||
230 | |||
231 | struct stp_sstpi { | ||
232 | unsigned int rsvd0; | ||
233 | unsigned int rsvd1 : 8; | ||
234 | unsigned int stratum : 8; | ||
235 | unsigned int vbits : 16; | ||
236 | unsigned int leaps : 16; | ||
237 | unsigned int tmd : 4; | ||
238 | unsigned int ctn : 4; | ||
239 | unsigned int rsvd2 : 3; | ||
240 | unsigned int c : 1; | ||
241 | unsigned int tst : 4; | ||
242 | unsigned int tzo : 16; | ||
243 | unsigned int dsto : 16; | ||
244 | unsigned int ctrl : 16; | ||
245 | unsigned int rsvd3 : 16; | ||
246 | unsigned int tto; | ||
247 | unsigned int rsvd4; | ||
248 | unsigned int ctnid[3]; | ||
249 | unsigned int rsvd5; | ||
250 | unsigned int todoff[4]; | ||
251 | unsigned int rsvd6[48]; | ||
252 | } __attribute__ ((packed)); | ||
253 | |||
254 | /* Functions needed by the machine check handler */ | ||
255 | void stp_sync_check(void); | ||
256 | void stp_island_check(void); | ||
218 | 257 | ||
219 | #endif /* __S390_ETR_H */ | 258 | #endif /* __S390_ETR_H */ |
diff --git a/include/asm-s390/fcx.h b/include/asm-s390/fcx.h new file mode 100644 index 000000000000..8be1f3a58042 --- /dev/null +++ b/include/asm-s390/fcx.h | |||
@@ -0,0 +1,311 @@ | |||
1 | /* | ||
2 | * Functions for assembling fcx enabled I/O control blocks. | ||
3 | * | ||
4 | * Copyright IBM Corp. 2008 | ||
5 | * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | ||
6 | */ | ||
7 | |||
8 | #ifndef _ASM_S390_FCX_H | ||
9 | #define _ASM_S390_FCX_H _ASM_S390_FCX_H | ||
10 | |||
11 | #include <linux/types.h> | ||
12 | |||
13 | #define TCW_FORMAT_DEFAULT 0 | ||
14 | #define TCW_TIDAW_FORMAT_DEFAULT 0 | ||
15 | #define TCW_FLAGS_INPUT_TIDA 1 << (23 - 5) | ||
16 | #define TCW_FLAGS_TCCB_TIDA 1 << (23 - 6) | ||
17 | #define TCW_FLAGS_OUTPUT_TIDA 1 << (23 - 7) | ||
18 | #define TCW_FLAGS_TIDAW_FORMAT(x) ((x) & 3) << (23 - 9) | ||
19 | #define TCW_FLAGS_GET_TIDAW_FORMAT(x) (((x) >> (23 - 9)) & 3) | ||
20 | |||
21 | /** | ||
22 | * struct tcw - Transport Control Word (TCW) | ||
23 | * @format: TCW format | ||
24 | * @flags: TCW flags | ||
25 | * @tccbl: Transport-Command-Control-Block Length | ||
26 | * @r: Read Operations | ||
27 | * @w: Write Operations | ||
28 | * @output: Output-Data Address | ||
29 | * @input: Input-Data Address | ||
30 | * @tsb: Transport-Status-Block Address | ||
31 | * @tccb: Transport-Command-Control-Block Address | ||
32 | * @output_count: Output Count | ||
33 | * @input_count: Input Count | ||
34 | * @intrg: Interrogate TCW Address | ||
35 | */ | ||
36 | struct tcw { | ||
37 | u32 format:2; | ||
38 | u32 :6; | ||
39 | u32 flags:24; | ||
40 | u32 :8; | ||
41 | u32 tccbl:6; | ||
42 | u32 r:1; | ||
43 | u32 w:1; | ||
44 | u32 :16; | ||
45 | u64 output; | ||
46 | u64 input; | ||
47 | u64 tsb; | ||
48 | u64 tccb; | ||
49 | u32 output_count; | ||
50 | u32 input_count; | ||
51 | u32 :32; | ||
52 | u32 :32; | ||
53 | u32 :32; | ||
54 | u32 intrg; | ||
55 | } __attribute__ ((packed, aligned(64))); | ||
56 | |||
57 | #define TIDAW_FLAGS_LAST 1 << (7 - 0) | ||
58 | #define TIDAW_FLAGS_SKIP 1 << (7 - 1) | ||
59 | #define TIDAW_FLAGS_DATA_INT 1 << (7 - 2) | ||
60 | #define TIDAW_FLAGS_TTIC 1 << (7 - 3) | ||
61 | #define TIDAW_FLAGS_INSERT_CBC 1 << (7 - 4) | ||
62 | |||
63 | /** | ||
64 | * struct tidaw - Transport-Indirect-Addressing Word (TIDAW) | ||
65 | * @flags: TIDAW flags. Can be an arithmetic OR of the following constants: | ||
66 | * %TIDAW_FLAGS_LAST, %TIDAW_FLAGS_SKIP, %TIDAW_FLAGS_DATA_INT, | ||
67 | * %TIDAW_FLAGS_TTIC, %TIDAW_FLAGS_INSERT_CBC | ||
68 | * @count: Count | ||
69 | * @addr: Address | ||
70 | */ | ||
71 | struct tidaw { | ||
72 | u32 flags:8; | ||
73 | u32 :24; | ||
74 | u32 count; | ||
75 | u64 addr; | ||
76 | } __attribute__ ((packed, aligned(16))); | ||
77 | |||
78 | /** | ||
79 | * struct tsa_iostat - I/O-Status Transport-Status Area (IO-Stat TSA) | ||
80 | * @dev_time: Device Time | ||
81 | * @def_time: Defer Time | ||
82 | * @queue_time: Queue Time | ||
83 | * @dev_busy_time: Device-Busy Time | ||
84 | * @dev_act_time: Device-Active-Only Time | ||
85 | * @sense: Sense Data (if present) | ||
86 | */ | ||
87 | struct tsa_iostat { | ||
88 | u32 dev_time; | ||
89 | u32 def_time; | ||
90 | u32 queue_time; | ||
91 | u32 dev_busy_time; | ||
92 | u32 dev_act_time; | ||
93 | u8 sense[32]; | ||
94 | } __attribute__ ((packed)); | ||
95 | |||
96 | /** | ||
97 | * struct tsa_ddpcs - Device-Detected-Program-Check Transport-Status Area (DDPC TSA) | ||
98 | * @rc: Reason Code | ||
99 | * @rcq: Reason Code Qualifier | ||
100 | * @sense: Sense Data (if present) | ||
101 | */ | ||
102 | struct tsa_ddpc { | ||
103 | u32 :24; | ||
104 | u32 rc:8; | ||
105 | u8 rcq[16]; | ||
106 | u8 sense[32]; | ||
107 | } __attribute__ ((packed)); | ||
108 | |||
109 | #define TSA_INTRG_FLAGS_CU_STATE_VALID 1 << (7 - 0) | ||
110 | #define TSA_INTRG_FLAGS_DEV_STATE_VALID 1 << (7 - 1) | ||
111 | #define TSA_INTRG_FLAGS_OP_STATE_VALID 1 << (7 - 2) | ||
112 | |||
113 | /** | ||
114 | * struct tsa_intrg - Interrogate Transport-Status Area (Intrg. TSA) | ||
115 | * @format: Format | ||
116 | * @flags: Flags. Can be an arithmetic OR of the following constants: | ||
117 | * %TSA_INTRG_FLAGS_CU_STATE_VALID, %TSA_INTRG_FLAGS_DEV_STATE_VALID, | ||
118 | * %TSA_INTRG_FLAGS_OP_STATE_VALID | ||
119 | * @cu_state: Controle-Unit State | ||
120 | * @dev_state: Device State | ||
121 | * @op_state: Operation State | ||
122 | * @sd_info: State-Dependent Information | ||
123 | * @dl_id: Device-Level Identifier | ||
124 | * @dd_data: Device-Dependent Data | ||
125 | */ | ||
126 | struct tsa_intrg { | ||
127 | u32 format:8; | ||
128 | u32 flags:8; | ||
129 | u32 cu_state:8; | ||
130 | u32 dev_state:8; | ||
131 | u32 op_state:8; | ||
132 | u32 :24; | ||
133 | u8 sd_info[12]; | ||
134 | u32 dl_id; | ||
135 | u8 dd_data[28]; | ||
136 | } __attribute__ ((packed)); | ||
137 | |||
138 | #define TSB_FORMAT_NONE 0 | ||
139 | #define TSB_FORMAT_IOSTAT 1 | ||
140 | #define TSB_FORMAT_DDPC 2 | ||
141 | #define TSB_FORMAT_INTRG 3 | ||
142 | |||
143 | #define TSB_FLAGS_DCW_OFFSET_VALID 1 << (7 - 0) | ||
144 | #define TSB_FLAGS_COUNT_VALID 1 << (7 - 1) | ||
145 | #define TSB_FLAGS_CACHE_MISS 1 << (7 - 2) | ||
146 | #define TSB_FLAGS_TIME_VALID 1 << (7 - 3) | ||
147 | #define TSB_FLAGS_FORMAT(x) ((x) & 7) | ||
148 | #define TSB_FORMAT(t) ((t)->flags & 7) | ||
149 | |||
150 | /** | ||
151 | * struct tsb - Transport-Status Block (TSB) | ||
152 | * @length: Length | ||
153 | * @flags: Flags. Can be an arithmetic OR of the following constants: | ||
154 | * %TSB_FLAGS_DCW_OFFSET_VALID, %TSB_FLAGS_COUNT_VALID, %TSB_FLAGS_CACHE_MISS, | ||
155 | * %TSB_FLAGS_TIME_VALID | ||
156 | * @dcw_offset: DCW Offset | ||
157 | * @count: Count | ||
158 | * @tsa: Transport-Status-Area | ||
159 | */ | ||
160 | struct tsb { | ||
161 | u32 length:8; | ||
162 | u32 flags:8; | ||
163 | u32 dcw_offset:16; | ||
164 | u32 count; | ||
165 | u32 :32; | ||
166 | union { | ||
167 | struct tsa_iostat iostat; | ||
168 | struct tsa_ddpc ddpc; | ||
169 | struct tsa_intrg intrg; | ||
170 | } __attribute__ ((packed)) tsa; | ||
171 | } __attribute__ ((packed, aligned(8))); | ||
172 | |||
173 | #define DCW_INTRG_FORMAT_DEFAULT 0 | ||
174 | |||
175 | #define DCW_INTRG_RC_UNSPECIFIED 0 | ||
176 | #define DCW_INTRG_RC_TIMEOUT 1 | ||
177 | |||
178 | #define DCW_INTRG_RCQ_UNSPECIFIED 0 | ||
179 | #define DCW_INTRG_RCQ_PRIMARY 1 | ||
180 | #define DCW_INTRG_RCQ_SECONDARY 2 | ||
181 | |||
182 | #define DCW_INTRG_FLAGS_MPM 1 < (7 - 0) | ||
183 | #define DCW_INTRG_FLAGS_PPR 1 < (7 - 1) | ||
184 | #define DCW_INTRG_FLAGS_CRIT 1 < (7 - 2) | ||
185 | |||
186 | /** | ||
187 | * struct dcw_intrg_data - Interrogate DCW data | ||
188 | * @format: Format. Should be %DCW_INTRG_FORMAT_DEFAULT | ||
189 | * @rc: Reason Code. Can be one of %DCW_INTRG_RC_UNSPECIFIED, | ||
190 | * %DCW_INTRG_RC_TIMEOUT | ||
191 | * @rcq: Reason Code Qualifier: Can be one of %DCW_INTRG_RCQ_UNSPECIFIED, | ||
192 | * %DCW_INTRG_RCQ_PRIMARY, %DCW_INTRG_RCQ_SECONDARY | ||
193 | * @lpm: Logical-Path Mask | ||
194 | * @pam: Path-Available Mask | ||
195 | * @pim: Path-Installed Mask | ||
196 | * @timeout: Timeout | ||
197 | * @flags: Flags. Can be an arithmetic OR of %DCW_INTRG_FLAGS_MPM, | ||
198 | * %DCW_INTRG_FLAGS_PPR, %DCW_INTRG_FLAGS_CRIT | ||
199 | * @time: Time | ||
200 | * @prog_id: Program Identifier | ||
201 | * @prog_data: Program-Dependent Data | ||
202 | */ | ||
203 | struct dcw_intrg_data { | ||
204 | u32 format:8; | ||
205 | u32 rc:8; | ||
206 | u32 rcq:8; | ||
207 | u32 lpm:8; | ||
208 | u32 pam:8; | ||
209 | u32 pim:8; | ||
210 | u32 timeout:16; | ||
211 | u32 flags:8; | ||
212 | u32 :24; | ||
213 | u32 :32; | ||
214 | u64 time; | ||
215 | u64 prog_id; | ||
216 | u8 prog_data[0]; | ||
217 | } __attribute__ ((packed)); | ||
218 | |||
219 | #define DCW_FLAGS_CC 1 << (7 - 1) | ||
220 | |||
221 | #define DCW_CMD_WRITE 0x01 | ||
222 | #define DCW_CMD_READ 0x02 | ||
223 | #define DCW_CMD_CONTROL 0x03 | ||
224 | #define DCW_CMD_SENSE 0x04 | ||
225 | #define DCW_CMD_SENSE_ID 0xe4 | ||
226 | #define DCW_CMD_INTRG 0x40 | ||
227 | |||
228 | /** | ||
229 | * struct dcw - Device-Command Word (DCW) | ||
230 | * @cmd: Command Code. Can be one of %DCW_CMD_WRITE, %DCW_CMD_READ, | ||
231 | * %DCW_CMD_CONTROL, %DCW_CMD_SENSE, %DCW_CMD_SENSE_ID, %DCW_CMD_INTRG | ||
232 | * @flags: Flags. Can be an arithmetic OR of %DCW_FLAGS_CC | ||
233 | * @cd_count: Control-Data Count | ||
234 | * @count: Count | ||
235 | * @cd: Control Data | ||
236 | */ | ||
237 | struct dcw { | ||
238 | u32 cmd:8; | ||
239 | u32 flags:8; | ||
240 | u32 :8; | ||
241 | u32 cd_count:8; | ||
242 | u32 count; | ||
243 | u8 cd[0]; | ||
244 | } __attribute__ ((packed)); | ||
245 | |||
246 | #define TCCB_FORMAT_DEFAULT 0x7f | ||
247 | #define TCCB_MAX_DCW 30 | ||
248 | #define TCCB_MAX_SIZE (sizeof(struct tccb_tcah) + \ | ||
249 | TCCB_MAX_DCW * sizeof(struct dcw) + \ | ||
250 | sizeof(struct tccb_tcat)) | ||
251 | #define TCCB_SAC_DEFAULT 0xf901 | ||
252 | #define TCCB_SAC_INTRG 0xf902 | ||
253 | |||
254 | /** | ||
255 | * struct tccb_tcah - Transport-Command-Area Header (TCAH) | ||
256 | * @format: Format. Should be %TCCB_FORMAT_DEFAULT | ||
257 | * @tcal: Transport-Command-Area Length | ||
258 | * @sac: Service-Action Code. Can be one of %TCCB_SAC_DEFAULT, %TCCB_SAC_INTRG | ||
259 | * @prio: Priority | ||
260 | */ | ||
261 | struct tccb_tcah { | ||
262 | u32 format:8; | ||
263 | u32 :24; | ||
264 | u32 :24; | ||
265 | u32 tcal:8; | ||
266 | u32 sac:16; | ||
267 | u32 :8; | ||
268 | u32 prio:8; | ||
269 | u32 :32; | ||
270 | } __attribute__ ((packed)); | ||
271 | |||
272 | /** | ||
273 | * struct tccb_tcat - Transport-Command-Area Trailer (TCAT) | ||
274 | * @count: Transport Count | ||
275 | */ | ||
276 | struct tccb_tcat { | ||
277 | u32 :32; | ||
278 | u32 count; | ||
279 | } __attribute__ ((packed)); | ||
280 | |||
281 | /** | ||
282 | * struct tccb - (partial) Transport-Command-Control Block (TCCB) | ||
283 | * @tcah: TCAH | ||
284 | * @tca: Transport-Command Area | ||
285 | */ | ||
286 | struct tccb { | ||
287 | struct tccb_tcah tcah; | ||
288 | u8 tca[0]; | ||
289 | } __attribute__ ((packed, aligned(8))); | ||
290 | |||
291 | struct tcw *tcw_get_intrg(struct tcw *tcw); | ||
292 | void *tcw_get_data(struct tcw *tcw); | ||
293 | struct tccb *tcw_get_tccb(struct tcw *tcw); | ||
294 | struct tsb *tcw_get_tsb(struct tcw *tcw); | ||
295 | |||
296 | void tcw_init(struct tcw *tcw, int r, int w); | ||
297 | void tcw_finalize(struct tcw *tcw, int num_tidaws); | ||
298 | |||
299 | void tcw_set_intrg(struct tcw *tcw, struct tcw *intrg_tcw); | ||
300 | void tcw_set_data(struct tcw *tcw, void *data, int use_tidal); | ||
301 | void tcw_set_tccb(struct tcw *tcw, struct tccb *tccb); | ||
302 | void tcw_set_tsb(struct tcw *tcw, struct tsb *tsb); | ||
303 | |||
304 | void tccb_init(struct tccb *tccb, size_t tccb_size, u32 sac); | ||
305 | void tsb_init(struct tsb *tsb); | ||
306 | struct dcw *tccb_add_dcw(struct tccb *tccb, size_t tccb_size, u8 cmd, u8 flags, | ||
307 | void *cd, u8 cd_count, u32 count); | ||
308 | struct tidaw *tcw_add_tidaw(struct tcw *tcw, int num_tidaws, u8 flags, | ||
309 | void *addr, u32 count); | ||
310 | |||
311 | #endif /* _ASM_S390_FCX_H */ | ||
diff --git a/include/asm-s390/ipl.h b/include/asm-s390/ipl.h index c1b2e50392bb..eaca6dff5405 100644 --- a/include/asm-s390/ipl.h +++ b/include/asm-s390/ipl.h | |||
@@ -56,15 +56,19 @@ struct ipl_block_fcp { | |||
56 | u8 scp_data[]; | 56 | u8 scp_data[]; |
57 | } __attribute__((packed)); | 57 | } __attribute__((packed)); |
58 | 58 | ||
59 | #define DIAG308_VMPARM_SIZE 64 | ||
60 | |||
59 | struct ipl_block_ccw { | 61 | struct ipl_block_ccw { |
60 | u8 load_param[8]; | 62 | u8 load_parm[8]; |
61 | u8 reserved1[84]; | 63 | u8 reserved1[84]; |
62 | u8 reserved2[2]; | 64 | u8 reserved2[2]; |
63 | u16 devno; | 65 | u16 devno; |
64 | u8 vm_flags; | 66 | u8 vm_flags; |
65 | u8 reserved3[3]; | 67 | u8 reserved3[3]; |
66 | u32 vm_parm_len; | 68 | u32 vm_parm_len; |
67 | u8 reserved4[80]; | 69 | u8 nss_name[8]; |
70 | u8 vm_parm[DIAG308_VMPARM_SIZE]; | ||
71 | u8 reserved4[8]; | ||
68 | } __attribute__((packed)); | 72 | } __attribute__((packed)); |
69 | 73 | ||
70 | struct ipl_parameter_block { | 74 | struct ipl_parameter_block { |
@@ -73,7 +77,7 @@ struct ipl_parameter_block { | |||
73 | struct ipl_block_fcp fcp; | 77 | struct ipl_block_fcp fcp; |
74 | struct ipl_block_ccw ccw; | 78 | struct ipl_block_ccw ccw; |
75 | } ipl_info; | 79 | } ipl_info; |
76 | } __attribute__((packed)); | 80 | } __attribute__((packed,aligned(4096))); |
77 | 81 | ||
78 | /* | 82 | /* |
79 | * IPL validity flags | 83 | * IPL validity flags |
@@ -86,6 +90,8 @@ extern void do_reipl(void); | |||
86 | extern void do_halt(void); | 90 | extern void do_halt(void); |
87 | extern void do_poff(void); | 91 | extern void do_poff(void); |
88 | extern void ipl_save_parameters(void); | 92 | extern void ipl_save_parameters(void); |
93 | extern void ipl_update_parameters(void); | ||
94 | extern void get_ipl_vmparm(char *); | ||
89 | 95 | ||
90 | enum { | 96 | enum { |
91 | IPL_DEVNO_VALID = 1, | 97 | IPL_DEVNO_VALID = 1, |
@@ -147,6 +153,11 @@ enum diag308_flags { | |||
147 | DIAG308_FLAGS_LP_VALID = 0x80, | 153 | DIAG308_FLAGS_LP_VALID = 0x80, |
148 | }; | 154 | }; |
149 | 155 | ||
156 | enum diag308_vm_flags { | ||
157 | DIAG308_VM_FLAGS_NSS_VALID = 0x80, | ||
158 | DIAG308_VM_FLAGS_VP_VALID = 0x40, | ||
159 | }; | ||
160 | |||
150 | enum diag308_rc { | 161 | enum diag308_rc { |
151 | DIAG308_RC_OK = 1, | 162 | DIAG308_RC_OK = 1, |
152 | }; | 163 | }; |
diff --git a/include/asm-s390/isc.h b/include/asm-s390/isc.h new file mode 100644 index 000000000000..34bb8916db4f --- /dev/null +++ b/include/asm-s390/isc.h | |||
@@ -0,0 +1,25 @@ | |||
1 | #ifndef _ASM_S390_ISC_H | ||
2 | #define _ASM_S390_ISC_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | |||
6 | /* | ||
7 | * I/O interruption subclasses used by drivers. | ||
8 | * Please add all used iscs here so that it is possible to distribute | ||
9 | * isc usage between drivers. | ||
10 | * Reminder: 0 is highest priority, 7 lowest. | ||
11 | */ | ||
12 | #define MAX_ISC 7 | ||
13 | |||
14 | /* Regular I/O interrupts. */ | ||
15 | #define IO_SCH_ISC 3 /* regular I/O subchannels */ | ||
16 | #define CONSOLE_ISC 1 /* console I/O subchannel */ | ||
17 | #define CHSC_SCH_ISC 7 /* CHSC subchannels */ | ||
18 | /* Adapter interrupts. */ | ||
19 | #define QDIO_AIRQ_ISC IO_SCH_ISC /* I/O subchannel in qdio mode */ | ||
20 | |||
21 | /* Functions for registration of I/O interruption subclasses */ | ||
22 | void isc_register(unsigned int isc); | ||
23 | void isc_unregister(unsigned int isc); | ||
24 | |||
25 | #endif /* _ASM_S390_ISC_H */ | ||
diff --git a/include/asm-s390/itcw.h b/include/asm-s390/itcw.h new file mode 100644 index 000000000000..a9bc5c36b32a --- /dev/null +++ b/include/asm-s390/itcw.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * Functions for incremental construction of fcx enabled I/O control blocks. | ||
3 | * | ||
4 | * Copyright IBM Corp. 2008 | ||
5 | * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | ||
6 | */ | ||
7 | |||
8 | #ifndef _ASM_S390_ITCW_H | ||
9 | #define _ASM_S390_ITCW_H _ASM_S390_ITCW_H | ||
10 | |||
11 | #include <linux/types.h> | ||
12 | #include <asm/fcx.h> | ||
13 | |||
14 | #define ITCW_OP_READ 0 | ||
15 | #define ITCW_OP_WRITE 1 | ||
16 | |||
17 | struct itcw; | ||
18 | |||
19 | struct tcw *itcw_get_tcw(struct itcw *itcw); | ||
20 | size_t itcw_calc_size(int intrg, int max_tidaws, int intrg_max_tidaws); | ||
21 | struct itcw *itcw_init(void *buffer, size_t size, int op, int intrg, | ||
22 | int max_tidaws, int intrg_max_tidaws); | ||
23 | struct dcw *itcw_add_dcw(struct itcw *itcw, u8 cmd, u8 flags, void *cd, | ||
24 | u8 cd_count, u32 count); | ||
25 | struct tidaw *itcw_add_tidaw(struct itcw *itcw, u8 flags, void *addr, | ||
26 | u32 count); | ||
27 | void itcw_set_data(struct itcw *itcw, void *addr, int use_tidal); | ||
28 | void itcw_finalize(struct itcw *itcw); | ||
29 | |||
30 | #endif /* _ASM_S390_ITCW_H */ | ||
diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h index bd0ea191dfa9..0bdb704ae051 100644 --- a/include/asm-s390/pgtable.h +++ b/include/asm-s390/pgtable.h | |||
@@ -29,6 +29,7 @@ | |||
29 | * the S390 page table tree. | 29 | * the S390 page table tree. |
30 | */ | 30 | */ |
31 | #ifndef __ASSEMBLY__ | 31 | #ifndef __ASSEMBLY__ |
32 | #include <linux/sched.h> | ||
32 | #include <linux/mm_types.h> | 33 | #include <linux/mm_types.h> |
33 | #include <asm/bitops.h> | 34 | #include <asm/bitops.h> |
34 | #include <asm/bug.h> | 35 | #include <asm/bug.h> |
diff --git a/include/asm-s390/processor.h b/include/asm-s390/processor.h index a00f79dd323b..4af80af2a88f 100644 --- a/include/asm-s390/processor.h +++ b/include/asm-s390/processor.h | |||
@@ -143,11 +143,19 @@ struct stack_frame { | |||
143 | /* | 143 | /* |
144 | * Do necessary setup to start up a new thread. | 144 | * Do necessary setup to start up a new thread. |
145 | */ | 145 | */ |
146 | #define start_thread(regs, new_psw, new_stackp) do { \ | 146 | #define start_thread(regs, new_psw, new_stackp) do { \ |
147 | set_fs(USER_DS); \ | 147 | set_fs(USER_DS); \ |
148 | regs->psw.mask = psw_user_bits; \ | 148 | regs->psw.mask = psw_user_bits; \ |
149 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ | 149 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ |
150 | regs->gprs[15] = new_stackp ; \ | 150 | regs->gprs[15] = new_stackp; \ |
151 | } while (0) | ||
152 | |||
153 | #define start_thread31(regs, new_psw, new_stackp) do { \ | ||
154 | set_fs(USER_DS); \ | ||
155 | regs->psw.mask = psw_user32_bits; \ | ||
156 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ | ||
157 | regs->gprs[15] = new_stackp; \ | ||
158 | crst_table_downgrade(current->mm, 1UL << 31); \ | ||
151 | } while (0) | 159 | } while (0) |
152 | 160 | ||
153 | /* Forward declaration, a strange C thing */ | 161 | /* Forward declaration, a strange C thing */ |
@@ -328,16 +336,6 @@ extern void (*s390_base_mcck_handler_fn)(void); | |||
328 | extern void (*s390_base_pgm_handler_fn)(void); | 336 | extern void (*s390_base_pgm_handler_fn)(void); |
329 | extern void (*s390_base_ext_handler_fn)(void); | 337 | extern void (*s390_base_ext_handler_fn)(void); |
330 | 338 | ||
331 | /* | ||
332 | * CPU idle notifier chain. | ||
333 | */ | ||
334 | #define S390_CPU_IDLE 0 | ||
335 | #define S390_CPU_NOT_IDLE 1 | ||
336 | |||
337 | struct notifier_block; | ||
338 | int register_idle_notifier(struct notifier_block *nb); | ||
339 | int unregister_idle_notifier(struct notifier_block *nb); | ||
340 | |||
341 | #define ARCH_LOW_ADDRESS_LIMIT 0x7fffffffUL | 339 | #define ARCH_LOW_ADDRESS_LIMIT 0x7fffffffUL |
342 | 340 | ||
343 | #endif | 341 | #endif |
diff --git a/include/asm-s390/ptrace.h b/include/asm-s390/ptrace.h index d7d4e2eb3e6f..af2c9ac28a07 100644 --- a/include/asm-s390/ptrace.h +++ b/include/asm-s390/ptrace.h | |||
@@ -215,6 +215,12 @@ typedef struct | |||
215 | unsigned long addr; | 215 | unsigned long addr; |
216 | } __attribute__ ((aligned(8))) psw_t; | 216 | } __attribute__ ((aligned(8))) psw_t; |
217 | 217 | ||
218 | typedef struct | ||
219 | { | ||
220 | __u32 mask; | ||
221 | __u32 addr; | ||
222 | } __attribute__ ((aligned(8))) psw_compat_t; | ||
223 | |||
218 | #ifndef __s390x__ | 224 | #ifndef __s390x__ |
219 | 225 | ||
220 | #define PSW_MASK_PER 0x40000000UL | 226 | #define PSW_MASK_PER 0x40000000UL |
@@ -292,6 +298,15 @@ typedef struct | |||
292 | unsigned long orig_gpr2; | 298 | unsigned long orig_gpr2; |
293 | } s390_regs; | 299 | } s390_regs; |
294 | 300 | ||
301 | typedef struct | ||
302 | { | ||
303 | psw_compat_t psw; | ||
304 | __u32 gprs[NUM_GPRS]; | ||
305 | __u32 acrs[NUM_ACRS]; | ||
306 | __u32 orig_gpr2; | ||
307 | } s390_compat_regs; | ||
308 | |||
309 | |||
295 | #ifdef __KERNEL__ | 310 | #ifdef __KERNEL__ |
296 | #include <asm/setup.h> | 311 | #include <asm/setup.h> |
297 | #include <asm/page.h> | 312 | #include <asm/page.h> |
diff --git a/include/asm-s390/qdio.h b/include/asm-s390/qdio.h index 11240342a0f4..6813772171f2 100644 --- a/include/asm-s390/qdio.h +++ b/include/asm-s390/qdio.h | |||
@@ -1,404 +1,382 @@ | |||
1 | /* | 1 | /* |
2 | * linux/include/asm-s390/qdio.h | 2 | * linux/include/asm-s390/qdio.h |
3 | * | 3 | * |
4 | * Linux for S/390 QDIO base support, Hipersocket base support | 4 | * Copyright 2000,2008 IBM Corp. |
5 | * version 2 | ||
6 | * | ||
7 | * Copyright 2000,2002 IBM Corporation | ||
8 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com> | 5 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com> |
6 | * Jan Glauber <jang@linux.vnet.ibm.com> | ||
9 | * | 7 | * |
10 | */ | 8 | */ |
11 | #ifndef __QDIO_H__ | 9 | #ifndef __QDIO_H__ |
12 | #define __QDIO_H__ | 10 | #define __QDIO_H__ |
13 | 11 | ||
14 | /* note, that most of the typedef's are from ingo. */ | ||
15 | |||
16 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
17 | #include <asm/cio.h> | 13 | #include <asm/cio.h> |
18 | #include <asm/ccwdev.h> | 14 | #include <asm/ccwdev.h> |
19 | 15 | ||
20 | #define QDIO_NAME "qdio " | 16 | #define QDIO_MAX_QUEUES_PER_IRQ 32 |
21 | 17 | #define QDIO_MAX_BUFFERS_PER_Q 128 | |
22 | #ifndef __s390x__ | 18 | #define QDIO_MAX_BUFFERS_MASK (QDIO_MAX_BUFFERS_PER_Q - 1) |
23 | #define QDIO_32_BIT | 19 | #define QDIO_MAX_ELEMENTS_PER_BUFFER 16 |
24 | #endif /* __s390x__ */ | 20 | #define QDIO_SBAL_SIZE 256 |
25 | 21 | ||
26 | /**** CONSTANTS, that are relied on without using these symbols *****/ | 22 | #define QDIO_QETH_QFMT 0 |
27 | #define QDIO_MAX_QUEUES_PER_IRQ 32 /* used in width of unsigned int */ | 23 | #define QDIO_ZFCP_QFMT 1 |
28 | /************************ END of CONSTANTS **************************/ | 24 | #define QDIO_IQDIO_QFMT 2 |
29 | #define QDIO_MAX_BUFFERS_PER_Q 128 /* must be a power of 2 (%x=&(x-1)*/ | 25 | |
30 | #define QDIO_BUF_ORDER 7 /* 2**this == number of pages used for sbals in 1 q */ | 26 | /** |
31 | #define QDIO_MAX_ELEMENTS_PER_BUFFER 16 | 27 | * struct qdesfmt0 - queue descriptor, format 0 |
32 | #define SBAL_SIZE 256 | 28 | * @sliba: storage list information block address |
33 | 29 | * @sla: storage list address | |
34 | #define QDIO_QETH_QFMT 0 | 30 | * @slsba: storage list state block address |
35 | #define QDIO_ZFCP_QFMT 1 | 31 | * @akey: access key for DLIB |
36 | #define QDIO_IQDIO_QFMT 2 | 32 | * @bkey: access key for SL |
37 | #define QDIO_IQDIO_QFMT_ASYNCH 3 | 33 | * @ckey: access key for SBALs |
38 | 34 | * @dkey: access key for SLSB | |
39 | struct qdio_buffer_element{ | 35 | */ |
40 | unsigned int flags; | ||
41 | unsigned int length; | ||
42 | #ifdef QDIO_32_BIT | ||
43 | void *reserved; | ||
44 | #endif /* QDIO_32_BIT */ | ||
45 | void *addr; | ||
46 | } __attribute__ ((packed,aligned(16))); | ||
47 | |||
48 | struct qdio_buffer{ | ||
49 | volatile struct qdio_buffer_element element[16]; | ||
50 | } __attribute__ ((packed,aligned(256))); | ||
51 | |||
52 | |||
53 | /* params are: ccw_device, status, qdio_error, siga_error, | ||
54 | queue_number, first element processed, number of elements processed, | ||
55 | int_parm */ | ||
56 | typedef void qdio_handler_t(struct ccw_device *,unsigned int,unsigned int, | ||
57 | unsigned int,unsigned int,int,int,unsigned long); | ||
58 | |||
59 | |||
60 | #define QDIO_STATUS_INBOUND_INT 0x01 | ||
61 | #define QDIO_STATUS_OUTBOUND_INT 0x02 | ||
62 | #define QDIO_STATUS_LOOK_FOR_ERROR 0x04 | ||
63 | #define QDIO_STATUS_MORE_THAN_ONE_QDIO_ERROR 0x08 | ||
64 | #define QDIO_STATUS_MORE_THAN_ONE_SIGA_ERROR 0x10 | ||
65 | #define QDIO_STATUS_ACTIVATE_CHECK_CONDITION 0x20 | ||
66 | |||
67 | #define QDIO_SIGA_ERROR_ACCESS_EXCEPTION 0x10 | ||
68 | #define QDIO_SIGA_ERROR_B_BIT_SET 0x20 | ||
69 | |||
70 | /* for qdio_initialize */ | ||
71 | #define QDIO_INBOUND_0COPY_SBALS 0x01 | ||
72 | #define QDIO_OUTBOUND_0COPY_SBALS 0x02 | ||
73 | #define QDIO_USE_OUTBOUND_PCIS 0x04 | ||
74 | |||
75 | /* for qdio_cleanup */ | ||
76 | #define QDIO_FLAG_CLEANUP_USING_CLEAR 0x01 | ||
77 | #define QDIO_FLAG_CLEANUP_USING_HALT 0x02 | ||
78 | |||
79 | struct qdio_initialize { | ||
80 | struct ccw_device *cdev; | ||
81 | unsigned char q_format; | ||
82 | unsigned char adapter_name[8]; | ||
83 | unsigned int qib_param_field_format; /*adapter dependent*/ | ||
84 | /* pointer to 128 bytes or NULL, if no param field */ | ||
85 | unsigned char *qib_param_field; /* adapter dependent */ | ||
86 | /* pointer to no_queues*128 words of data or NULL */ | ||
87 | unsigned long *input_slib_elements; | ||
88 | unsigned long *output_slib_elements; | ||
89 | unsigned int min_input_threshold; | ||
90 | unsigned int max_input_threshold; | ||
91 | unsigned int min_output_threshold; | ||
92 | unsigned int max_output_threshold; | ||
93 | unsigned int no_input_qs; | ||
94 | unsigned int no_output_qs; | ||
95 | qdio_handler_t *input_handler; | ||
96 | qdio_handler_t *output_handler; | ||
97 | unsigned long int_parm; | ||
98 | unsigned long flags; | ||
99 | void **input_sbal_addr_array; /* addr of n*128 void ptrs */ | ||
100 | void **output_sbal_addr_array; /* addr of n*128 void ptrs */ | ||
101 | }; | ||
102 | |||
103 | extern int qdio_initialize(struct qdio_initialize *init_data); | ||
104 | extern int qdio_allocate(struct qdio_initialize *init_data); | ||
105 | extern int qdio_establish(struct qdio_initialize *init_data); | ||
106 | |||
107 | extern int qdio_activate(struct ccw_device *,int flags); | ||
108 | |||
109 | #define QDIO_STATE_MUST_USE_OUTB_PCI 0x00000001 | ||
110 | #define QDIO_STATE_INACTIVE 0x00000002 /* after qdio_cleanup */ | ||
111 | #define QDIO_STATE_ESTABLISHED 0x00000004 /* after qdio_initialize */ | ||
112 | #define QDIO_STATE_ACTIVE 0x00000008 /* after qdio_activate */ | ||
113 | #define QDIO_STATE_STOPPED 0x00000010 /* after queues went down */ | ||
114 | extern unsigned long qdio_get_status(int irq); | ||
115 | |||
116 | |||
117 | #define QDIO_FLAG_SYNC_INPUT 0x01 | ||
118 | #define QDIO_FLAG_SYNC_OUTPUT 0x02 | ||
119 | #define QDIO_FLAG_UNDER_INTERRUPT 0x04 | ||
120 | #define QDIO_FLAG_NO_INPUT_INTERRUPT_CONTEXT 0x08 /* no effect on | ||
121 | adapter interrupts */ | ||
122 | #define QDIO_FLAG_DONT_SIGA 0x10 | ||
123 | #define QDIO_FLAG_PCI_OUT 0x20 | ||
124 | |||
125 | extern int do_QDIO(struct ccw_device*, unsigned int flags, | ||
126 | unsigned int queue_number, | ||
127 | unsigned int qidx,unsigned int count, | ||
128 | struct qdio_buffer *buffers); | ||
129 | |||
130 | extern int qdio_get_ssqd_pct(struct ccw_device*); | ||
131 | extern int qdio_synchronize(struct ccw_device*, unsigned int flags, | ||
132 | unsigned int queue_number); | ||
133 | |||
134 | extern int qdio_cleanup(struct ccw_device*, int how); | ||
135 | extern int qdio_shutdown(struct ccw_device*, int how); | ||
136 | extern int qdio_free(struct ccw_device*); | ||
137 | |||
138 | unsigned char qdio_get_slsb_state(struct ccw_device*, unsigned int flag, | ||
139 | unsigned int queue_number, | ||
140 | unsigned int qidx); | ||
141 | |||
142 | extern void qdio_init_scrubber(void); | ||
143 | |||
144 | struct qdesfmt0 { | 36 | struct qdesfmt0 { |
145 | #ifdef QDIO_32_BIT | 37 | u64 sliba; |
146 | unsigned long res1; /* reserved */ | 38 | u64 sla; |
147 | #endif /* QDIO_32_BIT */ | 39 | u64 slsba; |
148 | unsigned long sliba; /* storage-list-information-block | 40 | u32 : 32; |
149 | address */ | 41 | u32 akey : 4; |
150 | #ifdef QDIO_32_BIT | 42 | u32 bkey : 4; |
151 | unsigned long res2; /* reserved */ | 43 | u32 ckey : 4; |
152 | #endif /* QDIO_32_BIT */ | 44 | u32 dkey : 4; |
153 | unsigned long sla; /* storage-list address */ | 45 | u32 : 16; |
154 | #ifdef QDIO_32_BIT | ||
155 | unsigned long res3; /* reserved */ | ||
156 | #endif /* QDIO_32_BIT */ | ||
157 | unsigned long slsba; /* storage-list-state-block address */ | ||
158 | unsigned int res4; /* reserved */ | ||
159 | unsigned int akey : 4; /* access key for DLIB */ | ||
160 | unsigned int bkey : 4; /* access key for SL */ | ||
161 | unsigned int ckey : 4; /* access key for SBALs */ | ||
162 | unsigned int dkey : 4; /* access key for SLSB */ | ||
163 | unsigned int res5 : 16; /* reserved */ | ||
164 | } __attribute__ ((packed)); | 46 | } __attribute__ ((packed)); |
165 | 47 | ||
166 | /* | 48 | /** |
167 | * Queue-Description record (QDR) | 49 | * struct qdr - queue description record (QDR) |
50 | * @qfmt: queue format | ||
51 | * @pfmt: implementation dependent parameter format | ||
52 | * @ac: adapter characteristics | ||
53 | * @iqdcnt: input queue descriptor count | ||
54 | * @oqdcnt: output queue descriptor count | ||
55 | * @iqdsz: inpout queue descriptor size | ||
56 | * @oqdsz: output queue descriptor size | ||
57 | * @qiba: queue information block address | ||
58 | * @qkey: queue information block key | ||
59 | * @qdf0: queue descriptions | ||
168 | */ | 60 | */ |
169 | struct qdr { | 61 | struct qdr { |
170 | unsigned int qfmt : 8; /* queue format */ | 62 | u32 qfmt : 8; |
171 | unsigned int pfmt : 8; /* impl. dep. parameter format */ | 63 | u32 pfmt : 8; |
172 | unsigned int res1 : 8; /* reserved */ | 64 | u32 : 8; |
173 | unsigned int ac : 8; /* adapter characteristics */ | 65 | u32 ac : 8; |
174 | unsigned int res2 : 8; /* reserved */ | 66 | u32 : 8; |
175 | unsigned int iqdcnt : 8; /* input-queue-descriptor count */ | 67 | u32 iqdcnt : 8; |
176 | unsigned int res3 : 8; /* reserved */ | 68 | u32 : 8; |
177 | unsigned int oqdcnt : 8; /* output-queue-descriptor count */ | 69 | u32 oqdcnt : 8; |
178 | unsigned int res4 : 8; /* reserved */ | 70 | u32 : 8; |
179 | unsigned int iqdsz : 8; /* input-queue-descriptor size */ | 71 | u32 iqdsz : 8; |
180 | unsigned int res5 : 8; /* reserved */ | 72 | u32 : 8; |
181 | unsigned int oqdsz : 8; /* output-queue-descriptor size */ | 73 | u32 oqdsz : 8; |
182 | unsigned int res6[9]; /* reserved */ | 74 | /* private: */ |
183 | #ifdef QDIO_32_BIT | 75 | u32 res[9]; |
184 | unsigned long res7; /* reserved */ | 76 | /* public: */ |
185 | #endif /* QDIO_32_BIT */ | 77 | u64 qiba; |
186 | unsigned long qiba; /* queue-information-block address */ | 78 | u32 : 32; |
187 | unsigned int res8; /* reserved */ | 79 | u32 qkey : 4; |
188 | unsigned int qkey : 4; /* queue-information-block key */ | 80 | u32 : 28; |
189 | unsigned int res9 : 28; /* reserved */ | 81 | struct qdesfmt0 qdf0[126]; |
190 | /* union _qd {*/ /* why this? */ | 82 | } __attribute__ ((packed, aligned(4096))); |
191 | struct qdesfmt0 qdf0[126]; | 83 | |
192 | /* } qd;*/ | 84 | #define QIB_AC_OUTBOUND_PCI_SUPPORTED 0x40 |
193 | } __attribute__ ((packed,aligned(4096))); | ||
194 | |||
195 | |||
196 | /* | ||
197 | * queue information block (QIB) | ||
198 | */ | ||
199 | #define QIB_AC_INBOUND_PCI_SUPPORTED 0x80 | ||
200 | #define QIB_AC_OUTBOUND_PCI_SUPPORTED 0x40 | ||
201 | #define QIB_RFLAGS_ENABLE_QEBSM 0x80 | 85 | #define QIB_RFLAGS_ENABLE_QEBSM 0x80 |
202 | 86 | ||
87 | /** | ||
88 | * struct qib - queue information block (QIB) | ||
89 | * @qfmt: queue format | ||
90 | * @pfmt: implementation dependent parameter format | ||
91 | * @rflags: QEBSM | ||
92 | * @ac: adapter characteristics | ||
93 | * @isliba: absolute address of first input SLIB | ||
94 | * @osliba: absolute address of first output SLIB | ||
95 | * @ebcnam: adapter identifier in EBCDIC | ||
96 | * @parm: implementation dependent parameters | ||
97 | */ | ||
203 | struct qib { | 98 | struct qib { |
204 | unsigned int qfmt : 8; /* queue format */ | 99 | u32 qfmt : 8; |
205 | unsigned int pfmt : 8; /* impl. dep. parameter format */ | 100 | u32 pfmt : 8; |
206 | unsigned int rflags : 8; /* QEBSM */ | 101 | u32 rflags : 8; |
207 | unsigned int ac : 8; /* adapter characteristics */ | 102 | u32 ac : 8; |
208 | unsigned int res2; /* reserved */ | 103 | u32 : 32; |
209 | #ifdef QDIO_32_BIT | 104 | u64 isliba; |
210 | unsigned long res3; /* reserved */ | 105 | u64 osliba; |
211 | #endif /* QDIO_32_BIT */ | 106 | u32 : 32; |
212 | unsigned long isliba; /* absolute address of 1st | 107 | u32 : 32; |
213 | input SLIB */ | 108 | u8 ebcnam[8]; |
214 | #ifdef QDIO_32_BIT | 109 | /* private: */ |
215 | unsigned long res4; /* reserved */ | 110 | u8 res[88]; |
216 | #endif /* QDIO_32_BIT */ | 111 | /* public: */ |
217 | unsigned long osliba; /* absolute address of 1st | 112 | u8 parm[QDIO_MAX_BUFFERS_PER_Q]; |
218 | output SLIB */ | 113 | } __attribute__ ((packed, aligned(256))); |
219 | unsigned int res5; /* reserved */ | 114 | |
220 | unsigned int res6; /* reserved */ | 115 | /** |
221 | unsigned char ebcnam[8]; /* adapter identifier in EBCDIC */ | 116 | * struct slibe - storage list information block element (SLIBE) |
222 | unsigned char res7[88]; /* reserved */ | 117 | * @parms: implementation dependent parameters |
223 | unsigned char parm[QDIO_MAX_BUFFERS_PER_Q]; | ||
224 | /* implementation dependent | ||
225 | parameters */ | ||
226 | } __attribute__ ((packed,aligned(256))); | ||
227 | |||
228 | |||
229 | /* | ||
230 | * storage-list-information block element (SLIBE) | ||
231 | */ | 118 | */ |
232 | struct slibe { | 119 | struct slibe { |
233 | #ifdef QDIO_32_BIT | 120 | u64 parms; |
234 | unsigned long res; /* reserved */ | ||
235 | #endif /* QDIO_32_BIT */ | ||
236 | unsigned long parms; /* implementation dependent | ||
237 | parameters */ | ||
238 | }; | 121 | }; |
239 | 122 | ||
240 | /* | 123 | /** |
241 | * storage-list-information block (SLIB) | 124 | * struct slib - storage list information block (SLIB) |
125 | * @nsliba: next SLIB address (if any) | ||
126 | * @sla: SL address | ||
127 | * @slsba: SLSB address | ||
128 | * @slibe: SLIB elements | ||
242 | */ | 129 | */ |
243 | struct slib { | 130 | struct slib { |
244 | #ifdef QDIO_32_BIT | 131 | u64 nsliba; |
245 | unsigned long res1; /* reserved */ | 132 | u64 sla; |
246 | #endif /* QDIO_32_BIT */ | 133 | u64 slsba; |
247 | unsigned long nsliba; /* next SLIB address (if any) */ | 134 | /* private: */ |
248 | #ifdef QDIO_32_BIT | 135 | u8 res[1000]; |
249 | unsigned long res2; /* reserved */ | 136 | /* public: */ |
250 | #endif /* QDIO_32_BIT */ | 137 | struct slibe slibe[QDIO_MAX_BUFFERS_PER_Q]; |
251 | unsigned long sla; /* SL address */ | 138 | } __attribute__ ((packed, aligned(2048))); |
252 | #ifdef QDIO_32_BIT | 139 | |
253 | unsigned long res3; /* reserved */ | 140 | /** |
254 | #endif /* QDIO_32_BIT */ | 141 | * struct sbal_flags - storage block address list flags |
255 | unsigned long slsba; /* SLSB address */ | 142 | * @last: last entry |
256 | unsigned char res4[1000]; /* reserved */ | 143 | * @cont: contiguous storage |
257 | struct slibe slibe[QDIO_MAX_BUFFERS_PER_Q]; /* SLIB elements */ | 144 | * @frag: fragmentation |
258 | } __attribute__ ((packed,aligned(2048))); | 145 | */ |
259 | |||
260 | struct sbal_flags { | 146 | struct sbal_flags { |
261 | unsigned char res1 : 1; /* reserved */ | 147 | u8 : 1; |
262 | unsigned char last : 1; /* last entry */ | 148 | u8 last : 1; |
263 | unsigned char cont : 1; /* contiguous storage */ | 149 | u8 cont : 1; |
264 | unsigned char res2 : 1; /* reserved */ | 150 | u8 : 1; |
265 | unsigned char frag : 2; /* fragmentation (s.below) */ | 151 | u8 frag : 2; |
266 | unsigned char res3 : 2; /* reserved */ | 152 | u8 : 2; |
267 | } __attribute__ ((packed)); | 153 | } __attribute__ ((packed)); |
268 | 154 | ||
269 | #define SBAL_FLAGS_FIRST_FRAG 0x04000000UL | 155 | #define SBAL_FLAGS_FIRST_FRAG 0x04000000UL |
270 | #define SBAL_FLAGS_MIDDLE_FRAG 0x08000000UL | 156 | #define SBAL_FLAGS_MIDDLE_FRAG 0x08000000UL |
271 | #define SBAL_FLAGS_LAST_FRAG 0x0c000000UL | 157 | #define SBAL_FLAGS_LAST_FRAG 0x0c000000UL |
272 | #define SBAL_FLAGS_LAST_ENTRY 0x40000000UL | 158 | #define SBAL_FLAGS_LAST_ENTRY 0x40000000UL |
273 | #define SBAL_FLAGS_CONTIGUOUS 0x20000000UL | 159 | #define SBAL_FLAGS_CONTIGUOUS 0x20000000UL |
274 | 160 | ||
275 | #define SBAL_FLAGS0_DATA_CONTINUATION 0x20UL | 161 | #define SBAL_FLAGS0_DATA_CONTINUATION 0x20UL |
276 | 162 | ||
277 | /* Awesome OpenFCP extensions */ | 163 | /* Awesome OpenFCP extensions */ |
278 | #define SBAL_FLAGS0_TYPE_STATUS 0x00UL | 164 | #define SBAL_FLAGS0_TYPE_STATUS 0x00UL |
279 | #define SBAL_FLAGS0_TYPE_WRITE 0x08UL | 165 | #define SBAL_FLAGS0_TYPE_WRITE 0x08UL |
280 | #define SBAL_FLAGS0_TYPE_READ 0x10UL | 166 | #define SBAL_FLAGS0_TYPE_READ 0x10UL |
281 | #define SBAL_FLAGS0_TYPE_WRITE_READ 0x18UL | 167 | #define SBAL_FLAGS0_TYPE_WRITE_READ 0x18UL |
282 | #define SBAL_FLAGS0_MORE_SBALS 0x04UL | 168 | #define SBAL_FLAGS0_MORE_SBALS 0x04UL |
283 | #define SBAL_FLAGS0_COMMAND 0x02UL | 169 | #define SBAL_FLAGS0_COMMAND 0x02UL |
284 | #define SBAL_FLAGS0_LAST_SBAL 0x00UL | 170 | #define SBAL_FLAGS0_LAST_SBAL 0x00UL |
285 | #define SBAL_FLAGS0_ONLY_SBAL SBAL_FLAGS0_COMMAND | 171 | #define SBAL_FLAGS0_ONLY_SBAL SBAL_FLAGS0_COMMAND |
286 | #define SBAL_FLAGS0_MIDDLE_SBAL SBAL_FLAGS0_MORE_SBALS | 172 | #define SBAL_FLAGS0_MIDDLE_SBAL SBAL_FLAGS0_MORE_SBALS |
287 | #define SBAL_FLAGS0_FIRST_SBAL SBAL_FLAGS0_MORE_SBALS | SBAL_FLAGS0_COMMAND | 173 | #define SBAL_FLAGS0_FIRST_SBAL SBAL_FLAGS0_MORE_SBALS | SBAL_FLAGS0_COMMAND |
288 | /* Naught of interest beyond this point */ | 174 | #define SBAL_FLAGS0_PCI 0x40 |
289 | 175 | ||
290 | #define SBAL_FLAGS0_PCI 0x40 | 176 | /** |
177 | * struct sbal_sbalf_0 - sbal flags for sbale 0 | ||
178 | * @pci: PCI indicator | ||
179 | * @cont: data continuation | ||
180 | * @sbtype: storage-block type (FCP) | ||
181 | */ | ||
291 | struct sbal_sbalf_0 { | 182 | struct sbal_sbalf_0 { |
292 | unsigned char res1 : 1; /* reserved */ | 183 | u8 : 1; |
293 | unsigned char pci : 1; /* PCI indicator */ | 184 | u8 pci : 1; |
294 | unsigned char cont : 1; /* data continuation */ | 185 | u8 cont : 1; |
295 | unsigned char sbtype: 2; /* storage-block type (OpenFCP) */ | 186 | u8 sbtype : 2; |
296 | unsigned char res2 : 3; /* reserved */ | 187 | u8 : 3; |
297 | } __attribute__ ((packed)); | 188 | } __attribute__ ((packed)); |
298 | 189 | ||
190 | /** | ||
191 | * struct sbal_sbalf_1 - sbal flags for sbale 1 | ||
192 | * @key: storage key | ||
193 | */ | ||
299 | struct sbal_sbalf_1 { | 194 | struct sbal_sbalf_1 { |
300 | unsigned char res1 : 4; /* reserved */ | 195 | u8 : 4; |
301 | unsigned char key : 4; /* storage key */ | 196 | u8 key : 4; |
302 | } __attribute__ ((packed)); | 197 | } __attribute__ ((packed)); |
303 | 198 | ||
199 | /** | ||
200 | * struct sbal_sbalf_14 - sbal flags for sbale 14 | ||
201 | * @erridx: error index | ||
202 | */ | ||
304 | struct sbal_sbalf_14 { | 203 | struct sbal_sbalf_14 { |
305 | unsigned char res1 : 4; /* reserved */ | 204 | u8 : 4; |
306 | unsigned char erridx : 4; /* error index */ | 205 | u8 erridx : 4; |
307 | } __attribute__ ((packed)); | 206 | } __attribute__ ((packed)); |
308 | 207 | ||
208 | /** | ||
209 | * struct sbal_sbalf_15 - sbal flags for sbale 15 | ||
210 | * @reason: reason for error state | ||
211 | */ | ||
309 | struct sbal_sbalf_15 { | 212 | struct sbal_sbalf_15 { |
310 | unsigned char reason; /* reserved */ | 213 | u8 reason; |
311 | } __attribute__ ((packed)); | 214 | } __attribute__ ((packed)); |
312 | 215 | ||
216 | /** | ||
217 | * union sbal_sbalf - storage block address list flags | ||
218 | * @i0: sbalf0 | ||
219 | * @i1: sbalf1 | ||
220 | * @i14: sbalf14 | ||
221 | * @i15: sblaf15 | ||
222 | * @value: raw value | ||
223 | */ | ||
313 | union sbal_sbalf { | 224 | union sbal_sbalf { |
314 | struct sbal_sbalf_0 i0; | 225 | struct sbal_sbalf_0 i0; |
315 | struct sbal_sbalf_1 i1; | 226 | struct sbal_sbalf_1 i1; |
316 | struct sbal_sbalf_14 i14; | 227 | struct sbal_sbalf_14 i14; |
317 | struct sbal_sbalf_15 i15; | 228 | struct sbal_sbalf_15 i15; |
318 | unsigned char value; | 229 | u8 value; |
319 | }; | 230 | }; |
320 | 231 | ||
321 | struct sbal_element { | 232 | /** |
322 | union { | 233 | * struct qdio_buffer_element - SBAL entry |
323 | struct sbal_flags bits; /* flags */ | 234 | * @flags: flags |
324 | unsigned char value; | 235 | * @length: length |
325 | } flags; | 236 | * @addr: address |
326 | unsigned int res1 : 16; /* reserved */ | 237 | */ |
327 | union sbal_sbalf sbalf; /* SBAL flags */ | 238 | struct qdio_buffer_element { |
328 | unsigned int res2 : 16; /* reserved */ | 239 | u32 flags; |
329 | unsigned int count : 16; /* data count */ | 240 | u32 length; |
330 | #ifdef QDIO_32_BIT | 241 | #ifdef CONFIG_32BIT |
331 | unsigned long res3; /* reserved */ | 242 | /* private: */ |
332 | #endif /* QDIO_32_BIT */ | 243 | void *reserved; |
333 | unsigned long addr; /* absolute data address */ | 244 | /* public: */ |
334 | } __attribute__ ((packed,aligned(16))); | 245 | #endif |
246 | void *addr; | ||
247 | } __attribute__ ((packed, aligned(16))); | ||
335 | 248 | ||
336 | /* | 249 | /** |
337 | * strorage-block access-list (SBAL) | 250 | * struct qdio_buffer - storage block address list (SBAL) |
251 | * @element: SBAL entries | ||
338 | */ | 252 | */ |
339 | struct sbal { | 253 | struct qdio_buffer { |
340 | struct sbal_element element[QDIO_MAX_ELEMENTS_PER_BUFFER]; | 254 | struct qdio_buffer_element element[QDIO_MAX_ELEMENTS_PER_BUFFER]; |
341 | } __attribute__ ((packed,aligned(256))); | 255 | } __attribute__ ((packed, aligned(256))); |
342 | 256 | ||
343 | /* | 257 | /** |
344 | * storage-list (SL) | 258 | * struct sl_element - storage list entry |
259 | * @sbal: absolute SBAL address | ||
345 | */ | 260 | */ |
346 | struct sl_element { | 261 | struct sl_element { |
347 | #ifdef QDIO_32_BIT | 262 | #ifdef CONFIG_32BIT |
348 | unsigned long res; /* reserved */ | 263 | /* private: */ |
349 | #endif /* QDIO_32_BIT */ | 264 | unsigned long reserved; |
350 | unsigned long sbal; /* absolute SBAL address */ | 265 | /* public: */ |
266 | #endif | ||
267 | unsigned long sbal; | ||
351 | } __attribute__ ((packed)); | 268 | } __attribute__ ((packed)); |
352 | 269 | ||
270 | /** | ||
271 | * struct sl - storage list (SL) | ||
272 | * @element: SL entries | ||
273 | */ | ||
353 | struct sl { | 274 | struct sl { |
354 | struct sl_element element[QDIO_MAX_BUFFERS_PER_Q]; | 275 | struct sl_element element[QDIO_MAX_BUFFERS_PER_Q]; |
355 | } __attribute__ ((packed,aligned(1024))); | 276 | } __attribute__ ((packed, aligned(1024))); |
356 | 277 | ||
357 | /* | 278 | /** |
358 | * storage-list-state block (SLSB) | 279 | * struct slsb - storage list state block (SLSB) |
280 | * @val: state per buffer | ||
359 | */ | 281 | */ |
360 | struct slsb_flags { | 282 | struct slsb { |
361 | unsigned char owner : 2; /* SBAL owner */ | 283 | u8 val[QDIO_MAX_BUFFERS_PER_Q]; |
362 | unsigned char type : 1; /* buffer type */ | 284 | } __attribute__ ((packed, aligned(256))); |
363 | unsigned char state : 5; /* processing state */ | 285 | |
286 | struct qdio_ssqd_desc { | ||
287 | u8 flags; | ||
288 | u8:8; | ||
289 | u16 sch; | ||
290 | u8 qfmt; | ||
291 | u8 parm; | ||
292 | u8 qdioac1; | ||
293 | u8 sch_class; | ||
294 | u8 pcnt; | ||
295 | u8 icnt; | ||
296 | u8:8; | ||
297 | u8 ocnt; | ||
298 | u8:8; | ||
299 | u8 mbccnt; | ||
300 | u16 qdioac2; | ||
301 | u64 sch_token; | ||
302 | u64:64; | ||
364 | } __attribute__ ((packed)); | 303 | } __attribute__ ((packed)); |
365 | 304 | ||
305 | /* params are: ccw_device, qdio_error, queue_number, | ||
306 | first element processed, number of elements processed, int_parm */ | ||
307 | typedef void qdio_handler_t(struct ccw_device *, unsigned int, int, | ||
308 | int, int, unsigned long); | ||
366 | 309 | ||
367 | struct slsb { | 310 | /* qdio errors reported to the upper-layer program */ |
368 | union { | 311 | #define QDIO_ERROR_SIGA_ACCESS_EXCEPTION 0x10 |
369 | unsigned char val[QDIO_MAX_BUFFERS_PER_Q]; | 312 | #define QDIO_ERROR_SIGA_BUSY 0x20 |
370 | struct slsb_flags flags[QDIO_MAX_BUFFERS_PER_Q]; | 313 | #define QDIO_ERROR_ACTIVATE_CHECK_CONDITION 0x40 |
371 | } acc; | 314 | #define QDIO_ERROR_SLSB_STATE 0x80 |
372 | } __attribute__ ((packed,aligned(256))); | ||
373 | 315 | ||
374 | /* | 316 | /* for qdio_initialize */ |
375 | * SLSB values | 317 | #define QDIO_INBOUND_0COPY_SBALS 0x01 |
318 | #define QDIO_OUTBOUND_0COPY_SBALS 0x02 | ||
319 | #define QDIO_USE_OUTBOUND_PCIS 0x04 | ||
320 | |||
321 | /* for qdio_cleanup */ | ||
322 | #define QDIO_FLAG_CLEANUP_USING_CLEAR 0x01 | ||
323 | #define QDIO_FLAG_CLEANUP_USING_HALT 0x02 | ||
324 | |||
325 | /** | ||
326 | * struct qdio_initialize - qdio initalization data | ||
327 | * @cdev: associated ccw device | ||
328 | * @q_format: queue format | ||
329 | * @adapter_name: name for the adapter | ||
330 | * @qib_param_field_format: format for qib_parm_field | ||
331 | * @qib_param_field: pointer to 128 bytes or NULL, if no param field | ||
332 | * @input_slib_elements: pointer to no_input_qs * 128 words of data or NULL | ||
333 | * @output_slib_elements: pointer to no_output_qs * 128 words of data or NULL | ||
334 | * @no_input_qs: number of input queues | ||
335 | * @no_output_qs: number of output queues | ||
336 | * @input_handler: handler to be called for input queues | ||
337 | * @output_handler: handler to be called for output queues | ||
338 | * @int_parm: interruption parameter | ||
339 | * @flags: initialization flags | ||
340 | * @input_sbal_addr_array: address of no_input_qs * 128 pointers | ||
341 | * @output_sbal_addr_array: address of no_output_qs * 128 pointers | ||
376 | */ | 342 | */ |
377 | #define SLSB_OWNER_PROG 1 | 343 | struct qdio_initialize { |
378 | #define SLSB_OWNER_CU 2 | 344 | struct ccw_device *cdev; |
379 | 345 | unsigned char q_format; | |
380 | #define SLSB_TYPE_INPUT 0 | 346 | unsigned char adapter_name[8]; |
381 | #define SLSB_TYPE_OUTPUT 1 | 347 | unsigned int qib_param_field_format; |
382 | 348 | unsigned char *qib_param_field; | |
383 | #define SLSB_STATE_NOT_INIT 0 | 349 | unsigned long *input_slib_elements; |
384 | #define SLSB_STATE_EMPTY 1 | 350 | unsigned long *output_slib_elements; |
385 | #define SLSB_STATE_PRIMED 2 | 351 | unsigned int no_input_qs; |
386 | #define SLSB_STATE_HALTED 0xe | 352 | unsigned int no_output_qs; |
387 | #define SLSB_STATE_ERROR 0xf | 353 | qdio_handler_t *input_handler; |
388 | 354 | qdio_handler_t *output_handler; | |
389 | #define SLSB_P_INPUT_NOT_INIT 0x80 | 355 | unsigned long int_parm; |
390 | #define SLSB_P_INPUT_PROCESSING 0x81 | 356 | unsigned long flags; |
391 | #define SLSB_CU_INPUT_EMPTY 0x41 | 357 | void **input_sbal_addr_array; |
392 | #define SLSB_P_INPUT_PRIMED 0x82 | 358 | void **output_sbal_addr_array; |
393 | #define SLSB_P_INPUT_HALTED 0x8E | 359 | }; |
394 | #define SLSB_P_INPUT_ERROR 0x8F | 360 | |
395 | 361 | #define QDIO_STATE_INACTIVE 0x00000002 /* after qdio_cleanup */ | |
396 | #define SLSB_P_OUTPUT_NOT_INIT 0xA0 | 362 | #define QDIO_STATE_ESTABLISHED 0x00000004 /* after qdio_establish */ |
397 | #define SLSB_P_OUTPUT_EMPTY 0xA1 | 363 | #define QDIO_STATE_ACTIVE 0x00000008 /* after qdio_activate */ |
398 | #define SLSB_CU_OUTPUT_PRIMED 0x62 | 364 | #define QDIO_STATE_STOPPED 0x00000010 /* after queues went down */ |
399 | #define SLSB_P_OUTPUT_HALTED 0xAE | 365 | |
400 | #define SLSB_P_OUTPUT_ERROR 0xAF | 366 | #define QDIO_FLAG_SYNC_INPUT 0x01 |
401 | 367 | #define QDIO_FLAG_SYNC_OUTPUT 0x02 | |
402 | #define SLSB_ERROR_DURING_LOOKUP 0xFF | 368 | #define QDIO_FLAG_PCI_OUT 0x10 |
369 | |||
370 | extern int qdio_initialize(struct qdio_initialize *init_data); | ||
371 | extern int qdio_allocate(struct qdio_initialize *init_data); | ||
372 | extern int qdio_establish(struct qdio_initialize *init_data); | ||
373 | extern int qdio_activate(struct ccw_device *); | ||
374 | |||
375 | extern int do_QDIO(struct ccw_device*, unsigned int flags, | ||
376 | int q_nr, int qidx, int count); | ||
377 | extern int qdio_cleanup(struct ccw_device*, int how); | ||
378 | extern int qdio_shutdown(struct ccw_device*, int how); | ||
379 | extern int qdio_free(struct ccw_device *); | ||
380 | extern struct qdio_ssqd_desc *qdio_get_ssqd_desc(struct ccw_device *cdev); | ||
403 | 381 | ||
404 | #endif /* __QDIO_H__ */ | 382 | #endif /* __QDIO_H__ */ |
diff --git a/include/asm-s390/schid.h b/include/asm-s390/schid.h new file mode 100644 index 000000000000..7bdc0fe15691 --- /dev/null +++ b/include/asm-s390/schid.h | |||
@@ -0,0 +1,31 @@ | |||
1 | #ifndef ASM_SCHID_H | ||
2 | #define ASM_SCHID_H | ||
3 | |||
4 | struct subchannel_id { | ||
5 | __u32 cssid : 8; | ||
6 | __u32 : 4; | ||
7 | __u32 m : 1; | ||
8 | __u32 ssid : 2; | ||
9 | __u32 one : 1; | ||
10 | __u32 sch_no : 16; | ||
11 | } __attribute__ ((packed, aligned(4))); | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | |||
15 | /* Helper function for sane state of pre-allocated subchannel_id. */ | ||
16 | static inline void | ||
17 | init_subchannel_id(struct subchannel_id *schid) | ||
18 | { | ||
19 | memset(schid, 0, sizeof(struct subchannel_id)); | ||
20 | schid->one = 1; | ||
21 | } | ||
22 | |||
23 | static inline int | ||
24 | schid_equal(struct subchannel_id *schid1, struct subchannel_id *schid2) | ||
25 | { | ||
26 | return !memcmp(schid1, schid2, sizeof(struct subchannel_id)); | ||
27 | } | ||
28 | |||
29 | #endif /* __KERNEL__ */ | ||
30 | |||
31 | #endif /* ASM_SCHID_H */ | ||
diff --git a/include/asm-s390/sclp.h b/include/asm-s390/sclp.h index b5f2843013a3..fed7bee650a0 100644 --- a/include/asm-s390/sclp.h +++ b/include/asm-s390/sclp.h | |||
@@ -45,9 +45,9 @@ struct sclp_cpu_info { | |||
45 | int sclp_get_cpu_info(struct sclp_cpu_info *info); | 45 | int sclp_get_cpu_info(struct sclp_cpu_info *info); |
46 | int sclp_cpu_configure(u8 cpu); | 46 | int sclp_cpu_configure(u8 cpu); |
47 | int sclp_cpu_deconfigure(u8 cpu); | 47 | int sclp_cpu_deconfigure(u8 cpu); |
48 | void sclp_read_info_early(void); | ||
49 | void sclp_facilities_detect(void); | 48 | void sclp_facilities_detect(void); |
50 | unsigned long long sclp_memory_detect(void); | 49 | unsigned long long sclp_get_rnmax(void); |
50 | unsigned long long sclp_get_rzm(void); | ||
51 | int sclp_sdias_blk_count(void); | 51 | int sclp_sdias_blk_count(void); |
52 | int sclp_sdias_copy(void *dest, int blk_num, int nr_blks); | 52 | int sclp_sdias_copy(void *dest, int blk_num, int nr_blks); |
53 | int sclp_chp_configure(struct chp_id chpid); | 53 | int sclp_chp_configure(struct chp_id chpid); |
diff --git a/include/asm-s390/setup.h b/include/asm-s390/setup.h index ba69674012a7..4ba14e463e83 100644 --- a/include/asm-s390/setup.h +++ b/include/asm-s390/setup.h | |||
@@ -8,14 +8,16 @@ | |||
8 | #ifndef _ASM_S390_SETUP_H | 8 | #ifndef _ASM_S390_SETUP_H |
9 | #define _ASM_S390_SETUP_H | 9 | #define _ASM_S390_SETUP_H |
10 | 10 | ||
11 | #define COMMAND_LINE_SIZE 896 | 11 | #define COMMAND_LINE_SIZE 1024 |
12 | |||
13 | #define ARCH_COMMAND_LINE_SIZE 896 | ||
12 | 14 | ||
13 | #ifdef __KERNEL__ | 15 | #ifdef __KERNEL__ |
14 | 16 | ||
15 | #include <asm/types.h> | 17 | #include <asm/types.h> |
16 | 18 | ||
17 | #define PARMAREA 0x10400 | 19 | #define PARMAREA 0x10400 |
18 | #define MEMORY_CHUNKS 16 /* max 0x7fff */ | 20 | #define MEMORY_CHUNKS 256 |
19 | 21 | ||
20 | #ifndef __ASSEMBLY__ | 22 | #ifndef __ASSEMBLY__ |
21 | 23 | ||
@@ -36,12 +38,14 @@ | |||
36 | struct mem_chunk { | 38 | struct mem_chunk { |
37 | unsigned long addr; | 39 | unsigned long addr; |
38 | unsigned long size; | 40 | unsigned long size; |
39 | unsigned long type; | 41 | int type; |
40 | }; | 42 | }; |
41 | 43 | ||
42 | extern struct mem_chunk memory_chunk[]; | 44 | extern struct mem_chunk memory_chunk[]; |
43 | extern unsigned long real_memory_size; | 45 | extern unsigned long real_memory_size; |
44 | 46 | ||
47 | void detect_memory_layout(struct mem_chunk chunk[]); | ||
48 | |||
45 | #ifdef CONFIG_S390_SWITCH_AMODE | 49 | #ifdef CONFIG_S390_SWITCH_AMODE |
46 | extern unsigned int switch_amode; | 50 | extern unsigned int switch_amode; |
47 | #else | 51 | #else |
@@ -74,7 +78,6 @@ extern unsigned long machine_flags; | |||
74 | 78 | ||
75 | #define MACHINE_IS_VM (machine_flags & MACHINE_FLAG_VM) | 79 | #define MACHINE_IS_VM (machine_flags & MACHINE_FLAG_VM) |
76 | #define MACHINE_IS_KVM (machine_flags & MACHINE_FLAG_KVM) | 80 | #define MACHINE_IS_KVM (machine_flags & MACHINE_FLAG_KVM) |
77 | #define MACHINE_IS_P390 (machine_flags & MACHINE_FLAG_P390) | ||
78 | #define MACHINE_HAS_DIAG9C (machine_flags & MACHINE_FLAG_DIAG9C) | 81 | #define MACHINE_HAS_DIAG9C (machine_flags & MACHINE_FLAG_DIAG9C) |
79 | 82 | ||
80 | #ifndef __s390x__ | 83 | #ifndef __s390x__ |
@@ -97,7 +100,6 @@ extern unsigned long machine_flags; | |||
97 | #define MACHINE_HAS_PFMF (machine_flags & MACHINE_FLAG_PFMF) | 100 | #define MACHINE_HAS_PFMF (machine_flags & MACHINE_FLAG_PFMF) |
98 | #endif /* __s390x__ */ | 101 | #endif /* __s390x__ */ |
99 | 102 | ||
100 | #define MACHINE_HAS_SCLP (!MACHINE_IS_P390) | ||
101 | #define ZFCPDUMP_HSA_SIZE (32UL<<20) | 103 | #define ZFCPDUMP_HSA_SIZE (32UL<<20) |
102 | 104 | ||
103 | /* | 105 | /* |
diff --git a/include/asm-s390/sparsemem.h b/include/asm-s390/sparsemem.h index 06dfdab6c0e8..545d219e6a2d 100644 --- a/include/asm-s390/sparsemem.h +++ b/include/asm-s390/sparsemem.h | |||
@@ -1,15 +1,15 @@ | |||
1 | #ifndef _ASM_S390_SPARSEMEM_H | 1 | #ifndef _ASM_S390_SPARSEMEM_H |
2 | #define _ASM_S390_SPARSEMEM_H | 2 | #define _ASM_S390_SPARSEMEM_H |
3 | 3 | ||
4 | #define SECTION_SIZE_BITS 25 | ||
5 | |||
6 | #ifdef CONFIG_64BIT | 4 | #ifdef CONFIG_64BIT |
7 | 5 | ||
6 | #define SECTION_SIZE_BITS 28 | ||
8 | #define MAX_PHYSADDR_BITS 42 | 7 | #define MAX_PHYSADDR_BITS 42 |
9 | #define MAX_PHYSMEM_BITS 42 | 8 | #define MAX_PHYSMEM_BITS 42 |
10 | 9 | ||
11 | #else | 10 | #else |
12 | 11 | ||
12 | #define SECTION_SIZE_BITS 25 | ||
13 | #define MAX_PHYSADDR_BITS 31 | 13 | #define MAX_PHYSADDR_BITS 31 |
14 | #define MAX_PHYSMEM_BITS 31 | 14 | #define MAX_PHYSMEM_BITS 31 |
15 | 15 | ||
diff --git a/include/asm-s390/timer.h b/include/asm-s390/timer.h index adb34860a543..d98d79e35cd6 100644 --- a/include/asm-s390/timer.h +++ b/include/asm-s390/timer.h | |||
@@ -48,6 +48,18 @@ extern int del_virt_timer(struct vtimer_list *timer); | |||
48 | extern void init_cpu_vtimer(void); | 48 | extern void init_cpu_vtimer(void); |
49 | extern void vtime_init(void); | 49 | extern void vtime_init(void); |
50 | 50 | ||
51 | #ifdef CONFIG_VIRT_TIMER | ||
52 | |||
53 | extern void vtime_start_cpu_timer(void); | ||
54 | extern void vtime_stop_cpu_timer(void); | ||
55 | |||
56 | #else | ||
57 | |||
58 | static inline void vtime_start_cpu_timer(void) { } | ||
59 | static inline void vtime_stop_cpu_timer(void) { } | ||
60 | |||
61 | #endif /* CONFIG_VIRT_TIMER */ | ||
62 | |||
51 | #endif /* __KERNEL__ */ | 63 | #endif /* __KERNEL__ */ |
52 | 64 | ||
53 | #endif /* _ASM_S390_TIMER_H */ | 65 | #endif /* _ASM_S390_TIMER_H */ |
diff --git a/include/asm-s390/zcrypt.h b/include/asm-s390/zcrypt.h index f228f1b86877..00d3bbd44117 100644 --- a/include/asm-s390/zcrypt.h +++ b/include/asm-s390/zcrypt.h | |||
@@ -29,7 +29,7 @@ | |||
29 | 29 | ||
30 | #define ZCRYPT_VERSION 2 | 30 | #define ZCRYPT_VERSION 2 |
31 | #define ZCRYPT_RELEASE 1 | 31 | #define ZCRYPT_RELEASE 1 |
32 | #define ZCRYPT_VARIANT 0 | 32 | #define ZCRYPT_VARIANT 1 |
33 | 33 | ||
34 | #include <linux/ioctl.h> | 34 | #include <linux/ioctl.h> |
35 | #include <linux/compiler.h> | 35 | #include <linux/compiler.h> |
diff --git a/include/asm-sh/smp.h b/include/asm-sh/smp.h index 9c8d34b07ebf..593343cd26ee 100644 --- a/include/asm-sh/smp.h +++ b/include/asm-sh/smp.h | |||
@@ -26,18 +26,10 @@ extern int __cpu_logical_map[NR_CPUS]; | |||
26 | 26 | ||
27 | #define NO_PROC_ID (-1) | 27 | #define NO_PROC_ID (-1) |
28 | 28 | ||
29 | struct smp_fn_call_struct { | ||
30 | spinlock_t lock; | ||
31 | atomic_t finished; | ||
32 | void (*fn)(void *); | ||
33 | void *data; | ||
34 | }; | ||
35 | |||
36 | extern struct smp_fn_call_struct smp_fn_call; | ||
37 | |||
38 | #define SMP_MSG_FUNCTION 0 | 29 | #define SMP_MSG_FUNCTION 0 |
39 | #define SMP_MSG_RESCHEDULE 1 | 30 | #define SMP_MSG_RESCHEDULE 1 |
40 | #define SMP_MSG_NR 2 | 31 | #define SMP_MSG_FUNCTION_SINGLE 2 |
32 | #define SMP_MSG_NR 3 | ||
41 | 33 | ||
42 | void plat_smp_setup(void); | 34 | void plat_smp_setup(void); |
43 | void plat_prepare_cpus(unsigned int max_cpus); | 35 | void plat_prepare_cpus(unsigned int max_cpus); |
@@ -46,6 +38,8 @@ void plat_start_cpu(unsigned int cpu, unsigned long entry_point); | |||
46 | void plat_send_ipi(unsigned int cpu, unsigned int message); | 38 | void plat_send_ipi(unsigned int cpu, unsigned int message); |
47 | int plat_register_ipi_handler(unsigned int message, | 39 | int plat_register_ipi_handler(unsigned int message, |
48 | void (*handler)(void *), void *arg); | 40 | void (*handler)(void *), void *arg); |
41 | extern void arch_send_call_function_single_ipi(int cpu); | ||
42 | extern void arch_send_call_function_ipi(cpumask_t mask); | ||
49 | 43 | ||
50 | #else | 44 | #else |
51 | 45 | ||
diff --git a/include/asm-sparc/smp.h b/include/asm-sparc/smp.h index e6d561599726..b61e74bea06a 100644 --- a/include/asm-sparc/smp.h +++ b/include/asm-sparc/smp.h | |||
@@ -72,7 +72,7 @@ static inline void xc5(smpfunc_t func, unsigned long arg1, unsigned long arg2, | |||
72 | unsigned long arg3, unsigned long arg4, unsigned long arg5) | 72 | unsigned long arg3, unsigned long arg4, unsigned long arg5) |
73 | { smp_cross_call(func, arg1, arg2, arg3, arg4, arg5); } | 73 | { smp_cross_call(func, arg1, arg2, arg3, arg4, arg5); } |
74 | 74 | ||
75 | static inline int smp_call_function(void (*func)(void *info), void *info, int nonatomic, int wait) | 75 | static inline int smp_call_function(void (*func)(void *info), void *info, int wait) |
76 | { | 76 | { |
77 | xc1((smpfunc_t)func, (unsigned long)info); | 77 | xc1((smpfunc_t)func, (unsigned long)info); |
78 | return 0; | 78 | return 0; |
diff --git a/include/asm-sparc64/ftrace.h b/include/asm-sparc64/ftrace.h new file mode 100644 index 000000000000..d27716cd38c1 --- /dev/null +++ b/include/asm-sparc64/ftrace.h | |||
@@ -0,0 +1,14 @@ | |||
1 | #ifndef _ASM_SPARC64_FTRACE | ||
2 | #define _ASM_SPARC64_FTRACE | ||
3 | |||
4 | #ifdef CONFIG_MCOUNT | ||
5 | #define MCOUNT_ADDR ((long)(_mcount)) | ||
6 | #define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */ | ||
7 | |||
8 | #ifndef __ASSEMBLY__ | ||
9 | extern void _mcount(void); | ||
10 | #endif | ||
11 | |||
12 | #endif | ||
13 | |||
14 | #endif /* _ASM_SPARC64_FTRACE */ | ||
diff --git a/include/asm-x86/alternative.h b/include/asm-x86/alternative.h index 1f6a9ca10126..f6aa18eadf71 100644 --- a/include/asm-x86/alternative.h +++ b/include/asm-x86/alternative.h | |||
@@ -72,6 +72,8 @@ static inline void alternatives_smp_module_del(struct module *mod) {} | |||
72 | static inline void alternatives_smp_switch(int smp) {} | 72 | static inline void alternatives_smp_switch(int smp) {} |
73 | #endif /* CONFIG_SMP */ | 73 | #endif /* CONFIG_SMP */ |
74 | 74 | ||
75 | const unsigned char *const *find_nop_table(void); | ||
76 | |||
75 | /* | 77 | /* |
76 | * Alternative instructions for different CPU types or capabilities. | 78 | * Alternative instructions for different CPU types or capabilities. |
77 | * | 79 | * |
diff --git a/include/asm-x86/apic.h b/include/asm-x86/apic.h index a29807737d3d..4e2c1e517f06 100644 --- a/include/asm-x86/apic.h +++ b/include/asm-x86/apic.h | |||
@@ -121,12 +121,17 @@ extern void enable_NMI_through_LVT0(void); | |||
121 | */ | 121 | */ |
122 | #ifdef CONFIG_X86_64 | 122 | #ifdef CONFIG_X86_64 |
123 | extern void early_init_lapic_mapping(void); | 123 | extern void early_init_lapic_mapping(void); |
124 | extern int apic_is_clustered_box(void); | ||
125 | #else | ||
126 | static inline int apic_is_clustered_box(void) | ||
127 | { | ||
128 | return 0; | ||
129 | } | ||
124 | #endif | 130 | #endif |
125 | 131 | ||
126 | extern u8 setup_APIC_eilvt_mce(u8 vector, u8 msg_type, u8 mask); | 132 | extern u8 setup_APIC_eilvt_mce(u8 vector, u8 msg_type, u8 mask); |
127 | extern u8 setup_APIC_eilvt_ibs(u8 vector, u8 msg_type, u8 mask); | 133 | extern u8 setup_APIC_eilvt_ibs(u8 vector, u8 msg_type, u8 mask); |
128 | 134 | ||
129 | extern int apic_is_clustered_box(void); | ||
130 | 135 | ||
131 | #else /* !CONFIG_X86_LOCAL_APIC */ | 136 | #else /* !CONFIG_X86_LOCAL_APIC */ |
132 | static inline void lapic_shutdown(void) { } | 137 | static inline void lapic_shutdown(void) { } |
diff --git a/include/asm-x86/asm.h b/include/asm-x86/asm.h index 70939820c55f..97220321f39d 100644 --- a/include/asm-x86/asm.h +++ b/include/asm-x86/asm.h | |||
@@ -3,8 +3,10 @@ | |||
3 | 3 | ||
4 | #ifdef __ASSEMBLY__ | 4 | #ifdef __ASSEMBLY__ |
5 | # define __ASM_FORM(x) x | 5 | # define __ASM_FORM(x) x |
6 | # define __ASM_EX_SEC .section __ex_table | ||
6 | #else | 7 | #else |
7 | # define __ASM_FORM(x) " " #x " " | 8 | # define __ASM_FORM(x) " " #x " " |
9 | # define __ASM_EX_SEC " .section __ex_table,\"a\"\n" | ||
8 | #endif | 10 | #endif |
9 | 11 | ||
10 | #ifdef CONFIG_X86_32 | 12 | #ifdef CONFIG_X86_32 |
@@ -14,6 +16,7 @@ | |||
14 | #endif | 16 | #endif |
15 | 17 | ||
16 | #define __ASM_SIZE(inst) __ASM_SEL(inst##l, inst##q) | 18 | #define __ASM_SIZE(inst) __ASM_SEL(inst##l, inst##q) |
19 | #define __ASM_REG(reg) __ASM_SEL(e##reg, r##reg) | ||
17 | 20 | ||
18 | #define _ASM_PTR __ASM_SEL(.long, .quad) | 21 | #define _ASM_PTR __ASM_SEL(.long, .quad) |
19 | #define _ASM_ALIGN __ASM_SEL(.balign 4, .balign 8) | 22 | #define _ASM_ALIGN __ASM_SEL(.balign 4, .balign 8) |
@@ -24,10 +27,14 @@ | |||
24 | #define _ASM_ADD __ASM_SIZE(add) | 27 | #define _ASM_ADD __ASM_SIZE(add) |
25 | #define _ASM_SUB __ASM_SIZE(sub) | 28 | #define _ASM_SUB __ASM_SIZE(sub) |
26 | #define _ASM_XADD __ASM_SIZE(xadd) | 29 | #define _ASM_XADD __ASM_SIZE(xadd) |
30 | #define _ASM_AX __ASM_REG(ax) | ||
31 | #define _ASM_BX __ASM_REG(bx) | ||
32 | #define _ASM_CX __ASM_REG(cx) | ||
33 | #define _ASM_DX __ASM_REG(dx) | ||
27 | 34 | ||
28 | /* Exception table entry */ | 35 | /* Exception table entry */ |
29 | # define _ASM_EXTABLE(from,to) \ | 36 | # define _ASM_EXTABLE(from,to) \ |
30 | " .section __ex_table,\"a\"\n" \ | 37 | __ASM_EX_SEC \ |
31 | _ASM_ALIGN "\n" \ | 38 | _ASM_ALIGN "\n" \ |
32 | _ASM_PTR #from "," #to "\n" \ | 39 | _ASM_PTR #from "," #to "\n" \ |
33 | " .previous\n" | 40 | " .previous\n" |
diff --git a/include/asm-x86/cpufeature.h b/include/asm-x86/cpufeature.h index 84a56da397b1..75ef959db329 100644 --- a/include/asm-x86/cpufeature.h +++ b/include/asm-x86/cpufeature.h | |||
@@ -74,8 +74,8 @@ | |||
74 | #define X86_FEATURE_ARCH_PERFMON (3*32+11) /* Intel Architectural PerfMon */ | 74 | #define X86_FEATURE_ARCH_PERFMON (3*32+11) /* Intel Architectural PerfMon */ |
75 | #define X86_FEATURE_PEBS (3*32+12) /* Precise-Event Based Sampling */ | 75 | #define X86_FEATURE_PEBS (3*32+12) /* Precise-Event Based Sampling */ |
76 | #define X86_FEATURE_BTS (3*32+13) /* Branch Trace Store */ | 76 | #define X86_FEATURE_BTS (3*32+13) /* Branch Trace Store */ |
77 | /* 14 free */ | 77 | #define X86_FEATURE_SYSCALL32 (3*32+14) /* syscall in ia32 userspace */ |
78 | /* 15 free */ | 78 | #define X86_FEATURE_SYSENTER32 (3*32+15) /* sysenter in ia32 userspace */ |
79 | #define X86_FEATURE_REP_GOOD (3*32+16) /* rep microcode works well on this CPU */ | 79 | #define X86_FEATURE_REP_GOOD (3*32+16) /* rep microcode works well on this CPU */ |
80 | #define X86_FEATURE_MFENCE_RDTSC (3*32+17) /* Mfence synchronizes RDTSC */ | 80 | #define X86_FEATURE_MFENCE_RDTSC (3*32+17) /* Mfence synchronizes RDTSC */ |
81 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* Lfence synchronizes RDTSC */ | 81 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* Lfence synchronizes RDTSC */ |
diff --git a/include/asm-x86/dwarf2.h b/include/asm-x86/dwarf2.h index b3cbb0ccae18..738bb9fb3e53 100644 --- a/include/asm-x86/dwarf2.h +++ b/include/asm-x86/dwarf2.h | |||
@@ -1,5 +1,61 @@ | |||
1 | #ifdef CONFIG_X86_32 | 1 | #ifndef _DWARF2_H |
2 | # include "dwarf2_32.h" | 2 | #define _DWARF2_H |
3 | |||
4 | #ifndef __ASSEMBLY__ | ||
5 | #warning "asm/dwarf2.h should be only included in pure assembly files" | ||
6 | #endif | ||
7 | |||
8 | /* | ||
9 | Macros for dwarf2 CFI unwind table entries. | ||
10 | See "as.info" for details on these pseudo ops. Unfortunately | ||
11 | they are only supported in very new binutils, so define them | ||
12 | away for older version. | ||
13 | */ | ||
14 | |||
15 | #ifdef CONFIG_AS_CFI | ||
16 | |||
17 | #define CFI_STARTPROC .cfi_startproc | ||
18 | #define CFI_ENDPROC .cfi_endproc | ||
19 | #define CFI_DEF_CFA .cfi_def_cfa | ||
20 | #define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register | ||
21 | #define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset | ||
22 | #define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset | ||
23 | #define CFI_OFFSET .cfi_offset | ||
24 | #define CFI_REL_OFFSET .cfi_rel_offset | ||
25 | #define CFI_REGISTER .cfi_register | ||
26 | #define CFI_RESTORE .cfi_restore | ||
27 | #define CFI_REMEMBER_STATE .cfi_remember_state | ||
28 | #define CFI_RESTORE_STATE .cfi_restore_state | ||
29 | #define CFI_UNDEFINED .cfi_undefined | ||
30 | |||
31 | #ifdef CONFIG_AS_CFI_SIGNAL_FRAME | ||
32 | #define CFI_SIGNAL_FRAME .cfi_signal_frame | ||
33 | #else | ||
34 | #define CFI_SIGNAL_FRAME | ||
35 | #endif | ||
36 | |||
3 | #else | 37 | #else |
4 | # include "dwarf2_64.h" | 38 | |
39 | /* Due to the structure of pre-exisiting code, don't use assembler line | ||
40 | comment character # to ignore the arguments. Instead, use a dummy macro. */ | ||
41 | .macro cfi_ignore a=0, b=0, c=0, d=0 | ||
42 | .endm | ||
43 | |||
44 | #define CFI_STARTPROC cfi_ignore | ||
45 | #define CFI_ENDPROC cfi_ignore | ||
46 | #define CFI_DEF_CFA cfi_ignore | ||
47 | #define CFI_DEF_CFA_REGISTER cfi_ignore | ||
48 | #define CFI_DEF_CFA_OFFSET cfi_ignore | ||
49 | #define CFI_ADJUST_CFA_OFFSET cfi_ignore | ||
50 | #define CFI_OFFSET cfi_ignore | ||
51 | #define CFI_REL_OFFSET cfi_ignore | ||
52 | #define CFI_REGISTER cfi_ignore | ||
53 | #define CFI_RESTORE cfi_ignore | ||
54 | #define CFI_REMEMBER_STATE cfi_ignore | ||
55 | #define CFI_RESTORE_STATE cfi_ignore | ||
56 | #define CFI_UNDEFINED cfi_ignore | ||
57 | #define CFI_SIGNAL_FRAME cfi_ignore | ||
58 | |||
59 | #endif | ||
60 | |||
5 | #endif | 61 | #endif |
diff --git a/include/asm-x86/dwarf2_32.h b/include/asm-x86/dwarf2_32.h deleted file mode 100644 index 6d66398a307d..000000000000 --- a/include/asm-x86/dwarf2_32.h +++ /dev/null | |||
@@ -1,61 +0,0 @@ | |||
1 | #ifndef _DWARF2_H | ||
2 | #define _DWARF2_H | ||
3 | |||
4 | #ifndef __ASSEMBLY__ | ||
5 | #warning "asm/dwarf2.h should be only included in pure assembly files" | ||
6 | #endif | ||
7 | |||
8 | /* | ||
9 | Macros for dwarf2 CFI unwind table entries. | ||
10 | See "as.info" for details on these pseudo ops. Unfortunately | ||
11 | they are only supported in very new binutils, so define them | ||
12 | away for older version. | ||
13 | */ | ||
14 | |||
15 | #ifdef CONFIG_UNWIND_INFO | ||
16 | |||
17 | #define CFI_STARTPROC .cfi_startproc | ||
18 | #define CFI_ENDPROC .cfi_endproc | ||
19 | #define CFI_DEF_CFA .cfi_def_cfa | ||
20 | #define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register | ||
21 | #define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset | ||
22 | #define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset | ||
23 | #define CFI_OFFSET .cfi_offset | ||
24 | #define CFI_REL_OFFSET .cfi_rel_offset | ||
25 | #define CFI_REGISTER .cfi_register | ||
26 | #define CFI_RESTORE .cfi_restore | ||
27 | #define CFI_REMEMBER_STATE .cfi_remember_state | ||
28 | #define CFI_RESTORE_STATE .cfi_restore_state | ||
29 | #define CFI_UNDEFINED .cfi_undefined | ||
30 | |||
31 | #ifdef CONFIG_AS_CFI_SIGNAL_FRAME | ||
32 | #define CFI_SIGNAL_FRAME .cfi_signal_frame | ||
33 | #else | ||
34 | #define CFI_SIGNAL_FRAME | ||
35 | #endif | ||
36 | |||
37 | #else | ||
38 | |||
39 | /* Due to the structure of pre-exisiting code, don't use assembler line | ||
40 | comment character # to ignore the arguments. Instead, use a dummy macro. */ | ||
41 | .macro ignore a=0, b=0, c=0, d=0 | ||
42 | .endm | ||
43 | |||
44 | #define CFI_STARTPROC ignore | ||
45 | #define CFI_ENDPROC ignore | ||
46 | #define CFI_DEF_CFA ignore | ||
47 | #define CFI_DEF_CFA_REGISTER ignore | ||
48 | #define CFI_DEF_CFA_OFFSET ignore | ||
49 | #define CFI_ADJUST_CFA_OFFSET ignore | ||
50 | #define CFI_OFFSET ignore | ||
51 | #define CFI_REL_OFFSET ignore | ||
52 | #define CFI_REGISTER ignore | ||
53 | #define CFI_RESTORE ignore | ||
54 | #define CFI_REMEMBER_STATE ignore | ||
55 | #define CFI_RESTORE_STATE ignore | ||
56 | #define CFI_UNDEFINED ignore | ||
57 | #define CFI_SIGNAL_FRAME ignore | ||
58 | |||
59 | #endif | ||
60 | |||
61 | #endif | ||
diff --git a/include/asm-x86/dwarf2_64.h b/include/asm-x86/dwarf2_64.h deleted file mode 100644 index c950519a264d..000000000000 --- a/include/asm-x86/dwarf2_64.h +++ /dev/null | |||
@@ -1,56 +0,0 @@ | |||
1 | #ifndef _DWARF2_H | ||
2 | #define _DWARF2_H 1 | ||
3 | |||
4 | #ifndef __ASSEMBLY__ | ||
5 | #warning "asm/dwarf2.h should be only included in pure assembly files" | ||
6 | #endif | ||
7 | |||
8 | /* | ||
9 | Macros for dwarf2 CFI unwind table entries. | ||
10 | See "as.info" for details on these pseudo ops. Unfortunately | ||
11 | they are only supported in very new binutils, so define them | ||
12 | away for older version. | ||
13 | */ | ||
14 | |||
15 | #ifdef CONFIG_AS_CFI | ||
16 | |||
17 | #define CFI_STARTPROC .cfi_startproc | ||
18 | #define CFI_ENDPROC .cfi_endproc | ||
19 | #define CFI_DEF_CFA .cfi_def_cfa | ||
20 | #define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register | ||
21 | #define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset | ||
22 | #define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset | ||
23 | #define CFI_OFFSET .cfi_offset | ||
24 | #define CFI_REL_OFFSET .cfi_rel_offset | ||
25 | #define CFI_REGISTER .cfi_register | ||
26 | #define CFI_RESTORE .cfi_restore | ||
27 | #define CFI_REMEMBER_STATE .cfi_remember_state | ||
28 | #define CFI_RESTORE_STATE .cfi_restore_state | ||
29 | #define CFI_UNDEFINED .cfi_undefined | ||
30 | #ifdef CONFIG_AS_CFI_SIGNAL_FRAME | ||
31 | #define CFI_SIGNAL_FRAME .cfi_signal_frame | ||
32 | #else | ||
33 | #define CFI_SIGNAL_FRAME | ||
34 | #endif | ||
35 | |||
36 | #else | ||
37 | |||
38 | /* use assembler line comment character # to ignore the arguments. */ | ||
39 | #define CFI_STARTPROC # | ||
40 | #define CFI_ENDPROC # | ||
41 | #define CFI_DEF_CFA # | ||
42 | #define CFI_DEF_CFA_REGISTER # | ||
43 | #define CFI_DEF_CFA_OFFSET # | ||
44 | #define CFI_ADJUST_CFA_OFFSET # | ||
45 | #define CFI_OFFSET # | ||
46 | #define CFI_REL_OFFSET # | ||
47 | #define CFI_REGISTER # | ||
48 | #define CFI_RESTORE # | ||
49 | #define CFI_REMEMBER_STATE # | ||
50 | #define CFI_RESTORE_STATE # | ||
51 | #define CFI_UNDEFINED # | ||
52 | #define CFI_SIGNAL_FRAME # | ||
53 | |||
54 | #endif | ||
55 | |||
56 | #endif | ||
diff --git a/include/asm-x86/e820.h b/include/asm-x86/e820.h index 4b26604b3c19..06633b01dd5b 100644 --- a/include/asm-x86/e820.h +++ b/include/asm-x86/e820.h | |||
@@ -59,7 +59,10 @@ struct e820map { | |||
59 | struct e820entry map[E820_X_MAX]; | 59 | struct e820entry map[E820_X_MAX]; |
60 | }; | 60 | }; |
61 | 61 | ||
62 | #ifdef __KERNEL__ | ||
63 | /* see comment in arch/x86/kernel/e820.c */ | ||
62 | extern struct e820map e820; | 64 | extern struct e820map e820; |
65 | extern struct e820map e820_saved; | ||
63 | 66 | ||
64 | extern int e820_any_mapped(u64 start, u64 end, unsigned type); | 67 | extern int e820_any_mapped(u64 start, u64 end, unsigned type); |
65 | extern int e820_all_mapped(u64 start, u64 end, unsigned type); | 68 | extern int e820_all_mapped(u64 start, u64 end, unsigned type); |
@@ -97,7 +100,8 @@ extern void free_early(u64 start, u64 end); | |||
97 | extern void early_res_to_bootmem(u64 start, u64 end); | 100 | extern void early_res_to_bootmem(u64 start, u64 end); |
98 | extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align); | 101 | extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align); |
99 | 102 | ||
100 | extern unsigned long e820_end_of_ram(void); | 103 | extern unsigned long e820_end_of_ram_pfn(void); |
104 | extern unsigned long e820_end_of_low_ram_pfn(void); | ||
101 | extern int e820_find_active_region(const struct e820entry *ei, | 105 | extern int e820_find_active_region(const struct e820entry *ei, |
102 | unsigned long start_pfn, | 106 | unsigned long start_pfn, |
103 | unsigned long last_pfn, | 107 | unsigned long last_pfn, |
@@ -112,7 +116,7 @@ extern void setup_memory_map(void); | |||
112 | extern char *default_machine_specific_memory_setup(void); | 116 | extern char *default_machine_specific_memory_setup(void); |
113 | extern char *machine_specific_memory_setup(void); | 117 | extern char *machine_specific_memory_setup(void); |
114 | extern char *memory_setup(void); | 118 | extern char *memory_setup(void); |
115 | 119 | #endif /* __KERNEL__ */ | |
116 | #endif /* __ASSEMBLY__ */ | 120 | #endif /* __ASSEMBLY__ */ |
117 | 121 | ||
118 | #define ISA_START_ADDRESS 0xa0000 | 122 | #define ISA_START_ADDRESS 0xa0000 |
diff --git a/include/asm-x86/fixmap_64.h b/include/asm-x86/fixmap_64.h index 1a0b61eb02ff..00f3d74a0524 100644 --- a/include/asm-x86/fixmap_64.h +++ b/include/asm-x86/fixmap_64.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #define _ASM_FIXMAP_64_H | 12 | #define _ASM_FIXMAP_64_H |
13 | 13 | ||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <asm/acpi.h> | ||
15 | #include <asm/apicdef.h> | 16 | #include <asm/apicdef.h> |
16 | #include <asm/page.h> | 17 | #include <asm/page.h> |
17 | #include <asm/vsyscall.h> | 18 | #include <asm/vsyscall.h> |
@@ -39,7 +40,6 @@ enum fixed_addresses { | |||
39 | VSYSCALL_HPET, | 40 | VSYSCALL_HPET, |
40 | FIX_DBGP_BASE, | 41 | FIX_DBGP_BASE, |
41 | FIX_EARLYCON_MEM_BASE, | 42 | FIX_EARLYCON_MEM_BASE, |
42 | FIX_HPET_BASE, | ||
43 | FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ | 43 | FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ |
44 | FIX_IO_APIC_BASE_0, | 44 | FIX_IO_APIC_BASE_0, |
45 | FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1, | 45 | FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1, |
@@ -49,6 +49,10 @@ enum fixed_addresses { | |||
49 | #ifdef CONFIG_PARAVIRT | 49 | #ifdef CONFIG_PARAVIRT |
50 | FIX_PARAVIRT_BOOTMAP, | 50 | FIX_PARAVIRT_BOOTMAP, |
51 | #endif | 51 | #endif |
52 | #ifdef CONFIG_ACPI | ||
53 | FIX_ACPI_BEGIN, | ||
54 | FIX_ACPI_END = FIX_ACPI_BEGIN + FIX_ACPI_PAGES - 1, | ||
55 | #endif | ||
52 | #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT | 56 | #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT |
53 | FIX_OHCI1394_BASE, | 57 | FIX_OHCI1394_BASE, |
54 | #endif | 58 | #endif |
diff --git a/include/asm-x86/ftrace.h b/include/asm-x86/ftrace.h new file mode 100644 index 000000000000..c184441133f2 --- /dev/null +++ b/include/asm-x86/ftrace.h | |||
@@ -0,0 +1,14 @@ | |||
1 | #ifndef _ASM_X86_FTRACE | ||
2 | #define _ASM_SPARC64_FTRACE | ||
3 | |||
4 | #ifdef CONFIG_FTRACE | ||
5 | #define MCOUNT_ADDR ((long)(mcount)) | ||
6 | #define MCOUNT_INSN_SIZE 5 /* sizeof mcount call */ | ||
7 | |||
8 | #ifndef __ASSEMBLY__ | ||
9 | extern void mcount(void); | ||
10 | #endif | ||
11 | |||
12 | #endif /* CONFIG_FTRACE */ | ||
13 | |||
14 | #endif /* _ASM_X86_FTRACE */ | ||
diff --git a/include/asm-x86/gart.h b/include/asm-x86/gart.h index 417f76ea677b..33b9aeeb35a2 100644 --- a/include/asm-x86/gart.h +++ b/include/asm-x86/gart.h | |||
@@ -1,40 +1,14 @@ | |||
1 | #ifndef _ASM_X8664_IOMMU_H | 1 | #ifndef _ASM_X8664_GART_H |
2 | #define _ASM_X8664_IOMMU_H 1 | 2 | #define _ASM_X8664_GART_H 1 |
3 | 3 | ||
4 | #include <asm/e820.h> | 4 | #include <asm/e820.h> |
5 | #include <asm/iommu.h> | ||
5 | 6 | ||
6 | extern void pci_iommu_shutdown(void); | ||
7 | extern void no_iommu_init(void); | ||
8 | extern int force_iommu, no_iommu; | ||
9 | extern int iommu_detected; | ||
10 | extern int agp_amd64_init(void); | ||
11 | #ifdef CONFIG_GART_IOMMU | ||
12 | extern void gart_iommu_init(void); | ||
13 | extern void gart_iommu_shutdown(void); | ||
14 | extern void __init gart_parse_options(char *); | ||
15 | extern void early_gart_iommu_check(void); | ||
16 | extern void gart_iommu_hole_init(void); | ||
17 | extern void set_up_gart_resume(u32, u32); | 7 | extern void set_up_gart_resume(u32, u32); |
8 | |||
18 | extern int fallback_aper_order; | 9 | extern int fallback_aper_order; |
19 | extern int fallback_aper_force; | 10 | extern int fallback_aper_force; |
20 | extern int gart_iommu_aperture; | ||
21 | extern int gart_iommu_aperture_allowed; | ||
22 | extern int gart_iommu_aperture_disabled; | ||
23 | extern int fix_aperture; | 11 | extern int fix_aperture; |
24 | #else | ||
25 | #define gart_iommu_aperture 0 | ||
26 | #define gart_iommu_aperture_allowed 0 | ||
27 | #define gart_iommu_aperture_disabled 1 | ||
28 | |||
29 | static inline void early_gart_iommu_check(void) | ||
30 | { | ||
31 | } | ||
32 | |||
33 | static inline void gart_iommu_shutdown(void) | ||
34 | { | ||
35 | } | ||
36 | |||
37 | #endif | ||
38 | 12 | ||
39 | /* PTE bits. */ | 13 | /* PTE bits. */ |
40 | #define GPTE_VALID 1 | 14 | #define GPTE_VALID 1 |
diff --git a/include/asm-x86/hpet.h b/include/asm-x86/hpet.h index 6a9b4ac59bf7..82f1ac641bd7 100644 --- a/include/asm-x86/hpet.h +++ b/include/asm-x86/hpet.h | |||
@@ -86,8 +86,8 @@ extern void hpet_unregister_irq_handler(rtc_irq_handler handler); | |||
86 | #else /* CONFIG_HPET_TIMER */ | 86 | #else /* CONFIG_HPET_TIMER */ |
87 | 87 | ||
88 | static inline int hpet_enable(void) { return 0; } | 88 | static inline int hpet_enable(void) { return 0; } |
89 | static inline unsigned long hpet_readl(unsigned long a) { return 0; } | ||
90 | static inline int is_hpet_enabled(void) { return 0; } | 89 | static inline int is_hpet_enabled(void) { return 0; } |
90 | #define hpet_readl(a) 0 | ||
91 | 91 | ||
92 | #endif | 92 | #endif |
93 | #endif /* ASM_X86_HPET_H */ | 93 | #endif /* ASM_X86_HPET_H */ |
diff --git a/include/asm-x86/hw_irq.h b/include/asm-x86/hw_irq.h index 18f067c310f7..77ba51df5668 100644 --- a/include/asm-x86/hw_irq.h +++ b/include/asm-x86/hw_irq.h | |||
@@ -48,6 +48,7 @@ extern void irq_move_cleanup_interrupt(void); | |||
48 | extern void threshold_interrupt(void); | 48 | extern void threshold_interrupt(void); |
49 | 49 | ||
50 | extern void call_function_interrupt(void); | 50 | extern void call_function_interrupt(void); |
51 | extern void call_function_single_interrupt(void); | ||
51 | 52 | ||
52 | /* PIC specific functions */ | 53 | /* PIC specific functions */ |
53 | extern void disable_8259A_irq(unsigned int irq); | 54 | extern void disable_8259A_irq(unsigned int irq); |
diff --git a/include/asm-x86/iommu.h b/include/asm-x86/iommu.h index 07862fdd23c0..068c9a40aa5b 100644 --- a/include/asm-x86/iommu.h +++ b/include/asm-x86/iommu.h | |||
@@ -1,29 +1,34 @@ | |||
1 | #ifndef _ASM_X8664_GART_H | 1 | #ifndef _ASM_X8664_IOMMU_H |
2 | #define _ASM_X8664_GART_H 1 | 2 | #define _ASM_X8664_IOMMU_H 1 |
3 | 3 | ||
4 | extern void pci_iommu_shutdown(void); | 4 | extern void pci_iommu_shutdown(void); |
5 | extern void no_iommu_init(void); | 5 | extern void no_iommu_init(void); |
6 | extern int force_iommu, no_iommu; | 6 | extern int force_iommu, no_iommu; |
7 | extern int iommu_detected; | 7 | extern int iommu_detected; |
8 | #ifdef CONFIG_IOMMU | 8 | |
9 | #ifdef CONFIG_GART_IOMMU | ||
10 | extern int gart_iommu_aperture; | ||
11 | extern int gart_iommu_aperture_allowed; | ||
12 | extern int gart_iommu_aperture_disabled; | ||
13 | |||
14 | extern void early_gart_iommu_check(void); | ||
9 | extern void gart_iommu_init(void); | 15 | extern void gart_iommu_init(void); |
10 | extern void gart_iommu_shutdown(void); | 16 | extern void gart_iommu_shutdown(void); |
11 | extern void __init gart_parse_options(char *); | 17 | extern void __init gart_parse_options(char *); |
12 | extern void iommu_hole_init(void); | 18 | extern void gart_iommu_hole_init(void); |
13 | extern int fallback_aper_order; | 19 | |
14 | extern int fallback_aper_force; | ||
15 | extern int iommu_aperture; | ||
16 | extern int iommu_aperture_allowed; | ||
17 | extern int iommu_aperture_disabled; | ||
18 | extern int fix_aperture; | ||
19 | #else | 20 | #else |
20 | #define iommu_aperture 0 | 21 | #define gart_iommu_aperture 0 |
21 | #define iommu_aperture_allowed 0 | 22 | #define gart_iommu_aperture_allowed 0 |
23 | #define gart_iommu_aperture_disabled 1 | ||
22 | 24 | ||
23 | static inline void gart_iommu_shutdown(void) | 25 | static inline void early_gart_iommu_check(void) |
24 | { | 26 | { |
25 | } | 27 | } |
26 | 28 | ||
29 | static inline void gart_iommu_shutdown(void) | ||
30 | { | ||
31 | } | ||
27 | #endif | 32 | #endif |
28 | 33 | ||
29 | #endif | 34 | #endif |
diff --git a/include/asm-x86/irq_vectors.h b/include/asm-x86/irq_vectors.h index b58581e2e24e..90b1d1f12f08 100644 --- a/include/asm-x86/irq_vectors.h +++ b/include/asm-x86/irq_vectors.h | |||
@@ -64,6 +64,7 @@ | |||
64 | # define INVALIDATE_TLB_VECTOR 0xfd | 64 | # define INVALIDATE_TLB_VECTOR 0xfd |
65 | # define RESCHEDULE_VECTOR 0xfc | 65 | # define RESCHEDULE_VECTOR 0xfc |
66 | # define CALL_FUNCTION_VECTOR 0xfb | 66 | # define CALL_FUNCTION_VECTOR 0xfb |
67 | # define CALL_FUNCTION_SINGLE_VECTOR 0xfa | ||
67 | # define THERMAL_APIC_VECTOR 0xf0 | 68 | # define THERMAL_APIC_VECTOR 0xf0 |
68 | 69 | ||
69 | #else | 70 | #else |
@@ -72,6 +73,7 @@ | |||
72 | #define ERROR_APIC_VECTOR 0xfe | 73 | #define ERROR_APIC_VECTOR 0xfe |
73 | #define RESCHEDULE_VECTOR 0xfd | 74 | #define RESCHEDULE_VECTOR 0xfd |
74 | #define CALL_FUNCTION_VECTOR 0xfc | 75 | #define CALL_FUNCTION_VECTOR 0xfc |
76 | #define CALL_FUNCTION_SINGLE_VECTOR 0xfb | ||
75 | #define THERMAL_APIC_VECTOR 0xfa | 77 | #define THERMAL_APIC_VECTOR 0xfa |
76 | #define THRESHOLD_APIC_VECTOR 0xf9 | 78 | #define THRESHOLD_APIC_VECTOR 0xf9 |
77 | #define INVALIDATE_TLB_VECTOR_END 0xf7 | 79 | #define INVALIDATE_TLB_VECTOR_END 0xf7 |
@@ -107,9 +109,9 @@ | |||
107 | #define LAST_VM86_IRQ 15 | 109 | #define LAST_VM86_IRQ 15 |
108 | #define invalid_vm86_irq(irq) ((irq) < 3 || (irq) > 15) | 110 | #define invalid_vm86_irq(irq) ((irq) < 3 || (irq) > 15) |
109 | 111 | ||
110 | #if !defined(CONFIG_X86_VISWS) && !defined(CONFIG_X86_VOYAGER) | 112 | #if !defined(CONFIG_X86_VOYAGER) |
111 | 113 | ||
112 | # if defined(CONFIG_X86_IO_APIC) || defined(CONFIG_PARAVIRT) | 114 | # if defined(CONFIG_X86_IO_APIC) || defined(CONFIG_PARAVIRT) || defined(CONFIG_X86_VISWS) |
113 | 115 | ||
114 | # define NR_IRQS 224 | 116 | # define NR_IRQS 224 |
115 | 117 | ||
@@ -143,6 +145,7 @@ | |||
143 | #define VIC_RESCHEDULE_CPI 4 | 145 | #define VIC_RESCHEDULE_CPI 4 |
144 | #define VIC_ENABLE_IRQ_CPI 5 | 146 | #define VIC_ENABLE_IRQ_CPI 5 |
145 | #define VIC_CALL_FUNCTION_CPI 6 | 147 | #define VIC_CALL_FUNCTION_CPI 6 |
148 | #define VIC_CALL_FUNCTION_SINGLE_CPI 7 | ||
146 | 149 | ||
147 | /* Now the QIC CPIs: Since we don't need the two initial levels, | 150 | /* Now the QIC CPIs: Since we don't need the two initial levels, |
148 | * these are 2 less than the VIC CPIs */ | 151 | * these are 2 less than the VIC CPIs */ |
@@ -152,9 +155,10 @@ | |||
152 | #define QIC_RESCHEDULE_CPI (VIC_RESCHEDULE_CPI - QIC_CPI_OFFSET) | 155 | #define QIC_RESCHEDULE_CPI (VIC_RESCHEDULE_CPI - QIC_CPI_OFFSET) |
153 | #define QIC_ENABLE_IRQ_CPI (VIC_ENABLE_IRQ_CPI - QIC_CPI_OFFSET) | 156 | #define QIC_ENABLE_IRQ_CPI (VIC_ENABLE_IRQ_CPI - QIC_CPI_OFFSET) |
154 | #define QIC_CALL_FUNCTION_CPI (VIC_CALL_FUNCTION_CPI - QIC_CPI_OFFSET) | 157 | #define QIC_CALL_FUNCTION_CPI (VIC_CALL_FUNCTION_CPI - QIC_CPI_OFFSET) |
158 | #define QIC_CALL_FUNCTION_SINGLE_CPI (VIC_CALL_FUNCTION_SINGLE_CPI - QIC_CPI_OFFSET) | ||
155 | 159 | ||
156 | #define VIC_START_FAKE_CPI VIC_TIMER_CPI | 160 | #define VIC_START_FAKE_CPI VIC_TIMER_CPI |
157 | #define VIC_END_FAKE_CPI VIC_CALL_FUNCTION_CPI | 161 | #define VIC_END_FAKE_CPI VIC_CALL_FUNCTION_SINGLE_CPI |
158 | 162 | ||
159 | /* this is the SYS_INT CPI. */ | 163 | /* this is the SYS_INT CPI. */ |
160 | #define VIC_SYS_INT 8 | 164 | #define VIC_SYS_INT 8 |
diff --git a/include/asm-x86/irqflags.h b/include/asm-x86/irqflags.h index 17e7a1701c97..424acb48cd61 100644 --- a/include/asm-x86/irqflags.h +++ b/include/asm-x86/irqflags.h | |||
@@ -190,8 +190,6 @@ static inline void trace_hardirqs_fixup(void) | |||
190 | #else | 190 | #else |
191 | 191 | ||
192 | #ifdef CONFIG_X86_64 | 192 | #ifdef CONFIG_X86_64 |
193 | #define ARCH_TRACE_IRQS_ON call trace_hardirqs_on_thunk | ||
194 | #define ARCH_TRACE_IRQS_OFF call trace_hardirqs_off_thunk | ||
195 | #define ARCH_LOCKDEP_SYS_EXIT call lockdep_sys_exit_thunk | 193 | #define ARCH_LOCKDEP_SYS_EXIT call lockdep_sys_exit_thunk |
196 | #define ARCH_LOCKDEP_SYS_EXIT_IRQ \ | 194 | #define ARCH_LOCKDEP_SYS_EXIT_IRQ \ |
197 | TRACE_IRQS_ON; \ | 195 | TRACE_IRQS_ON; \ |
@@ -203,24 +201,6 @@ static inline void trace_hardirqs_fixup(void) | |||
203 | TRACE_IRQS_OFF; | 201 | TRACE_IRQS_OFF; |
204 | 202 | ||
205 | #else | 203 | #else |
206 | #define ARCH_TRACE_IRQS_ON \ | ||
207 | pushl %eax; \ | ||
208 | pushl %ecx; \ | ||
209 | pushl %edx; \ | ||
210 | call trace_hardirqs_on; \ | ||
211 | popl %edx; \ | ||
212 | popl %ecx; \ | ||
213 | popl %eax; | ||
214 | |||
215 | #define ARCH_TRACE_IRQS_OFF \ | ||
216 | pushl %eax; \ | ||
217 | pushl %ecx; \ | ||
218 | pushl %edx; \ | ||
219 | call trace_hardirqs_off; \ | ||
220 | popl %edx; \ | ||
221 | popl %ecx; \ | ||
222 | popl %eax; | ||
223 | |||
224 | #define ARCH_LOCKDEP_SYS_EXIT \ | 204 | #define ARCH_LOCKDEP_SYS_EXIT \ |
225 | pushl %eax; \ | 205 | pushl %eax; \ |
226 | pushl %ecx; \ | 206 | pushl %ecx; \ |
@@ -234,8 +214,8 @@ static inline void trace_hardirqs_fixup(void) | |||
234 | #endif | 214 | #endif |
235 | 215 | ||
236 | #ifdef CONFIG_TRACE_IRQFLAGS | 216 | #ifdef CONFIG_TRACE_IRQFLAGS |
237 | # define TRACE_IRQS_ON ARCH_TRACE_IRQS_ON | 217 | # define TRACE_IRQS_ON call trace_hardirqs_on_thunk; |
238 | # define TRACE_IRQS_OFF ARCH_TRACE_IRQS_OFF | 218 | # define TRACE_IRQS_OFF call trace_hardirqs_off_thunk; |
239 | #else | 219 | #else |
240 | # define TRACE_IRQS_ON | 220 | # define TRACE_IRQS_ON |
241 | # define TRACE_IRQS_OFF | 221 | # define TRACE_IRQS_OFF |
diff --git a/include/asm-x86/mach-default/entry_arch.h b/include/asm-x86/mach-default/entry_arch.h index bc861469bdba..9283b60a1dd2 100644 --- a/include/asm-x86/mach-default/entry_arch.h +++ b/include/asm-x86/mach-default/entry_arch.h | |||
@@ -13,6 +13,7 @@ | |||
13 | BUILD_INTERRUPT(reschedule_interrupt,RESCHEDULE_VECTOR) | 13 | BUILD_INTERRUPT(reschedule_interrupt,RESCHEDULE_VECTOR) |
14 | BUILD_INTERRUPT(invalidate_interrupt,INVALIDATE_TLB_VECTOR) | 14 | BUILD_INTERRUPT(invalidate_interrupt,INVALIDATE_TLB_VECTOR) |
15 | BUILD_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR) | 15 | BUILD_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR) |
16 | BUILD_INTERRUPT(call_function_single_interrupt,CALL_FUNCTION_SINGLE_VECTOR) | ||
16 | #endif | 17 | #endif |
17 | 18 | ||
18 | /* | 19 | /* |
diff --git a/include/asm-x86/mach-default/smpboot_hooks.h b/include/asm-x86/mach-default/smpboot_hooks.h index b63c52182006..56d001b9dce4 100644 --- a/include/asm-x86/mach-default/smpboot_hooks.h +++ b/include/asm-x86/mach-default/smpboot_hooks.h | |||
@@ -3,7 +3,9 @@ | |||
3 | 3 | ||
4 | static inline void smpboot_clear_io_apic_irqs(void) | 4 | static inline void smpboot_clear_io_apic_irqs(void) |
5 | { | 5 | { |
6 | #ifdef CONFIG_X86_IO_APIC | ||
6 | io_apic_irqs = 0; | 7 | io_apic_irqs = 0; |
8 | #endif | ||
7 | } | 9 | } |
8 | 10 | ||
9 | static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) | 11 | static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) |
@@ -35,6 +37,7 @@ static inline void smpboot_restore_warm_reset_vector(void) | |||
35 | 37 | ||
36 | static inline void __init smpboot_setup_io_apic(void) | 38 | static inline void __init smpboot_setup_io_apic(void) |
37 | { | 39 | { |
40 | #ifdef CONFIG_X86_IO_APIC | ||
38 | /* | 41 | /* |
39 | * Here we can be sure that there is an IO-APIC in the system. Let's | 42 | * Here we can be sure that there is an IO-APIC in the system. Let's |
40 | * go and set it up: | 43 | * go and set it up: |
@@ -45,9 +48,12 @@ static inline void __init smpboot_setup_io_apic(void) | |||
45 | nr_ioapics = 0; | 48 | nr_ioapics = 0; |
46 | localise_nmi_watchdog(); | 49 | localise_nmi_watchdog(); |
47 | } | 50 | } |
51 | #endif | ||
48 | } | 52 | } |
49 | 53 | ||
50 | static inline void smpboot_clear_io_apic(void) | 54 | static inline void smpboot_clear_io_apic(void) |
51 | { | 55 | { |
56 | #ifdef CONFIG_X86_IO_APIC | ||
52 | nr_ioapics = 0; | 57 | nr_ioapics = 0; |
58 | #endif | ||
53 | } | 59 | } |
diff --git a/include/asm-x86/mach-visws/entry_arch.h b/include/asm-x86/mach-visws/entry_arch.h index b183fa6d83d9..86be554342d4 100644 --- a/include/asm-x86/mach-visws/entry_arch.h +++ b/include/asm-x86/mach-visws/entry_arch.h | |||
@@ -1,23 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * The following vectors are part of the Linux architecture, there | 2 | * VISWS uses the standard Linux entry points: |
3 | * is no hardware IRQ pin equivalent for them, they are triggered | ||
4 | * through the ICC by us (IPIs) | ||
5 | */ | 3 | */ |
6 | #ifdef CONFIG_X86_SMP | ||
7 | BUILD_INTERRUPT(reschedule_interrupt,RESCHEDULE_VECTOR) | ||
8 | BUILD_INTERRUPT(invalidate_interrupt,INVALIDATE_TLB_VECTOR) | ||
9 | BUILD_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR) | ||
10 | #endif | ||
11 | 4 | ||
12 | /* | 5 | #include "../mach-default/entry_arch.h" |
13 | * every pentium local APIC has two 'local interrupts', with a | ||
14 | * soft-definable vector attached to both interrupts, one of | ||
15 | * which is a timer interrupt, the other one is error counter | ||
16 | * overflow. Linux uses the local APIC timer interrupt to get | ||
17 | * a much simpler SMP time architecture: | ||
18 | */ | ||
19 | #ifdef CONFIG_X86_LOCAL_APIC | ||
20 | BUILD_INTERRUPT(apic_timer_interrupt,LOCAL_TIMER_VECTOR) | ||
21 | BUILD_INTERRUPT(error_interrupt,ERROR_APIC_VECTOR) | ||
22 | BUILD_INTERRUPT(spurious_interrupt,SPURIOUS_APIC_VECTOR) | ||
23 | #endif | ||
diff --git a/include/asm-x86/mach-visws/mach_apic.h b/include/asm-x86/mach-visws/mach_apic.h index a9ef33a8a995..6943e7a1d0e6 100644 --- a/include/asm-x86/mach-visws/mach_apic.h +++ b/include/asm-x86/mach-visws/mach_apic.h | |||
@@ -1,103 +1 @@ | |||
1 | #ifndef __ASM_MACH_APIC_H | #include "../mach-default/mach_apic.h" | |
2 | #define __ASM_MACH_APIC_H | ||
3 | |||
4 | #include <mach_apicdef.h> | ||
5 | #include <asm/smp.h> | ||
6 | |||
7 | #define APIC_DFR_VALUE (APIC_DFR_FLAT) | ||
8 | |||
9 | #define no_balance_irq (0) | ||
10 | #define esr_disable (0) | ||
11 | |||
12 | #define INT_DELIVERY_MODE dest_LowestPrio | ||
13 | #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */ | ||
14 | |||
15 | #ifdef CONFIG_SMP | ||
16 | #define TARGET_CPUS cpu_online_map | ||
17 | #else | ||
18 | #define TARGET_CPUS cpumask_of_cpu(0) | ||
19 | #endif | ||
20 | |||
21 | #define check_apicid_used(bitmap, apicid) physid_isset(apicid, bitmap) | ||
22 | #define check_apicid_present(bit) physid_isset(bit, phys_cpu_present_map) | ||
23 | |||
24 | static inline int apic_id_registered(void) | ||
25 | { | ||
26 | return physid_isset(GET_APIC_ID(read_apic_id()), phys_cpu_present_map); | ||
27 | } | ||
28 | |||
29 | /* | ||
30 | * Set up the logical destination ID. | ||
31 | * | ||
32 | * Intel recommends to set DFR, LDR and TPR before enabling | ||
33 | * an APIC. See e.g. "AP-388 82489DX User's Manual" (Intel | ||
34 | * document number 292116). So here it goes... | ||
35 | */ | ||
36 | static inline void init_apic_ldr(void) | ||
37 | { | ||
38 | unsigned long val; | ||
39 | |||
40 | apic_write_around(APIC_DFR, APIC_DFR_VALUE); | ||
41 | val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; | ||
42 | val |= SET_APIC_LOGICAL_ID(1UL << smp_processor_id()); | ||
43 | apic_write_around(APIC_LDR, val); | ||
44 | } | ||
45 | |||
46 | static inline void summit_check(char *oem, char *productid) | ||
47 | { | ||
48 | } | ||
49 | |||
50 | static inline void setup_apic_routing(void) | ||
51 | { | ||
52 | } | ||
53 | |||
54 | static inline int apicid_to_node(int logical_apicid) | ||
55 | { | ||
56 | return 0; | ||
57 | } | ||
58 | |||
59 | /* Mapping from cpu number to logical apicid */ | ||
60 | static inline int cpu_to_logical_apicid(int cpu) | ||
61 | { | ||
62 | return 1 << cpu; | ||
63 | } | ||
64 | |||
65 | static inline int cpu_present_to_apicid(int mps_cpu) | ||
66 | { | ||
67 | if (mps_cpu < get_physical_broadcast()) | ||
68 | return mps_cpu; | ||
69 | else | ||
70 | return BAD_APICID; | ||
71 | } | ||
72 | |||
73 | static inline physid_mask_t apicid_to_cpu_present(int apicid) | ||
74 | { | ||
75 | return physid_mask_of_physid(apicid); | ||
76 | } | ||
77 | |||
78 | #define WAKE_SECONDARY_VIA_INIT | ||
79 | |||
80 | static inline void setup_portio_remap(void) | ||
81 | { | ||
82 | } | ||
83 | |||
84 | static inline void enable_apic_mode(void) | ||
85 | { | ||
86 | } | ||
87 | |||
88 | static inline int check_phys_apicid_present(int boot_cpu_physical_apicid) | ||
89 | { | ||
90 | return physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map); | ||
91 | } | ||
92 | |||
93 | static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) | ||
94 | { | ||
95 | return cpus_addr(cpumask)[0]; | ||
96 | } | ||
97 | |||
98 | static inline u32 phys_pkg_id(u32 cpuid_apic, int index_msb) | ||
99 | { | ||
100 | return cpuid_apic >> index_msb; | ||
101 | } | ||
102 | |||
103 | #endif /* __ASM_MACH_APIC_H */ | ||
diff --git a/include/asm-x86/mach-visws/mach_apicdef.h b/include/asm-x86/mach-visws/mach_apicdef.h index 826cfa97d778..42711d152a93 100644 --- a/include/asm-x86/mach-visws/mach_apicdef.h +++ b/include/asm-x86/mach-visws/mach_apicdef.h | |||
@@ -1,12 +1 @@ | |||
1 | #ifndef __ASM_MACH_APICDEF_H | #include "../mach-default/mach_apicdef.h" | |
2 | #define __ASM_MACH_APICDEF_H | ||
3 | |||
4 | #define APIC_ID_MASK (0xF<<24) | ||
5 | |||
6 | static inline unsigned get_apic_id(unsigned long x) | ||
7 | { | ||
8 | return (((x)>>24)&0xF); | ||
9 | } | ||
10 | #define GET_APIC_ID(x) get_apic_id(x) | ||
11 | |||
12 | #endif | ||
diff --git a/include/asm-x86/mach-visws/setup_arch.h b/include/asm-x86/mach-visws/setup_arch.h index b8f5dd829dba..fa4766ca2d10 100644 --- a/include/asm-x86/mach-visws/setup_arch.h +++ b/include/asm-x86/mach-visws/setup_arch.h | |||
@@ -1,6 +1 @@ | |||
1 | /* Hook to call BIOS initialisation function */ | #include "../mach-default/setup_arch.h" | |
2 | |||
3 | extern unsigned long sgivwfb_mem_phys; | ||
4 | extern unsigned long sgivwfb_mem_size; | ||
5 | |||
6 | /* no action for visws */ | ||
diff --git a/include/asm-x86/mach-visws/smpboot_hooks.h b/include/asm-x86/mach-visws/smpboot_hooks.h index c9b83e395a2e..e4433ca88715 100644 --- a/include/asm-x86/mach-visws/smpboot_hooks.h +++ b/include/asm-x86/mach-visws/smpboot_hooks.h | |||
@@ -1,28 +1 @@ | |||
1 | static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) | #include "../mach-default/smpboot_hooks.h" | |
2 | { | ||
3 | CMOS_WRITE(0xa, 0xf); | ||
4 | local_flush_tlb(); | ||
5 | Dprintk("1.\n"); | ||
6 | *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4; | ||
7 | Dprintk("2.\n"); | ||
8 | *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf; | ||
9 | Dprintk("3.\n"); | ||
10 | } | ||
11 | |||
12 | /* for visws do nothing for any of these */ | ||
13 | |||
14 | static inline void smpboot_clear_io_apic_irqs(void) | ||
15 | { | ||
16 | } | ||
17 | |||
18 | static inline void smpboot_restore_warm_reset_vector(void) | ||
19 | { | ||
20 | } | ||
21 | |||
22 | static inline void smpboot_setup_io_apic(void) | ||
23 | { | ||
24 | } | ||
25 | |||
26 | static inline void smpboot_clear_io_apic(void) | ||
27 | { | ||
28 | } | ||
diff --git a/include/asm-x86/mach-voyager/entry_arch.h b/include/asm-x86/mach-voyager/entry_arch.h index 4a1e1e8c10b6..ae52624b5937 100644 --- a/include/asm-x86/mach-voyager/entry_arch.h +++ b/include/asm-x86/mach-voyager/entry_arch.h | |||
@@ -23,4 +23,4 @@ BUILD_INTERRUPT(qic_invalidate_interrupt, QIC_INVALIDATE_CPI); | |||
23 | BUILD_INTERRUPT(qic_reschedule_interrupt, QIC_RESCHEDULE_CPI); | 23 | BUILD_INTERRUPT(qic_reschedule_interrupt, QIC_RESCHEDULE_CPI); |
24 | BUILD_INTERRUPT(qic_enable_irq_interrupt, QIC_ENABLE_IRQ_CPI); | 24 | BUILD_INTERRUPT(qic_enable_irq_interrupt, QIC_ENABLE_IRQ_CPI); |
25 | BUILD_INTERRUPT(qic_call_function_interrupt, QIC_CALL_FUNCTION_CPI); | 25 | BUILD_INTERRUPT(qic_call_function_interrupt, QIC_CALL_FUNCTION_CPI); |
26 | 26 | BUILD_INTERRUPT(qic_call_function_single_interrupt, QIC_CALL_FUNCTION_SINGLE_CPI); | |
diff --git a/include/asm-x86/numaq.h b/include/asm-x86/numaq.h index ef068d2465d6..34b92d581fa3 100644 --- a/include/asm-x86/numaq.h +++ b/include/asm-x86/numaq.h | |||
@@ -157,6 +157,8 @@ struct sys_cfg_data { | |||
157 | struct eachquadmem eq[MAX_NUMNODES]; /* indexed by quad id */ | 157 | struct eachquadmem eq[MAX_NUMNODES]; /* indexed by quad id */ |
158 | }; | 158 | }; |
159 | 159 | ||
160 | void numaq_tsc_disable(void); | ||
161 | |||
160 | #else | 162 | #else |
161 | static inline int get_memcfg_numaq(void) | 163 | static inline int get_memcfg_numaq(void) |
162 | { | 164 | { |
diff --git a/include/asm-x86/page.h b/include/asm-x86/page.h index b52ed85f32f5..28d7b4533b1a 100644 --- a/include/asm-x86/page.h +++ b/include/asm-x86/page.h | |||
@@ -61,6 +61,7 @@ extern void map_devmem(unsigned long pfn, unsigned long size, | |||
61 | extern void unmap_devmem(unsigned long pfn, unsigned long size, | 61 | extern void unmap_devmem(unsigned long pfn, unsigned long size, |
62 | pgprot_t vma_prot); | 62 | pgprot_t vma_prot); |
63 | 63 | ||
64 | extern unsigned long max_low_pfn_mapped; | ||
64 | extern unsigned long max_pfn_mapped; | 65 | extern unsigned long max_pfn_mapped; |
65 | 66 | ||
66 | struct page; | 67 | struct page; |
diff --git a/include/asm-x86/page_64.h b/include/asm-x86/page_64.h index 010d12db80dc..c6916c83e6b1 100644 --- a/include/asm-x86/page_64.h +++ b/include/asm-x86/page_64.h | |||
@@ -91,6 +91,10 @@ extern unsigned long init_memory_mapping(unsigned long start, | |||
91 | unsigned long end); | 91 | unsigned long end); |
92 | 92 | ||
93 | extern void initmem_init(unsigned long start_pfn, unsigned long end_pfn); | 93 | extern void initmem_init(unsigned long start_pfn, unsigned long end_pfn); |
94 | |||
95 | extern void init_extra_mapping_uc(unsigned long phys, unsigned long size); | ||
96 | extern void init_extra_mapping_wb(unsigned long phys, unsigned long size); | ||
97 | |||
94 | #endif /* !__ASSEMBLY__ */ | 98 | #endif /* !__ASSEMBLY__ */ |
95 | 99 | ||
96 | #ifdef CONFIG_FLATMEM | 100 | #ifdef CONFIG_FLATMEM |
diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h index 6d8966f9d190..ef5e8ec6a6ab 100644 --- a/include/asm-x86/paravirt.h +++ b/include/asm-x86/paravirt.h | |||
@@ -84,7 +84,7 @@ struct pv_time_ops { | |||
84 | int (*set_wallclock)(unsigned long); | 84 | int (*set_wallclock)(unsigned long); |
85 | 85 | ||
86 | unsigned long long (*sched_clock)(void); | 86 | unsigned long long (*sched_clock)(void); |
87 | unsigned long (*get_cpu_khz)(void); | 87 | unsigned long (*get_tsc_khz)(void); |
88 | }; | 88 | }; |
89 | 89 | ||
90 | struct pv_cpu_ops { | 90 | struct pv_cpu_ops { |
@@ -779,7 +779,7 @@ static inline unsigned long long paravirt_sched_clock(void) | |||
779 | { | 779 | { |
780 | return PVOP_CALL0(unsigned long long, pv_time_ops.sched_clock); | 780 | return PVOP_CALL0(unsigned long long, pv_time_ops.sched_clock); |
781 | } | 781 | } |
782 | #define calculate_cpu_khz() (pv_time_ops.get_cpu_khz()) | 782 | #define calibrate_tsc() (pv_time_ops.get_tsc_khz()) |
783 | 783 | ||
784 | static inline unsigned long long paravirt_read_pmc(int counter) | 784 | static inline unsigned long long paravirt_read_pmc(int counter) |
785 | { | 785 | { |
diff --git a/include/asm-x86/pci-direct.h b/include/asm-x86/pci-direct.h index 5b21485be573..80c775d9fe20 100644 --- a/include/asm-x86/pci-direct.h +++ b/include/asm-x86/pci-direct.h | |||
@@ -11,7 +11,11 @@ extern u8 read_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset); | |||
11 | extern u16 read_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset); | 11 | extern u16 read_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset); |
12 | extern void write_pci_config(u8 bus, u8 slot, u8 func, u8 offset, u32 val); | 12 | extern void write_pci_config(u8 bus, u8 slot, u8 func, u8 offset, u32 val); |
13 | extern void write_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset, u8 val); | 13 | extern void write_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset, u8 val); |
14 | extern void write_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset, u16 val); | ||
14 | 15 | ||
15 | extern int early_pci_allowed(void); | 16 | extern int early_pci_allowed(void); |
16 | 17 | ||
18 | extern unsigned int pci_early_dump_regs; | ||
19 | extern void early_dump_pci_device(u8 bus, u8 slot, u8 func); | ||
20 | extern void early_dump_pci_devices(void); | ||
17 | #endif | 21 | #endif |
diff --git a/include/asm-x86/pgtable.h b/include/asm-x86/pgtable.h index 64de07e25329..49cbd76b9547 100644 --- a/include/asm-x86/pgtable.h +++ b/include/asm-x86/pgtable.h | |||
@@ -91,6 +91,7 @@ | |||
91 | #define __PAGE_KERNEL_VSYSCALL (__PAGE_KERNEL_RX | _PAGE_USER) | 91 | #define __PAGE_KERNEL_VSYSCALL (__PAGE_KERNEL_RX | _PAGE_USER) |
92 | #define __PAGE_KERNEL_VSYSCALL_NOCACHE (__PAGE_KERNEL_VSYSCALL | _PAGE_PCD | _PAGE_PWT) | 92 | #define __PAGE_KERNEL_VSYSCALL_NOCACHE (__PAGE_KERNEL_VSYSCALL | _PAGE_PCD | _PAGE_PWT) |
93 | #define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE) | 93 | #define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE) |
94 | #define __PAGE_KERNEL_LARGE_NOCACHE (__PAGE_KERNEL | _PAGE_CACHE_UC | _PAGE_PSE) | ||
94 | #define __PAGE_KERNEL_LARGE_EXEC (__PAGE_KERNEL_EXEC | _PAGE_PSE) | 95 | #define __PAGE_KERNEL_LARGE_EXEC (__PAGE_KERNEL_EXEC | _PAGE_PSE) |
95 | 96 | ||
96 | #define PAGE_KERNEL __pgprot(__PAGE_KERNEL) | 97 | #define PAGE_KERNEL __pgprot(__PAGE_KERNEL) |
@@ -102,6 +103,7 @@ | |||
102 | #define PAGE_KERNEL_UC_MINUS __pgprot(__PAGE_KERNEL_UC_MINUS) | 103 | #define PAGE_KERNEL_UC_MINUS __pgprot(__PAGE_KERNEL_UC_MINUS) |
103 | #define PAGE_KERNEL_EXEC_NOCACHE __pgprot(__PAGE_KERNEL_EXEC_NOCACHE) | 104 | #define PAGE_KERNEL_EXEC_NOCACHE __pgprot(__PAGE_KERNEL_EXEC_NOCACHE) |
104 | #define PAGE_KERNEL_LARGE __pgprot(__PAGE_KERNEL_LARGE) | 105 | #define PAGE_KERNEL_LARGE __pgprot(__PAGE_KERNEL_LARGE) |
106 | #define PAGE_KERNEL_LARGE_NOCACHE __pgprot(__PAGE_KERNEL_LARGE_NOCACHE) | ||
105 | #define PAGE_KERNEL_LARGE_EXEC __pgprot(__PAGE_KERNEL_LARGE_EXEC) | 107 | #define PAGE_KERNEL_LARGE_EXEC __pgprot(__PAGE_KERNEL_LARGE_EXEC) |
106 | #define PAGE_KERNEL_VSYSCALL __pgprot(__PAGE_KERNEL_VSYSCALL) | 108 | #define PAGE_KERNEL_VSYSCALL __pgprot(__PAGE_KERNEL_VSYSCALL) |
107 | #define PAGE_KERNEL_VSYSCALL_NOCACHE __pgprot(__PAGE_KERNEL_VSYSCALL_NOCACHE) | 109 | #define PAGE_KERNEL_VSYSCALL_NOCACHE __pgprot(__PAGE_KERNEL_VSYSCALL_NOCACHE) |
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h index 7f7382704592..55402d2ab938 100644 --- a/include/asm-x86/processor.h +++ b/include/asm-x86/processor.h | |||
@@ -727,6 +727,8 @@ extern int force_mwait; | |||
727 | extern void select_idle_routine(const struct cpuinfo_x86 *c); | 727 | extern void select_idle_routine(const struct cpuinfo_x86 *c); |
728 | 728 | ||
729 | extern unsigned long boot_option_idle_override; | 729 | extern unsigned long boot_option_idle_override; |
730 | extern unsigned long idle_halt; | ||
731 | extern unsigned long idle_nomwait; | ||
730 | 732 | ||
731 | extern void enable_sep_cpu(void); | 733 | extern void enable_sep_cpu(void); |
732 | extern int sysenter_setup(void); | 734 | extern int sysenter_setup(void); |
diff --git a/include/asm-x86/setup.h b/include/asm-x86/setup.h index 1d121c632d9e..90ab2225e71b 100644 --- a/include/asm-x86/setup.h +++ b/include/asm-x86/setup.h | |||
@@ -8,6 +8,25 @@ | |||
8 | /* Interrupt control for vSMPowered x86_64 systems */ | 8 | /* Interrupt control for vSMPowered x86_64 systems */ |
9 | void vsmp_init(void); | 9 | void vsmp_init(void); |
10 | 10 | ||
11 | #ifdef CONFIG_X86_VISWS | ||
12 | extern void visws_early_detect(void); | ||
13 | extern int is_visws_box(void); | ||
14 | #else | ||
15 | static inline void visws_early_detect(void) { } | ||
16 | static inline int is_visws_box(void) { return 0; } | ||
17 | #endif | ||
18 | |||
19 | /* | ||
20 | * Any setup quirks to be performed? | ||
21 | */ | ||
22 | extern int (*arch_time_init_quirk)(void); | ||
23 | extern int (*arch_pre_intr_init_quirk)(void); | ||
24 | extern int (*arch_intr_init_quirk)(void); | ||
25 | extern int (*arch_trap_init_quirk)(void); | ||
26 | extern char * (*arch_memory_setup_quirk)(void); | ||
27 | extern int (*mach_get_smp_config_quirk)(unsigned int early); | ||
28 | extern int (*mach_find_smp_config_quirk)(unsigned int reserve); | ||
29 | |||
11 | #ifndef CONFIG_PARAVIRT | 30 | #ifndef CONFIG_PARAVIRT |
12 | #define paravirt_post_allocator_init() do {} while (0) | 31 | #define paravirt_post_allocator_init() do {} while (0) |
13 | #endif | 32 | #endif |
diff --git a/include/asm-x86/smp.h b/include/asm-x86/smp.h index 2e221f1ce0b2..c2784b3e0b77 100644 --- a/include/asm-x86/smp.h +++ b/include/asm-x86/smp.h | |||
@@ -50,9 +50,9 @@ struct smp_ops { | |||
50 | 50 | ||
51 | void (*smp_send_stop)(void); | 51 | void (*smp_send_stop)(void); |
52 | void (*smp_send_reschedule)(int cpu); | 52 | void (*smp_send_reschedule)(int cpu); |
53 | int (*smp_call_function_mask)(cpumask_t mask, | 53 | |
54 | void (*func)(void *info), void *info, | 54 | void (*send_call_func_ipi)(cpumask_t mask); |
55 | int wait); | 55 | void (*send_call_func_single_ipi)(int cpu); |
56 | }; | 56 | }; |
57 | 57 | ||
58 | /* Globals due to paravirt */ | 58 | /* Globals due to paravirt */ |
@@ -94,17 +94,22 @@ static inline void smp_send_reschedule(int cpu) | |||
94 | smp_ops.smp_send_reschedule(cpu); | 94 | smp_ops.smp_send_reschedule(cpu); |
95 | } | 95 | } |
96 | 96 | ||
97 | static inline int smp_call_function_mask(cpumask_t mask, | 97 | static inline void arch_send_call_function_single_ipi(int cpu) |
98 | void (*func) (void *info), void *info, | 98 | { |
99 | int wait) | 99 | smp_ops.send_call_func_single_ipi(cpu); |
100 | } | ||
101 | |||
102 | static inline void arch_send_call_function_ipi(cpumask_t mask) | ||
100 | { | 103 | { |
101 | return smp_ops.smp_call_function_mask(mask, func, info, wait); | 104 | smp_ops.send_call_func_ipi(mask); |
102 | } | 105 | } |
103 | 106 | ||
104 | void native_smp_prepare_boot_cpu(void); | 107 | void native_smp_prepare_boot_cpu(void); |
105 | void native_smp_prepare_cpus(unsigned int max_cpus); | 108 | void native_smp_prepare_cpus(unsigned int max_cpus); |
106 | void native_smp_cpus_done(unsigned int max_cpus); | 109 | void native_smp_cpus_done(unsigned int max_cpus); |
107 | int native_cpu_up(unsigned int cpunum); | 110 | int native_cpu_up(unsigned int cpunum); |
111 | void native_send_call_func_ipi(cpumask_t mask); | ||
112 | void native_send_call_func_single_ipi(int cpu); | ||
108 | 113 | ||
109 | extern int __cpu_disable(void); | 114 | extern int __cpu_disable(void); |
110 | extern void __cpu_die(unsigned int cpu); | 115 | extern void __cpu_die(unsigned int cpu); |
@@ -197,7 +202,5 @@ static inline int hard_smp_processor_id(void) | |||
197 | extern void cpu_uninit(void); | 202 | extern void cpu_uninit(void); |
198 | #endif | 203 | #endif |
199 | 204 | ||
200 | extern void lock_ipi_call_lock(void); | ||
201 | extern void unlock_ipi_call_lock(void); | ||
202 | #endif /* __ASSEMBLY__ */ | 205 | #endif /* __ASSEMBLY__ */ |
203 | #endif | 206 | #endif |
diff --git a/include/asm-x86/system.h b/include/asm-x86/system.h index c4946c5964bf..983ce37c491f 100644 --- a/include/asm-x86/system.h +++ b/include/asm-x86/system.h | |||
@@ -160,7 +160,7 @@ extern void native_load_gs_index(unsigned); | |||
160 | * Save a segment register away | 160 | * Save a segment register away |
161 | */ | 161 | */ |
162 | #define savesegment(seg, value) \ | 162 | #define savesegment(seg, value) \ |
163 | asm("mov %%" #seg ",%0":"=rm" (value) : : "memory") | 163 | asm("mov %%" #seg ",%0":"=r" (value) : : "memory") |
164 | 164 | ||
165 | static inline unsigned long get_limit(unsigned long segment) | 165 | static inline unsigned long get_limit(unsigned long segment) |
166 | { | 166 | { |
diff --git a/include/asm-x86/time.h b/include/asm-x86/time.h index bce72d7a958c..a17fa473e91d 100644 --- a/include/asm-x86/time.h +++ b/include/asm-x86/time.h | |||
@@ -56,4 +56,6 @@ static inline int native_set_wallclock(unsigned long nowtime) | |||
56 | 56 | ||
57 | #endif /* CONFIG_PARAVIRT */ | 57 | #endif /* CONFIG_PARAVIRT */ |
58 | 58 | ||
59 | extern unsigned long __init calibrate_cpu(void); | ||
60 | |||
59 | #endif | 61 | #endif |
diff --git a/include/asm-x86/timer.h b/include/asm-x86/timer.h index 4f6fcb050c11..fb2a4ddddf3d 100644 --- a/include/asm-x86/timer.h +++ b/include/asm-x86/timer.h | |||
@@ -7,14 +7,14 @@ | |||
7 | #define TICK_SIZE (tick_nsec / 1000) | 7 | #define TICK_SIZE (tick_nsec / 1000) |
8 | 8 | ||
9 | unsigned long long native_sched_clock(void); | 9 | unsigned long long native_sched_clock(void); |
10 | unsigned long native_calculate_cpu_khz(void); | 10 | unsigned long native_calibrate_tsc(void); |
11 | 11 | ||
12 | extern int timer_ack; | 12 | extern int timer_ack; |
13 | extern int no_timer_check; | 13 | extern int no_timer_check; |
14 | extern int recalibrate_cpu_khz(void); | 14 | extern int recalibrate_cpu_khz(void); |
15 | 15 | ||
16 | #ifndef CONFIG_PARAVIRT | 16 | #ifndef CONFIG_PARAVIRT |
17 | #define calculate_cpu_khz() native_calculate_cpu_khz() | 17 | #define calibrate_tsc() native_calibrate_tsc() |
18 | #endif | 18 | #endif |
19 | 19 | ||
20 | /* Accelerators for sched_clock() | 20 | /* Accelerators for sched_clock() |
diff --git a/include/asm-x86/topology.h b/include/asm-x86/topology.h index 98e5f17ea856..90ac7718469a 100644 --- a/include/asm-x86/topology.h +++ b/include/asm-x86/topology.h | |||
@@ -82,7 +82,7 @@ DECLARE_EARLY_PER_CPU(int, x86_cpu_to_node_map); | |||
82 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS | 82 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS |
83 | extern int cpu_to_node(int cpu); | 83 | extern int cpu_to_node(int cpu); |
84 | extern int early_cpu_to_node(int cpu); | 84 | extern int early_cpu_to_node(int cpu); |
85 | extern cpumask_t *_node_to_cpumask_ptr(int node); | 85 | extern const cpumask_t *_node_to_cpumask_ptr(int node); |
86 | extern cpumask_t node_to_cpumask(int node); | 86 | extern cpumask_t node_to_cpumask(int node); |
87 | 87 | ||
88 | #else /* !CONFIG_DEBUG_PER_CPU_MAPS */ | 88 | #else /* !CONFIG_DEBUG_PER_CPU_MAPS */ |
@@ -103,7 +103,7 @@ static inline int early_cpu_to_node(int cpu) | |||
103 | } | 103 | } |
104 | 104 | ||
105 | /* Returns a pointer to the cpumask of CPUs on Node 'node'. */ | 105 | /* Returns a pointer to the cpumask of CPUs on Node 'node'. */ |
106 | static inline cpumask_t *_node_to_cpumask_ptr(int node) | 106 | static inline const cpumask_t *_node_to_cpumask_ptr(int node) |
107 | { | 107 | { |
108 | return &node_to_cpumask_map[node]; | 108 | return &node_to_cpumask_map[node]; |
109 | } | 109 | } |
@@ -118,7 +118,7 @@ static inline cpumask_t node_to_cpumask(int node) | |||
118 | 118 | ||
119 | /* Replace default node_to_cpumask_ptr with optimized version */ | 119 | /* Replace default node_to_cpumask_ptr with optimized version */ |
120 | #define node_to_cpumask_ptr(v, node) \ | 120 | #define node_to_cpumask_ptr(v, node) \ |
121 | cpumask_t *v = _node_to_cpumask_ptr(node) | 121 | const cpumask_t *v = _node_to_cpumask_ptr(node) |
122 | 122 | ||
123 | #define node_to_cpumask_ptr_next(v, node) \ | 123 | #define node_to_cpumask_ptr_next(v, node) \ |
124 | v = _node_to_cpumask_ptr(node) | 124 | v = _node_to_cpumask_ptr(node) |
@@ -186,7 +186,7 @@ extern int __node_distance(int, int); | |||
186 | #define cpu_to_node(cpu) 0 | 186 | #define cpu_to_node(cpu) 0 |
187 | #define early_cpu_to_node(cpu) 0 | 187 | #define early_cpu_to_node(cpu) 0 |
188 | 188 | ||
189 | static inline cpumask_t *_node_to_cpumask_ptr(int node) | 189 | static inline const cpumask_t *_node_to_cpumask_ptr(int node) |
190 | { | 190 | { |
191 | return &cpu_online_map; | 191 | return &cpu_online_map; |
192 | } | 192 | } |
@@ -201,7 +201,7 @@ static inline int node_to_first_cpu(int node) | |||
201 | 201 | ||
202 | /* Replace default node_to_cpumask_ptr with optimized version */ | 202 | /* Replace default node_to_cpumask_ptr with optimized version */ |
203 | #define node_to_cpumask_ptr(v, node) \ | 203 | #define node_to_cpumask_ptr(v, node) \ |
204 | cpumask_t *v = _node_to_cpumask_ptr(node) | 204 | const cpumask_t *v = _node_to_cpumask_ptr(node) |
205 | 205 | ||
206 | #define node_to_cpumask_ptr_next(v, node) \ | 206 | #define node_to_cpumask_ptr_next(v, node) \ |
207 | v = _node_to_cpumask_ptr(node) | 207 | v = _node_to_cpumask_ptr(node) |
diff --git a/include/asm-x86/tsc.h b/include/asm-x86/tsc.h index 548873ab5fc1..cb6f6ee45b8f 100644 --- a/include/asm-x86/tsc.h +++ b/include/asm-x86/tsc.h | |||
@@ -48,7 +48,6 @@ static __always_inline cycles_t vget_cycles(void) | |||
48 | extern void tsc_init(void); | 48 | extern void tsc_init(void); |
49 | extern void mark_tsc_unstable(char *reason); | 49 | extern void mark_tsc_unstable(char *reason); |
50 | extern int unsynchronized_tsc(void); | 50 | extern int unsynchronized_tsc(void); |
51 | extern void init_tsc_clocksource(void); | ||
52 | int check_tsc_unstable(void); | 51 | int check_tsc_unstable(void); |
53 | 52 | ||
54 | /* | 53 | /* |
@@ -58,7 +57,6 @@ int check_tsc_unstable(void); | |||
58 | extern void check_tsc_sync_source(int cpu); | 57 | extern void check_tsc_sync_source(int cpu); |
59 | extern void check_tsc_sync_target(void); | 58 | extern void check_tsc_sync_target(void); |
60 | 59 | ||
61 | extern void tsc_calibrate(void); | ||
62 | extern int notsc_setup(char *); | 60 | extern int notsc_setup(char *); |
63 | 61 | ||
64 | #endif | 62 | #endif |
diff --git a/include/asm-x86/uaccess.h b/include/asm-x86/uaccess.h index 9fefd2947e78..f6fa4d841bbc 100644 --- a/include/asm-x86/uaccess.h +++ b/include/asm-x86/uaccess.h | |||
@@ -1,5 +1,453 @@ | |||
1 | #ifndef _ASM_UACCES_H_ | ||
2 | #define _ASM_UACCES_H_ | ||
3 | /* | ||
4 | * User space memory access functions | ||
5 | */ | ||
6 | #include <linux/errno.h> | ||
7 | #include <linux/compiler.h> | ||
8 | #include <linux/thread_info.h> | ||
9 | #include <linux/prefetch.h> | ||
10 | #include <linux/string.h> | ||
11 | #include <asm/asm.h> | ||
12 | #include <asm/page.h> | ||
13 | |||
14 | #define VERIFY_READ 0 | ||
15 | #define VERIFY_WRITE 1 | ||
16 | |||
17 | /* | ||
18 | * The fs value determines whether argument validity checking should be | ||
19 | * performed or not. If get_fs() == USER_DS, checking is performed, with | ||
20 | * get_fs() == KERNEL_DS, checking is bypassed. | ||
21 | * | ||
22 | * For historical reasons, these macros are grossly misnamed. | ||
23 | */ | ||
24 | |||
25 | #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) | ||
26 | |||
27 | #define KERNEL_DS MAKE_MM_SEG(-1UL) | ||
28 | #define USER_DS MAKE_MM_SEG(PAGE_OFFSET) | ||
29 | |||
30 | #define get_ds() (KERNEL_DS) | ||
31 | #define get_fs() (current_thread_info()->addr_limit) | ||
32 | #define set_fs(x) (current_thread_info()->addr_limit = (x)) | ||
33 | |||
34 | #define segment_eq(a, b) ((a).seg == (b).seg) | ||
35 | |||
36 | #define __addr_ok(addr) \ | ||
37 | ((unsigned long __force)(addr) < \ | ||
38 | (current_thread_info()->addr_limit.seg)) | ||
39 | |||
40 | /* | ||
41 | * Test whether a block of memory is a valid user space address. | ||
42 | * Returns 0 if the range is valid, nonzero otherwise. | ||
43 | * | ||
44 | * This is equivalent to the following test: | ||
45 | * (u33)addr + (u33)size >= (u33)current->addr_limit.seg (u65 for x86_64) | ||
46 | * | ||
47 | * This needs 33-bit (65-bit for x86_64) arithmetic. We have a carry... | ||
48 | */ | ||
49 | |||
50 | #define __range_not_ok(addr, size) \ | ||
51 | ({ \ | ||
52 | unsigned long flag, roksum; \ | ||
53 | __chk_user_ptr(addr); \ | ||
54 | asm("add %3,%1 ; sbb %0,%0 ; cmp %1,%4 ; sbb $0,%0" \ | ||
55 | : "=&r" (flag), "=r" (roksum) \ | ||
56 | : "1" (addr), "g" ((long)(size)), \ | ||
57 | "rm" (current_thread_info()->addr_limit.seg)); \ | ||
58 | flag; \ | ||
59 | }) | ||
60 | |||
61 | /** | ||
62 | * access_ok: - Checks if a user space pointer is valid | ||
63 | * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE. Note that | ||
64 | * %VERIFY_WRITE is a superset of %VERIFY_READ - if it is safe | ||
65 | * to write to a block, it is always safe to read from it. | ||
66 | * @addr: User space pointer to start of block to check | ||
67 | * @size: Size of block to check | ||
68 | * | ||
69 | * Context: User context only. This function may sleep. | ||
70 | * | ||
71 | * Checks if a pointer to a block of memory in user space is valid. | ||
72 | * | ||
73 | * Returns true (nonzero) if the memory block may be valid, false (zero) | ||
74 | * if it is definitely invalid. | ||
75 | * | ||
76 | * Note that, depending on architecture, this function probably just | ||
77 | * checks that the pointer is in the user space range - after calling | ||
78 | * this function, memory access functions may still return -EFAULT. | ||
79 | */ | ||
80 | #define access_ok(type, addr, size) (likely(__range_not_ok(addr, size) == 0)) | ||
81 | |||
82 | /* | ||
83 | * The exception table consists of pairs of addresses: the first is the | ||
84 | * address of an instruction that is allowed to fault, and the second is | ||
85 | * the address at which the program should continue. No registers are | ||
86 | * modified, so it is entirely up to the continuation code to figure out | ||
87 | * what to do. | ||
88 | * | ||
89 | * All the routines below use bits of fixup code that are out of line | ||
90 | * with the main instruction path. This means when everything is well, | ||
91 | * we don't even have to jump over them. Further, they do not intrude | ||
92 | * on our cache or tlb entries. | ||
93 | */ | ||
94 | |||
95 | struct exception_table_entry { | ||
96 | unsigned long insn, fixup; | ||
97 | }; | ||
98 | |||
99 | extern int fixup_exception(struct pt_regs *regs); | ||
100 | |||
101 | /* | ||
102 | * These are the main single-value transfer routines. They automatically | ||
103 | * use the right size if we just have the right pointer type. | ||
104 | * | ||
105 | * This gets kind of ugly. We want to return _two_ values in "get_user()" | ||
106 | * and yet we don't want to do any pointers, because that is too much | ||
107 | * of a performance impact. Thus we have a few rather ugly macros here, | ||
108 | * and hide all the ugliness from the user. | ||
109 | * | ||
110 | * The "__xxx" versions of the user access functions are versions that | ||
111 | * do not verify the address space, that must have been done previously | ||
112 | * with a separate "access_ok()" call (this is used when we do multiple | ||
113 | * accesses to the same area of user memory). | ||
114 | */ | ||
115 | |||
116 | extern int __get_user_1(void); | ||
117 | extern int __get_user_2(void); | ||
118 | extern int __get_user_4(void); | ||
119 | extern int __get_user_8(void); | ||
120 | extern int __get_user_bad(void); | ||
121 | |||
122 | #define __get_user_x(size, ret, x, ptr) \ | ||
123 | asm volatile("call __get_user_" #size \ | ||
124 | : "=a" (ret),"=d" (x) \ | ||
125 | : "0" (ptr)) \ | ||
126 | |||
127 | /* Careful: we have to cast the result to the type of the pointer | ||
128 | * for sign reasons */ | ||
129 | |||
130 | /** | ||
131 | * get_user: - Get a simple variable from user space. | ||
132 | * @x: Variable to store result. | ||
133 | * @ptr: Source address, in user space. | ||
134 | * | ||
135 | * Context: User context only. This function may sleep. | ||
136 | * | ||
137 | * This macro copies a single simple variable from user space to kernel | ||
138 | * space. It supports simple types like char and int, but not larger | ||
139 | * data types like structures or arrays. | ||
140 | * | ||
141 | * @ptr must have pointer-to-simple-variable type, and the result of | ||
142 | * dereferencing @ptr must be assignable to @x without a cast. | ||
143 | * | ||
144 | * Returns zero on success, or -EFAULT on error. | ||
145 | * On error, the variable @x is set to zero. | ||
146 | */ | ||
147 | #ifdef CONFIG_X86_32 | ||
148 | #define __get_user_8(__ret_gu, __val_gu, ptr) \ | ||
149 | __get_user_x(X, __ret_gu, __val_gu, ptr) | ||
150 | #else | ||
151 | #define __get_user_8(__ret_gu, __val_gu, ptr) \ | ||
152 | __get_user_x(8, __ret_gu, __val_gu, ptr) | ||
153 | #endif | ||
154 | |||
155 | #define get_user(x, ptr) \ | ||
156 | ({ \ | ||
157 | int __ret_gu; \ | ||
158 | unsigned long __val_gu; \ | ||
159 | __chk_user_ptr(ptr); \ | ||
160 | switch (sizeof(*(ptr))) { \ | ||
161 | case 1: \ | ||
162 | __get_user_x(1, __ret_gu, __val_gu, ptr); \ | ||
163 | break; \ | ||
164 | case 2: \ | ||
165 | __get_user_x(2, __ret_gu, __val_gu, ptr); \ | ||
166 | break; \ | ||
167 | case 4: \ | ||
168 | __get_user_x(4, __ret_gu, __val_gu, ptr); \ | ||
169 | break; \ | ||
170 | case 8: \ | ||
171 | __get_user_8(__ret_gu, __val_gu, ptr); \ | ||
172 | break; \ | ||
173 | default: \ | ||
174 | __get_user_x(X, __ret_gu, __val_gu, ptr); \ | ||
175 | break; \ | ||
176 | } \ | ||
177 | (x) = (__typeof__(*(ptr)))__val_gu; \ | ||
178 | __ret_gu; \ | ||
179 | }) | ||
180 | |||
181 | #define __put_user_x(size, x, ptr, __ret_pu) \ | ||
182 | asm volatile("call __put_user_" #size : "=a" (__ret_pu) \ | ||
183 | :"0" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx") | ||
184 | |||
185 | |||
186 | |||
187 | #ifdef CONFIG_X86_32 | ||
188 | #define __put_user_u64(x, addr, err) \ | ||
189 | asm volatile("1: movl %%eax,0(%2)\n" \ | ||
190 | "2: movl %%edx,4(%2)\n" \ | ||
191 | "3:\n" \ | ||
192 | ".section .fixup,\"ax\"\n" \ | ||
193 | "4: movl %3,%0\n" \ | ||
194 | " jmp 3b\n" \ | ||
195 | ".previous\n" \ | ||
196 | _ASM_EXTABLE(1b, 4b) \ | ||
197 | _ASM_EXTABLE(2b, 4b) \ | ||
198 | : "=r" (err) \ | ||
199 | : "A" (x), "r" (addr), "i" (-EFAULT), "0" (err)) | ||
200 | |||
201 | #define __put_user_x8(x, ptr, __ret_pu) \ | ||
202 | asm volatile("call __put_user_8" : "=a" (__ret_pu) \ | ||
203 | : "A" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx") | ||
204 | #else | ||
205 | #define __put_user_u64(x, ptr, retval) \ | ||
206 | __put_user_asm(x, ptr, retval, "q", "", "Zr", -EFAULT) | ||
207 | #define __put_user_x8(x, ptr, __ret_pu) __put_user_x(8, x, ptr, __ret_pu) | ||
208 | #endif | ||
209 | |||
210 | extern void __put_user_bad(void); | ||
211 | |||
212 | /* | ||
213 | * Strange magic calling convention: pointer in %ecx, | ||
214 | * value in %eax(:%edx), return value in %eax. clobbers %rbx | ||
215 | */ | ||
216 | extern void __put_user_1(void); | ||
217 | extern void __put_user_2(void); | ||
218 | extern void __put_user_4(void); | ||
219 | extern void __put_user_8(void); | ||
220 | |||
221 | #ifdef CONFIG_X86_WP_WORKS_OK | ||
222 | |||
223 | /** | ||
224 | * put_user: - Write a simple value into user space. | ||
225 | * @x: Value to copy to user space. | ||
226 | * @ptr: Destination address, in user space. | ||
227 | * | ||
228 | * Context: User context only. This function may sleep. | ||
229 | * | ||
230 | * This macro copies a single simple value from kernel space to user | ||
231 | * space. It supports simple types like char and int, but not larger | ||
232 | * data types like structures or arrays. | ||
233 | * | ||
234 | * @ptr must have pointer-to-simple-variable type, and @x must be assignable | ||
235 | * to the result of dereferencing @ptr. | ||
236 | * | ||
237 | * Returns zero on success, or -EFAULT on error. | ||
238 | */ | ||
239 | #define put_user(x, ptr) \ | ||
240 | ({ \ | ||
241 | int __ret_pu; \ | ||
242 | __typeof__(*(ptr)) __pu_val; \ | ||
243 | __chk_user_ptr(ptr); \ | ||
244 | __pu_val = x; \ | ||
245 | switch (sizeof(*(ptr))) { \ | ||
246 | case 1: \ | ||
247 | __put_user_x(1, __pu_val, ptr, __ret_pu); \ | ||
248 | break; \ | ||
249 | case 2: \ | ||
250 | __put_user_x(2, __pu_val, ptr, __ret_pu); \ | ||
251 | break; \ | ||
252 | case 4: \ | ||
253 | __put_user_x(4, __pu_val, ptr, __ret_pu); \ | ||
254 | break; \ | ||
255 | case 8: \ | ||
256 | __put_user_x8(__pu_val, ptr, __ret_pu); \ | ||
257 | break; \ | ||
258 | default: \ | ||
259 | __put_user_x(X, __pu_val, ptr, __ret_pu); \ | ||
260 | break; \ | ||
261 | } \ | ||
262 | __ret_pu; \ | ||
263 | }) | ||
264 | |||
265 | #define __put_user_size(x, ptr, size, retval, errret) \ | ||
266 | do { \ | ||
267 | retval = 0; \ | ||
268 | __chk_user_ptr(ptr); \ | ||
269 | switch (size) { \ | ||
270 | case 1: \ | ||
271 | __put_user_asm(x, ptr, retval, "b", "b", "iq", errret); \ | ||
272 | break; \ | ||
273 | case 2: \ | ||
274 | __put_user_asm(x, ptr, retval, "w", "w", "ir", errret); \ | ||
275 | break; \ | ||
276 | case 4: \ | ||
277 | __put_user_asm(x, ptr, retval, "l", "k", "ir", errret);\ | ||
278 | break; \ | ||
279 | case 8: \ | ||
280 | __put_user_u64((__typeof__(*ptr))(x), ptr, retval); \ | ||
281 | break; \ | ||
282 | default: \ | ||
283 | __put_user_bad(); \ | ||
284 | } \ | ||
285 | } while (0) | ||
286 | |||
287 | #else | ||
288 | |||
289 | #define __put_user_size(x, ptr, size, retval, errret) \ | ||
290 | do { \ | ||
291 | __typeof__(*(ptr))__pus_tmp = x; \ | ||
292 | retval = 0; \ | ||
293 | \ | ||
294 | if (unlikely(__copy_to_user_ll(ptr, &__pus_tmp, size) != 0)) \ | ||
295 | retval = errret; \ | ||
296 | } while (0) | ||
297 | |||
298 | #define put_user(x, ptr) \ | ||
299 | ({ \ | ||
300 | int __ret_pu; \ | ||
301 | __typeof__(*(ptr))__pus_tmp = x; \ | ||
302 | __ret_pu = 0; \ | ||
303 | if (unlikely(__copy_to_user_ll(ptr, &__pus_tmp, \ | ||
304 | sizeof(*(ptr))) != 0)) \ | ||
305 | __ret_pu = -EFAULT; \ | ||
306 | __ret_pu; \ | ||
307 | }) | ||
308 | #endif | ||
309 | |||
310 | #ifdef CONFIG_X86_32 | ||
311 | #define __get_user_asm_u64(x, ptr, retval, errret) (x) = __get_user_bad() | ||
312 | #else | ||
313 | #define __get_user_asm_u64(x, ptr, retval, errret) \ | ||
314 | __get_user_asm(x, ptr, retval, "q", "", "=r", errret) | ||
315 | #endif | ||
316 | |||
317 | #define __get_user_size(x, ptr, size, retval, errret) \ | ||
318 | do { \ | ||
319 | retval = 0; \ | ||
320 | __chk_user_ptr(ptr); \ | ||
321 | switch (size) { \ | ||
322 | case 1: \ | ||
323 | __get_user_asm(x, ptr, retval, "b", "b", "=q", errret); \ | ||
324 | break; \ | ||
325 | case 2: \ | ||
326 | __get_user_asm(x, ptr, retval, "w", "w", "=r", errret); \ | ||
327 | break; \ | ||
328 | case 4: \ | ||
329 | __get_user_asm(x, ptr, retval, "l", "k", "=r", errret); \ | ||
330 | break; \ | ||
331 | case 8: \ | ||
332 | __get_user_asm_u64(x, ptr, retval, errret); \ | ||
333 | break; \ | ||
334 | default: \ | ||
335 | (x) = __get_user_bad(); \ | ||
336 | } \ | ||
337 | } while (0) | ||
338 | |||
339 | #define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \ | ||
340 | asm volatile("1: mov"itype" %2,%"rtype"1\n" \ | ||
341 | "2:\n" \ | ||
342 | ".section .fixup,\"ax\"\n" \ | ||
343 | "3: mov %3,%0\n" \ | ||
344 | " xor"itype" %"rtype"1,%"rtype"1\n" \ | ||
345 | " jmp 2b\n" \ | ||
346 | ".previous\n" \ | ||
347 | _ASM_EXTABLE(1b, 3b) \ | ||
348 | : "=r" (err), ltype(x) \ | ||
349 | : "m" (__m(addr)), "i" (errret), "0" (err)) | ||
350 | |||
351 | #define __put_user_nocheck(x, ptr, size) \ | ||
352 | ({ \ | ||
353 | long __pu_err; \ | ||
354 | __put_user_size((x), (ptr), (size), __pu_err, -EFAULT); \ | ||
355 | __pu_err; \ | ||
356 | }) | ||
357 | |||
358 | #define __get_user_nocheck(x, ptr, size) \ | ||
359 | ({ \ | ||
360 | long __gu_err; \ | ||
361 | unsigned long __gu_val; \ | ||
362 | __get_user_size(__gu_val, (ptr), (size), __gu_err, -EFAULT); \ | ||
363 | (x) = (__force __typeof__(*(ptr)))__gu_val; \ | ||
364 | __gu_err; \ | ||
365 | }) | ||
366 | |||
367 | /* FIXME: this hack is definitely wrong -AK */ | ||
368 | struct __large_struct { unsigned long buf[100]; }; | ||
369 | #define __m(x) (*(struct __large_struct __user *)(x)) | ||
370 | |||
371 | /* | ||
372 | * Tell gcc we read from memory instead of writing: this is because | ||
373 | * we do not write to any memory gcc knows about, so there are no | ||
374 | * aliasing issues. | ||
375 | */ | ||
376 | #define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \ | ||
377 | asm volatile("1: mov"itype" %"rtype"1,%2\n" \ | ||
378 | "2:\n" \ | ||
379 | ".section .fixup,\"ax\"\n" \ | ||
380 | "3: mov %3,%0\n" \ | ||
381 | " jmp 2b\n" \ | ||
382 | ".previous\n" \ | ||
383 | _ASM_EXTABLE(1b, 3b) \ | ||
384 | : "=r"(err) \ | ||
385 | : ltype(x), "m" (__m(addr)), "i" (errret), "0" (err)) | ||
386 | /** | ||
387 | * __get_user: - Get a simple variable from user space, with less checking. | ||
388 | * @x: Variable to store result. | ||
389 | * @ptr: Source address, in user space. | ||
390 | * | ||
391 | * Context: User context only. This function may sleep. | ||
392 | * | ||
393 | * This macro copies a single simple variable from user space to kernel | ||
394 | * space. It supports simple types like char and int, but not larger | ||
395 | * data types like structures or arrays. | ||
396 | * | ||
397 | * @ptr must have pointer-to-simple-variable type, and the result of | ||
398 | * dereferencing @ptr must be assignable to @x without a cast. | ||
399 | * | ||
400 | * Caller must check the pointer with access_ok() before calling this | ||
401 | * function. | ||
402 | * | ||
403 | * Returns zero on success, or -EFAULT on error. | ||
404 | * On error, the variable @x is set to zero. | ||
405 | */ | ||
406 | |||
407 | #define __get_user(x, ptr) \ | ||
408 | __get_user_nocheck((x), (ptr), sizeof(*(ptr))) | ||
409 | /** | ||
410 | * __put_user: - Write a simple value into user space, with less checking. | ||
411 | * @x: Value to copy to user space. | ||
412 | * @ptr: Destination address, in user space. | ||
413 | * | ||
414 | * Context: User context only. This function may sleep. | ||
415 | * | ||
416 | * This macro copies a single simple value from kernel space to user | ||
417 | * space. It supports simple types like char and int, but not larger | ||
418 | * data types like structures or arrays. | ||
419 | * | ||
420 | * @ptr must have pointer-to-simple-variable type, and @x must be assignable | ||
421 | * to the result of dereferencing @ptr. | ||
422 | * | ||
423 | * Caller must check the pointer with access_ok() before calling this | ||
424 | * function. | ||
425 | * | ||
426 | * Returns zero on success, or -EFAULT on error. | ||
427 | */ | ||
428 | |||
429 | #define __put_user(x, ptr) \ | ||
430 | __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) | ||
431 | |||
432 | #define __get_user_unaligned __get_user | ||
433 | #define __put_user_unaligned __put_user | ||
434 | |||
435 | /* | ||
436 | * movsl can be slow when source and dest are not both 8-byte aligned | ||
437 | */ | ||
438 | #ifdef CONFIG_X86_INTEL_USERCOPY | ||
439 | extern struct movsl_mask { | ||
440 | int mask; | ||
441 | } ____cacheline_aligned_in_smp movsl_mask; | ||
442 | #endif | ||
443 | |||
444 | #define ARCH_HAS_NOCACHE_UACCESS 1 | ||
445 | |||
1 | #ifdef CONFIG_X86_32 | 446 | #ifdef CONFIG_X86_32 |
2 | # include "uaccess_32.h" | 447 | # include "uaccess_32.h" |
3 | #else | 448 | #else |
449 | # define ARCH_HAS_SEARCH_EXTABLE | ||
4 | # include "uaccess_64.h" | 450 | # include "uaccess_64.h" |
5 | #endif | 451 | #endif |
452 | |||
453 | #endif | ||
diff --git a/include/asm-x86/uaccess_32.h b/include/asm-x86/uaccess_32.h index 8e7595c1f34e..6fdef39a0bcb 100644 --- a/include/asm-x86/uaccess_32.h +++ b/include/asm-x86/uaccess_32.h | |||
@@ -11,426 +11,6 @@ | |||
11 | #include <asm/asm.h> | 11 | #include <asm/asm.h> |
12 | #include <asm/page.h> | 12 | #include <asm/page.h> |
13 | 13 | ||
14 | #define VERIFY_READ 0 | ||
15 | #define VERIFY_WRITE 1 | ||
16 | |||
17 | /* | ||
18 | * The fs value determines whether argument validity checking should be | ||
19 | * performed or not. If get_fs() == USER_DS, checking is performed, with | ||
20 | * get_fs() == KERNEL_DS, checking is bypassed. | ||
21 | * | ||
22 | * For historical reasons, these macros are grossly misnamed. | ||
23 | */ | ||
24 | |||
25 | #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) | ||
26 | |||
27 | |||
28 | #define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFFUL) | ||
29 | #define USER_DS MAKE_MM_SEG(PAGE_OFFSET) | ||
30 | |||
31 | #define get_ds() (KERNEL_DS) | ||
32 | #define get_fs() (current_thread_info()->addr_limit) | ||
33 | #define set_fs(x) (current_thread_info()->addr_limit = (x)) | ||
34 | |||
35 | #define segment_eq(a, b) ((a).seg == (b).seg) | ||
36 | |||
37 | /* | ||
38 | * movsl can be slow when source and dest are not both 8-byte aligned | ||
39 | */ | ||
40 | #ifdef CONFIG_X86_INTEL_USERCOPY | ||
41 | extern struct movsl_mask { | ||
42 | int mask; | ||
43 | } ____cacheline_aligned_in_smp movsl_mask; | ||
44 | #endif | ||
45 | |||
46 | #define __addr_ok(addr) \ | ||
47 | ((unsigned long __force)(addr) < \ | ||
48 | (current_thread_info()->addr_limit.seg)) | ||
49 | |||
50 | /* | ||
51 | * Test whether a block of memory is a valid user space address. | ||
52 | * Returns 0 if the range is valid, nonzero otherwise. | ||
53 | * | ||
54 | * This is equivalent to the following test: | ||
55 | * (u33)addr + (u33)size >= (u33)current->addr_limit.seg | ||
56 | * | ||
57 | * This needs 33-bit arithmetic. We have a carry... | ||
58 | */ | ||
59 | #define __range_ok(addr, size) \ | ||
60 | ({ \ | ||
61 | unsigned long flag, roksum; \ | ||
62 | __chk_user_ptr(addr); \ | ||
63 | asm("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0" \ | ||
64 | :"=&r" (flag), "=r" (roksum) \ | ||
65 | :"1" (addr), "g" ((int)(size)), \ | ||
66 | "rm" (current_thread_info()->addr_limit.seg)); \ | ||
67 | flag; \ | ||
68 | }) | ||
69 | |||
70 | /** | ||
71 | * access_ok: - Checks if a user space pointer is valid | ||
72 | * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE. Note that | ||
73 | * %VERIFY_WRITE is a superset of %VERIFY_READ - if it is safe | ||
74 | * to write to a block, it is always safe to read from it. | ||
75 | * @addr: User space pointer to start of block to check | ||
76 | * @size: Size of block to check | ||
77 | * | ||
78 | * Context: User context only. This function may sleep. | ||
79 | * | ||
80 | * Checks if a pointer to a block of memory in user space is valid. | ||
81 | * | ||
82 | * Returns true (nonzero) if the memory block may be valid, false (zero) | ||
83 | * if it is definitely invalid. | ||
84 | * | ||
85 | * Note that, depending on architecture, this function probably just | ||
86 | * checks that the pointer is in the user space range - after calling | ||
87 | * this function, memory access functions may still return -EFAULT. | ||
88 | */ | ||
89 | #define access_ok(type, addr, size) (likely(__range_ok(addr, size) == 0)) | ||
90 | |||
91 | /* | ||
92 | * The exception table consists of pairs of addresses: the first is the | ||
93 | * address of an instruction that is allowed to fault, and the second is | ||
94 | * the address at which the program should continue. No registers are | ||
95 | * modified, so it is entirely up to the continuation code to figure out | ||
96 | * what to do. | ||
97 | * | ||
98 | * All the routines below use bits of fixup code that are out of line | ||
99 | * with the main instruction path. This means when everything is well, | ||
100 | * we don't even have to jump over them. Further, they do not intrude | ||
101 | * on our cache or tlb entries. | ||
102 | */ | ||
103 | |||
104 | struct exception_table_entry { | ||
105 | unsigned long insn, fixup; | ||
106 | }; | ||
107 | |||
108 | extern int fixup_exception(struct pt_regs *regs); | ||
109 | |||
110 | /* | ||
111 | * These are the main single-value transfer routines. They automatically | ||
112 | * use the right size if we just have the right pointer type. | ||
113 | * | ||
114 | * This gets kind of ugly. We want to return _two_ values in "get_user()" | ||
115 | * and yet we don't want to do any pointers, because that is too much | ||
116 | * of a performance impact. Thus we have a few rather ugly macros here, | ||
117 | * and hide all the ugliness from the user. | ||
118 | * | ||
119 | * The "__xxx" versions of the user access functions are versions that | ||
120 | * do not verify the address space, that must have been done previously | ||
121 | * with a separate "access_ok()" call (this is used when we do multiple | ||
122 | * accesses to the same area of user memory). | ||
123 | */ | ||
124 | |||
125 | extern void __get_user_1(void); | ||
126 | extern void __get_user_2(void); | ||
127 | extern void __get_user_4(void); | ||
128 | |||
129 | #define __get_user_x(size, ret, x, ptr) \ | ||
130 | asm volatile("call __get_user_" #size \ | ||
131 | :"=a" (ret),"=d" (x) \ | ||
132 | :"0" (ptr)) | ||
133 | |||
134 | |||
135 | /* Careful: we have to cast the result to the type of the pointer | ||
136 | * for sign reasons */ | ||
137 | |||
138 | /** | ||
139 | * get_user: - Get a simple variable from user space. | ||
140 | * @x: Variable to store result. | ||
141 | * @ptr: Source address, in user space. | ||
142 | * | ||
143 | * Context: User context only. This function may sleep. | ||
144 | * | ||
145 | * This macro copies a single simple variable from user space to kernel | ||
146 | * space. It supports simple types like char and int, but not larger | ||
147 | * data types like structures or arrays. | ||
148 | * | ||
149 | * @ptr must have pointer-to-simple-variable type, and the result of | ||
150 | * dereferencing @ptr must be assignable to @x without a cast. | ||
151 | * | ||
152 | * Returns zero on success, or -EFAULT on error. | ||
153 | * On error, the variable @x is set to zero. | ||
154 | */ | ||
155 | #define get_user(x, ptr) \ | ||
156 | ({ \ | ||
157 | int __ret_gu; \ | ||
158 | unsigned long __val_gu; \ | ||
159 | __chk_user_ptr(ptr); \ | ||
160 | switch (sizeof(*(ptr))) { \ | ||
161 | case 1: \ | ||
162 | __get_user_x(1, __ret_gu, __val_gu, ptr); \ | ||
163 | break; \ | ||
164 | case 2: \ | ||
165 | __get_user_x(2, __ret_gu, __val_gu, ptr); \ | ||
166 | break; \ | ||
167 | case 4: \ | ||
168 | __get_user_x(4, __ret_gu, __val_gu, ptr); \ | ||
169 | break; \ | ||
170 | default: \ | ||
171 | __get_user_x(X, __ret_gu, __val_gu, ptr); \ | ||
172 | break; \ | ||
173 | } \ | ||
174 | (x) = (__typeof__(*(ptr)))__val_gu; \ | ||
175 | __ret_gu; \ | ||
176 | }) | ||
177 | |||
178 | extern void __put_user_bad(void); | ||
179 | |||
180 | /* | ||
181 | * Strange magic calling convention: pointer in %ecx, | ||
182 | * value in %eax(:%edx), return value in %eax, no clobbers. | ||
183 | */ | ||
184 | extern void __put_user_1(void); | ||
185 | extern void __put_user_2(void); | ||
186 | extern void __put_user_4(void); | ||
187 | extern void __put_user_8(void); | ||
188 | |||
189 | #define __put_user_1(x, ptr) \ | ||
190 | asm volatile("call __put_user_1" : "=a" (__ret_pu) \ | ||
191 | : "0" ((typeof(*(ptr)))(x)), "c" (ptr)) | ||
192 | |||
193 | #define __put_user_2(x, ptr) \ | ||
194 | asm volatile("call __put_user_2" : "=a" (__ret_pu) \ | ||
195 | : "0" ((typeof(*(ptr)))(x)), "c" (ptr)) | ||
196 | |||
197 | #define __put_user_4(x, ptr) \ | ||
198 | asm volatile("call __put_user_4" : "=a" (__ret_pu) \ | ||
199 | : "0" ((typeof(*(ptr)))(x)), "c" (ptr)) | ||
200 | |||
201 | #define __put_user_8(x, ptr) \ | ||
202 | asm volatile("call __put_user_8" : "=a" (__ret_pu) \ | ||
203 | : "A" ((typeof(*(ptr)))(x)), "c" (ptr)) | ||
204 | |||
205 | #define __put_user_X(x, ptr) \ | ||
206 | asm volatile("call __put_user_X" : "=a" (__ret_pu) \ | ||
207 | : "c" (ptr)) | ||
208 | |||
209 | /** | ||
210 | * put_user: - Write a simple value into user space. | ||
211 | * @x: Value to copy to user space. | ||
212 | * @ptr: Destination address, in user space. | ||
213 | * | ||
214 | * Context: User context only. This function may sleep. | ||
215 | * | ||
216 | * This macro copies a single simple value from kernel space to user | ||
217 | * space. It supports simple types like char and int, but not larger | ||
218 | * data types like structures or arrays. | ||
219 | * | ||
220 | * @ptr must have pointer-to-simple-variable type, and @x must be assignable | ||
221 | * to the result of dereferencing @ptr. | ||
222 | * | ||
223 | * Returns zero on success, or -EFAULT on error. | ||
224 | */ | ||
225 | #ifdef CONFIG_X86_WP_WORKS_OK | ||
226 | |||
227 | #define put_user(x, ptr) \ | ||
228 | ({ \ | ||
229 | int __ret_pu; \ | ||
230 | __typeof__(*(ptr)) __pu_val; \ | ||
231 | __chk_user_ptr(ptr); \ | ||
232 | __pu_val = x; \ | ||
233 | switch (sizeof(*(ptr))) { \ | ||
234 | case 1: \ | ||
235 | __put_user_1(__pu_val, ptr); \ | ||
236 | break; \ | ||
237 | case 2: \ | ||
238 | __put_user_2(__pu_val, ptr); \ | ||
239 | break; \ | ||
240 | case 4: \ | ||
241 | __put_user_4(__pu_val, ptr); \ | ||
242 | break; \ | ||
243 | case 8: \ | ||
244 | __put_user_8(__pu_val, ptr); \ | ||
245 | break; \ | ||
246 | default: \ | ||
247 | __put_user_X(__pu_val, ptr); \ | ||
248 | break; \ | ||
249 | } \ | ||
250 | __ret_pu; \ | ||
251 | }) | ||
252 | |||
253 | #else | ||
254 | #define put_user(x, ptr) \ | ||
255 | ({ \ | ||
256 | int __ret_pu; \ | ||
257 | __typeof__(*(ptr))__pus_tmp = x; \ | ||
258 | __ret_pu = 0; \ | ||
259 | if (unlikely(__copy_to_user_ll(ptr, &__pus_tmp, \ | ||
260 | sizeof(*(ptr))) != 0)) \ | ||
261 | __ret_pu = -EFAULT; \ | ||
262 | __ret_pu; \ | ||
263 | }) | ||
264 | |||
265 | |||
266 | #endif | ||
267 | |||
268 | /** | ||
269 | * __get_user: - Get a simple variable from user space, with less checking. | ||
270 | * @x: Variable to store result. | ||
271 | * @ptr: Source address, in user space. | ||
272 | * | ||
273 | * Context: User context only. This function may sleep. | ||
274 | * | ||
275 | * This macro copies a single simple variable from user space to kernel | ||
276 | * space. It supports simple types like char and int, but not larger | ||
277 | * data types like structures or arrays. | ||
278 | * | ||
279 | * @ptr must have pointer-to-simple-variable type, and the result of | ||
280 | * dereferencing @ptr must be assignable to @x without a cast. | ||
281 | * | ||
282 | * Caller must check the pointer with access_ok() before calling this | ||
283 | * function. | ||
284 | * | ||
285 | * Returns zero on success, or -EFAULT on error. | ||
286 | * On error, the variable @x is set to zero. | ||
287 | */ | ||
288 | #define __get_user(x, ptr) \ | ||
289 | __get_user_nocheck((x), (ptr), sizeof(*(ptr))) | ||
290 | |||
291 | |||
292 | /** | ||
293 | * __put_user: - Write a simple value into user space, with less checking. | ||
294 | * @x: Value to copy to user space. | ||
295 | * @ptr: Destination address, in user space. | ||
296 | * | ||
297 | * Context: User context only. This function may sleep. | ||
298 | * | ||
299 | * This macro copies a single simple value from kernel space to user | ||
300 | * space. It supports simple types like char and int, but not larger | ||
301 | * data types like structures or arrays. | ||
302 | * | ||
303 | * @ptr must have pointer-to-simple-variable type, and @x must be assignable | ||
304 | * to the result of dereferencing @ptr. | ||
305 | * | ||
306 | * Caller must check the pointer with access_ok() before calling this | ||
307 | * function. | ||
308 | * | ||
309 | * Returns zero on success, or -EFAULT on error. | ||
310 | */ | ||
311 | #define __put_user(x, ptr) \ | ||
312 | __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) | ||
313 | |||
314 | #define __put_user_nocheck(x, ptr, size) \ | ||
315 | ({ \ | ||
316 | long __pu_err; \ | ||
317 | __put_user_size((x), (ptr), (size), __pu_err, -EFAULT); \ | ||
318 | __pu_err; \ | ||
319 | }) | ||
320 | |||
321 | |||
322 | #define __put_user_u64(x, addr, err) \ | ||
323 | asm volatile("1: movl %%eax,0(%2)\n" \ | ||
324 | "2: movl %%edx,4(%2)\n" \ | ||
325 | "3:\n" \ | ||
326 | ".section .fixup,\"ax\"\n" \ | ||
327 | "4: movl %3,%0\n" \ | ||
328 | " jmp 3b\n" \ | ||
329 | ".previous\n" \ | ||
330 | _ASM_EXTABLE(1b, 4b) \ | ||
331 | _ASM_EXTABLE(2b, 4b) \ | ||
332 | : "=r" (err) \ | ||
333 | : "A" (x), "r" (addr), "i" (-EFAULT), "0" (err)) | ||
334 | |||
335 | #ifdef CONFIG_X86_WP_WORKS_OK | ||
336 | |||
337 | #define __put_user_size(x, ptr, size, retval, errret) \ | ||
338 | do { \ | ||
339 | retval = 0; \ | ||
340 | __chk_user_ptr(ptr); \ | ||
341 | switch (size) { \ | ||
342 | case 1: \ | ||
343 | __put_user_asm(x, ptr, retval, "b", "b", "iq", errret); \ | ||
344 | break; \ | ||
345 | case 2: \ | ||
346 | __put_user_asm(x, ptr, retval, "w", "w", "ir", errret); \ | ||
347 | break; \ | ||
348 | case 4: \ | ||
349 | __put_user_asm(x, ptr, retval, "l", "", "ir", errret); \ | ||
350 | break; \ | ||
351 | case 8: \ | ||
352 | __put_user_u64((__typeof__(*ptr))(x), ptr, retval); \ | ||
353 | break; \ | ||
354 | default: \ | ||
355 | __put_user_bad(); \ | ||
356 | } \ | ||
357 | } while (0) | ||
358 | |||
359 | #else | ||
360 | |||
361 | #define __put_user_size(x, ptr, size, retval, errret) \ | ||
362 | do { \ | ||
363 | __typeof__(*(ptr))__pus_tmp = x; \ | ||
364 | retval = 0; \ | ||
365 | \ | ||
366 | if (unlikely(__copy_to_user_ll(ptr, &__pus_tmp, size) != 0)) \ | ||
367 | retval = errret; \ | ||
368 | } while (0) | ||
369 | |||
370 | #endif | ||
371 | struct __large_struct { unsigned long buf[100]; }; | ||
372 | #define __m(x) (*(struct __large_struct __user *)(x)) | ||
373 | |||
374 | /* | ||
375 | * Tell gcc we read from memory instead of writing: this is because | ||
376 | * we do not write to any memory gcc knows about, so there are no | ||
377 | * aliasing issues. | ||
378 | */ | ||
379 | #define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \ | ||
380 | asm volatile("1: mov"itype" %"rtype"1,%2\n" \ | ||
381 | "2:\n" \ | ||
382 | ".section .fixup,\"ax\"\n" \ | ||
383 | "3: movl %3,%0\n" \ | ||
384 | " jmp 2b\n" \ | ||
385 | ".previous\n" \ | ||
386 | _ASM_EXTABLE(1b, 3b) \ | ||
387 | : "=r"(err) \ | ||
388 | : ltype (x), "m" (__m(addr)), "i" (errret), "0" (err)) | ||
389 | |||
390 | |||
391 | #define __get_user_nocheck(x, ptr, size) \ | ||
392 | ({ \ | ||
393 | long __gu_err; \ | ||
394 | unsigned long __gu_val; \ | ||
395 | __get_user_size(__gu_val, (ptr), (size), __gu_err, -EFAULT); \ | ||
396 | (x) = (__typeof__(*(ptr)))__gu_val; \ | ||
397 | __gu_err; \ | ||
398 | }) | ||
399 | |||
400 | extern long __get_user_bad(void); | ||
401 | |||
402 | #define __get_user_size(x, ptr, size, retval, errret) \ | ||
403 | do { \ | ||
404 | retval = 0; \ | ||
405 | __chk_user_ptr(ptr); \ | ||
406 | switch (size) { \ | ||
407 | case 1: \ | ||
408 | __get_user_asm(x, ptr, retval, "b", "b", "=q", errret); \ | ||
409 | break; \ | ||
410 | case 2: \ | ||
411 | __get_user_asm(x, ptr, retval, "w", "w", "=r", errret); \ | ||
412 | break; \ | ||
413 | case 4: \ | ||
414 | __get_user_asm(x, ptr, retval, "l", "", "=r", errret); \ | ||
415 | break; \ | ||
416 | default: \ | ||
417 | (x) = __get_user_bad(); \ | ||
418 | } \ | ||
419 | } while (0) | ||
420 | |||
421 | #define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \ | ||
422 | asm volatile("1: mov"itype" %2,%"rtype"1\n" \ | ||
423 | "2:\n" \ | ||
424 | ".section .fixup,\"ax\"\n" \ | ||
425 | "3: movl %3,%0\n" \ | ||
426 | " xor"itype" %"rtype"1,%"rtype"1\n" \ | ||
427 | " jmp 2b\n" \ | ||
428 | ".previous\n" \ | ||
429 | _ASM_EXTABLE(1b, 3b) \ | ||
430 | : "=r" (err), ltype (x) \ | ||
431 | : "m" (__m(addr)), "i" (errret), "0" (err)) | ||
432 | |||
433 | |||
434 | unsigned long __must_check __copy_to_user_ll | 14 | unsigned long __must_check __copy_to_user_ll |
435 | (void __user *to, const void *from, unsigned long n); | 15 | (void __user *to, const void *from, unsigned long n); |
436 | unsigned long __must_check __copy_from_user_ll | 16 | unsigned long __must_check __copy_from_user_ll |
@@ -576,8 +156,6 @@ __copy_from_user(void *to, const void __user *from, unsigned long n) | |||
576 | return __copy_from_user_ll(to, from, n); | 156 | return __copy_from_user_ll(to, from, n); |
577 | } | 157 | } |
578 | 158 | ||
579 | #define ARCH_HAS_NOCACHE_UACCESS | ||
580 | |||
581 | static __always_inline unsigned long __copy_from_user_nocache(void *to, | 159 | static __always_inline unsigned long __copy_from_user_nocache(void *to, |
582 | const void __user *from, unsigned long n) | 160 | const void __user *from, unsigned long n) |
583 | { | 161 | { |
diff --git a/include/asm-x86/uaccess_64.h b/include/asm-x86/uaccess_64.h index b8a2f4339903..515d4dce96b5 100644 --- a/include/asm-x86/uaccess_64.h +++ b/include/asm-x86/uaccess_64.h | |||
@@ -9,265 +9,6 @@ | |||
9 | #include <linux/prefetch.h> | 9 | #include <linux/prefetch.h> |
10 | #include <asm/page.h> | 10 | #include <asm/page.h> |
11 | 11 | ||
12 | #define VERIFY_READ 0 | ||
13 | #define VERIFY_WRITE 1 | ||
14 | |||
15 | /* | ||
16 | * The fs value determines whether argument validity checking should be | ||
17 | * performed or not. If get_fs() == USER_DS, checking is performed, with | ||
18 | * get_fs() == KERNEL_DS, checking is bypassed. | ||
19 | * | ||
20 | * For historical reasons, these macros are grossly misnamed. | ||
21 | */ | ||
22 | |||
23 | #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) | ||
24 | |||
25 | #define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFFFFFFFFFFUL) | ||
26 | #define USER_DS MAKE_MM_SEG(PAGE_OFFSET) | ||
27 | |||
28 | #define get_ds() (KERNEL_DS) | ||
29 | #define get_fs() (current_thread_info()->addr_limit) | ||
30 | #define set_fs(x) (current_thread_info()->addr_limit = (x)) | ||
31 | |||
32 | #define segment_eq(a, b) ((a).seg == (b).seg) | ||
33 | |||
34 | #define __addr_ok(addr) (!((unsigned long)(addr) & \ | ||
35 | (current_thread_info()->addr_limit.seg))) | ||
36 | |||
37 | /* | ||
38 | * Uhhuh, this needs 65-bit arithmetic. We have a carry.. | ||
39 | */ | ||
40 | #define __range_not_ok(addr, size) \ | ||
41 | ({ \ | ||
42 | unsigned long flag, roksum; \ | ||
43 | __chk_user_ptr(addr); \ | ||
44 | asm("# range_ok\n\r" \ | ||
45 | "addq %3,%1 ; sbbq %0,%0 ; cmpq %1,%4 ; sbbq $0,%0" \ | ||
46 | : "=&r" (flag), "=r" (roksum) \ | ||
47 | : "1" (addr), "g" ((long)(size)), \ | ||
48 | "g" (current_thread_info()->addr_limit.seg)); \ | ||
49 | flag; \ | ||
50 | }) | ||
51 | |||
52 | #define access_ok(type, addr, size) (__range_not_ok(addr, size) == 0) | ||
53 | |||
54 | /* | ||
55 | * The exception table consists of pairs of addresses: the first is the | ||
56 | * address of an instruction that is allowed to fault, and the second is | ||
57 | * the address at which the program should continue. No registers are | ||
58 | * modified, so it is entirely up to the continuation code to figure out | ||
59 | * what to do. | ||
60 | * | ||
61 | * All the routines below use bits of fixup code that are out of line | ||
62 | * with the main instruction path. This means when everything is well, | ||
63 | * we don't even have to jump over them. Further, they do not intrude | ||
64 | * on our cache or tlb entries. | ||
65 | */ | ||
66 | |||
67 | struct exception_table_entry { | ||
68 | unsigned long insn, fixup; | ||
69 | }; | ||
70 | |||
71 | extern int fixup_exception(struct pt_regs *regs); | ||
72 | |||
73 | #define ARCH_HAS_SEARCH_EXTABLE | ||
74 | |||
75 | /* | ||
76 | * These are the main single-value transfer routines. They automatically | ||
77 | * use the right size if we just have the right pointer type. | ||
78 | * | ||
79 | * This gets kind of ugly. We want to return _two_ values in "get_user()" | ||
80 | * and yet we don't want to do any pointers, because that is too much | ||
81 | * of a performance impact. Thus we have a few rather ugly macros here, | ||
82 | * and hide all the ugliness from the user. | ||
83 | * | ||
84 | * The "__xxx" versions of the user access functions are versions that | ||
85 | * do not verify the address space, that must have been done previously | ||
86 | * with a separate "access_ok()" call (this is used when we do multiple | ||
87 | * accesses to the same area of user memory). | ||
88 | */ | ||
89 | |||
90 | #define __get_user_x(size, ret, x, ptr) \ | ||
91 | asm volatile("call __get_user_" #size \ | ||
92 | : "=a" (ret),"=d" (x) \ | ||
93 | : "c" (ptr) \ | ||
94 | : "r8") | ||
95 | |||
96 | /* Careful: we have to cast the result to the type of the pointer | ||
97 | * for sign reasons */ | ||
98 | |||
99 | #define get_user(x, ptr) \ | ||
100 | ({ \ | ||
101 | unsigned long __val_gu; \ | ||
102 | int __ret_gu; \ | ||
103 | __chk_user_ptr(ptr); \ | ||
104 | switch (sizeof(*(ptr))) { \ | ||
105 | case 1: \ | ||
106 | __get_user_x(1, __ret_gu, __val_gu, ptr); \ | ||
107 | break; \ | ||
108 | case 2: \ | ||
109 | __get_user_x(2, __ret_gu, __val_gu, ptr); \ | ||
110 | break; \ | ||
111 | case 4: \ | ||
112 | __get_user_x(4, __ret_gu, __val_gu, ptr); \ | ||
113 | break; \ | ||
114 | case 8: \ | ||
115 | __get_user_x(8, __ret_gu, __val_gu, ptr); \ | ||
116 | break; \ | ||
117 | default: \ | ||
118 | __get_user_bad(); \ | ||
119 | break; \ | ||
120 | } \ | ||
121 | (x) = (__force typeof(*(ptr)))__val_gu; \ | ||
122 | __ret_gu; \ | ||
123 | }) | ||
124 | |||
125 | extern void __put_user_1(void); | ||
126 | extern void __put_user_2(void); | ||
127 | extern void __put_user_4(void); | ||
128 | extern void __put_user_8(void); | ||
129 | extern void __put_user_bad(void); | ||
130 | |||
131 | #define __put_user_x(size, ret, x, ptr) \ | ||
132 | asm volatile("call __put_user_" #size \ | ||
133 | :"=a" (ret) \ | ||
134 | :"c" (ptr),"d" (x) \ | ||
135 | :"r8") | ||
136 | |||
137 | #define put_user(x, ptr) \ | ||
138 | __put_user_check((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) | ||
139 | |||
140 | #define __get_user(x, ptr) \ | ||
141 | __get_user_nocheck((x), (ptr), sizeof(*(ptr))) | ||
142 | #define __put_user(x, ptr) \ | ||
143 | __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) | ||
144 | |||
145 | #define __get_user_unaligned __get_user | ||
146 | #define __put_user_unaligned __put_user | ||
147 | |||
148 | #define __put_user_nocheck(x, ptr, size) \ | ||
149 | ({ \ | ||
150 | int __pu_err; \ | ||
151 | __put_user_size((x), (ptr), (size), __pu_err); \ | ||
152 | __pu_err; \ | ||
153 | }) | ||
154 | |||
155 | |||
156 | #define __put_user_check(x, ptr, size) \ | ||
157 | ({ \ | ||
158 | int __pu_err; \ | ||
159 | typeof(*(ptr)) __user *__pu_addr = (ptr); \ | ||
160 | switch (size) { \ | ||
161 | case 1: \ | ||
162 | __put_user_x(1, __pu_err, x, __pu_addr); \ | ||
163 | break; \ | ||
164 | case 2: \ | ||
165 | __put_user_x(2, __pu_err, x, __pu_addr); \ | ||
166 | break; \ | ||
167 | case 4: \ | ||
168 | __put_user_x(4, __pu_err, x, __pu_addr); \ | ||
169 | break; \ | ||
170 | case 8: \ | ||
171 | __put_user_x(8, __pu_err, x, __pu_addr); \ | ||
172 | break; \ | ||
173 | default: \ | ||
174 | __put_user_bad(); \ | ||
175 | } \ | ||
176 | __pu_err; \ | ||
177 | }) | ||
178 | |||
179 | #define __put_user_size(x, ptr, size, retval) \ | ||
180 | do { \ | ||
181 | retval = 0; \ | ||
182 | __chk_user_ptr(ptr); \ | ||
183 | switch (size) { \ | ||
184 | case 1: \ | ||
185 | __put_user_asm(x, ptr, retval, "b", "b", "iq", -EFAULT);\ | ||
186 | break; \ | ||
187 | case 2: \ | ||
188 | __put_user_asm(x, ptr, retval, "w", "w", "ir", -EFAULT);\ | ||
189 | break; \ | ||
190 | case 4: \ | ||
191 | __put_user_asm(x, ptr, retval, "l", "k", "ir", -EFAULT);\ | ||
192 | break; \ | ||
193 | case 8: \ | ||
194 | __put_user_asm(x, ptr, retval, "q", "", "Zr", -EFAULT); \ | ||
195 | break; \ | ||
196 | default: \ | ||
197 | __put_user_bad(); \ | ||
198 | } \ | ||
199 | } while (0) | ||
200 | |||
201 | /* FIXME: this hack is definitely wrong -AK */ | ||
202 | struct __large_struct { unsigned long buf[100]; }; | ||
203 | #define __m(x) (*(struct __large_struct __user *)(x)) | ||
204 | |||
205 | /* | ||
206 | * Tell gcc we read from memory instead of writing: this is because | ||
207 | * we do not write to any memory gcc knows about, so there are no | ||
208 | * aliasing issues. | ||
209 | */ | ||
210 | #define __put_user_asm(x, addr, err, itype, rtype, ltype, errno) \ | ||
211 | asm volatile("1: mov"itype" %"rtype"1,%2\n" \ | ||
212 | "2:\n" \ | ||
213 | ".section .fixup, \"ax\"\n" \ | ||
214 | "3: mov %3,%0\n" \ | ||
215 | " jmp 2b\n" \ | ||
216 | ".previous\n" \ | ||
217 | _ASM_EXTABLE(1b, 3b) \ | ||
218 | : "=r"(err) \ | ||
219 | : ltype (x), "m" (__m(addr)), "i" (errno), "0" (err)) | ||
220 | |||
221 | |||
222 | #define __get_user_nocheck(x, ptr, size) \ | ||
223 | ({ \ | ||
224 | int __gu_err; \ | ||
225 | unsigned long __gu_val; \ | ||
226 | __get_user_size(__gu_val, (ptr), (size), __gu_err); \ | ||
227 | (x) = (__force typeof(*(ptr)))__gu_val; \ | ||
228 | __gu_err; \ | ||
229 | }) | ||
230 | |||
231 | extern int __get_user_1(void); | ||
232 | extern int __get_user_2(void); | ||
233 | extern int __get_user_4(void); | ||
234 | extern int __get_user_8(void); | ||
235 | extern int __get_user_bad(void); | ||
236 | |||
237 | #define __get_user_size(x, ptr, size, retval) \ | ||
238 | do { \ | ||
239 | retval = 0; \ | ||
240 | __chk_user_ptr(ptr); \ | ||
241 | switch (size) { \ | ||
242 | case 1: \ | ||
243 | __get_user_asm(x, ptr, retval, "b", "b", "=q", -EFAULT);\ | ||
244 | break; \ | ||
245 | case 2: \ | ||
246 | __get_user_asm(x, ptr, retval, "w", "w", "=r", -EFAULT);\ | ||
247 | break; \ | ||
248 | case 4: \ | ||
249 | __get_user_asm(x, ptr, retval, "l", "k", "=r", -EFAULT);\ | ||
250 | break; \ | ||
251 | case 8: \ | ||
252 | __get_user_asm(x, ptr, retval, "q", "", "=r", -EFAULT); \ | ||
253 | break; \ | ||
254 | default: \ | ||
255 | (x) = __get_user_bad(); \ | ||
256 | } \ | ||
257 | } while (0) | ||
258 | |||
259 | #define __get_user_asm(x, addr, err, itype, rtype, ltype, errno) \ | ||
260 | asm volatile("1: mov"itype" %2,%"rtype"1\n" \ | ||
261 | "2:\n" \ | ||
262 | ".section .fixup, \"ax\"\n" \ | ||
263 | "3: mov %3,%0\n" \ | ||
264 | " xor"itype" %"rtype"1,%"rtype"1\n" \ | ||
265 | " jmp 2b\n" \ | ||
266 | ".previous\n" \ | ||
267 | _ASM_EXTABLE(1b, 3b) \ | ||
268 | : "=r" (err), ltype (x) \ | ||
269 | : "m" (__m(addr)), "i"(errno), "0"(err)) | ||
270 | |||
271 | /* | 12 | /* |
272 | * Copy To/From Userspace | 13 | * Copy To/From Userspace |
273 | */ | 14 | */ |
@@ -437,7 +178,6 @@ __copy_to_user_inatomic(void __user *dst, const void *src, unsigned size) | |||
437 | return copy_user_generic((__force void *)dst, src, size); | 178 | return copy_user_generic((__force void *)dst, src, size); |
438 | } | 179 | } |
439 | 180 | ||
440 | #define ARCH_HAS_NOCACHE_UACCESS 1 | ||
441 | extern long __copy_user_nocache(void *dst, const void __user *src, | 181 | extern long __copy_user_nocache(void *dst, const void __user *src, |
442 | unsigned size, int zerorest); | 182 | unsigned size, int zerorest); |
443 | 183 | ||
@@ -455,4 +195,7 @@ static inline int __copy_from_user_inatomic_nocache(void *dst, | |||
455 | return __copy_user_nocache(dst, src, size, 0); | 195 | return __copy_user_nocache(dst, src, size, 0); |
456 | } | 196 | } |
457 | 197 | ||
198 | unsigned long | ||
199 | copy_user_handle_tail(char *to, char *from, unsigned len, unsigned zerorest); | ||
200 | |||
458 | #endif /* __X86_64_UACCESS_H */ | 201 | #endif /* __X86_64_UACCESS_H */ |
diff --git a/include/asm-x86/uv/uv_hub.h b/include/asm-x86/uv/uv_hub.h index 65004881de5f..a4ef26e5850b 100644 --- a/include/asm-x86/uv/uv_hub.h +++ b/include/asm-x86/uv/uv_hub.h | |||
@@ -149,6 +149,8 @@ DECLARE_PER_CPU(struct uv_hub_info_s, __uv_hub_info); | |||
149 | #define UV_LOCAL_MMR_BASE 0xf4000000UL | 149 | #define UV_LOCAL_MMR_BASE 0xf4000000UL |
150 | #define UV_GLOBAL_MMR32_BASE 0xf8000000UL | 150 | #define UV_GLOBAL_MMR32_BASE 0xf8000000UL |
151 | #define UV_GLOBAL_MMR64_BASE (uv_hub_info->global_mmr_base) | 151 | #define UV_GLOBAL_MMR64_BASE (uv_hub_info->global_mmr_base) |
152 | #define UV_LOCAL_MMR_SIZE (64UL * 1024 * 1024) | ||
153 | #define UV_GLOBAL_MMR32_SIZE (64UL * 1024 * 1024) | ||
152 | 154 | ||
153 | #define UV_GLOBAL_MMR32_PNODE_SHIFT 15 | 155 | #define UV_GLOBAL_MMR32_PNODE_SHIFT 15 |
154 | #define UV_GLOBAL_MMR64_PNODE_SHIFT 26 | 156 | #define UV_GLOBAL_MMR64_PNODE_SHIFT 26 |
diff --git a/include/asm-x86/uv/uv_mmrs.h b/include/asm-x86/uv/uv_mmrs.h index ac9846076521..151fd7fcb809 100644 --- a/include/asm-x86/uv/uv_mmrs.h +++ b/include/asm-x86/uv/uv_mmrs.h | |||
@@ -17,7 +17,7 @@ | |||
17 | /* UVH_BAU_DATA_CONFIG */ | 17 | /* UVH_BAU_DATA_CONFIG */ |
18 | /* ========================================================================= */ | 18 | /* ========================================================================= */ |
19 | #define UVH_BAU_DATA_CONFIG 0x61680UL | 19 | #define UVH_BAU_DATA_CONFIG 0x61680UL |
20 | #define UVH_BAU_DATA_CONFIG_32 0x0450 | 20 | #define UVH_BAU_DATA_CONFIG_32 0x0438 |
21 | 21 | ||
22 | #define UVH_BAU_DATA_CONFIG_VECTOR_SHFT 0 | 22 | #define UVH_BAU_DATA_CONFIG_VECTOR_SHFT 0 |
23 | #define UVH_BAU_DATA_CONFIG_VECTOR_MASK 0x00000000000000ffUL | 23 | #define UVH_BAU_DATA_CONFIG_VECTOR_MASK 0x00000000000000ffUL |
@@ -53,10 +53,248 @@ union uvh_bau_data_config_u { | |||
53 | }; | 53 | }; |
54 | 54 | ||
55 | /* ========================================================================= */ | 55 | /* ========================================================================= */ |
56 | /* UVH_EVENT_OCCURRED0 */ | ||
57 | /* ========================================================================= */ | ||
58 | #define UVH_EVENT_OCCURRED0 0x70000UL | ||
59 | #define UVH_EVENT_OCCURRED0_32 0x005e8 | ||
60 | |||
61 | #define UVH_EVENT_OCCURRED0_LB_HCERR_SHFT 0 | ||
62 | #define UVH_EVENT_OCCURRED0_LB_HCERR_MASK 0x0000000000000001UL | ||
63 | #define UVH_EVENT_OCCURRED0_GR0_HCERR_SHFT 1 | ||
64 | #define UVH_EVENT_OCCURRED0_GR0_HCERR_MASK 0x0000000000000002UL | ||
65 | #define UVH_EVENT_OCCURRED0_GR1_HCERR_SHFT 2 | ||
66 | #define UVH_EVENT_OCCURRED0_GR1_HCERR_MASK 0x0000000000000004UL | ||
67 | #define UVH_EVENT_OCCURRED0_LH_HCERR_SHFT 3 | ||
68 | #define UVH_EVENT_OCCURRED0_LH_HCERR_MASK 0x0000000000000008UL | ||
69 | #define UVH_EVENT_OCCURRED0_RH_HCERR_SHFT 4 | ||
70 | #define UVH_EVENT_OCCURRED0_RH_HCERR_MASK 0x0000000000000010UL | ||
71 | #define UVH_EVENT_OCCURRED0_XN_HCERR_SHFT 5 | ||
72 | #define UVH_EVENT_OCCURRED0_XN_HCERR_MASK 0x0000000000000020UL | ||
73 | #define UVH_EVENT_OCCURRED0_SI_HCERR_SHFT 6 | ||
74 | #define UVH_EVENT_OCCURRED0_SI_HCERR_MASK 0x0000000000000040UL | ||
75 | #define UVH_EVENT_OCCURRED0_LB_AOERR0_SHFT 7 | ||
76 | #define UVH_EVENT_OCCURRED0_LB_AOERR0_MASK 0x0000000000000080UL | ||
77 | #define UVH_EVENT_OCCURRED0_GR0_AOERR0_SHFT 8 | ||
78 | #define UVH_EVENT_OCCURRED0_GR0_AOERR0_MASK 0x0000000000000100UL | ||
79 | #define UVH_EVENT_OCCURRED0_GR1_AOERR0_SHFT 9 | ||
80 | #define UVH_EVENT_OCCURRED0_GR1_AOERR0_MASK 0x0000000000000200UL | ||
81 | #define UVH_EVENT_OCCURRED0_LH_AOERR0_SHFT 10 | ||
82 | #define UVH_EVENT_OCCURRED0_LH_AOERR0_MASK 0x0000000000000400UL | ||
83 | #define UVH_EVENT_OCCURRED0_RH_AOERR0_SHFT 11 | ||
84 | #define UVH_EVENT_OCCURRED0_RH_AOERR0_MASK 0x0000000000000800UL | ||
85 | #define UVH_EVENT_OCCURRED0_XN_AOERR0_SHFT 12 | ||
86 | #define UVH_EVENT_OCCURRED0_XN_AOERR0_MASK 0x0000000000001000UL | ||
87 | #define UVH_EVENT_OCCURRED0_SI_AOERR0_SHFT 13 | ||
88 | #define UVH_EVENT_OCCURRED0_SI_AOERR0_MASK 0x0000000000002000UL | ||
89 | #define UVH_EVENT_OCCURRED0_LB_AOERR1_SHFT 14 | ||
90 | #define UVH_EVENT_OCCURRED0_LB_AOERR1_MASK 0x0000000000004000UL | ||
91 | #define UVH_EVENT_OCCURRED0_GR0_AOERR1_SHFT 15 | ||
92 | #define UVH_EVENT_OCCURRED0_GR0_AOERR1_MASK 0x0000000000008000UL | ||
93 | #define UVH_EVENT_OCCURRED0_GR1_AOERR1_SHFT 16 | ||
94 | #define UVH_EVENT_OCCURRED0_GR1_AOERR1_MASK 0x0000000000010000UL | ||
95 | #define UVH_EVENT_OCCURRED0_LH_AOERR1_SHFT 17 | ||
96 | #define UVH_EVENT_OCCURRED0_LH_AOERR1_MASK 0x0000000000020000UL | ||
97 | #define UVH_EVENT_OCCURRED0_RH_AOERR1_SHFT 18 | ||
98 | #define UVH_EVENT_OCCURRED0_RH_AOERR1_MASK 0x0000000000040000UL | ||
99 | #define UVH_EVENT_OCCURRED0_XN_AOERR1_SHFT 19 | ||
100 | #define UVH_EVENT_OCCURRED0_XN_AOERR1_MASK 0x0000000000080000UL | ||
101 | #define UVH_EVENT_OCCURRED0_SI_AOERR1_SHFT 20 | ||
102 | #define UVH_EVENT_OCCURRED0_SI_AOERR1_MASK 0x0000000000100000UL | ||
103 | #define UVH_EVENT_OCCURRED0_RH_VPI_INT_SHFT 21 | ||
104 | #define UVH_EVENT_OCCURRED0_RH_VPI_INT_MASK 0x0000000000200000UL | ||
105 | #define UVH_EVENT_OCCURRED0_SYSTEM_SHUTDOWN_INT_SHFT 22 | ||
106 | #define UVH_EVENT_OCCURRED0_SYSTEM_SHUTDOWN_INT_MASK 0x0000000000400000UL | ||
107 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_0_SHFT 23 | ||
108 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_0_MASK 0x0000000000800000UL | ||
109 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_1_SHFT 24 | ||
110 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_1_MASK 0x0000000001000000UL | ||
111 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_2_SHFT 25 | ||
112 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_2_MASK 0x0000000002000000UL | ||
113 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_3_SHFT 26 | ||
114 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_3_MASK 0x0000000004000000UL | ||
115 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_4_SHFT 27 | ||
116 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_4_MASK 0x0000000008000000UL | ||
117 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_5_SHFT 28 | ||
118 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_5_MASK 0x0000000010000000UL | ||
119 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_6_SHFT 29 | ||
120 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_6_MASK 0x0000000020000000UL | ||
121 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_7_SHFT 30 | ||
122 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_7_MASK 0x0000000040000000UL | ||
123 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_8_SHFT 31 | ||
124 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_8_MASK 0x0000000080000000UL | ||
125 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_9_SHFT 32 | ||
126 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_9_MASK 0x0000000100000000UL | ||
127 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_10_SHFT 33 | ||
128 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_10_MASK 0x0000000200000000UL | ||
129 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_11_SHFT 34 | ||
130 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_11_MASK 0x0000000400000000UL | ||
131 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_12_SHFT 35 | ||
132 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_12_MASK 0x0000000800000000UL | ||
133 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_13_SHFT 36 | ||
134 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_13_MASK 0x0000001000000000UL | ||
135 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_14_SHFT 37 | ||
136 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_14_MASK 0x0000002000000000UL | ||
137 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_15_SHFT 38 | ||
138 | #define UVH_EVENT_OCCURRED0_LB_IRQ_INT_15_MASK 0x0000004000000000UL | ||
139 | #define UVH_EVENT_OCCURRED0_L1_NMI_INT_SHFT 39 | ||
140 | #define UVH_EVENT_OCCURRED0_L1_NMI_INT_MASK 0x0000008000000000UL | ||
141 | #define UVH_EVENT_OCCURRED0_STOP_CLOCK_SHFT 40 | ||
142 | #define UVH_EVENT_OCCURRED0_STOP_CLOCK_MASK 0x0000010000000000UL | ||
143 | #define UVH_EVENT_OCCURRED0_ASIC_TO_L1_SHFT 41 | ||
144 | #define UVH_EVENT_OCCURRED0_ASIC_TO_L1_MASK 0x0000020000000000UL | ||
145 | #define UVH_EVENT_OCCURRED0_L1_TO_ASIC_SHFT 42 | ||
146 | #define UVH_EVENT_OCCURRED0_L1_TO_ASIC_MASK 0x0000040000000000UL | ||
147 | #define UVH_EVENT_OCCURRED0_LTC_INT_SHFT 43 | ||
148 | #define UVH_EVENT_OCCURRED0_LTC_INT_MASK 0x0000080000000000UL | ||
149 | #define UVH_EVENT_OCCURRED0_LA_SEQ_TRIGGER_SHFT 44 | ||
150 | #define UVH_EVENT_OCCURRED0_LA_SEQ_TRIGGER_MASK 0x0000100000000000UL | ||
151 | #define UVH_EVENT_OCCURRED0_IPI_INT_SHFT 45 | ||
152 | #define UVH_EVENT_OCCURRED0_IPI_INT_MASK 0x0000200000000000UL | ||
153 | #define UVH_EVENT_OCCURRED0_EXTIO_INT0_SHFT 46 | ||
154 | #define UVH_EVENT_OCCURRED0_EXTIO_INT0_MASK 0x0000400000000000UL | ||
155 | #define UVH_EVENT_OCCURRED0_EXTIO_INT1_SHFT 47 | ||
156 | #define UVH_EVENT_OCCURRED0_EXTIO_INT1_MASK 0x0000800000000000UL | ||
157 | #define UVH_EVENT_OCCURRED0_EXTIO_INT2_SHFT 48 | ||
158 | #define UVH_EVENT_OCCURRED0_EXTIO_INT2_MASK 0x0001000000000000UL | ||
159 | #define UVH_EVENT_OCCURRED0_EXTIO_INT3_SHFT 49 | ||
160 | #define UVH_EVENT_OCCURRED0_EXTIO_INT3_MASK 0x0002000000000000UL | ||
161 | #define UVH_EVENT_OCCURRED0_PROFILE_INT_SHFT 50 | ||
162 | #define UVH_EVENT_OCCURRED0_PROFILE_INT_MASK 0x0004000000000000UL | ||
163 | #define UVH_EVENT_OCCURRED0_RTC0_SHFT 51 | ||
164 | #define UVH_EVENT_OCCURRED0_RTC0_MASK 0x0008000000000000UL | ||
165 | #define UVH_EVENT_OCCURRED0_RTC1_SHFT 52 | ||
166 | #define UVH_EVENT_OCCURRED0_RTC1_MASK 0x0010000000000000UL | ||
167 | #define UVH_EVENT_OCCURRED0_RTC2_SHFT 53 | ||
168 | #define UVH_EVENT_OCCURRED0_RTC2_MASK 0x0020000000000000UL | ||
169 | #define UVH_EVENT_OCCURRED0_RTC3_SHFT 54 | ||
170 | #define UVH_EVENT_OCCURRED0_RTC3_MASK 0x0040000000000000UL | ||
171 | #define UVH_EVENT_OCCURRED0_BAU_DATA_SHFT 55 | ||
172 | #define UVH_EVENT_OCCURRED0_BAU_DATA_MASK 0x0080000000000000UL | ||
173 | #define UVH_EVENT_OCCURRED0_POWER_MANAGEMENT_REQ_SHFT 56 | ||
174 | #define UVH_EVENT_OCCURRED0_POWER_MANAGEMENT_REQ_MASK 0x0100000000000000UL | ||
175 | union uvh_event_occurred0_u { | ||
176 | unsigned long v; | ||
177 | struct uvh_event_occurred0_s { | ||
178 | unsigned long lb_hcerr : 1; /* RW, W1C */ | ||
179 | unsigned long gr0_hcerr : 1; /* RW, W1C */ | ||
180 | unsigned long gr1_hcerr : 1; /* RW, W1C */ | ||
181 | unsigned long lh_hcerr : 1; /* RW, W1C */ | ||
182 | unsigned long rh_hcerr : 1; /* RW, W1C */ | ||
183 | unsigned long xn_hcerr : 1; /* RW, W1C */ | ||
184 | unsigned long si_hcerr : 1; /* RW, W1C */ | ||
185 | unsigned long lb_aoerr0 : 1; /* RW, W1C */ | ||
186 | unsigned long gr0_aoerr0 : 1; /* RW, W1C */ | ||
187 | unsigned long gr1_aoerr0 : 1; /* RW, W1C */ | ||
188 | unsigned long lh_aoerr0 : 1; /* RW, W1C */ | ||
189 | unsigned long rh_aoerr0 : 1; /* RW, W1C */ | ||
190 | unsigned long xn_aoerr0 : 1; /* RW, W1C */ | ||
191 | unsigned long si_aoerr0 : 1; /* RW, W1C */ | ||
192 | unsigned long lb_aoerr1 : 1; /* RW, W1C */ | ||
193 | unsigned long gr0_aoerr1 : 1; /* RW, W1C */ | ||
194 | unsigned long gr1_aoerr1 : 1; /* RW, W1C */ | ||
195 | unsigned long lh_aoerr1 : 1; /* RW, W1C */ | ||
196 | unsigned long rh_aoerr1 : 1; /* RW, W1C */ | ||
197 | unsigned long xn_aoerr1 : 1; /* RW, W1C */ | ||
198 | unsigned long si_aoerr1 : 1; /* RW, W1C */ | ||
199 | unsigned long rh_vpi_int : 1; /* RW, W1C */ | ||
200 | unsigned long system_shutdown_int : 1; /* RW, W1C */ | ||
201 | unsigned long lb_irq_int_0 : 1; /* RW, W1C */ | ||
202 | unsigned long lb_irq_int_1 : 1; /* RW, W1C */ | ||
203 | unsigned long lb_irq_int_2 : 1; /* RW, W1C */ | ||
204 | unsigned long lb_irq_int_3 : 1; /* RW, W1C */ | ||
205 | unsigned long lb_irq_int_4 : 1; /* RW, W1C */ | ||
206 | unsigned long lb_irq_int_5 : 1; /* RW, W1C */ | ||
207 | unsigned long lb_irq_int_6 : 1; /* RW, W1C */ | ||
208 | unsigned long lb_irq_int_7 : 1; /* RW, W1C */ | ||
209 | unsigned long lb_irq_int_8 : 1; /* RW, W1C */ | ||
210 | unsigned long lb_irq_int_9 : 1; /* RW, W1C */ | ||
211 | unsigned long lb_irq_int_10 : 1; /* RW, W1C */ | ||
212 | unsigned long lb_irq_int_11 : 1; /* RW, W1C */ | ||
213 | unsigned long lb_irq_int_12 : 1; /* RW, W1C */ | ||
214 | unsigned long lb_irq_int_13 : 1; /* RW, W1C */ | ||
215 | unsigned long lb_irq_int_14 : 1; /* RW, W1C */ | ||
216 | unsigned long lb_irq_int_15 : 1; /* RW, W1C */ | ||
217 | unsigned long l1_nmi_int : 1; /* RW, W1C */ | ||
218 | unsigned long stop_clock : 1; /* RW, W1C */ | ||
219 | unsigned long asic_to_l1 : 1; /* RW, W1C */ | ||
220 | unsigned long l1_to_asic : 1; /* RW, W1C */ | ||
221 | unsigned long ltc_int : 1; /* RW, W1C */ | ||
222 | unsigned long la_seq_trigger : 1; /* RW, W1C */ | ||
223 | unsigned long ipi_int : 1; /* RW, W1C */ | ||
224 | unsigned long extio_int0 : 1; /* RW, W1C */ | ||
225 | unsigned long extio_int1 : 1; /* RW, W1C */ | ||
226 | unsigned long extio_int2 : 1; /* RW, W1C */ | ||
227 | unsigned long extio_int3 : 1; /* RW, W1C */ | ||
228 | unsigned long profile_int : 1; /* RW, W1C */ | ||
229 | unsigned long rtc0 : 1; /* RW, W1C */ | ||
230 | unsigned long rtc1 : 1; /* RW, W1C */ | ||
231 | unsigned long rtc2 : 1; /* RW, W1C */ | ||
232 | unsigned long rtc3 : 1; /* RW, W1C */ | ||
233 | unsigned long bau_data : 1; /* RW, W1C */ | ||
234 | unsigned long power_management_req : 1; /* RW, W1C */ | ||
235 | unsigned long rsvd_57_63 : 7; /* */ | ||
236 | } s; | ||
237 | }; | ||
238 | |||
239 | /* ========================================================================= */ | ||
240 | /* UVH_EVENT_OCCURRED0_ALIAS */ | ||
241 | /* ========================================================================= */ | ||
242 | #define UVH_EVENT_OCCURRED0_ALIAS 0x0000000000070008UL | ||
243 | #define UVH_EVENT_OCCURRED0_ALIAS_32 0x005f0 | ||
244 | |||
245 | /* ========================================================================= */ | ||
246 | /* UVH_INT_CMPB */ | ||
247 | /* ========================================================================= */ | ||
248 | #define UVH_INT_CMPB 0x22080UL | ||
249 | |||
250 | #define UVH_INT_CMPB_REAL_TIME_CMPB_SHFT 0 | ||
251 | #define UVH_INT_CMPB_REAL_TIME_CMPB_MASK 0x00ffffffffffffffUL | ||
252 | |||
253 | union uvh_int_cmpb_u { | ||
254 | unsigned long v; | ||
255 | struct uvh_int_cmpb_s { | ||
256 | unsigned long real_time_cmpb : 56; /* RW */ | ||
257 | unsigned long rsvd_56_63 : 8; /* */ | ||
258 | } s; | ||
259 | }; | ||
260 | |||
261 | /* ========================================================================= */ | ||
262 | /* UVH_INT_CMPC */ | ||
263 | /* ========================================================================= */ | ||
264 | #define UVH_INT_CMPC 0x22100UL | ||
265 | |||
266 | #define UVH_INT_CMPC_REAL_TIME_CMPC_SHFT 0 | ||
267 | #define UVH_INT_CMPC_REAL_TIME_CMPC_MASK 0x00ffffffffffffffUL | ||
268 | |||
269 | union uvh_int_cmpc_u { | ||
270 | unsigned long v; | ||
271 | struct uvh_int_cmpc_s { | ||
272 | unsigned long real_time_cmpc : 56; /* RW */ | ||
273 | unsigned long rsvd_56_63 : 8; /* */ | ||
274 | } s; | ||
275 | }; | ||
276 | |||
277 | /* ========================================================================= */ | ||
278 | /* UVH_INT_CMPD */ | ||
279 | /* ========================================================================= */ | ||
280 | #define UVH_INT_CMPD 0x22180UL | ||
281 | |||
282 | #define UVH_INT_CMPD_REAL_TIME_CMPD_SHFT 0 | ||
283 | #define UVH_INT_CMPD_REAL_TIME_CMPD_MASK 0x00ffffffffffffffUL | ||
284 | |||
285 | union uvh_int_cmpd_u { | ||
286 | unsigned long v; | ||
287 | struct uvh_int_cmpd_s { | ||
288 | unsigned long real_time_cmpd : 56; /* RW */ | ||
289 | unsigned long rsvd_56_63 : 8; /* */ | ||
290 | } s; | ||
291 | }; | ||
292 | |||
293 | /* ========================================================================= */ | ||
56 | /* UVH_IPI_INT */ | 294 | /* UVH_IPI_INT */ |
57 | /* ========================================================================= */ | 295 | /* ========================================================================= */ |
58 | #define UVH_IPI_INT 0x60500UL | 296 | #define UVH_IPI_INT 0x60500UL |
59 | #define UVH_IPI_INT_32 0x0360 | 297 | #define UVH_IPI_INT_32 0x0348 |
60 | 298 | ||
61 | #define UVH_IPI_INT_VECTOR_SHFT 0 | 299 | #define UVH_IPI_INT_VECTOR_SHFT 0 |
62 | #define UVH_IPI_INT_VECTOR_MASK 0x00000000000000ffUL | 300 | #define UVH_IPI_INT_VECTOR_MASK 0x00000000000000ffUL |
@@ -86,7 +324,7 @@ union uvh_ipi_int_u { | |||
86 | /* UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST */ | 324 | /* UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST */ |
87 | /* ========================================================================= */ | 325 | /* ========================================================================= */ |
88 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST 0x320050UL | 326 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST 0x320050UL |
89 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST_32 0x009f0 | 327 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST_32 0x009c0 |
90 | 328 | ||
91 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST_ADDRESS_SHFT 4 | 329 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST_ADDRESS_SHFT 4 |
92 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST_ADDRESS_MASK 0x000007fffffffff0UL | 330 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST_ADDRESS_MASK 0x000007fffffffff0UL |
@@ -108,7 +346,7 @@ union uvh_lb_bau_intd_payload_queue_first_u { | |||
108 | /* UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST */ | 346 | /* UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST */ |
109 | /* ========================================================================= */ | 347 | /* ========================================================================= */ |
110 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST 0x320060UL | 348 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST 0x320060UL |
111 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST_32 0x009f8 | 349 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST_32 0x009c8 |
112 | 350 | ||
113 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST_ADDRESS_SHFT 4 | 351 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST_ADDRESS_SHFT 4 |
114 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST_ADDRESS_MASK 0x000007fffffffff0UL | 352 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_LAST_ADDRESS_MASK 0x000007fffffffff0UL |
@@ -126,7 +364,7 @@ union uvh_lb_bau_intd_payload_queue_last_u { | |||
126 | /* UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL */ | 364 | /* UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL */ |
127 | /* ========================================================================= */ | 365 | /* ========================================================================= */ |
128 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL 0x320070UL | 366 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL 0x320070UL |
129 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL_32 0x00a00 | 367 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL_32 0x009d0 |
130 | 368 | ||
131 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL_ADDRESS_SHFT 4 | 369 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL_ADDRESS_SHFT 4 |
132 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL_ADDRESS_MASK 0x000007fffffffff0UL | 370 | #define UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL_ADDRESS_MASK 0x000007fffffffff0UL |
@@ -144,7 +382,7 @@ union uvh_lb_bau_intd_payload_queue_tail_u { | |||
144 | /* UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE */ | 382 | /* UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE */ |
145 | /* ========================================================================= */ | 383 | /* ========================================================================= */ |
146 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE 0x320080UL | 384 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE 0x320080UL |
147 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_32 0x0aa0 | 385 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_32 0x0a68 |
148 | 386 | ||
149 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_PENDING_0_SHFT 0 | 387 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_PENDING_0_SHFT 0 |
150 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_PENDING_0_MASK 0x0000000000000001UL | 388 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_PENDING_0_MASK 0x0000000000000001UL |
@@ -205,13 +443,13 @@ union uvh_lb_bau_intd_software_acknowledge_u { | |||
205 | /* UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS */ | 443 | /* UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS */ |
206 | /* ========================================================================= */ | 444 | /* ========================================================================= */ |
207 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS 0x0000000000320088UL | 445 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS 0x0000000000320088UL |
208 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS_32 0x0aa8 | 446 | #define UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS_32 0x0a70 |
209 | 447 | ||
210 | /* ========================================================================= */ | 448 | /* ========================================================================= */ |
211 | /* UVH_LB_BAU_SB_ACTIVATION_CONTROL */ | 449 | /* UVH_LB_BAU_SB_ACTIVATION_CONTROL */ |
212 | /* ========================================================================= */ | 450 | /* ========================================================================= */ |
213 | #define UVH_LB_BAU_SB_ACTIVATION_CONTROL 0x320020UL | 451 | #define UVH_LB_BAU_SB_ACTIVATION_CONTROL 0x320020UL |
214 | #define UVH_LB_BAU_SB_ACTIVATION_CONTROL_32 0x009d8 | 452 | #define UVH_LB_BAU_SB_ACTIVATION_CONTROL_32 0x009a8 |
215 | 453 | ||
216 | #define UVH_LB_BAU_SB_ACTIVATION_CONTROL_INDEX_SHFT 0 | 454 | #define UVH_LB_BAU_SB_ACTIVATION_CONTROL_INDEX_SHFT 0 |
217 | #define UVH_LB_BAU_SB_ACTIVATION_CONTROL_INDEX_MASK 0x000000000000003fUL | 455 | #define UVH_LB_BAU_SB_ACTIVATION_CONTROL_INDEX_MASK 0x000000000000003fUL |
@@ -234,7 +472,7 @@ union uvh_lb_bau_sb_activation_control_u { | |||
234 | /* UVH_LB_BAU_SB_ACTIVATION_STATUS_0 */ | 472 | /* UVH_LB_BAU_SB_ACTIVATION_STATUS_0 */ |
235 | /* ========================================================================= */ | 473 | /* ========================================================================= */ |
236 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_0 0x320030UL | 474 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_0 0x320030UL |
237 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_0_32 0x009e0 | 475 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_0_32 0x009b0 |
238 | 476 | ||
239 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_0_STATUS_SHFT 0 | 477 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_0_STATUS_SHFT 0 |
240 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_0_STATUS_MASK 0xffffffffffffffffUL | 478 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_0_STATUS_MASK 0xffffffffffffffffUL |
@@ -250,7 +488,7 @@ union uvh_lb_bau_sb_activation_status_0_u { | |||
250 | /* UVH_LB_BAU_SB_ACTIVATION_STATUS_1 */ | 488 | /* UVH_LB_BAU_SB_ACTIVATION_STATUS_1 */ |
251 | /* ========================================================================= */ | 489 | /* ========================================================================= */ |
252 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_1 0x320040UL | 490 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_1 0x320040UL |
253 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_1_32 0x009e8 | 491 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_1_32 0x009b8 |
254 | 492 | ||
255 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_1_STATUS_SHFT 0 | 493 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_1_STATUS_SHFT 0 |
256 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_1_STATUS_MASK 0xffffffffffffffffUL | 494 | #define UVH_LB_BAU_SB_ACTIVATION_STATUS_1_STATUS_MASK 0xffffffffffffffffUL |
@@ -266,7 +504,7 @@ union uvh_lb_bau_sb_activation_status_1_u { | |||
266 | /* UVH_LB_BAU_SB_DESCRIPTOR_BASE */ | 504 | /* UVH_LB_BAU_SB_DESCRIPTOR_BASE */ |
267 | /* ========================================================================= */ | 505 | /* ========================================================================= */ |
268 | #define UVH_LB_BAU_SB_DESCRIPTOR_BASE 0x320010UL | 506 | #define UVH_LB_BAU_SB_DESCRIPTOR_BASE 0x320010UL |
269 | #define UVH_LB_BAU_SB_DESCRIPTOR_BASE_32 0x009d0 | 507 | #define UVH_LB_BAU_SB_DESCRIPTOR_BASE_32 0x009a0 |
270 | 508 | ||
271 | #define UVH_LB_BAU_SB_DESCRIPTOR_BASE_PAGE_ADDRESS_SHFT 12 | 509 | #define UVH_LB_BAU_SB_DESCRIPTOR_BASE_PAGE_ADDRESS_SHFT 12 |
272 | #define UVH_LB_BAU_SB_DESCRIPTOR_BASE_PAGE_ADDRESS_MASK 0x000007fffffff000UL | 510 | #define UVH_LB_BAU_SB_DESCRIPTOR_BASE_PAGE_ADDRESS_MASK 0x000007fffffff000UL |
@@ -333,46 +571,48 @@ union uvh_lb_bau_sb_descriptor_base_u { | |||
333 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_REP_OBESE_MSG_MASK 0x0000000000100000UL | 571 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_REP_OBESE_MSG_MASK 0x0000000000100000UL |
334 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_REP_DATA_SB_ERR_SHFT 21 | 572 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_REP_DATA_SB_ERR_SHFT 21 |
335 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_REP_DATA_SB_ERR_MASK 0x0000000000200000UL | 573 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_REP_DATA_SB_ERR_MASK 0x0000000000200000UL |
336 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_TIMEOUT_SHFT 22 | 574 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_AMO_TIMEOUT_SHFT 22 |
337 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_TIMEOUT_MASK 0x0000000000400000UL | 575 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_AMO_TIMEOUT_MASK 0x0000000000400000UL |
338 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_SPURIOUS_EVENT_SHFT 23 | 576 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_PUT_TIMEOUT_SHFT 23 |
339 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_SPURIOUS_EVENT_MASK 0x0000000000800000UL | 577 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_PUT_TIMEOUT_MASK 0x0000000000800000UL |
340 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_IOH_DESTINATION_TABLE_PARITY_SHFT 24 | 578 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_SPURIOUS_EVENT_SHFT 24 |
341 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_IOH_DESTINATION_TABLE_PARITY_MASK 0x0000000001000000UL | 579 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_MACC_SPURIOUS_EVENT_MASK 0x0000000001000000UL |
342 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_GET_HAD_ERROR_REPLY_SHFT 25 | 580 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_IOH_DESTINATION_TABLE_PARITY_SHFT 25 |
343 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_GET_HAD_ERROR_REPLY_MASK 0x0000000002000000UL | 581 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_IOH_DESTINATION_TABLE_PARITY_MASK 0x0000000002000000UL |
344 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_GET_TIMEOUT_SHFT 26 | 582 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_GET_HAD_ERROR_REPLY_SHFT 26 |
345 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_GET_TIMEOUT_MASK 0x0000000004000000UL | 583 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_GET_HAD_ERROR_REPLY_MASK 0x0000000004000000UL |
346 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_LOCK_MANAGER_HAD_ERROR_REPLY_SHFT 27 | 584 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_GET_TIMEOUT_SHFT 27 |
347 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_LOCK_MANAGER_HAD_ERROR_REPLY_MASK 0x0000000008000000UL | 585 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_GET_TIMEOUT_MASK 0x0000000008000000UL |
348 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_PUT_HAD_ERROR_REPLY_SHFT 28 | 586 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_LOCK_MANAGER_HAD_ERROR_REPLY_SHFT 28 |
349 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_PUT_HAD_ERROR_REPLY_MASK 0x0000000010000000UL | 587 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_LOCK_MANAGER_HAD_ERROR_REPLY_MASK 0x0000000010000000UL |
350 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_PUT_TIMEOUT_SHFT 29 | 588 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_PUT_HAD_ERROR_REPLY_SHFT 29 |
351 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_PUT_TIMEOUT_MASK 0x0000000020000000UL | 589 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_PUT_HAD_ERROR_REPLY_MASK 0x0000000020000000UL |
352 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_SB_ACTIVATION_OVERRUN_SHFT 30 | 590 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_PUT_TIMEOUT_SHFT 30 |
353 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_SB_ACTIVATION_OVERRUN_MASK 0x0000000040000000UL | 591 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_PUT_TIMEOUT_MASK 0x0000000040000000UL |
354 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_COMPLETED_GB_ACTIVATION_HAD_ERROR_REPLY_SHFT 31 | 592 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_SB_ACTIVATION_OVERRUN_SHFT 31 |
355 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_COMPLETED_GB_ACTIVATION_HAD_ERROR_REPLY_MASK 0x0000000080000000UL | 593 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_SB_ACTIVATION_OVERRUN_MASK 0x0000000080000000UL |
356 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_COMPLETED_GB_ACTIVATION_TIMEOUT_SHFT 32 | 594 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_COMPLETED_GB_ACTIVATION_HAD_ERROR_REPLY_SHFT 32 |
357 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_COMPLETED_GB_ACTIVATION_TIMEOUT_MASK 0x0000000100000000UL | 595 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_COMPLETED_GB_ACTIVATION_HAD_ERROR_REPLY_MASK 0x0000000100000000UL |
358 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_DESCRIPTOR_BUFFER_0_PARITY_SHFT 33 | 596 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_COMPLETED_GB_ACTIVATION_TIMEOUT_SHFT 33 |
359 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_DESCRIPTOR_BUFFER_0_PARITY_MASK 0x0000000200000000UL | 597 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_COMPLETED_GB_ACTIVATION_TIMEOUT_MASK 0x0000000200000000UL |
360 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_DESCRIPTOR_BUFFER_1_PARITY_SHFT 34 | 598 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_DESCRIPTOR_BUFFER_0_PARITY_SHFT 34 |
361 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_DESCRIPTOR_BUFFER_1_PARITY_MASK 0x0000000400000000UL | 599 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_DESCRIPTOR_BUFFER_0_PARITY_MASK 0x0000000400000000UL |
362 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_SOCKET_DESTINATION_TABLE_PARITY_SHFT 35 | 600 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_DESCRIPTOR_BUFFER_1_PARITY_SHFT 35 |
363 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_SOCKET_DESTINATION_TABLE_PARITY_MASK 0x0000000800000000UL | 601 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_DESCRIPTOR_BUFFER_1_PARITY_MASK 0x0000000800000000UL |
364 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_BAU_REPLY_PAYLOAD_CORRUPTION_SHFT 36 | 602 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_SOCKET_DESTINATION_TABLE_PARITY_SHFT 36 |
365 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_BAU_REPLY_PAYLOAD_CORRUPTION_MASK 0x0000001000000000UL | 603 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_SOCKET_DESTINATION_TABLE_PARITY_MASK 0x0000001000000000UL |
366 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_IO_PORT_DESTINATION_TABLE_PARITY_SHFT 37 | 604 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_BAU_REPLY_PAYLOAD_CORRUPTION_SHFT 37 |
367 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_IO_PORT_DESTINATION_TABLE_PARITY_MASK 0x0000002000000000UL | 605 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_BAU_REPLY_PAYLOAD_CORRUPTION_MASK 0x0000002000000000UL |
368 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INTD_SOFT_ACK_TIMEOUT_SHFT 38 | 606 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_IO_PORT_DESTINATION_TABLE_PARITY_SHFT 38 |
369 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INTD_SOFT_ACK_TIMEOUT_MASK 0x0000004000000000UL | 607 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_IO_PORT_DESTINATION_TABLE_PARITY_MASK 0x0000004000000000UL |
370 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_REP_OBESE_MSG_SHFT 39 | 608 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INTD_SOFT_ACK_TIMEOUT_SHFT 39 |
371 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_REP_OBESE_MSG_MASK 0x0000008000000000UL | 609 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INTD_SOFT_ACK_TIMEOUT_MASK 0x0000008000000000UL |
372 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_REP_COMMAND_ERR_SHFT 40 | 610 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_REP_OBESE_MSG_SHFT 40 |
373 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_REP_COMMAND_ERR_MASK 0x0000010000000000UL | 611 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_REP_OBESE_MSG_MASK 0x0000010000000000UL |
374 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_TIMEOUT_SHFT 41 | 612 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_REP_COMMAND_ERR_SHFT 41 |
375 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_TIMEOUT_MASK 0x0000020000000000UL | 613 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_REP_COMMAND_ERR_MASK 0x0000020000000000UL |
614 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_TIMEOUT_SHFT 42 | ||
615 | #define UVH_LB_MCAST_AOERR0_RPT_ENABLE_INT_TIMEOUT_MASK 0x0000040000000000UL | ||
376 | 616 | ||
377 | union uvh_lb_mcast_aoerr0_rpt_enable_u { | 617 | union uvh_lb_mcast_aoerr0_rpt_enable_u { |
378 | unsigned long v; | 618 | unsigned long v; |
@@ -399,7 +639,8 @@ union uvh_lb_mcast_aoerr0_rpt_enable_u { | |||
399 | unsigned long macc_rep_runt_msg : 1; /* RW */ | 639 | unsigned long macc_rep_runt_msg : 1; /* RW */ |
400 | unsigned long macc_rep_obese_msg : 1; /* RW */ | 640 | unsigned long macc_rep_obese_msg : 1; /* RW */ |
401 | unsigned long macc_rep_data_sb_err : 1; /* RW */ | 641 | unsigned long macc_rep_data_sb_err : 1; /* RW */ |
402 | unsigned long macc_timeout : 1; /* RW */ | 642 | unsigned long macc_amo_timeout : 1; /* RW */ |
643 | unsigned long macc_put_timeout : 1; /* RW */ | ||
403 | unsigned long macc_spurious_event : 1; /* RW */ | 644 | unsigned long macc_spurious_event : 1; /* RW */ |
404 | unsigned long ioh_destination_table_parity : 1; /* RW */ | 645 | unsigned long ioh_destination_table_parity : 1; /* RW */ |
405 | unsigned long get_had_error_reply : 1; /* RW */ | 646 | unsigned long get_had_error_reply : 1; /* RW */ |
@@ -419,7 +660,7 @@ union uvh_lb_mcast_aoerr0_rpt_enable_u { | |||
419 | unsigned long int_rep_obese_msg : 1; /* RW */ | 660 | unsigned long int_rep_obese_msg : 1; /* RW */ |
420 | unsigned long int_rep_command_err : 1; /* RW */ | 661 | unsigned long int_rep_command_err : 1; /* RW */ |
421 | unsigned long int_timeout : 1; /* RW */ | 662 | unsigned long int_timeout : 1; /* RW */ |
422 | unsigned long rsvd_42_63 : 22; /* */ | 663 | unsigned long rsvd_43_63 : 21; /* */ |
423 | } s; | 664 | } s; |
424 | }; | 665 | }; |
425 | 666 | ||
@@ -713,14 +954,34 @@ union uvh_rh_gam_alias210_redirect_config_2_mmr_u { | |||
713 | }; | 954 | }; |
714 | 955 | ||
715 | /* ========================================================================= */ | 956 | /* ========================================================================= */ |
957 | /* UVH_RH_GAM_CFG_OVERLAY_CONFIG_MMR */ | ||
958 | /* ========================================================================= */ | ||
959 | #define UVH_RH_GAM_CFG_OVERLAY_CONFIG_MMR 0x1600020UL | ||
960 | |||
961 | #define UVH_RH_GAM_CFG_OVERLAY_CONFIG_MMR_BASE_SHFT 26 | ||
962 | #define UVH_RH_GAM_CFG_OVERLAY_CONFIG_MMR_BASE_MASK 0x00003ffffc000000UL | ||
963 | #define UVH_RH_GAM_CFG_OVERLAY_CONFIG_MMR_ENABLE_SHFT 63 | ||
964 | #define UVH_RH_GAM_CFG_OVERLAY_CONFIG_MMR_ENABLE_MASK 0x8000000000000000UL | ||
965 | |||
966 | union uvh_rh_gam_cfg_overlay_config_mmr_u { | ||
967 | unsigned long v; | ||
968 | struct uvh_rh_gam_cfg_overlay_config_mmr_s { | ||
969 | unsigned long rsvd_0_25: 26; /* */ | ||
970 | unsigned long base : 20; /* RW */ | ||
971 | unsigned long rsvd_46_62: 17; /* */ | ||
972 | unsigned long enable : 1; /* RW */ | ||
973 | } s; | ||
974 | }; | ||
975 | |||
976 | /* ========================================================================= */ | ||
716 | /* UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR */ | 977 | /* UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR */ |
717 | /* ========================================================================= */ | 978 | /* ========================================================================= */ |
718 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR 0x1600010UL | 979 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR 0x1600010UL |
719 | 980 | ||
720 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_BASE_SHFT 28 | 981 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_BASE_SHFT 28 |
721 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_BASE_MASK 0x00003ffff0000000UL | 982 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_BASE_MASK 0x00003ffff0000000UL |
722 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_GR4_SHFT 46 | 983 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_GR4_SHFT 48 |
723 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_GR4_MASK 0x0000400000000000UL | 984 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_GR4_MASK 0x0001000000000000UL |
724 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_N_GRU_SHFT 52 | 985 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_N_GRU_SHFT 52 |
725 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_N_GRU_MASK 0x00f0000000000000UL | 986 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_N_GRU_MASK 0x00f0000000000000UL |
726 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_ENABLE_SHFT 63 | 987 | #define UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_ENABLE_SHFT 63 |
@@ -731,8 +992,9 @@ union uvh_rh_gam_gru_overlay_config_mmr_u { | |||
731 | struct uvh_rh_gam_gru_overlay_config_mmr_s { | 992 | struct uvh_rh_gam_gru_overlay_config_mmr_s { |
732 | unsigned long rsvd_0_27: 28; /* */ | 993 | unsigned long rsvd_0_27: 28; /* */ |
733 | unsigned long base : 18; /* RW */ | 994 | unsigned long base : 18; /* RW */ |
995 | unsigned long rsvd_46_47: 2; /* */ | ||
734 | unsigned long gr4 : 1; /* RW */ | 996 | unsigned long gr4 : 1; /* RW */ |
735 | unsigned long rsvd_47_51: 5; /* */ | 997 | unsigned long rsvd_49_51: 3; /* */ |
736 | unsigned long n_gru : 4; /* RW */ | 998 | unsigned long n_gru : 4; /* RW */ |
737 | unsigned long rsvd_56_62: 7; /* */ | 999 | unsigned long rsvd_56_62: 7; /* */ |
738 | unsigned long enable : 1; /* RW */ | 1000 | unsigned long enable : 1; /* RW */ |
@@ -740,6 +1002,32 @@ union uvh_rh_gam_gru_overlay_config_mmr_u { | |||
740 | }; | 1002 | }; |
741 | 1003 | ||
742 | /* ========================================================================= */ | 1004 | /* ========================================================================= */ |
1005 | /* UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR */ | ||
1006 | /* ========================================================================= */ | ||
1007 | #define UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR 0x1600030UL | ||
1008 | |||
1009 | #define UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR_BASE_SHFT 30 | ||
1010 | #define UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR_BASE_MASK 0x00003fffc0000000UL | ||
1011 | #define UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR_M_IO_SHFT 46 | ||
1012 | #define UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR_M_IO_MASK 0x000fc00000000000UL | ||
1013 | #define UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR_N_IO_SHFT 52 | ||
1014 | #define UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR_N_IO_MASK 0x00f0000000000000UL | ||
1015 | #define UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR_ENABLE_SHFT 63 | ||
1016 | #define UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR_ENABLE_MASK 0x8000000000000000UL | ||
1017 | |||
1018 | union uvh_rh_gam_mmioh_overlay_config_mmr_u { | ||
1019 | unsigned long v; | ||
1020 | struct uvh_rh_gam_mmioh_overlay_config_mmr_s { | ||
1021 | unsigned long rsvd_0_29: 30; /* */ | ||
1022 | unsigned long base : 16; /* RW */ | ||
1023 | unsigned long m_io : 6; /* RW */ | ||
1024 | unsigned long n_io : 4; /* RW */ | ||
1025 | unsigned long rsvd_56_62: 7; /* */ | ||
1026 | unsigned long enable : 1; /* RW */ | ||
1027 | } s; | ||
1028 | }; | ||
1029 | |||
1030 | /* ========================================================================= */ | ||
743 | /* UVH_RH_GAM_MMR_OVERLAY_CONFIG_MMR */ | 1031 | /* UVH_RH_GAM_MMR_OVERLAY_CONFIG_MMR */ |
744 | /* ========================================================================= */ | 1032 | /* ========================================================================= */ |
745 | #define UVH_RH_GAM_MMR_OVERLAY_CONFIG_MMR 0x1600028UL | 1033 | #define UVH_RH_GAM_MMR_OVERLAY_CONFIG_MMR 0x1600028UL |
@@ -765,7 +1053,7 @@ union uvh_rh_gam_mmr_overlay_config_mmr_u { | |||
765 | /* ========================================================================= */ | 1053 | /* ========================================================================= */ |
766 | /* UVH_RTC */ | 1054 | /* UVH_RTC */ |
767 | /* ========================================================================= */ | 1055 | /* ========================================================================= */ |
768 | #define UVH_RTC 0x28000UL | 1056 | #define UVH_RTC 0x340000UL |
769 | 1057 | ||
770 | #define UVH_RTC_REAL_TIME_CLOCK_SHFT 0 | 1058 | #define UVH_RTC_REAL_TIME_CLOCK_SHFT 0 |
771 | #define UVH_RTC_REAL_TIME_CLOCK_MASK 0x00ffffffffffffffUL | 1059 | #define UVH_RTC_REAL_TIME_CLOCK_MASK 0x00ffffffffffffffUL |
@@ -779,6 +1067,139 @@ union uvh_rtc_u { | |||
779 | }; | 1067 | }; |
780 | 1068 | ||
781 | /* ========================================================================= */ | 1069 | /* ========================================================================= */ |
1070 | /* UVH_RTC1_INT_CONFIG */ | ||
1071 | /* ========================================================================= */ | ||
1072 | #define UVH_RTC1_INT_CONFIG 0x615c0UL | ||
1073 | |||
1074 | #define UVH_RTC1_INT_CONFIG_VECTOR_SHFT 0 | ||
1075 | #define UVH_RTC1_INT_CONFIG_VECTOR_MASK 0x00000000000000ffUL | ||
1076 | #define UVH_RTC1_INT_CONFIG_DM_SHFT 8 | ||
1077 | #define UVH_RTC1_INT_CONFIG_DM_MASK 0x0000000000000700UL | ||
1078 | #define UVH_RTC1_INT_CONFIG_DESTMODE_SHFT 11 | ||
1079 | #define UVH_RTC1_INT_CONFIG_DESTMODE_MASK 0x0000000000000800UL | ||
1080 | #define UVH_RTC1_INT_CONFIG_STATUS_SHFT 12 | ||
1081 | #define UVH_RTC1_INT_CONFIG_STATUS_MASK 0x0000000000001000UL | ||
1082 | #define UVH_RTC1_INT_CONFIG_P_SHFT 13 | ||
1083 | #define UVH_RTC1_INT_CONFIG_P_MASK 0x0000000000002000UL | ||
1084 | #define UVH_RTC1_INT_CONFIG_T_SHFT 15 | ||
1085 | #define UVH_RTC1_INT_CONFIG_T_MASK 0x0000000000008000UL | ||
1086 | #define UVH_RTC1_INT_CONFIG_M_SHFT 16 | ||
1087 | #define UVH_RTC1_INT_CONFIG_M_MASK 0x0000000000010000UL | ||
1088 | #define UVH_RTC1_INT_CONFIG_APIC_ID_SHFT 32 | ||
1089 | #define UVH_RTC1_INT_CONFIG_APIC_ID_MASK 0xffffffff00000000UL | ||
1090 | |||
1091 | union uvh_rtc1_int_config_u { | ||
1092 | unsigned long v; | ||
1093 | struct uvh_rtc1_int_config_s { | ||
1094 | unsigned long vector_ : 8; /* RW */ | ||
1095 | unsigned long dm : 3; /* RW */ | ||
1096 | unsigned long destmode : 1; /* RW */ | ||
1097 | unsigned long status : 1; /* RO */ | ||
1098 | unsigned long p : 1; /* RO */ | ||
1099 | unsigned long rsvd_14 : 1; /* */ | ||
1100 | unsigned long t : 1; /* RO */ | ||
1101 | unsigned long m : 1; /* RW */ | ||
1102 | unsigned long rsvd_17_31: 15; /* */ | ||
1103 | unsigned long apic_id : 32; /* RW */ | ||
1104 | } s; | ||
1105 | }; | ||
1106 | |||
1107 | /* ========================================================================= */ | ||
1108 | /* UVH_RTC2_INT_CONFIG */ | ||
1109 | /* ========================================================================= */ | ||
1110 | #define UVH_RTC2_INT_CONFIG 0x61600UL | ||
1111 | |||
1112 | #define UVH_RTC2_INT_CONFIG_VECTOR_SHFT 0 | ||
1113 | #define UVH_RTC2_INT_CONFIG_VECTOR_MASK 0x00000000000000ffUL | ||
1114 | #define UVH_RTC2_INT_CONFIG_DM_SHFT 8 | ||
1115 | #define UVH_RTC2_INT_CONFIG_DM_MASK 0x0000000000000700UL | ||
1116 | #define UVH_RTC2_INT_CONFIG_DESTMODE_SHFT 11 | ||
1117 | #define UVH_RTC2_INT_CONFIG_DESTMODE_MASK 0x0000000000000800UL | ||
1118 | #define UVH_RTC2_INT_CONFIG_STATUS_SHFT 12 | ||
1119 | #define UVH_RTC2_INT_CONFIG_STATUS_MASK 0x0000000000001000UL | ||
1120 | #define UVH_RTC2_INT_CONFIG_P_SHFT 13 | ||
1121 | #define UVH_RTC2_INT_CONFIG_P_MASK 0x0000000000002000UL | ||
1122 | #define UVH_RTC2_INT_CONFIG_T_SHFT 15 | ||
1123 | #define UVH_RTC2_INT_CONFIG_T_MASK 0x0000000000008000UL | ||
1124 | #define UVH_RTC2_INT_CONFIG_M_SHFT 16 | ||
1125 | #define UVH_RTC2_INT_CONFIG_M_MASK 0x0000000000010000UL | ||
1126 | #define UVH_RTC2_INT_CONFIG_APIC_ID_SHFT 32 | ||
1127 | #define UVH_RTC2_INT_CONFIG_APIC_ID_MASK 0xffffffff00000000UL | ||
1128 | |||
1129 | union uvh_rtc2_int_config_u { | ||
1130 | unsigned long v; | ||
1131 | struct uvh_rtc2_int_config_s { | ||
1132 | unsigned long vector_ : 8; /* RW */ | ||
1133 | unsigned long dm : 3; /* RW */ | ||
1134 | unsigned long destmode : 1; /* RW */ | ||
1135 | unsigned long status : 1; /* RO */ | ||
1136 | unsigned long p : 1; /* RO */ | ||
1137 | unsigned long rsvd_14 : 1; /* */ | ||
1138 | unsigned long t : 1; /* RO */ | ||
1139 | unsigned long m : 1; /* RW */ | ||
1140 | unsigned long rsvd_17_31: 15; /* */ | ||
1141 | unsigned long apic_id : 32; /* RW */ | ||
1142 | } s; | ||
1143 | }; | ||
1144 | |||
1145 | /* ========================================================================= */ | ||
1146 | /* UVH_RTC3_INT_CONFIG */ | ||
1147 | /* ========================================================================= */ | ||
1148 | #define UVH_RTC3_INT_CONFIG 0x61640UL | ||
1149 | |||
1150 | #define UVH_RTC3_INT_CONFIG_VECTOR_SHFT 0 | ||
1151 | #define UVH_RTC3_INT_CONFIG_VECTOR_MASK 0x00000000000000ffUL | ||
1152 | #define UVH_RTC3_INT_CONFIG_DM_SHFT 8 | ||
1153 | #define UVH_RTC3_INT_CONFIG_DM_MASK 0x0000000000000700UL | ||
1154 | #define UVH_RTC3_INT_CONFIG_DESTMODE_SHFT 11 | ||
1155 | #define UVH_RTC3_INT_CONFIG_DESTMODE_MASK 0x0000000000000800UL | ||
1156 | #define UVH_RTC3_INT_CONFIG_STATUS_SHFT 12 | ||
1157 | #define UVH_RTC3_INT_CONFIG_STATUS_MASK 0x0000000000001000UL | ||
1158 | #define UVH_RTC3_INT_CONFIG_P_SHFT 13 | ||
1159 | #define UVH_RTC3_INT_CONFIG_P_MASK 0x0000000000002000UL | ||
1160 | #define UVH_RTC3_INT_CONFIG_T_SHFT 15 | ||
1161 | #define UVH_RTC3_INT_CONFIG_T_MASK 0x0000000000008000UL | ||
1162 | #define UVH_RTC3_INT_CONFIG_M_SHFT 16 | ||
1163 | #define UVH_RTC3_INT_CONFIG_M_MASK 0x0000000000010000UL | ||
1164 | #define UVH_RTC3_INT_CONFIG_APIC_ID_SHFT 32 | ||
1165 | #define UVH_RTC3_INT_CONFIG_APIC_ID_MASK 0xffffffff00000000UL | ||
1166 | |||
1167 | union uvh_rtc3_int_config_u { | ||
1168 | unsigned long v; | ||
1169 | struct uvh_rtc3_int_config_s { | ||
1170 | unsigned long vector_ : 8; /* RW */ | ||
1171 | unsigned long dm : 3; /* RW */ | ||
1172 | unsigned long destmode : 1; /* RW */ | ||
1173 | unsigned long status : 1; /* RO */ | ||
1174 | unsigned long p : 1; /* RO */ | ||
1175 | unsigned long rsvd_14 : 1; /* */ | ||
1176 | unsigned long t : 1; /* RO */ | ||
1177 | unsigned long m : 1; /* RW */ | ||
1178 | unsigned long rsvd_17_31: 15; /* */ | ||
1179 | unsigned long apic_id : 32; /* RW */ | ||
1180 | } s; | ||
1181 | }; | ||
1182 | |||
1183 | /* ========================================================================= */ | ||
1184 | /* UVH_RTC_INC_RATIO */ | ||
1185 | /* ========================================================================= */ | ||
1186 | #define UVH_RTC_INC_RATIO 0x350000UL | ||
1187 | |||
1188 | #define UVH_RTC_INC_RATIO_FRACTION_SHFT 0 | ||
1189 | #define UVH_RTC_INC_RATIO_FRACTION_MASK 0x00000000000fffffUL | ||
1190 | #define UVH_RTC_INC_RATIO_RATIO_SHFT 20 | ||
1191 | #define UVH_RTC_INC_RATIO_RATIO_MASK 0x0000000000700000UL | ||
1192 | |||
1193 | union uvh_rtc_inc_ratio_u { | ||
1194 | unsigned long v; | ||
1195 | struct uvh_rtc_inc_ratio_s { | ||
1196 | unsigned long fraction : 20; /* RW */ | ||
1197 | unsigned long ratio : 3; /* RW */ | ||
1198 | unsigned long rsvd_23_63: 41; /* */ | ||
1199 | } s; | ||
1200 | }; | ||
1201 | |||
1202 | /* ========================================================================= */ | ||
782 | /* UVH_SI_ADDR_MAP_CONFIG */ | 1203 | /* UVH_SI_ADDR_MAP_CONFIG */ |
783 | /* ========================================================================= */ | 1204 | /* ========================================================================= */ |
784 | #define UVH_SI_ADDR_MAP_CONFIG 0xc80000UL | 1205 | #define UVH_SI_ADDR_MAP_CONFIG 0xc80000UL |
diff --git a/include/asm-x86/mach-visws/cobalt.h b/include/asm-x86/visws/cobalt.h index 995258831b7f..995258831b7f 100644 --- a/include/asm-x86/mach-visws/cobalt.h +++ b/include/asm-x86/visws/cobalt.h | |||
diff --git a/include/asm-x86/mach-visws/lithium.h b/include/asm-x86/visws/lithium.h index dfcd4f07ab85..dfcd4f07ab85 100644 --- a/include/asm-x86/mach-visws/lithium.h +++ b/include/asm-x86/visws/lithium.h | |||
diff --git a/include/asm-x86/mach-visws/piix4.h b/include/asm-x86/visws/piix4.h index 83ea4f46e419..83ea4f46e419 100644 --- a/include/asm-x86/mach-visws/piix4.h +++ b/include/asm-x86/visws/piix4.h | |||
diff --git a/include/asm-x86/visws/sgivw.h b/include/asm-x86/visws/sgivw.h new file mode 100644 index 000000000000..5fbf63e1003c --- /dev/null +++ b/include/asm-x86/visws/sgivw.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * Frame buffer position and size: | ||
3 | */ | ||
4 | extern unsigned long sgivwfb_mem_phys; | ||
5 | extern unsigned long sgivwfb_mem_size; | ||
diff --git a/include/asm-x86/vmi_time.h b/include/asm-x86/vmi_time.h index 478188130328..c3118c385156 100644 --- a/include/asm-x86/vmi_time.h +++ b/include/asm-x86/vmi_time.h | |||
@@ -50,7 +50,7 @@ extern void __init vmi_time_init(void); | |||
50 | extern unsigned long vmi_get_wallclock(void); | 50 | extern unsigned long vmi_get_wallclock(void); |
51 | extern int vmi_set_wallclock(unsigned long now); | 51 | extern int vmi_set_wallclock(unsigned long now); |
52 | extern unsigned long long vmi_sched_clock(void); | 52 | extern unsigned long long vmi_sched_clock(void); |
53 | extern unsigned long vmi_cpu_khz(void); | 53 | extern unsigned long vmi_tsc_khz(void); |
54 | 54 | ||
55 | #ifdef CONFIG_X86_LOCAL_APIC | 55 | #ifdef CONFIG_X86_LOCAL_APIC |
56 | extern void __devinit vmi_time_bsp_init(void); | 56 | extern void __devinit vmi_time_bsp_init(void); |
diff --git a/include/asm-x86/vsyscall.h b/include/asm-x86/vsyscall.h index 17b3700949bf..6b66ff905af0 100644 --- a/include/asm-x86/vsyscall.h +++ b/include/asm-x86/vsyscall.h | |||
@@ -24,7 +24,8 @@ enum vsyscall_num { | |||
24 | ((unused, __section__ (".vsyscall_gtod_data"),aligned(16))) | 24 | ((unused, __section__ (".vsyscall_gtod_data"),aligned(16))) |
25 | #define __section_vsyscall_clock __attribute__ \ | 25 | #define __section_vsyscall_clock __attribute__ \ |
26 | ((unused, __section__ (".vsyscall_clock"),aligned(16))) | 26 | ((unused, __section__ (".vsyscall_clock"),aligned(16))) |
27 | #define __vsyscall_fn __attribute__ ((unused,__section__(".vsyscall_fn"))) | 27 | #define __vsyscall_fn \ |
28 | __attribute__ ((unused, __section__(".vsyscall_fn"))) notrace | ||
28 | 29 | ||
29 | #define VGETCPU_RDTSCP 1 | 30 | #define VGETCPU_RDTSCP 1 |
30 | #define VGETCPU_LSL 2 | 31 | #define VGETCPU_LSL 2 |
diff --git a/include/asm-x86/xen/events.h b/include/asm-x86/xen/events.h index 596312a7bfc9..f8d57ea1f05f 100644 --- a/include/asm-x86/xen/events.h +++ b/include/asm-x86/xen/events.h | |||
@@ -4,6 +4,7 @@ | |||
4 | enum ipi_vector { | 4 | enum ipi_vector { |
5 | XEN_RESCHEDULE_VECTOR, | 5 | XEN_RESCHEDULE_VECTOR, |
6 | XEN_CALL_FUNCTION_VECTOR, | 6 | XEN_CALL_FUNCTION_VECTOR, |
7 | XEN_CALL_FUNCTION_SINGLE_VECTOR, | ||
7 | 8 | ||
8 | XEN_NR_IPIS, | 9 | XEN_NR_IPIS, |
9 | }; | 10 | }; |
diff --git a/include/crypto/hash.h b/include/crypto/hash.h new file mode 100644 index 000000000000..d12498ec8a4e --- /dev/null +++ b/include/crypto/hash.h | |||
@@ -0,0 +1,154 @@ | |||
1 | /* | ||
2 | * Hash: Hash algorithms under the crypto API | ||
3 | * | ||
4 | * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the Free | ||
8 | * Software Foundation; either version 2 of the License, or (at your option) | ||
9 | * any later version. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifndef _CRYPTO_HASH_H | ||
14 | #define _CRYPTO_HASH_H | ||
15 | |||
16 | #include <linux/crypto.h> | ||
17 | |||
18 | struct crypto_ahash { | ||
19 | struct crypto_tfm base; | ||
20 | }; | ||
21 | |||
22 | static inline struct crypto_ahash *__crypto_ahash_cast(struct crypto_tfm *tfm) | ||
23 | { | ||
24 | return (struct crypto_ahash *)tfm; | ||
25 | } | ||
26 | |||
27 | static inline struct crypto_ahash *crypto_alloc_ahash(const char *alg_name, | ||
28 | u32 type, u32 mask) | ||
29 | { | ||
30 | type &= ~CRYPTO_ALG_TYPE_MASK; | ||
31 | mask &= ~CRYPTO_ALG_TYPE_MASK; | ||
32 | type |= CRYPTO_ALG_TYPE_AHASH; | ||
33 | mask |= CRYPTO_ALG_TYPE_AHASH_MASK; | ||
34 | |||
35 | return __crypto_ahash_cast(crypto_alloc_base(alg_name, type, mask)); | ||
36 | } | ||
37 | |||
38 | static inline struct crypto_tfm *crypto_ahash_tfm(struct crypto_ahash *tfm) | ||
39 | { | ||
40 | return &tfm->base; | ||
41 | } | ||
42 | |||
43 | static inline void crypto_free_ahash(struct crypto_ahash *tfm) | ||
44 | { | ||
45 | crypto_free_tfm(crypto_ahash_tfm(tfm)); | ||
46 | } | ||
47 | |||
48 | static inline unsigned int crypto_ahash_alignmask( | ||
49 | struct crypto_ahash *tfm) | ||
50 | { | ||
51 | return crypto_tfm_alg_alignmask(crypto_ahash_tfm(tfm)); | ||
52 | } | ||
53 | |||
54 | static inline struct ahash_tfm *crypto_ahash_crt(struct crypto_ahash *tfm) | ||
55 | { | ||
56 | return &crypto_ahash_tfm(tfm)->crt_ahash; | ||
57 | } | ||
58 | |||
59 | static inline unsigned int crypto_ahash_digestsize(struct crypto_ahash *tfm) | ||
60 | { | ||
61 | return crypto_ahash_crt(tfm)->digestsize; | ||
62 | } | ||
63 | |||
64 | static inline u32 crypto_ahash_get_flags(struct crypto_ahash *tfm) | ||
65 | { | ||
66 | return crypto_tfm_get_flags(crypto_ahash_tfm(tfm)); | ||
67 | } | ||
68 | |||
69 | static inline void crypto_ahash_set_flags(struct crypto_ahash *tfm, u32 flags) | ||
70 | { | ||
71 | crypto_tfm_set_flags(crypto_ahash_tfm(tfm), flags); | ||
72 | } | ||
73 | |||
74 | static inline void crypto_ahash_clear_flags(struct crypto_ahash *tfm, u32 flags) | ||
75 | { | ||
76 | crypto_tfm_clear_flags(crypto_ahash_tfm(tfm), flags); | ||
77 | } | ||
78 | |||
79 | static inline struct crypto_ahash *crypto_ahash_reqtfm( | ||
80 | struct ahash_request *req) | ||
81 | { | ||
82 | return __crypto_ahash_cast(req->base.tfm); | ||
83 | } | ||
84 | |||
85 | static inline unsigned int crypto_ahash_reqsize(struct crypto_ahash *tfm) | ||
86 | { | ||
87 | return crypto_ahash_crt(tfm)->reqsize; | ||
88 | } | ||
89 | |||
90 | static inline int crypto_ahash_setkey(struct crypto_ahash *tfm, | ||
91 | const u8 *key, unsigned int keylen) | ||
92 | { | ||
93 | struct ahash_tfm *crt = crypto_ahash_crt(tfm); | ||
94 | |||
95 | return crt->setkey(tfm, key, keylen); | ||
96 | } | ||
97 | |||
98 | static inline int crypto_ahash_digest(struct ahash_request *req) | ||
99 | { | ||
100 | struct ahash_tfm *crt = crypto_ahash_crt(crypto_ahash_reqtfm(req)); | ||
101 | return crt->digest(req); | ||
102 | } | ||
103 | |||
104 | static inline void ahash_request_set_tfm(struct ahash_request *req, | ||
105 | struct crypto_ahash *tfm) | ||
106 | { | ||
107 | req->base.tfm = crypto_ahash_tfm(tfm); | ||
108 | } | ||
109 | |||
110 | static inline struct ahash_request *ahash_request_alloc( | ||
111 | struct crypto_ahash *tfm, gfp_t gfp) | ||
112 | { | ||
113 | struct ahash_request *req; | ||
114 | |||
115 | req = kmalloc(sizeof(struct ahash_request) + | ||
116 | crypto_ahash_reqsize(tfm), gfp); | ||
117 | |||
118 | if (likely(req)) | ||
119 | ahash_request_set_tfm(req, tfm); | ||
120 | |||
121 | return req; | ||
122 | } | ||
123 | |||
124 | static inline void ahash_request_free(struct ahash_request *req) | ||
125 | { | ||
126 | kfree(req); | ||
127 | } | ||
128 | |||
129 | static inline struct ahash_request *ahash_request_cast( | ||
130 | struct crypto_async_request *req) | ||
131 | { | ||
132 | return container_of(req, struct ahash_request, base); | ||
133 | } | ||
134 | |||
135 | static inline void ahash_request_set_callback(struct ahash_request *req, | ||
136 | u32 flags, | ||
137 | crypto_completion_t complete, | ||
138 | void *data) | ||
139 | { | ||
140 | req->base.complete = complete; | ||
141 | req->base.data = data; | ||
142 | req->base.flags = flags; | ||
143 | } | ||
144 | |||
145 | static inline void ahash_request_set_crypt(struct ahash_request *req, | ||
146 | struct scatterlist *src, u8 *result, | ||
147 | unsigned int nbytes) | ||
148 | { | ||
149 | req->src = src; | ||
150 | req->nbytes = nbytes; | ||
151 | req->result = result; | ||
152 | } | ||
153 | |||
154 | #endif /* _CRYPTO_HASH_H */ | ||
diff --git a/include/crypto/internal/hash.h b/include/crypto/internal/hash.h new file mode 100644 index 000000000000..917ae57bad4a --- /dev/null +++ b/include/crypto/internal/hash.h | |||
@@ -0,0 +1,78 @@ | |||
1 | /* | ||
2 | * Hash algorithms. | ||
3 | * | ||
4 | * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the Free | ||
8 | * Software Foundation; either version 2 of the License, or (at your option) | ||
9 | * any later version. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifndef _CRYPTO_INTERNAL_HASH_H | ||
14 | #define _CRYPTO_INTERNAL_HASH_H | ||
15 | |||
16 | #include <crypto/algapi.h> | ||
17 | #include <crypto/hash.h> | ||
18 | |||
19 | struct ahash_request; | ||
20 | struct scatterlist; | ||
21 | |||
22 | struct crypto_hash_walk { | ||
23 | char *data; | ||
24 | |||
25 | unsigned int offset; | ||
26 | unsigned int alignmask; | ||
27 | |||
28 | struct page *pg; | ||
29 | unsigned int entrylen; | ||
30 | |||
31 | unsigned int total; | ||
32 | struct scatterlist *sg; | ||
33 | |||
34 | unsigned int flags; | ||
35 | }; | ||
36 | |||
37 | extern const struct crypto_type crypto_ahash_type; | ||
38 | |||
39 | int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err); | ||
40 | int crypto_hash_walk_first(struct ahash_request *req, | ||
41 | struct crypto_hash_walk *walk); | ||
42 | |||
43 | static inline void *crypto_ahash_ctx(struct crypto_ahash *tfm) | ||
44 | { | ||
45 | return crypto_tfm_ctx(&tfm->base); | ||
46 | } | ||
47 | |||
48 | static inline struct ahash_alg *crypto_ahash_alg( | ||
49 | struct crypto_ahash *tfm) | ||
50 | { | ||
51 | return &crypto_ahash_tfm(tfm)->__crt_alg->cra_ahash; | ||
52 | } | ||
53 | |||
54 | static inline int ahash_enqueue_request(struct crypto_queue *queue, | ||
55 | struct ahash_request *request) | ||
56 | { | ||
57 | return crypto_enqueue_request(queue, &request->base); | ||
58 | } | ||
59 | |||
60 | static inline struct ahash_request *ahash_dequeue_request( | ||
61 | struct crypto_queue *queue) | ||
62 | { | ||
63 | return ahash_request_cast(crypto_dequeue_request(queue)); | ||
64 | } | ||
65 | |||
66 | static inline void *ahash_request_ctx(struct ahash_request *req) | ||
67 | { | ||
68 | return req->__ctx; | ||
69 | } | ||
70 | |||
71 | static inline int ahash_tfm_in_queue(struct crypto_queue *queue, | ||
72 | struct crypto_ahash *tfm) | ||
73 | { | ||
74 | return crypto_tfm_in_queue(queue, crypto_ahash_tfm(tfm)); | ||
75 | } | ||
76 | |||
77 | #endif /* _CRYPTO_INTERNAL_HASH_H */ | ||
78 | |||
diff --git a/include/drm/Kbuild b/include/drm/Kbuild new file mode 100644 index 000000000000..82b6983b7fbb --- /dev/null +++ b/include/drm/Kbuild | |||
@@ -0,0 +1,10 @@ | |||
1 | unifdef-y += drm.h drm_sarea.h | ||
2 | unifdef-y += i810_drm.h | ||
3 | unifdef-y += i830_drm.h | ||
4 | unifdef-y += i915_drm.h | ||
5 | unifdef-y += mga_drm.h | ||
6 | unifdef-y += r128_drm.h | ||
7 | unifdef-y += radeon_drm.h | ||
8 | unifdef-y += sis_drm.h | ||
9 | unifdef-y += savage_drm.h | ||
10 | unifdef-y += via_drm.h | ||
diff --git a/include/drm/drm.h b/include/drm/drm.h new file mode 100644 index 000000000000..38d3c6b8276a --- /dev/null +++ b/include/drm/drm.h | |||
@@ -0,0 +1,694 @@ | |||
1 | /** | ||
2 | * \file drm.h | ||
3 | * Header for the Direct Rendering Manager | ||
4 | * | ||
5 | * \author Rickard E. (Rik) Faith <faith@valinux.com> | ||
6 | * | ||
7 | * \par Acknowledgments: | ||
8 | * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic \c cmpxchg. | ||
9 | */ | ||
10 | |||
11 | /* | ||
12 | * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. | ||
13 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | ||
14 | * All rights reserved. | ||
15 | * | ||
16 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
17 | * copy of this software and associated documentation files (the "Software"), | ||
18 | * to deal in the Software without restriction, including without limitation | ||
19 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
20 | * and/or sell copies of the Software, and to permit persons to whom the | ||
21 | * Software is furnished to do so, subject to the following conditions: | ||
22 | * | ||
23 | * The above copyright notice and this permission notice (including the next | ||
24 | * paragraph) shall be included in all copies or substantial portions of the | ||
25 | * Software. | ||
26 | * | ||
27 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
28 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
29 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
30 | * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
31 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
32 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
33 | * OTHER DEALINGS IN THE SOFTWARE. | ||
34 | */ | ||
35 | |||
36 | #ifndef _DRM_H_ | ||
37 | #define _DRM_H_ | ||
38 | |||
39 | #if defined(__linux__) | ||
40 | #if defined(__KERNEL__) | ||
41 | #endif | ||
42 | #include <asm/ioctl.h> /* For _IO* macros */ | ||
43 | #define DRM_IOCTL_NR(n) _IOC_NR(n) | ||
44 | #define DRM_IOC_VOID _IOC_NONE | ||
45 | #define DRM_IOC_READ _IOC_READ | ||
46 | #define DRM_IOC_WRITE _IOC_WRITE | ||
47 | #define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE | ||
48 | #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) | ||
49 | #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) | ||
50 | #if defined(__FreeBSD__) && defined(IN_MODULE) | ||
51 | /* Prevent name collision when including sys/ioccom.h */ | ||
52 | #undef ioctl | ||
53 | #include <sys/ioccom.h> | ||
54 | #define ioctl(a,b,c) xf86ioctl(a,b,c) | ||
55 | #else | ||
56 | #include <sys/ioccom.h> | ||
57 | #endif /* __FreeBSD__ && xf86ioctl */ | ||
58 | #define DRM_IOCTL_NR(n) ((n) & 0xff) | ||
59 | #define DRM_IOC_VOID IOC_VOID | ||
60 | #define DRM_IOC_READ IOC_OUT | ||
61 | #define DRM_IOC_WRITE IOC_IN | ||
62 | #define DRM_IOC_READWRITE IOC_INOUT | ||
63 | #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) | ||
64 | #endif | ||
65 | |||
66 | #define DRM_MAJOR 226 | ||
67 | #define DRM_MAX_MINOR 15 | ||
68 | |||
69 | #define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */ | ||
70 | #define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */ | ||
71 | #define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */ | ||
72 | #define DRM_RAM_PERCENT 10 /**< How much system ram can we lock? */ | ||
73 | |||
74 | #define _DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ | ||
75 | #define _DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ | ||
76 | #define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD) | ||
77 | #define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT) | ||
78 | #define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT)) | ||
79 | |||
80 | typedef unsigned int drm_handle_t; | ||
81 | typedef unsigned int drm_context_t; | ||
82 | typedef unsigned int drm_drawable_t; | ||
83 | typedef unsigned int drm_magic_t; | ||
84 | |||
85 | /** | ||
86 | * Cliprect. | ||
87 | * | ||
88 | * \warning: If you change this structure, make sure you change | ||
89 | * XF86DRIClipRectRec in the server as well | ||
90 | * | ||
91 | * \note KW: Actually it's illegal to change either for | ||
92 | * backwards-compatibility reasons. | ||
93 | */ | ||
94 | struct drm_clip_rect { | ||
95 | unsigned short x1; | ||
96 | unsigned short y1; | ||
97 | unsigned short x2; | ||
98 | unsigned short y2; | ||
99 | }; | ||
100 | |||
101 | /** | ||
102 | * Drawable information. | ||
103 | */ | ||
104 | struct drm_drawable_info { | ||
105 | unsigned int num_rects; | ||
106 | struct drm_clip_rect *rects; | ||
107 | }; | ||
108 | |||
109 | /** | ||
110 | * Texture region, | ||
111 | */ | ||
112 | struct drm_tex_region { | ||
113 | unsigned char next; | ||
114 | unsigned char prev; | ||
115 | unsigned char in_use; | ||
116 | unsigned char padding; | ||
117 | unsigned int age; | ||
118 | }; | ||
119 | |||
120 | /** | ||
121 | * Hardware lock. | ||
122 | * | ||
123 | * The lock structure is a simple cache-line aligned integer. To avoid | ||
124 | * processor bus contention on a multiprocessor system, there should not be any | ||
125 | * other data stored in the same cache line. | ||
126 | */ | ||
127 | struct drm_hw_lock { | ||
128 | __volatile__ unsigned int lock; /**< lock variable */ | ||
129 | char padding[60]; /**< Pad to cache line */ | ||
130 | }; | ||
131 | |||
132 | /** | ||
133 | * DRM_IOCTL_VERSION ioctl argument type. | ||
134 | * | ||
135 | * \sa drmGetVersion(). | ||
136 | */ | ||
137 | struct drm_version { | ||
138 | int version_major; /**< Major version */ | ||
139 | int version_minor; /**< Minor version */ | ||
140 | int version_patchlevel; /**< Patch level */ | ||
141 | size_t name_len; /**< Length of name buffer */ | ||
142 | char __user *name; /**< Name of driver */ | ||
143 | size_t date_len; /**< Length of date buffer */ | ||
144 | char __user *date; /**< User-space buffer to hold date */ | ||
145 | size_t desc_len; /**< Length of desc buffer */ | ||
146 | char __user *desc; /**< User-space buffer to hold desc */ | ||
147 | }; | ||
148 | |||
149 | /** | ||
150 | * DRM_IOCTL_GET_UNIQUE ioctl argument type. | ||
151 | * | ||
152 | * \sa drmGetBusid() and drmSetBusId(). | ||
153 | */ | ||
154 | struct drm_unique { | ||
155 | size_t unique_len; /**< Length of unique */ | ||
156 | char __user *unique; /**< Unique name for driver instantiation */ | ||
157 | }; | ||
158 | |||
159 | struct drm_list { | ||
160 | int count; /**< Length of user-space structures */ | ||
161 | struct drm_version __user *version; | ||
162 | }; | ||
163 | |||
164 | struct drm_block { | ||
165 | int unused; | ||
166 | }; | ||
167 | |||
168 | /** | ||
169 | * DRM_IOCTL_CONTROL ioctl argument type. | ||
170 | * | ||
171 | * \sa drmCtlInstHandler() and drmCtlUninstHandler(). | ||
172 | */ | ||
173 | struct drm_control { | ||
174 | enum { | ||
175 | DRM_ADD_COMMAND, | ||
176 | DRM_RM_COMMAND, | ||
177 | DRM_INST_HANDLER, | ||
178 | DRM_UNINST_HANDLER | ||
179 | } func; | ||
180 | int irq; | ||
181 | }; | ||
182 | |||
183 | /** | ||
184 | * Type of memory to map. | ||
185 | */ | ||
186 | enum drm_map_type { | ||
187 | _DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */ | ||
188 | _DRM_REGISTERS = 1, /**< no caching, no core dump */ | ||
189 | _DRM_SHM = 2, /**< shared, cached */ | ||
190 | _DRM_AGP = 3, /**< AGP/GART */ | ||
191 | _DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */ | ||
192 | _DRM_CONSISTENT = 5, /**< Consistent memory for PCI DMA */ | ||
193 | }; | ||
194 | |||
195 | /** | ||
196 | * Memory mapping flags. | ||
197 | */ | ||
198 | enum drm_map_flags { | ||
199 | _DRM_RESTRICTED = 0x01, /**< Cannot be mapped to user-virtual */ | ||
200 | _DRM_READ_ONLY = 0x02, | ||
201 | _DRM_LOCKED = 0x04, /**< shared, cached, locked */ | ||
202 | _DRM_KERNEL = 0x08, /**< kernel requires access */ | ||
203 | _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */ | ||
204 | _DRM_CONTAINS_LOCK = 0x20, /**< SHM page that contains lock */ | ||
205 | _DRM_REMOVABLE = 0x40, /**< Removable mapping */ | ||
206 | _DRM_DRIVER = 0x80 /**< Managed by driver */ | ||
207 | }; | ||
208 | |||
209 | struct drm_ctx_priv_map { | ||
210 | unsigned int ctx_id; /**< Context requesting private mapping */ | ||
211 | void *handle; /**< Handle of map */ | ||
212 | }; | ||
213 | |||
214 | /** | ||
215 | * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls | ||
216 | * argument type. | ||
217 | * | ||
218 | * \sa drmAddMap(). | ||
219 | */ | ||
220 | struct drm_map { | ||
221 | unsigned long offset; /**< Requested physical address (0 for SAREA)*/ | ||
222 | unsigned long size; /**< Requested physical size (bytes) */ | ||
223 | enum drm_map_type type; /**< Type of memory to map */ | ||
224 | enum drm_map_flags flags; /**< Flags */ | ||
225 | void *handle; /**< User-space: "Handle" to pass to mmap() */ | ||
226 | /**< Kernel-space: kernel-virtual address */ | ||
227 | int mtrr; /**< MTRR slot used */ | ||
228 | /* Private data */ | ||
229 | }; | ||
230 | |||
231 | /** | ||
232 | * DRM_IOCTL_GET_CLIENT ioctl argument type. | ||
233 | */ | ||
234 | struct drm_client { | ||
235 | int idx; /**< Which client desired? */ | ||
236 | int auth; /**< Is client authenticated? */ | ||
237 | unsigned long pid; /**< Process ID */ | ||
238 | unsigned long uid; /**< User ID */ | ||
239 | unsigned long magic; /**< Magic */ | ||
240 | unsigned long iocs; /**< Ioctl count */ | ||
241 | }; | ||
242 | |||
243 | enum drm_stat_type { | ||
244 | _DRM_STAT_LOCK, | ||
245 | _DRM_STAT_OPENS, | ||
246 | _DRM_STAT_CLOSES, | ||
247 | _DRM_STAT_IOCTLS, | ||
248 | _DRM_STAT_LOCKS, | ||
249 | _DRM_STAT_UNLOCKS, | ||
250 | _DRM_STAT_VALUE, /**< Generic value */ | ||
251 | _DRM_STAT_BYTE, /**< Generic byte counter (1024bytes/K) */ | ||
252 | _DRM_STAT_COUNT, /**< Generic non-byte counter (1000/k) */ | ||
253 | |||
254 | _DRM_STAT_IRQ, /**< IRQ */ | ||
255 | _DRM_STAT_PRIMARY, /**< Primary DMA bytes */ | ||
256 | _DRM_STAT_SECONDARY, /**< Secondary DMA bytes */ | ||
257 | _DRM_STAT_DMA, /**< DMA */ | ||
258 | _DRM_STAT_SPECIAL, /**< Special DMA (e.g., priority or polled) */ | ||
259 | _DRM_STAT_MISSED /**< Missed DMA opportunity */ | ||
260 | /* Add to the *END* of the list */ | ||
261 | }; | ||
262 | |||
263 | /** | ||
264 | * DRM_IOCTL_GET_STATS ioctl argument type. | ||
265 | */ | ||
266 | struct drm_stats { | ||
267 | unsigned long count; | ||
268 | struct { | ||
269 | unsigned long value; | ||
270 | enum drm_stat_type type; | ||
271 | } data[15]; | ||
272 | }; | ||
273 | |||
274 | /** | ||
275 | * Hardware locking flags. | ||
276 | */ | ||
277 | enum drm_lock_flags { | ||
278 | _DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ | ||
279 | _DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ | ||
280 | _DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ | ||
281 | _DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ | ||
282 | /* These *HALT* flags aren't supported yet | ||
283 | -- they will be used to support the | ||
284 | full-screen DGA-like mode. */ | ||
285 | _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ | ||
286 | _DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ | ||
287 | }; | ||
288 | |||
289 | /** | ||
290 | * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type. | ||
291 | * | ||
292 | * \sa drmGetLock() and drmUnlock(). | ||
293 | */ | ||
294 | struct drm_lock { | ||
295 | int context; | ||
296 | enum drm_lock_flags flags; | ||
297 | }; | ||
298 | |||
299 | /** | ||
300 | * DMA flags | ||
301 | * | ||
302 | * \warning | ||
303 | * These values \e must match xf86drm.h. | ||
304 | * | ||
305 | * \sa drm_dma. | ||
306 | */ | ||
307 | enum drm_dma_flags { | ||
308 | /* Flags for DMA buffer dispatch */ | ||
309 | _DRM_DMA_BLOCK = 0x01, /**< | ||
310 | * Block until buffer dispatched. | ||
311 | * | ||
312 | * \note The buffer may not yet have | ||
313 | * been processed by the hardware -- | ||
314 | * getting a hardware lock with the | ||
315 | * hardware quiescent will ensure | ||
316 | * that the buffer has been | ||
317 | * processed. | ||
318 | */ | ||
319 | _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ | ||
320 | _DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ | ||
321 | |||
322 | /* Flags for DMA buffer request */ | ||
323 | _DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ | ||
324 | _DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ | ||
325 | _DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ | ||
326 | }; | ||
327 | |||
328 | /** | ||
329 | * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type. | ||
330 | * | ||
331 | * \sa drmAddBufs(). | ||
332 | */ | ||
333 | struct drm_buf_desc { | ||
334 | int count; /**< Number of buffers of this size */ | ||
335 | int size; /**< Size in bytes */ | ||
336 | int low_mark; /**< Low water mark */ | ||
337 | int high_mark; /**< High water mark */ | ||
338 | enum { | ||
339 | _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */ | ||
340 | _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */ | ||
341 | _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */ | ||
342 | _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */ | ||
343 | _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */ | ||
344 | } flags; | ||
345 | unsigned long agp_start; /**< | ||
346 | * Start address of where the AGP buffers are | ||
347 | * in the AGP aperture | ||
348 | */ | ||
349 | }; | ||
350 | |||
351 | /** | ||
352 | * DRM_IOCTL_INFO_BUFS ioctl argument type. | ||
353 | */ | ||
354 | struct drm_buf_info { | ||
355 | int count; /**< Entries in list */ | ||
356 | struct drm_buf_desc __user *list; | ||
357 | }; | ||
358 | |||
359 | /** | ||
360 | * DRM_IOCTL_FREE_BUFS ioctl argument type. | ||
361 | */ | ||
362 | struct drm_buf_free { | ||
363 | int count; | ||
364 | int __user *list; | ||
365 | }; | ||
366 | |||
367 | /** | ||
368 | * Buffer information | ||
369 | * | ||
370 | * \sa drm_buf_map. | ||
371 | */ | ||
372 | struct drm_buf_pub { | ||
373 | int idx; /**< Index into the master buffer list */ | ||
374 | int total; /**< Buffer size */ | ||
375 | int used; /**< Amount of buffer in use (for DMA) */ | ||
376 | void __user *address; /**< Address of buffer */ | ||
377 | }; | ||
378 | |||
379 | /** | ||
380 | * DRM_IOCTL_MAP_BUFS ioctl argument type. | ||
381 | */ | ||
382 | struct drm_buf_map { | ||
383 | int count; /**< Length of the buffer list */ | ||
384 | void __user *virtual; /**< Mmap'd area in user-virtual */ | ||
385 | struct drm_buf_pub __user *list; /**< Buffer information */ | ||
386 | }; | ||
387 | |||
388 | /** | ||
389 | * DRM_IOCTL_DMA ioctl argument type. | ||
390 | * | ||
391 | * Indices here refer to the offset into the buffer list in drm_buf_get. | ||
392 | * | ||
393 | * \sa drmDMA(). | ||
394 | */ | ||
395 | struct drm_dma { | ||
396 | int context; /**< Context handle */ | ||
397 | int send_count; /**< Number of buffers to send */ | ||
398 | int __user *send_indices; /**< List of handles to buffers */ | ||
399 | int __user *send_sizes; /**< Lengths of data to send */ | ||
400 | enum drm_dma_flags flags; /**< Flags */ | ||
401 | int request_count; /**< Number of buffers requested */ | ||
402 | int request_size; /**< Desired size for buffers */ | ||
403 | int __user *request_indices; /**< Buffer information */ | ||
404 | int __user *request_sizes; | ||
405 | int granted_count; /**< Number of buffers granted */ | ||
406 | }; | ||
407 | |||
408 | enum drm_ctx_flags { | ||
409 | _DRM_CONTEXT_PRESERVED = 0x01, | ||
410 | _DRM_CONTEXT_2DONLY = 0x02 | ||
411 | }; | ||
412 | |||
413 | /** | ||
414 | * DRM_IOCTL_ADD_CTX ioctl argument type. | ||
415 | * | ||
416 | * \sa drmCreateContext() and drmDestroyContext(). | ||
417 | */ | ||
418 | struct drm_ctx { | ||
419 | drm_context_t handle; | ||
420 | enum drm_ctx_flags flags; | ||
421 | }; | ||
422 | |||
423 | /** | ||
424 | * DRM_IOCTL_RES_CTX ioctl argument type. | ||
425 | */ | ||
426 | struct drm_ctx_res { | ||
427 | int count; | ||
428 | struct drm_ctx __user *contexts; | ||
429 | }; | ||
430 | |||
431 | /** | ||
432 | * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type. | ||
433 | */ | ||
434 | struct drm_draw { | ||
435 | drm_drawable_t handle; | ||
436 | }; | ||
437 | |||
438 | /** | ||
439 | * DRM_IOCTL_UPDATE_DRAW ioctl argument type. | ||
440 | */ | ||
441 | typedef enum { | ||
442 | DRM_DRAWABLE_CLIPRECTS, | ||
443 | } drm_drawable_info_type_t; | ||
444 | |||
445 | struct drm_update_draw { | ||
446 | drm_drawable_t handle; | ||
447 | unsigned int type; | ||
448 | unsigned int num; | ||
449 | unsigned long long data; | ||
450 | }; | ||
451 | |||
452 | /** | ||
453 | * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type. | ||
454 | */ | ||
455 | struct drm_auth { | ||
456 | drm_magic_t magic; | ||
457 | }; | ||
458 | |||
459 | /** | ||
460 | * DRM_IOCTL_IRQ_BUSID ioctl argument type. | ||
461 | * | ||
462 | * \sa drmGetInterruptFromBusID(). | ||
463 | */ | ||
464 | struct drm_irq_busid { | ||
465 | int irq; /**< IRQ number */ | ||
466 | int busnum; /**< bus number */ | ||
467 | int devnum; /**< device number */ | ||
468 | int funcnum; /**< function number */ | ||
469 | }; | ||
470 | |||
471 | enum drm_vblank_seq_type { | ||
472 | _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ | ||
473 | _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ | ||
474 | _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ | ||
475 | _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ | ||
476 | _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking */ | ||
477 | }; | ||
478 | |||
479 | #define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE) | ||
480 | #define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_SIGNAL | _DRM_VBLANK_SECONDARY | \ | ||
481 | _DRM_VBLANK_NEXTONMISS) | ||
482 | |||
483 | struct drm_wait_vblank_request { | ||
484 | enum drm_vblank_seq_type type; | ||
485 | unsigned int sequence; | ||
486 | unsigned long signal; | ||
487 | }; | ||
488 | |||
489 | struct drm_wait_vblank_reply { | ||
490 | enum drm_vblank_seq_type type; | ||
491 | unsigned int sequence; | ||
492 | long tval_sec; | ||
493 | long tval_usec; | ||
494 | }; | ||
495 | |||
496 | /** | ||
497 | * DRM_IOCTL_WAIT_VBLANK ioctl argument type. | ||
498 | * | ||
499 | * \sa drmWaitVBlank(). | ||
500 | */ | ||
501 | union drm_wait_vblank { | ||
502 | struct drm_wait_vblank_request request; | ||
503 | struct drm_wait_vblank_reply reply; | ||
504 | }; | ||
505 | |||
506 | /** | ||
507 | * DRM_IOCTL_AGP_ENABLE ioctl argument type. | ||
508 | * | ||
509 | * \sa drmAgpEnable(). | ||
510 | */ | ||
511 | struct drm_agp_mode { | ||
512 | unsigned long mode; /**< AGP mode */ | ||
513 | }; | ||
514 | |||
515 | /** | ||
516 | * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type. | ||
517 | * | ||
518 | * \sa drmAgpAlloc() and drmAgpFree(). | ||
519 | */ | ||
520 | struct drm_agp_buffer { | ||
521 | unsigned long size; /**< In bytes -- will round to page boundary */ | ||
522 | unsigned long handle; /**< Used for binding / unbinding */ | ||
523 | unsigned long type; /**< Type of memory to allocate */ | ||
524 | unsigned long physical; /**< Physical used by i810 */ | ||
525 | }; | ||
526 | |||
527 | /** | ||
528 | * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type. | ||
529 | * | ||
530 | * \sa drmAgpBind() and drmAgpUnbind(). | ||
531 | */ | ||
532 | struct drm_agp_binding { | ||
533 | unsigned long handle; /**< From drm_agp_buffer */ | ||
534 | unsigned long offset; /**< In bytes -- will round to page boundary */ | ||
535 | }; | ||
536 | |||
537 | /** | ||
538 | * DRM_IOCTL_AGP_INFO ioctl argument type. | ||
539 | * | ||
540 | * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(), | ||
541 | * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(), | ||
542 | * drmAgpVendorId() and drmAgpDeviceId(). | ||
543 | */ | ||
544 | struct drm_agp_info { | ||
545 | int agp_version_major; | ||
546 | int agp_version_minor; | ||
547 | unsigned long mode; | ||
548 | unsigned long aperture_base; /* physical address */ | ||
549 | unsigned long aperture_size; /* bytes */ | ||
550 | unsigned long memory_allowed; /* bytes */ | ||
551 | unsigned long memory_used; | ||
552 | |||
553 | /* PCI information */ | ||
554 | unsigned short id_vendor; | ||
555 | unsigned short id_device; | ||
556 | }; | ||
557 | |||
558 | /** | ||
559 | * DRM_IOCTL_SG_ALLOC ioctl argument type. | ||
560 | */ | ||
561 | struct drm_scatter_gather { | ||
562 | unsigned long size; /**< In bytes -- will round to page boundary */ | ||
563 | unsigned long handle; /**< Used for mapping / unmapping */ | ||
564 | }; | ||
565 | |||
566 | /** | ||
567 | * DRM_IOCTL_SET_VERSION ioctl argument type. | ||
568 | */ | ||
569 | struct drm_set_version { | ||
570 | int drm_di_major; | ||
571 | int drm_di_minor; | ||
572 | int drm_dd_major; | ||
573 | int drm_dd_minor; | ||
574 | }; | ||
575 | |||
576 | #define DRM_IOCTL_BASE 'd' | ||
577 | #define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) | ||
578 | #define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) | ||
579 | #define DRM_IOW(nr,type) _IOW(DRM_IOCTL_BASE,nr,type) | ||
580 | #define DRM_IOWR(nr,type) _IOWR(DRM_IOCTL_BASE,nr,type) | ||
581 | |||
582 | #define DRM_IOCTL_VERSION DRM_IOWR(0x00, struct drm_version) | ||
583 | #define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, struct drm_unique) | ||
584 | #define DRM_IOCTL_GET_MAGIC DRM_IOR( 0x02, struct drm_auth) | ||
585 | #define DRM_IOCTL_IRQ_BUSID DRM_IOWR(0x03, struct drm_irq_busid) | ||
586 | #define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, struct drm_map) | ||
587 | #define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client) | ||
588 | #define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats) | ||
589 | #define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version) | ||
590 | |||
591 | #define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique) | ||
592 | #define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth) | ||
593 | #define DRM_IOCTL_BLOCK DRM_IOWR(0x12, struct drm_block) | ||
594 | #define DRM_IOCTL_UNBLOCK DRM_IOWR(0x13, struct drm_block) | ||
595 | #define DRM_IOCTL_CONTROL DRM_IOW( 0x14, struct drm_control) | ||
596 | #define DRM_IOCTL_ADD_MAP DRM_IOWR(0x15, struct drm_map) | ||
597 | #define DRM_IOCTL_ADD_BUFS DRM_IOWR(0x16, struct drm_buf_desc) | ||
598 | #define DRM_IOCTL_MARK_BUFS DRM_IOW( 0x17, struct drm_buf_desc) | ||
599 | #define DRM_IOCTL_INFO_BUFS DRM_IOWR(0x18, struct drm_buf_info) | ||
600 | #define DRM_IOCTL_MAP_BUFS DRM_IOWR(0x19, struct drm_buf_map) | ||
601 | #define DRM_IOCTL_FREE_BUFS DRM_IOW( 0x1a, struct drm_buf_free) | ||
602 | |||
603 | #define DRM_IOCTL_RM_MAP DRM_IOW( 0x1b, struct drm_map) | ||
604 | |||
605 | #define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map) | ||
606 | #define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map) | ||
607 | |||
608 | #define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx) | ||
609 | #define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx) | ||
610 | #define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx) | ||
611 | #define DRM_IOCTL_GET_CTX DRM_IOWR(0x23, struct drm_ctx) | ||
612 | #define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, struct drm_ctx) | ||
613 | #define DRM_IOCTL_NEW_CTX DRM_IOW( 0x25, struct drm_ctx) | ||
614 | #define DRM_IOCTL_RES_CTX DRM_IOWR(0x26, struct drm_ctx_res) | ||
615 | #define DRM_IOCTL_ADD_DRAW DRM_IOWR(0x27, struct drm_draw) | ||
616 | #define DRM_IOCTL_RM_DRAW DRM_IOWR(0x28, struct drm_draw) | ||
617 | #define DRM_IOCTL_DMA DRM_IOWR(0x29, struct drm_dma) | ||
618 | #define DRM_IOCTL_LOCK DRM_IOW( 0x2a, struct drm_lock) | ||
619 | #define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock) | ||
620 | #define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock) | ||
621 | |||
622 | #define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30) | ||
623 | #define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) | ||
624 | #define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) | ||
625 | #define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) | ||
626 | #define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) | ||
627 | #define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) | ||
628 | #define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) | ||
629 | #define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) | ||
630 | |||
631 | #define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) | ||
632 | #define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) | ||
633 | |||
634 | #define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) | ||
635 | |||
636 | #define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) | ||
637 | |||
638 | /** | ||
639 | * Device specific ioctls should only be in their respective headers | ||
640 | * The device specific ioctl range is from 0x40 to 0x99. | ||
641 | * Generic IOCTLS restart at 0xA0. | ||
642 | * | ||
643 | * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and | ||
644 | * drmCommandReadWrite(). | ||
645 | */ | ||
646 | #define DRM_COMMAND_BASE 0x40 | ||
647 | #define DRM_COMMAND_END 0xA0 | ||
648 | |||
649 | /* typedef area */ | ||
650 | #ifndef __KERNEL__ | ||
651 | typedef struct drm_clip_rect drm_clip_rect_t; | ||
652 | typedef struct drm_drawable_info drm_drawable_info_t; | ||
653 | typedef struct drm_tex_region drm_tex_region_t; | ||
654 | typedef struct drm_hw_lock drm_hw_lock_t; | ||
655 | typedef struct drm_version drm_version_t; | ||
656 | typedef struct drm_unique drm_unique_t; | ||
657 | typedef struct drm_list drm_list_t; | ||
658 | typedef struct drm_block drm_block_t; | ||
659 | typedef struct drm_control drm_control_t; | ||
660 | typedef enum drm_map_type drm_map_type_t; | ||
661 | typedef enum drm_map_flags drm_map_flags_t; | ||
662 | typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; | ||
663 | typedef struct drm_map drm_map_t; | ||
664 | typedef struct drm_client drm_client_t; | ||
665 | typedef enum drm_stat_type drm_stat_type_t; | ||
666 | typedef struct drm_stats drm_stats_t; | ||
667 | typedef enum drm_lock_flags drm_lock_flags_t; | ||
668 | typedef struct drm_lock drm_lock_t; | ||
669 | typedef enum drm_dma_flags drm_dma_flags_t; | ||
670 | typedef struct drm_buf_desc drm_buf_desc_t; | ||
671 | typedef struct drm_buf_info drm_buf_info_t; | ||
672 | typedef struct drm_buf_free drm_buf_free_t; | ||
673 | typedef struct drm_buf_pub drm_buf_pub_t; | ||
674 | typedef struct drm_buf_map drm_buf_map_t; | ||
675 | typedef struct drm_dma drm_dma_t; | ||
676 | typedef union drm_wait_vblank drm_wait_vblank_t; | ||
677 | typedef struct drm_agp_mode drm_agp_mode_t; | ||
678 | typedef enum drm_ctx_flags drm_ctx_flags_t; | ||
679 | typedef struct drm_ctx drm_ctx_t; | ||
680 | typedef struct drm_ctx_res drm_ctx_res_t; | ||
681 | typedef struct drm_draw drm_draw_t; | ||
682 | typedef struct drm_update_draw drm_update_draw_t; | ||
683 | typedef struct drm_auth drm_auth_t; | ||
684 | typedef struct drm_irq_busid drm_irq_busid_t; | ||
685 | typedef enum drm_vblank_seq_type drm_vblank_seq_type_t; | ||
686 | |||
687 | typedef struct drm_agp_buffer drm_agp_buffer_t; | ||
688 | typedef struct drm_agp_binding drm_agp_binding_t; | ||
689 | typedef struct drm_agp_info drm_agp_info_t; | ||
690 | typedef struct drm_scatter_gather drm_scatter_gather_t; | ||
691 | typedef struct drm_set_version drm_set_version_t; | ||
692 | #endif | ||
693 | |||
694 | #endif | ||
diff --git a/include/drm/drmP.h b/include/drm/drmP.h new file mode 100644 index 000000000000..1c1b13e29223 --- /dev/null +++ b/include/drm/drmP.h | |||
@@ -0,0 +1,1154 @@ | |||
1 | /** | ||
2 | * \file drmP.h | ||
3 | * Private header for Direct Rendering Manager | ||
4 | * | ||
5 | * \author Rickard E. (Rik) Faith <faith@valinux.com> | ||
6 | * \author Gareth Hughes <gareth@valinux.com> | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. | ||
11 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | ||
12 | * All rights reserved. | ||
13 | * | ||
14 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
15 | * copy of this software and associated documentation files (the "Software"), | ||
16 | * to deal in the Software without restriction, including without limitation | ||
17 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
18 | * and/or sell copies of the Software, and to permit persons to whom the | ||
19 | * Software is furnished to do so, subject to the following conditions: | ||
20 | * | ||
21 | * The above copyright notice and this permission notice (including the next | ||
22 | * paragraph) shall be included in all copies or substantial portions of the | ||
23 | * 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 | ||
28 | * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
29 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
30 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
31 | * OTHER DEALINGS IN THE SOFTWARE. | ||
32 | */ | ||
33 | |||
34 | #ifndef _DRM_P_H_ | ||
35 | #define _DRM_P_H_ | ||
36 | |||
37 | /* If you want the memory alloc debug functionality, change define below */ | ||
38 | /* #define DEBUG_MEMORY */ | ||
39 | |||
40 | #ifdef __KERNEL__ | ||
41 | #ifdef __alpha__ | ||
42 | /* add include of current.h so that "current" is defined | ||
43 | * before static inline funcs in wait.h. Doing this so we | ||
44 | * can build the DRM (part of PI DRI). 4/21/2000 S + B */ | ||
45 | #include <asm/current.h> | ||
46 | #endif /* __alpha__ */ | ||
47 | #include <linux/module.h> | ||
48 | #include <linux/kernel.h> | ||
49 | #include <linux/miscdevice.h> | ||
50 | #include <linux/fs.h> | ||
51 | #include <linux/proc_fs.h> | ||
52 | #include <linux/init.h> | ||
53 | #include <linux/file.h> | ||
54 | #include <linux/pci.h> | ||
55 | #include <linux/jiffies.h> | ||
56 | #include <linux/smp_lock.h> /* For (un)lock_kernel */ | ||
57 | #include <linux/dma-mapping.h> | ||
58 | #include <linux/mm.h> | ||
59 | #include <linux/cdev.h> | ||
60 | #include <linux/mutex.h> | ||
61 | #if defined(__alpha__) || defined(__powerpc__) | ||
62 | #include <asm/pgtable.h> /* For pte_wrprotect */ | ||
63 | #endif | ||
64 | #include <asm/io.h> | ||
65 | #include <asm/mman.h> | ||
66 | #include <asm/uaccess.h> | ||
67 | #ifdef CONFIG_MTRR | ||
68 | #include <asm/mtrr.h> | ||
69 | #endif | ||
70 | #if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE) | ||
71 | #include <linux/types.h> | ||
72 | #include <linux/agp_backend.h> | ||
73 | #endif | ||
74 | #include <linux/workqueue.h> | ||
75 | #include <linux/poll.h> | ||
76 | #include <asm/pgalloc.h> | ||
77 | #include "drm.h" | ||
78 | |||
79 | #include <linux/idr.h> | ||
80 | |||
81 | #define __OS_HAS_AGP (defined(CONFIG_AGP) || (defined(CONFIG_AGP_MODULE) && defined(MODULE))) | ||
82 | #define __OS_HAS_MTRR (defined(CONFIG_MTRR)) | ||
83 | |||
84 | struct drm_file; | ||
85 | struct drm_device; | ||
86 | |||
87 | #include "drm_os_linux.h" | ||
88 | #include "drm_hashtab.h" | ||
89 | |||
90 | /***********************************************************************/ | ||
91 | /** \name DRM template customization defaults */ | ||
92 | /*@{*/ | ||
93 | |||
94 | /* driver capabilities and requirements mask */ | ||
95 | #define DRIVER_USE_AGP 0x1 | ||
96 | #define DRIVER_REQUIRE_AGP 0x2 | ||
97 | #define DRIVER_USE_MTRR 0x4 | ||
98 | #define DRIVER_PCI_DMA 0x8 | ||
99 | #define DRIVER_SG 0x10 | ||
100 | #define DRIVER_HAVE_DMA 0x20 | ||
101 | #define DRIVER_HAVE_IRQ 0x40 | ||
102 | #define DRIVER_IRQ_SHARED 0x80 | ||
103 | #define DRIVER_IRQ_VBL 0x100 | ||
104 | #define DRIVER_DMA_QUEUE 0x200 | ||
105 | #define DRIVER_FB_DMA 0x400 | ||
106 | #define DRIVER_IRQ_VBL2 0x800 | ||
107 | |||
108 | /***********************************************************************/ | ||
109 | /** \name Begin the DRM... */ | ||
110 | /*@{*/ | ||
111 | |||
112 | #define DRM_DEBUG_CODE 2 /**< Include debugging code if > 1, then | ||
113 | also include looping detection. */ | ||
114 | |||
115 | #define DRM_MAGIC_HASH_ORDER 4 /**< Size of key hash table. Must be power of 2. */ | ||
116 | #define DRM_KERNEL_CONTEXT 0 /**< Change drm_resctx if changed */ | ||
117 | #define DRM_RESERVED_CONTEXTS 1 /**< Change drm_resctx if changed */ | ||
118 | #define DRM_LOOPING_LIMIT 5000000 | ||
119 | #define DRM_TIME_SLICE (HZ/20) /**< Time slice for GLXContexts */ | ||
120 | #define DRM_LOCK_SLICE 1 /**< Time slice for lock, in jiffies */ | ||
121 | |||
122 | #define DRM_FLAG_DEBUG 0x01 | ||
123 | |||
124 | #define DRM_MEM_DMA 0 | ||
125 | #define DRM_MEM_SAREA 1 | ||
126 | #define DRM_MEM_DRIVER 2 | ||
127 | #define DRM_MEM_MAGIC 3 | ||
128 | #define DRM_MEM_IOCTLS 4 | ||
129 | #define DRM_MEM_MAPS 5 | ||
130 | #define DRM_MEM_VMAS 6 | ||
131 | #define DRM_MEM_BUFS 7 | ||
132 | #define DRM_MEM_SEGS 8 | ||
133 | #define DRM_MEM_PAGES 9 | ||
134 | #define DRM_MEM_FILES 10 | ||
135 | #define DRM_MEM_QUEUES 11 | ||
136 | #define DRM_MEM_CMDS 12 | ||
137 | #define DRM_MEM_MAPPINGS 13 | ||
138 | #define DRM_MEM_BUFLISTS 14 | ||
139 | #define DRM_MEM_AGPLISTS 15 | ||
140 | #define DRM_MEM_TOTALAGP 16 | ||
141 | #define DRM_MEM_BOUNDAGP 17 | ||
142 | #define DRM_MEM_CTXBITMAP 18 | ||
143 | #define DRM_MEM_STUB 19 | ||
144 | #define DRM_MEM_SGLISTS 20 | ||
145 | #define DRM_MEM_CTXLIST 21 | ||
146 | #define DRM_MEM_MM 22 | ||
147 | #define DRM_MEM_HASHTAB 23 | ||
148 | |||
149 | #define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8) | ||
150 | #define DRM_MAP_HASH_OFFSET 0x10000000 | ||
151 | |||
152 | /*@}*/ | ||
153 | |||
154 | /***********************************************************************/ | ||
155 | /** \name Macros to make printk easier */ | ||
156 | /*@{*/ | ||
157 | |||
158 | /** | ||
159 | * Error output. | ||
160 | * | ||
161 | * \param fmt printf() like format string. | ||
162 | * \param arg arguments | ||
163 | */ | ||
164 | #define DRM_ERROR(fmt, arg...) \ | ||
165 | printk(KERN_ERR "[" DRM_NAME ":%s] *ERROR* " fmt , __func__ , ##arg) | ||
166 | |||
167 | /** | ||
168 | * Memory error output. | ||
169 | * | ||
170 | * \param area memory area where the error occurred. | ||
171 | * \param fmt printf() like format string. | ||
172 | * \param arg arguments | ||
173 | */ | ||
174 | #define DRM_MEM_ERROR(area, fmt, arg...) \ | ||
175 | printk(KERN_ERR "[" DRM_NAME ":%s:%s] *ERROR* " fmt , __func__, \ | ||
176 | drm_mem_stats[area].name , ##arg) | ||
177 | |||
178 | #define DRM_INFO(fmt, arg...) printk(KERN_INFO "[" DRM_NAME "] " fmt , ##arg) | ||
179 | |||
180 | /** | ||
181 | * Debug output. | ||
182 | * | ||
183 | * \param fmt printf() like format string. | ||
184 | * \param arg arguments | ||
185 | */ | ||
186 | #if DRM_DEBUG_CODE | ||
187 | #define DRM_DEBUG(fmt, arg...) \ | ||
188 | do { \ | ||
189 | if ( drm_debug ) \ | ||
190 | printk(KERN_DEBUG \ | ||
191 | "[" DRM_NAME ":%s] " fmt , \ | ||
192 | __func__ , ##arg); \ | ||
193 | } while (0) | ||
194 | #else | ||
195 | #define DRM_DEBUG(fmt, arg...) do { } while (0) | ||
196 | #endif | ||
197 | |||
198 | #define DRM_PROC_LIMIT (PAGE_SIZE-80) | ||
199 | |||
200 | #define DRM_PROC_PRINT(fmt, arg...) \ | ||
201 | len += sprintf(&buf[len], fmt , ##arg); \ | ||
202 | if (len > DRM_PROC_LIMIT) { *eof = 1; return len - offset; } | ||
203 | |||
204 | #define DRM_PROC_PRINT_RET(ret, fmt, arg...) \ | ||
205 | len += sprintf(&buf[len], fmt , ##arg); \ | ||
206 | if (len > DRM_PROC_LIMIT) { ret; *eof = 1; return len - offset; } | ||
207 | |||
208 | /*@}*/ | ||
209 | |||
210 | /***********************************************************************/ | ||
211 | /** \name Internal types and structures */ | ||
212 | /*@{*/ | ||
213 | |||
214 | #define DRM_ARRAY_SIZE(x) ARRAY_SIZE(x) | ||
215 | |||
216 | #define DRM_LEFTCOUNT(x) (((x)->rp + (x)->count - (x)->wp) % ((x)->count + 1)) | ||
217 | #define DRM_BUFCOUNT(x) ((x)->count - DRM_LEFTCOUNT(x)) | ||
218 | #define DRM_WAITCOUNT(dev,idx) DRM_BUFCOUNT(&dev->queuelist[idx]->waitlist) | ||
219 | |||
220 | #define DRM_IF_VERSION(maj, min) (maj << 16 | min) | ||
221 | /** | ||
222 | * Get the private SAREA mapping. | ||
223 | * | ||
224 | * \param _dev DRM device. | ||
225 | * \param _ctx context number. | ||
226 | * \param _map output mapping. | ||
227 | */ | ||
228 | #define DRM_GET_PRIV_SAREA(_dev, _ctx, _map) do { \ | ||
229 | (_map) = (_dev)->context_sareas[_ctx]; \ | ||
230 | } while(0) | ||
231 | |||
232 | /** | ||
233 | * Test that the hardware lock is held by the caller, returning otherwise. | ||
234 | * | ||
235 | * \param dev DRM device. | ||
236 | * \param filp file pointer of the caller. | ||
237 | */ | ||
238 | #define LOCK_TEST_WITH_RETURN( dev, file_priv ) \ | ||
239 | do { \ | ||
240 | if ( !_DRM_LOCK_IS_HELD( dev->lock.hw_lock->lock ) || \ | ||
241 | dev->lock.file_priv != file_priv ) { \ | ||
242 | DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\ | ||
243 | __func__, _DRM_LOCK_IS_HELD( dev->lock.hw_lock->lock ),\ | ||
244 | dev->lock.file_priv, file_priv ); \ | ||
245 | return -EINVAL; \ | ||
246 | } \ | ||
247 | } while (0) | ||
248 | |||
249 | /** | ||
250 | * Copy and IOCTL return string to user space | ||
251 | */ | ||
252 | #define DRM_COPY( name, value ) \ | ||
253 | len = strlen( value ); \ | ||
254 | if ( len > name##_len ) len = name##_len; \ | ||
255 | name##_len = strlen( value ); \ | ||
256 | if ( len && name ) { \ | ||
257 | if ( copy_to_user( name, value, len ) ) \ | ||
258 | return -EFAULT; \ | ||
259 | } | ||
260 | |||
261 | /** | ||
262 | * Ioctl function type. | ||
263 | * | ||
264 | * \param inode device inode. | ||
265 | * \param file_priv DRM file private pointer. | ||
266 | * \param cmd command. | ||
267 | * \param arg argument. | ||
268 | */ | ||
269 | typedef int drm_ioctl_t(struct drm_device *dev, void *data, | ||
270 | struct drm_file *file_priv); | ||
271 | |||
272 | typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, | ||
273 | unsigned long arg); | ||
274 | |||
275 | #define DRM_AUTH 0x1 | ||
276 | #define DRM_MASTER 0x2 | ||
277 | #define DRM_ROOT_ONLY 0x4 | ||
278 | |||
279 | struct drm_ioctl_desc { | ||
280 | unsigned int cmd; | ||
281 | drm_ioctl_t *func; | ||
282 | int flags; | ||
283 | }; | ||
284 | |||
285 | /** | ||
286 | * Creates a driver or general drm_ioctl_desc array entry for the given | ||
287 | * ioctl, for use by drm_ioctl(). | ||
288 | */ | ||
289 | #define DRM_IOCTL_DEF(ioctl, func, flags) \ | ||
290 | [DRM_IOCTL_NR(ioctl)] = {ioctl, func, flags} | ||
291 | |||
292 | struct drm_magic_entry { | ||
293 | struct list_head head; | ||
294 | struct drm_hash_item hash_item; | ||
295 | struct drm_file *priv; | ||
296 | }; | ||
297 | |||
298 | struct drm_vma_entry { | ||
299 | struct list_head head; | ||
300 | struct vm_area_struct *vma; | ||
301 | pid_t pid; | ||
302 | }; | ||
303 | |||
304 | /** | ||
305 | * DMA buffer. | ||
306 | */ | ||
307 | struct drm_buf { | ||
308 | int idx; /**< Index into master buflist */ | ||
309 | int total; /**< Buffer size */ | ||
310 | int order; /**< log-base-2(total) */ | ||
311 | int used; /**< Amount of buffer in use (for DMA) */ | ||
312 | unsigned long offset; /**< Byte offset (used internally) */ | ||
313 | void *address; /**< Address of buffer */ | ||
314 | unsigned long bus_address; /**< Bus address of buffer */ | ||
315 | struct drm_buf *next; /**< Kernel-only: used for free list */ | ||
316 | __volatile__ int waiting; /**< On kernel DMA queue */ | ||
317 | __volatile__ int pending; /**< On hardware DMA queue */ | ||
318 | wait_queue_head_t dma_wait; /**< Processes waiting */ | ||
319 | struct drm_file *file_priv; /**< Private of holding file descr */ | ||
320 | int context; /**< Kernel queue for this buffer */ | ||
321 | int while_locked; /**< Dispatch this buffer while locked */ | ||
322 | enum { | ||
323 | DRM_LIST_NONE = 0, | ||
324 | DRM_LIST_FREE = 1, | ||
325 | DRM_LIST_WAIT = 2, | ||
326 | DRM_LIST_PEND = 3, | ||
327 | DRM_LIST_PRIO = 4, | ||
328 | DRM_LIST_RECLAIM = 5 | ||
329 | } list; /**< Which list we're on */ | ||
330 | |||
331 | int dev_priv_size; /**< Size of buffer private storage */ | ||
332 | void *dev_private; /**< Per-buffer private storage */ | ||
333 | }; | ||
334 | |||
335 | /** bufs is one longer than it has to be */ | ||
336 | struct drm_waitlist { | ||
337 | int count; /**< Number of possible buffers */ | ||
338 | struct drm_buf **bufs; /**< List of pointers to buffers */ | ||
339 | struct drm_buf **rp; /**< Read pointer */ | ||
340 | struct drm_buf **wp; /**< Write pointer */ | ||
341 | struct drm_buf **end; /**< End pointer */ | ||
342 | spinlock_t read_lock; | ||
343 | spinlock_t write_lock; | ||
344 | }; | ||
345 | |||
346 | struct drm_freelist { | ||
347 | int initialized; /**< Freelist in use */ | ||
348 | atomic_t count; /**< Number of free buffers */ | ||
349 | struct drm_buf *next; /**< End pointer */ | ||
350 | |||
351 | wait_queue_head_t waiting; /**< Processes waiting on free bufs */ | ||
352 | int low_mark; /**< Low water mark */ | ||
353 | int high_mark; /**< High water mark */ | ||
354 | atomic_t wfh; /**< If waiting for high mark */ | ||
355 | spinlock_t lock; | ||
356 | }; | ||
357 | |||
358 | typedef struct drm_dma_handle { | ||
359 | dma_addr_t busaddr; | ||
360 | void *vaddr; | ||
361 | size_t size; | ||
362 | } drm_dma_handle_t; | ||
363 | |||
364 | /** | ||
365 | * Buffer entry. There is one of this for each buffer size order. | ||
366 | */ | ||
367 | struct drm_buf_entry { | ||
368 | int buf_size; /**< size */ | ||
369 | int buf_count; /**< number of buffers */ | ||
370 | struct drm_buf *buflist; /**< buffer list */ | ||
371 | int seg_count; | ||
372 | int page_order; | ||
373 | struct drm_dma_handle **seglist; | ||
374 | |||
375 | struct drm_freelist freelist; | ||
376 | }; | ||
377 | |||
378 | /** File private data */ | ||
379 | struct drm_file { | ||
380 | int authenticated; | ||
381 | int master; | ||
382 | pid_t pid; | ||
383 | uid_t uid; | ||
384 | drm_magic_t magic; | ||
385 | unsigned long ioctl_count; | ||
386 | struct list_head lhead; | ||
387 | struct drm_minor *minor; | ||
388 | int remove_auth_on_close; | ||
389 | unsigned long lock_count; | ||
390 | struct file *filp; | ||
391 | void *driver_priv; | ||
392 | }; | ||
393 | |||
394 | /** Wait queue */ | ||
395 | struct drm_queue { | ||
396 | atomic_t use_count; /**< Outstanding uses (+1) */ | ||
397 | atomic_t finalization; /**< Finalization in progress */ | ||
398 | atomic_t block_count; /**< Count of processes waiting */ | ||
399 | atomic_t block_read; /**< Queue blocked for reads */ | ||
400 | wait_queue_head_t read_queue; /**< Processes waiting on block_read */ | ||
401 | atomic_t block_write; /**< Queue blocked for writes */ | ||
402 | wait_queue_head_t write_queue; /**< Processes waiting on block_write */ | ||
403 | atomic_t total_queued; /**< Total queued statistic */ | ||
404 | atomic_t total_flushed; /**< Total flushes statistic */ | ||
405 | atomic_t total_locks; /**< Total locks statistics */ | ||
406 | enum drm_ctx_flags flags; /**< Context preserving and 2D-only */ | ||
407 | struct drm_waitlist waitlist; /**< Pending buffers */ | ||
408 | wait_queue_head_t flush_queue; /**< Processes waiting until flush */ | ||
409 | }; | ||
410 | |||
411 | /** | ||
412 | * Lock data. | ||
413 | */ | ||
414 | struct drm_lock_data { | ||
415 | struct drm_hw_lock *hw_lock; /**< Hardware lock */ | ||
416 | /** Private of lock holder's file (NULL=kernel) */ | ||
417 | struct drm_file *file_priv; | ||
418 | wait_queue_head_t lock_queue; /**< Queue of blocked processes */ | ||
419 | unsigned long lock_time; /**< Time of last lock in jiffies */ | ||
420 | spinlock_t spinlock; | ||
421 | uint32_t kernel_waiters; | ||
422 | uint32_t user_waiters; | ||
423 | int idle_has_lock; | ||
424 | }; | ||
425 | |||
426 | /** | ||
427 | * DMA data. | ||
428 | */ | ||
429 | struct drm_device_dma { | ||
430 | |||
431 | struct drm_buf_entry bufs[DRM_MAX_ORDER + 1]; /**< buffers, grouped by their size order */ | ||
432 | int buf_count; /**< total number of buffers */ | ||
433 | struct drm_buf **buflist; /**< Vector of pointers into drm_device_dma::bufs */ | ||
434 | int seg_count; | ||
435 | int page_count; /**< number of pages */ | ||
436 | unsigned long *pagelist; /**< page list */ | ||
437 | unsigned long byte_count; | ||
438 | enum { | ||
439 | _DRM_DMA_USE_AGP = 0x01, | ||
440 | _DRM_DMA_USE_SG = 0x02, | ||
441 | _DRM_DMA_USE_FB = 0x04, | ||
442 | _DRM_DMA_USE_PCI_RO = 0x08 | ||
443 | } flags; | ||
444 | |||
445 | }; | ||
446 | |||
447 | /** | ||
448 | * AGP memory entry. Stored as a doubly linked list. | ||
449 | */ | ||
450 | struct drm_agp_mem { | ||
451 | unsigned long handle; /**< handle */ | ||
452 | DRM_AGP_MEM *memory; | ||
453 | unsigned long bound; /**< address */ | ||
454 | int pages; | ||
455 | struct list_head head; | ||
456 | }; | ||
457 | |||
458 | /** | ||
459 | * AGP data. | ||
460 | * | ||
461 | * \sa drm_agp_init() and drm_device::agp. | ||
462 | */ | ||
463 | struct drm_agp_head { | ||
464 | DRM_AGP_KERN agp_info; /**< AGP device information */ | ||
465 | struct list_head memory; | ||
466 | unsigned long mode; /**< AGP mode */ | ||
467 | struct agp_bridge_data *bridge; | ||
468 | int enabled; /**< whether the AGP bus as been enabled */ | ||
469 | int acquired; /**< whether the AGP device has been acquired */ | ||
470 | unsigned long base; | ||
471 | int agp_mtrr; | ||
472 | int cant_use_aperture; | ||
473 | unsigned long page_mask; | ||
474 | }; | ||
475 | |||
476 | /** | ||
477 | * Scatter-gather memory. | ||
478 | */ | ||
479 | struct drm_sg_mem { | ||
480 | unsigned long handle; | ||
481 | void *virtual; | ||
482 | int pages; | ||
483 | struct page **pagelist; | ||
484 | dma_addr_t *busaddr; | ||
485 | }; | ||
486 | |||
487 | struct drm_sigdata { | ||
488 | int context; | ||
489 | struct drm_hw_lock *lock; | ||
490 | }; | ||
491 | |||
492 | |||
493 | /* | ||
494 | * Generic memory manager structs | ||
495 | */ | ||
496 | |||
497 | struct drm_mm_node { | ||
498 | struct list_head fl_entry; | ||
499 | struct list_head ml_entry; | ||
500 | int free; | ||
501 | unsigned long start; | ||
502 | unsigned long size; | ||
503 | struct drm_mm *mm; | ||
504 | void *private; | ||
505 | }; | ||
506 | |||
507 | struct drm_mm { | ||
508 | struct list_head fl_entry; | ||
509 | struct list_head ml_entry; | ||
510 | }; | ||
511 | |||
512 | |||
513 | /** | ||
514 | * Mappings list | ||
515 | */ | ||
516 | struct drm_map_list { | ||
517 | struct list_head head; /**< list head */ | ||
518 | struct drm_hash_item hash; | ||
519 | struct drm_map *map; /**< mapping */ | ||
520 | uint64_t user_token; | ||
521 | }; | ||
522 | |||
523 | typedef struct drm_map drm_local_map_t; | ||
524 | |||
525 | /** | ||
526 | * Context handle list | ||
527 | */ | ||
528 | struct drm_ctx_list { | ||
529 | struct list_head head; /**< list head */ | ||
530 | drm_context_t handle; /**< context handle */ | ||
531 | struct drm_file *tag; /**< associated fd private data */ | ||
532 | }; | ||
533 | |||
534 | struct drm_vbl_sig { | ||
535 | struct list_head head; | ||
536 | unsigned int sequence; | ||
537 | struct siginfo info; | ||
538 | struct task_struct *task; | ||
539 | }; | ||
540 | |||
541 | /* location of GART table */ | ||
542 | #define DRM_ATI_GART_MAIN 1 | ||
543 | #define DRM_ATI_GART_FB 2 | ||
544 | |||
545 | #define DRM_ATI_GART_PCI 1 | ||
546 | #define DRM_ATI_GART_PCIE 2 | ||
547 | #define DRM_ATI_GART_IGP 3 | ||
548 | |||
549 | struct drm_ati_pcigart_info { | ||
550 | int gart_table_location; | ||
551 | int gart_reg_if; | ||
552 | void *addr; | ||
553 | dma_addr_t bus_addr; | ||
554 | dma_addr_t table_mask; | ||
555 | struct drm_dma_handle *table_handle; | ||
556 | drm_local_map_t mapping; | ||
557 | int table_size; | ||
558 | }; | ||
559 | |||
560 | /** | ||
561 | * DRM driver structure. This structure represent the common code for | ||
562 | * a family of cards. There will one drm_device for each card present | ||
563 | * in this family | ||
564 | */ | ||
565 | struct drm_driver { | ||
566 | int (*load) (struct drm_device *, unsigned long flags); | ||
567 | int (*firstopen) (struct drm_device *); | ||
568 | int (*open) (struct drm_device *, struct drm_file *); | ||
569 | void (*preclose) (struct drm_device *, struct drm_file *file_priv); | ||
570 | void (*postclose) (struct drm_device *, struct drm_file *); | ||
571 | void (*lastclose) (struct drm_device *); | ||
572 | int (*unload) (struct drm_device *); | ||
573 | int (*suspend) (struct drm_device *, pm_message_t state); | ||
574 | int (*resume) (struct drm_device *); | ||
575 | int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv); | ||
576 | void (*dma_ready) (struct drm_device *); | ||
577 | int (*dma_quiescent) (struct drm_device *); | ||
578 | int (*context_ctor) (struct drm_device *dev, int context); | ||
579 | int (*context_dtor) (struct drm_device *dev, int context); | ||
580 | int (*kernel_context_switch) (struct drm_device *dev, int old, | ||
581 | int new); | ||
582 | void (*kernel_context_switch_unlock) (struct drm_device *dev); | ||
583 | int (*vblank_wait) (struct drm_device *dev, unsigned int *sequence); | ||
584 | int (*vblank_wait2) (struct drm_device *dev, unsigned int *sequence); | ||
585 | int (*dri_library_name) (struct drm_device *dev, char *buf); | ||
586 | |||
587 | /** | ||
588 | * Called by \c drm_device_is_agp. Typically used to determine if a | ||
589 | * card is really attached to AGP or not. | ||
590 | * | ||
591 | * \param dev DRM device handle | ||
592 | * | ||
593 | * \returns | ||
594 | * One of three values is returned depending on whether or not the | ||
595 | * card is absolutely \b not AGP (return of 0), absolutely \b is AGP | ||
596 | * (return of 1), or may or may not be AGP (return of 2). | ||
597 | */ | ||
598 | int (*device_is_agp) (struct drm_device *dev); | ||
599 | |||
600 | /* these have to be filled in */ | ||
601 | |||
602 | irqreturn_t(*irq_handler) (DRM_IRQ_ARGS); | ||
603 | void (*irq_preinstall) (struct drm_device *dev); | ||
604 | void (*irq_postinstall) (struct drm_device *dev); | ||
605 | void (*irq_uninstall) (struct drm_device *dev); | ||
606 | void (*reclaim_buffers) (struct drm_device *dev, | ||
607 | struct drm_file * file_priv); | ||
608 | void (*reclaim_buffers_locked) (struct drm_device *dev, | ||
609 | struct drm_file *file_priv); | ||
610 | void (*reclaim_buffers_idlelocked) (struct drm_device *dev, | ||
611 | struct drm_file *file_priv); | ||
612 | unsigned long (*get_map_ofs) (struct drm_map * map); | ||
613 | unsigned long (*get_reg_ofs) (struct drm_device *dev); | ||
614 | void (*set_version) (struct drm_device *dev, | ||
615 | struct drm_set_version *sv); | ||
616 | |||
617 | int major; | ||
618 | int minor; | ||
619 | int patchlevel; | ||
620 | char *name; | ||
621 | char *desc; | ||
622 | char *date; | ||
623 | |||
624 | u32 driver_features; | ||
625 | int dev_priv_size; | ||
626 | struct drm_ioctl_desc *ioctls; | ||
627 | int num_ioctls; | ||
628 | struct file_operations fops; | ||
629 | struct pci_driver pci_driver; | ||
630 | }; | ||
631 | |||
632 | #define DRM_MINOR_UNASSIGNED 0 | ||
633 | #define DRM_MINOR_LEGACY 1 | ||
634 | |||
635 | /** | ||
636 | * DRM minor structure. This structure represents a drm minor number. | ||
637 | */ | ||
638 | struct drm_minor { | ||
639 | int index; /**< Minor device number */ | ||
640 | int type; /**< Control or render */ | ||
641 | dev_t device; /**< Device number for mknod */ | ||
642 | struct device kdev; /**< Linux device */ | ||
643 | struct drm_device *dev; | ||
644 | struct proc_dir_entry *dev_root; /**< proc directory entry */ | ||
645 | }; | ||
646 | |||
647 | /** | ||
648 | * DRM device structure. This structure represent a complete card that | ||
649 | * may contain multiple heads. | ||
650 | */ | ||
651 | struct drm_device { | ||
652 | char *unique; /**< Unique identifier: e.g., busid */ | ||
653 | int unique_len; /**< Length of unique field */ | ||
654 | char *devname; /**< For /proc/interrupts */ | ||
655 | int if_version; /**< Highest interface version set */ | ||
656 | |||
657 | int blocked; /**< Blocked due to VC switch? */ | ||
658 | |||
659 | /** \name Locks */ | ||
660 | /*@{ */ | ||
661 | spinlock_t count_lock; /**< For inuse, drm_device::open_count, drm_device::buf_use */ | ||
662 | struct mutex struct_mutex; /**< For others */ | ||
663 | /*@} */ | ||
664 | |||
665 | /** \name Usage Counters */ | ||
666 | /*@{ */ | ||
667 | int open_count; /**< Outstanding files open */ | ||
668 | atomic_t ioctl_count; /**< Outstanding IOCTLs pending */ | ||
669 | atomic_t vma_count; /**< Outstanding vma areas open */ | ||
670 | int buf_use; /**< Buffers in use -- cannot alloc */ | ||
671 | atomic_t buf_alloc; /**< Buffer allocation in progress */ | ||
672 | /*@} */ | ||
673 | |||
674 | /** \name Performance counters */ | ||
675 | /*@{ */ | ||
676 | unsigned long counters; | ||
677 | enum drm_stat_type types[15]; | ||
678 | atomic_t counts[15]; | ||
679 | /*@} */ | ||
680 | |||
681 | /** \name Authentication */ | ||
682 | /*@{ */ | ||
683 | struct list_head filelist; | ||
684 | struct drm_open_hash magiclist; /**< magic hash table */ | ||
685 | struct list_head magicfree; | ||
686 | /*@} */ | ||
687 | |||
688 | /** \name Memory management */ | ||
689 | /*@{ */ | ||
690 | struct list_head maplist; /**< Linked list of regions */ | ||
691 | int map_count; /**< Number of mappable regions */ | ||
692 | struct drm_open_hash map_hash; /**< User token hash table for maps */ | ||
693 | |||
694 | /** \name Context handle management */ | ||
695 | /*@{ */ | ||
696 | struct list_head ctxlist; /**< Linked list of context handles */ | ||
697 | int ctx_count; /**< Number of context handles */ | ||
698 | struct mutex ctxlist_mutex; /**< For ctxlist */ | ||
699 | |||
700 | struct idr ctx_idr; | ||
701 | |||
702 | struct list_head vmalist; /**< List of vmas (for debugging) */ | ||
703 | struct drm_lock_data lock; /**< Information on hardware lock */ | ||
704 | /*@} */ | ||
705 | |||
706 | /** \name DMA queues (contexts) */ | ||
707 | /*@{ */ | ||
708 | int queue_count; /**< Number of active DMA queues */ | ||
709 | int queue_reserved; /**< Number of reserved DMA queues */ | ||
710 | int queue_slots; /**< Actual length of queuelist */ | ||
711 | struct drm_queue **queuelist; /**< Vector of pointers to DMA queues */ | ||
712 | struct drm_device_dma *dma; /**< Optional pointer for DMA support */ | ||
713 | /*@} */ | ||
714 | |||
715 | /** \name Context support */ | ||
716 | /*@{ */ | ||
717 | int irq; /**< Interrupt used by board */ | ||
718 | int irq_enabled; /**< True if irq handler is enabled */ | ||
719 | __volatile__ long context_flag; /**< Context swapping flag */ | ||
720 | __volatile__ long interrupt_flag; /**< Interruption handler flag */ | ||
721 | __volatile__ long dma_flag; /**< DMA dispatch flag */ | ||
722 | struct timer_list timer; /**< Timer for delaying ctx switch */ | ||
723 | wait_queue_head_t context_wait; /**< Processes waiting on ctx switch */ | ||
724 | int last_checked; /**< Last context checked for DMA */ | ||
725 | int last_context; /**< Last current context */ | ||
726 | unsigned long last_switch; /**< jiffies at last context switch */ | ||
727 | /*@} */ | ||
728 | |||
729 | struct work_struct work; | ||
730 | /** \name VBLANK IRQ support */ | ||
731 | /*@{ */ | ||
732 | |||
733 | wait_queue_head_t vbl_queue; /**< VBLANK wait queue */ | ||
734 | atomic_t vbl_received; | ||
735 | atomic_t vbl_received2; /**< number of secondary VBLANK interrupts */ | ||
736 | spinlock_t vbl_lock; | ||
737 | struct list_head vbl_sigs; /**< signal list to send on VBLANK */ | ||
738 | struct list_head vbl_sigs2; /**< signals to send on secondary VBLANK */ | ||
739 | unsigned int vbl_pending; | ||
740 | spinlock_t tasklet_lock; /**< For drm_locked_tasklet */ | ||
741 | void (*locked_tasklet_func)(struct drm_device *dev); | ||
742 | |||
743 | /*@} */ | ||
744 | cycles_t ctx_start; | ||
745 | cycles_t lck_start; | ||
746 | |||
747 | struct fasync_struct *buf_async;/**< Processes waiting for SIGIO */ | ||
748 | wait_queue_head_t buf_readers; /**< Processes waiting to read */ | ||
749 | wait_queue_head_t buf_writers; /**< Processes waiting to ctx switch */ | ||
750 | |||
751 | struct drm_agp_head *agp; /**< AGP data */ | ||
752 | |||
753 | struct pci_dev *pdev; /**< PCI device structure */ | ||
754 | int pci_vendor; /**< PCI vendor id */ | ||
755 | int pci_device; /**< PCI device id */ | ||
756 | #ifdef __alpha__ | ||
757 | struct pci_controller *hose; | ||
758 | #endif | ||
759 | struct drm_sg_mem *sg; /**< Scatter gather memory */ | ||
760 | void *dev_private; /**< device private data */ | ||
761 | struct drm_sigdata sigdata; /**< For block_all_signals */ | ||
762 | sigset_t sigmask; | ||
763 | |||
764 | struct drm_driver *driver; | ||
765 | drm_local_map_t *agp_buffer_map; | ||
766 | unsigned int agp_buffer_token; | ||
767 | struct drm_minor *primary; /**< render type primary screen head */ | ||
768 | |||
769 | /** \name Drawable information */ | ||
770 | /*@{ */ | ||
771 | spinlock_t drw_lock; | ||
772 | struct idr drw_idr; | ||
773 | /*@} */ | ||
774 | }; | ||
775 | |||
776 | static __inline__ int drm_core_check_feature(struct drm_device *dev, | ||
777 | int feature) | ||
778 | { | ||
779 | return ((dev->driver->driver_features & feature) ? 1 : 0); | ||
780 | } | ||
781 | |||
782 | #ifdef __alpha__ | ||
783 | #define drm_get_pci_domain(dev) dev->hose->index | ||
784 | #else | ||
785 | #define drm_get_pci_domain(dev) 0 | ||
786 | #endif | ||
787 | |||
788 | #if __OS_HAS_AGP | ||
789 | static inline int drm_core_has_AGP(struct drm_device *dev) | ||
790 | { | ||
791 | return drm_core_check_feature(dev, DRIVER_USE_AGP); | ||
792 | } | ||
793 | #else | ||
794 | #define drm_core_has_AGP(dev) (0) | ||
795 | #endif | ||
796 | |||
797 | #if __OS_HAS_MTRR | ||
798 | static inline int drm_core_has_MTRR(struct drm_device *dev) | ||
799 | { | ||
800 | return drm_core_check_feature(dev, DRIVER_USE_MTRR); | ||
801 | } | ||
802 | |||
803 | #define DRM_MTRR_WC MTRR_TYPE_WRCOMB | ||
804 | |||
805 | static inline int drm_mtrr_add(unsigned long offset, unsigned long size, | ||
806 | unsigned int flags) | ||
807 | { | ||
808 | return mtrr_add(offset, size, flags, 1); | ||
809 | } | ||
810 | |||
811 | static inline int drm_mtrr_del(int handle, unsigned long offset, | ||
812 | unsigned long size, unsigned int flags) | ||
813 | { | ||
814 | return mtrr_del(handle, offset, size); | ||
815 | } | ||
816 | |||
817 | #else | ||
818 | #define drm_core_has_MTRR(dev) (0) | ||
819 | |||
820 | #define DRM_MTRR_WC 0 | ||
821 | |||
822 | static inline int drm_mtrr_add(unsigned long offset, unsigned long size, | ||
823 | unsigned int flags) | ||
824 | { | ||
825 | return 0; | ||
826 | } | ||
827 | |||
828 | static inline int drm_mtrr_del(int handle, unsigned long offset, | ||
829 | unsigned long size, unsigned int flags) | ||
830 | { | ||
831 | return 0; | ||
832 | } | ||
833 | #endif | ||
834 | |||
835 | /******************************************************************/ | ||
836 | /** \name Internal function definitions */ | ||
837 | /*@{*/ | ||
838 | |||
839 | /* Driver support (drm_drv.h) */ | ||
840 | extern int drm_init(struct drm_driver *driver); | ||
841 | extern void drm_exit(struct drm_driver *driver); | ||
842 | extern int drm_ioctl(struct inode *inode, struct file *filp, | ||
843 | unsigned int cmd, unsigned long arg); | ||
844 | extern long drm_compat_ioctl(struct file *filp, | ||
845 | unsigned int cmd, unsigned long arg); | ||
846 | extern int drm_lastclose(struct drm_device *dev); | ||
847 | |||
848 | /* Device support (drm_fops.h) */ | ||
849 | extern int drm_open(struct inode *inode, struct file *filp); | ||
850 | extern int drm_stub_open(struct inode *inode, struct file *filp); | ||
851 | extern int drm_fasync(int fd, struct file *filp, int on); | ||
852 | extern int drm_release(struct inode *inode, struct file *filp); | ||
853 | |||
854 | /* Mapping support (drm_vm.h) */ | ||
855 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); | ||
856 | extern unsigned long drm_core_get_map_ofs(struct drm_map * map); | ||
857 | extern unsigned long drm_core_get_reg_ofs(struct drm_device *dev); | ||
858 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); | ||
859 | |||
860 | /* Memory management support (drm_memory.h) */ | ||
861 | #include "drm_memory.h" | ||
862 | extern void drm_mem_init(void); | ||
863 | extern int drm_mem_info(char *buf, char **start, off_t offset, | ||
864 | int request, int *eof, void *data); | ||
865 | extern void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area); | ||
866 | |||
867 | extern DRM_AGP_MEM *drm_alloc_agp(struct drm_device *dev, int pages, u32 type); | ||
868 | extern int drm_free_agp(DRM_AGP_MEM * handle, int pages); | ||
869 | extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start); | ||
870 | extern int drm_unbind_agp(DRM_AGP_MEM * handle); | ||
871 | |||
872 | /* Misc. IOCTL support (drm_ioctl.h) */ | ||
873 | extern int drm_irq_by_busid(struct drm_device *dev, void *data, | ||
874 | struct drm_file *file_priv); | ||
875 | extern int drm_getunique(struct drm_device *dev, void *data, | ||
876 | struct drm_file *file_priv); | ||
877 | extern int drm_setunique(struct drm_device *dev, void *data, | ||
878 | struct drm_file *file_priv); | ||
879 | extern int drm_getmap(struct drm_device *dev, void *data, | ||
880 | struct drm_file *file_priv); | ||
881 | extern int drm_getclient(struct drm_device *dev, void *data, | ||
882 | struct drm_file *file_priv); | ||
883 | extern int drm_getstats(struct drm_device *dev, void *data, | ||
884 | struct drm_file *file_priv); | ||
885 | extern int drm_setversion(struct drm_device *dev, void *data, | ||
886 | struct drm_file *file_priv); | ||
887 | extern int drm_noop(struct drm_device *dev, void *data, | ||
888 | struct drm_file *file_priv); | ||
889 | |||
890 | /* Context IOCTL support (drm_context.h) */ | ||
891 | extern int drm_resctx(struct drm_device *dev, void *data, | ||
892 | struct drm_file *file_priv); | ||
893 | extern int drm_addctx(struct drm_device *dev, void *data, | ||
894 | struct drm_file *file_priv); | ||
895 | extern int drm_modctx(struct drm_device *dev, void *data, | ||
896 | struct drm_file *file_priv); | ||
897 | extern int drm_getctx(struct drm_device *dev, void *data, | ||
898 | struct drm_file *file_priv); | ||
899 | extern int drm_switchctx(struct drm_device *dev, void *data, | ||
900 | struct drm_file *file_priv); | ||
901 | extern int drm_newctx(struct drm_device *dev, void *data, | ||
902 | struct drm_file *file_priv); | ||
903 | extern int drm_rmctx(struct drm_device *dev, void *data, | ||
904 | struct drm_file *file_priv); | ||
905 | |||
906 | extern int drm_ctxbitmap_init(struct drm_device *dev); | ||
907 | extern void drm_ctxbitmap_cleanup(struct drm_device *dev); | ||
908 | extern void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle); | ||
909 | |||
910 | extern int drm_setsareactx(struct drm_device *dev, void *data, | ||
911 | struct drm_file *file_priv); | ||
912 | extern int drm_getsareactx(struct drm_device *dev, void *data, | ||
913 | struct drm_file *file_priv); | ||
914 | |||
915 | /* Drawable IOCTL support (drm_drawable.h) */ | ||
916 | extern int drm_adddraw(struct drm_device *dev, void *data, | ||
917 | struct drm_file *file_priv); | ||
918 | extern int drm_rmdraw(struct drm_device *dev, void *data, | ||
919 | struct drm_file *file_priv); | ||
920 | extern int drm_update_drawable_info(struct drm_device *dev, void *data, | ||
921 | struct drm_file *file_priv); | ||
922 | extern struct drm_drawable_info *drm_get_drawable_info(struct drm_device *dev, | ||
923 | drm_drawable_t id); | ||
924 | extern void drm_drawable_free_all(struct drm_device *dev); | ||
925 | |||
926 | /* Authentication IOCTL support (drm_auth.h) */ | ||
927 | extern int drm_getmagic(struct drm_device *dev, void *data, | ||
928 | struct drm_file *file_priv); | ||
929 | extern int drm_authmagic(struct drm_device *dev, void *data, | ||
930 | struct drm_file *file_priv); | ||
931 | |||
932 | /* Locking IOCTL support (drm_lock.h) */ | ||
933 | extern int drm_lock(struct drm_device *dev, void *data, | ||
934 | struct drm_file *file_priv); | ||
935 | extern int drm_unlock(struct drm_device *dev, void *data, | ||
936 | struct drm_file *file_priv); | ||
937 | extern int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context); | ||
938 | extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context); | ||
939 | extern void drm_idlelock_take(struct drm_lock_data *lock_data); | ||
940 | extern void drm_idlelock_release(struct drm_lock_data *lock_data); | ||
941 | |||
942 | /* | ||
943 | * These are exported to drivers so that they can implement fencing using | ||
944 | * DMA quiscent + idle. DMA quiescent usually requires the hardware lock. | ||
945 | */ | ||
946 | |||
947 | extern int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv); | ||
948 | |||
949 | /* Buffer management support (drm_bufs.h) */ | ||
950 | extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request); | ||
951 | extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request); | ||
952 | extern int drm_addmap(struct drm_device *dev, unsigned int offset, | ||
953 | unsigned int size, enum drm_map_type type, | ||
954 | enum drm_map_flags flags, drm_local_map_t ** map_ptr); | ||
955 | extern int drm_addmap_ioctl(struct drm_device *dev, void *data, | ||
956 | struct drm_file *file_priv); | ||
957 | extern int drm_rmmap(struct drm_device *dev, drm_local_map_t *map); | ||
958 | extern int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map); | ||
959 | extern int drm_rmmap_ioctl(struct drm_device *dev, void *data, | ||
960 | struct drm_file *file_priv); | ||
961 | extern int drm_addbufs(struct drm_device *dev, void *data, | ||
962 | struct drm_file *file_priv); | ||
963 | extern int drm_infobufs(struct drm_device *dev, void *data, | ||
964 | struct drm_file *file_priv); | ||
965 | extern int drm_markbufs(struct drm_device *dev, void *data, | ||
966 | struct drm_file *file_priv); | ||
967 | extern int drm_freebufs(struct drm_device *dev, void *data, | ||
968 | struct drm_file *file_priv); | ||
969 | extern int drm_mapbufs(struct drm_device *dev, void *data, | ||
970 | struct drm_file *file_priv); | ||
971 | extern int drm_order(unsigned long size); | ||
972 | extern unsigned long drm_get_resource_start(struct drm_device *dev, | ||
973 | unsigned int resource); | ||
974 | extern unsigned long drm_get_resource_len(struct drm_device *dev, | ||
975 | unsigned int resource); | ||
976 | |||
977 | /* DMA support (drm_dma.h) */ | ||
978 | extern int drm_dma_setup(struct drm_device *dev); | ||
979 | extern void drm_dma_takedown(struct drm_device *dev); | ||
980 | extern void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf); | ||
981 | extern void drm_core_reclaim_buffers(struct drm_device *dev, | ||
982 | struct drm_file *filp); | ||
983 | |||
984 | /* IRQ support (drm_irq.h) */ | ||
985 | extern int drm_control(struct drm_device *dev, void *data, | ||
986 | struct drm_file *file_priv); | ||
987 | extern irqreturn_t drm_irq_handler(DRM_IRQ_ARGS); | ||
988 | extern int drm_irq_uninstall(struct drm_device *dev); | ||
989 | extern void drm_driver_irq_preinstall(struct drm_device *dev); | ||
990 | extern void drm_driver_irq_postinstall(struct drm_device *dev); | ||
991 | extern void drm_driver_irq_uninstall(struct drm_device *dev); | ||
992 | |||
993 | extern int drm_wait_vblank(struct drm_device *dev, void *data, | ||
994 | struct drm_file *file_priv); | ||
995 | extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); | ||
996 | extern void drm_vbl_send_signals(struct drm_device *dev); | ||
997 | extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*)); | ||
998 | |||
999 | /* AGP/GART support (drm_agpsupport.h) */ | ||
1000 | extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); | ||
1001 | extern int drm_agp_acquire(struct drm_device *dev); | ||
1002 | extern int drm_agp_acquire_ioctl(struct drm_device *dev, void *data, | ||
1003 | struct drm_file *file_priv); | ||
1004 | extern int drm_agp_release(struct drm_device *dev); | ||
1005 | extern int drm_agp_release_ioctl(struct drm_device *dev, void *data, | ||
1006 | struct drm_file *file_priv); | ||
1007 | extern int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode); | ||
1008 | extern int drm_agp_enable_ioctl(struct drm_device *dev, void *data, | ||
1009 | struct drm_file *file_priv); | ||
1010 | extern int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info); | ||
1011 | extern int drm_agp_info_ioctl(struct drm_device *dev, void *data, | ||
1012 | struct drm_file *file_priv); | ||
1013 | extern int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request); | ||
1014 | extern int drm_agp_alloc_ioctl(struct drm_device *dev, void *data, | ||
1015 | struct drm_file *file_priv); | ||
1016 | extern int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request); | ||
1017 | extern int drm_agp_free_ioctl(struct drm_device *dev, void *data, | ||
1018 | struct drm_file *file_priv); | ||
1019 | extern int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request); | ||
1020 | extern int drm_agp_unbind_ioctl(struct drm_device *dev, void *data, | ||
1021 | struct drm_file *file_priv); | ||
1022 | extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request); | ||
1023 | extern int drm_agp_bind_ioctl(struct drm_device *dev, void *data, | ||
1024 | struct drm_file *file_priv); | ||
1025 | extern DRM_AGP_MEM *drm_agp_allocate_memory(struct agp_bridge_data *bridge, size_t pages, u32 type); | ||
1026 | extern int drm_agp_free_memory(DRM_AGP_MEM * handle); | ||
1027 | extern int drm_agp_bind_memory(DRM_AGP_MEM * handle, off_t start); | ||
1028 | extern int drm_agp_unbind_memory(DRM_AGP_MEM * handle); | ||
1029 | |||
1030 | /* Stub support (drm_stub.h) */ | ||
1031 | extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent, | ||
1032 | struct drm_driver *driver); | ||
1033 | extern int drm_put_dev(struct drm_device *dev); | ||
1034 | extern int drm_put_minor(struct drm_minor **minor); | ||
1035 | extern unsigned int drm_debug; | ||
1036 | |||
1037 | extern struct class *drm_class; | ||
1038 | extern struct proc_dir_entry *drm_proc_root; | ||
1039 | |||
1040 | extern struct idr drm_minors_idr; | ||
1041 | |||
1042 | extern drm_local_map_t *drm_getsarea(struct drm_device *dev); | ||
1043 | |||
1044 | /* Proc support (drm_proc.h) */ | ||
1045 | extern int drm_proc_init(struct drm_minor *minor, int minor_id, | ||
1046 | struct proc_dir_entry *root); | ||
1047 | extern int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root); | ||
1048 | |||
1049 | /* Scatter Gather Support (drm_scatter.h) */ | ||
1050 | extern void drm_sg_cleanup(struct drm_sg_mem * entry); | ||
1051 | extern int drm_sg_alloc_ioctl(struct drm_device *dev, void *data, | ||
1052 | struct drm_file *file_priv); | ||
1053 | extern int drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather * request); | ||
1054 | extern int drm_sg_free(struct drm_device *dev, void *data, | ||
1055 | struct drm_file *file_priv); | ||
1056 | |||
1057 | /* ATI PCIGART support (ati_pcigart.h) */ | ||
1058 | extern int drm_ati_pcigart_init(struct drm_device *dev, | ||
1059 | struct drm_ati_pcigart_info * gart_info); | ||
1060 | extern int drm_ati_pcigart_cleanup(struct drm_device *dev, | ||
1061 | struct drm_ati_pcigart_info * gart_info); | ||
1062 | |||
1063 | extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size, | ||
1064 | size_t align, dma_addr_t maxaddr); | ||
1065 | extern void __drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); | ||
1066 | extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); | ||
1067 | |||
1068 | /* sysfs support (drm_sysfs.c) */ | ||
1069 | struct drm_sysfs_class; | ||
1070 | extern struct class *drm_sysfs_create(struct module *owner, char *name); | ||
1071 | extern void drm_sysfs_destroy(void); | ||
1072 | extern int drm_sysfs_device_add(struct drm_minor *minor); | ||
1073 | extern void drm_sysfs_device_remove(struct drm_minor *minor); | ||
1074 | |||
1075 | /* | ||
1076 | * Basic memory manager support (drm_mm.c) | ||
1077 | */ | ||
1078 | extern struct drm_mm_node *drm_mm_get_block(struct drm_mm_node * parent, | ||
1079 | unsigned long size, | ||
1080 | unsigned alignment); | ||
1081 | extern void drm_mm_put_block(struct drm_mm_node * cur); | ||
1082 | extern struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm, unsigned long size, | ||
1083 | unsigned alignment, int best_match); | ||
1084 | extern int drm_mm_init(struct drm_mm *mm, unsigned long start, unsigned long size); | ||
1085 | extern void drm_mm_takedown(struct drm_mm *mm); | ||
1086 | extern int drm_mm_clean(struct drm_mm *mm); | ||
1087 | extern unsigned long drm_mm_tail_space(struct drm_mm *mm); | ||
1088 | extern int drm_mm_remove_space_from_tail(struct drm_mm *mm, unsigned long size); | ||
1089 | extern int drm_mm_add_space_to_tail(struct drm_mm *mm, unsigned long size); | ||
1090 | |||
1091 | extern void drm_core_ioremap(struct drm_map *map, struct drm_device *dev); | ||
1092 | extern void drm_core_ioremap_wc(struct drm_map *map, struct drm_device *dev); | ||
1093 | extern void drm_core_ioremapfree(struct drm_map *map, struct drm_device *dev); | ||
1094 | |||
1095 | static __inline__ struct drm_map *drm_core_findmap(struct drm_device *dev, | ||
1096 | unsigned int token) | ||
1097 | { | ||
1098 | struct drm_map_list *_entry; | ||
1099 | list_for_each_entry(_entry, &dev->maplist, head) | ||
1100 | if (_entry->user_token == token) | ||
1101 | return _entry->map; | ||
1102 | return NULL; | ||
1103 | } | ||
1104 | |||
1105 | static __inline__ int drm_device_is_agp(struct drm_device *dev) | ||
1106 | { | ||
1107 | if (dev->driver->device_is_agp != NULL) { | ||
1108 | int err = (*dev->driver->device_is_agp) (dev); | ||
1109 | |||
1110 | if (err != 2) { | ||
1111 | return err; | ||
1112 | } | ||
1113 | } | ||
1114 | |||
1115 | return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP); | ||
1116 | } | ||
1117 | |||
1118 | static __inline__ int drm_device_is_pcie(struct drm_device *dev) | ||
1119 | { | ||
1120 | return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP); | ||
1121 | } | ||
1122 | |||
1123 | static __inline__ void drm_core_dropmap(struct drm_map *map) | ||
1124 | { | ||
1125 | } | ||
1126 | |||
1127 | #ifndef DEBUG_MEMORY | ||
1128 | /** Wrapper around kmalloc() */ | ||
1129 | static __inline__ void *drm_alloc(size_t size, int area) | ||
1130 | { | ||
1131 | return kmalloc(size, GFP_KERNEL); | ||
1132 | } | ||
1133 | |||
1134 | /** Wrapper around kfree() */ | ||
1135 | static __inline__ void drm_free(void *pt, size_t size, int area) | ||
1136 | { | ||
1137 | kfree(pt); | ||
1138 | } | ||
1139 | |||
1140 | /** Wrapper around kcalloc() */ | ||
1141 | static __inline__ void *drm_calloc(size_t nmemb, size_t size, int area) | ||
1142 | { | ||
1143 | return kcalloc(nmemb, size, GFP_KERNEL); | ||
1144 | } | ||
1145 | #else | ||
1146 | extern void *drm_alloc(size_t size, int area); | ||
1147 | extern void drm_free(void *pt, size_t size, int area); | ||
1148 | extern void *drm_calloc(size_t nmemb, size_t size, int area); | ||
1149 | #endif | ||
1150 | |||
1151 | /*@}*/ | ||
1152 | |||
1153 | #endif /* __KERNEL__ */ | ||
1154 | #endif | ||
diff --git a/include/drm/drm_core.h b/include/drm/drm_core.h new file mode 100644 index 000000000000..316739036079 --- /dev/null +++ b/include/drm/drm_core.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * Copyright 2004 Jon Smirl <jonsmirl@gmail.com> | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sub license, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice (including the | ||
12 | * next paragraph) shall be included in all copies or substantial portions | ||
13 | * of the Software. | ||
14 | * | ||
15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
17 | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL | ||
18 | * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
19 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
20 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
21 | * DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | #define CORE_AUTHOR "Gareth Hughes, Leif Delgass, José Fonseca, Jon Smirl" | ||
24 | |||
25 | #define CORE_NAME "drm" | ||
26 | #define CORE_DESC "DRM shared core routines" | ||
27 | #define CORE_DATE "20060810" | ||
28 | |||
29 | #define DRM_IF_MAJOR 1 | ||
30 | #define DRM_IF_MINOR 3 | ||
31 | |||
32 | #define CORE_MAJOR 1 | ||
33 | #define CORE_MINOR 1 | ||
34 | #define CORE_PATCHLEVEL 0 | ||
diff --git a/include/drm/drm_hashtab.h b/include/drm/drm_hashtab.h new file mode 100644 index 000000000000..cd2b189e1be6 --- /dev/null +++ b/include/drm/drm_hashtab.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /************************************************************************** | ||
2 | * | ||
3 | * Copyright 2006 Tungsten Graphics, Inc., Bismack, ND. USA. | ||
4 | * All Rights Reserved. | ||
5 | * | ||
6 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
7 | * copy of this software and associated documentation files (the | ||
8 | * "Software"), to deal in the Software without restriction, including | ||
9 | * without limitation the rights to use, copy, modify, merge, publish, | ||
10 | * distribute, sub license, and/or sell copies of the Software, and to | ||
11 | * permit persons to whom the Software is furnished to do so, subject to | ||
12 | * the following conditions: | ||
13 | * | ||
14 | * The above copyright notice and this permission notice (including the | ||
15 | * next paragraph) shall be included in all copies or substantial portions | ||
16 | * of the Software. | ||
17 | * | ||
18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
20 | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL | ||
21 | * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, | ||
22 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
23 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
24 | * USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
25 | * | ||
26 | * | ||
27 | **************************************************************************/ | ||
28 | /* | ||
29 | * Simple open hash tab implementation. | ||
30 | * | ||
31 | * Authors: | ||
32 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | ||
33 | */ | ||
34 | |||
35 | #ifndef DRM_HASHTAB_H | ||
36 | #define DRM_HASHTAB_H | ||
37 | |||
38 | #define drm_hash_entry(_ptr, _type, _member) container_of(_ptr, _type, _member) | ||
39 | |||
40 | struct drm_hash_item { | ||
41 | struct hlist_node head; | ||
42 | unsigned long key; | ||
43 | }; | ||
44 | |||
45 | struct drm_open_hash { | ||
46 | unsigned int size; | ||
47 | unsigned int order; | ||
48 | unsigned int fill; | ||
49 | struct hlist_head *table; | ||
50 | int use_vmalloc; | ||
51 | }; | ||
52 | |||
53 | |||
54 | extern int drm_ht_create(struct drm_open_hash *ht, unsigned int order); | ||
55 | extern int drm_ht_insert_item(struct drm_open_hash *ht, struct drm_hash_item *item); | ||
56 | extern int drm_ht_just_insert_please(struct drm_open_hash *ht, struct drm_hash_item *item, | ||
57 | unsigned long seed, int bits, int shift, | ||
58 | unsigned long add); | ||
59 | extern int drm_ht_find_item(struct drm_open_hash *ht, unsigned long key, struct drm_hash_item **item); | ||
60 | |||
61 | extern void drm_ht_verbose_list(struct drm_open_hash *ht, unsigned long key); | ||
62 | extern int drm_ht_remove_key(struct drm_open_hash *ht, unsigned long key); | ||
63 | extern int drm_ht_remove_item(struct drm_open_hash *ht, struct drm_hash_item *item); | ||
64 | extern void drm_ht_remove(struct drm_open_hash *ht); | ||
65 | |||
66 | |||
67 | #endif | ||
diff --git a/include/drm/drm_memory.h b/include/drm/drm_memory.h new file mode 100644 index 000000000000..63e425b5ea82 --- /dev/null +++ b/include/drm/drm_memory.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /** | ||
2 | * \file drm_memory.h | ||
3 | * Memory management wrappers for DRM | ||
4 | * | ||
5 | * \author Rickard E. (Rik) Faith <faith@valinux.com> | ||
6 | * \author Gareth Hughes <gareth@valinux.com> | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * Created: Thu Feb 4 14:00:34 1999 by faith@valinux.com | ||
11 | * | ||
12 | * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. | ||
13 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | ||
14 | * All Rights Reserved. | ||
15 | * | ||
16 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
17 | * copy of this software and associated documentation files (the "Software"), | ||
18 | * to deal in the Software without restriction, including without limitation | ||
19 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
20 | * and/or sell copies of the Software, and to permit persons to whom the | ||
21 | * Software is furnished to do so, subject to the following conditions: | ||
22 | * | ||
23 | * The above copyright notice and this permission notice (including the next | ||
24 | * paragraph) shall be included in all copies or substantial portions of the | ||
25 | * Software. | ||
26 | * | ||
27 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
28 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
29 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
30 | * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
31 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
32 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
33 | * OTHER DEALINGS IN THE SOFTWARE. | ||
34 | */ | ||
35 | |||
36 | #include <linux/highmem.h> | ||
37 | #include <linux/vmalloc.h> | ||
38 | #include "drmP.h" | ||
39 | |||
40 | /** | ||
41 | * Cut down version of drm_memory_debug.h, which used to be called | ||
42 | * drm_memory.h. | ||
43 | */ | ||
44 | |||
45 | #if __OS_HAS_AGP | ||
46 | |||
47 | #include <linux/vmalloc.h> | ||
48 | |||
49 | #ifdef HAVE_PAGE_AGP | ||
50 | #include <asm/agp.h> | ||
51 | #else | ||
52 | # ifdef __powerpc__ | ||
53 | # define PAGE_AGP __pgprot(_PAGE_KERNEL | _PAGE_NO_CACHE) | ||
54 | # else | ||
55 | # define PAGE_AGP PAGE_KERNEL | ||
56 | # endif | ||
57 | #endif | ||
58 | |||
59 | #else /* __OS_HAS_AGP */ | ||
60 | |||
61 | #endif | ||
diff --git a/include/drm/drm_memory_debug.h b/include/drm/drm_memory_debug.h new file mode 100644 index 000000000000..6463271deea8 --- /dev/null +++ b/include/drm/drm_memory_debug.h | |||
@@ -0,0 +1,309 @@ | |||
1 | /** | ||
2 | * \file drm_memory_debug.h | ||
3 | * Memory management wrappers for DRM. | ||
4 | * | ||
5 | * \author Rickard E. (Rik) Faith <faith@valinux.com> | ||
6 | * \author Gareth Hughes <gareth@valinux.com> | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. | ||
11 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | ||
12 | * All Rights Reserved. | ||
13 | * | ||
14 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
15 | * copy of this software and associated documentation files (the "Software"), | ||
16 | * to deal in the Software without restriction, including without limitation | ||
17 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
18 | * and/or sell copies of the Software, and to permit persons to whom the | ||
19 | * Software is furnished to do so, subject to the following conditions: | ||
20 | * | ||
21 | * The above copyright notice and this permission notice (including the next | ||
22 | * paragraph) shall be included in all copies or substantial portions of the | ||
23 | * 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 | ||
28 | * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
29 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
30 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
31 | * OTHER DEALINGS IN THE SOFTWARE. | ||
32 | */ | ||
33 | |||
34 | #include "drmP.h" | ||
35 | |||
36 | typedef struct drm_mem_stats { | ||
37 | const char *name; | ||
38 | int succeed_count; | ||
39 | int free_count; | ||
40 | int fail_count; | ||
41 | unsigned long bytes_allocated; | ||
42 | unsigned long bytes_freed; | ||
43 | } drm_mem_stats_t; | ||
44 | |||
45 | static DEFINE_SPINLOCK(drm_mem_lock); | ||
46 | static unsigned long drm_ram_available = 0; /* In pages */ | ||
47 | static unsigned long drm_ram_used = 0; | ||
48 | static drm_mem_stats_t drm_mem_stats[] = | ||
49 | { | ||
50 | [DRM_MEM_DMA] = {"dmabufs"}, | ||
51 | [DRM_MEM_SAREA] = {"sareas"}, | ||
52 | [DRM_MEM_DRIVER] = {"driver"}, | ||
53 | [DRM_MEM_MAGIC] = {"magic"}, | ||
54 | [DRM_MEM_IOCTLS] = {"ioctltab"}, | ||
55 | [DRM_MEM_MAPS] = {"maplist"}, | ||
56 | [DRM_MEM_VMAS] = {"vmalist"}, | ||
57 | [DRM_MEM_BUFS] = {"buflist"}, | ||
58 | [DRM_MEM_SEGS] = {"seglist"}, | ||
59 | [DRM_MEM_PAGES] = {"pagelist"}, | ||
60 | [DRM_MEM_FILES] = {"files"}, | ||
61 | [DRM_MEM_QUEUES] = {"queues"}, | ||
62 | [DRM_MEM_CMDS] = {"commands"}, | ||
63 | [DRM_MEM_MAPPINGS] = {"mappings"}, | ||
64 | [DRM_MEM_BUFLISTS] = {"buflists"}, | ||
65 | [DRM_MEM_AGPLISTS] = {"agplist"}, | ||
66 | [DRM_MEM_SGLISTS] = {"sglist"}, | ||
67 | [DRM_MEM_TOTALAGP] = {"totalagp"}, | ||
68 | [DRM_MEM_BOUNDAGP] = {"boundagp"}, | ||
69 | [DRM_MEM_CTXBITMAP] = {"ctxbitmap"}, | ||
70 | [DRM_MEM_CTXLIST] = {"ctxlist"}, | ||
71 | [DRM_MEM_STUB] = {"stub"}, | ||
72 | {NULL, 0,} /* Last entry must be null */ | ||
73 | }; | ||
74 | |||
75 | void drm_mem_init (void) { | ||
76 | drm_mem_stats_t *mem; | ||
77 | struct sysinfo si; | ||
78 | |||
79 | for (mem = drm_mem_stats; mem->name; ++mem) { | ||
80 | mem->succeed_count = 0; | ||
81 | mem->free_count = 0; | ||
82 | mem->fail_count = 0; | ||
83 | mem->bytes_allocated = 0; | ||
84 | mem->bytes_freed = 0; | ||
85 | } | ||
86 | |||
87 | si_meminfo(&si); | ||
88 | drm_ram_available = si.totalram; | ||
89 | drm_ram_used = 0; | ||
90 | } | ||
91 | |||
92 | /* drm_mem_info is called whenever a process reads /dev/drm/mem. */ | ||
93 | |||
94 | static int drm__mem_info (char *buf, char **start, off_t offset, | ||
95 | int request, int *eof, void *data) { | ||
96 | drm_mem_stats_t *pt; | ||
97 | int len = 0; | ||
98 | |||
99 | if (offset > DRM_PROC_LIMIT) { | ||
100 | *eof = 1; | ||
101 | return 0; | ||
102 | } | ||
103 | |||
104 | *eof = 0; | ||
105 | *start = &buf[offset]; | ||
106 | |||
107 | DRM_PROC_PRINT(" total counts " | ||
108 | " | outstanding \n"); | ||
109 | DRM_PROC_PRINT("type alloc freed fail bytes freed" | ||
110 | " | allocs bytes\n\n"); | ||
111 | DRM_PROC_PRINT("%-9.9s %5d %5d %4d %10lu kB |\n", | ||
112 | "system", 0, 0, 0, | ||
113 | drm_ram_available << (PAGE_SHIFT - 10)); | ||
114 | DRM_PROC_PRINT("%-9.9s %5d %5d %4d %10lu kB |\n", | ||
115 | "locked", 0, 0, 0, drm_ram_used >> 10); | ||
116 | DRM_PROC_PRINT("\n"); | ||
117 | for (pt = drm_mem_stats; pt->name; pt++) { | ||
118 | DRM_PROC_PRINT("%-9.9s %5d %5d %4d %10lu %10lu | %6d %10ld\n", | ||
119 | pt->name, | ||
120 | pt->succeed_count, | ||
121 | pt->free_count, | ||
122 | pt->fail_count, | ||
123 | pt->bytes_allocated, | ||
124 | pt->bytes_freed, | ||
125 | pt->succeed_count - pt->free_count, | ||
126 | (long)pt->bytes_allocated | ||
127 | - (long)pt->bytes_freed); | ||
128 | } | ||
129 | |||
130 | if (len > request + offset) | ||
131 | return request; | ||
132 | *eof = 1; | ||
133 | return len - offset; | ||
134 | } | ||
135 | |||
136 | int drm_mem_info (char *buf, char **start, off_t offset, | ||
137 | int len, int *eof, void *data) { | ||
138 | int ret; | ||
139 | |||
140 | spin_lock(&drm_mem_lock); | ||
141 | ret = drm__mem_info (buf, start, offset, len, eof, data); | ||
142 | spin_unlock(&drm_mem_lock); | ||
143 | return ret; | ||
144 | } | ||
145 | |||
146 | void *drm_alloc (size_t size, int area) { | ||
147 | void *pt; | ||
148 | |||
149 | if (!size) { | ||
150 | DRM_MEM_ERROR(area, "Allocating 0 bytes\n"); | ||
151 | return NULL; | ||
152 | } | ||
153 | |||
154 | if (!(pt = kmalloc(size, GFP_KERNEL))) { | ||
155 | spin_lock(&drm_mem_lock); | ||
156 | ++drm_mem_stats[area].fail_count; | ||
157 | spin_unlock(&drm_mem_lock); | ||
158 | return NULL; | ||
159 | } | ||
160 | spin_lock(&drm_mem_lock); | ||
161 | ++drm_mem_stats[area].succeed_count; | ||
162 | drm_mem_stats[area].bytes_allocated += size; | ||
163 | spin_unlock(&drm_mem_lock); | ||
164 | return pt; | ||
165 | } | ||
166 | |||
167 | void *drm_calloc (size_t nmemb, size_t size, int area) { | ||
168 | void *addr; | ||
169 | |||
170 | addr = drm_alloc (nmemb * size, area); | ||
171 | if (addr != NULL) | ||
172 | memset((void *)addr, 0, size * nmemb); | ||
173 | |||
174 | return addr; | ||
175 | } | ||
176 | |||
177 | void *drm_realloc (void *oldpt, size_t oldsize, size_t size, int area) { | ||
178 | void *pt; | ||
179 | |||
180 | if (!(pt = drm_alloc (size, area))) | ||
181 | return NULL; | ||
182 | if (oldpt && oldsize) { | ||
183 | memcpy(pt, oldpt, oldsize); | ||
184 | drm_free (oldpt, oldsize, area); | ||
185 | } | ||
186 | return pt; | ||
187 | } | ||
188 | |||
189 | void drm_free (void *pt, size_t size, int area) { | ||
190 | int alloc_count; | ||
191 | int free_count; | ||
192 | |||
193 | if (!pt) | ||
194 | DRM_MEM_ERROR(area, "Attempt to free NULL pointer\n"); | ||
195 | else | ||
196 | kfree(pt); | ||
197 | spin_lock(&drm_mem_lock); | ||
198 | drm_mem_stats[area].bytes_freed += size; | ||
199 | free_count = ++drm_mem_stats[area].free_count; | ||
200 | alloc_count = drm_mem_stats[area].succeed_count; | ||
201 | spin_unlock(&drm_mem_lock); | ||
202 | if (free_count > alloc_count) { | ||
203 | DRM_MEM_ERROR(area, "Excess frees: %d frees, %d allocs\n", | ||
204 | free_count, alloc_count); | ||
205 | } | ||
206 | } | ||
207 | |||
208 | #if __OS_HAS_AGP | ||
209 | |||
210 | DRM_AGP_MEM *drm_alloc_agp (drm_device_t *dev, int pages, u32 type) { | ||
211 | DRM_AGP_MEM *handle; | ||
212 | |||
213 | if (!pages) { | ||
214 | DRM_MEM_ERROR(DRM_MEM_TOTALAGP, "Allocating 0 pages\n"); | ||
215 | return NULL; | ||
216 | } | ||
217 | |||
218 | if ((handle = drm_agp_allocate_memory (pages, type))) { | ||
219 | spin_lock(&drm_mem_lock); | ||
220 | ++drm_mem_stats[DRM_MEM_TOTALAGP].succeed_count; | ||
221 | drm_mem_stats[DRM_MEM_TOTALAGP].bytes_allocated | ||
222 | += pages << PAGE_SHIFT; | ||
223 | spin_unlock(&drm_mem_lock); | ||
224 | return handle; | ||
225 | } | ||
226 | spin_lock(&drm_mem_lock); | ||
227 | ++drm_mem_stats[DRM_MEM_TOTALAGP].fail_count; | ||
228 | spin_unlock(&drm_mem_lock); | ||
229 | return NULL; | ||
230 | } | ||
231 | |||
232 | int drm_free_agp (DRM_AGP_MEM * handle, int pages) { | ||
233 | int alloc_count; | ||
234 | int free_count; | ||
235 | int retval = -EINVAL; | ||
236 | |||
237 | if (!handle) { | ||
238 | DRM_MEM_ERROR(DRM_MEM_TOTALAGP, | ||
239 | "Attempt to free NULL AGP handle\n"); | ||
240 | return retval; | ||
241 | } | ||
242 | |||
243 | if (drm_agp_free_memory (handle)) { | ||
244 | spin_lock(&drm_mem_lock); | ||
245 | free_count = ++drm_mem_stats[DRM_MEM_TOTALAGP].free_count; | ||
246 | alloc_count = drm_mem_stats[DRM_MEM_TOTALAGP].succeed_count; | ||
247 | drm_mem_stats[DRM_MEM_TOTALAGP].bytes_freed | ||
248 | += pages << PAGE_SHIFT; | ||
249 | spin_unlock(&drm_mem_lock); | ||
250 | if (free_count > alloc_count) { | ||
251 | DRM_MEM_ERROR(DRM_MEM_TOTALAGP, | ||
252 | "Excess frees: %d frees, %d allocs\n", | ||
253 | free_count, alloc_count); | ||
254 | } | ||
255 | return 0; | ||
256 | } | ||
257 | return retval; | ||
258 | } | ||
259 | |||
260 | int drm_bind_agp (DRM_AGP_MEM * handle, unsigned int start) { | ||
261 | int retcode = -EINVAL; | ||
262 | |||
263 | if (!handle) { | ||
264 | DRM_MEM_ERROR(DRM_MEM_BOUNDAGP, | ||
265 | "Attempt to bind NULL AGP handle\n"); | ||
266 | return retcode; | ||
267 | } | ||
268 | |||
269 | if (!(retcode = drm_agp_bind_memory (handle, start))) { | ||
270 | spin_lock(&drm_mem_lock); | ||
271 | ++drm_mem_stats[DRM_MEM_BOUNDAGP].succeed_count; | ||
272 | drm_mem_stats[DRM_MEM_BOUNDAGP].bytes_allocated | ||
273 | += handle->page_count << PAGE_SHIFT; | ||
274 | spin_unlock(&drm_mem_lock); | ||
275 | return retcode; | ||
276 | } | ||
277 | spin_lock(&drm_mem_lock); | ||
278 | ++drm_mem_stats[DRM_MEM_BOUNDAGP].fail_count; | ||
279 | spin_unlock(&drm_mem_lock); | ||
280 | return retcode; | ||
281 | } | ||
282 | |||
283 | int drm_unbind_agp (DRM_AGP_MEM * handle) { | ||
284 | int alloc_count; | ||
285 | int free_count; | ||
286 | int retcode = -EINVAL; | ||
287 | |||
288 | if (!handle) { | ||
289 | DRM_MEM_ERROR(DRM_MEM_BOUNDAGP, | ||
290 | "Attempt to unbind NULL AGP handle\n"); | ||
291 | return retcode; | ||
292 | } | ||
293 | |||
294 | if ((retcode = drm_agp_unbind_memory (handle))) | ||
295 | return retcode; | ||
296 | spin_lock(&drm_mem_lock); | ||
297 | free_count = ++drm_mem_stats[DRM_MEM_BOUNDAGP].free_count; | ||
298 | alloc_count = drm_mem_stats[DRM_MEM_BOUNDAGP].succeed_count; | ||
299 | drm_mem_stats[DRM_MEM_BOUNDAGP].bytes_freed | ||
300 | += handle->page_count << PAGE_SHIFT; | ||
301 | spin_unlock(&drm_mem_lock); | ||
302 | if (free_count > alloc_count) { | ||
303 | DRM_MEM_ERROR(DRM_MEM_BOUNDAGP, | ||
304 | "Excess frees: %d frees, %d allocs\n", | ||
305 | free_count, alloc_count); | ||
306 | } | ||
307 | return retcode; | ||
308 | } | ||
309 | #endif | ||
diff --git a/include/drm/drm_os_linux.h b/include/drm/drm_os_linux.h new file mode 100644 index 000000000000..8dbd2572b7c3 --- /dev/null +++ b/include/drm/drm_os_linux.h | |||
@@ -0,0 +1,108 @@ | |||
1 | /** | ||
2 | * \file drm_os_linux.h | ||
3 | * OS abstraction macros. | ||
4 | */ | ||
5 | |||
6 | #include <linux/interrupt.h> /* For task queue support */ | ||
7 | #include <linux/delay.h> | ||
8 | |||
9 | /** Current process ID */ | ||
10 | #define DRM_CURRENTPID task_pid_nr(current) | ||
11 | #define DRM_SUSER(p) capable(CAP_SYS_ADMIN) | ||
12 | #define DRM_UDELAY(d) udelay(d) | ||
13 | /** Read a byte from a MMIO region */ | ||
14 | #define DRM_READ8(map, offset) readb(((void __iomem *)(map)->handle) + (offset)) | ||
15 | /** Read a word from a MMIO region */ | ||
16 | #define DRM_READ16(map, offset) readw(((void __iomem *)(map)->handle) + (offset)) | ||
17 | /** Read a dword from a MMIO region */ | ||
18 | #define DRM_READ32(map, offset) readl(((void __iomem *)(map)->handle) + (offset)) | ||
19 | /** Write a byte into a MMIO region */ | ||
20 | #define DRM_WRITE8(map, offset, val) writeb(val, ((void __iomem *)(map)->handle) + (offset)) | ||
21 | /** Write a word into a MMIO region */ | ||
22 | #define DRM_WRITE16(map, offset, val) writew(val, ((void __iomem *)(map)->handle) + (offset)) | ||
23 | /** Write a dword into a MMIO region */ | ||
24 | #define DRM_WRITE32(map, offset, val) writel(val, ((void __iomem *)(map)->handle) + (offset)) | ||
25 | /** Read memory barrier */ | ||
26 | #define DRM_READMEMORYBARRIER() rmb() | ||
27 | /** Write memory barrier */ | ||
28 | #define DRM_WRITEMEMORYBARRIER() wmb() | ||
29 | /** Read/write memory barrier */ | ||
30 | #define DRM_MEMORYBARRIER() mb() | ||
31 | |||
32 | /** IRQ handler arguments and return type and values */ | ||
33 | #define DRM_IRQ_ARGS int irq, void *arg | ||
34 | |||
35 | /** AGP types */ | ||
36 | #if __OS_HAS_AGP | ||
37 | #define DRM_AGP_MEM struct agp_memory | ||
38 | #define DRM_AGP_KERN struct agp_kern_info | ||
39 | #else | ||
40 | /* define some dummy types for non AGP supporting kernels */ | ||
41 | struct no_agp_kern { | ||
42 | unsigned long aper_base; | ||
43 | unsigned long aper_size; | ||
44 | }; | ||
45 | #define DRM_AGP_MEM int | ||
46 | #define DRM_AGP_KERN struct no_agp_kern | ||
47 | #endif | ||
48 | |||
49 | #if !(__OS_HAS_MTRR) | ||
50 | static __inline__ int mtrr_add(unsigned long base, unsigned long size, | ||
51 | unsigned int type, char increment) | ||
52 | { | ||
53 | return -ENODEV; | ||
54 | } | ||
55 | |||
56 | static __inline__ int mtrr_del(int reg, unsigned long base, unsigned long size) | ||
57 | { | ||
58 | return -ENODEV; | ||
59 | } | ||
60 | |||
61 | #define MTRR_TYPE_WRCOMB 1 | ||
62 | |||
63 | #endif | ||
64 | |||
65 | /** Other copying of data to kernel space */ | ||
66 | #define DRM_COPY_FROM_USER(arg1, arg2, arg3) \ | ||
67 | copy_from_user(arg1, arg2, arg3) | ||
68 | /** Other copying of data from kernel space */ | ||
69 | #define DRM_COPY_TO_USER(arg1, arg2, arg3) \ | ||
70 | copy_to_user(arg1, arg2, arg3) | ||
71 | /* Macros for copyfrom user, but checking readability only once */ | ||
72 | #define DRM_VERIFYAREA_READ( uaddr, size ) \ | ||
73 | (access_ok( VERIFY_READ, uaddr, size ) ? 0 : -EFAULT) | ||
74 | #define DRM_COPY_FROM_USER_UNCHECKED(arg1, arg2, arg3) \ | ||
75 | __copy_from_user(arg1, arg2, arg3) | ||
76 | #define DRM_COPY_TO_USER_UNCHECKED(arg1, arg2, arg3) \ | ||
77 | __copy_to_user(arg1, arg2, arg3) | ||
78 | #define DRM_GET_USER_UNCHECKED(val, uaddr) \ | ||
79 | __get_user(val, uaddr) | ||
80 | |||
81 | #define DRM_HZ HZ | ||
82 | |||
83 | #define DRM_WAIT_ON( ret, queue, timeout, condition ) \ | ||
84 | do { \ | ||
85 | DECLARE_WAITQUEUE(entry, current); \ | ||
86 | unsigned long end = jiffies + (timeout); \ | ||
87 | add_wait_queue(&(queue), &entry); \ | ||
88 | \ | ||
89 | for (;;) { \ | ||
90 | __set_current_state(TASK_INTERRUPTIBLE); \ | ||
91 | if (condition) \ | ||
92 | break; \ | ||
93 | if (time_after_eq(jiffies, end)) { \ | ||
94 | ret = -EBUSY; \ | ||
95 | break; \ | ||
96 | } \ | ||
97 | schedule_timeout((HZ/100 > 1) ? HZ/100 : 1); \ | ||
98 | if (signal_pending(current)) { \ | ||
99 | ret = -EINTR; \ | ||
100 | break; \ | ||
101 | } \ | ||
102 | } \ | ||
103 | __set_current_state(TASK_RUNNING); \ | ||
104 | remove_wait_queue(&(queue), &entry); \ | ||
105 | } while (0) | ||
106 | |||
107 | #define DRM_WAKEUP( queue ) wake_up_interruptible( queue ) | ||
108 | #define DRM_INIT_WAITQUEUE( queue ) init_waitqueue_head( queue ) | ||
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h new file mode 100644 index 000000000000..135bd19499fc --- /dev/null +++ b/include/drm/drm_pciids.h | |||
@@ -0,0 +1,415 @@ | |||
1 | /* | ||
2 | This file is auto-generated from the drm_pciids.txt in the DRM CVS | ||
3 | Please contact dri-devel@lists.sf.net to add new cards to this list | ||
4 | */ | ||
5 | #define radeon_PCI_IDS \ | ||
6 | {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ | ||
7 | {0x1002, 0x3152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
8 | {0x1002, 0x3154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
9 | {0x1002, 0x3E50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ | ||
10 | {0x1002, 0x3E54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ | ||
11 | {0x1002, 0x4136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|RADEON_IS_IGP}, \ | ||
12 | {0x1002, 0x4137, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP}, \ | ||
13 | {0x1002, 0x4144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | ||
14 | {0x1002, 0x4145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | ||
15 | {0x1002, 0x4146, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | ||
16 | {0x1002, 0x4147, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | ||
17 | {0x1002, 0x4148, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \ | ||
18 | {0x1002, 0x4149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \ | ||
19 | {0x1002, 0x414A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \ | ||
20 | {0x1002, 0x414B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \ | ||
21 | {0x1002, 0x4150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \ | ||
22 | {0x1002, 0x4151, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \ | ||
23 | {0x1002, 0x4152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \ | ||
24 | {0x1002, 0x4153, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \ | ||
25 | {0x1002, 0x4154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \ | ||
26 | {0x1002, 0x4155, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \ | ||
27 | {0x1002, 0x4156, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \ | ||
28 | {0x1002, 0x4237, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP}, \ | ||
29 | {0x1002, 0x4242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \ | ||
30 | {0x1002, 0x4243, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \ | ||
31 | {0x1002, 0x4336, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \ | ||
32 | {0x1002, 0x4337, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \ | ||
33 | {0x1002, 0x4437, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \ | ||
34 | {0x1002, 0x4966, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250}, \ | ||
35 | {0x1002, 0x4967, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250}, \ | ||
36 | {0x1002, 0x4A48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
37 | {0x1002, 0x4A49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
38 | {0x1002, 0x4A4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
39 | {0x1002, 0x4A4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
40 | {0x1002, 0x4A4C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
41 | {0x1002, 0x4A4D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
42 | {0x1002, 0x4A4E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
43 | {0x1002, 0x4A4F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
44 | {0x1002, 0x4A50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
45 | {0x1002, 0x4A54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
46 | {0x1002, 0x4B49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
47 | {0x1002, 0x4B4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
48 | {0x1002, 0x4B4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
49 | {0x1002, 0x4B4C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
50 | {0x1002, 0x4C57, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV200|RADEON_IS_MOBILITY}, \ | ||
51 | {0x1002, 0x4C58, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV200|RADEON_IS_MOBILITY}, \ | ||
52 | {0x1002, 0x4C59, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100|RADEON_IS_MOBILITY}, \ | ||
53 | {0x1002, 0x4C5A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100|RADEON_IS_MOBILITY}, \ | ||
54 | {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ | ||
55 | {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ | ||
56 | {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ | ||
57 | {0x1002, 0x4E44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | ||
58 | {0x1002, 0x4E45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | ||
59 | {0x1002, 0x4E46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | ||
60 | {0x1002, 0x4E47, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | ||
61 | {0x1002, 0x4E48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \ | ||
62 | {0x1002, 0x4E49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \ | ||
63 | {0x1002, 0x4E4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \ | ||
64 | {0x1002, 0x4E4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \ | ||
65 | {0x1002, 0x4E50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \ | ||
66 | {0x1002, 0x4E51, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \ | ||
67 | {0x1002, 0x4E52, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \ | ||
68 | {0x1002, 0x4E53, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \ | ||
69 | {0x1002, 0x4E54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \ | ||
70 | {0x1002, 0x4E56, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \ | ||
71 | {0x1002, 0x5144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R100|RADEON_SINGLE_CRTC}, \ | ||
72 | {0x1002, 0x5145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R100|RADEON_SINGLE_CRTC}, \ | ||
73 | {0x1002, 0x5146, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R100|RADEON_SINGLE_CRTC}, \ | ||
74 | {0x1002, 0x5147, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R100|RADEON_SINGLE_CRTC}, \ | ||
75 | {0x1002, 0x5148, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \ | ||
76 | {0x1002, 0x514C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \ | ||
77 | {0x1002, 0x514D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \ | ||
78 | {0x1002, 0x5157, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV200}, \ | ||
79 | {0x1002, 0x5158, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV200}, \ | ||
80 | {0x1002, 0x5159, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100}, \ | ||
81 | {0x1002, 0x515A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100}, \ | ||
82 | {0x1002, 0x515E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100}, \ | ||
83 | {0x1002, 0x5460, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ | ||
84 | {0x1002, 0x5462, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ | ||
85 | {0x1002, 0x5464, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ | ||
86 | {0x1002, 0x5657, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ | ||
87 | {0x1002, 0x5548, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
88 | {0x1002, 0x5549, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
89 | {0x1002, 0x554A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
90 | {0x1002, 0x554B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
91 | {0x1002, 0x554C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
92 | {0x1002, 0x554D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
93 | {0x1002, 0x554E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
94 | {0x1002, 0x554F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
95 | {0x1002, 0x5550, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
96 | {0x1002, 0x5551, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
97 | {0x1002, 0x5552, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
98 | {0x1002, 0x5554, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
99 | {0x1002, 0x564A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
100 | {0x1002, 0x564B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
101 | {0x1002, 0x564F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
102 | {0x1002, 0x5652, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
103 | {0x1002, 0x5653, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
104 | {0x1002, 0x5834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP}, \ | ||
105 | {0x1002, 0x5835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \ | ||
106 | {0x1002, 0x5954, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \ | ||
107 | {0x1002, 0x5955, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \ | ||
108 | {0x1002, 0x5974, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \ | ||
109 | {0x1002, 0x5975, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \ | ||
110 | {0x1002, 0x5960, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \ | ||
111 | {0x1002, 0x5961, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \ | ||
112 | {0x1002, 0x5962, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \ | ||
113 | {0x1002, 0x5964, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \ | ||
114 | {0x1002, 0x5965, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \ | ||
115 | {0x1002, 0x5969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100}, \ | ||
116 | {0x1002, 0x5a61, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \ | ||
117 | {0x1002, 0x5a62, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \ | ||
118 | {0x1002, 0x5b60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ | ||
119 | {0x1002, 0x5b62, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ | ||
120 | {0x1002, 0x5b63, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ | ||
121 | {0x1002, 0x5b64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ | ||
122 | {0x1002, 0x5b65, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ | ||
123 | {0x1002, 0x5c61, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \ | ||
124 | {0x1002, 0x5c63, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \ | ||
125 | {0x1002, 0x5d48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
126 | {0x1002, 0x5d49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
127 | {0x1002, 0x5d4a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
128 | {0x1002, 0x5d4c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
129 | {0x1002, 0x5d4d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
130 | {0x1002, 0x5d4e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
131 | {0x1002, 0x5d4f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
132 | {0x1002, 0x5d50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
133 | {0x1002, 0x5d52, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
134 | {0x1002, 0x5d57, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
135 | {0x1002, 0x5e48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \ | ||
136 | {0x1002, 0x5e4a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \ | ||
137 | {0x1002, 0x5e4b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \ | ||
138 | {0x1002, 0x5e4c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \ | ||
139 | {0x1002, 0x5e4d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \ | ||
140 | {0x1002, 0x5e4f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \ | ||
141 | {0x1002, 0x7100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
142 | {0x1002, 0x7101, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
143 | {0x1002, 0x7102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
144 | {0x1002, 0x7103, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
145 | {0x1002, 0x7104, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
146 | {0x1002, 0x7105, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
147 | {0x1002, 0x7106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
148 | {0x1002, 0x7108, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
149 | {0x1002, 0x7109, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
150 | {0x1002, 0x710A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
151 | {0x1002, 0x710B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
152 | {0x1002, 0x710C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
153 | {0x1002, 0x710E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
154 | {0x1002, 0x710F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \ | ||
155 | {0x1002, 0x7140, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
156 | {0x1002, 0x7141, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
157 | {0x1002, 0x7142, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
158 | {0x1002, 0x7143, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
159 | {0x1002, 0x7144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
160 | {0x1002, 0x7145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
161 | {0x1002, 0x7146, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
162 | {0x1002, 0x7147, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
163 | {0x1002, 0x7149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
164 | {0x1002, 0x714A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
165 | {0x1002, 0x714B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
166 | {0x1002, 0x714C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
167 | {0x1002, 0x714D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
168 | {0x1002, 0x714E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
169 | {0x1002, 0x714F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
170 | {0x1002, 0x7151, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
171 | {0x1002, 0x7152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
172 | {0x1002, 0x7153, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
173 | {0x1002, 0x715E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
174 | {0x1002, 0x715F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
175 | {0x1002, 0x7180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
176 | {0x1002, 0x7181, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
177 | {0x1002, 0x7183, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
178 | {0x1002, 0x7186, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
179 | {0x1002, 0x7187, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
180 | {0x1002, 0x7188, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
181 | {0x1002, 0x718A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
182 | {0x1002, 0x718B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
183 | {0x1002, 0x718C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
184 | {0x1002, 0x718D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
185 | {0x1002, 0x718F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
186 | {0x1002, 0x7193, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
187 | {0x1002, 0x7196, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
188 | {0x1002, 0x719B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
189 | {0x1002, 0x719F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
190 | {0x1002, 0x71C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
191 | {0x1002, 0x71C1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
192 | {0x1002, 0x71C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
193 | {0x1002, 0x71C3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
194 | {0x1002, 0x71C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
195 | {0x1002, 0x71C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
196 | {0x1002, 0x71C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
197 | {0x1002, 0x71C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
198 | {0x1002, 0x71CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
199 | {0x1002, 0x71CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
200 | {0x1002, 0x71D2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
201 | {0x1002, 0x71D4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
202 | {0x1002, 0x71D5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
203 | {0x1002, 0x71D6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
204 | {0x1002, 0x71DA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \ | ||
205 | {0x1002, 0x71DE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
206 | {0x1002, 0x7200, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \ | ||
207 | {0x1002, 0x7210, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
208 | {0x1002, 0x7211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
209 | {0x1002, 0x7240, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
210 | {0x1002, 0x7243, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
211 | {0x1002, 0x7244, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
212 | {0x1002, 0x7245, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
213 | {0x1002, 0x7246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
214 | {0x1002, 0x7247, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
215 | {0x1002, 0x7248, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
216 | {0x1002, 0x7249, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
217 | {0x1002, 0x724A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
218 | {0x1002, 0x724B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
219 | {0x1002, 0x724C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
220 | {0x1002, 0x724D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
221 | {0x1002, 0x724E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
222 | {0x1002, 0x724F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \ | ||
223 | {0x1002, 0x7280, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \ | ||
224 | {0x1002, 0x7281, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \ | ||
225 | {0x1002, 0x7283, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \ | ||
226 | {0x1002, 0x7284, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
227 | {0x1002, 0x7287, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \ | ||
228 | {0x1002, 0x7288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \ | ||
229 | {0x1002, 0x7289, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \ | ||
230 | {0x1002, 0x728B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \ | ||
231 | {0x1002, 0x728C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \ | ||
232 | {0x1002, 0x7290, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \ | ||
233 | {0x1002, 0x7291, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \ | ||
234 | {0x1002, 0x7293, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \ | ||
235 | {0x1002, 0x7297, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \ | ||
236 | {0x1002, 0x7834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \ | ||
237 | {0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
238 | {0x1002, 0x791e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | ||
239 | {0x1002, 0x791f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | ||
240 | {0, 0, 0} | ||
241 | |||
242 | #define r128_PCI_IDS \ | ||
243 | {0x1002, 0x4c45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
244 | {0x1002, 0x4c46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
245 | {0x1002, 0x4d46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
246 | {0x1002, 0x4d4c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
247 | {0x1002, 0x5041, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
248 | {0x1002, 0x5042, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
249 | {0x1002, 0x5043, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
250 | {0x1002, 0x5044, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
251 | {0x1002, 0x5045, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
252 | {0x1002, 0x5046, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
253 | {0x1002, 0x5047, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
254 | {0x1002, 0x5048, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
255 | {0x1002, 0x5049, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
256 | {0x1002, 0x504A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
257 | {0x1002, 0x504B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
258 | {0x1002, 0x504C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
259 | {0x1002, 0x504D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
260 | {0x1002, 0x504E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
261 | {0x1002, 0x504F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
262 | {0x1002, 0x5050, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
263 | {0x1002, 0x5051, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
264 | {0x1002, 0x5052, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
265 | {0x1002, 0x5053, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
266 | {0x1002, 0x5054, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
267 | {0x1002, 0x5055, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
268 | {0x1002, 0x5056, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
269 | {0x1002, 0x5057, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
270 | {0x1002, 0x5058, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
271 | {0x1002, 0x5245, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
272 | {0x1002, 0x5246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
273 | {0x1002, 0x5247, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
274 | {0x1002, 0x524b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
275 | {0x1002, 0x524c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
276 | {0x1002, 0x534d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
277 | {0x1002, 0x5446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
278 | {0x1002, 0x544C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
279 | {0x1002, 0x5452, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
280 | {0, 0, 0} | ||
281 | |||
282 | #define mga_PCI_IDS \ | ||
283 | {0x102b, 0x0520, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MGA_CARD_TYPE_G200}, \ | ||
284 | {0x102b, 0x0521, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MGA_CARD_TYPE_G200}, \ | ||
285 | {0x102b, 0x0525, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MGA_CARD_TYPE_G400}, \ | ||
286 | {0x102b, 0x2527, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MGA_CARD_TYPE_G550}, \ | ||
287 | {0, 0, 0} | ||
288 | |||
289 | #define mach64_PCI_IDS \ | ||
290 | {0x1002, 0x4749, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
291 | {0x1002, 0x4750, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
292 | {0x1002, 0x4751, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
293 | {0x1002, 0x4742, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
294 | {0x1002, 0x4744, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
295 | {0x1002, 0x4c49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
296 | {0x1002, 0x4c50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
297 | {0x1002, 0x4c51, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
298 | {0x1002, 0x4c42, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
299 | {0x1002, 0x4c44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
300 | {0x1002, 0x474c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
301 | {0x1002, 0x474f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
302 | {0x1002, 0x4752, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
303 | {0x1002, 0x4753, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
304 | {0x1002, 0x474d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
305 | {0x1002, 0x474e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
306 | {0x1002, 0x4c52, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
307 | {0x1002, 0x4c53, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
308 | {0x1002, 0x4c4d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
309 | {0x1002, 0x4c4e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
310 | {0, 0, 0} | ||
311 | |||
312 | #define sisdrv_PCI_IDS \ | ||
313 | {0x1039, 0x0300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
314 | {0x1039, 0x5300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
315 | {0x1039, 0x6300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
316 | {0x1039, 0x6330, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ | ||
317 | {0x1039, 0x6351, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
318 | {0x1039, 0x7300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
319 | {0x18CA, 0x0040, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ | ||
320 | {0x18CA, 0x0042, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ | ||
321 | {0, 0, 0} | ||
322 | |||
323 | #define tdfx_PCI_IDS \ | ||
324 | {0x121a, 0x0003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
325 | {0x121a, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
326 | {0x121a, 0x0005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
327 | {0x121a, 0x0007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
328 | {0x121a, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
329 | {0x121a, 0x000b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
330 | {0, 0, 0} | ||
331 | |||
332 | #define viadrv_PCI_IDS \ | ||
333 | {0x1106, 0x3022, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
334 | {0x1106, 0x3118, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VIA_PRO_GROUP_A}, \ | ||
335 | {0x1106, 0x3122, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
336 | {0x1106, 0x7205, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
337 | {0x1106, 0x3108, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
338 | {0x1106, 0x3344, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
339 | {0x1106, 0x3343, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
340 | {0x1106, 0x3230, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VIA_DX9_0}, \ | ||
341 | {0x1106, 0x3157, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VIA_PRO_GROUP_A}, \ | ||
342 | {0, 0, 0} | ||
343 | |||
344 | #define i810_PCI_IDS \ | ||
345 | {0x8086, 0x7121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
346 | {0x8086, 0x7123, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
347 | {0x8086, 0x7125, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
348 | {0x8086, 0x1132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
349 | {0, 0, 0} | ||
350 | |||
351 | #define i830_PCI_IDS \ | ||
352 | {0x8086, 0x3577, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
353 | {0x8086, 0x2562, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
354 | {0x8086, 0x3582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
355 | {0x8086, 0x2572, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
356 | {0, 0, 0} | ||
357 | |||
358 | #define gamma_PCI_IDS \ | ||
359 | {0x3d3d, 0x0008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
360 | {0, 0, 0} | ||
361 | |||
362 | #define savage_PCI_IDS \ | ||
363 | {0x5333, 0x8a20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SAVAGE3D}, \ | ||
364 | {0x5333, 0x8a21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SAVAGE3D}, \ | ||
365 | {0x5333, 0x8a22, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SAVAGE4}, \ | ||
366 | {0x5333, 0x8a23, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SAVAGE4}, \ | ||
367 | {0x5333, 0x8c10, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SAVAGE_MX}, \ | ||
368 | {0x5333, 0x8c11, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SAVAGE_MX}, \ | ||
369 | {0x5333, 0x8c12, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SAVAGE_MX}, \ | ||
370 | {0x5333, 0x8c13, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SAVAGE_MX}, \ | ||
371 | {0x5333, 0x8c22, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SUPERSAVAGE}, \ | ||
372 | {0x5333, 0x8c24, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SUPERSAVAGE}, \ | ||
373 | {0x5333, 0x8c26, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SUPERSAVAGE}, \ | ||
374 | {0x5333, 0x8c2a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SUPERSAVAGE}, \ | ||
375 | {0x5333, 0x8c2b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SUPERSAVAGE}, \ | ||
376 | {0x5333, 0x8c2c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SUPERSAVAGE}, \ | ||
377 | {0x5333, 0x8c2d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SUPERSAVAGE}, \ | ||
378 | {0x5333, 0x8c2e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SUPERSAVAGE}, \ | ||
379 | {0x5333, 0x8c2f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_SUPERSAVAGE}, \ | ||
380 | {0x5333, 0x8a25, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_PROSAVAGE}, \ | ||
381 | {0x5333, 0x8a26, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_PROSAVAGE}, \ | ||
382 | {0x5333, 0x8d01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_TWISTER}, \ | ||
383 | {0x5333, 0x8d02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_TWISTER}, \ | ||
384 | {0x5333, 0x8d03, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_PROSAVAGEDDR}, \ | ||
385 | {0x5333, 0x8d04, PCI_ANY_ID, PCI_ANY_ID, 0, 0, S3_PROSAVAGEDDR}, \ | ||
386 | {0, 0, 0} | ||
387 | |||
388 | #define ffb_PCI_IDS \ | ||
389 | {0, 0, 0} | ||
390 | |||
391 | #define i915_PCI_IDS \ | ||
392 | {0x8086, 0x3577, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
393 | {0x8086, 0x2562, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
394 | {0x8086, 0x3582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
395 | {0x8086, 0x2572, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
396 | {0x8086, 0x2582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
397 | {0x8086, 0x258a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
398 | {0x8086, 0x2592, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
399 | {0x8086, 0x2772, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
400 | {0x8086, 0x27a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
401 | {0x8086, 0x27ae, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
402 | {0x8086, 0x2972, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
403 | {0x8086, 0x2982, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
404 | {0x8086, 0x2992, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
405 | {0x8086, 0x29a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
406 | {0x8086, 0x29b2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
407 | {0x8086, 0x29c2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
408 | {0x8086, 0x29d2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
409 | {0x8086, 0x2a02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
410 | {0x8086, 0x2a12, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
411 | {0x8086, 0x2a42, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
412 | {0x8086, 0x2e02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
413 | {0x8086, 0x2e12, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
414 | {0x8086, 0x2e22, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | ||
415 | {0, 0, 0} | ||
diff --git a/include/drm/drm_sarea.h b/include/drm/drm_sarea.h new file mode 100644 index 000000000000..480037331e4e --- /dev/null +++ b/include/drm/drm_sarea.h | |||
@@ -0,0 +1,84 @@ | |||
1 | /** | ||
2 | * \file drm_sarea.h | ||
3 | * \brief SAREA definitions | ||
4 | * | ||
5 | * \author Michel Dänzer <michel@daenzer.net> | ||
6 | */ | ||
7 | |||
8 | /* | ||
9 | * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. | ||
10 | * All Rights Reserved. | ||
11 | * | ||
12 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
13 | * copy of this software and associated documentation files (the "Software"), | ||
14 | * to deal in the Software without restriction, including without limitation | ||
15 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
16 | * and/or sell copies of the Software, and to permit persons to whom the | ||
17 | * Software is furnished to do so, subject to the following conditions: | ||
18 | * | ||
19 | * The above copyright notice and this permission notice (including the next | ||
20 | * paragraph) shall be included in all copies or substantial portions of the | ||
21 | * Software. | ||
22 | * | ||
23 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
24 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
25 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
26 | * TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
27 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
28 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
29 | * OTHER DEALINGS IN THE SOFTWARE. | ||
30 | */ | ||
31 | |||
32 | #ifndef _DRM_SAREA_H_ | ||
33 | #define _DRM_SAREA_H_ | ||
34 | |||
35 | #include "drm.h" | ||
36 | |||
37 | /* SAREA area needs to be at least a page */ | ||
38 | #if defined(__alpha__) | ||
39 | #define SAREA_MAX 0x2000 | ||
40 | #elif defined(__ia64__) | ||
41 | #define SAREA_MAX 0x10000 /* 64kB */ | ||
42 | #else | ||
43 | /* Intel 830M driver needs at least 8k SAREA */ | ||
44 | #define SAREA_MAX 0x2000 | ||
45 | #endif | ||
46 | |||
47 | /** Maximum number of drawables in the SAREA */ | ||
48 | #define SAREA_MAX_DRAWABLES 256 | ||
49 | |||
50 | #define SAREA_DRAWABLE_CLAIMED_ENTRY 0x80000000 | ||
51 | |||
52 | /** SAREA drawable */ | ||
53 | struct drm_sarea_drawable { | ||
54 | unsigned int stamp; | ||
55 | unsigned int flags; | ||
56 | }; | ||
57 | |||
58 | /** SAREA frame */ | ||
59 | struct drm_sarea_frame { | ||
60 | unsigned int x; | ||
61 | unsigned int y; | ||
62 | unsigned int width; | ||
63 | unsigned int height; | ||
64 | unsigned int fullscreen; | ||
65 | }; | ||
66 | |||
67 | /** SAREA */ | ||
68 | struct drm_sarea { | ||
69 | /** first thing is always the DRM locking structure */ | ||
70 | struct drm_hw_lock lock; | ||
71 | /** \todo Use readers/writer lock for drm_sarea::drawable_lock */ | ||
72 | struct drm_hw_lock drawable_lock; | ||
73 | struct drm_sarea_drawable drawableTable[SAREA_MAX_DRAWABLES]; /**< drawables */ | ||
74 | struct drm_sarea_frame frame; /**< frame */ | ||
75 | drm_context_t dummy_context; | ||
76 | }; | ||
77 | |||
78 | #ifndef __KERNEL__ | ||
79 | typedef struct drm_sarea_drawable drm_sarea_drawable_t; | ||
80 | typedef struct drm_sarea_frame drm_sarea_frame_t; | ||
81 | typedef struct drm_sarea drm_sarea_t; | ||
82 | #endif | ||
83 | |||
84 | #endif /* _DRM_SAREA_H_ */ | ||
diff --git a/include/drm/drm_sman.h b/include/drm/drm_sman.h new file mode 100644 index 000000000000..08ecf83ad5d4 --- /dev/null +++ b/include/drm/drm_sman.h | |||
@@ -0,0 +1,176 @@ | |||
1 | /************************************************************************** | ||
2 | * | ||
3 | * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND., USA. | ||
4 | * All Rights Reserved. | ||
5 | * | ||
6 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
7 | * copy of this software and associated documentation files (the | ||
8 | * "Software"), to deal in the Software without restriction, including | ||
9 | * without limitation the rights to use, copy, modify, merge, publish, | ||
10 | * distribute, sub license, and/or sell copies of the Software, and to | ||
11 | * permit persons to whom the Software is furnished to do so, subject to | ||
12 | * the following conditions: | ||
13 | * | ||
14 | * The above copyright notice and this permission notice (including the | ||
15 | * next paragraph) shall be included in all copies or substantial portions | ||
16 | * of the Software. | ||
17 | * | ||
18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
20 | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL | ||
21 | * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, | ||
22 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
23 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
24 | * USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
25 | * | ||
26 | * | ||
27 | **************************************************************************/ | ||
28 | /* | ||
29 | * Simple memory MANager interface that keeps track on allocate regions on a | ||
30 | * per "owner" basis. All regions associated with an "owner" can be released | ||
31 | * with a simple call. Typically if the "owner" exists. The owner is any | ||
32 | * "unsigned long" identifier. Can typically be a pointer to a file private | ||
33 | * struct or a context identifier. | ||
34 | * | ||
35 | * Authors: | ||
36 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | ||
37 | */ | ||
38 | |||
39 | #ifndef DRM_SMAN_H | ||
40 | #define DRM_SMAN_H | ||
41 | |||
42 | #include "drmP.h" | ||
43 | #include "drm_hashtab.h" | ||
44 | |||
45 | /* | ||
46 | * A class that is an abstration of a simple memory allocator. | ||
47 | * The sman implementation provides a default such allocator | ||
48 | * using the drm_mm.c implementation. But the user can replace it. | ||
49 | * See the SiS implementation, which may use the SiS FB kernel module | ||
50 | * for memory management. | ||
51 | */ | ||
52 | |||
53 | struct drm_sman_mm { | ||
54 | /* private info. If allocated, needs to be destroyed by the destroy | ||
55 | function */ | ||
56 | void *private; | ||
57 | |||
58 | /* Allocate a memory block with given size and alignment. | ||
59 | Return an opaque reference to the memory block */ | ||
60 | |||
61 | void *(*allocate) (void *private, unsigned long size, | ||
62 | unsigned alignment); | ||
63 | |||
64 | /* Free a memory block. "ref" is the opaque reference that we got from | ||
65 | the "alloc" function */ | ||
66 | |||
67 | void (*free) (void *private, void *ref); | ||
68 | |||
69 | /* Free all resources associated with this allocator */ | ||
70 | |||
71 | void (*destroy) (void *private); | ||
72 | |||
73 | /* Return a memory offset from the opaque reference returned from the | ||
74 | "alloc" function */ | ||
75 | |||
76 | unsigned long (*offset) (void *private, void *ref); | ||
77 | }; | ||
78 | |||
79 | struct drm_memblock_item { | ||
80 | struct list_head owner_list; | ||
81 | struct drm_hash_item user_hash; | ||
82 | void *mm_info; | ||
83 | struct drm_sman_mm *mm; | ||
84 | struct drm_sman *sman; | ||
85 | }; | ||
86 | |||
87 | struct drm_sman { | ||
88 | struct drm_sman_mm *mm; | ||
89 | int num_managers; | ||
90 | struct drm_open_hash owner_hash_tab; | ||
91 | struct drm_open_hash user_hash_tab; | ||
92 | struct list_head owner_items; | ||
93 | }; | ||
94 | |||
95 | /* | ||
96 | * Take down a memory manager. This function should only be called after a | ||
97 | * successful init and after a call to drm_sman_cleanup. | ||
98 | */ | ||
99 | |||
100 | extern void drm_sman_takedown(struct drm_sman * sman); | ||
101 | |||
102 | /* | ||
103 | * Allocate structures for a manager. | ||
104 | * num_managers are the number of memory pools to manage. (VRAM, AGP, ....) | ||
105 | * user_order is the log2 of the number of buckets in the user hash table. | ||
106 | * set this to approximately log2 of the max number of memory regions | ||
107 | * that will be allocated for _all_ pools together. | ||
108 | * owner_order is the log2 of the number of buckets in the owner hash table. | ||
109 | * set this to approximately log2 of | ||
110 | * the number of client file connections that will | ||
111 | * be using the manager. | ||
112 | * | ||
113 | */ | ||
114 | |||
115 | extern int drm_sman_init(struct drm_sman * sman, unsigned int num_managers, | ||
116 | unsigned int user_order, unsigned int owner_order); | ||
117 | |||
118 | /* | ||
119 | * Initialize a drm_mm.c allocator. Should be called only once for each | ||
120 | * manager unless a customized allogator is used. | ||
121 | */ | ||
122 | |||
123 | extern int drm_sman_set_range(struct drm_sman * sman, unsigned int manager, | ||
124 | unsigned long start, unsigned long size); | ||
125 | |||
126 | /* | ||
127 | * Initialize a customized allocator for one of the managers. | ||
128 | * (See the SiS module). The object pointed to by "allocator" is copied, | ||
129 | * so it can be destroyed after this call. | ||
130 | */ | ||
131 | |||
132 | extern int drm_sman_set_manager(struct drm_sman * sman, unsigned int mananger, | ||
133 | struct drm_sman_mm * allocator); | ||
134 | |||
135 | /* | ||
136 | * Allocate a memory block. Aligment is not implemented yet. | ||
137 | */ | ||
138 | |||
139 | extern struct drm_memblock_item *drm_sman_alloc(struct drm_sman * sman, | ||
140 | unsigned int manager, | ||
141 | unsigned long size, | ||
142 | unsigned alignment, | ||
143 | unsigned long owner); | ||
144 | /* | ||
145 | * Free a memory block identified by its user hash key. | ||
146 | */ | ||
147 | |||
148 | extern int drm_sman_free_key(struct drm_sman * sman, unsigned int key); | ||
149 | |||
150 | /* | ||
151 | * returns 1 iff there are no stale memory blocks associated with this owner. | ||
152 | * Typically called to determine if we need to idle the hardware and call | ||
153 | * drm_sman_owner_cleanup. If there are no stale memory blocks, it removes all | ||
154 | * resources associated with owner. | ||
155 | */ | ||
156 | |||
157 | extern int drm_sman_owner_clean(struct drm_sman * sman, unsigned long owner); | ||
158 | |||
159 | /* | ||
160 | * Frees all stale memory blocks associated with this owner. Note that this | ||
161 | * requires that the hardware is finished with all blocks, so the graphics engine | ||
162 | * should be idled before this call is made. This function also frees | ||
163 | * any resources associated with "owner" and should be called when owner | ||
164 | * is not going to be referenced anymore. | ||
165 | */ | ||
166 | |||
167 | extern void drm_sman_owner_cleanup(struct drm_sman * sman, unsigned long owner); | ||
168 | |||
169 | /* | ||
170 | * Frees all stale memory blocks associated with the memory manager. | ||
171 | * See idling above. | ||
172 | */ | ||
173 | |||
174 | extern void drm_sman_cleanup(struct drm_sman * sman); | ||
175 | |||
176 | #endif | ||
diff --git a/include/drm/i810_drm.h b/include/drm/i810_drm.h new file mode 100644 index 000000000000..7a10bb6f2c0f --- /dev/null +++ b/include/drm/i810_drm.h | |||
@@ -0,0 +1,281 @@ | |||
1 | #ifndef _I810_DRM_H_ | ||
2 | #define _I810_DRM_H_ | ||
3 | |||
4 | /* WARNING: These defines must be the same as what the Xserver uses. | ||
5 | * if you change them, you must change the defines in the Xserver. | ||
6 | */ | ||
7 | |||
8 | #ifndef _I810_DEFINES_ | ||
9 | #define _I810_DEFINES_ | ||
10 | |||
11 | #define I810_DMA_BUF_ORDER 12 | ||
12 | #define I810_DMA_BUF_SZ (1<<I810_DMA_BUF_ORDER) | ||
13 | #define I810_DMA_BUF_NR 256 | ||
14 | #define I810_NR_SAREA_CLIPRECTS 8 | ||
15 | |||
16 | /* Each region is a minimum of 64k, and there are at most 64 of them. | ||
17 | */ | ||
18 | #define I810_NR_TEX_REGIONS 64 | ||
19 | #define I810_LOG_MIN_TEX_REGION_SIZE 16 | ||
20 | #endif | ||
21 | |||
22 | #define I810_UPLOAD_TEX0IMAGE 0x1 /* handled clientside */ | ||
23 | #define I810_UPLOAD_TEX1IMAGE 0x2 /* handled clientside */ | ||
24 | #define I810_UPLOAD_CTX 0x4 | ||
25 | #define I810_UPLOAD_BUFFERS 0x8 | ||
26 | #define I810_UPLOAD_TEX0 0x10 | ||
27 | #define I810_UPLOAD_TEX1 0x20 | ||
28 | #define I810_UPLOAD_CLIPRECTS 0x40 | ||
29 | |||
30 | /* Indices into buf.Setup where various bits of state are mirrored per | ||
31 | * context and per buffer. These can be fired at the card as a unit, | ||
32 | * or in a piecewise fashion as required. | ||
33 | */ | ||
34 | |||
35 | /* Destbuffer state | ||
36 | * - backbuffer linear offset and pitch -- invarient in the current dri | ||
37 | * - zbuffer linear offset and pitch -- also invarient | ||
38 | * - drawing origin in back and depth buffers. | ||
39 | * | ||
40 | * Keep the depth/back buffer state here to accommodate private buffers | ||
41 | * in the future. | ||
42 | */ | ||
43 | #define I810_DESTREG_DI0 0 /* CMD_OP_DESTBUFFER_INFO (2 dwords) */ | ||
44 | #define I810_DESTREG_DI1 1 | ||
45 | #define I810_DESTREG_DV0 2 /* GFX_OP_DESTBUFFER_VARS (2 dwords) */ | ||
46 | #define I810_DESTREG_DV1 3 | ||
47 | #define I810_DESTREG_DR0 4 /* GFX_OP_DRAWRECT_INFO (4 dwords) */ | ||
48 | #define I810_DESTREG_DR1 5 | ||
49 | #define I810_DESTREG_DR2 6 | ||
50 | #define I810_DESTREG_DR3 7 | ||
51 | #define I810_DESTREG_DR4 8 | ||
52 | #define I810_DEST_SETUP_SIZE 10 | ||
53 | |||
54 | /* Context state | ||
55 | */ | ||
56 | #define I810_CTXREG_CF0 0 /* GFX_OP_COLOR_FACTOR */ | ||
57 | #define I810_CTXREG_CF1 1 | ||
58 | #define I810_CTXREG_ST0 2 /* GFX_OP_STIPPLE */ | ||
59 | #define I810_CTXREG_ST1 3 | ||
60 | #define I810_CTXREG_VF 4 /* GFX_OP_VERTEX_FMT */ | ||
61 | #define I810_CTXREG_MT 5 /* GFX_OP_MAP_TEXELS */ | ||
62 | #define I810_CTXREG_MC0 6 /* GFX_OP_MAP_COLOR_STAGES - stage 0 */ | ||
63 | #define I810_CTXREG_MC1 7 /* GFX_OP_MAP_COLOR_STAGES - stage 1 */ | ||
64 | #define I810_CTXREG_MC2 8 /* GFX_OP_MAP_COLOR_STAGES - stage 2 */ | ||
65 | #define I810_CTXREG_MA0 9 /* GFX_OP_MAP_ALPHA_STAGES - stage 0 */ | ||
66 | #define I810_CTXREG_MA1 10 /* GFX_OP_MAP_ALPHA_STAGES - stage 1 */ | ||
67 | #define I810_CTXREG_MA2 11 /* GFX_OP_MAP_ALPHA_STAGES - stage 2 */ | ||
68 | #define I810_CTXREG_SDM 12 /* GFX_OP_SRC_DEST_MONO */ | ||
69 | #define I810_CTXREG_FOG 13 /* GFX_OP_FOG_COLOR */ | ||
70 | #define I810_CTXREG_B1 14 /* GFX_OP_BOOL_1 */ | ||
71 | #define I810_CTXREG_B2 15 /* GFX_OP_BOOL_2 */ | ||
72 | #define I810_CTXREG_LCS 16 /* GFX_OP_LINEWIDTH_CULL_SHADE_MODE */ | ||
73 | #define I810_CTXREG_PV 17 /* GFX_OP_PV_RULE -- Invarient! */ | ||
74 | #define I810_CTXREG_ZA 18 /* GFX_OP_ZBIAS_ALPHAFUNC */ | ||
75 | #define I810_CTXREG_AA 19 /* GFX_OP_ANTIALIAS */ | ||
76 | #define I810_CTX_SETUP_SIZE 20 | ||
77 | |||
78 | /* Texture state (per tex unit) | ||
79 | */ | ||
80 | #define I810_TEXREG_MI0 0 /* GFX_OP_MAP_INFO (4 dwords) */ | ||
81 | #define I810_TEXREG_MI1 1 | ||
82 | #define I810_TEXREG_MI2 2 | ||
83 | #define I810_TEXREG_MI3 3 | ||
84 | #define I810_TEXREG_MF 4 /* GFX_OP_MAP_FILTER */ | ||
85 | #define I810_TEXREG_MLC 5 /* GFX_OP_MAP_LOD_CTL */ | ||
86 | #define I810_TEXREG_MLL 6 /* GFX_OP_MAP_LOD_LIMITS */ | ||
87 | #define I810_TEXREG_MCS 7 /* GFX_OP_MAP_COORD_SETS ??? */ | ||
88 | #define I810_TEX_SETUP_SIZE 8 | ||
89 | |||
90 | /* Flags for clear ioctl | ||
91 | */ | ||
92 | #define I810_FRONT 0x1 | ||
93 | #define I810_BACK 0x2 | ||
94 | #define I810_DEPTH 0x4 | ||
95 | |||
96 | typedef enum _drm_i810_init_func { | ||
97 | I810_INIT_DMA = 0x01, | ||
98 | I810_CLEANUP_DMA = 0x02, | ||
99 | I810_INIT_DMA_1_4 = 0x03 | ||
100 | } drm_i810_init_func_t; | ||
101 | |||
102 | /* This is the init structure after v1.2 */ | ||
103 | typedef struct _drm_i810_init { | ||
104 | drm_i810_init_func_t func; | ||
105 | unsigned int mmio_offset; | ||
106 | unsigned int buffers_offset; | ||
107 | int sarea_priv_offset; | ||
108 | unsigned int ring_start; | ||
109 | unsigned int ring_end; | ||
110 | unsigned int ring_size; | ||
111 | unsigned int front_offset; | ||
112 | unsigned int back_offset; | ||
113 | unsigned int depth_offset; | ||
114 | unsigned int overlay_offset; | ||
115 | unsigned int overlay_physical; | ||
116 | unsigned int w; | ||
117 | unsigned int h; | ||
118 | unsigned int pitch; | ||
119 | unsigned int pitch_bits; | ||
120 | } drm_i810_init_t; | ||
121 | |||
122 | /* This is the init structure prior to v1.2 */ | ||
123 | typedef struct _drm_i810_pre12_init { | ||
124 | drm_i810_init_func_t func; | ||
125 | unsigned int mmio_offset; | ||
126 | unsigned int buffers_offset; | ||
127 | int sarea_priv_offset; | ||
128 | unsigned int ring_start; | ||
129 | unsigned int ring_end; | ||
130 | unsigned int ring_size; | ||
131 | unsigned int front_offset; | ||
132 | unsigned int back_offset; | ||
133 | unsigned int depth_offset; | ||
134 | unsigned int w; | ||
135 | unsigned int h; | ||
136 | unsigned int pitch; | ||
137 | unsigned int pitch_bits; | ||
138 | } drm_i810_pre12_init_t; | ||
139 | |||
140 | /* Warning: If you change the SAREA structure you must change the Xserver | ||
141 | * structure as well */ | ||
142 | |||
143 | typedef struct _drm_i810_tex_region { | ||
144 | unsigned char next, prev; /* indices to form a circular LRU */ | ||
145 | unsigned char in_use; /* owned by a client, or free? */ | ||
146 | int age; /* tracked by clients to update local LRU's */ | ||
147 | } drm_i810_tex_region_t; | ||
148 | |||
149 | typedef struct _drm_i810_sarea { | ||
150 | unsigned int ContextState[I810_CTX_SETUP_SIZE]; | ||
151 | unsigned int BufferState[I810_DEST_SETUP_SIZE]; | ||
152 | unsigned int TexState[2][I810_TEX_SETUP_SIZE]; | ||
153 | unsigned int dirty; | ||
154 | |||
155 | unsigned int nbox; | ||
156 | struct drm_clip_rect boxes[I810_NR_SAREA_CLIPRECTS]; | ||
157 | |||
158 | /* Maintain an LRU of contiguous regions of texture space. If | ||
159 | * you think you own a region of texture memory, and it has an | ||
160 | * age different to the one you set, then you are mistaken and | ||
161 | * it has been stolen by another client. If global texAge | ||
162 | * hasn't changed, there is no need to walk the list. | ||
163 | * | ||
164 | * These regions can be used as a proxy for the fine-grained | ||
165 | * texture information of other clients - by maintaining them | ||
166 | * in the same lru which is used to age their own textures, | ||
167 | * clients have an approximate lru for the whole of global | ||
168 | * texture space, and can make informed decisions as to which | ||
169 | * areas to kick out. There is no need to choose whether to | ||
170 | * kick out your own texture or someone else's - simply eject | ||
171 | * them all in LRU order. | ||
172 | */ | ||
173 | |||
174 | drm_i810_tex_region_t texList[I810_NR_TEX_REGIONS + 1]; | ||
175 | /* Last elt is sentinal */ | ||
176 | int texAge; /* last time texture was uploaded */ | ||
177 | int last_enqueue; /* last time a buffer was enqueued */ | ||
178 | int last_dispatch; /* age of the most recently dispatched buffer */ | ||
179 | int last_quiescent; /* */ | ||
180 | int ctxOwner; /* last context to upload state */ | ||
181 | |||
182 | int vertex_prim; | ||
183 | |||
184 | int pf_enabled; /* is pageflipping allowed? */ | ||
185 | int pf_active; | ||
186 | int pf_current_page; /* which buffer is being displayed? */ | ||
187 | } drm_i810_sarea_t; | ||
188 | |||
189 | /* WARNING: If you change any of these defines, make sure to change the | ||
190 | * defines in the Xserver file (xf86drmMga.h) | ||
191 | */ | ||
192 | |||
193 | /* i810 specific ioctls | ||
194 | * The device specific ioctl range is 0x40 to 0x79. | ||
195 | */ | ||
196 | #define DRM_I810_INIT 0x00 | ||
197 | #define DRM_I810_VERTEX 0x01 | ||
198 | #define DRM_I810_CLEAR 0x02 | ||
199 | #define DRM_I810_FLUSH 0x03 | ||
200 | #define DRM_I810_GETAGE 0x04 | ||
201 | #define DRM_I810_GETBUF 0x05 | ||
202 | #define DRM_I810_SWAP 0x06 | ||
203 | #define DRM_I810_COPY 0x07 | ||
204 | #define DRM_I810_DOCOPY 0x08 | ||
205 | #define DRM_I810_OV0INFO 0x09 | ||
206 | #define DRM_I810_FSTATUS 0x0a | ||
207 | #define DRM_I810_OV0FLIP 0x0b | ||
208 | #define DRM_I810_MC 0x0c | ||
209 | #define DRM_I810_RSTATUS 0x0d | ||
210 | #define DRM_I810_FLIP 0x0e | ||
211 | |||
212 | #define DRM_IOCTL_I810_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I810_INIT, drm_i810_init_t) | ||
213 | #define DRM_IOCTL_I810_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_I810_VERTEX, drm_i810_vertex_t) | ||
214 | #define DRM_IOCTL_I810_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_I810_CLEAR, drm_i810_clear_t) | ||
215 | #define DRM_IOCTL_I810_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_I810_FLUSH) | ||
216 | #define DRM_IOCTL_I810_GETAGE DRM_IO( DRM_COMMAND_BASE + DRM_I810_GETAGE) | ||
217 | #define DRM_IOCTL_I810_GETBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_I810_GETBUF, drm_i810_dma_t) | ||
218 | #define DRM_IOCTL_I810_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_I810_SWAP) | ||
219 | #define DRM_IOCTL_I810_COPY DRM_IOW( DRM_COMMAND_BASE + DRM_I810_COPY, drm_i810_copy_t) | ||
220 | #define DRM_IOCTL_I810_DOCOPY DRM_IO( DRM_COMMAND_BASE + DRM_I810_DOCOPY) | ||
221 | #define DRM_IOCTL_I810_OV0INFO DRM_IOR( DRM_COMMAND_BASE + DRM_I810_OV0INFO, drm_i810_overlay_t) | ||
222 | #define DRM_IOCTL_I810_FSTATUS DRM_IO ( DRM_COMMAND_BASE + DRM_I810_FSTATUS) | ||
223 | #define DRM_IOCTL_I810_OV0FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I810_OV0FLIP) | ||
224 | #define DRM_IOCTL_I810_MC DRM_IOW( DRM_COMMAND_BASE + DRM_I810_MC, drm_i810_mc_t) | ||
225 | #define DRM_IOCTL_I810_RSTATUS DRM_IO ( DRM_COMMAND_BASE + DRM_I810_RSTATUS) | ||
226 | #define DRM_IOCTL_I810_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I810_FLIP) | ||
227 | |||
228 | typedef struct _drm_i810_clear { | ||
229 | int clear_color; | ||
230 | int clear_depth; | ||
231 | int flags; | ||
232 | } drm_i810_clear_t; | ||
233 | |||
234 | /* These may be placeholders if we have more cliprects than | ||
235 | * I810_NR_SAREA_CLIPRECTS. In that case, the client sets discard to | ||
236 | * false, indicating that the buffer will be dispatched again with a | ||
237 | * new set of cliprects. | ||
238 | */ | ||
239 | typedef struct _drm_i810_vertex { | ||
240 | int idx; /* buffer index */ | ||
241 | int used; /* nr bytes in use */ | ||
242 | int discard; /* client is finished with the buffer? */ | ||
243 | } drm_i810_vertex_t; | ||
244 | |||
245 | typedef struct _drm_i810_copy_t { | ||
246 | int idx; /* buffer index */ | ||
247 | int used; /* nr bytes in use */ | ||
248 | void *address; /* Address to copy from */ | ||
249 | } drm_i810_copy_t; | ||
250 | |||
251 | #define PR_TRIANGLES (0x0<<18) | ||
252 | #define PR_TRISTRIP_0 (0x1<<18) | ||
253 | #define PR_TRISTRIP_1 (0x2<<18) | ||
254 | #define PR_TRIFAN (0x3<<18) | ||
255 | #define PR_POLYGON (0x4<<18) | ||
256 | #define PR_LINES (0x5<<18) | ||
257 | #define PR_LINESTRIP (0x6<<18) | ||
258 | #define PR_RECTS (0x7<<18) | ||
259 | #define PR_MASK (0x7<<18) | ||
260 | |||
261 | typedef struct drm_i810_dma { | ||
262 | void *virtual; | ||
263 | int request_idx; | ||
264 | int request_size; | ||
265 | int granted; | ||
266 | } drm_i810_dma_t; | ||
267 | |||
268 | typedef struct _drm_i810_overlay_t { | ||
269 | unsigned int offset; /* Address of the Overlay Regs */ | ||
270 | unsigned int physical; | ||
271 | } drm_i810_overlay_t; | ||
272 | |||
273 | typedef struct _drm_i810_mc { | ||
274 | int idx; /* buffer index */ | ||
275 | int used; /* nr bytes in use */ | ||
276 | int num_blocks; /* number of GFXBlocks */ | ||
277 | int *length; /* List of lengths for GFXBlocks (FUTURE) */ | ||
278 | unsigned int last_render; /* Last Render Request */ | ||
279 | } drm_i810_mc_t; | ||
280 | |||
281 | #endif /* _I810_DRM_H_ */ | ||
diff --git a/include/drm/i830_drm.h b/include/drm/i830_drm.h new file mode 100644 index 000000000000..4b00d2dd4f68 --- /dev/null +++ b/include/drm/i830_drm.h | |||
@@ -0,0 +1,342 @@ | |||
1 | #ifndef _I830_DRM_H_ | ||
2 | #define _I830_DRM_H_ | ||
3 | |||
4 | /* WARNING: These defines must be the same as what the Xserver uses. | ||
5 | * if you change them, you must change the defines in the Xserver. | ||
6 | * | ||
7 | * KW: Actually, you can't ever change them because doing so would | ||
8 | * break backwards compatibility. | ||
9 | */ | ||
10 | |||
11 | #ifndef _I830_DEFINES_ | ||
12 | #define _I830_DEFINES_ | ||
13 | |||
14 | #define I830_DMA_BUF_ORDER 12 | ||
15 | #define I830_DMA_BUF_SZ (1<<I830_DMA_BUF_ORDER) | ||
16 | #define I830_DMA_BUF_NR 256 | ||
17 | #define I830_NR_SAREA_CLIPRECTS 8 | ||
18 | |||
19 | /* Each region is a minimum of 64k, and there are at most 64 of them. | ||
20 | */ | ||
21 | #define I830_NR_TEX_REGIONS 64 | ||
22 | #define I830_LOG_MIN_TEX_REGION_SIZE 16 | ||
23 | |||
24 | /* KW: These aren't correct but someone set them to two and then | ||
25 | * released the module. Now we can't change them as doing so would | ||
26 | * break backwards compatibility. | ||
27 | */ | ||
28 | #define I830_TEXTURE_COUNT 2 | ||
29 | #define I830_TEXBLEND_COUNT I830_TEXTURE_COUNT | ||
30 | |||
31 | #define I830_TEXBLEND_SIZE 12 /* (4 args + op) * 2 + COLOR_FACTOR */ | ||
32 | |||
33 | #define I830_UPLOAD_CTX 0x1 | ||
34 | #define I830_UPLOAD_BUFFERS 0x2 | ||
35 | #define I830_UPLOAD_CLIPRECTS 0x4 | ||
36 | #define I830_UPLOAD_TEX0_IMAGE 0x100 /* handled clientside */ | ||
37 | #define I830_UPLOAD_TEX0_CUBE 0x200 /* handled clientside */ | ||
38 | #define I830_UPLOAD_TEX1_IMAGE 0x400 /* handled clientside */ | ||
39 | #define I830_UPLOAD_TEX1_CUBE 0x800 /* handled clientside */ | ||
40 | #define I830_UPLOAD_TEX2_IMAGE 0x1000 /* handled clientside */ | ||
41 | #define I830_UPLOAD_TEX2_CUBE 0x2000 /* handled clientside */ | ||
42 | #define I830_UPLOAD_TEX3_IMAGE 0x4000 /* handled clientside */ | ||
43 | #define I830_UPLOAD_TEX3_CUBE 0x8000 /* handled clientside */ | ||
44 | #define I830_UPLOAD_TEX_N_IMAGE(n) (0x100 << (n * 2)) | ||
45 | #define I830_UPLOAD_TEX_N_CUBE(n) (0x200 << (n * 2)) | ||
46 | #define I830_UPLOAD_TEXIMAGE_MASK 0xff00 | ||
47 | #define I830_UPLOAD_TEX0 0x10000 | ||
48 | #define I830_UPLOAD_TEX1 0x20000 | ||
49 | #define I830_UPLOAD_TEX2 0x40000 | ||
50 | #define I830_UPLOAD_TEX3 0x80000 | ||
51 | #define I830_UPLOAD_TEX_N(n) (0x10000 << (n)) | ||
52 | #define I830_UPLOAD_TEX_MASK 0xf0000 | ||
53 | #define I830_UPLOAD_TEXBLEND0 0x100000 | ||
54 | #define I830_UPLOAD_TEXBLEND1 0x200000 | ||
55 | #define I830_UPLOAD_TEXBLEND2 0x400000 | ||
56 | #define I830_UPLOAD_TEXBLEND3 0x800000 | ||
57 | #define I830_UPLOAD_TEXBLEND_N(n) (0x100000 << (n)) | ||
58 | #define I830_UPLOAD_TEXBLEND_MASK 0xf00000 | ||
59 | #define I830_UPLOAD_TEX_PALETTE_N(n) (0x1000000 << (n)) | ||
60 | #define I830_UPLOAD_TEX_PALETTE_SHARED 0x4000000 | ||
61 | #define I830_UPLOAD_STIPPLE 0x8000000 | ||
62 | |||
63 | /* Indices into buf.Setup where various bits of state are mirrored per | ||
64 | * context and per buffer. These can be fired at the card as a unit, | ||
65 | * or in a piecewise fashion as required. | ||
66 | */ | ||
67 | |||
68 | /* Destbuffer state | ||
69 | * - backbuffer linear offset and pitch -- invarient in the current dri | ||
70 | * - zbuffer linear offset and pitch -- also invarient | ||
71 | * - drawing origin in back and depth buffers. | ||
72 | * | ||
73 | * Keep the depth/back buffer state here to accommodate private buffers | ||
74 | * in the future. | ||
75 | */ | ||
76 | |||
77 | #define I830_DESTREG_CBUFADDR 0 | ||
78 | #define I830_DESTREG_DBUFADDR 1 | ||
79 | #define I830_DESTREG_DV0 2 | ||
80 | #define I830_DESTREG_DV1 3 | ||
81 | #define I830_DESTREG_SENABLE 4 | ||
82 | #define I830_DESTREG_SR0 5 | ||
83 | #define I830_DESTREG_SR1 6 | ||
84 | #define I830_DESTREG_SR2 7 | ||
85 | #define I830_DESTREG_DR0 8 | ||
86 | #define I830_DESTREG_DR1 9 | ||
87 | #define I830_DESTREG_DR2 10 | ||
88 | #define I830_DESTREG_DR3 11 | ||
89 | #define I830_DESTREG_DR4 12 | ||
90 | #define I830_DEST_SETUP_SIZE 13 | ||
91 | |||
92 | /* Context state | ||
93 | */ | ||
94 | #define I830_CTXREG_STATE1 0 | ||
95 | #define I830_CTXREG_STATE2 1 | ||
96 | #define I830_CTXREG_STATE3 2 | ||
97 | #define I830_CTXREG_STATE4 3 | ||
98 | #define I830_CTXREG_STATE5 4 | ||
99 | #define I830_CTXREG_IALPHAB 5 | ||
100 | #define I830_CTXREG_STENCILTST 6 | ||
101 | #define I830_CTXREG_ENABLES_1 7 | ||
102 | #define I830_CTXREG_ENABLES_2 8 | ||
103 | #define I830_CTXREG_AA 9 | ||
104 | #define I830_CTXREG_FOGCOLOR 10 | ||
105 | #define I830_CTXREG_BLENDCOLR0 11 | ||
106 | #define I830_CTXREG_BLENDCOLR 12 /* Dword 1 of 2 dword command */ | ||
107 | #define I830_CTXREG_VF 13 | ||
108 | #define I830_CTXREG_VF2 14 | ||
109 | #define I830_CTXREG_MCSB0 15 | ||
110 | #define I830_CTXREG_MCSB1 16 | ||
111 | #define I830_CTX_SETUP_SIZE 17 | ||
112 | |||
113 | /* 1.3: Stipple state | ||
114 | */ | ||
115 | #define I830_STPREG_ST0 0 | ||
116 | #define I830_STPREG_ST1 1 | ||
117 | #define I830_STP_SETUP_SIZE 2 | ||
118 | |||
119 | /* Texture state (per tex unit) | ||
120 | */ | ||
121 | |||
122 | #define I830_TEXREG_MI0 0 /* GFX_OP_MAP_INFO (6 dwords) */ | ||
123 | #define I830_TEXREG_MI1 1 | ||
124 | #define I830_TEXREG_MI2 2 | ||
125 | #define I830_TEXREG_MI3 3 | ||
126 | #define I830_TEXREG_MI4 4 | ||
127 | #define I830_TEXREG_MI5 5 | ||
128 | #define I830_TEXREG_MF 6 /* GFX_OP_MAP_FILTER */ | ||
129 | #define I830_TEXREG_MLC 7 /* GFX_OP_MAP_LOD_CTL */ | ||
130 | #define I830_TEXREG_MLL 8 /* GFX_OP_MAP_LOD_LIMITS */ | ||
131 | #define I830_TEXREG_MCS 9 /* GFX_OP_MAP_COORD_SETS */ | ||
132 | #define I830_TEX_SETUP_SIZE 10 | ||
133 | |||
134 | #define I830_TEXREG_TM0LI 0 /* load immediate 2 texture map n */ | ||
135 | #define I830_TEXREG_TM0S0 1 | ||
136 | #define I830_TEXREG_TM0S1 2 | ||
137 | #define I830_TEXREG_TM0S2 3 | ||
138 | #define I830_TEXREG_TM0S3 4 | ||
139 | #define I830_TEXREG_TM0S4 5 | ||
140 | #define I830_TEXREG_NOP0 6 /* noop */ | ||
141 | #define I830_TEXREG_NOP1 7 /* noop */ | ||
142 | #define I830_TEXREG_NOP2 8 /* noop */ | ||
143 | #define __I830_TEXREG_MCS 9 /* GFX_OP_MAP_COORD_SETS -- shared */ | ||
144 | #define __I830_TEX_SETUP_SIZE 10 | ||
145 | |||
146 | #define I830_FRONT 0x1 | ||
147 | #define I830_BACK 0x2 | ||
148 | #define I830_DEPTH 0x4 | ||
149 | |||
150 | #endif /* _I830_DEFINES_ */ | ||
151 | |||
152 | typedef struct _drm_i830_init { | ||
153 | enum { | ||
154 | I830_INIT_DMA = 0x01, | ||
155 | I830_CLEANUP_DMA = 0x02 | ||
156 | } func; | ||
157 | unsigned int mmio_offset; | ||
158 | unsigned int buffers_offset; | ||
159 | int sarea_priv_offset; | ||
160 | unsigned int ring_start; | ||
161 | unsigned int ring_end; | ||
162 | unsigned int ring_size; | ||
163 | unsigned int front_offset; | ||
164 | unsigned int back_offset; | ||
165 | unsigned int depth_offset; | ||
166 | unsigned int w; | ||
167 | unsigned int h; | ||
168 | unsigned int pitch; | ||
169 | unsigned int pitch_bits; | ||
170 | unsigned int back_pitch; | ||
171 | unsigned int depth_pitch; | ||
172 | unsigned int cpp; | ||
173 | } drm_i830_init_t; | ||
174 | |||
175 | /* Warning: If you change the SAREA structure you must change the Xserver | ||
176 | * structure as well */ | ||
177 | |||
178 | typedef struct _drm_i830_tex_region { | ||
179 | unsigned char next, prev; /* indices to form a circular LRU */ | ||
180 | unsigned char in_use; /* owned by a client, or free? */ | ||
181 | int age; /* tracked by clients to update local LRU's */ | ||
182 | } drm_i830_tex_region_t; | ||
183 | |||
184 | typedef struct _drm_i830_sarea { | ||
185 | unsigned int ContextState[I830_CTX_SETUP_SIZE]; | ||
186 | unsigned int BufferState[I830_DEST_SETUP_SIZE]; | ||
187 | unsigned int TexState[I830_TEXTURE_COUNT][I830_TEX_SETUP_SIZE]; | ||
188 | unsigned int TexBlendState[I830_TEXBLEND_COUNT][I830_TEXBLEND_SIZE]; | ||
189 | unsigned int TexBlendStateWordsUsed[I830_TEXBLEND_COUNT]; | ||
190 | unsigned int Palette[2][256]; | ||
191 | unsigned int dirty; | ||
192 | |||
193 | unsigned int nbox; | ||
194 | struct drm_clip_rect boxes[I830_NR_SAREA_CLIPRECTS]; | ||
195 | |||
196 | /* Maintain an LRU of contiguous regions of texture space. If | ||
197 | * you think you own a region of texture memory, and it has an | ||
198 | * age different to the one you set, then you are mistaken and | ||
199 | * it has been stolen by another client. If global texAge | ||
200 | * hasn't changed, there is no need to walk the list. | ||
201 | * | ||
202 | * These regions can be used as a proxy for the fine-grained | ||
203 | * texture information of other clients - by maintaining them | ||
204 | * in the same lru which is used to age their own textures, | ||
205 | * clients have an approximate lru for the whole of global | ||
206 | * texture space, and can make informed decisions as to which | ||
207 | * areas to kick out. There is no need to choose whether to | ||
208 | * kick out your own texture or someone else's - simply eject | ||
209 | * them all in LRU order. | ||
210 | */ | ||
211 | |||
212 | drm_i830_tex_region_t texList[I830_NR_TEX_REGIONS + 1]; | ||
213 | /* Last elt is sentinal */ | ||
214 | int texAge; /* last time texture was uploaded */ | ||
215 | int last_enqueue; /* last time a buffer was enqueued */ | ||
216 | int last_dispatch; /* age of the most recently dispatched buffer */ | ||
217 | int last_quiescent; /* */ | ||
218 | int ctxOwner; /* last context to upload state */ | ||
219 | |||
220 | int vertex_prim; | ||
221 | |||
222 | int pf_enabled; /* is pageflipping allowed? */ | ||
223 | int pf_active; | ||
224 | int pf_current_page; /* which buffer is being displayed? */ | ||
225 | |||
226 | int perf_boxes; /* performance boxes to be displayed */ | ||
227 | |||
228 | /* Here's the state for texunits 2,3: | ||
229 | */ | ||
230 | unsigned int TexState2[I830_TEX_SETUP_SIZE]; | ||
231 | unsigned int TexBlendState2[I830_TEXBLEND_SIZE]; | ||
232 | unsigned int TexBlendStateWordsUsed2; | ||
233 | |||
234 | unsigned int TexState3[I830_TEX_SETUP_SIZE]; | ||
235 | unsigned int TexBlendState3[I830_TEXBLEND_SIZE]; | ||
236 | unsigned int TexBlendStateWordsUsed3; | ||
237 | |||
238 | unsigned int StippleState[I830_STP_SETUP_SIZE]; | ||
239 | } drm_i830_sarea_t; | ||
240 | |||
241 | /* Flags for perf_boxes | ||
242 | */ | ||
243 | #define I830_BOX_RING_EMPTY 0x1 /* populated by kernel */ | ||
244 | #define I830_BOX_FLIP 0x2 /* populated by kernel */ | ||
245 | #define I830_BOX_WAIT 0x4 /* populated by kernel & client */ | ||
246 | #define I830_BOX_TEXTURE_LOAD 0x8 /* populated by kernel */ | ||
247 | #define I830_BOX_LOST_CONTEXT 0x10 /* populated by client */ | ||
248 | |||
249 | /* I830 specific ioctls | ||
250 | * The device specific ioctl range is 0x40 to 0x79. | ||
251 | */ | ||
252 | #define DRM_I830_INIT 0x00 | ||
253 | #define DRM_I830_VERTEX 0x01 | ||
254 | #define DRM_I830_CLEAR 0x02 | ||
255 | #define DRM_I830_FLUSH 0x03 | ||
256 | #define DRM_I830_GETAGE 0x04 | ||
257 | #define DRM_I830_GETBUF 0x05 | ||
258 | #define DRM_I830_SWAP 0x06 | ||
259 | #define DRM_I830_COPY 0x07 | ||
260 | #define DRM_I830_DOCOPY 0x08 | ||
261 | #define DRM_I830_FLIP 0x09 | ||
262 | #define DRM_I830_IRQ_EMIT 0x0a | ||
263 | #define DRM_I830_IRQ_WAIT 0x0b | ||
264 | #define DRM_I830_GETPARAM 0x0c | ||
265 | #define DRM_I830_SETPARAM 0x0d | ||
266 | |||
267 | #define DRM_IOCTL_I830_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_INIT, drm_i830_init_t) | ||
268 | #define DRM_IOCTL_I830_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_VERTEX, drm_i830_vertex_t) | ||
269 | #define DRM_IOCTL_I830_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_CLEAR, drm_i830_clear_t) | ||
270 | #define DRM_IOCTL_I830_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_FLUSH) | ||
271 | #define DRM_IOCTL_I830_GETAGE DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_GETAGE) | ||
272 | #define DRM_IOCTL_I830_GETBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_IOCTL_I830_GETBUF, drm_i830_dma_t) | ||
273 | #define DRM_IOCTL_I830_SWAP DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_SWAP) | ||
274 | #define DRM_IOCTL_I830_COPY DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_COPY, drm_i830_copy_t) | ||
275 | #define DRM_IOCTL_I830_DOCOPY DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_DOCOPY) | ||
276 | #define DRM_IOCTL_I830_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_FLIP) | ||
277 | #define DRM_IOCTL_I830_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_IOCTL_I830_IRQ_EMIT, drm_i830_irq_emit_t) | ||
278 | #define DRM_IOCTL_I830_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_IRQ_WAIT, drm_i830_irq_wait_t) | ||
279 | #define DRM_IOCTL_I830_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_IOCTL_I830_GETPARAM, drm_i830_getparam_t) | ||
280 | #define DRM_IOCTL_I830_SETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_IOCTL_I830_SETPARAM, drm_i830_setparam_t) | ||
281 | |||
282 | typedef struct _drm_i830_clear { | ||
283 | int clear_color; | ||
284 | int clear_depth; | ||
285 | int flags; | ||
286 | unsigned int clear_colormask; | ||
287 | unsigned int clear_depthmask; | ||
288 | } drm_i830_clear_t; | ||
289 | |||
290 | /* These may be placeholders if we have more cliprects than | ||
291 | * I830_NR_SAREA_CLIPRECTS. In that case, the client sets discard to | ||
292 | * false, indicating that the buffer will be dispatched again with a | ||
293 | * new set of cliprects. | ||
294 | */ | ||
295 | typedef struct _drm_i830_vertex { | ||
296 | int idx; /* buffer index */ | ||
297 | int used; /* nr bytes in use */ | ||
298 | int discard; /* client is finished with the buffer? */ | ||
299 | } drm_i830_vertex_t; | ||
300 | |||
301 | typedef struct _drm_i830_copy_t { | ||
302 | int idx; /* buffer index */ | ||
303 | int used; /* nr bytes in use */ | ||
304 | void __user *address; /* Address to copy from */ | ||
305 | } drm_i830_copy_t; | ||
306 | |||
307 | typedef struct drm_i830_dma { | ||
308 | void __user *virtual; | ||
309 | int request_idx; | ||
310 | int request_size; | ||
311 | int granted; | ||
312 | } drm_i830_dma_t; | ||
313 | |||
314 | /* 1.3: Userspace can request & wait on irq's: | ||
315 | */ | ||
316 | typedef struct drm_i830_irq_emit { | ||
317 | int __user *irq_seq; | ||
318 | } drm_i830_irq_emit_t; | ||
319 | |||
320 | typedef struct drm_i830_irq_wait { | ||
321 | int irq_seq; | ||
322 | } drm_i830_irq_wait_t; | ||
323 | |||
324 | /* 1.3: New ioctl to query kernel params: | ||
325 | */ | ||
326 | #define I830_PARAM_IRQ_ACTIVE 1 | ||
327 | |||
328 | typedef struct drm_i830_getparam { | ||
329 | int param; | ||
330 | int __user *value; | ||
331 | } drm_i830_getparam_t; | ||
332 | |||
333 | /* 1.3: New ioctl to set kernel params: | ||
334 | */ | ||
335 | #define I830_SETPARAM_USE_MI_BATCHBUFFER_START 1 | ||
336 | |||
337 | typedef struct drm_i830_setparam { | ||
338 | int param; | ||
339 | int value; | ||
340 | } drm_i830_setparam_t; | ||
341 | |||
342 | #endif /* _I830_DRM_H_ */ | ||
diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h new file mode 100644 index 000000000000..05c66cf03a9e --- /dev/null +++ b/include/drm/i915_drm.h | |||
@@ -0,0 +1,270 @@ | |||
1 | /* | ||
2 | * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. | ||
3 | * All Rights Reserved. | ||
4 | * | ||
5 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
6 | * copy of this software and associated documentation files (the | ||
7 | * "Software"), to deal in the Software without restriction, including | ||
8 | * without limitation the rights to use, copy, modify, merge, publish, | ||
9 | * distribute, sub license, and/or sell copies of the Software, and to | ||
10 | * permit persons to whom the Software is furnished to do so, subject to | ||
11 | * the following conditions: | ||
12 | * | ||
13 | * The above copyright notice and this permission notice (including the | ||
14 | * next paragraph) shall be included in all copies or substantial portions | ||
15 | * of the Software. | ||
16 | * | ||
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
18 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
19 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. | ||
20 | * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR | ||
21 | * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
22 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||
23 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
24 | * | ||
25 | */ | ||
26 | |||
27 | #ifndef _I915_DRM_H_ | ||
28 | #define _I915_DRM_H_ | ||
29 | |||
30 | /* Please note that modifications to all structs defined here are | ||
31 | * subject to backwards-compatibility constraints. | ||
32 | */ | ||
33 | |||
34 | #include "drm.h" | ||
35 | |||
36 | /* Each region is a minimum of 16k, and there are at most 255 of them. | ||
37 | */ | ||
38 | #define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use | ||
39 | * of chars for next/prev indices */ | ||
40 | #define I915_LOG_MIN_TEX_REGION_SIZE 14 | ||
41 | |||
42 | typedef struct _drm_i915_init { | ||
43 | enum { | ||
44 | I915_INIT_DMA = 0x01, | ||
45 | I915_CLEANUP_DMA = 0x02, | ||
46 | I915_RESUME_DMA = 0x03 | ||
47 | } func; | ||
48 | unsigned int mmio_offset; | ||
49 | int sarea_priv_offset; | ||
50 | unsigned int ring_start; | ||
51 | unsigned int ring_end; | ||
52 | unsigned int ring_size; | ||
53 | unsigned int front_offset; | ||
54 | unsigned int back_offset; | ||
55 | unsigned int depth_offset; | ||
56 | unsigned int w; | ||
57 | unsigned int h; | ||
58 | unsigned int pitch; | ||
59 | unsigned int pitch_bits; | ||
60 | unsigned int back_pitch; | ||
61 | unsigned int depth_pitch; | ||
62 | unsigned int cpp; | ||
63 | unsigned int chipset; | ||
64 | } drm_i915_init_t; | ||
65 | |||
66 | typedef struct _drm_i915_sarea { | ||
67 | struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1]; | ||
68 | int last_upload; /* last time texture was uploaded */ | ||
69 | int last_enqueue; /* last time a buffer was enqueued */ | ||
70 | int last_dispatch; /* age of the most recently dispatched buffer */ | ||
71 | int ctxOwner; /* last context to upload state */ | ||
72 | int texAge; | ||
73 | int pf_enabled; /* is pageflipping allowed? */ | ||
74 | int pf_active; | ||
75 | int pf_current_page; /* which buffer is being displayed? */ | ||
76 | int perf_boxes; /* performance boxes to be displayed */ | ||
77 | int width, height; /* screen size in pixels */ | ||
78 | |||
79 | drm_handle_t front_handle; | ||
80 | int front_offset; | ||
81 | int front_size; | ||
82 | |||
83 | drm_handle_t back_handle; | ||
84 | int back_offset; | ||
85 | int back_size; | ||
86 | |||
87 | drm_handle_t depth_handle; | ||
88 | int depth_offset; | ||
89 | int depth_size; | ||
90 | |||
91 | drm_handle_t tex_handle; | ||
92 | int tex_offset; | ||
93 | int tex_size; | ||
94 | int log_tex_granularity; | ||
95 | int pitch; | ||
96 | int rotation; /* 0, 90, 180 or 270 */ | ||
97 | int rotated_offset; | ||
98 | int rotated_size; | ||
99 | int rotated_pitch; | ||
100 | int virtualX, virtualY; | ||
101 | |||
102 | unsigned int front_tiled; | ||
103 | unsigned int back_tiled; | ||
104 | unsigned int depth_tiled; | ||
105 | unsigned int rotated_tiled; | ||
106 | unsigned int rotated2_tiled; | ||
107 | |||
108 | int pipeA_x; | ||
109 | int pipeA_y; | ||
110 | int pipeA_w; | ||
111 | int pipeA_h; | ||
112 | int pipeB_x; | ||
113 | int pipeB_y; | ||
114 | int pipeB_w; | ||
115 | int pipeB_h; | ||
116 | } drm_i915_sarea_t; | ||
117 | |||
118 | /* Flags for perf_boxes | ||
119 | */ | ||
120 | #define I915_BOX_RING_EMPTY 0x1 | ||
121 | #define I915_BOX_FLIP 0x2 | ||
122 | #define I915_BOX_WAIT 0x4 | ||
123 | #define I915_BOX_TEXTURE_LOAD 0x8 | ||
124 | #define I915_BOX_LOST_CONTEXT 0x10 | ||
125 | |||
126 | /* I915 specific ioctls | ||
127 | * The device specific ioctl range is 0x40 to 0x79. | ||
128 | */ | ||
129 | #define DRM_I915_INIT 0x00 | ||
130 | #define DRM_I915_FLUSH 0x01 | ||
131 | #define DRM_I915_FLIP 0x02 | ||
132 | #define DRM_I915_BATCHBUFFER 0x03 | ||
133 | #define DRM_I915_IRQ_EMIT 0x04 | ||
134 | #define DRM_I915_IRQ_WAIT 0x05 | ||
135 | #define DRM_I915_GETPARAM 0x06 | ||
136 | #define DRM_I915_SETPARAM 0x07 | ||
137 | #define DRM_I915_ALLOC 0x08 | ||
138 | #define DRM_I915_FREE 0x09 | ||
139 | #define DRM_I915_INIT_HEAP 0x0a | ||
140 | #define DRM_I915_CMDBUFFER 0x0b | ||
141 | #define DRM_I915_DESTROY_HEAP 0x0c | ||
142 | #define DRM_I915_SET_VBLANK_PIPE 0x0d | ||
143 | #define DRM_I915_GET_VBLANK_PIPE 0x0e | ||
144 | #define DRM_I915_VBLANK_SWAP 0x0f | ||
145 | #define DRM_I915_HWS_ADDR 0x11 | ||
146 | |||
147 | #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) | ||
148 | #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) | ||
149 | #define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP) | ||
150 | #define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t) | ||
151 | #define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t) | ||
152 | #define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t) | ||
153 | #define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t) | ||
154 | #define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t) | ||
155 | #define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t) | ||
156 | #define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t) | ||
157 | #define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t) | ||
158 | #define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t) | ||
159 | #define DRM_IOCTL_I915_DESTROY_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t) | ||
160 | #define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t) | ||
161 | #define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t) | ||
162 | #define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t) | ||
163 | |||
164 | /* Allow drivers to submit batchbuffers directly to hardware, relying | ||
165 | * on the security mechanisms provided by hardware. | ||
166 | */ | ||
167 | typedef struct _drm_i915_batchbuffer { | ||
168 | int start; /* agp offset */ | ||
169 | int used; /* nr bytes in use */ | ||
170 | int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ | ||
171 | int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ | ||
172 | int num_cliprects; /* mulitpass with multiple cliprects? */ | ||
173 | struct drm_clip_rect __user *cliprects; /* pointer to userspace cliprects */ | ||
174 | } drm_i915_batchbuffer_t; | ||
175 | |||
176 | /* As above, but pass a pointer to userspace buffer which can be | ||
177 | * validated by the kernel prior to sending to hardware. | ||
178 | */ | ||
179 | typedef struct _drm_i915_cmdbuffer { | ||
180 | char __user *buf; /* pointer to userspace command buffer */ | ||
181 | int sz; /* nr bytes in buf */ | ||
182 | int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ | ||
183 | int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ | ||
184 | int num_cliprects; /* mulitpass with multiple cliprects? */ | ||
185 | struct drm_clip_rect __user *cliprects; /* pointer to userspace cliprects */ | ||
186 | } drm_i915_cmdbuffer_t; | ||
187 | |||
188 | /* Userspace can request & wait on irq's: | ||
189 | */ | ||
190 | typedef struct drm_i915_irq_emit { | ||
191 | int __user *irq_seq; | ||
192 | } drm_i915_irq_emit_t; | ||
193 | |||
194 | typedef struct drm_i915_irq_wait { | ||
195 | int irq_seq; | ||
196 | } drm_i915_irq_wait_t; | ||
197 | |||
198 | /* Ioctl to query kernel params: | ||
199 | */ | ||
200 | #define I915_PARAM_IRQ_ACTIVE 1 | ||
201 | #define I915_PARAM_ALLOW_BATCHBUFFER 2 | ||
202 | #define I915_PARAM_LAST_DISPATCH 3 | ||
203 | |||
204 | typedef struct drm_i915_getparam { | ||
205 | int param; | ||
206 | int __user *value; | ||
207 | } drm_i915_getparam_t; | ||
208 | |||
209 | /* Ioctl to set kernel params: | ||
210 | */ | ||
211 | #define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1 | ||
212 | #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2 | ||
213 | #define I915_SETPARAM_ALLOW_BATCHBUFFER 3 | ||
214 | |||
215 | typedef struct drm_i915_setparam { | ||
216 | int param; | ||
217 | int value; | ||
218 | } drm_i915_setparam_t; | ||
219 | |||
220 | /* A memory manager for regions of shared memory: | ||
221 | */ | ||
222 | #define I915_MEM_REGION_AGP 1 | ||
223 | |||
224 | typedef struct drm_i915_mem_alloc { | ||
225 | int region; | ||
226 | int alignment; | ||
227 | int size; | ||
228 | int __user *region_offset; /* offset from start of fb or agp */ | ||
229 | } drm_i915_mem_alloc_t; | ||
230 | |||
231 | typedef struct drm_i915_mem_free { | ||
232 | int region; | ||
233 | int region_offset; | ||
234 | } drm_i915_mem_free_t; | ||
235 | |||
236 | typedef struct drm_i915_mem_init_heap { | ||
237 | int region; | ||
238 | int size; | ||
239 | int start; | ||
240 | } drm_i915_mem_init_heap_t; | ||
241 | |||
242 | /* Allow memory manager to be torn down and re-initialized (eg on | ||
243 | * rotate): | ||
244 | */ | ||
245 | typedef struct drm_i915_mem_destroy_heap { | ||
246 | int region; | ||
247 | } drm_i915_mem_destroy_heap_t; | ||
248 | |||
249 | /* Allow X server to configure which pipes to monitor for vblank signals | ||
250 | */ | ||
251 | #define DRM_I915_VBLANK_PIPE_A 1 | ||
252 | #define DRM_I915_VBLANK_PIPE_B 2 | ||
253 | |||
254 | typedef struct drm_i915_vblank_pipe { | ||
255 | int pipe; | ||
256 | } drm_i915_vblank_pipe_t; | ||
257 | |||
258 | /* Schedule buffer swap at given vertical blank: | ||
259 | */ | ||
260 | typedef struct drm_i915_vblank_swap { | ||
261 | drm_drawable_t drawable; | ||
262 | enum drm_vblank_seq_type seqtype; | ||
263 | unsigned int sequence; | ||
264 | } drm_i915_vblank_swap_t; | ||
265 | |||
266 | typedef struct drm_i915_hws_addr { | ||
267 | uint64_t addr; | ||
268 | } drm_i915_hws_addr_t; | ||
269 | |||
270 | #endif /* _I915_DRM_H_ */ | ||
diff --git a/include/drm/mga_drm.h b/include/drm/mga_drm.h new file mode 100644 index 000000000000..944b50a5ff24 --- /dev/null +++ b/include/drm/mga_drm.h | |||
@@ -0,0 +1,417 @@ | |||
1 | /* mga_drm.h -- Public header for the Matrox g200/g400 driver -*- linux-c -*- | ||
2 | * Created: Tue Jan 25 01:50:01 1999 by jhartmann@precisioninsight.com | ||
3 | * | ||
4 | * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. | ||
5 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
9 | * copy of this software and associated documentation files (the "Software"), | ||
10 | * to deal in the Software without restriction, including without limitation | ||
11 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
12 | * and/or sell copies of the Software, and to permit persons to whom the | ||
13 | * Software is furnished to do so, subject to the following conditions: | ||
14 | * | ||
15 | * The above copyright notice and this permission notice (including the next | ||
16 | * paragraph) shall be included in all copies or substantial portions of the | ||
17 | * Software. | ||
18 | * | ||
19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
20 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
21 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
22 | * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
23 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
24 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
25 | * OTHER DEALINGS IN THE SOFTWARE. | ||
26 | * | ||
27 | * Authors: | ||
28 | * Jeff Hartmann <jhartmann@valinux.com> | ||
29 | * Keith Whitwell <keith@tungstengraphics.com> | ||
30 | * | ||
31 | * Rewritten by: | ||
32 | * Gareth Hughes <gareth@valinux.com> | ||
33 | */ | ||
34 | |||
35 | #ifndef __MGA_DRM_H__ | ||
36 | #define __MGA_DRM_H__ | ||
37 | |||
38 | /* WARNING: If you change any of these defines, make sure to change the | ||
39 | * defines in the Xserver file (mga_sarea.h) | ||
40 | */ | ||
41 | |||
42 | #ifndef __MGA_SAREA_DEFINES__ | ||
43 | #define __MGA_SAREA_DEFINES__ | ||
44 | |||
45 | /* WARP pipe flags | ||
46 | */ | ||
47 | #define MGA_F 0x1 /* fog */ | ||
48 | #define MGA_A 0x2 /* alpha */ | ||
49 | #define MGA_S 0x4 /* specular */ | ||
50 | #define MGA_T2 0x8 /* multitexture */ | ||
51 | |||
52 | #define MGA_WARP_TGZ 0 | ||
53 | #define MGA_WARP_TGZF (MGA_F) | ||
54 | #define MGA_WARP_TGZA (MGA_A) | ||
55 | #define MGA_WARP_TGZAF (MGA_F|MGA_A) | ||
56 | #define MGA_WARP_TGZS (MGA_S) | ||
57 | #define MGA_WARP_TGZSF (MGA_S|MGA_F) | ||
58 | #define MGA_WARP_TGZSA (MGA_S|MGA_A) | ||
59 | #define MGA_WARP_TGZSAF (MGA_S|MGA_F|MGA_A) | ||
60 | #define MGA_WARP_T2GZ (MGA_T2) | ||
61 | #define MGA_WARP_T2GZF (MGA_T2|MGA_F) | ||
62 | #define MGA_WARP_T2GZA (MGA_T2|MGA_A) | ||
63 | #define MGA_WARP_T2GZAF (MGA_T2|MGA_A|MGA_F) | ||
64 | #define MGA_WARP_T2GZS (MGA_T2|MGA_S) | ||
65 | #define MGA_WARP_T2GZSF (MGA_T2|MGA_S|MGA_F) | ||
66 | #define MGA_WARP_T2GZSA (MGA_T2|MGA_S|MGA_A) | ||
67 | #define MGA_WARP_T2GZSAF (MGA_T2|MGA_S|MGA_F|MGA_A) | ||
68 | |||
69 | #define MGA_MAX_G200_PIPES 8 /* no multitex */ | ||
70 | #define MGA_MAX_G400_PIPES 16 | ||
71 | #define MGA_MAX_WARP_PIPES MGA_MAX_G400_PIPES | ||
72 | #define MGA_WARP_UCODE_SIZE 32768 /* in bytes */ | ||
73 | |||
74 | #define MGA_CARD_TYPE_G200 1 | ||
75 | #define MGA_CARD_TYPE_G400 2 | ||
76 | #define MGA_CARD_TYPE_G450 3 /* not currently used */ | ||
77 | #define MGA_CARD_TYPE_G550 4 | ||
78 | |||
79 | #define MGA_FRONT 0x1 | ||
80 | #define MGA_BACK 0x2 | ||
81 | #define MGA_DEPTH 0x4 | ||
82 | |||
83 | /* What needs to be changed for the current vertex dma buffer? | ||
84 | */ | ||
85 | #define MGA_UPLOAD_CONTEXT 0x1 | ||
86 | #define MGA_UPLOAD_TEX0 0x2 | ||
87 | #define MGA_UPLOAD_TEX1 0x4 | ||
88 | #define MGA_UPLOAD_PIPE 0x8 | ||
89 | #define MGA_UPLOAD_TEX0IMAGE 0x10 /* handled client-side */ | ||
90 | #define MGA_UPLOAD_TEX1IMAGE 0x20 /* handled client-side */ | ||
91 | #define MGA_UPLOAD_2D 0x40 | ||
92 | #define MGA_WAIT_AGE 0x80 /* handled client-side */ | ||
93 | #define MGA_UPLOAD_CLIPRECTS 0x100 /* handled client-side */ | ||
94 | #if 0 | ||
95 | #define MGA_DMA_FLUSH 0x200 /* set when someone gets the lock | ||
96 | quiescent */ | ||
97 | #endif | ||
98 | |||
99 | /* 32 buffers of 64k each, total 2 meg. | ||
100 | */ | ||
101 | #define MGA_BUFFER_SIZE (1 << 16) | ||
102 | #define MGA_NUM_BUFFERS 128 | ||
103 | |||
104 | /* Keep these small for testing. | ||
105 | */ | ||
106 | #define MGA_NR_SAREA_CLIPRECTS 8 | ||
107 | |||
108 | /* 2 heaps (1 for card, 1 for agp), each divided into upto 128 | ||
109 | * regions, subject to a minimum region size of (1<<16) == 64k. | ||
110 | * | ||
111 | * Clients may subdivide regions internally, but when sharing between | ||
112 | * clients, the region size is the minimum granularity. | ||
113 | */ | ||
114 | |||
115 | #define MGA_CARD_HEAP 0 | ||
116 | #define MGA_AGP_HEAP 1 | ||
117 | #define MGA_NR_TEX_HEAPS 2 | ||
118 | #define MGA_NR_TEX_REGIONS 16 | ||
119 | #define MGA_LOG_MIN_TEX_REGION_SIZE 16 | ||
120 | |||
121 | #define DRM_MGA_IDLE_RETRY 2048 | ||
122 | |||
123 | #endif /* __MGA_SAREA_DEFINES__ */ | ||
124 | |||
125 | /* Setup registers for 3D context | ||
126 | */ | ||
127 | typedef struct { | ||
128 | unsigned int dstorg; | ||
129 | unsigned int maccess; | ||
130 | unsigned int plnwt; | ||
131 | unsigned int dwgctl; | ||
132 | unsigned int alphactrl; | ||
133 | unsigned int fogcolor; | ||
134 | unsigned int wflag; | ||
135 | unsigned int tdualstage0; | ||
136 | unsigned int tdualstage1; | ||
137 | unsigned int fcol; | ||
138 | unsigned int stencil; | ||
139 | unsigned int stencilctl; | ||
140 | } drm_mga_context_regs_t; | ||
141 | |||
142 | /* Setup registers for 2D, X server | ||
143 | */ | ||
144 | typedef struct { | ||
145 | unsigned int pitch; | ||
146 | } drm_mga_server_regs_t; | ||
147 | |||
148 | /* Setup registers for each texture unit | ||
149 | */ | ||
150 | typedef struct { | ||
151 | unsigned int texctl; | ||
152 | unsigned int texctl2; | ||
153 | unsigned int texfilter; | ||
154 | unsigned int texbordercol; | ||
155 | unsigned int texorg; | ||
156 | unsigned int texwidth; | ||
157 | unsigned int texheight; | ||
158 | unsigned int texorg1; | ||
159 | unsigned int texorg2; | ||
160 | unsigned int texorg3; | ||
161 | unsigned int texorg4; | ||
162 | } drm_mga_texture_regs_t; | ||
163 | |||
164 | /* General aging mechanism | ||
165 | */ | ||
166 | typedef struct { | ||
167 | unsigned int head; /* Position of head pointer */ | ||
168 | unsigned int wrap; /* Primary DMA wrap count */ | ||
169 | } drm_mga_age_t; | ||
170 | |||
171 | typedef struct _drm_mga_sarea { | ||
172 | /* The channel for communication of state information to the kernel | ||
173 | * on firing a vertex dma buffer. | ||
174 | */ | ||
175 | drm_mga_context_regs_t context_state; | ||
176 | drm_mga_server_regs_t server_state; | ||
177 | drm_mga_texture_regs_t tex_state[2]; | ||
178 | unsigned int warp_pipe; | ||
179 | unsigned int dirty; | ||
180 | unsigned int vertsize; | ||
181 | |||
182 | /* The current cliprects, or a subset thereof. | ||
183 | */ | ||
184 | struct drm_clip_rect boxes[MGA_NR_SAREA_CLIPRECTS]; | ||
185 | unsigned int nbox; | ||
186 | |||
187 | /* Information about the most recently used 3d drawable. The | ||
188 | * client fills in the req_* fields, the server fills in the | ||
189 | * exported_ fields and puts the cliprects into boxes, above. | ||
190 | * | ||
191 | * The client clears the exported_drawable field before | ||
192 | * clobbering the boxes data. | ||
193 | */ | ||
194 | unsigned int req_drawable; /* the X drawable id */ | ||
195 | unsigned int req_draw_buffer; /* MGA_FRONT or MGA_BACK */ | ||
196 | |||
197 | unsigned int exported_drawable; | ||
198 | unsigned int exported_index; | ||
199 | unsigned int exported_stamp; | ||
200 | unsigned int exported_buffers; | ||
201 | unsigned int exported_nfront; | ||
202 | unsigned int exported_nback; | ||
203 | int exported_back_x, exported_front_x, exported_w; | ||
204 | int exported_back_y, exported_front_y, exported_h; | ||
205 | struct drm_clip_rect exported_boxes[MGA_NR_SAREA_CLIPRECTS]; | ||
206 | |||
207 | /* Counters for aging textures and for client-side throttling. | ||
208 | */ | ||
209 | unsigned int status[4]; | ||
210 | unsigned int last_wrap; | ||
211 | |||
212 | drm_mga_age_t last_frame; | ||
213 | unsigned int last_enqueue; /* last time a buffer was enqueued */ | ||
214 | unsigned int last_dispatch; /* age of the most recently dispatched buffer */ | ||
215 | unsigned int last_quiescent; /* */ | ||
216 | |||
217 | /* LRU lists for texture memory in agp space and on the card. | ||
218 | */ | ||
219 | struct drm_tex_region texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS + 1]; | ||
220 | unsigned int texAge[MGA_NR_TEX_HEAPS]; | ||
221 | |||
222 | /* Mechanism to validate card state. | ||
223 | */ | ||
224 | int ctxOwner; | ||
225 | } drm_mga_sarea_t; | ||
226 | |||
227 | /* MGA specific ioctls | ||
228 | * The device specific ioctl range is 0x40 to 0x79. | ||
229 | */ | ||
230 | #define DRM_MGA_INIT 0x00 | ||
231 | #define DRM_MGA_FLUSH 0x01 | ||
232 | #define DRM_MGA_RESET 0x02 | ||
233 | #define DRM_MGA_SWAP 0x03 | ||
234 | #define DRM_MGA_CLEAR 0x04 | ||
235 | #define DRM_MGA_VERTEX 0x05 | ||
236 | #define DRM_MGA_INDICES 0x06 | ||
237 | #define DRM_MGA_ILOAD 0x07 | ||
238 | #define DRM_MGA_BLIT 0x08 | ||
239 | #define DRM_MGA_GETPARAM 0x09 | ||
240 | |||
241 | /* 3.2: | ||
242 | * ioctls for operating on fences. | ||
243 | */ | ||
244 | #define DRM_MGA_SET_FENCE 0x0a | ||
245 | #define DRM_MGA_WAIT_FENCE 0x0b | ||
246 | #define DRM_MGA_DMA_BOOTSTRAP 0x0c | ||
247 | |||
248 | #define DRM_IOCTL_MGA_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INIT, drm_mga_init_t) | ||
249 | #define DRM_IOCTL_MGA_FLUSH DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_FLUSH, drm_lock_t) | ||
250 | #define DRM_IOCTL_MGA_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MGA_RESET) | ||
251 | #define DRM_IOCTL_MGA_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MGA_SWAP) | ||
252 | #define DRM_IOCTL_MGA_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_CLEAR, drm_mga_clear_t) | ||
253 | #define DRM_IOCTL_MGA_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_VERTEX, drm_mga_vertex_t) | ||
254 | #define DRM_IOCTL_MGA_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INDICES, drm_mga_indices_t) | ||
255 | #define DRM_IOCTL_MGA_ILOAD DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t) | ||
256 | #define DRM_IOCTL_MGA_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t) | ||
257 | #define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t) | ||
258 | #define DRM_IOCTL_MGA_SET_FENCE DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_SET_FENCE, uint32_t) | ||
259 | #define DRM_IOCTL_MGA_WAIT_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_WAIT_FENCE, uint32_t) | ||
260 | #define DRM_IOCTL_MGA_DMA_BOOTSTRAP DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_DMA_BOOTSTRAP, drm_mga_dma_bootstrap_t) | ||
261 | |||
262 | typedef struct _drm_mga_warp_index { | ||
263 | int installed; | ||
264 | unsigned long phys_addr; | ||
265 | int size; | ||
266 | } drm_mga_warp_index_t; | ||
267 | |||
268 | typedef struct drm_mga_init { | ||
269 | enum { | ||
270 | MGA_INIT_DMA = 0x01, | ||
271 | MGA_CLEANUP_DMA = 0x02 | ||
272 | } func; | ||
273 | |||
274 | unsigned long sarea_priv_offset; | ||
275 | |||
276 | int chipset; | ||
277 | int sgram; | ||
278 | |||
279 | unsigned int maccess; | ||
280 | |||
281 | unsigned int fb_cpp; | ||
282 | unsigned int front_offset, front_pitch; | ||
283 | unsigned int back_offset, back_pitch; | ||
284 | |||
285 | unsigned int depth_cpp; | ||
286 | unsigned int depth_offset, depth_pitch; | ||
287 | |||
288 | unsigned int texture_offset[MGA_NR_TEX_HEAPS]; | ||
289 | unsigned int texture_size[MGA_NR_TEX_HEAPS]; | ||
290 | |||
291 | unsigned long fb_offset; | ||
292 | unsigned long mmio_offset; | ||
293 | unsigned long status_offset; | ||
294 | unsigned long warp_offset; | ||
295 | unsigned long primary_offset; | ||
296 | unsigned long buffers_offset; | ||
297 | } drm_mga_init_t; | ||
298 | |||
299 | typedef struct drm_mga_dma_bootstrap { | ||
300 | /** | ||
301 | * \name AGP texture region | ||
302 | * | ||
303 | * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, these fields will | ||
304 | * be filled in with the actual AGP texture settings. | ||
305 | * | ||
306 | * \warning | ||
307 | * If these fields are non-zero, but dma_mga_dma_bootstrap::agp_mode | ||
308 | * is zero, it means that PCI memory (most likely through the use of | ||
309 | * an IOMMU) is being used for "AGP" textures. | ||
310 | */ | ||
311 | /*@{ */ | ||
312 | unsigned long texture_handle; /**< Handle used to map AGP textures. */ | ||
313 | uint32_t texture_size; /**< Size of the AGP texture region. */ | ||
314 | /*@} */ | ||
315 | |||
316 | /** | ||
317 | * Requested size of the primary DMA region. | ||
318 | * | ||
319 | * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be | ||
320 | * filled in with the actual AGP mode. If AGP was not available | ||
321 | */ | ||
322 | uint32_t primary_size; | ||
323 | |||
324 | /** | ||
325 | * Requested number of secondary DMA buffers. | ||
326 | * | ||
327 | * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be | ||
328 | * filled in with the actual number of secondary DMA buffers | ||
329 | * allocated. Particularly when PCI DMA is used, this may be | ||
330 | * (subtantially) less than the number requested. | ||
331 | */ | ||
332 | uint32_t secondary_bin_count; | ||
333 | |||
334 | /** | ||
335 | * Requested size of each secondary DMA buffer. | ||
336 | * | ||
337 | * While the kernel \b is free to reduce | ||
338 | * dma_mga_dma_bootstrap::secondary_bin_count, it is \b not allowed | ||
339 | * to reduce dma_mga_dma_bootstrap::secondary_bin_size. | ||
340 | */ | ||
341 | uint32_t secondary_bin_size; | ||
342 | |||
343 | /** | ||
344 | * Bit-wise mask of AGPSTAT2_* values. Currently only \c AGPSTAT2_1X, | ||
345 | * \c AGPSTAT2_2X, and \c AGPSTAT2_4X are supported. If this value is | ||
346 | * zero, it means that PCI DMA should be used, even if AGP is | ||
347 | * possible. | ||
348 | * | ||
349 | * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be | ||
350 | * filled in with the actual AGP mode. If AGP was not available | ||
351 | * (i.e., PCI DMA was used), this value will be zero. | ||
352 | */ | ||
353 | uint32_t agp_mode; | ||
354 | |||
355 | /** | ||
356 | * Desired AGP GART size, measured in megabytes. | ||
357 | */ | ||
358 | uint8_t agp_size; | ||
359 | } drm_mga_dma_bootstrap_t; | ||
360 | |||
361 | typedef struct drm_mga_clear { | ||
362 | unsigned int flags; | ||
363 | unsigned int clear_color; | ||
364 | unsigned int clear_depth; | ||
365 | unsigned int color_mask; | ||
366 | unsigned int depth_mask; | ||
367 | } drm_mga_clear_t; | ||
368 | |||
369 | typedef struct drm_mga_vertex { | ||
370 | int idx; /* buffer to queue */ | ||
371 | int used; /* bytes in use */ | ||
372 | int discard; /* client finished with buffer? */ | ||
373 | } drm_mga_vertex_t; | ||
374 | |||
375 | typedef struct drm_mga_indices { | ||
376 | int idx; /* buffer to queue */ | ||
377 | unsigned int start; | ||
378 | unsigned int end; | ||
379 | int discard; /* client finished with buffer? */ | ||
380 | } drm_mga_indices_t; | ||
381 | |||
382 | typedef struct drm_mga_iload { | ||
383 | int idx; | ||
384 | unsigned int dstorg; | ||
385 | unsigned int length; | ||
386 | } drm_mga_iload_t; | ||
387 | |||
388 | typedef struct _drm_mga_blit { | ||
389 | unsigned int planemask; | ||
390 | unsigned int srcorg; | ||
391 | unsigned int dstorg; | ||
392 | int src_pitch, dst_pitch; | ||
393 | int delta_sx, delta_sy; | ||
394 | int delta_dx, delta_dy; | ||
395 | int height, ydir; /* flip image vertically */ | ||
396 | int source_pitch, dest_pitch; | ||
397 | } drm_mga_blit_t; | ||
398 | |||
399 | /* 3.1: An ioctl to get parameters that aren't available to the 3d | ||
400 | * client any other way. | ||
401 | */ | ||
402 | #define MGA_PARAM_IRQ_NR 1 | ||
403 | |||
404 | /* 3.2: Query the actual card type. The DDX only distinguishes between | ||
405 | * G200 chips and non-G200 chips, which it calls G400. It turns out that | ||
406 | * there are some very sublte differences between the G4x0 chips and the G550 | ||
407 | * chips. Using this parameter query, a client-side driver can detect the | ||
408 | * difference between a G4x0 and a G550. | ||
409 | */ | ||
410 | #define MGA_PARAM_CARD_TYPE 2 | ||
411 | |||
412 | typedef struct drm_mga_getparam { | ||
413 | int param; | ||
414 | void __user *value; | ||
415 | } drm_mga_getparam_t; | ||
416 | |||
417 | #endif | ||
diff --git a/include/drm/r128_drm.h b/include/drm/r128_drm.h new file mode 100644 index 000000000000..8d8878b55f55 --- /dev/null +++ b/include/drm/r128_drm.h | |||
@@ -0,0 +1,326 @@ | |||
1 | /* r128_drm.h -- Public header for the r128 driver -*- linux-c -*- | ||
2 | * Created: Wed Apr 5 19:24:19 2000 by kevin@precisioninsight.com | ||
3 | */ | ||
4 | /* | ||
5 | * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. | ||
6 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | ||
7 | * All rights reserved. | ||
8 | * | ||
9 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
10 | * copy of this software and associated documentation files (the "Software"), | ||
11 | * to deal in the Software without restriction, including without limitation | ||
12 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
13 | * and/or sell copies of the Software, and to permit persons to whom the | ||
14 | * Software is furnished to do so, subject to the following conditions: | ||
15 | * | ||
16 | * The above copyright notice and this permission notice (including the next | ||
17 | * paragraph) shall be included in all copies or substantial portions of the | ||
18 | * Software. | ||
19 | * | ||
20 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
21 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
22 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
23 | * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
24 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
25 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
26 | * DEALINGS IN THE SOFTWARE. | ||
27 | * | ||
28 | * Authors: | ||
29 | * Gareth Hughes <gareth@valinux.com> | ||
30 | * Kevin E. Martin <martin@valinux.com> | ||
31 | */ | ||
32 | |||
33 | #ifndef __R128_DRM_H__ | ||
34 | #define __R128_DRM_H__ | ||
35 | |||
36 | /* WARNING: If you change any of these defines, make sure to change the | ||
37 | * defines in the X server file (r128_sarea.h) | ||
38 | */ | ||
39 | #ifndef __R128_SAREA_DEFINES__ | ||
40 | #define __R128_SAREA_DEFINES__ | ||
41 | |||
42 | /* What needs to be changed for the current vertex buffer? | ||
43 | */ | ||
44 | #define R128_UPLOAD_CONTEXT 0x001 | ||
45 | #define R128_UPLOAD_SETUP 0x002 | ||
46 | #define R128_UPLOAD_TEX0 0x004 | ||
47 | #define R128_UPLOAD_TEX1 0x008 | ||
48 | #define R128_UPLOAD_TEX0IMAGES 0x010 | ||
49 | #define R128_UPLOAD_TEX1IMAGES 0x020 | ||
50 | #define R128_UPLOAD_CORE 0x040 | ||
51 | #define R128_UPLOAD_MASKS 0x080 | ||
52 | #define R128_UPLOAD_WINDOW 0x100 | ||
53 | #define R128_UPLOAD_CLIPRECTS 0x200 /* handled client-side */ | ||
54 | #define R128_REQUIRE_QUIESCENCE 0x400 | ||
55 | #define R128_UPLOAD_ALL 0x7ff | ||
56 | |||
57 | #define R128_FRONT 0x1 | ||
58 | #define R128_BACK 0x2 | ||
59 | #define R128_DEPTH 0x4 | ||
60 | |||
61 | /* Primitive types | ||
62 | */ | ||
63 | #define R128_POINTS 0x1 | ||
64 | #define R128_LINES 0x2 | ||
65 | #define R128_LINE_STRIP 0x3 | ||
66 | #define R128_TRIANGLES 0x4 | ||
67 | #define R128_TRIANGLE_FAN 0x5 | ||
68 | #define R128_TRIANGLE_STRIP 0x6 | ||
69 | |||
70 | /* Vertex/indirect buffer size | ||
71 | */ | ||
72 | #define R128_BUFFER_SIZE 16384 | ||
73 | |||
74 | /* Byte offsets for indirect buffer data | ||
75 | */ | ||
76 | #define R128_INDEX_PRIM_OFFSET 20 | ||
77 | #define R128_HOSTDATA_BLIT_OFFSET 32 | ||
78 | |||
79 | /* Keep these small for testing. | ||
80 | */ | ||
81 | #define R128_NR_SAREA_CLIPRECTS 12 | ||
82 | |||
83 | /* There are 2 heaps (local/AGP). Each region within a heap is a | ||
84 | * minimum of 64k, and there are at most 64 of them per heap. | ||
85 | */ | ||
86 | #define R128_LOCAL_TEX_HEAP 0 | ||
87 | #define R128_AGP_TEX_HEAP 1 | ||
88 | #define R128_NR_TEX_HEAPS 2 | ||
89 | #define R128_NR_TEX_REGIONS 64 | ||
90 | #define R128_LOG_TEX_GRANULARITY 16 | ||
91 | |||
92 | #define R128_NR_CONTEXT_REGS 12 | ||
93 | |||
94 | #define R128_MAX_TEXTURE_LEVELS 11 | ||
95 | #define R128_MAX_TEXTURE_UNITS 2 | ||
96 | |||
97 | #endif /* __R128_SAREA_DEFINES__ */ | ||
98 | |||
99 | typedef struct { | ||
100 | /* Context state - can be written in one large chunk */ | ||
101 | unsigned int dst_pitch_offset_c; | ||
102 | unsigned int dp_gui_master_cntl_c; | ||
103 | unsigned int sc_top_left_c; | ||
104 | unsigned int sc_bottom_right_c; | ||
105 | unsigned int z_offset_c; | ||
106 | unsigned int z_pitch_c; | ||
107 | unsigned int z_sten_cntl_c; | ||
108 | unsigned int tex_cntl_c; | ||
109 | unsigned int misc_3d_state_cntl_reg; | ||
110 | unsigned int texture_clr_cmp_clr_c; | ||
111 | unsigned int texture_clr_cmp_msk_c; | ||
112 | unsigned int fog_color_c; | ||
113 | |||
114 | /* Texture state */ | ||
115 | unsigned int tex_size_pitch_c; | ||
116 | unsigned int constant_color_c; | ||
117 | |||
118 | /* Setup state */ | ||
119 | unsigned int pm4_vc_fpu_setup; | ||
120 | unsigned int setup_cntl; | ||
121 | |||
122 | /* Mask state */ | ||
123 | unsigned int dp_write_mask; | ||
124 | unsigned int sten_ref_mask_c; | ||
125 | unsigned int plane_3d_mask_c; | ||
126 | |||
127 | /* Window state */ | ||
128 | unsigned int window_xy_offset; | ||
129 | |||
130 | /* Core state */ | ||
131 | unsigned int scale_3d_cntl; | ||
132 | } drm_r128_context_regs_t; | ||
133 | |||
134 | /* Setup registers for each texture unit | ||
135 | */ | ||
136 | typedef struct { | ||
137 | unsigned int tex_cntl; | ||
138 | unsigned int tex_combine_cntl; | ||
139 | unsigned int tex_size_pitch; | ||
140 | unsigned int tex_offset[R128_MAX_TEXTURE_LEVELS]; | ||
141 | unsigned int tex_border_color; | ||
142 | } drm_r128_texture_regs_t; | ||
143 | |||
144 | typedef struct drm_r128_sarea { | ||
145 | /* The channel for communication of state information to the kernel | ||
146 | * on firing a vertex buffer. | ||
147 | */ | ||
148 | drm_r128_context_regs_t context_state; | ||
149 | drm_r128_texture_regs_t tex_state[R128_MAX_TEXTURE_UNITS]; | ||
150 | unsigned int dirty; | ||
151 | unsigned int vertsize; | ||
152 | unsigned int vc_format; | ||
153 | |||
154 | /* The current cliprects, or a subset thereof. | ||
155 | */ | ||
156 | struct drm_clip_rect boxes[R128_NR_SAREA_CLIPRECTS]; | ||
157 | unsigned int nbox; | ||
158 | |||
159 | /* Counters for client-side throttling of rendering clients. | ||
160 | */ | ||
161 | unsigned int last_frame; | ||
162 | unsigned int last_dispatch; | ||
163 | |||
164 | struct drm_tex_region tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS + 1]; | ||
165 | unsigned int tex_age[R128_NR_TEX_HEAPS]; | ||
166 | int ctx_owner; | ||
167 | int pfAllowPageFlip; /* number of 3d windows (0,1,2 or more) */ | ||
168 | int pfCurrentPage; /* which buffer is being displayed? */ | ||
169 | } drm_r128_sarea_t; | ||
170 | |||
171 | /* WARNING: If you change any of these defines, make sure to change the | ||
172 | * defines in the Xserver file (xf86drmR128.h) | ||
173 | */ | ||
174 | |||
175 | /* Rage 128 specific ioctls | ||
176 | * The device specific ioctl range is 0x40 to 0x79. | ||
177 | */ | ||
178 | #define DRM_R128_INIT 0x00 | ||
179 | #define DRM_R128_CCE_START 0x01 | ||
180 | #define DRM_R128_CCE_STOP 0x02 | ||
181 | #define DRM_R128_CCE_RESET 0x03 | ||
182 | #define DRM_R128_CCE_IDLE 0x04 | ||
183 | /* 0x05 not used */ | ||
184 | #define DRM_R128_RESET 0x06 | ||
185 | #define DRM_R128_SWAP 0x07 | ||
186 | #define DRM_R128_CLEAR 0x08 | ||
187 | #define DRM_R128_VERTEX 0x09 | ||
188 | #define DRM_R128_INDICES 0x0a | ||
189 | #define DRM_R128_BLIT 0x0b | ||
190 | #define DRM_R128_DEPTH 0x0c | ||
191 | #define DRM_R128_STIPPLE 0x0d | ||
192 | /* 0x0e not used */ | ||
193 | #define DRM_R128_INDIRECT 0x0f | ||
194 | #define DRM_R128_FULLSCREEN 0x10 | ||
195 | #define DRM_R128_CLEAR2 0x11 | ||
196 | #define DRM_R128_GETPARAM 0x12 | ||
197 | #define DRM_R128_FLIP 0x13 | ||
198 | |||
199 | #define DRM_IOCTL_R128_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INIT, drm_r128_init_t) | ||
200 | #define DRM_IOCTL_R128_CCE_START DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_START) | ||
201 | #define DRM_IOCTL_R128_CCE_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CCE_STOP, drm_r128_cce_stop_t) | ||
202 | #define DRM_IOCTL_R128_CCE_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_RESET) | ||
203 | #define DRM_IOCTL_R128_CCE_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_IDLE) | ||
204 | /* 0x05 not used */ | ||
205 | #define DRM_IOCTL_R128_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_RESET) | ||
206 | #define DRM_IOCTL_R128_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_R128_SWAP) | ||
207 | #define DRM_IOCTL_R128_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR, drm_r128_clear_t) | ||
208 | #define DRM_IOCTL_R128_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_R128_VERTEX, drm_r128_vertex_t) | ||
209 | #define DRM_IOCTL_R128_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INDICES, drm_r128_indices_t) | ||
210 | #define DRM_IOCTL_R128_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_BLIT, drm_r128_blit_t) | ||
211 | #define DRM_IOCTL_R128_DEPTH DRM_IOW( DRM_COMMAND_BASE + DRM_R128_DEPTH, drm_r128_depth_t) | ||
212 | #define DRM_IOCTL_R128_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_R128_STIPPLE, drm_r128_stipple_t) | ||
213 | /* 0x0e not used */ | ||
214 | #define DRM_IOCTL_R128_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_R128_INDIRECT, drm_r128_indirect_t) | ||
215 | #define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_R128_FULLSCREEN, drm_r128_fullscreen_t) | ||
216 | #define DRM_IOCTL_R128_CLEAR2 DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR2, drm_r128_clear2_t) | ||
217 | #define DRM_IOCTL_R128_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_R128_GETPARAM, drm_r128_getparam_t) | ||
218 | #define DRM_IOCTL_R128_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_R128_FLIP) | ||
219 | |||
220 | typedef struct drm_r128_init { | ||
221 | enum { | ||
222 | R128_INIT_CCE = 0x01, | ||
223 | R128_CLEANUP_CCE = 0x02 | ||
224 | } func; | ||
225 | unsigned long sarea_priv_offset; | ||
226 | int is_pci; | ||
227 | int cce_mode; | ||
228 | int cce_secure; | ||
229 | int ring_size; | ||
230 | int usec_timeout; | ||
231 | |||
232 | unsigned int fb_bpp; | ||
233 | unsigned int front_offset, front_pitch; | ||
234 | unsigned int back_offset, back_pitch; | ||
235 | unsigned int depth_bpp; | ||
236 | unsigned int depth_offset, depth_pitch; | ||
237 | unsigned int span_offset; | ||
238 | |||
239 | unsigned long fb_offset; | ||
240 | unsigned long mmio_offset; | ||
241 | unsigned long ring_offset; | ||
242 | unsigned long ring_rptr_offset; | ||
243 | unsigned long buffers_offset; | ||
244 | unsigned long agp_textures_offset; | ||
245 | } drm_r128_init_t; | ||
246 | |||
247 | typedef struct drm_r128_cce_stop { | ||
248 | int flush; | ||
249 | int idle; | ||
250 | } drm_r128_cce_stop_t; | ||
251 | |||
252 | typedef struct drm_r128_clear { | ||
253 | unsigned int flags; | ||
254 | unsigned int clear_color; | ||
255 | unsigned int clear_depth; | ||
256 | unsigned int color_mask; | ||
257 | unsigned int depth_mask; | ||
258 | } drm_r128_clear_t; | ||
259 | |||
260 | typedef struct drm_r128_vertex { | ||
261 | int prim; | ||
262 | int idx; /* Index of vertex buffer */ | ||
263 | int count; /* Number of vertices in buffer */ | ||
264 | int discard; /* Client finished with buffer? */ | ||
265 | } drm_r128_vertex_t; | ||
266 | |||
267 | typedef struct drm_r128_indices { | ||
268 | int prim; | ||
269 | int idx; | ||
270 | int start; | ||
271 | int end; | ||
272 | int discard; /* Client finished with buffer? */ | ||
273 | } drm_r128_indices_t; | ||
274 | |||
275 | typedef struct drm_r128_blit { | ||
276 | int idx; | ||
277 | int pitch; | ||
278 | int offset; | ||
279 | int format; | ||
280 | unsigned short x, y; | ||
281 | unsigned short width, height; | ||
282 | } drm_r128_blit_t; | ||
283 | |||
284 | typedef struct drm_r128_depth { | ||
285 | enum { | ||
286 | R128_WRITE_SPAN = 0x01, | ||
287 | R128_WRITE_PIXELS = 0x02, | ||
288 | R128_READ_SPAN = 0x03, | ||
289 | R128_READ_PIXELS = 0x04 | ||
290 | } func; | ||
291 | int n; | ||
292 | int __user *x; | ||
293 | int __user *y; | ||
294 | unsigned int __user *buffer; | ||
295 | unsigned char __user *mask; | ||
296 | } drm_r128_depth_t; | ||
297 | |||
298 | typedef struct drm_r128_stipple { | ||
299 | unsigned int __user *mask; | ||
300 | } drm_r128_stipple_t; | ||
301 | |||
302 | typedef struct drm_r128_indirect { | ||
303 | int idx; | ||
304 | int start; | ||
305 | int end; | ||
306 | int discard; | ||
307 | } drm_r128_indirect_t; | ||
308 | |||
309 | typedef struct drm_r128_fullscreen { | ||
310 | enum { | ||
311 | R128_INIT_FULLSCREEN = 0x01, | ||
312 | R128_CLEANUP_FULLSCREEN = 0x02 | ||
313 | } func; | ||
314 | } drm_r128_fullscreen_t; | ||
315 | |||
316 | /* 2.3: An ioctl to get parameters that aren't available to the 3d | ||
317 | * client any other way. | ||
318 | */ | ||
319 | #define R128_PARAM_IRQ_NR 1 | ||
320 | |||
321 | typedef struct drm_r128_getparam { | ||
322 | int param; | ||
323 | void __user *value; | ||
324 | } drm_r128_getparam_t; | ||
325 | |||
326 | #endif | ||
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h new file mode 100644 index 000000000000..73ff51f12311 --- /dev/null +++ b/include/drm/radeon_drm.h | |||
@@ -0,0 +1,749 @@ | |||
1 | /* radeon_drm.h -- Public header for the radeon driver -*- linux-c -*- | ||
2 | * | ||
3 | * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. | ||
4 | * Copyright 2000 VA Linux Systems, Inc., Fremont, California. | ||
5 | * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
9 | * copy of this software and associated documentation files (the "Software"), | ||
10 | * to deal in the Software without restriction, including without limitation | ||
11 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
12 | * and/or sell copies of the Software, and to permit persons to whom the | ||
13 | * Software is furnished to do so, subject to the following conditions: | ||
14 | * | ||
15 | * The above copyright notice and this permission notice (including the next | ||
16 | * paragraph) shall be included in all copies or substantial portions of the | ||
17 | * Software. | ||
18 | * | ||
19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
20 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
21 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
22 | * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
23 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
24 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
25 | * DEALINGS IN THE SOFTWARE. | ||
26 | * | ||
27 | * Authors: | ||
28 | * Kevin E. Martin <martin@valinux.com> | ||
29 | * Gareth Hughes <gareth@valinux.com> | ||
30 | * Keith Whitwell <keith@tungstengraphics.com> | ||
31 | */ | ||
32 | |||
33 | #ifndef __RADEON_DRM_H__ | ||
34 | #define __RADEON_DRM_H__ | ||
35 | |||
36 | /* WARNING: If you change any of these defines, make sure to change the | ||
37 | * defines in the X server file (radeon_sarea.h) | ||
38 | */ | ||
39 | #ifndef __RADEON_SAREA_DEFINES__ | ||
40 | #define __RADEON_SAREA_DEFINES__ | ||
41 | |||
42 | /* Old style state flags, required for sarea interface (1.1 and 1.2 | ||
43 | * clears) and 1.2 drm_vertex2 ioctl. | ||
44 | */ | ||
45 | #define RADEON_UPLOAD_CONTEXT 0x00000001 | ||
46 | #define RADEON_UPLOAD_VERTFMT 0x00000002 | ||
47 | #define RADEON_UPLOAD_LINE 0x00000004 | ||
48 | #define RADEON_UPLOAD_BUMPMAP 0x00000008 | ||
49 | #define RADEON_UPLOAD_MASKS 0x00000010 | ||
50 | #define RADEON_UPLOAD_VIEWPORT 0x00000020 | ||
51 | #define RADEON_UPLOAD_SETUP 0x00000040 | ||
52 | #define RADEON_UPLOAD_TCL 0x00000080 | ||
53 | #define RADEON_UPLOAD_MISC 0x00000100 | ||
54 | #define RADEON_UPLOAD_TEX0 0x00000200 | ||
55 | #define RADEON_UPLOAD_TEX1 0x00000400 | ||
56 | #define RADEON_UPLOAD_TEX2 0x00000800 | ||
57 | #define RADEON_UPLOAD_TEX0IMAGES 0x00001000 | ||
58 | #define RADEON_UPLOAD_TEX1IMAGES 0x00002000 | ||
59 | #define RADEON_UPLOAD_TEX2IMAGES 0x00004000 | ||
60 | #define RADEON_UPLOAD_CLIPRECTS 0x00008000 /* handled client-side */ | ||
61 | #define RADEON_REQUIRE_QUIESCENCE 0x00010000 | ||
62 | #define RADEON_UPLOAD_ZBIAS 0x00020000 /* version 1.2 and newer */ | ||
63 | #define RADEON_UPLOAD_ALL 0x003effff | ||
64 | #define RADEON_UPLOAD_CONTEXT_ALL 0x003e01ff | ||
65 | |||
66 | /* New style per-packet identifiers for use in cmd_buffer ioctl with | ||
67 | * the RADEON_EMIT_PACKET command. Comments relate new packets to old | ||
68 | * state bits and the packet size: | ||
69 | */ | ||
70 | #define RADEON_EMIT_PP_MISC 0 /* context/7 */ | ||
71 | #define RADEON_EMIT_PP_CNTL 1 /* context/3 */ | ||
72 | #define RADEON_EMIT_RB3D_COLORPITCH 2 /* context/1 */ | ||
73 | #define RADEON_EMIT_RE_LINE_PATTERN 3 /* line/2 */ | ||
74 | #define RADEON_EMIT_SE_LINE_WIDTH 4 /* line/1 */ | ||
75 | #define RADEON_EMIT_PP_LUM_MATRIX 5 /* bumpmap/1 */ | ||
76 | #define RADEON_EMIT_PP_ROT_MATRIX_0 6 /* bumpmap/2 */ | ||
77 | #define RADEON_EMIT_RB3D_STENCILREFMASK 7 /* masks/3 */ | ||
78 | #define RADEON_EMIT_SE_VPORT_XSCALE 8 /* viewport/6 */ | ||
79 | #define RADEON_EMIT_SE_CNTL 9 /* setup/2 */ | ||
80 | #define RADEON_EMIT_SE_CNTL_STATUS 10 /* setup/1 */ | ||
81 | #define RADEON_EMIT_RE_MISC 11 /* misc/1 */ | ||
82 | #define RADEON_EMIT_PP_TXFILTER_0 12 /* tex0/6 */ | ||
83 | #define RADEON_EMIT_PP_BORDER_COLOR_0 13 /* tex0/1 */ | ||
84 | #define RADEON_EMIT_PP_TXFILTER_1 14 /* tex1/6 */ | ||
85 | #define RADEON_EMIT_PP_BORDER_COLOR_1 15 /* tex1/1 */ | ||
86 | #define RADEON_EMIT_PP_TXFILTER_2 16 /* tex2/6 */ | ||
87 | #define RADEON_EMIT_PP_BORDER_COLOR_2 17 /* tex2/1 */ | ||
88 | #define RADEON_EMIT_SE_ZBIAS_FACTOR 18 /* zbias/2 */ | ||
89 | #define RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT 19 /* tcl/11 */ | ||
90 | #define RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED 20 /* material/17 */ | ||
91 | #define R200_EMIT_PP_TXCBLEND_0 21 /* tex0/4 */ | ||
92 | #define R200_EMIT_PP_TXCBLEND_1 22 /* tex1/4 */ | ||
93 | #define R200_EMIT_PP_TXCBLEND_2 23 /* tex2/4 */ | ||
94 | #define R200_EMIT_PP_TXCBLEND_3 24 /* tex3/4 */ | ||
95 | #define R200_EMIT_PP_TXCBLEND_4 25 /* tex4/4 */ | ||
96 | #define R200_EMIT_PP_TXCBLEND_5 26 /* tex5/4 */ | ||
97 | #define R200_EMIT_PP_TXCBLEND_6 27 /* /4 */ | ||
98 | #define R200_EMIT_PP_TXCBLEND_7 28 /* /4 */ | ||
99 | #define R200_EMIT_TCL_LIGHT_MODEL_CTL_0 29 /* tcl/7 */ | ||
100 | #define R200_EMIT_TFACTOR_0 30 /* tf/7 */ | ||
101 | #define R200_EMIT_VTX_FMT_0 31 /* vtx/5 */ | ||
102 | #define R200_EMIT_VAP_CTL 32 /* vap/1 */ | ||
103 | #define R200_EMIT_MATRIX_SELECT_0 33 /* msl/5 */ | ||
104 | #define R200_EMIT_TEX_PROC_CTL_2 34 /* tcg/5 */ | ||
105 | #define R200_EMIT_TCL_UCP_VERT_BLEND_CTL 35 /* tcl/1 */ | ||
106 | #define R200_EMIT_PP_TXFILTER_0 36 /* tex0/6 */ | ||
107 | #define R200_EMIT_PP_TXFILTER_1 37 /* tex1/6 */ | ||
108 | #define R200_EMIT_PP_TXFILTER_2 38 /* tex2/6 */ | ||
109 | #define R200_EMIT_PP_TXFILTER_3 39 /* tex3/6 */ | ||
110 | #define R200_EMIT_PP_TXFILTER_4 40 /* tex4/6 */ | ||
111 | #define R200_EMIT_PP_TXFILTER_5 41 /* tex5/6 */ | ||
112 | #define R200_EMIT_PP_TXOFFSET_0 42 /* tex0/1 */ | ||
113 | #define R200_EMIT_PP_TXOFFSET_1 43 /* tex1/1 */ | ||
114 | #define R200_EMIT_PP_TXOFFSET_2 44 /* tex2/1 */ | ||
115 | #define R200_EMIT_PP_TXOFFSET_3 45 /* tex3/1 */ | ||
116 | #define R200_EMIT_PP_TXOFFSET_4 46 /* tex4/1 */ | ||
117 | #define R200_EMIT_PP_TXOFFSET_5 47 /* tex5/1 */ | ||
118 | #define R200_EMIT_VTE_CNTL 48 /* vte/1 */ | ||
119 | #define R200_EMIT_OUTPUT_VTX_COMP_SEL 49 /* vtx/1 */ | ||
120 | #define R200_EMIT_PP_TAM_DEBUG3 50 /* tam/1 */ | ||
121 | #define R200_EMIT_PP_CNTL_X 51 /* cst/1 */ | ||
122 | #define R200_EMIT_RB3D_DEPTHXY_OFFSET 52 /* cst/1 */ | ||
123 | #define R200_EMIT_RE_AUX_SCISSOR_CNTL 53 /* cst/1 */ | ||
124 | #define R200_EMIT_RE_SCISSOR_TL_0 54 /* cst/2 */ | ||
125 | #define R200_EMIT_RE_SCISSOR_TL_1 55 /* cst/2 */ | ||
126 | #define R200_EMIT_RE_SCISSOR_TL_2 56 /* cst/2 */ | ||
127 | #define R200_EMIT_SE_VAP_CNTL_STATUS 57 /* cst/1 */ | ||
128 | #define R200_EMIT_SE_VTX_STATE_CNTL 58 /* cst/1 */ | ||
129 | #define R200_EMIT_RE_POINTSIZE 59 /* cst/1 */ | ||
130 | #define R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0 60 /* cst/4 */ | ||
131 | #define R200_EMIT_PP_CUBIC_FACES_0 61 | ||
132 | #define R200_EMIT_PP_CUBIC_OFFSETS_0 62 | ||
133 | #define R200_EMIT_PP_CUBIC_FACES_1 63 | ||
134 | #define R200_EMIT_PP_CUBIC_OFFSETS_1 64 | ||
135 | #define R200_EMIT_PP_CUBIC_FACES_2 65 | ||
136 | #define R200_EMIT_PP_CUBIC_OFFSETS_2 66 | ||
137 | #define R200_EMIT_PP_CUBIC_FACES_3 67 | ||
138 | #define R200_EMIT_PP_CUBIC_OFFSETS_3 68 | ||
139 | #define R200_EMIT_PP_CUBIC_FACES_4 69 | ||
140 | #define R200_EMIT_PP_CUBIC_OFFSETS_4 70 | ||
141 | #define R200_EMIT_PP_CUBIC_FACES_5 71 | ||
142 | #define R200_EMIT_PP_CUBIC_OFFSETS_5 72 | ||
143 | #define RADEON_EMIT_PP_TEX_SIZE_0 73 | ||
144 | #define RADEON_EMIT_PP_TEX_SIZE_1 74 | ||
145 | #define RADEON_EMIT_PP_TEX_SIZE_2 75 | ||
146 | #define R200_EMIT_RB3D_BLENDCOLOR 76 | ||
147 | #define R200_EMIT_TCL_POINT_SPRITE_CNTL 77 | ||
148 | #define RADEON_EMIT_PP_CUBIC_FACES_0 78 | ||
149 | #define RADEON_EMIT_PP_CUBIC_OFFSETS_T0 79 | ||
150 | #define RADEON_EMIT_PP_CUBIC_FACES_1 80 | ||
151 | #define RADEON_EMIT_PP_CUBIC_OFFSETS_T1 81 | ||
152 | #define RADEON_EMIT_PP_CUBIC_FACES_2 82 | ||
153 | #define RADEON_EMIT_PP_CUBIC_OFFSETS_T2 83 | ||
154 | #define R200_EMIT_PP_TRI_PERF_CNTL 84 | ||
155 | #define R200_EMIT_PP_AFS_0 85 | ||
156 | #define R200_EMIT_PP_AFS_1 86 | ||
157 | #define R200_EMIT_ATF_TFACTOR 87 | ||
158 | #define R200_EMIT_PP_TXCTLALL_0 88 | ||
159 | #define R200_EMIT_PP_TXCTLALL_1 89 | ||
160 | #define R200_EMIT_PP_TXCTLALL_2 90 | ||
161 | #define R200_EMIT_PP_TXCTLALL_3 91 | ||
162 | #define R200_EMIT_PP_TXCTLALL_4 92 | ||
163 | #define R200_EMIT_PP_TXCTLALL_5 93 | ||
164 | #define R200_EMIT_VAP_PVS_CNTL 94 | ||
165 | #define RADEON_MAX_STATE_PACKETS 95 | ||
166 | |||
167 | /* Commands understood by cmd_buffer ioctl. More can be added but | ||
168 | * obviously these can't be removed or changed: | ||
169 | */ | ||
170 | #define RADEON_CMD_PACKET 1 /* emit one of the register packets above */ | ||
171 | #define RADEON_CMD_SCALARS 2 /* emit scalar data */ | ||
172 | #define RADEON_CMD_VECTORS 3 /* emit vector data */ | ||
173 | #define RADEON_CMD_DMA_DISCARD 4 /* discard current dma buf */ | ||
174 | #define RADEON_CMD_PACKET3 5 /* emit hw packet */ | ||
175 | #define RADEON_CMD_PACKET3_CLIP 6 /* emit hw packet wrapped in cliprects */ | ||
176 | #define RADEON_CMD_SCALARS2 7 /* r200 stopgap */ | ||
177 | #define RADEON_CMD_WAIT 8 /* emit hw wait commands -- note: | ||
178 | * doesn't make the cpu wait, just | ||
179 | * the graphics hardware */ | ||
180 | #define RADEON_CMD_VECLINEAR 9 /* another r200 stopgap */ | ||
181 | |||
182 | typedef union { | ||
183 | int i; | ||
184 | struct { | ||
185 | unsigned char cmd_type, pad0, pad1, pad2; | ||
186 | } header; | ||
187 | struct { | ||
188 | unsigned char cmd_type, packet_id, pad0, pad1; | ||
189 | } packet; | ||
190 | struct { | ||
191 | unsigned char cmd_type, offset, stride, count; | ||
192 | } scalars; | ||
193 | struct { | ||
194 | unsigned char cmd_type, offset, stride, count; | ||
195 | } vectors; | ||
196 | struct { | ||
197 | unsigned char cmd_type, addr_lo, addr_hi, count; | ||
198 | } veclinear; | ||
199 | struct { | ||
200 | unsigned char cmd_type, buf_idx, pad0, pad1; | ||
201 | } dma; | ||
202 | struct { | ||
203 | unsigned char cmd_type, flags, pad0, pad1; | ||
204 | } wait; | ||
205 | } drm_radeon_cmd_header_t; | ||
206 | |||
207 | #define RADEON_WAIT_2D 0x1 | ||
208 | #define RADEON_WAIT_3D 0x2 | ||
209 | |||
210 | /* Allowed parameters for R300_CMD_PACKET3 | ||
211 | */ | ||
212 | #define R300_CMD_PACKET3_CLEAR 0 | ||
213 | #define R300_CMD_PACKET3_RAW 1 | ||
214 | |||
215 | /* Commands understood by cmd_buffer ioctl for R300. | ||
216 | * The interface has not been stabilized, so some of these may be removed | ||
217 | * and eventually reordered before stabilization. | ||
218 | */ | ||
219 | #define R300_CMD_PACKET0 1 | ||
220 | #define R300_CMD_VPU 2 /* emit vertex program upload */ | ||
221 | #define R300_CMD_PACKET3 3 /* emit a packet3 */ | ||
222 | #define R300_CMD_END3D 4 /* emit sequence ending 3d rendering */ | ||
223 | #define R300_CMD_CP_DELAY 5 | ||
224 | #define R300_CMD_DMA_DISCARD 6 | ||
225 | #define R300_CMD_WAIT 7 | ||
226 | # define R300_WAIT_2D 0x1 | ||
227 | # define R300_WAIT_3D 0x2 | ||
228 | /* these two defines are DOING IT WRONG - however | ||
229 | * we have userspace which relies on using these. | ||
230 | * The wait interface is backwards compat new | ||
231 | * code should use the NEW_WAIT defines below | ||
232 | * THESE ARE NOT BIT FIELDS | ||
233 | */ | ||
234 | # define R300_WAIT_2D_CLEAN 0x3 | ||
235 | # define R300_WAIT_3D_CLEAN 0x4 | ||
236 | |||
237 | # define R300_NEW_WAIT_2D_3D 0x3 | ||
238 | # define R300_NEW_WAIT_2D_2D_CLEAN 0x4 | ||
239 | # define R300_NEW_WAIT_3D_3D_CLEAN 0x6 | ||
240 | # define R300_NEW_WAIT_2D_2D_CLEAN_3D_3D_CLEAN 0x8 | ||
241 | |||
242 | #define R300_CMD_SCRATCH 8 | ||
243 | #define R300_CMD_R500FP 9 | ||
244 | |||
245 | typedef union { | ||
246 | unsigned int u; | ||
247 | struct { | ||
248 | unsigned char cmd_type, pad0, pad1, pad2; | ||
249 | } header; | ||
250 | struct { | ||
251 | unsigned char cmd_type, count, reglo, reghi; | ||
252 | } packet0; | ||
253 | struct { | ||
254 | unsigned char cmd_type, count, adrlo, adrhi; | ||
255 | } vpu; | ||
256 | struct { | ||
257 | unsigned char cmd_type, packet, pad0, pad1; | ||
258 | } packet3; | ||
259 | struct { | ||
260 | unsigned char cmd_type, packet; | ||
261 | unsigned short count; /* amount of packet2 to emit */ | ||
262 | } delay; | ||
263 | struct { | ||
264 | unsigned char cmd_type, buf_idx, pad0, pad1; | ||
265 | } dma; | ||
266 | struct { | ||
267 | unsigned char cmd_type, flags, pad0, pad1; | ||
268 | } wait; | ||
269 | struct { | ||
270 | unsigned char cmd_type, reg, n_bufs, flags; | ||
271 | } scratch; | ||
272 | struct { | ||
273 | unsigned char cmd_type, count, adrlo, adrhi_flags; | ||
274 | } r500fp; | ||
275 | } drm_r300_cmd_header_t; | ||
276 | |||
277 | #define RADEON_FRONT 0x1 | ||
278 | #define RADEON_BACK 0x2 | ||
279 | #define RADEON_DEPTH 0x4 | ||
280 | #define RADEON_STENCIL 0x8 | ||
281 | #define RADEON_CLEAR_FASTZ 0x80000000 | ||
282 | #define RADEON_USE_HIERZ 0x40000000 | ||
283 | #define RADEON_USE_COMP_ZBUF 0x20000000 | ||
284 | |||
285 | #define R500FP_CONSTANT_TYPE (1 << 1) | ||
286 | #define R500FP_CONSTANT_CLAMP (1 << 2) | ||
287 | |||
288 | /* Primitive types | ||
289 | */ | ||
290 | #define RADEON_POINTS 0x1 | ||
291 | #define RADEON_LINES 0x2 | ||
292 | #define RADEON_LINE_STRIP 0x3 | ||
293 | #define RADEON_TRIANGLES 0x4 | ||
294 | #define RADEON_TRIANGLE_FAN 0x5 | ||
295 | #define RADEON_TRIANGLE_STRIP 0x6 | ||
296 | |||
297 | /* Vertex/indirect buffer size | ||
298 | */ | ||
299 | #define RADEON_BUFFER_SIZE 65536 | ||
300 | |||
301 | /* Byte offsets for indirect buffer data | ||
302 | */ | ||
303 | #define RADEON_INDEX_PRIM_OFFSET 20 | ||
304 | |||
305 | #define RADEON_SCRATCH_REG_OFFSET 32 | ||
306 | |||
307 | #define RADEON_NR_SAREA_CLIPRECTS 12 | ||
308 | |||
309 | /* There are 2 heaps (local/GART). Each region within a heap is a | ||
310 | * minimum of 64k, and there are at most 64 of them per heap. | ||
311 | */ | ||
312 | #define RADEON_LOCAL_TEX_HEAP 0 | ||
313 | #define RADEON_GART_TEX_HEAP 1 | ||
314 | #define RADEON_NR_TEX_HEAPS 2 | ||
315 | #define RADEON_NR_TEX_REGIONS 64 | ||
316 | #define RADEON_LOG_TEX_GRANULARITY 16 | ||
317 | |||
318 | #define RADEON_MAX_TEXTURE_LEVELS 12 | ||
319 | #define RADEON_MAX_TEXTURE_UNITS 3 | ||
320 | |||
321 | #define RADEON_MAX_SURFACES 8 | ||
322 | |||
323 | /* Blits have strict offset rules. All blit offset must be aligned on | ||
324 | * a 1K-byte boundary. | ||
325 | */ | ||
326 | #define RADEON_OFFSET_SHIFT 10 | ||
327 | #define RADEON_OFFSET_ALIGN (1 << RADEON_OFFSET_SHIFT) | ||
328 | #define RADEON_OFFSET_MASK (RADEON_OFFSET_ALIGN - 1) | ||
329 | |||
330 | #endif /* __RADEON_SAREA_DEFINES__ */ | ||
331 | |||
332 | typedef struct { | ||
333 | unsigned int red; | ||
334 | unsigned int green; | ||
335 | unsigned int blue; | ||
336 | unsigned int alpha; | ||
337 | } radeon_color_regs_t; | ||
338 | |||
339 | typedef struct { | ||
340 | /* Context state */ | ||
341 | unsigned int pp_misc; /* 0x1c14 */ | ||
342 | unsigned int pp_fog_color; | ||
343 | unsigned int re_solid_color; | ||
344 | unsigned int rb3d_blendcntl; | ||
345 | unsigned int rb3d_depthoffset; | ||
346 | unsigned int rb3d_depthpitch; | ||
347 | unsigned int rb3d_zstencilcntl; | ||
348 | |||
349 | unsigned int pp_cntl; /* 0x1c38 */ | ||
350 | unsigned int rb3d_cntl; | ||
351 | unsigned int rb3d_coloroffset; | ||
352 | unsigned int re_width_height; | ||
353 | unsigned int rb3d_colorpitch; | ||
354 | unsigned int se_cntl; | ||
355 | |||
356 | /* Vertex format state */ | ||
357 | unsigned int se_coord_fmt; /* 0x1c50 */ | ||
358 | |||
359 | /* Line state */ | ||
360 | unsigned int re_line_pattern; /* 0x1cd0 */ | ||
361 | unsigned int re_line_state; | ||
362 | |||
363 | unsigned int se_line_width; /* 0x1db8 */ | ||
364 | |||
365 | /* Bumpmap state */ | ||
366 | unsigned int pp_lum_matrix; /* 0x1d00 */ | ||
367 | |||
368 | unsigned int pp_rot_matrix_0; /* 0x1d58 */ | ||
369 | unsigned int pp_rot_matrix_1; | ||
370 | |||
371 | /* Mask state */ | ||
372 | unsigned int rb3d_stencilrefmask; /* 0x1d7c */ | ||
373 | unsigned int rb3d_ropcntl; | ||
374 | unsigned int rb3d_planemask; | ||
375 | |||
376 | /* Viewport state */ | ||
377 | unsigned int se_vport_xscale; /* 0x1d98 */ | ||
378 | unsigned int se_vport_xoffset; | ||
379 | unsigned int se_vport_yscale; | ||
380 | unsigned int se_vport_yoffset; | ||
381 | unsigned int se_vport_zscale; | ||
382 | unsigned int se_vport_zoffset; | ||
383 | |||
384 | /* Setup state */ | ||
385 | unsigned int se_cntl_status; /* 0x2140 */ | ||
386 | |||
387 | /* Misc state */ | ||
388 | unsigned int re_top_left; /* 0x26c0 */ | ||
389 | unsigned int re_misc; | ||
390 | } drm_radeon_context_regs_t; | ||
391 | |||
392 | typedef struct { | ||
393 | /* Zbias state */ | ||
394 | unsigned int se_zbias_factor; /* 0x1dac */ | ||
395 | unsigned int se_zbias_constant; | ||
396 | } drm_radeon_context2_regs_t; | ||
397 | |||
398 | /* Setup registers for each texture unit | ||
399 | */ | ||
400 | typedef struct { | ||
401 | unsigned int pp_txfilter; | ||
402 | unsigned int pp_txformat; | ||
403 | unsigned int pp_txoffset; | ||
404 | unsigned int pp_txcblend; | ||
405 | unsigned int pp_txablend; | ||
406 | unsigned int pp_tfactor; | ||
407 | unsigned int pp_border_color; | ||
408 | } drm_radeon_texture_regs_t; | ||
409 | |||
410 | typedef struct { | ||
411 | unsigned int start; | ||
412 | unsigned int finish; | ||
413 | unsigned int prim:8; | ||
414 | unsigned int stateidx:8; | ||
415 | unsigned int numverts:16; /* overloaded as offset/64 for elt prims */ | ||
416 | unsigned int vc_format; /* vertex format */ | ||
417 | } drm_radeon_prim_t; | ||
418 | |||
419 | typedef struct { | ||
420 | drm_radeon_context_regs_t context; | ||
421 | drm_radeon_texture_regs_t tex[RADEON_MAX_TEXTURE_UNITS]; | ||
422 | drm_radeon_context2_regs_t context2; | ||
423 | unsigned int dirty; | ||
424 | } drm_radeon_state_t; | ||
425 | |||
426 | typedef struct { | ||
427 | /* The channel for communication of state information to the | ||
428 | * kernel on firing a vertex buffer with either of the | ||
429 | * obsoleted vertex/index ioctls. | ||
430 | */ | ||
431 | drm_radeon_context_regs_t context_state; | ||
432 | drm_radeon_texture_regs_t tex_state[RADEON_MAX_TEXTURE_UNITS]; | ||
433 | unsigned int dirty; | ||
434 | unsigned int vertsize; | ||
435 | unsigned int vc_format; | ||
436 | |||
437 | /* The current cliprects, or a subset thereof. | ||
438 | */ | ||
439 | struct drm_clip_rect boxes[RADEON_NR_SAREA_CLIPRECTS]; | ||
440 | unsigned int nbox; | ||
441 | |||
442 | /* Counters for client-side throttling of rendering clients. | ||
443 | */ | ||
444 | unsigned int last_frame; | ||
445 | unsigned int last_dispatch; | ||
446 | unsigned int last_clear; | ||
447 | |||
448 | struct drm_tex_region tex_list[RADEON_NR_TEX_HEAPS][RADEON_NR_TEX_REGIONS + | ||
449 | 1]; | ||
450 | unsigned int tex_age[RADEON_NR_TEX_HEAPS]; | ||
451 | int ctx_owner; | ||
452 | int pfState; /* number of 3d windows (0,1,2ormore) */ | ||
453 | int pfCurrentPage; /* which buffer is being displayed? */ | ||
454 | int crtc2_base; /* CRTC2 frame offset */ | ||
455 | int tiling_enabled; /* set by drm, read by 2d + 3d clients */ | ||
456 | } drm_radeon_sarea_t; | ||
457 | |||
458 | /* WARNING: If you change any of these defines, make sure to change the | ||
459 | * defines in the Xserver file (xf86drmRadeon.h) | ||
460 | * | ||
461 | * KW: actually it's illegal to change any of this (backwards compatibility). | ||
462 | */ | ||
463 | |||
464 | /* Radeon specific ioctls | ||
465 | * The device specific ioctl range is 0x40 to 0x79. | ||
466 | */ | ||
467 | #define DRM_RADEON_CP_INIT 0x00 | ||
468 | #define DRM_RADEON_CP_START 0x01 | ||
469 | #define DRM_RADEON_CP_STOP 0x02 | ||
470 | #define DRM_RADEON_CP_RESET 0x03 | ||
471 | #define DRM_RADEON_CP_IDLE 0x04 | ||
472 | #define DRM_RADEON_RESET 0x05 | ||
473 | #define DRM_RADEON_FULLSCREEN 0x06 | ||
474 | #define DRM_RADEON_SWAP 0x07 | ||
475 | #define DRM_RADEON_CLEAR 0x08 | ||
476 | #define DRM_RADEON_VERTEX 0x09 | ||
477 | #define DRM_RADEON_INDICES 0x0A | ||
478 | #define DRM_RADEON_NOT_USED | ||
479 | #define DRM_RADEON_STIPPLE 0x0C | ||
480 | #define DRM_RADEON_INDIRECT 0x0D | ||
481 | #define DRM_RADEON_TEXTURE 0x0E | ||
482 | #define DRM_RADEON_VERTEX2 0x0F | ||
483 | #define DRM_RADEON_CMDBUF 0x10 | ||
484 | #define DRM_RADEON_GETPARAM 0x11 | ||
485 | #define DRM_RADEON_FLIP 0x12 | ||
486 | #define DRM_RADEON_ALLOC 0x13 | ||
487 | #define DRM_RADEON_FREE 0x14 | ||
488 | #define DRM_RADEON_INIT_HEAP 0x15 | ||
489 | #define DRM_RADEON_IRQ_EMIT 0x16 | ||
490 | #define DRM_RADEON_IRQ_WAIT 0x17 | ||
491 | #define DRM_RADEON_CP_RESUME 0x18 | ||
492 | #define DRM_RADEON_SETPARAM 0x19 | ||
493 | #define DRM_RADEON_SURF_ALLOC 0x1a | ||
494 | #define DRM_RADEON_SURF_FREE 0x1b | ||
495 | |||
496 | #define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) | ||
497 | #define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START) | ||
498 | #define DRM_IOCTL_RADEON_CP_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t) | ||
499 | #define DRM_IOCTL_RADEON_CP_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESET) | ||
500 | #define DRM_IOCTL_RADEON_CP_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_IDLE) | ||
501 | #define DRM_IOCTL_RADEON_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_RESET) | ||
502 | #define DRM_IOCTL_RADEON_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FULLSCREEN, drm_radeon_fullscreen_t) | ||
503 | #define DRM_IOCTL_RADEON_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_SWAP) | ||
504 | #define DRM_IOCTL_RADEON_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CLEAR, drm_radeon_clear_t) | ||
505 | #define DRM_IOCTL_RADEON_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX, drm_radeon_vertex_t) | ||
506 | #define DRM_IOCTL_RADEON_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INDICES, drm_radeon_indices_t) | ||
507 | #define DRM_IOCTL_RADEON_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_STIPPLE, drm_radeon_stipple_t) | ||
508 | #define DRM_IOCTL_RADEON_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INDIRECT, drm_radeon_indirect_t) | ||
509 | #define DRM_IOCTL_RADEON_TEXTURE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_TEXTURE, drm_radeon_texture_t) | ||
510 | #define DRM_IOCTL_RADEON_VERTEX2 DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX2, drm_radeon_vertex2_t) | ||
511 | #define DRM_IOCTL_RADEON_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CMDBUF, drm_radeon_cmd_buffer_t) | ||
512 | #define DRM_IOCTL_RADEON_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GETPARAM, drm_radeon_getparam_t) | ||
513 | #define DRM_IOCTL_RADEON_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_FLIP) | ||
514 | #define DRM_IOCTL_RADEON_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_ALLOC, drm_radeon_mem_alloc_t) | ||
515 | #define DRM_IOCTL_RADEON_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FREE, drm_radeon_mem_free_t) | ||
516 | #define DRM_IOCTL_RADEON_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INIT_HEAP, drm_radeon_mem_init_heap_t) | ||
517 | #define DRM_IOCTL_RADEON_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_IRQ_EMIT, drm_radeon_irq_emit_t) | ||
518 | #define DRM_IOCTL_RADEON_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_IRQ_WAIT, drm_radeon_irq_wait_t) | ||
519 | #define DRM_IOCTL_RADEON_CP_RESUME DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESUME) | ||
520 | #define DRM_IOCTL_RADEON_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SETPARAM, drm_radeon_setparam_t) | ||
521 | #define DRM_IOCTL_RADEON_SURF_ALLOC DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_ALLOC, drm_radeon_surface_alloc_t) | ||
522 | #define DRM_IOCTL_RADEON_SURF_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_FREE, drm_radeon_surface_free_t) | ||
523 | |||
524 | typedef struct drm_radeon_init { | ||
525 | enum { | ||
526 | RADEON_INIT_CP = 0x01, | ||
527 | RADEON_CLEANUP_CP = 0x02, | ||
528 | RADEON_INIT_R200_CP = 0x03, | ||
529 | RADEON_INIT_R300_CP = 0x04 | ||
530 | } func; | ||
531 | unsigned long sarea_priv_offset; | ||
532 | int is_pci; | ||
533 | int cp_mode; | ||
534 | int gart_size; | ||
535 | int ring_size; | ||
536 | int usec_timeout; | ||
537 | |||
538 | unsigned int fb_bpp; | ||
539 | unsigned int front_offset, front_pitch; | ||
540 | unsigned int back_offset, back_pitch; | ||
541 | unsigned int depth_bpp; | ||
542 | unsigned int depth_offset, depth_pitch; | ||
543 | |||
544 | unsigned long fb_offset; | ||
545 | unsigned long mmio_offset; | ||
546 | unsigned long ring_offset; | ||
547 | unsigned long ring_rptr_offset; | ||
548 | unsigned long buffers_offset; | ||
549 | unsigned long gart_textures_offset; | ||
550 | } drm_radeon_init_t; | ||
551 | |||
552 | typedef struct drm_radeon_cp_stop { | ||
553 | int flush; | ||
554 | int idle; | ||
555 | } drm_radeon_cp_stop_t; | ||
556 | |||
557 | typedef struct drm_radeon_fullscreen { | ||
558 | enum { | ||
559 | RADEON_INIT_FULLSCREEN = 0x01, | ||
560 | RADEON_CLEANUP_FULLSCREEN = 0x02 | ||
561 | } func; | ||
562 | } drm_radeon_fullscreen_t; | ||
563 | |||
564 | #define CLEAR_X1 0 | ||
565 | #define CLEAR_Y1 1 | ||
566 | #define CLEAR_X2 2 | ||
567 | #define CLEAR_Y2 3 | ||
568 | #define CLEAR_DEPTH 4 | ||
569 | |||
570 | typedef union drm_radeon_clear_rect { | ||
571 | float f[5]; | ||
572 | unsigned int ui[5]; | ||
573 | } drm_radeon_clear_rect_t; | ||
574 | |||
575 | typedef struct drm_radeon_clear { | ||
576 | unsigned int flags; | ||
577 | unsigned int clear_color; | ||
578 | unsigned int clear_depth; | ||
579 | unsigned int color_mask; | ||
580 | unsigned int depth_mask; /* misnamed field: should be stencil */ | ||
581 | drm_radeon_clear_rect_t __user *depth_boxes; | ||
582 | } drm_radeon_clear_t; | ||
583 | |||
584 | typedef struct drm_radeon_vertex { | ||
585 | int prim; | ||
586 | int idx; /* Index of vertex buffer */ | ||
587 | int count; /* Number of vertices in buffer */ | ||
588 | int discard; /* Client finished with buffer? */ | ||
589 | } drm_radeon_vertex_t; | ||
590 | |||
591 | typedef struct drm_radeon_indices { | ||
592 | int prim; | ||
593 | int idx; | ||
594 | int start; | ||
595 | int end; | ||
596 | int discard; /* Client finished with buffer? */ | ||
597 | } drm_radeon_indices_t; | ||
598 | |||
599 | /* v1.2 - obsoletes drm_radeon_vertex and drm_radeon_indices | ||
600 | * - allows multiple primitives and state changes in a single ioctl | ||
601 | * - supports driver change to emit native primitives | ||
602 | */ | ||
603 | typedef struct drm_radeon_vertex2 { | ||
604 | int idx; /* Index of vertex buffer */ | ||
605 | int discard; /* Client finished with buffer? */ | ||
606 | int nr_states; | ||
607 | drm_radeon_state_t __user *state; | ||
608 | int nr_prims; | ||
609 | drm_radeon_prim_t __user *prim; | ||
610 | } drm_radeon_vertex2_t; | ||
611 | |||
612 | /* v1.3 - obsoletes drm_radeon_vertex2 | ||
613 | * - allows arbitarily large cliprect list | ||
614 | * - allows updating of tcl packet, vector and scalar state | ||
615 | * - allows memory-efficient description of state updates | ||
616 | * - allows state to be emitted without a primitive | ||
617 | * (for clears, ctx switches) | ||
618 | * - allows more than one dma buffer to be referenced per ioctl | ||
619 | * - supports tcl driver | ||
620 | * - may be extended in future versions with new cmd types, packets | ||
621 | */ | ||
622 | typedef struct drm_radeon_cmd_buffer { | ||
623 | int bufsz; | ||
624 | char __user *buf; | ||
625 | int nbox; | ||
626 | struct drm_clip_rect __user *boxes; | ||
627 | } drm_radeon_cmd_buffer_t; | ||
628 | |||
629 | typedef struct drm_radeon_tex_image { | ||
630 | unsigned int x, y; /* Blit coordinates */ | ||
631 | unsigned int width, height; | ||
632 | const void __user *data; | ||
633 | } drm_radeon_tex_image_t; | ||
634 | |||
635 | typedef struct drm_radeon_texture { | ||
636 | unsigned int offset; | ||
637 | int pitch; | ||
638 | int format; | ||
639 | int width; /* Texture image coordinates */ | ||
640 | int height; | ||
641 | drm_radeon_tex_image_t __user *image; | ||
642 | } drm_radeon_texture_t; | ||
643 | |||
644 | typedef struct drm_radeon_stipple { | ||
645 | unsigned int __user *mask; | ||
646 | } drm_radeon_stipple_t; | ||
647 | |||
648 | typedef struct drm_radeon_indirect { | ||
649 | int idx; | ||
650 | int start; | ||
651 | int end; | ||
652 | int discard; | ||
653 | } drm_radeon_indirect_t; | ||
654 | |||
655 | /* enum for card type parameters */ | ||
656 | #define RADEON_CARD_PCI 0 | ||
657 | #define RADEON_CARD_AGP 1 | ||
658 | #define RADEON_CARD_PCIE 2 | ||
659 | |||
660 | /* 1.3: An ioctl to get parameters that aren't available to the 3d | ||
661 | * client any other way. | ||
662 | */ | ||
663 | #define RADEON_PARAM_GART_BUFFER_OFFSET 1 /* card offset of 1st GART buffer */ | ||
664 | #define RADEON_PARAM_LAST_FRAME 2 | ||
665 | #define RADEON_PARAM_LAST_DISPATCH 3 | ||
666 | #define RADEON_PARAM_LAST_CLEAR 4 | ||
667 | /* Added with DRM version 1.6. */ | ||
668 | #define RADEON_PARAM_IRQ_NR 5 | ||
669 | #define RADEON_PARAM_GART_BASE 6 /* card offset of GART base */ | ||
670 | /* Added with DRM version 1.8. */ | ||
671 | #define RADEON_PARAM_REGISTER_HANDLE 7 /* for drmMap() */ | ||
672 | #define RADEON_PARAM_STATUS_HANDLE 8 | ||
673 | #define RADEON_PARAM_SAREA_HANDLE 9 | ||
674 | #define RADEON_PARAM_GART_TEX_HANDLE 10 | ||
675 | #define RADEON_PARAM_SCRATCH_OFFSET 11 | ||
676 | #define RADEON_PARAM_CARD_TYPE 12 | ||
677 | #define RADEON_PARAM_VBLANK_CRTC 13 /* VBLANK CRTC */ | ||
678 | #define RADEON_PARAM_FB_LOCATION 14 /* FB location */ | ||
679 | #define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */ | ||
680 | |||
681 | typedef struct drm_radeon_getparam { | ||
682 | int param; | ||
683 | void __user *value; | ||
684 | } drm_radeon_getparam_t; | ||
685 | |||
686 | /* 1.6: Set up a memory manager for regions of shared memory: | ||
687 | */ | ||
688 | #define RADEON_MEM_REGION_GART 1 | ||
689 | #define RADEON_MEM_REGION_FB 2 | ||
690 | |||
691 | typedef struct drm_radeon_mem_alloc { | ||
692 | int region; | ||
693 | int alignment; | ||
694 | int size; | ||
695 | int __user *region_offset; /* offset from start of fb or GART */ | ||
696 | } drm_radeon_mem_alloc_t; | ||
697 | |||
698 | typedef struct drm_radeon_mem_free { | ||
699 | int region; | ||
700 | int region_offset; | ||
701 | } drm_radeon_mem_free_t; | ||
702 | |||
703 | typedef struct drm_radeon_mem_init_heap { | ||
704 | int region; | ||
705 | int size; | ||
706 | int start; | ||
707 | } drm_radeon_mem_init_heap_t; | ||
708 | |||
709 | /* 1.6: Userspace can request & wait on irq's: | ||
710 | */ | ||
711 | typedef struct drm_radeon_irq_emit { | ||
712 | int __user *irq_seq; | ||
713 | } drm_radeon_irq_emit_t; | ||
714 | |||
715 | typedef struct drm_radeon_irq_wait { | ||
716 | int irq_seq; | ||
717 | } drm_radeon_irq_wait_t; | ||
718 | |||
719 | /* 1.10: Clients tell the DRM where they think the framebuffer is located in | ||
720 | * the card's address space, via a new generic ioctl to set parameters | ||
721 | */ | ||
722 | |||
723 | typedef struct drm_radeon_setparam { | ||
724 | unsigned int param; | ||
725 | int64_t value; | ||
726 | } drm_radeon_setparam_t; | ||
727 | |||
728 | #define RADEON_SETPARAM_FB_LOCATION 1 /* determined framebuffer location */ | ||
729 | #define RADEON_SETPARAM_SWITCH_TILING 2 /* enable/disable color tiling */ | ||
730 | #define RADEON_SETPARAM_PCIGART_LOCATION 3 /* PCI Gart Location */ | ||
731 | #define RADEON_SETPARAM_NEW_MEMMAP 4 /* Use new memory map */ | ||
732 | #define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 /* PCI GART Table Size */ | ||
733 | #define RADEON_SETPARAM_VBLANK_CRTC 6 /* VBLANK CRTC */ | ||
734 | /* 1.14: Clients can allocate/free a surface | ||
735 | */ | ||
736 | typedef struct drm_radeon_surface_alloc { | ||
737 | unsigned int address; | ||
738 | unsigned int size; | ||
739 | unsigned int flags; | ||
740 | } drm_radeon_surface_alloc_t; | ||
741 | |||
742 | typedef struct drm_radeon_surface_free { | ||
743 | unsigned int address; | ||
744 | } drm_radeon_surface_free_t; | ||
745 | |||
746 | #define DRM_RADEON_VBLANK_CRTC1 1 | ||
747 | #define DRM_RADEON_VBLANK_CRTC2 2 | ||
748 | |||
749 | #endif | ||
diff --git a/include/drm/savage_drm.h b/include/drm/savage_drm.h new file mode 100644 index 000000000000..8a576ef01821 --- /dev/null +++ b/include/drm/savage_drm.h | |||
@@ -0,0 +1,210 @@ | |||
1 | /* savage_drm.h -- Public header for the savage driver | ||
2 | * | ||
3 | * Copyright 2004 Felix Kuehling | ||
4 | * All Rights Reserved. | ||
5 | * | ||
6 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
7 | * copy of this software and associated documentation files (the "Software"), | ||
8 | * to deal in the Software without restriction, including without limitation | ||
9 | * the rights to use, copy, modify, merge, publish, distribute, sub license, | ||
10 | * and/or sell copies of the Software, and to permit persons to whom the | ||
11 | * Software is furnished to do so, subject to the following conditions: | ||
12 | * | ||
13 | * The above copyright notice and this permission notice (including the | ||
14 | * next paragraph) shall be included in all copies or substantial portions | ||
15 | * of the Software. | ||
16 | * | ||
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
18 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
19 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
20 | * NON-INFRINGEMENT. IN NO EVENT SHALL FELIX KUEHLING BE LIABLE FOR | ||
21 | * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF | ||
22 | * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
23 | * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
24 | */ | ||
25 | |||
26 | #ifndef __SAVAGE_DRM_H__ | ||
27 | #define __SAVAGE_DRM_H__ | ||
28 | |||
29 | #ifndef __SAVAGE_SAREA_DEFINES__ | ||
30 | #define __SAVAGE_SAREA_DEFINES__ | ||
31 | |||
32 | /* 2 heaps (1 for card, 1 for agp), each divided into upto 128 | ||
33 | * regions, subject to a minimum region size of (1<<16) == 64k. | ||
34 | * | ||
35 | * Clients may subdivide regions internally, but when sharing between | ||
36 | * clients, the region size is the minimum granularity. | ||
37 | */ | ||
38 | |||
39 | #define SAVAGE_CARD_HEAP 0 | ||
40 | #define SAVAGE_AGP_HEAP 1 | ||
41 | #define SAVAGE_NR_TEX_HEAPS 2 | ||
42 | #define SAVAGE_NR_TEX_REGIONS 16 | ||
43 | #define SAVAGE_LOG_MIN_TEX_REGION_SIZE 16 | ||
44 | |||
45 | #endif /* __SAVAGE_SAREA_DEFINES__ */ | ||
46 | |||
47 | typedef struct _drm_savage_sarea { | ||
48 | /* LRU lists for texture memory in agp space and on the card. | ||
49 | */ | ||
50 | struct drm_tex_region texList[SAVAGE_NR_TEX_HEAPS][SAVAGE_NR_TEX_REGIONS + | ||
51 | 1]; | ||
52 | unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; | ||
53 | |||
54 | /* Mechanism to validate card state. | ||
55 | */ | ||
56 | int ctxOwner; | ||
57 | } drm_savage_sarea_t, *drm_savage_sarea_ptr; | ||
58 | |||
59 | /* Savage-specific ioctls | ||
60 | */ | ||
61 | #define DRM_SAVAGE_BCI_INIT 0x00 | ||
62 | #define DRM_SAVAGE_BCI_CMDBUF 0x01 | ||
63 | #define DRM_SAVAGE_BCI_EVENT_EMIT 0x02 | ||
64 | #define DRM_SAVAGE_BCI_EVENT_WAIT 0x03 | ||
65 | |||
66 | #define DRM_IOCTL_SAVAGE_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_INIT, drm_savage_init_t) | ||
67 | #define DRM_IOCTL_SAVAGE_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_CMDBUF, drm_savage_cmdbuf_t) | ||
68 | #define DRM_IOCTL_SAVAGE_EVENT_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_EMIT, drm_savage_event_emit_t) | ||
69 | #define DRM_IOCTL_SAVAGE_EVENT_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_WAIT, drm_savage_event_wait_t) | ||
70 | |||
71 | #define SAVAGE_DMA_PCI 1 | ||
72 | #define SAVAGE_DMA_AGP 3 | ||
73 | typedef struct drm_savage_init { | ||
74 | enum { | ||
75 | SAVAGE_INIT_BCI = 1, | ||
76 | SAVAGE_CLEANUP_BCI = 2 | ||
77 | } func; | ||
78 | unsigned int sarea_priv_offset; | ||
79 | |||
80 | /* some parameters */ | ||
81 | unsigned int cob_size; | ||
82 | unsigned int bci_threshold_lo, bci_threshold_hi; | ||
83 | unsigned int dma_type; | ||
84 | |||
85 | /* frame buffer layout */ | ||
86 | unsigned int fb_bpp; | ||
87 | unsigned int front_offset, front_pitch; | ||
88 | unsigned int back_offset, back_pitch; | ||
89 | unsigned int depth_bpp; | ||
90 | unsigned int depth_offset, depth_pitch; | ||
91 | |||
92 | /* local textures */ | ||
93 | unsigned int texture_offset; | ||
94 | unsigned int texture_size; | ||
95 | |||
96 | /* physical locations of non-permanent maps */ | ||
97 | unsigned long status_offset; | ||
98 | unsigned long buffers_offset; | ||
99 | unsigned long agp_textures_offset; | ||
100 | unsigned long cmd_dma_offset; | ||
101 | } drm_savage_init_t; | ||
102 | |||
103 | typedef union drm_savage_cmd_header drm_savage_cmd_header_t; | ||
104 | typedef struct drm_savage_cmdbuf { | ||
105 | /* command buffer in client's address space */ | ||
106 | drm_savage_cmd_header_t __user *cmd_addr; | ||
107 | unsigned int size; /* size of the command buffer in 64bit units */ | ||
108 | |||
109 | unsigned int dma_idx; /* DMA buffer index to use */ | ||
110 | int discard; /* discard DMA buffer when done */ | ||
111 | /* vertex buffer in client's address space */ | ||
112 | unsigned int __user *vb_addr; | ||
113 | unsigned int vb_size; /* size of client vertex buffer in bytes */ | ||
114 | unsigned int vb_stride; /* stride of vertices in 32bit words */ | ||
115 | /* boxes in client's address space */ | ||
116 | struct drm_clip_rect __user *box_addr; | ||
117 | unsigned int nbox; /* number of clipping boxes */ | ||
118 | } drm_savage_cmdbuf_t; | ||
119 | |||
120 | #define SAVAGE_WAIT_2D 0x1 /* wait for 2D idle before updating event tag */ | ||
121 | #define SAVAGE_WAIT_3D 0x2 /* wait for 3D idle before updating event tag */ | ||
122 | #define SAVAGE_WAIT_IRQ 0x4 /* emit or wait for IRQ, not implemented yet */ | ||
123 | typedef struct drm_savage_event { | ||
124 | unsigned int count; | ||
125 | unsigned int flags; | ||
126 | } drm_savage_event_emit_t, drm_savage_event_wait_t; | ||
127 | |||
128 | /* Commands for the cmdbuf ioctl | ||
129 | */ | ||
130 | #define SAVAGE_CMD_STATE 0 /* a range of state registers */ | ||
131 | #define SAVAGE_CMD_DMA_PRIM 1 /* vertices from DMA buffer */ | ||
132 | #define SAVAGE_CMD_VB_PRIM 2 /* vertices from client vertex buffer */ | ||
133 | #define SAVAGE_CMD_DMA_IDX 3 /* indexed vertices from DMA buffer */ | ||
134 | #define SAVAGE_CMD_VB_IDX 4 /* indexed vertices client vertex buffer */ | ||
135 | #define SAVAGE_CMD_CLEAR 5 /* clear buffers */ | ||
136 | #define SAVAGE_CMD_SWAP 6 /* swap buffers */ | ||
137 | |||
138 | /* Primitive types | ||
139 | */ | ||
140 | #define SAVAGE_PRIM_TRILIST 0 /* triangle list */ | ||
141 | #define SAVAGE_PRIM_TRISTRIP 1 /* triangle strip */ | ||
142 | #define SAVAGE_PRIM_TRIFAN 2 /* triangle fan */ | ||
143 | #define SAVAGE_PRIM_TRILIST_201 3 /* reorder verts for correct flat | ||
144 | * shading on s3d */ | ||
145 | |||
146 | /* Skip flags (vertex format) | ||
147 | */ | ||
148 | #define SAVAGE_SKIP_Z 0x01 | ||
149 | #define SAVAGE_SKIP_W 0x02 | ||
150 | #define SAVAGE_SKIP_C0 0x04 | ||
151 | #define SAVAGE_SKIP_C1 0x08 | ||
152 | #define SAVAGE_SKIP_S0 0x10 | ||
153 | #define SAVAGE_SKIP_T0 0x20 | ||
154 | #define SAVAGE_SKIP_ST0 0x30 | ||
155 | #define SAVAGE_SKIP_S1 0x40 | ||
156 | #define SAVAGE_SKIP_T1 0x80 | ||
157 | #define SAVAGE_SKIP_ST1 0xc0 | ||
158 | #define SAVAGE_SKIP_ALL_S3D 0x3f | ||
159 | #define SAVAGE_SKIP_ALL_S4 0xff | ||
160 | |||
161 | /* Buffer names for clear command | ||
162 | */ | ||
163 | #define SAVAGE_FRONT 0x1 | ||
164 | #define SAVAGE_BACK 0x2 | ||
165 | #define SAVAGE_DEPTH 0x4 | ||
166 | |||
167 | /* 64-bit command header | ||
168 | */ | ||
169 | union drm_savage_cmd_header { | ||
170 | struct { | ||
171 | unsigned char cmd; /* command */ | ||
172 | unsigned char pad0; | ||
173 | unsigned short pad1; | ||
174 | unsigned short pad2; | ||
175 | unsigned short pad3; | ||
176 | } cmd; /* generic */ | ||
177 | struct { | ||
178 | unsigned char cmd; | ||
179 | unsigned char global; /* need idle engine? */ | ||
180 | unsigned short count; /* number of consecutive registers */ | ||
181 | unsigned short start; /* first register */ | ||
182 | unsigned short pad3; | ||
183 | } state; /* SAVAGE_CMD_STATE */ | ||
184 | struct { | ||
185 | unsigned char cmd; | ||
186 | unsigned char prim; /* primitive type */ | ||
187 | unsigned short skip; /* vertex format (skip flags) */ | ||
188 | unsigned short count; /* number of vertices */ | ||
189 | unsigned short start; /* first vertex in DMA/vertex buffer */ | ||
190 | } prim; /* SAVAGE_CMD_DMA_PRIM, SAVAGE_CMD_VB_PRIM */ | ||
191 | struct { | ||
192 | unsigned char cmd; | ||
193 | unsigned char prim; | ||
194 | unsigned short skip; | ||
195 | unsigned short count; /* number of indices that follow */ | ||
196 | unsigned short pad3; | ||
197 | } idx; /* SAVAGE_CMD_DMA_IDX, SAVAGE_CMD_VB_IDX */ | ||
198 | struct { | ||
199 | unsigned char cmd; | ||
200 | unsigned char pad0; | ||
201 | unsigned short pad1; | ||
202 | unsigned int flags; | ||
203 | } clear0; /* SAVAGE_CMD_CLEAR */ | ||
204 | struct { | ||
205 | unsigned int mask; | ||
206 | unsigned int value; | ||
207 | } clear1; /* SAVAGE_CMD_CLEAR data */ | ||
208 | }; | ||
209 | |||
210 | #endif | ||
diff --git a/include/drm/sis_drm.h b/include/drm/sis_drm.h new file mode 100644 index 000000000000..30f7b3827466 --- /dev/null +++ b/include/drm/sis_drm.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /* sis_drv.h -- Private header for sis driver -*- linux-c -*- */ | ||
2 | /* | ||
3 | * Copyright 2005 Eric Anholt | ||
4 | * All Rights Reserved. | ||
5 | * | ||
6 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
7 | * copy of this software and associated documentation files (the "Software"), | ||
8 | * to deal in the Software without restriction, including without limitation | ||
9 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
10 | * and/or sell copies of the Software, and to permit persons to whom the | ||
11 | * Software is furnished to do so, subject to the following conditions: | ||
12 | * | ||
13 | * The above copyright notice and this permission notice (including the next | ||
14 | * paragraph) shall be included in all copies or substantial portions of the | ||
15 | * Software. | ||
16 | * | ||
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
20 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
23 | * SOFTWARE. | ||
24 | * | ||
25 | */ | ||
26 | |||
27 | #ifndef __SIS_DRM_H__ | ||
28 | #define __SIS_DRM_H__ | ||
29 | |||
30 | /* SiS specific ioctls */ | ||
31 | #define NOT_USED_0_3 | ||
32 | #define DRM_SIS_FB_ALLOC 0x04 | ||
33 | #define DRM_SIS_FB_FREE 0x05 | ||
34 | #define NOT_USED_6_12 | ||
35 | #define DRM_SIS_AGP_INIT 0x13 | ||
36 | #define DRM_SIS_AGP_ALLOC 0x14 | ||
37 | #define DRM_SIS_AGP_FREE 0x15 | ||
38 | #define DRM_SIS_FB_INIT 0x16 | ||
39 | |||
40 | #define DRM_IOCTL_SIS_FB_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_FB_ALLOC, drm_sis_mem_t) | ||
41 | #define DRM_IOCTL_SIS_FB_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_FREE, drm_sis_mem_t) | ||
42 | #define DRM_IOCTL_SIS_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_INIT, drm_sis_agp_t) | ||
43 | #define DRM_IOCTL_SIS_AGP_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_ALLOC, drm_sis_mem_t) | ||
44 | #define DRM_IOCTL_SIS_AGP_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_AGP_FREE, drm_sis_mem_t) | ||
45 | #define DRM_IOCTL_SIS_FB_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_INIT, drm_sis_fb_t) | ||
46 | /* | ||
47 | #define DRM_IOCTL_SIS_FLIP DRM_IOW( 0x48, drm_sis_flip_t) | ||
48 | #define DRM_IOCTL_SIS_FLIP_INIT DRM_IO( 0x49) | ||
49 | #define DRM_IOCTL_SIS_FLIP_FINAL DRM_IO( 0x50) | ||
50 | */ | ||
51 | |||
52 | typedef struct { | ||
53 | int context; | ||
54 | unsigned int offset; | ||
55 | unsigned int size; | ||
56 | unsigned long free; | ||
57 | } drm_sis_mem_t; | ||
58 | |||
59 | typedef struct { | ||
60 | unsigned int offset, size; | ||
61 | } drm_sis_agp_t; | ||
62 | |||
63 | typedef struct { | ||
64 | unsigned int offset, size; | ||
65 | } drm_sis_fb_t; | ||
66 | |||
67 | #endif /* __SIS_DRM_H__ */ | ||
diff --git a/include/drm/via_drm.h b/include/drm/via_drm.h new file mode 100644 index 000000000000..a3b5c102b067 --- /dev/null +++ b/include/drm/via_drm.h | |||
@@ -0,0 +1,275 @@ | |||
1 | /* | ||
2 | * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. | ||
3 | * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. | ||
4 | * | ||
5 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
6 | * copy of this software and associated documentation files (the "Software"), | ||
7 | * to deal in the Software without restriction, including without limitation | ||
8 | * the rights to use, copy, modify, merge, publish, distribute, sub license, | ||
9 | * and/or sell copies of the Software, and to permit persons to whom the | ||
10 | * Software is furnished to do so, subject to the following conditions: | ||
11 | * | ||
12 | * The above copyright notice and this permission notice (including the | ||
13 | * next paragraph) shall be included in all copies or substantial portions | ||
14 | * 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 NON-INFRINGEMENT. IN NO EVENT SHALL | ||
19 | * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
20 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
21 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
22 | * DEALINGS IN THE SOFTWARE. | ||
23 | */ | ||
24 | #ifndef _VIA_DRM_H_ | ||
25 | #define _VIA_DRM_H_ | ||
26 | |||
27 | /* WARNING: These defines must be the same as what the Xserver uses. | ||
28 | * if you change them, you must change the defines in the Xserver. | ||
29 | */ | ||
30 | |||
31 | #ifndef _VIA_DEFINES_ | ||
32 | #define _VIA_DEFINES_ | ||
33 | |||
34 | #ifndef __KERNEL__ | ||
35 | #include "via_drmclient.h" | ||
36 | #endif | ||
37 | |||
38 | #define VIA_NR_SAREA_CLIPRECTS 8 | ||
39 | #define VIA_NR_XVMC_PORTS 10 | ||
40 | #define VIA_NR_XVMC_LOCKS 5 | ||
41 | #define VIA_MAX_CACHELINE_SIZE 64 | ||
42 | #define XVMCLOCKPTR(saPriv,lockNo) \ | ||
43 | ((volatile struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \ | ||
44 | (VIA_MAX_CACHELINE_SIZE - 1)) & \ | ||
45 | ~(VIA_MAX_CACHELINE_SIZE - 1)) + \ | ||
46 | VIA_MAX_CACHELINE_SIZE*(lockNo))) | ||
47 | |||
48 | /* Each region is a minimum of 64k, and there are at most 64 of them. | ||
49 | */ | ||
50 | #define VIA_NR_TEX_REGIONS 64 | ||
51 | #define VIA_LOG_MIN_TEX_REGION_SIZE 16 | ||
52 | #endif | ||
53 | |||
54 | #define VIA_UPLOAD_TEX0IMAGE 0x1 /* handled clientside */ | ||
55 | #define VIA_UPLOAD_TEX1IMAGE 0x2 /* handled clientside */ | ||
56 | #define VIA_UPLOAD_CTX 0x4 | ||
57 | #define VIA_UPLOAD_BUFFERS 0x8 | ||
58 | #define VIA_UPLOAD_TEX0 0x10 | ||
59 | #define VIA_UPLOAD_TEX1 0x20 | ||
60 | #define VIA_UPLOAD_CLIPRECTS 0x40 | ||
61 | #define VIA_UPLOAD_ALL 0xff | ||
62 | |||
63 | /* VIA specific ioctls */ | ||
64 | #define DRM_VIA_ALLOCMEM 0x00 | ||
65 | #define DRM_VIA_FREEMEM 0x01 | ||
66 | #define DRM_VIA_AGP_INIT 0x02 | ||
67 | #define DRM_VIA_FB_INIT 0x03 | ||
68 | #define DRM_VIA_MAP_INIT 0x04 | ||
69 | #define DRM_VIA_DEC_FUTEX 0x05 | ||
70 | #define NOT_USED | ||
71 | #define DRM_VIA_DMA_INIT 0x07 | ||
72 | #define DRM_VIA_CMDBUFFER 0x08 | ||
73 | #define DRM_VIA_FLUSH 0x09 | ||
74 | #define DRM_VIA_PCICMD 0x0a | ||
75 | #define DRM_VIA_CMDBUF_SIZE 0x0b | ||
76 | #define NOT_USED | ||
77 | #define DRM_VIA_WAIT_IRQ 0x0d | ||
78 | #define DRM_VIA_DMA_BLIT 0x0e | ||
79 | #define DRM_VIA_BLIT_SYNC 0x0f | ||
80 | |||
81 | #define DRM_IOCTL_VIA_ALLOCMEM DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_ALLOCMEM, drm_via_mem_t) | ||
82 | #define DRM_IOCTL_VIA_FREEMEM DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_FREEMEM, drm_via_mem_t) | ||
83 | #define DRM_IOCTL_VIA_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_AGP_INIT, drm_via_agp_t) | ||
84 | #define DRM_IOCTL_VIA_FB_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_FB_INIT, drm_via_fb_t) | ||
85 | #define DRM_IOCTL_VIA_MAP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_MAP_INIT, drm_via_init_t) | ||
86 | #define DRM_IOCTL_VIA_DEC_FUTEX DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_DEC_FUTEX, drm_via_futex_t) | ||
87 | #define DRM_IOCTL_VIA_DMA_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_DMA_INIT, drm_via_dma_init_t) | ||
88 | #define DRM_IOCTL_VIA_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_CMDBUFFER, drm_via_cmdbuffer_t) | ||
89 | #define DRM_IOCTL_VIA_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_VIA_FLUSH) | ||
90 | #define DRM_IOCTL_VIA_PCICMD DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_PCICMD, drm_via_cmdbuffer_t) | ||
91 | #define DRM_IOCTL_VIA_CMDBUF_SIZE DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_CMDBUF_SIZE, \ | ||
92 | drm_via_cmdbuf_size_t) | ||
93 | #define DRM_IOCTL_VIA_WAIT_IRQ DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_WAIT_IRQ, drm_via_irqwait_t) | ||
94 | #define DRM_IOCTL_VIA_DMA_BLIT DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_DMA_BLIT, drm_via_dmablit_t) | ||
95 | #define DRM_IOCTL_VIA_BLIT_SYNC DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_BLIT_SYNC, drm_via_blitsync_t) | ||
96 | |||
97 | /* Indices into buf.Setup where various bits of state are mirrored per | ||
98 | * context and per buffer. These can be fired at the card as a unit, | ||
99 | * or in a piecewise fashion as required. | ||
100 | */ | ||
101 | |||
102 | #define VIA_TEX_SETUP_SIZE 8 | ||
103 | |||
104 | /* Flags for clear ioctl | ||
105 | */ | ||
106 | #define VIA_FRONT 0x1 | ||
107 | #define VIA_BACK 0x2 | ||
108 | #define VIA_DEPTH 0x4 | ||
109 | #define VIA_STENCIL 0x8 | ||
110 | #define VIA_MEM_VIDEO 0 /* matches drm constant */ | ||
111 | #define VIA_MEM_AGP 1 /* matches drm constant */ | ||
112 | #define VIA_MEM_SYSTEM 2 | ||
113 | #define VIA_MEM_MIXED 3 | ||
114 | #define VIA_MEM_UNKNOWN 4 | ||
115 | |||
116 | typedef struct { | ||
117 | uint32_t offset; | ||
118 | uint32_t size; | ||
119 | } drm_via_agp_t; | ||
120 | |||
121 | typedef struct { | ||
122 | uint32_t offset; | ||
123 | uint32_t size; | ||
124 | } drm_via_fb_t; | ||
125 | |||
126 | typedef struct { | ||
127 | uint32_t context; | ||
128 | uint32_t type; | ||
129 | uint32_t size; | ||
130 | unsigned long index; | ||
131 | unsigned long offset; | ||
132 | } drm_via_mem_t; | ||
133 | |||
134 | typedef struct _drm_via_init { | ||
135 | enum { | ||
136 | VIA_INIT_MAP = 0x01, | ||
137 | VIA_CLEANUP_MAP = 0x02 | ||
138 | } func; | ||
139 | |||
140 | unsigned long sarea_priv_offset; | ||
141 | unsigned long fb_offset; | ||
142 | unsigned long mmio_offset; | ||
143 | unsigned long agpAddr; | ||
144 | } drm_via_init_t; | ||
145 | |||
146 | typedef struct _drm_via_futex { | ||
147 | enum { | ||
148 | VIA_FUTEX_WAIT = 0x00, | ||
149 | VIA_FUTEX_WAKE = 0X01 | ||
150 | } func; | ||
151 | uint32_t ms; | ||
152 | uint32_t lock; | ||
153 | uint32_t val; | ||
154 | } drm_via_futex_t; | ||
155 | |||
156 | typedef struct _drm_via_dma_init { | ||
157 | enum { | ||
158 | VIA_INIT_DMA = 0x01, | ||
159 | VIA_CLEANUP_DMA = 0x02, | ||
160 | VIA_DMA_INITIALIZED = 0x03 | ||
161 | } func; | ||
162 | |||
163 | unsigned long offset; | ||
164 | unsigned long size; | ||
165 | unsigned long reg_pause_addr; | ||
166 | } drm_via_dma_init_t; | ||
167 | |||
168 | typedef struct _drm_via_cmdbuffer { | ||
169 | char __user *buf; | ||
170 | unsigned long size; | ||
171 | } drm_via_cmdbuffer_t; | ||
172 | |||
173 | /* Warning: If you change the SAREA structure you must change the Xserver | ||
174 | * structure as well */ | ||
175 | |||
176 | typedef struct _drm_via_tex_region { | ||
177 | unsigned char next, prev; /* indices to form a circular LRU */ | ||
178 | unsigned char inUse; /* owned by a client, or free? */ | ||
179 | int age; /* tracked by clients to update local LRU's */ | ||
180 | } drm_via_tex_region_t; | ||
181 | |||
182 | typedef struct _drm_via_sarea { | ||
183 | unsigned int dirty; | ||
184 | unsigned int nbox; | ||
185 | struct drm_clip_rect boxes[VIA_NR_SAREA_CLIPRECTS]; | ||
186 | drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1]; | ||
187 | int texAge; /* last time texture was uploaded */ | ||
188 | int ctxOwner; /* last context to upload state */ | ||
189 | int vertexPrim; | ||
190 | |||
191 | /* | ||
192 | * Below is for XvMC. | ||
193 | * We want the lock integers alone on, and aligned to, a cache line. | ||
194 | * Therefore this somewhat strange construct. | ||
195 | */ | ||
196 | |||
197 | char XvMCLockArea[VIA_MAX_CACHELINE_SIZE * (VIA_NR_XVMC_LOCKS + 1)]; | ||
198 | |||
199 | unsigned int XvMCDisplaying[VIA_NR_XVMC_PORTS]; | ||
200 | unsigned int XvMCSubPicOn[VIA_NR_XVMC_PORTS]; | ||
201 | unsigned int XvMCCtxNoGrabbed; /* Last context to hold decoder */ | ||
202 | |||
203 | /* Used by the 3d driver only at this point, for pageflipping: | ||
204 | */ | ||
205 | unsigned int pfCurrentOffset; | ||
206 | } drm_via_sarea_t; | ||
207 | |||
208 | typedef struct _drm_via_cmdbuf_size { | ||
209 | enum { | ||
210 | VIA_CMDBUF_SPACE = 0x01, | ||
211 | VIA_CMDBUF_LAG = 0x02 | ||
212 | } func; | ||
213 | int wait; | ||
214 | uint32_t size; | ||
215 | } drm_via_cmdbuf_size_t; | ||
216 | |||
217 | typedef enum { | ||
218 | VIA_IRQ_ABSOLUTE = 0x0, | ||
219 | VIA_IRQ_RELATIVE = 0x1, | ||
220 | VIA_IRQ_SIGNAL = 0x10000000, | ||
221 | VIA_IRQ_FORCE_SEQUENCE = 0x20000000 | ||
222 | } via_irq_seq_type_t; | ||
223 | |||
224 | #define VIA_IRQ_FLAGS_MASK 0xF0000000 | ||
225 | |||
226 | enum drm_via_irqs { | ||
227 | drm_via_irq_hqv0 = 0, | ||
228 | drm_via_irq_hqv1, | ||
229 | drm_via_irq_dma0_dd, | ||
230 | drm_via_irq_dma0_td, | ||
231 | drm_via_irq_dma1_dd, | ||
232 | drm_via_irq_dma1_td, | ||
233 | drm_via_irq_num | ||
234 | }; | ||
235 | |||
236 | struct drm_via_wait_irq_request { | ||
237 | unsigned irq; | ||
238 | via_irq_seq_type_t type; | ||
239 | uint32_t sequence; | ||
240 | uint32_t signal; | ||
241 | }; | ||
242 | |||
243 | typedef union drm_via_irqwait { | ||
244 | struct drm_via_wait_irq_request request; | ||
245 | struct drm_wait_vblank_reply reply; | ||
246 | } drm_via_irqwait_t; | ||
247 | |||
248 | typedef struct drm_via_blitsync { | ||
249 | uint32_t sync_handle; | ||
250 | unsigned engine; | ||
251 | } drm_via_blitsync_t; | ||
252 | |||
253 | /* - * Below,"flags" is currently unused but will be used for possible future | ||
254 | * extensions like kernel space bounce buffers for bad alignments and | ||
255 | * blit engine busy-wait polling for better latency in the absence of | ||
256 | * interrupts. | ||
257 | */ | ||
258 | |||
259 | typedef struct drm_via_dmablit { | ||
260 | uint32_t num_lines; | ||
261 | uint32_t line_length; | ||
262 | |||
263 | uint32_t fb_addr; | ||
264 | uint32_t fb_stride; | ||
265 | |||
266 | unsigned char *mem_addr; | ||
267 | uint32_t mem_stride; | ||
268 | |||
269 | uint32_t flags; | ||
270 | int to_fb; | ||
271 | |||
272 | drm_via_blitsync_t sync; | ||
273 | } drm_via_dmablit_t; | ||
274 | |||
275 | #endif /* _VIA_DRM_H_ */ | ||
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 0601075d09a1..a17177639376 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
@@ -235,6 +235,9 @@ int acpi_check_region(resource_size_t start, resource_size_t n, | |||
235 | int acpi_check_mem_region(resource_size_t start, resource_size_t n, | 235 | int acpi_check_mem_region(resource_size_t start, resource_size_t n, |
236 | const char *name); | 236 | const char *name); |
237 | 237 | ||
238 | #ifdef CONFIG_PM_SLEEP | ||
239 | void __init acpi_old_suspend_ordering(void); | ||
240 | #endif /* CONFIG_PM_SLEEP */ | ||
238 | #else /* CONFIG_ACPI */ | 241 | #else /* CONFIG_ACPI */ |
239 | 242 | ||
240 | static inline int early_acpi_boot_init(void) | 243 | static inline int early_acpi_boot_init(void) |
diff --git a/include/linux/adb.h b/include/linux/adb.h index 64d8878e1444..63bca502fa55 100644 --- a/include/linux/adb.h +++ b/include/linux/adb.h | |||
@@ -84,7 +84,6 @@ enum adb_message { | |||
84 | ADB_MSG_PRE_RESET, /* Called before resetting the bus */ | 84 | ADB_MSG_PRE_RESET, /* Called before resetting the bus */ |
85 | ADB_MSG_POST_RESET /* Called after resetting the bus (re-do init & register) */ | 85 | ADB_MSG_POST_RESET /* Called after resetting the bus (re-do init & register) */ |
86 | }; | 86 | }; |
87 | extern struct adb_driver *adb_controller; | ||
88 | extern struct blocking_notifier_head adb_client_list; | 87 | extern struct blocking_notifier_head adb_client_list; |
89 | 88 | ||
90 | int adb_request(struct adb_request *req, void (*done)(struct adb_request *), | 89 | int adb_request(struct adb_request *req, void (*done)(struct adb_request *), |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 61c15eaf3fb3..0933a14e6414 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -64,6 +64,7 @@ struct bio_vec { | |||
64 | 64 | ||
65 | struct bio_set; | 65 | struct bio_set; |
66 | struct bio; | 66 | struct bio; |
67 | struct bio_integrity_payload; | ||
67 | typedef void (bio_end_io_t) (struct bio *, int); | 68 | typedef void (bio_end_io_t) (struct bio *, int); |
68 | typedef void (bio_destructor_t) (struct bio *); | 69 | typedef void (bio_destructor_t) (struct bio *); |
69 | 70 | ||
@@ -112,6 +113,9 @@ struct bio { | |||
112 | atomic_t bi_cnt; /* pin count */ | 113 | atomic_t bi_cnt; /* pin count */ |
113 | 114 | ||
114 | void *bi_private; | 115 | void *bi_private; |
116 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | ||
117 | struct bio_integrity_payload *bi_integrity; /* data integrity */ | ||
118 | #endif | ||
115 | 119 | ||
116 | bio_destructor_t *bi_destructor; /* destructor */ | 120 | bio_destructor_t *bi_destructor; /* destructor */ |
117 | }; | 121 | }; |
@@ -271,6 +275,29 @@ static inline void *bio_data(struct bio *bio) | |||
271 | */ | 275 | */ |
272 | #define bio_get(bio) atomic_inc(&(bio)->bi_cnt) | 276 | #define bio_get(bio) atomic_inc(&(bio)->bi_cnt) |
273 | 277 | ||
278 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | ||
279 | /* | ||
280 | * bio integrity payload | ||
281 | */ | ||
282 | struct bio_integrity_payload { | ||
283 | struct bio *bip_bio; /* parent bio */ | ||
284 | struct bio_vec *bip_vec; /* integrity data vector */ | ||
285 | |||
286 | sector_t bip_sector; /* virtual start sector */ | ||
287 | |||
288 | void *bip_buf; /* generated integrity data */ | ||
289 | bio_end_io_t *bip_end_io; /* saved I/O completion fn */ | ||
290 | |||
291 | int bip_error; /* saved I/O error */ | ||
292 | unsigned int bip_size; | ||
293 | |||
294 | unsigned short bip_pool; /* pool the ivec came from */ | ||
295 | unsigned short bip_vcnt; /* # of integrity bio_vecs */ | ||
296 | unsigned short bip_idx; /* current bip_vec index */ | ||
297 | |||
298 | struct work_struct bip_work; /* I/O completion */ | ||
299 | }; | ||
300 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ | ||
274 | 301 | ||
275 | /* | 302 | /* |
276 | * A bio_pair is used when we need to split a bio. | 303 | * A bio_pair is used when we need to split a bio. |
@@ -283,10 +310,14 @@ static inline void *bio_data(struct bio *bio) | |||
283 | * in bio2.bi_private | 310 | * in bio2.bi_private |
284 | */ | 311 | */ |
285 | struct bio_pair { | 312 | struct bio_pair { |
286 | struct bio bio1, bio2; | 313 | struct bio bio1, bio2; |
287 | struct bio_vec bv1, bv2; | 314 | struct bio_vec bv1, bv2; |
288 | atomic_t cnt; | 315 | #if defined(CONFIG_BLK_DEV_INTEGRITY) |
289 | int error; | 316 | struct bio_integrity_payload bip1, bip2; |
317 | struct bio_vec iv1, iv2; | ||
318 | #endif | ||
319 | atomic_t cnt; | ||
320 | int error; | ||
290 | }; | 321 | }; |
291 | extern struct bio_pair *bio_split(struct bio *bi, mempool_t *pool, | 322 | extern struct bio_pair *bio_split(struct bio *bi, mempool_t *pool, |
292 | int first_sectors); | 323 | int first_sectors); |
@@ -333,6 +364,39 @@ extern struct bio *bio_copy_user_iov(struct request_queue *, struct sg_iovec *, | |||
333 | int, int); | 364 | int, int); |
334 | extern int bio_uncopy_user(struct bio *); | 365 | extern int bio_uncopy_user(struct bio *); |
335 | void zero_fill_bio(struct bio *bio); | 366 | void zero_fill_bio(struct bio *bio); |
367 | extern struct bio_vec *bvec_alloc_bs(gfp_t, int, unsigned long *, struct bio_set *); | ||
368 | extern unsigned int bvec_nr_vecs(unsigned short idx); | ||
369 | |||
370 | /* | ||
371 | * bio_set is used to allow other portions of the IO system to | ||
372 | * allocate their own private memory pools for bio and iovec structures. | ||
373 | * These memory pools in turn all allocate from the bio_slab | ||
374 | * and the bvec_slabs[]. | ||
375 | */ | ||
376 | #define BIO_POOL_SIZE 2 | ||
377 | #define BIOVEC_NR_POOLS 6 | ||
378 | |||
379 | struct bio_set { | ||
380 | mempool_t *bio_pool; | ||
381 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | ||
382 | mempool_t *bio_integrity_pool; | ||
383 | #endif | ||
384 | mempool_t *bvec_pools[BIOVEC_NR_POOLS]; | ||
385 | }; | ||
386 | |||
387 | struct biovec_slab { | ||
388 | int nr_vecs; | ||
389 | char *name; | ||
390 | struct kmem_cache *slab; | ||
391 | }; | ||
392 | |||
393 | extern struct bio_set *fs_bio_set; | ||
394 | |||
395 | /* | ||
396 | * a small number of entries is fine, not going to be performance critical. | ||
397 | * basically we just need to survive | ||
398 | */ | ||
399 | #define BIO_SPLIT_ENTRIES 2 | ||
336 | 400 | ||
337 | #ifdef CONFIG_HIGHMEM | 401 | #ifdef CONFIG_HIGHMEM |
338 | /* | 402 | /* |
@@ -381,5 +445,63 @@ static inline char *__bio_kmap_irq(struct bio *bio, unsigned short idx, | |||
381 | __bio_kmap_irq((bio), (bio)->bi_idx, (flags)) | 445 | __bio_kmap_irq((bio), (bio)->bi_idx, (flags)) |
382 | #define bio_kunmap_irq(buf,flags) __bio_kunmap_irq(buf, flags) | 446 | #define bio_kunmap_irq(buf,flags) __bio_kunmap_irq(buf, flags) |
383 | 447 | ||
448 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | ||
449 | |||
450 | #define bip_vec_idx(bip, idx) (&(bip->bip_vec[(idx)])) | ||
451 | #define bip_vec(bip) bip_vec_idx(bip, 0) | ||
452 | |||
453 | #define __bip_for_each_vec(bvl, bip, i, start_idx) \ | ||
454 | for (bvl = bip_vec_idx((bip), (start_idx)), i = (start_idx); \ | ||
455 | i < (bip)->bip_vcnt; \ | ||
456 | bvl++, i++) | ||
457 | |||
458 | #define bip_for_each_vec(bvl, bip, i) \ | ||
459 | __bip_for_each_vec(bvl, bip, i, (bip)->bip_idx) | ||
460 | |||
461 | static inline int bio_integrity(struct bio *bio) | ||
462 | { | ||
463 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | ||
464 | return bio->bi_integrity != NULL; | ||
465 | #else | ||
466 | return 0; | ||
467 | #endif | ||
468 | } | ||
469 | |||
470 | extern struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *, gfp_t, unsigned int, struct bio_set *); | ||
471 | extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int); | ||
472 | extern void bio_integrity_free(struct bio *, struct bio_set *); | ||
473 | extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int); | ||
474 | extern int bio_integrity_enabled(struct bio *bio); | ||
475 | extern int bio_integrity_set_tag(struct bio *, void *, unsigned int); | ||
476 | extern int bio_integrity_get_tag(struct bio *, void *, unsigned int); | ||
477 | extern int bio_integrity_prep(struct bio *); | ||
478 | extern void bio_integrity_endio(struct bio *, int); | ||
479 | extern void bio_integrity_advance(struct bio *, unsigned int); | ||
480 | extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); | ||
481 | extern void bio_integrity_split(struct bio *, struct bio_pair *, int); | ||
482 | extern int bio_integrity_clone(struct bio *, struct bio *, struct bio_set *); | ||
483 | extern int bioset_integrity_create(struct bio_set *, int); | ||
484 | extern void bioset_integrity_free(struct bio_set *); | ||
485 | extern void bio_integrity_init_slab(void); | ||
486 | |||
487 | #else /* CONFIG_BLK_DEV_INTEGRITY */ | ||
488 | |||
489 | #define bio_integrity(a) (0) | ||
490 | #define bioset_integrity_create(a, b) (0) | ||
491 | #define bio_integrity_prep(a) (0) | ||
492 | #define bio_integrity_enabled(a) (0) | ||
493 | #define bio_integrity_clone(a, b, c) (0) | ||
494 | #define bioset_integrity_free(a) do { } while (0) | ||
495 | #define bio_integrity_free(a, b) do { } while (0) | ||
496 | #define bio_integrity_endio(a, b) do { } while (0) | ||
497 | #define bio_integrity_advance(a, b) do { } while (0) | ||
498 | #define bio_integrity_trim(a, b, c) do { } while (0) | ||
499 | #define bio_integrity_split(a, b, c) do { } while (0) | ||
500 | #define bio_integrity_set_tag(a, b, c) do { } while (0) | ||
501 | #define bio_integrity_get_tag(a, b, c) do { } while (0) | ||
502 | #define bio_integrity_init_slab(a) do { } while (0) | ||
503 | |||
504 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ | ||
505 | |||
384 | #endif /* CONFIG_BLOCK */ | 506 | #endif /* CONFIG_BLOCK */ |
385 | #endif /* __LINUX_BIO_H */ | 507 | #endif /* __LINUX_BIO_H */ |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index d2a1b71e93c3..88d68081a0f1 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -23,7 +23,6 @@ | |||
23 | struct scsi_ioctl_command; | 23 | struct scsi_ioctl_command; |
24 | 24 | ||
25 | struct request_queue; | 25 | struct request_queue; |
26 | typedef struct request_queue request_queue_t __deprecated; | ||
27 | struct elevator_queue; | 26 | struct elevator_queue; |
28 | typedef struct elevator_queue elevator_t; | 27 | typedef struct elevator_queue elevator_t; |
29 | struct request_pm_state; | 28 | struct request_pm_state; |
@@ -34,12 +33,6 @@ struct sg_io_hdr; | |||
34 | #define BLKDEV_MIN_RQ 4 | 33 | #define BLKDEV_MIN_RQ 4 |
35 | #define BLKDEV_MAX_RQ 128 /* Default maximum */ | 34 | #define BLKDEV_MAX_RQ 128 /* Default maximum */ |
36 | 35 | ||
37 | int put_io_context(struct io_context *ioc); | ||
38 | void exit_io_context(void); | ||
39 | struct io_context *get_io_context(gfp_t gfp_flags, int node); | ||
40 | struct io_context *alloc_io_context(gfp_t gfp_flags, int node); | ||
41 | void copy_io_context(struct io_context **pdst, struct io_context **psrc); | ||
42 | |||
43 | struct request; | 36 | struct request; |
44 | typedef void (rq_end_io_fn)(struct request *, int); | 37 | typedef void (rq_end_io_fn)(struct request *, int); |
45 | 38 | ||
@@ -113,6 +106,7 @@ enum rq_flag_bits { | |||
113 | __REQ_ALLOCED, /* request came from our alloc pool */ | 106 | __REQ_ALLOCED, /* request came from our alloc pool */ |
114 | __REQ_RW_META, /* metadata io request */ | 107 | __REQ_RW_META, /* metadata io request */ |
115 | __REQ_COPY_USER, /* contains copies of user pages */ | 108 | __REQ_COPY_USER, /* contains copies of user pages */ |
109 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ | ||
116 | __REQ_NR_BITS, /* stops here */ | 110 | __REQ_NR_BITS, /* stops here */ |
117 | }; | 111 | }; |
118 | 112 | ||
@@ -135,6 +129,7 @@ enum rq_flag_bits { | |||
135 | #define REQ_ALLOCED (1 << __REQ_ALLOCED) | 129 | #define REQ_ALLOCED (1 << __REQ_ALLOCED) |
136 | #define REQ_RW_META (1 << __REQ_RW_META) | 130 | #define REQ_RW_META (1 << __REQ_RW_META) |
137 | #define REQ_COPY_USER (1 << __REQ_COPY_USER) | 131 | #define REQ_COPY_USER (1 << __REQ_COPY_USER) |
132 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) | ||
138 | 133 | ||
139 | #define BLK_MAX_CDB 16 | 134 | #define BLK_MAX_CDB 16 |
140 | 135 | ||
@@ -259,7 +254,14 @@ typedef int (prep_rq_fn) (struct request_queue *, struct request *); | |||
259 | typedef void (unplug_fn) (struct request_queue *); | 254 | typedef void (unplug_fn) (struct request_queue *); |
260 | 255 | ||
261 | struct bio_vec; | 256 | struct bio_vec; |
262 | typedef int (merge_bvec_fn) (struct request_queue *, struct bio *, struct bio_vec *); | 257 | struct bvec_merge_data { |
258 | struct block_device *bi_bdev; | ||
259 | sector_t bi_sector; | ||
260 | unsigned bi_size; | ||
261 | unsigned long bi_rw; | ||
262 | }; | ||
263 | typedef int (merge_bvec_fn) (struct request_queue *, struct bvec_merge_data *, | ||
264 | struct bio_vec *); | ||
263 | typedef void (prepare_flush_fn) (struct request_queue *, struct request *); | 265 | typedef void (prepare_flush_fn) (struct request_queue *, struct request *); |
264 | typedef void (softirq_done_fn)(struct request *); | 266 | typedef void (softirq_done_fn)(struct request *); |
265 | typedef int (dma_drain_needed_fn)(struct request *); | 267 | typedef int (dma_drain_needed_fn)(struct request *); |
@@ -426,6 +428,32 @@ static inline void queue_flag_set_unlocked(unsigned int flag, | |||
426 | __set_bit(flag, &q->queue_flags); | 428 | __set_bit(flag, &q->queue_flags); |
427 | } | 429 | } |
428 | 430 | ||
431 | static inline int queue_flag_test_and_clear(unsigned int flag, | ||
432 | struct request_queue *q) | ||
433 | { | ||
434 | WARN_ON_ONCE(!queue_is_locked(q)); | ||
435 | |||
436 | if (test_bit(flag, &q->queue_flags)) { | ||
437 | __clear_bit(flag, &q->queue_flags); | ||
438 | return 1; | ||
439 | } | ||
440 | |||
441 | return 0; | ||
442 | } | ||
443 | |||
444 | static inline int queue_flag_test_and_set(unsigned int flag, | ||
445 | struct request_queue *q) | ||
446 | { | ||
447 | WARN_ON_ONCE(!queue_is_locked(q)); | ||
448 | |||
449 | if (!test_bit(flag, &q->queue_flags)) { | ||
450 | __set_bit(flag, &q->queue_flags); | ||
451 | return 0; | ||
452 | } | ||
453 | |||
454 | return 1; | ||
455 | } | ||
456 | |||
429 | static inline void queue_flag_set(unsigned int flag, struct request_queue *q) | 457 | static inline void queue_flag_set(unsigned int flag, struct request_queue *q) |
430 | { | 458 | { |
431 | WARN_ON_ONCE(!queue_is_locked(q)); | 459 | WARN_ON_ONCE(!queue_is_locked(q)); |
@@ -623,7 +651,6 @@ extern void generic_make_request(struct bio *bio); | |||
623 | extern void blk_rq_init(struct request_queue *q, struct request *rq); | 651 | extern void blk_rq_init(struct request_queue *q, struct request *rq); |
624 | extern void blk_put_request(struct request *); | 652 | extern void blk_put_request(struct request *); |
625 | extern void __blk_put_request(struct request_queue *, struct request *); | 653 | extern void __blk_put_request(struct request_queue *, struct request *); |
626 | extern void blk_end_sync_rq(struct request *rq, int error); | ||
627 | extern struct request *blk_get_request(struct request_queue *, int, gfp_t); | 654 | extern struct request *blk_get_request(struct request_queue *, int, gfp_t); |
628 | extern void blk_insert_request(struct request_queue *, struct request *, int, void *); | 655 | extern void blk_insert_request(struct request_queue *, struct request *, int, void *); |
629 | extern void blk_requeue_request(struct request_queue *, struct request *); | 656 | extern void blk_requeue_request(struct request_queue *, struct request *); |
@@ -676,7 +703,6 @@ extern int blk_execute_rq(struct request_queue *, struct gendisk *, | |||
676 | struct request *, int); | 703 | struct request *, int); |
677 | extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *, | 704 | extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *, |
678 | struct request *, int, rq_end_io_fn *); | 705 | struct request *, int, rq_end_io_fn *); |
679 | extern int blk_verify_command(unsigned char *, int); | ||
680 | extern void blk_unplug(struct request_queue *q); | 706 | extern void blk_unplug(struct request_queue *q); |
681 | 707 | ||
682 | static inline struct request_queue *bdev_get_queue(struct block_device *bdev) | 708 | static inline struct request_queue *bdev_get_queue(struct block_device *bdev) |
@@ -749,6 +775,7 @@ extern void blk_queue_max_segment_size(struct request_queue *, unsigned int); | |||
749 | extern void blk_queue_hardsect_size(struct request_queue *, unsigned short); | 775 | extern void blk_queue_hardsect_size(struct request_queue *, unsigned short); |
750 | extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); | 776 | extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); |
751 | extern void blk_queue_dma_pad(struct request_queue *, unsigned int); | 777 | extern void blk_queue_dma_pad(struct request_queue *, unsigned int); |
778 | extern void blk_queue_update_dma_pad(struct request_queue *, unsigned int); | ||
752 | extern int blk_queue_dma_drain(struct request_queue *q, | 779 | extern int blk_queue_dma_drain(struct request_queue *q, |
753 | dma_drain_needed_fn *dma_drain_needed, | 780 | dma_drain_needed_fn *dma_drain_needed, |
754 | void *buf, unsigned int size); | 781 | void *buf, unsigned int size); |
@@ -802,6 +829,15 @@ static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | |||
802 | 829 | ||
803 | extern int blkdev_issue_flush(struct block_device *, sector_t *); | 830 | extern int blkdev_issue_flush(struct block_device *, sector_t *); |
804 | 831 | ||
832 | /* | ||
833 | * command filter functions | ||
834 | */ | ||
835 | extern int blk_verify_command(struct file *file, unsigned char *cmd); | ||
836 | extern int blk_cmd_filter_verify_command(struct blk_scsi_cmd_filter *filter, | ||
837 | unsigned char *cmd, mode_t *f_mode); | ||
838 | extern int blk_register_filter(struct gendisk *disk); | ||
839 | extern void blk_unregister_filter(struct gendisk *disk); | ||
840 | |||
805 | #define MAX_PHYS_SEGMENTS 128 | 841 | #define MAX_PHYS_SEGMENTS 128 |
806 | #define MAX_HW_SEGMENTS 128 | 842 | #define MAX_HW_SEGMENTS 128 |
807 | #define SAFE_MAX_SECTORS 255 | 843 | #define SAFE_MAX_SECTORS 255 |
@@ -865,28 +901,119 @@ void kblockd_flush_work(struct work_struct *work); | |||
865 | #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \ | 901 | #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \ |
866 | MODULE_ALIAS("block-major-" __stringify(major) "-*") | 902 | MODULE_ALIAS("block-major-" __stringify(major) "-*") |
867 | 903 | ||
904 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | ||
868 | 905 | ||
869 | #else /* CONFIG_BLOCK */ | 906 | #define INTEGRITY_FLAG_READ 2 /* verify data integrity on read */ |
870 | /* | 907 | #define INTEGRITY_FLAG_WRITE 4 /* generate data integrity on write */ |
871 | * stubs for when the block layer is configured out | ||
872 | */ | ||
873 | #define buffer_heads_over_limit 0 | ||
874 | 908 | ||
875 | static inline long nr_blockdev_pages(void) | 909 | struct blk_integrity_exchg { |
910 | void *prot_buf; | ||
911 | void *data_buf; | ||
912 | sector_t sector; | ||
913 | unsigned int data_size; | ||
914 | unsigned short sector_size; | ||
915 | const char *disk_name; | ||
916 | }; | ||
917 | |||
918 | typedef void (integrity_gen_fn) (struct blk_integrity_exchg *); | ||
919 | typedef int (integrity_vrfy_fn) (struct blk_integrity_exchg *); | ||
920 | typedef void (integrity_set_tag_fn) (void *, void *, unsigned int); | ||
921 | typedef void (integrity_get_tag_fn) (void *, void *, unsigned int); | ||
922 | |||
923 | struct blk_integrity { | ||
924 | integrity_gen_fn *generate_fn; | ||
925 | integrity_vrfy_fn *verify_fn; | ||
926 | integrity_set_tag_fn *set_tag_fn; | ||
927 | integrity_get_tag_fn *get_tag_fn; | ||
928 | |||
929 | unsigned short flags; | ||
930 | unsigned short tuple_size; | ||
931 | unsigned short sector_size; | ||
932 | unsigned short tag_size; | ||
933 | |||
934 | const char *name; | ||
935 | |||
936 | struct kobject kobj; | ||
937 | }; | ||
938 | |||
939 | extern int blk_integrity_register(struct gendisk *, struct blk_integrity *); | ||
940 | extern void blk_integrity_unregister(struct gendisk *); | ||
941 | extern int blk_integrity_compare(struct block_device *, struct block_device *); | ||
942 | extern int blk_rq_map_integrity_sg(struct request *, struct scatterlist *); | ||
943 | extern int blk_rq_count_integrity_sg(struct request *); | ||
944 | |||
945 | static inline unsigned short blk_integrity_tuple_size(struct blk_integrity *bi) | ||
876 | { | 946 | { |
947 | if (bi) | ||
948 | return bi->tuple_size; | ||
949 | |||
877 | return 0; | 950 | return 0; |
878 | } | 951 | } |
879 | 952 | ||
880 | static inline void exit_io_context(void) | 953 | static inline struct blk_integrity *bdev_get_integrity(struct block_device *bdev) |
881 | { | 954 | { |
955 | return bdev->bd_disk->integrity; | ||
882 | } | 956 | } |
883 | 957 | ||
884 | struct io_context; | 958 | static inline unsigned int bdev_get_tag_size(struct block_device *bdev) |
885 | static inline int put_io_context(struct io_context *ioc) | ||
886 | { | 959 | { |
887 | return 1; | 960 | struct blk_integrity *bi = bdev_get_integrity(bdev); |
961 | |||
962 | if (bi) | ||
963 | return bi->tag_size; | ||
964 | |||
965 | return 0; | ||
966 | } | ||
967 | |||
968 | static inline int bdev_integrity_enabled(struct block_device *bdev, int rw) | ||
969 | { | ||
970 | struct blk_integrity *bi = bdev_get_integrity(bdev); | ||
971 | |||
972 | if (bi == NULL) | ||
973 | return 0; | ||
974 | |||
975 | if (rw == READ && bi->verify_fn != NULL && | ||
976 | (bi->flags & INTEGRITY_FLAG_READ)) | ||
977 | return 1; | ||
978 | |||
979 | if (rw == WRITE && bi->generate_fn != NULL && | ||
980 | (bi->flags & INTEGRITY_FLAG_WRITE)) | ||
981 | return 1; | ||
982 | |||
983 | return 0; | ||
888 | } | 984 | } |
889 | 985 | ||
986 | static inline int blk_integrity_rq(struct request *rq) | ||
987 | { | ||
988 | if (rq->bio == NULL) | ||
989 | return 0; | ||
990 | |||
991 | return bio_integrity(rq->bio); | ||
992 | } | ||
993 | |||
994 | #else /* CONFIG_BLK_DEV_INTEGRITY */ | ||
995 | |||
996 | #define blk_integrity_rq(rq) (0) | ||
997 | #define blk_rq_count_integrity_sg(a) (0) | ||
998 | #define blk_rq_map_integrity_sg(a, b) (0) | ||
999 | #define bdev_get_integrity(a) (0) | ||
1000 | #define bdev_get_tag_size(a) (0) | ||
1001 | #define blk_integrity_compare(a, b) (0) | ||
1002 | #define blk_integrity_register(a, b) (0) | ||
1003 | #define blk_integrity_unregister(a) do { } while (0); | ||
1004 | |||
1005 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ | ||
1006 | |||
1007 | #else /* CONFIG_BLOCK */ | ||
1008 | /* | ||
1009 | * stubs for when the block layer is configured out | ||
1010 | */ | ||
1011 | #define buffer_heads_over_limit 0 | ||
1012 | |||
1013 | static inline long nr_blockdev_pages(void) | ||
1014 | { | ||
1015 | return 0; | ||
1016 | } | ||
890 | 1017 | ||
891 | #endif /* CONFIG_BLOCK */ | 1018 | #endif /* CONFIG_BLOCK */ |
892 | 1019 | ||
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index e3ef903aae88..d084b8d227a5 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
@@ -129,6 +129,7 @@ struct blk_trace { | |||
129 | u32 dev; | 129 | u32 dev; |
130 | struct dentry *dir; | 130 | struct dentry *dir; |
131 | struct dentry *dropped_file; | 131 | struct dentry *dropped_file; |
132 | struct dentry *msg_file; | ||
132 | atomic_t dropped; | 133 | atomic_t dropped; |
133 | }; | 134 | }; |
134 | 135 | ||
diff --git a/include/linux/configfs.h b/include/linux/configfs.h index 3ae65b1bf90f..0488f937634a 100644 --- a/include/linux/configfs.h +++ b/include/linux/configfs.h | |||
@@ -165,8 +165,8 @@ struct configfs_item_operations { | |||
165 | }; | 165 | }; |
166 | 166 | ||
167 | struct configfs_group_operations { | 167 | struct configfs_group_operations { |
168 | struct config_item *(*make_item)(struct config_group *group, const char *name); | 168 | int (*make_item)(struct config_group *group, const char *name, struct config_item **new_item); |
169 | struct config_group *(*make_group)(struct config_group *group, const char *name); | 169 | int (*make_group)(struct config_group *group, const char *name, struct config_group **new_group); |
170 | int (*commit_item)(struct config_item *item); | 170 | int (*commit_item)(struct config_item *item); |
171 | void (*disconnect_notify)(struct config_group *group, struct config_item *item); | 171 | void (*disconnect_notify)(struct config_group *group, struct config_item *item); |
172 | void (*drop_item)(struct config_group *group, struct config_item *item); | 172 | void (*drop_item)(struct config_group *group, struct config_item *item); |
diff --git a/include/linux/crc-t10dif.h b/include/linux/crc-t10dif.h new file mode 100644 index 000000000000..a9c96d865ee7 --- /dev/null +++ b/include/linux/crc-t10dif.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _LINUX_CRC_T10DIF_H | ||
2 | #define _LINUX_CRC_T10DIF_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | |||
6 | __u16 crc_t10dif(unsigned char const *, size_t); | ||
7 | |||
8 | #endif | ||
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index 425824bd49f3..c43dc47fdf75 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
@@ -30,15 +30,17 @@ | |||
30 | */ | 30 | */ |
31 | #define CRYPTO_ALG_TYPE_MASK 0x0000000f | 31 | #define CRYPTO_ALG_TYPE_MASK 0x0000000f |
32 | #define CRYPTO_ALG_TYPE_CIPHER 0x00000001 | 32 | #define CRYPTO_ALG_TYPE_CIPHER 0x00000001 |
33 | #define CRYPTO_ALG_TYPE_DIGEST 0x00000002 | 33 | #define CRYPTO_ALG_TYPE_COMPRESS 0x00000002 |
34 | #define CRYPTO_ALG_TYPE_HASH 0x00000003 | 34 | #define CRYPTO_ALG_TYPE_AEAD 0x00000003 |
35 | #define CRYPTO_ALG_TYPE_BLKCIPHER 0x00000004 | 35 | #define CRYPTO_ALG_TYPE_BLKCIPHER 0x00000004 |
36 | #define CRYPTO_ALG_TYPE_ABLKCIPHER 0x00000005 | 36 | #define CRYPTO_ALG_TYPE_ABLKCIPHER 0x00000005 |
37 | #define CRYPTO_ALG_TYPE_GIVCIPHER 0x00000006 | 37 | #define CRYPTO_ALG_TYPE_GIVCIPHER 0x00000006 |
38 | #define CRYPTO_ALG_TYPE_COMPRESS 0x00000008 | 38 | #define CRYPTO_ALG_TYPE_DIGEST 0x00000008 |
39 | #define CRYPTO_ALG_TYPE_AEAD 0x00000009 | 39 | #define CRYPTO_ALG_TYPE_HASH 0x00000009 |
40 | #define CRYPTO_ALG_TYPE_AHASH 0x0000000a | ||
40 | 41 | ||
41 | #define CRYPTO_ALG_TYPE_HASH_MASK 0x0000000e | 42 | #define CRYPTO_ALG_TYPE_HASH_MASK 0x0000000e |
43 | #define CRYPTO_ALG_TYPE_AHASH_MASK 0x0000000c | ||
42 | #define CRYPTO_ALG_TYPE_BLKCIPHER_MASK 0x0000000c | 44 | #define CRYPTO_ALG_TYPE_BLKCIPHER_MASK 0x0000000c |
43 | 45 | ||
44 | #define CRYPTO_ALG_LARVAL 0x00000010 | 46 | #define CRYPTO_ALG_LARVAL 0x00000010 |
@@ -102,6 +104,7 @@ struct crypto_async_request; | |||
102 | struct crypto_aead; | 104 | struct crypto_aead; |
103 | struct crypto_blkcipher; | 105 | struct crypto_blkcipher; |
104 | struct crypto_hash; | 106 | struct crypto_hash; |
107 | struct crypto_ahash; | ||
105 | struct crypto_tfm; | 108 | struct crypto_tfm; |
106 | struct crypto_type; | 109 | struct crypto_type; |
107 | struct aead_givcrypt_request; | 110 | struct aead_givcrypt_request; |
@@ -131,6 +134,16 @@ struct ablkcipher_request { | |||
131 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | 134 | void *__ctx[] CRYPTO_MINALIGN_ATTR; |
132 | }; | 135 | }; |
133 | 136 | ||
137 | struct ahash_request { | ||
138 | struct crypto_async_request base; | ||
139 | |||
140 | unsigned int nbytes; | ||
141 | struct scatterlist *src; | ||
142 | u8 *result; | ||
143 | |||
144 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | ||
145 | }; | ||
146 | |||
134 | /** | 147 | /** |
135 | * struct aead_request - AEAD request | 148 | * struct aead_request - AEAD request |
136 | * @base: Common attributes for async crypto requests | 149 | * @base: Common attributes for async crypto requests |
@@ -195,6 +208,17 @@ struct ablkcipher_alg { | |||
195 | unsigned int ivsize; | 208 | unsigned int ivsize; |
196 | }; | 209 | }; |
197 | 210 | ||
211 | struct ahash_alg { | ||
212 | int (*init)(struct ahash_request *req); | ||
213 | int (*update)(struct ahash_request *req); | ||
214 | int (*final)(struct ahash_request *req); | ||
215 | int (*digest)(struct ahash_request *req); | ||
216 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
217 | unsigned int keylen); | ||
218 | |||
219 | unsigned int digestsize; | ||
220 | }; | ||
221 | |||
198 | struct aead_alg { | 222 | struct aead_alg { |
199 | int (*setkey)(struct crypto_aead *tfm, const u8 *key, | 223 | int (*setkey)(struct crypto_aead *tfm, const u8 *key, |
200 | unsigned int keylen); | 224 | unsigned int keylen); |
@@ -272,6 +296,7 @@ struct compress_alg { | |||
272 | #define cra_cipher cra_u.cipher | 296 | #define cra_cipher cra_u.cipher |
273 | #define cra_digest cra_u.digest | 297 | #define cra_digest cra_u.digest |
274 | #define cra_hash cra_u.hash | 298 | #define cra_hash cra_u.hash |
299 | #define cra_ahash cra_u.ahash | ||
275 | #define cra_compress cra_u.compress | 300 | #define cra_compress cra_u.compress |
276 | 301 | ||
277 | struct crypto_alg { | 302 | struct crypto_alg { |
@@ -298,6 +323,7 @@ struct crypto_alg { | |||
298 | struct cipher_alg cipher; | 323 | struct cipher_alg cipher; |
299 | struct digest_alg digest; | 324 | struct digest_alg digest; |
300 | struct hash_alg hash; | 325 | struct hash_alg hash; |
326 | struct ahash_alg ahash; | ||
301 | struct compress_alg compress; | 327 | struct compress_alg compress; |
302 | } cra_u; | 328 | } cra_u; |
303 | 329 | ||
@@ -383,6 +409,18 @@ struct hash_tfm { | |||
383 | unsigned int digestsize; | 409 | unsigned int digestsize; |
384 | }; | 410 | }; |
385 | 411 | ||
412 | struct ahash_tfm { | ||
413 | int (*init)(struct ahash_request *req); | ||
414 | int (*update)(struct ahash_request *req); | ||
415 | int (*final)(struct ahash_request *req); | ||
416 | int (*digest)(struct ahash_request *req); | ||
417 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
418 | unsigned int keylen); | ||
419 | |||
420 | unsigned int digestsize; | ||
421 | unsigned int reqsize; | ||
422 | }; | ||
423 | |||
386 | struct compress_tfm { | 424 | struct compress_tfm { |
387 | int (*cot_compress)(struct crypto_tfm *tfm, | 425 | int (*cot_compress)(struct crypto_tfm *tfm, |
388 | const u8 *src, unsigned int slen, | 426 | const u8 *src, unsigned int slen, |
@@ -397,6 +435,7 @@ struct compress_tfm { | |||
397 | #define crt_blkcipher crt_u.blkcipher | 435 | #define crt_blkcipher crt_u.blkcipher |
398 | #define crt_cipher crt_u.cipher | 436 | #define crt_cipher crt_u.cipher |
399 | #define crt_hash crt_u.hash | 437 | #define crt_hash crt_u.hash |
438 | #define crt_ahash crt_u.ahash | ||
400 | #define crt_compress crt_u.compress | 439 | #define crt_compress crt_u.compress |
401 | 440 | ||
402 | struct crypto_tfm { | 441 | struct crypto_tfm { |
@@ -409,6 +448,7 @@ struct crypto_tfm { | |||
409 | struct blkcipher_tfm blkcipher; | 448 | struct blkcipher_tfm blkcipher; |
410 | struct cipher_tfm cipher; | 449 | struct cipher_tfm cipher; |
411 | struct hash_tfm hash; | 450 | struct hash_tfm hash; |
451 | struct ahash_tfm ahash; | ||
412 | struct compress_tfm compress; | 452 | struct compress_tfm compress; |
413 | } crt_u; | 453 | } crt_u; |
414 | 454 | ||
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index d982eb89c77d..98202c672fde 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #include <asm/atomic.h> | 4 | #include <asm/atomic.h> |
5 | #include <linux/list.h> | 5 | #include <linux/list.h> |
6 | #include <linux/rculist.h> | ||
6 | #include <linux/spinlock.h> | 7 | #include <linux/spinlock.h> |
7 | #include <linux/cache.h> | 8 | #include <linux/cache.h> |
8 | #include <linux/rcupdate.h> | 9 | #include <linux/rcupdate.h> |
diff --git a/include/linux/device.h b/include/linux/device.h index 6a2d04c011bc..f71a78d123ae 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -68,6 +68,8 @@ struct bus_type { | |||
68 | int (*resume_early)(struct device *dev); | 68 | int (*resume_early)(struct device *dev); |
69 | int (*resume)(struct device *dev); | 69 | int (*resume)(struct device *dev); |
70 | 70 | ||
71 | struct pm_ext_ops *pm; | ||
72 | |||
71 | struct bus_type_private *p; | 73 | struct bus_type_private *p; |
72 | }; | 74 | }; |
73 | 75 | ||
@@ -131,6 +133,8 @@ struct device_driver { | |||
131 | int (*resume) (struct device *dev); | 133 | int (*resume) (struct device *dev); |
132 | struct attribute_group **groups; | 134 | struct attribute_group **groups; |
133 | 135 | ||
136 | struct pm_ops *pm; | ||
137 | |||
134 | struct driver_private *p; | 138 | struct driver_private *p; |
135 | }; | 139 | }; |
136 | 140 | ||
@@ -197,6 +201,8 @@ struct class { | |||
197 | 201 | ||
198 | int (*suspend)(struct device *dev, pm_message_t state); | 202 | int (*suspend)(struct device *dev, pm_message_t state); |
199 | int (*resume)(struct device *dev); | 203 | int (*resume)(struct device *dev); |
204 | |||
205 | struct pm_ops *pm; | ||
200 | }; | 206 | }; |
201 | 207 | ||
202 | extern int __must_check class_register(struct class *class); | 208 | extern int __must_check class_register(struct class *class); |
@@ -248,8 +254,11 @@ struct device_type { | |||
248 | struct attribute_group **groups; | 254 | struct attribute_group **groups; |
249 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); | 255 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); |
250 | void (*release)(struct device *dev); | 256 | void (*release)(struct device *dev); |
257 | |||
251 | int (*suspend)(struct device *dev, pm_message_t state); | 258 | int (*suspend)(struct device *dev, pm_message_t state); |
252 | int (*resume)(struct device *dev); | 259 | int (*resume)(struct device *dev); |
260 | |||
261 | struct pm_ops *pm; | ||
253 | }; | 262 | }; |
254 | 263 | ||
255 | /* interface for exporting device attributes */ | 264 | /* interface for exporting device attributes */ |
diff --git a/include/linux/elf.h b/include/linux/elf.h index ff9fbed90123..edc3dac3f02f 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h | |||
@@ -358,6 +358,7 @@ typedef struct elf64_shdr { | |||
358 | #define NT_PRXFPREG 0x46e62b7f /* copied from gdb5.1/include/elf/common.h */ | 358 | #define NT_PRXFPREG 0x46e62b7f /* copied from gdb5.1/include/elf/common.h */ |
359 | #define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */ | 359 | #define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */ |
360 | #define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */ | 360 | #define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */ |
361 | #define NT_PPC_VSX 0x102 /* PowerPC VSX registers */ | ||
361 | #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ | 362 | #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ |
362 | 363 | ||
363 | 364 | ||
diff --git a/include/linux/firmware-map.h b/include/linux/firmware-map.h new file mode 100644 index 000000000000..acbdbcc16051 --- /dev/null +++ b/include/linux/firmware-map.h | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * include/linux/firmware-map.h: | ||
3 | * Copyright (C) 2008 SUSE LINUX Products GmbH | ||
4 | * by Bernhard Walle <bwalle@suse.de> | ||
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 v2.0 as published by | ||
8 | * the Free Software Foundation | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | */ | ||
16 | #ifndef _LINUX_FIRMWARE_MAP_H | ||
17 | #define _LINUX_FIRMWARE_MAP_H | ||
18 | |||
19 | #include <linux/list.h> | ||
20 | #include <linux/kobject.h> | ||
21 | |||
22 | /* | ||
23 | * provide a dummy interface if CONFIG_FIRMWARE_MEMMAP is disabled | ||
24 | */ | ||
25 | #ifdef CONFIG_FIRMWARE_MEMMAP | ||
26 | |||
27 | /** | ||
28 | * Adds a firmware mapping entry. This function uses kmalloc() for memory | ||
29 | * allocation. Use firmware_map_add_early() if you want to use the bootmem | ||
30 | * allocator. | ||
31 | * | ||
32 | * That function must be called before late_initcall. | ||
33 | * | ||
34 | * @start: Start of the memory range. | ||
35 | * @end: End of the memory range (inclusive). | ||
36 | * @type: Type of the memory range. | ||
37 | * | ||
38 | * Returns 0 on success, or -ENOMEM if no memory could be allocated. | ||
39 | */ | ||
40 | int firmware_map_add(resource_size_t start, resource_size_t end, | ||
41 | const char *type); | ||
42 | |||
43 | /** | ||
44 | * Adds a firmware mapping entry. This function uses the bootmem allocator | ||
45 | * for memory allocation. Use firmware_map_add() if you want to use kmalloc(). | ||
46 | * | ||
47 | * That function must be called before late_initcall. | ||
48 | * | ||
49 | * @start: Start of the memory range. | ||
50 | * @end: End of the memory range (inclusive). | ||
51 | * @type: Type of the memory range. | ||
52 | * | ||
53 | * Returns 0 on success, or -ENOMEM if no memory could be allocated. | ||
54 | */ | ||
55 | int firmware_map_add_early(resource_size_t start, resource_size_t end, | ||
56 | const char *type); | ||
57 | |||
58 | #else /* CONFIG_FIRMWARE_MEMMAP */ | ||
59 | |||
60 | static inline int firmware_map_add(resource_size_t start, resource_size_t end, | ||
61 | const char *type) | ||
62 | { | ||
63 | return 0; | ||
64 | } | ||
65 | |||
66 | static inline int firmware_map_add_early(resource_size_t start, | ||
67 | resource_size_t end, const char *type) | ||
68 | { | ||
69 | return 0; | ||
70 | } | ||
71 | |||
72 | #endif /* CONFIG_FIRMWARE_MEMMAP */ | ||
73 | |||
74 | #endif /* _LINUX_FIRMWARE_MAP_H */ | ||
diff --git a/include/linux/firmware.h b/include/linux/firmware.h index 6c7eff2ebada..c8ecf5b2a207 100644 --- a/include/linux/firmware.h +++ b/include/linux/firmware.h | |||
@@ -1,18 +1,39 @@ | |||
1 | #ifndef _LINUX_FIRMWARE_H | 1 | #ifndef _LINUX_FIRMWARE_H |
2 | #define _LINUX_FIRMWARE_H | 2 | #define _LINUX_FIRMWARE_H |
3 | |||
3 | #include <linux/module.h> | 4 | #include <linux/module.h> |
4 | #include <linux/types.h> | 5 | #include <linux/types.h> |
6 | #include <linux/compiler.h> | ||
7 | |||
5 | #define FIRMWARE_NAME_MAX 30 | 8 | #define FIRMWARE_NAME_MAX 30 |
6 | #define FW_ACTION_NOHOTPLUG 0 | 9 | #define FW_ACTION_NOHOTPLUG 0 |
7 | #define FW_ACTION_HOTPLUG 1 | 10 | #define FW_ACTION_HOTPLUG 1 |
8 | 11 | ||
9 | struct firmware { | 12 | struct firmware { |
10 | size_t size; | 13 | size_t size; |
11 | u8 *data; | 14 | const u8 *data; |
12 | }; | 15 | }; |
13 | 16 | ||
14 | struct device; | 17 | struct device; |
15 | 18 | ||
19 | struct builtin_fw { | ||
20 | char *name; | ||
21 | void *data; | ||
22 | unsigned long size; | ||
23 | }; | ||
24 | |||
25 | /* We have to play tricks here much like stringify() to get the | ||
26 | __COUNTER__ macro to be expanded as we want it */ | ||
27 | #define __fw_concat1(x, y) x##y | ||
28 | #define __fw_concat(x, y) __fw_concat1(x, y) | ||
29 | |||
30 | #define DECLARE_BUILTIN_FIRMWARE(name, blob) \ | ||
31 | DECLARE_BUILTIN_FIRMWARE_SIZE(name, &(blob), sizeof(blob)) | ||
32 | |||
33 | #define DECLARE_BUILTIN_FIRMWARE_SIZE(name, blob, size) \ | ||
34 | static const struct builtin_fw __fw_concat(__builtin_fw,__COUNTER__) \ | ||
35 | __used __section(.builtin_fw) = { name, blob, size } | ||
36 | |||
16 | #if defined(CONFIG_FW_LOADER) || (defined(CONFIG_FW_LOADER_MODULE) && defined(MODULE)) | 37 | #if defined(CONFIG_FW_LOADER) || (defined(CONFIG_FW_LOADER_MODULE) && defined(MODULE)) |
17 | int request_firmware(const struct firmware **fw, const char *name, | 38 | int request_firmware(const struct firmware **fw, const char *name, |
18 | struct device *device); | 39 | struct device *device); |
diff --git a/include/linux/freezer.h b/include/linux/freezer.h index 08934995c7ab..deddeedf3257 100644 --- a/include/linux/freezer.h +++ b/include/linux/freezer.h | |||
@@ -128,6 +128,15 @@ static inline void set_freezable(void) | |||
128 | } | 128 | } |
129 | 129 | ||
130 | /* | 130 | /* |
131 | * Tell the freezer that the current task should be frozen by it and that it | ||
132 | * should send a fake signal to the task to freeze it. | ||
133 | */ | ||
134 | static inline void set_freezable_with_signal(void) | ||
135 | { | ||
136 | current->flags &= ~(PF_NOFREEZE | PF_FREEZER_NOSIG); | ||
137 | } | ||
138 | |||
139 | /* | ||
131 | * Freezer-friendly wrappers around wait_event_interruptible() and | 140 | * Freezer-friendly wrappers around wait_event_interruptible() and |
132 | * wait_event_interruptible_timeout(), originally defined in <linux/wait.h> | 141 | * wait_event_interruptible_timeout(), originally defined in <linux/wait.h> |
133 | */ | 142 | */ |
@@ -174,6 +183,7 @@ static inline void freezer_do_not_count(void) {} | |||
174 | static inline void freezer_count(void) {} | 183 | static inline void freezer_count(void) {} |
175 | static inline int freezer_should_skip(struct task_struct *p) { return 0; } | 184 | static inline int freezer_should_skip(struct task_struct *p) { return 0; } |
176 | static inline void set_freezable(void) {} | 185 | static inline void set_freezable(void) {} |
186 | static inline void set_freezable_with_signal(void) {} | ||
177 | 187 | ||
178 | #define wait_event_freezable(wq, condition) \ | 188 | #define wait_event_freezable(wq, condition) \ |
179 | wait_event_interruptible(wq, condition) | 189 | wait_event_interruptible(wq, condition) |
diff --git a/include/linux/fs.h b/include/linux/fs.h index d8e2762ed14d..c6455dadb21b 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1729,6 +1729,8 @@ static inline void invalidate_remote_inode(struct inode *inode) | |||
1729 | extern int invalidate_inode_pages2(struct address_space *mapping); | 1729 | extern int invalidate_inode_pages2(struct address_space *mapping); |
1730 | extern int invalidate_inode_pages2_range(struct address_space *mapping, | 1730 | extern int invalidate_inode_pages2_range(struct address_space *mapping, |
1731 | pgoff_t start, pgoff_t end); | 1731 | pgoff_t start, pgoff_t end); |
1732 | extern void generic_sync_sb_inodes(struct super_block *sb, | ||
1733 | struct writeback_control *wbc); | ||
1732 | extern int write_inode_now(struct inode *, int); | 1734 | extern int write_inode_now(struct inode *, int); |
1733 | extern int filemap_fdatawrite(struct address_space *); | 1735 | extern int filemap_fdatawrite(struct address_space *); |
1734 | extern int filemap_flush(struct address_space *); | 1736 | extern int filemap_flush(struct address_space *); |
@@ -1740,6 +1742,8 @@ extern int wait_on_page_writeback_range(struct address_space *mapping, | |||
1740 | pgoff_t start, pgoff_t end); | 1742 | pgoff_t start, pgoff_t end); |
1741 | extern int __filemap_fdatawrite_range(struct address_space *mapping, | 1743 | extern int __filemap_fdatawrite_range(struct address_space *mapping, |
1742 | loff_t start, loff_t end, int sync_mode); | 1744 | loff_t start, loff_t end, int sync_mode); |
1745 | extern int filemap_fdatawrite_range(struct address_space *mapping, | ||
1746 | loff_t start, loff_t end); | ||
1743 | 1747 | ||
1744 | extern long do_fsync(struct file *file, int datasync); | 1748 | extern long do_fsync(struct file *file, int datasync); |
1745 | extern void sync_supers(void); | 1749 | extern void sync_supers(void); |
@@ -1870,7 +1874,8 @@ extern void | |||
1870 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); | 1874 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); |
1871 | extern loff_t no_llseek(struct file *file, loff_t offset, int origin); | 1875 | extern loff_t no_llseek(struct file *file, loff_t offset, int origin); |
1872 | extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin); | 1876 | extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin); |
1873 | extern loff_t remote_llseek(struct file *file, loff_t offset, int origin); | 1877 | extern loff_t generic_file_llseek_unlocked(struct file *file, loff_t offset, |
1878 | int origin); | ||
1874 | extern int generic_file_open(struct inode * inode, struct file * filp); | 1879 | extern int generic_file_open(struct inode * inode, struct file * filp); |
1875 | extern int nonseekable_open(struct inode * inode, struct file * filp); | 1880 | extern int nonseekable_open(struct inode * inode, struct file * filp); |
1876 | 1881 | ||
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h new file mode 100644 index 000000000000..f368d041e02d --- /dev/null +++ b/include/linux/ftrace.h | |||
@@ -0,0 +1,144 @@ | |||
1 | #ifndef _LINUX_FTRACE_H | ||
2 | #define _LINUX_FTRACE_H | ||
3 | |||
4 | #ifdef CONFIG_FTRACE | ||
5 | |||
6 | #include <linux/linkage.h> | ||
7 | #include <linux/fs.h> | ||
8 | |||
9 | extern int ftrace_enabled; | ||
10 | extern int | ||
11 | ftrace_enable_sysctl(struct ctl_table *table, int write, | ||
12 | struct file *filp, void __user *buffer, size_t *lenp, | ||
13 | loff_t *ppos); | ||
14 | |||
15 | typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip); | ||
16 | |||
17 | struct ftrace_ops { | ||
18 | ftrace_func_t func; | ||
19 | struct ftrace_ops *next; | ||
20 | }; | ||
21 | |||
22 | /* | ||
23 | * The ftrace_ops must be a static and should also | ||
24 | * be read_mostly. These functions do modify read_mostly variables | ||
25 | * so use them sparely. Never free an ftrace_op or modify the | ||
26 | * next pointer after it has been registered. Even after unregistering | ||
27 | * it, the next pointer may still be used internally. | ||
28 | */ | ||
29 | int register_ftrace_function(struct ftrace_ops *ops); | ||
30 | int unregister_ftrace_function(struct ftrace_ops *ops); | ||
31 | void clear_ftrace_function(void); | ||
32 | |||
33 | extern void ftrace_stub(unsigned long a0, unsigned long a1); | ||
34 | |||
35 | #else /* !CONFIG_FTRACE */ | ||
36 | # define register_ftrace_function(ops) do { } while (0) | ||
37 | # define unregister_ftrace_function(ops) do { } while (0) | ||
38 | # define clear_ftrace_function(ops) do { } while (0) | ||
39 | #endif /* CONFIG_FTRACE */ | ||
40 | |||
41 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
42 | # define FTRACE_HASHBITS 10 | ||
43 | # define FTRACE_HASHSIZE (1<<FTRACE_HASHBITS) | ||
44 | |||
45 | enum { | ||
46 | FTRACE_FL_FREE = (1 << 0), | ||
47 | FTRACE_FL_FAILED = (1 << 1), | ||
48 | FTRACE_FL_FILTER = (1 << 2), | ||
49 | FTRACE_FL_ENABLED = (1 << 3), | ||
50 | FTRACE_FL_NOTRACE = (1 << 4), | ||
51 | FTRACE_FL_CONVERTED = (1 << 5), | ||
52 | FTRACE_FL_FROZEN = (1 << 6), | ||
53 | }; | ||
54 | |||
55 | struct dyn_ftrace { | ||
56 | struct hlist_node node; | ||
57 | unsigned long ip; /* address of mcount call-site */ | ||
58 | unsigned long flags; | ||
59 | }; | ||
60 | |||
61 | int ftrace_force_update(void); | ||
62 | void ftrace_set_filter(unsigned char *buf, int len, int reset); | ||
63 | |||
64 | /* defined in arch */ | ||
65 | extern int ftrace_ip_converted(unsigned long ip); | ||
66 | extern unsigned char *ftrace_nop_replace(void); | ||
67 | extern unsigned char *ftrace_call_replace(unsigned long ip, unsigned long addr); | ||
68 | extern int ftrace_dyn_arch_init(void *data); | ||
69 | extern int ftrace_mcount_set(unsigned long *data); | ||
70 | extern int ftrace_modify_code(unsigned long ip, unsigned char *old_code, | ||
71 | unsigned char *new_code); | ||
72 | extern int ftrace_update_ftrace_func(ftrace_func_t func); | ||
73 | extern void ftrace_caller(void); | ||
74 | extern void ftrace_call(void); | ||
75 | extern void mcount_call(void); | ||
76 | |||
77 | extern int skip_trace(unsigned long ip); | ||
78 | |||
79 | void ftrace_disable_daemon(void); | ||
80 | void ftrace_enable_daemon(void); | ||
81 | |||
82 | #else | ||
83 | # define skip_trace(ip) ({ 0; }) | ||
84 | # define ftrace_force_update() ({ 0; }) | ||
85 | # define ftrace_set_filter(buf, len, reset) do { } while (0) | ||
86 | # define ftrace_disable_daemon() do { } while (0) | ||
87 | # define ftrace_enable_daemon() do { } while (0) | ||
88 | #endif /* CONFIG_DYNAMIC_FTRACE */ | ||
89 | |||
90 | /* totally disable ftrace - can not re-enable after this */ | ||
91 | void ftrace_kill(void); | ||
92 | void ftrace_kill_atomic(void); | ||
93 | |||
94 | static inline void tracer_disable(void) | ||
95 | { | ||
96 | #ifdef CONFIG_FTRACE | ||
97 | ftrace_enabled = 0; | ||
98 | #endif | ||
99 | } | ||
100 | |||
101 | #ifdef CONFIG_FRAME_POINTER | ||
102 | /* TODO: need to fix this for ARM */ | ||
103 | # define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) | ||
104 | # define CALLER_ADDR1 ((unsigned long)__builtin_return_address(1)) | ||
105 | # define CALLER_ADDR2 ((unsigned long)__builtin_return_address(2)) | ||
106 | # define CALLER_ADDR3 ((unsigned long)__builtin_return_address(3)) | ||
107 | # define CALLER_ADDR4 ((unsigned long)__builtin_return_address(4)) | ||
108 | # define CALLER_ADDR5 ((unsigned long)__builtin_return_address(5)) | ||
109 | # define CALLER_ADDR6 ((unsigned long)__builtin_return_address(6)) | ||
110 | #else | ||
111 | # define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) | ||
112 | # define CALLER_ADDR1 0UL | ||
113 | # define CALLER_ADDR2 0UL | ||
114 | # define CALLER_ADDR3 0UL | ||
115 | # define CALLER_ADDR4 0UL | ||
116 | # define CALLER_ADDR5 0UL | ||
117 | # define CALLER_ADDR6 0UL | ||
118 | #endif | ||
119 | |||
120 | #ifdef CONFIG_IRQSOFF_TRACER | ||
121 | extern void time_hardirqs_on(unsigned long a0, unsigned long a1); | ||
122 | extern void time_hardirqs_off(unsigned long a0, unsigned long a1); | ||
123 | #else | ||
124 | # define time_hardirqs_on(a0, a1) do { } while (0) | ||
125 | # define time_hardirqs_off(a0, a1) do { } while (0) | ||
126 | #endif | ||
127 | |||
128 | #ifdef CONFIG_PREEMPT_TRACER | ||
129 | extern void trace_preempt_on(unsigned long a0, unsigned long a1); | ||
130 | extern void trace_preempt_off(unsigned long a0, unsigned long a1); | ||
131 | #else | ||
132 | # define trace_preempt_on(a0, a1) do { } while (0) | ||
133 | # define trace_preempt_off(a0, a1) do { } while (0) | ||
134 | #endif | ||
135 | |||
136 | #ifdef CONFIG_TRACING | ||
137 | extern void | ||
138 | ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3); | ||
139 | #else | ||
140 | static inline void | ||
141 | ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) { } | ||
142 | #endif | ||
143 | |||
144 | #endif /* _LINUX_FTRACE_H */ | ||
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index ae7aec3cabee..e8787417f65a 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
@@ -110,6 +110,14 @@ struct hd_struct { | |||
110 | #define GENHD_FL_SUPPRESS_PARTITION_INFO 32 | 110 | #define GENHD_FL_SUPPRESS_PARTITION_INFO 32 |
111 | #define GENHD_FL_FAIL 64 | 111 | #define GENHD_FL_FAIL 64 |
112 | 112 | ||
113 | #define BLK_SCSI_MAX_CMDS (256) | ||
114 | #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) | ||
115 | |||
116 | struct blk_scsi_cmd_filter { | ||
117 | unsigned long read_ok[BLK_SCSI_CMD_PER_LONG]; | ||
118 | unsigned long write_ok[BLK_SCSI_CMD_PER_LONG]; | ||
119 | struct kobject kobj; | ||
120 | }; | ||
113 | 121 | ||
114 | struct gendisk { | 122 | struct gendisk { |
115 | int major; /* major number of driver */ | 123 | int major; /* major number of driver */ |
@@ -120,6 +128,7 @@ struct gendisk { | |||
120 | struct hd_struct **part; /* [indexed by minor] */ | 128 | struct hd_struct **part; /* [indexed by minor] */ |
121 | struct block_device_operations *fops; | 129 | struct block_device_operations *fops; |
122 | struct request_queue *queue; | 130 | struct request_queue *queue; |
131 | struct blk_scsi_cmd_filter cmd_filter; | ||
123 | void *private_data; | 132 | void *private_data; |
124 | sector_t capacity; | 133 | sector_t capacity; |
125 | 134 | ||
@@ -141,6 +150,9 @@ struct gendisk { | |||
141 | struct disk_stats dkstats; | 150 | struct disk_stats dkstats; |
142 | #endif | 151 | #endif |
143 | struct work_struct async_notify; | 152 | struct work_struct async_notify; |
153 | #ifdef CONFIG_BLK_DEV_INTEGRITY | ||
154 | struct blk_integrity *integrity; | ||
155 | #endif | ||
144 | }; | 156 | }; |
145 | 157 | ||
146 | /* | 158 | /* |
diff --git a/include/linux/i2c-algo-pcf.h b/include/linux/i2c-algo-pcf.h index 77afbb60fd11..0177d280f733 100644 --- a/include/linux/i2c-algo-pcf.h +++ b/include/linux/i2c-algo-pcf.h | |||
@@ -33,9 +33,11 @@ struct i2c_algo_pcf_data { | |||
33 | int (*getclock) (void *data); | 33 | int (*getclock) (void *data); |
34 | void (*waitforpin) (void); | 34 | void (*waitforpin) (void); |
35 | 35 | ||
36 | /* local settings */ | 36 | /* Multi-master lost arbitration back-off delay (msecs) |
37 | int udelay; | 37 | * This should be set by the bus adapter or knowledgable client |
38 | int timeout; | 38 | * if bus is multi-mastered, else zero |
39 | */ | ||
40 | unsigned long lab_mdelay; | ||
39 | }; | 41 | }; |
40 | 42 | ||
41 | int i2c_pcf_add_bus(struct i2c_adapter *); | 43 | int i2c_pcf_add_bus(struct i2c_adapter *); |
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 580acc93903e..ef13b7c66df3 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
@@ -91,8 +91,6 @@ | |||
91 | #define I2C_DRIVERID_M52790 95 /* Mitsubishi M52790SP/FP AV switch */ | 91 | #define I2C_DRIVERID_M52790 95 /* Mitsubishi M52790SP/FP AV switch */ |
92 | #define I2C_DRIVERID_CS5345 96 /* cs5345 audio processor */ | 92 | #define I2C_DRIVERID_CS5345 96 /* cs5345 audio processor */ |
93 | 93 | ||
94 | #define I2C_DRIVERID_I2CDEV 900 | ||
95 | |||
96 | #define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */ | 94 | #define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */ |
97 | 95 | ||
98 | /* | 96 | /* |
@@ -111,7 +109,6 @@ | |||
111 | #define I2C_HW_B_RIVA 0x010010 /* Riva based graphics cards */ | 109 | #define I2C_HW_B_RIVA 0x010010 /* Riva based graphics cards */ |
112 | #define I2C_HW_B_IOC 0x010011 /* IOC bit-wiggling */ | 110 | #define I2C_HW_B_IOC 0x010011 /* IOC bit-wiggling */ |
113 | #define I2C_HW_B_IXP2000 0x010016 /* GPIO on IXP2000 systems */ | 111 | #define I2C_HW_B_IXP2000 0x010016 /* GPIO on IXP2000 systems */ |
114 | #define I2C_HW_B_S3VIA 0x010018 /* S3Via ProSavage adapter */ | ||
115 | #define I2C_HW_B_ZR36067 0x010019 /* Zoran-36057/36067 based boards */ | 112 | #define I2C_HW_B_ZR36067 0x010019 /* Zoran-36057/36067 based boards */ |
116 | #define I2C_HW_B_PCILYNX 0x01001a /* TI PCILynx I2C adapter */ | 113 | #define I2C_HW_B_PCILYNX 0x01001a /* TI PCILynx I2C adapter */ |
117 | #define I2C_HW_B_CX2388x 0x01001b /* connexant 2388x based tv cards */ | 114 | #define I2C_HW_B_CX2388x 0x01001b /* connexant 2388x based tv cards */ |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 8dc730132192..08be0d21864c 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
@@ -35,6 +35,8 @@ | |||
35 | #include <linux/sched.h> /* for completion */ | 35 | #include <linux/sched.h> /* for completion */ |
36 | #include <linux/mutex.h> | 36 | #include <linux/mutex.h> |
37 | 37 | ||
38 | extern struct bus_type i2c_bus_type; | ||
39 | |||
38 | /* --- General options ------------------------------------------------ */ | 40 | /* --- General options ------------------------------------------------ */ |
39 | 41 | ||
40 | struct i2c_msg; | 42 | struct i2c_msg; |
@@ -43,6 +45,7 @@ struct i2c_adapter; | |||
43 | struct i2c_client; | 45 | struct i2c_client; |
44 | struct i2c_driver; | 46 | struct i2c_driver; |
45 | union i2c_smbus_data; | 47 | union i2c_smbus_data; |
48 | struct i2c_board_info; | ||
46 | 49 | ||
47 | /* | 50 | /* |
48 | * The master routines are the ones normally used to transmit data to devices | 51 | * The master routines are the ones normally used to transmit data to devices |
@@ -69,9 +72,8 @@ extern s32 i2c_smbus_xfer (struct i2c_adapter * adapter, u16 addr, | |||
69 | union i2c_smbus_data * data); | 72 | union i2c_smbus_data * data); |
70 | 73 | ||
71 | /* Now follow the 'nice' access routines. These also document the calling | 74 | /* Now follow the 'nice' access routines. These also document the calling |
72 | conventions of smbus_access. */ | 75 | conventions of i2c_smbus_xfer. */ |
73 | 76 | ||
74 | extern s32 i2c_smbus_write_quick(struct i2c_client * client, u8 value); | ||
75 | extern s32 i2c_smbus_read_byte(struct i2c_client * client); | 77 | extern s32 i2c_smbus_read_byte(struct i2c_client * client); |
76 | extern s32 i2c_smbus_write_byte(struct i2c_client * client, u8 value); | 78 | extern s32 i2c_smbus_write_byte(struct i2c_client * client, u8 value); |
77 | extern s32 i2c_smbus_read_byte_data(struct i2c_client * client, u8 command); | 79 | extern s32 i2c_smbus_read_byte_data(struct i2c_client * client, u8 command); |
@@ -93,15 +95,33 @@ extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client, | |||
93 | u8 command, u8 length, | 95 | u8 command, u8 length, |
94 | const u8 *values); | 96 | const u8 *values); |
95 | 97 | ||
96 | /* | 98 | /** |
97 | * A driver is capable of handling one or more physical devices present on | 99 | * struct i2c_driver - represent an I2C device driver |
98 | * I2C adapters. This information is used to inform the driver of adapter | 100 | * @class: What kind of i2c device we instantiate (for detect) |
99 | * events. | 101 | * @detect: Callback for device detection |
102 | * @address_data: The I2C addresses to probe, ignore or force (for detect) | ||
103 | * @clients: List of detected clients we created (for i2c-core use only) | ||
100 | * | 104 | * |
101 | * The driver.owner field should be set to the module owner of this driver. | 105 | * The driver.owner field should be set to the module owner of this driver. |
102 | * The driver.name field should be set to the name of this driver. | 106 | * The driver.name field should be set to the name of this driver. |
107 | * | ||
108 | * For automatic device detection, both @detect and @address_data must | ||
109 | * be defined. @class should also be set, otherwise only devices forced | ||
110 | * with module parameters will be created. The detect function must | ||
111 | * fill at least the name field of the i2c_board_info structure it is | ||
112 | * handed upon successful detection, and possibly also the flags field. | ||
113 | * | ||
114 | * If @detect is missing, the driver will still work fine for enumerated | ||
115 | * devices. Detected devices simply won't be supported. This is expected | ||
116 | * for the many I2C/SMBus devices which can't be detected reliably, and | ||
117 | * the ones which can always be enumerated in practice. | ||
118 | * | ||
119 | * The i2c_client structure which is handed to the @detect callback is | ||
120 | * not a real i2c_client. It is initialized just enough so that you can | ||
121 | * call i2c_smbus_read_byte_data and friends on it. Don't do anything | ||
122 | * else with it. In particular, calling dev_dbg and friends on it is | ||
123 | * not allowed. | ||
103 | */ | 124 | */ |
104 | |||
105 | struct i2c_driver { | 125 | struct i2c_driver { |
106 | int id; | 126 | int id; |
107 | unsigned int class; | 127 | unsigned int class; |
@@ -141,6 +161,11 @@ struct i2c_driver { | |||
141 | 161 | ||
142 | struct device_driver driver; | 162 | struct device_driver driver; |
143 | const struct i2c_device_id *id_table; | 163 | const struct i2c_device_id *id_table; |
164 | |||
165 | /* Device detection callback for automatic device creation */ | ||
166 | int (*detect)(struct i2c_client *, int kind, struct i2c_board_info *); | ||
167 | const struct i2c_client_address_data *address_data; | ||
168 | struct list_head clients; | ||
144 | }; | 169 | }; |
145 | #define to_i2c_driver(d) container_of(d, struct i2c_driver, driver) | 170 | #define to_i2c_driver(d) container_of(d, struct i2c_driver, driver) |
146 | 171 | ||
@@ -156,6 +181,7 @@ struct i2c_driver { | |||
156 | * @dev: Driver model device node for the slave. | 181 | * @dev: Driver model device node for the slave. |
157 | * @irq: indicates the IRQ generated by this device (if any) | 182 | * @irq: indicates the IRQ generated by this device (if any) |
158 | * @list: list of active/busy clients (DEPRECATED) | 183 | * @list: list of active/busy clients (DEPRECATED) |
184 | * @detected: member of an i2c_driver.clients list | ||
159 | * @released: used to synchronize client releases & detaches and references | 185 | * @released: used to synchronize client releases & detaches and references |
160 | * | 186 | * |
161 | * An i2c_client identifies a single device (i.e. chip) connected to an | 187 | * An i2c_client identifies a single device (i.e. chip) connected to an |
@@ -173,6 +199,7 @@ struct i2c_client { | |||
173 | struct device dev; /* the device structure */ | 199 | struct device dev; /* the device structure */ |
174 | int irq; /* irq issued by device */ | 200 | int irq; /* irq issued by device */ |
175 | struct list_head list; /* DEPRECATED */ | 201 | struct list_head list; /* DEPRECATED */ |
202 | struct list_head detected; | ||
176 | struct completion released; | 203 | struct completion released; |
177 | }; | 204 | }; |
178 | #define to_i2c_client(d) container_of(d, struct i2c_client, dev) | 205 | #define to_i2c_client(d) container_of(d, struct i2c_client, dev) |
@@ -350,10 +377,11 @@ static inline void i2c_set_adapdata (struct i2c_adapter *dev, void *data) | |||
350 | #define I2C_CLASS_HWMON (1<<0) /* lm_sensors, ... */ | 377 | #define I2C_CLASS_HWMON (1<<0) /* lm_sensors, ... */ |
351 | #define I2C_CLASS_TV_ANALOG (1<<1) /* bttv + friends */ | 378 | #define I2C_CLASS_TV_ANALOG (1<<1) /* bttv + friends */ |
352 | #define I2C_CLASS_TV_DIGITAL (1<<2) /* dvb cards */ | 379 | #define I2C_CLASS_TV_DIGITAL (1<<2) /* dvb cards */ |
353 | #define I2C_CLASS_DDC (1<<3) /* i2c-matroxfb ? */ | 380 | #define I2C_CLASS_DDC (1<<3) /* DDC bus on graphics adapters */ |
354 | #define I2C_CLASS_CAM_ANALOG (1<<4) /* camera with analog CCD */ | 381 | #define I2C_CLASS_CAM_ANALOG (1<<4) /* camera with analog CCD */ |
355 | #define I2C_CLASS_CAM_DIGITAL (1<<5) /* most webcams */ | 382 | #define I2C_CLASS_CAM_DIGITAL (1<<5) /* most webcams */ |
356 | #define I2C_CLASS_SOUND (1<<6) /* sound devices */ | 383 | #define I2C_CLASS_SOUND (1<<6) /* sound devices */ |
384 | #define I2C_CLASS_SPD (1<<7) /* SPD EEPROMs and similar */ | ||
357 | #define I2C_CLASS_ALL (UINT_MAX) /* all of the above */ | 385 | #define I2C_CLASS_ALL (UINT_MAX) /* all of the above */ |
358 | 386 | ||
359 | /* i2c_client_address_data is the struct for holding default client | 387 | /* i2c_client_address_data is the struct for holding default client |
@@ -537,7 +565,7 @@ union i2c_smbus_data { | |||
537 | /* and one more for user-space compatibility */ | 565 | /* and one more for user-space compatibility */ |
538 | }; | 566 | }; |
539 | 567 | ||
540 | /* smbus_access read or write markers */ | 568 | /* i2c_smbus_xfer read or write markers */ |
541 | #define I2C_SMBUS_READ 1 | 569 | #define I2C_SMBUS_READ 1 |
542 | #define I2C_SMBUS_WRITE 0 | 570 | #define I2C_SMBUS_WRITE 0 |
543 | 571 | ||
diff --git a/include/linux/i2c/at24.h b/include/linux/i2c/at24.h new file mode 100644 index 000000000000..f6edd522a929 --- /dev/null +++ b/include/linux/i2c/at24.h | |||
@@ -0,0 +1,28 @@ | |||
1 | #ifndef _LINUX_AT24_H | ||
2 | #define _LINUX_AT24_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | |||
6 | /* | ||
7 | * As seen through Linux I2C, differences between the most common types of I2C | ||
8 | * memory include: | ||
9 | * - How much memory is available (usually specified in bit)? | ||
10 | * - What write page size does it support? | ||
11 | * - Special flags (16 bit addresses, read_only, world readable...)? | ||
12 | * | ||
13 | * If you set up a custom eeprom type, please double-check the parameters. | ||
14 | * Especially page_size needs extra care, as you risk data loss if your value | ||
15 | * is bigger than what the chip actually supports! | ||
16 | */ | ||
17 | |||
18 | struct at24_platform_data { | ||
19 | u32 byte_len; /* size (sum of all addr) */ | ||
20 | u16 page_size; /* for writes */ | ||
21 | u8 flags; | ||
22 | #define AT24_FLAG_ADDR16 0x80 /* address pointer is 16 bit */ | ||
23 | #define AT24_FLAG_READONLY 0x40 /* sysfs-entry will be read-only */ | ||
24 | #define AT24_FLAG_IRUGO 0x20 /* sysfs-entry will be world-readable */ | ||
25 | #define AT24_FLAG_TAKE8ADDR 0x10 /* take always 8 addresses (24c00) */ | ||
26 | }; | ||
27 | |||
28 | #endif /* _LINUX_AT24_H */ | ||
diff --git a/include/linux/ide.h b/include/linux/ide.h index eddb6daadf4a..4726126f5a59 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -139,6 +139,12 @@ struct ide_io_ports { | |||
139 | #define WAIT_MIN_SLEEP (2*HZ/100) /* 20msec - minimum sleep time */ | 139 | #define WAIT_MIN_SLEEP (2*HZ/100) /* 20msec - minimum sleep time */ |
140 | 140 | ||
141 | /* | 141 | /* |
142 | * Op codes for special requests to be handled by ide_special_rq(). | ||
143 | * Values should be in the range of 0x20 to 0x3f. | ||
144 | */ | ||
145 | #define REQ_DRIVE_RESET 0x20 | ||
146 | |||
147 | /* | ||
142 | * Check for an interrupt and acknowledge the interrupt status | 148 | * Check for an interrupt and acknowledge the interrupt status |
143 | */ | 149 | */ |
144 | struct hwif_s; | 150 | struct hwif_s; |
@@ -171,7 +177,7 @@ typedef struct hw_regs_s { | |||
171 | int irq; /* our irq number */ | 177 | int irq; /* our irq number */ |
172 | ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ | 178 | ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ |
173 | hwif_chipset_t chipset; | 179 | hwif_chipset_t chipset; |
174 | struct device *dev; | 180 | struct device *dev, *parent; |
175 | } hw_regs_t; | 181 | } hw_regs_t; |
176 | 182 | ||
177 | void ide_init_port_data(struct hwif_s *, unsigned int); | 183 | void ide_init_port_data(struct hwif_s *, unsigned int); |
@@ -364,7 +370,6 @@ typedef struct ide_drive_s { | |||
364 | u8 wcache; /* status of write cache */ | 370 | u8 wcache; /* status of write cache */ |
365 | u8 acoustic; /* acoustic management */ | 371 | u8 acoustic; /* acoustic management */ |
366 | u8 media; /* disk, cdrom, tape, floppy, ... */ | 372 | u8 media; /* disk, cdrom, tape, floppy, ... */ |
367 | u8 ctl; /* "normal" value for Control register */ | ||
368 | u8 ready_stat; /* min status value for drive ready */ | 373 | u8 ready_stat; /* min status value for drive ready */ |
369 | u8 mult_count; /* current multiple sector setting */ | 374 | u8 mult_count; /* current multiple sector setting */ |
370 | u8 mult_req; /* requested multiple sector setting */ | 375 | u8 mult_req; /* requested multiple sector setting */ |
@@ -406,8 +411,8 @@ typedef struct ide_drive_s { | |||
406 | struct ide_port_info; | 411 | struct ide_port_info; |
407 | 412 | ||
408 | struct ide_port_ops { | 413 | struct ide_port_ops { |
409 | /* host specific initialization of devices on a port */ | 414 | /* host specific initialization of a device */ |
410 | void (*port_init_devs)(struct hwif_s *); | 415 | void (*init_dev)(ide_drive_t *); |
411 | /* routine to program host for PIO mode */ | 416 | /* routine to program host for PIO mode */ |
412 | void (*set_pio_mode)(ide_drive_t *, const u8); | 417 | void (*set_pio_mode)(ide_drive_t *, const u8); |
413 | /* routine to program host for DMA mode */ | 418 | /* routine to program host for DMA mode */ |
@@ -493,7 +498,7 @@ typedef struct hwif_s { | |||
493 | void (*ide_dma_clear_irq)(ide_drive_t *drive); | 498 | void (*ide_dma_clear_irq)(ide_drive_t *drive); |
494 | 499 | ||
495 | void (*OUTB)(u8 addr, unsigned long port); | 500 | void (*OUTB)(u8 addr, unsigned long port); |
496 | void (*OUTBSYNC)(ide_drive_t *drive, u8 addr, unsigned long port); | 501 | void (*OUTBSYNC)(struct hwif_s *hwif, u8 addr, unsigned long port); |
497 | 502 | ||
498 | u8 (*INB)(unsigned long port); | 503 | u8 (*INB)(unsigned long port); |
499 | 504 | ||
@@ -532,7 +537,6 @@ typedef struct hwif_s { | |||
532 | unsigned serialized : 1; /* serialized all channel operation */ | 537 | unsigned serialized : 1; /* serialized all channel operation */ |
533 | unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ | 538 | unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ |
534 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ | 539 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ |
535 | unsigned mmio : 1; /* host uses MMIO */ | ||
536 | 540 | ||
537 | struct device gendev; | 541 | struct device gendev; |
538 | struct device *portdev; | 542 | struct device *portdev; |
@@ -567,8 +571,6 @@ typedef struct hwgroup_s { | |||
567 | unsigned int sleeping : 1; | 571 | unsigned int sleeping : 1; |
568 | /* BOOL: polling active & poll_timeout field valid */ | 572 | /* BOOL: polling active & poll_timeout field valid */ |
569 | unsigned int polling : 1; | 573 | unsigned int polling : 1; |
570 | /* BOOL: in a polling reset situation. Must not trigger another reset yet */ | ||
571 | unsigned int resetting : 1; | ||
572 | 574 | ||
573 | /* current drive */ | 575 | /* current drive */ |
574 | ide_drive_t *drive; | 576 | ide_drive_t *drive; |
@@ -604,12 +606,13 @@ enum { | |||
604 | PC_FLAG_SUPPRESS_ERROR = (1 << 1), | 606 | PC_FLAG_SUPPRESS_ERROR = (1 << 1), |
605 | PC_FLAG_WAIT_FOR_DSC = (1 << 2), | 607 | PC_FLAG_WAIT_FOR_DSC = (1 << 2), |
606 | PC_FLAG_DMA_OK = (1 << 3), | 608 | PC_FLAG_DMA_OK = (1 << 3), |
607 | PC_FLAG_DMA_RECOMMENDED = (1 << 4), | 609 | PC_FLAG_DMA_IN_PROGRESS = (1 << 4), |
608 | PC_FLAG_DMA_IN_PROGRESS = (1 << 5), | 610 | PC_FLAG_DMA_ERROR = (1 << 5), |
609 | PC_FLAG_DMA_ERROR = (1 << 6), | 611 | PC_FLAG_WRITING = (1 << 6), |
610 | PC_FLAG_WRITING = (1 << 7), | ||
611 | /* command timed out */ | 612 | /* command timed out */ |
612 | PC_FLAG_TIMEDOUT = (1 << 8), | 613 | PC_FLAG_TIMEDOUT = (1 << 7), |
614 | PC_FLAG_ZIP_DRIVE = (1 << 8), | ||
615 | PC_FLAG_DRQ_INTERRUPT = (1 << 9), | ||
613 | }; | 616 | }; |
614 | 617 | ||
615 | struct ide_atapi_pc { | 618 | struct ide_atapi_pc { |
@@ -642,8 +645,8 @@ struct ide_atapi_pc { | |||
642 | * to change/removal later. | 645 | * to change/removal later. |
643 | */ | 646 | */ |
644 | u8 pc_buf[256]; | 647 | u8 pc_buf[256]; |
645 | void (*idefloppy_callback) (ide_drive_t *); | 648 | |
646 | ide_startstop_t (*idetape_callback) (ide_drive_t *); | 649 | void (*callback)(ide_drive_t *); |
647 | 650 | ||
648 | /* idetape only */ | 651 | /* idetape only */ |
649 | struct idetape_bh *bh; | 652 | struct idetape_bh *bh; |
@@ -787,7 +790,6 @@ struct ide_driver_s { | |||
787 | ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t); | 790 | ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t); |
788 | int (*end_request)(ide_drive_t *, int, int); | 791 | int (*end_request)(ide_drive_t *, int, int); |
789 | ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8); | 792 | ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8); |
790 | ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); | ||
791 | struct device_driver gen_driver; | 793 | struct device_driver gen_driver; |
792 | int (*probe)(ide_drive_t *); | 794 | int (*probe)(ide_drive_t *); |
793 | void (*remove)(ide_drive_t *); | 795 | void (*remove)(ide_drive_t *); |
@@ -802,22 +804,6 @@ struct ide_driver_s { | |||
802 | 804 | ||
803 | int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long); | 805 | int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long); |
804 | 806 | ||
805 | /* | ||
806 | * ide_hwifs[] is the master data structure used to keep track | ||
807 | * of just about everything in ide.c. Whenever possible, routines | ||
808 | * should be using pointers to a drive (ide_drive_t *) or | ||
809 | * pointers to a hwif (ide_hwif_t *), rather than indexing this | ||
810 | * structure directly (the allocation/layout may change!). | ||
811 | * | ||
812 | */ | ||
813 | #ifndef _IDE_C | ||
814 | extern ide_hwif_t ide_hwifs[]; /* master data repository */ | ||
815 | #endif | ||
816 | extern int ide_noacpi; | ||
817 | extern int ide_acpigtf; | ||
818 | extern int ide_acpionboot; | ||
819 | extern int noautodma; | ||
820 | |||
821 | extern int ide_vlb_clk; | 807 | extern int ide_vlb_clk; |
822 | extern int ide_pci_clk; | 808 | extern int ide_pci_clk; |
823 | 809 | ||
@@ -845,10 +831,6 @@ ide_startstop_t __ide_error(ide_drive_t *, struct request *, u8, u8); | |||
845 | 831 | ||
846 | ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat); | 832 | ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat); |
847 | 833 | ||
848 | ide_startstop_t __ide_abort(ide_drive_t *, struct request *); | ||
849 | |||
850 | extern ide_startstop_t ide_abort(ide_drive_t *, const char *); | ||
851 | |||
852 | extern void ide_fix_driveid(struct hd_driveid *); | 834 | extern void ide_fix_driveid(struct hd_driveid *); |
853 | 835 | ||
854 | extern void ide_fixstring(u8 *, const int, const int); | 836 | extern void ide_fixstring(u8 *, const int, const int); |
@@ -857,25 +839,12 @@ int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); | |||
857 | 839 | ||
858 | extern ide_startstop_t ide_do_reset (ide_drive_t *); | 840 | extern ide_startstop_t ide_do_reset (ide_drive_t *); |
859 | 841 | ||
860 | extern void ide_init_drive_cmd (struct request *rq); | 842 | extern void ide_do_drive_cmd(ide_drive_t *, struct request *); |
861 | |||
862 | /* | ||
863 | * "action" parameter type for ide_do_drive_cmd() below. | ||
864 | */ | ||
865 | typedef enum { | ||
866 | ide_wait, /* insert rq at end of list, and wait for it */ | ||
867 | ide_preempt, /* insert rq in front of current request */ | ||
868 | ide_head_wait, /* insert rq in front of current request and wait for it */ | ||
869 | ide_end /* insert rq at end of list, but don't wait for it */ | ||
870 | } ide_action_t; | ||
871 | |||
872 | extern int ide_do_drive_cmd(ide_drive_t *, struct request *, ide_action_t); | ||
873 | 843 | ||
874 | extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); | 844 | extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); |
875 | 845 | ||
876 | enum { | 846 | enum { |
877 | IDE_TFLAG_LBA48 = (1 << 0), | 847 | IDE_TFLAG_LBA48 = (1 << 0), |
878 | IDE_TFLAG_NO_SELECT_MASK = (1 << 1), | ||
879 | IDE_TFLAG_FLAGGED = (1 << 2), | 848 | IDE_TFLAG_FLAGGED = (1 << 2), |
880 | IDE_TFLAG_OUT_DATA = (1 << 3), | 849 | IDE_TFLAG_OUT_DATA = (1 << 3), |
881 | IDE_TFLAG_OUT_HOB_FEATURE = (1 << 4), | 850 | IDE_TFLAG_OUT_HOB_FEATURE = (1 << 4), |
@@ -980,11 +949,23 @@ typedef struct ide_task_s { | |||
980 | void ide_tf_dump(const char *, struct ide_taskfile *); | 949 | void ide_tf_dump(const char *, struct ide_taskfile *); |
981 | 950 | ||
982 | extern void SELECT_DRIVE(ide_drive_t *); | 951 | extern void SELECT_DRIVE(ide_drive_t *); |
952 | void SELECT_MASK(ide_drive_t *, int); | ||
983 | 953 | ||
984 | extern int drive_is_ready(ide_drive_t *); | 954 | extern int drive_is_ready(ide_drive_t *); |
985 | 955 | ||
986 | void ide_pktcmd_tf_load(ide_drive_t *, u32, u16, u8); | 956 | void ide_pktcmd_tf_load(ide_drive_t *, u32, u16, u8); |
987 | 957 | ||
958 | ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc, | ||
959 | ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry, | ||
960 | void (*update_buffers)(ide_drive_t *, struct ide_atapi_pc *), | ||
961 | void (*retry_pc)(ide_drive_t *), void (*dsc_handle)(ide_drive_t *), | ||
962 | void (*io_buffers)(ide_drive_t *, struct ide_atapi_pc *, unsigned int, | ||
963 | int)); | ||
964 | ide_startstop_t ide_transfer_pc(ide_drive_t *, struct ide_atapi_pc *, | ||
965 | ide_handler_t *, unsigned int, ide_expiry_t *); | ||
966 | ide_startstop_t ide_issue_pc(ide_drive_t *, struct ide_atapi_pc *, | ||
967 | ide_handler_t *, unsigned int, ide_expiry_t *); | ||
968 | |||
988 | ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *); | 969 | ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *); |
989 | 970 | ||
990 | void task_end_request(ide_drive_t *, struct request *, u8); | 971 | void task_end_request(ide_drive_t *, struct request *, u8); |
@@ -996,8 +977,6 @@ int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long); | |||
996 | int ide_cmd_ioctl(ide_drive_t *, unsigned int, unsigned long); | 977 | int ide_cmd_ioctl(ide_drive_t *, unsigned int, unsigned long); |
997 | int ide_task_ioctl(ide_drive_t *, unsigned int, unsigned long); | 978 | int ide_task_ioctl(ide_drive_t *, unsigned int, unsigned long); |
998 | 979 | ||
999 | extern int system_bus_clock(void); | ||
1000 | |||
1001 | extern int ide_driveid_update(ide_drive_t *); | 980 | extern int ide_driveid_update(ide_drive_t *); |
1002 | extern int ide_config_drive_speed(ide_drive_t *, u8); | 981 | extern int ide_config_drive_speed(ide_drive_t *, u8); |
1003 | extern u8 eighty_ninty_three (ide_drive_t *); | 982 | extern u8 eighty_ninty_three (ide_drive_t *); |
@@ -1279,16 +1258,43 @@ static inline int ide_dev_is_sata(struct hd_driveid *id) | |||
1279 | u64 ide_get_lba_addr(struct ide_taskfile *, int); | 1258 | u64 ide_get_lba_addr(struct ide_taskfile *, int); |
1280 | u8 ide_dump_status(ide_drive_t *, const char *, u8); | 1259 | u8 ide_dump_status(ide_drive_t *, const char *, u8); |
1281 | 1260 | ||
1282 | typedef struct ide_pio_timings_s { | 1261 | struct ide_timing { |
1283 | int setup_time; /* Address setup (ns) minimum */ | 1262 | u8 mode; |
1284 | int active_time; /* Active pulse (ns) minimum */ | 1263 | u8 setup; /* t1 */ |
1285 | int cycle_time; /* Cycle time (ns) minimum = */ | 1264 | u16 act8b; /* t2 for 8-bit io */ |
1286 | /* active + recovery (+ setup for some chips) */ | 1265 | u16 rec8b; /* t2i for 8-bit io */ |
1287 | } ide_pio_timings_t; | 1266 | u16 cyc8b; /* t0 for 8-bit io */ |
1267 | u16 active; /* t2 or tD */ | ||
1268 | u16 recover; /* t2i or tK */ | ||
1269 | u16 cycle; /* t0 */ | ||
1270 | u16 udma; /* t2CYCTYP/2 */ | ||
1271 | }; | ||
1272 | |||
1273 | enum { | ||
1274 | IDE_TIMING_SETUP = (1 << 0), | ||
1275 | IDE_TIMING_ACT8B = (1 << 1), | ||
1276 | IDE_TIMING_REC8B = (1 << 2), | ||
1277 | IDE_TIMING_CYC8B = (1 << 3), | ||
1278 | IDE_TIMING_8BIT = IDE_TIMING_ACT8B | IDE_TIMING_REC8B | | ||
1279 | IDE_TIMING_CYC8B, | ||
1280 | IDE_TIMING_ACTIVE = (1 << 4), | ||
1281 | IDE_TIMING_RECOVER = (1 << 5), | ||
1282 | IDE_TIMING_CYCLE = (1 << 6), | ||
1283 | IDE_TIMING_UDMA = (1 << 7), | ||
1284 | IDE_TIMING_ALL = IDE_TIMING_SETUP | IDE_TIMING_8BIT | | ||
1285 | IDE_TIMING_ACTIVE | IDE_TIMING_RECOVER | | ||
1286 | IDE_TIMING_CYCLE | IDE_TIMING_UDMA, | ||
1287 | }; | ||
1288 | |||
1289 | struct ide_timing *ide_timing_find_mode(u8); | ||
1290 | u16 ide_pio_cycle_time(ide_drive_t *, u8); | ||
1291 | void ide_timing_merge(struct ide_timing *, struct ide_timing *, | ||
1292 | struct ide_timing *, unsigned int); | ||
1293 | int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int); | ||
1294 | |||
1295 | int ide_scan_pio_blacklist(char *); | ||
1288 | 1296 | ||
1289 | unsigned int ide_pio_cycle_time(ide_drive_t *, u8); | ||
1290 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); | 1297 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); |
1291 | extern const ide_pio_timings_t ide_pio_timings[6]; | ||
1292 | 1298 | ||
1293 | int ide_set_pio_mode(ide_drive_t *, u8); | 1299 | int ide_set_pio_mode(ide_drive_t *, u8); |
1294 | int ide_set_dma_mode(ide_drive_t *, u8); | 1300 | int ide_set_dma_mode(ide_drive_t *, u8); |
@@ -1349,7 +1355,8 @@ static inline void ide_set_irq(ide_drive_t *drive, int on) | |||
1349 | { | 1355 | { |
1350 | ide_hwif_t *hwif = drive->hwif; | 1356 | ide_hwif_t *hwif = drive->hwif; |
1351 | 1357 | ||
1352 | hwif->OUTB(drive->ctl | (on ? 0 : 2), hwif->io_ports.ctl_addr); | 1358 | hwif->OUTBSYNC(hwif, ATA_DEVCTL_OBS | (on ? 0 : 2), |
1359 | hwif->io_ports.ctl_addr); | ||
1353 | } | 1360 | } |
1354 | 1361 | ||
1355 | static inline u8 ide_read_status(ide_drive_t *drive) | 1362 | static inline u8 ide_read_status(ide_drive_t *drive) |
diff --git a/include/linux/ihex.h b/include/linux/ihex.h new file mode 100644 index 000000000000..2baace2788a7 --- /dev/null +++ b/include/linux/ihex.h | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * Compact binary representation of ihex records. Some devices need their | ||
3 | * firmware loaded in strange orders rather than a single big blob, but | ||
4 | * actually parsing ihex-as-text within the kernel seems silly. Thus,... | ||
5 | */ | ||
6 | |||
7 | #ifndef __LINUX_IHEX_H__ | ||
8 | #define __LINUX_IHEX_H__ | ||
9 | |||
10 | #include <linux/types.h> | ||
11 | #include <linux/firmware.h> | ||
12 | #include <linux/device.h> | ||
13 | |||
14 | /* Intel HEX files actually limit the length to 256 bytes, but we have | ||
15 | drivers which would benefit from using separate records which are | ||
16 | longer than that, so we extend to 16 bits of length */ | ||
17 | struct ihex_binrec { | ||
18 | __be32 addr; | ||
19 | __be16 len; | ||
20 | uint8_t data[0]; | ||
21 | } __attribute__((aligned(4))); | ||
22 | |||
23 | /* Find the next record, taking into account the 4-byte alignment */ | ||
24 | static inline const struct ihex_binrec * | ||
25 | ihex_next_binrec(const struct ihex_binrec *rec) | ||
26 | { | ||
27 | int next = ((be16_to_cpu(rec->len) + 5) & ~3) - 2; | ||
28 | rec = (void *)&rec->data[next]; | ||
29 | |||
30 | return be16_to_cpu(rec->len) ? rec : NULL; | ||
31 | } | ||
32 | |||
33 | /* Check that ihex_next_binrec() won't take us off the end of the image... */ | ||
34 | static inline int ihex_validate_fw(const struct firmware *fw) | ||
35 | { | ||
36 | const struct ihex_binrec *rec; | ||
37 | size_t ofs = 0; | ||
38 | |||
39 | while (ofs <= fw->size - sizeof(*rec)) { | ||
40 | rec = (void *)&fw->data[ofs]; | ||
41 | |||
42 | /* Zero length marks end of records */ | ||
43 | if (!be16_to_cpu(rec->len)) | ||
44 | return 0; | ||
45 | |||
46 | /* Point to next record... */ | ||
47 | ofs += (sizeof(*rec) + be16_to_cpu(rec->len) + 3) & ~3; | ||
48 | } | ||
49 | return -EINVAL; | ||
50 | } | ||
51 | |||
52 | /* Request firmware and validate it so that we can trust we won't | ||
53 | * run off the end while reading records... */ | ||
54 | static inline int request_ihex_firmware(const struct firmware **fw, | ||
55 | const char *fw_name, | ||
56 | struct device *dev) | ||
57 | { | ||
58 | const struct firmware *lfw; | ||
59 | int ret; | ||
60 | |||
61 | ret = request_firmware(&lfw, fw_name, dev); | ||
62 | if (ret) | ||
63 | return ret; | ||
64 | ret = ihex_validate_fw(lfw); | ||
65 | if (ret) { | ||
66 | dev_err(dev, "Firmware \"%s\" not valid IHEX records\n", | ||
67 | fw_name); | ||
68 | release_firmware(lfw); | ||
69 | return ret; | ||
70 | } | ||
71 | *fw = lfw; | ||
72 | return 0; | ||
73 | } | ||
74 | #endif /* __LINUX_IHEX_H__ */ | ||
diff --git a/include/linux/inet.h b/include/linux/inet.h index 1354080cf8cf..4cca05c9678e 100644 --- a/include/linux/inet.h +++ b/include/linux/inet.h | |||
@@ -44,6 +44,13 @@ | |||
44 | 44 | ||
45 | #include <linux/types.h> | 45 | #include <linux/types.h> |
46 | 46 | ||
47 | /* | ||
48 | * These mimic similar macros defined in user-space for inet_ntop(3). | ||
49 | * See /usr/include/netinet/in.h . | ||
50 | */ | ||
51 | #define INET_ADDRSTRLEN (16) | ||
52 | #define INET6_ADDRSTRLEN (48) | ||
53 | |||
47 | extern __be32 in_aton(const char *str); | 54 | extern __be32 in_aton(const char *str); |
48 | extern int in4_pton(const char *src, int srclen, u8 *dst, int delim, const char **end); | 55 | extern int in4_pton(const char *src, int srclen, u8 *dst, int delim, const char **end); |
49 | extern int in6_pton(const char *src, int srclen, u8 *dst, int delim, const char **end); | 56 | extern int in6_pton(const char *src, int srclen, u8 *dst, int delim, const char **end); |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 9927a88674a3..93c45acf249a 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -140,8 +140,8 @@ extern struct group_info init_groups; | |||
140 | .nr_cpus_allowed = NR_CPUS, \ | 140 | .nr_cpus_allowed = NR_CPUS, \ |
141 | }, \ | 141 | }, \ |
142 | .tasks = LIST_HEAD_INIT(tsk.tasks), \ | 142 | .tasks = LIST_HEAD_INIT(tsk.tasks), \ |
143 | .ptrace_children= LIST_HEAD_INIT(tsk.ptrace_children), \ | 143 | .ptraced = LIST_HEAD_INIT(tsk.ptraced), \ |
144 | .ptrace_list = LIST_HEAD_INIT(tsk.ptrace_list), \ | 144 | .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \ |
145 | .real_parent = &tsk, \ | 145 | .real_parent = &tsk, \ |
146 | .parent = &tsk, \ | 146 | .parent = &tsk, \ |
147 | .children = LIST_HEAD_INIT(tsk.children), \ | 147 | .children = LIST_HEAD_INIT(tsk.children), \ |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index f1fc7470d26c..62aa4f895abe 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -104,8 +104,11 @@ extern void enable_irq(unsigned int irq); | |||
104 | 104 | ||
105 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_HARDIRQS) | 105 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_HARDIRQS) |
106 | 106 | ||
107 | extern cpumask_t irq_default_affinity; | ||
108 | |||
107 | extern int irq_set_affinity(unsigned int irq, cpumask_t cpumask); | 109 | extern int irq_set_affinity(unsigned int irq, cpumask_t cpumask); |
108 | extern int irq_can_set_affinity(unsigned int irq); | 110 | extern int irq_can_set_affinity(unsigned int irq); |
111 | extern int irq_select_affinity(unsigned int irq); | ||
109 | 112 | ||
110 | #else /* CONFIG_SMP */ | 113 | #else /* CONFIG_SMP */ |
111 | 114 | ||
@@ -119,6 +122,8 @@ static inline int irq_can_set_affinity(unsigned int irq) | |||
119 | return 0; | 122 | return 0; |
120 | } | 123 | } |
121 | 124 | ||
125 | static inline int irq_select_affinity(unsigned int irq) { return 0; } | ||
126 | |||
122 | #endif /* CONFIG_SMP && CONFIG_GENERIC_HARDIRQS */ | 127 | #endif /* CONFIG_SMP && CONFIG_GENERIC_HARDIRQS */ |
123 | 128 | ||
124 | #ifdef CONFIG_GENERIC_HARDIRQS | 129 | #ifdef CONFIG_GENERIC_HARDIRQS |
@@ -285,12 +290,11 @@ enum | |||
285 | struct softirq_action | 290 | struct softirq_action |
286 | { | 291 | { |
287 | void (*action)(struct softirq_action *); | 292 | void (*action)(struct softirq_action *); |
288 | void *data; | ||
289 | }; | 293 | }; |
290 | 294 | ||
291 | asmlinkage void do_softirq(void); | 295 | asmlinkage void do_softirq(void); |
292 | asmlinkage void __do_softirq(void); | 296 | asmlinkage void __do_softirq(void); |
293 | extern void open_softirq(int nr, void (*action)(struct softirq_action*), void *data); | 297 | extern void open_softirq(int nr, void (*action)(struct softirq_action *)); |
294 | extern void softirq_init(void); | 298 | extern void softirq_init(void); |
295 | #define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0) | 299 | #define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0) |
296 | extern void raise_softirq_irqoff(unsigned int nr); | 300 | extern void raise_softirq_irqoff(unsigned int nr); |
diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h index 2b7a1187cb29..08b987bccf89 100644 --- a/include/linux/iocontext.h +++ b/include/linux/iocontext.h | |||
@@ -99,4 +99,22 @@ static inline struct io_context *ioc_task_link(struct io_context *ioc) | |||
99 | return NULL; | 99 | return NULL; |
100 | } | 100 | } |
101 | 101 | ||
102 | #ifdef CONFIG_BLOCK | ||
103 | int put_io_context(struct io_context *ioc); | ||
104 | void exit_io_context(void); | ||
105 | struct io_context *get_io_context(gfp_t gfp_flags, int node); | ||
106 | struct io_context *alloc_io_context(gfp_t gfp_flags, int node); | ||
107 | void copy_io_context(struct io_context **pdst, struct io_context **psrc); | ||
108 | #else | ||
109 | static inline void exit_io_context(void) | ||
110 | { | ||
111 | } | ||
112 | |||
113 | struct io_context; | ||
114 | static inline int put_io_context(struct io_context *ioc) | ||
115 | { | ||
116 | return 1; | ||
117 | } | ||
118 | #endif | ||
119 | |||
102 | #endif | 120 | #endif |
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index c6801bffe76d..2cd07cc29687 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
@@ -59,6 +59,7 @@ struct resource_list { | |||
59 | #define IORESOURCE_IRQ_HIGHLEVEL (1<<2) | 59 | #define IORESOURCE_IRQ_HIGHLEVEL (1<<2) |
60 | #define IORESOURCE_IRQ_LOWLEVEL (1<<3) | 60 | #define IORESOURCE_IRQ_LOWLEVEL (1<<3) |
61 | #define IORESOURCE_IRQ_SHAREABLE (1<<4) | 61 | #define IORESOURCE_IRQ_SHAREABLE (1<<4) |
62 | #define IORESOURCE_IRQ_OPTIONAL (1<<5) | ||
62 | 63 | ||
63 | /* PnP DMA specific bits (IORESOURCE_BITS) */ | 64 | /* PnP DMA specific bits (IORESOURCE_BITS) */ |
64 | #define IORESOURCE_DMA_TYPE_MASK (3<<0) | 65 | #define IORESOURCE_DMA_TYPE_MASK (3<<0) |
@@ -88,6 +89,10 @@ struct resource_list { | |||
88 | #define IORESOURCE_MEM_SHADOWABLE (1<<5) /* dup: IORESOURCE_SHADOWABLE */ | 89 | #define IORESOURCE_MEM_SHADOWABLE (1<<5) /* dup: IORESOURCE_SHADOWABLE */ |
89 | #define IORESOURCE_MEM_EXPANSIONROM (1<<6) | 90 | #define IORESOURCE_MEM_EXPANSIONROM (1<<6) |
90 | 91 | ||
92 | /* PnP I/O specific bits (IORESOURCE_BITS) */ | ||
93 | #define IORESOURCE_IO_16BIT_ADDR (1<<0) | ||
94 | #define IORESOURCE_IO_FIXED (1<<1) | ||
95 | |||
91 | /* PCI ROM control bits (IORESOURCE_BITS) */ | 96 | /* PCI ROM control bits (IORESOURCE_BITS) */ |
92 | #define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */ | 97 | #define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */ |
93 | #define IORESOURCE_ROM_SHADOW (1<<1) /* ROM is copy at C000:0 */ | 98 | #define IORESOURCE_ROM_SHADOW (1<<1) /* ROM is copy at C000:0 */ |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 552e0ec269c9..8ccb462ea42c 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -244,15 +244,6 @@ static inline void set_balance_irq_affinity(unsigned int irq, cpumask_t mask) | |||
244 | } | 244 | } |
245 | #endif | 245 | #endif |
246 | 246 | ||
247 | #ifdef CONFIG_AUTO_IRQ_AFFINITY | ||
248 | extern int select_smp_affinity(unsigned int irq); | ||
249 | #else | ||
250 | static inline int select_smp_affinity(unsigned int irq) | ||
251 | { | ||
252 | return 1; | ||
253 | } | ||
254 | #endif | ||
255 | |||
256 | extern int no_irq_affinity; | 247 | extern int no_irq_affinity; |
257 | 248 | ||
258 | static inline int irq_balancing_disabled(unsigned int irq) | 249 | static inline int irq_balancing_disabled(unsigned int irq) |
diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h index e600c4e9b8c5..2b1c2e58566e 100644 --- a/include/linux/irqflags.h +++ b/include/linux/irqflags.h | |||
@@ -12,10 +12,10 @@ | |||
12 | #define _LINUX_TRACE_IRQFLAGS_H | 12 | #define _LINUX_TRACE_IRQFLAGS_H |
13 | 13 | ||
14 | #ifdef CONFIG_TRACE_IRQFLAGS | 14 | #ifdef CONFIG_TRACE_IRQFLAGS |
15 | extern void trace_hardirqs_on(void); | ||
16 | extern void trace_hardirqs_off(void); | ||
17 | extern void trace_softirqs_on(unsigned long ip); | 15 | extern void trace_softirqs_on(unsigned long ip); |
18 | extern void trace_softirqs_off(unsigned long ip); | 16 | extern void trace_softirqs_off(unsigned long ip); |
17 | extern void trace_hardirqs_on(void); | ||
18 | extern void trace_hardirqs_off(void); | ||
19 | # define trace_hardirq_context(p) ((p)->hardirq_context) | 19 | # define trace_hardirq_context(p) ((p)->hardirq_context) |
20 | # define trace_softirq_context(p) ((p)->softirq_context) | 20 | # define trace_softirq_context(p) ((p)->softirq_context) |
21 | # define trace_hardirqs_enabled(p) ((p)->hardirqs_enabled) | 21 | # define trace_hardirqs_enabled(p) ((p)->hardirqs_enabled) |
@@ -41,6 +41,15 @@ | |||
41 | # define INIT_TRACE_IRQFLAGS | 41 | # define INIT_TRACE_IRQFLAGS |
42 | #endif | 42 | #endif |
43 | 43 | ||
44 | #if defined(CONFIG_IRQSOFF_TRACER) || \ | ||
45 | defined(CONFIG_PREEMPT_TRACER) | ||
46 | extern void stop_critical_timings(void); | ||
47 | extern void start_critical_timings(void); | ||
48 | #else | ||
49 | # define stop_critical_timings() do { } while (0) | ||
50 | # define start_critical_timings() do { } while (0) | ||
51 | #endif | ||
52 | |||
44 | #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT | 53 | #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT |
45 | 54 | ||
46 | #include <asm/irqflags.h> | 55 | #include <asm/irqflags.h> |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index d147f0f90360..3dd209007098 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
@@ -168,6 +168,8 @@ struct commit_header { | |||
168 | unsigned char h_chksum_size; | 168 | unsigned char h_chksum_size; |
169 | unsigned char h_padding[2]; | 169 | unsigned char h_padding[2]; |
170 | __be32 h_chksum[JBD2_CHECKSUM_BYTES]; | 170 | __be32 h_chksum[JBD2_CHECKSUM_BYTES]; |
171 | __be64 h_commit_sec; | ||
172 | __be32 h_commit_nsec; | ||
171 | }; | 173 | }; |
172 | 174 | ||
173 | /* | 175 | /* |
@@ -379,6 +381,38 @@ static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh) | |||
379 | bit_spin_unlock(BH_JournalHead, &bh->b_state); | 381 | bit_spin_unlock(BH_JournalHead, &bh->b_state); |
380 | } | 382 | } |
381 | 383 | ||
384 | /* Flags in jbd_inode->i_flags */ | ||
385 | #define __JI_COMMIT_RUNNING 0 | ||
386 | /* Commit of the inode data in progress. We use this flag to protect us from | ||
387 | * concurrent deletion of inode. We cannot use reference to inode for this | ||
388 | * since we cannot afford doing last iput() on behalf of kjournald | ||
389 | */ | ||
390 | #define JI_COMMIT_RUNNING (1 << __JI_COMMIT_RUNNING) | ||
391 | |||
392 | /** | ||
393 | * struct jbd_inode is the structure linking inodes in ordered mode | ||
394 | * present in a transaction so that we can sync them during commit. | ||
395 | */ | ||
396 | struct jbd2_inode { | ||
397 | /* Which transaction does this inode belong to? Either the running | ||
398 | * transaction or the committing one. [j_list_lock] */ | ||
399 | transaction_t *i_transaction; | ||
400 | |||
401 | /* Pointer to the running transaction modifying inode's data in case | ||
402 | * there is already a committing transaction touching it. [j_list_lock] */ | ||
403 | transaction_t *i_next_transaction; | ||
404 | |||
405 | /* List of inodes in the i_transaction [j_list_lock] */ | ||
406 | struct list_head i_list; | ||
407 | |||
408 | /* VFS inode this inode belongs to [constant during the lifetime | ||
409 | * of the structure] */ | ||
410 | struct inode *i_vfs_inode; | ||
411 | |||
412 | /* Flags of inode [j_list_lock] */ | ||
413 | unsigned int i_flags; | ||
414 | }; | ||
415 | |||
382 | struct jbd2_revoke_table_s; | 416 | struct jbd2_revoke_table_s; |
383 | 417 | ||
384 | /** | 418 | /** |
@@ -509,24 +543,12 @@ struct transaction_s | |||
509 | struct journal_head *t_reserved_list; | 543 | struct journal_head *t_reserved_list; |
510 | 544 | ||
511 | /* | 545 | /* |
512 | * Doubly-linked circular list of all buffers under writeout during | ||
513 | * commit [j_list_lock] | ||
514 | */ | ||
515 | struct journal_head *t_locked_list; | ||
516 | |||
517 | /* | ||
518 | * Doubly-linked circular list of all metadata buffers owned by this | 546 | * Doubly-linked circular list of all metadata buffers owned by this |
519 | * transaction [j_list_lock] | 547 | * transaction [j_list_lock] |
520 | */ | 548 | */ |
521 | struct journal_head *t_buffers; | 549 | struct journal_head *t_buffers; |
522 | 550 | ||
523 | /* | 551 | /* |
524 | * Doubly-linked circular list of all data buffers still to be | ||
525 | * flushed before this transaction can be committed [j_list_lock] | ||
526 | */ | ||
527 | struct journal_head *t_sync_datalist; | ||
528 | |||
529 | /* | ||
530 | * Doubly-linked circular list of all forget buffers (superseded | 552 | * Doubly-linked circular list of all forget buffers (superseded |
531 | * buffers which we can un-checkpoint once this transaction commits) | 553 | * buffers which we can un-checkpoint once this transaction commits) |
532 | * [j_list_lock] | 554 | * [j_list_lock] |
@@ -565,6 +587,12 @@ struct transaction_s | |||
565 | struct journal_head *t_log_list; | 587 | struct journal_head *t_log_list; |
566 | 588 | ||
567 | /* | 589 | /* |
590 | * List of inodes whose data we've modified in data=ordered mode. | ||
591 | * [j_list_lock] | ||
592 | */ | ||
593 | struct list_head t_inode_list; | ||
594 | |||
595 | /* | ||
568 | * Protects info related to handles | 596 | * Protects info related to handles |
569 | */ | 597 | */ |
570 | spinlock_t t_handle_lock; | 598 | spinlock_t t_handle_lock; |
@@ -1004,7 +1032,6 @@ extern int jbd2_journal_extend (handle_t *, int nblocks); | |||
1004 | extern int jbd2_journal_get_write_access(handle_t *, struct buffer_head *); | 1032 | extern int jbd2_journal_get_write_access(handle_t *, struct buffer_head *); |
1005 | extern int jbd2_journal_get_create_access (handle_t *, struct buffer_head *); | 1033 | extern int jbd2_journal_get_create_access (handle_t *, struct buffer_head *); |
1006 | extern int jbd2_journal_get_undo_access(handle_t *, struct buffer_head *); | 1034 | extern int jbd2_journal_get_undo_access(handle_t *, struct buffer_head *); |
1007 | extern int jbd2_journal_dirty_data (handle_t *, struct buffer_head *); | ||
1008 | extern int jbd2_journal_dirty_metadata (handle_t *, struct buffer_head *); | 1035 | extern int jbd2_journal_dirty_metadata (handle_t *, struct buffer_head *); |
1009 | extern void jbd2_journal_release_buffer (handle_t *, struct buffer_head *); | 1036 | extern void jbd2_journal_release_buffer (handle_t *, struct buffer_head *); |
1010 | extern int jbd2_journal_forget (handle_t *, struct buffer_head *); | 1037 | extern int jbd2_journal_forget (handle_t *, struct buffer_head *); |
@@ -1044,6 +1071,10 @@ extern void jbd2_journal_ack_err (journal_t *); | |||
1044 | extern int jbd2_journal_clear_err (journal_t *); | 1071 | extern int jbd2_journal_clear_err (journal_t *); |
1045 | extern int jbd2_journal_bmap(journal_t *, unsigned long, unsigned long long *); | 1072 | extern int jbd2_journal_bmap(journal_t *, unsigned long, unsigned long long *); |
1046 | extern int jbd2_journal_force_commit(journal_t *); | 1073 | extern int jbd2_journal_force_commit(journal_t *); |
1074 | extern int jbd2_journal_file_inode(handle_t *handle, struct jbd2_inode *inode); | ||
1075 | extern int jbd2_journal_begin_ordered_truncate(struct jbd2_inode *inode, loff_t new_size); | ||
1076 | extern void jbd2_journal_init_jbd_inode(struct jbd2_inode *jinode, struct inode *inode); | ||
1077 | extern void jbd2_journal_release_jbd_inode(journal_t *journal, struct jbd2_inode *jinode); | ||
1047 | 1078 | ||
1048 | /* | 1079 | /* |
1049 | * journal_head management | 1080 | * journal_head management |
@@ -1179,15 +1210,13 @@ static inline int jbd_space_needed(journal_t *journal) | |||
1179 | 1210 | ||
1180 | /* journaling buffer types */ | 1211 | /* journaling buffer types */ |
1181 | #define BJ_None 0 /* Not journaled */ | 1212 | #define BJ_None 0 /* Not journaled */ |
1182 | #define BJ_SyncData 1 /* Normal data: flush before commit */ | 1213 | #define BJ_Metadata 1 /* Normal journaled metadata */ |
1183 | #define BJ_Metadata 2 /* Normal journaled metadata */ | 1214 | #define BJ_Forget 2 /* Buffer superseded by this transaction */ |
1184 | #define BJ_Forget 3 /* Buffer superseded by this transaction */ | 1215 | #define BJ_IO 3 /* Buffer is for temporary IO use */ |
1185 | #define BJ_IO 4 /* Buffer is for temporary IO use */ | 1216 | #define BJ_Shadow 4 /* Buffer contents being shadowed to the log */ |
1186 | #define BJ_Shadow 5 /* Buffer contents being shadowed to the log */ | 1217 | #define BJ_LogCtl 5 /* Buffer contains log descriptors */ |
1187 | #define BJ_LogCtl 6 /* Buffer contains log descriptors */ | 1218 | #define BJ_Reserved 6 /* Buffer is reserved for access by journal */ |
1188 | #define BJ_Reserved 7 /* Buffer is reserved for access by journal */ | 1219 | #define BJ_Types 7 |
1189 | #define BJ_Locked 8 /* Locked for I/O during commit */ | ||
1190 | #define BJ_Types 9 | ||
1191 | 1220 | ||
1192 | extern int jbd_blocks_per_page(struct inode *inode); | 1221 | extern int jbd_blocks_per_page(struct inode *inode); |
1193 | 1222 | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 2e70006c7fa8..f9cd7a513f9c 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -187,9 +187,6 @@ asmlinkage int vprintk(const char *fmt, va_list args) | |||
187 | __attribute__ ((format (printf, 1, 0))); | 187 | __attribute__ ((format (printf, 1, 0))); |
188 | asmlinkage int printk(const char * fmt, ...) | 188 | asmlinkage int printk(const char * fmt, ...) |
189 | __attribute__ ((format (printf, 1, 2))) __cold; | 189 | __attribute__ ((format (printf, 1, 2))) __cold; |
190 | extern int log_buf_get_len(void); | ||
191 | extern int log_buf_read(int idx); | ||
192 | extern int log_buf_copy(char *dest, int idx, int len); | ||
193 | 190 | ||
194 | extern int printk_ratelimit_jiffies; | 191 | extern int printk_ratelimit_jiffies; |
195 | extern int printk_ratelimit_burst; | 192 | extern int printk_ratelimit_burst; |
@@ -205,9 +202,6 @@ static inline int vprintk(const char *s, va_list args) { return 0; } | |||
205 | static inline int printk(const char *s, ...) | 202 | static inline int printk(const char *s, ...) |
206 | __attribute__ ((format (printf, 1, 2))); | 203 | __attribute__ ((format (printf, 1, 2))); |
207 | static inline int __cold printk(const char *s, ...) { return 0; } | 204 | static inline int __cold printk(const char *s, ...) { return 0; } |
208 | static inline int log_buf_get_len(void) { return 0; } | ||
209 | static inline int log_buf_read(int idx) { return 0; } | ||
210 | static inline int log_buf_copy(char *dest, int idx, int len) { return 0; } | ||
211 | static inline int printk_ratelimit(void) { return 0; } | 205 | static inline int printk_ratelimit(void) { return 0; } |
212 | static inline int __printk_ratelimit(int ratelimit_jiffies, \ | 206 | static inline int __printk_ratelimit(int ratelimit_jiffies, \ |
213 | int ratelimit_burst) { return 0; } | 207 | int ratelimit_burst) { return 0; } |
@@ -216,7 +210,7 @@ static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, \ | |||
216 | { return false; } | 210 | { return false; } |
217 | #endif | 211 | #endif |
218 | 212 | ||
219 | extern void __attribute__((format(printf, 1, 2))) | 213 | extern void asmlinkage __attribute__((format(printf, 1, 2))) |
220 | early_printk(const char *fmt, ...); | 214 | early_printk(const char *fmt, ...); |
221 | 215 | ||
222 | unsigned long int_sqrt(unsigned long); | 216 | unsigned long int_sqrt(unsigned long); |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index 1036631ff4fa..04a3556bdea6 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -259,6 +259,10 @@ void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head); | |||
259 | struct jprobe; | 259 | struct jprobe; |
260 | struct kretprobe; | 260 | struct kretprobe; |
261 | 261 | ||
262 | static inline struct kprobe *get_kprobe(void *addr) | ||
263 | { | ||
264 | return NULL; | ||
265 | } | ||
262 | static inline struct kprobe *kprobe_running(void) | 266 | static inline struct kprobe *kprobe_running(void) |
263 | { | 267 | { |
264 | return NULL; | 268 | return NULL; |
diff --git a/include/linux/libata.h b/include/linux/libata.h index e57e5d08312d..5b247b8a6b3b 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -27,6 +27,7 @@ | |||
27 | #define __LINUX_LIBATA_H__ | 27 | #define __LINUX_LIBATA_H__ |
28 | 28 | ||
29 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
30 | #include <linux/jiffies.h> | ||
30 | #include <linux/interrupt.h> | 31 | #include <linux/interrupt.h> |
31 | #include <linux/dma-mapping.h> | 32 | #include <linux/dma-mapping.h> |
32 | #include <linux/scatterlist.h> | 33 | #include <linux/scatterlist.h> |
@@ -115,7 +116,7 @@ enum { | |||
115 | /* tag ATA_MAX_QUEUE - 1 is reserved for internal commands */ | 116 | /* tag ATA_MAX_QUEUE - 1 is reserved for internal commands */ |
116 | ATA_MAX_QUEUE = 32, | 117 | ATA_MAX_QUEUE = 32, |
117 | ATA_TAG_INTERNAL = ATA_MAX_QUEUE - 1, | 118 | ATA_TAG_INTERNAL = ATA_MAX_QUEUE - 1, |
118 | ATA_SHORT_PAUSE = (HZ >> 6) + 1, | 119 | ATA_SHORT_PAUSE = 16, |
119 | 120 | ||
120 | ATAPI_MAX_DRAIN = 16 << 10, | 121 | ATAPI_MAX_DRAIN = 16 << 10, |
121 | 122 | ||
@@ -168,6 +169,7 @@ enum { | |||
168 | ATA_LFLAG_ASSUME_CLASS = ATA_LFLAG_ASSUME_ATA | ATA_LFLAG_ASSUME_SEMB, | 169 | ATA_LFLAG_ASSUME_CLASS = ATA_LFLAG_ASSUME_ATA | ATA_LFLAG_ASSUME_SEMB, |
169 | ATA_LFLAG_NO_RETRY = (1 << 5), /* don't retry this link */ | 170 | ATA_LFLAG_NO_RETRY = (1 << 5), /* don't retry this link */ |
170 | ATA_LFLAG_DISABLED = (1 << 6), /* link is disabled */ | 171 | ATA_LFLAG_DISABLED = (1 << 6), /* link is disabled */ |
172 | ATA_LFLAG_SW_ACTIVITY = (1 << 7), /* keep activity stats */ | ||
171 | 173 | ||
172 | /* struct ata_port flags */ | 174 | /* struct ata_port flags */ |
173 | ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */ | 175 | ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */ |
@@ -190,6 +192,10 @@ enum { | |||
190 | ATA_FLAG_AN = (1 << 18), /* controller supports AN */ | 192 | ATA_FLAG_AN = (1 << 18), /* controller supports AN */ |
191 | ATA_FLAG_PMP = (1 << 19), /* controller supports PMP */ | 193 | ATA_FLAG_PMP = (1 << 19), /* controller supports PMP */ |
192 | ATA_FLAG_IPM = (1 << 20), /* driver can handle IPM */ | 194 | ATA_FLAG_IPM = (1 << 20), /* driver can handle IPM */ |
195 | ATA_FLAG_EM = (1 << 21), /* driver supports enclosure | ||
196 | * management */ | ||
197 | ATA_FLAG_SW_ACTIVITY = (1 << 22), /* driver supports sw activity | ||
198 | * led */ | ||
193 | 199 | ||
194 | /* The following flag belongs to ap->pflags but is kept in | 200 | /* The following flag belongs to ap->pflags but is kept in |
195 | * ap->flags because it's referenced in many LLDs and will be | 201 | * ap->flags because it's referenced in many LLDs and will be |
@@ -234,17 +240,16 @@ enum { | |||
234 | /* bits 24:31 of host->flags are reserved for LLD specific flags */ | 240 | /* bits 24:31 of host->flags are reserved for LLD specific flags */ |
235 | 241 | ||
236 | /* various lengths of time */ | 242 | /* various lengths of time */ |
237 | ATA_TMOUT_BOOT = 30 * HZ, /* heuristic */ | 243 | ATA_TMOUT_BOOT = 30000, /* heuristic */ |
238 | ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* heuristic */ | 244 | ATA_TMOUT_BOOT_QUICK = 7000, /* heuristic */ |
239 | ATA_TMOUT_INTERNAL = 30 * HZ, | 245 | ATA_TMOUT_INTERNAL_QUICK = 5000, |
240 | ATA_TMOUT_INTERNAL_QUICK = 5 * HZ, | ||
241 | 246 | ||
242 | /* FIXME: GoVault needs 2s but we can't afford that without | 247 | /* FIXME: GoVault needs 2s but we can't afford that without |
243 | * parallel probing. 800ms is enough for iVDR disk | 248 | * parallel probing. 800ms is enough for iVDR disk |
244 | * HHD424020F7SV00. Increase to 2secs when parallel probing | 249 | * HHD424020F7SV00. Increase to 2secs when parallel probing |
245 | * is in place. | 250 | * is in place. |
246 | */ | 251 | */ |
247 | ATA_TMOUT_FF_WAIT = 4 * HZ / 5, | 252 | ATA_TMOUT_FF_WAIT = 800, |
248 | 253 | ||
249 | /* Spec mandates to wait for ">= 2ms" before checking status | 254 | /* Spec mandates to wait for ">= 2ms" before checking status |
250 | * after reset. We wait 150ms, because that was the magic | 255 | * after reset. We wait 150ms, because that was the magic |
@@ -256,14 +261,14 @@ enum { | |||
256 | * | 261 | * |
257 | * Old drivers/ide uses the 2mS rule and then waits for ready. | 262 | * Old drivers/ide uses the 2mS rule and then waits for ready. |
258 | */ | 263 | */ |
259 | ATA_WAIT_AFTER_RESET_MSECS = 150, | 264 | ATA_WAIT_AFTER_RESET = 150, |
260 | 265 | ||
261 | /* If PMP is supported, we have to do follow-up SRST. As some | 266 | /* If PMP is supported, we have to do follow-up SRST. As some |
262 | * PMPs don't send D2H Reg FIS after hardreset, LLDs are | 267 | * PMPs don't send D2H Reg FIS after hardreset, LLDs are |
263 | * advised to wait only for the following duration before | 268 | * advised to wait only for the following duration before |
264 | * doing SRST. | 269 | * doing SRST. |
265 | */ | 270 | */ |
266 | ATA_TMOUT_PMP_SRST_WAIT = 1 * HZ, | 271 | ATA_TMOUT_PMP_SRST_WAIT = 1000, |
267 | 272 | ||
268 | /* ATA bus states */ | 273 | /* ATA bus states */ |
269 | BUS_UNKNOWN = 0, | 274 | BUS_UNKNOWN = 0, |
@@ -340,6 +345,11 @@ enum { | |||
340 | 345 | ||
341 | SATA_PMP_RW_TIMEOUT = 3000, /* PMP read/write timeout */ | 346 | SATA_PMP_RW_TIMEOUT = 3000, /* PMP read/write timeout */ |
342 | 347 | ||
348 | /* This should match the actual table size of | ||
349 | * ata_eh_cmd_timeout_table in libata-eh.c. | ||
350 | */ | ||
351 | ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 5, | ||
352 | |||
343 | /* Horkage types. May be set by libata or controller on drives | 353 | /* Horkage types. May be set by libata or controller on drives |
344 | (some horkage may be drive/controller pair dependant */ | 354 | (some horkage may be drive/controller pair dependant */ |
345 | 355 | ||
@@ -441,6 +451,15 @@ enum link_pm { | |||
441 | MEDIUM_POWER, | 451 | MEDIUM_POWER, |
442 | }; | 452 | }; |
443 | extern struct device_attribute dev_attr_link_power_management_policy; | 453 | extern struct device_attribute dev_attr_link_power_management_policy; |
454 | extern struct device_attribute dev_attr_em_message_type; | ||
455 | extern struct device_attribute dev_attr_em_message; | ||
456 | extern struct device_attribute dev_attr_sw_activity; | ||
457 | |||
458 | enum sw_activity { | ||
459 | OFF, | ||
460 | BLINK_ON, | ||
461 | BLINK_OFF, | ||
462 | }; | ||
444 | 463 | ||
445 | #ifdef CONFIG_ATA_SFF | 464 | #ifdef CONFIG_ATA_SFF |
446 | struct ata_ioports { | 465 | struct ata_ioports { |
@@ -597,10 +616,14 @@ struct ata_eh_info { | |||
597 | struct ata_eh_context { | 616 | struct ata_eh_context { |
598 | struct ata_eh_info i; | 617 | struct ata_eh_info i; |
599 | int tries[ATA_MAX_DEVICES]; | 618 | int tries[ATA_MAX_DEVICES]; |
619 | int cmd_timeout_idx[ATA_MAX_DEVICES] | ||
620 | [ATA_EH_CMD_TIMEOUT_TABLE_SIZE]; | ||
600 | unsigned int classes[ATA_MAX_DEVICES]; | 621 | unsigned int classes[ATA_MAX_DEVICES]; |
601 | unsigned int did_probe_mask; | 622 | unsigned int did_probe_mask; |
602 | unsigned int saved_ncq_enabled; | 623 | unsigned int saved_ncq_enabled; |
603 | u8 saved_xfer_mode[ATA_MAX_DEVICES]; | 624 | u8 saved_xfer_mode[ATA_MAX_DEVICES]; |
625 | /* timestamp for the last reset attempt or success */ | ||
626 | unsigned long last_reset; | ||
604 | }; | 627 | }; |
605 | 628 | ||
606 | struct ata_acpi_drive | 629 | struct ata_acpi_drive |
@@ -692,6 +715,7 @@ struct ata_port { | |||
692 | struct timer_list fastdrain_timer; | 715 | struct timer_list fastdrain_timer; |
693 | unsigned long fastdrain_cnt; | 716 | unsigned long fastdrain_cnt; |
694 | 717 | ||
718 | int em_message_type; | ||
695 | void *private_data; | 719 | void *private_data; |
696 | 720 | ||
697 | #ifdef CONFIG_ATA_ACPI | 721 | #ifdef CONFIG_ATA_ACPI |
@@ -783,6 +807,12 @@ struct ata_port_operations { | |||
783 | u8 (*bmdma_status)(struct ata_port *ap); | 807 | u8 (*bmdma_status)(struct ata_port *ap); |
784 | #endif /* CONFIG_ATA_SFF */ | 808 | #endif /* CONFIG_ATA_SFF */ |
785 | 809 | ||
810 | ssize_t (*em_show)(struct ata_port *ap, char *buf); | ||
811 | ssize_t (*em_store)(struct ata_port *ap, const char *message, | ||
812 | size_t size); | ||
813 | ssize_t (*sw_activity_show)(struct ata_device *dev, char *buf); | ||
814 | ssize_t (*sw_activity_store)(struct ata_device *dev, | ||
815 | enum sw_activity val); | ||
786 | /* | 816 | /* |
787 | * Obsolete | 817 | * Obsolete |
788 | */ | 818 | */ |
@@ -895,8 +925,7 @@ extern void ata_host_resume(struct ata_host *host); | |||
895 | #endif | 925 | #endif |
896 | extern int ata_ratelimit(void); | 926 | extern int ata_ratelimit(void); |
897 | extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val, | 927 | extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val, |
898 | unsigned long interval_msec, | 928 | unsigned long interval, unsigned long timeout); |
899 | unsigned long timeout_msec); | ||
900 | extern int atapi_cmd_type(u8 opcode); | 929 | extern int atapi_cmd_type(u8 opcode); |
901 | extern void ata_tf_to_fis(const struct ata_taskfile *tf, | 930 | extern void ata_tf_to_fis(const struct ata_taskfile *tf, |
902 | u8 pmp, int is_cmd, u8 *fis); | 931 | u8 pmp, int is_cmd, u8 *fis); |
@@ -1389,6 +1418,12 @@ static inline int ata_check_ready(u8 status) | |||
1389 | return 0; | 1418 | return 0; |
1390 | } | 1419 | } |
1391 | 1420 | ||
1421 | static inline unsigned long ata_deadline(unsigned long from_jiffies, | ||
1422 | unsigned long timeout_msecs) | ||
1423 | { | ||
1424 | return from_jiffies + msecs_to_jiffies(timeout_msecs); | ||
1425 | } | ||
1426 | |||
1392 | 1427 | ||
1393 | /************************************************************************** | 1428 | /************************************************************************** |
1394 | * PMP - drivers/ata/libata-pmp.c | 1429 | * PMP - drivers/ata/libata-pmp.c |
diff --git a/include/linux/linkage.h b/include/linux/linkage.h index 9fd1f859021b..56ba37394656 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h | |||
@@ -4,6 +4,8 @@ | |||
4 | #include <linux/compiler.h> | 4 | #include <linux/compiler.h> |
5 | #include <asm/linkage.h> | 5 | #include <asm/linkage.h> |
6 | 6 | ||
7 | #define notrace __attribute__((no_instrument_function)) | ||
8 | |||
7 | #ifdef __cplusplus | 9 | #ifdef __cplusplus |
8 | #define CPP_ASMLINKAGE extern "C" | 10 | #define CPP_ASMLINKAGE extern "C" |
9 | #else | 11 | #else |
diff --git a/include/linux/list.h b/include/linux/list.h index 08cf4f651889..139ec41d9c2e 100644 --- a/include/linux/list.h +++ b/include/linux/list.h | |||
@@ -85,65 +85,6 @@ static inline void list_add_tail(struct list_head *new, struct list_head *head) | |||
85 | } | 85 | } |
86 | 86 | ||
87 | /* | 87 | /* |
88 | * Insert a new entry between two known consecutive entries. | ||
89 | * | ||
90 | * This is only for internal list manipulation where we know | ||
91 | * the prev/next entries already! | ||
92 | */ | ||
93 | static inline void __list_add_rcu(struct list_head * new, | ||
94 | struct list_head * prev, struct list_head * next) | ||
95 | { | ||
96 | new->next = next; | ||
97 | new->prev = prev; | ||
98 | smp_wmb(); | ||
99 | next->prev = new; | ||
100 | prev->next = new; | ||
101 | } | ||
102 | |||
103 | /** | ||
104 | * list_add_rcu - add a new entry to rcu-protected list | ||
105 | * @new: new entry to be added | ||
106 | * @head: list head to add it after | ||
107 | * | ||
108 | * Insert a new entry after the specified head. | ||
109 | * This is good for implementing stacks. | ||
110 | * | ||
111 | * The caller must take whatever precautions are necessary | ||
112 | * (such as holding appropriate locks) to avoid racing | ||
113 | * with another list-mutation primitive, such as list_add_rcu() | ||
114 | * or list_del_rcu(), running on this same list. | ||
115 | * However, it is perfectly legal to run concurrently with | ||
116 | * the _rcu list-traversal primitives, such as | ||
117 | * list_for_each_entry_rcu(). | ||
118 | */ | ||
119 | static inline void list_add_rcu(struct list_head *new, struct list_head *head) | ||
120 | { | ||
121 | __list_add_rcu(new, head, head->next); | ||
122 | } | ||
123 | |||
124 | /** | ||
125 | * list_add_tail_rcu - add a new entry to rcu-protected list | ||
126 | * @new: new entry to be added | ||
127 | * @head: list head to add it before | ||
128 | * | ||
129 | * Insert a new entry before the specified head. | ||
130 | * This is useful for implementing queues. | ||
131 | * | ||
132 | * The caller must take whatever precautions are necessary | ||
133 | * (such as holding appropriate locks) to avoid racing | ||
134 | * with another list-mutation primitive, such as list_add_tail_rcu() | ||
135 | * or list_del_rcu(), running on this same list. | ||
136 | * However, it is perfectly legal to run concurrently with | ||
137 | * the _rcu list-traversal primitives, such as | ||
138 | * list_for_each_entry_rcu(). | ||
139 | */ | ||
140 | static inline void list_add_tail_rcu(struct list_head *new, | ||
141 | struct list_head *head) | ||
142 | { | ||
143 | __list_add_rcu(new, head->prev, head); | ||
144 | } | ||
145 | |||
146 | /* | ||
147 | * Delete a list entry by making the prev/next entries | 88 | * Delete a list entry by making the prev/next entries |
148 | * point to each other. | 89 | * point to each other. |
149 | * | 90 | * |
@@ -174,36 +115,6 @@ extern void list_del(struct list_head *entry); | |||
174 | #endif | 115 | #endif |
175 | 116 | ||
176 | /** | 117 | /** |
177 | * list_del_rcu - deletes entry from list without re-initialization | ||
178 | * @entry: the element to delete from the list. | ||
179 | * | ||
180 | * Note: list_empty() on entry does not return true after this, | ||
181 | * the entry is in an undefined state. It is useful for RCU based | ||
182 | * lockfree traversal. | ||
183 | * | ||
184 | * In particular, it means that we can not poison the forward | ||
185 | * pointers that may still be used for walking the list. | ||
186 | * | ||
187 | * The caller must take whatever precautions are necessary | ||
188 | * (such as holding appropriate locks) to avoid racing | ||
189 | * with another list-mutation primitive, such as list_del_rcu() | ||
190 | * or list_add_rcu(), running on this same list. | ||
191 | * However, it is perfectly legal to run concurrently with | ||
192 | * the _rcu list-traversal primitives, such as | ||
193 | * list_for_each_entry_rcu(). | ||
194 | * | ||
195 | * Note that the caller is not permitted to immediately free | ||
196 | * the newly deleted entry. Instead, either synchronize_rcu() | ||
197 | * or call_rcu() must be used to defer freeing until an RCU | ||
198 | * grace period has elapsed. | ||
199 | */ | ||
200 | static inline void list_del_rcu(struct list_head *entry) | ||
201 | { | ||
202 | __list_del(entry->prev, entry->next); | ||
203 | entry->prev = LIST_POISON2; | ||
204 | } | ||
205 | |||
206 | /** | ||
207 | * list_replace - replace old entry by new one | 118 | * list_replace - replace old entry by new one |
208 | * @old : the element to be replaced | 119 | * @old : the element to be replaced |
209 | * @new : the new element to insert | 120 | * @new : the new element to insert |
@@ -227,25 +138,6 @@ static inline void list_replace_init(struct list_head *old, | |||
227 | } | 138 | } |
228 | 139 | ||
229 | /** | 140 | /** |
230 | * list_replace_rcu - replace old entry by new one | ||
231 | * @old : the element to be replaced | ||
232 | * @new : the new element to insert | ||
233 | * | ||
234 | * The @old entry will be replaced with the @new entry atomically. | ||
235 | * Note: @old should not be empty. | ||
236 | */ | ||
237 | static inline void list_replace_rcu(struct list_head *old, | ||
238 | struct list_head *new) | ||
239 | { | ||
240 | new->next = old->next; | ||
241 | new->prev = old->prev; | ||
242 | smp_wmb(); | ||
243 | new->next->prev = new; | ||
244 | new->prev->next = new; | ||
245 | old->prev = LIST_POISON2; | ||
246 | } | ||
247 | |||
248 | /** | ||
249 | * list_del_init - deletes entry from list and reinitialize it. | 141 | * list_del_init - deletes entry from list and reinitialize it. |
250 | * @entry: the element to delete from the list. | 142 | * @entry: the element to delete from the list. |
251 | */ | 143 | */ |
@@ -369,62 +261,6 @@ static inline void list_splice_init(struct list_head *list, | |||
369 | } | 261 | } |
370 | 262 | ||
371 | /** | 263 | /** |
372 | * list_splice_init_rcu - splice an RCU-protected list into an existing list. | ||
373 | * @list: the RCU-protected list to splice | ||
374 | * @head: the place in the list to splice the first list into | ||
375 | * @sync: function to sync: synchronize_rcu(), synchronize_sched(), ... | ||
376 | * | ||
377 | * @head can be RCU-read traversed concurrently with this function. | ||
378 | * | ||
379 | * Note that this function blocks. | ||
380 | * | ||
381 | * Important note: the caller must take whatever action is necessary to | ||
382 | * prevent any other updates to @head. In principle, it is possible | ||
383 | * to modify the list as soon as sync() begins execution. | ||
384 | * If this sort of thing becomes necessary, an alternative version | ||
385 | * based on call_rcu() could be created. But only if -really- | ||
386 | * needed -- there is no shortage of RCU API members. | ||
387 | */ | ||
388 | static inline void list_splice_init_rcu(struct list_head *list, | ||
389 | struct list_head *head, | ||
390 | void (*sync)(void)) | ||
391 | { | ||
392 | struct list_head *first = list->next; | ||
393 | struct list_head *last = list->prev; | ||
394 | struct list_head *at = head->next; | ||
395 | |||
396 | if (list_empty(head)) | ||
397 | return; | ||
398 | |||
399 | /* "first" and "last" tracking list, so initialize it. */ | ||
400 | |||
401 | INIT_LIST_HEAD(list); | ||
402 | |||
403 | /* | ||
404 | * At this point, the list body still points to the source list. | ||
405 | * Wait for any readers to finish using the list before splicing | ||
406 | * the list body into the new list. Any new readers will see | ||
407 | * an empty list. | ||
408 | */ | ||
409 | |||
410 | sync(); | ||
411 | |||
412 | /* | ||
413 | * Readers are finished with the source list, so perform splice. | ||
414 | * The order is important if the new list is global and accessible | ||
415 | * to concurrent RCU readers. Note that RCU readers are not | ||
416 | * permitted to traverse the prev pointers without excluding | ||
417 | * this function. | ||
418 | */ | ||
419 | |||
420 | last->next = at; | ||
421 | smp_wmb(); | ||
422 | head->next = first; | ||
423 | first->prev = head; | ||
424 | at->prev = last; | ||
425 | } | ||
426 | |||
427 | /** | ||
428 | * list_entry - get the struct for this entry | 264 | * list_entry - get the struct for this entry |
429 | * @ptr: the &struct list_head pointer. | 265 | * @ptr: the &struct list_head pointer. |
430 | * @type: the type of the struct this is embedded in. | 266 | * @type: the type of the struct this is embedded in. |
@@ -629,57 +465,6 @@ static inline void list_splice_init_rcu(struct list_head *list, | |||
629 | &pos->member != (head); \ | 465 | &pos->member != (head); \ |
630 | pos = n, n = list_entry(n->member.prev, typeof(*n), member)) | 466 | pos = n, n = list_entry(n->member.prev, typeof(*n), member)) |
631 | 467 | ||
632 | /** | ||
633 | * list_for_each_rcu - iterate over an rcu-protected list | ||
634 | * @pos: the &struct list_head to use as a loop cursor. | ||
635 | * @head: the head for your list. | ||
636 | * | ||
637 | * This list-traversal primitive may safely run concurrently with | ||
638 | * the _rcu list-mutation primitives such as list_add_rcu() | ||
639 | * as long as the traversal is guarded by rcu_read_lock(). | ||
640 | */ | ||
641 | #define list_for_each_rcu(pos, head) \ | ||
642 | for (pos = rcu_dereference((head)->next); \ | ||
643 | prefetch(pos->next), pos != (head); \ | ||
644 | pos = rcu_dereference(pos->next)) | ||
645 | |||
646 | #define __list_for_each_rcu(pos, head) \ | ||
647 | for (pos = rcu_dereference((head)->next); \ | ||
648 | pos != (head); \ | ||
649 | pos = rcu_dereference(pos->next)) | ||
650 | |||
651 | /** | ||
652 | * list_for_each_entry_rcu - iterate over rcu list of given type | ||
653 | * @pos: the type * to use as a loop cursor. | ||
654 | * @head: the head for your list. | ||
655 | * @member: the name of the list_struct within the struct. | ||
656 | * | ||
657 | * This list-traversal primitive may safely run concurrently with | ||
658 | * the _rcu list-mutation primitives such as list_add_rcu() | ||
659 | * as long as the traversal is guarded by rcu_read_lock(). | ||
660 | */ | ||
661 | #define list_for_each_entry_rcu(pos, head, member) \ | ||
662 | for (pos = list_entry(rcu_dereference((head)->next), typeof(*pos), member); \ | ||
663 | prefetch(pos->member.next), &pos->member != (head); \ | ||
664 | pos = list_entry(rcu_dereference(pos->member.next), typeof(*pos), member)) | ||
665 | |||
666 | |||
667 | /** | ||
668 | * list_for_each_continue_rcu | ||
669 | * @pos: the &struct list_head to use as a loop cursor. | ||
670 | * @head: the head for your list. | ||
671 | * | ||
672 | * Iterate over an rcu-protected list, continuing after current point. | ||
673 | * | ||
674 | * This list-traversal primitive may safely run concurrently with | ||
675 | * the _rcu list-mutation primitives such as list_add_rcu() | ||
676 | * as long as the traversal is guarded by rcu_read_lock(). | ||
677 | */ | ||
678 | #define list_for_each_continue_rcu(pos, head) \ | ||
679 | for ((pos) = rcu_dereference((pos)->next); \ | ||
680 | prefetch((pos)->next), (pos) != (head); \ | ||
681 | (pos) = rcu_dereference((pos)->next)) | ||
682 | |||
683 | /* | 468 | /* |
684 | * Double linked lists with a single pointer list head. | 469 | * Double linked lists with a single pointer list head. |
685 | * Mostly useful for hash tables where the two pointer list head is | 470 | * Mostly useful for hash tables where the two pointer list head is |
@@ -730,31 +515,6 @@ static inline void hlist_del(struct hlist_node *n) | |||
730 | n->pprev = LIST_POISON2; | 515 | n->pprev = LIST_POISON2; |
731 | } | 516 | } |
732 | 517 | ||
733 | /** | ||
734 | * hlist_del_rcu - deletes entry from hash list without re-initialization | ||
735 | * @n: the element to delete from the hash list. | ||
736 | * | ||
737 | * Note: list_unhashed() on entry does not return true after this, | ||
738 | * the entry is in an undefined state. It is useful for RCU based | ||
739 | * lockfree traversal. | ||
740 | * | ||
741 | * In particular, it means that we can not poison the forward | ||
742 | * pointers that may still be used for walking the hash list. | ||
743 | * | ||
744 | * The caller must take whatever precautions are necessary | ||
745 | * (such as holding appropriate locks) to avoid racing | ||
746 | * with another list-mutation primitive, such as hlist_add_head_rcu() | ||
747 | * or hlist_del_rcu(), running on this same list. | ||
748 | * However, it is perfectly legal to run concurrently with | ||
749 | * the _rcu list-traversal primitives, such as | ||
750 | * hlist_for_each_entry(). | ||
751 | */ | ||
752 | static inline void hlist_del_rcu(struct hlist_node *n) | ||
753 | { | ||
754 | __hlist_del(n); | ||
755 | n->pprev = LIST_POISON2; | ||
756 | } | ||
757 | |||
758 | static inline void hlist_del_init(struct hlist_node *n) | 518 | static inline void hlist_del_init(struct hlist_node *n) |
759 | { | 519 | { |
760 | if (!hlist_unhashed(n)) { | 520 | if (!hlist_unhashed(n)) { |
@@ -763,27 +523,6 @@ static inline void hlist_del_init(struct hlist_node *n) | |||
763 | } | 523 | } |
764 | } | 524 | } |
765 | 525 | ||
766 | /** | ||
767 | * hlist_replace_rcu - replace old entry by new one | ||
768 | * @old : the element to be replaced | ||
769 | * @new : the new element to insert | ||
770 | * | ||
771 | * The @old entry will be replaced with the @new entry atomically. | ||
772 | */ | ||
773 | static inline void hlist_replace_rcu(struct hlist_node *old, | ||
774 | struct hlist_node *new) | ||
775 | { | ||
776 | struct hlist_node *next = old->next; | ||
777 | |||
778 | new->next = next; | ||
779 | new->pprev = old->pprev; | ||
780 | smp_wmb(); | ||
781 | if (next) | ||
782 | new->next->pprev = &new->next; | ||
783 | *new->pprev = new; | ||
784 | old->pprev = LIST_POISON2; | ||
785 | } | ||
786 | |||
787 | static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) | 526 | static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) |
788 | { | 527 | { |
789 | struct hlist_node *first = h->first; | 528 | struct hlist_node *first = h->first; |
@@ -794,38 +533,6 @@ static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) | |||
794 | n->pprev = &h->first; | 533 | n->pprev = &h->first; |
795 | } | 534 | } |
796 | 535 | ||
797 | |||
798 | /** | ||
799 | * hlist_add_head_rcu | ||
800 | * @n: the element to add to the hash list. | ||
801 | * @h: the list to add to. | ||
802 | * | ||
803 | * Description: | ||
804 | * Adds the specified element to the specified hlist, | ||
805 | * while permitting racing traversals. | ||
806 | * | ||
807 | * The caller must take whatever precautions are necessary | ||
808 | * (such as holding appropriate locks) to avoid racing | ||
809 | * with another list-mutation primitive, such as hlist_add_head_rcu() | ||
810 | * or hlist_del_rcu(), running on this same list. | ||
811 | * However, it is perfectly legal to run concurrently with | ||
812 | * the _rcu list-traversal primitives, such as | ||
813 | * hlist_for_each_entry_rcu(), used to prevent memory-consistency | ||
814 | * problems on Alpha CPUs. Regardless of the type of CPU, the | ||
815 | * list-traversal primitive must be guarded by rcu_read_lock(). | ||
816 | */ | ||
817 | static inline void hlist_add_head_rcu(struct hlist_node *n, | ||
818 | struct hlist_head *h) | ||
819 | { | ||
820 | struct hlist_node *first = h->first; | ||
821 | n->next = first; | ||
822 | n->pprev = &h->first; | ||
823 | smp_wmb(); | ||
824 | if (first) | ||
825 | first->pprev = &n->next; | ||
826 | h->first = n; | ||
827 | } | ||
828 | |||
829 | /* next must be != NULL */ | 536 | /* next must be != NULL */ |
830 | static inline void hlist_add_before(struct hlist_node *n, | 537 | static inline void hlist_add_before(struct hlist_node *n, |
831 | struct hlist_node *next) | 538 | struct hlist_node *next) |
@@ -847,63 +554,6 @@ static inline void hlist_add_after(struct hlist_node *n, | |||
847 | next->next->pprev = &next->next; | 554 | next->next->pprev = &next->next; |
848 | } | 555 | } |
849 | 556 | ||
850 | /** | ||
851 | * hlist_add_before_rcu | ||
852 | * @n: the new element to add to the hash list. | ||
853 | * @next: the existing element to add the new element before. | ||
854 | * | ||
855 | * Description: | ||
856 | * Adds the specified element to the specified hlist | ||
857 | * before the specified node while permitting racing traversals. | ||
858 | * | ||
859 | * The caller must take whatever precautions are necessary | ||
860 | * (such as holding appropriate locks) to avoid racing | ||
861 | * with another list-mutation primitive, such as hlist_add_head_rcu() | ||
862 | * or hlist_del_rcu(), running on this same list. | ||
863 | * However, it is perfectly legal to run concurrently with | ||
864 | * the _rcu list-traversal primitives, such as | ||
865 | * hlist_for_each_entry_rcu(), used to prevent memory-consistency | ||
866 | * problems on Alpha CPUs. | ||
867 | */ | ||
868 | static inline void hlist_add_before_rcu(struct hlist_node *n, | ||
869 | struct hlist_node *next) | ||
870 | { | ||
871 | n->pprev = next->pprev; | ||
872 | n->next = next; | ||
873 | smp_wmb(); | ||
874 | next->pprev = &n->next; | ||
875 | *(n->pprev) = n; | ||
876 | } | ||
877 | |||
878 | /** | ||
879 | * hlist_add_after_rcu | ||
880 | * @prev: the existing element to add the new element after. | ||
881 | * @n: the new element to add to the hash list. | ||
882 | * | ||
883 | * Description: | ||
884 | * Adds the specified element to the specified hlist | ||
885 | * after the specified node while permitting racing traversals. | ||
886 | * | ||
887 | * The caller must take whatever precautions are necessary | ||
888 | * (such as holding appropriate locks) to avoid racing | ||
889 | * with another list-mutation primitive, such as hlist_add_head_rcu() | ||
890 | * or hlist_del_rcu(), running on this same list. | ||
891 | * However, it is perfectly legal to run concurrently with | ||
892 | * the _rcu list-traversal primitives, such as | ||
893 | * hlist_for_each_entry_rcu(), used to prevent memory-consistency | ||
894 | * problems on Alpha CPUs. | ||
895 | */ | ||
896 | static inline void hlist_add_after_rcu(struct hlist_node *prev, | ||
897 | struct hlist_node *n) | ||
898 | { | ||
899 | n->next = prev->next; | ||
900 | n->pprev = &prev->next; | ||
901 | smp_wmb(); | ||
902 | prev->next = n; | ||
903 | if (n->next) | ||
904 | n->next->pprev = &n->next; | ||
905 | } | ||
906 | |||
907 | #define hlist_entry(ptr, type, member) container_of(ptr,type,member) | 557 | #define hlist_entry(ptr, type, member) container_of(ptr,type,member) |
908 | 558 | ||
909 | #define hlist_for_each(pos, head) \ | 559 | #define hlist_for_each(pos, head) \ |
@@ -964,21 +614,4 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
964 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ | 614 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
965 | pos = n) | 615 | pos = n) |
966 | 616 | ||
967 | /** | ||
968 | * hlist_for_each_entry_rcu - iterate over rcu list of given type | ||
969 | * @tpos: the type * to use as a loop cursor. | ||
970 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
971 | * @head: the head for your list. | ||
972 | * @member: the name of the hlist_node within the struct. | ||
973 | * | ||
974 | * This list-traversal primitive may safely run concurrently with | ||
975 | * the _rcu list-mutation primitives such as hlist_add_head_rcu() | ||
976 | * as long as the traversal is guarded by rcu_read_lock(). | ||
977 | */ | ||
978 | #define hlist_for_each_entry_rcu(tpos, pos, head, member) \ | ||
979 | for (pos = rcu_dereference((head)->first); \ | ||
980 | pos && ({ prefetch(pos->next); 1;}) && \ | ||
981 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ | ||
982 | pos = rcu_dereference(pos->next)) | ||
983 | |||
984 | #endif | 617 | #endif |
diff --git a/include/linux/lm_interface.h b/include/linux/lm_interface.h index f274997bc283..2ed8fa1b762b 100644 --- a/include/linux/lm_interface.h +++ b/include/linux/lm_interface.h | |||
@@ -122,11 +122,9 @@ typedef void (*lm_callback_t) (void *ptr, unsigned int type, void *data); | |||
122 | */ | 122 | */ |
123 | 123 | ||
124 | #define LM_OUT_ST_MASK 0x00000003 | 124 | #define LM_OUT_ST_MASK 0x00000003 |
125 | #define LM_OUT_CACHEABLE 0x00000004 | ||
126 | #define LM_OUT_CANCELED 0x00000008 | 125 | #define LM_OUT_CANCELED 0x00000008 |
127 | #define LM_OUT_ASYNC 0x00000080 | 126 | #define LM_OUT_ASYNC 0x00000080 |
128 | #define LM_OUT_ERROR 0x00000100 | 127 | #define LM_OUT_ERROR 0x00000100 |
129 | #define LM_OUT_CONV_DEADLK 0x00000200 | ||
130 | 128 | ||
131 | /* | 129 | /* |
132 | * lm_callback_t types | 130 | * lm_callback_t types |
@@ -138,9 +136,6 @@ typedef void (*lm_callback_t) (void *ptr, unsigned int type, void *data); | |||
138 | * LM_CB_NEED_RECOVERY | 136 | * LM_CB_NEED_RECOVERY |
139 | * The given journal needs to be recovered. | 137 | * The given journal needs to be recovered. |
140 | * | 138 | * |
141 | * LM_CB_DROPLOCKS | ||
142 | * Reduce the number of cached locks. | ||
143 | * | ||
144 | * LM_CB_ASYNC | 139 | * LM_CB_ASYNC |
145 | * The given lock has been granted. | 140 | * The given lock has been granted. |
146 | */ | 141 | */ |
@@ -149,7 +144,6 @@ typedef void (*lm_callback_t) (void *ptr, unsigned int type, void *data); | |||
149 | #define LM_CB_NEED_D 258 | 144 | #define LM_CB_NEED_D 258 |
150 | #define LM_CB_NEED_S 259 | 145 | #define LM_CB_NEED_S 259 |
151 | #define LM_CB_NEED_RECOVERY 260 | 146 | #define LM_CB_NEED_RECOVERY 260 |
152 | #define LM_CB_DROPLOCKS 261 | ||
153 | #define LM_CB_ASYNC 262 | 147 | #define LM_CB_ASYNC 262 |
154 | 148 | ||
155 | /* | 149 | /* |
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 4c4d236ded18..2486eb4edbf1 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
@@ -182,6 +182,9 @@ struct lock_list { | |||
182 | * We record lock dependency chains, so that we can cache them: | 182 | * We record lock dependency chains, so that we can cache them: |
183 | */ | 183 | */ |
184 | struct lock_chain { | 184 | struct lock_chain { |
185 | u8 irq_context; | ||
186 | u8 depth; | ||
187 | u16 base; | ||
185 | struct list_head entry; | 188 | struct list_head entry; |
186 | u64 chain_key; | 189 | u64 chain_key; |
187 | }; | 190 | }; |
@@ -276,14 +279,6 @@ extern void lockdep_init_map(struct lockdep_map *lock, const char *name, | |||
276 | (lock)->dep_map.key, sub) | 279 | (lock)->dep_map.key, sub) |
277 | 280 | ||
278 | /* | 281 | /* |
279 | * To initialize a lockdep_map statically use this macro. | ||
280 | * Note that _name must not be NULL. | ||
281 | */ | ||
282 | #define STATIC_LOCKDEP_MAP_INIT(_name, _key) \ | ||
283 | { .name = (_name), .key = (void *)(_key), } | ||
284 | |||
285 | |||
286 | /* | ||
287 | * Acquire a lock. | 282 | * Acquire a lock. |
288 | * | 283 | * |
289 | * Values for "read": | 284 | * Values for "read": |
diff --git a/include/linux/marker.h b/include/linux/marker.h index 430f6adf9762..1290653f9241 100644 --- a/include/linux/marker.h +++ b/include/linux/marker.h | |||
@@ -44,8 +44,8 @@ struct marker { | |||
44 | */ | 44 | */ |
45 | char state; /* Marker state. */ | 45 | char state; /* Marker state. */ |
46 | char ptype; /* probe type : 0 : single, 1 : multi */ | 46 | char ptype; /* probe type : 0 : single, 1 : multi */ |
47 | void (*call)(const struct marker *mdata, /* Probe wrapper */ | 47 | /* Probe wrapper */ |
48 | void *call_private, const char *fmt, ...); | 48 | void (*call)(const struct marker *mdata, void *call_private, ...); |
49 | struct marker_probe_closure single; | 49 | struct marker_probe_closure single; |
50 | struct marker_probe_closure *multi; | 50 | struct marker_probe_closure *multi; |
51 | } __attribute__((aligned(8))); | 51 | } __attribute__((aligned(8))); |
@@ -58,8 +58,12 @@ struct marker { | |||
58 | * Make sure the alignment of the structure in the __markers section will | 58 | * Make sure the alignment of the structure in the __markers section will |
59 | * not add unwanted padding between the beginning of the section and the | 59 | * not add unwanted padding between the beginning of the section and the |
60 | * structure. Force alignment to the same alignment as the section start. | 60 | * structure. Force alignment to the same alignment as the section start. |
61 | * | ||
62 | * The "generic" argument controls which marker enabling mechanism must be used. | ||
63 | * If generic is true, a variable read is used. | ||
64 | * If generic is false, immediate values are used. | ||
61 | */ | 65 | */ |
62 | #define __trace_mark(name, call_private, format, args...) \ | 66 | #define __trace_mark(generic, name, call_private, format, args...) \ |
63 | do { \ | 67 | do { \ |
64 | static const char __mstrtab_##name[] \ | 68 | static const char __mstrtab_##name[] \ |
65 | __attribute__((section("__markers_strings"))) \ | 69 | __attribute__((section("__markers_strings"))) \ |
@@ -72,15 +76,14 @@ struct marker { | |||
72 | __mark_check_format(format, ## args); \ | 76 | __mark_check_format(format, ## args); \ |
73 | if (unlikely(__mark_##name.state)) { \ | 77 | if (unlikely(__mark_##name.state)) { \ |
74 | (*__mark_##name.call) \ | 78 | (*__mark_##name.call) \ |
75 | (&__mark_##name, call_private, \ | 79 | (&__mark_##name, call_private, ## args);\ |
76 | format, ## args); \ | ||
77 | } \ | 80 | } \ |
78 | } while (0) | 81 | } while (0) |
79 | 82 | ||
80 | extern void marker_update_probe_range(struct marker *begin, | 83 | extern void marker_update_probe_range(struct marker *begin, |
81 | struct marker *end); | 84 | struct marker *end); |
82 | #else /* !CONFIG_MARKERS */ | 85 | #else /* !CONFIG_MARKERS */ |
83 | #define __trace_mark(name, call_private, format, args...) \ | 86 | #define __trace_mark(generic, name, call_private, format, args...) \ |
84 | __mark_check_format(format, ## args) | 87 | __mark_check_format(format, ## args) |
85 | static inline void marker_update_probe_range(struct marker *begin, | 88 | static inline void marker_update_probe_range(struct marker *begin, |
86 | struct marker *end) | 89 | struct marker *end) |
@@ -88,15 +91,30 @@ static inline void marker_update_probe_range(struct marker *begin, | |||
88 | #endif /* CONFIG_MARKERS */ | 91 | #endif /* CONFIG_MARKERS */ |
89 | 92 | ||
90 | /** | 93 | /** |
91 | * trace_mark - Marker | 94 | * trace_mark - Marker using code patching |
92 | * @name: marker name, not quoted. | 95 | * @name: marker name, not quoted. |
93 | * @format: format string | 96 | * @format: format string |
94 | * @args...: variable argument list | 97 | * @args...: variable argument list |
95 | * | 98 | * |
96 | * Places a marker. | 99 | * Places a marker using optimized code patching technique (imv_read()) |
100 | * to be enabled when immediate values are present. | ||
97 | */ | 101 | */ |
98 | #define trace_mark(name, format, args...) \ | 102 | #define trace_mark(name, format, args...) \ |
99 | __trace_mark(name, NULL, format, ## args) | 103 | __trace_mark(0, name, NULL, format, ## args) |
104 | |||
105 | /** | ||
106 | * _trace_mark - Marker using variable read | ||
107 | * @name: marker name, not quoted. | ||
108 | * @format: format string | ||
109 | * @args...: variable argument list | ||
110 | * | ||
111 | * Places a marker using a standard memory read (_imv_read()) to be | ||
112 | * enabled. Should be used for markers in code paths where instruction | ||
113 | * modification based enabling is not welcome. (__init and __exit functions, | ||
114 | * lockdep, some traps, printk). | ||
115 | */ | ||
116 | #define _trace_mark(name, format, args...) \ | ||
117 | __trace_mark(1, name, NULL, format, ## args) | ||
100 | 118 | ||
101 | /** | 119 | /** |
102 | * MARK_NOARGS - Format string for a marker with no argument. | 120 | * MARK_NOARGS - Format string for a marker with no argument. |
@@ -117,9 +135,9 @@ static inline void __printf(1, 2) ___mark_check_format(const char *fmt, ...) | |||
117 | extern marker_probe_func __mark_empty_function; | 135 | extern marker_probe_func __mark_empty_function; |
118 | 136 | ||
119 | extern void marker_probe_cb(const struct marker *mdata, | 137 | extern void marker_probe_cb(const struct marker *mdata, |
120 | void *call_private, const char *fmt, ...); | 138 | void *call_private, ...); |
121 | extern void marker_probe_cb_noarg(const struct marker *mdata, | 139 | extern void marker_probe_cb_noarg(const struct marker *mdata, |
122 | void *call_private, const char *fmt, ...); | 140 | void *call_private, ...); |
123 | 141 | ||
124 | /* | 142 | /* |
125 | * Connect a probe to a marker. | 143 | * Connect a probe to a marker. |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index a744383d16e9..81b3dd5206e0 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -398,7 +398,8 @@ int mlx4_srq_query(struct mlx4_dev *dev, struct mlx4_srq *srq, int *limit_waterm | |||
398 | int mlx4_INIT_PORT(struct mlx4_dev *dev, int port); | 398 | int mlx4_INIT_PORT(struct mlx4_dev *dev, int port); |
399 | int mlx4_CLOSE_PORT(struct mlx4_dev *dev, int port); | 399 | int mlx4_CLOSE_PORT(struct mlx4_dev *dev, int port); |
400 | 400 | ||
401 | int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16]); | 401 | int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], |
402 | int block_mcast_loopback); | ||
402 | int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16]); | 403 | int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16]); |
403 | 404 | ||
404 | int mlx4_map_phys_fmr(struct mlx4_dev *dev, struct mlx4_fmr *fmr, u64 *page_list, | 405 | int mlx4_map_phys_fmr(struct mlx4_dev *dev, struct mlx4_fmr *fmr, u64 *page_list, |
diff --git a/include/linux/mm.h b/include/linux/mm.h index cf1cd3a2ed78..2128ef7780c6 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -108,6 +108,7 @@ extern unsigned int kobjsize(const void *objp); | |||
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 | #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ |
111 | #define VM_SAO 0x20000000 /* Strong Access Ordering (powerpc) */ | ||
111 | 112 | ||
112 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ | 113 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ |
113 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS | 114 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS |
diff --git a/include/linux/mman.h b/include/linux/mman.h index dab8892e6ff1..30d1073bac3b 100644 --- a/include/linux/mman.h +++ b/include/linux/mman.h | |||
@@ -34,6 +34,32 @@ static inline void vm_unacct_memory(long pages) | |||
34 | } | 34 | } |
35 | 35 | ||
36 | /* | 36 | /* |
37 | * Allow architectures to handle additional protection bits | ||
38 | */ | ||
39 | |||
40 | #ifndef arch_calc_vm_prot_bits | ||
41 | #define arch_calc_vm_prot_bits(prot) 0 | ||
42 | #endif | ||
43 | |||
44 | #ifndef arch_vm_get_page_prot | ||
45 | #define arch_vm_get_page_prot(vm_flags) __pgprot(0) | ||
46 | #endif | ||
47 | |||
48 | #ifndef arch_validate_prot | ||
49 | /* | ||
50 | * This is called from mprotect(). PROT_GROWSDOWN and PROT_GROWSUP have | ||
51 | * already been masked out. | ||
52 | * | ||
53 | * Returns true if the prot flags are valid | ||
54 | */ | ||
55 | static inline int arch_validate_prot(unsigned long prot) | ||
56 | { | ||
57 | return (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM)) == 0; | ||
58 | } | ||
59 | #define arch_validate_prot arch_validate_prot | ||
60 | #endif | ||
61 | |||
62 | /* | ||
37 | * Optimisation macro. It is equivalent to: | 63 | * Optimisation macro. It is equivalent to: |
38 | * (x & bit1) ? bit2 : 0 | 64 | * (x & bit1) ? bit2 : 0 |
39 | * but this version is faster. | 65 | * but this version is faster. |
@@ -51,7 +77,8 @@ calc_vm_prot_bits(unsigned long prot) | |||
51 | { | 77 | { |
52 | return _calc_vm_trans(prot, PROT_READ, VM_READ ) | | 78 | return _calc_vm_trans(prot, PROT_READ, VM_READ ) | |
53 | _calc_vm_trans(prot, PROT_WRITE, VM_WRITE) | | 79 | _calc_vm_trans(prot, PROT_WRITE, VM_WRITE) | |
54 | _calc_vm_trans(prot, PROT_EXEC, VM_EXEC ); | 80 | _calc_vm_trans(prot, PROT_EXEC, VM_EXEC) | |
81 | arch_calc_vm_prot_bits(prot); | ||
55 | } | 82 | } |
56 | 83 | ||
57 | /* | 84 | /* |
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index d0c3abed74c2..143cebf0586f 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h | |||
@@ -135,6 +135,7 @@ extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *, | |||
135 | struct mmc_command *, int); | 135 | struct mmc_command *, int); |
136 | 136 | ||
137 | extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *); | 137 | extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *); |
138 | extern unsigned int mmc_align_data_size(struct mmc_card *, unsigned int); | ||
138 | 139 | ||
139 | extern int __mmc_claim_host(struct mmc_host *host, atomic_t *abort); | 140 | extern int __mmc_claim_host(struct mmc_host *host, atomic_t *abort); |
140 | extern void mmc_release_host(struct mmc_host *host); | 141 | extern void mmc_release_host(struct mmc_host *host); |
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 7ab962fa1d73..10a2080086ca 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
@@ -51,8 +51,30 @@ struct mmc_ios { | |||
51 | 51 | ||
52 | struct mmc_host_ops { | 52 | struct mmc_host_ops { |
53 | void (*request)(struct mmc_host *host, struct mmc_request *req); | 53 | void (*request)(struct mmc_host *host, struct mmc_request *req); |
54 | /* | ||
55 | * Avoid calling these three functions too often or in a "fast path", | ||
56 | * since underlaying controller might implement them in an expensive | ||
57 | * and/or slow way. | ||
58 | * | ||
59 | * Also note that these functions might sleep, so don't call them | ||
60 | * in the atomic contexts! | ||
61 | * | ||
62 | * Return values for the get_ro callback should be: | ||
63 | * 0 for a read/write card | ||
64 | * 1 for a read-only card | ||
65 | * -ENOSYS when not supported (equal to NULL callback) | ||
66 | * or a negative errno value when something bad happened | ||
67 | * | ||
68 | * Return values for the get_ro callback should be: | ||
69 | * 0 for a absent card | ||
70 | * 1 for a present card | ||
71 | * -ENOSYS when not supported (equal to NULL callback) | ||
72 | * or a negative errno value when something bad happened | ||
73 | */ | ||
54 | void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios); | 74 | void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios); |
55 | int (*get_ro)(struct mmc_host *host); | 75 | int (*get_ro)(struct mmc_host *host); |
76 | int (*get_cd)(struct mmc_host *host); | ||
77 | |||
56 | void (*enable_sdio_irq)(struct mmc_host *host, int enable); | 78 | void (*enable_sdio_irq)(struct mmc_host *host, int enable); |
57 | }; | 79 | }; |
58 | 80 | ||
@@ -89,11 +111,11 @@ struct mmc_host { | |||
89 | unsigned long caps; /* Host capabilities */ | 111 | unsigned long caps; /* Host capabilities */ |
90 | 112 | ||
91 | #define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */ | 113 | #define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */ |
92 | #define MMC_CAP_MULTIWRITE (1 << 1) /* Can accurately report bytes sent to card on error */ | 114 | #define MMC_CAP_MMC_HIGHSPEED (1 << 1) /* Can do MMC high-speed timing */ |
93 | #define MMC_CAP_MMC_HIGHSPEED (1 << 2) /* Can do MMC high-speed timing */ | 115 | #define MMC_CAP_SD_HIGHSPEED (1 << 2) /* Can do SD high-speed timing */ |
94 | #define MMC_CAP_SD_HIGHSPEED (1 << 3) /* Can do SD high-speed timing */ | 116 | #define MMC_CAP_SDIO_IRQ (1 << 3) /* Can signal pending SDIO IRQs */ |
95 | #define MMC_CAP_SDIO_IRQ (1 << 4) /* Can signal pending SDIO IRQs */ | 117 | #define MMC_CAP_SPI (1 << 4) /* Talks only SPI protocols */ |
96 | #define MMC_CAP_SPI (1 << 5) /* Talks only SPI protocols */ | 118 | #define MMC_CAP_NEEDS_POLL (1 << 5) /* Needs polling for card-detection */ |
97 | 119 | ||
98 | /* host specific block data */ | 120 | /* host specific block data */ |
99 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ | 121 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ |
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index 4236fbf0b6fb..14b81f3e5232 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h | |||
@@ -16,7 +16,6 @@ | |||
16 | * Based strongly on code by: | 16 | * Based strongly on code by: |
17 | * | 17 | * |
18 | * Author: Yong-iL Joh <tolkien@mizi.com> | 18 | * Author: Yong-iL Joh <tolkien@mizi.com> |
19 | * Date : $Date: 2002/06/18 12:37:30 $ | ||
20 | * | 19 | * |
21 | * Author: Andrew Christian | 20 | * Author: Andrew Christian |
22 | * 15 May 2002 | 21 | * 15 May 2002 |
diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h index b050f4d7b41f..07bee4a0d457 100644 --- a/include/linux/mmc/sdio_func.h +++ b/include/linux/mmc/sdio_func.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * include/linux/mmc/sdio_func.h | 2 | * include/linux/mmc/sdio_func.h |
3 | * | 3 | * |
4 | * Copyright 2007 Pierre Ossman | 4 | * Copyright 2007-2008 Pierre Ossman |
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 |
@@ -46,6 +46,8 @@ struct sdio_func { | |||
46 | unsigned max_blksize; /* maximum block size */ | 46 | unsigned max_blksize; /* maximum block size */ |
47 | unsigned cur_blksize; /* current block size */ | 47 | unsigned cur_blksize; /* current block size */ |
48 | 48 | ||
49 | unsigned enable_timeout; /* max enable timeout in msec */ | ||
50 | |||
49 | unsigned int state; /* function state */ | 51 | unsigned int state; /* function state */ |
50 | #define SDIO_STATE_PRESENT (1<<0) /* present in sysfs */ | 52 | #define SDIO_STATE_PRESENT (1<<0) /* present in sysfs */ |
51 | 53 | ||
@@ -120,23 +122,22 @@ extern int sdio_set_block_size(struct sdio_func *func, unsigned blksz); | |||
120 | extern int sdio_claim_irq(struct sdio_func *func, sdio_irq_handler_t *handler); | 122 | extern int sdio_claim_irq(struct sdio_func *func, sdio_irq_handler_t *handler); |
121 | extern int sdio_release_irq(struct sdio_func *func); | 123 | extern int sdio_release_irq(struct sdio_func *func); |
122 | 124 | ||
123 | extern unsigned char sdio_readb(struct sdio_func *func, | 125 | extern unsigned int sdio_align_size(struct sdio_func *func, unsigned int sz); |
124 | unsigned int addr, int *err_ret); | 126 | |
125 | extern unsigned short sdio_readw(struct sdio_func *func, | 127 | extern u8 sdio_readb(struct sdio_func *func, unsigned int addr, int *err_ret); |
126 | unsigned int addr, int *err_ret); | 128 | extern u16 sdio_readw(struct sdio_func *func, unsigned int addr, int *err_ret); |
127 | extern unsigned long sdio_readl(struct sdio_func *func, | 129 | extern u32 sdio_readl(struct sdio_func *func, unsigned int addr, int *err_ret); |
128 | unsigned int addr, int *err_ret); | ||
129 | 130 | ||
130 | extern int sdio_memcpy_fromio(struct sdio_func *func, void *dst, | 131 | extern int sdio_memcpy_fromio(struct sdio_func *func, void *dst, |
131 | unsigned int addr, int count); | 132 | unsigned int addr, int count); |
132 | extern int sdio_readsb(struct sdio_func *func, void *dst, | 133 | extern int sdio_readsb(struct sdio_func *func, void *dst, |
133 | unsigned int addr, int count); | 134 | unsigned int addr, int count); |
134 | 135 | ||
135 | extern void sdio_writeb(struct sdio_func *func, unsigned char b, | 136 | extern void sdio_writeb(struct sdio_func *func, u8 b, |
136 | unsigned int addr, int *err_ret); | 137 | unsigned int addr, int *err_ret); |
137 | extern void sdio_writew(struct sdio_func *func, unsigned short b, | 138 | extern void sdio_writew(struct sdio_func *func, u16 b, |
138 | unsigned int addr, int *err_ret); | 139 | unsigned int addr, int *err_ret); |
139 | extern void sdio_writel(struct sdio_func *func, unsigned long b, | 140 | extern void sdio_writel(struct sdio_func *func, u32 b, |
140 | unsigned int addr, int *err_ret); | 141 | unsigned int addr, int *err_ret); |
141 | 142 | ||
142 | extern int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr, | 143 | extern int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr, |
diff --git a/include/linux/mmiotrace.h b/include/linux/mmiotrace.h new file mode 100644 index 000000000000..61d19e1b7a0b --- /dev/null +++ b/include/linux/mmiotrace.h | |||
@@ -0,0 +1,85 @@ | |||
1 | #ifndef MMIOTRACE_H | ||
2 | #define MMIOTRACE_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/list.h> | ||
6 | |||
7 | struct kmmio_probe; | ||
8 | struct pt_regs; | ||
9 | |||
10 | typedef void (*kmmio_pre_handler_t)(struct kmmio_probe *, | ||
11 | struct pt_regs *, unsigned long addr); | ||
12 | typedef void (*kmmio_post_handler_t)(struct kmmio_probe *, | ||
13 | unsigned long condition, struct pt_regs *); | ||
14 | |||
15 | struct kmmio_probe { | ||
16 | struct list_head list; /* kmmio internal list */ | ||
17 | unsigned long addr; /* start location of the probe point */ | ||
18 | unsigned long len; /* length of the probe region */ | ||
19 | kmmio_pre_handler_t pre_handler; /* Called before addr is executed. */ | ||
20 | kmmio_post_handler_t post_handler; /* Called after addr is executed */ | ||
21 | void *private; | ||
22 | }; | ||
23 | |||
24 | /* kmmio is active by some kmmio_probes? */ | ||
25 | static inline int is_kmmio_active(void) | ||
26 | { | ||
27 | extern unsigned int kmmio_count; | ||
28 | return kmmio_count; | ||
29 | } | ||
30 | |||
31 | extern int register_kmmio_probe(struct kmmio_probe *p); | ||
32 | extern void unregister_kmmio_probe(struct kmmio_probe *p); | ||
33 | |||
34 | /* Called from page fault handler. */ | ||
35 | extern int kmmio_handler(struct pt_regs *regs, unsigned long addr); | ||
36 | |||
37 | /* Called from ioremap.c */ | ||
38 | #ifdef CONFIG_MMIOTRACE | ||
39 | extern void mmiotrace_ioremap(resource_size_t offset, unsigned long size, | ||
40 | void __iomem *addr); | ||
41 | extern void mmiotrace_iounmap(volatile void __iomem *addr); | ||
42 | #else | ||
43 | static inline void mmiotrace_ioremap(resource_size_t offset, | ||
44 | unsigned long size, void __iomem *addr) | ||
45 | { | ||
46 | } | ||
47 | |||
48 | static inline void mmiotrace_iounmap(volatile void __iomem *addr) | ||
49 | { | ||
50 | } | ||
51 | #endif /* CONFIG_MMIOTRACE_HOOKS */ | ||
52 | |||
53 | enum mm_io_opcode { | ||
54 | MMIO_READ = 0x1, /* struct mmiotrace_rw */ | ||
55 | MMIO_WRITE = 0x2, /* struct mmiotrace_rw */ | ||
56 | MMIO_PROBE = 0x3, /* struct mmiotrace_map */ | ||
57 | MMIO_UNPROBE = 0x4, /* struct mmiotrace_map */ | ||
58 | MMIO_MARKER = 0x5, /* raw char data */ | ||
59 | MMIO_UNKNOWN_OP = 0x6, /* struct mmiotrace_rw */ | ||
60 | }; | ||
61 | |||
62 | struct mmiotrace_rw { | ||
63 | resource_size_t phys; /* PCI address of register */ | ||
64 | unsigned long value; | ||
65 | unsigned long pc; /* optional program counter */ | ||
66 | int map_id; | ||
67 | unsigned char opcode; /* one of MMIO_{READ,WRITE,UNKNOWN_OP} */ | ||
68 | unsigned char width; /* size of register access in bytes */ | ||
69 | }; | ||
70 | |||
71 | struct mmiotrace_map { | ||
72 | resource_size_t phys; /* base address in PCI space */ | ||
73 | unsigned long virt; /* base virtual address */ | ||
74 | unsigned long len; /* mapping size */ | ||
75 | int map_id; | ||
76 | unsigned char opcode; /* MMIO_PROBE or MMIO_UNPROBE */ | ||
77 | }; | ||
78 | |||
79 | /* in kernel/trace/trace_mmiotrace.c */ | ||
80 | extern void enable_mmiotrace(void); | ||
81 | extern void disable_mmiotrace(void); | ||
82 | extern void mmio_trace_rw(struct mmiotrace_rw *rw); | ||
83 | extern void mmio_trace_mapping(struct mmiotrace_map *map); | ||
84 | |||
85 | #endif /* MMIOTRACE_H */ | ||
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 69b2342d5ebb..c4db5827963d 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
@@ -159,6 +159,15 @@ struct ap_device_id { | |||
159 | 159 | ||
160 | #define AP_DEVICE_ID_MATCH_DEVICE_TYPE 0x01 | 160 | #define AP_DEVICE_ID_MATCH_DEVICE_TYPE 0x01 |
161 | 161 | ||
162 | /* s390 css bus devices (subchannels) */ | ||
163 | struct css_device_id { | ||
164 | __u8 match_flags; | ||
165 | __u8 type; /* subchannel type */ | ||
166 | __u16 pad2; | ||
167 | __u32 pad3; | ||
168 | kernel_ulong_t driver_data; | ||
169 | }; | ||
170 | |||
162 | #define ACPI_ID_LEN 16 /* only 9 bytes needed here, 16 bytes are used */ | 171 | #define ACPI_ID_LEN 16 /* only 9 bytes needed here, 16 bytes are used */ |
163 | /* to workaround crosscompile issues */ | 172 | /* to workaround crosscompile issues */ |
164 | 173 | ||
diff --git a/include/linux/mpage.h b/include/linux/mpage.h index 068a0c9946af..5c42821da2d1 100644 --- a/include/linux/mpage.h +++ b/include/linux/mpage.h | |||
@@ -11,11 +11,21 @@ | |||
11 | */ | 11 | */ |
12 | #ifdef CONFIG_BLOCK | 12 | #ifdef CONFIG_BLOCK |
13 | 13 | ||
14 | struct mpage_data { | ||
15 | struct bio *bio; | ||
16 | sector_t last_block_in_bio; | ||
17 | get_block_t *get_block; | ||
18 | unsigned use_writepage; | ||
19 | }; | ||
20 | |||
14 | struct writeback_control; | 21 | struct writeback_control; |
15 | 22 | ||
23 | struct bio *mpage_bio_submit(int rw, struct bio *bio); | ||
16 | int mpage_readpages(struct address_space *mapping, struct list_head *pages, | 24 | int mpage_readpages(struct address_space *mapping, struct list_head *pages, |
17 | unsigned nr_pages, get_block_t get_block); | 25 | unsigned nr_pages, get_block_t get_block); |
18 | int mpage_readpage(struct page *page, get_block_t get_block); | 26 | int mpage_readpage(struct page *page, get_block_t get_block); |
27 | int __mpage_writepage(struct page *page, struct writeback_control *wbc, | ||
28 | void *data); | ||
19 | int mpage_writepages(struct address_space *mapping, | 29 | int mpage_writepages(struct address_space *mapping, |
20 | struct writeback_control *wbc, get_block_t get_block); | 30 | struct writeback_control *wbc, get_block_t get_block); |
21 | int mpage_writepage(struct page *page, get_block_t *get_block, | 31 | int mpage_writepage(struct page *page, get_block_t *get_block, |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 27d6a8d98cef..29d261918734 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -12,9 +12,19 @@ | |||
12 | #include <linux/magic.h> | 12 | #include <linux/magic.h> |
13 | 13 | ||
14 | /* Default timeout values */ | 14 | /* Default timeout values */ |
15 | #define NFS_DEF_UDP_TIMEO (11) | ||
16 | #define NFS_DEF_UDP_RETRANS (3) | ||
17 | #define NFS_DEF_TCP_TIMEO (600) | ||
18 | #define NFS_DEF_TCP_RETRANS (2) | ||
19 | |||
15 | #define NFS_MAX_UDP_TIMEOUT (60*HZ) | 20 | #define NFS_MAX_UDP_TIMEOUT (60*HZ) |
16 | #define NFS_MAX_TCP_TIMEOUT (600*HZ) | 21 | #define NFS_MAX_TCP_TIMEOUT (600*HZ) |
17 | 22 | ||
23 | #define NFS_DEF_ACREGMIN (3) | ||
24 | #define NFS_DEF_ACREGMAX (60) | ||
25 | #define NFS_DEF_ACDIRMIN (30) | ||
26 | #define NFS_DEF_ACDIRMAX (60) | ||
27 | |||
18 | /* | 28 | /* |
19 | * When flushing a cluster of dirty pages, there can be different | 29 | * When flushing a cluster of dirty pages, there can be different |
20 | * strategies: | 30 | * strategies: |
diff --git a/include/linux/nfs_iostat.h b/include/linux/nfs_iostat.h new file mode 100644 index 000000000000..1cb9a3fed2b3 --- /dev/null +++ b/include/linux/nfs_iostat.h | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | * User-space visible declarations for NFS client per-mount | ||
3 | * point statistics | ||
4 | * | ||
5 | * Copyright (C) 2005, 2006 Chuck Lever <cel@netapp.com> | ||
6 | * | ||
7 | * NFS client per-mount statistics provide information about the | ||
8 | * health of the NFS client and the health of each NFS mount point. | ||
9 | * Generally these are not for detailed problem diagnosis, but | ||
10 | * simply to indicate that there is a problem. | ||
11 | * | ||
12 | * These counters are not meant to be human-readable, but are meant | ||
13 | * to be integrated into system monitoring tools such as "sar" and | ||
14 | * "iostat". As such, the counters are sampled by the tools over | ||
15 | * time, and are never zeroed after a file system is mounted. | ||
16 | * Moving averages can be computed by the tools by taking the | ||
17 | * difference between two instantaneous samples and dividing that | ||
18 | * by the time between the samples. | ||
19 | */ | ||
20 | |||
21 | #ifndef _LINUX_NFS_IOSTAT | ||
22 | #define _LINUX_NFS_IOSTAT | ||
23 | |||
24 | #define NFS_IOSTAT_VERS "1.0" | ||
25 | |||
26 | /* | ||
27 | * NFS byte counters | ||
28 | * | ||
29 | * 1. SERVER - the number of payload bytes read from or written | ||
30 | * to the server by the NFS client via an NFS READ or WRITE | ||
31 | * request. | ||
32 | * | ||
33 | * 2. NORMAL - the number of bytes read or written by applications | ||
34 | * via the read(2) and write(2) system call interfaces. | ||
35 | * | ||
36 | * 3. DIRECT - the number of bytes read or written from files | ||
37 | * opened with the O_DIRECT flag. | ||
38 | * | ||
39 | * These counters give a view of the data throughput into and out | ||
40 | * of the NFS client. Comparing the number of bytes requested by | ||
41 | * an application with the number of bytes the client requests from | ||
42 | * the server can provide an indication of client efficiency | ||
43 | * (per-op, cache hits, etc). | ||
44 | * | ||
45 | * These counters can also help characterize which access methods | ||
46 | * are in use. DIRECT by itself shows whether there is any O_DIRECT | ||
47 | * traffic. NORMAL + DIRECT shows how much data is going through | ||
48 | * the system call interface. A large amount of SERVER traffic | ||
49 | * without much NORMAL or DIRECT traffic shows that applications | ||
50 | * are using mapped files. | ||
51 | * | ||
52 | * NFS page counters | ||
53 | * | ||
54 | * These count the number of pages read or written via nfs_readpage(), | ||
55 | * nfs_readpages(), or their write equivalents. | ||
56 | * | ||
57 | * NB: When adding new byte counters, please include the measured | ||
58 | * units in the name of each byte counter to help users of this | ||
59 | * interface determine what exactly is being counted. | ||
60 | */ | ||
61 | enum nfs_stat_bytecounters { | ||
62 | NFSIOS_NORMALREADBYTES = 0, | ||
63 | NFSIOS_NORMALWRITTENBYTES, | ||
64 | NFSIOS_DIRECTREADBYTES, | ||
65 | NFSIOS_DIRECTWRITTENBYTES, | ||
66 | NFSIOS_SERVERREADBYTES, | ||
67 | NFSIOS_SERVERWRITTENBYTES, | ||
68 | NFSIOS_READPAGES, | ||
69 | NFSIOS_WRITEPAGES, | ||
70 | __NFSIOS_BYTESMAX, | ||
71 | }; | ||
72 | |||
73 | /* | ||
74 | * NFS event counters | ||
75 | * | ||
76 | * These counters provide a low-overhead way of monitoring client | ||
77 | * activity without enabling NFS trace debugging. The counters | ||
78 | * show the rate at which VFS requests are made, and how often the | ||
79 | * client invalidates its data and attribute caches. This allows | ||
80 | * system administrators to monitor such things as how close-to-open | ||
81 | * is working, and answer questions such as "why are there so many | ||
82 | * GETATTR requests on the wire?" | ||
83 | * | ||
84 | * They also count anamolous events such as short reads and writes, | ||
85 | * silly renames due to close-after-delete, and operations that | ||
86 | * change the size of a file (such operations can often be the | ||
87 | * source of data corruption if applications aren't using file | ||
88 | * locking properly). | ||
89 | */ | ||
90 | enum nfs_stat_eventcounters { | ||
91 | NFSIOS_INODEREVALIDATE = 0, | ||
92 | NFSIOS_DENTRYREVALIDATE, | ||
93 | NFSIOS_DATAINVALIDATE, | ||
94 | NFSIOS_ATTRINVALIDATE, | ||
95 | NFSIOS_VFSOPEN, | ||
96 | NFSIOS_VFSLOOKUP, | ||
97 | NFSIOS_VFSACCESS, | ||
98 | NFSIOS_VFSUPDATEPAGE, | ||
99 | NFSIOS_VFSREADPAGE, | ||
100 | NFSIOS_VFSREADPAGES, | ||
101 | NFSIOS_VFSWRITEPAGE, | ||
102 | NFSIOS_VFSWRITEPAGES, | ||
103 | NFSIOS_VFSGETDENTS, | ||
104 | NFSIOS_VFSSETATTR, | ||
105 | NFSIOS_VFSFLUSH, | ||
106 | NFSIOS_VFSFSYNC, | ||
107 | NFSIOS_VFSLOCK, | ||
108 | NFSIOS_VFSRELEASE, | ||
109 | NFSIOS_CONGESTIONWAIT, | ||
110 | NFSIOS_SETATTRTRUNC, | ||
111 | NFSIOS_EXTENDWRITE, | ||
112 | NFSIOS_SILLYRENAME, | ||
113 | NFSIOS_SHORTREAD, | ||
114 | NFSIOS_SHORTWRITE, | ||
115 | NFSIOS_DELAY, | ||
116 | __NFSIOS_COUNTSMAX, | ||
117 | }; | ||
118 | |||
119 | #endif /* _LINUX_NFS_IOSTAT */ | ||
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index a1676e19e491..3c60685d972b 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h | |||
@@ -27,9 +27,12 @@ | |||
27 | /* | 27 | /* |
28 | * Valid flags for a dirty buffer | 28 | * Valid flags for a dirty buffer |
29 | */ | 29 | */ |
30 | #define PG_BUSY 0 | 30 | enum { |
31 | #define PG_NEED_COMMIT 1 | 31 | PG_BUSY = 0, |
32 | #define PG_NEED_RESCHED 2 | 32 | PG_CLEAN, |
33 | PG_NEED_COMMIT, | ||
34 | PG_NEED_RESCHED, | ||
35 | }; | ||
33 | 36 | ||
34 | struct nfs_inode; | 37 | struct nfs_inode; |
35 | struct nfs_page { | 38 | struct nfs_page { |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 24263bb8e0be..8c77c11224d1 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -829,9 +829,8 @@ struct nfs_rpc_ops { | |||
829 | int (*write_done) (struct rpc_task *, struct nfs_write_data *); | 829 | int (*write_done) (struct rpc_task *, struct nfs_write_data *); |
830 | void (*commit_setup) (struct nfs_write_data *, struct rpc_message *); | 830 | void (*commit_setup) (struct nfs_write_data *, struct rpc_message *); |
831 | int (*commit_done) (struct rpc_task *, struct nfs_write_data *); | 831 | int (*commit_done) (struct rpc_task *, struct nfs_write_data *); |
832 | int (*file_open) (struct inode *, struct file *); | ||
833 | int (*file_release) (struct inode *, struct file *); | ||
834 | int (*lock)(struct file *, int, struct file_lock *); | 832 | int (*lock)(struct file *, int, struct file_lock *); |
833 | int (*lock_check_bounds)(const struct file_lock *); | ||
835 | void (*clear_acl_cache)(struct inode *); | 834 | void (*clear_acl_cache)(struct inode *); |
836 | }; | 835 | }; |
837 | 836 | ||
diff --git a/include/linux/of_device.h b/include/linux/of_device.h index afe338217d91..d3a74e00a3e1 100644 --- a/include/linux/of_device.h +++ b/include/linux/of_device.h | |||
@@ -24,4 +24,7 @@ static inline void of_device_free(struct of_device *dev) | |||
24 | of_release_dev(&dev->dev); | 24 | of_release_dev(&dev->dev); |
25 | } | 25 | } |
26 | 26 | ||
27 | extern ssize_t of_device_get_modalias(struct of_device *ofdev, | ||
28 | char *str, ssize_t len); | ||
29 | |||
27 | #endif /* _LINUX_OF_DEVICE_H */ | 30 | #endif /* _LINUX_OF_DEVICE_H */ |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 6755cf5ac109..cfc2297c3e28 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -17,8 +17,7 @@ | |||
17 | #ifndef LINUX_PCI_H | 17 | #ifndef LINUX_PCI_H |
18 | #define LINUX_PCI_H | 18 | #define LINUX_PCI_H |
19 | 19 | ||
20 | /* Include the pci register defines */ | 20 | #include <linux/pci_regs.h> /* The pci register defines */ |
21 | #include <linux/pci_regs.h> | ||
22 | 21 | ||
23 | /* | 22 | /* |
24 | * The PCI interface treats multi-function devices as independent | 23 | * The PCI interface treats multi-function devices as independent |
@@ -49,12 +48,22 @@ | |||
49 | #include <linux/list.h> | 48 | #include <linux/list.h> |
50 | #include <linux/compiler.h> | 49 | #include <linux/compiler.h> |
51 | #include <linux/errno.h> | 50 | #include <linux/errno.h> |
51 | #include <linux/kobject.h> | ||
52 | #include <asm/atomic.h> | 52 | #include <asm/atomic.h> |
53 | #include <linux/device.h> | 53 | #include <linux/device.h> |
54 | 54 | ||
55 | /* Include the ID list */ | 55 | /* Include the ID list */ |
56 | #include <linux/pci_ids.h> | 56 | #include <linux/pci_ids.h> |
57 | 57 | ||
58 | /* pci_slot represents a physical slot */ | ||
59 | struct pci_slot { | ||
60 | struct pci_bus *bus; /* The bus this slot is on */ | ||
61 | struct list_head list; /* node in list of slots on this bus */ | ||
62 | struct hotplug_slot *hotplug; /* Hotplug info (migrate over time) */ | ||
63 | unsigned char number; /* PCI_SLOT(pci_dev->devfn) */ | ||
64 | struct kobject kobj; | ||
65 | }; | ||
66 | |||
58 | /* File state for mmap()s on /proc/bus/pci/X/Y */ | 67 | /* File state for mmap()s on /proc/bus/pci/X/Y */ |
59 | enum pci_mmap_state { | 68 | enum pci_mmap_state { |
60 | pci_mmap_io, | 69 | pci_mmap_io, |
@@ -147,6 +156,7 @@ struct pci_dev { | |||
147 | 156 | ||
148 | void *sysdata; /* hook for sys-specific extension */ | 157 | void *sysdata; /* hook for sys-specific extension */ |
149 | struct proc_dir_entry *procent; /* device entry in /proc/bus/pci */ | 158 | struct proc_dir_entry *procent; /* device entry in /proc/bus/pci */ |
159 | struct pci_slot *slot; /* Physical slot this device is in */ | ||
150 | 160 | ||
151 | unsigned int devfn; /* encoded device & function index */ | 161 | unsigned int devfn; /* encoded device & function index */ |
152 | unsigned short vendor; | 162 | unsigned short vendor; |
@@ -172,6 +182,13 @@ struct pci_dev { | |||
172 | pci_power_t current_state; /* Current operating state. In ACPI-speak, | 182 | pci_power_t current_state; /* Current operating state. In ACPI-speak, |
173 | this is D0-D3, D0 being fully functional, | 183 | this is D0-D3, D0 being fully functional, |
174 | and D3 being off. */ | 184 | and D3 being off. */ |
185 | int pm_cap; /* PM capability offset in the | ||
186 | configuration space */ | ||
187 | unsigned int pme_support:5; /* Bitmask of states from which PME# | ||
188 | can be generated */ | ||
189 | unsigned int d1_support:1; /* Low power state D1 is supported */ | ||
190 | unsigned int d2_support:1; /* Low power state D2 is supported */ | ||
191 | unsigned int no_d1d2:1; /* Only allow D0 and D3 */ | ||
175 | 192 | ||
176 | #ifdef CONFIG_PCIEASPM | 193 | #ifdef CONFIG_PCIEASPM |
177 | struct pcie_link_state *link_state; /* ASPM link state. */ | 194 | struct pcie_link_state *link_state; /* ASPM link state. */ |
@@ -196,7 +213,6 @@ struct pci_dev { | |||
196 | unsigned int is_added:1; | 213 | unsigned int is_added:1; |
197 | unsigned int is_busmaster:1; /* device is busmaster */ | 214 | unsigned int is_busmaster:1; /* device is busmaster */ |
198 | unsigned int no_msi:1; /* device may not use msi */ | 215 | unsigned int no_msi:1; /* device may not use msi */ |
199 | unsigned int no_d1d2:1; /* only allow d0 or d3 */ | ||
200 | unsigned int block_ucfg_access:1; /* userspace config space access is blocked */ | 216 | unsigned int block_ucfg_access:1; /* userspace config space access is blocked */ |
201 | unsigned int broken_parity_status:1; /* Device generates false positive parity */ | 217 | unsigned int broken_parity_status:1; /* Device generates false positive parity */ |
202 | unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */ | 218 | unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */ |
@@ -273,6 +289,7 @@ struct pci_bus { | |||
273 | struct list_head children; /* list of child buses */ | 289 | struct list_head children; /* list of child buses */ |
274 | struct list_head devices; /* list of devices on this bus */ | 290 | struct list_head devices; /* list of devices on this bus */ |
275 | struct pci_dev *self; /* bridge device as seen by parent */ | 291 | struct pci_dev *self; /* bridge device as seen by parent */ |
292 | struct list_head slots; /* list of slots on this bus */ | ||
276 | struct resource *resource[PCI_BUS_NUM_RESOURCES]; | 293 | struct resource *resource[PCI_BUS_NUM_RESOURCES]; |
277 | /* address space routed to this bus */ | 294 | /* address space routed to this bus */ |
278 | 295 | ||
@@ -334,7 +351,7 @@ struct pci_bus_region { | |||
334 | struct pci_dynids { | 351 | struct pci_dynids { |
335 | spinlock_t lock; /* protects list, index */ | 352 | spinlock_t lock; /* protects list, index */ |
336 | struct list_head list; /* for IDs added at runtime */ | 353 | struct list_head list; /* for IDs added at runtime */ |
337 | unsigned int use_driver_data:1; /* pci_driver->driver_data is used */ | 354 | unsigned int use_driver_data:1; /* pci_device_id->driver_data is used */ |
338 | }; | 355 | }; |
339 | 356 | ||
340 | /* ---------------------------------------------------------------- */ | 357 | /* ---------------------------------------------------------------- */ |
@@ -396,7 +413,7 @@ struct pci_driver { | |||
396 | int (*resume_early) (struct pci_dev *dev); | 413 | int (*resume_early) (struct pci_dev *dev); |
397 | int (*resume) (struct pci_dev *dev); /* Device woken up */ | 414 | int (*resume) (struct pci_dev *dev); /* Device woken up */ |
398 | void (*shutdown) (struct pci_dev *dev); | 415 | void (*shutdown) (struct pci_dev *dev); |
399 | 416 | struct pm_ext_ops *pm; | |
400 | struct pci_error_handlers *err_handler; | 417 | struct pci_error_handlers *err_handler; |
401 | struct device_driver driver; | 418 | struct device_driver driver; |
402 | struct pci_dynids dynids; | 419 | struct pci_dynids dynids; |
@@ -495,6 +512,10 @@ struct pci_bus *pci_create_bus(struct device *parent, int bus, | |||
495 | struct pci_ops *ops, void *sysdata); | 512 | struct pci_ops *ops, void *sysdata); |
496 | struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, | 513 | struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, |
497 | int busnr); | 514 | int busnr); |
515 | struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, | ||
516 | const char *name); | ||
517 | void pci_destroy_slot(struct pci_slot *slot); | ||
518 | void pci_update_slot_number(struct pci_slot *slot, int slot_nr); | ||
498 | int pci_scan_slot(struct pci_bus *bus, int devfn); | 519 | int pci_scan_slot(struct pci_bus *bus, int devfn); |
499 | struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn); | 520 | struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn); |
500 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); | 521 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); |
@@ -624,6 +645,8 @@ int pci_restore_state(struct pci_dev *dev); | |||
624 | int pci_set_power_state(struct pci_dev *dev, pci_power_t state); | 645 | int pci_set_power_state(struct pci_dev *dev, pci_power_t state); |
625 | pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); | 646 | pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); |
626 | int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable); | 647 | int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable); |
648 | int pci_prepare_to_sleep(struct pci_dev *dev); | ||
649 | int pci_back_from_sleep(struct pci_dev *dev); | ||
627 | 650 | ||
628 | /* Functions for PCI Hotplug drivers to use */ | 651 | /* Functions for PCI Hotplug drivers to use */ |
629 | int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap); | 652 | int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap); |
@@ -845,6 +868,11 @@ static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) | |||
845 | return -EIO; | 868 | return -EIO; |
846 | } | 869 | } |
847 | 870 | ||
871 | static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) | ||
872 | { | ||
873 | return -EIO; | ||
874 | } | ||
875 | |||
848 | static inline int pci_set_dma_max_seg_size(struct pci_dev *dev, | 876 | static inline int pci_set_dma_max_seg_size(struct pci_dev *dev, |
849 | unsigned int size) | 877 | unsigned int size) |
850 | { | 878 | { |
@@ -983,9 +1011,9 @@ static inline void pci_set_drvdata(struct pci_dev *pdev, void *data) | |||
983 | /* If you want to know what to call your pci_dev, ask this function. | 1011 | /* If you want to know what to call your pci_dev, ask this function. |
984 | * Again, it's a wrapper around the generic device. | 1012 | * Again, it's a wrapper around the generic device. |
985 | */ | 1013 | */ |
986 | static inline char *pci_name(struct pci_dev *pdev) | 1014 | static inline const char *pci_name(struct pci_dev *pdev) |
987 | { | 1015 | { |
988 | return pdev->dev.bus_id; | 1016 | return dev_name(&pdev->dev); |
989 | } | 1017 | } |
990 | 1018 | ||
991 | 1019 | ||
@@ -1020,7 +1048,9 @@ enum pci_fixup_pass { | |||
1020 | pci_fixup_header, /* After reading configuration header */ | 1048 | pci_fixup_header, /* After reading configuration header */ |
1021 | pci_fixup_final, /* Final phase of device fixups */ | 1049 | pci_fixup_final, /* Final phase of device fixups */ |
1022 | pci_fixup_enable, /* pci_enable_device() time */ | 1050 | pci_fixup_enable, /* pci_enable_device() time */ |
1023 | pci_fixup_resume, /* pci_enable_device() time */ | 1051 | pci_fixup_resume, /* pci_device_resume() */ |
1052 | pci_fixup_suspend, /* pci_device_suspend */ | ||
1053 | pci_fixup_resume_early, /* pci_device_resume_early() */ | ||
1024 | }; | 1054 | }; |
1025 | 1055 | ||
1026 | /* Anonymous variables would be nice... */ | 1056 | /* Anonymous variables would be nice... */ |
@@ -1042,6 +1072,12 @@ enum pci_fixup_pass { | |||
1042 | #define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \ | 1072 | #define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \ |
1043 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \ | 1073 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \ |
1044 | resume##vendor##device##hook, vendor, device, hook) | 1074 | resume##vendor##device##hook, vendor, device, hook) |
1075 | #define DECLARE_PCI_FIXUP_RESUME_EARLY(vendor, device, hook) \ | ||
1076 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \ | ||
1077 | resume_early##vendor##device##hook, vendor, device, hook) | ||
1078 | #define DECLARE_PCI_FIXUP_SUSPEND(vendor, device, hook) \ | ||
1079 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \ | ||
1080 | suspend##vendor##device##hook, vendor, device, hook) | ||
1045 | 1081 | ||
1046 | 1082 | ||
1047 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); | 1083 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); |
@@ -1066,7 +1102,10 @@ extern int pci_pci_problems; | |||
1066 | extern unsigned long pci_cardbus_io_size; | 1102 | extern unsigned long pci_cardbus_io_size; |
1067 | extern unsigned long pci_cardbus_mem_size; | 1103 | extern unsigned long pci_cardbus_mem_size; |
1068 | 1104 | ||
1069 | extern int pcibios_add_platform_entries(struct pci_dev *dev); | 1105 | int pcibios_add_platform_entries(struct pci_dev *dev); |
1106 | void pcibios_disable_device(struct pci_dev *dev); | ||
1107 | int pcibios_set_pcie_reset_state(struct pci_dev *dev, | ||
1108 | enum pcie_reset_state state); | ||
1070 | 1109 | ||
1071 | #ifdef CONFIG_PCI_MMCONFIG | 1110 | #ifdef CONFIG_PCI_MMCONFIG |
1072 | extern void __init pci_mmcfg_early_init(void); | 1111 | extern void __init pci_mmcfg_early_init(void); |
diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h index 8f67e8f2a3cc..a08cd06b541a 100644 --- a/include/linux/pci_hotplug.h +++ b/include/linux/pci_hotplug.h | |||
@@ -95,9 +95,6 @@ struct hotplug_slot_attribute { | |||
95 | * @get_adapter_status: Called to get see if an adapter is present in the slot or not. | 95 | * @get_adapter_status: Called to get see if an adapter is present in the slot or not. |
96 | * If this field is NULL, the value passed in the struct hotplug_slot_info | 96 | * If this field is NULL, the value passed in the struct hotplug_slot_info |
97 | * will be used when this value is requested by a user. | 97 | * will be used when this value is requested by a user. |
98 | * @get_address: Called to get pci address of a slot. | ||
99 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
100 | * will be used when this value is requested by a user. | ||
101 | * @get_max_bus_speed: Called to get the max bus speed for a slot. | 98 | * @get_max_bus_speed: Called to get the max bus speed for a slot. |
102 | * If this field is NULL, the value passed in the struct hotplug_slot_info | 99 | * If this field is NULL, the value passed in the struct hotplug_slot_info |
103 | * will be used when this value is requested by a user. | 100 | * will be used when this value is requested by a user. |
@@ -120,7 +117,6 @@ struct hotplug_slot_ops { | |||
120 | int (*get_attention_status) (struct hotplug_slot *slot, u8 *value); | 117 | int (*get_attention_status) (struct hotplug_slot *slot, u8 *value); |
121 | int (*get_latch_status) (struct hotplug_slot *slot, u8 *value); | 118 | int (*get_latch_status) (struct hotplug_slot *slot, u8 *value); |
122 | int (*get_adapter_status) (struct hotplug_slot *slot, u8 *value); | 119 | int (*get_adapter_status) (struct hotplug_slot *slot, u8 *value); |
123 | int (*get_address) (struct hotplug_slot *slot, u32 *value); | ||
124 | int (*get_max_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value); | 120 | int (*get_max_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value); |
125 | int (*get_cur_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value); | 121 | int (*get_cur_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value); |
126 | }; | 122 | }; |
@@ -140,7 +136,6 @@ struct hotplug_slot_info { | |||
140 | u8 attention_status; | 136 | u8 attention_status; |
141 | u8 latch_status; | 137 | u8 latch_status; |
142 | u8 adapter_status; | 138 | u8 adapter_status; |
143 | u32 address; | ||
144 | enum pci_bus_speed max_bus_speed; | 139 | enum pci_bus_speed max_bus_speed; |
145 | enum pci_bus_speed cur_bus_speed; | 140 | enum pci_bus_speed cur_bus_speed; |
146 | }; | 141 | }; |
@@ -166,15 +161,14 @@ struct hotplug_slot { | |||
166 | 161 | ||
167 | /* Variables below this are for use only by the hotplug pci core. */ | 162 | /* Variables below this are for use only by the hotplug pci core. */ |
168 | struct list_head slot_list; | 163 | struct list_head slot_list; |
169 | struct kobject kobj; | 164 | struct pci_slot *pci_slot; |
170 | }; | 165 | }; |
171 | #define to_hotplug_slot(n) container_of(n, struct hotplug_slot, kobj) | 166 | #define to_hotplug_slot(n) container_of(n, struct hotplug_slot, kobj) |
172 | 167 | ||
173 | extern int pci_hp_register (struct hotplug_slot *slot); | 168 | extern int pci_hp_register(struct hotplug_slot *, struct pci_bus *, int nr); |
174 | extern int pci_hp_deregister (struct hotplug_slot *slot); | 169 | extern int pci_hp_deregister(struct hotplug_slot *slot); |
175 | extern int __must_check pci_hp_change_slot_info (struct hotplug_slot *slot, | 170 | extern int __must_check pci_hp_change_slot_info (struct hotplug_slot *slot, |
176 | struct hotplug_slot_info *info); | 171 | struct hotplug_slot_info *info); |
177 | extern struct kset *pci_hotplug_slots_kset; | ||
178 | 172 | ||
179 | /* PCI Setting Record (Type 0) */ | 173 | /* PCI Setting Record (Type 0) */ |
180 | struct hpp_type0 { | 174 | struct hpp_type0 { |
@@ -227,9 +221,9 @@ struct hotplug_params { | |||
227 | #include <acpi/acpi.h> | 221 | #include <acpi/acpi.h> |
228 | #include <acpi/acpi_bus.h> | 222 | #include <acpi/acpi_bus.h> |
229 | #include <acpi/actypes.h> | 223 | #include <acpi/actypes.h> |
230 | extern acpi_status acpi_run_oshp(acpi_handle handle); | ||
231 | extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus, | 224 | extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus, |
232 | struct hotplug_params *hpp); | 225 | struct hotplug_params *hpp); |
226 | int acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev, u32 flags); | ||
233 | int acpi_root_bridge(acpi_handle handle); | 227 | int acpi_root_bridge(acpi_handle handle); |
234 | #endif | 228 | #endif |
235 | #endif | 229 | #endif |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 7f3f101e03c1..2b3934c735b2 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -2171,6 +2171,8 @@ | |||
2171 | #define PCI_DEVICE_ID_MPC8544 0x0033 | 2171 | #define PCI_DEVICE_ID_MPC8544 0x0033 |
2172 | #define PCI_DEVICE_ID_MPC8572E 0x0040 | 2172 | #define PCI_DEVICE_ID_MPC8572E 0x0040 |
2173 | #define PCI_DEVICE_ID_MPC8572 0x0041 | 2173 | #define PCI_DEVICE_ID_MPC8572 0x0041 |
2174 | #define PCI_DEVICE_ID_MPC8536E 0x0050 | ||
2175 | #define PCI_DEVICE_ID_MPC8536 0x0051 | ||
2174 | #define PCI_DEVICE_ID_MPC8641 0x7010 | 2176 | #define PCI_DEVICE_ID_MPC8641 0x7010 |
2175 | #define PCI_DEVICE_ID_MPC8641D 0x7011 | 2177 | #define PCI_DEVICE_ID_MPC8641D 0x7011 |
2176 | #define PCI_DEVICE_ID_MPC8610 0x7018 | 2178 | #define PCI_DEVICE_ID_MPC8610 0x7018 |
@@ -2188,6 +2190,7 @@ | |||
2188 | #define PCI_DEVICE_ID_JMICRON_JMB366 0x2366 | 2190 | #define PCI_DEVICE_ID_JMICRON_JMB366 0x2366 |
2189 | #define PCI_DEVICE_ID_JMICRON_JMB368 0x2368 | 2191 | #define PCI_DEVICE_ID_JMICRON_JMB368 0x2368 |
2190 | #define PCI_DEVICE_ID_JMICRON_JMB38X_SD 0x2381 | 2192 | #define PCI_DEVICE_ID_JMICRON_JMB38X_SD 0x2381 |
2193 | #define PCI_DEVICE_ID_JMICRON_JMB38X_MMC 0x2382 | ||
2191 | #define PCI_DEVICE_ID_JMICRON_JMB38X_MS 0x2383 | 2194 | #define PCI_DEVICE_ID_JMICRON_JMB38X_MS 0x2383 |
2192 | 2195 | ||
2193 | #define PCI_VENDOR_ID_KORENIX 0x1982 | 2196 | #define PCI_VENDOR_ID_KORENIX 0x1982 |
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index c0c1223c9194..19958b929905 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
@@ -231,6 +231,7 @@ | |||
231 | #define PCI_PM_CAP_PME_D2 0x2000 /* PME# from D2 */ | 231 | #define PCI_PM_CAP_PME_D2 0x2000 /* PME# from D2 */ |
232 | #define PCI_PM_CAP_PME_D3 0x4000 /* PME# from D3 (hot) */ | 232 | #define PCI_PM_CAP_PME_D3 0x4000 /* PME# from D3 (hot) */ |
233 | #define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */ | 233 | #define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */ |
234 | #define PCI_PM_CAP_PME_SHIFT 11 /* Start of the PME Mask in PMC */ | ||
234 | #define PCI_PM_CTRL 4 /* PM control and status register */ | 235 | #define PCI_PM_CTRL 4 /* PM control and status register */ |
235 | #define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */ | 236 | #define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */ |
236 | #define PCI_PM_CTRL_NO_SOFT_RESET 0x0004 /* No reset for D3hot->D0 */ | 237 | #define PCI_PM_CTRL_NO_SOFT_RESET 0x0004 /* No reset for D3hot->D0 */ |
diff --git a/include/linux/percpu_counter.h b/include/linux/percpu_counter.h index 9007ccdfc112..208388835357 100644 --- a/include/linux/percpu_counter.h +++ b/include/linux/percpu_counter.h | |||
@@ -35,7 +35,7 @@ int percpu_counter_init_irq(struct percpu_counter *fbc, s64 amount); | |||
35 | void percpu_counter_destroy(struct percpu_counter *fbc); | 35 | void percpu_counter_destroy(struct percpu_counter *fbc); |
36 | void percpu_counter_set(struct percpu_counter *fbc, s64 amount); | 36 | void percpu_counter_set(struct percpu_counter *fbc, s64 amount); |
37 | void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch); | 37 | void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch); |
38 | s64 __percpu_counter_sum(struct percpu_counter *fbc); | 38 | s64 __percpu_counter_sum(struct percpu_counter *fbc, int set); |
39 | 39 | ||
40 | static inline void percpu_counter_add(struct percpu_counter *fbc, s64 amount) | 40 | static inline void percpu_counter_add(struct percpu_counter *fbc, s64 amount) |
41 | { | 41 | { |
@@ -44,13 +44,19 @@ static inline void percpu_counter_add(struct percpu_counter *fbc, s64 amount) | |||
44 | 44 | ||
45 | static inline s64 percpu_counter_sum_positive(struct percpu_counter *fbc) | 45 | static inline s64 percpu_counter_sum_positive(struct percpu_counter *fbc) |
46 | { | 46 | { |
47 | s64 ret = __percpu_counter_sum(fbc); | 47 | s64 ret = __percpu_counter_sum(fbc, 0); |
48 | return ret < 0 ? 0 : ret; | 48 | return ret < 0 ? 0 : ret; |
49 | } | 49 | } |
50 | 50 | ||
51 | static inline s64 percpu_counter_sum_and_set(struct percpu_counter *fbc) | ||
52 | { | ||
53 | return __percpu_counter_sum(fbc, 1); | ||
54 | } | ||
55 | |||
56 | |||
51 | static inline s64 percpu_counter_sum(struct percpu_counter *fbc) | 57 | static inline s64 percpu_counter_sum(struct percpu_counter *fbc) |
52 | { | 58 | { |
53 | return __percpu_counter_sum(fbc); | 59 | return __percpu_counter_sum(fbc, 0); |
54 | } | 60 | } |
55 | 61 | ||
56 | static inline s64 percpu_counter_read(struct percpu_counter *fbc) | 62 | static inline s64 percpu_counter_read(struct percpu_counter *fbc) |
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index 3261681c82a4..95ac21ab3a09 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h | |||
@@ -53,6 +53,7 @@ struct platform_driver { | |||
53 | int (*suspend_late)(struct platform_device *, pm_message_t state); | 53 | int (*suspend_late)(struct platform_device *, pm_message_t state); |
54 | int (*resume_early)(struct platform_device *); | 54 | int (*resume_early)(struct platform_device *); |
55 | int (*resume)(struct platform_device *); | 55 | int (*resume)(struct platform_device *); |
56 | struct pm_ext_ops *pm; | ||
56 | struct device_driver driver; | 57 | struct device_driver driver; |
57 | }; | 58 | }; |
58 | 59 | ||
diff --git a/include/linux/pm.h b/include/linux/pm.h index 39a7ee859b67..4ad9de94449a 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
@@ -112,7 +112,9 @@ typedef struct pm_message { | |||
112 | int event; | 112 | int event; |
113 | } pm_message_t; | 113 | } pm_message_t; |
114 | 114 | ||
115 | /* | 115 | /** |
116 | * struct pm_ops - device PM callbacks | ||
117 | * | ||
116 | * Several driver power state transitions are externally visible, affecting | 118 | * Several driver power state transitions are externally visible, affecting |
117 | * the state of pending I/O queues and (for drivers that touch hardware) | 119 | * the state of pending I/O queues and (for drivers that touch hardware) |
118 | * interrupts, wakeups, DMA, and other hardware state. There may also be | 120 | * interrupts, wakeups, DMA, and other hardware state. There may also be |
@@ -120,6 +122,284 @@ typedef struct pm_message { | |||
120 | * to the rest of the driver stack (such as a driver that's ON gating off | 122 | * to the rest of the driver stack (such as a driver that's ON gating off |
121 | * clocks which are not in active use). | 123 | * clocks which are not in active use). |
122 | * | 124 | * |
125 | * The externally visible transitions are handled with the help of the following | ||
126 | * callbacks included in this structure: | ||
127 | * | ||
128 | * @prepare: Prepare the device for the upcoming transition, but do NOT change | ||
129 | * its hardware state. Prevent new children of the device from being | ||
130 | * registered after @prepare() returns (the driver's subsystem and | ||
131 | * generally the rest of the kernel is supposed to prevent new calls to the | ||
132 | * probe method from being made too once @prepare() has succeeded). If | ||
133 | * @prepare() detects a situation it cannot handle (e.g. registration of a | ||
134 | * child already in progress), it may return -EAGAIN, so that the PM core | ||
135 | * can execute it once again (e.g. after the new child has been registered) | ||
136 | * to recover from the race condition. This method is executed for all | ||
137 | * kinds of suspend transitions and is followed by one of the suspend | ||
138 | * callbacks: @suspend(), @freeze(), or @poweroff(). | ||
139 | * The PM core executes @prepare() for all devices before starting to | ||
140 | * execute suspend callbacks for any of them, so drivers may assume all of | ||
141 | * the other devices to be present and functional while @prepare() is being | ||
142 | * executed. In particular, it is safe to make GFP_KERNEL memory | ||
143 | * allocations from within @prepare(). However, drivers may NOT assume | ||
144 | * anything about the availability of the user space at that time and it | ||
145 | * is not correct to request firmware from within @prepare() (it's too | ||
146 | * late to do that). [To work around this limitation, drivers may | ||
147 | * register suspend and hibernation notifiers that are executed before the | ||
148 | * freezing of tasks.] | ||
149 | * | ||
150 | * @complete: Undo the changes made by @prepare(). This method is executed for | ||
151 | * all kinds of resume transitions, following one of the resume callbacks: | ||
152 | * @resume(), @thaw(), @restore(). Also called if the state transition | ||
153 | * fails before the driver's suspend callback (@suspend(), @freeze(), | ||
154 | * @poweroff()) can be executed (e.g. if the suspend callback fails for one | ||
155 | * of the other devices that the PM core has unsuccessfully attempted to | ||
156 | * suspend earlier). | ||
157 | * The PM core executes @complete() after it has executed the appropriate | ||
158 | * resume callback for all devices. | ||
159 | * | ||
160 | * @suspend: Executed before putting the system into a sleep state in which the | ||
161 | * contents of main memory are preserved. Quiesce the device, put it into | ||
162 | * a low power state appropriate for the upcoming system state (such as | ||
163 | * PCI_D3hot), and enable wakeup events as appropriate. | ||
164 | * | ||
165 | * @resume: Executed after waking the system up from a sleep state in which the | ||
166 | * contents of main memory were preserved. Put the device into the | ||
167 | * appropriate state, according to the information saved in memory by the | ||
168 | * preceding @suspend(). The driver starts working again, responding to | ||
169 | * hardware events and software requests. The hardware may have gone | ||
170 | * through a power-off reset, or it may have maintained state from the | ||
171 | * previous suspend() which the driver may rely on while resuming. On most | ||
172 | * platforms, there are no restrictions on availability of resources like | ||
173 | * clocks during @resume(). | ||
174 | * | ||
175 | * @freeze: Hibernation-specific, executed before creating a hibernation image. | ||
176 | * Quiesce operations so that a consistent image can be created, but do NOT | ||
177 | * otherwise put the device into a low power device state and do NOT emit | ||
178 | * system wakeup events. Save in main memory the device settings to be | ||
179 | * used by @restore() during the subsequent resume from hibernation or by | ||
180 | * the subsequent @thaw(), if the creation of the image or the restoration | ||
181 | * of main memory contents from it fails. | ||
182 | * | ||
183 | * @thaw: Hibernation-specific, executed after creating a hibernation image OR | ||
184 | * if the creation of the image fails. Also executed after a failing | ||
185 | * attempt to restore the contents of main memory from such an image. | ||
186 | * Undo the changes made by the preceding @freeze(), so the device can be | ||
187 | * operated in the same way as immediately before the call to @freeze(). | ||
188 | * | ||
189 | * @poweroff: Hibernation-specific, executed after saving a hibernation image. | ||
190 | * Quiesce the device, put it into a low power state appropriate for the | ||
191 | * upcoming system state (such as PCI_D3hot), and enable wakeup events as | ||
192 | * appropriate. | ||
193 | * | ||
194 | * @restore: Hibernation-specific, executed after restoring the contents of main | ||
195 | * memory from a hibernation image. Driver starts working again, | ||
196 | * responding to hardware events and software requests. Drivers may NOT | ||
197 | * make ANY assumptions about the hardware state right prior to @restore(). | ||
198 | * On most platforms, there are no restrictions on availability of | ||
199 | * resources like clocks during @restore(). | ||
200 | * | ||
201 | * All of the above callbacks, except for @complete(), return error codes. | ||
202 | * However, the error codes returned by the resume operations, @resume(), | ||
203 | * @thaw(), and @restore(), do not cause the PM core to abort the resume | ||
204 | * transition during which they are returned. The error codes returned in | ||
205 | * that cases are only printed by the PM core to the system logs for debugging | ||
206 | * purposes. Still, it is recommended that drivers only return error codes | ||
207 | * from their resume methods in case of an unrecoverable failure (i.e. when the | ||
208 | * device being handled refuses to resume and becomes unusable) to allow us to | ||
209 | * modify the PM core in the future, so that it can avoid attempting to handle | ||
210 | * devices that failed to resume and their children. | ||
211 | * | ||
212 | * It is allowed to unregister devices while the above callbacks are being | ||
213 | * executed. However, it is not allowed to unregister a device from within any | ||
214 | * of its own callbacks. | ||
215 | */ | ||
216 | |||
217 | struct pm_ops { | ||
218 | int (*prepare)(struct device *dev); | ||
219 | void (*complete)(struct device *dev); | ||
220 | int (*suspend)(struct device *dev); | ||
221 | int (*resume)(struct device *dev); | ||
222 | int (*freeze)(struct device *dev); | ||
223 | int (*thaw)(struct device *dev); | ||
224 | int (*poweroff)(struct device *dev); | ||
225 | int (*restore)(struct device *dev); | ||
226 | }; | ||
227 | |||
228 | /** | ||
229 | * struct pm_ext_ops - extended device PM callbacks | ||
230 | * | ||
231 | * Some devices require certain operations related to suspend and hibernation | ||
232 | * to be carried out with interrupts disabled. Thus, 'struct pm_ext_ops' below | ||
233 | * is defined, adding callbacks to be executed with interrupts disabled to | ||
234 | * 'struct pm_ops'. | ||
235 | * | ||
236 | * The following callbacks included in 'struct pm_ext_ops' are executed with | ||
237 | * the nonboot CPUs switched off and with interrupts disabled on the only | ||
238 | * functional CPU. They also are executed with the PM core list of devices | ||
239 | * locked, so they must NOT unregister any devices. | ||
240 | * | ||
241 | * @suspend_noirq: Complete the operations of ->suspend() by carrying out any | ||
242 | * actions required for suspending the device that need interrupts to be | ||
243 | * disabled | ||
244 | * | ||
245 | * @resume_noirq: Prepare for the execution of ->resume() by carrying out any | ||
246 | * actions required for resuming the device that need interrupts to be | ||
247 | * disabled | ||
248 | * | ||
249 | * @freeze_noirq: Complete the operations of ->freeze() by carrying out any | ||
250 | * actions required for freezing the device that need interrupts to be | ||
251 | * disabled | ||
252 | * | ||
253 | * @thaw_noirq: Prepare for the execution of ->thaw() by carrying out any | ||
254 | * actions required for thawing the device that need interrupts to be | ||
255 | * disabled | ||
256 | * | ||
257 | * @poweroff_noirq: Complete the operations of ->poweroff() by carrying out any | ||
258 | * actions required for handling the device that need interrupts to be | ||
259 | * disabled | ||
260 | * | ||
261 | * @restore_noirq: Prepare for the execution of ->restore() by carrying out any | ||
262 | * actions required for restoring the operations of the device that need | ||
263 | * interrupts to be disabled | ||
264 | * | ||
265 | * All of the above callbacks return error codes, but the error codes returned | ||
266 | * by the resume operations, @resume_noirq(), @thaw_noirq(), and | ||
267 | * @restore_noirq(), do not cause the PM core to abort the resume transition | ||
268 | * during which they are returned. The error codes returned in that cases are | ||
269 | * only printed by the PM core to the system logs for debugging purposes. | ||
270 | * Still, as stated above, it is recommended that drivers only return error | ||
271 | * codes from their resume methods if the device being handled fails to resume | ||
272 | * and is not usable any more. | ||
273 | */ | ||
274 | |||
275 | struct pm_ext_ops { | ||
276 | struct pm_ops base; | ||
277 | int (*suspend_noirq)(struct device *dev); | ||
278 | int (*resume_noirq)(struct device *dev); | ||
279 | int (*freeze_noirq)(struct device *dev); | ||
280 | int (*thaw_noirq)(struct device *dev); | ||
281 | int (*poweroff_noirq)(struct device *dev); | ||
282 | int (*restore_noirq)(struct device *dev); | ||
283 | }; | ||
284 | |||
285 | /** | ||
286 | * PM_EVENT_ messages | ||
287 | * | ||
288 | * The following PM_EVENT_ messages are defined for the internal use of the PM | ||
289 | * core, in order to provide a mechanism allowing the high level suspend and | ||
290 | * hibernation code to convey the necessary information to the device PM core | ||
291 | * code: | ||
292 | * | ||
293 | * ON No transition. | ||
294 | * | ||
295 | * FREEZE System is going to hibernate, call ->prepare() and ->freeze() | ||
296 | * for all devices. | ||
297 | * | ||
298 | * SUSPEND System is going to suspend, call ->prepare() and ->suspend() | ||
299 | * for all devices. | ||
300 | * | ||
301 | * HIBERNATE Hibernation image has been saved, call ->prepare() and | ||
302 | * ->poweroff() for all devices. | ||
303 | * | ||
304 | * QUIESCE Contents of main memory are going to be restored from a (loaded) | ||
305 | * hibernation image, call ->prepare() and ->freeze() for all | ||
306 | * devices. | ||
307 | * | ||
308 | * RESUME System is resuming, call ->resume() and ->complete() for all | ||
309 | * devices. | ||
310 | * | ||
311 | * THAW Hibernation image has been created, call ->thaw() and | ||
312 | * ->complete() for all devices. | ||
313 | * | ||
314 | * RESTORE Contents of main memory have been restored from a hibernation | ||
315 | * image, call ->restore() and ->complete() for all devices. | ||
316 | * | ||
317 | * RECOVER Creation of a hibernation image or restoration of the main | ||
318 | * memory contents from a hibernation image has failed, call | ||
319 | * ->thaw() and ->complete() for all devices. | ||
320 | */ | ||
321 | |||
322 | #define PM_EVENT_ON 0x0000 | ||
323 | #define PM_EVENT_FREEZE 0x0001 | ||
324 | #define PM_EVENT_SUSPEND 0x0002 | ||
325 | #define PM_EVENT_HIBERNATE 0x0004 | ||
326 | #define PM_EVENT_QUIESCE 0x0008 | ||
327 | #define PM_EVENT_RESUME 0x0010 | ||
328 | #define PM_EVENT_THAW 0x0020 | ||
329 | #define PM_EVENT_RESTORE 0x0040 | ||
330 | #define PM_EVENT_RECOVER 0x0080 | ||
331 | |||
332 | #define PM_EVENT_SLEEP (PM_EVENT_SUSPEND | PM_EVENT_HIBERNATE) | ||
333 | |||
334 | #define PMSG_FREEZE ((struct pm_message){ .event = PM_EVENT_FREEZE, }) | ||
335 | #define PMSG_QUIESCE ((struct pm_message){ .event = PM_EVENT_QUIESCE, }) | ||
336 | #define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, }) | ||
337 | #define PMSG_HIBERNATE ((struct pm_message){ .event = PM_EVENT_HIBERNATE, }) | ||
338 | #define PMSG_RESUME ((struct pm_message){ .event = PM_EVENT_RESUME, }) | ||
339 | #define PMSG_THAW ((struct pm_message){ .event = PM_EVENT_THAW, }) | ||
340 | #define PMSG_RESTORE ((struct pm_message){ .event = PM_EVENT_RESTORE, }) | ||
341 | #define PMSG_RECOVER ((struct pm_message){ .event = PM_EVENT_RECOVER, }) | ||
342 | #define PMSG_ON ((struct pm_message){ .event = PM_EVENT_ON, }) | ||
343 | |||
344 | /** | ||
345 | * Device power management states | ||
346 | * | ||
347 | * These state labels are used internally by the PM core to indicate the current | ||
348 | * status of a device with respect to the PM core operations. | ||
349 | * | ||
350 | * DPM_ON Device is regarded as operational. Set this way | ||
351 | * initially and when ->complete() is about to be called. | ||
352 | * Also set when ->prepare() fails. | ||
353 | * | ||
354 | * DPM_PREPARING Device is going to be prepared for a PM transition. Set | ||
355 | * when ->prepare() is about to be called. | ||
356 | * | ||
357 | * DPM_RESUMING Device is going to be resumed. Set when ->resume(), | ||
358 | * ->thaw(), or ->restore() is about to be called. | ||
359 | * | ||
360 | * DPM_SUSPENDING Device has been prepared for a power transition. Set | ||
361 | * when ->prepare() has just succeeded. | ||
362 | * | ||
363 | * DPM_OFF Device is regarded as inactive. Set immediately after | ||
364 | * ->suspend(), ->freeze(), or ->poweroff() has succeeded. | ||
365 | * Also set when ->resume()_noirq, ->thaw_noirq(), or | ||
366 | * ->restore_noirq() is about to be called. | ||
367 | * | ||
368 | * DPM_OFF_IRQ Device is in a "deep sleep". Set immediately after | ||
369 | * ->suspend_noirq(), ->freeze_noirq(), or | ||
370 | * ->poweroff_noirq() has just succeeded. | ||
371 | */ | ||
372 | |||
373 | enum dpm_state { | ||
374 | DPM_INVALID, | ||
375 | DPM_ON, | ||
376 | DPM_PREPARING, | ||
377 | DPM_RESUMING, | ||
378 | DPM_SUSPENDING, | ||
379 | DPM_OFF, | ||
380 | DPM_OFF_IRQ, | ||
381 | }; | ||
382 | |||
383 | struct dev_pm_info { | ||
384 | pm_message_t power_state; | ||
385 | unsigned can_wakeup:1; | ||
386 | unsigned should_wakeup:1; | ||
387 | enum dpm_state status; /* Owned by the PM core */ | ||
388 | #ifdef CONFIG_PM_SLEEP | ||
389 | struct list_head entry; | ||
390 | #endif | ||
391 | }; | ||
392 | |||
393 | /* | ||
394 | * The PM_EVENT_ messages are also used by drivers implementing the legacy | ||
395 | * suspend framework, based on the ->suspend() and ->resume() callbacks common | ||
396 | * for suspend and hibernation transitions, according to the rules below. | ||
397 | */ | ||
398 | |||
399 | /* Necessary, because several drivers use PM_EVENT_PRETHAW */ | ||
400 | #define PM_EVENT_PRETHAW PM_EVENT_QUIESCE | ||
401 | |||
402 | /* | ||
123 | * One transition is triggered by resume(), after a suspend() call; the | 403 | * One transition is triggered by resume(), after a suspend() call; the |
124 | * message is implicit: | 404 | * message is implicit: |
125 | * | 405 | * |
@@ -164,35 +444,13 @@ typedef struct pm_message { | |||
164 | * or from system low-power states such as standby or suspend-to-RAM. | 444 | * or from system low-power states such as standby or suspend-to-RAM. |
165 | */ | 445 | */ |
166 | 446 | ||
167 | #define PM_EVENT_ON 0 | 447 | #ifdef CONFIG_PM_SLEEP |
168 | #define PM_EVENT_FREEZE 1 | 448 | extern void device_pm_lock(void); |
169 | #define PM_EVENT_SUSPEND 2 | 449 | extern void device_power_up(pm_message_t state); |
170 | #define PM_EVENT_HIBERNATE 4 | 450 | extern void device_resume(pm_message_t state); |
171 | #define PM_EVENT_PRETHAW 8 | ||
172 | |||
173 | #define PM_EVENT_SLEEP (PM_EVENT_SUSPEND | PM_EVENT_HIBERNATE) | ||
174 | |||
175 | #define PMSG_FREEZE ((struct pm_message){ .event = PM_EVENT_FREEZE, }) | ||
176 | #define PMSG_PRETHAW ((struct pm_message){ .event = PM_EVENT_PRETHAW, }) | ||
177 | #define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, }) | ||
178 | #define PMSG_HIBERNATE ((struct pm_message){ .event = PM_EVENT_HIBERNATE, }) | ||
179 | #define PMSG_ON ((struct pm_message){ .event = PM_EVENT_ON, }) | ||
180 | |||
181 | struct dev_pm_info { | ||
182 | pm_message_t power_state; | ||
183 | unsigned can_wakeup:1; | ||
184 | unsigned should_wakeup:1; | ||
185 | bool sleeping:1; /* Owned by the PM core */ | ||
186 | #ifdef CONFIG_PM_SLEEP | ||
187 | struct list_head entry; | ||
188 | #endif | ||
189 | }; | ||
190 | 451 | ||
452 | extern void device_pm_unlock(void); | ||
191 | extern int device_power_down(pm_message_t state); | 453 | extern int device_power_down(pm_message_t state); |
192 | extern void device_power_up(void); | ||
193 | extern void device_resume(void); | ||
194 | |||
195 | #ifdef CONFIG_PM_SLEEP | ||
196 | extern int device_suspend(pm_message_t state); | 454 | extern int device_suspend(pm_message_t state); |
197 | extern int device_prepare_suspend(pm_message_t state); | 455 | extern int device_prepare_suspend(pm_message_t state); |
198 | 456 | ||
diff --git a/include/linux/pm_wakeup.h b/include/linux/pm_wakeup.h index f0d0b2cb8d20..0aae7776185e 100644 --- a/include/linux/pm_wakeup.h +++ b/include/linux/pm_wakeup.h | |||
@@ -35,6 +35,11 @@ static inline void device_init_wakeup(struct device *dev, int val) | |||
35 | dev->power.can_wakeup = dev->power.should_wakeup = !!val; | 35 | dev->power.can_wakeup = dev->power.should_wakeup = !!val; |
36 | } | 36 | } |
37 | 37 | ||
38 | static inline void device_set_wakeup_capable(struct device *dev, int val) | ||
39 | { | ||
40 | dev->power.can_wakeup = !!val; | ||
41 | } | ||
42 | |||
38 | static inline int device_can_wakeup(struct device *dev) | 43 | static inline int device_can_wakeup(struct device *dev) |
39 | { | 44 | { |
40 | return dev->power.can_wakeup; | 45 | return dev->power.can_wakeup; |
@@ -47,21 +52,7 @@ static inline void device_set_wakeup_enable(struct device *dev, int val) | |||
47 | 52 | ||
48 | static inline int device_may_wakeup(struct device *dev) | 53 | static inline int device_may_wakeup(struct device *dev) |
49 | { | 54 | { |
50 | return dev->power.can_wakeup & dev->power.should_wakeup; | 55 | return dev->power.can_wakeup && dev->power.should_wakeup; |
51 | } | ||
52 | |||
53 | /* | ||
54 | * Platform hook to activate device wakeup capability, if that's not already | ||
55 | * handled by enable_irq_wake() etc. | ||
56 | * Returns zero on success, else negative errno | ||
57 | */ | ||
58 | extern int (*platform_enable_wakeup)(struct device *dev, int is_on); | ||
59 | |||
60 | static inline int call_platform_enable_wakeup(struct device *dev, int is_on) | ||
61 | { | ||
62 | if (platform_enable_wakeup) | ||
63 | return (*platform_enable_wakeup)(dev, is_on); | ||
64 | return 0; | ||
65 | } | 56 | } |
66 | 57 | ||
67 | #else /* !CONFIG_PM */ | 58 | #else /* !CONFIG_PM */ |
@@ -72,6 +63,8 @@ static inline void device_init_wakeup(struct device *dev, int val) | |||
72 | dev->power.can_wakeup = !!val; | 63 | dev->power.can_wakeup = !!val; |
73 | } | 64 | } |
74 | 65 | ||
66 | static inline void device_set_wakeup_capable(struct device *dev, int val) { } | ||
67 | |||
75 | static inline int device_can_wakeup(struct device *dev) | 68 | static inline int device_can_wakeup(struct device *dev) |
76 | { | 69 | { |
77 | return dev->power.can_wakeup; | 70 | return dev->power.can_wakeup; |
@@ -80,11 +73,6 @@ static inline int device_can_wakeup(struct device *dev) | |||
80 | #define device_set_wakeup_enable(dev, val) do {} while (0) | 73 | #define device_set_wakeup_enable(dev, val) do {} while (0) |
81 | #define device_may_wakeup(dev) 0 | 74 | #define device_may_wakeup(dev) 0 |
82 | 75 | ||
83 | static inline int call_platform_enable_wakeup(struct device *dev, int is_on) | ||
84 | { | ||
85 | return 0; | ||
86 | } | ||
87 | |||
88 | #endif /* !CONFIG_PM */ | 76 | #endif /* !CONFIG_PM */ |
89 | 77 | ||
90 | #endif /* _LINUX_PM_WAKEUP_H */ | 78 | #endif /* _LINUX_PM_WAKEUP_H */ |
diff --git a/include/linux/pnp.h b/include/linux/pnp.h index 63b128d512fb..1ce54b63085d 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h | |||
@@ -1,6 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * Linux Plug and Play Support | 2 | * Linux Plug and Play Support |
3 | * Copyright by Adam Belay <ambx1@neo.rr.com> | 3 | * Copyright by Adam Belay <ambx1@neo.rr.com> |
4 | * Copyright (C) 2008 Hewlett-Packard Development Company, L.P. | ||
5 | * Bjorn Helgaas <bjorn.helgaas@hp.com> | ||
4 | */ | 6 | */ |
5 | 7 | ||
6 | #ifndef _LINUX_PNP_H | 8 | #ifndef _LINUX_PNP_H |
@@ -15,7 +17,6 @@ | |||
15 | 17 | ||
16 | struct pnp_protocol; | 18 | struct pnp_protocol; |
17 | struct pnp_dev; | 19 | struct pnp_dev; |
18 | struct pnp_resource_table; | ||
19 | 20 | ||
20 | /* | 21 | /* |
21 | * Resource Management | 22 | * Resource Management |
@@ -24,7 +25,14 @@ struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int); | |||
24 | 25 | ||
25 | static inline int pnp_resource_valid(struct resource *res) | 26 | static inline int pnp_resource_valid(struct resource *res) |
26 | { | 27 | { |
27 | if (res && !(res->flags & IORESOURCE_UNSET)) | 28 | if (res) |
29 | return 1; | ||
30 | return 0; | ||
31 | } | ||
32 | |||
33 | static inline int pnp_resource_enabled(struct resource *res) | ||
34 | { | ||
35 | if (res && !(res->flags & IORESOURCE_DISABLED)) | ||
28 | return 1; | 36 | return 1; |
29 | return 0; | 37 | return 0; |
30 | } | 38 | } |
@@ -40,19 +48,31 @@ static inline resource_size_t pnp_resource_len(struct resource *res) | |||
40 | static inline resource_size_t pnp_port_start(struct pnp_dev *dev, | 48 | static inline resource_size_t pnp_port_start(struct pnp_dev *dev, |
41 | unsigned int bar) | 49 | unsigned int bar) |
42 | { | 50 | { |
43 | return pnp_get_resource(dev, IORESOURCE_IO, bar)->start; | 51 | struct resource *res = pnp_get_resource(dev, IORESOURCE_IO, bar); |
52 | |||
53 | if (pnp_resource_valid(res)) | ||
54 | return res->start; | ||
55 | return 0; | ||
44 | } | 56 | } |
45 | 57 | ||
46 | static inline resource_size_t pnp_port_end(struct pnp_dev *dev, | 58 | static inline resource_size_t pnp_port_end(struct pnp_dev *dev, |
47 | unsigned int bar) | 59 | unsigned int bar) |
48 | { | 60 | { |
49 | return pnp_get_resource(dev, IORESOURCE_IO, bar)->end; | 61 | struct resource *res = pnp_get_resource(dev, IORESOURCE_IO, bar); |
62 | |||
63 | if (pnp_resource_valid(res)) | ||
64 | return res->end; | ||
65 | return 0; | ||
50 | } | 66 | } |
51 | 67 | ||
52 | static inline unsigned long pnp_port_flags(struct pnp_dev *dev, | 68 | static inline unsigned long pnp_port_flags(struct pnp_dev *dev, |
53 | unsigned int bar) | 69 | unsigned int bar) |
54 | { | 70 | { |
55 | return pnp_get_resource(dev, IORESOURCE_IO, bar)->flags; | 71 | struct resource *res = pnp_get_resource(dev, IORESOURCE_IO, bar); |
72 | |||
73 | if (pnp_resource_valid(res)) | ||
74 | return res->flags; | ||
75 | return IORESOURCE_IO | IORESOURCE_AUTO; | ||
56 | } | 76 | } |
57 | 77 | ||
58 | static inline int pnp_port_valid(struct pnp_dev *dev, unsigned int bar) | 78 | static inline int pnp_port_valid(struct pnp_dev *dev, unsigned int bar) |
@@ -63,25 +83,41 @@ static inline int pnp_port_valid(struct pnp_dev *dev, unsigned int bar) | |||
63 | static inline resource_size_t pnp_port_len(struct pnp_dev *dev, | 83 | static inline resource_size_t pnp_port_len(struct pnp_dev *dev, |
64 | unsigned int bar) | 84 | unsigned int bar) |
65 | { | 85 | { |
66 | return pnp_resource_len(pnp_get_resource(dev, IORESOURCE_IO, bar)); | 86 | struct resource *res = pnp_get_resource(dev, IORESOURCE_IO, bar); |
87 | |||
88 | if (pnp_resource_valid(res)) | ||
89 | return pnp_resource_len(res); | ||
90 | return 0; | ||
67 | } | 91 | } |
68 | 92 | ||
69 | 93 | ||
70 | static inline resource_size_t pnp_mem_start(struct pnp_dev *dev, | 94 | static inline resource_size_t pnp_mem_start(struct pnp_dev *dev, |
71 | unsigned int bar) | 95 | unsigned int bar) |
72 | { | 96 | { |
73 | return pnp_get_resource(dev, IORESOURCE_MEM, bar)->start; | 97 | struct resource *res = pnp_get_resource(dev, IORESOURCE_MEM, bar); |
98 | |||
99 | if (pnp_resource_valid(res)) | ||
100 | return res->start; | ||
101 | return 0; | ||
74 | } | 102 | } |
75 | 103 | ||
76 | static inline resource_size_t pnp_mem_end(struct pnp_dev *dev, | 104 | static inline resource_size_t pnp_mem_end(struct pnp_dev *dev, |
77 | unsigned int bar) | 105 | unsigned int bar) |
78 | { | 106 | { |
79 | return pnp_get_resource(dev, IORESOURCE_MEM, bar)->end; | 107 | struct resource *res = pnp_get_resource(dev, IORESOURCE_MEM, bar); |
108 | |||
109 | if (pnp_resource_valid(res)) | ||
110 | return res->end; | ||
111 | return 0; | ||
80 | } | 112 | } |
81 | 113 | ||
82 | static inline unsigned long pnp_mem_flags(struct pnp_dev *dev, unsigned int bar) | 114 | static inline unsigned long pnp_mem_flags(struct pnp_dev *dev, unsigned int bar) |
83 | { | 115 | { |
84 | return pnp_get_resource(dev, IORESOURCE_MEM, bar)->flags; | 116 | struct resource *res = pnp_get_resource(dev, IORESOURCE_MEM, bar); |
117 | |||
118 | if (pnp_resource_valid(res)) | ||
119 | return res->flags; | ||
120 | return IORESOURCE_MEM | IORESOURCE_AUTO; | ||
85 | } | 121 | } |
86 | 122 | ||
87 | static inline int pnp_mem_valid(struct pnp_dev *dev, unsigned int bar) | 123 | static inline int pnp_mem_valid(struct pnp_dev *dev, unsigned int bar) |
@@ -92,18 +128,30 @@ static inline int pnp_mem_valid(struct pnp_dev *dev, unsigned int bar) | |||
92 | static inline resource_size_t pnp_mem_len(struct pnp_dev *dev, | 128 | static inline resource_size_t pnp_mem_len(struct pnp_dev *dev, |
93 | unsigned int bar) | 129 | unsigned int bar) |
94 | { | 130 | { |
95 | return pnp_resource_len(pnp_get_resource(dev, IORESOURCE_MEM, bar)); | 131 | struct resource *res = pnp_get_resource(dev, IORESOURCE_MEM, bar); |
132 | |||
133 | if (pnp_resource_valid(res)) | ||
134 | return pnp_resource_len(res); | ||
135 | return 0; | ||
96 | } | 136 | } |
97 | 137 | ||
98 | 138 | ||
99 | static inline resource_size_t pnp_irq(struct pnp_dev *dev, unsigned int bar) | 139 | static inline resource_size_t pnp_irq(struct pnp_dev *dev, unsigned int bar) |
100 | { | 140 | { |
101 | return pnp_get_resource(dev, IORESOURCE_IRQ, bar)->start; | 141 | struct resource *res = pnp_get_resource(dev, IORESOURCE_IRQ, bar); |
142 | |||
143 | if (pnp_resource_valid(res)) | ||
144 | return res->start; | ||
145 | return -1; | ||
102 | } | 146 | } |
103 | 147 | ||
104 | static inline unsigned long pnp_irq_flags(struct pnp_dev *dev, unsigned int bar) | 148 | static inline unsigned long pnp_irq_flags(struct pnp_dev *dev, unsigned int bar) |
105 | { | 149 | { |
106 | return pnp_get_resource(dev, IORESOURCE_IRQ, bar)->flags; | 150 | struct resource *res = pnp_get_resource(dev, IORESOURCE_IRQ, bar); |
151 | |||
152 | if (pnp_resource_valid(res)) | ||
153 | return res->flags; | ||
154 | return IORESOURCE_IRQ | IORESOURCE_AUTO; | ||
107 | } | 155 | } |
108 | 156 | ||
109 | static inline int pnp_irq_valid(struct pnp_dev *dev, unsigned int bar) | 157 | static inline int pnp_irq_valid(struct pnp_dev *dev, unsigned int bar) |
@@ -114,12 +162,20 @@ static inline int pnp_irq_valid(struct pnp_dev *dev, unsigned int bar) | |||
114 | 162 | ||
115 | static inline resource_size_t pnp_dma(struct pnp_dev *dev, unsigned int bar) | 163 | static inline resource_size_t pnp_dma(struct pnp_dev *dev, unsigned int bar) |
116 | { | 164 | { |
117 | return pnp_get_resource(dev, IORESOURCE_DMA, bar)->start; | 165 | struct resource *res = pnp_get_resource(dev, IORESOURCE_DMA, bar); |
166 | |||
167 | if (pnp_resource_valid(res)) | ||
168 | return res->start; | ||
169 | return -1; | ||
118 | } | 170 | } |
119 | 171 | ||
120 | static inline unsigned long pnp_dma_flags(struct pnp_dev *dev, unsigned int bar) | 172 | static inline unsigned long pnp_dma_flags(struct pnp_dev *dev, unsigned int bar) |
121 | { | 173 | { |
122 | return pnp_get_resource(dev, IORESOURCE_DMA, bar)->flags; | 174 | struct resource *res = pnp_get_resource(dev, IORESOURCE_DMA, bar); |
175 | |||
176 | if (pnp_resource_valid(res)) | ||
177 | return res->flags; | ||
178 | return IORESOURCE_DMA | IORESOURCE_AUTO; | ||
123 | } | 179 | } |
124 | 180 | ||
125 | static inline int pnp_dma_valid(struct pnp_dev *dev, unsigned int bar) | 181 | static inline int pnp_dma_valid(struct pnp_dev *dev, unsigned int bar) |
@@ -128,57 +184,6 @@ static inline int pnp_dma_valid(struct pnp_dev *dev, unsigned int bar) | |||
128 | } | 184 | } |
129 | 185 | ||
130 | 186 | ||
131 | #define PNP_PORT_FLAG_16BITADDR (1<<0) | ||
132 | #define PNP_PORT_FLAG_FIXED (1<<1) | ||
133 | |||
134 | struct pnp_port { | ||
135 | unsigned short min; /* min base number */ | ||
136 | unsigned short max; /* max base number */ | ||
137 | unsigned char align; /* align boundary */ | ||
138 | unsigned char size; /* size of range */ | ||
139 | unsigned char flags; /* port flags */ | ||
140 | unsigned char pad; /* pad */ | ||
141 | struct pnp_port *next; /* next port */ | ||
142 | }; | ||
143 | |||
144 | #define PNP_IRQ_NR 256 | ||
145 | struct pnp_irq { | ||
146 | DECLARE_BITMAP(map, PNP_IRQ_NR); /* bitmask for IRQ lines */ | ||
147 | unsigned char flags; /* IRQ flags */ | ||
148 | unsigned char pad; /* pad */ | ||
149 | struct pnp_irq *next; /* next IRQ */ | ||
150 | }; | ||
151 | |||
152 | struct pnp_dma { | ||
153 | unsigned char map; /* bitmask for DMA channels */ | ||
154 | unsigned char flags; /* DMA flags */ | ||
155 | struct pnp_dma *next; /* next port */ | ||
156 | }; | ||
157 | |||
158 | struct pnp_mem { | ||
159 | unsigned int min; /* min base number */ | ||
160 | unsigned int max; /* max base number */ | ||
161 | unsigned int align; /* align boundary */ | ||
162 | unsigned int size; /* size of range */ | ||
163 | unsigned char flags; /* memory flags */ | ||
164 | unsigned char pad; /* pad */ | ||
165 | struct pnp_mem *next; /* next memory resource */ | ||
166 | }; | ||
167 | |||
168 | #define PNP_RES_PRIORITY_PREFERRED 0 | ||
169 | #define PNP_RES_PRIORITY_ACCEPTABLE 1 | ||
170 | #define PNP_RES_PRIORITY_FUNCTIONAL 2 | ||
171 | #define PNP_RES_PRIORITY_INVALID 65535 | ||
172 | |||
173 | struct pnp_option { | ||
174 | unsigned short priority; /* priority */ | ||
175 | struct pnp_port *port; /* first port */ | ||
176 | struct pnp_irq *irq; /* first IRQ */ | ||
177 | struct pnp_dma *dma; /* first DMA */ | ||
178 | struct pnp_mem *mem; /* first memory resource */ | ||
179 | struct pnp_option *next; /* used to chain dependent resources */ | ||
180 | }; | ||
181 | |||
182 | /* | 187 | /* |
183 | * Device Management | 188 | * Device Management |
184 | */ | 189 | */ |
@@ -246,9 +251,9 @@ struct pnp_dev { | |||
246 | 251 | ||
247 | int active; | 252 | int active; |
248 | int capabilities; | 253 | int capabilities; |
249 | struct pnp_option *independent; | 254 | unsigned int num_dependent_sets; |
250 | struct pnp_option *dependent; | 255 | struct list_head resources; |
251 | struct pnp_resource_table *res; | 256 | struct list_head options; |
252 | 257 | ||
253 | char name[PNP_NAME_LEN]; /* contains a human-readable name */ | 258 | char name[PNP_NAME_LEN]; /* contains a human-readable name */ |
254 | int flags; /* used by protocols */ | 259 | int flags; /* used by protocols */ |
@@ -425,6 +430,8 @@ void pnp_unregister_card_driver(struct pnp_card_driver *drv); | |||
425 | extern struct list_head pnp_cards; | 430 | extern struct list_head pnp_cards; |
426 | 431 | ||
427 | /* resource management */ | 432 | /* resource management */ |
433 | int pnp_possible_config(struct pnp_dev *dev, int type, resource_size_t base, | ||
434 | resource_size_t size); | ||
428 | int pnp_auto_config_dev(struct pnp_dev *dev); | 435 | int pnp_auto_config_dev(struct pnp_dev *dev); |
429 | int pnp_start_dev(struct pnp_dev *dev); | 436 | int pnp_start_dev(struct pnp_dev *dev); |
430 | int pnp_stop_dev(struct pnp_dev *dev); | 437 | int pnp_stop_dev(struct pnp_dev *dev); |
@@ -452,6 +459,9 @@ static inline int pnp_register_card_driver(struct pnp_card_driver *drv) { return | |||
452 | static inline void pnp_unregister_card_driver(struct pnp_card_driver *drv) { } | 459 | static inline void pnp_unregister_card_driver(struct pnp_card_driver *drv) { } |
453 | 460 | ||
454 | /* resource management */ | 461 | /* resource management */ |
462 | static inline int pnp_possible_config(struct pnp_dev *dev, int type, | ||
463 | resource_size_t base, | ||
464 | resource_size_t size) { return 0; } | ||
455 | static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; } | 465 | static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; } |
456 | static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; } | 466 | static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; } |
457 | static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; } | 467 | static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; } |
diff --git a/include/linux/preempt.h b/include/linux/preempt.h index 23f0c54175cd..72b1a10a59b6 100644 --- a/include/linux/preempt.h +++ b/include/linux/preempt.h | |||
@@ -10,7 +10,7 @@ | |||
10 | #include <linux/linkage.h> | 10 | #include <linux/linkage.h> |
11 | #include <linux/list.h> | 11 | #include <linux/list.h> |
12 | 12 | ||
13 | #ifdef CONFIG_DEBUG_PREEMPT | 13 | #if defined(CONFIG_DEBUG_PREEMPT) || defined(CONFIG_PREEMPT_TRACER) |
14 | extern void add_preempt_count(int val); | 14 | extern void add_preempt_count(int val); |
15 | extern void sub_preempt_count(int val); | 15 | extern void sub_preempt_count(int val); |
16 | #else | 16 | #else |
@@ -52,6 +52,34 @@ do { \ | |||
52 | preempt_check_resched(); \ | 52 | preempt_check_resched(); \ |
53 | } while (0) | 53 | } while (0) |
54 | 54 | ||
55 | /* For debugging and tracer internals only! */ | ||
56 | #define add_preempt_count_notrace(val) \ | ||
57 | do { preempt_count() += (val); } while (0) | ||
58 | #define sub_preempt_count_notrace(val) \ | ||
59 | do { preempt_count() -= (val); } while (0) | ||
60 | #define inc_preempt_count_notrace() add_preempt_count_notrace(1) | ||
61 | #define dec_preempt_count_notrace() sub_preempt_count_notrace(1) | ||
62 | |||
63 | #define preempt_disable_notrace() \ | ||
64 | do { \ | ||
65 | inc_preempt_count_notrace(); \ | ||
66 | barrier(); \ | ||
67 | } while (0) | ||
68 | |||
69 | #define preempt_enable_no_resched_notrace() \ | ||
70 | do { \ | ||
71 | barrier(); \ | ||
72 | dec_preempt_count_notrace(); \ | ||
73 | } while (0) | ||
74 | |||
75 | /* preempt_check_resched is OK to trace */ | ||
76 | #define preempt_enable_notrace() \ | ||
77 | do { \ | ||
78 | preempt_enable_no_resched_notrace(); \ | ||
79 | barrier(); \ | ||
80 | preempt_check_resched(); \ | ||
81 | } while (0) | ||
82 | |||
55 | #else | 83 | #else |
56 | 84 | ||
57 | #define preempt_disable() do { } while (0) | 85 | #define preempt_disable() do { } while (0) |
@@ -59,6 +87,10 @@ do { \ | |||
59 | #define preempt_enable() do { } while (0) | 87 | #define preempt_enable() do { } while (0) |
60 | #define preempt_check_resched() do { } while (0) | 88 | #define preempt_check_resched() do { } while (0) |
61 | 89 | ||
90 | #define preempt_disable_notrace() do { } while (0) | ||
91 | #define preempt_enable_no_resched_notrace() do { } while (0) | ||
92 | #define preempt_enable_notrace() do { } while (0) | ||
93 | |||
62 | #endif | 94 | #endif |
63 | 95 | ||
64 | #ifdef CONFIG_PREEMPT_NOTIFIERS | 96 | #ifdef CONFIG_PREEMPT_NOTIFIERS |
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h index f98501ba557e..c6f5f9dd0cee 100644 --- a/include/linux/ptrace.h +++ b/include/linux/ptrace.h | |||
@@ -95,8 +95,12 @@ extern void __ptrace_link(struct task_struct *child, | |||
95 | struct task_struct *new_parent); | 95 | struct task_struct *new_parent); |
96 | extern void __ptrace_unlink(struct task_struct *child); | 96 | extern void __ptrace_unlink(struct task_struct *child); |
97 | extern void ptrace_untrace(struct task_struct *child); | 97 | extern void ptrace_untrace(struct task_struct *child); |
98 | extern int ptrace_may_attach(struct task_struct *task); | 98 | #define PTRACE_MODE_READ 1 |
99 | extern int __ptrace_may_attach(struct task_struct *task); | 99 | #define PTRACE_MODE_ATTACH 2 |
100 | /* Returns 0 on success, -errno on denial. */ | ||
101 | extern int __ptrace_may_access(struct task_struct *task, unsigned int mode); | ||
102 | /* Returns true on success, false on denial. */ | ||
103 | extern bool ptrace_may_access(struct task_struct *task, unsigned int mode); | ||
100 | 104 | ||
101 | static inline int ptrace_reparented(struct task_struct *child) | 105 | static inline int ptrace_reparented(struct task_struct *child) |
102 | { | 106 | { |
diff --git a/include/linux/pwm.h b/include/linux/pwm.h new file mode 100644 index 000000000000..3945f803d514 --- /dev/null +++ b/include/linux/pwm.h | |||
@@ -0,0 +1,31 @@ | |||
1 | #ifndef __LINUX_PWM_H | ||
2 | #define __LINUX_PWM_H | ||
3 | |||
4 | struct pwm_device; | ||
5 | |||
6 | /* | ||
7 | * pwm_request - request a PWM device | ||
8 | */ | ||
9 | struct pwm_device *pwm_request(int pwm_id, const char *label); | ||
10 | |||
11 | /* | ||
12 | * pwm_free - free a PWM device | ||
13 | */ | ||
14 | void pwm_free(struct pwm_device *pwm); | ||
15 | |||
16 | /* | ||
17 | * pwm_config - change a PWM device configuration | ||
18 | */ | ||
19 | int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns); | ||
20 | |||
21 | /* | ||
22 | * pwm_enable - start a PWM output toggling | ||
23 | */ | ||
24 | int pwm_enable(struct pwm_device *pwm); | ||
25 | |||
26 | /* | ||
27 | * pwm_disable - stop a PWM output toggling | ||
28 | */ | ||
29 | void pwm_disable(struct pwm_device *pwm); | ||
30 | |||
31 | #endif /* __ASM_ARCH_PWM_H */ | ||
diff --git a/include/linux/pwm_backlight.h b/include/linux/pwm_backlight.h new file mode 100644 index 000000000000..7a9754c96775 --- /dev/null +++ b/include/linux/pwm_backlight.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * Generic PWM backlight driver data - see drivers/video/backlight/pwm_bl.c | ||
3 | */ | ||
4 | #ifndef __LINUX_PWM_BACKLIGHT_H | ||
5 | #define __LINUX_PWM_BACKLIGHT_H | ||
6 | |||
7 | struct platform_pwm_backlight_data { | ||
8 | int pwm_id; | ||
9 | unsigned int max_brightness; | ||
10 | unsigned int dft_brightness; | ||
11 | unsigned int pwm_period_ns; | ||
12 | int (*init)(struct device *dev); | ||
13 | int (*notify)(int brightness); | ||
14 | void (*exit)(struct device *dev); | ||
15 | }; | ||
16 | |||
17 | #endif | ||
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h index b3aa05baab8a..8c774905dcfe 100644 --- a/include/linux/rcuclassic.h +++ b/include/linux/rcuclassic.h | |||
@@ -151,7 +151,10 @@ extern struct lockdep_map rcu_lock_map; | |||
151 | 151 | ||
152 | #define __synchronize_sched() synchronize_rcu() | 152 | #define __synchronize_sched() synchronize_rcu() |
153 | 153 | ||
154 | #define call_rcu_sched(head, func) call_rcu(head, func) | ||
155 | |||
154 | extern void __rcu_init(void); | 156 | extern void __rcu_init(void); |
157 | #define rcu_init_sched() do { } while (0) | ||
155 | extern void rcu_check_callbacks(int cpu, int user); | 158 | extern void rcu_check_callbacks(int cpu, int user); |
156 | extern void rcu_restart_cpu(int cpu); | 159 | extern void rcu_restart_cpu(int cpu); |
157 | 160 | ||
diff --git a/include/linux/rculist.h b/include/linux/rculist.h index bde4586f4382..b0f39be08b6c 100644 --- a/include/linux/rculist.h +++ b/include/linux/rculist.h | |||
@@ -1,6 +1,373 @@ | |||
1 | #ifndef _LINUX_RCULIST_H | 1 | #ifndef _LINUX_RCULIST_H |
2 | #define _LINUX_RCULIST_H | 2 | #define _LINUX_RCULIST_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | /* | ||
7 | * RCU-protected list version | ||
8 | */ | ||
4 | #include <linux/list.h> | 9 | #include <linux/list.h> |
10 | #include <linux/rcupdate.h> | ||
11 | |||
12 | /* | ||
13 | * Insert a new entry between two known consecutive entries. | ||
14 | * | ||
15 | * This is only for internal list manipulation where we know | ||
16 | * the prev/next entries already! | ||
17 | */ | ||
18 | static inline void __list_add_rcu(struct list_head *new, | ||
19 | struct list_head *prev, struct list_head *next) | ||
20 | { | ||
21 | new->next = next; | ||
22 | new->prev = prev; | ||
23 | rcu_assign_pointer(prev->next, new); | ||
24 | next->prev = new; | ||
25 | } | ||
26 | |||
27 | /** | ||
28 | * list_add_rcu - add a new entry to rcu-protected list | ||
29 | * @new: new entry to be added | ||
30 | * @head: list head to add it after | ||
31 | * | ||
32 | * Insert a new entry after the specified head. | ||
33 | * This is good for implementing stacks. | ||
34 | * | ||
35 | * The caller must take whatever precautions are necessary | ||
36 | * (such as holding appropriate locks) to avoid racing | ||
37 | * with another list-mutation primitive, such as list_add_rcu() | ||
38 | * or list_del_rcu(), running on this same list. | ||
39 | * However, it is perfectly legal to run concurrently with | ||
40 | * the _rcu list-traversal primitives, such as | ||
41 | * list_for_each_entry_rcu(). | ||
42 | */ | ||
43 | static inline void list_add_rcu(struct list_head *new, struct list_head *head) | ||
44 | { | ||
45 | __list_add_rcu(new, head, head->next); | ||
46 | } | ||
47 | |||
48 | /** | ||
49 | * list_add_tail_rcu - add a new entry to rcu-protected list | ||
50 | * @new: new entry to be added | ||
51 | * @head: list head to add it before | ||
52 | * | ||
53 | * Insert a new entry before the specified head. | ||
54 | * This is useful for implementing queues. | ||
55 | * | ||
56 | * The caller must take whatever precautions are necessary | ||
57 | * (such as holding appropriate locks) to avoid racing | ||
58 | * with another list-mutation primitive, such as list_add_tail_rcu() | ||
59 | * or list_del_rcu(), running on this same list. | ||
60 | * However, it is perfectly legal to run concurrently with | ||
61 | * the _rcu list-traversal primitives, such as | ||
62 | * list_for_each_entry_rcu(). | ||
63 | */ | ||
64 | static inline void list_add_tail_rcu(struct list_head *new, | ||
65 | struct list_head *head) | ||
66 | { | ||
67 | __list_add_rcu(new, head->prev, head); | ||
68 | } | ||
69 | |||
70 | /** | ||
71 | * list_del_rcu - deletes entry from list without re-initialization | ||
72 | * @entry: the element to delete from the list. | ||
73 | * | ||
74 | * Note: list_empty() on entry does not return true after this, | ||
75 | * the entry is in an undefined state. It is useful for RCU based | ||
76 | * lockfree traversal. | ||
77 | * | ||
78 | * In particular, it means that we can not poison the forward | ||
79 | * pointers that may still be used for walking the list. | ||
80 | * | ||
81 | * The caller must take whatever precautions are necessary | ||
82 | * (such as holding appropriate locks) to avoid racing | ||
83 | * with another list-mutation primitive, such as list_del_rcu() | ||
84 | * or list_add_rcu(), running on this same list. | ||
85 | * However, it is perfectly legal to run concurrently with | ||
86 | * the _rcu list-traversal primitives, such as | ||
87 | * list_for_each_entry_rcu(). | ||
88 | * | ||
89 | * Note that the caller is not permitted to immediately free | ||
90 | * the newly deleted entry. Instead, either synchronize_rcu() | ||
91 | * or call_rcu() must be used to defer freeing until an RCU | ||
92 | * grace period has elapsed. | ||
93 | */ | ||
94 | static inline void list_del_rcu(struct list_head *entry) | ||
95 | { | ||
96 | __list_del(entry->prev, entry->next); | ||
97 | entry->prev = LIST_POISON2; | ||
98 | } | ||
99 | |||
100 | /** | ||
101 | * list_replace_rcu - replace old entry by new one | ||
102 | * @old : the element to be replaced | ||
103 | * @new : the new element to insert | ||
104 | * | ||
105 | * The @old entry will be replaced with the @new entry atomically. | ||
106 | * Note: @old should not be empty. | ||
107 | */ | ||
108 | static inline void list_replace_rcu(struct list_head *old, | ||
109 | struct list_head *new) | ||
110 | { | ||
111 | new->next = old->next; | ||
112 | new->prev = old->prev; | ||
113 | rcu_assign_pointer(new->prev->next, new); | ||
114 | new->next->prev = new; | ||
115 | old->prev = LIST_POISON2; | ||
116 | } | ||
117 | |||
118 | /** | ||
119 | * list_splice_init_rcu - splice an RCU-protected list into an existing list. | ||
120 | * @list: the RCU-protected list to splice | ||
121 | * @head: the place in the list to splice the first list into | ||
122 | * @sync: function to sync: synchronize_rcu(), synchronize_sched(), ... | ||
123 | * | ||
124 | * @head can be RCU-read traversed concurrently with this function. | ||
125 | * | ||
126 | * Note that this function blocks. | ||
127 | * | ||
128 | * Important note: the caller must take whatever action is necessary to | ||
129 | * prevent any other updates to @head. In principle, it is possible | ||
130 | * to modify the list as soon as sync() begins execution. | ||
131 | * If this sort of thing becomes necessary, an alternative version | ||
132 | * based on call_rcu() could be created. But only if -really- | ||
133 | * needed -- there is no shortage of RCU API members. | ||
134 | */ | ||
135 | static inline void list_splice_init_rcu(struct list_head *list, | ||
136 | struct list_head *head, | ||
137 | void (*sync)(void)) | ||
138 | { | ||
139 | struct list_head *first = list->next; | ||
140 | struct list_head *last = list->prev; | ||
141 | struct list_head *at = head->next; | ||
142 | |||
143 | if (list_empty(head)) | ||
144 | return; | ||
145 | |||
146 | /* "first" and "last" tracking list, so initialize it. */ | ||
147 | |||
148 | INIT_LIST_HEAD(list); | ||
149 | |||
150 | /* | ||
151 | * At this point, the list body still points to the source list. | ||
152 | * Wait for any readers to finish using the list before splicing | ||
153 | * the list body into the new list. Any new readers will see | ||
154 | * an empty list. | ||
155 | */ | ||
156 | |||
157 | sync(); | ||
158 | |||
159 | /* | ||
160 | * Readers are finished with the source list, so perform splice. | ||
161 | * The order is important if the new list is global and accessible | ||
162 | * to concurrent RCU readers. Note that RCU readers are not | ||
163 | * permitted to traverse the prev pointers without excluding | ||
164 | * this function. | ||
165 | */ | ||
166 | |||
167 | last->next = at; | ||
168 | rcu_assign_pointer(head->next, first); | ||
169 | first->prev = head; | ||
170 | at->prev = last; | ||
171 | } | ||
172 | |||
173 | /** | ||
174 | * list_for_each_rcu - iterate over an rcu-protected list | ||
175 | * @pos: the &struct list_head to use as a loop cursor. | ||
176 | * @head: the head for your list. | ||
177 | * | ||
178 | * This list-traversal primitive may safely run concurrently with | ||
179 | * the _rcu list-mutation primitives such as list_add_rcu() | ||
180 | * as long as the traversal is guarded by rcu_read_lock(). | ||
181 | */ | ||
182 | #define list_for_each_rcu(pos, head) \ | ||
183 | for (pos = rcu_dereference((head)->next); \ | ||
184 | prefetch(pos->next), pos != (head); \ | ||
185 | pos = rcu_dereference(pos->next)) | ||
186 | |||
187 | #define __list_for_each_rcu(pos, head) \ | ||
188 | for (pos = rcu_dereference((head)->next); \ | ||
189 | pos != (head); \ | ||
190 | pos = rcu_dereference(pos->next)) | ||
191 | |||
192 | /** | ||
193 | * list_for_each_entry_rcu - iterate over rcu list of given type | ||
194 | * @pos: the type * to use as a loop cursor. | ||
195 | * @head: the head for your list. | ||
196 | * @member: the name of the list_struct within the struct. | ||
197 | * | ||
198 | * This list-traversal primitive may safely run concurrently with | ||
199 | * the _rcu list-mutation primitives such as list_add_rcu() | ||
200 | * as long as the traversal is guarded by rcu_read_lock(). | ||
201 | */ | ||
202 | #define list_for_each_entry_rcu(pos, head, member) \ | ||
203 | for (pos = list_entry(rcu_dereference((head)->next), typeof(*pos), member); \ | ||
204 | prefetch(pos->member.next), &pos->member != (head); \ | ||
205 | pos = list_entry(rcu_dereference(pos->member.next), typeof(*pos), member)) | ||
206 | |||
207 | |||
208 | /** | ||
209 | * list_for_each_continue_rcu | ||
210 | * @pos: the &struct list_head to use as a loop cursor. | ||
211 | * @head: the head for your list. | ||
212 | * | ||
213 | * Iterate over an rcu-protected list, continuing after current point. | ||
214 | * | ||
215 | * This list-traversal primitive may safely run concurrently with | ||
216 | * the _rcu list-mutation primitives such as list_add_rcu() | ||
217 | * as long as the traversal is guarded by rcu_read_lock(). | ||
218 | */ | ||
219 | #define list_for_each_continue_rcu(pos, head) \ | ||
220 | for ((pos) = rcu_dereference((pos)->next); \ | ||
221 | prefetch((pos)->next), (pos) != (head); \ | ||
222 | (pos) = rcu_dereference((pos)->next)) | ||
223 | |||
224 | /** | ||
225 | * hlist_del_rcu - deletes entry from hash list without re-initialization | ||
226 | * @n: the element to delete from the hash list. | ||
227 | * | ||
228 | * Note: list_unhashed() on entry does not return true after this, | ||
229 | * the entry is in an undefined state. It is useful for RCU based | ||
230 | * lockfree traversal. | ||
231 | * | ||
232 | * In particular, it means that we can not poison the forward | ||
233 | * pointers that may still be used for walking the hash list. | ||
234 | * | ||
235 | * The caller must take whatever precautions are necessary | ||
236 | * (such as holding appropriate locks) to avoid racing | ||
237 | * with another list-mutation primitive, such as hlist_add_head_rcu() | ||
238 | * or hlist_del_rcu(), running on this same list. | ||
239 | * However, it is perfectly legal to run concurrently with | ||
240 | * the _rcu list-traversal primitives, such as | ||
241 | * hlist_for_each_entry(). | ||
242 | */ | ||
243 | static inline void hlist_del_rcu(struct hlist_node *n) | ||
244 | { | ||
245 | __hlist_del(n); | ||
246 | n->pprev = LIST_POISON2; | ||
247 | } | ||
248 | |||
249 | /** | ||
250 | * hlist_replace_rcu - replace old entry by new one | ||
251 | * @old : the element to be replaced | ||
252 | * @new : the new element to insert | ||
253 | * | ||
254 | * The @old entry will be replaced with the @new entry atomically. | ||
255 | */ | ||
256 | static inline void hlist_replace_rcu(struct hlist_node *old, | ||
257 | struct hlist_node *new) | ||
258 | { | ||
259 | struct hlist_node *next = old->next; | ||
260 | |||
261 | new->next = next; | ||
262 | new->pprev = old->pprev; | ||
263 | rcu_assign_pointer(*new->pprev, new); | ||
264 | if (next) | ||
265 | new->next->pprev = &new->next; | ||
266 | old->pprev = LIST_POISON2; | ||
267 | } | ||
268 | |||
269 | /** | ||
270 | * hlist_add_head_rcu | ||
271 | * @n: the element to add to the hash list. | ||
272 | * @h: the list to add to. | ||
273 | * | ||
274 | * Description: | ||
275 | * Adds the specified element to the specified hlist, | ||
276 | * while permitting racing traversals. | ||
277 | * | ||
278 | * The caller must take whatever precautions are necessary | ||
279 | * (such as holding appropriate locks) to avoid racing | ||
280 | * with another list-mutation primitive, such as hlist_add_head_rcu() | ||
281 | * or hlist_del_rcu(), running on this same list. | ||
282 | * However, it is perfectly legal to run concurrently with | ||
283 | * the _rcu list-traversal primitives, such as | ||
284 | * hlist_for_each_entry_rcu(), used to prevent memory-consistency | ||
285 | * problems on Alpha CPUs. Regardless of the type of CPU, the | ||
286 | * list-traversal primitive must be guarded by rcu_read_lock(). | ||
287 | */ | ||
288 | static inline void hlist_add_head_rcu(struct hlist_node *n, | ||
289 | struct hlist_head *h) | ||
290 | { | ||
291 | struct hlist_node *first = h->first; | ||
292 | |||
293 | n->next = first; | ||
294 | n->pprev = &h->first; | ||
295 | rcu_assign_pointer(h->first, n); | ||
296 | if (first) | ||
297 | first->pprev = &n->next; | ||
298 | } | ||
299 | |||
300 | /** | ||
301 | * hlist_add_before_rcu | ||
302 | * @n: the new element to add to the hash list. | ||
303 | * @next: the existing element to add the new element before. | ||
304 | * | ||
305 | * Description: | ||
306 | * Adds the specified element to the specified hlist | ||
307 | * before the specified node while permitting racing traversals. | ||
308 | * | ||
309 | * The caller must take whatever precautions are necessary | ||
310 | * (such as holding appropriate locks) to avoid racing | ||
311 | * with another list-mutation primitive, such as hlist_add_head_rcu() | ||
312 | * or hlist_del_rcu(), running on this same list. | ||
313 | * However, it is perfectly legal to run concurrently with | ||
314 | * the _rcu list-traversal primitives, such as | ||
315 | * hlist_for_each_entry_rcu(), used to prevent memory-consistency | ||
316 | * problems on Alpha CPUs. | ||
317 | */ | ||
318 | static inline void hlist_add_before_rcu(struct hlist_node *n, | ||
319 | struct hlist_node *next) | ||
320 | { | ||
321 | n->pprev = next->pprev; | ||
322 | n->next = next; | ||
323 | rcu_assign_pointer(*(n->pprev), n); | ||
324 | next->pprev = &n->next; | ||
325 | } | ||
326 | |||
327 | /** | ||
328 | * hlist_add_after_rcu | ||
329 | * @prev: the existing element to add the new element after. | ||
330 | * @n: the new element to add to the hash list. | ||
331 | * | ||
332 | * Description: | ||
333 | * Adds the specified element to the specified hlist | ||
334 | * after the specified node while permitting racing traversals. | ||
335 | * | ||
336 | * The caller must take whatever precautions are necessary | ||
337 | * (such as holding appropriate locks) to avoid racing | ||
338 | * with another list-mutation primitive, such as hlist_add_head_rcu() | ||
339 | * or hlist_del_rcu(), running on this same list. | ||
340 | * However, it is perfectly legal to run concurrently with | ||
341 | * the _rcu list-traversal primitives, such as | ||
342 | * hlist_for_each_entry_rcu(), used to prevent memory-consistency | ||
343 | * problems on Alpha CPUs. | ||
344 | */ | ||
345 | static inline void hlist_add_after_rcu(struct hlist_node *prev, | ||
346 | struct hlist_node *n) | ||
347 | { | ||
348 | n->next = prev->next; | ||
349 | n->pprev = &prev->next; | ||
350 | rcu_assign_pointer(prev->next, n); | ||
351 | if (n->next) | ||
352 | n->next->pprev = &n->next; | ||
353 | } | ||
354 | |||
355 | /** | ||
356 | * hlist_for_each_entry_rcu - iterate over rcu list of given type | ||
357 | * @tpos: the type * to use as a loop cursor. | ||
358 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
359 | * @head: the head for your list. | ||
360 | * @member: the name of the hlist_node within the struct. | ||
361 | * | ||
362 | * This list-traversal primitive may safely run concurrently with | ||
363 | * the _rcu list-mutation primitives such as hlist_add_head_rcu() | ||
364 | * as long as the traversal is guarded by rcu_read_lock(). | ||
365 | */ | ||
366 | #define hlist_for_each_entry_rcu(tpos, pos, head, member) \ | ||
367 | for (pos = rcu_dereference((head)->first); \ | ||
368 | pos && ({ prefetch(pos->next); 1; }) && \ | ||
369 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ | ||
370 | pos = rcu_dereference(pos->next)) | ||
5 | 371 | ||
6 | #endif /* _LINUX_RCULIST_H */ | 372 | #endif /* __KERNEL__ */ |
373 | #endif | ||
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index d42dbec06083..e8b4039cfb2f 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <linux/cpumask.h> | 40 | #include <linux/cpumask.h> |
41 | #include <linux/seqlock.h> | 41 | #include <linux/seqlock.h> |
42 | #include <linux/lockdep.h> | 42 | #include <linux/lockdep.h> |
43 | #include <linux/completion.h> | ||
43 | 44 | ||
44 | /** | 45 | /** |
45 | * struct rcu_head - callback structure for use with RCU | 46 | * struct rcu_head - callback structure for use with RCU |
@@ -168,6 +169,27 @@ struct rcu_head { | |||
168 | (p) = (v); \ | 169 | (p) = (v); \ |
169 | }) | 170 | }) |
170 | 171 | ||
172 | /* Infrastructure to implement the synchronize_() primitives. */ | ||
173 | |||
174 | struct rcu_synchronize { | ||
175 | struct rcu_head head; | ||
176 | struct completion completion; | ||
177 | }; | ||
178 | |||
179 | extern void wakeme_after_rcu(struct rcu_head *head); | ||
180 | |||
181 | #define synchronize_rcu_xxx(name, func) \ | ||
182 | void name(void) \ | ||
183 | { \ | ||
184 | struct rcu_synchronize rcu; \ | ||
185 | \ | ||
186 | init_completion(&rcu.completion); \ | ||
187 | /* Will wake me after RCU finished. */ \ | ||
188 | func(&rcu.head, wakeme_after_rcu); \ | ||
189 | /* Wait for it. */ \ | ||
190 | wait_for_completion(&rcu.completion); \ | ||
191 | } | ||
192 | |||
171 | /** | 193 | /** |
172 | * synchronize_sched - block until all CPUs have exited any non-preemptive | 194 | * synchronize_sched - block until all CPUs have exited any non-preemptive |
173 | * kernel code sequences. | 195 | * kernel code sequences. |
@@ -224,8 +246,8 @@ extern void call_rcu_bh(struct rcu_head *head, | |||
224 | /* Exported common interfaces */ | 246 | /* Exported common interfaces */ |
225 | extern void synchronize_rcu(void); | 247 | extern void synchronize_rcu(void); |
226 | extern void rcu_barrier(void); | 248 | extern void rcu_barrier(void); |
227 | extern long rcu_batches_completed(void); | 249 | extern void rcu_barrier_bh(void); |
228 | extern long rcu_batches_completed_bh(void); | 250 | extern void rcu_barrier_sched(void); |
229 | 251 | ||
230 | /* Internal to kernel */ | 252 | /* Internal to kernel */ |
231 | extern void rcu_init(void); | 253 | extern void rcu_init(void); |
diff --git a/include/linux/rcupreempt.h b/include/linux/rcupreempt.h index 8a05c7e20bc4..f04b64eca636 100644 --- a/include/linux/rcupreempt.h +++ b/include/linux/rcupreempt.h | |||
@@ -40,10 +40,39 @@ | |||
40 | #include <linux/cpumask.h> | 40 | #include <linux/cpumask.h> |
41 | #include <linux/seqlock.h> | 41 | #include <linux/seqlock.h> |
42 | 42 | ||
43 | #define rcu_qsctr_inc(cpu) | 43 | struct rcu_dyntick_sched { |
44 | int dynticks; | ||
45 | int dynticks_snap; | ||
46 | int sched_qs; | ||
47 | int sched_qs_snap; | ||
48 | int sched_dynticks_snap; | ||
49 | }; | ||
50 | |||
51 | DECLARE_PER_CPU(struct rcu_dyntick_sched, rcu_dyntick_sched); | ||
52 | |||
53 | static inline void rcu_qsctr_inc(int cpu) | ||
54 | { | ||
55 | struct rcu_dyntick_sched *rdssp = &per_cpu(rcu_dyntick_sched, cpu); | ||
56 | |||
57 | rdssp->sched_qs++; | ||
58 | } | ||
44 | #define rcu_bh_qsctr_inc(cpu) | 59 | #define rcu_bh_qsctr_inc(cpu) |
45 | #define call_rcu_bh(head, rcu) call_rcu(head, rcu) | 60 | #define call_rcu_bh(head, rcu) call_rcu(head, rcu) |
46 | 61 | ||
62 | /** | ||
63 | * call_rcu_sched - Queue RCU callback for invocation after sched grace period. | ||
64 | * @head: structure to be used for queueing the RCU updates. | ||
65 | * @func: actual update function to be invoked after the grace period | ||
66 | * | ||
67 | * The update function will be invoked some time after a full | ||
68 | * synchronize_sched()-style grace period elapses, in other words after | ||
69 | * all currently executing preempt-disabled sections of code (including | ||
70 | * hardirq handlers, NMI handlers, and local_irq_save() blocks) have | ||
71 | * completed. | ||
72 | */ | ||
73 | extern void call_rcu_sched(struct rcu_head *head, | ||
74 | void (*func)(struct rcu_head *head)); | ||
75 | |||
47 | extern void __rcu_read_lock(void) __acquires(RCU); | 76 | extern void __rcu_read_lock(void) __acquires(RCU); |
48 | extern void __rcu_read_unlock(void) __releases(RCU); | 77 | extern void __rcu_read_unlock(void) __releases(RCU); |
49 | extern int rcu_pending(int cpu); | 78 | extern int rcu_pending(int cpu); |
@@ -55,6 +84,7 @@ extern int rcu_needs_cpu(int cpu); | |||
55 | extern void __synchronize_sched(void); | 84 | extern void __synchronize_sched(void); |
56 | 85 | ||
57 | extern void __rcu_init(void); | 86 | extern void __rcu_init(void); |
87 | extern void rcu_init_sched(void); | ||
58 | extern void rcu_check_callbacks(int cpu, int user); | 88 | extern void rcu_check_callbacks(int cpu, int user); |
59 | extern void rcu_restart_cpu(int cpu); | 89 | extern void rcu_restart_cpu(int cpu); |
60 | extern long rcu_batches_completed(void); | 90 | extern long rcu_batches_completed(void); |
@@ -81,20 +111,20 @@ extern struct rcupreempt_trace *rcupreempt_trace_cpu(int cpu); | |||
81 | struct softirq_action; | 111 | struct softirq_action; |
82 | 112 | ||
83 | #ifdef CONFIG_NO_HZ | 113 | #ifdef CONFIG_NO_HZ |
84 | DECLARE_PER_CPU(long, dynticks_progress_counter); | 114 | DECLARE_PER_CPU(struct rcu_dyntick_sched, rcu_dyntick_sched); |
85 | 115 | ||
86 | static inline void rcu_enter_nohz(void) | 116 | static inline void rcu_enter_nohz(void) |
87 | { | 117 | { |
88 | smp_mb(); /* CPUs seeing ++ must see prior RCU read-side crit sects */ | 118 | smp_mb(); /* CPUs seeing ++ must see prior RCU read-side crit sects */ |
89 | __get_cpu_var(dynticks_progress_counter)++; | 119 | __get_cpu_var(rcu_dyntick_sched).dynticks++; |
90 | WARN_ON(__get_cpu_var(dynticks_progress_counter) & 0x1); | 120 | WARN_ON(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1); |
91 | } | 121 | } |
92 | 122 | ||
93 | static inline void rcu_exit_nohz(void) | 123 | static inline void rcu_exit_nohz(void) |
94 | { | 124 | { |
95 | __get_cpu_var(dynticks_progress_counter)++; | ||
96 | smp_mb(); /* CPUs seeing ++ must see later RCU read-side crit sects */ | 125 | smp_mb(); /* CPUs seeing ++ must see later RCU read-side crit sects */ |
97 | WARN_ON(!(__get_cpu_var(dynticks_progress_counter) & 0x1)); | 126 | __get_cpu_var(rcu_dyntick_sched).dynticks++; |
127 | WARN_ON(!(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1)); | ||
98 | } | 128 | } |
99 | 129 | ||
100 | #else /* CONFIG_NO_HZ */ | 130 | #else /* CONFIG_NO_HZ */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index c5d3f847ca8d..1941d8b5cf11 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -134,7 +134,6 @@ extern unsigned long nr_running(void); | |||
134 | extern unsigned long nr_uninterruptible(void); | 134 | extern unsigned long nr_uninterruptible(void); |
135 | extern unsigned long nr_active(void); | 135 | extern unsigned long nr_active(void); |
136 | extern unsigned long nr_iowait(void); | 136 | extern unsigned long nr_iowait(void); |
137 | extern unsigned long weighted_cpuload(const int cpu); | ||
138 | 137 | ||
139 | struct seq_file; | 138 | struct seq_file; |
140 | struct cfs_rq; | 139 | struct cfs_rq; |
@@ -246,6 +245,8 @@ extern asmlinkage void schedule_tail(struct task_struct *prev); | |||
246 | extern void init_idle(struct task_struct *idle, int cpu); | 245 | extern void init_idle(struct task_struct *idle, int cpu); |
247 | extern void init_idle_bootup_task(struct task_struct *idle); | 246 | extern void init_idle_bootup_task(struct task_struct *idle); |
248 | 247 | ||
248 | extern int runqueue_is_locked(void); | ||
249 | |||
249 | extern cpumask_t nohz_cpu_mask; | 250 | extern cpumask_t nohz_cpu_mask; |
250 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) | 251 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) |
251 | extern int select_nohz_load_balancer(int cpu); | 252 | extern int select_nohz_load_balancer(int cpu); |
@@ -784,6 +785,8 @@ struct sched_domain { | |||
784 | unsigned int balance_interval; /* initialise to 1. units in ms. */ | 785 | unsigned int balance_interval; /* initialise to 1. units in ms. */ |
785 | unsigned int nr_balance_failed; /* initialise to 0 */ | 786 | unsigned int nr_balance_failed; /* initialise to 0 */ |
786 | 787 | ||
788 | u64 last_update; | ||
789 | |||
787 | #ifdef CONFIG_SCHEDSTATS | 790 | #ifdef CONFIG_SCHEDSTATS |
788 | /* load_balance() stats */ | 791 | /* load_balance() stats */ |
789 | unsigned int lb_count[CPU_MAX_IDLE_TYPES]; | 792 | unsigned int lb_count[CPU_MAX_IDLE_TYPES]; |
@@ -823,23 +826,6 @@ extern int arch_reinit_sched_domains(void); | |||
823 | 826 | ||
824 | #endif /* CONFIG_SMP */ | 827 | #endif /* CONFIG_SMP */ |
825 | 828 | ||
826 | /* | ||
827 | * A runqueue laden with a single nice 0 task scores a weighted_cpuload of | ||
828 | * SCHED_LOAD_SCALE. This function returns 1 if any cpu is laden with a | ||
829 | * task of nice 0 or enough lower priority tasks to bring up the | ||
830 | * weighted_cpuload | ||
831 | */ | ||
832 | static inline int above_background_load(void) | ||
833 | { | ||
834 | unsigned long cpu; | ||
835 | |||
836 | for_each_online_cpu(cpu) { | ||
837 | if (weighted_cpuload(cpu) >= SCHED_LOAD_SCALE) | ||
838 | return 1; | ||
839 | } | ||
840 | return 0; | ||
841 | } | ||
842 | |||
843 | struct io_context; /* See blkdev.h */ | 829 | struct io_context; /* See blkdev.h */ |
844 | #define NGROUPS_SMALL 32 | 830 | #define NGROUPS_SMALL 32 |
845 | #define NGROUPS_PER_BLOCK ((unsigned int)(PAGE_SIZE / sizeof(gid_t))) | 831 | #define NGROUPS_PER_BLOCK ((unsigned int)(PAGE_SIZE / sizeof(gid_t))) |
@@ -921,8 +907,8 @@ struct sched_class { | |||
921 | void (*set_cpus_allowed)(struct task_struct *p, | 907 | void (*set_cpus_allowed)(struct task_struct *p, |
922 | const cpumask_t *newmask); | 908 | const cpumask_t *newmask); |
923 | 909 | ||
924 | void (*join_domain)(struct rq *rq); | 910 | void (*rq_online)(struct rq *rq); |
925 | void (*leave_domain)(struct rq *rq); | 911 | void (*rq_offline)(struct rq *rq); |
926 | 912 | ||
927 | void (*switched_from) (struct rq *this_rq, struct task_struct *task, | 913 | void (*switched_from) (struct rq *this_rq, struct task_struct *task, |
928 | int running); | 914 | int running); |
@@ -1039,6 +1025,7 @@ struct task_struct { | |||
1039 | #endif | 1025 | #endif |
1040 | 1026 | ||
1041 | int prio, static_prio, normal_prio; | 1027 | int prio, static_prio, normal_prio; |
1028 | unsigned int rt_priority; | ||
1042 | const struct sched_class *sched_class; | 1029 | const struct sched_class *sched_class; |
1043 | struct sched_entity se; | 1030 | struct sched_entity se; |
1044 | struct sched_rt_entity rt; | 1031 | struct sched_rt_entity rt; |
@@ -1075,12 +1062,6 @@ struct task_struct { | |||
1075 | #endif | 1062 | #endif |
1076 | 1063 | ||
1077 | struct list_head tasks; | 1064 | struct list_head tasks; |
1078 | /* | ||
1079 | * ptrace_list/ptrace_children forms the list of my children | ||
1080 | * that were stolen by a ptracer. | ||
1081 | */ | ||
1082 | struct list_head ptrace_children; | ||
1083 | struct list_head ptrace_list; | ||
1084 | 1065 | ||
1085 | struct mm_struct *mm, *active_mm; | 1066 | struct mm_struct *mm, *active_mm; |
1086 | 1067 | ||
@@ -1102,18 +1083,25 @@ struct task_struct { | |||
1102 | /* | 1083 | /* |
1103 | * pointers to (original) parent process, youngest child, younger sibling, | 1084 | * pointers to (original) parent process, youngest child, younger sibling, |
1104 | * older sibling, respectively. (p->father can be replaced with | 1085 | * older sibling, respectively. (p->father can be replaced with |
1105 | * p->parent->pid) | 1086 | * p->real_parent->pid) |
1106 | */ | 1087 | */ |
1107 | struct task_struct *real_parent; /* real parent process (when being debugged) */ | 1088 | struct task_struct *real_parent; /* real parent process */ |
1108 | struct task_struct *parent; /* parent process */ | 1089 | struct task_struct *parent; /* recipient of SIGCHLD, wait4() reports */ |
1109 | /* | 1090 | /* |
1110 | * children/sibling forms the list of my children plus the | 1091 | * children/sibling forms the list of my natural children |
1111 | * tasks I'm ptracing. | ||
1112 | */ | 1092 | */ |
1113 | struct list_head children; /* list of my children */ | 1093 | struct list_head children; /* list of my children */ |
1114 | struct list_head sibling; /* linkage in my parent's children list */ | 1094 | struct list_head sibling; /* linkage in my parent's children list */ |
1115 | struct task_struct *group_leader; /* threadgroup leader */ | 1095 | struct task_struct *group_leader; /* threadgroup leader */ |
1116 | 1096 | ||
1097 | /* | ||
1098 | * ptraced is the list of tasks this task is using ptrace on. | ||
1099 | * This includes both natural children and PTRACE_ATTACH targets. | ||
1100 | * p->ptrace_entry is p's link on the p->parent->ptraced list. | ||
1101 | */ | ||
1102 | struct list_head ptraced; | ||
1103 | struct list_head ptrace_entry; | ||
1104 | |||
1117 | /* PID/PID hash table linkage. */ | 1105 | /* PID/PID hash table linkage. */ |
1118 | struct pid_link pids[PIDTYPE_MAX]; | 1106 | struct pid_link pids[PIDTYPE_MAX]; |
1119 | struct list_head thread_group; | 1107 | struct list_head thread_group; |
@@ -1122,7 +1110,6 @@ struct task_struct { | |||
1122 | int __user *set_child_tid; /* CLONE_CHILD_SETTID */ | 1110 | int __user *set_child_tid; /* CLONE_CHILD_SETTID */ |
1123 | int __user *clear_child_tid; /* CLONE_CHILD_CLEARTID */ | 1111 | int __user *clear_child_tid; /* CLONE_CHILD_CLEARTID */ |
1124 | 1112 | ||
1125 | unsigned int rt_priority; | ||
1126 | cputime_t utime, stime, utimescaled, stimescaled; | 1113 | cputime_t utime, stime, utimescaled, stimescaled; |
1127 | cputime_t gtime; | 1114 | cputime_t gtime; |
1128 | cputime_t prev_utime, prev_stime; | 1115 | cputime_t prev_utime, prev_stime; |
@@ -1141,12 +1128,12 @@ struct task_struct { | |||
1141 | gid_t gid,egid,sgid,fsgid; | 1128 | gid_t gid,egid,sgid,fsgid; |
1142 | struct group_info *group_info; | 1129 | struct group_info *group_info; |
1143 | kernel_cap_t cap_effective, cap_inheritable, cap_permitted, cap_bset; | 1130 | kernel_cap_t cap_effective, cap_inheritable, cap_permitted, cap_bset; |
1144 | unsigned securebits; | ||
1145 | struct user_struct *user; | 1131 | struct user_struct *user; |
1132 | unsigned securebits; | ||
1146 | #ifdef CONFIG_KEYS | 1133 | #ifdef CONFIG_KEYS |
1134 | unsigned char jit_keyring; /* default keyring to attach requested keys to */ | ||
1147 | struct key *request_key_auth; /* assumed request_key authority */ | 1135 | struct key *request_key_auth; /* assumed request_key authority */ |
1148 | struct key *thread_keyring; /* keyring private to this thread */ | 1136 | struct key *thread_keyring; /* keyring private to this thread */ |
1149 | unsigned char jit_keyring; /* default keyring to attach requested keys to */ | ||
1150 | #endif | 1137 | #endif |
1151 | char comm[TASK_COMM_LEN]; /* executable name excluding path | 1138 | char comm[TASK_COMM_LEN]; /* executable name excluding path |
1152 | - access with [gs]et_task_comm (which lock | 1139 | - access with [gs]et_task_comm (which lock |
@@ -1233,8 +1220,8 @@ struct task_struct { | |||
1233 | # define MAX_LOCK_DEPTH 48UL | 1220 | # define MAX_LOCK_DEPTH 48UL |
1234 | u64 curr_chain_key; | 1221 | u64 curr_chain_key; |
1235 | int lockdep_depth; | 1222 | int lockdep_depth; |
1236 | struct held_lock held_locks[MAX_LOCK_DEPTH]; | ||
1237 | unsigned int lockdep_recursion; | 1223 | unsigned int lockdep_recursion; |
1224 | struct held_lock held_locks[MAX_LOCK_DEPTH]; | ||
1238 | #endif | 1225 | #endif |
1239 | 1226 | ||
1240 | /* journalling filesystem info */ | 1227 | /* journalling filesystem info */ |
@@ -1262,10 +1249,6 @@ struct task_struct { | |||
1262 | u64 acct_vm_mem1; /* accumulated virtual memory usage */ | 1249 | u64 acct_vm_mem1; /* accumulated virtual memory usage */ |
1263 | cputime_t acct_stimexpd;/* stime since last update */ | 1250 | cputime_t acct_stimexpd;/* stime since last update */ |
1264 | #endif | 1251 | #endif |
1265 | #ifdef CONFIG_NUMA | ||
1266 | struct mempolicy *mempolicy; | ||
1267 | short il_next; | ||
1268 | #endif | ||
1269 | #ifdef CONFIG_CPUSETS | 1252 | #ifdef CONFIG_CPUSETS |
1270 | nodemask_t mems_allowed; | 1253 | nodemask_t mems_allowed; |
1271 | int cpuset_mems_generation; | 1254 | int cpuset_mems_generation; |
@@ -1285,6 +1268,10 @@ struct task_struct { | |||
1285 | struct list_head pi_state_list; | 1268 | struct list_head pi_state_list; |
1286 | struct futex_pi_state *pi_state_cache; | 1269 | struct futex_pi_state *pi_state_cache; |
1287 | #endif | 1270 | #endif |
1271 | #ifdef CONFIG_NUMA | ||
1272 | struct mempolicy *mempolicy; | ||
1273 | short il_next; | ||
1274 | #endif | ||
1288 | atomic_t fs_excl; /* holding fs exclusive resources */ | 1275 | atomic_t fs_excl; /* holding fs exclusive resources */ |
1289 | struct rcu_head rcu; | 1276 | struct rcu_head rcu; |
1290 | 1277 | ||
@@ -1504,9 +1491,11 @@ static inline void put_task_struct(struct task_struct *t) | |||
1504 | #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ | 1491 | #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ |
1505 | #define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */ | 1492 | #define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */ |
1506 | #define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */ | 1493 | #define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */ |
1494 | #define PF_THREAD_BOUND 0x04000000 /* Thread bound to specific cpu */ | ||
1507 | #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ | 1495 | #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ |
1508 | #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ | 1496 | #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ |
1509 | #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezeable */ | 1497 | #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezeable */ |
1498 | #define PF_FREEZER_NOSIG 0x80000000 /* Freezer won't send signals to it */ | ||
1510 | 1499 | ||
1511 | /* | 1500 | /* |
1512 | * Only the _current_ task can read/write to tsk->flags, but other | 1501 | * Only the _current_ task can read/write to tsk->flags, but other |
@@ -1573,13 +1562,28 @@ static inline void sched_clock_idle_sleep_event(void) | |||
1573 | static inline void sched_clock_idle_wakeup_event(u64 delta_ns) | 1562 | static inline void sched_clock_idle_wakeup_event(u64 delta_ns) |
1574 | { | 1563 | { |
1575 | } | 1564 | } |
1576 | #else | 1565 | |
1566 | #ifdef CONFIG_NO_HZ | ||
1567 | static inline void sched_clock_tick_stop(int cpu) | ||
1568 | { | ||
1569 | } | ||
1570 | |||
1571 | static inline void sched_clock_tick_start(int cpu) | ||
1572 | { | ||
1573 | } | ||
1574 | #endif | ||
1575 | |||
1576 | #else /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */ | ||
1577 | extern void sched_clock_init(void); | 1577 | extern void sched_clock_init(void); |
1578 | extern u64 sched_clock_cpu(int cpu); | 1578 | extern u64 sched_clock_cpu(int cpu); |
1579 | extern void sched_clock_tick(void); | 1579 | extern void sched_clock_tick(void); |
1580 | extern void sched_clock_idle_sleep_event(void); | 1580 | extern void sched_clock_idle_sleep_event(void); |
1581 | extern void sched_clock_idle_wakeup_event(u64 delta_ns); | 1581 | extern void sched_clock_idle_wakeup_event(u64 delta_ns); |
1582 | #ifdef CONFIG_NO_HZ | ||
1583 | extern void sched_clock_tick_stop(int cpu); | ||
1584 | extern void sched_clock_tick_start(int cpu); | ||
1582 | #endif | 1585 | #endif |
1586 | #endif /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */ | ||
1583 | 1587 | ||
1584 | /* | 1588 | /* |
1585 | * For kernel-internal use: high-speed (but slightly incorrect) per-cpu | 1589 | * For kernel-internal use: high-speed (but slightly incorrect) per-cpu |
@@ -1622,6 +1626,7 @@ extern unsigned int sysctl_sched_child_runs_first; | |||
1622 | extern unsigned int sysctl_sched_features; | 1626 | extern unsigned int sysctl_sched_features; |
1623 | extern unsigned int sysctl_sched_migration_cost; | 1627 | extern unsigned int sysctl_sched_migration_cost; |
1624 | extern unsigned int sysctl_sched_nr_migrate; | 1628 | extern unsigned int sysctl_sched_nr_migrate; |
1629 | extern unsigned int sysctl_sched_shares_ratelimit; | ||
1625 | 1630 | ||
1626 | int sched_nr_latency_handler(struct ctl_table *table, int write, | 1631 | int sched_nr_latency_handler(struct ctl_table *table, int write, |
1627 | struct file *file, void __user *buffer, size_t *length, | 1632 | struct file *file, void __user *buffer, size_t *length, |
@@ -1655,6 +1660,8 @@ extern int can_nice(const struct task_struct *p, const int nice); | |||
1655 | extern int task_curr(const struct task_struct *p); | 1660 | extern int task_curr(const struct task_struct *p); |
1656 | extern int idle_cpu(int cpu); | 1661 | extern int idle_cpu(int cpu); |
1657 | extern int sched_setscheduler(struct task_struct *, int, struct sched_param *); | 1662 | extern int sched_setscheduler(struct task_struct *, int, struct sched_param *); |
1663 | extern int sched_setscheduler_nocheck(struct task_struct *, int, | ||
1664 | struct sched_param *); | ||
1658 | extern struct task_struct *idle_task(int cpu); | 1665 | extern struct task_struct *idle_task(int cpu); |
1659 | extern struct task_struct *curr_task(int cpu); | 1666 | extern struct task_struct *curr_task(int cpu); |
1660 | extern void set_curr_task(int cpu, struct task_struct *p); | 1667 | extern void set_curr_task(int cpu, struct task_struct *p); |
@@ -1870,9 +1877,6 @@ extern void wait_task_inactive(struct task_struct * p); | |||
1870 | #define wait_task_inactive(p) do { } while (0) | 1877 | #define wait_task_inactive(p) do { } while (0) |
1871 | #endif | 1878 | #endif |
1872 | 1879 | ||
1873 | #define remove_parent(p) list_del_init(&(p)->sibling) | ||
1874 | #define add_parent(p) list_add_tail(&(p)->sibling,&(p)->parent->children) | ||
1875 | |||
1876 | #define next_task(p) list_entry(rcu_dereference((p)->tasks.next), struct task_struct, tasks) | 1880 | #define next_task(p) list_entry(rcu_dereference((p)->tasks.next), struct task_struct, tasks) |
1877 | 1881 | ||
1878 | #define for_each_process(p) \ | 1882 | #define for_each_process(p) \ |
@@ -2131,6 +2135,18 @@ static inline void arch_pick_mmap_layout(struct mm_struct *mm) | |||
2131 | } | 2135 | } |
2132 | #endif | 2136 | #endif |
2133 | 2137 | ||
2138 | #ifdef CONFIG_TRACING | ||
2139 | extern void | ||
2140 | __trace_special(void *__tr, void *__data, | ||
2141 | unsigned long arg1, unsigned long arg2, unsigned long arg3); | ||
2142 | #else | ||
2143 | static inline void | ||
2144 | __trace_special(void *__tr, void *__data, | ||
2145 | unsigned long arg1, unsigned long arg2, unsigned long arg3) | ||
2146 | { | ||
2147 | } | ||
2148 | #endif | ||
2149 | |||
2134 | extern long sched_setaffinity(pid_t pid, const cpumask_t *new_mask); | 2150 | extern long sched_setaffinity(pid_t pid, const cpumask_t *new_mask); |
2135 | extern long sched_getaffinity(pid_t pid, cpumask_t *mask); | 2151 | extern long sched_getaffinity(pid_t pid, cpumask_t *mask); |
2136 | 2152 | ||
@@ -2225,6 +2241,8 @@ static inline void mm_init_owner(struct mm_struct *mm, struct task_struct *p) | |||
2225 | } | 2241 | } |
2226 | #endif /* CONFIG_MM_OWNER */ | 2242 | #endif /* CONFIG_MM_OWNER */ |
2227 | 2243 | ||
2244 | #define TASK_STATE_TO_CHAR_STR "RSDTtZX" | ||
2245 | |||
2228 | #endif /* __KERNEL__ */ | 2246 | #endif /* __KERNEL__ */ |
2229 | 2247 | ||
2230 | #endif | 2248 | #endif |
diff --git a/include/linux/security.h b/include/linux/security.h index 50737c70e78e..31c8851ec5d0 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -46,7 +46,8 @@ struct audit_krule; | |||
46 | */ | 46 | */ |
47 | extern int cap_capable(struct task_struct *tsk, int cap); | 47 | extern int cap_capable(struct task_struct *tsk, int cap); |
48 | extern int cap_settime(struct timespec *ts, struct timezone *tz); | 48 | extern int cap_settime(struct timespec *ts, struct timezone *tz); |
49 | 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, |
50 | unsigned int mode); | ||
50 | extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); | 51 | extern int cap_capget(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); | 52 | extern int cap_capset_check(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); | 53 | extern void cap_capset_set(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
@@ -79,6 +80,7 @@ struct xfrm_selector; | |||
79 | struct xfrm_policy; | 80 | struct xfrm_policy; |
80 | struct xfrm_state; | 81 | struct xfrm_state; |
81 | struct xfrm_user_sec_ctx; | 82 | struct xfrm_user_sec_ctx; |
83 | struct seq_file; | ||
82 | 84 | ||
83 | extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); | 85 | extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); |
84 | extern int cap_netlink_recv(struct sk_buff *skb, int cap); | 86 | extern int cap_netlink_recv(struct sk_buff *skb, int cap); |
@@ -289,10 +291,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
289 | * Update module state after a successful pivot. | 291 | * Update module state after a successful pivot. |
290 | * @old_path contains the path for the old root. | 292 | * @old_path contains the path for the old root. |
291 | * @new_path contains the path for the new root. | 293 | * @new_path contains the path for the new root. |
292 | * @sb_get_mnt_opts: | ||
293 | * Get the security relevant mount options used for a superblock | ||
294 | * @sb the superblock to get security mount options from | ||
295 | * @opts binary data structure containing all lsm mount data | ||
296 | * @sb_set_mnt_opts: | 294 | * @sb_set_mnt_opts: |
297 | * Set the security relevant mount options used for a superblock | 295 | * Set the security relevant mount options used for a superblock |
298 | * @sb the superblock to set security mount options for | 296 | * @sb the superblock to set security mount options for |
@@ -1170,6 +1168,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1170 | * attributes would be changed by the execve. | 1168 | * attributes would be changed by the execve. |
1171 | * @parent contains the task_struct structure for parent process. | 1169 | * @parent contains the task_struct structure for parent process. |
1172 | * @child contains the task_struct structure for child process. | 1170 | * @child contains the task_struct structure for child process. |
1171 | * @mode contains the PTRACE_MODE flags indicating the form of access. | ||
1173 | * Return 0 if permission is granted. | 1172 | * Return 0 if permission is granted. |
1174 | * @capget: | 1173 | * @capget: |
1175 | * Get the @effective, @inheritable, and @permitted capability sets for | 1174 | * Get the @effective, @inheritable, and @permitted capability sets for |
@@ -1240,11 +1239,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1240 | * @pages contains the number of pages. | 1239 | * @pages contains the number of pages. |
1241 | * Return 0 if permission is granted. | 1240 | * Return 0 if permission is granted. |
1242 | * | 1241 | * |
1243 | * @register_security: | ||
1244 | * allow module stacking. | ||
1245 | * @name contains the name of the security module being stacked. | ||
1246 | * @ops contains a pointer to the struct security_operations of the module to stack. | ||
1247 | * | ||
1248 | * @secid_to_secctx: | 1242 | * @secid_to_secctx: |
1249 | * Convert secid to security context. | 1243 | * Convert secid to security context. |
1250 | * @secid contains the security ID. | 1244 | * @secid contains the security ID. |
@@ -1295,7 +1289,8 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1295 | struct security_operations { | 1289 | struct security_operations { |
1296 | char name[SECURITY_NAME_MAX + 1]; | 1290 | char name[SECURITY_NAME_MAX + 1]; |
1297 | 1291 | ||
1298 | int (*ptrace) (struct task_struct *parent, struct task_struct *child); | 1292 | int (*ptrace) (struct task_struct *parent, struct task_struct *child, |
1293 | unsigned int mode); | ||
1299 | int (*capget) (struct task_struct *target, | 1294 | int (*capget) (struct task_struct *target, |
1300 | kernel_cap_t *effective, | 1295 | kernel_cap_t *effective, |
1301 | kernel_cap_t *inheritable, kernel_cap_t *permitted); | 1296 | kernel_cap_t *inheritable, kernel_cap_t *permitted); |
@@ -1328,6 +1323,7 @@ struct security_operations { | |||
1328 | void (*sb_free_security) (struct super_block *sb); | 1323 | void (*sb_free_security) (struct super_block *sb); |
1329 | int (*sb_copy_data) (char *orig, char *copy); | 1324 | int (*sb_copy_data) (char *orig, char *copy); |
1330 | int (*sb_kern_mount) (struct super_block *sb, void *data); | 1325 | int (*sb_kern_mount) (struct super_block *sb, void *data); |
1326 | int (*sb_show_options) (struct seq_file *m, struct super_block *sb); | ||
1331 | int (*sb_statfs) (struct dentry *dentry); | 1327 | int (*sb_statfs) (struct dentry *dentry); |
1332 | int (*sb_mount) (char *dev_name, struct path *path, | 1328 | int (*sb_mount) (char *dev_name, struct path *path, |
1333 | char *type, unsigned long flags, void *data); | 1329 | char *type, unsigned long flags, void *data); |
@@ -1343,8 +1339,6 @@ struct security_operations { | |||
1343 | struct path *new_path); | 1339 | struct path *new_path); |
1344 | void (*sb_post_pivotroot) (struct path *old_path, | 1340 | void (*sb_post_pivotroot) (struct path *old_path, |
1345 | struct path *new_path); | 1341 | struct path *new_path); |
1346 | int (*sb_get_mnt_opts) (const struct super_block *sb, | ||
1347 | struct security_mnt_opts *opts); | ||
1348 | int (*sb_set_mnt_opts) (struct super_block *sb, | 1342 | int (*sb_set_mnt_opts) (struct super_block *sb, |
1349 | struct security_mnt_opts *opts); | 1343 | struct security_mnt_opts *opts); |
1350 | void (*sb_clone_mnt_opts) (const struct super_block *oldsb, | 1344 | void (*sb_clone_mnt_opts) (const struct super_block *oldsb, |
@@ -1472,10 +1466,6 @@ struct security_operations { | |||
1472 | int (*netlink_send) (struct sock *sk, struct sk_buff *skb); | 1466 | int (*netlink_send) (struct sock *sk, struct sk_buff *skb); |
1473 | int (*netlink_recv) (struct sk_buff *skb, int cap); | 1467 | int (*netlink_recv) (struct sk_buff *skb, int cap); |
1474 | 1468 | ||
1475 | /* allow module stacking */ | ||
1476 | int (*register_security) (const char *name, | ||
1477 | struct security_operations *ops); | ||
1478 | |||
1479 | void (*d_instantiate) (struct dentry *dentry, struct inode *inode); | 1469 | void (*d_instantiate) (struct dentry *dentry, struct inode *inode); |
1480 | 1470 | ||
1481 | int (*getprocattr) (struct task_struct *p, char *name, char **value); | 1471 | int (*getprocattr) (struct task_struct *p, char *name, char **value); |
@@ -1565,7 +1555,6 @@ struct security_operations { | |||
1565 | extern int security_init(void); | 1555 | extern int security_init(void); |
1566 | extern int security_module_enable(struct security_operations *ops); | 1556 | extern int security_module_enable(struct security_operations *ops); |
1567 | extern int register_security(struct security_operations *ops); | 1557 | extern int register_security(struct security_operations *ops); |
1568 | extern int mod_reg_security(const char *name, struct security_operations *ops); | ||
1569 | extern struct dentry *securityfs_create_file(const char *name, mode_t mode, | 1558 | extern struct dentry *securityfs_create_file(const char *name, mode_t mode, |
1570 | struct dentry *parent, void *data, | 1559 | struct dentry *parent, void *data, |
1571 | const struct file_operations *fops); | 1560 | const struct file_operations *fops); |
@@ -1573,7 +1562,8 @@ extern struct dentry *securityfs_create_dir(const char *name, struct dentry *par | |||
1573 | extern void securityfs_remove(struct dentry *dentry); | 1562 | extern void securityfs_remove(struct dentry *dentry); |
1574 | 1563 | ||
1575 | /* Security operations */ | 1564 | /* Security operations */ |
1576 | int security_ptrace(struct task_struct *parent, struct task_struct *child); | 1565 | int security_ptrace(struct task_struct *parent, struct task_struct *child, |
1566 | unsigned int mode); | ||
1577 | int security_capget(struct task_struct *target, | 1567 | int security_capget(struct task_struct *target, |
1578 | kernel_cap_t *effective, | 1568 | kernel_cap_t *effective, |
1579 | kernel_cap_t *inheritable, | 1569 | kernel_cap_t *inheritable, |
@@ -1606,6 +1596,7 @@ int security_sb_alloc(struct super_block *sb); | |||
1606 | void security_sb_free(struct super_block *sb); | 1596 | void security_sb_free(struct super_block *sb); |
1607 | int security_sb_copy_data(char *orig, char *copy); | 1597 | int security_sb_copy_data(char *orig, char *copy); |
1608 | int security_sb_kern_mount(struct super_block *sb, void *data); | 1598 | int security_sb_kern_mount(struct super_block *sb, void *data); |
1599 | int security_sb_show_options(struct seq_file *m, struct super_block *sb); | ||
1609 | int security_sb_statfs(struct dentry *dentry); | 1600 | int security_sb_statfs(struct dentry *dentry); |
1610 | int security_sb_mount(char *dev_name, struct path *path, | 1601 | int security_sb_mount(char *dev_name, struct path *path, |
1611 | char *type, unsigned long flags, void *data); | 1602 | char *type, unsigned long flags, void *data); |
@@ -1617,8 +1608,6 @@ void security_sb_post_remount(struct vfsmount *mnt, unsigned long flags, void *d | |||
1617 | void security_sb_post_addmount(struct vfsmount *mnt, struct path *mountpoint); | 1608 | void security_sb_post_addmount(struct vfsmount *mnt, struct path *mountpoint); |
1618 | int security_sb_pivotroot(struct path *old_path, struct path *new_path); | 1609 | int security_sb_pivotroot(struct path *old_path, struct path *new_path); |
1619 | void security_sb_post_pivotroot(struct path *old_path, struct path *new_path); | 1610 | void security_sb_post_pivotroot(struct path *old_path, struct path *new_path); |
1620 | int security_sb_get_mnt_opts(const struct super_block *sb, | ||
1621 | struct security_mnt_opts *opts); | ||
1622 | int security_sb_set_mnt_opts(struct super_block *sb, struct security_mnt_opts *opts); | 1611 | int security_sb_set_mnt_opts(struct super_block *sb, struct security_mnt_opts *opts); |
1623 | void security_sb_clone_mnt_opts(const struct super_block *oldsb, | 1612 | void security_sb_clone_mnt_opts(const struct super_block *oldsb, |
1624 | struct super_block *newsb); | 1613 | struct super_block *newsb); |
@@ -1755,9 +1744,11 @@ static inline int security_init(void) | |||
1755 | return 0; | 1744 | return 0; |
1756 | } | 1745 | } |
1757 | 1746 | ||
1758 | static inline int security_ptrace(struct task_struct *parent, struct task_struct *child) | 1747 | static inline int security_ptrace(struct task_struct *parent, |
1748 | struct task_struct *child, | ||
1749 | unsigned int mode) | ||
1759 | { | 1750 | { |
1760 | return cap_ptrace(parent, child); | 1751 | return cap_ptrace(parent, child, mode); |
1761 | } | 1752 | } |
1762 | 1753 | ||
1763 | static inline int security_capget(struct task_struct *target, | 1754 | static inline int security_capget(struct task_struct *target, |
@@ -1881,6 +1872,12 @@ static inline int security_sb_kern_mount(struct super_block *sb, void *data) | |||
1881 | return 0; | 1872 | return 0; |
1882 | } | 1873 | } |
1883 | 1874 | ||
1875 | static inline int security_sb_show_options(struct seq_file *m, | ||
1876 | struct super_block *sb) | ||
1877 | { | ||
1878 | return 0; | ||
1879 | } | ||
1880 | |||
1884 | static inline int security_sb_statfs(struct dentry *dentry) | 1881 | static inline int security_sb_statfs(struct dentry *dentry) |
1885 | { | 1882 | { |
1886 | return 0; | 1883 | return 0; |
@@ -1927,12 +1924,6 @@ static inline int security_sb_pivotroot(struct path *old_path, | |||
1927 | static inline void security_sb_post_pivotroot(struct path *old_path, | 1924 | static inline void security_sb_post_pivotroot(struct path *old_path, |
1928 | struct path *new_path) | 1925 | struct path *new_path) |
1929 | { } | 1926 | { } |
1930 | static inline int security_sb_get_mnt_opts(const struct super_block *sb, | ||
1931 | struct security_mnt_opts *opts) | ||
1932 | { | ||
1933 | security_init_mnt_opts(opts); | ||
1934 | return 0; | ||
1935 | } | ||
1936 | 1927 | ||
1937 | static inline int security_sb_set_mnt_opts(struct super_block *sb, | 1928 | static inline int security_sb_set_mnt_opts(struct super_block *sb, |
1938 | struct security_mnt_opts *opts) | 1929 | struct security_mnt_opts *opts) |
diff --git a/include/linux/smp.h b/include/linux/smp.h index 55232ccf9cfd..48262f86c969 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h | |||
@@ -7,9 +7,18 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/errno.h> | 9 | #include <linux/errno.h> |
10 | #include <linux/list.h> | ||
11 | #include <linux/cpumask.h> | ||
10 | 12 | ||
11 | extern void cpu_idle(void); | 13 | extern void cpu_idle(void); |
12 | 14 | ||
15 | struct call_single_data { | ||
16 | struct list_head list; | ||
17 | void (*func) (void *info); | ||
18 | void *info; | ||
19 | unsigned int flags; | ||
20 | }; | ||
21 | |||
13 | #ifdef CONFIG_SMP | 22 | #ifdef CONFIG_SMP |
14 | 23 | ||
15 | #include <linux/preempt.h> | 24 | #include <linux/preempt.h> |
@@ -52,15 +61,34 @@ extern void smp_cpus_done(unsigned int max_cpus); | |||
52 | /* | 61 | /* |
53 | * Call a function on all other processors | 62 | * Call a function on all other processors |
54 | */ | 63 | */ |
55 | int smp_call_function(void(*func)(void *info), void *info, int retry, int wait); | 64 | int smp_call_function(void(*func)(void *info), void *info, int wait); |
56 | 65 | int smp_call_function_mask(cpumask_t mask, void(*func)(void *info), void *info, | |
66 | int wait); | ||
57 | int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, | 67 | int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, |
58 | int retry, int wait); | 68 | int wait); |
69 | void __smp_call_function_single(int cpuid, struct call_single_data *data); | ||
70 | |||
71 | /* | ||
72 | * Generic and arch helpers | ||
73 | */ | ||
74 | #ifdef CONFIG_USE_GENERIC_SMP_HELPERS | ||
75 | void generic_smp_call_function_single_interrupt(void); | ||
76 | void generic_smp_call_function_interrupt(void); | ||
77 | void init_call_single_data(void); | ||
78 | void ipi_call_lock(void); | ||
79 | void ipi_call_unlock(void); | ||
80 | void ipi_call_lock_irq(void); | ||
81 | void ipi_call_unlock_irq(void); | ||
82 | #else | ||
83 | static inline void init_call_single_data(void) | ||
84 | { | ||
85 | } | ||
86 | #endif | ||
59 | 87 | ||
60 | /* | 88 | /* |
61 | * Call a function on all processors | 89 | * Call a function on all processors |
62 | */ | 90 | */ |
63 | int on_each_cpu(void (*func) (void *info), void *info, int retry, int wait); | 91 | int on_each_cpu(void (*func) (void *info), void *info, int wait); |
64 | 92 | ||
65 | #define MSG_ALL_BUT_SELF 0x8000 /* Assume <32768 CPU's */ | 93 | #define MSG_ALL_BUT_SELF 0x8000 /* Assume <32768 CPU's */ |
66 | #define MSG_ALL 0x8001 | 94 | #define MSG_ALL 0x8001 |
@@ -90,9 +118,9 @@ static inline int up_smp_call_function(void (*func)(void *), void *info) | |||
90 | { | 118 | { |
91 | return 0; | 119 | return 0; |
92 | } | 120 | } |
93 | #define smp_call_function(func, info, retry, wait) \ | 121 | #define smp_call_function(func, info, wait) \ |
94 | (up_smp_call_function(func, info)) | 122 | (up_smp_call_function(func, info)) |
95 | #define on_each_cpu(func,info,retry,wait) \ | 123 | #define on_each_cpu(func,info,wait) \ |
96 | ({ \ | 124 | ({ \ |
97 | local_irq_disable(); \ | 125 | local_irq_disable(); \ |
98 | func(info); \ | 126 | func(info); \ |
@@ -102,7 +130,7 @@ static inline int up_smp_call_function(void (*func)(void *), void *info) | |||
102 | static inline void smp_send_reschedule(int cpu) { } | 130 | static inline void smp_send_reschedule(int cpu) { } |
103 | #define num_booting_cpus() 1 | 131 | #define num_booting_cpus() 1 |
104 | #define smp_prepare_boot_cpu() do {} while (0) | 132 | #define smp_prepare_boot_cpu() do {} while (0) |
105 | #define smp_call_function_single(cpuid, func, info, retry, wait) \ | 133 | #define smp_call_function_single(cpuid, func, info, wait) \ |
106 | ({ \ | 134 | ({ \ |
107 | WARN_ON(cpuid != 0); \ | 135 | WARN_ON(cpuid != 0); \ |
108 | local_irq_disable(); \ | 136 | local_irq_disable(); \ |
@@ -112,7 +140,9 @@ static inline void smp_send_reschedule(int cpu) { } | |||
112 | }) | 140 | }) |
113 | #define smp_call_function_mask(mask, func, info, wait) \ | 141 | #define smp_call_function_mask(mask, func, info, wait) \ |
114 | (up_smp_call_function(func, info)) | 142 | (up_smp_call_function(func, info)) |
115 | 143 | static inline void init_call_single_data(void) | |
144 | { | ||
145 | } | ||
116 | #endif /* !SMP */ | 146 | #endif /* !SMP */ |
117 | 147 | ||
118 | /* | 148 | /* |
diff --git a/include/linux/smp_lock.h b/include/linux/smp_lock.h index aab3a4cff4e1..813be59bf345 100644 --- a/include/linux/smp_lock.h +++ b/include/linux/smp_lock.h | |||
@@ -27,11 +27,24 @@ static inline int reacquire_kernel_lock(struct task_struct *task) | |||
27 | extern void __lockfunc lock_kernel(void) __acquires(kernel_lock); | 27 | extern void __lockfunc lock_kernel(void) __acquires(kernel_lock); |
28 | extern void __lockfunc unlock_kernel(void) __releases(kernel_lock); | 28 | extern void __lockfunc unlock_kernel(void) __releases(kernel_lock); |
29 | 29 | ||
30 | /* | ||
31 | * Various legacy drivers don't really need the BKL in a specific | ||
32 | * function, but they *do* need to know that the BKL became available. | ||
33 | * This function just avoids wrapping a bunch of lock/unlock pairs | ||
34 | * around code which doesn't really need it. | ||
35 | */ | ||
36 | static inline void cycle_kernel_lock(void) | ||
37 | { | ||
38 | lock_kernel(); | ||
39 | unlock_kernel(); | ||
40 | } | ||
41 | |||
30 | #else | 42 | #else |
31 | 43 | ||
32 | #define lock_kernel() do { } while(0) | 44 | #define lock_kernel() do { } while(0) |
33 | #define unlock_kernel() do { } while(0) | 45 | #define unlock_kernel() do { } while(0) |
34 | #define release_kernel_lock(task) do { } while(0) | 46 | #define release_kernel_lock(task) do { } while(0) |
47 | #define cycle_kernel_lock() do { } while(0) | ||
35 | #define reacquire_kernel_lock(task) 0 | 48 | #define reacquire_kernel_lock(task) 0 |
36 | #define kernel_locked() 1 | 49 | #define kernel_locked() 1 |
37 | 50 | ||
diff --git a/include/linux/spi/mmc_spi.h b/include/linux/spi/mmc_spi.h index d5ca78b93a3b..a3626aedaec9 100644 --- a/include/linux/spi/mmc_spi.h +++ b/include/linux/spi/mmc_spi.h | |||
@@ -23,6 +23,15 @@ struct mmc_spi_platform_data { | |||
23 | /* sense switch on sd cards */ | 23 | /* sense switch on sd cards */ |
24 | int (*get_ro)(struct device *); | 24 | int (*get_ro)(struct device *); |
25 | 25 | ||
26 | /* | ||
27 | * If board does not use CD interrupts, driver can optimize polling | ||
28 | * using this function. | ||
29 | */ | ||
30 | int (*get_cd)(struct device *); | ||
31 | |||
32 | /* Capabilities to pass into mmc core (e.g. MMC_CAP_NEEDS_POLL). */ | ||
33 | unsigned long caps; | ||
34 | |||
26 | /* how long to debounce card detect, in msecs */ | 35 | /* how long to debounce card detect, in msecs */ |
27 | u16 detect_delay; | 36 | u16 detect_delay; |
28 | 37 | ||
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 6fff7f82ef12..e5bfe01ee305 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
@@ -42,7 +42,8 @@ struct rpc_clnt { | |||
42 | 42 | ||
43 | unsigned int cl_softrtry : 1,/* soft timeouts */ | 43 | unsigned int cl_softrtry : 1,/* soft timeouts */ |
44 | cl_discrtry : 1,/* disconnect before retry */ | 44 | cl_discrtry : 1,/* disconnect before retry */ |
45 | cl_autobind : 1;/* use getport() */ | 45 | cl_autobind : 1,/* use getport() */ |
46 | cl_chatty : 1;/* be verbose */ | ||
46 | 47 | ||
47 | struct rpc_rtt * cl_rtt; /* RTO estimator data */ | 48 | struct rpc_rtt * cl_rtt; /* RTO estimator data */ |
48 | const struct rpc_timeout *cl_timeout; /* Timeout strategy */ | 49 | const struct rpc_timeout *cl_timeout; /* Timeout strategy */ |
@@ -114,6 +115,7 @@ struct rpc_create_args { | |||
114 | #define RPC_CLNT_CREATE_NONPRIVPORT (1UL << 3) | 115 | #define RPC_CLNT_CREATE_NONPRIVPORT (1UL << 3) |
115 | #define RPC_CLNT_CREATE_NOPING (1UL << 4) | 116 | #define RPC_CLNT_CREATE_NOPING (1UL << 4) |
116 | #define RPC_CLNT_CREATE_DISCRTRY (1UL << 5) | 117 | #define RPC_CLNT_CREATE_DISCRTRY (1UL << 5) |
118 | #define RPC_CLNT_CREATE_QUIET (1UL << 6) | ||
117 | 119 | ||
118 | struct rpc_clnt *rpc_create(struct rpc_create_args *args); | 120 | struct rpc_clnt *rpc_create(struct rpc_create_args *args); |
119 | struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *, | 121 | struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *, |
@@ -123,6 +125,9 @@ void rpc_shutdown_client(struct rpc_clnt *); | |||
123 | void rpc_release_client(struct rpc_clnt *); | 125 | void rpc_release_client(struct rpc_clnt *); |
124 | 126 | ||
125 | int rpcb_register(u32, u32, int, unsigned short, int *); | 127 | int rpcb_register(u32, u32, int, unsigned short, int *); |
128 | int rpcb_v4_register(const u32 program, const u32 version, | ||
129 | const struct sockaddr *address, | ||
130 | const char *netid, int *result); | ||
126 | int rpcb_getport_sync(struct sockaddr_in *, u32, u32, int); | 131 | int rpcb_getport_sync(struct sockaddr_in *, u32, u32, int); |
127 | void rpcb_getport_async(struct rpc_task *); | 132 | void rpcb_getport_async(struct rpc_task *); |
128 | 133 | ||
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index d1a5c8c1a0f1..64981a2f1cae 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
@@ -135,7 +135,6 @@ struct rpc_task_setup { | |||
135 | #define RPC_IS_SWAPPER(t) ((t)->tk_flags & RPC_TASK_SWAPPER) | 135 | #define RPC_IS_SWAPPER(t) ((t)->tk_flags & RPC_TASK_SWAPPER) |
136 | #define RPC_DO_ROOTOVERRIDE(t) ((t)->tk_flags & RPC_TASK_ROOTCREDS) | 136 | #define RPC_DO_ROOTOVERRIDE(t) ((t)->tk_flags & RPC_TASK_ROOTCREDS) |
137 | #define RPC_ASSASSINATED(t) ((t)->tk_flags & RPC_TASK_KILLED) | 137 | #define RPC_ASSASSINATED(t) ((t)->tk_flags & RPC_TASK_KILLED) |
138 | #define RPC_DO_CALLBACK(t) ((t)->tk_callback != NULL) | ||
139 | #define RPC_IS_SOFT(t) ((t)->tk_flags & RPC_TASK_SOFT) | 138 | #define RPC_IS_SOFT(t) ((t)->tk_flags & RPC_TASK_SOFT) |
140 | 139 | ||
141 | #define RPC_TASK_RUNNING 0 | 140 | #define RPC_TASK_RUNNING 0 |
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index a6977423baf7..e8e69159af71 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
@@ -86,6 +86,11 @@ typedef int __bitwise suspend_state_t; | |||
86 | * that implement @begin(), but platforms implementing @begin() should | 86 | * that implement @begin(), but platforms implementing @begin() should |
87 | * also provide a @end() which cleans up transitions aborted before | 87 | * also provide a @end() which cleans up transitions aborted before |
88 | * @enter(). | 88 | * @enter(). |
89 | * | ||
90 | * @recover: Recover the platform from a suspend failure. | ||
91 | * Called by the PM core if the suspending of devices fails. | ||
92 | * This callback is optional and should only be implemented by platforms | ||
93 | * which require special recovery actions in that situation. | ||
89 | */ | 94 | */ |
90 | struct platform_suspend_ops { | 95 | struct platform_suspend_ops { |
91 | int (*valid)(suspend_state_t state); | 96 | int (*valid)(suspend_state_t state); |
@@ -94,6 +99,7 @@ struct platform_suspend_ops { | |||
94 | int (*enter)(suspend_state_t state); | 99 | int (*enter)(suspend_state_t state); |
95 | void (*finish)(void); | 100 | void (*finish)(void); |
96 | void (*end)(void); | 101 | void (*end)(void); |
102 | void (*recover)(void); | ||
97 | }; | 103 | }; |
98 | 104 | ||
99 | #ifdef CONFIG_SUSPEND | 105 | #ifdef CONFIG_SUSPEND |
@@ -149,7 +155,7 @@ extern void mark_free_pages(struct zone *zone); | |||
149 | * The methods in this structure allow a platform to carry out special | 155 | * The methods in this structure allow a platform to carry out special |
150 | * operations required by it during a hibernation transition. | 156 | * operations required by it during a hibernation transition. |
151 | * | 157 | * |
152 | * All the methods below must be implemented. | 158 | * All the methods below, except for @recover(), must be implemented. |
153 | * | 159 | * |
154 | * @begin: Tell the platform driver that we're starting hibernation. | 160 | * @begin: Tell the platform driver that we're starting hibernation. |
155 | * Called right after shrinking memory and before freezing devices. | 161 | * Called right after shrinking memory and before freezing devices. |
@@ -189,6 +195,11 @@ extern void mark_free_pages(struct zone *zone); | |||
189 | * @restore_cleanup: Clean up after a failing image restoration. | 195 | * @restore_cleanup: Clean up after a failing image restoration. |
190 | * Called right after the nonboot CPUs have been enabled and before | 196 | * Called right after the nonboot CPUs have been enabled and before |
191 | * thawing devices (runs with IRQs on). | 197 | * thawing devices (runs with IRQs on). |
198 | * | ||
199 | * @recover: Recover the platform from a failure to suspend devices. | ||
200 | * Called by the PM core if the suspending of devices during hibernation | ||
201 | * fails. This callback is optional and should only be implemented by | ||
202 | * platforms which require special recovery actions in that situation. | ||
192 | */ | 203 | */ |
193 | struct platform_hibernation_ops { | 204 | struct platform_hibernation_ops { |
194 | int (*begin)(void); | 205 | int (*begin)(void); |
@@ -200,6 +211,7 @@ struct platform_hibernation_ops { | |||
200 | void (*leave)(void); | 211 | void (*leave)(void); |
201 | int (*pre_restore)(void); | 212 | int (*pre_restore)(void); |
202 | void (*restore_cleanup)(void); | 213 | void (*restore_cleanup)(void); |
214 | void (*recover)(void); | ||
203 | }; | 215 | }; |
204 | 216 | ||
205 | #ifdef CONFIG_HIBERNATION | 217 | #ifdef CONFIG_HIBERNATION |
diff --git a/include/linux/topology.h b/include/linux/topology.h index 24f3d2282e11..2158fc0d5a56 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
@@ -179,4 +179,17 @@ void arch_update_cpu_topology(void); | |||
179 | #endif | 179 | #endif |
180 | #endif /* CONFIG_NUMA */ | 180 | #endif /* CONFIG_NUMA */ |
181 | 181 | ||
182 | #ifndef topology_physical_package_id | ||
183 | #define topology_physical_package_id(cpu) ((void)(cpu), -1) | ||
184 | #endif | ||
185 | #ifndef topology_core_id | ||
186 | #define topology_core_id(cpu) ((void)(cpu), 0) | ||
187 | #endif | ||
188 | #ifndef topology_thread_siblings | ||
189 | #define topology_thread_siblings(cpu) cpumask_of_cpu(cpu) | ||
190 | #endif | ||
191 | #ifndef topology_core_siblings | ||
192 | #define topology_core_siblings(cpu) cpumask_of_cpu(cpu) | ||
193 | #endif | ||
194 | |||
182 | #endif /* _LINUX_TOPOLOGY_H */ | 195 | #endif /* _LINUX_TOPOLOGY_H */ |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index f462439cc288..12b15c561a1f 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
@@ -63,6 +63,7 @@ struct writeback_control { | |||
63 | unsigned for_writepages:1; /* This is a writepages() call */ | 63 | unsigned for_writepages:1; /* This is a writepages() call */ |
64 | unsigned range_cyclic:1; /* range_start is cyclic */ | 64 | unsigned range_cyclic:1; /* range_start is cyclic */ |
65 | unsigned more_io:1; /* more io to be dispatched */ | 65 | unsigned more_io:1; /* more io to be dispatched */ |
66 | unsigned range_cont:1; | ||
66 | }; | 67 | }; |
67 | 68 | ||
68 | /* | 69 | /* |
@@ -105,6 +106,8 @@ extern int vm_highmem_is_dirtyable; | |||
105 | extern int block_dump; | 106 | extern int block_dump; |
106 | extern int laptop_mode; | 107 | extern int laptop_mode; |
107 | 108 | ||
109 | extern unsigned long determine_dirtyable_memory(void); | ||
110 | |||
108 | extern int dirty_ratio_handler(struct ctl_table *table, int write, | 111 | extern int dirty_ratio_handler(struct ctl_table *table, int write, |
109 | struct file *filp, void __user *buffer, size_t *lenp, | 112 | struct file *filp, void __user *buffer, size_t *lenp, |
110 | loff_t *ppos); | 113 | loff_t *ppos); |
diff --git a/include/pcmcia/bulkmem.h b/include/pcmcia/bulkmem.h deleted file mode 100644 index 6bc7472293b2..000000000000 --- a/include/pcmcia/bulkmem.h +++ /dev/null | |||
@@ -1,41 +0,0 @@ | |||
1 | /* | ||
2 | * bulkmem.h -- Definitions for bulk memory services | ||
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 version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | * The initial developer of the original code is David A. Hinds | ||
9 | * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds | ||
10 | * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. | ||
11 | * | ||
12 | * (C) 1999 David A. Hinds | ||
13 | */ | ||
14 | |||
15 | #ifndef _LINUX_BULKMEM_H | ||
16 | #define _LINUX_BULKMEM_H | ||
17 | |||
18 | /* For GetFirstRegion and GetNextRegion */ | ||
19 | typedef struct region_info_t { | ||
20 | u_int Attributes; | ||
21 | u_int CardOffset; | ||
22 | u_int RegionSize; | ||
23 | u_int AccessSpeed; | ||
24 | u_int BlockSize; | ||
25 | u_int PartMultiple; | ||
26 | u_char JedecMfr, JedecInfo; | ||
27 | memory_handle_t next; | ||
28 | } region_info_t; | ||
29 | |||
30 | #define REGION_TYPE 0x0001 | ||
31 | #define REGION_TYPE_CM 0x0000 | ||
32 | #define REGION_TYPE_AM 0x0001 | ||
33 | #define REGION_PREFETCH 0x0008 | ||
34 | #define REGION_CACHEABLE 0x0010 | ||
35 | #define REGION_BAR_MASK 0xe000 | ||
36 | #define REGION_BAR_SHIFT 13 | ||
37 | |||
38 | int pcmcia_get_first_region(struct pcmcia_device *handle, region_info_t *rgn); | ||
39 | int pcmcia_get_next_region(struct pcmcia_device *handle, region_info_t *rgn); | ||
40 | |||
41 | #endif /* _LINUX_BULKMEM_H */ | ||
diff --git a/include/pcmcia/cistpl.h b/include/pcmcia/cistpl.h index d3bbb19caf81..e2e10c1e9a06 100644 --- a/include/pcmcia/cistpl.h +++ b/include/pcmcia/cistpl.h | |||
@@ -595,7 +595,7 @@ int pccard_get_first_tuple(struct pcmcia_socket *s, unsigned int function, tuple | |||
595 | int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple); | 595 | int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple); |
596 | int pccard_parse_tuple(tuple_t *tuple, cisparse_t *parse); | 596 | int pccard_parse_tuple(tuple_t *tuple, cisparse_t *parse); |
597 | 597 | ||
598 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, cisinfo_t *info); | 598 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, unsigned int *count); |
599 | 599 | ||
600 | /* ... but use these wrappers instead */ | 600 | /* ... but use these wrappers instead */ |
601 | #define pcmcia_get_first_tuple(p_dev, tuple) \ | 601 | #define pcmcia_get_first_tuple(p_dev, tuple) \ |
diff --git a/include/pcmcia/cs.h b/include/pcmcia/cs.h index 87a260e3699e..45d84b275789 100644 --- a/include/pcmcia/cs.h +++ b/include/pcmcia/cs.h | |||
@@ -373,9 +373,6 @@ struct pcmcia_socket; | |||
373 | 373 | ||
374 | int pcmcia_access_configuration_register(struct pcmcia_device *p_dev, conf_reg_t *reg); | 374 | int pcmcia_access_configuration_register(struct pcmcia_device *p_dev, conf_reg_t *reg); |
375 | int pcmcia_get_configuration_info(struct pcmcia_device *p_dev, config_info_t *config); | 375 | int pcmcia_get_configuration_info(struct pcmcia_device *p_dev, config_info_t *config); |
376 | int pcmcia_get_first_window(window_handle_t *win, win_req_t *req); | ||
377 | int pcmcia_get_next_window(window_handle_t *win, win_req_t *req); | ||
378 | int pcmcia_get_status(struct pcmcia_device *p_dev, cs_status_t *status); | ||
379 | int pcmcia_get_mem_page(window_handle_t win, memreq_t *req); | 376 | int pcmcia_get_mem_page(window_handle_t win, memreq_t *req); |
380 | int pcmcia_map_mem_page(window_handle_t win, memreq_t *req); | 377 | int pcmcia_map_mem_page(window_handle_t win, memreq_t *req); |
381 | int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod); | 378 | int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod); |
diff --git a/include/pcmcia/cs_types.h b/include/pcmcia/cs_types.h index 9a6bcc4952f0..f402a0f435b4 100644 --- a/include/pcmcia/cs_types.h +++ b/include/pcmcia/cs_types.h | |||
@@ -21,7 +21,8 @@ | |||
21 | #include <sys/types.h> | 21 | #include <sys/types.h> |
22 | #endif | 22 | #endif |
23 | 23 | ||
24 | #if defined(__arm__) || defined(__mips__) || defined(__avr32__) | 24 | #if defined(__arm__) || defined(__mips__) || defined(__avr32__) || \ |
25 | defined(__bfin__) | ||
25 | /* This (ioaddr_t) is exposed to userspace & hence cannot be changed. */ | 26 | /* This (ioaddr_t) is exposed to userspace & hence cannot be changed. */ |
26 | typedef u_int ioaddr_t; | 27 | typedef u_int ioaddr_t; |
27 | #else | 28 | #else |
@@ -33,9 +34,6 @@ typedef u_int event_t; | |||
33 | typedef u_char cisdata_t; | 34 | typedef u_char cisdata_t; |
34 | typedef u_short page_t; | 35 | typedef u_short page_t; |
35 | 36 | ||
36 | struct pcmcia_device; | ||
37 | typedef struct pcmcia_device *client_handle_t; | ||
38 | |||
39 | struct window_t; | 37 | struct window_t; |
40 | typedef struct window_t *window_handle_t; | 38 | typedef struct window_t *window_handle_t; |
41 | 39 | ||
diff --git a/include/pcmcia/ds.h b/include/pcmcia/ds.h index f047a1fd64f8..b316027c853d 100644 --- a/include/pcmcia/ds.h +++ b/include/pcmcia/ds.h | |||
@@ -20,7 +20,6 @@ | |||
20 | #include <linux/mod_devicetable.h> | 20 | #include <linux/mod_devicetable.h> |
21 | #endif | 21 | #endif |
22 | 22 | ||
23 | #include <pcmcia/bulkmem.h> | ||
24 | #include <pcmcia/cs_types.h> | 23 | #include <pcmcia/cs_types.h> |
25 | #include <pcmcia/device_id.h> | 24 | #include <pcmcia/device_id.h> |
26 | 25 | ||
@@ -51,6 +50,24 @@ typedef struct mtd_info_t { | |||
51 | u_int CardOffset; | 50 | u_int CardOffset; |
52 | } mtd_info_t; | 51 | } mtd_info_t; |
53 | 52 | ||
53 | typedef struct region_info_t { | ||
54 | u_int Attributes; | ||
55 | u_int CardOffset; | ||
56 | u_int RegionSize; | ||
57 | u_int AccessSpeed; | ||
58 | u_int BlockSize; | ||
59 | u_int PartMultiple; | ||
60 | u_char JedecMfr, JedecInfo; | ||
61 | memory_handle_t next; | ||
62 | } region_info_t; | ||
63 | #define REGION_TYPE 0x0001 | ||
64 | #define REGION_TYPE_CM 0x0000 | ||
65 | #define REGION_TYPE_AM 0x0001 | ||
66 | #define REGION_PREFETCH 0x0008 | ||
67 | #define REGION_CACHEABLE 0x0010 | ||
68 | #define REGION_BAR_MASK 0xe000 | ||
69 | #define REGION_BAR_SHIFT 13 | ||
70 | |||
54 | typedef union ds_ioctl_arg_t { | 71 | typedef union ds_ioctl_arg_t { |
55 | adjust_t adjust; | 72 | adjust_t adjust; |
56 | config_info_t config; | 73 | config_info_t config; |
diff --git a/include/pcmcia/ss.h b/include/pcmcia/ss.h index f95dca077c1c..ed919dd9bb5c 100644 --- a/include/pcmcia/ss.h +++ b/include/pcmcia/ss.h | |||
@@ -21,7 +21,6 @@ | |||
21 | 21 | ||
22 | #include <pcmcia/cs_types.h> | 22 | #include <pcmcia/cs_types.h> |
23 | #include <pcmcia/cs.h> | 23 | #include <pcmcia/cs.h> |
24 | #include <pcmcia/bulkmem.h> | ||
25 | #ifdef CONFIG_CARDBUS | 24 | #ifdef CONFIG_CARDBUS |
26 | #include <linux/pci.h> | 25 | #include <linux/pci.h> |
27 | #endif | 26 | #endif |
@@ -136,8 +135,14 @@ struct pccard_resource_ops { | |||
136 | struct resource* (*find_mem) (unsigned long base, unsigned long num, | 135 | struct resource* (*find_mem) (unsigned long base, unsigned long num, |
137 | unsigned long align, int low, | 136 | unsigned long align, int low, |
138 | struct pcmcia_socket *s); | 137 | struct pcmcia_socket *s); |
139 | int (*adjust_resource) (struct pcmcia_socket *s, | 138 | int (*add_io) (struct pcmcia_socket *s, |
140 | adjust_t *adj); | 139 | unsigned int action, |
140 | unsigned long r_start, | ||
141 | unsigned long r_end); | ||
142 | int (*add_mem) (struct pcmcia_socket *s, | ||
143 | unsigned int action, | ||
144 | unsigned long r_start, | ||
145 | unsigned long r_end); | ||
141 | int (*init) (struct pcmcia_socket *s); | 146 | int (*init) (struct pcmcia_socket *s); |
142 | void (*exit) (struct pcmcia_socket *s); | 147 | void (*exit) (struct pcmcia_socket *s); |
143 | }; | 148 | }; |
@@ -245,7 +250,6 @@ struct pcmcia_socket { | |||
245 | 250 | ||
246 | struct task_struct *thread; | 251 | struct task_struct *thread; |
247 | struct completion thread_done; | 252 | struct completion thread_done; |
248 | wait_queue_head_t thread_wait; | ||
249 | spinlock_t thread_lock; /* protects thread_events */ | 253 | spinlock_t thread_lock; /* protects thread_events */ |
250 | unsigned int thread_events; | 254 | unsigned int thread_events; |
251 | 255 | ||
diff --git a/include/pcmcia/version.h b/include/pcmcia/version.h deleted file mode 100644 index 5ad9c5e198b6..000000000000 --- a/include/pcmcia/version.h +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | /* version.h 1.94 2000/10/03 17:55:48 (David Hinds) */ | ||
2 | |||
3 | /* This file will be removed, please don't include it */ | ||
diff --git a/include/rdma/ib_addr.h b/include/rdma/ib_addr.h index c36750ff6ae8..483057b2f4b4 100644 --- a/include/rdma/ib_addr.h +++ b/include/rdma/ib_addr.h | |||
@@ -2,29 +2,33 @@ | |||
2 | * Copyright (c) 2005 Voltaire Inc. All rights reserved. | 2 | * Copyright (c) 2005 Voltaire Inc. All rights reserved. |
3 | * Copyright (c) 2005 Intel Corporation. All rights reserved. | 3 | * Copyright (c) 2005 Intel Corporation. All rights reserved. |
4 | * | 4 | * |
5 | * This Software is licensed under one of the following licenses: | 5 | * This software is available to you under a choice of one of two |
6 | * licenses. You may choose to be licensed under the terms of the GNU | ||
7 | * General Public License (GPL) Version 2, available from the file | ||
8 | * COPYING in the main directory of this source tree, or the | ||
9 | * OpenIB.org BSD license below: | ||
6 | * | 10 | * |
7 | * 1) under the terms of the "Common Public License 1.0" a copy of which is | 11 | * Redistribution and use in source and binary forms, with or |
8 | * available from the Open Source Initiative, see | 12 | * without modification, are permitted provided that the following |
9 | * http://www.opensource.org/licenses/cpl.php. | 13 | * conditions are met: |
10 | * | 14 | * |
11 | * 2) under the terms of the "The BSD License" a copy of which is | 15 | * - Redistributions of source code must retain the above |
12 | * available from the Open Source Initiative, see | 16 | * copyright notice, this list of conditions and the following |
13 | * http://www.opensource.org/licenses/bsd-license.php. | 17 | * disclaimer. |
14 | * | 18 | * |
15 | * 3) under the terms of the "GNU General Public License (GPL) Version 2" a | 19 | * - Redistributions in binary form must reproduce the above |
16 | * copy of which is available from the Open Source Initiative, see | 20 | * copyright notice, this list of conditions and the following |
17 | * http://www.opensource.org/licenses/gpl-license.php. | 21 | * disclaimer in the documentation and/or other materials |
18 | * | 22 | * provided with the distribution. |
19 | * Licensee has the right to choose one of the above licenses. | ||
20 | * | ||
21 | * Redistributions of source code must retain the above copyright | ||
22 | * notice and one of the license notices. | ||
23 | * | ||
24 | * Redistributions in binary form must reproduce both the above copyright | ||
25 | * notice, one of the license notices in the documentation | ||
26 | * and/or other materials provided with the distribution. | ||
27 | * | 23 | * |
24 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
25 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
26 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
27 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||
28 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
31 | * SOFTWARE. | ||
28 | */ | 32 | */ |
29 | 33 | ||
30 | #if !defined(IB_ADDR_H) | 34 | #if !defined(IB_ADDR_H) |
@@ -57,6 +61,7 @@ struct rdma_dev_addr { | |||
57 | unsigned char dst_dev_addr[MAX_ADDR_LEN]; | 61 | unsigned char dst_dev_addr[MAX_ADDR_LEN]; |
58 | unsigned char broadcast[MAX_ADDR_LEN]; | 62 | unsigned char broadcast[MAX_ADDR_LEN]; |
59 | enum rdma_node_type dev_type; | 63 | enum rdma_node_type dev_type; |
64 | struct net_device *src_dev; | ||
60 | }; | 65 | }; |
61 | 66 | ||
62 | /** | 67 | /** |
diff --git a/include/rdma/ib_cache.h b/include/rdma/ib_cache.h index f179d233ffc3..00a2b8ec327f 100644 --- a/include/rdma/ib_cache.h +++ b/include/rdma/ib_cache.h | |||
@@ -30,8 +30,6 @@ | |||
30 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 30 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
31 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 31 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
32 | * SOFTWARE. | 32 | * SOFTWARE. |
33 | * | ||
34 | * $Id: ib_cache.h 1349 2004-12-16 21:09:43Z roland $ | ||
35 | */ | 33 | */ |
36 | 34 | ||
37 | #ifndef _IB_CACHE_H | 35 | #ifndef _IB_CACHE_H |
diff --git a/include/rdma/ib_cm.h b/include/rdma/ib_cm.h index a627c8682d2f..ec7c6d99ed3f 100644 --- a/include/rdma/ib_cm.h +++ b/include/rdma/ib_cm.h | |||
@@ -31,8 +31,6 @@ | |||
31 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 31 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
32 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 32 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
33 | * SOFTWARE. | 33 | * SOFTWARE. |
34 | * | ||
35 | * $Id: ib_cm.h 4311 2005-12-05 18:42:01Z sean.hefty $ | ||
36 | */ | 34 | */ |
37 | #if !defined(IB_CM_H) | 35 | #if !defined(IB_CM_H) |
38 | #define IB_CM_H | 36 | #define IB_CM_H |
diff --git a/include/rdma/ib_fmr_pool.h b/include/rdma/ib_fmr_pool.h index 00dadbf94e1d..f62b842e6596 100644 --- a/include/rdma/ib_fmr_pool.h +++ b/include/rdma/ib_fmr_pool.h | |||
@@ -29,8 +29,6 @@ | |||
29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
31 | * SOFTWARE. | 31 | * SOFTWARE. |
32 | * | ||
33 | * $Id: ib_fmr_pool.h 2730 2005-06-28 16:43:03Z sean.hefty $ | ||
34 | */ | 32 | */ |
35 | 33 | ||
36 | #if !defined(IB_FMR_POOL_H) | 34 | #if !defined(IB_FMR_POOL_H) |
@@ -61,7 +59,7 @@ struct ib_fmr_pool_param { | |||
61 | int pool_size; | 59 | int pool_size; |
62 | int dirty_watermark; | 60 | int dirty_watermark; |
63 | void (*flush_function)(struct ib_fmr_pool *pool, | 61 | void (*flush_function)(struct ib_fmr_pool *pool, |
64 | void * arg); | 62 | void *arg); |
65 | void *flush_arg; | 63 | void *flush_arg; |
66 | unsigned cache:1; | 64 | unsigned cache:1; |
67 | }; | 65 | }; |
diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h index 7228c056b9e9..5f6c40fffcf4 100644 --- a/include/rdma/ib_mad.h +++ b/include/rdma/ib_mad.h | |||
@@ -32,11 +32,9 @@ | |||
32 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 32 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
33 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 33 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
34 | * SOFTWARE. | 34 | * SOFTWARE. |
35 | * | ||
36 | * $Id: ib_mad.h 5596 2006-03-03 01:00:07Z sean.hefty $ | ||
37 | */ | 35 | */ |
38 | 36 | ||
39 | #if !defined( IB_MAD_H ) | 37 | #if !defined(IB_MAD_H) |
40 | #define IB_MAD_H | 38 | #define IB_MAD_H |
41 | 39 | ||
42 | #include <linux/list.h> | 40 | #include <linux/list.h> |
@@ -194,8 +192,7 @@ struct ib_vendor_mad { | |||
194 | u8 data[IB_MGMT_VENDOR_DATA]; | 192 | u8 data[IB_MGMT_VENDOR_DATA]; |
195 | }; | 193 | }; |
196 | 194 | ||
197 | struct ib_class_port_info | 195 | struct ib_class_port_info { |
198 | { | ||
199 | u8 base_version; | 196 | u8 base_version; |
200 | u8 class_version; | 197 | u8 class_version; |
201 | __be16 capability_mask; | 198 | __be16 capability_mask; |
@@ -614,11 +611,11 @@ int ib_process_mad_wc(struct ib_mad_agent *mad_agent, | |||
614 | * any class specific header, and MAD data area. | 611 | * any class specific header, and MAD data area. |
615 | * If @rmpp_active is set, the RMPP header will be initialized for sending. | 612 | * If @rmpp_active is set, the RMPP header will be initialized for sending. |
616 | */ | 613 | */ |
617 | struct ib_mad_send_buf * ib_create_send_mad(struct ib_mad_agent *mad_agent, | 614 | struct ib_mad_send_buf *ib_create_send_mad(struct ib_mad_agent *mad_agent, |
618 | u32 remote_qpn, u16 pkey_index, | 615 | u32 remote_qpn, u16 pkey_index, |
619 | int rmpp_active, | 616 | int rmpp_active, |
620 | int hdr_len, int data_len, | 617 | int hdr_len, int data_len, |
621 | gfp_t gfp_mask); | 618 | gfp_t gfp_mask); |
622 | 619 | ||
623 | /** | 620 | /** |
624 | * ib_is_mad_class_rmpp - returns whether given management class | 621 | * ib_is_mad_class_rmpp - returns whether given management class |
diff --git a/include/rdma/ib_pack.h b/include/rdma/ib_pack.h index f926020d6331..d7fc45c4eba9 100644 --- a/include/rdma/ib_pack.h +++ b/include/rdma/ib_pack.h | |||
@@ -28,8 +28,6 @@ | |||
28 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 28 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
29 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 29 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
30 | * SOFTWARE. | 30 | * SOFTWARE. |
31 | * | ||
32 | * $Id: ib_pack.h 1349 2004-12-16 21:09:43Z roland $ | ||
33 | */ | 31 | */ |
34 | 32 | ||
35 | #ifndef IB_PACK_H | 33 | #ifndef IB_PACK_H |
diff --git a/include/rdma/ib_sa.h b/include/rdma/ib_sa.h index 942692b0b92e..3841c1aff692 100644 --- a/include/rdma/ib_sa.h +++ b/include/rdma/ib_sa.h | |||
@@ -30,8 +30,6 @@ | |||
30 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 30 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
31 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 31 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
32 | * SOFTWARE. | 32 | * SOFTWARE. |
33 | * | ||
34 | * $Id: ib_sa.h 2811 2005-07-06 18:11:43Z halr $ | ||
35 | */ | 33 | */ |
36 | 34 | ||
37 | #ifndef IB_SA_H | 35 | #ifndef IB_SA_H |
diff --git a/include/rdma/ib_smi.h b/include/rdma/ib_smi.h index f29af135ba83..aaca0878668f 100644 --- a/include/rdma/ib_smi.h +++ b/include/rdma/ib_smi.h | |||
@@ -32,11 +32,9 @@ | |||
32 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 32 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
33 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 33 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
34 | * SOFTWARE. | 34 | * SOFTWARE. |
35 | * | ||
36 | * $Id: ib_smi.h 1389 2004-12-27 22:56:47Z roland $ | ||
37 | */ | 35 | */ |
38 | 36 | ||
39 | #if !defined( IB_SMI_H ) | 37 | #if !defined(IB_SMI_H) |
40 | #define IB_SMI_H | 38 | #define IB_SMI_H |
41 | 39 | ||
42 | #include <rdma/ib_mad.h> | 40 | #include <rdma/ib_mad.h> |
diff --git a/include/rdma/ib_user_cm.h b/include/rdma/ib_user_cm.h index 37650afb982c..bd3d380781e0 100644 --- a/include/rdma/ib_user_cm.h +++ b/include/rdma/ib_user_cm.h | |||
@@ -29,8 +29,6 @@ | |||
29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
31 | * SOFTWARE. | 31 | * SOFTWARE. |
32 | * | ||
33 | * $Id: ib_user_cm.h 4019 2005-11-11 00:33:09Z sean.hefty $ | ||
34 | */ | 32 | */ |
35 | 33 | ||
36 | #ifndef IB_USER_CM_H | 34 | #ifndef IB_USER_CM_H |
diff --git a/include/rdma/ib_user_mad.h b/include/rdma/ib_user_mad.h index 29d2c7205a90..d6fce1cbdb90 100644 --- a/include/rdma/ib_user_mad.h +++ b/include/rdma/ib_user_mad.h | |||
@@ -29,8 +29,6 @@ | |||
29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
31 | * SOFTWARE. | 31 | * SOFTWARE. |
32 | * | ||
33 | * $Id: ib_user_mad.h 2814 2005-07-06 19:14:09Z halr $ | ||
34 | */ | 32 | */ |
35 | 33 | ||
36 | #ifndef IB_USER_MAD_H | 34 | #ifndef IB_USER_MAD_H |
diff --git a/include/rdma/ib_user_verbs.h b/include/rdma/ib_user_verbs.h index 8d65bf0a625b..a17f77106149 100644 --- a/include/rdma/ib_user_verbs.h +++ b/include/rdma/ib_user_verbs.h | |||
@@ -31,8 +31,6 @@ | |||
31 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 31 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
32 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 32 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
33 | * SOFTWARE. | 33 | * SOFTWARE. |
34 | * | ||
35 | * $Id: ib_user_verbs.h 4019 2005-11-11 00:33:09Z sean.hefty $ | ||
36 | */ | 34 | */ |
37 | 35 | ||
38 | #ifndef IB_USER_VERBS_H | 36 | #ifndef IB_USER_VERBS_H |
@@ -291,7 +289,10 @@ struct ib_uverbs_wc { | |||
291 | __u32 opcode; | 289 | __u32 opcode; |
292 | __u32 vendor_err; | 290 | __u32 vendor_err; |
293 | __u32 byte_len; | 291 | __u32 byte_len; |
294 | __u32 imm_data; | 292 | union { |
293 | __u32 imm_data; | ||
294 | __u32 invalidate_rkey; | ||
295 | } ex; | ||
295 | __u32 qp_num; | 296 | __u32 qp_num; |
296 | __u32 src_qp; | 297 | __u32 src_qp; |
297 | __u32 wc_flags; | 298 | __u32 wc_flags; |
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 31d30b1852e8..90b529f7a154 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
@@ -34,8 +34,6 @@ | |||
34 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 34 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
35 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 35 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
36 | * SOFTWARE. | 36 | * SOFTWARE. |
37 | * | ||
38 | * $Id: ib_verbs.h 1349 2004-12-16 21:09:43Z roland $ | ||
39 | */ | 37 | */ |
40 | 38 | ||
41 | #if !defined(IB_VERBS_H) | 39 | #if !defined(IB_VERBS_H) |
@@ -93,7 +91,7 @@ enum ib_device_cap_flags { | |||
93 | IB_DEVICE_RC_RNR_NAK_GEN = (1<<12), | 91 | IB_DEVICE_RC_RNR_NAK_GEN = (1<<12), |
94 | IB_DEVICE_SRQ_RESIZE = (1<<13), | 92 | IB_DEVICE_SRQ_RESIZE = (1<<13), |
95 | IB_DEVICE_N_NOTIFY_CQ = (1<<14), | 93 | IB_DEVICE_N_NOTIFY_CQ = (1<<14), |
96 | IB_DEVICE_ZERO_STAG = (1<<15), | 94 | IB_DEVICE_LOCAL_DMA_LKEY = (1<<15), |
97 | IB_DEVICE_RESERVED = (1<<16), /* old SEND_W_INV */ | 95 | IB_DEVICE_RESERVED = (1<<16), /* old SEND_W_INV */ |
98 | IB_DEVICE_MEM_WINDOW = (1<<17), | 96 | IB_DEVICE_MEM_WINDOW = (1<<17), |
99 | /* | 97 | /* |
@@ -105,6 +103,8 @@ enum ib_device_cap_flags { | |||
105 | */ | 103 | */ |
106 | IB_DEVICE_UD_IP_CSUM = (1<<18), | 104 | IB_DEVICE_UD_IP_CSUM = (1<<18), |
107 | IB_DEVICE_UD_TSO = (1<<19), | 105 | IB_DEVICE_UD_TSO = (1<<19), |
106 | IB_DEVICE_MEM_MGT_EXTENSIONS = (1<<21), | ||
107 | IB_DEVICE_BLOCK_MULTICAST_LOOPBACK = (1<<22), | ||
108 | }; | 108 | }; |
109 | 109 | ||
110 | enum ib_atomic_cap { | 110 | enum ib_atomic_cap { |
@@ -150,6 +150,7 @@ struct ib_device_attr { | |||
150 | int max_srq; | 150 | int max_srq; |
151 | int max_srq_wr; | 151 | int max_srq_wr; |
152 | int max_srq_sge; | 152 | int max_srq_sge; |
153 | unsigned int max_fast_reg_page_list_len; | ||
153 | u16 max_pkeys; | 154 | u16 max_pkeys; |
154 | u8 local_ca_ack_delay; | 155 | u8 local_ca_ack_delay; |
155 | }; | 156 | }; |
@@ -226,6 +227,57 @@ static inline int ib_width_enum_to_int(enum ib_port_width width) | |||
226 | } | 227 | } |
227 | } | 228 | } |
228 | 229 | ||
230 | struct ib_protocol_stats { | ||
231 | /* TBD... */ | ||
232 | }; | ||
233 | |||
234 | struct iw_protocol_stats { | ||
235 | u64 ipInReceives; | ||
236 | u64 ipInHdrErrors; | ||
237 | u64 ipInTooBigErrors; | ||
238 | u64 ipInNoRoutes; | ||
239 | u64 ipInAddrErrors; | ||
240 | u64 ipInUnknownProtos; | ||
241 | u64 ipInTruncatedPkts; | ||
242 | u64 ipInDiscards; | ||
243 | u64 ipInDelivers; | ||
244 | u64 ipOutForwDatagrams; | ||
245 | u64 ipOutRequests; | ||
246 | u64 ipOutDiscards; | ||
247 | u64 ipOutNoRoutes; | ||
248 | u64 ipReasmTimeout; | ||
249 | u64 ipReasmReqds; | ||
250 | u64 ipReasmOKs; | ||
251 | u64 ipReasmFails; | ||
252 | u64 ipFragOKs; | ||
253 | u64 ipFragFails; | ||
254 | u64 ipFragCreates; | ||
255 | u64 ipInMcastPkts; | ||
256 | u64 ipOutMcastPkts; | ||
257 | u64 ipInBcastPkts; | ||
258 | u64 ipOutBcastPkts; | ||
259 | |||
260 | u64 tcpRtoAlgorithm; | ||
261 | u64 tcpRtoMin; | ||
262 | u64 tcpRtoMax; | ||
263 | u64 tcpMaxConn; | ||
264 | u64 tcpActiveOpens; | ||
265 | u64 tcpPassiveOpens; | ||
266 | u64 tcpAttemptFails; | ||
267 | u64 tcpEstabResets; | ||
268 | u64 tcpCurrEstab; | ||
269 | u64 tcpInSegs; | ||
270 | u64 tcpOutSegs; | ||
271 | u64 tcpRetransSegs; | ||
272 | u64 tcpInErrs; | ||
273 | u64 tcpOutRsts; | ||
274 | }; | ||
275 | |||
276 | union rdma_protocol_stats { | ||
277 | struct ib_protocol_stats ib; | ||
278 | struct iw_protocol_stats iw; | ||
279 | }; | ||
280 | |||
229 | struct ib_port_attr { | 281 | struct ib_port_attr { |
230 | enum ib_port_state state; | 282 | enum ib_port_state state; |
231 | enum ib_mtu max_mtu; | 283 | enum ib_mtu max_mtu; |
@@ -413,6 +465,8 @@ enum ib_wc_opcode { | |||
413 | IB_WC_FETCH_ADD, | 465 | IB_WC_FETCH_ADD, |
414 | IB_WC_BIND_MW, | 466 | IB_WC_BIND_MW, |
415 | IB_WC_LSO, | 467 | IB_WC_LSO, |
468 | IB_WC_LOCAL_INV, | ||
469 | IB_WC_FAST_REG_MR, | ||
416 | /* | 470 | /* |
417 | * Set value of IB_WC_RECV so consumers can test if a completion is a | 471 | * Set value of IB_WC_RECV so consumers can test if a completion is a |
418 | * receive by testing (opcode & IB_WC_RECV). | 472 | * receive by testing (opcode & IB_WC_RECV). |
@@ -423,7 +477,8 @@ enum ib_wc_opcode { | |||
423 | 477 | ||
424 | enum ib_wc_flags { | 478 | enum ib_wc_flags { |
425 | IB_WC_GRH = 1, | 479 | IB_WC_GRH = 1, |
426 | IB_WC_WITH_IMM = (1<<1) | 480 | IB_WC_WITH_IMM = (1<<1), |
481 | IB_WC_WITH_INVALIDATE = (1<<2), | ||
427 | }; | 482 | }; |
428 | 483 | ||
429 | struct ib_wc { | 484 | struct ib_wc { |
@@ -433,7 +488,10 @@ struct ib_wc { | |||
433 | u32 vendor_err; | 488 | u32 vendor_err; |
434 | u32 byte_len; | 489 | u32 byte_len; |
435 | struct ib_qp *qp; | 490 | struct ib_qp *qp; |
436 | __be32 imm_data; | 491 | union { |
492 | __be32 imm_data; | ||
493 | u32 invalidate_rkey; | ||
494 | } ex; | ||
437 | u32 src_qp; | 495 | u32 src_qp; |
438 | int wc_flags; | 496 | int wc_flags; |
439 | u16 pkey_index; | 497 | u16 pkey_index; |
@@ -498,7 +556,8 @@ enum ib_qp_type { | |||
498 | }; | 556 | }; |
499 | 557 | ||
500 | enum ib_qp_create_flags { | 558 | enum ib_qp_create_flags { |
501 | IB_QP_CREATE_IPOIB_UD_LSO = 1 << 0, | 559 | IB_QP_CREATE_IPOIB_UD_LSO = 1 << 0, |
560 | IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1, | ||
502 | }; | 561 | }; |
503 | 562 | ||
504 | struct ib_qp_init_attr { | 563 | struct ib_qp_init_attr { |
@@ -627,6 +686,9 @@ enum ib_wr_opcode { | |||
627 | IB_WR_ATOMIC_FETCH_AND_ADD, | 686 | IB_WR_ATOMIC_FETCH_AND_ADD, |
628 | IB_WR_LSO, | 687 | IB_WR_LSO, |
629 | IB_WR_SEND_WITH_INV, | 688 | IB_WR_SEND_WITH_INV, |
689 | IB_WR_RDMA_READ_WITH_INV, | ||
690 | IB_WR_LOCAL_INV, | ||
691 | IB_WR_FAST_REG_MR, | ||
630 | }; | 692 | }; |
631 | 693 | ||
632 | enum ib_send_flags { | 694 | enum ib_send_flags { |
@@ -643,6 +705,12 @@ struct ib_sge { | |||
643 | u32 lkey; | 705 | u32 lkey; |
644 | }; | 706 | }; |
645 | 707 | ||
708 | struct ib_fast_reg_page_list { | ||
709 | struct ib_device *device; | ||
710 | u64 *page_list; | ||
711 | unsigned int max_page_list_len; | ||
712 | }; | ||
713 | |||
646 | struct ib_send_wr { | 714 | struct ib_send_wr { |
647 | struct ib_send_wr *next; | 715 | struct ib_send_wr *next; |
648 | u64 wr_id; | 716 | u64 wr_id; |
@@ -675,6 +743,15 @@ struct ib_send_wr { | |||
675 | u16 pkey_index; /* valid for GSI only */ | 743 | u16 pkey_index; /* valid for GSI only */ |
676 | u8 port_num; /* valid for DR SMPs on switch only */ | 744 | u8 port_num; /* valid for DR SMPs on switch only */ |
677 | } ud; | 745 | } ud; |
746 | struct { | ||
747 | u64 iova_start; | ||
748 | struct ib_fast_reg_page_list *page_list; | ||
749 | unsigned int page_shift; | ||
750 | unsigned int page_list_len; | ||
751 | u32 length; | ||
752 | int access_flags; | ||
753 | u32 rkey; | ||
754 | } fast_reg; | ||
678 | } wr; | 755 | } wr; |
679 | }; | 756 | }; |
680 | 757 | ||
@@ -777,7 +854,7 @@ struct ib_cq { | |||
777 | struct ib_uobject *uobject; | 854 | struct ib_uobject *uobject; |
778 | ib_comp_handler comp_handler; | 855 | ib_comp_handler comp_handler; |
779 | void (*event_handler)(struct ib_event *, void *); | 856 | void (*event_handler)(struct ib_event *, void *); |
780 | void * cq_context; | 857 | void *cq_context; |
781 | int cqe; | 858 | int cqe; |
782 | atomic_t usecnt; /* count number of work queues */ | 859 | atomic_t usecnt; /* count number of work queues */ |
783 | }; | 860 | }; |
@@ -883,7 +960,7 @@ struct ib_dma_mapping_ops { | |||
883 | void (*sync_single_for_cpu)(struct ib_device *dev, | 960 | void (*sync_single_for_cpu)(struct ib_device *dev, |
884 | u64 dma_handle, | 961 | u64 dma_handle, |
885 | size_t size, | 962 | size_t size, |
886 | enum dma_data_direction dir); | 963 | enum dma_data_direction dir); |
887 | void (*sync_single_for_device)(struct ib_device *dev, | 964 | void (*sync_single_for_device)(struct ib_device *dev, |
888 | u64 dma_handle, | 965 | u64 dma_handle, |
889 | size_t size, | 966 | size_t size, |
@@ -919,6 +996,8 @@ struct ib_device { | |||
919 | 996 | ||
920 | struct iw_cm_verbs *iwcm; | 997 | struct iw_cm_verbs *iwcm; |
921 | 998 | ||
999 | int (*get_protocol_stats)(struct ib_device *device, | ||
1000 | union rdma_protocol_stats *stats); | ||
922 | int (*query_device)(struct ib_device *device, | 1001 | int (*query_device)(struct ib_device *device, |
923 | struct ib_device_attr *device_attr); | 1002 | struct ib_device_attr *device_attr); |
924 | int (*query_port)(struct ib_device *device, | 1003 | int (*query_port)(struct ib_device *device, |
@@ -1013,6 +1092,11 @@ struct ib_device { | |||
1013 | int (*query_mr)(struct ib_mr *mr, | 1092 | int (*query_mr)(struct ib_mr *mr, |
1014 | struct ib_mr_attr *mr_attr); | 1093 | struct ib_mr_attr *mr_attr); |
1015 | int (*dereg_mr)(struct ib_mr *mr); | 1094 | int (*dereg_mr)(struct ib_mr *mr); |
1095 | struct ib_mr * (*alloc_fast_reg_mr)(struct ib_pd *pd, | ||
1096 | int max_page_list_len); | ||
1097 | struct ib_fast_reg_page_list * (*alloc_fast_reg_page_list)(struct ib_device *device, | ||
1098 | int page_list_len); | ||
1099 | void (*free_fast_reg_page_list)(struct ib_fast_reg_page_list *page_list); | ||
1016 | int (*rereg_phys_mr)(struct ib_mr *mr, | 1100 | int (*rereg_phys_mr)(struct ib_mr *mr, |
1017 | int mr_rereg_mask, | 1101 | int mr_rereg_mask, |
1018 | struct ib_pd *pd, | 1102 | struct ib_pd *pd, |
@@ -1065,6 +1149,7 @@ struct ib_device { | |||
1065 | 1149 | ||
1066 | char node_desc[64]; | 1150 | char node_desc[64]; |
1067 | __be64 node_guid; | 1151 | __be64 node_guid; |
1152 | u32 local_dma_lkey; | ||
1068 | u8 node_type; | 1153 | u8 node_type; |
1069 | u8 phys_port_cnt; | 1154 | u8 phys_port_cnt; |
1070 | }; | 1155 | }; |
@@ -1807,6 +1892,54 @@ int ib_query_mr(struct ib_mr *mr, struct ib_mr_attr *mr_attr); | |||
1807 | int ib_dereg_mr(struct ib_mr *mr); | 1892 | int ib_dereg_mr(struct ib_mr *mr); |
1808 | 1893 | ||
1809 | /** | 1894 | /** |
1895 | * ib_alloc_fast_reg_mr - Allocates memory region usable with the | ||
1896 | * IB_WR_FAST_REG_MR send work request. | ||
1897 | * @pd: The protection domain associated with the region. | ||
1898 | * @max_page_list_len: requested max physical buffer list length to be | ||
1899 | * used with fast register work requests for this MR. | ||
1900 | */ | ||
1901 | struct ib_mr *ib_alloc_fast_reg_mr(struct ib_pd *pd, int max_page_list_len); | ||
1902 | |||
1903 | /** | ||
1904 | * ib_alloc_fast_reg_page_list - Allocates a page list array | ||
1905 | * @device - ib device pointer. | ||
1906 | * @page_list_len - size of the page list array to be allocated. | ||
1907 | * | ||
1908 | * This allocates and returns a struct ib_fast_reg_page_list * and a | ||
1909 | * page_list array that is at least page_list_len in size. The actual | ||
1910 | * size is returned in max_page_list_len. The caller is responsible | ||
1911 | * for initializing the contents of the page_list array before posting | ||
1912 | * a send work request with the IB_WC_FAST_REG_MR opcode. | ||
1913 | * | ||
1914 | * The page_list array entries must be translated using one of the | ||
1915 | * ib_dma_*() functions just like the addresses passed to | ||
1916 | * ib_map_phys_fmr(). Once the ib_post_send() is issued, the struct | ||
1917 | * ib_fast_reg_page_list must not be modified by the caller until the | ||
1918 | * IB_WC_FAST_REG_MR work request completes. | ||
1919 | */ | ||
1920 | struct ib_fast_reg_page_list *ib_alloc_fast_reg_page_list( | ||
1921 | struct ib_device *device, int page_list_len); | ||
1922 | |||
1923 | /** | ||
1924 | * ib_free_fast_reg_page_list - Deallocates a previously allocated | ||
1925 | * page list array. | ||
1926 | * @page_list - struct ib_fast_reg_page_list pointer to be deallocated. | ||
1927 | */ | ||
1928 | void ib_free_fast_reg_page_list(struct ib_fast_reg_page_list *page_list); | ||
1929 | |||
1930 | /** | ||
1931 | * ib_update_fast_reg_key - updates the key portion of the fast_reg MR | ||
1932 | * R_Key and L_Key. | ||
1933 | * @mr - struct ib_mr pointer to be updated. | ||
1934 | * @newkey - new key to be used. | ||
1935 | */ | ||
1936 | static inline void ib_update_fast_reg_key(struct ib_mr *mr, u8 newkey) | ||
1937 | { | ||
1938 | mr->lkey = (mr->lkey & 0xffffff00) | newkey; | ||
1939 | mr->rkey = (mr->rkey & 0xffffff00) | newkey; | ||
1940 | } | ||
1941 | |||
1942 | /** | ||
1810 | * ib_alloc_mw - Allocates a memory window. | 1943 | * ib_alloc_mw - Allocates a memory window. |
1811 | * @pd: The protection domain associated with the memory window. | 1944 | * @pd: The protection domain associated with the memory window. |
1812 | */ | 1945 | */ |
diff --git a/include/rdma/iw_cm.h b/include/rdma/iw_cm.h index aeefa9b740dc..cbb822e8d791 100644 --- a/include/rdma/iw_cm.h +++ b/include/rdma/iw_cm.h | |||
@@ -62,7 +62,7 @@ struct iw_cm_event { | |||
62 | struct sockaddr_in remote_addr; | 62 | struct sockaddr_in remote_addr; |
63 | void *private_data; | 63 | void *private_data; |
64 | u8 private_data_len; | 64 | u8 private_data_len; |
65 | void* provider_data; | 65 | void *provider_data; |
66 | }; | 66 | }; |
67 | 67 | ||
68 | /** | 68 | /** |
diff --git a/include/rdma/rdma_cm.h b/include/rdma/rdma_cm.h index 010f876f41d8..22bb2e7bab1a 100644 --- a/include/rdma/rdma_cm.h +++ b/include/rdma/rdma_cm.h | |||
@@ -2,29 +2,33 @@ | |||
2 | * Copyright (c) 2005 Voltaire Inc. All rights reserved. | 2 | * Copyright (c) 2005 Voltaire Inc. All rights reserved. |
3 | * Copyright (c) 2005 Intel Corporation. All rights reserved. | 3 | * Copyright (c) 2005 Intel Corporation. All rights reserved. |
4 | * | 4 | * |
5 | * This Software is licensed under one of the following licenses: | 5 | * This software is available to you under a choice of one of two |
6 | * licenses. You may choose to be licensed under the terms of the GNU | ||
7 | * General Public License (GPL) Version 2, available from the file | ||
8 | * COPYING in the main directory of this source tree, or the | ||
9 | * OpenIB.org BSD license below: | ||
6 | * | 10 | * |
7 | * 1) under the terms of the "Common Public License 1.0" a copy of which is | 11 | * Redistribution and use in source and binary forms, with or |
8 | * available from the Open Source Initiative, see | 12 | * without modification, are permitted provided that the following |
9 | * http://www.opensource.org/licenses/cpl.php. | 13 | * conditions are met: |
10 | * | 14 | * |
11 | * 2) under the terms of the "The BSD License" a copy of which is | 15 | * - Redistributions of source code must retain the above |
12 | * available from the Open Source Initiative, see | 16 | * copyright notice, this list of conditions and the following |
13 | * http://www.opensource.org/licenses/bsd-license.php. | 17 | * disclaimer. |
14 | * | 18 | * |
15 | * 3) under the terms of the "GNU General Public License (GPL) Version 2" a | 19 | * - Redistributions in binary form must reproduce the above |
16 | * copy of which is available from the Open Source Initiative, see | 20 | * copyright notice, this list of conditions and the following |
17 | * http://www.opensource.org/licenses/gpl-license.php. | 21 | * disclaimer in the documentation and/or other materials |
18 | * | 22 | * provided with the distribution. |
19 | * Licensee has the right to choose one of the above licenses. | ||
20 | * | ||
21 | * Redistributions of source code must retain the above copyright | ||
22 | * notice and one of the license notices. | ||
23 | * | ||
24 | * Redistributions in binary form must reproduce both the above copyright | ||
25 | * notice, one of the license notices in the documentation | ||
26 | * and/or other materials provided with the distribution. | ||
27 | * | 23 | * |
24 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
25 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
26 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
27 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||
28 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
31 | * SOFTWARE. | ||
28 | */ | 32 | */ |
29 | 33 | ||
30 | #if !defined(RDMA_CM_H) | 34 | #if !defined(RDMA_CM_H) |
@@ -57,11 +61,11 @@ enum rdma_cm_event_type { | |||
57 | }; | 61 | }; |
58 | 62 | ||
59 | enum rdma_port_space { | 63 | enum rdma_port_space { |
60 | RDMA_PS_SDP = 0x0001, | 64 | RDMA_PS_SDP = 0x0001, |
61 | RDMA_PS_IPOIB= 0x0002, | 65 | RDMA_PS_IPOIB = 0x0002, |
62 | RDMA_PS_TCP = 0x0106, | 66 | RDMA_PS_TCP = 0x0106, |
63 | RDMA_PS_UDP = 0x0111, | 67 | RDMA_PS_UDP = 0x0111, |
64 | RDMA_PS_SCTP = 0x0183 | 68 | RDMA_PS_SCTP = 0x0183 |
65 | }; | 69 | }; |
66 | 70 | ||
67 | struct rdma_addr { | 71 | struct rdma_addr { |
diff --git a/include/rdma/rdma_cm_ib.h b/include/rdma/rdma_cm_ib.h index 950424b38f16..2389c3b45404 100644 --- a/include/rdma/rdma_cm_ib.h +++ b/include/rdma/rdma_cm_ib.h | |||
@@ -1,29 +1,33 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2006 Intel Corporation. All rights reserved. | 2 | * Copyright (c) 2006 Intel Corporation. All rights reserved. |
3 | * | 3 | * |
4 | * This Software is licensed under one of the following licenses: | 4 | * This software is available to you under a choice of one of two |
5 | * | 5 | * licenses. You may choose to be licensed under the terms of the GNU |
6 | * 1) under the terms of the "Common Public License 1.0" a copy of which is | 6 | * General Public License (GPL) Version 2, available from the file |
7 | * available from the Open Source Initiative, see | 7 | * COPYING in the main directory of this source tree, or the |
8 | * http://www.opensource.org/licenses/cpl.php. | 8 | * OpenIB.org BSD license below: |
9 | * | 9 | * |
10 | * 2) under the terms of the "The BSD License" a copy of which is | 10 | * Redistribution and use in source and binary forms, with or |
11 | * available from the Open Source Initiative, see | 11 | * without modification, are permitted provided that the following |
12 | * http://www.opensource.org/licenses/bsd-license.php. | 12 | * conditions are met: |
13 | * | 13 | * |
14 | * 3) under the terms of the "GNU General Public License (GPL) Version 2" a | 14 | * - Redistributions of source code must retain the above |
15 | * copy of which is available from the Open Source Initiative, see | 15 | * copyright notice, this list of conditions and the following |
16 | * http://www.opensource.org/licenses/gpl-license.php. | 16 | * disclaimer. |
17 | * | 17 | * |
18 | * Licensee has the right to choose one of the above licenses. | 18 | * - Redistributions in binary form must reproduce the above |
19 | * | 19 | * copyright notice, this list of conditions and the following |
20 | * Redistributions of source code must retain the above copyright | 20 | * disclaimer in the documentation and/or other materials |
21 | * notice and one of the license notices. | 21 | * provided with the distribution. |
22 | * | 22 | * |
23 | * Redistributions in binary form must reproduce both the above copyright | 23 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
24 | * notice, one of the license notices in the documentation | 24 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
25 | * and/or other materials provided with the distribution. | 25 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
26 | * | 26 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
27 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
28 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
29 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
30 | * SOFTWARE. | ||
27 | */ | 31 | */ |
28 | 32 | ||
29 | #if !defined(RDMA_CM_IB_H) | 33 | #if !defined(RDMA_CM_IB_H) |
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h index e19e58423166..16be12f1cbe8 100644 --- a/include/scsi/iscsi_if.h +++ b/include/scsi/iscsi_if.h | |||
@@ -50,6 +50,7 @@ enum iscsi_uevent_e { | |||
50 | ISCSI_UEVENT_TGT_DSCVR = UEVENT_BASE + 15, | 50 | ISCSI_UEVENT_TGT_DSCVR = UEVENT_BASE + 15, |
51 | ISCSI_UEVENT_SET_HOST_PARAM = UEVENT_BASE + 16, | 51 | ISCSI_UEVENT_SET_HOST_PARAM = UEVENT_BASE + 16, |
52 | ISCSI_UEVENT_UNBIND_SESSION = UEVENT_BASE + 17, | 52 | ISCSI_UEVENT_UNBIND_SESSION = UEVENT_BASE + 17, |
53 | ISCSI_UEVENT_CREATE_BOUND_SESSION = UEVENT_BASE + 18, | ||
53 | 54 | ||
54 | /* up events */ | 55 | /* up events */ |
55 | ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1, | 56 | ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1, |
@@ -78,6 +79,12 @@ struct iscsi_uevent { | |||
78 | uint16_t cmds_max; | 79 | uint16_t cmds_max; |
79 | uint16_t queue_depth; | 80 | uint16_t queue_depth; |
80 | } c_session; | 81 | } c_session; |
82 | struct msg_create_bound_session { | ||
83 | uint64_t ep_handle; | ||
84 | uint32_t initial_cmdsn; | ||
85 | uint16_t cmds_max; | ||
86 | uint16_t queue_depth; | ||
87 | } c_bound_session; | ||
81 | struct msg_destroy_session { | 88 | struct msg_destroy_session { |
82 | uint32_t sid; | 89 | uint32_t sid; |
83 | } d_session; | 90 | } d_session; |
@@ -250,42 +257,49 @@ enum iscsi_param { | |||
250 | 257 | ||
251 | ISCSI_PARAM_PING_TMO, | 258 | ISCSI_PARAM_PING_TMO, |
252 | ISCSI_PARAM_RECV_TMO, | 259 | ISCSI_PARAM_RECV_TMO, |
260 | |||
261 | ISCSI_PARAM_IFACE_NAME, | ||
262 | ISCSI_PARAM_ISID, | ||
263 | ISCSI_PARAM_INITIATOR_NAME, | ||
253 | /* must always be last */ | 264 | /* must always be last */ |
254 | ISCSI_PARAM_MAX, | 265 | ISCSI_PARAM_MAX, |
255 | }; | 266 | }; |
256 | 267 | ||
257 | #define ISCSI_MAX_RECV_DLENGTH (1 << ISCSI_PARAM_MAX_RECV_DLENGTH) | 268 | #define ISCSI_MAX_RECV_DLENGTH (1ULL << ISCSI_PARAM_MAX_RECV_DLENGTH) |
258 | #define ISCSI_MAX_XMIT_DLENGTH (1 << ISCSI_PARAM_MAX_XMIT_DLENGTH) | 269 | #define ISCSI_MAX_XMIT_DLENGTH (1ULL << ISCSI_PARAM_MAX_XMIT_DLENGTH) |
259 | #define ISCSI_HDRDGST_EN (1 << ISCSI_PARAM_HDRDGST_EN) | 270 | #define ISCSI_HDRDGST_EN (1ULL << ISCSI_PARAM_HDRDGST_EN) |
260 | #define ISCSI_DATADGST_EN (1 << ISCSI_PARAM_DATADGST_EN) | 271 | #define ISCSI_DATADGST_EN (1ULL << ISCSI_PARAM_DATADGST_EN) |
261 | #define ISCSI_INITIAL_R2T_EN (1 << ISCSI_PARAM_INITIAL_R2T_EN) | 272 | #define ISCSI_INITIAL_R2T_EN (1ULL << ISCSI_PARAM_INITIAL_R2T_EN) |
262 | #define ISCSI_MAX_R2T (1 << ISCSI_PARAM_MAX_R2T) | 273 | #define ISCSI_MAX_R2T (1ULL << ISCSI_PARAM_MAX_R2T) |
263 | #define ISCSI_IMM_DATA_EN (1 << ISCSI_PARAM_IMM_DATA_EN) | 274 | #define ISCSI_IMM_DATA_EN (1ULL << ISCSI_PARAM_IMM_DATA_EN) |
264 | #define ISCSI_FIRST_BURST (1 << ISCSI_PARAM_FIRST_BURST) | 275 | #define ISCSI_FIRST_BURST (1ULL << ISCSI_PARAM_FIRST_BURST) |
265 | #define ISCSI_MAX_BURST (1 << ISCSI_PARAM_MAX_BURST) | 276 | #define ISCSI_MAX_BURST (1ULL << ISCSI_PARAM_MAX_BURST) |
266 | #define ISCSI_PDU_INORDER_EN (1 << ISCSI_PARAM_PDU_INORDER_EN) | 277 | #define ISCSI_PDU_INORDER_EN (1ULL << ISCSI_PARAM_PDU_INORDER_EN) |
267 | #define ISCSI_DATASEQ_INORDER_EN (1 << ISCSI_PARAM_DATASEQ_INORDER_EN) | 278 | #define ISCSI_DATASEQ_INORDER_EN (1ULL << ISCSI_PARAM_DATASEQ_INORDER_EN) |
268 | #define ISCSI_ERL (1 << ISCSI_PARAM_ERL) | 279 | #define ISCSI_ERL (1ULL << ISCSI_PARAM_ERL) |
269 | #define ISCSI_IFMARKER_EN (1 << ISCSI_PARAM_IFMARKER_EN) | 280 | #define ISCSI_IFMARKER_EN (1ULL << ISCSI_PARAM_IFMARKER_EN) |
270 | #define ISCSI_OFMARKER_EN (1 << ISCSI_PARAM_OFMARKER_EN) | 281 | #define ISCSI_OFMARKER_EN (1ULL << ISCSI_PARAM_OFMARKER_EN) |
271 | #define ISCSI_EXP_STATSN (1 << ISCSI_PARAM_EXP_STATSN) | 282 | #define ISCSI_EXP_STATSN (1ULL << ISCSI_PARAM_EXP_STATSN) |
272 | #define ISCSI_TARGET_NAME (1 << ISCSI_PARAM_TARGET_NAME) | 283 | #define ISCSI_TARGET_NAME (1ULL << ISCSI_PARAM_TARGET_NAME) |
273 | #define ISCSI_TPGT (1 << ISCSI_PARAM_TPGT) | 284 | #define ISCSI_TPGT (1ULL << ISCSI_PARAM_TPGT) |
274 | #define ISCSI_PERSISTENT_ADDRESS (1 << ISCSI_PARAM_PERSISTENT_ADDRESS) | 285 | #define ISCSI_PERSISTENT_ADDRESS (1ULL << ISCSI_PARAM_PERSISTENT_ADDRESS) |
275 | #define ISCSI_PERSISTENT_PORT (1 << ISCSI_PARAM_PERSISTENT_PORT) | 286 | #define ISCSI_PERSISTENT_PORT (1ULL << ISCSI_PARAM_PERSISTENT_PORT) |
276 | #define ISCSI_SESS_RECOVERY_TMO (1 << ISCSI_PARAM_SESS_RECOVERY_TMO) | 287 | #define ISCSI_SESS_RECOVERY_TMO (1ULL << ISCSI_PARAM_SESS_RECOVERY_TMO) |
277 | #define ISCSI_CONN_PORT (1 << ISCSI_PARAM_CONN_PORT) | 288 | #define ISCSI_CONN_PORT (1ULL << ISCSI_PARAM_CONN_PORT) |
278 | #define ISCSI_CONN_ADDRESS (1 << ISCSI_PARAM_CONN_ADDRESS) | 289 | #define ISCSI_CONN_ADDRESS (1ULL << ISCSI_PARAM_CONN_ADDRESS) |
279 | #define ISCSI_USERNAME (1 << ISCSI_PARAM_USERNAME) | 290 | #define ISCSI_USERNAME (1ULL << ISCSI_PARAM_USERNAME) |
280 | #define ISCSI_USERNAME_IN (1 << ISCSI_PARAM_USERNAME_IN) | 291 | #define ISCSI_USERNAME_IN (1ULL << ISCSI_PARAM_USERNAME_IN) |
281 | #define ISCSI_PASSWORD (1 << ISCSI_PARAM_PASSWORD) | 292 | #define ISCSI_PASSWORD (1ULL << ISCSI_PARAM_PASSWORD) |
282 | #define ISCSI_PASSWORD_IN (1 << ISCSI_PARAM_PASSWORD_IN) | 293 | #define ISCSI_PASSWORD_IN (1ULL << ISCSI_PARAM_PASSWORD_IN) |
283 | #define ISCSI_FAST_ABORT (1 << ISCSI_PARAM_FAST_ABORT) | 294 | #define ISCSI_FAST_ABORT (1ULL << ISCSI_PARAM_FAST_ABORT) |
284 | #define ISCSI_ABORT_TMO (1 << ISCSI_PARAM_ABORT_TMO) | 295 | #define ISCSI_ABORT_TMO (1ULL << ISCSI_PARAM_ABORT_TMO) |
285 | #define ISCSI_LU_RESET_TMO (1 << ISCSI_PARAM_LU_RESET_TMO) | 296 | #define ISCSI_LU_RESET_TMO (1ULL << ISCSI_PARAM_LU_RESET_TMO) |
286 | #define ISCSI_HOST_RESET_TMO (1 << ISCSI_PARAM_HOST_RESET_TMO) | 297 | #define ISCSI_HOST_RESET_TMO (1ULL << ISCSI_PARAM_HOST_RESET_TMO) |
287 | #define ISCSI_PING_TMO (1 << ISCSI_PARAM_PING_TMO) | 298 | #define ISCSI_PING_TMO (1ULL << ISCSI_PARAM_PING_TMO) |
288 | #define ISCSI_RECV_TMO (1 << ISCSI_PARAM_RECV_TMO) | 299 | #define ISCSI_RECV_TMO (1ULL << ISCSI_PARAM_RECV_TMO) |
300 | #define ISCSI_IFACE_NAME (1ULL << ISCSI_PARAM_IFACE_NAME) | ||
301 | #define ISCSI_ISID (1ULL << ISCSI_PARAM_ISID) | ||
302 | #define ISCSI_INITIATOR_NAME (1ULL << ISCSI_PARAM_INITIATOR_NAME) | ||
289 | 303 | ||
290 | /* iSCSI HBA params */ | 304 | /* iSCSI HBA params */ |
291 | enum iscsi_host_param { | 305 | enum iscsi_host_param { |
@@ -296,20 +310,13 @@ enum iscsi_host_param { | |||
296 | ISCSI_HOST_PARAM_MAX, | 310 | ISCSI_HOST_PARAM_MAX, |
297 | }; | 311 | }; |
298 | 312 | ||
299 | #define ISCSI_HOST_HWADDRESS (1 << ISCSI_HOST_PARAM_HWADDRESS) | 313 | #define ISCSI_HOST_HWADDRESS (1ULL << ISCSI_HOST_PARAM_HWADDRESS) |
300 | #define ISCSI_HOST_INITIATOR_NAME (1 << ISCSI_HOST_PARAM_INITIATOR_NAME) | 314 | #define ISCSI_HOST_INITIATOR_NAME (1ULL << ISCSI_HOST_PARAM_INITIATOR_NAME) |
301 | #define ISCSI_HOST_NETDEV_NAME (1 << ISCSI_HOST_PARAM_NETDEV_NAME) | 315 | #define ISCSI_HOST_NETDEV_NAME (1ULL << ISCSI_HOST_PARAM_NETDEV_NAME) |
302 | #define ISCSI_HOST_IPADDRESS (1 << ISCSI_HOST_PARAM_IPADDRESS) | 316 | #define ISCSI_HOST_IPADDRESS (1ULL << ISCSI_HOST_PARAM_IPADDRESS) |
303 | 317 | ||
304 | #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle) | 318 | #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle) |
305 | #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr) | 319 | #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr) |
306 | #define hostdata_session(_hostdata) (iscsi_ptr(*(unsigned long *)_hostdata)) | ||
307 | |||
308 | /** | ||
309 | * iscsi_hostdata - get LLD hostdata from scsi_host | ||
310 | * @_hostdata: pointer to scsi host's hostdata | ||
311 | **/ | ||
312 | #define iscsi_hostdata(_hostdata) ((void*)_hostdata + sizeof(unsigned long)) | ||
313 | 320 | ||
314 | /* | 321 | /* |
315 | * These flags presents iSCSI Data-Path capabilities. | 322 | * These flags presents iSCSI Data-Path capabilities. |
diff --git a/include/scsi/iscsi_proto.h b/include/scsi/iscsi_proto.h index e0593bfae622..f2a2c1169486 100644 --- a/include/scsi/iscsi_proto.h +++ b/include/scsi/iscsi_proto.h | |||
@@ -22,6 +22,7 @@ | |||
22 | #define ISCSI_PROTO_H | 22 | #define ISCSI_PROTO_H |
23 | 23 | ||
24 | #include <linux/types.h> | 24 | #include <linux/types.h> |
25 | #include <scsi/scsi.h> | ||
25 | 26 | ||
26 | #define ISCSI_DRAFT20_VERSION 0x00 | 27 | #define ISCSI_DRAFT20_VERSION 0x00 |
27 | 28 | ||
@@ -156,7 +157,7 @@ struct iscsi_ecdb_ahdr { | |||
156 | uint8_t ahstype; | 157 | uint8_t ahstype; |
157 | uint8_t reserved; | 158 | uint8_t reserved; |
158 | /* 4-byte aligned extended CDB spillover */ | 159 | /* 4-byte aligned extended CDB spillover */ |
159 | uint8_t ecdb[260 - ISCSI_CDB_SIZE]; | 160 | uint8_t ecdb[SCSI_MAX_VARLEN_CDB_SIZE - ISCSI_CDB_SIZE]; |
160 | }; | 161 | }; |
161 | 162 | ||
162 | /* SCSI Response Header */ | 163 | /* SCSI Response Header */ |
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h index cd3ca63d4fb1..5e75bb7f311c 100644 --- a/include/scsi/libiscsi.h +++ b/include/scsi/libiscsi.h | |||
@@ -24,6 +24,7 @@ | |||
24 | #define LIBISCSI_H | 24 | #define LIBISCSI_H |
25 | 25 | ||
26 | #include <linux/types.h> | 26 | #include <linux/types.h> |
27 | #include <linux/wait.h> | ||
27 | #include <linux/mutex.h> | 28 | #include <linux/mutex.h> |
28 | #include <linux/timer.h> | 29 | #include <linux/timer.h> |
29 | #include <linux/workqueue.h> | 30 | #include <linux/workqueue.h> |
@@ -31,6 +32,7 @@ | |||
31 | #include <scsi/iscsi_if.h> | 32 | #include <scsi/iscsi_if.h> |
32 | 33 | ||
33 | struct scsi_transport_template; | 34 | struct scsi_transport_template; |
35 | struct scsi_host_template; | ||
34 | struct scsi_device; | 36 | struct scsi_device; |
35 | struct Scsi_Host; | 37 | struct Scsi_Host; |
36 | struct scsi_cmnd; | 38 | struct scsi_cmnd; |
@@ -40,6 +42,7 @@ struct iscsi_cls_session; | |||
40 | struct iscsi_cls_conn; | 42 | struct iscsi_cls_conn; |
41 | struct iscsi_session; | 43 | struct iscsi_session; |
42 | struct iscsi_nopin; | 44 | struct iscsi_nopin; |
45 | struct device; | ||
43 | 46 | ||
44 | /* #define DEBUG_SCSI */ | 47 | /* #define DEBUG_SCSI */ |
45 | #ifdef DEBUG_SCSI | 48 | #ifdef DEBUG_SCSI |
@@ -49,9 +52,7 @@ struct iscsi_nopin; | |||
49 | #endif | 52 | #endif |
50 | 53 | ||
51 | #define ISCSI_DEF_XMIT_CMDS_MAX 128 /* must be power of 2 */ | 54 | #define ISCSI_DEF_XMIT_CMDS_MAX 128 /* must be power of 2 */ |
52 | #define ISCSI_MGMT_CMDS_MAX 16 /* must be power of 2 */ | 55 | #define ISCSI_MGMT_CMDS_MAX 15 |
53 | |||
54 | #define ISCSI_MGMT_ITT_OFFSET 0xa00 | ||
55 | 56 | ||
56 | #define ISCSI_DEF_CMD_PER_LUN 32 | 57 | #define ISCSI_DEF_CMD_PER_LUN 32 |
57 | #define ISCSI_MAX_CMD_PER_LUN 128 | 58 | #define ISCSI_MAX_CMD_PER_LUN 128 |
@@ -69,7 +70,10 @@ enum { | |||
69 | /* Connection suspend "bit" */ | 70 | /* Connection suspend "bit" */ |
70 | #define ISCSI_SUSPEND_BIT 1 | 71 | #define ISCSI_SUSPEND_BIT 1 |
71 | 72 | ||
72 | #define ISCSI_ITT_MASK (0xfff) | 73 | #define ISCSI_ITT_MASK (0x1fff) |
74 | #define ISCSI_TOTAL_CMDS_MAX 4096 | ||
75 | /* this must be a power of two greater than ISCSI_MGMT_CMDS_MAX */ | ||
76 | #define ISCSI_TOTAL_CMDS_MIN 16 | ||
73 | #define ISCSI_AGE_SHIFT 28 | 77 | #define ISCSI_AGE_SHIFT 28 |
74 | #define ISCSI_AGE_MASK (0xf << ISCSI_AGE_SHIFT) | 78 | #define ISCSI_AGE_MASK (0xf << ISCSI_AGE_SHIFT) |
75 | 79 | ||
@@ -82,18 +86,6 @@ enum { | |||
82 | ISCSI_DIGEST_SIZE = sizeof(__u32), | 86 | ISCSI_DIGEST_SIZE = sizeof(__u32), |
83 | }; | 87 | }; |
84 | 88 | ||
85 | struct iscsi_mgmt_task { | ||
86 | /* | ||
87 | * Becuae LLDs allocate their hdr differently, this is a pointer to | ||
88 | * that storage. It must be setup at session creation time. | ||
89 | */ | ||
90 | struct iscsi_hdr *hdr; | ||
91 | char *data; /* mgmt payload */ | ||
92 | unsigned data_count; /* counts data to be sent */ | ||
93 | uint32_t itt; /* this ITT */ | ||
94 | void *dd_data; /* driver/transport data */ | ||
95 | struct list_head running; | ||
96 | }; | ||
97 | 89 | ||
98 | enum { | 90 | enum { |
99 | ISCSI_TASK_COMPLETED, | 91 | ISCSI_TASK_COMPLETED, |
@@ -101,7 +93,7 @@ enum { | |||
101 | ISCSI_TASK_RUNNING, | 93 | ISCSI_TASK_RUNNING, |
102 | }; | 94 | }; |
103 | 95 | ||
104 | struct iscsi_cmd_task { | 96 | struct iscsi_task { |
105 | /* | 97 | /* |
106 | * Because LLDs allocate their hdr differently, this is a pointer | 98 | * Because LLDs allocate their hdr differently, this is a pointer |
107 | * and length to that storage. It must be setup at session | 99 | * and length to that storage. It must be setup at session |
@@ -118,6 +110,7 @@ struct iscsi_cmd_task { | |||
118 | /* offset in unsolicited stream (bytes); */ | 110 | /* offset in unsolicited stream (bytes); */ |
119 | unsigned unsol_offset; | 111 | unsigned unsol_offset; |
120 | unsigned data_count; /* remaining Data-Out */ | 112 | unsigned data_count; /* remaining Data-Out */ |
113 | char *data; /* mgmt payload */ | ||
121 | struct scsi_cmnd *sc; /* associated SCSI cmd*/ | 114 | struct scsi_cmnd *sc; /* associated SCSI cmd*/ |
122 | struct iscsi_conn *conn; /* used connection */ | 115 | struct iscsi_conn *conn; /* used connection */ |
123 | 116 | ||
@@ -128,9 +121,9 @@ struct iscsi_cmd_task { | |||
128 | void *dd_data; /* driver/transport data */ | 121 | void *dd_data; /* driver/transport data */ |
129 | }; | 122 | }; |
130 | 123 | ||
131 | static inline void* iscsi_next_hdr(struct iscsi_cmd_task *ctask) | 124 | static inline void* iscsi_next_hdr(struct iscsi_task *task) |
132 | { | 125 | { |
133 | return (void*)ctask->hdr + ctask->hdr_len; | 126 | return (void*)task->hdr + task->hdr_len; |
134 | } | 127 | } |
135 | 128 | ||
136 | /* Connection's states */ | 129 | /* Connection's states */ |
@@ -146,11 +139,6 @@ struct iscsi_conn { | |||
146 | void *dd_data; /* iscsi_transport data */ | 139 | void *dd_data; /* iscsi_transport data */ |
147 | struct iscsi_session *session; /* parent session */ | 140 | struct iscsi_session *session; /* parent session */ |
148 | /* | 141 | /* |
149 | * LLDs should set this lock. It protects the transport recv | ||
150 | * code | ||
151 | */ | ||
152 | rwlock_t *recv_lock; | ||
153 | /* | ||
154 | * conn_stop() flag: stop to recover, stop to terminate | 142 | * conn_stop() flag: stop to recover, stop to terminate |
155 | */ | 143 | */ |
156 | int stop_stage; | 144 | int stop_stage; |
@@ -159,7 +147,7 @@ struct iscsi_conn { | |||
159 | unsigned long last_ping; | 147 | unsigned long last_ping; |
160 | int ping_timeout; | 148 | int ping_timeout; |
161 | int recv_timeout; | 149 | int recv_timeout; |
162 | struct iscsi_mgmt_task *ping_mtask; | 150 | struct iscsi_task *ping_task; |
163 | 151 | ||
164 | /* iSCSI connection-wide sequencing */ | 152 | /* iSCSI connection-wide sequencing */ |
165 | uint32_t exp_statsn; | 153 | uint32_t exp_statsn; |
@@ -175,9 +163,8 @@ struct iscsi_conn { | |||
175 | * should always fit in this buffer | 163 | * should always fit in this buffer |
176 | */ | 164 | */ |
177 | char *data; | 165 | char *data; |
178 | struct iscsi_mgmt_task *login_mtask; /* mtask used for login/text */ | 166 | struct iscsi_task *login_task; /* mtask used for login/text */ |
179 | struct iscsi_mgmt_task *mtask; /* xmit mtask in progress */ | 167 | struct iscsi_task *task; /* xmit task in progress */ |
180 | struct iscsi_cmd_task *ctask; /* xmit ctask in progress */ | ||
181 | 168 | ||
182 | /* xmit */ | 169 | /* xmit */ |
183 | struct list_head mgmtqueue; /* mgmt (control) xmit queue */ | 170 | struct list_head mgmtqueue; /* mgmt (control) xmit queue */ |
@@ -208,9 +195,6 @@ struct iscsi_conn { | |||
208 | /* remote portal currently connected to */ | 195 | /* remote portal currently connected to */ |
209 | int portal_port; | 196 | int portal_port; |
210 | char portal_address[ISCSI_ADDRESS_BUF_LEN]; | 197 | char portal_address[ISCSI_ADDRESS_BUF_LEN]; |
211 | /* local address */ | ||
212 | int local_port; | ||
213 | char local_address[ISCSI_ADDRESS_BUF_LEN]; | ||
214 | 198 | ||
215 | /* MIB-statistics */ | 199 | /* MIB-statistics */ |
216 | uint64_t txdata_octets; | 200 | uint64_t txdata_octets; |
@@ -246,6 +230,7 @@ enum { | |||
246 | }; | 230 | }; |
247 | 231 | ||
248 | struct iscsi_session { | 232 | struct iscsi_session { |
233 | struct iscsi_cls_session *cls_session; | ||
249 | /* | 234 | /* |
250 | * Syncs up the scsi eh thread with the iscsi eh thread when sending | 235 | * Syncs up the scsi eh thread with the iscsi eh thread when sending |
251 | * task management functions. This must be taken before the session | 236 | * task management functions. This must be taken before the session |
@@ -281,10 +266,8 @@ struct iscsi_session { | |||
281 | char *password; | 266 | char *password; |
282 | char *password_in; | 267 | char *password_in; |
283 | char *targetname; | 268 | char *targetname; |
269 | char *ifacename; | ||
284 | char *initiatorname; | 270 | char *initiatorname; |
285 | /* hw address or netdev iscsi connection is bound to */ | ||
286 | char *hwaddress; | ||
287 | char *netdev; | ||
288 | /* control data */ | 271 | /* control data */ |
289 | struct iscsi_transport *tt; | 272 | struct iscsi_transport *tt; |
290 | struct Scsi_Host *host; | 273 | struct Scsi_Host *host; |
@@ -298,12 +281,20 @@ struct iscsi_session { | |||
298 | int state; /* session state */ | 281 | int state; /* session state */ |
299 | int age; /* counts session re-opens */ | 282 | int age; /* counts session re-opens */ |
300 | 283 | ||
284 | int scsi_cmds_max; /* max scsi commands */ | ||
301 | int cmds_max; /* size of cmds array */ | 285 | int cmds_max; /* size of cmds array */ |
302 | struct iscsi_cmd_task **cmds; /* Original Cmds arr */ | 286 | struct iscsi_task **cmds; /* Original Cmds arr */ |
303 | struct iscsi_pool cmdpool; /* PDU's pool */ | 287 | struct iscsi_pool cmdpool; /* PDU's pool */ |
304 | int mgmtpool_max; /* size of mgmt array */ | 288 | }; |
305 | struct iscsi_mgmt_task **mgmt_cmds; /* Original mgmt arr */ | 289 | |
306 | struct iscsi_pool mgmtpool; /* Mgmt PDU's pool */ | 290 | struct iscsi_host { |
291 | char *initiatorname; | ||
292 | /* hw address or netdev iscsi connection is bound to */ | ||
293 | char *hwaddress; | ||
294 | char *netdev; | ||
295 | /* local address */ | ||
296 | int local_port; | ||
297 | char local_address[ISCSI_ADDRESS_BUF_LEN]; | ||
307 | }; | 298 | }; |
308 | 299 | ||
309 | /* | 300 | /* |
@@ -316,42 +307,44 @@ extern int iscsi_eh_device_reset(struct scsi_cmnd *sc); | |||
316 | extern int iscsi_queuecommand(struct scsi_cmnd *sc, | 307 | extern int iscsi_queuecommand(struct scsi_cmnd *sc, |
317 | void (*done)(struct scsi_cmnd *)); | 308 | void (*done)(struct scsi_cmnd *)); |
318 | 309 | ||
319 | |||
320 | /* | 310 | /* |
321 | * iSCSI host helpers. | 311 | * iSCSI host helpers. |
322 | */ | 312 | */ |
313 | #define iscsi_host_priv(_shost) \ | ||
314 | (shost_priv(_shost) + sizeof(struct iscsi_host)) | ||
315 | |||
323 | extern int iscsi_host_set_param(struct Scsi_Host *shost, | 316 | extern int iscsi_host_set_param(struct Scsi_Host *shost, |
324 | enum iscsi_host_param param, char *buf, | 317 | enum iscsi_host_param param, char *buf, |
325 | int buflen); | 318 | int buflen); |
326 | extern int iscsi_host_get_param(struct Scsi_Host *shost, | 319 | extern int iscsi_host_get_param(struct Scsi_Host *shost, |
327 | enum iscsi_host_param param, char *buf); | 320 | enum iscsi_host_param param, char *buf); |
321 | extern int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev); | ||
322 | extern struct Scsi_Host *iscsi_host_alloc(struct scsi_host_template *sht, | ||
323 | int dd_data_size, uint16_t qdepth); | ||
324 | extern void iscsi_host_remove(struct Scsi_Host *shost); | ||
325 | extern void iscsi_host_free(struct Scsi_Host *shost); | ||
328 | 326 | ||
329 | /* | 327 | /* |
330 | * session management | 328 | * session management |
331 | */ | 329 | */ |
332 | extern struct iscsi_cls_session * | 330 | extern struct iscsi_cls_session * |
333 | iscsi_session_setup(struct iscsi_transport *, struct scsi_transport_template *, | 331 | iscsi_session_setup(struct iscsi_transport *, struct Scsi_Host *shost, |
334 | uint16_t, uint16_t, int, int, uint32_t, uint32_t *); | 332 | uint16_t, int, uint32_t, unsigned int); |
335 | extern void iscsi_session_teardown(struct iscsi_cls_session *); | 333 | extern void iscsi_session_teardown(struct iscsi_cls_session *); |
336 | extern struct iscsi_session *class_to_transport_session(struct iscsi_cls_session *); | ||
337 | extern void iscsi_session_recovery_timedout(struct iscsi_cls_session *); | 334 | extern void iscsi_session_recovery_timedout(struct iscsi_cls_session *); |
338 | extern int iscsi_set_param(struct iscsi_cls_conn *cls_conn, | 335 | extern int iscsi_set_param(struct iscsi_cls_conn *cls_conn, |
339 | enum iscsi_param param, char *buf, int buflen); | 336 | enum iscsi_param param, char *buf, int buflen); |
340 | extern int iscsi_session_get_param(struct iscsi_cls_session *cls_session, | 337 | extern int iscsi_session_get_param(struct iscsi_cls_session *cls_session, |
341 | enum iscsi_param param, char *buf); | 338 | enum iscsi_param param, char *buf); |
342 | 339 | ||
343 | #define session_to_cls(_sess) \ | ||
344 | hostdata_session(_sess->host->hostdata) | ||
345 | |||
346 | #define iscsi_session_printk(prefix, _sess, fmt, a...) \ | 340 | #define iscsi_session_printk(prefix, _sess, fmt, a...) \ |
347 | iscsi_cls_session_printk(prefix, \ | 341 | iscsi_cls_session_printk(prefix, _sess->cls_session, fmt, ##a) |
348 | (struct iscsi_cls_session *)session_to_cls(_sess), fmt, ##a) | ||
349 | 342 | ||
350 | /* | 343 | /* |
351 | * connection management | 344 | * connection management |
352 | */ | 345 | */ |
353 | extern struct iscsi_cls_conn *iscsi_conn_setup(struct iscsi_cls_session *, | 346 | extern struct iscsi_cls_conn *iscsi_conn_setup(struct iscsi_cls_session *, |
354 | uint32_t); | 347 | int, uint32_t); |
355 | extern void iscsi_conn_teardown(struct iscsi_cls_conn *); | 348 | extern void iscsi_conn_teardown(struct iscsi_cls_conn *); |
356 | extern int iscsi_conn_start(struct iscsi_cls_conn *); | 349 | extern int iscsi_conn_start(struct iscsi_cls_conn *); |
357 | extern void iscsi_conn_stop(struct iscsi_cls_conn *, int); | 350 | extern void iscsi_conn_stop(struct iscsi_cls_conn *, int); |
@@ -360,25 +353,29 @@ extern int iscsi_conn_bind(struct iscsi_cls_session *, struct iscsi_cls_conn *, | |||
360 | extern void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err); | 353 | extern void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err); |
361 | extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, | 354 | extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, |
362 | enum iscsi_param param, char *buf); | 355 | enum iscsi_param param, char *buf); |
356 | extern void iscsi_suspend_tx(struct iscsi_conn *conn); | ||
363 | 357 | ||
364 | #define iscsi_conn_printk(prefix, _c, fmt, a...) \ | 358 | #define iscsi_conn_printk(prefix, _c, fmt, a...) \ |
365 | iscsi_cls_conn_printk(prefix, _c->cls_conn, fmt, ##a) | 359 | iscsi_cls_conn_printk(prefix, ((struct iscsi_conn *)_c)->cls_conn, \ |
360 | fmt, ##a) | ||
366 | 361 | ||
367 | /* | 362 | /* |
368 | * pdu and task processing | 363 | * pdu and task processing |
369 | */ | 364 | */ |
370 | extern void iscsi_update_cmdsn(struct iscsi_session *, struct iscsi_nopin *); | 365 | extern void iscsi_update_cmdsn(struct iscsi_session *, struct iscsi_nopin *); |
371 | extern void iscsi_prep_unsolicit_data_pdu(struct iscsi_cmd_task *, | 366 | extern void iscsi_prep_unsolicit_data_pdu(struct iscsi_task *, |
372 | struct iscsi_data *hdr); | 367 | struct iscsi_data *hdr); |
373 | extern int iscsi_conn_send_pdu(struct iscsi_cls_conn *, struct iscsi_hdr *, | 368 | extern int iscsi_conn_send_pdu(struct iscsi_cls_conn *, struct iscsi_hdr *, |
374 | char *, uint32_t); | 369 | char *, uint32_t); |
375 | extern int iscsi_complete_pdu(struct iscsi_conn *, struct iscsi_hdr *, | 370 | extern int iscsi_complete_pdu(struct iscsi_conn *, struct iscsi_hdr *, |
376 | char *, int); | 371 | char *, int); |
377 | extern int iscsi_verify_itt(struct iscsi_conn *, struct iscsi_hdr *, | 372 | extern int __iscsi_complete_pdu(struct iscsi_conn *, struct iscsi_hdr *, |
378 | uint32_t *); | 373 | char *, int); |
379 | extern void iscsi_requeue_ctask(struct iscsi_cmd_task *ctask); | 374 | extern int iscsi_verify_itt(struct iscsi_conn *, itt_t); |
380 | extern void iscsi_free_mgmt_task(struct iscsi_conn *conn, | 375 | extern struct iscsi_task *iscsi_itt_to_ctask(struct iscsi_conn *, itt_t); |
381 | struct iscsi_mgmt_task *mtask); | 376 | extern void iscsi_requeue_task(struct iscsi_task *task); |
377 | extern void iscsi_put_task(struct iscsi_task *task); | ||
378 | extern void __iscsi_get_task(struct iscsi_task *task); | ||
382 | 379 | ||
383 | /* | 380 | /* |
384 | * generic helpers | 381 | * generic helpers |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 32742c4563de..00137a7769ee 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
@@ -9,6 +9,7 @@ | |||
9 | #define _SCSI_SCSI_H | 9 | #define _SCSI_SCSI_H |
10 | 10 | ||
11 | #include <linux/types.h> | 11 | #include <linux/types.h> |
12 | #include <scsi/scsi_cmnd.h> | ||
12 | 13 | ||
13 | /* | 14 | /* |
14 | * The maximum number of SG segments that we will put inside a | 15 | * The maximum number of SG segments that we will put inside a |
@@ -400,6 +401,7 @@ struct scsi_lun { | |||
400 | #define SOFT_ERROR 0x2005 | 401 | #define SOFT_ERROR 0x2005 |
401 | #define ADD_TO_MLQUEUE 0x2006 | 402 | #define ADD_TO_MLQUEUE 0x2006 |
402 | #define TIMEOUT_ERROR 0x2007 | 403 | #define TIMEOUT_ERROR 0x2007 |
404 | #define SCSI_RETURN_NOT_HANDLED 0x2008 | ||
403 | 405 | ||
404 | /* | 406 | /* |
405 | * Midlevel queue return values. | 407 | * Midlevel queue return values. |
@@ -424,6 +426,22 @@ struct scsi_lun { | |||
424 | #define driver_byte(result) (((result) >> 24) & 0xff) | 426 | #define driver_byte(result) (((result) >> 24) & 0xff) |
425 | #define suggestion(result) (driver_byte(result) & SUGGEST_MASK) | 427 | #define suggestion(result) (driver_byte(result) & SUGGEST_MASK) |
426 | 428 | ||
429 | static inline void set_msg_byte(struct scsi_cmnd *cmd, char status) | ||
430 | { | ||
431 | cmd->result |= status << 8; | ||
432 | } | ||
433 | |||
434 | static inline void set_host_byte(struct scsi_cmnd *cmd, char status) | ||
435 | { | ||
436 | cmd->result |= status << 16; | ||
437 | } | ||
438 | |||
439 | static inline void set_driver_byte(struct scsi_cmnd *cmd, char status) | ||
440 | { | ||
441 | cmd->result |= status << 24; | ||
442 | } | ||
443 | |||
444 | |||
427 | #define sense_class(sense) (((sense) >> 4) & 0x7) | 445 | #define sense_class(sense) (((sense) >> 4) & 0x7) |
428 | #define sense_error(sense) ((sense) & 0xf) | 446 | #define sense_error(sense) ((sense) & 0xf) |
429 | #define sense_valid(sense) ((sense) & 0x80); | 447 | #define sense_valid(sense) ((sense) & 0x80); |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 3e46dfae8194..66c944849d6b 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
@@ -7,7 +7,6 @@ | |||
7 | #include <linux/types.h> | 7 | #include <linux/types.h> |
8 | #include <linux/timer.h> | 8 | #include <linux/timer.h> |
9 | #include <linux/scatterlist.h> | 9 | #include <linux/scatterlist.h> |
10 | #include <linux/blkdev.h> | ||
11 | 10 | ||
12 | struct Scsi_Host; | 11 | struct Scsi_Host; |
13 | struct scsi_device; | 12 | struct scsi_device; |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index f6a9fe0ef09c..6467f78b191f 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
@@ -134,6 +134,7 @@ struct scsi_device { | |||
134 | unsigned no_start_on_add:1; /* do not issue start on add */ | 134 | unsigned no_start_on_add:1; /* do not issue start on add */ |
135 | unsigned allow_restart:1; /* issue START_UNIT in error handler */ | 135 | unsigned allow_restart:1; /* issue START_UNIT in error handler */ |
136 | unsigned manage_start_stop:1; /* Let HLD (sd) manage start/stop */ | 136 | unsigned manage_start_stop:1; /* Let HLD (sd) manage start/stop */ |
137 | unsigned start_stop_pwr_cond:1; /* Set power cond. in START_STOP_UNIT */ | ||
137 | unsigned no_uld_attach:1; /* disable connecting to upper level drivers */ | 138 | unsigned no_uld_attach:1; /* disable connecting to upper level drivers */ |
138 | unsigned select_no_atn:1; | 139 | unsigned select_no_atn:1; |
139 | unsigned fix_capacity:1; /* READ_CAPACITY is too high by 1 */ | 140 | unsigned fix_capacity:1; /* READ_CAPACITY is too high by 1 */ |
@@ -161,9 +162,29 @@ struct scsi_device { | |||
161 | 162 | ||
162 | struct execute_work ew; /* used to get process context on put */ | 163 | struct execute_work ew; /* used to get process context on put */ |
163 | 164 | ||
165 | struct scsi_dh_data *scsi_dh_data; | ||
164 | enum scsi_device_state sdev_state; | 166 | enum scsi_device_state sdev_state; |
165 | unsigned long sdev_data[0]; | 167 | unsigned long sdev_data[0]; |
166 | } __attribute__((aligned(sizeof(unsigned long)))); | 168 | } __attribute__((aligned(sizeof(unsigned long)))); |
169 | |||
170 | struct scsi_device_handler { | ||
171 | /* Used by the infrastructure */ | ||
172 | struct list_head list; /* list of scsi_device_handlers */ | ||
173 | struct notifier_block nb; | ||
174 | |||
175 | /* Filled by the hardware handler */ | ||
176 | struct module *module; | ||
177 | const char *name; | ||
178 | int (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *); | ||
179 | int (*activate)(struct scsi_device *); | ||
180 | int (*prep_fn)(struct scsi_device *, struct request *); | ||
181 | }; | ||
182 | |||
183 | struct scsi_dh_data { | ||
184 | struct scsi_device_handler *scsi_dh; | ||
185 | char buf[0]; | ||
186 | }; | ||
187 | |||
167 | #define to_scsi_device(d) \ | 188 | #define to_scsi_device(d) \ |
168 | container_of(d, struct scsi_device, sdev_gendev) | 189 | container_of(d, struct scsi_device, sdev_gendev) |
169 | #define class_to_sdev(d) \ | 190 | #define class_to_sdev(d) \ |
@@ -230,7 +251,9 @@ extern struct scsi_device *__scsi_add_device(struct Scsi_Host *, | |||
230 | uint, uint, uint, void *hostdata); | 251 | uint, uint, uint, void *hostdata); |
231 | extern int scsi_add_device(struct Scsi_Host *host, uint channel, | 252 | extern int scsi_add_device(struct Scsi_Host *host, uint channel, |
232 | uint target, uint lun); | 253 | uint target, uint lun); |
254 | extern int scsi_register_device_handler(struct scsi_device_handler *scsi_dh); | ||
233 | extern void scsi_remove_device(struct scsi_device *); | 255 | extern void scsi_remove_device(struct scsi_device *); |
256 | extern int scsi_unregister_device_handler(struct scsi_device_handler *scsi_dh); | ||
234 | 257 | ||
235 | extern int scsi_device_get(struct scsi_device *); | 258 | extern int scsi_device_get(struct scsi_device *); |
236 | extern void scsi_device_put(struct scsi_device *); | 259 | extern void scsi_device_put(struct scsi_device *); |
diff --git a/include/scsi/scsi_dh.h b/include/scsi/scsi_dh.h new file mode 100644 index 000000000000..3ad2303d1a16 --- /dev/null +++ b/include/scsi/scsi_dh.h | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * Header file for SCSI device handler infrastruture. | ||
3 | * | ||
4 | * Modified version of patches posted by Mike Christie <michaelc@cs.wisc.edu> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, but | ||
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | * General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
19 | * | ||
20 | * Copyright IBM Corporation, 2007 | ||
21 | * Authors: | ||
22 | * Chandra Seetharaman <sekharan@us.ibm.com> | ||
23 | * Mike Anderson <andmike@linux.vnet.ibm.com> | ||
24 | */ | ||
25 | |||
26 | #include <scsi/scsi_device.h> | ||
27 | |||
28 | enum { | ||
29 | SCSI_DH_OK = 0, | ||
30 | /* | ||
31 | * device errors | ||
32 | */ | ||
33 | SCSI_DH_DEV_FAILED, /* generic device error */ | ||
34 | SCSI_DH_DEV_TEMP_BUSY, | ||
35 | SCSI_DH_DEVICE_MAX, /* max device blkerr definition */ | ||
36 | |||
37 | /* | ||
38 | * transport errors | ||
39 | */ | ||
40 | SCSI_DH_NOTCONN = SCSI_DH_DEVICE_MAX + 1, | ||
41 | SCSI_DH_CONN_FAILURE, | ||
42 | SCSI_DH_TRANSPORT_MAX, /* max transport blkerr definition */ | ||
43 | |||
44 | /* | ||
45 | * driver and generic errors | ||
46 | */ | ||
47 | SCSI_DH_IO = SCSI_DH_TRANSPORT_MAX + 1, /* generic error */ | ||
48 | SCSI_DH_INVALID_IO, | ||
49 | SCSI_DH_RETRY, /* retry the req, but not immediately */ | ||
50 | SCSI_DH_IMM_RETRY, /* immediately retry the req */ | ||
51 | SCSI_DH_TIMED_OUT, | ||
52 | SCSI_DH_RES_TEMP_UNAVAIL, | ||
53 | SCSI_DH_DEV_OFFLINED, | ||
54 | SCSI_DH_NOSYS, | ||
55 | SCSI_DH_DRIVER_MAX, | ||
56 | }; | ||
57 | #if defined(CONFIG_SCSI_DH) || defined(CONFIG_SCSI_DH_MODULE) | ||
58 | extern int scsi_dh_activate(struct request_queue *); | ||
59 | extern int scsi_dh_handler_exist(const char *); | ||
60 | #else | ||
61 | static inline int scsi_dh_activate(struct request_queue *req) | ||
62 | { | ||
63 | return 0; | ||
64 | } | ||
65 | static inline int scsi_dh_handler_exist(const char *name) | ||
66 | { | ||
67 | return 0; | ||
68 | } | ||
69 | #endif | ||
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index aab1eae2ec4c..f5444e033cc9 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h | |||
@@ -30,11 +30,11 @@ | |||
30 | 30 | ||
31 | struct scsi_transport_template; | 31 | struct scsi_transport_template; |
32 | struct iscsi_transport; | 32 | struct iscsi_transport; |
33 | struct iscsi_endpoint; | ||
33 | struct Scsi_Host; | 34 | struct Scsi_Host; |
34 | struct iscsi_cls_conn; | 35 | struct iscsi_cls_conn; |
35 | struct iscsi_conn; | 36 | struct iscsi_conn; |
36 | struct iscsi_cmd_task; | 37 | struct iscsi_task; |
37 | struct iscsi_mgmt_task; | ||
38 | struct sockaddr; | 38 | struct sockaddr; |
39 | 39 | ||
40 | /** | 40 | /** |
@@ -58,19 +58,22 @@ struct sockaddr; | |||
58 | * @stop_conn: suspend/recover/terminate connection | 58 | * @stop_conn: suspend/recover/terminate connection |
59 | * @send_pdu: send iSCSI PDU, Login, Logout, NOP-Out, Reject, Text. | 59 | * @send_pdu: send iSCSI PDU, Login, Logout, NOP-Out, Reject, Text. |
60 | * @session_recovery_timedout: notify LLD a block during recovery timed out | 60 | * @session_recovery_timedout: notify LLD a block during recovery timed out |
61 | * @init_cmd_task: Initialize a iscsi_cmd_task and any internal structs. | 61 | * @init_task: Initialize a iscsi_task and any internal structs. |
62 | * Called from queuecommand with session lock held. | 62 | * When offloading the data path, this is called from |
63 | * @init_mgmt_task: Initialize a iscsi_mgmt_task and any internal structs. | 63 | * queuecommand with the session lock, or from the |
64 | * Called from iscsi_conn_send_generic with xmitmutex. | 64 | * iscsi_conn_send_pdu context with the session lock. |
65 | * @xmit_cmd_task: Requests LLD to transfer cmd task. Returns 0 or the | 65 | * When not offloading the data path, this is called |
66 | * from the scsi work queue without the session lock. | ||
67 | * @xmit_task Requests LLD to transfer cmd task. Returns 0 or the | ||
66 | * the number of bytes transferred on success, and -Exyz | 68 | * the number of bytes transferred on success, and -Exyz |
67 | * value on error. | 69 | * value on error. When offloading the data path, this |
68 | * @xmit_mgmt_task: Requests LLD to transfer mgmt task. Returns 0 or the | 70 | * is called from queuecommand with the session lock, or |
69 | * the number of bytes transferred on success, and -Exyz | 71 | * from the iscsi_conn_send_pdu context with the session |
70 | * value on error. | 72 | * lock. When not offloading the data path, this is called |
71 | * @cleanup_cmd_task: requests LLD to fail cmd task. Called with xmitmutex | 73 | * from the scsi work queue without the session lock. |
72 | * and session->lock after the connection has been | 74 | * @cleanup_task: requests LLD to fail task. Called with session lock |
73 | * suspended and terminated during recovery. If called | 75 | * and after the connection has been suspended and |
76 | * terminated during recovery. If called | ||
74 | * from abort task then connection is not suspended | 77 | * from abort task then connection is not suspended |
75 | * or terminated but sk_callback_lock is held | 78 | * or terminated but sk_callback_lock is held |
76 | * | 79 | * |
@@ -83,17 +86,9 @@ struct iscsi_transport { | |||
83 | /* LLD sets this to indicate what values it can export to sysfs */ | 86 | /* LLD sets this to indicate what values it can export to sysfs */ |
84 | uint64_t param_mask; | 87 | uint64_t param_mask; |
85 | uint64_t host_param_mask; | 88 | uint64_t host_param_mask; |
86 | struct scsi_host_template *host_template; | 89 | struct iscsi_cls_session *(*create_session) (struct iscsi_endpoint *ep, |
87 | /* LLD connection data size */ | 90 | uint16_t cmds_max, uint16_t qdepth, |
88 | int conndata_size; | 91 | uint32_t sn, uint32_t *hn); |
89 | /* LLD session data size */ | ||
90 | int sessiondata_size; | ||
91 | int max_lun; | ||
92 | unsigned int max_conn; | ||
93 | unsigned int max_cmd_len; | ||
94 | struct iscsi_cls_session *(*create_session) (struct iscsi_transport *it, | ||
95 | struct scsi_transport_template *t, uint16_t, uint16_t, | ||
96 | uint32_t sn, uint32_t *hn); | ||
97 | void (*destroy_session) (struct iscsi_cls_session *session); | 92 | void (*destroy_session) (struct iscsi_cls_session *session); |
98 | struct iscsi_cls_conn *(*create_conn) (struct iscsi_cls_session *sess, | 93 | struct iscsi_cls_conn *(*create_conn) (struct iscsi_cls_session *sess, |
99 | uint32_t cid); | 94 | uint32_t cid); |
@@ -118,20 +113,15 @@ struct iscsi_transport { | |||
118 | char *data, uint32_t data_size); | 113 | char *data, uint32_t data_size); |
119 | void (*get_stats) (struct iscsi_cls_conn *conn, | 114 | void (*get_stats) (struct iscsi_cls_conn *conn, |
120 | struct iscsi_stats *stats); | 115 | struct iscsi_stats *stats); |
121 | int (*init_cmd_task) (struct iscsi_cmd_task *ctask); | 116 | int (*init_task) (struct iscsi_task *task); |
122 | void (*init_mgmt_task) (struct iscsi_conn *conn, | 117 | int (*xmit_task) (struct iscsi_task *task); |
123 | struct iscsi_mgmt_task *mtask); | 118 | void (*cleanup_task) (struct iscsi_conn *conn, |
124 | int (*xmit_cmd_task) (struct iscsi_conn *conn, | 119 | struct iscsi_task *task); |
125 | struct iscsi_cmd_task *ctask); | ||
126 | void (*cleanup_cmd_task) (struct iscsi_conn *conn, | ||
127 | struct iscsi_cmd_task *ctask); | ||
128 | int (*xmit_mgmt_task) (struct iscsi_conn *conn, | ||
129 | struct iscsi_mgmt_task *mtask); | ||
130 | void (*session_recovery_timedout) (struct iscsi_cls_session *session); | 120 | void (*session_recovery_timedout) (struct iscsi_cls_session *session); |
131 | int (*ep_connect) (struct sockaddr *dst_addr, int non_blocking, | 121 | struct iscsi_endpoint *(*ep_connect) (struct sockaddr *dst_addr, |
132 | uint64_t *ep_handle); | 122 | int non_blocking); |
133 | int (*ep_poll) (uint64_t ep_handle, int timeout_ms); | 123 | int (*ep_poll) (struct iscsi_endpoint *ep, int timeout_ms); |
134 | void (*ep_disconnect) (uint64_t ep_handle); | 124 | void (*ep_disconnect) (struct iscsi_endpoint *ep); |
135 | int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type, | 125 | int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type, |
136 | uint32_t enable, struct sockaddr *dst_addr); | 126 | uint32_t enable, struct sockaddr *dst_addr); |
137 | }; | 127 | }; |
@@ -172,9 +162,10 @@ enum { | |||
172 | ISCSI_SESSION_FREE, | 162 | ISCSI_SESSION_FREE, |
173 | }; | 163 | }; |
174 | 164 | ||
165 | #define ISCSI_MAX_TARGET -1 | ||
166 | |||
175 | struct iscsi_cls_session { | 167 | struct iscsi_cls_session { |
176 | struct list_head sess_list; /* item in session_list */ | 168 | struct list_head sess_list; /* item in session_list */ |
177 | struct list_head host_list; | ||
178 | struct iscsi_transport *transport; | 169 | struct iscsi_transport *transport; |
179 | spinlock_t lock; | 170 | spinlock_t lock; |
180 | struct work_struct block_work; | 171 | struct work_struct block_work; |
@@ -186,7 +177,7 @@ struct iscsi_cls_session { | |||
186 | int recovery_tmo; | 177 | int recovery_tmo; |
187 | struct delayed_work recovery_work; | 178 | struct delayed_work recovery_work; |
188 | 179 | ||
189 | int target_id; | 180 | unsigned int target_id; |
190 | 181 | ||
191 | int state; | 182 | int state; |
192 | int sid; /* session id */ | 183 | int sid; /* session id */ |
@@ -203,14 +194,22 @@ struct iscsi_cls_session { | |||
203 | #define starget_to_session(_stgt) \ | 194 | #define starget_to_session(_stgt) \ |
204 | iscsi_dev_to_session(_stgt->dev.parent) | 195 | iscsi_dev_to_session(_stgt->dev.parent) |
205 | 196 | ||
206 | struct iscsi_host { | 197 | struct iscsi_cls_host { |
207 | struct list_head sessions; | ||
208 | atomic_t nr_scans; | 198 | atomic_t nr_scans; |
209 | struct mutex mutex; | 199 | struct mutex mutex; |
210 | struct workqueue_struct *scan_workq; | 200 | struct workqueue_struct *scan_workq; |
211 | char scan_workq_name[KOBJ_NAME_LEN]; | 201 | char scan_workq_name[KOBJ_NAME_LEN]; |
212 | }; | 202 | }; |
213 | 203 | ||
204 | extern void iscsi_host_for_each_session(struct Scsi_Host *shost, | ||
205 | void (*fn)(struct iscsi_cls_session *)); | ||
206 | |||
207 | struct iscsi_endpoint { | ||
208 | void *dd_data; /* LLD private data */ | ||
209 | struct device dev; | ||
210 | unsigned int id; | ||
211 | }; | ||
212 | |||
214 | /* | 213 | /* |
215 | * session and connection functions that can be used by HW iSCSI LLDs | 214 | * session and connection functions that can be used by HW iSCSI LLDs |
216 | */ | 215 | */ |
@@ -222,22 +221,26 @@ struct iscsi_host { | |||
222 | 221 | ||
223 | extern int iscsi_session_chkready(struct iscsi_cls_session *session); | 222 | extern int iscsi_session_chkready(struct iscsi_cls_session *session); |
224 | extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost, | 223 | extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost, |
225 | struct iscsi_transport *transport); | 224 | struct iscsi_transport *transport, int dd_size); |
226 | extern int iscsi_add_session(struct iscsi_cls_session *session, | 225 | extern int iscsi_add_session(struct iscsi_cls_session *session, |
227 | unsigned int target_id); | 226 | unsigned int target_id); |
228 | extern int iscsi_session_event(struct iscsi_cls_session *session, | 227 | extern int iscsi_session_event(struct iscsi_cls_session *session, |
229 | enum iscsi_uevent_e event); | 228 | enum iscsi_uevent_e event); |
230 | extern struct iscsi_cls_session *iscsi_create_session(struct Scsi_Host *shost, | 229 | extern struct iscsi_cls_session *iscsi_create_session(struct Scsi_Host *shost, |
231 | struct iscsi_transport *t, | 230 | struct iscsi_transport *t, |
231 | int dd_size, | ||
232 | unsigned int target_id); | 232 | unsigned int target_id); |
233 | extern void iscsi_remove_session(struct iscsi_cls_session *session); | 233 | extern void iscsi_remove_session(struct iscsi_cls_session *session); |
234 | extern void iscsi_free_session(struct iscsi_cls_session *session); | 234 | extern void iscsi_free_session(struct iscsi_cls_session *session); |
235 | extern int iscsi_destroy_session(struct iscsi_cls_session *session); | 235 | extern int iscsi_destroy_session(struct iscsi_cls_session *session); |
236 | extern struct iscsi_cls_conn *iscsi_create_conn(struct iscsi_cls_session *sess, | 236 | extern struct iscsi_cls_conn *iscsi_create_conn(struct iscsi_cls_session *sess, |
237 | uint32_t cid); | 237 | int dd_size, uint32_t cid); |
238 | extern int iscsi_destroy_conn(struct iscsi_cls_conn *conn); | 238 | extern int iscsi_destroy_conn(struct iscsi_cls_conn *conn); |
239 | extern void iscsi_unblock_session(struct iscsi_cls_session *session); | 239 | extern void iscsi_unblock_session(struct iscsi_cls_session *session); |
240 | extern void iscsi_block_session(struct iscsi_cls_session *session); | 240 | extern void iscsi_block_session(struct iscsi_cls_session *session); |
241 | extern int iscsi_scan_finished(struct Scsi_Host *shost, unsigned long time); | 241 | extern int iscsi_scan_finished(struct Scsi_Host *shost, unsigned long time); |
242 | extern struct iscsi_endpoint *iscsi_create_endpoint(int dd_size); | ||
243 | extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep); | ||
244 | extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle); | ||
242 | 245 | ||
243 | #endif | 246 | #endif |
diff --git a/include/scsi/sd.h b/include/scsi/sd.h deleted file mode 100644 index 4f032d48cb6e..000000000000 --- a/include/scsi/sd.h +++ /dev/null | |||
@@ -1,57 +0,0 @@ | |||
1 | #ifndef _SCSI_DISK_H | ||
2 | #define _SCSI_DISK_H | ||
3 | |||
4 | /* | ||
5 | * More than enough for everybody ;) The huge number of majors | ||
6 | * is a leftover from 16bit dev_t days, we don't really need that | ||
7 | * much numberspace. | ||
8 | */ | ||
9 | #define SD_MAJORS 16 | ||
10 | |||
11 | /* | ||
12 | * This is limited by the naming scheme enforced in sd_probe, | ||
13 | * add another character to it if you really need more disks. | ||
14 | */ | ||
15 | #define SD_MAX_DISKS (((26 * 26) + 26 + 1) * 26) | ||
16 | |||
17 | /* | ||
18 | * Time out in seconds for disks and Magneto-opticals (which are slower). | ||
19 | */ | ||
20 | #define SD_TIMEOUT (30 * HZ) | ||
21 | #define SD_MOD_TIMEOUT (75 * HZ) | ||
22 | |||
23 | /* | ||
24 | * Number of allowed retries | ||
25 | */ | ||
26 | #define SD_MAX_RETRIES 5 | ||
27 | #define SD_PASSTHROUGH_RETRIES 1 | ||
28 | |||
29 | /* | ||
30 | * Size of the initial data buffer for mode and read capacity data | ||
31 | */ | ||
32 | #define SD_BUF_SIZE 512 | ||
33 | |||
34 | struct scsi_disk { | ||
35 | struct scsi_driver *driver; /* always &sd_template */ | ||
36 | struct scsi_device *device; | ||
37 | struct device dev; | ||
38 | struct gendisk *disk; | ||
39 | unsigned int openers; /* protected by BKL for now, yuck */ | ||
40 | sector_t capacity; /* size in 512-byte sectors */ | ||
41 | u32 index; | ||
42 | u8 media_present; | ||
43 | u8 write_prot; | ||
44 | unsigned previous_state : 1; | ||
45 | unsigned WCE : 1; /* state of disk WCE bit */ | ||
46 | unsigned RCD : 1; /* state of disk RCD bit, unused */ | ||
47 | unsigned DPOFUA : 1; /* state of disk DPOFUA bit */ | ||
48 | }; | ||
49 | #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev) | ||
50 | |||
51 | #define sd_printk(prefix, sdsk, fmt, a...) \ | ||
52 | (sdsk)->disk ? \ | ||
53 | sdev_printk(prefix, (sdsk)->device, "[%s] " fmt, \ | ||
54 | (sdsk)->disk->disk_name, ##a) : \ | ||
55 | sdev_printk(prefix, (sdsk)->device, fmt, ##a) | ||
56 | |||
57 | #endif /* _SCSI_DISK_H */ | ||
diff --git a/include/scsi/sg.h b/include/scsi/sg.h index 519c49a0fc11..934ae389671d 100644 --- a/include/scsi/sg.h +++ b/include/scsi/sg.h | |||
@@ -206,6 +206,7 @@ typedef struct sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */ | |||
206 | #define SG_SCSI_RESET_DEVICE 1 | 206 | #define SG_SCSI_RESET_DEVICE 1 |
207 | #define SG_SCSI_RESET_BUS 2 | 207 | #define SG_SCSI_RESET_BUS 2 |
208 | #define SG_SCSI_RESET_HOST 3 | 208 | #define SG_SCSI_RESET_HOST 3 |
209 | #define SG_SCSI_RESET_TARGET 4 | ||
209 | 210 | ||
210 | /* synchronous SCSI command ioctl, (only in version 3 interface) */ | 211 | /* synchronous SCSI command ioctl, (only in version 3 interface) */ |
211 | #define SG_IO 0x2285 /* similar effect as write() followed by read() */ | 212 | #define SG_IO 0x2285 /* similar effect as write() followed by read() */ |
diff --git a/include/sound/ad1843.h b/include/sound/ad1843.h new file mode 100644 index 000000000000..b236a9d1d6e4 --- /dev/null +++ b/include/sound/ad1843.h | |||
@@ -0,0 +1,46 @@ | |||
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 2003 Vivien Chappelier <vivien.chappelier@linux-mips.org> | ||
7 | * Copyright 2008 Thomas Bogendoerfer <tsbogend@franken.de> | ||
8 | */ | ||
9 | |||
10 | #ifndef __SOUND_AD1843_H | ||
11 | #define __SOUND_AD1843_H | ||
12 | |||
13 | struct snd_ad1843 { | ||
14 | void *chip; | ||
15 | int (*read)(void *chip, int reg); | ||
16 | int (*write)(void *chip, int reg, int val); | ||
17 | }; | ||
18 | |||
19 | #define AD1843_GAIN_RECLEV 0 | ||
20 | #define AD1843_GAIN_LINE 1 | ||
21 | #define AD1843_GAIN_LINE_2 2 | ||
22 | #define AD1843_GAIN_MIC 3 | ||
23 | #define AD1843_GAIN_PCM_0 4 | ||
24 | #define AD1843_GAIN_PCM_1 5 | ||
25 | #define AD1843_GAIN_SIZE (AD1843_GAIN_PCM_1+1) | ||
26 | |||
27 | int ad1843_get_gain_max(struct snd_ad1843 *ad1843, int id); | ||
28 | int ad1843_get_gain(struct snd_ad1843 *ad1843, int id); | ||
29 | int ad1843_set_gain(struct snd_ad1843 *ad1843, int id, int newval); | ||
30 | int ad1843_get_recsrc(struct snd_ad1843 *ad1843); | ||
31 | int ad1843_set_recsrc(struct snd_ad1843 *ad1843, int newsrc); | ||
32 | void ad1843_setup_dac(struct snd_ad1843 *ad1843, | ||
33 | unsigned int id, | ||
34 | unsigned int framerate, | ||
35 | snd_pcm_format_t fmt, | ||
36 | unsigned int channels); | ||
37 | void ad1843_shutdown_dac(struct snd_ad1843 *ad1843, | ||
38 | unsigned int id); | ||
39 | void ad1843_setup_adc(struct snd_ad1843 *ad1843, | ||
40 | unsigned int framerate, | ||
41 | snd_pcm_format_t fmt, | ||
42 | unsigned int channels); | ||
43 | void ad1843_shutdown_adc(struct snd_ad1843 *ad1843); | ||
44 | int ad1843_init(struct snd_ad1843 *ad1843); | ||
45 | |||
46 | #endif /* __SOUND_AD1843_H */ | ||
diff --git a/include/sound/control.h b/include/sound/control.h index 3dc1291f52db..4721b4bba053 100644 --- a/include/sound/control.h +++ b/include/sound/control.h | |||
@@ -129,9 +129,6 @@ int snd_ctl_unregister_ioctl_compat(snd_kctl_ioctl_func_t fcn); | |||
129 | #define snd_ctl_unregister_ioctl_compat(fcn) | 129 | #define snd_ctl_unregister_ioctl_compat(fcn) |
130 | #endif | 130 | #endif |
131 | 131 | ||
132 | int snd_ctl_elem_read(struct snd_card *card, struct snd_ctl_elem_value *control); | ||
133 | int snd_ctl_elem_write(struct snd_card *card, struct snd_ctl_file *file, struct snd_ctl_elem_value *control); | ||
134 | |||
135 | static inline unsigned int snd_ctl_get_ioffnum(struct snd_kcontrol *kctl, struct snd_ctl_elem_id *id) | 132 | static inline unsigned int snd_ctl_get_ioffnum(struct snd_kcontrol *kctl, struct snd_ctl_elem_id *id) |
136 | { | 133 | { |
137 | return id->numid - kctl->id.numid; | 134 | return id->numid - kctl->id.numid; |
diff --git a/include/sound/core.h b/include/sound/core.h index 695ee53488a3..558b96284bd2 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
@@ -412,13 +412,13 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...) | |||
412 | 412 | ||
413 | #endif /* CONFIG_SND_DEBUG */ | 413 | #endif /* CONFIG_SND_DEBUG */ |
414 | 414 | ||
415 | #ifdef CONFIG_SND_DEBUG_DETECT | 415 | #ifdef CONFIG_SND_DEBUG_VERBOSE |
416 | /** | 416 | /** |
417 | * snd_printdd - debug printk | 417 | * snd_printdd - debug printk |
418 | * @format: format string | 418 | * @format: format string |
419 | * | 419 | * |
420 | * Works like snd_printk() for debugging purposes. | 420 | * Works like snd_printk() for debugging purposes. |
421 | * Ignored when CONFIG_SND_DEBUG_DETECT is not set. | 421 | * Ignored when CONFIG_SND_DEBUG_VERBOSE 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) |
424 | #else | 424 | #else |
@@ -442,7 +442,7 @@ struct snd_pci_quirk { | |||
442 | unsigned short subvendor; /* PCI subvendor ID */ | 442 | unsigned short subvendor; /* PCI subvendor ID */ |
443 | unsigned short subdevice; /* PCI subdevice ID */ | 443 | unsigned short subdevice; /* PCI subdevice ID */ |
444 | int value; /* value */ | 444 | int value; /* value */ |
445 | #ifdef CONFIG_SND_DEBUG_DETECT | 445 | #ifdef CONFIG_SND_DEBUG_VERBOSE |
446 | const char *name; /* name of the device (optional) */ | 446 | const char *name; /* name of the device (optional) */ |
447 | #endif | 447 | #endif |
448 | }; | 448 | }; |
@@ -450,7 +450,7 @@ struct snd_pci_quirk { | |||
450 | #define _SND_PCI_QUIRK_ID(vend,dev) \ | 450 | #define _SND_PCI_QUIRK_ID(vend,dev) \ |
451 | .subvendor = (vend), .subdevice = (dev) | 451 | .subvendor = (vend), .subdevice = (dev) |
452 | #define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)} | 452 | #define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)} |
453 | #ifdef CONFIG_SND_DEBUG_DETECT | 453 | #ifdef CONFIG_SND_DEBUG_VERBOSE |
454 | #define SND_PCI_QUIRK(vend,dev,xname,val) \ | 454 | #define SND_PCI_QUIRK(vend,dev,xname,val) \ |
455 | {_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)} | 455 | {_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)} |
456 | #else | 456 | #else |
diff --git a/include/sound/cs4231-regs.h b/include/sound/cs4231-regs.h index e8d1f3e31f9e..92647532c454 100644 --- a/include/sound/cs4231-regs.h +++ b/include/sound/cs4231-regs.h | |||
@@ -177,4 +177,12 @@ | |||
177 | #define CS4236_RIGHT_WAVE 0x1c /* right wavetable serial port volume */ | 177 | #define CS4236_RIGHT_WAVE 0x1c /* right wavetable serial port volume */ |
178 | #define CS4236_VERSION 0x9c /* chip version and ID */ | 178 | #define CS4236_VERSION 0x9c /* chip version and ID */ |
179 | 179 | ||
180 | /* definitions for extended registers - OPTI93X */ | ||
181 | #define OPTi931_AUX_LEFT_INPUT 0x10 | ||
182 | #define OPTi931_AUX_RIGHT_INPUT 0x11 | ||
183 | #define OPTi93X_MIC_LEFT_INPUT 0x14 | ||
184 | #define OPTi93X_MIC_RIGHT_INPUT 0x15 | ||
185 | #define OPTi93X_OUT_LEFT 0x16 | ||
186 | #define OPTi93X_OUT_RIGHT 0x17 | ||
187 | |||
180 | #endif /* __SOUND_CS4231_REGS_H */ | 188 | #endif /* __SOUND_CS4231_REGS_H */ |
diff --git a/include/sound/cs4231.h b/include/sound/cs4231.h index 66055d702aa3..f0785f9f4ae4 100644 --- a/include/sound/cs4231.h +++ b/include/sound/cs4231.h | |||
@@ -58,6 +58,7 @@ | |||
58 | /* compatible, but clones */ | 58 | /* compatible, but clones */ |
59 | #define CS4231_HW_INTERWAVE 0x1000 /* InterWave chip */ | 59 | #define CS4231_HW_INTERWAVE 0x1000 /* InterWave chip */ |
60 | #define CS4231_HW_OPL3SA2 0x1101 /* OPL3-SA2 chip, similar to cs4231 */ | 60 | #define CS4231_HW_OPL3SA2 0x1101 /* OPL3-SA2 chip, similar to cs4231 */ |
61 | #define CS4231_HW_OPTI93X 0x1102 /* Opti 930/931/933 */ | ||
61 | 62 | ||
62 | /* defines for codec.hwshare */ | 63 | /* defines for codec.hwshare */ |
63 | #define CS4231_HWSHARE_IRQ (1<<0) | 64 | #define CS4231_HWSHARE_IRQ (1<<0) |
@@ -120,6 +121,8 @@ unsigned char snd_cs4236_ext_in(struct snd_cs4231 *chip, unsigned char reg); | |||
120 | void snd_cs4231_mce_up(struct snd_cs4231 *chip); | 121 | void snd_cs4231_mce_up(struct snd_cs4231 *chip); |
121 | void snd_cs4231_mce_down(struct snd_cs4231 *chip); | 122 | void snd_cs4231_mce_down(struct snd_cs4231 *chip); |
122 | 123 | ||
124 | void snd_cs4231_overrange(struct snd_cs4231 *chip); | ||
125 | |||
123 | irqreturn_t snd_cs4231_interrupt(int irq, void *dev_id); | 126 | irqreturn_t snd_cs4231_interrupt(int irq, void *dev_id); |
124 | 127 | ||
125 | const char *snd_cs4231_chip_id(struct snd_cs4231 *chip); | 128 | const char *snd_cs4231_chip_id(struct snd_cs4231 *chip); |
diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h index 7b7b9b13b4dd..10ee28eac018 100644 --- a/include/sound/emu10k1.h +++ b/include/sound/emu10k1.h | |||
@@ -1670,6 +1670,7 @@ struct snd_emu_chip_details { | |||
1670 | unsigned char spi_dac; /* SPI interface for DAC */ | 1670 | unsigned char spi_dac; /* SPI interface for DAC */ |
1671 | unsigned char i2c_adc; /* I2C interface for ADC */ | 1671 | unsigned char i2c_adc; /* I2C interface for ADC */ |
1672 | unsigned char adc_1361t; /* Use Philips 1361T ADC */ | 1672 | unsigned char adc_1361t; /* Use Philips 1361T ADC */ |
1673 | unsigned char invert_shared_spdif; /* analog/digital switch inverted */ | ||
1673 | const char *driver; | 1674 | const char *driver; |
1674 | const char *name; | 1675 | const char *name; |
1675 | const char *id; /* for backward compatibility - can be NULL if not needed */ | 1676 | const char *id; /* for backward compatibility - can be NULL if not needed */ |
diff --git a/include/sound/seq_kernel.h b/include/sound/seq_kernel.h index f023c1b97f8c..3d9afb6a8c9c 100644 --- a/include/sound/seq_kernel.h +++ b/include/sound/seq_kernel.h | |||
@@ -105,7 +105,7 @@ int snd_seq_event_port_attach(int client, struct snd_seq_port_callback *pcbp, | |||
105 | int cap, int type, int midi_channels, int midi_voices, char *portname); | 105 | int cap, int type, int midi_channels, int midi_voices, char *portname); |
106 | int snd_seq_event_port_detach(int client, int port); | 106 | int snd_seq_event_port_detach(int client, int port); |
107 | 107 | ||
108 | #ifdef CONFIG_KMOD | 108 | #ifdef CONFIG_MODULES |
109 | void snd_seq_autoload_lock(void); | 109 | void snd_seq_autoload_lock(void); |
110 | void snd_seq_autoload_unlock(void); | 110 | void snd_seq_autoload_unlock(void); |
111 | #else | 111 | #else |
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index a105b01e06d5..3030fdc6981d 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h | |||
@@ -130,6 +130,13 @@ | |||
130 | { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ | 130 | { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ |
131 | .shift = wshift, .invert = winvert} | 131 | .shift = wshift, .invert = winvert} |
132 | 132 | ||
133 | /* generic register modifier widget */ | ||
134 | #define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \ | ||
135 | { .id = wid, .name = wname, .kcontrols = NULL, .num_kcontrols = 0, \ | ||
136 | .reg = -((wreg) + 1), .shift = wshift, .mask = wmask, \ | ||
137 | .on_val = won_val, .off_val = woff_val, .event = dapm_reg_event, \ | ||
138 | .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD} | ||
139 | |||
133 | /* dapm kcontrol types */ | 140 | /* dapm kcontrol types */ |
134 | #define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \ | 141 | #define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \ |
135 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | 142 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ |
@@ -193,6 +200,7 @@ struct snd_soc_dapm_widget; | |||
193 | enum snd_soc_dapm_type; | 200 | enum snd_soc_dapm_type; |
194 | struct snd_soc_dapm_path; | 201 | struct snd_soc_dapm_path; |
195 | struct snd_soc_dapm_pin; | 202 | struct snd_soc_dapm_pin; |
203 | struct snd_soc_dapm_route; | ||
196 | 204 | ||
197 | /* dapm controls */ | 205 | /* dapm controls */ |
198 | int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, | 206 | int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, |
@@ -205,25 +213,32 @@ int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol, | |||
205 | struct snd_ctl_elem_value *ucontrol); | 213 | struct snd_ctl_elem_value *ucontrol); |
206 | int snd_soc_dapm_new_control(struct snd_soc_codec *codec, | 214 | int snd_soc_dapm_new_control(struct snd_soc_codec *codec, |
207 | const struct snd_soc_dapm_widget *widget); | 215 | const struct snd_soc_dapm_widget *widget); |
216 | int snd_soc_dapm_new_controls(struct snd_soc_codec *codec, | ||
217 | const struct snd_soc_dapm_widget *widget, | ||
218 | int num); | ||
208 | 219 | ||
209 | /* dapm path setup */ | 220 | /* dapm path setup */ |
210 | int snd_soc_dapm_connect_input(struct snd_soc_codec *codec, | 221 | int __deprecated snd_soc_dapm_connect_input(struct snd_soc_codec *codec, |
211 | const char *sink_name, const char *control_name, const char *src_name); | 222 | const char *sink_name, const char *control_name, const char *src_name); |
212 | int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec); | 223 | int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec); |
213 | void snd_soc_dapm_free(struct snd_soc_device *socdev); | 224 | void snd_soc_dapm_free(struct snd_soc_device *socdev); |
225 | int snd_soc_dapm_add_routes(struct snd_soc_codec *codec, | ||
226 | const struct snd_soc_dapm_route *route, int num); | ||
214 | 227 | ||
215 | /* dapm events */ | 228 | /* dapm events */ |
216 | int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream, | 229 | int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream, |
217 | int event); | 230 | int event); |
218 | int snd_soc_dapm_device_event(struct snd_soc_device *socdev, int event); | 231 | int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev, |
232 | enum snd_soc_bias_level level); | ||
219 | 233 | ||
220 | /* dapm sys fs - used by the core */ | 234 | /* dapm sys fs - used by the core */ |
221 | int snd_soc_dapm_sys_add(struct device *dev); | 235 | int snd_soc_dapm_sys_add(struct device *dev); |
222 | 236 | ||
223 | /* dapm audio endpoint control */ | 237 | /* dapm audio pin control and status */ |
224 | int snd_soc_dapm_set_endpoint(struct snd_soc_codec *codec, | 238 | int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, char *pin); |
225 | char *pin, int status); | 239 | int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, char *pin); |
226 | int snd_soc_dapm_sync_endpoints(struct snd_soc_codec *codec); | 240 | int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, char *pin); |
241 | int snd_soc_dapm_sync(struct snd_soc_codec *codec); | ||
227 | 242 | ||
228 | /* dapm widget types */ | 243 | /* dapm widget types */ |
229 | enum snd_soc_dapm_type { | 244 | enum snd_soc_dapm_type { |
@@ -245,6 +260,18 @@ enum snd_soc_dapm_type { | |||
245 | snd_soc_dapm_post, /* machine specific post widget - exec last */ | 260 | snd_soc_dapm_post, /* machine specific post widget - exec last */ |
246 | }; | 261 | }; |
247 | 262 | ||
263 | /* | ||
264 | * DAPM audio route definition. | ||
265 | * | ||
266 | * Defines an audio route originating at source via control and finishing | ||
267 | * at sink. | ||
268 | */ | ||
269 | struct snd_soc_dapm_route { | ||
270 | const char *sink; | ||
271 | const char *control; | ||
272 | const char *source; | ||
273 | }; | ||
274 | |||
248 | /* dapm audio path between two widgets */ | 275 | /* dapm audio path between two widgets */ |
249 | struct snd_soc_dapm_path { | 276 | struct snd_soc_dapm_path { |
250 | char *name; | 277 | char *name; |
@@ -277,6 +304,9 @@ struct snd_soc_dapm_widget { | |||
277 | unsigned char shift; /* bits to shift */ | 304 | unsigned char shift; /* bits to shift */ |
278 | unsigned int saved_value; /* widget saved value */ | 305 | unsigned int saved_value; /* widget saved value */ |
279 | unsigned int value; /* widget current value */ | 306 | unsigned int value; /* widget current value */ |
307 | unsigned int mask; /* non-shifted mask */ | ||
308 | unsigned int on_val; /* on state value */ | ||
309 | unsigned int off_val; /* off state value */ | ||
280 | unsigned char power:1; /* block power status */ | 310 | unsigned char power:1; /* block power status */ |
281 | unsigned char invert:1; /* invert the power bit */ | 311 | unsigned char invert:1; /* invert the power bit */ |
282 | unsigned char active:1; /* active stream on DAC, ADC's */ | 312 | unsigned char active:1; /* active stream on DAC, ADC's */ |
diff --git a/include/sound/soc.h b/include/sound/soc.h index d3c8c033dff8..1890d87c5204 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h | |||
@@ -73,6 +73,15 @@ | |||
73 | .get = snd_soc_get_volsw_2r, .put = snd_soc_put_volsw_2r, \ | 73 | .get = snd_soc_get_volsw_2r, .put = snd_soc_put_volsw_2r, \ |
74 | .private_value = (reg_left) | ((shift) << 8) | \ | 74 | .private_value = (reg_left) | ((shift) << 8) | \ |
75 | ((max) << 12) | ((invert) << 20) | ((reg_right) << 24) } | 75 | ((max) << 12) | ((invert) << 20) | ((reg_right) << 24) } |
76 | #define SOC_DOUBLE_S8_TLV(xname, reg, min, max, tlv_array) \ | ||
77 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ | ||
78 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ | ||
79 | SNDRV_CTL_ELEM_ACCESS_READWRITE, \ | ||
80 | .tlv.p = (tlv_array), \ | ||
81 | .info = snd_soc_info_volsw_s8, .get = snd_soc_get_volsw_s8, \ | ||
82 | .put = snd_soc_put_volsw_s8, \ | ||
83 | .private_value = (reg) | (((signed char)max) << 16) | \ | ||
84 | (((signed char)min) << 24) } | ||
76 | #define SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xtexts) \ | 85 | #define SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xtexts) \ |
77 | { .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \ | 86 | { .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \ |
78 | .mask = xmask, .texts = xtexts } | 87 | .mask = xmask, .texts = xtexts } |
@@ -91,6 +100,15 @@ | |||
91 | .info = snd_soc_info_volsw, \ | 100 | .info = snd_soc_info_volsw, \ |
92 | .get = xhandler_get, .put = xhandler_put, \ | 101 | .get = xhandler_get, .put = xhandler_put, \ |
93 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmask, xinvert) } | 102 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmask, xinvert) } |
103 | #define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmask, xinvert,\ | ||
104 | xhandler_get, xhandler_put, tlv_array) \ | ||
105 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | ||
106 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ | ||
107 | SNDRV_CTL_ELEM_ACCESS_READWRITE,\ | ||
108 | .tlv.p = (tlv_array), \ | ||
109 | .info = snd_soc_info_volsw, \ | ||
110 | .get = xhandler_get, .put = xhandler_put, \ | ||
111 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmask, xinvert) } | ||
94 | #define SOC_SINGLE_BOOL_EXT(xname, xdata, xhandler_get, xhandler_put) \ | 112 | #define SOC_SINGLE_BOOL_EXT(xname, xdata, xhandler_get, xhandler_put) \ |
95 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | 113 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ |
96 | .info = snd_soc_info_bool_ext, \ | 114 | .info = snd_soc_info_bool_ext, \ |
@@ -103,6 +121,24 @@ | |||
103 | .private_value = (unsigned long)&xenum } | 121 | .private_value = (unsigned long)&xenum } |
104 | 122 | ||
105 | /* | 123 | /* |
124 | * Bias levels | ||
125 | * | ||
126 | * @ON: Bias is fully on for audio playback and capture operations. | ||
127 | * @PREPARE: Prepare for audio operations. Called before DAPM switching for | ||
128 | * stream start and stop operations. | ||
129 | * @STANDBY: Low power standby state when no playback/capture operations are | ||
130 | * in progress. NOTE: The transition time between STANDBY and ON | ||
131 | * should be as fast as possible and no longer than 10ms. | ||
132 | * @OFF: Power Off. No restrictions on transition times. | ||
133 | */ | ||
134 | enum snd_soc_bias_level { | ||
135 | SND_SOC_BIAS_ON, | ||
136 | SND_SOC_BIAS_PREPARE, | ||
137 | SND_SOC_BIAS_STANDBY, | ||
138 | SND_SOC_BIAS_OFF, | ||
139 | }; | ||
140 | |||
141 | /* | ||
106 | * Digital Audio Interface (DAI) types | 142 | * Digital Audio Interface (DAI) types |
107 | */ | 143 | */ |
108 | #define SND_SOC_DAI_AC97 0x1 | 144 | #define SND_SOC_DAI_AC97 0x1 |
@@ -185,8 +221,7 @@ struct snd_soc_pcm_stream; | |||
185 | struct snd_soc_ops; | 221 | struct snd_soc_ops; |
186 | struct snd_soc_dai_mode; | 222 | struct snd_soc_dai_mode; |
187 | struct snd_soc_pcm_runtime; | 223 | struct snd_soc_pcm_runtime; |
188 | struct snd_soc_codec_dai; | 224 | struct snd_soc_dai; |
189 | struct snd_soc_cpu_dai; | ||
190 | struct snd_soc_codec; | 225 | struct snd_soc_codec; |
191 | struct snd_soc_machine_config; | 226 | struct snd_soc_machine_config; |
192 | struct soc_enum; | 227 | struct soc_enum; |
@@ -221,6 +256,27 @@ int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, | |||
221 | struct snd_ac97_bus_ops *ops, int num); | 256 | struct snd_ac97_bus_ops *ops, int num); |
222 | void snd_soc_free_ac97_codec(struct snd_soc_codec *codec); | 257 | void snd_soc_free_ac97_codec(struct snd_soc_codec *codec); |
223 | 258 | ||
259 | /* Digital Audio Interface clocking API.*/ | ||
260 | int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, | ||
261 | unsigned int freq, int dir); | ||
262 | |||
263 | int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai, | ||
264 | int div_id, int div); | ||
265 | |||
266 | int snd_soc_dai_set_pll(struct snd_soc_dai *dai, | ||
267 | int pll_id, unsigned int freq_in, unsigned int freq_out); | ||
268 | |||
269 | /* Digital Audio interface formatting */ | ||
270 | int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt); | ||
271 | |||
272 | int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai, | ||
273 | unsigned int mask, int slots); | ||
274 | |||
275 | int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate); | ||
276 | |||
277 | /* Digital Audio Interface mute */ | ||
278 | int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute); | ||
279 | |||
224 | /* | 280 | /* |
225 | *Controls | 281 | *Controls |
226 | */ | 282 | */ |
@@ -249,6 +305,12 @@ int snd_soc_get_volsw_2r(struct snd_kcontrol *kcontrol, | |||
249 | struct snd_ctl_elem_value *ucontrol); | 305 | struct snd_ctl_elem_value *ucontrol); |
250 | int snd_soc_put_volsw_2r(struct snd_kcontrol *kcontrol, | 306 | int snd_soc_put_volsw_2r(struct snd_kcontrol *kcontrol, |
251 | struct snd_ctl_elem_value *ucontrol); | 307 | struct snd_ctl_elem_value *ucontrol); |
308 | int snd_soc_info_volsw_s8(struct snd_kcontrol *kcontrol, | ||
309 | struct snd_ctl_elem_info *uinfo); | ||
310 | int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol, | ||
311 | struct snd_ctl_elem_value *ucontrol); | ||
312 | int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, | ||
313 | struct snd_ctl_elem_value *ucontrol); | ||
252 | 314 | ||
253 | /* SoC PCM stream information */ | 315 | /* SoC PCM stream information */ |
254 | struct snd_soc_pcm_stream { | 316 | struct snd_soc_pcm_stream { |
@@ -272,87 +334,45 @@ struct snd_soc_ops { | |||
272 | int (*trigger)(struct snd_pcm_substream *, int); | 334 | int (*trigger)(struct snd_pcm_substream *, int); |
273 | }; | 335 | }; |
274 | 336 | ||
275 | /* ASoC codec DAI ops */ | 337 | /* ASoC DAI ops */ |
276 | struct snd_soc_codec_ops { | 338 | struct snd_soc_dai_ops { |
277 | /* codec DAI clocking configuration */ | 339 | /* DAI clocking configuration */ |
278 | int (*set_sysclk)(struct snd_soc_codec_dai *codec_dai, | 340 | int (*set_sysclk)(struct snd_soc_dai *dai, |
279 | int clk_id, unsigned int freq, int dir); | 341 | int clk_id, unsigned int freq, int dir); |
280 | int (*set_pll)(struct snd_soc_codec_dai *codec_dai, | 342 | int (*set_pll)(struct snd_soc_dai *dai, |
281 | int pll_id, unsigned int freq_in, unsigned int freq_out); | 343 | int pll_id, unsigned int freq_in, unsigned int freq_out); |
282 | int (*set_clkdiv)(struct snd_soc_codec_dai *codec_dai, | 344 | int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div); |
283 | int div_id, int div); | ||
284 | 345 | ||
285 | /* CPU DAI format configuration */ | 346 | /* DAI format configuration */ |
286 | int (*set_fmt)(struct snd_soc_codec_dai *codec_dai, | 347 | int (*set_fmt)(struct snd_soc_dai *dai, unsigned int fmt); |
287 | unsigned int fmt); | 348 | int (*set_tdm_slot)(struct snd_soc_dai *dai, |
288 | int (*set_tdm_slot)(struct snd_soc_codec_dai *codec_dai, | ||
289 | unsigned int mask, int slots); | 349 | unsigned int mask, int slots); |
290 | int (*set_tristate)(struct snd_soc_codec_dai *, int tristate); | 350 | int (*set_tristate)(struct snd_soc_dai *dai, int tristate); |
291 | 351 | ||
292 | /* digital mute */ | 352 | /* digital mute */ |
293 | int (*digital_mute)(struct snd_soc_codec_dai *, int mute); | 353 | int (*digital_mute)(struct snd_soc_dai *dai, int mute); |
294 | }; | ||
295 | |||
296 | /* ASoC cpu DAI ops */ | ||
297 | struct snd_soc_cpu_ops { | ||
298 | /* CPU DAI clocking configuration */ | ||
299 | int (*set_sysclk)(struct snd_soc_cpu_dai *cpu_dai, | ||
300 | int clk_id, unsigned int freq, int dir); | ||
301 | int (*set_clkdiv)(struct snd_soc_cpu_dai *cpu_dai, | ||
302 | int div_id, int div); | ||
303 | int (*set_pll)(struct snd_soc_cpu_dai *cpu_dai, | ||
304 | int pll_id, unsigned int freq_in, unsigned int freq_out); | ||
305 | |||
306 | /* CPU DAI format configuration */ | ||
307 | int (*set_fmt)(struct snd_soc_cpu_dai *cpu_dai, | ||
308 | unsigned int fmt); | ||
309 | int (*set_tdm_slot)(struct snd_soc_cpu_dai *cpu_dai, | ||
310 | unsigned int mask, int slots); | ||
311 | int (*set_tristate)(struct snd_soc_cpu_dai *, int tristate); | ||
312 | }; | ||
313 | |||
314 | /* SoC Codec DAI */ | ||
315 | struct snd_soc_codec_dai { | ||
316 | char *name; | ||
317 | int id; | ||
318 | unsigned char type; | ||
319 | |||
320 | /* DAI capabilities */ | ||
321 | struct snd_soc_pcm_stream playback; | ||
322 | struct snd_soc_pcm_stream capture; | ||
323 | |||
324 | /* DAI runtime info */ | ||
325 | struct snd_soc_codec *codec; | ||
326 | unsigned int active; | ||
327 | unsigned char pop_wait:1; | ||
328 | |||
329 | /* ops */ | ||
330 | struct snd_soc_ops ops; | ||
331 | struct snd_soc_codec_ops dai_ops; | ||
332 | |||
333 | /* DAI private data */ | ||
334 | void *private_data; | ||
335 | }; | 354 | }; |
336 | 355 | ||
337 | /* SoC CPU DAI */ | 356 | /* SoC DAI (Digital Audio Interface) */ |
338 | struct snd_soc_cpu_dai { | 357 | struct snd_soc_dai { |
339 | |||
340 | /* DAI description */ | 358 | /* DAI description */ |
341 | char *name; | 359 | char *name; |
342 | unsigned int id; | 360 | unsigned int id; |
343 | unsigned char type; | 361 | unsigned char type; |
344 | 362 | ||
345 | /* DAI callbacks */ | 363 | /* DAI callbacks */ |
346 | int (*probe)(struct platform_device *pdev); | 364 | int (*probe)(struct platform_device *pdev, |
347 | void (*remove)(struct platform_device *pdev); | 365 | struct snd_soc_dai *dai); |
366 | void (*remove)(struct platform_device *pdev, | ||
367 | struct snd_soc_dai *dai); | ||
348 | int (*suspend)(struct platform_device *pdev, | 368 | int (*suspend)(struct platform_device *pdev, |
349 | struct snd_soc_cpu_dai *cpu_dai); | 369 | struct snd_soc_dai *dai); |
350 | int (*resume)(struct platform_device *pdev, | 370 | int (*resume)(struct platform_device *pdev, |
351 | struct snd_soc_cpu_dai *cpu_dai); | 371 | struct snd_soc_dai *dai); |
352 | 372 | ||
353 | /* ops */ | 373 | /* ops */ |
354 | struct snd_soc_ops ops; | 374 | struct snd_soc_ops ops; |
355 | struct snd_soc_cpu_ops dai_ops; | 375 | struct snd_soc_dai_ops dai_ops; |
356 | 376 | ||
357 | /* DAI capabilities */ | 377 | /* DAI capabilities */ |
358 | struct snd_soc_pcm_stream capture; | 378 | struct snd_soc_pcm_stream capture; |
@@ -360,7 +380,9 @@ struct snd_soc_cpu_dai { | |||
360 | 380 | ||
361 | /* DAI runtime info */ | 381 | /* DAI runtime info */ |
362 | struct snd_pcm_runtime *runtime; | 382 | struct snd_pcm_runtime *runtime; |
363 | unsigned char active:1; | 383 | struct snd_soc_codec *codec; |
384 | unsigned int active; | ||
385 | unsigned char pop_wait:1; | ||
364 | void *dma_data; | 386 | void *dma_data; |
365 | 387 | ||
366 | /* DAI private data */ | 388 | /* DAI private data */ |
@@ -374,7 +396,8 @@ struct snd_soc_codec { | |||
374 | struct mutex mutex; | 396 | struct mutex mutex; |
375 | 397 | ||
376 | /* callbacks */ | 398 | /* callbacks */ |
377 | int (*dapm_event)(struct snd_soc_codec *codec, int event); | 399 | int (*set_bias_level)(struct snd_soc_codec *, |
400 | enum snd_soc_bias_level level); | ||
378 | 401 | ||
379 | /* runtime */ | 402 | /* runtime */ |
380 | struct snd_card *card; | 403 | struct snd_card *card; |
@@ -396,12 +419,12 @@ struct snd_soc_codec { | |||
396 | /* dapm */ | 419 | /* dapm */ |
397 | struct list_head dapm_widgets; | 420 | struct list_head dapm_widgets; |
398 | struct list_head dapm_paths; | 421 | struct list_head dapm_paths; |
399 | unsigned int dapm_state; | 422 | enum snd_soc_bias_level bias_level; |
400 | unsigned int suspend_dapm_state; | 423 | enum snd_soc_bias_level suspend_bias_level; |
401 | struct delayed_work delayed_work; | 424 | struct delayed_work delayed_work; |
402 | 425 | ||
403 | /* codec DAI's */ | 426 | /* codec DAI's */ |
404 | struct snd_soc_codec_dai *dai; | 427 | struct snd_soc_dai *dai; |
405 | unsigned int num_dai; | 428 | unsigned int num_dai; |
406 | }; | 429 | }; |
407 | 430 | ||
@@ -420,12 +443,12 @@ struct snd_soc_platform { | |||
420 | int (*probe)(struct platform_device *pdev); | 443 | int (*probe)(struct platform_device *pdev); |
421 | int (*remove)(struct platform_device *pdev); | 444 | int (*remove)(struct platform_device *pdev); |
422 | int (*suspend)(struct platform_device *pdev, | 445 | int (*suspend)(struct platform_device *pdev, |
423 | struct snd_soc_cpu_dai *cpu_dai); | 446 | struct snd_soc_dai *dai); |
424 | int (*resume)(struct platform_device *pdev, | 447 | int (*resume)(struct platform_device *pdev, |
425 | struct snd_soc_cpu_dai *cpu_dai); | 448 | struct snd_soc_dai *dai); |
426 | 449 | ||
427 | /* pcm creation and destruction */ | 450 | /* pcm creation and destruction */ |
428 | int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *, | 451 | int (*pcm_new)(struct snd_card *, struct snd_soc_dai *, |
429 | struct snd_pcm *); | 452 | struct snd_pcm *); |
430 | void (*pcm_free)(struct snd_pcm *); | 453 | void (*pcm_free)(struct snd_pcm *); |
431 | 454 | ||
@@ -439,8 +462,8 @@ struct snd_soc_dai_link { | |||
439 | char *stream_name; /* Stream name */ | 462 | char *stream_name; /* Stream name */ |
440 | 463 | ||
441 | /* DAI */ | 464 | /* DAI */ |
442 | struct snd_soc_codec_dai *codec_dai; | 465 | struct snd_soc_dai *codec_dai; |
443 | struct snd_soc_cpu_dai *cpu_dai; | 466 | struct snd_soc_dai *cpu_dai; |
444 | 467 | ||
445 | /* machine stream operations */ | 468 | /* machine stream operations */ |
446 | struct snd_soc_ops *ops; | 469 | struct snd_soc_ops *ops; |
@@ -467,7 +490,8 @@ struct snd_soc_machine { | |||
467 | int (*resume_post)(struct platform_device *pdev); | 490 | int (*resume_post)(struct platform_device *pdev); |
468 | 491 | ||
469 | /* callbacks */ | 492 | /* callbacks */ |
470 | int (*dapm_event)(struct snd_soc_machine *, int event); | 493 | int (*set_bias_level)(struct snd_soc_machine *, |
494 | enum snd_soc_bias_level level); | ||
471 | 495 | ||
472 | /* CPU <--> Codec DAI links */ | 496 | /* CPU <--> Codec DAI links */ |
473 | struct snd_soc_dai_link *dai_link; | 497 | struct snd_soc_dai_link *dai_link; |
@@ -482,6 +506,7 @@ struct snd_soc_device { | |||
482 | struct snd_soc_codec *codec; | 506 | struct snd_soc_codec *codec; |
483 | struct snd_soc_codec_device *codec_dev; | 507 | struct snd_soc_codec_device *codec_dev; |
484 | struct delayed_work delayed_work; | 508 | struct delayed_work delayed_work; |
509 | struct work_struct deferred_resume_work; | ||
485 | void *codec_data; | 510 | void *codec_data; |
486 | }; | 511 | }; |
487 | 512 | ||
diff --git a/include/sound/uda1341.h b/include/sound/uda1341.h index 2e564bfb37fe..110d5dc3a2be 100644 --- a/include/sound/uda1341.h +++ b/include/sound/uda1341.h | |||
@@ -15,8 +15,6 @@ | |||
15 | * features support | 15 | * features support |
16 | */ | 16 | */ |
17 | 17 | ||
18 | /* $Id: uda1341.h,v 1.8 2005/11/17 14:17:21 tiwai Exp $ */ | ||
19 | |||
20 | #define UDA1341_ALSA_NAME "snd-uda1341" | 18 | #define UDA1341_ALSA_NAME "snd-uda1341" |
21 | 19 | ||
22 | /* | 20 | /* |
diff --git a/include/sound/version.h b/include/sound/version.h index ed6fb2eb1eac..6b78aff273a8 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 */ |
2 | #define CONFIG_SND_VERSION "1.0.16" | 2 | #define CONFIG_SND_VERSION "1.0.17" |
3 | #define CONFIG_SND_DATE "" | 3 | #define CONFIG_SND_DATE "" |