diff options
Diffstat (limited to 'include')
193 files changed, 3010 insertions, 2778 deletions
diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h index ebc1f697615a..422f29c06c77 100644 --- a/include/acpi/acconfig.h +++ b/include/acpi/acconfig.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -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 0x20060707 | 66 | #define ACPI_CA_VERSION 0x20070126 |
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, |
@@ -115,6 +115,10 @@ | |||
115 | 115 | ||
116 | #define ACPI_NUM_OWNERID_MASKS 8 | 116 | #define ACPI_NUM_OWNERID_MASKS 8 |
117 | 117 | ||
118 | /* Size of the root table array is increased by this increment */ | ||
119 | |||
120 | #define ACPI_ROOT_TABLE_SIZE_INCREMENT 4 | ||
121 | |||
118 | /****************************************************************************** | 122 | /****************************************************************************** |
119 | * | 123 | * |
120 | * ACPI Specification constants (Do not change unless the specification changes) | 124 | * ACPI Specification constants (Do not change unless the specification changes) |
@@ -152,6 +156,11 @@ | |||
152 | #define ACPI_PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */ | 156 | #define ACPI_PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */ |
153 | #define ACPI_PATH_SEPARATOR '.' | 157 | #define ACPI_PATH_SEPARATOR '.' |
154 | 158 | ||
159 | /* Sizes for ACPI table headers */ | ||
160 | |||
161 | #define ACPI_OEM_ID_SIZE 6 | ||
162 | #define ACPI_OEM_TABLE_ID_SIZE 8 | ||
163 | |||
155 | /* Constants used in searching for the RSDP in low memory */ | 164 | /* Constants used in searching for the RSDP in low memory */ |
156 | 165 | ||
157 | #define ACPI_EBDA_PTR_LOCATION 0x0000040E /* Physical Address */ | 166 | #define ACPI_EBDA_PTR_LOCATION 0x0000040E /* Physical Address */ |
diff --git a/include/acpi/acdebug.h b/include/acpi/acdebug.h index d8167095caf3..d626bb1d2973 100644 --- a/include/acpi/acdebug.h +++ b/include/acpi/acdebug.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -159,6 +159,10 @@ void | |||
159 | acpi_db_create_execution_threads(char *num_threads_arg, | 159 | acpi_db_create_execution_threads(char *num_threads_arg, |
160 | char *num_loops_arg, char *method_name_arg); | 160 | char *num_loops_arg, char *method_name_arg); |
161 | 161 | ||
162 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | ||
163 | u32 acpi_db_get_cache_info(struct acpi_memory_list *cache); | ||
164 | #endif | ||
165 | |||
162 | /* | 166 | /* |
163 | * dbfileio - Debugger file I/O commands | 167 | * dbfileio - Debugger file I/O commands |
164 | */ | 168 | */ |
@@ -214,4 +218,6 @@ void acpi_db_prep_namestring(char *name); | |||
214 | 218 | ||
215 | struct acpi_namespace_node *acpi_db_local_ns_lookup(char *name); | 219 | struct acpi_namespace_node *acpi_db_local_ns_lookup(char *name); |
216 | 220 | ||
221 | void acpi_db_uint32_to_hex_string(u32 value, char *buffer); | ||
222 | |||
217 | #endif /* __ACDEBUG_H__ */ | 223 | #endif /* __ACDEBUG_H__ */ |
diff --git a/include/acpi/acdisasm.h b/include/acpi/acdisasm.h index 9a7d6921f534..389d772c7d5b 100644 --- a/include/acpi/acdisasm.h +++ b/include/acpi/acdisasm.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -97,9 +97,11 @@ typedef const struct acpi_dmtable_info { | |||
97 | #define ACPI_DMT_CHKSUM 20 | 97 | #define ACPI_DMT_CHKSUM 20 |
98 | #define ACPI_DMT_SPACEID 21 | 98 | #define ACPI_DMT_SPACEID 21 |
99 | #define ACPI_DMT_GAS 22 | 99 | #define ACPI_DMT_GAS 22 |
100 | #define ACPI_DMT_MADT 23 | 100 | #define ACPI_DMT_DMAR 23 |
101 | #define ACPI_DMT_SRAT 24 | 101 | #define ACPI_DMT_MADT 24 |
102 | #define ACPI_DMT_EXIT 25 | 102 | #define ACPI_DMT_SRAT 25 |
103 | #define ACPI_DMT_EXIT 26 | ||
104 | #define ACPI_DMT_SIG 27 | ||
103 | 105 | ||
104 | typedef | 106 | typedef |
105 | void (*ACPI_TABLE_HANDLER) (struct acpi_table_header * table); | 107 | void (*ACPI_TABLE_HANDLER) (struct acpi_table_header * table); |
@@ -108,6 +110,7 @@ struct acpi_dmtable_data { | |||
108 | char *signature; | 110 | char *signature; |
109 | struct acpi_dmtable_info *table_info; | 111 | struct acpi_dmtable_info *table_info; |
110 | ACPI_TABLE_HANDLER table_handler; | 112 | ACPI_TABLE_HANDLER table_handler; |
113 | char *name; | ||
111 | }; | 114 | }; |
112 | 115 | ||
113 | struct acpi_op_walk_info { | 116 | struct acpi_op_walk_info { |
@@ -139,7 +142,9 @@ extern const char *acpi_gbl_match_ops[]; | |||
139 | 142 | ||
140 | extern struct acpi_dmtable_info acpi_dm_table_info_asf0[]; | 143 | extern struct acpi_dmtable_info acpi_dm_table_info_asf0[]; |
141 | extern struct acpi_dmtable_info acpi_dm_table_info_asf1[]; | 144 | extern struct acpi_dmtable_info acpi_dm_table_info_asf1[]; |
145 | extern struct acpi_dmtable_info acpi_dm_table_info_asf1a[]; | ||
142 | extern struct acpi_dmtable_info acpi_dm_table_info_asf2[]; | 146 | extern struct acpi_dmtable_info acpi_dm_table_info_asf2[]; |
147 | extern struct acpi_dmtable_info acpi_dm_table_info_asf2a[]; | ||
143 | extern struct acpi_dmtable_info acpi_dm_table_info_asf3[]; | 148 | extern struct acpi_dmtable_info acpi_dm_table_info_asf3[]; |
144 | extern struct acpi_dmtable_info acpi_dm_table_info_asf4[]; | 149 | extern struct acpi_dmtable_info acpi_dm_table_info_asf4[]; |
145 | extern struct acpi_dmtable_info acpi_dm_table_info_asf_hdr[]; | 150 | extern struct acpi_dmtable_info acpi_dm_table_info_asf_hdr[]; |
@@ -147,6 +152,11 @@ extern struct acpi_dmtable_info acpi_dm_table_info_boot[]; | |||
147 | extern struct acpi_dmtable_info acpi_dm_table_info_cpep[]; | 152 | extern struct acpi_dmtable_info acpi_dm_table_info_cpep[]; |
148 | extern struct acpi_dmtable_info acpi_dm_table_info_cpep0[]; | 153 | extern struct acpi_dmtable_info acpi_dm_table_info_cpep0[]; |
149 | extern struct acpi_dmtable_info acpi_dm_table_info_dbgp[]; | 154 | extern struct acpi_dmtable_info acpi_dm_table_info_dbgp[]; |
155 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar[]; | ||
156 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar_hdr[]; | ||
157 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar_scope[]; | ||
158 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar0[]; | ||
159 | extern struct acpi_dmtable_info acpi_dm_table_info_dmar1[]; | ||
150 | extern struct acpi_dmtable_info acpi_dm_table_info_ecdt[]; | 160 | extern struct acpi_dmtable_info acpi_dm_table_info_ecdt[]; |
151 | extern struct acpi_dmtable_info acpi_dm_table_info_facs[]; | 161 | extern struct acpi_dmtable_info acpi_dm_table_info_facs[]; |
152 | extern struct acpi_dmtable_info acpi_dm_table_info_fadt1[]; | 162 | extern struct acpi_dmtable_info acpi_dm_table_info_fadt1[]; |
@@ -201,6 +211,8 @@ void acpi_dm_dump_asf(struct acpi_table_header *table); | |||
201 | 211 | ||
202 | void acpi_dm_dump_cpep(struct acpi_table_header *table); | 212 | void acpi_dm_dump_cpep(struct acpi_table_header *table); |
203 | 213 | ||
214 | void acpi_dm_dump_dmar(struct acpi_table_header *table); | ||
215 | |||
204 | void acpi_dm_dump_fadt(struct acpi_table_header *table); | 216 | void acpi_dm_dump_fadt(struct acpi_table_header *table); |
205 | 217 | ||
206 | void acpi_dm_dump_srat(struct acpi_table_header *table); | 218 | void acpi_dm_dump_srat(struct acpi_table_header *table); |
@@ -314,7 +326,7 @@ acpi_dm_resource_template(struct acpi_op_walk_info *info, | |||
314 | union acpi_parse_object *op, | 326 | union acpi_parse_object *op, |
315 | u8 * byte_data, u32 byte_count); | 327 | u8 * byte_data, u32 byte_count); |
316 | 328 | ||
317 | u8 acpi_dm_is_resource_template(union acpi_parse_object *op); | 329 | acpi_status acpi_dm_is_resource_template(union acpi_parse_object *op); |
318 | 330 | ||
319 | void acpi_dm_indent(u32 level); | 331 | void acpi_dm_indent(u32 level); |
320 | 332 | ||
diff --git a/include/acpi/acdispat.h b/include/acpi/acdispat.h index a22fe9cf8493..cb8d2868c8ac 100644 --- a/include/acpi/acdispat.h +++ b/include/acpi/acdispat.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -210,7 +210,7 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state); | |||
210 | * dsinit | 210 | * dsinit |
211 | */ | 211 | */ |
212 | acpi_status | 212 | acpi_status |
213 | acpi_ds_initialize_objects(struct acpi_table_desc *table_desc, | 213 | acpi_ds_initialize_objects(acpi_native_uint table_index, |
214 | struct acpi_namespace_node *start_node); | 214 | struct acpi_namespace_node *start_node); |
215 | 215 | ||
216 | /* | 216 | /* |
diff --git a/include/acpi/acevents.h b/include/acpi/acevents.h index 234142828e1a..d23cdf326808 100644 --- a/include/acpi/acevents.h +++ b/include/acpi/acevents.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acexcep.h b/include/acpi/acexcep.h index 797ca1ea5214..b73f18a48785 100644 --- a/include/acpi/acexcep.h +++ b/include/acpi/acexcep.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -178,8 +178,10 @@ | |||
178 | #define AE_CTRL_BREAK (acpi_status) (0x0009 | AE_CODE_CONTROL) | 178 | #define AE_CTRL_BREAK (acpi_status) (0x0009 | AE_CODE_CONTROL) |
179 | #define AE_CTRL_CONTINUE (acpi_status) (0x000A | AE_CODE_CONTROL) | 179 | #define AE_CTRL_CONTINUE (acpi_status) (0x000A | AE_CODE_CONTROL) |
180 | #define AE_CTRL_SKIP (acpi_status) (0x000B | AE_CODE_CONTROL) | 180 | #define AE_CTRL_SKIP (acpi_status) (0x000B | AE_CODE_CONTROL) |
181 | #define AE_CTRL_PARSE_CONTINUE (acpi_status) (0x000C | AE_CODE_CONTROL) | ||
182 | #define AE_CTRL_PARSE_PENDING (acpi_status) (0x000D | AE_CODE_CONTROL) | ||
181 | 183 | ||
182 | #define AE_CODE_CTRL_MAX 0x000B | 184 | #define AE_CODE_CTRL_MAX 0x000D |
183 | 185 | ||
184 | #ifdef DEFINE_ACPI_GLOBALS | 186 | #ifdef DEFINE_ACPI_GLOBALS |
185 | 187 | ||
@@ -291,7 +293,9 @@ char const *acpi_gbl_exception_names_ctrl[] = { | |||
291 | "AE_CTRL_TRANSFER", | 293 | "AE_CTRL_TRANSFER", |
292 | "AE_CTRL_BREAK", | 294 | "AE_CTRL_BREAK", |
293 | "AE_CTRL_CONTINUE", | 295 | "AE_CTRL_CONTINUE", |
294 | "AE_CTRL_SKIP" | 296 | "AE_CTRL_SKIP", |
297 | "AE_CTRL_PARSE_CONTINUE", | ||
298 | "AE_CTRL_PARSE_PENDING" | ||
295 | }; | 299 | }; |
296 | 300 | ||
297 | #endif /* ACPI GLOBALS */ | 301 | #endif /* ACPI GLOBALS */ |
diff --git a/include/acpi/acglobal.h b/include/acpi/acglobal.h index 06972e6637de..24c3f05ab367 100644 --- a/include/acpi/acglobal.h +++ b/include/acpi/acglobal.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -58,37 +58,6 @@ | |||
58 | #define ACPI_INIT_GLOBAL(a,b) a | 58 | #define ACPI_INIT_GLOBAL(a,b) a |
59 | #endif | 59 | #endif |
60 | 60 | ||
61 | /* | ||
62 | * Keep local copies of these FADT-based registers. NOTE: These globals | ||
63 | * are first in this file for alignment reasons on 64-bit systems. | ||
64 | */ | ||
65 | ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1a_enable; | ||
66 | ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1b_enable; | ||
67 | |||
68 | /***************************************************************************** | ||
69 | * | ||
70 | * Debug support | ||
71 | * | ||
72 | ****************************************************************************/ | ||
73 | |||
74 | /* Runtime configuration of debug print levels */ | ||
75 | |||
76 | extern u32 acpi_dbg_level; | ||
77 | extern u32 acpi_dbg_layer; | ||
78 | |||
79 | /* Procedure nesting level for debug output */ | ||
80 | |||
81 | extern u32 acpi_gbl_nesting_level; | ||
82 | |||
83 | /* Support for dynamic control method tracing mechanism */ | ||
84 | |||
85 | ACPI_EXTERN u32 acpi_gbl_original_dbg_level; | ||
86 | ACPI_EXTERN u32 acpi_gbl_original_dbg_layer; | ||
87 | ACPI_EXTERN acpi_name acpi_gbl_trace_method_name; | ||
88 | ACPI_EXTERN u32 acpi_gbl_trace_dbg_level; | ||
89 | ACPI_EXTERN u32 acpi_gbl_trace_dbg_layer; | ||
90 | ACPI_EXTERN u32 acpi_gbl_trace_flags; | ||
91 | |||
92 | /***************************************************************************** | 61 | /***************************************************************************** |
93 | * | 62 | * |
94 | * Runtime configuration (static defaults that can be overriden at runtime) | 63 | * Runtime configuration (static defaults that can be overriden at runtime) |
@@ -135,52 +104,62 @@ ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_leave_wake_gpes_disabled, TRUE); | |||
135 | 104 | ||
136 | /***************************************************************************** | 105 | /***************************************************************************** |
137 | * | 106 | * |
107 | * Debug support | ||
108 | * | ||
109 | ****************************************************************************/ | ||
110 | |||
111 | /* Runtime configuration of debug print levels */ | ||
112 | |||
113 | extern u32 acpi_dbg_level; | ||
114 | extern u32 acpi_dbg_layer; | ||
115 | |||
116 | /* Procedure nesting level for debug output */ | ||
117 | |||
118 | extern u32 acpi_gbl_nesting_level; | ||
119 | |||
120 | /* Event counters */ | ||
121 | |||
122 | ACPI_EXTERN u32 acpi_gpe_count; | ||
123 | |||
124 | /* Support for dynamic control method tracing mechanism */ | ||
125 | |||
126 | ACPI_EXTERN u32 acpi_gbl_original_dbg_level; | ||
127 | ACPI_EXTERN u32 acpi_gbl_original_dbg_layer; | ||
128 | ACPI_EXTERN acpi_name acpi_gbl_trace_method_name; | ||
129 | ACPI_EXTERN u32 acpi_gbl_trace_dbg_level; | ||
130 | ACPI_EXTERN u32 acpi_gbl_trace_dbg_layer; | ||
131 | ACPI_EXTERN u32 acpi_gbl_trace_flags; | ||
132 | |||
133 | /***************************************************************************** | ||
134 | * | ||
138 | * ACPI Table globals | 135 | * ACPI Table globals |
139 | * | 136 | * |
140 | ****************************************************************************/ | 137 | ****************************************************************************/ |
141 | 138 | ||
142 | /* | 139 | /* |
143 | * Table pointers. | 140 | * acpi_gbl_root_table_list is the master list of ACPI tables found in the |
144 | * Although these pointers are somewhat redundant with the global acpi_table, | 141 | * RSDT/XSDT. |
145 | * they are convenient because they are typed pointers. | ||
146 | * | 142 | * |
147 | * These tables are single-table only; meaning that there can be at most one | 143 | * acpi_gbl_FADT is a local copy of the FADT, converted to a common format. |
148 | * of each in the system. Each global points to the actual table. | ||
149 | */ | ||
150 | ACPI_EXTERN u32 acpi_gbl_table_flags; | ||
151 | ACPI_EXTERN u32 acpi_gbl_rsdt_table_count; | ||
152 | ACPI_EXTERN struct rsdp_descriptor *acpi_gbl_RSDP; | ||
153 | ACPI_EXTERN struct xsdt_descriptor *acpi_gbl_XSDT; | ||
154 | ACPI_EXTERN struct fadt_descriptor *acpi_gbl_FADT; | ||
155 | ACPI_EXTERN struct acpi_table_header *acpi_gbl_DSDT; | ||
156 | ACPI_EXTERN struct facs_descriptor *acpi_gbl_FACS; | ||
157 | ACPI_EXTERN struct acpi_common_facs acpi_gbl_common_fACS; | ||
158 | /* | ||
159 | * Since there may be multiple SSDTs and PSDTs, a single pointer is not | ||
160 | * sufficient; Therefore, there isn't one! | ||
161 | */ | 144 | */ |
145 | ACPI_EXTERN struct acpi_internal_rsdt acpi_gbl_root_table_list; | ||
146 | ACPI_EXTERN struct acpi_table_fadt acpi_gbl_FADT; | ||
147 | extern acpi_native_uint acpi_gbl_permanent_mmap; | ||
162 | 148 | ||
163 | /* The root table can be either an RSDT or an XSDT */ | 149 | /* These addresses are calculated from FADT address values */ |
164 | 150 | ||
165 | ACPI_EXTERN u8 acpi_gbl_root_table_type; | 151 | ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1a_enable; |
166 | #define ACPI_TABLE_TYPE_RSDT 'R' | 152 | ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1b_enable; |
167 | #define ACPI_TABLE_TYPE_XSDT 'X' | ||
168 | 153 | ||
169 | /* | 154 | /* |
170 | * Handle both ACPI 1.0 and ACPI 2.0 Integer widths: | 155 | * Handle both ACPI 1.0 and ACPI 2.0 Integer widths. The integer width is |
171 | * If we are executing a method that exists in a 32-bit ACPI table, | 156 | * determined by the revision of the DSDT: If the DSDT revision is less than |
172 | * use only the lower 32 bits of the (internal) 64-bit Integer. | 157 | * 2, use only the lower 32 bits of the internal 64-bit Integer. |
173 | */ | 158 | */ |
174 | ACPI_EXTERN u8 acpi_gbl_integer_bit_width; | 159 | ACPI_EXTERN u8 acpi_gbl_integer_bit_width; |
175 | ACPI_EXTERN u8 acpi_gbl_integer_byte_width; | 160 | ACPI_EXTERN u8 acpi_gbl_integer_byte_width; |
176 | ACPI_EXTERN u8 acpi_gbl_integer_nybble_width; | 161 | ACPI_EXTERN u8 acpi_gbl_integer_nybble_width; |
177 | 162 | ||
178 | /* | ||
179 | * ACPI Table info arrays | ||
180 | */ | ||
181 | extern struct acpi_table_list acpi_gbl_table_lists[ACPI_TABLE_ID_MAX + 1]; | ||
182 | extern struct acpi_table_support acpi_gbl_table_data[ACPI_TABLE_ID_MAX + 1]; | ||
183 | |||
184 | /***************************************************************************** | 163 | /***************************************************************************** |
185 | * | 164 | * |
186 | * Mutual exlusion within ACPICA subsystem | 165 | * Mutual exlusion within ACPICA subsystem |
@@ -188,7 +167,7 @@ extern struct acpi_table_support acpi_gbl_table_data[ACPI_TABLE_ID_MAX + 1]; | |||
188 | ****************************************************************************/ | 167 | ****************************************************************************/ |
189 | 168 | ||
190 | /* | 169 | /* |
191 | * Predefined mutex objects. This array contains the | 170 | * Predefined mutex objects. This array contains the |
192 | * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs. | 171 | * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs. |
193 | * (The table maps local handles to the real OS handles) | 172 | * (The table maps local handles to the real OS handles) |
194 | */ | 173 | */ |
@@ -197,6 +176,7 @@ ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[ACPI_NUM_MUTEX]; | |||
197 | /* | 176 | /* |
198 | * Global lock semaphore works in conjunction with the actual HW global lock | 177 | * Global lock semaphore works in conjunction with the actual HW global lock |
199 | */ | 178 | */ |
179 | ACPI_EXTERN acpi_mutex acpi_gbl_global_lock_mutex; | ||
200 | ACPI_EXTERN acpi_semaphore acpi_gbl_global_lock_semaphore; | 180 | ACPI_EXTERN acpi_semaphore acpi_gbl_global_lock_semaphore; |
201 | 181 | ||
202 | /* | 182 | /* |
@@ -220,6 +200,7 @@ ACPI_EXTERN spinlock_t _acpi_gbl_hardware_lock; /* For ACPI H/W except GPE regis | |||
220 | 200 | ||
221 | ACPI_EXTERN struct acpi_memory_list *acpi_gbl_global_list; | 201 | ACPI_EXTERN struct acpi_memory_list *acpi_gbl_global_list; |
222 | ACPI_EXTERN struct acpi_memory_list *acpi_gbl_ns_node_list; | 202 | ACPI_EXTERN struct acpi_memory_list *acpi_gbl_ns_node_list; |
203 | ACPI_EXTERN u8 acpi_gbl_display_final_mem_stats; | ||
223 | #endif | 204 | #endif |
224 | 205 | ||
225 | /* Object caches */ | 206 | /* Object caches */ |
@@ -240,7 +221,6 @@ ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk; | |||
240 | 221 | ||
241 | /* Misc */ | 222 | /* Misc */ |
242 | 223 | ||
243 | ACPI_EXTERN u32 acpi_gbl_global_lock_thread_count; | ||
244 | ACPI_EXTERN u32 acpi_gbl_original_mode; | 224 | ACPI_EXTERN u32 acpi_gbl_original_mode; |
245 | ACPI_EXTERN u32 acpi_gbl_rsdp_original_location; | 225 | ACPI_EXTERN u32 acpi_gbl_rsdp_original_location; |
246 | ACPI_EXTERN u32 acpi_gbl_ns_lookup_count; | 226 | ACPI_EXTERN u32 acpi_gbl_ns_lookup_count; |
@@ -260,12 +240,19 @@ ACPI_EXTERN u8 acpi_gbl_system_awake_and_running; | |||
260 | 240 | ||
261 | extern u8 acpi_gbl_shutdown; | 241 | extern u8 acpi_gbl_shutdown; |
262 | extern u32 acpi_gbl_startup_flags; | 242 | extern u32 acpi_gbl_startup_flags; |
263 | extern const u8 acpi_gbl_decode_to8bit[8]; | ||
264 | extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT]; | 243 | extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT]; |
265 | extern const char *acpi_gbl_highest_dstate_names[4]; | 244 | extern const char *acpi_gbl_highest_dstate_names[4]; |
266 | extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES]; | 245 | extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES]; |
267 | extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS]; | 246 | extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS]; |
268 | 247 | ||
248 | /* Exception codes */ | ||
249 | |||
250 | extern char const *acpi_gbl_exception_names_env[]; | ||
251 | extern char const *acpi_gbl_exception_names_pgm[]; | ||
252 | extern char const *acpi_gbl_exception_names_tbl[]; | ||
253 | extern char const *acpi_gbl_exception_names_aml[]; | ||
254 | extern char const *acpi_gbl_exception_names_ctrl[]; | ||
255 | |||
269 | /***************************************************************************** | 256 | /***************************************************************************** |
270 | * | 257 | * |
271 | * Namespace globals | 258 | * Namespace globals |
diff --git a/include/acpi/achware.h b/include/acpi/achware.h index 29b60a8c0593..9df275cf7bc1 100644 --- a/include/acpi/achware.h +++ b/include/acpi/achware.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -61,8 +61,6 @@ | |||
61 | /* | 61 | /* |
62 | * hwacpi - high level functions | 62 | * hwacpi - high level functions |
63 | */ | 63 | */ |
64 | acpi_status acpi_hw_initialize(void); | ||
65 | |||
66 | acpi_status acpi_hw_set_mode(u32 mode); | 64 | acpi_status acpi_hw_set_mode(u32 mode); |
67 | 65 | ||
68 | u32 acpi_hw_get_mode(void); | 66 | u32 acpi_hw_get_mode(void); |
@@ -84,7 +82,7 @@ acpi_hw_low_level_read(u32 width, | |||
84 | acpi_status | 82 | acpi_status |
85 | acpi_hw_low_level_write(u32 width, u32 value, struct acpi_generic_address *reg); | 83 | acpi_hw_low_level_write(u32 width, u32 value, struct acpi_generic_address *reg); |
86 | 84 | ||
87 | acpi_status acpi_hw_clear_acpi_status(u32 flags); | 85 | acpi_status acpi_hw_clear_acpi_status(void); |
88 | 86 | ||
89 | /* | 87 | /* |
90 | * hwgpe - GPE support | 88 | * hwgpe - GPE support |
diff --git a/include/acpi/acinterp.h b/include/acpi/acinterp.h index 91586d0d5bb5..ce7c9d653910 100644 --- a/include/acpi/acinterp.h +++ b/include/acpi/acinterp.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -277,12 +277,6 @@ acpi_status acpi_ex_system_do_suspend(acpi_integer time); | |||
277 | 277 | ||
278 | acpi_status acpi_ex_system_do_stall(u32 time); | 278 | acpi_status acpi_ex_system_do_stall(u32 time); |
279 | 279 | ||
280 | acpi_status | ||
281 | acpi_ex_system_acquire_mutex(union acpi_operand_object *time, | ||
282 | union acpi_operand_object *obj_desc); | ||
283 | |||
284 | acpi_status acpi_ex_system_release_mutex(union acpi_operand_object *obj_desc); | ||
285 | |||
286 | acpi_status acpi_ex_system_signal_event(union acpi_operand_object *obj_desc); | 280 | acpi_status acpi_ex_system_signal_event(union acpi_operand_object *obj_desc); |
287 | 281 | ||
288 | acpi_status | 282 | acpi_status |
@@ -451,10 +445,14 @@ acpi_ex_copy_integer_to_buffer_field(union acpi_operand_object *source_desc, | |||
451 | /* | 445 | /* |
452 | * exutils - interpreter/scanner utilities | 446 | * exutils - interpreter/scanner utilities |
453 | */ | 447 | */ |
454 | acpi_status acpi_ex_enter_interpreter(void); | 448 | void acpi_ex_enter_interpreter(void); |
455 | 449 | ||
456 | void acpi_ex_exit_interpreter(void); | 450 | void acpi_ex_exit_interpreter(void); |
457 | 451 | ||
452 | void acpi_ex_reacquire_interpreter(void); | ||
453 | |||
454 | void acpi_ex_relinquish_interpreter(void); | ||
455 | |||
458 | void acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc); | 456 | void acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc); |
459 | 457 | ||
460 | u8 acpi_ex_acquire_global_lock(u32 rule); | 458 | u8 acpi_ex_acquire_global_lock(u32 rule); |
diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h index 063c4b54290f..6f83ddbed3af 100644 --- a/include/acpi/aclocal.h +++ b/include/acpi/aclocal.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -80,8 +80,8 @@ union acpi_parse_object; | |||
80 | * table below also! | 80 | * table below also! |
81 | */ | 81 | */ |
82 | #define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */ | 82 | #define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */ |
83 | #define ACPI_MTX_TABLES 1 /* Data for ACPI tables */ | 83 | #define ACPI_MTX_NAMESPACE 1 /* ACPI Namespace */ |
84 | #define ACPI_MTX_NAMESPACE 2 /* ACPI Namespace */ | 84 | #define ACPI_MTX_TABLES 2 /* Data for ACPI tables */ |
85 | #define ACPI_MTX_EVENTS 3 /* Data for ACPI events */ | 85 | #define ACPI_MTX_EVENTS 3 /* Data for ACPI events */ |
86 | #define ACPI_MTX_CACHES 4 /* Internal caches, general purposes */ | 86 | #define ACPI_MTX_CACHES 4 /* Internal caches, general purposes */ |
87 | #define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */ | 87 | #define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */ |
@@ -162,7 +162,7 @@ struct acpi_mutex_info { | |||
162 | typedef enum { | 162 | typedef enum { |
163 | ACPI_IMODE_LOAD_PASS1 = 0x01, | 163 | ACPI_IMODE_LOAD_PASS1 = 0x01, |
164 | ACPI_IMODE_LOAD_PASS2 = 0x02, | 164 | ACPI_IMODE_LOAD_PASS2 = 0x02, |
165 | ACPI_IMODE_EXECUTE = 0x0E | 165 | ACPI_IMODE_EXECUTE = 0x03 |
166 | } acpi_interpreter_mode; | 166 | } acpi_interpreter_mode; |
167 | 167 | ||
168 | union acpi_name_union { | 168 | union acpi_name_union { |
@@ -204,7 +204,7 @@ struct acpi_namespace_node { | |||
204 | /* Namespace Node flags */ | 204 | /* Namespace Node flags */ |
205 | 205 | ||
206 | #define ANOBJ_END_OF_PEER_LIST 0x01 /* End-of-list, Peer field points to parent */ | 206 | #define ANOBJ_END_OF_PEER_LIST 0x01 /* End-of-list, Peer field points to parent */ |
207 | #define ANOBJ_RESERVED 0x02 /* Available for future use */ | 207 | #define ANOBJ_TEMPORARY 0x02 /* Node is create by a method and is temporary */ |
208 | #define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ | 208 | #define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ |
209 | #define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ | 209 | #define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ |
210 | #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ | 210 | #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ |
@@ -219,25 +219,42 @@ struct acpi_namespace_node { | |||
219 | * ACPI Table Descriptor. One per ACPI table | 219 | * ACPI Table Descriptor. One per ACPI table |
220 | */ | 220 | */ |
221 | struct acpi_table_desc { | 221 | struct acpi_table_desc { |
222 | struct acpi_table_desc *prev; | 222 | acpi_physical_address address; |
223 | struct acpi_table_desc *next; | ||
224 | struct acpi_table_desc *installed_desc; | ||
225 | struct acpi_table_header *pointer; | 223 | struct acpi_table_header *pointer; |
226 | u8 *aml_start; | 224 | u32 length; /* Length fixed at 32 bits */ |
227 | u64 physical_address; | 225 | union acpi_name_union signature; |
228 | acpi_size length; | ||
229 | u32 aml_length; | ||
230 | acpi_owner_id owner_id; | 226 | acpi_owner_id owner_id; |
231 | u8 type; | 227 | u8 flags; |
232 | u8 allocation; | ||
233 | u8 loaded_into_namespace; | ||
234 | }; | 228 | }; |
235 | 229 | ||
236 | struct acpi_table_list { | 230 | /* Flags for above */ |
237 | struct acpi_table_desc *next; | 231 | |
232 | #define ACPI_TABLE_ORIGIN_UNKNOWN (0) | ||
233 | #define ACPI_TABLE_ORIGIN_MAPPED (1) | ||
234 | #define ACPI_TABLE_ORIGIN_ALLOCATED (2) | ||
235 | #define ACPI_TABLE_ORIGIN_MASK (3) | ||
236 | #define ACPI_TABLE_IS_LOADED (4) | ||
237 | |||
238 | /* One internal RSDT for table management */ | ||
239 | |||
240 | struct acpi_internal_rsdt { | ||
241 | struct acpi_table_desc *tables; | ||
238 | u32 count; | 242 | u32 count; |
243 | u32 size; | ||
244 | u8 flags; | ||
239 | }; | 245 | }; |
240 | 246 | ||
247 | /* Flags for above */ | ||
248 | |||
249 | #define ACPI_ROOT_ORIGIN_UNKNOWN (0) /* ~ORIGIN_ALLOCATED */ | ||
250 | #define ACPI_ROOT_ORIGIN_ALLOCATED (1) | ||
251 | #define ACPI_ROOT_ALLOW_RESIZE (2) | ||
252 | |||
253 | /* Predefined (fixed) table indexes */ | ||
254 | |||
255 | #define ACPI_TABLE_INDEX_DSDT (0) | ||
256 | #define ACPI_TABLE_INDEX_FACS (1) | ||
257 | |||
241 | struct acpi_find_context { | 258 | struct acpi_find_context { |
242 | char *search_for; | 259 | char *search_for; |
243 | acpi_handle *list; | 260 | acpi_handle *list; |
@@ -350,7 +367,7 @@ struct acpi_gpe_event_info { | |||
350 | union acpi_gpe_dispatch_info dispatch; /* Either Method or Handler */ | 367 | union acpi_gpe_dispatch_info dispatch; /* Either Method or Handler */ |
351 | struct acpi_gpe_register_info *register_info; /* Backpointer to register info */ | 368 | struct acpi_gpe_register_info *register_info; /* Backpointer to register info */ |
352 | u8 flags; /* Misc info about this GPE */ | 369 | u8 flags; /* Misc info about this GPE */ |
353 | u8 register_bit; /* This GPE bit within the register */ | 370 | u8 gpe_number; /* This GPE */ |
354 | }; | 371 | }; |
355 | 372 | ||
356 | /* Information about a GPE register pair, one per each status/enable pair in an array */ | 373 | /* Information about a GPE register pair, one per each status/enable pair in an array */ |
@@ -855,12 +872,30 @@ struct acpi_bit_register_info { | |||
855 | ****************************************************************************/ | 872 | ****************************************************************************/ |
856 | 873 | ||
857 | struct acpi_db_method_info { | 874 | struct acpi_db_method_info { |
858 | acpi_handle thread_gate; | 875 | acpi_handle main_thread_gate; |
876 | acpi_handle thread_complete_gate; | ||
877 | u32 *threads; | ||
878 | u32 num_threads; | ||
879 | u32 num_created; | ||
880 | u32 num_completed; | ||
881 | |||
859 | char *name; | 882 | char *name; |
860 | char **args; | ||
861 | u32 flags; | 883 | u32 flags; |
862 | u32 num_loops; | 884 | u32 num_loops; |
863 | char pathname[128]; | 885 | char pathname[128]; |
886 | char **args; | ||
887 | |||
888 | /* | ||
889 | * Arguments to be passed to method for the command | ||
890 | * Threads - | ||
891 | * the Number of threads, ID of current thread and | ||
892 | * Index of current thread inside all them created. | ||
893 | */ | ||
894 | char init_args; | ||
895 | char *arguments[4]; | ||
896 | char num_threads_str[11]; | ||
897 | char id_of_thread_str[11]; | ||
898 | char index_of_thread_str[11]; | ||
864 | }; | 899 | }; |
865 | 900 | ||
866 | struct acpi_integrity_info { | 901 | struct acpi_integrity_info { |
@@ -919,6 +954,8 @@ struct acpi_memory_list { | |||
919 | 954 | ||
920 | u32 total_allocated; | 955 | u32 total_allocated; |
921 | u32 total_freed; | 956 | u32 total_freed; |
957 | u32 max_occupied; | ||
958 | u32 total_size; | ||
922 | u32 current_total_size; | 959 | u32 current_total_size; |
923 | u32 requests; | 960 | u32 requests; |
924 | u32 hits; | 961 | u32 hits; |
diff --git a/include/acpi/acmacros.h b/include/acpi/acmacros.h index 192fa095a515..8948a6461834 100644 --- a/include/acpi/acmacros.h +++ b/include/acpi/acmacros.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -55,25 +55,12 @@ | |||
55 | #define ACPI_SET_BIT(target,bit) ((target) |= (bit)) | 55 | #define ACPI_SET_BIT(target,bit) ((target) |= (bit)) |
56 | #define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit)) | 56 | #define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit)) |
57 | #define ACPI_MIN(a,b) (((a)<(b))?(a):(b)) | 57 | #define ACPI_MIN(a,b) (((a)<(b))?(a):(b)) |
58 | #define ACPI_MAX(a,b) (((a)>(b))?(a):(b)) | ||
58 | 59 | ||
59 | /* Size calculation */ | 60 | /* Size calculation */ |
60 | 61 | ||
61 | #define ACPI_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0])) | 62 | #define ACPI_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0])) |
62 | 63 | ||
63 | #if ACPI_MACHINE_WIDTH == 16 | ||
64 | |||
65 | /* | ||
66 | * For 16-bit addresses, we have to assume that the upper 32 bits | ||
67 | * (out of 64) are zero. | ||
68 | */ | ||
69 | #define ACPI_LODWORD(l) ((u32)(l)) | ||
70 | #define ACPI_HIDWORD(l) ((u32)(0)) | ||
71 | |||
72 | #define ACPI_GET_ADDRESS(a) ((a).lo) | ||
73 | #define ACPI_STORE_ADDRESS(a,b) {(a).hi=0;(a).lo=(u32)(b);} | ||
74 | #define ACPI_VALID_ADDRESS(a) ((a).hi | (a).lo) | ||
75 | |||
76 | #else | ||
77 | #ifdef ACPI_NO_INTEGER64_SUPPORT | 64 | #ifdef ACPI_NO_INTEGER64_SUPPORT |
78 | /* | 65 | /* |
79 | * acpi_integer is 32-bits, no 64-bit support on this platform | 66 | * acpi_integer is 32-bits, no 64-bit support on this platform |
@@ -81,10 +68,6 @@ | |||
81 | #define ACPI_LODWORD(l) ((u32)(l)) | 68 | #define ACPI_LODWORD(l) ((u32)(l)) |
82 | #define ACPI_HIDWORD(l) ((u32)(0)) | 69 | #define ACPI_HIDWORD(l) ((u32)(0)) |
83 | 70 | ||
84 | #define ACPI_GET_ADDRESS(a) (a) | ||
85 | #define ACPI_STORE_ADDRESS(a,b) ((a)=(b)) | ||
86 | #define ACPI_VALID_ADDRESS(a) (a) | ||
87 | |||
88 | #else | 71 | #else |
89 | 72 | ||
90 | /* | 73 | /* |
@@ -92,11 +75,6 @@ | |||
92 | */ | 75 | */ |
93 | #define ACPI_LODWORD(l) ((u32)(u64)(l)) | 76 | #define ACPI_LODWORD(l) ((u32)(u64)(l)) |
94 | #define ACPI_HIDWORD(l) ((u32)(((*(struct uint64_struct *)(void *)(&l))).hi)) | 77 | #define ACPI_HIDWORD(l) ((u32)(((*(struct uint64_struct *)(void *)(&l))).hi)) |
95 | |||
96 | #define ACPI_GET_ADDRESS(a) (a) | ||
97 | #define ACPI_STORE_ADDRESS(a,b) ((a)=(acpi_physical_address)(b)) | ||
98 | #define ACPI_VALID_ADDRESS(a) (a) | ||
99 | #endif | ||
100 | #endif | 78 | #endif |
101 | 79 | ||
102 | /* | 80 | /* |
@@ -134,15 +112,8 @@ | |||
134 | #define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void,(void *) NULL,(acpi_native_uint) i) | 112 | #define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void,(void *) NULL,(acpi_native_uint) i) |
135 | #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p,(void *) NULL) | 113 | #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p,(void *) NULL) |
136 | #define ACPI_OFFSET(d,f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f),(void *) NULL) | 114 | #define ACPI_OFFSET(d,f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f),(void *) NULL) |
137 | |||
138 | #if ACPI_MACHINE_WIDTH == 16 | ||
139 | #define ACPI_STORE_POINTER(d,s) ACPI_MOVE_32_TO_32(d,s) | ||
140 | #define ACPI_PHYSADDR_TO_PTR(i) (void *)(i) | ||
141 | #define ACPI_PTR_TO_PHYSADDR(i) (u32) ACPI_CAST_PTR (u8,(i)) | ||
142 | #else | ||
143 | #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) | 115 | #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) |
144 | #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) | 116 | #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) |
145 | #endif | ||
146 | 117 | ||
147 | #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED | 118 | #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED |
148 | #define ACPI_COMPARE_NAME(a,b) (*ACPI_CAST_PTR (u32,(a)) == *ACPI_CAST_PTR (u32,(b))) | 119 | #define ACPI_COMPARE_NAME(a,b) (*ACPI_CAST_PTR (u32,(a)) == *ACPI_CAST_PTR (u32,(b))) |
@@ -223,28 +194,6 @@ | |||
223 | 194 | ||
224 | /* The hardware supports unaligned transfers, just do the little-endian move */ | 195 | /* The hardware supports unaligned transfers, just do the little-endian move */ |
225 | 196 | ||
226 | #if ACPI_MACHINE_WIDTH == 16 | ||
227 | |||
228 | /* No 64-bit integers */ | ||
229 | /* 16-bit source, 16/32/64 destination */ | ||
230 | |||
231 | #define ACPI_MOVE_16_TO_16(d,s) *(u16 *)(void *)(d) = *(u16 *)(void *)(s) | ||
232 | #define ACPI_MOVE_16_TO_32(d,s) *(u32 *)(void *)(d) = *(u16 *)(void *)(s) | ||
233 | #define ACPI_MOVE_16_TO_64(d,s) ACPI_MOVE_16_TO_32(d,s) | ||
234 | |||
235 | /* 32-bit source, 16/32/64 destination */ | ||
236 | |||
237 | #define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ | ||
238 | #define ACPI_MOVE_32_TO_32(d,s) *(u32 *)(void *)(d) = *(u32 *)(void *)(s) | ||
239 | #define ACPI_MOVE_32_TO_64(d,s) ACPI_MOVE_32_TO_32(d,s) | ||
240 | |||
241 | /* 64-bit source, 16/32/64 destination */ | ||
242 | |||
243 | #define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ | ||
244 | #define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */ | ||
245 | #define ACPI_MOVE_64_TO_64(d,s) ACPI_MOVE_32_TO_32(d,s) | ||
246 | |||
247 | #else | ||
248 | /* 16-bit source, 16/32/64 destination */ | 197 | /* 16-bit source, 16/32/64 destination */ |
249 | 198 | ||
250 | #define ACPI_MOVE_16_TO_16(d,s) *(u16 *)(void *)(d) = *(u16 *)(void *)(s) | 199 | #define ACPI_MOVE_16_TO_16(d,s) *(u16 *)(void *)(d) = *(u16 *)(void *)(s) |
@@ -262,7 +211,6 @@ | |||
262 | #define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ | 211 | #define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ |
263 | #define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */ | 212 | #define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */ |
264 | #define ACPI_MOVE_64_TO_64(d,s) *(u64 *)(void *)(d) = *(u64 *)(void *)(s) | 213 | #define ACPI_MOVE_64_TO_64(d,s) *(u64 *)(void *)(d) = *(u64 *)(void *)(s) |
265 | #endif | ||
266 | 214 | ||
267 | #else | 215 | #else |
268 | /* | 216 | /* |
@@ -307,10 +255,7 @@ | |||
307 | 255 | ||
308 | /* Macros based on machine integer width */ | 256 | /* Macros based on machine integer width */ |
309 | 257 | ||
310 | #if ACPI_MACHINE_WIDTH == 16 | 258 | #if ACPI_MACHINE_WIDTH == 32 |
311 | #define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) | ||
312 | |||
313 | #elif ACPI_MACHINE_WIDTH == 32 | ||
314 | #define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_32_TO_16(d,s) | 259 | #define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_32_TO_16(d,s) |
315 | 260 | ||
316 | #elif ACPI_MACHINE_WIDTH == 64 | 261 | #elif ACPI_MACHINE_WIDTH == 64 |
@@ -695,16 +640,6 @@ | |||
695 | #define ACPI_DEBUGGER_EXEC(a) | 640 | #define ACPI_DEBUGGER_EXEC(a) |
696 | #endif | 641 | #endif |
697 | 642 | ||
698 | /* | ||
699 | * For 16-bit code, we want to shrink some things even though | ||
700 | * we are using ACPI_DEBUG_OUTPUT to get the debug output | ||
701 | */ | ||
702 | #if ACPI_MACHINE_WIDTH == 16 | ||
703 | #undef ACPI_DEBUG_ONLY_MEMBERS | ||
704 | #undef _VERBOSE_STRUCTURES | ||
705 | #define ACPI_DEBUG_ONLY_MEMBERS(a) | ||
706 | #endif | ||
707 | |||
708 | #ifdef ACPI_DEBUG_OUTPUT | 643 | #ifdef ACPI_DEBUG_OUTPUT |
709 | /* | 644 | /* |
710 | * 1) Set name to blanks | 645 | * 1) Set name to blanks |
diff --git a/include/acpi/acnames.h b/include/acpi/acnames.h index b67da3636899..34bfae8a05f3 100644 --- a/include/acpi/acnames.h +++ b/include/acpi/acnames.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acnamesp.h b/include/acpi/acnamesp.h index 83b52f9f899a..535b7e1c41bc 100644 --- a/include/acpi/acnamesp.h +++ b/include/acpi/acnamesp.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -65,9 +65,13 @@ | |||
65 | #define ACPI_NS_ERROR_IF_FOUND 0x08 | 65 | #define ACPI_NS_ERROR_IF_FOUND 0x08 |
66 | #define ACPI_NS_PREFIX_IS_SCOPE 0x10 | 66 | #define ACPI_NS_PREFIX_IS_SCOPE 0x10 |
67 | #define ACPI_NS_EXTERNAL 0x20 | 67 | #define ACPI_NS_EXTERNAL 0x20 |
68 | #define ACPI_NS_TEMPORARY 0x40 | ||
68 | 69 | ||
69 | #define ACPI_NS_WALK_UNLOCK TRUE | 70 | /* Flags for acpi_ns_walk_namespace */ |
70 | #define ACPI_NS_WALK_NO_UNLOCK FALSE | 71 | |
72 | #define ACPI_NS_WALK_NO_UNLOCK 0 | ||
73 | #define ACPI_NS_WALK_UNLOCK 0x01 | ||
74 | #define ACPI_NS_WALK_TEMP_NODES 0x02 | ||
71 | 75 | ||
72 | /* | 76 | /* |
73 | * nsinit - Namespace initialization | 77 | * nsinit - Namespace initialization |
@@ -82,7 +86,7 @@ acpi_status acpi_ns_initialize_devices(void); | |||
82 | acpi_status acpi_ns_load_namespace(void); | 86 | acpi_status acpi_ns_load_namespace(void); |
83 | 87 | ||
84 | acpi_status | 88 | acpi_status |
85 | acpi_ns_load_table(struct acpi_table_desc *table_desc, | 89 | acpi_ns_load_table(acpi_native_uint table_index, |
86 | struct acpi_namespace_node *node); | 90 | struct acpi_namespace_node *node); |
87 | 91 | ||
88 | /* | 92 | /* |
@@ -92,7 +96,7 @@ acpi_status | |||
92 | acpi_ns_walk_namespace(acpi_object_type type, | 96 | acpi_ns_walk_namespace(acpi_object_type type, |
93 | acpi_handle start_object, | 97 | acpi_handle start_object, |
94 | u32 max_depth, | 98 | u32 max_depth, |
95 | u8 unlock_before_callback, | 99 | u32 flags, |
96 | acpi_walk_callback user_function, | 100 | acpi_walk_callback user_function, |
97 | void *context, void **return_value); | 101 | void *context, void **return_value); |
98 | 102 | ||
@@ -106,11 +110,12 @@ struct acpi_namespace_node *acpi_ns_get_next_node(acpi_object_type type, | |||
106 | * nsparse - table parsing | 110 | * nsparse - table parsing |
107 | */ | 111 | */ |
108 | acpi_status | 112 | acpi_status |
109 | acpi_ns_parse_table(struct acpi_table_desc *table_desc, | 113 | acpi_ns_parse_table(acpi_native_uint table_index, |
110 | struct acpi_namespace_node *scope); | 114 | struct acpi_namespace_node *start_node); |
111 | 115 | ||
112 | acpi_status | 116 | acpi_status |
113 | acpi_ns_one_complete_parse(u8 pass_number, struct acpi_table_desc *table_desc); | 117 | acpi_ns_one_complete_parse(acpi_native_uint pass_number, |
118 | acpi_native_uint table_index); | ||
114 | 119 | ||
115 | /* | 120 | /* |
116 | * nsaccess - Top-level namespace access | 121 | * nsaccess - Top-level namespace access |
diff --git a/include/acpi/acobject.h b/include/acpi/acobject.h index 8fdee31119f3..04e9735a6742 100644 --- a/include/acpi/acobject.h +++ b/include/acpi/acobject.h | |||
@@ -6,7 +6,7 @@ | |||
6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
7 | 7 | ||
8 | /* | 8 | /* |
9 | * Copyright (C) 2000 - 2006, R. Byron Moore | 9 | * Copyright (C) 2000 - 2007, R. Byron Moore |
10 | * All rights reserved. | 10 | * All rights reserved. |
11 | * | 11 | * |
12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
@@ -52,7 +52,15 @@ | |||
52 | * to the interpreter, and to keep track of the various handlers such as | 52 | * to the interpreter, and to keep track of the various handlers such as |
53 | * address space handlers and notify handlers. The object is a constant | 53 | * address space handlers and notify handlers. The object is a constant |
54 | * size in order to allow it to be cached and reused. | 54 | * size in order to allow it to be cached and reused. |
55 | * | ||
56 | * Note: The object is optimized to be aligned and will not work if it is | ||
57 | * byte-packed. | ||
55 | */ | 58 | */ |
59 | #if ACPI_MACHINE_WIDTH == 64 | ||
60 | #pragma pack(8) | ||
61 | #else | ||
62 | #pragma pack(4) | ||
63 | #endif | ||
56 | 64 | ||
57 | /******************************************************************************* | 65 | /******************************************************************************* |
58 | * | 66 | * |
@@ -101,7 +109,8 @@ struct acpi_object_common { | |||
101 | ACPI_OBJECT_COMMON_HEADER}; | 109 | ACPI_OBJECT_COMMON_HEADER}; |
102 | 110 | ||
103 | struct acpi_object_integer { | 111 | struct acpi_object_integer { |
104 | ACPI_OBJECT_COMMON_HEADER acpi_integer value; | 112 | ACPI_OBJECT_COMMON_HEADER u8 fill[3]; /* Prevent warning on some compilers */ |
113 | acpi_integer value; | ||
105 | }; | 114 | }; |
106 | 115 | ||
107 | /* | 116 | /* |
@@ -203,7 +212,9 @@ struct acpi_object_power_resource { | |||
203 | }; | 212 | }; |
204 | 213 | ||
205 | struct acpi_object_processor { | 214 | struct acpi_object_processor { |
206 | ACPI_OBJECT_COMMON_HEADER u8 proc_id; | 215 | ACPI_OBJECT_COMMON_HEADER |
216 | /* The next two fields take advantage of the 3-byte space before NOTIFY_INFO */ | ||
217 | u8 proc_id; | ||
207 | u8 length; | 218 | u8 length; |
208 | ACPI_COMMON_NOTIFY_INFO acpi_io_address address; | 219 | ACPI_COMMON_NOTIFY_INFO acpi_io_address address; |
209 | }; | 220 | }; |
@@ -406,4 +417,6 @@ union acpi_descriptor { | |||
406 | union acpi_parse_object op; | 417 | union acpi_parse_object op; |
407 | }; | 418 | }; |
408 | 419 | ||
420 | #pragma pack() | ||
421 | |||
409 | #endif /* _ACOBJECT_H */ | 422 | #endif /* _ACOBJECT_H */ |
diff --git a/include/acpi/acopcode.h b/include/acpi/acopcode.h index 7659a46bc432..e6f76a280a94 100644 --- a/include/acpi/acopcode.h +++ b/include/acpi/acopcode.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -257,7 +257,7 @@ | |||
257 | #define ARGI_LLESSEQUAL_OP ARGI_INVALID_OPCODE | 257 | #define ARGI_LLESSEQUAL_OP ARGI_INVALID_OPCODE |
258 | #define ARGI_LNOT_OP ARGI_LIST1 (ARGI_INTEGER) | 258 | #define ARGI_LNOT_OP ARGI_LIST1 (ARGI_INTEGER) |
259 | #define ARGI_LNOTEQUAL_OP ARGI_INVALID_OPCODE | 259 | #define ARGI_LNOTEQUAL_OP ARGI_INVALID_OPCODE |
260 | #define ARGI_LOAD_OP ARGI_LIST2 (ARGI_REGION_OR_FIELD,ARGI_TARGETREF) | 260 | #define ARGI_LOAD_OP ARGI_LIST2 (ARGI_REGION_OR_BUFFER,ARGI_TARGETREF) |
261 | #define ARGI_LOAD_TABLE_OP ARGI_LIST6 (ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_ANYTYPE) | 261 | #define ARGI_LOAD_TABLE_OP ARGI_LIST6 (ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_ANYTYPE) |
262 | #define ARGI_LOCAL0 ARG_NONE | 262 | #define ARGI_LOCAL0 ARG_NONE |
263 | #define ARGI_LOCAL1 ARG_NONE | 263 | #define ARGI_LOCAL1 ARG_NONE |
diff --git a/include/acpi/acoutput.h b/include/acpi/acoutput.h index 8d5039d0b430..7812267b577f 100644 --- a/include/acpi/acoutput.h +++ b/include/acpi/acoutput.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acparser.h b/include/acpi/acparser.h index 9d49d3c41cd9..85c358e21014 100644 --- a/include/acpi/acparser.h +++ b/include/acpi/acparser.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acpi.h b/include/acpi/acpi.h index b9a39d1009bd..2e5f00d3ea0d 100644 --- a/include/acpi/acpi.h +++ b/include/acpi/acpi.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index fdd10953b2b6..0d9f984a60a1 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -59,7 +59,6 @@ acpi_evaluate_reference(acpi_handle handle, | |||
59 | 59 | ||
60 | #define ACPI_BUS_FILE_ROOT "acpi" | 60 | #define ACPI_BUS_FILE_ROOT "acpi" |
61 | extern struct proc_dir_entry *acpi_root_dir; | 61 | extern struct proc_dir_entry *acpi_root_dir; |
62 | extern struct fadt_descriptor acpi_fadt; | ||
63 | 62 | ||
64 | enum acpi_bus_removal_type { | 63 | enum acpi_bus_removal_type { |
65 | ACPI_BUS_REMOVAL_NORMAL = 0, | 64 | ACPI_BUS_REMOVAL_NORMAL = 0, |
@@ -92,13 +91,12 @@ typedef int (*acpi_op_remove) (struct acpi_device * device, int type); | |||
92 | typedef int (*acpi_op_lock) (struct acpi_device * device, int type); | 91 | typedef int (*acpi_op_lock) (struct acpi_device * device, int type); |
93 | typedef int (*acpi_op_start) (struct acpi_device * device); | 92 | typedef int (*acpi_op_start) (struct acpi_device * device); |
94 | typedef int (*acpi_op_stop) (struct acpi_device * device, int type); | 93 | typedef int (*acpi_op_stop) (struct acpi_device * device, int type); |
95 | typedef int (*acpi_op_suspend) (struct acpi_device * device, int state); | 94 | typedef int (*acpi_op_suspend) (struct acpi_device * device, pm_message_t state); |
96 | typedef int (*acpi_op_resume) (struct acpi_device * device, int state); | 95 | typedef int (*acpi_op_resume) (struct acpi_device * device); |
97 | typedef int (*acpi_op_scan) (struct acpi_device * device); | 96 | typedef int (*acpi_op_scan) (struct acpi_device * device); |
98 | typedef int (*acpi_op_bind) (struct acpi_device * device); | 97 | typedef int (*acpi_op_bind) (struct acpi_device * device); |
99 | typedef int (*acpi_op_unbind) (struct acpi_device * device); | 98 | typedef int (*acpi_op_unbind) (struct acpi_device * device); |
100 | typedef int (*acpi_op_match) (struct acpi_device * device, | 99 | typedef int (*acpi_op_shutdown) (struct acpi_device * device); |
101 | struct acpi_driver * driver); | ||
102 | 100 | ||
103 | struct acpi_bus_ops { | 101 | struct acpi_bus_ops { |
104 | u32 acpi_op_add:1; | 102 | u32 acpi_op_add:1; |
@@ -111,7 +109,7 @@ struct acpi_bus_ops { | |||
111 | u32 acpi_op_scan:1; | 109 | u32 acpi_op_scan:1; |
112 | u32 acpi_op_bind:1; | 110 | u32 acpi_op_bind:1; |
113 | u32 acpi_op_unbind:1; | 111 | u32 acpi_op_unbind:1; |
114 | u32 acpi_op_match:1; | 112 | u32 acpi_op_shutdown:1; |
115 | u32 reserved:21; | 113 | u32 reserved:21; |
116 | }; | 114 | }; |
117 | 115 | ||
@@ -126,16 +124,16 @@ struct acpi_device_ops { | |||
126 | acpi_op_scan scan; | 124 | acpi_op_scan scan; |
127 | acpi_op_bind bind; | 125 | acpi_op_bind bind; |
128 | acpi_op_unbind unbind; | 126 | acpi_op_unbind unbind; |
129 | acpi_op_match match; | 127 | acpi_op_shutdown shutdown; |
130 | }; | 128 | }; |
131 | 129 | ||
132 | struct acpi_driver { | 130 | struct acpi_driver { |
133 | struct list_head node; | ||
134 | char name[80]; | 131 | char name[80]; |
135 | char class[80]; | 132 | char class[80]; |
136 | atomic_t references; | ||
137 | char *ids; /* Supported Hardware IDs */ | 133 | char *ids; /* Supported Hardware IDs */ |
138 | struct acpi_device_ops ops; | 134 | struct acpi_device_ops ops; |
135 | struct device_driver drv; | ||
136 | struct module *owner; | ||
139 | }; | 137 | }; |
140 | 138 | ||
141 | /* | 139 | /* |
@@ -185,7 +183,7 @@ struct acpi_device_dir { | |||
185 | 183 | ||
186 | typedef char acpi_bus_id[5]; | 184 | typedef char acpi_bus_id[5]; |
187 | typedef unsigned long acpi_bus_address; | 185 | typedef unsigned long acpi_bus_address; |
188 | typedef char acpi_hardware_id[9]; | 186 | typedef char acpi_hardware_id[15]; |
189 | typedef char acpi_unique_id[9]; | 187 | typedef char acpi_unique_id[9]; |
190 | typedef char acpi_device_name[40]; | 188 | typedef char acpi_device_name[40]; |
191 | typedef char acpi_device_class[20]; | 189 | typedef char acpi_device_class[20]; |
@@ -296,11 +294,14 @@ struct acpi_device { | |||
296 | struct acpi_device_ops ops; | 294 | struct acpi_device_ops ops; |
297 | struct acpi_driver *driver; | 295 | struct acpi_driver *driver; |
298 | void *driver_data; | 296 | void *driver_data; |
299 | struct kobject kobj; | ||
300 | struct device dev; | 297 | struct device dev; |
298 | struct acpi_bus_ops bus_ops; /* workaround for different code path for hotplug */ | ||
299 | enum acpi_bus_removal_type removal_type; /* indicate for different removal type */ | ||
301 | }; | 300 | }; |
302 | 301 | ||
303 | #define acpi_driver_data(d) ((d)->driver_data) | 302 | #define acpi_driver_data(d) ((d)->driver_data) |
303 | #define to_acpi_device(d) container_of(d, struct acpi_device, dev) | ||
304 | #define to_acpi_driver(d) container_of(d, struct acpi_driver, drv) | ||
304 | 305 | ||
305 | /* | 306 | /* |
306 | * Events | 307 | * Events |
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h index 6a5bdcefec64..4dc8a5043ef0 100644 --- a/include/acpi/acpi_drivers.h +++ b/include/acpi/acpi_drivers.h | |||
@@ -36,13 +36,14 @@ | |||
36 | 36 | ||
37 | /* _HID definitions */ | 37 | /* _HID definitions */ |
38 | 38 | ||
39 | #define ACPI_POWER_HID "ACPI_PWR" | 39 | #define ACPI_POWER_HID "power_resource" |
40 | #define ACPI_PROCESSOR_HID "ACPI_CPU" | 40 | #define ACPI_PROCESSOR_HID "ACPI0007" |
41 | #define ACPI_SYSTEM_HID "ACPI_SYS" | 41 | #define ACPI_SYSTEM_HID "acpi_system" |
42 | #define ACPI_THERMAL_HID "ACPI_THM" | 42 | #define ACPI_THERMAL_HID "thermal" |
43 | #define ACPI_BUTTON_HID_POWERF "ACPI_FPB" | 43 | #define ACPI_BUTTON_HID_POWERF "button_power" |
44 | #define ACPI_BUTTON_HID_SLEEPF "ACPI_FSB" | 44 | #define ACPI_BUTTON_HID_SLEEPF "button_sleep" |
45 | 45 | #define ACPI_VIDEO_HID "video" | |
46 | #define ACPI_BAY_HID "bay" | ||
46 | /* -------------------------------------------------------------------------- | 47 | /* -------------------------------------------------------------------------- |
47 | PCI | 48 | PCI |
48 | -------------------------------------------------------------------------- */ | 49 | -------------------------------------------------------------------------- */ |
diff --git a/include/acpi/acpiosxf.h b/include/acpi/acpiosxf.h index 0cd63bce0ae4..781394b9efe0 100644 --- a/include/acpi/acpiosxf.h +++ b/include/acpi/acpiosxf.h | |||
@@ -8,7 +8,7 @@ | |||
8 | *****************************************************************************/ | 8 | *****************************************************************************/ |
9 | 9 | ||
10 | /* | 10 | /* |
11 | * Copyright (C) 2000 - 2006, R. Byron Moore | 11 | * Copyright (C) 2000 - 2007, R. Byron Moore |
12 | * All rights reserved. | 12 | * All rights reserved. |
13 | * | 13 | * |
14 | * Redistribution and use in source and binary forms, with or without | 14 | * Redistribution and use in source and binary forms, with or without |
@@ -85,7 +85,7 @@ acpi_status acpi_os_terminate(void); | |||
85 | /* | 85 | /* |
86 | * ACPI Table interfaces | 86 | * ACPI Table interfaces |
87 | */ | 87 | */ |
88 | acpi_status acpi_os_get_root_pointer(u32 flags, struct acpi_pointer *address); | 88 | acpi_physical_address acpi_os_get_root_pointer(void); |
89 | 89 | ||
90 | acpi_status | 90 | acpi_status |
91 | acpi_os_predefined_override(const struct acpi_predefined_names *init_val, | 91 | acpi_os_predefined_override(const struct acpi_predefined_names *init_val, |
@@ -143,9 +143,7 @@ void acpi_os_release_mutex(acpi_mutex handle); | |||
143 | */ | 143 | */ |
144 | void *acpi_os_allocate(acpi_size size); | 144 | void *acpi_os_allocate(acpi_size size); |
145 | 145 | ||
146 | acpi_status | 146 | void __iomem *acpi_os_map_memory(acpi_physical_address where, acpi_native_uint length); |
147 | acpi_os_map_memory(acpi_physical_address physical_address, | ||
148 | acpi_size size, void __iomem ** logical_address); | ||
149 | 147 | ||
150 | void acpi_os_unmap_memory(void __iomem * logical_address, acpi_size size); | 148 | void acpi_os_unmap_memory(void __iomem * logical_address, acpi_size size); |
151 | 149 | ||
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 81458767a90e..e08f7df85a4f 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
@@ -6,7 +6,7 @@ | |||
6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
7 | 7 | ||
8 | /* | 8 | /* |
9 | * Copyright (C) 2000 - 2006, R. Byron Moore | 9 | * Copyright (C) 2000 - 2007, R. Byron Moore |
10 | * All rights reserved. | 10 | * All rights reserved. |
11 | * | 11 | * |
12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
@@ -51,6 +51,10 @@ | |||
51 | /* | 51 | /* |
52 | * Global interfaces | 52 | * Global interfaces |
53 | */ | 53 | */ |
54 | acpi_status | ||
55 | acpi_initialize_tables(struct acpi_table_desc *initial_storage, | ||
56 | u32 initial_table_count, u8 allow_resize); | ||
57 | |||
54 | acpi_status acpi_initialize_subsystem(void); | 58 | acpi_status acpi_initialize_subsystem(void); |
55 | 59 | ||
56 | acpi_status acpi_enable_subsystem(u32 flags); | 60 | acpi_status acpi_enable_subsystem(u32 flags); |
@@ -92,30 +96,28 @@ void acpi_free(void *address); | |||
92 | /* | 96 | /* |
93 | * ACPI table manipulation interfaces | 97 | * ACPI table manipulation interfaces |
94 | */ | 98 | */ |
95 | acpi_status | 99 | acpi_status acpi_reallocate_root_table(void); |
96 | acpi_find_root_pointer(u32 flags, struct acpi_pointer *rsdp_address); | 100 | |
101 | acpi_status acpi_find_root_pointer(acpi_native_uint * rsdp_address); | ||
97 | 102 | ||
98 | acpi_status acpi_load_tables(void); | 103 | acpi_status acpi_load_tables(void); |
99 | 104 | ||
100 | acpi_status acpi_load_table(struct acpi_table_header *table_ptr); | 105 | acpi_status acpi_load_table(struct acpi_table_header *table_ptr); |
101 | 106 | ||
102 | acpi_status acpi_unload_table_id(acpi_table_type table_type, acpi_owner_id id); | 107 | acpi_status acpi_unload_table_id(acpi_owner_id id); |
103 | 108 | ||
104 | #ifdef ACPI_FUTURE_USAGE | ||
105 | acpi_status acpi_unload_table(acpi_table_type table_type); | ||
106 | acpi_status | 109 | acpi_status |
107 | acpi_get_table_header(acpi_table_type table_type, | 110 | acpi_get_table_header(acpi_string signature, |
108 | u32 instance, struct acpi_table_header *out_table_header); | 111 | acpi_native_uint instance, |
109 | #endif /* ACPI_FUTURE_USAGE */ | 112 | struct acpi_table_header *out_table_header); |
110 | 113 | ||
111 | acpi_status | 114 | acpi_status |
112 | acpi_get_table(acpi_table_type table_type, | 115 | acpi_get_table(acpi_string signature, |
113 | u32 instance, struct acpi_buffer *ret_buffer); | 116 | acpi_native_uint instance, struct acpi_table_header **out_table); |
114 | 117 | ||
115 | acpi_status | 118 | acpi_status |
116 | acpi_get_firmware_table(acpi_string signature, | 119 | acpi_get_table_by_index(acpi_native_uint table_index, |
117 | u32 instance, | 120 | struct acpi_table_header **out_table); |
118 | u32 flags, struct acpi_table_header **table_pointer); | ||
119 | 121 | ||
120 | /* | 122 | /* |
121 | * Namespace and name interfaces | 123 | * Namespace and name interfaces |
@@ -310,9 +312,9 @@ acpi_resource_to_address64(struct acpi_resource *resource, | |||
310 | /* | 312 | /* |
311 | * Hardware (ACPI device) interfaces | 313 | * Hardware (ACPI device) interfaces |
312 | */ | 314 | */ |
313 | acpi_status acpi_get_register(u32 register_id, u32 * return_value, u32 flags); | 315 | acpi_status acpi_get_register(u32 register_id, u32 * return_value); |
314 | 316 | ||
315 | acpi_status acpi_set_register(u32 register_id, u32 value, u32 flags); | 317 | acpi_status acpi_set_register(u32 register_id, u32 value); |
316 | 318 | ||
317 | acpi_status | 319 | acpi_status |
318 | acpi_set_firmware_waking_vector(acpi_physical_address physical_address); | 320 | acpi_set_firmware_waking_vector(acpi_physical_address physical_address); |
diff --git a/include/acpi/acresrc.h b/include/acpi/acresrc.h index 80a3b33571b4..9486ab266a5e 100644 --- a/include/acpi/acresrc.h +++ b/include/acpi/acresrc.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acstruct.h b/include/acpi/acstruct.h index 5e8095f0f78f..aeb4498e5e06 100644 --- a/include/acpi/acstruct.h +++ b/include/acpi/acstruct.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -139,7 +139,8 @@ struct acpi_init_walk_info { | |||
139 | u16 buffer_init; | 139 | u16 buffer_init; |
140 | u16 package_init; | 140 | u16 package_init; |
141 | u16 object_count; | 141 | u16 object_count; |
142 | struct acpi_table_desc *table_desc; | 142 | acpi_owner_id owner_id; |
143 | acpi_native_uint table_index; | ||
143 | }; | 144 | }; |
144 | 145 | ||
145 | struct acpi_get_devices_info { | 146 | struct acpi_get_devices_info { |
diff --git a/include/acpi/actables.h b/include/acpi/actables.h index 4dbaf02fe526..2b9f46f9da4d 100644 --- a/include/acpi/actables.h +++ b/include/acpi/actables.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -44,105 +44,75 @@ | |||
44 | #ifndef __ACTABLES_H__ | 44 | #ifndef __ACTABLES_H__ |
45 | #define __ACTABLES_H__ | 45 | #define __ACTABLES_H__ |
46 | 46 | ||
47 | /* Used in acpi_tb_map_acpi_table for size parameter if table header is to be used */ | 47 | acpi_status acpi_allocate_root_table(u32 initial_table_count); |
48 | |||
49 | #define SIZE_IN_HEADER 0 | ||
50 | 48 | ||
51 | /* | 49 | /* |
52 | * tbconvrt - Table conversion routines | 50 | * tbfadt - FADT parse/convert/validate |
53 | */ | 51 | */ |
54 | acpi_status acpi_tb_convert_to_xsdt(struct acpi_table_desc *table_info); | 52 | void acpi_tb_parse_fadt(acpi_native_uint table_index, u8 flags); |
55 | |||
56 | acpi_status acpi_tb_convert_table_fadt(void); | ||
57 | 53 | ||
58 | acpi_status acpi_tb_build_common_facs(struct acpi_table_desc *table_info); | 54 | void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length); |
59 | |||
60 | u32 | ||
61 | acpi_tb_get_table_count(struct rsdp_descriptor *RSDP, | ||
62 | struct acpi_table_header *RSDT); | ||
63 | 55 | ||
64 | /* | 56 | /* |
65 | * tbget - Table "get" routines | 57 | * tbfind - find ACPI table |
66 | */ | 58 | */ |
67 | acpi_status | 59 | acpi_status |
68 | acpi_tb_get_table(struct acpi_pointer *address, | 60 | acpi_tb_find_table(char *signature, |
69 | struct acpi_table_desc *table_info); | 61 | char *oem_id, |
70 | 62 | char *oem_table_id, acpi_native_uint * table_index); | |
71 | acpi_status | ||
72 | acpi_tb_get_table_header(struct acpi_pointer *address, | ||
73 | struct acpi_table_header *return_header); | ||
74 | |||
75 | acpi_status | ||
76 | acpi_tb_get_table_body(struct acpi_pointer *address, | ||
77 | struct acpi_table_header *header, | ||
78 | struct acpi_table_desc *table_info); | ||
79 | |||
80 | acpi_status | ||
81 | acpi_tb_get_table_ptr(acpi_table_type table_type, | ||
82 | u32 instance, struct acpi_table_header **table_ptr_loc); | ||
83 | |||
84 | acpi_status acpi_tb_verify_rsdp(struct acpi_pointer *address); | ||
85 | |||
86 | void acpi_tb_get_rsdt_address(struct acpi_pointer *out_address); | ||
87 | |||
88 | acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr); | ||
89 | 63 | ||
90 | /* | 64 | /* |
91 | * tbgetall - get multiple required tables | 65 | * tbinstal - Table removal and deletion |
92 | */ | 66 | */ |
93 | acpi_status acpi_tb_get_required_tables(void); | 67 | acpi_status acpi_tb_resize_root_table_list(void); |
94 | 68 | ||
95 | /* | 69 | acpi_status acpi_tb_verify_table(struct acpi_table_desc *table_desc); |
96 | * tbinstall - Table installation | ||
97 | */ | ||
98 | acpi_status acpi_tb_install_table(struct acpi_table_desc *table_info); | ||
99 | 70 | ||
100 | acpi_status | 71 | acpi_status |
101 | acpi_tb_recognize_table(struct acpi_table_desc *table_info, u8 search_type); | 72 | acpi_tb_add_table(struct acpi_table_desc *table_desc, |
73 | acpi_native_uint * table_index); | ||
102 | 74 | ||
103 | acpi_status | 75 | acpi_status |
104 | acpi_tb_init_table_descriptor(acpi_table_type table_type, | 76 | acpi_tb_store_table(acpi_physical_address address, |
105 | struct acpi_table_desc *table_info); | 77 | struct acpi_table_header *table, |
78 | u32 length, u8 flags, acpi_native_uint * table_index); | ||
106 | 79 | ||
107 | /* | 80 | void acpi_tb_delete_table(struct acpi_table_desc *table_desc); |
108 | * tbremove - Table removal and deletion | ||
109 | */ | ||
110 | void acpi_tb_delete_all_tables(void); | ||
111 | 81 | ||
112 | void acpi_tb_delete_tables_by_type(acpi_table_type type); | 82 | void acpi_tb_terminate(void); |
113 | 83 | ||
114 | void acpi_tb_delete_single_table(struct acpi_table_desc *table_desc); | 84 | void acpi_tb_delete_namespace_by_owner(acpi_native_uint table_index); |
115 | 85 | ||
116 | struct acpi_table_desc *acpi_tb_uninstall_table(struct acpi_table_desc | 86 | acpi_status acpi_tb_allocate_owner_id(acpi_native_uint table_index); |
117 | *table_desc); | 87 | |
88 | acpi_status acpi_tb_release_owner_id(acpi_native_uint table_index); | ||
118 | 89 | ||
119 | /* | ||
120 | * tbxfroot - RSDP, RSDT utilities | ||
121 | */ | ||
122 | acpi_status | 90 | acpi_status |
123 | acpi_tb_find_table(char *signature, | 91 | acpi_tb_get_owner_id(acpi_native_uint table_index, acpi_owner_id * owner_id); |
124 | char *oem_id, | ||
125 | char *oem_table_id, struct acpi_table_header **table_ptr); | ||
126 | 92 | ||
127 | acpi_status acpi_tb_get_table_rsdt(void); | 93 | u8 acpi_tb_is_table_loaded(acpi_native_uint table_index); |
128 | 94 | ||
129 | acpi_status acpi_tb_validate_rsdp(struct rsdp_descriptor *rsdp); | 95 | void acpi_tb_set_table_loaded_flag(acpi_native_uint table_index, u8 is_loaded); |
130 | 96 | ||
131 | /* | 97 | /* |
132 | * tbutils - common table utilities | 98 | * tbutils - table manager utilities |
133 | */ | 99 | */ |
134 | acpi_status acpi_tb_is_table_installed(struct acpi_table_desc *new_table_desc); | 100 | u8 acpi_tb_tables_loaded(void); |
135 | 101 | ||
136 | acpi_status | 102 | void |
137 | acpi_tb_verify_table_checksum(struct acpi_table_header *table_header); | 103 | acpi_tb_print_table_header(acpi_physical_address address, |
104 | struct acpi_table_header *header); | ||
138 | 105 | ||
139 | u8 acpi_tb_sum_table(void *buffer, u32 length); | 106 | u8 acpi_tb_checksum(u8 * buffer, acpi_native_uint length); |
140 | 107 | ||
141 | u8 acpi_tb_generate_checksum(struct acpi_table_header *table); | 108 | acpi_status |
109 | acpi_tb_verify_checksum(struct acpi_table_header *table, u32 length); | ||
142 | 110 | ||
143 | void acpi_tb_set_checksum(struct acpi_table_header *table); | 111 | void |
112 | acpi_tb_install_table(acpi_physical_address address, | ||
113 | u8 flags, char *signature, acpi_native_uint table_index); | ||
144 | 114 | ||
145 | acpi_status | 115 | acpi_status |
146 | acpi_tb_validate_table_header(struct acpi_table_header *table_header); | 116 | acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags); |
147 | 117 | ||
148 | #endif /* __ACTABLES_H__ */ | 118 | #endif /* __ACTABLES_H__ */ |
diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h index b125ceed9cb7..09469e7db6a5 100644 --- a/include/acpi/actbl.h +++ b/include/acpi/actbl.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -48,15 +48,15 @@ | |||
48 | * Values for description table header signatures. Useful because they make | 48 | * Values for description table header signatures. Useful because they make |
49 | * it more difficult to inadvertently type in the wrong signature. | 49 | * it more difficult to inadvertently type in the wrong signature. |
50 | */ | 50 | */ |
51 | #define DSDT_SIG "DSDT" /* Differentiated System Description Table */ | 51 | #define ACPI_SIG_DSDT "DSDT" /* Differentiated System Description Table */ |
52 | #define FADT_SIG "FACP" /* Fixed ACPI Description Table */ | 52 | #define ACPI_SIG_FADT "FACP" /* Fixed ACPI Description Table */ |
53 | #define FACS_SIG "FACS" /* Firmware ACPI Control Structure */ | 53 | #define ACPI_SIG_FACS "FACS" /* Firmware ACPI Control Structure */ |
54 | #define PSDT_SIG "PSDT" /* Persistent System Description Table */ | 54 | #define ACPI_SIG_PSDT "PSDT" /* Persistent System Description Table */ |
55 | #define RSDP_SIG "RSD PTR " /* Root System Description Pointer */ | 55 | #define ACPI_SIG_RSDP "RSD PTR " /* Root System Description Pointer */ |
56 | #define RSDT_SIG "RSDT" /* Root System Description Table */ | 56 | #define ACPI_SIG_RSDT "RSDT" /* Root System Description Table */ |
57 | #define XSDT_SIG "XSDT" /* Extended System Description Table */ | 57 | #define ACPI_SIG_XSDT "XSDT" /* Extended System Description Table */ |
58 | #define SSDT_SIG "SSDT" /* Secondary System Description Table */ | 58 | #define ACPI_SIG_SSDT "SSDT" /* Secondary System Description Table */ |
59 | #define RSDP_NAME "RSDP" | 59 | #define ACPI_RSDP_NAME "RSDP" /* Short name for RSDP, not signature */ |
60 | 60 | ||
61 | /* | 61 | /* |
62 | * All tables and structures must be byte-packed to match the ACPI | 62 | * All tables and structures must be byte-packed to match the ACPI |
@@ -83,27 +83,29 @@ | |||
83 | * | 83 | * |
84 | ******************************************************************************/ | 84 | ******************************************************************************/ |
85 | 85 | ||
86 | #define ACPI_TABLE_HEADER_DEF \ | ||
87 | char signature[4]; /* ASCII table signature */\ | ||
88 | u32 length; /* Length of table in bytes, including this header */\ | ||
89 | u8 revision; /* ACPI Specification minor version # */\ | ||
90 | u8 checksum; /* To make sum of entire table == 0 */\ | ||
91 | char oem_id[6]; /* ASCII OEM identification */\ | ||
92 | char oem_table_id[8]; /* ASCII OEM table identification */\ | ||
93 | u32 oem_revision; /* OEM revision number */\ | ||
94 | char asl_compiler_id[4]; /* ASCII ASL compiler vendor ID */\ | ||
95 | u32 asl_compiler_revision; /* ASL compiler version */ | ||
96 | |||
97 | struct acpi_table_header { | 86 | struct acpi_table_header { |
98 | ACPI_TABLE_HEADER_DEF}; | 87 | char signature[ACPI_NAME_SIZE]; /* ASCII table signature */ |
88 | u32 length; /* Length of table in bytes, including this header */ | ||
89 | u8 revision; /* ACPI Specification minor version # */ | ||
90 | u8 checksum; /* To make sum of entire table == 0 */ | ||
91 | char oem_id[ACPI_OEM_ID_SIZE]; /* ASCII OEM identification */ | ||
92 | char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; /* ASCII OEM table identification */ | ||
93 | u32 oem_revision; /* OEM revision number */ | ||
94 | char asl_compiler_id[ACPI_NAME_SIZE]; /* ASCII ASL compiler vendor ID */ | ||
95 | u32 asl_compiler_revision; /* ASL compiler version */ | ||
96 | }; | ||
99 | 97 | ||
100 | /* | 98 | /* |
101 | * GAS - Generic Address Structure (ACPI 2.0+) | 99 | * GAS - Generic Address Structure (ACPI 2.0+) |
100 | * | ||
101 | * Note: Since this structure is used in the ACPI tables, it is byte aligned. | ||
102 | * If misalignment is not supported, access to the Address field must be | ||
103 | * performed with care. | ||
102 | */ | 104 | */ |
103 | struct acpi_generic_address { | 105 | struct acpi_generic_address { |
104 | u8 address_space_id; /* Address space where struct or register exists */ | 106 | u8 space_id; /* Address space where struct or register exists */ |
105 | u8 register_bit_width; /* Size in bits of given register */ | 107 | u8 bit_width; /* Size in bits of given register */ |
106 | u8 register_bit_offset; /* Bit offset within the register */ | 108 | u8 bit_offset; /* Bit offset within the register */ |
107 | u8 access_width; /* Minimum Access size (ACPI 3.0) */ | 109 | u8 access_width; /* Minimum Access size (ACPI 3.0) */ |
108 | u64 address; /* 64-bit address of struct or register */ | 110 | u64 address; /* 64-bit address of struct or register */ |
109 | }; | 111 | }; |
@@ -114,10 +116,10 @@ struct acpi_generic_address { | |||
114 | * | 116 | * |
115 | ******************************************************************************/ | 117 | ******************************************************************************/ |
116 | 118 | ||
117 | struct rsdp_descriptor { | 119 | struct acpi_table_rsdp { |
118 | char signature[8]; /* ACPI signature, contains "RSD PTR " */ | 120 | char signature[8]; /* ACPI signature, contains "RSD PTR " */ |
119 | u8 checksum; /* ACPI 1.0 checksum */ | 121 | u8 checksum; /* ACPI 1.0 checksum */ |
120 | char oem_id[6]; /* OEM identification */ | 122 | char oem_id[ACPI_OEM_ID_SIZE]; /* OEM identification */ |
121 | u8 revision; /* Must be (0) for ACPI 1.0 or (2) for ACPI 2.0+ */ | 123 | u8 revision; /* Must be (0) for ACPI 1.0 or (2) for ACPI 2.0+ */ |
122 | u32 rsdt_physical_address; /* 32-bit physical address of the RSDT */ | 124 | u32 rsdt_physical_address; /* 32-bit physical address of the RSDT */ |
123 | u32 length; /* Table length in bytes, including header (ACPI 2.0+) */ | 125 | u32 length; /* Table length in bytes, including header (ACPI 2.0+) */ |
@@ -134,12 +136,14 @@ struct rsdp_descriptor { | |||
134 | * | 136 | * |
135 | ******************************************************************************/ | 137 | ******************************************************************************/ |
136 | 138 | ||
137 | struct rsdt_descriptor { | 139 | struct acpi_table_rsdt { |
138 | ACPI_TABLE_HEADER_DEF u32 table_offset_entry[1]; /* Array of pointers to ACPI tables */ | 140 | struct acpi_table_header header; /* Common ACPI table header */ |
141 | u32 table_offset_entry[1]; /* Array of pointers to ACPI tables */ | ||
139 | }; | 142 | }; |
140 | 143 | ||
141 | struct xsdt_descriptor { | 144 | struct acpi_table_xsdt { |
142 | ACPI_TABLE_HEADER_DEF u64 table_offset_entry[1]; /* Array of pointers to ACPI tables */ | 145 | struct acpi_table_header header; /* Common ACPI table header */ |
146 | u64 table_offset_entry[1]; /* Array of pointers to ACPI tables */ | ||
143 | }; | 147 | }; |
144 | 148 | ||
145 | /******************************************************************************* | 149 | /******************************************************************************* |
@@ -148,36 +152,27 @@ struct xsdt_descriptor { | |||
148 | * | 152 | * |
149 | ******************************************************************************/ | 153 | ******************************************************************************/ |
150 | 154 | ||
151 | struct facs_descriptor { | 155 | struct acpi_table_facs { |
152 | char signature[4]; /* ASCII table signature */ | 156 | char signature[4]; /* ASCII table signature */ |
153 | u32 length; /* Length of structure, in bytes */ | 157 | u32 length; /* Length of structure, in bytes */ |
154 | u32 hardware_signature; /* Hardware configuration signature */ | 158 | u32 hardware_signature; /* Hardware configuration signature */ |
155 | u32 firmware_waking_vector; /* 32-bit physical address of the Firmware Waking Vector */ | 159 | u32 firmware_waking_vector; /* 32-bit physical address of the Firmware Waking Vector */ |
156 | u32 global_lock; /* Global Lock for shared hardware resources */ | 160 | u32 global_lock; /* Global Lock for shared hardware resources */ |
157 | 161 | u32 flags; | |
158 | /* Flags (32 bits) */ | ||
159 | |||
160 | u8 S4bios_f:1; /* 00: S4BIOS support is present */ | ||
161 | u8:7; /* 01-07: Reserved, must be zero */ | ||
162 | u8 reserved1[3]; /* 08-31: Reserved, must be zero */ | ||
163 | |||
164 | u64 xfirmware_waking_vector; /* 64-bit version of the Firmware Waking Vector (ACPI 2.0+) */ | 162 | u64 xfirmware_waking_vector; /* 64-bit version of the Firmware Waking Vector (ACPI 2.0+) */ |
165 | u8 version; /* Version of this table (ACPI 2.0+) */ | 163 | u8 version; /* Version of this table (ACPI 2.0+) */ |
166 | u8 reserved[31]; /* Reserved, must be zero */ | 164 | u8 reserved[31]; /* Reserved, must be zero */ |
167 | }; | 165 | }; |
168 | 166 | ||
167 | /* Flag macros */ | ||
168 | |||
169 | #define ACPI_FACS_S4_BIOS_PRESENT (1) /* 00: S4BIOS support is present */ | ||
170 | |||
171 | /* Global lock flags */ | ||
172 | |||
169 | #define ACPI_GLOCK_PENDING 0x01 /* 00: Pending global lock ownership */ | 173 | #define ACPI_GLOCK_PENDING 0x01 /* 00: Pending global lock ownership */ |
170 | #define ACPI_GLOCK_OWNED 0x02 /* 01: Global lock is owned */ | 174 | #define ACPI_GLOCK_OWNED 0x02 /* 01: Global lock is owned */ |
171 | 175 | ||
172 | /* | ||
173 | * Common FACS - This is a version-independent FACS structure used for internal use only | ||
174 | */ | ||
175 | struct acpi_common_facs { | ||
176 | u32 *global_lock; | ||
177 | u64 *firmware_waking_vector; | ||
178 | u8 vector_width; | ||
179 | }; | ||
180 | |||
181 | /******************************************************************************* | 176 | /******************************************************************************* |
182 | * | 177 | * |
183 | * FADT - Fixed ACPI Description Table (Signature "FACP") | 178 | * FADT - Fixed ACPI Description Table (Signature "FACP") |
@@ -186,121 +181,98 @@ struct acpi_common_facs { | |||
186 | 181 | ||
187 | /* Fields common to all versions of the FADT */ | 182 | /* Fields common to all versions of the FADT */ |
188 | 183 | ||
189 | #define ACPI_FADT_COMMON \ | 184 | struct acpi_table_fadt { |
190 | ACPI_TABLE_HEADER_DEF \ | 185 | struct acpi_table_header header; /* Common ACPI table header */ |
191 | u32 V1_firmware_ctrl; /* 32-bit physical address of FACS */ \ | 186 | u32 facs; /* 32-bit physical address of FACS */ |
192 | u32 V1_dsdt; /* 32-bit physical address of DSDT */ \ | 187 | u32 dsdt; /* 32-bit physical address of DSDT */ |
193 | u8 reserved1; /* System Interrupt Model isn't used in ACPI 2.0*/ \ | 188 | u8 model; /* System Interrupt Model (ACPI 1.0) - not used in ACPI 2.0+ */ |
194 | u8 prefer_PM_profile; /* Conveys preferred power management profile to OSPM. */ \ | 189 | u8 preferred_profile; /* Conveys preferred power management profile to OSPM. */ |
195 | u16 sci_int; /* System vector of SCI interrupt */ \ | 190 | u16 sci_interrupt; /* System vector of SCI interrupt */ |
196 | u32 smi_cmd; /* Port address of SMI command port */ \ | 191 | u32 smi_command; /* 32-bit Port address of SMI command port */ |
197 | u8 acpi_enable; /* Value to write to smi_cmd to enable ACPI */ \ | 192 | u8 acpi_enable; /* Value to write to smi_cmd to enable ACPI */ |
198 | u8 acpi_disable; /* Value to write to smi_cmd to disable ACPI */ \ | 193 | u8 acpi_disable; /* Value to write to smi_cmd to disable ACPI */ |
199 | u8 S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */ \ | 194 | u8 S4bios_request; /* Value to write to SMI CMD to enter S4BIOS state */ |
200 | u8 pstate_cnt; /* Processor performance state control*/ \ | 195 | u8 pstate_control; /* Processor performance state control */ |
201 | u32 V1_pm1a_evt_blk; /* Port address of Power Mgt 1a Event Reg Blk */ \ | 196 | u32 pm1a_event_block; /* 32-bit Port address of Power Mgt 1a Event Reg Blk */ |
202 | u32 V1_pm1b_evt_blk; /* Port address of Power Mgt 1b Event Reg Blk */ \ | 197 | u32 pm1b_event_block; /* 32-bit Port address of Power Mgt 1b Event Reg Blk */ |
203 | u32 V1_pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */ \ | 198 | u32 pm1a_control_block; /* 32-bit Port address of Power Mgt 1a Control Reg Blk */ |
204 | u32 V1_pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */ \ | 199 | u32 pm1b_control_block; /* 32-bit Port address of Power Mgt 1b Control Reg Blk */ |
205 | u32 V1_pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */ \ | 200 | u32 pm2_control_block; /* 32-bit Port address of Power Mgt 2 Control Reg Blk */ |
206 | u32 V1_pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */ \ | 201 | u32 pm_timer_block; /* 32-bit Port address of Power Mgt Timer Ctrl Reg Blk */ |
207 | u32 V1_gpe0_blk; /* Port addr of General Purpose acpi_event 0 Reg Blk */ \ | 202 | u32 gpe0_block; /* 32-bit Port address of General Purpose Event 0 Reg Blk */ |
208 | u32 V1_gpe1_blk; /* Port addr of General Purpose acpi_event 1 Reg Blk */ \ | 203 | u32 gpe1_block; /* 32-bit Port address of General Purpose Event 1 Reg Blk */ |
209 | u8 pm1_evt_len; /* Byte Length of ports at pm1_x_evt_blk */ \ | 204 | u8 pm1_event_length; /* Byte Length of ports at pm1x_event_block */ |
210 | u8 pm1_cnt_len; /* Byte Length of ports at pm1_x_cnt_blk */ \ | 205 | u8 pm1_control_length; /* Byte Length of ports at pm1x_control_block */ |
211 | u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */ \ | 206 | u8 pm2_control_length; /* Byte Length of ports at pm2_control_block */ |
212 | u8 pm_tm_len; /* Byte Length of ports at pm_tm_blk */ \ | 207 | u8 pm_timer_length; /* Byte Length of ports at pm_timer_block */ |
213 | u8 gpe0_blk_len; /* Byte Length of ports at gpe0_blk */ \ | 208 | u8 gpe0_block_length; /* Byte Length of ports at gpe0_block */ |
214 | u8 gpe1_blk_len; /* Byte Length of ports at gpe1_blk */ \ | 209 | u8 gpe1_block_length; /* Byte Length of ports at gpe1_block */ |
215 | u8 gpe1_base; /* Offset in gpe model where gpe1 events start */ \ | 210 | u8 gpe1_base; /* Offset in GPE number space where GPE1 events start */ |
216 | u8 cst_cnt; /* Support for the _CST object and C States change notification.*/ \ | 211 | u8 cst_control; /* Support for the _CST object and C States change notification */ |
217 | u16 plvl2_lat; /* Worst case HW latency to enter/exit C2 state */ \ | 212 | u16 C2latency; /* Worst case HW latency to enter/exit C2 state */ |
218 | u16 plvl3_lat; /* Worst case HW latency to enter/exit C3 state */ \ | 213 | u16 C3latency; /* Worst case HW latency to enter/exit C3 state */ |
219 | u16 flush_size; /* Processor's memory cache line width, in bytes */ \ | 214 | u16 flush_size; /* Processor's memory cache line width, in bytes */ |
220 | u16 flush_stride; /* Number of flush strides that need to be read */ \ | 215 | u16 flush_stride; /* Number of flush strides that need to be read */ |
221 | u8 duty_offset; /* Processor's duty cycle index in processor's P_CNT reg*/ \ | 216 | u8 duty_offset; /* Processor duty cycle index in processor's P_CNT reg */ |
222 | u8 duty_width; /* Processor's duty cycle value bit width in P_CNT register.*/ \ | 217 | u8 duty_width; /* Processor duty cycle value bit width in P_CNT register. */ |
223 | u8 day_alrm; /* Index to day-of-month alarm in RTC CMOS RAM */ \ | 218 | u8 day_alarm; /* Index to day-of-month alarm in RTC CMOS RAM */ |
224 | u8 mon_alrm; /* Index to month-of-year alarm in RTC CMOS RAM */ \ | 219 | u8 month_alarm; /* Index to month-of-year alarm in RTC CMOS RAM */ |
225 | u8 century; /* Index to century in RTC CMOS RAM */ \ | 220 | u8 century; /* Index to century in RTC CMOS RAM */ |
226 | u16 iapc_boot_arch; /* IA-PC Boot Architecture Flags. See Table 5-10 for description*/ \ | 221 | u16 boot_flags; /* IA-PC Boot Architecture Flags. See Table 5-10 for description */ |
227 | u8 reserved2; /* Reserved, must be zero */ | 222 | u8 reserved; /* Reserved, must be zero */ |
228 | 223 | u32 flags; /* Miscellaneous flag bits (see below for individual flags) */ | |
229 | /* | 224 | struct acpi_generic_address reset_register; /* 64-bit address of the Reset register */ |
230 | * ACPI 2.0+ FADT | ||
231 | */ | ||
232 | struct fadt_descriptor { | ||
233 | ACPI_FADT_COMMON | ||
234 | /* Flags (32 bits) */ | ||
235 | u8 wb_invd:1; /* 00: The wbinvd instruction works properly */ | ||
236 | u8 wb_invd_flush:1; /* 01: The wbinvd flushes but does not invalidate */ | ||
237 | u8 proc_c1:1; /* 02: All processors support C1 state */ | ||
238 | u8 plvl2_up:1; /* 03: C2 state works on MP system */ | ||
239 | u8 pwr_button:1; /* 04: Power button is handled as a generic feature */ | ||
240 | u8 sleep_button:1; /* 05: Sleep button is handled as a generic feature, or not present */ | ||
241 | u8 fixed_rTC:1; /* 06: RTC wakeup stat not in fixed register space */ | ||
242 | u8 rtcs4:1; /* 07: RTC wakeup stat not possible from S4 */ | ||
243 | u8 tmr_val_ext:1; /* 08: tmr_val is 32 bits 0=24-bits */ | ||
244 | u8 dock_cap:1; /* 09: Docking supported */ | ||
245 | u8 reset_reg_sup:1; /* 10: System reset via the FADT RESET_REG supported */ | ||
246 | u8 sealed_case:1; /* 11: No internal expansion capabilities and case is sealed */ | ||
247 | u8 headless:1; /* 12: No local video capabilities or local input devices */ | ||
248 | u8 cpu_sw_sleep:1; /* 13: Must execute native instruction after writing SLP_TYPx register */ | ||
249 | |||
250 | u8 pci_exp_wak:1; /* 14: System supports PCIEXP_WAKE (STS/EN) bits (ACPI 3.0) */ | ||
251 | u8 use_platform_clock:1; /* 15: OSPM should use platform-provided timer (ACPI 3.0) */ | ||
252 | u8 S4rtc_sts_valid:1; /* 16: Contents of RTC_STS valid after S4 wake (ACPI 3.0) */ | ||
253 | u8 remote_power_on_capable:1; /* 17: System is compatible with remote power on (ACPI 3.0) */ | ||
254 | u8 force_apic_cluster_model:1; /* 18: All local APICs must use cluster model (ACPI 3.0) */ | ||
255 | u8 force_apic_physical_destination_mode:1; /* 19: All local x_aPICs must use physical dest mode (ACPI 3.0) */ | ||
256 | u8:4; /* 20-23: Reserved, must be zero */ | ||
257 | u8 reserved3; /* 24-31: Reserved, must be zero */ | ||
258 | |||
259 | struct acpi_generic_address reset_register; /* Reset register address in GAS format */ | ||
260 | u8 reset_value; /* Value to write to the reset_register port to reset the system */ | 225 | u8 reset_value; /* Value to write to the reset_register port to reset the system */ |
261 | u8 reserved4[3]; /* These three bytes must be zero */ | 226 | u8 reserved4[3]; /* Reserved, must be zero */ |
262 | u64 xfirmware_ctrl; /* 64-bit physical address of FACS */ | 227 | u64 Xfacs; /* 64-bit physical address of FACS */ |
263 | u64 Xdsdt; /* 64-bit physical address of DSDT */ | 228 | u64 Xdsdt; /* 64-bit physical address of DSDT */ |
264 | struct acpi_generic_address xpm1a_evt_blk; /* Extended Power Mgt 1a acpi_event Reg Blk address */ | 229 | struct acpi_generic_address xpm1a_event_block; /* 64-bit Extended Power Mgt 1a Event Reg Blk address */ |
265 | struct acpi_generic_address xpm1b_evt_blk; /* Extended Power Mgt 1b acpi_event Reg Blk address */ | 230 | struct acpi_generic_address xpm1b_event_block; /* 64-bit Extended Power Mgt 1b Event Reg Blk address */ |
266 | struct acpi_generic_address xpm1a_cnt_blk; /* Extended Power Mgt 1a Control Reg Blk address */ | 231 | struct acpi_generic_address xpm1a_control_block; /* 64-bit Extended Power Mgt 1a Control Reg Blk address */ |
267 | struct acpi_generic_address xpm1b_cnt_blk; /* Extended Power Mgt 1b Control Reg Blk address */ | 232 | struct acpi_generic_address xpm1b_control_block; /* 64-bit Extended Power Mgt 1b Control Reg Blk address */ |
268 | struct acpi_generic_address xpm2_cnt_blk; /* Extended Power Mgt 2 Control Reg Blk address */ | 233 | struct acpi_generic_address xpm2_control_block; /* 64-bit Extended Power Mgt 2 Control Reg Blk address */ |
269 | struct acpi_generic_address xpm_tmr_blk; /* Extended Power Mgt Timer Ctrl Reg Blk address */ | 234 | struct acpi_generic_address xpm_timer_block; /* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */ |
270 | struct acpi_generic_address xgpe0_blk; /* Extended General Purpose acpi_event 0 Reg Blk address */ | 235 | struct acpi_generic_address xgpe0_block; /* 64-bit Extended General Purpose Event 0 Reg Blk address */ |
271 | struct acpi_generic_address xgpe1_blk; /* Extended General Purpose acpi_event 1 Reg Blk address */ | 236 | struct acpi_generic_address xgpe1_block; /* 64-bit Extended General Purpose Event 1 Reg Blk address */ |
272 | }; | 237 | }; |
273 | 238 | ||
274 | /* | 239 | /* FADT flags */ |
275 | * "Down-revved" ACPI 2.0 FADT descriptor | 240 | |
276 | * Defined here to allow compiler to generate the length of the struct | 241 | #define ACPI_FADT_WBINVD (1) /* 00: The wbinvd instruction works properly */ |
277 | */ | 242 | #define ACPI_FADT_WBINVD_FLUSH (1<<1) /* 01: The wbinvd flushes but does not invalidate */ |
278 | struct fadt_descriptor_rev2_minus { | 243 | #define ACPI_FADT_C1_SUPPORTED (1<<2) /* 02: All processors support C1 state */ |
279 | ACPI_FADT_COMMON u32 flags; | 244 | #define ACPI_FADT_C2_MP_SUPPORTED (1<<3) /* 03: C2 state works on MP system */ |
280 | struct acpi_generic_address reset_register; /* Reset register address in GAS format */ | 245 | #define ACPI_FADT_POWER_BUTTON (1<<4) /* 04: Power button is handled as a generic feature */ |
281 | u8 reset_value; /* Value to write to the reset_register port to reset the system. */ | 246 | #define ACPI_FADT_SLEEP_BUTTON (1<<5) /* 05: Sleep button is handled as a generic feature, or not present */ |
282 | u8 reserved7[3]; /* Reserved, must be zero */ | 247 | #define ACPI_FADT_FIXED_RTC (1<<6) /* 06: RTC wakeup stat not in fixed register space */ |
283 | }; | 248 | #define ACPI_FADT_S4_RTC_WAKE (1<<7) /* 07: RTC wakeup stat not possible from S4 */ |
249 | #define ACPI_FADT_32BIT_TIMER (1<<8) /* 08: tmr_val is 32 bits 0=24-bits */ | ||
250 | #define ACPI_FADT_DOCKING_SUPPORTED (1<<9) /* 09: Docking supported */ | ||
251 | #define ACPI_FADT_RESET_REGISTER (1<<10) /* 10: System reset via the FADT RESET_REG supported */ | ||
252 | #define ACPI_FADT_SEALED_CASE (1<<11) /* 11: No internal expansion capabilities and case is sealed */ | ||
253 | #define ACPI_FADT_HEADLESS (1<<12) /* 12: No local video capabilities or local input devices */ | ||
254 | #define ACPI_FADT_SLEEP_TYPE (1<<13) /* 13: Must execute native instruction after writing SLP_TYPx register */ | ||
255 | #define ACPI_FADT_PCI_EXPRESS_WAKE (1<<14) /* 14: System supports PCIEXP_WAKE (STS/EN) bits (ACPI 3.0) */ | ||
256 | #define ACPI_FADT_PLATFORM_CLOCK (1<<15) /* 15: OSPM should use platform-provided timer (ACPI 3.0) */ | ||
257 | #define ACPI_FADT_S4_RTC_VALID (1<<16) /* 16: Contents of RTC_STS valid after S4 wake (ACPI 3.0) */ | ||
258 | #define ACPI_FADT_REMOTE_POWER_ON (1<<17) /* 17: System is compatible with remote power on (ACPI 3.0) */ | ||
259 | #define ACPI_FADT_APIC_CLUSTER (1<<18) /* 18: All local APICs must use cluster model (ACPI 3.0) */ | ||
260 | #define ACPI_FADT_APIC_PHYSICAL (1<<19) /* 19: All local x_aPICs must use physical dest mode (ACPI 3.0) */ | ||
284 | 261 | ||
285 | /* | 262 | /* |
286 | * ACPI 1.0 FADT | 263 | * FADT Prefered Power Management Profiles |
287 | * Defined here to allow compiler to generate the length of the struct | ||
288 | */ | 264 | */ |
289 | struct fadt_descriptor_rev1 { | 265 | enum acpi_prefered_pm_profiles { |
290 | ACPI_FADT_COMMON u32 flags; | 266 | PM_UNSPECIFIED = 0, |
267 | PM_DESKTOP = 1, | ||
268 | PM_MOBILE = 2, | ||
269 | PM_WORKSTATION = 3, | ||
270 | PM_ENTERPRISE_SERVER = 4, | ||
271 | PM_SOHO_SERVER = 5, | ||
272 | PM_APPLIANCE_PC = 6 | ||
291 | }; | 273 | }; |
292 | 274 | ||
293 | /* FADT: Prefered Power Management Profiles */ | 275 | /* FADT Boot Arch Flags */ |
294 | |||
295 | #define PM_UNSPECIFIED 0 | ||
296 | #define PM_DESKTOP 1 | ||
297 | #define PM_MOBILE 2 | ||
298 | #define PM_WORKSTATION 3 | ||
299 | #define PM_ENTERPRISE_SERVER 4 | ||
300 | #define PM_SOHO_SERVER 5 | ||
301 | #define PM_APPLIANCE_PC 6 | ||
302 | |||
303 | /* FADT: Boot Arch Flags */ | ||
304 | 276 | ||
305 | #define BAF_LEGACY_DEVICES 0x0001 | 277 | #define BAF_LEGACY_DEVICES 0x0001 |
306 | #define BAF_8042_KEYBOARD_CONTROLLER 0x0002 | 278 | #define BAF_8042_KEYBOARD_CONTROLLER 0x0002 |
@@ -312,59 +284,12 @@ struct fadt_descriptor_rev1 { | |||
312 | 284 | ||
313 | #pragma pack() | 285 | #pragma pack() |
314 | 286 | ||
315 | /* | 287 | #define ACPI_FADT_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_fadt, f) |
316 | * This macro is temporary until the table bitfield flag definitions | ||
317 | * are removed and replaced by a Flags field. | ||
318 | */ | ||
319 | #define ACPI_FLAG_OFFSET(d,f,o) (u8) (ACPI_OFFSET (d,f) + \ | ||
320 | sizeof(((d *)0)->f) + o) | ||
321 | /* | ||
322 | * Get the remaining ACPI tables | ||
323 | */ | ||
324 | #include "actbl1.h" | ||
325 | 288 | ||
326 | /* | 289 | /* |
327 | * ACPI Table information. We save the table address, length, | 290 | * Get the remaining ACPI tables |
328 | * and type of memory allocation (mapped or allocated) for each | ||
329 | * table for 1) when we exit, and 2) if a new table is installed | ||
330 | */ | 291 | */ |
331 | #define ACPI_MEM_NOT_ALLOCATED 0 | ||
332 | #define ACPI_MEM_ALLOCATED 1 | ||
333 | #define ACPI_MEM_MAPPED 2 | ||
334 | |||
335 | /* Definitions for the Flags bitfield member of struct acpi_table_support */ | ||
336 | |||
337 | #define ACPI_TABLE_SINGLE 0x00 | ||
338 | #define ACPI_TABLE_MULTIPLE 0x01 | ||
339 | #define ACPI_TABLE_EXECUTABLE 0x02 | ||
340 | |||
341 | #define ACPI_TABLE_ROOT 0x00 | ||
342 | #define ACPI_TABLE_PRIMARY 0x10 | ||
343 | #define ACPI_TABLE_SECONDARY 0x20 | ||
344 | #define ACPI_TABLE_ALL 0x30 | ||
345 | #define ACPI_TABLE_TYPE_MASK 0x30 | ||
346 | |||
347 | /* Data about each known table type */ | ||
348 | |||
349 | struct acpi_table_support { | ||
350 | char *name; | ||
351 | char *signature; | ||
352 | void **global_ptr; | ||
353 | u8 sig_length; | ||
354 | u8 flags; | ||
355 | }; | ||
356 | |||
357 | extern u8 acpi_fadt_is_v1; /* is set to 1 if FADT is revision 1, | ||
358 | * needed for certain workarounds */ | ||
359 | /* Macros used to generate offsets to specific table fields */ | ||
360 | |||
361 | #define ACPI_FACS_OFFSET(f) (u8) ACPI_OFFSET (struct facs_descriptor,f) | ||
362 | #define ACPI_FADT_OFFSET(f) (u8) ACPI_OFFSET (struct fadt_descriptor, f) | ||
363 | #define ACPI_GAS_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_generic_address,f) | ||
364 | #define ACPI_HDR_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_header,f) | ||
365 | #define ACPI_RSDP_OFFSET(f) (u8) ACPI_OFFSET (struct rsdp_descriptor,f) | ||
366 | 292 | ||
367 | #define ACPI_FADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct fadt_descriptor,f,o) | 293 | #include <acpi/actbl1.h> |
368 | #define ACPI_FACS_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct facs_descriptor,f,o) | ||
369 | 294 | ||
370 | #endif /* __ACTBL_H__ */ | 295 | #endif /* __ACTBL_H__ */ |
diff --git a/include/acpi/actbl1.h b/include/acpi/actbl1.h index 745a6445a4f9..4e5d3ca53a8e 100644 --- a/include/acpi/actbl1.h +++ b/include/acpi/actbl1.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -61,6 +61,7 @@ | |||
61 | #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ | 61 | #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ |
62 | #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ | 62 | #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ |
63 | #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ | 63 | #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ |
64 | #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ | ||
64 | #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ | 65 | #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ |
65 | #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ | 66 | #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ |
66 | #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ | 67 | #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ |
@@ -73,12 +74,6 @@ | |||
73 | #define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ | 74 | #define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ |
74 | #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ | 75 | #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ |
75 | 76 | ||
76 | /* Legacy names */ | ||
77 | |||
78 | #define APIC_SIG "APIC" /* Multiple APIC Description Table */ | ||
79 | #define BOOT_SIG "BOOT" /* Simple Boot Flag Table */ | ||
80 | #define SBST_SIG "SBST" /* Smart Battery Specification Table */ | ||
81 | |||
82 | /* | 77 | /* |
83 | * All tables must be byte-packed to match the ACPI specification, since | 78 | * All tables must be byte-packed to match the ACPI specification, since |
84 | * the tables are provided by the system BIOS. | 79 | * the tables are provided by the system BIOS. |
@@ -91,31 +86,43 @@ | |||
91 | * portable, so do not use any other bitfield types. | 86 | * portable, so do not use any other bitfield types. |
92 | */ | 87 | */ |
93 | 88 | ||
89 | /* Common Sub-table header (used in MADT, SRAT, etc.) */ | ||
90 | |||
91 | struct acpi_subtable_header { | ||
92 | u8 type; | ||
93 | u8 length; | ||
94 | }; | ||
95 | |||
94 | /******************************************************************************* | 96 | /******************************************************************************* |
95 | * | 97 | * |
96 | * ASF - Alert Standard Format table (Signature "ASF!") | 98 | * ASF - Alert Standard Format table (Signature "ASF!") |
97 | * | 99 | * |
100 | * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 | ||
101 | * | ||
98 | ******************************************************************************/ | 102 | ******************************************************************************/ |
99 | 103 | ||
100 | struct acpi_table_asf { | 104 | struct acpi_table_asf { |
101 | ACPI_TABLE_HEADER_DEF}; | 105 | struct acpi_table_header header; /* Common ACPI table header */ |
106 | }; | ||
102 | 107 | ||
103 | #define ACPI_ASF_HEADER_DEF \ | 108 | /* ASF subtable header */ |
104 | u8 type; \ | ||
105 | u8 reserved; \ | ||
106 | u16 length; | ||
107 | 109 | ||
108 | struct acpi_asf_header { | 110 | struct acpi_asf_header { |
109 | ACPI_ASF_HEADER_DEF}; | 111 | u8 type; |
112 | u8 reserved; | ||
113 | u16 length; | ||
114 | }; | ||
110 | 115 | ||
111 | /* Values for Type field */ | 116 | /* Values for Type field above */ |
112 | 117 | ||
113 | #define ASF_INFO 0 | 118 | enum acpi_asf_type { |
114 | #define ASF_ALERT 1 | 119 | ACPI_ASF_TYPE_INFO = 0, |
115 | #define ASF_CONTROL 2 | 120 | ACPI_ASF_TYPE_ALERT = 1, |
116 | #define ASF_BOOT 3 | 121 | ACPI_ASF_TYPE_CONTROL = 2, |
117 | #define ASF_ADDRESS 4 | 122 | ACPI_ASF_TYPE_BOOT = 3, |
118 | #define ASF_RESERVED 5 | 123 | ACPI_ASF_TYPE_ADDRESS = 4, |
124 | ACPI_ASF_TYPE_RESERVED = 5 | ||
125 | }; | ||
119 | 126 | ||
120 | /* | 127 | /* |
121 | * ASF subtables | 128 | * ASF subtables |
@@ -124,7 +131,8 @@ ACPI_ASF_HEADER_DEF}; | |||
124 | /* 0: ASF Information */ | 131 | /* 0: ASF Information */ |
125 | 132 | ||
126 | struct acpi_asf_info { | 133 | struct acpi_asf_info { |
127 | ACPI_ASF_HEADER_DEF u8 min_reset_value; | 134 | struct acpi_asf_header header; |
135 | u8 min_reset_value; | ||
128 | u8 min_poll_interval; | 136 | u8 min_poll_interval; |
129 | u16 system_id; | 137 | u16 system_id; |
130 | u32 mfg_id; | 138 | u32 mfg_id; |
@@ -135,26 +143,49 @@ struct acpi_asf_info { | |||
135 | /* 1: ASF Alerts */ | 143 | /* 1: ASF Alerts */ |
136 | 144 | ||
137 | struct acpi_asf_alert { | 145 | struct acpi_asf_alert { |
138 | ACPI_ASF_HEADER_DEF u8 assert_mask; | 146 | struct acpi_asf_header header; |
147 | u8 assert_mask; | ||
139 | u8 deassert_mask; | 148 | u8 deassert_mask; |
140 | u8 alerts; | 149 | u8 alerts; |
141 | u8 data_length; | 150 | u8 data_length; |
142 | u8 array[1]; | 151 | }; |
152 | |||
153 | struct acpi_asf_alert_data { | ||
154 | u8 address; | ||
155 | u8 command; | ||
156 | u8 mask; | ||
157 | u8 value; | ||
158 | u8 sensor_type; | ||
159 | u8 type; | ||
160 | u8 offset; | ||
161 | u8 source_type; | ||
162 | u8 severity; | ||
163 | u8 sensor_number; | ||
164 | u8 entity; | ||
165 | u8 instance; | ||
143 | }; | 166 | }; |
144 | 167 | ||
145 | /* 2: ASF Remote Control */ | 168 | /* 2: ASF Remote Control */ |
146 | 169 | ||
147 | struct acpi_asf_remote { | 170 | struct acpi_asf_remote { |
148 | ACPI_ASF_HEADER_DEF u8 controls; | 171 | struct acpi_asf_header header; |
172 | u8 controls; | ||
149 | u8 data_length; | 173 | u8 data_length; |
150 | u16 reserved2; | 174 | u16 reserved2; |
151 | u8 array[1]; | 175 | }; |
176 | |||
177 | struct acpi_asf_control_data { | ||
178 | u8 function; | ||
179 | u8 address; | ||
180 | u8 command; | ||
181 | u8 value; | ||
152 | }; | 182 | }; |
153 | 183 | ||
154 | /* 3: ASF RMCP Boot Options */ | 184 | /* 3: ASF RMCP Boot Options */ |
155 | 185 | ||
156 | struct acpi_asf_rmcp { | 186 | struct acpi_asf_rmcp { |
157 | ACPI_ASF_HEADER_DEF u8 capabilities[7]; | 187 | struct acpi_asf_header header; |
188 | u8 capabilities[7]; | ||
158 | u8 completion_code; | 189 | u8 completion_code; |
159 | u32 enterprise_id; | 190 | u32 enterprise_id; |
160 | u8 command; | 191 | u8 command; |
@@ -166,9 +197,9 @@ struct acpi_asf_rmcp { | |||
166 | /* 4: ASF Address */ | 197 | /* 4: ASF Address */ |
167 | 198 | ||
168 | struct acpi_asf_address { | 199 | struct acpi_asf_address { |
169 | ACPI_ASF_HEADER_DEF u8 eprom_address; | 200 | struct acpi_asf_header header; |
201 | u8 eprom_address; | ||
170 | u8 devices; | 202 | u8 devices; |
171 | u8 smbus_addresses[1]; | ||
172 | }; | 203 | }; |
173 | 204 | ||
174 | /******************************************************************************* | 205 | /******************************************************************************* |
@@ -178,7 +209,8 @@ struct acpi_asf_address { | |||
178 | ******************************************************************************/ | 209 | ******************************************************************************/ |
179 | 210 | ||
180 | struct acpi_table_boot { | 211 | struct acpi_table_boot { |
181 | ACPI_TABLE_HEADER_DEF u8 cmos_index; /* Index in CMOS RAM for the boot register */ | 212 | struct acpi_table_header header; /* Common ACPI table header */ |
213 | u8 cmos_index; /* Index in CMOS RAM for the boot register */ | ||
182 | u8 reserved[3]; | 214 | u8 reserved[3]; |
183 | }; | 215 | }; |
184 | 216 | ||
@@ -189,7 +221,8 @@ struct acpi_table_boot { | |||
189 | ******************************************************************************/ | 221 | ******************************************************************************/ |
190 | 222 | ||
191 | struct acpi_table_cpep { | 223 | struct acpi_table_cpep { |
192 | ACPI_TABLE_HEADER_DEF u64 reserved; | 224 | struct acpi_table_header header; /* Common ACPI table header */ |
225 | u64 reserved; | ||
193 | }; | 226 | }; |
194 | 227 | ||
195 | /* Subtable */ | 228 | /* Subtable */ |
@@ -197,9 +230,9 @@ struct acpi_table_cpep { | |||
197 | struct acpi_cpep_polling { | 230 | struct acpi_cpep_polling { |
198 | u8 type; | 231 | u8 type; |
199 | u8 length; | 232 | u8 length; |
200 | u8 processor_id; /* Processor ID */ | 233 | u8 id; /* Processor ID */ |
201 | u8 processor_eid; /* Processor EID */ | 234 | u8 eid; /* Processor EID */ |
202 | u32 polling_interval; /* Polling interval (msec) */ | 235 | u32 interval; /* Polling interval (msec) */ |
203 | }; | 236 | }; |
204 | 237 | ||
205 | /******************************************************************************* | 238 | /******************************************************************************* |
@@ -209,196 +242,281 @@ struct acpi_cpep_polling { | |||
209 | ******************************************************************************/ | 242 | ******************************************************************************/ |
210 | 243 | ||
211 | struct acpi_table_dbgp { | 244 | struct acpi_table_dbgp { |
212 | ACPI_TABLE_HEADER_DEF u8 interface_type; /* 0=full 16550, 1=subset of 16550 */ | 245 | struct acpi_table_header header; /* Common ACPI table header */ |
246 | u8 type; /* 0=full 16550, 1=subset of 16550 */ | ||
213 | u8 reserved[3]; | 247 | u8 reserved[3]; |
214 | struct acpi_generic_address debug_port; | 248 | struct acpi_generic_address debug_port; |
215 | }; | 249 | }; |
216 | 250 | ||
217 | /******************************************************************************* | 251 | /******************************************************************************* |
218 | * | 252 | * |
219 | * ECDT - Embedded Controller Boot Resources Table | 253 | * DMAR - DMA Remapping table |
220 | * | 254 | * |
221 | ******************************************************************************/ | 255 | ******************************************************************************/ |
222 | 256 | ||
223 | struct ec_boot_resources { | 257 | struct acpi_table_dmar { |
224 | ACPI_TABLE_HEADER_DEF struct acpi_generic_address ec_control; /* Address of EC command/status register */ | 258 | struct acpi_table_header header; /* Common ACPI table header */ |
225 | struct acpi_generic_address ec_data; /* Address of EC data register */ | 259 | u8 width; /* Host Address Width */ |
226 | u32 uid; /* Unique ID - must be same as the EC _UID method */ | 260 | u8 reserved[11]; |
227 | u8 gpe_bit; /* The GPE for the EC */ | 261 | }; |
228 | u8 ec_id[1]; /* Full namepath of the EC in the ACPI namespace */ | 262 | |
263 | /* DMAR subtable header */ | ||
264 | |||
265 | struct acpi_dmar_header { | ||
266 | u16 type; | ||
267 | u16 length; | ||
268 | u8 flags; | ||
269 | u8 reserved[3]; | ||
270 | }; | ||
271 | |||
272 | /* Values for subtable type in struct acpi_dmar_header */ | ||
273 | |||
274 | enum acpi_dmar_type { | ||
275 | ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, | ||
276 | ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, | ||
277 | ACPI_DMAR_TYPE_RESERVED = 2 /* 2 and greater are reserved */ | ||
278 | }; | ||
279 | |||
280 | struct acpi_dmar_device_scope { | ||
281 | u8 entry_type; | ||
282 | u8 length; | ||
283 | u8 segment; | ||
284 | u8 bus; | ||
285 | }; | ||
286 | |||
287 | /* Values for entry_type in struct acpi_dmar_device_scope */ | ||
288 | |||
289 | enum acpi_dmar_scope_type { | ||
290 | ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, | ||
291 | ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, | ||
292 | ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, | ||
293 | ACPI_DMAR_SCOPE_TYPE_RESERVED = 3 /* 3 and greater are reserved */ | ||
294 | }; | ||
295 | |||
296 | /* | ||
297 | * DMAR Sub-tables, correspond to Type in struct acpi_dmar_header | ||
298 | */ | ||
299 | |||
300 | /* 0: Hardware Unit Definition */ | ||
301 | |||
302 | struct acpi_dmar_hardware_unit { | ||
303 | struct acpi_dmar_header header; | ||
304 | u64 address; /* Register Base Address */ | ||
305 | }; | ||
306 | |||
307 | /* Flags */ | ||
308 | |||
309 | #define ACPI_DMAR_INCLUDE_ALL (1) | ||
310 | |||
311 | /* 1: Reserved Memory Defininition */ | ||
312 | |||
313 | struct acpi_dmar_reserved_memory { | ||
314 | struct acpi_dmar_header header; | ||
315 | u64 address; /* 4_k aligned base address */ | ||
316 | u64 end_address; /* 4_k aligned limit address */ | ||
229 | }; | 317 | }; |
230 | 318 | ||
319 | /* Flags */ | ||
320 | |||
321 | #define ACPI_DMAR_ALLOW_ALL (1) | ||
322 | |||
231 | /******************************************************************************* | 323 | /******************************************************************************* |
232 | * | 324 | * |
233 | * HPET - High Precision Event Timer table | 325 | * ECDT - Embedded Controller Boot Resources Table |
234 | * | 326 | * |
235 | ******************************************************************************/ | 327 | ******************************************************************************/ |
236 | 328 | ||
237 | struct acpi_hpet_table { | 329 | struct acpi_table_ecdt { |
238 | ACPI_TABLE_HEADER_DEF u32 hardware_id; /* Hardware ID of event timer block */ | 330 | struct acpi_table_header header; /* Common ACPI table header */ |
239 | struct acpi_generic_address base_address; /* Address of event timer block */ | 331 | struct acpi_generic_address control; /* Address of EC command/status register */ |
240 | u8 hpet_number; /* HPET sequence number */ | 332 | struct acpi_generic_address data; /* Address of EC data register */ |
241 | u16 clock_tick; /* Main counter min tick, periodic mode */ | 333 | u32 uid; /* Unique ID - must be same as the EC _UID method */ |
242 | u8 attributes; | 334 | u8 gpe; /* The GPE for the EC */ |
335 | u8 id[1]; /* Full namepath of the EC in the ACPI namespace */ | ||
243 | }; | 336 | }; |
244 | 337 | ||
245 | #if 0 /* HPET flags to be converted to macros */ | ||
246 | struct { /* Flags (8 bits) */ | ||
247 | u8 page_protect:1; /* 00: No page protection */ | ||
248 | u8 page_protect4:1; /* 01: 4_kB page protected */ | ||
249 | u8 page_protect64:1; /* 02: 64_kB page protected */ | ||
250 | u8:5; /* 03-07: Reserved, must be zero */ | ||
251 | } flags; | ||
252 | #endif | ||
253 | |||
254 | /******************************************************************************* | 338 | /******************************************************************************* |
255 | * | 339 | * |
256 | * MADT - Multiple APIC Description Table | 340 | * HPET - High Precision Event Timer table |
257 | * | 341 | * |
258 | ******************************************************************************/ | 342 | ******************************************************************************/ |
259 | 343 | ||
260 | struct multiple_apic_table { | 344 | struct acpi_table_hpet { |
261 | ACPI_TABLE_HEADER_DEF u32 local_apic_address; /* Physical address of local APIC */ | 345 | struct acpi_table_header header; /* Common ACPI table header */ |
262 | 346 | u32 id; /* Hardware ID of event timer block */ | |
263 | /* Flags (32 bits) */ | 347 | struct acpi_generic_address address; /* Address of event timer block */ |
264 | 348 | u8 sequence; /* HPET sequence number */ | |
265 | u8 PCATcompat:1; /* 00: System also has dual 8259s */ | 349 | u16 minimum_tick; /* Main counter min tick, periodic mode */ |
266 | u8:7; /* 01-07: Reserved, must be zero */ | 350 | u8 flags; |
267 | u8 reserved1[3]; /* 08-31: Reserved, must be zero */ | ||
268 | }; | 351 | }; |
269 | 352 | ||
270 | /* Values for MADT PCATCompat */ | 353 | /*! Flags */ |
271 | 354 | ||
272 | #define DUAL_PIC 0 | 355 | #define ACPI_HPET_PAGE_PROTECT (1) /* 00: No page protection */ |
273 | #define MULTIPLE_APIC 1 | 356 | #define ACPI_HPET_PAGE_PROTECT_4 (1<<1) /* 01: 4KB page protected */ |
357 | #define ACPI_HPET_PAGE_PROTECT_64 (1<<2) /* 02: 64KB page protected */ | ||
274 | 358 | ||
275 | /* Common MADT Sub-table header */ | 359 | /*! [End] no source code translation !*/ |
276 | 360 | ||
277 | #define APIC_HEADER_DEF \ | 361 | /******************************************************************************* |
278 | u8 type; \ | 362 | * |
279 | u8 length; | 363 | * MADT - Multiple APIC Description Table |
280 | 364 | * | |
281 | struct apic_header { | 365 | ******************************************************************************/ |
282 | APIC_HEADER_DEF}; | ||
283 | |||
284 | /* Values for Type in struct apic_header */ | ||
285 | 366 | ||
286 | #define APIC_PROCESSOR 0 | 367 | struct acpi_table_madt { |
287 | #define APIC_IO 1 | 368 | struct acpi_table_header header; /* Common ACPI table header */ |
288 | #define APIC_XRUPT_OVERRIDE 2 | 369 | u32 address; /* Physical address of local APIC */ |
289 | #define APIC_NMI 3 | 370 | u32 flags; |
290 | #define APIC_LOCAL_NMI 4 | 371 | }; |
291 | #define APIC_ADDRESS_OVERRIDE 5 | ||
292 | #define APIC_IO_SAPIC 6 | ||
293 | #define APIC_LOCAL_SAPIC 7 | ||
294 | #define APIC_XRUPT_SOURCE 8 | ||
295 | #define APIC_RESERVED 9 /* 9 and greater are reserved */ | ||
296 | 372 | ||
297 | /* Flag definitions for MADT sub-tables */ | 373 | /* Flags */ |
298 | 374 | ||
299 | #define ACPI_MADT_IFLAGS /* INTI flags (16 bits) */ \ | 375 | #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ |
300 | u8 polarity : 2; /* 00-01: Polarity of APIC I/O input signals */\ | ||
301 | u8 trigger_mode : 2; /* 02-03: Trigger mode of APIC input signals */\ | ||
302 | u8 : 4; /* 04-07: Reserved, must be zero */\ | ||
303 | u8 reserved1; /* 08-15: Reserved, must be zero */ | ||
304 | 376 | ||
305 | #define ACPI_MADT_LFLAGS /* Local Sapic flags (32 bits) */ \ | 377 | /* Values for PCATCompat flag */ |
306 | u8 processor_enabled: 1; /* 00: Processor is usable if set */\ | ||
307 | u8 : 7; /* 01-07: Reserved, must be zero */\ | ||
308 | u8 reserved2[3]; /* 08-31: Reserved, must be zero */ | ||
309 | 378 | ||
310 | /* Values for MPS INTI flags */ | 379 | #define ACPI_MADT_DUAL_PIC 0 |
380 | #define ACPI_MADT_MULTIPLE_APIC 1 | ||
311 | 381 | ||
312 | #define POLARITY_CONFORMS 0 | 382 | /* Values for subtable type in struct acpi_subtable_header */ |
313 | #define POLARITY_ACTIVE_HIGH 1 | ||
314 | #define POLARITY_RESERVED 2 | ||
315 | #define POLARITY_ACTIVE_LOW 3 | ||
316 | 383 | ||
317 | #define TRIGGER_CONFORMS 0 | 384 | enum acpi_madt_type { |
318 | #define TRIGGER_EDGE 1 | 385 | ACPI_MADT_TYPE_LOCAL_APIC = 0, |
319 | #define TRIGGER_RESERVED 2 | 386 | ACPI_MADT_TYPE_IO_APIC = 1, |
320 | #define TRIGGER_LEVEL 3 | 387 | ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, |
388 | ACPI_MADT_TYPE_NMI_SOURCE = 3, | ||
389 | ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, | ||
390 | ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, | ||
391 | ACPI_MADT_TYPE_IO_SAPIC = 6, | ||
392 | ACPI_MADT_TYPE_LOCAL_SAPIC = 7, | ||
393 | ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, | ||
394 | ACPI_MADT_TYPE_RESERVED = 9 /* 9 and greater are reserved */ | ||
395 | }; | ||
321 | 396 | ||
322 | /* | 397 | /* |
323 | * MADT Sub-tables, correspond to Type in struct apic_header | 398 | * MADT Sub-tables, correspond to Type in struct acpi_subtable_header |
324 | */ | 399 | */ |
325 | 400 | ||
326 | /* 0: processor APIC */ | 401 | /* 0: Processor Local APIC */ |
327 | 402 | ||
328 | struct madt_processor_apic { | 403 | struct acpi_madt_local_apic { |
329 | APIC_HEADER_DEF u8 processor_id; /* ACPI processor id */ | 404 | struct acpi_subtable_header header; |
330 | u8 local_apic_id; /* Processor's local APIC id */ | 405 | u8 processor_id; /* ACPI processor id */ |
331 | ACPI_MADT_LFLAGS}; | 406 | u8 id; /* Processor's local APIC id */ |
407 | u32 lapic_flags; | ||
408 | }; | ||
332 | 409 | ||
333 | /* 1: IO APIC */ | 410 | /* 1: IO APIC */ |
334 | 411 | ||
335 | struct madt_io_apic { | 412 | struct acpi_madt_io_apic { |
336 | APIC_HEADER_DEF u8 io_apic_id; /* I/O APIC ID */ | 413 | struct acpi_subtable_header header; |
414 | u8 id; /* I/O APIC ID */ | ||
337 | u8 reserved; /* Reserved - must be zero */ | 415 | u8 reserved; /* Reserved - must be zero */ |
338 | u32 address; /* APIC physical address */ | 416 | u32 address; /* APIC physical address */ |
339 | u32 interrupt; /* Global system interrupt where INTI lines start */ | 417 | u32 global_irq_base; /* Global system interrupt where INTI lines start */ |
340 | }; | 418 | }; |
341 | 419 | ||
342 | /* 2: Interrupt Override */ | 420 | /* 2: Interrupt Override */ |
343 | 421 | ||
344 | struct madt_interrupt_override { | 422 | struct acpi_madt_interrupt_override { |
345 | APIC_HEADER_DEF u8 bus; /* 0 - ISA */ | 423 | struct acpi_subtable_header header; |
346 | u8 source; /* Interrupt source (IRQ) */ | 424 | u8 bus; /* 0 - ISA */ |
347 | u32 interrupt; /* Global system interrupt */ | 425 | u8 source_irq; /* Interrupt source (IRQ) */ |
348 | ACPI_MADT_IFLAGS}; | 426 | u32 global_irq; /* Global system interrupt */ |
427 | u16 inti_flags; | ||
428 | }; | ||
349 | 429 | ||
350 | /* 3: NMI Sources */ | 430 | /* 3: NMI Source */ |
351 | 431 | ||
352 | struct madt_nmi_source { | 432 | struct acpi_madt_nmi_source { |
353 | APIC_HEADER_DEF ACPI_MADT_IFLAGS u32 interrupt; /* Global system interrupt */ | 433 | struct acpi_subtable_header header; |
434 | u16 inti_flags; | ||
435 | u32 global_irq; /* Global system interrupt */ | ||
354 | }; | 436 | }; |
355 | 437 | ||
356 | /* 4: Local APIC NMI */ | 438 | /* 4: Local APIC NMI */ |
357 | 439 | ||
358 | struct madt_local_apic_nmi { | 440 | struct acpi_madt_local_apic_nmi { |
359 | APIC_HEADER_DEF u8 processor_id; /* ACPI processor id */ | 441 | struct acpi_subtable_header header; |
360 | ACPI_MADT_IFLAGS u8 lint; /* LINTn to which NMI is connected */ | 442 | u8 processor_id; /* ACPI processor id */ |
443 | u16 inti_flags; | ||
444 | u8 lint; /* LINTn to which NMI is connected */ | ||
361 | }; | 445 | }; |
362 | 446 | ||
363 | /* 5: Address Override */ | 447 | /* 5: Address Override */ |
364 | 448 | ||
365 | struct madt_address_override { | 449 | struct acpi_madt_local_apic_override { |
366 | APIC_HEADER_DEF u16 reserved; /* Reserved, must be zero */ | 450 | struct acpi_subtable_header header; |
451 | u16 reserved; /* Reserved, must be zero */ | ||
367 | u64 address; /* APIC physical address */ | 452 | u64 address; /* APIC physical address */ |
368 | }; | 453 | }; |
369 | 454 | ||
370 | /* 6: I/O Sapic */ | 455 | /* 6: I/O Sapic */ |
371 | 456 | ||
372 | struct madt_io_sapic { | 457 | struct acpi_madt_io_sapic { |
373 | APIC_HEADER_DEF u8 io_sapic_id; /* I/O SAPIC ID */ | 458 | struct acpi_subtable_header header; |
459 | u8 id; /* I/O SAPIC ID */ | ||
374 | u8 reserved; /* Reserved, must be zero */ | 460 | u8 reserved; /* Reserved, must be zero */ |
375 | u32 interrupt_base; /* Glocal interrupt for SAPIC start */ | 461 | u32 global_irq_base; /* Global interrupt for SAPIC start */ |
376 | u64 address; /* SAPIC physical address */ | 462 | u64 address; /* SAPIC physical address */ |
377 | }; | 463 | }; |
378 | 464 | ||
379 | /* 7: Local Sapic */ | 465 | /* 7: Local Sapic */ |
380 | 466 | ||
381 | struct madt_local_sapic { | 467 | struct acpi_madt_local_sapic { |
382 | APIC_HEADER_DEF u8 processor_id; /* ACPI processor id */ | 468 | struct acpi_subtable_header header; |
383 | u8 local_sapic_id; /* SAPIC ID */ | 469 | u8 processor_id; /* ACPI processor id */ |
384 | u8 local_sapic_eid; /* SAPIC EID */ | 470 | u8 id; /* SAPIC ID */ |
471 | u8 eid; /* SAPIC EID */ | ||
385 | u8 reserved[3]; /* Reserved, must be zero */ | 472 | u8 reserved[3]; /* Reserved, must be zero */ |
386 | ACPI_MADT_LFLAGS u32 processor_uID; /* Numeric UID - ACPI 3.0 */ | 473 | u32 lapic_flags; |
387 | char processor_uIDstring[1]; /* String UID - ACPI 3.0 */ | 474 | u32 uid; /* Numeric UID - ACPI 3.0 */ |
475 | char uid_string[1]; /* String UID - ACPI 3.0 */ | ||
388 | }; | 476 | }; |
389 | 477 | ||
390 | /* 8: Platform Interrupt Source */ | 478 | /* 8: Platform Interrupt Source */ |
391 | 479 | ||
392 | struct madt_interrupt_source { | 480 | struct acpi_madt_interrupt_source { |
393 | APIC_HEADER_DEF ACPI_MADT_IFLAGS u8 interrupt_type; /* 1=PMI, 2=INIT, 3=corrected */ | 481 | struct acpi_subtable_header header; |
394 | u8 processor_id; /* Processor ID */ | 482 | u16 inti_flags; |
395 | u8 processor_eid; /* Processor EID */ | 483 | u8 type; /* 1=PMI, 2=INIT, 3=corrected */ |
484 | u8 id; /* Processor ID */ | ||
485 | u8 eid; /* Processor EID */ | ||
396 | u8 io_sapic_vector; /* Vector value for PMI interrupts */ | 486 | u8 io_sapic_vector; /* Vector value for PMI interrupts */ |
397 | u32 interrupt; /* Global system interrupt */ | 487 | u32 global_irq; /* Global system interrupt */ |
398 | u32 flags; /* Interrupt Source Flags */ | 488 | u32 flags; /* Interrupt Source Flags */ |
399 | }; | 489 | }; |
400 | 490 | ||
401 | #ifdef DUPLICATE_DEFINITION_WITH_LINUX_ACPI_H | 491 | /* Flags field above */ |
492 | |||
493 | #define ACPI_MADT_CPEI_OVERRIDE (1) | ||
494 | |||
495 | /* | ||
496 | * Common flags fields for MADT subtables | ||
497 | */ | ||
498 | |||
499 | /* MADT Local APIC flags (lapic_flags) */ | ||
500 | |||
501 | #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ | ||
502 | |||
503 | /* MADT MPS INTI flags (inti_flags) */ | ||
504 | |||
505 | #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ | ||
506 | #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ | ||
507 | |||
508 | /* Values for MPS INTI flags */ | ||
509 | |||
510 | #define ACPI_MADT_POLARITY_CONFORMS 0 | ||
511 | #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 | ||
512 | #define ACPI_MADT_POLARITY_RESERVED 2 | ||
513 | #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 | ||
514 | |||
515 | #define ACPI_MADT_TRIGGER_CONFORMS (0) | ||
516 | #define ACPI_MADT_TRIGGER_EDGE (1<<2) | ||
517 | #define ACPI_MADT_TRIGGER_RESERVED (2<<2) | ||
518 | #define ACPI_MADT_TRIGGER_LEVEL (3<<2) | ||
519 | |||
402 | /******************************************************************************* | 520 | /******************************************************************************* |
403 | * | 521 | * |
404 | * MCFG - PCI Memory Mapped Configuration table and sub-table | 522 | * MCFG - PCI Memory Mapped Configuration table and sub-table |
@@ -406,17 +524,19 @@ struct madt_interrupt_source { | |||
406 | ******************************************************************************/ | 524 | ******************************************************************************/ |
407 | 525 | ||
408 | struct acpi_table_mcfg { | 526 | struct acpi_table_mcfg { |
409 | ACPI_TABLE_HEADER_DEF u8 reserved[8]; | 527 | struct acpi_table_header header; /* Common ACPI table header */ |
528 | u8 reserved[8]; | ||
410 | }; | 529 | }; |
411 | 530 | ||
531 | /* Subtable */ | ||
532 | |||
412 | struct acpi_mcfg_allocation { | 533 | struct acpi_mcfg_allocation { |
413 | u64 base_address; /* Base address, processor-relative */ | 534 | u64 address; /* Base address, processor-relative */ |
414 | u16 pci_segment; /* PCI segment group number */ | 535 | u16 pci_segment; /* PCI segment group number */ |
415 | u8 start_bus_number; /* Starting PCI Bus number */ | 536 | u8 start_bus_number; /* Starting PCI Bus number */ |
416 | u8 end_bus_number; /* Final PCI Bus number */ | 537 | u8 end_bus_number; /* Final PCI Bus number */ |
417 | u32 reserved; | 538 | u32 reserved; |
418 | }; | 539 | }; |
419 | #endif | ||
420 | 540 | ||
421 | /******************************************************************************* | 541 | /******************************************************************************* |
422 | * | 542 | * |
@@ -424,8 +544,9 @@ struct acpi_mcfg_allocation { | |||
424 | * | 544 | * |
425 | ******************************************************************************/ | 545 | ******************************************************************************/ |
426 | 546 | ||
427 | struct smart_battery_table { | 547 | struct acpi_table_sbst { |
428 | ACPI_TABLE_HEADER_DEF u32 warning_level; | 548 | struct acpi_table_header header; /* Common ACPI table header */ |
549 | u32 warning_level; | ||
429 | u32 low_level; | 550 | u32 low_level; |
430 | u32 critical_level; | 551 | u32 critical_level; |
431 | }; | 552 | }; |
@@ -436,9 +557,10 @@ struct smart_battery_table { | |||
436 | * | 557 | * |
437 | ******************************************************************************/ | 558 | ******************************************************************************/ |
438 | 559 | ||
439 | struct system_locality_info { | 560 | struct acpi_table_slit { |
440 | ACPI_TABLE_HEADER_DEF u64 locality_count; | 561 | struct acpi_table_header header; /* Common ACPI table header */ |
441 | u8 entry[1][1]; | 562 | u64 locality_count; |
563 | u8 entry[1]; /* Real size = localities^2 */ | ||
442 | }; | 564 | }; |
443 | 565 | ||
444 | /******************************************************************************* | 566 | /******************************************************************************* |
@@ -448,7 +570,8 @@ struct system_locality_info { | |||
448 | ******************************************************************************/ | 570 | ******************************************************************************/ |
449 | 571 | ||
450 | struct acpi_table_spcr { | 572 | struct acpi_table_spcr { |
451 | ACPI_TABLE_HEADER_DEF u8 interface_type; /* 0=full 16550, 1=subset of 16550 */ | 573 | struct acpi_table_header header; /* Common ACPI table header */ |
574 | u8 interface_type; /* 0=full 16550, 1=subset of 16550 */ | ||
452 | u8 reserved[3]; | 575 | u8 reserved[3]; |
453 | struct acpi_generic_address serial_port; | 576 | struct acpi_generic_address serial_port; |
454 | u8 interrupt_type; | 577 | u8 interrupt_type; |
@@ -459,7 +582,7 @@ struct acpi_table_spcr { | |||
459 | u8 stop_bits; | 582 | u8 stop_bits; |
460 | u8 flow_control; | 583 | u8 flow_control; |
461 | u8 terminal_type; | 584 | u8 terminal_type; |
462 | u8 reserved2; | 585 | u8 reserved1; |
463 | u16 pci_device_id; | 586 | u16 pci_device_id; |
464 | u16 pci_vendor_id; | 587 | u16 pci_vendor_id; |
465 | u8 pci_bus; | 588 | u8 pci_bus; |
@@ -467,7 +590,7 @@ struct acpi_table_spcr { | |||
467 | u8 pci_function; | 590 | u8 pci_function; |
468 | u32 pci_flags; | 591 | u32 pci_flags; |
469 | u8 pci_segment; | 592 | u8 pci_segment; |
470 | u32 reserved3; | 593 | u32 reserved2; |
471 | }; | 594 | }; |
472 | 595 | ||
473 | /******************************************************************************* | 596 | /******************************************************************************* |
@@ -477,12 +600,13 @@ struct acpi_table_spcr { | |||
477 | ******************************************************************************/ | 600 | ******************************************************************************/ |
478 | 601 | ||
479 | struct acpi_table_spmi { | 602 | struct acpi_table_spmi { |
480 | ACPI_TABLE_HEADER_DEF u8 reserved; | 603 | struct acpi_table_header header; /* Common ACPI table header */ |
604 | u8 reserved; | ||
481 | u8 interface_type; | 605 | u8 interface_type; |
482 | u16 spec_revision; /* Version of IPMI */ | 606 | u16 spec_revision; /* Version of IPMI */ |
483 | u8 interrupt_type; | 607 | u8 interrupt_type; |
484 | u8 gpe_number; /* GPE assigned */ | 608 | u8 gpe_number; /* GPE assigned */ |
485 | u8 reserved2; | 609 | u8 reserved1; |
486 | u8 pci_device_flag; | 610 | u8 pci_device_flag; |
487 | u32 interrupt; | 611 | u32 interrupt; |
488 | struct acpi_generic_address ipmi_register; | 612 | struct acpi_generic_address ipmi_register; |
@@ -498,58 +622,53 @@ struct acpi_table_spmi { | |||
498 | * | 622 | * |
499 | ******************************************************************************/ | 623 | ******************************************************************************/ |
500 | 624 | ||
501 | struct system_resource_affinity { | 625 | struct acpi_table_srat { |
502 | ACPI_TABLE_HEADER_DEF u32 reserved1; /* Must be value '1' */ | 626 | struct acpi_table_header header; /* Common ACPI table header */ |
503 | u64 reserved2; /* Reserved, must be zero */ | 627 | u32 table_revision; /* Must be value '1' */ |
628 | u64 reserved; /* Reserved, must be zero */ | ||
504 | }; | 629 | }; |
505 | 630 | ||
506 | /* SRAT common sub-table header */ | 631 | /* Values for subtable type in struct acpi_subtable_header */ |
507 | 632 | ||
508 | #define SRAT_SUBTABLE_HEADER \ | 633 | enum acpi_srat_type { |
509 | u8 type; \ | 634 | ACPI_SRAT_TYPE_CPU_AFFINITY = 0, |
510 | u8 length; | 635 | ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, |
511 | 636 | ACPI_SRAT_TYPE_RESERVED = 2 | |
512 | /* Values for Type above */ | 637 | }; |
513 | |||
514 | #define SRAT_CPU_AFFINITY 0 | ||
515 | #define SRAT_MEMORY_AFFINITY 1 | ||
516 | #define SRAT_RESERVED 2 | ||
517 | 638 | ||
518 | /* SRAT sub-tables */ | 639 | /* SRAT sub-tables */ |
519 | 640 | ||
520 | struct static_resource_alloc { | 641 | struct acpi_srat_cpu_affinity { |
521 | SRAT_SUBTABLE_HEADER u8 proximity_domain_lo; | 642 | struct acpi_subtable_header header; |
643 | u8 proximity_domain_lo; | ||
522 | u8 apic_id; | 644 | u8 apic_id; |
523 | 645 | u32 flags; | |
524 | /* Flags (32 bits) */ | ||
525 | |||
526 | u8 enabled:1; /* 00: Use affinity structure */ | ||
527 | u8:7; /* 01-07: Reserved, must be zero */ | ||
528 | u8 reserved3[3]; /* 08-31: Reserved, must be zero */ | ||
529 | |||
530 | u8 local_sapic_eid; | 646 | u8 local_sapic_eid; |
531 | u8 proximity_domain_hi[3]; | 647 | u8 proximity_domain_hi[3]; |
532 | u32 reserved4; /* Reserved, must be zero */ | 648 | u32 reserved; /* Reserved, must be zero */ |
533 | }; | 649 | }; |
534 | 650 | ||
535 | struct memory_affinity { | 651 | /* Flags */ |
536 | SRAT_SUBTABLE_HEADER u32 proximity_domain; | ||
537 | u16 reserved3; | ||
538 | u64 base_address; | ||
539 | u64 address_length; | ||
540 | u32 reserved4; | ||
541 | |||
542 | /* Flags (32 bits) */ | ||
543 | 652 | ||
544 | u8 enabled:1; /* 00: Use affinity structure */ | 653 | #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ |
545 | u8 hot_pluggable:1; /* 01: Memory region is hot pluggable */ | ||
546 | u8 non_volatile:1; /* 02: Memory is non-volatile */ | ||
547 | u8:5; /* 03-07: Reserved, must be zero */ | ||
548 | u8 reserved5[3]; /* 08-31: Reserved, must be zero */ | ||
549 | 654 | ||
550 | u64 reserved6; /* Reserved, must be zero */ | 655 | struct acpi_srat_mem_affinity { |
656 | struct acpi_subtable_header header; | ||
657 | u32 proximity_domain; | ||
658 | u16 reserved; /* Reserved, must be zero */ | ||
659 | u64 base_address; | ||
660 | u64 length; | ||
661 | u32 memory_type; /* See acpi_address_range_id */ | ||
662 | u32 flags; | ||
663 | u64 reserved1; /* Reserved, must be zero */ | ||
551 | }; | 664 | }; |
552 | 665 | ||
666 | /* Flags */ | ||
667 | |||
668 | #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ | ||
669 | #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ | ||
670 | #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ | ||
671 | |||
553 | /******************************************************************************* | 672 | /******************************************************************************* |
554 | * | 673 | * |
555 | * TCPA - Trusted Computing Platform Alliance table | 674 | * TCPA - Trusted Computing Platform Alliance table |
@@ -557,7 +676,8 @@ struct memory_affinity { | |||
557 | ******************************************************************************/ | 676 | ******************************************************************************/ |
558 | 677 | ||
559 | struct acpi_table_tcpa { | 678 | struct acpi_table_tcpa { |
560 | ACPI_TABLE_HEADER_DEF u16 reserved; | 679 | struct acpi_table_header header; /* Common ACPI table header */ |
680 | u16 reserved; | ||
561 | u32 max_log_length; /* Maximum length for the event log area */ | 681 | u32 max_log_length; /* Maximum length for the event log area */ |
562 | u64 log_address; /* Address of the event log area */ | 682 | u64 log_address; /* Address of the event log area */ |
563 | }; | 683 | }; |
@@ -569,7 +689,8 @@ struct acpi_table_tcpa { | |||
569 | ******************************************************************************/ | 689 | ******************************************************************************/ |
570 | 690 | ||
571 | struct acpi_table_wdrt { | 691 | struct acpi_table_wdrt { |
572 | ACPI_TABLE_HEADER_DEF u32 header_length; /* Watchdog Header Length */ | 692 | struct acpi_table_header header; /* Common ACPI table header */ |
693 | u32 header_length; /* Watchdog Header Length */ | ||
573 | u8 pci_segment; /* PCI Segment number */ | 694 | u8 pci_segment; /* PCI Segment number */ |
574 | u8 pci_bus; /* PCI Bus number */ | 695 | u8 pci_bus; /* PCI Bus number */ |
575 | u8 pci_device; /* PCI Device number */ | 696 | u8 pci_device; /* PCI Device number */ |
@@ -582,58 +703,9 @@ struct acpi_table_wdrt { | |||
582 | u32 entries; /* Number of watchdog entries that follow */ | 703 | u32 entries; /* Number of watchdog entries that follow */ |
583 | }; | 704 | }; |
584 | 705 | ||
585 | #if 0 /* Flags, will be converted to macros */ | 706 | /* Flags */ |
586 | u8 enabled:1; /* 00: Timer enabled */ | 707 | |
587 | u8:6; /* 01-06: Reserved */ | 708 | #define ACPI_WDRT_TIMER_ENABLED (1) /* 00: Timer enabled */ |
588 | u8 sleep_stop:1; /* 07: Timer stopped in sleep state */ | ||
589 | #endif | ||
590 | |||
591 | /* Macros used to generate offsets to specific table fields */ | ||
592 | |||
593 | #define ACPI_ASF0_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_asf_info,f) | ||
594 | #define ACPI_ASF1_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_asf_alert,f) | ||
595 | #define ACPI_ASF2_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_asf_remote,f) | ||
596 | #define ACPI_ASF3_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_asf_rmcp,f) | ||
597 | #define ACPI_ASF4_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_asf_address,f) | ||
598 | #define ACPI_BOOT_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_boot,f) | ||
599 | #define ACPI_CPEP_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_cpep,f) | ||
600 | #define ACPI_CPEP0_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_cpep_polling,f) | ||
601 | #define ACPI_DBGP_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_dbgp,f) | ||
602 | #define ACPI_ECDT_OFFSET(f) (u8) ACPI_OFFSET (struct ec_boot_resources,f) | ||
603 | #define ACPI_HPET_OFFSET(f) (u8) ACPI_OFFSET (struct hpet_table,f) | ||
604 | #define ACPI_MADT_OFFSET(f) (u8) ACPI_OFFSET (struct multiple_apic_table,f) | ||
605 | #define ACPI_MADT0_OFFSET(f) (u8) ACPI_OFFSET (struct madt_processor_apic,f) | ||
606 | #define ACPI_MADT1_OFFSET(f) (u8) ACPI_OFFSET (struct madt_io_apic,f) | ||
607 | #define ACPI_MADT2_OFFSET(f) (u8) ACPI_OFFSET (struct madt_interrupt_override,f) | ||
608 | #define ACPI_MADT3_OFFSET(f) (u8) ACPI_OFFSET (struct madt_nmi_source,f) | ||
609 | #define ACPI_MADT4_OFFSET(f) (u8) ACPI_OFFSET (struct madt_local_apic_nmi,f) | ||
610 | #define ACPI_MADT5_OFFSET(f) (u8) ACPI_OFFSET (struct madt_address_override,f) | ||
611 | #define ACPI_MADT6_OFFSET(f) (u8) ACPI_OFFSET (struct madt_io_sapic,f) | ||
612 | #define ACPI_MADT7_OFFSET(f) (u8) ACPI_OFFSET (struct madt_local_sapic,f) | ||
613 | #define ACPI_MADT8_OFFSET(f) (u8) ACPI_OFFSET (struct madt_interrupt_source,f) | ||
614 | #define ACPI_MADTH_OFFSET(f) (u8) ACPI_OFFSET (struct apic_header,f) | ||
615 | #define ACPI_MCFG_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_mcfg,f) | ||
616 | #define ACPI_MCFG0_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_mcfg_allocation,f) | ||
617 | #define ACPI_SBST_OFFSET(f) (u8) ACPI_OFFSET (struct smart_battery_table,f) | ||
618 | #define ACPI_SLIT_OFFSET(f) (u8) ACPI_OFFSET (struct system_locality_info,f) | ||
619 | #define ACPI_SPCR_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_spcr,f) | ||
620 | #define ACPI_SPMI_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_spmi,f) | ||
621 | #define ACPI_SRAT_OFFSET(f) (u8) ACPI_OFFSET (struct system_resource_affinity,f) | ||
622 | #define ACPI_SRAT0_OFFSET(f) (u8) ACPI_OFFSET (struct static_resource_alloc,f) | ||
623 | #define ACPI_SRAT1_OFFSET(f) (u8) ACPI_OFFSET (struct memory_affinity,f) | ||
624 | #define ACPI_TCPA_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_tcpa,f) | ||
625 | #define ACPI_WDRT_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_wdrt,f) | ||
626 | |||
627 | #define ACPI_HPET_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct hpet_table,f,o) | ||
628 | #define ACPI_SRAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct static_resource_alloc,f,o) | ||
629 | #define ACPI_SRAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct memory_affinity,f,o) | ||
630 | #define ACPI_MADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct multiple_apic_table,f,o) | ||
631 | #define ACPI_MADT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct madt_processor_apic,f,o) | ||
632 | #define ACPI_MADT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct madt_interrupt_override,f,o) | ||
633 | #define ACPI_MADT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct madt_nmi_source,f,o) | ||
634 | #define ACPI_MADT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct madt_local_apic_nmi,f,o) | ||
635 | #define ACPI_MADT7_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct madt_local_sapic,f,o) | ||
636 | #define ACPI_MADT8_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct madt_interrupt_source,f,o) | ||
637 | 709 | ||
638 | /* Reset to default packing */ | 710 | /* Reset to default packing */ |
639 | 711 | ||
diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h deleted file mode 100644 index 67efe6cad27b..000000000000 --- a/include/acpi/actbl2.h +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | /****************************************************************************** | ||
2 | * | ||
3 | * Name: actbl2.h - ACPI Specification Revision 2.0 Tables | ||
4 | * | ||
5 | *****************************************************************************/ | ||
6 | |||
7 | /* | ||
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | ||
9 | * All rights reserved. | ||
10 | * | ||
11 | * Redistribution and use in source and binary forms, with or without | ||
12 | * modification, are permitted provided that the following conditions | ||
13 | * are met: | ||
14 | * 1. Redistributions of source code must retain the above copyright | ||
15 | * notice, this list of conditions, and the following disclaimer, | ||
16 | * without modification. | ||
17 | * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||
18 | * substantially similar to the "NO WARRANTY" disclaimer below | ||
19 | * ("Disclaimer") and any redistribution must be conditioned upon | ||
20 | * including a substantially similar Disclaimer requirement for further | ||
21 | * binary redistribution. | ||
22 | * 3. Neither the names of the above-listed copyright holders nor the names | ||
23 | * of any contributors may be used to endorse or promote products derived | ||
24 | * from this software without specific prior written permission. | ||
25 | * | ||
26 | * Alternatively, this software may be distributed under the terms of the | ||
27 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
28 | * Software Foundation. | ||
29 | * | ||
30 | * NO WARRANTY | ||
31 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
32 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
33 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||
34 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
35 | * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
36 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
37 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
38 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
39 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
40 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
41 | * POSSIBILITY OF SUCH DAMAGES. | ||
42 | */ | ||
43 | |||
44 | #ifndef __ACTBL2_H__ | ||
45 | #define __ACTBL2_H__ | ||
46 | |||
47 | /* Code moved to both actbl.h and actbl1.h */ | ||
48 | |||
49 | #endif /* __ACTBL2_H__ */ | ||
diff --git a/include/acpi/actbl71.h b/include/acpi/actbl71.h deleted file mode 100644 index 10ac05bb36bc..000000000000 --- a/include/acpi/actbl71.h +++ /dev/null | |||
@@ -1,134 +0,0 @@ | |||
1 | /****************************************************************************** | ||
2 | * | ||
3 | * Name: actbl71.h - IA-64 Extensions to the ACPI Spec Rev. 0.71 | ||
4 | * This file includes tables specific to this | ||
5 | * specification revision. | ||
6 | * | ||
7 | *****************************************************************************/ | ||
8 | |||
9 | /* | ||
10 | * Copyright (C) 2000 - 2003, R. Byron Moore | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or modify | ||
13 | * it under the terms of the GNU General Public License as published by | ||
14 | * the Free Software Foundation; either version 2 of the License, or | ||
15 | * (at your option) any later version. | ||
16 | * | ||
17 | * This program is distributed in the hope that it will be useful, | ||
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
20 | * GNU General Public License for more details. | ||
21 | * | ||
22 | * You should have received a copy of the GNU General Public License | ||
23 | * along with this program; if not, write to the Free Software | ||
24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
25 | */ | ||
26 | |||
27 | #ifndef __ACTBL71_H__ | ||
28 | #define __ACTBL71_H__ | ||
29 | |||
30 | /* 0.71 FADT address_space data item bitmasks defines */ | ||
31 | /* If the associated bit is zero then it is in memory space else in io space */ | ||
32 | |||
33 | #define SMI_CMD_ADDRESS_SPACE 0x01 | ||
34 | #define PM1_BLK_ADDRESS_SPACE 0x02 | ||
35 | #define PM2_CNT_BLK_ADDRESS_SPACE 0x04 | ||
36 | #define PM_TMR_BLK_ADDRESS_SPACE 0x08 | ||
37 | #define GPE0_BLK_ADDRESS_SPACE 0x10 | ||
38 | #define GPE1_BLK_ADDRESS_SPACE 0x20 | ||
39 | |||
40 | /* Only for clarity in declarations */ | ||
41 | |||
42 | typedef u64 IO_ADDRESS; | ||
43 | |||
44 | #pragma pack(1) | ||
45 | struct { /* Root System Descriptor Pointer */ | ||
46 | NATIVE_CHAR signature[8]; /* contains "RSD PTR " */ | ||
47 | u8 checksum; /* to make sum of struct == 0 */ | ||
48 | NATIVE_CHAR oem_id[6]; /* OEM identification */ | ||
49 | u8 reserved; /* Must be 0 for 1.0, 2 for 2.0 */ | ||
50 | u64 rsdt_physical_address; /* 64-bit physical address of RSDT */ | ||
51 | }; | ||
52 | |||
53 | /*****************************************/ | ||
54 | /* IA64 Extensions to ACPI Spec Rev 0.71 */ | ||
55 | /* for the Root System Description Table */ | ||
56 | /*****************************************/ | ||
57 | struct { | ||
58 | struct acpi_table_header header; /* Table header */ | ||
59 | u32 reserved_pad; /* IA64 alignment, must be 0 */ | ||
60 | u64 table_offset_entry[1]; /* Array of pointers to other */ | ||
61 | /* tables' headers */ | ||
62 | }; | ||
63 | |||
64 | /*******************************************/ | ||
65 | /* IA64 Extensions to ACPI Spec Rev 0.71 */ | ||
66 | /* for the Firmware ACPI Control Structure */ | ||
67 | /*******************************************/ | ||
68 | struct { | ||
69 | NATIVE_CHAR signature[4]; /* signature "FACS" */ | ||
70 | u32 length; /* length of structure, in bytes */ | ||
71 | u32 hardware_signature; /* hardware configuration signature */ | ||
72 | u32 reserved4; /* must be 0 */ | ||
73 | u64 firmware_waking_vector; /* ACPI OS waking vector */ | ||
74 | u64 global_lock; /* Global Lock */ | ||
75 | u32 S4bios_f:1; /* Indicates if S4BIOS support is present */ | ||
76 | u32 reserved1:31; /* must be 0 */ | ||
77 | u8 reserved3[28]; /* reserved - must be zero */ | ||
78 | }; | ||
79 | |||
80 | /******************************************/ | ||
81 | /* IA64 Extensions to ACPI Spec Rev 0.71 */ | ||
82 | /* for the Fixed ACPI Description Table */ | ||
83 | /******************************************/ | ||
84 | struct { | ||
85 | struct acpi_table_header header; /* table header */ | ||
86 | u32 reserved_pad; /* IA64 alignment, must be 0 */ | ||
87 | u64 firmware_ctrl; /* 64-bit Physical address of FACS */ | ||
88 | u64 dsdt; /* 64-bit Physical address of DSDT */ | ||
89 | u8 model; /* System Interrupt Model */ | ||
90 | u8 address_space; /* Address Space Bitmask */ | ||
91 | u16 sci_int; /* System vector of SCI interrupt */ | ||
92 | u8 acpi_enable; /* value to write to smi_cmd to enable ACPI */ | ||
93 | u8 acpi_disable; /* value to write to smi_cmd to disable ACPI */ | ||
94 | u8 S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */ | ||
95 | u8 reserved2; /* reserved - must be zero */ | ||
96 | u64 smi_cmd; /* Port address of SMI command port */ | ||
97 | u64 pm1a_evt_blk; /* Port address of Power Mgt 1a acpi_event Reg Blk */ | ||
98 | u64 pm1b_evt_blk; /* Port address of Power Mgt 1b acpi_event Reg Blk */ | ||
99 | u64 pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */ | ||
100 | u64 pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */ | ||
101 | u64 pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */ | ||
102 | u64 pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */ | ||
103 | u64 gpe0_blk; /* Port addr of General Purpose acpi_event 0 Reg Blk */ | ||
104 | u64 gpe1_blk; /* Port addr of General Purpose acpi_event 1 Reg Blk */ | ||
105 | u8 pm1_evt_len; /* Byte length of ports at pm1_x_evt_blk */ | ||
106 | u8 pm1_cnt_len; /* Byte length of ports at pm1_x_cnt_blk */ | ||
107 | u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */ | ||
108 | u8 pm_tm_len; /* Byte Length of ports at pm_tm_blk */ | ||
109 | u8 gpe0_blk_len; /* Byte Length of ports at gpe0_blk */ | ||
110 | u8 gpe1_blk_len; /* Byte Length of ports at gpe1_blk */ | ||
111 | u8 gpe1_base; /* offset in gpe model where gpe1 events start */ | ||
112 | u8 reserved3; /* reserved */ | ||
113 | u16 plvl2_lat; /* worst case HW latency to enter/exit C2 state */ | ||
114 | u16 plvl3_lat; /* worst case HW latency to enter/exit C3 state */ | ||
115 | u8 day_alrm; /* index to day-of-month alarm in RTC CMOS RAM */ | ||
116 | u8 mon_alrm; /* index to month-of-year alarm in RTC CMOS RAM */ | ||
117 | u8 century; /* index to century in RTC CMOS RAM */ | ||
118 | u8 reserved4; /* reserved */ | ||
119 | u32 flush_cash:1; /* PAL_FLUSH_CACHE is correctly supported */ | ||
120 | u32 reserved5:1; /* reserved - must be zero */ | ||
121 | u32 proc_c1:1; /* all processors support C1 state */ | ||
122 | u32 plvl2_up:1; /* C2 state works on MP system */ | ||
123 | u32 pwr_button:1; /* Power button is handled as a generic feature */ | ||
124 | u32 sleep_button:1; /* Sleep button is handled as a generic feature, or not present */ | ||
125 | u32 fixed_rTC:1; /* RTC wakeup stat not in fixed register space */ | ||
126 | u32 rtcs4:1; /* RTC wakeup stat not possible from S4 */ | ||
127 | u32 tmr_val_ext:1; /* tmr_val is 32 bits */ | ||
128 | u32 dock_cap:1; /* Supports Docking */ | ||
129 | u32 reserved6:22; /* reserved - must be zero */ | ||
130 | }; | ||
131 | |||
132 | #pragma pack() | ||
133 | |||
134 | #endif /* __ACTBL71_H__ */ | ||
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index 64b603cfe92e..72a6e2c3a536 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -48,7 +48,8 @@ | |||
48 | 48 | ||
49 | /* | 49 | /* |
50 | * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header | 50 | * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header |
51 | * and must be either 16, 32, or 64 | 51 | * and must be either 32 or 64. 16-bit ACPICA is no longer supported, as of |
52 | * 12/2006. | ||
52 | */ | 53 | */ |
53 | #ifndef ACPI_MACHINE_WIDTH | 54 | #ifndef ACPI_MACHINE_WIDTH |
54 | #error ACPI_MACHINE_WIDTH not defined | 55 | #error ACPI_MACHINE_WIDTH not defined |
@@ -149,7 +150,6 @@ typedef int INT32; | |||
149 | typedef u64 acpi_native_uint; | 150 | typedef u64 acpi_native_uint; |
150 | typedef s64 acpi_native_int; | 151 | typedef s64 acpi_native_int; |
151 | 152 | ||
152 | typedef u64 acpi_table_ptr; | ||
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 | ||
@@ -189,48 +189,15 @@ typedef int INT32; | |||
189 | typedef u32 acpi_native_uint; | 189 | typedef u32 acpi_native_uint; |
190 | typedef s32 acpi_native_int; | 190 | typedef s32 acpi_native_int; |
191 | 191 | ||
192 | typedef u64 acpi_table_ptr; | ||
193 | typedef u32 acpi_io_address; | 192 | typedef u32 acpi_io_address; |
194 | typedef u64 acpi_physical_address; | 193 | typedef u32 acpi_physical_address; |
195 | 194 | ||
196 | #define ACPI_MAX_PTR ACPI_UINT32_MAX | 195 | #define ACPI_MAX_PTR ACPI_UINT32_MAX |
197 | #define ACPI_SIZE_MAX ACPI_UINT32_MAX | 196 | #define ACPI_SIZE_MAX ACPI_UINT32_MAX |
198 | 197 | ||
199 | /******************************************************************************* | ||
200 | * | ||
201 | * Types specific to 16-bit targets | ||
202 | * | ||
203 | ******************************************************************************/ | ||
204 | |||
205 | #elif ACPI_MACHINE_WIDTH == 16 | ||
206 | |||
207 | /*! [Begin] no source code translation (keep the typedefs as-is) */ | ||
208 | |||
209 | typedef unsigned long UINT32; | ||
210 | typedef short INT16; | ||
211 | typedef long INT32; | ||
212 | |||
213 | /*! [End] no source code translation !*/ | ||
214 | |||
215 | typedef u16 acpi_native_uint; | ||
216 | typedef s16 acpi_native_int; | ||
217 | |||
218 | typedef u32 acpi_table_ptr; | ||
219 | typedef u32 acpi_io_address; | ||
220 | typedef char *acpi_physical_address; | ||
221 | |||
222 | #define ACPI_MAX_PTR ACPI_UINT16_MAX | ||
223 | #define ACPI_SIZE_MAX ACPI_UINT16_MAX | ||
224 | |||
225 | #define ACPI_USE_NATIVE_DIVIDE /* No 64-bit integers, ok to use native divide */ | ||
226 | |||
227 | /* 64-bit integers cannot be supported */ | ||
228 | |||
229 | #define ACPI_NO_INTEGER64_SUPPORT | ||
230 | |||
231 | #else | 198 | #else |
232 | 199 | ||
233 | /* ACPI_MACHINE_WIDTH must be either 64, 32, or 16 */ | 200 | /* ACPI_MACHINE_WIDTH must be either 64 or 32 */ |
234 | 201 | ||
235 | #error unknown ACPI_MACHINE_WIDTH | 202 | #error unknown ACPI_MACHINE_WIDTH |
236 | #endif | 203 | #endif |
@@ -311,36 +278,6 @@ typedef acpi_native_uint acpi_size; | |||
311 | * | 278 | * |
312 | ******************************************************************************/ | 279 | ******************************************************************************/ |
313 | 280 | ||
314 | /* | ||
315 | * Pointer overlays to avoid lots of typecasting for | ||
316 | * code that accepts both physical and logical pointers. | ||
317 | */ | ||
318 | union acpi_pointers { | ||
319 | acpi_physical_address physical; | ||
320 | void *logical; | ||
321 | acpi_table_ptr value; | ||
322 | }; | ||
323 | |||
324 | struct acpi_pointer { | ||
325 | u32 pointer_type; | ||
326 | union acpi_pointers pointer; | ||
327 | }; | ||
328 | |||
329 | /* pointer_types for above */ | ||
330 | |||
331 | #define ACPI_PHYSICAL_POINTER 0x01 | ||
332 | #define ACPI_LOGICAL_POINTER 0x02 | ||
333 | |||
334 | /* Processor mode */ | ||
335 | |||
336 | #define ACPI_PHYSICAL_ADDRESSING 0x04 | ||
337 | #define ACPI_LOGICAL_ADDRESSING 0x08 | ||
338 | #define ACPI_MEMORY_MODE 0x0C | ||
339 | |||
340 | #define ACPI_PHYSMODE_PHYSPTR ACPI_PHYSICAL_ADDRESSING | ACPI_PHYSICAL_POINTER | ||
341 | #define ACPI_LOGMODE_PHYSPTR ACPI_LOGICAL_ADDRESSING | ACPI_PHYSICAL_POINTER | ||
342 | #define ACPI_LOGMODE_LOGPTR ACPI_LOGICAL_ADDRESSING | ACPI_LOGICAL_POINTER | ||
343 | |||
344 | /* Logical defines and NULL */ | 281 | /* Logical defines and NULL */ |
345 | 282 | ||
346 | #ifdef FALSE | 283 | #ifdef FALSE |
@@ -442,7 +379,8 @@ typedef u64 acpi_integer; | |||
442 | /* | 379 | /* |
443 | * Initialization state | 380 | * Initialization state |
444 | */ | 381 | */ |
445 | #define ACPI_INITIALIZED_OK 0x01 | 382 | #define ACPI_SUBSYSTEM_INITIALIZE 0x01 |
383 | #define ACPI_INITIALIZED_OK 0x02 | ||
446 | 384 | ||
447 | /* | 385 | /* |
448 | * Power state values | 386 | * Power state values |
@@ -491,21 +429,6 @@ typedef u64 acpi_integer; | |||
491 | #define ACPI_NOTIFY_POWER_FAULT (u8) 7 | 429 | #define ACPI_NOTIFY_POWER_FAULT (u8) 7 |
492 | 430 | ||
493 | /* | 431 | /* |
494 | * Table types. These values are passed to the table related APIs | ||
495 | */ | ||
496 | typedef u32 acpi_table_type; | ||
497 | |||
498 | #define ACPI_TABLE_ID_RSDP (acpi_table_type) 0 | ||
499 | #define ACPI_TABLE_ID_DSDT (acpi_table_type) 1 | ||
500 | #define ACPI_TABLE_ID_FADT (acpi_table_type) 2 | ||
501 | #define ACPI_TABLE_ID_FACS (acpi_table_type) 3 | ||
502 | #define ACPI_TABLE_ID_PSDT (acpi_table_type) 4 | ||
503 | #define ACPI_TABLE_ID_SSDT (acpi_table_type) 5 | ||
504 | #define ACPI_TABLE_ID_XSDT (acpi_table_type) 6 | ||
505 | #define ACPI_TABLE_ID_MAX 6 | ||
506 | #define ACPI_NUM_TABLE_TYPES (ACPI_TABLE_ID_MAX+1) | ||
507 | |||
508 | /* | ||
509 | * Types associated with ACPI names and objects. The first group of | 432 | * Types associated with ACPI names and objects. The first group of |
510 | * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition | 433 | * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition |
511 | * of the ACPI object_type() operator (See the ACPI Spec). Therefore, | 434 | * of the ACPI object_type() operator (See the ACPI Spec). Therefore, |
@@ -637,7 +560,7 @@ typedef u32 acpi_event_status; | |||
637 | * | | | +--- Type of dispatch -- to method, handler, or none | 560 | * | | | +--- Type of dispatch -- to method, handler, or none |
638 | * | | +--- Enabled for runtime? | 561 | * | | +--- Enabled for runtime? |
639 | * | +--- Enabled for wake? | 562 | * | +--- Enabled for wake? |
640 | * +--- System state when GPE ocurred (running/waking) | 563 | * +--- Unused |
641 | */ | 564 | */ |
642 | #define ACPI_GPE_XRUPT_TYPE_MASK (u8) 0x01 | 565 | #define ACPI_GPE_XRUPT_TYPE_MASK (u8) 0x01 |
643 | #define ACPI_GPE_LEVEL_TRIGGERED (u8) 0x01 | 566 | #define ACPI_GPE_LEVEL_TRIGGERED (u8) 0x01 |
@@ -663,10 +586,6 @@ typedef u32 acpi_event_status; | |||
663 | 586 | ||
664 | #define ACPI_GPE_ENABLE_MASK (u8) 0x60 /* Both run/wake */ | 587 | #define ACPI_GPE_ENABLE_MASK (u8) 0x60 /* Both run/wake */ |
665 | 588 | ||
666 | #define ACPI_GPE_SYSTEM_MASK (u8) 0x80 | ||
667 | #define ACPI_GPE_SYSTEM_RUNNING (u8) 0x80 | ||
668 | #define ACPI_GPE_SYSTEM_WAKING (u8) 0x00 | ||
669 | |||
670 | /* | 589 | /* |
671 | * Flags for GPE and Lock interfaces | 590 | * Flags for GPE and Lock interfaces |
672 | */ | 591 | */ |
@@ -816,13 +735,6 @@ struct acpi_buffer { | |||
816 | #define ACPI_SYS_MODES_MASK 0x0003 | 735 | #define ACPI_SYS_MODES_MASK 0x0003 |
817 | 736 | ||
818 | /* | 737 | /* |
819 | * ACPI Table Info. One per ACPI table _type_ | ||
820 | */ | ||
821 | struct acpi_table_info { | ||
822 | u32 count; | ||
823 | }; | ||
824 | |||
825 | /* | ||
826 | * System info returned by acpi_get_system_info() | 738 | * System info returned by acpi_get_system_info() |
827 | */ | 739 | */ |
828 | struct acpi_system_info { | 740 | struct acpi_system_info { |
@@ -833,8 +745,6 @@ struct acpi_system_info { | |||
833 | u32 reserved2; | 745 | u32 reserved2; |
834 | u32 debug_level; | 746 | u32 debug_level; |
835 | u32 debug_layer; | 747 | u32 debug_layer; |
836 | u32 num_table_types; | ||
837 | struct acpi_table_info table_info[ACPI_TABLE_ID_MAX + 1]; | ||
838 | }; | 748 | }; |
839 | 749 | ||
840 | /* | 750 | /* |
diff --git a/include/acpi/acutils.h b/include/acpi/acutils.h index ba039ea1a057..883ffe92148f 100644 --- a/include/acpi/acutils.h +++ b/include/acpi/acutils.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -141,8 +141,6 @@ acpi_status acpi_ut_hardware_initialize(void); | |||
141 | 141 | ||
142 | void acpi_ut_subsystem_shutdown(void); | 142 | void acpi_ut_subsystem_shutdown(void); |
143 | 143 | ||
144 | acpi_status acpi_ut_validate_fadt(void); | ||
145 | |||
146 | /* | 144 | /* |
147 | * utclib - Local implementations of C library functions | 145 | * utclib - Local implementations of C library functions |
148 | */ | 146 | */ |
@@ -453,6 +451,8 @@ acpi_ut_short_divide(acpi_integer in_dividend, | |||
453 | /* | 451 | /* |
454 | * utmisc | 452 | * utmisc |
455 | */ | 453 | */ |
454 | const char *acpi_ut_validate_exception(acpi_status status); | ||
455 | |||
456 | u8 acpi_ut_is_aml_table(struct acpi_table_header *table); | 456 | u8 acpi_ut_is_aml_table(struct acpi_table_header *table); |
457 | 457 | ||
458 | acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id); | 458 | acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id); |
@@ -470,7 +470,7 @@ void acpi_ut_print_string(char *string, u8 max_length); | |||
470 | 470 | ||
471 | u8 acpi_ut_valid_acpi_name(u32 name); | 471 | u8 acpi_ut_valid_acpi_name(u32 name); |
472 | 472 | ||
473 | acpi_name acpi_ut_repair_name(acpi_name name); | 473 | acpi_name acpi_ut_repair_name(char *name); |
474 | 474 | ||
475 | u8 acpi_ut_valid_acpi_char(char character, acpi_native_uint position); | 475 | u8 acpi_ut_valid_acpi_char(char character, acpi_native_uint position); |
476 | 476 | ||
diff --git a/include/acpi/amlcode.h b/include/acpi/amlcode.h index cf18426a87b1..da53a4ef287a 100644 --- a/include/acpi/amlcode.h +++ b/include/acpi/amlcode.h | |||
@@ -7,7 +7,7 @@ | |||
7 | *****************************************************************************/ | 7 | *****************************************************************************/ |
8 | 8 | ||
9 | /* | 9 | /* |
10 | * Copyright (C) 2000 - 2006, R. Byron Moore | 10 | * Copyright (C) 2000 - 2007, R. Byron Moore |
11 | * All rights reserved. | 11 | * All rights reserved. |
12 | * | 12 | * |
13 | * Redistribution and use in source and binary forms, with or without | 13 | * Redistribution and use in source and binary forms, with or without |
@@ -273,7 +273,7 @@ | |||
273 | #define ARGI_DATAOBJECT 0x12 /* Buffer, String, package or reference to a Node - Used only by size_of operator */ | 273 | #define ARGI_DATAOBJECT 0x12 /* Buffer, String, package or reference to a Node - Used only by size_of operator */ |
274 | #define ARGI_COMPLEXOBJ 0x13 /* Buffer, String, or package (Used by INDEX op only) */ | 274 | #define ARGI_COMPLEXOBJ 0x13 /* Buffer, String, or package (Used by INDEX op only) */ |
275 | #define ARGI_REF_OR_STRING 0x14 /* Reference or String (Used by DEREFOF op only) */ | 275 | #define ARGI_REF_OR_STRING 0x14 /* Reference or String (Used by DEREFOF op only) */ |
276 | #define ARGI_REGION_OR_FIELD 0x15 /* Used by LOAD op only */ | 276 | #define ARGI_REGION_OR_BUFFER 0x15 /* Used by LOAD op only */ |
277 | #define ARGI_DATAREFOBJ 0x16 | 277 | #define ARGI_DATAREFOBJ 0x16 |
278 | 278 | ||
279 | /* Note: types above can expand to 0x1F maximum */ | 279 | /* Note: types above can expand to 0x1F maximum */ |
diff --git a/include/acpi/amlresrc.h b/include/acpi/amlresrc.h index be03818af9d1..f7d541239da4 100644 --- a/include/acpi/amlresrc.h +++ b/include/acpi/amlresrc.h | |||
@@ -6,7 +6,7 @@ | |||
6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
7 | 7 | ||
8 | /* | 8 | /* |
9 | * Copyright (C) 2000 - 2006, R. Byron Moore | 9 | * Copyright (C) 2000 - 2007, R. Byron Moore |
10 | * All rights reserved. | 10 | * All rights reserved. |
11 | * | 11 | * |
12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/platform/acenv.h b/include/acpi/platform/acenv.h index 453a469fd397..dab2ec59a3b0 100644 --- a/include/acpi/platform/acenv.h +++ b/include/acpi/platform/acenv.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/platform/acgcc.h b/include/acpi/platform/acgcc.h index da80933963db..3bb50494a38a 100644 --- a/include/acpi/platform/acgcc.h +++ b/include/acpi/platform/acgcc.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 7f1e92930b62..5f532d2ac180 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/asm-alpha/pci.h b/include/asm-alpha/pci.h index 4e115f368d5f..85aa1127c903 100644 --- a/include/asm-alpha/pci.h +++ b/include/asm-alpha/pci.h | |||
@@ -293,4 +293,6 @@ struct pci_dev *alpha_gendev_to_pci(struct device *dev); | |||
293 | #define IOBASE_ROOT_BUS 5 | 293 | #define IOBASE_ROOT_BUS 5 |
294 | #define IOBASE_FROM_HOSE 0x10000 | 294 | #define IOBASE_FROM_HOSE 0x10000 |
295 | 295 | ||
296 | extern struct pci_dev *isa_bridge; | ||
297 | |||
296 | #endif /* __ALPHA_PCI_H */ | 298 | #endif /* __ALPHA_PCI_H */ |
diff --git a/include/asm-i386/acpi.h b/include/asm-i386/acpi.h index 7cfad93edf10..5e657eb8946c 100644 --- a/include/asm-i386/acpi.h +++ b/include/asm-i386/acpi.h | |||
@@ -39,7 +39,7 @@ | |||
39 | * Calling conventions: | 39 | * Calling conventions: |
40 | * | 40 | * |
41 | * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads) | 41 | * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads) |
42 | * ACPI_EXTERNAL_XFACE - External ACPI interfaces | 42 | * ACPI_EXTERNAL_XFACE - External ACPI interfaces |
43 | * ACPI_INTERNAL_XFACE - Internal ACPI interfaces | 43 | * ACPI_INTERNAL_XFACE - Internal ACPI interfaces |
44 | * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces | 44 | * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces |
45 | */ | 45 | */ |
@@ -59,11 +59,11 @@ | |||
59 | int __acpi_acquire_global_lock(unsigned int *lock); | 59 | int __acpi_acquire_global_lock(unsigned int *lock); |
60 | int __acpi_release_global_lock(unsigned int *lock); | 60 | int __acpi_release_global_lock(unsigned int *lock); |
61 | 61 | ||
62 | #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \ | 62 | #define ACPI_ACQUIRE_GLOBAL_LOCK(facs, Acq) \ |
63 | ((Acq) = __acpi_acquire_global_lock((unsigned int *) GLptr)) | 63 | ((Acq) = __acpi_acquire_global_lock(&facs->global_lock)) |
64 | 64 | ||
65 | #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \ | 65 | #define ACPI_RELEASE_GLOBAL_LOCK(facs, Acq) \ |
66 | ((Acq) = __acpi_release_global_lock((unsigned int *) GLptr)) | 66 | ((Acq) = __acpi_release_global_lock(&facs->global_lock)) |
67 | 67 | ||
68 | /* | 68 | /* |
69 | * Math helper asm macros | 69 | * Math helper asm macros |
@@ -87,7 +87,7 @@ extern void check_acpi_pci(void); | |||
87 | static inline void check_acpi_pci(void) { } | 87 | static inline void check_acpi_pci(void) { } |
88 | #endif | 88 | #endif |
89 | 89 | ||
90 | #ifdef CONFIG_ACPI | 90 | #ifdef CONFIG_ACPI |
91 | extern int acpi_lapic; | 91 | extern int acpi_lapic; |
92 | extern int acpi_ioapic; | 92 | extern int acpi_ioapic; |
93 | extern int acpi_noirq; | 93 | extern int acpi_noirq; |
@@ -95,9 +95,9 @@ extern int acpi_strict; | |||
95 | extern int acpi_disabled; | 95 | extern int acpi_disabled; |
96 | extern int acpi_ht; | 96 | extern int acpi_ht; |
97 | extern int acpi_pci_disabled; | 97 | extern int acpi_pci_disabled; |
98 | static inline void disable_acpi(void) | 98 | static inline void disable_acpi(void) |
99 | { | 99 | { |
100 | acpi_disabled = 1; | 100 | acpi_disabled = 1; |
101 | acpi_ht = 0; | 101 | acpi_ht = 0; |
102 | acpi_pci_disabled = 1; | 102 | acpi_pci_disabled = 1; |
103 | acpi_noirq = 1; | 103 | acpi_noirq = 1; |
@@ -114,9 +114,9 @@ extern int acpi_use_timer_override; | |||
114 | #endif | 114 | #endif |
115 | 115 | ||
116 | static inline void acpi_noirq_set(void) { acpi_noirq = 1; } | 116 | static inline void acpi_noirq_set(void) { acpi_noirq = 1; } |
117 | static inline void acpi_disable_pci(void) | 117 | static inline void acpi_disable_pci(void) |
118 | { | 118 | { |
119 | acpi_pci_disabled = 1; | 119 | acpi_pci_disabled = 1; |
120 | acpi_noirq_set(); | 120 | acpi_noirq_set(); |
121 | } | 121 | } |
122 | extern int acpi_irq_balance_set(char *str); | 122 | extern int acpi_irq_balance_set(char *str); |
@@ -144,8 +144,6 @@ extern void acpi_reserve_bootmem(void); | |||
144 | 144 | ||
145 | #endif /*CONFIG_ACPI_SLEEP*/ | 145 | #endif /*CONFIG_ACPI_SLEEP*/ |
146 | 146 | ||
147 | extern u8 x86_acpiid_to_apicid[]; | ||
148 | |||
149 | #define ARCH_HAS_POWER_INIT 1 | 147 | #define ARCH_HAS_POWER_INIT 1 |
150 | 148 | ||
151 | #endif /*__KERNEL__*/ | 149 | #endif /*__KERNEL__*/ |
diff --git a/include/asm-i386/mach-es7000/mach_mpparse.h b/include/asm-i386/mach-es7000/mach_mpparse.h index 99f66be240be..24990e546da3 100644 --- a/include/asm-i386/mach-es7000/mach_mpparse.h +++ b/include/asm-i386/mach-es7000/mach_mpparse.h | |||
@@ -3,13 +3,13 @@ | |||
3 | 3 | ||
4 | #include <linux/acpi.h> | 4 | #include <linux/acpi.h> |
5 | 5 | ||
6 | static inline void mpc_oem_bus_info(struct mpc_config_bus *m, char *name, | 6 | static inline void mpc_oem_bus_info(struct mpc_config_bus *m, char *name, |
7 | struct mpc_config_translation *translation) | 7 | struct mpc_config_translation *translation) |
8 | { | 8 | { |
9 | Dprintk("Bus #%d is %s\n", m->mpc_busid, name); | 9 | Dprintk("Bus #%d is %s\n", m->mpc_busid, name); |
10 | } | 10 | } |
11 | 11 | ||
12 | static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, | 12 | static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, |
13 | struct mpc_config_translation *translation) | 13 | struct mpc_config_translation *translation) |
14 | { | 14 | { |
15 | } | 15 | } |
@@ -22,7 +22,7 @@ static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | |||
22 | char *productid) | 22 | char *productid) |
23 | { | 23 | { |
24 | if (mpc->mpc_oemptr) { | 24 | if (mpc->mpc_oemptr) { |
25 | struct mp_config_oemtable *oem_table = | 25 | struct mp_config_oemtable *oem_table = |
26 | (struct mp_config_oemtable *)mpc->mpc_oemptr; | 26 | (struct mp_config_oemtable *)mpc->mpc_oemptr; |
27 | if (!strncmp(oem, "UNISYS", 6)) | 27 | if (!strncmp(oem, "UNISYS", 6)) |
28 | return parse_unisys_oem((char *)oem_table); | 28 | return parse_unisys_oem((char *)oem_table); |
@@ -31,12 +31,13 @@ static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | |||
31 | } | 31 | } |
32 | 32 | ||
33 | #ifdef CONFIG_ACPI | 33 | #ifdef CONFIG_ACPI |
34 | |||
34 | static inline int es7000_check_dsdt(void) | 35 | static inline int es7000_check_dsdt(void) |
35 | { | 36 | { |
36 | struct acpi_table_header *header = NULL; | 37 | struct acpi_table_header header; |
37 | if(!acpi_get_table_header_early(ACPI_DSDT, &header)) | 38 | memcpy(&header, 0, sizeof(struct acpi_table_header)); |
38 | acpi_table_print(header, 0); | 39 | acpi_get_table_header(ACPI_SIG_DSDT, 0, &header); |
39 | if (!strncmp(header->oem_id, "UNISYS", 6)) | 40 | if (!strncmp(header.oem_id, "UNISYS", 6)) |
40 | return 1; | 41 | return 1; |
41 | return 0; | 42 | return 0; |
42 | } | 43 | } |
@@ -44,7 +45,7 @@ static inline int es7000_check_dsdt(void) | |||
44 | /* Hook from generic ACPI tables.c */ | 45 | /* Hook from generic ACPI tables.c */ |
45 | static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) | 46 | static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) |
46 | { | 47 | { |
47 | unsigned long oem_addr; | 48 | unsigned long oem_addr; |
48 | if (!find_unisys_acpi_oem_table(&oem_addr)) { | 49 | if (!find_unisys_acpi_oem_table(&oem_addr)) { |
49 | if (es7000_check_dsdt()) | 50 | if (es7000_check_dsdt()) |
50 | return parse_unisys_oem((char *)oem_addr); | 51 | return parse_unisys_oem((char *)oem_addr); |
diff --git a/include/asm-ia64/acpi.h b/include/asm-ia64/acpi.h index 09a5dd0e44a8..5d03792d4f65 100644 --- a/include/asm-ia64/acpi.h +++ b/include/asm-ia64/acpi.h | |||
@@ -82,11 +82,11 @@ ia64_acpi_release_global_lock (unsigned int *lock) | |||
82 | return old & 0x1; | 82 | return old & 0x1; |
83 | } | 83 | } |
84 | 84 | ||
85 | #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \ | 85 | #define ACPI_ACQUIRE_GLOBAL_LOCK(facs, Acq) \ |
86 | ((Acq) = ia64_acpi_acquire_global_lock((unsigned int *) GLptr)) | 86 | ((Acq) = ia64_acpi_acquire_global_lock(&facs->global_lock)) |
87 | 87 | ||
88 | #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \ | 88 | #define ACPI_RELEASE_GLOBAL_LOCK(facs, Acq) \ |
89 | ((Acq) = ia64_acpi_release_global_lock((unsigned int *) GLptr)) | 89 | ((Acq) = ia64_acpi_release_global_lock(&facs->global_lock)) |
90 | 90 | ||
91 | #define acpi_disabled 0 /* ACPI always enabled on IA64 */ | 91 | #define acpi_disabled 0 /* ACPI always enabled on IA64 */ |
92 | #define acpi_noirq 0 /* ACPI always enabled on IA64 */ | 92 | #define acpi_noirq 0 /* ACPI always enabled on IA64 */ |
@@ -119,8 +119,6 @@ extern int __devinitdata pxm_to_nid_map[MAX_PXM_DOMAINS]; | |||
119 | extern int __initdata nid_to_pxm_map[MAX_NUMNODES]; | 119 | extern int __initdata nid_to_pxm_map[MAX_NUMNODES]; |
120 | #endif | 120 | #endif |
121 | 121 | ||
122 | extern u16 ia64_acpiid_to_sapicid[]; | ||
123 | |||
124 | /* | 122 | /* |
125 | * Refer Intel ACPI _PDC support document for bit definitions | 123 | * Refer Intel ACPI _PDC support document for bit definitions |
126 | */ | 124 | */ |
diff --git a/include/asm-ia64/dma.h b/include/asm-ia64/dma.h index dad3a735df8b..4d97f60f1ef5 100644 --- a/include/asm-ia64/dma.h +++ b/include/asm-ia64/dma.h | |||
@@ -19,4 +19,6 @@ extern unsigned long MAX_DMA_ADDRESS; | |||
19 | 19 | ||
20 | #define free_dma(x) | 20 | #define free_dma(x) |
21 | 21 | ||
22 | void dma_mark_clean(void *addr, size_t size); | ||
23 | |||
22 | #endif /* _ASM_IA64_DMA_H */ | 24 | #endif /* _ASM_IA64_DMA_H */ |
diff --git a/include/asm-ia64/esi.h b/include/asm-ia64/esi.h index 84aac0e0b583..40991c6ba647 100644 --- a/include/asm-ia64/esi.h +++ b/include/asm-ia64/esi.h | |||
@@ -19,7 +19,6 @@ enum esi_proc_type { | |||
19 | ESI_PROC_REENTRANT /* MP-safe and reentrant */ | 19 | ESI_PROC_REENTRANT /* MP-safe and reentrant */ |
20 | }; | 20 | }; |
21 | 21 | ||
22 | extern int ia64_esi_init (void); | ||
23 | extern struct ia64_sal_retval esi_call_phys (void *, u64 *); | 22 | extern struct ia64_sal_retval esi_call_phys (void *, u64 *); |
24 | extern int ia64_esi_call(efi_guid_t, struct ia64_sal_retval *, | 23 | extern int ia64_esi_call(efi_guid_t, struct ia64_sal_retval *, |
25 | enum esi_proc_type, | 24 | enum esi_proc_type, |
diff --git a/include/asm-ia64/machvec.h b/include/asm-ia64/machvec.h index a3891eb3f217..3c96ac19154e 100644 --- a/include/asm-ia64/machvec.h +++ b/include/asm-ia64/machvec.h | |||
@@ -21,6 +21,7 @@ struct mm_struct; | |||
21 | struct pci_bus; | 21 | struct pci_bus; |
22 | struct task_struct; | 22 | struct task_struct; |
23 | struct pci_dev; | 23 | struct pci_dev; |
24 | struct msi_desc; | ||
24 | 25 | ||
25 | typedef void ia64_mv_setup_t (char **); | 26 | typedef void ia64_mv_setup_t (char **); |
26 | typedef void ia64_mv_cpu_init_t (void); | 27 | typedef void ia64_mv_cpu_init_t (void); |
@@ -79,7 +80,7 @@ typedef unsigned short ia64_mv_readw_relaxed_t (const volatile void __iomem *); | |||
79 | typedef unsigned int ia64_mv_readl_relaxed_t (const volatile void __iomem *); | 80 | typedef unsigned int ia64_mv_readl_relaxed_t (const volatile void __iomem *); |
80 | typedef unsigned long ia64_mv_readq_relaxed_t (const volatile void __iomem *); | 81 | typedef unsigned long ia64_mv_readq_relaxed_t (const volatile void __iomem *); |
81 | 82 | ||
82 | typedef int ia64_mv_setup_msi_irq_t (unsigned int irq, struct pci_dev *pdev); | 83 | typedef int ia64_mv_setup_msi_irq_t (struct pci_dev *pdev, struct msi_desc *); |
83 | typedef void ia64_mv_teardown_msi_irq_t (unsigned int irq); | 84 | typedef void ia64_mv_teardown_msi_irq_t (unsigned int irq); |
84 | 85 | ||
85 | static inline void | 86 | static inline void |
diff --git a/include/asm-ia64/meminit.h b/include/asm-ia64/meminit.h index c8df75901083..6dd476b652c6 100644 --- a/include/asm-ia64/meminit.h +++ b/include/asm-ia64/meminit.h | |||
@@ -51,12 +51,13 @@ extern void efi_memmap_init(unsigned long *, unsigned long *); | |||
51 | 51 | ||
52 | #define IGNORE_PFN0 1 /* XXX fix me: ignore pfn 0 until TLB miss handler is updated... */ | 52 | #define IGNORE_PFN0 1 /* XXX fix me: ignore pfn 0 until TLB miss handler is updated... */ |
53 | 53 | ||
54 | extern int register_active_ranges(u64 start, u64 end, void *arg); | ||
55 | |||
54 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 56 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
55 | # define LARGE_GAP 0x40000000 /* Use virtual mem map if hole is > than this */ | 57 | # define LARGE_GAP 0x40000000 /* Use virtual mem map if hole is > than this */ |
56 | extern unsigned long vmalloc_end; | 58 | extern unsigned long vmalloc_end; |
57 | extern struct page *vmem_map; | 59 | extern struct page *vmem_map; |
58 | extern int find_largest_hole (u64 start, u64 end, void *arg); | 60 | extern int find_largest_hole (u64 start, u64 end, void *arg); |
59 | extern int register_active_ranges (u64 start, u64 end, void *arg); | ||
60 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); | 61 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); |
61 | extern int vmemmap_find_next_valid_pfn(int, int); | 62 | extern int vmemmap_find_next_valid_pfn(int, int); |
62 | #else | 63 | #else |
diff --git a/include/asm-ia64/pgalloc.h b/include/asm-ia64/pgalloc.h index 393e04c42a2c..560c287b1233 100644 --- a/include/asm-ia64/pgalloc.h +++ b/include/asm-ia64/pgalloc.h | |||
@@ -137,7 +137,8 @@ pmd_populate_kernel(struct mm_struct *mm, pmd_t * pmd_entry, pte_t * pte) | |||
137 | static inline struct page *pte_alloc_one(struct mm_struct *mm, | 137 | static inline struct page *pte_alloc_one(struct mm_struct *mm, |
138 | unsigned long addr) | 138 | unsigned long addr) |
139 | { | 139 | { |
140 | return virt_to_page(pgtable_quicklist_alloc()); | 140 | void *pg = pgtable_quicklist_alloc(); |
141 | return pg ? virt_to_page(pg) : NULL; | ||
141 | } | 142 | } |
142 | 143 | ||
143 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | 144 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, |
diff --git a/include/asm-ia64/sn/acpi.h b/include/asm-ia64/sn/acpi.h index 2850a7ef5e71..9ce2801cbd57 100644 --- a/include/asm-ia64/sn/acpi.h +++ b/include/asm-ia64/sn/acpi.h | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | #include "acpi/acglobal.h" | 12 | #include "acpi/acglobal.h" |
13 | 13 | ||
14 | #define SN_ACPI_BASE_SUPPORT() (acpi_gbl_DSDT->oem_revision >= 0x20101) | 14 | extern int sn_acpi_rev; |
15 | #define SN_ACPI_BASE_SUPPORT() (sn_acpi_rev >= 0x20101) | ||
15 | 16 | ||
16 | #endif /* _ASM_IA64_SN_ACPI_H */ | 17 | #endif /* _ASM_IA64_SN_ACPI_H */ |
diff --git a/include/asm-ia64/sn/pcibr_provider.h b/include/asm-ia64/sn/pcibr_provider.h index da3eade0cae2..17cb6cc3f21a 100644 --- a/include/asm-ia64/sn/pcibr_provider.h +++ b/include/asm-ia64/sn/pcibr_provider.h | |||
@@ -142,7 +142,7 @@ extern int pcibr_ate_alloc(struct pcibus_info *, int); | |||
142 | extern void pcibr_ate_free(struct pcibus_info *, int); | 142 | extern void pcibr_ate_free(struct pcibus_info *, int); |
143 | extern void ate_write(struct pcibus_info *, int, int, u64); | 143 | extern void ate_write(struct pcibus_info *, int, int, u64); |
144 | extern int sal_pcibr_slot_enable(struct pcibus_info *soft, int device, | 144 | extern int sal_pcibr_slot_enable(struct pcibus_info *soft, int device, |
145 | void *resp); | 145 | void *resp, char **ssdt); |
146 | extern int sal_pcibr_slot_disable(struct pcibus_info *soft, int device, | 146 | extern int sal_pcibr_slot_disable(struct pcibus_info *soft, int device, |
147 | int action, void *resp); | 147 | int action, void *resp); |
148 | extern u16 sn_ioboard_to_pci_bus(struct pci_bus *pci_bus); | 148 | extern u16 sn_ioboard_to_pci_bus(struct pci_bus *pci_bus); |
diff --git a/include/asm-ia64/sn/pcidev.h b/include/asm-ia64/sn/pcidev.h index 9fe89a93d880..1c2382cea807 100644 --- a/include/asm-ia64/sn/pcidev.h +++ b/include/asm-ia64/sn/pcidev.h | |||
@@ -70,10 +70,16 @@ extern void sn_irq_fixup(struct pci_dev *pci_dev, | |||
70 | struct sn_irq_info *sn_irq_info); | 70 | struct sn_irq_info *sn_irq_info); |
71 | extern void sn_irq_unfixup(struct pci_dev *pci_dev); | 71 | extern void sn_irq_unfixup(struct pci_dev *pci_dev); |
72 | extern struct pcidev_info * sn_pcidev_info_get(struct pci_dev *); | 72 | extern struct pcidev_info * sn_pcidev_info_get(struct pci_dev *); |
73 | extern void sn_bus_fixup(struct pci_bus *); | ||
74 | extern void sn_acpi_bus_fixup(struct pci_bus *); | ||
75 | extern void sn_common_bus_fixup(struct pci_bus *, struct pcibus_bussoft *); | ||
73 | extern void sn_bus_store_sysdata(struct pci_dev *dev); | 76 | extern void sn_bus_store_sysdata(struct pci_dev *dev); |
74 | extern void sn_bus_free_sysdata(void); | 77 | extern void sn_bus_free_sysdata(void); |
75 | extern void sn_generate_path(struct pci_bus *pci_bus, char *address); | 78 | extern void sn_generate_path(struct pci_bus *pci_bus, char *address); |
76 | extern void sn_pci_fixup_slot(struct pci_dev *dev); | 79 | extern void sn_io_slot_fixup(struct pci_dev *); |
80 | extern void sn_acpi_slot_fixup(struct pci_dev *); | ||
81 | extern void sn_pci_fixup_slot(struct pci_dev *dev, struct pcidev_info *, | ||
82 | struct sn_irq_info *); | ||
77 | extern void sn_pci_unfixup_slot(struct pci_dev *dev); | 83 | extern void sn_pci_unfixup_slot(struct pci_dev *dev); |
78 | extern void sn_irq_lh_init(void); | 84 | extern void sn_irq_lh_init(void); |
79 | #endif /* _ASM_IA64_SN_PCI_PCIDEV_H */ | 85 | #endif /* _ASM_IA64_SN_PCI_PCIDEV_H */ |
diff --git a/include/asm-ia64/swiotlb.h b/include/asm-ia64/swiotlb.h new file mode 100644 index 000000000000..452c162dee4e --- /dev/null +++ b/include/asm-ia64/swiotlb.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef _ASM_SWIOTLB_H | ||
2 | #define _ASM_SWIOTLB_H 1 | ||
3 | |||
4 | #include <asm/machvec.h> | ||
5 | |||
6 | #define SWIOTLB_ARCH_NEED_LATE_INIT | ||
7 | #define SWIOTLB_ARCH_NEED_ALLOC | ||
8 | |||
9 | #endif /* _ASM_SWIOTLB_H */ | ||
diff --git a/include/asm-ia64/thread_info.h b/include/asm-ia64/thread_info.h index 9b505b25544f..91698599f918 100644 --- a/include/asm-ia64/thread_info.h +++ b/include/asm-ia64/thread_info.h | |||
@@ -84,6 +84,7 @@ struct thread_info { | |||
84 | #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ | 84 | #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ |
85 | #define TIF_SYSCALL_TRACE 3 /* syscall trace active */ | 85 | #define TIF_SYSCALL_TRACE 3 /* syscall trace active */ |
86 | #define TIF_SYSCALL_AUDIT 4 /* syscall auditing active */ | 86 | #define TIF_SYSCALL_AUDIT 4 /* syscall auditing active */ |
87 | #define TIF_SINGLESTEP 5 /* restore singlestep on return to user mode */ | ||
87 | #define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */ | 88 | #define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */ |
88 | #define TIF_MEMDIE 17 | 89 | #define TIF_MEMDIE 17 |
89 | #define TIF_MCA_INIT 18 /* this task is processing MCA or INIT */ | 90 | #define TIF_MCA_INIT 18 /* this task is processing MCA or INIT */ |
@@ -92,7 +93,8 @@ struct thread_info { | |||
92 | 93 | ||
93 | #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) | 94 | #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) |
94 | #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) | 95 | #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) |
95 | #define _TIF_SYSCALL_TRACEAUDIT (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT) | 96 | #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) |
97 | #define _TIF_SYSCALL_TRACEAUDIT (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP) | ||
96 | #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) | 98 | #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) |
97 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) | 99 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) |
98 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) | 100 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) |
diff --git a/include/asm-ia64/unistd.h b/include/asm-ia64/unistd.h index 53c5c0ee122c..a9e1fa4cac4d 100644 --- a/include/asm-ia64/unistd.h +++ b/include/asm-ia64/unistd.h | |||
@@ -291,11 +291,13 @@ | |||
291 | #define __NR_sync_file_range 1300 | 291 | #define __NR_sync_file_range 1300 |
292 | #define __NR_tee 1301 | 292 | #define __NR_tee 1301 |
293 | #define __NR_vmsplice 1302 | 293 | #define __NR_vmsplice 1302 |
294 | /* 1303 reserved for move_pages */ | ||
295 | #define __NR_getcpu 1304 | ||
294 | 296 | ||
295 | #ifdef __KERNEL__ | 297 | #ifdef __KERNEL__ |
296 | 298 | ||
297 | 299 | ||
298 | #define NR_syscalls 279 /* length of syscall table */ | 300 | #define NR_syscalls 281 /* length of syscall table */ |
299 | 301 | ||
300 | #define __ARCH_WANT_SYS_RT_SIGACTION | 302 | #define __ARCH_WANT_SYS_RT_SIGACTION |
301 | 303 | ||
diff --git a/include/asm-mips/bootinfo.h b/include/asm-mips/bootinfo.h index 8e321f53a382..c7c945baf1ee 100644 --- a/include/asm-mips/bootinfo.h +++ b/include/asm-mips/bootinfo.h | |||
@@ -243,6 +243,10 @@ extern struct boot_mem_map boot_mem_map; | |||
243 | extern void add_memory_region(phys_t start, phys_t size, long type); | 243 | extern void add_memory_region(phys_t start, phys_t size, long type); |
244 | 244 | ||
245 | extern void prom_init(void); | 245 | extern void prom_init(void); |
246 | extern void prom_free_prom_memory(void); | ||
247 | |||
248 | extern void free_init_pages(const char *what, | ||
249 | unsigned long begin, unsigned long end); | ||
246 | 250 | ||
247 | /* | 251 | /* |
248 | * Initial kernel command line, usually setup by prom_init() | 252 | * Initial kernel command line, usually setup by prom_init() |
diff --git a/include/asm-mips/ddb5xxx/ddb5477.h b/include/asm-mips/ddb5xxx/ddb5477.h index c5af4b73fdd7..6cf177caf6d5 100644 --- a/include/asm-mips/ddb5xxx/ddb5477.h +++ b/include/asm-mips/ddb5xxx/ddb5477.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #ifndef __ASM_DDB5XXX_DDB5477_H | 17 | #ifndef __ASM_DDB5XXX_DDB5477_H |
18 | #define __ASM_DDB5XXX_DDB5477_H | 18 | #define __ASM_DDB5XXX_DDB5477_H |
19 | 19 | ||
20 | #include <irq.h> | ||
20 | 21 | ||
21 | /* | 22 | /* |
22 | * This contains macros that are specific to DDB5477 or renamed from | 23 | * This contains macros that are specific to DDB5477 or renamed from |
@@ -251,14 +252,10 @@ extern void ll_vrc5477_irq_disable(int vrc5477_irq); | |||
251 | */ | 252 | */ |
252 | 253 | ||
253 | #define NUM_CPU_IRQ 8 | 254 | #define NUM_CPU_IRQ 8 |
254 | #define NUM_I8259_IRQ 16 | ||
255 | #define NUM_VRC5477_IRQ 32 | 255 | #define NUM_VRC5477_IRQ 32 |
256 | 256 | ||
257 | #define DDB_IRQ_BASE 0 | 257 | #define CPU_IRQ_BASE MIPS_CPU_IRQ_BASE |
258 | 258 | #define VRC5477_IRQ_BASE (CPU_IRQ_BASE + NUM_CPU_IRQ) | |
259 | #define I8259_IRQ_BASE DDB_IRQ_BASE | ||
260 | #define VRC5477_IRQ_BASE (I8259_IRQ_BASE + NUM_I8259_IRQ) | ||
261 | #define CPU_IRQ_BASE (VRC5477_IRQ_BASE + NUM_VRC5477_IRQ) | ||
262 | 259 | ||
263 | /* | 260 | /* |
264 | * vrc5477 irq defs | 261 | * vrc5477 irq defs |
@@ -300,22 +297,22 @@ extern void ll_vrc5477_irq_disable(int vrc5477_irq); | |||
300 | /* | 297 | /* |
301 | * i2859 irq assignment | 298 | * i2859 irq assignment |
302 | */ | 299 | */ |
303 | #define I8259_IRQ_RESERVED_0 (0 + I8259_IRQ_BASE) | 300 | #define I8259_IRQ_RESERVED_0 (0 + I8259A_IRQ_BASE) |
304 | #define I8259_IRQ_KEYBOARD (1 + I8259_IRQ_BASE) /* M1543 default */ | 301 | #define I8259_IRQ_KEYBOARD (1 + I8259A_IRQ_BASE) /* M1543 default */ |
305 | #define I8259_IRQ_CASCADE (2 + I8259_IRQ_BASE) | 302 | #define I8259_IRQ_CASCADE (2 + I8259A_IRQ_BASE) |
306 | #define I8259_IRQ_UART_B (3 + I8259_IRQ_BASE) /* M1543 default, may conflict with RTC according to schematic diagram */ | 303 | #define I8259_IRQ_UART_B (3 + I8259A_IRQ_BASE) /* M1543 default, may conflict with RTC according to schematic diagram */ |
307 | #define I8259_IRQ_UART_A (4 + I8259_IRQ_BASE) /* M1543 default */ | 304 | #define I8259_IRQ_UART_A (4 + I8259A_IRQ_BASE) /* M1543 default */ |
308 | #define I8259_IRQ_PARALLEL (5 + I8259_IRQ_BASE) /* M1543 default */ | 305 | #define I8259_IRQ_PARALLEL (5 + I8259A_IRQ_BASE) /* M1543 default */ |
309 | #define I8259_IRQ_RESERVED_6 (6 + I8259_IRQ_BASE) | 306 | #define I8259_IRQ_RESERVED_6 (6 + I8259A_IRQ_BASE) |
310 | #define I8259_IRQ_RESERVED_7 (7 + I8259_IRQ_BASE) | 307 | #define I8259_IRQ_RESERVED_7 (7 + I8259A_IRQ_BASE) |
311 | #define I8259_IRQ_RTC (8 + I8259_IRQ_BASE) /* who set this? */ | 308 | #define I8259_IRQ_RTC (8 + I8259A_IRQ_BASE) /* who set this? */ |
312 | #define I8259_IRQ_USB (9 + I8259_IRQ_BASE) /* ddb_setup */ | 309 | #define I8259_IRQ_USB (9 + I8259A_IRQ_BASE) /* ddb_setup */ |
313 | #define I8259_IRQ_PMU (10 + I8259_IRQ_BASE) /* ddb_setup */ | 310 | #define I8259_IRQ_PMU (10 + I8259A_IRQ_BASE) /* ddb_setup */ |
314 | #define I8259_IRQ_RESERVED_11 (11 + I8259_IRQ_BASE) | 311 | #define I8259_IRQ_RESERVED_11 (11 + I8259A_IRQ_BASE) |
315 | #define I8259_IRQ_RESERVED_12 (12 + I8259_IRQ_BASE) /* m1543_irq_setup */ | 312 | #define I8259_IRQ_RESERVED_12 (12 + I8259A_IRQ_BASE) /* m1543_irq_setup */ |
316 | #define I8259_IRQ_RESERVED_13 (13 + I8259_IRQ_BASE) | 313 | #define I8259_IRQ_RESERVED_13 (13 + I8259A_IRQ_BASE) |
317 | #define I8259_IRQ_HDC1 (14 + I8259_IRQ_BASE) /* default and ddb_setup */ | 314 | #define I8259_IRQ_HDC1 (14 + I8259A_IRQ_BASE) /* default and ddb_setup */ |
318 | #define I8259_IRQ_HDC2 (15 + I8259_IRQ_BASE) /* default */ | 315 | #define I8259_IRQ_HDC2 (15 + I8259A_IRQ_BASE) /* default */ |
319 | 316 | ||
320 | 317 | ||
321 | /* | 318 | /* |
diff --git a/include/asm-mips/dec/interrupts.h b/include/asm-mips/dec/interrupts.h index 273e4d65bfe6..e10d341067c8 100644 --- a/include/asm-mips/dec/interrupts.h +++ b/include/asm-mips/dec/interrupts.h | |||
@@ -14,6 +14,7 @@ | |||
14 | #ifndef __ASM_DEC_INTERRUPTS_H | 14 | #ifndef __ASM_DEC_INTERRUPTS_H |
15 | #define __ASM_DEC_INTERRUPTS_H | 15 | #define __ASM_DEC_INTERRUPTS_H |
16 | 16 | ||
17 | #include <irq.h> | ||
17 | #include <asm/mipsregs.h> | 18 | #include <asm/mipsregs.h> |
18 | 19 | ||
19 | 20 | ||
@@ -87,7 +88,7 @@ | |||
87 | #define DEC_CPU_INR_SW1 1 /* software #1 */ | 88 | #define DEC_CPU_INR_SW1 1 /* software #1 */ |
88 | #define DEC_CPU_INR_SW0 0 /* software #0 */ | 89 | #define DEC_CPU_INR_SW0 0 /* software #0 */ |
89 | 90 | ||
90 | #define DEC_CPU_IRQ_BASE 0 /* first IRQ assigned to CPU */ | 91 | #define DEC_CPU_IRQ_BASE MIPS_CPU_IRQ_BASE /* first IRQ assigned to CPU */ |
91 | 92 | ||
92 | #define DEC_CPU_IRQ_NR(n) ((n) + DEC_CPU_IRQ_BASE) | 93 | #define DEC_CPU_IRQ_NR(n) ((n) + DEC_CPU_IRQ_BASE) |
93 | #define DEC_CPU_IRQ_MASK(n) (1 << ((n) + CAUSEB_IP)) | 94 | #define DEC_CPU_IRQ_MASK(n) (1 << ((n) + CAUSEB_IP)) |
diff --git a/include/asm-mips/dma.h b/include/asm-mips/dma.h index 23f789c80845..e06ef0776d48 100644 --- a/include/asm-mips/dma.h +++ b/include/asm-mips/dma.h | |||
@@ -91,6 +91,7 @@ | |||
91 | #else | 91 | #else |
92 | #define MAX_DMA_ADDRESS (PAGE_OFFSET + 0x01000000) | 92 | #define MAX_DMA_ADDRESS (PAGE_OFFSET + 0x01000000) |
93 | #endif | 93 | #endif |
94 | #define MAX_DMA_PFN PFN_DOWN(virt_to_phys((void *)MAX_DMA_ADDRESS)) | ||
94 | 95 | ||
95 | /* 8237 DMA controllers */ | 96 | /* 8237 DMA controllers */ |
96 | #define IO_DMA1_BASE 0x00 /* 8 bit slave DMA, channels 0..3 */ | 97 | #define IO_DMA1_BASE 0x00 /* 8 bit slave DMA, channels 0..3 */ |
diff --git a/include/asm-mips/emma2rh/emma2rh.h b/include/asm-mips/emma2rh/emma2rh.h index 4fb8df71caa9..6a1af0af51e3 100644 --- a/include/asm-mips/emma2rh/emma2rh.h +++ b/include/asm-mips/emma2rh/emma2rh.h | |||
@@ -24,6 +24,8 @@ | |||
24 | #ifndef __ASM_EMMA2RH_EMMA2RH_H | 24 | #ifndef __ASM_EMMA2RH_EMMA2RH_H |
25 | #define __ASM_EMMA2RH_EMMA2RH_H | 25 | #define __ASM_EMMA2RH_EMMA2RH_H |
26 | 26 | ||
27 | #include <irq.h> | ||
28 | |||
27 | /* | 29 | /* |
28 | * EMMA2RH registers | 30 | * EMMA2RH registers |
29 | */ | 31 | */ |
@@ -104,7 +106,8 @@ | |||
104 | #define NUM_EMMA2RH_IRQ 96 | 106 | #define NUM_EMMA2RH_IRQ 96 |
105 | 107 | ||
106 | #define CPU_EMMA2RH_CASCADE 2 | 108 | #define CPU_EMMA2RH_CASCADE 2 |
107 | #define EMMA2RH_IRQ_BASE 0 | 109 | #define CPU_IRQ_BASE MIPS_CPU_IRQ_BASE |
110 | #define EMMA2RH_IRQ_BASE (CPU_IRQ_BASE + NUM_CPU_IRQ) | ||
108 | 111 | ||
109 | /* | 112 | /* |
110 | * emma2rh irq defs | 113 | * emma2rh irq defs |
diff --git a/include/asm-mips/emma2rh/markeins.h b/include/asm-mips/emma2rh/markeins.h index 8fa766795078..973b0628490d 100644 --- a/include/asm-mips/emma2rh/markeins.h +++ b/include/asm-mips/emma2rh/markeins.h | |||
@@ -33,7 +33,6 @@ | |||
33 | 33 | ||
34 | #define EMMA2RH_SW_IRQ_BASE (EMMA2RH_IRQ_BASE + NUM_EMMA2RH_IRQ) | 34 | #define EMMA2RH_SW_IRQ_BASE (EMMA2RH_IRQ_BASE + NUM_EMMA2RH_IRQ) |
35 | #define EMMA2RH_GPIO_IRQ_BASE (EMMA2RH_SW_IRQ_BASE + NUM_EMMA2RH_IRQ_SW) | 35 | #define EMMA2RH_GPIO_IRQ_BASE (EMMA2RH_SW_IRQ_BASE + NUM_EMMA2RH_IRQ_SW) |
36 | #define CPU_IRQ_BASE (EMMA2RH_GPIO_IRQ_BASE + NUM_EMMA2RH_IRQ_GPIO) | ||
37 | 36 | ||
38 | #define EMMA2RH_SW_IRQ_INT0 (0+EMMA2RH_SW_IRQ_BASE) | 37 | #define EMMA2RH_SW_IRQ_INT0 (0+EMMA2RH_SW_IRQ_BASE) |
39 | #define EMMA2RH_SW_IRQ_INT1 (1+EMMA2RH_SW_IRQ_BASE) | 38 | #define EMMA2RH_SW_IRQ_INT1 (1+EMMA2RH_SW_IRQ_BASE) |
diff --git a/include/asm-mips/i8259.h b/include/asm-mips/i8259.h index 4df8d8b118c0..e88a01607fea 100644 --- a/include/asm-mips/i8259.h +++ b/include/asm-mips/i8259.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/spinlock.h> | 18 | #include <linux/spinlock.h> |
19 | 19 | ||
20 | #include <asm/io.h> | 20 | #include <asm/io.h> |
21 | #include <irq.h> | ||
21 | 22 | ||
22 | /* i8259A PIC registers */ | 23 | /* i8259A PIC registers */ |
23 | #define PIC_MASTER_CMD 0x20 | 24 | #define PIC_MASTER_CMD 0x20 |
@@ -42,8 +43,6 @@ extern void disable_8259A_irq(unsigned int irq); | |||
42 | 43 | ||
43 | extern void init_i8259_irqs(void); | 44 | extern void init_i8259_irqs(void); |
44 | 45 | ||
45 | #define I8259A_IRQ_BASE 0 | ||
46 | |||
47 | /* | 46 | /* |
48 | * Do the traditional i8259 interrupt polling thing. This is for the few | 47 | * Do the traditional i8259 interrupt polling thing. This is for the few |
49 | * cases where no better interrupt acknowledge method is available and we | 48 | * cases where no better interrupt acknowledge method is available and we |
diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index d77b657c09c7..67f081078904 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h | |||
@@ -115,7 +115,7 @@ static inline void set_io_port_base(unsigned long base) | |||
115 | */ | 115 | */ |
116 | static inline unsigned long virt_to_phys(volatile const void *address) | 116 | static inline unsigned long virt_to_phys(volatile const void *address) |
117 | { | 117 | { |
118 | return (unsigned long)address - PAGE_OFFSET; | 118 | return (unsigned long)address - PAGE_OFFSET + PHYS_OFFSET; |
119 | } | 119 | } |
120 | 120 | ||
121 | /* | 121 | /* |
@@ -132,7 +132,7 @@ static inline unsigned long virt_to_phys(volatile const void *address) | |||
132 | */ | 132 | */ |
133 | static inline void * phys_to_virt(unsigned long address) | 133 | static inline void * phys_to_virt(unsigned long address) |
134 | { | 134 | { |
135 | return (void *)(address + PAGE_OFFSET); | 135 | return (void *)(address + PAGE_OFFSET - PHYS_OFFSET); |
136 | } | 136 | } |
137 | 137 | ||
138 | /* | 138 | /* |
diff --git a/include/asm-mips/irq.h b/include/asm-mips/irq.h index 386da82e5774..91803ba30ff2 100644 --- a/include/asm-mips/irq.h +++ b/include/asm-mips/irq.h | |||
@@ -18,7 +18,7 @@ | |||
18 | #ifdef CONFIG_I8259 | 18 | #ifdef CONFIG_I8259 |
19 | static inline int irq_canonicalize(int irq) | 19 | static inline int irq_canonicalize(int irq) |
20 | { | 20 | { |
21 | return ((irq == 2) ? 9 : irq); | 21 | return ((irq == I8259A_IRQ_BASE + 2) ? I8259A_IRQ_BASE + 9 : irq); |
22 | } | 22 | } |
23 | #else | 23 | #else |
24 | #define irq_canonicalize(irq) (irq) /* Sane hardware, sane code ... */ | 24 | #define irq_canonicalize(irq) (irq) /* Sane hardware, sane code ... */ |
diff --git a/include/asm-mips/irq_cpu.h b/include/asm-mips/irq_cpu.h index ed3d1e3d09ec..ef6a07cddb23 100644 --- a/include/asm-mips/irq_cpu.h +++ b/include/asm-mips/irq_cpu.h | |||
@@ -13,8 +13,8 @@ | |||
13 | #ifndef _ASM_IRQ_CPU_H | 13 | #ifndef _ASM_IRQ_CPU_H |
14 | #define _ASM_IRQ_CPU_H | 14 | #define _ASM_IRQ_CPU_H |
15 | 15 | ||
16 | extern void mips_cpu_irq_init(int irq_base); | 16 | extern void mips_cpu_irq_init(void); |
17 | extern void rm7k_cpu_irq_init(int irq_base); | 17 | extern void rm7k_cpu_irq_init(void); |
18 | extern void rm9k_cpu_irq_init(int irq_base); | 18 | extern void rm9k_cpu_irq_init(void); |
19 | 19 | ||
20 | #endif /* _ASM_IRQ_CPU_H */ | 20 | #endif /* _ASM_IRQ_CPU_H */ |
diff --git a/include/asm-mips/mach-au1x00/au1000.h b/include/asm-mips/mach-au1x00/au1000.h index 582acd8adb81..58fca8a5a9a6 100644 --- a/include/asm-mips/mach-au1x00/au1000.h +++ b/include/asm-mips/mach-au1x00/au1000.h | |||
@@ -39,6 +39,7 @@ | |||
39 | #ifndef _LANGUAGE_ASSEMBLY | 39 | #ifndef _LANGUAGE_ASSEMBLY |
40 | 40 | ||
41 | #include <linux/delay.h> | 41 | #include <linux/delay.h> |
42 | #include <linux/types.h> | ||
42 | #include <asm/io.h> | 43 | #include <asm/io.h> |
43 | 44 | ||
44 | /* cpu pipeline flush */ | 45 | /* cpu pipeline flush */ |
diff --git a/include/asm-mips/mach-cobalt/cobalt.h b/include/asm-mips/mach-cobalt/cobalt.h index 00b0fc68d5cb..24a8d51a55a3 100644 --- a/include/asm-mips/mach-cobalt/cobalt.h +++ b/include/asm-mips/mach-cobalt/cobalt.h | |||
@@ -12,6 +12,8 @@ | |||
12 | #ifndef __ASM_COBALT_H | 12 | #ifndef __ASM_COBALT_H |
13 | #define __ASM_COBALT_H | 13 | #define __ASM_COBALT_H |
14 | 14 | ||
15 | #include <irq.h> | ||
16 | |||
15 | /* | 17 | /* |
16 | * i8259 legacy interrupts used on Cobalt: | 18 | * i8259 legacy interrupts used on Cobalt: |
17 | * | 19 | * |
@@ -25,7 +27,7 @@ | |||
25 | /* | 27 | /* |
26 | * CPU IRQs are 16 ... 23 | 28 | * CPU IRQs are 16 ... 23 |
27 | */ | 29 | */ |
28 | #define COBALT_CPU_IRQ 16 | 30 | #define COBALT_CPU_IRQ MIPS_CPU_IRQ_BASE |
29 | 31 | ||
30 | #define COBALT_GALILEO_IRQ (COBALT_CPU_IRQ + 2) | 32 | #define COBALT_GALILEO_IRQ (COBALT_CPU_IRQ + 2) |
31 | #define COBALT_SCC_IRQ (COBALT_CPU_IRQ + 3) /* pre-production has 85C30 */ | 33 | #define COBALT_SCC_IRQ (COBALT_CPU_IRQ + 3) /* pre-production has 85C30 */ |
diff --git a/include/asm-mips/mach-emma2rh/irq.h b/include/asm-mips/mach-emma2rh/irq.h index bce64244b800..5439eb856461 100644 --- a/include/asm-mips/mach-emma2rh/irq.h +++ b/include/asm-mips/mach-emma2rh/irq.h | |||
@@ -10,4 +10,6 @@ | |||
10 | 10 | ||
11 | #define NR_IRQS 256 | 11 | #define NR_IRQS 256 |
12 | 12 | ||
13 | #include_next <irq.h> | ||
14 | |||
13 | #endif /* __ASM_MACH_EMMA2RH_IRQ_H */ | 15 | #endif /* __ASM_MACH_EMMA2RH_IRQ_H */ |
diff --git a/include/asm-mips/mach-generic/irq.h b/include/asm-mips/mach-generic/irq.h index 500e10ff24de..70d9a25132c5 100644 --- a/include/asm-mips/mach-generic/irq.h +++ b/include/asm-mips/mach-generic/irq.h | |||
@@ -8,6 +8,38 @@ | |||
8 | #ifndef __ASM_MACH_GENERIC_IRQ_H | 8 | #ifndef __ASM_MACH_GENERIC_IRQ_H |
9 | #define __ASM_MACH_GENERIC_IRQ_H | 9 | #define __ASM_MACH_GENERIC_IRQ_H |
10 | 10 | ||
11 | #ifndef NR_IRQS | ||
11 | #define NR_IRQS 128 | 12 | #define NR_IRQS 128 |
13 | #endif | ||
14 | |||
15 | #ifdef CONFIG_I8259 | ||
16 | #ifndef I8259A_IRQ_BASE | ||
17 | #define I8259A_IRQ_BASE 0 | ||
18 | #endif | ||
19 | #endif | ||
20 | |||
21 | #ifdef CONFIG_IRQ_CPU | ||
22 | |||
23 | #ifndef MIPS_CPU_IRQ_BASE | ||
24 | #ifdef CONFIG_I8259 | ||
25 | #define MIPS_CPU_IRQ_BASE 16 | ||
26 | #else | ||
27 | #define MIPS_CPU_IRQ_BASE 0 | ||
28 | #endif /* CONFIG_I8259 */ | ||
29 | #endif | ||
30 | |||
31 | #ifdef CONFIG_IRQ_CPU_RM7K | ||
32 | #ifndef RM7K_CPU_IRQ_BASE | ||
33 | #define RM7K_CPU_IRQ_BASE (MIPS_CPU_IRQ_BASE+8) | ||
34 | #endif | ||
35 | #endif | ||
36 | |||
37 | #ifdef CONFIG_IRQ_CPU_RM9K | ||
38 | #ifndef RM9K_CPU_IRQ_BASE | ||
39 | #define RM9K_CPU_IRQ_BASE (MIPS_CPU_IRQ_BASE+12) | ||
40 | #endif | ||
41 | #endif | ||
42 | |||
43 | #endif /* CONFIG_IRQ_CPU */ | ||
12 | 44 | ||
13 | #endif /* __ASM_MACH_GENERIC_IRQ_H */ | 45 | #endif /* __ASM_MACH_GENERIC_IRQ_H */ |
diff --git a/include/asm-mips/mach-mips/irq.h b/include/asm-mips/mach-mips/irq.h index e994b0c01227..9b9da26683c2 100644 --- a/include/asm-mips/mach-mips/irq.h +++ b/include/asm-mips/mach-mips/irq.h | |||
@@ -4,4 +4,6 @@ | |||
4 | 4 | ||
5 | #define NR_IRQS 256 | 5 | #define NR_IRQS 256 |
6 | 6 | ||
7 | #include_next <irq.h> | ||
8 | |||
7 | #endif /* __ASM_MACH_MIPS_IRQ_H */ | 9 | #endif /* __ASM_MACH_MIPS_IRQ_H */ |
diff --git a/include/asm-mips/mach-vr41xx/irq.h b/include/asm-mips/mach-vr41xx/irq.h new file mode 100644 index 000000000000..848812296052 --- /dev/null +++ b/include/asm-mips/mach-vr41xx/irq.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef __ASM_MACH_VR41XX_IRQ_H | ||
2 | #define __ASM_MACH_VR41XX_IRQ_H | ||
3 | |||
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 | |||
9 | #include_next <irq.h> | ||
10 | |||
11 | #endif /* __ASM_MACH_VR41XX_IRQ_H */ | ||
diff --git a/include/asm-mips/mips-boards/atlasint.h b/include/asm-mips/mips-boards/atlasint.h index b15e4ea0b091..76add42e486e 100644 --- a/include/asm-mips/mips-boards/atlasint.h +++ b/include/asm-mips/mips-boards/atlasint.h | |||
@@ -26,10 +26,12 @@ | |||
26 | #ifndef _MIPS_ATLASINT_H | 26 | #ifndef _MIPS_ATLASINT_H |
27 | #define _MIPS_ATLASINT_H | 27 | #define _MIPS_ATLASINT_H |
28 | 28 | ||
29 | #include <irq.h> | ||
30 | |||
29 | /* | 31 | /* |
30 | * Interrupts 0..7 are used for Atlas CPU interrupts (nonEIC mode) | 32 | * Interrupts 0..7 are used for Atlas CPU interrupts (nonEIC mode) |
31 | */ | 33 | */ |
32 | #define MIPSCPU_INT_BASE 0 | 34 | #define MIPSCPU_INT_BASE MIPS_CPU_IRQ_BASE |
33 | 35 | ||
34 | /* CPU interrupt offsets */ | 36 | /* CPU interrupt offsets */ |
35 | #define MIPSCPU_INT_SW0 0 | 37 | #define MIPSCPU_INT_SW0 0 |
diff --git a/include/asm-mips/mips-boards/maltaint.h b/include/asm-mips/mips-boards/maltaint.h index da6cc2fbbc78..9180d6466113 100644 --- a/include/asm-mips/mips-boards/maltaint.h +++ b/include/asm-mips/mips-boards/maltaint.h | |||
@@ -25,6 +25,8 @@ | |||
25 | #ifndef _MIPS_MALTAINT_H | 25 | #ifndef _MIPS_MALTAINT_H |
26 | #define _MIPS_MALTAINT_H | 26 | #define _MIPS_MALTAINT_H |
27 | 27 | ||
28 | #include <irq.h> | ||
29 | |||
28 | /* | 30 | /* |
29 | * Interrupts 0..15 are used for Malta ISA compatible interrupts | 31 | * Interrupts 0..15 are used for Malta ISA compatible interrupts |
30 | */ | 32 | */ |
@@ -33,7 +35,7 @@ | |||
33 | /* | 35 | /* |
34 | * Interrupts 16..23 are used for Malta CPU interrupts (nonEIC mode) | 36 | * Interrupts 16..23 are used for Malta CPU interrupts (nonEIC mode) |
35 | */ | 37 | */ |
36 | #define MIPSCPU_INT_BASE 16 | 38 | #define MIPSCPU_INT_BASE MIPS_CPU_IRQ_BASE |
37 | 39 | ||
38 | /* CPU interrupt offsets */ | 40 | /* CPU interrupt offsets */ |
39 | #define MIPSCPU_INT_SW0 0 | 41 | #define MIPSCPU_INT_SW0 0 |
diff --git a/include/asm-mips/mips-boards/prom.h b/include/asm-mips/mips-boards/prom.h index 4168c7fcd43e..7bf6f5f6ab9c 100644 --- a/include/asm-mips/mips-boards/prom.h +++ b/include/asm-mips/mips-boards/prom.h | |||
@@ -33,7 +33,6 @@ extern void prom_printf(char *fmt, ...); | |||
33 | extern void prom_init_cmdline(void); | 33 | extern void prom_init_cmdline(void); |
34 | extern void prom_meminit(void); | 34 | extern void prom_meminit(void); |
35 | extern void prom_fixup_mem_map(unsigned long start_mem, unsigned long end_mem); | 35 | extern void prom_fixup_mem_map(unsigned long start_mem, unsigned long end_mem); |
36 | extern unsigned long prom_free_prom_memory (void); | ||
37 | extern void mips_display_message(const char *str); | 36 | extern void mips_display_message(const char *str); |
38 | extern void mips_display_word(unsigned int num); | 37 | extern void mips_display_word(unsigned int num); |
39 | extern int get_ethernet_addr(char *ethernet_addr); | 38 | extern int get_ethernet_addr(char *ethernet_addr); |
diff --git a/include/asm-mips/mips-boards/seadint.h b/include/asm-mips/mips-boards/seadint.h index 365c2a3c64f5..4f6a3933699d 100644 --- a/include/asm-mips/mips-boards/seadint.h +++ b/include/asm-mips/mips-boards/seadint.h | |||
@@ -20,10 +20,12 @@ | |||
20 | #ifndef _MIPS_SEADINT_H | 20 | #ifndef _MIPS_SEADINT_H |
21 | #define _MIPS_SEADINT_H | 21 | #define _MIPS_SEADINT_H |
22 | 22 | ||
23 | #include <irq.h> | ||
24 | |||
23 | /* | 25 | /* |
24 | * Interrupts 0..7 are used for SEAD CPU interrupts | 26 | * Interrupts 0..7 are used for SEAD CPU interrupts |
25 | */ | 27 | */ |
26 | #define MIPSCPU_INT_BASE 0 | 28 | #define MIPSCPU_INT_BASE MIPS_CPU_IRQ_BASE |
27 | 29 | ||
28 | #define MIPSCPU_INT_UART0 2 | 30 | #define MIPSCPU_INT_UART0 2 |
29 | #define MIPSCPU_INT_UART1 3 | 31 | #define MIPSCPU_INT_UART1 3 |
diff --git a/include/asm-mips/mips-boards/simint.h b/include/asm-mips/mips-boards/simint.h index 4952e0b3bf11..54f2fe621d69 100644 --- a/include/asm-mips/mips-boards/simint.h +++ b/include/asm-mips/mips-boards/simint.h | |||
@@ -17,10 +17,11 @@ | |||
17 | #ifndef _MIPS_SIMINT_H | 17 | #ifndef _MIPS_SIMINT_H |
18 | #define _MIPS_SIMINT_H | 18 | #define _MIPS_SIMINT_H |
19 | 19 | ||
20 | #include <irq.h> | ||
20 | 21 | ||
21 | #define SIM_INT_BASE 0 | 22 | #define SIM_INT_BASE 0 |
22 | #define MIPSCPU_INT_MB0 2 | 23 | #define MIPSCPU_INT_MB0 2 |
23 | #define MIPSCPU_INT_BASE 16 | 24 | #define MIPSCPU_INT_BASE MIPS_CPU_IRQ_BASE |
24 | #define MIPS_CPU_TIMER_IRQ 7 | 25 | #define MIPS_CPU_TIMER_IRQ 7 |
25 | 26 | ||
26 | 27 | ||
diff --git a/include/asm-mips/mipsmtregs.h b/include/asm-mips/mipsmtregs.h index 3e9468f424f4..294bca12cd3f 100644 --- a/include/asm-mips/mipsmtregs.h +++ b/include/asm-mips/mipsmtregs.h | |||
@@ -165,8 +165,6 @@ | |||
165 | 165 | ||
166 | #ifndef __ASSEMBLY__ | 166 | #ifndef __ASSEMBLY__ |
167 | 167 | ||
168 | extern void mips_mt_regdump(unsigned long previous_mvpcontrol_value); | ||
169 | |||
170 | static inline unsigned int dvpe(void) | 168 | static inline unsigned int dvpe(void) |
171 | { | 169 | { |
172 | int res = 0; | 170 | int res = 0; |
diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h index 2f9e1a9ec51f..d3fbd83ff545 100644 --- a/include/asm-mips/page.h +++ b/include/asm-mips/page.h | |||
@@ -34,6 +34,20 @@ | |||
34 | 34 | ||
35 | #ifndef __ASSEMBLY__ | 35 | #ifndef __ASSEMBLY__ |
36 | 36 | ||
37 | /* | ||
38 | * This gives the physical RAM offset. | ||
39 | */ | ||
40 | #ifndef PHYS_OFFSET | ||
41 | #define PHYS_OFFSET 0UL | ||
42 | #endif | ||
43 | |||
44 | /* | ||
45 | * It's normally defined only for FLATMEM config but it's | ||
46 | * used in our early mem init code for all memory models. | ||
47 | * So always define it. | ||
48 | */ | ||
49 | #define ARCH_PFN_OFFSET PFN_UP(PHYS_OFFSET) | ||
50 | |||
37 | #include <linux/pfn.h> | 51 | #include <linux/pfn.h> |
38 | #include <asm/io.h> | 52 | #include <asm/io.h> |
39 | 53 | ||
@@ -132,20 +146,23 @@ typedef struct { unsigned long pgprot; } pgprot_t; | |||
132 | /* to align the pointer to the (next) page boundary */ | 146 | /* to align the pointer to the (next) page boundary */ |
133 | #define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK) | 147 | #define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK) |
134 | 148 | ||
149 | /* | ||
150 | * __pa()/__va() should be used only during mem init. | ||
151 | */ | ||
135 | #if defined(CONFIG_64BIT) && !defined(CONFIG_BUILD_ELF64) | 152 | #if defined(CONFIG_64BIT) && !defined(CONFIG_BUILD_ELF64) |
136 | #define __pa_page_offset(x) ((unsigned long)(x) < CKSEG0 ? PAGE_OFFSET : CKSEG0) | 153 | #define __pa_page_offset(x) ((unsigned long)(x) < CKSEG0 ? PAGE_OFFSET : CKSEG0) |
137 | #else | 154 | #else |
138 | #define __pa_page_offset(x) PAGE_OFFSET | 155 | #define __pa_page_offset(x) PAGE_OFFSET |
139 | #endif | 156 | #endif |
140 | #define __pa(x) ((unsigned long)(x) - __pa_page_offset(x)) | 157 | #define __pa(x) ((unsigned long)(x) - __pa_page_offset(x) + PHYS_OFFSET) |
141 | #define __pa_symbol(x) __pa(RELOC_HIDE((unsigned long)(x),0)) | 158 | #define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET - PHYS_OFFSET)) |
142 | #define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET)) | 159 | #define __pa_symbol(x) __pa(RELOC_HIDE((unsigned long)(x),0)) |
143 | 160 | ||
144 | #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) | 161 | #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) |
145 | 162 | ||
146 | #ifdef CONFIG_FLATMEM | 163 | #ifdef CONFIG_FLATMEM |
147 | 164 | ||
148 | #define pfn_valid(pfn) ((pfn) < max_mapnr) | 165 | #define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < max_mapnr) |
149 | 166 | ||
150 | #elif defined(CONFIG_SPARSEMEM) | 167 | #elif defined(CONFIG_SPARSEMEM) |
151 | 168 | ||
diff --git a/include/asm-mips/rtlx.h b/include/asm-mips/rtlx.h index 76cd51c6be39..59162f74a798 100644 --- a/include/asm-mips/rtlx.h +++ b/include/asm-mips/rtlx.h | |||
@@ -6,9 +6,10 @@ | |||
6 | #ifndef __ASM_RTLX_H | 6 | #ifndef __ASM_RTLX_H |
7 | #define __ASM_RTLX_H_ | 7 | #define __ASM_RTLX_H_ |
8 | 8 | ||
9 | #include <irq.h> | ||
10 | |||
9 | #define LX_NODE_BASE 10 | 11 | #define LX_NODE_BASE 10 |
10 | 12 | ||
11 | #define MIPSCPU_INT_BASE 16 | ||
12 | #define MIPS_CPU_RTLX_IRQ 0 | 13 | #define MIPS_CPU_RTLX_IRQ 0 |
13 | 14 | ||
14 | #define RTLX_VERSION 2 | 15 | #define RTLX_VERSION 2 |
diff --git a/include/asm-mips/sections.h b/include/asm-mips/sections.h index f7016278b266..b7e37262c246 100644 --- a/include/asm-mips/sections.h +++ b/include/asm-mips/sections.h | |||
@@ -3,6 +3,4 @@ | |||
3 | 3 | ||
4 | #include <asm-generic/sections.h> | 4 | #include <asm-generic/sections.h> |
5 | 5 | ||
6 | extern char _fdata; | ||
7 | |||
8 | #endif /* _ASM_SECTIONS_H */ | 6 | #endif /* _ASM_SECTIONS_H */ |
diff --git a/include/asm-mips/sgi/ip22.h b/include/asm-mips/sgi/ip22.h index bbfc05c3cab9..6592f3bd1999 100644 --- a/include/asm-mips/sgi/ip22.h +++ b/include/asm-mips/sgi/ip22.h | |||
@@ -21,15 +21,16 @@ | |||
21 | * HAL2 driver). This will prevent many complications, trust me ;-) | 21 | * HAL2 driver). This will prevent many complications, trust me ;-) |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <irq.h> | ||
24 | #include <asm/sgi/ioc.h> | 25 | #include <asm/sgi/ioc.h> |
25 | 26 | ||
26 | #define SGINT_EISA 0 /* 16 EISA irq levels (Indigo2) */ | 27 | #define SGINT_EISA 0 /* 16 EISA irq levels (Indigo2) */ |
27 | #define SGINT_CPU 16 /* MIPS CPU define 8 interrupt sources */ | 28 | #define SGINT_CPU MIPS_CPU_IRQ_BASE /* MIPS CPU define 8 interrupt sources */ |
28 | #define SGINT_LOCAL0 24 /* 8 local0 irq levels */ | 29 | #define SGINT_LOCAL0 (SGINT_CPU+8) /* 8 local0 irq levels */ |
29 | #define SGINT_LOCAL1 32 /* 8 local1 irq levels */ | 30 | #define SGINT_LOCAL1 (SGINT_CPU+16) /* 8 local1 irq levels */ |
30 | #define SGINT_LOCAL2 40 /* 8 local2 vectored irq levels */ | 31 | #define SGINT_LOCAL2 (SGINT_CPU+24) /* 8 local2 vectored irq levels */ |
31 | #define SGINT_LOCAL3 48 /* 8 local3 vectored irq levels */ | 32 | #define SGINT_LOCAL3 (SGINT_CPU+32) /* 8 local3 vectored irq levels */ |
32 | #define SGINT_END 56 /* End of 'spaces' */ | 33 | #define SGINT_END (SGINT_CPU+40) /* End of 'spaces' */ |
33 | 34 | ||
34 | /* | 35 | /* |
35 | * Individual interrupt definitions for the Indy and Indigo2 | 36 | * Individual interrupt definitions for the Indy and Indigo2 |
diff --git a/include/asm-mips/smtc_ipi.h b/include/asm-mips/smtc_ipi.h index f22c3e2f993a..55f3419f6546 100644 --- a/include/asm-mips/smtc_ipi.h +++ b/include/asm-mips/smtc_ipi.h | |||
@@ -44,9 +44,6 @@ struct smtc_ipi_q { | |||
44 | int depth; | 44 | int depth; |
45 | }; | 45 | }; |
46 | 46 | ||
47 | extern struct smtc_ipi_q IPIQ[NR_CPUS]; | ||
48 | extern struct smtc_ipi_q freeIPIq; | ||
49 | |||
50 | static inline void smtc_ipi_nq(struct smtc_ipi_q *q, struct smtc_ipi *p) | 47 | static inline void smtc_ipi_nq(struct smtc_ipi_q *q, struct smtc_ipi *p) |
51 | { | 48 | { |
52 | long flags; | 49 | long flags; |
diff --git a/include/asm-mips/uaccess.h b/include/asm-mips/uaccess.h index 1cdd4eeb2f73..c12ebc53ef31 100644 --- a/include/asm-mips/uaccess.h +++ b/include/asm-mips/uaccess.h | |||
@@ -488,7 +488,8 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n); | |||
488 | }) | 488 | }) |
489 | 489 | ||
490 | /* | 490 | /* |
491 | * __copy_from_user: - Copy a block of data from user space, with less checking. * @to: Destination address, in kernel space. | 491 | * __copy_from_user: - Copy a block of data from user space, with less checking. |
492 | * @to: Destination address, in kernel space. | ||
492 | * @from: Source address, in user space. | 493 | * @from: Source address, in user space. |
493 | * @n: Number of bytes to copy. | 494 | * @n: Number of bytes to copy. |
494 | * | 495 | * |
diff --git a/include/asm-mips/vr41xx/cmbvr4133.h b/include/asm-mips/vr41xx/cmbvr4133.h index 9490ade58b46..42300037d593 100644 --- a/include/asm-mips/vr41xx/cmbvr4133.h +++ b/include/asm-mips/vr41xx/cmbvr4133.h | |||
@@ -35,8 +35,8 @@ | |||
35 | #define CMBVR41XX_INTD_IRQ GIU_IRQ(CMBVR41XX_INTD_PIN) | 35 | #define CMBVR41XX_INTD_IRQ GIU_IRQ(CMBVR41XX_INTD_PIN) |
36 | #define CMBVR41XX_INTE_IRQ GIU_IRQ(CMBVR41XX_INTE_PIN) | 36 | #define CMBVR41XX_INTE_IRQ GIU_IRQ(CMBVR41XX_INTE_PIN) |
37 | 37 | ||
38 | #define I8259_IRQ_BASE 72 | 38 | #define I8259A_IRQ_BASE 72 |
39 | #define I8259_IRQ(x) (I8259_IRQ_BASE + (x)) | 39 | #define I8259_IRQ(x) (I8259A_IRQ_BASE + (x)) |
40 | #define TIMER_IRQ I8259_IRQ(0) | 40 | #define TIMER_IRQ I8259_IRQ(0) |
41 | #define KEYBOARD_IRQ I8259_IRQ(1) | 41 | #define KEYBOARD_IRQ I8259_IRQ(1) |
42 | #define I8259_SLAVE_IRQ I8259_IRQ(2) | 42 | #define I8259_SLAVE_IRQ I8259_IRQ(2) |
@@ -52,6 +52,5 @@ | |||
52 | #define AUX_IRQ I8259_IRQ(12) | 52 | #define AUX_IRQ I8259_IRQ(12) |
53 | #define IDE_PRIMARY_IRQ I8259_IRQ(14) | 53 | #define IDE_PRIMARY_IRQ I8259_IRQ(14) |
54 | #define IDE_SECONDARY_IRQ I8259_IRQ(15) | 54 | #define IDE_SECONDARY_IRQ I8259_IRQ(15) |
55 | #define I8259_IRQ_LAST IDE_SECONDARY_IRQ | ||
56 | 55 | ||
57 | #endif /* __NEC_CMBVR4133_H */ | 56 | #endif /* __NEC_CMBVR4133_H */ |
diff --git a/include/asm-powerpc/cputable.h b/include/asm-powerpc/cputable.h index 7384b8086b75..e870b5393175 100644 --- a/include/asm-powerpc/cputable.h +++ b/include/asm-powerpc/cputable.h | |||
@@ -50,6 +50,12 @@ enum powerpc_oprofile_type { | |||
50 | PPC_OPROFILE_CELL = 5, | 50 | PPC_OPROFILE_CELL = 5, |
51 | }; | 51 | }; |
52 | 52 | ||
53 | enum powerpc_pmc_type { | ||
54 | PPC_PMC_DEFAULT = 0, | ||
55 | PPC_PMC_IBM = 1, | ||
56 | PPC_PMC_PA6T = 2, | ||
57 | }; | ||
58 | |||
53 | struct cpu_spec { | 59 | struct cpu_spec { |
54 | /* CPU is matched via (PVR & pvr_mask) == pvr_value */ | 60 | /* CPU is matched via (PVR & pvr_mask) == pvr_value */ |
55 | unsigned int pvr_mask; | 61 | unsigned int pvr_mask; |
@@ -65,6 +71,7 @@ struct cpu_spec { | |||
65 | 71 | ||
66 | /* number of performance monitor counters */ | 72 | /* number of performance monitor counters */ |
67 | unsigned int num_pmcs; | 73 | unsigned int num_pmcs; |
74 | enum powerpc_pmc_type pmc_type; | ||
68 | 75 | ||
69 | /* this is called to initialize various CPU bits like L1 cache, | 76 | /* this is called to initialize various CPU bits like L1 cache, |
70 | * BHT, SPD, etc... from head.S before branching to identify_machine | 77 | * BHT, SPD, etc... from head.S before branching to identify_machine |
@@ -337,12 +344,6 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
337 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ | 344 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ |
338 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ | 345 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ |
339 | CPU_FTR_DSCR) | 346 | CPU_FTR_DSCR) |
340 | #define CPU_FTRS_POWER6X (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ | ||
341 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | ||
342 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | ||
343 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ | ||
344 | CPU_FTR_PURR | CPU_FTR_CI_LARGE_PAGE | \ | ||
345 | CPU_FTR_SPURR | CPU_FTR_REAL_LE | CPU_FTR_DSCR) | ||
346 | #define CPU_FTRS_CELL (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ | 347 | #define CPU_FTRS_CELL (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ |
347 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | 348 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
348 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 349 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
diff --git a/include/asm-powerpc/dcr.h b/include/asm-powerpc/dcr.h index b66c5e6941f0..9338d50538f1 100644 --- a/include/asm-powerpc/dcr.h +++ b/include/asm-powerpc/dcr.h | |||
@@ -33,6 +33,7 @@ | |||
33 | * base from the device-tree | 33 | * base from the device-tree |
34 | */ | 34 | */ |
35 | #ifdef CONFIG_PPC_MERGE | 35 | #ifdef CONFIG_PPC_MERGE |
36 | struct device_node; | ||
36 | extern unsigned int dcr_resource_start(struct device_node *np, | 37 | extern unsigned int dcr_resource_start(struct device_node *np, |
37 | unsigned int index); | 38 | unsigned int index); |
38 | extern unsigned int dcr_resource_len(struct device_node *np, | 39 | extern unsigned int dcr_resource_len(struct device_node *np, |
diff --git a/include/asm-powerpc/elf.h b/include/asm-powerpc/elf.h index d36426c01b6b..de507995c7b1 100644 --- a/include/asm-powerpc/elf.h +++ b/include/asm-powerpc/elf.h | |||
@@ -173,7 +173,7 @@ typedef elf_vrreg_t elf_vrregset_t32[ELF_NVRREG32]; | |||
173 | the loader. We need to make sure that it is out of the way of the program | 173 | the loader. We need to make sure that it is out of the way of the program |
174 | that it will "exec", and that there is sufficient room for the brk. */ | 174 | that it will "exec", and that there is sufficient room for the brk. */ |
175 | 175 | ||
176 | #define ELF_ET_DYN_BASE (0x08000000) | 176 | #define ELF_ET_DYN_BASE (0x20000000) |
177 | 177 | ||
178 | /* Common routine for both 32-bit and 64-bit processes */ | 178 | /* Common routine for both 32-bit and 64-bit processes */ |
179 | static inline void ppc_elf_core_copy_regs(elf_gregset_t elf_regs, | 179 | static inline void ppc_elf_core_copy_regs(elf_gregset_t elf_regs, |
diff --git a/include/asm-powerpc/firmware.h b/include/asm-powerpc/firmware.h index 98f7b62422c9..3671c128f271 100644 --- a/include/asm-powerpc/firmware.h +++ b/include/asm-powerpc/firmware.h | |||
@@ -43,6 +43,8 @@ | |||
43 | #define FW_FEATURE_ISERIES ASM_CONST(0x0000000000200000) | 43 | #define FW_FEATURE_ISERIES ASM_CONST(0x0000000000200000) |
44 | #define FW_FEATURE_LPAR ASM_CONST(0x0000000000400000) | 44 | #define FW_FEATURE_LPAR ASM_CONST(0x0000000000400000) |
45 | #define FW_FEATURE_PS3_LV1 ASM_CONST(0x0000000000800000) | 45 | #define FW_FEATURE_PS3_LV1 ASM_CONST(0x0000000000800000) |
46 | #define FW_FEATURE_BEAT ASM_CONST(0x0000000001000000) | ||
47 | #define FW_FEATURE_BULK_REMOVE ASM_CONST(0x0000000002000000) | ||
46 | 48 | ||
47 | #ifndef __ASSEMBLY__ | 49 | #ifndef __ASSEMBLY__ |
48 | 50 | ||
@@ -61,6 +63,8 @@ enum { | |||
61 | FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, | 63 | FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, |
62 | FW_FEATURE_PS3_POSSIBLE = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1, | 64 | FW_FEATURE_PS3_POSSIBLE = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1, |
63 | FW_FEATURE_PS3_ALWAYS = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1, | 65 | FW_FEATURE_PS3_ALWAYS = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1, |
66 | FW_FEATURE_CELLEB_POSSIBLE = FW_FEATURE_LPAR | FW_FEATURE_BEAT, | ||
67 | FW_FEATURE_CELLEB_ALWAYS = FW_FEATURE_LPAR | FW_FEATURE_BEAT, | ||
64 | FW_FEATURE_NATIVE_POSSIBLE = 0, | 68 | FW_FEATURE_NATIVE_POSSIBLE = 0, |
65 | FW_FEATURE_NATIVE_ALWAYS = 0, | 69 | FW_FEATURE_NATIVE_ALWAYS = 0, |
66 | FW_FEATURE_POSSIBLE = | 70 | FW_FEATURE_POSSIBLE = |
@@ -73,6 +77,9 @@ enum { | |||
73 | #ifdef CONFIG_PPC_PS3 | 77 | #ifdef CONFIG_PPC_PS3 |
74 | FW_FEATURE_PS3_POSSIBLE | | 78 | FW_FEATURE_PS3_POSSIBLE | |
75 | #endif | 79 | #endif |
80 | #ifdef CONFIG_PPC_CELLEB | ||
81 | FW_FEATURE_CELLEB_POSSIBLE | | ||
82 | #endif | ||
76 | #ifdef CONFIG_PPC_NATIVE | 83 | #ifdef CONFIG_PPC_NATIVE |
77 | FW_FEATURE_NATIVE_ALWAYS | | 84 | FW_FEATURE_NATIVE_ALWAYS | |
78 | #endif | 85 | #endif |
@@ -87,6 +94,9 @@ enum { | |||
87 | #ifdef CONFIG_PPC_PS3 | 94 | #ifdef CONFIG_PPC_PS3 |
88 | FW_FEATURE_PS3_ALWAYS & | 95 | FW_FEATURE_PS3_ALWAYS & |
89 | #endif | 96 | #endif |
97 | #ifdef CONFIG_PPC_CELLEB | ||
98 | FW_FEATURE_CELLEB_ALWAYS & | ||
99 | #endif | ||
90 | #ifdef CONFIG_PPC_NATIVE | 100 | #ifdef CONFIG_PPC_NATIVE |
91 | FW_FEATURE_NATIVE_ALWAYS & | 101 | FW_FEATURE_NATIVE_ALWAYS & |
92 | #endif | 102 | #endif |
diff --git a/include/asm-powerpc/fs_pd.h b/include/asm-powerpc/fs_pd.h index 3d0e819d37f1..c624915b757e 100644 --- a/include/asm-powerpc/fs_pd.h +++ b/include/asm-powerpc/fs_pd.h | |||
@@ -11,19 +11,17 @@ | |||
11 | 11 | ||
12 | #ifndef FS_PD_H | 12 | #ifndef FS_PD_H |
13 | #define FS_PD_H | 13 | #define FS_PD_H |
14 | #include <asm/cpm2.h> | ||
15 | #include <sysdev/fsl_soc.h> | 14 | #include <sysdev/fsl_soc.h> |
16 | #include <asm/time.h> | 15 | #include <asm/time.h> |
17 | 16 | ||
18 | static inline int uart_baudrate(void) | 17 | #ifdef CONFIG_CPM2 |
19 | { | 18 | #include <asm/cpm2.h> |
20 | return get_baudrate(); | ||
21 | } | ||
22 | 19 | ||
23 | static inline int uart_clock(void) | 20 | #if defined(CONFIG_8260) |
24 | { | 21 | #include <asm/mpc8260.h> |
25 | return ppc_proc_freq; | 22 | #elif defined(CONFIG_85xx) |
26 | } | 23 | #include <asm/mpc85xx.h> |
24 | #endif | ||
27 | 25 | ||
28 | #define cpm2_map(member) \ | 26 | #define cpm2_map(member) \ |
29 | ({ \ | 27 | ({ \ |
@@ -41,5 +39,38 @@ static inline int uart_clock(void) | |||
41 | }) | 39 | }) |
42 | 40 | ||
43 | #define cpm2_unmap(addr) iounmap(addr) | 41 | #define cpm2_unmap(addr) iounmap(addr) |
42 | #endif | ||
43 | |||
44 | #ifdef CONFIG_8xx | ||
45 | #include <asm/8xx_immap.h> | ||
46 | #include <asm/mpc8xx.h> | ||
47 | |||
48 | #define immr_map(member) \ | ||
49 | ({ \ | ||
50 | u32 offset = offsetof(immap_t, member); \ | ||
51 | void *addr = ioremap (IMAP_ADDR + offset, \ | ||
52 | sizeof( ((immap_t*)0)->member)); \ | ||
53 | addr; \ | ||
54 | }) | ||
55 | |||
56 | #define immr_map_size(member, size) \ | ||
57 | ({ \ | ||
58 | u32 offset = offsetof(immap_t, member); \ | ||
59 | void *addr = ioremap (IMAP_ADDR + offset, size); \ | ||
60 | addr; \ | ||
61 | }) | ||
62 | |||
63 | #define immr_unmap(addr) iounmap(addr) | ||
64 | #endif | ||
65 | |||
66 | static inline int uart_baudrate(void) | ||
67 | { | ||
68 | return get_baudrate(); | ||
69 | } | ||
70 | |||
71 | static inline int uart_clock(void) | ||
72 | { | ||
73 | return ppc_proc_freq; | ||
74 | } | ||
44 | 75 | ||
45 | #endif | 76 | #endif |
diff --git a/include/asm-powerpc/hvcall.h b/include/asm-powerpc/hvcall.h index 7a500732b671..60977806d2f4 100644 --- a/include/asm-powerpc/hvcall.h +++ b/include/asm-powerpc/hvcall.h | |||
@@ -168,6 +168,7 @@ | |||
168 | #define H_FREE_LOGICAL_LAN 0x118 | 168 | #define H_FREE_LOGICAL_LAN 0x118 |
169 | #define H_ADD_LOGICAL_LAN_BUFFER 0x11C | 169 | #define H_ADD_LOGICAL_LAN_BUFFER 0x11C |
170 | #define H_SEND_LOGICAL_LAN 0x120 | 170 | #define H_SEND_LOGICAL_LAN 0x120 |
171 | #define H_BULK_REMOVE 0x124 | ||
171 | #define H_MULTICAST_CTRL 0x130 | 172 | #define H_MULTICAST_CTRL 0x130 |
172 | #define H_SET_XDABR 0x134 | 173 | #define H_SET_XDABR 0x134 |
173 | #define H_STUFF_TCE 0x138 | 174 | #define H_STUFF_TCE 0x138 |
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index 1cd532379c30..301c9bb308b1 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
@@ -732,6 +732,12 @@ static inline void * bus_to_virt(unsigned long address) | |||
732 | 732 | ||
733 | #endif /* CONFIG_PPC32 */ | 733 | #endif /* CONFIG_PPC32 */ |
734 | 734 | ||
735 | /* access ports */ | ||
736 | #define setbits32(_addr, _v) out_be32((_addr), in_be32(_addr) | (_v)) | ||
737 | #define clrbits32(_addr, _v) out_be32((_addr), in_be32(_addr) & ~(_v)) | ||
738 | |||
739 | #define setbits16(_addr, _v) out_be16((_addr), in_be16(_addr) | (_v)) | ||
740 | #define clrbits16(_addr, _v) out_be16((_addr), in_be16(_addr) & ~(_v)) | ||
735 | 741 | ||
736 | #endif /* __KERNEL__ */ | 742 | #endif /* __KERNEL__ */ |
737 | 743 | ||
diff --git a/include/asm-powerpc/iommu.h b/include/asm-powerpc/iommu.h index f85dbd305558..b2e56b30306a 100644 --- a/include/asm-powerpc/iommu.h +++ b/include/asm-powerpc/iommu.h | |||
@@ -99,6 +99,7 @@ extern void iommu_unmap_single(struct iommu_table *tbl, dma_addr_t dma_handle, | |||
99 | extern void iommu_init_early_pSeries(void); | 99 | extern void iommu_init_early_pSeries(void); |
100 | extern void iommu_init_early_iSeries(void); | 100 | extern void iommu_init_early_iSeries(void); |
101 | extern void iommu_init_early_dart(void); | 101 | extern void iommu_init_early_dart(void); |
102 | extern void iommu_init_early_pasemi(void); | ||
102 | 103 | ||
103 | #ifdef CONFIG_PCI | 104 | #ifdef CONFIG_PCI |
104 | extern void pci_iommu_init(void); | 105 | extern void pci_iommu_init(void); |
diff --git a/include/asm-powerpc/ipic.h b/include/asm-powerpc/ipic.h index 9fbb03415860..edec79dcb7c1 100644 --- a/include/asm-powerpc/ipic.h +++ b/include/asm-powerpc/ipic.h | |||
@@ -78,7 +78,7 @@ extern u32 ipic_get_mcp_status(void); | |||
78 | extern void ipic_clear_mcp_status(u32 mask); | 78 | extern void ipic_clear_mcp_status(u32 mask); |
79 | 79 | ||
80 | #ifdef CONFIG_PPC_MERGE | 80 | #ifdef CONFIG_PPC_MERGE |
81 | extern void ipic_init(struct device_node *node, unsigned int flags); | 81 | extern struct ipic * ipic_init(struct device_node *node, unsigned int flags); |
82 | extern unsigned int ipic_get_irq(void); | 82 | extern unsigned int ipic_get_irq(void); |
83 | #else | 83 | #else |
84 | extern void ipic_init(phys_addr_t phys_addr, unsigned int flags, | 84 | extern void ipic_init(phys_addr_t phys_addr, unsigned int flags, |
diff --git a/include/asm-powerpc/irq.h b/include/asm-powerpc/irq.h index 46476e9a494a..4734cc178db5 100644 --- a/include/asm-powerpc/irq.h +++ b/include/asm-powerpc/irq.h | |||
@@ -89,6 +89,9 @@ struct irq_host_ops { | |||
89 | /* Dispose of such a mapping */ | 89 | /* Dispose of such a mapping */ |
90 | void (*unmap)(struct irq_host *h, unsigned int virq); | 90 | void (*unmap)(struct irq_host *h, unsigned int virq); |
91 | 91 | ||
92 | /* Update of such a mapping */ | ||
93 | void (*remap)(struct irq_host *h, unsigned int virq, irq_hw_number_t hw); | ||
94 | |||
92 | /* Translate device-tree interrupt specifier from raw format coming | 95 | /* Translate device-tree interrupt specifier from raw format coming |
93 | * from the firmware to a irq_hw_number_t (interrupt line number) and | 96 | * from the firmware to a irq_hw_number_t (interrupt line number) and |
94 | * type (sense) that can be passed to set_irq_type(). In the absence | 97 | * type (sense) that can be passed to set_irq_type(). In the absence |
diff --git a/include/asm-powerpc/kprobes.h b/include/asm-powerpc/kprobes.h index 2dafa376a63f..3a5dd492588f 100644 --- a/include/asm-powerpc/kprobes.h +++ b/include/asm-powerpc/kprobes.h | |||
@@ -44,6 +44,7 @@ typedef unsigned int kprobe_opcode_t; | |||
44 | #define IS_TDI(instr) (((instr) & 0xfc000000) == 0x08000000) | 44 | #define IS_TDI(instr) (((instr) & 0xfc000000) == 0x08000000) |
45 | #define IS_TWI(instr) (((instr) & 0xfc000000) == 0x0c000000) | 45 | #define IS_TWI(instr) (((instr) & 0xfc000000) == 0x0c000000) |
46 | 46 | ||
47 | #ifdef CONFIG_PPC64 | ||
47 | /* | 48 | /* |
48 | * 64bit powerpc uses function descriptors. | 49 | * 64bit powerpc uses function descriptors. |
49 | * Handle cases where: | 50 | * Handle cases where: |
@@ -67,9 +68,13 @@ typedef unsigned int kprobe_opcode_t; | |||
67 | } | 68 | } |
68 | 69 | ||
69 | #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)((func_descr_t *)pentry) | 70 | #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)((func_descr_t *)pentry) |
70 | |||
71 | #define is_trap(instr) (IS_TW(instr) || IS_TD(instr) || \ | 71 | #define is_trap(instr) (IS_TW(instr) || IS_TD(instr) || \ |
72 | IS_TWI(instr) || IS_TDI(instr)) | 72 | IS_TWI(instr) || IS_TDI(instr)) |
73 | #else | ||
74 | /* Use stock kprobe_lookup_name since ppc32 doesn't use function descriptors */ | ||
75 | #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)(pentry) | ||
76 | #define is_trap(instr) (IS_TW(instr) || IS_TWI(instr)) | ||
77 | #endif | ||
73 | 78 | ||
74 | #define ARCH_SUPPORTS_KRETPROBES | 79 | #define ARCH_SUPPORTS_KRETPROBES |
75 | #define ARCH_INACTIVE_KPROBE_COUNT 1 | 80 | #define ARCH_INACTIVE_KPROBE_COUNT 1 |
diff --git a/include/asm-powerpc/mmu.h b/include/asm-powerpc/mmu.h index 41c8c9c5a254..200055a4b82b 100644 --- a/include/asm-powerpc/mmu.h +++ b/include/asm-powerpc/mmu.h | |||
@@ -247,6 +247,7 @@ extern void htab_initialize_secondary(void); | |||
247 | extern void hpte_init_native(void); | 247 | extern void hpte_init_native(void); |
248 | extern void hpte_init_lpar(void); | 248 | extern void hpte_init_lpar(void); |
249 | extern void hpte_init_iSeries(void); | 249 | extern void hpte_init_iSeries(void); |
250 | extern void hpte_init_beat(void); | ||
250 | 251 | ||
251 | extern void stabs_alloc(void); | 252 | extern void stabs_alloc(void); |
252 | extern void slb_initialize(void); | 253 | extern void slb_initialize(void); |
diff --git a/include/asm-powerpc/mpc52xx.h b/include/asm-powerpc/mpc52xx.h index 4560d72fc758..7afd5bf94528 100644 --- a/include/asm-powerpc/mpc52xx.h +++ b/include/asm-powerpc/mpc52xx.h | |||
@@ -249,6 +249,8 @@ extern void mpc52xx_declare_of_platform_devices(void); | |||
249 | extern void mpc52xx_init_irq(void); | 249 | extern void mpc52xx_init_irq(void); |
250 | extern unsigned int mpc52xx_get_irq(void); | 250 | extern unsigned int mpc52xx_get_irq(void); |
251 | 251 | ||
252 | extern int __init mpc52xx_add_bridge(struct device_node *node); | ||
253 | |||
252 | #endif /* __ASSEMBLY__ */ | 254 | #endif /* __ASSEMBLY__ */ |
253 | 255 | ||
254 | #endif /* __ASM_POWERPC_MPC52xx_H__ */ | 256 | #endif /* __ASM_POWERPC_MPC52xx_H__ */ |
diff --git a/include/asm-powerpc/mpc8260.h b/include/asm-powerpc/mpc8260.h new file mode 100644 index 000000000000..f1b83b09ab2e --- /dev/null +++ b/include/asm-powerpc/mpc8260.h | |||
@@ -0,0 +1,24 @@ | |||
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 | #if defined(CONFIG_PQ2ADS) || defined (CONFIG_PQ2FADS) | ||
15 | #include <platforms/82xx/pq2ads.h> | ||
16 | #endif | ||
17 | |||
18 | #ifdef CONFIG_PCI_8260 | ||
19 | #include <platforms/82xx/m82xx_pci.h> | ||
20 | #endif | ||
21 | |||
22 | #endif /* CONFIG_8260 */ | ||
23 | #endif /* !__ASM_PPC_MPC8260_H__ */ | ||
24 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-powerpc/mpc8xx.h b/include/asm-powerpc/mpc8xx.h new file mode 100644 index 000000000000..580371120e1a --- /dev/null +++ b/include/asm-powerpc/mpc8xx.h | |||
@@ -0,0 +1,28 @@ | |||
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_FADS | ||
15 | #include <platforms/fads.h> | ||
16 | #endif | ||
17 | |||
18 | #if defined(CONFIG_MPC86XADS) | ||
19 | #include <platforms/8xx/mpc86xads.h> | ||
20 | #endif | ||
21 | |||
22 | #if defined(CONFIG_MPC885ADS) | ||
23 | #include <platforms/8xx/mpc885ads.h> | ||
24 | #endif | ||
25 | |||
26 | #endif /* CONFIG_8xx */ | ||
27 | #endif /* __CONFIG_8xx_DEFS */ | ||
28 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-powerpc/mpic.h b/include/asm-powerpc/mpic.h index b71e7b32a555..cb204a71e912 100644 --- a/include/asm-powerpc/mpic.h +++ b/include/asm-powerpc/mpic.h | |||
@@ -103,21 +103,6 @@ | |||
103 | #define MPIC_MAX_ISU 32 | 103 | #define MPIC_MAX_ISU 32 |
104 | 104 | ||
105 | /* | 105 | /* |
106 | * Special vector numbers (internal use only) | ||
107 | */ | ||
108 | #define MPIC_VEC_SPURRIOUS 255 | ||
109 | #define MPIC_VEC_IPI_3 254 | ||
110 | #define MPIC_VEC_IPI_2 253 | ||
111 | #define MPIC_VEC_IPI_1 252 | ||
112 | #define MPIC_VEC_IPI_0 251 | ||
113 | |||
114 | /* unused */ | ||
115 | #define MPIC_VEC_TIMER_3 250 | ||
116 | #define MPIC_VEC_TIMER_2 249 | ||
117 | #define MPIC_VEC_TIMER_1 248 | ||
118 | #define MPIC_VEC_TIMER_0 247 | ||
119 | |||
120 | /* | ||
121 | * Tsi108 implementation of MPIC has many differences from the original one | 106 | * Tsi108 implementation of MPIC has many differences from the original one |
122 | */ | 107 | */ |
123 | 108 | ||
@@ -276,6 +261,13 @@ struct mpic | |||
276 | unsigned char *senses; | 261 | unsigned char *senses; |
277 | unsigned int senses_count; | 262 | unsigned int senses_count; |
278 | 263 | ||
264 | /* vector numbers used for internal sources (ipi/timers) */ | ||
265 | unsigned int ipi_vecs[4]; | ||
266 | unsigned int timer_vecs[4]; | ||
267 | |||
268 | /* Spurious vector to program into unused sources */ | ||
269 | unsigned int spurious_vec; | ||
270 | |||
279 | #ifdef CONFIG_MPIC_BROKEN_U3 | 271 | #ifdef CONFIG_MPIC_BROKEN_U3 |
280 | /* The fixup table */ | 272 | /* The fixup table */ |
281 | struct mpic_irq_fixup *fixups; | 273 | struct mpic_irq_fixup *fixups; |
@@ -332,6 +324,8 @@ struct mpic | |||
332 | #define MPIC_NO_PTHROU_DIS 0x00000040 | 324 | #define MPIC_NO_PTHROU_DIS 0x00000040 |
333 | /* DCR based MPIC */ | 325 | /* DCR based MPIC */ |
334 | #define MPIC_USES_DCR 0x00000080 | 326 | #define MPIC_USES_DCR 0x00000080 |
327 | /* MPIC has 11-bit vector fields (or larger) */ | ||
328 | #define MPIC_LARGE_VECTORS 0x00000100 | ||
335 | 329 | ||
336 | /* MPIC HW modification ID */ | 330 | /* MPIC HW modification ID */ |
337 | #define MPIC_REGSET_MASK 0xf0000000 | 331 | #define MPIC_REGSET_MASK 0xf0000000 |
diff --git a/include/asm-powerpc/oprofile_impl.h b/include/asm-powerpc/oprofile_impl.h index 71043bf3641f..94c0ad2bff96 100644 --- a/include/asm-powerpc/oprofile_impl.h +++ b/include/asm-powerpc/oprofile_impl.h | |||
@@ -58,10 +58,8 @@ extern struct op_powerpc_model op_model_power4; | |||
58 | extern struct op_powerpc_model op_model_7450; | 58 | extern struct op_powerpc_model op_model_7450; |
59 | extern struct op_powerpc_model op_model_cell; | 59 | extern struct op_powerpc_model op_model_cell; |
60 | 60 | ||
61 | #ifndef CONFIG_FSL_BOOKE | ||
62 | |||
63 | /* All the classic PPC parts use these */ | 61 | /* All the classic PPC parts use these */ |
64 | static inline unsigned int ctr_read(unsigned int i) | 62 | static inline unsigned int classic_ctr_read(unsigned int i) |
65 | { | 63 | { |
66 | switch(i) { | 64 | switch(i) { |
67 | case 0: | 65 | case 0: |
@@ -89,7 +87,7 @@ static inline unsigned int ctr_read(unsigned int i) | |||
89 | } | 87 | } |
90 | } | 88 | } |
91 | 89 | ||
92 | static inline void ctr_write(unsigned int i, unsigned int val) | 90 | static inline void classic_ctr_write(unsigned int i, unsigned int val) |
93 | { | 91 | { |
94 | switch(i) { | 92 | switch(i) { |
95 | case 0: | 93 | case 0: |
@@ -124,89 +122,6 @@ static inline void ctr_write(unsigned int i, unsigned int val) | |||
124 | break; | 122 | break; |
125 | } | 123 | } |
126 | } | 124 | } |
127 | #else /* CONFIG_FSL_BOOKE */ | ||
128 | static inline u32 get_pmlca(int ctr) | ||
129 | { | ||
130 | u32 pmlca; | ||
131 | |||
132 | switch (ctr) { | ||
133 | case 0: | ||
134 | pmlca = mfpmr(PMRN_PMLCA0); | ||
135 | break; | ||
136 | case 1: | ||
137 | pmlca = mfpmr(PMRN_PMLCA1); | ||
138 | break; | ||
139 | case 2: | ||
140 | pmlca = mfpmr(PMRN_PMLCA2); | ||
141 | break; | ||
142 | case 3: | ||
143 | pmlca = mfpmr(PMRN_PMLCA3); | ||
144 | break; | ||
145 | default: | ||
146 | panic("Bad ctr number\n"); | ||
147 | } | ||
148 | |||
149 | return pmlca; | ||
150 | } | ||
151 | |||
152 | static inline void set_pmlca(int ctr, u32 pmlca) | ||
153 | { | ||
154 | switch (ctr) { | ||
155 | case 0: | ||
156 | mtpmr(PMRN_PMLCA0, pmlca); | ||
157 | break; | ||
158 | case 1: | ||
159 | mtpmr(PMRN_PMLCA1, pmlca); | ||
160 | break; | ||
161 | case 2: | ||
162 | mtpmr(PMRN_PMLCA2, pmlca); | ||
163 | break; | ||
164 | case 3: | ||
165 | mtpmr(PMRN_PMLCA3, pmlca); | ||
166 | break; | ||
167 | default: | ||
168 | panic("Bad ctr number\n"); | ||
169 | } | ||
170 | } | ||
171 | |||
172 | static inline unsigned int ctr_read(unsigned int i) | ||
173 | { | ||
174 | switch(i) { | ||
175 | case 0: | ||
176 | return mfpmr(PMRN_PMC0); | ||
177 | case 1: | ||
178 | return mfpmr(PMRN_PMC1); | ||
179 | case 2: | ||
180 | return mfpmr(PMRN_PMC2); | ||
181 | case 3: | ||
182 | return mfpmr(PMRN_PMC3); | ||
183 | default: | ||
184 | return 0; | ||
185 | } | ||
186 | } | ||
187 | |||
188 | static inline void ctr_write(unsigned int i, unsigned int val) | ||
189 | { | ||
190 | switch(i) { | ||
191 | case 0: | ||
192 | mtpmr(PMRN_PMC0, val); | ||
193 | break; | ||
194 | case 1: | ||
195 | mtpmr(PMRN_PMC1, val); | ||
196 | break; | ||
197 | case 2: | ||
198 | mtpmr(PMRN_PMC2, val); | ||
199 | break; | ||
200 | case 3: | ||
201 | mtpmr(PMRN_PMC3, val); | ||
202 | break; | ||
203 | default: | ||
204 | break; | ||
205 | } | ||
206 | } | ||
207 | |||
208 | |||
209 | #endif /* CONFIG_FSL_BOOKE */ | ||
210 | 125 | ||
211 | 126 | ||
212 | extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth); | 127 | extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth); |
diff --git a/include/asm-powerpc/pci-bridge.h b/include/asm-powerpc/pci-bridge.h index cb02c9d1ef93..d9bf5aba96cb 100644 --- a/include/asm-powerpc/pci-bridge.h +++ b/include/asm-powerpc/pci-bridge.h | |||
@@ -53,6 +53,8 @@ struct pci_controller { | |||
53 | unsigned long buid; | 53 | unsigned long buid; |
54 | unsigned long dma_window_base_cur; | 54 | unsigned long dma_window_base_cur; |
55 | unsigned long dma_window_size; | 55 | unsigned long dma_window_size; |
56 | |||
57 | void *private_data; | ||
56 | }; | 58 | }; |
57 | 59 | ||
58 | /* | 60 | /* |
diff --git a/include/asm-powerpc/ps3.h b/include/asm-powerpc/ps3.h index 52a69ed0d90a..4f5a1e01fdac 100644 --- a/include/asm-powerpc/ps3.h +++ b/include/asm-powerpc/ps3.h | |||
@@ -21,11 +21,33 @@ | |||
21 | #if !defined(_ASM_POWERPC_PS3_H) | 21 | #if !defined(_ASM_POWERPC_PS3_H) |
22 | #define _ASM_POWERPC_PS3_H | 22 | #define _ASM_POWERPC_PS3_H |
23 | 23 | ||
24 | #include <linux/compiler.h> /* for __deprecated */ | ||
25 | #include <linux/init.h> | 24 | #include <linux/init.h> |
26 | #include <linux/types.h> | 25 | #include <linux/types.h> |
27 | #include <linux/device.h> | 26 | #include <linux/device.h> |
28 | 27 | ||
28 | union ps3_firmware_version { | ||
29 | u64 raw; | ||
30 | struct { | ||
31 | u16 pad; | ||
32 | u16 major; | ||
33 | u16 minor; | ||
34 | u16 rev; | ||
35 | }; | ||
36 | }; | ||
37 | |||
38 | int ps3_get_firmware_version(union ps3_firmware_version *v); | ||
39 | |||
40 | /* 'Other OS' area */ | ||
41 | |||
42 | enum ps3_param_av_multi_out { | ||
43 | PS3_PARAM_AV_MULTI_OUT_NTSC = 0, | ||
44 | PS3_PARAM_AV_MULTI_OUT_PAL_RGB = 1, | ||
45 | PS3_PARAM_AV_MULTI_OUT_PAL_YCBCR = 2, | ||
46 | PS3_PARAM_AV_MULTI_OUT_SECAM = 3, | ||
47 | }; | ||
48 | |||
49 | enum ps3_param_av_multi_out ps3_os_area_get_av_multi_out(void); | ||
50 | |||
29 | /** | 51 | /** |
30 | * struct ps3_device_id - HV bus device identifier from the system repository | 52 | * struct ps3_device_id - HV bus device identifier from the system repository |
31 | * @bus_id: HV bus id, {1..} (zero invalid) | 53 | * @bus_id: HV bus id, {1..} (zero invalid) |
@@ -139,20 +161,32 @@ unsigned long ps3_mm_phys_to_lpar(unsigned long phys_addr); | |||
139 | 161 | ||
140 | /* inrerrupt routines */ | 162 | /* inrerrupt routines */ |
141 | 163 | ||
142 | int ps3_alloc_io_irq(unsigned int interrupt_id, unsigned int *virq); | 164 | enum ps3_cpu_binding { |
165 | PS3_BINDING_CPU_ANY = -1, | ||
166 | PS3_BINDING_CPU_0 = 0, | ||
167 | PS3_BINDING_CPU_1 = 1, | ||
168 | }; | ||
169 | |||
170 | int ps3_alloc_io_irq(enum ps3_cpu_binding cpu, unsigned int interrupt_id, | ||
171 | unsigned int *virq); | ||
143 | int ps3_free_io_irq(unsigned int virq); | 172 | int ps3_free_io_irq(unsigned int virq); |
144 | int ps3_alloc_event_irq(unsigned int *virq); | 173 | int ps3_alloc_event_irq(enum ps3_cpu_binding cpu, unsigned int *virq); |
145 | int ps3_free_event_irq(unsigned int virq); | 174 | int ps3_free_event_irq(unsigned int virq); |
146 | int ps3_send_event_locally(unsigned int virq); | 175 | int ps3_send_event_locally(unsigned int virq); |
147 | int ps3_connect_event_irq(const struct ps3_device_id *did, | 176 | int ps3_connect_event_irq(enum ps3_cpu_binding cpu, |
148 | unsigned int interrupt_id, unsigned int *virq); | 177 | const struct ps3_device_id *did, unsigned int interrupt_id, |
178 | unsigned int *virq); | ||
149 | int ps3_disconnect_event_irq(const struct ps3_device_id *did, | 179 | int ps3_disconnect_event_irq(const struct ps3_device_id *did, |
150 | unsigned int interrupt_id, unsigned int virq); | 180 | unsigned int interrupt_id, unsigned int virq); |
151 | int ps3_alloc_vuart_irq(void* virt_addr_bmp, unsigned int *virq); | 181 | int ps3_alloc_vuart_irq(enum ps3_cpu_binding cpu, void* virt_addr_bmp, |
152 | int ps3_free_vuart_irq(unsigned int virq); | ||
153 | int ps3_alloc_spe_irq(unsigned long spe_id, unsigned int class, | ||
154 | unsigned int *virq); | 182 | unsigned int *virq); |
183 | int ps3_free_vuart_irq(unsigned int virq); | ||
184 | int ps3_alloc_spe_irq(enum ps3_cpu_binding cpu, unsigned long spe_id, | ||
185 | unsigned int class, unsigned int *virq); | ||
155 | int ps3_free_spe_irq(unsigned int virq); | 186 | int ps3_free_spe_irq(unsigned int virq); |
187 | int ps3_alloc_irq(enum ps3_cpu_binding cpu, unsigned long outlet, | ||
188 | unsigned int *virq); | ||
189 | int ps3_free_irq(unsigned int virq); | ||
156 | 190 | ||
157 | /* lv1 result codes */ | 191 | /* lv1 result codes */ |
158 | 192 | ||
@@ -247,146 +281,6 @@ static inline const char* ps3_result(int result) | |||
247 | #endif | 281 | #endif |
248 | } | 282 | } |
249 | 283 | ||
250 | /* repository bus info */ | ||
251 | |||
252 | enum ps3_bus_type { | ||
253 | PS3_BUS_TYPE_SB = 4, | ||
254 | PS3_BUS_TYPE_STORAGE = 5, | ||
255 | }; | ||
256 | |||
257 | enum ps3_dev_type { | ||
258 | PS3_DEV_TYPE_SB_GELIC = 3, | ||
259 | PS3_DEV_TYPE_SB_USB = 4, | ||
260 | PS3_DEV_TYPE_SB_GPIO = 6, | ||
261 | }; | ||
262 | |||
263 | int ps3_repository_read_bus_str(unsigned int bus_index, const char *bus_str, | ||
264 | u64 *value); | ||
265 | int ps3_repository_read_bus_id(unsigned int bus_index, unsigned int *bus_id); | ||
266 | int ps3_repository_read_bus_type(unsigned int bus_index, | ||
267 | enum ps3_bus_type *bus_type); | ||
268 | int ps3_repository_read_bus_num_dev(unsigned int bus_index, | ||
269 | unsigned int *num_dev); | ||
270 | |||
271 | /* repository bus device info */ | ||
272 | |||
273 | enum ps3_interrupt_type { | ||
274 | PS3_INTERRUPT_TYPE_EVENT_PORT = 2, | ||
275 | PS3_INTERRUPT_TYPE_SB_OHCI = 3, | ||
276 | PS3_INTERRUPT_TYPE_SB_EHCI = 4, | ||
277 | PS3_INTERRUPT_TYPE_OTHER = 5, | ||
278 | }; | ||
279 | |||
280 | enum ps3_region_type { | ||
281 | PS3_REGION_TYPE_SB_OHCI = 3, | ||
282 | PS3_REGION_TYPE_SB_EHCI = 4, | ||
283 | PS3_REGION_TYPE_SB_GPIO = 5, | ||
284 | }; | ||
285 | |||
286 | int ps3_repository_read_dev_str(unsigned int bus_index, | ||
287 | unsigned int dev_index, const char *dev_str, u64 *value); | ||
288 | int ps3_repository_read_dev_id(unsigned int bus_index, unsigned int dev_index, | ||
289 | unsigned int *dev_id); | ||
290 | int ps3_repository_read_dev_type(unsigned int bus_index, | ||
291 | unsigned int dev_index, enum ps3_dev_type *dev_type); | ||
292 | int ps3_repository_read_dev_intr(unsigned int bus_index, | ||
293 | unsigned int dev_index, unsigned int intr_index, | ||
294 | enum ps3_interrupt_type *intr_type, unsigned int *interrupt_id); | ||
295 | int ps3_repository_read_dev_reg_type(unsigned int bus_index, | ||
296 | unsigned int dev_index, unsigned int reg_index, | ||
297 | enum ps3_region_type *reg_type); | ||
298 | int ps3_repository_read_dev_reg_addr(unsigned int bus_index, | ||
299 | unsigned int dev_index, unsigned int reg_index, u64 *bus_addr, | ||
300 | u64 *len); | ||
301 | int ps3_repository_read_dev_reg(unsigned int bus_index, | ||
302 | unsigned int dev_index, unsigned int reg_index, | ||
303 | enum ps3_region_type *reg_type, u64 *bus_addr, u64 *len); | ||
304 | |||
305 | /* repository bus enumerators */ | ||
306 | |||
307 | struct ps3_repository_device { | ||
308 | unsigned int bus_index; | ||
309 | unsigned int dev_index; | ||
310 | struct ps3_device_id did; | ||
311 | }; | ||
312 | |||
313 | int ps3_repository_find_device(enum ps3_bus_type bus_type, | ||
314 | enum ps3_dev_type dev_type, | ||
315 | const struct ps3_repository_device *start_dev, | ||
316 | struct ps3_repository_device *dev); | ||
317 | static inline int ps3_repository_find_first_device( | ||
318 | enum ps3_bus_type bus_type, enum ps3_dev_type dev_type, | ||
319 | struct ps3_repository_device *dev) | ||
320 | { | ||
321 | return ps3_repository_find_device(bus_type, dev_type, NULL, dev); | ||
322 | } | ||
323 | int ps3_repository_find_interrupt(const struct ps3_repository_device *dev, | ||
324 | enum ps3_interrupt_type intr_type, unsigned int *interrupt_id); | ||
325 | int ps3_repository_find_region(const struct ps3_repository_device *dev, | ||
326 | enum ps3_region_type reg_type, u64 *bus_addr, u64 *len); | ||
327 | |||
328 | /* repository block device info */ | ||
329 | |||
330 | int ps3_repository_read_dev_port(unsigned int bus_index, | ||
331 | unsigned int dev_index, u64 *port); | ||
332 | int ps3_repository_read_dev_blk_size(unsigned int bus_index, | ||
333 | unsigned int dev_index, u64 *blk_size); | ||
334 | int ps3_repository_read_dev_num_blocks(unsigned int bus_index, | ||
335 | unsigned int dev_index, u64 *num_blocks); | ||
336 | int ps3_repository_read_dev_num_regions(unsigned int bus_index, | ||
337 | unsigned int dev_index, unsigned int *num_regions); | ||
338 | int ps3_repository_read_dev_region_id(unsigned int bus_index, | ||
339 | unsigned int dev_index, unsigned int region_index, | ||
340 | unsigned int *region_id); | ||
341 | int ps3_repository_read_dev_region_size(unsigned int bus_index, | ||
342 | unsigned int dev_index, unsigned int region_index, u64 *region_size); | ||
343 | int ps3_repository_read_dev_region_start(unsigned int bus_index, | ||
344 | unsigned int dev_index, unsigned int region_index, u64 *region_start); | ||
345 | |||
346 | /* repository pu and memory info */ | ||
347 | |||
348 | int ps3_repository_read_num_pu(unsigned int *num_pu); | ||
349 | int ps3_repository_read_ppe_id(unsigned int *pu_index, unsigned int *ppe_id); | ||
350 | int ps3_repository_read_rm_base(unsigned int ppe_id, u64 *rm_base); | ||
351 | int ps3_repository_read_rm_size(unsigned int ppe_id, u64 *rm_size); | ||
352 | int ps3_repository_read_region_total(u64 *region_total); | ||
353 | int ps3_repository_read_mm_info(u64 *rm_base, u64 *rm_size, | ||
354 | u64 *region_total); | ||
355 | |||
356 | /* repository pme info */ | ||
357 | |||
358 | int ps3_repository_read_num_be(unsigned int *num_be); | ||
359 | int ps3_repository_read_be_node_id(unsigned int be_index, u64 *node_id); | ||
360 | int ps3_repository_read_tb_freq(u64 node_id, u64 *tb_freq); | ||
361 | int ps3_repository_read_be_tb_freq(unsigned int be_index, u64 *tb_freq); | ||
362 | |||
363 | /* repository 'Other OS' area */ | ||
364 | |||
365 | int ps3_repository_read_boot_dat_addr(u64 *lpar_addr); | ||
366 | int ps3_repository_read_boot_dat_size(unsigned int *size); | ||
367 | int ps3_repository_read_boot_dat_info(u64 *lpar_addr, unsigned int *size); | ||
368 | |||
369 | /* repository spu info */ | ||
370 | |||
371 | /** | ||
372 | * enum spu_resource_type - Type of spu resource. | ||
373 | * @spu_resource_type_shared: Logical spu is shared with other partions. | ||
374 | * @spu_resource_type_exclusive: Logical spu is not shared with other partions. | ||
375 | * | ||
376 | * Returned by ps3_repository_read_spu_resource_id(). | ||
377 | */ | ||
378 | |||
379 | enum ps3_spu_resource_type { | ||
380 | PS3_SPU_RESOURCE_TYPE_SHARED = 0, | ||
381 | PS3_SPU_RESOURCE_TYPE_EXCLUSIVE = 0x8000000000000000UL, | ||
382 | }; | ||
383 | |||
384 | int ps3_repository_read_num_spu_reserved(unsigned int *num_spu_reserved); | ||
385 | int ps3_repository_read_num_spu_resource_id(unsigned int *num_resource_id); | ||
386 | int ps3_repository_read_spu_resource_id(unsigned int res_index, | ||
387 | enum ps3_spu_resource_type* resource_type, unsigned int *resource_id); | ||
388 | |||
389 | |||
390 | /* system bus routines */ | 284 | /* system bus routines */ |
391 | 285 | ||
392 | enum ps3_match_id { | 286 | enum ps3_match_id { |
@@ -459,4 +353,39 @@ static inline void *ps3_system_bus_get_driver_data( | |||
459 | 353 | ||
460 | extern struct bus_type ps3_system_bus_type; | 354 | extern struct bus_type ps3_system_bus_type; |
461 | 355 | ||
356 | /* vuart routines */ | ||
357 | |||
358 | struct ps3_vuart_stats { | ||
359 | unsigned long bytes_written; | ||
360 | unsigned long bytes_read; | ||
361 | unsigned long tx_interrupts; | ||
362 | unsigned long rx_interrupts; | ||
363 | unsigned long disconnect_interrupts; | ||
364 | }; | ||
365 | |||
366 | /** | ||
367 | * struct ps3_vuart_port_device - a device on a vuart port | ||
368 | */ | ||
369 | |||
370 | struct ps3_vuart_port_device { | ||
371 | enum ps3_match_id match_id; | ||
372 | struct device core; | ||
373 | |||
374 | /* private driver variables */ | ||
375 | unsigned int port_number; | ||
376 | u64 interrupt_mask; | ||
377 | struct { | ||
378 | spinlock_t lock; | ||
379 | struct list_head head; | ||
380 | } tx_list; | ||
381 | struct { | ||
382 | unsigned long bytes_held; | ||
383 | spinlock_t lock; | ||
384 | struct list_head head; | ||
385 | } rx_list; | ||
386 | struct ps3_vuart_stats stats; | ||
387 | }; | ||
388 | |||
389 | int ps3_vuart_port_device_register(struct ps3_vuart_port_device *dev); | ||
390 | |||
462 | #endif | 391 | #endif |
diff --git a/include/asm-powerpc/reg.h b/include/asm-powerpc/reg.h index a3631b15754c..0d7f0164ed81 100644 --- a/include/asm-powerpc/reg.h +++ b/include/asm-powerpc/reg.h | |||
@@ -166,6 +166,7 @@ | |||
166 | #define SPRN_TBWU 0x11D /* Time Base Upper Register (super, R/W) */ | 166 | #define SPRN_TBWU 0x11D /* Time Base Upper Register (super, R/W) */ |
167 | #define SPRN_SPURR 0x134 /* Scaled PURR */ | 167 | #define SPRN_SPURR 0x134 /* Scaled PURR */ |
168 | #define SPRN_HIOR 0x137 /* 970 Hypervisor interrupt offset */ | 168 | #define SPRN_HIOR 0x137 /* 970 Hypervisor interrupt offset */ |
169 | #define SPRN_LPCR 0x13E /* LPAR Control Register */ | ||
169 | #define SPRN_DBAT0L 0x219 /* Data BAT 0 Lower Register */ | 170 | #define SPRN_DBAT0L 0x219 /* Data BAT 0 Lower Register */ |
170 | #define SPRN_DBAT0U 0x218 /* Data BAT 0 Upper Register */ | 171 | #define SPRN_DBAT0U 0x218 /* Data BAT 0 Upper Register */ |
171 | #define SPRN_DBAT1L 0x21B /* Data BAT 1 Lower Register */ | 172 | #define SPRN_DBAT1L 0x21B /* Data BAT 1 Lower Register */ |
@@ -391,6 +392,12 @@ | |||
391 | #define SPRN_HSRR0 0x13A /* Save/Restore Register 0 */ | 392 | #define SPRN_HSRR0 0x13A /* Save/Restore Register 0 */ |
392 | #define SPRN_HSRR1 0x13B /* Save/Restore Register 1 */ | 393 | #define SPRN_HSRR1 0x13B /* Save/Restore Register 1 */ |
393 | 394 | ||
395 | #define SPRN_TBCTL 0x35f /* PA6T Timebase control register */ | ||
396 | #define TBCTL_FREEZE 0x0000000000000000ull /* Freeze all tbs */ | ||
397 | #define TBCTL_RESTART 0x0000000100000000ull /* Restart all tbs */ | ||
398 | #define TBCTL_UPDATE_UPPER 0x0000000200000000ull /* Set upper 32 bits */ | ||
399 | #define TBCTL_UPDATE_LOWER 0x0000000300000000ull /* Set lower 32 bits */ | ||
400 | |||
394 | #ifndef SPRN_SVR | 401 | #ifndef SPRN_SVR |
395 | #define SPRN_SVR 0x11E /* System Version Register */ | 402 | #define SPRN_SVR 0x11E /* System Version Register */ |
396 | #endif | 403 | #endif |
@@ -462,6 +469,13 @@ | |||
462 | #define SPRN_SIAR 780 | 469 | #define SPRN_SIAR 780 |
463 | #define SPRN_SDAR 781 | 470 | #define SPRN_SDAR 781 |
464 | 471 | ||
472 | #define PA6T_SPRN_PMC0 787 | ||
473 | #define PA6T_SPRN_PMC1 788 | ||
474 | #define PA6T_SPRN_PMC2 789 | ||
475 | #define PA6T_SPRN_PMC3 790 | ||
476 | #define PA6T_SPRN_PMC4 791 | ||
477 | #define PA6T_SPRN_PMC5 792 | ||
478 | |||
465 | #else /* 32-bit */ | 479 | #else /* 32-bit */ |
466 | #define SPRN_MMCR0 952 /* Monitor Mode Control Register 0 */ | 480 | #define SPRN_MMCR0 952 /* Monitor Mode Control Register 0 */ |
467 | #define MMCR0_FC 0x80000000UL /* freeze counters */ | 481 | #define MMCR0_FC 0x80000000UL /* freeze counters */ |
diff --git a/include/asm-powerpc/smp.h b/include/asm-powerpc/smp.h index 20ea7c70bc38..01717f266dc9 100644 --- a/include/asm-powerpc/smp.h +++ b/include/asm-powerpc/smp.h | |||
@@ -75,6 +75,7 @@ extern cpumask_t cpu_sibling_map[NR_CPUS]; | |||
75 | void smp_init_iSeries(void); | 75 | void smp_init_iSeries(void); |
76 | void smp_init_pSeries(void); | 76 | void smp_init_pSeries(void); |
77 | void smp_init_cell(void); | 77 | void smp_init_cell(void); |
78 | void smp_init_celleb(void); | ||
78 | void smp_setup_cpu_maps(void); | 79 | void smp_setup_cpu_maps(void); |
79 | 80 | ||
80 | extern int __cpu_disable(void); | 81 | extern int __cpu_disable(void); |
diff --git a/include/asm-powerpc/spu.h b/include/asm-powerpc/spu.h index 3d90264e9d36..b634e16575f2 100644 --- a/include/asm-powerpc/spu.h +++ b/include/asm-powerpc/spu.h | |||
@@ -104,6 +104,7 @@ | |||
104 | 104 | ||
105 | struct spu_context; | 105 | struct spu_context; |
106 | struct spu_runqueue; | 106 | struct spu_runqueue; |
107 | struct device_node; | ||
107 | 108 | ||
108 | struct spu { | 109 | struct spu { |
109 | const char *name; | 110 | const char *name; |
@@ -142,7 +143,19 @@ struct spu { | |||
142 | char irq_c1[8]; | 143 | char irq_c1[8]; |
143 | char irq_c2[8]; | 144 | char irq_c2[8]; |
144 | 145 | ||
146 | u64 spe_id; | ||
147 | |||
145 | void* pdata; /* platform private data */ | 148 | void* pdata; /* platform private data */ |
149 | |||
150 | /* of based platforms only */ | ||
151 | struct device_node *devnode; | ||
152 | |||
153 | /* native only */ | ||
154 | struct spu_priv1 __iomem *priv1; | ||
155 | |||
156 | /* beat only */ | ||
157 | u64 shadow_int_mask_RW[3]; | ||
158 | |||
146 | struct sys_device sysdev; | 159 | struct sys_device sysdev; |
147 | }; | 160 | }; |
148 | 161 | ||
diff --git a/include/asm-powerpc/spu_priv1.h b/include/asm-powerpc/spu_priv1.h index 69dcb0c53884..7e78f6a1ab8b 100644 --- a/include/asm-powerpc/spu_priv1.h +++ b/include/asm-powerpc/spu_priv1.h | |||
@@ -206,6 +206,8 @@ spu_destroy_spu (struct spu *spu) | |||
206 | */ | 206 | */ |
207 | 207 | ||
208 | extern const struct spu_priv1_ops spu_priv1_mmio_ops; | 208 | extern const struct spu_priv1_ops spu_priv1_mmio_ops; |
209 | extern const struct spu_priv1_ops spu_priv1_beat_ops; | ||
210 | |||
209 | extern const struct spu_management_ops spu_management_of_ops; | 211 | extern const struct spu_management_ops spu_management_of_ops; |
210 | 212 | ||
211 | #endif /* __KERNEL__ */ | 213 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/sstep.h b/include/asm-powerpc/sstep.h index 630a9889c07c..f593b0f9b627 100644 --- a/include/asm-powerpc/sstep.h +++ b/include/asm-powerpc/sstep.h | |||
@@ -21,6 +21,7 @@ struct pt_regs; | |||
21 | */ | 21 | */ |
22 | #define IS_MTMSRD(instr) (((instr) & 0xfc0007be) == 0x7c000124) | 22 | #define IS_MTMSRD(instr) (((instr) & 0xfc0007be) == 0x7c000124) |
23 | #define IS_RFID(instr) (((instr) & 0xfc0007fe) == 0x4c000024) | 23 | #define IS_RFID(instr) (((instr) & 0xfc0007fe) == 0x4c000024) |
24 | #define IS_RFI(instr) (((instr) & 0xfc0007fe) == 0x4c000064) | ||
24 | 25 | ||
25 | /* Emulate instructions that cause a transfer of control. */ | 26 | /* Emulate instructions that cause a transfer of control. */ |
26 | extern int emulate_step(struct pt_regs *regs, unsigned int instr); | 27 | extern int emulate_step(struct pt_regs *regs, unsigned int instr); |
diff --git a/include/asm-powerpc/time.h b/include/asm-powerpc/time.h index 4cff977ad526..3fd57c048f59 100644 --- a/include/asm-powerpc/time.h +++ b/include/asm-powerpc/time.h | |||
@@ -39,6 +39,8 @@ extern void generic_calibrate_decr(void); | |||
39 | extern void wakeup_decrementer(void); | 39 | extern void wakeup_decrementer(void); |
40 | extern void snapshot_timebase(void); | 40 | extern void snapshot_timebase(void); |
41 | 41 | ||
42 | extern void set_dec_cpu6(unsigned int val); | ||
43 | |||
42 | /* Some sane defaults: 125 MHz timebase, 1GHz processor */ | 44 | /* Some sane defaults: 125 MHz timebase, 1GHz processor */ |
43 | extern unsigned long ppc_proc_freq; | 45 | extern unsigned long ppc_proc_freq; |
44 | #define DEFAULT_PROC_FREQ (DEFAULT_TB_FREQ * 8) | 46 | #define DEFAULT_PROC_FREQ (DEFAULT_TB_FREQ * 8) |
diff --git a/include/asm-powerpc/udbg.h b/include/asm-powerpc/udbg.h index 55e57844fa78..4cbc313aa02a 100644 --- a/include/asm-powerpc/udbg.h +++ b/include/asm-powerpc/udbg.h | |||
@@ -41,9 +41,11 @@ extern void __init udbg_early_init(void); | |||
41 | extern void __init udbg_init_debug_lpar(void); | 41 | extern void __init udbg_init_debug_lpar(void); |
42 | extern void __init udbg_init_pmac_realmode(void); | 42 | extern void __init udbg_init_pmac_realmode(void); |
43 | extern void __init udbg_init_maple_realmode(void); | 43 | extern void __init udbg_init_maple_realmode(void); |
44 | extern void __init udbg_init_pas_realmode(void); | ||
44 | extern void __init udbg_init_iseries(void); | 45 | extern void __init udbg_init_iseries(void); |
45 | extern void __init udbg_init_rtas_panel(void); | 46 | extern void __init udbg_init_rtas_panel(void); |
46 | extern void __init udbg_init_rtas_console(void); | 47 | extern void __init udbg_init_rtas_console(void); |
48 | extern void __init udbg_init_debug_beat(void); | ||
47 | 49 | ||
48 | #endif /* __KERNEL__ */ | 50 | #endif /* __KERNEL__ */ |
49 | #endif /* _ASM_POWERPC_UDBG_H */ | 51 | #endif /* _ASM_POWERPC_UDBG_H */ |
diff --git a/include/asm-ppc/commproc.h b/include/asm-ppc/commproc.h index 7b06b4e6bf30..4f99df1bafd7 100644 --- a/include/asm-ppc/commproc.h +++ b/include/asm-ppc/commproc.h | |||
@@ -77,6 +77,7 @@ extern int cpm_dpfree(uint offset); | |||
77 | extern uint cpm_dpalloc_fixed(uint offset, uint size, uint align); | 77 | extern uint cpm_dpalloc_fixed(uint offset, uint size, uint align); |
78 | extern void cpm_dpdump(void); | 78 | extern void cpm_dpdump(void); |
79 | extern void *cpm_dpram_addr(uint offset); | 79 | extern void *cpm_dpram_addr(uint offset); |
80 | extern uint cpm_dpram_phys(u8* addr); | ||
80 | extern void cpm_setbrg(uint brg, uint rate); | 81 | extern void cpm_setbrg(uint brg, uint rate); |
81 | 82 | ||
82 | extern uint m8xx_cpm_hostalloc(uint size); | 83 | extern uint m8xx_cpm_hostalloc(uint size); |
diff --git a/include/asm-ppc/ibm4xx.h b/include/asm-ppc/ibm4xx.h index 499c14691c71..7a64ede53bb6 100644 --- a/include/asm-ppc/ibm4xx.h +++ b/include/asm-ppc/ibm4xx.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #define __ASM_IBM4XX_H__ | 15 | #define __ASM_IBM4XX_H__ |
16 | 16 | ||
17 | #include <asm/types.h> | 17 | #include <asm/types.h> |
18 | #include <asm/dcr.h> | ||
18 | 19 | ||
19 | #ifdef CONFIG_40x | 20 | #ifdef CONFIG_40x |
20 | 21 | ||
diff --git a/include/asm-ppc/m48t35.h b/include/asm-ppc/m48t35.h deleted file mode 100644 index a5277ea4b194..000000000000 --- a/include/asm-ppc/m48t35.h +++ /dev/null | |||
@@ -1,77 +0,0 @@ | |||
1 | /* | ||
2 | * Registers for the SGS-Thomson M48T35 Timekeeper RAM chip | ||
3 | * and | ||
4 | * Registers for the SGS-Thomson M48T37 Timekeeper RAM chip | ||
5 | * The 37 is the 35 plus alarm and century thus the offsets | ||
6 | * are shifted by the extra registers. | ||
7 | */ | ||
8 | |||
9 | #ifndef __PPC_M48T35_H | ||
10 | #define __PPC_M48T35_H | ||
11 | |||
12 | /* RTC offsets */ | ||
13 | #define M48T35_RTC_FLAGS (-8) /* the negative regs are really T37 only */ | ||
14 | #define M48T35_RTC_CENTURY (-7) | ||
15 | #define M48T35_RTC_AL_SEC (-6) | ||
16 | #define M48T35_RTC_AL_MIN (-5) | ||
17 | #define M48T35_RTC_AL_HRS (-4) | ||
18 | #define M48T35_RTC_AL_DOM (-3) | ||
19 | #define M48T35_RTC_INTERRUPT (-2) | ||
20 | #define M48T35_RTC_WATCHDOG (-1) | ||
21 | #define M48T35_RTC_CONTROL 0 /* T35 starts here */ | ||
22 | #define M48T35_RTC_SECONDS 1 | ||
23 | #define M48T35_RTC_MINUTES 2 | ||
24 | #define M48T35_RTC_HOURS 3 | ||
25 | #define M48T35_RTC_DAY 4 | ||
26 | #define M48T35_RTC_DOM 5 | ||
27 | #define M48T35_RTC_MONTH 6 | ||
28 | #define M48T35_RTC_YEAR 7 | ||
29 | |||
30 | /* this way help us know which bits go with which regs */ | ||
31 | #define M48T35_RTC_FLAGS_BL 0x10 | ||
32 | #define M48T35_RTC_FLAGS_AF 0x40 | ||
33 | #define M48T35_RTC_FLAGS_WDF 0x80 | ||
34 | |||
35 | #define M48T35_RTC_INTERRUPT_AFE 0x80 | ||
36 | #define M48T35_RTC_INTERRUPT_ABE 0x20 | ||
37 | #define M48T35_RTC_INTERRUPT_ALL (M48T35_RTC_INTERRUPT_AFE|M48T35_RTC_INTERRUPT_ABE) | ||
38 | |||
39 | #define M48T35_RTC_WATCHDOG_RB 0x03 | ||
40 | #define M48T35_RTC_WATCHDOG_BMB 0x7c | ||
41 | #define M48T35_RTC_WATCHDOG_WDS 0x80 | ||
42 | #define M48T35_RTC_WATCHDOG_ALL (M48T35_RTC_WATCHDOG_RB|M48T35_RTC_WATCHDOG_BMB|M48T35_RTC_W) | ||
43 | |||
44 | #define M48T35_RTC_CONTROL_WRITE 0x80 | ||
45 | #define M48T35_RTC_CONTROL_READ 0x40 | ||
46 | #define M48T35_RTC_CONTROL_CAL_SIGN 0x20 | ||
47 | #define M48T35_RTC_CONTROL_CAL_VALUE 0x1f | ||
48 | #define M48T35_RTC_CONTROL_LOCKED (M48T35_RTC_WRITE|M48T35_RTC_READ) | ||
49 | #define M48T35_RTC_CONTROL_CALIBRATION (M48T35_RTC_CONTROL_CAL_SIGN|M48T35_RTC_CONTROL_CAL_VALUE) | ||
50 | |||
51 | #define M48T35_RTC_SECONDS_SEC_1 0x0f | ||
52 | #define M48T35_RTC_SECONDS_SEC_10 0x70 | ||
53 | #define M48T35_RTC_SECONDS_ST 0x80 | ||
54 | #define M48T35_RTC_SECONDS_SEC_ALL (M48T35_RTC_SECONDS_SEC_1|M48T35_RTC_SECONDS_SEC_10) | ||
55 | |||
56 | #define M48T35_RTC_MINUTES_MIN_1 0x0f | ||
57 | #define M48T35_RTC_MINUTES_MIN_10 0x70 | ||
58 | #define M48T35_RTC_MINUTES_MIN_ALL (M48T35_RTC_MINUTES_MIN_1|M48T35_RTC_MINUTES_MIN_10) | ||
59 | |||
60 | #define M48T35_RTC_HOURS_HRS_1 0x0f | ||
61 | #define M48T35_RTC_HOURS_HRS_10 0x30 | ||
62 | #define M48T35_RTC_HOURS_HRS_ALL (M48T35_RTC_HOURS_HRS_1|M48T35_RTC_HOURS_HRS_10) | ||
63 | |||
64 | #define M48T35_RTC_DAY_DAY_1 0x03 | ||
65 | #define M48T35_RTC_DAY_FT 0x40 | ||
66 | |||
67 | #define M48T35_RTC_ALARM_OFF 0x00 | ||
68 | #define M48T35_RTC_WATCHDOG_OFF 0x00 | ||
69 | |||
70 | |||
71 | /* legacy */ | ||
72 | #define M48T35_RTC_SET 0x80 | ||
73 | #define M48T35_RTC_STOPPED 0x80 | ||
74 | #define M48T35_RTC_READ 0x40 | ||
75 | |||
76 | |||
77 | #endif | ||
diff --git a/include/asm-ppc/reg_booke.h b/include/asm-ppc/reg_booke.h index a263fc1e65c4..82948ed2744a 100644 --- a/include/asm-ppc/reg_booke.h +++ b/include/asm-ppc/reg_booke.h | |||
@@ -9,8 +9,6 @@ | |||
9 | #ifndef __ASM_PPC_REG_BOOKE_H__ | 9 | #ifndef __ASM_PPC_REG_BOOKE_H__ |
10 | #define __ASM_PPC_REG_BOOKE_H__ | 10 | #define __ASM_PPC_REG_BOOKE_H__ |
11 | 11 | ||
12 | #include <asm/dcr.h> | ||
13 | |||
14 | #ifndef __ASSEMBLY__ | 12 | #ifndef __ASSEMBLY__ |
15 | /* Performance Monitor Registers */ | 13 | /* Performance Monitor Registers */ |
16 | #define mfpmr(rn) ({unsigned int rval; \ | 14 | #define mfpmr(rn) ({unsigned int rval; \ |
diff --git a/include/asm-ppc/serial.h b/include/asm-ppc/serial.h index 8a59f8871f32..8fc1b546613d 100644 --- a/include/asm-ppc/serial.h +++ b/include/asm-ppc/serial.h | |||
@@ -11,8 +11,6 @@ | |||
11 | #include <platforms/ev64260.h> | 11 | #include <platforms/ev64260.h> |
12 | #elif defined(CONFIG_CHESTNUT) | 12 | #elif defined(CONFIG_CHESTNUT) |
13 | #include <platforms/chestnut.h> | 13 | #include <platforms/chestnut.h> |
14 | #elif defined(CONFIG_GEMINI) | ||
15 | #include <platforms/gemini_serial.h> | ||
16 | #elif defined(CONFIG_POWERPMC250) | 14 | #elif defined(CONFIG_POWERPMC250) |
17 | #include <platforms/powerpmc250.h> | 15 | #include <platforms/powerpmc250.h> |
18 | #elif defined(CONFIG_LOPEC) | 16 | #elif defined(CONFIG_LOPEC) |
diff --git a/include/asm-s390/compat.h b/include/asm-s390/compat.h index 356a0b183539..296f4f1a20e1 100644 --- a/include/asm-s390/compat.h +++ b/include/asm-s390/compat.h | |||
@@ -6,6 +6,34 @@ | |||
6 | #include <linux/types.h> | 6 | #include <linux/types.h> |
7 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
8 | 8 | ||
9 | #define PSW32_MASK_PER 0x40000000UL | ||
10 | #define PSW32_MASK_DAT 0x04000000UL | ||
11 | #define PSW32_MASK_IO 0x02000000UL | ||
12 | #define PSW32_MASK_EXT 0x01000000UL | ||
13 | #define PSW32_MASK_KEY 0x00F00000UL | ||
14 | #define PSW32_MASK_MCHECK 0x00040000UL | ||
15 | #define PSW32_MASK_WAIT 0x00020000UL | ||
16 | #define PSW32_MASK_PSTATE 0x00010000UL | ||
17 | #define PSW32_MASK_ASC 0x0000C000UL | ||
18 | #define PSW32_MASK_CC 0x00003000UL | ||
19 | #define PSW32_MASK_PM 0x00000f00UL | ||
20 | |||
21 | #define PSW32_ADDR_AMODE31 0x80000000UL | ||
22 | #define PSW32_ADDR_INSN 0x7FFFFFFFUL | ||
23 | |||
24 | #define PSW32_BASE_BITS 0x00080000UL | ||
25 | |||
26 | #define PSW32_ASC_PRIMARY 0x00000000UL | ||
27 | #define PSW32_ASC_ACCREG 0x00004000UL | ||
28 | #define PSW32_ASC_SECONDARY 0x00008000UL | ||
29 | #define PSW32_ASC_HOME 0x0000C000UL | ||
30 | |||
31 | #define PSW32_MASK_MERGE(CURRENT,NEW) \ | ||
32 | (((CURRENT) & ~(PSW32_MASK_CC|PSW32_MASK_PM)) | \ | ||
33 | ((NEW) & (PSW32_MASK_CC|PSW32_MASK_PM))) | ||
34 | |||
35 | extern long psw32_user_bits; | ||
36 | |||
9 | #define COMPAT_USER_HZ 100 | 37 | #define COMPAT_USER_HZ 100 |
10 | 38 | ||
11 | typedef u32 compat_size_t; | 39 | typedef u32 compat_size_t; |
diff --git a/include/asm-s390/etr.h b/include/asm-s390/etr.h new file mode 100644 index 000000000000..b498f19bb9a7 --- /dev/null +++ b/include/asm-s390/etr.h | |||
@@ -0,0 +1,219 @@ | |||
1 | /* | ||
2 | * include/asm-s390/etr.h | ||
3 | * | ||
4 | * Copyright IBM Corp. 2006 | ||
5 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) | ||
6 | */ | ||
7 | #ifndef __S390_ETR_H | ||
8 | #define __S390_ETR_H | ||
9 | |||
10 | /* ETR attachment control register */ | ||
11 | struct etr_eacr { | ||
12 | unsigned int e0 : 1; /* port 0 stepping control */ | ||
13 | unsigned int e1 : 1; /* port 1 stepping control */ | ||
14 | unsigned int _pad0 : 5; /* must be 00100 */ | ||
15 | unsigned int dp : 1; /* data port control */ | ||
16 | unsigned int p0 : 1; /* port 0 change recognition control */ | ||
17 | unsigned int p1 : 1; /* port 1 change recognition control */ | ||
18 | unsigned int _pad1 : 3; /* must be 000 */ | ||
19 | unsigned int ea : 1; /* ETR alert control */ | ||
20 | unsigned int es : 1; /* ETR sync check control */ | ||
21 | unsigned int sl : 1; /* switch to local control */ | ||
22 | } __attribute__ ((packed)); | ||
23 | |||
24 | /* Port state returned by steai */ | ||
25 | enum etr_psc { | ||
26 | etr_psc_operational = 0, | ||
27 | etr_psc_semi_operational = 1, | ||
28 | etr_psc_protocol_error = 4, | ||
29 | etr_psc_no_symbols = 8, | ||
30 | etr_psc_no_signal = 12, | ||
31 | etr_psc_pps_mode = 13 | ||
32 | }; | ||
33 | |||
34 | /* Logical port state returned by stetr */ | ||
35 | enum etr_lpsc { | ||
36 | etr_lpsc_operational_step = 0, | ||
37 | etr_lpsc_operational_alt = 1, | ||
38 | etr_lpsc_semi_operational = 2, | ||
39 | etr_lpsc_protocol_error = 4, | ||
40 | etr_lpsc_no_symbol_sync = 8, | ||
41 | etr_lpsc_no_signal = 12, | ||
42 | etr_lpsc_pps_mode = 13 | ||
43 | }; | ||
44 | |||
45 | /* ETR status words */ | ||
46 | struct etr_esw { | ||
47 | struct etr_eacr eacr; /* attachment control register */ | ||
48 | unsigned int y : 1; /* stepping mode */ | ||
49 | unsigned int _pad0 : 5; /* must be 00000 */ | ||
50 | unsigned int p : 1; /* stepping port number */ | ||
51 | unsigned int q : 1; /* data port number */ | ||
52 | unsigned int psc0 : 4; /* port 0 state code */ | ||
53 | unsigned int psc1 : 4; /* port 1 state code */ | ||
54 | } __attribute__ ((packed)); | ||
55 | |||
56 | /* Second level data register status word */ | ||
57 | struct etr_slsw { | ||
58 | unsigned int vv1 : 1; /* copy of validity bit data frame 1 */ | ||
59 | unsigned int vv2 : 1; /* copy of validity bit data frame 2 */ | ||
60 | unsigned int vv3 : 1; /* copy of validity bit data frame 3 */ | ||
61 | unsigned int vv4 : 1; /* copy of validity bit data frame 4 */ | ||
62 | unsigned int _pad0 : 19; /* must by all zeroes */ | ||
63 | unsigned int n : 1; /* EAF port number */ | ||
64 | unsigned int v1 : 1; /* validity bit ETR data frame 1 */ | ||
65 | unsigned int v2 : 1; /* validity bit ETR data frame 2 */ | ||
66 | unsigned int v3 : 1; /* validity bit ETR data frame 3 */ | ||
67 | unsigned int v4 : 1; /* validity bit ETR data frame 4 */ | ||
68 | unsigned int _pad1 : 4; /* must be 0000 */ | ||
69 | } __attribute__ ((packed)); | ||
70 | |||
71 | /* ETR data frames */ | ||
72 | struct etr_edf1 { | ||
73 | unsigned int u : 1; /* untuned bit */ | ||
74 | unsigned int _pad0 : 1; /* must be 0 */ | ||
75 | unsigned int r : 1; /* service request bit */ | ||
76 | unsigned int _pad1 : 4; /* must be 0000 */ | ||
77 | unsigned int a : 1; /* time adjustment bit */ | ||
78 | unsigned int net_id : 8; /* ETR network id */ | ||
79 | unsigned int etr_id : 8; /* id of ETR which sends data frames */ | ||
80 | unsigned int etr_pn : 8; /* port number of ETR output port */ | ||
81 | } __attribute__ ((packed)); | ||
82 | |||
83 | struct etr_edf2 { | ||
84 | unsigned int etv : 32; /* Upper 32 bits of TOD. */ | ||
85 | } __attribute__ ((packed)); | ||
86 | |||
87 | struct etr_edf3 { | ||
88 | unsigned int rc : 8; /* failure reason code */ | ||
89 | unsigned int _pad0 : 3; /* must be 000 */ | ||
90 | unsigned int c : 1; /* ETR coupled bit */ | ||
91 | unsigned int tc : 4; /* ETR type code */ | ||
92 | unsigned int blto : 8; /* biased local time offset */ | ||
93 | /* (blto - 128) * 15 = minutes */ | ||
94 | unsigned int buo : 8; /* biased utc offset */ | ||
95 | /* (buo - 128) = leap seconds */ | ||
96 | } __attribute__ ((packed)); | ||
97 | |||
98 | struct etr_edf4 { | ||
99 | unsigned int ed : 8; /* ETS device dependent data */ | ||
100 | unsigned int _pad0 : 1; /* must be 0 */ | ||
101 | unsigned int buc : 5; /* biased ut1 correction */ | ||
102 | /* (buc - 16) * 0.1 seconds */ | ||
103 | unsigned int em : 6; /* ETS error magnitude */ | ||
104 | unsigned int dc : 6; /* ETS drift code */ | ||
105 | unsigned int sc : 6; /* ETS steering code */ | ||
106 | } __attribute__ ((packed)); | ||
107 | |||
108 | /* | ||
109 | * ETR attachment information block, two formats | ||
110 | * format 1 has 4 reserved words with a size of 64 bytes | ||
111 | * format 2 has 16 reserved words with a size of 96 bytes | ||
112 | */ | ||
113 | struct etr_aib { | ||
114 | struct etr_esw esw; | ||
115 | struct etr_slsw slsw; | ||
116 | unsigned long long tsp; | ||
117 | struct etr_edf1 edf1; | ||
118 | struct etr_edf2 edf2; | ||
119 | struct etr_edf3 edf3; | ||
120 | struct etr_edf4 edf4; | ||
121 | unsigned int reserved[16]; | ||
122 | } __attribute__ ((packed,aligned(8))); | ||
123 | |||
124 | /* ETR interruption parameter */ | ||
125 | struct etr_interruption_parameter { | ||
126 | unsigned int _pad0 : 8; | ||
127 | unsigned int pc0 : 1; /* port 0 state change */ | ||
128 | unsigned int pc1 : 1; /* port 1 state change */ | ||
129 | unsigned int _pad1 : 3; | ||
130 | unsigned int eai : 1; /* ETR alert indication */ | ||
131 | unsigned int _pad2 : 18; | ||
132 | } __attribute__ ((packed)); | ||
133 | |||
134 | /* Query TOD offset result */ | ||
135 | struct etr_ptff_qto { | ||
136 | unsigned long long physical_clock; | ||
137 | unsigned long long tod_offset; | ||
138 | unsigned long long logical_tod_offset; | ||
139 | unsigned long long tod_epoch_difference; | ||
140 | } __attribute__ ((packed)); | ||
141 | |||
142 | /* Inline assembly helper functions */ | ||
143 | static inline int etr_setr(struct etr_eacr *ctrl) | ||
144 | { | ||
145 | int rc = -ENOSYS; | ||
146 | |||
147 | asm volatile( | ||
148 | " .insn s,0xb2160000,0(%2)\n" | ||
149 | "0: la %0,0\n" | ||
150 | "1:\n" | ||
151 | EX_TABLE(0b,1b) | ||
152 | : "+d" (rc) : "m" (*ctrl), "a" (ctrl)); | ||
153 | return rc; | ||
154 | } | ||
155 | |||
156 | /* Stores a format 1 aib with 64 bytes */ | ||
157 | static inline int etr_stetr(struct etr_aib *aib) | ||
158 | { | ||
159 | int rc = -ENOSYS; | ||
160 | |||
161 | asm volatile( | ||
162 | " .insn s,0xb2170000,0(%2)\n" | ||
163 | "0: la %0,0\n" | ||
164 | "1:\n" | ||
165 | EX_TABLE(0b,1b) | ||
166 | : "+d" (rc) : "m" (*aib), "a" (aib)); | ||
167 | return rc; | ||
168 | } | ||
169 | |||
170 | /* Stores a format 2 aib with 96 bytes for specified port */ | ||
171 | static inline int etr_steai(struct etr_aib *aib, unsigned int func) | ||
172 | { | ||
173 | register unsigned int reg0 asm("0") = func; | ||
174 | int rc = -ENOSYS; | ||
175 | |||
176 | asm volatile( | ||
177 | " .insn s,0xb2b30000,0(%2)\n" | ||
178 | "0: la %0,0\n" | ||
179 | "1:\n" | ||
180 | EX_TABLE(0b,1b) | ||
181 | : "+d" (rc) : "m" (*aib), "a" (aib), "d" (reg0)); | ||
182 | return rc; | ||
183 | } | ||
184 | |||
185 | /* Function codes for the steai instruction. */ | ||
186 | #define ETR_STEAI_STEPPING_PORT 0x10 | ||
187 | #define ETR_STEAI_ALTERNATE_PORT 0x11 | ||
188 | #define ETR_STEAI_PORT_0 0x12 | ||
189 | #define ETR_STEAI_PORT_1 0x13 | ||
190 | |||
191 | static inline int etr_ptff(void *ptff_block, unsigned int func) | ||
192 | { | ||
193 | register unsigned int reg0 asm("0") = func; | ||
194 | register unsigned long reg1 asm("1") = (unsigned long) ptff_block; | ||
195 | int rc = -ENOSYS; | ||
196 | |||
197 | asm volatile( | ||
198 | " .word 0x0104\n" | ||
199 | " ipm %0\n" | ||
200 | " srl %0,28\n" | ||
201 | : "=d" (rc), "=m" (ptff_block) | ||
202 | : "d" (reg0), "d" (reg1), "m" (ptff_block) : "cc"); | ||
203 | return rc; | ||
204 | } | ||
205 | |||
206 | /* Function codes for the ptff instruction. */ | ||
207 | #define ETR_PTFF_QAF 0x00 /* query available functions */ | ||
208 | #define ETR_PTFF_QTO 0x01 /* query tod offset */ | ||
209 | #define ETR_PTFF_QSI 0x02 /* query steering information */ | ||
210 | #define ETR_PTFF_ATO 0x40 /* adjust tod offset */ | ||
211 | #define ETR_PTFF_STO 0x41 /* set tod offset */ | ||
212 | #define ETR_PTFF_SFS 0x42 /* set fine steering rate */ | ||
213 | #define ETR_PTFF_SGS 0x43 /* set gross steering rate */ | ||
214 | |||
215 | /* Functions needed by the machine check handler */ | ||
216 | extern void etr_switch_to_local(void); | ||
217 | extern void etr_sync_check(void); | ||
218 | |||
219 | #endif /* __S390_ETR_H */ | ||
diff --git a/include/asm-s390/hardirq.h b/include/asm-s390/hardirq.h index c2f6a8782d31..31beb18cb3d1 100644 --- a/include/asm-s390/hardirq.h +++ b/include/asm-s390/hardirq.h | |||
@@ -32,6 +32,6 @@ typedef struct { | |||
32 | 32 | ||
33 | #define HARDIRQ_BITS 8 | 33 | #define HARDIRQ_BITS 8 |
34 | 34 | ||
35 | extern void account_ticks(void); | 35 | extern void account_ticks(u64 time); |
36 | 36 | ||
37 | #endif /* __ASM_HARDIRQ_H */ | 37 | #endif /* __ASM_HARDIRQ_H */ |
diff --git a/include/asm-s390/io.h b/include/asm-s390/io.h index efb7de9c1c6b..a4c2d550dad4 100644 --- a/include/asm-s390/io.h +++ b/include/asm-s390/io.h | |||
@@ -28,11 +28,7 @@ static inline unsigned long virt_to_phys(volatile void * address) | |||
28 | { | 28 | { |
29 | unsigned long real_address; | 29 | unsigned long real_address; |
30 | asm volatile( | 30 | asm volatile( |
31 | #ifndef __s390x__ | ||
32 | " lra %0,0(%1)\n" | 31 | " lra %0,0(%1)\n" |
33 | #else /* __s390x__ */ | ||
34 | " lrag %0,0(%1)\n" | ||
35 | #endif /* __s390x__ */ | ||
36 | " jz 0f\n" | 32 | " jz 0f\n" |
37 | " la %0,0\n" | 33 | " la %0,0\n" |
38 | "0:" | 34 | "0:" |
diff --git a/include/asm-s390/kdebug.h b/include/asm-s390/kdebug.h index 40cc68025e01..1b50f89819a4 100644 --- a/include/asm-s390/kdebug.h +++ b/include/asm-s390/kdebug.h | |||
@@ -26,7 +26,6 @@ extern int register_page_fault_notifier(struct notifier_block *); | |||
26 | extern int unregister_page_fault_notifier(struct notifier_block *); | 26 | extern int unregister_page_fault_notifier(struct notifier_block *); |
27 | extern struct atomic_notifier_head s390die_chain; | 27 | extern struct atomic_notifier_head s390die_chain; |
28 | 28 | ||
29 | |||
30 | enum die_val { | 29 | enum die_val { |
31 | DIE_OOPS = 1, | 30 | DIE_OOPS = 1, |
32 | DIE_BPT, | 31 | DIE_BPT, |
@@ -56,4 +55,6 @@ static inline int notify_die(enum die_val val, const char *str, | |||
56 | return atomic_notifier_call_chain(&s390die_chain, val, &args); | 55 | return atomic_notifier_call_chain(&s390die_chain, val, &args); |
57 | } | 56 | } |
58 | 57 | ||
58 | extern void die(const char *, struct pt_regs *, long); | ||
59 | |||
59 | #endif | 60 | #endif |
diff --git a/include/asm-s390/lowcore.h b/include/asm-s390/lowcore.h index 74f7389bd3ee..4a31d0a7ee83 100644 --- a/include/asm-s390/lowcore.h +++ b/include/asm-s390/lowcore.h | |||
@@ -220,7 +220,8 @@ struct _lowcore | |||
220 | __u32 kernel_asce; /* 0xc4c */ | 220 | __u32 kernel_asce; /* 0xc4c */ |
221 | __u32 user_asce; /* 0xc50 */ | 221 | __u32 user_asce; /* 0xc50 */ |
222 | __u32 panic_stack; /* 0xc54 */ | 222 | __u32 panic_stack; /* 0xc54 */ |
223 | __u8 pad10[0xc60-0xc58]; /* 0xc58 */ | 223 | __u32 user_exec_asce; /* 0xc58 */ |
224 | __u8 pad10[0xc60-0xc5c]; /* 0xc5c */ | ||
224 | /* entry.S sensitive area start */ | 225 | /* entry.S sensitive area start */ |
225 | struct cpuinfo_S390 cpu_data; /* 0xc60 */ | 226 | struct cpuinfo_S390 cpu_data; /* 0xc60 */ |
226 | __u32 ipl_device; /* 0xc7c */ | 227 | __u32 ipl_device; /* 0xc7c */ |
@@ -310,7 +311,8 @@ struct _lowcore | |||
310 | __u64 kernel_asce; /* 0xd58 */ | 311 | __u64 kernel_asce; /* 0xd58 */ |
311 | __u64 user_asce; /* 0xd60 */ | 312 | __u64 user_asce; /* 0xd60 */ |
312 | __u64 panic_stack; /* 0xd68 */ | 313 | __u64 panic_stack; /* 0xd68 */ |
313 | __u8 pad10[0xd80-0xd70]; /* 0xd70 */ | 314 | __u64 user_exec_asce; /* 0xd70 */ |
315 | __u8 pad10[0xd80-0xd78]; /* 0xd78 */ | ||
314 | /* entry.S sensitive area start */ | 316 | /* entry.S sensitive area start */ |
315 | struct cpuinfo_S390 cpu_data; /* 0xd80 */ | 317 | struct cpuinfo_S390 cpu_data; /* 0xd80 */ |
316 | __u32 ipl_device; /* 0xdb8 */ | 318 | __u32 ipl_device; /* 0xdb8 */ |
diff --git a/include/asm-s390/mmu_context.h b/include/asm-s390/mmu_context.h index bcf24a873874..1d21da220d49 100644 --- a/include/asm-s390/mmu_context.h +++ b/include/asm-s390/mmu_context.h | |||
@@ -9,6 +9,7 @@ | |||
9 | #ifndef __S390_MMU_CONTEXT_H | 9 | #ifndef __S390_MMU_CONTEXT_H |
10 | #define __S390_MMU_CONTEXT_H | 10 | #define __S390_MMU_CONTEXT_H |
11 | 11 | ||
12 | #include <asm/pgalloc.h> | ||
12 | /* | 13 | /* |
13 | * get a new mmu context.. S390 don't know about contexts. | 14 | * get a new mmu context.. S390 don't know about contexts. |
14 | */ | 15 | */ |
@@ -16,29 +17,44 @@ | |||
16 | 17 | ||
17 | #define destroy_context(mm) do { } while (0) | 18 | #define destroy_context(mm) do { } while (0) |
18 | 19 | ||
20 | #ifndef __s390x__ | ||
21 | #define LCTL_OPCODE "lctl" | ||
22 | #define PGTABLE_BITS (_SEGMENT_TABLE|USER_STD_MASK) | ||
23 | #else | ||
24 | #define LCTL_OPCODE "lctlg" | ||
25 | #define PGTABLE_BITS (_REGION_TABLE|USER_STD_MASK) | ||
26 | #endif | ||
27 | |||
19 | static inline void enter_lazy_tlb(struct mm_struct *mm, | 28 | static inline void enter_lazy_tlb(struct mm_struct *mm, |
20 | struct task_struct *tsk) | 29 | struct task_struct *tsk) |
21 | { | 30 | { |
22 | } | 31 | } |
23 | 32 | ||
24 | static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, | 33 | static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, |
25 | struct task_struct *tsk) | 34 | struct task_struct *tsk) |
26 | { | 35 | { |
27 | if (prev != next) { | 36 | pgd_t *shadow_pgd = get_shadow_pgd(next->pgd); |
28 | #ifndef __s390x__ | 37 | |
29 | S390_lowcore.user_asce = (__pa(next->pgd)&PAGE_MASK) | | 38 | if (prev != next) { |
30 | (_SEGMENT_TABLE|USER_STD_MASK); | 39 | S390_lowcore.user_asce = (__pa(next->pgd) & PAGE_MASK) | |
31 | /* Load home space page table origin. */ | 40 | PGTABLE_BITS; |
32 | asm volatile("lctl 13,13,%0" | 41 | if (shadow_pgd) { |
33 | : : "m" (S390_lowcore.user_asce) ); | 42 | /* Load primary/secondary space page table origin. */ |
34 | #else /* __s390x__ */ | 43 | S390_lowcore.user_exec_asce = |
35 | S390_lowcore.user_asce = (__pa(next->pgd) & PAGE_MASK) | | 44 | (__pa(shadow_pgd) & PAGE_MASK) | PGTABLE_BITS; |
36 | (_REGION_TABLE|USER_STD_MASK); | 45 | asm volatile(LCTL_OPCODE" 1,1,%0\n" |
37 | /* Load home space page table origin. */ | 46 | LCTL_OPCODE" 7,7,%1" |
38 | asm volatile("lctlg 13,13,%0" | 47 | : : "m" (S390_lowcore.user_exec_asce), |
39 | : : "m" (S390_lowcore.user_asce) ); | 48 | "m" (S390_lowcore.user_asce) ); |
40 | #endif /* __s390x__ */ | 49 | } else if (switch_amode) { |
41 | } | 50 | /* Load primary space page table origin. */ |
51 | asm volatile(LCTL_OPCODE" 1,1,%0" | ||
52 | : : "m" (S390_lowcore.user_asce) ); | ||
53 | } else | ||
54 | /* Load home space page table origin. */ | ||
55 | asm volatile(LCTL_OPCODE" 13,13,%0" | ||
56 | : : "m" (S390_lowcore.user_asce) ); | ||
57 | } | ||
42 | cpu_set(smp_processor_id(), next->cpu_vm_mask); | 58 | cpu_set(smp_processor_id(), next->cpu_vm_mask); |
43 | } | 59 | } |
44 | 60 | ||
@@ -51,4 +67,4 @@ static inline void activate_mm(struct mm_struct *prev, | |||
51 | set_fs(current->thread.mm_segment); | 67 | set_fs(current->thread.mm_segment); |
52 | } | 68 | } |
53 | 69 | ||
54 | #endif | 70 | #endif /* __S390_MMU_CONTEXT_H */ |
diff --git a/include/asm-s390/pgalloc.h b/include/asm-s390/pgalloc.h index 0707a7e2fc16..56c8a6c80e2e 100644 --- a/include/asm-s390/pgalloc.h +++ b/include/asm-s390/pgalloc.h | |||
@@ -47,6 +47,17 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm) | |||
47 | 47 | ||
48 | if (!pgd) | 48 | if (!pgd) |
49 | return NULL; | 49 | return NULL; |
50 | if (s390_noexec) { | ||
51 | pgd_t *shadow_pgd = (pgd_t *) | ||
52 | __get_free_pages(GFP_KERNEL, PGD_ALLOC_ORDER); | ||
53 | struct page *page = virt_to_page(pgd); | ||
54 | |||
55 | if (!shadow_pgd) { | ||
56 | free_pages((unsigned long) pgd, PGD_ALLOC_ORDER); | ||
57 | return NULL; | ||
58 | } | ||
59 | page->lru.next = (void *) shadow_pgd; | ||
60 | } | ||
50 | for (i = 0; i < PTRS_PER_PGD; i++) | 61 | for (i = 0; i < PTRS_PER_PGD; i++) |
51 | #ifndef __s390x__ | 62 | #ifndef __s390x__ |
52 | pmd_clear(pmd_offset(pgd + i, i*PGDIR_SIZE)); | 63 | pmd_clear(pmd_offset(pgd + i, i*PGDIR_SIZE)); |
@@ -58,6 +69,10 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm) | |||
58 | 69 | ||
59 | static inline void pgd_free(pgd_t *pgd) | 70 | static inline void pgd_free(pgd_t *pgd) |
60 | { | 71 | { |
72 | pgd_t *shadow_pgd = get_shadow_pgd(pgd); | ||
73 | |||
74 | if (shadow_pgd) | ||
75 | free_pages((unsigned long) shadow_pgd, PGD_ALLOC_ORDER); | ||
61 | free_pages((unsigned long) pgd, PGD_ALLOC_ORDER); | 76 | free_pages((unsigned long) pgd, PGD_ALLOC_ORDER); |
62 | } | 77 | } |
63 | 78 | ||
@@ -71,6 +86,7 @@ static inline void pgd_free(pgd_t *pgd) | |||
71 | #define pmd_free(x) do { } while (0) | 86 | #define pmd_free(x) do { } while (0) |
72 | #define __pmd_free_tlb(tlb,x) do { } while (0) | 87 | #define __pmd_free_tlb(tlb,x) do { } while (0) |
73 | #define pgd_populate(mm, pmd, pte) BUG() | 88 | #define pgd_populate(mm, pmd, pte) BUG() |
89 | #define pgd_populate_kernel(mm, pmd, pte) BUG() | ||
74 | #else /* __s390x__ */ | 90 | #else /* __s390x__ */ |
75 | static inline pmd_t * pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr) | 91 | static inline pmd_t * pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr) |
76 | { | 92 | { |
@@ -79,6 +95,17 @@ static inline pmd_t * pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr) | |||
79 | 95 | ||
80 | if (!pmd) | 96 | if (!pmd) |
81 | return NULL; | 97 | return NULL; |
98 | if (s390_noexec) { | ||
99 | pmd_t *shadow_pmd = (pmd_t *) | ||
100 | __get_free_pages(GFP_KERNEL, PMD_ALLOC_ORDER); | ||
101 | struct page *page = virt_to_page(pmd); | ||
102 | |||
103 | if (!shadow_pmd) { | ||
104 | free_pages((unsigned long) pmd, PMD_ALLOC_ORDER); | ||
105 | return NULL; | ||
106 | } | ||
107 | page->lru.next = (void *) shadow_pmd; | ||
108 | } | ||
82 | for (i=0; i < PTRS_PER_PMD; i++) | 109 | for (i=0; i < PTRS_PER_PMD; i++) |
83 | pmd_clear(pmd + i); | 110 | pmd_clear(pmd + i); |
84 | return pmd; | 111 | return pmd; |
@@ -86,6 +113,10 @@ static inline pmd_t * pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr) | |||
86 | 113 | ||
87 | static inline void pmd_free (pmd_t *pmd) | 114 | static inline void pmd_free (pmd_t *pmd) |
88 | { | 115 | { |
116 | pmd_t *shadow_pmd = get_shadow_pmd(pmd); | ||
117 | |||
118 | if (shadow_pmd) | ||
119 | free_pages((unsigned long) shadow_pmd, PMD_ALLOC_ORDER); | ||
89 | free_pages((unsigned long) pmd, PMD_ALLOC_ORDER); | 120 | free_pages((unsigned long) pmd, PMD_ALLOC_ORDER); |
90 | } | 121 | } |
91 | 122 | ||
@@ -95,11 +126,22 @@ static inline void pmd_free (pmd_t *pmd) | |||
95 | pmd_free(pmd); \ | 126 | pmd_free(pmd); \ |
96 | } while (0) | 127 | } while (0) |
97 | 128 | ||
98 | static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) | 129 | static inline void |
130 | pgd_populate_kernel(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) | ||
99 | { | 131 | { |
100 | pgd_val(*pgd) = _PGD_ENTRY | __pa(pmd); | 132 | pgd_val(*pgd) = _PGD_ENTRY | __pa(pmd); |
101 | } | 133 | } |
102 | 134 | ||
135 | static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) | ||
136 | { | ||
137 | pgd_t *shadow_pgd = get_shadow_pgd(pgd); | ||
138 | pmd_t *shadow_pmd = get_shadow_pmd(pmd); | ||
139 | |||
140 | if (shadow_pgd && shadow_pmd) | ||
141 | pgd_populate_kernel(mm, shadow_pgd, shadow_pmd); | ||
142 | pgd_populate_kernel(mm, pgd, pmd); | ||
143 | } | ||
144 | |||
103 | #endif /* __s390x__ */ | 145 | #endif /* __s390x__ */ |
104 | 146 | ||
105 | static inline void | 147 | static inline void |
@@ -119,7 +161,13 @@ pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte) | |||
119 | static inline void | 161 | static inline void |
120 | pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page) | 162 | pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page) |
121 | { | 163 | { |
122 | pmd_populate_kernel(mm, pmd, (pte_t *)page_to_phys(page)); | 164 | pte_t *pte = (pte_t *)page_to_phys(page); |
165 | pmd_t *shadow_pmd = get_shadow_pmd(pmd); | ||
166 | pte_t *shadow_pte = get_shadow_pte(pte); | ||
167 | |||
168 | pmd_populate_kernel(mm, pmd, pte); | ||
169 | if (shadow_pmd && shadow_pte) | ||
170 | pmd_populate_kernel(mm, shadow_pmd, shadow_pte); | ||
123 | } | 171 | } |
124 | 172 | ||
125 | /* | 173 | /* |
@@ -133,6 +181,17 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long vmaddr) | |||
133 | 181 | ||
134 | if (!pte) | 182 | if (!pte) |
135 | return NULL; | 183 | return NULL; |
184 | if (s390_noexec) { | ||
185 | pte_t *shadow_pte = (pte_t *) | ||
186 | __get_free_page(GFP_KERNEL|__GFP_REPEAT); | ||
187 | struct page *page = virt_to_page(pte); | ||
188 | |||
189 | if (!shadow_pte) { | ||
190 | free_page((unsigned long) pte); | ||
191 | return NULL; | ||
192 | } | ||
193 | page->lru.next = (void *) shadow_pte; | ||
194 | } | ||
136 | for (i=0; i < PTRS_PER_PTE; i++) { | 195 | for (i=0; i < PTRS_PER_PTE; i++) { |
137 | pte_clear(mm, vmaddr, pte + i); | 196 | pte_clear(mm, vmaddr, pte + i); |
138 | vmaddr += PAGE_SIZE; | 197 | vmaddr += PAGE_SIZE; |
@@ -151,14 +210,30 @@ pte_alloc_one(struct mm_struct *mm, unsigned long vmaddr) | |||
151 | 210 | ||
152 | static inline void pte_free_kernel(pte_t *pte) | 211 | static inline void pte_free_kernel(pte_t *pte) |
153 | { | 212 | { |
154 | free_page((unsigned long) pte); | 213 | pte_t *shadow_pte = get_shadow_pte(pte); |
214 | |||
215 | if (shadow_pte) | ||
216 | free_page((unsigned long) shadow_pte); | ||
217 | free_page((unsigned long) pte); | ||
155 | } | 218 | } |
156 | 219 | ||
157 | static inline void pte_free(struct page *pte) | 220 | static inline void pte_free(struct page *pte) |
158 | { | 221 | { |
159 | __free_page(pte); | 222 | struct page *shadow_page = get_shadow_page(pte); |
223 | |||
224 | if (shadow_page) | ||
225 | __free_page(shadow_page); | ||
226 | __free_page(pte); | ||
160 | } | 227 | } |
161 | 228 | ||
162 | #define __pte_free_tlb(tlb,pte) tlb_remove_page(tlb,pte) | 229 | #define __pte_free_tlb(tlb, pte) \ |
230 | ({ \ | ||
231 | struct mmu_gather *__tlb = (tlb); \ | ||
232 | struct page *__pte = (pte); \ | ||
233 | struct page *shadow_page = get_shadow_page(__pte); \ | ||
234 | if (shadow_page) \ | ||
235 | tlb_remove_page(__tlb, shadow_page); \ | ||
236 | tlb_remove_page(__tlb, __pte); \ | ||
237 | }) | ||
163 | 238 | ||
164 | #endif /* _S390_PGALLOC_H */ | 239 | #endif /* _S390_PGALLOC_H */ |
diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h index ae61aca5d483..13c16546eff5 100644 --- a/include/asm-s390/pgtable.h +++ b/include/asm-s390/pgtable.h | |||
@@ -40,6 +40,7 @@ struct mm_struct; | |||
40 | 40 | ||
41 | extern pgd_t swapper_pg_dir[] __attribute__ ((aligned (4096))); | 41 | extern pgd_t swapper_pg_dir[] __attribute__ ((aligned (4096))); |
42 | extern void paging_init(void); | 42 | extern void paging_init(void); |
43 | extern void vmem_map_init(void); | ||
43 | 44 | ||
44 | /* | 45 | /* |
45 | * The S390 doesn't have any external MMU info: the kernel page | 46 | * The S390 doesn't have any external MMU info: the kernel page |
@@ -223,6 +224,8 @@ extern unsigned long vmalloc_end; | |||
223 | #define _PAGE_TYPE_FILE 0x601 /* bit 0x002 is used for offset !! */ | 224 | #define _PAGE_TYPE_FILE 0x601 /* bit 0x002 is used for offset !! */ |
224 | #define _PAGE_TYPE_RO 0x200 | 225 | #define _PAGE_TYPE_RO 0x200 |
225 | #define _PAGE_TYPE_RW 0x000 | 226 | #define _PAGE_TYPE_RW 0x000 |
227 | #define _PAGE_TYPE_EX_RO 0x202 | ||
228 | #define _PAGE_TYPE_EX_RW 0x002 | ||
226 | 229 | ||
227 | /* | 230 | /* |
228 | * PTE type bits are rather complicated. handle_pte_fault uses pte_present, | 231 | * PTE type bits are rather complicated. handle_pte_fault uses pte_present, |
@@ -243,11 +246,13 @@ extern unsigned long vmalloc_end; | |||
243 | * _PAGE_TYPE_FILE 11?1 -> 11?1 | 246 | * _PAGE_TYPE_FILE 11?1 -> 11?1 |
244 | * _PAGE_TYPE_RO 0100 -> 1100 | 247 | * _PAGE_TYPE_RO 0100 -> 1100 |
245 | * _PAGE_TYPE_RW 0000 -> 1000 | 248 | * _PAGE_TYPE_RW 0000 -> 1000 |
249 | * _PAGE_TYPE_EX_RO 0110 -> 1110 | ||
250 | * _PAGE_TYPE_EX_RW 0010 -> 1010 | ||
246 | * | 251 | * |
247 | * pte_none is true for bits combinations 1000, 1100 | 252 | * pte_none is true for bits combinations 1000, 1010, 1100, 1110 |
248 | * pte_present is true for bits combinations 0000, 0010, 0100, 0110, 1001 | 253 | * pte_present is true for bits combinations 0000, 0010, 0100, 0110, 1001 |
249 | * pte_file is true for bits combinations 1101, 1111 | 254 | * pte_file is true for bits combinations 1101, 1111 |
250 | * swap pte is 1011 and 0001, 0011, 0101, 0111, 1010 and 1110 are invalid. | 255 | * swap pte is 1011 and 0001, 0011, 0101, 0111 are invalid. |
251 | */ | 256 | */ |
252 | 257 | ||
253 | #ifndef __s390x__ | 258 | #ifndef __s390x__ |
@@ -312,33 +317,100 @@ extern unsigned long vmalloc_end; | |||
312 | #define PAGE_NONE __pgprot(_PAGE_TYPE_NONE) | 317 | #define PAGE_NONE __pgprot(_PAGE_TYPE_NONE) |
313 | #define PAGE_RO __pgprot(_PAGE_TYPE_RO) | 318 | #define PAGE_RO __pgprot(_PAGE_TYPE_RO) |
314 | #define PAGE_RW __pgprot(_PAGE_TYPE_RW) | 319 | #define PAGE_RW __pgprot(_PAGE_TYPE_RW) |
320 | #define PAGE_EX_RO __pgprot(_PAGE_TYPE_EX_RO) | ||
321 | #define PAGE_EX_RW __pgprot(_PAGE_TYPE_EX_RW) | ||
315 | 322 | ||
316 | #define PAGE_KERNEL PAGE_RW | 323 | #define PAGE_KERNEL PAGE_RW |
317 | #define PAGE_COPY PAGE_RO | 324 | #define PAGE_COPY PAGE_RO |
318 | 325 | ||
319 | /* | 326 | /* |
320 | * The S390 can't do page protection for execute, and considers that the | 327 | * Dependent on the EXEC_PROTECT option s390 can do execute protection. |
321 | * same are read. Also, write permissions imply read permissions. This is | 328 | * Write permission always implies read permission. In theory with a |
322 | * the closest we can get.. | 329 | * primary/secondary page table execute only can be implemented but |
330 | * it would cost an additional bit in the pte to distinguish all the | ||
331 | * different pte types. To avoid that execute permission currently | ||
332 | * implies read permission as well. | ||
323 | */ | 333 | */ |
324 | /*xwr*/ | 334 | /*xwr*/ |
325 | #define __P000 PAGE_NONE | 335 | #define __P000 PAGE_NONE |
326 | #define __P001 PAGE_RO | 336 | #define __P001 PAGE_RO |
327 | #define __P010 PAGE_RO | 337 | #define __P010 PAGE_RO |
328 | #define __P011 PAGE_RO | 338 | #define __P011 PAGE_RO |
329 | #define __P100 PAGE_RO | 339 | #define __P100 PAGE_EX_RO |
330 | #define __P101 PAGE_RO | 340 | #define __P101 PAGE_EX_RO |
331 | #define __P110 PAGE_RO | 341 | #define __P110 PAGE_EX_RO |
332 | #define __P111 PAGE_RO | 342 | #define __P111 PAGE_EX_RO |
333 | 343 | ||
334 | #define __S000 PAGE_NONE | 344 | #define __S000 PAGE_NONE |
335 | #define __S001 PAGE_RO | 345 | #define __S001 PAGE_RO |
336 | #define __S010 PAGE_RW | 346 | #define __S010 PAGE_RW |
337 | #define __S011 PAGE_RW | 347 | #define __S011 PAGE_RW |
338 | #define __S100 PAGE_RO | 348 | #define __S100 PAGE_EX_RO |
339 | #define __S101 PAGE_RO | 349 | #define __S101 PAGE_EX_RO |
340 | #define __S110 PAGE_RW | 350 | #define __S110 PAGE_EX_RW |
341 | #define __S111 PAGE_RW | 351 | #define __S111 PAGE_EX_RW |
352 | |||
353 | #ifndef __s390x__ | ||
354 | # define PMD_SHADOW_SHIFT 1 | ||
355 | # define PGD_SHADOW_SHIFT 1 | ||
356 | #else /* __s390x__ */ | ||
357 | # define PMD_SHADOW_SHIFT 2 | ||
358 | # define PGD_SHADOW_SHIFT 2 | ||
359 | #endif /* __s390x__ */ | ||
360 | |||
361 | static inline struct page *get_shadow_page(struct page *page) | ||
362 | { | ||
363 | if (s390_noexec && !list_empty(&page->lru)) | ||
364 | return virt_to_page(page->lru.next); | ||
365 | return NULL; | ||
366 | } | ||
367 | |||
368 | static inline pte_t *get_shadow_pte(pte_t *ptep) | ||
369 | { | ||
370 | unsigned long pteptr = (unsigned long) (ptep); | ||
371 | |||
372 | if (s390_noexec) { | ||
373 | unsigned long offset = pteptr & (PAGE_SIZE - 1); | ||
374 | void *addr = (void *) (pteptr ^ offset); | ||
375 | struct page *page = virt_to_page(addr); | ||
376 | if (!list_empty(&page->lru)) | ||
377 | return (pte_t *) ((unsigned long) page->lru.next | | ||
378 | offset); | ||
379 | } | ||
380 | return NULL; | ||
381 | } | ||
382 | |||
383 | static inline pmd_t *get_shadow_pmd(pmd_t *pmdp) | ||
384 | { | ||
385 | unsigned long pmdptr = (unsigned long) (pmdp); | ||
386 | |||
387 | if (s390_noexec) { | ||
388 | unsigned long offset = pmdptr & | ||
389 | ((PAGE_SIZE << PMD_SHADOW_SHIFT) - 1); | ||
390 | void *addr = (void *) (pmdptr ^ offset); | ||
391 | struct page *page = virt_to_page(addr); | ||
392 | if (!list_empty(&page->lru)) | ||
393 | return (pmd_t *) ((unsigned long) page->lru.next | | ||
394 | offset); | ||
395 | } | ||
396 | return NULL; | ||
397 | } | ||
398 | |||
399 | static inline pgd_t *get_shadow_pgd(pgd_t *pgdp) | ||
400 | { | ||
401 | unsigned long pgdptr = (unsigned long) (pgdp); | ||
402 | |||
403 | if (s390_noexec) { | ||
404 | unsigned long offset = pgdptr & | ||
405 | ((PAGE_SIZE << PGD_SHADOW_SHIFT) - 1); | ||
406 | void *addr = (void *) (pgdptr ^ offset); | ||
407 | struct page *page = virt_to_page(addr); | ||
408 | if (!list_empty(&page->lru)) | ||
409 | return (pgd_t *) ((unsigned long) page->lru.next | | ||
410 | offset); | ||
411 | } | ||
412 | return NULL; | ||
413 | } | ||
342 | 414 | ||
343 | /* | 415 | /* |
344 | * Certain architectures need to do special things when PTEs | 416 | * Certain architectures need to do special things when PTEs |
@@ -347,7 +419,16 @@ extern unsigned long vmalloc_end; | |||
347 | */ | 419 | */ |
348 | static inline void set_pte(pte_t *pteptr, pte_t pteval) | 420 | static inline void set_pte(pte_t *pteptr, pte_t pteval) |
349 | { | 421 | { |
422 | pte_t *shadow_pte = get_shadow_pte(pteptr); | ||
423 | |||
350 | *pteptr = pteval; | 424 | *pteptr = pteval; |
425 | if (shadow_pte) { | ||
426 | if (!(pte_val(pteval) & _PAGE_INVALID) && | ||
427 | (pte_val(pteval) & _PAGE_SWX)) | ||
428 | pte_val(*shadow_pte) = pte_val(pteval) | _PAGE_RO; | ||
429 | else | ||
430 | pte_val(*shadow_pte) = _PAGE_TYPE_EMPTY; | ||
431 | } | ||
351 | } | 432 | } |
352 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) | 433 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) |
353 | 434 | ||
@@ -465,7 +546,7 @@ static inline int pte_read(pte_t pte) | |||
465 | 546 | ||
466 | static inline void pgd_clear(pgd_t * pgdp) { } | 547 | static inline void pgd_clear(pgd_t * pgdp) { } |
467 | 548 | ||
468 | static inline void pmd_clear(pmd_t * pmdp) | 549 | static inline void pmd_clear_kernel(pmd_t * pmdp) |
469 | { | 550 | { |
470 | pmd_val(pmdp[0]) = _PAGE_TABLE_INV; | 551 | pmd_val(pmdp[0]) = _PAGE_TABLE_INV; |
471 | pmd_val(pmdp[1]) = _PAGE_TABLE_INV; | 552 | pmd_val(pmdp[1]) = _PAGE_TABLE_INV; |
@@ -473,24 +554,55 @@ static inline void pmd_clear(pmd_t * pmdp) | |||
473 | pmd_val(pmdp[3]) = _PAGE_TABLE_INV; | 554 | pmd_val(pmdp[3]) = _PAGE_TABLE_INV; |
474 | } | 555 | } |
475 | 556 | ||
557 | static inline void pmd_clear(pmd_t * pmdp) | ||
558 | { | ||
559 | pmd_t *shadow_pmd = get_shadow_pmd(pmdp); | ||
560 | |||
561 | pmd_clear_kernel(pmdp); | ||
562 | if (shadow_pmd) | ||
563 | pmd_clear_kernel(shadow_pmd); | ||
564 | } | ||
565 | |||
476 | #else /* __s390x__ */ | 566 | #else /* __s390x__ */ |
477 | 567 | ||
478 | static inline void pgd_clear(pgd_t * pgdp) | 568 | static inline void pgd_clear_kernel(pgd_t * pgdp) |
479 | { | 569 | { |
480 | pgd_val(*pgdp) = _PGD_ENTRY_INV | _PGD_ENTRY; | 570 | pgd_val(*pgdp) = _PGD_ENTRY_INV | _PGD_ENTRY; |
481 | } | 571 | } |
482 | 572 | ||
483 | static inline void pmd_clear(pmd_t * pmdp) | 573 | static inline void pgd_clear(pgd_t * pgdp) |
574 | { | ||
575 | pgd_t *shadow_pgd = get_shadow_pgd(pgdp); | ||
576 | |||
577 | pgd_clear_kernel(pgdp); | ||
578 | if (shadow_pgd) | ||
579 | pgd_clear_kernel(shadow_pgd); | ||
580 | } | ||
581 | |||
582 | static inline void pmd_clear_kernel(pmd_t * pmdp) | ||
484 | { | 583 | { |
485 | pmd_val(*pmdp) = _PMD_ENTRY_INV | _PMD_ENTRY; | 584 | pmd_val(*pmdp) = _PMD_ENTRY_INV | _PMD_ENTRY; |
486 | pmd_val1(*pmdp) = _PMD_ENTRY_INV | _PMD_ENTRY; | 585 | pmd_val1(*pmdp) = _PMD_ENTRY_INV | _PMD_ENTRY; |
487 | } | 586 | } |
488 | 587 | ||
588 | static inline void pmd_clear(pmd_t * pmdp) | ||
589 | { | ||
590 | pmd_t *shadow_pmd = get_shadow_pmd(pmdp); | ||
591 | |||
592 | pmd_clear_kernel(pmdp); | ||
593 | if (shadow_pmd) | ||
594 | pmd_clear_kernel(shadow_pmd); | ||
595 | } | ||
596 | |||
489 | #endif /* __s390x__ */ | 597 | #endif /* __s390x__ */ |
490 | 598 | ||
491 | static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) | 599 | static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) |
492 | { | 600 | { |
601 | pte_t *shadow_pte = get_shadow_pte(ptep); | ||
602 | |||
493 | pte_val(*ptep) = _PAGE_TYPE_EMPTY; | 603 | pte_val(*ptep) = _PAGE_TYPE_EMPTY; |
604 | if (shadow_pte) | ||
605 | pte_val(*shadow_pte) = _PAGE_TYPE_EMPTY; | ||
494 | } | 606 | } |
495 | 607 | ||
496 | /* | 608 | /* |
@@ -608,8 +720,11 @@ ptep_clear_flush(struct vm_area_struct *vma, | |||
608 | unsigned long address, pte_t *ptep) | 720 | unsigned long address, pte_t *ptep) |
609 | { | 721 | { |
610 | pte_t pte = *ptep; | 722 | pte_t pte = *ptep; |
723 | pte_t *shadow_pte = get_shadow_pte(ptep); | ||
611 | 724 | ||
612 | __ptep_ipte(address, ptep); | 725 | __ptep_ipte(address, ptep); |
726 | if (shadow_pte) | ||
727 | __ptep_ipte(address, shadow_pte); | ||
613 | return pte; | 728 | return pte; |
614 | } | 729 | } |
615 | 730 | ||
diff --git a/include/asm-s390/processor.h b/include/asm-s390/processor.h index cbbedc63ba25..4c1b73940351 100644 --- a/include/asm-s390/processor.h +++ b/include/asm-s390/processor.h | |||
@@ -50,6 +50,7 @@ struct cpuinfo_S390 | |||
50 | unsigned long pgtable_cache_sz; | 50 | unsigned long pgtable_cache_sz; |
51 | }; | 51 | }; |
52 | 52 | ||
53 | extern void s390_adjust_jiffies(void); | ||
53 | extern void print_cpu_info(struct cpuinfo_S390 *); | 54 | extern void print_cpu_info(struct cpuinfo_S390 *); |
54 | 55 | ||
55 | /* Lazy FPU handling on uni-processor */ | 56 | /* Lazy FPU handling on uni-processor */ |
@@ -144,7 +145,8 @@ struct stack_frame { | |||
144 | #ifndef __s390x__ | 145 | #ifndef __s390x__ |
145 | 146 | ||
146 | #define start_thread(regs, new_psw, new_stackp) do { \ | 147 | #define start_thread(regs, new_psw, new_stackp) do { \ |
147 | regs->psw.mask = PSW_USER_BITS; \ | 148 | set_fs(USER_DS); \ |
149 | regs->psw.mask = psw_user_bits; \ | ||
148 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ | 150 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ |
149 | regs->gprs[15] = new_stackp ; \ | 151 | regs->gprs[15] = new_stackp ; \ |
150 | } while (0) | 152 | } while (0) |
@@ -152,13 +154,15 @@ struct stack_frame { | |||
152 | #else /* __s390x__ */ | 154 | #else /* __s390x__ */ |
153 | 155 | ||
154 | #define start_thread(regs, new_psw, new_stackp) do { \ | 156 | #define start_thread(regs, new_psw, new_stackp) do { \ |
155 | regs->psw.mask = PSW_USER_BITS; \ | 157 | set_fs(USER_DS); \ |
158 | regs->psw.mask = psw_user_bits; \ | ||
156 | regs->psw.addr = new_psw; \ | 159 | regs->psw.addr = new_psw; \ |
157 | regs->gprs[15] = new_stackp; \ | 160 | regs->gprs[15] = new_stackp; \ |
158 | } while (0) | 161 | } while (0) |
159 | 162 | ||
160 | #define start_thread31(regs, new_psw, new_stackp) do { \ | 163 | #define start_thread31(regs, new_psw, new_stackp) do { \ |
161 | regs->psw.mask = PSW_USER32_BITS; \ | 164 | set_fs(USER_DS); \ |
165 | regs->psw.mask = psw_user32_bits; \ | ||
162 | regs->psw.addr = new_psw; \ | 166 | regs->psw.addr = new_psw; \ |
163 | regs->gprs[15] = new_stackp; \ | 167 | regs->gprs[15] = new_stackp; \ |
164 | } while (0) | 168 | } while (0) |
@@ -201,9 +205,8 @@ unsigned long get_wchan(struct task_struct *p); | |||
201 | static inline void cpu_relax(void) | 205 | static inline void cpu_relax(void) |
202 | { | 206 | { |
203 | if (MACHINE_HAS_DIAG44) | 207 | if (MACHINE_HAS_DIAG44) |
204 | asm volatile("diag 0,0,68" : : : "memory"); | 208 | asm volatile("diag 0,0,68"); |
205 | else | 209 | barrier(); |
206 | barrier(); | ||
207 | } | 210 | } |
208 | 211 | ||
209 | /* | 212 | /* |
@@ -328,6 +331,18 @@ static inline void disabled_wait(unsigned long code) | |||
328 | } | 331 | } |
329 | 332 | ||
330 | /* | 333 | /* |
334 | * Basic Machine Check/Program Check Handler. | ||
335 | */ | ||
336 | |||
337 | extern void s390_base_mcck_handler(void); | ||
338 | extern void s390_base_pgm_handler(void); | ||
339 | extern void s390_base_ext_handler(void); | ||
340 | |||
341 | extern void (*s390_base_mcck_handler_fn)(void); | ||
342 | extern void (*s390_base_pgm_handler_fn)(void); | ||
343 | extern void (*s390_base_ext_handler_fn)(void); | ||
344 | |||
345 | /* | ||
331 | * CPU idle notifier chain. | 346 | * CPU idle notifier chain. |
332 | */ | 347 | */ |
333 | #define CPU_IDLE 0 | 348 | #define CPU_IDLE 0 |
diff --git a/include/asm-s390/ptrace.h b/include/asm-s390/ptrace.h index 7b768c5c68a8..fa6ca87080e8 100644 --- a/include/asm-s390/ptrace.h +++ b/include/asm-s390/ptrace.h | |||
@@ -266,17 +266,12 @@ typedef struct | |||
266 | #define PSW_ASC_SECONDARY 0x0000800000000000UL | 266 | #define PSW_ASC_SECONDARY 0x0000800000000000UL |
267 | #define PSW_ASC_HOME 0x0000C00000000000UL | 267 | #define PSW_ASC_HOME 0x0000C00000000000UL |
268 | 268 | ||
269 | #define PSW_USER32_BITS (PSW_BASE32_BITS | PSW_MASK_DAT | PSW_ASC_HOME | \ | 269 | extern long psw_user32_bits; |
270 | PSW_MASK_IO | PSW_MASK_EXT | PSW_MASK_MCHECK | \ | ||
271 | PSW_MASK_PSTATE | PSW_DEFAULT_KEY) | ||
272 | 270 | ||
273 | #endif /* __s390x__ */ | 271 | #endif /* __s390x__ */ |
274 | 272 | ||
275 | #define PSW_KERNEL_BITS (PSW_BASE_BITS | PSW_MASK_DAT | PSW_ASC_PRIMARY | \ | 273 | extern long psw_kernel_bits; |
276 | PSW_MASK_MCHECK | PSW_DEFAULT_KEY) | 274 | extern long psw_user_bits; |
277 | #define PSW_USER_BITS (PSW_BASE_BITS | PSW_MASK_DAT | PSW_ASC_HOME | \ | ||
278 | PSW_MASK_IO | PSW_MASK_EXT | PSW_MASK_MCHECK | \ | ||
279 | PSW_MASK_PSTATE | PSW_DEFAULT_KEY) | ||
280 | 275 | ||
281 | /* This macro merges a NEW PSW mask specified by the user into | 276 | /* This macro merges a NEW PSW mask specified by the user into |
282 | the currently active PSW mask CURRENT, modifying only those | 277 | the currently active PSW mask CURRENT, modifying only those |
diff --git a/include/asm-s390/reset.h b/include/asm-s390/reset.h index 532e65a2aafc..f584f4a52581 100644 --- a/include/asm-s390/reset.h +++ b/include/asm-s390/reset.h | |||
@@ -18,7 +18,4 @@ struct reset_call { | |||
18 | extern void register_reset_call(struct reset_call *reset); | 18 | extern void register_reset_call(struct reset_call *reset); |
19 | extern void unregister_reset_call(struct reset_call *reset); | 19 | extern void unregister_reset_call(struct reset_call *reset); |
20 | extern void s390_reset_system(void); | 20 | extern void s390_reset_system(void); |
21 | extern void (*s390_reset_mcck_handler)(void); | ||
22 | extern void (*s390_reset_pgm_handler)(void); | ||
23 | |||
24 | #endif /* _ASM_S390_RESET_H */ | 21 | #endif /* _ASM_S390_RESET_H */ |
diff --git a/include/asm-s390/sclp.h b/include/asm-s390/sclp.h new file mode 100644 index 000000000000..468b97018405 --- /dev/null +++ b/include/asm-s390/sclp.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * include/asm-s390/sclp.h | ||
3 | * | ||
4 | * Copyright IBM Corp. 2007 | ||
5 | * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> | ||
6 | */ | ||
7 | |||
8 | #ifndef _ASM_S390_SCLP_H | ||
9 | #define _ASM_S390_SCLP_H | ||
10 | |||
11 | #include <linux/types.h> | ||
12 | |||
13 | struct sccb_header { | ||
14 | u16 length; | ||
15 | u8 function_code; | ||
16 | u8 control_mask[3]; | ||
17 | u16 response_code; | ||
18 | } __attribute__((packed)); | ||
19 | |||
20 | #define LOADPARM_LEN 8 | ||
21 | |||
22 | struct sclp_readinfo_sccb { | ||
23 | struct sccb_header header; /* 0-7 */ | ||
24 | u16 rnmax; /* 8-9 */ | ||
25 | u8 rnsize; /* 10 */ | ||
26 | u8 _reserved0[24 - 11]; /* 11-23 */ | ||
27 | u8 loadparm[LOADPARM_LEN]; /* 24-31 */ | ||
28 | u8 _reserved1[91 - 32]; /* 32-90 */ | ||
29 | u8 flags; /* 91 */ | ||
30 | u8 _reserved2[100 - 92]; /* 92-99 */ | ||
31 | u32 rnsize2; /* 100-103 */ | ||
32 | u64 rnmax2; /* 104-111 */ | ||
33 | u8 _reserved3[4096 - 112]; /* 112-4095 */ | ||
34 | } __attribute__((packed, aligned(4096))); | ||
35 | |||
36 | extern struct sclp_readinfo_sccb s390_readinfo_sccb; | ||
37 | extern void sclp_readinfo_early(void); | ||
38 | |||
39 | #endif /* _ASM_S390_SCLP_H */ | ||
diff --git a/include/asm-s390/sections.h b/include/asm-s390/sections.h index 3a0b8ffeab7a..1c5a2c4ccdad 100644 --- a/include/asm-s390/sections.h +++ b/include/asm-s390/sections.h | |||
@@ -3,4 +3,6 @@ | |||
3 | 3 | ||
4 | #include <asm-generic/sections.h> | 4 | #include <asm-generic/sections.h> |
5 | 5 | ||
6 | extern char _eshared[]; | ||
7 | |||
6 | #endif | 8 | #endif |
diff --git a/include/asm-s390/setup.h b/include/asm-s390/setup.h index 9574fe80a046..3388bb52597c 100644 --- a/include/asm-s390/setup.h +++ b/include/asm-s390/setup.h | |||
@@ -42,6 +42,18 @@ struct mem_chunk { | |||
42 | 42 | ||
43 | extern struct mem_chunk memory_chunk[]; | 43 | extern struct mem_chunk memory_chunk[]; |
44 | 44 | ||
45 | #ifdef CONFIG_S390_SWITCH_AMODE | ||
46 | extern unsigned int switch_amode; | ||
47 | #else | ||
48 | #define switch_amode (0) | ||
49 | #endif | ||
50 | |||
51 | #ifdef CONFIG_S390_EXEC_PROTECT | ||
52 | extern unsigned int s390_noexec; | ||
53 | #else | ||
54 | #define s390_noexec (0) | ||
55 | #endif | ||
56 | |||
45 | /* | 57 | /* |
46 | * Machine features detected in head.S | 58 | * Machine features detected in head.S |
47 | */ | 59 | */ |
@@ -74,6 +86,9 @@ extern unsigned int console_mode; | |||
74 | extern unsigned int console_devno; | 86 | extern unsigned int console_devno; |
75 | extern unsigned int console_irq; | 87 | extern unsigned int console_irq; |
76 | 88 | ||
89 | extern char vmhalt_cmd[]; | ||
90 | extern char vmpoff_cmd[]; | ||
91 | |||
77 | #define CONSOLE_IS_UNDEFINED (console_mode == 0) | 92 | #define CONSOLE_IS_UNDEFINED (console_mode == 0) |
78 | #define CONSOLE_IS_SCLP (console_mode == 1) | 93 | #define CONSOLE_IS_SCLP (console_mode == 1) |
79 | #define CONSOLE_IS_3215 (console_mode == 2) | 94 | #define CONSOLE_IS_3215 (console_mode == 2) |
@@ -141,13 +156,19 @@ struct ipl_parameter_block { | |||
141 | extern u32 ipl_flags; | 156 | extern u32 ipl_flags; |
142 | extern u16 ipl_devno; | 157 | extern u16 ipl_devno; |
143 | 158 | ||
144 | void do_reipl(void); | 159 | extern void do_reipl(void); |
160 | extern void ipl_save_parameters(void); | ||
145 | 161 | ||
146 | enum { | 162 | enum { |
147 | IPL_DEVNO_VALID = 1, | 163 | IPL_DEVNO_VALID = 1, |
148 | IPL_PARMBLOCK_VALID = 2, | 164 | IPL_PARMBLOCK_VALID = 2, |
165 | IPL_NSS_VALID = 4, | ||
149 | }; | 166 | }; |
150 | 167 | ||
168 | #define NSS_NAME_SIZE 8 | ||
169 | |||
170 | extern char kernel_nss_name[]; | ||
171 | |||
151 | #define IPL_PARMBLOCK_START ((struct ipl_parameter_block *) \ | 172 | #define IPL_PARMBLOCK_START ((struct ipl_parameter_block *) \ |
152 | IPL_PARMBLOCK_ORIGIN) | 173 | IPL_PARMBLOCK_ORIGIN) |
153 | #define IPL_PARMBLOCK_SIZE (IPL_PARMBLOCK_START->hdr.len) | 174 | #define IPL_PARMBLOCK_SIZE (IPL_PARMBLOCK_START->hdr.len) |
diff --git a/include/asm-s390/sfp-util.h b/include/asm-s390/sfp-util.h new file mode 100644 index 000000000000..8cabcd23d976 --- /dev/null +++ b/include/asm-s390/sfp-util.h | |||
@@ -0,0 +1,66 @@ | |||
1 | #include <linux/kernel.h> | ||
2 | #include <linux/sched.h> | ||
3 | #include <linux/types.h> | ||
4 | #include <asm/byteorder.h> | ||
5 | |||
6 | #define add_ssaaaa(sh, sl, ah, al, bh, bl) ({ \ | ||
7 | unsigned int __sh = (ah); \ | ||
8 | unsigned int __sl = (al); \ | ||
9 | asm volatile( \ | ||
10 | " alr %1,%3\n" \ | ||
11 | " brc 12,0f\n" \ | ||
12 | " ahi %0,1\n" \ | ||
13 | "0: alr %0,%2" \ | ||
14 | : "+&d" (__sh), "+d" (__sl) \ | ||
15 | : "d" (bh), "d" (bl) : "cc"); \ | ||
16 | (sh) = __sh; \ | ||
17 | (sl) = __sl; \ | ||
18 | }) | ||
19 | |||
20 | #define sub_ddmmss(sh, sl, ah, al, bh, bl) ({ \ | ||
21 | unsigned int __sh = (ah); \ | ||
22 | unsigned int __sl = (al); \ | ||
23 | asm volatile( \ | ||
24 | " slr %1,%3\n" \ | ||
25 | " brc 3,0f\n" \ | ||
26 | " ahi %0,-1\n" \ | ||
27 | "0: slr %0,%2" \ | ||
28 | : "+&d" (__sh), "+d" (__sl) \ | ||
29 | : "d" (bh), "d" (bl) : "cc"); \ | ||
30 | (sh) = __sh; \ | ||
31 | (sl) = __sl; \ | ||
32 | }) | ||
33 | |||
34 | /* a umul b = a mul b + (a>=2<<31) ? b<<32:0 + (b>=2<<31) ? a<<32:0 */ | ||
35 | #define umul_ppmm(wh, wl, u, v) ({ \ | ||
36 | unsigned int __wh = u; \ | ||
37 | unsigned int __wl = v; \ | ||
38 | asm volatile( \ | ||
39 | " ltr 1,%0\n" \ | ||
40 | " mr 0,%1\n" \ | ||
41 | " jnm 0f\n" \ | ||
42 | " alr 0,%1\n" \ | ||
43 | "0: ltr %1,%1\n" \ | ||
44 | " jnm 1f\n" \ | ||
45 | " alr 0,%0\n" \ | ||
46 | "1: lr %0,0\n" \ | ||
47 | " lr %1,1\n" \ | ||
48 | : "+d" (__wh), "+d" (__wl) \ | ||
49 | : : "0", "1", "cc"); \ | ||
50 | wh = __wh; \ | ||
51 | wl = __wl; \ | ||
52 | }) | ||
53 | |||
54 | #define udiv_qrnnd(q, r, n1, n0, d) \ | ||
55 | do { unsigned int __r; \ | ||
56 | (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ | ||
57 | (r) = __r; \ | ||
58 | } while (0) | ||
59 | extern unsigned long __udiv_qrnnd (unsigned int *, unsigned int, | ||
60 | unsigned int , unsigned int); | ||
61 | |||
62 | #define UDIV_NEEDS_NORMALIZATION 0 | ||
63 | |||
64 | #define abort() return 0 | ||
65 | |||
66 | #define __BYTE_ORDER __BIG_ENDIAN | ||
diff --git a/include/asm-s390/smp.h b/include/asm-s390/smp.h index 7097c96ed026..b957e4cda464 100644 --- a/include/asm-s390/smp.h +++ b/include/asm-s390/smp.h | |||
@@ -31,6 +31,10 @@ typedef struct | |||
31 | __u16 cpu; | 31 | __u16 cpu; |
32 | } sigp_info; | 32 | } sigp_info; |
33 | 33 | ||
34 | extern void machine_restart_smp(char *); | ||
35 | extern void machine_halt_smp(void); | ||
36 | extern void machine_power_off_smp(void); | ||
37 | |||
34 | extern void smp_setup_cpu_possible_map(void); | 38 | extern void smp_setup_cpu_possible_map(void); |
35 | extern int smp_call_function_on(void (*func) (void *info), void *info, | 39 | extern int smp_call_function_on(void (*func) (void *info), void *info, |
36 | int nonatomic, int wait, int cpu); | 40 | int nonatomic, int wait, int cpu); |
@@ -106,7 +110,7 @@ smp_call_function_on(void (*func) (void *info), void *info, | |||
106 | static inline void smp_send_stop(void) | 110 | static inline void smp_send_stop(void) |
107 | { | 111 | { |
108 | /* Disable all interrupts/machine checks */ | 112 | /* Disable all interrupts/machine checks */ |
109 | __load_psw_mask(PSW_KERNEL_BITS & ~PSW_MASK_MCHECK); | 113 | __load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK); |
110 | } | 114 | } |
111 | 115 | ||
112 | #define smp_cpu_not_running(cpu) 1 | 116 | #define smp_cpu_not_running(cpu) 1 |
diff --git a/include/asm-s390/system.h b/include/asm-s390/system.h index bd0b05ae87d2..bbe137c3ed69 100644 --- a/include/asm-s390/system.h +++ b/include/asm-s390/system.h | |||
@@ -373,8 +373,8 @@ __set_psw_mask(unsigned long mask) | |||
373 | __load_psw_mask(mask | (__raw_local_irq_stosm(0x00) & ~(-1UL >> 8))); | 373 | __load_psw_mask(mask | (__raw_local_irq_stosm(0x00) & ~(-1UL >> 8))); |
374 | } | 374 | } |
375 | 375 | ||
376 | #define local_mcck_enable() __set_psw_mask(PSW_KERNEL_BITS) | 376 | #define local_mcck_enable() __set_psw_mask(psw_kernel_bits) |
377 | #define local_mcck_disable() __set_psw_mask(PSW_KERNEL_BITS & ~PSW_MASK_MCHECK) | 377 | #define local_mcck_disable() __set_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK) |
378 | 378 | ||
379 | #ifdef CONFIG_SMP | 379 | #ifdef CONFIG_SMP |
380 | 380 | ||
diff --git a/include/asm-s390/tape390.h b/include/asm-s390/tape390.h index f1d66ba0deef..884fba48f1ff 100644 --- a/include/asm-s390/tape390.h +++ b/include/asm-s390/tape390.h | |||
@@ -1,11 +1,11 @@ | |||
1 | /************************************************************************* | 1 | /************************************************************************* |
2 | * | 2 | * |
3 | * tape390.h | 3 | * tape390.h |
4 | * enables user programs to display messages on the tape device | 4 | * enables user programs to display messages and control encryption |
5 | * on s390 tape devices | ||
5 | * | 6 | * |
6 | * S390 and zSeries version | 7 | * Copyright IBM Corp. 2001,2006 |
7 | * Copyright (C) 2001 IBM Corporation | 8 | * Author(s): Michael Holzheu <holzheu@de.ibm.com> |
8 | * Author(s): Despina Papadopoulou <despina_p@de.ibm.com> | ||
9 | * | 9 | * |
10 | *************************************************************************/ | 10 | *************************************************************************/ |
11 | 11 | ||
@@ -36,4 +36,68 @@ typedef struct display_struct { | |||
36 | char message2[8]; | 36 | char message2[8]; |
37 | } display_struct; | 37 | } display_struct; |
38 | 38 | ||
39 | /* | ||
40 | * Tape encryption support | ||
41 | */ | ||
42 | |||
43 | struct tape390_crypt_info { | ||
44 | char capability; | ||
45 | char status; | ||
46 | char medium_status; | ||
47 | } __attribute__ ((packed)); | ||
48 | |||
49 | |||
50 | /* Macros for "capable" field */ | ||
51 | #define TAPE390_CRYPT_SUPPORTED_MASK 0x01 | ||
52 | #define TAPE390_CRYPT_SUPPORTED(x) \ | ||
53 | ((x.capability & TAPE390_CRYPT_SUPPORTED_MASK)) | ||
54 | |||
55 | /* Macros for "status" field */ | ||
56 | #define TAPE390_CRYPT_ON_MASK 0x01 | ||
57 | #define TAPE390_CRYPT_ON(x) (((x.status) & TAPE390_CRYPT_ON_MASK)) | ||
58 | |||
59 | /* Macros for "medium status" field */ | ||
60 | #define TAPE390_MEDIUM_LOADED_MASK 0x01 | ||
61 | #define TAPE390_MEDIUM_ENCRYPTED_MASK 0x02 | ||
62 | #define TAPE390_MEDIUM_ENCRYPTED(x) \ | ||
63 | (((x.medium_status) & TAPE390_MEDIUM_ENCRYPTED_MASK)) | ||
64 | #define TAPE390_MEDIUM_LOADED(x) \ | ||
65 | (((x.medium_status) & TAPE390_MEDIUM_LOADED_MASK)) | ||
66 | |||
67 | /* | ||
68 | * The TAPE390_CRYPT_SET ioctl is used to switch on/off encryption. | ||
69 | * The "encryption_capable" and "tape_status" fields are ignored for this ioctl! | ||
70 | */ | ||
71 | #define TAPE390_CRYPT_SET _IOW('d', 2, struct tape390_crypt_info) | ||
72 | |||
73 | /* | ||
74 | * The TAPE390_CRYPT_QUERY ioctl is used to query the encryption state. | ||
75 | */ | ||
76 | #define TAPE390_CRYPT_QUERY _IOR('d', 3, struct tape390_crypt_info) | ||
77 | |||
78 | /* Values for "kekl1/2_type" and "kekl1/2_type_on_tape" fields */ | ||
79 | #define TAPE390_KEKL_TYPE_NONE 0 | ||
80 | #define TAPE390_KEKL_TYPE_LABEL 1 | ||
81 | #define TAPE390_KEKL_TYPE_HASH 2 | ||
82 | |||
83 | struct tape390_kekl { | ||
84 | unsigned char type; | ||
85 | unsigned char type_on_tape; | ||
86 | char label[65]; | ||
87 | } __attribute__ ((packed)); | ||
88 | |||
89 | struct tape390_kekl_pair { | ||
90 | struct tape390_kekl kekl[2]; | ||
91 | } __attribute__ ((packed)); | ||
92 | |||
93 | /* | ||
94 | * The TAPE390_KEKL_SET ioctl is used to set Key Encrypting Key labels. | ||
95 | */ | ||
96 | #define TAPE390_KEKL_SET _IOW('d', 4, struct tape390_kekl_pair) | ||
97 | |||
98 | /* | ||
99 | * The TAPE390_KEKL_QUERY ioctl is used to query Key Encrypting Key labels. | ||
100 | */ | ||
101 | #define TAPE390_KEKL_QUERY _IOR('d', 5, struct tape390_kekl_pair) | ||
102 | |||
39 | #endif | 103 | #endif |
diff --git a/include/asm-s390/timer.h b/include/asm-s390/timer.h index 30e5cbe570f2..adb34860a543 100644 --- a/include/asm-s390/timer.h +++ b/include/asm-s390/timer.h | |||
@@ -45,6 +45,9 @@ extern void add_virt_timer_periodic(void *new); | |||
45 | extern int mod_virt_timer(struct vtimer_list *timer, __u64 expires); | 45 | extern int mod_virt_timer(struct vtimer_list *timer, __u64 expires); |
46 | extern int del_virt_timer(struct vtimer_list *timer); | 46 | extern int del_virt_timer(struct vtimer_list *timer); |
47 | 47 | ||
48 | extern void init_cpu_vtimer(void); | ||
49 | extern void vtime_init(void); | ||
50 | |||
48 | #endif /* __KERNEL__ */ | 51 | #endif /* __KERNEL__ */ |
49 | 52 | ||
50 | #endif /* _ASM_S390_TIMER_H */ | 53 | #endif /* _ASM_S390_TIMER_H */ |
diff --git a/include/asm-s390/timex.h b/include/asm-s390/timex.h index 4df4a41029a3..98229db24314 100644 --- a/include/asm-s390/timex.h +++ b/include/asm-s390/timex.h | |||
@@ -11,6 +11,41 @@ | |||
11 | #ifndef _ASM_S390_TIMEX_H | 11 | #ifndef _ASM_S390_TIMEX_H |
12 | #define _ASM_S390_TIMEX_H | 12 | #define _ASM_S390_TIMEX_H |
13 | 13 | ||
14 | /* Inline functions for clock register access. */ | ||
15 | static inline int set_clock(__u64 time) | ||
16 | { | ||
17 | int cc; | ||
18 | |||
19 | asm volatile( | ||
20 | " sck 0(%2)\n" | ||
21 | " ipm %0\n" | ||
22 | " srl %0,28\n" | ||
23 | : "=d" (cc) : "m" (time), "a" (&time) : "cc"); | ||
24 | return cc; | ||
25 | } | ||
26 | |||
27 | static inline int store_clock(__u64 *time) | ||
28 | { | ||
29 | int cc; | ||
30 | |||
31 | asm volatile( | ||
32 | " stck 0(%2)\n" | ||
33 | " ipm %0\n" | ||
34 | " srl %0,28\n" | ||
35 | : "=d" (cc), "=m" (*time) : "a" (time) : "cc"); | ||
36 | return cc; | ||
37 | } | ||
38 | |||
39 | static inline void set_clock_comparator(__u64 time) | ||
40 | { | ||
41 | asm volatile("sckc 0(%1)" : : "m" (time), "a" (&time)); | ||
42 | } | ||
43 | |||
44 | static inline void store_clock_comparator(__u64 *time) | ||
45 | { | ||
46 | asm volatile("stckc 0(%1)" : "=m" (*time) : "a" (time)); | ||
47 | } | ||
48 | |||
14 | #define CLOCK_TICK_RATE 1193180 /* Underlying HZ */ | 49 | #define CLOCK_TICK_RATE 1193180 /* Underlying HZ */ |
15 | 50 | ||
16 | typedef unsigned long long cycles_t; | 51 | typedef unsigned long long cycles_t; |
@@ -27,9 +62,24 @@ static inline unsigned long long get_clock (void) | |||
27 | return clk; | 62 | return clk; |
28 | } | 63 | } |
29 | 64 | ||
65 | static inline void get_clock_extended(void *dest) | ||
66 | { | ||
67 | typedef struct { unsigned long long clk[2]; } __clock_t; | ||
68 | |||
69 | #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) | ||
70 | asm volatile("stcke %0" : "=Q" (*((__clock_t *)dest)) : : "cc"); | ||
71 | #else /* __GNUC__ */ | ||
72 | asm volatile("stcke 0(%1)" : "=m" (*((__clock_t *)dest)) | ||
73 | : "a" ((__clock_t *)dest) : "cc"); | ||
74 | #endif /* __GNUC__ */ | ||
75 | } | ||
76 | |||
30 | static inline cycles_t get_cycles(void) | 77 | static inline cycles_t get_cycles(void) |
31 | { | 78 | { |
32 | return (cycles_t) get_clock() >> 2; | 79 | return (cycles_t) get_clock() >> 2; |
33 | } | 80 | } |
34 | 81 | ||
82 | int get_sync_clock(unsigned long long *clock); | ||
83 | void init_cpu_timer(void); | ||
84 | |||
35 | #endif | 85 | #endif |
diff --git a/include/asm-s390/tlbflush.h b/include/asm-s390/tlbflush.h index fa4dc916a9bf..66793f55c8b2 100644 --- a/include/asm-s390/tlbflush.h +++ b/include/asm-s390/tlbflush.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #include <linux/mm.h> | 4 | #include <linux/mm.h> |
5 | #include <asm/processor.h> | 5 | #include <asm/processor.h> |
6 | #include <asm/pgalloc.h> | ||
6 | 7 | ||
7 | /* | 8 | /* |
8 | * TLB flushing: | 9 | * TLB flushing: |
@@ -102,6 +103,14 @@ static inline void __flush_tlb_mm(struct mm_struct * mm) | |||
102 | if (unlikely(cpus_empty(mm->cpu_vm_mask))) | 103 | if (unlikely(cpus_empty(mm->cpu_vm_mask))) |
103 | return; | 104 | return; |
104 | if (MACHINE_HAS_IDTE) { | 105 | if (MACHINE_HAS_IDTE) { |
106 | pgd_t *shadow_pgd = get_shadow_pgd(mm->pgd); | ||
107 | |||
108 | if (shadow_pgd) { | ||
109 | asm volatile( | ||
110 | " .insn rrf,0xb98e0000,0,%0,%1,0" | ||
111 | : : "a" (2048), | ||
112 | "a" (__pa(shadow_pgd) & PAGE_MASK) : "cc" ); | ||
113 | } | ||
105 | asm volatile( | 114 | asm volatile( |
106 | " .insn rrf,0xb98e0000,0,%0,%1,0" | 115 | " .insn rrf,0xb98e0000,0,%0,%1,0" |
107 | : : "a" (2048), "a" (__pa(mm->pgd)&PAGE_MASK) : "cc"); | 116 | : : "a" (2048), "a" (__pa(mm->pgd)&PAGE_MASK) : "cc"); |
diff --git a/include/asm-s390/uaccess.h b/include/asm-s390/uaccess.h index 73ac4e82217b..0235970278f0 100644 --- a/include/asm-s390/uaccess.h +++ b/include/asm-s390/uaccess.h | |||
@@ -90,6 +90,8 @@ struct uaccess_ops { | |||
90 | extern struct uaccess_ops uaccess; | 90 | extern struct uaccess_ops uaccess; |
91 | extern struct uaccess_ops uaccess_std; | 91 | extern struct uaccess_ops uaccess_std; |
92 | extern struct uaccess_ops uaccess_mvcos; | 92 | extern struct uaccess_ops uaccess_mvcos; |
93 | extern struct uaccess_ops uaccess_mvcos_switch; | ||
94 | extern struct uaccess_ops uaccess_pt; | ||
93 | 95 | ||
94 | static inline int __put_user_fn(size_t size, void __user *ptr, void *x) | 96 | static inline int __put_user_fn(size_t size, void __user *ptr, void *x) |
95 | { | 97 | { |
diff --git a/include/asm-x86_64/acpi.h b/include/asm-x86_64/acpi.h index 6b6fc6f8be7e..a29f05087a31 100644 --- a/include/asm-x86_64/acpi.h +++ b/include/asm-x86_64/acpi.h | |||
@@ -37,7 +37,7 @@ | |||
37 | * Calling conventions: | 37 | * Calling conventions: |
38 | * | 38 | * |
39 | * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads) | 39 | * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads) |
40 | * ACPI_EXTERNAL_XFACE - External ACPI interfaces | 40 | * ACPI_EXTERNAL_XFACE - External ACPI interfaces |
41 | * ACPI_INTERNAL_XFACE - Internal ACPI interfaces | 41 | * ACPI_INTERNAL_XFACE - Internal ACPI interfaces |
42 | * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces | 42 | * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces |
43 | */ | 43 | */ |
@@ -57,11 +57,11 @@ | |||
57 | int __acpi_acquire_global_lock(unsigned int *lock); | 57 | int __acpi_acquire_global_lock(unsigned int *lock); |
58 | int __acpi_release_global_lock(unsigned int *lock); | 58 | int __acpi_release_global_lock(unsigned int *lock); |
59 | 59 | ||
60 | #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \ | 60 | #define ACPI_ACQUIRE_GLOBAL_LOCK(facs, Acq) \ |
61 | ((Acq) = __acpi_acquire_global_lock((unsigned int *) GLptr)) | 61 | ((Acq) = __acpi_acquire_global_lock(&facs->global_lock)) |
62 | 62 | ||
63 | #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \ | 63 | #define ACPI_RELEASE_GLOBAL_LOCK(facs, Acq) \ |
64 | ((Acq) = __acpi_release_global_lock((unsigned int *) GLptr)) | 64 | ((Acq) = __acpi_release_global_lock(&facs->global_lock)) |
65 | 65 | ||
66 | /* | 66 | /* |
67 | * Math helper asm macros | 67 | * Math helper asm macros |
@@ -87,10 +87,10 @@ extern int acpi_strict; | |||
87 | extern int acpi_disabled; | 87 | extern int acpi_disabled; |
88 | extern int acpi_pci_disabled; | 88 | extern int acpi_pci_disabled; |
89 | extern int acpi_ht; | 89 | extern int acpi_ht; |
90 | static inline void disable_acpi(void) | 90 | static inline void disable_acpi(void) |
91 | { | 91 | { |
92 | acpi_disabled = 1; | 92 | acpi_disabled = 1; |
93 | acpi_ht = 0; | 93 | acpi_ht = 0; |
94 | acpi_pci_disabled = 1; | 94 | acpi_pci_disabled = 1; |
95 | acpi_noirq = 1; | 95 | acpi_noirq = 1; |
96 | } | 96 | } |
@@ -100,9 +100,9 @@ static inline void disable_acpi(void) | |||
100 | 100 | ||
101 | extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq); | 101 | extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq); |
102 | static inline void acpi_noirq_set(void) { acpi_noirq = 1; } | 102 | static inline void acpi_noirq_set(void) { acpi_noirq = 1; } |
103 | static inline void acpi_disable_pci(void) | 103 | static inline void acpi_disable_pci(void) |
104 | { | 104 | { |
105 | acpi_pci_disabled = 1; | 105 | acpi_pci_disabled = 1; |
106 | acpi_noirq_set(); | 106 | acpi_noirq_set(); |
107 | } | 107 | } |
108 | extern int acpi_irq_balance_set(char *str); | 108 | extern int acpi_irq_balance_set(char *str); |
@@ -136,8 +136,6 @@ extern void acpi_reserve_bootmem(void); | |||
136 | extern int acpi_disabled; | 136 | extern int acpi_disabled; |
137 | extern int acpi_pci_disabled; | 137 | extern int acpi_pci_disabled; |
138 | 138 | ||
139 | extern u8 x86_acpiid_to_apicid[]; | ||
140 | |||
141 | #define ARCH_HAS_POWER_INIT 1 | 139 | #define ARCH_HAS_POWER_INIT 1 |
142 | 140 | ||
143 | extern int acpi_skip_timer_override; | 141 | extern int acpi_skip_timer_override; |
diff --git a/include/asm-x86_64/swiotlb.h b/include/asm-x86_64/swiotlb.h index ba94ab3d2673..ab913ffcad56 100644 --- a/include/asm-x86_64/swiotlb.h +++ b/include/asm-x86_64/swiotlb.h | |||
@@ -1,6 +1,5 @@ | |||
1 | #ifndef _ASM_SWIOTLB_H | 1 | #ifndef _ASM_SWIOTLB_H |
2 | #define _ASM_SWTIOLB_H 1 | 2 | #define _ASM_SWIOTLB_H 1 |
3 | |||
4 | 3 | ||
5 | #include <asm/dma-mapping.h> | 4 | #include <asm/dma-mapping.h> |
6 | 5 | ||
@@ -45,6 +44,7 @@ extern void swiotlb_init(void); | |||
45 | extern int swiotlb_force; | 44 | extern int swiotlb_force; |
46 | 45 | ||
47 | #ifdef CONFIG_SWIOTLB | 46 | #ifdef CONFIG_SWIOTLB |
47 | #define SWIOTLB_ARCH_NEED_ALLOC | ||
48 | extern int swiotlb; | 48 | extern int swiotlb; |
49 | #else | 49 | #else |
50 | #define swiotlb 0 | 50 | #define swiotlb 0 |
@@ -52,4 +52,6 @@ extern int swiotlb; | |||
52 | 52 | ||
53 | extern void pci_swiotlb_init(void); | 53 | extern void pci_swiotlb_init(void); |
54 | 54 | ||
55 | #endif /* _ASM_SWTIOLB_H */ | 55 | static inline void dma_mark_clean(void *addr, size_t size) {} |
56 | |||
57 | #endif /* _ASM_SWIOTLB_H */ | ||
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 157db77a7170..683513e310de 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -11,6 +11,7 @@ header-y += netfilter_arp/ | |||
11 | header-y += netfilter_bridge/ | 11 | header-y += netfilter_bridge/ |
12 | header-y += netfilter_ipv4/ | 12 | header-y += netfilter_ipv4/ |
13 | header-y += netfilter_ipv6/ | 13 | header-y += netfilter_ipv6/ |
14 | header-y += usb/ | ||
14 | 15 | ||
15 | header-y += affs_hardblocks.h | 16 | header-y += affs_hardblocks.h |
16 | header-y += aio_abi.h | 17 | header-y += aio_abi.h |
@@ -326,7 +327,6 @@ unifdef-y += udp.h | |||
326 | unifdef-y += uinput.h | 327 | unifdef-y += uinput.h |
327 | unifdef-y += uio.h | 328 | unifdef-y += uio.h |
328 | unifdef-y += unistd.h | 329 | unifdef-y += unistd.h |
329 | unifdef-y += usb_ch9.h | ||
330 | unifdef-y += usbdevice_fs.h | 330 | unifdef-y += usbdevice_fs.h |
331 | unifdef-y += user.h | 331 | unifdef-y += user.h |
332 | unifdef-y += utsname.h | 332 | unifdef-y += utsname.h |
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 91f1f2363870..815f1fb4ce21 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
@@ -53,166 +53,6 @@ enum acpi_irq_model_id { | |||
53 | 53 | ||
54 | extern enum acpi_irq_model_id acpi_irq_model; | 54 | extern enum acpi_irq_model_id acpi_irq_model; |
55 | 55 | ||
56 | |||
57 | /* Root System Description Pointer (RSDP) */ | ||
58 | |||
59 | struct acpi_table_rsdp { | ||
60 | char signature[8]; | ||
61 | u8 checksum; | ||
62 | char oem_id[6]; | ||
63 | u8 revision; | ||
64 | u32 rsdt_address; | ||
65 | } __attribute__ ((packed)); | ||
66 | |||
67 | struct acpi20_table_rsdp { | ||
68 | char signature[8]; | ||
69 | u8 checksum; | ||
70 | char oem_id[6]; | ||
71 | u8 revision; | ||
72 | u32 rsdt_address; | ||
73 | u32 length; | ||
74 | u64 xsdt_address; | ||
75 | u8 ext_checksum; | ||
76 | u8 reserved[3]; | ||
77 | } __attribute__ ((packed)); | ||
78 | |||
79 | typedef struct { | ||
80 | u8 type; | ||
81 | u8 length; | ||
82 | } __attribute__ ((packed)) acpi_table_entry_header; | ||
83 | |||
84 | /* Root System Description Table (RSDT) */ | ||
85 | |||
86 | struct acpi_table_rsdt { | ||
87 | struct acpi_table_header header; | ||
88 | u32 entry[8]; | ||
89 | } __attribute__ ((packed)); | ||
90 | |||
91 | /* Extended System Description Table (XSDT) */ | ||
92 | |||
93 | struct acpi_table_xsdt { | ||
94 | struct acpi_table_header header; | ||
95 | u64 entry[1]; | ||
96 | } __attribute__ ((packed)); | ||
97 | |||
98 | /* Fixed ACPI Description Table (FADT) */ | ||
99 | |||
100 | struct acpi_table_fadt { | ||
101 | struct acpi_table_header header; | ||
102 | u32 facs_addr; | ||
103 | u32 dsdt_addr; | ||
104 | /* ... */ | ||
105 | } __attribute__ ((packed)); | ||
106 | |||
107 | /* Multiple APIC Description Table (MADT) */ | ||
108 | |||
109 | struct acpi_table_madt { | ||
110 | struct acpi_table_header header; | ||
111 | u32 lapic_address; | ||
112 | struct { | ||
113 | u32 pcat_compat:1; | ||
114 | u32 reserved:31; | ||
115 | } flags; | ||
116 | } __attribute__ ((packed)); | ||
117 | |||
118 | enum acpi_madt_entry_id { | ||
119 | ACPI_MADT_LAPIC = 0, | ||
120 | ACPI_MADT_IOAPIC, | ||
121 | ACPI_MADT_INT_SRC_OVR, | ||
122 | ACPI_MADT_NMI_SRC, | ||
123 | ACPI_MADT_LAPIC_NMI, | ||
124 | ACPI_MADT_LAPIC_ADDR_OVR, | ||
125 | ACPI_MADT_IOSAPIC, | ||
126 | ACPI_MADT_LSAPIC, | ||
127 | ACPI_MADT_PLAT_INT_SRC, | ||
128 | ACPI_MADT_ENTRY_COUNT | ||
129 | }; | ||
130 | |||
131 | typedef struct { | ||
132 | u16 polarity:2; | ||
133 | u16 trigger:2; | ||
134 | u16 reserved:12; | ||
135 | } __attribute__ ((packed)) acpi_interrupt_flags; | ||
136 | |||
137 | struct acpi_table_lapic { | ||
138 | acpi_table_entry_header header; | ||
139 | u8 acpi_id; | ||
140 | u8 id; | ||
141 | struct { | ||
142 | u32 enabled:1; | ||
143 | u32 reserved:31; | ||
144 | } flags; | ||
145 | } __attribute__ ((packed)); | ||
146 | |||
147 | struct acpi_table_ioapic { | ||
148 | acpi_table_entry_header header; | ||
149 | u8 id; | ||
150 | u8 reserved; | ||
151 | u32 address; | ||
152 | u32 global_irq_base; | ||
153 | } __attribute__ ((packed)); | ||
154 | |||
155 | struct acpi_table_int_src_ovr { | ||
156 | acpi_table_entry_header header; | ||
157 | u8 bus; | ||
158 | u8 bus_irq; | ||
159 | u32 global_irq; | ||
160 | acpi_interrupt_flags flags; | ||
161 | } __attribute__ ((packed)); | ||
162 | |||
163 | struct acpi_table_nmi_src { | ||
164 | acpi_table_entry_header header; | ||
165 | acpi_interrupt_flags flags; | ||
166 | u32 global_irq; | ||
167 | } __attribute__ ((packed)); | ||
168 | |||
169 | struct acpi_table_lapic_nmi { | ||
170 | acpi_table_entry_header header; | ||
171 | u8 acpi_id; | ||
172 | acpi_interrupt_flags flags; | ||
173 | u8 lint; | ||
174 | } __attribute__ ((packed)); | ||
175 | |||
176 | struct acpi_table_lapic_addr_ovr { | ||
177 | acpi_table_entry_header header; | ||
178 | u8 reserved[2]; | ||
179 | u64 address; | ||
180 | } __attribute__ ((packed)); | ||
181 | |||
182 | struct acpi_table_iosapic { | ||
183 | acpi_table_entry_header header; | ||
184 | u8 id; | ||
185 | u8 reserved; | ||
186 | u32 global_irq_base; | ||
187 | u64 address; | ||
188 | } __attribute__ ((packed)); | ||
189 | |||
190 | struct acpi_table_lsapic { | ||
191 | acpi_table_entry_header header; | ||
192 | u8 acpi_id; | ||
193 | u8 id; | ||
194 | u8 eid; | ||
195 | u8 reserved[3]; | ||
196 | struct { | ||
197 | u32 enabled:1; | ||
198 | u32 reserved:31; | ||
199 | } flags; | ||
200 | } __attribute__ ((packed)); | ||
201 | |||
202 | struct acpi_table_plat_int_src { | ||
203 | acpi_table_entry_header header; | ||
204 | acpi_interrupt_flags flags; | ||
205 | u8 type; /* See acpi_interrupt_type */ | ||
206 | u8 id; | ||
207 | u8 eid; | ||
208 | u8 iosapic_vector; | ||
209 | u32 global_irq; | ||
210 | struct { | ||
211 | u32 cpei_override_flag:1; | ||
212 | u32 reserved:31; | ||
213 | } plint_flags; | ||
214 | } __attribute__ ((packed)); | ||
215 | |||
216 | enum acpi_interrupt_id { | 56 | enum acpi_interrupt_id { |
217 | ACPI_INTERRUPT_PMI = 1, | 57 | ACPI_INTERRUPT_PMI = 1, |
218 | ACPI_INTERRUPT_INIT, | 58 | ACPI_INTERRUPT_INIT, |
@@ -222,89 +62,6 @@ enum acpi_interrupt_id { | |||
222 | 62 | ||
223 | #define ACPI_SPACE_MEM 0 | 63 | #define ACPI_SPACE_MEM 0 |
224 | 64 | ||
225 | struct acpi_gen_regaddr { | ||
226 | u8 space_id; | ||
227 | u8 bit_width; | ||
228 | u8 bit_offset; | ||
229 | u8 resv; | ||
230 | u32 addrl; | ||
231 | u32 addrh; | ||
232 | } __attribute__ ((packed)); | ||
233 | |||
234 | struct acpi_table_hpet { | ||
235 | struct acpi_table_header header; | ||
236 | u32 id; | ||
237 | struct acpi_gen_regaddr addr; | ||
238 | u8 number; | ||
239 | u16 min_tick; | ||
240 | u8 page_protect; | ||
241 | } __attribute__ ((packed)); | ||
242 | |||
243 | /* | ||
244 | * Simple Boot Flags | ||
245 | * http://www.microsoft.com/whdc/hwdev/resources/specs/simp_bios.mspx | ||
246 | */ | ||
247 | struct acpi_table_sbf | ||
248 | { | ||
249 | u8 sbf_signature[4]; | ||
250 | u32 sbf_len; | ||
251 | u8 sbf_revision; | ||
252 | u8 sbf_csum; | ||
253 | u8 sbf_oemid[6]; | ||
254 | u8 sbf_oemtable[8]; | ||
255 | u8 sbf_revdata[4]; | ||
256 | u8 sbf_creator[4]; | ||
257 | u8 sbf_crearev[4]; | ||
258 | u8 sbf_cmos; | ||
259 | u8 sbf_spare[3]; | ||
260 | } __attribute__ ((packed)); | ||
261 | |||
262 | /* | ||
263 | * System Resource Affinity Table (SRAT) | ||
264 | * http://www.microsoft.com/whdc/hwdev/platform/proc/SRAT.mspx | ||
265 | */ | ||
266 | |||
267 | struct acpi_table_srat { | ||
268 | struct acpi_table_header header; | ||
269 | u32 table_revision; | ||
270 | u64 reserved; | ||
271 | } __attribute__ ((packed)); | ||
272 | |||
273 | enum acpi_srat_entry_id { | ||
274 | ACPI_SRAT_PROCESSOR_AFFINITY = 0, | ||
275 | ACPI_SRAT_MEMORY_AFFINITY, | ||
276 | ACPI_SRAT_ENTRY_COUNT | ||
277 | }; | ||
278 | |||
279 | struct acpi_table_processor_affinity { | ||
280 | acpi_table_entry_header header; | ||
281 | u8 proximity_domain; | ||
282 | u8 apic_id; | ||
283 | struct { | ||
284 | u32 enabled:1; | ||
285 | u32 reserved:31; | ||
286 | } flags; | ||
287 | u8 lsapic_eid; | ||
288 | u8 reserved[7]; | ||
289 | } __attribute__ ((packed)); | ||
290 | |||
291 | struct acpi_table_memory_affinity { | ||
292 | acpi_table_entry_header header; | ||
293 | u8 proximity_domain; | ||
294 | u8 reserved1[5]; | ||
295 | u32 base_addr_lo; | ||
296 | u32 base_addr_hi; | ||
297 | u32 length_lo; | ||
298 | u32 length_hi; | ||
299 | u32 memory_type; /* See acpi_address_range_id */ | ||
300 | struct { | ||
301 | u32 enabled:1; | ||
302 | u32 hot_pluggable:1; | ||
303 | u32 reserved:30; | ||
304 | } flags; | ||
305 | u64 reserved2; | ||
306 | } __attribute__ ((packed)); | ||
307 | |||
308 | enum acpi_address_range_id { | 65 | enum acpi_address_range_id { |
309 | ACPI_ADDRESS_RANGE_MEMORY = 1, | 66 | ACPI_ADDRESS_RANGE_MEMORY = 1, |
310 | ACPI_ADDRESS_RANGE_RESERVED = 2, | 67 | ACPI_ADDRESS_RANGE_RESERVED = 2, |
@@ -313,84 +70,12 @@ enum acpi_address_range_id { | |||
313 | ACPI_ADDRESS_RANGE_COUNT | 70 | ACPI_ADDRESS_RANGE_COUNT |
314 | }; | 71 | }; |
315 | 72 | ||
316 | /* | ||
317 | * System Locality Information Table (SLIT) | ||
318 | * see http://devresource.hp.com/devresource/docs/techpapers/ia64/slit.pdf | ||
319 | */ | ||
320 | |||
321 | struct acpi_table_slit { | ||
322 | struct acpi_table_header header; | ||
323 | u64 localities; | ||
324 | u8 entry[1]; /* real size = localities^2 */ | ||
325 | } __attribute__ ((packed)); | ||
326 | |||
327 | /* Smart Battery Description Table (SBST) */ | ||
328 | |||
329 | struct acpi_table_sbst { | ||
330 | struct acpi_table_header header; | ||
331 | u32 warning; /* Warn user */ | ||
332 | u32 low; /* Critical sleep */ | ||
333 | u32 critical; /* Critical shutdown */ | ||
334 | } __attribute__ ((packed)); | ||
335 | |||
336 | /* Embedded Controller Boot Resources Table (ECDT) */ | ||
337 | |||
338 | struct acpi_table_ecdt { | ||
339 | struct acpi_table_header header; | ||
340 | struct acpi_generic_address ec_control; | ||
341 | struct acpi_generic_address ec_data; | ||
342 | u32 uid; | ||
343 | u8 gpe_bit; | ||
344 | char ec_id[0]; | ||
345 | } __attribute__ ((packed)); | ||
346 | |||
347 | /* PCI MMCONFIG */ | ||
348 | |||
349 | /* Defined in PCI Firmware Specification 3.0 */ | ||
350 | struct acpi_table_mcfg_config { | ||
351 | u32 base_address; | ||
352 | u32 base_reserved; | ||
353 | u16 pci_segment_group_number; | ||
354 | u8 start_bus_number; | ||
355 | u8 end_bus_number; | ||
356 | u8 reserved[4]; | ||
357 | } __attribute__ ((packed)); | ||
358 | struct acpi_table_mcfg { | ||
359 | struct acpi_table_header header; | ||
360 | u8 reserved[8]; | ||
361 | struct acpi_table_mcfg_config config[0]; | ||
362 | } __attribute__ ((packed)); | ||
363 | 73 | ||
364 | /* Table Handlers */ | 74 | /* Table Handlers */ |
365 | 75 | ||
366 | enum acpi_table_id { | 76 | typedef int (*acpi_table_handler) (struct acpi_table_header *table); |
367 | ACPI_TABLE_UNKNOWN = 0, | ||
368 | ACPI_APIC, | ||
369 | ACPI_BOOT, | ||
370 | ACPI_DBGP, | ||
371 | ACPI_DSDT, | ||
372 | ACPI_ECDT, | ||
373 | ACPI_ETDT, | ||
374 | ACPI_FADT, | ||
375 | ACPI_FACS, | ||
376 | ACPI_OEMX, | ||
377 | ACPI_PSDT, | ||
378 | ACPI_SBST, | ||
379 | ACPI_SLIT, | ||
380 | ACPI_SPCR, | ||
381 | ACPI_SRAT, | ||
382 | ACPI_SSDT, | ||
383 | ACPI_SPMI, | ||
384 | ACPI_HPET, | ||
385 | ACPI_MCFG, | ||
386 | ACPI_TABLE_COUNT | ||
387 | }; | ||
388 | |||
389 | typedef int (*acpi_table_handler) (unsigned long phys_addr, unsigned long size); | ||
390 | |||
391 | extern acpi_table_handler acpi_table_ops[ACPI_TABLE_COUNT]; | ||
392 | 77 | ||
393 | typedef int (*acpi_madt_entry_handler) (acpi_table_entry_header *header, const unsigned long end); | 78 | typedef int (*acpi_madt_entry_handler) (struct acpi_subtable_header *header, const unsigned long end); |
394 | 79 | ||
395 | char * __acpi_map_table (unsigned long phys_addr, unsigned long size); | 80 | char * __acpi_map_table (unsigned long phys_addr, unsigned long size); |
396 | unsigned long acpi_find_rsdp (void); | 81 | unsigned long acpi_find_rsdp (void); |
@@ -399,14 +84,12 @@ int acpi_boot_table_init (void); | |||
399 | int acpi_numa_init (void); | 84 | int acpi_numa_init (void); |
400 | 85 | ||
401 | int acpi_table_init (void); | 86 | int acpi_table_init (void); |
402 | int acpi_table_parse (enum acpi_table_id id, acpi_table_handler handler); | 87 | int acpi_table_parse (char *id, acpi_table_handler handler); |
403 | int acpi_get_table_header_early (enum acpi_table_id id, struct acpi_table_header **header); | 88 | int acpi_table_parse_madt (enum acpi_madt_type id, acpi_madt_entry_handler handler, unsigned int max_entries); |
404 | int acpi_table_parse_madt (enum acpi_madt_entry_id id, acpi_madt_entry_handler handler, unsigned int max_entries); | 89 | int acpi_table_parse_srat (enum acpi_srat_type id, acpi_madt_entry_handler handler, unsigned int max_entries); |
405 | int acpi_table_parse_srat (enum acpi_srat_entry_id id, acpi_madt_entry_handler handler, unsigned int max_entries); | 90 | int acpi_parse_mcfg (struct acpi_table_header *header); |
406 | int acpi_parse_mcfg (unsigned long phys_addr, unsigned long size); | 91 | void acpi_table_print_madt_entry (struct acpi_subtable_header *madt); |
407 | void acpi_table_print (struct acpi_table_header *header, unsigned long phys_addr); | 92 | void acpi_table_print_srat_entry (struct acpi_subtable_header *srat); |
408 | void acpi_table_print_madt_entry (acpi_table_entry_header *madt); | ||
409 | void acpi_table_print_srat_entry (acpi_table_entry_header *srat); | ||
410 | 93 | ||
411 | /* the following four functions are architecture-dependent */ | 94 | /* the following four functions are architecture-dependent */ |
412 | #ifdef CONFIG_HAVE_ARCH_PARSE_SRAT | 95 | #ifdef CONFIG_HAVE_ARCH_PARSE_SRAT |
@@ -417,8 +100,8 @@ void acpi_table_print_srat_entry (acpi_table_entry_header *srat); | |||
417 | #define acpi_numa_arch_fixup() do {} while (0) | 100 | #define acpi_numa_arch_fixup() do {} while (0) |
418 | #else | 101 | #else |
419 | void acpi_numa_slit_init (struct acpi_table_slit *slit); | 102 | void acpi_numa_slit_init (struct acpi_table_slit *slit); |
420 | void acpi_numa_processor_affinity_init (struct acpi_table_processor_affinity *pa); | 103 | void acpi_numa_processor_affinity_init (struct acpi_srat_cpu_affinity *pa); |
421 | void acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma); | 104 | void acpi_numa_memory_affinity_init (struct acpi_srat_mem_affinity *ma); |
422 | void acpi_numa_arch_fixup(void); | 105 | void acpi_numa_arch_fixup(void); |
423 | #endif | 106 | #endif |
424 | 107 | ||
@@ -433,7 +116,7 @@ int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base); | |||
433 | 116 | ||
434 | extern int acpi_mp_config; | 117 | extern int acpi_mp_config; |
435 | 118 | ||
436 | extern struct acpi_table_mcfg_config *pci_mmcfg_config; | 119 | extern struct acpi_mcfg_allocation *pci_mmcfg_config; |
437 | extern int pci_mmcfg_config_num; | 120 | extern int pci_mmcfg_config_num; |
438 | 121 | ||
439 | extern int sbf_port; | 122 | extern int sbf_port; |
diff --git a/include/linux/device.h b/include/linux/device.h index f44247fe8135..5ca1cdba563a 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -126,6 +126,7 @@ struct device_driver { | |||
126 | struct klist_node knode_bus; | 126 | struct klist_node knode_bus; |
127 | 127 | ||
128 | struct module * owner; | 128 | struct module * owner; |
129 | const char * mod_name; /* used for built-in modules */ | ||
129 | 130 | ||
130 | int (*probe) (struct device * dev); | 131 | int (*probe) (struct device * dev); |
131 | int (*remove) (struct device * dev); | 132 | int (*remove) (struct device * dev); |
@@ -327,6 +328,13 @@ extern struct class_device *class_device_create(struct class *cls, | |||
327 | __attribute__((format(printf,5,6))); | 328 | __attribute__((format(printf,5,6))); |
328 | extern void class_device_destroy(struct class *cls, dev_t devt); | 329 | extern void class_device_destroy(struct class *cls, dev_t devt); |
329 | 330 | ||
331 | struct device_type { | ||
332 | struct device_attribute *attrs; | ||
333 | int (*uevent)(struct device *dev, char **envp, int num_envp, | ||
334 | char *buffer, int buffer_size); | ||
335 | void (*release)(struct device *dev); | ||
336 | }; | ||
337 | |||
330 | /* interface for exporting device attributes */ | 338 | /* interface for exporting device attributes */ |
331 | struct device_attribute { | 339 | struct device_attribute { |
332 | struct attribute attr; | 340 | struct attribute attr; |
@@ -355,6 +363,7 @@ struct device { | |||
355 | 363 | ||
356 | struct kobject kobj; | 364 | struct kobject kobj; |
357 | char bus_id[BUS_ID_SIZE]; /* position on parent bus */ | 365 | char bus_id[BUS_ID_SIZE]; /* position on parent bus */ |
366 | struct device_type *type; | ||
358 | unsigned is_registered:1; | 367 | unsigned is_registered:1; |
359 | struct device_attribute uevent_attr; | 368 | struct device_attribute uevent_attr; |
360 | struct device_attribute *devt_attr; | 369 | struct device_attribute *devt_attr; |
@@ -390,9 +399,10 @@ struct device { | |||
390 | 399 | ||
391 | /* class_device migration path */ | 400 | /* class_device migration path */ |
392 | struct list_head node; | 401 | struct list_head node; |
393 | struct class *class; /* optional*/ | 402 | struct class *class; |
394 | dev_t devt; /* dev_t, creates the sysfs "dev" */ | 403 | dev_t devt; /* dev_t, creates the sysfs "dev" */ |
395 | struct attribute_group **groups; /* optional groups */ | 404 | struct attribute_group **groups; /* optional groups */ |
405 | int uevent_suppress; | ||
396 | 406 | ||
397 | void (*release)(struct device * dev); | 407 | void (*release)(struct device * dev); |
398 | }; | 408 | }; |
diff --git a/include/linux/hid-debug.h b/include/linux/hid-debug.h index 8e4dbb51fc70..50d568ec178a 100644 --- a/include/linux/hid-debug.h +++ b/include/linux/hid-debug.h | |||
@@ -1,10 +1,8 @@ | |||
1 | #ifndef __HID_DEBUG_H | ||
2 | #define __HID_DEBUG_H | ||
3 | |||
1 | /* | 4 | /* |
2 | * $Id: hid-debug.h,v 1.8 2001/09/25 09:37:57 vojtech Exp $ | 5 | * Copyright (c) 2007 Jiri Kosina |
3 | * | ||
4 | * (c) 1999 Andreas Gal <gal@cs.uni-magdeburg.de> | ||
5 | * (c) 2000-2001 Vojtech Pavlik <vojtech@ucw.cz> | ||
6 | * | ||
7 | * Some debug stuff for the HID parser. | ||
8 | */ | 6 | */ |
9 | 7 | ||
10 | /* | 8 | /* |
@@ -22,737 +20,26 @@ | |||
22 | * along with this program; if not, write to the Free Software | 20 | * along with this program; if not, write to the Free Software |
23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 | * | 22 | * |
25 | * Should you need to contact me, the author, you can do so either by | ||
26 | * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail: | ||
27 | * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic | ||
28 | */ | 23 | */ |
29 | 24 | ||
30 | #include <linux/input.h> | 25 | #ifdef CONFIG_HID_DEBUG |
31 | |||
32 | struct hid_usage_entry { | ||
33 | unsigned page; | ||
34 | unsigned usage; | ||
35 | char *description; | ||
36 | }; | ||
37 | |||
38 | static const struct hid_usage_entry hid_usage_table[] = { | ||
39 | { 0, 0, "Undefined" }, | ||
40 | { 1, 0, "GenericDesktop" }, | ||
41 | {0, 0x01, "Pointer"}, | ||
42 | {0, 0x02, "Mouse"}, | ||
43 | {0, 0x04, "Joystick"}, | ||
44 | {0, 0x05, "GamePad"}, | ||
45 | {0, 0x06, "Keyboard"}, | ||
46 | {0, 0x07, "Keypad"}, | ||
47 | {0, 0x08, "MultiAxis"}, | ||
48 | {0, 0x30, "X"}, | ||
49 | {0, 0x31, "Y"}, | ||
50 | {0, 0x32, "Z"}, | ||
51 | {0, 0x33, "Rx"}, | ||
52 | {0, 0x34, "Ry"}, | ||
53 | {0, 0x35, "Rz"}, | ||
54 | {0, 0x36, "Slider"}, | ||
55 | {0, 0x37, "Dial"}, | ||
56 | {0, 0x38, "Wheel"}, | ||
57 | {0, 0x39, "HatSwitch"}, | ||
58 | {0, 0x3a, "CountedBuffer"}, | ||
59 | {0, 0x3b, "ByteCount"}, | ||
60 | {0, 0x3c, "MotionWakeup"}, | ||
61 | {0, 0x3d, "Start"}, | ||
62 | {0, 0x3e, "Select"}, | ||
63 | {0, 0x40, "Vx"}, | ||
64 | {0, 0x41, "Vy"}, | ||
65 | {0, 0x42, "Vz"}, | ||
66 | {0, 0x43, "Vbrx"}, | ||
67 | {0, 0x44, "Vbry"}, | ||
68 | {0, 0x45, "Vbrz"}, | ||
69 | {0, 0x46, "Vno"}, | ||
70 | {0, 0x80, "SystemControl"}, | ||
71 | {0, 0x81, "SystemPowerDown"}, | ||
72 | {0, 0x82, "SystemSleep"}, | ||
73 | {0, 0x83, "SystemWakeUp"}, | ||
74 | {0, 0x84, "SystemContextMenu"}, | ||
75 | {0, 0x85, "SystemMainMenu"}, | ||
76 | {0, 0x86, "SystemAppMenu"}, | ||
77 | {0, 0x87, "SystemMenuHelp"}, | ||
78 | {0, 0x88, "SystemMenuExit"}, | ||
79 | {0, 0x89, "SystemMenuSelect"}, | ||
80 | {0, 0x8a, "SystemMenuRight"}, | ||
81 | {0, 0x8b, "SystemMenuLeft"}, | ||
82 | {0, 0x8c, "SystemMenuUp"}, | ||
83 | {0, 0x8d, "SystemMenuDown"}, | ||
84 | {0, 0x90, "D-PadUp"}, | ||
85 | {0, 0x91, "D-PadDown"}, | ||
86 | {0, 0x92, "D-PadRight"}, | ||
87 | {0, 0x93, "D-PadLeft"}, | ||
88 | { 2, 0, "Simulation" }, | ||
89 | {0, 0xb0, "Aileron"}, | ||
90 | {0, 0xb1, "AileronTrim"}, | ||
91 | {0, 0xb2, "Anti-Torque"}, | ||
92 | {0, 0xb3, "Autopilot"}, | ||
93 | {0, 0xb4, "Chaff"}, | ||
94 | {0, 0xb5, "Collective"}, | ||
95 | {0, 0xb6, "DiveBrake"}, | ||
96 | {0, 0xb7, "ElectronicCountermeasures"}, | ||
97 | {0, 0xb8, "Elevator"}, | ||
98 | {0, 0xb9, "ElevatorTrim"}, | ||
99 | {0, 0xba, "Rudder"}, | ||
100 | {0, 0xbb, "Throttle"}, | ||
101 | {0, 0xbc, "FlightCommunications"}, | ||
102 | {0, 0xbd, "FlareRelease"}, | ||
103 | {0, 0xbe, "LandingGear"}, | ||
104 | {0, 0xbf, "ToeBrake"}, | ||
105 | { 7, 0, "Keyboard" }, | ||
106 | { 8, 0, "LED" }, | ||
107 | {0, 0x01, "NumLock"}, | ||
108 | {0, 0x02, "CapsLock"}, | ||
109 | {0, 0x03, "ScrollLock"}, | ||
110 | {0, 0x04, "Compose"}, | ||
111 | {0, 0x05, "Kana"}, | ||
112 | {0, 0x4b, "GenericIndicator"}, | ||
113 | { 9, 0, "Button" }, | ||
114 | { 10, 0, "Ordinal" }, | ||
115 | { 12, 0, "Consumer" }, | ||
116 | {0, 0x238, "HorizontalWheel"}, | ||
117 | { 13, 0, "Digitizers" }, | ||
118 | {0, 0x01, "Digitizer"}, | ||
119 | {0, 0x02, "Pen"}, | ||
120 | {0, 0x03, "LightPen"}, | ||
121 | {0, 0x04, "TouchScreen"}, | ||
122 | {0, 0x05, "TouchPad"}, | ||
123 | {0, 0x20, "Stylus"}, | ||
124 | {0, 0x21, "Puck"}, | ||
125 | {0, 0x22, "Finger"}, | ||
126 | {0, 0x30, "TipPressure"}, | ||
127 | {0, 0x31, "BarrelPressure"}, | ||
128 | {0, 0x32, "InRange"}, | ||
129 | {0, 0x33, "Touch"}, | ||
130 | {0, 0x34, "UnTouch"}, | ||
131 | {0, 0x35, "Tap"}, | ||
132 | {0, 0x39, "TabletFunctionKey"}, | ||
133 | {0, 0x3a, "ProgramChangeKey"}, | ||
134 | {0, 0x3c, "Invert"}, | ||
135 | {0, 0x42, "TipSwitch"}, | ||
136 | {0, 0x43, "SecondaryTipSwitch"}, | ||
137 | {0, 0x44, "BarrelSwitch"}, | ||
138 | {0, 0x45, "Eraser"}, | ||
139 | {0, 0x46, "TabletPick"}, | ||
140 | { 15, 0, "PhysicalInterfaceDevice" }, | ||
141 | {0, 0x00, "Undefined"}, | ||
142 | {0, 0x01, "Physical_Interface_Device"}, | ||
143 | {0, 0x20, "Normal"}, | ||
144 | {0, 0x21, "Set_Effect_Report"}, | ||
145 | {0, 0x22, "Effect_Block_Index"}, | ||
146 | {0, 0x23, "Parameter_Block_Offset"}, | ||
147 | {0, 0x24, "ROM_Flag"}, | ||
148 | {0, 0x25, "Effect_Type"}, | ||
149 | {0, 0x26, "ET_Constant_Force"}, | ||
150 | {0, 0x27, "ET_Ramp"}, | ||
151 | {0, 0x28, "ET_Custom_Force_Data"}, | ||
152 | {0, 0x30, "ET_Square"}, | ||
153 | {0, 0x31, "ET_Sine"}, | ||
154 | {0, 0x32, "ET_Triangle"}, | ||
155 | {0, 0x33, "ET_Sawtooth_Up"}, | ||
156 | {0, 0x34, "ET_Sawtooth_Down"}, | ||
157 | {0, 0x40, "ET_Spring"}, | ||
158 | {0, 0x41, "ET_Damper"}, | ||
159 | {0, 0x42, "ET_Inertia"}, | ||
160 | {0, 0x43, "ET_Friction"}, | ||
161 | {0, 0x50, "Duration"}, | ||
162 | {0, 0x51, "Sample_Period"}, | ||
163 | {0, 0x52, "Gain"}, | ||
164 | {0, 0x53, "Trigger_Button"}, | ||
165 | {0, 0x54, "Trigger_Repeat_Interval"}, | ||
166 | {0, 0x55, "Axes_Enable"}, | ||
167 | {0, 0x56, "Direction_Enable"}, | ||
168 | {0, 0x57, "Direction"}, | ||
169 | {0, 0x58, "Type_Specific_Block_Offset"}, | ||
170 | {0, 0x59, "Block_Type"}, | ||
171 | {0, 0x5A, "Set_Envelope_Report"}, | ||
172 | {0, 0x5B, "Attack_Level"}, | ||
173 | {0, 0x5C, "Attack_Time"}, | ||
174 | {0, 0x5D, "Fade_Level"}, | ||
175 | {0, 0x5E, "Fade_Time"}, | ||
176 | {0, 0x5F, "Set_Condition_Report"}, | ||
177 | {0, 0x60, "CP_Offset"}, | ||
178 | {0, 0x61, "Positive_Coefficient"}, | ||
179 | {0, 0x62, "Negative_Coefficient"}, | ||
180 | {0, 0x63, "Positive_Saturation"}, | ||
181 | {0, 0x64, "Negative_Saturation"}, | ||
182 | {0, 0x65, "Dead_Band"}, | ||
183 | {0, 0x66, "Download_Force_Sample"}, | ||
184 | {0, 0x67, "Isoch_Custom_Force_Enable"}, | ||
185 | {0, 0x68, "Custom_Force_Data_Report"}, | ||
186 | {0, 0x69, "Custom_Force_Data"}, | ||
187 | {0, 0x6A, "Custom_Force_Vendor_Defined_Data"}, | ||
188 | {0, 0x6B, "Set_Custom_Force_Report"}, | ||
189 | {0, 0x6C, "Custom_Force_Data_Offset"}, | ||
190 | {0, 0x6D, "Sample_Count"}, | ||
191 | {0, 0x6E, "Set_Periodic_Report"}, | ||
192 | {0, 0x6F, "Offset"}, | ||
193 | {0, 0x70, "Magnitude"}, | ||
194 | {0, 0x71, "Phase"}, | ||
195 | {0, 0x72, "Period"}, | ||
196 | {0, 0x73, "Set_Constant_Force_Report"}, | ||
197 | {0, 0x74, "Set_Ramp_Force_Report"}, | ||
198 | {0, 0x75, "Ramp_Start"}, | ||
199 | {0, 0x76, "Ramp_End"}, | ||
200 | {0, 0x77, "Effect_Operation_Report"}, | ||
201 | {0, 0x78, "Effect_Operation"}, | ||
202 | {0, 0x79, "Op_Effect_Start"}, | ||
203 | {0, 0x7A, "Op_Effect_Start_Solo"}, | ||
204 | {0, 0x7B, "Op_Effect_Stop"}, | ||
205 | {0, 0x7C, "Loop_Count"}, | ||
206 | {0, 0x7D, "Device_Gain_Report"}, | ||
207 | {0, 0x7E, "Device_Gain"}, | ||
208 | {0, 0x7F, "PID_Pool_Report"}, | ||
209 | {0, 0x80, "RAM_Pool_Size"}, | ||
210 | {0, 0x81, "ROM_Pool_Size"}, | ||
211 | {0, 0x82, "ROM_Effect_Block_Count"}, | ||
212 | {0, 0x83, "Simultaneous_Effects_Max"}, | ||
213 | {0, 0x84, "Pool_Alignment"}, | ||
214 | {0, 0x85, "PID_Pool_Move_Report"}, | ||
215 | {0, 0x86, "Move_Source"}, | ||
216 | {0, 0x87, "Move_Destination"}, | ||
217 | {0, 0x88, "Move_Length"}, | ||
218 | {0, 0x89, "PID_Block_Load_Report"}, | ||
219 | {0, 0x8B, "Block_Load_Status"}, | ||
220 | {0, 0x8C, "Block_Load_Success"}, | ||
221 | {0, 0x8D, "Block_Load_Full"}, | ||
222 | {0, 0x8E, "Block_Load_Error"}, | ||
223 | {0, 0x8F, "Block_Handle"}, | ||
224 | {0, 0x90, "PID_Block_Free_Report"}, | ||
225 | {0, 0x91, "Type_Specific_Block_Handle"}, | ||
226 | {0, 0x92, "PID_State_Report"}, | ||
227 | {0, 0x94, "Effect_Playing"}, | ||
228 | {0, 0x95, "PID_Device_Control_Report"}, | ||
229 | {0, 0x96, "PID_Device_Control"}, | ||
230 | {0, 0x97, "DC_Enable_Actuators"}, | ||
231 | {0, 0x98, "DC_Disable_Actuators"}, | ||
232 | {0, 0x99, "DC_Stop_All_Effects"}, | ||
233 | {0, 0x9A, "DC_Device_Reset"}, | ||
234 | {0, 0x9B, "DC_Device_Pause"}, | ||
235 | {0, 0x9C, "DC_Device_Continue"}, | ||
236 | {0, 0x9F, "Device_Paused"}, | ||
237 | {0, 0xA0, "Actuators_Enabled"}, | ||
238 | {0, 0xA4, "Safety_Switch"}, | ||
239 | {0, 0xA5, "Actuator_Override_Switch"}, | ||
240 | {0, 0xA6, "Actuator_Power"}, | ||
241 | {0, 0xA7, "Start_Delay"}, | ||
242 | {0, 0xA8, "Parameter_Block_Size"}, | ||
243 | {0, 0xA9, "Device_Managed_Pool"}, | ||
244 | {0, 0xAA, "Shared_Parameter_Blocks"}, | ||
245 | {0, 0xAB, "Create_New_Effect_Report"}, | ||
246 | {0, 0xAC, "RAM_Pool_Available"}, | ||
247 | { 0x84, 0, "Power Device" }, | ||
248 | { 0x84, 0x02, "PresentStatus" }, | ||
249 | { 0x84, 0x03, "ChangeStatus" }, | ||
250 | { 0x84, 0x04, "UPS" }, | ||
251 | { 0x84, 0x05, "PowerSupply" }, | ||
252 | { 0x84, 0x10, "BatterySystem" }, | ||
253 | { 0x84, 0x11, "BatterySystemID" }, | ||
254 | { 0x84, 0x12, "Battery" }, | ||
255 | { 0x84, 0x13, "BatteryID" }, | ||
256 | { 0x84, 0x14, "Charger" }, | ||
257 | { 0x84, 0x15, "ChargerID" }, | ||
258 | { 0x84, 0x16, "PowerConverter" }, | ||
259 | { 0x84, 0x17, "PowerConverterID" }, | ||
260 | { 0x84, 0x18, "OutletSystem" }, | ||
261 | { 0x84, 0x19, "OutletSystemID" }, | ||
262 | { 0x84, 0x1a, "Input" }, | ||
263 | { 0x84, 0x1b, "InputID" }, | ||
264 | { 0x84, 0x1c, "Output" }, | ||
265 | { 0x84, 0x1d, "OutputID" }, | ||
266 | { 0x84, 0x1e, "Flow" }, | ||
267 | { 0x84, 0x1f, "FlowID" }, | ||
268 | { 0x84, 0x20, "Outlet" }, | ||
269 | { 0x84, 0x21, "OutletID" }, | ||
270 | { 0x84, 0x22, "Gang" }, | ||
271 | { 0x84, 0x24, "PowerSummary" }, | ||
272 | { 0x84, 0x25, "PowerSummaryID" }, | ||
273 | { 0x84, 0x30, "Voltage" }, | ||
274 | { 0x84, 0x31, "Current" }, | ||
275 | { 0x84, 0x32, "Frequency" }, | ||
276 | { 0x84, 0x33, "ApparentPower" }, | ||
277 | { 0x84, 0x35, "PercentLoad" }, | ||
278 | { 0x84, 0x40, "ConfigVoltage" }, | ||
279 | { 0x84, 0x41, "ConfigCurrent" }, | ||
280 | { 0x84, 0x43, "ConfigApparentPower" }, | ||
281 | { 0x84, 0x53, "LowVoltageTransfer" }, | ||
282 | { 0x84, 0x54, "HighVoltageTransfer" }, | ||
283 | { 0x84, 0x56, "DelayBeforeStartup" }, | ||
284 | { 0x84, 0x57, "DelayBeforeShutdown" }, | ||
285 | { 0x84, 0x58, "Test" }, | ||
286 | { 0x84, 0x5a, "AudibleAlarmControl" }, | ||
287 | { 0x84, 0x60, "Present" }, | ||
288 | { 0x84, 0x61, "Good" }, | ||
289 | { 0x84, 0x62, "InternalFailure" }, | ||
290 | { 0x84, 0x65, "Overload" }, | ||
291 | { 0x84, 0x66, "OverCharged" }, | ||
292 | { 0x84, 0x67, "OverTemperature" }, | ||
293 | { 0x84, 0x68, "ShutdownRequested" }, | ||
294 | { 0x84, 0x69, "ShutdownImminent" }, | ||
295 | { 0x84, 0x6b, "SwitchOn/Off" }, | ||
296 | { 0x84, 0x6c, "Switchable" }, | ||
297 | { 0x84, 0x6d, "Used" }, | ||
298 | { 0x84, 0x6e, "Boost" }, | ||
299 | { 0x84, 0x73, "CommunicationLost" }, | ||
300 | { 0x84, 0xfd, "iManufacturer" }, | ||
301 | { 0x84, 0xfe, "iProduct" }, | ||
302 | { 0x84, 0xff, "iSerialNumber" }, | ||
303 | { 0x85, 0, "Battery System" }, | ||
304 | { 0x85, 0x01, "SMBBatteryMode" }, | ||
305 | { 0x85, 0x02, "SMBBatteryStatus" }, | ||
306 | { 0x85, 0x03, "SMBAlarmWarning" }, | ||
307 | { 0x85, 0x04, "SMBChargerMode" }, | ||
308 | { 0x85, 0x05, "SMBChargerStatus" }, | ||
309 | { 0x85, 0x06, "SMBChargerSpecInfo" }, | ||
310 | { 0x85, 0x07, "SMBSelectorState" }, | ||
311 | { 0x85, 0x08, "SMBSelectorPresets" }, | ||
312 | { 0x85, 0x09, "SMBSelectorInfo" }, | ||
313 | { 0x85, 0x29, "RemainingCapacityLimit" }, | ||
314 | { 0x85, 0x2c, "CapacityMode" }, | ||
315 | { 0x85, 0x42, "BelowRemainingCapacityLimit" }, | ||
316 | { 0x85, 0x44, "Charging" }, | ||
317 | { 0x85, 0x45, "Discharging" }, | ||
318 | { 0x85, 0x4b, "NeedReplacement" }, | ||
319 | { 0x85, 0x66, "RemainingCapacity" }, | ||
320 | { 0x85, 0x68, "RunTimeToEmpty" }, | ||
321 | { 0x85, 0x6a, "AverageTimeToFull" }, | ||
322 | { 0x85, 0x83, "DesignCapacity" }, | ||
323 | { 0x85, 0x85, "ManufacturerDate" }, | ||
324 | { 0x85, 0x89, "iDeviceChemistry" }, | ||
325 | { 0x85, 0x8b, "Rechargable" }, | ||
326 | { 0x85, 0x8f, "iOEMInformation" }, | ||
327 | { 0x85, 0x8d, "CapacityGranularity1" }, | ||
328 | { 0x85, 0xd0, "ACPresent" }, | ||
329 | /* pages 0xff00 to 0xffff are vendor-specific */ | ||
330 | { 0xffff, 0, "Vendor-specific-FF" }, | ||
331 | { 0, 0, NULL } | ||
332 | }; | ||
333 | |||
334 | static void resolv_usage_page(unsigned page) { | ||
335 | const struct hid_usage_entry *p; | ||
336 | |||
337 | for (p = hid_usage_table; p->description; p++) | ||
338 | if (p->page == page) { | ||
339 | printk("%s", p->description); | ||
340 | return; | ||
341 | } | ||
342 | printk("%04x", page); | ||
343 | } | ||
344 | |||
345 | static void resolv_usage(unsigned usage) { | ||
346 | const struct hid_usage_entry *p; | ||
347 | |||
348 | resolv_usage_page(usage >> 16); | ||
349 | printk("."); | ||
350 | for (p = hid_usage_table; p->description; p++) | ||
351 | if (p->page == (usage >> 16)) { | ||
352 | for(++p; p->description && p->usage != 0; p++) | ||
353 | if (p->usage == (usage & 0xffff)) { | ||
354 | printk("%s", p->description); | ||
355 | return; | ||
356 | } | ||
357 | break; | ||
358 | } | ||
359 | printk("%04x", usage & 0xffff); | ||
360 | } | ||
361 | |||
362 | __inline__ static void tab(int n) { | ||
363 | while (n--) printk(" "); | ||
364 | } | ||
365 | |||
366 | static void hid_dump_field(struct hid_field *field, int n) { | ||
367 | int j; | ||
368 | |||
369 | if (field->physical) { | ||
370 | tab(n); | ||
371 | printk("Physical("); | ||
372 | resolv_usage(field->physical); printk(")\n"); | ||
373 | } | ||
374 | if (field->logical) { | ||
375 | tab(n); | ||
376 | printk("Logical("); | ||
377 | resolv_usage(field->logical); printk(")\n"); | ||
378 | } | ||
379 | tab(n); printk("Usage(%d)\n", field->maxusage); | ||
380 | for (j = 0; j < field->maxusage; j++) { | ||
381 | tab(n+2);resolv_usage(field->usage[j].hid); printk("\n"); | ||
382 | } | ||
383 | if (field->logical_minimum != field->logical_maximum) { | ||
384 | tab(n); printk("Logical Minimum(%d)\n", field->logical_minimum); | ||
385 | tab(n); printk("Logical Maximum(%d)\n", field->logical_maximum); | ||
386 | } | ||
387 | if (field->physical_minimum != field->physical_maximum) { | ||
388 | tab(n); printk("Physical Minimum(%d)\n", field->physical_minimum); | ||
389 | tab(n); printk("Physical Maximum(%d)\n", field->physical_maximum); | ||
390 | } | ||
391 | if (field->unit_exponent) { | ||
392 | tab(n); printk("Unit Exponent(%d)\n", field->unit_exponent); | ||
393 | } | ||
394 | if (field->unit) { | ||
395 | char *systems[5] = { "None", "SI Linear", "SI Rotation", "English Linear", "English Rotation" }; | ||
396 | char *units[5][8] = { | ||
397 | { "None", "None", "None", "None", "None", "None", "None", "None" }, | ||
398 | { "None", "Centimeter", "Gram", "Seconds", "Kelvin", "Ampere", "Candela", "None" }, | ||
399 | { "None", "Radians", "Gram", "Seconds", "Kelvin", "Ampere", "Candela", "None" }, | ||
400 | { "None", "Inch", "Slug", "Seconds", "Fahrenheit", "Ampere", "Candela", "None" }, | ||
401 | { "None", "Degrees", "Slug", "Seconds", "Fahrenheit", "Ampere", "Candela", "None" } | ||
402 | }; | ||
403 | |||
404 | int i; | ||
405 | int sys; | ||
406 | __u32 data = field->unit; | ||
407 | |||
408 | /* First nibble tells us which system we're in. */ | ||
409 | sys = data & 0xf; | ||
410 | data >>= 4; | ||
411 | |||
412 | if(sys > 4) { | ||
413 | tab(n); printk("Unit(Invalid)\n"); | ||
414 | } | ||
415 | else { | ||
416 | int earlier_unit = 0; | ||
417 | |||
418 | tab(n); printk("Unit(%s : ", systems[sys]); | ||
419 | |||
420 | for (i=1 ; i<sizeof(__u32)*2 ; i++) { | ||
421 | char nibble = data & 0xf; | ||
422 | data >>= 4; | ||
423 | if (nibble != 0) { | ||
424 | if(earlier_unit++ > 0) | ||
425 | printk("*"); | ||
426 | printk("%s", units[sys][i]); | ||
427 | if(nibble != 1) { | ||
428 | /* This is a _signed_ nibble(!) */ | ||
429 | |||
430 | int val = nibble & 0x7; | ||
431 | if(nibble & 0x08) | ||
432 | val = -((0x7 & ~val) +1); | ||
433 | printk("^%d", val); | ||
434 | } | ||
435 | } | ||
436 | } | ||
437 | printk(")\n"); | ||
438 | } | ||
439 | } | ||
440 | tab(n); printk("Report Size(%u)\n", field->report_size); | ||
441 | tab(n); printk("Report Count(%u)\n", field->report_count); | ||
442 | tab(n); printk("Report Offset(%u)\n", field->report_offset); | ||
443 | |||
444 | tab(n); printk("Flags( "); | ||
445 | j = field->flags; | ||
446 | printk("%s", HID_MAIN_ITEM_CONSTANT & j ? "Constant " : ""); | ||
447 | printk("%s", HID_MAIN_ITEM_VARIABLE & j ? "Variable " : "Array "); | ||
448 | printk("%s", HID_MAIN_ITEM_RELATIVE & j ? "Relative " : "Absolute "); | ||
449 | printk("%s", HID_MAIN_ITEM_WRAP & j ? "Wrap " : ""); | ||
450 | printk("%s", HID_MAIN_ITEM_NONLINEAR & j ? "NonLinear " : ""); | ||
451 | printk("%s", HID_MAIN_ITEM_NO_PREFERRED & j ? "NoPrefferedState " : ""); | ||
452 | printk("%s", HID_MAIN_ITEM_NULL_STATE & j ? "NullState " : ""); | ||
453 | printk("%s", HID_MAIN_ITEM_VOLATILE & j ? "Volatile " : ""); | ||
454 | printk("%s", HID_MAIN_ITEM_BUFFERED_BYTE & j ? "BufferedByte " : ""); | ||
455 | printk(")\n"); | ||
456 | } | ||
457 | |||
458 | static void __attribute__((unused)) hid_dump_device(struct hid_device *device) { | ||
459 | struct hid_report_enum *report_enum; | ||
460 | struct hid_report *report; | ||
461 | struct list_head *list; | ||
462 | unsigned i,k; | ||
463 | static char *table[] = {"INPUT", "OUTPUT", "FEATURE"}; | ||
464 | |||
465 | for (i = 0; i < HID_REPORT_TYPES; i++) { | ||
466 | report_enum = device->report_enum + i; | ||
467 | list = report_enum->report_list.next; | ||
468 | while (list != &report_enum->report_list) { | ||
469 | report = (struct hid_report *) list; | ||
470 | tab(2); | ||
471 | printk("%s", table[i]); | ||
472 | if (report->id) | ||
473 | printk("(%d)", report->id); | ||
474 | printk("[%s]", table[report->type]); | ||
475 | printk("\n"); | ||
476 | for (k = 0; k < report->maxfield; k++) { | ||
477 | tab(4); | ||
478 | printk("Field(%d)\n", k); | ||
479 | hid_dump_field(report->field[k], 6); | ||
480 | } | ||
481 | list = list->next; | ||
482 | } | ||
483 | } | ||
484 | } | ||
485 | |||
486 | static void __attribute__((unused)) hid_dump_input(struct hid_usage *usage, __s32 value) { | ||
487 | printk("hid-debug: input "); | ||
488 | resolv_usage(usage->hid); | ||
489 | printk(" = %d\n", value); | ||
490 | } | ||
491 | |||
492 | |||
493 | static char *events[EV_MAX + 1] = { | ||
494 | [EV_SYN] = "Sync", [EV_KEY] = "Key", | ||
495 | [EV_REL] = "Relative", [EV_ABS] = "Absolute", | ||
496 | [EV_MSC] = "Misc", [EV_LED] = "LED", | ||
497 | [EV_SND] = "Sound", [EV_REP] = "Repeat", | ||
498 | [EV_FF] = "ForceFeedback", [EV_PWR] = "Power", | ||
499 | [EV_FF_STATUS] = "ForceFeedbackStatus", | ||
500 | }; | ||
501 | |||
502 | static char *syncs[2] = { | ||
503 | [SYN_REPORT] = "Report", [SYN_CONFIG] = "Config", | ||
504 | }; | ||
505 | static char *keys[KEY_MAX + 1] = { | ||
506 | [KEY_RESERVED] = "Reserved", [KEY_ESC] = "Esc", | ||
507 | [KEY_1] = "1", [KEY_2] = "2", | ||
508 | [KEY_3] = "3", [KEY_4] = "4", | ||
509 | [KEY_5] = "5", [KEY_6] = "6", | ||
510 | [KEY_7] = "7", [KEY_8] = "8", | ||
511 | [KEY_9] = "9", [KEY_0] = "0", | ||
512 | [KEY_MINUS] = "Minus", [KEY_EQUAL] = "Equal", | ||
513 | [KEY_BACKSPACE] = "Backspace", [KEY_TAB] = "Tab", | ||
514 | [KEY_Q] = "Q", [KEY_W] = "W", | ||
515 | [KEY_E] = "E", [KEY_R] = "R", | ||
516 | [KEY_T] = "T", [KEY_Y] = "Y", | ||
517 | [KEY_U] = "U", [KEY_I] = "I", | ||
518 | [KEY_O] = "O", [KEY_P] = "P", | ||
519 | [KEY_LEFTBRACE] = "LeftBrace", [KEY_RIGHTBRACE] = "RightBrace", | ||
520 | [KEY_ENTER] = "Enter", [KEY_LEFTCTRL] = "LeftControl", | ||
521 | [KEY_A] = "A", [KEY_S] = "S", | ||
522 | [KEY_D] = "D", [KEY_F] = "F", | ||
523 | [KEY_G] = "G", [KEY_H] = "H", | ||
524 | [KEY_J] = "J", [KEY_K] = "K", | ||
525 | [KEY_L] = "L", [KEY_SEMICOLON] = "Semicolon", | ||
526 | [KEY_APOSTROPHE] = "Apostrophe", [KEY_GRAVE] = "Grave", | ||
527 | [KEY_LEFTSHIFT] = "LeftShift", [KEY_BACKSLASH] = "BackSlash", | ||
528 | [KEY_Z] = "Z", [KEY_X] = "X", | ||
529 | [KEY_C] = "C", [KEY_V] = "V", | ||
530 | [KEY_B] = "B", [KEY_N] = "N", | ||
531 | [KEY_M] = "M", [KEY_COMMA] = "Comma", | ||
532 | [KEY_DOT] = "Dot", [KEY_SLASH] = "Slash", | ||
533 | [KEY_RIGHTSHIFT] = "RightShift", [KEY_KPASTERISK] = "KPAsterisk", | ||
534 | [KEY_LEFTALT] = "LeftAlt", [KEY_SPACE] = "Space", | ||
535 | [KEY_CAPSLOCK] = "CapsLock", [KEY_F1] = "F1", | ||
536 | [KEY_F2] = "F2", [KEY_F3] = "F3", | ||
537 | [KEY_F4] = "F4", [KEY_F5] = "F5", | ||
538 | [KEY_F6] = "F6", [KEY_F7] = "F7", | ||
539 | [KEY_F8] = "F8", [KEY_F9] = "F9", | ||
540 | [KEY_F10] = "F10", [KEY_NUMLOCK] = "NumLock", | ||
541 | [KEY_SCROLLLOCK] = "ScrollLock", [KEY_KP7] = "KP7", | ||
542 | [KEY_KP8] = "KP8", [KEY_KP9] = "KP9", | ||
543 | [KEY_KPMINUS] = "KPMinus", [KEY_KP4] = "KP4", | ||
544 | [KEY_KP5] = "KP5", [KEY_KP6] = "KP6", | ||
545 | [KEY_KPPLUS] = "KPPlus", [KEY_KP1] = "KP1", | ||
546 | [KEY_KP2] = "KP2", [KEY_KP3] = "KP3", | ||
547 | [KEY_KP0] = "KP0", [KEY_KPDOT] = "KPDot", | ||
548 | [KEY_ZENKAKUHANKAKU] = "Zenkaku/Hankaku", [KEY_102ND] = "102nd", | ||
549 | [KEY_F11] = "F11", [KEY_F12] = "F12", | ||
550 | [KEY_RO] = "RO", [KEY_KATAKANA] = "Katakana", | ||
551 | [KEY_HIRAGANA] = "HIRAGANA", [KEY_HENKAN] = "Henkan", | ||
552 | [KEY_KATAKANAHIRAGANA] = "Katakana/Hiragana", [KEY_MUHENKAN] = "Muhenkan", | ||
553 | [KEY_KPJPCOMMA] = "KPJpComma", [KEY_KPENTER] = "KPEnter", | ||
554 | [KEY_RIGHTCTRL] = "RightCtrl", [KEY_KPSLASH] = "KPSlash", | ||
555 | [KEY_SYSRQ] = "SysRq", [KEY_RIGHTALT] = "RightAlt", | ||
556 | [KEY_LINEFEED] = "LineFeed", [KEY_HOME] = "Home", | ||
557 | [KEY_UP] = "Up", [KEY_PAGEUP] = "PageUp", | ||
558 | [KEY_LEFT] = "Left", [KEY_RIGHT] = "Right", | ||
559 | [KEY_END] = "End", [KEY_DOWN] = "Down", | ||
560 | [KEY_PAGEDOWN] = "PageDown", [KEY_INSERT] = "Insert", | ||
561 | [KEY_DELETE] = "Delete", [KEY_MACRO] = "Macro", | ||
562 | [KEY_MUTE] = "Mute", [KEY_VOLUMEDOWN] = "VolumeDown", | ||
563 | [KEY_VOLUMEUP] = "VolumeUp", [KEY_POWER] = "Power", | ||
564 | [KEY_KPEQUAL] = "KPEqual", [KEY_KPPLUSMINUS] = "KPPlusMinus", | ||
565 | [KEY_PAUSE] = "Pause", [KEY_KPCOMMA] = "KPComma", | ||
566 | [KEY_HANGUEL] = "Hangeul", [KEY_HANJA] = "Hanja", | ||
567 | [KEY_YEN] = "Yen", [KEY_LEFTMETA] = "LeftMeta", | ||
568 | [KEY_RIGHTMETA] = "RightMeta", [KEY_COMPOSE] = "Compose", | ||
569 | [KEY_STOP] = "Stop", [KEY_AGAIN] = "Again", | ||
570 | [KEY_PROPS] = "Props", [KEY_UNDO] = "Undo", | ||
571 | [KEY_FRONT] = "Front", [KEY_COPY] = "Copy", | ||
572 | [KEY_OPEN] = "Open", [KEY_PASTE] = "Paste", | ||
573 | [KEY_FIND] = "Find", [KEY_CUT] = "Cut", | ||
574 | [KEY_HELP] = "Help", [KEY_MENU] = "Menu", | ||
575 | [KEY_CALC] = "Calc", [KEY_SETUP] = "Setup", | ||
576 | [KEY_SLEEP] = "Sleep", [KEY_WAKEUP] = "WakeUp", | ||
577 | [KEY_FILE] = "File", [KEY_SENDFILE] = "SendFile", | ||
578 | [KEY_DELETEFILE] = "DeleteFile", [KEY_XFER] = "X-fer", | ||
579 | [KEY_PROG1] = "Prog1", [KEY_PROG2] = "Prog2", | ||
580 | [KEY_WWW] = "WWW", [KEY_MSDOS] = "MSDOS", | ||
581 | [KEY_COFFEE] = "Coffee", [KEY_DIRECTION] = "Direction", | ||
582 | [KEY_CYCLEWINDOWS] = "CycleWindows", [KEY_MAIL] = "Mail", | ||
583 | [KEY_BOOKMARKS] = "Bookmarks", [KEY_COMPUTER] = "Computer", | ||
584 | [KEY_BACK] = "Back", [KEY_FORWARD] = "Forward", | ||
585 | [KEY_CLOSECD] = "CloseCD", [KEY_EJECTCD] = "EjectCD", | ||
586 | [KEY_EJECTCLOSECD] = "EjectCloseCD", [KEY_NEXTSONG] = "NextSong", | ||
587 | [KEY_PLAYPAUSE] = "PlayPause", [KEY_PREVIOUSSONG] = "PreviousSong", | ||
588 | [KEY_STOPCD] = "StopCD", [KEY_RECORD] = "Record", | ||
589 | [KEY_REWIND] = "Rewind", [KEY_PHONE] = "Phone", | ||
590 | [KEY_ISO] = "ISOKey", [KEY_CONFIG] = "Config", | ||
591 | [KEY_HOMEPAGE] = "HomePage", [KEY_REFRESH] = "Refresh", | ||
592 | [KEY_EXIT] = "Exit", [KEY_MOVE] = "Move", | ||
593 | [KEY_EDIT] = "Edit", [KEY_SCROLLUP] = "ScrollUp", | ||
594 | [KEY_SCROLLDOWN] = "ScrollDown", [KEY_KPLEFTPAREN] = "KPLeftParenthesis", | ||
595 | [KEY_KPRIGHTPAREN] = "KPRightParenthesis", [KEY_NEW] = "New", | ||
596 | [KEY_REDO] = "Redo", [KEY_F13] = "F13", | ||
597 | [KEY_F14] = "F14", [KEY_F15] = "F15", | ||
598 | [KEY_F16] = "F16", [KEY_F17] = "F17", | ||
599 | [KEY_F18] = "F18", [KEY_F19] = "F19", | ||
600 | [KEY_F20] = "F20", [KEY_F21] = "F21", | ||
601 | [KEY_F22] = "F22", [KEY_F23] = "F23", | ||
602 | [KEY_F24] = "F24", [KEY_PLAYCD] = "PlayCD", | ||
603 | [KEY_PAUSECD] = "PauseCD", [KEY_PROG3] = "Prog3", | ||
604 | [KEY_PROG4] = "Prog4", [KEY_SUSPEND] = "Suspend", | ||
605 | [KEY_CLOSE] = "Close", [KEY_PLAY] = "Play", | ||
606 | [KEY_FASTFORWARD] = "FastForward", [KEY_BASSBOOST] = "BassBoost", | ||
607 | [KEY_PRINT] = "Print", [KEY_HP] = "HP", | ||
608 | [KEY_CAMERA] = "Camera", [KEY_SOUND] = "Sound", | ||
609 | [KEY_QUESTION] = "Question", [KEY_EMAIL] = "Email", | ||
610 | [KEY_CHAT] = "Chat", [KEY_SEARCH] = "Search", | ||
611 | [KEY_CONNECT] = "Connect", [KEY_FINANCE] = "Finance", | ||
612 | [KEY_SPORT] = "Sport", [KEY_SHOP] = "Shop", | ||
613 | [KEY_ALTERASE] = "AlternateErase", [KEY_CANCEL] = "Cancel", | ||
614 | [KEY_BRIGHTNESSDOWN] = "BrightnessDown", [KEY_BRIGHTNESSUP] = "BrightnessUp", | ||
615 | [KEY_MEDIA] = "Media", [KEY_UNKNOWN] = "Unknown", | ||
616 | [BTN_0] = "Btn0", [BTN_1] = "Btn1", | ||
617 | [BTN_2] = "Btn2", [BTN_3] = "Btn3", | ||
618 | [BTN_4] = "Btn4", [BTN_5] = "Btn5", | ||
619 | [BTN_6] = "Btn6", [BTN_7] = "Btn7", | ||
620 | [BTN_8] = "Btn8", [BTN_9] = "Btn9", | ||
621 | [BTN_LEFT] = "LeftBtn", [BTN_RIGHT] = "RightBtn", | ||
622 | [BTN_MIDDLE] = "MiddleBtn", [BTN_SIDE] = "SideBtn", | ||
623 | [BTN_EXTRA] = "ExtraBtn", [BTN_FORWARD] = "ForwardBtn", | ||
624 | [BTN_BACK] = "BackBtn", [BTN_TASK] = "TaskBtn", | ||
625 | [BTN_TRIGGER] = "Trigger", [BTN_THUMB] = "ThumbBtn", | ||
626 | [BTN_THUMB2] = "ThumbBtn2", [BTN_TOP] = "TopBtn", | ||
627 | [BTN_TOP2] = "TopBtn2", [BTN_PINKIE] = "PinkieBtn", | ||
628 | [BTN_BASE] = "BaseBtn", [BTN_BASE2] = "BaseBtn2", | ||
629 | [BTN_BASE3] = "BaseBtn3", [BTN_BASE4] = "BaseBtn4", | ||
630 | [BTN_BASE5] = "BaseBtn5", [BTN_BASE6] = "BaseBtn6", | ||
631 | [BTN_DEAD] = "BtnDead", [BTN_A] = "BtnA", | ||
632 | [BTN_B] = "BtnB", [BTN_C] = "BtnC", | ||
633 | [BTN_X] = "BtnX", [BTN_Y] = "BtnY", | ||
634 | [BTN_Z] = "BtnZ", [BTN_TL] = "BtnTL", | ||
635 | [BTN_TR] = "BtnTR", [BTN_TL2] = "BtnTL2", | ||
636 | [BTN_TR2] = "BtnTR2", [BTN_SELECT] = "BtnSelect", | ||
637 | [BTN_START] = "BtnStart", [BTN_MODE] = "BtnMode", | ||
638 | [BTN_THUMBL] = "BtnThumbL", [BTN_THUMBR] = "BtnThumbR", | ||
639 | [BTN_TOOL_PEN] = "ToolPen", [BTN_TOOL_RUBBER] = "ToolRubber", | ||
640 | [BTN_TOOL_BRUSH] = "ToolBrush", [BTN_TOOL_PENCIL] = "ToolPencil", | ||
641 | [BTN_TOOL_AIRBRUSH] = "ToolAirbrush", [BTN_TOOL_FINGER] = "ToolFinger", | ||
642 | [BTN_TOOL_MOUSE] = "ToolMouse", [BTN_TOOL_LENS] = "ToolLens", | ||
643 | [BTN_TOUCH] = "Touch", [BTN_STYLUS] = "Stylus", | ||
644 | [BTN_STYLUS2] = "Stylus2", [BTN_TOOL_DOUBLETAP] = "ToolDoubleTap", | ||
645 | [BTN_TOOL_TRIPLETAP] = "ToolTripleTap", [BTN_GEAR_DOWN] = "WheelBtn", | ||
646 | [BTN_GEAR_UP] = "Gear up", [KEY_OK] = "Ok", | ||
647 | [KEY_SELECT] = "Select", [KEY_GOTO] = "Goto", | ||
648 | [KEY_CLEAR] = "Clear", [KEY_POWER2] = "Power2", | ||
649 | [KEY_OPTION] = "Option", [KEY_INFO] = "Info", | ||
650 | [KEY_TIME] = "Time", [KEY_VENDOR] = "Vendor", | ||
651 | [KEY_ARCHIVE] = "Archive", [KEY_PROGRAM] = "Program", | ||
652 | [KEY_CHANNEL] = "Channel", [KEY_FAVORITES] = "Favorites", | ||
653 | [KEY_EPG] = "EPG", [KEY_PVR] = "PVR", | ||
654 | [KEY_MHP] = "MHP", [KEY_LANGUAGE] = "Language", | ||
655 | [KEY_TITLE] = "Title", [KEY_SUBTITLE] = "Subtitle", | ||
656 | [KEY_ANGLE] = "Angle", [KEY_ZOOM] = "Zoom", | ||
657 | [KEY_MODE] = "Mode", [KEY_KEYBOARD] = "Keyboard", | ||
658 | [KEY_SCREEN] = "Screen", [KEY_PC] = "PC", | ||
659 | [KEY_TV] = "TV", [KEY_TV2] = "TV2", | ||
660 | [KEY_VCR] = "VCR", [KEY_VCR2] = "VCR2", | ||
661 | [KEY_SAT] = "Sat", [KEY_SAT2] = "Sat2", | ||
662 | [KEY_CD] = "CD", [KEY_TAPE] = "Tape", | ||
663 | [KEY_RADIO] = "Radio", [KEY_TUNER] = "Tuner", | ||
664 | [KEY_PLAYER] = "Player", [KEY_TEXT] = "Text", | ||
665 | [KEY_DVD] = "DVD", [KEY_AUX] = "Aux", | ||
666 | [KEY_MP3] = "MP3", [KEY_AUDIO] = "Audio", | ||
667 | [KEY_VIDEO] = "Video", [KEY_DIRECTORY] = "Directory", | ||
668 | [KEY_LIST] = "List", [KEY_MEMO] = "Memo", | ||
669 | [KEY_CALENDAR] = "Calendar", [KEY_RED] = "Red", | ||
670 | [KEY_GREEN] = "Green", [KEY_YELLOW] = "Yellow", | ||
671 | [KEY_BLUE] = "Blue", [KEY_CHANNELUP] = "ChannelUp", | ||
672 | [KEY_CHANNELDOWN] = "ChannelDown", [KEY_FIRST] = "First", | ||
673 | [KEY_LAST] = "Last", [KEY_AB] = "AB", | ||
674 | [KEY_NEXT] = "Next", [KEY_RESTART] = "Restart", | ||
675 | [KEY_SLOW] = "Slow", [KEY_SHUFFLE] = "Shuffle", | ||
676 | [KEY_BREAK] = "Break", [KEY_PREVIOUS] = "Previous", | ||
677 | [KEY_DIGITS] = "Digits", [KEY_TEEN] = "TEEN", | ||
678 | [KEY_TWEN] = "TWEN", [KEY_DEL_EOL] = "DeleteEOL", | ||
679 | [KEY_DEL_EOS] = "DeleteEOS", [KEY_INS_LINE] = "InsertLine", | ||
680 | [KEY_DEL_LINE] = "DeleteLine", | ||
681 | [KEY_SEND] = "Send", [KEY_REPLY] = "Reply", | ||
682 | [KEY_FORWARDMAIL] = "ForwardMail", [KEY_SAVE] = "Save", | ||
683 | [KEY_DOCUMENTS] = "Documents", | ||
684 | [KEY_FN] = "Fn", [KEY_FN_ESC] = "Fn+ESC", | ||
685 | [KEY_FN_1] = "Fn+1", [KEY_FN_2] = "Fn+2", | ||
686 | [KEY_FN_B] = "Fn+B", [KEY_FN_D] = "Fn+D", | ||
687 | [KEY_FN_E] = "Fn+E", [KEY_FN_F] = "Fn+F", | ||
688 | [KEY_FN_S] = "Fn+S", | ||
689 | [KEY_FN_F1] = "Fn+F1", [KEY_FN_F2] = "Fn+F2", | ||
690 | [KEY_FN_F3] = "Fn+F3", [KEY_FN_F4] = "Fn+F4", | ||
691 | [KEY_FN_F5] = "Fn+F5", [KEY_FN_F6] = "Fn+F6", | ||
692 | [KEY_FN_F7] = "Fn+F7", [KEY_FN_F8] = "Fn+F8", | ||
693 | [KEY_FN_F9] = "Fn+F9", [KEY_FN_F10] = "Fn+F10", | ||
694 | [KEY_FN_F11] = "Fn+F11", [KEY_FN_F12] = "Fn+F12", | ||
695 | [KEY_KBDILLUMTOGGLE] = "KbdIlluminationToggle", | ||
696 | [KEY_KBDILLUMDOWN] = "KbdIlluminationDown", | ||
697 | [KEY_KBDILLUMUP] = "KbdIlluminationUp", | ||
698 | [KEY_SWITCHVIDEOMODE] = "SwitchVideoMode", | ||
699 | }; | ||
700 | |||
701 | static char *relatives[REL_MAX + 1] = { | ||
702 | [REL_X] = "X", [REL_Y] = "Y", | ||
703 | [REL_Z] = "Z", [REL_RX] = "Rx", | ||
704 | [REL_RY] = "Ry", [REL_RZ] = "Rz", | ||
705 | [REL_HWHEEL] = "HWheel", [REL_DIAL] = "Dial", | ||
706 | [REL_WHEEL] = "Wheel", [REL_MISC] = "Misc", | ||
707 | }; | ||
708 | |||
709 | static char *absolutes[ABS_MAX + 1] = { | ||
710 | [ABS_X] = "X", [ABS_Y] = "Y", | ||
711 | [ABS_Z] = "Z", [ABS_RX] = "Rx", | ||
712 | [ABS_RY] = "Ry", [ABS_RZ] = "Rz", | ||
713 | [ABS_THROTTLE] = "Throttle", [ABS_RUDDER] = "Rudder", | ||
714 | [ABS_WHEEL] = "Wheel", [ABS_GAS] = "Gas", | ||
715 | [ABS_BRAKE] = "Brake", [ABS_HAT0X] = "Hat0X", | ||
716 | [ABS_HAT0Y] = "Hat0Y", [ABS_HAT1X] = "Hat1X", | ||
717 | [ABS_HAT1Y] = "Hat1Y", [ABS_HAT2X] = "Hat2X", | ||
718 | [ABS_HAT2Y] = "Hat2Y", [ABS_HAT3X] = "Hat3X", | ||
719 | [ABS_HAT3Y] = "Hat 3Y", [ABS_PRESSURE] = "Pressure", | ||
720 | [ABS_DISTANCE] = "Distance", [ABS_TILT_X] = "XTilt", | ||
721 | [ABS_TILT_Y] = "YTilt", [ABS_TOOL_WIDTH] = "Tool Width", | ||
722 | [ABS_VOLUME] = "Volume", [ABS_MISC] = "Misc", | ||
723 | }; | ||
724 | 26 | ||
725 | static char *misc[MSC_MAX + 1] = { | 27 | void hid_dump_input(struct hid_usage *, __s32); |
726 | [MSC_SERIAL] = "Serial", [MSC_PULSELED] = "Pulseled", | 28 | void hid_dump_device(struct hid_device *); |
727 | [MSC_GESTURE] = "Gesture", [MSC_RAW] = "RawData" | 29 | void hid_dump_field(struct hid_field *, int); |
728 | }; | 30 | void hid_resolv_usage(unsigned); |
31 | void hid_resolv_event(__u8, __u16); | ||
729 | 32 | ||
730 | static char *leds[LED_MAX + 1] = { | 33 | #else |
731 | [LED_NUML] = "NumLock", [LED_CAPSL] = "CapsLock", | ||
732 | [LED_SCROLLL] = "ScrollLock", [LED_COMPOSE] = "Compose", | ||
733 | [LED_KANA] = "Kana", [LED_SLEEP] = "Sleep", | ||
734 | [LED_SUSPEND] = "Suspend", [LED_MUTE] = "Mute", | ||
735 | [LED_MISC] = "Misc", | ||
736 | }; | ||
737 | 34 | ||
738 | static char *repeats[REP_MAX + 1] = { | 35 | #define hid_dump_input(a,b) do { } while (0) |
739 | [REP_DELAY] = "Delay", [REP_PERIOD] = "Period" | 36 | #define hid_dump_device(c) do { } while (0) |
740 | }; | 37 | #define hid_dump_field(a,b) do { } while (0) |
38 | #define hid_resolv_usage(a) do { } while (0) | ||
39 | #define hid_resolv_event(a,b) do { } while (0) | ||
741 | 40 | ||
742 | static char *sounds[SND_MAX + 1] = { | 41 | #endif /* CONFIG_HID_DEBUG */ |
743 | [SND_CLICK] = "Click", [SND_BELL] = "Bell", | ||
744 | [SND_TONE] = "Tone" | ||
745 | }; | ||
746 | 42 | ||
747 | static char **names[EV_MAX + 1] = { | ||
748 | [EV_SYN] = syncs, [EV_KEY] = keys, | ||
749 | [EV_REL] = relatives, [EV_ABS] = absolutes, | ||
750 | [EV_MSC] = misc, [EV_LED] = leds, | ||
751 | [EV_SND] = sounds, [EV_REP] = repeats, | ||
752 | }; | ||
753 | 43 | ||
754 | static void __attribute__((unused)) resolv_event(__u8 type, __u16 code) { | 44 | #endif |
755 | 45 | ||
756 | printk("%s.%s", events[type] ? events[type] : "?", | ||
757 | names[type] ? (names[type][code] ? names[type][code] : "?") : "?"); | ||
758 | } | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index 342b4e639acb..d26b08f461f2 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
@@ -264,6 +264,9 @@ struct hid_item { | |||
264 | #define HID_QUIRK_INVERT_HWHEEL 0x00004000 | 264 | #define HID_QUIRK_INVERT_HWHEEL 0x00004000 |
265 | #define HID_QUIRK_POWERBOOK_ISO_KEYBOARD 0x00008000 | 265 | #define HID_QUIRK_POWERBOOK_ISO_KEYBOARD 0x00008000 |
266 | #define HID_QUIRK_BAD_RELATIVE_KEYS 0x00010000 | 266 | #define HID_QUIRK_BAD_RELATIVE_KEYS 0x00010000 |
267 | #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00020000 | ||
268 | #define HID_QUIRK_IGNORE_MOUSE 0x00040000 | ||
269 | #define HID_QUIRK_SONY_PS3_CONTROLLER 0x00080000 | ||
267 | 270 | ||
268 | /* | 271 | /* |
269 | * This is the global environment of the parser. This information is | 272 | * This is the global environment of the parser. This information is |
@@ -430,8 +433,8 @@ struct hid_device { /* device report descriptor */ | |||
430 | 433 | ||
431 | /* device-specific function pointers */ | 434 | /* device-specific function pointers */ |
432 | int (*hidinput_input_event) (struct input_dev *, unsigned int, unsigned int, int); | 435 | int (*hidinput_input_event) (struct input_dev *, unsigned int, unsigned int, int); |
433 | int (*hidinput_open) (struct input_dev *); | 436 | int (*hid_open) (struct hid_device *); |
434 | void (*hidinput_close) (struct input_dev *); | 437 | void (*hid_close) (struct hid_device *); |
435 | 438 | ||
436 | /* hiddev event handler */ | 439 | /* hiddev event handler */ |
437 | void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field, | 440 | void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field, |
@@ -471,16 +474,6 @@ struct hid_descriptor { | |||
471 | struct hid_class_descriptor desc[1]; | 474 | struct hid_class_descriptor desc[1]; |
472 | } __attribute__ ((packed)); | 475 | } __attribute__ ((packed)); |
473 | 476 | ||
474 | #ifdef DEBUG | ||
475 | #include "hid-debug.h" | ||
476 | #else | ||
477 | #define hid_dump_input(a,b) do { } while (0) | ||
478 | #define hid_dump_device(c) do { } while (0) | ||
479 | #define hid_dump_field(a,b) do { } while (0) | ||
480 | #define resolv_usage(a) do { } while (0) | ||
481 | #define resolv_event(a,b) do { } while (0) | ||
482 | #endif | ||
483 | |||
484 | /* Applications from HID Usage Tables 4/8/99 Version 1.1 */ | 477 | /* Applications from HID Usage Tables 4/8/99 Version 1.1 */ |
485 | /* We ignore a few input applications that are not widely used */ | 478 | /* We ignore a few input applications that are not widely used */ |
486 | #define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001)) | 479 | #define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001)) |
@@ -503,6 +496,7 @@ struct hid_device *hid_parse_report(__u8 *start, unsigned size); | |||
503 | int hid_ff_init(struct hid_device *hid); | 496 | int hid_ff_init(struct hid_device *hid); |
504 | 497 | ||
505 | int hid_lgff_init(struct hid_device *hid); | 498 | int hid_lgff_init(struct hid_device *hid); |
499 | int hid_plff_init(struct hid_device *hid); | ||
506 | int hid_tmff_init(struct hid_device *hid); | 500 | int hid_tmff_init(struct hid_device *hid); |
507 | int hid_zpff_init(struct hid_device *hid); | 501 | int hid_zpff_init(struct hid_device *hid); |
508 | #ifdef CONFIG_HID_PID | 502 | #ifdef CONFIG_HID_PID |
diff --git a/include/linux/ide.h b/include/linux/ide.h index e26a03981a94..04e0fa97ac99 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -18,6 +18,9 @@ | |||
18 | #include <linux/device.h> | 18 | #include <linux/device.h> |
19 | #include <linux/pci.h> | 19 | #include <linux/pci.h> |
20 | #include <linux/completion.h> | 20 | #include <linux/completion.h> |
21 | #ifdef CONFIG_BLK_DEV_IDEACPI | ||
22 | #include <acpi/acpi.h> | ||
23 | #endif | ||
21 | #include <asm/byteorder.h> | 24 | #include <asm/byteorder.h> |
22 | #include <asm/system.h> | 25 | #include <asm/system.h> |
23 | #include <asm/io.h> | 26 | #include <asm/io.h> |
@@ -541,6 +544,11 @@ typedef enum { | |||
541 | struct ide_driver_s; | 544 | struct ide_driver_s; |
542 | struct ide_settings_s; | 545 | struct ide_settings_s; |
543 | 546 | ||
547 | #ifdef CONFIG_BLK_DEV_IDEACPI | ||
548 | struct ide_acpi_drive_link; | ||
549 | struct ide_acpi_hwif_link; | ||
550 | #endif | ||
551 | |||
544 | typedef struct ide_drive_s { | 552 | typedef struct ide_drive_s { |
545 | char name[4]; /* drive name, such as "hda" */ | 553 | char name[4]; /* drive name, such as "hda" */ |
546 | char driver_req[10]; /* requests specific driver */ | 554 | char driver_req[10]; /* requests specific driver */ |
@@ -637,6 +645,9 @@ typedef struct ide_drive_s { | |||
637 | 645 | ||
638 | int lun; /* logical unit */ | 646 | int lun; /* logical unit */ |
639 | int crc_count; /* crc counter to reduce drive speed */ | 647 | int crc_count; /* crc counter to reduce drive speed */ |
648 | #ifdef CONFIG_BLK_DEV_IDEACPI | ||
649 | struct ide_acpi_drive_link *acpidata; | ||
650 | #endif | ||
640 | struct list_head list; | 651 | struct list_head list; |
641 | struct device gendev; | 652 | struct device gendev; |
642 | struct completion gendev_rel_comp; /* to deal with device release() */ | 653 | struct completion gendev_rel_comp; /* to deal with device release() */ |
@@ -804,6 +815,10 @@ typedef struct hwif_s { | |||
804 | void *hwif_data; /* extra hwif data */ | 815 | void *hwif_data; /* extra hwif data */ |
805 | 816 | ||
806 | unsigned dma; | 817 | unsigned dma; |
818 | |||
819 | #ifdef CONFIG_BLK_DEV_IDEACPI | ||
820 | struct ide_acpi_hwif_link *acpidata; | ||
821 | #endif | ||
807 | } ____cacheline_internodealigned_in_smp ide_hwif_t; | 822 | } ____cacheline_internodealigned_in_smp ide_hwif_t; |
808 | 823 | ||
809 | /* | 824 | /* |
@@ -1192,8 +1207,8 @@ void ide_init_disk(struct gendisk *, ide_drive_t *); | |||
1192 | extern int ideprobe_init(void); | 1207 | extern int ideprobe_init(void); |
1193 | 1208 | ||
1194 | extern void ide_scan_pcibus(int scan_direction) __init; | 1209 | extern void ide_scan_pcibus(int scan_direction) __init; |
1195 | extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *owner); | 1210 | extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *owner, const char *mod_name); |
1196 | #define ide_pci_register_driver(d) __ide_pci_register_driver(d, THIS_MODULE) | 1211 | #define ide_pci_register_driver(d) __ide_pci_register_driver(d, THIS_MODULE, KBUILD_MODNAME) |
1197 | void ide_pci_setup_ports(struct pci_dev *, struct ide_pci_device_s *, int, ata_index_t *); | 1212 | void ide_pci_setup_ports(struct pci_dev *, struct ide_pci_device_s *, int, ata_index_t *); |
1198 | extern void ide_setup_pci_noise (struct pci_dev *dev, struct ide_pci_device_s *d); | 1213 | extern void ide_setup_pci_noise (struct pci_dev *dev, struct ide_pci_device_s *d); |
1199 | 1214 | ||
@@ -1298,6 +1313,18 @@ static inline void ide_dma_verbose(ide_drive_t *drive) { ; } | |||
1298 | static inline void ide_release_dma(ide_hwif_t *drive) {;} | 1313 | static inline void ide_release_dma(ide_hwif_t *drive) {;} |
1299 | #endif | 1314 | #endif |
1300 | 1315 | ||
1316 | #ifdef CONFIG_BLK_DEV_IDEACPI | ||
1317 | extern int ide_acpi_exec_tfs(ide_drive_t *drive); | ||
1318 | extern void ide_acpi_get_timing(ide_hwif_t *hwif); | ||
1319 | extern void ide_acpi_push_timing(ide_hwif_t *hwif); | ||
1320 | extern void ide_acpi_init(ide_hwif_t *hwif); | ||
1321 | #else | ||
1322 | static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } | ||
1323 | static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } | ||
1324 | static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } | ||
1325 | static inline void ide_acpi_init(ide_hwif_t *hwif) { ; } | ||
1326 | #endif | ||
1327 | |||
1301 | extern int ide_hwif_request_regions(ide_hwif_t *hwif); | 1328 | extern int ide_hwif_request_regions(ide_hwif_t *hwif); |
1302 | extern void ide_hwif_release_regions(ide_hwif_t* hwif); | 1329 | extern void ide_hwif_release_regions(ide_hwif_t* hwif); |
1303 | extern void ide_unregister (unsigned int index); | 1330 | extern void ide_unregister (unsigned int index); |
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h index 99393ef3af39..f3de05c30678 100644 --- a/include/linux/if_packet.h +++ b/include/linux/if_packet.h | |||
@@ -41,6 +41,7 @@ struct sockaddr_ll | |||
41 | #define PACKET_RX_RING 5 | 41 | #define PACKET_RX_RING 5 |
42 | #define PACKET_STATISTICS 6 | 42 | #define PACKET_STATISTICS 6 |
43 | #define PACKET_COPY_THRESH 7 | 43 | #define PACKET_COPY_THRESH 7 |
44 | #define PACKET_AUXDATA 8 | ||
44 | 45 | ||
45 | struct tpacket_stats | 46 | struct tpacket_stats |
46 | { | 47 | { |
@@ -48,6 +49,15 @@ struct tpacket_stats | |||
48 | unsigned int tp_drops; | 49 | unsigned int tp_drops; |
49 | }; | 50 | }; |
50 | 51 | ||
52 | struct tpacket_auxdata | ||
53 | { | ||
54 | __u32 tp_status; | ||
55 | __u32 tp_len; | ||
56 | __u32 tp_snaplen; | ||
57 | __u16 tp_mac; | ||
58 | __u16 tp_net; | ||
59 | }; | ||
60 | |||
51 | struct tpacket_hdr | 61 | struct tpacket_hdr |
52 | { | 62 | { |
53 | unsigned long tp_status; | 63 | unsigned long tp_status; |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 52fc4052a0ae..5504b671357f 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -68,6 +68,7 @@ typedef void fastcall (*irq_flow_handler_t)(unsigned int irq, | |||
68 | #define IRQ_MOVE_PENDING 0x40000000 /* need to re-target IRQ destination */ | 68 | #define IRQ_MOVE_PENDING 0x40000000 /* need to re-target IRQ destination */ |
69 | 69 | ||
70 | struct proc_dir_entry; | 70 | struct proc_dir_entry; |
71 | struct msi_desc; | ||
71 | 72 | ||
72 | /** | 73 | /** |
73 | * struct irq_chip - hardware interrupt chip descriptor | 74 | * struct irq_chip - hardware interrupt chip descriptor |
@@ -148,6 +149,7 @@ struct irq_chip { | |||
148 | struct irq_desc { | 149 | struct irq_desc { |
149 | irq_flow_handler_t handle_irq; | 150 | irq_flow_handler_t handle_irq; |
150 | struct irq_chip *chip; | 151 | struct irq_chip *chip; |
152 | struct msi_desc *msi_desc; | ||
151 | void *handler_data; | 153 | void *handler_data; |
152 | void *chip_data; | 154 | void *chip_data; |
153 | struct irqaction *action; /* IRQ action list */ | 155 | struct irqaction *action; /* IRQ action list */ |
@@ -373,10 +375,12 @@ extern int set_irq_chip(unsigned int irq, struct irq_chip *chip); | |||
373 | extern int set_irq_data(unsigned int irq, void *data); | 375 | extern int set_irq_data(unsigned int irq, void *data); |
374 | extern int set_irq_chip_data(unsigned int irq, void *data); | 376 | extern int set_irq_chip_data(unsigned int irq, void *data); |
375 | extern int set_irq_type(unsigned int irq, unsigned int type); | 377 | extern int set_irq_type(unsigned int irq, unsigned int type); |
378 | extern int set_irq_msi(unsigned int irq, struct msi_desc *entry); | ||
376 | 379 | ||
377 | #define get_irq_chip(irq) (irq_desc[irq].chip) | 380 | #define get_irq_chip(irq) (irq_desc[irq].chip) |
378 | #define get_irq_chip_data(irq) (irq_desc[irq].chip_data) | 381 | #define get_irq_chip_data(irq) (irq_desc[irq].chip_data) |
379 | #define get_irq_data(irq) (irq_desc[irq].handler_data) | 382 | #define get_irq_data(irq) (irq_desc[irq].handler_data) |
383 | #define get_irq_msi(irq) (irq_desc[irq].msi_desc) | ||
380 | 384 | ||
381 | #endif /* CONFIG_GENERIC_HARDIRQS */ | 385 | #endif /* CONFIG_GENERIC_HARDIRQS */ |
382 | 386 | ||
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 76538fcf2c4e..b850e0310538 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
@@ -74,9 +74,13 @@ extern void kobject_init(struct kobject *); | |||
74 | extern void kobject_cleanup(struct kobject *); | 74 | extern void kobject_cleanup(struct kobject *); |
75 | 75 | ||
76 | extern int __must_check kobject_add(struct kobject *); | 76 | extern int __must_check kobject_add(struct kobject *); |
77 | extern int __must_check kobject_shadow_add(struct kobject *, struct dentry *); | ||
77 | extern void kobject_del(struct kobject *); | 78 | extern void kobject_del(struct kobject *); |
78 | 79 | ||
79 | extern int __must_check kobject_rename(struct kobject *, const char *new_name); | 80 | extern int __must_check kobject_rename(struct kobject *, const char *new_name); |
81 | extern int __must_check kobject_shadow_rename(struct kobject *kobj, | ||
82 | struct dentry *new_parent, | ||
83 | const char *new_name); | ||
80 | extern int __must_check kobject_move(struct kobject *, struct kobject *); | 84 | extern int __must_check kobject_move(struct kobject *, struct kobject *); |
81 | 85 | ||
82 | extern int __must_check kobject_register(struct kobject *); | 86 | extern int __must_check kobject_register(struct kobject *); |
diff --git a/include/linux/log2.h b/include/linux/log2.h index d02e1a547a7e..99922bedfcc9 100644 --- a/include/linux/log2.h +++ b/include/linux/log2.h | |||
@@ -44,6 +44,17 @@ int __ilog2_u64(u64 n) | |||
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | /* | 46 | /* |
47 | * Determine whether some value is a power of two, where zero is | ||
48 | * *not* considered a power of two. | ||
49 | */ | ||
50 | |||
51 | static inline __attribute__((const)) | ||
52 | bool is_power_of_2(unsigned long n) | ||
53 | { | ||
54 | return (n != 0 && ((n & (n - 1)) == 0)); | ||
55 | } | ||
56 | |||
57 | /* | ||
47 | * round up to nearest power of two | 58 | * round up to nearest power of two |
48 | */ | 59 | */ |
49 | static inline __attribute__((const)) | 60 | static inline __attribute__((const)) |
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index d0e6a5497614..e45712acfac5 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h | |||
@@ -71,6 +71,7 @@ struct mmc_card { | |||
71 | #define MMC_STATE_SDCARD (1<<3) /* is an SD card */ | 71 | #define MMC_STATE_SDCARD (1<<3) /* is an SD card */ |
72 | #define MMC_STATE_READONLY (1<<4) /* card is read-only */ | 72 | #define MMC_STATE_READONLY (1<<4) /* card is read-only */ |
73 | #define MMC_STATE_HIGHSPEED (1<<5) /* card is in high speed mode */ | 73 | #define MMC_STATE_HIGHSPEED (1<<5) /* card is in high speed mode */ |
74 | #define MMC_STATE_BLOCKADDR (1<<6) /* card uses block-addressing */ | ||
74 | u32 raw_cid[4]; /* raw card CID */ | 75 | u32 raw_cid[4]; /* raw card CID */ |
75 | u32 raw_csd[4]; /* raw card CSD */ | 76 | u32 raw_csd[4]; /* raw card CSD */ |
76 | u32 raw_scr[2]; /* raw card SCR */ | 77 | u32 raw_scr[2]; /* raw card SCR */ |
@@ -87,6 +88,7 @@ struct mmc_card { | |||
87 | #define mmc_card_sd(c) ((c)->state & MMC_STATE_SDCARD) | 88 | #define mmc_card_sd(c) ((c)->state & MMC_STATE_SDCARD) |
88 | #define mmc_card_readonly(c) ((c)->state & MMC_STATE_READONLY) | 89 | #define mmc_card_readonly(c) ((c)->state & MMC_STATE_READONLY) |
89 | #define mmc_card_highspeed(c) ((c)->state & MMC_STATE_HIGHSPEED) | 90 | #define mmc_card_highspeed(c) ((c)->state & MMC_STATE_HIGHSPEED) |
91 | #define mmc_card_blockaddr(c) ((c)->state & MMC_STATE_BLOCKADDR) | ||
90 | 92 | ||
91 | #define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT) | 93 | #define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT) |
92 | #define mmc_card_set_dead(c) ((c)->state |= MMC_STATE_DEAD) | 94 | #define mmc_card_set_dead(c) ((c)->state |= MMC_STATE_DEAD) |
@@ -94,6 +96,7 @@ struct mmc_card { | |||
94 | #define mmc_card_set_sd(c) ((c)->state |= MMC_STATE_SDCARD) | 96 | #define mmc_card_set_sd(c) ((c)->state |= MMC_STATE_SDCARD) |
95 | #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY) | 97 | #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY) |
96 | #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED) | 98 | #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED) |
99 | #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR) | ||
97 | 100 | ||
98 | #define mmc_card_name(c) ((c)->cid.prod_name) | 101 | #define mmc_card_name(c) ((c)->cid.prod_name) |
99 | #define mmc_card_id(c) ((c)->dev.bus_id) | 102 | #define mmc_card_id(c) ((c)->dev.bus_id) |
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index c15ae1986b98..913e5752569f 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
@@ -92,8 +92,10 @@ struct mmc_host { | |||
92 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ | 92 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ |
93 | unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */ | 93 | unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */ |
94 | unsigned short max_phys_segs; /* see blk_queue_max_phys_segments */ | 94 | unsigned short max_phys_segs; /* see blk_queue_max_phys_segments */ |
95 | unsigned short max_sectors; /* see blk_queue_max_sectors */ | ||
96 | unsigned short unused; | 95 | unsigned short unused; |
96 | unsigned int max_req_size; /* maximum number of bytes in one req */ | ||
97 | unsigned int max_blk_size; /* maximum size of one mmc block */ | ||
98 | unsigned int max_blk_count; /* maximum number of blocks in one req */ | ||
97 | 99 | ||
98 | /* private data */ | 100 | /* private data */ |
99 | struct mmc_ios ios; /* current io bus settings */ | 101 | struct mmc_ios ios; /* current io bus settings */ |
@@ -106,8 +108,9 @@ struct mmc_host { | |||
106 | struct list_head cards; /* devices attached to this host */ | 108 | struct list_head cards; /* devices attached to this host */ |
107 | 109 | ||
108 | wait_queue_head_t wq; | 110 | wait_queue_head_t wq; |
109 | spinlock_t lock; /* card_busy lock */ | 111 | spinlock_t lock; /* claimed lock */ |
110 | struct mmc_card *card_busy; /* the MMC card claiming host */ | 112 | unsigned int claimed:1; /* host exclusively claimed */ |
113 | |||
111 | struct mmc_card *card_selected; /* the selected MMC card */ | 114 | struct mmc_card *card_selected; /* the selected MMC card */ |
112 | 115 | ||
113 | struct delayed_work detect; | 116 | struct delayed_work detect; |
@@ -126,6 +129,7 @@ static inline void *mmc_priv(struct mmc_host *host) | |||
126 | } | 129 | } |
127 | 130 | ||
128 | #define mmc_dev(x) ((x)->parent) | 131 | #define mmc_dev(x) ((x)->parent) |
132 | #define mmc_classdev(x) (&(x)->class_dev) | ||
129 | #define mmc_hostname(x) ((x)->class_dev.bus_id) | 133 | #define mmc_hostname(x) ((x)->class_dev.bus_id) |
130 | 134 | ||
131 | extern int mmc_suspend_host(struct mmc_host *, pm_message_t); | 135 | extern int mmc_suspend_host(struct mmc_host *, pm_message_t); |
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index bcf24909d677..cdc54be804f1 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h | |||
@@ -43,6 +43,7 @@ struct mmc_command { | |||
43 | #define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC) | 43 | #define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC) |
44 | #define MMC_RSP_R3 (MMC_RSP_PRESENT) | 44 | #define MMC_RSP_R3 (MMC_RSP_PRESENT) |
45 | #define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) | 45 | #define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) |
46 | #define MMC_RSP_R7 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) | ||
46 | 47 | ||
47 | #define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE)) | 48 | #define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE)) |
48 | 49 | ||
diff --git a/include/linux/mmc/protocol.h b/include/linux/mmc/protocol.h index 2dce60c43f4b..c90b6768329d 100644 --- a/include/linux/mmc/protocol.h +++ b/include/linux/mmc/protocol.h | |||
@@ -79,9 +79,12 @@ | |||
79 | #define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */ | 79 | #define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */ |
80 | 80 | ||
81 | /* SD commands type argument response */ | 81 | /* SD commands type argument response */ |
82 | /* class 8 */ | 82 | /* class 0 */ |
83 | /* This is basically the same command as for MMC with some quirks. */ | 83 | /* This is basically the same command as for MMC with some quirks. */ |
84 | #define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */ | 84 | #define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */ |
85 | #define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */ | ||
86 | |||
87 | /* class 10 */ | ||
85 | #define SD_SWITCH 6 /* adtc [31:0] See below R1 */ | 88 | #define SD_SWITCH 6 /* adtc [31:0] See below R1 */ |
86 | 89 | ||
87 | /* Application commands */ | 90 | /* Application commands */ |
@@ -115,6 +118,14 @@ | |||
115 | */ | 118 | */ |
116 | 119 | ||
117 | /* | 120 | /* |
121 | * SD_SEND_IF_COND argument format: | ||
122 | * | ||
123 | * [31:12] Reserved (0) | ||
124 | * [11:8] Host Voltage Supply Flags | ||
125 | * [7:0] Check Pattern (0xAA) | ||
126 | */ | ||
127 | |||
128 | /* | ||
118 | MMC status in R1 | 129 | MMC status in R1 |
119 | Type | 130 | Type |
120 | e : error bit | 131 | e : error bit |
diff --git a/include/linux/module.h b/include/linux/module.h index 10f771a49997..419d3ef293dd 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -58,6 +58,7 @@ struct module_kobject | |||
58 | { | 58 | { |
59 | struct kobject kobj; | 59 | struct kobject kobj; |
60 | struct module *mod; | 60 | struct module *mod; |
61 | struct kobject *drivers_dir; | ||
61 | }; | 62 | }; |
62 | 63 | ||
63 | /* These are either module local, or the kernel's dummy ones. */ | 64 | /* These are either module local, or the kernel's dummy ones. */ |
@@ -263,7 +264,7 @@ struct module | |||
263 | struct module_attribute *modinfo_attrs; | 264 | struct module_attribute *modinfo_attrs; |
264 | const char *version; | 265 | const char *version; |
265 | const char *srcversion; | 266 | const char *srcversion; |
266 | struct kobject *drivers_dir; | 267 | struct kobject *holders_dir; |
267 | 268 | ||
268 | /* Exported symbols */ | 269 | /* Exported symbols */ |
269 | const struct kernel_symbol *syms; | 270 | const struct kernel_symbol *syms; |
diff --git a/include/linux/msi.h b/include/linux/msi.h index c7ef94343673..74c8a2ecc9dd 100644 --- a/include/linux/msi.h +++ b/include/linux/msi.h | |||
@@ -7,11 +7,10 @@ struct msi_msg { | |||
7 | u32 data; /* 16 bits of msi message data */ | 7 | u32 data; /* 16 bits of msi message data */ |
8 | }; | 8 | }; |
9 | 9 | ||
10 | /* Heper functions */ | 10 | /* Helper functions */ |
11 | extern void mask_msi_irq(unsigned int irq); | 11 | extern void mask_msi_irq(unsigned int irq); |
12 | extern void unmask_msi_irq(unsigned int irq); | 12 | extern void unmask_msi_irq(unsigned int irq); |
13 | extern void read_msi_msg(unsigned int irq, struct msi_msg *msg); | 13 | extern void read_msi_msg(unsigned int irq, struct msi_msg *msg); |
14 | |||
15 | extern void write_msi_msg(unsigned int irq, struct msi_msg *msg); | 14 | extern void write_msi_msg(unsigned int irq, struct msi_msg *msg); |
16 | 15 | ||
17 | struct msi_desc { | 16 | struct msi_desc { |
@@ -42,7 +41,7 @@ struct msi_desc { | |||
42 | /* | 41 | /* |
43 | * The arch hook for setup up msi irqs | 42 | * The arch hook for setup up msi irqs |
44 | */ | 43 | */ |
45 | int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev); | 44 | int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc); |
46 | void arch_teardown_msi_irq(unsigned int irq); | 45 | void arch_teardown_msi_irq(unsigned int irq); |
47 | 46 | ||
48 | 47 | ||
diff --git a/include/linux/net.h b/include/linux/net.h index f28d8a2e2c91..4db21e63d8d2 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
@@ -24,7 +24,7 @@ | |||
24 | struct poll_table_struct; | 24 | struct poll_table_struct; |
25 | struct inode; | 25 | struct inode; |
26 | 26 | ||
27 | #define NPROTO 32 /* should be enough for now.. */ | 27 | #define NPROTO 33 /* should be enough for now.. */ |
28 | 28 | ||
29 | #define SYS_SOCKET 1 /* sys_socket(2) */ | 29 | #define SYS_SOCKET 1 /* sys_socket(2) */ |
30 | #define SYS_BIND 2 /* sys_bind(2) */ | 30 | #define SYS_BIND 2 /* sys_bind(2) */ |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index fea0d9db6846..1a528548cd1d 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -529,10 +529,11 @@ struct net_device | |||
529 | struct net_bridge_port *br_port; | 529 | struct net_bridge_port *br_port; |
530 | 530 | ||
531 | /* class/net/name entry */ | 531 | /* class/net/name entry */ |
532 | struct class_device class_dev; | 532 | struct device dev; |
533 | /* space for optional statistics and wireless sysfs groups */ | 533 | /* space for optional statistics and wireless sysfs groups */ |
534 | struct attribute_group *sysfs_groups[3]; | 534 | struct attribute_group *sysfs_groups[3]; |
535 | }; | 535 | }; |
536 | #define to_net_dev(d) container_of(d, struct net_device, dev) | ||
536 | 537 | ||
537 | #define NETDEV_ALIGN 32 | 538 | #define NETDEV_ALIGN 32 |
538 | #define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1) | 539 | #define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1) |
@@ -548,7 +549,7 @@ static inline void *netdev_priv(struct net_device *dev) | |||
548 | /* Set the sysfs physical device reference for the network logical device | 549 | /* Set the sysfs physical device reference for the network logical device |
549 | * if set prior to registration will cause a symlink during initialization. | 550 | * if set prior to registration will cause a symlink during initialization. |
550 | */ | 551 | */ |
551 | #define SET_NETDEV_DEV(net, pdev) ((net)->class_dev.dev = (pdev)) | 552 | #define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) |
552 | 553 | ||
553 | struct packet_type { | 554 | struct packet_type { |
554 | __be16 type; /* This is really htons(ether_type). */ | 555 | __be16 type; /* This is really htons(ether_type). */ |
@@ -588,7 +589,7 @@ extern int dev_open(struct net_device *dev); | |||
588 | extern int dev_close(struct net_device *dev); | 589 | extern int dev_close(struct net_device *dev); |
589 | extern int dev_queue_xmit(struct sk_buff *skb); | 590 | extern int dev_queue_xmit(struct sk_buff *skb); |
590 | extern int register_netdevice(struct net_device *dev); | 591 | extern int register_netdevice(struct net_device *dev); |
591 | extern int unregister_netdevice(struct net_device *dev); | 592 | extern void unregister_netdevice(struct net_device *dev); |
592 | extern void free_netdev(struct net_device *dev); | 593 | extern void free_netdev(struct net_device *dev); |
593 | extern void synchronize_net(void); | 594 | extern void synchronize_net(void); |
594 | extern int register_netdevice_notifier(struct notifier_block *nb); | 595 | extern int register_netdevice_notifier(struct notifier_block *nb); |
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild index 6328175a1c3a..43397a414cd6 100644 --- a/include/linux/netfilter/Kbuild +++ b/include/linux/netfilter/Kbuild | |||
@@ -33,6 +33,7 @@ header-y += xt_tcpmss.h | |||
33 | header-y += xt_tcpudp.h | 33 | header-y += xt_tcpudp.h |
34 | header-y += xt_SECMARK.h | 34 | header-y += xt_SECMARK.h |
35 | header-y += xt_CONNSECMARK.h | 35 | header-y += xt_CONNSECMARK.h |
36 | header-y += xt_TCPMSS.h | ||
36 | 37 | ||
37 | unifdef-y += nf_conntrack_common.h | 38 | unifdef-y += nf_conntrack_common.h |
38 | unifdef-y += nf_conntrack_ftp.h | 39 | unifdef-y += nf_conntrack_ftp.h |
diff --git a/include/linux/netfilter/nf_conntrack_sane.h b/include/linux/netfilter/nf_conntrack_sane.h new file mode 100644 index 000000000000..4767d6e23e97 --- /dev/null +++ b/include/linux/netfilter/nf_conntrack_sane.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef _NF_CONNTRACK_SANE_H | ||
2 | #define _NF_CONNTRACK_SANE_H | ||
3 | /* SANE tracking. */ | ||
4 | |||
5 | #ifdef __KERNEL__ | ||
6 | |||
7 | #define SANE_PORT 6566 | ||
8 | |||
9 | enum sane_state { | ||
10 | SANE_STATE_NORMAL, | ||
11 | SANE_STATE_START_REQUESTED, | ||
12 | }; | ||
13 | |||
14 | /* This structure exists only once per master */ | ||
15 | struct nf_ct_sane_master { | ||
16 | enum sane_state state; | ||
17 | }; | ||
18 | |||
19 | #endif /* __KERNEL__ */ | ||
20 | |||
21 | #endif /* _NF_CONNTRACK_SANE_H */ | ||
diff --git a/include/linux/netfilter/nf_conntrack_tcp.h b/include/linux/netfilter/nf_conntrack_tcp.h index 2f4e98b90cc0..007af4c2770b 100644 --- a/include/linux/netfilter/nf_conntrack_tcp.h +++ b/include/linux/netfilter/nf_conntrack_tcp.h | |||
@@ -27,6 +27,9 @@ enum tcp_conntrack { | |||
27 | /* This sender sent FIN first */ | 27 | /* This sender sent FIN first */ |
28 | #define IP_CT_TCP_FLAG_CLOSE_INIT 0x04 | 28 | #define IP_CT_TCP_FLAG_CLOSE_INIT 0x04 |
29 | 29 | ||
30 | /* Be liberal in window checking */ | ||
31 | #define IP_CT_TCP_FLAG_BE_LIBERAL 0x08 | ||
32 | |||
30 | #ifdef __KERNEL__ | 33 | #ifdef __KERNEL__ |
31 | 34 | ||
32 | struct ip_ct_tcp_state { | 35 | struct ip_ct_tcp_state { |
@@ -34,7 +37,6 @@ struct ip_ct_tcp_state { | |||
34 | u_int32_t td_maxend; /* max of ack + max(win, 1) */ | 37 | u_int32_t td_maxend; /* max of ack + max(win, 1) */ |
35 | u_int32_t td_maxwin; /* max(win) */ | 38 | u_int32_t td_maxwin; /* max(win) */ |
36 | u_int8_t td_scale; /* window scale factor */ | 39 | u_int8_t td_scale; /* window scale factor */ |
37 | u_int8_t loose; /* used when connection picked up from the middle */ | ||
38 | u_int8_t flags; /* per direction options */ | 40 | u_int8_t flags; /* per direction options */ |
39 | }; | 41 | }; |
40 | 42 | ||
diff --git a/include/linux/netfilter/xt_TCPMSS.h b/include/linux/netfilter/xt_TCPMSS.h new file mode 100644 index 000000000000..53a292cd47f3 --- /dev/null +++ b/include/linux/netfilter/xt_TCPMSS.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef _XT_TCPMSS_H | ||
2 | #define _XT_TCPMSS_H | ||
3 | |||
4 | struct xt_tcpmss_info { | ||
5 | u_int16_t mss; | ||
6 | }; | ||
7 | |||
8 | #define XT_TCPMSS_CLAMP_PMTU 0xffff | ||
9 | |||
10 | #endif /* _XT_TCPMSS_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ip_nat.h b/include/linux/netfilter_ipv4/ip_nat.h index bdf553620ca1..bbca89aab813 100644 --- a/include/linux/netfilter_ipv4/ip_nat.h +++ b/include/linux/netfilter_ipv4/ip_nat.h | |||
@@ -16,6 +16,7 @@ enum ip_nat_manip_type | |||
16 | 16 | ||
17 | #define IP_NAT_RANGE_MAP_IPS 1 | 17 | #define IP_NAT_RANGE_MAP_IPS 1 |
18 | #define IP_NAT_RANGE_PROTO_SPECIFIED 2 | 18 | #define IP_NAT_RANGE_PROTO_SPECIFIED 2 |
19 | #define IP_NAT_RANGE_PROTO_RANDOM 4 /* add randomness to "port" selection */ | ||
19 | 20 | ||
20 | /* NAT sequence number modifications */ | 21 | /* NAT sequence number modifications */ |
21 | struct ip_nat_seq { | 22 | struct ip_nat_seq { |
diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h index 98d566c5e32a..9527296595cd 100644 --- a/include/linux/netfilter_ipv4/ip_tables.h +++ b/include/linux/netfilter_ipv4/ip_tables.h | |||
@@ -272,25 +272,9 @@ ipt_get_target(struct ipt_entry *e) | |||
272 | #include <linux/init.h> | 272 | #include <linux/init.h> |
273 | extern void ipt_init(void) __init; | 273 | extern void ipt_init(void) __init; |
274 | 274 | ||
275 | #define ipt_register_target(tgt) \ | 275 | extern int ipt_register_table(struct xt_table *table, |
276 | ({ (tgt)->family = AF_INET; \ | ||
277 | xt_register_target(tgt); }) | ||
278 | #define ipt_unregister_target(tgt) xt_unregister_target(tgt) | ||
279 | |||
280 | #define ipt_register_match(mtch) \ | ||
281 | ({ (mtch)->family = AF_INET; \ | ||
282 | xt_register_match(mtch); }) | ||
283 | #define ipt_unregister_match(mtch) xt_unregister_match(mtch) | ||
284 | |||
285 | //#define ipt_register_table(tbl, repl) xt_register_table(AF_INET, tbl, repl) | ||
286 | //#define ipt_unregister_table(tbl) xt_unregister_table(AF_INET, tbl) | ||
287 | |||
288 | extern int ipt_register_table(struct ipt_table *table, | ||
289 | const struct ipt_replace *repl); | 276 | const struct ipt_replace *repl); |
290 | extern void ipt_unregister_table(struct ipt_table *table); | 277 | extern void ipt_unregister_table(struct xt_table *table); |
291 | |||
292 | /* net/sched/ipt.c: Gimme access to your targets! Gets target->me. */ | ||
293 | extern struct ipt_target *ipt_find_target(const char *name, u8 revision); | ||
294 | 278 | ||
295 | /* Standard entry. */ | 279 | /* Standard entry. */ |
296 | struct ipt_standard | 280 | struct ipt_standard |
@@ -315,7 +299,7 @@ extern unsigned int ipt_do_table(struct sk_buff **pskb, | |||
315 | unsigned int hook, | 299 | unsigned int hook, |
316 | const struct net_device *in, | 300 | const struct net_device *in, |
317 | const struct net_device *out, | 301 | const struct net_device *out, |
318 | struct ipt_table *table); | 302 | struct xt_table *table); |
319 | 303 | ||
320 | #define IPT_ALIGN(s) XT_ALIGN(s) | 304 | #define IPT_ALIGN(s) XT_ALIGN(s) |
321 | 305 | ||
diff --git a/include/linux/netfilter_ipv4/ipt_TCPMSS.h b/include/linux/netfilter_ipv4/ipt_TCPMSS.h index aadb39580cd3..7a850f945824 100644 --- a/include/linux/netfilter_ipv4/ipt_TCPMSS.h +++ b/include/linux/netfilter_ipv4/ipt_TCPMSS.h | |||
@@ -1,10 +1,9 @@ | |||
1 | #ifndef _IPT_TCPMSS_H | 1 | #ifndef _IPT_TCPMSS_H |
2 | #define _IPT_TCPMSS_H | 2 | #define _IPT_TCPMSS_H |
3 | 3 | ||
4 | struct ipt_tcpmss_info { | 4 | #include <linux/netfilter/xt_TCPMSS.h> |
5 | u_int16_t mss; | ||
6 | }; | ||
7 | 5 | ||
8 | #define IPT_TCPMSS_CLAMP_PMTU 0xffff | 6 | #define ipt_tcpmss_info xt_tcpmss_info |
7 | #define IPT_TCPMSS_CLAMP_PMTU XT_TCPMSS_CLAMP_PMTU | ||
9 | 8 | ||
10 | #endif /*_IPT_TCPMSS_H*/ | 9 | #endif /*_IPT_TCPMSS_H*/ |
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index 4aed340401db..61aa10412fc8 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h | |||
@@ -104,6 +104,25 @@ struct ip6t_entry | |||
104 | unsigned char elems[0]; | 104 | unsigned char elems[0]; |
105 | }; | 105 | }; |
106 | 106 | ||
107 | /* Standard entry */ | ||
108 | struct ip6t_standard | ||
109 | { | ||
110 | struct ip6t_entry entry; | ||
111 | struct ip6t_standard_target target; | ||
112 | }; | ||
113 | |||
114 | struct ip6t_error_target | ||
115 | { | ||
116 | struct ip6t_entry_target target; | ||
117 | char errorname[IP6T_FUNCTION_MAXNAMELEN]; | ||
118 | }; | ||
119 | |||
120 | struct ip6t_error | ||
121 | { | ||
122 | struct ip6t_entry entry; | ||
123 | struct ip6t_error_target target; | ||
124 | }; | ||
125 | |||
107 | /* | 126 | /* |
108 | * New IP firewall options for [gs]etsockopt at the RAW IP level. | 127 | * New IP firewall options for [gs]etsockopt at the RAW IP level. |
109 | * Unlike BSD Linux inherits IP options so you don't have to use | 128 | * Unlike BSD Linux inherits IP options so you don't have to use |
@@ -286,24 +305,14 @@ ip6t_get_target(struct ip6t_entry *e) | |||
286 | #include <linux/init.h> | 305 | #include <linux/init.h> |
287 | extern void ip6t_init(void) __init; | 306 | extern void ip6t_init(void) __init; |
288 | 307 | ||
289 | #define ip6t_register_target(tgt) \ | 308 | extern int ip6t_register_table(struct xt_table *table, |
290 | ({ (tgt)->family = AF_INET6; \ | ||
291 | xt_register_target(tgt); }) | ||
292 | #define ip6t_unregister_target(tgt) xt_unregister_target(tgt) | ||
293 | |||
294 | #define ip6t_register_match(match) \ | ||
295 | ({ (match)->family = AF_INET6; \ | ||
296 | xt_register_match(match); }) | ||
297 | #define ip6t_unregister_match(match) xt_unregister_match(match) | ||
298 | |||
299 | extern int ip6t_register_table(struct ip6t_table *table, | ||
300 | const struct ip6t_replace *repl); | 309 | const struct ip6t_replace *repl); |
301 | extern void ip6t_unregister_table(struct ip6t_table *table); | 310 | extern void ip6t_unregister_table(struct xt_table *table); |
302 | extern unsigned int ip6t_do_table(struct sk_buff **pskb, | 311 | extern unsigned int ip6t_do_table(struct sk_buff **pskb, |
303 | unsigned int hook, | 312 | unsigned int hook, |
304 | const struct net_device *in, | 313 | const struct net_device *in, |
305 | const struct net_device *out, | 314 | const struct net_device *out, |
306 | struct ip6t_table *table); | 315 | struct xt_table *table); |
307 | 316 | ||
308 | /* Check for an extension */ | 317 | /* Check for an extension */ |
309 | extern int ip6t_ext_hdr(u8 nexthdr); | 318 | extern int ip6t_ext_hdr(u8 nexthdr); |
diff --git a/include/linux/netfilter_ipv6/ip6t_mh.h b/include/linux/netfilter_ipv6/ip6t_mh.h new file mode 100644 index 000000000000..b9ca9a5f74d0 --- /dev/null +++ b/include/linux/netfilter_ipv6/ip6t_mh.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef _IP6T_MH_H | ||
2 | #define _IP6T_MH_H | ||
3 | |||
4 | /* MH matching stuff */ | ||
5 | struct ip6t_mh | ||
6 | { | ||
7 | u_int8_t types[2]; /* MH type range */ | ||
8 | u_int8_t invflags; /* Inverse flags */ | ||
9 | }; | ||
10 | |||
11 | /* Values for "invflags" field in struct ip6t_mh. */ | ||
12 | #define IP6T_MH_INV_TYPE 0x01 /* Invert the sense of type. */ | ||
13 | #define IP6T_MH_INV_MASK 0x01 /* All possible flags. */ | ||
14 | |||
15 | #endif /*_IP6T_MH_H*/ | ||
diff --git a/include/linux/pci.h b/include/linux/pci.h index f3c617eabd8d..805412cc6875 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -174,6 +174,9 @@ struct pci_dev { | |||
174 | struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */ | 174 | struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */ |
175 | int rom_attr_enabled; /* has display of the rom attribute been enabled? */ | 175 | int rom_attr_enabled; /* has display of the rom attribute been enabled? */ |
176 | struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */ | 176 | struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */ |
177 | #ifdef CONFIG_PCI_MSI | ||
178 | unsigned int first_msi_irq; | ||
179 | #endif | ||
177 | }; | 180 | }; |
178 | 181 | ||
179 | #define pci_dev_g(n) list_entry(n, struct pci_dev, global_list) | 182 | #define pci_dev_g(n) list_entry(n, struct pci_dev, global_list) |
@@ -181,6 +184,11 @@ struct pci_dev { | |||
181 | #define to_pci_dev(n) container_of(n, struct pci_dev, dev) | 184 | #define to_pci_dev(n) container_of(n, struct pci_dev, dev) |
182 | #define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL) | 185 | #define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL) |
183 | 186 | ||
187 | static inline int pci_channel_offline(struct pci_dev *pdev) | ||
188 | { | ||
189 | return (pdev->error_state != pci_channel_io_normal); | ||
190 | } | ||
191 | |||
184 | static inline struct pci_cap_saved_state *pci_find_saved_cap( | 192 | static inline struct pci_cap_saved_state *pci_find_saved_cap( |
185 | struct pci_dev *pci_dev,char cap) | 193 | struct pci_dev *pci_dev,char cap) |
186 | { | 194 | { |
@@ -463,8 +471,7 @@ extern void pci_sort_breadthfirst(void); | |||
463 | 471 | ||
464 | /* Generic PCI functions exported to card drivers */ | 472 | /* Generic PCI functions exported to card drivers */ |
465 | 473 | ||
466 | struct pci_dev *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from); | 474 | struct pci_dev __deprecated *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from); |
467 | struct pci_dev *pci_find_device_reverse (unsigned int vendor, unsigned int device, const struct pci_dev *from); | ||
468 | struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn); | 475 | struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn); |
469 | int pci_find_capability (struct pci_dev *dev, int cap); | 476 | int pci_find_capability (struct pci_dev *dev, int cap); |
470 | int pci_find_next_capability (struct pci_dev *dev, u8 pos, int cap); | 477 | int pci_find_next_capability (struct pci_dev *dev, u8 pos, int cap); |
@@ -533,6 +540,7 @@ void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); | |||
533 | int __must_check pci_assign_resource(struct pci_dev *dev, int i); | 540 | int __must_check pci_assign_resource(struct pci_dev *dev, int i); |
534 | int __must_check pci_assign_resource_fixed(struct pci_dev *dev, int i); | 541 | int __must_check pci_assign_resource_fixed(struct pci_dev *dev, int i); |
535 | void pci_restore_bars(struct pci_dev *dev); | 542 | void pci_restore_bars(struct pci_dev *dev); |
543 | int pci_select_bars(struct pci_dev *dev, unsigned long flags); | ||
536 | 544 | ||
537 | /* ROM control related routines */ | 545 | /* ROM control related routines */ |
538 | void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size); | 546 | void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size); |
@@ -561,6 +569,8 @@ int __must_check pci_request_regions(struct pci_dev *, const char *); | |||
561 | void pci_release_regions(struct pci_dev *); | 569 | void pci_release_regions(struct pci_dev *); |
562 | int __must_check pci_request_region(struct pci_dev *, int, const char *); | 570 | int __must_check pci_request_region(struct pci_dev *, int, const char *); |
563 | void pci_release_region(struct pci_dev *, int); | 571 | void pci_release_region(struct pci_dev *, int); |
572 | int pci_request_selected_regions(struct pci_dev *, int, const char *); | ||
573 | void pci_release_selected_regions(struct pci_dev *, int); | ||
564 | 574 | ||
565 | /* drivers/pci/bus.c */ | 575 | /* drivers/pci/bus.c */ |
566 | int __must_check pci_bus_alloc_resource(struct pci_bus *bus, | 576 | int __must_check pci_bus_alloc_resource(struct pci_bus *bus, |
@@ -573,10 +583,11 @@ int __must_check pci_bus_alloc_resource(struct pci_bus *bus, | |||
573 | void pci_enable_bridges(struct pci_bus *bus); | 583 | void pci_enable_bridges(struct pci_bus *bus); |
574 | 584 | ||
575 | /* Proper probing supporting hot-pluggable devices */ | 585 | /* Proper probing supporting hot-pluggable devices */ |
576 | int __must_check __pci_register_driver(struct pci_driver *, struct module *); | 586 | int __must_check __pci_register_driver(struct pci_driver *, struct module *, |
587 | const char *mod_name); | ||
577 | static inline int __must_check pci_register_driver(struct pci_driver *driver) | 588 | static inline int __must_check pci_register_driver(struct pci_driver *driver) |
578 | { | 589 | { |
579 | return __pci_register_driver(driver, THIS_MODULE); | 590 | return __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME); |
580 | } | 591 | } |
581 | 592 | ||
582 | void pci_unregister_driver(struct pci_driver *); | 593 | void pci_unregister_driver(struct pci_driver *); |
@@ -611,10 +622,6 @@ enum pci_dma_burst_strategy { | |||
611 | strategy_parameter byte boundaries */ | 622 | strategy_parameter byte boundaries */ |
612 | }; | 623 | }; |
613 | 624 | ||
614 | #if defined(CONFIG_ISA) || defined(CONFIG_EISA) | ||
615 | extern struct pci_dev *isa_bridge; | ||
616 | #endif | ||
617 | |||
618 | struct msix_entry { | 625 | struct msix_entry { |
619 | u16 vector; /* kernel uses to write allocated vector */ | 626 | u16 vector; /* kernel uses to write allocated vector */ |
620 | u16 entry; /* driver uses to specify entry, OS writes */ | 627 | u16 entry; /* driver uses to specify entry, OS writes */ |
@@ -622,7 +629,6 @@ struct msix_entry { | |||
622 | 629 | ||
623 | 630 | ||
624 | #ifndef CONFIG_PCI_MSI | 631 | #ifndef CONFIG_PCI_MSI |
625 | static inline void pci_scan_msi_device(struct pci_dev *dev) {} | ||
626 | static inline int pci_enable_msi(struct pci_dev *dev) {return -1;} | 632 | static inline int pci_enable_msi(struct pci_dev *dev) {return -1;} |
627 | static inline void pci_disable_msi(struct pci_dev *dev) {} | 633 | static inline void pci_disable_msi(struct pci_dev *dev) {} |
628 | static inline int pci_enable_msix(struct pci_dev* dev, | 634 | static inline int pci_enable_msix(struct pci_dev* dev, |
@@ -630,7 +636,6 @@ static inline int pci_enable_msix(struct pci_dev* dev, | |||
630 | static inline void pci_disable_msix(struct pci_dev *dev) {} | 636 | static inline void pci_disable_msix(struct pci_dev *dev) {} |
631 | static inline void msi_remove_pci_irq_vectors(struct pci_dev *dev) {} | 637 | static inline void msi_remove_pci_irq_vectors(struct pci_dev *dev) {} |
632 | #else | 638 | #else |
633 | extern void pci_scan_msi_device(struct pci_dev *dev); | ||
634 | extern int pci_enable_msi(struct pci_dev *dev); | 639 | extern int pci_enable_msi(struct pci_dev *dev); |
635 | extern void pci_disable_msi(struct pci_dev *dev); | 640 | extern void pci_disable_msi(struct pci_dev *dev); |
636 | extern int pci_enable_msix(struct pci_dev* dev, | 641 | extern int pci_enable_msix(struct pci_dev* dev, |
@@ -722,8 +727,6 @@ static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state) { | |||
722 | static inline pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state) { return PCI_D0; } | 727 | static inline pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state) { return PCI_D0; } |
723 | static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable) { return 0; } | 728 | static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable) { return 0; } |
724 | 729 | ||
725 | #define isa_bridge ((struct pci_dev *)NULL) | ||
726 | |||
727 | #define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0) | 730 | #define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0) |
728 | 731 | ||
729 | static inline void pci_block_user_cfg_access(struct pci_dev *dev) { } | 732 | static inline void pci_block_user_cfg_access(struct pci_dev *dev) { } |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 3d1d21035dec..defdeed20641 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -735,9 +735,11 @@ | |||
735 | #define PCI_DEVICE_ID_TI_TVP4020 0x3d07 | 735 | #define PCI_DEVICE_ID_TI_TVP4020 0x3d07 |
736 | #define PCI_DEVICE_ID_TI_4450 0x8011 | 736 | #define PCI_DEVICE_ID_TI_4450 0x8011 |
737 | #define PCI_DEVICE_ID_TI_XX21_XX11 0x8031 | 737 | #define PCI_DEVICE_ID_TI_XX21_XX11 0x8031 |
738 | #define PCI_DEVICE_ID_TI_XX21_XX11_FM 0x8033 | ||
738 | #define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034 | 739 | #define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034 |
739 | #define PCI_DEVICE_ID_TI_X515 0x8036 | 740 | #define PCI_DEVICE_ID_TI_X515 0x8036 |
740 | #define PCI_DEVICE_ID_TI_XX12 0x8039 | 741 | #define PCI_DEVICE_ID_TI_XX12 0x8039 |
742 | #define PCI_DEVICE_ID_TI_XX12_FM 0x803b | ||
741 | #define PCI_DEVICE_ID_TI_1130 0xac12 | 743 | #define PCI_DEVICE_ID_TI_1130 0xac12 |
742 | #define PCI_DEVICE_ID_TI_1031 0xac13 | 744 | #define PCI_DEVICE_ID_TI_1031 0xac13 |
743 | #define PCI_DEVICE_ID_TI_1131 0xac15 | 745 | #define PCI_DEVICE_ID_TI_1131 0xac15 |
@@ -765,6 +767,7 @@ | |||
765 | #define PCI_DEVICE_ID_TI_1510 0xac56 | 767 | #define PCI_DEVICE_ID_TI_1510 0xac56 |
766 | #define PCI_DEVICE_ID_TI_X620 0xac8d | 768 | #define PCI_DEVICE_ID_TI_X620 0xac8d |
767 | #define PCI_DEVICE_ID_TI_X420 0xac8e | 769 | #define PCI_DEVICE_ID_TI_X420 0xac8e |
770 | #define PCI_DEVICE_ID_TI_XX20_FM 0xac8f | ||
768 | 771 | ||
769 | #define PCI_VENDOR_ID_SONY 0x104d | 772 | #define PCI_VENDOR_ID_SONY 0x104d |
770 | 773 | ||
@@ -1451,6 +1454,7 @@ | |||
1451 | 1454 | ||
1452 | #define PCI_VENDOR_ID_TOSHIBA_2 0x102f | 1455 | #define PCI_VENDOR_ID_TOSHIBA_2 0x102f |
1453 | #define PCI_DEVICE_ID_TOSHIBA_TC35815CF 0x0030 | 1456 | #define PCI_DEVICE_ID_TOSHIBA_TC35815CF 0x0030 |
1457 | #define PCI_DEVICE_ID_TOSHIBA_TC86C001_IDE 0x0105 | ||
1454 | #define PCI_DEVICE_ID_TOSHIBA_TC86C001_MISC 0x0108 | 1458 | #define PCI_DEVICE_ID_TOSHIBA_TC86C001_MISC 0x0108 |
1455 | #define PCI_DEVICE_ID_TOSHIBA_SPIDER_NET 0x01b3 | 1459 | #define PCI_DEVICE_ID_TOSHIBA_SPIDER_NET 0x01b3 |
1456 | 1460 | ||
@@ -1971,6 +1975,7 @@ | |||
1971 | #define PCI_DEVICE_ID_TOPIC_TP560 0x0000 | 1975 | #define PCI_DEVICE_ID_TOPIC_TP560 0x0000 |
1972 | 1976 | ||
1973 | #define PCI_VENDOR_ID_ENE 0x1524 | 1977 | #define PCI_VENDOR_ID_ENE 0x1524 |
1978 | #define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 | ||
1974 | #define PCI_DEVICE_ID_ENE_1211 0x1211 | 1979 | #define PCI_DEVICE_ID_ENE_1211 0x1211 |
1975 | #define PCI_DEVICE_ID_ENE_1225 0x1225 | 1980 | #define PCI_DEVICE_ID_ENE_1225 0x1225 |
1976 | #define PCI_DEVICE_ID_ENE_1410 0x1410 | 1981 | #define PCI_DEVICE_ID_ENE_1410 0x1410 |
@@ -2066,6 +2071,8 @@ | |||
2066 | #define PCI_VENDOR_ID_TDI 0x192E | 2071 | #define PCI_VENDOR_ID_TDI 0x192E |
2067 | #define PCI_DEVICE_ID_TDI_EHCI 0x0101 | 2072 | #define PCI_DEVICE_ID_TDI_EHCI 0x0101 |
2068 | 2073 | ||
2074 | #define PCI_VENDOR_ID_PASEMI 0x1959 | ||
2075 | |||
2069 | #define PCI_VENDOR_ID_JMICRON 0x197B | 2076 | #define PCI_VENDOR_ID_JMICRON 0x197B |
2070 | #define PCI_DEVICE_ID_JMICRON_JMB360 0x2360 | 2077 | #define PCI_DEVICE_ID_JMICRON_JMB360 0x2360 |
2071 | #define PCI_DEVICE_ID_JMICRON_JMB361 0x2361 | 2078 | #define PCI_DEVICE_ID_JMICRON_JMB361 0x2361 |
diff --git a/include/linux/pfkeyv2.h b/include/linux/pfkeyv2.h index 52ed4a56f672..d9db5f62ee48 100644 --- a/include/linux/pfkeyv2.h +++ b/include/linux/pfkeyv2.h | |||
@@ -251,7 +251,8 @@ struct sadb_x_sec_ctx { | |||
251 | #define SADB_X_SPDEXPIRE 21 | 251 | #define SADB_X_SPDEXPIRE 21 |
252 | #define SADB_X_SPDDELETE2 22 | 252 | #define SADB_X_SPDDELETE2 22 |
253 | #define SADB_X_NAT_T_NEW_MAPPING 23 | 253 | #define SADB_X_NAT_T_NEW_MAPPING 23 |
254 | #define SADB_MAX 23 | 254 | #define SADB_X_MIGRATE 24 |
255 | #define SADB_MAX 24 | ||
255 | 256 | ||
256 | /* Security Association flags */ | 257 | /* Security Association flags */ |
257 | #define SADB_SAFLAGS_PFS 1 | 258 | #define SADB_SAFLAGS_PFS 1 |
diff --git a/include/linux/serio.h b/include/linux/serio.h index 0f478a8791a2..ac2c70e7f760 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
@@ -86,6 +86,11 @@ static inline void serio_register_port(struct serio *serio) | |||
86 | void serio_unregister_port(struct serio *serio); | 86 | void serio_unregister_port(struct serio *serio); |
87 | void serio_unregister_child_port(struct serio *serio); | 87 | void serio_unregister_child_port(struct serio *serio); |
88 | 88 | ||
89 | int __serio_register_driver(struct serio_driver *drv, struct module *owner, const char *mod_name); | ||
90 | static inline int serio_register_driver(struct serio_driver *drv) | ||
91 | { | ||
92 | return __serio_register_driver(drv, THIS_MODULE, KBUILD_MODNAME); | ||
93 | } | ||
89 | int serio_register_driver(struct serio_driver *drv); | 94 | int serio_register_driver(struct serio_driver *drv); |
90 | void serio_unregister_driver(struct serio_driver *drv); | 95 | void serio_unregister_driver(struct serio_driver *drv); |
91 | 96 | ||
diff --git a/include/linux/socket.h b/include/linux/socket.h index 92cd38efad7f..fcd35a210e7f 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
@@ -187,7 +187,8 @@ struct ucred { | |||
187 | #define AF_LLC 26 /* Linux LLC */ | 187 | #define AF_LLC 26 /* Linux LLC */ |
188 | #define AF_TIPC 30 /* TIPC sockets */ | 188 | #define AF_TIPC 30 /* TIPC sockets */ |
189 | #define AF_BLUETOOTH 31 /* Bluetooth sockets */ | 189 | #define AF_BLUETOOTH 31 /* Bluetooth sockets */ |
190 | #define AF_MAX 32 /* For now.. */ | 190 | #define AF_IUCV 32 /* IUCV sockets */ |
191 | #define AF_MAX 33 /* For now.. */ | ||
191 | 192 | ||
192 | /* Protocol families, same as address families. */ | 193 | /* Protocol families, same as address families. */ |
193 | #define PF_UNSPEC AF_UNSPEC | 194 | #define PF_UNSPEC AF_UNSPEC |
@@ -220,6 +221,7 @@ struct ucred { | |||
220 | #define PF_LLC AF_LLC | 221 | #define PF_LLC AF_LLC |
221 | #define PF_TIPC AF_TIPC | 222 | #define PF_TIPC AF_TIPC |
222 | #define PF_BLUETOOTH AF_BLUETOOTH | 223 | #define PF_BLUETOOTH AF_BLUETOOTH |
224 | #define PF_IUCV AF_IUCV | ||
223 | #define PF_MAX AF_MAX | 225 | #define PF_MAX AF_MAX |
224 | 226 | ||
225 | /* Maximum queue length specifiable by listen. */ | 227 | /* Maximum queue length specifiable by listen. */ |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index 81480e613467..665412c4f4b9 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -699,7 +699,8 @@ enum { | |||
699 | NET_X25_CALL_REQUEST_TIMEOUT=2, | 699 | NET_X25_CALL_REQUEST_TIMEOUT=2, |
700 | NET_X25_RESET_REQUEST_TIMEOUT=3, | 700 | NET_X25_RESET_REQUEST_TIMEOUT=3, |
701 | NET_X25_CLEAR_REQUEST_TIMEOUT=4, | 701 | NET_X25_CLEAR_REQUEST_TIMEOUT=4, |
702 | NET_X25_ACK_HOLD_BACK_TIMEOUT=5 | 702 | NET_X25_ACK_HOLD_BACK_TIMEOUT=5, |
703 | NET_X25_FORWARD=6 | ||
703 | }; | 704 | }; |
704 | 705 | ||
705 | /* /proc/sys/net/token-ring */ | 706 | /* /proc/sys/net/token-ring */ |
diff --git a/include/linux/sysdev.h b/include/linux/sysdev.h index 166a2e58c287..389ccf858d37 100644 --- a/include/linux/sysdev.h +++ b/include/linux/sysdev.h | |||
@@ -98,12 +98,16 @@ struct sysdev_attribute { | |||
98 | }; | 98 | }; |
99 | 99 | ||
100 | 100 | ||
101 | #define SYSDEV_ATTR(_name,_mode,_show,_store) \ | 101 | #define _SYSDEV_ATTR(_name,_mode,_show,_store) \ |
102 | struct sysdev_attribute attr_##_name = { \ | 102 | { \ |
103 | .attr = {.name = __stringify(_name), .mode = _mode }, \ | 103 | .attr = { .name = __stringify(_name), .mode = _mode, \ |
104 | .owner = THIS_MODULE }, \ | ||
104 | .show = _show, \ | 105 | .show = _show, \ |
105 | .store = _store, \ | 106 | .store = _store, \ |
106 | }; | 107 | } |
108 | |||
109 | #define SYSDEV_ATTR(_name,_mode,_show,_store) \ | ||
110 | struct sysdev_attribute attr_##_name = _SYSDEV_ATTR(_name,_mode,_show,_store); | ||
107 | 111 | ||
108 | extern int sysdev_create_file(struct sys_device *, struct sysdev_attribute *); | 112 | extern int sysdev_create_file(struct sys_device *, struct sysdev_attribute *); |
109 | extern void sysdev_remove_file(struct sys_device *, struct sysdev_attribute *); | 113 | extern void sysdev_remove_file(struct sys_device *, struct sysdev_attribute *); |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 2129d1b6c874..192de3afa96b 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
@@ -11,10 +11,12 @@ | |||
11 | #define _SYSFS_H_ | 11 | #define _SYSFS_H_ |
12 | 12 | ||
13 | #include <linux/compiler.h> | 13 | #include <linux/compiler.h> |
14 | #include <linux/list.h> | ||
14 | #include <asm/atomic.h> | 15 | #include <asm/atomic.h> |
15 | 16 | ||
16 | struct kobject; | 17 | struct kobject; |
17 | struct module; | 18 | struct module; |
19 | struct nameidata; | ||
18 | 20 | ||
19 | struct attribute { | 21 | struct attribute { |
20 | const char * name; | 22 | const char * name; |
@@ -88,13 +90,13 @@ struct sysfs_dirent { | |||
88 | #ifdef CONFIG_SYSFS | 90 | #ifdef CONFIG_SYSFS |
89 | 91 | ||
90 | extern int __must_check | 92 | extern int __must_check |
91 | sysfs_create_dir(struct kobject *); | 93 | sysfs_create_dir(struct kobject *, struct dentry *); |
92 | 94 | ||
93 | extern void | 95 | extern void |
94 | sysfs_remove_dir(struct kobject *); | 96 | sysfs_remove_dir(struct kobject *); |
95 | 97 | ||
96 | extern int __must_check | 98 | extern int __must_check |
97 | sysfs_rename_dir(struct kobject *, const char *new_name); | 99 | sysfs_rename_dir(struct kobject *, struct dentry *, const char *new_name); |
98 | 100 | ||
99 | extern int __must_check | 101 | extern int __must_check |
100 | sysfs_move_dir(struct kobject *, struct kobject *); | 102 | sysfs_move_dir(struct kobject *, struct kobject *); |
@@ -126,11 +128,17 @@ int __must_check sysfs_create_group(struct kobject *, | |||
126 | void sysfs_remove_group(struct kobject *, const struct attribute_group *); | 128 | void sysfs_remove_group(struct kobject *, const struct attribute_group *); |
127 | void sysfs_notify(struct kobject * k, char *dir, char *attr); | 129 | void sysfs_notify(struct kobject * k, char *dir, char *attr); |
128 | 130 | ||
131 | |||
132 | extern int sysfs_make_shadowed_dir(struct kobject *kobj, | ||
133 | void * (*follow_link)(struct dentry *, struct nameidata *)); | ||
134 | extern struct dentry *sysfs_create_shadow_dir(struct kobject *kobj); | ||
135 | extern void sysfs_remove_shadow_dir(struct dentry *dir); | ||
136 | |||
129 | extern int __must_check sysfs_init(void); | 137 | extern int __must_check sysfs_init(void); |
130 | 138 | ||
131 | #else /* CONFIG_SYSFS */ | 139 | #else /* CONFIG_SYSFS */ |
132 | 140 | ||
133 | static inline int sysfs_create_dir(struct kobject * k) | 141 | static inline int sysfs_create_dir(struct kobject * k, struct dentry *shadow) |
134 | { | 142 | { |
135 | return 0; | 143 | return 0; |
136 | } | 144 | } |
@@ -140,7 +148,9 @@ static inline void sysfs_remove_dir(struct kobject * k) | |||
140 | ; | 148 | ; |
141 | } | 149 | } |
142 | 150 | ||
143 | static inline int sysfs_rename_dir(struct kobject * k, const char *new_name) | 151 | static inline int sysfs_rename_dir(struct kobject * k, |
152 | struct dentry *new_parent, | ||
153 | const char *new_name) | ||
144 | { | 154 | { |
145 | return 0; | 155 | return 0; |
146 | } | 156 | } |
@@ -204,6 +214,12 @@ static inline void sysfs_notify(struct kobject * k, char *dir, char *attr) | |||
204 | { | 214 | { |
205 | } | 215 | } |
206 | 216 | ||
217 | static inline int sysfs_make_shadowed_dir(struct kobject *kobj, | ||
218 | void * (*follow_link)(struct dentry *, struct nameidata *)) | ||
219 | { | ||
220 | return 0; | ||
221 | } | ||
222 | |||
207 | static inline int __must_check sysfs_init(void) | 223 | static inline int __must_check sysfs_init(void) |
208 | { | 224 | { |
209 | return 0; | 225 | return 0; |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 3cc70d1a3504..29d3089038ab 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
@@ -316,7 +316,7 @@ struct tcp_sock { | |||
316 | struct tcp_sack_block duplicate_sack[1]; /* D-SACK block */ | 316 | struct tcp_sack_block duplicate_sack[1]; /* D-SACK block */ |
317 | struct tcp_sack_block selective_acks[4]; /* The SACKS themselves*/ | 317 | struct tcp_sack_block selective_acks[4]; /* The SACKS themselves*/ |
318 | 318 | ||
319 | struct tcp_sack_block recv_sack_cache[4]; | 319 | struct tcp_sack_block_wire recv_sack_cache[4]; |
320 | 320 | ||
321 | /* from STCP, retrans queue hinting */ | 321 | /* from STCP, retrans queue hinting */ |
322 | struct sk_buff* lost_skb_hint; | 322 | struct sk_buff* lost_skb_hint; |
diff --git a/include/linux/tifm.h b/include/linux/tifm.h index dfb8052eee5e..3deb0a6c1370 100644 --- a/include/linux/tifm.h +++ b/include/linux/tifm.h | |||
@@ -17,7 +17,7 @@ | |||
17 | #include <linux/wait.h> | 17 | #include <linux/wait.h> |
18 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
19 | #include <linux/pci.h> | 19 | #include <linux/pci.h> |
20 | #include <linux/scatterlist.h> | 20 | #include <linux/kthread.h> |
21 | 21 | ||
22 | /* Host registers (relative to pci base address): */ | 22 | /* Host registers (relative to pci base address): */ |
23 | enum { | 23 | enum { |
@@ -62,11 +62,10 @@ enum { | |||
62 | 62 | ||
63 | 63 | ||
64 | #define TIFM_IRQ_ENABLE 0x80000000 | 64 | #define TIFM_IRQ_ENABLE 0x80000000 |
65 | #define TIFM_IRQ_SOCKMASK 0x00000001 | 65 | #define TIFM_IRQ_SOCKMASK(x) (x) |
66 | #define TIFM_IRQ_CARDMASK 0x00000100 | 66 | #define TIFM_IRQ_CARDMASK(x) ((x) << 8) |
67 | #define TIFM_IRQ_FIFOMASK 0x00010000 | 67 | #define TIFM_IRQ_FIFOMASK(x) ((x) << 16) |
68 | #define TIFM_IRQ_SETALL 0xffffffff | 68 | #define TIFM_IRQ_SETALL 0xffffffff |
69 | #define TIFM_IRQ_SETALLSOCK 0x0000000f | ||
70 | 69 | ||
71 | #define TIFM_CTRL_LED 0x00000040 | 70 | #define TIFM_CTRL_LED 0x00000040 |
72 | #define TIFM_CTRL_FAST_CLK 0x00000100 | 71 | #define TIFM_CTRL_FAST_CLK 0x00000100 |
@@ -89,10 +88,9 @@ struct tifm_dev { | |||
89 | char __iomem *addr; | 88 | char __iomem *addr; |
90 | spinlock_t lock; | 89 | spinlock_t lock; |
91 | tifm_media_id media_id; | 90 | tifm_media_id media_id; |
92 | char wq_name[KOBJ_NAME_LEN]; | 91 | unsigned int socket_id; |
93 | struct workqueue_struct *wq; | ||
94 | 92 | ||
95 | unsigned int (*signal_irq)(struct tifm_dev *sock, | 93 | void (*signal_irq)(struct tifm_dev *sock, |
96 | unsigned int sock_irq_status); | 94 | unsigned int sock_irq_status); |
97 | 95 | ||
98 | struct tifm_driver *drv; | 96 | struct tifm_driver *drv; |
@@ -103,24 +101,23 @@ struct tifm_driver { | |||
103 | tifm_media_id *id_table; | 101 | tifm_media_id *id_table; |
104 | int (*probe)(struct tifm_dev *dev); | 102 | int (*probe)(struct tifm_dev *dev); |
105 | void (*remove)(struct tifm_dev *dev); | 103 | void (*remove)(struct tifm_dev *dev); |
104 | int (*suspend)(struct tifm_dev *dev, | ||
105 | pm_message_t state); | ||
106 | int (*resume)(struct tifm_dev *dev); | ||
106 | 107 | ||
107 | struct device_driver driver; | 108 | struct device_driver driver; |
108 | }; | 109 | }; |
109 | 110 | ||
110 | struct tifm_adapter { | 111 | struct tifm_adapter { |
111 | char __iomem *addr; | 112 | char __iomem *addr; |
112 | unsigned int irq_status; | ||
113 | unsigned int insert_mask; | ||
114 | unsigned int remove_mask; | ||
115 | spinlock_t lock; | 113 | spinlock_t lock; |
114 | unsigned int irq_status; | ||
115 | unsigned int socket_change_set; | ||
116 | wait_queue_head_t change_set_notify; | ||
116 | unsigned int id; | 117 | unsigned int id; |
117 | unsigned int max_sockets; | 118 | unsigned int num_sockets; |
118 | char wq_name[KOBJ_NAME_LEN]; | ||
119 | unsigned int inhibit_new_cards; | ||
120 | struct workqueue_struct *wq; | ||
121 | struct work_struct media_inserter; | ||
122 | struct work_struct media_remover; | ||
123 | struct tifm_dev **sockets; | 119 | struct tifm_dev **sockets; |
120 | struct task_struct *media_switcher; | ||
124 | struct class_device cdev; | 121 | struct class_device cdev; |
125 | struct device *dev; | 122 | struct device *dev; |
126 | 123 | ||
@@ -130,9 +127,9 @@ struct tifm_adapter { | |||
130 | struct tifm_adapter *tifm_alloc_adapter(void); | 127 | struct tifm_adapter *tifm_alloc_adapter(void); |
131 | void tifm_free_device(struct device *dev); | 128 | void tifm_free_device(struct device *dev); |
132 | void tifm_free_adapter(struct tifm_adapter *fm); | 129 | void tifm_free_adapter(struct tifm_adapter *fm); |
133 | int tifm_add_adapter(struct tifm_adapter *fm); | 130 | int tifm_add_adapter(struct tifm_adapter *fm, int (*mediathreadfn)(void *data)); |
134 | void tifm_remove_adapter(struct tifm_adapter *fm); | 131 | void tifm_remove_adapter(struct tifm_adapter *fm); |
135 | struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id); | 132 | struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm); |
136 | int tifm_register_driver(struct tifm_driver *drv); | 133 | int tifm_register_driver(struct tifm_driver *drv); |
137 | void tifm_unregister_driver(struct tifm_driver *drv); | 134 | void tifm_unregister_driver(struct tifm_driver *drv); |
138 | void tifm_eject(struct tifm_dev *sock); | 135 | void tifm_eject(struct tifm_dev *sock); |
diff --git a/include/linux/usb.h b/include/linux/usb.h index aab5b1b72021..b5c226a87ed8 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -2,7 +2,7 @@ | |||
2 | #define __LINUX_USB_H | 2 | #define __LINUX_USB_H |
3 | 3 | ||
4 | #include <linux/mod_devicetable.h> | 4 | #include <linux/mod_devicetable.h> |
5 | #include <linux/usb_ch9.h> | 5 | #include <linux/usb/ch9.h> |
6 | 6 | ||
7 | #define USB_MAJOR 180 | 7 | #define USB_MAJOR 180 |
8 | #define USB_DEVICE_MAJOR 189 | 8 | #define USB_DEVICE_MAJOR 189 |
@@ -107,7 +107,8 @@ enum usb_interface_condition { | |||
107 | * @needs_remote_wakeup: flag set when the driver requires remote-wakeup | 107 | * @needs_remote_wakeup: flag set when the driver requires remote-wakeup |
108 | * capability during autosuspend. | 108 | * capability during autosuspend. |
109 | * @dev: driver model's view of this device | 109 | * @dev: driver model's view of this device |
110 | * @class_dev: driver model's class view of this device. | 110 | * @usb_dev: if an interface is bound to the USB major, this will point |
111 | * to the sysfs representation for that device. | ||
111 | * @pm_usage_cnt: PM usage counter for this interface; autosuspend is not | 112 | * @pm_usage_cnt: PM usage counter for this interface; autosuspend is not |
112 | * allowed unless the counter is 0. | 113 | * allowed unless the counter is 0. |
113 | * | 114 | * |
@@ -152,7 +153,7 @@ struct usb_interface { | |||
152 | unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */ | 153 | unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */ |
153 | 154 | ||
154 | struct device dev; /* interface specific device info */ | 155 | struct device dev; /* interface specific device info */ |
155 | struct class_device *class_dev; | 156 | struct device *usb_dev; /* pointer to the usb class's device, if any */ |
156 | int pm_usage_cnt; /* usage counter for autosuspend */ | 157 | int pm_usage_cnt; /* usage counter for autosuspend */ |
157 | }; | 158 | }; |
158 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) | 159 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) |
@@ -372,7 +373,7 @@ struct usb_device { | |||
372 | char *serial; /* iSerialNumber string, if present */ | 373 | char *serial; /* iSerialNumber string, if present */ |
373 | 374 | ||
374 | struct list_head filelist; | 375 | struct list_head filelist; |
375 | struct class_device *class_dev; | 376 | struct device *usbfs_dev; |
376 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */ | 377 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */ |
377 | 378 | ||
378 | /* | 379 | /* |
@@ -475,6 +476,8 @@ extern void usb_driver_release_interface(struct usb_driver *driver, | |||
475 | struct usb_interface *iface); | 476 | struct usb_interface *iface); |
476 | const struct usb_device_id *usb_match_id(struct usb_interface *interface, | 477 | const struct usb_device_id *usb_match_id(struct usb_interface *interface, |
477 | const struct usb_device_id *id); | 478 | const struct usb_device_id *id); |
479 | extern int usb_match_one_id(struct usb_interface *interface, | ||
480 | const struct usb_device_id *id); | ||
478 | 481 | ||
479 | extern struct usb_interface *usb_find_interface(struct usb_driver *drv, | 482 | extern struct usb_interface *usb_find_interface(struct usb_driver *drv, |
480 | int minor); | 483 | int minor); |
@@ -554,6 +557,18 @@ static inline int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *e | |||
554 | } | 557 | } |
555 | 558 | ||
556 | /** | 559 | /** |
560 | * usb_endpoint_xfer_control - check if the endpoint has control transfer type | ||
561 | * @epd: endpoint to be checked | ||
562 | * | ||
563 | * Returns true if the endpoint is of type control, otherwise it returns false. | ||
564 | */ | ||
565 | static inline int usb_endpoint_xfer_control(const struct usb_endpoint_descriptor *epd) | ||
566 | { | ||
567 | return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == | ||
568 | USB_ENDPOINT_XFER_CONTROL); | ||
569 | } | ||
570 | |||
571 | /** | ||
557 | * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type | 572 | * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type |
558 | * @epd: endpoint to be checked | 573 | * @epd: endpoint to be checked |
559 | * | 574 | * |
@@ -723,11 +738,21 @@ static inline int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor | |||
723 | 738 | ||
724 | /* ----------------------------------------------------------------------- */ | 739 | /* ----------------------------------------------------------------------- */ |
725 | 740 | ||
741 | /* Stuff for dynamic usb ids */ | ||
726 | struct usb_dynids { | 742 | struct usb_dynids { |
727 | spinlock_t lock; | 743 | spinlock_t lock; |
728 | struct list_head list; | 744 | struct list_head list; |
729 | }; | 745 | }; |
730 | 746 | ||
747 | struct usb_dynid { | ||
748 | struct list_head node; | ||
749 | struct usb_device_id id; | ||
750 | }; | ||
751 | |||
752 | extern ssize_t usb_store_new_id(struct usb_dynids *dynids, | ||
753 | struct device_driver *driver, | ||
754 | const char *buf, size_t count); | ||
755 | |||
731 | /** | 756 | /** |
732 | * struct usbdrv_wrap - wrapper for driver-model structure | 757 | * struct usbdrv_wrap - wrapper for driver-model structure |
733 | * @driver: The driver-model core driver structure. | 758 | * @driver: The driver-model core driver structure. |
@@ -868,10 +893,11 @@ struct usb_class_driver { | |||
868 | * use these in module_init()/module_exit() | 893 | * use these in module_init()/module_exit() |
869 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) | 894 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) |
870 | */ | 895 | */ |
871 | extern int usb_register_driver(struct usb_driver *, struct module *); | 896 | extern int usb_register_driver(struct usb_driver *, struct module *, |
897 | const char *); | ||
872 | static inline int usb_register(struct usb_driver *driver) | 898 | static inline int usb_register(struct usb_driver *driver) |
873 | { | 899 | { |
874 | return usb_register_driver(driver, THIS_MODULE); | 900 | return usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME); |
875 | } | 901 | } |
876 | extern void usb_deregister(struct usb_driver *); | 902 | extern void usb_deregister(struct usb_driver *); |
877 | 903 | ||
@@ -1085,7 +1111,6 @@ struct urb | |||
1085 | struct kref kref; /* reference count of the URB */ | 1111 | struct kref kref; /* reference count of the URB */ |
1086 | spinlock_t lock; /* lock for the URB */ | 1112 | spinlock_t lock; /* lock for the URB */ |
1087 | void *hcpriv; /* private data for host controller */ | 1113 | void *hcpriv; /* private data for host controller */ |
1088 | int bandwidth; /* bandwidth for INT/ISO request */ | ||
1089 | atomic_t use_count; /* concurrent submissions counter */ | 1114 | atomic_t use_count; /* concurrent submissions counter */ |
1090 | u8 reject; /* submissions will fail */ | 1115 | u8 reject; /* submissions will fail */ |
1091 | 1116 | ||
diff --git a/include/linux/usb/Kbuild b/include/linux/usb/Kbuild new file mode 100644 index 000000000000..43f160cfe003 --- /dev/null +++ b/include/linux/usb/Kbuild | |||
@@ -0,0 +1,5 @@ | |||
1 | unifdef-y += audio.h | ||
2 | unifdef-y += cdc.h | ||
3 | unifdef-y += ch9.h | ||
4 | unifdef-y += midi.h | ||
5 | |||
diff --git a/include/linux/usb_ch9.h b/include/linux/usb/ch9.h index c720d107ff29..ae7833749fa2 100644 --- a/include/linux/usb_ch9.h +++ b/include/linux/usb/ch9.h | |||
@@ -224,6 +224,7 @@ struct usb_device_descriptor { | |||
224 | #define USB_CLASS_CONTENT_SEC 0x0d /* content security */ | 224 | #define USB_CLASS_CONTENT_SEC 0x0d /* content security */ |
225 | #define USB_CLASS_VIDEO 0x0e | 225 | #define USB_CLASS_VIDEO 0x0e |
226 | #define USB_CLASS_WIRELESS_CONTROLLER 0xe0 | 226 | #define USB_CLASS_WIRELESS_CONTROLLER 0xe0 |
227 | #define USB_CLASS_MISC 0xef | ||
227 | #define USB_CLASS_APP_SPEC 0xfe | 228 | #define USB_CLASS_APP_SPEC 0xfe |
228 | #define USB_CLASS_VENDOR_SPEC 0xff | 229 | #define USB_CLASS_VENDOR_SPEC 0xff |
229 | 230 | ||
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 10f99e5f1a97..33dcd8576696 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
@@ -179,6 +179,9 @@ static inline void usb_set_serial_data (struct usb_serial *serial, void *data) | |||
179 | * memory structure allocation at this point in time. | 179 | * memory structure allocation at this point in time. |
180 | * @shutdown: pointer to the driver's shutdown function. This will be | 180 | * @shutdown: pointer to the driver's shutdown function. This will be |
181 | * called when the device is removed from the system. | 181 | * called when the device is removed from the system. |
182 | * @usb_driver: pointer to the struct usb_driver that controls this | ||
183 | * device. This is necessary to allow dynamic ids to be added to | ||
184 | * the driver from sysfs. | ||
182 | * | 185 | * |
183 | * This structure is defines a USB Serial driver. It provides all of | 186 | * This structure is defines a USB Serial driver. It provides all of |
184 | * the information that the USB serial core code needs. If the function | 187 | * the information that the USB serial core code needs. If the function |
@@ -202,6 +205,8 @@ struct usb_serial_driver { | |||
202 | 205 | ||
203 | struct list_head driver_list; | 206 | struct list_head driver_list; |
204 | struct device_driver driver; | 207 | struct device_driver driver; |
208 | struct usb_driver *usb_driver; | ||
209 | struct usb_dynids dynids; | ||
205 | 210 | ||
206 | int (*probe) (struct usb_serial *serial, const struct usb_device_id *id); | 211 | int (*probe) (struct usb_serial *serial, const struct usb_device_id *id); |
207 | int (*attach) (struct usb_serial *serial); | 212 | int (*attach) (struct usb_serial *serial); |
diff --git a/include/linux/usb_gadgetfs.h b/include/linux/usb_gadgetfs.h index b53d6ae8e55e..8086d5a9b94e 100644 --- a/include/linux/usb_gadgetfs.h +++ b/include/linux/usb_gadgetfs.h | |||
@@ -2,7 +2,7 @@ | |||
2 | #include <asm/types.h> | 2 | #include <asm/types.h> |
3 | #include <asm/ioctl.h> | 3 | #include <asm/ioctl.h> |
4 | 4 | ||
5 | #include <linux/usb_ch9.h> | 5 | #include <linux/usb/ch9.h> |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Filesystem based user-mode API to USB Gadget controller hardware | 8 | * Filesystem based user-mode API to USB Gadget controller hardware |
diff --git a/include/linux/video_output.h b/include/linux/video_output.h new file mode 100644 index 000000000000..e63e0c03ee0d --- /dev/null +++ b/include/linux/video_output.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Copyright (C) 2006 Luming Yu <luming.yu@intel.com> | ||
4 | * | ||
5 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or (at | ||
10 | * your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License 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 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
22 | */ | ||
23 | #ifndef _LINUX_VIDEO_OUTPUT_H | ||
24 | #define _LINUX_VIDEO_OUTPUT_H | ||
25 | #include <linux/device.h> | ||
26 | struct output_device; | ||
27 | struct output_properties { | ||
28 | int (*set_state)(struct output_device *); | ||
29 | int (*get_status)(struct output_device *); | ||
30 | }; | ||
31 | struct output_device { | ||
32 | int request_state; | ||
33 | struct output_properties *props; | ||
34 | struct class_device class_dev; | ||
35 | }; | ||
36 | #define to_output_device(obj) container_of(obj, struct output_device, class_dev) | ||
37 | struct output_device *video_output_register(const char *name, | ||
38 | struct device *dev, | ||
39 | void *devdata, | ||
40 | struct output_properties *op); | ||
41 | void video_output_unregister(struct output_device *dev); | ||
42 | #endif | ||
diff --git a/include/linux/wanrouter.h b/include/linux/wanrouter.h index 2cd05013edfc..3add87465b1f 100644 --- a/include/linux/wanrouter.h +++ b/include/linux/wanrouter.h | |||
@@ -516,9 +516,6 @@ struct wan_device { | |||
516 | /* Public functions available for device drivers */ | 516 | /* Public functions available for device drivers */ |
517 | extern int register_wan_device(struct wan_device *wandev); | 517 | extern int register_wan_device(struct wan_device *wandev); |
518 | extern int unregister_wan_device(char *name); | 518 | extern int unregister_wan_device(char *name); |
519 | __be16 wanrouter_type_trans(struct sk_buff *skb, struct net_device *dev); | ||
520 | int wanrouter_encapsulate(struct sk_buff *skb, struct net_device *dev, | ||
521 | unsigned short type); | ||
522 | 519 | ||
523 | /* Proc interface functions. These must not be called by the drivers! */ | 520 | /* Proc interface functions. These must not be called by the drivers! */ |
524 | extern int wanrouter_proc_init(void); | 521 | extern int wanrouter_proc_init(void); |
@@ -527,11 +524,6 @@ extern int wanrouter_proc_add(struct wan_device *wandev); | |||
527 | extern int wanrouter_proc_delete(struct wan_device *wandev); | 524 | extern int wanrouter_proc_delete(struct wan_device *wandev); |
528 | extern int wanrouter_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); | 525 | extern int wanrouter_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); |
529 | 526 | ||
530 | extern void lock_adapter_irq(spinlock_t *lock, unsigned long *smp_flags); | ||
531 | extern void unlock_adapter_irq(spinlock_t *lock, unsigned long *smp_flags); | ||
532 | |||
533 | |||
534 | |||
535 | /* Public Data */ | 527 | /* Public Data */ |
536 | /* list of registered devices */ | 528 | /* list of registered devices */ |
537 | extern struct wan_device *wanrouter_router_devlist; | 529 | extern struct wan_device *wanrouter_router_devlist; |
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h index 9529ea1ae392..15ca89e9961b 100644 --- a/include/linux/xfrm.h +++ b/include/linux/xfrm.h | |||
@@ -178,6 +178,9 @@ enum { | |||
178 | XFRM_MSG_REPORT, | 178 | XFRM_MSG_REPORT, |
179 | #define XFRM_MSG_REPORT XFRM_MSG_REPORT | 179 | #define XFRM_MSG_REPORT XFRM_MSG_REPORT |
180 | 180 | ||
181 | XFRM_MSG_MIGRATE, | ||
182 | #define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE | ||
183 | |||
181 | __XFRM_MSG_MAX | 184 | __XFRM_MSG_MAX |
182 | }; | 185 | }; |
183 | #define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1) | 186 | #define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1) |
@@ -256,6 +259,7 @@ enum xfrm_attr_type_t { | |||
256 | XFRMA_COADDR, /* xfrm_address_t */ | 259 | XFRMA_COADDR, /* xfrm_address_t */ |
257 | XFRMA_LASTUSED, | 260 | XFRMA_LASTUSED, |
258 | XFRMA_POLICY_TYPE, /* struct xfrm_userpolicy_type */ | 261 | XFRMA_POLICY_TYPE, /* struct xfrm_userpolicy_type */ |
262 | XFRMA_MIGRATE, | ||
259 | __XFRMA_MAX | 263 | __XFRMA_MAX |
260 | 264 | ||
261 | #define XFRMA_MAX (__XFRMA_MAX - 1) | 265 | #define XFRMA_MAX (__XFRMA_MAX - 1) |
@@ -351,6 +355,19 @@ struct xfrm_user_report { | |||
351 | struct xfrm_selector sel; | 355 | struct xfrm_selector sel; |
352 | }; | 356 | }; |
353 | 357 | ||
358 | struct xfrm_user_migrate { | ||
359 | xfrm_address_t old_daddr; | ||
360 | xfrm_address_t old_saddr; | ||
361 | xfrm_address_t new_daddr; | ||
362 | xfrm_address_t new_saddr; | ||
363 | __u8 proto; | ||
364 | __u8 mode; | ||
365 | __u16 reserved; | ||
366 | __u32 reqid; | ||
367 | __u16 old_family; | ||
368 | __u16 new_family; | ||
369 | }; | ||
370 | |||
354 | #ifndef __KERNEL__ | 371 | #ifndef __KERNEL__ |
355 | /* backwards compatibility for userspace */ | 372 | /* backwards compatibility for userspace */ |
356 | #define XFRMGRP_ACQUIRE 1 | 373 | #define XFRMGRP_ACQUIRE 1 |
@@ -375,6 +392,8 @@ enum xfrm_nlgroups { | |||
375 | #define XFRMNLGRP_AEVENTS XFRMNLGRP_AEVENTS | 392 | #define XFRMNLGRP_AEVENTS XFRMNLGRP_AEVENTS |
376 | XFRMNLGRP_REPORT, | 393 | XFRMNLGRP_REPORT, |
377 | #define XFRMNLGRP_REPORT XFRMNLGRP_REPORT | 394 | #define XFRMNLGRP_REPORT XFRMNLGRP_REPORT |
395 | XFRMNLGRP_MIGRATE, | ||
396 | #define XFRMNLGRP_MIGRATE XFRMNLGRP_MIGRATE | ||
378 | __XFRMNLGRP_MAX | 397 | __XFRMNLGRP_MAX |
379 | }; | 398 | }; |
380 | #define XFRMNLGRP_MAX (__XFRMNLGRP_MAX - 1) | 399 | #define XFRMNLGRP_MAX (__XFRMNLGRP_MAX - 1) |
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index 34cc76e3ddb4..d27ee8c0da3f 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h | |||
@@ -34,12 +34,13 @@ | |||
34 | #include <asm/byteorder.h> | 34 | #include <asm/byteorder.h> |
35 | 35 | ||
36 | /* This is for all connections with a full identity, no wildcards. | 36 | /* This is for all connections with a full identity, no wildcards. |
37 | * New scheme, half the table is for TIME_WAIT, the other half is | 37 | * One chain is dedicated to TIME_WAIT sockets. |
38 | * for the rest. I'll experiment with dynamic table growth later. | 38 | * I'll experiment with dynamic table growth later. |
39 | */ | 39 | */ |
40 | struct inet_ehash_bucket { | 40 | struct inet_ehash_bucket { |
41 | rwlock_t lock; | 41 | rwlock_t lock; |
42 | struct hlist_head chain; | 42 | struct hlist_head chain; |
43 | struct hlist_head twchain; | ||
43 | }; | 44 | }; |
44 | 45 | ||
45 | /* There are a few simple rules, which allow for local port reuse by | 46 | /* There are a few simple rules, which allow for local port reuse by |
@@ -97,8 +98,7 @@ struct inet_hashinfo { | |||
97 | * | 98 | * |
98 | * TCP_ESTABLISHED <= sk->sk_state < TCP_CLOSE | 99 | * TCP_ESTABLISHED <= sk->sk_state < TCP_CLOSE |
99 | * | 100 | * |
100 | * First half of the table is for sockets not in TIME_WAIT, second half | 101 | * TIME_WAIT sockets use a separate chain (twchain). |
101 | * is for TIME_WAIT sockets only. | ||
102 | */ | 102 | */ |
103 | struct inet_ehash_bucket *ehash; | 103 | struct inet_ehash_bucket *ehash; |
104 | 104 | ||
@@ -369,7 +369,7 @@ static inline struct sock * | |||
369 | } | 369 | } |
370 | 370 | ||
371 | /* Must check for a TIME_WAIT'er before going to listener hash. */ | 371 | /* Must check for a TIME_WAIT'er before going to listener hash. */ |
372 | sk_for_each(sk, node, &(head + hashinfo->ehash_size)->chain) { | 372 | sk_for_each(sk, node, &head->twchain) { |
373 | if (INET_TW_MATCH(sk, hash, acookie, saddr, daddr, ports, dif)) | 373 | if (INET_TW_MATCH(sk, hash, acookie, saddr, daddr, ports, dif)) |
374 | goto hit; | 374 | goto hit; |
375 | } | 375 | } |
diff --git a/include/net/iucv/af_iucv.h b/include/net/iucv/af_iucv.h new file mode 100644 index 000000000000..04d1abb72d25 --- /dev/null +++ b/include/net/iucv/af_iucv.h | |||
@@ -0,0 +1,106 @@ | |||
1 | /* | ||
2 | * Copyright 2006 IBM Corporation | ||
3 | * IUCV protocol stack for Linux on zSeries | ||
4 | * Version 1.0 | ||
5 | * Author(s): Jennifer Hunt <jenhunt@us.ibm.com> | ||
6 | * | ||
7 | */ | ||
8 | |||
9 | #ifndef __AFIUCV_H | ||
10 | #define __AFIUCV_H | ||
11 | |||
12 | #include <asm/types.h> | ||
13 | #include <asm/byteorder.h> | ||
14 | #include <linux/list.h> | ||
15 | #include <linux/poll.h> | ||
16 | #include <linux/socket.h> | ||
17 | |||
18 | #ifndef AF_IUCV | ||
19 | #define AF_IUCV 32 | ||
20 | #define PF_IUCV AF_IUCV | ||
21 | #endif | ||
22 | |||
23 | /* Connection and socket states */ | ||
24 | enum { | ||
25 | IUCV_CONNECTED = 1, | ||
26 | IUCV_OPEN, | ||
27 | IUCV_BOUND, | ||
28 | IUCV_LISTEN, | ||
29 | IUCV_SEVERED, | ||
30 | IUCV_DISCONN, | ||
31 | IUCV_CLOSED | ||
32 | }; | ||
33 | |||
34 | #define IUCV_QUEUELEN_DEFAULT 65535 | ||
35 | #define IUCV_CONN_TIMEOUT (HZ * 40) | ||
36 | #define IUCV_DISCONN_TIMEOUT (HZ * 2) | ||
37 | #define IUCV_CONN_IDLE_TIMEOUT (HZ * 60) | ||
38 | #define IUCV_BUFSIZE_DEFAULT 32768 | ||
39 | |||
40 | /* IUCV socket address */ | ||
41 | struct sockaddr_iucv { | ||
42 | sa_family_t siucv_family; | ||
43 | unsigned short siucv_port; /* Reserved */ | ||
44 | unsigned int siucv_addr; /* Reserved */ | ||
45 | char siucv_nodeid[8]; /* Reserved */ | ||
46 | char siucv_user_id[8]; /* Guest User Id */ | ||
47 | char siucv_name[8]; /* Application Name */ | ||
48 | }; | ||
49 | |||
50 | |||
51 | /* Common socket structures and functions */ | ||
52 | |||
53 | #define iucv_sk(__sk) ((struct iucv_sock *) __sk) | ||
54 | |||
55 | struct iucv_sock { | ||
56 | struct sock sk; | ||
57 | char src_user_id[8]; | ||
58 | char src_name[8]; | ||
59 | char dst_user_id[8]; | ||
60 | char dst_name[8]; | ||
61 | struct list_head accept_q; | ||
62 | struct sock *parent; | ||
63 | struct iucv_path *path; | ||
64 | struct sk_buff_head send_skb_q; | ||
65 | unsigned int send_tag; | ||
66 | }; | ||
67 | |||
68 | struct iucv_sock_list { | ||
69 | struct hlist_head head; | ||
70 | rwlock_t lock; | ||
71 | atomic_t autobind_name; | ||
72 | }; | ||
73 | |||
74 | static void iucv_sock_destruct(struct sock *sk); | ||
75 | static void iucv_sock_cleanup_listen(struct sock *parent); | ||
76 | static void iucv_sock_kill(struct sock *sk); | ||
77 | static void iucv_sock_close(struct sock *sk); | ||
78 | static int iucv_sock_create(struct socket *sock, int proto); | ||
79 | static int iucv_sock_bind(struct socket *sock, struct sockaddr *addr, | ||
80 | int addr_len); | ||
81 | static int iucv_sock_connect(struct socket *sock, struct sockaddr *addr, | ||
82 | int alen, int flags); | ||
83 | static int iucv_sock_listen(struct socket *sock, int backlog); | ||
84 | static int iucv_sock_accept(struct socket *sock, struct socket *newsock, | ||
85 | int flags); | ||
86 | static int iucv_sock_getname(struct socket *sock, struct sockaddr *addr, | ||
87 | int *len, int peer); | ||
88 | static int iucv_sock_sendmsg(struct kiocb *iocb, struct socket *sock, | ||
89 | struct msghdr *msg, size_t len); | ||
90 | static int iucv_sock_recvmsg(struct kiocb *iocb, struct socket *sock, | ||
91 | struct msghdr *msg, size_t len, int flags); | ||
92 | unsigned int iucv_sock_poll(struct file *file, struct socket *sock, | ||
93 | poll_table *wait); | ||
94 | static int iucv_sock_release(struct socket *sock); | ||
95 | static int iucv_sock_shutdown(struct socket *sock, int how); | ||
96 | |||
97 | void iucv_sock_link(struct iucv_sock_list *l, struct sock *s); | ||
98 | void iucv_sock_unlink(struct iucv_sock_list *l, struct sock *s); | ||
99 | int iucv_sock_wait_state(struct sock *sk, int state, int state2, | ||
100 | unsigned long timeo); | ||
101 | int iucv_sock_wait_cnt(struct sock *sk, unsigned long timeo); | ||
102 | void iucv_accept_enqueue(struct sock *parent, struct sock *sk); | ||
103 | void iucv_accept_unlink(struct sock *sk); | ||
104 | struct sock *iucv_accept_dequeue(struct sock *parent, struct socket *newsock); | ||
105 | |||
106 | #endif /* __IUCV_H */ | ||
diff --git a/include/net/iucv/iucv.h b/include/net/iucv/iucv.h new file mode 100644 index 000000000000..746e7416261e --- /dev/null +++ b/include/net/iucv/iucv.h | |||
@@ -0,0 +1,415 @@ | |||
1 | /* | ||
2 | * drivers/s390/net/iucv.h | ||
3 | * IUCV base support. | ||
4 | * | ||
5 | * S390 version | ||
6 | * Copyright 2000, 2006 IBM Corporation | ||
7 | * Author(s):Alan Altmark (Alan_Altmark@us.ibm.com) | ||
8 | * Xenia Tkatschow (xenia@us.ibm.com) | ||
9 | * Rewritten for af_iucv: | ||
10 | * Martin Schwidefsky <schwidefsky@de.ibm.com> | ||
11 | * | ||
12 | * | ||
13 | * Functionality: | ||
14 | * To explore any of the IUCV functions, one must first register their | ||
15 | * program using iucv_register(). Once your program has successfully | ||
16 | * completed a register, it can exploit the other functions. | ||
17 | * For furthur reference on all IUCV functionality, refer to the | ||
18 | * CP Programming Services book, also available on the web thru | ||
19 | * www.ibm.com/s390/vm/pubs, manual # SC24-5760 | ||
20 | * | ||
21 | * Definition of Return Codes | ||
22 | * - All positive return codes including zero are reflected back | ||
23 | * from CP. The definition of each return code can be found in | ||
24 | * CP Programming Services book. | ||
25 | * - Return Code of: | ||
26 | * -EINVAL: Invalid value | ||
27 | * -ENOMEM: storage allocation failed | ||
28 | */ | ||
29 | |||
30 | #include <linux/types.h> | ||
31 | #include <asm/debug.h> | ||
32 | |||
33 | /* | ||
34 | * IUCV option flags usable by device drivers: | ||
35 | * | ||
36 | * IUCV_IPRMDATA Indicates that your program can handle a message in the | ||
37 | * parameter list / a message is sent in the parameter list. | ||
38 | * Used for iucv_path_accept, iucv_path_connect, | ||
39 | * iucv_message_reply, iucv_message_send, iucv_message_send2way. | ||
40 | * IUCV_IPQUSCE Indicates that you do not want to receive messages on this | ||
41 | * path until an iucv_path_resume is issued. | ||
42 | * Used for iucv_path_accept, iucv_path_connect. | ||
43 | * IUCV_IPBUFLST Indicates that an address list is used for the message data. | ||
44 | * Used for iucv_message_receive, iucv_message_send, | ||
45 | * iucv_message_send2way. | ||
46 | * IUCV_IPPRTY Specifies that you want to send priority messages. | ||
47 | * Used for iucv_path_accept, iucv_path_connect, | ||
48 | * iucv_message_reply, iucv_message_send, iucv_message_send2way. | ||
49 | * IUCV_IPSYNC Indicates a synchronous send request. | ||
50 | * Used for iucv_message_send, iucv_message_send2way. | ||
51 | * IUCV_IPANSLST Indicates that an address list is used for the reply data. | ||
52 | * Used for iucv_message_reply, iucv_message_send2way. | ||
53 | * IUCV_IPLOCAL Specifies that the communication partner has to be on the | ||
54 | * local system. If local is specified no target class can be | ||
55 | * specified. | ||
56 | * Used for iucv_path_connect. | ||
57 | * | ||
58 | * All flags are defined in the input field IPFLAGS1 of each function | ||
59 | * and can be found in CP Programming Services. | ||
60 | */ | ||
61 | #define IUCV_IPRMDATA 0x80 | ||
62 | #define IUCV_IPQUSCE 0x40 | ||
63 | #define IUCV_IPBUFLST 0x40 | ||
64 | #define IUCV_IPPRTY 0x20 | ||
65 | #define IUCV_IPANSLST 0x08 | ||
66 | #define IUCV_IPSYNC 0x04 | ||
67 | #define IUCV_IPLOCAL 0x01 | ||
68 | |||
69 | /* | ||
70 | * iucv_array : Defines buffer array. | ||
71 | * Inside the array may be 31- bit addresses and 31-bit lengths. | ||
72 | * Use a pointer to an iucv_array as the buffer, reply or answer | ||
73 | * parameter on iucv_message_send, iucv_message_send2way, iucv_message_receive | ||
74 | * and iucv_message_reply if IUCV_IPBUFLST or IUCV_IPANSLST are used. | ||
75 | */ | ||
76 | struct iucv_array { | ||
77 | u32 address; | ||
78 | u32 length; | ||
79 | } __attribute__ ((aligned (8))); | ||
80 | |||
81 | extern struct bus_type iucv_bus; | ||
82 | extern struct device *iucv_root; | ||
83 | |||
84 | /* | ||
85 | * struct iucv_path | ||
86 | * pathid: 16 bit path identification | ||
87 | * msglim: 16 bit message limit | ||
88 | * flags: properties of the path: IPRMDATA, IPQUSCE, IPPRTY | ||
89 | * handler: address of iucv handler structure | ||
90 | * private: private information of the handler associated with the path | ||
91 | * list: list_head for the iucv_handler path list. | ||
92 | */ | ||
93 | struct iucv_path { | ||
94 | u16 pathid; | ||
95 | u16 msglim; | ||
96 | u8 flags; | ||
97 | void *private; | ||
98 | struct iucv_handler *handler; | ||
99 | struct list_head list; | ||
100 | }; | ||
101 | |||
102 | /* | ||
103 | * struct iucv_message | ||
104 | * id: 32 bit message id | ||
105 | * audit: 32 bit error information of purged or replied messages | ||
106 | * class: 32 bit target class of a message (source class for replies) | ||
107 | * tag: 32 bit tag to be associated with the message | ||
108 | * length: 32 bit length of the message / reply | ||
109 | * reply_size: 32 bit maximum allowed length of the reply | ||
110 | * rmmsg: 8 byte inline message | ||
111 | * flags: message properties (IUCV_IPPRTY) | ||
112 | */ | ||
113 | struct iucv_message { | ||
114 | u32 id; | ||
115 | u32 audit; | ||
116 | u32 class; | ||
117 | u32 tag; | ||
118 | u32 length; | ||
119 | u32 reply_size; | ||
120 | u8 rmmsg[8]; | ||
121 | u8 flags; | ||
122 | }; | ||
123 | |||
124 | /* | ||
125 | * struct iucv_handler | ||
126 | * | ||
127 | * A vector of functions that handle IUCV interrupts. Each functions gets | ||
128 | * a parameter area as defined by the CP Programming Services and private | ||
129 | * pointer that is provided by the user of the interface. | ||
130 | */ | ||
131 | struct iucv_handler { | ||
132 | /* | ||
133 | * The path_pending function is called after an iucv interrupt | ||
134 | * type 0x01 has been received. The base code allocates a path | ||
135 | * structure and "asks" the handler if this path belongs to the | ||
136 | * handler. To accept the path the path_pending function needs | ||
137 | * to call iucv_path_accept and return 0. If the callback returns | ||
138 | * a value != 0 the iucv base code will continue with the next | ||
139 | * handler. The order in which the path_pending functions are | ||
140 | * called is the order of the registration of the iucv handlers | ||
141 | * to the base code. | ||
142 | */ | ||
143 | int (*path_pending)(struct iucv_path *, u8 ipvmid[8], u8 ipuser[16]); | ||
144 | /* | ||
145 | * The path_complete function is called after an iucv interrupt | ||
146 | * type 0x02 has been received for a path that has been established | ||
147 | * for this handler with iucv_path_connect and got accepted by the | ||
148 | * peer with iucv_path_accept. | ||
149 | */ | ||
150 | void (*path_complete)(struct iucv_path *, u8 ipuser[16]); | ||
151 | /* | ||
152 | * The path_severed function is called after an iucv interrupt | ||
153 | * type 0x03 has been received. The communication peer shutdown | ||
154 | * his end of the communication path. The path still exists and | ||
155 | * remaining messages can be received until a iucv_path_sever | ||
156 | * shuts down the other end of the path as well. | ||
157 | */ | ||
158 | void (*path_severed)(struct iucv_path *, u8 ipuser[16]); | ||
159 | /* | ||
160 | * The path_quiesced function is called after an icuv interrupt | ||
161 | * type 0x04 has been received. The communication peer has quiesced | ||
162 | * the path. Delivery of messages is stopped until iucv_path_resume | ||
163 | * has been called. | ||
164 | */ | ||
165 | void (*path_quiesced)(struct iucv_path *, u8 ipuser[16]); | ||
166 | /* | ||
167 | * The path_resumed function is called after an icuv interrupt | ||
168 | * type 0x05 has been received. The communication peer has resumed | ||
169 | * the path. | ||
170 | */ | ||
171 | void (*path_resumed)(struct iucv_path *, u8 ipuser[16]); | ||
172 | /* | ||
173 | * The message_pending function is called after an icuv interrupt | ||
174 | * type 0x06 or type 0x07 has been received. A new message is | ||
175 | * availabe and can be received with iucv_message_receive. | ||
176 | */ | ||
177 | void (*message_pending)(struct iucv_path *, struct iucv_message *); | ||
178 | /* | ||
179 | * The message_complete function is called after an icuv interrupt | ||
180 | * type 0x08 or type 0x09 has been received. A message send with | ||
181 | * iucv_message_send2way has been replied to. The reply can be | ||
182 | * received with iucv_message_receive. | ||
183 | */ | ||
184 | void (*message_complete)(struct iucv_path *, struct iucv_message *); | ||
185 | |||
186 | struct list_head list; | ||
187 | struct list_head paths; | ||
188 | }; | ||
189 | |||
190 | /** | ||
191 | * iucv_register: | ||
192 | * @handler: address of iucv handler structure | ||
193 | * @smp: != 0 indicates that the handler can deal with out of order messages | ||
194 | * | ||
195 | * Registers a driver with IUCV. | ||
196 | * | ||
197 | * Returns 0 on success, -ENOMEM if the memory allocation for the pathid | ||
198 | * table failed, or -EIO if IUCV_DECLARE_BUFFER failed on all cpus. | ||
199 | */ | ||
200 | int iucv_register(struct iucv_handler *handler, int smp); | ||
201 | |||
202 | /** | ||
203 | * iucv_unregister | ||
204 | * @handler: address of iucv handler structure | ||
205 | * @smp: != 0 indicates that the handler can deal with out of order messages | ||
206 | * | ||
207 | * Unregister driver from IUCV. | ||
208 | */ | ||
209 | void iucv_unregister(struct iucv_handler *handle, int smp); | ||
210 | |||
211 | /** | ||
212 | * iucv_path_alloc | ||
213 | * @msglim: initial message limit | ||
214 | * @flags: initial flags | ||
215 | * @gfp: kmalloc allocation flag | ||
216 | * | ||
217 | * Allocate a new path structure for use with iucv_connect. | ||
218 | * | ||
219 | * Returns NULL if the memory allocation failed or a pointer to the | ||
220 | * path structure. | ||
221 | */ | ||
222 | static inline struct iucv_path *iucv_path_alloc(u16 msglim, u8 flags, gfp_t gfp) | ||
223 | { | ||
224 | struct iucv_path *path; | ||
225 | |||
226 | path = kzalloc(sizeof(struct iucv_path), gfp); | ||
227 | if (path) { | ||
228 | path->msglim = msglim; | ||
229 | path->flags = flags; | ||
230 | } | ||
231 | return path; | ||
232 | } | ||
233 | |||
234 | /** | ||
235 | * iucv_path_free | ||
236 | * @path: address of iucv path structure | ||
237 | * | ||
238 | * Frees a path structure. | ||
239 | */ | ||
240 | static inline void iucv_path_free(struct iucv_path *path) | ||
241 | { | ||
242 | kfree(path); | ||
243 | } | ||
244 | |||
245 | /** | ||
246 | * iucv_path_accept | ||
247 | * @path: address of iucv path structure | ||
248 | * @handler: address of iucv handler structure | ||
249 | * @userdata: 16 bytes of data reflected to the communication partner | ||
250 | * @private: private data passed to interrupt handlers for this path | ||
251 | * | ||
252 | * This function is issued after the user received a connection pending | ||
253 | * external interrupt and now wishes to complete the IUCV communication path. | ||
254 | * | ||
255 | * Returns the result of the CP IUCV call. | ||
256 | */ | ||
257 | int iucv_path_accept(struct iucv_path *path, struct iucv_handler *handler, | ||
258 | u8 userdata[16], void *private); | ||
259 | |||
260 | /** | ||
261 | * iucv_path_connect | ||
262 | * @path: address of iucv path structure | ||
263 | * @handler: address of iucv handler structure | ||
264 | * @userid: 8-byte user identification | ||
265 | * @system: 8-byte target system identification | ||
266 | * @userdata: 16 bytes of data reflected to the communication partner | ||
267 | * @private: private data passed to interrupt handlers for this path | ||
268 | * | ||
269 | * This function establishes an IUCV path. Although the connect may complete | ||
270 | * successfully, you are not able to use the path until you receive an IUCV | ||
271 | * Connection Complete external interrupt. | ||
272 | * | ||
273 | * Returns the result of the CP IUCV call. | ||
274 | */ | ||
275 | int iucv_path_connect(struct iucv_path *path, struct iucv_handler *handler, | ||
276 | u8 userid[8], u8 system[8], u8 userdata[16], | ||
277 | void *private); | ||
278 | |||
279 | /** | ||
280 | * iucv_path_quiesce: | ||
281 | * @path: address of iucv path structure | ||
282 | * @userdata: 16 bytes of data reflected to the communication partner | ||
283 | * | ||
284 | * This function temporarily suspends incoming messages on an IUCV path. | ||
285 | * You can later reactivate the path by invoking the iucv_resume function. | ||
286 | * | ||
287 | * Returns the result from the CP IUCV call. | ||
288 | */ | ||
289 | int iucv_path_quiesce(struct iucv_path *path, u8 userdata[16]); | ||
290 | |||
291 | /** | ||
292 | * iucv_path_resume: | ||
293 | * @path: address of iucv path structure | ||
294 | * @userdata: 16 bytes of data reflected to the communication partner | ||
295 | * | ||
296 | * This function resumes incoming messages on an IUCV path that has | ||
297 | * been stopped with iucv_path_quiesce. | ||
298 | * | ||
299 | * Returns the result from the CP IUCV call. | ||
300 | */ | ||
301 | int iucv_path_resume(struct iucv_path *path, u8 userdata[16]); | ||
302 | |||
303 | /** | ||
304 | * iucv_path_sever | ||
305 | * @path: address of iucv path structure | ||
306 | * @userdata: 16 bytes of data reflected to the communication partner | ||
307 | * | ||
308 | * This function terminates an IUCV path. | ||
309 | * | ||
310 | * Returns the result from the CP IUCV call. | ||
311 | */ | ||
312 | int iucv_path_sever(struct iucv_path *path, u8 userdata[16]); | ||
313 | |||
314 | /** | ||
315 | * iucv_message_purge | ||
316 | * @path: address of iucv path structure | ||
317 | * @msg: address of iucv msg structure | ||
318 | * @srccls: source class of message | ||
319 | * | ||
320 | * Cancels a message you have sent. | ||
321 | * | ||
322 | * Returns the result from the CP IUCV call. | ||
323 | */ | ||
324 | int iucv_message_purge(struct iucv_path *path, struct iucv_message *msg, | ||
325 | u32 srccls); | ||
326 | |||
327 | /** | ||
328 | * iucv_message_receive | ||
329 | * @path: address of iucv path structure | ||
330 | * @msg: address of iucv msg structure | ||
331 | * @flags: flags that affect how the message is received (IUCV_IPBUFLST) | ||
332 | * @buffer: address of data buffer or address of struct iucv_array | ||
333 | * @size: length of data buffer | ||
334 | * @residual: | ||
335 | * | ||
336 | * This function receives messages that are being sent to you over | ||
337 | * established paths. This function will deal with RMDATA messages | ||
338 | * embedded in struct iucv_message as well. | ||
339 | * | ||
340 | * Returns the result from the CP IUCV call. | ||
341 | */ | ||
342 | int iucv_message_receive(struct iucv_path *path, struct iucv_message *msg, | ||
343 | u8 flags, void *buffer, size_t size, size_t *residual); | ||
344 | |||
345 | /** | ||
346 | * iucv_message_reject | ||
347 | * @path: address of iucv path structure | ||
348 | * @msg: address of iucv msg structure | ||
349 | * | ||
350 | * The reject function refuses a specified message. Between the time you | ||
351 | * are notified of a message and the time that you complete the message, | ||
352 | * the message may be rejected. | ||
353 | * | ||
354 | * Returns the result from the CP IUCV call. | ||
355 | */ | ||
356 | int iucv_message_reject(struct iucv_path *path, struct iucv_message *msg); | ||
357 | |||
358 | /** | ||
359 | * iucv_message_reply | ||
360 | * @path: address of iucv path structure | ||
361 | * @msg: address of iucv msg structure | ||
362 | * @flags: how the reply is sent (IUCV_IPRMDATA, IUCV_IPPRTY, IUCV_IPBUFLST) | ||
363 | * @reply: address of data buffer or address of struct iucv_array | ||
364 | * @size: length of reply data buffer | ||
365 | * | ||
366 | * This function responds to the two-way messages that you receive. You | ||
367 | * must identify completely the message to which you wish to reply. ie, | ||
368 | * pathid, msgid, and trgcls. Prmmsg signifies the data is moved into | ||
369 | * the parameter list. | ||
370 | * | ||
371 | * Returns the result from the CP IUCV call. | ||
372 | */ | ||
373 | int iucv_message_reply(struct iucv_path *path, struct iucv_message *msg, | ||
374 | u8 flags, void *reply, size_t size); | ||
375 | |||
376 | /** | ||
377 | * iucv_message_send | ||
378 | * @path: address of iucv path structure | ||
379 | * @msg: address of iucv msg structure | ||
380 | * @flags: how the message is sent (IUCV_IPRMDATA, IUCV_IPPRTY, IUCV_IPBUFLST) | ||
381 | * @srccls: source class of message | ||
382 | * @buffer: address of data buffer or address of struct iucv_array | ||
383 | * @size: length of send buffer | ||
384 | * | ||
385 | * This function transmits data to another application. Data to be | ||
386 | * transmitted is in a buffer and this is a one-way message and the | ||
387 | * receiver will not reply to the message. | ||
388 | * | ||
389 | * Returns the result from the CP IUCV call. | ||
390 | */ | ||
391 | int iucv_message_send(struct iucv_path *path, struct iucv_message *msg, | ||
392 | u8 flags, u32 srccls, void *buffer, size_t size); | ||
393 | |||
394 | /** | ||
395 | * iucv_message_send2way | ||
396 | * @path: address of iucv path structure | ||
397 | * @msg: address of iucv msg structure | ||
398 | * @flags: how the message is sent and the reply is received | ||
399 | * (IUCV_IPRMDATA, IUCV_IPBUFLST, IUCV_IPPRTY, IUCV_ANSLST) | ||
400 | * @srccls: source class of message | ||
401 | * @buffer: address of data buffer or address of struct iucv_array | ||
402 | * @size: length of send buffer | ||
403 | * @ansbuf: address of answer buffer or address of struct iucv_array | ||
404 | * @asize: size of reply buffer | ||
405 | * | ||
406 | * This function transmits data to another application. Data to be | ||
407 | * transmitted is in a buffer. The receiver of the send is expected to | ||
408 | * reply to the message and a buffer is provided into which IUCV moves | ||
409 | * the reply to this message. | ||
410 | * | ||
411 | * Returns the result from the CP IUCV call. | ||
412 | */ | ||
413 | int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg, | ||
414 | u8 flags, u32 srccls, void *buffer, size_t size, | ||
415 | void *answer, size_t asize, size_t *residual); | ||
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index bd01b4633ee2..68ec27490c20 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h | |||
@@ -45,6 +45,7 @@ union nf_conntrack_expect_proto { | |||
45 | #include <linux/netfilter/nf_conntrack_ftp.h> | 45 | #include <linux/netfilter/nf_conntrack_ftp.h> |
46 | #include <linux/netfilter/nf_conntrack_pptp.h> | 46 | #include <linux/netfilter/nf_conntrack_pptp.h> |
47 | #include <linux/netfilter/nf_conntrack_h323.h> | 47 | #include <linux/netfilter/nf_conntrack_h323.h> |
48 | #include <linux/netfilter/nf_conntrack_sane.h> | ||
48 | 49 | ||
49 | /* per conntrack: application helper private data */ | 50 | /* per conntrack: application helper private data */ |
50 | union nf_conntrack_help { | 51 | union nf_conntrack_help { |
@@ -52,6 +53,7 @@ union nf_conntrack_help { | |||
52 | struct nf_ct_ftp_master ct_ftp_info; | 53 | struct nf_ct_ftp_master ct_ftp_info; |
53 | struct nf_ct_pptp_master ct_pptp_info; | 54 | struct nf_ct_pptp_master ct_pptp_info; |
54 | struct nf_ct_h323_master ct_h323_info; | 55 | struct nf_ct_h323_master ct_h323_info; |
56 | struct nf_ct_sane_master ct_sane_info; | ||
55 | }; | 57 | }; |
56 | 58 | ||
57 | #include <linux/types.h> | 59 | #include <linux/types.h> |
diff --git a/include/net/netfilter/nf_nat.h b/include/net/netfilter/nf_nat.h index 61c62068ca6b..bc57dd7b9b5c 100644 --- a/include/net/netfilter/nf_nat.h +++ b/include/net/netfilter/nf_nat.h | |||
@@ -16,6 +16,7 @@ enum nf_nat_manip_type | |||
16 | 16 | ||
17 | #define IP_NAT_RANGE_MAP_IPS 1 | 17 | #define IP_NAT_RANGE_MAP_IPS 1 |
18 | #define IP_NAT_RANGE_PROTO_SPECIFIED 2 | 18 | #define IP_NAT_RANGE_PROTO_SPECIFIED 2 |
19 | #define IP_NAT_RANGE_PROTO_RANDOM 4 | ||
19 | 20 | ||
20 | /* NAT sequence number modifications */ | 21 | /* NAT sequence number modifications */ |
21 | struct nf_nat_seq { | 22 | struct nf_nat_seq { |
diff --git a/include/net/route.h b/include/net/route.h index 486e37aff06c..1440bdb5a27d 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
@@ -146,7 +146,8 @@ static inline char rt_tos2priority(u8 tos) | |||
146 | 146 | ||
147 | static inline int ip_route_connect(struct rtable **rp, __be32 dst, | 147 | static inline int ip_route_connect(struct rtable **rp, __be32 dst, |
148 | __be32 src, u32 tos, int oif, u8 protocol, | 148 | __be32 src, u32 tos, int oif, u8 protocol, |
149 | __be16 sport, __be16 dport, struct sock *sk) | 149 | __be16 sport, __be16 dport, struct sock *sk, |
150 | int flags) | ||
150 | { | 151 | { |
151 | struct flowi fl = { .oif = oif, | 152 | struct flowi fl = { .oif = oif, |
152 | .nl_u = { .ip4_u = { .daddr = dst, | 153 | .nl_u = { .ip4_u = { .daddr = dst, |
@@ -168,7 +169,7 @@ static inline int ip_route_connect(struct rtable **rp, __be32 dst, | |||
168 | *rp = NULL; | 169 | *rp = NULL; |
169 | } | 170 | } |
170 | security_sk_classify_flow(sk, &fl); | 171 | security_sk_classify_flow(sk, &fl); |
171 | return ip_route_output_flow(rp, &fl, sk, 0); | 172 | return ip_route_output_flow(rp, &fl, sk, flags); |
172 | } | 173 | } |
173 | 174 | ||
174 | static inline int ip_route_newports(struct rtable **rp, u8 protocol, | 175 | static inline int ip_route_newports(struct rtable **rp, u8 protocol, |
diff --git a/include/net/tcp.h b/include/net/tcp.h index cd8fa0c858ae..5c472f255b77 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -802,9 +802,8 @@ static inline void tcp_update_wl(struct tcp_sock *tp, u32 ack, u32 seq) | |||
802 | /* | 802 | /* |
803 | * Calculate(/check) TCP checksum | 803 | * Calculate(/check) TCP checksum |
804 | */ | 804 | */ |
805 | static inline __sum16 tcp_v4_check(struct tcphdr *th, int len, | 805 | static inline __sum16 tcp_v4_check(int len, __be32 saddr, |
806 | __be32 saddr, __be32 daddr, | 806 | __be32 daddr, __wsum base) |
807 | __wsum base) | ||
808 | { | 807 | { |
809 | return csum_tcpudp_magic(saddr,daddr,len,IPPROTO_TCP,base); | 808 | return csum_tcpudp_magic(saddr,daddr,len,IPPROTO_TCP,base); |
810 | } | 809 | } |
diff --git a/include/net/x25.h b/include/net/x25.h index e47fe440d9d7..fc3f03d976f8 100644 --- a/include/net/x25.h +++ b/include/net/x25.h | |||
@@ -161,6 +161,14 @@ struct x25_sock { | |||
161 | unsigned long vc_facil_mask; /* inc_call facilities mask */ | 161 | unsigned long vc_facil_mask; /* inc_call facilities mask */ |
162 | }; | 162 | }; |
163 | 163 | ||
164 | struct x25_forward { | ||
165 | struct list_head node; | ||
166 | unsigned int lci; | ||
167 | struct net_device *dev1; | ||
168 | struct net_device *dev2; | ||
169 | atomic_t refcnt; | ||
170 | }; | ||
171 | |||
164 | static inline struct x25_sock *x25_sk(const struct sock *sk) | 172 | static inline struct x25_sock *x25_sk(const struct sock *sk) |
165 | { | 173 | { |
166 | return (struct x25_sock *)sk; | 174 | return (struct x25_sock *)sk; |
@@ -172,6 +180,7 @@ extern int sysctl_x25_call_request_timeout; | |||
172 | extern int sysctl_x25_reset_request_timeout; | 180 | extern int sysctl_x25_reset_request_timeout; |
173 | extern int sysctl_x25_clear_request_timeout; | 181 | extern int sysctl_x25_clear_request_timeout; |
174 | extern int sysctl_x25_ack_holdback_timeout; | 182 | extern int sysctl_x25_ack_holdback_timeout; |
183 | extern int sysctl_x25_forward; | ||
175 | 184 | ||
176 | extern int x25_addr_ntoa(unsigned char *, struct x25_address *, | 185 | extern int x25_addr_ntoa(unsigned char *, struct x25_address *, |
177 | struct x25_address *); | 186 | struct x25_address *); |
@@ -198,6 +207,13 @@ extern int x25_negotiate_facilities(struct sk_buff *, struct sock *, | |||
198 | struct x25_dte_facilities *); | 207 | struct x25_dte_facilities *); |
199 | extern void x25_limit_facilities(struct x25_facilities *, struct x25_neigh *); | 208 | extern void x25_limit_facilities(struct x25_facilities *, struct x25_neigh *); |
200 | 209 | ||
210 | /* x25_forward.c */ | ||
211 | extern void x25_clear_forward_by_lci(unsigned int lci); | ||
212 | extern void x25_clear_forward_by_dev(struct net_device *); | ||
213 | extern int x25_forward_data(int, struct x25_neigh *, struct sk_buff *); | ||
214 | extern int x25_forward_call(struct x25_address *, struct x25_neigh *, | ||
215 | struct sk_buff *, int); | ||
216 | |||
201 | /* x25_in.c */ | 217 | /* x25_in.c */ |
202 | extern int x25_process_rx_frame(struct sock *, struct sk_buff *); | 218 | extern int x25_process_rx_frame(struct sock *, struct sk_buff *); |
203 | extern int x25_backlog_rcv(struct sock *, struct sk_buff *); | 219 | extern int x25_backlog_rcv(struct sock *, struct sk_buff *); |
@@ -282,6 +298,8 @@ extern struct hlist_head x25_list; | |||
282 | extern rwlock_t x25_list_lock; | 298 | extern rwlock_t x25_list_lock; |
283 | extern struct list_head x25_route_list; | 299 | extern struct list_head x25_route_list; |
284 | extern rwlock_t x25_route_list_lock; | 300 | extern rwlock_t x25_route_list_lock; |
301 | extern struct list_head x25_forward_list; | ||
302 | extern rwlock_t x25_forward_list_lock; | ||
285 | 303 | ||
286 | extern int x25_proc_init(void); | 304 | extern int x25_proc_init(void); |
287 | extern void x25_proc_exit(void); | 305 | extern void x25_proc_exit(void); |
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index e4765413cf80..16924cb772c9 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
@@ -252,10 +252,13 @@ struct xfrm_state_afinfo { | |||
252 | xfrm_address_t *daddr, xfrm_address_t *saddr); | 252 | xfrm_address_t *daddr, xfrm_address_t *saddr); |
253 | int (*tmpl_sort)(struct xfrm_tmpl **dst, struct xfrm_tmpl **src, int n); | 253 | int (*tmpl_sort)(struct xfrm_tmpl **dst, struct xfrm_tmpl **src, int n); |
254 | int (*state_sort)(struct xfrm_state **dst, struct xfrm_state **src, int n); | 254 | int (*state_sort)(struct xfrm_state **dst, struct xfrm_state **src, int n); |
255 | int (*output)(struct sk_buff *skb); | ||
255 | }; | 256 | }; |
256 | 257 | ||
257 | extern int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo); | 258 | extern int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo); |
258 | extern int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo); | 259 | extern int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo); |
260 | extern struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned short family); | ||
261 | extern void xfrm_state_put_afinfo(struct xfrm_state_afinfo *afinfo); | ||
259 | 262 | ||
260 | extern void xfrm_state_delete_tunnel(struct xfrm_state *x); | 263 | extern void xfrm_state_delete_tunnel(struct xfrm_state *x); |
261 | 264 | ||
@@ -359,6 +362,19 @@ struct xfrm_policy | |||
359 | struct xfrm_tmpl xfrm_vec[XFRM_MAX_DEPTH]; | 362 | struct xfrm_tmpl xfrm_vec[XFRM_MAX_DEPTH]; |
360 | }; | 363 | }; |
361 | 364 | ||
365 | struct xfrm_migrate { | ||
366 | xfrm_address_t old_daddr; | ||
367 | xfrm_address_t old_saddr; | ||
368 | xfrm_address_t new_daddr; | ||
369 | xfrm_address_t new_saddr; | ||
370 | u8 proto; | ||
371 | u8 mode; | ||
372 | u16 reserved; | ||
373 | u32 reqid; | ||
374 | u16 old_family; | ||
375 | u16 new_family; | ||
376 | }; | ||
377 | |||
362 | #define XFRM_KM_TIMEOUT 30 | 378 | #define XFRM_KM_TIMEOUT 30 |
363 | /* which seqno */ | 379 | /* which seqno */ |
364 | #define XFRM_REPLAY_SEQ 1 | 380 | #define XFRM_REPLAY_SEQ 1 |
@@ -385,6 +401,7 @@ struct xfrm_mgr | |||
385 | int (*new_mapping)(struct xfrm_state *x, xfrm_address_t *ipaddr, __be16 sport); | 401 | int (*new_mapping)(struct xfrm_state *x, xfrm_address_t *ipaddr, __be16 sport); |
386 | int (*notify_policy)(struct xfrm_policy *x, int dir, struct km_event *c); | 402 | int (*notify_policy)(struct xfrm_policy *x, int dir, struct km_event *c); |
387 | int (*report)(u8 proto, struct xfrm_selector *sel, xfrm_address_t *addr); | 403 | int (*report)(u8 proto, struct xfrm_selector *sel, xfrm_address_t *addr); |
404 | int (*migrate)(struct xfrm_selector *sel, u8 dir, u8 type, struct xfrm_migrate *m, int num_bundles); | ||
388 | }; | 405 | }; |
389 | 406 | ||
390 | extern int xfrm_register_km(struct xfrm_mgr *km); | 407 | extern int xfrm_register_km(struct xfrm_mgr *km); |
@@ -985,6 +1002,16 @@ extern int xfrm_bundle_ok(struct xfrm_policy *pol, struct xfrm_dst *xdst, | |||
985 | struct flowi *fl, int family, int strict); | 1002 | struct flowi *fl, int family, int strict); |
986 | extern void xfrm_init_pmtu(struct dst_entry *dst); | 1003 | extern void xfrm_init_pmtu(struct dst_entry *dst); |
987 | 1004 | ||
1005 | #ifdef CONFIG_XFRM_MIGRATE | ||
1006 | extern int km_migrate(struct xfrm_selector *sel, u8 dir, u8 type, | ||
1007 | struct xfrm_migrate *m, int num_bundles); | ||
1008 | extern struct xfrm_state * xfrm_migrate_state_find(struct xfrm_migrate *m); | ||
1009 | extern struct xfrm_state * xfrm_state_migrate(struct xfrm_state *x, | ||
1010 | struct xfrm_migrate *m); | ||
1011 | extern int xfrm_migrate(struct xfrm_selector *sel, u8 dir, u8 type, | ||
1012 | struct xfrm_migrate *m, int num_bundles); | ||
1013 | #endif | ||
1014 | |||
988 | extern wait_queue_head_t km_waitq; | 1015 | extern wait_queue_head_t km_waitq; |
989 | extern int km_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr, __be16 sport); | 1016 | extern int km_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr, __be16 sport); |
990 | extern void km_policy_expired(struct xfrm_policy *pol, int dir, int hard, u32 pid); | 1017 | extern void km_policy_expired(struct xfrm_policy *pol, int dir, int hard, u32 pid); |
@@ -1050,5 +1077,25 @@ static inline void xfrm_aevent_doreplay(struct xfrm_state *x) | |||
1050 | xfrm_replay_notify(x, XFRM_REPLAY_UPDATE); | 1077 | xfrm_replay_notify(x, XFRM_REPLAY_UPDATE); |
1051 | } | 1078 | } |
1052 | 1079 | ||
1080 | #ifdef CONFIG_XFRM_MIGRATE | ||
1081 | static inline struct xfrm_algo *xfrm_algo_clone(struct xfrm_algo *orig) | ||
1082 | { | ||
1083 | return (struct xfrm_algo *)kmemdup(orig, sizeof(*orig) + orig->alg_key_len, GFP_KERNEL); | ||
1084 | } | ||
1085 | |||
1086 | static inline void xfrm_states_put(struct xfrm_state **states, int n) | ||
1087 | { | ||
1088 | int i; | ||
1089 | for (i = 0; i < n; i++) | ||
1090 | xfrm_state_put(*(states + i)); | ||
1091 | } | ||
1092 | |||
1093 | static inline void xfrm_states_delete(struct xfrm_state **states, int n) | ||
1094 | { | ||
1095 | int i; | ||
1096 | for (i = 0; i < n; i++) | ||
1097 | xfrm_state_delete(*(states + i)); | ||
1098 | } | ||
1099 | #endif | ||
1053 | 1100 | ||
1054 | #endif /* _NET_XFRM_H */ | 1101 | #endif /* _NET_XFRM_H */ |
diff --git a/include/pcmcia/ss.h b/include/pcmcia/ss.h index 623a0fc0dae1..6e84258b94de 100644 --- a/include/pcmcia/ss.h +++ b/include/pcmcia/ss.h | |||
@@ -284,7 +284,7 @@ struct pcmcia_socket { | |||
284 | #endif | 284 | #endif |
285 | 285 | ||
286 | /* socket device */ | 286 | /* socket device */ |
287 | struct class_device dev; | 287 | struct device dev; |
288 | void *driver_data; /* data internal to the socket driver */ | 288 | void *driver_data; /* data internal to the socket driver */ |
289 | 289 | ||
290 | }; | 290 | }; |
diff --git a/include/rdma/ib_user_mad.h b/include/rdma/ib_user_mad.h index 44537aa32e62..d66b15ea82c4 100644 --- a/include/rdma/ib_user_mad.h +++ b/include/rdma/ib_user_mad.h | |||
@@ -98,7 +98,7 @@ struct ib_user_mad_hdr { | |||
98 | */ | 98 | */ |
99 | struct ib_user_mad { | 99 | struct ib_user_mad { |
100 | struct ib_user_mad_hdr hdr; | 100 | struct ib_user_mad_hdr hdr; |
101 | __u8 data[0]; | 101 | __u64 data[0]; |
102 | }; | 102 | }; |
103 | 103 | ||
104 | /** | 104 | /** |
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 0bfa3328d686..765589f4d166 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <linux/device.h> | 45 | #include <linux/device.h> |
46 | #include <linux/mm.h> | 46 | #include <linux/mm.h> |
47 | #include <linux/dma-mapping.h> | 47 | #include <linux/dma-mapping.h> |
48 | #include <linux/kref.h> | ||
48 | 49 | ||
49 | #include <asm/atomic.h> | 50 | #include <asm/atomic.h> |
50 | #include <asm/scatterlist.h> | 51 | #include <asm/scatterlist.h> |
@@ -419,8 +420,8 @@ struct ib_wc { | |||
419 | enum ib_wc_opcode opcode; | 420 | enum ib_wc_opcode opcode; |
420 | u32 vendor_err; | 421 | u32 vendor_err; |
421 | u32 byte_len; | 422 | u32 byte_len; |
423 | struct ib_qp *qp; | ||
422 | __be32 imm_data; | 424 | __be32 imm_data; |
423 | u32 qp_num; | ||
424 | u32 src_qp; | 425 | u32 src_qp; |
425 | int wc_flags; | 426 | int wc_flags; |
426 | u16 pkey_index; | 427 | u16 pkey_index; |