diff options
Diffstat (limited to 'drivers')
306 files changed, 8530 insertions, 8701 deletions
diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c index baa5fc05e12..db307a356f0 100644 --- a/drivers/acpi/acpica/hwsleep.c +++ b/drivers/acpi/acpica/hwsleep.c | |||
@@ -211,6 +211,12 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state) | |||
211 | 211 | ||
212 | ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep) | 212 | ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep) |
213 | 213 | ||
214 | static unsigned int gts, bfs; | ||
215 | module_param(gts, uint, 0644); | ||
216 | module_param(bfs, uint, 0644); | ||
217 | MODULE_PARM_DESC(gts, "Enable evaluation of _GTS on suspend."); | ||
218 | MODULE_PARM_DESC(bfs, "Enable evaluation of _BFS on resume".); | ||
219 | |||
214 | /******************************************************************************* | 220 | /******************************************************************************* |
215 | * | 221 | * |
216 | * FUNCTION: acpi_enter_sleep_state | 222 | * FUNCTION: acpi_enter_sleep_state |
@@ -278,16 +284,18 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) | |||
278 | return_ACPI_STATUS(status); | 284 | return_ACPI_STATUS(status); |
279 | } | 285 | } |
280 | 286 | ||
281 | /* Execute the _GTS method */ | 287 | if (gts) { |
288 | /* Execute the _GTS method */ | ||
282 | 289 | ||
283 | arg_list.count = 1; | 290 | arg_list.count = 1; |
284 | arg_list.pointer = &arg; | 291 | arg_list.pointer = &arg; |
285 | arg.type = ACPI_TYPE_INTEGER; | 292 | arg.type = ACPI_TYPE_INTEGER; |
286 | arg.integer.value = sleep_state; | 293 | arg.integer.value = sleep_state; |
287 | 294 | ||
288 | status = acpi_evaluate_object(NULL, METHOD_NAME__GTS, &arg_list, NULL); | 295 | status = acpi_evaluate_object(NULL, METHOD_NAME__GTS, &arg_list, NULL); |
289 | if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { | 296 | if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { |
290 | return_ACPI_STATUS(status); | 297 | return_ACPI_STATUS(status); |
298 | } | ||
291 | } | 299 | } |
292 | 300 | ||
293 | /* Get current value of PM1A control */ | 301 | /* Get current value of PM1A control */ |
@@ -513,18 +521,19 @@ acpi_status acpi_leave_sleep_state_prep(u8 sleep_state) | |||
513 | } | 521 | } |
514 | } | 522 | } |
515 | 523 | ||
516 | /* Execute the _BFS method */ | 524 | if (bfs) { |
525 | /* Execute the _BFS method */ | ||
517 | 526 | ||
518 | arg_list.count = 1; | 527 | arg_list.count = 1; |
519 | arg_list.pointer = &arg; | 528 | arg_list.pointer = &arg; |
520 | arg.type = ACPI_TYPE_INTEGER; | 529 | arg.type = ACPI_TYPE_INTEGER; |
521 | arg.integer.value = sleep_state; | 530 | arg.integer.value = sleep_state; |
522 | 531 | ||
523 | status = acpi_evaluate_object(NULL, METHOD_NAME__BFS, &arg_list, NULL); | 532 | status = acpi_evaluate_object(NULL, METHOD_NAME__BFS, &arg_list, NULL); |
524 | if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { | 533 | if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { |
525 | ACPI_EXCEPTION((AE_INFO, status, "During Method _BFS")); | 534 | ACPI_EXCEPTION((AE_INFO, status, "During Method _BFS")); |
535 | } | ||
526 | } | 536 | } |
527 | |||
528 | return_ACPI_STATUS(status); | 537 | return_ACPI_STATUS(status); |
529 | } | 538 | } |
530 | 539 | ||
diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c index 7737afb157c..ec33f270c5b 100644 --- a/drivers/acpi/acpica/hwvalid.c +++ b/drivers/acpi/acpica/hwvalid.c | |||
@@ -90,6 +90,7 @@ static const struct acpi_port_info acpi_protected_ports[] = { | |||
90 | {"PIT2", 0x0048, 0x004B, ACPI_OSI_WIN_XP}, | 90 | {"PIT2", 0x0048, 0x004B, ACPI_OSI_WIN_XP}, |
91 | {"RTC", 0x0070, 0x0071, ACPI_OSI_WIN_XP}, | 91 | {"RTC", 0x0070, 0x0071, ACPI_OSI_WIN_XP}, |
92 | {"CMOS", 0x0074, 0x0076, ACPI_OSI_WIN_XP}, | 92 | {"CMOS", 0x0074, 0x0076, ACPI_OSI_WIN_XP}, |
93 | {"DMA1", 0x0081, 0x0083, ACPI_OSI_WIN_XP}, | ||
93 | {"DMA1L", 0x0087, 0x0087, ACPI_OSI_WIN_XP}, | 94 | {"DMA1L", 0x0087, 0x0087, ACPI_OSI_WIN_XP}, |
94 | {"DMA2", 0x0089, 0x008B, ACPI_OSI_WIN_XP}, | 95 | {"DMA2", 0x0089, 0x008B, ACPI_OSI_WIN_XP}, |
95 | {"DMA2L", 0x008F, 0x008F, ACPI_OSI_WIN_XP}, | 96 | {"DMA2L", 0x008F, 0x008F, ACPI_OSI_WIN_XP}, |
@@ -151,7 +152,7 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) | |||
151 | ACPI_ERROR((AE_INFO, | 152 | ACPI_ERROR((AE_INFO, |
152 | "Illegal I/O port address/length above 64K: 0x%p/%X", | 153 | "Illegal I/O port address/length above 64K: 0x%p/%X", |
153 | ACPI_CAST_PTR(void, address), byte_width)); | 154 | ACPI_CAST_PTR(void, address), byte_width)); |
154 | return_ACPI_STATUS(AE_AML_ILLEGAL_ADDRESS); | 155 | return_ACPI_STATUS(AE_LIMIT); |
155 | } | 156 | } |
156 | 157 | ||
157 | /* Exit if requested address is not within the protected port table */ | 158 | /* Exit if requested address is not within the protected port table */ |
@@ -178,11 +179,12 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) | |||
178 | /* Port illegality may depend on the _OSI calls made by the BIOS */ | 179 | /* Port illegality may depend on the _OSI calls made by the BIOS */ |
179 | 180 | ||
180 | if (acpi_gbl_osi_data >= port_info->osi_dependency) { | 181 | if (acpi_gbl_osi_data >= port_info->osi_dependency) { |
181 | ACPI_ERROR((AE_INFO, | 182 | ACPI_DEBUG_PRINT((ACPI_DB_IO, |
182 | "Denied AML access to port 0x%p/%X (%s 0x%.4X-0x%.4X)", | 183 | "Denied AML access to port 0x%p/%X (%s 0x%.4X-0x%.4X)", |
183 | ACPI_CAST_PTR(void, address), | 184 | ACPI_CAST_PTR(void, address), |
184 | byte_width, port_info->name, | 185 | byte_width, port_info->name, |
185 | port_info->start, port_info->end)); | 186 | port_info->start, |
187 | port_info->end)); | ||
186 | 188 | ||
187 | return_ACPI_STATUS(AE_AML_ILLEGAL_ADDRESS); | 189 | return_ACPI_STATUS(AE_AML_ILLEGAL_ADDRESS); |
188 | } | 190 | } |
@@ -206,7 +208,7 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) | |||
206 | * Value Where value is placed | 208 | * Value Where value is placed |
207 | * Width Number of bits | 209 | * Width Number of bits |
208 | * | 210 | * |
209 | * RETURN: Value read from port | 211 | * RETURN: Status and value read from port |
210 | * | 212 | * |
211 | * DESCRIPTION: Read data from an I/O port or register. This is a front-end | 213 | * DESCRIPTION: Read data from an I/O port or register. This is a front-end |
212 | * to acpi_os_read_port that performs validation on both the port | 214 | * to acpi_os_read_port that performs validation on both the port |
@@ -217,14 +219,43 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) | |||
217 | acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width) | 219 | acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width) |
218 | { | 220 | { |
219 | acpi_status status; | 221 | acpi_status status; |
222 | u32 one_byte; | ||
223 | u32 i; | ||
224 | |||
225 | /* Validate the entire request and perform the I/O */ | ||
220 | 226 | ||
221 | status = acpi_hw_validate_io_request(address, width); | 227 | status = acpi_hw_validate_io_request(address, width); |
222 | if (ACPI_FAILURE(status)) { | 228 | if (ACPI_SUCCESS(status)) { |
229 | status = acpi_os_read_port(address, value, width); | ||
223 | return status; | 230 | return status; |
224 | } | 231 | } |
225 | 232 | ||
226 | status = acpi_os_read_port(address, value, width); | 233 | if (status != AE_AML_ILLEGAL_ADDRESS) { |
227 | return status; | 234 | return status; |
235 | } | ||
236 | |||
237 | /* | ||
238 | * There has been a protection violation within the request. Fall | ||
239 | * back to byte granularity port I/O and ignore the failing bytes. | ||
240 | * This provides Windows compatibility. | ||
241 | */ | ||
242 | for (i = 0, *value = 0; i < width; i += 8) { | ||
243 | |||
244 | /* Validate and read one byte */ | ||
245 | |||
246 | if (acpi_hw_validate_io_request(address, 8) == AE_OK) { | ||
247 | status = acpi_os_read_port(address, &one_byte, 8); | ||
248 | if (ACPI_FAILURE(status)) { | ||
249 | return status; | ||
250 | } | ||
251 | |||
252 | *value |= (one_byte << i); | ||
253 | } | ||
254 | |||
255 | address++; | ||
256 | } | ||
257 | |||
258 | return AE_OK; | ||
228 | } | 259 | } |
229 | 260 | ||
230 | /****************************************************************************** | 261 | /****************************************************************************** |
@@ -235,7 +266,7 @@ acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width) | |||
235 | * Value Value to write | 266 | * Value Value to write |
236 | * Width Number of bits | 267 | * Width Number of bits |
237 | * | 268 | * |
238 | * RETURN: None | 269 | * RETURN: Status |
239 | * | 270 | * |
240 | * DESCRIPTION: Write data to an I/O port or register. This is a front-end | 271 | * DESCRIPTION: Write data to an I/O port or register. This is a front-end |
241 | * to acpi_os_write_port that performs validation on both the port | 272 | * to acpi_os_write_port that performs validation on both the port |
@@ -246,12 +277,39 @@ acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width) | |||
246 | acpi_status acpi_hw_write_port(acpi_io_address address, u32 value, u32 width) | 277 | acpi_status acpi_hw_write_port(acpi_io_address address, u32 value, u32 width) |
247 | { | 278 | { |
248 | acpi_status status; | 279 | acpi_status status; |
280 | u32 i; | ||
281 | |||
282 | /* Validate the entire request and perform the I/O */ | ||
249 | 283 | ||
250 | status = acpi_hw_validate_io_request(address, width); | 284 | status = acpi_hw_validate_io_request(address, width); |
251 | if (ACPI_FAILURE(status)) { | 285 | if (ACPI_SUCCESS(status)) { |
286 | status = acpi_os_write_port(address, value, width); | ||
252 | return status; | 287 | return status; |
253 | } | 288 | } |
254 | 289 | ||
255 | status = acpi_os_write_port(address, value, width); | 290 | if (status != AE_AML_ILLEGAL_ADDRESS) { |
256 | return status; | 291 | return status; |
292 | } | ||
293 | |||
294 | /* | ||
295 | * There has been a protection violation within the request. Fall | ||
296 | * back to byte granularity port I/O and ignore the failing bytes. | ||
297 | * This provides Windows compatibility. | ||
298 | */ | ||
299 | for (i = 0; i < width; i += 8) { | ||
300 | |||
301 | /* Validate and write one byte */ | ||
302 | |||
303 | if (acpi_hw_validate_io_request(address, 8) == AE_OK) { | ||
304 | status = | ||
305 | acpi_os_write_port(address, (value >> i) & 0xFF, 8); | ||
306 | if (ACPI_FAILURE(status)) { | ||
307 | return status; | ||
308 | } | ||
309 | } | ||
310 | |||
311 | address++; | ||
312 | } | ||
313 | |||
314 | return AE_OK; | ||
257 | } | 315 | } |
diff --git a/drivers/acpi/acpica/rscreate.c b/drivers/acpi/acpica/rscreate.c index 663f692fffc..a3c23d686d5 100644 --- a/drivers/acpi/acpica/rscreate.c +++ b/drivers/acpi/acpica/rscreate.c | |||
@@ -191,8 +191,6 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object, | |||
191 | user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer); | 191 | user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer); |
192 | 192 | ||
193 | for (index = 0; index < number_of_elements; index++) { | 193 | for (index = 0; index < number_of_elements; index++) { |
194 | int source_name_index = 2; | ||
195 | int source_index_index = 3; | ||
196 | 194 | ||
197 | /* | 195 | /* |
198 | * Point user_prt past this current structure | 196 | * Point user_prt past this current structure |
@@ -261,27 +259,6 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object, | |||
261 | return_ACPI_STATUS(AE_BAD_DATA); | 259 | return_ACPI_STATUS(AE_BAD_DATA); |
262 | } | 260 | } |
263 | 261 | ||
264 | /* | ||
265 | * If BIOS erroneously reversed the _PRT source_name and source_index, | ||
266 | * then reverse them back. | ||
267 | */ | ||
268 | if ((sub_object_list[3])->common.type != | ||
269 | ACPI_TYPE_INTEGER) { | ||
270 | if (acpi_gbl_enable_interpreter_slack) { | ||
271 | source_name_index = 3; | ||
272 | source_index_index = 2; | ||
273 | printk(KERN_WARNING | ||
274 | "ACPI: Handling Garbled _PRT entry\n"); | ||
275 | } else { | ||
276 | ACPI_ERROR((AE_INFO, | ||
277 | "(PRT[%X].source_index) Need Integer, found %s", | ||
278 | index, | ||
279 | acpi_ut_get_object_type_name | ||
280 | (sub_object_list[3]))); | ||
281 | return_ACPI_STATUS(AE_BAD_DATA); | ||
282 | } | ||
283 | } | ||
284 | |||
285 | user_prt->pin = (u32) obj_desc->integer.value; | 262 | user_prt->pin = (u32) obj_desc->integer.value; |
286 | 263 | ||
287 | /* | 264 | /* |
@@ -304,7 +281,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object, | |||
304 | * 3) Third subobject: Dereference the PRT.source_name | 281 | * 3) Third subobject: Dereference the PRT.source_name |
305 | * The name may be unresolved (slack mode), so allow a null object | 282 | * The name may be unresolved (slack mode), so allow a null object |
306 | */ | 283 | */ |
307 | obj_desc = sub_object_list[source_name_index]; | 284 | obj_desc = sub_object_list[2]; |
308 | if (obj_desc) { | 285 | if (obj_desc) { |
309 | switch (obj_desc->common.type) { | 286 | switch (obj_desc->common.type) { |
310 | case ACPI_TYPE_LOCAL_REFERENCE: | 287 | case ACPI_TYPE_LOCAL_REFERENCE: |
@@ -378,7 +355,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object, | |||
378 | 355 | ||
379 | /* 4) Fourth subobject: Dereference the PRT.source_index */ | 356 | /* 4) Fourth subobject: Dereference the PRT.source_index */ |
380 | 357 | ||
381 | obj_desc = sub_object_list[source_index_index]; | 358 | obj_desc = sub_object_list[3]; |
382 | if (obj_desc->common.type != ACPI_TYPE_INTEGER) { | 359 | if (obj_desc->common.type != ACPI_TYPE_INTEGER) { |
383 | ACPI_ERROR((AE_INFO, | 360 | ACPI_ERROR((AE_INFO, |
384 | "(PRT[%X].SourceIndex) Need Integer, found %s", | 361 | "(PRT[%X].SourceIndex) Need Integer, found %s", |
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c index d73c94b8441..9195deba9d9 100644 --- a/drivers/acpi/button.c +++ b/drivers/acpi/button.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * acpi_button.c - ACPI Button Driver ($Revision: 30 $) | 2 | * button.c - ACPI Button Driver |
3 | * | 3 | * |
4 | * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> | 4 | * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> |
5 | * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> | 5 | * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> |
@@ -41,17 +41,13 @@ | |||
41 | 41 | ||
42 | #define ACPI_BUTTON_SUBCLASS_POWER "power" | 42 | #define ACPI_BUTTON_SUBCLASS_POWER "power" |
43 | #define ACPI_BUTTON_HID_POWER "PNP0C0C" | 43 | #define ACPI_BUTTON_HID_POWER "PNP0C0C" |
44 | #define ACPI_BUTTON_DEVICE_NAME_POWER "Power Button (CM)" | 44 | #define ACPI_BUTTON_DEVICE_NAME_POWER "Power Button" |
45 | #define ACPI_BUTTON_DEVICE_NAME_POWERF "Power Button (FF)" | ||
46 | #define ACPI_BUTTON_TYPE_POWER 0x01 | 45 | #define ACPI_BUTTON_TYPE_POWER 0x01 |
47 | #define ACPI_BUTTON_TYPE_POWERF 0x02 | ||
48 | 46 | ||
49 | #define ACPI_BUTTON_SUBCLASS_SLEEP "sleep" | 47 | #define ACPI_BUTTON_SUBCLASS_SLEEP "sleep" |
50 | #define ACPI_BUTTON_HID_SLEEP "PNP0C0E" | 48 | #define ACPI_BUTTON_HID_SLEEP "PNP0C0E" |
51 | #define ACPI_BUTTON_DEVICE_NAME_SLEEP "Sleep Button (CM)" | 49 | #define ACPI_BUTTON_DEVICE_NAME_SLEEP "Sleep Button" |
52 | #define ACPI_BUTTON_DEVICE_NAME_SLEEPF "Sleep Button (FF)" | ||
53 | #define ACPI_BUTTON_TYPE_SLEEP 0x03 | 50 | #define ACPI_BUTTON_TYPE_SLEEP 0x03 |
54 | #define ACPI_BUTTON_TYPE_SLEEPF 0x04 | ||
55 | 51 | ||
56 | #define ACPI_BUTTON_SUBCLASS_LID "lid" | 52 | #define ACPI_BUTTON_SUBCLASS_LID "lid" |
57 | #define ACPI_BUTTON_HID_LID "PNP0C0D" | 53 | #define ACPI_BUTTON_HID_LID "PNP0C0D" |
@@ -95,7 +91,6 @@ static struct acpi_driver acpi_button_driver = { | |||
95 | }; | 91 | }; |
96 | 92 | ||
97 | struct acpi_button { | 93 | struct acpi_button { |
98 | struct acpi_device *device; /* Fixed button kludge */ | ||
99 | unsigned int type; | 94 | unsigned int type; |
100 | struct input_dev *input; | 95 | struct input_dev *input; |
101 | char phys[32]; /* for input device */ | 96 | char phys[32]; /* for input device */ |
@@ -126,14 +121,10 @@ static struct proc_dir_entry *acpi_button_dir; | |||
126 | 121 | ||
127 | static int acpi_button_info_seq_show(struct seq_file *seq, void *offset) | 122 | static int acpi_button_info_seq_show(struct seq_file *seq, void *offset) |
128 | { | 123 | { |
129 | struct acpi_button *button = seq->private; | 124 | struct acpi_device *device = seq->private; |
130 | |||
131 | if (!button || !button->device) | ||
132 | return 0; | ||
133 | 125 | ||
134 | seq_printf(seq, "type: %s\n", | 126 | seq_printf(seq, "type: %s\n", |
135 | acpi_device_name(button->device)); | 127 | acpi_device_name(device)); |
136 | |||
137 | return 0; | 128 | return 0; |
138 | } | 129 | } |
139 | 130 | ||
@@ -144,14 +135,11 @@ static int acpi_button_info_open_fs(struct inode *inode, struct file *file) | |||
144 | 135 | ||
145 | static int acpi_button_state_seq_show(struct seq_file *seq, void *offset) | 136 | static int acpi_button_state_seq_show(struct seq_file *seq, void *offset) |
146 | { | 137 | { |
147 | struct acpi_button *button = seq->private; | 138 | struct acpi_device *device = seq->private; |
148 | acpi_status status; | 139 | acpi_status status; |
149 | unsigned long long state; | 140 | unsigned long long state; |
150 | 141 | ||
151 | if (!button || !button->device) | 142 | status = acpi_evaluate_integer(device->handle, "_LID", NULL, &state); |
152 | return 0; | ||
153 | |||
154 | status = acpi_evaluate_integer(button->device->handle, "_LID", NULL, &state); | ||
155 | seq_printf(seq, "state: %s\n", | 143 | seq_printf(seq, "state: %s\n", |
156 | ACPI_FAILURE(status) ? "unsupported" : | 144 | ACPI_FAILURE(status) ? "unsupported" : |
157 | (state ? "open" : "closed")); | 145 | (state ? "open" : "closed")); |
@@ -169,24 +157,17 @@ static struct proc_dir_entry *acpi_lid_dir; | |||
169 | 157 | ||
170 | static int acpi_button_add_fs(struct acpi_device *device) | 158 | static int acpi_button_add_fs(struct acpi_device *device) |
171 | { | 159 | { |
160 | struct acpi_button *button = acpi_driver_data(device); | ||
172 | struct proc_dir_entry *entry = NULL; | 161 | struct proc_dir_entry *entry = NULL; |
173 | struct acpi_button *button; | ||
174 | |||
175 | if (!device || !acpi_driver_data(device)) | ||
176 | return -EINVAL; | ||
177 | |||
178 | button = acpi_driver_data(device); | ||
179 | 162 | ||
180 | switch (button->type) { | 163 | switch (button->type) { |
181 | case ACPI_BUTTON_TYPE_POWER: | 164 | case ACPI_BUTTON_TYPE_POWER: |
182 | case ACPI_BUTTON_TYPE_POWERF: | ||
183 | if (!acpi_power_dir) | 165 | if (!acpi_power_dir) |
184 | acpi_power_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_POWER, | 166 | acpi_power_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_POWER, |
185 | acpi_button_dir); | 167 | acpi_button_dir); |
186 | entry = acpi_power_dir; | 168 | entry = acpi_power_dir; |
187 | break; | 169 | break; |
188 | case ACPI_BUTTON_TYPE_SLEEP: | 170 | case ACPI_BUTTON_TYPE_SLEEP: |
189 | case ACPI_BUTTON_TYPE_SLEEPF: | ||
190 | if (!acpi_sleep_dir) | 171 | if (!acpi_sleep_dir) |
191 | acpi_sleep_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_SLEEP, | 172 | acpi_sleep_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_SLEEP, |
192 | acpi_button_dir); | 173 | acpi_button_dir); |
@@ -210,8 +191,7 @@ static int acpi_button_add_fs(struct acpi_device *device) | |||
210 | /* 'info' [R] */ | 191 | /* 'info' [R] */ |
211 | entry = proc_create_data(ACPI_BUTTON_FILE_INFO, | 192 | entry = proc_create_data(ACPI_BUTTON_FILE_INFO, |
212 | S_IRUGO, acpi_device_dir(device), | 193 | S_IRUGO, acpi_device_dir(device), |
213 | &acpi_button_info_fops, | 194 | &acpi_button_info_fops, device); |
214 | acpi_driver_data(device)); | ||
215 | if (!entry) | 195 | if (!entry) |
216 | return -ENODEV; | 196 | return -ENODEV; |
217 | 197 | ||
@@ -219,8 +199,7 @@ static int acpi_button_add_fs(struct acpi_device *device) | |||
219 | if (button->type == ACPI_BUTTON_TYPE_LID) { | 199 | if (button->type == ACPI_BUTTON_TYPE_LID) { |
220 | entry = proc_create_data(ACPI_BUTTON_FILE_STATE, | 200 | entry = proc_create_data(ACPI_BUTTON_FILE_STATE, |
221 | S_IRUGO, acpi_device_dir(device), | 201 | S_IRUGO, acpi_device_dir(device), |
222 | &acpi_button_state_fops, | 202 | &acpi_button_state_fops, device); |
223 | acpi_driver_data(device)); | ||
224 | if (!entry) | 203 | if (!entry) |
225 | return -ENODEV; | 204 | return -ENODEV; |
226 | } | 205 | } |
@@ -250,15 +229,16 @@ static int acpi_button_remove_fs(struct acpi_device *device) | |||
250 | /* -------------------------------------------------------------------------- | 229 | /* -------------------------------------------------------------------------- |
251 | Driver Interface | 230 | Driver Interface |
252 | -------------------------------------------------------------------------- */ | 231 | -------------------------------------------------------------------------- */ |
253 | static int acpi_lid_send_state(struct acpi_button *button) | 232 | static int acpi_lid_send_state(struct acpi_device *device) |
254 | { | 233 | { |
234 | struct acpi_button *button = acpi_driver_data(device); | ||
255 | unsigned long long state; | 235 | unsigned long long state; |
256 | acpi_status status; | 236 | acpi_status status; |
257 | 237 | ||
258 | status = acpi_evaluate_integer(button->device->handle, "_LID", NULL, | 238 | status = acpi_evaluate_integer(device->handle, "_LID", NULL, &state); |
259 | &state); | ||
260 | if (ACPI_FAILURE(status)) | 239 | if (ACPI_FAILURE(status)) |
261 | return -ENODEV; | 240 | return -ENODEV; |
241 | |||
262 | /* input layer checks if event is redundant */ | 242 | /* input layer checks if event is redundant */ |
263 | input_report_switch(button->input, SW_LID, !state); | 243 | input_report_switch(button->input, SW_LID, !state); |
264 | input_sync(button->input); | 244 | input_sync(button->input); |
@@ -270,9 +250,6 @@ static void acpi_button_notify(struct acpi_device *device, u32 event) | |||
270 | struct acpi_button *button = acpi_driver_data(device); | 250 | struct acpi_button *button = acpi_driver_data(device); |
271 | struct input_dev *input; | 251 | struct input_dev *input; |
272 | 252 | ||
273 | if (!button || !button->device) | ||
274 | return; | ||
275 | |||
276 | switch (event) { | 253 | switch (event) { |
277 | case ACPI_FIXED_HARDWARE_EVENT: | 254 | case ACPI_FIXED_HARDWARE_EVENT: |
278 | event = ACPI_BUTTON_NOTIFY_STATUS; | 255 | event = ACPI_BUTTON_NOTIFY_STATUS; |
@@ -280,7 +257,7 @@ static void acpi_button_notify(struct acpi_device *device, u32 event) | |||
280 | case ACPI_BUTTON_NOTIFY_STATUS: | 257 | case ACPI_BUTTON_NOTIFY_STATUS: |
281 | input = button->input; | 258 | input = button->input; |
282 | if (button->type == ACPI_BUTTON_TYPE_LID) { | 259 | if (button->type == ACPI_BUTTON_TYPE_LID) { |
283 | acpi_lid_send_state(button); | 260 | acpi_lid_send_state(device); |
284 | } else { | 261 | } else { |
285 | int keycode = test_bit(KEY_SLEEP, input->keybit) ? | 262 | int keycode = test_bit(KEY_SLEEP, input->keybit) ? |
286 | KEY_SLEEP : KEY_POWER; | 263 | KEY_SLEEP : KEY_POWER; |
@@ -291,43 +268,35 @@ static void acpi_button_notify(struct acpi_device *device, u32 event) | |||
291 | input_sync(input); | 268 | input_sync(input); |
292 | } | 269 | } |
293 | 270 | ||
294 | acpi_bus_generate_proc_event(button->device, event, | 271 | acpi_bus_generate_proc_event(device, event, ++button->pushed); |
295 | ++button->pushed); | ||
296 | break; | 272 | break; |
297 | default: | 273 | default: |
298 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 274 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
299 | "Unsupported event [0x%x]\n", event)); | 275 | "Unsupported event [0x%x]\n", event)); |
300 | break; | 276 | break; |
301 | } | 277 | } |
302 | |||
303 | return; | ||
304 | } | 278 | } |
305 | 279 | ||
306 | static int acpi_button_resume(struct acpi_device *device) | 280 | static int acpi_button_resume(struct acpi_device *device) |
307 | { | 281 | { |
308 | struct acpi_button *button; | 282 | struct acpi_button *button = acpi_driver_data(device); |
309 | if (!device) | 283 | |
310 | return -EINVAL; | 284 | if (button->type == ACPI_BUTTON_TYPE_LID) |
311 | button = acpi_driver_data(device); | 285 | return acpi_lid_send_state(device); |
312 | if (button && button->type == ACPI_BUTTON_TYPE_LID) | ||
313 | return acpi_lid_send_state(button); | ||
314 | return 0; | 286 | return 0; |
315 | } | 287 | } |
316 | 288 | ||
317 | static int acpi_button_add(struct acpi_device *device) | 289 | static int acpi_button_add(struct acpi_device *device) |
318 | { | 290 | { |
319 | int error; | ||
320 | struct acpi_button *button; | 291 | struct acpi_button *button; |
321 | struct input_dev *input; | 292 | struct input_dev *input; |
322 | 293 | char *hid, *name, *class; | |
323 | if (!device) | 294 | int error; |
324 | return -EINVAL; | ||
325 | 295 | ||
326 | button = kzalloc(sizeof(struct acpi_button), GFP_KERNEL); | 296 | button = kzalloc(sizeof(struct acpi_button), GFP_KERNEL); |
327 | if (!button) | 297 | if (!button) |
328 | return -ENOMEM; | 298 | return -ENOMEM; |
329 | 299 | ||
330 | button->device = device; | ||
331 | device->driver_data = button; | 300 | device->driver_data = button; |
332 | 301 | ||
333 | button->input = input = input_allocate_device(); | 302 | button->input = input = input_allocate_device(); |
@@ -336,40 +305,29 @@ static int acpi_button_add(struct acpi_device *device) | |||
336 | goto err_free_button; | 305 | goto err_free_button; |
337 | } | 306 | } |
338 | 307 | ||
339 | /* | 308 | hid = acpi_device_hid(device); |
340 | * Determine the button type (via hid), as fixed-feature buttons | 309 | name = acpi_device_name(device); |
341 | * need to be handled a bit differently than generic-space. | 310 | class = acpi_device_class(device); |
342 | */ | 311 | |
343 | if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_POWER)) { | 312 | if (!strcmp(hid, ACPI_BUTTON_HID_POWER) || |
313 | !strcmp(hid, ACPI_BUTTON_HID_POWERF)) { | ||
344 | button->type = ACPI_BUTTON_TYPE_POWER; | 314 | button->type = ACPI_BUTTON_TYPE_POWER; |
345 | strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_POWER); | 315 | strcpy(name, ACPI_BUTTON_DEVICE_NAME_POWER); |
346 | sprintf(acpi_device_class(device), "%s/%s", | 316 | sprintf(class, "%s/%s", |
347 | ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER); | ||
348 | } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_POWERF)) { | ||
349 | button->type = ACPI_BUTTON_TYPE_POWERF; | ||
350 | strcpy(acpi_device_name(device), | ||
351 | ACPI_BUTTON_DEVICE_NAME_POWERF); | ||
352 | sprintf(acpi_device_class(device), "%s/%s", | ||
353 | ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER); | 317 | ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER); |
354 | } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEP)) { | 318 | } else if (!strcmp(hid, ACPI_BUTTON_HID_SLEEP) || |
319 | !strcmp(hid, ACPI_BUTTON_HID_SLEEPF)) { | ||
355 | button->type = ACPI_BUTTON_TYPE_SLEEP; | 320 | button->type = ACPI_BUTTON_TYPE_SLEEP; |
356 | strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_SLEEP); | 321 | strcpy(name, ACPI_BUTTON_DEVICE_NAME_SLEEP); |
357 | sprintf(acpi_device_class(device), "%s/%s", | 322 | sprintf(class, "%s/%s", |
358 | ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP); | ||
359 | } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEPF)) { | ||
360 | button->type = ACPI_BUTTON_TYPE_SLEEPF; | ||
361 | strcpy(acpi_device_name(device), | ||
362 | ACPI_BUTTON_DEVICE_NAME_SLEEPF); | ||
363 | sprintf(acpi_device_class(device), "%s/%s", | ||
364 | ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP); | 323 | ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP); |
365 | } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_LID)) { | 324 | } else if (!strcmp(hid, ACPI_BUTTON_HID_LID)) { |
366 | button->type = ACPI_BUTTON_TYPE_LID; | 325 | button->type = ACPI_BUTTON_TYPE_LID; |
367 | strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_LID); | 326 | strcpy(name, ACPI_BUTTON_DEVICE_NAME_LID); |
368 | sprintf(acpi_device_class(device), "%s/%s", | 327 | sprintf(class, "%s/%s", |
369 | ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_LID); | 328 | ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_LID); |
370 | } else { | 329 | } else { |
371 | printk(KERN_ERR PREFIX "Unsupported hid [%s]\n", | 330 | printk(KERN_ERR PREFIX "Unsupported hid [%s]\n", hid); |
372 | acpi_device_hid(device)); | ||
373 | error = -ENODEV; | 331 | error = -ENODEV; |
374 | goto err_free_input; | 332 | goto err_free_input; |
375 | } | 333 | } |
@@ -378,10 +336,9 @@ static int acpi_button_add(struct acpi_device *device) | |||
378 | if (error) | 336 | if (error) |
379 | goto err_free_input; | 337 | goto err_free_input; |
380 | 338 | ||
381 | snprintf(button->phys, sizeof(button->phys), | 339 | snprintf(button->phys, sizeof(button->phys), "%s/button/input0", hid); |
382 | "%s/button/input0", acpi_device_hid(device)); | ||
383 | 340 | ||
384 | input->name = acpi_device_name(device); | 341 | input->name = name; |
385 | input->phys = button->phys; | 342 | input->phys = button->phys; |
386 | input->id.bustype = BUS_HOST; | 343 | input->id.bustype = BUS_HOST; |
387 | input->id.product = button->type; | 344 | input->id.product = button->type; |
@@ -389,13 +346,11 @@ static int acpi_button_add(struct acpi_device *device) | |||
389 | 346 | ||
390 | switch (button->type) { | 347 | switch (button->type) { |
391 | case ACPI_BUTTON_TYPE_POWER: | 348 | case ACPI_BUTTON_TYPE_POWER: |
392 | case ACPI_BUTTON_TYPE_POWERF: | ||
393 | input->evbit[0] = BIT_MASK(EV_KEY); | 349 | input->evbit[0] = BIT_MASK(EV_KEY); |
394 | set_bit(KEY_POWER, input->keybit); | 350 | set_bit(KEY_POWER, input->keybit); |
395 | break; | 351 | break; |
396 | 352 | ||
397 | case ACPI_BUTTON_TYPE_SLEEP: | 353 | case ACPI_BUTTON_TYPE_SLEEP: |
398 | case ACPI_BUTTON_TYPE_SLEEPF: | ||
399 | input->evbit[0] = BIT_MASK(EV_KEY); | 354 | input->evbit[0] = BIT_MASK(EV_KEY); |
400 | set_bit(KEY_SLEEP, input->keybit); | 355 | set_bit(KEY_SLEEP, input->keybit); |
401 | break; | 356 | break; |
@@ -410,7 +365,7 @@ static int acpi_button_add(struct acpi_device *device) | |||
410 | if (error) | 365 | if (error) |
411 | goto err_remove_fs; | 366 | goto err_remove_fs; |
412 | if (button->type == ACPI_BUTTON_TYPE_LID) | 367 | if (button->type == ACPI_BUTTON_TYPE_LID) |
413 | acpi_lid_send_state(button); | 368 | acpi_lid_send_state(device); |
414 | 369 | ||
415 | if (device->wakeup.flags.valid) { | 370 | if (device->wakeup.flags.valid) { |
416 | /* Button's GPE is run-wake GPE */ | 371 | /* Button's GPE is run-wake GPE */ |
@@ -422,9 +377,7 @@ static int acpi_button_add(struct acpi_device *device) | |||
422 | device->wakeup.state.enabled = 1; | 377 | device->wakeup.state.enabled = 1; |
423 | } | 378 | } |
424 | 379 | ||
425 | printk(KERN_INFO PREFIX "%s [%s]\n", | 380 | printk(KERN_INFO PREFIX "%s [%s]\n", name, acpi_device_bid(device)); |
426 | acpi_device_name(device), acpi_device_bid(device)); | ||
427 | |||
428 | return 0; | 381 | return 0; |
429 | 382 | ||
430 | err_remove_fs: | 383 | err_remove_fs: |
@@ -438,17 +391,11 @@ static int acpi_button_add(struct acpi_device *device) | |||
438 | 391 | ||
439 | static int acpi_button_remove(struct acpi_device *device, int type) | 392 | static int acpi_button_remove(struct acpi_device *device, int type) |
440 | { | 393 | { |
441 | struct acpi_button *button; | 394 | struct acpi_button *button = acpi_driver_data(device); |
442 | |||
443 | if (!device || !acpi_driver_data(device)) | ||
444 | return -EINVAL; | ||
445 | |||
446 | button = acpi_driver_data(device); | ||
447 | 395 | ||
448 | acpi_button_remove_fs(device); | 396 | acpi_button_remove_fs(device); |
449 | input_unregister_device(button->input); | 397 | input_unregister_device(button->input); |
450 | kfree(button); | 398 | kfree(button); |
451 | |||
452 | return 0; | 399 | return 0; |
453 | } | 400 | } |
454 | 401 | ||
@@ -459,6 +406,7 @@ static int __init acpi_button_init(void) | |||
459 | acpi_button_dir = proc_mkdir(ACPI_BUTTON_CLASS, acpi_root_dir); | 406 | acpi_button_dir = proc_mkdir(ACPI_BUTTON_CLASS, acpi_root_dir); |
460 | if (!acpi_button_dir) | 407 | if (!acpi_button_dir) |
461 | return -ENODEV; | 408 | return -ENODEV; |
409 | |||
462 | result = acpi_bus_register_driver(&acpi_button_driver); | 410 | result = acpi_bus_register_driver(&acpi_button_driver); |
463 | if (result < 0) { | 411 | if (result < 0) { |
464 | remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir); | 412 | remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir); |
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 04e90443eff..391f331674c 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
@@ -1065,6 +1065,7 @@ static int acpi_ec_resume(struct acpi_device *device) | |||
1065 | struct acpi_ec *ec = acpi_driver_data(device); | 1065 | struct acpi_ec *ec = acpi_driver_data(device); |
1066 | /* Enable use of GPE back */ | 1066 | /* Enable use of GPE back */ |
1067 | clear_bit(EC_FLAGS_NO_GPE, &ec->flags); | 1067 | clear_bit(EC_FLAGS_NO_GPE, &ec->flags); |
1068 | set_bit(EC_FLAGS_GPE_MODE, &ec->flags); | ||
1068 | acpi_enable_gpe(NULL, ec->gpe); | 1069 | acpi_enable_gpe(NULL, ec->gpe); |
1069 | return 0; | 1070 | return 0; |
1070 | } | 1071 | } |
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index d59f08ecaf1..d916bea729f 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -353,8 +353,10 @@ static irqreturn_t acpi_irq(int irq, void *dev_id) | |||
353 | if (handled) { | 353 | if (handled) { |
354 | acpi_irq_handled++; | 354 | acpi_irq_handled++; |
355 | return IRQ_HANDLED; | 355 | return IRQ_HANDLED; |
356 | } else | 356 | } else { |
357 | acpi_irq_not_handled++; | ||
357 | return IRQ_NONE; | 358 | return IRQ_NONE; |
359 | } | ||
358 | } | 360 | } |
359 | 361 | ||
360 | acpi_status | 362 | acpi_status |
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 6fe121434ff..f7ca8c55956 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
@@ -581,6 +581,11 @@ static int acpi_processor_power_verify(struct acpi_processor *pr) | |||
581 | for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { | 581 | for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { |
582 | struct acpi_processor_cx *cx = &pr->power.states[i]; | 582 | struct acpi_processor_cx *cx = &pr->power.states[i]; |
583 | 583 | ||
584 | #if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86) | ||
585 | /* TSC could halt in idle, so notify users */ | ||
586 | if (tsc_halts_in_c(cx->type)) | ||
587 | mark_tsc_unstable("TSC halts in idle");; | ||
588 | #endif | ||
584 | switch (cx->type) { | 589 | switch (cx->type) { |
585 | case ACPI_STATE_C1: | 590 | case ACPI_STATE_C1: |
586 | cx->valid = 1; | 591 | cx->valid = 1; |
@@ -657,11 +662,9 @@ static int acpi_processor_power_seq_show(struct seq_file *seq, void *offset) | |||
657 | 662 | ||
658 | seq_printf(seq, "active state: C%zd\n" | 663 | seq_printf(seq, "active state: C%zd\n" |
659 | "max_cstate: C%d\n" | 664 | "max_cstate: C%d\n" |
660 | "bus master activity: %08x\n" | ||
661 | "maximum allowed latency: %d usec\n", | 665 | "maximum allowed latency: %d usec\n", |
662 | pr->power.state ? pr->power.state - pr->power.states : 0, | 666 | pr->power.state ? pr->power.state - pr->power.states : 0, |
663 | max_cstate, (unsigned)pr->power.bm_activity, | 667 | max_cstate, pm_qos_requirement(PM_QOS_CPU_DMA_LATENCY)); |
664 | pm_qos_requirement(PM_QOS_CPU_DMA_LATENCY)); | ||
665 | 668 | ||
666 | seq_puts(seq, "states:\n"); | 669 | seq_puts(seq, "states:\n"); |
667 | 670 | ||
@@ -871,11 +874,6 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev, | |||
871 | kt2 = ktime_get_real(); | 874 | kt2 = ktime_get_real(); |
872 | idle_time = ktime_to_us(ktime_sub(kt2, kt1)); | 875 | idle_time = ktime_to_us(ktime_sub(kt2, kt1)); |
873 | 876 | ||
874 | #if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86) | ||
875 | /* TSC could halt in idle, so notify users */ | ||
876 | if (tsc_halts_in_c(cx->type)) | ||
877 | mark_tsc_unstable("TSC halts in idle");; | ||
878 | #endif | ||
879 | sleep_ticks = us_to_pm_timer_ticks(idle_time); | 877 | sleep_ticks = us_to_pm_timer_ticks(idle_time); |
880 | 878 | ||
881 | /* Tell the scheduler how much we idled: */ | 879 | /* Tell the scheduler how much we idled: */ |
@@ -955,6 +953,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev, | |||
955 | */ | 953 | */ |
956 | acpi_state_timer_broadcast(pr, cx, 1); | 954 | acpi_state_timer_broadcast(pr, cx, 1); |
957 | 955 | ||
956 | kt1 = ktime_get_real(); | ||
958 | /* | 957 | /* |
959 | * disable bus master | 958 | * disable bus master |
960 | * bm_check implies we need ARB_DIS | 959 | * bm_check implies we need ARB_DIS |
@@ -976,10 +975,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev, | |||
976 | ACPI_FLUSH_CPU_CACHE(); | 975 | ACPI_FLUSH_CPU_CACHE(); |
977 | } | 976 | } |
978 | 977 | ||
979 | kt1 = ktime_get_real(); | ||
980 | acpi_idle_do_entry(cx); | 978 | acpi_idle_do_entry(cx); |
981 | kt2 = ktime_get_real(); | ||
982 | idle_time = ktime_to_us(ktime_sub(kt2, kt1)); | ||
983 | 979 | ||
984 | /* Re-enable bus master arbitration */ | 980 | /* Re-enable bus master arbitration */ |
985 | if (pr->flags.bm_check && pr->flags.bm_control) { | 981 | if (pr->flags.bm_check && pr->flags.bm_control) { |
@@ -988,12 +984,9 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev, | |||
988 | c3_cpu_count--; | 984 | c3_cpu_count--; |
989 | spin_unlock(&c3_lock); | 985 | spin_unlock(&c3_lock); |
990 | } | 986 | } |
987 | kt2 = ktime_get_real(); | ||
988 | idle_time = ktime_to_us(ktime_sub(kt2, kt1)); | ||
991 | 989 | ||
992 | #if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86) | ||
993 | /* TSC could halt in idle, so notify users */ | ||
994 | if (tsc_halts_in_c(ACPI_STATE_C3)) | ||
995 | mark_tsc_unstable("TSC halts in idle"); | ||
996 | #endif | ||
997 | sleep_ticks = us_to_pm_timer_ticks(idle_time); | 990 | sleep_ticks = us_to_pm_timer_ticks(idle_time); |
998 | /* Tell the scheduler how much we idled: */ | 991 | /* Tell the scheduler how much we idled: */ |
999 | sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS); | 992 | sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS); |
@@ -1037,6 +1030,9 @@ static int acpi_processor_setup_cpuidle(struct acpi_processor *pr) | |||
1037 | dev->states[i].desc[0] = '\0'; | 1030 | dev->states[i].desc[0] = '\0'; |
1038 | } | 1031 | } |
1039 | 1032 | ||
1033 | if (max_cstate == 0) | ||
1034 | max_cstate = 1; | ||
1035 | |||
1040 | for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) { | 1036 | for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) { |
1041 | cx = &pr->power.states[i]; | 1037 | cx = &pr->power.states[i]; |
1042 | state = &dev->states[count]; | 1038 | state = &dev->states[count]; |
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index 779e4e500df..01574a06653 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c | |||
@@ -300,9 +300,9 @@ static int acpi_suspend_state_valid(suspend_state_t pm_state) | |||
300 | static struct platform_suspend_ops acpi_suspend_ops = { | 300 | static struct platform_suspend_ops acpi_suspend_ops = { |
301 | .valid = acpi_suspend_state_valid, | 301 | .valid = acpi_suspend_state_valid, |
302 | .begin = acpi_suspend_begin, | 302 | .begin = acpi_suspend_begin, |
303 | .prepare = acpi_pm_prepare, | 303 | .prepare_late = acpi_pm_prepare, |
304 | .enter = acpi_suspend_enter, | 304 | .enter = acpi_suspend_enter, |
305 | .finish = acpi_pm_finish, | 305 | .wake = acpi_pm_finish, |
306 | .end = acpi_pm_end, | 306 | .end = acpi_pm_end, |
307 | }; | 307 | }; |
308 | 308 | ||
@@ -328,9 +328,9 @@ static int acpi_suspend_begin_old(suspend_state_t pm_state) | |||
328 | static struct platform_suspend_ops acpi_suspend_ops_old = { | 328 | static struct platform_suspend_ops acpi_suspend_ops_old = { |
329 | .valid = acpi_suspend_state_valid, | 329 | .valid = acpi_suspend_state_valid, |
330 | .begin = acpi_suspend_begin_old, | 330 | .begin = acpi_suspend_begin_old, |
331 | .prepare = acpi_pm_disable_gpes, | 331 | .prepare_late = acpi_pm_disable_gpes, |
332 | .enter = acpi_suspend_enter, | 332 | .enter = acpi_suspend_enter, |
333 | .finish = acpi_pm_finish, | 333 | .wake = acpi_pm_finish, |
334 | .end = acpi_pm_end, | 334 | .end = acpi_pm_end, |
335 | .recover = acpi_pm_finish, | 335 | .recover = acpi_pm_finish, |
336 | }; | 336 | }; |
@@ -713,6 +713,32 @@ static void acpi_power_off(void) | |||
713 | acpi_enter_sleep_state(ACPI_STATE_S5); | 713 | acpi_enter_sleep_state(ACPI_STATE_S5); |
714 | } | 714 | } |
715 | 715 | ||
716 | /* | ||
717 | * ACPI 2.0 created the optional _GTS and _BFS, | ||
718 | * but industry adoption has been neither rapid nor broad. | ||
719 | * | ||
720 | * Linux gets into trouble when it executes poorly validated | ||
721 | * paths through the BIOS, so disable _GTS and _BFS by default, | ||
722 | * but do speak up and offer the option to enable them. | ||
723 | */ | ||
724 | void __init acpi_gts_bfs_check(void) | ||
725 | { | ||
726 | acpi_handle dummy; | ||
727 | |||
728 | if (ACPI_SUCCESS(acpi_get_handle(ACPI_ROOT_OBJECT, METHOD_NAME__GTS, &dummy))) | ||
729 | { | ||
730 | printk(KERN_NOTICE PREFIX "BIOS offers _GTS\n"); | ||
731 | printk(KERN_NOTICE PREFIX "If \"acpi.gts=1\" improves suspend, " | ||
732 | "please notify linux-acpi@vger.kernel.org\n"); | ||
733 | } | ||
734 | if (ACPI_SUCCESS(acpi_get_handle(ACPI_ROOT_OBJECT, METHOD_NAME__BFS, &dummy))) | ||
735 | { | ||
736 | printk(KERN_NOTICE PREFIX "BIOS offers _BFS\n"); | ||
737 | printk(KERN_NOTICE PREFIX "If \"acpi.bfs=1\" improves resume, " | ||
738 | "please notify linux-acpi@vger.kernel.org\n"); | ||
739 | } | ||
740 | } | ||
741 | |||
716 | int __init acpi_sleep_init(void) | 742 | int __init acpi_sleep_init(void) |
717 | { | 743 | { |
718 | acpi_status status; | 744 | acpi_status status; |
@@ -771,5 +797,6 @@ int __init acpi_sleep_init(void) | |||
771 | * object can also be evaluated when the system enters S5. | 797 | * object can also be evaluated when the system enters S5. |
772 | */ | 798 | */ |
773 | register_reboot_notifier(&tts_notifier); | 799 | register_reboot_notifier(&tts_notifier); |
800 | acpi_gts_bfs_check(); | ||
774 | return 0; | 801 | return 0; |
775 | } | 802 | } |
diff --git a/drivers/acpi/system.c b/drivers/acpi/system.c index da51f05ef8d..0944daec064 100644 --- a/drivers/acpi/system.c +++ b/drivers/acpi/system.c | |||
@@ -38,6 +38,7 @@ ACPI_MODULE_NAME("system"); | |||
38 | #define ACPI_SYSTEM_DEVICE_NAME "System" | 38 | #define ACPI_SYSTEM_DEVICE_NAME "System" |
39 | 39 | ||
40 | u32 acpi_irq_handled; | 40 | u32 acpi_irq_handled; |
41 | u32 acpi_irq_not_handled; | ||
41 | 42 | ||
42 | /* | 43 | /* |
43 | * Make ACPICA version work as module param | 44 | * Make ACPICA version work as module param |
@@ -214,8 +215,9 @@ err: | |||
214 | 215 | ||
215 | #define COUNT_GPE 0 | 216 | #define COUNT_GPE 0 |
216 | #define COUNT_SCI 1 /* acpi_irq_handled */ | 217 | #define COUNT_SCI 1 /* acpi_irq_handled */ |
217 | #define COUNT_ERROR 2 /* other */ | 218 | #define COUNT_SCI_NOT 2 /* acpi_irq_not_handled */ |
218 | #define NUM_COUNTERS_EXTRA 3 | 219 | #define COUNT_ERROR 3 /* other */ |
220 | #define NUM_COUNTERS_EXTRA 4 | ||
219 | 221 | ||
220 | struct event_counter { | 222 | struct event_counter { |
221 | u32 count; | 223 | u32 count; |
@@ -317,6 +319,8 @@ static ssize_t counter_show(struct kobject *kobj, | |||
317 | 319 | ||
318 | all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI].count = | 320 | all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI].count = |
319 | acpi_irq_handled; | 321 | acpi_irq_handled; |
322 | all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI_NOT].count = | ||
323 | acpi_irq_not_handled; | ||
320 | all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_GPE].count = | 324 | all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_GPE].count = |
321 | acpi_gpe_count; | 325 | acpi_gpe_count; |
322 | 326 | ||
@@ -363,6 +367,7 @@ static ssize_t counter_set(struct kobject *kobj, | |||
363 | all_counters[i].count = 0; | 367 | all_counters[i].count = 0; |
364 | acpi_gpe_count = 0; | 368 | acpi_gpe_count = 0; |
365 | acpi_irq_handled = 0; | 369 | acpi_irq_handled = 0; |
370 | acpi_irq_not_handled = 0; | ||
366 | goto end; | 371 | goto end; |
367 | } | 372 | } |
368 | 373 | ||
@@ -456,6 +461,8 @@ void acpi_irq_stats_init(void) | |||
456 | sprintf(buffer, "gpe_all"); | 461 | sprintf(buffer, "gpe_all"); |
457 | else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI) | 462 | else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI) |
458 | sprintf(buffer, "sci"); | 463 | sprintf(buffer, "sci"); |
464 | else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI_NOT) | ||
465 | sprintf(buffer, "sci_not"); | ||
459 | else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_ERROR) | 466 | else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_ERROR) |
460 | sprintf(buffer, "error"); | 467 | sprintf(buffer, "error"); |
461 | else | 468 | else |
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c index 9cd15e8c893..564ea142428 100644 --- a/drivers/acpi/thermal.c +++ b/drivers/acpi/thermal.c | |||
@@ -909,7 +909,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz) | |||
909 | thermal_zone_device_register("acpitz", trips, tz, | 909 | thermal_zone_device_register("acpitz", trips, tz, |
910 | &acpi_thermal_zone_ops, | 910 | &acpi_thermal_zone_ops, |
911 | 0, 0, 0, | 911 | 0, 0, 0, |
912 | tz->polling_frequency); | 912 | tz->polling_frequency*100); |
913 | if (IS_ERR(tz->thermal_zone)) | 913 | if (IS_ERR(tz->thermal_zone)) |
914 | return -ENODEV; | 914 | return -ENODEV; |
915 | 915 | ||
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index cd4fb7543a9..d7ff61c0d57 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c | |||
@@ -770,10 +770,12 @@ acpi_video_init_brightness(struct acpi_video_device *device) | |||
770 | * In this case, the first two elements in _BCL packages | 770 | * In this case, the first two elements in _BCL packages |
771 | * are also supported brightness levels that OS should take care of. | 771 | * are also supported brightness levels that OS should take care of. |
772 | */ | 772 | */ |
773 | for (i = 2; i < count; i++) | 773 | for (i = 2; i < count; i++) { |
774 | if (br->levels[i] == br->levels[0] || | 774 | if (br->levels[i] == br->levels[0]) |
775 | br->levels[i] == br->levels[1]) | ||
776 | level_ac_battery++; | 775 | level_ac_battery++; |
776 | if (br->levels[i] == br->levels[1]) | ||
777 | level_ac_battery++; | ||
778 | } | ||
777 | 779 | ||
778 | if (level_ac_battery < 2) { | 780 | if (level_ac_battery < 2) { |
779 | level_ac_battery = 2 - level_ac_battery; | 781 | level_ac_battery = 2 - level_ac_battery; |
@@ -807,12 +809,19 @@ acpi_video_init_brightness(struct acpi_video_device *device) | |||
807 | br->flags._BCM_use_index = br->flags._BCL_use_index; | 809 | br->flags._BCM_use_index = br->flags._BCL_use_index; |
808 | 810 | ||
809 | /* _BQC uses INDEX while _BCL uses VALUE in some laptops */ | 811 | /* _BQC uses INDEX while _BCL uses VALUE in some laptops */ |
810 | br->curr = max_level; | 812 | br->curr = level_old = max_level; |
813 | |||
814 | if (!device->cap._BQC) | ||
815 | goto set_level; | ||
816 | |||
811 | result = acpi_video_device_lcd_get_level_current(device, &level_old); | 817 | result = acpi_video_device_lcd_get_level_current(device, &level_old); |
812 | if (result) | 818 | if (result) |
813 | goto out_free_levels; | 819 | goto out_free_levels; |
814 | 820 | ||
815 | result = acpi_video_device_lcd_set_level(device, br->curr); | 821 | /* |
822 | * Set the level to maximum and check if _BQC uses indexed value | ||
823 | */ | ||
824 | result = acpi_video_device_lcd_set_level(device, max_level); | ||
816 | if (result) | 825 | if (result) |
817 | goto out_free_levels; | 826 | goto out_free_levels; |
818 | 827 | ||
@@ -820,25 +829,19 @@ acpi_video_init_brightness(struct acpi_video_device *device) | |||
820 | if (result) | 829 | if (result) |
821 | goto out_free_levels; | 830 | goto out_free_levels; |
822 | 831 | ||
823 | if ((level != level_old) && !br->flags._BCM_use_index) { | 832 | br->flags._BQC_use_index = (level == max_level ? 0 : 1); |
824 | /* Note: | 833 | |
825 | * This piece of code does not work correctly if the current | 834 | if (!br->flags._BQC_use_index) |
826 | * brightness levels is 0. | 835 | goto set_level; |
827 | * But I guess boxes that boot with such a dark screen are rare | 836 | |
828 | * and no more code is needed to cover this specifial case. | 837 | if (br->flags._BCL_reversed) |
829 | */ | 838 | level_old = (br->count - 1) - level_old; |
830 | 839 | level_old = br->levels[level_old]; | |
831 | if (level_ac_battery != 2) { | 840 | |
832 | /* | 841 | set_level: |
833 | * For now, we don't support the _BCL like this: | 842 | result = acpi_video_device_lcd_set_level(device, level_old); |
834 | * 16, 15, 0, 1, 2, 3, ..., 14, 15, 16 | 843 | if (result) |
835 | * because we may mess up the index returned by _BQC. | 844 | goto out_free_levels; |
836 | * Plus: we have not got a box like this. | ||
837 | */ | ||
838 | ACPI_ERROR((AE_INFO, "_BCL not supported\n")); | ||
839 | } | ||
840 | br->flags._BQC_use_index = 1; | ||
841 | } | ||
842 | 845 | ||
843 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 846 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
844 | "found %d brightness levels\n", count - 2)); | 847 | "found %d brightness levels\n", count - 2)); |
@@ -2293,7 +2296,7 @@ static int __init acpi_video_init(void) | |||
2293 | return acpi_video_register(); | 2296 | return acpi_video_register(); |
2294 | } | 2297 | } |
2295 | 2298 | ||
2296 | static void __exit acpi_video_exit(void) | 2299 | void __exit acpi_video_exit(void) |
2297 | { | 2300 | { |
2298 | 2301 | ||
2299 | acpi_bus_unregister_driver(&acpi_video_bus); | 2302 | acpi_bus_unregister_driver(&acpi_video_bus); |
@@ -2302,6 +2305,7 @@ static void __exit acpi_video_exit(void) | |||
2302 | 2305 | ||
2303 | return; | 2306 | return; |
2304 | } | 2307 | } |
2308 | EXPORT_SYMBOL(acpi_video_exit); | ||
2305 | 2309 | ||
2306 | module_init(acpi_video_init); | 2310 | module_init(acpi_video_init); |
2307 | module_exit(acpi_video_exit); | 2311 | module_exit(acpi_video_exit); |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 065507c4664..17c5d48a75d 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -1231,6 +1231,9 @@ unsigned int ata_dev_classify(const struct ata_taskfile *tf) | |||
1231 | * | 1231 | * |
1232 | * We follow the current spec and consider that 0x69/0x96 | 1232 | * We follow the current spec and consider that 0x69/0x96 |
1233 | * identifies a port multiplier and 0x3c/0xc3 a SEMB device. | 1233 | * identifies a port multiplier and 0x3c/0xc3 a SEMB device. |
1234 | * Unfortunately, WDC WD1600JS-62MHB5 (a hard drive) reports | ||
1235 | * SEMB signature. This is worked around in | ||
1236 | * ata_dev_read_id(). | ||
1234 | */ | 1237 | */ |
1235 | if ((tf->lbam == 0) && (tf->lbah == 0)) { | 1238 | if ((tf->lbam == 0) && (tf->lbah == 0)) { |
1236 | DPRINTK("found ATA device by sig\n"); | 1239 | DPRINTK("found ATA device by sig\n"); |
@@ -1248,8 +1251,8 @@ unsigned int ata_dev_classify(const struct ata_taskfile *tf) | |||
1248 | } | 1251 | } |
1249 | 1252 | ||
1250 | if ((tf->lbam == 0x3c) && (tf->lbah == 0xc3)) { | 1253 | if ((tf->lbam == 0x3c) && (tf->lbah == 0xc3)) { |
1251 | printk(KERN_INFO "ata: SEMB device ignored\n"); | 1254 | DPRINTK("found SEMB device by sig (could be ATA device)\n"); |
1252 | return ATA_DEV_SEMB_UNSUP; /* not yet */ | 1255 | return ATA_DEV_SEMB; |
1253 | } | 1256 | } |
1254 | 1257 | ||
1255 | DPRINTK("unknown device\n"); | 1258 | DPRINTK("unknown device\n"); |
@@ -1653,8 +1656,8 @@ unsigned long ata_id_xfermask(const u16 *id) | |||
1653 | /* | 1656 | /* |
1654 | * Process compact flash extended modes | 1657 | * Process compact flash extended modes |
1655 | */ | 1658 | */ |
1656 | int pio = id[163] & 0x7; | 1659 | int pio = (id[ATA_ID_CFA_MODES] >> 0) & 0x7; |
1657 | int dma = (id[163] >> 3) & 7; | 1660 | int dma = (id[ATA_ID_CFA_MODES] >> 3) & 0x7; |
1658 | 1661 | ||
1659 | if (pio) | 1662 | if (pio) |
1660 | pio_mask |= (1 << 5); | 1663 | pio_mask |= (1 << 5); |
@@ -2080,6 +2083,7 @@ int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class, | |||
2080 | struct ata_taskfile tf; | 2083 | struct ata_taskfile tf; |
2081 | unsigned int err_mask = 0; | 2084 | unsigned int err_mask = 0; |
2082 | const char *reason; | 2085 | const char *reason; |
2086 | bool is_semb = class == ATA_DEV_SEMB; | ||
2083 | int may_fallback = 1, tried_spinup = 0; | 2087 | int may_fallback = 1, tried_spinup = 0; |
2084 | int rc; | 2088 | int rc; |
2085 | 2089 | ||
@@ -2090,6 +2094,8 @@ retry: | |||
2090 | ata_tf_init(dev, &tf); | 2094 | ata_tf_init(dev, &tf); |
2091 | 2095 | ||
2092 | switch (class) { | 2096 | switch (class) { |
2097 | case ATA_DEV_SEMB: | ||
2098 | class = ATA_DEV_ATA; /* some hard drives report SEMB sig */ | ||
2093 | case ATA_DEV_ATA: | 2099 | case ATA_DEV_ATA: |
2094 | tf.command = ATA_CMD_ID_ATA; | 2100 | tf.command = ATA_CMD_ID_ATA; |
2095 | break; | 2101 | break; |
@@ -2126,6 +2132,14 @@ retry: | |||
2126 | return -ENOENT; | 2132 | return -ENOENT; |
2127 | } | 2133 | } |
2128 | 2134 | ||
2135 | if (is_semb) { | ||
2136 | ata_dev_printk(dev, KERN_INFO, "IDENTIFY failed on " | ||
2137 | "device w/ SEMB sig, disabled\n"); | ||
2138 | /* SEMB is not supported yet */ | ||
2139 | *p_class = ATA_DEV_SEMB_UNSUP; | ||
2140 | return 0; | ||
2141 | } | ||
2142 | |||
2129 | if ((err_mask == AC_ERR_DEV) && (tf.feature & ATA_ABORTED)) { | 2143 | if ((err_mask == AC_ERR_DEV) && (tf.feature & ATA_ABORTED)) { |
2130 | /* Device or controller might have reported | 2144 | /* Device or controller might have reported |
2131 | * the wrong device class. Give a shot at the | 2145 | * the wrong device class. Give a shot at the |
@@ -2412,7 +2426,8 @@ int ata_dev_configure(struct ata_device *dev) | |||
2412 | /* ATA-specific feature tests */ | 2426 | /* ATA-specific feature tests */ |
2413 | if (dev->class == ATA_DEV_ATA) { | 2427 | if (dev->class == ATA_DEV_ATA) { |
2414 | if (ata_id_is_cfa(id)) { | 2428 | if (ata_id_is_cfa(id)) { |
2415 | if (id[162] & 1) /* CPRM may make this media unusable */ | 2429 | /* CPRM may make this media unusable */ |
2430 | if (id[ATA_ID_CFA_KEY_MGMT] & 1) | ||
2416 | ata_dev_printk(dev, KERN_WARNING, | 2431 | ata_dev_printk(dev, KERN_WARNING, |
2417 | "supports DRM functions and may " | 2432 | "supports DRM functions and may " |
2418 | "not be fully accessable.\n"); | 2433 | "not be fully accessable.\n"); |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index b9747fa59e5..2733b0c90b7 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -647,23 +647,45 @@ int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg) | |||
647 | return rc; | 647 | return rc; |
648 | } | 648 | } |
649 | 649 | ||
650 | static int ata_ioc32(struct ata_port *ap) | ||
651 | { | ||
652 | if (ap->flags & ATA_FLAG_PIO_DMA) | ||
653 | return 1; | ||
654 | if (ap->pflags & ATA_PFLAG_PIO32) | ||
655 | return 1; | ||
656 | return 0; | ||
657 | } | ||
658 | |||
650 | int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *scsidev, | 659 | int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *scsidev, |
651 | int cmd, void __user *arg) | 660 | int cmd, void __user *arg) |
652 | { | 661 | { |
653 | int val = -EINVAL, rc = -EINVAL; | 662 | int val = -EINVAL, rc = -EINVAL; |
663 | unsigned long flags; | ||
654 | 664 | ||
655 | switch (cmd) { | 665 | switch (cmd) { |
656 | case ATA_IOC_GET_IO32: | 666 | case ATA_IOC_GET_IO32: |
657 | val = 0; | 667 | spin_lock_irqsave(ap->lock, flags); |
668 | val = ata_ioc32(ap); | ||
669 | spin_unlock_irqrestore(ap->lock, flags); | ||
658 | if (copy_to_user(arg, &val, 1)) | 670 | if (copy_to_user(arg, &val, 1)) |
659 | return -EFAULT; | 671 | return -EFAULT; |
660 | return 0; | 672 | return 0; |
661 | 673 | ||
662 | case ATA_IOC_SET_IO32: | 674 | case ATA_IOC_SET_IO32: |
663 | val = (unsigned long) arg; | 675 | val = (unsigned long) arg; |
664 | if (val != 0) | 676 | rc = 0; |
665 | return -EINVAL; | 677 | spin_lock_irqsave(ap->lock, flags); |
666 | return 0; | 678 | if (ap->pflags & ATA_PFLAG_PIO32CHANGE) { |
679 | if (val) | ||
680 | ap->pflags |= ATA_PFLAG_PIO32; | ||
681 | else | ||
682 | ap->pflags &= ~ATA_PFLAG_PIO32; | ||
683 | } else { | ||
684 | if (val != ata_ioc32(ap)) | ||
685 | rc = -EINVAL; | ||
686 | } | ||
687 | spin_unlock_irqrestore(ap->lock, flags); | ||
688 | return rc; | ||
667 | 689 | ||
668 | case HDIO_GET_IDENTITY: | 690 | case HDIO_GET_IDENTITY: |
669 | return ata_get_identity(ap, scsidev, arg); | 691 | return ata_get_identity(ap, scsidev, arg); |
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 8332e97a9de..bb18415d3d6 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
@@ -87,6 +87,7 @@ const struct ata_port_operations ata_bmdma32_port_ops = { | |||
87 | .inherits = &ata_bmdma_port_ops, | 87 | .inherits = &ata_bmdma_port_ops, |
88 | 88 | ||
89 | .sff_data_xfer = ata_sff_data_xfer32, | 89 | .sff_data_xfer = ata_sff_data_xfer32, |
90 | .port_start = ata_sff_port_start32, | ||
90 | }; | 91 | }; |
91 | EXPORT_SYMBOL_GPL(ata_bmdma32_port_ops); | 92 | EXPORT_SYMBOL_GPL(ata_bmdma32_port_ops); |
92 | 93 | ||
@@ -769,6 +770,9 @@ unsigned int ata_sff_data_xfer32(struct ata_device *dev, unsigned char *buf, | |||
769 | void __iomem *data_addr = ap->ioaddr.data_addr; | 770 | void __iomem *data_addr = ap->ioaddr.data_addr; |
770 | unsigned int words = buflen >> 2; | 771 | unsigned int words = buflen >> 2; |
771 | int slop = buflen & 3; | 772 | int slop = buflen & 3; |
773 | |||
774 | if (!(ap->pflags & ATA_PFLAG_PIO32)) | ||
775 | return ata_sff_data_xfer(dev, buf, buflen, rw); | ||
772 | 776 | ||
773 | /* Transfer multiple of 4 bytes */ | 777 | /* Transfer multiple of 4 bytes */ |
774 | if (rw == READ) | 778 | if (rw == READ) |
@@ -2402,6 +2406,29 @@ int ata_sff_port_start(struct ata_port *ap) | |||
2402 | EXPORT_SYMBOL_GPL(ata_sff_port_start); | 2406 | EXPORT_SYMBOL_GPL(ata_sff_port_start); |
2403 | 2407 | ||
2404 | /** | 2408 | /** |
2409 | * ata_sff_port_start32 - Set port up for dma. | ||
2410 | * @ap: Port to initialize | ||
2411 | * | ||
2412 | * Called just after data structures for each port are | ||
2413 | * initialized. Allocates space for PRD table if the device | ||
2414 | * is DMA capable SFF. | ||
2415 | * | ||
2416 | * May be used as the port_start() entry in ata_port_operations for | ||
2417 | * devices that are capable of 32bit PIO. | ||
2418 | * | ||
2419 | * LOCKING: | ||
2420 | * Inherited from caller. | ||
2421 | */ | ||
2422 | int ata_sff_port_start32(struct ata_port *ap) | ||
2423 | { | ||
2424 | ap->pflags |= ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE; | ||
2425 | if (ap->ioaddr.bmdma_addr) | ||
2426 | return ata_port_start(ap); | ||
2427 | return 0; | ||
2428 | } | ||
2429 | EXPORT_SYMBOL_GPL(ata_sff_port_start32); | ||
2430 | |||
2431 | /** | ||
2405 | * ata_sff_std_ports - initialize ioaddr with standard port offsets. | 2432 | * ata_sff_std_ports - initialize ioaddr with standard port offsets. |
2406 | * @ioaddr: IO address structure to be initialized | 2433 | * @ioaddr: IO address structure to be initialized |
2407 | * | 2434 | * |
diff --git a/drivers/ata/pata_hpt37x.c b/drivers/ata/pata_hpt37x.c index 81ab57003ab..122c786449a 100644 --- a/drivers/ata/pata_hpt37x.c +++ b/drivers/ata/pata_hpt37x.c | |||
@@ -8,7 +8,7 @@ | |||
8 | * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org> | 8 | * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org> |
9 | * Portions Copyright (C) 2001 Sun Microsystems, Inc. | 9 | * Portions Copyright (C) 2001 Sun Microsystems, Inc. |
10 | * Portions Copyright (C) 2003 Red Hat Inc | 10 | * Portions Copyright (C) 2003 Red Hat Inc |
11 | * Portions Copyright (C) 2005-2007 MontaVista Software, Inc. | 11 | * Portions Copyright (C) 2005-2009 MontaVista Software, Inc. |
12 | * | 12 | * |
13 | * TODO | 13 | * TODO |
14 | * Look into engine reset on timeout errors. Should not be required. | 14 | * Look into engine reset on timeout errors. Should not be required. |
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/libata.h> | 24 | #include <linux/libata.h> |
25 | 25 | ||
26 | #define DRV_NAME "pata_hpt37x" | 26 | #define DRV_NAME "pata_hpt37x" |
27 | #define DRV_VERSION "0.6.11" | 27 | #define DRV_VERSION "0.6.12" |
28 | 28 | ||
29 | struct hpt_clock { | 29 | struct hpt_clock { |
30 | u8 xfer_speed; | 30 | u8 xfer_speed; |
@@ -445,23 +445,6 @@ static void hpt370_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
445 | } | 445 | } |
446 | 446 | ||
447 | /** | 447 | /** |
448 | * hpt370_bmdma_start - DMA engine begin | ||
449 | * @qc: ATA command | ||
450 | * | ||
451 | * The 370 and 370A want us to reset the DMA engine each time we | ||
452 | * use it. The 372 and later are fine. | ||
453 | */ | ||
454 | |||
455 | static void hpt370_bmdma_start(struct ata_queued_cmd *qc) | ||
456 | { | ||
457 | struct ata_port *ap = qc->ap; | ||
458 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | ||
459 | pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); | ||
460 | udelay(10); | ||
461 | ata_bmdma_start(qc); | ||
462 | } | ||
463 | |||
464 | /** | ||
465 | * hpt370_bmdma_end - DMA engine stop | 448 | * hpt370_bmdma_end - DMA engine stop |
466 | * @qc: ATA command | 449 | * @qc: ATA command |
467 | * | 450 | * |
@@ -598,7 +581,6 @@ static struct scsi_host_template hpt37x_sht = { | |||
598 | static struct ata_port_operations hpt370_port_ops = { | 581 | static struct ata_port_operations hpt370_port_ops = { |
599 | .inherits = &ata_bmdma_port_ops, | 582 | .inherits = &ata_bmdma_port_ops, |
600 | 583 | ||
601 | .bmdma_start = hpt370_bmdma_start, | ||
602 | .bmdma_stop = hpt370_bmdma_stop, | 584 | .bmdma_stop = hpt370_bmdma_stop, |
603 | 585 | ||
604 | .mode_filter = hpt370_filter, | 586 | .mode_filter = hpt370_filter, |
diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c index 3f830f0fe2c..f72c6c5b820 100644 --- a/drivers/ata/pata_legacy.c +++ b/drivers/ata/pata_legacy.c | |||
@@ -108,6 +108,7 @@ struct legacy_controller { | |||
108 | struct ata_port_operations *ops; | 108 | struct ata_port_operations *ops; |
109 | unsigned int pio_mask; | 109 | unsigned int pio_mask; |
110 | unsigned int flags; | 110 | unsigned int flags; |
111 | unsigned int pflags; | ||
111 | int (*setup)(struct platform_device *, struct legacy_probe *probe, | 112 | int (*setup)(struct platform_device *, struct legacy_probe *probe, |
112 | struct legacy_data *data); | 113 | struct legacy_data *data); |
113 | }; | 114 | }; |
@@ -284,9 +285,11 @@ static unsigned int pdc_data_xfer_vlb(struct ata_device *dev, | |||
284 | unsigned char *buf, unsigned int buflen, int rw) | 285 | unsigned char *buf, unsigned int buflen, int rw) |
285 | { | 286 | { |
286 | int slop = buflen & 3; | 287 | int slop = buflen & 3; |
288 | struct ata_port *ap = dev->link->ap; | ||
289 | |||
287 | /* 32bit I/O capable *and* we need to write a whole number of dwords */ | 290 | /* 32bit I/O capable *and* we need to write a whole number of dwords */ |
288 | if (ata_id_has_dword_io(dev->id) && (slop == 0 || slop == 3)) { | 291 | if (ata_id_has_dword_io(dev->id) && (slop == 0 || slop == 3) |
289 | struct ata_port *ap = dev->link->ap; | 292 | && (ap->pflags & ATA_PFLAG_PIO32)) { |
290 | unsigned long flags; | 293 | unsigned long flags; |
291 | 294 | ||
292 | local_irq_save(flags); | 295 | local_irq_save(flags); |
@@ -736,7 +739,8 @@ static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf, | |||
736 | struct ata_port *ap = adev->link->ap; | 739 | struct ata_port *ap = adev->link->ap; |
737 | int slop = buflen & 3; | 740 | int slop = buflen & 3; |
738 | 741 | ||
739 | if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3)) { | 742 | if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3) |
743 | && (ap->pflags & ATA_PFLAG_PIO32)) { | ||
740 | if (rw == WRITE) | 744 | if (rw == WRITE) |
741 | iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2); | 745 | iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2); |
742 | else | 746 | else |
@@ -858,27 +862,30 @@ static struct ata_port_operations winbond_port_ops = { | |||
858 | 862 | ||
859 | static struct legacy_controller controllers[] = { | 863 | static struct legacy_controller controllers[] = { |
860 | {"BIOS", &legacy_port_ops, 0x1F, | 864 | {"BIOS", &legacy_port_ops, 0x1F, |
861 | ATA_FLAG_NO_IORDY, NULL }, | 865 | ATA_FLAG_NO_IORDY, 0, NULL }, |
862 | {"Snooping", &simple_port_ops, 0x1F, | 866 | {"Snooping", &simple_port_ops, 0x1F, |
863 | 0 , NULL }, | 867 | 0, 0, NULL }, |
864 | {"PDC20230", &pdc20230_port_ops, 0x7, | 868 | {"PDC20230", &pdc20230_port_ops, 0x7, |
865 | ATA_FLAG_NO_IORDY, NULL }, | 869 | ATA_FLAG_NO_IORDY, |
870 | ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, NULL }, | ||
866 | {"HT6560A", &ht6560a_port_ops, 0x07, | 871 | {"HT6560A", &ht6560a_port_ops, 0x07, |
867 | ATA_FLAG_NO_IORDY, NULL }, | 872 | ATA_FLAG_NO_IORDY, 0, NULL }, |
868 | {"HT6560B", &ht6560b_port_ops, 0x1F, | 873 | {"HT6560B", &ht6560b_port_ops, 0x1F, |
869 | ATA_FLAG_NO_IORDY, NULL }, | 874 | ATA_FLAG_NO_IORDY, 0, NULL }, |
870 | {"OPTI82C611A", &opti82c611a_port_ops, 0x0F, | 875 | {"OPTI82C611A", &opti82c611a_port_ops, 0x0F, |
871 | 0 , NULL }, | 876 | 0, 0, NULL }, |
872 | {"OPTI82C46X", &opti82c46x_port_ops, 0x0F, | 877 | {"OPTI82C46X", &opti82c46x_port_ops, 0x0F, |
873 | 0 , NULL }, | 878 | 0, 0, NULL }, |
874 | {"QDI6500", &qdi6500_port_ops, 0x07, | 879 | {"QDI6500", &qdi6500_port_ops, 0x07, |
875 | ATA_FLAG_NO_IORDY, qdi_port }, | 880 | ATA_FLAG_NO_IORDY, |
881 | ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port }, | ||
876 | {"QDI6580", &qdi6580_port_ops, 0x1F, | 882 | {"QDI6580", &qdi6580_port_ops, 0x1F, |
877 | 0 , qdi_port }, | 883 | 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port }, |
878 | {"QDI6580DP", &qdi6580dp_port_ops, 0x1F, | 884 | {"QDI6580DP", &qdi6580dp_port_ops, 0x1F, |
879 | 0 , qdi_port }, | 885 | 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port }, |
880 | {"W83759A", &winbond_port_ops, 0x1F, | 886 | {"W83759A", &winbond_port_ops, 0x1F, |
881 | 0 , winbond_port } | 887 | 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, |
888 | winbond_port } | ||
882 | }; | 889 | }; |
883 | 890 | ||
884 | /** | 891 | /** |
@@ -1008,6 +1015,7 @@ static __init int legacy_init_one(struct legacy_probe *probe) | |||
1008 | ap->ops = ops; | 1015 | ap->ops = ops; |
1009 | ap->pio_mask = pio_modes; | 1016 | ap->pio_mask = pio_modes; |
1010 | ap->flags |= ATA_FLAG_SLAVE_POSS | iordy; | 1017 | ap->flags |= ATA_FLAG_SLAVE_POSS | iordy; |
1018 | ap->pflags |= controller->pflags; | ||
1011 | ap->ioaddr.cmd_addr = io_addr; | 1019 | ap->ioaddr.cmd_addr = io_addr; |
1012 | ap->ioaddr.altstatus_addr = ctrl_addr; | 1020 | ap->ioaddr.altstatus_addr = ctrl_addr; |
1013 | ap->ioaddr.ctl_addr = ctrl_addr; | 1021 | ap->ioaddr.ctl_addr = ctrl_addr; |
@@ -1032,6 +1040,7 @@ static __init int legacy_init_one(struct legacy_probe *probe) | |||
1032 | return 0; | 1040 | return 0; |
1033 | } | 1041 | } |
1034 | } | 1042 | } |
1043 | ata_host_detach(host); | ||
1035 | fail: | 1044 | fail: |
1036 | platform_device_unregister(pdev); | 1045 | platform_device_unregister(pdev); |
1037 | return ret; | 1046 | return ret; |
diff --git a/drivers/ata/pata_ninja32.c b/drivers/ata/pata_ninja32.c index 0fb6b1b1e63..dd53a66b19e 100644 --- a/drivers/ata/pata_ninja32.c +++ b/drivers/ata/pata_ninja32.c | |||
@@ -44,7 +44,7 @@ | |||
44 | #include <linux/libata.h> | 44 | #include <linux/libata.h> |
45 | 45 | ||
46 | #define DRV_NAME "pata_ninja32" | 46 | #define DRV_NAME "pata_ninja32" |
47 | #define DRV_VERSION "0.1.3" | 47 | #define DRV_VERSION "0.1.5" |
48 | 48 | ||
49 | 49 | ||
50 | /** | 50 | /** |
@@ -86,6 +86,7 @@ static struct ata_port_operations ninja32_port_ops = { | |||
86 | .sff_dev_select = ninja32_dev_select, | 86 | .sff_dev_select = ninja32_dev_select, |
87 | .cable_detect = ata_cable_40wire, | 87 | .cable_detect = ata_cable_40wire, |
88 | .set_piomode = ninja32_set_piomode, | 88 | .set_piomode = ninja32_set_piomode, |
89 | .sff_data_xfer = ata_sff_data_xfer32 | ||
89 | }; | 90 | }; |
90 | 91 | ||
91 | static void ninja32_program(void __iomem *base) | 92 | static void ninja32_program(void __iomem *base) |
@@ -144,6 +145,7 @@ static int ninja32_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
144 | ap->ioaddr.altstatus_addr = base + 0x1E; | 145 | ap->ioaddr.altstatus_addr = base + 0x1E; |
145 | ap->ioaddr.bmdma_addr = base; | 146 | ap->ioaddr.bmdma_addr = base; |
146 | ata_sff_std_ports(&ap->ioaddr); | 147 | ata_sff_std_ports(&ap->ioaddr); |
148 | ap->pflags = ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE; | ||
147 | 149 | ||
148 | ninja32_program(base); | 150 | ninja32_program(base); |
149 | /* FIXME: Should we disable them at remove ? */ | 151 | /* FIXME: Should we disable them at remove ? */ |
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index b08e6e0f82b..45657cacec4 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c | |||
@@ -62,7 +62,7 @@ | |||
62 | #include <linux/dmi.h> | 62 | #include <linux/dmi.h> |
63 | 63 | ||
64 | #define DRV_NAME "pata_via" | 64 | #define DRV_NAME "pata_via" |
65 | #define DRV_VERSION "0.3.3" | 65 | #define DRV_VERSION "0.3.4" |
66 | 66 | ||
67 | /* | 67 | /* |
68 | * The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx | 68 | * The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx |
@@ -136,6 +136,9 @@ static const struct via_isa_bridge { | |||
136 | { NULL } | 136 | { NULL } |
137 | }; | 137 | }; |
138 | 138 | ||
139 | struct via_port { | ||
140 | u8 cached_device; | ||
141 | }; | ||
139 | 142 | ||
140 | /* | 143 | /* |
141 | * Cable special cases | 144 | * Cable special cases |
@@ -346,14 +349,70 @@ static void via_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
346 | */ | 349 | */ |
347 | static void via_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) | 350 | static void via_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) |
348 | { | 351 | { |
349 | struct ata_taskfile tmp_tf; | 352 | struct ata_ioports *ioaddr = &ap->ioaddr; |
353 | struct via_port *vp = ap->private_data; | ||
354 | unsigned int is_addr = tf->flags & ATA_TFLAG_ISADDR; | ||
355 | int newctl = 0; | ||
356 | |||
357 | if (tf->ctl != ap->last_ctl) { | ||
358 | iowrite8(tf->ctl, ioaddr->ctl_addr); | ||
359 | ap->last_ctl = tf->ctl; | ||
360 | ata_wait_idle(ap); | ||
361 | newctl = 1; | ||
362 | } | ||
363 | |||
364 | if (tf->flags & ATA_TFLAG_DEVICE) { | ||
365 | iowrite8(tf->device, ioaddr->device_addr); | ||
366 | vp->cached_device = tf->device; | ||
367 | } else if (newctl) | ||
368 | iowrite8(vp->cached_device, ioaddr->device_addr); | ||
369 | |||
370 | if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) { | ||
371 | WARN_ON_ONCE(!ioaddr->ctl_addr); | ||
372 | iowrite8(tf->hob_feature, ioaddr->feature_addr); | ||
373 | iowrite8(tf->hob_nsect, ioaddr->nsect_addr); | ||
374 | iowrite8(tf->hob_lbal, ioaddr->lbal_addr); | ||
375 | iowrite8(tf->hob_lbam, ioaddr->lbam_addr); | ||
376 | iowrite8(tf->hob_lbah, ioaddr->lbah_addr); | ||
377 | VPRINTK("hob: feat 0x%X nsect 0x%X, lba 0x%X 0x%X 0x%X\n", | ||
378 | tf->hob_feature, | ||
379 | tf->hob_nsect, | ||
380 | tf->hob_lbal, | ||
381 | tf->hob_lbam, | ||
382 | tf->hob_lbah); | ||
383 | } | ||
350 | 384 | ||
351 | if (ap->ctl != ap->last_ctl && !(tf->flags & ATA_TFLAG_DEVICE)) { | 385 | if (is_addr) { |
352 | tmp_tf = *tf; | 386 | iowrite8(tf->feature, ioaddr->feature_addr); |
353 | tmp_tf.flags |= ATA_TFLAG_DEVICE; | 387 | iowrite8(tf->nsect, ioaddr->nsect_addr); |
354 | tf = &tmp_tf; | 388 | iowrite8(tf->lbal, ioaddr->lbal_addr); |
389 | iowrite8(tf->lbam, ioaddr->lbam_addr); | ||
390 | iowrite8(tf->lbah, ioaddr->lbah_addr); | ||
391 | VPRINTK("feat 0x%X nsect 0x%X lba 0x%X 0x%X 0x%X\n", | ||
392 | tf->feature, | ||
393 | tf->nsect, | ||
394 | tf->lbal, | ||
395 | tf->lbam, | ||
396 | tf->lbah); | ||
355 | } | 397 | } |
356 | ata_sff_tf_load(ap, tf); | 398 | |
399 | ata_wait_idle(ap); | ||
400 | } | ||
401 | |||
402 | static int via_port_start(struct ata_port *ap) | ||
403 | { | ||
404 | struct via_port *vp; | ||
405 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | ||
406 | |||
407 | int ret = ata_sff_port_start(ap); | ||
408 | if (ret < 0) | ||
409 | return ret; | ||
410 | |||
411 | vp = devm_kzalloc(&pdev->dev, sizeof(struct via_port), GFP_KERNEL); | ||
412 | if (vp == NULL) | ||
413 | return -ENOMEM; | ||
414 | ap->private_data = vp; | ||
415 | return 0; | ||
357 | } | 416 | } |
358 | 417 | ||
359 | static struct scsi_host_template via_sht = { | 418 | static struct scsi_host_template via_sht = { |
@@ -367,6 +426,7 @@ static struct ata_port_operations via_port_ops = { | |||
367 | .set_dmamode = via_set_dmamode, | 426 | .set_dmamode = via_set_dmamode, |
368 | .prereset = via_pre_reset, | 427 | .prereset = via_pre_reset, |
369 | .sff_tf_load = via_tf_load, | 428 | .sff_tf_load = via_tf_load, |
429 | .port_start = via_port_start, | ||
370 | }; | 430 | }; |
371 | 431 | ||
372 | static struct ata_port_operations via_port_ops_noirq = { | 432 | static struct ata_port_operations via_port_ops_noirq = { |
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index 37ae5dc1070..870dcfd8235 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
@@ -1881,6 +1881,39 @@ static u8 mv_bmdma_status(struct ata_port *ap) | |||
1881 | return status; | 1881 | return status; |
1882 | } | 1882 | } |
1883 | 1883 | ||
1884 | static void mv_rw_multi_errata_sata24(struct ata_queued_cmd *qc) | ||
1885 | { | ||
1886 | struct ata_taskfile *tf = &qc->tf; | ||
1887 | /* | ||
1888 | * Workaround for 88SX60x1 FEr SATA#24. | ||
1889 | * | ||
1890 | * Chip may corrupt WRITEs if multi_count >= 4kB. | ||
1891 | * Note that READs are unaffected. | ||
1892 | * | ||
1893 | * It's not clear if this errata really means "4K bytes", | ||
1894 | * or if it always happens for multi_count > 7 | ||
1895 | * regardless of device sector_size. | ||
1896 | * | ||
1897 | * So, for safety, any write with multi_count > 7 | ||
1898 | * gets converted here into a regular PIO write instead: | ||
1899 | */ | ||
1900 | if ((tf->flags & ATA_TFLAG_WRITE) && is_multi_taskfile(tf)) { | ||
1901 | if (qc->dev->multi_count > 7) { | ||
1902 | switch (tf->command) { | ||
1903 | case ATA_CMD_WRITE_MULTI: | ||
1904 | tf->command = ATA_CMD_PIO_WRITE; | ||
1905 | break; | ||
1906 | case ATA_CMD_WRITE_MULTI_FUA_EXT: | ||
1907 | tf->flags &= ~ATA_TFLAG_FUA; /* ugh */ | ||
1908 | /* fall through */ | ||
1909 | case ATA_CMD_WRITE_MULTI_EXT: | ||
1910 | tf->command = ATA_CMD_PIO_WRITE_EXT; | ||
1911 | break; | ||
1912 | } | ||
1913 | } | ||
1914 | } | ||
1915 | } | ||
1916 | |||
1884 | /** | 1917 | /** |
1885 | * mv_qc_prep - Host specific command preparation. | 1918 | * mv_qc_prep - Host specific command preparation. |
1886 | * @qc: queued command to prepare | 1919 | * @qc: queued command to prepare |
@@ -1898,17 +1931,24 @@ static void mv_qc_prep(struct ata_queued_cmd *qc) | |||
1898 | struct ata_port *ap = qc->ap; | 1931 | struct ata_port *ap = qc->ap; |
1899 | struct mv_port_priv *pp = ap->private_data; | 1932 | struct mv_port_priv *pp = ap->private_data; |
1900 | __le16 *cw; | 1933 | __le16 *cw; |
1901 | struct ata_taskfile *tf; | 1934 | struct ata_taskfile *tf = &qc->tf; |
1902 | u16 flags = 0; | 1935 | u16 flags = 0; |
1903 | unsigned in_index; | 1936 | unsigned in_index; |
1904 | 1937 | ||
1905 | if ((qc->tf.protocol != ATA_PROT_DMA) && | 1938 | switch (tf->protocol) { |
1906 | (qc->tf.protocol != ATA_PROT_NCQ)) | 1939 | case ATA_PROT_DMA: |
1940 | case ATA_PROT_NCQ: | ||
1941 | break; /* continue below */ | ||
1942 | case ATA_PROT_PIO: | ||
1943 | mv_rw_multi_errata_sata24(qc); | ||
1944 | return; | ||
1945 | default: | ||
1907 | return; | 1946 | return; |
1947 | } | ||
1908 | 1948 | ||
1909 | /* Fill in command request block | 1949 | /* Fill in command request block |
1910 | */ | 1950 | */ |
1911 | if (!(qc->tf.flags & ATA_TFLAG_WRITE)) | 1951 | if (!(tf->flags & ATA_TFLAG_WRITE)) |
1912 | flags |= CRQB_FLAG_READ; | 1952 | flags |= CRQB_FLAG_READ; |
1913 | WARN_ON(MV_MAX_Q_DEPTH <= qc->tag); | 1953 | WARN_ON(MV_MAX_Q_DEPTH <= qc->tag); |
1914 | flags |= qc->tag << CRQB_TAG_SHIFT; | 1954 | flags |= qc->tag << CRQB_TAG_SHIFT; |
@@ -1924,7 +1964,6 @@ static void mv_qc_prep(struct ata_queued_cmd *qc) | |||
1924 | pp->crqb[in_index].ctrl_flags = cpu_to_le16(flags); | 1964 | pp->crqb[in_index].ctrl_flags = cpu_to_le16(flags); |
1925 | 1965 | ||
1926 | cw = &pp->crqb[in_index].ata_cmd[0]; | 1966 | cw = &pp->crqb[in_index].ata_cmd[0]; |
1927 | tf = &qc->tf; | ||
1928 | 1967 | ||
1929 | /* Sadly, the CRQB cannot accomodate all registers--there are | 1968 | /* Sadly, the CRQB cannot accomodate all registers--there are |
1930 | * only 11 bytes...so we must pick and choose required | 1969 | * only 11 bytes...so we must pick and choose required |
@@ -1990,16 +2029,16 @@ static void mv_qc_prep_iie(struct ata_queued_cmd *qc) | |||
1990 | struct ata_port *ap = qc->ap; | 2029 | struct ata_port *ap = qc->ap; |
1991 | struct mv_port_priv *pp = ap->private_data; | 2030 | struct mv_port_priv *pp = ap->private_data; |
1992 | struct mv_crqb_iie *crqb; | 2031 | struct mv_crqb_iie *crqb; |
1993 | struct ata_taskfile *tf; | 2032 | struct ata_taskfile *tf = &qc->tf; |
1994 | unsigned in_index; | 2033 | unsigned in_index; |
1995 | u32 flags = 0; | 2034 | u32 flags = 0; |
1996 | 2035 | ||
1997 | if ((qc->tf.protocol != ATA_PROT_DMA) && | 2036 | if ((tf->protocol != ATA_PROT_DMA) && |
1998 | (qc->tf.protocol != ATA_PROT_NCQ)) | 2037 | (tf->protocol != ATA_PROT_NCQ)) |
1999 | return; | 2038 | return; |
2000 | 2039 | ||
2001 | /* Fill in Gen IIE command request block */ | 2040 | /* Fill in Gen IIE command request block */ |
2002 | if (!(qc->tf.flags & ATA_TFLAG_WRITE)) | 2041 | if (!(tf->flags & ATA_TFLAG_WRITE)) |
2003 | flags |= CRQB_FLAG_READ; | 2042 | flags |= CRQB_FLAG_READ; |
2004 | 2043 | ||
2005 | WARN_ON(MV_MAX_Q_DEPTH <= qc->tag); | 2044 | WARN_ON(MV_MAX_Q_DEPTH <= qc->tag); |
@@ -2015,7 +2054,6 @@ static void mv_qc_prep_iie(struct ata_queued_cmd *qc) | |||
2015 | crqb->addr_hi = cpu_to_le32((pp->sg_tbl_dma[qc->tag] >> 16) >> 16); | 2054 | crqb->addr_hi = cpu_to_le32((pp->sg_tbl_dma[qc->tag] >> 16) >> 16); |
2016 | crqb->flags = cpu_to_le32(flags); | 2055 | crqb->flags = cpu_to_le32(flags); |
2017 | 2056 | ||
2018 | tf = &qc->tf; | ||
2019 | crqb->ata_cmd[0] = cpu_to_le32( | 2057 | crqb->ata_cmd[0] = cpu_to_le32( |
2020 | (tf->command << 16) | | 2058 | (tf->command << 16) | |
2021 | (tf->feature << 24) | 2059 | (tf->feature << 24) |
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c index be204308cc1..9359613addc 100644 --- a/drivers/atm/solos-pci.c +++ b/drivers/atm/solos-pci.c | |||
@@ -1059,7 +1059,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1059 | goto out; | 1059 | goto out; |
1060 | } | 1060 | } |
1061 | 1061 | ||
1062 | err = pci_set_dma_mask(dev, DMA_32BIT_MASK); | 1062 | err = pci_set_dma_mask(dev, DMA_BIT_MASK(32)); |
1063 | if (err) { | 1063 | if (err) { |
1064 | dev_warn(&dev->dev, "Failed to set 32-bit DMA mask\n"); | 1064 | dev_warn(&dev->dev, "Failed to set 32-bit DMA mask\n"); |
1065 | goto out; | 1065 | goto out; |
diff --git a/drivers/base/base.h b/drivers/base/base.h index ddc97496db4..b528145a078 100644 --- a/drivers/base/base.h +++ b/drivers/base/base.h | |||
@@ -115,7 +115,7 @@ extern int driver_probe_device(struct device_driver *drv, struct device *dev); | |||
115 | static inline int driver_match_device(struct device_driver *drv, | 115 | static inline int driver_match_device(struct device_driver *drv, |
116 | struct device *dev) | 116 | struct device *dev) |
117 | { | 117 | { |
118 | return drv->bus->match && drv->bus->match(dev, drv); | 118 | return drv->bus->match ? drv->bus->match(dev, drv) : 1; |
119 | } | 119 | } |
120 | 120 | ||
121 | extern void sysdev_shutdown(void); | 121 | extern void sysdev_shutdown(void); |
diff --git a/drivers/base/core.c b/drivers/base/core.c index e73c92d13a2..4aa527b8a91 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c | |||
@@ -891,7 +891,8 @@ int device_add(struct device *dev) | |||
891 | set_dev_node(dev, dev_to_node(parent)); | 891 | set_dev_node(dev, dev_to_node(parent)); |
892 | 892 | ||
893 | /* first, register with generic layer. */ | 893 | /* first, register with generic layer. */ |
894 | error = kobject_add(&dev->kobj, dev->kobj.parent, "%s", dev_name(dev)); | 894 | /* we require the name to be set before, and pass NULL */ |
895 | error = kobject_add(&dev->kobj, dev->kobj.parent, NULL); | ||
895 | if (error) | 896 | if (error) |
896 | goto Error; | 897 | goto Error; |
897 | 898 | ||
@@ -1142,6 +1143,9 @@ int device_for_each_child(struct device *parent, void *data, | |||
1142 | struct device *child; | 1143 | struct device *child; |
1143 | int error = 0; | 1144 | int error = 0; |
1144 | 1145 | ||
1146 | if (!parent->p) | ||
1147 | return 0; | ||
1148 | |||
1145 | klist_iter_init(&parent->p->klist_children, &i); | 1149 | klist_iter_init(&parent->p->klist_children, &i); |
1146 | while ((child = next_device(&i)) && !error) | 1150 | while ((child = next_device(&i)) && !error) |
1147 | error = fn(child, data); | 1151 | error = fn(child, data); |
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index f17c3266a0e..742cbe6b042 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c | |||
@@ -179,6 +179,7 @@ void wait_for_device_probe(void) | |||
179 | wait_event(probe_waitqueue, atomic_read(&probe_count) == 0); | 179 | wait_event(probe_waitqueue, atomic_read(&probe_count) == 0); |
180 | async_synchronize_full(); | 180 | async_synchronize_full(); |
181 | } | 181 | } |
182 | EXPORT_SYMBOL_GPL(wait_for_device_probe); | ||
182 | 183 | ||
183 | /** | 184 | /** |
184 | * driver_probe_device - attempt to bind device & driver together | 185 | * driver_probe_device - attempt to bind device & driver together |
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index d2198f64ad4..b5b6c973a2e 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c | |||
@@ -990,6 +990,8 @@ int __init platform_bus_init(void) | |||
990 | { | 990 | { |
991 | int error; | 991 | int error; |
992 | 992 | ||
993 | early_platform_cleanup(); | ||
994 | |||
993 | error = device_register(&platform_bus); | 995 | error = device_register(&platform_bus); |
994 | if (error) | 996 | if (error) |
995 | return error; | 997 | return error; |
@@ -1020,3 +1022,240 @@ u64 dma_get_required_mask(struct device *dev) | |||
1020 | } | 1022 | } |
1021 | EXPORT_SYMBOL_GPL(dma_get_required_mask); | 1023 | EXPORT_SYMBOL_GPL(dma_get_required_mask); |
1022 | #endif | 1024 | #endif |
1025 | |||
1026 | static __initdata LIST_HEAD(early_platform_driver_list); | ||
1027 | static __initdata LIST_HEAD(early_platform_device_list); | ||
1028 | |||
1029 | /** | ||
1030 | * early_platform_driver_register | ||
1031 | * @edrv: early_platform driver structure | ||
1032 | * @buf: string passed from early_param() | ||
1033 | */ | ||
1034 | int __init early_platform_driver_register(struct early_platform_driver *epdrv, | ||
1035 | char *buf) | ||
1036 | { | ||
1037 | unsigned long index; | ||
1038 | int n; | ||
1039 | |||
1040 | /* Simply add the driver to the end of the global list. | ||
1041 | * Drivers will by default be put on the list in compiled-in order. | ||
1042 | */ | ||
1043 | if (!epdrv->list.next) { | ||
1044 | INIT_LIST_HEAD(&epdrv->list); | ||
1045 | list_add_tail(&epdrv->list, &early_platform_driver_list); | ||
1046 | } | ||
1047 | |||
1048 | /* If the user has specified device then make sure the driver | ||
1049 | * gets prioritized. The driver of the last device specified on | ||
1050 | * command line will be put first on the list. | ||
1051 | */ | ||
1052 | n = strlen(epdrv->pdrv->driver.name); | ||
1053 | if (buf && !strncmp(buf, epdrv->pdrv->driver.name, n)) { | ||
1054 | list_move(&epdrv->list, &early_platform_driver_list); | ||
1055 | |||
1056 | if (!strcmp(buf, epdrv->pdrv->driver.name)) | ||
1057 | epdrv->requested_id = -1; | ||
1058 | else if (buf[n] == '.' && strict_strtoul(&buf[n + 1], 10, | ||
1059 | &index) == 0) | ||
1060 | epdrv->requested_id = index; | ||
1061 | else | ||
1062 | epdrv->requested_id = EARLY_PLATFORM_ID_ERROR; | ||
1063 | } | ||
1064 | |||
1065 | return 0; | ||
1066 | } | ||
1067 | |||
1068 | /** | ||
1069 | * early_platform_add_devices - add a numbers of early platform devices | ||
1070 | * @devs: array of early platform devices to add | ||
1071 | * @num: number of early platform devices in array | ||
1072 | */ | ||
1073 | void __init early_platform_add_devices(struct platform_device **devs, int num) | ||
1074 | { | ||
1075 | struct device *dev; | ||
1076 | int i; | ||
1077 | |||
1078 | /* simply add the devices to list */ | ||
1079 | for (i = 0; i < num; i++) { | ||
1080 | dev = &devs[i]->dev; | ||
1081 | |||
1082 | if (!dev->devres_head.next) { | ||
1083 | INIT_LIST_HEAD(&dev->devres_head); | ||
1084 | list_add_tail(&dev->devres_head, | ||
1085 | &early_platform_device_list); | ||
1086 | } | ||
1087 | } | ||
1088 | } | ||
1089 | |||
1090 | /** | ||
1091 | * early_platform_driver_register_all | ||
1092 | * @class_str: string to identify early platform driver class | ||
1093 | */ | ||
1094 | void __init early_platform_driver_register_all(char *class_str) | ||
1095 | { | ||
1096 | /* The "class_str" parameter may or may not be present on the kernel | ||
1097 | * command line. If it is present then there may be more than one | ||
1098 | * matching parameter. | ||
1099 | * | ||
1100 | * Since we register our early platform drivers using early_param() | ||
1101 | * we need to make sure that they also get registered in the case | ||
1102 | * when the parameter is missing from the kernel command line. | ||
1103 | * | ||
1104 | * We use parse_early_options() to make sure the early_param() gets | ||
1105 | * called at least once. The early_param() may be called more than | ||
1106 | * once since the name of the preferred device may be specified on | ||
1107 | * the kernel command line. early_platform_driver_register() handles | ||
1108 | * this case for us. | ||
1109 | */ | ||
1110 | parse_early_options(class_str); | ||
1111 | } | ||
1112 | |||
1113 | /** | ||
1114 | * early_platform_match | ||
1115 | * @edrv: early platform driver structure | ||
1116 | * @id: id to match against | ||
1117 | */ | ||
1118 | static __init struct platform_device * | ||
1119 | early_platform_match(struct early_platform_driver *epdrv, int id) | ||
1120 | { | ||
1121 | struct platform_device *pd; | ||
1122 | |||
1123 | list_for_each_entry(pd, &early_platform_device_list, dev.devres_head) | ||
1124 | if (platform_match(&pd->dev, &epdrv->pdrv->driver)) | ||
1125 | if (pd->id == id) | ||
1126 | return pd; | ||
1127 | |||
1128 | return NULL; | ||
1129 | } | ||
1130 | |||
1131 | /** | ||
1132 | * early_platform_left | ||
1133 | * @edrv: early platform driver structure | ||
1134 | * @id: return true if id or above exists | ||
1135 | */ | ||
1136 | static __init int early_platform_left(struct early_platform_driver *epdrv, | ||
1137 | int id) | ||
1138 | { | ||
1139 | struct platform_device *pd; | ||
1140 | |||
1141 | list_for_each_entry(pd, &early_platform_device_list, dev.devres_head) | ||
1142 | if (platform_match(&pd->dev, &epdrv->pdrv->driver)) | ||
1143 | if (pd->id >= id) | ||
1144 | return 1; | ||
1145 | |||
1146 | return 0; | ||
1147 | } | ||
1148 | |||
1149 | /** | ||
1150 | * early_platform_driver_probe_id | ||
1151 | * @class_str: string to identify early platform driver class | ||
1152 | * @id: id to match against | ||
1153 | * @nr_probe: number of platform devices to successfully probe before exiting | ||
1154 | */ | ||
1155 | static int __init early_platform_driver_probe_id(char *class_str, | ||
1156 | int id, | ||
1157 | int nr_probe) | ||
1158 | { | ||
1159 | struct early_platform_driver *epdrv; | ||
1160 | struct platform_device *match; | ||
1161 | int match_id; | ||
1162 | int n = 0; | ||
1163 | int left = 0; | ||
1164 | |||
1165 | list_for_each_entry(epdrv, &early_platform_driver_list, list) { | ||
1166 | /* only use drivers matching our class_str */ | ||
1167 | if (strcmp(class_str, epdrv->class_str)) | ||
1168 | continue; | ||
1169 | |||
1170 | if (id == -2) { | ||
1171 | match_id = epdrv->requested_id; | ||
1172 | left = 1; | ||
1173 | |||
1174 | } else { | ||
1175 | match_id = id; | ||
1176 | left += early_platform_left(epdrv, id); | ||
1177 | |||
1178 | /* skip requested id */ | ||
1179 | switch (epdrv->requested_id) { | ||
1180 | case EARLY_PLATFORM_ID_ERROR: | ||
1181 | case EARLY_PLATFORM_ID_UNSET: | ||
1182 | break; | ||
1183 | default: | ||
1184 | if (epdrv->requested_id == id) | ||
1185 | match_id = EARLY_PLATFORM_ID_UNSET; | ||
1186 | } | ||
1187 | } | ||
1188 | |||
1189 | switch (match_id) { | ||
1190 | case EARLY_PLATFORM_ID_ERROR: | ||
1191 | pr_warning("%s: unable to parse %s parameter\n", | ||
1192 | class_str, epdrv->pdrv->driver.name); | ||
1193 | /* fall-through */ | ||
1194 | case EARLY_PLATFORM_ID_UNSET: | ||
1195 | match = NULL; | ||
1196 | break; | ||
1197 | default: | ||
1198 | match = early_platform_match(epdrv, match_id); | ||
1199 | } | ||
1200 | |||
1201 | if (match) { | ||
1202 | if (epdrv->pdrv->probe(match)) | ||
1203 | pr_warning("%s: unable to probe %s early.\n", | ||
1204 | class_str, match->name); | ||
1205 | else | ||
1206 | n++; | ||
1207 | } | ||
1208 | |||
1209 | if (n >= nr_probe) | ||
1210 | break; | ||
1211 | } | ||
1212 | |||
1213 | if (left) | ||
1214 | return n; | ||
1215 | else | ||
1216 | return -ENODEV; | ||
1217 | } | ||
1218 | |||
1219 | /** | ||
1220 | * early_platform_driver_probe | ||
1221 | * @class_str: string to identify early platform driver class | ||
1222 | * @nr_probe: number of platform devices to successfully probe before exiting | ||
1223 | * @user_only: only probe user specified early platform devices | ||
1224 | */ | ||
1225 | int __init early_platform_driver_probe(char *class_str, | ||
1226 | int nr_probe, | ||
1227 | int user_only) | ||
1228 | { | ||
1229 | int k, n, i; | ||
1230 | |||
1231 | n = 0; | ||
1232 | for (i = -2; n < nr_probe; i++) { | ||
1233 | k = early_platform_driver_probe_id(class_str, i, nr_probe - n); | ||
1234 | |||
1235 | if (k < 0) | ||
1236 | break; | ||
1237 | |||
1238 | n += k; | ||
1239 | |||
1240 | if (user_only) | ||
1241 | break; | ||
1242 | } | ||
1243 | |||
1244 | return n; | ||
1245 | } | ||
1246 | |||
1247 | /** | ||
1248 | * early_platform_cleanup - clean up early platform code | ||
1249 | */ | ||
1250 | void __init early_platform_cleanup(void) | ||
1251 | { | ||
1252 | struct platform_device *pd, *pd2; | ||
1253 | |||
1254 | /* clean up the devres list used to chain devices */ | ||
1255 | list_for_each_entry_safe(pd, pd2, &early_platform_device_list, | ||
1256 | dev.devres_head) { | ||
1257 | list_del(&pd->dev.devres_head); | ||
1258 | memset(&pd->dev.devres_head, 0, sizeof(pd->dev.devres_head)); | ||
1259 | } | ||
1260 | } | ||
1261 | |||
diff --git a/drivers/block/brd.c b/drivers/block/brd.c index bdd4f5f4557..5f7e64ba87e 100644 --- a/drivers/block/brd.c +++ b/drivers/block/brd.c | |||
@@ -275,8 +275,10 @@ static int brd_do_bvec(struct brd_device *brd, struct page *page, | |||
275 | if (rw == READ) { | 275 | if (rw == READ) { |
276 | copy_from_brd(mem + off, brd, sector, len); | 276 | copy_from_brd(mem + off, brd, sector, len); |
277 | flush_dcache_page(page); | 277 | flush_dcache_page(page); |
278 | } else | 278 | } else { |
279 | flush_dcache_page(page); | ||
279 | copy_to_brd(brd, mem + off, sector, len); | 280 | copy_to_brd(brd, mem + off, sector, len); |
281 | } | ||
280 | kunmap_atomic(mem, KM_USER0); | 282 | kunmap_atomic(mem, KM_USER0); |
281 | 283 | ||
282 | out: | 284 | out: |
@@ -436,6 +438,7 @@ static struct brd_device *brd_alloc(int i) | |||
436 | if (!brd->brd_queue) | 438 | if (!brd->brd_queue) |
437 | goto out_free_dev; | 439 | goto out_free_dev; |
438 | blk_queue_make_request(brd->brd_queue, brd_make_request); | 440 | blk_queue_make_request(brd->brd_queue, brd_make_request); |
441 | blk_queue_ordered(brd->brd_queue, QUEUE_ORDERED_TAG, NULL); | ||
439 | blk_queue_max_sectors(brd->brd_queue, 1024); | 442 | blk_queue_max_sectors(brd->brd_queue, 1024); |
440 | blk_queue_bounce_limit(brd->brd_queue, BLK_BOUNCE_ANY); | 443 | blk_queue_bounce_limit(brd->brd_queue, BLK_BOUNCE_ANY); |
441 | 444 | ||
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index 0ef6f08aa6e..4d4d5e0d3fa 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c | |||
@@ -3505,7 +3505,7 @@ static __devinit int cciss_message(struct pci_dev *pdev, unsigned char opcode, u | |||
3505 | /* The Inbound Post Queue only accepts 32-bit physical addresses for the | 3505 | /* The Inbound Post Queue only accepts 32-bit physical addresses for the |
3506 | CCISS commands, so they must be allocated from the lower 4GiB of | 3506 | CCISS commands, so they must be allocated from the lower 4GiB of |
3507 | memory. */ | 3507 | memory. */ |
3508 | err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); | 3508 | err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); |
3509 | if (err) { | 3509 | if (err) { |
3510 | iounmap(vaddr); | 3510 | iounmap(vaddr); |
3511 | return -ENOMEM; | 3511 | return -ENOMEM; |
diff --git a/drivers/block/hd.c b/drivers/block/hd.c index 3c11f062a18..baaa9e486e5 100644 --- a/drivers/block/hd.c +++ b/drivers/block/hd.c | |||
@@ -509,7 +509,6 @@ ok_to_write: | |||
509 | if (i > 0) { | 509 | if (i > 0) { |
510 | SET_HANDLER(&write_intr); | 510 | SET_HANDLER(&write_intr); |
511 | outsw(HD_DATA, req->buffer, 256); | 511 | outsw(HD_DATA, req->buffer, 256); |
512 | local_irq_enable(); | ||
513 | } else { | 512 | } else { |
514 | #if (HD_DELAY > 0) | 513 | #if (HD_DELAY > 0) |
515 | last_req = read_timer(); | 514 | last_req = read_timer(); |
@@ -541,8 +540,7 @@ static void hd_times_out(unsigned long dummy) | |||
541 | if (!CURRENT) | 540 | if (!CURRENT) |
542 | return; | 541 | return; |
543 | 542 | ||
544 | disable_irq(HD_IRQ); | 543 | spin_lock_irq(hd_queue->queue_lock); |
545 | local_irq_enable(); | ||
546 | reset = 1; | 544 | reset = 1; |
547 | name = CURRENT->rq_disk->disk_name; | 545 | name = CURRENT->rq_disk->disk_name; |
548 | printk("%s: timeout\n", name); | 546 | printk("%s: timeout\n", name); |
@@ -552,9 +550,8 @@ static void hd_times_out(unsigned long dummy) | |||
552 | #endif | 550 | #endif |
553 | end_request(CURRENT, 0); | 551 | end_request(CURRENT, 0); |
554 | } | 552 | } |
555 | local_irq_disable(); | ||
556 | hd_request(); | 553 | hd_request(); |
557 | enable_irq(HD_IRQ); | 554 | spin_unlock_irq(hd_queue->queue_lock); |
558 | } | 555 | } |
559 | 556 | ||
560 | static int do_special_op(struct hd_i_struct *disk, struct request *req) | 557 | static int do_special_op(struct hd_i_struct *disk, struct request *req) |
@@ -592,7 +589,6 @@ static void hd_request(void) | |||
592 | return; | 589 | return; |
593 | repeat: | 590 | repeat: |
594 | del_timer(&device_timer); | 591 | del_timer(&device_timer); |
595 | local_irq_enable(); | ||
596 | 592 | ||
597 | req = CURRENT; | 593 | req = CURRENT; |
598 | if (!req) { | 594 | if (!req) { |
@@ -601,7 +597,6 @@ repeat: | |||
601 | } | 597 | } |
602 | 598 | ||
603 | if (reset) { | 599 | if (reset) { |
604 | local_irq_disable(); | ||
605 | reset_hd(); | 600 | reset_hd(); |
606 | return; | 601 | return; |
607 | } | 602 | } |
@@ -660,9 +655,7 @@ repeat: | |||
660 | 655 | ||
661 | static void do_hd_request(struct request_queue *q) | 656 | static void do_hd_request(struct request_queue *q) |
662 | { | 657 | { |
663 | disable_irq(HD_IRQ); | ||
664 | hd_request(); | 658 | hd_request(); |
665 | enable_irq(HD_IRQ); | ||
666 | } | 659 | } |
667 | 660 | ||
668 | static int hd_getgeo(struct block_device *bdev, struct hd_geometry *geo) | 661 | static int hd_getgeo(struct block_device *bdev, struct hd_geometry *geo) |
@@ -684,12 +677,16 @@ static irqreturn_t hd_interrupt(int irq, void *dev_id) | |||
684 | { | 677 | { |
685 | void (*handler)(void) = do_hd; | 678 | void (*handler)(void) = do_hd; |
686 | 679 | ||
680 | spin_lock(hd_queue->queue_lock); | ||
681 | |||
687 | do_hd = NULL; | 682 | do_hd = NULL; |
688 | del_timer(&device_timer); | 683 | del_timer(&device_timer); |
689 | if (!handler) | 684 | if (!handler) |
690 | handler = unexpected_hd_interrupt; | 685 | handler = unexpected_hd_interrupt; |
691 | handler(); | 686 | handler(); |
692 | local_irq_enable(); | 687 | |
688 | spin_unlock(hd_queue->queue_lock); | ||
689 | |||
693 | return IRQ_HANDLED; | 690 | return IRQ_HANDLED; |
694 | } | 691 | } |
695 | 692 | ||
diff --git a/drivers/block/mg_disk.c b/drivers/block/mg_disk.c index fb39d9aa3cd..f3898353d0a 100644 --- a/drivers/block/mg_disk.c +++ b/drivers/block/mg_disk.c | |||
@@ -79,7 +79,7 @@ static void mg_dump_status(const char *msg, unsigned int stat, | |||
79 | if (host->breq) { | 79 | if (host->breq) { |
80 | req = elv_next_request(host->breq); | 80 | req = elv_next_request(host->breq); |
81 | if (req) | 81 | if (req) |
82 | printk(", sector=%ld", req->sector); | 82 | printk(", sector=%u", (u32)req->sector); |
83 | } | 83 | } |
84 | 84 | ||
85 | } | 85 | } |
@@ -160,11 +160,16 @@ static irqreturn_t mg_irq(int irq, void *dev_id) | |||
160 | struct mg_host *host = dev_id; | 160 | struct mg_host *host = dev_id; |
161 | void (*handler)(struct mg_host *) = host->mg_do_intr; | 161 | void (*handler)(struct mg_host *) = host->mg_do_intr; |
162 | 162 | ||
163 | host->mg_do_intr = 0; | 163 | spin_lock(&host->lock); |
164 | |||
165 | host->mg_do_intr = NULL; | ||
164 | del_timer(&host->timer); | 166 | del_timer(&host->timer); |
165 | if (!handler) | 167 | if (!handler) |
166 | handler = mg_unexpected_intr; | 168 | handler = mg_unexpected_intr; |
167 | handler(host); | 169 | handler(host); |
170 | |||
171 | spin_unlock(&host->lock); | ||
172 | |||
168 | return IRQ_HANDLED; | 173 | return IRQ_HANDLED; |
169 | } | 174 | } |
170 | 175 | ||
@@ -319,7 +324,7 @@ static void mg_read(struct request *req) | |||
319 | 324 | ||
320 | remains = req->nr_sectors; | 325 | remains = req->nr_sectors; |
321 | 326 | ||
322 | if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_RD, 0) != | 327 | if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_RD, NULL) != |
323 | MG_ERR_NONE) | 328 | MG_ERR_NONE) |
324 | mg_bad_rw_intr(host); | 329 | mg_bad_rw_intr(host); |
325 | 330 | ||
@@ -363,7 +368,7 @@ static void mg_write(struct request *req) | |||
363 | 368 | ||
364 | remains = req->nr_sectors; | 369 | remains = req->nr_sectors; |
365 | 370 | ||
366 | if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_WR, 0) != | 371 | if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_WR, NULL) != |
367 | MG_ERR_NONE) { | 372 | MG_ERR_NONE) { |
368 | mg_bad_rw_intr(host); | 373 | mg_bad_rw_intr(host); |
369 | return; | 374 | return; |
@@ -521,9 +526,11 @@ void mg_times_out(unsigned long data) | |||
521 | char *name; | 526 | char *name; |
522 | struct request *req; | 527 | struct request *req; |
523 | 528 | ||
529 | spin_lock_irq(&host->lock); | ||
530 | |||
524 | req = elv_next_request(host->breq); | 531 | req = elv_next_request(host->breq); |
525 | if (!req) | 532 | if (!req) |
526 | return; | 533 | goto out_unlock; |
527 | 534 | ||
528 | host->mg_do_intr = NULL; | 535 | host->mg_do_intr = NULL; |
529 | 536 | ||
@@ -534,6 +541,8 @@ void mg_times_out(unsigned long data) | |||
534 | mg_bad_rw_intr(host); | 541 | mg_bad_rw_intr(host); |
535 | 542 | ||
536 | mg_request(host->breq); | 543 | mg_request(host->breq); |
544 | out_unlock: | ||
545 | spin_unlock_irq(&host->lock); | ||
537 | } | 546 | } |
538 | 547 | ||
539 | static void mg_request_poll(struct request_queue *q) | 548 | static void mg_request_poll(struct request_queue *q) |
diff --git a/drivers/block/ub.c b/drivers/block/ub.c index 69b7f8e7759..689cd27ac89 100644 --- a/drivers/block/ub.c +++ b/drivers/block/ub.c | |||
@@ -1025,6 +1025,7 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd) | |||
1025 | { | 1025 | { |
1026 | struct urb *urb = &sc->work_urb; | 1026 | struct urb *urb = &sc->work_urb; |
1027 | struct bulk_cs_wrap *bcs; | 1027 | struct bulk_cs_wrap *bcs; |
1028 | int endp; | ||
1028 | int len; | 1029 | int len; |
1029 | int rc; | 1030 | int rc; |
1030 | 1031 | ||
@@ -1033,6 +1034,10 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd) | |||
1033 | return; | 1034 | return; |
1034 | } | 1035 | } |
1035 | 1036 | ||
1037 | endp = usb_pipeendpoint(sc->last_pipe); | ||
1038 | if (usb_pipein(sc->last_pipe)) | ||
1039 | endp |= USB_DIR_IN; | ||
1040 | |||
1036 | if (cmd->state == UB_CMDST_CLEAR) { | 1041 | if (cmd->state == UB_CMDST_CLEAR) { |
1037 | if (urb->status == -EPIPE) { | 1042 | if (urb->status == -EPIPE) { |
1038 | /* | 1043 | /* |
@@ -1048,9 +1053,7 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd) | |||
1048 | * We ignore the result for the halt clear. | 1053 | * We ignore the result for the halt clear. |
1049 | */ | 1054 | */ |
1050 | 1055 | ||
1051 | /* reset the endpoint toggle */ | 1056 | usb_reset_endpoint(sc->dev, endp); |
1052 | usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe), | ||
1053 | usb_pipeout(sc->last_pipe), 0); | ||
1054 | 1057 | ||
1055 | ub_state_sense(sc, cmd); | 1058 | ub_state_sense(sc, cmd); |
1056 | 1059 | ||
@@ -1065,9 +1068,7 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd) | |||
1065 | * We ignore the result for the halt clear. | 1068 | * We ignore the result for the halt clear. |
1066 | */ | 1069 | */ |
1067 | 1070 | ||
1068 | /* reset the endpoint toggle */ | 1071 | usb_reset_endpoint(sc->dev, endp); |
1069 | usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe), | ||
1070 | usb_pipeout(sc->last_pipe), 0); | ||
1071 | 1072 | ||
1072 | ub_state_stat(sc, cmd); | 1073 | ub_state_stat(sc, cmd); |
1073 | 1074 | ||
@@ -1082,9 +1083,7 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd) | |||
1082 | * We ignore the result for the halt clear. | 1083 | * We ignore the result for the halt clear. |
1083 | */ | 1084 | */ |
1084 | 1085 | ||
1085 | /* reset the endpoint toggle */ | 1086 | usb_reset_endpoint(sc->dev, endp); |
1086 | usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe), | ||
1087 | usb_pipeout(sc->last_pipe), 0); | ||
1088 | 1087 | ||
1089 | ub_state_stat_counted(sc, cmd); | 1088 | ub_state_stat_counted(sc, cmd); |
1090 | 1089 | ||
@@ -2119,8 +2118,7 @@ static int ub_probe_clear_stall(struct ub_dev *sc, int stalled_pipe) | |||
2119 | del_timer_sync(&timer); | 2118 | del_timer_sync(&timer); |
2120 | usb_kill_urb(&sc->work_urb); | 2119 | usb_kill_urb(&sc->work_urb); |
2121 | 2120 | ||
2122 | /* reset the endpoint toggle */ | 2121 | usb_reset_endpoint(sc->dev, endp); |
2123 | usb_settoggle(sc->dev, endp, usb_pipeout(sc->last_pipe), 0); | ||
2124 | 2122 | ||
2125 | return 0; | 2123 | return 0; |
2126 | } | 2124 | } |
diff --git a/drivers/block/umem.c b/drivers/block/umem.c index 9744d59a69f..858c34dd032 100644 --- a/drivers/block/umem.c +++ b/drivers/block/umem.c | |||
@@ -906,6 +906,7 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, | |||
906 | goto failed_alloc; | 906 | goto failed_alloc; |
907 | 907 | ||
908 | blk_queue_make_request(card->queue, mm_make_request); | 908 | blk_queue_make_request(card->queue, mm_make_request); |
909 | card->queue->queue_lock = &card->lock; | ||
909 | card->queue->queuedata = card; | 910 | card->queue->queuedata = card; |
910 | card->queue->unplug_fn = mm_unplug_device; | 911 | card->queue->unplug_fn = mm_unplug_device; |
911 | 912 | ||
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index 10d6cbd7c05..2224b762b7f 100644 --- a/drivers/char/agp/generic.c +++ b/drivers/char/agp/generic.c | |||
@@ -1226,7 +1226,7 @@ int agp_generic_alloc_pages(struct agp_bridge_data *bridge, struct agp_memory *m | |||
1226 | int i, ret = -ENOMEM; | 1226 | int i, ret = -ENOMEM; |
1227 | 1227 | ||
1228 | for (i = 0; i < num_pages; i++) { | 1228 | for (i = 0; i < num_pages; i++) { |
1229 | page = alloc_page(GFP_KERNEL | GFP_DMA32); | 1229 | page = alloc_page(GFP_KERNEL | GFP_DMA32 | __GFP_ZERO); |
1230 | /* agp_free_memory() needs gart address */ | 1230 | /* agp_free_memory() needs gart address */ |
1231 | if (page == NULL) | 1231 | if (page == NULL) |
1232 | goto out; | 1232 | goto out; |
@@ -1257,7 +1257,7 @@ void *agp_generic_alloc_page(struct agp_bridge_data *bridge) | |||
1257 | { | 1257 | { |
1258 | struct page * page; | 1258 | struct page * page; |
1259 | 1259 | ||
1260 | page = alloc_page(GFP_KERNEL | GFP_DMA32); | 1260 | page = alloc_page(GFP_KERNEL | GFP_DMA32 | __GFP_ZERO); |
1261 | if (page == NULL) | 1261 | if (page == NULL) |
1262 | return NULL; | 1262 | return NULL; |
1263 | 1263 | ||
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index 9d9490e22e0..3686912427b 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c | |||
@@ -2131,6 +2131,8 @@ static const struct intel_driver_description { | |||
2131 | { PCI_DEVICE_ID_INTEL_82845G_HB, PCI_DEVICE_ID_INTEL_82845G_IG, 0, "830M", | 2131 | { PCI_DEVICE_ID_INTEL_82845G_HB, PCI_DEVICE_ID_INTEL_82845G_IG, 0, "830M", |
2132 | &intel_845_driver, &intel_830_driver }, | 2132 | &intel_845_driver, &intel_830_driver }, |
2133 | { PCI_DEVICE_ID_INTEL_82850_HB, 0, 0, "i850", &intel_850_driver, NULL }, | 2133 | { PCI_DEVICE_ID_INTEL_82850_HB, 0, 0, "i850", &intel_850_driver, NULL }, |
2134 | { PCI_DEVICE_ID_INTEL_82854_HB, PCI_DEVICE_ID_INTEL_82854_IG, 0, "854", | ||
2135 | &intel_845_driver, &intel_830_driver }, | ||
2134 | { PCI_DEVICE_ID_INTEL_82855PM_HB, 0, 0, "855PM", &intel_845_driver, NULL }, | 2136 | { PCI_DEVICE_ID_INTEL_82855PM_HB, 0, 0, "855PM", &intel_845_driver, NULL }, |
2135 | { PCI_DEVICE_ID_INTEL_82855GM_HB, PCI_DEVICE_ID_INTEL_82855GM_IG, 0, "855GM", | 2137 | { PCI_DEVICE_ID_INTEL_82855GM_HB, PCI_DEVICE_ID_INTEL_82855GM_IG, 0, "855GM", |
2136 | &intel_845_driver, &intel_830_driver }, | 2138 | &intel_845_driver, &intel_830_driver }, |
@@ -2355,6 +2357,7 @@ static struct pci_device_id agp_intel_pci_table[] = { | |||
2355 | ID(PCI_DEVICE_ID_INTEL_82845_HB), | 2357 | ID(PCI_DEVICE_ID_INTEL_82845_HB), |
2356 | ID(PCI_DEVICE_ID_INTEL_82845G_HB), | 2358 | ID(PCI_DEVICE_ID_INTEL_82845G_HB), |
2357 | ID(PCI_DEVICE_ID_INTEL_82850_HB), | 2359 | ID(PCI_DEVICE_ID_INTEL_82850_HB), |
2360 | ID(PCI_DEVICE_ID_INTEL_82854_HB), | ||
2358 | ID(PCI_DEVICE_ID_INTEL_82855PM_HB), | 2361 | ID(PCI_DEVICE_ID_INTEL_82855PM_HB), |
2359 | ID(PCI_DEVICE_ID_INTEL_82855GM_HB), | 2362 | ID(PCI_DEVICE_ID_INTEL_82855GM_HB), |
2360 | ID(PCI_DEVICE_ID_INTEL_82860_HB), | 2363 | ID(PCI_DEVICE_ID_INTEL_82860_HB), |
diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c index 50dfa3bc71c..340ba4f9dc5 100644 --- a/drivers/char/hpet.c +++ b/drivers/char/hpet.c | |||
@@ -72,7 +72,7 @@ static u32 hpet_nhpet, hpet_max_freq = HPET_USER_FREQ; | |||
72 | #ifdef CONFIG_IA64 | 72 | #ifdef CONFIG_IA64 |
73 | static void __iomem *hpet_mctr; | 73 | static void __iomem *hpet_mctr; |
74 | 74 | ||
75 | static cycle_t read_hpet(void) | 75 | static cycle_t read_hpet(struct clocksource *cs) |
76 | { | 76 | { |
77 | return (cycle_t)read_counter((void __iomem *)hpet_mctr); | 77 | return (cycle_t)read_counter((void __iomem *)hpet_mctr); |
78 | } | 78 | } |
diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c index d0e563e4fc3..86e83f88313 100644 --- a/drivers/char/hw_random/virtio-rng.c +++ b/drivers/char/hw_random/virtio-rng.c | |||
@@ -37,9 +37,9 @@ static void random_recv_done(struct virtqueue *vq) | |||
37 | { | 37 | { |
38 | int len; | 38 | int len; |
39 | 39 | ||
40 | /* We never get spurious callbacks. */ | 40 | /* We can get spurious callbacks, e.g. shared IRQs + virtio_pci. */ |
41 | if (!vq->vq_ops->get_buf(vq, &len)) | 41 | if (!vq->vq_ops->get_buf(vq, &len)) |
42 | BUG(); | 42 | return; |
43 | 43 | ||
44 | data_left = len / sizeof(random_data[0]); | 44 | data_left = len / sizeof(random_data[0]); |
45 | complete(&have_data); | 45 | complete(&have_data); |
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index e93fc8d22fb..aa83a0865ec 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c | |||
@@ -285,6 +285,11 @@ enum ipmi_stat_indexes { | |||
285 | /* Events that were received with the proper format. */ | 285 | /* Events that were received with the proper format. */ |
286 | IPMI_STAT_events, | 286 | IPMI_STAT_events, |
287 | 287 | ||
288 | /* Retransmissions on IPMB that failed. */ | ||
289 | IPMI_STAT_dropped_rexmit_ipmb_commands, | ||
290 | |||
291 | /* Retransmissions on LAN that failed. */ | ||
292 | IPMI_STAT_dropped_rexmit_lan_commands, | ||
288 | 293 | ||
289 | /* This *must* remain last, add new values above this. */ | 294 | /* This *must* remain last, add new values above this. */ |
290 | IPMI_NUM_STATS | 295 | IPMI_NUM_STATS |
@@ -445,6 +450,20 @@ static DEFINE_MUTEX(smi_watchers_mutex); | |||
445 | #define ipmi_get_stat(intf, stat) \ | 450 | #define ipmi_get_stat(intf, stat) \ |
446 | ((unsigned int) atomic_read(&(intf)->stats[IPMI_STAT_ ## stat])) | 451 | ((unsigned int) atomic_read(&(intf)->stats[IPMI_STAT_ ## stat])) |
447 | 452 | ||
453 | static int is_lan_addr(struct ipmi_addr *addr) | ||
454 | { | ||
455 | return addr->addr_type == IPMI_LAN_ADDR_TYPE; | ||
456 | } | ||
457 | |||
458 | static int is_ipmb_addr(struct ipmi_addr *addr) | ||
459 | { | ||
460 | return addr->addr_type == IPMI_IPMB_ADDR_TYPE; | ||
461 | } | ||
462 | |||
463 | static int is_ipmb_bcast_addr(struct ipmi_addr *addr) | ||
464 | { | ||
465 | return addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE; | ||
466 | } | ||
448 | 467 | ||
449 | static void free_recv_msg_list(struct list_head *q) | 468 | static void free_recv_msg_list(struct list_head *q) |
450 | { | 469 | { |
@@ -601,8 +620,7 @@ ipmi_addr_equal(struct ipmi_addr *addr1, struct ipmi_addr *addr2) | |||
601 | return (smi_addr1->lun == smi_addr2->lun); | 620 | return (smi_addr1->lun == smi_addr2->lun); |
602 | } | 621 | } |
603 | 622 | ||
604 | if ((addr1->addr_type == IPMI_IPMB_ADDR_TYPE) | 623 | if (is_ipmb_addr(addr1) || is_ipmb_bcast_addr(addr1)) { |
605 | || (addr1->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE)) { | ||
606 | struct ipmi_ipmb_addr *ipmb_addr1 | 624 | struct ipmi_ipmb_addr *ipmb_addr1 |
607 | = (struct ipmi_ipmb_addr *) addr1; | 625 | = (struct ipmi_ipmb_addr *) addr1; |
608 | struct ipmi_ipmb_addr *ipmb_addr2 | 626 | struct ipmi_ipmb_addr *ipmb_addr2 |
@@ -612,7 +630,7 @@ ipmi_addr_equal(struct ipmi_addr *addr1, struct ipmi_addr *addr2) | |||
612 | && (ipmb_addr1->lun == ipmb_addr2->lun)); | 630 | && (ipmb_addr1->lun == ipmb_addr2->lun)); |
613 | } | 631 | } |
614 | 632 | ||
615 | if (addr1->addr_type == IPMI_LAN_ADDR_TYPE) { | 633 | if (is_lan_addr(addr1)) { |
616 | struct ipmi_lan_addr *lan_addr1 | 634 | struct ipmi_lan_addr *lan_addr1 |
617 | = (struct ipmi_lan_addr *) addr1; | 635 | = (struct ipmi_lan_addr *) addr1; |
618 | struct ipmi_lan_addr *lan_addr2 | 636 | struct ipmi_lan_addr *lan_addr2 |
@@ -644,14 +662,13 @@ int ipmi_validate_addr(struct ipmi_addr *addr, int len) | |||
644 | || (addr->channel < 0)) | 662 | || (addr->channel < 0)) |
645 | return -EINVAL; | 663 | return -EINVAL; |
646 | 664 | ||
647 | if ((addr->addr_type == IPMI_IPMB_ADDR_TYPE) | 665 | if (is_ipmb_addr(addr) || is_ipmb_bcast_addr(addr)) { |
648 | || (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE)) { | ||
649 | if (len < sizeof(struct ipmi_ipmb_addr)) | 666 | if (len < sizeof(struct ipmi_ipmb_addr)) |
650 | return -EINVAL; | 667 | return -EINVAL; |
651 | return 0; | 668 | return 0; |
652 | } | 669 | } |
653 | 670 | ||
654 | if (addr->addr_type == IPMI_LAN_ADDR_TYPE) { | 671 | if (is_lan_addr(addr)) { |
655 | if (len < sizeof(struct ipmi_lan_addr)) | 672 | if (len < sizeof(struct ipmi_lan_addr)) |
656 | return -EINVAL; | 673 | return -EINVAL; |
657 | return 0; | 674 | return 0; |
@@ -1503,8 +1520,7 @@ static int i_ipmi_request(ipmi_user_t user, | |||
1503 | memcpy(&(smi_msg->data[2]), msg->data, msg->data_len); | 1520 | memcpy(&(smi_msg->data[2]), msg->data, msg->data_len); |
1504 | smi_msg->data_size = msg->data_len + 2; | 1521 | smi_msg->data_size = msg->data_len + 2; |
1505 | ipmi_inc_stat(intf, sent_local_commands); | 1522 | ipmi_inc_stat(intf, sent_local_commands); |
1506 | } else if ((addr->addr_type == IPMI_IPMB_ADDR_TYPE) | 1523 | } else if (is_ipmb_addr(addr) || is_ipmb_bcast_addr(addr)) { |
1507 | || (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE)) { | ||
1508 | struct ipmi_ipmb_addr *ipmb_addr; | 1524 | struct ipmi_ipmb_addr *ipmb_addr; |
1509 | unsigned char ipmb_seq; | 1525 | unsigned char ipmb_seq; |
1510 | long seqid; | 1526 | long seqid; |
@@ -1583,8 +1599,6 @@ static int i_ipmi_request(ipmi_user_t user, | |||
1583 | 1599 | ||
1584 | spin_lock_irqsave(&(intf->seq_lock), flags); | 1600 | spin_lock_irqsave(&(intf->seq_lock), flags); |
1585 | 1601 | ||
1586 | ipmi_inc_stat(intf, sent_ipmb_commands); | ||
1587 | |||
1588 | /* | 1602 | /* |
1589 | * Create a sequence number with a 1 second | 1603 | * Create a sequence number with a 1 second |
1590 | * timeout and 4 retries. | 1604 | * timeout and 4 retries. |
@@ -1606,6 +1620,8 @@ static int i_ipmi_request(ipmi_user_t user, | |||
1606 | goto out_err; | 1620 | goto out_err; |
1607 | } | 1621 | } |
1608 | 1622 | ||
1623 | ipmi_inc_stat(intf, sent_ipmb_commands); | ||
1624 | |||
1609 | /* | 1625 | /* |
1610 | * Store the sequence number in the message, | 1626 | * Store the sequence number in the message, |
1611 | * so that when the send message response | 1627 | * so that when the send message response |
@@ -1635,7 +1651,7 @@ static int i_ipmi_request(ipmi_user_t user, | |||
1635 | */ | 1651 | */ |
1636 | spin_unlock_irqrestore(&(intf->seq_lock), flags); | 1652 | spin_unlock_irqrestore(&(intf->seq_lock), flags); |
1637 | } | 1653 | } |
1638 | } else if (addr->addr_type == IPMI_LAN_ADDR_TYPE) { | 1654 | } else if (is_lan_addr(addr)) { |
1639 | struct ipmi_lan_addr *lan_addr; | 1655 | struct ipmi_lan_addr *lan_addr; |
1640 | unsigned char ipmb_seq; | 1656 | unsigned char ipmb_seq; |
1641 | long seqid; | 1657 | long seqid; |
@@ -1696,8 +1712,6 @@ static int i_ipmi_request(ipmi_user_t user, | |||
1696 | 1712 | ||
1697 | spin_lock_irqsave(&(intf->seq_lock), flags); | 1713 | spin_lock_irqsave(&(intf->seq_lock), flags); |
1698 | 1714 | ||
1699 | ipmi_inc_stat(intf, sent_lan_commands); | ||
1700 | |||
1701 | /* | 1715 | /* |
1702 | * Create a sequence number with a 1 second | 1716 | * Create a sequence number with a 1 second |
1703 | * timeout and 4 retries. | 1717 | * timeout and 4 retries. |
@@ -1719,6 +1733,8 @@ static int i_ipmi_request(ipmi_user_t user, | |||
1719 | goto out_err; | 1733 | goto out_err; |
1720 | } | 1734 | } |
1721 | 1735 | ||
1736 | ipmi_inc_stat(intf, sent_lan_commands); | ||
1737 | |||
1722 | /* | 1738 | /* |
1723 | * Store the sequence number in the message, | 1739 | * Store the sequence number in the message, |
1724 | * so that when the send message response | 1740 | * so that when the send message response |
@@ -1937,6 +1953,10 @@ static int stat_file_read_proc(char *page, char **start, off_t off, | |||
1937 | ipmi_get_stat(intf, invalid_events)); | 1953 | ipmi_get_stat(intf, invalid_events)); |
1938 | out += sprintf(out, "events: %u\n", | 1954 | out += sprintf(out, "events: %u\n", |
1939 | ipmi_get_stat(intf, events)); | 1955 | ipmi_get_stat(intf, events)); |
1956 | out += sprintf(out, "failed rexmit LAN msgs: %u\n", | ||
1957 | ipmi_get_stat(intf, dropped_rexmit_lan_commands)); | ||
1958 | out += sprintf(out, "failed rexmit IPMB msgs: %u\n", | ||
1959 | ipmi_get_stat(intf, dropped_rexmit_ipmb_commands)); | ||
1940 | 1960 | ||
1941 | return (out - ((char *) page)); | 1961 | return (out - ((char *) page)); |
1942 | } | 1962 | } |
@@ -3264,6 +3284,114 @@ static int handle_lan_get_msg_cmd(ipmi_smi_t intf, | |||
3264 | return rv; | 3284 | return rv; |
3265 | } | 3285 | } |
3266 | 3286 | ||
3287 | /* | ||
3288 | * This routine will handle "Get Message" command responses with | ||
3289 | * channels that use an OEM Medium. The message format belongs to | ||
3290 | * the OEM. See IPMI 2.0 specification, Chapter 6 and | ||
3291 | * Chapter 22, sections 22.6 and 22.24 for more details. | ||
3292 | */ | ||
3293 | static int handle_oem_get_msg_cmd(ipmi_smi_t intf, | ||
3294 | struct ipmi_smi_msg *msg) | ||
3295 | { | ||
3296 | struct cmd_rcvr *rcvr; | ||
3297 | int rv = 0; | ||
3298 | unsigned char netfn; | ||
3299 | unsigned char cmd; | ||
3300 | unsigned char chan; | ||
3301 | ipmi_user_t user = NULL; | ||
3302 | struct ipmi_system_interface_addr *smi_addr; | ||
3303 | struct ipmi_recv_msg *recv_msg; | ||
3304 | |||
3305 | /* | ||
3306 | * We expect the OEM SW to perform error checking | ||
3307 | * so we just do some basic sanity checks | ||
3308 | */ | ||
3309 | if (msg->rsp_size < 4) { | ||
3310 | /* Message not big enough, just ignore it. */ | ||
3311 | ipmi_inc_stat(intf, invalid_commands); | ||
3312 | return 0; | ||
3313 | } | ||
3314 | |||
3315 | if (msg->rsp[2] != 0) { | ||
3316 | /* An error getting the response, just ignore it. */ | ||
3317 | return 0; | ||
3318 | } | ||
3319 | |||
3320 | /* | ||
3321 | * This is an OEM Message so the OEM needs to know how | ||
3322 | * handle the message. We do no interpretation. | ||
3323 | */ | ||
3324 | netfn = msg->rsp[0] >> 2; | ||
3325 | cmd = msg->rsp[1]; | ||
3326 | chan = msg->rsp[3] & 0xf; | ||
3327 | |||
3328 | rcu_read_lock(); | ||
3329 | rcvr = find_cmd_rcvr(intf, netfn, cmd, chan); | ||
3330 | if (rcvr) { | ||
3331 | user = rcvr->user; | ||
3332 | kref_get(&user->refcount); | ||
3333 | } else | ||
3334 | user = NULL; | ||
3335 | rcu_read_unlock(); | ||
3336 | |||
3337 | if (user == NULL) { | ||
3338 | /* We didn't find a user, just give up. */ | ||
3339 | ipmi_inc_stat(intf, unhandled_commands); | ||
3340 | |||
3341 | /* | ||
3342 | * Don't do anything with these messages, just allow | ||
3343 | * them to be freed. | ||
3344 | */ | ||
3345 | |||
3346 | rv = 0; | ||
3347 | } else { | ||
3348 | /* Deliver the message to the user. */ | ||
3349 | ipmi_inc_stat(intf, handled_commands); | ||
3350 | |||
3351 | recv_msg = ipmi_alloc_recv_msg(); | ||
3352 | if (!recv_msg) { | ||
3353 | /* | ||
3354 | * We couldn't allocate memory for the | ||
3355 | * message, so requeue it for handling | ||
3356 | * later. | ||
3357 | */ | ||
3358 | rv = 1; | ||
3359 | kref_put(&user->refcount, free_user); | ||
3360 | } else { | ||
3361 | /* | ||
3362 | * OEM Messages are expected to be delivered via | ||
3363 | * the system interface to SMS software. We might | ||
3364 | * need to visit this again depending on OEM | ||
3365 | * requirements | ||
3366 | */ | ||
3367 | smi_addr = ((struct ipmi_system_interface_addr *) | ||
3368 | &(recv_msg->addr)); | ||
3369 | smi_addr->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE; | ||
3370 | smi_addr->channel = IPMI_BMC_CHANNEL; | ||
3371 | smi_addr->lun = msg->rsp[0] & 3; | ||
3372 | |||
3373 | recv_msg->user = user; | ||
3374 | recv_msg->user_msg_data = NULL; | ||
3375 | recv_msg->recv_type = IPMI_OEM_RECV_TYPE; | ||
3376 | recv_msg->msg.netfn = msg->rsp[0] >> 2; | ||
3377 | recv_msg->msg.cmd = msg->rsp[1]; | ||
3378 | recv_msg->msg.data = recv_msg->msg_data; | ||
3379 | |||
3380 | /* | ||
3381 | * The message starts at byte 4 which follows the | ||
3382 | * the Channel Byte in the "GET MESSAGE" command | ||
3383 | */ | ||
3384 | recv_msg->msg.data_len = msg->rsp_size - 4; | ||
3385 | memcpy(recv_msg->msg_data, | ||
3386 | &(msg->rsp[4]), | ||
3387 | msg->rsp_size - 4); | ||
3388 | deliver_response(recv_msg); | ||
3389 | } | ||
3390 | } | ||
3391 | |||
3392 | return rv; | ||
3393 | } | ||
3394 | |||
3267 | static void copy_event_into_recv_msg(struct ipmi_recv_msg *recv_msg, | 3395 | static void copy_event_into_recv_msg(struct ipmi_recv_msg *recv_msg, |
3268 | struct ipmi_smi_msg *msg) | 3396 | struct ipmi_smi_msg *msg) |
3269 | { | 3397 | { |
@@ -3519,6 +3647,17 @@ static int handle_new_recv_msg(ipmi_smi_t intf, | |||
3519 | goto out; | 3647 | goto out; |
3520 | } | 3648 | } |
3521 | 3649 | ||
3650 | /* | ||
3651 | ** We need to make sure the channels have been initialized. | ||
3652 | ** The channel_handler routine will set the "curr_channel" | ||
3653 | ** equal to or greater than IPMI_MAX_CHANNELS when all the | ||
3654 | ** channels for this interface have been initialized. | ||
3655 | */ | ||
3656 | if (intf->curr_channel < IPMI_MAX_CHANNELS) { | ||
3657 | requeue = 1; /* Just put the message back for now */ | ||
3658 | goto out; | ||
3659 | } | ||
3660 | |||
3522 | switch (intf->channels[chan].medium) { | 3661 | switch (intf->channels[chan].medium) { |
3523 | case IPMI_CHANNEL_MEDIUM_IPMB: | 3662 | case IPMI_CHANNEL_MEDIUM_IPMB: |
3524 | if (msg->rsp[4] & 0x04) { | 3663 | if (msg->rsp[4] & 0x04) { |
@@ -3554,11 +3693,20 @@ static int handle_new_recv_msg(ipmi_smi_t intf, | |||
3554 | break; | 3693 | break; |
3555 | 3694 | ||
3556 | default: | 3695 | default: |
3557 | /* | 3696 | /* Check for OEM Channels. Clients had better |
3558 | * We don't handle the channel type, so just | 3697 | register for these commands. */ |
3559 | * free the message. | 3698 | if ((intf->channels[chan].medium |
3560 | */ | 3699 | >= IPMI_CHANNEL_MEDIUM_OEM_MIN) |
3561 | requeue = 0; | 3700 | && (intf->channels[chan].medium |
3701 | <= IPMI_CHANNEL_MEDIUM_OEM_MAX)) { | ||
3702 | requeue = handle_oem_get_msg_cmd(intf, msg); | ||
3703 | } else { | ||
3704 | /* | ||
3705 | * We don't handle the channel type, so just | ||
3706 | * free the message. | ||
3707 | */ | ||
3708 | requeue = 0; | ||
3709 | } | ||
3562 | } | 3710 | } |
3563 | 3711 | ||
3564 | } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2)) | 3712 | } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2)) |
@@ -3730,7 +3878,7 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent, | |||
3730 | list_add_tail(&msg->link, timeouts); | 3878 | list_add_tail(&msg->link, timeouts); |
3731 | if (ent->broadcast) | 3879 | if (ent->broadcast) |
3732 | ipmi_inc_stat(intf, timed_out_ipmb_broadcasts); | 3880 | ipmi_inc_stat(intf, timed_out_ipmb_broadcasts); |
3733 | else if (ent->recv_msg->addr.addr_type == IPMI_LAN_ADDR_TYPE) | 3881 | else if (is_lan_addr(&ent->recv_msg->addr)) |
3734 | ipmi_inc_stat(intf, timed_out_lan_commands); | 3882 | ipmi_inc_stat(intf, timed_out_lan_commands); |
3735 | else | 3883 | else |
3736 | ipmi_inc_stat(intf, timed_out_ipmb_commands); | 3884 | ipmi_inc_stat(intf, timed_out_ipmb_commands); |
@@ -3744,15 +3892,17 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent, | |||
3744 | */ | 3892 | */ |
3745 | ent->timeout = MAX_MSG_TIMEOUT; | 3893 | ent->timeout = MAX_MSG_TIMEOUT; |
3746 | ent->retries_left--; | 3894 | ent->retries_left--; |
3747 | if (ent->recv_msg->addr.addr_type == IPMI_LAN_ADDR_TYPE) | ||
3748 | ipmi_inc_stat(intf, retransmitted_lan_commands); | ||
3749 | else | ||
3750 | ipmi_inc_stat(intf, retransmitted_ipmb_commands); | ||
3751 | |||
3752 | smi_msg = smi_from_recv_msg(intf, ent->recv_msg, slot, | 3895 | smi_msg = smi_from_recv_msg(intf, ent->recv_msg, slot, |
3753 | ent->seqid); | 3896 | ent->seqid); |
3754 | if (!smi_msg) | 3897 | if (!smi_msg) { |
3898 | if (is_lan_addr(&ent->recv_msg->addr)) | ||
3899 | ipmi_inc_stat(intf, | ||
3900 | dropped_rexmit_lan_commands); | ||
3901 | else | ||
3902 | ipmi_inc_stat(intf, | ||
3903 | dropped_rexmit_ipmb_commands); | ||
3755 | return; | 3904 | return; |
3905 | } | ||
3756 | 3906 | ||
3757 | spin_unlock_irqrestore(&intf->seq_lock, *flags); | 3907 | spin_unlock_irqrestore(&intf->seq_lock, *flags); |
3758 | 3908 | ||
@@ -3764,10 +3914,17 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent, | |||
3764 | * resent. | 3914 | * resent. |
3765 | */ | 3915 | */ |
3766 | handlers = intf->handlers; | 3916 | handlers = intf->handlers; |
3767 | if (handlers) | 3917 | if (handlers) { |
3918 | if (is_lan_addr(&ent->recv_msg->addr)) | ||
3919 | ipmi_inc_stat(intf, | ||
3920 | retransmitted_lan_commands); | ||
3921 | else | ||
3922 | ipmi_inc_stat(intf, | ||
3923 | retransmitted_ipmb_commands); | ||
3924 | |||
3768 | intf->handlers->sender(intf->send_info, | 3925 | intf->handlers->sender(intf->send_info, |
3769 | smi_msg, 0); | 3926 | smi_msg, 0); |
3770 | else | 3927 | } else |
3771 | ipmi_free_smi_msg(smi_msg); | 3928 | ipmi_free_smi_msg(smi_msg); |
3772 | 3929 | ||
3773 | spin_lock_irqsave(&intf->seq_lock, *flags); | 3930 | spin_lock_irqsave(&intf->seq_lock, *flags); |
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index e58ea4cd55c..259644646b8 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c | |||
@@ -82,12 +82,6 @@ | |||
82 | #define SI_SHORT_TIMEOUT_USEC 250 /* .25ms when the SM request a | 82 | #define SI_SHORT_TIMEOUT_USEC 250 /* .25ms when the SM request a |
83 | short timeout */ | 83 | short timeout */ |
84 | 84 | ||
85 | /* Bit for BMC global enables. */ | ||
86 | #define IPMI_BMC_RCV_MSG_INTR 0x01 | ||
87 | #define IPMI_BMC_EVT_MSG_INTR 0x02 | ||
88 | #define IPMI_BMC_EVT_MSG_BUFF 0x04 | ||
89 | #define IPMI_BMC_SYS_LOG 0x08 | ||
90 | |||
91 | enum si_intf_state { | 85 | enum si_intf_state { |
92 | SI_NORMAL, | 86 | SI_NORMAL, |
93 | SI_GETTING_FLAGS, | 87 | SI_GETTING_FLAGS, |
@@ -220,6 +214,9 @@ struct smi_info { | |||
220 | OEM2_DATA_AVAIL) | 214 | OEM2_DATA_AVAIL) |
221 | unsigned char msg_flags; | 215 | unsigned char msg_flags; |
222 | 216 | ||
217 | /* Does the BMC have an event buffer? */ | ||
218 | char has_event_buffer; | ||
219 | |||
223 | /* | 220 | /* |
224 | * If set to true, this will request events the next time the | 221 | * If set to true, this will request events the next time the |
225 | * state machine is idle. | 222 | * state machine is idle. |
@@ -968,7 +965,8 @@ static void request_events(void *send_info) | |||
968 | { | 965 | { |
969 | struct smi_info *smi_info = send_info; | 966 | struct smi_info *smi_info = send_info; |
970 | 967 | ||
971 | if (atomic_read(&smi_info->stop_operation)) | 968 | if (atomic_read(&smi_info->stop_operation) || |
969 | !smi_info->has_event_buffer) | ||
972 | return; | 970 | return; |
973 | 971 | ||
974 | atomic_set(&smi_info->req_events, 1); | 972 | atomic_set(&smi_info->req_events, 1); |
@@ -2407,26 +2405,9 @@ static struct of_platform_driver ipmi_of_platform_driver = { | |||
2407 | }; | 2405 | }; |
2408 | #endif /* CONFIG_PPC_OF */ | 2406 | #endif /* CONFIG_PPC_OF */ |
2409 | 2407 | ||
2410 | 2408 | static int wait_for_msg_done(struct smi_info *smi_info) | |
2411 | static int try_get_dev_id(struct smi_info *smi_info) | ||
2412 | { | 2409 | { |
2413 | unsigned char msg[2]; | ||
2414 | unsigned char *resp; | ||
2415 | unsigned long resp_len; | ||
2416 | enum si_sm_result smi_result; | 2410 | enum si_sm_result smi_result; |
2417 | int rv = 0; | ||
2418 | |||
2419 | resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL); | ||
2420 | if (!resp) | ||
2421 | return -ENOMEM; | ||
2422 | |||
2423 | /* | ||
2424 | * Do a Get Device ID command, since it comes back with some | ||
2425 | * useful info. | ||
2426 | */ | ||
2427 | msg[0] = IPMI_NETFN_APP_REQUEST << 2; | ||
2428 | msg[1] = IPMI_GET_DEVICE_ID_CMD; | ||
2429 | smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); | ||
2430 | 2411 | ||
2431 | smi_result = smi_info->handlers->event(smi_info->si_sm, 0); | 2412 | smi_result = smi_info->handlers->event(smi_info->si_sm, 0); |
2432 | for (;;) { | 2413 | for (;;) { |
@@ -2441,16 +2422,39 @@ static int try_get_dev_id(struct smi_info *smi_info) | |||
2441 | } else | 2422 | } else |
2442 | break; | 2423 | break; |
2443 | } | 2424 | } |
2444 | if (smi_result == SI_SM_HOSED) { | 2425 | if (smi_result == SI_SM_HOSED) |
2445 | /* | 2426 | /* |
2446 | * We couldn't get the state machine to run, so whatever's at | 2427 | * We couldn't get the state machine to run, so whatever's at |
2447 | * the port is probably not an IPMI SMI interface. | 2428 | * the port is probably not an IPMI SMI interface. |
2448 | */ | 2429 | */ |
2449 | rv = -ENODEV; | 2430 | return -ENODEV; |
2431 | |||
2432 | return 0; | ||
2433 | } | ||
2434 | |||
2435 | static int try_get_dev_id(struct smi_info *smi_info) | ||
2436 | { | ||
2437 | unsigned char msg[2]; | ||
2438 | unsigned char *resp; | ||
2439 | unsigned long resp_len; | ||
2440 | int rv = 0; | ||
2441 | |||
2442 | resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL); | ||
2443 | if (!resp) | ||
2444 | return -ENOMEM; | ||
2445 | |||
2446 | /* | ||
2447 | * Do a Get Device ID command, since it comes back with some | ||
2448 | * useful info. | ||
2449 | */ | ||
2450 | msg[0] = IPMI_NETFN_APP_REQUEST << 2; | ||
2451 | msg[1] = IPMI_GET_DEVICE_ID_CMD; | ||
2452 | smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); | ||
2453 | |||
2454 | rv = wait_for_msg_done(smi_info); | ||
2455 | if (rv) | ||
2450 | goto out; | 2456 | goto out; |
2451 | } | ||
2452 | 2457 | ||
2453 | /* Otherwise, we got some data. */ | ||
2454 | resp_len = smi_info->handlers->get_result(smi_info->si_sm, | 2458 | resp_len = smi_info->handlers->get_result(smi_info->si_sm, |
2455 | resp, IPMI_MAX_MSG_LENGTH); | 2459 | resp, IPMI_MAX_MSG_LENGTH); |
2456 | 2460 | ||
@@ -2462,6 +2466,88 @@ static int try_get_dev_id(struct smi_info *smi_info) | |||
2462 | return rv; | 2466 | return rv; |
2463 | } | 2467 | } |
2464 | 2468 | ||
2469 | static int try_enable_event_buffer(struct smi_info *smi_info) | ||
2470 | { | ||
2471 | unsigned char msg[3]; | ||
2472 | unsigned char *resp; | ||
2473 | unsigned long resp_len; | ||
2474 | int rv = 0; | ||
2475 | |||
2476 | resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL); | ||
2477 | if (!resp) | ||
2478 | return -ENOMEM; | ||
2479 | |||
2480 | msg[0] = IPMI_NETFN_APP_REQUEST << 2; | ||
2481 | msg[1] = IPMI_GET_BMC_GLOBAL_ENABLES_CMD; | ||
2482 | smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); | ||
2483 | |||
2484 | rv = wait_for_msg_done(smi_info); | ||
2485 | if (rv) { | ||
2486 | printk(KERN_WARNING | ||
2487 | "ipmi_si: Error getting response from get global," | ||
2488 | " enables command, the event buffer is not" | ||
2489 | " enabled.\n"); | ||
2490 | goto out; | ||
2491 | } | ||
2492 | |||
2493 | resp_len = smi_info->handlers->get_result(smi_info->si_sm, | ||
2494 | resp, IPMI_MAX_MSG_LENGTH); | ||
2495 | |||
2496 | if (resp_len < 4 || | ||
2497 | resp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2 || | ||
2498 | resp[1] != IPMI_GET_BMC_GLOBAL_ENABLES_CMD || | ||
2499 | resp[2] != 0) { | ||
2500 | printk(KERN_WARNING | ||
2501 | "ipmi_si: Invalid return from get global" | ||
2502 | " enables command, cannot enable the event" | ||
2503 | " buffer.\n"); | ||
2504 | rv = -EINVAL; | ||
2505 | goto out; | ||
2506 | } | ||
2507 | |||
2508 | if (resp[3] & IPMI_BMC_EVT_MSG_BUFF) | ||
2509 | /* buffer is already enabled, nothing to do. */ | ||
2510 | goto out; | ||
2511 | |||
2512 | msg[0] = IPMI_NETFN_APP_REQUEST << 2; | ||
2513 | msg[1] = IPMI_SET_BMC_GLOBAL_ENABLES_CMD; | ||
2514 | msg[2] = resp[3] | IPMI_BMC_EVT_MSG_BUFF; | ||
2515 | smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3); | ||
2516 | |||
2517 | rv = wait_for_msg_done(smi_info); | ||
2518 | if (rv) { | ||
2519 | printk(KERN_WARNING | ||
2520 | "ipmi_si: Error getting response from set global," | ||
2521 | " enables command, the event buffer is not" | ||
2522 | " enabled.\n"); | ||
2523 | goto out; | ||
2524 | } | ||
2525 | |||
2526 | resp_len = smi_info->handlers->get_result(smi_info->si_sm, | ||
2527 | resp, IPMI_MAX_MSG_LENGTH); | ||
2528 | |||
2529 | if (resp_len < 3 || | ||
2530 | resp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2 || | ||
2531 | resp[1] != IPMI_SET_BMC_GLOBAL_ENABLES_CMD) { | ||
2532 | printk(KERN_WARNING | ||
2533 | "ipmi_si: Invalid return from get global," | ||
2534 | "enables command, not enable the event" | ||
2535 | " buffer.\n"); | ||
2536 | rv = -EINVAL; | ||
2537 | goto out; | ||
2538 | } | ||
2539 | |||
2540 | if (resp[2] != 0) | ||
2541 | /* | ||
2542 | * An error when setting the event buffer bit means | ||
2543 | * that the event buffer is not supported. | ||
2544 | */ | ||
2545 | rv = -ENOENT; | ||
2546 | out: | ||
2547 | kfree(resp); | ||
2548 | return rv; | ||
2549 | } | ||
2550 | |||
2465 | static int type_file_read_proc(char *page, char **start, off_t off, | 2551 | static int type_file_read_proc(char *page, char **start, off_t off, |
2466 | int count, int *eof, void *data) | 2552 | int count, int *eof, void *data) |
2467 | { | 2553 | { |
@@ -2847,6 +2933,10 @@ static int try_smi_init(struct smi_info *new_smi) | |||
2847 | new_smi->intf_num = smi_num; | 2933 | new_smi->intf_num = smi_num; |
2848 | smi_num++; | 2934 | smi_num++; |
2849 | 2935 | ||
2936 | rv = try_enable_event_buffer(new_smi); | ||
2937 | if (rv == 0) | ||
2938 | new_smi->has_event_buffer = 1; | ||
2939 | |||
2850 | /* | 2940 | /* |
2851 | * Start clearing the flags before we enable interrupts or the | 2941 | * Start clearing the flags before we enable interrupts or the |
2852 | * timer to avoid racing with the timer. | 2942 | * timer to avoid racing with the timer. |
@@ -2863,7 +2953,7 @@ static int try_smi_init(struct smi_info *new_smi) | |||
2863 | */ | 2953 | */ |
2864 | new_smi->pdev = platform_device_alloc("ipmi_si", | 2954 | new_smi->pdev = platform_device_alloc("ipmi_si", |
2865 | new_smi->intf_num); | 2955 | new_smi->intf_num); |
2866 | if (rv) { | 2956 | if (!new_smi->pdev) { |
2867 | printk(KERN_ERR | 2957 | printk(KERN_ERR |
2868 | "ipmi_si_intf:" | 2958 | "ipmi_si_intf:" |
2869 | " Unable to allocate platform device\n"); | 2959 | " Unable to allocate platform device\n"); |
diff --git a/drivers/char/mem.c b/drivers/char/mem.c index 3586b3b3df3..8f05c38c2f0 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c | |||
@@ -301,33 +301,7 @@ static inline int private_mapping_ok(struct vm_area_struct *vma) | |||
301 | } | 301 | } |
302 | #endif | 302 | #endif |
303 | 303 | ||
304 | void __attribute__((weak)) | ||
305 | map_devmem(unsigned long pfn, unsigned long len, pgprot_t prot) | ||
306 | { | ||
307 | /* nothing. architectures can override. */ | ||
308 | } | ||
309 | |||
310 | void __attribute__((weak)) | ||
311 | unmap_devmem(unsigned long pfn, unsigned long len, pgprot_t prot) | ||
312 | { | ||
313 | /* nothing. architectures can override. */ | ||
314 | } | ||
315 | |||
316 | static void mmap_mem_open(struct vm_area_struct *vma) | ||
317 | { | ||
318 | map_devmem(vma->vm_pgoff, vma->vm_end - vma->vm_start, | ||
319 | vma->vm_page_prot); | ||
320 | } | ||
321 | |||
322 | static void mmap_mem_close(struct vm_area_struct *vma) | ||
323 | { | ||
324 | unmap_devmem(vma->vm_pgoff, vma->vm_end - vma->vm_start, | ||
325 | vma->vm_page_prot); | ||
326 | } | ||
327 | |||
328 | static struct vm_operations_struct mmap_mem_ops = { | 304 | static struct vm_operations_struct mmap_mem_ops = { |
329 | .open = mmap_mem_open, | ||
330 | .close = mmap_mem_close, | ||
331 | #ifdef CONFIG_HAVE_IOREMAP_PROT | 305 | #ifdef CONFIG_HAVE_IOREMAP_PROT |
332 | .access = generic_access_phys | 306 | .access = generic_access_phys |
333 | #endif | 307 | #endif |
@@ -362,7 +336,6 @@ static int mmap_mem(struct file * file, struct vm_area_struct * vma) | |||
362 | vma->vm_pgoff, | 336 | vma->vm_pgoff, |
363 | size, | 337 | size, |
364 | vma->vm_page_prot)) { | 338 | vma->vm_page_prot)) { |
365 | unmap_devmem(vma->vm_pgoff, size, vma->vm_page_prot); | ||
366 | return -EAGAIN; | 339 | return -EAGAIN; |
367 | } | 340 | } |
368 | return 0; | 341 | return 0; |
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c index 6de020d078e..b0a6a3e5192 100644 --- a/drivers/char/sysrq.c +++ b/drivers/char/sysrq.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <linux/vt_kern.h> | 35 | #include <linux/vt_kern.h> |
36 | #include <linux/workqueue.h> | 36 | #include <linux/workqueue.h> |
37 | #include <linux/kexec.h> | 37 | #include <linux/kexec.h> |
38 | #include <linux/interrupt.h> | ||
39 | #include <linux/hrtimer.h> | 38 | #include <linux/hrtimer.h> |
40 | #include <linux/oom.h> | 39 | #include <linux/oom.h> |
41 | 40 | ||
diff --git a/drivers/char/vt.c b/drivers/char/vt.c index 2c1d133819b..08151d4de48 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c | |||
@@ -2274,7 +2274,7 @@ rescan_last_byte: | |||
2274 | continue; /* nothing to display */ | 2274 | continue; /* nothing to display */ |
2275 | } | 2275 | } |
2276 | /* Glyph not found */ | 2276 | /* Glyph not found */ |
2277 | if ((!(vc->vc_utf && !vc->vc_disp_ctrl) && c < 128) && !(c & ~charmask)) { | 2277 | if ((!(vc->vc_utf && !vc->vc_disp_ctrl) || c < 128) && !(c & ~charmask)) { |
2278 | /* In legacy mode use the glyph we get by a 1:1 mapping. | 2278 | /* In legacy mode use the glyph we get by a 1:1 mapping. |
2279 | This would make absolutely no sense with Unicode in mind, | 2279 | This would make absolutely no sense with Unicode in mind, |
2280 | but do this for ASCII characters since a font may lack | 2280 | but do this for ASCII characters since a font may lack |
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index ee19b6e8fcb..40bd8c61c7d 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c | |||
@@ -57,7 +57,7 @@ u32 acpi_pm_read_verified(void) | |||
57 | return v2; | 57 | return v2; |
58 | } | 58 | } |
59 | 59 | ||
60 | static cycle_t acpi_pm_read(void) | 60 | static cycle_t acpi_pm_read(struct clocksource *cs) |
61 | { | 61 | { |
62 | return (cycle_t)read_pmtmr(); | 62 | return (cycle_t)read_pmtmr(); |
63 | } | 63 | } |
@@ -83,7 +83,7 @@ static int __init acpi_pm_good_setup(char *__str) | |||
83 | } | 83 | } |
84 | __setup("acpi_pm_good", acpi_pm_good_setup); | 84 | __setup("acpi_pm_good", acpi_pm_good_setup); |
85 | 85 | ||
86 | static cycle_t acpi_pm_read_slow(void) | 86 | static cycle_t acpi_pm_read_slow(struct clocksource *cs) |
87 | { | 87 | { |
88 | return (cycle_t)acpi_pm_read_verified(); | 88 | return (cycle_t)acpi_pm_read_verified(); |
89 | } | 89 | } |
@@ -156,9 +156,9 @@ static int verify_pmtmr_rate(void) | |||
156 | unsigned long count, delta; | 156 | unsigned long count, delta; |
157 | 157 | ||
158 | mach_prepare_counter(); | 158 | mach_prepare_counter(); |
159 | value1 = clocksource_acpi_pm.read(); | 159 | value1 = clocksource_acpi_pm.read(&clocksource_acpi_pm); |
160 | mach_countup(&count); | 160 | mach_countup(&count); |
161 | value2 = clocksource_acpi_pm.read(); | 161 | value2 = clocksource_acpi_pm.read(&clocksource_acpi_pm); |
162 | delta = (value2 - value1) & ACPI_PM_MASK; | 162 | delta = (value2 - value1) & ACPI_PM_MASK; |
163 | 163 | ||
164 | /* Check that the PMTMR delta is within 5% of what we expect */ | 164 | /* Check that the PMTMR delta is within 5% of what we expect */ |
@@ -195,9 +195,9 @@ static int __init init_acpi_pm_clocksource(void) | |||
195 | /* "verify" this timing source: */ | 195 | /* "verify" this timing source: */ |
196 | for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { | 196 | for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { |
197 | udelay(100 * j); | 197 | udelay(100 * j); |
198 | value1 = clocksource_acpi_pm.read(); | 198 | value1 = clocksource_acpi_pm.read(&clocksource_acpi_pm); |
199 | for (i = 0; i < ACPI_PM_READ_CHECKS; i++) { | 199 | for (i = 0; i < ACPI_PM_READ_CHECKS; i++) { |
200 | value2 = clocksource_acpi_pm.read(); | 200 | value2 = clocksource_acpi_pm.read(&clocksource_acpi_pm); |
201 | if (value2 == value1) | 201 | if (value2 == value1) |
202 | continue; | 202 | continue; |
203 | if (value2 > value1) | 203 | if (value2 > value1) |
diff --git a/drivers/clocksource/cyclone.c b/drivers/clocksource/cyclone.c index 8615059a872..64e528e8bfa 100644 --- a/drivers/clocksource/cyclone.c +++ b/drivers/clocksource/cyclone.c | |||
@@ -19,7 +19,7 @@ | |||
19 | int use_cyclone = 0; | 19 | int use_cyclone = 0; |
20 | static void __iomem *cyclone_ptr; | 20 | static void __iomem *cyclone_ptr; |
21 | 21 | ||
22 | static cycle_t read_cyclone(void) | 22 | static cycle_t read_cyclone(struct clocksource *cs) |
23 | { | 23 | { |
24 | return (cycle_t)readl(cyclone_ptr); | 24 | return (cycle_t)readl(cyclone_ptr); |
25 | } | 25 | } |
diff --git a/drivers/clocksource/scx200_hrt.c b/drivers/clocksource/scx200_hrt.c index b92da677aa5..27f4d9637b6 100644 --- a/drivers/clocksource/scx200_hrt.c +++ b/drivers/clocksource/scx200_hrt.c | |||
@@ -43,7 +43,7 @@ MODULE_PARM_DESC(ppm, "+-adjust to actual XO freq (ppm)"); | |||
43 | /* The base timer frequency, * 27 if selected */ | 43 | /* The base timer frequency, * 27 if selected */ |
44 | #define HRT_FREQ 1000000 | 44 | #define HRT_FREQ 1000000 |
45 | 45 | ||
46 | static cycle_t read_hrt(void) | 46 | static cycle_t read_hrt(struct clocksource *cs) |
47 | { | 47 | { |
48 | /* Read the timer value */ | 48 | /* Read the timer value */ |
49 | return (cycle_t) inl(scx200_cb_base + SCx200_TIMER_OFFSET); | 49 | return (cycle_t) inl(scx200_cb_base + SCx200_TIMER_OFFSET); |
diff --git a/drivers/clocksource/tcb_clksrc.c b/drivers/clocksource/tcb_clksrc.c index 254f1064d97..01b886e6882 100644 --- a/drivers/clocksource/tcb_clksrc.c +++ b/drivers/clocksource/tcb_clksrc.c | |||
@@ -39,7 +39,7 @@ | |||
39 | 39 | ||
40 | static void __iomem *tcaddr; | 40 | static void __iomem *tcaddr; |
41 | 41 | ||
42 | static cycle_t tc_get_cycles(void) | 42 | static cycle_t tc_get_cycles(struct clocksource *cs) |
43 | { | 43 | { |
44 | unsigned long flags; | 44 | unsigned long flags; |
45 | u32 lower, upper; | 45 | u32 lower, upper; |
diff --git a/drivers/edac/edac_core.h b/drivers/edac/edac_core.h index 28f2c3f959b..6ad95c8d636 100644 --- a/drivers/edac/edac_core.h +++ b/drivers/edac/edac_core.h | |||
@@ -767,11 +767,19 @@ static inline void pci_write_bits16(struct pci_dev *pdev, int offset, | |||
767 | pci_write_config_word(pdev, offset, value); | 767 | pci_write_config_word(pdev, offset, value); |
768 | } | 768 | } |
769 | 769 | ||
770 | /* write all or some bits in a dword-register*/ | 770 | /* |
771 | * pci_write_bits32 | ||
772 | * | ||
773 | * edac local routine to do pci_write_config_dword, but adds | ||
774 | * a mask parameter. If mask is all ones, ignore the mask. | ||
775 | * Otherwise utilize the mask to isolate specified bits | ||
776 | * | ||
777 | * write all or some bits in a dword-register | ||
778 | */ | ||
771 | static inline void pci_write_bits32(struct pci_dev *pdev, int offset, | 779 | static inline void pci_write_bits32(struct pci_dev *pdev, int offset, |
772 | u32 value, u32 mask) | 780 | u32 value, u32 mask) |
773 | { | 781 | { |
774 | if (mask != 0xffff) { | 782 | if (mask != 0xffffffff) { |
775 | u32 buf; | 783 | u32 buf; |
776 | 784 | ||
777 | pci_read_config_dword(pdev, offset, &buf); | 785 | pci_read_config_dword(pdev, offset, &buf); |
diff --git a/drivers/edac/edac_device.c b/drivers/edac/edac_device.c index ca9113e1c10..a7d2c717d03 100644 --- a/drivers/edac/edac_device.c +++ b/drivers/edac/edac_device.c | |||
@@ -389,7 +389,7 @@ static void del_edac_device_from_global_list(struct edac_device_ctl_info | |||
389 | */ | 389 | */ |
390 | static void edac_device_workq_function(struct work_struct *work_req) | 390 | static void edac_device_workq_function(struct work_struct *work_req) |
391 | { | 391 | { |
392 | struct delayed_work *d_work = (struct delayed_work *)work_req; | 392 | struct delayed_work *d_work = to_delayed_work(work_req); |
393 | struct edac_device_ctl_info *edac_dev = to_edac_device_ctl_work(d_work); | 393 | struct edac_device_ctl_info *edac_dev = to_edac_device_ctl_work(d_work); |
394 | 394 | ||
395 | mutex_lock(&device_ctls_mutex); | 395 | mutex_lock(&device_ctls_mutex); |
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index 25d66940b4f..335b7ebdb11 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c | |||
@@ -260,7 +260,7 @@ static int edac_mc_assert_error_check_and_clear(void) | |||
260 | */ | 260 | */ |
261 | static void edac_mc_workq_function(struct work_struct *work_req) | 261 | static void edac_mc_workq_function(struct work_struct *work_req) |
262 | { | 262 | { |
263 | struct delayed_work *d_work = (struct delayed_work *)work_req; | 263 | struct delayed_work *d_work = to_delayed_work(work_req); |
264 | struct mem_ctl_info *mci = to_edac_mem_ctl_work(d_work); | 264 | struct mem_ctl_info *mci = to_edac_mem_ctl_work(d_work); |
265 | 265 | ||
266 | mutex_lock(&mem_ctls_mutex); | 266 | mutex_lock(&mem_ctls_mutex); |
diff --git a/drivers/edac/edac_pci.c b/drivers/edac/edac_pci.c index 5b150aea703..30b585b1d60 100644 --- a/drivers/edac/edac_pci.c +++ b/drivers/edac/edac_pci.c | |||
@@ -233,7 +233,7 @@ EXPORT_SYMBOL_GPL(edac_pci_find); | |||
233 | */ | 233 | */ |
234 | static void edac_pci_workq_function(struct work_struct *work_req) | 234 | static void edac_pci_workq_function(struct work_struct *work_req) |
235 | { | 235 | { |
236 | struct delayed_work *d_work = (struct delayed_work *)work_req; | 236 | struct delayed_work *d_work = to_delayed_work(work_req); |
237 | struct edac_pci_ctl_info *pci = to_edac_pci_ctl_work(d_work); | 237 | struct edac_pci_ctl_info *pci = to_edac_pci_ctl_work(d_work); |
238 | int msec; | 238 | int msec; |
239 | unsigned long delay; | 239 | unsigned long delay; |
diff --git a/drivers/edac/mpc85xx_edac.c b/drivers/edac/mpc85xx_edac.c index 4637a4a757d..7c8c2d72916 100644 --- a/drivers/edac/mpc85xx_edac.c +++ b/drivers/edac/mpc85xx_edac.c | |||
@@ -674,7 +674,7 @@ static void mpc85xx_mc_check(struct mem_ctl_info *mci) | |||
674 | int row_index; | 674 | int row_index; |
675 | 675 | ||
676 | err_detect = in_be32(pdata->mc_vbase + MPC85XX_MC_ERR_DETECT); | 676 | err_detect = in_be32(pdata->mc_vbase + MPC85XX_MC_ERR_DETECT); |
677 | if (err_detect) | 677 | if (!err_detect) |
678 | return; | 678 | return; |
679 | 679 | ||
680 | mpc85xx_mc_printk(mci, KERN_ERR, "Err Detect Register: %#8.8x\n", | 680 | mpc85xx_mc_printk(mci, KERN_ERR, "Err Detect Register: %#8.8x\n", |
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index d009661781b..ef878615c49 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c | |||
@@ -159,6 +159,9 @@ void drm_master_put(struct drm_master **master) | |||
159 | int drm_setmaster_ioctl(struct drm_device *dev, void *data, | 159 | int drm_setmaster_ioctl(struct drm_device *dev, void *data, |
160 | struct drm_file *file_priv) | 160 | struct drm_file *file_priv) |
161 | { | 161 | { |
162 | if (file_priv->is_master) | ||
163 | return 0; | ||
164 | |||
162 | if (file_priv->minor->master && file_priv->minor->master != file_priv->master) | 165 | if (file_priv->minor->master && file_priv->minor->master != file_priv->master) |
163 | return -EINVAL; | 166 | return -EINVAL; |
164 | 167 | ||
@@ -169,6 +172,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data, | |||
169 | file_priv->minor->master != file_priv->master) { | 172 | file_priv->minor->master != file_priv->master) { |
170 | mutex_lock(&dev->struct_mutex); | 173 | mutex_lock(&dev->struct_mutex); |
171 | file_priv->minor->master = drm_master_get(file_priv->master); | 174 | file_priv->minor->master = drm_master_get(file_priv->master); |
175 | file_priv->is_master = 1; | ||
172 | mutex_unlock(&dev->struct_mutex); | 176 | mutex_unlock(&dev->struct_mutex); |
173 | } | 177 | } |
174 | 178 | ||
@@ -178,10 +182,15 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data, | |||
178 | int drm_dropmaster_ioctl(struct drm_device *dev, void *data, | 182 | int drm_dropmaster_ioctl(struct drm_device *dev, void *data, |
179 | struct drm_file *file_priv) | 183 | struct drm_file *file_priv) |
180 | { | 184 | { |
181 | if (!file_priv->master) | 185 | if (!file_priv->is_master) |
182 | return -EINVAL; | 186 | return -EINVAL; |
187 | |||
188 | if (!file_priv->minor->master) | ||
189 | return -EINVAL; | ||
190 | |||
183 | mutex_lock(&dev->struct_mutex); | 191 | mutex_lock(&dev->struct_mutex); |
184 | drm_master_put(&file_priv->minor->master); | 192 | drm_master_put(&file_priv->minor->master); |
193 | file_priv->is_master = 0; | ||
185 | mutex_unlock(&dev->struct_mutex); | 194 | mutex_unlock(&dev->struct_mutex); |
186 | return 0; | 195 | return 0; |
187 | } | 196 | } |
diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c index bc0c6849360..022876ae34f 100644 --- a/drivers/gpu/drm/drm_sysfs.c +++ b/drivers/gpu/drm/drm_sysfs.c | |||
@@ -132,6 +132,7 @@ void drm_sysfs_destroy(void) | |||
132 | */ | 132 | */ |
133 | static void drm_sysfs_device_release(struct device *dev) | 133 | static void drm_sysfs_device_release(struct device *dev) |
134 | { | 134 | { |
135 | memset(dev, 0, sizeof(struct device)); | ||
135 | return; | 136 | return; |
136 | } | 137 | } |
137 | 138 | ||
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index a000cf02882..051134c56ae 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
@@ -713,18 +713,18 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data, | |||
713 | mutex_unlock(&dev->struct_mutex); | 713 | mutex_unlock(&dev->struct_mutex); |
714 | if (ret) { | 714 | if (ret) { |
715 | DRM_ERROR("i915_dispatch_cmdbuffer failed\n"); | 715 | DRM_ERROR("i915_dispatch_cmdbuffer failed\n"); |
716 | goto fail_batch_free; | 716 | goto fail_clip_free; |
717 | } | 717 | } |
718 | 718 | ||
719 | if (sarea_priv) | 719 | if (sarea_priv) |
720 | sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); | 720 | sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); |
721 | 721 | ||
722 | fail_batch_free: | ||
723 | drm_free(batch_data, cmdbuf->sz, DRM_MEM_DRIVER); | ||
724 | fail_clip_free: | 722 | fail_clip_free: |
725 | drm_free(cliprects, | 723 | drm_free(cliprects, |
726 | cmdbuf->num_cliprects * sizeof(struct drm_clip_rect), | 724 | cmdbuf->num_cliprects * sizeof(struct drm_clip_rect), |
727 | DRM_MEM_DRIVER); | 725 | DRM_MEM_DRIVER); |
726 | fail_batch_free: | ||
727 | drm_free(batch_data, cmdbuf->sz, DRM_MEM_DRIVER); | ||
728 | 728 | ||
729 | return ret; | 729 | return ret; |
730 | } | 730 | } |
@@ -1232,7 +1232,7 @@ int i915_driver_unload(struct drm_device *dev) | |||
1232 | if (dev_priv->regs != NULL) | 1232 | if (dev_priv->regs != NULL) |
1233 | iounmap(dev_priv->regs); | 1233 | iounmap(dev_priv->regs); |
1234 | 1234 | ||
1235 | intel_opregion_free(dev); | 1235 | intel_opregion_free(dev, 0); |
1236 | 1236 | ||
1237 | if (drm_core_check_feature(dev, DRIVER_MODESET)) { | 1237 | if (drm_core_check_feature(dev, DRIVER_MODESET)) { |
1238 | intel_modeset_cleanup(dev); | 1238 | intel_modeset_cleanup(dev); |
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 6503e2210f6..98560e1e899 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -77,7 +77,7 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state) | |||
77 | drm_irq_uninstall(dev); | 77 | drm_irq_uninstall(dev); |
78 | } | 78 | } |
79 | 79 | ||
80 | intel_opregion_free(dev); | 80 | intel_opregion_free(dev, 1); |
81 | 81 | ||
82 | if (state.event == PM_EVENT_SUSPEND) { | 82 | if (state.event == PM_EVENT_SUSPEND) { |
83 | /* Shut down the device */ | 83 | /* Shut down the device */ |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 3750d800304..25065923b8a 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -446,6 +446,9 @@ struct drm_i915_gem_object { | |||
446 | uint32_t tiling_mode; | 446 | uint32_t tiling_mode; |
447 | uint32_t stride; | 447 | uint32_t stride; |
448 | 448 | ||
449 | /** Record of address bit 17 of each page at last unbind. */ | ||
450 | long *bit_17; | ||
451 | |||
449 | /** AGP mapping type (AGP_USER_MEMORY or AGP_USER_CACHED_MEMORY */ | 452 | /** AGP mapping type (AGP_USER_MEMORY or AGP_USER_CACHED_MEMORY */ |
450 | uint32_t agp_type; | 453 | uint32_t agp_type; |
451 | 454 | ||
@@ -635,9 +638,13 @@ int i915_gem_attach_phys_object(struct drm_device *dev, | |||
635 | void i915_gem_detach_phys_object(struct drm_device *dev, | 638 | void i915_gem_detach_phys_object(struct drm_device *dev, |
636 | struct drm_gem_object *obj); | 639 | struct drm_gem_object *obj); |
637 | void i915_gem_free_all_phys_object(struct drm_device *dev); | 640 | void i915_gem_free_all_phys_object(struct drm_device *dev); |
641 | int i915_gem_object_get_pages(struct drm_gem_object *obj); | ||
642 | void i915_gem_object_put_pages(struct drm_gem_object *obj); | ||
638 | 643 | ||
639 | /* i915_gem_tiling.c */ | 644 | /* i915_gem_tiling.c */ |
640 | void i915_gem_detect_bit_6_swizzle(struct drm_device *dev); | 645 | void i915_gem_detect_bit_6_swizzle(struct drm_device *dev); |
646 | void i915_gem_object_do_bit_17_swizzle(struct drm_gem_object *obj); | ||
647 | void i915_gem_object_save_bit_17_swizzle(struct drm_gem_object *obj); | ||
641 | 648 | ||
642 | /* i915_gem_debug.c */ | 649 | /* i915_gem_debug.c */ |
643 | void i915_gem_dump_object(struct drm_gem_object *obj, int len, | 650 | void i915_gem_dump_object(struct drm_gem_object *obj, int len, |
@@ -667,12 +674,12 @@ extern int i915_restore_state(struct drm_device *dev); | |||
667 | #ifdef CONFIG_ACPI | 674 | #ifdef CONFIG_ACPI |
668 | /* i915_opregion.c */ | 675 | /* i915_opregion.c */ |
669 | extern int intel_opregion_init(struct drm_device *dev, int resume); | 676 | extern int intel_opregion_init(struct drm_device *dev, int resume); |
670 | extern void intel_opregion_free(struct drm_device *dev); | 677 | extern void intel_opregion_free(struct drm_device *dev, int suspend); |
671 | extern void opregion_asle_intr(struct drm_device *dev); | 678 | extern void opregion_asle_intr(struct drm_device *dev); |
672 | extern void opregion_enable_asle(struct drm_device *dev); | 679 | extern void opregion_enable_asle(struct drm_device *dev); |
673 | #else | 680 | #else |
674 | static inline int intel_opregion_init(struct drm_device *dev, int resume) { return 0; } | 681 | static inline int intel_opregion_init(struct drm_device *dev, int resume) { return 0; } |
675 | static inline void intel_opregion_free(struct drm_device *dev) { return; } | 682 | static inline void intel_opregion_free(struct drm_device *dev, int suspend) { return; } |
676 | static inline void opregion_asle_intr(struct drm_device *dev) { return; } | 683 | static inline void opregion_asle_intr(struct drm_device *dev) { return; } |
677 | static inline void opregion_enable_asle(struct drm_device *dev) { return; } | 684 | static inline void opregion_enable_asle(struct drm_device *dev) { return; } |
678 | #endif | 685 | #endif |
@@ -780,7 +787,8 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller); | |||
780 | (dev)->pci_device == 0x2A42 || \ | 787 | (dev)->pci_device == 0x2A42 || \ |
781 | (dev)->pci_device == 0x2E02 || \ | 788 | (dev)->pci_device == 0x2E02 || \ |
782 | (dev)->pci_device == 0x2E12 || \ | 789 | (dev)->pci_device == 0x2E12 || \ |
783 | (dev)->pci_device == 0x2E22) | 790 | (dev)->pci_device == 0x2E22 || \ |
791 | (dev)->pci_device == 0x2E32) | ||
784 | 792 | ||
785 | #define IS_I965GM(dev) ((dev)->pci_device == 0x2A02) | 793 | #define IS_I965GM(dev) ((dev)->pci_device == 0x2A02) |
786 | 794 | ||
@@ -789,6 +797,7 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller); | |||
789 | #define IS_G4X(dev) ((dev)->pci_device == 0x2E02 || \ | 797 | #define IS_G4X(dev) ((dev)->pci_device == 0x2E02 || \ |
790 | (dev)->pci_device == 0x2E12 || \ | 798 | (dev)->pci_device == 0x2E12 || \ |
791 | (dev)->pci_device == 0x2E22 || \ | 799 | (dev)->pci_device == 0x2E22 || \ |
800 | (dev)->pci_device == 0x2E32 || \ | ||
792 | IS_GM45(dev)) | 801 | IS_GM45(dev)) |
793 | 802 | ||
794 | #define IS_IGDG(dev) ((dev)->pci_device == 0xa001) | 803 | #define IS_IGDG(dev) ((dev)->pci_device == 0xa001) |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 1449b452cc6..ee896d91c5b 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -43,8 +43,6 @@ static int i915_gem_object_set_cpu_read_domain_range(struct drm_gem_object *obj, | |||
43 | uint64_t offset, | 43 | uint64_t offset, |
44 | uint64_t size); | 44 | uint64_t size); |
45 | static void i915_gem_object_set_to_full_cpu_read_domain(struct drm_gem_object *obj); | 45 | static void i915_gem_object_set_to_full_cpu_read_domain(struct drm_gem_object *obj); |
46 | static int i915_gem_object_get_pages(struct drm_gem_object *obj); | ||
47 | static void i915_gem_object_put_pages(struct drm_gem_object *obj); | ||
48 | static int i915_gem_object_wait_rendering(struct drm_gem_object *obj); | 46 | static int i915_gem_object_wait_rendering(struct drm_gem_object *obj); |
49 | static int i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, | 47 | static int i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, |
50 | unsigned alignment); | 48 | unsigned alignment); |
@@ -143,15 +141,27 @@ fast_shmem_read(struct page **pages, | |||
143 | int length) | 141 | int length) |
144 | { | 142 | { |
145 | char __iomem *vaddr; | 143 | char __iomem *vaddr; |
146 | int ret; | 144 | int unwritten; |
147 | 145 | ||
148 | vaddr = kmap_atomic(pages[page_base >> PAGE_SHIFT], KM_USER0); | 146 | vaddr = kmap_atomic(pages[page_base >> PAGE_SHIFT], KM_USER0); |
149 | if (vaddr == NULL) | 147 | if (vaddr == NULL) |
150 | return -ENOMEM; | 148 | return -ENOMEM; |
151 | ret = __copy_to_user_inatomic(data, vaddr + page_offset, length); | 149 | unwritten = __copy_to_user_inatomic(data, vaddr + page_offset, length); |
152 | kunmap_atomic(vaddr, KM_USER0); | 150 | kunmap_atomic(vaddr, KM_USER0); |
153 | 151 | ||
154 | return ret; | 152 | if (unwritten) |
153 | return -EFAULT; | ||
154 | |||
155 | return 0; | ||
156 | } | ||
157 | |||
158 | static int i915_gem_object_needs_bit17_swizzle(struct drm_gem_object *obj) | ||
159 | { | ||
160 | drm_i915_private_t *dev_priv = obj->dev->dev_private; | ||
161 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | ||
162 | |||
163 | return dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_9_10_17 && | ||
164 | obj_priv->tiling_mode != I915_TILING_NONE; | ||
155 | } | 165 | } |
156 | 166 | ||
157 | static inline int | 167 | static inline int |
@@ -181,6 +191,64 @@ slow_shmem_copy(struct page *dst_page, | |||
181 | return 0; | 191 | return 0; |
182 | } | 192 | } |
183 | 193 | ||
194 | static inline int | ||
195 | slow_shmem_bit17_copy(struct page *gpu_page, | ||
196 | int gpu_offset, | ||
197 | struct page *cpu_page, | ||
198 | int cpu_offset, | ||
199 | int length, | ||
200 | int is_read) | ||
201 | { | ||
202 | char *gpu_vaddr, *cpu_vaddr; | ||
203 | |||
204 | /* Use the unswizzled path if this page isn't affected. */ | ||
205 | if ((page_to_phys(gpu_page) & (1 << 17)) == 0) { | ||
206 | if (is_read) | ||
207 | return slow_shmem_copy(cpu_page, cpu_offset, | ||
208 | gpu_page, gpu_offset, length); | ||
209 | else | ||
210 | return slow_shmem_copy(gpu_page, gpu_offset, | ||
211 | cpu_page, cpu_offset, length); | ||
212 | } | ||
213 | |||
214 | gpu_vaddr = kmap_atomic(gpu_page, KM_USER0); | ||
215 | if (gpu_vaddr == NULL) | ||
216 | return -ENOMEM; | ||
217 | |||
218 | cpu_vaddr = kmap_atomic(cpu_page, KM_USER1); | ||
219 | if (cpu_vaddr == NULL) { | ||
220 | kunmap_atomic(gpu_vaddr, KM_USER0); | ||
221 | return -ENOMEM; | ||
222 | } | ||
223 | |||
224 | /* Copy the data, XORing A6 with A17 (1). The user already knows he's | ||
225 | * XORing with the other bits (A9 for Y, A9 and A10 for X) | ||
226 | */ | ||
227 | while (length > 0) { | ||
228 | int cacheline_end = ALIGN(gpu_offset + 1, 64); | ||
229 | int this_length = min(cacheline_end - gpu_offset, length); | ||
230 | int swizzled_gpu_offset = gpu_offset ^ 64; | ||
231 | |||
232 | if (is_read) { | ||
233 | memcpy(cpu_vaddr + cpu_offset, | ||
234 | gpu_vaddr + swizzled_gpu_offset, | ||
235 | this_length); | ||
236 | } else { | ||
237 | memcpy(gpu_vaddr + swizzled_gpu_offset, | ||
238 | cpu_vaddr + cpu_offset, | ||
239 | this_length); | ||
240 | } | ||
241 | cpu_offset += this_length; | ||
242 | gpu_offset += this_length; | ||
243 | length -= this_length; | ||
244 | } | ||
245 | |||
246 | kunmap_atomic(cpu_vaddr, KM_USER1); | ||
247 | kunmap_atomic(gpu_vaddr, KM_USER0); | ||
248 | |||
249 | return 0; | ||
250 | } | ||
251 | |||
184 | /** | 252 | /** |
185 | * This is the fast shmem pread path, which attempts to copy_from_user directly | 253 | * This is the fast shmem pread path, which attempts to copy_from_user directly |
186 | * from the backing pages of the object to the user's address space. On a | 254 | * from the backing pages of the object to the user's address space. On a |
@@ -269,6 +337,7 @@ i915_gem_shmem_pread_slow(struct drm_device *dev, struct drm_gem_object *obj, | |||
269 | int page_length; | 337 | int page_length; |
270 | int ret; | 338 | int ret; |
271 | uint64_t data_ptr = args->data_ptr; | 339 | uint64_t data_ptr = args->data_ptr; |
340 | int do_bit17_swizzling; | ||
272 | 341 | ||
273 | remain = args->size; | 342 | remain = args->size; |
274 | 343 | ||
@@ -286,13 +355,15 @@ i915_gem_shmem_pread_slow(struct drm_device *dev, struct drm_gem_object *obj, | |||
286 | 355 | ||
287 | down_read(&mm->mmap_sem); | 356 | down_read(&mm->mmap_sem); |
288 | pinned_pages = get_user_pages(current, mm, (uintptr_t)args->data_ptr, | 357 | pinned_pages = get_user_pages(current, mm, (uintptr_t)args->data_ptr, |
289 | num_pages, 0, 0, user_pages, NULL); | 358 | num_pages, 1, 0, user_pages, NULL); |
290 | up_read(&mm->mmap_sem); | 359 | up_read(&mm->mmap_sem); |
291 | if (pinned_pages < num_pages) { | 360 | if (pinned_pages < num_pages) { |
292 | ret = -EFAULT; | 361 | ret = -EFAULT; |
293 | goto fail_put_user_pages; | 362 | goto fail_put_user_pages; |
294 | } | 363 | } |
295 | 364 | ||
365 | do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj); | ||
366 | |||
296 | mutex_lock(&dev->struct_mutex); | 367 | mutex_lock(&dev->struct_mutex); |
297 | 368 | ||
298 | ret = i915_gem_object_get_pages(obj); | 369 | ret = i915_gem_object_get_pages(obj); |
@@ -327,11 +398,20 @@ i915_gem_shmem_pread_slow(struct drm_device *dev, struct drm_gem_object *obj, | |||
327 | if ((data_page_offset + page_length) > PAGE_SIZE) | 398 | if ((data_page_offset + page_length) > PAGE_SIZE) |
328 | page_length = PAGE_SIZE - data_page_offset; | 399 | page_length = PAGE_SIZE - data_page_offset; |
329 | 400 | ||
330 | ret = slow_shmem_copy(user_pages[data_page_index], | 401 | if (do_bit17_swizzling) { |
331 | data_page_offset, | 402 | ret = slow_shmem_bit17_copy(obj_priv->pages[shmem_page_index], |
332 | obj_priv->pages[shmem_page_index], | 403 | shmem_page_offset, |
333 | shmem_page_offset, | 404 | user_pages[data_page_index], |
334 | page_length); | 405 | data_page_offset, |
406 | page_length, | ||
407 | 1); | ||
408 | } else { | ||
409 | ret = slow_shmem_copy(user_pages[data_page_index], | ||
410 | data_page_offset, | ||
411 | obj_priv->pages[shmem_page_index], | ||
412 | shmem_page_offset, | ||
413 | page_length); | ||
414 | } | ||
335 | if (ret) | 415 | if (ret) |
336 | goto fail_put_pages; | 416 | goto fail_put_pages; |
337 | 417 | ||
@@ -383,9 +463,14 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data, | |||
383 | return -EINVAL; | 463 | return -EINVAL; |
384 | } | 464 | } |
385 | 465 | ||
386 | ret = i915_gem_shmem_pread_fast(dev, obj, args, file_priv); | 466 | if (i915_gem_object_needs_bit17_swizzle(obj)) { |
387 | if (ret != 0) | ||
388 | ret = i915_gem_shmem_pread_slow(dev, obj, args, file_priv); | 467 | ret = i915_gem_shmem_pread_slow(dev, obj, args, file_priv); |
468 | } else { | ||
469 | ret = i915_gem_shmem_pread_fast(dev, obj, args, file_priv); | ||
470 | if (ret != 0) | ||
471 | ret = i915_gem_shmem_pread_slow(dev, obj, args, | ||
472 | file_priv); | ||
473 | } | ||
389 | 474 | ||
390 | drm_gem_object_unreference(obj); | 475 | drm_gem_object_unreference(obj); |
391 | 476 | ||
@@ -727,6 +812,7 @@ i915_gem_shmem_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj, | |||
727 | int page_length; | 812 | int page_length; |
728 | int ret; | 813 | int ret; |
729 | uint64_t data_ptr = args->data_ptr; | 814 | uint64_t data_ptr = args->data_ptr; |
815 | int do_bit17_swizzling; | ||
730 | 816 | ||
731 | remain = args->size; | 817 | remain = args->size; |
732 | 818 | ||
@@ -751,6 +837,8 @@ i915_gem_shmem_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj, | |||
751 | goto fail_put_user_pages; | 837 | goto fail_put_user_pages; |
752 | } | 838 | } |
753 | 839 | ||
840 | do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj); | ||
841 | |||
754 | mutex_lock(&dev->struct_mutex); | 842 | mutex_lock(&dev->struct_mutex); |
755 | 843 | ||
756 | ret = i915_gem_object_get_pages(obj); | 844 | ret = i915_gem_object_get_pages(obj); |
@@ -785,11 +873,20 @@ i915_gem_shmem_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj, | |||
785 | if ((data_page_offset + page_length) > PAGE_SIZE) | 873 | if ((data_page_offset + page_length) > PAGE_SIZE) |
786 | page_length = PAGE_SIZE - data_page_offset; | 874 | page_length = PAGE_SIZE - data_page_offset; |
787 | 875 | ||
788 | ret = slow_shmem_copy(obj_priv->pages[shmem_page_index], | 876 | if (do_bit17_swizzling) { |
789 | shmem_page_offset, | 877 | ret = slow_shmem_bit17_copy(obj_priv->pages[shmem_page_index], |
790 | user_pages[data_page_index], | 878 | shmem_page_offset, |
791 | data_page_offset, | 879 | user_pages[data_page_index], |
792 | page_length); | 880 | data_page_offset, |
881 | page_length, | ||
882 | 0); | ||
883 | } else { | ||
884 | ret = slow_shmem_copy(obj_priv->pages[shmem_page_index], | ||
885 | shmem_page_offset, | ||
886 | user_pages[data_page_index], | ||
887 | data_page_offset, | ||
888 | page_length); | ||
889 | } | ||
793 | if (ret) | 890 | if (ret) |
794 | goto fail_put_pages; | 891 | goto fail_put_pages; |
795 | 892 | ||
@@ -854,6 +951,8 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, | |||
854 | ret = i915_gem_gtt_pwrite_slow(dev, obj, args, | 951 | ret = i915_gem_gtt_pwrite_slow(dev, obj, args, |
855 | file_priv); | 952 | file_priv); |
856 | } | 953 | } |
954 | } else if (i915_gem_object_needs_bit17_swizzle(obj)) { | ||
955 | ret = i915_gem_shmem_pwrite_slow(dev, obj, args, file_priv); | ||
857 | } else { | 956 | } else { |
858 | ret = i915_gem_shmem_pwrite_fast(dev, obj, args, file_priv); | 957 | ret = i915_gem_shmem_pwrite_fast(dev, obj, args, file_priv); |
859 | if (ret == -EFAULT) { | 958 | if (ret == -EFAULT) { |
@@ -1285,7 +1384,7 @@ i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data, | |||
1285 | return 0; | 1384 | return 0; |
1286 | } | 1385 | } |
1287 | 1386 | ||
1288 | static void | 1387 | void |
1289 | i915_gem_object_put_pages(struct drm_gem_object *obj) | 1388 | i915_gem_object_put_pages(struct drm_gem_object *obj) |
1290 | { | 1389 | { |
1291 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | 1390 | struct drm_i915_gem_object *obj_priv = obj->driver_private; |
@@ -1297,6 +1396,9 @@ i915_gem_object_put_pages(struct drm_gem_object *obj) | |||
1297 | if (--obj_priv->pages_refcount != 0) | 1396 | if (--obj_priv->pages_refcount != 0) |
1298 | return; | 1397 | return; |
1299 | 1398 | ||
1399 | if (obj_priv->tiling_mode != I915_TILING_NONE) | ||
1400 | i915_gem_object_save_bit_17_swizzle(obj); | ||
1401 | |||
1300 | for (i = 0; i < page_count; i++) | 1402 | for (i = 0; i < page_count; i++) |
1301 | if (obj_priv->pages[i] != NULL) { | 1403 | if (obj_priv->pages[i] != NULL) { |
1302 | if (obj_priv->dirty) | 1404 | if (obj_priv->dirty) |
@@ -1494,8 +1596,19 @@ i915_gem_retire_request(struct drm_device *dev, | |||
1494 | 1596 | ||
1495 | if (obj->write_domain != 0) | 1597 | if (obj->write_domain != 0) |
1496 | i915_gem_object_move_to_flushing(obj); | 1598 | i915_gem_object_move_to_flushing(obj); |
1497 | else | 1599 | else { |
1600 | /* Take a reference on the object so it won't be | ||
1601 | * freed while the spinlock is held. The list | ||
1602 | * protection for this spinlock is safe when breaking | ||
1603 | * the lock like this since the next thing we do | ||
1604 | * is just get the head of the list again. | ||
1605 | */ | ||
1606 | drm_gem_object_reference(obj); | ||
1498 | i915_gem_object_move_to_inactive(obj); | 1607 | i915_gem_object_move_to_inactive(obj); |
1608 | spin_unlock(&dev_priv->mm.active_list_lock); | ||
1609 | drm_gem_object_unreference(obj); | ||
1610 | spin_lock(&dev_priv->mm.active_list_lock); | ||
1611 | } | ||
1499 | } | 1612 | } |
1500 | out: | 1613 | out: |
1501 | spin_unlock(&dev_priv->mm.active_list_lock); | 1614 | spin_unlock(&dev_priv->mm.active_list_lock); |
@@ -1884,7 +1997,7 @@ i915_gem_evict_everything(struct drm_device *dev) | |||
1884 | return ret; | 1997 | return ret; |
1885 | } | 1998 | } |
1886 | 1999 | ||
1887 | static int | 2000 | int |
1888 | i915_gem_object_get_pages(struct drm_gem_object *obj) | 2001 | i915_gem_object_get_pages(struct drm_gem_object *obj) |
1889 | { | 2002 | { |
1890 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | 2003 | struct drm_i915_gem_object *obj_priv = obj->driver_private; |
@@ -1922,6 +2035,10 @@ i915_gem_object_get_pages(struct drm_gem_object *obj) | |||
1922 | } | 2035 | } |
1923 | obj_priv->pages[i] = page; | 2036 | obj_priv->pages[i] = page; |
1924 | } | 2037 | } |
2038 | |||
2039 | if (obj_priv->tiling_mode != I915_TILING_NONE) | ||
2040 | i915_gem_object_do_bit_17_swizzle(obj); | ||
2041 | |||
1925 | return 0; | 2042 | return 0; |
1926 | } | 2043 | } |
1927 | 2044 | ||
@@ -3002,13 +3119,13 @@ i915_gem_get_relocs_from_user(struct drm_i915_gem_exec_object *exec_list, | |||
3002 | drm_free(*relocs, reloc_count * sizeof(**relocs), | 3119 | drm_free(*relocs, reloc_count * sizeof(**relocs), |
3003 | DRM_MEM_DRIVER); | 3120 | DRM_MEM_DRIVER); |
3004 | *relocs = NULL; | 3121 | *relocs = NULL; |
3005 | return ret; | 3122 | return -EFAULT; |
3006 | } | 3123 | } |
3007 | 3124 | ||
3008 | reloc_index += exec_list[i].relocation_count; | 3125 | reloc_index += exec_list[i].relocation_count; |
3009 | } | 3126 | } |
3010 | 3127 | ||
3011 | return ret; | 3128 | return 0; |
3012 | } | 3129 | } |
3013 | 3130 | ||
3014 | static int | 3131 | static int |
@@ -3017,23 +3134,28 @@ i915_gem_put_relocs_to_user(struct drm_i915_gem_exec_object *exec_list, | |||
3017 | struct drm_i915_gem_relocation_entry *relocs) | 3134 | struct drm_i915_gem_relocation_entry *relocs) |
3018 | { | 3135 | { |
3019 | uint32_t reloc_count = 0, i; | 3136 | uint32_t reloc_count = 0, i; |
3020 | int ret; | 3137 | int ret = 0; |
3021 | 3138 | ||
3022 | for (i = 0; i < buffer_count; i++) { | 3139 | for (i = 0; i < buffer_count; i++) { |
3023 | struct drm_i915_gem_relocation_entry __user *user_relocs; | 3140 | struct drm_i915_gem_relocation_entry __user *user_relocs; |
3141 | int unwritten; | ||
3024 | 3142 | ||
3025 | user_relocs = (void __user *)(uintptr_t)exec_list[i].relocs_ptr; | 3143 | user_relocs = (void __user *)(uintptr_t)exec_list[i].relocs_ptr; |
3026 | 3144 | ||
3027 | if (ret == 0) { | 3145 | unwritten = copy_to_user(user_relocs, |
3028 | ret = copy_to_user(user_relocs, | 3146 | &relocs[reloc_count], |
3029 | &relocs[reloc_count], | 3147 | exec_list[i].relocation_count * |
3030 | exec_list[i].relocation_count * | 3148 | sizeof(*relocs)); |
3031 | sizeof(*relocs)); | 3149 | |
3150 | if (unwritten) { | ||
3151 | ret = -EFAULT; | ||
3152 | goto err; | ||
3032 | } | 3153 | } |
3033 | 3154 | ||
3034 | reloc_count += exec_list[i].relocation_count; | 3155 | reloc_count += exec_list[i].relocation_count; |
3035 | } | 3156 | } |
3036 | 3157 | ||
3158 | err: | ||
3037 | drm_free(relocs, reloc_count * sizeof(*relocs), DRM_MEM_DRIVER); | 3159 | drm_free(relocs, reloc_count * sizeof(*relocs), DRM_MEM_DRIVER); |
3038 | 3160 | ||
3039 | return ret; | 3161 | return ret; |
@@ -3243,7 +3365,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data, | |||
3243 | exec_offset = exec_list[args->buffer_count - 1].offset; | 3365 | exec_offset = exec_list[args->buffer_count - 1].offset; |
3244 | 3366 | ||
3245 | #if WATCH_EXEC | 3367 | #if WATCH_EXEC |
3246 | i915_gem_dump_object(object_list[args->buffer_count - 1], | 3368 | i915_gem_dump_object(batch_obj, |
3247 | args->batch_len, | 3369 | args->batch_len, |
3248 | __func__, | 3370 | __func__, |
3249 | ~0); | 3371 | ~0); |
@@ -3308,10 +3430,12 @@ err: | |||
3308 | (uintptr_t) args->buffers_ptr, | 3430 | (uintptr_t) args->buffers_ptr, |
3309 | exec_list, | 3431 | exec_list, |
3310 | sizeof(*exec_list) * args->buffer_count); | 3432 | sizeof(*exec_list) * args->buffer_count); |
3311 | if (ret) | 3433 | if (ret) { |
3434 | ret = -EFAULT; | ||
3312 | DRM_ERROR("failed to copy %d exec entries " | 3435 | DRM_ERROR("failed to copy %d exec entries " |
3313 | "back to user (%d)\n", | 3436 | "back to user (%d)\n", |
3314 | args->buffer_count, ret); | 3437 | args->buffer_count, ret); |
3438 | } | ||
3315 | } | 3439 | } |
3316 | 3440 | ||
3317 | /* Copy the updated relocations out regardless of current error | 3441 | /* Copy the updated relocations out regardless of current error |
@@ -3593,6 +3717,7 @@ void i915_gem_free_object(struct drm_gem_object *obj) | |||
3593 | i915_gem_free_mmap_offset(obj); | 3717 | i915_gem_free_mmap_offset(obj); |
3594 | 3718 | ||
3595 | drm_free(obj_priv->page_cpu_valid, 1, DRM_MEM_DRIVER); | 3719 | drm_free(obj_priv->page_cpu_valid, 1, DRM_MEM_DRIVER); |
3720 | kfree(obj_priv->bit_17); | ||
3596 | drm_free(obj->driver_private, 1, DRM_MEM_DRIVER); | 3721 | drm_free(obj->driver_private, 1, DRM_MEM_DRIVER); |
3597 | } | 3722 | } |
3598 | 3723 | ||
@@ -3962,8 +4087,10 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data, | |||
3962 | dev_priv->mm.suspended = 0; | 4087 | dev_priv->mm.suspended = 0; |
3963 | 4088 | ||
3964 | ret = i915_gem_init_ringbuffer(dev); | 4089 | ret = i915_gem_init_ringbuffer(dev); |
3965 | if (ret != 0) | 4090 | if (ret != 0) { |
4091 | mutex_unlock(&dev->struct_mutex); | ||
3966 | return ret; | 4092 | return ret; |
4093 | } | ||
3967 | 4094 | ||
3968 | spin_lock(&dev_priv->mm.active_list_lock); | 4095 | spin_lock(&dev_priv->mm.active_list_lock); |
3969 | BUG_ON(!list_empty(&dev_priv->mm.active_list)); | 4096 | BUG_ON(!list_empty(&dev_priv->mm.active_list)); |
diff --git a/drivers/gpu/drm/i915/i915_gem_debugfs.c b/drivers/gpu/drm/i915/i915_gem_debugfs.c index a1ac0c5e730..986f1082c59 100644 --- a/drivers/gpu/drm/i915/i915_gem_debugfs.c +++ b/drivers/gpu/drm/i915/i915_gem_debugfs.c | |||
@@ -234,6 +234,96 @@ static int i915_hws_info(struct seq_file *m, void *data) | |||
234 | return 0; | 234 | return 0; |
235 | } | 235 | } |
236 | 236 | ||
237 | static void i915_dump_pages(struct seq_file *m, struct page **pages, int page_count) | ||
238 | { | ||
239 | int page, i; | ||
240 | uint32_t *mem; | ||
241 | |||
242 | for (page = 0; page < page_count; page++) { | ||
243 | mem = kmap(pages[page]); | ||
244 | for (i = 0; i < PAGE_SIZE; i += 4) | ||
245 | seq_printf(m, "%08x : %08x\n", i, mem[i / 4]); | ||
246 | kunmap(pages[page]); | ||
247 | } | ||
248 | } | ||
249 | |||
250 | static int i915_batchbuffer_info(struct seq_file *m, void *data) | ||
251 | { | ||
252 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
253 | struct drm_device *dev = node->minor->dev; | ||
254 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
255 | struct drm_gem_object *obj; | ||
256 | struct drm_i915_gem_object *obj_priv; | ||
257 | int ret; | ||
258 | |||
259 | spin_lock(&dev_priv->mm.active_list_lock); | ||
260 | |||
261 | list_for_each_entry(obj_priv, &dev_priv->mm.active_list, list) { | ||
262 | obj = obj_priv->obj; | ||
263 | if (obj->read_domains & I915_GEM_DOMAIN_COMMAND) { | ||
264 | ret = i915_gem_object_get_pages(obj); | ||
265 | if (ret) { | ||
266 | DRM_ERROR("Failed to get pages: %d\n", ret); | ||
267 | spin_unlock(&dev_priv->mm.active_list_lock); | ||
268 | return ret; | ||
269 | } | ||
270 | |||
271 | seq_printf(m, "--- gtt_offset = 0x%08x\n", obj_priv->gtt_offset); | ||
272 | i915_dump_pages(m, obj_priv->pages, obj->size / PAGE_SIZE); | ||
273 | |||
274 | i915_gem_object_put_pages(obj); | ||
275 | } | ||
276 | } | ||
277 | |||
278 | spin_unlock(&dev_priv->mm.active_list_lock); | ||
279 | |||
280 | return 0; | ||
281 | } | ||
282 | |||
283 | static int i915_ringbuffer_data(struct seq_file *m, void *data) | ||
284 | { | ||
285 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
286 | struct drm_device *dev = node->minor->dev; | ||
287 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
288 | u8 *virt; | ||
289 | uint32_t *ptr, off; | ||
290 | |||
291 | if (!dev_priv->ring.ring_obj) { | ||
292 | seq_printf(m, "No ringbuffer setup\n"); | ||
293 | return 0; | ||
294 | } | ||
295 | |||
296 | virt = dev_priv->ring.virtual_start; | ||
297 | |||
298 | for (off = 0; off < dev_priv->ring.Size; off += 4) { | ||
299 | ptr = (uint32_t *)(virt + off); | ||
300 | seq_printf(m, "%08x : %08x\n", off, *ptr); | ||
301 | } | ||
302 | |||
303 | return 0; | ||
304 | } | ||
305 | |||
306 | static int i915_ringbuffer_info(struct seq_file *m, void *data) | ||
307 | { | ||
308 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
309 | struct drm_device *dev = node->minor->dev; | ||
310 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
311 | unsigned int head, tail, mask; | ||
312 | |||
313 | head = I915_READ(PRB0_HEAD) & HEAD_ADDR; | ||
314 | tail = I915_READ(PRB0_TAIL) & TAIL_ADDR; | ||
315 | mask = dev_priv->ring.tail_mask; | ||
316 | |||
317 | seq_printf(m, "RingHead : %08x\n", head); | ||
318 | seq_printf(m, "RingTail : %08x\n", tail); | ||
319 | seq_printf(m, "RingMask : %08x\n", mask); | ||
320 | seq_printf(m, "RingSize : %08lx\n", dev_priv->ring.Size); | ||
321 | seq_printf(m, "Acthd : %08x\n", I915_READ(IS_I965G(dev) ? ACTHD_I965 : ACTHD)); | ||
322 | |||
323 | return 0; | ||
324 | } | ||
325 | |||
326 | |||
237 | static struct drm_info_list i915_gem_debugfs_list[] = { | 327 | static struct drm_info_list i915_gem_debugfs_list[] = { |
238 | {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST}, | 328 | {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST}, |
239 | {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST}, | 329 | {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST}, |
@@ -243,6 +333,9 @@ static struct drm_info_list i915_gem_debugfs_list[] = { | |||
243 | {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0}, | 333 | {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0}, |
244 | {"i915_gem_interrupt", i915_interrupt_info, 0}, | 334 | {"i915_gem_interrupt", i915_interrupt_info, 0}, |
245 | {"i915_gem_hws", i915_hws_info, 0}, | 335 | {"i915_gem_hws", i915_hws_info, 0}, |
336 | {"i915_ringbuffer_data", i915_ringbuffer_data, 0}, | ||
337 | {"i915_ringbuffer_info", i915_ringbuffer_info, 0}, | ||
338 | {"i915_batchbuffers", i915_batchbuffer_info, 0}, | ||
246 | }; | 339 | }; |
247 | #define I915_GEM_DEBUGFS_ENTRIES ARRAY_SIZE(i915_gem_debugfs_list) | 340 | #define I915_GEM_DEBUGFS_ENTRIES ARRAY_SIZE(i915_gem_debugfs_list) |
248 | 341 | ||
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c index 6be3f927c86..52a059354e8 100644 --- a/drivers/gpu/drm/i915/i915_gem_tiling.c +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c | |||
@@ -25,6 +25,8 @@ | |||
25 | * | 25 | * |
26 | */ | 26 | */ |
27 | 27 | ||
28 | #include "linux/string.h" | ||
29 | #include "linux/bitops.h" | ||
28 | #include "drmP.h" | 30 | #include "drmP.h" |
29 | #include "drm.h" | 31 | #include "drm.h" |
30 | #include "i915_drm.h" | 32 | #include "i915_drm.h" |
@@ -127,8 +129,8 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev) | |||
127 | swizzle_y = I915_BIT_6_SWIZZLE_9_11; | 129 | swizzle_y = I915_BIT_6_SWIZZLE_9_11; |
128 | } else { | 130 | } else { |
129 | /* Bit 17 swizzling by the CPU in addition. */ | 131 | /* Bit 17 swizzling by the CPU in addition. */ |
130 | swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN; | 132 | swizzle_x = I915_BIT_6_SWIZZLE_9_10_17; |
131 | swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN; | 133 | swizzle_y = I915_BIT_6_SWIZZLE_9_17; |
132 | } | 134 | } |
133 | break; | 135 | break; |
134 | } | 136 | } |
@@ -281,13 +283,25 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
281 | mutex_lock(&dev->struct_mutex); | 283 | mutex_lock(&dev->struct_mutex); |
282 | 284 | ||
283 | if (args->tiling_mode == I915_TILING_NONE) { | 285 | if (args->tiling_mode == I915_TILING_NONE) { |
284 | obj_priv->tiling_mode = I915_TILING_NONE; | ||
285 | args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE; | 286 | args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE; |
286 | } else { | 287 | } else { |
287 | if (args->tiling_mode == I915_TILING_X) | 288 | if (args->tiling_mode == I915_TILING_X) |
288 | args->swizzle_mode = dev_priv->mm.bit_6_swizzle_x; | 289 | args->swizzle_mode = dev_priv->mm.bit_6_swizzle_x; |
289 | else | 290 | else |
290 | args->swizzle_mode = dev_priv->mm.bit_6_swizzle_y; | 291 | args->swizzle_mode = dev_priv->mm.bit_6_swizzle_y; |
292 | |||
293 | /* Hide bit 17 swizzling from the user. This prevents old Mesa | ||
294 | * from aborting the application on sw fallbacks to bit 17, | ||
295 | * and we use the pread/pwrite bit17 paths to swizzle for it. | ||
296 | * If there was a user that was relying on the swizzle | ||
297 | * information for drm_intel_bo_map()ed reads/writes this would | ||
298 | * break it, but we don't have any of those. | ||
299 | */ | ||
300 | if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_17) | ||
301 | args->swizzle_mode = I915_BIT_6_SWIZZLE_9; | ||
302 | if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_10_17) | ||
303 | args->swizzle_mode = I915_BIT_6_SWIZZLE_9_10; | ||
304 | |||
291 | /* If we can't handle the swizzling, make it untiled. */ | 305 | /* If we can't handle the swizzling, make it untiled. */ |
292 | if (args->swizzle_mode == I915_BIT_6_SWIZZLE_UNKNOWN) { | 306 | if (args->swizzle_mode == I915_BIT_6_SWIZZLE_UNKNOWN) { |
293 | args->tiling_mode = I915_TILING_NONE; | 307 | args->tiling_mode = I915_TILING_NONE; |
@@ -354,8 +368,100 @@ i915_gem_get_tiling(struct drm_device *dev, void *data, | |||
354 | DRM_ERROR("unknown tiling mode\n"); | 368 | DRM_ERROR("unknown tiling mode\n"); |
355 | } | 369 | } |
356 | 370 | ||
371 | /* Hide bit 17 from the user -- see comment in i915_gem_set_tiling */ | ||
372 | if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_17) | ||
373 | args->swizzle_mode = I915_BIT_6_SWIZZLE_9; | ||
374 | if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_10_17) | ||
375 | args->swizzle_mode = I915_BIT_6_SWIZZLE_9_10; | ||
376 | |||
357 | drm_gem_object_unreference(obj); | 377 | drm_gem_object_unreference(obj); |
358 | mutex_unlock(&dev->struct_mutex); | 378 | mutex_unlock(&dev->struct_mutex); |
359 | 379 | ||
360 | return 0; | 380 | return 0; |
361 | } | 381 | } |
382 | |||
383 | /** | ||
384 | * Swap every 64 bytes of this page around, to account for it having a new | ||
385 | * bit 17 of its physical address and therefore being interpreted differently | ||
386 | * by the GPU. | ||
387 | */ | ||
388 | static int | ||
389 | i915_gem_swizzle_page(struct page *page) | ||
390 | { | ||
391 | char *vaddr; | ||
392 | int i; | ||
393 | char temp[64]; | ||
394 | |||
395 | vaddr = kmap(page); | ||
396 | if (vaddr == NULL) | ||
397 | return -ENOMEM; | ||
398 | |||
399 | for (i = 0; i < PAGE_SIZE; i += 128) { | ||
400 | memcpy(temp, &vaddr[i], 64); | ||
401 | memcpy(&vaddr[i], &vaddr[i + 64], 64); | ||
402 | memcpy(&vaddr[i + 64], temp, 64); | ||
403 | } | ||
404 | |||
405 | kunmap(page); | ||
406 | |||
407 | return 0; | ||
408 | } | ||
409 | |||
410 | void | ||
411 | i915_gem_object_do_bit_17_swizzle(struct drm_gem_object *obj) | ||
412 | { | ||
413 | struct drm_device *dev = obj->dev; | ||
414 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
415 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | ||
416 | int page_count = obj->size >> PAGE_SHIFT; | ||
417 | int i; | ||
418 | |||
419 | if (dev_priv->mm.bit_6_swizzle_x != I915_BIT_6_SWIZZLE_9_10_17) | ||
420 | return; | ||
421 | |||
422 | if (obj_priv->bit_17 == NULL) | ||
423 | return; | ||
424 | |||
425 | for (i = 0; i < page_count; i++) { | ||
426 | char new_bit_17 = page_to_phys(obj_priv->pages[i]) >> 17; | ||
427 | if ((new_bit_17 & 0x1) != | ||
428 | (test_bit(i, obj_priv->bit_17) != 0)) { | ||
429 | int ret = i915_gem_swizzle_page(obj_priv->pages[i]); | ||
430 | if (ret != 0) { | ||
431 | DRM_ERROR("Failed to swizzle page\n"); | ||
432 | return; | ||
433 | } | ||
434 | set_page_dirty(obj_priv->pages[i]); | ||
435 | } | ||
436 | } | ||
437 | } | ||
438 | |||
439 | void | ||
440 | i915_gem_object_save_bit_17_swizzle(struct drm_gem_object *obj) | ||
441 | { | ||
442 | struct drm_device *dev = obj->dev; | ||
443 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
444 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | ||
445 | int page_count = obj->size >> PAGE_SHIFT; | ||
446 | int i; | ||
447 | |||
448 | if (dev_priv->mm.bit_6_swizzle_x != I915_BIT_6_SWIZZLE_9_10_17) | ||
449 | return; | ||
450 | |||
451 | if (obj_priv->bit_17 == NULL) { | ||
452 | obj_priv->bit_17 = kmalloc(BITS_TO_LONGS(page_count) * | ||
453 | sizeof(long), GFP_KERNEL); | ||
454 | if (obj_priv->bit_17 == NULL) { | ||
455 | DRM_ERROR("Failed to allocate memory for bit 17 " | ||
456 | "record\n"); | ||
457 | return; | ||
458 | } | ||
459 | } | ||
460 | |||
461 | for (i = 0; i < page_count; i++) { | ||
462 | if (page_to_phys(obj_priv->pages[i]) & (1 << 17)) | ||
463 | __set_bit(i, obj_priv->bit_17); | ||
464 | else | ||
465 | __clear_bit(i, obj_priv->bit_17); | ||
466 | } | ||
467 | } | ||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index ee7ce7b78cf..98bb4c878c4 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -406,7 +406,7 @@ int i915_irq_emit(struct drm_device *dev, void *data, | |||
406 | drm_i915_irq_emit_t *emit = data; | 406 | drm_i915_irq_emit_t *emit = data; |
407 | int result; | 407 | int result; |
408 | 408 | ||
409 | if (!dev_priv) { | 409 | if (!dev_priv || !dev_priv->ring.virtual_start) { |
410 | DRM_ERROR("called with no initialization\n"); | 410 | DRM_ERROR("called with no initialization\n"); |
411 | return -EINVAL; | 411 | return -EINVAL; |
412 | } | 412 | } |
diff --git a/drivers/gpu/drm/i915/i915_opregion.c b/drivers/gpu/drm/i915/i915_opregion.c index 69427722d20..dc425e74a26 100644 --- a/drivers/gpu/drm/i915/i915_opregion.c +++ b/drivers/gpu/drm/i915/i915_opregion.c | |||
@@ -370,11 +370,8 @@ int intel_opregion_init(struct drm_device *dev, int resume) | |||
370 | if (mboxes & MBOX_ACPI) { | 370 | if (mboxes & MBOX_ACPI) { |
371 | DRM_DEBUG("Public ACPI methods supported\n"); | 371 | DRM_DEBUG("Public ACPI methods supported\n"); |
372 | opregion->acpi = base + OPREGION_ACPI_OFFSET; | 372 | opregion->acpi = base + OPREGION_ACPI_OFFSET; |
373 | if (drm_core_check_feature(dev, DRIVER_MODESET)) { | 373 | if (drm_core_check_feature(dev, DRIVER_MODESET)) |
374 | intel_didl_outputs(dev); | 374 | intel_didl_outputs(dev); |
375 | if (!resume) | ||
376 | acpi_video_register(); | ||
377 | } | ||
378 | } else { | 375 | } else { |
379 | DRM_DEBUG("Public ACPI methods not supported\n"); | 376 | DRM_DEBUG("Public ACPI methods not supported\n"); |
380 | err = -ENOTSUPP; | 377 | err = -ENOTSUPP; |
@@ -389,8 +386,13 @@ int intel_opregion_init(struct drm_device *dev, int resume) | |||
389 | if (mboxes & MBOX_ASLE) { | 386 | if (mboxes & MBOX_ASLE) { |
390 | DRM_DEBUG("ASLE supported\n"); | 387 | DRM_DEBUG("ASLE supported\n"); |
391 | opregion->asle = base + OPREGION_ASLE_OFFSET; | 388 | opregion->asle = base + OPREGION_ASLE_OFFSET; |
389 | opregion_enable_asle(dev); | ||
392 | } | 390 | } |
393 | 391 | ||
392 | if (!resume) | ||
393 | acpi_video_register(); | ||
394 | |||
395 | |||
394 | /* Notify BIOS we are ready to handle ACPI video ext notifs. | 396 | /* Notify BIOS we are ready to handle ACPI video ext notifs. |
395 | * Right now, all the events are handled by the ACPI video module. | 397 | * Right now, all the events are handled by the ACPI video module. |
396 | * We don't actually need to do anything with them. */ | 398 | * We don't actually need to do anything with them. */ |
@@ -408,7 +410,7 @@ err_out: | |||
408 | return err; | 410 | return err; |
409 | } | 411 | } |
410 | 412 | ||
411 | void intel_opregion_free(struct drm_device *dev) | 413 | void intel_opregion_free(struct drm_device *dev, int suspend) |
412 | { | 414 | { |
413 | struct drm_i915_private *dev_priv = dev->dev_private; | 415 | struct drm_i915_private *dev_priv = dev->dev_private; |
414 | struct intel_opregion *opregion = &dev_priv->opregion; | 416 | struct intel_opregion *opregion = &dev_priv->opregion; |
@@ -416,6 +418,9 @@ void intel_opregion_free(struct drm_device *dev) | |||
416 | if (!opregion->enabled) | 418 | if (!opregion->enabled) |
417 | return; | 419 | return; |
418 | 420 | ||
421 | if (!suspend) | ||
422 | acpi_video_exit(); | ||
423 | |||
419 | opregion->acpi->drdy = 0; | 424 | opregion->acpi->drdy = 0; |
420 | 425 | ||
421 | system_opregion = NULL; | 426 | system_opregion = NULL; |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index e805b590ae7..52119473226 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -1446,6 +1446,7 @@ | |||
1446 | #define DISPPLANE_NO_LINE_DOUBLE 0 | 1446 | #define DISPPLANE_NO_LINE_DOUBLE 0 |
1447 | #define DISPPLANE_STEREO_POLARITY_FIRST 0 | 1447 | #define DISPPLANE_STEREO_POLARITY_FIRST 0 |
1448 | #define DISPPLANE_STEREO_POLARITY_SECOND (1<<18) | 1448 | #define DISPPLANE_STEREO_POLARITY_SECOND (1<<18) |
1449 | #define DISPPLANE_TILED (1<<10) | ||
1449 | #define DSPAADDR 0x70184 | 1450 | #define DSPAADDR 0x70184 |
1450 | #define DSPASTRIDE 0x70188 | 1451 | #define DSPASTRIDE 0x70188 |
1451 | #define DSPAPOS 0x7018C /* reserved */ | 1452 | #define DSPAPOS 0x7018C /* reserved */ |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 64773ce5296..bdcda36953b 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -367,6 +367,7 @@ static const intel_limit_t intel_limits[] = { | |||
367 | .p1 = { .min = I9XX_P1_MIN, .max = I9XX_P1_MAX }, | 367 | .p1 = { .min = I9XX_P1_MIN, .max = I9XX_P1_MAX }, |
368 | .p2 = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT, | 368 | .p2 = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT, |
369 | .p2_slow = I9XX_P2_SDVO_DAC_SLOW, .p2_fast = I9XX_P2_SDVO_DAC_FAST }, | 369 | .p2_slow = I9XX_P2_SDVO_DAC_SLOW, .p2_fast = I9XX_P2_SDVO_DAC_FAST }, |
370 | .find_pll = intel_find_best_PLL, | ||
370 | }, | 371 | }, |
371 | { /* INTEL_LIMIT_IGD_LVDS */ | 372 | { /* INTEL_LIMIT_IGD_LVDS */ |
372 | .dot = { .min = I9XX_DOT_MIN, .max = I9XX_DOT_MAX }, | 373 | .dot = { .min = I9XX_DOT_MIN, .max = I9XX_DOT_MAX }, |
@@ -380,6 +381,7 @@ static const intel_limit_t intel_limits[] = { | |||
380 | /* IGD only supports single-channel mode. */ | 381 | /* IGD only supports single-channel mode. */ |
381 | .p2 = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT, | 382 | .p2 = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT, |
382 | .p2_slow = I9XX_P2_LVDS_SLOW, .p2_fast = I9XX_P2_LVDS_SLOW }, | 383 | .p2_slow = I9XX_P2_LVDS_SLOW, .p2_fast = I9XX_P2_LVDS_SLOW }, |
384 | .find_pll = intel_find_best_PLL, | ||
383 | }, | 385 | }, |
384 | 386 | ||
385 | }; | 387 | }; |
@@ -655,6 +657,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, | |||
655 | int dspbase = (pipe == 0 ? DSPAADDR : DSPBADDR); | 657 | int dspbase = (pipe == 0 ? DSPAADDR : DSPBADDR); |
656 | int dspsurf = (pipe == 0 ? DSPASURF : DSPBSURF); | 658 | int dspsurf = (pipe == 0 ? DSPASURF : DSPBSURF); |
657 | int dspstride = (pipe == 0) ? DSPASTRIDE : DSPBSTRIDE; | 659 | int dspstride = (pipe == 0) ? DSPASTRIDE : DSPBSTRIDE; |
660 | int dsptileoff = (pipe == 0 ? DSPATILEOFF : DSPBTILEOFF); | ||
658 | int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR; | 661 | int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR; |
659 | u32 dspcntr, alignment; | 662 | u32 dspcntr, alignment; |
660 | int ret; | 663 | int ret; |
@@ -731,6 +734,13 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, | |||
731 | mutex_unlock(&dev->struct_mutex); | 734 | mutex_unlock(&dev->struct_mutex); |
732 | return -EINVAL; | 735 | return -EINVAL; |
733 | } | 736 | } |
737 | if (IS_I965G(dev)) { | ||
738 | if (obj_priv->tiling_mode != I915_TILING_NONE) | ||
739 | dspcntr |= DISPPLANE_TILED; | ||
740 | else | ||
741 | dspcntr &= ~DISPPLANE_TILED; | ||
742 | } | ||
743 | |||
734 | I915_WRITE(dspcntr_reg, dspcntr); | 744 | I915_WRITE(dspcntr_reg, dspcntr); |
735 | 745 | ||
736 | Start = obj_priv->gtt_offset; | 746 | Start = obj_priv->gtt_offset; |
@@ -743,6 +753,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, | |||
743 | I915_READ(dspbase); | 753 | I915_READ(dspbase); |
744 | I915_WRITE(dspsurf, Start); | 754 | I915_WRITE(dspsurf, Start); |
745 | I915_READ(dspsurf); | 755 | I915_READ(dspsurf); |
756 | I915_WRITE(dsptileoff, (y << 16) | x); | ||
746 | } else { | 757 | } else { |
747 | I915_WRITE(dspbase, Start + Offset); | 758 | I915_WRITE(dspbase, Start + Offset); |
748 | I915_READ(dspbase); | 759 | I915_READ(dspbase); |
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c index b7f0ebe9f81..3e094beecb9 100644 --- a/drivers/gpu/drm/i915/intel_fb.c +++ b/drivers/gpu/drm/i915/intel_fb.c | |||
@@ -864,8 +864,8 @@ static void intelfb_sysrq(int dummy1, struct tty_struct *dummy3) | |||
864 | 864 | ||
865 | static struct sysrq_key_op sysrq_intelfb_restore_op = { | 865 | static struct sysrq_key_op sysrq_intelfb_restore_op = { |
866 | .handler = intelfb_sysrq, | 866 | .handler = intelfb_sysrq, |
867 | .help_msg = "force fb", | 867 | .help_msg = "force-fb(G)", |
868 | .action_msg = "force restore of fb console", | 868 | .action_msg = "Restore framebuffer console", |
869 | }; | 869 | }; |
870 | 870 | ||
871 | int intelfb_probe(struct drm_device *dev) | 871 | int intelfb_probe(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index b06a4a3ff08..55037422538 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
@@ -38,7 +38,7 @@ | |||
38 | struct intel_hdmi_priv { | 38 | struct intel_hdmi_priv { |
39 | u32 sdvox_reg; | 39 | u32 sdvox_reg; |
40 | u32 save_SDVOX; | 40 | u32 save_SDVOX; |
41 | int has_hdmi_sink; | 41 | bool has_hdmi_sink; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | static void intel_hdmi_mode_set(struct drm_encoder *encoder, | 44 | static void intel_hdmi_mode_set(struct drm_encoder *encoder, |
@@ -128,6 +128,22 @@ static bool intel_hdmi_mode_fixup(struct drm_encoder *encoder, | |||
128 | return true; | 128 | return true; |
129 | } | 129 | } |
130 | 130 | ||
131 | static void | ||
132 | intel_hdmi_sink_detect(struct drm_connector *connector) | ||
133 | { | ||
134 | struct intel_output *intel_output = to_intel_output(connector); | ||
135 | struct intel_hdmi_priv *hdmi_priv = intel_output->dev_priv; | ||
136 | struct edid *edid = NULL; | ||
137 | |||
138 | edid = drm_get_edid(&intel_output->base, | ||
139 | &intel_output->ddc_bus->adapter); | ||
140 | if (edid != NULL) { | ||
141 | hdmi_priv->has_hdmi_sink = drm_detect_hdmi_monitor(edid); | ||
142 | kfree(edid); | ||
143 | intel_output->base.display_info.raw_edid = NULL; | ||
144 | } | ||
145 | } | ||
146 | |||
131 | static enum drm_connector_status | 147 | static enum drm_connector_status |
132 | intel_hdmi_detect(struct drm_connector *connector) | 148 | intel_hdmi_detect(struct drm_connector *connector) |
133 | { | 149 | { |
@@ -158,9 +174,10 @@ intel_hdmi_detect(struct drm_connector *connector) | |||
158 | return connector_status_unknown; | 174 | return connector_status_unknown; |
159 | } | 175 | } |
160 | 176 | ||
161 | if ((I915_READ(PORT_HOTPLUG_STAT) & bit) != 0) | 177 | if ((I915_READ(PORT_HOTPLUG_STAT) & bit) != 0) { |
178 | intel_hdmi_sink_detect(connector); | ||
162 | return connector_status_connected; | 179 | return connector_status_connected; |
163 | else | 180 | } else |
164 | return connector_status_disconnected; | 181 | return connector_status_disconnected; |
165 | } | 182 | } |
166 | 183 | ||
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 7b31f55f55c..9913651c1e1 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c | |||
@@ -1357,6 +1357,23 @@ void intel_sdvo_set_hotplug(struct drm_connector *connector, int on) | |||
1357 | intel_sdvo_read_response(intel_output, &response, 2); | 1357 | intel_sdvo_read_response(intel_output, &response, 2); |
1358 | } | 1358 | } |
1359 | 1359 | ||
1360 | static void | ||
1361 | intel_sdvo_hdmi_sink_detect(struct drm_connector *connector) | ||
1362 | { | ||
1363 | struct intel_output *intel_output = to_intel_output(connector); | ||
1364 | struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; | ||
1365 | struct edid *edid = NULL; | ||
1366 | |||
1367 | intel_sdvo_set_control_bus_switch(intel_output, sdvo_priv->ddc_bus); | ||
1368 | edid = drm_get_edid(&intel_output->base, | ||
1369 | &intel_output->ddc_bus->adapter); | ||
1370 | if (edid != NULL) { | ||
1371 | sdvo_priv->is_hdmi = drm_detect_hdmi_monitor(edid); | ||
1372 | kfree(edid); | ||
1373 | intel_output->base.display_info.raw_edid = NULL; | ||
1374 | } | ||
1375 | } | ||
1376 | |||
1360 | static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connector) | 1377 | static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connector) |
1361 | { | 1378 | { |
1362 | u8 response[2]; | 1379 | u8 response[2]; |
@@ -1371,9 +1388,10 @@ static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connect | |||
1371 | if (status != SDVO_CMD_STATUS_SUCCESS) | 1388 | if (status != SDVO_CMD_STATUS_SUCCESS) |
1372 | return connector_status_unknown; | 1389 | return connector_status_unknown; |
1373 | 1390 | ||
1374 | if ((response[0] != 0) || (response[1] != 0)) | 1391 | if ((response[0] != 0) || (response[1] != 0)) { |
1392 | intel_sdvo_hdmi_sink_detect(connector); | ||
1375 | return connector_status_connected; | 1393 | return connector_status_connected; |
1376 | else | 1394 | } else |
1377 | return connector_status_disconnected; | 1395 | return connector_status_disconnected; |
1378 | } | 1396 | } |
1379 | 1397 | ||
diff --git a/drivers/gpu/drm/via/via_dma.c b/drivers/gpu/drm/via/via_dma.c index 7a339dba6a6..bfb92d28326 100644 --- a/drivers/gpu/drm/via/via_dma.c +++ b/drivers/gpu/drm/via/via_dma.c | |||
@@ -481,11 +481,13 @@ static int via_wait_idle(drm_via_private_t * dev_priv) | |||
481 | { | 481 | { |
482 | int count = 10000000; | 482 | int count = 10000000; |
483 | 483 | ||
484 | while (!(VIA_READ(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) && count--); | 484 | while (!(VIA_READ(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) && --count) |
485 | ; | ||
485 | 486 | ||
486 | while (count-- && (VIA_READ(VIA_REG_STATUS) & | 487 | while (count && (VIA_READ(VIA_REG_STATUS) & |
487 | (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY | | 488 | (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY | |
488 | VIA_3D_ENG_BUSY))) ; | 489 | VIA_3D_ENG_BUSY))) |
490 | --count; | ||
489 | return count; | 491 | return count; |
490 | } | 492 | } |
491 | 493 | ||
@@ -705,7 +707,7 @@ static int via_cmdbuf_size(struct drm_device *dev, void *data, struct drm_file * | |||
705 | switch (d_siz->func) { | 707 | switch (d_siz->func) { |
706 | case VIA_CMDBUF_SPACE: | 708 | case VIA_CMDBUF_SPACE: |
707 | while (((tmp_size = via_cmdbuf_space(dev_priv)) < d_siz->size) | 709 | while (((tmp_size = via_cmdbuf_space(dev_priv)) < d_siz->size) |
708 | && count--) { | 710 | && --count) { |
709 | if (!d_siz->wait) { | 711 | if (!d_siz->wait) { |
710 | break; | 712 | break; |
711 | } | 713 | } |
@@ -717,7 +719,7 @@ static int via_cmdbuf_size(struct drm_device *dev, void *data, struct drm_file * | |||
717 | break; | 719 | break; |
718 | case VIA_CMDBUF_LAG: | 720 | case VIA_CMDBUF_LAG: |
719 | while (((tmp_size = via_cmdbuf_lag(dev_priv)) > d_siz->size) | 721 | while (((tmp_size = via_cmdbuf_lag(dev_priv)) > d_siz->size) |
720 | && count--) { | 722 | && --count) { |
721 | if (!d_siz->wait) { | 723 | if (!d_siz->wait) { |
722 | break; | 724 | break; |
723 | } | 725 | } |
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 0e8a9185f67..d73f5f473e3 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig | |||
@@ -692,6 +692,16 @@ config SENSORS_PCF8591 | |||
692 | These devices are hard to detect and rarely found on mainstream | 692 | These devices are hard to detect and rarely found on mainstream |
693 | hardware. If unsure, say N. | 693 | hardware. If unsure, say N. |
694 | 694 | ||
695 | config SENSORS_SHT15 | ||
696 | tristate "Sensiron humidity and temperature sensors. SHT15 and compat." | ||
697 | depends on GENERIC_GPIO | ||
698 | help | ||
699 | If you say yes here you get support for the Sensiron SHT10, SHT11, | ||
700 | SHT15, SHT71, SHT75 humidity and temperature sensors. | ||
701 | |||
702 | This driver can also be built as a module. If so, the module | ||
703 | will be called sht15. | ||
704 | |||
695 | config SENSORS_SIS5595 | 705 | config SENSORS_SIS5595 |
696 | tristate "Silicon Integrated Systems Corp. SiS5595" | 706 | tristate "Silicon Integrated Systems Corp. SiS5595" |
697 | depends on PCI | 707 | depends on PCI |
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile index 1d3757837b4..0ae26984ba4 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile | |||
@@ -76,6 +76,7 @@ obj-$(CONFIG_SENSORS_MAX6650) += max6650.o | |||
76 | obj-$(CONFIG_SENSORS_PC87360) += pc87360.o | 76 | obj-$(CONFIG_SENSORS_PC87360) += pc87360.o |
77 | obj-$(CONFIG_SENSORS_PC87427) += pc87427.o | 77 | obj-$(CONFIG_SENSORS_PC87427) += pc87427.o |
78 | obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o | 78 | obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o |
79 | obj-$(CONFIG_SENSORS_SHT15) += sht15.o | ||
79 | obj-$(CONFIG_SENSORS_SIS5595) += sis5595.o | 80 | obj-$(CONFIG_SENSORS_SIS5595) += sis5595.o |
80 | obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o | 81 | obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o |
81 | obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o | 82 | obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o |
diff --git a/drivers/hwmon/hp_accel.c b/drivers/hwmon/hp_accel.c index 55d3dc565be..abca7e9f953 100644 --- a/drivers/hwmon/hp_accel.c +++ b/drivers/hwmon/hp_accel.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include <linux/wait.h> | 34 | #include <linux/wait.h> |
35 | #include <linux/poll.h> | 35 | #include <linux/poll.h> |
36 | #include <linux/freezer.h> | 36 | #include <linux/freezer.h> |
37 | #include <linux/version.h> | ||
38 | #include <linux/uaccess.h> | 37 | #include <linux/uaccess.h> |
39 | #include <linux/leds.h> | 38 | #include <linux/leds.h> |
40 | #include <acpi/acpi_drivers.h> | 39 | #include <acpi/acpi_drivers.h> |
diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c new file mode 100644 index 00000000000..6cbdc2fea73 --- /dev/null +++ b/drivers/hwmon/sht15.c | |||
@@ -0,0 +1,692 @@ | |||
1 | /* | ||
2 | * sht15.c - support for the SHT15 Temperature and Humidity Sensor | ||
3 | * | ||
4 | * Copyright (c) 2009 Jonathan Cameron | ||
5 | * | ||
6 | * Copyright (c) 2007 Wouter Horre | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Currently ignoring checksum on readings. | ||
13 | * Default resolution only (14bit temp, 12bit humidity) | ||
14 | * Ignoring battery status. | ||
15 | * Heater not enabled. | ||
16 | * Timings are all conservative. | ||
17 | * | ||
18 | * Data sheet available (1/2009) at | ||
19 | * http://www.sensirion.ch/en/pdf/product_information/Datasheet-humidity-sensor-SHT1x.pdf | ||
20 | * | ||
21 | * Regulator supply name = vcc | ||
22 | */ | ||
23 | |||
24 | #include <linux/interrupt.h> | ||
25 | #include <linux/irq.h> | ||
26 | #include <linux/gpio.h> | ||
27 | #include <linux/module.h> | ||
28 | #include <linux/init.h> | ||
29 | #include <linux/hwmon.h> | ||
30 | #include <linux/hwmon-sysfs.h> | ||
31 | #include <linux/mutex.h> | ||
32 | #include <linux/platform_device.h> | ||
33 | #include <linux/delay.h> | ||
34 | #include <linux/jiffies.h> | ||
35 | #include <linux/err.h> | ||
36 | #include <linux/sht15.h> | ||
37 | #include <linux/regulator/consumer.h> | ||
38 | #include <asm/atomic.h> | ||
39 | |||
40 | #define SHT15_MEASURE_TEMP 3 | ||
41 | #define SHT15_MEASURE_RH 5 | ||
42 | |||
43 | #define SHT15_READING_NOTHING 0 | ||
44 | #define SHT15_READING_TEMP 1 | ||
45 | #define SHT15_READING_HUMID 2 | ||
46 | |||
47 | /* Min timings in nsecs */ | ||
48 | #define SHT15_TSCKL 100 /* clock low */ | ||
49 | #define SHT15_TSCKH 100 /* clock high */ | ||
50 | #define SHT15_TSU 150 /* data setup time */ | ||
51 | |||
52 | /** | ||
53 | * struct sht15_temppair - elements of voltage dependant temp calc | ||
54 | * @vdd: supply voltage in microvolts | ||
55 | * @d1: see data sheet | ||
56 | */ | ||
57 | struct sht15_temppair { | ||
58 | int vdd; /* microvolts */ | ||
59 | int d1; | ||
60 | }; | ||
61 | |||
62 | /* Table 9 from data sheet - relates temperature calculation | ||
63 | * to supply voltage. | ||
64 | */ | ||
65 | static const struct sht15_temppair temppoints[] = { | ||
66 | { 2500000, -39400 }, | ||
67 | { 3000000, -39600 }, | ||
68 | { 3500000, -39700 }, | ||
69 | { 4000000, -39800 }, | ||
70 | { 5000000, -40100 }, | ||
71 | }; | ||
72 | |||
73 | /** | ||
74 | * struct sht15_data - device instance specific data | ||
75 | * @pdata: platform data (gpio's etc) | ||
76 | * @read_work: bh of interrupt handler | ||
77 | * @wait_queue: wait queue for getting values from device | ||
78 | * @val_temp: last temperature value read from device | ||
79 | * @val_humid: last humidity value read from device | ||
80 | * @flag: status flag used to identify what the last request was | ||
81 | * @valid: are the current stored values valid (start condition) | ||
82 | * @last_updat: time of last update | ||
83 | * @read_lock: mutex to ensure only one read in progress | ||
84 | * at a time. | ||
85 | * @dev: associate device structure | ||
86 | * @hwmon_dev: device associated with hwmon subsystem | ||
87 | * @reg: associated regulator (if specified) | ||
88 | * @nb: notifier block to handle notifications of voltage changes | ||
89 | * @supply_uV: local copy of supply voltage used to allow | ||
90 | * use of regulator consumer if available | ||
91 | * @supply_uV_valid: indicates that an updated value has not yet | ||
92 | * been obtained from the regulator and so any calculations | ||
93 | * based upon it will be invalid. | ||
94 | * @update_supply_work: work struct that is used to update the supply_uV | ||
95 | * @interrupt_handled: flag used to indicate a hander has been scheduled | ||
96 | */ | ||
97 | struct sht15_data { | ||
98 | struct sht15_platform_data *pdata; | ||
99 | struct work_struct read_work; | ||
100 | wait_queue_head_t wait_queue; | ||
101 | uint16_t val_temp; | ||
102 | uint16_t val_humid; | ||
103 | u8 flag; | ||
104 | u8 valid; | ||
105 | unsigned long last_updat; | ||
106 | struct mutex read_lock; | ||
107 | struct device *dev; | ||
108 | struct device *hwmon_dev; | ||
109 | struct regulator *reg; | ||
110 | struct notifier_block nb; | ||
111 | int supply_uV; | ||
112 | int supply_uV_valid; | ||
113 | struct work_struct update_supply_work; | ||
114 | atomic_t interrupt_handled; | ||
115 | }; | ||
116 | |||
117 | /** | ||
118 | * sht15_connection_reset() - reset the comms interface | ||
119 | * @data: sht15 specific data | ||
120 | * | ||
121 | * This implements section 3.4 of the data sheet | ||
122 | */ | ||
123 | static void sht15_connection_reset(struct sht15_data *data) | ||
124 | { | ||
125 | int i; | ||
126 | gpio_direction_output(data->pdata->gpio_data, 1); | ||
127 | ndelay(SHT15_TSCKL); | ||
128 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
129 | ndelay(SHT15_TSCKL); | ||
130 | for (i = 0; i < 9; ++i) { | ||
131 | gpio_set_value(data->pdata->gpio_sck, 1); | ||
132 | ndelay(SHT15_TSCKH); | ||
133 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
134 | ndelay(SHT15_TSCKL); | ||
135 | } | ||
136 | } | ||
137 | /** | ||
138 | * sht15_send_bit() - send an individual bit to the device | ||
139 | * @data: device state data | ||
140 | * @val: value of bit to be sent | ||
141 | **/ | ||
142 | static inline void sht15_send_bit(struct sht15_data *data, int val) | ||
143 | { | ||
144 | |||
145 | gpio_set_value(data->pdata->gpio_data, val); | ||
146 | ndelay(SHT15_TSU); | ||
147 | gpio_set_value(data->pdata->gpio_sck, 1); | ||
148 | ndelay(SHT15_TSCKH); | ||
149 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
150 | ndelay(SHT15_TSCKL); /* clock low time */ | ||
151 | } | ||
152 | |||
153 | /** | ||
154 | * sht15_transmission_start() - specific sequence for new transmission | ||
155 | * | ||
156 | * @data: device state data | ||
157 | * Timings for this are not documented on the data sheet, so very | ||
158 | * conservative ones used in implementation. This implements | ||
159 | * figure 12 on the data sheet. | ||
160 | **/ | ||
161 | static void sht15_transmission_start(struct sht15_data *data) | ||
162 | { | ||
163 | /* ensure data is high and output */ | ||
164 | gpio_direction_output(data->pdata->gpio_data, 1); | ||
165 | ndelay(SHT15_TSU); | ||
166 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
167 | ndelay(SHT15_TSCKL); | ||
168 | gpio_set_value(data->pdata->gpio_sck, 1); | ||
169 | ndelay(SHT15_TSCKH); | ||
170 | gpio_set_value(data->pdata->gpio_data, 0); | ||
171 | ndelay(SHT15_TSU); | ||
172 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
173 | ndelay(SHT15_TSCKL); | ||
174 | gpio_set_value(data->pdata->gpio_sck, 1); | ||
175 | ndelay(SHT15_TSCKH); | ||
176 | gpio_set_value(data->pdata->gpio_data, 1); | ||
177 | ndelay(SHT15_TSU); | ||
178 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
179 | ndelay(SHT15_TSCKL); | ||
180 | } | ||
181 | /** | ||
182 | * sht15_send_byte() - send a single byte to the device | ||
183 | * @data: device state | ||
184 | * @byte: value to be sent | ||
185 | **/ | ||
186 | static void sht15_send_byte(struct sht15_data *data, u8 byte) | ||
187 | { | ||
188 | int i; | ||
189 | for (i = 0; i < 8; i++) { | ||
190 | sht15_send_bit(data, !!(byte & 0x80)); | ||
191 | byte <<= 1; | ||
192 | } | ||
193 | } | ||
194 | /** | ||
195 | * sht15_wait_for_response() - checks for ack from device | ||
196 | * @data: device state | ||
197 | **/ | ||
198 | static int sht15_wait_for_response(struct sht15_data *data) | ||
199 | { | ||
200 | gpio_direction_input(data->pdata->gpio_data); | ||
201 | gpio_set_value(data->pdata->gpio_sck, 1); | ||
202 | ndelay(SHT15_TSCKH); | ||
203 | if (gpio_get_value(data->pdata->gpio_data)) { | ||
204 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
205 | dev_err(data->dev, "Command not acknowledged\n"); | ||
206 | sht15_connection_reset(data); | ||
207 | return -EIO; | ||
208 | } | ||
209 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
210 | ndelay(SHT15_TSCKL); | ||
211 | return 0; | ||
212 | } | ||
213 | |||
214 | /** | ||
215 | * sht15_send_cmd() - Sends a command to the device. | ||
216 | * @data: device state | ||
217 | * @cmd: command byte to be sent | ||
218 | * | ||
219 | * On entry, sck is output low, data is output pull high | ||
220 | * and the interrupt disabled. | ||
221 | **/ | ||
222 | static int sht15_send_cmd(struct sht15_data *data, u8 cmd) | ||
223 | { | ||
224 | int ret = 0; | ||
225 | sht15_transmission_start(data); | ||
226 | sht15_send_byte(data, cmd); | ||
227 | ret = sht15_wait_for_response(data); | ||
228 | return ret; | ||
229 | } | ||
230 | /** | ||
231 | * sht15_update_single_val() - get a new value from device | ||
232 | * @data: device instance specific data | ||
233 | * @command: command sent to request value | ||
234 | * @timeout_msecs: timeout after which comms are assumed | ||
235 | * to have failed are reset. | ||
236 | **/ | ||
237 | static inline int sht15_update_single_val(struct sht15_data *data, | ||
238 | int command, | ||
239 | int timeout_msecs) | ||
240 | { | ||
241 | int ret; | ||
242 | ret = sht15_send_cmd(data, command); | ||
243 | if (ret) | ||
244 | return ret; | ||
245 | |||
246 | gpio_direction_input(data->pdata->gpio_data); | ||
247 | atomic_set(&data->interrupt_handled, 0); | ||
248 | |||
249 | enable_irq(gpio_to_irq(data->pdata->gpio_data)); | ||
250 | if (gpio_get_value(data->pdata->gpio_data) == 0) { | ||
251 | disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data)); | ||
252 | /* Only relevant if the interrupt hasn't occured. */ | ||
253 | if (!atomic_read(&data->interrupt_handled)) | ||
254 | schedule_work(&data->read_work); | ||
255 | } | ||
256 | ret = wait_event_timeout(data->wait_queue, | ||
257 | (data->flag == SHT15_READING_NOTHING), | ||
258 | msecs_to_jiffies(timeout_msecs)); | ||
259 | if (ret == 0) {/* timeout occurred */ | ||
260 | disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data));; | ||
261 | sht15_connection_reset(data); | ||
262 | return -ETIME; | ||
263 | } | ||
264 | return 0; | ||
265 | } | ||
266 | |||
267 | /** | ||
268 | * sht15_update_vals() - get updated readings from device if too old | ||
269 | * @data: device state | ||
270 | **/ | ||
271 | static int sht15_update_vals(struct sht15_data *data) | ||
272 | { | ||
273 | int ret = 0; | ||
274 | int timeout = HZ; | ||
275 | |||
276 | mutex_lock(&data->read_lock); | ||
277 | if (time_after(jiffies, data->last_updat + timeout) | ||
278 | || !data->valid) { | ||
279 | data->flag = SHT15_READING_HUMID; | ||
280 | ret = sht15_update_single_val(data, SHT15_MEASURE_RH, 160); | ||
281 | if (ret) | ||
282 | goto error_ret; | ||
283 | data->flag = SHT15_READING_TEMP; | ||
284 | ret = sht15_update_single_val(data, SHT15_MEASURE_TEMP, 400); | ||
285 | if (ret) | ||
286 | goto error_ret; | ||
287 | data->valid = 1; | ||
288 | data->last_updat = jiffies; | ||
289 | } | ||
290 | error_ret: | ||
291 | mutex_unlock(&data->read_lock); | ||
292 | |||
293 | return ret; | ||
294 | } | ||
295 | |||
296 | /** | ||
297 | * sht15_calc_temp() - convert the raw reading to a temperature | ||
298 | * @data: device state | ||
299 | * | ||
300 | * As per section 4.3 of the data sheet. | ||
301 | **/ | ||
302 | static inline int sht15_calc_temp(struct sht15_data *data) | ||
303 | { | ||
304 | int d1 = 0; | ||
305 | int i; | ||
306 | |||
307 | for (i = 1; i < ARRAY_SIZE(temppoints) - 1; i++) | ||
308 | /* Find pointer to interpolate */ | ||
309 | if (data->supply_uV > temppoints[i - 1].vdd) { | ||
310 | d1 = (data->supply_uV/1000 - temppoints[i - 1].vdd) | ||
311 | * (temppoints[i].d1 - temppoints[i - 1].d1) | ||
312 | / (temppoints[i].vdd - temppoints[i - 1].vdd) | ||
313 | + temppoints[i - 1].d1; | ||
314 | break; | ||
315 | } | ||
316 | |||
317 | return data->val_temp*10 + d1; | ||
318 | } | ||
319 | |||
320 | /** | ||
321 | * sht15_calc_humid() - using last temperature convert raw to humid | ||
322 | * @data: device state | ||
323 | * | ||
324 | * This is the temperature compensated version as per section 4.2 of | ||
325 | * the data sheet. | ||
326 | **/ | ||
327 | static inline int sht15_calc_humid(struct sht15_data *data) | ||
328 | { | ||
329 | int RHlinear; /* milli percent */ | ||
330 | int temp = sht15_calc_temp(data); | ||
331 | |||
332 | const int c1 = -4; | ||
333 | const int c2 = 40500; /* x 10 ^ -6 */ | ||
334 | const int c3 = 2800; /* x10 ^ -9 */ | ||
335 | |||
336 | RHlinear = c1*1000 | ||
337 | + c2 * data->val_humid/1000 | ||
338 | + (data->val_humid * data->val_humid * c3)/1000000; | ||
339 | return (temp - 25000) * (10000 + 800 * data->val_humid) | ||
340 | / 1000000 + RHlinear; | ||
341 | } | ||
342 | |||
343 | static ssize_t sht15_show_temp(struct device *dev, | ||
344 | struct device_attribute *attr, | ||
345 | char *buf) | ||
346 | { | ||
347 | int ret; | ||
348 | struct sht15_data *data = dev_get_drvdata(dev); | ||
349 | |||
350 | /* Technically no need to read humidity as well */ | ||
351 | ret = sht15_update_vals(data); | ||
352 | |||
353 | return ret ? ret : sprintf(buf, "%d\n", | ||
354 | sht15_calc_temp(data)); | ||
355 | } | ||
356 | |||
357 | static ssize_t sht15_show_humidity(struct device *dev, | ||
358 | struct device_attribute *attr, | ||
359 | char *buf) | ||
360 | { | ||
361 | int ret; | ||
362 | struct sht15_data *data = dev_get_drvdata(dev); | ||
363 | |||
364 | ret = sht15_update_vals(data); | ||
365 | |||
366 | return ret ? ret : sprintf(buf, "%d\n", sht15_calc_humid(data)); | ||
367 | |||
368 | }; | ||
369 | static ssize_t show_name(struct device *dev, | ||
370 | struct device_attribute *attr, | ||
371 | char *buf) | ||
372 | { | ||
373 | struct platform_device *pdev = to_platform_device(dev); | ||
374 | return sprintf(buf, "%s\n", pdev->name); | ||
375 | } | ||
376 | |||
377 | static SENSOR_DEVICE_ATTR(temp1_input, | ||
378 | S_IRUGO, sht15_show_temp, | ||
379 | NULL, 0); | ||
380 | static SENSOR_DEVICE_ATTR(humidity1_input, | ||
381 | S_IRUGO, sht15_show_humidity, | ||
382 | NULL, 0); | ||
383 | static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); | ||
384 | static struct attribute *sht15_attrs[] = { | ||
385 | &sensor_dev_attr_temp1_input.dev_attr.attr, | ||
386 | &sensor_dev_attr_humidity1_input.dev_attr.attr, | ||
387 | &dev_attr_name.attr, | ||
388 | NULL, | ||
389 | }; | ||
390 | |||
391 | static const struct attribute_group sht15_attr_group = { | ||
392 | .attrs = sht15_attrs, | ||
393 | }; | ||
394 | |||
395 | static irqreturn_t sht15_interrupt_fired(int irq, void *d) | ||
396 | { | ||
397 | struct sht15_data *data = d; | ||
398 | /* First disable the interrupt */ | ||
399 | disable_irq_nosync(irq); | ||
400 | atomic_inc(&data->interrupt_handled); | ||
401 | /* Then schedule a reading work struct */ | ||
402 | if (data->flag != SHT15_READING_NOTHING) | ||
403 | schedule_work(&data->read_work); | ||
404 | return IRQ_HANDLED; | ||
405 | } | ||
406 | |||
407 | /* Each byte of data is acknowledged by pulling the data line | ||
408 | * low for one clock pulse. | ||
409 | */ | ||
410 | static void sht15_ack(struct sht15_data *data) | ||
411 | { | ||
412 | gpio_direction_output(data->pdata->gpio_data, 0); | ||
413 | ndelay(SHT15_TSU); | ||
414 | gpio_set_value(data->pdata->gpio_sck, 1); | ||
415 | ndelay(SHT15_TSU); | ||
416 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
417 | ndelay(SHT15_TSU); | ||
418 | gpio_set_value(data->pdata->gpio_data, 1); | ||
419 | |||
420 | gpio_direction_input(data->pdata->gpio_data); | ||
421 | } | ||
422 | /** | ||
423 | * sht15_end_transmission() - notify device of end of transmission | ||
424 | * @data: device state | ||
425 | * | ||
426 | * This is basically a NAK. (single clock pulse, data high) | ||
427 | **/ | ||
428 | static void sht15_end_transmission(struct sht15_data *data) | ||
429 | { | ||
430 | gpio_direction_output(data->pdata->gpio_data, 1); | ||
431 | ndelay(SHT15_TSU); | ||
432 | gpio_set_value(data->pdata->gpio_sck, 1); | ||
433 | ndelay(SHT15_TSCKH); | ||
434 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
435 | ndelay(SHT15_TSCKL); | ||
436 | } | ||
437 | |||
438 | static void sht15_bh_read_data(struct work_struct *work_s) | ||
439 | { | ||
440 | int i; | ||
441 | uint16_t val = 0; | ||
442 | struct sht15_data *data | ||
443 | = container_of(work_s, struct sht15_data, | ||
444 | read_work); | ||
445 | /* Firstly, verify the line is low */ | ||
446 | if (gpio_get_value(data->pdata->gpio_data)) { | ||
447 | /* If not, then start the interrupt again - care | ||
448 | here as could have gone low in meantime so verify | ||
449 | it hasn't! | ||
450 | */ | ||
451 | atomic_set(&data->interrupt_handled, 0); | ||
452 | enable_irq(gpio_to_irq(data->pdata->gpio_data)); | ||
453 | /* If still not occured or another handler has been scheduled */ | ||
454 | if (gpio_get_value(data->pdata->gpio_data) | ||
455 | || atomic_read(&data->interrupt_handled)) | ||
456 | return; | ||
457 | } | ||
458 | /* Read the data back from the device */ | ||
459 | for (i = 0; i < 16; ++i) { | ||
460 | val <<= 1; | ||
461 | gpio_set_value(data->pdata->gpio_sck, 1); | ||
462 | ndelay(SHT15_TSCKH); | ||
463 | val |= !!gpio_get_value(data->pdata->gpio_data); | ||
464 | gpio_set_value(data->pdata->gpio_sck, 0); | ||
465 | ndelay(SHT15_TSCKL); | ||
466 | if (i == 7) | ||
467 | sht15_ack(data); | ||
468 | } | ||
469 | /* Tell the device we are done */ | ||
470 | sht15_end_transmission(data); | ||
471 | |||
472 | switch (data->flag) { | ||
473 | case SHT15_READING_TEMP: | ||
474 | data->val_temp = val; | ||
475 | break; | ||
476 | case SHT15_READING_HUMID: | ||
477 | data->val_humid = val; | ||
478 | break; | ||
479 | } | ||
480 | |||
481 | data->flag = SHT15_READING_NOTHING; | ||
482 | wake_up(&data->wait_queue); | ||
483 | } | ||
484 | |||
485 | static void sht15_update_voltage(struct work_struct *work_s) | ||
486 | { | ||
487 | struct sht15_data *data | ||
488 | = container_of(work_s, struct sht15_data, | ||
489 | update_supply_work); | ||
490 | data->supply_uV = regulator_get_voltage(data->reg); | ||
491 | } | ||
492 | |||
493 | /** | ||
494 | * sht15_invalidate_voltage() - mark supply voltage invalid when notified by reg | ||
495 | * @nb: associated notification structure | ||
496 | * @event: voltage regulator state change event code | ||
497 | * @ignored: function parameter - ignored here | ||
498 | * | ||
499 | * Note that as the notification code holds the regulator lock, we have | ||
500 | * to schedule an update of the supply voltage rather than getting it directly. | ||
501 | **/ | ||
502 | static int sht15_invalidate_voltage(struct notifier_block *nb, | ||
503 | unsigned long event, | ||
504 | void *ignored) | ||
505 | { | ||
506 | struct sht15_data *data = container_of(nb, struct sht15_data, nb); | ||
507 | |||
508 | if (event == REGULATOR_EVENT_VOLTAGE_CHANGE) | ||
509 | data->supply_uV_valid = false; | ||
510 | schedule_work(&data->update_supply_work); | ||
511 | |||
512 | return NOTIFY_OK; | ||
513 | } | ||
514 | |||
515 | static int __devinit sht15_probe(struct platform_device *pdev) | ||
516 | { | ||
517 | int ret = 0; | ||
518 | struct sht15_data *data = kzalloc(sizeof(*data), GFP_KERNEL); | ||
519 | |||
520 | if (!data) { | ||
521 | ret = -ENOMEM; | ||
522 | dev_err(&pdev->dev, "kzalloc failed"); | ||
523 | goto error_ret; | ||
524 | } | ||
525 | |||
526 | INIT_WORK(&data->read_work, sht15_bh_read_data); | ||
527 | INIT_WORK(&data->update_supply_work, sht15_update_voltage); | ||
528 | platform_set_drvdata(pdev, data); | ||
529 | mutex_init(&data->read_lock); | ||
530 | data->dev = &pdev->dev; | ||
531 | init_waitqueue_head(&data->wait_queue); | ||
532 | |||
533 | if (pdev->dev.platform_data == NULL) { | ||
534 | dev_err(&pdev->dev, "no platform data supplied"); | ||
535 | goto err_free_data; | ||
536 | } | ||
537 | data->pdata = pdev->dev.platform_data; | ||
538 | data->supply_uV = data->pdata->supply_mv*1000; | ||
539 | |||
540 | /* If a regulator is available, query what the supply voltage actually is!*/ | ||
541 | data->reg = regulator_get(data->dev, "vcc"); | ||
542 | if (!IS_ERR(data->reg)) { | ||
543 | data->supply_uV = regulator_get_voltage(data->reg); | ||
544 | regulator_enable(data->reg); | ||
545 | /* setup a notifier block to update this if another device | ||
546 | * causes the voltage to change */ | ||
547 | data->nb.notifier_call = &sht15_invalidate_voltage; | ||
548 | ret = regulator_register_notifier(data->reg, &data->nb); | ||
549 | } | ||
550 | /* Try requesting the GPIOs */ | ||
551 | ret = gpio_request(data->pdata->gpio_sck, "SHT15 sck"); | ||
552 | if (ret) { | ||
553 | dev_err(&pdev->dev, "gpio request failed"); | ||
554 | goto err_free_data; | ||
555 | } | ||
556 | gpio_direction_output(data->pdata->gpio_sck, 0); | ||
557 | ret = gpio_request(data->pdata->gpio_data, "SHT15 data"); | ||
558 | if (ret) { | ||
559 | dev_err(&pdev->dev, "gpio request failed"); | ||
560 | goto err_release_gpio_sck; | ||
561 | } | ||
562 | ret = sysfs_create_group(&pdev->dev.kobj, &sht15_attr_group); | ||
563 | if (ret) { | ||
564 | dev_err(&pdev->dev, "sysfs create failed"); | ||
565 | goto err_free_data; | ||
566 | } | ||
567 | |||
568 | ret = request_irq(gpio_to_irq(data->pdata->gpio_data), | ||
569 | sht15_interrupt_fired, | ||
570 | IRQF_TRIGGER_FALLING, | ||
571 | "sht15 data", | ||
572 | data); | ||
573 | if (ret) { | ||
574 | dev_err(&pdev->dev, "failed to get irq for data line"); | ||
575 | goto err_release_gpio_data; | ||
576 | } | ||
577 | disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data)); | ||
578 | sht15_connection_reset(data); | ||
579 | sht15_send_cmd(data, 0x1E); | ||
580 | |||
581 | data->hwmon_dev = hwmon_device_register(data->dev); | ||
582 | if (IS_ERR(data->hwmon_dev)) { | ||
583 | ret = PTR_ERR(data->hwmon_dev); | ||
584 | goto err_release_gpio_data; | ||
585 | } | ||
586 | return 0; | ||
587 | |||
588 | err_release_gpio_data: | ||
589 | gpio_free(data->pdata->gpio_data); | ||
590 | err_release_gpio_sck: | ||
591 | gpio_free(data->pdata->gpio_sck); | ||
592 | err_free_data: | ||
593 | kfree(data); | ||
594 | error_ret: | ||
595 | |||
596 | return ret; | ||
597 | } | ||
598 | |||
599 | static int __devexit sht15_remove(struct platform_device *pdev) | ||
600 | { | ||
601 | struct sht15_data *data = platform_get_drvdata(pdev); | ||
602 | |||
603 | /* Make sure any reads from the device are done and | ||
604 | * prevent new ones beginnning */ | ||
605 | mutex_lock(&data->read_lock); | ||
606 | hwmon_device_unregister(data->hwmon_dev); | ||
607 | sysfs_remove_group(&pdev->dev.kobj, &sht15_attr_group); | ||
608 | if (!IS_ERR(data->reg)) { | ||
609 | regulator_unregister_notifier(data->reg, &data->nb); | ||
610 | regulator_disable(data->reg); | ||
611 | regulator_put(data->reg); | ||
612 | } | ||
613 | |||
614 | free_irq(gpio_to_irq(data->pdata->gpio_data), data); | ||
615 | gpio_free(data->pdata->gpio_data); | ||
616 | gpio_free(data->pdata->gpio_sck); | ||
617 | mutex_unlock(&data->read_lock); | ||
618 | kfree(data); | ||
619 | return 0; | ||
620 | } | ||
621 | |||
622 | |||
623 | static struct platform_driver sht_drivers[] = { | ||
624 | { | ||
625 | .driver = { | ||
626 | .name = "sht10", | ||
627 | .owner = THIS_MODULE, | ||
628 | }, | ||
629 | .probe = sht15_probe, | ||
630 | .remove = sht15_remove, | ||
631 | }, { | ||
632 | .driver = { | ||
633 | .name = "sht11", | ||
634 | .owner = THIS_MODULE, | ||
635 | }, | ||
636 | .probe = sht15_probe, | ||
637 | .remove = sht15_remove, | ||
638 | }, { | ||
639 | .driver = { | ||
640 | .name = "sht15", | ||
641 | .owner = THIS_MODULE, | ||
642 | }, | ||
643 | .probe = sht15_probe, | ||
644 | .remove = sht15_remove, | ||
645 | }, { | ||
646 | .driver = { | ||
647 | .name = "sht71", | ||
648 | .owner = THIS_MODULE, | ||
649 | }, | ||
650 | .probe = sht15_probe, | ||
651 | .remove = sht15_remove, | ||
652 | }, { | ||
653 | .driver = { | ||
654 | .name = "sht75", | ||
655 | .owner = THIS_MODULE, | ||
656 | }, | ||
657 | .probe = sht15_probe, | ||
658 | .remove = sht15_remove, | ||
659 | }, | ||
660 | }; | ||
661 | |||
662 | |||
663 | static int __init sht15_init(void) | ||
664 | { | ||
665 | int ret; | ||
666 | int i; | ||
667 | |||
668 | for (i = 0; i < ARRAY_SIZE(sht_drivers); i++) { | ||
669 | ret = platform_driver_register(&sht_drivers[i]); | ||
670 | if (ret) | ||
671 | goto error_unreg; | ||
672 | } | ||
673 | |||
674 | return 0; | ||
675 | |||
676 | error_unreg: | ||
677 | while (--i >= 0) | ||
678 | platform_driver_unregister(&sht_drivers[i]); | ||
679 | |||
680 | return ret; | ||
681 | } | ||
682 | module_init(sht15_init); | ||
683 | |||
684 | static void __exit sht15_exit(void) | ||
685 | { | ||
686 | int i; | ||
687 | for (i = ARRAY_SIZE(sht_drivers) - 1; i >= 0; i--) | ||
688 | platform_driver_unregister(&sht_drivers[i]); | ||
689 | } | ||
690 | module_exit(sht15_exit); | ||
691 | |||
692 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/ide/cs5536.c b/drivers/ide/cs5536.c index 353a35bbba6..0332a95eefd 100644 --- a/drivers/ide/cs5536.c +++ b/drivers/ide/cs5536.c | |||
@@ -236,6 +236,7 @@ static const struct ide_dma_ops cs5536_dma_ops = { | |||
236 | .dma_test_irq = ide_dma_test_irq, | 236 | .dma_test_irq = ide_dma_test_irq, |
237 | .dma_lost_irq = ide_dma_lost_irq, | 237 | .dma_lost_irq = ide_dma_lost_irq, |
238 | .dma_timer_expiry = ide_dma_sff_timer_expiry, | 238 | .dma_timer_expiry = ide_dma_sff_timer_expiry, |
239 | .dma_sff_read_status = ide_dma_sff_read_status, | ||
239 | }; | 240 | }; |
240 | 241 | ||
241 | static const struct ide_port_info cs5536_info = { | 242 | static const struct ide_port_info cs5536_info = { |
diff --git a/drivers/ide/hpt366.c b/drivers/ide/hpt366.c index a0eb87f5913..0feb66c720e 100644 --- a/drivers/ide/hpt366.c +++ b/drivers/ide/hpt366.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * Portions Copyright (C) 2001 Sun Microsystems, Inc. | 3 | * Portions Copyright (C) 2001 Sun Microsystems, Inc. |
4 | * Portions Copyright (C) 2003 Red Hat Inc | 4 | * Portions Copyright (C) 2003 Red Hat Inc |
5 | * Portions Copyright (C) 2007 Bartlomiej Zolnierkiewicz | 5 | * Portions Copyright (C) 2007 Bartlomiej Zolnierkiewicz |
6 | * Portions Copyright (C) 2005-2008 MontaVista Software, Inc. | 6 | * Portions Copyright (C) 2005-2009 MontaVista Software, Inc. |
7 | * | 7 | * |
8 | * Thanks to HighPoint Technologies for their assistance, and hardware. | 8 | * Thanks to HighPoint Technologies for their assistance, and hardware. |
9 | * Special Thanks to Jon Burchmore in SanDiego for the deep pockets, his | 9 | * Special Thanks to Jon Burchmore in SanDiego for the deep pockets, his |
@@ -114,6 +114,8 @@ | |||
114 | * the register setting lists into the table indexed by the clock selected | 114 | * the register setting lists into the table indexed by the clock selected |
115 | * - set the correct hwif->ultra_mask for each individual chip | 115 | * - set the correct hwif->ultra_mask for each individual chip |
116 | * - add Ultra and MW DMA mode filtering for the HPT37[24] based SATA cards | 116 | * - add Ultra and MW DMA mode filtering for the HPT37[24] based SATA cards |
117 | * - stop resetting HPT370's state machine before each DMA transfer as that has | ||
118 | * caused more harm than good | ||
117 | * Sergei Shtylyov, <sshtylyov@ru.mvista.com> or <source@mvista.com> | 119 | * Sergei Shtylyov, <sshtylyov@ru.mvista.com> or <source@mvista.com> |
118 | */ | 120 | */ |
119 | 121 | ||
@@ -133,7 +135,7 @@ | |||
133 | #define DRV_NAME "hpt366" | 135 | #define DRV_NAME "hpt366" |
134 | 136 | ||
135 | /* various tuning parameters */ | 137 | /* various tuning parameters */ |
136 | #define HPT_RESET_STATE_ENGINE | 138 | #undef HPT_RESET_STATE_ENGINE |
137 | #undef HPT_DELAY_INTERRUPT | 139 | #undef HPT_DELAY_INTERRUPT |
138 | 140 | ||
139 | static const char *quirk_drives[] = { | 141 | static const char *quirk_drives[] = { |
@@ -808,7 +810,7 @@ static void hpt370_irq_timeout(ide_drive_t *drive) | |||
808 | /* get DMA command mode */ | 810 | /* get DMA command mode */ |
809 | dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD); | 811 | dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD); |
810 | /* stop DMA */ | 812 | /* stop DMA */ |
811 | outb(dma_cmd & ~0x1, hwif->dma_base + ATA_DMA_CMD); | 813 | outb(dma_cmd & ~ATA_DMA_START, hwif->dma_base + ATA_DMA_CMD); |
812 | hpt370_clear_engine(drive); | 814 | hpt370_clear_engine(drive); |
813 | } | 815 | } |
814 | 816 | ||
@@ -825,11 +827,11 @@ static int hpt370_dma_end(ide_drive_t *drive) | |||
825 | ide_hwif_t *hwif = drive->hwif; | 827 | ide_hwif_t *hwif = drive->hwif; |
826 | u8 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); | 828 | u8 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); |
827 | 829 | ||
828 | if (dma_stat & 0x01) { | 830 | if (dma_stat & ATA_DMA_ACTIVE) { |
829 | /* wait a little */ | 831 | /* wait a little */ |
830 | udelay(20); | 832 | udelay(20); |
831 | dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); | 833 | dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); |
832 | if (dma_stat & 0x01) | 834 | if (dma_stat & ATA_DMA_ACTIVE) |
833 | hpt370_irq_timeout(drive); | 835 | hpt370_irq_timeout(drive); |
834 | } | 836 | } |
835 | return ide_dma_end(drive); | 837 | return ide_dma_end(drive); |
@@ -851,7 +853,7 @@ static int hpt374_dma_test_irq(ide_drive_t *drive) | |||
851 | 853 | ||
852 | dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); | 854 | dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); |
853 | /* return 1 if INTR asserted */ | 855 | /* return 1 if INTR asserted */ |
854 | if (dma_stat & 4) | 856 | if (dma_stat & ATA_DMA_INTR) |
855 | return 1; | 857 | return 1; |
856 | 858 | ||
857 | return 0; | 859 | return 0; |
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 3aec19d1fdf..3d4e0996976 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
@@ -609,7 +609,7 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) | |||
609 | struct request *rq = hwif->rq; | 609 | struct request *rq = hwif->rq; |
610 | ide_expiry_t *expiry = NULL; | 610 | ide_expiry_t *expiry = NULL; |
611 | int dma_error = 0, dma, thislen, uptodate = 0; | 611 | int dma_error = 0, dma, thislen, uptodate = 0; |
612 | int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc, nsectors; | 612 | int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc = 0, nsectors; |
613 | int sense = blk_sense_request(rq); | 613 | int sense = blk_sense_request(rq); |
614 | unsigned int timeout; | 614 | unsigned int timeout; |
615 | u16 len; | 615 | u16 len; |
diff --git a/drivers/ide/ide-gd.c b/drivers/ide/ide-gd.c index 1aebdf1a4f5..4b6b71e2cdf 100644 --- a/drivers/ide/ide-gd.c +++ b/drivers/ide/ide-gd.c | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/mutex.h> | 7 | #include <linux/mutex.h> |
8 | #include <linux/ide.h> | 8 | #include <linux/ide.h> |
9 | #include <linux/hdreg.h> | 9 | #include <linux/hdreg.h> |
10 | #include <linux/dmi.h> | ||
10 | 11 | ||
11 | #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT) | 12 | #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT) |
12 | #define IDE_DISK_MINORS (1 << PARTN_BITS) | 13 | #define IDE_DISK_MINORS (1 << PARTN_BITS) |
@@ -99,6 +100,19 @@ static void ide_gd_resume(ide_drive_t *drive) | |||
99 | (void)drive->disk_ops->get_capacity(drive); | 100 | (void)drive->disk_ops->get_capacity(drive); |
100 | } | 101 | } |
101 | 102 | ||
103 | static const struct dmi_system_id ide_coldreboot_table[] = { | ||
104 | { | ||
105 | /* Acer TravelMate 66x cuts power during reboot */ | ||
106 | .ident = "Acer TravelMate 660", | ||
107 | .matches = { | ||
108 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
109 | DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"), | ||
110 | }, | ||
111 | }, | ||
112 | |||
113 | { } /* terminate list */ | ||
114 | }; | ||
115 | |||
102 | static void ide_gd_shutdown(ide_drive_t *drive) | 116 | static void ide_gd_shutdown(ide_drive_t *drive) |
103 | { | 117 | { |
104 | #ifdef CONFIG_ALPHA | 118 | #ifdef CONFIG_ALPHA |
@@ -115,7 +129,8 @@ static void ide_gd_shutdown(ide_drive_t *drive) | |||
115 | the disk to expire its write cache. */ | 129 | the disk to expire its write cache. */ |
116 | if (system_state != SYSTEM_POWER_OFF) { | 130 | if (system_state != SYSTEM_POWER_OFF) { |
117 | #else | 131 | #else |
118 | if (system_state == SYSTEM_RESTART) { | 132 | if (system_state == SYSTEM_RESTART && |
133 | !dmi_check_system(ide_coldreboot_table)) { | ||
119 | #endif | 134 | #endif |
120 | drive->disk_ops->flush(drive); | 135 | drive->disk_ops->flush(drive); |
121 | return; | 136 | return; |
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index 2ae02b8d7f8..35dc38d3b2c 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -102,11 +102,14 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err) | |||
102 | drive->dev_flags |= IDE_DFLAG_PARKED; | 102 | drive->dev_flags |= IDE_DFLAG_PARKED; |
103 | } | 103 | } |
104 | 104 | ||
105 | if (rq && rq->cmd_type == REQ_TYPE_ATA_TASKFILE) | 105 | if (rq && rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { |
106 | memcpy(rq->special, cmd, sizeof(*cmd)); | 106 | struct ide_cmd *orig_cmd = rq->special; |
107 | 107 | ||
108 | if (cmd->tf_flags & IDE_TFLAG_DYN) | 108 | if (cmd->tf_flags & IDE_TFLAG_DYN) |
109 | kfree(cmd); | 109 | kfree(orig_cmd); |
110 | else | ||
111 | memcpy(orig_cmd, cmd, sizeof(*cmd)); | ||
112 | } | ||
110 | } | 113 | } |
111 | 114 | ||
112 | /* obsolete, blk_rq_bytes() should be used instead */ | 115 | /* obsolete, blk_rq_bytes() should be used instead */ |
diff --git a/drivers/ide/palm_bk3710.c b/drivers/ide/palm_bk3710.c index c7acca0b873..09d813d313f 100644 --- a/drivers/ide/palm_bk3710.c +++ b/drivers/ide/palm_bk3710.c | |||
@@ -39,27 +39,12 @@ | |||
39 | /* Primary Control Offset */ | 39 | /* Primary Control Offset */ |
40 | #define IDE_PALM_ATA_PRI_CTL_OFFSET 0x3F6 | 40 | #define IDE_PALM_ATA_PRI_CTL_OFFSET 0x3F6 |
41 | 41 | ||
42 | /* | ||
43 | * PalmChip 3710 IDE Controller UDMA timing structure Definition | ||
44 | */ | ||
45 | struct palm_bk3710_udmatiming { | ||
46 | unsigned int rptime; /* Ready to pause time */ | ||
47 | unsigned int cycletime; /* Cycle Time */ | ||
48 | }; | ||
49 | |||
50 | #define BK3710_BMICP 0x00 | 42 | #define BK3710_BMICP 0x00 |
51 | #define BK3710_BMISP 0x02 | 43 | #define BK3710_BMISP 0x02 |
52 | #define BK3710_BMIDTP 0x04 | 44 | #define BK3710_BMIDTP 0x04 |
53 | #define BK3710_BMICS 0x08 | ||
54 | #define BK3710_BMISS 0x0A | ||
55 | #define BK3710_BMIDTS 0x0C | ||
56 | #define BK3710_IDETIMP 0x40 | 45 | #define BK3710_IDETIMP 0x40 |
57 | #define BK3710_IDETIMS 0x42 | ||
58 | #define BK3710_SIDETIM 0x44 | ||
59 | #define BK3710_SLEWCTL 0x45 | ||
60 | #define BK3710_IDESTATUS 0x47 | 46 | #define BK3710_IDESTATUS 0x47 |
61 | #define BK3710_UDMACTL 0x48 | 47 | #define BK3710_UDMACTL 0x48 |
62 | #define BK3710_UDMATIM 0x4A | ||
63 | #define BK3710_MISCCTL 0x50 | 48 | #define BK3710_MISCCTL 0x50 |
64 | #define BK3710_REGSTB 0x54 | 49 | #define BK3710_REGSTB 0x54 |
65 | #define BK3710_REGRCVR 0x58 | 50 | #define BK3710_REGRCVR 0x58 |
@@ -71,17 +56,22 @@ struct palm_bk3710_udmatiming { | |||
71 | #define BK3710_UDMATRP 0x70 | 56 | #define BK3710_UDMATRP 0x70 |
72 | #define BK3710_UDMAENV 0x74 | 57 | #define BK3710_UDMAENV 0x74 |
73 | #define BK3710_IORDYTMP 0x78 | 58 | #define BK3710_IORDYTMP 0x78 |
74 | #define BK3710_IORDYTMS 0x7C | ||
75 | 59 | ||
76 | static unsigned ideclk_period; /* in nanoseconds */ | 60 | static unsigned ideclk_period; /* in nanoseconds */ |
77 | 61 | ||
62 | struct palm_bk3710_udmatiming { | ||
63 | unsigned int rptime; /* tRP -- Ready to pause time (nsec) */ | ||
64 | unsigned int cycletime; /* tCYCTYP2/2 -- avg Cycle Time (nsec) */ | ||
65 | /* tENV is always a minimum of 20 nsec */ | ||
66 | }; | ||
67 | |||
78 | static const struct palm_bk3710_udmatiming palm_bk3710_udmatimings[6] = { | 68 | static const struct palm_bk3710_udmatiming palm_bk3710_udmatimings[6] = { |
79 | {160, 240}, /* UDMA Mode 0 */ | 69 | { 160, 240 / 2 }, /* UDMA Mode 0 */ |
80 | {125, 160}, /* UDMA Mode 1 */ | 70 | { 125, 160 / 2 }, /* UDMA Mode 1 */ |
81 | {100, 120}, /* UDMA Mode 2 */ | 71 | { 100, 120 / 2 }, /* UDMA Mode 2 */ |
82 | {100, 90}, /* UDMA Mode 3 */ | 72 | { 100, 90 / 2 }, /* UDMA Mode 3 */ |
83 | {100, 60}, /* UDMA Mode 4 */ | 73 | { 100, 60 / 2 }, /* UDMA Mode 4 */ |
84 | {85, 40}, /* UDMA Mode 5 */ | 74 | { 85, 40 / 2 }, /* UDMA Mode 5 */ |
85 | }; | 75 | }; |
86 | 76 | ||
87 | static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev, | 77 | static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev, |
@@ -98,11 +88,6 @@ static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev, | |||
98 | trp = DIV_ROUND_UP(palm_bk3710_udmatimings[mode].rptime, | 88 | trp = DIV_ROUND_UP(palm_bk3710_udmatimings[mode].rptime, |
99 | ideclk_period) - 1; | 89 | ideclk_period) - 1; |
100 | 90 | ||
101 | /* udmatim Register */ | ||
102 | val16 = readw(base + BK3710_UDMATIM) & (dev ? 0xFF0F : 0xFFF0); | ||
103 | val16 |= (mode << (dev ? 4 : 0)); | ||
104 | writew(val16, base + BK3710_UDMATIM); | ||
105 | |||
106 | /* udmastb Ultra DMA Access Strobe Width */ | 91 | /* udmastb Ultra DMA Access Strobe Width */ |
107 | val32 = readl(base + BK3710_UDMASTB) & (0xFF << (dev ? 0 : 8)); | 92 | val32 = readl(base + BK3710_UDMASTB) & (0xFF << (dev ? 0 : 8)); |
108 | val32 |= (t0 << (dev ? 8 : 0)); | 93 | val32 |= (t0 << (dev ? 8 : 0)); |
@@ -163,10 +148,11 @@ static void palm_bk3710_setpiomode(void __iomem *base, ide_drive_t *mate, | |||
163 | u32 val32; | 148 | u32 val32; |
164 | struct ide_timing *t; | 149 | struct ide_timing *t; |
165 | 150 | ||
151 | t = ide_timing_find_mode(XFER_PIO_0 + mode); | ||
152 | |||
166 | /* PIO Data Setup */ | 153 | /* PIO Data Setup */ |
167 | t0 = DIV_ROUND_UP(cycletime, ideclk_period); | 154 | t0 = DIV_ROUND_UP(cycletime, ideclk_period); |
168 | t2 = DIV_ROUND_UP(ide_timing_find_mode(XFER_PIO_0 + mode)->active, | 155 | t2 = DIV_ROUND_UP(t->active, ideclk_period); |
169 | ideclk_period); | ||
170 | 156 | ||
171 | t2i = t0 - t2 - 1; | 157 | t2i = t0 - t2 - 1; |
172 | t2 -= 1; | 158 | t2 -= 1; |
@@ -187,7 +173,6 @@ static void palm_bk3710_setpiomode(void __iomem *base, ide_drive_t *mate, | |||
187 | } | 173 | } |
188 | 174 | ||
189 | /* TASKFILE Setup */ | 175 | /* TASKFILE Setup */ |
190 | t = ide_timing_find_mode(XFER_PIO_0 + mode); | ||
191 | t0 = DIV_ROUND_UP(t->cyc8b, ideclk_period); | 176 | t0 = DIV_ROUND_UP(t->cyc8b, ideclk_period); |
192 | t2 = DIV_ROUND_UP(t->act8b, ideclk_period); | 177 | t2 = DIV_ROUND_UP(t->act8b, ideclk_period); |
193 | 178 | ||
@@ -236,42 +221,23 @@ static void palm_bk3710_set_pio_mode(ide_drive_t *drive, u8 pio) | |||
236 | static void __devinit palm_bk3710_chipinit(void __iomem *base) | 221 | static void __devinit palm_bk3710_chipinit(void __iomem *base) |
237 | { | 222 | { |
238 | /* | 223 | /* |
239 | * enable the reset_en of ATA controller so that when ata signals | 224 | * REVISIT: the ATA reset signal needs to be managed through a |
240 | * are brought out, by writing into device config. at that | 225 | * GPIO, which means it should come from platform_data. Until |
241 | * time por_n signal should not be 'Z' and have a stable value. | 226 | * we get and use such information, we have to trust that things |
227 | * have been reset before we get here. | ||
242 | */ | 228 | */ |
243 | writel(0x0300, base + BK3710_MISCCTL); | ||
244 | |||
245 | /* wait for some time and deassert the reset of ATA Device. */ | ||
246 | mdelay(100); | ||
247 | |||
248 | /* Deassert the Reset */ | ||
249 | writel(0x0200, base + BK3710_MISCCTL); | ||
250 | 229 | ||
251 | /* | 230 | /* |
252 | * Program the IDETIMP Register Value based on the following assumptions | 231 | * Program the IDETIMP Register Value based on the following assumptions |
253 | * | 232 | * |
254 | * (ATA_IDETIMP_IDEEN , ENABLE ) | | 233 | * (ATA_IDETIMP_IDEEN , ENABLE ) | |
255 | * (ATA_IDETIMP_SLVTIMEN , DISABLE) | | ||
256 | * (ATA_IDETIMP_RDYSMPL , 70NS) | | ||
257 | * (ATA_IDETIMP_RDYRCVRY , 50NS) | | ||
258 | * (ATA_IDETIMP_DMAFTIM1 , PIOCOMP) | | ||
259 | * (ATA_IDETIMP_PREPOST1 , DISABLE) | | 234 | * (ATA_IDETIMP_PREPOST1 , DISABLE) | |
260 | * (ATA_IDETIMP_RDYSEN1 , DISABLE) | | ||
261 | * (ATA_IDETIMP_PIOFTIM1 , DISABLE) | | ||
262 | * (ATA_IDETIMP_DMAFTIM0 , PIOCOMP) | | ||
263 | * (ATA_IDETIMP_PREPOST0 , DISABLE) | | 235 | * (ATA_IDETIMP_PREPOST0 , DISABLE) | |
264 | * (ATA_IDETIMP_RDYSEN0 , DISABLE) | | 236 | * |
265 | * (ATA_IDETIMP_PIOFTIM0 , DISABLE) | 237 | * DM6446 silicon rev 2.1 and earlier have no observed net benefit |
266 | */ | 238 | * from enabling prefetch/postwrite. |
267 | writew(0xB388, base + BK3710_IDETIMP); | ||
268 | |||
269 | /* | ||
270 | * Configure SIDETIM Register | ||
271 | * (ATA_SIDETIM_RDYSMPS1 ,120NS ) | | ||
272 | * (ATA_SIDETIM_RDYRCYS1 ,120NS ) | ||
273 | */ | 239 | */ |
274 | writeb(0, base + BK3710_SIDETIM); | 240 | writew(BIT(15), base + BK3710_IDETIMP); |
275 | 241 | ||
276 | /* | 242 | /* |
277 | * UDMACTL Ultra-ATA DMA Control | 243 | * UDMACTL Ultra-ATA DMA Control |
@@ -283,11 +249,11 @@ static void __devinit palm_bk3710_chipinit(void __iomem *base) | |||
283 | 249 | ||
284 | /* | 250 | /* |
285 | * MISCCTL Miscellaneous Conrol Register | 251 | * MISCCTL Miscellaneous Conrol Register |
286 | * (ATA_MISCCTL_RSTMODEP , 1) | | 252 | * (ATA_MISCCTL_HWNHLD1P , 1 cycle) |
287 | * (ATA_MISCCTL_RESETP , 0) | | 253 | * (ATA_MISCCTL_HWNHLD0P , 1 cycle) |
288 | * (ATA_MISCCTL_TIMORIDE , 1) | 254 | * (ATA_MISCCTL_TIMORIDE , 1) |
289 | */ | 255 | */ |
290 | writel(0x201, base + BK3710_MISCCTL); | 256 | writel(0x001, base + BK3710_MISCCTL); |
291 | 257 | ||
292 | /* | 258 | /* |
293 | * IORDYTMP IORDY Timer for Primary Register | 259 | * IORDYTMP IORDY Timer for Primary Register |
@@ -357,10 +323,9 @@ static int __init palm_bk3710_probe(struct platform_device *pdev) | |||
357 | 323 | ||
358 | clk_enable(clk); | 324 | clk_enable(clk); |
359 | rate = clk_get_rate(clk); | 325 | rate = clk_get_rate(clk); |
360 | ideclk_period = 1000000000UL / rate; | ||
361 | 326 | ||
362 | /* Register the IDE interface with Linux ATA Interface */ | 327 | /* NOTE: round *down* to meet minimum timings; we count in clocks */ |
363 | memset(&hw, 0, sizeof(hw)); | 328 | ideclk_period = 1000000000UL / rate; |
364 | 329 | ||
365 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 330 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
366 | if (mem == NULL) { | 331 | if (mem == NULL) { |
@@ -390,6 +355,7 @@ static int __init palm_bk3710_probe(struct platform_device *pdev) | |||
390 | /* Configure the Palm Chip controller */ | 355 | /* Configure the Palm Chip controller */ |
391 | palm_bk3710_chipinit(base); | 356 | palm_bk3710_chipinit(base); |
392 | 357 | ||
358 | memset(&hw, 0, sizeof(hw)); | ||
393 | for (i = 0; i < IDE_NR_PORTS - 2; i++) | 359 | for (i = 0; i < IDE_NR_PORTS - 2; i++) |
394 | hw.io_ports_array[i] = (unsigned long) | 360 | hw.io_ports_array[i] = (unsigned long) |
395 | (base + IDE_PALM_ATA_PRI_REG_OFFSET + i); | 361 | (base + IDE_PALM_ATA_PRI_REG_OFFSET + i); |
@@ -402,6 +368,7 @@ static int __init palm_bk3710_probe(struct platform_device *pdev) | |||
402 | palm_bk3710_port_info.udma_mask = rate < 100000000 ? ATA_UDMA4 : | 368 | palm_bk3710_port_info.udma_mask = rate < 100000000 ? ATA_UDMA4 : |
403 | ATA_UDMA5; | 369 | ATA_UDMA5; |
404 | 370 | ||
371 | /* Register the IDE interface with Linux */ | ||
405 | rc = ide_host_add(&palm_bk3710_port_info, hws, NULL); | 372 | rc = ide_host_add(&palm_bk3710_port_info, hws, NULL); |
406 | if (rc) | 373 | if (rc) |
407 | goto out; | 374 | goto out; |
diff --git a/drivers/ide/pmac.c b/drivers/ide/pmac.c index 052b9bf1f8f..f76e4e6b408 100644 --- a/drivers/ide/pmac.c +++ b/drivers/ide/pmac.c | |||
@@ -1682,7 +1682,7 @@ static int __devinit pmac_ide_init_dma(ide_hwif_t *hwif, | |||
1682 | * The +2 is +1 for the stop command and +1 to allow for | 1682 | * The +2 is +1 for the stop command and +1 to allow for |
1683 | * aligning the start address to a multiple of 16 bytes. | 1683 | * aligning the start address to a multiple of 16 bytes. |
1684 | */ | 1684 | */ |
1685 | pmif->dma_table_cpu = (struct dbdma_cmd*)pci_alloc_consistent( | 1685 | pmif->dma_table_cpu = pci_alloc_consistent( |
1686 | dev, | 1686 | dev, |
1687 | (MAX_DCMDS + 2) * sizeof(struct dbdma_cmd), | 1687 | (MAX_DCMDS + 2) * sizeof(struct dbdma_cmd), |
1688 | &hwif->dmatable_dma); | 1688 | &hwif->dmatable_dma); |
diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c index fef3f1ae722..52d7bb0c2a1 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_cm.c +++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c | |||
@@ -1830,6 +1830,10 @@ int iwch_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
1830 | ep->com.rpl_err = 0; | 1830 | ep->com.rpl_err = 0; |
1831 | ep->ird = conn_param->ird; | 1831 | ep->ird = conn_param->ird; |
1832 | ep->ord = conn_param->ord; | 1832 | ep->ord = conn_param->ord; |
1833 | |||
1834 | if (peer2peer && ep->ird == 0) | ||
1835 | ep->ird = 1; | ||
1836 | |||
1833 | PDBG("%s %d ird %d ord %d\n", __func__, __LINE__, ep->ird, ep->ord); | 1837 | PDBG("%s %d ird %d ord %d\n", __func__, __LINE__, ep->ird, ep->ord); |
1834 | 1838 | ||
1835 | get_ep(&ep->com); | 1839 | get_ep(&ep->com); |
@@ -1915,6 +1919,10 @@ int iwch_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
1915 | conn_param->private_data, ep->plen); | 1919 | conn_param->private_data, ep->plen); |
1916 | ep->ird = conn_param->ird; | 1920 | ep->ird = conn_param->ird; |
1917 | ep->ord = conn_param->ord; | 1921 | ep->ord = conn_param->ord; |
1922 | |||
1923 | if (peer2peer && ep->ord == 0) | ||
1924 | ep->ord = 1; | ||
1925 | |||
1918 | ep->com.tdev = h->rdev.t3cdev_p; | 1926 | ep->com.tdev = h->rdev.t3cdev_p; |
1919 | 1927 | ||
1920 | cm_id->add_ref(cm_id); | 1928 | cm_id->add_ref(cm_id); |
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c index 2f546a62533..27bbdc8e773 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_qp.c +++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c | |||
@@ -1069,7 +1069,6 @@ int iwch_modify_qp(struct iwch_dev *rhp, struct iwch_qp *qhp, | |||
1069 | goto out; | 1069 | goto out; |
1070 | } | 1070 | } |
1071 | qhp->attr.state = IWCH_QP_STATE_IDLE; | 1071 | qhp->attr.state = IWCH_QP_STATE_IDLE; |
1072 | memset(&qhp->attr, 0, sizeof(qhp->attr)); | ||
1073 | break; | 1072 | break; |
1074 | case IWCH_QP_STATE_TERMINATE: | 1073 | case IWCH_QP_STATE_TERMINATE: |
1075 | if (!internal) { | 1074 | if (!internal) { |
diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c index c33e1c53c79..6d55f9d748f 100644 --- a/drivers/infiniband/hw/mthca/mthca_cmd.c +++ b/drivers/infiniband/hw/mthca/mthca_cmd.c | |||
@@ -157,13 +157,15 @@ enum { | |||
157 | enum { | 157 | enum { |
158 | CMD_TIME_CLASS_A = (HZ + 999) / 1000 + 1, | 158 | CMD_TIME_CLASS_A = (HZ + 999) / 1000 + 1, |
159 | CMD_TIME_CLASS_B = (HZ + 99) / 100 + 1, | 159 | CMD_TIME_CLASS_B = (HZ + 99) / 100 + 1, |
160 | CMD_TIME_CLASS_C = (HZ + 9) / 10 + 1 | 160 | CMD_TIME_CLASS_C = (HZ + 9) / 10 + 1, |
161 | CMD_TIME_CLASS_D = 60 * HZ | ||
161 | }; | 162 | }; |
162 | #else | 163 | #else |
163 | enum { | 164 | enum { |
164 | CMD_TIME_CLASS_A = 60 * HZ, | 165 | CMD_TIME_CLASS_A = 60 * HZ, |
165 | CMD_TIME_CLASS_B = 60 * HZ, | 166 | CMD_TIME_CLASS_B = 60 * HZ, |
166 | CMD_TIME_CLASS_C = 60 * HZ | 167 | CMD_TIME_CLASS_C = 60 * HZ, |
168 | CMD_TIME_CLASS_D = 60 * HZ | ||
167 | }; | 169 | }; |
168 | #endif | 170 | #endif |
169 | 171 | ||
@@ -598,7 +600,7 @@ int mthca_SYS_EN(struct mthca_dev *dev, u8 *status) | |||
598 | u64 out; | 600 | u64 out; |
599 | int ret; | 601 | int ret; |
600 | 602 | ||
601 | ret = mthca_cmd_imm(dev, 0, &out, 0, 0, CMD_SYS_EN, HZ, status); | 603 | ret = mthca_cmd_imm(dev, 0, &out, 0, 0, CMD_SYS_EN, CMD_TIME_CLASS_D, status); |
602 | 604 | ||
603 | if (*status == MTHCA_CMD_STAT_DDR_MEM_ERR) | 605 | if (*status == MTHCA_CMD_STAT_DDR_MEM_ERR) |
604 | mthca_warn(dev, "SYS_EN DDR error: syn=%x, sock=%d, " | 606 | mthca_warn(dev, "SYS_EN DDR error: syn=%x, sock=%d, " |
@@ -611,7 +613,7 @@ int mthca_SYS_EN(struct mthca_dev *dev, u8 *status) | |||
611 | 613 | ||
612 | int mthca_SYS_DIS(struct mthca_dev *dev, u8 *status) | 614 | int mthca_SYS_DIS(struct mthca_dev *dev, u8 *status) |
613 | { | 615 | { |
614 | return mthca_cmd(dev, 0, 0, 0, CMD_SYS_DIS, HZ, status); | 616 | return mthca_cmd(dev, 0, 0, 0, CMD_SYS_DIS, CMD_TIME_CLASS_C, status); |
615 | } | 617 | } |
616 | 618 | ||
617 | static int mthca_map_cmd(struct mthca_dev *dev, u16 op, struct mthca_icm *icm, | 619 | static int mthca_map_cmd(struct mthca_dev *dev, u16 op, struct mthca_icm *icm, |
@@ -1390,7 +1392,7 @@ int mthca_INIT_HCA(struct mthca_dev *dev, | |||
1390 | MTHCA_PUT(inbox, param->uarc_base, INIT_HCA_UAR_CTX_BASE_OFFSET); | 1392 | MTHCA_PUT(inbox, param->uarc_base, INIT_HCA_UAR_CTX_BASE_OFFSET); |
1391 | } | 1393 | } |
1392 | 1394 | ||
1393 | err = mthca_cmd(dev, mailbox->dma, 0, 0, CMD_INIT_HCA, HZ, status); | 1395 | err = mthca_cmd(dev, mailbox->dma, 0, 0, CMD_INIT_HCA, CMD_TIME_CLASS_D, status); |
1394 | 1396 | ||
1395 | mthca_free_mailbox(dev, mailbox); | 1397 | mthca_free_mailbox(dev, mailbox); |
1396 | return err; | 1398 | return err; |
@@ -1450,12 +1452,12 @@ int mthca_INIT_IB(struct mthca_dev *dev, | |||
1450 | 1452 | ||
1451 | int mthca_CLOSE_IB(struct mthca_dev *dev, int port, u8 *status) | 1453 | int mthca_CLOSE_IB(struct mthca_dev *dev, int port, u8 *status) |
1452 | { | 1454 | { |
1453 | return mthca_cmd(dev, 0, port, 0, CMD_CLOSE_IB, HZ, status); | 1455 | return mthca_cmd(dev, 0, port, 0, CMD_CLOSE_IB, CMD_TIME_CLASS_A, status); |
1454 | } | 1456 | } |
1455 | 1457 | ||
1456 | int mthca_CLOSE_HCA(struct mthca_dev *dev, int panic, u8 *status) | 1458 | int mthca_CLOSE_HCA(struct mthca_dev *dev, int panic, u8 *status) |
1457 | { | 1459 | { |
1458 | return mthca_cmd(dev, 0, 0, panic, CMD_CLOSE_HCA, HZ, status); | 1460 | return mthca_cmd(dev, 0, 0, panic, CMD_CLOSE_HCA, CMD_TIME_CLASS_C, status); |
1459 | } | 1461 | } |
1460 | 1462 | ||
1461 | int mthca_SET_IB(struct mthca_dev *dev, struct mthca_set_ib_param *param, | 1463 | int mthca_SET_IB(struct mthca_dev *dev, struct mthca_set_ib_param *param, |
diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h index 17621de54a9..bf1720f7f35 100644 --- a/drivers/infiniband/hw/nes/nes.h +++ b/drivers/infiniband/hw/nes/nes.h | |||
@@ -56,10 +56,8 @@ | |||
56 | 56 | ||
57 | #define QUEUE_DISCONNECTS | 57 | #define QUEUE_DISCONNECTS |
58 | 58 | ||
59 | #define DRV_BUILD "1" | ||
60 | |||
61 | #define DRV_NAME "iw_nes" | 59 | #define DRV_NAME "iw_nes" |
62 | #define DRV_VERSION "1.0 KO Build " DRV_BUILD | 60 | #define DRV_VERSION "1.5.0.0" |
63 | #define PFX DRV_NAME ": " | 61 | #define PFX DRV_NAME ": " |
64 | 62 | ||
65 | /* | 63 | /* |
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index dbd9a75474e..11c7d664201 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c | |||
@@ -56,6 +56,7 @@ | |||
56 | #include <net/neighbour.h> | 56 | #include <net/neighbour.h> |
57 | #include <net/route.h> | 57 | #include <net/route.h> |
58 | #include <net/ip_fib.h> | 58 | #include <net/ip_fib.h> |
59 | #include <net/tcp.h> | ||
59 | 60 | ||
60 | #include "nes.h" | 61 | #include "nes.h" |
61 | 62 | ||
@@ -540,6 +541,7 @@ static void nes_cm_timer_tick(unsigned long pass) | |||
540 | struct list_head *list_node; | 541 | struct list_head *list_node; |
541 | struct nes_cm_core *cm_core = g_cm_core; | 542 | struct nes_cm_core *cm_core = g_cm_core; |
542 | u32 settimer = 0; | 543 | u32 settimer = 0; |
544 | unsigned long timetosend; | ||
543 | int ret = NETDEV_TX_OK; | 545 | int ret = NETDEV_TX_OK; |
544 | 546 | ||
545 | struct list_head timer_list; | 547 | struct list_head timer_list; |
@@ -644,8 +646,11 @@ static void nes_cm_timer_tick(unsigned long pass) | |||
644 | send_entry->retrycount); | 646 | send_entry->retrycount); |
645 | if (send_entry->send_retrans) { | 647 | if (send_entry->send_retrans) { |
646 | send_entry->retranscount--; | 648 | send_entry->retranscount--; |
649 | timetosend = (NES_RETRY_TIMEOUT << | ||
650 | (NES_DEFAULT_RETRANS - send_entry->retranscount)); | ||
651 | |||
647 | send_entry->timetosend = jiffies + | 652 | send_entry->timetosend = jiffies + |
648 | NES_RETRY_TIMEOUT; | 653 | min(timetosend, NES_MAX_TIMEOUT); |
649 | if (nexttimeout > send_entry->timetosend || | 654 | if (nexttimeout > send_entry->timetosend || |
650 | !settimer) { | 655 | !settimer) { |
651 | nexttimeout = send_entry->timetosend; | 656 | nexttimeout = send_entry->timetosend; |
@@ -854,7 +859,6 @@ static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core, | |||
854 | { | 859 | { |
855 | unsigned long flags; | 860 | unsigned long flags; |
856 | struct nes_cm_listener *listen_node; | 861 | struct nes_cm_listener *listen_node; |
857 | __be32 tmp_addr = cpu_to_be32(dst_addr); | ||
858 | 862 | ||
859 | /* walk list and find cm_node associated with this session ID */ | 863 | /* walk list and find cm_node associated with this session ID */ |
860 | spin_lock_irqsave(&cm_core->listen_list_lock, flags); | 864 | spin_lock_irqsave(&cm_core->listen_list_lock, flags); |
@@ -871,9 +875,6 @@ static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core, | |||
871 | } | 875 | } |
872 | spin_unlock_irqrestore(&cm_core->listen_list_lock, flags); | 876 | spin_unlock_irqrestore(&cm_core->listen_list_lock, flags); |
873 | 877 | ||
874 | nes_debug(NES_DBG_CM, "Unable to find listener for %pI4:%x\n", | ||
875 | &tmp_addr, dst_port); | ||
876 | |||
877 | /* no listener */ | 878 | /* no listener */ |
878 | return NULL; | 879 | return NULL; |
879 | } | 880 | } |
@@ -1325,18 +1326,20 @@ static void handle_fin_pkt(struct nes_cm_node *cm_node) | |||
1325 | nes_debug(NES_DBG_CM, "Received FIN, cm_node = %p, state = %u. " | 1326 | nes_debug(NES_DBG_CM, "Received FIN, cm_node = %p, state = %u. " |
1326 | "refcnt=%d\n", cm_node, cm_node->state, | 1327 | "refcnt=%d\n", cm_node, cm_node->state, |
1327 | atomic_read(&cm_node->ref_count)); | 1328 | atomic_read(&cm_node->ref_count)); |
1328 | cm_node->tcp_cntxt.rcv_nxt++; | ||
1329 | cleanup_retrans_entry(cm_node); | ||
1330 | switch (cm_node->state) { | 1329 | switch (cm_node->state) { |
1331 | case NES_CM_STATE_SYN_RCVD: | 1330 | case NES_CM_STATE_SYN_RCVD: |
1332 | case NES_CM_STATE_SYN_SENT: | 1331 | case NES_CM_STATE_SYN_SENT: |
1333 | case NES_CM_STATE_ESTABLISHED: | 1332 | case NES_CM_STATE_ESTABLISHED: |
1334 | case NES_CM_STATE_MPAREQ_SENT: | 1333 | case NES_CM_STATE_MPAREQ_SENT: |
1335 | case NES_CM_STATE_MPAREJ_RCVD: | 1334 | case NES_CM_STATE_MPAREJ_RCVD: |
1335 | cm_node->tcp_cntxt.rcv_nxt++; | ||
1336 | cleanup_retrans_entry(cm_node); | ||
1336 | cm_node->state = NES_CM_STATE_LAST_ACK; | 1337 | cm_node->state = NES_CM_STATE_LAST_ACK; |
1337 | send_fin(cm_node, NULL); | 1338 | send_fin(cm_node, NULL); |
1338 | break; | 1339 | break; |
1339 | case NES_CM_STATE_FIN_WAIT1: | 1340 | case NES_CM_STATE_FIN_WAIT1: |
1341 | cm_node->tcp_cntxt.rcv_nxt++; | ||
1342 | cleanup_retrans_entry(cm_node); | ||
1340 | cm_node->state = NES_CM_STATE_CLOSING; | 1343 | cm_node->state = NES_CM_STATE_CLOSING; |
1341 | send_ack(cm_node, NULL); | 1344 | send_ack(cm_node, NULL); |
1342 | /* Wait for ACK as this is simultanous close.. | 1345 | /* Wait for ACK as this is simultanous close.. |
@@ -1344,11 +1347,15 @@ static void handle_fin_pkt(struct nes_cm_node *cm_node) | |||
1344 | * Just rm the node.. Done.. */ | 1347 | * Just rm the node.. Done.. */ |
1345 | break; | 1348 | break; |
1346 | case NES_CM_STATE_FIN_WAIT2: | 1349 | case NES_CM_STATE_FIN_WAIT2: |
1350 | cm_node->tcp_cntxt.rcv_nxt++; | ||
1351 | cleanup_retrans_entry(cm_node); | ||
1347 | cm_node->state = NES_CM_STATE_TIME_WAIT; | 1352 | cm_node->state = NES_CM_STATE_TIME_WAIT; |
1348 | send_ack(cm_node, NULL); | 1353 | send_ack(cm_node, NULL); |
1349 | schedule_nes_timer(cm_node, NULL, NES_TIMER_TYPE_CLOSE, 1, 0); | 1354 | schedule_nes_timer(cm_node, NULL, NES_TIMER_TYPE_CLOSE, 1, 0); |
1350 | break; | 1355 | break; |
1351 | case NES_CM_STATE_TIME_WAIT: | 1356 | case NES_CM_STATE_TIME_WAIT: |
1357 | cm_node->tcp_cntxt.rcv_nxt++; | ||
1358 | cleanup_retrans_entry(cm_node); | ||
1352 | cm_node->state = NES_CM_STATE_CLOSED; | 1359 | cm_node->state = NES_CM_STATE_CLOSED; |
1353 | rem_ref_cm_node(cm_node->cm_core, cm_node); | 1360 | rem_ref_cm_node(cm_node->cm_core, cm_node); |
1354 | break; | 1361 | break; |
@@ -1384,7 +1391,6 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, | |||
1384 | passive_state = atomic_add_return(1, &cm_node->passive_state); | 1391 | passive_state = atomic_add_return(1, &cm_node->passive_state); |
1385 | if (passive_state == NES_SEND_RESET_EVENT) | 1392 | if (passive_state == NES_SEND_RESET_EVENT) |
1386 | create_event(cm_node, NES_CM_EVENT_RESET); | 1393 | create_event(cm_node, NES_CM_EVENT_RESET); |
1387 | cleanup_retrans_entry(cm_node); | ||
1388 | cm_node->state = NES_CM_STATE_CLOSED; | 1394 | cm_node->state = NES_CM_STATE_CLOSED; |
1389 | dev_kfree_skb_any(skb); | 1395 | dev_kfree_skb_any(skb); |
1390 | break; | 1396 | break; |
@@ -1398,17 +1404,16 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, | |||
1398 | active_open_err(cm_node, skb, reset); | 1404 | active_open_err(cm_node, skb, reset); |
1399 | break; | 1405 | break; |
1400 | case NES_CM_STATE_CLOSED: | 1406 | case NES_CM_STATE_CLOSED: |
1401 | cleanup_retrans_entry(cm_node); | ||
1402 | drop_packet(skb); | 1407 | drop_packet(skb); |
1403 | break; | 1408 | break; |
1409 | case NES_CM_STATE_LAST_ACK: | ||
1410 | cm_node->cm_id->rem_ref(cm_node->cm_id); | ||
1404 | case NES_CM_STATE_TIME_WAIT: | 1411 | case NES_CM_STATE_TIME_WAIT: |
1405 | cleanup_retrans_entry(cm_node); | ||
1406 | cm_node->state = NES_CM_STATE_CLOSED; | 1412 | cm_node->state = NES_CM_STATE_CLOSED; |
1407 | rem_ref_cm_node(cm_node->cm_core, cm_node); | 1413 | rem_ref_cm_node(cm_node->cm_core, cm_node); |
1408 | drop_packet(skb); | 1414 | drop_packet(skb); |
1409 | break; | 1415 | break; |
1410 | case NES_CM_STATE_FIN_WAIT1: | 1416 | case NES_CM_STATE_FIN_WAIT1: |
1411 | cleanup_retrans_entry(cm_node); | ||
1412 | nes_debug(NES_DBG_CM, "Bad state %s[%u]\n", __func__, __LINE__); | 1417 | nes_debug(NES_DBG_CM, "Bad state %s[%u]\n", __func__, __LINE__); |
1413 | default: | 1418 | default: |
1414 | drop_packet(skb); | 1419 | drop_packet(skb); |
@@ -1455,6 +1460,7 @@ static void handle_rcv_mpa(struct nes_cm_node *cm_node, struct sk_buff *skb) | |||
1455 | NES_PASSIVE_STATE_INDICATED); | 1460 | NES_PASSIVE_STATE_INDICATED); |
1456 | break; | 1461 | break; |
1457 | case NES_CM_STATE_MPAREQ_SENT: | 1462 | case NES_CM_STATE_MPAREQ_SENT: |
1463 | cleanup_retrans_entry(cm_node); | ||
1458 | if (res_type == NES_MPA_REQUEST_REJECT) { | 1464 | if (res_type == NES_MPA_REQUEST_REJECT) { |
1459 | type = NES_CM_EVENT_MPA_REJECT; | 1465 | type = NES_CM_EVENT_MPA_REJECT; |
1460 | cm_node->state = NES_CM_STATE_MPAREJ_RCVD; | 1466 | cm_node->state = NES_CM_STATE_MPAREJ_RCVD; |
@@ -1518,7 +1524,7 @@ static int check_seq(struct nes_cm_node *cm_node, struct tcphdr *tcph, | |||
1518 | rcv_wnd = cm_node->tcp_cntxt.rcv_wnd; | 1524 | rcv_wnd = cm_node->tcp_cntxt.rcv_wnd; |
1519 | if (ack_seq != loc_seq_num) | 1525 | if (ack_seq != loc_seq_num) |
1520 | err = 1; | 1526 | err = 1; |
1521 | else if ((seq + rcv_wnd) < rcv_nxt) | 1527 | else if (!between(seq, rcv_nxt, (rcv_nxt+rcv_wnd))) |
1522 | err = 1; | 1528 | err = 1; |
1523 | if (err) { | 1529 | if (err) { |
1524 | nes_debug(NES_DBG_CM, "%s[%u] create abort for cm_node=%p " | 1530 | nes_debug(NES_DBG_CM, "%s[%u] create abort for cm_node=%p " |
@@ -1652,49 +1658,39 @@ static void handle_synack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, | |||
1652 | } | 1658 | } |
1653 | } | 1659 | } |
1654 | 1660 | ||
1655 | static void handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, | 1661 | static int handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, |
1656 | struct tcphdr *tcph) | 1662 | struct tcphdr *tcph) |
1657 | { | 1663 | { |
1658 | int datasize = 0; | 1664 | int datasize = 0; |
1659 | u32 inc_sequence; | 1665 | u32 inc_sequence; |
1660 | u32 rem_seq_ack; | 1666 | u32 rem_seq_ack; |
1661 | u32 rem_seq; | 1667 | u32 rem_seq; |
1662 | int ret; | 1668 | int ret = 0; |
1663 | int optionsize; | 1669 | int optionsize; |
1664 | optionsize = (tcph->doff << 2) - sizeof(struct tcphdr); | 1670 | optionsize = (tcph->doff << 2) - sizeof(struct tcphdr); |
1665 | 1671 | ||
1666 | if (check_seq(cm_node, tcph, skb)) | 1672 | if (check_seq(cm_node, tcph, skb)) |
1667 | return; | 1673 | return -EINVAL; |
1668 | 1674 | ||
1669 | skb_pull(skb, tcph->doff << 2); | 1675 | skb_pull(skb, tcph->doff << 2); |
1670 | inc_sequence = ntohl(tcph->seq); | 1676 | inc_sequence = ntohl(tcph->seq); |
1671 | rem_seq = ntohl(tcph->seq); | 1677 | rem_seq = ntohl(tcph->seq); |
1672 | rem_seq_ack = ntohl(tcph->ack_seq); | 1678 | rem_seq_ack = ntohl(tcph->ack_seq); |
1673 | datasize = skb->len; | 1679 | datasize = skb->len; |
1674 | cleanup_retrans_entry(cm_node); | ||
1675 | switch (cm_node->state) { | 1680 | switch (cm_node->state) { |
1676 | case NES_CM_STATE_SYN_RCVD: | 1681 | case NES_CM_STATE_SYN_RCVD: |
1677 | /* Passive OPEN */ | 1682 | /* Passive OPEN */ |
1683 | cleanup_retrans_entry(cm_node); | ||
1678 | ret = handle_tcp_options(cm_node, tcph, skb, optionsize, 1); | 1684 | ret = handle_tcp_options(cm_node, tcph, skb, optionsize, 1); |
1679 | if (ret) | 1685 | if (ret) |
1680 | break; | 1686 | break; |
1681 | cm_node->tcp_cntxt.rem_ack_num = ntohl(tcph->ack_seq); | 1687 | cm_node->tcp_cntxt.rem_ack_num = ntohl(tcph->ack_seq); |
1682 | if (cm_node->tcp_cntxt.rem_ack_num != | ||
1683 | cm_node->tcp_cntxt.loc_seq_num) { | ||
1684 | nes_debug(NES_DBG_CM, "rem_ack_num != loc_seq_num\n"); | ||
1685 | cleanup_retrans_entry(cm_node); | ||
1686 | send_reset(cm_node, skb); | ||
1687 | return; | ||
1688 | } | ||
1689 | cm_node->state = NES_CM_STATE_ESTABLISHED; | 1688 | cm_node->state = NES_CM_STATE_ESTABLISHED; |
1690 | cleanup_retrans_entry(cm_node); | ||
1691 | if (datasize) { | 1689 | if (datasize) { |
1692 | cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize; | 1690 | cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize; |
1693 | handle_rcv_mpa(cm_node, skb); | 1691 | handle_rcv_mpa(cm_node, skb); |
1694 | } else { /* rcvd ACK only */ | 1692 | } else /* rcvd ACK only */ |
1695 | dev_kfree_skb_any(skb); | 1693 | dev_kfree_skb_any(skb); |
1696 | cleanup_retrans_entry(cm_node); | ||
1697 | } | ||
1698 | break; | 1694 | break; |
1699 | case NES_CM_STATE_ESTABLISHED: | 1695 | case NES_CM_STATE_ESTABLISHED: |
1700 | /* Passive OPEN */ | 1696 | /* Passive OPEN */ |
@@ -1706,15 +1702,12 @@ static void handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, | |||
1706 | drop_packet(skb); | 1702 | drop_packet(skb); |
1707 | break; | 1703 | break; |
1708 | case NES_CM_STATE_MPAREQ_SENT: | 1704 | case NES_CM_STATE_MPAREQ_SENT: |
1709 | cleanup_retrans_entry(cm_node); | ||
1710 | cm_node->tcp_cntxt.rem_ack_num = ntohl(tcph->ack_seq); | 1705 | cm_node->tcp_cntxt.rem_ack_num = ntohl(tcph->ack_seq); |
1711 | if (datasize) { | 1706 | if (datasize) { |
1712 | cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize; | 1707 | cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize; |
1713 | handle_rcv_mpa(cm_node, skb); | 1708 | handle_rcv_mpa(cm_node, skb); |
1714 | } else { /* Could be just an ack pkt.. */ | 1709 | } else /* Could be just an ack pkt.. */ |
1715 | cleanup_retrans_entry(cm_node); | ||
1716 | dev_kfree_skb_any(skb); | 1710 | dev_kfree_skb_any(skb); |
1717 | } | ||
1718 | break; | 1711 | break; |
1719 | case NES_CM_STATE_LISTENING: | 1712 | case NES_CM_STATE_LISTENING: |
1720 | case NES_CM_STATE_CLOSED: | 1713 | case NES_CM_STATE_CLOSED: |
@@ -1722,11 +1715,10 @@ static void handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, | |||
1722 | send_reset(cm_node, skb); | 1715 | send_reset(cm_node, skb); |
1723 | break; | 1716 | break; |
1724 | case NES_CM_STATE_LAST_ACK: | 1717 | case NES_CM_STATE_LAST_ACK: |
1718 | case NES_CM_STATE_CLOSING: | ||
1725 | cleanup_retrans_entry(cm_node); | 1719 | cleanup_retrans_entry(cm_node); |
1726 | cm_node->state = NES_CM_STATE_CLOSED; | 1720 | cm_node->state = NES_CM_STATE_CLOSED; |
1727 | cm_node->cm_id->rem_ref(cm_node->cm_id); | 1721 | cm_node->cm_id->rem_ref(cm_node->cm_id); |
1728 | case NES_CM_STATE_CLOSING: | ||
1729 | cleanup_retrans_entry(cm_node); | ||
1730 | rem_ref_cm_node(cm_node->cm_core, cm_node); | 1722 | rem_ref_cm_node(cm_node->cm_core, cm_node); |
1731 | drop_packet(skb); | 1723 | drop_packet(skb); |
1732 | break; | 1724 | break; |
@@ -1741,9 +1733,11 @@ static void handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, | |||
1741 | case NES_CM_STATE_MPAREQ_RCVD: | 1733 | case NES_CM_STATE_MPAREQ_RCVD: |
1742 | case NES_CM_STATE_UNKNOWN: | 1734 | case NES_CM_STATE_UNKNOWN: |
1743 | default: | 1735 | default: |
1736 | cleanup_retrans_entry(cm_node); | ||
1744 | drop_packet(skb); | 1737 | drop_packet(skb); |
1745 | break; | 1738 | break; |
1746 | } | 1739 | } |
1740 | return ret; | ||
1747 | } | 1741 | } |
1748 | 1742 | ||
1749 | 1743 | ||
@@ -1849,6 +1843,7 @@ static void process_packet(struct nes_cm_node *cm_node, struct sk_buff *skb, | |||
1849 | enum nes_tcpip_pkt_type pkt_type = NES_PKT_TYPE_UNKNOWN; | 1843 | enum nes_tcpip_pkt_type pkt_type = NES_PKT_TYPE_UNKNOWN; |
1850 | struct tcphdr *tcph = tcp_hdr(skb); | 1844 | struct tcphdr *tcph = tcp_hdr(skb); |
1851 | u32 fin_set = 0; | 1845 | u32 fin_set = 0; |
1846 | int ret = 0; | ||
1852 | skb_pull(skb, ip_hdr(skb)->ihl << 2); | 1847 | skb_pull(skb, ip_hdr(skb)->ihl << 2); |
1853 | 1848 | ||
1854 | nes_debug(NES_DBG_CM, "process_packet: cm_node=%p state =%d syn=%d " | 1849 | nes_debug(NES_DBG_CM, "process_packet: cm_node=%p state =%d syn=%d " |
@@ -1874,17 +1869,17 @@ static void process_packet(struct nes_cm_node *cm_node, struct sk_buff *skb, | |||
1874 | handle_synack_pkt(cm_node, skb, tcph); | 1869 | handle_synack_pkt(cm_node, skb, tcph); |
1875 | break; | 1870 | break; |
1876 | case NES_PKT_TYPE_ACK: | 1871 | case NES_PKT_TYPE_ACK: |
1877 | handle_ack_pkt(cm_node, skb, tcph); | 1872 | ret = handle_ack_pkt(cm_node, skb, tcph); |
1878 | if (fin_set) | 1873 | if (fin_set && !ret) |
1879 | handle_fin_pkt(cm_node); | 1874 | handle_fin_pkt(cm_node); |
1880 | break; | 1875 | break; |
1881 | case NES_PKT_TYPE_RST: | 1876 | case NES_PKT_TYPE_RST: |
1882 | handle_rst_pkt(cm_node, skb, tcph); | 1877 | handle_rst_pkt(cm_node, skb, tcph); |
1883 | break; | 1878 | break; |
1884 | default: | 1879 | default: |
1885 | drop_packet(skb); | 1880 | if ((fin_set) && (!check_seq(cm_node, tcph, skb))) |
1886 | if (fin_set) | ||
1887 | handle_fin_pkt(cm_node); | 1881 | handle_fin_pkt(cm_node); |
1882 | drop_packet(skb); | ||
1888 | break; | 1883 | break; |
1889 | } | 1884 | } |
1890 | } | 1885 | } |
@@ -2710,7 +2705,6 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
2710 | /* associate the node with the QP */ | 2705 | /* associate the node with the QP */ |
2711 | nesqp->cm_node = (void *)cm_node; | 2706 | nesqp->cm_node = (void *)cm_node; |
2712 | cm_node->nesqp = nesqp; | 2707 | cm_node->nesqp = nesqp; |
2713 | nes_add_ref(&nesqp->ibqp); | ||
2714 | 2708 | ||
2715 | nes_debug(NES_DBG_CM, "QP%u, cm_node=%p, jiffies = %lu listener = %p\n", | 2709 | nes_debug(NES_DBG_CM, "QP%u, cm_node=%p, jiffies = %lu listener = %p\n", |
2716 | nesqp->hwqp.qp_id, cm_node, jiffies, cm_node->listener); | 2710 | nesqp->hwqp.qp_id, cm_node, jiffies, cm_node->listener); |
@@ -2763,6 +2757,9 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
2763 | nes_debug(NES_DBG_CM, "Unable to register memory region" | 2757 | nes_debug(NES_DBG_CM, "Unable to register memory region" |
2764 | "for lSMM for cm_node = %p \n", | 2758 | "for lSMM for cm_node = %p \n", |
2765 | cm_node); | 2759 | cm_node); |
2760 | pci_free_consistent(nesdev->pcidev, | ||
2761 | nesqp->private_data_len+sizeof(struct ietf_mpa_frame), | ||
2762 | nesqp->ietf_frame, nesqp->ietf_frame_pbase); | ||
2766 | return -ENOMEM; | 2763 | return -ENOMEM; |
2767 | } | 2764 | } |
2768 | 2765 | ||
@@ -2879,6 +2876,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
2879 | 2876 | ||
2880 | /* notify OF layer that accept event was successful */ | 2877 | /* notify OF layer that accept event was successful */ |
2881 | cm_id->add_ref(cm_id); | 2878 | cm_id->add_ref(cm_id); |
2879 | nes_add_ref(&nesqp->ibqp); | ||
2882 | 2880 | ||
2883 | cm_event.event = IW_CM_EVENT_ESTABLISHED; | 2881 | cm_event.event = IW_CM_EVENT_ESTABLISHED; |
2884 | cm_event.status = IW_CM_EVENT_STATUS_ACCEPTED; | 2882 | cm_event.status = IW_CM_EVENT_STATUS_ACCEPTED; |
@@ -2959,6 +2957,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
2959 | struct nes_device *nesdev; | 2957 | struct nes_device *nesdev; |
2960 | struct nes_cm_node *cm_node; | 2958 | struct nes_cm_node *cm_node; |
2961 | struct nes_cm_info cm_info; | 2959 | struct nes_cm_info cm_info; |
2960 | int apbvt_set = 0; | ||
2962 | 2961 | ||
2963 | ibqp = nes_get_qp(cm_id->device, conn_param->qpn); | 2962 | ibqp = nes_get_qp(cm_id->device, conn_param->qpn); |
2964 | if (!ibqp) | 2963 | if (!ibqp) |
@@ -2996,9 +2995,11 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
2996 | conn_param->private_data_len); | 2995 | conn_param->private_data_len); |
2997 | 2996 | ||
2998 | if (cm_id->local_addr.sin_addr.s_addr != | 2997 | if (cm_id->local_addr.sin_addr.s_addr != |
2999 | cm_id->remote_addr.sin_addr.s_addr) | 2998 | cm_id->remote_addr.sin_addr.s_addr) { |
3000 | nes_manage_apbvt(nesvnic, ntohs(cm_id->local_addr.sin_port), | 2999 | nes_manage_apbvt(nesvnic, ntohs(cm_id->local_addr.sin_port), |
3001 | PCI_FUNC(nesdev->pcidev->devfn), NES_MANAGE_APBVT_ADD); | 3000 | PCI_FUNC(nesdev->pcidev->devfn), NES_MANAGE_APBVT_ADD); |
3001 | apbvt_set = 1; | ||
3002 | } | ||
3002 | 3003 | ||
3003 | /* set up the connection params for the node */ | 3004 | /* set up the connection params for the node */ |
3004 | cm_info.loc_addr = htonl(cm_id->local_addr.sin_addr.s_addr); | 3005 | cm_info.loc_addr = htonl(cm_id->local_addr.sin_addr.s_addr); |
@@ -3015,8 +3016,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
3015 | conn_param->private_data_len, (void *)conn_param->private_data, | 3016 | conn_param->private_data_len, (void *)conn_param->private_data, |
3016 | &cm_info); | 3017 | &cm_info); |
3017 | if (!cm_node) { | 3018 | if (!cm_node) { |
3018 | if (cm_id->local_addr.sin_addr.s_addr != | 3019 | if (apbvt_set) |
3019 | cm_id->remote_addr.sin_addr.s_addr) | ||
3020 | nes_manage_apbvt(nesvnic, ntohs(cm_id->local_addr.sin_port), | 3020 | nes_manage_apbvt(nesvnic, ntohs(cm_id->local_addr.sin_port), |
3021 | PCI_FUNC(nesdev->pcidev->devfn), | 3021 | PCI_FUNC(nesdev->pcidev->devfn), |
3022 | NES_MANAGE_APBVT_DEL); | 3022 | NES_MANAGE_APBVT_DEL); |
@@ -3025,7 +3025,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
3025 | return -ENOMEM; | 3025 | return -ENOMEM; |
3026 | } | 3026 | } |
3027 | 3027 | ||
3028 | cm_node->apbvt_set = 1; | 3028 | cm_node->apbvt_set = apbvt_set; |
3029 | nesqp->cm_node = cm_node; | 3029 | nesqp->cm_node = cm_node; |
3030 | cm_node->nesqp = nesqp; | 3030 | cm_node->nesqp = nesqp; |
3031 | nes_add_ref(&nesqp->ibqp); | 3031 | nes_add_ref(&nesqp->ibqp); |
diff --git a/drivers/infiniband/hw/nes/nes_cm.h b/drivers/infiniband/hw/nes/nes_cm.h index 80bba189257..8b7e7c0e496 100644 --- a/drivers/infiniband/hw/nes/nes_cm.h +++ b/drivers/infiniband/hw/nes/nes_cm.h | |||
@@ -149,6 +149,7 @@ struct nes_timer_entry { | |||
149 | #endif | 149 | #endif |
150 | #define NES_SHORT_TIME (10) | 150 | #define NES_SHORT_TIME (10) |
151 | #define NES_LONG_TIME (2000*HZ/1000) | 151 | #define NES_LONG_TIME (2000*HZ/1000) |
152 | #define NES_MAX_TIMEOUT ((unsigned long) (12*HZ)) | ||
152 | 153 | ||
153 | #define NES_CM_HASHTABLE_SIZE 1024 | 154 | #define NES_CM_HASHTABLE_SIZE 1024 |
154 | #define NES_CM_TCP_TIMER_INTERVAL 3000 | 155 | #define NES_CM_TCP_TIMER_INTERVAL 3000 |
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c index d6fc9ae4406..b832a7b814a 100644 --- a/drivers/infiniband/hw/nes/nes_hw.c +++ b/drivers/infiniband/hw/nes/nes_hw.c | |||
@@ -550,11 +550,8 @@ struct nes_adapter *nes_init_adapter(struct nes_device *nesdev, u8 hw_rev) { | |||
550 | msleep(1); | 550 | msleep(1); |
551 | } | 551 | } |
552 | if (int_cnt > 1) { | 552 | if (int_cnt > 1) { |
553 | u32 sds; | ||
554 | spin_lock_irqsave(&nesadapter->phy_lock, flags); | 553 | spin_lock_irqsave(&nesadapter->phy_lock, flags); |
555 | sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); | 554 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, 0x0000F0C8); |
556 | sds |= 0x00000040; | ||
557 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds); | ||
558 | mh_detected++; | 555 | mh_detected++; |
559 | reset_value = nes_read32(nesdev->regs+NES_SOFTWARE_RESET); | 556 | reset_value = nes_read32(nesdev->regs+NES_SOFTWARE_RESET); |
560 | reset_value |= 0x0000003d; | 557 | reset_value |= 0x0000003d; |
@@ -579,7 +576,7 @@ struct nes_adapter *nes_init_adapter(struct nes_device *nesdev, u8 hw_rev) { | |||
579 | if (++ext_cnt > int_cnt) { | 576 | if (++ext_cnt > int_cnt) { |
580 | spin_lock_irqsave(&nesadapter->phy_lock, flags); | 577 | spin_lock_irqsave(&nesadapter->phy_lock, flags); |
581 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, | 578 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, |
582 | 0x0000F0C8); | 579 | 0x0000F088); |
583 | mh_detected++; | 580 | mh_detected++; |
584 | reset_value = nes_read32(nesdev->regs+NES_SOFTWARE_RESET); | 581 | reset_value = nes_read32(nesdev->regs+NES_SOFTWARE_RESET); |
585 | reset_value |= 0x0000003d; | 582 | reset_value |= 0x0000003d; |
@@ -764,6 +761,9 @@ static int nes_init_serdes(struct nes_device *nesdev, u8 hw_rev, u8 port_count, | |||
764 | return 0; | 761 | return 0; |
765 | 762 | ||
766 | /* init serdes 1 */ | 763 | /* init serdes 1 */ |
764 | if (!(OneG_Mode && (nesadapter->phy_type[1] != NES_PHY_TYPE_PUMA_1G))) | ||
765 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000000FF); | ||
766 | |||
767 | switch (nesadapter->phy_type[1]) { | 767 | switch (nesadapter->phy_type[1]) { |
768 | case NES_PHY_TYPE_ARGUS: | 768 | case NES_PHY_TYPE_ARGUS: |
769 | case NES_PHY_TYPE_SFP_D: | 769 | case NES_PHY_TYPE_SFP_D: |
@@ -771,21 +771,20 @@ static int nes_init_serdes(struct nes_device *nesdev, u8 hw_rev, u8 port_count, | |||
771 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_EMP1, 0x00000000); | 771 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_EMP1, 0x00000000); |
772 | break; | 772 | break; |
773 | case NES_PHY_TYPE_CX4: | 773 | case NES_PHY_TYPE_CX4: |
774 | sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); | ||
775 | sds &= 0xFFFFFFBF; | ||
776 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds); | ||
777 | if (wide_ppm_offset) | 774 | if (wide_ppm_offset) |
778 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000FFFAA); | 775 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000FFFAA); |
779 | else | ||
780 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000000FF); | ||
781 | break; | 776 | break; |
782 | case NES_PHY_TYPE_PUMA_1G: | 777 | case NES_PHY_TYPE_PUMA_1G: |
783 | sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); | 778 | sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); |
784 | sds |= 0x000000100; | 779 | sds |= 0x000000100; |
785 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds); | 780 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds); |
786 | } | 781 | } |
787 | if (!OneG_Mode) | 782 | if (!OneG_Mode) { |
788 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_HIGHZ_LANE_MODE1, 0x11110000); | 783 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_HIGHZ_LANE_MODE1, 0x11110000); |
784 | sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); | ||
785 | sds &= 0xFFFFFFBF; | ||
786 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds); | ||
787 | } | ||
789 | } else { | 788 | } else { |
790 | /* init serdes 0 */ | 789 | /* init serdes 0 */ |
791 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0, 0x00000008); | 790 | nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0, 0x00000008); |
@@ -913,6 +912,12 @@ static void nes_init_csr_ne020(struct nes_device *nesdev, u8 hw_rev, u8 port_cou | |||
913 | u32temp &= 0x7fffffff; | 912 | u32temp &= 0x7fffffff; |
914 | u32temp |= 0x7fff0010; | 913 | u32temp |= 0x7fff0010; |
915 | nes_write_indexed(nesdev, 0x000021f8, u32temp); | 914 | nes_write_indexed(nesdev, 0x000021f8, u32temp); |
915 | if (port_count > 1) { | ||
916 | u32temp = nes_read_indexed(nesdev, 0x000023f8); | ||
917 | u32temp &= 0x7fffffff; | ||
918 | u32temp |= 0x7fff0010; | ||
919 | nes_write_indexed(nesdev, 0x000023f8, u32temp); | ||
920 | } | ||
916 | } | 921 | } |
917 | } | 922 | } |
918 | 923 | ||
@@ -1366,13 +1371,14 @@ int nes_init_phy(struct nes_device *nesdev) | |||
1366 | if (phy_type == NES_PHY_TYPE_ARGUS) { | 1371 | if (phy_type == NES_PHY_TYPE_ARGUS) { |
1367 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x000C); | 1372 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x000C); |
1368 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0008); | 1373 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0008); |
1374 | nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0027, 0x0001); | ||
1369 | } else { | 1375 | } else { |
1370 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x0004); | 1376 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x0004); |
1371 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0038); | 1377 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0038); |
1378 | nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0027, 0x0013); | ||
1372 | } | 1379 | } |
1373 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc31a, 0x0098); | 1380 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc31a, 0x0098); |
1374 | nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0026, 0x0E00); | 1381 | nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0026, 0x0E00); |
1375 | nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0027, 0x0001); | ||
1376 | 1382 | ||
1377 | /* setup LEDs */ | 1383 | /* setup LEDs */ |
1378 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xd006, 0x0007); | 1384 | nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xd006, 0x0007); |
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c index 7e5b5ba13a7..64d5cfd8f38 100644 --- a/drivers/infiniband/hw/nes/nes_verbs.c +++ b/drivers/infiniband/hw/nes/nes_verbs.c | |||
@@ -1627,6 +1627,7 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries, | |||
1627 | nescq->hw_cq.cq_number = nes_ucontext->mcrqf & 0xffff; | 1627 | nescq->hw_cq.cq_number = nes_ucontext->mcrqf & 0xffff; |
1628 | else | 1628 | else |
1629 | nescq->hw_cq.cq_number = nesvnic->mcrq_qp_id + nes_ucontext->mcrqf-1; | 1629 | nescq->hw_cq.cq_number = nesvnic->mcrq_qp_id + nes_ucontext->mcrqf-1; |
1630 | nescq->mcrqf = nes_ucontext->mcrqf; | ||
1630 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); | 1631 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); |
1631 | } | 1632 | } |
1632 | nes_debug(NES_DBG_CQ, "CQ Virtual Address = %08lX, size = %u.\n", | 1633 | nes_debug(NES_DBG_CQ, "CQ Virtual Address = %08lX, size = %u.\n", |
@@ -1682,6 +1683,12 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries, | |||
1682 | if (!context) | 1683 | if (!context) |
1683 | pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, | 1684 | pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, |
1684 | nescq->hw_cq.cq_pbase); | 1685 | nescq->hw_cq.cq_pbase); |
1686 | else { | ||
1687 | pci_free_consistent(nesdev->pcidev, nespbl->pbl_size, | ||
1688 | nespbl->pbl_vbase, nespbl->pbl_pbase); | ||
1689 | kfree(nespbl); | ||
1690 | } | ||
1691 | |||
1685 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); | 1692 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); |
1686 | kfree(nescq); | 1693 | kfree(nescq); |
1687 | return ERR_PTR(-ENOMEM); | 1694 | return ERR_PTR(-ENOMEM); |
@@ -1705,6 +1712,11 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries, | |||
1705 | if (!context) | 1712 | if (!context) |
1706 | pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, | 1713 | pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, |
1707 | nescq->hw_cq.cq_pbase); | 1714 | nescq->hw_cq.cq_pbase); |
1715 | else { | ||
1716 | pci_free_consistent(nesdev->pcidev, nespbl->pbl_size, | ||
1717 | nespbl->pbl_vbase, nespbl->pbl_pbase); | ||
1718 | kfree(nespbl); | ||
1719 | } | ||
1708 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); | 1720 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); |
1709 | kfree(nescq); | 1721 | kfree(nescq); |
1710 | return ERR_PTR(-ENOMEM); | 1722 | return ERR_PTR(-ENOMEM); |
@@ -1722,6 +1734,11 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries, | |||
1722 | if (!context) | 1734 | if (!context) |
1723 | pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, | 1735 | pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, |
1724 | nescq->hw_cq.cq_pbase); | 1736 | nescq->hw_cq.cq_pbase); |
1737 | else { | ||
1738 | pci_free_consistent(nesdev->pcidev, nespbl->pbl_size, | ||
1739 | nespbl->pbl_vbase, nespbl->pbl_pbase); | ||
1740 | kfree(nespbl); | ||
1741 | } | ||
1725 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); | 1742 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); |
1726 | kfree(nescq); | 1743 | kfree(nescq); |
1727 | return ERR_PTR(-ENOMEM); | 1744 | return ERR_PTR(-ENOMEM); |
@@ -1774,6 +1791,11 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries, | |||
1774 | if (!context) | 1791 | if (!context) |
1775 | pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, | 1792 | pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, |
1776 | nescq->hw_cq.cq_pbase); | 1793 | nescq->hw_cq.cq_pbase); |
1794 | else { | ||
1795 | pci_free_consistent(nesdev->pcidev, nespbl->pbl_size, | ||
1796 | nespbl->pbl_vbase, nespbl->pbl_pbase); | ||
1797 | kfree(nespbl); | ||
1798 | } | ||
1777 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); | 1799 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); |
1778 | kfree(nescq); | 1800 | kfree(nescq); |
1779 | return ERR_PTR(-EIO); | 1801 | return ERR_PTR(-EIO); |
@@ -1855,7 +1877,9 @@ static int nes_destroy_cq(struct ib_cq *ib_cq) | |||
1855 | set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_OPCODE_IDX, opcode); | 1877 | set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_OPCODE_IDX, opcode); |
1856 | set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_ID_IDX, | 1878 | set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_ID_IDX, |
1857 | (nescq->hw_cq.cq_number | ((u32)PCI_FUNC(nesdev->pcidev->devfn) << 16))); | 1879 | (nescq->hw_cq.cq_number | ((u32)PCI_FUNC(nesdev->pcidev->devfn) << 16))); |
1858 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, nescq->hw_cq.cq_number); | 1880 | if (!nescq->mcrqf) |
1881 | nes_free_resource(nesadapter, nesadapter->allocated_cqs, nescq->hw_cq.cq_number); | ||
1882 | |||
1859 | atomic_set(&cqp_request->refcount, 2); | 1883 | atomic_set(&cqp_request->refcount, 2); |
1860 | nes_post_cqp_request(nesdev, cqp_request); | 1884 | nes_post_cqp_request(nesdev, cqp_request); |
1861 | 1885 | ||
@@ -1895,8 +1919,7 @@ static int nes_destroy_cq(struct ib_cq *ib_cq) | |||
1895 | static u32 root_256(struct nes_device *nesdev, | 1919 | static u32 root_256(struct nes_device *nesdev, |
1896 | struct nes_root_vpbl *root_vpbl, | 1920 | struct nes_root_vpbl *root_vpbl, |
1897 | struct nes_root_vpbl *new_root, | 1921 | struct nes_root_vpbl *new_root, |
1898 | u16 pbl_count_4k, | 1922 | u16 pbl_count_4k) |
1899 | u16 pbl_count_256) | ||
1900 | { | 1923 | { |
1901 | u64 leaf_pbl; | 1924 | u64 leaf_pbl; |
1902 | int i, j, k; | 1925 | int i, j, k; |
@@ -1952,7 +1975,7 @@ static int nes_reg_mr(struct nes_device *nesdev, struct nes_pd *nespd, | |||
1952 | int ret; | 1975 | int ret; |
1953 | struct nes_adapter *nesadapter = nesdev->nesadapter; | 1976 | struct nes_adapter *nesadapter = nesdev->nesadapter; |
1954 | uint pg_cnt = 0; | 1977 | uint pg_cnt = 0; |
1955 | u16 pbl_count_256; | 1978 | u16 pbl_count_256 = 0; |
1956 | u16 pbl_count = 0; | 1979 | u16 pbl_count = 0; |
1957 | u8 use_256_pbls = 0; | 1980 | u8 use_256_pbls = 0; |
1958 | u8 use_4k_pbls = 0; | 1981 | u8 use_4k_pbls = 0; |
@@ -2012,7 +2035,7 @@ static int nes_reg_mr(struct nes_device *nesdev, struct nes_pd *nespd, | |||
2012 | } | 2035 | } |
2013 | 2036 | ||
2014 | if (use_256_pbls && use_two_level) { | 2037 | if (use_256_pbls && use_two_level) { |
2015 | if (root_256(nesdev, root_vpbl, &new_root, pbl_count_4k, pbl_count_256) == 1) { | 2038 | if (root_256(nesdev, root_vpbl, &new_root, pbl_count_4k) == 1) { |
2016 | if (new_root.pbl_pbase != 0) | 2039 | if (new_root.pbl_pbase != 0) |
2017 | root_vpbl = &new_root; | 2040 | root_vpbl = &new_root; |
2018 | } else { | 2041 | } else { |
@@ -2122,6 +2145,7 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd, | |||
2122 | struct nes_root_vpbl root_vpbl; | 2145 | struct nes_root_vpbl root_vpbl; |
2123 | u32 stag; | 2146 | u32 stag; |
2124 | u32 i; | 2147 | u32 i; |
2148 | unsigned long mask; | ||
2125 | u32 stag_index = 0; | 2149 | u32 stag_index = 0; |
2126 | u32 next_stag_index = 0; | 2150 | u32 next_stag_index = 0; |
2127 | u32 driver_key = 0; | 2151 | u32 driver_key = 0; |
@@ -2150,6 +2174,9 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd, | |||
2150 | return ERR_PTR(-E2BIG); | 2174 | return ERR_PTR(-E2BIG); |
2151 | } | 2175 | } |
2152 | 2176 | ||
2177 | if ((buffer_list[0].addr ^ *iova_start) & ~PAGE_MASK) | ||
2178 | return ERR_PTR(-EINVAL); | ||
2179 | |||
2153 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, nesadapter->max_mr, | 2180 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, nesadapter->max_mr, |
2154 | &stag_index, &next_stag_index); | 2181 | &stag_index, &next_stag_index); |
2155 | if (err) { | 2182 | if (err) { |
@@ -2215,19 +2242,16 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd, | |||
2215 | root_pbl_index++; | 2242 | root_pbl_index++; |
2216 | cur_pbl_index = 0; | 2243 | cur_pbl_index = 0; |
2217 | } | 2244 | } |
2218 | if (buffer_list[i].addr & ~PAGE_MASK) { | ||
2219 | /* TODO: Unwind allocated buffers */ | ||
2220 | nes_free_resource(nesadapter, nesadapter->allocated_mrs, stag_index); | ||
2221 | nes_debug(NES_DBG_MR, "Unaligned Memory Buffer: 0x%x\n", | ||
2222 | (unsigned int) buffer_list[i].addr); | ||
2223 | ibmr = ERR_PTR(-EINVAL); | ||
2224 | kfree(nesmr); | ||
2225 | goto reg_phys_err; | ||
2226 | } | ||
2227 | 2245 | ||
2228 | if (!buffer_list[i].size) { | 2246 | mask = !buffer_list[i].size; |
2247 | if (i != 0) | ||
2248 | mask |= buffer_list[i].addr; | ||
2249 | if (i != num_phys_buf - 1) | ||
2250 | mask |= buffer_list[i].addr + buffer_list[i].size; | ||
2251 | |||
2252 | if (mask & ~PAGE_MASK) { | ||
2229 | nes_free_resource(nesadapter, nesadapter->allocated_mrs, stag_index); | 2253 | nes_free_resource(nesadapter, nesadapter->allocated_mrs, stag_index); |
2230 | nes_debug(NES_DBG_MR, "Invalid Buffer Size\n"); | 2254 | nes_debug(NES_DBG_MR, "Invalid buffer addr or size\n"); |
2231 | ibmr = ERR_PTR(-EINVAL); | 2255 | ibmr = ERR_PTR(-EINVAL); |
2232 | kfree(nesmr); | 2256 | kfree(nesmr); |
2233 | goto reg_phys_err; | 2257 | goto reg_phys_err; |
@@ -2238,7 +2262,7 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd, | |||
2238 | if ((buffer_list[i-1].addr+PAGE_SIZE) != buffer_list[i].addr) | 2262 | if ((buffer_list[i-1].addr+PAGE_SIZE) != buffer_list[i].addr) |
2239 | single_page = 0; | 2263 | single_page = 0; |
2240 | } | 2264 | } |
2241 | vpbl.pbl_vbase[cur_pbl_index].pa_low = cpu_to_le32((u32)buffer_list[i].addr); | 2265 | vpbl.pbl_vbase[cur_pbl_index].pa_low = cpu_to_le32((u32)buffer_list[i].addr & PAGE_MASK); |
2242 | vpbl.pbl_vbase[cur_pbl_index++].pa_high = | 2266 | vpbl.pbl_vbase[cur_pbl_index++].pa_high = |
2243 | cpu_to_le32((u32)((((u64)buffer_list[i].addr) >> 32))); | 2267 | cpu_to_le32((u32)((((u64)buffer_list[i].addr) >> 32))); |
2244 | } | 2268 | } |
@@ -2251,8 +2275,6 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd, | |||
2251 | " length = 0x%016lX, index = 0x%08X\n", | 2275 | " length = 0x%016lX, index = 0x%08X\n", |
2252 | stag, (unsigned long)*iova_start, (unsigned long)region_length, stag_index); | 2276 | stag, (unsigned long)*iova_start, (unsigned long)region_length, stag_index); |
2253 | 2277 | ||
2254 | region_length -= (*iova_start)&PAGE_MASK; | ||
2255 | |||
2256 | /* Make the leaf PBL the root if only one PBL */ | 2278 | /* Make the leaf PBL the root if only one PBL */ |
2257 | if (root_pbl_index == 1) { | 2279 | if (root_pbl_index == 1) { |
2258 | root_vpbl.pbl_pbase = vpbl.pbl_pbase; | 2280 | root_vpbl.pbl_pbase = vpbl.pbl_pbase; |
@@ -2786,10 +2808,9 @@ static ssize_t show_fw_ver(struct device *dev, struct device_attribute *attr, | |||
2786 | struct nes_vnic *nesvnic = nesibdev->nesvnic; | 2808 | struct nes_vnic *nesvnic = nesibdev->nesvnic; |
2787 | 2809 | ||
2788 | nes_debug(NES_DBG_INIT, "\n"); | 2810 | nes_debug(NES_DBG_INIT, "\n"); |
2789 | return sprintf(buf, "%x.%x.%x\n", | 2811 | return sprintf(buf, "%u.%u\n", |
2790 | (int)(nesvnic->nesdev->nesadapter->fw_ver >> 32), | 2812 | (nesvnic->nesdev->nesadapter->firmware_version >> 16), |
2791 | (int)(nesvnic->nesdev->nesadapter->fw_ver >> 16) & 0xffff, | 2813 | (nesvnic->nesdev->nesadapter->firmware_version & 0x000000ff)); |
2792 | (int)(nesvnic->nesdev->nesadapter->fw_ver & 0xffff)); | ||
2793 | } | 2814 | } |
2794 | 2815 | ||
2795 | 2816 | ||
diff --git a/drivers/infiniband/hw/nes/nes_verbs.h b/drivers/infiniband/hw/nes/nes_verbs.h index 5e48f67fbe8..41c07f29f7c 100644 --- a/drivers/infiniband/hw/nes/nes_verbs.h +++ b/drivers/infiniband/hw/nes/nes_verbs.h | |||
@@ -112,6 +112,7 @@ struct nes_cq { | |||
112 | spinlock_t lock; | 112 | spinlock_t lock; |
113 | u8 virtual_cq; | 113 | u8 virtual_cq; |
114 | u8 pad[3]; | 114 | u8 pad[3]; |
115 | u32 mcrqf; | ||
115 | }; | 116 | }; |
116 | 117 | ||
117 | struct nes_wq { | 118 | struct nes_wq { |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index da608273983..e7e5adf84e8 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c | |||
@@ -685,7 +685,8 @@ int ipoib_ib_dev_open(struct net_device *dev) | |||
685 | queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task, | 685 | queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task, |
686 | round_jiffies_relative(HZ)); | 686 | round_jiffies_relative(HZ)); |
687 | 687 | ||
688 | set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags); | 688 | if (!test_and_set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) |
689 | napi_enable(&priv->napi); | ||
689 | 690 | ||
690 | return 0; | 691 | return 0; |
691 | } | 692 | } |
@@ -804,7 +805,8 @@ int ipoib_ib_dev_stop(struct net_device *dev, int flush) | |||
804 | struct ipoib_tx_buf *tx_req; | 805 | struct ipoib_tx_buf *tx_req; |
805 | int i; | 806 | int i; |
806 | 807 | ||
807 | clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags); | 808 | if (test_and_clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) |
809 | napi_disable(&priv->napi); | ||
808 | 810 | ||
809 | ipoib_cm_dev_stop(dev); | 811 | ipoib_cm_dev_stop(dev); |
810 | 812 | ||
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index 421a6640c9b..ab2c192c76b 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c | |||
@@ -106,8 +106,7 @@ int ipoib_open(struct net_device *dev) | |||
106 | 106 | ||
107 | ipoib_dbg(priv, "bringing up interface\n"); | 107 | ipoib_dbg(priv, "bringing up interface\n"); |
108 | 108 | ||
109 | if (!test_and_set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) | 109 | set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags); |
110 | napi_enable(&priv->napi); | ||
111 | 110 | ||
112 | if (ipoib_pkey_dev_delay_open(dev)) | 111 | if (ipoib_pkey_dev_delay_open(dev)) |
113 | return 0; | 112 | return 0; |
@@ -143,7 +142,6 @@ err_stop: | |||
143 | ipoib_ib_dev_stop(dev, 1); | 142 | ipoib_ib_dev_stop(dev, 1); |
144 | 143 | ||
145 | err_disable: | 144 | err_disable: |
146 | napi_disable(&priv->napi); | ||
147 | clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags); | 145 | clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags); |
148 | 146 | ||
149 | return -EINVAL; | 147 | return -EINVAL; |
@@ -156,7 +154,6 @@ static int ipoib_stop(struct net_device *dev) | |||
156 | ipoib_dbg(priv, "stopping interface\n"); | 154 | ipoib_dbg(priv, "stopping interface\n"); |
157 | 155 | ||
158 | clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags); | 156 | clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags); |
159 | napi_disable(&priv->napi); | ||
160 | 157 | ||
161 | netif_stop_queue(dev); | 158 | netif_stop_queue(dev); |
162 | 159 | ||
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c index ebf4be5b7c4..2d175b5928f 100644 --- a/drivers/input/gameport/gameport.c +++ b/drivers/input/gameport/gameport.c | |||
@@ -50,9 +50,8 @@ static LIST_HEAD(gameport_list); | |||
50 | 50 | ||
51 | static struct bus_type gameport_bus; | 51 | static struct bus_type gameport_bus; |
52 | 52 | ||
53 | static void gameport_add_driver(struct gameport_driver *drv); | ||
54 | static void gameport_add_port(struct gameport *gameport); | 53 | static void gameport_add_port(struct gameport *gameport); |
55 | static void gameport_destroy_port(struct gameport *gameport); | 54 | static void gameport_attach_driver(struct gameport_driver *drv); |
56 | static void gameport_reconnect_port(struct gameport *gameport); | 55 | static void gameport_reconnect_port(struct gameport *gameport); |
57 | static void gameport_disconnect_port(struct gameport *gameport); | 56 | static void gameport_disconnect_port(struct gameport *gameport); |
58 | 57 | ||
@@ -230,7 +229,6 @@ static void gameport_find_driver(struct gameport *gameport) | |||
230 | 229 | ||
231 | enum gameport_event_type { | 230 | enum gameport_event_type { |
232 | GAMEPORT_REGISTER_PORT, | 231 | GAMEPORT_REGISTER_PORT, |
233 | GAMEPORT_REGISTER_DRIVER, | ||
234 | GAMEPORT_ATTACH_DRIVER, | 232 | GAMEPORT_ATTACH_DRIVER, |
235 | }; | 233 | }; |
236 | 234 | ||
@@ -374,8 +372,8 @@ static void gameport_handle_event(void) | |||
374 | gameport_add_port(event->object); | 372 | gameport_add_port(event->object); |
375 | break; | 373 | break; |
376 | 374 | ||
377 | case GAMEPORT_REGISTER_DRIVER: | 375 | case GAMEPORT_ATTACH_DRIVER: |
378 | gameport_add_driver(event->object); | 376 | gameport_attach_driver(event->object); |
379 | break; | 377 | break; |
380 | 378 | ||
381 | default: | 379 | default: |
@@ -706,14 +704,14 @@ static int gameport_driver_remove(struct device *dev) | |||
706 | return 0; | 704 | return 0; |
707 | } | 705 | } |
708 | 706 | ||
709 | static void gameport_add_driver(struct gameport_driver *drv) | 707 | static void gameport_attach_driver(struct gameport_driver *drv) |
710 | { | 708 | { |
711 | int error; | 709 | int error; |
712 | 710 | ||
713 | error = driver_register(&drv->driver); | 711 | error = driver_attach(&drv->driver); |
714 | if (error) | 712 | if (error) |
715 | printk(KERN_ERR | 713 | printk(KERN_ERR |
716 | "gameport: driver_register() failed for %s, error: %d\n", | 714 | "gameport: driver_attach() failed for %s, error: %d\n", |
717 | drv->driver.name, error); | 715 | drv->driver.name, error); |
718 | } | 716 | } |
719 | 717 | ||
diff --git a/drivers/input/input.c b/drivers/input/input.c index d44065d2e66..935a1835de2 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c | |||
@@ -1549,7 +1549,6 @@ int input_register_handle(struct input_handle *handle) | |||
1549 | return error; | 1549 | return error; |
1550 | list_add_tail_rcu(&handle->d_node, &dev->h_list); | 1550 | list_add_tail_rcu(&handle->d_node, &dev->h_list); |
1551 | mutex_unlock(&dev->mutex); | 1551 | mutex_unlock(&dev->mutex); |
1552 | synchronize_rcu(); | ||
1553 | 1552 | ||
1554 | /* | 1553 | /* |
1555 | * Since we are supposed to be called from ->connect() | 1554 | * Since we are supposed to be called from ->connect() |
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index f999dc60c3b..444dec07e5d 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
@@ -880,7 +880,7 @@ static unsigned int atkbd_hp_zv6100_forced_release_keys[] = { | |||
880 | }; | 880 | }; |
881 | 881 | ||
882 | /* | 882 | /* |
883 | * Samsung NC10 with Fn+F? key release not working | 883 | * Samsung NC10,NC20 with Fn+F? key release not working |
884 | */ | 884 | */ |
885 | static unsigned int atkbd_samsung_forced_release_keys[] = { | 885 | static unsigned int atkbd_samsung_forced_release_keys[] = { |
886 | 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U | 886 | 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U |
@@ -1534,6 +1534,24 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { | |||
1534 | .driver_data = atkbd_samsung_forced_release_keys, | 1534 | .driver_data = atkbd_samsung_forced_release_keys, |
1535 | }, | 1535 | }, |
1536 | { | 1536 | { |
1537 | .ident = "Samsung NC20", | ||
1538 | .matches = { | ||
1539 | DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), | ||
1540 | DMI_MATCH(DMI_PRODUCT_NAME, "NC20"), | ||
1541 | }, | ||
1542 | .callback = atkbd_setup_forced_release, | ||
1543 | .driver_data = atkbd_samsung_forced_release_keys, | ||
1544 | }, | ||
1545 | { | ||
1546 | .ident = "Samsung SQ45S70S", | ||
1547 | .matches = { | ||
1548 | DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), | ||
1549 | DMI_MATCH(DMI_PRODUCT_NAME, "SQ45S70S"), | ||
1550 | }, | ||
1551 | .callback = atkbd_setup_forced_release, | ||
1552 | .driver_data = atkbd_samsung_forced_release_keys, | ||
1553 | }, | ||
1554 | { | ||
1537 | .ident = "Fujitsu Amilo PA 1510", | 1555 | .ident = "Fujitsu Amilo PA 1510", |
1538 | .matches = { | 1556 | .matches = { |
1539 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), | 1557 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), |
diff --git a/drivers/input/keyboard/bf54x-keys.c b/drivers/input/keyboard/bf54x-keys.c index e94b7d735ac..d427f322e20 100644 --- a/drivers/input/keyboard/bf54x-keys.c +++ b/drivers/input/keyboard/bf54x-keys.c | |||
@@ -252,7 +252,7 @@ static int __devinit bfin_kpad_probe(struct platform_device *pdev) | |||
252 | } | 252 | } |
253 | 253 | ||
254 | error = request_irq(bf54x_kpad->irq, bfin_kpad_isr, | 254 | error = request_irq(bf54x_kpad->irq, bfin_kpad_isr, |
255 | IRQF_SAMPLE_RANDOM, DRV_NAME, pdev); | 255 | 0, DRV_NAME, pdev); |
256 | if (error) { | 256 | if (error) { |
257 | printk(KERN_ERR DRV_NAME | 257 | printk(KERN_ERR DRV_NAME |
258 | ": unable to claim irq %d; error %d\n", | 258 | ": unable to claim irq %d; error %d\n", |
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 203abac1e23..5c0a631d145 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig | |||
@@ -214,7 +214,7 @@ config INPUT_SGI_BTNS | |||
214 | 214 | ||
215 | config HP_SDC_RTC | 215 | config HP_SDC_RTC |
216 | tristate "HP SDC Real Time Clock" | 216 | tristate "HP SDC Real Time Clock" |
217 | depends on GSC || HP300 | 217 | depends on (GSC || HP300) && SERIO |
218 | select HP_SDC | 218 | select HP_SDC |
219 | help | 219 | help |
220 | Say Y here if you want to support the built-in real time clock | 220 | Say Y here if you want to support the built-in real time clock |
diff --git a/drivers/input/mouse/maplemouse.c b/drivers/input/mouse/maplemouse.c index d196abfb68b..5f278176eb9 100644 --- a/drivers/input/mouse/maplemouse.c +++ b/drivers/input/mouse/maplemouse.c | |||
@@ -2,8 +2,8 @@ | |||
2 | * SEGA Dreamcast mouse driver | 2 | * SEGA Dreamcast mouse driver |
3 | * Based on drivers/usb/usbmouse.c | 3 | * Based on drivers/usb/usbmouse.c |
4 | * | 4 | * |
5 | * Copyright Yaegashi Takeshi, 2001 | 5 | * Copyright (c) Yaegashi Takeshi, 2001 |
6 | * Adrian McMenamin, 2008 | 6 | * Copyright (c) Adrian McMenamin, 2008 - 2009 |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
@@ -29,7 +29,7 @@ static void dc_mouse_callback(struct mapleq *mq) | |||
29 | struct maple_device *mapledev = mq->dev; | 29 | struct maple_device *mapledev = mq->dev; |
30 | struct dc_mouse *mse = maple_get_drvdata(mapledev); | 30 | struct dc_mouse *mse = maple_get_drvdata(mapledev); |
31 | struct input_dev *dev = mse->dev; | 31 | struct input_dev *dev = mse->dev; |
32 | unsigned char *res = mq->recvbuf; | 32 | unsigned char *res = mq->recvbuf->buf; |
33 | 33 | ||
34 | buttons = ~res[8]; | 34 | buttons = ~res[8]; |
35 | relx = *(unsigned short *)(res + 12) - 512; | 35 | relx = *(unsigned short *)(res + 12) - 512; |
@@ -47,7 +47,7 @@ static void dc_mouse_callback(struct mapleq *mq) | |||
47 | 47 | ||
48 | static int dc_mouse_open(struct input_dev *dev) | 48 | static int dc_mouse_open(struct input_dev *dev) |
49 | { | 49 | { |
50 | struct dc_mouse *mse = dev->dev.platform_data; | 50 | struct dc_mouse *mse = maple_get_drvdata(to_maple_dev(&dev->dev)); |
51 | 51 | ||
52 | maple_getcond_callback(mse->mdev, dc_mouse_callback, HZ/50, | 52 | maple_getcond_callback(mse->mdev, dc_mouse_callback, HZ/50, |
53 | MAPLE_FUNC_MOUSE); | 53 | MAPLE_FUNC_MOUSE); |
@@ -57,29 +57,33 @@ static int dc_mouse_open(struct input_dev *dev) | |||
57 | 57 | ||
58 | static void dc_mouse_close(struct input_dev *dev) | 58 | static void dc_mouse_close(struct input_dev *dev) |
59 | { | 59 | { |
60 | struct dc_mouse *mse = dev->dev.platform_data; | 60 | struct dc_mouse *mse = maple_get_drvdata(to_maple_dev(&dev->dev)); |
61 | 61 | ||
62 | maple_getcond_callback(mse->mdev, dc_mouse_callback, 0, | 62 | maple_getcond_callback(mse->mdev, dc_mouse_callback, 0, |
63 | MAPLE_FUNC_MOUSE); | 63 | MAPLE_FUNC_MOUSE); |
64 | } | 64 | } |
65 | 65 | ||
66 | 66 | /* allow the mouse to be used */ | |
67 | static int __devinit probe_maple_mouse(struct device *dev) | 67 | static int __devinit probe_maple_mouse(struct device *dev) |
68 | { | 68 | { |
69 | struct maple_device *mdev = to_maple_dev(dev); | 69 | struct maple_device *mdev = to_maple_dev(dev); |
70 | struct maple_driver *mdrv = to_maple_driver(dev->driver); | 70 | struct maple_driver *mdrv = to_maple_driver(dev->driver); |
71 | int error; | ||
71 | struct input_dev *input_dev; | 72 | struct input_dev *input_dev; |
72 | struct dc_mouse *mse; | 73 | struct dc_mouse *mse; |
73 | int error; | ||
74 | 74 | ||
75 | mse = kzalloc(sizeof(struct dc_mouse), GFP_KERNEL); | 75 | mse = kzalloc(sizeof(struct dc_mouse), GFP_KERNEL); |
76 | input_dev = input_allocate_device(); | 76 | if (!mse) { |
77 | |||
78 | if (!mse || !input_dev) { | ||
79 | error = -ENOMEM; | 77 | error = -ENOMEM; |
80 | goto fail; | 78 | goto fail; |
81 | } | 79 | } |
82 | 80 | ||
81 | input_dev = input_allocate_device(); | ||
82 | if (!input_dev) { | ||
83 | error = -ENOMEM; | ||
84 | goto fail_nomem; | ||
85 | } | ||
86 | |||
83 | mse->dev = input_dev; | 87 | mse->dev = input_dev; |
84 | mse->mdev = mdev; | 88 | mse->mdev = mdev; |
85 | 89 | ||
@@ -89,25 +93,24 @@ static int __devinit probe_maple_mouse(struct device *dev) | |||
89 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); | 93 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); |
90 | input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) | | 94 | input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) | |
91 | BIT_MASK(REL_WHEEL); | 95 | BIT_MASK(REL_WHEEL); |
92 | input_dev->name = mdev->product_name; | ||
93 | input_dev->id.bustype = BUS_HOST; | ||
94 | input_dev->open = dc_mouse_open; | 96 | input_dev->open = dc_mouse_open; |
95 | input_dev->close = dc_mouse_close; | 97 | input_dev->close = dc_mouse_close; |
98 | input_dev->name = mdev->product_name; | ||
99 | input_dev->id.bustype = BUS_HOST; | ||
100 | error = input_register_device(input_dev); | ||
101 | if (error) | ||
102 | goto fail_register; | ||
96 | 103 | ||
97 | mdev->driver = mdrv; | 104 | mdev->driver = mdrv; |
98 | maple_set_drvdata(mdev, mse); | 105 | maple_set_drvdata(mdev, mse); |
99 | 106 | ||
100 | error = input_register_device(input_dev); | 107 | return error; |
101 | if (error) | ||
102 | goto fail; | ||
103 | |||
104 | return 0; | ||
105 | 108 | ||
106 | fail: | 109 | fail_register: |
107 | input_free_device(input_dev); | 110 | input_free_device(input_dev); |
108 | maple_set_drvdata(mdev, NULL); | 111 | fail_nomem: |
109 | kfree(mse); | 112 | kfree(mse); |
110 | mdev->driver = NULL; | 113 | fail: |
111 | return error; | 114 | return error; |
112 | } | 115 | } |
113 | 116 | ||
diff --git a/drivers/input/mouse/pc110pad.c b/drivers/input/mouse/pc110pad.c index f63995f854f..3941f97cfa6 100644 --- a/drivers/input/mouse/pc110pad.c +++ b/drivers/input/mouse/pc110pad.c | |||
@@ -108,7 +108,6 @@ static int pc110pad_open(struct input_dev *dev) | |||
108 | */ | 108 | */ |
109 | static int __init pc110pad_init(void) | 109 | static int __init pc110pad_init(void) |
110 | { | 110 | { |
111 | struct pci_dev *dev; | ||
112 | int err; | 111 | int err; |
113 | 112 | ||
114 | if (!no_pci_devices()) | 113 | if (!no_pci_devices()) |
diff --git a/drivers/input/serio/hp_sdc.c b/drivers/input/serio/hp_sdc.c index bfe49243f38..1c9410d1822 100644 --- a/drivers/input/serio/hp_sdc.c +++ b/drivers/input/serio/hp_sdc.c | |||
@@ -819,6 +819,7 @@ static const struct parisc_device_id hp_sdc_tbl[] = { | |||
819 | MODULE_DEVICE_TABLE(parisc, hp_sdc_tbl); | 819 | MODULE_DEVICE_TABLE(parisc, hp_sdc_tbl); |
820 | 820 | ||
821 | static int __init hp_sdc_init_hppa(struct parisc_device *d); | 821 | static int __init hp_sdc_init_hppa(struct parisc_device *d); |
822 | static struct delayed_work moduleloader_work; | ||
822 | 823 | ||
823 | static struct parisc_driver hp_sdc_driver = { | 824 | static struct parisc_driver hp_sdc_driver = { |
824 | .name = "hp_sdc", | 825 | .name = "hp_sdc", |
@@ -930,8 +931,15 @@ static int __init hp_sdc_init(void) | |||
930 | 931 | ||
931 | #if defined(__hppa__) | 932 | #if defined(__hppa__) |
932 | 933 | ||
934 | static void request_module_delayed(struct work_struct *work) | ||
935 | { | ||
936 | request_module("hp_sdc_mlc"); | ||
937 | } | ||
938 | |||
933 | static int __init hp_sdc_init_hppa(struct parisc_device *d) | 939 | static int __init hp_sdc_init_hppa(struct parisc_device *d) |
934 | { | 940 | { |
941 | int ret; | ||
942 | |||
935 | if (!d) | 943 | if (!d) |
936 | return 1; | 944 | return 1; |
937 | if (hp_sdc.dev != NULL) | 945 | if (hp_sdc.dev != NULL) |
@@ -944,13 +952,26 @@ static int __init hp_sdc_init_hppa(struct parisc_device *d) | |||
944 | hp_sdc.data_io = d->hpa.start + 0x800; | 952 | hp_sdc.data_io = d->hpa.start + 0x800; |
945 | hp_sdc.status_io = d->hpa.start + 0x801; | 953 | hp_sdc.status_io = d->hpa.start + 0x801; |
946 | 954 | ||
947 | return hp_sdc_init(); | 955 | INIT_DELAYED_WORK(&moduleloader_work, request_module_delayed); |
956 | |||
957 | ret = hp_sdc_init(); | ||
958 | /* after sucessfull initialization give SDC some time to settle | ||
959 | * and then load the hp_sdc_mlc upper layer driver */ | ||
960 | if (!ret) | ||
961 | schedule_delayed_work(&moduleloader_work, | ||
962 | msecs_to_jiffies(2000)); | ||
963 | |||
964 | return ret; | ||
948 | } | 965 | } |
949 | 966 | ||
950 | #endif /* __hppa__ */ | 967 | #endif /* __hppa__ */ |
951 | 968 | ||
952 | static void hp_sdc_exit(void) | 969 | static void hp_sdc_exit(void) |
953 | { | 970 | { |
971 | /* do nothing if we don't have a SDC */ | ||
972 | if (!hp_sdc.dev) | ||
973 | return; | ||
974 | |||
954 | write_lock_irq(&hp_sdc.lock); | 975 | write_lock_irq(&hp_sdc.lock); |
955 | 976 | ||
956 | /* Turn off all maskable "sub-function" irq's. */ | 977 | /* Turn off all maskable "sub-function" irq's. */ |
@@ -969,6 +990,7 @@ static void hp_sdc_exit(void) | |||
969 | tasklet_kill(&hp_sdc.task); | 990 | tasklet_kill(&hp_sdc.task); |
970 | 991 | ||
971 | #if defined(__hppa__) | 992 | #if defined(__hppa__) |
993 | cancel_delayed_work_sync(&moduleloader_work); | ||
972 | if (unregister_parisc_driver(&hp_sdc_driver)) | 994 | if (unregister_parisc_driver(&hp_sdc_driver)) |
973 | printk(KERN_WARNING PREFIX "Error unregistering HP SDC"); | 995 | printk(KERN_WARNING PREFIX "Error unregistering HP SDC"); |
974 | #endif | 996 | #endif |
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index 83ed2d56b92..fb8a3cd3ffd 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h | |||
@@ -377,6 +377,24 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = { | |||
377 | { } | 377 | { } |
378 | }; | 378 | }; |
379 | 379 | ||
380 | static struct dmi_system_id __initdata i8042_dmi_reset_table[] = { | ||
381 | { | ||
382 | .ident = "MSI Wind U-100", | ||
383 | .matches = { | ||
384 | DMI_MATCH(DMI_BOARD_NAME, "U-100"), | ||
385 | DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), | ||
386 | }, | ||
387 | }, | ||
388 | { | ||
389 | .ident = "LG Electronics X110", | ||
390 | .matches = { | ||
391 | DMI_MATCH(DMI_BOARD_NAME, "X110"), | ||
392 | DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."), | ||
393 | }, | ||
394 | }, | ||
395 | { } | ||
396 | }; | ||
397 | |||
380 | #ifdef CONFIG_PNP | 398 | #ifdef CONFIG_PNP |
381 | static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = { | 399 | static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = { |
382 | { | 400 | { |
@@ -386,6 +404,13 @@ static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = { | |||
386 | DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), | 404 | DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), |
387 | }, | 405 | }, |
388 | }, | 406 | }, |
407 | { | ||
408 | .ident = "MSI Wind U-100", | ||
409 | .matches = { | ||
410 | DMI_MATCH(DMI_BOARD_NAME, "U-100"), | ||
411 | DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), | ||
412 | }, | ||
413 | }, | ||
389 | { } | 414 | { } |
390 | }; | 415 | }; |
391 | #endif | 416 | #endif |
@@ -698,6 +723,9 @@ static int __init i8042_platform_init(void) | |||
698 | #endif | 723 | #endif |
699 | 724 | ||
700 | #ifdef CONFIG_X86 | 725 | #ifdef CONFIG_X86 |
726 | if (dmi_check_system(i8042_dmi_reset_table)) | ||
727 | i8042_reset = 1; | ||
728 | |||
701 | if (dmi_check_system(i8042_dmi_noloop_table)) | 729 | if (dmi_check_system(i8042_dmi_noloop_table)) |
702 | i8042_noloop = 1; | 730 | i8042_noloop = 1; |
703 | 731 | ||
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index 170f71ee577..3cffb704e37 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c | |||
@@ -712,22 +712,43 @@ static int i8042_controller_check(void) | |||
712 | static int i8042_controller_selftest(void) | 712 | static int i8042_controller_selftest(void) |
713 | { | 713 | { |
714 | unsigned char param; | 714 | unsigned char param; |
715 | int i = 0; | ||
715 | 716 | ||
716 | if (!i8042_reset) | 717 | if (!i8042_reset) |
717 | return 0; | 718 | return 0; |
718 | 719 | ||
719 | if (i8042_command(¶m, I8042_CMD_CTL_TEST)) { | 720 | /* |
720 | printk(KERN_ERR "i8042.c: i8042 controller self test timeout.\n"); | 721 | * We try this 5 times; on some really fragile systems this does not |
721 | return -ENODEV; | 722 | * take the first time... |
722 | } | 723 | */ |
724 | do { | ||
725 | |||
726 | if (i8042_command(¶m, I8042_CMD_CTL_TEST)) { | ||
727 | printk(KERN_ERR "i8042.c: i8042 controller self test timeout.\n"); | ||
728 | return -ENODEV; | ||
729 | } | ||
730 | |||
731 | if (param == I8042_RET_CTL_TEST) | ||
732 | return 0; | ||
723 | 733 | ||
724 | if (param != I8042_RET_CTL_TEST) { | ||
725 | printk(KERN_ERR "i8042.c: i8042 controller selftest failed. (%#x != %#x)\n", | 734 | printk(KERN_ERR "i8042.c: i8042 controller selftest failed. (%#x != %#x)\n", |
726 | param, I8042_RET_CTL_TEST); | 735 | param, I8042_RET_CTL_TEST); |
727 | return -EIO; | 736 | msleep(50); |
728 | } | 737 | } while (i++ < 5); |
729 | 738 | ||
739 | #ifdef CONFIG_X86 | ||
740 | /* | ||
741 | * On x86, we don't fail entire i8042 initialization if controller | ||
742 | * reset fails in hopes that keyboard port will still be functional | ||
743 | * and user will still get a working keyboard. This is especially | ||
744 | * important on netbooks. On other arches we trust hardware more. | ||
745 | */ | ||
746 | printk(KERN_INFO | ||
747 | "i8042: giving up on controller selftest, continuing anyway...\n"); | ||
730 | return 0; | 748 | return 0; |
749 | #else | ||
750 | return -EIO; | ||
751 | #endif | ||
731 | } | 752 | } |
732 | 753 | ||
733 | /* | 754 | /* |
diff --git a/drivers/input/touchscreen/ad7877.c b/drivers/input/touchscreen/ad7877.c index e4728a28f49..ecaeb7e8e75 100644 --- a/drivers/input/touchscreen/ad7877.c +++ b/drivers/input/touchscreen/ad7877.c | |||
@@ -736,8 +736,8 @@ static int __devinit ad7877_probe(struct spi_device *spi) | |||
736 | 736 | ||
737 | /* Request AD7877 /DAV GPIO interrupt */ | 737 | /* Request AD7877 /DAV GPIO interrupt */ |
738 | 738 | ||
739 | err = request_irq(spi->irq, ad7877_irq, IRQF_TRIGGER_FALLING | | 739 | err = request_irq(spi->irq, ad7877_irq, IRQF_TRIGGER_FALLING, |
740 | IRQF_SAMPLE_RANDOM, spi->dev.driver->name, ts); | 740 | spi->dev.driver->name, ts); |
741 | if (err) { | 741 | if (err) { |
742 | dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq); | 742 | dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq); |
743 | goto err_free_mem; | 743 | goto err_free_mem; |
diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c index ea4c61d6868..5d8a7039880 100644 --- a/drivers/input/touchscreen/ad7879.c +++ b/drivers/input/touchscreen/ad7879.c | |||
@@ -448,8 +448,7 @@ static int __devinit ad7879_construct(bus_device *bus, struct ad7879 *ts) | |||
448 | ad7879_setup(ts); | 448 | ad7879_setup(ts); |
449 | 449 | ||
450 | err = request_irq(bus->irq, ad7879_irq, | 450 | err = request_irq(bus->irq, ad7879_irq, |
451 | IRQF_TRIGGER_FALLING | IRQF_SAMPLE_RANDOM, | 451 | IRQF_TRIGGER_FALLING, bus->dev.driver->name, ts); |
452 | bus->dev.driver->name, ts); | ||
453 | 452 | ||
454 | if (err) { | 453 | if (err) { |
455 | dev_err(&bus->dev, "irq %d busy?\n", bus->irq); | 454 | dev_err(&bus->dev, "irq %d busy?\n", bus->irq); |
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c index 056ac77e2cf..2b01e56568f 100644 --- a/drivers/input/touchscreen/ads7846.c +++ b/drivers/input/touchscreen/ads7846.c | |||
@@ -127,6 +127,8 @@ struct ads7846 { | |||
127 | void (*filter_cleanup)(void *data); | 127 | void (*filter_cleanup)(void *data); |
128 | int (*get_pendown_state)(void); | 128 | int (*get_pendown_state)(void); |
129 | int gpio_pendown; | 129 | int gpio_pendown; |
130 | |||
131 | void (*wait_for_sync)(void); | ||
130 | }; | 132 | }; |
131 | 133 | ||
132 | /* leave chip selected when we're done, for quicker re-select? */ | 134 | /* leave chip selected when we're done, for quicker re-select? */ |
@@ -511,6 +513,10 @@ static int get_pendown_state(struct ads7846 *ts) | |||
511 | return !gpio_get_value(ts->gpio_pendown); | 513 | return !gpio_get_value(ts->gpio_pendown); |
512 | } | 514 | } |
513 | 515 | ||
516 | static void null_wait_for_sync(void) | ||
517 | { | ||
518 | } | ||
519 | |||
514 | /* | 520 | /* |
515 | * PENIRQ only kicks the timer. The timer only reissues the SPI transfer, | 521 | * PENIRQ only kicks the timer. The timer only reissues the SPI transfer, |
516 | * to retrieve touchscreen status. | 522 | * to retrieve touchscreen status. |
@@ -686,6 +692,7 @@ static void ads7846_rx_val(void *ads) | |||
686 | default: | 692 | default: |
687 | BUG(); | 693 | BUG(); |
688 | } | 694 | } |
695 | ts->wait_for_sync(); | ||
689 | status = spi_async(ts->spi, m); | 696 | status = spi_async(ts->spi, m); |
690 | if (status) | 697 | if (status) |
691 | dev_err(&ts->spi->dev, "spi_async --> %d\n", | 698 | dev_err(&ts->spi->dev, "spi_async --> %d\n", |
@@ -723,6 +730,7 @@ static enum hrtimer_restart ads7846_timer(struct hrtimer *handle) | |||
723 | } else { | 730 | } else { |
724 | /* pen is still down, continue with the measurement */ | 731 | /* pen is still down, continue with the measurement */ |
725 | ts->msg_idx = 0; | 732 | ts->msg_idx = 0; |
733 | ts->wait_for_sync(); | ||
726 | status = spi_async(ts->spi, &ts->msg[0]); | 734 | status = spi_async(ts->spi, &ts->msg[0]); |
727 | if (status) | 735 | if (status) |
728 | dev_err(&ts->spi->dev, "spi_async --> %d\n", status); | 736 | dev_err(&ts->spi->dev, "spi_async --> %d\n", status); |
@@ -746,7 +754,7 @@ static irqreturn_t ads7846_irq(int irq, void *handle) | |||
746 | * that here. (The "generic irq" framework may help...) | 754 | * that here. (The "generic irq" framework may help...) |
747 | */ | 755 | */ |
748 | ts->irq_disabled = 1; | 756 | ts->irq_disabled = 1; |
749 | disable_irq(ts->spi->irq); | 757 | disable_irq_nosync(ts->spi->irq); |
750 | ts->pending = 1; | 758 | ts->pending = 1; |
751 | hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY), | 759 | hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY), |
752 | HRTIMER_MODE_REL); | 760 | HRTIMER_MODE_REL); |
@@ -947,6 +955,8 @@ static int __devinit ads7846_probe(struct spi_device *spi) | |||
947 | ts->penirq_recheck_delay_usecs = | 955 | ts->penirq_recheck_delay_usecs = |
948 | pdata->penirq_recheck_delay_usecs; | 956 | pdata->penirq_recheck_delay_usecs; |
949 | 957 | ||
958 | ts->wait_for_sync = pdata->wait_for_sync ? : null_wait_for_sync; | ||
959 | |||
950 | snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev)); | 960 | snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev)); |
951 | 961 | ||
952 | input_dev->name = "ADS784x Touchscreen"; | 962 | input_dev->name = "ADS784x Touchscreen"; |
diff --git a/drivers/input/touchscreen/da9034-ts.c b/drivers/input/touchscreen/da9034-ts.c index fa67d782c3c..3ffd4c4b170 100644 --- a/drivers/input/touchscreen/da9034-ts.c +++ b/drivers/input/touchscreen/da9034-ts.c | |||
@@ -3,6 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2006-2008 Marvell International Ltd. | 4 | * Copyright (C) 2006-2008 Marvell International Ltd. |
5 | * Fengwei Yin <fengwei.yin@marvell.com> | 5 | * Fengwei Yin <fengwei.yin@marvell.com> |
6 | * Bin Yang <bin.yang@marvell.com> | ||
6 | * Eric Miao <eric.miao@marvell.com> | 7 | * Eric Miao <eric.miao@marvell.com> |
7 | * | 8 | * |
8 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
@@ -175,6 +176,16 @@ static void da9034_event_handler(struct da9034_touch *touch, int event) | |||
175 | goto err_reset; | 176 | goto err_reset; |
176 | 177 | ||
177 | touch->state = STATE_STOP; | 178 | touch->state = STATE_STOP; |
179 | |||
180 | /* FIXME: PEN_{UP/DOWN} events are expected to be | ||
181 | * available by stopping TSI, but this is found not | ||
182 | * always true, delay and simulate such an event | ||
183 | * here is more reliable | ||
184 | */ | ||
185 | mdelay(1); | ||
186 | da9034_event_handler(touch, | ||
187 | is_pen_down(touch) ? EVENT_PEN_DOWN : | ||
188 | EVENT_PEN_UP); | ||
178 | break; | 189 | break; |
179 | 190 | ||
180 | case STATE_STOP: | 191 | case STATE_STOP: |
@@ -189,8 +200,6 @@ static void da9034_event_handler(struct da9034_touch *touch, int event) | |||
189 | report_pen_up(touch); | 200 | report_pen_up(touch); |
190 | touch->state = STATE_IDLE; | 201 | touch->state = STATE_IDLE; |
191 | } | 202 | } |
192 | |||
193 | input_sync(touch->input_dev); | ||
194 | break; | 203 | break; |
195 | 204 | ||
196 | case STATE_WAIT: | 205 | case STATE_WAIT: |
@@ -200,8 +209,10 @@ static void da9034_event_handler(struct da9034_touch *touch, int event) | |||
200 | if (is_pen_down(touch)) { | 209 | if (is_pen_down(touch)) { |
201 | start_tsi(touch); | 210 | start_tsi(touch); |
202 | touch->state = STATE_BUSY; | 211 | touch->state = STATE_BUSY; |
203 | } else | 212 | } else { |
213 | report_pen_up(touch); | ||
204 | touch->state = STATE_IDLE; | 214 | touch->state = STATE_IDLE; |
215 | } | ||
205 | break; | 216 | break; |
206 | } | 217 | } |
207 | return; | 218 | return; |
@@ -226,16 +237,12 @@ static int da9034_touch_notifier(struct notifier_block *nb, | |||
226 | struct da9034_touch *touch = | 237 | struct da9034_touch *touch = |
227 | container_of(nb, struct da9034_touch, notifier); | 238 | container_of(nb, struct da9034_touch, notifier); |
228 | 239 | ||
229 | if (event & DA9034_EVENT_PEN_DOWN) { | ||
230 | if (is_pen_down(touch)) | ||
231 | da9034_event_handler(touch, EVENT_PEN_DOWN); | ||
232 | else | ||
233 | da9034_event_handler(touch, EVENT_PEN_UP); | ||
234 | } | ||
235 | |||
236 | if (event & DA9034_EVENT_TSI_READY) | 240 | if (event & DA9034_EVENT_TSI_READY) |
237 | da9034_event_handler(touch, EVENT_TSI_READY); | 241 | da9034_event_handler(touch, EVENT_TSI_READY); |
238 | 242 | ||
243 | if ((event & DA9034_EVENT_PEN_DOWN) && touch->state == STATE_IDLE) | ||
244 | da9034_event_handler(touch, EVENT_PEN_DOWN); | ||
245 | |||
239 | return 0; | 246 | return 0; |
240 | } | 247 | } |
241 | 248 | ||
@@ -385,6 +392,6 @@ static void __exit da9034_touch_exit(void) | |||
385 | module_exit(da9034_touch_exit); | 392 | module_exit(da9034_touch_exit); |
386 | 393 | ||
387 | MODULE_DESCRIPTION("Touchscreen driver for Dialog Semiconductor DA9034"); | 394 | MODULE_DESCRIPTION("Touchscreen driver for Dialog Semiconductor DA9034"); |
388 | MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>"); | 395 | MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>, Bin Yang <bin.yang@marvell.com>"); |
389 | MODULE_LICENSE("GPL"); | 396 | MODULE_LICENSE("GPL"); |
390 | MODULE_ALIAS("platform:da9034-touch"); | 397 | MODULE_ALIAS("platform:da9034-touch"); |
diff --git a/drivers/input/touchscreen/mainstone-wm97xx.c b/drivers/input/touchscreen/mainstone-wm97xx.c index dfa6a84ab50..4cc047a5116 100644 --- a/drivers/input/touchscreen/mainstone-wm97xx.c +++ b/drivers/input/touchscreen/mainstone-wm97xx.c | |||
@@ -111,13 +111,12 @@ static void wm97xx_acc_pen_up(struct wm97xx *wm) | |||
111 | #else | 111 | #else |
112 | static void wm97xx_acc_pen_up(struct wm97xx *wm) | 112 | static void wm97xx_acc_pen_up(struct wm97xx *wm) |
113 | { | 113 | { |
114 | int count = 16; | 114 | unsigned int count; |
115 | |||
115 | schedule_timeout_uninterruptible(1); | 116 | schedule_timeout_uninterruptible(1); |
116 | 117 | ||
117 | while (count < 16) { | 118 | for (count = 0; count < 16; count++) |
118 | MODR; | 119 | MODR; |
119 | count--; | ||
120 | } | ||
121 | } | 120 | } |
122 | #endif | 121 | #endif |
123 | 122 | ||
diff --git a/drivers/input/touchscreen/wm97xx-core.c b/drivers/input/touchscreen/wm97xx-core.c index cec480bffe3..69af8385ab1 100644 --- a/drivers/input/touchscreen/wm97xx-core.c +++ b/drivers/input/touchscreen/wm97xx-core.c | |||
@@ -370,8 +370,7 @@ static int wm97xx_init_pen_irq(struct wm97xx *wm) | |||
370 | * provided. */ | 370 | * provided. */ |
371 | BUG_ON(!wm->mach_ops->irq_enable); | 371 | BUG_ON(!wm->mach_ops->irq_enable); |
372 | 372 | ||
373 | if (request_irq(wm->pen_irq, wm97xx_pen_interrupt, | 373 | if (request_irq(wm->pen_irq, wm97xx_pen_interrupt, IRQF_SHARED, |
374 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, | ||
375 | "wm97xx-pen", wm)) { | 374 | "wm97xx-pen", wm)) { |
376 | dev_err(wm->dev, | 375 | dev_err(wm->dev, |
377 | "Failed to register pen down interrupt, polling"); | 376 | "Failed to register pen down interrupt, polling"); |
diff --git a/drivers/isdn/hisax/st5481_usb.c b/drivers/isdn/hisax/st5481_usb.c index ec3c0e50766..2b3a055059e 100644 --- a/drivers/isdn/hisax/st5481_usb.c +++ b/drivers/isdn/hisax/st5481_usb.c | |||
@@ -149,14 +149,7 @@ static void usb_ctrl_complete(struct urb *urb) | |||
149 | if (ctrl_msg->dr.bRequest == USB_REQ_CLEAR_FEATURE) { | 149 | if (ctrl_msg->dr.bRequest == USB_REQ_CLEAR_FEATURE) { |
150 | /* Special case handling for pipe reset */ | 150 | /* Special case handling for pipe reset */ |
151 | le16_to_cpus(&ctrl_msg->dr.wIndex); | 151 | le16_to_cpus(&ctrl_msg->dr.wIndex); |
152 | 152 | usb_reset_endpoint(adapter->usb_dev, ctrl_msg->dr.wIndex); | |
153 | /* toggle is reset on clear */ | ||
154 | usb_settoggle(adapter->usb_dev, | ||
155 | ctrl_msg->dr.wIndex & ~USB_DIR_IN, | ||
156 | (ctrl_msg->dr.wIndex & USB_DIR_IN) == 0, | ||
157 | 0); | ||
158 | |||
159 | |||
160 | } | 153 | } |
161 | 154 | ||
162 | if (ctrl_msg->complete) | 155 | if (ctrl_msg->complete) |
diff --git a/drivers/lguest/lg.h b/drivers/lguest/lg.h index ac8a4a3741b..af92a176697 100644 --- a/drivers/lguest/lg.h +++ b/drivers/lguest/lg.h | |||
@@ -158,7 +158,8 @@ void free_interrupts(void); | |||
158 | /* segments.c: */ | 158 | /* segments.c: */ |
159 | void setup_default_gdt_entries(struct lguest_ro_state *state); | 159 | void setup_default_gdt_entries(struct lguest_ro_state *state); |
160 | void setup_guest_gdt(struct lg_cpu *cpu); | 160 | void setup_guest_gdt(struct lg_cpu *cpu); |
161 | void load_guest_gdt(struct lg_cpu *cpu, unsigned long table, u32 num); | 161 | void load_guest_gdt_entry(struct lg_cpu *cpu, unsigned int i, |
162 | u32 low, u32 hi); | ||
162 | void guest_load_tls(struct lg_cpu *cpu, unsigned long tls_array); | 163 | void guest_load_tls(struct lg_cpu *cpu, unsigned long tls_array); |
163 | void copy_gdt(const struct lg_cpu *cpu, struct desc_struct *gdt); | 164 | void copy_gdt(const struct lg_cpu *cpu, struct desc_struct *gdt); |
164 | void copy_gdt_tls(const struct lg_cpu *cpu, struct desc_struct *gdt); | 165 | void copy_gdt_tls(const struct lg_cpu *cpu, struct desc_struct *gdt); |
diff --git a/drivers/lguest/segments.c b/drivers/lguest/segments.c index 4f15439b7f1..7ede64ffeef 100644 --- a/drivers/lguest/segments.c +++ b/drivers/lguest/segments.c | |||
@@ -144,18 +144,19 @@ void copy_gdt(const struct lg_cpu *cpu, struct desc_struct *gdt) | |||
144 | gdt[i] = cpu->arch.gdt[i]; | 144 | gdt[i] = cpu->arch.gdt[i]; |
145 | } | 145 | } |
146 | 146 | ||
147 | /*H:620 This is where the Guest asks us to load a new GDT (LHCALL_LOAD_GDT). | 147 | /*H:620 This is where the Guest asks us to load a new GDT entry |
148 | * We copy it from the Guest and tweak the entries. */ | 148 | * (LHCALL_LOAD_GDT_ENTRY). We tweak the entry and copy it in. */ |
149 | void load_guest_gdt(struct lg_cpu *cpu, unsigned long table, u32 num) | 149 | void load_guest_gdt_entry(struct lg_cpu *cpu, u32 num, u32 lo, u32 hi) |
150 | { | 150 | { |
151 | /* We assume the Guest has the same number of GDT entries as the | 151 | /* We assume the Guest has the same number of GDT entries as the |
152 | * Host, otherwise we'd have to dynamically allocate the Guest GDT. */ | 152 | * Host, otherwise we'd have to dynamically allocate the Guest GDT. */ |
153 | if (num > ARRAY_SIZE(cpu->arch.gdt)) | 153 | if (num > ARRAY_SIZE(cpu->arch.gdt)) |
154 | kill_guest(cpu, "too many gdt entries %i", num); | 154 | kill_guest(cpu, "too many gdt entries %i", num); |
155 | 155 | ||
156 | /* We read the whole thing in, then fix it up. */ | 156 | /* Set it up, then fix it. */ |
157 | __lgread(cpu, cpu->arch.gdt, table, num * sizeof(cpu->arch.gdt[0])); | 157 | cpu->arch.gdt[num].a = lo; |
158 | fixup_gdt_table(cpu, 0, ARRAY_SIZE(cpu->arch.gdt)); | 158 | cpu->arch.gdt[num].b = hi; |
159 | fixup_gdt_table(cpu, num, num+1); | ||
159 | /* Mark that the GDT changed so the core knows it has to copy it again, | 160 | /* Mark that the GDT changed so the core knows it has to copy it again, |
160 | * even if the Guest is run on the same CPU. */ | 161 | * even if the Guest is run on the same CPU. */ |
161 | cpu->changed |= CHANGED_GDT; | 162 | cpu->changed |= CHANGED_GDT; |
diff --git a/drivers/lguest/x86/core.c b/drivers/lguest/x86/core.c index a6b717644be..1a83910f674 100644 --- a/drivers/lguest/x86/core.c +++ b/drivers/lguest/x86/core.c | |||
@@ -324,6 +324,11 @@ static void rewrite_hypercall(struct lg_cpu *cpu) | |||
324 | u8 insn[3] = {0xcd, 0x1f, 0x90}; | 324 | u8 insn[3] = {0xcd, 0x1f, 0x90}; |
325 | 325 | ||
326 | __lgwrite(cpu, guest_pa(cpu, cpu->regs->eip), insn, sizeof(insn)); | 326 | __lgwrite(cpu, guest_pa(cpu, cpu->regs->eip), insn, sizeof(insn)); |
327 | /* The above write might have caused a copy of that page to be made | ||
328 | * (if it was read-only). We need to make sure the Guest has | ||
329 | * up-to-date pagetables. As this doesn't happen often, we can just | ||
330 | * drop them all. */ | ||
331 | guest_pagetable_clear_all(cpu); | ||
327 | } | 332 | } |
328 | 333 | ||
329 | static bool is_hypercall(struct lg_cpu *cpu) | 334 | static bool is_hypercall(struct lg_cpu *cpu) |
@@ -563,8 +568,8 @@ void __exit lguest_arch_host_fini(void) | |||
563 | int lguest_arch_do_hcall(struct lg_cpu *cpu, struct hcall_args *args) | 568 | int lguest_arch_do_hcall(struct lg_cpu *cpu, struct hcall_args *args) |
564 | { | 569 | { |
565 | switch (args->arg0) { | 570 | switch (args->arg0) { |
566 | case LHCALL_LOAD_GDT: | 571 | case LHCALL_LOAD_GDT_ENTRY: |
567 | load_guest_gdt(cpu, args->arg1, args->arg2); | 572 | load_guest_gdt_entry(cpu, args->arg1, args->arg2, args->arg3); |
568 | break; | 573 | break; |
569 | case LHCALL_LOAD_IDT_ENTRY: | 574 | case LHCALL_LOAD_IDT_ENTRY: |
570 | load_guest_idt_entry(cpu, args->arg1, args->arg2, args->arg3); | 575 | load_guest_idt_entry(cpu, args->arg1, args->arg2, args->arg3); |
diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig index 173cf55c64d..3d906833948 100644 --- a/drivers/macintosh/Kconfig +++ b/drivers/macintosh/Kconfig | |||
@@ -123,7 +123,7 @@ config PMAC_APM_EMU | |||
123 | 123 | ||
124 | config PMAC_MEDIABAY | 124 | config PMAC_MEDIABAY |
125 | bool "Support PowerBook hotswap media bay" | 125 | bool "Support PowerBook hotswap media bay" |
126 | depends on PPC_PMAC && PPC32 | 126 | depends on PPC_PMAC && PPC32 && BLOCK |
127 | help | 127 | help |
128 | This option adds support for older PowerBook's hotswap media bay | 128 | This option adds support for older PowerBook's hotswap media bay |
129 | that can contains batteries, floppy drives, or IDE devices. PCI | 129 | that can contains batteries, floppy drives, or IDE devices. PCI |
diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c index d7e46d345d9..029ad8ce8a7 100644 --- a/drivers/macintosh/mediabay.c +++ b/drivers/macintosh/mediabay.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <linux/timer.h> | 18 | #include <linux/timer.h> |
19 | #include <linux/stddef.h> | 19 | #include <linux/stddef.h> |
20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
21 | #include <linux/ide.h> | ||
22 | #include <linux/kthread.h> | 21 | #include <linux/kthread.h> |
23 | #include <linux/mutex.h> | 22 | #include <linux/mutex.h> |
24 | #include <asm/prom.h> | 23 | #include <asm/prom.h> |
@@ -447,6 +446,7 @@ int check_media_bay_by_base(unsigned long base, int what) | |||
447 | 446 | ||
448 | return -ENODEV; | 447 | return -ENODEV; |
449 | } | 448 | } |
449 | EXPORT_SYMBOL_GPL(check_media_bay_by_base); | ||
450 | 450 | ||
451 | int media_bay_set_ide_infos(struct device_node* which_bay, unsigned long base, | 451 | int media_bay_set_ide_infos(struct device_node* which_bay, unsigned long base, |
452 | int irq, ide_hwif_t *hwif) | 452 | int irq, ide_hwif_t *hwif) |
@@ -486,6 +486,7 @@ int media_bay_set_ide_infos(struct device_node* which_bay, unsigned long base, | |||
486 | 486 | ||
487 | return -ENODEV; | 487 | return -ENODEV; |
488 | } | 488 | } |
489 | EXPORT_SYMBOL_GPL(media_bay_set_ide_infos); | ||
489 | #endif /* CONFIG_BLK_DEV_IDE_PMAC */ | 490 | #endif /* CONFIG_BLK_DEV_IDE_PMAC */ |
490 | 491 | ||
491 | static void media_bay_step(int i) | 492 | static void media_bay_step(int i) |
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c index f8a9f7ab2cb..1fb91edc7de 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c | |||
@@ -1479,6 +1479,7 @@ void bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector) | |||
1479 | s += blocks; | 1479 | s += blocks; |
1480 | } | 1480 | } |
1481 | bitmap->last_end_sync = jiffies; | 1481 | bitmap->last_end_sync = jiffies; |
1482 | sysfs_notify(&bitmap->mddev->kobj, NULL, "sync_completed"); | ||
1482 | } | 1483 | } |
1483 | 1484 | ||
1484 | static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset, int needed) | 1485 | static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset, int needed) |
@@ -1589,7 +1590,7 @@ void bitmap_destroy(mddev_t *mddev) | |||
1589 | int bitmap_create(mddev_t *mddev) | 1590 | int bitmap_create(mddev_t *mddev) |
1590 | { | 1591 | { |
1591 | struct bitmap *bitmap; | 1592 | struct bitmap *bitmap; |
1592 | unsigned long blocks = mddev->resync_max_sectors; | 1593 | sector_t blocks = mddev->resync_max_sectors; |
1593 | unsigned long chunks; | 1594 | unsigned long chunks; |
1594 | unsigned long pages; | 1595 | unsigned long pages; |
1595 | struct file *file = mddev->bitmap_file; | 1596 | struct file *file = mddev->bitmap_file; |
@@ -1631,8 +1632,8 @@ int bitmap_create(mddev_t *mddev) | |||
1631 | bitmap->chunkshift = ffz(~bitmap->chunksize); | 1632 | bitmap->chunkshift = ffz(~bitmap->chunksize); |
1632 | 1633 | ||
1633 | /* now that chunksize and chunkshift are set, we can use these macros */ | 1634 | /* now that chunksize and chunkshift are set, we can use these macros */ |
1634 | chunks = (blocks + CHUNK_BLOCK_RATIO(bitmap) - 1) / | 1635 | chunks = (blocks + CHUNK_BLOCK_RATIO(bitmap) - 1) >> |
1635 | CHUNK_BLOCK_RATIO(bitmap); | 1636 | CHUNK_BLOCK_SHIFT(bitmap); |
1636 | pages = (chunks + PAGE_COUNTER_RATIO - 1) / PAGE_COUNTER_RATIO; | 1637 | pages = (chunks + PAGE_COUNTER_RATIO - 1) / PAGE_COUNTER_RATIO; |
1637 | 1638 | ||
1638 | BUG_ON(!pages); | 1639 | BUG_ON(!pages); |
diff --git a/drivers/md/dm-bio-list.h b/drivers/md/dm-bio-list.h deleted file mode 100644 index 345098b4ca7..00000000000 --- a/drivers/md/dm-bio-list.h +++ /dev/null | |||
@@ -1,117 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2004 Red Hat UK Ltd. | ||
3 | * | ||
4 | * This file is released under the GPL. | ||
5 | */ | ||
6 | |||
7 | #ifndef DM_BIO_LIST_H | ||
8 | #define DM_BIO_LIST_H | ||
9 | |||
10 | #include <linux/bio.h> | ||
11 | |||
12 | #ifdef CONFIG_BLOCK | ||
13 | |||
14 | struct bio_list { | ||
15 | struct bio *head; | ||
16 | struct bio *tail; | ||
17 | }; | ||
18 | |||
19 | static inline int bio_list_empty(const struct bio_list *bl) | ||
20 | { | ||
21 | return bl->head == NULL; | ||
22 | } | ||
23 | |||
24 | static inline void bio_list_init(struct bio_list *bl) | ||
25 | { | ||
26 | bl->head = bl->tail = NULL; | ||
27 | } | ||
28 | |||
29 | #define bio_list_for_each(bio, bl) \ | ||
30 | for (bio = (bl)->head; bio; bio = bio->bi_next) | ||
31 | |||
32 | static inline unsigned bio_list_size(const struct bio_list *bl) | ||
33 | { | ||
34 | unsigned sz = 0; | ||
35 | struct bio *bio; | ||
36 | |||
37 | bio_list_for_each(bio, bl) | ||
38 | sz++; | ||
39 | |||
40 | return sz; | ||
41 | } | ||
42 | |||
43 | static inline void bio_list_add(struct bio_list *bl, struct bio *bio) | ||
44 | { | ||
45 | bio->bi_next = NULL; | ||
46 | |||
47 | if (bl->tail) | ||
48 | bl->tail->bi_next = bio; | ||
49 | else | ||
50 | bl->head = bio; | ||
51 | |||
52 | bl->tail = bio; | ||
53 | } | ||
54 | |||
55 | static inline void bio_list_add_head(struct bio_list *bl, struct bio *bio) | ||
56 | { | ||
57 | bio->bi_next = bl->head; | ||
58 | |||
59 | bl->head = bio; | ||
60 | |||
61 | if (!bl->tail) | ||
62 | bl->tail = bio; | ||
63 | } | ||
64 | |||
65 | static inline void bio_list_merge(struct bio_list *bl, struct bio_list *bl2) | ||
66 | { | ||
67 | if (!bl2->head) | ||
68 | return; | ||
69 | |||
70 | if (bl->tail) | ||
71 | bl->tail->bi_next = bl2->head; | ||
72 | else | ||
73 | bl->head = bl2->head; | ||
74 | |||
75 | bl->tail = bl2->tail; | ||
76 | } | ||
77 | |||
78 | static inline void bio_list_merge_head(struct bio_list *bl, | ||
79 | struct bio_list *bl2) | ||
80 | { | ||
81 | if (!bl2->head) | ||
82 | return; | ||
83 | |||
84 | if (bl->head) | ||
85 | bl2->tail->bi_next = bl->head; | ||
86 | else | ||
87 | bl->tail = bl2->tail; | ||
88 | |||
89 | bl->head = bl2->head; | ||
90 | } | ||
91 | |||
92 | static inline struct bio *bio_list_pop(struct bio_list *bl) | ||
93 | { | ||
94 | struct bio *bio = bl->head; | ||
95 | |||
96 | if (bio) { | ||
97 | bl->head = bl->head->bi_next; | ||
98 | if (!bl->head) | ||
99 | bl->tail = NULL; | ||
100 | |||
101 | bio->bi_next = NULL; | ||
102 | } | ||
103 | |||
104 | return bio; | ||
105 | } | ||
106 | |||
107 | static inline struct bio *bio_list_get(struct bio_list *bl) | ||
108 | { | ||
109 | struct bio *bio = bl->head; | ||
110 | |||
111 | bl->head = bl->tail = NULL; | ||
112 | |||
113 | return bio; | ||
114 | } | ||
115 | |||
116 | #endif /* CONFIG_BLOCK */ | ||
117 | #endif | ||
diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c index 59ee1b015d2..559dbb52bc8 100644 --- a/drivers/md/dm-delay.c +++ b/drivers/md/dm-delay.c | |||
@@ -15,8 +15,6 @@ | |||
15 | 15 | ||
16 | #include <linux/device-mapper.h> | 16 | #include <linux/device-mapper.h> |
17 | 17 | ||
18 | #include "dm-bio-list.h" | ||
19 | |||
20 | #define DM_MSG_PREFIX "delay" | 18 | #define DM_MSG_PREFIX "delay" |
21 | 19 | ||
22 | struct delay_c { | 20 | struct delay_c { |
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 095f77bf968..6a386ab4f7e 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
@@ -8,7 +8,6 @@ | |||
8 | #include <linux/device-mapper.h> | 8 | #include <linux/device-mapper.h> |
9 | 9 | ||
10 | #include "dm-path-selector.h" | 10 | #include "dm-path-selector.h" |
11 | #include "dm-bio-list.h" | ||
12 | #include "dm-bio-record.h" | 11 | #include "dm-bio-record.h" |
13 | #include "dm-uevent.h" | 12 | #include "dm-uevent.h" |
14 | 13 | ||
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c index 536ef0bef15..076fbb4e967 100644 --- a/drivers/md/dm-raid1.c +++ b/drivers/md/dm-raid1.c | |||
@@ -5,7 +5,6 @@ | |||
5 | * This file is released under the GPL. | 5 | * This file is released under the GPL. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include "dm-bio-list.h" | ||
9 | #include "dm-bio-record.h" | 8 | #include "dm-bio-record.h" |
10 | 9 | ||
11 | #include <linux/init.h> | 10 | #include <linux/init.h> |
diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c index 59f8d9df9e1..7b899be0b08 100644 --- a/drivers/md/dm-region-hash.c +++ b/drivers/md/dm-region-hash.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <linux/vmalloc.h> | 14 | #include <linux/vmalloc.h> |
15 | 15 | ||
16 | #include "dm.h" | 16 | #include "dm.h" |
17 | #include "dm-bio-list.h" | ||
18 | 17 | ||
19 | #define DM_MSG_PREFIX "region hash" | 18 | #define DM_MSG_PREFIX "region hash" |
20 | 19 | ||
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 981a0413068..d73f17fc777 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/workqueue.h> | 22 | #include <linux/workqueue.h> |
23 | 23 | ||
24 | #include "dm-exception-store.h" | 24 | #include "dm-exception-store.h" |
25 | #include "dm-bio-list.h" | ||
26 | 25 | ||
27 | #define DM_MSG_PREFIX "snapshots" | 26 | #define DM_MSG_PREFIX "snapshots" |
28 | 27 | ||
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 8a994be035b..424f7b048c3 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
@@ -6,7 +6,6 @@ | |||
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include "dm.h" | 8 | #include "dm.h" |
9 | #include "dm-bio-list.h" | ||
10 | #include "dm-uevent.h" | 9 | #include "dm-uevent.h" |
11 | 10 | ||
12 | #include <linux/init.h> | 11 | #include <linux/init.h> |
diff --git a/drivers/md/md.c b/drivers/md/md.c index ed5727c089a..612343fdde9 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -2017,6 +2017,8 @@ repeat: | |||
2017 | clear_bit(MD_CHANGE_PENDING, &mddev->flags); | 2017 | clear_bit(MD_CHANGE_PENDING, &mddev->flags); |
2018 | spin_unlock_irq(&mddev->write_lock); | 2018 | spin_unlock_irq(&mddev->write_lock); |
2019 | wake_up(&mddev->sb_wait); | 2019 | wake_up(&mddev->sb_wait); |
2020 | if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) | ||
2021 | sysfs_notify(&mddev->kobj, NULL, "sync_completed"); | ||
2020 | 2022 | ||
2021 | } | 2023 | } |
2022 | 2024 | ||
@@ -2086,6 +2088,7 @@ state_store(mdk_rdev_t *rdev, const char *buf, size_t len) | |||
2086 | * -writemostly - clears write_mostly | 2088 | * -writemostly - clears write_mostly |
2087 | * blocked - sets the Blocked flag | 2089 | * blocked - sets the Blocked flag |
2088 | * -blocked - clears the Blocked flag | 2090 | * -blocked - clears the Blocked flag |
2091 | * insync - sets Insync providing device isn't active | ||
2089 | */ | 2092 | */ |
2090 | int err = -EINVAL; | 2093 | int err = -EINVAL; |
2091 | if (cmd_match(buf, "faulty") && rdev->mddev->pers) { | 2094 | if (cmd_match(buf, "faulty") && rdev->mddev->pers) { |
@@ -2118,6 +2121,9 @@ state_store(mdk_rdev_t *rdev, const char *buf, size_t len) | |||
2118 | md_wakeup_thread(rdev->mddev->thread); | 2121 | md_wakeup_thread(rdev->mddev->thread); |
2119 | 2122 | ||
2120 | err = 0; | 2123 | err = 0; |
2124 | } else if (cmd_match(buf, "insync") && rdev->raid_disk == -1) { | ||
2125 | set_bit(In_sync, &rdev->flags); | ||
2126 | err = 0; | ||
2121 | } | 2127 | } |
2122 | if (!err && rdev->sysfs_state) | 2128 | if (!err && rdev->sysfs_state) |
2123 | sysfs_notify_dirent(rdev->sysfs_state); | 2129 | sysfs_notify_dirent(rdev->sysfs_state); |
@@ -2190,7 +2196,7 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len) | |||
2190 | } else if (rdev->mddev->pers) { | 2196 | } else if (rdev->mddev->pers) { |
2191 | mdk_rdev_t *rdev2; | 2197 | mdk_rdev_t *rdev2; |
2192 | /* Activating a spare .. or possibly reactivating | 2198 | /* Activating a spare .. or possibly reactivating |
2193 | * if we every get bitmaps working here. | 2199 | * if we ever get bitmaps working here. |
2194 | */ | 2200 | */ |
2195 | 2201 | ||
2196 | if (rdev->raid_disk != -1) | 2202 | if (rdev->raid_disk != -1) |
@@ -3482,12 +3488,15 @@ sync_completed_show(mddev_t *mddev, char *page) | |||
3482 | { | 3488 | { |
3483 | unsigned long max_sectors, resync; | 3489 | unsigned long max_sectors, resync; |
3484 | 3490 | ||
3491 | if (!test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) | ||
3492 | return sprintf(page, "none\n"); | ||
3493 | |||
3485 | if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) | 3494 | if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) |
3486 | max_sectors = mddev->resync_max_sectors; | 3495 | max_sectors = mddev->resync_max_sectors; |
3487 | else | 3496 | else |
3488 | max_sectors = mddev->dev_sectors; | 3497 | max_sectors = mddev->dev_sectors; |
3489 | 3498 | ||
3490 | resync = (mddev->curr_resync - atomic_read(&mddev->recovery_active)); | 3499 | resync = mddev->curr_resync_completed; |
3491 | return sprintf(page, "%lu / %lu\n", resync, max_sectors); | 3500 | return sprintf(page, "%lu / %lu\n", resync, max_sectors); |
3492 | } | 3501 | } |
3493 | 3502 | ||
@@ -6334,18 +6343,13 @@ void md_do_sync(mddev_t *mddev) | |||
6334 | sector_t sectors; | 6343 | sector_t sectors; |
6335 | 6344 | ||
6336 | skipped = 0; | 6345 | skipped = 0; |
6337 | if (j >= mddev->resync_max) { | ||
6338 | sysfs_notify(&mddev->kobj, NULL, "sync_completed"); | ||
6339 | wait_event(mddev->recovery_wait, | ||
6340 | mddev->resync_max > j | ||
6341 | || kthread_should_stop()); | ||
6342 | } | ||
6343 | if (kthread_should_stop()) | ||
6344 | goto interrupted; | ||
6345 | 6346 | ||
6346 | if (mddev->curr_resync > mddev->curr_resync_completed && | 6347 | if ((mddev->curr_resync > mddev->curr_resync_completed && |
6347 | (mddev->curr_resync - mddev->curr_resync_completed) | 6348 | (mddev->curr_resync - mddev->curr_resync_completed) |
6348 | > (max_sectors >> 4)) { | 6349 | > (max_sectors >> 4)) || |
6350 | (j - mddev->curr_resync_completed)*2 | ||
6351 | >= mddev->resync_max - mddev->curr_resync_completed | ||
6352 | ) { | ||
6349 | /* time to update curr_resync_completed */ | 6353 | /* time to update curr_resync_completed */ |
6350 | blk_unplug(mddev->queue); | 6354 | blk_unplug(mddev->queue); |
6351 | wait_event(mddev->recovery_wait, | 6355 | wait_event(mddev->recovery_wait, |
@@ -6353,7 +6357,17 @@ void md_do_sync(mddev_t *mddev) | |||
6353 | mddev->curr_resync_completed = | 6357 | mddev->curr_resync_completed = |
6354 | mddev->curr_resync; | 6358 | mddev->curr_resync; |
6355 | set_bit(MD_CHANGE_CLEAN, &mddev->flags); | 6359 | set_bit(MD_CHANGE_CLEAN, &mddev->flags); |
6360 | sysfs_notify(&mddev->kobj, NULL, "sync_completed"); | ||
6356 | } | 6361 | } |
6362 | |||
6363 | if (j >= mddev->resync_max) | ||
6364 | wait_event(mddev->recovery_wait, | ||
6365 | mddev->resync_max > j | ||
6366 | || kthread_should_stop()); | ||
6367 | |||
6368 | if (kthread_should_stop()) | ||
6369 | goto interrupted; | ||
6370 | |||
6357 | sectors = mddev->pers->sync_request(mddev, j, &skipped, | 6371 | sectors = mddev->pers->sync_request(mddev, j, &skipped, |
6358 | currspeed < speed_min(mddev)); | 6372 | currspeed < speed_min(mddev)); |
6359 | if (sectors == 0) { | 6373 | if (sectors == 0) { |
@@ -6461,6 +6475,7 @@ void md_do_sync(mddev_t *mddev) | |||
6461 | 6475 | ||
6462 | skip: | 6476 | skip: |
6463 | mddev->curr_resync = 0; | 6477 | mddev->curr_resync = 0; |
6478 | mddev->curr_resync_completed = 0; | ||
6464 | mddev->resync_min = 0; | 6479 | mddev->resync_min = 0; |
6465 | mddev->resync_max = MaxSector; | 6480 | mddev->resync_max = MaxSector; |
6466 | sysfs_notify(&mddev->kobj, NULL, "sync_completed"); | 6481 | sysfs_notify(&mddev->kobj, NULL, "sync_completed"); |
diff --git a/drivers/md/md.h b/drivers/md/md.h index e9b7f54c24d..8227ab909d4 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h | |||
@@ -12,10 +12,17 @@ | |||
12 | Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 12 | Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #ifndef _MD_K_H | 15 | #ifndef _MD_MD_H |
16 | #define _MD_K_H | 16 | #define _MD_MD_H |
17 | 17 | ||
18 | #ifdef CONFIG_BLOCK | 18 | #include <linux/blkdev.h> |
19 | #include <linux/kobject.h> | ||
20 | #include <linux/list.h> | ||
21 | #include <linux/mm.h> | ||
22 | #include <linux/mutex.h> | ||
23 | #include <linux/timer.h> | ||
24 | #include <linux/wait.h> | ||
25 | #include <linux/workqueue.h> | ||
19 | 26 | ||
20 | #define MaxSector (~(sector_t)0) | 27 | #define MaxSector (~(sector_t)0) |
21 | 28 | ||
@@ -408,10 +415,6 @@ static inline void safe_put_page(struct page *p) | |||
408 | if (p) put_page(p); | 415 | if (p) put_page(p); |
409 | } | 416 | } |
410 | 417 | ||
411 | #endif /* CONFIG_BLOCK */ | ||
412 | #endif | ||
413 | |||
414 | |||
415 | extern int register_md_personality(struct mdk_personality *p); | 418 | extern int register_md_personality(struct mdk_personality *p); |
416 | extern int unregister_md_personality(struct mdk_personality *p); | 419 | extern int unregister_md_personality(struct mdk_personality *p); |
417 | extern mdk_thread_t * md_register_thread(void (*run) (mddev_t *mddev), | 420 | extern mdk_thread_t * md_register_thread(void (*run) (mddev_t *mddev), |
@@ -434,3 +437,5 @@ extern void md_new_event(mddev_t *mddev); | |||
434 | extern int md_allow_write(mddev_t *mddev); | 437 | extern int md_allow_write(mddev_t *mddev); |
435 | extern void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev); | 438 | extern void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev); |
436 | extern void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors); | 439 | extern void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors); |
440 | |||
441 | #endif /* _MD_MD_H */ | ||
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 274b491a11c..36df9109cde 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <linux/blkdev.h> | 35 | #include <linux/blkdev.h> |
36 | #include <linux/seq_file.h> | 36 | #include <linux/seq_file.h> |
37 | #include "md.h" | 37 | #include "md.h" |
38 | #include "dm-bio-list.h" | ||
39 | #include "raid1.h" | 38 | #include "raid1.h" |
40 | #include "bitmap.h" | 39 | #include "bitmap.h" |
41 | 40 | ||
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index e293d92641a..81a54f17417 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/blkdev.h> | 22 | #include <linux/blkdev.h> |
23 | #include <linux/seq_file.h> | 23 | #include <linux/seq_file.h> |
24 | #include "md.h" | 24 | #include "md.h" |
25 | #include "dm-bio-list.h" | ||
26 | #include "raid10.h" | 25 | #include "raid10.h" |
27 | #include "bitmap.h" | 26 | #include "bitmap.h" |
28 | 27 | ||
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 3bbc6d64704..4616bc3a6e7 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -3845,6 +3845,7 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped | |||
3845 | wait_event(conf->wait_for_overlap, | 3845 | wait_event(conf->wait_for_overlap, |
3846 | atomic_read(&conf->reshape_stripes)==0); | 3846 | atomic_read(&conf->reshape_stripes)==0); |
3847 | mddev->reshape_position = conf->reshape_progress; | 3847 | mddev->reshape_position = conf->reshape_progress; |
3848 | mddev->curr_resync_completed = mddev->curr_resync; | ||
3848 | conf->reshape_checkpoint = jiffies; | 3849 | conf->reshape_checkpoint = jiffies; |
3849 | set_bit(MD_CHANGE_DEVS, &mddev->flags); | 3850 | set_bit(MD_CHANGE_DEVS, &mddev->flags); |
3850 | md_wakeup_thread(mddev->thread); | 3851 | md_wakeup_thread(mddev->thread); |
@@ -3854,6 +3855,7 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped | |||
3854 | conf->reshape_safe = mddev->reshape_position; | 3855 | conf->reshape_safe = mddev->reshape_position; |
3855 | spin_unlock_irq(&conf->device_lock); | 3856 | spin_unlock_irq(&conf->device_lock); |
3856 | wake_up(&conf->wait_for_overlap); | 3857 | wake_up(&conf->wait_for_overlap); |
3858 | sysfs_notify(&mddev->kobj, NULL, "sync_completed"); | ||
3857 | } | 3859 | } |
3858 | 3860 | ||
3859 | if (mddev->delta_disks < 0) { | 3861 | if (mddev->delta_disks < 0) { |
@@ -3938,11 +3940,13 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped | |||
3938 | * then we need to write out the superblock. | 3940 | * then we need to write out the superblock. |
3939 | */ | 3941 | */ |
3940 | sector_nr += reshape_sectors; | 3942 | sector_nr += reshape_sectors; |
3941 | if (sector_nr >= mddev->resync_max) { | 3943 | if ((sector_nr - mddev->curr_resync_completed) * 2 |
3944 | >= mddev->resync_max - mddev->curr_resync_completed) { | ||
3942 | /* Cannot proceed until we've updated the superblock... */ | 3945 | /* Cannot proceed until we've updated the superblock... */ |
3943 | wait_event(conf->wait_for_overlap, | 3946 | wait_event(conf->wait_for_overlap, |
3944 | atomic_read(&conf->reshape_stripes) == 0); | 3947 | atomic_read(&conf->reshape_stripes) == 0); |
3945 | mddev->reshape_position = conf->reshape_progress; | 3948 | mddev->reshape_position = conf->reshape_progress; |
3949 | mddev->curr_resync_completed = mddev->curr_resync; | ||
3946 | conf->reshape_checkpoint = jiffies; | 3950 | conf->reshape_checkpoint = jiffies; |
3947 | set_bit(MD_CHANGE_DEVS, &mddev->flags); | 3951 | set_bit(MD_CHANGE_DEVS, &mddev->flags); |
3948 | md_wakeup_thread(mddev->thread); | 3952 | md_wakeup_thread(mddev->thread); |
@@ -3953,6 +3957,7 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped | |||
3953 | conf->reshape_safe = mddev->reshape_position; | 3957 | conf->reshape_safe = mddev->reshape_position; |
3954 | spin_unlock_irq(&conf->device_lock); | 3958 | spin_unlock_irq(&conf->device_lock); |
3955 | wake_up(&conf->wait_for_overlap); | 3959 | wake_up(&conf->wait_for_overlap); |
3960 | sysfs_notify(&mddev->kobj, NULL, "sync_completed"); | ||
3956 | } | 3961 | } |
3957 | return reshape_sectors; | 3962 | return reshape_sectors; |
3958 | } | 3963 | } |
diff --git a/drivers/media/radio/radio-si470x.c b/drivers/media/radio/radio-si470x.c index 92c297796a9..bd945d04dc9 100644 --- a/drivers/media/radio/radio-si470x.c +++ b/drivers/media/radio/radio-si470x.c | |||
@@ -1200,7 +1200,7 @@ static int si470x_fops_release(struct file *file) | |||
1200 | video_unregister_device(radio->videodev); | 1200 | video_unregister_device(radio->videodev); |
1201 | kfree(radio->buffer); | 1201 | kfree(radio->buffer); |
1202 | kfree(radio); | 1202 | kfree(radio); |
1203 | goto unlock; | 1203 | goto done; |
1204 | } | 1204 | } |
1205 | 1205 | ||
1206 | /* stop rds reception */ | 1206 | /* stop rds reception */ |
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c index d9d974a8f52..add3395d324 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c +++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c | |||
@@ -1461,7 +1461,6 @@ static int pvr2_upload_firmware1(struct pvr2_hdw *hdw) | |||
1461 | return ret; | 1461 | return ret; |
1462 | } | 1462 | } |
1463 | 1463 | ||
1464 | usb_settoggle(hdw->usb_dev, 0 & 0xf, !(0 & USB_DIR_IN), 0); | ||
1465 | usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f)); | 1464 | usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f)); |
1466 | 1465 | ||
1467 | pipe = usb_sndctrlpipe(hdw->usb_dev, 0); | 1466 | pipe = usb_sndctrlpipe(hdw->usb_dev, 0); |
diff --git a/drivers/media/video/pwc/pwc-ctrl.c b/drivers/media/video/pwc/pwc-ctrl.c index f9fbe02e0f6..50b415e07ed 100644 --- a/drivers/media/video/pwc/pwc-ctrl.c +++ b/drivers/media/video/pwc/pwc-ctrl.c | |||
@@ -159,35 +159,67 @@ static void pwc_set_image_buffer_size(struct pwc_device *pdev); | |||
159 | 159 | ||
160 | /****************************************************************************/ | 160 | /****************************************************************************/ |
161 | 161 | ||
162 | static int _send_control_msg(struct pwc_device *pdev, | ||
163 | u8 request, u16 value, int index, void *buf, int buflen, int timeout) | ||
164 | { | ||
165 | int rc; | ||
166 | void *kbuf = NULL; | ||
167 | |||
168 | if (buflen) { | ||
169 | kbuf = kmalloc(buflen, GFP_KERNEL); /* not allowed on stack */ | ||
170 | if (kbuf == NULL) | ||
171 | return -ENOMEM; | ||
172 | memcpy(kbuf, buf, buflen); | ||
173 | } | ||
162 | 174 | ||
163 | #define SendControlMsg(request, value, buflen) \ | 175 | rc = usb_control_msg(pdev->udev, usb_sndctrlpipe(pdev->udev, 0), |
164 | usb_control_msg(pdev->udev, usb_sndctrlpipe(pdev->udev, 0), \ | 176 | request, |
165 | request, \ | 177 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
166 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, \ | 178 | value, |
167 | value, \ | 179 | index, |
168 | pdev->vcinterface, \ | 180 | kbuf, buflen, timeout); |
169 | &buf, buflen, 500) | ||
170 | 181 | ||
171 | #define RecvControlMsg(request, value, buflen) \ | 182 | kfree(kbuf); |
172 | usb_control_msg(pdev->udev, usb_rcvctrlpipe(pdev->udev, 0), \ | 183 | return rc; |
173 | request, \ | 184 | } |
174 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, \ | ||
175 | value, \ | ||
176 | pdev->vcinterface, \ | ||
177 | &buf, buflen, 500) | ||
178 | 185 | ||
186 | static int recv_control_msg(struct pwc_device *pdev, | ||
187 | u8 request, u16 value, void *buf, int buflen) | ||
188 | { | ||
189 | int rc; | ||
190 | void *kbuf = kmalloc(buflen, GFP_KERNEL); /* not allowed on stack */ | ||
191 | |||
192 | if (kbuf == NULL) | ||
193 | return -ENOMEM; | ||
194 | |||
195 | rc = usb_control_msg(pdev->udev, usb_rcvctrlpipe(pdev->udev, 0), | ||
196 | request, | ||
197 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | ||
198 | value, | ||
199 | pdev->vcinterface, | ||
200 | kbuf, buflen, 500); | ||
201 | memcpy(buf, kbuf, buflen); | ||
202 | kfree(kbuf); | ||
203 | return rc; | ||
204 | } | ||
179 | 205 | ||
180 | static int send_video_command(struct usb_device *udev, int index, void *buf, int buflen) | 206 | static inline int send_video_command(struct pwc_device *pdev, |
207 | int index, void *buf, int buflen) | ||
181 | { | 208 | { |
182 | return usb_control_msg(udev, | 209 | return _send_control_msg(pdev, |
183 | usb_sndctrlpipe(udev, 0), | ||
184 | SET_EP_STREAM_CTL, | 210 | SET_EP_STREAM_CTL, |
185 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | ||
186 | VIDEO_OUTPUT_CONTROL_FORMATTER, | 211 | VIDEO_OUTPUT_CONTROL_FORMATTER, |
187 | index, | 212 | index, |
188 | buf, buflen, 1000); | 213 | buf, buflen, 1000); |
189 | } | 214 | } |
190 | 215 | ||
216 | static inline int send_control_msg(struct pwc_device *pdev, | ||
217 | u8 request, u16 value, void *buf, int buflen) | ||
218 | { | ||
219 | return _send_control_msg(pdev, | ||
220 | request, value, pdev->vcinterface, buf, buflen, 500); | ||
221 | } | ||
222 | |||
191 | 223 | ||
192 | 224 | ||
193 | static int set_video_mode_Nala(struct pwc_device *pdev, int size, int frames) | 225 | static int set_video_mode_Nala(struct pwc_device *pdev, int size, int frames) |
@@ -224,7 +256,7 @@ static int set_video_mode_Nala(struct pwc_device *pdev, int size, int frames) | |||
224 | return -EINVAL; | 256 | return -EINVAL; |
225 | 257 | ||
226 | memcpy(buf, pEntry->mode, 3); | 258 | memcpy(buf, pEntry->mode, 3); |
227 | ret = send_video_command(pdev->udev, pdev->vendpoint, buf, 3); | 259 | ret = send_video_command(pdev, pdev->vendpoint, buf, 3); |
228 | if (ret < 0) { | 260 | if (ret < 0) { |
229 | PWC_DEBUG_MODULE("Failed to send video command... %d\n", ret); | 261 | PWC_DEBUG_MODULE("Failed to send video command... %d\n", ret); |
230 | return ret; | 262 | return ret; |
@@ -285,7 +317,7 @@ static int set_video_mode_Timon(struct pwc_device *pdev, int size, int frames, i | |||
285 | memcpy(buf, pChoose->mode, 13); | 317 | memcpy(buf, pChoose->mode, 13); |
286 | if (snapshot) | 318 | if (snapshot) |
287 | buf[0] |= 0x80; | 319 | buf[0] |= 0x80; |
288 | ret = send_video_command(pdev->udev, pdev->vendpoint, buf, 13); | 320 | ret = send_video_command(pdev, pdev->vendpoint, buf, 13); |
289 | if (ret < 0) | 321 | if (ret < 0) |
290 | return ret; | 322 | return ret; |
291 | 323 | ||
@@ -358,7 +390,7 @@ static int set_video_mode_Kiara(struct pwc_device *pdev, int size, int frames, i | |||
358 | buf[0] |= 0x80; | 390 | buf[0] |= 0x80; |
359 | 391 | ||
360 | /* Firmware bug: video endpoint is 5, but commands are sent to endpoint 4 */ | 392 | /* Firmware bug: video endpoint is 5, but commands are sent to endpoint 4 */ |
361 | ret = send_video_command(pdev->udev, 4 /* pdev->vendpoint */, buf, 12); | 393 | ret = send_video_command(pdev, 4 /* pdev->vendpoint */, buf, 12); |
362 | if (ret < 0) | 394 | if (ret < 0) |
363 | return ret; | 395 | return ret; |
364 | 396 | ||
@@ -530,7 +562,8 @@ int pwc_get_brightness(struct pwc_device *pdev) | |||
530 | char buf; | 562 | char buf; |
531 | int ret; | 563 | int ret; |
532 | 564 | ||
533 | ret = RecvControlMsg(GET_LUM_CTL, BRIGHTNESS_FORMATTER, 1); | 565 | ret = recv_control_msg(pdev, |
566 | GET_LUM_CTL, BRIGHTNESS_FORMATTER, &buf, sizeof(buf)); | ||
534 | if (ret < 0) | 567 | if (ret < 0) |
535 | return ret; | 568 | return ret; |
536 | return buf; | 569 | return buf; |
@@ -545,7 +578,8 @@ int pwc_set_brightness(struct pwc_device *pdev, int value) | |||
545 | if (value > 0xffff) | 578 | if (value > 0xffff) |
546 | value = 0xffff; | 579 | value = 0xffff; |
547 | buf = (value >> 9) & 0x7f; | 580 | buf = (value >> 9) & 0x7f; |
548 | return SendControlMsg(SET_LUM_CTL, BRIGHTNESS_FORMATTER, 1); | 581 | return send_control_msg(pdev, |
582 | SET_LUM_CTL, BRIGHTNESS_FORMATTER, &buf, sizeof(buf)); | ||
549 | } | 583 | } |
550 | 584 | ||
551 | /* CONTRAST */ | 585 | /* CONTRAST */ |
@@ -555,7 +589,8 @@ int pwc_get_contrast(struct pwc_device *pdev) | |||
555 | char buf; | 589 | char buf; |
556 | int ret; | 590 | int ret; |
557 | 591 | ||
558 | ret = RecvControlMsg(GET_LUM_CTL, CONTRAST_FORMATTER, 1); | 592 | ret = recv_control_msg(pdev, |
593 | GET_LUM_CTL, CONTRAST_FORMATTER, &buf, sizeof(buf)); | ||
559 | if (ret < 0) | 594 | if (ret < 0) |
560 | return ret; | 595 | return ret; |
561 | return buf; | 596 | return buf; |
@@ -570,7 +605,8 @@ int pwc_set_contrast(struct pwc_device *pdev, int value) | |||
570 | if (value > 0xffff) | 605 | if (value > 0xffff) |
571 | value = 0xffff; | 606 | value = 0xffff; |
572 | buf = (value >> 10) & 0x3f; | 607 | buf = (value >> 10) & 0x3f; |
573 | return SendControlMsg(SET_LUM_CTL, CONTRAST_FORMATTER, 1); | 608 | return send_control_msg(pdev, |
609 | SET_LUM_CTL, CONTRAST_FORMATTER, &buf, sizeof(buf)); | ||
574 | } | 610 | } |
575 | 611 | ||
576 | /* GAMMA */ | 612 | /* GAMMA */ |
@@ -580,7 +616,8 @@ int pwc_get_gamma(struct pwc_device *pdev) | |||
580 | char buf; | 616 | char buf; |
581 | int ret; | 617 | int ret; |
582 | 618 | ||
583 | ret = RecvControlMsg(GET_LUM_CTL, GAMMA_FORMATTER, 1); | 619 | ret = recv_control_msg(pdev, |
620 | GET_LUM_CTL, GAMMA_FORMATTER, &buf, sizeof(buf)); | ||
584 | if (ret < 0) | 621 | if (ret < 0) |
585 | return ret; | 622 | return ret; |
586 | return buf; | 623 | return buf; |
@@ -595,7 +632,8 @@ int pwc_set_gamma(struct pwc_device *pdev, int value) | |||
595 | if (value > 0xffff) | 632 | if (value > 0xffff) |
596 | value = 0xffff; | 633 | value = 0xffff; |
597 | buf = (value >> 11) & 0x1f; | 634 | buf = (value >> 11) & 0x1f; |
598 | return SendControlMsg(SET_LUM_CTL, GAMMA_FORMATTER, 1); | 635 | return send_control_msg(pdev, |
636 | SET_LUM_CTL, GAMMA_FORMATTER, &buf, sizeof(buf)); | ||
599 | } | 637 | } |
600 | 638 | ||
601 | 639 | ||
@@ -613,7 +651,8 @@ int pwc_get_saturation(struct pwc_device *pdev, int *value) | |||
613 | saturation_register = SATURATION_MODE_FORMATTER2; | 651 | saturation_register = SATURATION_MODE_FORMATTER2; |
614 | else | 652 | else |
615 | saturation_register = SATURATION_MODE_FORMATTER1; | 653 | saturation_register = SATURATION_MODE_FORMATTER1; |
616 | ret = RecvControlMsg(GET_CHROM_CTL, saturation_register, 1); | 654 | ret = recv_control_msg(pdev, |
655 | GET_CHROM_CTL, saturation_register, &buf, sizeof(buf)); | ||
617 | if (ret < 0) | 656 | if (ret < 0) |
618 | return ret; | 657 | return ret; |
619 | *value = (signed)buf; | 658 | *value = (signed)buf; |
@@ -636,7 +675,8 @@ int pwc_set_saturation(struct pwc_device *pdev, int value) | |||
636 | saturation_register = SATURATION_MODE_FORMATTER2; | 675 | saturation_register = SATURATION_MODE_FORMATTER2; |
637 | else | 676 | else |
638 | saturation_register = SATURATION_MODE_FORMATTER1; | 677 | saturation_register = SATURATION_MODE_FORMATTER1; |
639 | return SendControlMsg(SET_CHROM_CTL, saturation_register, 1); | 678 | return send_control_msg(pdev, |
679 | SET_CHROM_CTL, saturation_register, &buf, sizeof(buf)); | ||
640 | } | 680 | } |
641 | 681 | ||
642 | /* AGC */ | 682 | /* AGC */ |
@@ -651,7 +691,8 @@ int pwc_set_agc(struct pwc_device *pdev, int mode, int value) | |||
651 | else | 691 | else |
652 | buf = 0xff; /* fixed */ | 692 | buf = 0xff; /* fixed */ |
653 | 693 | ||
654 | ret = SendControlMsg(SET_LUM_CTL, AGC_MODE_FORMATTER, 1); | 694 | ret = send_control_msg(pdev, |
695 | SET_LUM_CTL, AGC_MODE_FORMATTER, &buf, sizeof(buf)); | ||
655 | 696 | ||
656 | if (!mode && ret >= 0) { | 697 | if (!mode && ret >= 0) { |
657 | if (value < 0) | 698 | if (value < 0) |
@@ -659,7 +700,8 @@ int pwc_set_agc(struct pwc_device *pdev, int mode, int value) | |||
659 | if (value > 0xffff) | 700 | if (value > 0xffff) |
660 | value = 0xffff; | 701 | value = 0xffff; |
661 | buf = (value >> 10) & 0x3F; | 702 | buf = (value >> 10) & 0x3F; |
662 | ret = SendControlMsg(SET_LUM_CTL, PRESET_AGC_FORMATTER, 1); | 703 | ret = send_control_msg(pdev, |
704 | SET_LUM_CTL, PRESET_AGC_FORMATTER, &buf, sizeof(buf)); | ||
663 | } | 705 | } |
664 | if (ret < 0) | 706 | if (ret < 0) |
665 | return ret; | 707 | return ret; |
@@ -671,12 +713,14 @@ int pwc_get_agc(struct pwc_device *pdev, int *value) | |||
671 | unsigned char buf; | 713 | unsigned char buf; |
672 | int ret; | 714 | int ret; |
673 | 715 | ||
674 | ret = RecvControlMsg(GET_LUM_CTL, AGC_MODE_FORMATTER, 1); | 716 | ret = recv_control_msg(pdev, |
717 | GET_LUM_CTL, AGC_MODE_FORMATTER, &buf, sizeof(buf)); | ||
675 | if (ret < 0) | 718 | if (ret < 0) |
676 | return ret; | 719 | return ret; |
677 | 720 | ||
678 | if (buf != 0) { /* fixed */ | 721 | if (buf != 0) { /* fixed */ |
679 | ret = RecvControlMsg(GET_LUM_CTL, PRESET_AGC_FORMATTER, 1); | 722 | ret = recv_control_msg(pdev, |
723 | GET_LUM_CTL, PRESET_AGC_FORMATTER, &buf, sizeof(buf)); | ||
680 | if (ret < 0) | 724 | if (ret < 0) |
681 | return ret; | 725 | return ret; |
682 | if (buf > 0x3F) | 726 | if (buf > 0x3F) |
@@ -684,7 +728,8 @@ int pwc_get_agc(struct pwc_device *pdev, int *value) | |||
684 | *value = (buf << 10); | 728 | *value = (buf << 10); |
685 | } | 729 | } |
686 | else { /* auto */ | 730 | else { /* auto */ |
687 | ret = RecvControlMsg(GET_STATUS_CTL, READ_AGC_FORMATTER, 1); | 731 | ret = recv_control_msg(pdev, |
732 | GET_STATUS_CTL, READ_AGC_FORMATTER, &buf, sizeof(buf)); | ||
688 | if (ret < 0) | 733 | if (ret < 0) |
689 | return ret; | 734 | return ret; |
690 | /* Gah... this value ranges from 0x00 ... 0x9F */ | 735 | /* Gah... this value ranges from 0x00 ... 0x9F */ |
@@ -707,7 +752,8 @@ int pwc_set_shutter_speed(struct pwc_device *pdev, int mode, int value) | |||
707 | else | 752 | else |
708 | buf[0] = 0xff; /* fixed */ | 753 | buf[0] = 0xff; /* fixed */ |
709 | 754 | ||
710 | ret = SendControlMsg(SET_LUM_CTL, SHUTTER_MODE_FORMATTER, 1); | 755 | ret = send_control_msg(pdev, |
756 | SET_LUM_CTL, SHUTTER_MODE_FORMATTER, &buf, sizeof(buf)); | ||
711 | 757 | ||
712 | if (!mode && ret >= 0) { | 758 | if (!mode && ret >= 0) { |
713 | if (value < 0) | 759 | if (value < 0) |
@@ -726,7 +772,9 @@ int pwc_set_shutter_speed(struct pwc_device *pdev, int mode, int value) | |||
726 | buf[0] = value >> 8; | 772 | buf[0] = value >> 8; |
727 | } | 773 | } |
728 | 774 | ||
729 | ret = SendControlMsg(SET_LUM_CTL, PRESET_SHUTTER_FORMATTER, 2); | 775 | ret = send_control_msg(pdev, |
776 | SET_LUM_CTL, PRESET_SHUTTER_FORMATTER, | ||
777 | &buf, sizeof(buf)); | ||
730 | } | 778 | } |
731 | return ret; | 779 | return ret; |
732 | } | 780 | } |
@@ -737,7 +785,8 @@ int pwc_get_shutter_speed(struct pwc_device *pdev, int *value) | |||
737 | unsigned char buf[2]; | 785 | unsigned char buf[2]; |
738 | int ret; | 786 | int ret; |
739 | 787 | ||
740 | ret = RecvControlMsg(GET_STATUS_CTL, READ_SHUTTER_FORMATTER, 2); | 788 | ret = recv_control_msg(pdev, |
789 | GET_STATUS_CTL, READ_SHUTTER_FORMATTER, &buf, sizeof(buf)); | ||
741 | if (ret < 0) | 790 | if (ret < 0) |
742 | return ret; | 791 | return ret; |
743 | *value = buf[0] + (buf[1] << 8); | 792 | *value = buf[0] + (buf[1] << 8); |
@@ -764,7 +813,9 @@ int pwc_camera_power(struct pwc_device *pdev, int power) | |||
764 | buf = 0x00; /* active */ | 813 | buf = 0x00; /* active */ |
765 | else | 814 | else |
766 | buf = 0xFF; /* power save */ | 815 | buf = 0xFF; /* power save */ |
767 | return SendControlMsg(SET_STATUS_CTL, SET_POWER_SAVE_MODE_FORMATTER, 1); | 816 | return send_control_msg(pdev, |
817 | SET_STATUS_CTL, SET_POWER_SAVE_MODE_FORMATTER, | ||
818 | &buf, sizeof(buf)); | ||
768 | } | 819 | } |
769 | 820 | ||
770 | 821 | ||
@@ -773,20 +824,20 @@ int pwc_camera_power(struct pwc_device *pdev, int power) | |||
773 | 824 | ||
774 | int pwc_restore_user(struct pwc_device *pdev) | 825 | int pwc_restore_user(struct pwc_device *pdev) |
775 | { | 826 | { |
776 | char buf; /* dummy */ | 827 | return send_control_msg(pdev, |
777 | return SendControlMsg(SET_STATUS_CTL, RESTORE_USER_DEFAULTS_FORMATTER, 0); | 828 | SET_STATUS_CTL, RESTORE_USER_DEFAULTS_FORMATTER, NULL, 0); |
778 | } | 829 | } |
779 | 830 | ||
780 | int pwc_save_user(struct pwc_device *pdev) | 831 | int pwc_save_user(struct pwc_device *pdev) |
781 | { | 832 | { |
782 | char buf; /* dummy */ | 833 | return send_control_msg(pdev, |
783 | return SendControlMsg(SET_STATUS_CTL, SAVE_USER_DEFAULTS_FORMATTER, 0); | 834 | SET_STATUS_CTL, SAVE_USER_DEFAULTS_FORMATTER, NULL, 0); |
784 | } | 835 | } |
785 | 836 | ||
786 | int pwc_restore_factory(struct pwc_device *pdev) | 837 | int pwc_restore_factory(struct pwc_device *pdev) |
787 | { | 838 | { |
788 | char buf; /* dummy */ | 839 | return send_control_msg(pdev, |
789 | return SendControlMsg(SET_STATUS_CTL, RESTORE_FACTORY_DEFAULTS_FORMATTER, 0); | 840 | SET_STATUS_CTL, RESTORE_FACTORY_DEFAULTS_FORMATTER, NULL, 0); |
790 | } | 841 | } |
791 | 842 | ||
792 | /* ************************************************* */ | 843 | /* ************************************************* */ |
@@ -814,7 +865,8 @@ int pwc_set_awb(struct pwc_device *pdev, int mode) | |||
814 | 865 | ||
815 | buf = mode & 0x07; /* just the lowest three bits */ | 866 | buf = mode & 0x07; /* just the lowest three bits */ |
816 | 867 | ||
817 | ret = SendControlMsg(SET_CHROM_CTL, WB_MODE_FORMATTER, 1); | 868 | ret = send_control_msg(pdev, |
869 | SET_CHROM_CTL, WB_MODE_FORMATTER, &buf, sizeof(buf)); | ||
818 | 870 | ||
819 | if (ret < 0) | 871 | if (ret < 0) |
820 | return ret; | 872 | return ret; |
@@ -826,7 +878,8 @@ int pwc_get_awb(struct pwc_device *pdev) | |||
826 | unsigned char buf; | 878 | unsigned char buf; |
827 | int ret; | 879 | int ret; |
828 | 880 | ||
829 | ret = RecvControlMsg(GET_CHROM_CTL, WB_MODE_FORMATTER, 1); | 881 | ret = recv_control_msg(pdev, |
882 | GET_CHROM_CTL, WB_MODE_FORMATTER, &buf, sizeof(buf)); | ||
830 | 883 | ||
831 | if (ret < 0) | 884 | if (ret < 0) |
832 | return ret; | 885 | return ret; |
@@ -843,7 +896,9 @@ int pwc_set_red_gain(struct pwc_device *pdev, int value) | |||
843 | value = 0xffff; | 896 | value = 0xffff; |
844 | /* only the msb is considered */ | 897 | /* only the msb is considered */ |
845 | buf = value >> 8; | 898 | buf = value >> 8; |
846 | return SendControlMsg(SET_CHROM_CTL, PRESET_MANUAL_RED_GAIN_FORMATTER, 1); | 899 | return send_control_msg(pdev, |
900 | SET_CHROM_CTL, PRESET_MANUAL_RED_GAIN_FORMATTER, | ||
901 | &buf, sizeof(buf)); | ||
847 | } | 902 | } |
848 | 903 | ||
849 | int pwc_get_red_gain(struct pwc_device *pdev, int *value) | 904 | int pwc_get_red_gain(struct pwc_device *pdev, int *value) |
@@ -851,7 +906,9 @@ int pwc_get_red_gain(struct pwc_device *pdev, int *value) | |||
851 | unsigned char buf; | 906 | unsigned char buf; |
852 | int ret; | 907 | int ret; |
853 | 908 | ||
854 | ret = RecvControlMsg(GET_CHROM_CTL, PRESET_MANUAL_RED_GAIN_FORMATTER, 1); | 909 | ret = recv_control_msg(pdev, |
910 | GET_CHROM_CTL, PRESET_MANUAL_RED_GAIN_FORMATTER, | ||
911 | &buf, sizeof(buf)); | ||
855 | if (ret < 0) | 912 | if (ret < 0) |
856 | return ret; | 913 | return ret; |
857 | *value = buf << 8; | 914 | *value = buf << 8; |
@@ -869,7 +926,9 @@ int pwc_set_blue_gain(struct pwc_device *pdev, int value) | |||
869 | value = 0xffff; | 926 | value = 0xffff; |
870 | /* only the msb is considered */ | 927 | /* only the msb is considered */ |
871 | buf = value >> 8; | 928 | buf = value >> 8; |
872 | return SendControlMsg(SET_CHROM_CTL, PRESET_MANUAL_BLUE_GAIN_FORMATTER, 1); | 929 | return send_control_msg(pdev, |
930 | SET_CHROM_CTL, PRESET_MANUAL_BLUE_GAIN_FORMATTER, | ||
931 | &buf, sizeof(buf)); | ||
873 | } | 932 | } |
874 | 933 | ||
875 | int pwc_get_blue_gain(struct pwc_device *pdev, int *value) | 934 | int pwc_get_blue_gain(struct pwc_device *pdev, int *value) |
@@ -877,7 +936,9 @@ int pwc_get_blue_gain(struct pwc_device *pdev, int *value) | |||
877 | unsigned char buf; | 936 | unsigned char buf; |
878 | int ret; | 937 | int ret; |
879 | 938 | ||
880 | ret = RecvControlMsg(GET_CHROM_CTL, PRESET_MANUAL_BLUE_GAIN_FORMATTER, 1); | 939 | ret = recv_control_msg(pdev, |
940 | GET_CHROM_CTL, PRESET_MANUAL_BLUE_GAIN_FORMATTER, | ||
941 | &buf, sizeof(buf)); | ||
881 | if (ret < 0) | 942 | if (ret < 0) |
882 | return ret; | 943 | return ret; |
883 | *value = buf << 8; | 944 | *value = buf << 8; |
@@ -894,7 +955,8 @@ static int pwc_read_red_gain(struct pwc_device *pdev, int *value) | |||
894 | unsigned char buf; | 955 | unsigned char buf; |
895 | int ret; | 956 | int ret; |
896 | 957 | ||
897 | ret = RecvControlMsg(GET_STATUS_CTL, READ_RED_GAIN_FORMATTER, 1); | 958 | ret = recv_control_msg(pdev, |
959 | GET_STATUS_CTL, READ_RED_GAIN_FORMATTER, &buf, sizeof(buf)); | ||
898 | if (ret < 0) | 960 | if (ret < 0) |
899 | return ret; | 961 | return ret; |
900 | *value = buf << 8; | 962 | *value = buf << 8; |
@@ -906,7 +968,8 @@ static int pwc_read_blue_gain(struct pwc_device *pdev, int *value) | |||
906 | unsigned char buf; | 968 | unsigned char buf; |
907 | int ret; | 969 | int ret; |
908 | 970 | ||
909 | ret = RecvControlMsg(GET_STATUS_CTL, READ_BLUE_GAIN_FORMATTER, 1); | 971 | ret = recv_control_msg(pdev, |
972 | GET_STATUS_CTL, READ_BLUE_GAIN_FORMATTER, &buf, sizeof(buf)); | ||
910 | if (ret < 0) | 973 | if (ret < 0) |
911 | return ret; | 974 | return ret; |
912 | *value = buf << 8; | 975 | *value = buf << 8; |
@@ -920,7 +983,8 @@ static int pwc_set_wb_speed(struct pwc_device *pdev, int speed) | |||
920 | 983 | ||
921 | /* useful range is 0x01..0x20 */ | 984 | /* useful range is 0x01..0x20 */ |
922 | buf = speed / 0x7f0; | 985 | buf = speed / 0x7f0; |
923 | return SendControlMsg(SET_CHROM_CTL, AWB_CONTROL_SPEED_FORMATTER, 1); | 986 | return send_control_msg(pdev, |
987 | SET_CHROM_CTL, AWB_CONTROL_SPEED_FORMATTER, &buf, sizeof(buf)); | ||
924 | } | 988 | } |
925 | 989 | ||
926 | static int pwc_get_wb_speed(struct pwc_device *pdev, int *value) | 990 | static int pwc_get_wb_speed(struct pwc_device *pdev, int *value) |
@@ -928,7 +992,8 @@ static int pwc_get_wb_speed(struct pwc_device *pdev, int *value) | |||
928 | unsigned char buf; | 992 | unsigned char buf; |
929 | int ret; | 993 | int ret; |
930 | 994 | ||
931 | ret = RecvControlMsg(GET_CHROM_CTL, AWB_CONTROL_SPEED_FORMATTER, 1); | 995 | ret = recv_control_msg(pdev, |
996 | GET_CHROM_CTL, AWB_CONTROL_SPEED_FORMATTER, &buf, sizeof(buf)); | ||
932 | if (ret < 0) | 997 | if (ret < 0) |
933 | return ret; | 998 | return ret; |
934 | *value = buf * 0x7f0; | 999 | *value = buf * 0x7f0; |
@@ -942,7 +1007,8 @@ static int pwc_set_wb_delay(struct pwc_device *pdev, int delay) | |||
942 | 1007 | ||
943 | /* useful range is 0x01..0x3F */ | 1008 | /* useful range is 0x01..0x3F */ |
944 | buf = (delay >> 10); | 1009 | buf = (delay >> 10); |
945 | return SendControlMsg(SET_CHROM_CTL, AWB_CONTROL_DELAY_FORMATTER, 1); | 1010 | return send_control_msg(pdev, |
1011 | SET_CHROM_CTL, AWB_CONTROL_DELAY_FORMATTER, &buf, sizeof(buf)); | ||
946 | } | 1012 | } |
947 | 1013 | ||
948 | static int pwc_get_wb_delay(struct pwc_device *pdev, int *value) | 1014 | static int pwc_get_wb_delay(struct pwc_device *pdev, int *value) |
@@ -950,7 +1016,8 @@ static int pwc_get_wb_delay(struct pwc_device *pdev, int *value) | |||
950 | unsigned char buf; | 1016 | unsigned char buf; |
951 | int ret; | 1017 | int ret; |
952 | 1018 | ||
953 | ret = RecvControlMsg(GET_CHROM_CTL, AWB_CONTROL_DELAY_FORMATTER, 1); | 1019 | ret = recv_control_msg(pdev, |
1020 | GET_CHROM_CTL, AWB_CONTROL_DELAY_FORMATTER, &buf, sizeof(buf)); | ||
954 | if (ret < 0) | 1021 | if (ret < 0) |
955 | return ret; | 1022 | return ret; |
956 | *value = buf << 10; | 1023 | *value = buf << 10; |
@@ -978,7 +1045,8 @@ int pwc_set_leds(struct pwc_device *pdev, int on_value, int off_value) | |||
978 | buf[0] = on_value; | 1045 | buf[0] = on_value; |
979 | buf[1] = off_value; | 1046 | buf[1] = off_value; |
980 | 1047 | ||
981 | return SendControlMsg(SET_STATUS_CTL, LED_FORMATTER, 2); | 1048 | return send_control_msg(pdev, |
1049 | SET_STATUS_CTL, LED_FORMATTER, &buf, sizeof(buf)); | ||
982 | } | 1050 | } |
983 | 1051 | ||
984 | static int pwc_get_leds(struct pwc_device *pdev, int *on_value, int *off_value) | 1052 | static int pwc_get_leds(struct pwc_device *pdev, int *on_value, int *off_value) |
@@ -992,7 +1060,8 @@ static int pwc_get_leds(struct pwc_device *pdev, int *on_value, int *off_value) | |||
992 | return 0; | 1060 | return 0; |
993 | } | 1061 | } |
994 | 1062 | ||
995 | ret = RecvControlMsg(GET_STATUS_CTL, LED_FORMATTER, 2); | 1063 | ret = recv_control_msg(pdev, |
1064 | GET_STATUS_CTL, LED_FORMATTER, &buf, sizeof(buf)); | ||
996 | if (ret < 0) | 1065 | if (ret < 0) |
997 | return ret; | 1066 | return ret; |
998 | *on_value = buf[0] * 100; | 1067 | *on_value = buf[0] * 100; |
@@ -1009,7 +1078,8 @@ int pwc_set_contour(struct pwc_device *pdev, int contour) | |||
1009 | buf = 0xff; /* auto contour on */ | 1078 | buf = 0xff; /* auto contour on */ |
1010 | else | 1079 | else |
1011 | buf = 0x0; /* auto contour off */ | 1080 | buf = 0x0; /* auto contour off */ |
1012 | ret = SendControlMsg(SET_LUM_CTL, AUTO_CONTOUR_FORMATTER, 1); | 1081 | ret = send_control_msg(pdev, |
1082 | SET_LUM_CTL, AUTO_CONTOUR_FORMATTER, &buf, sizeof(buf)); | ||
1013 | if (ret < 0) | 1083 | if (ret < 0) |
1014 | return ret; | 1084 | return ret; |
1015 | 1085 | ||
@@ -1019,7 +1089,8 @@ int pwc_set_contour(struct pwc_device *pdev, int contour) | |||
1019 | contour = 0xffff; | 1089 | contour = 0xffff; |
1020 | 1090 | ||
1021 | buf = (contour >> 10); /* contour preset is [0..3f] */ | 1091 | buf = (contour >> 10); /* contour preset is [0..3f] */ |
1022 | ret = SendControlMsg(SET_LUM_CTL, PRESET_CONTOUR_FORMATTER, 1); | 1092 | ret = send_control_msg(pdev, |
1093 | SET_LUM_CTL, PRESET_CONTOUR_FORMATTER, &buf, sizeof(buf)); | ||
1023 | if (ret < 0) | 1094 | if (ret < 0) |
1024 | return ret; | 1095 | return ret; |
1025 | return 0; | 1096 | return 0; |
@@ -1030,13 +1101,16 @@ int pwc_get_contour(struct pwc_device *pdev, int *contour) | |||
1030 | unsigned char buf; | 1101 | unsigned char buf; |
1031 | int ret; | 1102 | int ret; |
1032 | 1103 | ||
1033 | ret = RecvControlMsg(GET_LUM_CTL, AUTO_CONTOUR_FORMATTER, 1); | 1104 | ret = recv_control_msg(pdev, |
1105 | GET_LUM_CTL, AUTO_CONTOUR_FORMATTER, &buf, sizeof(buf)); | ||
1034 | if (ret < 0) | 1106 | if (ret < 0) |
1035 | return ret; | 1107 | return ret; |
1036 | 1108 | ||
1037 | if (buf == 0) { | 1109 | if (buf == 0) { |
1038 | /* auto mode off, query current preset value */ | 1110 | /* auto mode off, query current preset value */ |
1039 | ret = RecvControlMsg(GET_LUM_CTL, PRESET_CONTOUR_FORMATTER, 1); | 1111 | ret = recv_control_msg(pdev, |
1112 | GET_LUM_CTL, PRESET_CONTOUR_FORMATTER, | ||
1113 | &buf, sizeof(buf)); | ||
1040 | if (ret < 0) | 1114 | if (ret < 0) |
1041 | return ret; | 1115 | return ret; |
1042 | *contour = buf << 10; | 1116 | *contour = buf << 10; |
@@ -1055,7 +1129,9 @@ int pwc_set_backlight(struct pwc_device *pdev, int backlight) | |||
1055 | buf = 0xff; | 1129 | buf = 0xff; |
1056 | else | 1130 | else |
1057 | buf = 0x0; | 1131 | buf = 0x0; |
1058 | return SendControlMsg(SET_LUM_CTL, BACK_LIGHT_COMPENSATION_FORMATTER, 1); | 1132 | return send_control_msg(pdev, |
1133 | SET_LUM_CTL, BACK_LIGHT_COMPENSATION_FORMATTER, | ||
1134 | &buf, sizeof(buf)); | ||
1059 | } | 1135 | } |
1060 | 1136 | ||
1061 | int pwc_get_backlight(struct pwc_device *pdev, int *backlight) | 1137 | int pwc_get_backlight(struct pwc_device *pdev, int *backlight) |
@@ -1063,7 +1139,9 @@ int pwc_get_backlight(struct pwc_device *pdev, int *backlight) | |||
1063 | int ret; | 1139 | int ret; |
1064 | unsigned char buf; | 1140 | unsigned char buf; |
1065 | 1141 | ||
1066 | ret = RecvControlMsg(GET_LUM_CTL, BACK_LIGHT_COMPENSATION_FORMATTER, 1); | 1142 | ret = recv_control_msg(pdev, |
1143 | GET_LUM_CTL, BACK_LIGHT_COMPENSATION_FORMATTER, | ||
1144 | &buf, sizeof(buf)); | ||
1067 | if (ret < 0) | 1145 | if (ret < 0) |
1068 | return ret; | 1146 | return ret; |
1069 | *backlight = !!buf; | 1147 | *backlight = !!buf; |
@@ -1078,7 +1156,8 @@ int pwc_set_colour_mode(struct pwc_device *pdev, int colour) | |||
1078 | buf = 0xff; | 1156 | buf = 0xff; |
1079 | else | 1157 | else |
1080 | buf = 0x0; | 1158 | buf = 0x0; |
1081 | return SendControlMsg(SET_CHROM_CTL, COLOUR_MODE_FORMATTER, 1); | 1159 | return send_control_msg(pdev, |
1160 | SET_CHROM_CTL, COLOUR_MODE_FORMATTER, &buf, sizeof(buf)); | ||
1082 | } | 1161 | } |
1083 | 1162 | ||
1084 | int pwc_get_colour_mode(struct pwc_device *pdev, int *colour) | 1163 | int pwc_get_colour_mode(struct pwc_device *pdev, int *colour) |
@@ -1086,7 +1165,8 @@ int pwc_get_colour_mode(struct pwc_device *pdev, int *colour) | |||
1086 | int ret; | 1165 | int ret; |
1087 | unsigned char buf; | 1166 | unsigned char buf; |
1088 | 1167 | ||
1089 | ret = RecvControlMsg(GET_CHROM_CTL, COLOUR_MODE_FORMATTER, 1); | 1168 | ret = recv_control_msg(pdev, |
1169 | GET_CHROM_CTL, COLOUR_MODE_FORMATTER, &buf, sizeof(buf)); | ||
1090 | if (ret < 0) | 1170 | if (ret < 0) |
1091 | return ret; | 1171 | return ret; |
1092 | *colour = !!buf; | 1172 | *colour = !!buf; |
@@ -1102,7 +1182,8 @@ int pwc_set_flicker(struct pwc_device *pdev, int flicker) | |||
1102 | buf = 0xff; | 1182 | buf = 0xff; |
1103 | else | 1183 | else |
1104 | buf = 0x0; | 1184 | buf = 0x0; |
1105 | return SendControlMsg(SET_LUM_CTL, FLICKERLESS_MODE_FORMATTER, 1); | 1185 | return send_control_msg(pdev, |
1186 | SET_LUM_CTL, FLICKERLESS_MODE_FORMATTER, &buf, sizeof(buf)); | ||
1106 | } | 1187 | } |
1107 | 1188 | ||
1108 | int pwc_get_flicker(struct pwc_device *pdev, int *flicker) | 1189 | int pwc_get_flicker(struct pwc_device *pdev, int *flicker) |
@@ -1110,7 +1191,8 @@ int pwc_get_flicker(struct pwc_device *pdev, int *flicker) | |||
1110 | int ret; | 1191 | int ret; |
1111 | unsigned char buf; | 1192 | unsigned char buf; |
1112 | 1193 | ||
1113 | ret = RecvControlMsg(GET_LUM_CTL, FLICKERLESS_MODE_FORMATTER, 1); | 1194 | ret = recv_control_msg(pdev, |
1195 | GET_LUM_CTL, FLICKERLESS_MODE_FORMATTER, &buf, sizeof(buf)); | ||
1114 | if (ret < 0) | 1196 | if (ret < 0) |
1115 | return ret; | 1197 | return ret; |
1116 | *flicker = !!buf; | 1198 | *flicker = !!buf; |
@@ -1126,7 +1208,9 @@ int pwc_set_dynamic_noise(struct pwc_device *pdev, int noise) | |||
1126 | if (noise > 3) | 1208 | if (noise > 3) |
1127 | noise = 3; | 1209 | noise = 3; |
1128 | buf = noise; | 1210 | buf = noise; |
1129 | return SendControlMsg(SET_LUM_CTL, DYNAMIC_NOISE_CONTROL_FORMATTER, 1); | 1211 | return send_control_msg(pdev, |
1212 | SET_LUM_CTL, DYNAMIC_NOISE_CONTROL_FORMATTER, | ||
1213 | &buf, sizeof(buf)); | ||
1130 | } | 1214 | } |
1131 | 1215 | ||
1132 | int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise) | 1216 | int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise) |
@@ -1134,7 +1218,9 @@ int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise) | |||
1134 | int ret; | 1218 | int ret; |
1135 | unsigned char buf; | 1219 | unsigned char buf; |
1136 | 1220 | ||
1137 | ret = RecvControlMsg(GET_LUM_CTL, DYNAMIC_NOISE_CONTROL_FORMATTER, 1); | 1221 | ret = recv_control_msg(pdev, |
1222 | GET_LUM_CTL, DYNAMIC_NOISE_CONTROL_FORMATTER, | ||
1223 | &buf, sizeof(buf)); | ||
1138 | if (ret < 0) | 1224 | if (ret < 0) |
1139 | return ret; | 1225 | return ret; |
1140 | *noise = buf; | 1226 | *noise = buf; |
@@ -1146,7 +1232,8 @@ static int _pwc_mpt_reset(struct pwc_device *pdev, int flags) | |||
1146 | unsigned char buf; | 1232 | unsigned char buf; |
1147 | 1233 | ||
1148 | buf = flags & 0x03; // only lower two bits are currently used | 1234 | buf = flags & 0x03; // only lower two bits are currently used |
1149 | return SendControlMsg(SET_MPT_CTL, PT_RESET_CONTROL_FORMATTER, 1); | 1235 | return send_control_msg(pdev, |
1236 | SET_MPT_CTL, PT_RESET_CONTROL_FORMATTER, &buf, sizeof(buf)); | ||
1150 | } | 1237 | } |
1151 | 1238 | ||
1152 | int pwc_mpt_reset(struct pwc_device *pdev, int flags) | 1239 | int pwc_mpt_reset(struct pwc_device *pdev, int flags) |
@@ -1175,7 +1262,8 @@ static int _pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt) | |||
1175 | buf[1] = (pan >> 8) & 0xFF; | 1262 | buf[1] = (pan >> 8) & 0xFF; |
1176 | buf[2] = tilt & 0xFF; | 1263 | buf[2] = tilt & 0xFF; |
1177 | buf[3] = (tilt >> 8) & 0xFF; | 1264 | buf[3] = (tilt >> 8) & 0xFF; |
1178 | return SendControlMsg(SET_MPT_CTL, PT_RELATIVE_CONTROL_FORMATTER, 4); | 1265 | return send_control_msg(pdev, |
1266 | SET_MPT_CTL, PT_RELATIVE_CONTROL_FORMATTER, &buf, sizeof(buf)); | ||
1179 | } | 1267 | } |
1180 | 1268 | ||
1181 | int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt) | 1269 | int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt) |
@@ -1211,7 +1299,8 @@ static int pwc_mpt_get_status(struct pwc_device *pdev, struct pwc_mpt_status *st | |||
1211 | int ret; | 1299 | int ret; |
1212 | unsigned char buf[5]; | 1300 | unsigned char buf[5]; |
1213 | 1301 | ||
1214 | ret = RecvControlMsg(GET_MPT_CTL, PT_STATUS_FORMATTER, 5); | 1302 | ret = recv_control_msg(pdev, |
1303 | GET_MPT_CTL, PT_STATUS_FORMATTER, &buf, sizeof(buf)); | ||
1215 | if (ret < 0) | 1304 | if (ret < 0) |
1216 | return ret; | 1305 | return ret; |
1217 | status->status = buf[0] & 0x7; // 3 bits are used for reporting | 1306 | status->status = buf[0] & 0x7; // 3 bits are used for reporting |
@@ -1233,7 +1322,8 @@ int pwc_get_cmos_sensor(struct pwc_device *pdev, int *sensor) | |||
1233 | else | 1322 | else |
1234 | request = SENSOR_TYPE_FORMATTER2; | 1323 | request = SENSOR_TYPE_FORMATTER2; |
1235 | 1324 | ||
1236 | ret = RecvControlMsg(GET_STATUS_CTL, request, 1); | 1325 | ret = recv_control_msg(pdev, |
1326 | GET_STATUS_CTL, request, &buf, sizeof(buf)); | ||
1237 | if (ret < 0) | 1327 | if (ret < 0) |
1238 | return ret; | 1328 | return ret; |
1239 | if (pdev->type < 675) | 1329 | if (pdev->type < 675) |
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index d0d126c6935..5d496a99e03 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c | |||
@@ -5934,7 +5934,7 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg) | |||
5934 | 5934 | ||
5935 | /* Initalize the timer | 5935 | /* Initalize the timer |
5936 | */ | 5936 | */ |
5937 | init_timer(&pCfg->timer); | 5937 | init_timer_on_stack(&pCfg->timer); |
5938 | pCfg->timer.data = (unsigned long) ioc; | 5938 | pCfg->timer.data = (unsigned long) ioc; |
5939 | pCfg->timer.function = mpt_timer_expired; | 5939 | pCfg->timer.function = mpt_timer_expired; |
5940 | pCfg->wait_done = 0; | 5940 | pCfg->wait_done = 0; |
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c index d184dfab963..db39f4a52f5 100644 --- a/drivers/misc/eeprom/at24.c +++ b/drivers/misc/eeprom/at24.c | |||
@@ -278,7 +278,7 @@ static ssize_t at24_bin_read(struct kobject *kobj, struct bin_attribute *attr, | |||
278 | * We only use page mode writes; the alternative is sloooow. This routine | 278 | * We only use page mode writes; the alternative is sloooow. This routine |
279 | * writes at most one page. | 279 | * writes at most one page. |
280 | */ | 280 | */ |
281 | static ssize_t at24_eeprom_write(struct at24_data *at24, char *buf, | 281 | static ssize_t at24_eeprom_write(struct at24_data *at24, const char *buf, |
282 | unsigned offset, size_t count) | 282 | unsigned offset, size_t count) |
283 | { | 283 | { |
284 | struct i2c_client *client; | 284 | struct i2c_client *client; |
@@ -347,8 +347,8 @@ static ssize_t at24_eeprom_write(struct at24_data *at24, char *buf, | |||
347 | return -ETIMEDOUT; | 347 | return -ETIMEDOUT; |
348 | } | 348 | } |
349 | 349 | ||
350 | static ssize_t at24_write(struct at24_data *at24, | 350 | static ssize_t at24_write(struct at24_data *at24, const char *buf, loff_t off, |
351 | char *buf, loff_t off, size_t count) | 351 | size_t count) |
352 | { | 352 | { |
353 | ssize_t retval = 0; | 353 | ssize_t retval = 0; |
354 | 354 | ||
@@ -406,7 +406,7 @@ static ssize_t at24_macc_read(struct memory_accessor *macc, char *buf, | |||
406 | return at24_read(at24, buf, offset, count); | 406 | return at24_read(at24, buf, offset, count); |
407 | } | 407 | } |
408 | 408 | ||
409 | static ssize_t at24_macc_write(struct memory_accessor *macc, char *buf, | 409 | static ssize_t at24_macc_write(struct memory_accessor *macc, const char *buf, |
410 | off_t offset, size_t count) | 410 | off_t offset, size_t count) |
411 | { | 411 | { |
412 | struct at24_data *at24 = container_of(macc, struct at24_data, macc); | 412 | struct at24_data *at24 = container_of(macc, struct at24_data, macc); |
diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c index 6bc0dac5c1e..b34cb5f79ee 100644 --- a/drivers/misc/eeprom/at25.c +++ b/drivers/misc/eeprom/at25.c | |||
@@ -140,7 +140,8 @@ at25_bin_read(struct kobject *kobj, struct bin_attribute *bin_attr, | |||
140 | 140 | ||
141 | 141 | ||
142 | static ssize_t | 142 | static ssize_t |
143 | at25_ee_write(struct at25_data *at25, char *buf, loff_t off, size_t count) | 143 | at25_ee_write(struct at25_data *at25, const char *buf, loff_t off, |
144 | size_t count) | ||
144 | { | 145 | { |
145 | ssize_t status = 0; | 146 | ssize_t status = 0; |
146 | unsigned written = 0; | 147 | unsigned written = 0; |
@@ -276,7 +277,7 @@ static ssize_t at25_mem_read(struct memory_accessor *mem, char *buf, | |||
276 | return at25_ee_read(at25, buf, offset, count); | 277 | return at25_ee_read(at25, buf, offset, count); |
277 | } | 278 | } |
278 | 279 | ||
279 | static ssize_t at25_mem_write(struct memory_accessor *mem, char *buf, | 280 | static ssize_t at25_mem_write(struct memory_accessor *mem, const char *buf, |
280 | off_t offset, size_t count) | 281 | off_t offset, size_t count) |
281 | { | 282 | { |
282 | struct at25_data *at25 = container_of(mem, struct at25_data, mem); | 283 | struct at25_data *at25 = container_of(mem, struct at25_data, mem); |
diff --git a/drivers/misc/sgi-gru/grufile.c b/drivers/misc/sgi-gru/grufile.c index 3e6e42d2f01..bbefe77c67a 100644 --- a/drivers/misc/sgi-gru/grufile.c +++ b/drivers/misc/sgi-gru/grufile.c | |||
@@ -375,7 +375,7 @@ static int __init gru_init(void) | |||
375 | void *gru_start_vaddr; | 375 | void *gru_start_vaddr; |
376 | 376 | ||
377 | if (!is_uv_system()) | 377 | if (!is_uv_system()) |
378 | return -ENODEV; | 378 | return 0; |
379 | 379 | ||
380 | #if defined CONFIG_IA64 | 380 | #if defined CONFIG_IA64 |
381 | gru_start_paddr = 0xd000000000UL; /* ZZZZZZZZZZZZZZZZZZZ fixme */ | 381 | gru_start_paddr = 0xd000000000UL; /* ZZZZZZZZZZZZZZZZZZZ fixme */ |
diff --git a/drivers/misc/sgi-xp/xp_main.c b/drivers/misc/sgi-xp/xp_main.c index 16f8dcab2da..7896849b16d 100644 --- a/drivers/misc/sgi-xp/xp_main.c +++ b/drivers/misc/sgi-xp/xp_main.c | |||
@@ -248,19 +248,19 @@ xp_init(void) | |||
248 | enum xp_retval ret; | 248 | enum xp_retval ret; |
249 | int ch_number; | 249 | int ch_number; |
250 | 250 | ||
251 | /* initialize the connection registration mutex */ | ||
252 | for (ch_number = 0; ch_number < XPC_MAX_NCHANNELS; ch_number++) | ||
253 | mutex_init(&xpc_registrations[ch_number].mutex); | ||
254 | |||
251 | if (is_shub()) | 255 | if (is_shub()) |
252 | ret = xp_init_sn2(); | 256 | ret = xp_init_sn2(); |
253 | else if (is_uv()) | 257 | else if (is_uv()) |
254 | ret = xp_init_uv(); | 258 | ret = xp_init_uv(); |
255 | else | 259 | else |
256 | ret = xpUnsupported; | 260 | ret = 0; |
257 | 261 | ||
258 | if (ret != xpSuccess) | 262 | if (ret != xpSuccess) |
259 | return -ENODEV; | 263 | return ret; |
260 | |||
261 | /* initialize the connection registration mutex */ | ||
262 | for (ch_number = 0; ch_number < XPC_MAX_NCHANNELS; ch_number++) | ||
263 | mutex_init(&xpc_registrations[ch_number].mutex); | ||
264 | 264 | ||
265 | return 0; | 265 | return 0; |
266 | } | 266 | } |
diff --git a/drivers/misc/sgi-xp/xpc.h b/drivers/misc/sgi-xp/xpc.h index 114444cfd49..b94d5f76770 100644 --- a/drivers/misc/sgi-xp/xpc.h +++ b/drivers/misc/sgi-xp/xpc.h | |||
@@ -90,18 +90,21 @@ struct xpc_rsvd_page { | |||
90 | short max_npartitions; /* value of XPC_MAX_PARTITIONS */ | 90 | short max_npartitions; /* value of XPC_MAX_PARTITIONS */ |
91 | u8 version; | 91 | u8 version; |
92 | u8 pad1[3]; /* align to next u64 in 1st 64-byte cacheline */ | 92 | u8 pad1[3]; /* align to next u64 in 1st 64-byte cacheline */ |
93 | unsigned long ts_jiffies; /* timestamp when rsvd pg was setup by XPC */ | ||
93 | union { | 94 | union { |
94 | unsigned long vars_pa; /* phys address of struct xpc_vars */ | 95 | struct { |
95 | unsigned long activate_gru_mq_desc_gpa; /* phys addr of */ | 96 | unsigned long vars_pa; /* phys addr */ |
96 | /* activate mq's */ | 97 | } sn2; |
97 | /* gru mq descriptor */ | 98 | struct { |
99 | unsigned long heartbeat_gpa; /* phys addr */ | ||
100 | unsigned long activate_gru_mq_desc_gpa; /* phys addr */ | ||
101 | } uv; | ||
98 | } sn; | 102 | } sn; |
99 | unsigned long ts_jiffies; /* timestamp when rsvd pg was setup by XPC */ | 103 | u64 pad2[9]; /* align to last u64 in 2nd 64-byte cacheline */ |
100 | u64 pad2[10]; /* align to last u64 in 2nd 64-byte cacheline */ | ||
101 | u64 SAL_nasids_size; /* SAL: size of each nasid mask in bytes */ | 104 | u64 SAL_nasids_size; /* SAL: size of each nasid mask in bytes */ |
102 | }; | 105 | }; |
103 | 106 | ||
104 | #define XPC_RP_VERSION _XPC_VERSION(2, 0) /* version 2.0 of the reserved page */ | 107 | #define XPC_RP_VERSION _XPC_VERSION(3, 0) /* version 3.0 of the reserved page */ |
105 | 108 | ||
106 | /* | 109 | /* |
107 | * Define the structures by which XPC variables can be exported to other | 110 | * Define the structures by which XPC variables can be exported to other |
@@ -182,6 +185,17 @@ struct xpc_vars_part_sn2 { | |||
182 | (XPC_RP_MACH_NASIDS(_rp) + \ | 185 | (XPC_RP_MACH_NASIDS(_rp) + \ |
183 | xpc_nasid_mask_nlongs)) | 186 | xpc_nasid_mask_nlongs)) |
184 | 187 | ||
188 | |||
189 | /* | ||
190 | * The following structure describes the partition's heartbeat info which | ||
191 | * will be periodically read by other partitions to determine whether this | ||
192 | * XPC is still 'alive'. | ||
193 | */ | ||
194 | struct xpc_heartbeat_uv { | ||
195 | unsigned long value; | ||
196 | unsigned long offline; /* if 0, heartbeat should be changing */ | ||
197 | }; | ||
198 | |||
185 | /* | 199 | /* |
186 | * Info pertinent to a GRU message queue using a watch list for irq generation. | 200 | * Info pertinent to a GRU message queue using a watch list for irq generation. |
187 | */ | 201 | */ |
@@ -198,7 +212,7 @@ struct xpc_gru_mq_uv { | |||
198 | 212 | ||
199 | /* | 213 | /* |
200 | * The activate_mq is used to send/receive GRU messages that affect XPC's | 214 | * The activate_mq is used to send/receive GRU messages that affect XPC's |
201 | * heartbeat, partition active state, and channel state. This is UV only. | 215 | * partition active state and channel state. This is uv only. |
202 | */ | 216 | */ |
203 | struct xpc_activate_mq_msghdr_uv { | 217 | struct xpc_activate_mq_msghdr_uv { |
204 | unsigned int gru_msg_hdr; /* FOR GRU INTERNAL USE ONLY */ | 218 | unsigned int gru_msg_hdr; /* FOR GRU INTERNAL USE ONLY */ |
@@ -210,33 +224,27 @@ struct xpc_activate_mq_msghdr_uv { | |||
210 | 224 | ||
211 | /* activate_mq defined message types */ | 225 | /* activate_mq defined message types */ |
212 | #define XPC_ACTIVATE_MQ_MSG_SYNC_ACT_STATE_UV 0 | 226 | #define XPC_ACTIVATE_MQ_MSG_SYNC_ACT_STATE_UV 0 |
213 | #define XPC_ACTIVATE_MQ_MSG_INC_HEARTBEAT_UV 1 | ||
214 | #define XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV 2 | ||
215 | #define XPC_ACTIVATE_MQ_MSG_ONLINE_HEARTBEAT_UV 3 | ||
216 | 227 | ||
217 | #define XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV 4 | 228 | #define XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV 1 |
218 | #define XPC_ACTIVATE_MQ_MSG_DEACTIVATE_REQ_UV 5 | 229 | #define XPC_ACTIVATE_MQ_MSG_DEACTIVATE_REQ_UV 2 |
219 | 230 | ||
220 | #define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREQUEST_UV 6 | 231 | #define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREQUEST_UV 3 |
221 | #define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREPLY_UV 7 | 232 | #define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREPLY_UV 4 |
222 | #define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREQUEST_UV 8 | 233 | #define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREQUEST_UV 5 |
223 | #define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREPLY_UV 9 | 234 | #define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREPLY_UV 6 |
235 | #define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV 7 | ||
224 | 236 | ||
225 | #define XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV 10 | 237 | #define XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV 8 |
226 | #define XPC_ACTIVATE_MQ_MSG_MARK_DISENGAGED_UV 11 | 238 | #define XPC_ACTIVATE_MQ_MSG_MARK_DISENGAGED_UV 9 |
227 | 239 | ||
228 | struct xpc_activate_mq_msg_uv { | 240 | struct xpc_activate_mq_msg_uv { |
229 | struct xpc_activate_mq_msghdr_uv hdr; | 241 | struct xpc_activate_mq_msghdr_uv hdr; |
230 | }; | 242 | }; |
231 | 243 | ||
232 | struct xpc_activate_mq_msg_heartbeat_req_uv { | ||
233 | struct xpc_activate_mq_msghdr_uv hdr; | ||
234 | u64 heartbeat; | ||
235 | }; | ||
236 | |||
237 | struct xpc_activate_mq_msg_activate_req_uv { | 244 | struct xpc_activate_mq_msg_activate_req_uv { |
238 | struct xpc_activate_mq_msghdr_uv hdr; | 245 | struct xpc_activate_mq_msghdr_uv hdr; |
239 | unsigned long rp_gpa; | 246 | unsigned long rp_gpa; |
247 | unsigned long heartbeat_gpa; | ||
240 | unsigned long activate_gru_mq_desc_gpa; | 248 | unsigned long activate_gru_mq_desc_gpa; |
241 | }; | 249 | }; |
242 | 250 | ||
@@ -271,6 +279,11 @@ struct xpc_activate_mq_msg_chctl_openreply_uv { | |||
271 | unsigned long notify_gru_mq_desc_gpa; | 279 | unsigned long notify_gru_mq_desc_gpa; |
272 | }; | 280 | }; |
273 | 281 | ||
282 | struct xpc_activate_mq_msg_chctl_opencomplete_uv { | ||
283 | struct xpc_activate_mq_msghdr_uv hdr; | ||
284 | short ch_number; | ||
285 | }; | ||
286 | |||
274 | /* | 287 | /* |
275 | * Functions registered by add_timer() or called by kernel_thread() only | 288 | * Functions registered by add_timer() or called by kernel_thread() only |
276 | * allow for a single 64-bit argument. The following macros can be used to | 289 | * allow for a single 64-bit argument. The following macros can be used to |
@@ -576,30 +589,32 @@ struct xpc_channel { | |||
576 | 589 | ||
577 | #define XPC_C_WASCONNECTED 0x00000001 /* channel was connected */ | 590 | #define XPC_C_WASCONNECTED 0x00000001 /* channel was connected */ |
578 | 591 | ||
579 | #define XPC_C_ROPENREPLY 0x00000002 /* remote open channel reply */ | 592 | #define XPC_C_ROPENCOMPLETE 0x00000002 /* remote open channel complete */ |
580 | #define XPC_C_OPENREPLY 0x00000004 /* local open channel reply */ | 593 | #define XPC_C_OPENCOMPLETE 0x00000004 /* local open channel complete */ |
581 | #define XPC_C_ROPENREQUEST 0x00000008 /* remote open channel request */ | 594 | #define XPC_C_ROPENREPLY 0x00000008 /* remote open channel reply */ |
582 | #define XPC_C_OPENREQUEST 0x00000010 /* local open channel request */ | 595 | #define XPC_C_OPENREPLY 0x00000010 /* local open channel reply */ |
596 | #define XPC_C_ROPENREQUEST 0x00000020 /* remote open channel request */ | ||
597 | #define XPC_C_OPENREQUEST 0x00000040 /* local open channel request */ | ||
583 | 598 | ||
584 | #define XPC_C_SETUP 0x00000020 /* channel's msgqueues are alloc'd */ | 599 | #define XPC_C_SETUP 0x00000080 /* channel's msgqueues are alloc'd */ |
585 | #define XPC_C_CONNECTEDCALLOUT 0x00000040 /* connected callout initiated */ | 600 | #define XPC_C_CONNECTEDCALLOUT 0x00000100 /* connected callout initiated */ |
586 | #define XPC_C_CONNECTEDCALLOUT_MADE \ | 601 | #define XPC_C_CONNECTEDCALLOUT_MADE \ |
587 | 0x00000080 /* connected callout completed */ | 602 | 0x00000200 /* connected callout completed */ |
588 | #define XPC_C_CONNECTED 0x00000100 /* local channel is connected */ | 603 | #define XPC_C_CONNECTED 0x00000400 /* local channel is connected */ |
589 | #define XPC_C_CONNECTING 0x00000200 /* channel is being connected */ | 604 | #define XPC_C_CONNECTING 0x00000800 /* channel is being connected */ |
590 | 605 | ||
591 | #define XPC_C_RCLOSEREPLY 0x00000400 /* remote close channel reply */ | 606 | #define XPC_C_RCLOSEREPLY 0x00001000 /* remote close channel reply */ |
592 | #define XPC_C_CLOSEREPLY 0x00000800 /* local close channel reply */ | 607 | #define XPC_C_CLOSEREPLY 0x00002000 /* local close channel reply */ |
593 | #define XPC_C_RCLOSEREQUEST 0x00001000 /* remote close channel request */ | 608 | #define XPC_C_RCLOSEREQUEST 0x00004000 /* remote close channel request */ |
594 | #define XPC_C_CLOSEREQUEST 0x00002000 /* local close channel request */ | 609 | #define XPC_C_CLOSEREQUEST 0x00008000 /* local close channel request */ |
595 | 610 | ||
596 | #define XPC_C_DISCONNECTED 0x00004000 /* channel is disconnected */ | 611 | #define XPC_C_DISCONNECTED 0x00010000 /* channel is disconnected */ |
597 | #define XPC_C_DISCONNECTING 0x00008000 /* channel is being disconnected */ | 612 | #define XPC_C_DISCONNECTING 0x00020000 /* channel is being disconnected */ |
598 | #define XPC_C_DISCONNECTINGCALLOUT \ | 613 | #define XPC_C_DISCONNECTINGCALLOUT \ |
599 | 0x00010000 /* disconnecting callout initiated */ | 614 | 0x00040000 /* disconnecting callout initiated */ |
600 | #define XPC_C_DISCONNECTINGCALLOUT_MADE \ | 615 | #define XPC_C_DISCONNECTINGCALLOUT_MADE \ |
601 | 0x00020000 /* disconnecting callout completed */ | 616 | 0x00080000 /* disconnecting callout completed */ |
602 | #define XPC_C_WDISCONNECT 0x00040000 /* waiting for channel disconnect */ | 617 | #define XPC_C_WDISCONNECT 0x00100000 /* waiting for channel disconnect */ |
603 | 618 | ||
604 | /* | 619 | /* |
605 | * The channel control flags (chctl) union consists of a 64-bit variable which | 620 | * The channel control flags (chctl) union consists of a 64-bit variable which |
@@ -618,11 +633,13 @@ union xpc_channel_ctl_flags { | |||
618 | #define XPC_CHCTL_CLOSEREPLY 0x02 | 633 | #define XPC_CHCTL_CLOSEREPLY 0x02 |
619 | #define XPC_CHCTL_OPENREQUEST 0x04 | 634 | #define XPC_CHCTL_OPENREQUEST 0x04 |
620 | #define XPC_CHCTL_OPENREPLY 0x08 | 635 | #define XPC_CHCTL_OPENREPLY 0x08 |
621 | #define XPC_CHCTL_MSGREQUEST 0x10 | 636 | #define XPC_CHCTL_OPENCOMPLETE 0x10 |
637 | #define XPC_CHCTL_MSGREQUEST 0x20 | ||
622 | 638 | ||
623 | #define XPC_OPENCLOSE_CHCTL_FLAGS \ | 639 | #define XPC_OPENCLOSE_CHCTL_FLAGS \ |
624 | (XPC_CHCTL_CLOSEREQUEST | XPC_CHCTL_CLOSEREPLY | \ | 640 | (XPC_CHCTL_CLOSEREQUEST | XPC_CHCTL_CLOSEREPLY | \ |
625 | XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY) | 641 | XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY | \ |
642 | XPC_CHCTL_OPENCOMPLETE) | ||
626 | #define XPC_MSG_CHCTL_FLAGS XPC_CHCTL_MSGREQUEST | 643 | #define XPC_MSG_CHCTL_FLAGS XPC_CHCTL_MSGREQUEST |
627 | 644 | ||
628 | static inline int | 645 | static inline int |
@@ -687,6 +704,9 @@ struct xpc_partition_sn2 { | |||
687 | }; | 704 | }; |
688 | 705 | ||
689 | struct xpc_partition_uv { | 706 | struct xpc_partition_uv { |
707 | unsigned long heartbeat_gpa; /* phys addr of partition's heartbeat */ | ||
708 | struct xpc_heartbeat_uv cached_heartbeat; /* cached copy of */ | ||
709 | /* partition's heartbeat */ | ||
690 | unsigned long activate_gru_mq_desc_gpa; /* phys addr of parititon's */ | 710 | unsigned long activate_gru_mq_desc_gpa; /* phys addr of parititon's */ |
691 | /* activate mq's gru mq */ | 711 | /* activate mq's gru mq */ |
692 | /* descriptor */ | 712 | /* descriptor */ |
@@ -698,14 +718,12 @@ struct xpc_partition_uv { | |||
698 | u8 remote_act_state; /* remote partition's act_state */ | 718 | u8 remote_act_state; /* remote partition's act_state */ |
699 | u8 act_state_req; /* act_state request from remote partition */ | 719 | u8 act_state_req; /* act_state request from remote partition */ |
700 | enum xp_retval reason; /* reason for deactivate act_state request */ | 720 | enum xp_retval reason; /* reason for deactivate act_state request */ |
701 | u64 heartbeat; /* incremented by remote partition */ | ||
702 | }; | 721 | }; |
703 | 722 | ||
704 | /* struct xpc_partition_uv flags */ | 723 | /* struct xpc_partition_uv flags */ |
705 | 724 | ||
706 | #define XPC_P_HEARTBEAT_OFFLINE_UV 0x00000001 | 725 | #define XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV 0x00000001 |
707 | #define XPC_P_ENGAGED_UV 0x00000002 | 726 | #define XPC_P_ENGAGED_UV 0x00000002 |
708 | #define XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV 0x00000004 | ||
709 | 727 | ||
710 | /* struct xpc_partition_uv act_state change requests */ | 728 | /* struct xpc_partition_uv act_state change requests */ |
711 | 729 | ||
@@ -762,6 +780,62 @@ struct xpc_partition { | |||
762 | 780 | ||
763 | } ____cacheline_aligned; | 781 | } ____cacheline_aligned; |
764 | 782 | ||
783 | struct xpc_arch_operations { | ||
784 | int (*setup_partitions) (void); | ||
785 | void (*teardown_partitions) (void); | ||
786 | void (*process_activate_IRQ_rcvd) (void); | ||
787 | enum xp_retval (*get_partition_rsvd_page_pa) | ||
788 | (void *, u64 *, unsigned long *, size_t *); | ||
789 | int (*setup_rsvd_page) (struct xpc_rsvd_page *); | ||
790 | |||
791 | void (*allow_hb) (short); | ||
792 | void (*disallow_hb) (short); | ||
793 | void (*disallow_all_hbs) (void); | ||
794 | void (*increment_heartbeat) (void); | ||
795 | void (*offline_heartbeat) (void); | ||
796 | void (*online_heartbeat) (void); | ||
797 | void (*heartbeat_init) (void); | ||
798 | void (*heartbeat_exit) (void); | ||
799 | enum xp_retval (*get_remote_heartbeat) (struct xpc_partition *); | ||
800 | |||
801 | void (*request_partition_activation) (struct xpc_rsvd_page *, | ||
802 | unsigned long, int); | ||
803 | void (*request_partition_reactivation) (struct xpc_partition *); | ||
804 | void (*request_partition_deactivation) (struct xpc_partition *); | ||
805 | void (*cancel_partition_deactivation_request) (struct xpc_partition *); | ||
806 | enum xp_retval (*setup_ch_structures) (struct xpc_partition *); | ||
807 | void (*teardown_ch_structures) (struct xpc_partition *); | ||
808 | |||
809 | enum xp_retval (*make_first_contact) (struct xpc_partition *); | ||
810 | |||
811 | u64 (*get_chctl_all_flags) (struct xpc_partition *); | ||
812 | void (*send_chctl_closerequest) (struct xpc_channel *, unsigned long *); | ||
813 | void (*send_chctl_closereply) (struct xpc_channel *, unsigned long *); | ||
814 | void (*send_chctl_openrequest) (struct xpc_channel *, unsigned long *); | ||
815 | void (*send_chctl_openreply) (struct xpc_channel *, unsigned long *); | ||
816 | void (*send_chctl_opencomplete) (struct xpc_channel *, unsigned long *); | ||
817 | void (*process_msg_chctl_flags) (struct xpc_partition *, int); | ||
818 | |||
819 | enum xp_retval (*save_remote_msgqueue_pa) (struct xpc_channel *, | ||
820 | unsigned long); | ||
821 | |||
822 | enum xp_retval (*setup_msg_structures) (struct xpc_channel *); | ||
823 | void (*teardown_msg_structures) (struct xpc_channel *); | ||
824 | |||
825 | void (*indicate_partition_engaged) (struct xpc_partition *); | ||
826 | void (*indicate_partition_disengaged) (struct xpc_partition *); | ||
827 | void (*assume_partition_disengaged) (short); | ||
828 | int (*partition_engaged) (short); | ||
829 | int (*any_partition_engaged) (void); | ||
830 | |||
831 | int (*n_of_deliverable_payloads) (struct xpc_channel *); | ||
832 | enum xp_retval (*send_payload) (struct xpc_channel *, u32, void *, | ||
833 | u16, u8, xpc_notify_func, void *); | ||
834 | void *(*get_deliverable_payload) (struct xpc_channel *); | ||
835 | void (*received_payload) (struct xpc_channel *, void *); | ||
836 | void (*notify_senders_of_disconnect) (struct xpc_channel *); | ||
837 | }; | ||
838 | |||
765 | /* struct xpc_partition act_state values (for XPC HB) */ | 839 | /* struct xpc_partition act_state values (for XPC HB) */ |
766 | 840 | ||
767 | #define XPC_P_AS_INACTIVE 0x00 /* partition is not active */ | 841 | #define XPC_P_AS_INACTIVE 0x00 /* partition is not active */ |
@@ -802,67 +876,17 @@ extern struct xpc_registration xpc_registrations[]; | |||
802 | /* found in xpc_main.c */ | 876 | /* found in xpc_main.c */ |
803 | extern struct device *xpc_part; | 877 | extern struct device *xpc_part; |
804 | extern struct device *xpc_chan; | 878 | extern struct device *xpc_chan; |
879 | extern struct xpc_arch_operations xpc_arch_ops; | ||
805 | extern int xpc_disengage_timelimit; | 880 | extern int xpc_disengage_timelimit; |
806 | extern int xpc_disengage_timedout; | 881 | extern int xpc_disengage_timedout; |
807 | extern int xpc_activate_IRQ_rcvd; | 882 | extern int xpc_activate_IRQ_rcvd; |
808 | extern spinlock_t xpc_activate_IRQ_rcvd_lock; | 883 | extern spinlock_t xpc_activate_IRQ_rcvd_lock; |
809 | extern wait_queue_head_t xpc_activate_IRQ_wq; | 884 | extern wait_queue_head_t xpc_activate_IRQ_wq; |
810 | extern void *xpc_heartbeating_to_mask; | ||
811 | extern void *xpc_kzalloc_cacheline_aligned(size_t, gfp_t, void **); | 885 | extern void *xpc_kzalloc_cacheline_aligned(size_t, gfp_t, void **); |
812 | extern void xpc_activate_partition(struct xpc_partition *); | 886 | extern void xpc_activate_partition(struct xpc_partition *); |
813 | extern void xpc_activate_kthreads(struct xpc_channel *, int); | 887 | extern void xpc_activate_kthreads(struct xpc_channel *, int); |
814 | extern void xpc_create_kthreads(struct xpc_channel *, int, int); | 888 | extern void xpc_create_kthreads(struct xpc_channel *, int, int); |
815 | extern void xpc_disconnect_wait(int); | 889 | extern void xpc_disconnect_wait(int); |
816 | extern int (*xpc_setup_partitions_sn) (void); | ||
817 | extern void (*xpc_teardown_partitions_sn) (void); | ||
818 | extern enum xp_retval (*xpc_get_partition_rsvd_page_pa) (void *, u64 *, | ||
819 | unsigned long *, | ||
820 | size_t *); | ||
821 | extern int (*xpc_setup_rsvd_page_sn) (struct xpc_rsvd_page *); | ||
822 | extern void (*xpc_heartbeat_init) (void); | ||
823 | extern void (*xpc_heartbeat_exit) (void); | ||
824 | extern void (*xpc_increment_heartbeat) (void); | ||
825 | extern void (*xpc_offline_heartbeat) (void); | ||
826 | extern void (*xpc_online_heartbeat) (void); | ||
827 | extern enum xp_retval (*xpc_get_remote_heartbeat) (struct xpc_partition *); | ||
828 | extern enum xp_retval (*xpc_make_first_contact) (struct xpc_partition *); | ||
829 | extern u64 (*xpc_get_chctl_all_flags) (struct xpc_partition *); | ||
830 | extern enum xp_retval (*xpc_setup_msg_structures) (struct xpc_channel *); | ||
831 | extern void (*xpc_teardown_msg_structures) (struct xpc_channel *); | ||
832 | extern void (*xpc_notify_senders_of_disconnect) (struct xpc_channel *); | ||
833 | extern void (*xpc_process_msg_chctl_flags) (struct xpc_partition *, int); | ||
834 | extern int (*xpc_n_of_deliverable_payloads) (struct xpc_channel *); | ||
835 | extern void *(*xpc_get_deliverable_payload) (struct xpc_channel *); | ||
836 | extern void (*xpc_request_partition_activation) (struct xpc_rsvd_page *, | ||
837 | unsigned long, int); | ||
838 | extern void (*xpc_request_partition_reactivation) (struct xpc_partition *); | ||
839 | extern void (*xpc_request_partition_deactivation) (struct xpc_partition *); | ||
840 | extern void (*xpc_cancel_partition_deactivation_request) ( | ||
841 | struct xpc_partition *); | ||
842 | extern void (*xpc_process_activate_IRQ_rcvd) (void); | ||
843 | extern enum xp_retval (*xpc_setup_ch_structures_sn) (struct xpc_partition *); | ||
844 | extern void (*xpc_teardown_ch_structures_sn) (struct xpc_partition *); | ||
845 | |||
846 | extern void (*xpc_indicate_partition_engaged) (struct xpc_partition *); | ||
847 | extern int (*xpc_partition_engaged) (short); | ||
848 | extern int (*xpc_any_partition_engaged) (void); | ||
849 | extern void (*xpc_indicate_partition_disengaged) (struct xpc_partition *); | ||
850 | extern void (*xpc_assume_partition_disengaged) (short); | ||
851 | |||
852 | extern void (*xpc_send_chctl_closerequest) (struct xpc_channel *, | ||
853 | unsigned long *); | ||
854 | extern void (*xpc_send_chctl_closereply) (struct xpc_channel *, | ||
855 | unsigned long *); | ||
856 | extern void (*xpc_send_chctl_openrequest) (struct xpc_channel *, | ||
857 | unsigned long *); | ||
858 | extern void (*xpc_send_chctl_openreply) (struct xpc_channel *, unsigned long *); | ||
859 | |||
860 | extern enum xp_retval (*xpc_save_remote_msgqueue_pa) (struct xpc_channel *, | ||
861 | unsigned long); | ||
862 | |||
863 | extern enum xp_retval (*xpc_send_payload) (struct xpc_channel *, u32, void *, | ||
864 | u16, u8, xpc_notify_func, void *); | ||
865 | extern void (*xpc_received_payload) (struct xpc_channel *, void *); | ||
866 | 890 | ||
867 | /* found in xpc_sn2.c */ | 891 | /* found in xpc_sn2.c */ |
868 | extern int xpc_init_sn2(void); | 892 | extern int xpc_init_sn2(void); |
@@ -909,40 +933,6 @@ extern void xpc_disconnect_channel(const int, struct xpc_channel *, | |||
909 | extern void xpc_disconnect_callout(struct xpc_channel *, enum xp_retval); | 933 | extern void xpc_disconnect_callout(struct xpc_channel *, enum xp_retval); |
910 | extern void xpc_partition_going_down(struct xpc_partition *, enum xp_retval); | 934 | extern void xpc_partition_going_down(struct xpc_partition *, enum xp_retval); |
911 | 935 | ||
912 | static inline int | ||
913 | xpc_hb_allowed(short partid, void *heartbeating_to_mask) | ||
914 | { | ||
915 | return test_bit(partid, heartbeating_to_mask); | ||
916 | } | ||
917 | |||
918 | static inline int | ||
919 | xpc_any_hbs_allowed(void) | ||
920 | { | ||
921 | DBUG_ON(xpc_heartbeating_to_mask == NULL); | ||
922 | return !bitmap_empty(xpc_heartbeating_to_mask, xp_max_npartitions); | ||
923 | } | ||
924 | |||
925 | static inline void | ||
926 | xpc_allow_hb(short partid) | ||
927 | { | ||
928 | DBUG_ON(xpc_heartbeating_to_mask == NULL); | ||
929 | set_bit(partid, xpc_heartbeating_to_mask); | ||
930 | } | ||
931 | |||
932 | static inline void | ||
933 | xpc_disallow_hb(short partid) | ||
934 | { | ||
935 | DBUG_ON(xpc_heartbeating_to_mask == NULL); | ||
936 | clear_bit(partid, xpc_heartbeating_to_mask); | ||
937 | } | ||
938 | |||
939 | static inline void | ||
940 | xpc_disallow_all_hbs(void) | ||
941 | { | ||
942 | DBUG_ON(xpc_heartbeating_to_mask == NULL); | ||
943 | bitmap_zero(xpc_heartbeating_to_mask, xp_max_npartitions); | ||
944 | } | ||
945 | |||
946 | static inline void | 936 | static inline void |
947 | xpc_wakeup_channel_mgr(struct xpc_partition *part) | 937 | xpc_wakeup_channel_mgr(struct xpc_partition *part) |
948 | { | 938 | { |
diff --git a/drivers/misc/sgi-xp/xpc_channel.c b/drivers/misc/sgi-xp/xpc_channel.c index 99a2534c38a..652593fc486 100644 --- a/drivers/misc/sgi-xp/xpc_channel.c +++ b/drivers/misc/sgi-xp/xpc_channel.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (c) 2004-2008 Silicon Graphics, Inc. All Rights Reserved. | 6 | * Copyright (c) 2004-2009 Silicon Graphics, Inc. All Rights Reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* | 9 | /* |
@@ -39,34 +39,38 @@ xpc_process_connect(struct xpc_channel *ch, unsigned long *irq_flags) | |||
39 | 39 | ||
40 | if (!(ch->flags & XPC_C_SETUP)) { | 40 | if (!(ch->flags & XPC_C_SETUP)) { |
41 | spin_unlock_irqrestore(&ch->lock, *irq_flags); | 41 | spin_unlock_irqrestore(&ch->lock, *irq_flags); |
42 | ret = xpc_setup_msg_structures(ch); | 42 | ret = xpc_arch_ops.setup_msg_structures(ch); |
43 | spin_lock_irqsave(&ch->lock, *irq_flags); | 43 | spin_lock_irqsave(&ch->lock, *irq_flags); |
44 | 44 | ||
45 | if (ret != xpSuccess) | 45 | if (ret != xpSuccess) |
46 | XPC_DISCONNECT_CHANNEL(ch, ret, irq_flags); | 46 | XPC_DISCONNECT_CHANNEL(ch, ret, irq_flags); |
47 | else | ||
48 | ch->flags |= XPC_C_SETUP; | ||
47 | 49 | ||
48 | ch->flags |= XPC_C_SETUP; | 50 | if (ch->flags & XPC_C_DISCONNECTING) |
49 | |||
50 | if (ch->flags & (XPC_C_CONNECTED | XPC_C_DISCONNECTING)) | ||
51 | return; | 51 | return; |
52 | } | 52 | } |
53 | 53 | ||
54 | if (!(ch->flags & XPC_C_OPENREPLY)) { | 54 | if (!(ch->flags & XPC_C_OPENREPLY)) { |
55 | ch->flags |= XPC_C_OPENREPLY; | 55 | ch->flags |= XPC_C_OPENREPLY; |
56 | xpc_send_chctl_openreply(ch, irq_flags); | 56 | xpc_arch_ops.send_chctl_openreply(ch, irq_flags); |
57 | } | 57 | } |
58 | 58 | ||
59 | if (!(ch->flags & XPC_C_ROPENREPLY)) | 59 | if (!(ch->flags & XPC_C_ROPENREPLY)) |
60 | return; | 60 | return; |
61 | 61 | ||
62 | ch->flags = (XPC_C_CONNECTED | XPC_C_SETUP); /* clear all else */ | 62 | if (!(ch->flags & XPC_C_OPENCOMPLETE)) { |
63 | ch->flags |= (XPC_C_OPENCOMPLETE | XPC_C_CONNECTED); | ||
64 | xpc_arch_ops.send_chctl_opencomplete(ch, irq_flags); | ||
65 | } | ||
66 | |||
67 | if (!(ch->flags & XPC_C_ROPENCOMPLETE)) | ||
68 | return; | ||
63 | 69 | ||
64 | dev_info(xpc_chan, "channel %d to partition %d connected\n", | 70 | dev_info(xpc_chan, "channel %d to partition %d connected\n", |
65 | ch->number, ch->partid); | 71 | ch->number, ch->partid); |
66 | 72 | ||
67 | spin_unlock_irqrestore(&ch->lock, *irq_flags); | 73 | ch->flags = (XPC_C_CONNECTED | XPC_C_SETUP); /* clear all else */ |
68 | xpc_create_kthreads(ch, 1, 0); | ||
69 | spin_lock_irqsave(&ch->lock, *irq_flags); | ||
70 | } | 74 | } |
71 | 75 | ||
72 | /* | 76 | /* |
@@ -96,7 +100,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) | |||
96 | 100 | ||
97 | if (part->act_state == XPC_P_AS_DEACTIVATING) { | 101 | if (part->act_state == XPC_P_AS_DEACTIVATING) { |
98 | /* can't proceed until the other side disengages from us */ | 102 | /* can't proceed until the other side disengages from us */ |
99 | if (xpc_partition_engaged(ch->partid)) | 103 | if (xpc_arch_ops.partition_engaged(ch->partid)) |
100 | return; | 104 | return; |
101 | 105 | ||
102 | } else { | 106 | } else { |
@@ -108,7 +112,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) | |||
108 | 112 | ||
109 | if (!(ch->flags & XPC_C_CLOSEREPLY)) { | 113 | if (!(ch->flags & XPC_C_CLOSEREPLY)) { |
110 | ch->flags |= XPC_C_CLOSEREPLY; | 114 | ch->flags |= XPC_C_CLOSEREPLY; |
111 | xpc_send_chctl_closereply(ch, irq_flags); | 115 | xpc_arch_ops.send_chctl_closereply(ch, irq_flags); |
112 | } | 116 | } |
113 | 117 | ||
114 | if (!(ch->flags & XPC_C_RCLOSEREPLY)) | 118 | if (!(ch->flags & XPC_C_RCLOSEREPLY)) |
@@ -118,7 +122,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) | |||
118 | /* wake those waiting for notify completion */ | 122 | /* wake those waiting for notify completion */ |
119 | if (atomic_read(&ch->n_to_notify) > 0) { | 123 | if (atomic_read(&ch->n_to_notify) > 0) { |
120 | /* we do callout while holding ch->lock, callout can't block */ | 124 | /* we do callout while holding ch->lock, callout can't block */ |
121 | xpc_notify_senders_of_disconnect(ch); | 125 | xpc_arch_ops.notify_senders_of_disconnect(ch); |
122 | } | 126 | } |
123 | 127 | ||
124 | /* both sides are disconnected now */ | 128 | /* both sides are disconnected now */ |
@@ -132,7 +136,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) | |||
132 | DBUG_ON(atomic_read(&ch->n_to_notify) != 0); | 136 | DBUG_ON(atomic_read(&ch->n_to_notify) != 0); |
133 | 137 | ||
134 | /* it's now safe to free the channel's message queues */ | 138 | /* it's now safe to free the channel's message queues */ |
135 | xpc_teardown_msg_structures(ch); | 139 | xpc_arch_ops.teardown_msg_structures(ch); |
136 | 140 | ||
137 | ch->func = NULL; | 141 | ch->func = NULL; |
138 | ch->key = NULL; | 142 | ch->key = NULL; |
@@ -144,8 +148,9 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) | |||
144 | 148 | ||
145 | /* | 149 | /* |
146 | * Mark the channel disconnected and clear all other flags, including | 150 | * Mark the channel disconnected and clear all other flags, including |
147 | * XPC_C_SETUP (because of call to xpc_teardown_msg_structures()) but | 151 | * XPC_C_SETUP (because of call to |
148 | * not including XPC_C_WDISCONNECT (if it was set). | 152 | * xpc_arch_ops.teardown_msg_structures()) but not including |
153 | * XPC_C_WDISCONNECT (if it was set). | ||
149 | */ | 154 | */ |
150 | ch->flags = (XPC_C_DISCONNECTED | (ch->flags & XPC_C_WDISCONNECT)); | 155 | ch->flags = (XPC_C_DISCONNECTED | (ch->flags & XPC_C_WDISCONNECT)); |
151 | 156 | ||
@@ -184,6 +189,7 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, | |||
184 | struct xpc_channel *ch = &part->channels[ch_number]; | 189 | struct xpc_channel *ch = &part->channels[ch_number]; |
185 | enum xp_retval reason; | 190 | enum xp_retval reason; |
186 | enum xp_retval ret; | 191 | enum xp_retval ret; |
192 | int create_kthread = 0; | ||
187 | 193 | ||
188 | spin_lock_irqsave(&ch->lock, irq_flags); | 194 | spin_lock_irqsave(&ch->lock, irq_flags); |
189 | 195 | ||
@@ -196,8 +202,7 @@ again: | |||
196 | * has had a chance to see that the channel is disconnected. | 202 | * has had a chance to see that the channel is disconnected. |
197 | */ | 203 | */ |
198 | ch->delayed_chctl_flags |= chctl_flags; | 204 | ch->delayed_chctl_flags |= chctl_flags; |
199 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 205 | goto out; |
200 | return; | ||
201 | } | 206 | } |
202 | 207 | ||
203 | if (chctl_flags & XPC_CHCTL_CLOSEREQUEST) { | 208 | if (chctl_flags & XPC_CHCTL_CLOSEREQUEST) { |
@@ -239,8 +244,7 @@ again: | |||
239 | XPC_CHCTL_CLOSEREQUEST; | 244 | XPC_CHCTL_CLOSEREQUEST; |
240 | spin_unlock(&part->chctl_lock); | 245 | spin_unlock(&part->chctl_lock); |
241 | } | 246 | } |
242 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 247 | goto out; |
243 | return; | ||
244 | } | 248 | } |
245 | 249 | ||
246 | XPC_SET_REASON(ch, 0, 0); | 250 | XPC_SET_REASON(ch, 0, 0); |
@@ -250,7 +254,8 @@ again: | |||
250 | ch->flags |= (XPC_C_CONNECTING | XPC_C_ROPENREQUEST); | 254 | ch->flags |= (XPC_C_CONNECTING | XPC_C_ROPENREQUEST); |
251 | } | 255 | } |
252 | 256 | ||
253 | chctl_flags &= ~(XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY); | 257 | chctl_flags &= ~(XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY | |
258 | XPC_CHCTL_OPENCOMPLETE); | ||
254 | 259 | ||
255 | /* | 260 | /* |
256 | * The meaningful CLOSEREQUEST connection state fields are: | 261 | * The meaningful CLOSEREQUEST connection state fields are: |
@@ -269,8 +274,7 @@ again: | |||
269 | XPC_DISCONNECT_CHANNEL(ch, reason, &irq_flags); | 274 | XPC_DISCONNECT_CHANNEL(ch, reason, &irq_flags); |
270 | 275 | ||
271 | DBUG_ON(chctl_flags & XPC_CHCTL_CLOSEREPLY); | 276 | DBUG_ON(chctl_flags & XPC_CHCTL_CLOSEREPLY); |
272 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 277 | goto out; |
273 | return; | ||
274 | } | 278 | } |
275 | 279 | ||
276 | xpc_process_disconnect(ch, &irq_flags); | 280 | xpc_process_disconnect(ch, &irq_flags); |
@@ -283,8 +287,7 @@ again: | |||
283 | 287 | ||
284 | if (ch->flags & XPC_C_DISCONNECTED) { | 288 | if (ch->flags & XPC_C_DISCONNECTED) { |
285 | DBUG_ON(part->act_state != XPC_P_AS_DEACTIVATING); | 289 | DBUG_ON(part->act_state != XPC_P_AS_DEACTIVATING); |
286 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 290 | goto out; |
287 | return; | ||
288 | } | 291 | } |
289 | 292 | ||
290 | DBUG_ON(!(ch->flags & XPC_C_CLOSEREQUEST)); | 293 | DBUG_ON(!(ch->flags & XPC_C_CLOSEREQUEST)); |
@@ -299,8 +302,7 @@ again: | |||
299 | XPC_CHCTL_CLOSEREPLY; | 302 | XPC_CHCTL_CLOSEREPLY; |
300 | spin_unlock(&part->chctl_lock); | 303 | spin_unlock(&part->chctl_lock); |
301 | } | 304 | } |
302 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 305 | goto out; |
303 | return; | ||
304 | } | 306 | } |
305 | 307 | ||
306 | ch->flags |= XPC_C_RCLOSEREPLY; | 308 | ch->flags |= XPC_C_RCLOSEREPLY; |
@@ -320,14 +322,12 @@ again: | |||
320 | 322 | ||
321 | if (part->act_state == XPC_P_AS_DEACTIVATING || | 323 | if (part->act_state == XPC_P_AS_DEACTIVATING || |
322 | (ch->flags & XPC_C_ROPENREQUEST)) { | 324 | (ch->flags & XPC_C_ROPENREQUEST)) { |
323 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 325 | goto out; |
324 | return; | ||
325 | } | 326 | } |
326 | 327 | ||
327 | if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_WDISCONNECT)) { | 328 | if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_WDISCONNECT)) { |
328 | ch->delayed_chctl_flags |= XPC_CHCTL_OPENREQUEST; | 329 | ch->delayed_chctl_flags |= XPC_CHCTL_OPENREQUEST; |
329 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 330 | goto out; |
330 | return; | ||
331 | } | 331 | } |
332 | DBUG_ON(!(ch->flags & (XPC_C_DISCONNECTED | | 332 | DBUG_ON(!(ch->flags & (XPC_C_DISCONNECTED | |
333 | XPC_C_OPENREQUEST))); | 333 | XPC_C_OPENREQUEST))); |
@@ -341,8 +341,7 @@ again: | |||
341 | */ | 341 | */ |
342 | if (args->entry_size == 0 || args->local_nentries == 0) { | 342 | if (args->entry_size == 0 || args->local_nentries == 0) { |
343 | /* assume OPENREQUEST was delayed by mistake */ | 343 | /* assume OPENREQUEST was delayed by mistake */ |
344 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 344 | goto out; |
345 | return; | ||
346 | } | 345 | } |
347 | 346 | ||
348 | ch->flags |= (XPC_C_ROPENREQUEST | XPC_C_CONNECTING); | 347 | ch->flags |= (XPC_C_ROPENREQUEST | XPC_C_CONNECTING); |
@@ -352,8 +351,7 @@ again: | |||
352 | if (args->entry_size != ch->entry_size) { | 351 | if (args->entry_size != ch->entry_size) { |
353 | XPC_DISCONNECT_CHANNEL(ch, xpUnequalMsgSizes, | 352 | XPC_DISCONNECT_CHANNEL(ch, xpUnequalMsgSizes, |
354 | &irq_flags); | 353 | &irq_flags); |
355 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 354 | goto out; |
356 | return; | ||
357 | } | 355 | } |
358 | } else { | 356 | } else { |
359 | ch->entry_size = args->entry_size; | 357 | ch->entry_size = args->entry_size; |
@@ -375,15 +373,13 @@ again: | |||
375 | args->local_msgqueue_pa, args->local_nentries, | 373 | args->local_msgqueue_pa, args->local_nentries, |
376 | args->remote_nentries, ch->partid, ch->number); | 374 | args->remote_nentries, ch->partid, ch->number); |
377 | 375 | ||
378 | if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_DISCONNECTED)) { | 376 | if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_DISCONNECTED)) |
379 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 377 | goto out; |
380 | return; | 378 | |
381 | } | ||
382 | if (!(ch->flags & XPC_C_OPENREQUEST)) { | 379 | if (!(ch->flags & XPC_C_OPENREQUEST)) { |
383 | XPC_DISCONNECT_CHANNEL(ch, xpOpenCloseError, | 380 | XPC_DISCONNECT_CHANNEL(ch, xpOpenCloseError, |
384 | &irq_flags); | 381 | &irq_flags); |
385 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 382 | goto out; |
386 | return; | ||
387 | } | 383 | } |
388 | 384 | ||
389 | DBUG_ON(!(ch->flags & XPC_C_ROPENREQUEST)); | 385 | DBUG_ON(!(ch->flags & XPC_C_ROPENREQUEST)); |
@@ -400,11 +396,11 @@ again: | |||
400 | DBUG_ON(args->local_nentries == 0); | 396 | DBUG_ON(args->local_nentries == 0); |
401 | DBUG_ON(args->remote_nentries == 0); | 397 | DBUG_ON(args->remote_nentries == 0); |
402 | 398 | ||
403 | ret = xpc_save_remote_msgqueue_pa(ch, args->local_msgqueue_pa); | 399 | ret = xpc_arch_ops.save_remote_msgqueue_pa(ch, |
400 | args->local_msgqueue_pa); | ||
404 | if (ret != xpSuccess) { | 401 | if (ret != xpSuccess) { |
405 | XPC_DISCONNECT_CHANNEL(ch, ret, &irq_flags); | 402 | XPC_DISCONNECT_CHANNEL(ch, ret, &irq_flags); |
406 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 403 | goto out; |
407 | return; | ||
408 | } | 404 | } |
409 | ch->flags |= XPC_C_ROPENREPLY; | 405 | ch->flags |= XPC_C_ROPENREPLY; |
410 | 406 | ||
@@ -430,7 +426,36 @@ again: | |||
430 | xpc_process_connect(ch, &irq_flags); | 426 | xpc_process_connect(ch, &irq_flags); |
431 | } | 427 | } |
432 | 428 | ||
429 | if (chctl_flags & XPC_CHCTL_OPENCOMPLETE) { | ||
430 | |||
431 | dev_dbg(xpc_chan, "XPC_CHCTL_OPENCOMPLETE received from " | ||
432 | "partid=%d, channel=%d\n", ch->partid, ch->number); | ||
433 | |||
434 | if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_DISCONNECTED)) | ||
435 | goto out; | ||
436 | |||
437 | if (!(ch->flags & XPC_C_OPENREQUEST) || | ||
438 | !(ch->flags & XPC_C_OPENREPLY)) { | ||
439 | XPC_DISCONNECT_CHANNEL(ch, xpOpenCloseError, | ||
440 | &irq_flags); | ||
441 | goto out; | ||
442 | } | ||
443 | |||
444 | DBUG_ON(!(ch->flags & XPC_C_ROPENREQUEST)); | ||
445 | DBUG_ON(!(ch->flags & XPC_C_ROPENREPLY)); | ||
446 | DBUG_ON(!(ch->flags & XPC_C_CONNECTED)); | ||
447 | |||
448 | ch->flags |= XPC_C_ROPENCOMPLETE; | ||
449 | |||
450 | xpc_process_connect(ch, &irq_flags); | ||
451 | create_kthread = 1; | ||
452 | } | ||
453 | |||
454 | out: | ||
433 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 455 | spin_unlock_irqrestore(&ch->lock, irq_flags); |
456 | |||
457 | if (create_kthread) | ||
458 | xpc_create_kthreads(ch, 1, 0); | ||
434 | } | 459 | } |
435 | 460 | ||
436 | /* | 461 | /* |
@@ -508,7 +533,7 @@ xpc_connect_channel(struct xpc_channel *ch) | |||
508 | /* initiate the connection */ | 533 | /* initiate the connection */ |
509 | 534 | ||
510 | ch->flags |= (XPC_C_OPENREQUEST | XPC_C_CONNECTING); | 535 | ch->flags |= (XPC_C_OPENREQUEST | XPC_C_CONNECTING); |
511 | xpc_send_chctl_openrequest(ch, &irq_flags); | 536 | xpc_arch_ops.send_chctl_openrequest(ch, &irq_flags); |
512 | 537 | ||
513 | xpc_process_connect(ch, &irq_flags); | 538 | xpc_process_connect(ch, &irq_flags); |
514 | 539 | ||
@@ -526,7 +551,7 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part) | |||
526 | int ch_number; | 551 | int ch_number; |
527 | u32 ch_flags; | 552 | u32 ch_flags; |
528 | 553 | ||
529 | chctl.all_flags = xpc_get_chctl_all_flags(part); | 554 | chctl.all_flags = xpc_arch_ops.get_chctl_all_flags(part); |
530 | 555 | ||
531 | /* | 556 | /* |
532 | * Initiate channel connections for registered channels. | 557 | * Initiate channel connections for registered channels. |
@@ -564,10 +589,6 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part) | |||
564 | if (!(ch_flags & XPC_C_OPENREQUEST)) { | 589 | if (!(ch_flags & XPC_C_OPENREQUEST)) { |
565 | DBUG_ON(ch_flags & XPC_C_SETUP); | 590 | DBUG_ON(ch_flags & XPC_C_SETUP); |
566 | (void)xpc_connect_channel(ch); | 591 | (void)xpc_connect_channel(ch); |
567 | } else { | ||
568 | spin_lock_irqsave(&ch->lock, irq_flags); | ||
569 | xpc_process_connect(ch, &irq_flags); | ||
570 | spin_unlock_irqrestore(&ch->lock, irq_flags); | ||
571 | } | 592 | } |
572 | continue; | 593 | continue; |
573 | } | 594 | } |
@@ -579,7 +600,7 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part) | |||
579 | */ | 600 | */ |
580 | 601 | ||
581 | if (chctl.flags[ch_number] & XPC_MSG_CHCTL_FLAGS) | 602 | if (chctl.flags[ch_number] & XPC_MSG_CHCTL_FLAGS) |
582 | xpc_process_msg_chctl_flags(part, ch_number); | 603 | xpc_arch_ops.process_msg_chctl_flags(part, ch_number); |
583 | } | 604 | } |
584 | } | 605 | } |
585 | 606 | ||
@@ -755,7 +776,7 @@ xpc_disconnect_channel(const int line, struct xpc_channel *ch, | |||
755 | XPC_C_ROPENREQUEST | XPC_C_ROPENREPLY | | 776 | XPC_C_ROPENREQUEST | XPC_C_ROPENREPLY | |
756 | XPC_C_CONNECTING | XPC_C_CONNECTED); | 777 | XPC_C_CONNECTING | XPC_C_CONNECTED); |
757 | 778 | ||
758 | xpc_send_chctl_closerequest(ch, irq_flags); | 779 | xpc_arch_ops.send_chctl_closerequest(ch, irq_flags); |
759 | 780 | ||
760 | if (channel_was_connected) | 781 | if (channel_was_connected) |
761 | ch->flags |= XPC_C_WASCONNECTED; | 782 | ch->flags |= XPC_C_WASCONNECTED; |
@@ -862,8 +883,8 @@ xpc_initiate_send(short partid, int ch_number, u32 flags, void *payload, | |||
862 | DBUG_ON(payload == NULL); | 883 | DBUG_ON(payload == NULL); |
863 | 884 | ||
864 | if (xpc_part_ref(part)) { | 885 | if (xpc_part_ref(part)) { |
865 | ret = xpc_send_payload(&part->channels[ch_number], flags, | 886 | ret = xpc_arch_ops.send_payload(&part->channels[ch_number], |
866 | payload, payload_size, 0, NULL, NULL); | 887 | flags, payload, payload_size, 0, NULL, NULL); |
867 | xpc_part_deref(part); | 888 | xpc_part_deref(part); |
868 | } | 889 | } |
869 | 890 | ||
@@ -914,9 +935,8 @@ xpc_initiate_send_notify(short partid, int ch_number, u32 flags, void *payload, | |||
914 | DBUG_ON(func == NULL); | 935 | DBUG_ON(func == NULL); |
915 | 936 | ||
916 | if (xpc_part_ref(part)) { | 937 | if (xpc_part_ref(part)) { |
917 | ret = xpc_send_payload(&part->channels[ch_number], flags, | 938 | ret = xpc_arch_ops.send_payload(&part->channels[ch_number], |
918 | payload, payload_size, XPC_N_CALL, func, | 939 | flags, payload, payload_size, XPC_N_CALL, func, key); |
919 | key); | ||
920 | xpc_part_deref(part); | 940 | xpc_part_deref(part); |
921 | } | 941 | } |
922 | return ret; | 942 | return ret; |
@@ -930,7 +950,7 @@ xpc_deliver_payload(struct xpc_channel *ch) | |||
930 | { | 950 | { |
931 | void *payload; | 951 | void *payload; |
932 | 952 | ||
933 | payload = xpc_get_deliverable_payload(ch); | 953 | payload = xpc_arch_ops.get_deliverable_payload(ch); |
934 | if (payload != NULL) { | 954 | if (payload != NULL) { |
935 | 955 | ||
936 | /* | 956 | /* |
@@ -984,7 +1004,7 @@ xpc_initiate_received(short partid, int ch_number, void *payload) | |||
984 | DBUG_ON(ch_number < 0 || ch_number >= part->nchannels); | 1004 | DBUG_ON(ch_number < 0 || ch_number >= part->nchannels); |
985 | 1005 | ||
986 | ch = &part->channels[ch_number]; | 1006 | ch = &part->channels[ch_number]; |
987 | xpc_received_payload(ch, payload); | 1007 | xpc_arch_ops.received_payload(ch, payload); |
988 | 1008 | ||
989 | /* the call to xpc_msgqueue_ref() was done by xpc_deliver_payload() */ | 1009 | /* the call to xpc_msgqueue_ref() was done by xpc_deliver_payload() */ |
990 | xpc_msgqueue_deref(ch); | 1010 | xpc_msgqueue_deref(ch); |
diff --git a/drivers/misc/sgi-xp/xpc_main.c b/drivers/misc/sgi-xp/xpc_main.c index 1ab9fda87fa..fd3688a3e23 100644 --- a/drivers/misc/sgi-xp/xpc_main.c +++ b/drivers/misc/sgi-xp/xpc_main.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (c) 2004-2008 Silicon Graphics, Inc. All Rights Reserved. | 6 | * Copyright (c) 2004-2009 Silicon Graphics, Inc. All Rights Reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* | 9 | /* |
@@ -150,7 +150,6 @@ DECLARE_WAIT_QUEUE_HEAD(xpc_activate_IRQ_wq); | |||
150 | 150 | ||
151 | static unsigned long xpc_hb_check_timeout; | 151 | static unsigned long xpc_hb_check_timeout; |
152 | static struct timer_list xpc_hb_timer; | 152 | static struct timer_list xpc_hb_timer; |
153 | void *xpc_heartbeating_to_mask; | ||
154 | 153 | ||
155 | /* notification that the xpc_hb_checker thread has exited */ | 154 | /* notification that the xpc_hb_checker thread has exited */ |
156 | static DECLARE_COMPLETION(xpc_hb_checker_exited); | 155 | static DECLARE_COMPLETION(xpc_hb_checker_exited); |
@@ -170,62 +169,7 @@ static struct notifier_block xpc_die_notifier = { | |||
170 | .notifier_call = xpc_system_die, | 169 | .notifier_call = xpc_system_die, |
171 | }; | 170 | }; |
172 | 171 | ||
173 | int (*xpc_setup_partitions_sn) (void); | 172 | struct xpc_arch_operations xpc_arch_ops; |
174 | void (*xpc_teardown_partitions_sn) (void); | ||
175 | enum xp_retval (*xpc_get_partition_rsvd_page_pa) (void *buf, u64 *cookie, | ||
176 | unsigned long *rp_pa, | ||
177 | size_t *len); | ||
178 | int (*xpc_setup_rsvd_page_sn) (struct xpc_rsvd_page *rp); | ||
179 | void (*xpc_heartbeat_init) (void); | ||
180 | void (*xpc_heartbeat_exit) (void); | ||
181 | void (*xpc_increment_heartbeat) (void); | ||
182 | void (*xpc_offline_heartbeat) (void); | ||
183 | void (*xpc_online_heartbeat) (void); | ||
184 | enum xp_retval (*xpc_get_remote_heartbeat) (struct xpc_partition *part); | ||
185 | |||
186 | enum xp_retval (*xpc_make_first_contact) (struct xpc_partition *part); | ||
187 | void (*xpc_notify_senders_of_disconnect) (struct xpc_channel *ch); | ||
188 | u64 (*xpc_get_chctl_all_flags) (struct xpc_partition *part); | ||
189 | enum xp_retval (*xpc_setup_msg_structures) (struct xpc_channel *ch); | ||
190 | void (*xpc_teardown_msg_structures) (struct xpc_channel *ch); | ||
191 | void (*xpc_process_msg_chctl_flags) (struct xpc_partition *part, int ch_number); | ||
192 | int (*xpc_n_of_deliverable_payloads) (struct xpc_channel *ch); | ||
193 | void *(*xpc_get_deliverable_payload) (struct xpc_channel *ch); | ||
194 | |||
195 | void (*xpc_request_partition_activation) (struct xpc_rsvd_page *remote_rp, | ||
196 | unsigned long remote_rp_pa, | ||
197 | int nasid); | ||
198 | void (*xpc_request_partition_reactivation) (struct xpc_partition *part); | ||
199 | void (*xpc_request_partition_deactivation) (struct xpc_partition *part); | ||
200 | void (*xpc_cancel_partition_deactivation_request) (struct xpc_partition *part); | ||
201 | |||
202 | void (*xpc_process_activate_IRQ_rcvd) (void); | ||
203 | enum xp_retval (*xpc_setup_ch_structures_sn) (struct xpc_partition *part); | ||
204 | void (*xpc_teardown_ch_structures_sn) (struct xpc_partition *part); | ||
205 | |||
206 | void (*xpc_indicate_partition_engaged) (struct xpc_partition *part); | ||
207 | int (*xpc_partition_engaged) (short partid); | ||
208 | int (*xpc_any_partition_engaged) (void); | ||
209 | void (*xpc_indicate_partition_disengaged) (struct xpc_partition *part); | ||
210 | void (*xpc_assume_partition_disengaged) (short partid); | ||
211 | |||
212 | void (*xpc_send_chctl_closerequest) (struct xpc_channel *ch, | ||
213 | unsigned long *irq_flags); | ||
214 | void (*xpc_send_chctl_closereply) (struct xpc_channel *ch, | ||
215 | unsigned long *irq_flags); | ||
216 | void (*xpc_send_chctl_openrequest) (struct xpc_channel *ch, | ||
217 | unsigned long *irq_flags); | ||
218 | void (*xpc_send_chctl_openreply) (struct xpc_channel *ch, | ||
219 | unsigned long *irq_flags); | ||
220 | |||
221 | enum xp_retval (*xpc_save_remote_msgqueue_pa) (struct xpc_channel *ch, | ||
222 | unsigned long msgqueue_pa); | ||
223 | |||
224 | enum xp_retval (*xpc_send_payload) (struct xpc_channel *ch, u32 flags, | ||
225 | void *payload, u16 payload_size, | ||
226 | u8 notify_type, xpc_notify_func func, | ||
227 | void *key); | ||
228 | void (*xpc_received_payload) (struct xpc_channel *ch, void *payload); | ||
229 | 173 | ||
230 | /* | 174 | /* |
231 | * Timer function to enforce the timelimit on the partition disengage. | 175 | * Timer function to enforce the timelimit on the partition disengage. |
@@ -240,7 +184,7 @@ xpc_timeout_partition_disengage(unsigned long data) | |||
240 | (void)xpc_partition_disengaged(part); | 184 | (void)xpc_partition_disengaged(part); |
241 | 185 | ||
242 | DBUG_ON(part->disengage_timeout != 0); | 186 | DBUG_ON(part->disengage_timeout != 0); |
243 | DBUG_ON(xpc_partition_engaged(XPC_PARTID(part))); | 187 | DBUG_ON(xpc_arch_ops.partition_engaged(XPC_PARTID(part))); |
244 | } | 188 | } |
245 | 189 | ||
246 | /* | 190 | /* |
@@ -251,7 +195,7 @@ xpc_timeout_partition_disengage(unsigned long data) | |||
251 | static void | 195 | static void |
252 | xpc_hb_beater(unsigned long dummy) | 196 | xpc_hb_beater(unsigned long dummy) |
253 | { | 197 | { |
254 | xpc_increment_heartbeat(); | 198 | xpc_arch_ops.increment_heartbeat(); |
255 | 199 | ||
256 | if (time_is_before_eq_jiffies(xpc_hb_check_timeout)) | 200 | if (time_is_before_eq_jiffies(xpc_hb_check_timeout)) |
257 | wake_up_interruptible(&xpc_activate_IRQ_wq); | 201 | wake_up_interruptible(&xpc_activate_IRQ_wq); |
@@ -263,7 +207,7 @@ xpc_hb_beater(unsigned long dummy) | |||
263 | static void | 207 | static void |
264 | xpc_start_hb_beater(void) | 208 | xpc_start_hb_beater(void) |
265 | { | 209 | { |
266 | xpc_heartbeat_init(); | 210 | xpc_arch_ops.heartbeat_init(); |
267 | init_timer(&xpc_hb_timer); | 211 | init_timer(&xpc_hb_timer); |
268 | xpc_hb_timer.function = xpc_hb_beater; | 212 | xpc_hb_timer.function = xpc_hb_beater; |
269 | xpc_hb_beater(0); | 213 | xpc_hb_beater(0); |
@@ -273,7 +217,7 @@ static void | |||
273 | xpc_stop_hb_beater(void) | 217 | xpc_stop_hb_beater(void) |
274 | { | 218 | { |
275 | del_timer_sync(&xpc_hb_timer); | 219 | del_timer_sync(&xpc_hb_timer); |
276 | xpc_heartbeat_exit(); | 220 | xpc_arch_ops.heartbeat_exit(); |
277 | } | 221 | } |
278 | 222 | ||
279 | /* | 223 | /* |
@@ -302,7 +246,7 @@ xpc_check_remote_hb(void) | |||
302 | continue; | 246 | continue; |
303 | } | 247 | } |
304 | 248 | ||
305 | ret = xpc_get_remote_heartbeat(part); | 249 | ret = xpc_arch_ops.get_remote_heartbeat(part); |
306 | if (ret != xpSuccess) | 250 | if (ret != xpSuccess) |
307 | XPC_DEACTIVATE_PARTITION(part, ret); | 251 | XPC_DEACTIVATE_PARTITION(part, ret); |
308 | } | 252 | } |
@@ -353,7 +297,7 @@ xpc_hb_checker(void *ignore) | |||
353 | force_IRQ = 0; | 297 | force_IRQ = 0; |
354 | dev_dbg(xpc_part, "processing activate IRQs " | 298 | dev_dbg(xpc_part, "processing activate IRQs " |
355 | "received\n"); | 299 | "received\n"); |
356 | xpc_process_activate_IRQ_rcvd(); | 300 | xpc_arch_ops.process_activate_IRQ_rcvd(); |
357 | } | 301 | } |
358 | 302 | ||
359 | /* wait for IRQ or timeout */ | 303 | /* wait for IRQ or timeout */ |
@@ -528,7 +472,7 @@ xpc_setup_ch_structures(struct xpc_partition *part) | |||
528 | init_waitqueue_head(&ch->idle_wq); | 472 | init_waitqueue_head(&ch->idle_wq); |
529 | } | 473 | } |
530 | 474 | ||
531 | ret = xpc_setup_ch_structures_sn(part); | 475 | ret = xpc_arch_ops.setup_ch_structures(part); |
532 | if (ret != xpSuccess) | 476 | if (ret != xpSuccess) |
533 | goto out_2; | 477 | goto out_2; |
534 | 478 | ||
@@ -572,7 +516,7 @@ xpc_teardown_ch_structures(struct xpc_partition *part) | |||
572 | 516 | ||
573 | /* now we can begin tearing down the infrastructure */ | 517 | /* now we can begin tearing down the infrastructure */ |
574 | 518 | ||
575 | xpc_teardown_ch_structures_sn(part); | 519 | xpc_arch_ops.teardown_ch_structures(part); |
576 | 520 | ||
577 | kfree(part->remote_openclose_args_base); | 521 | kfree(part->remote_openclose_args_base); |
578 | part->remote_openclose_args = NULL; | 522 | part->remote_openclose_args = NULL; |
@@ -620,12 +564,12 @@ xpc_activating(void *__partid) | |||
620 | 564 | ||
621 | dev_dbg(xpc_part, "activating partition %d\n", partid); | 565 | dev_dbg(xpc_part, "activating partition %d\n", partid); |
622 | 566 | ||
623 | xpc_allow_hb(partid); | 567 | xpc_arch_ops.allow_hb(partid); |
624 | 568 | ||
625 | if (xpc_setup_ch_structures(part) == xpSuccess) { | 569 | if (xpc_setup_ch_structures(part) == xpSuccess) { |
626 | (void)xpc_part_ref(part); /* this will always succeed */ | 570 | (void)xpc_part_ref(part); /* this will always succeed */ |
627 | 571 | ||
628 | if (xpc_make_first_contact(part) == xpSuccess) { | 572 | if (xpc_arch_ops.make_first_contact(part) == xpSuccess) { |
629 | xpc_mark_partition_active(part); | 573 | xpc_mark_partition_active(part); |
630 | xpc_channel_mgr(part); | 574 | xpc_channel_mgr(part); |
631 | /* won't return until partition is deactivating */ | 575 | /* won't return until partition is deactivating */ |
@@ -635,12 +579,12 @@ xpc_activating(void *__partid) | |||
635 | xpc_teardown_ch_structures(part); | 579 | xpc_teardown_ch_structures(part); |
636 | } | 580 | } |
637 | 581 | ||
638 | xpc_disallow_hb(partid); | 582 | xpc_arch_ops.disallow_hb(partid); |
639 | xpc_mark_partition_inactive(part); | 583 | xpc_mark_partition_inactive(part); |
640 | 584 | ||
641 | if (part->reason == xpReactivating) { | 585 | if (part->reason == xpReactivating) { |
642 | /* interrupting ourselves results in activating partition */ | 586 | /* interrupting ourselves results in activating partition */ |
643 | xpc_request_partition_reactivation(part); | 587 | xpc_arch_ops.request_partition_reactivation(part); |
644 | } | 588 | } |
645 | 589 | ||
646 | return 0; | 590 | return 0; |
@@ -713,10 +657,13 @@ xpc_activate_kthreads(struct xpc_channel *ch, int needed) | |||
713 | static void | 657 | static void |
714 | xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch) | 658 | xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch) |
715 | { | 659 | { |
660 | int (*n_of_deliverable_payloads) (struct xpc_channel *) = | ||
661 | xpc_arch_ops.n_of_deliverable_payloads; | ||
662 | |||
716 | do { | 663 | do { |
717 | /* deliver messages to their intended recipients */ | 664 | /* deliver messages to their intended recipients */ |
718 | 665 | ||
719 | while (xpc_n_of_deliverable_payloads(ch) > 0 && | 666 | while (n_of_deliverable_payloads(ch) > 0 && |
720 | !(ch->flags & XPC_C_DISCONNECTING)) { | 667 | !(ch->flags & XPC_C_DISCONNECTING)) { |
721 | xpc_deliver_payload(ch); | 668 | xpc_deliver_payload(ch); |
722 | } | 669 | } |
@@ -732,7 +679,7 @@ xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch) | |||
732 | "wait_event_interruptible_exclusive()\n"); | 679 | "wait_event_interruptible_exclusive()\n"); |
733 | 680 | ||
734 | (void)wait_event_interruptible_exclusive(ch->idle_wq, | 681 | (void)wait_event_interruptible_exclusive(ch->idle_wq, |
735 | (xpc_n_of_deliverable_payloads(ch) > 0 || | 682 | (n_of_deliverable_payloads(ch) > 0 || |
736 | (ch->flags & XPC_C_DISCONNECTING))); | 683 | (ch->flags & XPC_C_DISCONNECTING))); |
737 | 684 | ||
738 | atomic_dec(&ch->kthreads_idle); | 685 | atomic_dec(&ch->kthreads_idle); |
@@ -749,6 +696,8 @@ xpc_kthread_start(void *args) | |||
749 | struct xpc_channel *ch; | 696 | struct xpc_channel *ch; |
750 | int n_needed; | 697 | int n_needed; |
751 | unsigned long irq_flags; | 698 | unsigned long irq_flags; |
699 | int (*n_of_deliverable_payloads) (struct xpc_channel *) = | ||
700 | xpc_arch_ops.n_of_deliverable_payloads; | ||
752 | 701 | ||
753 | dev_dbg(xpc_chan, "kthread starting, partid=%d, channel=%d\n", | 702 | dev_dbg(xpc_chan, "kthread starting, partid=%d, channel=%d\n", |
754 | partid, ch_number); | 703 | partid, ch_number); |
@@ -777,7 +726,7 @@ xpc_kthread_start(void *args) | |||
777 | * additional kthreads to help deliver them. We only | 726 | * additional kthreads to help deliver them. We only |
778 | * need one less than total #of messages to deliver. | 727 | * need one less than total #of messages to deliver. |
779 | */ | 728 | */ |
780 | n_needed = xpc_n_of_deliverable_payloads(ch) - 1; | 729 | n_needed = n_of_deliverable_payloads(ch) - 1; |
781 | if (n_needed > 0 && !(ch->flags & XPC_C_DISCONNECTING)) | 730 | if (n_needed > 0 && !(ch->flags & XPC_C_DISCONNECTING)) |
782 | xpc_activate_kthreads(ch, n_needed); | 731 | xpc_activate_kthreads(ch, n_needed); |
783 | 732 | ||
@@ -805,7 +754,7 @@ xpc_kthread_start(void *args) | |||
805 | 754 | ||
806 | if (atomic_dec_return(&ch->kthreads_assigned) == 0 && | 755 | if (atomic_dec_return(&ch->kthreads_assigned) == 0 && |
807 | atomic_dec_return(&part->nchannels_engaged) == 0) { | 756 | atomic_dec_return(&part->nchannels_engaged) == 0) { |
808 | xpc_indicate_partition_disengaged(part); | 757 | xpc_arch_ops.indicate_partition_disengaged(part); |
809 | } | 758 | } |
810 | 759 | ||
811 | xpc_msgqueue_deref(ch); | 760 | xpc_msgqueue_deref(ch); |
@@ -837,6 +786,8 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed, | |||
837 | u64 args = XPC_PACK_ARGS(ch->partid, ch->number); | 786 | u64 args = XPC_PACK_ARGS(ch->partid, ch->number); |
838 | struct xpc_partition *part = &xpc_partitions[ch->partid]; | 787 | struct xpc_partition *part = &xpc_partitions[ch->partid]; |
839 | struct task_struct *kthread; | 788 | struct task_struct *kthread; |
789 | void (*indicate_partition_disengaged) (struct xpc_partition *) = | ||
790 | xpc_arch_ops.indicate_partition_disengaged; | ||
840 | 791 | ||
841 | while (needed-- > 0) { | 792 | while (needed-- > 0) { |
842 | 793 | ||
@@ -858,7 +809,7 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed, | |||
858 | 809 | ||
859 | } else if (atomic_inc_return(&ch->kthreads_assigned) == 1 && | 810 | } else if (atomic_inc_return(&ch->kthreads_assigned) == 1 && |
860 | atomic_inc_return(&part->nchannels_engaged) == 1) { | 811 | atomic_inc_return(&part->nchannels_engaged) == 1) { |
861 | xpc_indicate_partition_engaged(part); | 812 | xpc_arch_ops.indicate_partition_engaged(part); |
862 | } | 813 | } |
863 | (void)xpc_part_ref(part); | 814 | (void)xpc_part_ref(part); |
864 | xpc_msgqueue_ref(ch); | 815 | xpc_msgqueue_ref(ch); |
@@ -880,7 +831,7 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed, | |||
880 | 831 | ||
881 | if (atomic_dec_return(&ch->kthreads_assigned) == 0 && | 832 | if (atomic_dec_return(&ch->kthreads_assigned) == 0 && |
882 | atomic_dec_return(&part->nchannels_engaged) == 0) { | 833 | atomic_dec_return(&part->nchannels_engaged) == 0) { |
883 | xpc_indicate_partition_disengaged(part); | 834 | indicate_partition_disengaged(part); |
884 | } | 835 | } |
885 | xpc_msgqueue_deref(ch); | 836 | xpc_msgqueue_deref(ch); |
886 | xpc_part_deref(part); | 837 | xpc_part_deref(part); |
@@ -993,13 +944,13 @@ xpc_setup_partitions(void) | |||
993 | atomic_set(&part->references, 0); | 944 | atomic_set(&part->references, 0); |
994 | } | 945 | } |
995 | 946 | ||
996 | return xpc_setup_partitions_sn(); | 947 | return xpc_arch_ops.setup_partitions(); |
997 | } | 948 | } |
998 | 949 | ||
999 | static void | 950 | static void |
1000 | xpc_teardown_partitions(void) | 951 | xpc_teardown_partitions(void) |
1001 | { | 952 | { |
1002 | xpc_teardown_partitions_sn(); | 953 | xpc_arch_ops.teardown_partitions(); |
1003 | kfree(xpc_partitions); | 954 | kfree(xpc_partitions); |
1004 | } | 955 | } |
1005 | 956 | ||
@@ -1055,7 +1006,7 @@ xpc_do_exit(enum xp_retval reason) | |||
1055 | disengage_timeout = part->disengage_timeout; | 1006 | disengage_timeout = part->disengage_timeout; |
1056 | } | 1007 | } |
1057 | 1008 | ||
1058 | if (xpc_any_partition_engaged()) { | 1009 | if (xpc_arch_ops.any_partition_engaged()) { |
1059 | if (time_is_before_jiffies(printmsg_time)) { | 1010 | if (time_is_before_jiffies(printmsg_time)) { |
1060 | dev_info(xpc_part, "waiting for remote " | 1011 | dev_info(xpc_part, "waiting for remote " |
1061 | "partitions to deactivate, timeout in " | 1012 | "partitions to deactivate, timeout in " |
@@ -1086,8 +1037,7 @@ xpc_do_exit(enum xp_retval reason) | |||
1086 | 1037 | ||
1087 | } while (1); | 1038 | } while (1); |
1088 | 1039 | ||
1089 | DBUG_ON(xpc_any_partition_engaged()); | 1040 | DBUG_ON(xpc_arch_ops.any_partition_engaged()); |
1090 | DBUG_ON(xpc_any_hbs_allowed() != 0); | ||
1091 | 1041 | ||
1092 | xpc_teardown_rsvd_page(); | 1042 | xpc_teardown_rsvd_page(); |
1093 | 1043 | ||
@@ -1152,15 +1102,15 @@ xpc_die_deactivate(void) | |||
1152 | /* keep xpc_hb_checker thread from doing anything (just in case) */ | 1102 | /* keep xpc_hb_checker thread from doing anything (just in case) */ |
1153 | xpc_exiting = 1; | 1103 | xpc_exiting = 1; |
1154 | 1104 | ||
1155 | xpc_disallow_all_hbs(); /*indicate we're deactivated */ | 1105 | xpc_arch_ops.disallow_all_hbs(); /*indicate we're deactivated */ |
1156 | 1106 | ||
1157 | for (partid = 0; partid < xp_max_npartitions; partid++) { | 1107 | for (partid = 0; partid < xp_max_npartitions; partid++) { |
1158 | part = &xpc_partitions[partid]; | 1108 | part = &xpc_partitions[partid]; |
1159 | 1109 | ||
1160 | if (xpc_partition_engaged(partid) || | 1110 | if (xpc_arch_ops.partition_engaged(partid) || |
1161 | part->act_state != XPC_P_AS_INACTIVE) { | 1111 | part->act_state != XPC_P_AS_INACTIVE) { |
1162 | xpc_request_partition_deactivation(part); | 1112 | xpc_arch_ops.request_partition_deactivation(part); |
1163 | xpc_indicate_partition_disengaged(part); | 1113 | xpc_arch_ops.indicate_partition_disengaged(part); |
1164 | } | 1114 | } |
1165 | } | 1115 | } |
1166 | 1116 | ||
@@ -1177,7 +1127,7 @@ xpc_die_deactivate(void) | |||
1177 | wait_to_print = XPC_DEACTIVATE_PRINTMSG_INTERVAL * 1000 * 5; | 1127 | wait_to_print = XPC_DEACTIVATE_PRINTMSG_INTERVAL * 1000 * 5; |
1178 | 1128 | ||
1179 | while (1) { | 1129 | while (1) { |
1180 | any_engaged = xpc_any_partition_engaged(); | 1130 | any_engaged = xpc_arch_ops.any_partition_engaged(); |
1181 | if (!any_engaged) { | 1131 | if (!any_engaged) { |
1182 | dev_info(xpc_part, "all partitions have deactivated\n"); | 1132 | dev_info(xpc_part, "all partitions have deactivated\n"); |
1183 | break; | 1133 | break; |
@@ -1186,7 +1136,7 @@ xpc_die_deactivate(void) | |||
1186 | if (!keep_waiting--) { | 1136 | if (!keep_waiting--) { |
1187 | for (partid = 0; partid < xp_max_npartitions; | 1137 | for (partid = 0; partid < xp_max_npartitions; |
1188 | partid++) { | 1138 | partid++) { |
1189 | if (xpc_partition_engaged(partid)) { | 1139 | if (xpc_arch_ops.partition_engaged(partid)) { |
1190 | dev_info(xpc_part, "deactivate from " | 1140 | dev_info(xpc_part, "deactivate from " |
1191 | "remote partition %d timed " | 1141 | "remote partition %d timed " |
1192 | "out\n", partid); | 1142 | "out\n", partid); |
@@ -1233,7 +1183,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused) | |||
1233 | /* fall through */ | 1183 | /* fall through */ |
1234 | case DIE_MCA_MONARCH_ENTER: | 1184 | case DIE_MCA_MONARCH_ENTER: |
1235 | case DIE_INIT_MONARCH_ENTER: | 1185 | case DIE_INIT_MONARCH_ENTER: |
1236 | xpc_offline_heartbeat(); | 1186 | xpc_arch_ops.offline_heartbeat(); |
1237 | break; | 1187 | break; |
1238 | 1188 | ||
1239 | case DIE_KDEBUG_LEAVE: | 1189 | case DIE_KDEBUG_LEAVE: |
@@ -1244,7 +1194,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused) | |||
1244 | /* fall through */ | 1194 | /* fall through */ |
1245 | case DIE_MCA_MONARCH_LEAVE: | 1195 | case DIE_MCA_MONARCH_LEAVE: |
1246 | case DIE_INIT_MONARCH_LEAVE: | 1196 | case DIE_INIT_MONARCH_LEAVE: |
1247 | xpc_online_heartbeat(); | 1197 | xpc_arch_ops.online_heartbeat(); |
1248 | break; | 1198 | break; |
1249 | } | 1199 | } |
1250 | #else | 1200 | #else |
diff --git a/drivers/misc/sgi-xp/xpc_partition.c b/drivers/misc/sgi-xp/xpc_partition.c index 6722f6fe4dc..65877bc5eda 100644 --- a/drivers/misc/sgi-xp/xpc_partition.c +++ b/drivers/misc/sgi-xp/xpc_partition.c | |||
@@ -70,6 +70,9 @@ xpc_get_rsvd_page_pa(int nasid) | |||
70 | size_t buf_len = 0; | 70 | size_t buf_len = 0; |
71 | void *buf = buf; | 71 | void *buf = buf; |
72 | void *buf_base = NULL; | 72 | void *buf_base = NULL; |
73 | enum xp_retval (*get_partition_rsvd_page_pa) | ||
74 | (void *, u64 *, unsigned long *, size_t *) = | ||
75 | xpc_arch_ops.get_partition_rsvd_page_pa; | ||
73 | 76 | ||
74 | while (1) { | 77 | while (1) { |
75 | 78 | ||
@@ -79,8 +82,7 @@ xpc_get_rsvd_page_pa(int nasid) | |||
79 | * ??? function or have two versions? Rename rp_pa for UV to | 82 | * ??? function or have two versions? Rename rp_pa for UV to |
80 | * ??? rp_gpa? | 83 | * ??? rp_gpa? |
81 | */ | 84 | */ |
82 | ret = xpc_get_partition_rsvd_page_pa(buf, &cookie, &rp_pa, | 85 | ret = get_partition_rsvd_page_pa(buf, &cookie, &rp_pa, &len); |
83 | &len); | ||
84 | 86 | ||
85 | dev_dbg(xpc_part, "SAL returned with ret=%d, cookie=0x%016lx, " | 87 | dev_dbg(xpc_part, "SAL returned with ret=%d, cookie=0x%016lx, " |
86 | "address=0x%016lx, len=0x%016lx\n", ret, | 88 | "address=0x%016lx, len=0x%016lx\n", ret, |
@@ -172,7 +174,7 @@ xpc_setup_rsvd_page(void) | |||
172 | xpc_part_nasids = XPC_RP_PART_NASIDS(rp); | 174 | xpc_part_nasids = XPC_RP_PART_NASIDS(rp); |
173 | xpc_mach_nasids = XPC_RP_MACH_NASIDS(rp); | 175 | xpc_mach_nasids = XPC_RP_MACH_NASIDS(rp); |
174 | 176 | ||
175 | ret = xpc_setup_rsvd_page_sn(rp); | 177 | ret = xpc_arch_ops.setup_rsvd_page(rp); |
176 | if (ret != 0) | 178 | if (ret != 0) |
177 | return ret; | 179 | return ret; |
178 | 180 | ||
@@ -264,7 +266,7 @@ xpc_partition_disengaged(struct xpc_partition *part) | |||
264 | short partid = XPC_PARTID(part); | 266 | short partid = XPC_PARTID(part); |
265 | int disengaged; | 267 | int disengaged; |
266 | 268 | ||
267 | disengaged = !xpc_partition_engaged(partid); | 269 | disengaged = !xpc_arch_ops.partition_engaged(partid); |
268 | if (part->disengage_timeout) { | 270 | if (part->disengage_timeout) { |
269 | if (!disengaged) { | 271 | if (!disengaged) { |
270 | if (time_is_after_jiffies(part->disengage_timeout)) { | 272 | if (time_is_after_jiffies(part->disengage_timeout)) { |
@@ -280,7 +282,7 @@ xpc_partition_disengaged(struct xpc_partition *part) | |||
280 | dev_info(xpc_part, "deactivate request to remote " | 282 | dev_info(xpc_part, "deactivate request to remote " |
281 | "partition %d timed out\n", partid); | 283 | "partition %d timed out\n", partid); |
282 | xpc_disengage_timedout = 1; | 284 | xpc_disengage_timedout = 1; |
283 | xpc_assume_partition_disengaged(partid); | 285 | xpc_arch_ops.assume_partition_disengaged(partid); |
284 | disengaged = 1; | 286 | disengaged = 1; |
285 | } | 287 | } |
286 | part->disengage_timeout = 0; | 288 | part->disengage_timeout = 0; |
@@ -294,7 +296,7 @@ xpc_partition_disengaged(struct xpc_partition *part) | |||
294 | if (part->act_state != XPC_P_AS_INACTIVE) | 296 | if (part->act_state != XPC_P_AS_INACTIVE) |
295 | xpc_wakeup_channel_mgr(part); | 297 | xpc_wakeup_channel_mgr(part); |
296 | 298 | ||
297 | xpc_cancel_partition_deactivation_request(part); | 299 | xpc_arch_ops.cancel_partition_deactivation_request(part); |
298 | } | 300 | } |
299 | return disengaged; | 301 | return disengaged; |
300 | } | 302 | } |
@@ -339,7 +341,7 @@ xpc_deactivate_partition(const int line, struct xpc_partition *part, | |||
339 | spin_unlock_irqrestore(&part->act_lock, irq_flags); | 341 | spin_unlock_irqrestore(&part->act_lock, irq_flags); |
340 | if (reason == xpReactivating) { | 342 | if (reason == xpReactivating) { |
341 | /* we interrupt ourselves to reactivate partition */ | 343 | /* we interrupt ourselves to reactivate partition */ |
342 | xpc_request_partition_reactivation(part); | 344 | xpc_arch_ops.request_partition_reactivation(part); |
343 | } | 345 | } |
344 | return; | 346 | return; |
345 | } | 347 | } |
@@ -358,7 +360,7 @@ xpc_deactivate_partition(const int line, struct xpc_partition *part, | |||
358 | spin_unlock_irqrestore(&part->act_lock, irq_flags); | 360 | spin_unlock_irqrestore(&part->act_lock, irq_flags); |
359 | 361 | ||
360 | /* ask remote partition to deactivate with regard to us */ | 362 | /* ask remote partition to deactivate with regard to us */ |
361 | xpc_request_partition_deactivation(part); | 363 | xpc_arch_ops.request_partition_deactivation(part); |
362 | 364 | ||
363 | /* set a timelimit on the disengage phase of the deactivation request */ | 365 | /* set a timelimit on the disengage phase of the deactivation request */ |
364 | part->disengage_timeout = jiffies + (xpc_disengage_timelimit * HZ); | 366 | part->disengage_timeout = jiffies + (xpc_disengage_timelimit * HZ); |
@@ -496,7 +498,7 @@ xpc_discovery(void) | |||
496 | continue; | 498 | continue; |
497 | } | 499 | } |
498 | 500 | ||
499 | xpc_request_partition_activation(remote_rp, | 501 | xpc_arch_ops.request_partition_activation(remote_rp, |
500 | remote_rp_pa, nasid); | 502 | remote_rp_pa, nasid); |
501 | } | 503 | } |
502 | } | 504 | } |
diff --git a/drivers/misc/sgi-xp/xpc_sn2.c b/drivers/misc/sgi-xp/xpc_sn2.c index eaaa964942d..915a3b495da 100644 --- a/drivers/misc/sgi-xp/xpc_sn2.c +++ b/drivers/misc/sgi-xp/xpc_sn2.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. | 6 | * Copyright (c) 2008-2009 Silicon Graphics, Inc. All Rights Reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* | 9 | /* |
@@ -60,14 +60,14 @@ static struct xpc_vars_sn2 *xpc_vars_sn2; | |||
60 | static struct xpc_vars_part_sn2 *xpc_vars_part_sn2; | 60 | static struct xpc_vars_part_sn2 *xpc_vars_part_sn2; |
61 | 61 | ||
62 | static int | 62 | static int |
63 | xpc_setup_partitions_sn_sn2(void) | 63 | xpc_setup_partitions_sn2(void) |
64 | { | 64 | { |
65 | /* nothing needs to be done */ | 65 | /* nothing needs to be done */ |
66 | return 0; | 66 | return 0; |
67 | } | 67 | } |
68 | 68 | ||
69 | static void | 69 | static void |
70 | xpc_teardown_partitions_sn_sn2(void) | 70 | xpc_teardown_partitions_sn2(void) |
71 | { | 71 | { |
72 | /* nothing needs to be done */ | 72 | /* nothing needs to be done */ |
73 | } | 73 | } |
@@ -431,6 +431,13 @@ xpc_send_chctl_openreply_sn2(struct xpc_channel *ch, unsigned long *irq_flags) | |||
431 | } | 431 | } |
432 | 432 | ||
433 | static void | 433 | static void |
434 | xpc_send_chctl_opencomplete_sn2(struct xpc_channel *ch, | ||
435 | unsigned long *irq_flags) | ||
436 | { | ||
437 | XPC_SEND_NOTIFY_IRQ_SN2(ch, XPC_CHCTL_OPENCOMPLETE, irq_flags); | ||
438 | } | ||
439 | |||
440 | static void | ||
434 | xpc_send_chctl_msgrequest_sn2(struct xpc_channel *ch) | 441 | xpc_send_chctl_msgrequest_sn2(struct xpc_channel *ch) |
435 | { | 442 | { |
436 | XPC_SEND_NOTIFY_IRQ_SN2(ch, XPC_CHCTL_MSGREQUEST, NULL); | 443 | XPC_SEND_NOTIFY_IRQ_SN2(ch, XPC_CHCTL_MSGREQUEST, NULL); |
@@ -621,7 +628,7 @@ xpc_get_partition_rsvd_page_pa_sn2(void *buf, u64 *cookie, unsigned long *rp_pa, | |||
621 | 628 | ||
622 | 629 | ||
623 | static int | 630 | static int |
624 | xpc_setup_rsvd_page_sn_sn2(struct xpc_rsvd_page *rp) | 631 | xpc_setup_rsvd_page_sn2(struct xpc_rsvd_page *rp) |
625 | { | 632 | { |
626 | struct amo *amos_page; | 633 | struct amo *amos_page; |
627 | int i; | 634 | int i; |
@@ -629,7 +636,7 @@ xpc_setup_rsvd_page_sn_sn2(struct xpc_rsvd_page *rp) | |||
629 | 636 | ||
630 | xpc_vars_sn2 = XPC_RP_VARS(rp); | 637 | xpc_vars_sn2 = XPC_RP_VARS(rp); |
631 | 638 | ||
632 | rp->sn.vars_pa = xp_pa(xpc_vars_sn2); | 639 | rp->sn.sn2.vars_pa = xp_pa(xpc_vars_sn2); |
633 | 640 | ||
634 | /* vars_part array follows immediately after vars */ | 641 | /* vars_part array follows immediately after vars */ |
635 | xpc_vars_part_sn2 = (struct xpc_vars_part_sn2 *)((u8 *)XPC_RP_VARS(rp) + | 642 | xpc_vars_part_sn2 = (struct xpc_vars_part_sn2 *)((u8 *)XPC_RP_VARS(rp) + |
@@ -693,6 +700,33 @@ xpc_setup_rsvd_page_sn_sn2(struct xpc_rsvd_page *rp) | |||
693 | return 0; | 700 | return 0; |
694 | } | 701 | } |
695 | 702 | ||
703 | static int | ||
704 | xpc_hb_allowed_sn2(short partid, void *heartbeating_to_mask) | ||
705 | { | ||
706 | return test_bit(partid, heartbeating_to_mask); | ||
707 | } | ||
708 | |||
709 | static void | ||
710 | xpc_allow_hb_sn2(short partid) | ||
711 | { | ||
712 | DBUG_ON(xpc_vars_sn2 == NULL); | ||
713 | set_bit(partid, xpc_vars_sn2->heartbeating_to_mask); | ||
714 | } | ||
715 | |||
716 | static void | ||
717 | xpc_disallow_hb_sn2(short partid) | ||
718 | { | ||
719 | DBUG_ON(xpc_vars_sn2 == NULL); | ||
720 | clear_bit(partid, xpc_vars_sn2->heartbeating_to_mask); | ||
721 | } | ||
722 | |||
723 | static void | ||
724 | xpc_disallow_all_hbs_sn2(void) | ||
725 | { | ||
726 | DBUG_ON(xpc_vars_sn2 == NULL); | ||
727 | bitmap_zero(xpc_vars_sn2->heartbeating_to_mask, xp_max_npartitions); | ||
728 | } | ||
729 | |||
696 | static void | 730 | static void |
697 | xpc_increment_heartbeat_sn2(void) | 731 | xpc_increment_heartbeat_sn2(void) |
698 | { | 732 | { |
@@ -719,7 +753,6 @@ xpc_heartbeat_init_sn2(void) | |||
719 | DBUG_ON(xpc_vars_sn2 == NULL); | 753 | DBUG_ON(xpc_vars_sn2 == NULL); |
720 | 754 | ||
721 | bitmap_zero(xpc_vars_sn2->heartbeating_to_mask, XP_MAX_NPARTITIONS_SN2); | 755 | bitmap_zero(xpc_vars_sn2->heartbeating_to_mask, XP_MAX_NPARTITIONS_SN2); |
722 | xpc_heartbeating_to_mask = &xpc_vars_sn2->heartbeating_to_mask[0]; | ||
723 | xpc_online_heartbeat_sn2(); | 756 | xpc_online_heartbeat_sn2(); |
724 | } | 757 | } |
725 | 758 | ||
@@ -751,9 +784,9 @@ xpc_get_remote_heartbeat_sn2(struct xpc_partition *part) | |||
751 | remote_vars->heartbeating_to_mask[0]); | 784 | remote_vars->heartbeating_to_mask[0]); |
752 | 785 | ||
753 | if ((remote_vars->heartbeat == part->last_heartbeat && | 786 | if ((remote_vars->heartbeat == part->last_heartbeat && |
754 | remote_vars->heartbeat_offline == 0) || | 787 | !remote_vars->heartbeat_offline) || |
755 | !xpc_hb_allowed(sn_partition_id, | 788 | !xpc_hb_allowed_sn2(sn_partition_id, |
756 | &remote_vars->heartbeating_to_mask)) { | 789 | remote_vars->heartbeating_to_mask)) { |
757 | ret = xpNoHeartbeat; | 790 | ret = xpNoHeartbeat; |
758 | } else { | 791 | } else { |
759 | part->last_heartbeat = remote_vars->heartbeat; | 792 | part->last_heartbeat = remote_vars->heartbeat; |
@@ -972,7 +1005,7 @@ xpc_identify_activate_IRQ_req_sn2(int nasid) | |||
972 | return; | 1005 | return; |
973 | } | 1006 | } |
974 | 1007 | ||
975 | remote_vars_pa = remote_rp->sn.vars_pa; | 1008 | remote_vars_pa = remote_rp->sn.sn2.vars_pa; |
976 | remote_rp_version = remote_rp->version; | 1009 | remote_rp_version = remote_rp->version; |
977 | remote_rp_ts_jiffies = remote_rp->ts_jiffies; | 1010 | remote_rp_ts_jiffies = remote_rp->ts_jiffies; |
978 | 1011 | ||
@@ -1129,7 +1162,7 @@ xpc_process_activate_IRQ_rcvd_sn2(void) | |||
1129 | * Setup the channel structures that are sn2 specific. | 1162 | * Setup the channel structures that are sn2 specific. |
1130 | */ | 1163 | */ |
1131 | static enum xp_retval | 1164 | static enum xp_retval |
1132 | xpc_setup_ch_structures_sn_sn2(struct xpc_partition *part) | 1165 | xpc_setup_ch_structures_sn2(struct xpc_partition *part) |
1133 | { | 1166 | { |
1134 | struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2; | 1167 | struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2; |
1135 | struct xpc_channel_sn2 *ch_sn2; | 1168 | struct xpc_channel_sn2 *ch_sn2; |
@@ -1251,7 +1284,7 @@ out_1: | |||
1251 | * Teardown the channel structures that are sn2 specific. | 1284 | * Teardown the channel structures that are sn2 specific. |
1252 | */ | 1285 | */ |
1253 | static void | 1286 | static void |
1254 | xpc_teardown_ch_structures_sn_sn2(struct xpc_partition *part) | 1287 | xpc_teardown_ch_structures_sn2(struct xpc_partition *part) |
1255 | { | 1288 | { |
1256 | struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2; | 1289 | struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2; |
1257 | short partid = XPC_PARTID(part); | 1290 | short partid = XPC_PARTID(part); |
@@ -2315,61 +2348,70 @@ xpc_received_payload_sn2(struct xpc_channel *ch, void *payload) | |||
2315 | xpc_acknowledge_msgs_sn2(ch, get, msg->flags); | 2348 | xpc_acknowledge_msgs_sn2(ch, get, msg->flags); |
2316 | } | 2349 | } |
2317 | 2350 | ||
2351 | static struct xpc_arch_operations xpc_arch_ops_sn2 = { | ||
2352 | .setup_partitions = xpc_setup_partitions_sn2, | ||
2353 | .teardown_partitions = xpc_teardown_partitions_sn2, | ||
2354 | .process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_sn2, | ||
2355 | .get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_sn2, | ||
2356 | .setup_rsvd_page = xpc_setup_rsvd_page_sn2, | ||
2357 | |||
2358 | .allow_hb = xpc_allow_hb_sn2, | ||
2359 | .disallow_hb = xpc_disallow_hb_sn2, | ||
2360 | .disallow_all_hbs = xpc_disallow_all_hbs_sn2, | ||
2361 | .increment_heartbeat = xpc_increment_heartbeat_sn2, | ||
2362 | .offline_heartbeat = xpc_offline_heartbeat_sn2, | ||
2363 | .online_heartbeat = xpc_online_heartbeat_sn2, | ||
2364 | .heartbeat_init = xpc_heartbeat_init_sn2, | ||
2365 | .heartbeat_exit = xpc_heartbeat_exit_sn2, | ||
2366 | .get_remote_heartbeat = xpc_get_remote_heartbeat_sn2, | ||
2367 | |||
2368 | .request_partition_activation = | ||
2369 | xpc_request_partition_activation_sn2, | ||
2370 | .request_partition_reactivation = | ||
2371 | xpc_request_partition_reactivation_sn2, | ||
2372 | .request_partition_deactivation = | ||
2373 | xpc_request_partition_deactivation_sn2, | ||
2374 | .cancel_partition_deactivation_request = | ||
2375 | xpc_cancel_partition_deactivation_request_sn2, | ||
2376 | |||
2377 | .setup_ch_structures = xpc_setup_ch_structures_sn2, | ||
2378 | .teardown_ch_structures = xpc_teardown_ch_structures_sn2, | ||
2379 | |||
2380 | .make_first_contact = xpc_make_first_contact_sn2, | ||
2381 | |||
2382 | .get_chctl_all_flags = xpc_get_chctl_all_flags_sn2, | ||
2383 | .send_chctl_closerequest = xpc_send_chctl_closerequest_sn2, | ||
2384 | .send_chctl_closereply = xpc_send_chctl_closereply_sn2, | ||
2385 | .send_chctl_openrequest = xpc_send_chctl_openrequest_sn2, | ||
2386 | .send_chctl_openreply = xpc_send_chctl_openreply_sn2, | ||
2387 | .send_chctl_opencomplete = xpc_send_chctl_opencomplete_sn2, | ||
2388 | .process_msg_chctl_flags = xpc_process_msg_chctl_flags_sn2, | ||
2389 | |||
2390 | .save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_sn2, | ||
2391 | |||
2392 | .setup_msg_structures = xpc_setup_msg_structures_sn2, | ||
2393 | .teardown_msg_structures = xpc_teardown_msg_structures_sn2, | ||
2394 | |||
2395 | .indicate_partition_engaged = xpc_indicate_partition_engaged_sn2, | ||
2396 | .indicate_partition_disengaged = xpc_indicate_partition_disengaged_sn2, | ||
2397 | .partition_engaged = xpc_partition_engaged_sn2, | ||
2398 | .any_partition_engaged = xpc_any_partition_engaged_sn2, | ||
2399 | .assume_partition_disengaged = xpc_assume_partition_disengaged_sn2, | ||
2400 | |||
2401 | .n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_sn2, | ||
2402 | .send_payload = xpc_send_payload_sn2, | ||
2403 | .get_deliverable_payload = xpc_get_deliverable_payload_sn2, | ||
2404 | .received_payload = xpc_received_payload_sn2, | ||
2405 | .notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_sn2, | ||
2406 | }; | ||
2407 | |||
2318 | int | 2408 | int |
2319 | xpc_init_sn2(void) | 2409 | xpc_init_sn2(void) |
2320 | { | 2410 | { |
2321 | int ret; | 2411 | int ret; |
2322 | size_t buf_size; | 2412 | size_t buf_size; |
2323 | 2413 | ||
2324 | xpc_setup_partitions_sn = xpc_setup_partitions_sn_sn2; | 2414 | xpc_arch_ops = xpc_arch_ops_sn2; |
2325 | xpc_teardown_partitions_sn = xpc_teardown_partitions_sn_sn2; | ||
2326 | xpc_get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_sn2; | ||
2327 | xpc_setup_rsvd_page_sn = xpc_setup_rsvd_page_sn_sn2; | ||
2328 | xpc_increment_heartbeat = xpc_increment_heartbeat_sn2; | ||
2329 | xpc_offline_heartbeat = xpc_offline_heartbeat_sn2; | ||
2330 | xpc_online_heartbeat = xpc_online_heartbeat_sn2; | ||
2331 | xpc_heartbeat_init = xpc_heartbeat_init_sn2; | ||
2332 | xpc_heartbeat_exit = xpc_heartbeat_exit_sn2; | ||
2333 | xpc_get_remote_heartbeat = xpc_get_remote_heartbeat_sn2; | ||
2334 | |||
2335 | xpc_request_partition_activation = xpc_request_partition_activation_sn2; | ||
2336 | xpc_request_partition_reactivation = | ||
2337 | xpc_request_partition_reactivation_sn2; | ||
2338 | xpc_request_partition_deactivation = | ||
2339 | xpc_request_partition_deactivation_sn2; | ||
2340 | xpc_cancel_partition_deactivation_request = | ||
2341 | xpc_cancel_partition_deactivation_request_sn2; | ||
2342 | |||
2343 | xpc_process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_sn2; | ||
2344 | xpc_setup_ch_structures_sn = xpc_setup_ch_structures_sn_sn2; | ||
2345 | xpc_teardown_ch_structures_sn = xpc_teardown_ch_structures_sn_sn2; | ||
2346 | xpc_make_first_contact = xpc_make_first_contact_sn2; | ||
2347 | |||
2348 | xpc_get_chctl_all_flags = xpc_get_chctl_all_flags_sn2; | ||
2349 | xpc_send_chctl_closerequest = xpc_send_chctl_closerequest_sn2; | ||
2350 | xpc_send_chctl_closereply = xpc_send_chctl_closereply_sn2; | ||
2351 | xpc_send_chctl_openrequest = xpc_send_chctl_openrequest_sn2; | ||
2352 | xpc_send_chctl_openreply = xpc_send_chctl_openreply_sn2; | ||
2353 | |||
2354 | xpc_save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_sn2; | ||
2355 | |||
2356 | xpc_setup_msg_structures = xpc_setup_msg_structures_sn2; | ||
2357 | xpc_teardown_msg_structures = xpc_teardown_msg_structures_sn2; | ||
2358 | |||
2359 | xpc_notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_sn2; | ||
2360 | xpc_process_msg_chctl_flags = xpc_process_msg_chctl_flags_sn2; | ||
2361 | xpc_n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_sn2; | ||
2362 | xpc_get_deliverable_payload = xpc_get_deliverable_payload_sn2; | ||
2363 | |||
2364 | xpc_indicate_partition_engaged = xpc_indicate_partition_engaged_sn2; | ||
2365 | xpc_indicate_partition_disengaged = | ||
2366 | xpc_indicate_partition_disengaged_sn2; | ||
2367 | xpc_partition_engaged = xpc_partition_engaged_sn2; | ||
2368 | xpc_any_partition_engaged = xpc_any_partition_engaged_sn2; | ||
2369 | xpc_assume_partition_disengaged = xpc_assume_partition_disengaged_sn2; | ||
2370 | |||
2371 | xpc_send_payload = xpc_send_payload_sn2; | ||
2372 | xpc_received_payload = xpc_received_payload_sn2; | ||
2373 | 2415 | ||
2374 | if (offsetof(struct xpc_msg_sn2, payload) > XPC_MSG_HDR_MAX_SIZE) { | 2416 | if (offsetof(struct xpc_msg_sn2, payload) > XPC_MSG_HDR_MAX_SIZE) { |
2375 | dev_err(xpc_part, "header portion of struct xpc_msg_sn2 is " | 2417 | dev_err(xpc_part, "header portion of struct xpc_msg_sn2 is " |
diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c index f7fff4727ed..9172fcdee4e 100644 --- a/drivers/misc/sgi-xp/xpc_uv.c +++ b/drivers/misc/sgi-xp/xpc_uv.c | |||
@@ -46,8 +46,7 @@ struct uv_IO_APIC_route_entry { | |||
46 | }; | 46 | }; |
47 | #endif | 47 | #endif |
48 | 48 | ||
49 | static atomic64_t xpc_heartbeat_uv; | 49 | static struct xpc_heartbeat_uv *xpc_heartbeat_uv; |
50 | static DECLARE_BITMAP(xpc_heartbeating_to_mask_uv, XP_MAX_NPARTITIONS_UV); | ||
51 | 50 | ||
52 | #define XPC_ACTIVATE_MSG_SIZE_UV (1 * GRU_CACHE_LINE_BYTES) | 51 | #define XPC_ACTIVATE_MSG_SIZE_UV (1 * GRU_CACHE_LINE_BYTES) |
53 | #define XPC_ACTIVATE_MQ_SIZE_UV (4 * XP_MAX_NPARTITIONS_UV * \ | 52 | #define XPC_ACTIVATE_MQ_SIZE_UV (4 * XP_MAX_NPARTITIONS_UV * \ |
@@ -63,7 +62,7 @@ static struct xpc_gru_mq_uv *xpc_activate_mq_uv; | |||
63 | static struct xpc_gru_mq_uv *xpc_notify_mq_uv; | 62 | static struct xpc_gru_mq_uv *xpc_notify_mq_uv; |
64 | 63 | ||
65 | static int | 64 | static int |
66 | xpc_setup_partitions_sn_uv(void) | 65 | xpc_setup_partitions_uv(void) |
67 | { | 66 | { |
68 | short partid; | 67 | short partid; |
69 | struct xpc_partition_uv *part_uv; | 68 | struct xpc_partition_uv *part_uv; |
@@ -79,7 +78,7 @@ xpc_setup_partitions_sn_uv(void) | |||
79 | } | 78 | } |
80 | 79 | ||
81 | static void | 80 | static void |
82 | xpc_teardown_partitions_sn_uv(void) | 81 | xpc_teardown_partitions_uv(void) |
83 | { | 82 | { |
84 | short partid; | 83 | short partid; |
85 | struct xpc_partition_uv *part_uv; | 84 | struct xpc_partition_uv *part_uv; |
@@ -423,41 +422,6 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, | |||
423 | /* syncing of remote_act_state was just done above */ | 422 | /* syncing of remote_act_state was just done above */ |
424 | break; | 423 | break; |
425 | 424 | ||
426 | case XPC_ACTIVATE_MQ_MSG_INC_HEARTBEAT_UV: { | ||
427 | struct xpc_activate_mq_msg_heartbeat_req_uv *msg; | ||
428 | |||
429 | msg = container_of(msg_hdr, | ||
430 | struct xpc_activate_mq_msg_heartbeat_req_uv, | ||
431 | hdr); | ||
432 | part_uv->heartbeat = msg->heartbeat; | ||
433 | break; | ||
434 | } | ||
435 | case XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV: { | ||
436 | struct xpc_activate_mq_msg_heartbeat_req_uv *msg; | ||
437 | |||
438 | msg = container_of(msg_hdr, | ||
439 | struct xpc_activate_mq_msg_heartbeat_req_uv, | ||
440 | hdr); | ||
441 | part_uv->heartbeat = msg->heartbeat; | ||
442 | |||
443 | spin_lock_irqsave(&part_uv->flags_lock, irq_flags); | ||
444 | part_uv->flags |= XPC_P_HEARTBEAT_OFFLINE_UV; | ||
445 | spin_unlock_irqrestore(&part_uv->flags_lock, irq_flags); | ||
446 | break; | ||
447 | } | ||
448 | case XPC_ACTIVATE_MQ_MSG_ONLINE_HEARTBEAT_UV: { | ||
449 | struct xpc_activate_mq_msg_heartbeat_req_uv *msg; | ||
450 | |||
451 | msg = container_of(msg_hdr, | ||
452 | struct xpc_activate_mq_msg_heartbeat_req_uv, | ||
453 | hdr); | ||
454 | part_uv->heartbeat = msg->heartbeat; | ||
455 | |||
456 | spin_lock_irqsave(&part_uv->flags_lock, irq_flags); | ||
457 | part_uv->flags &= ~XPC_P_HEARTBEAT_OFFLINE_UV; | ||
458 | spin_unlock_irqrestore(&part_uv->flags_lock, irq_flags); | ||
459 | break; | ||
460 | } | ||
461 | case XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV: { | 425 | case XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV: { |
462 | struct xpc_activate_mq_msg_activate_req_uv *msg; | 426 | struct xpc_activate_mq_msg_activate_req_uv *msg; |
463 | 427 | ||
@@ -475,6 +439,7 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, | |||
475 | part_uv->act_state_req = XPC_P_ASR_ACTIVATE_UV; | 439 | part_uv->act_state_req = XPC_P_ASR_ACTIVATE_UV; |
476 | part->remote_rp_pa = msg->rp_gpa; /* !!! _pa is _gpa */ | 440 | part->remote_rp_pa = msg->rp_gpa; /* !!! _pa is _gpa */ |
477 | part->remote_rp_ts_jiffies = msg_hdr->rp_ts_jiffies; | 441 | part->remote_rp_ts_jiffies = msg_hdr->rp_ts_jiffies; |
442 | part_uv->heartbeat_gpa = msg->heartbeat_gpa; | ||
478 | 443 | ||
479 | if (msg->activate_gru_mq_desc_gpa != | 444 | if (msg->activate_gru_mq_desc_gpa != |
480 | part_uv->activate_gru_mq_desc_gpa) { | 445 | part_uv->activate_gru_mq_desc_gpa) { |
@@ -569,6 +534,17 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, | |||
569 | xpc_wakeup_channel_mgr(part); | 534 | xpc_wakeup_channel_mgr(part); |
570 | break; | 535 | break; |
571 | } | 536 | } |
537 | case XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV: { | ||
538 | struct xpc_activate_mq_msg_chctl_opencomplete_uv *msg; | ||
539 | |||
540 | msg = container_of(msg_hdr, struct | ||
541 | xpc_activate_mq_msg_chctl_opencomplete_uv, hdr); | ||
542 | spin_lock_irqsave(&part->chctl_lock, irq_flags); | ||
543 | part->chctl.flags[msg->ch_number] |= XPC_CHCTL_OPENCOMPLETE; | ||
544 | spin_unlock_irqrestore(&part->chctl_lock, irq_flags); | ||
545 | |||
546 | xpc_wakeup_channel_mgr(part); | ||
547 | } | ||
572 | case XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV: | 548 | case XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV: |
573 | spin_lock_irqsave(&part_uv->flags_lock, irq_flags); | 549 | spin_lock_irqsave(&part_uv->flags_lock, irq_flags); |
574 | part_uv->flags |= XPC_P_ENGAGED_UV; | 550 | part_uv->flags |= XPC_P_ENGAGED_UV; |
@@ -759,7 +735,7 @@ xpc_send_local_activate_IRQ_uv(struct xpc_partition *part, int act_state_req) | |||
759 | 735 | ||
760 | /* | 736 | /* |
761 | * !!! Make our side think that the remote partition sent an activate | 737 | * !!! Make our side think that the remote partition sent an activate |
762 | * !!! message our way by doing what the activate IRQ handler would | 738 | * !!! mq message our way by doing what the activate IRQ handler would |
763 | * !!! do had one really been sent. | 739 | * !!! do had one really been sent. |
764 | */ | 740 | */ |
765 | 741 | ||
@@ -806,90 +782,82 @@ xpc_get_partition_rsvd_page_pa_uv(void *buf, u64 *cookie, unsigned long *rp_pa, | |||
806 | } | 782 | } |
807 | 783 | ||
808 | static int | 784 | static int |
809 | xpc_setup_rsvd_page_sn_uv(struct xpc_rsvd_page *rp) | 785 | xpc_setup_rsvd_page_uv(struct xpc_rsvd_page *rp) |
810 | { | 786 | { |
811 | rp->sn.activate_gru_mq_desc_gpa = | 787 | xpc_heartbeat_uv = |
788 | &xpc_partitions[sn_partition_id].sn.uv.cached_heartbeat; | ||
789 | rp->sn.uv.heartbeat_gpa = uv_gpa(xpc_heartbeat_uv); | ||
790 | rp->sn.uv.activate_gru_mq_desc_gpa = | ||
812 | uv_gpa(xpc_activate_mq_uv->gru_mq_desc); | 791 | uv_gpa(xpc_activate_mq_uv->gru_mq_desc); |
813 | return 0; | 792 | return 0; |
814 | } | 793 | } |
815 | 794 | ||
816 | static void | 795 | static void |
817 | xpc_send_heartbeat_uv(int msg_type) | 796 | xpc_allow_hb_uv(short partid) |
818 | { | 797 | { |
819 | short partid; | 798 | } |
820 | struct xpc_partition *part; | ||
821 | struct xpc_activate_mq_msg_heartbeat_req_uv msg; | ||
822 | |||
823 | /* | ||
824 | * !!! On uv we're broadcasting a heartbeat message every 5 seconds. | ||
825 | * !!! Whereas on sn2 we're bte_copy'ng the heartbeat info every 20 | ||
826 | * !!! seconds. This is an increase in numalink traffic. | ||
827 | * ??? Is this good? | ||
828 | */ | ||
829 | |||
830 | msg.heartbeat = atomic64_inc_return(&xpc_heartbeat_uv); | ||
831 | |||
832 | partid = find_first_bit(xpc_heartbeating_to_mask_uv, | ||
833 | XP_MAX_NPARTITIONS_UV); | ||
834 | |||
835 | while (partid < XP_MAX_NPARTITIONS_UV) { | ||
836 | part = &xpc_partitions[partid]; | ||
837 | 799 | ||
838 | xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg), | 800 | static void |
839 | msg_type); | 801 | xpc_disallow_hb_uv(short partid) |
802 | { | ||
803 | } | ||
840 | 804 | ||
841 | partid = find_next_bit(xpc_heartbeating_to_mask_uv, | 805 | static void |
842 | XP_MAX_NPARTITIONS_UV, partid + 1); | 806 | xpc_disallow_all_hbs_uv(void) |
843 | } | 807 | { |
844 | } | 808 | } |
845 | 809 | ||
846 | static void | 810 | static void |
847 | xpc_increment_heartbeat_uv(void) | 811 | xpc_increment_heartbeat_uv(void) |
848 | { | 812 | { |
849 | xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_INC_HEARTBEAT_UV); | 813 | xpc_heartbeat_uv->value++; |
850 | } | 814 | } |
851 | 815 | ||
852 | static void | 816 | static void |
853 | xpc_offline_heartbeat_uv(void) | 817 | xpc_offline_heartbeat_uv(void) |
854 | { | 818 | { |
855 | xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV); | 819 | xpc_increment_heartbeat_uv(); |
820 | xpc_heartbeat_uv->offline = 1; | ||
856 | } | 821 | } |
857 | 822 | ||
858 | static void | 823 | static void |
859 | xpc_online_heartbeat_uv(void) | 824 | xpc_online_heartbeat_uv(void) |
860 | { | 825 | { |
861 | xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_ONLINE_HEARTBEAT_UV); | 826 | xpc_increment_heartbeat_uv(); |
827 | xpc_heartbeat_uv->offline = 0; | ||
862 | } | 828 | } |
863 | 829 | ||
864 | static void | 830 | static void |
865 | xpc_heartbeat_init_uv(void) | 831 | xpc_heartbeat_init_uv(void) |
866 | { | 832 | { |
867 | atomic64_set(&xpc_heartbeat_uv, 0); | 833 | xpc_heartbeat_uv->value = 1; |
868 | bitmap_zero(xpc_heartbeating_to_mask_uv, XP_MAX_NPARTITIONS_UV); | 834 | xpc_heartbeat_uv->offline = 0; |
869 | xpc_heartbeating_to_mask = &xpc_heartbeating_to_mask_uv[0]; | ||
870 | } | 835 | } |
871 | 836 | ||
872 | static void | 837 | static void |
873 | xpc_heartbeat_exit_uv(void) | 838 | xpc_heartbeat_exit_uv(void) |
874 | { | 839 | { |
875 | xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV); | 840 | xpc_offline_heartbeat_uv(); |
876 | } | 841 | } |
877 | 842 | ||
878 | static enum xp_retval | 843 | static enum xp_retval |
879 | xpc_get_remote_heartbeat_uv(struct xpc_partition *part) | 844 | xpc_get_remote_heartbeat_uv(struct xpc_partition *part) |
880 | { | 845 | { |
881 | struct xpc_partition_uv *part_uv = &part->sn.uv; | 846 | struct xpc_partition_uv *part_uv = &part->sn.uv; |
882 | enum xp_retval ret = xpNoHeartbeat; | 847 | enum xp_retval ret; |
883 | 848 | ||
884 | if (part_uv->remote_act_state != XPC_P_AS_INACTIVE && | 849 | ret = xp_remote_memcpy(uv_gpa(&part_uv->cached_heartbeat), |
885 | part_uv->remote_act_state != XPC_P_AS_DEACTIVATING) { | 850 | part_uv->heartbeat_gpa, |
851 | sizeof(struct xpc_heartbeat_uv)); | ||
852 | if (ret != xpSuccess) | ||
853 | return ret; | ||
886 | 854 | ||
887 | if (part_uv->heartbeat != part->last_heartbeat || | 855 | if (part_uv->cached_heartbeat.value == part->last_heartbeat && |
888 | (part_uv->flags & XPC_P_HEARTBEAT_OFFLINE_UV)) { | 856 | !part_uv->cached_heartbeat.offline) { |
889 | 857 | ||
890 | part->last_heartbeat = part_uv->heartbeat; | 858 | ret = xpNoHeartbeat; |
891 | ret = xpSuccess; | 859 | } else { |
892 | } | 860 | part->last_heartbeat = part_uv->cached_heartbeat.value; |
893 | } | 861 | } |
894 | return ret; | 862 | return ret; |
895 | } | 863 | } |
@@ -904,8 +872,9 @@ xpc_request_partition_activation_uv(struct xpc_rsvd_page *remote_rp, | |||
904 | 872 | ||
905 | part->remote_rp_pa = remote_rp_gpa; /* !!! _pa here is really _gpa */ | 873 | part->remote_rp_pa = remote_rp_gpa; /* !!! _pa here is really _gpa */ |
906 | part->remote_rp_ts_jiffies = remote_rp->ts_jiffies; | 874 | part->remote_rp_ts_jiffies = remote_rp->ts_jiffies; |
875 | part->sn.uv.heartbeat_gpa = remote_rp->sn.uv.heartbeat_gpa; | ||
907 | part->sn.uv.activate_gru_mq_desc_gpa = | 876 | part->sn.uv.activate_gru_mq_desc_gpa = |
908 | remote_rp->sn.activate_gru_mq_desc_gpa; | 877 | remote_rp->sn.uv.activate_gru_mq_desc_gpa; |
909 | 878 | ||
910 | /* | 879 | /* |
911 | * ??? Is it a good idea to make this conditional on what is | 880 | * ??? Is it a good idea to make this conditional on what is |
@@ -913,8 +882,9 @@ xpc_request_partition_activation_uv(struct xpc_rsvd_page *remote_rp, | |||
913 | */ | 882 | */ |
914 | if (part->sn.uv.remote_act_state == XPC_P_AS_INACTIVE) { | 883 | if (part->sn.uv.remote_act_state == XPC_P_AS_INACTIVE) { |
915 | msg.rp_gpa = uv_gpa(xpc_rsvd_page); | 884 | msg.rp_gpa = uv_gpa(xpc_rsvd_page); |
885 | msg.heartbeat_gpa = xpc_rsvd_page->sn.uv.heartbeat_gpa; | ||
916 | msg.activate_gru_mq_desc_gpa = | 886 | msg.activate_gru_mq_desc_gpa = |
917 | xpc_rsvd_page->sn.activate_gru_mq_desc_gpa; | 887 | xpc_rsvd_page->sn.uv.activate_gru_mq_desc_gpa; |
918 | xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg), | 888 | xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg), |
919 | XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV); | 889 | XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV); |
920 | } | 890 | } |
@@ -1010,7 +980,7 @@ xpc_n_of_fifo_entries_uv(struct xpc_fifo_head_uv *head) | |||
1010 | * Setup the channel structures that are uv specific. | 980 | * Setup the channel structures that are uv specific. |
1011 | */ | 981 | */ |
1012 | static enum xp_retval | 982 | static enum xp_retval |
1013 | xpc_setup_ch_structures_sn_uv(struct xpc_partition *part) | 983 | xpc_setup_ch_structures_uv(struct xpc_partition *part) |
1014 | { | 984 | { |
1015 | struct xpc_channel_uv *ch_uv; | 985 | struct xpc_channel_uv *ch_uv; |
1016 | int ch_number; | 986 | int ch_number; |
@@ -1029,7 +999,7 @@ xpc_setup_ch_structures_sn_uv(struct xpc_partition *part) | |||
1029 | * Teardown the channel structures that are uv specific. | 999 | * Teardown the channel structures that are uv specific. |
1030 | */ | 1000 | */ |
1031 | static void | 1001 | static void |
1032 | xpc_teardown_ch_structures_sn_uv(struct xpc_partition *part) | 1002 | xpc_teardown_ch_structures_uv(struct xpc_partition *part) |
1033 | { | 1003 | { |
1034 | /* nothing needs to be done */ | 1004 | /* nothing needs to be done */ |
1035 | return; | 1005 | return; |
@@ -1243,6 +1213,16 @@ xpc_send_chctl_openreply_uv(struct xpc_channel *ch, unsigned long *irq_flags) | |||
1243 | } | 1213 | } |
1244 | 1214 | ||
1245 | static void | 1215 | static void |
1216 | xpc_send_chctl_opencomplete_uv(struct xpc_channel *ch, unsigned long *irq_flags) | ||
1217 | { | ||
1218 | struct xpc_activate_mq_msg_chctl_opencomplete_uv msg; | ||
1219 | |||
1220 | msg.ch_number = ch->number; | ||
1221 | xpc_send_activate_IRQ_ch_uv(ch, irq_flags, &msg, sizeof(msg), | ||
1222 | XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV); | ||
1223 | } | ||
1224 | |||
1225 | static void | ||
1246 | xpc_send_chctl_local_msgrequest_uv(struct xpc_partition *part, int ch_number) | 1226 | xpc_send_chctl_local_msgrequest_uv(struct xpc_partition *part, int ch_number) |
1247 | { | 1227 | { |
1248 | unsigned long irq_flags; | 1228 | unsigned long irq_flags; |
@@ -1669,58 +1649,67 @@ xpc_received_payload_uv(struct xpc_channel *ch, void *payload) | |||
1669 | msg->hdr.msg_slot_number += ch->remote_nentries; | 1649 | msg->hdr.msg_slot_number += ch->remote_nentries; |
1670 | } | 1650 | } |
1671 | 1651 | ||
1652 | static struct xpc_arch_operations xpc_arch_ops_uv = { | ||
1653 | .setup_partitions = xpc_setup_partitions_uv, | ||
1654 | .teardown_partitions = xpc_teardown_partitions_uv, | ||
1655 | .process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_uv, | ||
1656 | .get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_uv, | ||
1657 | .setup_rsvd_page = xpc_setup_rsvd_page_uv, | ||
1658 | |||
1659 | .allow_hb = xpc_allow_hb_uv, | ||
1660 | .disallow_hb = xpc_disallow_hb_uv, | ||
1661 | .disallow_all_hbs = xpc_disallow_all_hbs_uv, | ||
1662 | .increment_heartbeat = xpc_increment_heartbeat_uv, | ||
1663 | .offline_heartbeat = xpc_offline_heartbeat_uv, | ||
1664 | .online_heartbeat = xpc_online_heartbeat_uv, | ||
1665 | .heartbeat_init = xpc_heartbeat_init_uv, | ||
1666 | .heartbeat_exit = xpc_heartbeat_exit_uv, | ||
1667 | .get_remote_heartbeat = xpc_get_remote_heartbeat_uv, | ||
1668 | |||
1669 | .request_partition_activation = | ||
1670 | xpc_request_partition_activation_uv, | ||
1671 | .request_partition_reactivation = | ||
1672 | xpc_request_partition_reactivation_uv, | ||
1673 | .request_partition_deactivation = | ||
1674 | xpc_request_partition_deactivation_uv, | ||
1675 | .cancel_partition_deactivation_request = | ||
1676 | xpc_cancel_partition_deactivation_request_uv, | ||
1677 | |||
1678 | .setup_ch_structures = xpc_setup_ch_structures_uv, | ||
1679 | .teardown_ch_structures = xpc_teardown_ch_structures_uv, | ||
1680 | |||
1681 | .make_first_contact = xpc_make_first_contact_uv, | ||
1682 | |||
1683 | .get_chctl_all_flags = xpc_get_chctl_all_flags_uv, | ||
1684 | .send_chctl_closerequest = xpc_send_chctl_closerequest_uv, | ||
1685 | .send_chctl_closereply = xpc_send_chctl_closereply_uv, | ||
1686 | .send_chctl_openrequest = xpc_send_chctl_openrequest_uv, | ||
1687 | .send_chctl_openreply = xpc_send_chctl_openreply_uv, | ||
1688 | .send_chctl_opencomplete = xpc_send_chctl_opencomplete_uv, | ||
1689 | .process_msg_chctl_flags = xpc_process_msg_chctl_flags_uv, | ||
1690 | |||
1691 | .save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_uv, | ||
1692 | |||
1693 | .setup_msg_structures = xpc_setup_msg_structures_uv, | ||
1694 | .teardown_msg_structures = xpc_teardown_msg_structures_uv, | ||
1695 | |||
1696 | .indicate_partition_engaged = xpc_indicate_partition_engaged_uv, | ||
1697 | .indicate_partition_disengaged = xpc_indicate_partition_disengaged_uv, | ||
1698 | .assume_partition_disengaged = xpc_assume_partition_disengaged_uv, | ||
1699 | .partition_engaged = xpc_partition_engaged_uv, | ||
1700 | .any_partition_engaged = xpc_any_partition_engaged_uv, | ||
1701 | |||
1702 | .n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_uv, | ||
1703 | .send_payload = xpc_send_payload_uv, | ||
1704 | .get_deliverable_payload = xpc_get_deliverable_payload_uv, | ||
1705 | .received_payload = xpc_received_payload_uv, | ||
1706 | .notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_uv, | ||
1707 | }; | ||
1708 | |||
1672 | int | 1709 | int |
1673 | xpc_init_uv(void) | 1710 | xpc_init_uv(void) |
1674 | { | 1711 | { |
1675 | xpc_setup_partitions_sn = xpc_setup_partitions_sn_uv; | 1712 | xpc_arch_ops = xpc_arch_ops_uv; |
1676 | xpc_teardown_partitions_sn = xpc_teardown_partitions_sn_uv; | ||
1677 | xpc_process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_uv; | ||
1678 | xpc_get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_uv; | ||
1679 | xpc_setup_rsvd_page_sn = xpc_setup_rsvd_page_sn_uv; | ||
1680 | xpc_increment_heartbeat = xpc_increment_heartbeat_uv; | ||
1681 | xpc_offline_heartbeat = xpc_offline_heartbeat_uv; | ||
1682 | xpc_online_heartbeat = xpc_online_heartbeat_uv; | ||
1683 | xpc_heartbeat_init = xpc_heartbeat_init_uv; | ||
1684 | xpc_heartbeat_exit = xpc_heartbeat_exit_uv; | ||
1685 | xpc_get_remote_heartbeat = xpc_get_remote_heartbeat_uv; | ||
1686 | |||
1687 | xpc_request_partition_activation = xpc_request_partition_activation_uv; | ||
1688 | xpc_request_partition_reactivation = | ||
1689 | xpc_request_partition_reactivation_uv; | ||
1690 | xpc_request_partition_deactivation = | ||
1691 | xpc_request_partition_deactivation_uv; | ||
1692 | xpc_cancel_partition_deactivation_request = | ||
1693 | xpc_cancel_partition_deactivation_request_uv; | ||
1694 | |||
1695 | xpc_setup_ch_structures_sn = xpc_setup_ch_structures_sn_uv; | ||
1696 | xpc_teardown_ch_structures_sn = xpc_teardown_ch_structures_sn_uv; | ||
1697 | |||
1698 | xpc_make_first_contact = xpc_make_first_contact_uv; | ||
1699 | |||
1700 | xpc_get_chctl_all_flags = xpc_get_chctl_all_flags_uv; | ||
1701 | xpc_send_chctl_closerequest = xpc_send_chctl_closerequest_uv; | ||
1702 | xpc_send_chctl_closereply = xpc_send_chctl_closereply_uv; | ||
1703 | xpc_send_chctl_openrequest = xpc_send_chctl_openrequest_uv; | ||
1704 | xpc_send_chctl_openreply = xpc_send_chctl_openreply_uv; | ||
1705 | |||
1706 | xpc_save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_uv; | ||
1707 | |||
1708 | xpc_setup_msg_structures = xpc_setup_msg_structures_uv; | ||
1709 | xpc_teardown_msg_structures = xpc_teardown_msg_structures_uv; | ||
1710 | |||
1711 | xpc_indicate_partition_engaged = xpc_indicate_partition_engaged_uv; | ||
1712 | xpc_indicate_partition_disengaged = | ||
1713 | xpc_indicate_partition_disengaged_uv; | ||
1714 | xpc_assume_partition_disengaged = xpc_assume_partition_disengaged_uv; | ||
1715 | xpc_partition_engaged = xpc_partition_engaged_uv; | ||
1716 | xpc_any_partition_engaged = xpc_any_partition_engaged_uv; | ||
1717 | |||
1718 | xpc_n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_uv; | ||
1719 | xpc_process_msg_chctl_flags = xpc_process_msg_chctl_flags_uv; | ||
1720 | xpc_send_payload = xpc_send_payload_uv; | ||
1721 | xpc_notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_uv; | ||
1722 | xpc_get_deliverable_payload = xpc_get_deliverable_payload_uv; | ||
1723 | xpc_received_payload = xpc_received_payload_uv; | ||
1724 | 1713 | ||
1725 | if (sizeof(struct xpc_notify_mq_msghdr_uv) > XPC_MSG_HDR_MAX_SIZE) { | 1714 | if (sizeof(struct xpc_notify_mq_msghdr_uv) > XPC_MSG_HDR_MAX_SIZE) { |
1726 | dev_err(xpc_part, "xpc_notify_mq_msghdr_uv is larger than %d\n", | 1715 | dev_err(xpc_part, "xpc_notify_mq_msghdr_uv is larger than %d\n", |
diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c index 7c5b257ce8e..29acd06b1c3 100644 --- a/drivers/mtd/nand/cafe_nand.c +++ b/drivers/mtd/nand/cafe_nand.c | |||
@@ -332,7 +332,7 @@ static void cafe_select_chip(struct mtd_info *mtd, int chipnr) | |||
332 | cafe->ctl1 &= ~CTRL1_CHIPSELECT; | 332 | cafe->ctl1 &= ~CTRL1_CHIPSELECT; |
333 | } | 333 | } |
334 | 334 | ||
335 | static int cafe_nand_interrupt(int irq, void *id) | 335 | static irqreturn_t cafe_nand_interrupt(int irq, void *id) |
336 | { | 336 | { |
337 | struct mtd_info *mtd = id; | 337 | struct mtd_info *mtd = id; |
338 | struct cafe_priv *cafe = mtd->priv; | 338 | struct cafe_priv *cafe = mtd->priv; |
diff --git a/drivers/net/arm/ep93xx_eth.c b/drivers/net/arm/ep93xx_eth.c index 41736772c1d..b72b3d639f6 100644 --- a/drivers/net/arm/ep93xx_eth.c +++ b/drivers/net/arm/ep93xx_eth.c | |||
@@ -153,7 +153,7 @@ struct ep93xx_descs | |||
153 | struct ep93xx_priv | 153 | struct ep93xx_priv |
154 | { | 154 | { |
155 | struct resource *res; | 155 | struct resource *res; |
156 | void *base_addr; | 156 | void __iomem *base_addr; |
157 | int irq; | 157 | int irq; |
158 | 158 | ||
159 | struct ep93xx_descs *descs; | 159 | struct ep93xx_descs *descs; |
diff --git a/drivers/net/atl1c/atl1c_main.c b/drivers/net/atl1c/atl1c_main.c index deb7b53167e..83a12125b94 100644 --- a/drivers/net/atl1c/atl1c_main.c +++ b/drivers/net/atl1c/atl1c_main.c | |||
@@ -2532,8 +2532,8 @@ static int __devinit atl1c_probe(struct pci_dev *pdev, | |||
2532 | * various kernel subsystems to support the mechanics required by a | 2532 | * various kernel subsystems to support the mechanics required by a |
2533 | * fixed-high-32-bit system. | 2533 | * fixed-high-32-bit system. |
2534 | */ | 2534 | */ |
2535 | if ((pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) || | 2535 | if ((pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) || |
2536 | (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK) != 0)) { | 2536 | (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) != 0)) { |
2537 | dev_err(&pdev->dev, "No usable DMA configuration,aborting\n"); | 2537 | dev_err(&pdev->dev, "No usable DMA configuration,aborting\n"); |
2538 | goto err_dma; | 2538 | goto err_dma; |
2539 | } | 2539 | } |
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c index 9b75aa63006..30d0c81c989 100644 --- a/drivers/net/benet/be_main.c +++ b/drivers/net/benet/be_main.c | |||
@@ -1821,11 +1821,11 @@ static int __devinit be_probe(struct pci_dev *pdev, | |||
1821 | 1821 | ||
1822 | be_msix_enable(adapter); | 1822 | be_msix_enable(adapter); |
1823 | 1823 | ||
1824 | status = pci_set_dma_mask(pdev, DMA_64BIT_MASK); | 1824 | status = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); |
1825 | if (!status) { | 1825 | if (!status) { |
1826 | netdev->features |= NETIF_F_HIGHDMA; | 1826 | netdev->features |= NETIF_F_HIGHDMA; |
1827 | } else { | 1827 | } else { |
1828 | status = pci_set_dma_mask(pdev, DMA_32BIT_MASK); | 1828 | status = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
1829 | if (status) { | 1829 | if (status) { |
1830 | dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); | 1830 | dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); |
1831 | goto free_netdev; | 1831 | goto free_netdev; |
diff --git a/drivers/net/jme.c b/drivers/net/jme.c index ece35040288..621a7c0c46b 100644 --- a/drivers/net/jme.c +++ b/drivers/net/jme.c | |||
@@ -2591,13 +2591,13 @@ static int | |||
2591 | jme_pci_dma64(struct pci_dev *pdev) | 2591 | jme_pci_dma64(struct pci_dev *pdev) |
2592 | { | 2592 | { |
2593 | if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && | 2593 | if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && |
2594 | !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) | 2594 | !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) |
2595 | if (!pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) | 2595 | if (!pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) |
2596 | return 1; | 2596 | return 1; |
2597 | 2597 | ||
2598 | if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && | 2598 | if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && |
2599 | !pci_set_dma_mask(pdev, DMA_40BIT_MASK)) | 2599 | !pci_set_dma_mask(pdev, DMA_BIT_MASK(40))) |
2600 | if (!pci_set_consistent_dma_mask(pdev, DMA_40BIT_MASK)) | 2600 | if (!pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(40))) |
2601 | return 1; | 2601 | return 1; |
2602 | 2602 | ||
2603 | if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) | 2603 | if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) |
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c index 102bac90a30..30bea968969 100644 --- a/drivers/net/mlx4/main.c +++ b/drivers/net/mlx4/main.c | |||
@@ -976,7 +976,7 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev) | |||
976 | nreq = err; | 976 | nreq = err; |
977 | goto retry; | 977 | goto retry; |
978 | } | 978 | } |
979 | 979 | kfree(entries); | |
980 | goto no_msi; | 980 | goto no_msi; |
981 | } | 981 | } |
982 | 982 | ||
diff --git a/drivers/net/wireless/ath9k/pci.c b/drivers/net/wireless/ath9k/pci.c index 6dbc58580ab..168411d322a 100644 --- a/drivers/net/wireless/ath9k/pci.c +++ b/drivers/net/wireless/ath9k/pci.c | |||
@@ -93,14 +93,14 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
93 | if (pci_enable_device(pdev)) | 93 | if (pci_enable_device(pdev)) |
94 | return -EIO; | 94 | return -EIO; |
95 | 95 | ||
96 | ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); | 96 | ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
97 | 97 | ||
98 | if (ret) { | 98 | if (ret) { |
99 | printk(KERN_ERR "ath9k: 32-bit DMA not available\n"); | 99 | printk(KERN_ERR "ath9k: 32-bit DMA not available\n"); |
100 | goto bad; | 100 | goto bad; |
101 | } | 101 | } |
102 | 102 | ||
103 | ret = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); | 103 | ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); |
104 | 104 | ||
105 | if (ret) { | 105 | if (ret) { |
106 | printk(KERN_ERR "ath9k: 32-bit DMA consistent " | 106 | printk(KERN_ERR "ath9k: 32-bit DMA consistent " |
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c index e3569a0a952..b1610ea4bb3 100644 --- a/drivers/net/wireless/p54/p54pci.c +++ b/drivers/net/wireless/p54/p54pci.c | |||
@@ -492,8 +492,8 @@ static int __devinit p54p_probe(struct pci_dev *pdev, | |||
492 | goto err_disable_dev; | 492 | goto err_disable_dev; |
493 | } | 493 | } |
494 | 494 | ||
495 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) || | 495 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) || |
496 | pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { | 496 | pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { |
497 | dev_err(&pdev->dev, "No suitable DMA available\n"); | 497 | dev_err(&pdev->dev, "No suitable DMA available\n"); |
498 | goto err_free_reg; | 498 | goto err_free_reg; |
499 | } | 499 | } |
diff --git a/drivers/parisc/superio.c b/drivers/parisc/superio.c index 4fa3bb2ddfe..33e5ade774c 100644 --- a/drivers/parisc/superio.c +++ b/drivers/parisc/superio.c | |||
@@ -434,7 +434,8 @@ static void __init superio_parport_init(void) | |||
434 | 0 /*base_hi*/, | 434 | 0 /*base_hi*/, |
435 | PAR_IRQ, | 435 | PAR_IRQ, |
436 | PARPORT_DMA_NONE /* dma */, | 436 | PARPORT_DMA_NONE /* dma */, |
437 | NULL /*struct pci_dev* */) ) | 437 | NULL /*struct pci_dev* */), |
438 | 0 /* shared irq flags */ ) | ||
438 | 439 | ||
439 | printk(KERN_WARNING PFX "Probing parallel port failed.\n"); | 440 | printk(KERN_WARNING PFX "Probing parallel port failed.\n"); |
440 | #endif /* CONFIG_PARPORT_PC */ | 441 | #endif /* CONFIG_PARPORT_PC */ |
diff --git a/drivers/pci/access.c b/drivers/pci/access.c index 64dd7df90e6..0f370651268 100644 --- a/drivers/pci/access.c +++ b/drivers/pci/access.c | |||
@@ -87,8 +87,8 @@ EXPORT_SYMBOL(pci_read_vpd); | |||
87 | * pci_write_vpd - Write entry to Vital Product Data | 87 | * pci_write_vpd - Write entry to Vital Product Data |
88 | * @dev: pci device struct | 88 | * @dev: pci device struct |
89 | * @pos: offset in vpd space | 89 | * @pos: offset in vpd space |
90 | * @count: number of bytes to read | 90 | * @count: number of bytes to write |
91 | * @val: value to write | 91 | * @buf: buffer containing write data |
92 | * | 92 | * |
93 | */ | 93 | */ |
94 | ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf) | 94 | ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf) |
diff --git a/drivers/pci/htirq.c b/drivers/pci/htirq.c index bf7d6ce9bbb..6808d8333ec 100644 --- a/drivers/pci/htirq.c +++ b/drivers/pci/htirq.c | |||
@@ -158,6 +158,7 @@ int ht_create_irq(struct pci_dev *dev, int idx) | |||
158 | 158 | ||
159 | /** | 159 | /** |
160 | * ht_destroy_irq - destroy an irq created with ht_create_irq | 160 | * ht_destroy_irq - destroy an irq created with ht_create_irq |
161 | * @irq: irq to be destroyed | ||
161 | * | 162 | * |
162 | * This reverses ht_create_irq removing the specified irq from | 163 | * This reverses ht_create_irq removing the specified irq from |
163 | * existence. The irq should be free before this happens. | 164 | * existence. The irq should be free before this happens. |
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index a7eb1b46a5a..85ebd02a64a 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
@@ -492,6 +492,7 @@ write_vpd_attr(struct kobject *kobj, struct bin_attribute *bin_attr, | |||
492 | /** | 492 | /** |
493 | * pci_read_legacy_io - read byte(s) from legacy I/O port space | 493 | * pci_read_legacy_io - read byte(s) from legacy I/O port space |
494 | * @kobj: kobject corresponding to file to read from | 494 | * @kobj: kobject corresponding to file to read from |
495 | * @bin_attr: struct bin_attribute for this file | ||
495 | * @buf: buffer to store results | 496 | * @buf: buffer to store results |
496 | * @off: offset into legacy I/O port space | 497 | * @off: offset into legacy I/O port space |
497 | * @count: number of bytes to read | 498 | * @count: number of bytes to read |
@@ -517,6 +518,7 @@ pci_read_legacy_io(struct kobject *kobj, struct bin_attribute *bin_attr, | |||
517 | /** | 518 | /** |
518 | * pci_write_legacy_io - write byte(s) to legacy I/O port space | 519 | * pci_write_legacy_io - write byte(s) to legacy I/O port space |
519 | * @kobj: kobject corresponding to file to read from | 520 | * @kobj: kobject corresponding to file to read from |
521 | * @bin_attr: struct bin_attribute for this file | ||
520 | * @buf: buffer containing value to be written | 522 | * @buf: buffer containing value to be written |
521 | * @off: offset into legacy I/O port space | 523 | * @off: offset into legacy I/O port space |
522 | * @count: number of bytes to write | 524 | * @count: number of bytes to write |
@@ -733,9 +735,9 @@ pci_mmap_resource_wc(struct kobject *kobj, struct bin_attribute *attr, | |||
733 | 735 | ||
734 | /** | 736 | /** |
735 | * pci_remove_resource_files - cleanup resource files | 737 | * pci_remove_resource_files - cleanup resource files |
736 | * @dev: dev to cleanup | 738 | * @pdev: dev to cleanup |
737 | * | 739 | * |
738 | * If we created resource files for @dev, remove them from sysfs and | 740 | * If we created resource files for @pdev, remove them from sysfs and |
739 | * free their resources. | 741 | * free their resources. |
740 | */ | 742 | */ |
741 | static void | 743 | static void |
@@ -793,9 +795,9 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) | |||
793 | 795 | ||
794 | /** | 796 | /** |
795 | * pci_create_resource_files - create resource files in sysfs for @dev | 797 | * pci_create_resource_files - create resource files in sysfs for @dev |
796 | * @dev: dev in question | 798 | * @pdev: dev in question |
797 | * | 799 | * |
798 | * Walk the resources in @dev creating files for each resource available. | 800 | * Walk the resources in @pdev creating files for each resource available. |
799 | */ | 801 | */ |
800 | static int pci_create_resource_files(struct pci_dev *pdev) | 802 | static int pci_create_resource_files(struct pci_dev *pdev) |
801 | { | 803 | { |
@@ -829,6 +831,7 @@ void __weak pci_remove_resource_files(struct pci_dev *dev) { return; } | |||
829 | /** | 831 | /** |
830 | * pci_write_rom - used to enable access to the PCI ROM display | 832 | * pci_write_rom - used to enable access to the PCI ROM display |
831 | * @kobj: kernel object handle | 833 | * @kobj: kernel object handle |
834 | * @bin_attr: struct bin_attribute for this file | ||
832 | * @buf: user input | 835 | * @buf: user input |
833 | * @off: file offset | 836 | * @off: file offset |
834 | * @count: number of byte in input | 837 | * @count: number of byte in input |
@@ -852,6 +855,7 @@ pci_write_rom(struct kobject *kobj, struct bin_attribute *bin_attr, | |||
852 | /** | 855 | /** |
853 | * pci_read_rom - read a PCI ROM | 856 | * pci_read_rom - read a PCI ROM |
854 | * @kobj: kernel object handle | 857 | * @kobj: kernel object handle |
858 | * @bin_attr: struct bin_attribute for this file | ||
855 | * @buf: where to put the data we read from the ROM | 859 | * @buf: where to put the data we read from the ROM |
856 | * @off: file offset | 860 | * @off: file offset |
857 | * @count: number of bytes to read | 861 | * @count: number of bytes to read |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 16fd0d4c316..34bf0fdf504 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -681,11 +681,34 @@ EXPORT_SYMBOL(pci_choose_state); | |||
681 | 681 | ||
682 | #define PCI_EXP_SAVE_REGS 7 | 682 | #define PCI_EXP_SAVE_REGS 7 |
683 | 683 | ||
684 | #define pcie_cap_has_devctl(type, flags) 1 | ||
685 | #define pcie_cap_has_lnkctl(type, flags) \ | ||
686 | ((flags & PCI_EXP_FLAGS_VERS) > 1 || \ | ||
687 | (type == PCI_EXP_TYPE_ROOT_PORT || \ | ||
688 | type == PCI_EXP_TYPE_ENDPOINT || \ | ||
689 | type == PCI_EXP_TYPE_LEG_END)) | ||
690 | #define pcie_cap_has_sltctl(type, flags) \ | ||
691 | ((flags & PCI_EXP_FLAGS_VERS) > 1 || \ | ||
692 | ((type == PCI_EXP_TYPE_ROOT_PORT) || \ | ||
693 | (type == PCI_EXP_TYPE_DOWNSTREAM && \ | ||
694 | (flags & PCI_EXP_FLAGS_SLOT)))) | ||
695 | #define pcie_cap_has_rtctl(type, flags) \ | ||
696 | ((flags & PCI_EXP_FLAGS_VERS) > 1 || \ | ||
697 | (type == PCI_EXP_TYPE_ROOT_PORT || \ | ||
698 | type == PCI_EXP_TYPE_RC_EC)) | ||
699 | #define pcie_cap_has_devctl2(type, flags) \ | ||
700 | ((flags & PCI_EXP_FLAGS_VERS) > 1) | ||
701 | #define pcie_cap_has_lnkctl2(type, flags) \ | ||
702 | ((flags & PCI_EXP_FLAGS_VERS) > 1) | ||
703 | #define pcie_cap_has_sltctl2(type, flags) \ | ||
704 | ((flags & PCI_EXP_FLAGS_VERS) > 1) | ||
705 | |||
684 | static int pci_save_pcie_state(struct pci_dev *dev) | 706 | static int pci_save_pcie_state(struct pci_dev *dev) |
685 | { | 707 | { |
686 | int pos, i = 0; | 708 | int pos, i = 0; |
687 | struct pci_cap_saved_state *save_state; | 709 | struct pci_cap_saved_state *save_state; |
688 | u16 *cap; | 710 | u16 *cap; |
711 | u16 flags; | ||
689 | 712 | ||
690 | pos = pci_find_capability(dev, PCI_CAP_ID_EXP); | 713 | pos = pci_find_capability(dev, PCI_CAP_ID_EXP); |
691 | if (pos <= 0) | 714 | if (pos <= 0) |
@@ -698,13 +721,22 @@ static int pci_save_pcie_state(struct pci_dev *dev) | |||
698 | } | 721 | } |
699 | cap = (u16 *)&save_state->data[0]; | 722 | cap = (u16 *)&save_state->data[0]; |
700 | 723 | ||
701 | pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &cap[i++]); | 724 | pci_read_config_word(dev, pos + PCI_EXP_FLAGS, &flags); |
702 | pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &cap[i++]); | 725 | |
703 | pci_read_config_word(dev, pos + PCI_EXP_SLTCTL, &cap[i++]); | 726 | if (pcie_cap_has_devctl(dev->pcie_type, flags)) |
704 | pci_read_config_word(dev, pos + PCI_EXP_RTCTL, &cap[i++]); | 727 | pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &cap[i++]); |
705 | pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &cap[i++]); | 728 | if (pcie_cap_has_lnkctl(dev->pcie_type, flags)) |
706 | pci_read_config_word(dev, pos + PCI_EXP_LNKCTL2, &cap[i++]); | 729 | pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &cap[i++]); |
707 | pci_read_config_word(dev, pos + PCI_EXP_SLTCTL2, &cap[i++]); | 730 | if (pcie_cap_has_sltctl(dev->pcie_type, flags)) |
731 | pci_read_config_word(dev, pos + PCI_EXP_SLTCTL, &cap[i++]); | ||
732 | if (pcie_cap_has_rtctl(dev->pcie_type, flags)) | ||
733 | pci_read_config_word(dev, pos + PCI_EXP_RTCTL, &cap[i++]); | ||
734 | if (pcie_cap_has_devctl2(dev->pcie_type, flags)) | ||
735 | pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &cap[i++]); | ||
736 | if (pcie_cap_has_lnkctl2(dev->pcie_type, flags)) | ||
737 | pci_read_config_word(dev, pos + PCI_EXP_LNKCTL2, &cap[i++]); | ||
738 | if (pcie_cap_has_sltctl2(dev->pcie_type, flags)) | ||
739 | pci_read_config_word(dev, pos + PCI_EXP_SLTCTL2, &cap[i++]); | ||
708 | 740 | ||
709 | return 0; | 741 | return 0; |
710 | } | 742 | } |
@@ -714,6 +746,7 @@ static void pci_restore_pcie_state(struct pci_dev *dev) | |||
714 | int i = 0, pos; | 746 | int i = 0, pos; |
715 | struct pci_cap_saved_state *save_state; | 747 | struct pci_cap_saved_state *save_state; |
716 | u16 *cap; | 748 | u16 *cap; |
749 | u16 flags; | ||
717 | 750 | ||
718 | save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP); | 751 | save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP); |
719 | pos = pci_find_capability(dev, PCI_CAP_ID_EXP); | 752 | pos = pci_find_capability(dev, PCI_CAP_ID_EXP); |
@@ -721,13 +754,22 @@ static void pci_restore_pcie_state(struct pci_dev *dev) | |||
721 | return; | 754 | return; |
722 | cap = (u16 *)&save_state->data[0]; | 755 | cap = (u16 *)&save_state->data[0]; |
723 | 756 | ||
724 | pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, cap[i++]); | 757 | pci_read_config_word(dev, pos + PCI_EXP_FLAGS, &flags); |
725 | pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, cap[i++]); | 758 | |
726 | pci_write_config_word(dev, pos + PCI_EXP_SLTCTL, cap[i++]); | 759 | if (pcie_cap_has_devctl(dev->pcie_type, flags)) |
727 | pci_write_config_word(dev, pos + PCI_EXP_RTCTL, cap[i++]); | 760 | pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, cap[i++]); |
728 | pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, cap[i++]); | 761 | if (pcie_cap_has_lnkctl(dev->pcie_type, flags)) |
729 | pci_write_config_word(dev, pos + PCI_EXP_LNKCTL2, cap[i++]); | 762 | pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, cap[i++]); |
730 | pci_write_config_word(dev, pos + PCI_EXP_SLTCTL2, cap[i++]); | 763 | if (pcie_cap_has_sltctl(dev->pcie_type, flags)) |
764 | pci_write_config_word(dev, pos + PCI_EXP_SLTCTL, cap[i++]); | ||
765 | if (pcie_cap_has_rtctl(dev->pcie_type, flags)) | ||
766 | pci_write_config_word(dev, pos + PCI_EXP_RTCTL, cap[i++]); | ||
767 | if (pcie_cap_has_devctl2(dev->pcie_type, flags)) | ||
768 | pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, cap[i++]); | ||
769 | if (pcie_cap_has_lnkctl2(dev->pcie_type, flags)) | ||
770 | pci_write_config_word(dev, pos + PCI_EXP_LNKCTL2, cap[i++]); | ||
771 | if (pcie_cap_has_sltctl2(dev->pcie_type, flags)) | ||
772 | pci_write_config_word(dev, pos + PCI_EXP_SLTCTL2, cap[i++]); | ||
731 | } | 773 | } |
732 | 774 | ||
733 | 775 | ||
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 8eb50dffb78..e3c3e081b83 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -1118,10 +1118,6 @@ unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus) | |||
1118 | return max; | 1118 | return max; |
1119 | } | 1119 | } |
1120 | 1120 | ||
1121 | void __attribute__((weak)) set_pci_bus_resources_arch_default(struct pci_bus *b) | ||
1122 | { | ||
1123 | } | ||
1124 | |||
1125 | struct pci_bus * pci_create_bus(struct device *parent, | 1121 | struct pci_bus * pci_create_bus(struct device *parent, |
1126 | int bus, struct pci_ops *ops, void *sysdata) | 1122 | int bus, struct pci_ops *ops, void *sysdata) |
1127 | { | 1123 | { |
@@ -1180,8 +1176,6 @@ struct pci_bus * pci_create_bus(struct device *parent, | |||
1180 | b->resource[0] = &ioport_resource; | 1176 | b->resource[0] = &ioport_resource; |
1181 | b->resource[1] = &iomem_resource; | 1177 | b->resource[1] = &iomem_resource; |
1182 | 1178 | ||
1183 | set_pci_bus_resources_arch_default(b); | ||
1184 | |||
1185 | return b; | 1179 | return b; |
1186 | 1180 | ||
1187 | dev_create_file_err: | 1181 | dev_create_file_err: |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 0254741bece..3067673d54f 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -2033,6 +2033,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_di | |||
2033 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); | 2033 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); |
2034 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disable_all_msi); | 2034 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disable_all_msi); |
2035 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi); | 2035 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi); |
2036 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3364, quirk_disable_all_msi); | ||
2036 | 2037 | ||
2037 | /* Disable MSI on chipsets that are known to not support it */ | 2038 | /* Disable MSI on chipsets that are known to not support it */ |
2038 | static void __devinit quirk_disable_msi(struct pci_dev *dev) | 2039 | static void __devinit quirk_disable_msi(struct pci_dev *dev) |
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 8d9da9d30a6..a00f85471b6 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c | |||
@@ -536,11 +536,13 @@ static void pci_bus_dump_res(struct pci_bus *bus) | |||
536 | 536 | ||
537 | for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { | 537 | for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { |
538 | struct resource *res = bus->resource[i]; | 538 | struct resource *res = bus->resource[i]; |
539 | if (!res) | 539 | if (!res || !res->end) |
540 | continue; | 540 | continue; |
541 | 541 | ||
542 | dev_printk(KERN_DEBUG, &bus->dev, "resource %d %s %pR\n", i, | 542 | dev_printk(KERN_DEBUG, &bus->dev, "resource %d %s %pR\n", i, |
543 | (res->flags & IORESOURCE_IO) ? "io: " : "mem:", res); | 543 | (res->flags & IORESOURCE_IO) ? "io: " : |
544 | ((res->flags & IORESOURCE_PREFETCH)? "pref mem":"mem:"), | ||
545 | res); | ||
544 | } | 546 | } |
545 | } | 547 | } |
546 | 548 | ||
diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c index 21189447e54..fe95ce20bcb 100644 --- a/drivers/pci/slot.c +++ b/drivers/pci/slot.c | |||
@@ -264,8 +264,8 @@ EXPORT_SYMBOL_GPL(pci_create_slot); | |||
264 | 264 | ||
265 | /** | 265 | /** |
266 | * pci_renumber_slot - update %struct pci_slot -> number | 266 | * pci_renumber_slot - update %struct pci_slot -> number |
267 | * @slot - %struct pci_slot to update | 267 | * @slot: &struct pci_slot to update |
268 | * @slot_nr - new number for slot | 268 | * @slot_nr: new number for slot |
269 | * | 269 | * |
270 | * The primary purpose of this interface is to allow callers who earlier | 270 | * The primary purpose of this interface is to allow callers who earlier |
271 | * created a placeholder slot in pci_create_slot() by passing a -1 as | 271 | * created a placeholder slot in pci_create_slot() by passing a -1 as |
diff --git a/drivers/pcmcia/pxa2xx_sharpsl.c b/drivers/pcmcia/pxa2xx_sharpsl.c index 1cd02f5a23a..bc43f78f6f0 100644 --- a/drivers/pcmcia/pxa2xx_sharpsl.c +++ b/drivers/pcmcia/pxa2xx_sharpsl.c | |||
@@ -255,6 +255,9 @@ static int __init sharpsl_pcmcia_init(void) | |||
255 | { | 255 | { |
256 | int ret; | 256 | int ret; |
257 | 257 | ||
258 | if (!platform_scoop_config) | ||
259 | return -ENODEV; | ||
260 | |||
258 | sharpsl_pcmcia_ops.nr = platform_scoop_config->num_devs; | 261 | sharpsl_pcmcia_ops.nr = platform_scoop_config->num_devs; |
259 | sharpsl_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); | 262 | sharpsl_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); |
260 | 263 | ||
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c index d3c92d777bd..552958545f9 100644 --- a/drivers/platform/x86/sony-laptop.c +++ b/drivers/platform/x86/sony-laptop.c | |||
@@ -317,7 +317,8 @@ static void sony_laptop_report_input_event(u8 event) | |||
317 | struct input_dev *key_dev = sony_laptop_input.key_dev; | 317 | struct input_dev *key_dev = sony_laptop_input.key_dev; |
318 | struct sony_laptop_keypress kp = { NULL }; | 318 | struct sony_laptop_keypress kp = { NULL }; |
319 | 319 | ||
320 | if (event == SONYPI_EVENT_FNKEY_RELEASED) { | 320 | if (event == SONYPI_EVENT_FNKEY_RELEASED || |
321 | event == SONYPI_EVENT_ANYBUTTON_RELEASED) { | ||
321 | /* Nothing, not all VAIOs generate this event */ | 322 | /* Nothing, not all VAIOs generate this event */ |
322 | return; | 323 | return; |
323 | } | 324 | } |
@@ -905,7 +906,6 @@ static struct sony_nc_event sony_127_events[] = { | |||
905 | { 0x05, SONYPI_EVENT_ANYBUTTON_RELEASED }, | 906 | { 0x05, SONYPI_EVENT_ANYBUTTON_RELEASED }, |
906 | { 0x86, SONYPI_EVENT_PKEY_P5 }, | 907 | { 0x86, SONYPI_EVENT_PKEY_P5 }, |
907 | { 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED }, | 908 | { 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED }, |
908 | { 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED }, | ||
909 | { 0x87, SONYPI_EVENT_SETTINGKEY_PRESSED }, | 909 | { 0x87, SONYPI_EVENT_SETTINGKEY_PRESSED }, |
910 | { 0x07, SONYPI_EVENT_ANYBUTTON_RELEASED }, | 910 | { 0x07, SONYPI_EVENT_ANYBUTTON_RELEASED }, |
911 | { 0, 0 }, | 911 | { 0, 0 }, |
@@ -1004,6 +1004,7 @@ static int sony_nc_function_setup(struct acpi_device *device) | |||
1004 | sony_call_snc_handle(0x0100, 0, &result); | 1004 | sony_call_snc_handle(0x0100, 0, &result); |
1005 | sony_call_snc_handle(0x0101, 0, &result); | 1005 | sony_call_snc_handle(0x0101, 0, &result); |
1006 | sony_call_snc_handle(0x0102, 0x100, &result); | 1006 | sony_call_snc_handle(0x0102, 0x100, &result); |
1007 | sony_call_snc_handle(0x0127, 0, &result); | ||
1007 | 1008 | ||
1008 | return 0; | 1009 | return 0; |
1009 | } | 1010 | } |
@@ -1040,7 +1041,7 @@ static int sony_nc_resume(struct acpi_device *device) | |||
1040 | 1041 | ||
1041 | /* set the last requested brightness level */ | 1042 | /* set the last requested brightness level */ |
1042 | if (sony_backlight_device && | 1043 | if (sony_backlight_device && |
1043 | !sony_backlight_update_status(sony_backlight_device)) | 1044 | sony_backlight_update_status(sony_backlight_device) < 0) |
1044 | printk(KERN_WARNING DRV_PFX "unable to restore brightness level\n"); | 1045 | printk(KERN_WARNING DRV_PFX "unable to restore brightness level\n"); |
1045 | 1046 | ||
1046 | return 0; | 1047 | return 0; |
@@ -1102,8 +1103,11 @@ static int sony_nc_setup_wifi_rfkill(struct acpi_device *device) | |||
1102 | err = rfkill_register(sony_wifi_rfkill); | 1103 | err = rfkill_register(sony_wifi_rfkill); |
1103 | if (err) | 1104 | if (err) |
1104 | rfkill_free(sony_wifi_rfkill); | 1105 | rfkill_free(sony_wifi_rfkill); |
1105 | else | 1106 | else { |
1106 | sony_rfkill_devices[SONY_WIFI] = sony_wifi_rfkill; | 1107 | sony_rfkill_devices[SONY_WIFI] = sony_wifi_rfkill; |
1108 | sony_nc_rfkill_set(sony_wifi_rfkill->data, | ||
1109 | RFKILL_STATE_UNBLOCKED); | ||
1110 | } | ||
1107 | return err; | 1111 | return err; |
1108 | } | 1112 | } |
1109 | 1113 | ||
@@ -1124,8 +1128,11 @@ static int sony_nc_setup_bluetooth_rfkill(struct acpi_device *device) | |||
1124 | err = rfkill_register(sony_bluetooth_rfkill); | 1128 | err = rfkill_register(sony_bluetooth_rfkill); |
1125 | if (err) | 1129 | if (err) |
1126 | rfkill_free(sony_bluetooth_rfkill); | 1130 | rfkill_free(sony_bluetooth_rfkill); |
1127 | else | 1131 | else { |
1128 | sony_rfkill_devices[SONY_BLUETOOTH] = sony_bluetooth_rfkill; | 1132 | sony_rfkill_devices[SONY_BLUETOOTH] = sony_bluetooth_rfkill; |
1133 | sony_nc_rfkill_set(sony_bluetooth_rfkill->data, | ||
1134 | RFKILL_STATE_UNBLOCKED); | ||
1135 | } | ||
1129 | return err; | 1136 | return err; |
1130 | } | 1137 | } |
1131 | 1138 | ||
@@ -1145,8 +1152,11 @@ static int sony_nc_setup_wwan_rfkill(struct acpi_device *device) | |||
1145 | err = rfkill_register(sony_wwan_rfkill); | 1152 | err = rfkill_register(sony_wwan_rfkill); |
1146 | if (err) | 1153 | if (err) |
1147 | rfkill_free(sony_wwan_rfkill); | 1154 | rfkill_free(sony_wwan_rfkill); |
1148 | else | 1155 | else { |
1149 | sony_rfkill_devices[SONY_WWAN] = sony_wwan_rfkill; | 1156 | sony_rfkill_devices[SONY_WWAN] = sony_wwan_rfkill; |
1157 | sony_nc_rfkill_set(sony_wwan_rfkill->data, | ||
1158 | RFKILL_STATE_UNBLOCKED); | ||
1159 | } | ||
1150 | return err; | 1160 | return err; |
1151 | } | 1161 | } |
1152 | 1162 | ||
@@ -1166,8 +1176,11 @@ static int sony_nc_setup_wimax_rfkill(struct acpi_device *device) | |||
1166 | err = rfkill_register(sony_wimax_rfkill); | 1176 | err = rfkill_register(sony_wimax_rfkill); |
1167 | if (err) | 1177 | if (err) |
1168 | rfkill_free(sony_wimax_rfkill); | 1178 | rfkill_free(sony_wimax_rfkill); |
1169 | else | 1179 | else { |
1170 | sony_rfkill_devices[SONY_WIMAX] = sony_wimax_rfkill; | 1180 | sony_rfkill_devices[SONY_WIMAX] = sony_wimax_rfkill; |
1181 | sony_nc_rfkill_set(sony_wimax_rfkill->data, | ||
1182 | RFKILL_STATE_UNBLOCKED); | ||
1183 | } | ||
1171 | return err; | 1184 | return err; |
1172 | } | 1185 | } |
1173 | 1186 | ||
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index a40b075743d..912be65b626 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c | |||
@@ -21,7 +21,7 @@ | |||
21 | * 02110-1301, USA. | 21 | * 02110-1301, USA. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #define TPACPI_VERSION "0.22" | 24 | #define TPACPI_VERSION "0.23" |
25 | #define TPACPI_SYSFS_VERSION 0x020300 | 25 | #define TPACPI_SYSFS_VERSION 0x020300 |
26 | 26 | ||
27 | /* | 27 | /* |
@@ -303,11 +303,17 @@ static u32 dbg_level; | |||
303 | 303 | ||
304 | static struct workqueue_struct *tpacpi_wq; | 304 | static struct workqueue_struct *tpacpi_wq; |
305 | 305 | ||
306 | enum led_status_t { | ||
307 | TPACPI_LED_OFF = 0, | ||
308 | TPACPI_LED_ON, | ||
309 | TPACPI_LED_BLINK, | ||
310 | }; | ||
311 | |||
306 | /* Special LED class that can defer work */ | 312 | /* Special LED class that can defer work */ |
307 | struct tpacpi_led_classdev { | 313 | struct tpacpi_led_classdev { |
308 | struct led_classdev led_classdev; | 314 | struct led_classdev led_classdev; |
309 | struct work_struct work; | 315 | struct work_struct work; |
310 | enum led_brightness new_brightness; | 316 | enum led_status_t new_state; |
311 | unsigned int led; | 317 | unsigned int led; |
312 | }; | 318 | }; |
313 | 319 | ||
@@ -2946,12 +2952,18 @@ static int hotkey_read(char *p) | |||
2946 | return len; | 2952 | return len; |
2947 | } | 2953 | } |
2948 | 2954 | ||
2949 | static void hotkey_enabledisable_warn(void) | 2955 | static void hotkey_enabledisable_warn(bool enable) |
2950 | { | 2956 | { |
2951 | tpacpi_log_usertask("procfs hotkey enable/disable"); | 2957 | tpacpi_log_usertask("procfs hotkey enable/disable"); |
2952 | WARN(1, TPACPI_WARN | 2958 | if (!WARN((tpacpi_lifecycle == TPACPI_LIFE_RUNNING || !enable), |
2953 | "hotkey enable/disable functionality has been " | 2959 | TPACPI_WARN |
2954 | "removed from the driver. Hotkeys are always enabled.\n"); | 2960 | "hotkey enable/disable functionality has been " |
2961 | "removed from the driver. Hotkeys are always " | ||
2962 | "enabled\n")) | ||
2963 | printk(TPACPI_ERR | ||
2964 | "Please remove the hotkey=enable module " | ||
2965 | "parameter, it is deprecated. Hotkeys are always " | ||
2966 | "enabled\n"); | ||
2955 | } | 2967 | } |
2956 | 2968 | ||
2957 | static int hotkey_write(char *buf) | 2969 | static int hotkey_write(char *buf) |
@@ -2971,9 +2983,9 @@ static int hotkey_write(char *buf) | |||
2971 | res = 0; | 2983 | res = 0; |
2972 | while ((cmd = next_cmd(&buf))) { | 2984 | while ((cmd = next_cmd(&buf))) { |
2973 | if (strlencmp(cmd, "enable") == 0) { | 2985 | if (strlencmp(cmd, "enable") == 0) { |
2974 | hotkey_enabledisable_warn(); | 2986 | hotkey_enabledisable_warn(1); |
2975 | } else if (strlencmp(cmd, "disable") == 0) { | 2987 | } else if (strlencmp(cmd, "disable") == 0) { |
2976 | hotkey_enabledisable_warn(); | 2988 | hotkey_enabledisable_warn(0); |
2977 | res = -EPERM; | 2989 | res = -EPERM; |
2978 | } else if (strlencmp(cmd, "reset") == 0) { | 2990 | } else if (strlencmp(cmd, "reset") == 0) { |
2979 | mask = hotkey_orig_mask; | 2991 | mask = hotkey_orig_mask; |
@@ -4207,7 +4219,7 @@ static void light_set_status_worker(struct work_struct *work) | |||
4207 | container_of(work, struct tpacpi_led_classdev, work); | 4219 | container_of(work, struct tpacpi_led_classdev, work); |
4208 | 4220 | ||
4209 | if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING)) | 4221 | if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING)) |
4210 | light_set_status((data->new_brightness != LED_OFF)); | 4222 | light_set_status((data->new_state != TPACPI_LED_OFF)); |
4211 | } | 4223 | } |
4212 | 4224 | ||
4213 | static void light_sysfs_set(struct led_classdev *led_cdev, | 4225 | static void light_sysfs_set(struct led_classdev *led_cdev, |
@@ -4217,7 +4229,8 @@ static void light_sysfs_set(struct led_classdev *led_cdev, | |||
4217 | container_of(led_cdev, | 4229 | container_of(led_cdev, |
4218 | struct tpacpi_led_classdev, | 4230 | struct tpacpi_led_classdev, |
4219 | led_classdev); | 4231 | led_classdev); |
4220 | data->new_brightness = brightness; | 4232 | data->new_state = (brightness != LED_OFF) ? |
4233 | TPACPI_LED_ON : TPACPI_LED_OFF; | ||
4221 | queue_work(tpacpi_wq, &data->work); | 4234 | queue_work(tpacpi_wq, &data->work); |
4222 | } | 4235 | } |
4223 | 4236 | ||
@@ -4724,12 +4737,6 @@ enum { /* For TPACPI_LED_OLD */ | |||
4724 | TPACPI_LED_EC_HLMS = 0x0e, /* EC reg to select led to command */ | 4737 | TPACPI_LED_EC_HLMS = 0x0e, /* EC reg to select led to command */ |
4725 | }; | 4738 | }; |
4726 | 4739 | ||
4727 | enum led_status_t { | ||
4728 | TPACPI_LED_OFF = 0, | ||
4729 | TPACPI_LED_ON, | ||
4730 | TPACPI_LED_BLINK, | ||
4731 | }; | ||
4732 | |||
4733 | static enum led_access_mode led_supported; | 4740 | static enum led_access_mode led_supported; |
4734 | 4741 | ||
4735 | TPACPI_HANDLE(led, ec, "SLED", /* 570 */ | 4742 | TPACPI_HANDLE(led, ec, "SLED", /* 570 */ |
@@ -4841,23 +4848,13 @@ static int led_set_status(const unsigned int led, | |||
4841 | return rc; | 4848 | return rc; |
4842 | } | 4849 | } |
4843 | 4850 | ||
4844 | static void led_sysfs_set_status(unsigned int led, | ||
4845 | enum led_brightness brightness) | ||
4846 | { | ||
4847 | led_set_status(led, | ||
4848 | (brightness == LED_OFF) ? | ||
4849 | TPACPI_LED_OFF : | ||
4850 | (tpacpi_led_state_cache[led] == TPACPI_LED_BLINK) ? | ||
4851 | TPACPI_LED_BLINK : TPACPI_LED_ON); | ||
4852 | } | ||
4853 | |||
4854 | static void led_set_status_worker(struct work_struct *work) | 4851 | static void led_set_status_worker(struct work_struct *work) |
4855 | { | 4852 | { |
4856 | struct tpacpi_led_classdev *data = | 4853 | struct tpacpi_led_classdev *data = |
4857 | container_of(work, struct tpacpi_led_classdev, work); | 4854 | container_of(work, struct tpacpi_led_classdev, work); |
4858 | 4855 | ||
4859 | if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING)) | 4856 | if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING)) |
4860 | led_sysfs_set_status(data->led, data->new_brightness); | 4857 | led_set_status(data->led, data->new_state); |
4861 | } | 4858 | } |
4862 | 4859 | ||
4863 | static void led_sysfs_set(struct led_classdev *led_cdev, | 4860 | static void led_sysfs_set(struct led_classdev *led_cdev, |
@@ -4866,7 +4863,13 @@ static void led_sysfs_set(struct led_classdev *led_cdev, | |||
4866 | struct tpacpi_led_classdev *data = container_of(led_cdev, | 4863 | struct tpacpi_led_classdev *data = container_of(led_cdev, |
4867 | struct tpacpi_led_classdev, led_classdev); | 4864 | struct tpacpi_led_classdev, led_classdev); |
4868 | 4865 | ||
4869 | data->new_brightness = brightness; | 4866 | if (brightness == LED_OFF) |
4867 | data->new_state = TPACPI_LED_OFF; | ||
4868 | else if (tpacpi_led_state_cache[data->led] != TPACPI_LED_BLINK) | ||
4869 | data->new_state = TPACPI_LED_ON; | ||
4870 | else | ||
4871 | data->new_state = TPACPI_LED_BLINK; | ||
4872 | |||
4870 | queue_work(tpacpi_wq, &data->work); | 4873 | queue_work(tpacpi_wq, &data->work); |
4871 | } | 4874 | } |
4872 | 4875 | ||
@@ -4884,7 +4887,7 @@ static int led_sysfs_blink_set(struct led_classdev *led_cdev, | |||
4884 | } else if ((*delay_on != 500) || (*delay_off != 500)) | 4887 | } else if ((*delay_on != 500) || (*delay_off != 500)) |
4885 | return -EINVAL; | 4888 | return -EINVAL; |
4886 | 4889 | ||
4887 | data->new_brightness = TPACPI_LED_BLINK; | 4890 | data->new_state = TPACPI_LED_BLINK; |
4888 | queue_work(tpacpi_wq, &data->work); | 4891 | queue_work(tpacpi_wq, &data->work); |
4889 | 4892 | ||
4890 | return 0; | 4893 | return 0; |
@@ -7858,6 +7861,15 @@ static int __init thinkpad_acpi_module_init(void) | |||
7858 | MODULE_ALIAS(TPACPI_DRVR_SHORTNAME); | 7861 | MODULE_ALIAS(TPACPI_DRVR_SHORTNAME); |
7859 | 7862 | ||
7860 | /* | 7863 | /* |
7864 | * This will autoload the driver in almost every ThinkPad | ||
7865 | * in widespread use. | ||
7866 | * | ||
7867 | * Only _VERY_ old models, like the 240, 240x and 570 lack | ||
7868 | * the HKEY event interface. | ||
7869 | */ | ||
7870 | MODULE_DEVICE_TABLE(acpi, ibm_htk_device_ids); | ||
7871 | |||
7872 | /* | ||
7861 | * DMI matching for module autoloading | 7873 | * DMI matching for module autoloading |
7862 | * | 7874 | * |
7863 | * See http://thinkwiki.org/wiki/List_of_DMI_IDs | 7875 | * See http://thinkwiki.org/wiki/List_of_DMI_IDs |
@@ -7869,18 +7881,13 @@ MODULE_ALIAS(TPACPI_DRVR_SHORTNAME); | |||
7869 | #define IBM_BIOS_MODULE_ALIAS(__type) \ | 7881 | #define IBM_BIOS_MODULE_ALIAS(__type) \ |
7870 | MODULE_ALIAS("dmi:bvnIBM:bvr" __type "ET??WW*") | 7882 | MODULE_ALIAS("dmi:bvnIBM:bvr" __type "ET??WW*") |
7871 | 7883 | ||
7872 | /* Non-ancient thinkpads */ | ||
7873 | MODULE_ALIAS("dmi:bvnIBM:*:svnIBM:*:pvrThinkPad*:rvnIBM:*"); | ||
7874 | MODULE_ALIAS("dmi:bvnLENOVO:*:svnLENOVO:*:pvrThinkPad*:rvnLENOVO:*"); | ||
7875 | |||
7876 | /* Ancient thinkpad BIOSes have to be identified by | 7884 | /* Ancient thinkpad BIOSes have to be identified by |
7877 | * BIOS type or model number, and there are far less | 7885 | * BIOS type or model number, and there are far less |
7878 | * BIOS types than model numbers... */ | 7886 | * BIOS types than model numbers... */ |
7879 | IBM_BIOS_MODULE_ALIAS("I[BDHIMNOTWVYZ]"); | 7887 | IBM_BIOS_MODULE_ALIAS("I[MU]"); /* 570, 570e */ |
7880 | IBM_BIOS_MODULE_ALIAS("1[0368A-GIKM-PST]"); | ||
7881 | IBM_BIOS_MODULE_ALIAS("K[UX-Z]"); | ||
7882 | 7888 | ||
7883 | MODULE_AUTHOR("Borislav Deianov, Henrique de Moraes Holschuh"); | 7889 | MODULE_AUTHOR("Borislav Deianov <borislav@users.sf.net>"); |
7890 | MODULE_AUTHOR("Henrique de Moraes Holschuh <hmh@hmh.eng.br>"); | ||
7884 | MODULE_DESCRIPTION(TPACPI_DESC); | 7891 | MODULE_DESCRIPTION(TPACPI_DESC); |
7885 | MODULE_VERSION(TPACPI_VERSION); | 7892 | MODULE_VERSION(TPACPI_VERSION); |
7886 | MODULE_LICENSE("GPL"); | 7893 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/regulator/bq24022.c b/drivers/regulator/bq24022.c index 7ecb820ceeb..d08cd9b66c6 100644 --- a/drivers/regulator/bq24022.c +++ b/drivers/regulator/bq24022.c | |||
@@ -61,8 +61,7 @@ static int bq24022_disable(struct regulator_dev *rdev) | |||
61 | 61 | ||
62 | static int bq24022_is_enabled(struct regulator_dev *rdev) | 62 | static int bq24022_is_enabled(struct regulator_dev *rdev) |
63 | { | 63 | { |
64 | struct platform_device *pdev = rdev_get_drvdata(rdev); | 64 | struct bq24022_mach_info *pdata = rdev_get_drvdata(rdev); |
65 | struct bq24022_mach_info *pdata = pdev->dev.platform_data; | ||
66 | 65 | ||
67 | return !gpio_get_value(pdata->gpio_nce); | 66 | return !gpio_get_value(pdata->gpio_nce); |
68 | } | 67 | } |
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 01f7702a805..98c3a74e994 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
@@ -540,8 +540,8 @@ static void drms_uA_update(struct regulator_dev *rdev) | |||
540 | 540 | ||
541 | err = regulator_check_drms(rdev); | 541 | err = regulator_check_drms(rdev); |
542 | if (err < 0 || !rdev->desc->ops->get_optimum_mode || | 542 | if (err < 0 || !rdev->desc->ops->get_optimum_mode || |
543 | !rdev->desc->ops->get_voltage || !rdev->desc->ops->set_mode); | 543 | !rdev->desc->ops->get_voltage || !rdev->desc->ops->set_mode) |
544 | return; | 544 | return; |
545 | 545 | ||
546 | /* get output voltage */ | 546 | /* get output voltage */ |
547 | output_uV = rdev->desc->ops->get_voltage(rdev); | 547 | output_uV = rdev->desc->ops->get_voltage(rdev); |
@@ -703,10 +703,13 @@ static int set_machine_constraints(struct regulator_dev *rdev, | |||
703 | int cmin = constraints->min_uV; | 703 | int cmin = constraints->min_uV; |
704 | int cmax = constraints->max_uV; | 704 | int cmax = constraints->max_uV; |
705 | 705 | ||
706 | /* it's safe to autoconfigure fixed-voltage supplies */ | 706 | /* it's safe to autoconfigure fixed-voltage supplies |
707 | and the constraints are used by list_voltage. */ | ||
707 | if (count == 1 && !cmin) { | 708 | if (count == 1 && !cmin) { |
708 | cmin = INT_MIN; | 709 | cmin = 1; |
709 | cmax = INT_MAX; | 710 | cmax = INT_MAX; |
711 | constraints->min_uV = cmin; | ||
712 | constraints->max_uV = cmax; | ||
710 | } | 713 | } |
711 | 714 | ||
712 | /* voltage constraints are optional */ | 715 | /* voltage constraints are optional */ |
@@ -2001,8 +2004,8 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc, | |||
2001 | if (regulator_desc->name == NULL || regulator_desc->ops == NULL) | 2004 | if (regulator_desc->name == NULL || regulator_desc->ops == NULL) |
2002 | return ERR_PTR(-EINVAL); | 2005 | return ERR_PTR(-EINVAL); |
2003 | 2006 | ||
2004 | if (!regulator_desc->type == REGULATOR_VOLTAGE && | 2007 | if (regulator_desc->type != REGULATOR_VOLTAGE && |
2005 | !regulator_desc->type == REGULATOR_CURRENT) | 2008 | regulator_desc->type != REGULATOR_CURRENT) |
2006 | return ERR_PTR(-EINVAL); | 2009 | return ERR_PTR(-EINVAL); |
2007 | 2010 | ||
2008 | if (!init_data) | 2011 | if (!init_data) |
@@ -2080,6 +2083,10 @@ out: | |||
2080 | 2083 | ||
2081 | scrub: | 2084 | scrub: |
2082 | device_unregister(&rdev->dev); | 2085 | device_unregister(&rdev->dev); |
2086 | /* device core frees rdev */ | ||
2087 | rdev = ERR_PTR(ret); | ||
2088 | goto out; | ||
2089 | |||
2083 | clean: | 2090 | clean: |
2084 | kfree(rdev); | 2091 | kfree(rdev); |
2085 | rdev = ERR_PTR(ret); | 2092 | rdev = ERR_PTR(ret); |
diff --git a/drivers/regulator/virtual.c b/drivers/regulator/virtual.c index 3d08348584e..71403fa3ffa 100644 --- a/drivers/regulator/virtual.c +++ b/drivers/regulator/virtual.c | |||
@@ -230,13 +230,13 @@ static ssize_t set_mode(struct device *dev, struct device_attribute *attr, | |||
230 | * sysfs_streq() doesn't need the \n's, but we add them so the strings | 230 | * sysfs_streq() doesn't need the \n's, but we add them so the strings |
231 | * will be shared with show_mode(), above. | 231 | * will be shared with show_mode(), above. |
232 | */ | 232 | */ |
233 | if (sysfs_streq(buf, "fast\n") == 0) | 233 | if (sysfs_streq(buf, "fast\n")) |
234 | mode = REGULATOR_MODE_FAST; | 234 | mode = REGULATOR_MODE_FAST; |
235 | else if (sysfs_streq(buf, "normal\n") == 0) | 235 | else if (sysfs_streq(buf, "normal\n")) |
236 | mode = REGULATOR_MODE_NORMAL; | 236 | mode = REGULATOR_MODE_NORMAL; |
237 | else if (sysfs_streq(buf, "idle\n") == 0) | 237 | else if (sysfs_streq(buf, "idle\n")) |
238 | mode = REGULATOR_MODE_IDLE; | 238 | mode = REGULATOR_MODE_IDLE; |
239 | else if (sysfs_streq(buf, "standby\n") == 0) | 239 | else if (sysfs_streq(buf, "standby\n")) |
240 | mode = REGULATOR_MODE_STANDBY; | 240 | mode = REGULATOR_MODE_STANDBY; |
241 | else { | 241 | else { |
242 | dev_err(dev, "Configuring invalid mode\n"); | 242 | dev_err(dev, "Configuring invalid mode\n"); |
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index ffe34a12f44..4e9851fc174 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig | |||
@@ -573,7 +573,7 @@ config RTC_DRV_SA1100 | |||
573 | 573 | ||
574 | config RTC_DRV_SH | 574 | config RTC_DRV_SH |
575 | tristate "SuperH On-Chip RTC" | 575 | tristate "SuperH On-Chip RTC" |
576 | depends on RTC_CLASS && SUPERH | 576 | depends on RTC_CLASS && SUPERH && HAVE_CLK |
577 | help | 577 | help |
578 | Say Y here to enable support for the on-chip RTC found in | 578 | Say Y here to enable support for the on-chip RTC found in |
579 | most SuperH processors. | 579 | most SuperH processors. |
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index b6d35f50e40..23e10b6263d 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c | |||
@@ -797,17 +797,15 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) | |||
797 | goto cleanup2; | 797 | goto cleanup2; |
798 | } | 798 | } |
799 | 799 | ||
800 | pr_info("%s: alarms up to one %s%s, %zd bytes nvram%s\n", | 800 | pr_info("%s: %s%s, %zd bytes nvram%s\n", |
801 | dev_name(&cmos_rtc.rtc->dev), | 801 | dev_name(&cmos_rtc.rtc->dev), |
802 | is_valid_irq(rtc_irq) | 802 | !is_valid_irq(rtc_irq) ? "no alarms" : |
803 | ? (cmos_rtc.mon_alrm | 803 | cmos_rtc.mon_alrm ? "alarms up to one year" : |
804 | ? "year" | 804 | cmos_rtc.day_alrm ? "alarms up to one month" : |
805 | : (cmos_rtc.day_alrm | 805 | "alarms up to one day", |
806 | ? "month" : "day")) | 806 | cmos_rtc.century ? ", y3k" : "", |
807 | : "no", | 807 | nvram.size, |
808 | cmos_rtc.century ? ", y3k" : "", | 808 | is_hpet_enabled() ? ", hpet irqs" : ""); |
809 | nvram.size, | ||
810 | is_hpet_enabled() ? ", hpet irqs" : ""); | ||
811 | 809 | ||
812 | return 0; | 810 | return 0; |
813 | 811 | ||
diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c index 9b1ff12bf94..d7310adb715 100644 --- a/drivers/rtc/rtc-sh.c +++ b/drivers/rtc/rtc-sh.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * SuperH On-Chip RTC Support | 2 | * SuperH On-Chip RTC Support |
3 | * | 3 | * |
4 | * Copyright (C) 2006, 2007, 2008 Paul Mundt | 4 | * Copyright (C) 2006 - 2009 Paul Mundt |
5 | * Copyright (C) 2006 Jamie Lenehan | 5 | * Copyright (C) 2006 Jamie Lenehan |
6 | * Copyright (C) 2008 Angelo Castello | 6 | * Copyright (C) 2008 Angelo Castello |
7 | * | 7 | * |
@@ -25,10 +25,11 @@ | |||
25 | #include <linux/spinlock.h> | 25 | #include <linux/spinlock.h> |
26 | #include <linux/io.h> | 26 | #include <linux/io.h> |
27 | #include <linux/log2.h> | 27 | #include <linux/log2.h> |
28 | #include <linux/clk.h> | ||
28 | #include <asm/rtc.h> | 29 | #include <asm/rtc.h> |
29 | 30 | ||
30 | #define DRV_NAME "sh-rtc" | 31 | #define DRV_NAME "sh-rtc" |
31 | #define DRV_VERSION "0.2.1" | 32 | #define DRV_VERSION "0.2.2" |
32 | 33 | ||
33 | #define RTC_REG(r) ((r) * rtc_reg_size) | 34 | #define RTC_REG(r) ((r) * rtc_reg_size) |
34 | 35 | ||
@@ -87,16 +88,17 @@ | |||
87 | #define RCR2_START 0x01 /* Start bit */ | 88 | #define RCR2_START 0x01 /* Start bit */ |
88 | 89 | ||
89 | struct sh_rtc { | 90 | struct sh_rtc { |
90 | void __iomem *regbase; | 91 | void __iomem *regbase; |
91 | unsigned long regsize; | 92 | unsigned long regsize; |
92 | struct resource *res; | 93 | struct resource *res; |
93 | int alarm_irq; | 94 | int alarm_irq; |
94 | int periodic_irq; | 95 | int periodic_irq; |
95 | int carry_irq; | 96 | int carry_irq; |
96 | struct rtc_device *rtc_dev; | 97 | struct clk *clk; |
97 | spinlock_t lock; | 98 | struct rtc_device *rtc_dev; |
98 | unsigned long capabilities; /* See asm-sh/rtc.h for cap bits */ | 99 | spinlock_t lock; |
99 | unsigned short periodic_freq; | 100 | unsigned long capabilities; /* See asm/rtc.h for cap bits */ |
101 | unsigned short periodic_freq; | ||
100 | }; | 102 | }; |
101 | 103 | ||
102 | static int __sh_rtc_interrupt(struct sh_rtc *rtc) | 104 | static int __sh_rtc_interrupt(struct sh_rtc *rtc) |
@@ -294,10 +296,10 @@ static inline void sh_rtc_setaie(struct device *dev, unsigned int enable) | |||
294 | 296 | ||
295 | tmp = readb(rtc->regbase + RCR1); | 297 | tmp = readb(rtc->regbase + RCR1); |
296 | 298 | ||
297 | if (!enable) | 299 | if (enable) |
298 | tmp &= ~RCR1_AIE; | ||
299 | else | ||
300 | tmp |= RCR1_AIE; | 300 | tmp |= RCR1_AIE; |
301 | else | ||
302 | tmp &= ~RCR1_AIE; | ||
301 | 303 | ||
302 | writeb(tmp, rtc->regbase + RCR1); | 304 | writeb(tmp, rtc->regbase + RCR1); |
303 | 305 | ||
@@ -618,6 +620,7 @@ static int sh_rtc_irq_set_freq(struct device *dev, int freq) | |||
618 | { | 620 | { |
619 | if (!is_power_of_2(freq)) | 621 | if (!is_power_of_2(freq)) |
620 | return -EINVAL; | 622 | return -EINVAL; |
623 | |||
621 | return sh_rtc_ioctl(dev, RTC_IRQP_SET, freq); | 624 | return sh_rtc_ioctl(dev, RTC_IRQP_SET, freq); |
622 | } | 625 | } |
623 | 626 | ||
@@ -637,7 +640,8 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev) | |||
637 | struct sh_rtc *rtc; | 640 | struct sh_rtc *rtc; |
638 | struct resource *res; | 641 | struct resource *res; |
639 | struct rtc_time r; | 642 | struct rtc_time r; |
640 | int ret; | 643 | char clk_name[6]; |
644 | int clk_id, ret; | ||
641 | 645 | ||
642 | rtc = kzalloc(sizeof(struct sh_rtc), GFP_KERNEL); | 646 | rtc = kzalloc(sizeof(struct sh_rtc), GFP_KERNEL); |
643 | if (unlikely(!rtc)) | 647 | if (unlikely(!rtc)) |
@@ -652,6 +656,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev) | |||
652 | dev_err(&pdev->dev, "No IRQ resource\n"); | 656 | dev_err(&pdev->dev, "No IRQ resource\n"); |
653 | goto err_badres; | 657 | goto err_badres; |
654 | } | 658 | } |
659 | |||
655 | rtc->periodic_irq = ret; | 660 | rtc->periodic_irq = ret; |
656 | rtc->carry_irq = platform_get_irq(pdev, 1); | 661 | rtc->carry_irq = platform_get_irq(pdev, 1); |
657 | rtc->alarm_irq = platform_get_irq(pdev, 2); | 662 | rtc->alarm_irq = platform_get_irq(pdev, 2); |
@@ -663,7 +668,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev) | |||
663 | goto err_badres; | 668 | goto err_badres; |
664 | } | 669 | } |
665 | 670 | ||
666 | rtc->regsize = res->end - res->start + 1; | 671 | rtc->regsize = resource_size(res); |
667 | 672 | ||
668 | rtc->res = request_mem_region(res->start, rtc->regsize, pdev->name); | 673 | rtc->res = request_mem_region(res->start, rtc->regsize, pdev->name); |
669 | if (unlikely(!rtc->res)) { | 674 | if (unlikely(!rtc->res)) { |
@@ -677,6 +682,26 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev) | |||
677 | goto err_badmap; | 682 | goto err_badmap; |
678 | } | 683 | } |
679 | 684 | ||
685 | clk_id = pdev->id; | ||
686 | /* With a single device, the clock id is still "rtc0" */ | ||
687 | if (clk_id < 0) | ||
688 | clk_id = 0; | ||
689 | |||
690 | snprintf(clk_name, sizeof(clk_name), "rtc%d", clk_id); | ||
691 | |||
692 | rtc->clk = clk_get(&pdev->dev, clk_name); | ||
693 | if (IS_ERR(rtc->clk)) { | ||
694 | /* | ||
695 | * No error handling for rtc->clk intentionally, not all | ||
696 | * platforms will have a unique clock for the RTC, and | ||
697 | * the clk API can handle the struct clk pointer being | ||
698 | * NULL. | ||
699 | */ | ||
700 | rtc->clk = NULL; | ||
701 | } | ||
702 | |||
703 | clk_enable(rtc->clk); | ||
704 | |||
680 | rtc->rtc_dev = rtc_device_register("sh", &pdev->dev, | 705 | rtc->rtc_dev = rtc_device_register("sh", &pdev->dev, |
681 | &sh_rtc_ops, THIS_MODULE); | 706 | &sh_rtc_ops, THIS_MODULE); |
682 | if (IS_ERR(rtc->rtc_dev)) { | 707 | if (IS_ERR(rtc->rtc_dev)) { |
@@ -759,6 +784,8 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev) | |||
759 | return 0; | 784 | return 0; |
760 | 785 | ||
761 | err_unmap: | 786 | err_unmap: |
787 | clk_disable(rtc->clk); | ||
788 | clk_put(rtc->clk); | ||
762 | iounmap(rtc->regbase); | 789 | iounmap(rtc->regbase); |
763 | err_badmap: | 790 | err_badmap: |
764 | release_resource(rtc->res); | 791 | release_resource(rtc->res); |
@@ -780,6 +807,7 @@ static int __devexit sh_rtc_remove(struct platform_device *pdev) | |||
780 | sh_rtc_setcie(&pdev->dev, 0); | 807 | sh_rtc_setcie(&pdev->dev, 0); |
781 | 808 | ||
782 | free_irq(rtc->periodic_irq, rtc); | 809 | free_irq(rtc->periodic_irq, rtc); |
810 | |||
783 | if (rtc->carry_irq > 0) { | 811 | if (rtc->carry_irq > 0) { |
784 | free_irq(rtc->carry_irq, rtc); | 812 | free_irq(rtc->carry_irq, rtc); |
785 | free_irq(rtc->alarm_irq, rtc); | 813 | free_irq(rtc->alarm_irq, rtc); |
@@ -789,6 +817,9 @@ static int __devexit sh_rtc_remove(struct platform_device *pdev) | |||
789 | 817 | ||
790 | iounmap(rtc->regbase); | 818 | iounmap(rtc->regbase); |
791 | 819 | ||
820 | clk_disable(rtc->clk); | ||
821 | clk_put(rtc->clk); | ||
822 | |||
792 | platform_set_drvdata(pdev, NULL); | 823 | platform_set_drvdata(pdev, NULL); |
793 | 824 | ||
794 | kfree(rtc); | 825 | kfree(rtc); |
@@ -802,11 +833,11 @@ static void sh_rtc_set_irq_wake(struct device *dev, int enabled) | |||
802 | struct sh_rtc *rtc = platform_get_drvdata(pdev); | 833 | struct sh_rtc *rtc = platform_get_drvdata(pdev); |
803 | 834 | ||
804 | set_irq_wake(rtc->periodic_irq, enabled); | 835 | set_irq_wake(rtc->periodic_irq, enabled); |
836 | |||
805 | if (rtc->carry_irq > 0) { | 837 | if (rtc->carry_irq > 0) { |
806 | set_irq_wake(rtc->carry_irq, enabled); | 838 | set_irq_wake(rtc->carry_irq, enabled); |
807 | set_irq_wake(rtc->alarm_irq, enabled); | 839 | set_irq_wake(rtc->alarm_irq, enabled); |
808 | } | 840 | } |
809 | |||
810 | } | 841 | } |
811 | 842 | ||
812 | static int sh_rtc_suspend(struct device *dev) | 843 | static int sh_rtc_suspend(struct device *dev) |
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 0570794ccf1..d1815272c43 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
21 | #include <linux/buffer_head.h> | 21 | #include <linux/buffer_head.h> |
22 | #include <linux/hdreg.h> | 22 | #include <linux/hdreg.h> |
23 | #include <linux/async.h> | ||
23 | 24 | ||
24 | #include <asm/ccwdev.h> | 25 | #include <asm/ccwdev.h> |
25 | #include <asm/ebcdic.h> | 26 | #include <asm/ebcdic.h> |
@@ -480,8 +481,10 @@ static void dasd_change_state(struct dasd_device *device) | |||
480 | if (rc && rc != -EAGAIN) | 481 | if (rc && rc != -EAGAIN) |
481 | device->target = device->state; | 482 | device->target = device->state; |
482 | 483 | ||
483 | if (device->state == device->target) | 484 | if (device->state == device->target) { |
484 | wake_up(&dasd_init_waitq); | 485 | wake_up(&dasd_init_waitq); |
486 | dasd_put_device(device); | ||
487 | } | ||
485 | 488 | ||
486 | /* let user-space know that the device status changed */ | 489 | /* let user-space know that the device status changed */ |
487 | kobject_uevent(&device->cdev->dev.kobj, KOBJ_CHANGE); | 490 | kobject_uevent(&device->cdev->dev.kobj, KOBJ_CHANGE); |
@@ -513,12 +516,15 @@ void dasd_kick_device(struct dasd_device *device) | |||
513 | */ | 516 | */ |
514 | void dasd_set_target_state(struct dasd_device *device, int target) | 517 | void dasd_set_target_state(struct dasd_device *device, int target) |
515 | { | 518 | { |
519 | dasd_get_device(device); | ||
516 | /* If we are in probeonly mode stop at DASD_STATE_READY. */ | 520 | /* If we are in probeonly mode stop at DASD_STATE_READY. */ |
517 | if (dasd_probeonly && target > DASD_STATE_READY) | 521 | if (dasd_probeonly && target > DASD_STATE_READY) |
518 | target = DASD_STATE_READY; | 522 | target = DASD_STATE_READY; |
519 | if (device->target != target) { | 523 | if (device->target != target) { |
520 | if (device->state == target) | 524 | if (device->state == target) { |
521 | wake_up(&dasd_init_waitq); | 525 | wake_up(&dasd_init_waitq); |
526 | dasd_put_device(device); | ||
527 | } | ||
522 | device->target = target; | 528 | device->target = target; |
523 | } | 529 | } |
524 | if (device->state != device->target) | 530 | if (device->state != device->target) |
@@ -2148,6 +2154,22 @@ dasd_exit(void) | |||
2148 | * SECTION: common functions for ccw_driver use | 2154 | * SECTION: common functions for ccw_driver use |
2149 | */ | 2155 | */ |
2150 | 2156 | ||
2157 | static void dasd_generic_auto_online(void *data, async_cookie_t cookie) | ||
2158 | { | ||
2159 | struct ccw_device *cdev = data; | ||
2160 | int ret; | ||
2161 | |||
2162 | ret = ccw_device_set_online(cdev); | ||
2163 | if (ret) | ||
2164 | pr_warning("%s: Setting the DASD online failed with rc=%d\n", | ||
2165 | dev_name(&cdev->dev), ret); | ||
2166 | else { | ||
2167 | struct dasd_device *device = dasd_device_from_cdev(cdev); | ||
2168 | wait_event(dasd_init_waitq, _wait_for_device(device)); | ||
2169 | dasd_put_device(device); | ||
2170 | } | ||
2171 | } | ||
2172 | |||
2151 | /* | 2173 | /* |
2152 | * Initial attempt at a probe function. this can be simplified once | 2174 | * Initial attempt at a probe function. this can be simplified once |
2153 | * the other detection code is gone. | 2175 | * the other detection code is gone. |
@@ -2180,10 +2202,7 @@ int dasd_generic_probe(struct ccw_device *cdev, | |||
2180 | */ | 2202 | */ |
2181 | if ((dasd_get_feature(cdev, DASD_FEATURE_INITIAL_ONLINE) > 0 ) || | 2203 | if ((dasd_get_feature(cdev, DASD_FEATURE_INITIAL_ONLINE) > 0 ) || |
2182 | (dasd_autodetect && dasd_busid_known(dev_name(&cdev->dev)) != 0)) | 2204 | (dasd_autodetect && dasd_busid_known(dev_name(&cdev->dev)) != 0)) |
2183 | ret = ccw_device_set_online(cdev); | 2205 | async_schedule(dasd_generic_auto_online, cdev); |
2184 | if (ret) | ||
2185 | pr_warning("%s: Setting the DASD online failed with rc=%d\n", | ||
2186 | dev_name(&cdev->dev), ret); | ||
2187 | return 0; | 2206 | return 0; |
2188 | } | 2207 | } |
2189 | 2208 | ||
@@ -2290,13 +2309,7 @@ int dasd_generic_set_online(struct ccw_device *cdev, | |||
2290 | } else | 2309 | } else |
2291 | pr_debug("dasd_generic device %s found\n", | 2310 | pr_debug("dasd_generic device %s found\n", |
2292 | dev_name(&cdev->dev)); | 2311 | dev_name(&cdev->dev)); |
2293 | |||
2294 | /* FIXME: we have to wait for the root device but we don't want | ||
2295 | * to wait for each single device but for all at once. */ | ||
2296 | wait_event(dasd_init_waitq, _wait_for_device(device)); | ||
2297 | |||
2298 | dasd_put_device(device); | 2312 | dasd_put_device(device); |
2299 | |||
2300 | return rc; | 2313 | return rc; |
2301 | } | 2314 | } |
2302 | 2315 | ||
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 21254793c60..cb52da033f0 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c | |||
@@ -2019,15 +2019,23 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_cmd_track( | |||
2019 | ccw++; | 2019 | ccw++; |
2020 | recid += count; | 2020 | recid += count; |
2021 | new_track = 0; | 2021 | new_track = 0; |
2022 | /* first idaw for a ccw may start anywhere */ | ||
2023 | if (!idaw_dst) | ||
2024 | idaw_dst = dst; | ||
2022 | } | 2025 | } |
2023 | /* If we start a new idaw, everything is fine and the | 2026 | /* If we start a new idaw, we must make sure that it |
2024 | * start of the new idaw is the start of this segment. | 2027 | * starts on an IDA_BLOCK_SIZE boundary. |
2025 | * If we continue an idaw, we must make sure that the | 2028 | * If we continue an idaw, we must make sure that the |
2026 | * current segment begins where the so far accumulated | 2029 | * current segment begins where the so far accumulated |
2027 | * idaw ends | 2030 | * idaw ends |
2028 | */ | 2031 | */ |
2029 | if (!idaw_dst) | 2032 | if (!idaw_dst) { |
2030 | idaw_dst = dst; | 2033 | if (__pa(dst) & (IDA_BLOCK_SIZE-1)) { |
2034 | dasd_sfree_request(cqr, startdev); | ||
2035 | return ERR_PTR(-ERANGE); | ||
2036 | } else | ||
2037 | idaw_dst = dst; | ||
2038 | } | ||
2031 | if ((idaw_dst + idaw_len) != dst) { | 2039 | if ((idaw_dst + idaw_len) != dst) { |
2032 | dasd_sfree_request(cqr, startdev); | 2040 | dasd_sfree_request(cqr, startdev); |
2033 | return ERR_PTR(-ERANGE); | 2041 | return ERR_PTR(-ERANGE); |
diff --git a/drivers/s390/char/tape.h b/drivers/s390/char/tape.h index c07809c8016..5469e099597 100644 --- a/drivers/s390/char/tape.h +++ b/drivers/s390/char/tape.h | |||
@@ -285,7 +285,7 @@ extern int tape_mtop(struct tape_device *, int, int); | |||
285 | extern void tape_state_set(struct tape_device *, enum tape_state); | 285 | extern void tape_state_set(struct tape_device *, enum tape_state); |
286 | 286 | ||
287 | extern int tape_generic_online(struct tape_device *, struct tape_discipline *); | 287 | extern int tape_generic_online(struct tape_device *, struct tape_discipline *); |
288 | extern int tape_generic_offline(struct tape_device *device); | 288 | extern int tape_generic_offline(struct ccw_device *); |
289 | 289 | ||
290 | /* Externals from tape_devmap.c */ | 290 | /* Externals from tape_devmap.c */ |
291 | extern int tape_generic_probe(struct ccw_device *); | 291 | extern int tape_generic_probe(struct ccw_device *); |
diff --git a/drivers/s390/char/tape_34xx.c b/drivers/s390/char/tape_34xx.c index 807ded5eb04..5f8e8ef43dd 100644 --- a/drivers/s390/char/tape_34xx.c +++ b/drivers/s390/char/tape_34xx.c | |||
@@ -1294,12 +1294,6 @@ tape_34xx_online(struct ccw_device *cdev) | |||
1294 | ); | 1294 | ); |
1295 | } | 1295 | } |
1296 | 1296 | ||
1297 | static int | ||
1298 | tape_34xx_offline(struct ccw_device *cdev) | ||
1299 | { | ||
1300 | return tape_generic_offline(cdev->dev.driver_data); | ||
1301 | } | ||
1302 | |||
1303 | static struct ccw_driver tape_34xx_driver = { | 1297 | static struct ccw_driver tape_34xx_driver = { |
1304 | .name = "tape_34xx", | 1298 | .name = "tape_34xx", |
1305 | .owner = THIS_MODULE, | 1299 | .owner = THIS_MODULE, |
@@ -1307,7 +1301,7 @@ static struct ccw_driver tape_34xx_driver = { | |||
1307 | .probe = tape_generic_probe, | 1301 | .probe = tape_generic_probe, |
1308 | .remove = tape_generic_remove, | 1302 | .remove = tape_generic_remove, |
1309 | .set_online = tape_34xx_online, | 1303 | .set_online = tape_34xx_online, |
1310 | .set_offline = tape_34xx_offline, | 1304 | .set_offline = tape_generic_offline, |
1311 | }; | 1305 | }; |
1312 | 1306 | ||
1313 | static int | 1307 | static int |
diff --git a/drivers/s390/char/tape_3590.c b/drivers/s390/char/tape_3590.c index fc1d9129414..823b05bd0dd 100644 --- a/drivers/s390/char/tape_3590.c +++ b/drivers/s390/char/tape_3590.c | |||
@@ -1707,19 +1707,13 @@ tape_3590_online(struct ccw_device *cdev) | |||
1707 | &tape_discipline_3590); | 1707 | &tape_discipline_3590); |
1708 | } | 1708 | } |
1709 | 1709 | ||
1710 | static int | ||
1711 | tape_3590_offline(struct ccw_device *cdev) | ||
1712 | { | ||
1713 | return tape_generic_offline(cdev->dev.driver_data); | ||
1714 | } | ||
1715 | |||
1716 | static struct ccw_driver tape_3590_driver = { | 1710 | static struct ccw_driver tape_3590_driver = { |
1717 | .name = "tape_3590", | 1711 | .name = "tape_3590", |
1718 | .owner = THIS_MODULE, | 1712 | .owner = THIS_MODULE, |
1719 | .ids = tape_3590_ids, | 1713 | .ids = tape_3590_ids, |
1720 | .probe = tape_generic_probe, | 1714 | .probe = tape_generic_probe, |
1721 | .remove = tape_generic_remove, | 1715 | .remove = tape_generic_remove, |
1722 | .set_offline = tape_3590_offline, | 1716 | .set_offline = tape_generic_offline, |
1723 | .set_online = tape_3590_online, | 1717 | .set_online = tape_3590_online, |
1724 | }; | 1718 | }; |
1725 | 1719 | ||
diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c index 08c09d3503c..8a109f3b69c 100644 --- a/drivers/s390/char/tape_core.c +++ b/drivers/s390/char/tape_core.c | |||
@@ -387,8 +387,11 @@ tape_cleanup_device(struct tape_device *device) | |||
387 | * Manual offline is only allowed while the drive is not in use. | 387 | * Manual offline is only allowed while the drive is not in use. |
388 | */ | 388 | */ |
389 | int | 389 | int |
390 | tape_generic_offline(struct tape_device *device) | 390 | tape_generic_offline(struct ccw_device *cdev) |
391 | { | 391 | { |
392 | struct tape_device *device; | ||
393 | |||
394 | device = cdev->dev.driver_data; | ||
392 | if (!device) { | 395 | if (!device) { |
393 | return -ENODEV; | 396 | return -ENODEV; |
394 | } | 397 | } |
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c index 9e8a2914259..accd957454e 100644 --- a/drivers/s390/cio/qdio_main.c +++ b/drivers/s390/cio/qdio_main.c | |||
@@ -881,42 +881,6 @@ no_handler: | |||
881 | qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED); | 881 | qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED); |
882 | } | 882 | } |
883 | 883 | ||
884 | static void qdio_call_shutdown(struct work_struct *work) | ||
885 | { | ||
886 | struct ccw_device_private *priv; | ||
887 | struct ccw_device *cdev; | ||
888 | |||
889 | priv = container_of(work, struct ccw_device_private, kick_work); | ||
890 | cdev = priv->cdev; | ||
891 | qdio_shutdown(cdev, QDIO_FLAG_CLEANUP_USING_CLEAR); | ||
892 | put_device(&cdev->dev); | ||
893 | } | ||
894 | |||
895 | static void qdio_int_error(struct ccw_device *cdev) | ||
896 | { | ||
897 | struct qdio_irq *irq_ptr = cdev->private->qdio_data; | ||
898 | |||
899 | switch (irq_ptr->state) { | ||
900 | case QDIO_IRQ_STATE_INACTIVE: | ||
901 | case QDIO_IRQ_STATE_CLEANUP: | ||
902 | qdio_set_state(irq_ptr, QDIO_IRQ_STATE_ERR); | ||
903 | break; | ||
904 | case QDIO_IRQ_STATE_ESTABLISHED: | ||
905 | case QDIO_IRQ_STATE_ACTIVE: | ||
906 | qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED); | ||
907 | if (get_device(&cdev->dev)) { | ||
908 | /* Can't call shutdown from interrupt context. */ | ||
909 | PREPARE_WORK(&cdev->private->kick_work, | ||
910 | qdio_call_shutdown); | ||
911 | queue_work(ccw_device_work, &cdev->private->kick_work); | ||
912 | } | ||
913 | break; | ||
914 | default: | ||
915 | WARN_ON(1); | ||
916 | } | ||
917 | wake_up(&cdev->private->wait_q); | ||
918 | } | ||
919 | |||
920 | static int qdio_establish_check_errors(struct ccw_device *cdev, int cstat, | 884 | static int qdio_establish_check_errors(struct ccw_device *cdev, int cstat, |
921 | int dstat) | 885 | int dstat) |
922 | { | 886 | { |
@@ -973,10 +937,8 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm, | |||
973 | switch (PTR_ERR(irb)) { | 937 | switch (PTR_ERR(irb)) { |
974 | case -EIO: | 938 | case -EIO: |
975 | DBF_ERROR("%4x IO error", irq_ptr->schid.sch_no); | 939 | DBF_ERROR("%4x IO error", irq_ptr->schid.sch_no); |
976 | return; | 940 | qdio_set_state(irq_ptr, QDIO_IRQ_STATE_ERR); |
977 | case -ETIMEDOUT: | 941 | wake_up(&cdev->private->wait_q); |
978 | DBF_ERROR("%4x IO timeout", irq_ptr->schid.sch_no); | ||
979 | qdio_int_error(cdev); | ||
980 | return; | 942 | return; |
981 | default: | 943 | default: |
982 | WARN_ON(1); | 944 | WARN_ON(1); |
@@ -1001,7 +963,6 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm, | |||
1001 | case QDIO_IRQ_STATE_ACTIVE: | 963 | case QDIO_IRQ_STATE_ACTIVE: |
1002 | if (cstat & SCHN_STAT_PCI) { | 964 | if (cstat & SCHN_STAT_PCI) { |
1003 | qdio_int_handler_pci(irq_ptr); | 965 | qdio_int_handler_pci(irq_ptr); |
1004 | /* no state change so no need to wake up wait_q */ | ||
1005 | return; | 966 | return; |
1006 | } | 967 | } |
1007 | if ((cstat & ~SCHN_STAT_PCI) || dstat) { | 968 | if ((cstat & ~SCHN_STAT_PCI) || dstat) { |
diff --git a/drivers/sbus/char/jsflash.c b/drivers/sbus/char/jsflash.c index e6d1fc8c54f..a85ad05e854 100644 --- a/drivers/sbus/char/jsflash.c +++ b/drivers/sbus/char/jsflash.c | |||
@@ -383,18 +383,22 @@ static int jsf_ioctl_program(void __user *arg) | |||
383 | return 0; | 383 | return 0; |
384 | } | 384 | } |
385 | 385 | ||
386 | static int jsf_ioctl(struct inode *inode, struct file *f, unsigned int cmd, | 386 | static long jsf_ioctl(struct file *f, unsigned int cmd, unsigned long arg) |
387 | unsigned long arg) | ||
388 | { | 387 | { |
388 | lock_kernel(); | ||
389 | int error = -ENOTTY; | 389 | int error = -ENOTTY; |
390 | void __user *argp = (void __user *)arg; | 390 | void __user *argp = (void __user *)arg; |
391 | 391 | ||
392 | if (!capable(CAP_SYS_ADMIN)) | 392 | if (!capable(CAP_SYS_ADMIN)) { |
393 | unlock_kernel(); | ||
393 | return -EPERM; | 394 | return -EPERM; |
395 | } | ||
394 | switch (cmd) { | 396 | switch (cmd) { |
395 | case JSFLASH_IDENT: | 397 | case JSFLASH_IDENT: |
396 | if (copy_to_user(argp, &jsf0.id, JSFIDSZ)) | 398 | if (copy_to_user(argp, &jsf0.id, JSFIDSZ)) { |
399 | unlock_kernel(); | ||
397 | return -EFAULT; | 400 | return -EFAULT; |
401 | } | ||
398 | break; | 402 | break; |
399 | case JSFLASH_ERASE: | 403 | case JSFLASH_ERASE: |
400 | error = jsf_ioctl_erase(arg); | 404 | error = jsf_ioctl_erase(arg); |
@@ -404,6 +408,7 @@ static int jsf_ioctl(struct inode *inode, struct file *f, unsigned int cmd, | |||
404 | break; | 408 | break; |
405 | } | 409 | } |
406 | 410 | ||
411 | unlock_kernel(); | ||
407 | return error; | 412 | return error; |
408 | } | 413 | } |
409 | 414 | ||
@@ -439,7 +444,7 @@ static const struct file_operations jsf_fops = { | |||
439 | .llseek = jsf_lseek, | 444 | .llseek = jsf_lseek, |
440 | .read = jsf_read, | 445 | .read = jsf_read, |
441 | .write = jsf_write, | 446 | .write = jsf_write, |
442 | .ioctl = jsf_ioctl, | 447 | .unlocked_ioctl = jsf_ioctl, |
443 | .mmap = jsf_mmap, | 448 | .mmap = jsf_mmap, |
444 | .open = jsf_open, | 449 | .open = jsf_open, |
445 | .release = jsf_release, | 450 | .release = jsf_release, |
diff --git a/drivers/sbus/char/uctrl.c b/drivers/sbus/char/uctrl.c index 27993c37775..2c56fd56ec6 100644 --- a/drivers/sbus/char/uctrl.c +++ b/drivers/sbus/char/uctrl.c | |||
@@ -197,9 +197,8 @@ static struct uctrl_driver { | |||
197 | static void uctrl_get_event_status(struct uctrl_driver *); | 197 | static void uctrl_get_event_status(struct uctrl_driver *); |
198 | static void uctrl_get_external_status(struct uctrl_driver *); | 198 | static void uctrl_get_external_status(struct uctrl_driver *); |
199 | 199 | ||
200 | static int | 200 | static long |
201 | uctrl_ioctl(struct inode *inode, struct file *file, | 201 | uctrl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
202 | unsigned int cmd, unsigned long arg) | ||
203 | { | 202 | { |
204 | switch (cmd) { | 203 | switch (cmd) { |
205 | default: | 204 | default: |
@@ -226,7 +225,7 @@ static irqreturn_t uctrl_interrupt(int irq, void *dev_id) | |||
226 | static const struct file_operations uctrl_fops = { | 225 | static const struct file_operations uctrl_fops = { |
227 | .owner = THIS_MODULE, | 226 | .owner = THIS_MODULE, |
228 | .llseek = no_llseek, | 227 | .llseek = no_llseek, |
229 | .ioctl = uctrl_ioctl, | 228 | .unlocked_ioctl = uctrl_ioctl, |
230 | .open = uctrl_open, | 229 | .open = uctrl_open, |
231 | }; | 230 | }; |
232 | 231 | ||
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index fdb14ec4fd4..8b7983aba8f 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c | |||
@@ -2234,10 +2234,10 @@ static int twa_resume(struct pci_dev *pdev) | |||
2234 | pci_set_master(pdev); | 2234 | pci_set_master(pdev); |
2235 | pci_try_set_mwi(pdev); | 2235 | pci_try_set_mwi(pdev); |
2236 | 2236 | ||
2237 | if (pci_set_dma_mask(pdev, DMA_64BIT_MASK) | 2237 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) |
2238 | || pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) | 2238 | || pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) |
2239 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) | 2239 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) |
2240 | || pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { | 2240 | || pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { |
2241 | TW_PRINTK(host, TW_DRIVER, 0x40, "Failed to set dma mask during resume"); | 2241 | TW_PRINTK(host, TW_DRIVER, 0x40, "Failed to set dma mask during resume"); |
2242 | retval = -ENODEV; | 2242 | retval = -ENODEV; |
2243 | goto out_disable_device; | 2243 | goto out_disable_device; |
diff --git a/drivers/scsi/a4000t.c b/drivers/scsi/a4000t.c index 61af3d91ac8..e3519fa5a3b 100644 --- a/drivers/scsi/a4000t.c +++ b/drivers/scsi/a4000t.c | |||
@@ -129,7 +129,7 @@ static int __init a4000t_scsi_init(void) | |||
129 | a4000t_scsi_device = platform_device_register_simple("a4000t-scsi", | 129 | a4000t_scsi_device = platform_device_register_simple("a4000t-scsi", |
130 | -1, NULL, 0); | 130 | -1, NULL, 0); |
131 | if (IS_ERR(a4000t_scsi_device)) { | 131 | if (IS_ERR(a4000t_scsi_device)) { |
132 | platform_driver_register(&a4000t_scsi_driver); | 132 | platform_driver_unregister(&a4000t_scsi_driver); |
133 | return PTR_ERR(a4000t_scsi_device); | 133 | return PTR_ERR(a4000t_scsi_device); |
134 | } | 134 | } |
135 | 135 | ||
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index 280261c451d..2a889853a10 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c | |||
@@ -1378,7 +1378,7 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
1378 | if (dev->nondasd_support && !dev->in_reset) | 1378 | if (dev->nondasd_support && !dev->in_reset) |
1379 | printk(KERN_INFO "%s%d: Non-DASD support enabled.\n",dev->name, dev->id); | 1379 | printk(KERN_INFO "%s%d: Non-DASD support enabled.\n",dev->name, dev->id); |
1380 | 1380 | ||
1381 | if (dma_get_required_mask(&dev->pdev->dev) > DMA_32BIT_MASK) | 1381 | if (dma_get_required_mask(&dev->pdev->dev) > DMA_BIT_MASK(32)) |
1382 | dev->needs_dac = 1; | 1382 | dev->needs_dac = 1; |
1383 | dev->dac_support = 0; | 1383 | dev->dac_support = 0; |
1384 | if ((sizeof(dma_addr_t) > 4) && dev->needs_dac && | 1384 | if ((sizeof(dma_addr_t) > 4) && dev->needs_dac && |
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c index b1bd3fc7bae..36fd2e75da1 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c | |||
@@ -1394,7 +1394,7 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd, | |||
1394 | */ | 1394 | */ |
1395 | cmd->sense_buffer[8] = 0; /* Information */ | 1395 | cmd->sense_buffer[8] = 0; /* Information */ |
1396 | cmd->sense_buffer[9] = 0xa; /* Add. length */ | 1396 | cmd->sense_buffer[9] = 0xa; /* Add. length */ |
1397 | do_div(bghm, cmd->device->sector_size); | 1397 | bghm /= cmd->device->sector_size; |
1398 | 1398 | ||
1399 | failing_sector = scsi_get_lba(cmd); | 1399 | failing_sector = scsi_get_lba(cmd); |
1400 | failing_sector += bghm; | 1400 | failing_sector += bghm; |
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c index 52427a8324f..a91f5143cea 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_base.c +++ b/drivers/scsi/mpt2sas/mpt2sas_base.c | |||
@@ -855,9 +855,9 @@ _base_config_dma_addressing(struct MPT2SAS_ADAPTER *ioc, struct pci_dev *pdev) | |||
855 | if (sizeof(dma_addr_t) > 4) { | 855 | if (sizeof(dma_addr_t) > 4) { |
856 | const uint64_t required_mask = | 856 | const uint64_t required_mask = |
857 | dma_get_required_mask(&pdev->dev); | 857 | dma_get_required_mask(&pdev->dev); |
858 | if ((required_mask > DMA_32BIT_MASK) && !pci_set_dma_mask(pdev, | 858 | if ((required_mask > DMA_BIT_MASK(32)) && !pci_set_dma_mask(pdev, |
859 | DMA_64BIT_MASK) && !pci_set_consistent_dma_mask(pdev, | 859 | DMA_BIT_MASK(64)) && !pci_set_consistent_dma_mask(pdev, |
860 | DMA_64BIT_MASK)) { | 860 | DMA_BIT_MASK(64))) { |
861 | ioc->base_add_sg_single = &_base_add_sg_single_64; | 861 | ioc->base_add_sg_single = &_base_add_sg_single_64; |
862 | ioc->sge_size = sizeof(Mpi2SGESimple64_t); | 862 | ioc->sge_size = sizeof(Mpi2SGESimple64_t); |
863 | desc = "64"; | 863 | desc = "64"; |
@@ -865,8 +865,8 @@ _base_config_dma_addressing(struct MPT2SAS_ADAPTER *ioc, struct pci_dev *pdev) | |||
865 | } | 865 | } |
866 | } | 866 | } |
867 | 867 | ||
868 | if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK) | 868 | if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) |
869 | && !pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { | 869 | && !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { |
870 | ioc->base_add_sg_single = &_base_add_sg_single_32; | 870 | ioc->base_add_sg_single = &_base_add_sg_single_32; |
871 | ioc->sge_size = sizeof(Mpi2SGESimple32_t); | 871 | ioc->sge_size = sizeof(Mpi2SGESimple32_t); |
872 | desc = "32"; | 872 | desc = "32"; |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index a14d245a66b..6f51ca485f3 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
@@ -180,8 +180,6 @@ int scsi_complete_async_scans(void) | |||
180 | spin_unlock(&async_scan_lock); | 180 | spin_unlock(&async_scan_lock); |
181 | 181 | ||
182 | kfree(data); | 182 | kfree(data); |
183 | /* Synchronize async operations globally */ | ||
184 | async_synchronize_full(); | ||
185 | return 0; | 183 | return 0; |
186 | } | 184 | } |
187 | 185 | ||
diff --git a/drivers/scsi/scsi_wait_scan.c b/drivers/scsi/scsi_wait_scan.c index 2f21af21269..74708fcaf82 100644 --- a/drivers/scsi/scsi_wait_scan.c +++ b/drivers/scsi/scsi_wait_scan.c | |||
@@ -11,10 +11,21 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
14 | #include <linux/device.h> | ||
14 | #include <scsi/scsi_scan.h> | 15 | #include <scsi/scsi_scan.h> |
15 | 16 | ||
16 | static int __init wait_scan_init(void) | 17 | static int __init wait_scan_init(void) |
17 | { | 18 | { |
19 | /* | ||
20 | * First we need to wait for device probing to finish; | ||
21 | * the drivers we just loaded might just still be probing | ||
22 | * and might not yet have reached the scsi async scanning | ||
23 | */ | ||
24 | wait_for_device_probe(); | ||
25 | /* | ||
26 | * and then we wait for the actual asynchronous scsi scan | ||
27 | * to finish. | ||
28 | */ | ||
18 | scsi_complete_async_scans(); | 29 | scsi_complete_async_scans(); |
19 | return 0; | 30 | return 0; |
20 | } | 31 | } |
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 7ddff3f5508..938bc1b6c3f 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c | |||
@@ -771,8 +771,6 @@ static int pci_netmos_init(struct pci_dev *dev) | |||
771 | } | 771 | } |
772 | 772 | ||
773 | /* | 773 | /* |
774 | * ITE support by Niels de Vos <niels.devos@wincor-nixdorf.com> | ||
775 | * | ||
776 | * These chips are available with optionally one parallel port and up to | 774 | * These chips are available with optionally one parallel port and up to |
777 | * two serial ports. Unfortunately they all have the same product id. | 775 | * two serial ports. Unfortunately they all have the same product id. |
778 | * | 776 | * |
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 18ba812a4f8..d86123e0339 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c | |||
@@ -166,7 +166,7 @@ static void bfin_serial_start_tx(struct uart_port *port) | |||
166 | struct tty_struct *tty = uart->port.info->port.tty; | 166 | struct tty_struct *tty = uart->port.info->port.tty; |
167 | 167 | ||
168 | #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS | 168 | #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS |
169 | if (uart->scts && (!bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) { | 169 | if (uart->scts && !(bfin_serial_get_mctrl(&uart->port) & TIOCM_CTS)) { |
170 | uart->scts = 0; | 170 | uart->scts = 0; |
171 | uart_handle_cts_change(&uart->port, uart->scts); | 171 | uart_handle_cts_change(&uart->port, uart->scts); |
172 | } | 172 | } |
@@ -368,7 +368,7 @@ static irqreturn_t bfin_serial_tx_int(int irq, void *dev_id) | |||
368 | struct bfin_serial_port *uart = dev_id; | 368 | struct bfin_serial_port *uart = dev_id; |
369 | 369 | ||
370 | #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS | 370 | #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS |
371 | if (uart->scts && (!bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) { | 371 | if (uart->scts && !(bfin_serial_get_mctrl(&uart->port) & TIOCM_CTS)) { |
372 | uart->scts = 0; | 372 | uart->scts = 0; |
373 | uart_handle_cts_change(&uart->port, uart->scts); | 373 | uart_handle_cts_change(&uart->port, uart->scts); |
374 | } | 374 | } |
@@ -504,7 +504,7 @@ static irqreturn_t bfin_serial_dma_tx_int(int irq, void *dev_id) | |||
504 | struct circ_buf *xmit = &uart->port.info->xmit; | 504 | struct circ_buf *xmit = &uart->port.info->xmit; |
505 | 505 | ||
506 | #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS | 506 | #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS |
507 | if (uart->scts && (!bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) { | 507 | if (uart->scts && !(bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) { |
508 | uart->scts = 0; | 508 | uart->scts = 0; |
509 | uart_handle_cts_change(&uart->port, uart->scts); | 509 | uart_handle_cts_change(&uart->port, uart->scts); |
510 | } | 510 | } |
diff --git a/drivers/serial/samsung.c b/drivers/serial/samsung.c index 41ac94872b8..e06686ae858 100644 --- a/drivers/serial/samsung.c +++ b/drivers/serial/samsung.c | |||
@@ -127,7 +127,7 @@ static void s3c24xx_serial_stop_tx(struct uart_port *port) | |||
127 | struct s3c24xx_uart_port *ourport = to_ourport(port); | 127 | struct s3c24xx_uart_port *ourport = to_ourport(port); |
128 | 128 | ||
129 | if (tx_enabled(port)) { | 129 | if (tx_enabled(port)) { |
130 | disable_irq(ourport->tx_irq); | 130 | disable_irq_nosync(ourport->tx_irq); |
131 | tx_enabled(port) = 0; | 131 | tx_enabled(port) = 0; |
132 | if (port->flags & UPF_CONS_FLOW) | 132 | if (port->flags & UPF_CONS_FLOW) |
133 | s3c24xx_serial_rx_enable(port); | 133 | s3c24xx_serial_rx_enable(port); |
@@ -154,7 +154,7 @@ static void s3c24xx_serial_stop_rx(struct uart_port *port) | |||
154 | 154 | ||
155 | if (rx_enabled(port)) { | 155 | if (rx_enabled(port)) { |
156 | dbg("s3c24xx_serial_stop_rx: port=%p\n", port); | 156 | dbg("s3c24xx_serial_stop_rx: port=%p\n", port); |
157 | disable_irq(ourport->rx_irq); | 157 | disable_irq_nosync(ourport->rx_irq); |
158 | rx_enabled(port) = 0; | 158 | rx_enabled(port) = 0; |
159 | } | 159 | } |
160 | } | 160 | } |
diff --git a/drivers/sh/intc.c b/drivers/sh/intc.c index 7fb9b5c4669..12d13d99b6f 100644 --- a/drivers/sh/intc.c +++ b/drivers/sh/intc.c | |||
@@ -44,6 +44,7 @@ struct intc_handle_int { | |||
44 | struct intc_desc_int { | 44 | struct intc_desc_int { |
45 | struct list_head list; | 45 | struct list_head list; |
46 | struct sys_device sysdev; | 46 | struct sys_device sysdev; |
47 | pm_message_t state; | ||
47 | unsigned long *reg; | 48 | unsigned long *reg; |
48 | #ifdef CONFIG_SMP | 49 | #ifdef CONFIG_SMP |
49 | unsigned long *smp; | 50 | unsigned long *smp; |
@@ -786,18 +787,44 @@ static int intc_suspend(struct sys_device *dev, pm_message_t state) | |||
786 | /* get intc controller associated with this sysdev */ | 787 | /* get intc controller associated with this sysdev */ |
787 | d = container_of(dev, struct intc_desc_int, sysdev); | 788 | d = container_of(dev, struct intc_desc_int, sysdev); |
788 | 789 | ||
789 | /* enable wakeup irqs belonging to this intc controller */ | 790 | switch (state.event) { |
790 | for_each_irq_desc(irq, desc) { | 791 | case PM_EVENT_ON: |
791 | if ((desc->status & IRQ_WAKEUP) && (desc->chip == &d->chip)) | 792 | if (d->state.event != PM_EVENT_FREEZE) |
792 | intc_enable(irq); | 793 | break; |
794 | for_each_irq_desc(irq, desc) { | ||
795 | if (desc->chip != &d->chip) | ||
796 | continue; | ||
797 | if (desc->status & IRQ_DISABLED) | ||
798 | intc_disable(irq); | ||
799 | else | ||
800 | intc_enable(irq); | ||
801 | } | ||
802 | break; | ||
803 | case PM_EVENT_FREEZE: | ||
804 | /* nothing has to be done */ | ||
805 | break; | ||
806 | case PM_EVENT_SUSPEND: | ||
807 | /* enable wakeup irqs belonging to this intc controller */ | ||
808 | for_each_irq_desc(irq, desc) { | ||
809 | if ((desc->status & IRQ_WAKEUP) && (desc->chip == &d->chip)) | ||
810 | intc_enable(irq); | ||
811 | } | ||
812 | break; | ||
793 | } | 813 | } |
814 | d->state = state; | ||
794 | 815 | ||
795 | return 0; | 816 | return 0; |
796 | } | 817 | } |
797 | 818 | ||
819 | static int intc_resume(struct sys_device *dev) | ||
820 | { | ||
821 | return intc_suspend(dev, PMSG_ON); | ||
822 | } | ||
823 | |||
798 | static struct sysdev_class intc_sysdev_class = { | 824 | static struct sysdev_class intc_sysdev_class = { |
799 | .name = "intc", | 825 | .name = "intc", |
800 | .suspend = intc_suspend, | 826 | .suspend = intc_suspend, |
827 | .resume = intc_resume, | ||
801 | }; | 828 | }; |
802 | 829 | ||
803 | /* register this intc as sysdev to allow suspend/resume */ | 830 | /* register this intc as sysdev to allow suspend/resume */ |
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c index c1688c71f05..885194a0741 100644 --- a/drivers/spi/pxa2xx_spi.c +++ b/drivers/spi/pxa2xx_spi.c | |||
@@ -195,7 +195,7 @@ static void cs_deassert(struct driver_data *drv_data) | |||
195 | struct chip_data *chip = drv_data->cur_chip; | 195 | struct chip_data *chip = drv_data->cur_chip; |
196 | 196 | ||
197 | if (chip->cs_control) { | 197 | if (chip->cs_control) { |
198 | chip->cs_control(PXA2XX_CS_ASSERT); | 198 | chip->cs_control(PXA2XX_CS_DEASSERT); |
199 | return; | 199 | return; |
200 | } | 200 | } |
201 | 201 | ||
@@ -213,7 +213,7 @@ static int flush(struct driver_data *drv_data) | |||
213 | while (read_SSSR(reg) & SSSR_RNE) { | 213 | while (read_SSSR(reg) & SSSR_RNE) { |
214 | read_SSDR(reg); | 214 | read_SSDR(reg); |
215 | } | 215 | } |
216 | } while ((read_SSSR(reg) & SSSR_BSY) && limit--); | 216 | } while ((read_SSSR(reg) & SSSR_BSY) && --limit); |
217 | write_SSSR(SSSR_ROR, reg); | 217 | write_SSSR(SSSR_ROR, reg); |
218 | 218 | ||
219 | return limit; | 219 | return limit; |
@@ -484,7 +484,7 @@ static int wait_ssp_rx_stall(void const __iomem *ioaddr) | |||
484 | { | 484 | { |
485 | unsigned long limit = loops_per_jiffy << 1; | 485 | unsigned long limit = loops_per_jiffy << 1; |
486 | 486 | ||
487 | while ((read_SSSR(ioaddr) & SSSR_BSY) && limit--) | 487 | while ((read_SSSR(ioaddr) & SSSR_BSY) && --limit) |
488 | cpu_relax(); | 488 | cpu_relax(); |
489 | 489 | ||
490 | return limit; | 490 | return limit; |
@@ -494,7 +494,7 @@ static int wait_dma_channel_stop(int channel) | |||
494 | { | 494 | { |
495 | unsigned long limit = loops_per_jiffy << 1; | 495 | unsigned long limit = loops_per_jiffy << 1; |
496 | 496 | ||
497 | while (!(DCSR(channel) & DCSR_STOPSTATE) && limit--) | 497 | while (!(DCSR(channel) & DCSR_STOPSTATE) && --limit) |
498 | cpu_relax(); | 498 | cpu_relax(); |
499 | 499 | ||
500 | return limit; | 500 | return limit; |
@@ -1700,6 +1700,13 @@ static int pxa2xx_spi_resume(struct platform_device *pdev) | |||
1700 | struct ssp_device *ssp = drv_data->ssp; | 1700 | struct ssp_device *ssp = drv_data->ssp; |
1701 | int status = 0; | 1701 | int status = 0; |
1702 | 1702 | ||
1703 | if (drv_data->rx_channel != -1) | ||
1704 | DRCMR(drv_data->ssp->drcmr_rx) = | ||
1705 | DRCMR_MAPVLD | drv_data->rx_channel; | ||
1706 | if (drv_data->tx_channel != -1) | ||
1707 | DRCMR(drv_data->ssp->drcmr_tx) = | ||
1708 | DRCMR_MAPVLD | drv_data->tx_channel; | ||
1709 | |||
1703 | /* Enable the SSP clock */ | 1710 | /* Enable the SSP clock */ |
1704 | clk_enable(ssp->clk); | 1711 | clk_enable(ssp->clk); |
1705 | 1712 | ||
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 643908b74bc..8eba98c8ed1 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
@@ -658,7 +658,7 @@ int spi_write_then_read(struct spi_device *spi, | |||
658 | 658 | ||
659 | int status; | 659 | int status; |
660 | struct spi_message message; | 660 | struct spi_message message; |
661 | struct spi_transfer x; | 661 | struct spi_transfer x[2]; |
662 | u8 *local_buf; | 662 | u8 *local_buf; |
663 | 663 | ||
664 | /* Use preallocated DMA-safe buffer. We can't avoid copying here, | 664 | /* Use preallocated DMA-safe buffer. We can't avoid copying here, |
@@ -669,9 +669,15 @@ int spi_write_then_read(struct spi_device *spi, | |||
669 | return -EINVAL; | 669 | return -EINVAL; |
670 | 670 | ||
671 | spi_message_init(&message); | 671 | spi_message_init(&message); |
672 | memset(&x, 0, sizeof x); | 672 | memset(x, 0, sizeof x); |
673 | x.len = n_tx + n_rx; | 673 | if (n_tx) { |
674 | spi_message_add_tail(&x, &message); | 674 | x[0].len = n_tx; |
675 | spi_message_add_tail(&x[0], &message); | ||
676 | } | ||
677 | if (n_rx) { | ||
678 | x[1].len = n_rx; | ||
679 | spi_message_add_tail(&x[1], &message); | ||
680 | } | ||
675 | 681 | ||
676 | /* ... unless someone else is using the pre-allocated buffer */ | 682 | /* ... unless someone else is using the pre-allocated buffer */ |
677 | if (!mutex_trylock(&lock)) { | 683 | if (!mutex_trylock(&lock)) { |
@@ -682,15 +688,15 @@ int spi_write_then_read(struct spi_device *spi, | |||
682 | local_buf = buf; | 688 | local_buf = buf; |
683 | 689 | ||
684 | memcpy(local_buf, txbuf, n_tx); | 690 | memcpy(local_buf, txbuf, n_tx); |
685 | x.tx_buf = local_buf; | 691 | x[0].tx_buf = local_buf; |
686 | x.rx_buf = local_buf; | 692 | x[1].rx_buf = local_buf + n_tx; |
687 | 693 | ||
688 | /* do the i/o */ | 694 | /* do the i/o */ |
689 | status = spi_sync(spi, &message); | 695 | status = spi_sync(spi, &message); |
690 | if (status == 0) | 696 | if (status == 0) |
691 | memcpy(rxbuf, x.rx_buf + n_tx, n_rx); | 697 | memcpy(rxbuf, x[1].rx_buf, n_rx); |
692 | 698 | ||
693 | if (x.tx_buf == buf) | 699 | if (x[0].tx_buf == buf) |
694 | mutex_unlock(&lock); | 700 | mutex_unlock(&lock); |
695 | else | 701 | else |
696 | kfree(local_buf); | 702 | kfree(local_buf); |
diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c index 79e90fed27d..299d29d1dad 100644 --- a/drivers/staging/android/binder.c +++ b/drivers/staging/android/binder.c | |||
@@ -41,6 +41,8 @@ static int binder_last_id; | |||
41 | static struct proc_dir_entry *binder_proc_dir_entry_root; | 41 | static struct proc_dir_entry *binder_proc_dir_entry_root; |
42 | static struct proc_dir_entry *binder_proc_dir_entry_proc; | 42 | static struct proc_dir_entry *binder_proc_dir_entry_proc; |
43 | static struct hlist_head binder_dead_nodes; | 43 | static struct hlist_head binder_dead_nodes; |
44 | static HLIST_HEAD(binder_deferred_list); | ||
45 | static DEFINE_MUTEX(binder_deferred_lock); | ||
44 | 46 | ||
45 | static int binder_read_proc_proc( | 47 | static int binder_read_proc_proc( |
46 | char *page, char **start, off_t off, int count, int *eof, void *data); | 48 | char *page, char **start, off_t off, int count, int *eof, void *data); |
@@ -54,11 +56,7 @@ static int binder_read_proc_proc( | |||
54 | #define SZ_4M 0x400000 | 56 | #define SZ_4M 0x400000 |
55 | #endif | 57 | #endif |
56 | 58 | ||
57 | #ifndef __i386__ | ||
58 | #define FORBIDDEN_MMAP_FLAGS (VM_WRITE | VM_EXEC) | ||
59 | #else | ||
60 | #define FORBIDDEN_MMAP_FLAGS (VM_WRITE) | 59 | #define FORBIDDEN_MMAP_FLAGS (VM_WRITE) |
61 | #endif | ||
62 | 60 | ||
63 | #define BINDER_SMALL_BUF_SIZE (PAGE_SIZE * 64) | 61 | #define BINDER_SMALL_BUF_SIZE (PAGE_SIZE * 64) |
64 | 62 | ||
@@ -236,6 +234,12 @@ struct binder_buffer { | |||
236 | uint8_t data[0]; | 234 | uint8_t data[0]; |
237 | }; | 235 | }; |
238 | 236 | ||
237 | enum { | ||
238 | BINDER_DEFERRED_PUT_FILES = 0x01, | ||
239 | BINDER_DEFERRED_FLUSH = 0x02, | ||
240 | BINDER_DEFERRED_RELEASE = 0x04, | ||
241 | }; | ||
242 | |||
239 | struct binder_proc { | 243 | struct binder_proc { |
240 | struct hlist_node proc_node; | 244 | struct hlist_node proc_node; |
241 | struct rb_root threads; | 245 | struct rb_root threads; |
@@ -245,8 +249,11 @@ struct binder_proc { | |||
245 | int pid; | 249 | int pid; |
246 | struct vm_area_struct *vma; | 250 | struct vm_area_struct *vma; |
247 | struct task_struct *tsk; | 251 | struct task_struct *tsk; |
252 | struct files_struct *files; | ||
253 | struct hlist_node deferred_work_node; | ||
254 | int deferred_work; | ||
248 | void *buffer; | 255 | void *buffer; |
249 | size_t user_buffer_offset; | 256 | ptrdiff_t user_buffer_offset; |
250 | 257 | ||
251 | struct list_head buffers; | 258 | struct list_head buffers; |
252 | struct rb_root free_buffers; | 259 | struct rb_root free_buffers; |
@@ -310,12 +317,14 @@ struct binder_transaction { | |||
310 | uid_t sender_euid; | 317 | uid_t sender_euid; |
311 | }; | 318 | }; |
312 | 319 | ||
320 | static void binder_defer_work(struct binder_proc *proc, int defer); | ||
321 | |||
313 | /* | 322 | /* |
314 | * copied from get_unused_fd_flags | 323 | * copied from get_unused_fd_flags |
315 | */ | 324 | */ |
316 | int task_get_unused_fd_flags(struct task_struct *tsk, int flags) | 325 | int task_get_unused_fd_flags(struct binder_proc *proc, int flags) |
317 | { | 326 | { |
318 | struct files_struct *files = get_files_struct(tsk); | 327 | struct files_struct *files = proc->files; |
319 | int fd, error; | 328 | int fd, error; |
320 | struct fdtable *fdt; | 329 | struct fdtable *fdt; |
321 | unsigned long rlim_cur; | 330 | unsigned long rlim_cur; |
@@ -337,9 +346,9 @@ repeat: | |||
337 | * will limit the total number of files that can be opened. | 346 | * will limit the total number of files that can be opened. |
338 | */ | 347 | */ |
339 | rlim_cur = 0; | 348 | rlim_cur = 0; |
340 | if (lock_task_sighand(tsk, &irqs)) { | 349 | if (lock_task_sighand(proc->tsk, &irqs)) { |
341 | rlim_cur = tsk->signal->rlim[RLIMIT_NOFILE].rlim_cur; | 350 | rlim_cur = proc->tsk->signal->rlim[RLIMIT_NOFILE].rlim_cur; |
342 | unlock_task_sighand(tsk, &irqs); | 351 | unlock_task_sighand(proc->tsk, &irqs); |
343 | } | 352 | } |
344 | if (fd >= rlim_cur) | 353 | if (fd >= rlim_cur) |
345 | goto out; | 354 | goto out; |
@@ -375,7 +384,6 @@ repeat: | |||
375 | 384 | ||
376 | out: | 385 | out: |
377 | spin_unlock(&files->file_lock); | 386 | spin_unlock(&files->file_lock); |
378 | put_files_struct(files); | ||
379 | return error; | 387 | return error; |
380 | } | 388 | } |
381 | 389 | ||
@@ -383,9 +391,9 @@ out: | |||
383 | * copied from fd_install | 391 | * copied from fd_install |
384 | */ | 392 | */ |
385 | static void task_fd_install( | 393 | static void task_fd_install( |
386 | struct task_struct *tsk, unsigned int fd, struct file *file) | 394 | struct binder_proc *proc, unsigned int fd, struct file *file) |
387 | { | 395 | { |
388 | struct files_struct *files = get_files_struct(tsk); | 396 | struct files_struct *files = proc->files; |
389 | struct fdtable *fdt; | 397 | struct fdtable *fdt; |
390 | 398 | ||
391 | if (files == NULL) | 399 | if (files == NULL) |
@@ -396,7 +404,6 @@ static void task_fd_install( | |||
396 | BUG_ON(fdt->fd[fd] != NULL); | 404 | BUG_ON(fdt->fd[fd] != NULL); |
397 | rcu_assign_pointer(fdt->fd[fd], file); | 405 | rcu_assign_pointer(fdt->fd[fd], file); |
398 | spin_unlock(&files->file_lock); | 406 | spin_unlock(&files->file_lock); |
399 | put_files_struct(files); | ||
400 | } | 407 | } |
401 | 408 | ||
402 | /* | 409 | /* |
@@ -413,10 +420,10 @@ static void __put_unused_fd(struct files_struct *files, unsigned int fd) | |||
413 | /* | 420 | /* |
414 | * copied from sys_close | 421 | * copied from sys_close |
415 | */ | 422 | */ |
416 | static long task_close_fd(struct task_struct *tsk, unsigned int fd) | 423 | static long task_close_fd(struct binder_proc *proc, unsigned int fd) |
417 | { | 424 | { |
418 | struct file *filp; | 425 | struct file *filp; |
419 | struct files_struct *files = get_files_struct(tsk); | 426 | struct files_struct *files = proc->files; |
420 | struct fdtable *fdt; | 427 | struct fdtable *fdt; |
421 | int retval; | 428 | int retval; |
422 | 429 | ||
@@ -443,12 +450,10 @@ static long task_close_fd(struct task_struct *tsk, unsigned int fd) | |||
443 | retval == -ERESTART_RESTARTBLOCK)) | 450 | retval == -ERESTART_RESTARTBLOCK)) |
444 | retval = -EINTR; | 451 | retval = -EINTR; |
445 | 452 | ||
446 | put_files_struct(files); | ||
447 | return retval; | 453 | return retval; |
448 | 454 | ||
449 | out_unlock: | 455 | out_unlock: |
450 | spin_unlock(&files->file_lock); | 456 | spin_unlock(&files->file_lock); |
451 | put_files_struct(files); | ||
452 | return -EBADF; | 457 | return -EBADF; |
453 | } | 458 | } |
454 | 459 | ||
@@ -618,7 +623,8 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate, | |||
618 | proc->pid, page_addr); | 623 | proc->pid, page_addr); |
619 | goto err_map_kernel_failed; | 624 | goto err_map_kernel_failed; |
620 | } | 625 | } |
621 | user_page_addr = (size_t)page_addr + proc->user_buffer_offset; | 626 | user_page_addr = |
627 | (uintptr_t)page_addr + proc->user_buffer_offset; | ||
622 | ret = vm_insert_page(vma, user_page_addr, page[0]); | 628 | ret = vm_insert_page(vma, user_page_addr, page[0]); |
623 | if (ret) { | 629 | if (ret) { |
624 | printk(KERN_ERR "binder: %d: binder_alloc_buf failed " | 630 | printk(KERN_ERR "binder: %d: binder_alloc_buf failed " |
@@ -639,7 +645,7 @@ free_range: | |||
639 | page_addr -= PAGE_SIZE) { | 645 | page_addr -= PAGE_SIZE) { |
640 | page = &proc->pages[(page_addr - proc->buffer) / PAGE_SIZE]; | 646 | page = &proc->pages[(page_addr - proc->buffer) / PAGE_SIZE]; |
641 | if (vma) | 647 | if (vma) |
642 | zap_page_range(vma, (size_t)page_addr + | 648 | zap_page_range(vma, (uintptr_t)page_addr + |
643 | proc->user_buffer_offset, PAGE_SIZE, NULL); | 649 | proc->user_buffer_offset, PAGE_SIZE, NULL); |
644 | err_vm_insert_page_failed: | 650 | err_vm_insert_page_failed: |
645 | unmap_kernel_range((unsigned long)page_addr, PAGE_SIZE); | 651 | unmap_kernel_range((unsigned long)page_addr, PAGE_SIZE); |
@@ -720,18 +726,19 @@ static struct binder_buffer *binder_alloc_buf(struct binder_proc *proc, | |||
720 | "er %p size %zd\n", proc->pid, size, buffer, buffer_size); | 726 | "er %p size %zd\n", proc->pid, size, buffer, buffer_size); |
721 | 727 | ||
722 | has_page_addr = | 728 | has_page_addr = |
723 | (void *)(((size_t)buffer->data + buffer_size) & PAGE_MASK); | 729 | (void *)(((uintptr_t)buffer->data + buffer_size) & PAGE_MASK); |
724 | if (n == NULL) { | 730 | if (n == NULL) { |
725 | if (size + sizeof(struct binder_buffer) + 4 >= buffer_size) | 731 | if (size + sizeof(struct binder_buffer) + 4 >= buffer_size) |
726 | buffer_size = size; /* no room for other buffers */ | 732 | buffer_size = size; /* no room for other buffers */ |
727 | else | 733 | else |
728 | buffer_size = size + sizeof(struct binder_buffer); | 734 | buffer_size = size + sizeof(struct binder_buffer); |
729 | } | 735 | } |
730 | end_page_addr = (void *)PAGE_ALIGN((size_t)buffer->data + buffer_size); | 736 | end_page_addr = |
737 | (void *)PAGE_ALIGN((uintptr_t)buffer->data + buffer_size); | ||
731 | if (end_page_addr > has_page_addr) | 738 | if (end_page_addr > has_page_addr) |
732 | end_page_addr = has_page_addr; | 739 | end_page_addr = has_page_addr; |
733 | if (binder_update_page_range(proc, 1, | 740 | if (binder_update_page_range(proc, 1, |
734 | (void *)PAGE_ALIGN((size_t)buffer->data), end_page_addr, NULL)) | 741 | (void *)PAGE_ALIGN((uintptr_t)buffer->data), end_page_addr, NULL)) |
735 | return NULL; | 742 | return NULL; |
736 | 743 | ||
737 | rb_erase(best_fit, &proc->free_buffers); | 744 | rb_erase(best_fit, &proc->free_buffers); |
@@ -762,12 +769,12 @@ static struct binder_buffer *binder_alloc_buf(struct binder_proc *proc, | |||
762 | 769 | ||
763 | static void *buffer_start_page(struct binder_buffer *buffer) | 770 | static void *buffer_start_page(struct binder_buffer *buffer) |
764 | { | 771 | { |
765 | return (void *)((size_t)buffer & PAGE_MASK); | 772 | return (void *)((uintptr_t)buffer & PAGE_MASK); |
766 | } | 773 | } |
767 | 774 | ||
768 | static void *buffer_end_page(struct binder_buffer *buffer) | 775 | static void *buffer_end_page(struct binder_buffer *buffer) |
769 | { | 776 | { |
770 | return (void *)(((size_t)(buffer + 1) - 1) & PAGE_MASK); | 777 | return (void *)(((uintptr_t)(buffer + 1) - 1) & PAGE_MASK); |
771 | } | 778 | } |
772 | 779 | ||
773 | static void binder_delete_free_buffer( | 780 | static void binder_delete_free_buffer( |
@@ -845,8 +852,8 @@ static void binder_free_buf( | |||
845 | } | 852 | } |
846 | 853 | ||
847 | binder_update_page_range(proc, 0, | 854 | binder_update_page_range(proc, 0, |
848 | (void *)PAGE_ALIGN((size_t)buffer->data), | 855 | (void *)PAGE_ALIGN((uintptr_t)buffer->data), |
849 | (void *)(((size_t)buffer->data + buffer_size) & PAGE_MASK), | 856 | (void *)(((uintptr_t)buffer->data + buffer_size) & PAGE_MASK), |
850 | NULL); | 857 | NULL); |
851 | rb_erase(&buffer->rb_node, &proc->allocated_buffers); | 858 | rb_erase(&buffer->rb_node, &proc->allocated_buffers); |
852 | buffer->free = 1; | 859 | buffer->free = 1; |
@@ -1345,6 +1352,17 @@ binder_transaction(struct binder_proc *proc, struct binder_thread *thread, | |||
1345 | if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) { | 1352 | if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) { |
1346 | struct binder_transaction *tmp; | 1353 | struct binder_transaction *tmp; |
1347 | tmp = thread->transaction_stack; | 1354 | tmp = thread->transaction_stack; |
1355 | if (tmp->to_thread != thread) { | ||
1356 | binder_user_error("binder: %d:%d got new " | ||
1357 | "transaction with bad transaction stack" | ||
1358 | ", transaction %d has target %d:%d\n", | ||
1359 | proc->pid, thread->pid, tmp->debug_id, | ||
1360 | tmp->to_proc ? tmp->to_proc->pid : 0, | ||
1361 | tmp->to_thread ? | ||
1362 | tmp->to_thread->pid : 0); | ||
1363 | return_error = BR_FAILED_REPLY; | ||
1364 | goto err_bad_call_stack; | ||
1365 | } | ||
1348 | while (tmp) { | 1366 | while (tmp) { |
1349 | if (tmp->from && tmp->from->proc == target_proc) | 1367 | if (tmp->from && tmp->from->proc == target_proc) |
1350 | target_thread = tmp->from; | 1368 | target_thread = tmp->from; |
@@ -1434,10 +1452,19 @@ binder_transaction(struct binder_proc *proc, struct binder_thread *thread, | |||
1434 | return_error = BR_FAILED_REPLY; | 1452 | return_error = BR_FAILED_REPLY; |
1435 | goto err_copy_data_failed; | 1453 | goto err_copy_data_failed; |
1436 | } | 1454 | } |
1455 | if (!IS_ALIGNED(tr->offsets_size, sizeof(size_t))) { | ||
1456 | binder_user_error("binder: %d:%d got transaction with " | ||
1457 | "invalid offsets size, %zd\n", | ||
1458 | proc->pid, thread->pid, tr->offsets_size); | ||
1459 | return_error = BR_FAILED_REPLY; | ||
1460 | goto err_bad_offset; | ||
1461 | } | ||
1437 | off_end = (void *)offp + tr->offsets_size; | 1462 | off_end = (void *)offp + tr->offsets_size; |
1438 | for (; offp < off_end; offp++) { | 1463 | for (; offp < off_end; offp++) { |
1439 | struct flat_binder_object *fp; | 1464 | struct flat_binder_object *fp; |
1440 | if (*offp > t->buffer->data_size - sizeof(*fp)) { | 1465 | if (*offp > t->buffer->data_size - sizeof(*fp) || |
1466 | t->buffer->data_size < sizeof(*fp) || | ||
1467 | !IS_ALIGNED(*offp, sizeof(void *))) { | ||
1441 | binder_user_error("binder: %d:%d got transaction with " | 1468 | binder_user_error("binder: %d:%d got transaction with " |
1442 | "invalid offset, %zd\n", | 1469 | "invalid offset, %zd\n", |
1443 | proc->pid, thread->pid, *offp); | 1470 | proc->pid, thread->pid, *offp); |
@@ -1544,13 +1571,13 @@ binder_transaction(struct binder_proc *proc, struct binder_thread *thread, | |||
1544 | return_error = BR_FAILED_REPLY; | 1571 | return_error = BR_FAILED_REPLY; |
1545 | goto err_fget_failed; | 1572 | goto err_fget_failed; |
1546 | } | 1573 | } |
1547 | target_fd = task_get_unused_fd_flags(target_proc->tsk, O_CLOEXEC); | 1574 | target_fd = task_get_unused_fd_flags(target_proc, O_CLOEXEC); |
1548 | if (target_fd < 0) { | 1575 | if (target_fd < 0) { |
1549 | fput(file); | 1576 | fput(file); |
1550 | return_error = BR_FAILED_REPLY; | 1577 | return_error = BR_FAILED_REPLY; |
1551 | goto err_get_unused_fd_failed; | 1578 | goto err_get_unused_fd_failed; |
1552 | } | 1579 | } |
1553 | task_fd_install(target_proc->tsk, target_fd, file); | 1580 | task_fd_install(target_proc, target_fd, file); |
1554 | if (binder_debug_mask & BINDER_DEBUG_TRANSACTION) | 1581 | if (binder_debug_mask & BINDER_DEBUG_TRANSACTION) |
1555 | printk(KERN_INFO " fd %ld -> %d\n", fp->handle, target_fd); | 1582 | printk(KERN_INFO " fd %ld -> %d\n", fp->handle, target_fd); |
1556 | /* TODO: fput? */ | 1583 | /* TODO: fput? */ |
@@ -1655,7 +1682,9 @@ binder_transaction_buffer_release(struct binder_proc *proc, struct binder_buffer | |||
1655 | off_end = (void *)offp + buffer->offsets_size; | 1682 | off_end = (void *)offp + buffer->offsets_size; |
1656 | for (; offp < off_end; offp++) { | 1683 | for (; offp < off_end; offp++) { |
1657 | struct flat_binder_object *fp; | 1684 | struct flat_binder_object *fp; |
1658 | if (*offp > buffer->data_size - sizeof(*fp)) { | 1685 | if (*offp > buffer->data_size - sizeof(*fp) || |
1686 | buffer->data_size < sizeof(*fp) || | ||
1687 | !IS_ALIGNED(*offp, sizeof(void *))) { | ||
1659 | printk(KERN_ERR "binder: transaction release %d bad" | 1688 | printk(KERN_ERR "binder: transaction release %d bad" |
1660 | "offset %zd, size %zd\n", debug_id, *offp, buffer->data_size); | 1689 | "offset %zd, size %zd\n", debug_id, *offp, buffer->data_size); |
1661 | continue; | 1690 | continue; |
@@ -1691,7 +1720,7 @@ binder_transaction_buffer_release(struct binder_proc *proc, struct binder_buffer | |||
1691 | if (binder_debug_mask & BINDER_DEBUG_TRANSACTION) | 1720 | if (binder_debug_mask & BINDER_DEBUG_TRANSACTION) |
1692 | printk(KERN_INFO " fd %ld\n", fp->handle); | 1721 | printk(KERN_INFO " fd %ld\n", fp->handle); |
1693 | if (failed_at) | 1722 | if (failed_at) |
1694 | task_close_fd(proc->tsk, fp->handle); | 1723 | task_close_fd(proc, fp->handle); |
1695 | break; | 1724 | break; |
1696 | 1725 | ||
1697 | default: | 1726 | default: |
@@ -2340,7 +2369,7 @@ retry: | |||
2340 | 2369 | ||
2341 | tr.data_size = t->buffer->data_size; | 2370 | tr.data_size = t->buffer->data_size; |
2342 | tr.offsets_size = t->buffer->offsets_size; | 2371 | tr.offsets_size = t->buffer->offsets_size; |
2343 | tr.data.ptr.buffer = (void *)((void *)t->buffer->data + proc->user_buffer_offset); | 2372 | tr.data.ptr.buffer = (void *)t->buffer->data + proc->user_buffer_offset; |
2344 | tr.data.ptr.offsets = tr.data.ptr.buffer + ALIGN(t->buffer->data_size, sizeof(void *)); | 2373 | tr.data.ptr.offsets = tr.data.ptr.buffer + ALIGN(t->buffer->data_size, sizeof(void *)); |
2345 | 2374 | ||
2346 | if (put_user(cmd, (uint32_t __user *)ptr)) | 2375 | if (put_user(cmd, (uint32_t __user *)ptr)) |
@@ -2656,6 +2685,7 @@ static void binder_vma_open(struct vm_area_struct *vma) | |||
2656 | (unsigned long)pgprot_val(vma->vm_page_prot)); | 2685 | (unsigned long)pgprot_val(vma->vm_page_prot)); |
2657 | dump_stack(); | 2686 | dump_stack(); |
2658 | } | 2687 | } |
2688 | |||
2659 | static void binder_vma_close(struct vm_area_struct *vma) | 2689 | static void binder_vma_close(struct vm_area_struct *vma) |
2660 | { | 2690 | { |
2661 | struct binder_proc *proc = vma->vm_private_data; | 2691 | struct binder_proc *proc = vma->vm_private_data; |
@@ -2666,6 +2696,7 @@ static void binder_vma_close(struct vm_area_struct *vma) | |||
2666 | (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags, | 2696 | (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags, |
2667 | (unsigned long)pgprot_val(vma->vm_page_prot)); | 2697 | (unsigned long)pgprot_val(vma->vm_page_prot)); |
2668 | proc->vma = NULL; | 2698 | proc->vma = NULL; |
2699 | binder_defer_work(proc, BINDER_DEFERRED_PUT_FILES); | ||
2669 | } | 2700 | } |
2670 | 2701 | ||
2671 | static struct vm_operations_struct binder_vm_ops = { | 2702 | static struct vm_operations_struct binder_vm_ops = { |
@@ -2698,6 +2729,12 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma) | |||
2698 | } | 2729 | } |
2699 | vma->vm_flags = (vma->vm_flags | VM_DONTCOPY) & ~VM_MAYWRITE; | 2730 | vma->vm_flags = (vma->vm_flags | VM_DONTCOPY) & ~VM_MAYWRITE; |
2700 | 2731 | ||
2732 | if (proc->buffer) { | ||
2733 | ret = -EBUSY; | ||
2734 | failure_string = "already mapped"; | ||
2735 | goto err_already_mapped; | ||
2736 | } | ||
2737 | |||
2701 | area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP); | 2738 | area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP); |
2702 | if (area == NULL) { | 2739 | if (area == NULL) { |
2703 | ret = -ENOMEM; | 2740 | ret = -ENOMEM; |
@@ -2705,7 +2742,7 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma) | |||
2705 | goto err_get_vm_area_failed; | 2742 | goto err_get_vm_area_failed; |
2706 | } | 2743 | } |
2707 | proc->buffer = area->addr; | 2744 | proc->buffer = area->addr; |
2708 | proc->user_buffer_offset = vma->vm_start - (size_t)proc->buffer; | 2745 | proc->user_buffer_offset = vma->vm_start - (uintptr_t)proc->buffer; |
2709 | 2746 | ||
2710 | #ifdef CONFIG_CPU_CACHE_VIPT | 2747 | #ifdef CONFIG_CPU_CACHE_VIPT |
2711 | if (cache_is_vipt_aliasing()) { | 2748 | if (cache_is_vipt_aliasing()) { |
@@ -2738,6 +2775,7 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma) | |||
2738 | binder_insert_free_buffer(proc, buffer); | 2775 | binder_insert_free_buffer(proc, buffer); |
2739 | proc->free_async_space = proc->buffer_size / 2; | 2776 | proc->free_async_space = proc->buffer_size / 2; |
2740 | barrier(); | 2777 | barrier(); |
2778 | proc->files = get_files_struct(current); | ||
2741 | proc->vma = vma; | 2779 | proc->vma = vma; |
2742 | 2780 | ||
2743 | /*printk(KERN_INFO "binder_mmap: %d %lx-%lx maps %p\n", proc->pid, vma->vm_start, vma->vm_end, proc->buffer);*/ | 2781 | /*printk(KERN_INFO "binder_mmap: %d %lx-%lx maps %p\n", proc->pid, vma->vm_start, vma->vm_end, proc->buffer);*/ |
@@ -2745,10 +2783,12 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma) | |||
2745 | 2783 | ||
2746 | err_alloc_small_buf_failed: | 2784 | err_alloc_small_buf_failed: |
2747 | kfree(proc->pages); | 2785 | kfree(proc->pages); |
2786 | proc->pages = NULL; | ||
2748 | err_alloc_pages_failed: | 2787 | err_alloc_pages_failed: |
2749 | vfree(proc->buffer); | 2788 | vfree(proc->buffer); |
2789 | proc->buffer = NULL; | ||
2750 | err_get_vm_area_failed: | 2790 | err_get_vm_area_failed: |
2751 | mutex_unlock(&binder_lock); | 2791 | err_already_mapped: |
2752 | err_bad_arg: | 2792 | err_bad_arg: |
2753 | printk(KERN_ERR "binder_mmap: %d %lx-%lx %s failed %d\n", proc->pid, vma->vm_start, vma->vm_end, failure_string, ret); | 2793 | printk(KERN_ERR "binder_mmap: %d %lx-%lx %s failed %d\n", proc->pid, vma->vm_start, vma->vm_end, failure_string, ret); |
2754 | return ret; | 2794 | return ret; |
@@ -2780,6 +2820,7 @@ static int binder_open(struct inode *nodp, struct file *filp) | |||
2780 | if (binder_proc_dir_entry_proc) { | 2820 | if (binder_proc_dir_entry_proc) { |
2781 | char strbuf[11]; | 2821 | char strbuf[11]; |
2782 | snprintf(strbuf, sizeof(strbuf), "%u", proc->pid); | 2822 | snprintf(strbuf, sizeof(strbuf), "%u", proc->pid); |
2823 | remove_proc_entry(strbuf, binder_proc_dir_entry_proc); | ||
2783 | create_proc_read_entry(strbuf, S_IRUGO, binder_proc_dir_entry_proc, binder_read_proc_proc, proc); | 2824 | create_proc_read_entry(strbuf, S_IRUGO, binder_proc_dir_entry_proc, binder_read_proc_proc, proc); |
2784 | } | 2825 | } |
2785 | 2826 | ||
@@ -2788,11 +2829,17 @@ static int binder_open(struct inode *nodp, struct file *filp) | |||
2788 | 2829 | ||
2789 | static int binder_flush(struct file *filp, fl_owner_t id) | 2830 | static int binder_flush(struct file *filp, fl_owner_t id) |
2790 | { | 2831 | { |
2791 | struct rb_node *n; | ||
2792 | struct binder_proc *proc = filp->private_data; | 2832 | struct binder_proc *proc = filp->private_data; |
2793 | int wake_count = 0; | ||
2794 | 2833 | ||
2795 | mutex_lock(&binder_lock); | 2834 | binder_defer_work(proc, BINDER_DEFERRED_FLUSH); |
2835 | |||
2836 | return 0; | ||
2837 | } | ||
2838 | |||
2839 | static void binder_deferred_flush(struct binder_proc *proc) | ||
2840 | { | ||
2841 | struct rb_node *n; | ||
2842 | int wake_count = 0; | ||
2796 | for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n)) { | 2843 | for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n)) { |
2797 | struct binder_thread *thread = rb_entry(n, struct binder_thread, rb_node); | 2844 | struct binder_thread *thread = rb_entry(n, struct binder_thread, rb_node); |
2798 | thread->looper |= BINDER_LOOPER_STATE_NEED_RETURN; | 2845 | thread->looper |= BINDER_LOOPER_STATE_NEED_RETURN; |
@@ -2802,28 +2849,35 @@ static int binder_flush(struct file *filp, fl_owner_t id) | |||
2802 | } | 2849 | } |
2803 | } | 2850 | } |
2804 | wake_up_interruptible_all(&proc->wait); | 2851 | wake_up_interruptible_all(&proc->wait); |
2805 | mutex_unlock(&binder_lock); | ||
2806 | 2852 | ||
2807 | if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE) | 2853 | if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE) |
2808 | printk(KERN_INFO "binder_flush: %d woke %d threads\n", proc->pid, wake_count); | 2854 | printk(KERN_INFO "binder_flush: %d woke %d threads\n", proc->pid, wake_count); |
2809 | |||
2810 | return 0; | ||
2811 | } | 2855 | } |
2812 | 2856 | ||
2813 | static int binder_release(struct inode *nodp, struct file *filp) | 2857 | static int binder_release(struct inode *nodp, struct file *filp) |
2814 | { | 2858 | { |
2815 | struct hlist_node *pos; | ||
2816 | struct binder_transaction *t; | ||
2817 | struct rb_node *n; | ||
2818 | struct binder_proc *proc = filp->private_data; | 2859 | struct binder_proc *proc = filp->private_data; |
2819 | int threads, nodes, incoming_refs, outgoing_refs, buffers, active_transactions, page_count; | ||
2820 | |||
2821 | if (binder_proc_dir_entry_proc) { | 2860 | if (binder_proc_dir_entry_proc) { |
2822 | char strbuf[11]; | 2861 | char strbuf[11]; |
2823 | snprintf(strbuf, sizeof(strbuf), "%u", proc->pid); | 2862 | snprintf(strbuf, sizeof(strbuf), "%u", proc->pid); |
2824 | remove_proc_entry(strbuf, binder_proc_dir_entry_proc); | 2863 | remove_proc_entry(strbuf, binder_proc_dir_entry_proc); |
2825 | } | 2864 | } |
2826 | mutex_lock(&binder_lock); | 2865 | |
2866 | binder_defer_work(proc, BINDER_DEFERRED_RELEASE); | ||
2867 | |||
2868 | return 0; | ||
2869 | } | ||
2870 | |||
2871 | static void binder_deferred_release(struct binder_proc *proc) | ||
2872 | { | ||
2873 | struct hlist_node *pos; | ||
2874 | struct binder_transaction *t; | ||
2875 | struct rb_node *n; | ||
2876 | int threads, nodes, incoming_refs, outgoing_refs, buffers, active_transactions, page_count; | ||
2877 | |||
2878 | BUG_ON(proc->vma); | ||
2879 | BUG_ON(proc->files); | ||
2880 | |||
2827 | hlist_del(&proc->proc_node); | 2881 | hlist_del(&proc->proc_node); |
2828 | if (binder_context_mgr_node && binder_context_mgr_node->proc == proc) { | 2882 | if (binder_context_mgr_node && binder_context_mgr_node->proc == proc) { |
2829 | if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER) | 2883 | if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER) |
@@ -2897,7 +2951,6 @@ static int binder_release(struct inode *nodp, struct file *filp) | |||
2897 | } | 2951 | } |
2898 | 2952 | ||
2899 | binder_stats.obj_deleted[BINDER_STAT_PROC]++; | 2953 | binder_stats.obj_deleted[BINDER_STAT_PROC]++; |
2900 | mutex_unlock(&binder_lock); | ||
2901 | 2954 | ||
2902 | page_count = 0; | 2955 | page_count = 0; |
2903 | if (proc->pages) { | 2956 | if (proc->pages) { |
@@ -2921,7 +2974,57 @@ static int binder_release(struct inode *nodp, struct file *filp) | |||
2921 | proc->pid, threads, nodes, incoming_refs, outgoing_refs, active_transactions, buffers, page_count); | 2974 | proc->pid, threads, nodes, incoming_refs, outgoing_refs, active_transactions, buffers, page_count); |
2922 | 2975 | ||
2923 | kfree(proc); | 2976 | kfree(proc); |
2924 | return 0; | 2977 | } |
2978 | |||
2979 | static void binder_deferred_func(struct work_struct *work) | ||
2980 | { | ||
2981 | struct binder_proc *proc; | ||
2982 | struct files_struct *files; | ||
2983 | |||
2984 | int defer; | ||
2985 | do { | ||
2986 | mutex_lock(&binder_lock); | ||
2987 | mutex_lock(&binder_deferred_lock); | ||
2988 | if (!hlist_empty(&binder_deferred_list)) { | ||
2989 | proc = hlist_entry(binder_deferred_list.first, | ||
2990 | struct binder_proc, deferred_work_node); | ||
2991 | hlist_del_init(&proc->deferred_work_node); | ||
2992 | defer = proc->deferred_work; | ||
2993 | proc->deferred_work = 0; | ||
2994 | } else { | ||
2995 | proc = NULL; | ||
2996 | defer = 0; | ||
2997 | } | ||
2998 | mutex_unlock(&binder_deferred_lock); | ||
2999 | |||
3000 | files = NULL; | ||
3001 | if (defer & BINDER_DEFERRED_PUT_FILES) | ||
3002 | if ((files = proc->files)) | ||
3003 | proc->files = NULL; | ||
3004 | |||
3005 | if (defer & BINDER_DEFERRED_FLUSH) | ||
3006 | binder_deferred_flush(proc); | ||
3007 | |||
3008 | if (defer & BINDER_DEFERRED_RELEASE) | ||
3009 | binder_deferred_release(proc); /* frees proc */ | ||
3010 | |||
3011 | mutex_unlock(&binder_lock); | ||
3012 | if (files) | ||
3013 | put_files_struct(files); | ||
3014 | } while (proc); | ||
3015 | } | ||
3016 | static DECLARE_WORK(binder_deferred_work, binder_deferred_func); | ||
3017 | |||
3018 | static void binder_defer_work(struct binder_proc *proc, int defer) | ||
3019 | { | ||
3020 | mutex_lock(&binder_deferred_lock); | ||
3021 | proc->deferred_work |= defer; | ||
3022 | if (hlist_unhashed(&proc->deferred_work_node)) { | ||
3023 | hlist_add_head(&proc->deferred_work_node, | ||
3024 | &binder_deferred_list); | ||
3025 | schedule_work(&binder_deferred_work); | ||
3026 | } | ||
3027 | mutex_unlock(&binder_deferred_lock); | ||
2925 | } | 3028 | } |
2926 | 3029 | ||
2927 | static char *print_binder_transaction(char *buf, char *end, const char *prefix, struct binder_transaction *t) | 3030 | static char *print_binder_transaction(char *buf, char *end, const char *prefix, struct binder_transaction *t) |
diff --git a/drivers/staging/at76_usb/at76_usb.c b/drivers/staging/at76_usb/at76_usb.c index 6f6e36a3bd9..c8af9a868d6 100644 --- a/drivers/staging/at76_usb/at76_usb.c +++ b/drivers/staging/at76_usb/at76_usb.c | |||
@@ -5259,6 +5259,18 @@ static int at76_alloc_urbs(struct at76_priv *priv, | |||
5259 | return 0; | 5259 | return 0; |
5260 | } | 5260 | } |
5261 | 5261 | ||
5262 | static const struct net_device_ops at76_netdev_ops = { | ||
5263 | .ndo_open = at76_open, | ||
5264 | .ndo_stop = at76_stop, | ||
5265 | .ndo_get_stats = at76_get_stats, | ||
5266 | .ndo_start_xmit = at76_tx, | ||
5267 | .ndo_tx_timeout = at76_tx_timeout, | ||
5268 | .ndo_set_multicast_list = at76_set_multicast, | ||
5269 | .ndo_set_mac_address = at76_set_mac_address, | ||
5270 | .ndo_validate_addr = eth_validate_addr, | ||
5271 | .ndo_change_mtu = eth_change_mtu, | ||
5272 | }; | ||
5273 | |||
5262 | /* Register network device and initialize the hardware */ | 5274 | /* Register network device and initialize the hardware */ |
5263 | static int at76_init_new_device(struct at76_priv *priv, | 5275 | static int at76_init_new_device(struct at76_priv *priv, |
5264 | struct usb_interface *interface) | 5276 | struct usb_interface *interface) |
@@ -5303,21 +5315,15 @@ static int at76_init_new_device(struct at76_priv *priv, | |||
5303 | priv->scan_mode = SCAN_TYPE_ACTIVE; | 5315 | priv->scan_mode = SCAN_TYPE_ACTIVE; |
5304 | 5316 | ||
5305 | netdev->flags &= ~IFF_MULTICAST; /* not yet or never */ | 5317 | netdev->flags &= ~IFF_MULTICAST; /* not yet or never */ |
5306 | netdev->open = at76_open; | 5318 | netdev->netdev_ops = &at76_netdev_ops; |
5307 | netdev->stop = at76_stop; | ||
5308 | netdev->get_stats = at76_get_stats; | ||
5309 | netdev->ethtool_ops = &at76_ethtool_ops; | 5319 | netdev->ethtool_ops = &at76_ethtool_ops; |
5310 | 5320 | ||
5311 | /* Add pointers to enable iwspy support. */ | 5321 | /* Add pointers to enable iwspy support. */ |
5312 | priv->wireless_data.spy_data = &priv->spy_data; | 5322 | priv->wireless_data.spy_data = &priv->spy_data; |
5313 | netdev->wireless_data = &priv->wireless_data; | 5323 | netdev->wireless_data = &priv->wireless_data; |
5314 | 5324 | ||
5315 | netdev->hard_start_xmit = at76_tx; | ||
5316 | netdev->tx_timeout = at76_tx_timeout; | ||
5317 | netdev->watchdog_timeo = 2 * HZ; | 5325 | netdev->watchdog_timeo = 2 * HZ; |
5318 | netdev->wireless_handlers = &at76_handler_def; | 5326 | netdev->wireless_handlers = &at76_handler_def; |
5319 | netdev->set_multicast_list = at76_set_multicast; | ||
5320 | netdev->set_mac_address = at76_set_mac_address; | ||
5321 | dev_alloc_name(netdev, "wlan%d"); | 5327 | dev_alloc_name(netdev, "wlan%d"); |
5322 | 5328 | ||
5323 | ret = register_netdev(priv->netdev); | 5329 | ret = register_netdev(priv->netdev); |
diff --git a/drivers/staging/b3dfg/b3dfg.c b/drivers/staging/b3dfg/b3dfg.c index 0348072b3ab..75ebe338c6f 100644 --- a/drivers/staging/b3dfg/b3dfg.c +++ b/drivers/staging/b3dfg/b3dfg.c | |||
@@ -1000,7 +1000,7 @@ static int __devinit b3dfg_probe(struct pci_dev *pdev, | |||
1000 | 1000 | ||
1001 | pci_set_master(pdev); | 1001 | pci_set_master(pdev); |
1002 | 1002 | ||
1003 | r = pci_set_dma_mask(pdev, DMA_32BIT_MASK); | 1003 | r = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
1004 | if (r) { | 1004 | if (r) { |
1005 | dev_err(&pdev->dev, "no usable DMA configuration\n"); | 1005 | dev_err(&pdev->dev, "no usable DMA configuration\n"); |
1006 | goto err_free_res; | 1006 | goto err_free_res; |
diff --git a/drivers/staging/epl/VirtualEthernetLinux.c b/drivers/staging/epl/VirtualEthernetLinux.c index 21206c4d22f..077724a556c 100644 --- a/drivers/staging/epl/VirtualEthernetLinux.c +++ b/drivers/staging/epl/VirtualEthernetLinux.c | |||
@@ -284,6 +284,17 @@ static tEplKernel VEthRecvFrame(tEplFrameInfo * pFrameInfo_p) | |||
284 | return Ret; | 284 | return Ret; |
285 | } | 285 | } |
286 | 286 | ||
287 | static const struct net_device_ops epl_netdev_ops = { | ||
288 | .ndo_open = VEthOpen, | ||
289 | .ndo_stop = VEthClose, | ||
290 | .ndo_get_stats = VEthGetStats, | ||
291 | .ndo_start_xmit = VEthXmit, | ||
292 | .ndo_tx_timeout = VEthTimeout, | ||
293 | .ndo_change_mtu = eth_change_mtu, | ||
294 | .ndo_set_mac_address = eth_mac_addr, | ||
295 | .ndo_validate_addr = eth_validate_addr, | ||
296 | }; | ||
297 | |||
287 | tEplKernel VEthAddInstance(tEplDllkInitParam *pInitParam_p) | 298 | tEplKernel VEthAddInstance(tEplDllkInitParam *pInitParam_p) |
288 | { | 299 | { |
289 | tEplKernel Ret = kEplSuccessful; | 300 | tEplKernel Ret = kEplSuccessful; |
@@ -299,11 +310,7 @@ tEplKernel VEthAddInstance(tEplDllkInitParam *pInitParam_p) | |||
299 | goto Exit; | 310 | goto Exit; |
300 | } | 311 | } |
301 | 312 | ||
302 | pVEthNetDevice_g->open = VEthOpen; | 313 | pVEthNetDevice_g->netdev_ops = &epl_netdev_ops; |
303 | pVEthNetDevice_g->stop = VEthClose; | ||
304 | pVEthNetDevice_g->get_stats = VEthGetStats; | ||
305 | pVEthNetDevice_g->hard_start_xmit = VEthXmit; | ||
306 | pVEthNetDevice_g->tx_timeout = VEthTimeout; | ||
307 | pVEthNetDevice_g->watchdog_timeo = EPL_VETH_TX_TIMEOUT; | 314 | pVEthNetDevice_g->watchdog_timeo = EPL_VETH_TX_TIMEOUT; |
308 | pVEthNetDevice_g->destructor = free_netdev; | 315 | pVEthNetDevice_g->destructor = free_netdev; |
309 | 316 | ||
diff --git a/drivers/staging/et131x/et131x_netdev.c b/drivers/staging/et131x/et131x_netdev.c index de65972ff36..951c73d5db2 100644 --- a/drivers/staging/et131x/et131x_netdev.c +++ b/drivers/staging/et131x/et131x_netdev.c | |||
@@ -112,6 +112,19 @@ void et131x_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp); | |||
112 | void et131x_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid); | 112 | void et131x_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid); |
113 | void et131x_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid); | 113 | void et131x_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid); |
114 | 114 | ||
115 | static const struct net_device_ops et131x_netdev_ops = { | ||
116 | .ndo_open = et131x_open, | ||
117 | .ndo_stop = et131x_close, | ||
118 | .ndo_start_xmit = et131x_tx, | ||
119 | .ndo_set_multicast_list = et131x_multicast, | ||
120 | .ndo_tx_timeout = et131x_tx_timeout, | ||
121 | .ndo_change_mtu = et131x_change_mtu, | ||
122 | .ndo_set_mac_address = et131x_set_mac_addr, | ||
123 | .ndo_validate_addr = eth_validate_addr, | ||
124 | .ndo_get_stats = et131x_stats, | ||
125 | .ndo_do_ioctl = et131x_ioctl, | ||
126 | }; | ||
127 | |||
115 | /** | 128 | /** |
116 | * et131x_device_alloc | 129 | * et131x_device_alloc |
117 | * | 130 | * |
@@ -142,16 +155,8 @@ struct net_device *et131x_device_alloc(void) | |||
142 | */ | 155 | */ |
143 | //netdev->init = &et131x_init; | 156 | //netdev->init = &et131x_init; |
144 | //netdev->set_config = &et131x_config; | 157 | //netdev->set_config = &et131x_config; |
145 | netdev->get_stats = &et131x_stats; | ||
146 | netdev->open = &et131x_open; | ||
147 | netdev->stop = &et131x_close; | ||
148 | netdev->do_ioctl = &et131x_ioctl; | ||
149 | netdev->set_multicast_list = &et131x_multicast; | ||
150 | netdev->hard_start_xmit = &et131x_tx; | ||
151 | netdev->tx_timeout = &et131x_tx_timeout; | ||
152 | netdev->watchdog_timeo = ET131X_TX_TIMEOUT; | 158 | netdev->watchdog_timeo = ET131X_TX_TIMEOUT; |
153 | netdev->change_mtu = &et131x_change_mtu; | 159 | netdev->netdev_ops = &et131x_netdev_ops; |
154 | netdev->set_mac_address = &et131x_set_mac_addr; | ||
155 | 160 | ||
156 | //netdev->ethtool_ops = &et131x_ethtool_ops; | 161 | //netdev->ethtool_ops = &et131x_ethtool_ops; |
157 | 162 | ||
diff --git a/drivers/staging/go7007/go7007-driver.c b/drivers/staging/go7007/go7007-driver.c index 58bfc8d81b3..77b1e769ac9 100644 --- a/drivers/staging/go7007/go7007-driver.c +++ b/drivers/staging/go7007/go7007-driver.c | |||
@@ -191,8 +191,10 @@ int go7007_reset_encoder(struct go7007 *go) | |||
191 | /* | 191 | /* |
192 | * Attempt to instantiate an I2C client by ID, probably loading a module. | 192 | * Attempt to instantiate an I2C client by ID, probably loading a module. |
193 | */ | 193 | */ |
194 | static int init_i2c_module(struct i2c_adapter *adapter, int id, int addr) | 194 | static int init_i2c_module(struct i2c_adapter *adapter, const char *type, |
195 | int id, int addr) | ||
195 | { | 196 | { |
197 | struct i2c_board_info info; | ||
196 | char *modname; | 198 | char *modname; |
197 | 199 | ||
198 | switch (id) { | 200 | switch (id) { |
@@ -226,7 +228,11 @@ static int init_i2c_module(struct i2c_adapter *adapter, int id, int addr) | |||
226 | } | 228 | } |
227 | if (modname != NULL) | 229 | if (modname != NULL) |
228 | request_module(modname); | 230 | request_module(modname); |
229 | if (wis_i2c_probe_device(adapter, id, addr) == 1) | 231 | |
232 | memset(&info, 0, sizeof(struct i2c_board_info)); | ||
233 | info.addr = addr; | ||
234 | strlcpy(info.type, type, I2C_NAME_SIZE); | ||
235 | if (!i2c_new_device(adapter, &info)) | ||
230 | return 0; | 236 | return 0; |
231 | if (modname != NULL) | 237 | if (modname != NULL) |
232 | printk(KERN_INFO | 238 | printk(KERN_INFO |
@@ -266,23 +272,9 @@ int go7007_register_encoder(struct go7007 *go) | |||
266 | if (go->i2c_adapter_online) { | 272 | if (go->i2c_adapter_online) { |
267 | for (i = 0; i < go->board_info->num_i2c_devs; ++i) | 273 | for (i = 0; i < go->board_info->num_i2c_devs; ++i) |
268 | init_i2c_module(&go->i2c_adapter, | 274 | init_i2c_module(&go->i2c_adapter, |
275 | go->board_info->i2c_devs[i].type, | ||
269 | go->board_info->i2c_devs[i].id, | 276 | go->board_info->i2c_devs[i].id, |
270 | go->board_info->i2c_devs[i].addr); | 277 | go->board_info->i2c_devs[i].addr); |
271 | #ifdef TUNER_SET_TYPE_ADDR | ||
272 | if (go->tuner_type >= 0) { | ||
273 | struct tuner_setup tun_setup = { | ||
274 | .mode_mask = T_ANALOG_TV, | ||
275 | .addr = ADDR_UNSET, | ||
276 | .type = go->tuner_type | ||
277 | }; | ||
278 | i2c_clients_command(&go->i2c_adapter, | ||
279 | TUNER_SET_TYPE_ADDR, &tun_setup); | ||
280 | } | ||
281 | #else | ||
282 | if (go->tuner_type >= 0) | ||
283 | i2c_clients_command(&go->i2c_adapter, | ||
284 | TUNER_SET_TYPE, &go->tuner_type); | ||
285 | #endif | ||
286 | if (go->board_id == GO7007_BOARDID_ADLINK_MPG24) | 278 | if (go->board_id == GO7007_BOARDID_ADLINK_MPG24) |
287 | i2c_clients_command(&go->i2c_adapter, | 279 | i2c_clients_command(&go->i2c_adapter, |
288 | DECODER_SET_CHANNEL, &go->channel_number); | 280 | DECODER_SET_CHANNEL, &go->channel_number); |
diff --git a/drivers/staging/go7007/go7007-i2c.c b/drivers/staging/go7007/go7007-i2c.c index cd55b76eabc..c82867fdd28 100644 --- a/drivers/staging/go7007/go7007-i2c.c +++ b/drivers/staging/go7007/go7007-i2c.c | |||
@@ -31,87 +31,6 @@ | |||
31 | #include "go7007-priv.h" | 31 | #include "go7007-priv.h" |
32 | #include "wis-i2c.h" | 32 | #include "wis-i2c.h" |
33 | 33 | ||
34 | /************** Registration interface for I2C client drivers **************/ | ||
35 | |||
36 | /* Since there's no way to auto-probe the I2C devices connected to the I2C | ||
37 | * bus on the go7007, we have this silly little registration system that | ||
38 | * client drivers can use to register their I2C driver ID and their | ||
39 | * detect_client function (the one that's normally passed to i2c_probe). | ||
40 | * | ||
41 | * When a new go7007 device is connected, we can look up in a board info | ||
42 | * table by the USB or PCI vendor/product/revision ID to determine | ||
43 | * which I2C client module to load. The client driver module will register | ||
44 | * itself here, and then we can call the registered detect_client function | ||
45 | * to force-load a new client at the address listed in the board info table. | ||
46 | * | ||
47 | * Really the I2C subsystem should have a way to force-load I2C client | ||
48 | * drivers when we have a priori knowledge of what's on the bus, especially | ||
49 | * since the existing I2C auto-probe mechanism is so hokey, but we'll use | ||
50 | * our own mechanism for the time being. */ | ||
51 | |||
52 | struct wis_i2c_client_driver { | ||
53 | unsigned int id; | ||
54 | found_proc found_proc; | ||
55 | struct list_head list; | ||
56 | }; | ||
57 | |||
58 | static LIST_HEAD(i2c_client_drivers); | ||
59 | static DECLARE_MUTEX(i2c_client_driver_list_lock); | ||
60 | |||
61 | /* Client drivers register here by their I2C driver ID */ | ||
62 | int wis_i2c_add_driver(unsigned int id, found_proc found_proc) | ||
63 | { | ||
64 | struct wis_i2c_client_driver *driver; | ||
65 | |||
66 | driver = kmalloc(sizeof(struct wis_i2c_client_driver), GFP_KERNEL); | ||
67 | if (driver == NULL) | ||
68 | return -ENOMEM; | ||
69 | driver->id = id; | ||
70 | driver->found_proc = found_proc; | ||
71 | |||
72 | down(&i2c_client_driver_list_lock); | ||
73 | list_add_tail(&driver->list, &i2c_client_drivers); | ||
74 | up(&i2c_client_driver_list_lock); | ||
75 | |||
76 | return 0; | ||
77 | } | ||
78 | EXPORT_SYMBOL(wis_i2c_add_driver); | ||
79 | |||
80 | void wis_i2c_del_driver(found_proc found_proc) | ||
81 | { | ||
82 | struct wis_i2c_client_driver *driver, *next; | ||
83 | |||
84 | down(&i2c_client_driver_list_lock); | ||
85 | list_for_each_entry_safe(driver, next, &i2c_client_drivers, list) | ||
86 | if (driver->found_proc == found_proc) { | ||
87 | list_del(&driver->list); | ||
88 | kfree(driver); | ||
89 | } | ||
90 | up(&i2c_client_driver_list_lock); | ||
91 | } | ||
92 | EXPORT_SYMBOL(wis_i2c_del_driver); | ||
93 | |||
94 | /* The main go7007 driver calls this to instantiate a client by driver | ||
95 | * ID and bus address, which are both stored in the board info table */ | ||
96 | int wis_i2c_probe_device(struct i2c_adapter *adapter, | ||
97 | unsigned int id, int addr) | ||
98 | { | ||
99 | struct wis_i2c_client_driver *driver; | ||
100 | int found = 0; | ||
101 | |||
102 | if (addr < 0 || addr > 0x7f) | ||
103 | return -1; | ||
104 | down(&i2c_client_driver_list_lock); | ||
105 | list_for_each_entry(driver, &i2c_client_drivers, list) | ||
106 | if (driver->id == id) { | ||
107 | if (driver->found_proc(adapter, addr, 0) == 0) | ||
108 | found = 1; | ||
109 | break; | ||
110 | } | ||
111 | up(&i2c_client_driver_list_lock); | ||
112 | return found; | ||
113 | } | ||
114 | |||
115 | /********************* Driver for on-board I2C adapter *********************/ | 34 | /********************* Driver for on-board I2C adapter *********************/ |
116 | 35 | ||
117 | /* #define GO7007_I2C_DEBUG */ | 36 | /* #define GO7007_I2C_DEBUG */ |
@@ -287,9 +206,7 @@ static struct i2c_algorithm go7007_algo = { | |||
287 | 206 | ||
288 | static struct i2c_adapter go7007_adap_templ = { | 207 | static struct i2c_adapter go7007_adap_templ = { |
289 | .owner = THIS_MODULE, | 208 | .owner = THIS_MODULE, |
290 | .class = I2C_CLASS_TV_ANALOG, | ||
291 | .name = "WIS GO7007SB", | 209 | .name = "WIS GO7007SB", |
292 | .id = I2C_ALGO_GO7007, | ||
293 | .algo = &go7007_algo, | 210 | .algo = &go7007_algo, |
294 | }; | 211 | }; |
295 | 212 | ||
diff --git a/drivers/staging/go7007/go7007-priv.h b/drivers/staging/go7007/go7007-priv.h index 372f1f1c09b..178d18119fa 100644 --- a/drivers/staging/go7007/go7007-priv.h +++ b/drivers/staging/go7007/go7007-priv.h | |||
@@ -87,6 +87,7 @@ struct go7007_board_info { | |||
87 | int audio_main_div; | 87 | int audio_main_div; |
88 | int num_i2c_devs; | 88 | int num_i2c_devs; |
89 | struct { | 89 | struct { |
90 | const char *type; | ||
90 | int id; | 91 | int id; |
91 | int addr; | 92 | int addr; |
92 | } i2c_devs[4]; | 93 | } i2c_devs[4]; |
diff --git a/drivers/staging/go7007/go7007-usb.c b/drivers/staging/go7007/go7007-usb.c index 83eec920c7d..aa4a9e0b995 100644 --- a/drivers/staging/go7007/go7007-usb.c +++ b/drivers/staging/go7007/go7007-usb.c | |||
@@ -91,6 +91,7 @@ static struct go7007_usb_board board_matrix_ii = { | |||
91 | .num_i2c_devs = 1, | 91 | .num_i2c_devs = 1, |
92 | .i2c_devs = { | 92 | .i2c_devs = { |
93 | { | 93 | { |
94 | .type = "wis_saa7115", | ||
94 | .id = I2C_DRIVERID_WIS_SAA7115, | 95 | .id = I2C_DRIVERID_WIS_SAA7115, |
95 | .addr = 0x20, | 96 | .addr = 0x20, |
96 | }, | 97 | }, |
@@ -127,6 +128,7 @@ static struct go7007_usb_board board_matrix_reload = { | |||
127 | .num_i2c_devs = 1, | 128 | .num_i2c_devs = 1, |
128 | .i2c_devs = { | 129 | .i2c_devs = { |
129 | { | 130 | { |
131 | .type = "wis_saa7113", | ||
130 | .id = I2C_DRIVERID_WIS_SAA7113, | 132 | .id = I2C_DRIVERID_WIS_SAA7113, |
131 | .addr = 0x25, | 133 | .addr = 0x25, |
132 | }, | 134 | }, |
@@ -164,6 +166,7 @@ static struct go7007_usb_board board_star_trek = { | |||
164 | .num_i2c_devs = 1, | 166 | .num_i2c_devs = 1, |
165 | .i2c_devs = { | 167 | .i2c_devs = { |
166 | { | 168 | { |
169 | .type = "wis_saa7115", | ||
167 | .id = I2C_DRIVERID_WIS_SAA7115, | 170 | .id = I2C_DRIVERID_WIS_SAA7115, |
168 | .addr = 0x20, | 171 | .addr = 0x20, |
169 | }, | 172 | }, |
@@ -209,14 +212,17 @@ static struct go7007_usb_board board_px_tv402u = { | |||
209 | .num_i2c_devs = 3, | 212 | .num_i2c_devs = 3, |
210 | .i2c_devs = { | 213 | .i2c_devs = { |
211 | { | 214 | { |
215 | .type = "wis_saa7115", | ||
212 | .id = I2C_DRIVERID_WIS_SAA7115, | 216 | .id = I2C_DRIVERID_WIS_SAA7115, |
213 | .addr = 0x20, | 217 | .addr = 0x20, |
214 | }, | 218 | }, |
215 | { | 219 | { |
220 | .type = "wis_uda1342", | ||
216 | .id = I2C_DRIVERID_WIS_UDA1342, | 221 | .id = I2C_DRIVERID_WIS_UDA1342, |
217 | .addr = 0x1a, | 222 | .addr = 0x1a, |
218 | }, | 223 | }, |
219 | { | 224 | { |
225 | .type = "wis_sony_tuner", | ||
220 | .id = I2C_DRIVERID_WIS_SONY_TUNER, | 226 | .id = I2C_DRIVERID_WIS_SONY_TUNER, |
221 | .addr = 0x60, | 227 | .addr = 0x60, |
222 | }, | 228 | }, |
@@ -264,6 +270,7 @@ static struct go7007_usb_board board_xmen = { | |||
264 | .num_i2c_devs = 1, | 270 | .num_i2c_devs = 1, |
265 | .i2c_devs = { | 271 | .i2c_devs = { |
266 | { | 272 | { |
273 | .type = "wis_ov7640", | ||
267 | .id = I2C_DRIVERID_WIS_OV7640, | 274 | .id = I2C_DRIVERID_WIS_OV7640, |
268 | .addr = 0x21, | 275 | .addr = 0x21, |
269 | }, | 276 | }, |
@@ -296,6 +303,7 @@ static struct go7007_usb_board board_matrix_revolution = { | |||
296 | .num_i2c_devs = 1, | 303 | .num_i2c_devs = 1, |
297 | .i2c_devs = { | 304 | .i2c_devs = { |
298 | { | 305 | { |
306 | .type = "wis_tw9903", | ||
299 | .id = I2C_DRIVERID_WIS_TW9903, | 307 | .id = I2C_DRIVERID_WIS_TW9903, |
300 | .addr = 0x44, | 308 | .addr = 0x44, |
301 | }, | 309 | }, |
@@ -385,6 +393,7 @@ static struct go7007_usb_board board_adlink_mpg24 = { | |||
385 | .num_i2c_devs = 1, | 393 | .num_i2c_devs = 1, |
386 | .i2c_devs = { | 394 | .i2c_devs = { |
387 | { | 395 | { |
396 | .type = "wis_twTW2804", | ||
388 | .id = I2C_DRIVERID_WIS_TW2804, | 397 | .id = I2C_DRIVERID_WIS_TW2804, |
389 | .addr = 0x00, /* yes, really */ | 398 | .addr = 0x00, /* yes, really */ |
390 | }, | 399 | }, |
@@ -415,8 +424,9 @@ static struct go7007_usb_board board_sensoray_2250 = { | |||
415 | .num_i2c_devs = 1, | 424 | .num_i2c_devs = 1, |
416 | .i2c_devs = { | 425 | .i2c_devs = { |
417 | { | 426 | { |
427 | .type = "s2250_board", | ||
418 | .id = I2C_DRIVERID_S2250, | 428 | .id = I2C_DRIVERID_S2250, |
419 | .addr = 0x34, | 429 | .addr = 0x43, |
420 | }, | 430 | }, |
421 | }, | 431 | }, |
422 | .num_inputs = 2, | 432 | .num_inputs = 2, |
@@ -943,9 +953,7 @@ static struct i2c_algorithm go7007_usb_algo = { | |||
943 | 953 | ||
944 | static struct i2c_adapter go7007_usb_adap_templ = { | 954 | static struct i2c_adapter go7007_usb_adap_templ = { |
945 | .owner = THIS_MODULE, | 955 | .owner = THIS_MODULE, |
946 | .class = I2C_CLASS_TV_ANALOG, | ||
947 | .name = "WIS GO7007SB EZ-USB", | 956 | .name = "WIS GO7007SB EZ-USB", |
948 | .id = I2C_ALGO_GO7007_USB, | ||
949 | .algo = &go7007_usb_algo, | 957 | .algo = &go7007_usb_algo, |
950 | }; | 958 | }; |
951 | 959 | ||
diff --git a/drivers/staging/go7007/s2250-board.c b/drivers/staging/go7007/s2250-board.c index d333ea2cd77..1706fbf0684 100644 --- a/drivers/staging/go7007/s2250-board.c +++ b/drivers/staging/go7007/s2250-board.c | |||
@@ -28,7 +28,6 @@ extern int s2250loader_init(void); | |||
28 | extern void s2250loader_cleanup(void); | 28 | extern void s2250loader_cleanup(void); |
29 | 29 | ||
30 | #define TLV320_ADDRESS 0x34 | 30 | #define TLV320_ADDRESS 0x34 |
31 | #define S2250_VIDDEC 0x86 | ||
32 | #define VPX322_ADDR_ANALOGCONTROL1 0x02 | 31 | #define VPX322_ADDR_ANALOGCONTROL1 0x02 |
33 | #define VPX322_ADDR_BRIGHTNESS0 0x0127 | 32 | #define VPX322_ADDR_BRIGHTNESS0 0x0127 |
34 | #define VPX322_ADDR_BRIGHTNESS1 0x0131 | 33 | #define VPX322_ADDR_BRIGHTNESS1 0x0131 |
@@ -123,6 +122,7 @@ struct s2250 { | |||
123 | int hue; | 122 | int hue; |
124 | int reg12b_val; | 123 | int reg12b_val; |
125 | int audio_input; | 124 | int audio_input; |
125 | struct i2c_client *audio; | ||
126 | }; | 126 | }; |
127 | 127 | ||
128 | /* from go7007-usb.c which is Copyright (C) 2005-2006 Micronas USA Inc.*/ | 128 | /* from go7007-usb.c which is Copyright (C) 2005-2006 Micronas USA Inc.*/ |
@@ -452,16 +452,15 @@ static int s2250_command(struct i2c_client *client, | |||
452 | { | 452 | { |
453 | struct v4l2_audio *audio = arg; | 453 | struct v4l2_audio *audio = arg; |
454 | 454 | ||
455 | client->addr = TLV320_ADDRESS; | ||
456 | switch (audio->index) { | 455 | switch (audio->index) { |
457 | case 0: | 456 | case 0: |
458 | write_reg(client, 0x08, 0x02); /* Line In */ | 457 | write_reg(dec->audio, 0x08, 0x02); /* Line In */ |
459 | break; | 458 | break; |
460 | case 1: | 459 | case 1: |
461 | write_reg(client, 0x08, 0x04); /* Mic */ | 460 | write_reg(dec->audio, 0x08, 0x04); /* Mic */ |
462 | break; | 461 | break; |
463 | case 2: | 462 | case 2: |
464 | write_reg(client, 0x08, 0x05); /* Mic Boost */ | 463 | write_reg(dec->audio, 0x08, 0x05); /* Mic Boost */ |
465 | break; | 464 | break; |
466 | default: | 465 | default: |
467 | return -EINVAL; | 466 | return -EINVAL; |
@@ -477,31 +476,23 @@ static int s2250_command(struct i2c_client *client, | |||
477 | return 0; | 476 | return 0; |
478 | } | 477 | } |
479 | 478 | ||
480 | static struct i2c_driver s2250_driver; | 479 | static int s2250_probe(struct i2c_client *client, |
481 | 480 | const struct i2c_device_id *id) | |
482 | static struct i2c_client s2250_client_templ = { | ||
483 | .name = "Sensoray 2250", | ||
484 | .driver = &s2250_driver, | ||
485 | }; | ||
486 | |||
487 | static int s2250_detect(struct i2c_adapter *adapter, int addr, int kind) | ||
488 | { | 481 | { |
489 | struct i2c_client *client; | 482 | struct i2c_client *audio; |
483 | struct i2c_adapter *adapter = client->adapter; | ||
490 | struct s2250 *dec; | 484 | struct s2250 *dec; |
491 | u8 *data; | 485 | u8 *data; |
492 | struct go7007 *go = i2c_get_adapdata(adapter); | 486 | struct go7007 *go = i2c_get_adapdata(adapter); |
493 | struct go7007_usb *usb = go->hpi_context; | 487 | struct go7007_usb *usb = go->hpi_context; |
494 | 488 | ||
495 | client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | 489 | audio = i2c_new_dummy(adapter, TLV320_ADDRESS >> 1); |
496 | if (client == NULL) | 490 | if (audio == NULL) |
497 | return -ENOMEM; | 491 | return -ENOMEM; |
498 | memcpy(client, &s2250_client_templ, | ||
499 | sizeof(s2250_client_templ)); | ||
500 | client->adapter = adapter; | ||
501 | 492 | ||
502 | dec = kmalloc(sizeof(struct s2250), GFP_KERNEL); | 493 | dec = kmalloc(sizeof(struct s2250), GFP_KERNEL); |
503 | if (dec == NULL) { | 494 | if (dec == NULL) { |
504 | kfree(client); | 495 | i2c_unregister_device(audio); |
505 | return -ENOMEM; | 496 | return -ENOMEM; |
506 | } | 497 | } |
507 | 498 | ||
@@ -510,7 +501,7 @@ static int s2250_detect(struct i2c_adapter *adapter, int addr, int kind) | |||
510 | dec->contrast = 50; | 501 | dec->contrast = 50; |
511 | dec->saturation = 50; | 502 | dec->saturation = 50; |
512 | dec->hue = 0; | 503 | dec->hue = 0; |
513 | client->addr = TLV320_ADDRESS; | 504 | dec->audio = audio; |
514 | i2c_set_clientdata(client, dec); | 505 | i2c_set_clientdata(client, dec); |
515 | 506 | ||
516 | printk(KERN_DEBUG | 507 | printk(KERN_DEBUG |
@@ -518,28 +509,25 @@ static int s2250_detect(struct i2c_adapter *adapter, int addr, int kind) | |||
518 | adapter->name); | 509 | adapter->name); |
519 | 510 | ||
520 | /* initialize the audio */ | 511 | /* initialize the audio */ |
521 | client->addr = TLV320_ADDRESS; | 512 | if (write_regs(audio, aud_regs) < 0) { |
522 | if (write_regs(client, aud_regs) < 0) { | ||
523 | printk(KERN_ERR | 513 | printk(KERN_ERR |
524 | "s2250: error initializing audio\n"); | 514 | "s2250: error initializing audio\n"); |
525 | kfree(client); | 515 | i2c_unregister_device(audio); |
526 | kfree(dec); | 516 | kfree(dec); |
527 | return 0; | 517 | return 0; |
528 | } | 518 | } |
529 | client->addr = S2250_VIDDEC; | ||
530 | i2c_set_clientdata(client, dec); | ||
531 | 519 | ||
532 | if (write_regs(client, vid_regs) < 0) { | 520 | if (write_regs(client, vid_regs) < 0) { |
533 | printk(KERN_ERR | 521 | printk(KERN_ERR |
534 | "s2250: error initializing decoder\n"); | 522 | "s2250: error initializing decoder\n"); |
535 | kfree(client); | 523 | i2c_unregister_device(audio); |
536 | kfree(dec); | 524 | kfree(dec); |
537 | return 0; | 525 | return 0; |
538 | } | 526 | } |
539 | if (write_regs_fp(client, vid_regs_fp) < 0) { | 527 | if (write_regs_fp(client, vid_regs_fp) < 0) { |
540 | printk(KERN_ERR | 528 | printk(KERN_ERR |
541 | "s2250: error initializing decoder\n"); | 529 | "s2250: error initializing decoder\n"); |
542 | kfree(client); | 530 | i2c_unregister_device(audio); |
543 | kfree(dec); | 531 | kfree(dec); |
544 | return 0; | 532 | return 0; |
545 | } | 533 | } |
@@ -575,32 +563,33 @@ static int s2250_detect(struct i2c_adapter *adapter, int addr, int kind) | |||
575 | up(&usb->i2c_lock); | 563 | up(&usb->i2c_lock); |
576 | } | 564 | } |
577 | 565 | ||
578 | i2c_attach_client(client); | ||
579 | printk("s2250: initialized successfully\n"); | 566 | printk("s2250: initialized successfully\n"); |
580 | return 0; | 567 | return 0; |
581 | } | 568 | } |
582 | 569 | ||
583 | static int s2250_detach(struct i2c_client *client) | 570 | static int s2250_remove(struct i2c_client *client) |
584 | { | 571 | { |
585 | struct s2250 *dec = i2c_get_clientdata(client); | 572 | struct s2250 *dec = i2c_get_clientdata(client); |
586 | int r; | ||
587 | |||
588 | r = i2c_detach_client(client); | ||
589 | if (r < 0) | ||
590 | return r; | ||
591 | 573 | ||
592 | kfree(client); | 574 | i2c_set_clientdata(client, NULL); |
575 | i2c_unregister_device(dec->audio); | ||
593 | kfree(dec); | 576 | kfree(dec); |
594 | return 0; | 577 | return 0; |
595 | } | 578 | } |
596 | 579 | ||
580 | static struct i2c_device_id s2250_id[] = { | ||
581 | { "s2250_board", 0 }, | ||
582 | { } | ||
583 | }; | ||
584 | |||
597 | static struct i2c_driver s2250_driver = { | 585 | static struct i2c_driver s2250_driver = { |
598 | .driver = { | 586 | .driver = { |
599 | .name = "Sensoray 2250 board driver", | 587 | .name = "Sensoray 2250 board driver", |
600 | }, | 588 | }, |
601 | .id = I2C_DRIVERID_S2250, | 589 | .probe = s2250_probe, |
602 | .detach_client = s2250_detach, | 590 | .remove = s2250_remove, |
603 | .command = s2250_command, | 591 | .command = s2250_command, |
592 | .id_table = s2250_id, | ||
604 | }; | 593 | }; |
605 | 594 | ||
606 | static int __init s2250_init(void) | 595 | static int __init s2250_init(void) |
@@ -613,13 +602,13 @@ static int __init s2250_init(void) | |||
613 | 602 | ||
614 | r = i2c_add_driver(&s2250_driver); | 603 | r = i2c_add_driver(&s2250_driver); |
615 | if (r < 0) | 604 | if (r < 0) |
616 | return r; | 605 | s2250loader_cleanup(); |
617 | return wis_i2c_add_driver(s2250_driver.id, s2250_detect); | 606 | |
607 | return r; | ||
618 | } | 608 | } |
619 | 609 | ||
620 | static void __exit s2250_cleanup(void) | 610 | static void __exit s2250_cleanup(void) |
621 | { | 611 | { |
622 | wis_i2c_del_driver(s2250_detect); | ||
623 | i2c_del_driver(&s2250_driver); | 612 | i2c_del_driver(&s2250_driver); |
624 | 613 | ||
625 | s2250loader_cleanup(); | 614 | s2250loader_cleanup(); |
diff --git a/drivers/staging/go7007/wis-i2c.h b/drivers/staging/go7007/wis-i2c.h index 431f41dd396..3c2b9be455d 100644 --- a/drivers/staging/go7007/wis-i2c.h +++ b/drivers/staging/go7007/wis-i2c.h | |||
@@ -24,21 +24,12 @@ | |||
24 | #define I2C_DRIVERID_WIS_OV7640 0xf0f5 | 24 | #define I2C_DRIVERID_WIS_OV7640 0xf0f5 |
25 | #define I2C_DRIVERID_WIS_TW2804 0xf0f6 | 25 | #define I2C_DRIVERID_WIS_TW2804 0xf0f6 |
26 | #define I2C_DRIVERID_S2250 0xf0f7 | 26 | #define I2C_DRIVERID_S2250 0xf0f7 |
27 | #define I2C_ALGO_GO7007 0xf00000 | ||
28 | #define I2C_ALGO_GO7007_USB 0xf10000 | ||
29 | 27 | ||
30 | /* Flag to indicate that the client needs to be accessed with SCCB semantics */ | 28 | /* Flag to indicate that the client needs to be accessed with SCCB semantics */ |
31 | /* We re-use the I2C_M_TEN value so the flag passes through the masks in the | 29 | /* We re-use the I2C_M_TEN value so the flag passes through the masks in the |
32 | * core I2C code. Major kludge, but the I2C layer ain't exactly flexible. */ | 30 | * core I2C code. Major kludge, but the I2C layer ain't exactly flexible. */ |
33 | #define I2C_CLIENT_SCCB 0x10 | 31 | #define I2C_CLIENT_SCCB 0x10 |
34 | 32 | ||
35 | typedef int (*found_proc) (struct i2c_adapter *, int, int); | ||
36 | int wis_i2c_add_driver(unsigned int id, found_proc found_proc); | ||
37 | void wis_i2c_del_driver(found_proc found_proc); | ||
38 | |||
39 | int wis_i2c_probe_device(struct i2c_adapter *adapter, | ||
40 | unsigned int id, int addr); | ||
41 | |||
42 | /* Definitions for new video decoder commands */ | 33 | /* Definitions for new video decoder commands */ |
43 | 34 | ||
44 | struct video_decoder_resolution { | 35 | struct video_decoder_resolution { |
diff --git a/drivers/staging/go7007/wis-ov7640.c b/drivers/staging/go7007/wis-ov7640.c index 2f9efca0460..04d6d3a498a 100644 --- a/drivers/staging/go7007/wis-ov7640.c +++ b/drivers/staging/go7007/wis-ov7640.c | |||
@@ -50,76 +50,54 @@ static int write_regs(struct i2c_client *client, u8 *regs) | |||
50 | return 0; | 50 | return 0; |
51 | } | 51 | } |
52 | 52 | ||
53 | static struct i2c_driver wis_ov7640_driver; | 53 | static int wis_ov7640_probe(struct i2c_client *client, |
54 | 54 | const struct i2c_device_id *id) | |
55 | static struct i2c_client wis_ov7640_client_templ = { | ||
56 | .name = "OV7640 (WIS)", | ||
57 | .driver = &wis_ov7640_driver, | ||
58 | }; | ||
59 | |||
60 | static int wis_ov7640_detect(struct i2c_adapter *adapter, int addr, int kind) | ||
61 | { | 55 | { |
62 | struct i2c_client *client; | 56 | struct i2c_adapter *adapter = client->adapter; |
63 | 57 | ||
64 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) | 58 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) |
65 | return 0; | 59 | return -ENODEV; |
66 | 60 | ||
67 | client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
68 | if (client == NULL) | ||
69 | return -ENOMEM; | ||
70 | memcpy(client, &wis_ov7640_client_templ, | ||
71 | sizeof(wis_ov7640_client_templ)); | ||
72 | client->adapter = adapter; | ||
73 | client->addr = addr; | ||
74 | client->flags = I2C_CLIENT_SCCB; | 61 | client->flags = I2C_CLIENT_SCCB; |
75 | 62 | ||
76 | printk(KERN_DEBUG | 63 | printk(KERN_DEBUG |
77 | "wis-ov7640: initializing OV7640 at address %d on %s\n", | 64 | "wis-ov7640: initializing OV7640 at address %d on %s\n", |
78 | addr, adapter->name); | 65 | client->addr, adapter->name); |
79 | 66 | ||
80 | if (write_regs(client, initial_registers) < 0) { | 67 | if (write_regs(client, initial_registers) < 0) { |
81 | printk(KERN_ERR "wis-ov7640: error initializing OV7640\n"); | 68 | printk(KERN_ERR "wis-ov7640: error initializing OV7640\n"); |
82 | kfree(client); | 69 | return -ENODEV; |
83 | return 0; | ||
84 | } | 70 | } |
85 | 71 | ||
86 | i2c_attach_client(client); | ||
87 | return 0; | 72 | return 0; |
88 | } | 73 | } |
89 | 74 | ||
90 | static int wis_ov7640_detach(struct i2c_client *client) | 75 | static int wis_ov7640_remove(struct i2c_client *client) |
91 | { | 76 | { |
92 | int r; | ||
93 | |||
94 | r = i2c_detach_client(client); | ||
95 | if (r < 0) | ||
96 | return r; | ||
97 | |||
98 | kfree(client); | ||
99 | return 0; | 77 | return 0; |
100 | } | 78 | } |
101 | 79 | ||
80 | static struct i2c_device_id wis_ov7640_id[] = { | ||
81 | { "wis_ov7640", 0 }, | ||
82 | { } | ||
83 | }; | ||
84 | |||
102 | static struct i2c_driver wis_ov7640_driver = { | 85 | static struct i2c_driver wis_ov7640_driver = { |
103 | .driver = { | 86 | .driver = { |
104 | .name = "WIS OV7640 I2C driver", | 87 | .name = "WIS OV7640 I2C driver", |
105 | }, | 88 | }, |
106 | .id = I2C_DRIVERID_WIS_OV7640, | 89 | .probe = wis_ov7640_probe, |
107 | .detach_client = wis_ov7640_detach, | 90 | .remove = wis_ov7640_remove, |
91 | .id_table = wis_ov7640_id, | ||
108 | }; | 92 | }; |
109 | 93 | ||
110 | static int __init wis_ov7640_init(void) | 94 | static int __init wis_ov7640_init(void) |
111 | { | 95 | { |
112 | int r; | 96 | return i2c_add_driver(&wis_ov7640_driver); |
113 | |||
114 | r = i2c_add_driver(&wis_ov7640_driver); | ||
115 | if (r < 0) | ||
116 | return r; | ||
117 | return wis_i2c_add_driver(wis_ov7640_driver.id, wis_ov7640_detect); | ||
118 | } | 97 | } |
119 | 98 | ||
120 | static void __exit wis_ov7640_cleanup(void) | 99 | static void __exit wis_ov7640_cleanup(void) |
121 | { | 100 | { |
122 | wis_i2c_del_driver(wis_ov7640_detect); | ||
123 | i2c_del_driver(&wis_ov7640_driver); | 101 | i2c_del_driver(&wis_ov7640_driver); |
124 | } | 102 | } |
125 | 103 | ||
diff --git a/drivers/staging/go7007/wis-saa7113.c b/drivers/staging/go7007/wis-saa7113.c index 11689723945..9ab893bd204 100644 --- a/drivers/staging/go7007/wis-saa7113.c +++ b/drivers/staging/go7007/wis-saa7113.c | |||
@@ -261,34 +261,19 @@ static int wis_saa7113_command(struct i2c_client *client, | |||
261 | return 0; | 261 | return 0; |
262 | } | 262 | } |
263 | 263 | ||
264 | static struct i2c_driver wis_saa7113_driver; | 264 | static int wis_saa7113_probe(struct i2c_client *client, |
265 | 265 | const struct i2c_device_id *id) | |
266 | static struct i2c_client wis_saa7113_client_templ = { | ||
267 | .name = "SAA7113 (WIS)", | ||
268 | .driver = &wis_saa7113_driver, | ||
269 | }; | ||
270 | |||
271 | static int wis_saa7113_detect(struct i2c_adapter *adapter, int addr, int kind) | ||
272 | { | 266 | { |
273 | struct i2c_client *client; | 267 | struct i2c_adapter *adapter = client->adapter; |
274 | struct wis_saa7113 *dec; | 268 | struct wis_saa7113 *dec; |
275 | 269 | ||
276 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) | 270 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) |
277 | return 0; | 271 | return -ENODEV; |
278 | |||
279 | client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
280 | if (client == NULL) | ||
281 | return -ENOMEM; | ||
282 | memcpy(client, &wis_saa7113_client_templ, | ||
283 | sizeof(wis_saa7113_client_templ)); | ||
284 | client->adapter = adapter; | ||
285 | client->addr = addr; | ||
286 | 272 | ||
287 | dec = kmalloc(sizeof(struct wis_saa7113), GFP_KERNEL); | 273 | dec = kmalloc(sizeof(struct wis_saa7113), GFP_KERNEL); |
288 | if (dec == NULL) { | 274 | if (dec == NULL) |
289 | kfree(client); | ||
290 | return -ENOMEM; | 275 | return -ENOMEM; |
291 | } | 276 | |
292 | dec->norm = V4L2_STD_NTSC; | 277 | dec->norm = V4L2_STD_NTSC; |
293 | dec->brightness = 128; | 278 | dec->brightness = 128; |
294 | dec->contrast = 71; | 279 | dec->contrast = 71; |
@@ -298,56 +283,49 @@ static int wis_saa7113_detect(struct i2c_adapter *adapter, int addr, int kind) | |||
298 | 283 | ||
299 | printk(KERN_DEBUG | 284 | printk(KERN_DEBUG |
300 | "wis-saa7113: initializing SAA7113 at address %d on %s\n", | 285 | "wis-saa7113: initializing SAA7113 at address %d on %s\n", |
301 | addr, adapter->name); | 286 | client->addr, adapter->name); |
302 | 287 | ||
303 | if (write_regs(client, initial_registers) < 0) { | 288 | if (write_regs(client, initial_registers) < 0) { |
304 | printk(KERN_ERR | 289 | printk(KERN_ERR |
305 | "wis-saa7113: error initializing SAA7113\n"); | 290 | "wis-saa7113: error initializing SAA7113\n"); |
306 | kfree(client); | ||
307 | kfree(dec); | 291 | kfree(dec); |
308 | return 0; | 292 | return -ENODEV; |
309 | } | 293 | } |
310 | 294 | ||
311 | i2c_attach_client(client); | ||
312 | return 0; | 295 | return 0; |
313 | } | 296 | } |
314 | 297 | ||
315 | static int wis_saa7113_detach(struct i2c_client *client) | 298 | static int wis_saa7113_remove(struct i2c_client *client) |
316 | { | 299 | { |
317 | struct wis_saa7113 *dec = i2c_get_clientdata(client); | 300 | struct wis_saa7113 *dec = i2c_get_clientdata(client); |
318 | int r; | ||
319 | |||
320 | r = i2c_detach_client(client); | ||
321 | if (r < 0) | ||
322 | return r; | ||
323 | 301 | ||
324 | kfree(client); | 302 | i2c_set_clientdata(client, NULL); |
325 | kfree(dec); | 303 | kfree(dec); |
326 | return 0; | 304 | return 0; |
327 | } | 305 | } |
328 | 306 | ||
307 | static struct i2c_device_id wis_saa7113_id[] = { | ||
308 | { "wis_saa7113", 0 }, | ||
309 | { } | ||
310 | }; | ||
311 | |||
329 | static struct i2c_driver wis_saa7113_driver = { | 312 | static struct i2c_driver wis_saa7113_driver = { |
330 | .driver = { | 313 | .driver = { |
331 | .name = "WIS SAA7113 I2C driver", | 314 | .name = "WIS SAA7113 I2C driver", |
332 | }, | 315 | }, |
333 | .id = I2C_DRIVERID_WIS_SAA7113, | 316 | .probe = wis_saa7113_probe, |
334 | .detach_client = wis_saa7113_detach, | 317 | .remove = wis_saa7113_remove, |
335 | .command = wis_saa7113_command, | 318 | .command = wis_saa7113_command, |
319 | .id_table = wis_saa7113_id, | ||
336 | }; | 320 | }; |
337 | 321 | ||
338 | static int __init wis_saa7113_init(void) | 322 | static int __init wis_saa7113_init(void) |
339 | { | 323 | { |
340 | int r; | 324 | return i2c_add_driver(&wis_saa7113_driver); |
341 | |||
342 | r = i2c_add_driver(&wis_saa7113_driver); | ||
343 | if (r < 0) | ||
344 | return r; | ||
345 | return wis_i2c_add_driver(wis_saa7113_driver.id, wis_saa7113_detect); | ||
346 | } | 325 | } |
347 | 326 | ||
348 | static void __exit wis_saa7113_cleanup(void) | 327 | static void __exit wis_saa7113_cleanup(void) |
349 | { | 328 | { |
350 | wis_i2c_del_driver(wis_saa7113_detect); | ||
351 | i2c_del_driver(&wis_saa7113_driver); | 329 | i2c_del_driver(&wis_saa7113_driver); |
352 | } | 330 | } |
353 | 331 | ||
diff --git a/drivers/staging/go7007/wis-saa7115.c b/drivers/staging/go7007/wis-saa7115.c index 59417a7174d..8687ad2de76 100644 --- a/drivers/staging/go7007/wis-saa7115.c +++ b/drivers/staging/go7007/wis-saa7115.c | |||
@@ -394,34 +394,19 @@ static int wis_saa7115_command(struct i2c_client *client, | |||
394 | return 0; | 394 | return 0; |
395 | } | 395 | } |
396 | 396 | ||
397 | static struct i2c_driver wis_saa7115_driver; | 397 | static int wis_saa7115_probe(struct i2c_client *client, |
398 | 398 | const struct i2c_device_id *id) | |
399 | static struct i2c_client wis_saa7115_client_templ = { | ||
400 | .name = "SAA7115 (WIS)", | ||
401 | .driver = &wis_saa7115_driver, | ||
402 | }; | ||
403 | |||
404 | static int wis_saa7115_detect(struct i2c_adapter *adapter, int addr, int kind) | ||
405 | { | 399 | { |
406 | struct i2c_client *client; | 400 | struct i2c_adapter *adapter = client->adapter; |
407 | struct wis_saa7115 *dec; | 401 | struct wis_saa7115 *dec; |
408 | 402 | ||
409 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) | 403 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) |
410 | return 0; | 404 | return -ENODEV; |
411 | |||
412 | client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
413 | if (client == NULL) | ||
414 | return -ENOMEM; | ||
415 | memcpy(client, &wis_saa7115_client_templ, | ||
416 | sizeof(wis_saa7115_client_templ)); | ||
417 | client->adapter = adapter; | ||
418 | client->addr = addr; | ||
419 | 405 | ||
420 | dec = kmalloc(sizeof(struct wis_saa7115), GFP_KERNEL); | 406 | dec = kmalloc(sizeof(struct wis_saa7115), GFP_KERNEL); |
421 | if (dec == NULL) { | 407 | if (dec == NULL) |
422 | kfree(client); | ||
423 | return -ENOMEM; | 408 | return -ENOMEM; |
424 | } | 409 | |
425 | dec->norm = V4L2_STD_NTSC; | 410 | dec->norm = V4L2_STD_NTSC; |
426 | dec->brightness = 128; | 411 | dec->brightness = 128; |
427 | dec->contrast = 64; | 412 | dec->contrast = 64; |
@@ -431,56 +416,49 @@ static int wis_saa7115_detect(struct i2c_adapter *adapter, int addr, int kind) | |||
431 | 416 | ||
432 | printk(KERN_DEBUG | 417 | printk(KERN_DEBUG |
433 | "wis-saa7115: initializing SAA7115 at address %d on %s\n", | 418 | "wis-saa7115: initializing SAA7115 at address %d on %s\n", |
434 | addr, adapter->name); | 419 | client->addr, adapter->name); |
435 | 420 | ||
436 | if (write_regs(client, initial_registers) < 0) { | 421 | if (write_regs(client, initial_registers) < 0) { |
437 | printk(KERN_ERR | 422 | printk(KERN_ERR |
438 | "wis-saa7115: error initializing SAA7115\n"); | 423 | "wis-saa7115: error initializing SAA7115\n"); |
439 | kfree(client); | ||
440 | kfree(dec); | 424 | kfree(dec); |
441 | return 0; | 425 | return -ENODEV; |
442 | } | 426 | } |
443 | 427 | ||
444 | i2c_attach_client(client); | ||
445 | return 0; | 428 | return 0; |
446 | } | 429 | } |
447 | 430 | ||
448 | static int wis_saa7115_detach(struct i2c_client *client) | 431 | static int wis_saa7115_remove(struct i2c_client *client) |
449 | { | 432 | { |
450 | struct wis_saa7115 *dec = i2c_get_clientdata(client); | 433 | struct wis_saa7115 *dec = i2c_get_clientdata(client); |
451 | int r; | ||
452 | |||
453 | r = i2c_detach_client(client); | ||
454 | if (r < 0) | ||
455 | return r; | ||
456 | 434 | ||
457 | kfree(client); | 435 | i2c_set_clientdata(client, NULL); |
458 | kfree(dec); | 436 | kfree(dec); |
459 | return 0; | 437 | return 0; |
460 | } | 438 | } |
461 | 439 | ||
440 | static struct i2c_device_id wis_saa7115_id[] = { | ||
441 | { "wis_saa7115", 0 }, | ||
442 | { } | ||
443 | }; | ||
444 | |||
462 | static struct i2c_driver wis_saa7115_driver = { | 445 | static struct i2c_driver wis_saa7115_driver = { |
463 | .driver = { | 446 | .driver = { |
464 | .name = "WIS SAA7115 I2C driver", | 447 | .name = "WIS SAA7115 I2C driver", |
465 | }, | 448 | }, |
466 | .id = I2C_DRIVERID_WIS_SAA7115, | 449 | .probe = wis_saa7115_probe, |
467 | .detach_client = wis_saa7115_detach, | 450 | .remove = wis_saa7115_remove, |
468 | .command = wis_saa7115_command, | 451 | .command = wis_saa7115_command, |
452 | .id_table = wis_saa7115_id, | ||
469 | }; | 453 | }; |
470 | 454 | ||
471 | static int __init wis_saa7115_init(void) | 455 | static int __init wis_saa7115_init(void) |
472 | { | 456 | { |
473 | int r; | 457 | return i2c_add_driver(&wis_saa7115_driver); |
474 | |||
475 | r = i2c_add_driver(&wis_saa7115_driver); | ||
476 | if (r < 0) | ||
477 | return r; | ||
478 | return wis_i2c_add_driver(wis_saa7115_driver.id, wis_saa7115_detect); | ||
479 | } | 458 | } |
480 | 459 | ||
481 | static void __exit wis_saa7115_cleanup(void) | 460 | static void __exit wis_saa7115_cleanup(void) |
482 | { | 461 | { |
483 | wis_i2c_del_driver(wis_saa7115_detect); | ||
484 | i2c_del_driver(&wis_saa7115_driver); | 462 | i2c_del_driver(&wis_saa7115_driver); |
485 | } | 463 | } |
486 | 464 | ||
diff --git a/drivers/staging/go7007/wis-sony-tuner.c b/drivers/staging/go7007/wis-sony-tuner.c index 58fddb12237..c965c601ac9 100644 --- a/drivers/staging/go7007/wis-sony-tuner.c +++ b/drivers/staging/go7007/wis-sony-tuner.c | |||
@@ -386,6 +386,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
386 | struct wis_sony_tuner *t = i2c_get_clientdata(client); | 386 | struct wis_sony_tuner *t = i2c_get_clientdata(client); |
387 | 387 | ||
388 | switch (cmd) { | 388 | switch (cmd) { |
389 | #if 0 | ||
389 | #ifdef TUNER_SET_TYPE_ADDR | 390 | #ifdef TUNER_SET_TYPE_ADDR |
390 | case TUNER_SET_TYPE_ADDR: | 391 | case TUNER_SET_TYPE_ADDR: |
391 | { | 392 | { |
@@ -463,6 +464,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
463 | t->type, sony_tuners[t->type - 200].name); | 464 | t->type, sony_tuners[t->type - 200].name); |
464 | break; | 465 | break; |
465 | } | 466 | } |
467 | #endif | ||
466 | case VIDIOC_G_FREQUENCY: | 468 | case VIDIOC_G_FREQUENCY: |
467 | { | 469 | { |
468 | struct v4l2_frequency *f = arg; | 470 | struct v4l2_frequency *f = arg; |
@@ -651,35 +653,19 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
651 | return 0; | 653 | return 0; |
652 | } | 654 | } |
653 | 655 | ||
654 | static struct i2c_driver wis_sony_tuner_driver; | 656 | static int wis_sony_tuner_probe(struct i2c_client *client, |
655 | 657 | const struct i2c_device_id *id) | |
656 | static struct i2c_client wis_sony_tuner_client_templ = { | ||
657 | .name = "Sony TV Tuner (WIS)", | ||
658 | .driver = &wis_sony_tuner_driver, | ||
659 | }; | ||
660 | |||
661 | static int wis_sony_tuner_detect(struct i2c_adapter *adapter, | ||
662 | int addr, int kind) | ||
663 | { | 658 | { |
664 | struct i2c_client *client; | 659 | struct i2c_adapter *adapter = client->adapter; |
665 | struct wis_sony_tuner *t; | 660 | struct wis_sony_tuner *t; |
666 | 661 | ||
667 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) | 662 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) |
668 | return 0; | 663 | return -ENODEV; |
669 | |||
670 | client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
671 | if (client == NULL) | ||
672 | return -ENOMEM; | ||
673 | memcpy(client, &wis_sony_tuner_client_templ, | ||
674 | sizeof(wis_sony_tuner_client_templ)); | ||
675 | client->adapter = adapter; | ||
676 | client->addr = addr; | ||
677 | 664 | ||
678 | t = kmalloc(sizeof(struct wis_sony_tuner), GFP_KERNEL); | 665 | t = kmalloc(sizeof(struct wis_sony_tuner), GFP_KERNEL); |
679 | if (t == NULL) { | 666 | if (t == NULL) |
680 | kfree(client); | ||
681 | return -ENOMEM; | 667 | return -ENOMEM; |
682 | } | 668 | |
683 | t->type = -1; | 669 | t->type = -1; |
684 | t->freq = 0; | 670 | t->freq = 0; |
685 | t->mpxmode = 0; | 671 | t->mpxmode = 0; |
@@ -688,50 +674,42 @@ static int wis_sony_tuner_detect(struct i2c_adapter *adapter, | |||
688 | 674 | ||
689 | printk(KERN_DEBUG | 675 | printk(KERN_DEBUG |
690 | "wis-sony-tuner: initializing tuner at address %d on %s\n", | 676 | "wis-sony-tuner: initializing tuner at address %d on %s\n", |
691 | addr, adapter->name); | 677 | client->addr, adapter->name); |
692 | |||
693 | i2c_attach_client(client); | ||
694 | 678 | ||
695 | return 0; | 679 | return 0; |
696 | } | 680 | } |
697 | 681 | ||
698 | static int wis_sony_tuner_detach(struct i2c_client *client) | 682 | static int wis_sony_tuner_remove(struct i2c_client *client) |
699 | { | 683 | { |
700 | struct wis_sony_tuner *t = i2c_get_clientdata(client); | 684 | struct wis_sony_tuner *t = i2c_get_clientdata(client); |
701 | int r; | ||
702 | |||
703 | r = i2c_detach_client(client); | ||
704 | if (r < 0) | ||
705 | return r; | ||
706 | 685 | ||
686 | i2c_set_clientdata(client, NULL); | ||
707 | kfree(t); | 687 | kfree(t); |
708 | kfree(client); | ||
709 | return 0; | 688 | return 0; |
710 | } | 689 | } |
711 | 690 | ||
691 | static struct i2c_device_id wis_sony_tuner_id[] = { | ||
692 | { "wis_sony_tuner", 0 }, | ||
693 | { } | ||
694 | }; | ||
695 | |||
712 | static struct i2c_driver wis_sony_tuner_driver = { | 696 | static struct i2c_driver wis_sony_tuner_driver = { |
713 | .driver = { | 697 | .driver = { |
714 | .name = "WIS Sony TV Tuner I2C driver", | 698 | .name = "WIS Sony TV Tuner I2C driver", |
715 | }, | 699 | }, |
716 | .id = I2C_DRIVERID_WIS_SONY_TUNER, | 700 | .probe = wis_sony_tuner_probe, |
717 | .detach_client = wis_sony_tuner_detach, | 701 | .remove = wis_sony_tuner_remove, |
718 | .command = tuner_command, | 702 | .command = tuner_command, |
703 | .id_table = wis_sony_tuner_id, | ||
719 | }; | 704 | }; |
720 | 705 | ||
721 | static int __init wis_sony_tuner_init(void) | 706 | static int __init wis_sony_tuner_init(void) |
722 | { | 707 | { |
723 | int r; | 708 | return i2c_add_driver(&wis_sony_tuner_driver); |
724 | |||
725 | r = i2c_add_driver(&wis_sony_tuner_driver); | ||
726 | if (r < 0) | ||
727 | return r; | ||
728 | return wis_i2c_add_driver(wis_sony_tuner_driver.id, | ||
729 | wis_sony_tuner_detect); | ||
730 | } | 709 | } |
731 | 710 | ||
732 | static void __exit wis_sony_tuner_cleanup(void) | 711 | static void __exit wis_sony_tuner_cleanup(void) |
733 | { | 712 | { |
734 | wis_i2c_del_driver(wis_sony_tuner_detect); | ||
735 | i2c_del_driver(&wis_sony_tuner_driver); | 713 | i2c_del_driver(&wis_sony_tuner_driver); |
736 | } | 714 | } |
737 | 715 | ||
diff --git a/drivers/staging/go7007/wis-tw2804.c b/drivers/staging/go7007/wis-tw2804.c index 57b8f2b1caa..e15794a2a0a 100644 --- a/drivers/staging/go7007/wis-tw2804.c +++ b/drivers/staging/go7007/wis-tw2804.c | |||
@@ -291,34 +291,19 @@ static int wis_tw2804_command(struct i2c_client *client, | |||
291 | return 0; | 291 | return 0; |
292 | } | 292 | } |
293 | 293 | ||
294 | static struct i2c_driver wis_tw2804_driver; | 294 | static int wis_tw2804_probe(struct i2c_client *client, |
295 | 295 | const struct i2c_device_id *id) | |
296 | static struct i2c_client wis_tw2804_client_templ = { | ||
297 | .name = "TW2804 (WIS)", | ||
298 | .driver = &wis_tw2804_driver, | ||
299 | }; | ||
300 | |||
301 | static int wis_tw2804_detect(struct i2c_adapter *adapter, int addr, int kind) | ||
302 | { | 296 | { |
303 | struct i2c_client *client; | 297 | struct i2c_adapter *adapter = client->adapter; |
304 | struct wis_tw2804 *dec; | 298 | struct wis_tw2804 *dec; |
305 | 299 | ||
306 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) | 300 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) |
307 | return 0; | 301 | return -ENODEV; |
308 | |||
309 | client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
310 | if (client == NULL) | ||
311 | return -ENOMEM; | ||
312 | memcpy(client, &wis_tw2804_client_templ, | ||
313 | sizeof(wis_tw2804_client_templ)); | ||
314 | client->adapter = adapter; | ||
315 | client->addr = addr; | ||
316 | 302 | ||
317 | dec = kmalloc(sizeof(struct wis_tw2804), GFP_KERNEL); | 303 | dec = kmalloc(sizeof(struct wis_tw2804), GFP_KERNEL); |
318 | if (dec == NULL) { | 304 | if (dec == NULL) |
319 | kfree(client); | ||
320 | return -ENOMEM; | 305 | return -ENOMEM; |
321 | } | 306 | |
322 | dec->channel = -1; | 307 | dec->channel = -1; |
323 | dec->norm = V4L2_STD_NTSC; | 308 | dec->norm = V4L2_STD_NTSC; |
324 | dec->brightness = 128; | 309 | dec->brightness = 128; |
@@ -328,48 +313,42 @@ static int wis_tw2804_detect(struct i2c_adapter *adapter, int addr, int kind) | |||
328 | i2c_set_clientdata(client, dec); | 313 | i2c_set_clientdata(client, dec); |
329 | 314 | ||
330 | printk(KERN_DEBUG "wis-tw2804: creating TW2804 at address %d on %s\n", | 315 | printk(KERN_DEBUG "wis-tw2804: creating TW2804 at address %d on %s\n", |
331 | addr, adapter->name); | 316 | client->addr, adapter->name); |
332 | 317 | ||
333 | i2c_attach_client(client); | ||
334 | return 0; | 318 | return 0; |
335 | } | 319 | } |
336 | 320 | ||
337 | static int wis_tw2804_detach(struct i2c_client *client) | 321 | static int wis_tw2804_remove(struct i2c_client *client) |
338 | { | 322 | { |
339 | struct wis_tw2804 *dec = i2c_get_clientdata(client); | 323 | struct wis_tw2804 *dec = i2c_get_clientdata(client); |
340 | int r; | ||
341 | |||
342 | r = i2c_detach_client(client); | ||
343 | if (r < 0) | ||
344 | return r; | ||
345 | 324 | ||
346 | kfree(client); | 325 | i2c_set_clientdata(client, NULL); |
347 | kfree(dec); | 326 | kfree(dec); |
348 | return 0; | 327 | return 0; |
349 | } | 328 | } |
350 | 329 | ||
330 | static struct i2c_device_id wis_tw2804_id[] = { | ||
331 | { "wis_tw2804", 0 }, | ||
332 | { } | ||
333 | }; | ||
334 | |||
351 | static struct i2c_driver wis_tw2804_driver = { | 335 | static struct i2c_driver wis_tw2804_driver = { |
352 | .driver = { | 336 | .driver = { |
353 | .name = "WIS TW2804 I2C driver", | 337 | .name = "WIS TW2804 I2C driver", |
354 | }, | 338 | }, |
355 | .id = I2C_DRIVERID_WIS_TW2804, | 339 | .probe = wis_tw2804_probe, |
356 | .detach_client = wis_tw2804_detach, | 340 | .remove = wis_tw2804_remove, |
357 | .command = wis_tw2804_command, | 341 | .command = wis_tw2804_command, |
342 | .id_table = wis_tw2804_id, | ||
358 | }; | 343 | }; |
359 | 344 | ||
360 | static int __init wis_tw2804_init(void) | 345 | static int __init wis_tw2804_init(void) |
361 | { | 346 | { |
362 | int r; | 347 | return i2c_add_driver(&wis_tw2804_driver); |
363 | |||
364 | r = i2c_add_driver(&wis_tw2804_driver); | ||
365 | if (r < 0) | ||
366 | return r; | ||
367 | return wis_i2c_add_driver(wis_tw2804_driver.id, wis_tw2804_detect); | ||
368 | } | 348 | } |
369 | 349 | ||
370 | static void __exit wis_tw2804_cleanup(void) | 350 | static void __exit wis_tw2804_cleanup(void) |
371 | { | 351 | { |
372 | wis_i2c_del_driver(wis_tw2804_detect); | ||
373 | i2c_del_driver(&wis_tw2804_driver); | 352 | i2c_del_driver(&wis_tw2804_driver); |
374 | } | 353 | } |
375 | 354 | ||
diff --git a/drivers/staging/go7007/wis-tw9903.c b/drivers/staging/go7007/wis-tw9903.c index 40627b282cb..6c3427bb6f4 100644 --- a/drivers/staging/go7007/wis-tw9903.c +++ b/drivers/staging/go7007/wis-tw9903.c | |||
@@ -267,34 +267,19 @@ static int wis_tw9903_command(struct i2c_client *client, | |||
267 | return 0; | 267 | return 0; |
268 | } | 268 | } |
269 | 269 | ||
270 | static struct i2c_driver wis_tw9903_driver; | 270 | static int wis_tw9903_probe(struct i2c_client *client, |
271 | 271 | const struct i2c_device_id *id) | |
272 | static struct i2c_client wis_tw9903_client_templ = { | ||
273 | .name = "TW9903 (WIS)", | ||
274 | .driver = &wis_tw9903_driver, | ||
275 | }; | ||
276 | |||
277 | static int wis_tw9903_detect(struct i2c_adapter *adapter, int addr, int kind) | ||
278 | { | 272 | { |
279 | struct i2c_client *client; | 273 | struct i2c_adapter *adapter = client->adapter; |
280 | struct wis_tw9903 *dec; | 274 | struct wis_tw9903 *dec; |
281 | 275 | ||
282 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) | 276 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) |
283 | return 0; | 277 | return -ENODEV; |
284 | |||
285 | client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
286 | if (client == NULL) | ||
287 | return -ENOMEM; | ||
288 | memcpy(client, &wis_tw9903_client_templ, | ||
289 | sizeof(wis_tw9903_client_templ)); | ||
290 | client->adapter = adapter; | ||
291 | client->addr = addr; | ||
292 | 278 | ||
293 | dec = kmalloc(sizeof(struct wis_tw9903), GFP_KERNEL); | 279 | dec = kmalloc(sizeof(struct wis_tw9903), GFP_KERNEL); |
294 | if (dec == NULL) { | 280 | if (dec == NULL) |
295 | kfree(client); | ||
296 | return -ENOMEM; | 281 | return -ENOMEM; |
297 | } | 282 | |
298 | dec->norm = V4L2_STD_NTSC; | 283 | dec->norm = V4L2_STD_NTSC; |
299 | dec->brightness = 0; | 284 | dec->brightness = 0; |
300 | dec->contrast = 0x60; | 285 | dec->contrast = 0x60; |
@@ -303,55 +288,48 @@ static int wis_tw9903_detect(struct i2c_adapter *adapter, int addr, int kind) | |||
303 | 288 | ||
304 | printk(KERN_DEBUG | 289 | printk(KERN_DEBUG |
305 | "wis-tw9903: initializing TW9903 at address %d on %s\n", | 290 | "wis-tw9903: initializing TW9903 at address %d on %s\n", |
306 | addr, adapter->name); | 291 | client->addr, adapter->name); |
307 | 292 | ||
308 | if (write_regs(client, initial_registers) < 0) { | 293 | if (write_regs(client, initial_registers) < 0) { |
309 | printk(KERN_ERR "wis-tw9903: error initializing TW9903\n"); | 294 | printk(KERN_ERR "wis-tw9903: error initializing TW9903\n"); |
310 | kfree(client); | ||
311 | kfree(dec); | 295 | kfree(dec); |
312 | return 0; | 296 | return -ENODEV; |
313 | } | 297 | } |
314 | 298 | ||
315 | i2c_attach_client(client); | ||
316 | return 0; | 299 | return 0; |
317 | } | 300 | } |
318 | 301 | ||
319 | static int wis_tw9903_detach(struct i2c_client *client) | 302 | static int wis_tw9903_remove(struct i2c_client *client) |
320 | { | 303 | { |
321 | struct wis_tw9903 *dec = i2c_get_clientdata(client); | 304 | struct wis_tw9903 *dec = i2c_get_clientdata(client); |
322 | int r; | ||
323 | |||
324 | r = i2c_detach_client(client); | ||
325 | if (r < 0) | ||
326 | return r; | ||
327 | 305 | ||
328 | kfree(client); | 306 | i2c_set_clientdata(client, NULL); |
329 | kfree(dec); | 307 | kfree(dec); |
330 | return 0; | 308 | return 0; |
331 | } | 309 | } |
332 | 310 | ||
311 | static struct i2c_device_id wis_tw9903_id[] = { | ||
312 | { "wis_tw9903", 0 }, | ||
313 | { } | ||
314 | }; | ||
315 | |||
333 | static struct i2c_driver wis_tw9903_driver = { | 316 | static struct i2c_driver wis_tw9903_driver = { |
334 | .driver = { | 317 | .driver = { |
335 | .name = "WIS TW9903 I2C driver", | 318 | .name = "WIS TW9903 I2C driver", |
336 | }, | 319 | }, |
337 | .id = I2C_DRIVERID_WIS_TW9903, | 320 | .probe = wis_tw9903_probe, |
338 | .detach_client = wis_tw9903_detach, | 321 | .remove = wis_tw9903_remove, |
339 | .command = wis_tw9903_command, | 322 | .command = wis_tw9903_command, |
323 | .id_table = wis_tw9903_id, | ||
340 | }; | 324 | }; |
341 | 325 | ||
342 | static int __init wis_tw9903_init(void) | 326 | static int __init wis_tw9903_init(void) |
343 | { | 327 | { |
344 | int r; | 328 | return i2c_add_driver(&wis_tw9903_driver); |
345 | |||
346 | r = i2c_add_driver(&wis_tw9903_driver); | ||
347 | if (r < 0) | ||
348 | return r; | ||
349 | return wis_i2c_add_driver(wis_tw9903_driver.id, wis_tw9903_detect); | ||
350 | } | 329 | } |
351 | 330 | ||
352 | static void __exit wis_tw9903_cleanup(void) | 331 | static void __exit wis_tw9903_cleanup(void) |
353 | { | 332 | { |
354 | wis_i2c_del_driver(wis_tw9903_detect); | ||
355 | i2c_del_driver(&wis_tw9903_driver); | 333 | i2c_del_driver(&wis_tw9903_driver); |
356 | } | 334 | } |
357 | 335 | ||
diff --git a/drivers/staging/go7007/wis-uda1342.c b/drivers/staging/go7007/wis-uda1342.c index 555645c0cc1..739c7ae8913 100644 --- a/drivers/staging/go7007/wis-uda1342.c +++ b/drivers/staging/go7007/wis-uda1342.c | |||
@@ -59,73 +59,51 @@ static int wis_uda1342_command(struct i2c_client *client, | |||
59 | return 0; | 59 | return 0; |
60 | } | 60 | } |
61 | 61 | ||
62 | static struct i2c_driver wis_uda1342_driver; | 62 | static int wis_uda1342_probe(struct i2c_client *client, |
63 | 63 | const struct i2c_device_id *id) | |
64 | static struct i2c_client wis_uda1342_client_templ = { | ||
65 | .name = "UDA1342 (WIS)", | ||
66 | .driver = &wis_uda1342_driver, | ||
67 | }; | ||
68 | |||
69 | static int wis_uda1342_detect(struct i2c_adapter *adapter, int addr, int kind) | ||
70 | { | 64 | { |
71 | struct i2c_client *client; | 65 | struct i2c_adapter *adapter = client->adapter; |
72 | 66 | ||
73 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) | 67 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) |
74 | return 0; | 68 | return -ENODEV; |
75 | |||
76 | client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
77 | if (client == NULL) | ||
78 | return -ENOMEM; | ||
79 | memcpy(client, &wis_uda1342_client_templ, | ||
80 | sizeof(wis_uda1342_client_templ)); | ||
81 | client->adapter = adapter; | ||
82 | client->addr = addr; | ||
83 | 69 | ||
84 | printk(KERN_DEBUG | 70 | printk(KERN_DEBUG |
85 | "wis-uda1342: initializing UDA1342 at address %d on %s\n", | 71 | "wis-uda1342: initializing UDA1342 at address %d on %s\n", |
86 | addr, adapter->name); | 72 | client->addr, adapter->name); |
87 | 73 | ||
88 | write_reg(client, 0x00, 0x8000); /* reset registers */ | 74 | write_reg(client, 0x00, 0x8000); /* reset registers */ |
89 | write_reg(client, 0x00, 0x1241); /* select input 1 */ | 75 | write_reg(client, 0x00, 0x1241); /* select input 1 */ |
90 | 76 | ||
91 | i2c_attach_client(client); | ||
92 | return 0; | 77 | return 0; |
93 | } | 78 | } |
94 | 79 | ||
95 | static int wis_uda1342_detach(struct i2c_client *client) | 80 | static int wis_uda1342_remove(struct i2c_client *client) |
96 | { | 81 | { |
97 | int r; | ||
98 | |||
99 | r = i2c_detach_client(client); | ||
100 | if (r < 0) | ||
101 | return r; | ||
102 | |||
103 | kfree(client); | ||
104 | return 0; | 82 | return 0; |
105 | } | 83 | } |
106 | 84 | ||
85 | static struct i2c_device_id wis_uda1342_id[] = { | ||
86 | { "wis_uda1342", 0 }, | ||
87 | { } | ||
88 | }; | ||
89 | |||
107 | static struct i2c_driver wis_uda1342_driver = { | 90 | static struct i2c_driver wis_uda1342_driver = { |
108 | .driver = { | 91 | .driver = { |
109 | .name = "WIS UDA1342 I2C driver", | 92 | .name = "WIS UDA1342 I2C driver", |
110 | }, | 93 | }, |
111 | .id = I2C_DRIVERID_WIS_UDA1342, | 94 | .probe = wis_uda1342_probe, |
112 | .detach_client = wis_uda1342_detach, | 95 | .remove = wis_uda1342_remove, |
113 | .command = wis_uda1342_command, | 96 | .command = wis_uda1342_command, |
97 | .id_table = wis_uda1342_id, | ||
114 | }; | 98 | }; |
115 | 99 | ||
116 | static int __init wis_uda1342_init(void) | 100 | static int __init wis_uda1342_init(void) |
117 | { | 101 | { |
118 | int r; | 102 | return i2c_add_driver(&wis_uda1342_driver); |
119 | |||
120 | r = i2c_add_driver(&wis_uda1342_driver); | ||
121 | if (r < 0) | ||
122 | return r; | ||
123 | return wis_i2c_add_driver(wis_uda1342_driver.id, wis_uda1342_detect); | ||
124 | } | 103 | } |
125 | 104 | ||
126 | static void __exit wis_uda1342_cleanup(void) | 105 | static void __exit wis_uda1342_cleanup(void) |
127 | { | 106 | { |
128 | wis_i2c_del_driver(wis_uda1342_detect); | ||
129 | i2c_del_driver(&wis_uda1342_driver); | 107 | i2c_del_driver(&wis_uda1342_driver); |
130 | } | 108 | } |
131 | 109 | ||
diff --git a/drivers/staging/line6/audio.c b/drivers/staging/line6/audio.c index 3aa946899ce..e2ac8d60f8c 100644 --- a/drivers/staging/line6/audio.c +++ b/drivers/staging/line6/audio.c | |||
@@ -27,11 +27,12 @@ int line6_init_audio(struct usb_line6 *line6) | |||
27 | { | 27 | { |
28 | static int dev; | 28 | static int dev; |
29 | struct snd_card *card; | 29 | struct snd_card *card; |
30 | int err; | ||
30 | 31 | ||
31 | card = snd_card_new(line6_index[dev], line6_id[dev], THIS_MODULE, 0); | 32 | err = snd_card_create(line6_index[dev], line6_id[dev], THIS_MODULE, 0, |
32 | 33 | &card); | |
33 | if (card == NULL) | 34 | if (err < 0) |
34 | return -ENOMEM; | 35 | return err; |
35 | 36 | ||
36 | line6->card = card; | 37 | line6->card = card; |
37 | 38 | ||
diff --git a/drivers/staging/otus/usbdrv.c b/drivers/staging/otus/usbdrv.c index 565a839589f..540cbbb826f 100644 --- a/drivers/staging/otus/usbdrv.c +++ b/drivers/staging/otus/usbdrv.c | |||
@@ -822,6 +822,21 @@ int zfLnxVapXmitFrame(struct sk_buff *skb, struct net_device *dev) | |||
822 | return 0; | 822 | return 0; |
823 | } | 823 | } |
824 | 824 | ||
825 | static const struct net_device_ops vap_netdev_ops = { | ||
826 | .ndo_open = zfLnxVapOpen, | ||
827 | .ndo_stop = zfLnxVapClose, | ||
828 | .ndo_start_xmit = zfLnxVapXmitFrame, | ||
829 | .ndo_get_stats = usbdrv_get_stats, | ||
830 | .ndo_change_mtu = usbdrv_change_mtu, | ||
831 | .ndo_validate_addr = eth_validate_addr, | ||
832 | .ndo_set_mac_address = eth_mac_addr, | ||
833 | #ifdef ZM_HOSTAPD_SUPPORT | ||
834 | .ndo_do_ioctl = usbdrv_ioctl, | ||
835 | #else | ||
836 | .ndo_do_ioctl = NULL, | ||
837 | #endif | ||
838 | }; | ||
839 | |||
825 | int zfLnxRegisterVapDev(struct net_device* parentDev, u16_t vapId) | 840 | int zfLnxRegisterVapDev(struct net_device* parentDev, u16_t vapId) |
826 | { | 841 | { |
827 | /* Allocate net device structure */ | 842 | /* Allocate net device structure */ |
@@ -846,16 +861,7 @@ int zfLnxRegisterVapDev(struct net_device* parentDev, u16_t vapId) | |||
846 | vap[vapId].dev->ml_priv = parentDev->ml_priv; | 861 | vap[vapId].dev->ml_priv = parentDev->ml_priv; |
847 | 862 | ||
848 | //dev->hard_start_xmit = &zd1212_wds_xmit_frame; | 863 | //dev->hard_start_xmit = &zd1212_wds_xmit_frame; |
849 | vap[vapId].dev->hard_start_xmit = &zfLnxVapXmitFrame; | 864 | vap[vapId].dev->netdev_ops = &vap_netdev_ops; |
850 | vap[vapId].dev->open = &zfLnxVapOpen; | ||
851 | vap[vapId].dev->stop = &zfLnxVapClose; | ||
852 | vap[vapId].dev->get_stats = &usbdrv_get_stats; | ||
853 | vap[vapId].dev->change_mtu = &usbdrv_change_mtu; | ||
854 | #ifdef ZM_HOSTAPD_SUPPORT | ||
855 | vap[vapId].dev->do_ioctl = usbdrv_ioctl; | ||
856 | #else | ||
857 | vap[vapId].dev->do_ioctl = NULL; | ||
858 | #endif | ||
859 | vap[vapId].dev->destructor = free_netdev; | 865 | vap[vapId].dev->destructor = free_netdev; |
860 | 866 | ||
861 | vap[vapId].dev->tx_queue_len = 0; | 867 | vap[vapId].dev->tx_queue_len = 0; |
@@ -1068,6 +1074,18 @@ void zfLnxUnlinkAllUrbs(struct usbdrv_private *macp) | |||
1068 | usb_unlink_urb(macp->RegInUrb); | 1074 | usb_unlink_urb(macp->RegInUrb); |
1069 | } | 1075 | } |
1070 | 1076 | ||
1077 | static const struct net_device_ops otus_netdev_ops = { | ||
1078 | .ndo_open = usbdrv_open, | ||
1079 | .ndo_stop = usbdrv_close, | ||
1080 | .ndo_start_xmit = usbdrv_xmit_frame, | ||
1081 | .ndo_change_mtu = usbdrv_change_mtu, | ||
1082 | .ndo_get_stats = usbdrv_get_stats, | ||
1083 | .ndo_set_multicast_list = usbdrv_set_multi, | ||
1084 | .ndo_set_mac_address = usbdrv_set_mac, | ||
1085 | .ndo_do_ioctl = usbdrv_ioctl, | ||
1086 | .ndo_validate_addr = eth_validate_addr, | ||
1087 | }; | ||
1088 | |||
1071 | u8_t zfLnxInitSetup(struct net_device *dev, struct usbdrv_private *macp) | 1089 | u8_t zfLnxInitSetup(struct net_device *dev, struct usbdrv_private *macp) |
1072 | { | 1090 | { |
1073 | //unsigned char addr[6]; | 1091 | //unsigned char addr[6]; |
@@ -1092,14 +1110,7 @@ u8_t zfLnxInitSetup(struct net_device *dev, struct usbdrv_private *macp) | |||
1092 | dev->wireless_handlers = (struct iw_handler_def *)&p80211wext_handler_def; | 1110 | dev->wireless_handlers = (struct iw_handler_def *)&p80211wext_handler_def; |
1093 | #endif | 1111 | #endif |
1094 | 1112 | ||
1095 | dev->open = usbdrv_open; | 1113 | dev->netdev_ops = &otus_netdev_ops; |
1096 | dev->hard_start_xmit = usbdrv_xmit_frame; | ||
1097 | dev->stop = usbdrv_close; | ||
1098 | dev->change_mtu = &usbdrv_change_mtu; | ||
1099 | dev->get_stats = usbdrv_get_stats; | ||
1100 | dev->set_multicast_list = usbdrv_set_multi; | ||
1101 | dev->set_mac_address = usbdrv_set_mac; | ||
1102 | dev->do_ioctl = usbdrv_ioctl; | ||
1103 | 1114 | ||
1104 | dev->flags |= IFF_MULTICAST; | 1115 | dev->flags |= IFF_MULTICAST; |
1105 | 1116 | ||
diff --git a/drivers/staging/otus/zdusb.c b/drivers/staging/otus/zdusb.c index 78f1d2224fa..2a6d937ba5e 100644 --- a/drivers/staging/otus/zdusb.c +++ b/drivers/staging/otus/zdusb.c | |||
@@ -48,7 +48,8 @@ static const char driver_name[] = "Otus"; | |||
48 | static struct usb_device_id zd1221_ids [] = { | 48 | static struct usb_device_id zd1221_ids [] = { |
49 | { USB_DEVICE(VENDOR_ATHR, PRODUCT_AR9170) }, | 49 | { USB_DEVICE(VENDOR_ATHR, PRODUCT_AR9170) }, |
50 | { USB_DEVICE(VENDOR_DLINK, PRODUCT_DWA160A) }, | 50 | { USB_DEVICE(VENDOR_DLINK, PRODUCT_DWA160A) }, |
51 | { USB_DEVICE(0x0846, 0x9010) }, | 51 | { USB_DEVICE(VENDOR_NETGEAR, PRODUCT_WNDA3100) }, |
52 | { USB_DEVICE(VENDOR_NETGEAR, PRODUCT_WN111v2) }, | ||
52 | { } /* Terminating entry */ | 53 | { } /* Terminating entry */ |
53 | }; | 54 | }; |
54 | 55 | ||
diff --git a/drivers/staging/otus/zdusb.h b/drivers/staging/otus/zdusb.h index 656dc212ade..9f8ab2e9616 100644 --- a/drivers/staging/otus/zdusb.h +++ b/drivers/staging/otus/zdusb.h | |||
@@ -40,4 +40,8 @@ | |||
40 | #define VENDOR_DLINK 0x07D1 //Dlink | 40 | #define VENDOR_DLINK 0x07D1 //Dlink |
41 | #define PRODUCT_DWA160A 0x3C10 | 41 | #define PRODUCT_DWA160A 0x3C10 |
42 | 42 | ||
43 | #define VENDOR_NETGEAR 0x0846 /* NetGear */ | ||
44 | #define PRODUCT_WNDA3100 0x9010 | ||
45 | #define PRODUCT_WN111v2 0x9001 | ||
46 | |||
43 | #endif | 47 | #endif |
diff --git a/drivers/staging/pohmelfs/config.c b/drivers/staging/pohmelfs/config.c index 3e67da9ea38..a6eaa42fb66 100644 --- a/drivers/staging/pohmelfs/config.c +++ b/drivers/staging/pohmelfs/config.c | |||
@@ -81,6 +81,45 @@ static struct pohmelfs_config_group *pohmelfs_find_create_config_group(unsigned | |||
81 | return g; | 81 | return g; |
82 | } | 82 | } |
83 | 83 | ||
84 | static inline void pohmelfs_insert_config_entry(struct pohmelfs_sb *psb, struct pohmelfs_config *dst) | ||
85 | { | ||
86 | struct pohmelfs_config *tmp; | ||
87 | |||
88 | INIT_LIST_HEAD(&dst->config_entry); | ||
89 | |||
90 | list_for_each_entry(tmp, &psb->state_list, config_entry) { | ||
91 | if (dst->state.ctl.prio > tmp->state.ctl.prio) | ||
92 | list_add_tail(&dst->config_entry, &tmp->config_entry); | ||
93 | } | ||
94 | if (list_empty(&dst->config_entry)) | ||
95 | list_add_tail(&dst->config_entry, &psb->state_list); | ||
96 | } | ||
97 | |||
98 | static int pohmelfs_move_config_entry(struct pohmelfs_sb *psb, | ||
99 | struct pohmelfs_config *dst, struct pohmelfs_config *new) | ||
100 | { | ||
101 | if ((dst->state.ctl.prio == new->state.ctl.prio) && | ||
102 | (dst->state.ctl.perm == new->state.ctl.perm)) | ||
103 | return 0; | ||
104 | |||
105 | dprintk("%s: dst: prio: %d, perm: %x, new: prio: %d, perm: %d.\n", | ||
106 | __func__, dst->state.ctl.prio, dst->state.ctl.perm, | ||
107 | new->state.ctl.prio, new->state.ctl.perm); | ||
108 | dst->state.ctl.prio = new->state.ctl.prio; | ||
109 | dst->state.ctl.perm = new->state.ctl.perm; | ||
110 | |||
111 | list_del_init(&dst->config_entry); | ||
112 | pohmelfs_insert_config_entry(psb, dst); | ||
113 | return 0; | ||
114 | } | ||
115 | |||
116 | /* | ||
117 | * pohmelfs_copy_config() is used to copy new state configs from the | ||
118 | * config group (controlled by the netlink messages) into the superblock. | ||
119 | * This happens either at startup time where no transactions can access | ||
120 | * the list of the configs (and thus list of the network states), or at | ||
121 | * run-time, where it is protected by the psb->state_lock. | ||
122 | */ | ||
84 | int pohmelfs_copy_config(struct pohmelfs_sb *psb) | 123 | int pohmelfs_copy_config(struct pohmelfs_sb *psb) |
85 | { | 124 | { |
86 | struct pohmelfs_config_group *g; | 125 | struct pohmelfs_config_group *g; |
@@ -103,7 +142,9 @@ int pohmelfs_copy_config(struct pohmelfs_sb *psb) | |||
103 | err = 0; | 142 | err = 0; |
104 | list_for_each_entry(dst, &psb->state_list, config_entry) { | 143 | list_for_each_entry(dst, &psb->state_list, config_entry) { |
105 | if (pohmelfs_config_eql(&dst->state.ctl, &c->state.ctl)) { | 144 | if (pohmelfs_config_eql(&dst->state.ctl, &c->state.ctl)) { |
106 | err = -EEXIST; | 145 | err = pohmelfs_move_config_entry(psb, dst, c); |
146 | if (!err) | ||
147 | err = -EEXIST; | ||
107 | break; | 148 | break; |
108 | } | 149 | } |
109 | } | 150 | } |
@@ -119,7 +160,7 @@ int pohmelfs_copy_config(struct pohmelfs_sb *psb) | |||
119 | 160 | ||
120 | memcpy(&dst->state.ctl, &c->state.ctl, sizeof(struct pohmelfs_ctl)); | 161 | memcpy(&dst->state.ctl, &c->state.ctl, sizeof(struct pohmelfs_ctl)); |
121 | 162 | ||
122 | list_add_tail(&dst->config_entry, &psb->state_list); | 163 | pohmelfs_insert_config_entry(psb, dst); |
123 | 164 | ||
124 | err = pohmelfs_state_init_one(psb, dst); | 165 | err = pohmelfs_state_init_one(psb, dst); |
125 | if (err) { | 166 | if (err) { |
@@ -248,6 +289,13 @@ out_unlock: | |||
248 | return err; | 289 | return err; |
249 | } | 290 | } |
250 | 291 | ||
292 | static int pohmelfs_modify_config(struct pohmelfs_ctl *old, struct pohmelfs_ctl *new) | ||
293 | { | ||
294 | old->perm = new->perm; | ||
295 | old->prio = new->prio; | ||
296 | return 0; | ||
297 | } | ||
298 | |||
251 | static int pohmelfs_cn_ctl(struct cn_msg *msg, int action) | 299 | static int pohmelfs_cn_ctl(struct cn_msg *msg, int action) |
252 | { | 300 | { |
253 | struct pohmelfs_config_group *g; | 301 | struct pohmelfs_config_group *g; |
@@ -278,6 +326,9 @@ static int pohmelfs_cn_ctl(struct cn_msg *msg, int action) | |||
278 | g->num_entry--; | 326 | g->num_entry--; |
279 | kfree(c); | 327 | kfree(c); |
280 | goto out_unlock; | 328 | goto out_unlock; |
329 | } else if (action == POHMELFS_FLAGS_MODIFY) { | ||
330 | err = pohmelfs_modify_config(sc, ctl); | ||
331 | goto out_unlock; | ||
281 | } else { | 332 | } else { |
282 | err = -EEXIST; | 333 | err = -EEXIST; |
283 | goto out_unlock; | 334 | goto out_unlock; |
@@ -296,6 +347,7 @@ static int pohmelfs_cn_ctl(struct cn_msg *msg, int action) | |||
296 | } | 347 | } |
297 | memcpy(&c->state.ctl, ctl, sizeof(struct pohmelfs_ctl)); | 348 | memcpy(&c->state.ctl, ctl, sizeof(struct pohmelfs_ctl)); |
298 | g->num_entry++; | 349 | g->num_entry++; |
350 | |||
299 | list_add_tail(&c->config_entry, &g->config_list); | 351 | list_add_tail(&c->config_entry, &g->config_list); |
300 | 352 | ||
301 | out_unlock: | 353 | out_unlock: |
@@ -401,10 +453,9 @@ static void pohmelfs_cn_callback(void *data) | |||
401 | 453 | ||
402 | switch (msg->flags) { | 454 | switch (msg->flags) { |
403 | case POHMELFS_FLAGS_ADD: | 455 | case POHMELFS_FLAGS_ADD: |
404 | err = pohmelfs_cn_ctl(msg, POHMELFS_FLAGS_ADD); | ||
405 | break; | ||
406 | case POHMELFS_FLAGS_DEL: | 456 | case POHMELFS_FLAGS_DEL: |
407 | err = pohmelfs_cn_ctl(msg, POHMELFS_FLAGS_DEL); | 457 | case POHMELFS_FLAGS_MODIFY: |
458 | err = pohmelfs_cn_ctl(msg, msg->flags); | ||
408 | break; | 459 | break; |
409 | case POHMELFS_FLAGS_SHOW: | 460 | case POHMELFS_FLAGS_SHOW: |
410 | err = pohmelfs_cn_disp(msg); | 461 | err = pohmelfs_cn_disp(msg); |
diff --git a/drivers/staging/pohmelfs/dir.c b/drivers/staging/pohmelfs/dir.c index 7a41183a32e..b5799842fb8 100644 --- a/drivers/staging/pohmelfs/dir.c +++ b/drivers/staging/pohmelfs/dir.c | |||
@@ -328,7 +328,7 @@ static int pohmelfs_sync_remote_dir(struct pohmelfs_inode *pi) | |||
328 | { | 328 | { |
329 | struct inode *inode = &pi->vfs_inode; | 329 | struct inode *inode = &pi->vfs_inode; |
330 | struct pohmelfs_sb *psb = POHMELFS_SB(inode->i_sb); | 330 | struct pohmelfs_sb *psb = POHMELFS_SB(inode->i_sb); |
331 | long ret = msecs_to_jiffies(25000); | 331 | long ret = psb->wait_on_page_timeout; |
332 | int err; | 332 | int err; |
333 | 333 | ||
334 | dprintk("%s: dir: %llu, state: %lx: remote_synced: %d.\n", | 334 | dprintk("%s: dir: %llu, state: %lx: remote_synced: %d.\n", |
@@ -389,11 +389,11 @@ static int pohmelfs_readdir(struct file *file, void *dirent, filldir_t filldir) | |||
389 | dprintk("%s: parent: %llu, fpos: %llu, hash: %08lx.\n", | 389 | dprintk("%s: parent: %llu, fpos: %llu, hash: %08lx.\n", |
390 | __func__, pi->ino, (u64)file->f_pos, | 390 | __func__, pi->ino, (u64)file->f_pos, |
391 | (unsigned long)file->private_data); | 391 | (unsigned long)file->private_data); |
392 | 392 | #if 0 | |
393 | err = pohmelfs_data_lock(pi, 0, ~0, POHMELFS_READ_LOCK); | 393 | err = pohmelfs_data_lock(pi, 0, ~0, POHMELFS_READ_LOCK); |
394 | if (err) | 394 | if (err) |
395 | return err; | 395 | return err; |
396 | 396 | #endif | |
397 | err = pohmelfs_sync_remote_dir(pi); | 397 | err = pohmelfs_sync_remote_dir(pi); |
398 | if (err) | 398 | if (err) |
399 | return err; | 399 | return err; |
@@ -513,10 +513,6 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct | |||
513 | 513 | ||
514 | need_lock = pohmelfs_need_lock(parent, lock_type); | 514 | need_lock = pohmelfs_need_lock(parent, lock_type); |
515 | 515 | ||
516 | err = pohmelfs_data_lock(parent, 0, ~0, lock_type); | ||
517 | if (err) | ||
518 | goto out; | ||
519 | |||
520 | str.hash = jhash(dentry->d_name.name, dentry->d_name.len, 0); | 516 | str.hash = jhash(dentry->d_name.name, dentry->d_name.len, 0); |
521 | 517 | ||
522 | mutex_lock(&parent->offset_lock); | 518 | mutex_lock(&parent->offset_lock); |
@@ -525,8 +521,8 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct | |||
525 | ino = n->ino; | 521 | ino = n->ino; |
526 | mutex_unlock(&parent->offset_lock); | 522 | mutex_unlock(&parent->offset_lock); |
527 | 523 | ||
528 | dprintk("%s: 1 ino: %lu, inode: %p, name: '%s', hash: %x, parent_state: %lx.\n", | 524 | dprintk("%s: start ino: %lu, inode: %p, name: '%s', hash: %x, parent_state: %lx, need_lock: %d.\n", |
529 | __func__, ino, inode, str.name, str.hash, parent->state); | 525 | __func__, ino, inode, str.name, str.hash, parent->state, need_lock); |
530 | 526 | ||
531 | if (ino) { | 527 | if (ino) { |
532 | inode = ilookup(dir->i_sb, ino); | 528 | inode = ilookup(dir->i_sb, ino); |
@@ -534,7 +530,7 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct | |||
534 | goto out; | 530 | goto out; |
535 | } | 531 | } |
536 | 532 | ||
537 | dprintk("%s: dir: %p, dir_ino: %llu, name: '%s', len: %u, dir_state: %lx, ino: %lu.\n", | 533 | dprintk("%s: no inode dir: %p, dir_ino: %llu, name: '%s', len: %u, dir_state: %lx, ino: %lu.\n", |
538 | __func__, dir, parent->ino, | 534 | __func__, dir, parent->ino, |
539 | str.name, str.len, parent->state, ino); | 535 | str.name, str.len, parent->state, ino); |
540 | 536 | ||
@@ -543,6 +539,10 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct | |||
543 | goto out; | 539 | goto out; |
544 | } | 540 | } |
545 | 541 | ||
542 | err = pohmelfs_data_lock(parent, 0, ~0, lock_type); | ||
543 | if (err) | ||
544 | goto out; | ||
545 | |||
546 | err = pohmelfs_lookup_single(parent, &str, ino); | 546 | err = pohmelfs_lookup_single(parent, &str, ino); |
547 | if (err) | 547 | if (err) |
548 | goto out; | 548 | goto out; |
@@ -557,10 +557,10 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct | |||
557 | 557 | ||
558 | if (ino) { | 558 | if (ino) { |
559 | inode = ilookup(dir->i_sb, ino); | 559 | inode = ilookup(dir->i_sb, ino); |
560 | printk("%s: second lookup ino: %lu, inode: %p, name: '%s', hash: %x.\n", | 560 | dprintk("%s: second lookup ino: %lu, inode: %p, name: '%s', hash: %x.\n", |
561 | __func__, ino, inode, str.name, str.hash); | 561 | __func__, ino, inode, str.name, str.hash); |
562 | if (!inode) { | 562 | if (!inode) { |
563 | printk("%s: No inode for ino: %lu, name: '%s', hash: %x.\n", | 563 | dprintk("%s: No inode for ino: %lu, name: '%s', hash: %x.\n", |
564 | __func__, ino, str.name, str.hash); | 564 | __func__, ino, str.name, str.hash); |
565 | //return NULL; | 565 | //return NULL; |
566 | return ERR_PTR(-EACCES); | 566 | return ERR_PTR(-EACCES); |
diff --git a/drivers/staging/pohmelfs/inode.c b/drivers/staging/pohmelfs/inode.c index 5bf16504cd6..b2eaf904726 100644 --- a/drivers/staging/pohmelfs/inode.c +++ b/drivers/staging/pohmelfs/inode.c | |||
@@ -1169,16 +1169,17 @@ err_out_put: | |||
1169 | static int pohmelfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) | 1169 | static int pohmelfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) |
1170 | { | 1170 | { |
1171 | struct inode *inode = dentry->d_inode; | 1171 | struct inode *inode = dentry->d_inode; |
1172 | #if 0 | ||
1172 | struct pohmelfs_inode *pi = POHMELFS_I(inode); | 1173 | struct pohmelfs_inode *pi = POHMELFS_I(inode); |
1173 | int err; | 1174 | int err; |
1174 | 1175 | ||
1175 | err = pohmelfs_data_lock(pi, 0, ~0, POHMELFS_READ_LOCK); | 1176 | err = pohmelfs_data_lock(pi, 0, ~0, POHMELFS_READ_LOCK); |
1176 | if (err) | 1177 | if (err) |
1177 | return err; | 1178 | return err; |
1178 | |||
1179 | dprintk("%s: ino: %llu, mode: %o, uid: %u, gid: %u, size: %llu.\n", | 1179 | dprintk("%s: ino: %llu, mode: %o, uid: %u, gid: %u, size: %llu.\n", |
1180 | __func__, pi->ino, inode->i_mode, inode->i_uid, | 1180 | __func__, pi->ino, inode->i_mode, inode->i_uid, |
1181 | inode->i_gid, inode->i_size); | 1181 | inode->i_gid, inode->i_size); |
1182 | #endif | ||
1182 | 1183 | ||
1183 | generic_fillattr(inode, stat); | 1184 | generic_fillattr(inode, stat); |
1184 | return 0; | 1185 | return 0; |
@@ -1342,14 +1343,6 @@ static void pohmelfs_put_super(struct super_block *sb) | |||
1342 | 1343 | ||
1343 | kfree(psb); | 1344 | kfree(psb); |
1344 | sb->s_fs_info = NULL; | 1345 | sb->s_fs_info = NULL; |
1345 | |||
1346 | pohmelfs_ftrans_exit(); | ||
1347 | } | ||
1348 | |||
1349 | static int pohmelfs_remount(struct super_block *sb, int *flags, char *data) | ||
1350 | { | ||
1351 | *flags |= MS_RDONLY; | ||
1352 | return 0; | ||
1353 | } | 1346 | } |
1354 | 1347 | ||
1355 | static int pohmelfs_statfs(struct dentry *dentry, struct kstatfs *buf) | 1348 | static int pohmelfs_statfs(struct dentry *dentry, struct kstatfs *buf) |
@@ -1394,42 +1387,33 @@ static int pohmelfs_show_options(struct seq_file *seq, struct vfsmount *vfs) | |||
1394 | return 0; | 1387 | return 0; |
1395 | } | 1388 | } |
1396 | 1389 | ||
1397 | static const struct super_operations pohmelfs_sb_ops = { | ||
1398 | .alloc_inode = pohmelfs_alloc_inode, | ||
1399 | .destroy_inode = pohmelfs_destroy_inode, | ||
1400 | .drop_inode = pohmelfs_drop_inode, | ||
1401 | .write_inode = pohmelfs_write_inode, | ||
1402 | .put_super = pohmelfs_put_super, | ||
1403 | .remount_fs = pohmelfs_remount, | ||
1404 | .statfs = pohmelfs_statfs, | ||
1405 | .show_options = pohmelfs_show_options, | ||
1406 | }; | ||
1407 | |||
1408 | enum { | 1390 | enum { |
1409 | pohmelfs_opt_idx, | 1391 | pohmelfs_opt_idx, |
1392 | pohmelfs_opt_crypto_thread_num, | ||
1393 | pohmelfs_opt_trans_max_pages, | ||
1394 | pohmelfs_opt_crypto_fail_unsupported, | ||
1395 | |||
1396 | /* Remountable options */ | ||
1410 | pohmelfs_opt_trans_scan_timeout, | 1397 | pohmelfs_opt_trans_scan_timeout, |
1411 | pohmelfs_opt_drop_scan_timeout, | 1398 | pohmelfs_opt_drop_scan_timeout, |
1412 | pohmelfs_opt_wait_on_page_timeout, | 1399 | pohmelfs_opt_wait_on_page_timeout, |
1413 | pohmelfs_opt_trans_retries, | 1400 | pohmelfs_opt_trans_retries, |
1414 | pohmelfs_opt_crypto_thread_num, | ||
1415 | pohmelfs_opt_trans_max_pages, | ||
1416 | pohmelfs_opt_crypto_fail_unsupported, | ||
1417 | pohmelfs_opt_mcache_timeout, | 1401 | pohmelfs_opt_mcache_timeout, |
1418 | }; | 1402 | }; |
1419 | 1403 | ||
1420 | static struct match_token pohmelfs_tokens[] = { | 1404 | static struct match_token pohmelfs_tokens[] = { |
1421 | {pohmelfs_opt_idx, "idx=%u"}, | 1405 | {pohmelfs_opt_idx, "idx=%u"}, |
1406 | {pohmelfs_opt_crypto_thread_num, "crypto_thread_num=%u"}, | ||
1407 | {pohmelfs_opt_trans_max_pages, "trans_max_pages=%u"}, | ||
1408 | {pohmelfs_opt_crypto_fail_unsupported, "crypto_fail_unsupported"}, | ||
1422 | {pohmelfs_opt_trans_scan_timeout, "trans_scan_timeout=%u"}, | 1409 | {pohmelfs_opt_trans_scan_timeout, "trans_scan_timeout=%u"}, |
1423 | {pohmelfs_opt_drop_scan_timeout, "drop_scan_timeout=%u"}, | 1410 | {pohmelfs_opt_drop_scan_timeout, "drop_scan_timeout=%u"}, |
1424 | {pohmelfs_opt_wait_on_page_timeout, "wait_on_page_timeout=%u"}, | 1411 | {pohmelfs_opt_wait_on_page_timeout, "wait_on_page_timeout=%u"}, |
1425 | {pohmelfs_opt_trans_retries, "trans_retries=%u"}, | 1412 | {pohmelfs_opt_trans_retries, "trans_retries=%u"}, |
1426 | {pohmelfs_opt_crypto_thread_num, "crypto_thread_num=%u"}, | ||
1427 | {pohmelfs_opt_trans_max_pages, "trans_max_pages=%u"}, | ||
1428 | {pohmelfs_opt_crypto_fail_unsupported, "crypto_fail_unsupported"}, | ||
1429 | {pohmelfs_opt_mcache_timeout, "mcache_timeout=%u"}, | 1413 | {pohmelfs_opt_mcache_timeout, "mcache_timeout=%u"}, |
1430 | }; | 1414 | }; |
1431 | 1415 | ||
1432 | static int pohmelfs_parse_options(char *options, struct pohmelfs_sb *psb) | 1416 | static int pohmelfs_parse_options(char *options, struct pohmelfs_sb *psb, int remount) |
1433 | { | 1417 | { |
1434 | char *p; | 1418 | char *p; |
1435 | substring_t args[MAX_OPT_ARGS]; | 1419 | substring_t args[MAX_OPT_ARGS]; |
@@ -1449,6 +1433,9 @@ static int pohmelfs_parse_options(char *options, struct pohmelfs_sb *psb) | |||
1449 | if (err) | 1433 | if (err) |
1450 | return err; | 1434 | return err; |
1451 | 1435 | ||
1436 | if (remount && token <= pohmelfs_opt_crypto_fail_unsupported) | ||
1437 | continue; | ||
1438 | |||
1452 | switch (token) { | 1439 | switch (token) { |
1453 | case pohmelfs_opt_idx: | 1440 | case pohmelfs_opt_idx: |
1454 | psb->idx = option; | 1441 | psb->idx = option; |
@@ -1485,6 +1472,25 @@ static int pohmelfs_parse_options(char *options, struct pohmelfs_sb *psb) | |||
1485 | return 0; | 1472 | return 0; |
1486 | } | 1473 | } |
1487 | 1474 | ||
1475 | static int pohmelfs_remount(struct super_block *sb, int *flags, char *data) | ||
1476 | { | ||
1477 | int err; | ||
1478 | struct pohmelfs_sb *psb = POHMELFS_SB(sb); | ||
1479 | unsigned long old_sb_flags = sb->s_flags; | ||
1480 | |||
1481 | err = pohmelfs_parse_options(data, psb, 1); | ||
1482 | if (err) | ||
1483 | goto err_out_restore; | ||
1484 | |||
1485 | if (!(*flags & MS_RDONLY)) | ||
1486 | sb->s_flags &= ~MS_RDONLY; | ||
1487 | return 0; | ||
1488 | |||
1489 | err_out_restore: | ||
1490 | sb->s_flags = old_sb_flags; | ||
1491 | return err; | ||
1492 | } | ||
1493 | |||
1488 | static void pohmelfs_flush_inode(struct pohmelfs_inode *pi, unsigned int count) | 1494 | static void pohmelfs_flush_inode(struct pohmelfs_inode *pi, unsigned int count) |
1489 | { | 1495 | { |
1490 | struct inode *inode = &pi->vfs_inode; | 1496 | struct inode *inode = &pi->vfs_inode; |
@@ -1753,6 +1759,57 @@ err_out_exit: | |||
1753 | return err; | 1759 | return err; |
1754 | } | 1760 | } |
1755 | 1761 | ||
1762 | static int pohmelfs_show_stats(struct seq_file *m, struct vfsmount *mnt) | ||
1763 | { | ||
1764 | struct netfs_state *st; | ||
1765 | struct pohmelfs_ctl *ctl; | ||
1766 | struct pohmelfs_sb *psb = POHMELFS_SB(mnt->mnt_sb); | ||
1767 | struct pohmelfs_config *c; | ||
1768 | |||
1769 | mutex_lock(&psb->state_lock); | ||
1770 | |||
1771 | seq_printf(m, "\nidx addr(:port) socket_type protocol active priority permissions\n"); | ||
1772 | |||
1773 | list_for_each_entry(c, &psb->state_list, config_entry) { | ||
1774 | st = &c->state; | ||
1775 | ctl = &st->ctl; | ||
1776 | |||
1777 | seq_printf(m, "%u ", ctl->idx); | ||
1778 | if (ctl->addr.sa_family == AF_INET) { | ||
1779 | struct sockaddr_in *sin = (struct sockaddr_in *)&st->ctl.addr; | ||
1780 | //seq_printf(m, "%pi4:%u", &sin->sin_addr.s_addr, ntohs(sin->sin_port)); | ||
1781 | seq_printf(m, "%u.%u.%u.%u:%u", NIPQUAD(sin->sin_addr.s_addr), ntohs(sin->sin_port)); | ||
1782 | } else if (ctl->addr.sa_family == AF_INET6) { | ||
1783 | struct sockaddr_in6 *sin = (struct sockaddr_in6 *)&st->ctl.addr; | ||
1784 | seq_printf(m, "%pi6:%u", &sin->sin6_addr, ntohs(sin->sin6_port)); | ||
1785 | } else { | ||
1786 | unsigned int i; | ||
1787 | for (i=0; i<ctl->addrlen; ++i) | ||
1788 | seq_printf(m, "%02x.", ctl->addr.addr[i]); | ||
1789 | } | ||
1790 | |||
1791 | seq_printf(m, " %u %u %d %u %x\n", | ||
1792 | ctl->type, ctl->proto, | ||
1793 | st->socket != NULL, | ||
1794 | ctl->prio, ctl->perm); | ||
1795 | } | ||
1796 | mutex_unlock(&psb->state_lock); | ||
1797 | |||
1798 | return 0; | ||
1799 | } | ||
1800 | |||
1801 | static const struct super_operations pohmelfs_sb_ops = { | ||
1802 | .alloc_inode = pohmelfs_alloc_inode, | ||
1803 | .destroy_inode = pohmelfs_destroy_inode, | ||
1804 | .drop_inode = pohmelfs_drop_inode, | ||
1805 | .write_inode = pohmelfs_write_inode, | ||
1806 | .put_super = pohmelfs_put_super, | ||
1807 | .remount_fs = pohmelfs_remount, | ||
1808 | .statfs = pohmelfs_statfs, | ||
1809 | .show_options = pohmelfs_show_options, | ||
1810 | .show_stats = pohmelfs_show_stats, | ||
1811 | }; | ||
1812 | |||
1756 | /* | 1813 | /* |
1757 | * Allocate private superblock and create root dir. | 1814 | * Allocate private superblock and create root dir. |
1758 | */ | 1815 | */ |
@@ -1764,8 +1821,6 @@ static int pohmelfs_fill_super(struct super_block *sb, void *data, int silent) | |||
1764 | struct pohmelfs_inode *npi; | 1821 | struct pohmelfs_inode *npi; |
1765 | struct qstr str; | 1822 | struct qstr str; |
1766 | 1823 | ||
1767 | pohmelfs_ftrans_init(); | ||
1768 | |||
1769 | psb = kzalloc(sizeof(struct pohmelfs_sb), GFP_KERNEL); | 1824 | psb = kzalloc(sizeof(struct pohmelfs_sb), GFP_KERNEL); |
1770 | if (!psb) | 1825 | if (!psb) |
1771 | goto err_out_exit; | 1826 | goto err_out_exit; |
@@ -1816,7 +1871,7 @@ static int pohmelfs_fill_super(struct super_block *sb, void *data, int silent) | |||
1816 | mutex_init(&psb->state_lock); | 1871 | mutex_init(&psb->state_lock); |
1817 | INIT_LIST_HEAD(&psb->state_list); | 1872 | INIT_LIST_HEAD(&psb->state_list); |
1818 | 1873 | ||
1819 | err = pohmelfs_parse_options((char *) data, psb); | 1874 | err = pohmelfs_parse_options((char *) data, psb, 0); |
1820 | if (err) | 1875 | if (err) |
1821 | goto err_out_free_sb; | 1876 | goto err_out_free_sb; |
1822 | 1877 | ||
@@ -1845,6 +1900,8 @@ static int pohmelfs_fill_super(struct super_block *sb, void *data, int silent) | |||
1845 | err = PTR_ERR(npi); | 1900 | err = PTR_ERR(npi); |
1846 | goto err_out_crypto_exit; | 1901 | goto err_out_crypto_exit; |
1847 | } | 1902 | } |
1903 | set_bit(NETFS_INODE_REMOTE_SYNCED, &npi->state); | ||
1904 | clear_bit(NETFS_INODE_OWNED, &npi->state); | ||
1848 | 1905 | ||
1849 | root = &npi->vfs_inode; | 1906 | root = &npi->vfs_inode; |
1850 | 1907 | ||
@@ -1887,11 +1944,29 @@ static int pohmelfs_get_sb(struct file_system_type *fs_type, | |||
1887 | mnt); | 1944 | mnt); |
1888 | } | 1945 | } |
1889 | 1946 | ||
1947 | /* | ||
1948 | * We need this to sync all inodes earlier, since when writeback | ||
1949 | * is invoked from the umount/mntput path dcache is already shrunk, | ||
1950 | * see generic_shutdown_super(), and no inodes can access the path. | ||
1951 | */ | ||
1952 | static void pohmelfs_kill_super(struct super_block *sb) | ||
1953 | { | ||
1954 | struct writeback_control wbc = { | ||
1955 | .sync_mode = WB_SYNC_ALL, | ||
1956 | .range_start = 0, | ||
1957 | .range_end = LLONG_MAX, | ||
1958 | .nr_to_write = LONG_MAX, | ||
1959 | }; | ||
1960 | generic_sync_sb_inodes(sb, &wbc); | ||
1961 | |||
1962 | kill_anon_super(sb); | ||
1963 | } | ||
1964 | |||
1890 | static struct file_system_type pohmel_fs_type = { | 1965 | static struct file_system_type pohmel_fs_type = { |
1891 | .owner = THIS_MODULE, | 1966 | .owner = THIS_MODULE, |
1892 | .name = "pohmel", | 1967 | .name = "pohmel", |
1893 | .get_sb = pohmelfs_get_sb, | 1968 | .get_sb = pohmelfs_get_sb, |
1894 | .kill_sb = kill_anon_super, | 1969 | .kill_sb = pohmelfs_kill_super, |
1895 | }; | 1970 | }; |
1896 | 1971 | ||
1897 | /* | 1972 | /* |
diff --git a/drivers/staging/pohmelfs/lock.c b/drivers/staging/pohmelfs/lock.c index ad4a18559bd..22fef18cae9 100644 --- a/drivers/staging/pohmelfs/lock.c +++ b/drivers/staging/pohmelfs/lock.c | |||
@@ -41,7 +41,8 @@ static int pohmelfs_send_lock_trans(struct pohmelfs_inode *pi, | |||
41 | path_len = err; | 41 | path_len = err; |
42 | 42 | ||
43 | err = -ENOMEM; | 43 | err = -ENOMEM; |
44 | t = netfs_trans_alloc(psb, path_len + sizeof(struct netfs_lock) + isize, 0, 0); | 44 | t = netfs_trans_alloc(psb, path_len + sizeof(struct netfs_lock) + isize, |
45 | NETFS_TRANS_SINGLE_DST, 0); | ||
45 | if (!t) | 46 | if (!t) |
46 | goto err_out_exit; | 47 | goto err_out_exit; |
47 | 48 | ||
diff --git a/drivers/staging/pohmelfs/net.c b/drivers/staging/pohmelfs/net.c index c9b8540c1ef..11ecac026ca 100644 --- a/drivers/staging/pohmelfs/net.c +++ b/drivers/staging/pohmelfs/net.c | |||
@@ -26,55 +26,6 @@ | |||
26 | 26 | ||
27 | #include "netfs.h" | 27 | #include "netfs.h" |
28 | 28 | ||
29 | static int pohmelfs_ftrans_size = 10240; | ||
30 | static u32 *pohmelfs_ftrans; | ||
31 | |||
32 | int pohmelfs_ftrans_init(void) | ||
33 | { | ||
34 | pohmelfs_ftrans = vmalloc(pohmelfs_ftrans_size * 4); | ||
35 | if (!pohmelfs_ftrans) | ||
36 | return -ENOMEM; | ||
37 | |||
38 | return 0; | ||
39 | } | ||
40 | |||
41 | void pohmelfs_ftrans_exit(void) | ||
42 | { | ||
43 | vfree(pohmelfs_ftrans); | ||
44 | } | ||
45 | |||
46 | void pohmelfs_ftrans_clean(u64 id) | ||
47 | { | ||
48 | if (pohmelfs_ftrans) { | ||
49 | u32 i = id & 0xffffffff; | ||
50 | int idx = i % pohmelfs_ftrans_size; | ||
51 | |||
52 | pohmelfs_ftrans[idx] = 0; | ||
53 | } | ||
54 | } | ||
55 | |||
56 | void pohmelfs_ftrans_update(u64 id) | ||
57 | { | ||
58 | if (pohmelfs_ftrans) { | ||
59 | u32 i = id & 0xffffffff; | ||
60 | int idx = i % pohmelfs_ftrans_size; | ||
61 | |||
62 | pohmelfs_ftrans[idx] = i; | ||
63 | } | ||
64 | } | ||
65 | |||
66 | int pohmelfs_ftrans_check(u64 id) | ||
67 | { | ||
68 | if (pohmelfs_ftrans) { | ||
69 | u32 i = id & 0xffffffff; | ||
70 | int idx = i % pohmelfs_ftrans_size; | ||
71 | |||
72 | return (pohmelfs_ftrans[idx] == i); | ||
73 | } | ||
74 | |||
75 | return -1; | ||
76 | } | ||
77 | |||
78 | /* | 29 | /* |
79 | * Async machinery lives here. | 30 | * Async machinery lives here. |
80 | * All commands being sent to server do _not_ require sync reply, | 31 | * All commands being sent to server do _not_ require sync reply, |
@@ -450,8 +401,24 @@ static int pohmelfs_readdir_response(struct netfs_state *st) | |||
450 | if (err != -EEXIST) | 401 | if (err != -EEXIST) |
451 | goto err_out_put; | 402 | goto err_out_put; |
452 | } else { | 403 | } else { |
404 | struct dentry *dentry, *alias, *pd; | ||
405 | |||
453 | set_bit(NETFS_INODE_REMOTE_SYNCED, &npi->state); | 406 | set_bit(NETFS_INODE_REMOTE_SYNCED, &npi->state); |
454 | clear_bit(NETFS_INODE_OWNED, &npi->state); | 407 | clear_bit(NETFS_INODE_OWNED, &npi->state); |
408 | |||
409 | pd = d_find_alias(&parent->vfs_inode); | ||
410 | if (pd) { | ||
411 | str.hash = full_name_hash(str.name, str.len); | ||
412 | dentry = d_alloc(pd, &str); | ||
413 | if (dentry) { | ||
414 | alias = d_materialise_unique(dentry, &npi->vfs_inode); | ||
415 | if (alias) | ||
416 | dput(dentry); | ||
417 | } | ||
418 | |||
419 | dput(dentry); | ||
420 | dput(pd); | ||
421 | } | ||
455 | } | 422 | } |
456 | } | 423 | } |
457 | out: | 424 | out: |
@@ -638,15 +605,12 @@ static int pohmelfs_transaction_response(struct netfs_state *st) | |||
638 | if (dst) { | 605 | if (dst) { |
639 | netfs_trans_remove_nolock(dst, st); | 606 | netfs_trans_remove_nolock(dst, st); |
640 | t = dst->trans; | 607 | t = dst->trans; |
641 | |||
642 | pohmelfs_ftrans_update(cmd->start); | ||
643 | } | 608 | } |
644 | mutex_unlock(&st->trans_lock); | 609 | mutex_unlock(&st->trans_lock); |
645 | 610 | ||
646 | if (!t) { | 611 | if (!t) { |
647 | int check = pohmelfs_ftrans_check(cmd->start); | 612 | printk("%s: failed to find transaction: start: %llu: id: %llu, size: %u, ext: %u.\n", |
648 | printk("%s: failed to find transaction: start: %llu: id: %llu, size: %u, ext: %u, double: %d.\n", | 613 | __func__, cmd->start, cmd->id, cmd->size, cmd->ext); |
649 | __func__, cmd->start, cmd->id, cmd->size, cmd->ext, check); | ||
650 | err = -EINVAL; | 614 | err = -EINVAL; |
651 | goto out; | 615 | goto out; |
652 | } | 616 | } |
diff --git a/drivers/staging/pohmelfs/netfs.h b/drivers/staging/pohmelfs/netfs.h index 2ff21ae5bb1..c78cfcb042f 100644 --- a/drivers/staging/pohmelfs/netfs.h +++ b/drivers/staging/pohmelfs/netfs.h | |||
@@ -87,6 +87,7 @@ enum { | |||
87 | POHMELFS_FLAGS_DEL, /* Network state control message for DEL */ | 87 | POHMELFS_FLAGS_DEL, /* Network state control message for DEL */ |
88 | POHMELFS_FLAGS_SHOW, /* Network state control message for SHOW */ | 88 | POHMELFS_FLAGS_SHOW, /* Network state control message for SHOW */ |
89 | POHMELFS_FLAGS_CRYPTO, /* Crypto data control message */ | 89 | POHMELFS_FLAGS_CRYPTO, /* Crypto data control message */ |
90 | POHMELFS_FLAGS_MODIFY, /* Network state modification message */ | ||
90 | }; | 91 | }; |
91 | 92 | ||
92 | /* | 93 | /* |
@@ -116,16 +117,20 @@ struct pohmelfs_crypto | |||
116 | unsigned char data[0]; /* Algorithm string, key and IV */ | 117 | unsigned char data[0]; /* Algorithm string, key and IV */ |
117 | }; | 118 | }; |
118 | 119 | ||
120 | #define POHMELFS_IO_PERM_READ (1<<0) | ||
121 | #define POHMELFS_IO_PERM_WRITE (1<<1) | ||
122 | |||
119 | /* | 123 | /* |
120 | * Configuration command used to create table of different remote servers. | 124 | * Configuration command used to create table of different remote servers. |
121 | */ | 125 | */ |
122 | struct pohmelfs_ctl | 126 | struct pohmelfs_ctl |
123 | { | 127 | { |
124 | unsigned int idx; /* Config index */ | 128 | __u32 idx; /* Config index */ |
125 | unsigned int type; /* Socket type */ | 129 | __u32 type; /* Socket type */ |
126 | unsigned int proto; /* Socket protocol */ | 130 | __u32 proto; /* Socket protocol */ |
127 | unsigned int addrlen; /* Size of the address */ | 131 | __u16 addrlen; /* Size of the address */ |
128 | unsigned short unused; /* Align structure by 4 bytes */ | 132 | __u16 perm; /* IO permission */ |
133 | __u16 prio; /* IO priority */ | ||
129 | struct saddr addr; /* Remote server address */ | 134 | struct saddr addr; /* Remote server address */ |
130 | }; | 135 | }; |
131 | 136 | ||
@@ -921,12 +926,6 @@ static inline void pohmelfs_mcache_put(struct pohmelfs_sb *psb, | |||
921 | pohmelfs_mcache_free(psb, m); | 926 | pohmelfs_mcache_free(psb, m); |
922 | } | 927 | } |
923 | 928 | ||
924 | int pohmelfs_ftrans_init(void); | ||
925 | void pohmelfs_ftrans_exit(void); | ||
926 | void pohmelfs_ftrans_update(u64 id); | ||
927 | int pohmelfs_ftrans_check(u64 id); | ||
928 | void pohmelfs_ftrans_clean(u64 id); | ||
929 | |||
930 | #endif /* __KERNEL__*/ | 929 | #endif /* __KERNEL__*/ |
931 | 930 | ||
932 | #endif /* __NETFS_H */ | 931 | #endif /* __NETFS_H */ |
diff --git a/drivers/staging/pohmelfs/trans.c b/drivers/staging/pohmelfs/trans.c index bcb59425a21..fef5f9bd692 100644 --- a/drivers/staging/pohmelfs/trans.c +++ b/drivers/staging/pohmelfs/trans.c | |||
@@ -456,34 +456,25 @@ int netfs_trans_finish_send(struct netfs_trans *t, struct pohmelfs_sb *psb) | |||
456 | __func__, t, t->gen, t->iovec.iov_len, t->page_num, psb->active_state); | 456 | __func__, t, t->gen, t->iovec.iov_len, t->page_num, psb->active_state); |
457 | #endif | 457 | #endif |
458 | mutex_lock(&psb->state_lock); | 458 | mutex_lock(&psb->state_lock); |
459 | list_for_each_entry(c, &psb->state_list, config_entry) { | ||
460 | st = &c->state; | ||
459 | 461 | ||
460 | if ((t->flags & NETFS_TRANS_SINGLE_DST) && psb->active_state) { | 462 | if (t->flags & NETFS_TRANS_SINGLE_DST) { |
461 | st = &psb->active_state->state; | 463 | if (!(st->ctl.perm & POHMELFS_IO_PERM_READ)) |
462 | 464 | continue; | |
463 | err = -EPIPE; | 465 | } else { |
464 | if (netfs_state_poll(st) & POLLOUT) { | 466 | if (!(st->ctl.perm & POHMELFS_IO_PERM_WRITE)) |
465 | err = netfs_trans_push_dst(t, st); | 467 | continue; |
466 | if (!err) { | ||
467 | err = netfs_trans_send(t, st); | ||
468 | if (err) { | ||
469 | netfs_trans_drop_last(t, st); | ||
470 | } else { | ||
471 | pohmelfs_switch_active(psb); | ||
472 | goto out; | ||
473 | } | ||
474 | } | ||
475 | } | 468 | } |
476 | pohmelfs_switch_active(psb); | ||
477 | } | ||
478 | 469 | ||
479 | list_for_each_entry(c, &psb->state_list, config_entry) { | 470 | if (psb->active_state && (psb->active_state->state.ctl.prio >= st->ctl.prio)) |
480 | st = &c->state; | 471 | st = &psb->active_state->state; |
481 | 472 | ||
482 | err = netfs_trans_push(t, st); | 473 | err = netfs_trans_push(t, st); |
483 | if (!err && (t->flags & NETFS_TRANS_SINGLE_DST)) | 474 | if (!err && (t->flags & NETFS_TRANS_SINGLE_DST)) |
484 | break; | 475 | break; |
485 | } | 476 | } |
486 | out: | 477 | |
487 | mutex_unlock(&psb->state_lock); | 478 | mutex_unlock(&psb->state_lock); |
488 | #if 0 | 479 | #if 0 |
489 | dprintk("%s: fully sent t: %p, gen: %u, size: %u, page_num: %u, err: %d.\n", | 480 | dprintk("%s: fully sent t: %p, gen: %u, size: %u, page_num: %u, err: %d.\n", |
@@ -501,8 +492,6 @@ int netfs_trans_finish(struct netfs_trans *t, struct pohmelfs_sb *psb) | |||
501 | 492 | ||
502 | t->gen = atomic_inc_return(&psb->trans_gen); | 493 | t->gen = atomic_inc_return(&psb->trans_gen); |
503 | 494 | ||
504 | pohmelfs_ftrans_clean(t->gen); | ||
505 | |||
506 | cmd->size = t->iovec.iov_len - sizeof(struct netfs_cmd) + | 495 | cmd->size = t->iovec.iov_len - sizeof(struct netfs_cmd) + |
507 | t->attached_size + t->attached_pages * sizeof(struct netfs_cmd); | 496 | t->attached_size + t->attached_pages * sizeof(struct netfs_cmd); |
508 | cmd->cmd = NETFS_TRANS; | 497 | cmd->cmd = NETFS_TRANS; |
diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c index cf17bcdd733..6c4396f0903 100644 --- a/drivers/staging/rt2860/rt_main_dev.c +++ b/drivers/staging/rt2860/rt_main_dev.c | |||
@@ -722,6 +722,20 @@ err: | |||
722 | return (-1); | 722 | return (-1); |
723 | } /* End of rt28xx_open */ | 723 | } /* End of rt28xx_open */ |
724 | 724 | ||
725 | static const struct net_device_ops rt2860_netdev_ops = { | ||
726 | .ndo_open = MainVirtualIF_open, | ||
727 | .ndo_stop = MainVirtualIF_close, | ||
728 | .ndo_do_ioctl = rt28xx_ioctl, | ||
729 | .ndo_get_stats = RT28xx_get_ether_stats, | ||
730 | .ndo_validate_addr = NULL, | ||
731 | .ndo_set_mac_address = eth_mac_addr, | ||
732 | .ndo_change_mtu = eth_change_mtu, | ||
733 | #ifdef IKANOS_VX_1X0 | ||
734 | .ndo_start_xmit = IKANOS_DataFramesTx, | ||
735 | #else | ||
736 | .ndo_start_xmit = rt28xx_send_packets, | ||
737 | #endif | ||
738 | }; | ||
725 | 739 | ||
726 | /* Must not be called for mdev and apdev */ | 740 | /* Must not be called for mdev and apdev */ |
727 | static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) | 741 | static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) |
@@ -733,11 +747,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p | |||
733 | 747 | ||
734 | 748 | ||
735 | //ether_setup(dev); | 749 | //ether_setup(dev); |
736 | dev->hard_start_xmit = rt28xx_send_packets; | ||
737 | |||
738 | #ifdef IKANOS_VX_1X0 | ||
739 | dev->hard_start_xmit = IKANOS_DataFramesTx; | ||
740 | #endif // IKANOS_VX_1X0 // | ||
741 | 750 | ||
742 | #ifdef CONFIG_STA_SUPPORT | 751 | #ifdef CONFIG_STA_SUPPORT |
743 | #if WIRELESS_EXT >= 12 | 752 | #if WIRELESS_EXT >= 12 |
@@ -760,12 +769,8 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p | |||
760 | #if WIRELESS_EXT < 21 | 769 | #if WIRELESS_EXT < 21 |
761 | dev->get_wireless_stats = rt28xx_get_wireless_stats; | 770 | dev->get_wireless_stats = rt28xx_get_wireless_stats; |
762 | #endif | 771 | #endif |
763 | dev->get_stats = RT28xx_get_ether_stats; | ||
764 | dev->open = MainVirtualIF_open; //rt28xx_open; | ||
765 | dev->stop = MainVirtualIF_close; //rt28xx_close; | ||
766 | dev->priv_flags = INT_MAIN; | 772 | dev->priv_flags = INT_MAIN; |
767 | dev->do_ioctl = rt28xx_ioctl; | 773 | dev->netdev_ops = &rt2860_netdev_ops; |
768 | dev->validate_addr = NULL; | ||
769 | // find available device name | 774 | // find available device name |
770 | for (i = 0; i < 8; i++) | 775 | for (i = 0; i < 8; i++) |
771 | { | 776 | { |
diff --git a/drivers/staging/rt2870/rt2870.h b/drivers/staging/rt2870/rt2870.h index 5dd15aac9ce..a42caa37080 100644 --- a/drivers/staging/rt2870/rt2870.h +++ b/drivers/staging/rt2870/rt2870.h | |||
@@ -96,6 +96,7 @@ | |||
96 | {USB_DEVICE(0x0DF6,0x002B)}, /* Sitecom */ \ | 96 | {USB_DEVICE(0x0DF6,0x002B)}, /* Sitecom */ \ |
97 | {USB_DEVICE(0x0DF6,0x002C)}, /* Sitecom */ \ | 97 | {USB_DEVICE(0x0DF6,0x002C)}, /* Sitecom */ \ |
98 | {USB_DEVICE(0x0DF6,0x002D)}, /* Sitecom */ \ | 98 | {USB_DEVICE(0x0DF6,0x002D)}, /* Sitecom */ \ |
99 | {USB_DEVICE(0x0DF6,0x0039)}, /* Sitecom */ \ | ||
99 | {USB_DEVICE(0x14B2,0x3C06)}, /* Conceptronic */ \ | 100 | {USB_DEVICE(0x14B2,0x3C06)}, /* Conceptronic */ \ |
100 | {USB_DEVICE(0x14B2,0x3C28)}, /* Conceptronic */ \ | 101 | {USB_DEVICE(0x14B2,0x3C28)}, /* Conceptronic */ \ |
101 | {USB_DEVICE(0x2019,0xED06)}, /* Planex Communications, Inc. */ \ | 102 | {USB_DEVICE(0x2019,0xED06)}, /* Planex Communications, Inc. */ \ |
diff --git a/drivers/staging/rt2870/rt_main_dev.c b/drivers/staging/rt2870/rt_main_dev.c index 313ecea0bfa..48ad41136d0 100644 --- a/drivers/staging/rt2870/rt_main_dev.c +++ b/drivers/staging/rt2870/rt_main_dev.c | |||
@@ -855,6 +855,20 @@ err: | |||
855 | return (-1); | 855 | return (-1); |
856 | } /* End of rt28xx_open */ | 856 | } /* End of rt28xx_open */ |
857 | 857 | ||
858 | static const struct net_device_ops rt2870_netdev_ops = { | ||
859 | .ndo_open = MainVirtualIF_open, | ||
860 | .ndo_stop = MainVirtualIF_close, | ||
861 | .ndo_do_ioctl = rt28xx_ioctl, | ||
862 | .ndo_get_stats = RT28xx_get_ether_stats, | ||
863 | .ndo_validate_addr = NULL, | ||
864 | .ndo_set_mac_address = eth_mac_addr, | ||
865 | .ndo_change_mtu = eth_change_mtu, | ||
866 | #ifdef IKANOS_VX_1X0 | ||
867 | .ndo_start_xmit = IKANOS_DataFramesTx, | ||
868 | #else | ||
869 | .ndo_start_xmit = rt28xx_send_packets, | ||
870 | #endif | ||
871 | }; | ||
858 | 872 | ||
859 | /* Must not be called for mdev and apdev */ | 873 | /* Must not be called for mdev and apdev */ |
860 | static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) | 874 | static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) |
@@ -866,12 +880,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p | |||
866 | 880 | ||
867 | 881 | ||
868 | //ether_setup(dev); | 882 | //ether_setup(dev); |
869 | dev->hard_start_xmit = rt28xx_send_packets; | ||
870 | |||
871 | #ifdef IKANOS_VX_1X0 | ||
872 | dev->hard_start_xmit = IKANOS_DataFramesTx; | ||
873 | #endif // IKANOS_VX_1X0 // | ||
874 | |||
875 | // dev->set_multicast_list = ieee80211_set_multicast_list; | 883 | // dev->set_multicast_list = ieee80211_set_multicast_list; |
876 | // dev->change_mtu = ieee80211_change_mtu; | 884 | // dev->change_mtu = ieee80211_change_mtu; |
877 | #ifdef CONFIG_STA_SUPPORT | 885 | #ifdef CONFIG_STA_SUPPORT |
@@ -895,16 +903,10 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p | |||
895 | #if WIRELESS_EXT < 21 | 903 | #if WIRELESS_EXT < 21 |
896 | dev->get_wireless_stats = rt28xx_get_wireless_stats; | 904 | dev->get_wireless_stats = rt28xx_get_wireless_stats; |
897 | #endif | 905 | #endif |
898 | dev->get_stats = RT28xx_get_ether_stats; | ||
899 | dev->open = MainVirtualIF_open; //rt28xx_open; | ||
900 | dev->stop = MainVirtualIF_close; //rt28xx_close; | ||
901 | // dev->uninit = ieee80211_if_reinit; | 906 | // dev->uninit = ieee80211_if_reinit; |
902 | // dev->destructor = ieee80211_if_free; | 907 | // dev->destructor = ieee80211_if_free; |
903 | dev->priv_flags = INT_MAIN; | 908 | dev->priv_flags = INT_MAIN; |
904 | dev->do_ioctl = rt28xx_ioctl; | 909 | dev->netdev_ops = &rt2870_netdev_ops; |
905 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) | ||
906 | dev->validate_addr = NULL; | ||
907 | #endif | ||
908 | // find available device name | 910 | // find available device name |
909 | for (i = 0; i < 8; i++) | 911 | for (i = 0; i < 8; i++) |
910 | { | 912 | { |
diff --git a/drivers/staging/rt3070/rt_main_dev.c b/drivers/staging/rt3070/rt_main_dev.c index c000646286e..81f769cf109 100644 --- a/drivers/staging/rt3070/rt_main_dev.c +++ b/drivers/staging/rt3070/rt_main_dev.c | |||
@@ -436,7 +436,6 @@ static int rt28xx_init(IN struct net_device *net_dev) | |||
436 | // OID_SET_HT_PHYMODE SetHT; | 436 | // OID_SET_HT_PHYMODE SetHT; |
437 | // WPDMA_GLO_CFG_STRUC GloCfg; | 437 | // WPDMA_GLO_CFG_STRUC GloCfg; |
438 | UINT32 MacCsr0 = 0; | 438 | UINT32 MacCsr0 = 0; |
439 | UINT32 MacValue = 0; | ||
440 | 439 | ||
441 | #ifdef RT2870 | 440 | #ifdef RT2870 |
442 | #ifdef INF_AMAZON_SE | 441 | #ifdef INF_AMAZON_SE |
@@ -849,6 +848,20 @@ err: | |||
849 | return (-1); | 848 | return (-1); |
850 | } /* End of rt28xx_open */ | 849 | } /* End of rt28xx_open */ |
851 | 850 | ||
851 | static const struct net_device_ops rt3070_netdev_ops = { | ||
852 | .ndo_open = MainVirtualIF_open, | ||
853 | .ndo_stop = MainVirtualIF_close, | ||
854 | .ndo_do_ioctl = rt28xx_ioctl, | ||
855 | .ndo_get_stats = RT28xx_get_ether_stats, | ||
856 | .ndo_validate_addr = NULL, | ||
857 | .ndo_set_mac_address = eth_mac_addr, | ||
858 | .ndo_change_mtu = eth_change_mtu, | ||
859 | #ifdef IKANOS_VX_1X0 | ||
860 | .ndo_start_xmit = IKANOS_DataFramesTx, | ||
861 | #else | ||
862 | .ndo_start_xmit = rt28xx_send_packets, | ||
863 | #endif | ||
864 | }; | ||
852 | 865 | ||
853 | /* Must not be called for mdev and apdev */ | 866 | /* Must not be called for mdev and apdev */ |
854 | static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) | 867 | static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) |
@@ -860,12 +873,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p | |||
860 | 873 | ||
861 | 874 | ||
862 | //ether_setup(dev); | 875 | //ether_setup(dev); |
863 | dev->hard_start_xmit = rt28xx_send_packets; | ||
864 | |||
865 | #ifdef IKANOS_VX_1X0 | ||
866 | dev->hard_start_xmit = IKANOS_DataFramesTx; | ||
867 | #endif // IKANOS_VX_1X0 // | ||
868 | |||
869 | // dev->set_multicast_list = ieee80211_set_multicast_list; | 876 | // dev->set_multicast_list = ieee80211_set_multicast_list; |
870 | // dev->change_mtu = ieee80211_change_mtu; | 877 | // dev->change_mtu = ieee80211_change_mtu; |
871 | #ifdef CONFIG_STA_SUPPORT | 878 | #ifdef CONFIG_STA_SUPPORT |
@@ -889,16 +896,10 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p | |||
889 | #if WIRELESS_EXT < 21 | 896 | #if WIRELESS_EXT < 21 |
890 | dev->get_wireless_stats = rt28xx_get_wireless_stats; | 897 | dev->get_wireless_stats = rt28xx_get_wireless_stats; |
891 | #endif | 898 | #endif |
892 | dev->get_stats = RT28xx_get_ether_stats; | ||
893 | dev->open = MainVirtualIF_open; //rt28xx_open; | ||
894 | dev->stop = MainVirtualIF_close; //rt28xx_close; | ||
895 | // dev->uninit = ieee80211_if_reinit; | 899 | // dev->uninit = ieee80211_if_reinit; |
896 | // dev->destructor = ieee80211_if_free; | 900 | // dev->destructor = ieee80211_if_free; |
897 | dev->priv_flags = INT_MAIN; | 901 | dev->priv_flags = INT_MAIN; |
898 | dev->do_ioctl = rt28xx_ioctl; | 902 | dev->netdev_ops = &rt3070_netdev_ops; |
899 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) | ||
900 | dev->validate_addr = NULL; | ||
901 | #endif | ||
902 | // find available device name | 903 | // find available device name |
903 | for (i = 0; i < 8; i++) | 904 | for (i = 0; i < 8; i++) |
904 | { | 905 | { |
diff --git a/drivers/staging/slicoss/README b/drivers/staging/slicoss/README index 2d5b1127ce5..70f49099c06 100644 --- a/drivers/staging/slicoss/README +++ b/drivers/staging/slicoss/README | |||
@@ -10,7 +10,36 @@ TODO: | |||
10 | - move firmware loading to request_firmware() | 10 | - move firmware loading to request_firmware() |
11 | - remove direct memory access of structures | 11 | - remove direct memory access of structures |
12 | - any remaining sparse and checkpatch.pl warnings | 12 | - any remaining sparse and checkpatch.pl warnings |
13 | - any netdev recommended changes | 13 | |
14 | - use net_device_ops | ||
15 | - use dev->stats rather than adapter->stats | ||
16 | - don't cast netdev_priv it is already void | ||
17 | - use compare_ether_addr | ||
18 | - GET RID OF MACROS | ||
19 | - work on all architectures | ||
20 | - without CONFIG_X86_64 confusion | ||
21 | - do 64 bit correctly | ||
22 | - don't depend on order of union | ||
23 | - get rid of ASSERT(), use BUG() instead but only where necessary | ||
24 | looks like most aren't really useful | ||
25 | - no new SIOCDEVPRIVATE ioctl allowed | ||
26 | - don't use module_param for configuring interrupt mitigation | ||
27 | use ethtool instead | ||
28 | - reorder code to elminate use of forward declarations | ||
29 | - don't keep private linked list of drivers. | ||
30 | - remove all the gratiutous debug infrastructure | ||
31 | - use PCI_DEVICE() | ||
32 | - do ethtool correctly using ethtool_ops | ||
33 | - NAPI? | ||
34 | - wasted overhead of extra stats | ||
35 | - state variables for things that are | ||
36 | easily availble and shouldn't be kept in card structure, cardnum, ... | ||
37 | slotnumber, events, ... | ||
38 | - get rid of slic_spinlock wrapper | ||
39 | - volatile == bad design => bad code | ||
40 | - locking too fine grained, not designed just throw more locks | ||
41 | at problem | ||
42 | |||
14 | 43 | ||
15 | Please send patches to: | 44 | Please send patches to: |
16 | Greg Kroah-Hartman <gregkh@suse.de> | 45 | Greg Kroah-Hartman <gregkh@suse.de> |
diff --git a/drivers/staging/slicoss/slicoss.c b/drivers/staging/slicoss/slicoss.c index 94815634847..6f5d0bff435 100644 --- a/drivers/staging/slicoss/slicoss.c +++ b/drivers/staging/slicoss/slicoss.c | |||
@@ -345,6 +345,19 @@ static void slic_init_adapter(struct net_device *netdev, | |||
345 | return; | 345 | return; |
346 | } | 346 | } |
347 | 347 | ||
348 | static const struct net_device_ops slic_netdev_ops = { | ||
349 | .ndo_open = slic_entry_open, | ||
350 | .ndo_stop = slic_entry_halt, | ||
351 | .ndo_start_xmit = slic_xmit_start, | ||
352 | .ndo_do_ioctl = slic_ioctl, | ||
353 | .ndo_set_mac_address = slic_mac_set_address, | ||
354 | .ndo_get_stats = slic_get_stats, | ||
355 | .ndo_set_multicast_list = slic_mcast_set_list, | ||
356 | .ndo_validate_addr = eth_validate_addr, | ||
357 | .ndo_set_mac_address = eth_mac_addr, | ||
358 | .ndo_change_mtu = eth_change_mtu, | ||
359 | }; | ||
360 | |||
348 | static int __devinit slic_entry_probe(struct pci_dev *pcidev, | 361 | static int __devinit slic_entry_probe(struct pci_dev *pcidev, |
349 | const struct pci_device_id *pci_tbl_entry) | 362 | const struct pci_device_id *pci_tbl_entry) |
350 | { | 363 | { |
@@ -442,13 +455,7 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev, | |||
442 | 455 | ||
443 | netdev->base_addr = (unsigned long)adapter->memorybase; | 456 | netdev->base_addr = (unsigned long)adapter->memorybase; |
444 | netdev->irq = adapter->irq; | 457 | netdev->irq = adapter->irq; |
445 | netdev->open = slic_entry_open; | 458 | netdev->netdev_ops = &slic_netdev_ops; |
446 | netdev->stop = slic_entry_halt; | ||
447 | netdev->hard_start_xmit = slic_xmit_start; | ||
448 | netdev->do_ioctl = slic_ioctl; | ||
449 | netdev->set_mac_address = slic_mac_set_address; | ||
450 | netdev->get_stats = slic_get_stats; | ||
451 | netdev->set_multicast_list = slic_mcast_set_list; | ||
452 | 459 | ||
453 | slic_debug_adapter_create(adapter); | 460 | slic_debug_adapter_create(adapter); |
454 | 461 | ||
@@ -1260,7 +1267,7 @@ static int slic_mcast_add_list(struct adapter *adapter, char *address) | |||
1260 | } | 1267 | } |
1261 | 1268 | ||
1262 | /* Doesn't already exist. Allocate a structure to hold it */ | 1269 | /* Doesn't already exist. Allocate a structure to hold it */ |
1263 | mcaddr = kmalloc(sizeof(struct mcast_address), GFP_KERNEL); | 1270 | mcaddr = kmalloc(sizeof(struct mcast_address), GFP_ATOMIC); |
1264 | if (mcaddr == NULL) | 1271 | if (mcaddr == NULL) |
1265 | return 1; | 1272 | return 1; |
1266 | 1273 | ||
@@ -2284,7 +2291,7 @@ static u32 slic_card_locate(struct adapter *adapter) | |||
2284 | } | 2291 | } |
2285 | if (!physcard) { | 2292 | if (!physcard) { |
2286 | /* no structure allocated for this physical card yet */ | 2293 | /* no structure allocated for this physical card yet */ |
2287 | physcard = kzalloc(sizeof(struct physcard), GFP_KERNEL); | 2294 | physcard = kzalloc(sizeof(struct physcard), GFP_ATOMIC); |
2288 | ASSERT(physcard); | 2295 | ASSERT(physcard); |
2289 | 2296 | ||
2290 | physcard->next = slic_global.phys_card; | 2297 | physcard->next = slic_global.phys_card; |
diff --git a/drivers/staging/stlc45xx/Kconfig b/drivers/staging/stlc45xx/Kconfig index 8d3f46f190e..947fb75a9c6 100644 --- a/drivers/staging/stlc45xx/Kconfig +++ b/drivers/staging/stlc45xx/Kconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | config STLC45XX | 1 | config STLC45XX |
2 | tristate "stlc4550/4560 support" | 2 | tristate "stlc4550/4560 support" |
3 | depends on MAC80211 && WLAN_80211 && SPI_MASTER | 3 | depends on MAC80211 && WLAN_80211 && SPI_MASTER && GENERIC_HARDIRQS |
4 | ---help--- | 4 | ---help--- |
5 | This is a driver for stlc4550 and stlc4560 chipsets. | 5 | This is a driver for stlc4550 and stlc4560 chipsets. |
6 | 6 | ||
diff --git a/drivers/staging/sxg/sxg.c b/drivers/staging/sxg/sxg.c index 891f6e33467..076b3f7d39e 100644 --- a/drivers/staging/sxg/sxg.c +++ b/drivers/staging/sxg/sxg.c | |||
@@ -322,6 +322,8 @@ int sxg_add_msi_isr(struct adapter_t *adapter) | |||
322 | int ret,i; | 322 | int ret,i; |
323 | 323 | ||
324 | if (!adapter->intrregistered) { | 324 | if (!adapter->intrregistered) { |
325 | spin_unlock_irqrestore(&sxg_global.driver_lock, | ||
326 | sxg_global.flags); | ||
325 | for (i=0; i<adapter->nr_msix_entries; i++) { | 327 | for (i=0; i<adapter->nr_msix_entries; i++) { |
326 | ret = request_irq (adapter->msi_entries[i].vector, | 328 | ret = request_irq (adapter->msi_entries[i].vector, |
327 | sxg_isr, | 329 | sxg_isr, |
@@ -329,6 +331,8 @@ int sxg_add_msi_isr(struct adapter_t *adapter) | |||
329 | adapter->netdev->name, | 331 | adapter->netdev->name, |
330 | adapter->netdev); | 332 | adapter->netdev); |
331 | if (ret) { | 333 | if (ret) { |
334 | spin_lock_irqsave(&sxg_global.driver_lock, | ||
335 | sxg_global.flags); | ||
332 | DBG_ERROR("sxg: MSI-X request_irq (%s) " | 336 | DBG_ERROR("sxg: MSI-X request_irq (%s) " |
333 | "FAILED [%x]\n", adapter->netdev->name, | 337 | "FAILED [%x]\n", adapter->netdev->name, |
334 | ret); | 338 | ret); |
@@ -336,6 +340,7 @@ int sxg_add_msi_isr(struct adapter_t *adapter) | |||
336 | } | 340 | } |
337 | } | 341 | } |
338 | } | 342 | } |
343 | spin_lock_irqsave(&sxg_global.driver_lock, sxg_global.flags); | ||
339 | adapter->msi_enabled = TRUE; | 344 | adapter->msi_enabled = TRUE; |
340 | adapter->intrregistered = 1; | 345 | adapter->intrregistered = 1; |
341 | adapter->IntRegistered = TRUE; | 346 | adapter->IntRegistered = TRUE; |
@@ -896,6 +901,22 @@ static inline int sxg_read_config(struct adapter_t *adapter) | |||
896 | return status; | 901 | return status; |
897 | } | 902 | } |
898 | 903 | ||
904 | static const struct net_device_ops sxg_netdev_ops = { | ||
905 | .ndo_open = sxg_entry_open, | ||
906 | .ndo_stop = sxg_entry_halt, | ||
907 | .ndo_start_xmit = sxg_send_packets, | ||
908 | .ndo_do_ioctl = sxg_ioctl, | ||
909 | .ndo_change_mtu = sxg_change_mtu, | ||
910 | .ndo_get_stats = sxg_get_stats, | ||
911 | .ndo_set_multicast_list = sxg_mcast_set_list, | ||
912 | .ndo_validate_addr = eth_validate_addr, | ||
913 | #if XXXTODO | ||
914 | .ndo_set_mac_address = sxg_mac_set_address, | ||
915 | #else | ||
916 | .ndo_set_mac_address = eth_mac_addr, | ||
917 | #endif | ||
918 | }; | ||
919 | |||
899 | static int sxg_entry_probe(struct pci_dev *pcidev, | 920 | static int sxg_entry_probe(struct pci_dev *pcidev, |
900 | const struct pci_device_id *pci_tbl_entry) | 921 | const struct pci_device_id *pci_tbl_entry) |
901 | { | 922 | { |
@@ -1095,16 +1116,7 @@ static int sxg_entry_probe(struct pci_dev *pcidev, | |||
1095 | 1116 | ||
1096 | netdev->base_addr = (unsigned long)adapter->base_addr; | 1117 | netdev->base_addr = (unsigned long)adapter->base_addr; |
1097 | netdev->irq = adapter->irq; | 1118 | netdev->irq = adapter->irq; |
1098 | netdev->open = sxg_entry_open; | 1119 | netdev->netdev_ops = &sxg_netdev_ops; |
1099 | netdev->stop = sxg_entry_halt; | ||
1100 | netdev->hard_start_xmit = sxg_send_packets; | ||
1101 | netdev->do_ioctl = sxg_ioctl; | ||
1102 | netdev->change_mtu = sxg_change_mtu; | ||
1103 | #if XXXTODO | ||
1104 | netdev->set_mac_address = sxg_mac_set_address; | ||
1105 | #endif | ||
1106 | netdev->get_stats = sxg_get_stats; | ||
1107 | netdev->set_multicast_list = sxg_mcast_set_list; | ||
1108 | SET_ETHTOOL_OPS(netdev, &sxg_nic_ethtool_ops); | 1120 | SET_ETHTOOL_OPS(netdev, &sxg_nic_ethtool_ops); |
1109 | netdev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; | 1121 | netdev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; |
1110 | err = sxg_set_interrupt_capability(adapter); | 1122 | err = sxg_set_interrupt_capability(adapter); |
@@ -2247,6 +2259,8 @@ static int sxg_entry_open(struct net_device *dev) | |||
2247 | DBG_ERROR("sxg: %s EXIT\n", __func__); | 2259 | DBG_ERROR("sxg: %s EXIT\n", __func__); |
2248 | 2260 | ||
2249 | spin_unlock_irqrestore(&sxg_global.driver_lock, sxg_global.flags); | 2261 | spin_unlock_irqrestore(&sxg_global.driver_lock, sxg_global.flags); |
2262 | mod_timer(&adapter->watchdog_timer, jiffies); | ||
2263 | |||
2250 | return STATUS_SUCCESS; | 2264 | return STATUS_SUCCESS; |
2251 | } | 2265 | } |
2252 | 2266 | ||
@@ -2568,6 +2582,7 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl, | |||
2568 | u64 phys_addr; | 2582 | u64 phys_addr; |
2569 | unsigned long flags; | 2583 | unsigned long flags; |
2570 | unsigned long queue_id=0; | 2584 | unsigned long queue_id=0; |
2585 | int offload_cksum = 0; | ||
2571 | 2586 | ||
2572 | SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "DumbSgl", | 2587 | SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "DumbSgl", |
2573 | pSgl, SxgSgl, 0, 0); | 2588 | pSgl, SxgSgl, 0, 0); |
@@ -2606,7 +2621,11 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl, | |||
2606 | struct iphdr *ip; | 2621 | struct iphdr *ip; |
2607 | 2622 | ||
2608 | ip = ip_hdr(skb); | 2623 | ip = ip_hdr(skb); |
2609 | if ((ip->protocol == IPPROTO_TCP)&&(DataLength >= sizeof( | 2624 | if (ip->protocol == IPPROTO_TCP) |
2625 | offload_cksum = 1; | ||
2626 | if (!offload_cksum || !tcp_hdr(skb)) | ||
2627 | queue_id = 0; | ||
2628 | else if (offload_cksum && (DataLength >= sizeof( | ||
2610 | struct tcphdr))){ | 2629 | struct tcphdr))){ |
2611 | queue_id = ((ntohs(tcp_hdr(skb)->dest) == ISCSI_PORT) ? | 2630 | queue_id = ((ntohs(tcp_hdr(skb)->dest) == ISCSI_PORT) ? |
2612 | (ntohs (tcp_hdr(skb)->source) & | 2631 | (ntohs (tcp_hdr(skb)->source) & |
@@ -2615,8 +2634,11 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl, | |||
2615 | SXG_LARGE_SEND_QUEUE_MASK)); | 2634 | SXG_LARGE_SEND_QUEUE_MASK)); |
2616 | } | 2635 | } |
2617 | } else if (skb->protocol == htons(ETH_P_IPV6)) { | 2636 | } else if (skb->protocol == htons(ETH_P_IPV6)) { |
2618 | if ((ipv6_hdr(skb)->nexthdr == IPPROTO_TCP) && (DataLength >= | 2637 | if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP) |
2619 | sizeof(struct tcphdr)) ) { | 2638 | offload_cksum = 1; |
2639 | if (!offload_cksum || !tcp_hdr(skb)) | ||
2640 | queue_id = 0; | ||
2641 | else if (offload_cksum && (DataLength>=sizeof(struct tcphdr))){ | ||
2620 | queue_id = ((ntohs(tcp_hdr(skb)->dest) == ISCSI_PORT) ? | 2642 | queue_id = ((ntohs(tcp_hdr(skb)->dest) == ISCSI_PORT) ? |
2621 | (ntohs (tcp_hdr(skb)->source) & | 2643 | (ntohs (tcp_hdr(skb)->source) & |
2622 | SXG_LARGE_SEND_QUEUE_MASK): | 2644 | SXG_LARGE_SEND_QUEUE_MASK): |
@@ -2645,23 +2667,38 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl, | |||
2645 | } | 2667 | } |
2646 | SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "DumbCmd", | 2668 | SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "DumbCmd", |
2647 | XmtCmd, XmtRingInfo->Head, XmtRingInfo->Tail, 0); | 2669 | XmtCmd, XmtRingInfo->Head, XmtRingInfo->Tail, 0); |
2648 | /* Update stats */ | 2670 | memset(XmtCmd, '\0', sizeof(*XmtCmd)); |
2649 | adapter->stats.tx_packets++; | 2671 | XmtCmd->SgEntries = 1; |
2650 | adapter->stats.tx_bytes += DataLength; | 2672 | XmtCmd->Flags = 0; |
2651 | #if XXXTODO /* Stats stuff */ | 2673 | if (skb->ip_summed == CHECKSUM_PARTIAL) { |
2652 | if (SXG_MULTICAST_PACKET(EtherHdr)) { | 2674 | /* |
2653 | if (SXG_BROADCAST_PACKET(EtherHdr)) { | 2675 | * We need to set the Checkum in IP header to 0. This is |
2654 | adapter->Stats.DumbXmtBcastPkts++; | 2676 | * required by hardware. |
2655 | adapter->Stats.DumbXmtBcastBytes += DataLength; | 2677 | */ |
2678 | if (offload_cksum) { | ||
2679 | ip_hdr(skb)->check = 0x0; | ||
2680 | XmtCmd->CsumFlags.Flags |= SXG_SLOWCMD_CSUM_IP; | ||
2681 | XmtCmd->CsumFlags.Flags |= SXG_SLOWCMD_CSUM_TCP; | ||
2682 | /* | ||
2683 | * Dont know if length will require a change in | ||
2684 | * case of VLAN | ||
2685 | */ | ||
2686 | XmtCmd->CsumFlags.MacLen = ETH_HLEN; | ||
2687 | XmtCmd->CsumFlags.IpHl = skb_network_header_len(skb) >> | ||
2688 | SXG_NW_HDR_LEN_SHIFT; | ||
2656 | } else { | 2689 | } else { |
2657 | adapter->Stats.DumbXmtMcastPkts++; | 2690 | if (skb_checksum_help(skb)){ |
2658 | adapter->Stats.DumbXmtMcastBytes += DataLength; | 2691 | printk(KERN_EMERG "Dropped UDP packet for" |
2692 | " incorrect checksum calculation\n"); | ||
2693 | if (XmtCmd) | ||
2694 | SXG_ABORT_CMD(XmtRingInfo); | ||
2695 | spin_unlock_irqrestore(&adapter->XmtZeroLock, | ||
2696 | flags); | ||
2697 | return STATUS_SUCCESS; | ||
2698 | } | ||
2659 | } | 2699 | } |
2660 | } else { | ||
2661 | adapter->Stats.DumbXmtUcastPkts++; | ||
2662 | adapter->Stats.DumbXmtUcastBytes += DataLength; | ||
2663 | } | 2700 | } |
2664 | #endif | 2701 | |
2665 | /* | 2702 | /* |
2666 | * Fill in the command | 2703 | * Fill in the command |
2667 | * Copy out the first SGE to the command and adjust for offset | 2704 | * Copy out the first SGE to the command and adjust for offset |
@@ -2679,31 +2716,17 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl, | |||
2679 | (SXG_INVALID_SGL(phys_addr,skb->data_len))) | 2716 | (SXG_INVALID_SGL(phys_addr,skb->data_len))) |
2680 | { | 2717 | { |
2681 | spin_unlock_irqrestore(&adapter->XmtZeroLock, flags); | 2718 | spin_unlock_irqrestore(&adapter->XmtZeroLock, flags); |
2719 | if (XmtCmd) | ||
2720 | SXG_ABORT_CMD(XmtRingInfo); | ||
2682 | /* Silently drop this packet */ | 2721 | /* Silently drop this packet */ |
2683 | printk(KERN_EMERG"Dropped a packet for 64k boundary problem\n"); | 2722 | printk(KERN_EMERG"Dropped a packet for 64k boundary problem\n"); |
2684 | return STATUS_SUCCESS; | 2723 | return STATUS_SUCCESS; |
2685 | } | 2724 | } |
2686 | memset(XmtCmd, '\0', sizeof(*XmtCmd)); | ||
2687 | XmtCmd->Buffer.FirstSgeAddress = phys_addr; | 2725 | XmtCmd->Buffer.FirstSgeAddress = phys_addr; |
2688 | XmtCmd->Buffer.FirstSgeLength = DataLength; | 2726 | XmtCmd->Buffer.FirstSgeLength = DataLength; |
2689 | XmtCmd->Buffer.SgeOffset = 0; | 2727 | XmtCmd->Buffer.SgeOffset = 0; |
2690 | XmtCmd->Buffer.TotalLength = DataLength; | 2728 | XmtCmd->Buffer.TotalLength = DataLength; |
2691 | XmtCmd->SgEntries = 1; | ||
2692 | XmtCmd->Flags = 0; | ||
2693 | 2729 | ||
2694 | if (skb->ip_summed == CHECKSUM_PARTIAL) { | ||
2695 | /* | ||
2696 | * We need to set the Checkum in IP header to 0. This is | ||
2697 | * required by hardware. | ||
2698 | */ | ||
2699 | ip_hdr(skb)->check = 0x0; | ||
2700 | XmtCmd->CsumFlags.Flags |= SXG_SLOWCMD_CSUM_IP; | ||
2701 | XmtCmd->CsumFlags.Flags |= SXG_SLOWCMD_CSUM_TCP; | ||
2702 | /* Dont know if length will require a change in case of VLAN */ | ||
2703 | XmtCmd->CsumFlags.MacLen = ETH_HLEN; | ||
2704 | XmtCmd->CsumFlags.IpHl = skb_network_header_len(skb) >> | ||
2705 | SXG_NW_HDR_LEN_SHIFT; | ||
2706 | } | ||
2707 | /* | 2730 | /* |
2708 | * Advance transmit cmd descripter by 1. | 2731 | * Advance transmit cmd descripter by 1. |
2709 | * NOTE - See comments in SxgTcpOutput where we write | 2732 | * NOTE - See comments in SxgTcpOutput where we write |
@@ -2715,6 +2738,24 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl, | |||
2715 | ASSERT((queue_id & ~SXG_LARGE_SEND_QUEUE_MASK) == 0); | 2738 | ASSERT((queue_id & ~SXG_LARGE_SEND_QUEUE_MASK) == 0); |
2716 | WRITE_REG(adapter->UcodeRegs[0].XmtCmd, ((queue_id << 16) | 1), TRUE); | 2739 | WRITE_REG(adapter->UcodeRegs[0].XmtCmd, ((queue_id << 16) | 1), TRUE); |
2717 | adapter->Stats.XmtQLen++; /* Stats within lock */ | 2740 | adapter->Stats.XmtQLen++; /* Stats within lock */ |
2741 | /* Update stats */ | ||
2742 | adapter->stats.tx_packets++; | ||
2743 | adapter->stats.tx_bytes += DataLength; | ||
2744 | #if XXXTODO /* Stats stuff */ | ||
2745 | if (SXG_MULTICAST_PACKET(EtherHdr)) { | ||
2746 | if (SXG_BROADCAST_PACKET(EtherHdr)) { | ||
2747 | adapter->Stats.DumbXmtBcastPkts++; | ||
2748 | adapter->Stats.DumbXmtBcastBytes += DataLength; | ||
2749 | } else { | ||
2750 | adapter->Stats.DumbXmtMcastPkts++; | ||
2751 | adapter->Stats.DumbXmtMcastBytes += DataLength; | ||
2752 | } | ||
2753 | } else { | ||
2754 | adapter->Stats.DumbXmtUcastPkts++; | ||
2755 | adapter->Stats.DumbXmtUcastBytes += DataLength; | ||
2756 | } | ||
2757 | #endif | ||
2758 | |||
2718 | spin_unlock_irqrestore(&adapter->XmtZeroLock, flags); | 2759 | spin_unlock_irqrestore(&adapter->XmtZeroLock, flags); |
2719 | SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "XDumSgl2", | 2760 | SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "XDumSgl2", |
2720 | XmtCmd, pSgl, SxgSgl, 0); | 2761 | XmtCmd, pSgl, SxgSgl, 0); |
diff --git a/drivers/staging/uc2322/aten2011.c b/drivers/staging/uc2322/aten2011.c index 85b70545306..9c62f787cc9 100644 --- a/drivers/staging/uc2322/aten2011.c +++ b/drivers/staging/uc2322/aten2011.c | |||
@@ -603,10 +603,9 @@ static void ATEN2011_bulk_out_data_callback(struct urb *urb) | |||
603 | 603 | ||
604 | tty = tty_port_tty_get(&ATEN2011_port->port->port); | 604 | tty = tty_port_tty_get(&ATEN2011_port->port->port); |
605 | 605 | ||
606 | if (tty && ATEN2011_port->open) { | 606 | if (tty && ATEN2011_port->open) |
607 | /* tell the tty driver that something has changed */ | 607 | /* tell the tty driver that something has changed */ |
608 | wake_up_interruptible(&tty->write_wait); | 608 | tty_wakeup(tty); |
609 | } | ||
610 | 609 | ||
611 | /* schedule_work(&ATEN2011_port->port->work); */ | 610 | /* schedule_work(&ATEN2011_port->port->work); */ |
612 | tty_kref_put(tty); | 611 | tty_kref_put(tty); |
@@ -825,12 +824,6 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, | |||
825 | status = 0; | 824 | status = 0; |
826 | status = set_reg_sync(port, ATEN2011_port->ControlRegOffset, Data); | 825 | status = set_reg_sync(port, ATEN2011_port->ControlRegOffset, Data); |
827 | 826 | ||
828 | /* force low_latency on so that our tty_push actually forces * | ||
829 | * the data through,otherwise it is scheduled, and with * | ||
830 | * high data rates (like with OHCI) data can get lost. */ | ||
831 | |||
832 | if (tty) | ||
833 | tty->low_latency = 1; | ||
834 | /* | 827 | /* |
835 | * Check to see if we've set up our endpoint info yet | 828 | * Check to see if we've set up our endpoint info yet |
836 | * (can't set it up in ATEN2011_startup as the structures | 829 | * (can't set it up in ATEN2011_startup as the structures |
@@ -1473,22 +1466,7 @@ static void ATEN2011_set_termios(struct tty_struct *tty, | |||
1473 | 1466 | ||
1474 | cflag = tty->termios->c_cflag; | 1467 | cflag = tty->termios->c_cflag; |
1475 | 1468 | ||
1476 | if (!cflag) { | 1469 | dbg("%s - cflag %08x iflag %08x", __func__, |
1477 | dbg("%s %s", __func__, "cflag is NULL"); | ||
1478 | return; | ||
1479 | } | ||
1480 | |||
1481 | /* check that they really want us to change something */ | ||
1482 | if (old_termios) { | ||
1483 | if ((cflag == old_termios->c_cflag) && | ||
1484 | (RELEVANT_IFLAG(tty->termios->c_iflag) == | ||
1485 | RELEVANT_IFLAG(old_termios->c_iflag))) { | ||
1486 | dbg("%s", "Nothing to change"); | ||
1487 | return; | ||
1488 | } | ||
1489 | } | ||
1490 | |||
1491 | dbg("%s - clfag %08x iflag %08x", __func__, | ||
1492 | tty->termios->c_cflag, RELEVANT_IFLAG(tty->termios->c_iflag)); | 1470 | tty->termios->c_cflag, RELEVANT_IFLAG(tty->termios->c_iflag)); |
1493 | 1471 | ||
1494 | if (old_termios) { | 1472 | if (old_termios) { |
diff --git a/drivers/staging/wlan-ng/p80211netdev.c b/drivers/staging/wlan-ng/p80211netdev.c index b2a606a3693..393e4df70df 100644 --- a/drivers/staging/wlan-ng/p80211netdev.c +++ b/drivers/staging/wlan-ng/p80211netdev.c | |||
@@ -711,6 +711,20 @@ static int wlan_change_mtu(netdevice_t *dev, int new_mtu) | |||
711 | return 0; | 711 | return 0; |
712 | } | 712 | } |
713 | 713 | ||
714 | static const struct net_device_ops p80211_netdev_ops = { | ||
715 | .ndo_init = p80211knetdev_init, | ||
716 | .ndo_open = p80211knetdev_open, | ||
717 | .ndo_stop = p80211knetdev_stop, | ||
718 | .ndo_get_stats = p80211knetdev_get_stats, | ||
719 | .ndo_start_xmit = p80211knetdev_hard_start_xmit, | ||
720 | .ndo_set_multicast_list = p80211knetdev_set_multicast_list, | ||
721 | .ndo_do_ioctl = p80211knetdev_do_ioctl, | ||
722 | .ndo_set_mac_address = p80211knetdev_set_mac_address, | ||
723 | .ndo_tx_timeout = p80211knetdev_tx_timeout, | ||
724 | .ndo_change_mtu = wlan_change_mtu, | ||
725 | .ndo_validate_addr = eth_validate_addr, | ||
726 | }; | ||
727 | |||
714 | /*---------------------------------------------------------------- | 728 | /*---------------------------------------------------------------- |
715 | * wlan_setup | 729 | * wlan_setup |
716 | * | 730 | * |
@@ -756,11 +770,7 @@ int wlan_setup(wlandevice_t *wlandev) | |||
756 | } else { | 770 | } else { |
757 | wlandev->netdev = dev; | 771 | wlandev->netdev = dev; |
758 | dev->ml_priv = wlandev; | 772 | dev->ml_priv = wlandev; |
759 | dev->hard_start_xmit = p80211knetdev_hard_start_xmit; | 773 | dev->netdev_ops = &p80211_netdev_ops; |
760 | dev->get_stats = p80211knetdev_get_stats; | ||
761 | dev->init = p80211knetdev_init; | ||
762 | dev->open = p80211knetdev_open; | ||
763 | dev->stop = p80211knetdev_stop; | ||
764 | 774 | ||
765 | mutex_init(&wlandev->ioctl_lock); | 775 | mutex_init(&wlandev->ioctl_lock); |
766 | /* block ioctls until fully initialised. Don't forget to call | 776 | /* block ioctls until fully initialised. Don't forget to call |
diff --git a/drivers/uio/uio_cif.c b/drivers/uio/uio_cif.c index c60b8fcf0e3..28034c81291 100644 --- a/drivers/uio/uio_cif.c +++ b/drivers/uio/uio_cif.c | |||
@@ -147,5 +147,6 @@ static void __exit hilscher_exit_module(void) | |||
147 | module_init(hilscher_init_module); | 147 | module_init(hilscher_init_module); |
148 | module_exit(hilscher_exit_module); | 148 | module_exit(hilscher_exit_module); |
149 | 149 | ||
150 | MODULE_DEVICE_TABLE(pci, hilscher_pci_ids); | ||
150 | MODULE_LICENSE("GPL v2"); | 151 | MODULE_LICENSE("GPL v2"); |
151 | MODULE_AUTHOR("Hans J. Koch, Benedikt Spranger"); | 152 | MODULE_AUTHOR("Hans J. Koch, Benedikt Spranger"); |
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 869d47cb6db..0a69c0977e3 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
@@ -546,10 +546,6 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp) | |||
546 | tty->driver_data = acm; | 546 | tty->driver_data = acm; |
547 | acm->tty = tty; | 547 | acm->tty = tty; |
548 | 548 | ||
549 | /* force low_latency on so that our tty_push actually forces the data through, | ||
550 | otherwise it is scheduled, and with high data rates data can get lost. */ | ||
551 | tty->low_latency = 1; | ||
552 | |||
553 | if (usb_autopm_get_interface(acm->control) < 0) | 549 | if (usb_autopm_get_interface(acm->control) < 0) |
554 | goto early_bail; | 550 | goto early_bail; |
555 | else | 551 | else |
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c index 3771d6e6d0c..0fe434505ac 100644 --- a/drivers/usb/class/cdc-wdm.c +++ b/drivers/usb/class/cdc-wdm.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * This driver supports USB CDC WCM Device Management. | 4 | * This driver supports USB CDC WCM Device Management. |
5 | * | 5 | * |
6 | * Copyright (c) 2007-2008 Oliver Neukum | 6 | * Copyright (c) 2007-2009 Oliver Neukum |
7 | * | 7 | * |
8 | * Some code taken from cdc-acm.c | 8 | * Some code taken from cdc-acm.c |
9 | * | 9 | * |
@@ -610,7 +610,7 @@ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
610 | if (!buffer) | 610 | if (!buffer) |
611 | goto out; | 611 | goto out; |
612 | 612 | ||
613 | while (buflen > 0) { | 613 | while (buflen > 2) { |
614 | if (buffer [1] != USB_DT_CS_INTERFACE) { | 614 | if (buffer [1] != USB_DT_CS_INTERFACE) { |
615 | dev_err(&intf->dev, "skipping garbage\n"); | 615 | dev_err(&intf->dev, "skipping garbage\n"); |
616 | goto next_desc; | 616 | goto next_desc; |
@@ -646,16 +646,18 @@ next_desc: | |||
646 | spin_lock_init(&desc->iuspin); | 646 | spin_lock_init(&desc->iuspin); |
647 | init_waitqueue_head(&desc->wait); | 647 | init_waitqueue_head(&desc->wait); |
648 | desc->wMaxCommand = maxcom; | 648 | desc->wMaxCommand = maxcom; |
649 | /* this will be expanded and needed in hardware endianness */ | ||
649 | desc->inum = cpu_to_le16((u16)intf->cur_altsetting->desc.bInterfaceNumber); | 650 | desc->inum = cpu_to_le16((u16)intf->cur_altsetting->desc.bInterfaceNumber); |
650 | desc->intf = intf; | 651 | desc->intf = intf; |
651 | INIT_WORK(&desc->rxwork, wdm_rxwork); | 652 | INIT_WORK(&desc->rxwork, wdm_rxwork); |
652 | 653 | ||
653 | iface = &intf->altsetting[0]; | 654 | rv = -EINVAL; |
655 | iface = intf->cur_altsetting; | ||
656 | if (iface->desc.bNumEndpoints != 1) | ||
657 | goto err; | ||
654 | ep = &iface->endpoint[0].desc; | 658 | ep = &iface->endpoint[0].desc; |
655 | if (!usb_endpoint_is_int_in(ep)) { | 659 | if (!ep || !usb_endpoint_is_int_in(ep)) |
656 | rv = -EINVAL; | ||
657 | goto err; | 660 | goto err; |
658 | } | ||
659 | 661 | ||
660 | desc->wMaxPacketSize = le16_to_cpu(ep->wMaxPacketSize); | 662 | desc->wMaxPacketSize = le16_to_cpu(ep->wMaxPacketSize); |
661 | desc->bMaxPacketSize0 = udev->descriptor.bMaxPacketSize0; | 663 | desc->bMaxPacketSize0 = udev->descriptor.bMaxPacketSize0; |
@@ -711,12 +713,19 @@ next_desc: | |||
711 | 713 | ||
712 | usb_set_intfdata(intf, desc); | 714 | usb_set_intfdata(intf, desc); |
713 | rv = usb_register_dev(intf, &wdm_class); | 715 | rv = usb_register_dev(intf, &wdm_class); |
714 | dev_info(&intf->dev, "cdc-wdm%d: USB WDM device\n", | ||
715 | intf->minor - WDM_MINOR_BASE); | ||
716 | if (rv < 0) | 716 | if (rv < 0) |
717 | goto err; | 717 | goto err3; |
718 | else | ||
719 | dev_info(&intf->dev, "cdc-wdm%d: USB WDM device\n", | ||
720 | intf->minor - WDM_MINOR_BASE); | ||
718 | out: | 721 | out: |
719 | return rv; | 722 | return rv; |
723 | err3: | ||
724 | usb_set_intfdata(intf, NULL); | ||
725 | usb_buffer_free(interface_to_usbdev(desc->intf), | ||
726 | desc->bMaxPacketSize0, | ||
727 | desc->inbuf, | ||
728 | desc->response->transfer_dma); | ||
720 | err2: | 729 | err2: |
721 | usb_buffer_free(interface_to_usbdev(desc->intf), | 730 | usb_buffer_free(interface_to_usbdev(desc->intf), |
722 | desc->wMaxPacketSize, | 731 | desc->wMaxPacketSize, |
diff --git a/drivers/usb/core/buffer.c b/drivers/usb/core/buffer.c index cadb2dc1d28..3ba2fff7149 100644 --- a/drivers/usb/core/buffer.c +++ b/drivers/usb/core/buffer.c | |||
@@ -119,7 +119,7 @@ void *hcd_buffer_alloc( | |||
119 | if (size <= pool_max [i]) | 119 | if (size <= pool_max [i]) |
120 | return dma_pool_alloc(hcd->pool [i], mem_flags, dma); | 120 | return dma_pool_alloc(hcd->pool [i], mem_flags, dma); |
121 | } | 121 | } |
122 | return dma_alloc_coherent(hcd->self.controller, size, dma, 0); | 122 | return dma_alloc_coherent(hcd->self.controller, size, dma, mem_flags); |
123 | } | 123 | } |
124 | 124 | ||
125 | void hcd_buffer_free( | 125 | void hcd_buffer_free( |
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index df3c539f652..308609039c7 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c | |||
@@ -841,7 +841,7 @@ static int proc_resetep(struct dev_state *ps, void __user *arg) | |||
841 | ret = checkintf(ps, ret); | 841 | ret = checkintf(ps, ret); |
842 | if (ret) | 842 | if (ret) |
843 | return ret; | 843 | return ret; |
844 | usb_settoggle(ps->dev, ep & 0xf, !(ep & USB_DIR_IN), 0); | 844 | usb_reset_endpoint(ps->dev, ep); |
845 | return 0; | 845 | return 0; |
846 | } | 846 | } |
847 | 847 | ||
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 81fa8506825..42b93da1085 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c | |||
@@ -1539,6 +1539,32 @@ void usb_hcd_disable_endpoint(struct usb_device *udev, | |||
1539 | hcd->driver->endpoint_disable(hcd, ep); | 1539 | hcd->driver->endpoint_disable(hcd, ep); |
1540 | } | 1540 | } |
1541 | 1541 | ||
1542 | /** | ||
1543 | * usb_hcd_reset_endpoint - reset host endpoint state | ||
1544 | * @udev: USB device. | ||
1545 | * @ep: the endpoint to reset. | ||
1546 | * | ||
1547 | * Resets any host endpoint state such as the toggle bit, sequence | ||
1548 | * number and current window. | ||
1549 | */ | ||
1550 | void usb_hcd_reset_endpoint(struct usb_device *udev, | ||
1551 | struct usb_host_endpoint *ep) | ||
1552 | { | ||
1553 | struct usb_hcd *hcd = bus_to_hcd(udev->bus); | ||
1554 | |||
1555 | if (hcd->driver->endpoint_reset) | ||
1556 | hcd->driver->endpoint_reset(hcd, ep); | ||
1557 | else { | ||
1558 | int epnum = usb_endpoint_num(&ep->desc); | ||
1559 | int is_out = usb_endpoint_dir_out(&ep->desc); | ||
1560 | int is_control = usb_endpoint_xfer_control(&ep->desc); | ||
1561 | |||
1562 | usb_settoggle(udev, epnum, is_out, 0); | ||
1563 | if (is_control) | ||
1564 | usb_settoggle(udev, epnum, !is_out, 0); | ||
1565 | } | ||
1566 | } | ||
1567 | |||
1542 | /* Protect against drivers that try to unlink URBs after the device | 1568 | /* Protect against drivers that try to unlink URBs after the device |
1543 | * is gone, by waiting until all unlinks for @udev are finished. | 1569 | * is gone, by waiting until all unlinks for @udev are finished. |
1544 | * Since we don't currently track URBs by device, simply wait until | 1570 | * Since we don't currently track URBs by device, simply wait until |
diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h index f750eb1ab59..e7d4479de41 100644 --- a/drivers/usb/core/hcd.h +++ b/drivers/usb/core/hcd.h | |||
@@ -206,6 +206,11 @@ struct hc_driver { | |||
206 | void (*endpoint_disable)(struct usb_hcd *hcd, | 206 | void (*endpoint_disable)(struct usb_hcd *hcd, |
207 | struct usb_host_endpoint *ep); | 207 | struct usb_host_endpoint *ep); |
208 | 208 | ||
209 | /* (optional) reset any endpoint state such as sequence number | ||
210 | and current window */ | ||
211 | void (*endpoint_reset)(struct usb_hcd *hcd, | ||
212 | struct usb_host_endpoint *ep); | ||
213 | |||
209 | /* root hub support */ | 214 | /* root hub support */ |
210 | int (*hub_status_data) (struct usb_hcd *hcd, char *buf); | 215 | int (*hub_status_data) (struct usb_hcd *hcd, char *buf); |
211 | int (*hub_control) (struct usb_hcd *hcd, | 216 | int (*hub_control) (struct usb_hcd *hcd, |
@@ -234,6 +239,8 @@ extern void usb_hcd_flush_endpoint(struct usb_device *udev, | |||
234 | struct usb_host_endpoint *ep); | 239 | struct usb_host_endpoint *ep); |
235 | extern void usb_hcd_disable_endpoint(struct usb_device *udev, | 240 | extern void usb_hcd_disable_endpoint(struct usb_device *udev, |
236 | struct usb_host_endpoint *ep); | 241 | struct usb_host_endpoint *ep); |
242 | extern void usb_hcd_reset_endpoint(struct usb_device *udev, | ||
243 | struct usb_host_endpoint *ep); | ||
237 | extern void usb_hcd_synchronize_unlinks(struct usb_device *udev); | 244 | extern void usb_hcd_synchronize_unlinks(struct usb_device *udev); |
238 | extern int usb_hcd_get_frame_number(struct usb_device *udev); | 245 | extern int usb_hcd_get_frame_number(struct usb_device *udev); |
239 | 246 | ||
@@ -279,6 +286,13 @@ extern irqreturn_t usb_hcd_irq(int irq, void *__hcd); | |||
279 | extern void usb_hc_died(struct usb_hcd *hcd); | 286 | extern void usb_hc_died(struct usb_hcd *hcd); |
280 | extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd); | 287 | extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd); |
281 | 288 | ||
289 | /* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */ | ||
290 | #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1) | ||
291 | #define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep))) | ||
292 | #define usb_settoggle(dev, ep, out, bit) \ | ||
293 | ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \ | ||
294 | ((bit) << (ep))) | ||
295 | |||
282 | /* -------------------------------------------------------------------------- */ | 296 | /* -------------------------------------------------------------------------- */ |
283 | 297 | ||
284 | /* Enumeration is only for the hub driver, or HCD virtual root hubs */ | 298 | /* Enumeration is only for the hub driver, or HCD virtual root hubs */ |
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 30a0690f368..b6262837765 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c | |||
@@ -1002,8 +1002,7 @@ int usb_clear_halt(struct usb_device *dev, int pipe) | |||
1002 | * the copy in usb-storage, for as long as we need two copies. | 1002 | * the copy in usb-storage, for as long as we need two copies. |
1003 | */ | 1003 | */ |
1004 | 1004 | ||
1005 | /* toggle was reset by the clear */ | 1005 | usb_reset_endpoint(dev, endp); |
1006 | usb_settoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe), 0); | ||
1007 | 1006 | ||
1008 | return 0; | 1007 | return 0; |
1009 | } | 1008 | } |
@@ -1076,6 +1075,30 @@ void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr, | |||
1076 | } | 1075 | } |
1077 | 1076 | ||
1078 | /** | 1077 | /** |
1078 | * usb_reset_endpoint - Reset an endpoint's state. | ||
1079 | * @dev: the device whose endpoint is to be reset | ||
1080 | * @epaddr: the endpoint's address. Endpoint number for output, | ||
1081 | * endpoint number + USB_DIR_IN for input | ||
1082 | * | ||
1083 | * Resets any host-side endpoint state such as the toggle bit, | ||
1084 | * sequence number or current window. | ||
1085 | */ | ||
1086 | void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr) | ||
1087 | { | ||
1088 | unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK; | ||
1089 | struct usb_host_endpoint *ep; | ||
1090 | |||
1091 | if (usb_endpoint_out(epaddr)) | ||
1092 | ep = dev->ep_out[epnum]; | ||
1093 | else | ||
1094 | ep = dev->ep_in[epnum]; | ||
1095 | if (ep) | ||
1096 | usb_hcd_reset_endpoint(dev, ep); | ||
1097 | } | ||
1098 | EXPORT_SYMBOL_GPL(usb_reset_endpoint); | ||
1099 | |||
1100 | |||
1101 | /** | ||
1079 | * usb_disable_interface -- Disable all endpoints for an interface | 1102 | * usb_disable_interface -- Disable all endpoints for an interface |
1080 | * @dev: the device whose interface is being disabled | 1103 | * @dev: the device whose interface is being disabled |
1081 | * @intf: pointer to the interface descriptor | 1104 | * @intf: pointer to the interface descriptor |
@@ -1117,7 +1140,6 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0) | |||
1117 | usb_disable_endpoint(dev, i, true); | 1140 | usb_disable_endpoint(dev, i, true); |
1118 | usb_disable_endpoint(dev, i + USB_DIR_IN, true); | 1141 | usb_disable_endpoint(dev, i + USB_DIR_IN, true); |
1119 | } | 1142 | } |
1120 | dev->toggle[0] = dev->toggle[1] = 0; | ||
1121 | 1143 | ||
1122 | /* getting rid of interfaces will disconnect | 1144 | /* getting rid of interfaces will disconnect |
1123 | * any drivers bound to them (a key side effect) | 1145 | * any drivers bound to them (a key side effect) |
@@ -1154,28 +1176,24 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0) | |||
1154 | * usb_enable_endpoint - Enable an endpoint for USB communications | 1176 | * usb_enable_endpoint - Enable an endpoint for USB communications |
1155 | * @dev: the device whose interface is being enabled | 1177 | * @dev: the device whose interface is being enabled |
1156 | * @ep: the endpoint | 1178 | * @ep: the endpoint |
1157 | * @reset_toggle: flag to set the endpoint's toggle back to 0 | 1179 | * @reset_ep: flag to reset the endpoint state |
1158 | * | 1180 | * |
1159 | * Resets the endpoint toggle if asked, and sets dev->ep_{in,out} pointers. | 1181 | * Resets the endpoint state if asked, and sets dev->ep_{in,out} pointers. |
1160 | * For control endpoints, both the input and output sides are handled. | 1182 | * For control endpoints, both the input and output sides are handled. |
1161 | */ | 1183 | */ |
1162 | void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep, | 1184 | void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep, |
1163 | bool reset_toggle) | 1185 | bool reset_ep) |
1164 | { | 1186 | { |
1165 | int epnum = usb_endpoint_num(&ep->desc); | 1187 | int epnum = usb_endpoint_num(&ep->desc); |
1166 | int is_out = usb_endpoint_dir_out(&ep->desc); | 1188 | int is_out = usb_endpoint_dir_out(&ep->desc); |
1167 | int is_control = usb_endpoint_xfer_control(&ep->desc); | 1189 | int is_control = usb_endpoint_xfer_control(&ep->desc); |
1168 | 1190 | ||
1169 | if (is_out || is_control) { | 1191 | if (reset_ep) |
1170 | if (reset_toggle) | 1192 | usb_hcd_reset_endpoint(dev, ep); |
1171 | usb_settoggle(dev, epnum, 1, 0); | 1193 | if (is_out || is_control) |
1172 | dev->ep_out[epnum] = ep; | 1194 | dev->ep_out[epnum] = ep; |
1173 | } | 1195 | if (!is_out || is_control) |
1174 | if (!is_out || is_control) { | ||
1175 | if (reset_toggle) | ||
1176 | usb_settoggle(dev, epnum, 0, 0); | ||
1177 | dev->ep_in[epnum] = ep; | 1196 | dev->ep_in[epnum] = ep; |
1178 | } | ||
1179 | ep->enabled = 1; | 1197 | ep->enabled = 1; |
1180 | } | 1198 | } |
1181 | 1199 | ||
@@ -1183,18 +1201,18 @@ void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep, | |||
1183 | * usb_enable_interface - Enable all the endpoints for an interface | 1201 | * usb_enable_interface - Enable all the endpoints for an interface |
1184 | * @dev: the device whose interface is being enabled | 1202 | * @dev: the device whose interface is being enabled |
1185 | * @intf: pointer to the interface descriptor | 1203 | * @intf: pointer to the interface descriptor |
1186 | * @reset_toggles: flag to set the endpoints' toggles back to 0 | 1204 | * @reset_eps: flag to reset the endpoints' state |
1187 | * | 1205 | * |
1188 | * Enables all the endpoints for the interface's current altsetting. | 1206 | * Enables all the endpoints for the interface's current altsetting. |
1189 | */ | 1207 | */ |
1190 | void usb_enable_interface(struct usb_device *dev, | 1208 | void usb_enable_interface(struct usb_device *dev, |
1191 | struct usb_interface *intf, bool reset_toggles) | 1209 | struct usb_interface *intf, bool reset_eps) |
1192 | { | 1210 | { |
1193 | struct usb_host_interface *alt = intf->cur_altsetting; | 1211 | struct usb_host_interface *alt = intf->cur_altsetting; |
1194 | int i; | 1212 | int i; |
1195 | 1213 | ||
1196 | for (i = 0; i < alt->desc.bNumEndpoints; ++i) | 1214 | for (i = 0; i < alt->desc.bNumEndpoints; ++i) |
1197 | usb_enable_endpoint(dev, &alt->endpoint[i], reset_toggles); | 1215 | usb_enable_endpoint(dev, &alt->endpoint[i], reset_eps); |
1198 | } | 1216 | } |
1199 | 1217 | ||
1200 | /** | 1218 | /** |
@@ -1335,7 +1353,7 @@ EXPORT_SYMBOL_GPL(usb_set_interface); | |||
1335 | * This issues a standard SET_CONFIGURATION request to the device using | 1353 | * This issues a standard SET_CONFIGURATION request to the device using |
1336 | * the current configuration. The effect is to reset most USB-related | 1354 | * the current configuration. The effect is to reset most USB-related |
1337 | * state in the device, including interface altsettings (reset to zero), | 1355 | * state in the device, including interface altsettings (reset to zero), |
1338 | * endpoint halts (cleared), and data toggle (only for bulk and interrupt | 1356 | * endpoint halts (cleared), and endpoint state (only for bulk and interrupt |
1339 | * endpoints). Other usbcore state is unchanged, including bindings of | 1357 | * endpoints). Other usbcore state is unchanged, including bindings of |
1340 | * usb device drivers to interfaces. | 1358 | * usb device drivers to interfaces. |
1341 | * | 1359 | * |
@@ -1343,7 +1361,7 @@ EXPORT_SYMBOL_GPL(usb_set_interface); | |||
1343 | * (multi-interface) devices. Instead, the driver for each interface may | 1361 | * (multi-interface) devices. Instead, the driver for each interface may |
1344 | * use usb_set_interface() on the interfaces it claims. Be careful though; | 1362 | * use usb_set_interface() on the interfaces it claims. Be careful though; |
1345 | * some devices don't support the SET_INTERFACE request, and others won't | 1363 | * some devices don't support the SET_INTERFACE request, and others won't |
1346 | * reset all the interface state (notably data toggles). Resetting the whole | 1364 | * reset all the interface state (notably endpoint state). Resetting the whole |
1347 | * configuration would affect other drivers' interfaces. | 1365 | * configuration would affect other drivers' interfaces. |
1348 | * | 1366 | * |
1349 | * The caller must own the device lock. | 1367 | * The caller must own the device lock. |
@@ -1376,8 +1394,6 @@ int usb_reset_configuration(struct usb_device *dev) | |||
1376 | if (retval < 0) | 1394 | if (retval < 0) |
1377 | return retval; | 1395 | return retval; |
1378 | 1396 | ||
1379 | dev->toggle[0] = dev->toggle[1] = 0; | ||
1380 | |||
1381 | /* re-init hc/hcd interface/endpoint state */ | 1397 | /* re-init hc/hcd interface/endpoint state */ |
1382 | for (i = 0; i < config->desc.bNumInterfaces; i++) { | 1398 | for (i = 0; i < config->desc.bNumInterfaces; i++) { |
1383 | struct usb_interface *intf = config->interface[i]; | 1399 | struct usb_interface *intf = config->interface[i]; |
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index dcfc072630c..7eee400d3e3 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c | |||
@@ -362,7 +362,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent, | |||
362 | dev->ep0.desc.bLength = USB_DT_ENDPOINT_SIZE; | 362 | dev->ep0.desc.bLength = USB_DT_ENDPOINT_SIZE; |
363 | dev->ep0.desc.bDescriptorType = USB_DT_ENDPOINT; | 363 | dev->ep0.desc.bDescriptorType = USB_DT_ENDPOINT; |
364 | /* ep0 maxpacket comes later, from device descriptor */ | 364 | /* ep0 maxpacket comes later, from device descriptor */ |
365 | usb_enable_endpoint(dev, &dev->ep0, true); | 365 | usb_enable_endpoint(dev, &dev->ep0, false); |
366 | dev->can_submit = 1; | 366 | dev->can_submit = 1; |
367 | 367 | ||
368 | /* Save readable and stable topology id, distinguishing devices | 368 | /* Save readable and stable topology id, distinguishing devices |
diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c index 22c65960c42..38e531ecae4 100644 --- a/drivers/usb/gadget/ci13xxx_udc.c +++ b/drivers/usb/gadget/ci13xxx_udc.c | |||
@@ -51,6 +51,7 @@ | |||
51 | * - Gadget API (majority of optional features) | 51 | * - Gadget API (majority of optional features) |
52 | * - Suspend & Remote Wakeup | 52 | * - Suspend & Remote Wakeup |
53 | */ | 53 | */ |
54 | #include <linux/delay.h> | ||
54 | #include <linux/device.h> | 55 | #include <linux/device.h> |
55 | #include <linux/dmapool.h> | 56 | #include <linux/dmapool.h> |
56 | #include <linux/dma-mapping.h> | 57 | #include <linux/dma-mapping.h> |
@@ -142,7 +143,7 @@ static struct { | |||
142 | #define CAP_DEVICEADDR (0x014UL) | 143 | #define CAP_DEVICEADDR (0x014UL) |
143 | #define CAP_ENDPTLISTADDR (0x018UL) | 144 | #define CAP_ENDPTLISTADDR (0x018UL) |
144 | #define CAP_PORTSC (0x044UL) | 145 | #define CAP_PORTSC (0x044UL) |
145 | #define CAP_DEVLC (0x0B4UL) | 146 | #define CAP_DEVLC (0x084UL) |
146 | #define CAP_USBMODE (hw_bank.lpm ? 0x0C8UL : 0x068UL) | 147 | #define CAP_USBMODE (hw_bank.lpm ? 0x0C8UL : 0x068UL) |
147 | #define CAP_ENDPTSETUPSTAT (hw_bank.lpm ? 0x0D8UL : 0x06CUL) | 148 | #define CAP_ENDPTSETUPSTAT (hw_bank.lpm ? 0x0D8UL : 0x06CUL) |
148 | #define CAP_ENDPTPRIME (hw_bank.lpm ? 0x0DCUL : 0x070UL) | 149 | #define CAP_ENDPTPRIME (hw_bank.lpm ? 0x0DCUL : 0x070UL) |
@@ -1986,6 +1987,8 @@ static int ep_enable(struct usb_ep *ep, | |||
1986 | do { | 1987 | do { |
1987 | dbg_event(_usb_addr(mEp), "ENABLE", 0); | 1988 | dbg_event(_usb_addr(mEp), "ENABLE", 0); |
1988 | 1989 | ||
1990 | mEp->qh[mEp->dir].ptr->cap = 0; | ||
1991 | |||
1989 | if (mEp->type == USB_ENDPOINT_XFER_CONTROL) | 1992 | if (mEp->type == USB_ENDPOINT_XFER_CONTROL) |
1990 | mEp->qh[mEp->dir].ptr->cap |= QH_IOS; | 1993 | mEp->qh[mEp->dir].ptr->cap |= QH_IOS; |
1991 | else if (mEp->type == USB_ENDPOINT_XFER_ISOC) | 1994 | else if (mEp->type == USB_ENDPOINT_XFER_ISOC) |
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c index 5c030b080d4..381a53b3e11 100644 --- a/drivers/usb/gadget/file_storage.c +++ b/drivers/usb/gadget/file_storage.c | |||
@@ -738,7 +738,6 @@ static struct fsg_dev *the_fsg; | |||
738 | static struct usb_gadget_driver fsg_driver; | 738 | static struct usb_gadget_driver fsg_driver; |
739 | 739 | ||
740 | static void close_backing_file(struct lun *curlun); | 740 | static void close_backing_file(struct lun *curlun); |
741 | static void close_all_backing_files(struct fsg_dev *fsg); | ||
742 | 741 | ||
743 | 742 | ||
744 | /*-------------------------------------------------------------------------*/ | 743 | /*-------------------------------------------------------------------------*/ |
@@ -3593,12 +3592,10 @@ static int fsg_main_thread(void *fsg_) | |||
3593 | fsg->thread_task = NULL; | 3592 | fsg->thread_task = NULL; |
3594 | spin_unlock_irq(&fsg->lock); | 3593 | spin_unlock_irq(&fsg->lock); |
3595 | 3594 | ||
3596 | /* In case we are exiting because of a signal, unregister the | 3595 | /* If we are exiting because of a signal, unregister the |
3597 | * gadget driver and close the backing file. */ | 3596 | * gadget driver. */ |
3598 | if (test_and_clear_bit(REGISTERED, &fsg->atomic_bitflags)) { | 3597 | if (test_and_clear_bit(REGISTERED, &fsg->atomic_bitflags)) |
3599 | usb_gadget_unregister_driver(&fsg_driver); | 3598 | usb_gadget_unregister_driver(&fsg_driver); |
3600 | close_all_backing_files(fsg); | ||
3601 | } | ||
3602 | 3599 | ||
3603 | /* Let the unbind and cleanup routines know the thread has exited */ | 3600 | /* Let the unbind and cleanup routines know the thread has exited */ |
3604 | complete_and_exit(&fsg->thread_notifier, 0); | 3601 | complete_and_exit(&fsg->thread_notifier, 0); |
@@ -3703,14 +3700,6 @@ static void close_backing_file(struct lun *curlun) | |||
3703 | } | 3700 | } |
3704 | } | 3701 | } |
3705 | 3702 | ||
3706 | static void close_all_backing_files(struct fsg_dev *fsg) | ||
3707 | { | ||
3708 | int i; | ||
3709 | |||
3710 | for (i = 0; i < fsg->nluns; ++i) | ||
3711 | close_backing_file(&fsg->luns[i]); | ||
3712 | } | ||
3713 | |||
3714 | 3703 | ||
3715 | static ssize_t show_ro(struct device *dev, struct device_attribute *attr, char *buf) | 3704 | static ssize_t show_ro(struct device *dev, struct device_attribute *attr, char *buf) |
3716 | { | 3705 | { |
@@ -3845,6 +3834,7 @@ static void /* __init_or_exit */ fsg_unbind(struct usb_gadget *gadget) | |||
3845 | if (curlun->registered) { | 3834 | if (curlun->registered) { |
3846 | device_remove_file(&curlun->dev, &dev_attr_ro); | 3835 | device_remove_file(&curlun->dev, &dev_attr_ro); |
3847 | device_remove_file(&curlun->dev, &dev_attr_file); | 3836 | device_remove_file(&curlun->dev, &dev_attr_file); |
3837 | close_backing_file(curlun); | ||
3848 | device_unregister(&curlun->dev); | 3838 | device_unregister(&curlun->dev); |
3849 | curlun->registered = 0; | 3839 | curlun->registered = 0; |
3850 | } | 3840 | } |
@@ -4190,7 +4180,6 @@ autoconf_fail: | |||
4190 | out: | 4180 | out: |
4191 | fsg->state = FSG_STATE_TERMINATED; // The thread is dead | 4181 | fsg->state = FSG_STATE_TERMINATED; // The thread is dead |
4192 | fsg_unbind(gadget); | 4182 | fsg_unbind(gadget); |
4193 | close_all_backing_files(fsg); | ||
4194 | complete(&fsg->thread_notifier); | 4183 | complete(&fsg->thread_notifier); |
4195 | return rc; | 4184 | return rc; |
4196 | } | 4185 | } |
@@ -4284,7 +4273,6 @@ static void __exit fsg_cleanup(void) | |||
4284 | /* Wait for the thread to finish up */ | 4273 | /* Wait for the thread to finish up */ |
4285 | wait_for_completion(&fsg->thread_notifier); | 4274 | wait_for_completion(&fsg->thread_notifier); |
4286 | 4275 | ||
4287 | close_all_backing_files(fsg); | ||
4288 | kref_put(&fsg->ref, fsg_release); | 4276 | kref_put(&fsg->ref, fsg_release); |
4289 | } | 4277 | } |
4290 | module_exit(fsg_cleanup); | 4278 | module_exit(fsg_cleanup); |
diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c index 57d9641c6bf..a2db0e174f2 100644 --- a/drivers/usb/gadget/omap_udc.c +++ b/drivers/usb/gadget/omap_udc.c | |||
@@ -3104,7 +3104,6 @@ static int omap_udc_resume(struct platform_device *dev) | |||
3104 | /*-------------------------------------------------------------------------*/ | 3104 | /*-------------------------------------------------------------------------*/ |
3105 | 3105 | ||
3106 | static struct platform_driver udc_driver = { | 3106 | static struct platform_driver udc_driver = { |
3107 | .probe = omap_udc_probe, | ||
3108 | .remove = __exit_p(omap_udc_remove), | 3107 | .remove = __exit_p(omap_udc_remove), |
3109 | .suspend = omap_udc_suspend, | 3108 | .suspend = omap_udc_suspend, |
3110 | .resume = omap_udc_resume, | 3109 | .resume = omap_udc_resume, |
@@ -3122,7 +3121,7 @@ static int __init udc_init(void) | |||
3122 | #endif | 3121 | #endif |
3123 | "%s\n", driver_desc, | 3122 | "%s\n", driver_desc, |
3124 | use_dma ? " (dma)" : ""); | 3123 | use_dma ? " (dma)" : ""); |
3125 | return platform_driver_register(&udc_driver); | 3124 | return platform_driver_probe(&udc_driver, omap_udc_probe); |
3126 | } | 3125 | } |
3127 | module_init(udc_init); | 3126 | module_init(udc_init); |
3128 | 3127 | ||
diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c index 96d65ca06ec..4007770f7ed 100644 --- a/drivers/usb/gadget/u_ether.c +++ b/drivers/usb/gadget/u_ether.c | |||
@@ -175,12 +175,6 @@ static void eth_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *p) | |||
175 | strlcpy(p->bus_info, dev_name(&dev->gadget->dev), sizeof p->bus_info); | 175 | strlcpy(p->bus_info, dev_name(&dev->gadget->dev), sizeof p->bus_info); |
176 | } | 176 | } |
177 | 177 | ||
178 | static u32 eth_get_link(struct net_device *net) | ||
179 | { | ||
180 | struct eth_dev *dev = netdev_priv(net); | ||
181 | return dev->gadget->speed != USB_SPEED_UNKNOWN; | ||
182 | } | ||
183 | |||
184 | /* REVISIT can also support: | 178 | /* REVISIT can also support: |
185 | * - WOL (by tracking suspends and issuing remote wakeup) | 179 | * - WOL (by tracking suspends and issuing remote wakeup) |
186 | * - msglevel (implies updated messaging) | 180 | * - msglevel (implies updated messaging) |
@@ -189,7 +183,7 @@ static u32 eth_get_link(struct net_device *net) | |||
189 | 183 | ||
190 | static struct ethtool_ops ops = { | 184 | static struct ethtool_ops ops = { |
191 | .get_drvinfo = eth_get_drvinfo, | 185 | .get_drvinfo = eth_get_drvinfo, |
192 | .get_link = eth_get_link | 186 | .get_link = ethtool_op_get_link, |
193 | }; | 187 | }; |
194 | 188 | ||
195 | static void defer_kevent(struct eth_dev *dev, int flag) | 189 | static void defer_kevent(struct eth_dev *dev, int flag) |
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index ada5d2ba297..556d0ec0c1f 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c | |||
@@ -323,7 +323,7 @@ static int tt_available ( | |||
323 | * already scheduled transactions | 323 | * already scheduled transactions |
324 | */ | 324 | */ |
325 | if (125 < usecs) { | 325 | if (125 < usecs) { |
326 | int ufs = (usecs / 125) - 1; | 326 | int ufs = (usecs / 125); |
327 | int i; | 327 | int i; |
328 | for (i = uframe; i < (uframe + ufs) && i < 8; i++) | 328 | for (i = uframe; i < (uframe + ufs) && i < 8; i++) |
329 | if (0 < tt_usecs[i]) { | 329 | if (0 < tt_usecs[i]) { |
diff --git a/drivers/usb/host/whci/asl.c b/drivers/usb/host/whci/asl.c index 958751ccea4..c2050785a81 100644 --- a/drivers/usb/host/whci/asl.c +++ b/drivers/usb/host/whci/asl.c | |||
@@ -122,7 +122,8 @@ static uint32_t process_qset(struct whc *whc, struct whc_qset *qset) | |||
122 | process_inactive_qtd(whc, qset, td); | 122 | process_inactive_qtd(whc, qset, td); |
123 | } | 123 | } |
124 | 124 | ||
125 | update |= qset_add_qtds(whc, qset); | 125 | if (!qset->remove) |
126 | update |= qset_add_qtds(whc, qset); | ||
126 | 127 | ||
127 | done: | 128 | done: |
128 | /* | 129 | /* |
@@ -254,23 +255,29 @@ int asl_urb_enqueue(struct whc *whc, struct urb *urb, gfp_t mem_flags) | |||
254 | 255 | ||
255 | spin_lock_irqsave(&whc->lock, flags); | 256 | spin_lock_irqsave(&whc->lock, flags); |
256 | 257 | ||
258 | err = usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb); | ||
259 | if (err < 0) { | ||
260 | spin_unlock_irqrestore(&whc->lock, flags); | ||
261 | return err; | ||
262 | } | ||
263 | |||
257 | qset = get_qset(whc, urb, GFP_ATOMIC); | 264 | qset = get_qset(whc, urb, GFP_ATOMIC); |
258 | if (qset == NULL) | 265 | if (qset == NULL) |
259 | err = -ENOMEM; | 266 | err = -ENOMEM; |
260 | else | 267 | else |
261 | err = qset_add_urb(whc, qset, urb, GFP_ATOMIC); | 268 | err = qset_add_urb(whc, qset, urb, GFP_ATOMIC); |
262 | if (!err) { | 269 | if (!err) { |
263 | usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb); | ||
264 | if (!qset->in_sw_list) | 270 | if (!qset->in_sw_list) |
265 | asl_qset_insert_begin(whc, qset); | 271 | asl_qset_insert_begin(whc, qset); |
266 | } | 272 | } else |
273 | usb_hcd_unlink_urb_from_ep(&whc->wusbhc.usb_hcd, urb); | ||
267 | 274 | ||
268 | spin_unlock_irqrestore(&whc->lock, flags); | 275 | spin_unlock_irqrestore(&whc->lock, flags); |
269 | 276 | ||
270 | if (!err) | 277 | if (!err) |
271 | queue_work(whc->workqueue, &whc->async_work); | 278 | queue_work(whc->workqueue, &whc->async_work); |
272 | 279 | ||
273 | return 0; | 280 | return err; |
274 | } | 281 | } |
275 | 282 | ||
276 | /** | 283 | /** |
diff --git a/drivers/usb/host/whci/hcd.c b/drivers/usb/host/whci/hcd.c index 1569afd6245..e019a5058ab 100644 --- a/drivers/usb/host/whci/hcd.c +++ b/drivers/usb/host/whci/hcd.c | |||
@@ -186,6 +186,28 @@ static void whc_endpoint_disable(struct usb_hcd *usb_hcd, | |||
186 | } | 186 | } |
187 | } | 187 | } |
188 | 188 | ||
189 | static void whc_endpoint_reset(struct usb_hcd *usb_hcd, | ||
190 | struct usb_host_endpoint *ep) | ||
191 | { | ||
192 | struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd); | ||
193 | struct whc *whc = wusbhc_to_whc(wusbhc); | ||
194 | struct whc_qset *qset; | ||
195 | |||
196 | qset = ep->hcpriv; | ||
197 | if (qset) { | ||
198 | qset->remove = 1; | ||
199 | |||
200 | if (usb_endpoint_xfer_bulk(&ep->desc) | ||
201 | || usb_endpoint_xfer_control(&ep->desc)) | ||
202 | queue_work(whc->workqueue, &whc->async_work); | ||
203 | else | ||
204 | queue_work(whc->workqueue, &whc->periodic_work); | ||
205 | |||
206 | qset_reset(whc, qset); | ||
207 | } | ||
208 | } | ||
209 | |||
210 | |||
189 | static struct hc_driver whc_hc_driver = { | 211 | static struct hc_driver whc_hc_driver = { |
190 | .description = "whci-hcd", | 212 | .description = "whci-hcd", |
191 | .product_desc = "Wireless host controller", | 213 | .product_desc = "Wireless host controller", |
@@ -200,6 +222,7 @@ static struct hc_driver whc_hc_driver = { | |||
200 | .urb_enqueue = whc_urb_enqueue, | 222 | .urb_enqueue = whc_urb_enqueue, |
201 | .urb_dequeue = whc_urb_dequeue, | 223 | .urb_dequeue = whc_urb_dequeue, |
202 | .endpoint_disable = whc_endpoint_disable, | 224 | .endpoint_disable = whc_endpoint_disable, |
225 | .endpoint_reset = whc_endpoint_reset, | ||
203 | 226 | ||
204 | .hub_status_data = wusbhc_rh_status_data, | 227 | .hub_status_data = wusbhc_rh_status_data, |
205 | .hub_control = wusbhc_rh_control, | 228 | .hub_control = wusbhc_rh_control, |
diff --git a/drivers/usb/host/whci/pzl.c b/drivers/usb/host/whci/pzl.c index df8b85f0709..ff4ef9e910d 100644 --- a/drivers/usb/host/whci/pzl.c +++ b/drivers/usb/host/whci/pzl.c | |||
@@ -128,7 +128,8 @@ static enum whc_update pzl_process_qset(struct whc *whc, struct whc_qset *qset) | |||
128 | process_inactive_qtd(whc, qset, td); | 128 | process_inactive_qtd(whc, qset, td); |
129 | } | 129 | } |
130 | 130 | ||
131 | update |= qset_add_qtds(whc, qset); | 131 | if (!qset->remove) |
132 | update |= qset_add_qtds(whc, qset); | ||
132 | 133 | ||
133 | done: | 134 | done: |
134 | /* | 135 | /* |
@@ -282,23 +283,29 @@ int pzl_urb_enqueue(struct whc *whc, struct urb *urb, gfp_t mem_flags) | |||
282 | 283 | ||
283 | spin_lock_irqsave(&whc->lock, flags); | 284 | spin_lock_irqsave(&whc->lock, flags); |
284 | 285 | ||
286 | err = usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb); | ||
287 | if (err < 0) { | ||
288 | spin_unlock_irqrestore(&whc->lock, flags); | ||
289 | return err; | ||
290 | } | ||
291 | |||
285 | qset = get_qset(whc, urb, GFP_ATOMIC); | 292 | qset = get_qset(whc, urb, GFP_ATOMIC); |
286 | if (qset == NULL) | 293 | if (qset == NULL) |
287 | err = -ENOMEM; | 294 | err = -ENOMEM; |
288 | else | 295 | else |
289 | err = qset_add_urb(whc, qset, urb, GFP_ATOMIC); | 296 | err = qset_add_urb(whc, qset, urb, GFP_ATOMIC); |
290 | if (!err) { | 297 | if (!err) { |
291 | usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb); | ||
292 | if (!qset->in_sw_list) | 298 | if (!qset->in_sw_list) |
293 | qset_insert_in_sw_list(whc, qset); | 299 | qset_insert_in_sw_list(whc, qset); |
294 | } | 300 | } else |
301 | usb_hcd_unlink_urb_from_ep(&whc->wusbhc.usb_hcd, urb); | ||
295 | 302 | ||
296 | spin_unlock_irqrestore(&whc->lock, flags); | 303 | spin_unlock_irqrestore(&whc->lock, flags); |
297 | 304 | ||
298 | if (!err) | 305 | if (!err) |
299 | queue_work(whc->workqueue, &whc->periodic_work); | 306 | queue_work(whc->workqueue, &whc->periodic_work); |
300 | 307 | ||
301 | return 0; | 308 | return err; |
302 | } | 309 | } |
303 | 310 | ||
304 | /** | 311 | /** |
@@ -353,7 +360,6 @@ void pzl_qset_delete(struct whc *whc, struct whc_qset *qset) | |||
353 | qset_delete(whc, qset); | 360 | qset_delete(whc, qset); |
354 | } | 361 | } |
355 | 362 | ||
356 | |||
357 | /** | 363 | /** |
358 | * pzl_init - initialize the periodic zone list | 364 | * pzl_init - initialize the periodic zone list |
359 | * @whc: the WHCI host controller | 365 | * @whc: the WHCI host controller |
diff --git a/drivers/usb/host/whci/qset.c b/drivers/usb/host/whci/qset.c index 7be74314ee1..640b38fbd05 100644 --- a/drivers/usb/host/whci/qset.c +++ b/drivers/usb/host/whci/qset.c | |||
@@ -89,11 +89,16 @@ static void qset_fill_qh(struct whc_qset *qset, struct urb *urb) | |||
89 | QH_INFO3_TX_RATE_53_3 | 89 | QH_INFO3_TX_RATE_53_3 |
90 | | QH_INFO3_TX_PWR(0) /* 0 == max power */ | 90 | | QH_INFO3_TX_PWR(0) /* 0 == max power */ |
91 | ); | 91 | ); |
92 | |||
93 | qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1); | ||
92 | } | 94 | } |
93 | 95 | ||
94 | /** | 96 | /** |
95 | * qset_clear - clear fields in a qset so it may be reinserted into a | 97 | * qset_clear - clear fields in a qset so it may be reinserted into a |
96 | * schedule | 98 | * schedule. |
99 | * | ||
100 | * The sequence number and current window are not cleared (see | ||
101 | * qset_reset()). | ||
97 | */ | 102 | */ |
98 | void qset_clear(struct whc *whc, struct whc_qset *qset) | 103 | void qset_clear(struct whc *whc, struct whc_qset *qset) |
99 | { | 104 | { |
@@ -101,9 +106,8 @@ void qset_clear(struct whc *whc, struct whc_qset *qset) | |||
101 | qset->remove = 0; | 106 | qset->remove = 0; |
102 | 107 | ||
103 | qset->qh.link = cpu_to_le32(QH_LINK_NTDS(8) | QH_LINK_T); | 108 | qset->qh.link = cpu_to_le32(QH_LINK_NTDS(8) | QH_LINK_T); |
104 | qset->qh.status = cpu_to_le16(QH_STATUS_ICUR(qset->td_start)); | 109 | qset->qh.status = qset->qh.status & QH_STATUS_SEQ_MASK; |
105 | qset->qh.err_count = 0; | 110 | qset->qh.err_count = 0; |
106 | qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1); | ||
107 | qset->qh.scratch[0] = 0; | 111 | qset->qh.scratch[0] = 0; |
108 | qset->qh.scratch[1] = 0; | 112 | qset->qh.scratch[1] = 0; |
109 | qset->qh.scratch[2] = 0; | 113 | qset->qh.scratch[2] = 0; |
@@ -114,6 +118,20 @@ void qset_clear(struct whc *whc, struct whc_qset *qset) | |||
114 | } | 118 | } |
115 | 119 | ||
116 | /** | 120 | /** |
121 | * qset_reset - reset endpoint state in a qset. | ||
122 | * | ||
123 | * Clears the sequence number and current window. This qset must not | ||
124 | * be in the ASL or PZL. | ||
125 | */ | ||
126 | void qset_reset(struct whc *whc, struct whc_qset *qset) | ||
127 | { | ||
128 | wait_for_completion(&qset->remove_complete); | ||
129 | |||
130 | qset->qh.status &= ~QH_STATUS_SEQ_MASK; | ||
131 | qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1); | ||
132 | } | ||
133 | |||
134 | /** | ||
117 | * get_qset - get the qset for an async endpoint | 135 | * get_qset - get the qset for an async endpoint |
118 | * | 136 | * |
119 | * A new qset is created if one does not already exist. | 137 | * A new qset is created if one does not already exist. |
diff --git a/drivers/usb/host/whci/whcd.h b/drivers/usb/host/whci/whcd.h index d3543a181dc..24e94d983c5 100644 --- a/drivers/usb/host/whci/whcd.h +++ b/drivers/usb/host/whci/whcd.h | |||
@@ -184,6 +184,7 @@ void qset_free(struct whc *whc, struct whc_qset *qset); | |||
184 | struct whc_qset *get_qset(struct whc *whc, struct urb *urb, gfp_t mem_flags); | 184 | struct whc_qset *get_qset(struct whc *whc, struct urb *urb, gfp_t mem_flags); |
185 | void qset_delete(struct whc *whc, struct whc_qset *qset); | 185 | void qset_delete(struct whc *whc, struct whc_qset *qset); |
186 | void qset_clear(struct whc *whc, struct whc_qset *qset); | 186 | void qset_clear(struct whc *whc, struct whc_qset *qset); |
187 | void qset_reset(struct whc *whc, struct whc_qset *qset); | ||
187 | int qset_add_urb(struct whc *whc, struct whc_qset *qset, struct urb *urb, | 188 | int qset_add_urb(struct whc *whc, struct whc_qset *qset, struct urb *urb, |
188 | gfp_t mem_flags); | 189 | gfp_t mem_flags); |
189 | void qset_free_std(struct whc *whc, struct whc_std *std); | 190 | void qset_free_std(struct whc *whc, struct whc_std *std); |
diff --git a/drivers/usb/host/whci/whci-hc.h b/drivers/usb/host/whci/whci-hc.h index 51df7e313b3..794dba0d0f0 100644 --- a/drivers/usb/host/whci/whci-hc.h +++ b/drivers/usb/host/whci/whci-hc.h | |||
@@ -185,6 +185,7 @@ struct whc_qhead { | |||
185 | #define QH_STATUS_FLOW_CTRL (1 << 15) | 185 | #define QH_STATUS_FLOW_CTRL (1 << 15) |
186 | #define QH_STATUS_ICUR(i) ((i) << 5) | 186 | #define QH_STATUS_ICUR(i) ((i) << 5) |
187 | #define QH_STATUS_TO_ICUR(s) (((s) >> 5) & 0x7) | 187 | #define QH_STATUS_TO_ICUR(s) (((s) >> 5) & 0x7) |
188 | #define QH_STATUS_SEQ_MASK 0x1f | ||
188 | 189 | ||
189 | /** | 190 | /** |
190 | * usb_pipe_to_qh_type - USB core pipe type to QH transfer type | 191 | * usb_pipe_to_qh_type - USB core pipe type to QH transfer type |
diff --git a/drivers/usb/musb/cppi_dma.c b/drivers/usb/musb/cppi_dma.c index 569ef0fed0f..1976e9b4180 100644 --- a/drivers/usb/musb/cppi_dma.c +++ b/drivers/usb/musb/cppi_dma.c | |||
@@ -579,6 +579,7 @@ cppi_next_tx_segment(struct musb *musb, struct cppi_channel *tx) | |||
579 | * trigger the "send a ZLP?" confusion. | 579 | * trigger the "send a ZLP?" confusion. |
580 | */ | 580 | */ |
581 | rndis = (maxpacket & 0x3f) == 0 | 581 | rndis = (maxpacket & 0x3f) == 0 |
582 | && length > maxpacket | ||
582 | && length < 0xffff | 583 | && length < 0xffff |
583 | && (length % maxpacket) != 0; | 584 | && (length % maxpacket) != 0; |
584 | 585 | ||
@@ -1228,27 +1229,7 @@ void cppi_completion(struct musb *musb, u32 rx, u32 tx) | |||
1228 | 1229 | ||
1229 | hw_ep = tx_ch->hw_ep; | 1230 | hw_ep = tx_ch->hw_ep; |
1230 | 1231 | ||
1231 | /* Peripheral role never repurposes the | 1232 | musb_dma_completion(musb, index + 1, 1); |
1232 | * endpoint, so immediate completion is | ||
1233 | * safe. Host role waits for the fifo | ||
1234 | * to empty (TXPKTRDY irq) before going | ||
1235 | * to the next queued bulk transfer. | ||
1236 | */ | ||
1237 | if (is_host_active(cppi->musb)) { | ||
1238 | #if 0 | ||
1239 | /* WORKAROUND because we may | ||
1240 | * not always get TXKPTRDY ... | ||
1241 | */ | ||
1242 | int csr; | ||
1243 | |||
1244 | csr = musb_readw(hw_ep->regs, | ||
1245 | MUSB_TXCSR); | ||
1246 | if (csr & MUSB_TXCSR_TXPKTRDY) | ||
1247 | #endif | ||
1248 | completed = false; | ||
1249 | } | ||
1250 | if (completed) | ||
1251 | musb_dma_completion(musb, index + 1, 1); | ||
1252 | 1233 | ||
1253 | } else { | 1234 | } else { |
1254 | /* Bigger transfer than we could fit in | 1235 | /* Bigger transfer than we could fit in |
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 338cd1611ab..4000cf6d1e8 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
@@ -2170,32 +2170,28 @@ static int musb_suspend(struct platform_device *pdev, pm_message_t message) | |||
2170 | return 0; | 2170 | return 0; |
2171 | } | 2171 | } |
2172 | 2172 | ||
2173 | static int musb_resume(struct platform_device *pdev) | 2173 | static int musb_resume_early(struct platform_device *pdev) |
2174 | { | 2174 | { |
2175 | unsigned long flags; | ||
2176 | struct musb *musb = dev_to_musb(&pdev->dev); | 2175 | struct musb *musb = dev_to_musb(&pdev->dev); |
2177 | 2176 | ||
2178 | if (!musb->clock) | 2177 | if (!musb->clock) |
2179 | return 0; | 2178 | return 0; |
2180 | 2179 | ||
2181 | spin_lock_irqsave(&musb->lock, flags); | ||
2182 | |||
2183 | if (musb->set_clock) | 2180 | if (musb->set_clock) |
2184 | musb->set_clock(musb->clock, 1); | 2181 | musb->set_clock(musb->clock, 1); |
2185 | else | 2182 | else |
2186 | clk_enable(musb->clock); | 2183 | clk_enable(musb->clock); |
2187 | 2184 | ||
2188 | /* for static cmos like DaVinci, register values were preserved | 2185 | /* for static cmos like DaVinci, register values were preserved |
2189 | * unless for some reason the whole soc powered down and we're | 2186 | * unless for some reason the whole soc powered down or the USB |
2190 | * not treating that as a whole-system restart (e.g. swsusp) | 2187 | * module got reset through the PSC (vs just being disabled). |
2191 | */ | 2188 | */ |
2192 | spin_unlock_irqrestore(&musb->lock, flags); | ||
2193 | return 0; | 2189 | return 0; |
2194 | } | 2190 | } |
2195 | 2191 | ||
2196 | #else | 2192 | #else |
2197 | #define musb_suspend NULL | 2193 | #define musb_suspend NULL |
2198 | #define musb_resume NULL | 2194 | #define musb_resume_early NULL |
2199 | #endif | 2195 | #endif |
2200 | 2196 | ||
2201 | static struct platform_driver musb_driver = { | 2197 | static struct platform_driver musb_driver = { |
@@ -2207,7 +2203,7 @@ static struct platform_driver musb_driver = { | |||
2207 | .remove = __devexit_p(musb_remove), | 2203 | .remove = __devexit_p(musb_remove), |
2208 | .shutdown = musb_shutdown, | 2204 | .shutdown = musb_shutdown, |
2209 | .suspend = musb_suspend, | 2205 | .suspend = musb_suspend, |
2210 | .resume = musb_resume, | 2206 | .resume_early = musb_resume_early, |
2211 | }; | 2207 | }; |
2212 | 2208 | ||
2213 | /*-------------------------------------------------------------------------*/ | 2209 | /*-------------------------------------------------------------------------*/ |
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index c7ebd0867fc..f79440cdfe7 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c | |||
@@ -165,9 +165,15 @@ static void nuke(struct musb_ep *ep, const int status) | |||
165 | if (is_dma_capable() && ep->dma) { | 165 | if (is_dma_capable() && ep->dma) { |
166 | struct dma_controller *c = ep->musb->dma_controller; | 166 | struct dma_controller *c = ep->musb->dma_controller; |
167 | int value; | 167 | int value; |
168 | |||
168 | if (ep->is_in) { | 169 | if (ep->is_in) { |
170 | /* | ||
171 | * The programming guide says that we must not clear | ||
172 | * the DMAMODE bit before DMAENAB, so we only | ||
173 | * clear it in the second write... | ||
174 | */ | ||
169 | musb_writew(epio, MUSB_TXCSR, | 175 | musb_writew(epio, MUSB_TXCSR, |
170 | 0 | MUSB_TXCSR_FLUSHFIFO); | 176 | MUSB_TXCSR_DMAMODE | MUSB_TXCSR_FLUSHFIFO); |
171 | musb_writew(epio, MUSB_TXCSR, | 177 | musb_writew(epio, MUSB_TXCSR, |
172 | 0 | MUSB_TXCSR_FLUSHFIFO); | 178 | 0 | MUSB_TXCSR_FLUSHFIFO); |
173 | } else { | 179 | } else { |
@@ -230,7 +236,7 @@ static inline int max_ep_writesize(struct musb *musb, struct musb_ep *ep) | |||
230 | | IN token(s) are recd from Host. | 236 | | IN token(s) are recd from Host. |
231 | | -> DMA interrupt on completion | 237 | | -> DMA interrupt on completion |
232 | | calls TxAvail. | 238 | | calls TxAvail. |
233 | | -> stop DMA, ~DmaEenab, | 239 | | -> stop DMA, ~DMAENAB, |
234 | | -> set TxPktRdy for last short pkt or zlp | 240 | | -> set TxPktRdy for last short pkt or zlp |
235 | | -> Complete Request | 241 | | -> Complete Request |
236 | | -> Continue next request (call txstate) | 242 | | -> Continue next request (call txstate) |
@@ -315,9 +321,17 @@ static void txstate(struct musb *musb, struct musb_request *req) | |||
315 | request->dma, request_size); | 321 | request->dma, request_size); |
316 | if (use_dma) { | 322 | if (use_dma) { |
317 | if (musb_ep->dma->desired_mode == 0) { | 323 | if (musb_ep->dma->desired_mode == 0) { |
318 | /* ASSERT: DMAENAB is clear */ | 324 | /* |
319 | csr &= ~(MUSB_TXCSR_AUTOSET | | 325 | * We must not clear the DMAMODE bit |
320 | MUSB_TXCSR_DMAMODE); | 326 | * before the DMAENAB bit -- and the |
327 | * latter doesn't always get cleared | ||
328 | * before we get here... | ||
329 | */ | ||
330 | csr &= ~(MUSB_TXCSR_AUTOSET | ||
331 | | MUSB_TXCSR_DMAENAB); | ||
332 | musb_writew(epio, MUSB_TXCSR, csr | ||
333 | | MUSB_TXCSR_P_WZC_BITS); | ||
334 | csr &= ~MUSB_TXCSR_DMAMODE; | ||
321 | csr |= (MUSB_TXCSR_DMAENAB | | 335 | csr |= (MUSB_TXCSR_DMAENAB | |
322 | MUSB_TXCSR_MODE); | 336 | MUSB_TXCSR_MODE); |
323 | /* against programming guide */ | 337 | /* against programming guide */ |
@@ -334,10 +348,7 @@ static void txstate(struct musb *musb, struct musb_request *req) | |||
334 | 348 | ||
335 | #elif defined(CONFIG_USB_TI_CPPI_DMA) | 349 | #elif defined(CONFIG_USB_TI_CPPI_DMA) |
336 | /* program endpoint CSR first, then setup DMA */ | 350 | /* program endpoint CSR first, then setup DMA */ |
337 | csr &= ~(MUSB_TXCSR_AUTOSET | 351 | csr &= ~(MUSB_TXCSR_P_UNDERRUN | MUSB_TXCSR_TXPKTRDY); |
338 | | MUSB_TXCSR_DMAMODE | ||
339 | | MUSB_TXCSR_P_UNDERRUN | ||
340 | | MUSB_TXCSR_TXPKTRDY); | ||
341 | csr |= MUSB_TXCSR_MODE | MUSB_TXCSR_DMAENAB; | 352 | csr |= MUSB_TXCSR_MODE | MUSB_TXCSR_DMAENAB; |
342 | musb_writew(epio, MUSB_TXCSR, | 353 | musb_writew(epio, MUSB_TXCSR, |
343 | (MUSB_TXCSR_P_WZC_BITS & ~MUSB_TXCSR_P_UNDERRUN) | 354 | (MUSB_TXCSR_P_WZC_BITS & ~MUSB_TXCSR_P_UNDERRUN) |
@@ -364,8 +375,8 @@ static void txstate(struct musb *musb, struct musb_request *req) | |||
364 | if (!use_dma) { | 375 | if (!use_dma) { |
365 | c->channel_release(musb_ep->dma); | 376 | c->channel_release(musb_ep->dma); |
366 | musb_ep->dma = NULL; | 377 | musb_ep->dma = NULL; |
367 | /* ASSERT: DMAENAB clear */ | 378 | csr &= ~MUSB_TXCSR_DMAENAB; |
368 | csr &= ~(MUSB_TXCSR_DMAMODE | MUSB_TXCSR_MODE); | 379 | musb_writew(epio, MUSB_TXCSR, csr); |
369 | /* invariant: prequest->buf is non-null */ | 380 | /* invariant: prequest->buf is non-null */ |
370 | } | 381 | } |
371 | #elif defined(CONFIG_USB_TUSB_OMAP_DMA) | 382 | #elif defined(CONFIG_USB_TUSB_OMAP_DMA) |
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index 499c431a6d6..db1b57415ec 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c | |||
@@ -4,6 +4,7 @@ | |||
4 | * Copyright 2005 Mentor Graphics Corporation | 4 | * Copyright 2005 Mentor Graphics Corporation |
5 | * Copyright (C) 2005-2006 by Texas Instruments | 5 | * Copyright (C) 2005-2006 by Texas Instruments |
6 | * Copyright (C) 2006-2007 Nokia Corporation | 6 | * Copyright (C) 2006-2007 Nokia Corporation |
7 | * Copyright (C) 2008-2009 MontaVista Software, Inc. <source@mvista.com> | ||
7 | * | 8 | * |
8 | * This program is free software; you can redistribute it and/or | 9 | * This program is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU General Public License | 10 | * modify it under the terms of the GNU General Public License |
@@ -96,8 +97,8 @@ | |||
96 | 97 | ||
97 | 98 | ||
98 | static void musb_ep_program(struct musb *musb, u8 epnum, | 99 | static void musb_ep_program(struct musb *musb, u8 epnum, |
99 | struct urb *urb, unsigned int nOut, | 100 | struct urb *urb, int is_out, |
100 | u8 *buf, u32 len); | 101 | u8 *buf, u32 offset, u32 len); |
101 | 102 | ||
102 | /* | 103 | /* |
103 | * Clear TX fifo. Needed to avoid BABBLE errors. | 104 | * Clear TX fifo. Needed to avoid BABBLE errors. |
@@ -125,6 +126,29 @@ static void musb_h_tx_flush_fifo(struct musb_hw_ep *ep) | |||
125 | } | 126 | } |
126 | } | 127 | } |
127 | 128 | ||
129 | static void musb_h_ep0_flush_fifo(struct musb_hw_ep *ep) | ||
130 | { | ||
131 | void __iomem *epio = ep->regs; | ||
132 | u16 csr; | ||
133 | int retries = 5; | ||
134 | |||
135 | /* scrub any data left in the fifo */ | ||
136 | do { | ||
137 | csr = musb_readw(epio, MUSB_TXCSR); | ||
138 | if (!(csr & (MUSB_CSR0_TXPKTRDY | MUSB_CSR0_RXPKTRDY))) | ||
139 | break; | ||
140 | musb_writew(epio, MUSB_TXCSR, MUSB_CSR0_FLUSHFIFO); | ||
141 | csr = musb_readw(epio, MUSB_TXCSR); | ||
142 | udelay(10); | ||
143 | } while (--retries); | ||
144 | |||
145 | WARN(!retries, "Could not flush host TX%d fifo: csr: %04x\n", | ||
146 | ep->epnum, csr); | ||
147 | |||
148 | /* and reset for the next transfer */ | ||
149 | musb_writew(epio, MUSB_TXCSR, 0); | ||
150 | } | ||
151 | |||
128 | /* | 152 | /* |
129 | * Start transmit. Caller is responsible for locking shared resources. | 153 | * Start transmit. Caller is responsible for locking shared resources. |
130 | * musb must be locked. | 154 | * musb must be locked. |
@@ -145,13 +169,15 @@ static inline void musb_h_tx_start(struct musb_hw_ep *ep) | |||
145 | 169 | ||
146 | } | 170 | } |
147 | 171 | ||
148 | static inline void cppi_host_txdma_start(struct musb_hw_ep *ep) | 172 | static inline void musb_h_tx_dma_start(struct musb_hw_ep *ep) |
149 | { | 173 | { |
150 | u16 txcsr; | 174 | u16 txcsr; |
151 | 175 | ||
152 | /* NOTE: no locks here; caller should lock and select EP */ | 176 | /* NOTE: no locks here; caller should lock and select EP */ |
153 | txcsr = musb_readw(ep->regs, MUSB_TXCSR); | 177 | txcsr = musb_readw(ep->regs, MUSB_TXCSR); |
154 | txcsr |= MUSB_TXCSR_DMAENAB | MUSB_TXCSR_H_WZC_BITS; | 178 | txcsr |= MUSB_TXCSR_DMAENAB | MUSB_TXCSR_H_WZC_BITS; |
179 | if (is_cppi_enabled()) | ||
180 | txcsr |= MUSB_TXCSR_DMAMODE; | ||
155 | musb_writew(ep->regs, MUSB_TXCSR, txcsr); | 181 | musb_writew(ep->regs, MUSB_TXCSR, txcsr); |
156 | } | 182 | } |
157 | 183 | ||
@@ -166,9 +192,10 @@ musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh) | |||
166 | { | 192 | { |
167 | u16 frame; | 193 | u16 frame; |
168 | u32 len; | 194 | u32 len; |
169 | void *buf; | ||
170 | void __iomem *mbase = musb->mregs; | 195 | void __iomem *mbase = musb->mregs; |
171 | struct urb *urb = next_urb(qh); | 196 | struct urb *urb = next_urb(qh); |
197 | void *buf = urb->transfer_buffer; | ||
198 | u32 offset = 0; | ||
172 | struct musb_hw_ep *hw_ep = qh->hw_ep; | 199 | struct musb_hw_ep *hw_ep = qh->hw_ep; |
173 | unsigned pipe = urb->pipe; | 200 | unsigned pipe = urb->pipe; |
174 | u8 address = usb_pipedevice(pipe); | 201 | u8 address = usb_pipedevice(pipe); |
@@ -191,7 +218,7 @@ musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh) | |||
191 | case USB_ENDPOINT_XFER_ISOC: | 218 | case USB_ENDPOINT_XFER_ISOC: |
192 | qh->iso_idx = 0; | 219 | qh->iso_idx = 0; |
193 | qh->frame = 0; | 220 | qh->frame = 0; |
194 | buf = urb->transfer_buffer + urb->iso_frame_desc[0].offset; | 221 | offset = urb->iso_frame_desc[0].offset; |
195 | len = urb->iso_frame_desc[0].length; | 222 | len = urb->iso_frame_desc[0].length; |
196 | break; | 223 | break; |
197 | default: /* bulk, interrupt */ | 224 | default: /* bulk, interrupt */ |
@@ -209,14 +236,14 @@ musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh) | |||
209 | case USB_ENDPOINT_XFER_ISOC: s = "-iso"; break; | 236 | case USB_ENDPOINT_XFER_ISOC: s = "-iso"; break; |
210 | default: s = "-intr"; break; | 237 | default: s = "-intr"; break; |
211 | }; s; }), | 238 | }; s; }), |
212 | epnum, buf, len); | 239 | epnum, buf + offset, len); |
213 | 240 | ||
214 | /* Configure endpoint */ | 241 | /* Configure endpoint */ |
215 | if (is_in || hw_ep->is_shared_fifo) | 242 | if (is_in || hw_ep->is_shared_fifo) |
216 | hw_ep->in_qh = qh; | 243 | hw_ep->in_qh = qh; |
217 | else | 244 | else |
218 | hw_ep->out_qh = qh; | 245 | hw_ep->out_qh = qh; |
219 | musb_ep_program(musb, epnum, urb, !is_in, buf, len); | 246 | musb_ep_program(musb, epnum, urb, !is_in, buf, offset, len); |
220 | 247 | ||
221 | /* transmit may have more work: start it when it is time */ | 248 | /* transmit may have more work: start it when it is time */ |
222 | if (is_in) | 249 | if (is_in) |
@@ -227,7 +254,6 @@ musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh) | |||
227 | case USB_ENDPOINT_XFER_ISOC: | 254 | case USB_ENDPOINT_XFER_ISOC: |
228 | case USB_ENDPOINT_XFER_INT: | 255 | case USB_ENDPOINT_XFER_INT: |
229 | DBG(3, "check whether there's still time for periodic Tx\n"); | 256 | DBG(3, "check whether there's still time for periodic Tx\n"); |
230 | qh->iso_idx = 0; | ||
231 | frame = musb_readw(mbase, MUSB_FRAME); | 257 | frame = musb_readw(mbase, MUSB_FRAME); |
232 | /* FIXME this doesn't implement that scheduling policy ... | 258 | /* FIXME this doesn't implement that scheduling policy ... |
233 | * or handle framecounter wrapping | 259 | * or handle framecounter wrapping |
@@ -256,7 +282,7 @@ start: | |||
256 | if (!hw_ep->tx_channel) | 282 | if (!hw_ep->tx_channel) |
257 | musb_h_tx_start(hw_ep); | 283 | musb_h_tx_start(hw_ep); |
258 | else if (is_cppi_enabled() || tusb_dma_omap()) | 284 | else if (is_cppi_enabled() || tusb_dma_omap()) |
259 | cppi_host_txdma_start(hw_ep); | 285 | musb_h_tx_dma_start(hw_ep); |
260 | } | 286 | } |
261 | } | 287 | } |
262 | 288 | ||
@@ -567,10 +593,17 @@ musb_rx_reinit(struct musb *musb, struct musb_qh *qh, struct musb_hw_ep *ep) | |||
567 | csr = musb_readw(ep->regs, MUSB_TXCSR); | 593 | csr = musb_readw(ep->regs, MUSB_TXCSR); |
568 | if (csr & MUSB_TXCSR_MODE) { | 594 | if (csr & MUSB_TXCSR_MODE) { |
569 | musb_h_tx_flush_fifo(ep); | 595 | musb_h_tx_flush_fifo(ep); |
596 | csr = musb_readw(ep->regs, MUSB_TXCSR); | ||
570 | musb_writew(ep->regs, MUSB_TXCSR, | 597 | musb_writew(ep->regs, MUSB_TXCSR, |
571 | MUSB_TXCSR_FRCDATATOG); | 598 | csr | MUSB_TXCSR_FRCDATATOG); |
572 | } | 599 | } |
573 | /* clear mode (and everything else) to enable Rx */ | 600 | |
601 | /* | ||
602 | * Clear the MODE bit (and everything else) to enable Rx. | ||
603 | * NOTE: we mustn't clear the DMAMODE bit before DMAENAB. | ||
604 | */ | ||
605 | if (csr & MUSB_TXCSR_DMAMODE) | ||
606 | musb_writew(ep->regs, MUSB_TXCSR, MUSB_TXCSR_DMAMODE); | ||
574 | musb_writew(ep->regs, MUSB_TXCSR, 0); | 607 | musb_writew(ep->regs, MUSB_TXCSR, 0); |
575 | 608 | ||
576 | /* scrub all previous state, clearing toggle */ | 609 | /* scrub all previous state, clearing toggle */ |
@@ -601,14 +634,68 @@ musb_rx_reinit(struct musb *musb, struct musb_qh *qh, struct musb_hw_ep *ep) | |||
601 | ep->rx_reinit = 0; | 634 | ep->rx_reinit = 0; |
602 | } | 635 | } |
603 | 636 | ||
637 | static bool musb_tx_dma_program(struct dma_controller *dma, | ||
638 | struct musb_hw_ep *hw_ep, struct musb_qh *qh, | ||
639 | struct urb *urb, u32 offset, u32 length) | ||
640 | { | ||
641 | struct dma_channel *channel = hw_ep->tx_channel; | ||
642 | void __iomem *epio = hw_ep->regs; | ||
643 | u16 pkt_size = qh->maxpacket; | ||
644 | u16 csr; | ||
645 | u8 mode; | ||
646 | |||
647 | #ifdef CONFIG_USB_INVENTRA_DMA | ||
648 | if (length > channel->max_len) | ||
649 | length = channel->max_len; | ||
650 | |||
651 | csr = musb_readw(epio, MUSB_TXCSR); | ||
652 | if (length > pkt_size) { | ||
653 | mode = 1; | ||
654 | csr |= MUSB_TXCSR_AUTOSET | ||
655 | | MUSB_TXCSR_DMAMODE | ||
656 | | MUSB_TXCSR_DMAENAB; | ||
657 | } else { | ||
658 | mode = 0; | ||
659 | csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAMODE); | ||
660 | csr |= MUSB_TXCSR_DMAENAB; /* against programmer's guide */ | ||
661 | } | ||
662 | channel->desired_mode = mode; | ||
663 | musb_writew(epio, MUSB_TXCSR, csr); | ||
664 | #else | ||
665 | if (!is_cppi_enabled() && !tusb_dma_omap()) | ||
666 | return false; | ||
667 | |||
668 | channel->actual_len = 0; | ||
669 | |||
670 | /* | ||
671 | * TX uses "RNDIS" mode automatically but needs help | ||
672 | * to identify the zero-length-final-packet case. | ||
673 | */ | ||
674 | mode = (urb->transfer_flags & URB_ZERO_PACKET) ? 1 : 0; | ||
675 | #endif | ||
676 | |||
677 | qh->segsize = length; | ||
678 | |||
679 | if (!dma->channel_program(channel, pkt_size, mode, | ||
680 | urb->transfer_dma + offset, length)) { | ||
681 | dma->channel_release(channel); | ||
682 | hw_ep->tx_channel = NULL; | ||
683 | |||
684 | csr = musb_readw(epio, MUSB_TXCSR); | ||
685 | csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAENAB); | ||
686 | musb_writew(epio, MUSB_TXCSR, csr | MUSB_TXCSR_H_WZC_BITS); | ||
687 | return false; | ||
688 | } | ||
689 | return true; | ||
690 | } | ||
604 | 691 | ||
605 | /* | 692 | /* |
606 | * Program an HDRC endpoint as per the given URB | 693 | * Program an HDRC endpoint as per the given URB |
607 | * Context: irqs blocked, controller lock held | 694 | * Context: irqs blocked, controller lock held |
608 | */ | 695 | */ |
609 | static void musb_ep_program(struct musb *musb, u8 epnum, | 696 | static void musb_ep_program(struct musb *musb, u8 epnum, |
610 | struct urb *urb, unsigned int is_out, | 697 | struct urb *urb, int is_out, |
611 | u8 *buf, u32 len) | 698 | u8 *buf, u32 offset, u32 len) |
612 | { | 699 | { |
613 | struct dma_controller *dma_controller; | 700 | struct dma_controller *dma_controller; |
614 | struct dma_channel *dma_channel; | 701 | struct dma_channel *dma_channel; |
@@ -667,12 +754,17 @@ static void musb_ep_program(struct musb *musb, u8 epnum, | |||
667 | 754 | ||
668 | /* general endpoint setup */ | 755 | /* general endpoint setup */ |
669 | if (epnum) { | 756 | if (epnum) { |
670 | /* ASSERT: TXCSR_DMAENAB was already cleared */ | ||
671 | |||
672 | /* flush all old state, set default */ | 757 | /* flush all old state, set default */ |
673 | musb_h_tx_flush_fifo(hw_ep); | 758 | musb_h_tx_flush_fifo(hw_ep); |
759 | |||
760 | /* | ||
761 | * We must not clear the DMAMODE bit before or in | ||
762 | * the same cycle with the DMAENAB bit, so we clear | ||
763 | * the latter first... | ||
764 | */ | ||
674 | csr &= ~(MUSB_TXCSR_H_NAKTIMEOUT | 765 | csr &= ~(MUSB_TXCSR_H_NAKTIMEOUT |
675 | | MUSB_TXCSR_DMAMODE | 766 | | MUSB_TXCSR_AUTOSET |
767 | | MUSB_TXCSR_DMAENAB | ||
676 | | MUSB_TXCSR_FRCDATATOG | 768 | | MUSB_TXCSR_FRCDATATOG |
677 | | MUSB_TXCSR_H_RXSTALL | 769 | | MUSB_TXCSR_H_RXSTALL |
678 | | MUSB_TXCSR_H_ERROR | 770 | | MUSB_TXCSR_H_ERROR |
@@ -680,24 +772,20 @@ static void musb_ep_program(struct musb *musb, u8 epnum, | |||
680 | ); | 772 | ); |
681 | csr |= MUSB_TXCSR_MODE; | 773 | csr |= MUSB_TXCSR_MODE; |
682 | 774 | ||
683 | if (usb_gettoggle(urb->dev, | 775 | if (usb_gettoggle(urb->dev, qh->epnum, 1)) |
684 | qh->epnum, 1)) | ||
685 | csr |= MUSB_TXCSR_H_WR_DATATOGGLE | 776 | csr |= MUSB_TXCSR_H_WR_DATATOGGLE |
686 | | MUSB_TXCSR_H_DATATOGGLE; | 777 | | MUSB_TXCSR_H_DATATOGGLE; |
687 | else | 778 | else |
688 | csr |= MUSB_TXCSR_CLRDATATOG; | 779 | csr |= MUSB_TXCSR_CLRDATATOG; |
689 | 780 | ||
690 | /* twice in case of double packet buffering */ | ||
691 | musb_writew(epio, MUSB_TXCSR, csr); | 781 | musb_writew(epio, MUSB_TXCSR, csr); |
692 | /* REVISIT may need to clear FLUSHFIFO ... */ | 782 | /* REVISIT may need to clear FLUSHFIFO ... */ |
783 | csr &= ~MUSB_TXCSR_DMAMODE; | ||
693 | musb_writew(epio, MUSB_TXCSR, csr); | 784 | musb_writew(epio, MUSB_TXCSR, csr); |
694 | csr = musb_readw(epio, MUSB_TXCSR); | 785 | csr = musb_readw(epio, MUSB_TXCSR); |
695 | } else { | 786 | } else { |
696 | /* endpoint 0: just flush */ | 787 | /* endpoint 0: just flush */ |
697 | musb_writew(epio, MUSB_CSR0, | 788 | musb_h_ep0_flush_fifo(hw_ep); |
698 | csr | MUSB_CSR0_FLUSHFIFO); | ||
699 | musb_writew(epio, MUSB_CSR0, | ||
700 | csr | MUSB_CSR0_FLUSHFIFO); | ||
701 | } | 789 | } |
702 | 790 | ||
703 | /* target addr and (for multipoint) hub addr/port */ | 791 | /* target addr and (for multipoint) hub addr/port */ |
@@ -734,113 +822,14 @@ static void musb_ep_program(struct musb *musb, u8 epnum, | |||
734 | else | 822 | else |
735 | load_count = min((u32) packet_sz, len); | 823 | load_count = min((u32) packet_sz, len); |
736 | 824 | ||
737 | #ifdef CONFIG_USB_INVENTRA_DMA | 825 | if (dma_channel && musb_tx_dma_program(dma_controller, |
738 | if (dma_channel) { | 826 | hw_ep, qh, urb, offset, len)) |
739 | 827 | load_count = 0; | |
740 | /* clear previous state */ | ||
741 | csr = musb_readw(epio, MUSB_TXCSR); | ||
742 | csr &= ~(MUSB_TXCSR_AUTOSET | ||
743 | | MUSB_TXCSR_DMAMODE | ||
744 | | MUSB_TXCSR_DMAENAB); | ||
745 | csr |= MUSB_TXCSR_MODE; | ||
746 | musb_writew(epio, MUSB_TXCSR, | ||
747 | csr | MUSB_TXCSR_MODE); | ||
748 | |||
749 | qh->segsize = min(len, dma_channel->max_len); | ||
750 | |||
751 | if (qh->segsize <= packet_sz) | ||
752 | dma_channel->desired_mode = 0; | ||
753 | else | ||
754 | dma_channel->desired_mode = 1; | ||
755 | |||
756 | |||
757 | if (dma_channel->desired_mode == 0) { | ||
758 | csr &= ~(MUSB_TXCSR_AUTOSET | ||
759 | | MUSB_TXCSR_DMAMODE); | ||
760 | csr |= (MUSB_TXCSR_DMAENAB); | ||
761 | /* against programming guide */ | ||
762 | } else | ||
763 | csr |= (MUSB_TXCSR_AUTOSET | ||
764 | | MUSB_TXCSR_DMAENAB | ||
765 | | MUSB_TXCSR_DMAMODE); | ||
766 | |||
767 | musb_writew(epio, MUSB_TXCSR, csr); | ||
768 | |||
769 | dma_ok = dma_controller->channel_program( | ||
770 | dma_channel, packet_sz, | ||
771 | dma_channel->desired_mode, | ||
772 | urb->transfer_dma, | ||
773 | qh->segsize); | ||
774 | if (dma_ok) { | ||
775 | load_count = 0; | ||
776 | } else { | ||
777 | dma_controller->channel_release(dma_channel); | ||
778 | if (is_out) | ||
779 | hw_ep->tx_channel = NULL; | ||
780 | else | ||
781 | hw_ep->rx_channel = NULL; | ||
782 | dma_channel = NULL; | ||
783 | } | ||
784 | } | ||
785 | #endif | ||
786 | |||
787 | /* candidate for DMA */ | ||
788 | if ((is_cppi_enabled() || tusb_dma_omap()) && dma_channel) { | ||
789 | |||
790 | /* program endpoint CSRs first, then setup DMA. | ||
791 | * assume CPPI setup succeeds. | ||
792 | * defer enabling dma. | ||
793 | */ | ||
794 | csr = musb_readw(epio, MUSB_TXCSR); | ||
795 | csr &= ~(MUSB_TXCSR_AUTOSET | ||
796 | | MUSB_TXCSR_DMAMODE | ||
797 | | MUSB_TXCSR_DMAENAB); | ||
798 | csr |= MUSB_TXCSR_MODE; | ||
799 | musb_writew(epio, MUSB_TXCSR, | ||
800 | csr | MUSB_TXCSR_MODE); | ||
801 | |||
802 | dma_channel->actual_len = 0L; | ||
803 | qh->segsize = len; | ||
804 | |||
805 | /* TX uses "rndis" mode automatically, but needs help | ||
806 | * to identify the zero-length-final-packet case. | ||
807 | */ | ||
808 | dma_ok = dma_controller->channel_program( | ||
809 | dma_channel, packet_sz, | ||
810 | (urb->transfer_flags | ||
811 | & URB_ZERO_PACKET) | ||
812 | == URB_ZERO_PACKET, | ||
813 | urb->transfer_dma, | ||
814 | qh->segsize); | ||
815 | if (dma_ok) { | ||
816 | load_count = 0; | ||
817 | } else { | ||
818 | dma_controller->channel_release(dma_channel); | ||
819 | hw_ep->tx_channel = NULL; | ||
820 | dma_channel = NULL; | ||
821 | |||
822 | /* REVISIT there's an error path here that | ||
823 | * needs handling: can't do dma, but | ||
824 | * there's no pio buffer address... | ||
825 | */ | ||
826 | } | ||
827 | } | ||
828 | 828 | ||
829 | if (load_count) { | 829 | if (load_count) { |
830 | /* ASSERT: TXCSR_DMAENAB was already cleared */ | ||
831 | |||
832 | /* PIO to load FIFO */ | 830 | /* PIO to load FIFO */ |
833 | qh->segsize = load_count; | 831 | qh->segsize = load_count; |
834 | musb_write_fifo(hw_ep, load_count, buf); | 832 | musb_write_fifo(hw_ep, load_count, buf); |
835 | csr = musb_readw(epio, MUSB_TXCSR); | ||
836 | csr &= ~(MUSB_TXCSR_DMAENAB | ||
837 | | MUSB_TXCSR_DMAMODE | ||
838 | | MUSB_TXCSR_AUTOSET); | ||
839 | /* write CSR */ | ||
840 | csr |= MUSB_TXCSR_MODE; | ||
841 | |||
842 | if (epnum) | ||
843 | musb_writew(epio, MUSB_TXCSR, csr); | ||
844 | } | 833 | } |
845 | 834 | ||
846 | /* re-enable interrupt */ | 835 | /* re-enable interrupt */ |
@@ -895,7 +884,7 @@ static void musb_ep_program(struct musb *musb, u8 epnum, | |||
895 | dma_channel, packet_sz, | 884 | dma_channel, packet_sz, |
896 | !(urb->transfer_flags | 885 | !(urb->transfer_flags |
897 | & URB_SHORT_NOT_OK), | 886 | & URB_SHORT_NOT_OK), |
898 | urb->transfer_dma, | 887 | urb->transfer_dma + offset, |
899 | qh->segsize); | 888 | qh->segsize); |
900 | if (!dma_ok) { | 889 | if (!dma_ok) { |
901 | dma_controller->channel_release( | 890 | dma_controller->channel_release( |
@@ -1063,11 +1052,7 @@ irqreturn_t musb_h_ep0_irq(struct musb *musb) | |||
1063 | csr &= ~MUSB_CSR0_H_NAKTIMEOUT; | 1052 | csr &= ~MUSB_CSR0_H_NAKTIMEOUT; |
1064 | musb_writew(epio, MUSB_CSR0, csr); | 1053 | musb_writew(epio, MUSB_CSR0, csr); |
1065 | } else { | 1054 | } else { |
1066 | csr |= MUSB_CSR0_FLUSHFIFO; | 1055 | musb_h_ep0_flush_fifo(hw_ep); |
1067 | musb_writew(epio, MUSB_CSR0, csr); | ||
1068 | musb_writew(epio, MUSB_CSR0, csr); | ||
1069 | csr &= ~MUSB_CSR0_H_NAKTIMEOUT; | ||
1070 | musb_writew(epio, MUSB_CSR0, csr); | ||
1071 | } | 1056 | } |
1072 | 1057 | ||
1073 | musb_writeb(epio, MUSB_NAKLIMIT0, 0); | 1058 | musb_writeb(epio, MUSB_NAKLIMIT0, 0); |
@@ -1081,10 +1066,7 @@ irqreturn_t musb_h_ep0_irq(struct musb *musb) | |||
1081 | * SHOULD NEVER HAPPEN! */ | 1066 | * SHOULD NEVER HAPPEN! */ |
1082 | ERR("no URB for end 0\n"); | 1067 | ERR("no URB for end 0\n"); |
1083 | 1068 | ||
1084 | musb_writew(epio, MUSB_CSR0, MUSB_CSR0_FLUSHFIFO); | 1069 | musb_h_ep0_flush_fifo(hw_ep); |
1085 | musb_writew(epio, MUSB_CSR0, MUSB_CSR0_FLUSHFIFO); | ||
1086 | musb_writew(epio, MUSB_CSR0, 0); | ||
1087 | |||
1088 | goto done; | 1070 | goto done; |
1089 | } | 1071 | } |
1090 | 1072 | ||
@@ -1145,8 +1127,8 @@ void musb_host_tx(struct musb *musb, u8 epnum) | |||
1145 | int pipe; | 1127 | int pipe; |
1146 | bool done = false; | 1128 | bool done = false; |
1147 | u16 tx_csr; | 1129 | u16 tx_csr; |
1148 | size_t wLength = 0; | 1130 | size_t length = 0; |
1149 | u8 *buf = NULL; | 1131 | size_t offset = 0; |
1150 | struct urb *urb; | 1132 | struct urb *urb; |
1151 | struct musb_hw_ep *hw_ep = musb->endpoints + epnum; | 1133 | struct musb_hw_ep *hw_ep = musb->endpoints + epnum; |
1152 | void __iomem *epio = hw_ep->regs; | 1134 | void __iomem *epio = hw_ep->regs; |
@@ -1164,7 +1146,7 @@ void musb_host_tx(struct musb *musb, u8 epnum) | |||
1164 | /* with CPPI, DMA sometimes triggers "extra" irqs */ | 1146 | /* with CPPI, DMA sometimes triggers "extra" irqs */ |
1165 | if (!urb) { | 1147 | if (!urb) { |
1166 | DBG(4, "extra TX%d ready, csr %04x\n", epnum, tx_csr); | 1148 | DBG(4, "extra TX%d ready, csr %04x\n", epnum, tx_csr); |
1167 | goto finish; | 1149 | return; |
1168 | } | 1150 | } |
1169 | 1151 | ||
1170 | pipe = urb->pipe; | 1152 | pipe = urb->pipe; |
@@ -1201,7 +1183,7 @@ void musb_host_tx(struct musb *musb, u8 epnum) | |||
1201 | musb_writew(epio, MUSB_TXCSR, | 1183 | musb_writew(epio, MUSB_TXCSR, |
1202 | MUSB_TXCSR_H_WZC_BITS | 1184 | MUSB_TXCSR_H_WZC_BITS |
1203 | | MUSB_TXCSR_TXPKTRDY); | 1185 | | MUSB_TXCSR_TXPKTRDY); |
1204 | goto finish; | 1186 | return; |
1205 | } | 1187 | } |
1206 | 1188 | ||
1207 | if (status) { | 1189 | if (status) { |
@@ -1233,29 +1215,89 @@ void musb_host_tx(struct musb *musb, u8 epnum) | |||
1233 | /* second cppi case */ | 1215 | /* second cppi case */ |
1234 | if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) { | 1216 | if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) { |
1235 | DBG(4, "extra TX%d ready, csr %04x\n", epnum, tx_csr); | 1217 | DBG(4, "extra TX%d ready, csr %04x\n", epnum, tx_csr); |
1236 | goto finish; | 1218 | return; |
1219 | } | ||
1220 | |||
1221 | if (is_dma_capable() && dma && !status) { | ||
1222 | /* | ||
1223 | * DMA has completed. But if we're using DMA mode 1 (multi | ||
1224 | * packet DMA), we need a terminal TXPKTRDY interrupt before | ||
1225 | * we can consider this transfer completed, lest we trash | ||
1226 | * its last packet when writing the next URB's data. So we | ||
1227 | * switch back to mode 0 to get that interrupt; we'll come | ||
1228 | * back here once it happens. | ||
1229 | */ | ||
1230 | if (tx_csr & MUSB_TXCSR_DMAMODE) { | ||
1231 | /* | ||
1232 | * We shouldn't clear DMAMODE with DMAENAB set; so | ||
1233 | * clear them in a safe order. That should be OK | ||
1234 | * once TXPKTRDY has been set (and I've never seen | ||
1235 | * it being 0 at this moment -- DMA interrupt latency | ||
1236 | * is significant) but if it hasn't been then we have | ||
1237 | * no choice but to stop being polite and ignore the | ||
1238 | * programmer's guide... :-) | ||
1239 | * | ||
1240 | * Note that we must write TXCSR with TXPKTRDY cleared | ||
1241 | * in order not to re-trigger the packet send (this bit | ||
1242 | * can't be cleared by CPU), and there's another caveat: | ||
1243 | * TXPKTRDY may be set shortly and then cleared in the | ||
1244 | * double-buffered FIFO mode, so we do an extra TXCSR | ||
1245 | * read for debouncing... | ||
1246 | */ | ||
1247 | tx_csr &= musb_readw(epio, MUSB_TXCSR); | ||
1248 | if (tx_csr & MUSB_TXCSR_TXPKTRDY) { | ||
1249 | tx_csr &= ~(MUSB_TXCSR_DMAENAB | | ||
1250 | MUSB_TXCSR_TXPKTRDY); | ||
1251 | musb_writew(epio, MUSB_TXCSR, | ||
1252 | tx_csr | MUSB_TXCSR_H_WZC_BITS); | ||
1253 | } | ||
1254 | tx_csr &= ~(MUSB_TXCSR_DMAMODE | | ||
1255 | MUSB_TXCSR_TXPKTRDY); | ||
1256 | musb_writew(epio, MUSB_TXCSR, | ||
1257 | tx_csr | MUSB_TXCSR_H_WZC_BITS); | ||
1258 | |||
1259 | /* | ||
1260 | * There is no guarantee that we'll get an interrupt | ||
1261 | * after clearing DMAMODE as we might have done this | ||
1262 | * too late (after TXPKTRDY was cleared by controller). | ||
1263 | * Re-read TXCSR as we have spoiled its previous value. | ||
1264 | */ | ||
1265 | tx_csr = musb_readw(epio, MUSB_TXCSR); | ||
1266 | } | ||
1237 | 1267 | ||
1268 | /* | ||
1269 | * We may get here from a DMA completion or TXPKTRDY interrupt. | ||
1270 | * In any case, we must check the FIFO status here and bail out | ||
1271 | * only if the FIFO still has data -- that should prevent the | ||
1272 | * "missed" TXPKTRDY interrupts and deal with double-buffered | ||
1273 | * FIFO mode too... | ||
1274 | */ | ||
1275 | if (tx_csr & (MUSB_TXCSR_FIFONOTEMPTY | MUSB_TXCSR_TXPKTRDY)) { | ||
1276 | DBG(2, "DMA complete but packet still in FIFO, " | ||
1277 | "CSR %04x\n", tx_csr); | ||
1278 | return; | ||
1279 | } | ||
1238 | } | 1280 | } |
1239 | 1281 | ||
1240 | /* REVISIT this looks wrong... */ | ||
1241 | if (!status || dma || usb_pipeisoc(pipe)) { | 1282 | if (!status || dma || usb_pipeisoc(pipe)) { |
1242 | if (dma) | 1283 | if (dma) |
1243 | wLength = dma->actual_len; | 1284 | length = dma->actual_len; |
1244 | else | 1285 | else |
1245 | wLength = qh->segsize; | 1286 | length = qh->segsize; |
1246 | qh->offset += wLength; | 1287 | qh->offset += length; |
1247 | 1288 | ||
1248 | if (usb_pipeisoc(pipe)) { | 1289 | if (usb_pipeisoc(pipe)) { |
1249 | struct usb_iso_packet_descriptor *d; | 1290 | struct usb_iso_packet_descriptor *d; |
1250 | 1291 | ||
1251 | d = urb->iso_frame_desc + qh->iso_idx; | 1292 | d = urb->iso_frame_desc + qh->iso_idx; |
1252 | d->actual_length = qh->segsize; | 1293 | d->actual_length = length; |
1294 | d->status = status; | ||
1253 | if (++qh->iso_idx >= urb->number_of_packets) { | 1295 | if (++qh->iso_idx >= urb->number_of_packets) { |
1254 | done = true; | 1296 | done = true; |
1255 | } else { | 1297 | } else { |
1256 | d++; | 1298 | d++; |
1257 | buf = urb->transfer_buffer + d->offset; | 1299 | offset = d->offset; |
1258 | wLength = d->length; | 1300 | length = d->length; |
1259 | } | 1301 | } |
1260 | } else if (dma) { | 1302 | } else if (dma) { |
1261 | done = true; | 1303 | done = true; |
@@ -1268,10 +1310,8 @@ void musb_host_tx(struct musb *musb, u8 epnum) | |||
1268 | & URB_ZERO_PACKET)) | 1310 | & URB_ZERO_PACKET)) |
1269 | done = true; | 1311 | done = true; |
1270 | if (!done) { | 1312 | if (!done) { |
1271 | buf = urb->transfer_buffer | 1313 | offset = qh->offset; |
1272 | + qh->offset; | 1314 | length = urb->transfer_buffer_length - offset; |
1273 | wLength = urb->transfer_buffer_length | ||
1274 | - qh->offset; | ||
1275 | } | 1315 | } |
1276 | } | 1316 | } |
1277 | } | 1317 | } |
@@ -1290,28 +1330,31 @@ void musb_host_tx(struct musb *musb, u8 epnum) | |||
1290 | urb->status = status; | 1330 | urb->status = status; |
1291 | urb->actual_length = qh->offset; | 1331 | urb->actual_length = qh->offset; |
1292 | musb_advance_schedule(musb, urb, hw_ep, USB_DIR_OUT); | 1332 | musb_advance_schedule(musb, urb, hw_ep, USB_DIR_OUT); |
1333 | return; | ||
1334 | } else if (usb_pipeisoc(pipe) && dma) { | ||
1335 | if (musb_tx_dma_program(musb->dma_controller, hw_ep, qh, urb, | ||
1336 | offset, length)) | ||
1337 | return; | ||
1338 | } else if (tx_csr & MUSB_TXCSR_DMAENAB) { | ||
1339 | DBG(1, "not complete, but DMA enabled?\n"); | ||
1340 | return; | ||
1341 | } | ||
1293 | 1342 | ||
1294 | } else if (!(tx_csr & MUSB_TXCSR_DMAENAB)) { | 1343 | /* |
1295 | /* WARN_ON(!buf); */ | 1344 | * PIO: start next packet in this URB. |
1296 | 1345 | * | |
1297 | /* REVISIT: some docs say that when hw_ep->tx_double_buffered, | 1346 | * REVISIT: some docs say that when hw_ep->tx_double_buffered, |
1298 | * (and presumably, fifo is not half-full) we should write TWO | 1347 | * (and presumably, FIFO is not half-full) we should write *two* |
1299 | * packets before updating TXCSR ... other docs disagree ... | 1348 | * packets before updating TXCSR; other docs disagree... |
1300 | */ | 1349 | */ |
1301 | /* PIO: start next packet in this URB */ | 1350 | if (length > qh->maxpacket) |
1302 | if (wLength > qh->maxpacket) | 1351 | length = qh->maxpacket; |
1303 | wLength = qh->maxpacket; | 1352 | musb_write_fifo(hw_ep, length, urb->transfer_buffer + offset); |
1304 | musb_write_fifo(hw_ep, wLength, buf); | 1353 | qh->segsize = length; |
1305 | qh->segsize = wLength; | ||
1306 | |||
1307 | musb_ep_select(mbase, epnum); | ||
1308 | musb_writew(epio, MUSB_TXCSR, | ||
1309 | MUSB_TXCSR_H_WZC_BITS | MUSB_TXCSR_TXPKTRDY); | ||
1310 | } else | ||
1311 | DBG(1, "not complete, but dma enabled?\n"); | ||
1312 | 1354 | ||
1313 | finish: | 1355 | musb_ep_select(mbase, epnum); |
1314 | return; | 1356 | musb_writew(epio, MUSB_TXCSR, |
1357 | MUSB_TXCSR_H_WZC_BITS | MUSB_TXCSR_TXPKTRDY); | ||
1315 | } | 1358 | } |
1316 | 1359 | ||
1317 | 1360 | ||
@@ -1841,7 +1884,7 @@ static int musb_urb_enqueue( | |||
1841 | unsigned long flags; | 1884 | unsigned long flags; |
1842 | struct musb *musb = hcd_to_musb(hcd); | 1885 | struct musb *musb = hcd_to_musb(hcd); |
1843 | struct usb_host_endpoint *hep = urb->ep; | 1886 | struct usb_host_endpoint *hep = urb->ep; |
1844 | struct musb_qh *qh = hep->hcpriv; | 1887 | struct musb_qh *qh; |
1845 | struct usb_endpoint_descriptor *epd = &hep->desc; | 1888 | struct usb_endpoint_descriptor *epd = &hep->desc; |
1846 | int ret; | 1889 | int ret; |
1847 | unsigned type_reg; | 1890 | unsigned type_reg; |
@@ -1853,22 +1896,21 @@ static int musb_urb_enqueue( | |||
1853 | 1896 | ||
1854 | spin_lock_irqsave(&musb->lock, flags); | 1897 | spin_lock_irqsave(&musb->lock, flags); |
1855 | ret = usb_hcd_link_urb_to_ep(hcd, urb); | 1898 | ret = usb_hcd_link_urb_to_ep(hcd, urb); |
1899 | qh = ret ? NULL : hep->hcpriv; | ||
1900 | if (qh) | ||
1901 | urb->hcpriv = qh; | ||
1856 | spin_unlock_irqrestore(&musb->lock, flags); | 1902 | spin_unlock_irqrestore(&musb->lock, flags); |
1857 | if (ret) | ||
1858 | return ret; | ||
1859 | 1903 | ||
1860 | /* DMA mapping was already done, if needed, and this urb is on | 1904 | /* DMA mapping was already done, if needed, and this urb is on |
1861 | * hep->urb_list ... so there's little to do unless hep wasn't | 1905 | * hep->urb_list now ... so we're done, unless hep wasn't yet |
1862 | * yet scheduled onto a live qh. | 1906 | * scheduled onto a live qh. |
1863 | * | 1907 | * |
1864 | * REVISIT best to keep hep->hcpriv valid until the endpoint gets | 1908 | * REVISIT best to keep hep->hcpriv valid until the endpoint gets |
1865 | * disabled, testing for empty qh->ring and avoiding qh setup costs | 1909 | * disabled, testing for empty qh->ring and avoiding qh setup costs |
1866 | * except for the first urb queued after a config change. | 1910 | * except for the first urb queued after a config change. |
1867 | */ | 1911 | */ |
1868 | if (qh) { | 1912 | if (qh || ret) |
1869 | urb->hcpriv = qh; | 1913 | return ret; |
1870 | return 0; | ||
1871 | } | ||
1872 | 1914 | ||
1873 | /* Allocate and initialize qh, minimizing the work done each time | 1915 | /* Allocate and initialize qh, minimizing the work done each time |
1874 | * hw_ep gets reprogrammed, or with irqs blocked. Then schedule it. | 1916 | * hw_ep gets reprogrammed, or with irqs blocked. Then schedule it. |
@@ -2044,7 +2086,7 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh, int is_in) | |||
2044 | * endpoint's irq status here to avoid bogus irqs. | 2086 | * endpoint's irq status here to avoid bogus irqs. |
2045 | * clearing that status is platform-specific... | 2087 | * clearing that status is platform-specific... |
2046 | */ | 2088 | */ |
2047 | } else { | 2089 | } else if (ep->epnum) { |
2048 | musb_h_tx_flush_fifo(ep); | 2090 | musb_h_tx_flush_fifo(ep); |
2049 | csr = musb_readw(epio, MUSB_TXCSR); | 2091 | csr = musb_readw(epio, MUSB_TXCSR); |
2050 | csr &= ~(MUSB_TXCSR_AUTOSET | 2092 | csr &= ~(MUSB_TXCSR_AUTOSET |
@@ -2058,6 +2100,8 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh, int is_in) | |||
2058 | musb_writew(epio, MUSB_TXCSR, csr); | 2100 | musb_writew(epio, MUSB_TXCSR, csr); |
2059 | /* flush cpu writebuffer */ | 2101 | /* flush cpu writebuffer */ |
2060 | csr = musb_readw(epio, MUSB_TXCSR); | 2102 | csr = musb_readw(epio, MUSB_TXCSR); |
2103 | } else { | ||
2104 | musb_h_ep0_flush_fifo(ep); | ||
2061 | } | 2105 | } |
2062 | if (status == 0) | 2106 | if (status == 0) |
2063 | musb_advance_schedule(ep->musb, urb, ep, is_in); | 2107 | musb_advance_schedule(ep->musb, urb, ep, is_in); |
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c index 8662e9e159c..5e83f96d6b7 100644 --- a/drivers/usb/musb/musbhsdma.c +++ b/drivers/usb/musb/musbhsdma.c | |||
@@ -195,30 +195,32 @@ static int dma_channel_abort(struct dma_channel *channel) | |||
195 | void __iomem *mbase = musb_channel->controller->base; | 195 | void __iomem *mbase = musb_channel->controller->base; |
196 | 196 | ||
197 | u8 bchannel = musb_channel->idx; | 197 | u8 bchannel = musb_channel->idx; |
198 | int offset; | ||
198 | u16 csr; | 199 | u16 csr; |
199 | 200 | ||
200 | if (channel->status == MUSB_DMA_STATUS_BUSY) { | 201 | if (channel->status == MUSB_DMA_STATUS_BUSY) { |
201 | if (musb_channel->transmit) { | 202 | if (musb_channel->transmit) { |
202 | 203 | offset = MUSB_EP_OFFSET(musb_channel->epnum, | |
203 | csr = musb_readw(mbase, | 204 | MUSB_TXCSR); |
204 | MUSB_EP_OFFSET(musb_channel->epnum, | 205 | |
205 | MUSB_TXCSR)); | 206 | /* |
206 | csr &= ~(MUSB_TXCSR_AUTOSET | | 207 | * The programming guide says that we must clear |
207 | MUSB_TXCSR_DMAENAB | | 208 | * the DMAENAB bit before the DMAMODE bit... |
208 | MUSB_TXCSR_DMAMODE); | 209 | */ |
209 | musb_writew(mbase, | 210 | csr = musb_readw(mbase, offset); |
210 | MUSB_EP_OFFSET(musb_channel->epnum, MUSB_TXCSR), | 211 | csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAENAB); |
211 | csr); | 212 | musb_writew(mbase, offset, csr); |
213 | csr &= ~MUSB_TXCSR_DMAMODE; | ||
214 | musb_writew(mbase, offset, csr); | ||
212 | } else { | 215 | } else { |
213 | csr = musb_readw(mbase, | 216 | offset = MUSB_EP_OFFSET(musb_channel->epnum, |
214 | MUSB_EP_OFFSET(musb_channel->epnum, | 217 | MUSB_RXCSR); |
215 | MUSB_RXCSR)); | 218 | |
219 | csr = musb_readw(mbase, offset); | ||
216 | csr &= ~(MUSB_RXCSR_AUTOCLEAR | | 220 | csr &= ~(MUSB_RXCSR_AUTOCLEAR | |
217 | MUSB_RXCSR_DMAENAB | | 221 | MUSB_RXCSR_DMAENAB | |
218 | MUSB_RXCSR_DMAMODE); | 222 | MUSB_RXCSR_DMAMODE); |
219 | musb_writew(mbase, | 223 | musb_writew(mbase, offset, csr); |
220 | MUSB_EP_OFFSET(musb_channel->epnum, MUSB_RXCSR), | ||
221 | csr); | ||
222 | } | 224 | } |
223 | 225 | ||
224 | musb_writew(mbase, | 226 | musb_writew(mbase, |
@@ -296,20 +298,28 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data) | |||
296 | && ((channel->desired_mode == 0) | 298 | && ((channel->desired_mode == 0) |
297 | || (channel->actual_len & | 299 | || (channel->actual_len & |
298 | (musb_channel->max_packet_sz - 1))) | 300 | (musb_channel->max_packet_sz - 1))) |
299 | ) { | 301 | ) { |
302 | u8 epnum = musb_channel->epnum; | ||
303 | int offset = MUSB_EP_OFFSET(epnum, | ||
304 | MUSB_TXCSR); | ||
305 | u16 txcsr; | ||
306 | |||
307 | /* | ||
308 | * The programming guide says that we | ||
309 | * must clear DMAENAB before DMAMODE. | ||
310 | */ | ||
311 | musb_ep_select(mbase, epnum); | ||
312 | txcsr = musb_readw(mbase, offset); | ||
313 | txcsr &= ~(MUSB_TXCSR_DMAENAB | ||
314 | | MUSB_TXCSR_AUTOSET); | ||
315 | musb_writew(mbase, offset, txcsr); | ||
300 | /* Send out the packet */ | 316 | /* Send out the packet */ |
301 | musb_ep_select(mbase, | 317 | txcsr &= ~MUSB_TXCSR_DMAMODE; |
302 | musb_channel->epnum); | 318 | txcsr |= MUSB_TXCSR_TXPKTRDY; |
303 | musb_writew(mbase, MUSB_EP_OFFSET( | 319 | musb_writew(mbase, offset, txcsr); |
304 | musb_channel->epnum, | ||
305 | MUSB_TXCSR), | ||
306 | MUSB_TXCSR_TXPKTRDY); | ||
307 | } else { | ||
308 | musb_dma_completion( | ||
309 | musb, | ||
310 | musb_channel->epnum, | ||
311 | musb_channel->transmit); | ||
312 | } | 320 | } |
321 | musb_dma_completion(musb, musb_channel->epnum, | ||
322 | musb_channel->transmit); | ||
313 | } | 323 | } |
314 | } | 324 | } |
315 | } | 325 | } |
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index 901dffdf23b..60924ce0849 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c | |||
@@ -3,7 +3,6 @@ | |||
3 | * Some code has been taken from tusb6010.c | 3 | * Some code has been taken from tusb6010.c |
4 | * Copyrights for that are attributable to: | 4 | * Copyrights for that are attributable to: |
5 | * Copyright (C) 2006 Nokia Corporation | 5 | * Copyright (C) 2006 Nokia Corporation |
6 | * Jarkko Nikula <jarkko.nikula@nokia.com> | ||
7 | * Tony Lindgren <tony@atomide.com> | 6 | * Tony Lindgren <tony@atomide.com> |
8 | * | 7 | * |
9 | * This file is part of the Inventra Controller Driver for Linux. | 8 | * This file is part of the Inventra Controller Driver for Linux. |
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c index 9e20fd070d7..4ac1477d356 100644 --- a/drivers/usb/musb/tusb6010.c +++ b/drivers/usb/musb/tusb6010.c | |||
@@ -2,7 +2,6 @@ | |||
2 | * TUSB6010 USB 2.0 OTG Dual Role controller | 2 | * TUSB6010 USB 2.0 OTG Dual Role controller |
3 | * | 3 | * |
4 | * Copyright (C) 2006 Nokia Corporation | 4 | * Copyright (C) 2006 Nokia Corporation |
5 | * Jarkko Nikula <jarkko.nikula@nokia.com> | ||
6 | * Tony Lindgren <tony@atomide.com> | 5 | * Tony Lindgren <tony@atomide.com> |
7 | * | 6 | * |
8 | * This program is free software; you can redistribute it and/or modify | 7 | * This program is free software; you can redistribute it and/or modify |
diff --git a/drivers/usb/musb/tusb6010.h b/drivers/usb/musb/tusb6010.h index ab8c96286ce..35c933a5d99 100644 --- a/drivers/usb/musb/tusb6010.h +++ b/drivers/usb/musb/tusb6010.h | |||
@@ -2,7 +2,6 @@ | |||
2 | * Definitions for TUSB6010 USB 2.0 OTG Dual Role controller | 2 | * Definitions for TUSB6010 USB 2.0 OTG Dual Role controller |
3 | * | 3 | * |
4 | * Copyright (C) 2006 Nokia Corporation | 4 | * Copyright (C) 2006 Nokia Corporation |
5 | * Jarkko Nikula <jarkko.nikula@nokia.com> | ||
6 | * Tony Lindgren <tony@atomide.com> | 5 | * Tony Lindgren <tony@atomide.com> |
7 | * | 6 | * |
8 | * This program is free software; you can redistribute it and/or modify | 7 | * This program is free software; you can redistribute it and/or modify |
diff --git a/drivers/usb/otg/nop-usb-xceiv.c b/drivers/usb/otg/nop-usb-xceiv.c index 4b933f646f2..c567168f89a 100644 --- a/drivers/usb/otg/nop-usb-xceiv.c +++ b/drivers/usb/otg/nop-usb-xceiv.c | |||
@@ -36,14 +36,14 @@ struct nop_usb_xceiv { | |||
36 | struct device *dev; | 36 | struct device *dev; |
37 | }; | 37 | }; |
38 | 38 | ||
39 | static u64 nop_xceiv_dmamask = DMA_32BIT_MASK; | 39 | static u64 nop_xceiv_dmamask = DMA_BIT_MASK(32); |
40 | 40 | ||
41 | static struct platform_device nop_xceiv_device = { | 41 | static struct platform_device nop_xceiv_device = { |
42 | .name = "nop_usb_xceiv", | 42 | .name = "nop_usb_xceiv", |
43 | .id = -1, | 43 | .id = -1, |
44 | .dev = { | 44 | .dev = { |
45 | .dma_mask = &nop_xceiv_dmamask, | 45 | .dma_mask = &nop_xceiv_dmamask, |
46 | .coherent_dma_mask = DMA_32BIT_MASK, | 46 | .coherent_dma_mask = DMA_BIT_MASK(32), |
47 | .platform_data = NULL, | 47 | .platform_data = NULL, |
48 | }, | 48 | }, |
49 | }; | 49 | }; |
diff --git a/drivers/usb/otg/otg.c b/drivers/usb/otg/otg.c index ff318fae7d4..0a43a7db750 100644 --- a/drivers/usb/otg/otg.c +++ b/drivers/usb/otg/otg.c | |||
@@ -43,7 +43,8 @@ EXPORT_SYMBOL(otg_get_transceiver); | |||
43 | */ | 43 | */ |
44 | void otg_put_transceiver(struct otg_transceiver *x) | 44 | void otg_put_transceiver(struct otg_transceiver *x) |
45 | { | 45 | { |
46 | put_device(x->dev); | 46 | if (x) |
47 | put_device(x->dev); | ||
47 | } | 48 | } |
48 | EXPORT_SYMBOL(otg_put_transceiver); | 49 | EXPORT_SYMBOL(otg_put_transceiver); |
49 | 50 | ||
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c index 858bdd038fb..dd501bb63ed 100644 --- a/drivers/usb/serial/cyberjack.c +++ b/drivers/usb/serial/cyberjack.c | |||
@@ -175,13 +175,6 @@ static int cyberjack_open(struct tty_struct *tty, | |||
175 | dbg("%s - usb_clear_halt", __func__); | 175 | dbg("%s - usb_clear_halt", __func__); |
176 | usb_clear_halt(port->serial->dev, port->write_urb->pipe); | 176 | usb_clear_halt(port->serial->dev, port->write_urb->pipe); |
177 | 177 | ||
178 | /* force low_latency on so that our tty_push actually forces | ||
179 | * the data through, otherwise it is scheduled, and with high | ||
180 | * data rates (like with OHCI) data can get lost. | ||
181 | */ | ||
182 | if (tty) | ||
183 | tty->low_latency = 1; | ||
184 | |||
185 | priv = usb_get_serial_port_data(port); | 178 | priv = usb_get_serial_port_data(port); |
186 | spin_lock_irqsave(&priv->lock, flags); | 179 | spin_lock_irqsave(&priv->lock, flags); |
187 | priv->rdtodo = 0; | 180 | priv->rdtodo = 0; |
diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c index eae4740d448..e568710b263 100644 --- a/drivers/usb/serial/cypress_m8.c +++ b/drivers/usb/serial/cypress_m8.c | |||
@@ -656,10 +656,6 @@ static int cypress_open(struct tty_struct *tty, | |||
656 | priv->rx_flags = 0; | 656 | priv->rx_flags = 0; |
657 | spin_unlock_irqrestore(&priv->lock, flags); | 657 | spin_unlock_irqrestore(&priv->lock, flags); |
658 | 658 | ||
659 | /* setting to zero could cause data loss */ | ||
660 | if (tty) | ||
661 | tty->low_latency = 1; | ||
662 | |||
663 | /* raise both lines and set termios */ | 659 | /* raise both lines and set termios */ |
664 | spin_lock_irqsave(&priv->lock, flags); | 660 | spin_lock_irqsave(&priv->lock, flags); |
665 | priv->line_control = CONTROL_DTR | CONTROL_RTS; | 661 | priv->line_control = CONTROL_DTR | CONTROL_RTS; |
diff --git a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c index 8a69cce40b6..c709ec474a8 100644 --- a/drivers/usb/serial/empeg.c +++ b/drivers/usb/serial/empeg.c | |||
@@ -478,12 +478,6 @@ static void empeg_set_termios(struct tty_struct *tty, | |||
478 | termios->c_cflag | 478 | termios->c_cflag |
479 | |= CS8; /* character size 8 bits */ | 479 | |= CS8; /* character size 8 bits */ |
480 | 480 | ||
481 | /* | ||
482 | * Force low_latency on; otherwise the pushes are scheduled; | ||
483 | * this is bad as it opens up the possibility of dropping bytes | ||
484 | * on the floor. We don't want to drop bytes on the floor. :) | ||
485 | */ | ||
486 | tty->low_latency = 1; | ||
487 | tty_encode_baud_rate(tty, 115200, 115200); | 481 | tty_encode_baud_rate(tty, 115200, 115200); |
488 | } | 482 | } |
489 | 483 | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index dcc87aaa862..8100f1d2590 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -668,6 +668,7 @@ static struct usb_device_id id_table_combined [] = { | |||
668 | { USB_DEVICE(DE_VID, WHT_PID) }, | 668 | { USB_DEVICE(DE_VID, WHT_PID) }, |
669 | { USB_DEVICE(ADI_VID, ADI_GNICE_PID), | 669 | { USB_DEVICE(ADI_VID, ADI_GNICE_PID), |
670 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | 670 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
671 | { USB_DEVICE(JETI_VID, JETI_SPC1201_PID) }, | ||
671 | { }, /* Optional parameter entry */ | 672 | { }, /* Optional parameter entry */ |
672 | { } /* Terminating entry */ | 673 | { } /* Terminating entry */ |
673 | }; | 674 | }; |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index daaf63db0b5..c09f658a448 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
@@ -913,6 +913,13 @@ | |||
913 | #define ADI_GNICE_PID 0xF000 | 913 | #define ADI_GNICE_PID 0xF000 |
914 | 914 | ||
915 | /* | 915 | /* |
916 | * JETI SPECTROMETER SPECBOS 1201 | ||
917 | * http://www.jeti.com/products/sys/scb/scb1201.php | ||
918 | */ | ||
919 | #define JETI_VID 0x0c6c | ||
920 | #define JETI_SPC1201_PID 0x04b2 | ||
921 | |||
922 | /* | ||
916 | * BmRequestType: 1100 0000b | 923 | * BmRequestType: 1100 0000b |
917 | * bRequest: FTDI_E2_READ | 924 | * bRequest: FTDI_E2_READ |
918 | * wValue: 0 | 925 | * wValue: 0 |
diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c index a26a0e2cdb4..586d30ff450 100644 --- a/drivers/usb/serial/garmin_gps.c +++ b/drivers/usb/serial/garmin_gps.c | |||
@@ -973,14 +973,6 @@ static int garmin_open(struct tty_struct *tty, | |||
973 | 973 | ||
974 | dbg("%s - port %d", __func__, port->number); | 974 | dbg("%s - port %d", __func__, port->number); |
975 | 975 | ||
976 | /* | ||
977 | * Force low_latency on so that our tty_push actually forces the data | ||
978 | * through, otherwise it is scheduled, and with high data rates (like | ||
979 | * with OHCI) data can get lost. | ||
980 | */ | ||
981 | if (tty) | ||
982 | tty->low_latency = 1; | ||
983 | |||
984 | spin_lock_irqsave(&garmin_data_p->lock, flags); | 976 | spin_lock_irqsave(&garmin_data_p->lock, flags); |
985 | garmin_data_p->mode = initial_mode; | 977 | garmin_data_p->mode = initial_mode; |
986 | garmin_data_p->count = 0; | 978 | garmin_data_p->count = 0; |
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c index 9d57cace373..4cec9906ccf 100644 --- a/drivers/usb/serial/generic.c +++ b/drivers/usb/serial/generic.c | |||
@@ -122,12 +122,6 @@ int usb_serial_generic_open(struct tty_struct *tty, | |||
122 | 122 | ||
123 | dbg("%s - port %d", __func__, port->number); | 123 | dbg("%s - port %d", __func__, port->number); |
124 | 124 | ||
125 | /* force low_latency on so that our tty_push actually forces the data | ||
126 | through, otherwise it is scheduled, and with high data rates (like | ||
127 | with OHCI) data can get lost. */ | ||
128 | if (tty) | ||
129 | tty->low_latency = 1; | ||
130 | |||
131 | /* clear the throttle flags */ | 125 | /* clear the throttle flags */ |
132 | spin_lock_irqsave(&port->lock, flags); | 126 | spin_lock_irqsave(&port->lock, flags); |
133 | port->throttled = 0; | 127 | port->throttled = 0; |
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c index e85c8c0d1ad..fb4a73d090f 100644 --- a/drivers/usb/serial/io_edgeport.c +++ b/drivers/usb/serial/io_edgeport.c | |||
@@ -193,8 +193,6 @@ static const struct divisor_table_entry divisor_table[] = { | |||
193 | /* local variables */ | 193 | /* local variables */ |
194 | static int debug; | 194 | static int debug; |
195 | 195 | ||
196 | static int low_latency = 1; /* tty low latency flag, on by default */ | ||
197 | |||
198 | static atomic_t CmdUrbs; /* Number of outstanding Command Write Urbs */ | 196 | static atomic_t CmdUrbs; /* Number of outstanding Command Write Urbs */ |
199 | 197 | ||
200 | 198 | ||
@@ -867,9 +865,6 @@ static int edge_open(struct tty_struct *tty, | |||
867 | if (edge_port == NULL) | 865 | if (edge_port == NULL) |
868 | return -ENODEV; | 866 | return -ENODEV; |
869 | 867 | ||
870 | if (tty) | ||
871 | tty->low_latency = low_latency; | ||
872 | |||
873 | /* see if we've set up our endpoint info yet (can't set it up | 868 | /* see if we've set up our endpoint info yet (can't set it up |
874 | in edge_startup as the structures were not set up at that time.) */ | 869 | in edge_startup as the structures were not set up at that time.) */ |
875 | serial = port->serial; | 870 | serial = port->serial; |
@@ -3299,6 +3294,3 @@ MODULE_FIRMWARE("edgeport/down2.fw"); | |||
3299 | 3294 | ||
3300 | module_param(debug, bool, S_IRUGO | S_IWUSR); | 3295 | module_param(debug, bool, S_IRUGO | S_IWUSR); |
3301 | MODULE_PARM_DESC(debug, "Debug enabled or not"); | 3296 | MODULE_PARM_DESC(debug, "Debug enabled or not"); |
3302 | |||
3303 | module_param(low_latency, bool, S_IRUGO | S_IWUSR); | ||
3304 | MODULE_PARM_DESC(low_latency, "Low latency enabled or not"); | ||
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c index c3cdd00ddc4..513b25e044c 100644 --- a/drivers/usb/serial/io_ti.c +++ b/drivers/usb/serial/io_ti.c | |||
@@ -76,7 +76,6 @@ struct edgeport_uart_buf_desc { | |||
76 | #define EDGE_READ_URB_STOPPING 1 | 76 | #define EDGE_READ_URB_STOPPING 1 |
77 | #define EDGE_READ_URB_STOPPED 2 | 77 | #define EDGE_READ_URB_STOPPED 2 |
78 | 78 | ||
79 | #define EDGE_LOW_LATENCY 1 | ||
80 | #define EDGE_CLOSING_WAIT 4000 /* in .01 sec */ | 79 | #define EDGE_CLOSING_WAIT 4000 /* in .01 sec */ |
81 | 80 | ||
82 | #define EDGE_OUT_BUF_SIZE 1024 | 81 | #define EDGE_OUT_BUF_SIZE 1024 |
@@ -232,7 +231,6 @@ static unsigned short OperationalBuildNumber; | |||
232 | 231 | ||
233 | static int debug; | 232 | static int debug; |
234 | 233 | ||
235 | static int low_latency = EDGE_LOW_LATENCY; | ||
236 | static int closing_wait = EDGE_CLOSING_WAIT; | 234 | static int closing_wait = EDGE_CLOSING_WAIT; |
237 | static int ignore_cpu_rev; | 235 | static int ignore_cpu_rev; |
238 | static int default_uart_mode; /* RS232 */ | 236 | static int default_uart_mode; /* RS232 */ |
@@ -1850,9 +1848,6 @@ static int edge_open(struct tty_struct *tty, | |||
1850 | if (edge_port == NULL) | 1848 | if (edge_port == NULL) |
1851 | return -ENODEV; | 1849 | return -ENODEV; |
1852 | 1850 | ||
1853 | if (tty) | ||
1854 | tty->low_latency = low_latency; | ||
1855 | |||
1856 | port_number = port->number - port->serial->minor; | 1851 | port_number = port->number - port->serial->minor; |
1857 | switch (port_number) { | 1852 | switch (port_number) { |
1858 | case 0: | 1853 | case 0: |
@@ -3008,9 +3003,6 @@ MODULE_FIRMWARE("edgeport/down3.bin"); | |||
3008 | module_param(debug, bool, S_IRUGO | S_IWUSR); | 3003 | module_param(debug, bool, S_IRUGO | S_IWUSR); |
3009 | MODULE_PARM_DESC(debug, "Debug enabled or not"); | 3004 | MODULE_PARM_DESC(debug, "Debug enabled or not"); |
3010 | 3005 | ||
3011 | module_param(low_latency, bool, S_IRUGO | S_IWUSR); | ||
3012 | MODULE_PARM_DESC(low_latency, "Low latency enabled or not"); | ||
3013 | |||
3014 | module_param(closing_wait, int, S_IRUGO | S_IWUSR); | 3006 | module_param(closing_wait, int, S_IRUGO | S_IWUSR); |
3015 | MODULE_PARM_DESC(closing_wait, "Maximum wait for data to drain, in .01 secs"); | 3007 | MODULE_PARM_DESC(closing_wait, "Maximum wait for data to drain, in .01 secs"); |
3016 | 3008 | ||
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c index ef92095b073..cd62825a9ac 100644 --- a/drivers/usb/serial/ipaq.c +++ b/drivers/usb/serial/ipaq.c | |||
@@ -631,13 +631,7 @@ static int ipaq_open(struct tty_struct *tty, | |||
631 | priv->free_len += PACKET_SIZE; | 631 | priv->free_len += PACKET_SIZE; |
632 | } | 632 | } |
633 | 633 | ||
634 | /* | ||
635 | * Force low latency on. This will immediately push data to the line | ||
636 | * discipline instead of queueing. | ||
637 | */ | ||
638 | |||
639 | if (tty) { | 634 | if (tty) { |
640 | tty->low_latency = 1; | ||
641 | /* FIXME: These two are bogus */ | 635 | /* FIXME: These two are bogus */ |
642 | tty->raw = 1; | 636 | tty->raw = 1; |
643 | tty->real_raw = 1; | 637 | tty->real_raw = 1; |
diff --git a/drivers/usb/serial/ipw.c b/drivers/usb/serial/ipw.c index f530032ed93..da2a2b46644 100644 --- a/drivers/usb/serial/ipw.c +++ b/drivers/usb/serial/ipw.c | |||
@@ -207,9 +207,6 @@ static int ipw_open(struct tty_struct *tty, | |||
207 | if (!buf_flow_init) | 207 | if (!buf_flow_init) |
208 | return -ENOMEM; | 208 | return -ENOMEM; |
209 | 209 | ||
210 | if (tty) | ||
211 | tty->low_latency = 1; | ||
212 | |||
213 | /* --1: Tell the modem to initialize (we think) From sniffs this is | 210 | /* --1: Tell the modem to initialize (we think) From sniffs this is |
214 | * always the first thing that gets sent to the modem during | 211 | * always the first thing that gets sent to the modem during |
215 | * opening of the device */ | 212 | * opening of the device */ |
diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c index 2314c6ae4fc..4473d442b2a 100644 --- a/drivers/usb/serial/iuu_phoenix.c +++ b/drivers/usb/serial/iuu_phoenix.c | |||
@@ -1051,7 +1051,6 @@ static int iuu_open(struct tty_struct *tty, | |||
1051 | tty->termios->c_oflag = 0; | 1051 | tty->termios->c_oflag = 0; |
1052 | tty->termios->c_iflag = 0; | 1052 | tty->termios->c_iflag = 0; |
1053 | priv->termios_initialized = 1; | 1053 | priv->termios_initialized = 1; |
1054 | tty->low_latency = 1; | ||
1055 | priv->poll = 0; | 1054 | priv->poll = 0; |
1056 | } | 1055 | } |
1057 | spin_unlock_irqrestore(&priv->lock, flags); | 1056 | spin_unlock_irqrestore(&priv->lock, flags); |
diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c index 6286baad939..c148544953b 100644 --- a/drivers/usb/serial/kobil_sct.c +++ b/drivers/usb/serial/kobil_sct.c | |||
@@ -231,13 +231,7 @@ static int kobil_open(struct tty_struct *tty, | |||
231 | /* someone sets the dev to 0 if the close method has been called */ | 231 | /* someone sets the dev to 0 if the close method has been called */ |
232 | port->interrupt_in_urb->dev = port->serial->dev; | 232 | port->interrupt_in_urb->dev = port->serial->dev; |
233 | 233 | ||
234 | |||
235 | /* force low_latency on so that our tty_push actually forces | ||
236 | * the data through, otherwise it is scheduled, and with high | ||
237 | * data rates (like with OHCI) data can get lost. | ||
238 | */ | ||
239 | if (tty) { | 234 | if (tty) { |
240 | tty->low_latency = 1; | ||
241 | 235 | ||
242 | /* Default to echo off and other sane device settings */ | 236 | /* Default to echo off and other sane device settings */ |
243 | tty->termios->c_lflag = 0; | 237 | tty->termios->c_lflag = 0; |
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c index e772cc0a97f..24e3b5d4b4d 100644 --- a/drivers/usb/serial/mos7720.c +++ b/drivers/usb/serial/mos7720.c | |||
@@ -446,13 +446,6 @@ static int mos7720_open(struct tty_struct *tty, | |||
446 | data = 0x0c; | 446 | data = 0x0c; |
447 | send_mos_cmd(serial, MOS_WRITE, port_number, 0x01, &data); | 447 | send_mos_cmd(serial, MOS_WRITE, port_number, 0x01, &data); |
448 | 448 | ||
449 | /* force low_latency on so that our tty_push actually forces * | ||
450 | * the data through,otherwise it is scheduled, and with * | ||
451 | * high data rates (like with OHCI) data can get lost. */ | ||
452 | |||
453 | if (tty) | ||
454 | tty->low_latency = 1; | ||
455 | |||
456 | /* see if we've set up our endpoint info yet * | 449 | /* see if we've set up our endpoint info yet * |
457 | * (can't set it up in mos7720_startup as the * | 450 | * (can't set it up in mos7720_startup as the * |
458 | * structures were not set up at that time.) */ | 451 | * structures were not set up at that time.) */ |
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c index 2c20e88a91b..84fb1dcd30d 100644 --- a/drivers/usb/serial/mos7840.c +++ b/drivers/usb/serial/mos7840.c | |||
@@ -38,7 +38,7 @@ | |||
38 | /* | 38 | /* |
39 | * Version Information | 39 | * Version Information |
40 | */ | 40 | */ |
41 | #define DRIVER_VERSION "1.3.1" | 41 | #define DRIVER_VERSION "1.3.2" |
42 | #define DRIVER_DESC "Moschip 7840/7820 USB Serial Driver" | 42 | #define DRIVER_DESC "Moschip 7840/7820 USB Serial Driver" |
43 | 43 | ||
44 | /* | 44 | /* |
@@ -123,6 +123,11 @@ | |||
123 | #define BANDB_DEVICE_ID_USOPTL4_4 0xAC44 | 123 | #define BANDB_DEVICE_ID_USOPTL4_4 0xAC44 |
124 | #define BANDB_DEVICE_ID_USOPTL4_2 0xAC42 | 124 | #define BANDB_DEVICE_ID_USOPTL4_2 0xAC42 |
125 | 125 | ||
126 | /* This driver also supports the ATEN UC2324 device since it is mos7840 based | ||
127 | * - if I knew the device id it would also support the ATEN UC2322 */ | ||
128 | #define USB_VENDOR_ID_ATENINTL 0x0557 | ||
129 | #define ATENINTL_DEVICE_ID_UC2324 0x2011 | ||
130 | |||
126 | /* Interrupt Routine Defines */ | 131 | /* Interrupt Routine Defines */ |
127 | 132 | ||
128 | #define SERIAL_IIR_RLS 0x06 | 133 | #define SERIAL_IIR_RLS 0x06 |
@@ -170,6 +175,7 @@ static struct usb_device_id moschip_port_id_table[] = { | |||
170 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, | 175 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, |
171 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, | 176 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, |
172 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, | 177 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, |
178 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)}, | ||
173 | {} /* terminating entry */ | 179 | {} /* terminating entry */ |
174 | }; | 180 | }; |
175 | 181 | ||
@@ -178,6 +184,7 @@ static __devinitdata struct usb_device_id moschip_id_table_combined[] = { | |||
178 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, | 184 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, |
179 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, | 185 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, |
180 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, | 186 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, |
187 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)}, | ||
181 | {} /* terminating entry */ | 188 | {} /* terminating entry */ |
182 | }; | 189 | }; |
183 | 190 | ||
@@ -1000,12 +1007,6 @@ static int mos7840_open(struct tty_struct *tty, | |||
1000 | status = mos7840_set_reg_sync(port, mos7840_port->ControlRegOffset, | 1007 | status = mos7840_set_reg_sync(port, mos7840_port->ControlRegOffset, |
1001 | Data); | 1008 | Data); |
1002 | 1009 | ||
1003 | /* force low_latency on so that our tty_push actually forces * | ||
1004 | * the data through,otherwise it is scheduled, and with * | ||
1005 | * high data rates (like with OHCI) data can get lost. */ | ||
1006 | if (tty) | ||
1007 | tty->low_latency = 1; | ||
1008 | |||
1009 | /* Check to see if we've set up our endpoint info yet * | 1010 | /* Check to see if we've set up our endpoint info yet * |
1010 | * (can't set it up in mos7840_startup as the structures * | 1011 | * (can't set it up in mos7840_startup as the structures * |
1011 | * were not set up at that time.) */ | 1012 | * were not set up at that time.) */ |
@@ -2477,9 +2478,14 @@ static int mos7840_startup(struct usb_serial *serial) | |||
2477 | mos7840_set_port_private(serial->port[i], mos7840_port); | 2478 | mos7840_set_port_private(serial->port[i], mos7840_port); |
2478 | spin_lock_init(&mos7840_port->pool_lock); | 2479 | spin_lock_init(&mos7840_port->pool_lock); |
2479 | 2480 | ||
2480 | mos7840_port->port_num = ((serial->port[i]->number - | 2481 | /* minor is not initialised until later by |
2481 | (serial->port[i]->serial->minor)) + | 2482 | * usb-serial.c:get_free_serial() and cannot therefore be used |
2482 | 1); | 2483 | * to index device instances */ |
2484 | mos7840_port->port_num = i + 1; | ||
2485 | dbg ("serial->port[i]->number = %d", serial->port[i]->number); | ||
2486 | dbg ("serial->port[i]->serial->minor = %d", serial->port[i]->serial->minor); | ||
2487 | dbg ("mos7840_port->port_num = %d", mos7840_port->port_num); | ||
2488 | dbg ("serial->minor = %d", serial->minor); | ||
2483 | 2489 | ||
2484 | if (mos7840_port->port_num == 1) { | 2490 | if (mos7840_port->port_num == 1) { |
2485 | mos7840_port->SpRegOffset = 0x0; | 2491 | mos7840_port->SpRegOffset = 0x0; |
@@ -2690,13 +2696,16 @@ static void mos7840_shutdown(struct usb_serial *serial) | |||
2690 | 2696 | ||
2691 | for (i = 0; i < serial->num_ports; ++i) { | 2697 | for (i = 0; i < serial->num_ports; ++i) { |
2692 | mos7840_port = mos7840_get_port_private(serial->port[i]); | 2698 | mos7840_port = mos7840_get_port_private(serial->port[i]); |
2693 | spin_lock_irqsave(&mos7840_port->pool_lock, flags); | 2699 | dbg ("mos7840_port %d = %p", i, mos7840_port); |
2694 | mos7840_port->zombie = 1; | 2700 | if (mos7840_port) { |
2695 | spin_unlock_irqrestore(&mos7840_port->pool_lock, flags); | 2701 | spin_lock_irqsave(&mos7840_port->pool_lock, flags); |
2696 | usb_kill_urb(mos7840_port->control_urb); | 2702 | mos7840_port->zombie = 1; |
2697 | kfree(mos7840_port->ctrl_buf); | 2703 | spin_unlock_irqrestore(&mos7840_port->pool_lock, flags); |
2698 | kfree(mos7840_port->dr); | 2704 | usb_kill_urb(mos7840_port->control_urb); |
2699 | kfree(mos7840_port); | 2705 | kfree(mos7840_port->ctrl_buf); |
2706 | kfree(mos7840_port->dr); | ||
2707 | kfree(mos7840_port); | ||
2708 | } | ||
2700 | mos7840_set_port_private(serial->port[i], NULL); | 2709 | mos7840_set_port_private(serial->port[i], NULL); |
2701 | } | 2710 | } |
2702 | 2711 | ||
diff --git a/drivers/usb/serial/moto_modem.c b/drivers/usb/serial/moto_modem.c index 2e8e05462ef..b66b71ccd12 100644 --- a/drivers/usb/serial/moto_modem.c +++ b/drivers/usb/serial/moto_modem.c | |||
@@ -25,6 +25,7 @@ static struct usb_device_id id_table [] = { | |||
25 | { USB_DEVICE(0x05c6, 0x3197) }, /* unknown Motorola phone */ | 25 | { USB_DEVICE(0x05c6, 0x3197) }, /* unknown Motorola phone */ |
26 | { USB_DEVICE(0x0c44, 0x0022) }, /* unknown Mororola phone */ | 26 | { USB_DEVICE(0x0c44, 0x0022) }, /* unknown Mororola phone */ |
27 | { USB_DEVICE(0x22b8, 0x2a64) }, /* Motorola KRZR K1m */ | 27 | { USB_DEVICE(0x22b8, 0x2a64) }, /* Motorola KRZR K1m */ |
28 | { USB_DEVICE(0x22b8, 0x2c64) }, /* Motorola V950 phone */ | ||
28 | { }, | 29 | { }, |
29 | }; | 30 | }; |
30 | MODULE_DEVICE_TABLE(usb, id_table); | 31 | MODULE_DEVICE_TABLE(usb, id_table); |
diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c index 839583dc8b6..b500ad10b75 100644 --- a/drivers/usb/serial/opticon.c +++ b/drivers/usb/serial/opticon.c | |||
@@ -159,14 +159,6 @@ static int opticon_open(struct tty_struct *tty, struct usb_serial_port *port, | |||
159 | priv->port = port; | 159 | priv->port = port; |
160 | spin_unlock_irqrestore(&priv->lock, flags); | 160 | spin_unlock_irqrestore(&priv->lock, flags); |
161 | 161 | ||
162 | /* | ||
163 | * Force low_latency on so that our tty_push actually forces the data | ||
164 | * through, otherwise it is scheduled, and with high data rates (like | ||
165 | * with OHCI) data can get lost. | ||
166 | */ | ||
167 | if (tty) | ||
168 | tty->low_latency = 1; | ||
169 | |||
170 | /* Start reading from the device */ | 162 | /* Start reading from the device */ |
171 | usb_fill_bulk_urb(priv->bulk_read_urb, priv->udev, | 163 | usb_fill_bulk_urb(priv->bulk_read_urb, priv->udev, |
172 | usb_rcvbulkpipe(priv->udev, | 164 | usb_rcvbulkpipe(priv->udev, |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index d560c0b54e6..7817b82889c 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -300,6 +300,10 @@ static int option_resume(struct usb_serial *serial); | |||
300 | #define BENQ_VENDOR_ID 0x04a5 | 300 | #define BENQ_VENDOR_ID 0x04a5 |
301 | #define BENQ_PRODUCT_H10 0x4068 | 301 | #define BENQ_PRODUCT_H10 0x4068 |
302 | 302 | ||
303 | #define DLINK_VENDOR_ID 0x1186 | ||
304 | #define DLINK_PRODUCT_DWM_652 0x3e04 | ||
305 | |||
306 | |||
303 | static struct usb_device_id option_ids[] = { | 307 | static struct usb_device_id option_ids[] = { |
304 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, | 308 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, |
305 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, | 309 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, |
@@ -516,6 +520,7 @@ static struct usb_device_id option_ids[] = { | |||
516 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, | 520 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, |
517 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, | 521 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, |
518 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, | 522 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, |
523 | { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) }, | ||
519 | { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */ | 524 | { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */ |
520 | { } /* Terminating entry */ | 525 | { } /* Terminating entry */ |
521 | }; | 526 | }; |
@@ -931,9 +936,6 @@ static int option_open(struct tty_struct *tty, | |||
931 | usb_pipeout(urb->pipe), 0); */ | 936 | usb_pipeout(urb->pipe), 0); */ |
932 | } | 937 | } |
933 | 938 | ||
934 | if (tty) | ||
935 | tty->low_latency = 1; | ||
936 | |||
937 | option_send_setup(tty, port); | 939 | option_send_setup(tty, port); |
938 | 940 | ||
939 | return 0; | 941 | return 0; |
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c index e6d6b0c17fd..7528b8d57f1 100644 --- a/drivers/usb/serial/qcserial.c +++ b/drivers/usb/serial/qcserial.c | |||
@@ -26,6 +26,27 @@ static struct usb_device_id id_table[] = { | |||
26 | {USB_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ | 26 | {USB_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ |
27 | {USB_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */ | 27 | {USB_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */ |
28 | {USB_DEVICE(0x03f0, 0x201d)}, /* HP un2400 Gobi QDL Device */ | 28 | {USB_DEVICE(0x03f0, 0x201d)}, /* HP un2400 Gobi QDL Device */ |
29 | {USB_DEVICE(0x04da, 0x250d)}, /* Panasonic Gobi Modem device */ | ||
30 | {USB_DEVICE(0x04da, 0x250c)}, /* Panasonic Gobi QDL device */ | ||
31 | {USB_DEVICE(0x413c, 0x8172)}, /* Dell Gobi Modem device */ | ||
32 | {USB_DEVICE(0x413c, 0x8171)}, /* Dell Gobi QDL device */ | ||
33 | {USB_DEVICE(0x1410, 0xa001)}, /* Novatel Gobi Modem device */ | ||
34 | {USB_DEVICE(0x1410, 0xa008)}, /* Novatel Gobi QDL device */ | ||
35 | {USB_DEVICE(0x0b05, 0x1776)}, /* Asus Gobi Modem device */ | ||
36 | {USB_DEVICE(0x0b05, 0x1774)}, /* Asus Gobi QDL device */ | ||
37 | {USB_DEVICE(0x19d2, 0xfff3)}, /* ONDA Gobi Modem device */ | ||
38 | {USB_DEVICE(0x19d2, 0xfff2)}, /* ONDA Gobi QDL device */ | ||
39 | {USB_DEVICE(0x1557, 0x0a80)}, /* OQO Gobi QDL device */ | ||
40 | {USB_DEVICE(0x05c6, 0x9001)}, /* Generic Gobi Modem device */ | ||
41 | {USB_DEVICE(0x05c6, 0x9002)}, /* Generic Gobi Modem device */ | ||
42 | {USB_DEVICE(0x05c6, 0x9202)}, /* Generic Gobi Modem device */ | ||
43 | {USB_DEVICE(0x05c6, 0x9203)}, /* Generic Gobi Modem device */ | ||
44 | {USB_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */ | ||
45 | {USB_DEVICE(0x05c6, 0x9008)}, /* Generic Gobi QDL device */ | ||
46 | {USB_DEVICE(0x05c6, 0x9201)}, /* Generic Gobi QDL device */ | ||
47 | {USB_DEVICE(0x05c6, 0x9221)}, /* Generic Gobi QDL device */ | ||
48 | {USB_DEVICE(0x05c6, 0x9231)}, /* Generic Gobi QDL device */ | ||
49 | {USB_DEVICE(0x1f45, 0x0001)}, /* Unknown Gobi QDL device */ | ||
29 | { } /* Terminating entry */ | 50 | { } /* Terminating entry */ |
30 | }; | 51 | }; |
31 | MODULE_DEVICE_TABLE(usb, id_table); | 52 | MODULE_DEVICE_TABLE(usb, id_table); |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index d9bf9a5c20e..913225c6161 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
@@ -14,7 +14,7 @@ | |||
14 | Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> | 14 | Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #define DRIVER_VERSION "v.1.3.2" | 17 | #define DRIVER_VERSION "v.1.3.3" |
18 | #define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>" | 18 | #define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>" |
19 | #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" | 19 | #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" |
20 | 20 | ||
@@ -259,9 +259,21 @@ static int sierra_send_setup(struct tty_struct *tty, | |||
259 | val |= 0x02; | 259 | val |= 0x02; |
260 | 260 | ||
261 | /* If composite device then properly report interface */ | 261 | /* If composite device then properly report interface */ |
262 | if (serial->num_ports == 1) | 262 | if (serial->num_ports == 1) { |
263 | interface = sierra_calc_interface(serial); | 263 | interface = sierra_calc_interface(serial); |
264 | 264 | ||
265 | /* Control message is sent only to interfaces with | ||
266 | * interrupt_in endpoints | ||
267 | */ | ||
268 | if (port->interrupt_in_urb) { | ||
269 | /* send control message */ | ||
270 | return usb_control_msg(serial->dev, | ||
271 | usb_rcvctrlpipe(serial->dev, 0), | ||
272 | 0x22, 0x21, val, interface, | ||
273 | NULL, 0, USB_CTRL_SET_TIMEOUT); | ||
274 | } | ||
275 | } | ||
276 | |||
265 | /* Otherwise the need to do non-composite mapping */ | 277 | /* Otherwise the need to do non-composite mapping */ |
266 | else { | 278 | else { |
267 | if (port->bulk_out_endpointAddress == 2) | 279 | if (port->bulk_out_endpointAddress == 2) |
@@ -270,12 +282,13 @@ static int sierra_send_setup(struct tty_struct *tty, | |||
270 | interface = 1; | 282 | interface = 1; |
271 | else if (port->bulk_out_endpointAddress == 5) | 283 | else if (port->bulk_out_endpointAddress == 5) |
272 | interface = 2; | 284 | interface = 2; |
273 | } | ||
274 | 285 | ||
275 | return usb_control_msg(serial->dev, | 286 | return usb_control_msg(serial->dev, |
276 | usb_rcvctrlpipe(serial->dev, 0), | 287 | usb_rcvctrlpipe(serial->dev, 0), |
277 | 0x22, 0x21, val, interface, | 288 | 0x22, 0x21, val, interface, |
278 | NULL, 0, USB_CTRL_SET_TIMEOUT); | 289 | NULL, 0, USB_CTRL_SET_TIMEOUT); |
290 | |||
291 | } | ||
279 | } | 292 | } |
280 | 293 | ||
281 | return 0; | 294 | return 0; |
@@ -585,9 +598,6 @@ static int sierra_open(struct tty_struct *tty, | |||
585 | } | 598 | } |
586 | } | 599 | } |
587 | 600 | ||
588 | if (tty) | ||
589 | tty->low_latency = 1; | ||
590 | |||
591 | sierra_send_setup(tty, port); | 601 | sierra_send_setup(tty, port); |
592 | 602 | ||
593 | /* start up the interrupt endpoint if we have one */ | 603 | /* start up the interrupt endpoint if we have one */ |
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index 2620bf6fe5e..0a64bac306e 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c | |||
@@ -50,11 +50,10 @@ | |||
50 | 50 | ||
51 | #define TI_TRANSFER_TIMEOUT 2 | 51 | #define TI_TRANSFER_TIMEOUT 2 |
52 | 52 | ||
53 | #define TI_DEFAULT_LOW_LATENCY 0 | ||
54 | #define TI_DEFAULT_CLOSING_WAIT 4000 /* in .01 secs */ | 53 | #define TI_DEFAULT_CLOSING_WAIT 4000 /* in .01 secs */ |
55 | 54 | ||
56 | /* supported setserial flags */ | 55 | /* supported setserial flags */ |
57 | #define TI_SET_SERIAL_FLAGS (ASYNC_LOW_LATENCY) | 56 | #define TI_SET_SERIAL_FLAGS 0 |
58 | 57 | ||
59 | /* read urb states */ | 58 | /* read urb states */ |
60 | #define TI_READ_URB_RUNNING 0 | 59 | #define TI_READ_URB_RUNNING 0 |
@@ -161,7 +160,6 @@ static int ti_buf_get(struct circ_buf *cb, char *buf, int count); | |||
161 | 160 | ||
162 | /* module parameters */ | 161 | /* module parameters */ |
163 | static int debug; | 162 | static int debug; |
164 | static int low_latency = TI_DEFAULT_LOW_LATENCY; | ||
165 | static int closing_wait = TI_DEFAULT_CLOSING_WAIT; | 163 | static int closing_wait = TI_DEFAULT_CLOSING_WAIT; |
166 | static ushort vendor_3410[TI_EXTRA_VID_PID_COUNT]; | 164 | static ushort vendor_3410[TI_EXTRA_VID_PID_COUNT]; |
167 | static unsigned int vendor_3410_count; | 165 | static unsigned int vendor_3410_count; |
@@ -296,10 +294,6 @@ MODULE_FIRMWARE("mts_edge.fw"); | |||
296 | module_param(debug, bool, S_IRUGO | S_IWUSR); | 294 | module_param(debug, bool, S_IRUGO | S_IWUSR); |
297 | MODULE_PARM_DESC(debug, "Enable debugging, 0=no, 1=yes"); | 295 | MODULE_PARM_DESC(debug, "Enable debugging, 0=no, 1=yes"); |
298 | 296 | ||
299 | module_param(low_latency, bool, S_IRUGO | S_IWUSR); | ||
300 | MODULE_PARM_DESC(low_latency, | ||
301 | "TTY low_latency flag, 0=off, 1=on, default is off"); | ||
302 | |||
303 | module_param(closing_wait, int, S_IRUGO | S_IWUSR); | 297 | module_param(closing_wait, int, S_IRUGO | S_IWUSR); |
304 | MODULE_PARM_DESC(closing_wait, | 298 | MODULE_PARM_DESC(closing_wait, |
305 | "Maximum wait for data to drain in close, in .01 secs, default is 4000"); | 299 | "Maximum wait for data to drain in close, in .01 secs, default is 4000"); |
@@ -448,7 +442,6 @@ static int ti_startup(struct usb_serial *serial) | |||
448 | spin_lock_init(&tport->tp_lock); | 442 | spin_lock_init(&tport->tp_lock); |
449 | tport->tp_uart_base_addr = (i == 0 ? | 443 | tport->tp_uart_base_addr = (i == 0 ? |
450 | TI_UART1_BASE_ADDR : TI_UART2_BASE_ADDR); | 444 | TI_UART1_BASE_ADDR : TI_UART2_BASE_ADDR); |
451 | tport->tp_flags = low_latency ? ASYNC_LOW_LATENCY : 0; | ||
452 | tport->tp_closing_wait = closing_wait; | 445 | tport->tp_closing_wait = closing_wait; |
453 | init_waitqueue_head(&tport->tp_msr_wait); | 446 | init_waitqueue_head(&tport->tp_msr_wait); |
454 | init_waitqueue_head(&tport->tp_write_wait); | 447 | init_waitqueue_head(&tport->tp_write_wait); |
@@ -528,10 +521,6 @@ static int ti_open(struct tty_struct *tty, | |||
528 | if (mutex_lock_interruptible(&tdev->td_open_close_lock)) | 521 | if (mutex_lock_interruptible(&tdev->td_open_close_lock)) |
529 | return -ERESTARTSYS; | 522 | return -ERESTARTSYS; |
530 | 523 | ||
531 | if (tty) | ||
532 | tty->low_latency = | ||
533 | (tport->tp_flags & ASYNC_LOW_LATENCY) ? 1 : 0; | ||
534 | |||
535 | port_number = port->number - port->serial->minor; | 524 | port_number = port->number - port->serial->minor; |
536 | 525 | ||
537 | memset(&(tport->tp_icount), 0x00, sizeof(tport->tp_icount)); | 526 | memset(&(tport->tp_icount), 0x00, sizeof(tport->tp_icount)); |
@@ -1215,20 +1204,22 @@ static void ti_bulk_in_callback(struct urb *urb) | |||
1215 | } | 1204 | } |
1216 | 1205 | ||
1217 | tty = tty_port_tty_get(&port->port); | 1206 | tty = tty_port_tty_get(&port->port); |
1218 | if (tty && urb->actual_length) { | 1207 | if (tty) { |
1219 | usb_serial_debug_data(debug, dev, __func__, | 1208 | if (urb->actual_length) { |
1220 | urb->actual_length, urb->transfer_buffer); | 1209 | usb_serial_debug_data(debug, dev, __func__, |
1221 | 1210 | urb->actual_length, urb->transfer_buffer); | |
1222 | if (!tport->tp_is_open) | 1211 | |
1223 | dbg("%s - port closed, dropping data", __func__); | 1212 | if (!tport->tp_is_open) |
1224 | else | 1213 | dbg("%s - port closed, dropping data", |
1225 | ti_recv(&urb->dev->dev, tty, | 1214 | __func__); |
1215 | else | ||
1216 | ti_recv(&urb->dev->dev, tty, | ||
1226 | urb->transfer_buffer, | 1217 | urb->transfer_buffer, |
1227 | urb->actual_length); | 1218 | urb->actual_length); |
1228 | 1219 | spin_lock(&tport->tp_lock); | |
1229 | spin_lock(&tport->tp_lock); | 1220 | tport->tp_icount.rx += urb->actual_length; |
1230 | tport->tp_icount.rx += urb->actual_length; | 1221 | spin_unlock(&tport->tp_lock); |
1231 | spin_unlock(&tport->tp_lock); | 1222 | } |
1232 | tty_kref_put(tty); | 1223 | tty_kref_put(tty); |
1233 | } | 1224 | } |
1234 | 1225 | ||
@@ -1452,7 +1443,6 @@ static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport, | |||
1452 | return -EFAULT; | 1443 | return -EFAULT; |
1453 | 1444 | ||
1454 | tport->tp_flags = new_serial.flags & TI_SET_SERIAL_FLAGS; | 1445 | tport->tp_flags = new_serial.flags & TI_SET_SERIAL_FLAGS; |
1455 | tty->low_latency = (tport->tp_flags & ASYNC_LOW_LATENCY) ? 1 : 0; | ||
1456 | tport->tp_closing_wait = new_serial.closing_wait; | 1446 | tport->tp_closing_wait = new_serial.closing_wait; |
1457 | 1447 | ||
1458 | return 0; | 1448 | return 0; |
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 2a70563bbee..0a566eea49c 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c | |||
@@ -137,22 +137,10 @@ static void destroy_serial(struct kref *kref) | |||
137 | 137 | ||
138 | dbg("%s - %s", __func__, serial->type->description); | 138 | dbg("%s - %s", __func__, serial->type->description); |
139 | 139 | ||
140 | serial->type->shutdown(serial); | ||
141 | |||
142 | /* return the minor range that this device had */ | 140 | /* return the minor range that this device had */ |
143 | if (serial->minor != SERIAL_TTY_NO_MINOR) | 141 | if (serial->minor != SERIAL_TTY_NO_MINOR) |
144 | return_serial(serial); | 142 | return_serial(serial); |
145 | 143 | ||
146 | for (i = 0; i < serial->num_ports; ++i) | ||
147 | serial->port[i]->port.count = 0; | ||
148 | |||
149 | /* the ports are cleaned up and released in port_release() */ | ||
150 | for (i = 0; i < serial->num_ports; ++i) | ||
151 | if (serial->port[i]->dev.parent != NULL) { | ||
152 | device_unregister(&serial->port[i]->dev); | ||
153 | serial->port[i] = NULL; | ||
154 | } | ||
155 | |||
156 | /* If this is a "fake" port, we have to clean it up here, as it will | 144 | /* If this is a "fake" port, we have to clean it up here, as it will |
157 | * not get cleaned up in port_release() as it was never registered with | 145 | * not get cleaned up in port_release() as it was never registered with |
158 | * the driver core */ | 146 | * the driver core */ |
@@ -187,7 +175,7 @@ static int serial_open (struct tty_struct *tty, struct file *filp) | |||
187 | struct usb_serial *serial; | 175 | struct usb_serial *serial; |
188 | struct usb_serial_port *port; | 176 | struct usb_serial_port *port; |
189 | unsigned int portNumber; | 177 | unsigned int portNumber; |
190 | int retval; | 178 | int retval = 0; |
191 | 179 | ||
192 | dbg("%s", __func__); | 180 | dbg("%s", __func__); |
193 | 181 | ||
@@ -198,21 +186,24 @@ static int serial_open (struct tty_struct *tty, struct file *filp) | |||
198 | return -ENODEV; | 186 | return -ENODEV; |
199 | } | 187 | } |
200 | 188 | ||
189 | mutex_lock(&serial->disc_mutex); | ||
201 | portNumber = tty->index - serial->minor; | 190 | portNumber = tty->index - serial->minor; |
202 | port = serial->port[portNumber]; | 191 | port = serial->port[portNumber]; |
203 | if (!port) { | 192 | if (!port || serial->disconnected) |
204 | retval = -ENODEV; | ||
205 | goto bailout_kref_put; | ||
206 | } | ||
207 | |||
208 | if (port->serial->disconnected) { | ||
209 | retval = -ENODEV; | 193 | retval = -ENODEV; |
210 | goto bailout_kref_put; | 194 | else |
211 | } | 195 | get_device(&port->dev); |
196 | /* | ||
197 | * Note: Our locking order requirement does not allow port->mutex | ||
198 | * to be acquired while serial->disc_mutex is held. | ||
199 | */ | ||
200 | mutex_unlock(&serial->disc_mutex); | ||
201 | if (retval) | ||
202 | goto bailout_serial_put; | ||
212 | 203 | ||
213 | if (mutex_lock_interruptible(&port->mutex)) { | 204 | if (mutex_lock_interruptible(&port->mutex)) { |
214 | retval = -ERESTARTSYS; | 205 | retval = -ERESTARTSYS; |
215 | goto bailout_kref_put; | 206 | goto bailout_port_put; |
216 | } | 207 | } |
217 | 208 | ||
218 | ++port->port.count; | 209 | ++port->port.count; |
@@ -232,14 +223,20 @@ static int serial_open (struct tty_struct *tty, struct file *filp) | |||
232 | goto bailout_mutex_unlock; | 223 | goto bailout_mutex_unlock; |
233 | } | 224 | } |
234 | 225 | ||
235 | retval = usb_autopm_get_interface(serial->interface); | 226 | mutex_lock(&serial->disc_mutex); |
227 | if (serial->disconnected) | ||
228 | retval = -ENODEV; | ||
229 | else | ||
230 | retval = usb_autopm_get_interface(serial->interface); | ||
236 | if (retval) | 231 | if (retval) |
237 | goto bailout_module_put; | 232 | goto bailout_module_put; |
233 | |||
238 | /* only call the device specific open if this | 234 | /* only call the device specific open if this |
239 | * is the first time the port is opened */ | 235 | * is the first time the port is opened */ |
240 | retval = serial->type->open(tty, port, filp); | 236 | retval = serial->type->open(tty, port, filp); |
241 | if (retval) | 237 | if (retval) |
242 | goto bailout_interface_put; | 238 | goto bailout_interface_put; |
239 | mutex_unlock(&serial->disc_mutex); | ||
243 | } | 240 | } |
244 | 241 | ||
245 | mutex_unlock(&port->mutex); | 242 | mutex_unlock(&port->mutex); |
@@ -248,13 +245,16 @@ static int serial_open (struct tty_struct *tty, struct file *filp) | |||
248 | bailout_interface_put: | 245 | bailout_interface_put: |
249 | usb_autopm_put_interface(serial->interface); | 246 | usb_autopm_put_interface(serial->interface); |
250 | bailout_module_put: | 247 | bailout_module_put: |
248 | mutex_unlock(&serial->disc_mutex); | ||
251 | module_put(serial->type->driver.owner); | 249 | module_put(serial->type->driver.owner); |
252 | bailout_mutex_unlock: | 250 | bailout_mutex_unlock: |
253 | port->port.count = 0; | 251 | port->port.count = 0; |
254 | tty->driver_data = NULL; | 252 | tty->driver_data = NULL; |
255 | tty_port_tty_set(&port->port, NULL); | 253 | tty_port_tty_set(&port->port, NULL); |
256 | mutex_unlock(&port->mutex); | 254 | mutex_unlock(&port->mutex); |
257 | bailout_kref_put: | 255 | bailout_port_put: |
256 | put_device(&port->dev); | ||
257 | bailout_serial_put: | ||
258 | usb_serial_put(serial); | 258 | usb_serial_put(serial); |
259 | return retval; | 259 | return retval; |
260 | } | 260 | } |
@@ -262,6 +262,9 @@ bailout_kref_put: | |||
262 | static void serial_close(struct tty_struct *tty, struct file *filp) | 262 | static void serial_close(struct tty_struct *tty, struct file *filp) |
263 | { | 263 | { |
264 | struct usb_serial_port *port = tty->driver_data; | 264 | struct usb_serial_port *port = tty->driver_data; |
265 | struct usb_serial *serial; | ||
266 | struct module *owner; | ||
267 | int count; | ||
265 | 268 | ||
266 | if (!port) | 269 | if (!port) |
267 | return; | 270 | return; |
@@ -269,6 +272,8 @@ static void serial_close(struct tty_struct *tty, struct file *filp) | |||
269 | dbg("%s - port %d", __func__, port->number); | 272 | dbg("%s - port %d", __func__, port->number); |
270 | 273 | ||
271 | mutex_lock(&port->mutex); | 274 | mutex_lock(&port->mutex); |
275 | serial = port->serial; | ||
276 | owner = serial->type->driver.owner; | ||
272 | 277 | ||
273 | if (port->port.count == 0) { | 278 | if (port->port.count == 0) { |
274 | mutex_unlock(&port->mutex); | 279 | mutex_unlock(&port->mutex); |
@@ -281,7 +286,7 @@ static void serial_close(struct tty_struct *tty, struct file *filp) | |||
281 | * this before we drop the port count. The call is protected | 286 | * this before we drop the port count. The call is protected |
282 | * by the port mutex | 287 | * by the port mutex |
283 | */ | 288 | */ |
284 | port->serial->type->close(tty, port, filp); | 289 | serial->type->close(tty, port, filp); |
285 | 290 | ||
286 | if (port->port.count == (port->console ? 2 : 1)) { | 291 | if (port->port.count == (port->console ? 2 : 1)) { |
287 | struct tty_struct *tty = tty_port_tty_get(&port->port); | 292 | struct tty_struct *tty = tty_port_tty_get(&port->port); |
@@ -295,17 +300,23 @@ static void serial_close(struct tty_struct *tty, struct file *filp) | |||
295 | } | 300 | } |
296 | } | 301 | } |
297 | 302 | ||
298 | if (port->port.count == 1) { | ||
299 | mutex_lock(&port->serial->disc_mutex); | ||
300 | if (!port->serial->disconnected) | ||
301 | usb_autopm_put_interface(port->serial->interface); | ||
302 | mutex_unlock(&port->serial->disc_mutex); | ||
303 | module_put(port->serial->type->driver.owner); | ||
304 | } | ||
305 | --port->port.count; | 303 | --port->port.count; |
306 | 304 | count = port->port.count; | |
307 | mutex_unlock(&port->mutex); | 305 | mutex_unlock(&port->mutex); |
308 | usb_serial_put(port->serial); | 306 | put_device(&port->dev); |
307 | |||
308 | /* Mustn't dereference port any more */ | ||
309 | if (count == 0) { | ||
310 | mutex_lock(&serial->disc_mutex); | ||
311 | if (!serial->disconnected) | ||
312 | usb_autopm_put_interface(serial->interface); | ||
313 | mutex_unlock(&serial->disc_mutex); | ||
314 | } | ||
315 | usb_serial_put(serial); | ||
316 | |||
317 | /* Mustn't dereference serial any more */ | ||
318 | if (count == 0) | ||
319 | module_put(owner); | ||
309 | } | 320 | } |
310 | 321 | ||
311 | static int serial_write(struct tty_struct *tty, const unsigned char *buf, | 322 | static int serial_write(struct tty_struct *tty, const unsigned char *buf, |
@@ -549,7 +560,13 @@ static void kill_traffic(struct usb_serial_port *port) | |||
549 | 560 | ||
550 | static void port_free(struct usb_serial_port *port) | 561 | static void port_free(struct usb_serial_port *port) |
551 | { | 562 | { |
563 | /* | ||
564 | * Stop all the traffic before cancelling the work, so that | ||
565 | * nobody will restart it by calling usb_serial_port_softint. | ||
566 | */ | ||
552 | kill_traffic(port); | 567 | kill_traffic(port); |
568 | cancel_work_sync(&port->work); | ||
569 | |||
553 | usb_free_urb(port->read_urb); | 570 | usb_free_urb(port->read_urb); |
554 | usb_free_urb(port->write_urb); | 571 | usb_free_urb(port->write_urb); |
555 | usb_free_urb(port->interrupt_in_urb); | 572 | usb_free_urb(port->interrupt_in_urb); |
@@ -558,7 +575,6 @@ static void port_free(struct usb_serial_port *port) | |||
558 | kfree(port->bulk_out_buffer); | 575 | kfree(port->bulk_out_buffer); |
559 | kfree(port->interrupt_in_buffer); | 576 | kfree(port->interrupt_in_buffer); |
560 | kfree(port->interrupt_out_buffer); | 577 | kfree(port->interrupt_out_buffer); |
561 | flush_scheduled_work(); /* port->work */ | ||
562 | kfree(port); | 578 | kfree(port); |
563 | } | 579 | } |
564 | 580 | ||
@@ -1043,6 +1059,12 @@ void usb_serial_disconnect(struct usb_interface *interface) | |||
1043 | usb_set_intfdata(interface, NULL); | 1059 | usb_set_intfdata(interface, NULL); |
1044 | /* must set a flag, to signal subdrivers */ | 1060 | /* must set a flag, to signal subdrivers */ |
1045 | serial->disconnected = 1; | 1061 | serial->disconnected = 1; |
1062 | mutex_unlock(&serial->disc_mutex); | ||
1063 | |||
1064 | /* Unfortunately, many of the sub-drivers expect the port structures | ||
1065 | * to exist when their shutdown method is called, so we have to go | ||
1066 | * through this awkward two-step unregistration procedure. | ||
1067 | */ | ||
1046 | for (i = 0; i < serial->num_ports; ++i) { | 1068 | for (i = 0; i < serial->num_ports; ++i) { |
1047 | port = serial->port[i]; | 1069 | port = serial->port[i]; |
1048 | if (port) { | 1070 | if (port) { |
@@ -1052,11 +1074,21 @@ void usb_serial_disconnect(struct usb_interface *interface) | |||
1052 | tty_kref_put(tty); | 1074 | tty_kref_put(tty); |
1053 | } | 1075 | } |
1054 | kill_traffic(port); | 1076 | kill_traffic(port); |
1077 | cancel_work_sync(&port->work); | ||
1078 | device_del(&port->dev); | ||
1079 | } | ||
1080 | } | ||
1081 | serial->type->shutdown(serial); | ||
1082 | for (i = 0; i < serial->num_ports; ++i) { | ||
1083 | port = serial->port[i]; | ||
1084 | if (port) { | ||
1085 | put_device(&port->dev); | ||
1086 | serial->port[i] = NULL; | ||
1055 | } | 1087 | } |
1056 | } | 1088 | } |
1089 | |||
1057 | /* let the last holder of this object | 1090 | /* let the last holder of this object |
1058 | * cause it to be cleaned up */ | 1091 | * cause it to be cleaned up */ |
1059 | mutex_unlock(&serial->disc_mutex); | ||
1060 | usb_serial_put(serial); | 1092 | usb_serial_put(serial); |
1061 | dev_info(dev, "device disconnected\n"); | 1093 | dev_info(dev, "device disconnected\n"); |
1062 | } | 1094 | } |
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c index 4facce3d936..5ac414bda71 100644 --- a/drivers/usb/serial/visor.c +++ b/drivers/usb/serial/visor.c | |||
@@ -296,14 +296,6 @@ static int visor_open(struct tty_struct *tty, struct usb_serial_port *port, | |||
296 | priv->throttled = 0; | 296 | priv->throttled = 0; |
297 | spin_unlock_irqrestore(&priv->lock, flags); | 297 | spin_unlock_irqrestore(&priv->lock, flags); |
298 | 298 | ||
299 | /* | ||
300 | * Force low_latency on so that our tty_push actually forces the data | ||
301 | * through, otherwise it is scheduled, and with high data rates (like | ||
302 | * with OHCI) data can get lost. | ||
303 | */ | ||
304 | if (tty) | ||
305 | tty->low_latency = 1; | ||
306 | |||
307 | /* Start reading from the device */ | 299 | /* Start reading from the device */ |
308 | usb_fill_bulk_urb(port->read_urb, serial->dev, | 300 | usb_fill_bulk_urb(port->read_urb, serial->dev, |
309 | usb_rcvbulkpipe(serial->dev, | 301 | usb_rcvbulkpipe(serial->dev, |
diff --git a/drivers/usb/storage/Makefile b/drivers/usb/storage/Makefile index 5be54c01966..ef7e5a8ceab 100644 --- a/drivers/usb/storage/Makefile +++ b/drivers/usb/storage/Makefile | |||
@@ -17,7 +17,8 @@ usb-storage-objs := scsiglue.o protocol.o transport.o usb.o \ | |||
17 | ifeq ($(CONFIG_USB_LIBUSUAL),) | 17 | ifeq ($(CONFIG_USB_LIBUSUAL),) |
18 | usb-storage-objs += usual-tables.o | 18 | usb-storage-objs += usual-tables.o |
19 | else | 19 | else |
20 | obj-$(CONFIG_USB) += libusual.o usual-tables.o | 20 | obj-$(CONFIG_USB) += usb-libusual.o |
21 | usb-libusual-objs := libusual.o usual-tables.o | ||
21 | endif | 22 | endif |
22 | 23 | ||
23 | obj-$(CONFIG_USB_STORAGE_ALAUDA) += ums-alauda.o | 24 | obj-$(CONFIG_USB_STORAGE_ALAUDA) += ums-alauda.o |
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c index 49aedb36dc1..fcb32021721 100644 --- a/drivers/usb/storage/transport.c +++ b/drivers/usb/storage/transport.c | |||
@@ -247,10 +247,8 @@ int usb_stor_clear_halt(struct us_data *us, unsigned int pipe) | |||
247 | USB_ENDPOINT_HALT, endp, | 247 | USB_ENDPOINT_HALT, endp, |
248 | NULL, 0, 3*HZ); | 248 | NULL, 0, 3*HZ); |
249 | 249 | ||
250 | /* reset the endpoint toggle */ | ||
251 | if (result >= 0) | 250 | if (result >= 0) |
252 | usb_settoggle(us->pusb_dev, usb_pipeendpoint(pipe), | 251 | usb_reset_endpoint(us->pusb_dev, endp); |
253 | usb_pipeout(pipe), 0); | ||
254 | 252 | ||
255 | US_DEBUGP("%s: result = %d\n", __func__, result); | 253 | US_DEBUGP("%s: result = %d\n", __func__, result); |
256 | return result; | 254 | return result; |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 1c1f643e8a7..fa65a3b0860 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -975,12 +975,14 @@ UNUSUAL_DEV( 0x07c4, 0xa400, 0x0000, 0xffff, | |||
975 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 975 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
976 | US_FL_FIX_INQUIRY | US_FL_FIX_CAPACITY ), | 976 | US_FL_FIX_INQUIRY | US_FL_FIX_CAPACITY ), |
977 | 977 | ||
978 | /* Reported by Rauch Wolke <rauchwolke@gmx.net> */ | 978 | /* Reported by Rauch Wolke <rauchwolke@gmx.net> |
979 | * and augmented by binbin <binbinsh@gmail.com> (Bugzilla #12882) | ||
980 | */ | ||
979 | UNUSUAL_DEV( 0x07c4, 0xa4a5, 0x0000, 0xffff, | 981 | UNUSUAL_DEV( 0x07c4, 0xa4a5, 0x0000, 0xffff, |
980 | "Simple Tech/Datafab", | 982 | "Simple Tech/Datafab", |
981 | "CF+SM Reader", | 983 | "CF+SM Reader", |
982 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 984 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
983 | US_FL_IGNORE_RESIDUE ), | 985 | US_FL_IGNORE_RESIDUE | US_FL_MAX_SECTORS_64 ), |
984 | 986 | ||
985 | /* Casio QV 2x00/3x00/4000/8000 digital still cameras are not conformant | 987 | /* Casio QV 2x00/3x00/4000/8000 digital still cameras are not conformant |
986 | * to the USB storage specification in two ways: | 988 | * to the USB storage specification in two ways: |
@@ -1376,6 +1378,14 @@ UNUSUAL_DEV( 0x10d6, 0x2200, 0x0100, 0x0100, | |||
1376 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1378 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1377 | 0), | 1379 | 0), |
1378 | 1380 | ||
1381 | /* Reported by Pascal Terjan <pterjan@mandriva.com> | ||
1382 | * Ignore driver CD mode and force into modem mode by default. | ||
1383 | */ | ||
1384 | UNUSUAL_DEV( 0x1186, 0x3e04, 0x0000, 0x0000, | ||
1385 | "D-Link", | ||
1386 | "USB Mass Storage", | ||
1387 | US_SC_DEVICE, US_PR_DEVICE, option_ms_init, 0), | ||
1388 | |||
1379 | /* Reported by Kevin Lloyd <linux@sierrawireless.com> | 1389 | /* Reported by Kevin Lloyd <linux@sierrawireless.com> |
1380 | * Entry is needed for the initializer function override, | 1390 | * Entry is needed for the initializer function override, |
1381 | * which instructs the device to load as a modem | 1391 | * which instructs the device to load as a modem |
@@ -1841,6 +1851,12 @@ UNUSUAL_DEV( 0xed06, 0x4500, 0x0001, 0x0001, | |||
1841 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1851 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1842 | US_FL_CAPACITY_HEURISTICS), | 1852 | US_FL_CAPACITY_HEURISTICS), |
1843 | 1853 | ||
1854 | /* Reported by Alessio Treglia <quadrispro@ubuntu.com> */ | ||
1855 | UNUSUAL_DEV( 0xed10, 0x7636, 0x0001, 0x0001, | ||
1856 | "TGE", | ||
1857 | "Digital MP3 Audio Player", | ||
1858 | US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ), | ||
1859 | |||
1844 | /* Control/Bulk transport for all SubClass values */ | 1860 | /* Control/Bulk transport for all SubClass values */ |
1845 | USUAL_DEV(US_SC_RBC, US_PR_CB, USB_US_TYPE_STOR), | 1861 | USUAL_DEV(US_SC_RBC, US_PR_CB, USB_US_TYPE_STOR), |
1846 | USUAL_DEV(US_SC_8020, US_PR_CB, USB_US_TYPE_STOR), | 1862 | USUAL_DEV(US_SC_8020, US_PR_CB, USB_US_TYPE_STOR), |
diff --git a/drivers/usb/wusbcore/devconnect.c b/drivers/usb/wusbcore/devconnect.c index 386eaa22d21..4ac4300a3f9 100644 --- a/drivers/usb/wusbcore/devconnect.c +++ b/drivers/usb/wusbcore/devconnect.c | |||
@@ -267,6 +267,8 @@ static void wusbhc_devconnect_acked_work(struct work_struct *work) | |||
267 | mutex_lock(&wusbhc->mutex); | 267 | mutex_lock(&wusbhc->mutex); |
268 | wusbhc_devconnect_acked(wusbhc, wusb_dev); | 268 | wusbhc_devconnect_acked(wusbhc, wusb_dev); |
269 | mutex_unlock(&wusbhc->mutex); | 269 | mutex_unlock(&wusbhc->mutex); |
270 | |||
271 | wusb_dev_put(wusb_dev); | ||
270 | } | 272 | } |
271 | 273 | ||
272 | /* | 274 | /* |
@@ -396,7 +398,8 @@ static void __wusbhc_dev_disconnect(struct wusbhc *wusbhc, | |||
396 | 398 | ||
397 | /* After a device disconnects, change the GTK (see [WUSB] | 399 | /* After a device disconnects, change the GTK (see [WUSB] |
398 | * section 6.2.11.2). */ | 400 | * section 6.2.11.2). */ |
399 | wusbhc_gtk_rekey(wusbhc); | 401 | if (wusbhc->active) |
402 | wusbhc_gtk_rekey(wusbhc); | ||
400 | 403 | ||
401 | /* The Wireless USB part has forgotten about the device already; now | 404 | /* The Wireless USB part has forgotten about the device already; now |
402 | * khubd's timer will pick up the disconnection and remove the USB | 405 | * khubd's timer will pick up the disconnection and remove the USB |
@@ -1084,15 +1087,21 @@ error_mmcie_set: | |||
1084 | * wusbhc_devconnect_stop - stop managing connected devices | 1087 | * wusbhc_devconnect_stop - stop managing connected devices |
1085 | * @wusbhc: the WUSB HC | 1088 | * @wusbhc: the WUSB HC |
1086 | * | 1089 | * |
1087 | * Removes the Host Info IE and stops the keep alives. | 1090 | * Disconnects any devices still connected, stops the keep alives and |
1088 | * | 1091 | * removes the Host Info IE. |
1089 | * FIXME: should this disconnect all devices? | ||
1090 | */ | 1092 | */ |
1091 | void wusbhc_devconnect_stop(struct wusbhc *wusbhc) | 1093 | void wusbhc_devconnect_stop(struct wusbhc *wusbhc) |
1092 | { | 1094 | { |
1093 | cancel_delayed_work_sync(&wusbhc->keep_alive_timer); | 1095 | int i; |
1094 | WARN_ON(!list_empty(&wusbhc->cack_list)); | ||
1095 | 1096 | ||
1097 | mutex_lock(&wusbhc->mutex); | ||
1098 | for (i = 0; i < wusbhc->ports_max; i++) { | ||
1099 | if (wusbhc->port[i].wusb_dev) | ||
1100 | __wusbhc_dev_disconnect(wusbhc, &wusbhc->port[i]); | ||
1101 | } | ||
1102 | mutex_unlock(&wusbhc->mutex); | ||
1103 | |||
1104 | cancel_delayed_work_sync(&wusbhc->keep_alive_timer); | ||
1096 | wusbhc_mmcie_rm(wusbhc, &wusbhc->wuie_host_info->hdr); | 1105 | wusbhc_mmcie_rm(wusbhc, &wusbhc->wuie_host_info->hdr); |
1097 | kfree(wusbhc->wuie_host_info); | 1106 | kfree(wusbhc->wuie_host_info); |
1098 | wusbhc->wuie_host_info = NULL; | 1107 | wusbhc->wuie_host_info = NULL; |
diff --git a/drivers/usb/wusbcore/wusbhc.c b/drivers/usb/wusbcore/wusbhc.c index 07c63a31c79..ee6256f2363 100644 --- a/drivers/usb/wusbcore/wusbhc.c +++ b/drivers/usb/wusbcore/wusbhc.c | |||
@@ -88,33 +88,31 @@ static DEVICE_ATTR(wusb_trust_timeout, 0644, wusb_trust_timeout_show, | |||
88 | wusb_trust_timeout_store); | 88 | wusb_trust_timeout_store); |
89 | 89 | ||
90 | /* | 90 | /* |
91 | * Show & store the current WUSB CHID | 91 | * Show the current WUSB CHID. |
92 | */ | 92 | */ |
93 | static ssize_t wusb_chid_show(struct device *dev, | 93 | static ssize_t wusb_chid_show(struct device *dev, |
94 | struct device_attribute *attr, char *buf) | 94 | struct device_attribute *attr, char *buf) |
95 | { | 95 | { |
96 | struct wusbhc *wusbhc = usbhc_dev_to_wusbhc(dev); | 96 | struct wusbhc *wusbhc = usbhc_dev_to_wusbhc(dev); |
97 | const struct wusb_ckhdid *chid; | ||
97 | ssize_t result = 0; | 98 | ssize_t result = 0; |
98 | 99 | ||
99 | if (wusbhc->wuie_host_info != NULL) | 100 | if (wusbhc->wuie_host_info != NULL) |
100 | result += ckhdid_printf(buf, PAGE_SIZE, | 101 | chid = &wusbhc->wuie_host_info->CHID; |
101 | &wusbhc->wuie_host_info->CHID); | 102 | else |
103 | chid = &wusb_ckhdid_zero; | ||
104 | |||
105 | result += ckhdid_printf(buf, PAGE_SIZE, chid); | ||
106 | result += sprintf(buf + result, "\n"); | ||
107 | |||
102 | return result; | 108 | return result; |
103 | } | 109 | } |
104 | 110 | ||
105 | /* | 111 | /* |
106 | * Store a new CHID | 112 | * Store a new CHID. |
107 | * | ||
108 | * This will (FIXME) trigger many changes. | ||
109 | * | ||
110 | * - Send an all zeros CHID and it will stop the controller | ||
111 | * - Send a non-zero CHID and it will start it | ||
112 | * (unless it was started, it will just change the CHID, | ||
113 | * diconnecting all devices first). | ||
114 | * | 113 | * |
115 | * So first we scan the MMC we are sent and then we act on it. We | 114 | * - Write an all zeros CHID and it will stop the controller |
116 | * read it in the same format as we print it, an ASCII string of 16 | 115 | * - Write a non-zero CHID and it will start it. |
117 | * hex bytes. | ||
118 | * | 116 | * |
119 | * See wusbhc_chid_set() for more info. | 117 | * See wusbhc_chid_set() for more info. |
120 | */ | 118 | */ |
@@ -339,13 +337,15 @@ void wusbhc_giveback_urb(struct wusbhc *wusbhc, struct urb *urb, int status) | |||
339 | { | 337 | { |
340 | struct wusb_dev *wusb_dev = __wusb_dev_get_by_usb_dev(wusbhc, urb->dev); | 338 | struct wusb_dev *wusb_dev = __wusb_dev_get_by_usb_dev(wusbhc, urb->dev); |
341 | 339 | ||
342 | if (status == 0) { | 340 | if (status == 0 && wusb_dev) { |
343 | wusb_dev->entry_ts = jiffies; | 341 | wusb_dev->entry_ts = jiffies; |
344 | 342 | ||
345 | /* wusbhc_devconnect_acked() can't be called from from | 343 | /* wusbhc_devconnect_acked() can't be called from |
346 | atomic context so defer it to a work queue. */ | 344 | atomic context so defer it to a work queue. */ |
347 | if (!list_empty(&wusb_dev->cack_node)) | 345 | if (!list_empty(&wusb_dev->cack_node)) |
348 | queue_work(wusbd, &wusb_dev->devconnect_acked_work); | 346 | queue_work(wusbd, &wusb_dev->devconnect_acked_work); |
347 | else | ||
348 | wusb_dev_put(wusb_dev); | ||
349 | } | 349 | } |
350 | 350 | ||
351 | usb_hcd_giveback_urb(&wusbhc->usb_hcd, urb, status); | 351 | usb_hcd_giveback_urb(&wusbhc->usb_hcd, urb, status); |
diff --git a/drivers/video/asiliantfb.c b/drivers/video/asiliantfb.c index 1a1f946d8fe..9fe90ce928f 100644 --- a/drivers/video/asiliantfb.c +++ b/drivers/video/asiliantfb.c | |||
@@ -533,6 +533,7 @@ static int __devinit init_asiliant(struct fb_info *p, unsigned long addr) | |||
533 | 533 | ||
534 | writeb(0xff, mmio_base + 0x78c); | 534 | writeb(0xff, mmio_base + 0x78c); |
535 | chips_hw_init(p); | 535 | chips_hw_init(p); |
536 | return 0; | ||
536 | } | 537 | } |
537 | 538 | ||
538 | static int __devinit | 539 | static int __devinit |
diff --git a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c index 16bb7e3c031..6c37e8ee5ef 100644 --- a/drivers/video/aty/radeon_base.c +++ b/drivers/video/aty/radeon_base.c | |||
@@ -698,8 +698,8 @@ static void __devinit radeon_get_pllinfo(struct radeonfb_info *rinfo) | |||
698 | found: | 698 | found: |
699 | /* | 699 | /* |
700 | * Some methods fail to retrieve SCLK and MCLK values, we apply default | 700 | * Some methods fail to retrieve SCLK and MCLK values, we apply default |
701 | * settings in this case (200Mhz). If that really happne often, we could | 701 | * settings in this case (200Mhz). If that really happens often, we |
702 | * fetch from registers instead... | 702 | * could fetch from registers instead... |
703 | */ | 703 | */ |
704 | if (rinfo->pll.mclk == 0) | 704 | if (rinfo->pll.mclk == 0) |
705 | rinfo->pll.mclk = 20000; | 705 | rinfo->pll.mclk = 20000; |
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index dd37cbcaf8c..157057c79ca 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c | |||
@@ -35,8 +35,6 @@ static int fb_notifier_callback(struct notifier_block *self, | |||
35 | return 0; | 35 | return 0; |
36 | 36 | ||
37 | bd = container_of(self, struct backlight_device, fb_notif); | 37 | bd = container_of(self, struct backlight_device, fb_notif); |
38 | if (!lock_fb_info(evdata->info)) | ||
39 | return -ENODEV; | ||
40 | mutex_lock(&bd->ops_lock); | 38 | mutex_lock(&bd->ops_lock); |
41 | if (bd->ops) | 39 | if (bd->ops) |
42 | if (!bd->ops->check_fb || | 40 | if (!bd->ops->check_fb || |
@@ -49,7 +47,6 @@ static int fb_notifier_callback(struct notifier_block *self, | |||
49 | backlight_update_status(bd); | 47 | backlight_update_status(bd); |
50 | } | 48 | } |
51 | mutex_unlock(&bd->ops_lock); | 49 | mutex_unlock(&bd->ops_lock); |
52 | unlock_fb_info(evdata->info); | ||
53 | return 0; | 50 | return 0; |
54 | } | 51 | } |
55 | 52 | ||
diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c index 0bb13df0fa8..b6449470106 100644 --- a/drivers/video/backlight/lcd.c +++ b/drivers/video/backlight/lcd.c | |||
@@ -40,8 +40,6 @@ static int fb_notifier_callback(struct notifier_block *self, | |||
40 | if (!ld->ops) | 40 | if (!ld->ops) |
41 | return 0; | 41 | return 0; |
42 | 42 | ||
43 | if (!lock_fb_info(evdata->info)) | ||
44 | return -ENODEV; | ||
45 | mutex_lock(&ld->ops_lock); | 43 | mutex_lock(&ld->ops_lock); |
46 | if (!ld->ops->check_fb || ld->ops->check_fb(ld, evdata->info)) { | 44 | if (!ld->ops->check_fb || ld->ops->check_fb(ld, evdata->info)) { |
47 | if (event == FB_EVENT_BLANK) { | 45 | if (event == FB_EVENT_BLANK) { |
@@ -53,7 +51,6 @@ static int fb_notifier_callback(struct notifier_block *self, | |||
53 | } | 51 | } |
54 | } | 52 | } |
55 | mutex_unlock(&ld->ops_lock); | 53 | mutex_unlock(&ld->ops_lock); |
56 | unlock_fb_info(evdata->info); | ||
57 | return 0; | 54 | return 0; |
58 | } | 55 | } |
59 | 56 | ||
diff --git a/drivers/video/cirrusfb.c b/drivers/video/cirrusfb.c index d42e385f091..4c2bf923418 100644 --- a/drivers/video/cirrusfb.c +++ b/drivers/video/cirrusfb.c | |||
@@ -567,9 +567,7 @@ static int cirrusfb_check_var(struct fb_var_screeninfo *var, | |||
567 | default: | 567 | default: |
568 | dev_dbg(info->device, | 568 | dev_dbg(info->device, |
569 | "Unsupported bpp size: %d\n", var->bits_per_pixel); | 569 | "Unsupported bpp size: %d\n", var->bits_per_pixel); |
570 | assert(false); | 570 | return -EINVAL; |
571 | /* should never occur */ | ||
572 | break; | ||
573 | } | 571 | } |
574 | 572 | ||
575 | if (var->xres_virtual < var->xres) | 573 | if (var->xres_virtual < var->xres) |
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 2cd500a304f..471a9a60376 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -2263,9 +2263,12 @@ static void fbcon_generic_blank(struct vc_data *vc, struct fb_info *info, | |||
2263 | } | 2263 | } |
2264 | 2264 | ||
2265 | 2265 | ||
2266 | if (!lock_fb_info(info)) | ||
2267 | return; | ||
2266 | event.info = info; | 2268 | event.info = info; |
2267 | event.data = ␣ | 2269 | event.data = ␣ |
2268 | fb_notifier_call_chain(FB_EVENT_CONBLANK, &event); | 2270 | fb_notifier_call_chain(FB_EVENT_CONBLANK, &event); |
2271 | unlock_fb_info(info); | ||
2269 | } | 2272 | } |
2270 | 2273 | ||
2271 | static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) | 2274 | static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) |
@@ -2956,8 +2959,6 @@ static int fbcon_fb_unregistered(struct fb_info *info) | |||
2956 | { | 2959 | { |
2957 | int i, idx; | 2960 | int i, idx; |
2958 | 2961 | ||
2959 | if (!lock_fb_info(info)) | ||
2960 | return -ENODEV; | ||
2961 | idx = info->node; | 2962 | idx = info->node; |
2962 | for (i = first_fb_vc; i <= last_fb_vc; i++) { | 2963 | for (i = first_fb_vc; i <= last_fb_vc; i++) { |
2963 | if (con2fb_map[i] == idx) | 2964 | if (con2fb_map[i] == idx) |
@@ -2985,8 +2986,6 @@ static int fbcon_fb_unregistered(struct fb_info *info) | |||
2985 | if (primary_device == idx) | 2986 | if (primary_device == idx) |
2986 | primary_device = -1; | 2987 | primary_device = -1; |
2987 | 2988 | ||
2988 | unlock_fb_info(info); | ||
2989 | |||
2990 | if (!num_registered_fb) | 2989 | if (!num_registered_fb) |
2991 | unregister_con_driver(&fb_con); | 2990 | unregister_con_driver(&fb_con); |
2992 | 2991 | ||
@@ -3027,11 +3026,8 @@ static int fbcon_fb_registered(struct fb_info *info) | |||
3027 | { | 3026 | { |
3028 | int ret = 0, i, idx; | 3027 | int ret = 0, i, idx; |
3029 | 3028 | ||
3030 | if (!lock_fb_info(info)) | ||
3031 | return -ENODEV; | ||
3032 | idx = info->node; | 3029 | idx = info->node; |
3033 | fbcon_select_primary(info); | 3030 | fbcon_select_primary(info); |
3034 | unlock_fb_info(info); | ||
3035 | 3031 | ||
3036 | if (info_idx == -1) { | 3032 | if (info_idx == -1) { |
3037 | for (i = first_fb_vc; i <= last_fb_vc; i++) { | 3033 | for (i = first_fb_vc; i <= last_fb_vc; i++) { |
@@ -3152,53 +3148,23 @@ static int fbcon_event_notify(struct notifier_block *self, | |||
3152 | 3148 | ||
3153 | switch(action) { | 3149 | switch(action) { |
3154 | case FB_EVENT_SUSPEND: | 3150 | case FB_EVENT_SUSPEND: |
3155 | if (!lock_fb_info(info)) { | ||
3156 | ret = -ENODEV; | ||
3157 | goto done; | ||
3158 | } | ||
3159 | fbcon_suspended(info); | 3151 | fbcon_suspended(info); |
3160 | unlock_fb_info(info); | ||
3161 | break; | 3152 | break; |
3162 | case FB_EVENT_RESUME: | 3153 | case FB_EVENT_RESUME: |
3163 | if (!lock_fb_info(info)) { | ||
3164 | ret = -ENODEV; | ||
3165 | goto done; | ||
3166 | } | ||
3167 | fbcon_resumed(info); | 3154 | fbcon_resumed(info); |
3168 | unlock_fb_info(info); | ||
3169 | break; | 3155 | break; |
3170 | case FB_EVENT_MODE_CHANGE: | 3156 | case FB_EVENT_MODE_CHANGE: |
3171 | if (!lock_fb_info(info)) { | ||
3172 | ret = -ENODEV; | ||
3173 | goto done; | ||
3174 | } | ||
3175 | fbcon_modechanged(info); | 3157 | fbcon_modechanged(info); |
3176 | unlock_fb_info(info); | ||
3177 | break; | 3158 | break; |
3178 | case FB_EVENT_MODE_CHANGE_ALL: | 3159 | case FB_EVENT_MODE_CHANGE_ALL: |
3179 | if (!lock_fb_info(info)) { | ||
3180 | ret = -ENODEV; | ||
3181 | goto done; | ||
3182 | } | ||
3183 | fbcon_set_all_vcs(info); | 3160 | fbcon_set_all_vcs(info); |
3184 | unlock_fb_info(info); | ||
3185 | break; | 3161 | break; |
3186 | case FB_EVENT_MODE_DELETE: | 3162 | case FB_EVENT_MODE_DELETE: |
3187 | mode = event->data; | 3163 | mode = event->data; |
3188 | if (!lock_fb_info(info)) { | ||
3189 | ret = -ENODEV; | ||
3190 | goto done; | ||
3191 | } | ||
3192 | ret = fbcon_mode_deleted(info, mode); | 3164 | ret = fbcon_mode_deleted(info, mode); |
3193 | unlock_fb_info(info); | ||
3194 | break; | 3165 | break; |
3195 | case FB_EVENT_FB_UNBIND: | 3166 | case FB_EVENT_FB_UNBIND: |
3196 | if (!lock_fb_info(info)) { | ||
3197 | ret = -ENODEV; | ||
3198 | goto done; | ||
3199 | } | ||
3200 | idx = info->node; | 3167 | idx = info->node; |
3201 | unlock_fb_info(info); | ||
3202 | ret = fbcon_fb_unbind(idx); | 3168 | ret = fbcon_fb_unbind(idx); |
3203 | break; | 3169 | break; |
3204 | case FB_EVENT_FB_REGISTERED: | 3170 | case FB_EVENT_FB_REGISTERED: |
@@ -3217,29 +3183,14 @@ static int fbcon_event_notify(struct notifier_block *self, | |||
3217 | con2fb->framebuffer = con2fb_map[con2fb->console - 1]; | 3183 | con2fb->framebuffer = con2fb_map[con2fb->console - 1]; |
3218 | break; | 3184 | break; |
3219 | case FB_EVENT_BLANK: | 3185 | case FB_EVENT_BLANK: |
3220 | if (!lock_fb_info(info)) { | ||
3221 | ret = -ENODEV; | ||
3222 | goto done; | ||
3223 | } | ||
3224 | fbcon_fb_blanked(info, *(int *)event->data); | 3186 | fbcon_fb_blanked(info, *(int *)event->data); |
3225 | unlock_fb_info(info); | ||
3226 | break; | 3187 | break; |
3227 | case FB_EVENT_NEW_MODELIST: | 3188 | case FB_EVENT_NEW_MODELIST: |
3228 | if (!lock_fb_info(info)) { | ||
3229 | ret = -ENODEV; | ||
3230 | goto done; | ||
3231 | } | ||
3232 | fbcon_new_modelist(info); | 3189 | fbcon_new_modelist(info); |
3233 | unlock_fb_info(info); | ||
3234 | break; | 3190 | break; |
3235 | case FB_EVENT_GET_REQ: | 3191 | case FB_EVENT_GET_REQ: |
3236 | caps = event->data; | 3192 | caps = event->data; |
3237 | if (!lock_fb_info(info)) { | ||
3238 | ret = -ENODEV; | ||
3239 | goto done; | ||
3240 | } | ||
3241 | fbcon_get_requirement(info, caps); | 3193 | fbcon_get_requirement(info, caps); |
3242 | unlock_fb_info(info); | ||
3243 | break; | 3194 | break; |
3244 | } | 3195 | } |
3245 | done: | 3196 | done: |
diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c index 0c5b9a9fd56..8dea2bc9270 100644 --- a/drivers/video/efifb.c +++ b/drivers/video/efifb.c | |||
@@ -210,12 +210,15 @@ static int __init efifb_probe(struct platform_device *dev) | |||
210 | unsigned int size_total; | 210 | unsigned int size_total; |
211 | int request_succeeded = 0; | 211 | int request_succeeded = 0; |
212 | 212 | ||
213 | printk(KERN_INFO "efifb: probing for efifb\n"); | ||
214 | |||
215 | if (!screen_info.lfb_depth) | 213 | if (!screen_info.lfb_depth) |
216 | screen_info.lfb_depth = 32; | 214 | screen_info.lfb_depth = 32; |
217 | if (!screen_info.pages) | 215 | if (!screen_info.pages) |
218 | screen_info.pages = 1; | 216 | screen_info.pages = 1; |
217 | if (!screen_info.lfb_base) { | ||
218 | printk(KERN_DEBUG "efifb: invalid framebuffer address\n"); | ||
219 | return -ENODEV; | ||
220 | } | ||
221 | printk(KERN_INFO "efifb: probing for efifb\n"); | ||
219 | 222 | ||
220 | /* just assume they're all unset if any are */ | 223 | /* just assume they're all unset if any are */ |
221 | if (!screen_info.blue_size) { | 224 | if (!screen_info.blue_size) { |
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index 2ac32e6b595..d412a1ddc12 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c | |||
@@ -1097,8 +1097,11 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, | |||
1097 | return -EINVAL; | 1097 | return -EINVAL; |
1098 | con2fb.framebuffer = -1; | 1098 | con2fb.framebuffer = -1; |
1099 | event.data = &con2fb; | 1099 | event.data = &con2fb; |
1100 | if (!lock_fb_info(info)) | ||
1101 | return -ENODEV; | ||
1100 | event.info = info; | 1102 | event.info = info; |
1101 | fb_notifier_call_chain(FB_EVENT_GET_CONSOLE_MAP, &event); | 1103 | fb_notifier_call_chain(FB_EVENT_GET_CONSOLE_MAP, &event); |
1104 | unlock_fb_info(info); | ||
1102 | ret = copy_to_user(argp, &con2fb, sizeof(con2fb)) ? -EFAULT : 0; | 1105 | ret = copy_to_user(argp, &con2fb, sizeof(con2fb)) ? -EFAULT : 0; |
1103 | break; | 1106 | break; |
1104 | case FBIOPUT_CON2FBMAP: | 1107 | case FBIOPUT_CON2FBMAP: |
@@ -1115,8 +1118,11 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, | |||
1115 | break; | 1118 | break; |
1116 | } | 1119 | } |
1117 | event.data = &con2fb; | 1120 | event.data = &con2fb; |
1121 | if (!lock_fb_info(info)) | ||
1122 | return -ENODEV; | ||
1118 | event.info = info; | 1123 | event.info = info; |
1119 | ret = fb_notifier_call_chain(FB_EVENT_SET_CONSOLE_MAP, &event); | 1124 | ret = fb_notifier_call_chain(FB_EVENT_SET_CONSOLE_MAP, &event); |
1125 | unlock_fb_info(info); | ||
1120 | break; | 1126 | break; |
1121 | case FBIOBLANK: | 1127 | case FBIOBLANK: |
1122 | if (!lock_fb_info(info)) | 1128 | if (!lock_fb_info(info)) |
@@ -1521,7 +1527,10 @@ register_framebuffer(struct fb_info *fb_info) | |||
1521 | registered_fb[i] = fb_info; | 1527 | registered_fb[i] = fb_info; |
1522 | 1528 | ||
1523 | event.info = fb_info; | 1529 | event.info = fb_info; |
1530 | if (!lock_fb_info(fb_info)) | ||
1531 | return -ENODEV; | ||
1524 | fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event); | 1532 | fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event); |
1533 | unlock_fb_info(fb_info); | ||
1525 | return 0; | 1534 | return 0; |
1526 | } | 1535 | } |
1527 | 1536 | ||
@@ -1555,8 +1564,12 @@ unregister_framebuffer(struct fb_info *fb_info) | |||
1555 | goto done; | 1564 | goto done; |
1556 | } | 1565 | } |
1557 | 1566 | ||
1567 | |||
1568 | if (!lock_fb_info(fb_info)) | ||
1569 | return -ENODEV; | ||
1558 | event.info = fb_info; | 1570 | event.info = fb_info; |
1559 | ret = fb_notifier_call_chain(FB_EVENT_FB_UNBIND, &event); | 1571 | ret = fb_notifier_call_chain(FB_EVENT_FB_UNBIND, &event); |
1572 | unlock_fb_info(fb_info); | ||
1560 | 1573 | ||
1561 | if (ret) { | 1574 | if (ret) { |
1562 | ret = -EINVAL; | 1575 | ret = -EINVAL; |
@@ -1590,6 +1603,8 @@ void fb_set_suspend(struct fb_info *info, int state) | |||
1590 | { | 1603 | { |
1591 | struct fb_event event; | 1604 | struct fb_event event; |
1592 | 1605 | ||
1606 | if (!lock_fb_info(info)) | ||
1607 | return; | ||
1593 | event.info = info; | 1608 | event.info = info; |
1594 | if (state) { | 1609 | if (state) { |
1595 | fb_notifier_call_chain(FB_EVENT_SUSPEND, &event); | 1610 | fb_notifier_call_chain(FB_EVENT_SUSPEND, &event); |
@@ -1598,6 +1613,7 @@ void fb_set_suspend(struct fb_info *info, int state) | |||
1598 | info->state = FBINFO_STATE_RUNNING; | 1613 | info->state = FBINFO_STATE_RUNNING; |
1599 | fb_notifier_call_chain(FB_EVENT_RESUME, &event); | 1614 | fb_notifier_call_chain(FB_EVENT_RESUME, &event); |
1600 | } | 1615 | } |
1616 | unlock_fb_info(info); | ||
1601 | } | 1617 | } |
1602 | 1618 | ||
1603 | /** | 1619 | /** |
@@ -1667,8 +1683,11 @@ int fb_new_modelist(struct fb_info *info) | |||
1667 | err = 1; | 1683 | err = 1; |
1668 | 1684 | ||
1669 | if (!list_empty(&info->modelist)) { | 1685 | if (!list_empty(&info->modelist)) { |
1686 | if (!lock_fb_info(info)) | ||
1687 | return -ENODEV; | ||
1670 | event.info = info; | 1688 | event.info = info; |
1671 | err = fb_notifier_call_chain(FB_EVENT_NEW_MODELIST, &event); | 1689 | err = fb_notifier_call_chain(FB_EVENT_NEW_MODELIST, &event); |
1690 | unlock_fb_info(info); | ||
1672 | } | 1691 | } |
1673 | 1692 | ||
1674 | return err; | 1693 | return err; |
diff --git a/drivers/video/intelfb/intelfb.h b/drivers/video/intelfb/intelfb.h index a50bea61480..40984551c92 100644 --- a/drivers/video/intelfb/intelfb.h +++ b/drivers/video/intelfb/intelfb.h | |||
@@ -53,6 +53,7 @@ | |||
53 | #define PCI_DEVICE_ID_INTEL_830M 0x3577 | 53 | #define PCI_DEVICE_ID_INTEL_830M 0x3577 |
54 | #define PCI_DEVICE_ID_INTEL_845G 0x2562 | 54 | #define PCI_DEVICE_ID_INTEL_845G 0x2562 |
55 | #define PCI_DEVICE_ID_INTEL_85XGM 0x3582 | 55 | #define PCI_DEVICE_ID_INTEL_85XGM 0x3582 |
56 | #define PCI_DEVICE_ID_INTEL_854 0x358E | ||
56 | #define PCI_DEVICE_ID_INTEL_865G 0x2572 | 57 | #define PCI_DEVICE_ID_INTEL_865G 0x2572 |
57 | #define PCI_DEVICE_ID_INTEL_915G 0x2582 | 58 | #define PCI_DEVICE_ID_INTEL_915G 0x2582 |
58 | #define PCI_DEVICE_ID_INTEL_915GM 0x2592 | 59 | #define PCI_DEVICE_ID_INTEL_915GM 0x2592 |
@@ -154,6 +155,7 @@ enum intel_chips { | |||
154 | INTEL_85XGM, | 155 | INTEL_85XGM, |
155 | INTEL_852GM, | 156 | INTEL_852GM, |
156 | INTEL_852GME, | 157 | INTEL_852GME, |
158 | INTEL_854, | ||
157 | INTEL_855GM, | 159 | INTEL_855GM, |
158 | INTEL_855GME, | 160 | INTEL_855GME, |
159 | INTEL_865G, | 161 | INTEL_865G, |
diff --git a/drivers/video/intelfb/intelfb_i2c.c b/drivers/video/intelfb/intelfb_i2c.c index b3065492bb2..487f2be4746 100644 --- a/drivers/video/intelfb/intelfb_i2c.c +++ b/drivers/video/intelfb/intelfb_i2c.c | |||
@@ -156,6 +156,7 @@ void intelfb_create_i2c_busses(struct intelfb_info *dinfo) | |||
156 | switch(dinfo->chipset) { | 156 | switch(dinfo->chipset) { |
157 | case INTEL_830M: | 157 | case INTEL_830M: |
158 | case INTEL_845G: | 158 | case INTEL_845G: |
159 | case INTEL_854: | ||
159 | case INTEL_855GM: | 160 | case INTEL_855GM: |
160 | case INTEL_865G: | 161 | case INTEL_865G: |
161 | dinfo->output[i].type = INTELFB_OUTPUT_DVO; | 162 | dinfo->output[i].type = INTELFB_OUTPUT_DVO; |
diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/intelfb/intelfbdrv.c index 6d8e5415c80..ace14fe02fc 100644 --- a/drivers/video/intelfb/intelfbdrv.c +++ b/drivers/video/intelfb/intelfbdrv.c | |||
@@ -182,6 +182,7 @@ static struct pci_device_id intelfb_pci_table[] __devinitdata = { | |||
182 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_845G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_845G }, | 182 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_845G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_845G }, |
183 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_85XGM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_85XGM }, | 183 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_85XGM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_85XGM }, |
184 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_865G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_865G }, | 184 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_865G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_865G }, |
185 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_854, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_854 }, | ||
185 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915G }, | 186 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915G }, |
186 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915GM }, | 187 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915GM }, |
187 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945G }, | 188 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945G }, |
diff --git a/drivers/video/intelfb/intelfbhw.c b/drivers/video/intelfb/intelfbhw.c index 8b26b27c2db..0689f97c523 100644 --- a/drivers/video/intelfb/intelfbhw.c +++ b/drivers/video/intelfb/intelfbhw.c | |||
@@ -84,6 +84,11 @@ int intelfbhw_get_chipset(struct pci_dev *pdev, struct intelfb_info *dinfo) | |||
84 | dinfo->mobile = 0; | 84 | dinfo->mobile = 0; |
85 | dinfo->pll_index = PLLS_I8xx; | 85 | dinfo->pll_index = PLLS_I8xx; |
86 | return 0; | 86 | return 0; |
87 | case PCI_DEVICE_ID_INTEL_854: | ||
88 | dinfo->mobile = 1; | ||
89 | dinfo->name = "Intel(R) 854"; | ||
90 | dinfo->chipset = INTEL_854; | ||
91 | return 0; | ||
87 | case PCI_DEVICE_ID_INTEL_85XGM: | 92 | case PCI_DEVICE_ID_INTEL_85XGM: |
88 | tmp = 0; | 93 | tmp = 0; |
89 | dinfo->mobile = 1; | 94 | dinfo->mobile = 1; |
diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm index de93ff3fc1a..3c14e43b82f 100644 --- a/drivers/video/logo/logo_linux_clut224.ppm +++ b/drivers/video/logo/logo_linux_clut224.ppm | |||
@@ -1,2828 +1,1604 @@ | |||
1 | P3 | 1 | P3 |
2 | 145 113 | 2 | # Standard 224-color Linux logo |
3 | 80 80 | ||
3 | 255 | 4 | 255 |
4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 5 | 0 0 0 0 0 0 0 0 0 0 0 0 |
5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 6 | 0 0 0 0 0 0 0 0 0 0 0 0 |
6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 7 | 0 0 0 0 0 0 0 0 0 0 0 0 |
7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 8 | 0 0 0 0 0 0 0 0 0 0 0 0 |
8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 9 | 0 0 0 0 0 0 0 0 0 0 0 0 |
9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 10 | 0 0 0 0 0 0 0 0 0 0 0 0 |
10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 11 | 0 0 0 0 0 0 0 0 0 0 0 0 |
11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 12 | 0 0 0 0 0 0 0 0 0 0 0 0 |
12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 13 | 0 0 0 0 0 0 0 0 0 0 0 0 |
13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 14 | 6 6 6 6 6 6 10 10 10 10 10 10 |
14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 15 | 10 10 10 6 6 6 6 6 6 6 6 6 |
15 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 16 | 0 0 0 0 0 0 0 0 0 0 0 0 |
16 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 17 | 0 0 0 0 0 0 0 0 0 0 0 0 |
17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 18 | 0 0 0 0 0 0 0 0 0 0 0 0 |
18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 19 | 0 0 0 0 0 0 0 0 0 0 0 0 |
19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 20 | 0 0 0 0 0 0 0 0 0 0 0 0 |
20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 21 | 0 0 0 0 0 0 0 0 0 0 0 0 |
21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 22 | 0 0 0 0 0 0 0 0 0 0 0 0 |
22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 23 | 0 0 0 0 0 0 0 0 0 0 0 0 |
23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 24 | 0 0 0 0 0 0 0 0 0 0 0 0 |
24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 25 | 0 0 0 0 0 0 0 0 0 0 0 0 |
25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 26 | 0 0 0 0 0 0 0 0 0 0 0 0 |
26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 27 | 0 0 0 0 0 0 0 0 0 0 0 0 |
27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 28 | 0 0 0 0 0 0 0 0 0 0 0 0 |
28 | 0 0 0 | 29 | 0 0 0 0 0 0 0 0 0 0 0 0 |
29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 30 | 0 0 0 0 0 0 0 0 0 0 0 0 |
30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 31 | 0 0 0 0 0 0 0 0 0 0 0 0 |
31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 32 | 0 0 0 0 0 0 0 0 0 0 0 0 |
32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 33 | 0 0 0 6 6 6 10 10 10 14 14 14 |
33 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 34 | 22 22 22 26 26 26 30 30 30 34 34 34 |
34 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 35 | 30 30 30 30 30 30 26 26 26 18 18 18 |
35 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 36 | 14 14 14 10 10 10 6 6 6 0 0 0 |
36 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 37 | 0 0 0 0 0 0 0 0 0 0 0 0 |
37 | 0 0 0 0 0 0 0 0 0 0 0 0 3 4 4 6 7 7 | 38 | 0 0 0 0 0 0 0 0 0 0 0 0 |
38 | 8 10 10 8 10 10 6 8 8 6 7 7 3 4 4 2 2 2 | 39 | 0 0 0 0 0 0 0 0 0 0 0 0 |
39 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 40 | 0 0 0 0 0 0 0 0 0 0 0 0 |
40 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 41 | 0 0 0 0 0 0 0 0 0 0 0 0 |
41 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 42 | 0 0 0 0 0 0 0 0 0 0 0 0 |
42 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 43 | 0 0 0 0 0 0 0 0 0 0 0 0 |
43 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 44 | 0 0 0 0 0 0 0 0 0 0 0 0 |
44 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 45 | 0 0 0 0 0 0 0 0 0 0 0 0 |
45 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 46 | 0 0 0 0 0 1 0 0 1 0 0 0 |
46 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 47 | 0 0 0 0 0 0 0 0 0 0 0 0 |
47 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 48 | 0 0 0 0 0 0 0 0 0 0 0 0 |
48 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 49 | 0 0 0 0 0 0 0 0 0 0 0 0 |
49 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 50 | 0 0 0 0 0 0 0 0 0 0 0 0 |
50 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 51 | 0 0 0 0 0 0 0 0 0 0 0 0 |
51 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 52 | 0 0 0 0 0 0 0 0 0 0 0 0 |
52 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 53 | 6 6 6 14 14 14 26 26 26 42 42 42 |
53 | 0 0 0 | 54 | 54 54 54 66 66 66 78 78 78 78 78 78 |
54 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 55 | 78 78 78 74 74 74 66 66 66 54 54 54 |
55 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 56 | 42 42 42 26 26 26 18 18 18 10 10 10 |
56 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 57 | 6 6 6 0 0 0 0 0 0 0 0 0 |
57 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 58 | 0 0 0 0 0 0 0 0 0 0 0 0 |
58 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 59 | 0 0 0 0 0 0 0 0 0 0 0 0 |
59 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 60 | 0 0 0 0 0 0 0 0 0 0 0 0 |
60 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 61 | 0 0 0 0 0 0 0 0 0 0 0 0 |
61 | 0 0 0 0 0 0 0 0 0 0 0 0 4 5 5 17 18 17 | 62 | 0 0 0 0 0 0 0 0 0 0 0 0 |
62 | 27 29 28 35 37 36 40 43 41 43 45 43 40 43 41 37 39 37 | 63 | 0 0 0 0 0 0 0 0 0 0 0 0 |
63 | 32 34 33 27 30 29 23 25 24 17 21 21 15 18 18 12 15 15 | 64 | 0 0 0 0 0 0 0 0 0 0 0 0 |
64 | 11 13 13 8 10 10 6 7 7 3 4 4 1 1 1 0 0 0 | 65 | 0 0 0 0 0 0 0 0 0 0 0 0 |
65 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 66 | 0 0 1 0 0 0 0 0 0 0 0 0 |
66 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 67 | 0 0 0 0 0 0 0 0 0 0 0 0 |
67 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 68 | 0 0 0 0 0 0 0 0 0 0 0 0 |
68 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 69 | 0 0 0 0 0 0 0 0 0 0 0 0 |
69 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 70 | 0 0 0 0 0 0 0 0 0 0 0 0 |
70 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 71 | 0 0 0 0 0 0 0 0 0 0 0 0 |
71 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 72 | 0 0 0 0 0 0 0 0 0 10 10 10 |
72 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 73 | 22 22 22 42 42 42 66 66 66 86 86 86 |
73 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 74 | 66 66 66 38 38 38 38 38 38 22 22 22 |
74 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 75 | 26 26 26 34 34 34 54 54 54 66 66 66 |
75 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 76 | 86 86 86 70 70 70 46 46 46 26 26 26 |
76 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 77 | 14 14 14 6 6 6 0 0 0 0 0 0 |
77 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 78 | 0 0 0 0 0 0 0 0 0 0 0 0 |
78 | 0 0 0 | 79 | 0 0 0 0 0 0 0 0 0 0 0 0 |
79 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 80 | 0 0 0 0 0 0 0 0 0 0 0 0 |
80 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 81 | 0 0 0 0 0 0 0 0 0 0 0 0 |
81 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 82 | 0 0 0 0 0 0 0 0 0 0 0 0 |
82 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 83 | 0 0 0 0 0 0 0 0 0 0 0 0 |
83 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 84 | 0 0 0 0 0 0 0 0 0 0 0 0 |
84 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 85 | 0 0 0 0 0 0 0 0 0 0 0 0 |
85 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 86 | 0 0 1 0 0 1 0 0 1 0 0 0 |
86 | 0 0 0 13 13 13 32 34 33 49 51 48 60 60 56 58 59 55 | 87 | 0 0 0 0 0 0 0 0 0 0 0 0 |
87 | 55 57 54 55 56 53 49 51 48 43 45 43 39 40 39 33 37 35 | 88 | 0 0 0 0 0 0 0 0 0 0 0 0 |
88 | 28 31 30 23 27 26 20 23 23 17 20 20 14 17 17 13 16 16 | 89 | 0 0 0 0 0 0 0 0 0 0 0 0 |
89 | 11 14 14 10 13 13 10 12 12 9 11 11 8 10 10 6 7 7 | 90 | 0 0 0 0 0 0 0 0 0 0 0 0 |
90 | 2 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 91 | 0 0 0 0 0 0 0 0 0 0 0 0 |
91 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 92 | 0 0 0 0 0 0 10 10 10 26 26 26 |
92 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 93 | 50 50 50 82 82 82 58 58 58 6 6 6 |
93 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 94 | 2 2 6 2 2 6 2 2 6 2 2 6 |
94 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 95 | 2 2 6 2 2 6 2 2 6 2 2 6 |
95 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 96 | 6 6 6 54 54 54 86 86 86 66 66 66 |
96 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 97 | 38 38 38 18 18 18 6 6 6 0 0 0 |
97 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 98 | 0 0 0 0 0 0 0 0 0 0 0 0 |
98 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 99 | 0 0 0 0 0 0 0 0 0 0 0 0 |
99 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 100 | 0 0 0 0 0 0 0 0 0 0 0 0 |
100 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 101 | 0 0 0 0 0 0 0 0 0 0 0 0 |
101 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 102 | 0 0 0 0 0 0 0 0 0 0 0 0 |
102 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 103 | 0 0 0 0 0 0 0 0 0 0 0 0 |
103 | 0 0 0 | 104 | 0 0 0 0 0 0 0 0 0 0 0 0 |
104 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 105 | 0 0 0 0 0 0 0 0 0 0 0 0 |
105 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 106 | 0 0 0 0 0 0 0 0 0 0 0 0 |
106 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 107 | 0 0 0 0 0 0 0 0 0 0 0 0 |
107 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 108 | 0 0 0 0 0 0 0 0 0 0 0 0 |
108 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 109 | 0 0 0 0 0 0 0 0 0 0 0 0 |
109 | 0 0 0 0 0 0 0 0 0 0 0 0 6 7 7 12 15 15 | 110 | 0 0 0 0 0 0 0 0 0 0 0 0 |
110 | 12 15 15 8 9 9 2 3 3 0 0 0 1 1 1 25 27 26 | 111 | 0 0 0 0 0 0 0 0 0 0 0 0 |
111 | 55 56 53 68 70 65 65 66 61 65 66 61 63 64 60 63 64 60 | 112 | 0 0 0 6 6 6 22 22 22 50 50 50 |
112 | 58 59 55 51 52 50 47 48 46 41 42 42 35 37 36 30 32 31 | 113 | 78 78 78 34 34 34 2 2 6 2 2 6 |
113 | 26 28 27 20 24 24 18 22 22 16 19 19 14 17 17 13 16 16 | 114 | 2 2 6 2 2 6 2 2 6 2 2 6 |
114 | 12 15 15 11 14 14 10 13 13 10 12 12 9 11 11 8 10 10 | 115 | 2 2 6 2 2 6 2 2 6 2 2 6 |
115 | 8 9 9 6 8 8 3 3 3 0 0 0 0 0 0 0 0 0 | 116 | 2 2 6 2 2 6 6 6 6 70 70 70 |
116 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 117 | 78 78 78 46 46 46 22 22 22 6 6 6 |
117 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 118 | 0 0 0 0 0 0 0 0 0 0 0 0 |
118 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 119 | 0 0 0 0 0 0 0 0 0 0 0 0 |
119 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 120 | 0 0 0 0 0 0 0 0 0 0 0 0 |
120 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 121 | 0 0 0 0 0 0 0 0 0 0 0 0 |
121 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 122 | 0 0 0 0 0 0 0 0 0 0 0 0 |
122 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 123 | 0 0 0 0 0 0 0 0 0 0 0 0 |
123 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 124 | 0 0 0 0 0 0 0 0 0 0 0 0 |
124 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 125 | 0 0 0 0 0 0 0 0 0 0 0 0 |
125 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 126 | 0 0 1 0 0 1 0 0 1 0 0 0 |
126 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 127 | 0 0 0 0 0 0 0 0 0 0 0 0 |
127 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 128 | 0 0 0 0 0 0 0 0 0 0 0 0 |
128 | 0 0 0 | 129 | 0 0 0 0 0 0 0 0 0 0 0 0 |
129 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 130 | 0 0 0 0 0 0 0 0 0 0 0 0 |
130 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 131 | 0 0 0 0 0 0 0 0 0 0 0 0 |
131 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 132 | 6 6 6 18 18 18 42 42 42 82 82 82 |
132 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 133 | 26 26 26 2 2 6 2 2 6 2 2 6 |
133 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 134 | 2 2 6 2 2 6 2 2 6 2 2 6 |
134 | 0 0 0 0 0 0 0 0 0 6 7 7 20 24 24 23 27 26 | 135 | 2 2 6 2 2 6 2 2 6 14 14 14 |
135 | 23 27 26 18 22 22 11 13 13 23 24 24 61 63 57 72 73 67 | 136 | 46 46 46 34 34 34 6 6 6 2 2 6 |
136 | 72 73 67 68 70 65 68 70 65 68 70 65 63 64 60 58 59 55 | 137 | 42 42 42 78 78 78 42 42 42 18 18 18 |
137 | 55 56 53 47 48 46 41 42 42 35 37 36 30 32 31 26 28 27 | 138 | 6 6 6 0 0 0 0 0 0 0 0 0 |
138 | 20 24 24 18 22 22 16 20 20 15 19 19 14 17 17 13 16 16 | 139 | 0 0 0 0 0 0 0 0 0 0 0 0 |
139 | 12 15 15 12 15 15 11 14 14 10 13 13 10 12 12 9 11 11 | 140 | 0 0 0 0 0 0 0 0 0 0 0 0 |
140 | 8 10 10 8 9 9 7 9 9 6 7 7 1 2 2 0 0 0 | 141 | 0 0 0 0 0 0 0 0 0 0 0 0 |
141 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 142 | 0 0 0 0 0 0 0 0 0 0 0 0 |
142 | 0 0 0 0 0 0 1 1 1 4 5 5 5 6 5 4 5 5 | 143 | 0 0 0 0 0 0 0 0 0 0 0 0 |
143 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 144 | 0 0 0 0 0 0 0 0 0 0 0 0 |
144 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 145 | 0 0 0 0 0 0 0 0 0 0 0 0 |
145 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 146 | 0 0 1 0 0 0 0 0 1 0 0 0 |
146 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 147 | 0 0 0 0 0 0 0 0 0 0 0 0 |
147 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 148 | 0 0 0 0 0 0 0 0 0 0 0 0 |
148 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 149 | 0 0 0 0 0 0 0 0 0 0 0 0 |
149 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 150 | 0 0 0 0 0 0 0 0 0 0 0 0 |
150 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 151 | 0 0 0 0 0 0 0 0 0 0 0 0 |
151 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 152 | 10 10 10 30 30 30 66 66 66 58 58 58 |
152 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 153 | 2 2 6 2 2 6 2 2 6 2 2 6 |
153 | 0 0 0 | 154 | 2 2 6 2 2 6 2 2 6 2 2 6 |
154 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 155 | 2 2 6 2 2 6 2 2 6 26 26 26 |
155 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 156 | 86 86 86 101 101 101 46 46 46 10 10 10 |
156 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 157 | 2 2 6 58 58 58 70 70 70 34 34 34 |
157 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 158 | 10 10 10 0 0 0 0 0 0 0 0 0 |
158 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 159 | 0 0 0 0 0 0 0 0 0 0 0 0 |
159 | 0 0 0 0 0 0 0 0 0 15 19 19 40 41 39 53 55 47 | 160 | 0 0 0 0 0 0 0 0 0 0 0 0 |
160 | 33 36 34 27 30 29 51 52 50 72 73 67 72 73 67 72 73 67 | 161 | 0 0 0 0 0 0 0 0 0 0 0 0 |
161 | 72 73 67 68 70 65 68 70 65 63 64 60 58 59 55 51 52 50 | 162 | 0 0 0 0 0 0 0 0 0 0 0 0 |
162 | 47 48 46 40 43 41 33 37 35 30 32 31 26 28 27 20 24 24 | 163 | 0 0 0 0 0 0 0 0 0 0 0 0 |
163 | 18 22 22 17 21 21 16 19 19 14 18 18 14 17 17 13 17 17 | 164 | 0 0 0 0 0 0 0 0 0 0 0 0 |
164 | 13 16 16 12 15 15 12 15 15 11 14 14 10 13 13 10 12 12 | 165 | 0 0 0 0 0 0 0 0 0 0 0 0 |
165 | 9 11 11 8 10 10 8 9 9 7 9 9 6 8 8 3 4 4 | 166 | 0 0 1 0 0 1 0 0 1 0 0 0 |
166 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 167 | 0 0 0 0 0 0 0 0 0 0 0 0 |
167 | 2 2 2 6 8 8 10 12 12 10 12 12 10 12 12 10 12 12 | 168 | 0 0 0 0 0 0 0 0 0 0 0 0 |
168 | 6 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 169 | 0 0 0 0 0 0 0 0 0 0 0 0 |
169 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 170 | 0 0 0 0 0 0 0 0 0 0 0 0 |
170 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 171 | 0 0 0 0 0 0 0 0 0 0 0 0 |
171 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 172 | 14 14 14 42 42 42 86 86 86 10 10 10 |
172 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 173 | 2 2 6 2 2 6 2 2 6 2 2 6 |
173 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 174 | 2 2 6 2 2 6 2 2 6 2 2 6 |
174 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 175 | 2 2 6 2 2 6 2 2 6 30 30 30 |
175 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 176 | 94 94 94 94 94 94 58 58 58 26 26 26 |
176 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 177 | 2 2 6 6 6 6 78 78 78 54 54 54 |
177 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 178 | 22 22 22 6 6 6 0 0 0 0 0 0 |
178 | 0 0 0 | 179 | 0 0 0 0 0 0 0 0 0 0 0 0 |
179 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 180 | 0 0 0 0 0 0 0 0 0 0 0 0 |
180 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 181 | 0 0 0 0 0 0 0 0 0 0 0 0 |
181 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 182 | 0 0 0 0 0 0 0 0 0 0 0 0 |
182 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 183 | 0 0 0 0 0 0 0 0 0 0 0 0 |
183 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 184 | 0 0 0 0 0 0 0 0 0 0 0 0 |
184 | 0 0 0 0 0 0 0 0 0 20 23 23 71 71 57 131 127 93 | 185 | 0 0 0 0 0 0 0 0 0 0 0 0 |
185 | 115 113 82 63 64 60 72 73 67 72 73 67 72 73 67 72 73 67 | 186 | 0 0 0 0 0 0 0 0 0 0 0 0 |
186 | 68 70 65 65 66 61 61 63 57 55 57 54 49 51 48 43 45 43 | 187 | 0 0 0 0 0 0 0 0 0 0 0 0 |
187 | 39 40 39 33 36 34 28 31 30 23 27 26 20 24 24 20 23 23 | 188 | 0 0 0 0 0 0 0 0 0 0 0 0 |
188 | 17 21 21 16 20 20 15 19 19 15 18 18 14 18 18 14 17 17 | 189 | 0 0 0 0 0 0 0 0 0 0 0 0 |
189 | 13 17 17 13 16 16 12 15 15 12 15 15 11 14 14 10 13 13 | 190 | 0 0 0 0 0 0 0 0 0 0 0 0 |
190 | 10 12 12 9 11 11 8 10 10 7 9 9 7 9 9 6 8 8 | 191 | 0 0 0 0 0 0 0 0 0 6 6 6 |
191 | 4 5 5 0 0 0 0 0 0 0 0 0 1 1 1 6 7 7 | 192 | 22 22 22 62 62 62 62 62 62 2 2 6 |
192 | 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 | 193 | 2 2 6 2 2 6 2 2 6 2 2 6 |
193 | 10 12 12 3 4 4 0 0 0 0 0 0 0 0 0 0 0 0 | 194 | 2 2 6 2 2 6 2 2 6 2 2 6 |
194 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 195 | 2 2 6 2 2 6 2 2 6 26 26 26 |
195 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 196 | 54 54 54 38 38 38 18 18 18 10 10 10 |
196 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 197 | 2 2 6 2 2 6 34 34 34 82 82 82 |
197 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 198 | 38 38 38 14 14 14 0 0 0 0 0 0 |
198 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 199 | 0 0 0 0 0 0 0 0 0 0 0 0 |
199 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 200 | 0 0 0 0 0 0 0 0 0 0 0 0 |
200 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 201 | 0 0 0 0 0 0 0 0 0 0 0 0 |
201 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 202 | 0 0 0 0 0 0 0 0 0 0 0 0 |
202 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 203 | 0 0 0 0 0 0 0 0 0 0 0 0 |
203 | 0 0 0 | 204 | 0 0 0 0 0 0 0 0 0 0 0 0 |
204 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 205 | 0 0 0 0 0 0 0 0 0 0 0 0 |
205 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 206 | 0 0 0 0 0 1 0 0 1 0 0 0 |
206 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 207 | 0 0 0 0 0 0 0 0 0 0 0 0 |
207 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 208 | 0 0 0 0 0 0 0 0 0 0 0 0 |
208 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 209 | 0 0 0 0 0 0 0 0 0 0 0 0 |
209 | 0 0 0 0 0 0 0 0 0 18 22 22 71 71 57 144 139 99 | 210 | 0 0 0 0 0 0 0 0 0 0 0 0 |
210 | 84 83 72 68 70 65 72 73 67 72 73 67 68 70 65 65 66 61 | 211 | 0 0 0 0 0 0 0 0 0 6 6 6 |
211 | 63 64 60 55 57 54 51 52 50 47 48 46 40 43 41 35 37 36 | 212 | 30 30 30 78 78 78 30 30 30 2 2 6 |
212 | 30 32 31 27 29 28 23 27 26 20 24 24 18 22 22 17 21 21 | 213 | 2 2 6 2 2 6 2 2 6 2 2 6 |
213 | 16 20 20 15 19 19 15 19 19 15 19 19 15 18 18 14 18 18 | 214 | 2 2 6 2 2 6 2 2 6 2 2 6 |
214 | 14 17 17 13 17 17 13 16 16 12 15 15 12 15 15 11 14 14 | 215 | 2 2 6 2 2 6 2 2 6 10 10 10 |
215 | 10 13 13 9 12 12 9 11 11 8 10 10 7 9 9 6 8 8 | 216 | 10 10 10 2 2 6 2 2 6 2 2 6 |
216 | 6 8 8 3 4 4 0 0 0 2 2 2 8 10 10 10 12 12 | 217 | 2 2 6 2 2 6 2 2 6 78 78 78 |
217 | 10 12 12 10 12 12 11 13 13 36 38 35 61 61 53 48 49 45 | 218 | 50 50 50 18 18 18 6 6 6 0 0 0 |
218 | 10 12 12 7 9 9 0 0 0 0 0 0 0 0 0 0 0 0 | 219 | 0 0 0 0 0 0 0 0 0 0 0 0 |
219 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 220 | 0 0 0 0 0 0 0 0 0 0 0 0 |
220 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 221 | 0 0 0 0 0 0 0 0 0 0 0 0 |
221 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 222 | 0 0 0 0 0 0 0 0 0 0 0 0 |
222 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 223 | 0 0 0 0 0 0 0 0 0 0 0 0 |
223 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 224 | 0 0 0 0 0 0 0 0 0 0 0 0 |
224 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 225 | 0 0 0 0 0 0 0 0 0 0 0 0 |
225 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 226 | 0 0 1 0 0 0 0 0 0 0 0 0 |
226 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 227 | 0 0 0 0 0 0 0 0 0 0 0 0 |
227 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 228 | 0 0 0 0 0 0 0 0 0 0 0 0 |
228 | 0 0 0 | 229 | 0 0 0 0 0 0 0 0 0 0 0 0 |
229 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 230 | 0 0 0 0 0 0 0 0 0 0 0 0 |
230 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 231 | 0 0 0 0 0 0 0 0 0 10 10 10 |
231 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 232 | 38 38 38 86 86 86 14 14 14 2 2 6 |
232 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 233 | 2 2 6 2 2 6 2 2 6 2 2 6 |
233 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 234 | 2 2 6 2 2 6 2 2 6 2 2 6 |
234 | 0 0 0 0 0 0 0 0 0 15 19 19 61 61 53 84 83 72 | 235 | 2 2 6 2 2 6 2 2 6 2 2 6 |
235 | 68 70 65 72 73 67 68 70 65 68 70 65 63 64 60 58 59 55 | 236 | 2 2 6 2 2 6 2 2 6 2 2 6 |
236 | 51 52 50 47 48 46 41 42 42 37 39 37 32 35 33 28 31 30 | 237 | 2 2 6 2 2 6 2 2 6 54 54 54 |
237 | 23 27 26 20 24 24 20 23 23 18 22 22 17 21 21 17 21 21 | 238 | 66 66 66 26 26 26 6 6 6 0 0 0 |
238 | 17 21 21 17 21 21 17 20 20 16 20 20 16 20 20 16 19 19 | 239 | 0 0 0 0 0 0 0 0 0 0 0 0 |
239 | 15 18 18 14 18 18 13 17 17 13 16 16 12 15 15 12 15 15 | 240 | 0 0 0 0 0 0 0 0 0 0 0 0 |
240 | 11 14 14 10 13 13 9 12 12 9 11 11 8 10 10 7 9 9 | 241 | 0 0 0 0 0 0 0 0 0 0 0 0 |
241 | 6 8 8 6 8 8 5 6 5 9 11 11 10 12 12 10 12 12 | 242 | 0 0 0 0 0 0 0 0 0 0 0 0 |
242 | 19 20 18 82 81 62 149 145 103 160 154 106 142 137 94 96 95 69 | 243 | 0 0 0 0 0 0 0 0 0 0 0 0 |
243 | 10 12 12 10 12 12 1 1 1 0 0 0 0 0 0 0 0 0 | 244 | 0 0 0 0 0 0 0 0 0 0 0 0 |
244 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 245 | 0 0 0 0 0 0 0 0 0 0 0 0 |
245 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 246 | 0 0 0 0 0 1 0 0 1 0 0 0 |
246 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 247 | 0 0 0 0 0 0 0 0 0 0 0 0 |
247 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 248 | 0 0 0 0 0 0 0 0 0 0 0 0 |
248 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 249 | 0 0 0 0 0 0 0 0 0 0 0 0 |
249 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 250 | 0 0 0 0 0 0 0 0 0 0 0 0 |
250 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 251 | 0 0 0 0 0 0 0 0 0 14 14 14 |
251 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 252 | 42 42 42 82 82 82 2 2 6 2 2 6 |
252 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 253 | 2 2 6 6 6 6 10 10 10 2 2 6 |
253 | 0 0 0 | 254 | 2 2 6 2 2 6 2 2 6 2 2 6 |
254 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 255 | 2 2 6 2 2 6 2 2 6 6 6 6 |
255 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 256 | 14 14 14 10 10 10 2 2 6 2 2 6 |
256 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 257 | 2 2 6 2 2 6 2 2 6 18 18 18 |
257 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 258 | 82 82 82 34 34 34 10 10 10 0 0 0 |
258 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 259 | 0 0 0 0 0 0 0 0 0 0 0 0 |
259 | 0 0 0 0 0 0 0 0 0 10 12 12 44 46 43 68 70 65 | 260 | 0 0 0 0 0 0 0 0 0 0 0 0 |
260 | 72 73 67 68 70 65 68 70 65 63 64 60 55 57 54 49 51 48 | 261 | 0 0 0 0 0 0 0 0 0 0 0 0 |
261 | 43 45 43 39 40 39 33 37 35 30 32 31 26 28 27 23 27 26 | 262 | 0 0 0 0 0 0 0 0 0 0 0 0 |
262 | 20 24 24 18 22 22 18 22 22 18 22 22 18 22 22 20 23 23 | 263 | 0 0 0 0 0 0 0 0 0 0 0 0 |
263 | 20 24 24 23 25 24 23 25 24 22 24 23 20 23 23 18 22 22 | 264 | 0 0 0 0 0 0 0 0 0 0 0 0 |
264 | 17 20 20 15 19 19 15 18 18 14 17 17 13 16 16 12 15 15 | 265 | 0 0 0 0 0 0 0 0 0 0 0 0 |
265 | 11 14 14 11 13 13 10 12 12 9 11 11 8 10 10 8 9 9 | 266 | 0 0 1 0 0 0 0 0 0 0 0 0 |
266 | 7 9 9 7 9 9 10 12 12 10 12 12 10 12 12 71 71 57 | 267 | 0 0 0 0 0 0 0 0 0 0 0 0 |
267 | 164 159 111 186 182 128 186 182 128 171 165 117 151 147 98 96 95 69 | 268 | 0 0 0 0 0 0 0 0 0 0 0 0 |
268 | 10 12 12 10 12 12 3 3 3 0 0 0 0 0 0 0 0 0 | 269 | 0 0 0 0 0 0 0 0 0 0 0 0 |
269 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 270 | 0 0 0 0 0 0 0 0 0 0 0 0 |
270 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 271 | 0 0 0 0 0 0 0 0 0 14 14 14 |
271 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 272 | 46 46 46 86 86 86 2 2 6 2 2 6 |
272 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 273 | 6 6 6 6 6 6 22 22 22 34 34 34 |
273 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 274 | 6 6 6 2 2 6 2 2 6 2 2 6 |
274 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 275 | 2 2 6 2 2 6 18 18 18 34 34 34 |
275 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 276 | 10 10 10 50 50 50 22 22 22 2 2 6 |
276 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 277 | 2 2 6 2 2 6 2 2 6 10 10 10 |
277 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 278 | 86 86 86 42 42 42 14 14 14 0 0 0 |
278 | 0 0 0 | 279 | 0 0 0 0 0 0 0 0 0 0 0 0 |
279 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 280 | 0 0 0 0 0 0 0 0 0 0 0 0 |
280 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 281 | 0 0 0 0 0 0 0 0 0 0 0 0 |
281 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 282 | 0 0 0 0 0 0 0 0 0 0 0 0 |
282 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 283 | 0 0 0 0 0 0 0 0 0 0 0 0 |
283 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 284 | 0 0 0 0 0 0 0 0 0 0 0 0 |
284 | 0 0 0 0 0 0 0 0 0 8 10 10 63 64 60 68 70 65 | 285 | 0 0 0 0 0 0 0 0 0 0 0 0 |
285 | 72 73 67 68 70 65 63 64 60 55 57 54 47 48 46 40 43 41 | 286 | 0 0 1 0 0 1 0 0 1 0 0 0 |
286 | 33 37 35 30 32 31 27 29 28 23 27 26 20 24 24 20 23 23 | 287 | 0 0 0 0 0 0 0 0 0 0 0 0 |
287 | 18 22 22 18 22 22 20 23 22 21 25 23 23 27 26 27 29 28 | 288 | 0 0 0 0 0 0 0 0 0 0 0 0 |
288 | 28 31 30 31 33 31 31 33 31 31 33 31 28 31 30 26 28 27 | 289 | 0 0 0 0 0 0 0 0 0 0 0 0 |
289 | 23 25 24 20 23 22 16 20 20 15 18 18 14 17 17 13 16 16 | 290 | 0 0 0 0 0 0 0 0 0 0 0 0 |
290 | 12 15 15 11 14 14 10 13 13 10 12 12 9 11 11 8 10 10 | 291 | 0 0 0 0 0 0 0 0 0 14 14 14 |
291 | 10 12 12 10 13 13 10 12 12 12 14 14 96 95 69 165 161 109 | 292 | 46 46 46 86 86 86 2 2 6 2 2 6 |
292 | 186 182 128 192 187 134 192 187 134 176 171 126 160 154 106 103 101 77 | 293 | 38 38 38 116 116 116 94 94 94 22 22 22 |
293 | 10 12 12 10 12 12 5 6 5 0 0 0 0 0 0 0 0 0 | 294 | 22 22 22 2 2 6 2 2 6 2 2 6 |
294 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 295 | 14 14 14 86 86 86 138 138 138 162 162 162 |
295 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 296 | 154 154 154 38 38 38 26 26 26 6 6 6 |
296 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 297 | 2 2 6 2 2 6 2 2 6 2 2 6 |
297 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 298 | 86 86 86 46 46 46 14 14 14 0 0 0 |
298 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 299 | 0 0 0 0 0 0 0 0 0 0 0 0 |
299 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 300 | 0 0 0 0 0 0 0 0 0 0 0 0 |
300 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 301 | 0 0 0 0 0 0 0 0 0 0 0 0 |
301 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 302 | 0 0 0 0 0 0 0 0 0 0 0 0 |
302 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 303 | 0 0 0 0 0 0 0 0 0 0 0 0 |
303 | 0 0 0 | 304 | 0 0 0 0 0 0 0 0 0 0 0 0 |
304 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 305 | 0 0 0 0 0 0 0 0 0 0 0 0 |
305 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 306 | 0 0 0 0 0 0 0 0 0 0 0 0 |
306 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 307 | 0 0 0 0 0 0 0 0 0 0 0 0 |
307 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 308 | 0 0 0 0 0 0 0 0 0 0 0 0 |
308 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 309 | 0 0 0 0 0 0 0 0 0 0 0 0 |
309 | 0 0 0 0 0 0 0 0 0 35 37 36 68 70 65 72 73 67 | 310 | 0 0 0 0 0 0 0 0 0 0 0 0 |
310 | 68 70 65 65 66 61 58 59 55 49 51 48 40 43 41 33 37 35 | 311 | 0 0 0 0 0 0 0 0 0 14 14 14 |
311 | 28 31 30 23 27 26 20 24 24 20 23 23 18 22 22 18 22 22 | 312 | 46 46 46 86 86 86 2 2 6 14 14 14 |
312 | 18 22 22 20 23 23 23 27 26 27 30 29 32 35 33 37 39 37 | 313 | 134 134 134 198 198 198 195 195 195 116 116 116 |
313 | 40 43 41 44 46 43 46 47 43 44 46 43 40 43 41 36 38 35 | 314 | 10 10 10 2 2 6 2 2 6 6 6 6 |
314 | 31 33 31 27 29 28 22 24 23 17 21 21 15 18 18 14 17 17 | 315 | 101 98 89 187 187 187 210 210 210 218 218 218 |
315 | 13 16 16 12 15 15 11 14 14 11 14 14 11 13 13 13 16 16 | 316 | 214 214 214 134 134 134 14 14 14 6 6 6 |
316 | 13 16 16 11 14 14 10 12 12 79 78 62 142 137 94 164 159 111 | 317 | 2 2 6 2 2 6 2 2 6 2 2 6 |
317 | 178 174 128 192 187 134 192 187 134 176 171 126 160 154 106 96 95 69 | 318 | 86 86 86 50 50 50 18 18 18 6 6 6 |
318 | 10 12 12 10 12 12 6 7 7 0 0 0 0 0 0 0 0 0 | 319 | 0 0 0 0 0 0 0 0 0 0 0 0 |
319 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 320 | 0 0 0 0 0 0 0 0 0 0 0 0 |
320 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 321 | 0 0 0 0 0 0 0 0 0 0 0 0 |
321 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 322 | 0 0 0 0 0 0 0 0 0 0 0 0 |
322 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 323 | 0 0 0 0 0 0 0 0 0 0 0 0 |
323 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 324 | 0 0 0 0 0 0 0 0 0 0 0 0 |
324 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 325 | 0 0 0 0 0 0 0 0 1 0 0 0 |
325 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 326 | 0 0 1 0 0 1 0 0 1 0 0 0 |
326 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 327 | 0 0 0 0 0 0 0 0 0 0 0 0 |
327 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 328 | 0 0 0 0 0 0 0 0 0 0 0 0 |
328 | 0 0 0 | 329 | 0 0 0 0 0 0 0 0 0 0 0 0 |
329 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 330 | 0 0 0 0 0 0 0 0 0 0 0 0 |
330 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 331 | 0 0 0 0 0 0 0 0 0 14 14 14 |
331 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 332 | 46 46 46 86 86 86 2 2 6 54 54 54 |
332 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 333 | 218 218 218 195 195 195 226 226 226 246 246 246 |
333 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 334 | 58 58 58 2 2 6 2 2 6 30 30 30 |
334 | 0 0 0 0 0 0 0 0 0 55 57 54 68 70 65 72 73 67 | 335 | 210 210 210 253 253 253 174 174 174 123 123 123 |
335 | 68 70 65 63 64 60 55 56 53 43 45 43 35 37 36 28 31 30 | 336 | 221 221 221 234 234 234 74 74 74 2 2 6 |
336 | 23 27 26 20 24 24 18 22 22 17 21 21 17 21 21 17 21 21 | 337 | 2 2 6 2 2 6 2 2 6 2 2 6 |
337 | 20 24 24 25 27 26 31 33 31 38 39 37 46 47 43 53 55 47 | 338 | 70 70 70 58 58 58 22 22 22 6 6 6 |
338 | 61 61 53 66 65 55 66 65 55 66 65 55 61 61 53 53 55 47 | 339 | 0 0 0 0 0 0 0 0 0 0 0 0 |
339 | 46 47 43 37 39 37 30 33 30 24 26 24 17 21 21 15 18 18 | 340 | 0 0 0 0 0 0 0 0 0 0 0 0 |
340 | 13 17 17 12 15 15 12 15 15 13 16 16 14 18 18 14 18 18 | 341 | 0 0 0 0 0 0 0 0 0 0 0 0 |
341 | 14 17 17 12 15 15 30 31 28 118 116 76 134 131 96 160 154 106 | 342 | 0 0 0 0 0 0 0 0 0 0 0 0 |
342 | 174 170 121 178 174 128 178 174 128 171 165 117 151 147 98 96 95 69 | 343 | 0 0 0 0 0 0 0 0 0 0 0 0 |
343 | 10 12 12 10 12 12 6 8 8 0 0 0 0 0 0 0 0 0 | 344 | 0 0 0 0 0 0 0 0 0 0 0 0 |
344 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 345 | 0 0 0 0 0 0 0 0 0 0 0 0 |
345 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 346 | 0 0 0 0 0 0 0 0 0 0 0 0 |
346 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 347 | 0 0 0 0 0 0 0 0 0 0 0 0 |
347 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 348 | 0 0 0 0 0 0 0 0 0 0 0 0 |
348 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 349 | 0 0 0 0 0 0 0 0 0 0 0 0 |
349 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 350 | 0 0 0 0 0 0 0 0 0 0 0 0 |
350 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 351 | 0 0 0 0 0 0 0 0 0 14 14 14 |
351 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 352 | 46 46 46 82 82 82 2 2 6 106 106 106 |
352 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 353 | 170 170 170 26 26 26 86 86 86 226 226 226 |
353 | 0 0 0 | 354 | 123 123 123 10 10 10 14 14 14 46 46 46 |
354 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 355 | 231 231 231 190 190 190 6 6 6 70 70 70 |
355 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 356 | 90 90 90 238 238 238 158 158 158 2 2 6 |
356 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 357 | 2 2 6 2 2 6 2 2 6 2 2 6 |
357 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 358 | 70 70 70 58 58 58 22 22 22 6 6 6 |
358 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 359 | 0 0 0 0 0 0 0 0 0 0 0 0 |
359 | 0 0 0 0 0 0 0 0 0 63 64 60 68 70 65 68 70 65 | 360 | 0 0 0 0 0 0 0 0 0 0 0 0 |
360 | 65 66 61 58 59 55 49 51 48 39 40 39 30 32 31 23 27 26 | 361 | 0 0 0 0 0 0 0 0 0 0 0 0 |
361 | 20 24 24 18 22 22 17 21 21 16 20 20 17 21 21 20 23 23 | 362 | 0 0 0 0 0 0 0 0 0 0 0 0 |
362 | 25 27 26 32 35 33 43 44 41 53 55 47 66 65 55 75 75 61 | 363 | 0 0 0 0 0 0 0 0 0 0 0 0 |
363 | 82 81 62 84 83 72 87 86 72 87 86 72 82 81 62 75 75 61 | 364 | 0 0 0 0 0 0 0 0 0 0 0 0 |
364 | 66 65 55 53 55 47 40 41 39 31 33 31 23 25 24 17 20 20 | 365 | 0 0 0 0 0 0 0 0 1 0 0 0 |
365 | 14 18 18 13 16 16 12 15 15 12 15 15 13 17 17 14 18 18 | 366 | 0 0 1 0 0 1 0 0 1 0 0 0 |
366 | 14 18 18 13 16 16 46 47 43 96 95 69 125 122 87 142 137 94 | 367 | 0 0 0 0 0 0 0 0 0 0 0 0 |
367 | 160 154 106 165 161 109 164 159 111 155 149 109 142 137 94 75 75 61 | 368 | 0 0 0 0 0 0 0 0 0 0 0 0 |
368 | 10 12 12 10 12 12 6 8 8 0 0 0 0 0 0 0 0 0 | 369 | 0 0 0 0 0 0 0 0 0 0 0 0 |
369 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 370 | 0 0 0 0 0 0 0 0 0 0 0 0 |
370 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 371 | 0 0 0 0 0 0 0 0 0 14 14 14 |
371 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 372 | 42 42 42 86 86 86 6 6 6 116 116 116 |
372 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 373 | 106 106 106 6 6 6 70 70 70 149 149 149 |
373 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 374 | 128 128 128 18 18 18 38 38 38 54 54 54 |
374 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 375 | 221 221 221 106 106 106 2 2 6 14 14 14 |
375 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 376 | 46 46 46 190 190 190 198 198 198 2 2 6 |
376 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 377 | 2 2 6 2 2 6 2 2 6 2 2 6 |
377 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 378 | 74 74 74 62 62 62 22 22 22 6 6 6 |
378 | 0 0 0 | 379 | 0 0 0 0 0 0 0 0 0 0 0 0 |
379 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 380 | 0 0 0 0 0 0 0 0 0 0 0 0 |
380 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 381 | 0 0 0 0 0 0 0 0 0 0 0 0 |
381 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 382 | 0 0 0 0 0 0 0 0 0 0 0 0 |
382 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 383 | 0 0 0 0 0 0 0 0 0 0 0 0 |
383 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 384 | 0 0 0 0 0 0 0 0 0 0 0 0 |
384 | 0 0 0 0 0 0 0 0 0 60 60 56 68 70 65 68 70 65 | 385 | 0 0 0 0 0 0 0 0 1 0 0 0 |
385 | 63 64 60 55 57 54 46 47 45 35 37 36 27 30 29 23 25 24 | 386 | 0 0 1 0 0 0 0 0 1 0 0 0 |
386 | 18 22 22 17 21 21 16 20 20 17 21 21 18 22 22 23 27 26 | 387 | 0 0 0 0 0 0 0 0 0 0 0 0 |
387 | 31 33 31 43 44 41 55 56 53 71 71 57 84 83 72 92 91 72 | 388 | 0 0 0 0 0 0 0 0 0 0 0 0 |
388 | 103 101 77 92 91 72 82 81 62 82 81 62 87 86 72 92 91 72 | 389 | 0 0 0 0 0 0 0 0 0 0 0 0 |
389 | 84 83 72 71 71 57 55 56 53 43 44 41 30 33 30 22 24 23 | 390 | 0 0 0 0 0 0 0 0 0 0 0 0 |
390 | 16 19 19 14 17 17 12 15 15 12 15 15 13 16 16 14 18 18 | 391 | 0 0 0 0 0 0 0 0 0 14 14 14 |
391 | 14 18 18 14 17 17 43 44 41 82 81 62 118 116 76 125 122 87 | 392 | 42 42 42 94 94 94 14 14 14 101 101 101 |
392 | 142 137 94 144 139 99 144 139 99 134 131 96 118 116 76 53 55 47 | 393 | 128 128 128 2 2 6 18 18 18 116 116 116 |
393 | 10 12 12 10 12 12 6 8 8 0 0 0 0 0 0 0 0 0 | 394 | 118 98 46 121 92 8 121 92 8 98 78 10 |
394 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 395 | 162 162 162 106 106 106 2 2 6 2 2 6 |
395 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 396 | 2 2 6 195 195 195 195 195 195 6 6 6 |
396 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 397 | 2 2 6 2 2 6 2 2 6 2 2 6 |
397 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 398 | 74 74 74 62 62 62 22 22 22 6 6 6 |
398 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 399 | 0 0 0 0 0 0 0 0 0 0 0 0 |
399 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 400 | 0 0 0 0 0 0 0 0 0 0 0 0 |
400 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 401 | 0 0 0 0 0 0 0 0 0 0 0 0 |
401 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 402 | 0 0 0 0 0 0 0 0 0 0 0 0 |
402 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 403 | 0 0 0 0 0 0 0 0 0 0 0 0 |
403 | 0 0 0 | 404 | 0 0 0 0 0 0 0 0 0 0 0 0 |
404 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 405 | 0 0 0 0 0 0 0 0 1 0 0 1 |
405 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 406 | 0 0 1 0 0 0 0 0 1 0 0 0 |
406 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 407 | 0 0 0 0 0 0 0 0 0 0 0 0 |
407 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 408 | 0 0 0 0 0 0 0 0 0 0 0 0 |
408 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 409 | 0 0 0 0 0 0 0 0 0 0 0 0 |
409 | 0 0 0 0 0 0 0 0 0 47 48 46 63 64 60 63 64 60 | 410 | 0 0 0 0 0 0 0 0 0 0 0 0 |
410 | 55 57 54 49 51 48 40 43 41 32 34 33 26 28 27 20 24 24 | 411 | 0 0 0 0 0 0 0 0 0 10 10 10 |
411 | 18 22 22 16 20 20 16 20 20 17 21 21 20 24 24 28 31 30 | 412 | 38 38 38 90 90 90 14 14 14 58 58 58 |
412 | 40 41 39 53 55 47 75 75 61 90 89 73 87 86 72 48 49 45 | 413 | 210 210 210 26 26 26 54 38 6 154 114 10 |
413 | 14 14 13 2 2 2 1 2 2 1 1 1 1 1 1 2 2 2 | 414 | 226 170 11 236 186 11 225 175 15 184 144 12 |
414 | 19 20 18 43 44 41 66 65 55 53 55 47 38 39 37 26 28 27 | 415 | 215 174 15 175 146 61 37 26 9 2 2 6 |
415 | 18 22 22 14 18 18 13 16 16 12 15 15 12 15 15 13 17 17 | 416 | 70 70 70 246 246 246 138 138 138 2 2 6 |
416 | 14 18 18 14 18 18 30 31 28 66 65 55 96 95 69 103 101 77 | 417 | 2 2 6 2 2 6 2 2 6 2 2 6 |
417 | 118 116 76 118 116 76 118 116 76 118 116 76 103 101 77 36 38 35 | 418 | 70 70 70 66 66 66 26 26 26 6 6 6 |
418 | 10 12 12 10 12 12 6 7 7 0 0 0 0 0 0 0 0 0 | 419 | 0 0 0 0 0 0 0 0 0 0 0 0 |
419 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 420 | 0 0 0 0 0 0 0 0 0 0 0 0 |
420 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 421 | 0 0 0 0 0 0 0 0 0 0 0 0 |
421 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 422 | 0 0 0 0 0 0 0 0 0 0 0 0 |
422 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 423 | 0 0 0 0 0 0 0 0 0 0 0 0 |
423 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 424 | 0 0 0 0 0 0 0 0 0 0 0 0 |
424 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 425 | 0 0 0 0 0 0 0 0 0 0 0 0 |
425 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 426 | 0 0 0 0 0 0 0 0 0 0 0 0 |
426 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 427 | 0 0 0 0 0 0 0 0 0 0 0 0 |
427 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 428 | 0 0 0 0 0 0 0 0 0 0 0 0 |
428 | 0 0 0 | 429 | 0 0 0 0 0 0 0 0 0 0 0 0 |
429 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 430 | 0 0 0 0 0 0 0 0 0 0 0 0 |
430 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 431 | 0 0 0 0 0 0 0 0 0 10 10 10 |
431 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 432 | 38 38 38 86 86 86 14 14 14 10 10 10 |
432 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 433 | 195 195 195 188 164 115 192 133 9 225 175 15 |
433 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 434 | 239 182 13 234 190 10 232 195 16 232 200 30 |
434 | 0 0 0 0 0 0 0 0 0 28 31 30 55 57 54 51 52 50 | 435 | 245 207 45 241 208 19 232 195 16 184 144 12 |
435 | 49 51 48 41 42 42 35 37 36 28 31 30 23 27 26 20 23 23 | 436 | 218 194 134 211 206 186 42 42 42 2 2 6 |
436 | 17 21 21 16 20 20 16 20 20 18 22 22 23 27 26 33 36 34 | 437 | 2 2 6 2 2 6 2 2 6 2 2 6 |
437 | 48 49 45 71 71 57 82 81 62 43 44 41 8 9 9 6 7 7 | 438 | 50 50 50 74 74 74 30 30 30 6 6 6 |
438 | 6 7 7 6 7 7 6 7 7 5 6 5 4 5 5 3 4 4 | 439 | 0 0 0 0 0 0 0 0 0 0 0 0 |
439 | 2 3 3 1 2 2 4 5 4 36 38 35 48 49 45 32 35 33 | 440 | 0 0 0 0 0 0 0 0 0 0 0 0 |
440 | 21 25 23 16 19 19 13 17 17 12 15 15 12 15 15 13 16 16 | 441 | 0 0 0 0 0 0 0 0 0 0 0 0 |
441 | 14 18 18 14 18 18 16 18 16 36 38 35 61 61 53 82 81 62 | 442 | 0 0 0 0 0 0 0 0 0 0 0 0 |
442 | 96 95 69 96 95 69 96 95 69 96 95 69 79 78 62 19 20 18 | 443 | 0 0 0 0 0 0 0 0 0 0 0 0 |
443 | 10 12 12 10 12 12 4 5 5 0 0 0 0 0 0 0 0 0 | 444 | 0 0 0 0 0 0 0 0 0 0 0 0 |
444 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 445 | 0 0 0 0 0 0 0 0 0 0 0 0 |
445 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 446 | 0 0 0 0 0 0 0 0 0 0 0 0 |
446 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 447 | 0 0 0 0 0 0 0 0 0 0 0 0 |
447 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 448 | 0 0 0 0 0 0 0 0 0 0 0 0 |
448 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 449 | 0 0 0 0 0 0 0 0 0 0 0 0 |
449 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 450 | 0 0 0 0 0 0 0 0 0 0 0 0 |
450 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 451 | 0 0 0 0 0 0 0 0 0 10 10 10 |
451 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 452 | 34 34 34 86 86 86 14 14 14 2 2 6 |
452 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 453 | 121 87 25 192 133 9 219 162 10 239 182 13 |
453 | 0 0 0 | 454 | 236 186 11 232 195 16 241 208 19 244 214 54 |
454 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 455 | 246 218 60 246 218 38 246 215 20 241 208 19 |
455 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 456 | 241 208 19 226 184 13 121 87 25 2 2 6 |
456 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 457 | 2 2 6 2 2 6 2 2 6 2 2 6 |
457 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 458 | 50 50 50 82 82 82 34 34 34 10 10 10 |
458 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 459 | 0 0 0 0 0 0 0 0 0 0 0 0 |
459 | 0 0 0 0 0 0 0 0 0 13 13 13 46 47 45 43 45 43 | 460 | 0 0 0 0 0 0 0 0 0 0 0 0 |
460 | 40 43 41 35 37 36 30 32 31 23 27 26 20 24 24 18 22 22 | 461 | 0 0 0 0 0 0 0 0 0 0 0 0 |
461 | 17 21 21 16 20 20 17 21 21 20 23 23 27 30 29 40 41 39 | 462 | 0 0 0 0 0 0 0 0 0 0 0 0 |
462 | 61 61 53 53 55 47 16 17 16 9 11 11 10 12 12 10 12 12 | 463 | 0 0 0 0 0 0 0 0 0 0 0 0 |
463 | 10 12 12 10 12 12 10 12 12 9 11 11 8 10 10 8 9 9 | 464 | 0 0 0 0 0 0 0 0 0 0 0 0 |
464 | 6 8 8 5 6 5 4 5 5 2 3 3 19 20 18 38 39 37 | 465 | 0 0 0 0 0 0 0 0 0 0 0 0 |
465 | 26 28 27 17 21 21 14 17 17 13 16 16 12 15 15 12 15 15 | 466 | 0 0 0 0 0 0 0 0 0 0 0 0 |
466 | 13 17 17 14 18 18 12 15 15 13 12 7 30 31 28 46 47 43 | 467 | 0 0 0 0 0 0 0 0 0 0 0 0 |
467 | 53 55 47 66 65 55 66 65 55 53 55 47 36 38 35 10 12 12 | 468 | 0 0 0 0 0 0 0 0 0 0 0 0 |
468 | 10 12 12 10 12 12 2 3 3 0 0 0 0 0 0 0 0 0 | 469 | 0 0 0 0 0 0 0 0 0 0 0 0 |
469 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 470 | 0 0 0 0 0 0 0 0 0 0 0 0 |
470 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 471 | 0 0 0 0 0 0 0 0 0 10 10 10 |
471 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 472 | 34 34 34 82 82 82 30 30 30 61 42 6 |
472 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 473 | 180 123 7 206 145 10 230 174 11 239 182 13 |
473 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 474 | 234 190 10 238 202 15 241 208 19 246 218 74 |
474 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 475 | 246 218 38 246 215 20 246 215 20 246 215 20 |
475 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 476 | 226 184 13 215 174 15 184 144 12 6 6 6 |
476 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 477 | 2 2 6 2 2 6 2 2 6 2 2 6 |
477 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 478 | 26 26 26 94 94 94 42 42 42 14 14 14 |
478 | 0 0 0 | 479 | 0 0 0 0 0 0 0 0 0 0 0 0 |
479 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 480 | 0 0 0 0 0 0 0 0 0 0 0 0 |
480 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 481 | 0 0 0 0 0 0 0 0 0 0 0 0 |
481 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 482 | 0 0 0 0 0 0 0 0 0 0 0 0 |
482 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 483 | 0 0 0 0 0 0 0 0 0 0 0 0 |
483 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 484 | 0 0 0 0 0 0 0 0 0 0 0 0 |
484 | 0 0 0 0 0 0 0 0 0 1 1 1 33 37 35 35 37 36 | 485 | 0 0 0 0 0 0 0 0 0 0 0 0 |
485 | 32 35 33 28 31 30 23 27 26 20 24 24 18 22 22 17 21 21 | 486 | 0 0 0 0 0 0 0 0 0 0 0 0 |
486 | 16 20 20 16 20 20 17 21 21 21 25 23 31 33 31 44 46 43 | 487 | 0 0 0 0 0 0 0 0 0 0 0 0 |
487 | 31 33 31 11 13 13 12 14 14 12 15 15 13 16 16 14 17 17 | 488 | 0 0 0 0 0 0 0 0 0 0 0 0 |
488 | 14 17 17 14 17 17 14 17 17 13 16 16 12 15 15 12 14 14 | 489 | 0 0 0 0 0 0 0 0 0 0 0 0 |
489 | 11 13 13 9 11 11 8 10 10 6 8 8 4 5 5 17 18 17 | 490 | 0 0 0 0 0 0 0 0 0 0 0 0 |
490 | 30 33 30 20 23 22 15 18 18 13 16 16 12 15 15 12 14 14 | 491 | 0 0 0 0 0 0 0 0 0 10 10 10 |
491 | 13 16 16 14 17 17 14 18 18 11 12 11 7 7 5 16 17 12 | 492 | 30 30 30 78 78 78 50 50 50 104 69 6 |
492 | 21 22 20 30 31 28 25 27 25 21 22 20 14 14 13 10 12 12 | 493 | 192 133 9 216 158 10 236 178 12 236 186 11 |
493 | 10 12 12 9 11 11 0 0 0 0 0 0 0 0 0 0 0 0 | 494 | 232 195 16 241 208 19 244 214 54 245 215 43 |
494 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 495 | 246 215 20 246 215 20 241 208 19 198 155 10 |
495 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 496 | 200 144 11 216 158 10 156 118 10 2 2 6 |
496 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 497 | 2 2 6 2 2 6 2 2 6 2 2 6 |
497 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 498 | 6 6 6 90 90 90 54 54 54 18 18 18 |
498 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 499 | 6 6 6 0 0 0 0 0 0 0 0 0 |
499 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 500 | 0 0 0 0 0 0 0 0 0 0 0 0 |
500 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 501 | 0 0 0 0 0 0 0 0 0 0 0 0 |
501 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 502 | 0 0 0 0 0 0 0 0 0 0 0 0 |
502 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 503 | 0 0 0 0 0 0 0 0 0 0 0 0 |
503 | 0 0 0 | 504 | 0 0 0 0 0 0 0 0 0 0 0 0 |
504 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 505 | 0 0 0 0 0 0 0 0 0 0 0 0 |
505 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 506 | 0 0 0 0 0 0 0 0 0 0 0 0 |
506 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 507 | 0 0 0 0 0 0 0 0 0 0 0 0 |
507 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 508 | 0 0 0 0 0 0 0 0 0 0 0 0 |
508 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 509 | 0 0 0 0 0 0 0 0 0 0 0 0 |
509 | 0 0 0 0 0 0 0 0 0 0 0 0 18 22 22 27 30 29 | 510 | 0 0 0 0 0 0 0 0 0 0 0 0 |
510 | 27 29 28 40 41 39 53 55 47 53 55 47 53 55 47 46 47 43 | 511 | 0 0 0 0 0 0 0 0 0 10 10 10 |
511 | 25 27 25 16 20 20 17 21 21 23 25 24 31 33 31 20 20 20 | 512 | 30 30 30 78 78 78 46 46 46 22 22 22 |
512 | 12 15 15 14 17 17 15 19 19 16 20 20 17 21 21 18 22 22 | 513 | 137 92 6 210 162 10 239 182 13 238 190 10 |
513 | 18 22 22 18 22 22 18 22 22 17 21 21 17 21 21 16 19 19 | 514 | 238 202 15 241 208 19 246 215 20 246 215 20 |
514 | 15 18 18 13 16 16 12 15 15 10 12 12 8 10 10 6 8 8 | 515 | 241 208 19 203 166 17 185 133 11 210 150 10 |
515 | 21 22 21 22 24 23 15 19 19 13 17 17 13 16 16 12 15 15 | 516 | 216 158 10 210 150 10 102 78 10 2 2 6 |
516 | 12 15 15 13 17 17 14 18 18 14 18 18 13 15 14 10 9 6 | 517 | 6 6 6 54 54 54 14 14 14 2 2 6 |
517 | 7 7 5 7 7 5 7 7 5 9 11 11 10 12 12 10 12 12 | 518 | 2 2 6 62 62 62 74 74 74 30 30 30 |
518 | 10 12 12 6 7 7 0 0 0 0 0 0 0 0 0 0 0 0 | 519 | 10 10 10 0 0 0 0 0 0 0 0 0 |
519 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 520 | 0 0 0 0 0 0 0 0 0 0 0 0 |
520 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 521 | 0 0 0 0 0 0 0 0 0 0 0 0 |
521 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 522 | 0 0 0 0 0 0 0 0 0 0 0 0 |
522 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 523 | 0 0 0 0 0 0 0 0 0 0 0 0 |
523 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 524 | 0 0 0 0 0 0 0 0 0 0 0 0 |
524 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 525 | 0 0 0 0 0 0 0 0 0 0 0 0 |
525 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 526 | 0 0 0 0 0 0 0 0 0 0 0 0 |
526 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 527 | 0 0 0 0 0 0 0 0 0 0 0 0 |
527 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 528 | 0 0 0 0 0 0 0 0 0 0 0 0 |
528 | 0 0 0 | 529 | 0 0 0 0 0 0 0 0 0 0 0 0 |
529 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 530 | 0 0 0 0 0 0 0 0 0 0 0 0 |
530 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 531 | 0 0 0 0 0 0 0 0 0 10 10 10 |
531 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 532 | 34 34 34 78 78 78 50 50 50 6 6 6 |
532 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 533 | 94 70 30 139 102 15 190 146 13 226 184 13 |
533 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 534 | 232 200 30 232 195 16 215 174 15 190 146 13 |
534 | 0 0 0 0 0 0 0 0 0 0 0 0 16 17 12 82 81 62 | 535 | 168 122 10 192 133 9 210 150 10 213 154 11 |
535 | 118 116 76 118 116 76 161 156 96 161 156 96 161 156 96 118 116 76 | 536 | 202 150 34 182 157 106 101 98 89 2 2 6 |
536 | 118 116 76 96 95 69 53 55 47 22 24 23 14 17 17 13 16 16 | 537 | 2 2 6 78 78 78 116 116 116 58 58 58 |
537 | 15 19 19 17 21 21 18 22 22 20 24 24 20 24 24 23 27 26 | 538 | 2 2 6 22 22 22 90 90 90 46 46 46 |
538 | 23 27 26 23 27 26 23 27 26 23 27 26 23 27 26 20 24 24 | 539 | 18 18 18 6 6 6 0 0 0 0 0 0 |
539 | 20 23 23 17 21 21 16 19 19 14 17 17 12 15 15 10 12 12 | 540 | 0 0 0 0 0 0 0 0 0 0 0 0 |
540 | 9 11 11 20 23 22 16 19 19 14 17 17 13 16 16 12 15 15 | 541 | 0 0 0 0 0 0 0 0 0 0 0 0 |
541 | 11 14 14 13 16 16 14 17 17 14 18 18 14 17 17 12 15 15 | 542 | 0 0 0 0 0 0 0 0 0 0 0 0 |
542 | 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 | 543 | 0 0 0 0 0 0 0 0 0 0 0 0 |
543 | 9 11 11 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 | 544 | 0 0 0 0 0 0 0 0 0 0 0 0 |
544 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 545 | 0 0 0 0 0 0 0 0 0 0 0 0 |
545 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 546 | 0 0 0 0 0 0 0 0 0 0 0 0 |
546 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 547 | 0 0 0 0 0 0 0 0 0 0 0 0 |
547 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 548 | 0 0 0 0 0 0 0 0 0 0 0 0 |
548 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 549 | 0 0 0 0 0 0 0 0 0 0 0 0 |
549 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 550 | 0 0 0 0 0 0 0 0 0 0 0 0 |
550 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 551 | 0 0 0 0 0 0 0 0 0 10 10 10 |
551 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 552 | 38 38 38 86 86 86 50 50 50 6 6 6 |
552 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 553 | 128 128 128 174 154 114 156 107 11 168 122 10 |
553 | 0 0 0 | 554 | 198 155 10 184 144 12 197 138 11 200 144 11 |
554 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 555 | 206 145 10 206 145 10 197 138 11 188 164 115 |
555 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 556 | 195 195 195 198 198 198 174 174 174 14 14 14 |
556 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 557 | 2 2 6 22 22 22 116 116 116 116 116 116 |
557 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 558 | 22 22 22 2 2 6 74 74 74 70 70 70 |
558 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 559 | 30 30 30 10 10 10 0 0 0 0 0 0 |
559 | 0 0 0 0 0 0 0 0 0 0 0 0 53 55 47 161 156 96 | 560 | 0 0 0 0 0 0 0 0 0 0 0 0 |
560 | 161 156 96 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 561 | 0 0 0 0 0 0 0 0 0 0 0 0 |
561 | 230 229 82 161 156 96 118 116 76 96 95 69 21 22 20 16 19 19 | 562 | 0 0 0 0 0 0 0 0 0 0 0 0 |
562 | 18 22 22 20 24 24 23 27 26 23 27 26 26 28 27 27 30 29 | 563 | 0 0 0 0 0 0 0 0 0 0 0 0 |
563 | 27 30 29 18 22 22 12 14 14 8 10 10 9 11 11 17 21 21 | 564 | 0 0 0 0 0 0 0 0 0 0 0 0 |
564 | 23 27 26 23 27 26 20 24 24 18 22 22 16 20 20 14 17 17 | 565 | 0 0 0 0 0 0 0 0 0 0 0 0 |
565 | 12 14 14 14 17 17 16 20 20 14 17 17 13 17 17 13 16 16 | 566 | 0 0 0 0 0 0 0 0 0 0 0 0 |
566 | 12 15 15 12 15 15 13 17 17 14 18 18 14 17 17 13 16 16 | 567 | 0 0 0 0 0 0 0 0 0 0 0 0 |
567 | 11 13 13 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 | 568 | 0 0 0 0 0 0 0 0 0 0 0 0 |
568 | 4 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 569 | 0 0 0 0 0 0 0 0 0 0 0 0 |
569 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 570 | 0 0 0 0 0 0 0 0 0 0 0 0 |
570 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 571 | 0 0 0 0 0 0 6 6 6 18 18 18 |
571 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 572 | 50 50 50 101 101 101 26 26 26 10 10 10 |
572 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 573 | 138 138 138 190 190 190 174 154 114 156 107 11 |
573 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 574 | 197 138 11 200 144 11 197 138 11 192 133 9 |
574 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 575 | 180 123 7 190 142 34 190 178 144 187 187 187 |
575 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 576 | 202 202 202 221 221 221 214 214 214 66 66 66 |
576 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 577 | 2 2 6 2 2 6 50 50 50 62 62 62 |
577 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 578 | 6 6 6 2 2 6 10 10 10 90 90 90 |
578 | 0 0 0 | 579 | 50 50 50 18 18 18 6 6 6 0 0 0 |
579 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 580 | 0 0 0 0 0 0 0 0 0 0 0 0 |
580 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 581 | 0 0 0 0 0 0 0 0 0 0 0 0 |
581 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 582 | 0 0 0 0 0 0 0 0 0 0 0 0 |
582 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 583 | 0 0 0 0 0 0 0 0 0 0 0 0 |
583 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 584 | 0 0 0 0 0 0 0 0 0 0 0 0 |
584 | 0 0 0 0 0 0 0 0 0 13 12 7 118 116 76 230 229 82 | 585 | 0 0 0 0 0 0 0 0 0 0 0 0 |
585 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 586 | 0 0 0 0 0 0 0 0 0 0 0 0 |
586 | 230 229 82 230 229 82 230 229 82 161 156 96 118 116 76 30 31 28 | 587 | 0 0 0 0 0 0 0 0 0 0 0 0 |
587 | 20 24 24 23 27 26 27 30 29 28 31 30 30 32 31 23 27 26 | 588 | 0 0 0 0 0 0 0 0 0 0 0 0 |
588 | 16 19 19 17 21 21 12 15 15 9 11 11 10 12 12 9 11 11 | 589 | 0 0 0 0 0 0 0 0 0 0 0 0 |
589 | 20 24 24 28 31 30 26 28 27 23 27 26 20 24 24 17 21 21 | 590 | 0 0 0 0 0 0 0 0 0 0 0 0 |
590 | 15 19 19 13 16 16 16 19 19 14 18 18 14 17 17 13 16 16 | 591 | 0 0 0 0 0 0 10 10 10 34 34 34 |
591 | 12 15 15 11 14 14 13 16 16 14 17 17 14 18 18 14 17 17 | 592 | 74 74 74 74 74 74 2 2 6 6 6 6 |
592 | 12 15 15 10 12 12 10 12 12 10 12 12 10 12 12 8 9 9 | 593 | 144 144 144 198 198 198 190 190 190 178 166 146 |
593 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 594 | 154 121 60 156 107 11 156 107 11 168 124 44 |
594 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 595 | 174 154 114 187 187 187 190 190 190 210 210 210 |
595 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 596 | 246 246 246 253 253 253 253 253 253 182 182 182 |
596 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 597 | 6 6 6 2 2 6 2 2 6 2 2 6 |
597 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 598 | 2 2 6 2 2 6 2 2 6 62 62 62 |
598 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 599 | 74 74 74 34 34 34 14 14 14 0 0 0 |
599 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 600 | 0 0 0 0 0 0 0 0 0 0 0 0 |
600 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 601 | 0 0 0 0 0 0 0 0 0 0 0 0 |
601 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 602 | 0 0 0 0 0 0 0 0 0 0 0 0 |
602 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 603 | 0 0 0 0 0 0 0 0 0 0 0 0 |
603 | 0 0 0 | 604 | 0 0 0 0 0 0 0 0 0 0 0 0 |
604 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 605 | 0 0 0 0 0 0 0 0 0 0 0 0 |
605 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 606 | 0 0 0 0 0 0 0 0 0 0 0 0 |
606 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 607 | 0 0 0 0 0 0 0 0 0 0 0 0 |
607 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 608 | 0 0 0 0 0 0 0 0 0 0 0 0 |
608 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 609 | 0 0 0 0 0 0 0 0 0 0 0 0 |
609 | 0 0 0 0 0 0 0 0 0 82 81 62 161 156 96 230 229 82 | 610 | 0 0 0 0 0 0 0 0 0 0 0 0 |
610 | 230 229 82 233 233 100 230 229 82 230 229 82 230 229 82 230 229 82 | 611 | 0 0 0 10 10 10 22 22 22 54 54 54 |
611 | 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 118 116 76 | 612 | 94 94 94 18 18 18 2 2 6 46 46 46 |
612 | 27 29 28 27 30 29 30 32 31 30 32 31 23 27 26 20 24 24 | 613 | 234 234 234 221 221 221 190 190 190 190 190 190 |
613 | 26 28 27 17 21 21 6 7 7 72 73 67 145 141 105 15 15 15 | 614 | 190 190 190 187 187 187 187 187 187 190 190 190 |
614 | 14 17 17 33 37 35 30 32 31 28 31 30 26 28 27 23 27 26 | 615 | 190 190 190 195 195 195 214 214 214 242 242 242 |
615 | 20 23 23 16 20 20 15 19 19 14 18 18 14 17 17 13 16 16 | 616 | 253 253 253 253 253 253 253 253 253 253 253 253 |
616 | 12 15 15 11 14 14 12 15 15 13 17 17 14 18 18 14 17 17 | 617 | 82 82 82 2 2 6 2 2 6 2 2 6 |
617 | 13 16 16 11 13 13 10 12 12 10 12 12 9 11 11 1 1 1 | 618 | 2 2 6 2 2 6 2 2 6 14 14 14 |
618 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 619 | 86 86 86 54 54 54 22 22 22 6 6 6 |
619 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 620 | 0 0 0 0 0 0 0 0 0 0 0 0 |
620 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 621 | 0 0 0 0 0 0 0 0 0 0 0 0 |
621 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 622 | 0 0 0 0 0 0 0 0 0 0 0 0 |
622 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 623 | 0 0 0 0 0 0 0 0 0 0 0 0 |
623 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 624 | 0 0 0 0 0 0 0 0 0 0 0 0 |
624 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 625 | 0 0 0 0 0 0 0 0 0 0 0 0 |
625 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 626 | 0 0 0 0 0 0 0 0 0 0 0 0 |
626 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 627 | 0 0 0 0 0 0 0 0 0 0 0 0 |
627 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 628 | 0 0 0 0 0 0 0 0 0 0 0 0 |
628 | 0 0 0 | 629 | 0 0 0 0 0 0 0 0 0 0 0 0 |
629 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 630 | 0 0 0 0 0 0 0 0 0 0 0 0 |
630 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 631 | 6 6 6 18 18 18 46 46 46 90 90 90 |
631 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 632 | 46 46 46 18 18 18 6 6 6 182 182 182 |
632 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 633 | 253 253 253 246 246 246 206 206 206 190 190 190 |
633 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 634 | 190 190 190 190 190 190 190 190 190 190 190 190 |
634 | 0 0 0 0 0 0 16 17 12 161 156 96 230 229 82 230 229 82 | 635 | 206 206 206 231 231 231 250 250 250 253 253 253 |
635 | 243 242 120 235 234 117 230 229 82 230 229 82 230 229 82 230 229 82 | 636 | 253 253 253 253 253 253 253 253 253 253 253 253 |
636 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 | 637 | 202 202 202 14 14 14 2 2 6 2 2 6 |
637 | 82 81 62 28 31 30 28 31 30 27 30 29 28 31 30 30 32 31 | 638 | 2 2 6 2 2 6 2 2 6 2 2 6 |
638 | 33 37 35 13 16 16 3 3 3 105 104 92 210 208 158 12 14 14 | 639 | 42 42 42 86 86 86 42 42 42 18 18 18 |
639 | 17 21 21 33 37 35 33 37 35 32 35 33 30 32 31 27 30 29 | 640 | 6 6 6 0 0 0 0 0 0 0 0 0 |
640 | 23 27 26 20 23 23 17 20 20 15 18 18 14 18 18 13 17 17 | 641 | 0 0 0 0 0 0 0 0 0 0 0 0 |
641 | 13 16 16 12 15 15 11 14 14 13 16 16 14 17 17 14 18 18 | 642 | 0 0 0 0 0 0 0 0 0 0 0 0 |
642 | 13 17 17 12 15 15 10 12 12 10 12 12 3 4 4 0 0 0 | 643 | 0 0 0 0 0 0 0 0 0 0 0 0 |
643 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 644 | 0 0 0 0 0 0 0 0 0 0 0 0 |
644 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 645 | 0 0 0 0 0 0 0 0 0 0 0 0 |
645 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 646 | 0 0 0 0 0 0 0 0 0 0 0 0 |
646 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 647 | 0 0 0 0 0 0 0 0 0 0 0 0 |
647 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 648 | 0 0 0 0 0 0 0 0 0 0 0 0 |
648 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 649 | 0 0 0 0 0 0 0 0 0 0 0 0 |
649 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 650 | 0 0 0 0 0 0 0 0 0 6 6 6 |
650 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 651 | 14 14 14 38 38 38 74 74 74 66 66 66 |
651 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 652 | 2 2 6 6 6 6 90 90 90 250 250 250 |
652 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 653 | 253 253 253 253 253 253 238 238 238 198 198 198 |
653 | 0 0 0 | 654 | 190 190 190 190 190 190 195 195 195 221 221 221 |
654 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 655 | 246 246 246 253 253 253 253 253 253 253 253 253 |
655 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 656 | 253 253 253 253 253 253 253 253 253 253 253 253 |
656 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 657 | 253 253 253 82 82 82 2 2 6 2 2 6 |
657 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 658 | 2 2 6 2 2 6 2 2 6 2 2 6 |
658 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 659 | 2 2 6 78 78 78 70 70 70 34 34 34 |
659 | 0 0 0 0 0 0 96 95 69 230 229 82 230 229 82 244 244 132 | 660 | 14 14 14 6 6 6 0 0 0 0 0 0 |
660 | 241 241 143 243 242 120 230 229 82 230 229 82 230 229 82 230 229 82 | 661 | 0 0 0 0 0 0 0 0 0 0 0 0 |
661 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 662 | 0 0 0 0 0 0 0 0 0 0 0 0 |
662 | 161 156 96 46 47 43 32 35 33 33 37 35 33 37 35 33 37 35 | 663 | 0 0 0 0 0 0 0 0 0 0 0 0 |
663 | 40 43 41 23 27 26 1 1 1 2 2 2 24 26 24 14 17 17 | 664 | 0 0 0 0 0 0 0 0 0 0 0 0 |
664 | 23 27 26 33 37 35 33 37 35 33 37 35 33 37 35 30 32 31 | 665 | 0 0 0 0 0 0 0 0 0 0 0 0 |
665 | 27 30 29 23 27 26 20 23 23 15 18 18 14 18 18 14 17 17 | 666 | 0 0 0 0 0 0 0 0 0 0 0 0 |
666 | 13 16 16 12 15 15 11 14 14 12 15 15 13 17 17 14 17 17 | 667 | 0 0 0 0 0 0 0 0 0 0 0 0 |
667 | 14 17 17 13 16 16 11 13 13 6 8 8 0 0 0 0 0 0 | 668 | 0 0 0 0 0 0 0 0 0 0 0 0 |
668 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 669 | 0 0 0 0 0 0 0 0 0 0 0 0 |
669 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 670 | 0 0 0 0 0 0 0 0 0 14 14 14 |
670 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 671 | 34 34 34 66 66 66 78 78 78 6 6 6 |
671 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 672 | 2 2 6 18 18 18 218 218 218 253 253 253 |
672 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 673 | 253 253 253 253 253 253 253 253 253 246 246 246 |
673 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 674 | 226 226 226 231 231 231 246 246 246 253 253 253 |
674 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 675 | 253 253 253 253 253 253 253 253 253 253 253 253 |
675 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 676 | 253 253 253 253 253 253 253 253 253 253 253 253 |
676 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 677 | 253 253 253 178 178 178 2 2 6 2 2 6 |
677 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 678 | 2 2 6 2 2 6 2 2 6 2 2 6 |
678 | 0 0 0 | 679 | 2 2 6 18 18 18 90 90 90 62 62 62 |
679 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 680 | 30 30 30 10 10 10 0 0 0 0 0 0 |
680 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 681 | 0 0 0 0 0 0 0 0 0 0 0 0 |
681 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 682 | 0 0 0 0 0 0 0 0 0 0 0 0 |
682 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 683 | 0 0 0 0 0 0 0 0 0 0 0 0 |
683 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 684 | 0 0 0 0 0 0 0 0 0 0 0 0 |
684 | 0 0 0 16 17 12 161 156 96 230 229 82 235 234 117 239 239 170 | 685 | 0 0 0 0 0 0 0 0 0 0 0 0 |
685 | 239 239 170 236 236 101 230 229 82 230 229 82 230 229 82 230 229 82 | 686 | 0 0 0 0 0 0 0 0 0 0 0 0 |
686 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 687 | 0 0 0 0 0 0 0 0 0 0 0 0 |
687 | 230 229 82 118 116 76 33 37 35 33 37 35 37 39 37 37 39 37 | 688 | 0 0 0 0 0 0 0 0 0 0 0 0 |
688 | 43 45 43 49 51 48 20 24 24 8 10 10 17 20 20 35 37 36 | 689 | 0 0 0 0 0 0 0 0 0 0 0 0 |
689 | 33 37 35 40 43 41 37 39 37 35 37 36 33 37 35 33 37 35 | 690 | 0 0 0 0 0 0 10 10 10 26 26 26 |
690 | 30 32 31 27 30 29 23 27 26 15 19 19 14 18 18 14 17 17 | 691 | 58 58 58 90 90 90 18 18 18 2 2 6 |
691 | 13 17 17 13 16 16 12 15 15 11 14 14 13 16 16 14 17 17 | 692 | 2 2 6 110 110 110 253 253 253 253 253 253 |
692 | 14 17 17 13 17 17 11 14 14 4 5 5 0 0 0 0 0 0 | 693 | 253 253 253 253 253 253 253 253 253 253 253 253 |
693 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 694 | 250 250 250 253 253 253 253 253 253 253 253 253 |
694 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 695 | 253 253 253 253 253 253 253 253 253 253 253 253 |
695 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 696 | 253 253 253 253 253 253 253 253 253 253 253 253 |
696 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 697 | 253 253 253 231 231 231 18 18 18 2 2 6 |
697 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 698 | 2 2 6 2 2 6 2 2 6 2 2 6 |
698 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 699 | 2 2 6 2 2 6 18 18 18 94 94 94 |
699 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 700 | 54 54 54 26 26 26 10 10 10 0 0 0 |
700 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 701 | 0 0 0 0 0 0 0 0 0 0 0 0 |
701 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 702 | 0 0 0 0 0 0 0 0 0 0 0 0 |
702 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 703 | 0 0 0 0 0 0 0 0 0 0 0 0 |
703 | 0 0 0 | 704 | 0 0 0 0 0 0 0 0 0 0 0 0 |
704 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 705 | 0 0 0 0 0 0 0 0 0 0 0 0 |
705 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 706 | 0 0 0 0 0 0 0 0 0 0 0 0 |
706 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 707 | 0 0 0 0 0 0 0 0 0 0 0 0 |
707 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 708 | 0 0 0 0 0 0 0 0 0 0 0 0 |
708 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 709 | 0 0 0 0 0 0 0 0 0 0 0 0 |
709 | 0 0 0 96 95 69 230 229 82 230 229 82 239 239 170 251 251 187 | 710 | 0 0 0 6 6 6 22 22 22 50 50 50 |
710 | 241 241 143 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 711 | 90 90 90 26 26 26 2 2 6 2 2 6 |
711 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 712 | 14 14 14 195 195 195 250 250 250 253 253 253 |
712 | 230 229 82 161 156 96 36 38 35 33 37 35 33 37 35 33 37 35 | 713 | 253 253 253 253 253 253 253 253 253 253 253 253 |
713 | 37 39 37 47 48 46 55 57 54 55 57 54 49 51 48 43 45 43 | 714 | 253 253 253 253 253 253 253 253 253 253 253 253 |
714 | 43 45 43 43 45 43 40 43 41 40 43 41 37 39 37 33 37 35 | 715 | 253 253 253 253 253 253 253 253 253 253 253 253 |
715 | 33 37 35 28 31 30 26 28 27 16 20 20 15 18 18 14 18 18 | 716 | 253 253 253 253 253 253 253 253 253 253 253 253 |
716 | 14 17 17 13 16 16 12 15 15 11 14 14 12 15 15 13 17 17 | 717 | 250 250 250 242 242 242 54 54 54 2 2 6 |
717 | 14 17 17 14 17 17 8 10 10 5 7 7 0 0 0 0 0 0 | 718 | 2 2 6 2 2 6 2 2 6 2 2 6 |
718 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 719 | 2 2 6 2 2 6 2 2 6 38 38 38 |
719 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 720 | 86 86 86 50 50 50 22 22 22 6 6 6 |
720 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 721 | 0 0 0 0 0 0 0 0 0 0 0 0 |
721 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 722 | 0 0 0 0 0 0 0 0 0 0 0 0 |
722 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 723 | 0 0 0 0 0 0 0 0 0 0 0 0 |
723 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 724 | 0 0 0 0 0 0 0 0 0 0 0 0 |
724 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 725 | 0 0 0 0 0 0 0 0 0 0 0 0 |
725 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 726 | 0 0 0 0 0 0 0 0 0 0 0 0 |
726 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 727 | 0 0 0 0 0 0 0 0 0 0 0 0 |
727 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 728 | 0 0 0 0 0 0 0 0 0 0 0 0 |
728 | 0 0 0 | 729 | 0 0 0 0 0 0 0 0 0 0 0 0 |
729 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 730 | 6 6 6 14 14 14 38 38 38 82 82 82 |
730 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 731 | 34 34 34 2 2 6 2 2 6 2 2 6 |
731 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 732 | 42 42 42 195 195 195 246 246 246 253 253 253 |
732 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 733 | 253 253 253 253 253 253 253 253 253 250 250 250 |
733 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 734 | 242 242 242 242 242 242 250 250 250 253 253 253 |
734 | 16 17 12 230 229 82 230 229 82 243 242 120 251 251 187 251 251 187 | 735 | 253 253 253 253 253 253 253 253 253 253 253 253 |
735 | 246 246 123 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 736 | 253 253 253 250 250 250 246 246 246 238 238 238 |
736 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 737 | 226 226 226 231 231 231 101 101 101 6 6 6 |
737 | 230 229 82 230 229 82 66 65 55 30 32 31 32 35 33 33 37 35 | 738 | 2 2 6 2 2 6 2 2 6 2 2 6 |
738 | 33 37 35 37 39 37 40 43 41 47 48 46 49 51 48 51 52 50 | 739 | 2 2 6 2 2 6 2 2 6 2 2 6 |
739 | 55 57 54 55 57 54 51 52 50 47 48 46 43 45 43 39 40 39 | 740 | 38 38 38 82 82 82 42 42 42 14 14 14 |
740 | 33 37 35 30 32 31 26 28 27 17 21 21 15 19 19 14 18 18 | 741 | 6 6 6 0 0 0 0 0 0 0 0 0 |
741 | 14 17 17 13 16 16 12 15 15 12 14 14 11 14 14 13 16 16 | 742 | 0 0 0 0 0 0 0 0 0 0 0 0 |
742 | 14 17 17 12 15 15 7 9 9 6 8 8 1 1 1 0 0 0 | 743 | 0 0 0 0 0 0 0 0 0 0 0 0 |
743 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 744 | 0 0 0 0 0 0 0 0 0 0 0 0 |
744 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 745 | 0 0 0 0 0 0 0 0 0 0 0 0 |
745 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 746 | 0 0 0 0 0 0 0 0 0 0 0 0 |
746 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 747 | 0 0 0 0 0 0 0 0 0 0 0 0 |
747 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 748 | 0 0 0 0 0 0 0 0 0 0 0 0 |
748 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 749 | 0 0 0 0 0 0 0 0 0 0 0 0 |
749 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 750 | 10 10 10 26 26 26 62 62 62 66 66 66 |
750 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 751 | 2 2 6 2 2 6 2 2 6 6 6 6 |
751 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 752 | 70 70 70 170 170 170 206 206 206 234 234 234 |
752 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 753 | 246 246 246 250 250 250 250 250 250 238 238 238 |
753 | 0 0 0 | 754 | 226 226 226 231 231 231 238 238 238 250 250 250 |
754 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 755 | 250 250 250 250 250 250 246 246 246 231 231 231 |
755 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 756 | 214 214 214 206 206 206 202 202 202 202 202 202 |
756 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 757 | 198 198 198 202 202 202 182 182 182 18 18 18 |
757 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 758 | 2 2 6 2 2 6 2 2 6 2 2 6 |
758 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 759 | 2 2 6 2 2 6 2 2 6 2 2 6 |
759 | 96 95 69 230 229 82 230 229 82 239 239 170 251 251 187 239 239 170 | 760 | 2 2 6 62 62 62 66 66 66 30 30 30 |
760 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 761 | 10 10 10 0 0 0 0 0 0 0 0 0 |
761 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 762 | 0 0 0 0 0 0 0 0 0 0 0 0 |
762 | 230 229 82 230 229 82 96 95 69 27 30 29 28 31 30 30 32 31 | 763 | 0 0 0 0 0 0 0 0 0 0 0 0 |
763 | 33 37 35 40 43 41 46 47 45 55 57 54 63 64 60 72 73 67 | 764 | 0 0 0 0 0 0 0 0 0 0 0 0 |
764 | 72 73 67 72 73 67 72 73 67 65 66 61 55 57 54 47 48 46 | 765 | 0 0 0 0 0 0 0 0 0 0 0 0 |
765 | 39 40 39 32 35 33 27 30 29 17 21 21 15 19 19 15 18 18 | 766 | 0 0 0 0 0 0 0 0 0 0 0 0 |
766 | 14 18 18 13 17 17 13 16 16 12 15 15 11 14 14 12 14 14 | 767 | 0 0 0 0 0 0 0 0 0 0 0 0 |
767 | 13 16 16 9 11 11 7 9 9 9 11 11 66 65 55 115 113 82 | 768 | 0 0 0 0 0 0 0 0 0 0 0 0 |
768 | 21 22 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 769 | 0 0 0 0 0 0 0 0 0 0 0 0 |
769 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 770 | 14 14 14 42 42 42 82 82 82 18 18 18 |
770 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 771 | 2 2 6 2 2 6 2 2 6 10 10 10 |
771 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 772 | 94 94 94 182 182 182 218 218 218 242 242 242 |
772 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 773 | 250 250 250 253 253 253 253 253 253 250 250 250 |
773 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 774 | 234 234 234 253 253 253 253 253 253 253 253 253 |
774 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 775 | 253 253 253 253 253 253 253 253 253 246 246 246 |
775 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 776 | 238 238 238 226 226 226 210 210 210 202 202 202 |
776 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 777 | 195 195 195 195 195 195 210 210 210 158 158 158 |
777 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 778 | 6 6 6 14 14 14 50 50 50 14 14 14 |
778 | 0 0 0 | 779 | 2 2 6 2 2 6 2 2 6 2 2 6 |
779 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 780 | 2 2 6 6 6 6 86 86 86 46 46 46 |
780 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 781 | 18 18 18 6 6 6 0 0 0 0 0 0 |
781 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 782 | 0 0 0 0 0 0 0 0 0 0 0 0 |
782 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 783 | 0 0 0 0 0 0 0 0 0 0 0 0 |
783 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 12 7 | 784 | 0 0 0 0 0 0 0 0 0 0 0 0 |
784 | 230 229 82 230 229 82 236 236 101 251 251 187 251 251 187 246 246 123 | 785 | 0 0 0 0 0 0 0 0 0 0 0 0 |
785 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 786 | 0 0 0 0 0 0 0 0 0 0 0 0 |
786 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 787 | 0 0 0 0 0 0 0 0 0 0 0 0 |
787 | 230 229 82 230 229 82 118 116 76 23 27 26 26 28 27 32 35 33 | 788 | 0 0 0 0 0 0 0 0 0 0 0 0 |
788 | 51 52 50 90 89 73 110 109 94 145 141 105 168 163 120 177 172 135 | 789 | 0 0 0 0 0 0 0 0 0 6 6 6 |
789 | 177 172 135 188 184 146 188 184 146 181 176 137 194 191 148 188 184 146 | 790 | 22 22 22 54 54 54 70 70 70 2 2 6 |
790 | 184 179 149 188 184 146 188 184 146 156 151 111 177 172 135 181 176 137 | 791 | 2 2 6 10 10 10 2 2 6 22 22 22 |
791 | 177 172 135 168 163 120 168 163 120 158 153 112 156 151 111 158 153 112 | 792 | 166 166 166 231 231 231 250 250 250 253 253 253 |
792 | 156 151 111 158 153 112 177 172 135 188 184 146 188 184 146 194 189 146 | 793 | 253 253 253 253 253 253 253 253 253 250 250 250 |
793 | 36 38 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 794 | 242 242 242 253 253 253 253 253 253 253 253 253 |
794 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 795 | 253 253 253 253 253 253 253 253 253 253 253 253 |
795 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 796 | 253 253 253 253 253 253 253 253 253 246 246 246 |
796 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 797 | 231 231 231 206 206 206 198 198 198 226 226 226 |
797 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 798 | 94 94 94 2 2 6 6 6 6 38 38 38 |
798 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 799 | 30 30 30 2 2 6 2 2 6 2 2 6 |
799 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 800 | 2 2 6 2 2 6 62 62 62 66 66 66 |
800 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 801 | 26 26 26 10 10 10 0 0 0 0 0 0 |
801 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 802 | 0 0 0 0 0 0 0 0 0 0 0 0 |
802 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 803 | 0 0 0 0 0 0 0 0 0 0 0 0 |
803 | 0 0 0 | 804 | 0 0 0 0 0 0 0 0 0 0 0 0 |
804 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 805 | 0 0 0 0 0 0 0 0 0 0 0 0 |
805 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 806 | 0 0 0 0 0 0 0 0 0 0 0 0 |
806 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 807 | 0 0 0 0 0 0 0 0 0 0 0 0 |
807 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 808 | 0 0 0 0 0 0 0 0 0 0 0 0 |
808 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 81 62 | 809 | 0 0 0 0 0 0 0 0 0 10 10 10 |
809 | 230 229 82 230 229 82 244 244 132 251 251 187 244 244 132 230 229 82 | 810 | 30 30 30 74 74 74 50 50 50 2 2 6 |
810 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 811 | 26 26 26 26 26 26 2 2 6 106 106 106 |
811 | 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 82 81 62 | 812 | 238 238 238 253 253 253 253 253 253 253 253 253 |
812 | 96 95 69 230 229 82 181 178 103 110 109 94 156 151 111 188 184 146 | 813 | 253 253 253 253 253 253 253 253 253 253 253 253 |
813 | 188 184 146 197 193 154 188 184 146 184 181 136 188 184 146 168 163 120 | 814 | 253 253 253 253 253 253 253 253 253 253 253 253 |
814 | 168 163 120 178 174 128 156 151 111 158 153 112 174 170 121 156 151 111 | 815 | 253 253 253 253 253 253 253 253 253 253 253 253 |
815 | 156 151 111 158 153 112 156 151 111 168 163 120 178 174 128 181 176 137 | 816 | 253 253 253 253 253 253 253 253 253 253 253 253 |
816 | 176 171 126 178 174 128 184 181 136 176 171 126 178 174 128 184 181 136 | 817 | 253 253 253 246 246 246 218 218 218 202 202 202 |
817 | 176 171 126 178 174 128 184 181 136 164 159 111 155 149 109 96 95 69 | 818 | 210 210 210 14 14 14 2 2 6 2 2 6 |
818 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 819 | 30 30 30 22 22 22 2 2 6 2 2 6 |
819 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 820 | 2 2 6 2 2 6 18 18 18 86 86 86 |
820 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 821 | 42 42 42 14 14 14 0 0 0 0 0 0 |
821 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 822 | 0 0 0 0 0 0 0 0 0 0 0 0 |
822 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 823 | 0 0 0 0 0 0 0 0 0 0 0 0 |
823 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 824 | 0 0 0 0 0 0 0 0 0 0 0 0 |
824 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 825 | 0 0 0 0 0 0 0 0 0 0 0 0 |
825 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 826 | 0 0 0 0 0 0 0 0 0 0 0 0 |
826 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 827 | 0 0 0 0 0 0 0 0 0 0 0 0 |
827 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 828 | 0 0 0 0 0 0 0 0 0 0 0 0 |
828 | 0 0 0 | 829 | 0 0 0 0 0 0 0 0 0 14 14 14 |
829 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 830 | 42 42 42 90 90 90 22 22 22 2 2 6 |
830 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 831 | 42 42 42 2 2 6 18 18 18 218 218 218 |
831 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 832 | 253 253 253 253 253 253 253 253 253 253 253 253 |
832 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 833 | 253 253 253 253 253 253 253 253 253 253 253 253 |
833 | 0 0 0 0 0 0 0 0 0 0 0 0 2 2 1 161 156 96 | 834 | 253 253 253 253 253 253 253 253 253 253 253 253 |
834 | 230 229 82 230 229 82 244 244 132 244 244 132 236 236 101 230 229 82 | 835 | 253 253 253 253 253 253 253 253 253 253 253 253 |
835 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 836 | 253 253 253 253 253 253 253 253 253 253 253 253 |
836 | 230 229 82 230 229 82 230 229 82 230 229 82 46 47 43 82 81 62 | 837 | 253 253 253 253 253 253 250 250 250 221 221 221 |
837 | 158 153 112 197 193 154 194 189 146 184 181 136 188 184 146 168 163 120 | 838 | 218 218 218 101 101 101 2 2 6 14 14 14 |
838 | 156 151 111 137 133 100 131 127 93 137 133 100 137 133 100 158 153 112 | 839 | 18 18 18 38 38 38 10 10 10 2 2 6 |
839 | 121 119 87 137 133 100 156 151 111 145 141 105 99 98 80 84 83 72 | 840 | 2 2 6 2 2 6 2 2 6 78 78 78 |
840 | 63 64 60 52 53 49 40 43 41 33 36 34 36 38 35 36 38 35 | 841 | 58 58 58 22 22 22 6 6 6 0 0 0 |
841 | 38 39 37 43 44 41 43 44 41 46 47 43 48 49 45 48 49 45 | 842 | 0 0 0 0 0 0 0 0 0 0 0 0 |
842 | 46 47 43 36 38 35 30 31 28 19 20 18 6 7 7 0 0 0 | 843 | 0 0 0 0 0 0 0 0 0 0 0 0 |
843 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 844 | 0 0 0 0 0 0 0 0 0 0 0 0 |
844 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 845 | 0 0 0 0 0 0 0 0 0 0 0 0 |
845 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 846 | 0 0 0 0 0 0 0 0 0 0 0 0 |
846 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 847 | 0 0 0 0 0 0 0 0 0 0 0 0 |
847 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 848 | 0 0 0 0 0 0 0 0 0 0 0 0 |
848 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 849 | 0 0 0 0 0 0 6 6 6 18 18 18 |
849 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 850 | 54 54 54 82 82 82 2 2 6 26 26 26 |
850 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 851 | 22 22 22 2 2 6 123 123 123 253 253 253 |
851 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 852 | 253 253 253 253 253 253 253 253 253 253 253 253 |
852 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 853 | 253 253 253 253 253 253 253 253 253 253 253 253 |
853 | 0 0 0 | 854 | 253 253 253 253 253 253 253 253 253 253 253 253 |
854 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 855 | 253 253 253 253 253 253 253 253 253 253 253 253 |
855 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 856 | 253 253 253 253 253 253 253 253 253 253 253 253 |
856 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 857 | 253 253 253 253 253 253 253 253 253 250 250 250 |
857 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 858 | 238 238 238 198 198 198 6 6 6 38 38 38 |
858 | 0 0 0 0 0 0 0 0 0 0 0 0 36 38 35 230 229 82 | 859 | 58 58 58 26 26 26 38 38 38 2 2 6 |
859 | 230 229 82 230 229 82 246 246 123 236 236 101 230 229 82 230 229 82 | 860 | 2 2 6 2 2 6 2 2 6 46 46 46 |
860 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 861 | 78 78 78 30 30 30 10 10 10 0 0 0 |
861 | 230 229 82 230 229 82 230 229 82 230 229 82 53 55 47 121 119 87 | 862 | 0 0 0 0 0 0 0 0 0 0 0 0 |
862 | 176 171 126 171 165 117 161 156 96 82 81 62 53 55 47 33 37 35 | 863 | 0 0 0 0 0 0 0 0 0 0 0 0 |
863 | 39 40 39 63 64 60 99 98 80 121 119 87 137 133 100 177 172 135 | 864 | 0 0 0 0 0 0 0 0 0 0 0 0 |
864 | 176 171 126 184 181 136 131 127 93 131 127 93 110 109 94 84 83 72 | 865 | 0 0 0 0 0 0 0 0 0 0 0 0 |
865 | 51 52 50 39 40 39 27 29 28 18 22 22 16 19 19 15 19 19 | 866 | 0 0 0 0 0 0 0 0 0 0 0 0 |
866 | 15 19 19 14 18 18 14 17 17 13 16 16 12 15 15 11 14 14 | 867 | 0 0 0 0 0 0 0 0 0 0 0 0 |
867 | 10 13 13 9 12 12 9 11 11 8 9 9 7 9 9 1 1 1 | 868 | 0 0 0 0 0 0 0 0 0 0 0 0 |
868 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 869 | 0 0 0 0 0 0 10 10 10 30 30 30 |
869 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 870 | 74 74 74 58 58 58 2 2 6 42 42 42 |
870 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 871 | 2 2 6 22 22 22 231 231 231 253 253 253 |
871 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 872 | 253 253 253 253 253 253 253 253 253 253 253 253 |
872 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 873 | 253 253 253 253 253 253 253 253 253 250 250 250 |
873 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 874 | 253 253 253 253 253 253 253 253 253 253 253 253 |
874 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 875 | 253 253 253 253 253 253 253 253 253 253 253 253 |
875 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 876 | 253 253 253 253 253 253 253 253 253 253 253 253 |
876 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 877 | 253 253 253 253 253 253 253 253 253 253 253 253 |
877 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 878 | 253 253 253 246 246 246 46 46 46 38 38 38 |
878 | 0 0 0 | 879 | 42 42 42 14 14 14 38 38 38 14 14 14 |
879 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 880 | 2 2 6 2 2 6 2 2 6 6 6 6 |
880 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 881 | 86 86 86 46 46 46 14 14 14 0 0 0 |
881 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 882 | 0 0 0 0 0 0 0 0 0 0 0 0 |
882 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 883 | 0 0 0 0 0 0 0 0 0 0 0 0 |
883 | 0 0 0 0 0 0 0 0 0 0 0 0 118 116 76 230 229 82 | 884 | 0 0 0 0 0 0 0 0 0 0 0 0 |
884 | 230 229 82 230 229 82 236 236 101 230 229 82 230 229 82 230 229 82 | 885 | 0 0 0 0 0 0 0 0 0 0 0 0 |
885 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 886 | 0 0 0 0 0 0 0 0 0 0 0 0 |
886 | 230 229 82 230 229 82 230 229 82 230 229 82 96 95 69 71 71 57 | 887 | 0 0 0 0 0 0 0 0 0 0 0 0 |
887 | 36 38 35 118 116 76 118 116 76 12 15 15 15 18 18 20 24 24 | 888 | 0 0 0 0 0 0 0 0 0 0 0 0 |
888 | 33 37 35 55 56 53 84 83 72 110 109 94 145 141 105 110 109 94 | 889 | 0 0 0 6 6 6 14 14 14 42 42 42 |
889 | 168 163 120 121 119 87 156 151 111 131 127 93 87 86 72 61 63 57 | 890 | 90 90 90 18 18 18 18 18 18 26 26 26 |
890 | 47 48 46 28 31 30 18 22 22 15 19 19 15 18 18 15 19 19 | 891 | 2 2 6 116 116 116 253 253 253 253 253 253 |
891 | 15 19 19 14 18 18 14 17 17 13 17 17 13 16 16 12 15 15 | 892 | 253 253 253 253 253 253 253 253 253 253 253 253 |
892 | 11 13 13 10 12 12 9 11 11 8 10 10 7 9 9 3 3 3 | 893 | 253 253 253 253 253 253 250 250 250 238 238 238 |
893 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 894 | 253 253 253 253 253 253 253 253 253 253 253 253 |
894 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 895 | 253 253 253 253 253 253 253 253 253 253 253 253 |
895 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 896 | 253 253 253 253 253 253 253 253 253 253 253 253 |
896 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 897 | 253 253 253 253 253 253 253 253 253 253 253 253 |
897 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 898 | 253 253 253 253 253 253 94 94 94 6 6 6 |
898 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 899 | 2 2 6 2 2 6 10 10 10 34 34 34 |
899 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 900 | 2 2 6 2 2 6 2 2 6 2 2 6 |
900 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 901 | 74 74 74 58 58 58 22 22 22 6 6 6 |
901 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 902 | 0 0 0 0 0 0 0 0 0 0 0 0 |
902 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 903 | 0 0 0 0 0 0 0 0 0 0 0 0 |
903 | 0 0 0 | 904 | 0 0 0 0 0 0 0 0 0 0 0 0 |
904 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 905 | 0 0 0 0 0 0 0 0 0 0 0 0 |
905 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 906 | 0 0 0 0 0 0 0 0 0 0 0 0 |
906 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 907 | 0 0 0 0 0 0 0 0 0 0 0 0 |
907 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 908 | 0 0 0 0 0 0 0 0 0 0 0 0 |
908 | 0 0 0 0 0 0 0 0 0 1 1 0 230 229 82 230 229 82 | 909 | 0 0 0 10 10 10 26 26 26 66 66 66 |
909 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 910 | 82 82 82 2 2 6 38 38 38 6 6 6 |
910 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 911 | 14 14 14 210 210 210 253 253 253 253 253 253 |
911 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 | 912 | 253 253 253 253 253 253 253 253 253 253 253 253 |
912 | 161 156 96 230 229 82 118 116 76 11 14 14 14 17 17 18 22 22 | 913 | 253 253 253 253 253 253 246 246 246 242 242 242 |
913 | 27 30 29 40 43 41 60 60 56 84 83 72 105 104 92 110 109 94 | 914 | 253 253 253 253 253 253 253 253 253 253 253 253 |
914 | 110 109 94 110 109 94 99 98 80 90 89 73 68 70 65 47 48 46 | 915 | 253 253 253 253 253 253 253 253 253 253 253 253 |
915 | 32 34 33 23 25 24 20 23 23 17 21 21 15 19 19 14 17 17 | 916 | 253 253 253 253 253 253 253 253 253 253 253 253 |
916 | 15 19 19 15 18 18 14 18 18 13 17 17 13 16 16 12 15 15 | 917 | 253 253 253 253 253 253 253 253 253 253 253 253 |
917 | 11 14 14 10 12 12 9 11 11 8 10 10 7 9 9 4 5 5 | 918 | 253 253 253 253 253 253 144 144 144 2 2 6 |
918 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 919 | 2 2 6 2 2 6 2 2 6 46 46 46 |
919 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 920 | 2 2 6 2 2 6 2 2 6 2 2 6 |
920 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 921 | 42 42 42 74 74 74 30 30 30 10 10 10 |
921 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 922 | 0 0 0 0 0 0 0 0 0 0 0 0 |
922 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 923 | 0 0 0 0 0 0 0 0 0 0 0 0 |
923 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 924 | 0 0 0 0 0 0 0 0 0 0 0 0 |
924 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 925 | 0 0 0 0 0 0 0 0 0 0 0 0 |
925 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 926 | 0 0 0 0 0 0 0 0 0 0 0 0 |
926 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 927 | 0 0 0 0 0 0 0 0 0 0 0 0 |
927 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 928 | 0 0 0 0 0 0 0 0 0 0 0 0 |
928 | 0 0 0 | 929 | 6 6 6 14 14 14 42 42 42 90 90 90 |
929 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 930 | 26 26 26 6 6 6 42 42 42 2 2 6 |
930 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 931 | 74 74 74 250 250 250 253 253 253 253 253 253 |
931 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 932 | 253 253 253 253 253 253 253 253 253 253 253 253 |
932 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 933 | 253 253 253 253 253 253 242 242 242 242 242 242 |
933 | 0 0 0 0 0 0 0 0 0 16 17 12 230 229 82 230 229 82 | 934 | 253 253 253 253 253 253 253 253 253 253 253 253 |
934 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 935 | 253 253 253 253 253 253 253 253 253 253 253 253 |
935 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 936 | 253 253 253 253 253 253 253 253 253 253 253 253 |
936 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 937 | 253 253 253 253 253 253 253 253 253 253 253 253 |
937 | 230 229 82 161 156 96 118 116 76 11 13 13 13 16 16 15 19 19 | 938 | 253 253 253 253 253 253 182 182 182 2 2 6 |
938 | 20 24 24 30 32 31 40 43 41 51 52 50 63 64 60 72 73 67 | 939 | 2 2 6 2 2 6 2 2 6 46 46 46 |
939 | 65 66 61 65 66 61 65 66 61 55 57 54 46 47 45 33 37 35 | 940 | 2 2 6 2 2 6 2 2 6 2 2 6 |
940 | 27 29 28 20 24 24 17 21 21 16 20 20 16 20 20 15 19 19 | 941 | 10 10 10 86 86 86 38 38 38 10 10 10 |
941 | 15 19 19 15 19 19 14 18 18 14 17 17 13 16 16 12 15 15 | 942 | 0 0 0 0 0 0 0 0 0 0 0 0 |
942 | 11 14 14 10 13 13 9 12 12 8 10 10 7 9 9 6 7 7 | 943 | 0 0 0 0 0 0 0 0 0 0 0 0 |
943 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 944 | 0 0 0 0 0 0 0 0 0 0 0 0 |
944 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 945 | 0 0 0 0 0 0 0 0 0 0 0 0 |
945 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 946 | 0 0 0 0 0 0 0 0 0 0 0 0 |
946 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 947 | 0 0 0 0 0 0 0 0 0 0 0 0 |
947 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 948 | 0 0 0 0 0 0 0 0 0 0 0 0 |
948 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 949 | 10 10 10 26 26 26 66 66 66 82 82 82 |
949 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 950 | 2 2 6 22 22 22 18 18 18 2 2 6 |
950 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 951 | 149 149 149 253 253 253 253 253 253 253 253 253 |
951 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 952 | 253 253 253 253 253 253 253 253 253 253 253 253 |
952 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 953 | 253 253 253 253 253 253 234 234 234 242 242 242 |
953 | 0 0 0 | 954 | 253 253 253 253 253 253 253 253 253 253 253 253 |
954 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 955 | 253 253 253 253 253 253 253 253 253 253 253 253 |
955 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 956 | 253 253 253 253 253 253 253 253 253 253 253 253 |
956 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 957 | 253 253 253 253 253 253 253 253 253 253 253 253 |
957 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 958 | 253 253 253 253 253 253 206 206 206 2 2 6 |
958 | 0 0 0 0 0 0 0 0 0 53 55 47 230 229 82 230 229 82 | 959 | 2 2 6 2 2 6 2 2 6 38 38 38 |
959 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 960 | 2 2 6 2 2 6 2 2 6 2 2 6 |
960 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 961 | 6 6 6 86 86 86 46 46 46 14 14 14 |
961 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 962 | 0 0 0 0 0 0 0 0 0 0 0 0 |
962 | 161 156 96 118 116 76 53 55 47 10 13 13 12 15 15 14 17 17 | 963 | 0 0 0 0 0 0 0 0 0 0 0 0 |
963 | 17 20 20 20 24 24 27 29 28 32 34 33 37 39 37 40 43 41 | 964 | 0 0 0 0 0 0 0 0 0 0 0 0 |
964 | 43 45 43 41 42 42 35 37 36 30 32 31 28 31 30 23 27 26 | 965 | 0 0 0 0 0 0 0 0 0 0 0 0 |
965 | 20 23 23 17 21 21 16 20 20 16 20 20 16 20 20 16 19 19 | 966 | 0 0 0 0 0 0 0 0 0 0 0 0 |
966 | 15 19 19 15 19 19 14 18 18 14 17 17 13 16 16 12 15 15 | 967 | 0 0 0 0 0 0 0 0 0 0 0 0 |
967 | 11 14 14 10 13 13 9 12 12 9 11 11 8 10 10 10 12 12 | 968 | 0 0 0 0 0 0 0 0 0 6 6 6 |
968 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 969 | 18 18 18 46 46 46 86 86 86 18 18 18 |
969 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 970 | 2 2 6 34 34 34 10 10 10 6 6 6 |
970 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 971 | 210 210 210 253 253 253 253 253 253 253 253 253 |
971 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 972 | 253 253 253 253 253 253 253 253 253 253 253 253 |
972 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 973 | 253 253 253 253 253 253 234 234 234 242 242 242 |
973 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 974 | 253 253 253 253 253 253 253 253 253 253 253 253 |
974 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 975 | 253 253 253 253 253 253 253 253 253 253 253 253 |
975 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 976 | 253 253 253 253 253 253 253 253 253 253 253 253 |
976 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 977 | 253 253 253 253 253 253 253 253 253 253 253 253 |
977 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 978 | 253 253 253 253 253 253 221 221 221 6 6 6 |
978 | 0 0 0 | 979 | 2 2 6 2 2 6 6 6 6 30 30 30 |
979 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 980 | 2 2 6 2 2 6 2 2 6 2 2 6 |
980 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 981 | 2 2 6 82 82 82 54 54 54 18 18 18 |
981 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 982 | 6 6 6 0 0 0 0 0 0 0 0 0 |
982 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 983 | 0 0 0 0 0 0 0 0 0 0 0 0 |
983 | 0 0 0 0 0 0 0 0 0 82 81 62 230 229 82 230 229 82 | 984 | 0 0 0 0 0 0 0 0 0 0 0 0 |
984 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 985 | 0 0 0 0 0 0 0 0 0 0 0 0 |
985 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 986 | 0 0 0 0 0 0 0 0 0 0 0 0 |
986 | 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 161 156 96 | 987 | 0 0 0 0 0 0 0 0 0 0 0 0 |
987 | 118 116 76 82 81 62 13 14 12 10 13 13 12 15 15 13 17 17 | 988 | 0 0 0 0 0 0 0 0 0 10 10 10 |
988 | 15 19 19 16 20 20 20 23 23 20 24 24 23 27 26 26 28 27 | 989 | 26 26 26 66 66 66 62 62 62 2 2 6 |
989 | 26 28 27 26 28 27 23 27 26 18 22 22 20 23 23 17 21 21 | 990 | 2 2 6 38 38 38 10 10 10 26 26 26 |
990 | 17 21 21 16 20 20 16 20 20 16 20 20 16 20 20 16 19 19 | 991 | 238 238 238 253 253 253 253 253 253 253 253 253 |
991 | 15 19 19 15 19 19 15 18 18 14 17 17 13 17 17 13 16 16 | 992 | 253 253 253 253 253 253 253 253 253 253 253 253 |
992 | 12 15 15 12 14 14 12 14 14 12 14 14 12 14 14 23 24 24 | 993 | 253 253 253 253 253 253 231 231 231 238 238 238 |
993 | 6 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 994 | 253 253 253 253 253 253 253 253 253 253 253 253 |
994 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 995 | 253 253 253 253 253 253 253 253 253 253 253 253 |
995 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 996 | 253 253 253 253 253 253 253 253 253 253 253 253 |
996 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 997 | 253 253 253 253 253 253 253 253 253 253 253 253 |
997 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 998 | 253 253 253 253 253 253 231 231 231 6 6 6 |
998 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 999 | 2 2 6 2 2 6 10 10 10 30 30 30 |
999 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1000 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1000 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1001 | 2 2 6 66 66 66 58 58 58 22 22 22 |
1001 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1002 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1002 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1003 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1003 | 0 0 0 | 1004 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1004 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1005 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1005 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1006 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1006 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1007 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1007 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1008 | 0 0 0 0 0 0 0 0 0 10 10 10 |
1008 | 0 0 0 0 0 0 0 0 0 118 116 76 230 229 82 230 229 82 | 1009 | 38 38 38 78 78 78 6 6 6 2 2 6 |
1009 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 1010 | 2 2 6 46 46 46 14 14 14 42 42 42 |
1010 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 1011 | 246 246 246 253 253 253 253 253 253 253 253 253 |
1011 | 230 229 82 230 229 82 230 229 82 161 156 96 161 156 96 118 116 76 | 1012 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1012 | 71 71 57 13 14 12 9 12 12 10 13 13 12 15 15 13 17 17 | 1013 | 253 253 253 253 253 253 231 231 231 242 242 242 |
1013 | 15 18 18 15 19 19 16 20 20 17 21 21 17 21 21 18 22 22 | 1014 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1014 | 18 22 22 18 22 22 17 21 21 16 19 19 15 18 18 14 18 18 | 1015 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1015 | 16 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1016 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1016 | 15 19 19 15 19 19 15 18 18 14 18 18 16 20 20 23 25 24 | 1017 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1017 | 17 21 21 25 27 26 47 48 46 47 48 46 51 52 50 72 73 67 | 1018 | 253 253 253 253 253 253 234 234 234 10 10 10 |
1018 | 33 36 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1019 | 2 2 6 2 2 6 22 22 22 14 14 14 |
1019 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1020 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1020 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1021 | 2 2 6 66 66 66 62 62 62 22 22 22 |
1021 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1022 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1022 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1023 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1023 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1024 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1024 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1025 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1025 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1026 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1026 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1027 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1027 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1028 | 0 0 0 0 0 0 6 6 6 18 18 18 |
1028 | 0 0 0 | 1029 | 50 50 50 74 74 74 2 2 6 2 2 6 |
1029 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1030 | 14 14 14 70 70 70 34 34 34 62 62 62 |
1030 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1031 | 250 250 250 253 253 253 253 253 253 253 253 253 |
1031 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1032 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1032 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1033 | 253 253 253 253 253 253 231 231 231 246 246 246 |
1033 | 0 0 0 0 0 0 0 0 0 118 116 76 230 229 82 230 229 82 | 1034 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1034 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 1035 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1035 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 1036 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1036 | 230 229 82 230 229 82 161 156 96 118 116 76 118 116 76 46 47 43 | 1037 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1037 | 9 11 11 9 11 11 10 12 12 11 13 13 12 15 15 14 17 17 | 1038 | 253 253 253 253 253 253 234 234 234 14 14 14 |
1038 | 15 18 18 15 19 19 16 20 20 16 20 20 16 20 20 16 20 20 | 1039 | 2 2 6 2 2 6 30 30 30 2 2 6 |
1039 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1040 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1040 | 15 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1041 | 2 2 6 66 66 66 62 62 62 22 22 22 |
1041 | 15 19 19 16 20 20 20 24 24 55 56 53 32 34 33 84 83 72 | 1042 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1042 | 90 89 73 110 109 94 110 109 94 105 104 92 110 109 94 110 109 94 | 1043 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1043 | 72 73 67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1044 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1044 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1045 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1045 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1046 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1046 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1047 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1047 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1048 | 0 0 0 0 0 0 6 6 6 18 18 18 |
1048 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1049 | 54 54 54 62 62 62 2 2 6 2 2 6 |
1049 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1050 | 2 2 6 30 30 30 46 46 46 70 70 70 |
1050 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1051 | 250 250 250 253 253 253 253 253 253 253 253 253 |
1051 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1052 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1052 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1053 | 253 253 253 253 253 253 231 231 231 246 246 246 |
1053 | 0 0 0 | 1054 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1054 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1055 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1055 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1056 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1056 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1057 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1057 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1058 | 253 253 253 253 253 253 226 226 226 10 10 10 |
1058 | 0 0 0 0 0 0 0 0 0 96 95 69 230 229 82 230 229 82 | 1059 | 2 2 6 6 6 6 30 30 30 2 2 6 |
1059 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 1060 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1060 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 1061 | 2 2 6 66 66 66 58 58 58 22 22 22 |
1061 | 230 229 82 161 156 96 118 116 76 82 81 62 16 17 12 9 11 11 | 1062 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1062 | 9 11 11 9 12 12 10 13 13 12 14 14 13 16 16 14 18 18 | 1063 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1063 | 15 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1064 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1064 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1065 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1065 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1066 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1066 | 16 19 19 33 36 34 99 98 80 156 151 111 145 141 105 184 179 149 | 1067 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1067 | 168 163 120 184 179 149 177 172 135 156 151 111 145 141 105 110 109 94 | 1068 | 0 0 0 0 0 0 6 6 6 22 22 22 |
1068 | 90 89 73 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 | 1069 | 58 58 58 62 62 62 2 2 6 2 2 6 |
1069 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1070 | 2 2 6 2 2 6 30 30 30 78 78 78 |
1070 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1071 | 250 250 250 253 253 253 253 253 253 253 253 253 |
1071 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1072 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1072 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1073 | 253 253 253 253 253 253 231 231 231 246 246 246 |
1073 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1074 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1074 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1075 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1075 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1076 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1076 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1077 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1077 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1078 | 253 253 253 253 253 253 206 206 206 2 2 6 |
1078 | 0 0 0 | 1079 | 22 22 22 34 34 34 18 14 6 22 22 22 |
1079 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1080 | 26 26 26 18 18 18 6 6 6 2 2 6 |
1080 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1081 | 2 2 6 82 82 82 54 54 54 18 18 18 |
1081 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1082 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1082 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1083 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1083 | 0 0 0 0 0 0 0 0 0 71 71 57 230 229 82 230 229 82 | 1084 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1084 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 | 1085 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1085 | 230 229 82 161 156 96 230 229 82 230 229 82 230 229 82 161 156 96 | 1086 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1086 | 118 116 76 82 81 62 30 31 28 9 11 11 9 11 11 9 11 11 | 1087 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1087 | 10 12 12 10 13 13 11 14 14 13 16 16 14 17 17 15 18 18 | 1088 | 0 0 0 0 0 0 6 6 6 26 26 26 |
1088 | 15 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1089 | 62 62 62 106 106 106 74 54 14 185 133 11 |
1089 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1090 | 210 162 10 121 92 8 6 6 6 62 62 62 |
1090 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1091 | 238 238 238 253 253 253 253 253 253 253 253 253 |
1091 | 18 22 22 58 59 55 137 133 100 197 193 154 214 212 158 210 208 158 | 1092 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1092 | 197 193 154 184 179 149 184 179 149 137 133 100 110 109 94 99 98 80 | 1093 | 253 253 253 253 253 253 231 231 231 246 246 246 |
1093 | 84 83 72 10 10 9 0 0 0 0 0 0 0 0 0 0 0 0 | 1094 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1094 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1095 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1095 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1096 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1096 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1097 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1097 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1098 | 253 253 253 253 253 253 158 158 158 18 18 18 |
1098 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1099 | 14 14 14 2 2 6 2 2 6 2 2 6 |
1099 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1100 | 6 6 6 18 18 18 66 66 66 38 38 38 |
1100 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1101 | 6 6 6 94 94 94 50 50 50 18 18 18 |
1101 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1102 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1102 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1103 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1103 | 0 0 0 | 1104 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1104 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1105 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1105 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1106 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1106 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1107 | 0 0 0 0 0 0 0 0 0 6 6 6 |
1107 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1108 | 10 10 10 10 10 10 18 18 18 38 38 38 |
1108 | 0 0 0 0 0 0 0 0 0 16 17 12 230 229 82 230 229 82 | 1109 | 78 78 78 142 134 106 216 158 10 242 186 14 |
1109 | 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 | 1110 | 246 190 14 246 190 14 156 118 10 10 10 10 |
1110 | 161 156 96 161 156 96 161 156 96 161 156 96 118 116 76 71 71 57 | 1111 | 90 90 90 238 238 238 253 253 253 253 253 253 |
1111 | 21 22 20 12 14 14 11 13 13 10 12 12 10 12 12 10 13 13 | 1112 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1112 | 11 13 13 12 15 15 13 16 16 14 17 17 14 18 18 15 19 19 | 1113 | 253 253 253 253 253 253 231 231 231 250 250 250 |
1113 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1114 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1114 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1115 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1115 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 17 21 21 | 1116 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1116 | 23 27 26 84 83 72 184 179 149 251 251 187 210 208 158 184 179 149 | 1117 | 253 253 253 253 253 253 253 253 253 246 230 190 |
1117 | 184 179 149 156 151 111 110 109 94 84 83 72 63 64 60 51 52 50 | 1118 | 238 204 91 238 204 91 181 142 44 37 26 9 |
1118 | 18 22 22 6 8 8 0 0 0 0 0 0 0 0 0 0 0 0 | 1119 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1119 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1120 | 2 2 6 2 2 6 38 38 38 46 46 46 |
1120 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1121 | 26 26 26 106 106 106 54 54 54 18 18 18 |
1121 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1122 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1122 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1123 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1123 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1124 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1124 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1125 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1125 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1126 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1126 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1127 | 0 0 0 6 6 6 14 14 14 22 22 22 |
1127 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1128 | 30 30 30 38 38 38 50 50 50 70 70 70 |
1128 | 0 0 0 | 1129 | 106 106 106 190 142 34 226 170 11 242 186 14 |
1129 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1130 | 246 190 14 246 190 14 246 190 14 154 114 10 |
1130 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1131 | 6 6 6 74 74 74 226 226 226 253 253 253 |
1131 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1132 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1132 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1133 | 253 253 253 253 253 253 231 231 231 250 250 250 |
1133 | 0 0 0 0 0 0 0 0 0 0 0 0 118 116 76 230 229 82 | 1134 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1134 | 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 161 156 96 | 1135 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1135 | 161 156 96 161 156 96 118 116 76 53 55 47 20 23 22 16 19 19 | 1136 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1136 | 13 16 16 12 15 15 12 14 14 11 14 14 11 14 14 11 14 14 | 1137 | 253 253 253 253 253 253 253 253 253 228 184 62 |
1137 | 12 15 15 13 16 16 14 17 17 15 19 19 16 20 20 17 21 21 | 1138 | 241 196 14 241 208 19 232 195 16 38 30 10 |
1138 | 23 27 26 18 22 22 20 24 24 23 27 26 30 32 31 17 21 21 | 1139 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1139 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1140 | 2 2 6 6 6 6 30 30 30 26 26 26 |
1140 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1141 | 203 166 17 154 142 90 66 66 66 26 26 26 |
1141 | 23 27 26 33 37 35 137 133 100 156 151 111 158 153 112 105 104 92 | 1142 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1142 | 105 104 92 68 70 65 39 40 39 18 22 22 12 14 14 12 15 15 | 1143 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1143 | 9 11 11 4 5 5 0 0 0 0 0 0 0 0 0 0 0 0 | 1144 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1144 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1145 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1145 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1146 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1146 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1147 | 6 6 6 18 18 18 38 38 38 58 58 58 |
1147 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1148 | 78 78 78 86 86 86 101 101 101 123 123 123 |
1148 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1149 | 175 146 61 210 150 10 234 174 13 246 186 14 |
1149 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1150 | 246 190 14 246 190 14 246 190 14 238 190 10 |
1150 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1151 | 102 78 10 2 2 6 46 46 46 198 198 198 |
1151 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1152 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1152 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1153 | 253 253 253 253 253 253 234 234 234 242 242 242 |
1153 | 0 0 0 | 1154 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1154 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1155 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1155 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1156 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1156 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1157 | 253 253 253 253 253 253 253 253 253 224 178 62 |
1157 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1158 | 242 186 14 241 196 14 210 166 10 22 18 6 |
1158 | 0 0 0 0 0 0 0 0 0 0 0 0 16 17 12 230 229 82 | 1159 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1159 | 230 229 82 230 229 82 230 229 82 161 156 96 118 116 76 118 116 76 | 1160 | 2 2 6 2 2 6 6 6 6 121 92 8 |
1160 | 118 116 76 66 65 55 43 45 43 32 34 33 25 27 26 20 23 22 | 1161 | 238 202 15 232 195 16 82 82 82 34 34 34 |
1161 | 17 20 20 15 18 18 14 17 17 15 18 18 13 16 16 14 17 17 | 1162 | 10 10 10 0 0 0 0 0 0 0 0 0 |
1162 | 14 18 18 16 20 20 32 34 33 55 57 54 58 59 55 72 73 67 | 1163 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1163 | 105 104 92 55 57 54 65 66 61 63 64 60 40 43 41 33 37 35 | 1164 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1164 | 41 42 42 20 24 24 16 20 20 16 20 20 16 20 20 16 20 20 | 1165 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1165 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1166 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1166 | 17 21 21 26 28 27 30 32 31 35 37 36 68 70 65 39 40 39 | 1167 | 14 14 14 38 38 38 70 70 70 154 122 46 |
1167 | 23 27 26 15 18 18 13 16 16 11 14 14 9 12 12 8 10 10 | 1168 | 190 142 34 200 144 11 197 138 11 197 138 11 |
1168 | 7 9 9 6 7 7 0 0 0 0 0 0 0 0 0 0 0 0 | 1169 | 213 154 11 226 170 11 242 186 14 246 190 14 |
1169 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1170 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1170 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1171 | 225 175 15 46 32 6 2 2 6 22 22 22 |
1171 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1172 | 158 158 158 250 250 250 253 253 253 253 253 253 |
1172 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1173 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1173 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1174 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1174 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1175 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1175 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1176 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1176 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1177 | 253 253 253 250 250 250 242 242 242 224 178 62 |
1177 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1178 | 239 182 13 236 186 11 213 154 11 46 32 6 |
1178 | 0 0 0 | 1179 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1179 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1180 | 2 2 6 2 2 6 61 42 6 225 175 15 |
1180 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1181 | 238 190 10 236 186 11 112 100 78 42 42 42 |
1181 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1182 | 14 14 14 0 0 0 0 0 0 0 0 0 |
1182 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1183 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1183 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 38 35 | 1184 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1184 | 230 229 82 230 229 82 230 229 82 96 95 69 30 31 28 49 51 48 | 1185 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1185 | 90 89 73 68 70 65 55 57 54 47 48 46 47 48 46 43 45 43 | 1186 | 0 0 0 0 0 0 0 0 0 6 6 6 |
1186 | 32 34 33 43 45 43 43 45 43 23 27 26 25 27 26 40 43 41 | 1187 | 22 22 22 54 54 54 154 122 46 213 154 11 |
1187 | 40 43 41 90 89 73 110 109 94 145 141 105 156 151 111 156 151 111 | 1188 | 226 170 11 230 174 11 226 170 11 226 170 11 |
1188 | 184 179 149 184 179 149 177 172 135 184 179 149 137 133 100 84 83 72 | 1189 | 236 178 12 242 186 14 246 190 14 246 190 14 |
1189 | 105 104 92 63 64 60 49 51 48 47 48 46 28 31 30 18 22 22 | 1190 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1190 | 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1191 | 241 196 14 184 144 12 10 10 10 2 2 6 |
1191 | 16 20 20 15 19 19 15 19 19 15 19 19 18 22 22 15 19 19 | 1192 | 6 6 6 116 116 116 242 242 242 253 253 253 |
1192 | 13 16 16 12 15 15 11 14 14 10 13 13 9 12 12 9 11 11 | 1193 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1193 | 8 10 10 6 8 8 0 0 0 0 0 0 0 0 0 0 0 0 | 1194 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1194 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1195 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1195 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1196 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1196 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1197 | 253 253 253 231 231 231 198 198 198 214 170 54 |
1197 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1198 | 236 178 12 236 178 12 210 150 10 137 92 6 |
1198 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1199 | 18 14 6 2 2 6 2 2 6 2 2 6 |
1199 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1200 | 6 6 6 70 47 6 200 144 11 236 178 12 |
1200 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1201 | 239 182 13 239 182 13 124 112 88 58 58 58 |
1201 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1202 | 22 22 22 6 6 6 0 0 0 0 0 0 |
1202 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1203 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1203 | 0 0 0 | 1204 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1204 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1205 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1205 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1206 | 0 0 0 0 0 0 0 0 0 10 10 10 |
1206 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1207 | 30 30 30 70 70 70 180 133 36 226 170 11 |
1207 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1208 | 239 182 13 242 186 14 242 186 14 246 186 14 |
1208 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1209 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1209 | 30 31 28 230 229 82 71 71 57 2 2 1 0 0 0 58 59 55 | 1210 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1210 | 105 104 92 84 83 72 65 66 61 84 83 72 110 109 94 110 109 94 | 1211 | 246 190 14 232 195 16 98 70 6 2 2 6 |
1211 | 145 141 105 105 104 92 110 109 94 110 109 94 84 83 72 110 109 94 | 1212 | 2 2 6 2 2 6 66 66 66 221 221 221 |
1212 | 158 153 112 197 193 154 197 193 154 239 239 170 251 251 187 251 251 187 | 1213 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1213 | 251 251 187 251 251 187 251 251 187 251 251 187 210 208 158 197 193 154 | 1214 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1214 | 197 193 154 184 179 149 145 141 105 137 133 100 105 104 92 47 48 46 | 1215 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1215 | 20 23 23 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1216 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1216 | 16 20 20 16 19 19 15 19 19 15 19 19 14 18 18 14 17 17 | 1217 | 253 253 253 206 206 206 198 198 198 214 166 58 |
1217 | 13 17 17 13 16 16 12 14 14 12 14 14 13 13 13 13 13 13 | 1218 | 230 174 11 230 174 11 216 158 10 192 133 9 |
1218 | 13 13 13 12 12 12 10 10 9 6 7 7 2 2 2 0 0 0 | 1219 | 163 110 8 116 81 8 102 78 10 116 81 8 |
1219 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1220 | 167 114 7 197 138 11 226 170 11 239 182 13 |
1220 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1221 | 242 186 14 242 186 14 162 146 94 78 78 78 |
1221 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1222 | 34 34 34 14 14 14 6 6 6 0 0 0 |
1222 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1223 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1223 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1224 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1224 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1225 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1225 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1226 | 0 0 0 0 0 0 0 0 0 6 6 6 |
1226 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1227 | 30 30 30 78 78 78 190 142 34 226 170 11 |
1227 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1228 | 239 182 13 246 190 14 246 190 14 246 190 14 |
1228 | 0 0 0 | 1229 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1229 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1230 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1230 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1231 | 246 190 14 241 196 14 203 166 17 22 18 6 |
1231 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1232 | 2 2 6 2 2 6 2 2 6 38 38 38 |
1232 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1233 | 218 218 218 253 253 253 253 253 253 253 253 253 |
1233 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1234 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1234 | 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 65 66 61 | 1235 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1235 | 105 104 92 84 83 72 84 83 72 110 109 94 184 179 149 210 208 158 | 1236 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1236 | 210 208 158 210 208 158 214 212 158 197 193 154 214 212 158 210 208 158 | 1237 | 250 250 250 206 206 206 198 198 198 202 162 69 |
1237 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | 1238 | 226 170 11 236 178 12 224 166 10 210 150 10 |
1238 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | 1239 | 200 144 11 197 138 11 192 133 9 197 138 11 |
1239 | 251 251 187 251 251 187 239 239 170 251 251 187 184 179 149 84 83 72 | 1240 | 210 150 10 226 170 11 242 186 14 246 190 14 |
1240 | 26 28 27 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1241 | 246 190 14 246 186 14 225 175 15 124 112 88 |
1241 | 16 20 20 16 20 20 15 19 19 15 19 19 15 18 18 14 18 18 | 1242 | 62 62 62 30 30 30 14 14 14 6 6 6 |
1242 | 13 17 17 13 16 16 15 15 15 14 14 13 14 14 13 14 14 13 | 1243 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1243 | 13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 3 4 4 | 1244 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1244 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1245 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1245 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1246 | 0 0 0 0 0 0 0 0 0 10 10 10 |
1246 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1247 | 30 30 30 78 78 78 174 135 50 224 166 10 |
1247 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1248 | 239 182 13 246 190 14 246 190 14 246 190 14 |
1248 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1249 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1249 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1250 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1250 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1251 | 246 190 14 246 190 14 241 196 14 139 102 15 |
1251 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1252 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1252 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1253 | 78 78 78 250 250 250 253 253 253 253 253 253 |
1253 | 0 0 0 | 1254 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1254 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1255 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1255 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1256 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1256 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1257 | 250 250 250 214 214 214 198 198 198 190 150 46 |
1257 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1258 | 219 162 10 236 178 12 234 174 13 224 166 10 |
1258 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1259 | 216 158 10 213 154 11 213 154 11 216 158 10 |
1259 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 73 67 | 1260 | 226 170 11 239 182 13 246 190 14 246 190 14 |
1260 | 105 104 92 99 98 80 84 83 72 99 98 80 177 172 135 197 193 154 | 1261 | 246 190 14 246 190 14 242 186 14 206 162 42 |
1261 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | 1262 | 101 101 101 58 58 58 30 30 30 14 14 14 |
1262 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | 1263 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1263 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | 1264 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1264 | 251 251 187 251 251 187 251 251 187 214 212 158 197 193 154 99 98 80 | 1265 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1265 | 23 27 26 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1266 | 0 0 0 0 0 0 0 0 0 10 10 10 |
1266 | 16 20 20 16 20 20 15 19 19 15 19 19 15 18 18 14 18 18 | 1267 | 30 30 30 74 74 74 174 135 50 216 158 10 |
1267 | 14 17 17 16 16 16 16 16 16 16 16 16 15 15 15 14 14 13 | 1268 | 236 178 12 246 190 14 246 190 14 246 190 14 |
1268 | 14 14 13 13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 | 1269 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1269 | 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1270 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1270 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1271 | 246 190 14 246 190 14 241 196 14 226 184 13 |
1271 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1272 | 61 42 6 2 2 6 2 2 6 2 2 6 |
1272 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1273 | 22 22 22 238 238 238 253 253 253 253 253 253 |
1273 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1274 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1274 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1275 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1275 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1276 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1276 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1277 | 253 253 253 226 226 226 187 187 187 180 133 36 |
1277 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1278 | 216 158 10 236 178 12 239 182 13 236 178 12 |
1278 | 0 0 0 | 1279 | 230 174 11 226 170 11 226 170 11 230 174 11 |
1279 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1280 | 236 178 12 242 186 14 246 190 14 246 190 14 |
1280 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1281 | 246 190 14 246 190 14 246 186 14 239 182 13 |
1281 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1282 | 206 162 42 106 106 106 66 66 66 34 34 34 |
1282 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1283 | 14 14 14 6 6 6 0 0 0 0 0 0 |
1283 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1284 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1284 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 83 72 | 1285 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1285 | 110 109 94 99 98 80 72 73 67 63 64 60 99 98 80 177 172 135 | 1286 | 0 0 0 0 0 0 0 0 0 6 6 6 |
1286 | 184 179 149 210 208 158 251 251 187 251 251 187 251 251 187 251 251 187 | 1287 | 26 26 26 70 70 70 163 133 67 213 154 11 |
1287 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | 1288 | 236 178 12 246 190 14 246 190 14 246 190 14 |
1288 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | 1289 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1289 | 251 251 187 210 208 158 184 179 149 177 172 135 110 109 94 33 37 35 | 1290 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1290 | 17 21 21 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1291 | 246 190 14 246 190 14 246 190 14 241 196 14 |
1291 | 16 20 20 16 20 20 15 19 19 15 19 19 15 19 19 14 18 18 | 1292 | 190 146 13 18 14 6 2 2 6 2 2 6 |
1292 | 15 18 18 18 19 18 18 19 18 17 17 17 16 16 16 15 15 15 | 1293 | 46 46 46 246 246 246 253 253 253 253 253 253 |
1293 | 14 14 13 13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 | 1294 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1294 | 10 10 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1295 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1295 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1296 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1296 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1297 | 253 253 253 221 221 221 86 86 86 156 107 11 |
1297 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1298 | 216 158 10 236 178 12 242 186 14 246 186 14 |
1298 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1299 | 242 186 14 239 182 13 239 182 13 242 186 14 |
1299 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1300 | 242 186 14 246 186 14 246 190 14 246 190 14 |
1300 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1301 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1301 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1302 | 242 186 14 225 175 15 142 122 72 66 66 66 |
1302 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1303 | 30 30 30 10 10 10 0 0 0 0 0 0 |
1303 | 0 0 0 | 1304 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1304 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1305 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1305 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1306 | 0 0 0 0 0 0 0 0 0 6 6 6 |
1306 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1307 | 26 26 26 70 70 70 163 133 67 210 150 10 |
1307 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1308 | 236 178 12 246 190 14 246 190 14 246 190 14 |
1308 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1309 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1309 | 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 105 104 92 | 1310 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1310 | 108 107 93 99 98 80 72 73 67 63 64 60 51 52 50 87 86 72 | 1311 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1311 | 105 104 92 110 109 94 108 107 93 156 151 111 184 179 149 184 179 149 | 1312 | 232 195 16 121 92 8 34 34 34 106 106 106 |
1312 | 197 193 154 197 193 154 197 193 154 184 179 149 184 179 149 177 172 135 | 1313 | 221 221 221 253 253 253 253 253 253 253 253 253 |
1313 | 197 193 154 156 151 111 177 172 135 184 179 149 168 163 120 137 133 100 | 1314 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1314 | 145 141 105 110 109 94 99 98 80 47 48 46 55 57 54 15 19 19 | 1315 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1315 | 16 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 | 1316 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1316 | 17 20 20 17 21 21 16 20 20 16 19 19 15 19 19 16 19 19 | 1317 | 242 242 242 82 82 82 18 14 6 163 110 8 |
1317 | 20 20 20 21 22 21 20 20 20 19 20 19 18 19 18 16 16 16 | 1318 | 216 158 10 236 178 12 242 186 14 246 190 14 |
1318 | 15 15 15 14 14 13 13 13 13 13 13 13 12 12 12 12 12 12 | 1319 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1319 | 12 12 12 4 5 5 0 0 0 0 0 0 0 0 0 0 0 0 | 1320 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1320 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1321 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1321 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1322 | 246 190 14 246 190 14 242 186 14 163 133 67 |
1322 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1323 | 46 46 46 18 18 18 6 6 6 0 0 0 |
1323 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1324 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1324 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1325 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1325 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1326 | 0 0 0 0 0 0 0 0 0 10 10 10 |
1326 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1327 | 30 30 30 78 78 78 163 133 67 210 150 10 |
1327 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1328 | 236 178 12 246 186 14 246 190 14 246 190 14 |
1328 | 0 0 0 | 1329 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1329 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1330 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1330 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1331 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1331 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1332 | 241 196 14 215 174 15 190 178 144 253 253 253 |
1332 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1333 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1333 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1334 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1334 | 0 0 0 0 0 0 0 0 0 0 0 0 58 59 55 110 109 94 | 1335 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1335 | 105 104 92 90 89 73 72 73 67 55 57 54 43 45 43 39 40 39 | 1336 | 253 253 253 253 253 253 253 253 253 218 218 218 |
1336 | 43 45 43 46 47 45 43 45 43 68 70 65 65 66 61 63 64 60 | 1337 | 58 58 58 2 2 6 22 18 6 167 114 7 |
1337 | 108 107 93 72 73 67 105 104 92 90 89 73 72 73 67 40 43 41 | 1338 | 216 158 10 236 178 12 246 186 14 246 190 14 |
1338 | 72 73 67 68 70 65 68 70 65 58 59 55 63 64 60 49 51 48 | 1339 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1339 | 43 45 43 33 36 34 27 30 29 20 24 24 16 20 20 15 19 19 | 1340 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1340 | 15 19 19 15 19 19 15 19 19 16 19 19 16 20 20 16 20 20 | 1341 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1341 | 17 21 21 20 24 24 20 23 22 17 21 21 17 20 20 20 20 20 | 1342 | 246 190 14 246 186 14 242 186 14 190 150 46 |
1342 | 21 22 21 21 22 21 21 22 21 21 22 21 20 20 20 18 19 18 | 1343 | 54 54 54 22 22 22 6 6 6 0 0 0 |
1343 | 16 16 16 15 15 15 13 13 13 13 13 13 12 12 12 12 12 12 | 1344 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1344 | 12 12 12 10 10 9 0 0 0 0 0 0 0 0 0 0 0 0 | 1345 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1345 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1346 | 0 0 0 0 0 0 0 0 0 14 14 14 |
1346 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1347 | 38 38 38 86 86 86 180 133 36 213 154 11 |
1347 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1348 | 236 178 12 246 186 14 246 190 14 246 190 14 |
1348 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1349 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1349 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1350 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1350 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1351 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1351 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1352 | 246 190 14 232 195 16 190 146 13 214 214 214 |
1352 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1353 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1353 | 0 0 0 | 1354 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1354 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1355 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1355 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1356 | 253 253 253 250 250 250 170 170 170 26 26 26 |
1356 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1357 | 2 2 6 2 2 6 37 26 9 163 110 8 |
1357 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1358 | 219 162 10 239 182 13 246 186 14 246 190 14 |
1358 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1359 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1359 | 0 0 0 0 0 0 0 0 0 21 22 21 110 109 94 110 109 94 | 1360 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1360 | 105 104 92 84 83 72 68 70 65 51 52 50 41 42 42 33 37 35 | 1361 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1361 | 28 31 30 23 27 26 20 23 23 18 22 22 17 20 20 25 27 26 | 1362 | 246 186 14 236 178 12 224 166 10 142 122 72 |
1362 | 26 28 27 27 30 29 25 27 26 20 23 23 23 27 26 30 32 31 | 1363 | 46 46 46 18 18 18 6 6 6 0 0 0 |
1363 | 20 24 24 17 21 21 18 22 22 15 19 19 26 28 27 20 23 23 | 1364 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1364 | 14 18 18 15 19 19 15 18 18 15 19 19 15 19 19 15 19 19 | 1365 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1365 | 15 19 19 15 19 19 15 19 19 15 19 19 15 19 19 16 19 19 | 1366 | 0 0 0 0 0 0 6 6 6 18 18 18 |
1366 | 16 20 20 22 24 23 24 26 24 22 24 23 20 23 22 22 24 23 | 1367 | 50 50 50 109 106 95 192 133 9 224 166 10 |
1367 | 24 26 24 24 26 24 23 24 24 22 24 23 21 22 21 19 20 19 | 1368 | 242 186 14 246 190 14 246 190 14 246 190 14 |
1368 | 17 17 17 15 15 15 14 14 13 13 13 13 12 12 12 12 12 12 | 1369 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1369 | 12 12 12 12 12 12 2 2 2 0 0 0 0 0 0 0 0 0 | 1370 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1370 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1371 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1371 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1372 | 242 186 14 226 184 13 210 162 10 142 110 46 |
1372 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1373 | 226 226 226 253 253 253 253 253 253 253 253 253 |
1373 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1374 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1374 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1375 | 253 253 253 253 253 253 253 253 253 253 253 253 |
1375 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1376 | 198 198 198 66 66 66 2 2 6 2 2 6 |
1376 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1377 | 2 2 6 2 2 6 50 34 6 156 107 11 |
1377 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1378 | 219 162 10 239 182 13 246 186 14 246 190 14 |
1378 | 0 0 0 | 1379 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1379 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1380 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1380 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1381 | 246 190 14 246 190 14 246 190 14 242 186 14 |
1381 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1382 | 234 174 13 213 154 11 154 122 46 66 66 66 |
1382 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1383 | 30 30 30 10 10 10 0 0 0 0 0 0 |
1383 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1384 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1384 | 0 0 0 0 0 0 2 2 2 99 98 80 110 109 94 108 107 93 | 1385 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1385 | 105 104 92 84 83 72 63 64 60 49 51 48 39 40 39 32 34 33 | 1386 | 0 0 0 0 0 0 6 6 6 22 22 22 |
1386 | 27 30 29 23 25 24 20 23 23 17 20 20 15 19 19 14 18 18 | 1387 | 58 58 58 154 121 60 206 145 10 234 174 13 |
1387 | 14 17 17 13 17 17 13 17 17 13 17 17 13 17 17 13 17 17 | 1388 | 242 186 14 246 186 14 246 190 14 246 190 14 |
1388 | 14 17 17 14 17 17 14 17 17 14 17 17 14 17 17 14 17 17 | 1389 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1389 | 14 18 18 14 18 18 14 18 18 14 18 18 15 18 18 15 19 19 | 1390 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1390 | 15 19 19 15 19 19 15 19 19 15 19 19 15 19 19 15 19 19 | 1391 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1391 | 15 19 19 17 21 21 27 29 28 26 28 27 25 27 26 25 27 26 | 1392 | 246 186 14 236 178 12 210 162 10 163 110 8 |
1392 | 27 29 28 27 29 28 26 28 27 24 26 24 21 22 21 20 20 20 | 1393 | 61 42 6 138 138 138 218 218 218 250 250 250 |
1393 | 18 19 18 16 16 16 14 14 13 13 13 13 12 12 12 12 12 12 | 1394 | 253 253 253 253 253 253 253 253 253 250 250 250 |
1394 | 12 12 12 12 12 12 4 5 5 0 0 0 0 0 0 0 0 0 | 1395 | 242 242 242 210 210 210 144 144 144 66 66 66 |
1395 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1396 | 6 6 6 2 2 6 2 2 6 2 2 6 |
1396 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1397 | 2 2 6 2 2 6 61 42 6 163 110 8 |
1397 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1398 | 216 158 10 236 178 12 246 190 14 246 190 14 |
1398 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1399 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1399 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1400 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1400 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1401 | 246 190 14 239 182 13 230 174 11 216 158 10 |
1401 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1402 | 190 142 34 124 112 88 70 70 70 38 38 38 |
1402 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1403 | 18 18 18 6 6 6 0 0 0 0 0 0 |
1403 | 0 0 0 | 1404 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1404 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1405 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1405 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1406 | 0 0 0 0 0 0 6 6 6 22 22 22 |
1406 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1407 | 62 62 62 168 124 44 206 145 10 224 166 10 |
1407 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1408 | 236 178 12 239 182 13 242 186 14 242 186 14 |
1408 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1409 | 246 186 14 246 190 14 246 190 14 246 190 14 |
1409 | 0 0 0 0 0 0 51 52 50 110 109 94 110 109 94 105 104 92 | 1410 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1410 | 90 89 73 72 73 67 55 57 54 43 45 43 35 37 36 30 32 31 | 1411 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1411 | 26 28 27 20 24 24 17 21 21 16 19 19 15 18 18 14 17 17 | 1412 | 246 190 14 236 178 12 216 158 10 175 118 6 |
1412 | 13 16 16 13 16 16 13 16 16 13 16 16 13 16 16 13 16 16 | 1413 | 80 54 7 2 2 6 6 6 6 30 30 30 |
1413 | 13 16 16 13 16 16 13 16 16 13 17 17 13 17 17 14 17 17 | 1414 | 54 54 54 62 62 62 50 50 50 38 38 38 |
1414 | 14 17 17 14 17 17 14 17 17 14 18 18 14 18 18 14 18 18 | 1415 | 14 14 14 2 2 6 2 2 6 2 2 6 |
1415 | 15 18 18 15 18 18 15 19 19 15 19 19 15 19 19 15 19 19 | 1416 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1416 | 15 19 19 15 19 19 27 29 28 32 34 33 28 31 30 27 29 28 | 1417 | 2 2 6 6 6 6 80 54 7 167 114 7 |
1417 | 30 32 31 30 32 31 30 31 28 26 28 27 23 24 24 21 22 21 | 1418 | 213 154 11 236 178 12 246 190 14 246 190 14 |
1418 | 19 20 19 16 16 16 14 14 13 13 13 13 12 12 12 12 12 12 | 1419 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1419 | 12 12 12 12 12 12 6 7 7 0 0 0 0 0 0 0 0 0 | 1420 | 246 190 14 242 186 14 239 182 13 239 182 13 |
1420 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1421 | 230 174 11 210 150 10 174 135 50 124 112 88 |
1421 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1422 | 82 82 82 54 54 54 34 34 34 18 18 18 |
1422 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1423 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1423 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1424 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1424 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1425 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1425 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1426 | 0 0 0 0 0 0 6 6 6 18 18 18 |
1426 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1427 | 50 50 50 158 118 36 192 133 9 200 144 11 |
1427 | 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 | 1428 | 216 158 10 219 162 10 224 166 10 226 170 11 |
1428 | 0 0 0 | 1429 | 230 174 11 236 178 12 239 182 13 239 182 13 |
1429 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1430 | 242 186 14 246 186 14 246 190 14 246 190 14 |
1430 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1431 | 246 190 14 246 190 14 246 190 14 246 190 14 |
1431 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1432 | 246 186 14 230 174 11 210 150 10 163 110 8 |
1432 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1433 | 104 69 6 10 10 10 2 2 6 2 2 6 |
1433 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1434 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1434 | 0 0 0 10 10 9 108 107 93 110 109 94 108 107 93 99 98 80 | 1435 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1435 | 84 83 72 63 64 60 49 51 48 40 43 41 33 36 34 27 30 29 | 1436 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1436 | 23 27 26 18 22 22 17 20 20 15 18 18 14 17 17 13 16 16 | 1437 | 2 2 6 6 6 6 91 60 6 167 114 7 |
1437 | 13 16 16 13 16 16 12 15 15 12 15 15 12 15 15 12 15 15 | 1438 | 206 145 10 230 174 11 242 186 14 246 190 14 |
1438 | 13 16 16 13 16 16 13 16 16 13 16 16 13 16 16 13 16 16 | 1439 | 246 190 14 246 190 14 246 186 14 242 186 14 |
1439 | 13 17 17 13 17 17 14 17 17 14 17 17 14 17 17 14 18 18 | 1440 | 239 182 13 230 174 11 224 166 10 213 154 11 |
1440 | 14 18 18 14 18 18 15 18 18 15 18 18 15 19 19 15 19 19 | 1441 | 180 133 36 124 112 88 86 86 86 58 58 58 |
1441 | 15 19 19 15 19 19 17 21 21 33 36 34 32 34 33 31 33 31 | 1442 | 38 38 38 22 22 22 10 10 10 6 6 6 |
1442 | 33 36 34 33 36 34 31 33 31 27 29 28 25 27 26 21 22 21 | 1443 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1443 | 19 20 19 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 | 1444 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1444 | 12 12 12 12 12 12 8 8 7 0 0 0 0 0 0 0 0 0 | 1445 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1445 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1446 | 0 0 0 0 0 0 0 0 0 14 14 14 |
1446 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1447 | 34 34 34 70 70 70 138 110 50 158 118 36 |
1447 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1448 | 167 114 7 180 123 7 192 133 9 197 138 11 |
1448 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1449 | 200 144 11 206 145 10 213 154 11 219 162 10 |
1449 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1450 | 224 166 10 230 174 11 239 182 13 242 186 14 |
1450 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1451 | 246 186 14 246 186 14 246 186 14 246 186 14 |
1451 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1452 | 239 182 13 216 158 10 185 133 11 152 99 6 |
1452 | 0 0 0 0 0 0 63 64 60 137 133 100 43 45 43 0 0 0 | 1453 | 104 69 6 18 14 6 2 2 6 2 2 6 |
1453 | 0 0 0 | 1454 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1454 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1455 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1455 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1456 | 2 2 6 2 2 6 2 2 6 2 2 6 |
1456 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1457 | 2 2 6 6 6 6 80 54 7 152 99 6 |
1457 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1458 | 192 133 9 219 162 10 236 178 12 239 182 13 |
1458 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1459 | 246 186 14 242 186 14 239 182 13 236 178 12 |
1459 | 0 0 0 68 70 65 110 109 94 110 109 94 105 104 92 84 83 72 | 1460 | 224 166 10 206 145 10 192 133 9 154 121 60 |
1460 | 68 70 65 55 57 54 43 45 43 35 37 36 30 32 31 26 28 27 | 1461 | 94 94 94 62 62 62 42 42 42 22 22 22 |
1461 | 20 24 24 17 21 21 16 19 19 14 17 17 13 16 16 12 15 15 | 1462 | 14 14 14 6 6 6 0 0 0 0 0 0 |
1462 | 12 15 15 12 15 15 12 15 15 12 15 15 12 15 15 12 15 15 | 1463 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1463 | 12 15 15 12 15 15 12 15 15 12 15 15 12 15 15 13 16 16 | 1464 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1464 | 13 16 16 13 16 16 13 16 16 13 17 17 13 17 17 14 17 17 | 1465 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1465 | 14 17 17 14 17 17 14 18 18 14 18 18 14 18 18 15 18 18 | 1466 | 0 0 0 0 0 0 0 0 0 6 6 6 |
1466 | 15 19 19 15 19 19 15 19 19 20 24 24 32 34 33 35 37 36 | 1467 | 18 18 18 34 34 34 58 58 58 78 78 78 |
1467 | 37 39 37 35 37 36 33 36 34 30 32 31 26 28 27 22 24 23 | 1468 | 101 98 89 124 112 88 142 110 46 156 107 11 |
1468 | 20 20 20 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 | 1469 | 163 110 8 167 114 7 175 118 6 180 123 7 |
1469 | 12 12 12 12 12 12 8 8 7 0 0 0 0 0 0 0 0 0 | 1470 | 185 133 11 197 138 11 210 150 10 219 162 10 |
1470 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1471 | 226 170 11 236 178 12 236 178 12 234 174 13 |
1471 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1472 | 219 162 10 197 138 11 163 110 8 130 83 6 |
1472 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1473 | 91 60 6 10 10 10 2 2 6 2 2 6 |
1473 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1474 | 18 18 18 38 38 38 38 38 38 38 38 38 |
1474 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1475 | 38 38 38 38 38 38 38 38 38 38 38 38 |
1475 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1476 | 38 38 38 38 38 38 26 26 26 2 2 6 |
1476 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1477 | 2 2 6 6 6 6 70 47 6 137 92 6 |
1477 | 1 1 1 99 98 80 184 179 149 184 179 149 68 70 65 0 0 0 | 1478 | 175 118 6 200 144 11 219 162 10 230 174 11 |
1478 | 0 0 0 | 1479 | 234 174 13 230 174 11 219 162 10 210 150 10 |
1479 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1480 | 192 133 9 163 110 8 124 112 88 82 82 82 |
1480 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1481 | 50 50 50 30 30 30 14 14 14 6 6 6 |
1481 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1482 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1482 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1483 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1483 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1484 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1484 | 15 15 15 110 109 94 110 109 94 108 107 93 99 98 80 72 73 67 | 1485 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1485 | 61 63 57 49 51 48 39 40 39 33 36 34 27 30 29 23 25 24 | 1486 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1486 | 18 22 22 16 19 19 14 17 17 13 16 16 12 15 15 12 15 15 | 1487 | 6 6 6 14 14 14 22 22 22 34 34 34 |
1487 | 11 14 14 11 14 14 11 14 14 11 14 14 11 14 14 11 14 14 | 1488 | 42 42 42 58 58 58 74 74 74 86 86 86 |
1488 | 11 14 14 11 14 14 12 14 14 12 15 15 12 15 15 12 15 15 | 1489 | 101 98 89 122 102 70 130 98 46 121 87 25 |
1489 | 12 15 15 13 16 16 13 16 16 13 16 16 13 16 16 13 16 16 | 1490 | 137 92 6 152 99 6 163 110 8 180 123 7 |
1490 | 13 17 17 14 17 17 14 17 17 14 17 17 14 18 18 14 18 18 | 1491 | 185 133 11 197 138 11 206 145 10 200 144 11 |
1491 | 14 18 18 15 18 18 15 19 19 15 19 19 30 32 31 38 39 37 | 1492 | 180 123 7 156 107 11 130 83 6 104 69 6 |
1492 | 39 40 39 39 40 39 35 37 36 31 33 31 27 29 28 22 24 23 | 1493 | 50 34 6 54 54 54 110 110 110 101 98 89 |
1493 | 20 20 20 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 | 1494 | 86 86 86 82 82 82 78 78 78 78 78 78 |
1494 | 12 12 12 12 12 12 8 8 7 0 0 0 0 0 0 0 0 0 | 1495 | 78 78 78 78 78 78 78 78 78 78 78 78 |
1495 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1496 | 78 78 78 82 82 82 86 86 86 94 94 94 |
1496 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1497 | 106 106 106 101 101 101 86 66 34 124 80 6 |
1497 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1498 | 156 107 11 180 123 7 192 133 9 200 144 11 |
1498 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1499 | 206 145 10 200 144 11 192 133 9 175 118 6 |
1499 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1500 | 139 102 15 109 106 95 70 70 70 42 42 42 |
1500 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1501 | 22 22 22 10 10 10 0 0 0 0 0 0 |
1501 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 | 1502 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1502 | 110 109 94 197 193 154 210 208 158 184 179 149 68 70 65 0 0 0 | 1503 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1503 | 0 0 0 | 1504 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1504 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1505 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1505 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1506 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1506 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1507 | 0 0 0 0 0 0 6 6 6 10 10 10 |
1507 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1508 | 14 14 14 22 22 22 30 30 30 38 38 38 |
1508 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1509 | 50 50 50 62 62 62 74 74 74 90 90 90 |
1509 | 68 70 65 110 109 94 110 109 94 105 104 92 84 83 72 65 66 61 | 1510 | 101 98 89 112 100 78 121 87 25 124 80 6 |
1510 | 51 52 50 43 45 43 35 37 36 30 32 31 25 27 26 20 23 23 | 1511 | 137 92 6 152 99 6 152 99 6 152 99 6 |
1511 | 17 20 20 15 18 18 13 16 16 12 15 15 12 15 15 11 14 14 | 1512 | 138 86 6 124 80 6 98 70 6 86 66 30 |
1512 | 11 14 14 11 14 14 11 13 13 11 13 13 11 13 13 11 13 13 | 1513 | 101 98 89 82 82 82 58 58 58 46 46 46 |
1513 | 11 14 14 11 14 14 11 14 14 11 14 14 11 14 14 11 14 14 | 1514 | 38 38 38 34 34 34 34 34 34 34 34 34 |
1514 | 12 15 15 12 15 15 12 15 15 12 15 15 13 16 16 13 16 16 | 1515 | 34 34 34 34 34 34 34 34 34 34 34 34 |
1515 | 13 16 16 13 16 16 13 17 17 13 17 17 14 17 17 14 17 17 | 1516 | 34 34 34 34 34 34 38 38 38 42 42 42 |
1516 | 14 18 18 14 18 18 14 18 18 16 19 19 37 39 37 41 42 42 | 1517 | 54 54 54 82 82 82 94 86 76 91 60 6 |
1517 | 41 42 42 41 42 42 38 39 37 32 34 33 27 29 28 23 24 24 | 1518 | 134 86 6 156 107 11 167 114 7 175 118 6 |
1518 | 21 22 21 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 | 1519 | 175 118 6 167 114 7 152 99 6 121 87 25 |
1519 | 12 12 12 12 12 12 8 8 7 0 0 0 0 0 0 0 0 0 | 1520 | 101 98 89 62 62 62 34 34 34 18 18 18 |
1520 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1521 | 6 6 6 0 0 0 0 0 0 0 0 0 |
1521 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1522 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1522 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1523 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1523 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1524 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1524 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1525 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1525 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1526 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1526 | 0 0 0 0 0 0 0 0 0 0 0 0 11 11 11 137 133 100 | 1527 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1527 | 197 193 154 251 251 187 239 239 170 184 179 149 31 33 31 0 0 0 | 1528 | 0 0 0 6 6 6 6 6 6 10 10 10 |
1528 | 0 0 0 | 1529 | 18 18 18 22 22 22 30 30 30 42 42 42 |
1529 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1530 | 50 50 50 66 66 66 86 86 86 101 98 89 |
1530 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1531 | 106 86 58 98 70 6 104 69 6 104 69 6 |
1531 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1532 | 104 69 6 91 60 6 82 62 34 90 90 90 |
1532 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1533 | 62 62 62 38 38 38 22 22 22 14 14 14 |
1533 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 12 12 | 1534 | 10 10 10 10 10 10 10 10 10 10 10 10 |
1534 | 110 109 94 110 109 94 105 104 92 90 89 73 72 73 67 58 59 55 | 1535 | 10 10 10 10 10 10 6 6 6 10 10 10 |
1535 | 46 47 45 37 39 37 31 33 31 26 28 27 20 24 24 17 21 21 | 1536 | 10 10 10 10 10 10 10 10 10 14 14 14 |
1536 | 15 18 18 13 16 16 12 15 15 12 14 14 11 13 13 11 13 13 | 1537 | 22 22 22 42 42 42 70 70 70 89 81 66 |
1537 | 10 13 13 10 13 13 10 13 13 10 13 13 10 13 13 10 13 13 | 1538 | 80 54 7 104 69 6 124 80 6 137 92 6 |
1538 | 10 13 13 10 13 13 11 13 13 11 13 13 11 14 14 11 14 14 | 1539 | 134 86 6 116 81 8 100 82 52 86 86 86 |
1539 | 11 14 14 11 14 14 12 14 14 12 15 15 12 15 15 12 15 15 | 1540 | 58 58 58 30 30 30 14 14 14 6 6 6 |
1540 | 13 16 16 13 16 16 13 16 16 13 16 16 13 17 17 13 17 17 | 1541 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1541 | 14 17 17 14 17 17 14 18 18 23 27 26 41 42 42 41 42 42 | 1542 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1542 | 43 45 43 41 42 42 39 40 39 33 36 34 27 29 28 23 24 24 | 1543 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1543 | 21 22 21 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 | 1544 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1544 | 12 12 12 12 12 12 6 7 7 0 0 0 0 0 0 0 0 0 | 1545 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1545 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1546 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1546 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1547 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1547 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1548 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1548 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1549 | 0 0 0 6 6 6 10 10 10 14 14 14 |
1549 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1550 | 18 18 18 26 26 26 38 38 38 54 54 54 |
1550 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1551 | 70 70 70 86 86 86 94 86 76 89 81 66 |
1551 | 0 0 0 0 0 0 0 0 0 27 29 28 168 163 120 210 208 158 | 1552 | 89 81 66 86 86 86 74 74 74 50 50 50 |
1552 | 251 251 187 251 251 187 210 208 158 137 133 100 1 1 1 0 0 0 | 1553 | 30 30 30 14 14 14 6 6 6 0 0 0 |
1553 | 0 0 0 | 1554 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1554 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1555 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1555 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1556 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1556 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1557 | 6 6 6 18 18 18 34 34 34 58 58 58 |
1557 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1558 | 82 82 82 89 81 66 89 81 66 89 81 66 |
1558 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 60 56 | 1559 | 94 86 66 94 86 76 74 74 74 50 50 50 |
1559 | 110 109 94 105 104 92 105 104 92 84 83 72 65 66 61 51 52 50 | 1560 | 26 26 26 14 14 14 6 6 6 0 0 0 |
1560 | 40 43 41 33 36 34 27 30 29 23 25 24 18 22 22 16 19 19 | 1561 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1561 | 14 17 17 12 15 15 11 14 14 11 14 14 10 13 13 10 13 13 | 1562 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1562 | 10 13 13 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 | 1563 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1563 | 10 12 12 10 12 12 10 13 13 10 13 13 10 13 13 11 13 13 | 1564 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1564 | 11 13 13 11 14 14 11 14 14 11 14 14 11 14 14 12 15 15 | 1565 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1565 | 12 15 15 12 15 15 12 15 15 13 16 16 13 16 16 13 16 16 | 1566 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1566 | 13 17 17 13 17 17 14 17 17 32 34 33 43 45 43 43 45 43 | 1567 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1567 | 43 45 43 43 45 43 39 40 39 33 36 34 27 29 28 23 24 24 | 1568 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1568 | 21 22 21 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 | 1569 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1569 | 12 12 12 12 12 12 6 7 7 0 0 0 0 0 0 0 0 0 | 1570 | 6 6 6 6 6 6 14 14 14 18 18 18 |
1570 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1571 | 30 30 30 38 38 38 46 46 46 54 54 54 |
1571 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1572 | 50 50 50 42 42 42 30 30 30 18 18 18 |
1572 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1573 | 10 10 10 0 0 0 0 0 0 0 0 0 |
1573 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1574 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1574 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1575 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1575 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1576 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1576 | 0 0 0 1 1 1 68 70 65 184 179 149 210 208 158 251 251 187 | 1577 | 0 0 0 6 6 6 14 14 14 26 26 26 |
1577 | 251 251 187 214 212 158 184 179 149 37 39 37 0 0 0 0 0 0 | 1578 | 38 38 38 50 50 50 58 58 58 58 58 58 |
1578 | 0 0 0 | 1579 | 54 54 54 42 42 42 30 30 30 18 18 18 |
1579 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1580 | 10 10 10 0 0 0 0 0 0 0 0 0 |
1580 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1581 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1581 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1582 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1582 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1583 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1583 | 0 0 0 0 0 0 0 0 0 0 0 0 6 7 7 105 104 92 | 1584 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1584 | 105 104 92 105 104 92 99 98 80 72 73 67 58 59 55 46 47 45 | 1585 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1585 | 35 37 36 30 32 31 25 27 26 20 23 23 16 19 19 14 17 17 | 1586 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1586 | 12 15 15 12 14 14 11 13 13 10 13 13 10 12 12 10 12 12 | 1587 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1587 | 10 12 12 10 12 12 9 12 12 9 12 12 9 12 12 9 12 12 | 1588 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1588 | 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 10 13 13 | 1589 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1589 | 10 13 13 10 13 13 11 13 13 11 13 13 11 14 14 11 14 14 | 1590 | 0 0 0 0 0 0 0 0 0 6 6 6 |
1590 | 11 14 14 12 15 15 12 15 15 12 15 15 12 15 15 13 16 16 | 1591 | 6 6 6 10 10 10 14 14 14 18 18 18 |
1591 | 13 16 16 13 16 16 17 20 20 41 42 42 46 47 45 46 47 45 | 1592 | 18 18 18 14 14 14 10 10 10 6 6 6 |
1592 | 46 47 45 43 45 43 40 41 39 33 36 34 27 29 28 23 24 24 | 1593 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1593 | 20 20 20 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 | 1594 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1594 | 12 12 12 12 12 12 4 5 5 0 0 0 0 0 0 0 0 0 | 1595 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1595 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1596 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1596 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1597 | 0 0 0 0 0 0 0 0 0 6 6 6 |
1597 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1598 | 14 14 14 18 18 18 22 22 22 22 22 22 |
1598 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1599 | 18 18 18 14 14 14 10 10 10 6 6 6 |
1599 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1600 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1600 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1601 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1601 | 15 15 15 110 109 94 197 193 154 214 212 158 251 251 187 251 251 187 | 1602 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1602 | 239 239 170 184 179 149 84 83 72 0 0 0 0 0 0 0 0 0 | 1603 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1603 | 0 0 0 | 1604 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1604 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1605 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1606 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1607 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1608 | 0 0 0 0 0 0 0 0 0 0 0 0 47 48 46 105 104 92 | ||
1609 | 105 104 92 99 98 80 84 83 72 68 70 65 51 52 50 40 43 41 | ||
1610 | 32 34 33 27 29 28 22 24 23 17 21 21 15 18 18 13 16 16 | ||
1611 | 12 15 15 11 13 13 10 13 13 10 12 12 9 12 12 9 12 12 | ||
1612 | 9 12 12 9 12 12 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1613 | 9 12 12 9 12 12 9 12 12 9 12 12 10 12 12 10 12 12 | ||
1614 | 10 12 12 10 12 12 10 13 13 10 13 13 10 13 13 11 13 13 | ||
1615 | 11 14 14 11 14 14 11 14 14 12 14 14 12 15 15 12 15 15 | ||
1616 | 12 15 15 13 16 16 28 31 30 43 45 43 47 48 46 47 48 46 | ||
1617 | 47 48 46 43 45 43 40 41 39 33 36 34 27 29 28 22 24 23 | ||
1618 | 20 20 20 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 | ||
1619 | 12 12 12 12 12 12 3 4 4 0 0 0 0 0 0 0 0 0 | ||
1620 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1621 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1622 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1623 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1624 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1625 | 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 60 60 56 | ||
1626 | 177 172 135 197 193 154 251 251 187 251 251 187 251 251 187 251 251 187 | ||
1627 | 184 179 149 110 109 94 3 4 4 0 0 0 0 0 0 0 0 0 | ||
1628 | 0 0 0 | ||
1629 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1630 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1631 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1632 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1633 | 0 0 0 0 0 0 0 0 0 1 1 1 99 98 80 105 104 92 | ||
1634 | 99 98 80 87 86 72 84 83 72 63 64 60 46 47 45 35 37 36 | ||
1635 | 30 32 31 25 27 26 18 22 22 16 19 19 14 17 17 12 15 15 | ||
1636 | 11 14 14 10 13 13 9 12 12 9 12 12 9 11 11 9 11 11 | ||
1637 | 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1638 | 9 11 11 9 11 11 9 11 11 9 11 11 9 12 12 9 12 12 | ||
1639 | 9 12 12 10 12 12 10 12 12 10 12 12 10 13 13 10 13 13 | ||
1640 | 10 13 13 11 13 13 11 14 14 11 14 14 11 14 14 12 15 15 | ||
1641 | 12 15 15 14 17 17 41 42 42 47 48 46 49 51 48 51 52 50 | ||
1642 | 47 48 46 43 45 43 40 41 39 33 36 34 27 29 28 22 24 23 | ||
1643 | 19 20 19 16 16 16 14 14 13 13 13 13 12 12 12 12 12 12 | ||
1644 | 12 12 12 12 12 12 2 2 2 0 0 0 0 0 0 0 0 0 | ||
1645 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1646 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1647 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1648 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1649 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1650 | 0 0 0 0 0 0 0 0 0 23 24 24 137 133 100 184 179 149 | ||
1651 | 210 208 158 251 251 187 251 251 187 251 251 187 251 251 187 184 179 149 | ||
1652 | 110 109 94 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1653 | 0 0 0 | ||
1654 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1655 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1656 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1657 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1658 | 0 0 0 0 0 0 0 0 0 30 32 31 105 104 92 99 98 80 | ||
1659 | 84 83 72 84 83 72 72 73 67 55 57 54 41 42 42 32 34 33 | ||
1660 | 27 29 28 20 24 24 17 20 20 14 17 17 13 16 16 12 14 14 | ||
1661 | 10 13 13 10 12 12 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1662 | 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1663 | 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1664 | 9 11 11 9 12 12 9 12 12 10 12 12 10 12 12 10 12 12 | ||
1665 | 10 13 13 10 13 13 10 13 13 11 13 13 11 14 14 11 14 14 | ||
1666 | 11 14 14 27 29 28 55 56 53 72 73 67 51 52 50 51 52 50 | ||
1667 | 49 51 48 43 45 43 39 40 39 32 34 33 26 28 27 21 22 21 | ||
1668 | 19 20 19 16 16 16 18 19 17 13 13 13 12 12 12 12 12 12 | ||
1669 | 12 12 12 12 12 12 1 1 1 0 0 0 0 0 0 0 0 0 | ||
1670 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1671 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1672 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1673 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1674 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1675 | 0 0 0 8 8 7 84 83 72 184 179 149 197 193 154 251 251 187 | ||
1676 | 251 251 187 251 251 187 251 251 187 251 251 187 184 179 149 145 141 105 | ||
1677 | 19 20 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1678 | 0 0 0 | ||
1679 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1680 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1681 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1682 | 0 0 0 14 14 13 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1683 | 0 0 0 0 0 0 0 0 0 72 73 67 105 104 92 84 83 72 | ||
1684 | 72 73 67 84 83 72 68 70 65 49 51 48 39 40 39 30 32 31 | ||
1685 | 25 27 26 18 22 22 15 18 18 13 16 16 12 15 15 11 13 13 | ||
1686 | 10 12 12 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1687 | 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1688 | 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1689 | 9 11 11 9 11 11 9 11 11 9 12 12 9 12 12 9 12 12 | ||
1690 | 10 12 12 10 12 12 10 12 12 10 13 13 10 13 13 11 13 13 | ||
1691 | 13 16 16 41 42 42 99 98 80 158 153 112 65 66 61 51 52 50 | ||
1692 | 49 51 48 43 45 43 39 40 39 31 33 31 25 27 26 21 22 21 | ||
1693 | 21 22 21 68 70 65 55 56 53 13 13 13 12 12 12 12 12 12 | ||
1694 | 12 12 12 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1695 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1696 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1697 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1698 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1699 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 | ||
1700 | 63 64 60 158 153 112 184 179 149 210 208 158 251 251 187 251 251 187 | ||
1701 | 251 251 187 251 251 187 251 251 187 184 179 149 137 133 100 27 29 28 | ||
1702 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1703 | 0 0 0 | ||
1704 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1705 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1706 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1707 | 21 22 21 110 109 94 5 6 5 0 0 0 0 0 0 0 0 0 | ||
1708 | 0 0 0 0 0 0 13 13 13 105 104 92 90 89 73 72 73 67 | ||
1709 | 68 70 65 84 83 72 63 64 60 46 47 45 35 37 36 27 29 28 | ||
1710 | 22 24 23 17 20 20 14 17 17 12 15 15 11 14 14 10 12 12 | ||
1711 | 10 12 12 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1712 | 9 11 11 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1713 | 8 10 10 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1714 | 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1715 | 9 12 12 9 12 12 10 12 12 10 12 12 10 13 13 10 13 13 | ||
1716 | 30 32 31 47 48 46 177 172 135 210 208 158 137 133 100 55 56 53 | ||
1717 | 49 51 48 43 45 43 38 39 37 31 33 31 25 27 26 22 24 23 | ||
1718 | 110 109 94 184 179 149 63 64 60 13 13 13 12 12 12 12 12 12 | ||
1719 | 12 12 12 8 9 9 0 0 0 1 1 1 0 0 0 0 0 0 | ||
1720 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1721 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1722 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1723 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1724 | 0 0 0 0 0 0 0 0 0 0 0 0 21 22 21 105 104 92 | ||
1725 | 184 179 149 210 208 158 251 251 187 251 251 187 251 251 187 251 251 187 | ||
1726 | 251 251 187 251 251 187 184 179 149 145 141 105 23 24 24 0 0 0 | ||
1727 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1728 | 0 0 0 | ||
1729 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1730 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1731 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1732 | 68 70 65 184 179 149 105 104 92 0 0 0 0 0 0 0 0 0 | ||
1733 | 0 0 0 0 0 0 51 52 50 99 98 80 84 83 72 63 64 60 | ||
1734 | 68 70 65 72 73 67 55 57 54 41 42 42 32 34 33 25 27 26 | ||
1735 | 20 23 23 16 19 19 13 16 16 12 14 14 10 13 13 10 12 12 | ||
1736 | 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 8 10 10 | ||
1737 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1738 | 8 10 10 8 10 10 8 10 10 8 10 10 9 11 11 9 11 11 | ||
1739 | 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1740 | 9 11 11 9 11 11 9 12 12 9 12 12 10 12 12 17 20 20 | ||
1741 | 46 47 45 72 73 67 210 208 158 251 251 187 210 208 158 63 64 60 | ||
1742 | 49 51 48 43 45 43 37 39 37 30 32 31 24 26 24 105 104 92 | ||
1743 | 210 208 158 197 193 154 47 48 46 13 13 13 12 12 12 12 12 12 | ||
1744 | 12 12 12 6 7 7 33 36 34 48 49 45 0 0 0 0 0 0 | ||
1745 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1746 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1747 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1748 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1749 | 0 0 0 0 0 0 8 8 7 23 24 24 55 56 53 110 109 94 | ||
1750 | 210 208 158 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | ||
1751 | 251 251 187 184 179 149 110 109 94 20 20 20 0 0 0 0 0 0 | ||
1752 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1753 | 0 0 0 | ||
1754 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1755 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1756 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1757 | 110 109 94 251 251 187 210 208 158 47 48 46 0 0 0 0 0 0 | ||
1758 | 0 0 0 1 1 1 90 89 73 90 89 73 72 73 67 55 56 53 | ||
1759 | 72 73 67 68 70 65 51 52 50 37 39 37 28 31 30 23 25 24 | ||
1760 | 17 21 21 15 18 18 12 15 15 11 14 14 10 13 13 9 12 12 | ||
1761 | 9 11 11 9 11 11 9 11 11 8 10 10 8 10 10 8 10 10 | ||
1762 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1763 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1764 | 8 10 10 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11 | ||
1765 | 9 11 11 9 11 11 9 11 11 9 12 12 13 16 16 41 42 42 | ||
1766 | 49 51 48 110 109 94 251 251 187 251 251 187 251 251 187 105 104 92 | ||
1767 | 49 51 48 43 45 43 35 37 36 30 31 28 47 48 46 197 193 154 | ||
1768 | 251 251 187 197 193 154 31 33 31 12 12 12 12 12 12 12 12 12 | ||
1769 | 12 12 12 51 52 50 184 179 149 72 73 67 0 0 0 0 0 0 | ||
1770 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1771 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1772 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1773 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 | ||
1774 | 11 11 11 21 22 21 30 32 31 40 41 39 60 60 56 145 141 105 | ||
1775 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 214 212 158 | ||
1776 | 184 179 149 110 109 94 13 13 13 0 0 0 0 0 0 0 0 0 | ||
1777 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1778 | 0 0 0 | ||
1779 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1780 | 0 0 0 0 0 0 4 5 4 61 61 53 48 49 45 3 4 3 | ||
1781 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1782 | 156 151 111 251 251 187 251 251 187 184 179 149 11 11 11 0 0 0 | ||
1783 | 0 0 0 26 28 27 99 98 80 84 83 72 60 60 56 43 45 43 | ||
1784 | 72 73 67 65 66 61 49 51 48 35 37 36 27 29 28 20 24 24 | ||
1785 | 17 20 20 14 17 17 12 15 15 11 13 13 10 12 12 9 11 11 | ||
1786 | 9 11 11 9 11 11 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1787 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1788 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1789 | 8 10 10 8 10 10 8 10 10 8 10 10 9 11 11 9 11 11 | ||
1790 | 9 11 11 9 11 11 9 11 11 11 13 13 37 39 37 47 48 46 | ||
1791 | 51 52 50 184 179 149 251 251 187 251 251 187 251 251 187 145 141 105 | ||
1792 | 47 48 46 41 42 42 35 37 36 27 29 28 137 133 100 251 251 187 | ||
1793 | 251 251 187 197 193 154 19 20 19 12 12 12 12 12 12 12 12 12 | ||
1794 | 27 29 28 184 179 149 214 212 158 63 64 60 0 0 0 0 0 0 | ||
1795 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1796 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1797 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1798 | 0 0 0 0 0 0 1 1 1 6 7 7 16 16 16 24 26 24 | ||
1799 | 30 32 31 38 39 37 47 48 46 55 57 54 68 70 65 110 109 94 | ||
1800 | 197 193 154 251 251 187 251 251 187 251 251 187 210 208 158 184 179 149 | ||
1801 | 105 104 92 8 8 7 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1802 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1803 | 0 0 0 | ||
1804 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1805 | 0 0 0 0 0 0 0 0 0 65 66 61 184 179 149 156 151 111 | ||
1806 | 30 32 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1807 | 168 163 120 251 251 187 251 251 187 251 251 187 110 109 94 0 0 0 | ||
1808 | 0 0 0 60 60 56 84 83 72 68 70 65 51 52 50 38 39 37 | ||
1809 | 84 83 72 63 64 60 43 45 43 33 36 34 25 27 26 20 23 22 | ||
1810 | 15 18 18 13 16 16 12 14 14 10 13 13 9 12 12 9 11 11 | ||
1811 | 9 11 11 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1812 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1813 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1814 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1815 | 9 11 11 9 11 11 10 12 12 33 36 34 46 47 45 51 52 50 | ||
1816 | 72 73 67 210 208 158 251 251 187 251 251 187 251 251 187 177 172 135 | ||
1817 | 47 48 46 41 42 42 35 37 36 37 39 37 184 179 149 251 251 187 | ||
1818 | 251 251 187 197 193 154 13 13 13 12 12 12 12 12 12 12 12 12 | ||
1819 | 110 109 94 251 251 187 251 251 187 37 39 37 0 0 0 0 0 0 | ||
1820 | 0 0 0 21 22 20 2 2 1 0 0 0 0 0 0 0 0 0 | ||
1821 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1822 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1823 | 4 5 5 12 12 12 21 22 21 25 27 26 30 32 31 38 39 37 | ||
1824 | 46 47 45 55 56 53 60 60 56 65 66 61 68 70 65 105 104 92 | ||
1825 | 110 109 94 197 193 154 210 208 158 197 193 154 184 179 149 84 83 72 | ||
1826 | 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1827 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1828 | 0 0 0 | ||
1829 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1830 | 0 0 0 0 0 0 0 0 0 13 13 13 184 179 149 251 251 187 | ||
1831 | 197 193 154 43 44 41 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1832 | 145 141 105 251 251 187 251 251 187 251 251 187 214 212 158 43 45 43 | ||
1833 | 2 2 2 84 83 72 72 73 67 58 59 55 41 42 42 38 39 37 | ||
1834 | 72 73 67 58 59 55 41 42 42 31 33 31 25 27 26 18 22 22 | ||
1835 | 14 17 17 12 15 15 12 14 14 10 12 12 9 12 12 9 11 11 | ||
1836 | 9 11 11 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1837 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1838 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1839 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1840 | 8 10 10 9 12 12 31 33 31 43 45 43 49 51 48 55 56 53 | ||
1841 | 110 109 94 251 251 187 251 251 187 251 251 187 251 251 187 168 163 120 | ||
1842 | 47 48 46 41 42 42 33 36 34 63 64 60 197 193 154 251 251 187 | ||
1843 | 251 251 187 184 179 149 13 13 13 12 12 12 12 12 12 16 16 16 | ||
1844 | 197 193 154 251 251 187 239 239 170 20 20 20 0 0 0 2 2 1 | ||
1845 | 108 107 93 110 109 94 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1846 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1847 | 0 0 0 0 0 0 1 1 1 4 5 5 11 11 11 18 19 18 | ||
1848 | 22 24 23 26 28 27 32 34 33 39 40 39 46 47 45 51 52 50 | ||
1849 | 55 57 54 60 60 56 63 64 60 63 64 60 63 64 60 58 59 55 | ||
1850 | 63 64 60 99 98 80 145 141 105 137 133 100 43 45 43 0 0 0 | ||
1851 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1852 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1853 | 0 0 0 | ||
1854 | 0 0 0 0 0 0 0 0 0 3 4 3 0 0 0 0 0 0 | ||
1855 | 0 0 0 0 0 0 0 0 0 0 0 0 110 109 94 251 251 187 | ||
1856 | 251 251 187 184 179 149 25 27 26 0 0 0 0 0 0 0 0 0 | ||
1857 | 99 98 80 251 251 187 251 251 187 251 251 187 251 251 187 156 151 111 | ||
1858 | 25 27 26 84 83 72 65 66 61 47 48 46 32 34 33 39 40 39 | ||
1859 | 72 73 67 55 57 54 40 41 39 30 32 31 23 25 24 18 22 22 | ||
1860 | 14 17 17 12 15 15 11 13 13 10 12 12 9 11 11 9 11 11 | ||
1861 | 9 11 11 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1862 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1863 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1864 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1865 | 9 11 11 28 31 30 41 42 42 47 48 46 55 56 53 58 59 55 | ||
1866 | 137 133 100 251 251 187 251 251 187 251 251 187 210 208 158 137 133 100 | ||
1867 | 47 48 46 40 41 39 32 34 33 75 75 61 184 179 149 239 239 170 | ||
1868 | 251 251 187 177 172 135 13 13 13 12 12 12 12 12 12 43 44 41 | ||
1869 | 197 193 154 251 251 187 210 208 158 10 10 9 0 0 0 84 83 72 | ||
1870 | 251 251 187 84 83 72 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1871 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 | ||
1872 | 6 7 7 11 11 11 17 17 17 20 20 20 23 24 24 27 29 28 | ||
1873 | 32 34 33 38 39 37 43 45 43 47 48 46 51 52 50 55 56 53 | ||
1874 | 58 59 55 58 59 55 55 57 54 55 56 53 47 48 46 41 42 42 | ||
1875 | 35 37 36 31 33 31 47 48 46 14 14 13 0 0 0 0 0 0 | ||
1876 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1877 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1878 | 0 0 0 | ||
1879 | 0 0 0 0 0 0 0 0 0 66 65 55 99 98 80 20 20 20 | ||
1880 | 0 0 0 0 0 0 0 0 0 0 0 0 43 45 43 214 212 158 | ||
1881 | 251 251 187 251 251 187 145 141 105 3 3 3 0 0 0 0 0 0 | ||
1882 | 48 49 45 184 179 149 239 239 170 251 251 187 239 239 170 177 172 135 | ||
1883 | 84 83 72 72 73 67 55 56 53 39 40 39 26 28 27 39 40 39 | ||
1884 | 68 70 65 51 52 50 39 40 39 28 31 30 22 24 23 17 20 20 | ||
1885 | 14 17 17 12 14 14 10 13 13 9 11 11 9 11 11 9 11 11 | ||
1886 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1887 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1888 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1889 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1890 | 27 29 28 40 41 39 46 47 45 51 52 50 55 57 54 63 64 60 | ||
1891 | 131 127 93 197 193 154 210 208 158 197 193 154 168 163 120 96 95 69 | ||
1892 | 47 48 46 40 41 39 32 34 33 71 71 57 145 141 105 184 179 149 | ||
1893 | 184 179 149 131 127 93 13 13 13 12 12 12 12 12 12 48 49 45 | ||
1894 | 168 163 120 184 179 149 156 151 111 6 7 7 14 14 13 177 172 135 | ||
1895 | 239 239 170 40 41 39 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1896 | 0 0 0 0 0 0 3 3 3 6 7 7 11 11 11 16 16 16 | ||
1897 | 18 19 18 21 22 21 23 24 24 27 29 28 32 34 33 37 39 37 | ||
1898 | 41 42 42 43 45 43 47 48 46 51 52 50 51 52 50 51 52 50 | ||
1899 | 51 52 50 49 51 48 46 47 45 40 41 39 32 34 33 25 27 26 | ||
1900 | 20 20 20 14 14 13 2 2 2 0 0 0 0 0 0 0 0 0 | ||
1901 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1902 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1903 | 0 0 0 | ||
1904 | 0 0 0 0 0 0 0 0 0 33 36 34 197 193 154 184 179 149 | ||
1905 | 41 42 42 0 0 0 0 0 0 0 0 0 3 3 3 184 179 149 | ||
1906 | 251 251 187 251 251 187 184 179 149 48 49 45 0 0 0 0 0 0 | ||
1907 | 16 17 12 121 119 87 177 172 135 194 189 146 188 184 146 145 141 105 | ||
1908 | 82 81 62 63 64 60 46 47 45 31 33 31 21 22 21 35 37 36 | ||
1909 | 68 70 65 51 52 50 37 39 37 27 30 29 22 24 23 17 20 20 | ||
1910 | 13 16 16 12 14 14 10 13 13 9 11 11 8 10 10 8 10 10 | ||
1911 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1912 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1913 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1914 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 25 27 26 | ||
1915 | 38 39 37 43 45 43 51 52 50 55 56 53 60 60 56 63 64 60 | ||
1916 | 92 91 72 158 153 112 176 171 126 171 165 117 149 143 98 82 81 62 | ||
1917 | 44 46 43 38 39 37 30 32 31 71 71 57 131 127 93 160 154 106 | ||
1918 | 149 143 98 82 81 62 13 13 13 12 12 12 12 12 12 46 47 43 | ||
1919 | 121 119 87 134 131 96 96 95 69 7 7 6 38 39 37 131 127 93 | ||
1920 | 145 141 105 12 13 12 0 0 0 1 1 1 3 3 3 6 7 7 | ||
1921 | 10 10 9 12 12 12 14 14 13 16 16 16 18 19 18 21 22 21 | ||
1922 | 22 24 23 26 28 27 30 31 28 33 36 34 37 39 37 40 41 39 | ||
1923 | 41 42 42 43 45 43 46 47 45 46 47 45 46 47 45 43 45 43 | ||
1924 | 41 42 42 37 39 37 31 33 31 26 28 27 21 22 21 16 16 16 | ||
1925 | 6 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1926 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1927 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1928 | 0 0 0 | ||
1929 | 0 0 0 0 0 0 0 0 0 0 0 0 177 172 135 251 251 187 | ||
1930 | 197 193 154 27 29 28 0 0 0 0 0 0 0 0 0 110 109 94 | ||
1931 | 239 239 170 239 239 170 184 179 149 87 86 72 2 2 1 0 0 0 | ||
1932 | 1 1 1 82 81 62 142 137 94 165 161 109 165 161 109 131 127 93 | ||
1933 | 75 75 61 55 56 53 37 39 37 25 27 26 19 20 19 32 34 33 | ||
1934 | 65 66 61 49 51 48 35 37 36 27 29 28 20 23 23 16 19 19 | ||
1935 | 13 16 16 13 13 13 10 12 12 9 11 11 8 10 10 8 10 10 | ||
1936 | 8 9 9 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1937 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1938 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1939 | 8 10 10 8 10 10 8 10 10 8 10 10 22 24 23 35 37 36 | ||
1940 | 41 42 42 47 48 46 55 56 53 58 59 55 63 64 60 65 66 61 | ||
1941 | 71 71 57 131 127 93 160 154 106 160 154 106 142 137 94 82 81 62 | ||
1942 | 46 47 43 40 41 39 33 36 34 66 65 55 125 122 87 149 143 98 | ||
1943 | 142 137 94 82 81 62 17 17 17 18 19 17 14 14 13 46 47 43 | ||
1944 | 118 116 76 125 122 87 96 95 69 16 17 12 71 71 57 103 101 77 | ||
1945 | 82 81 62 11 11 11 11 11 11 13 13 13 14 14 13 14 14 13 | ||
1946 | 15 15 15 16 16 16 17 17 17 19 20 19 21 22 21 23 24 24 | ||
1947 | 26 28 27 27 29 28 31 33 31 33 36 34 35 37 36 38 39 37 | ||
1948 | 39 40 39 39 40 39 38 39 37 37 39 37 35 37 36 31 33 31 | ||
1949 | 27 29 28 24 26 24 21 22 21 17 17 17 12 12 12 2 2 2 | ||
1950 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1951 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1952 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1953 | 0 0 0 | ||
1954 | 0 0 0 0 0 0 0 0 0 0 0 0 68 70 65 251 251 187 | ||
1955 | 251 251 187 156 151 111 2 2 1 0 0 0 0 0 0 43 44 41 | ||
1956 | 177 172 135 184 179 149 158 153 112 103 101 77 19 20 18 0 0 0 | ||
1957 | 0 0 0 46 47 43 131 127 93 160 154 106 160 154 106 131 127 93 | ||
1958 | 71 71 57 43 45 43 30 32 31 21 22 21 16 16 16 26 28 27 | ||
1959 | 63 64 60 47 48 46 35 37 36 26 28 27 20 23 23 16 19 19 | ||
1960 | 13 16 16 13 13 13 10 12 12 9 11 11 8 10 10 8 10 10 | ||
1961 | 7 9 9 7 9 9 8 9 9 8 10 10 8 10 10 8 10 10 | ||
1962 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1963 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1964 | 8 10 10 8 10 10 8 10 10 20 20 20 33 36 34 40 41 39 | ||
1965 | 46 47 45 51 52 50 55 57 54 60 60 56 63 64 60 65 66 61 | ||
1966 | 66 65 55 118 116 76 151 147 98 165 161 109 151 147 98 121 119 87 | ||
1967 | 96 95 69 96 95 69 96 95 69 103 101 77 142 137 94 151 147 98 | ||
1968 | 142 137 94 103 101 77 82 81 62 82 81 62 82 81 62 96 95 69 | ||
1969 | 131 127 93 142 137 94 103 101 77 46 47 43 96 95 69 118 116 76 | ||
1970 | 71 71 57 14 14 13 14 14 13 15 15 15 15 15 15 16 16 16 | ||
1971 | 16 16 16 17 17 17 18 19 18 20 20 20 21 22 21 23 24 24 | ||
1972 | 25 27 26 27 29 28 30 31 28 30 32 31 31 33 31 31 33 31 | ||
1973 | 31 33 31 31 33 31 30 31 28 27 29 28 25 27 26 22 24 23 | ||
1974 | 20 20 20 16 16 16 13 13 13 6 7 7 0 0 0 0 0 0 | ||
1975 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1976 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1977 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1978 | 0 0 0 | ||
1979 | 58 59 55 68 70 65 8 8 7 0 0 0 10 10 9 210 208 158 | ||
1980 | 251 251 187 184 179 149 38 39 37 0 0 0 0 0 0 8 8 7 | ||
1981 | 103 101 77 149 143 98 149 143 98 118 116 76 40 41 39 25 27 25 | ||
1982 | 53 55 47 82 81 62 144 139 99 165 161 109 165 161 109 142 137 94 | ||
1983 | 71 71 57 35 37 36 24 26 24 18 19 18 15 15 15 22 24 23 | ||
1984 | 63 64 60 46 47 45 33 36 34 26 28 27 20 23 22 17 18 17 | ||
1985 | 12 15 15 11 13 13 10 12 12 9 11 11 8 10 10 8 10 10 | ||
1986 | 7 9 9 7 9 9 7 9 9 7 9 9 8 9 9 8 10 10 | ||
1987 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1988 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
1989 | 8 10 10 8 10 10 16 16 16 30 31 28 35 37 36 41 42 42 | ||
1990 | 47 48 46 55 56 53 58 59 55 63 64 60 65 66 61 65 66 61 | ||
1991 | 61 61 53 103 101 77 151 147 98 171 165 117 171 165 117 168 163 120 | ||
1992 | 158 153 112 158 153 112 155 149 109 151 147 98 151 147 98 160 154 106 | ||
1993 | 151 147 98 149 143 98 142 137 94 149 143 98 149 143 98 149 143 98 | ||
1994 | 155 149 109 151 147 98 131 127 93 103 101 77 125 122 87 118 116 76 | ||
1995 | 71 71 57 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 | ||
1996 | 17 17 17 17 17 17 18 19 18 19 20 19 20 20 20 21 22 21 | ||
1997 | 23 24 24 24 26 24 25 27 26 26 28 27 26 28 27 26 28 27 | ||
1998 | 25 27 26 24 26 24 22 24 23 21 22 21 19 20 19 16 16 16 | ||
1999 | 14 14 13 8 8 7 1 1 1 0 0 0 0 0 0 0 0 0 | ||
2000 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2001 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2002 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2003 | 0 0 0 | ||
2004 | 20 20 20 184 179 149 168 163 120 21 22 21 0 0 0 105 104 92 | ||
2005 | 177 172 135 145 141 105 71 71 57 0 0 0 0 0 0 0 0 0 | ||
2006 | 66 65 55 131 127 93 151 147 98 142 137 94 118 116 76 121 119 87 | ||
2007 | 145 141 105 158 153 112 176 171 126 178 174 128 176 171 126 149 145 103 | ||
2008 | 96 95 69 31 33 31 21 22 21 16 16 16 14 14 13 18 19 18 | ||
2009 | 60 60 56 46 47 45 33 36 34 25 27 26 21 22 21 15 18 18 | ||
2010 | 12 15 15 11 13 13 9 11 11 8 10 10 8 10 10 8 9 9 | ||
2011 | 7 9 9 7 9 9 7 9 9 7 9 9 7 9 9 8 9 9 | ||
2012 | 8 9 9 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
2013 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
2014 | 8 10 10 10 12 12 26 28 27 31 33 31 38 39 37 43 45 43 | ||
2015 | 51 52 50 55 56 53 60 60 56 63 64 60 65 66 61 68 70 65 | ||
2016 | 63 64 60 96 95 69 158 153 112 178 174 128 188 184 146 194 189 146 | ||
2017 | 194 189 146 188 184 146 184 181 136 176 171 126 171 165 117 173 167 111 | ||
2018 | 173 167 111 165 161 109 171 165 117 174 170 121 176 171 126 178 174 128 | ||
2019 | 178 174 128 174 170 121 160 154 106 149 143 98 149 143 98 125 122 87 | ||
2020 | 71 71 57 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 | ||
2021 | 17 17 17 17 17 17 17 17 17 18 19 18 19 20 19 20 20 20 | ||
2022 | 21 22 21 21 22 21 21 22 21 22 24 23 21 22 21 21 22 21 | ||
2023 | 21 22 21 19 20 19 18 19 18 16 16 16 14 14 13 11 11 11 | ||
2024 | 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2025 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2026 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2027 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2028 | 0 0 0 | ||
2029 | 0 0 0 105 104 92 197 193 154 110 109 94 9 9 8 36 38 35 | ||
2030 | 121 119 87 131 127 93 96 95 69 18 19 17 30 31 28 66 65 55 | ||
2031 | 96 95 69 142 137 94 160 154 106 160 154 106 160 154 106 168 163 120 | ||
2032 | 184 181 136 194 191 148 197 193 154 197 193 154 194 189 146 168 163 120 | ||
2033 | 125 122 87 46 47 43 18 19 18 15 15 15 13 13 13 14 14 13 | ||
2034 | 55 57 54 43 45 43 32 34 33 25 27 26 18 22 22 17 17 17 | ||
2035 | 12 14 14 10 12 12 9 11 11 8 10 10 8 9 9 7 9 9 | ||
2036 | 6 8 8 7 9 9 7 9 9 7 9 9 7 9 9 7 9 9 | ||
2037 | 7 9 9 8 9 9 8 9 9 8 10 10 8 10 10 8 10 10 | ||
2038 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
2039 | 8 10 10 32 34 33 41 42 42 35 37 36 39 40 39 37 39 37 | ||
2040 | 35 37 36 55 57 54 60 60 56 63 64 60 65 66 61 65 66 61 | ||
2041 | 61 63 57 115 113 82 168 163 120 194 191 148 204 201 155 210 208 158 | ||
2042 | 210 208 158 210 208 158 197 193 154 194 189 146 186 182 128 176 171 126 | ||
2043 | 174 170 121 176 171 126 186 182 128 190 186 136 194 191 148 197 193 154 | ||
2044 | 197 193 154 188 184 146 181 176 137 174 170 121 165 161 109 142 137 94 | ||
2045 | 82 81 62 24 26 24 16 16 16 16 16 16 16 16 16 16 16 16 | ||
2046 | 17 17 17 17 17 17 17 17 17 17 17 17 18 19 18 19 20 19 | ||
2047 | 19 20 19 19 20 19 20 20 20 19 20 19 19 20 19 18 19 18 | ||
2048 | 17 17 17 15 15 15 13 13 13 12 12 12 6 7 7 0 0 0 | ||
2049 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2050 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2051 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2052 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2053 | 0 0 0 | ||
2054 | 0 0 0 17 18 17 137 133 100 115 113 82 53 55 47 19 20 18 | ||
2055 | 103 101 77 144 139 99 137 133 100 115 113 82 137 133 100 156 151 111 | ||
2056 | 158 153 112 164 159 111 171 165 117 174 170 121 178 174 128 194 189 146 | ||
2057 | 204 201 155 214 212 158 214 212 158 214 212 158 210 208 158 188 184 146 | ||
2058 | 158 153 112 87 86 72 17 17 17 13 13 13 13 13 13 15 15 15 | ||
2059 | 55 56 53 43 45 43 32 34 33 24 26 24 17 20 20 16 16 16 | ||
2060 | 12 14 14 10 12 12 8 10 10 8 10 10 7 9 9 6 8 8 | ||
2061 | 6 8 8 6 8 8 6 8 8 7 9 9 7 9 9 7 9 9 | ||
2062 | 7 9 9 7 9 9 7 9 9 7 9 9 8 9 9 8 10 10 | ||
2063 | 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10 | ||
2064 | 8 10 10 110 109 94 84 83 72 49 51 48 26 28 27 8 10 10 | ||
2065 | 8 9 9 51 52 50 58 59 55 63 64 60 63 64 60 63 64 60 | ||
2066 | 66 65 55 134 131 96 181 176 137 210 208 158 214 212 158 239 239 170 | ||
2067 | 239 239 170 224 223 159 210 208 158 204 201 155 194 189 146 186 182 128 | ||
2068 | 186 182 128 184 181 136 194 189 146 204 201 155 210 208 158 210 208 158 | ||
2069 | 210 208 158 210 208 158 197 193 154 190 186 136 176 171 126 155 149 109 | ||
2070 | 118 116 76 36 38 35 15 15 15 16 16 16 16 16 16 16 16 16 | ||
2071 | 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 17 17 17 | ||
2072 | 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 15 15 15 | ||
2073 | 13 13 13 12 12 12 8 8 7 2 2 2 0 0 0 0 0 0 | ||
2074 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2075 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2076 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2077 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2078 | 0 0 0 | ||
2079 | 0 0 0 0 0 0 53 55 47 103 101 77 96 95 69 53 55 47 | ||
2080 | 103 101 77 158 153 112 177 172 135 184 179 149 188 184 146 197 193 154 | ||
2081 | 194 189 146 190 186 136 184 181 136 184 181 136 194 189 146 210 208 158 | ||
2082 | 214 212 158 239 239 170 251 251 187 251 251 187 224 223 159 204 201 155 | ||
2083 | 177 172 135 121 119 87 30 31 28 13 13 13 12 12 12 39 40 39 | ||
2084 | 60 60 56 43 45 43 32 34 33 23 25 24 18 19 18 13 16 16 | ||
2085 | 13 13 13 9 11 11 8 10 10 8 9 9 6 8 8 6 8 8 | ||
2086 | 6 8 8 6 8 8 6 8 8 6 8 8 6 8 8 7 9 9 | ||
2087 | 7 9 9 7 9 9 7 9 9 7 9 9 7 9 9 7 9 9 | ||
2088 | 7 9 9 8 9 9 8 9 9 8 10 10 8 10 10 8 10 10 | ||
2089 | 14 17 17 197 193 154 158 153 112 55 57 54 7 9 9 7 9 9 | ||
2090 | 8 10 10 51 52 50 58 59 55 60 60 56 63 64 60 63 64 60 | ||
2091 | 71 71 57 155 149 109 194 191 148 214 212 158 251 251 187 251 251 187 | ||
2092 | 251 251 187 251 251 187 239 239 170 210 208 158 197 193 154 190 186 136 | ||
2093 | 190 186 136 194 189 146 204 201 155 210 208 158 224 223 159 239 239 170 | ||
2094 | 239 239 170 224 223 159 210 208 158 204 201 155 190 186 136 164 159 111 | ||
2095 | 125 122 87 40 41 39 15 15 15 15 15 15 15 15 15 15 15 15 | ||
2096 | 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 | ||
2097 | 16 16 16 16 16 16 15 15 15 14 14 13 13 13 13 12 12 12 | ||
2098 | 8 9 9 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2099 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2100 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2101 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2102 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2103 | 0 0 0 | ||
2104 | 0 0 0 0 0 0 21 22 20 96 95 69 125 122 87 121 119 87 | ||
2105 | 144 139 99 177 172 135 197 193 154 210 208 158 214 212 158 214 212 158 | ||
2106 | 210 208 158 204 201 155 194 191 148 194 189 146 204 201 155 214 212 158 | ||
2107 | 239 239 170 251 251 187 251 251 187 251 251 187 251 251 187 214 212 158 | ||
2108 | 188 184 146 145 141 105 53 55 47 12 12 12 15 15 15 63 64 60 | ||
2109 | 63 64 60 41 42 42 31 33 31 23 24 24 17 18 17 12 15 15 | ||
2110 | 11 13 13 9 11 11 8 9 9 7 9 9 6 8 8 6 8 8 | ||
2111 | 6 7 7 6 7 7 6 8 8 6 8 8 6 8 8 6 8 8 | ||
2112 | 6 8 8 7 9 9 7 9 9 7 9 9 7 9 9 7 9 9 | ||
2113 | 7 9 9 7 9 9 7 9 9 7 9 9 7 9 9 8 8 7 | ||
2114 | 43 45 43 251 251 187 156 151 111 8 10 10 7 9 9 7 9 9 | ||
2115 | 21 22 21 51 52 50 55 56 53 55 57 54 58 59 55 58 59 55 | ||
2116 | 75 75 61 158 153 112 197 193 154 224 223 159 251 251 187 251 251 187 | ||
2117 | 251 251 187 251 251 187 251 251 187 214 212 158 204 201 155 194 189 146 | ||
2118 | 190 186 136 197 193 154 210 208 158 224 223 159 251 251 187 251 251 187 | ||
2119 | 251 251 187 251 251 187 239 239 170 210 208 158 197 193 154 176 171 126 | ||
2120 | 125 122 87 36 38 35 14 14 13 14 14 13 15 15 15 15 15 15 | ||
2121 | 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 | ||
2122 | 15 15 15 14 14 13 13 13 13 12 12 12 10 10 9 3 4 4 | ||
2123 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2124 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2125 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2126 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2127 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2128 | 0 0 0 | ||
2129 | 0 0 0 0 0 0 7 7 5 71 71 57 131 127 93 158 153 112 | ||
2130 | 177 172 135 197 193 154 214 212 158 239 239 170 251 251 187 251 251 187 | ||
2131 | 238 237 168 210 208 158 204 201 155 197 193 154 204 201 155 214 212 158 | ||
2132 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 214 212 158 | ||
2133 | 197 193 154 156 151 111 66 65 55 12 12 12 37 39 37 58 59 55 | ||
2134 | 58 59 55 41 42 42 31 33 31 22 24 23 17 17 17 12 14 14 | ||
2135 | 10 12 12 8 10 10 6 8 8 6 8 8 6 7 7 6 7 7 | ||
2136 | 6 7 7 5 7 7 6 7 7 6 7 7 6 8 8 6 8 8 | ||
2137 | 6 8 8 6 8 8 6 8 8 7 9 9 7 9 9 7 9 9 | ||
2138 | 7 9 9 6 8 8 6 8 8 6 8 8 6 8 8 6 8 8 | ||
2139 | 61 63 57 197 193 154 16 19 19 6 8 8 6 8 8 8 9 9 | ||
2140 | 41 42 42 47 48 46 51 52 50 51 52 50 55 56 53 55 56 53 | ||
2141 | 71 71 57 158 153 112 197 193 154 224 223 159 251 251 187 251 251 187 | ||
2142 | 251 251 187 251 251 187 239 239 170 214 212 158 204 201 155 194 189 146 | ||
2143 | 190 186 136 197 193 154 210 208 158 239 239 170 251 251 187 251 251 187 | ||
2144 | 251 251 187 251 251 187 251 251 187 224 223 159 204 201 155 177 172 135 | ||
2145 | 121 119 87 30 31 28 13 13 13 14 14 13 14 14 13 14 14 13 | ||
2146 | 14 14 13 14 14 13 15 15 15 15 15 15 14 14 13 13 13 13 | ||
2147 | 12 12 12 12 12 12 10 10 9 4 5 5 0 0 0 0 0 0 | ||
2148 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2149 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2150 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2151 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2152 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2153 | 0 0 0 | ||
2154 | 0 0 0 0 0 0 0 0 0 48 49 45 131 127 93 174 170 121 | ||
2155 | 194 189 146 210 208 158 239 239 170 251 251 187 251 251 187 251 251 187 | ||
2156 | 251 251 187 214 212 158 204 201 155 197 193 154 204 201 155 210 208 158 | ||
2157 | 239 239 170 251 251 187 251 251 187 251 251 187 239 239 170 214 212 158 | ||
2158 | 194 191 148 156 151 111 71 71 57 19 20 19 51 52 50 51 52 50 | ||
2159 | 51 52 50 41 42 42 30 32 31 21 22 21 17 17 17 13 13 13 | ||
2160 | 9 11 11 8 9 9 6 8 8 6 7 7 6 7 7 5 7 7 | ||
2161 | 5 6 5 5 6 5 5 7 7 5 7 7 6 7 7 6 7 7 | ||
2162 | 6 8 8 6 8 8 6 8 8 6 7 7 6 7 7 6 7 7 | ||
2163 | 6 7 7 6 8 8 6 8 8 6 8 8 6 8 8 6 8 8 | ||
2164 | 55 56 53 43 45 43 6 8 8 6 8 8 6 8 8 47 48 46 | ||
2165 | 60 60 56 47 48 46 46 47 45 47 48 46 38 39 37 10 12 12 | ||
2166 | 66 65 55 145 141 105 197 193 154 214 212 158 251 251 187 251 251 187 | ||
2167 | 251 251 187 251 251 187 224 223 159 210 208 158 194 191 148 184 181 136 | ||
2168 | 184 181 136 194 189 146 204 201 155 224 223 159 251 251 187 251 251 187 | ||
2169 | 251 251 187 251 251 187 251 251 187 239 239 170 210 208 158 181 176 137 | ||
2170 | 115 113 82 21 22 20 13 13 13 13 13 13 13 13 13 13 13 13 | ||
2171 | 14 14 13 13 13 13 13 13 13 13 13 13 12 12 12 11 11 11 | ||
2172 | 10 10 9 6 7 7 1 1 1 0 0 0 0 0 0 0 0 0 | ||
2173 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2174 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2175 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2176 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2177 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2178 | 0 0 0 | ||
2179 | 0 0 0 0 0 0 2 2 1 66 65 55 144 139 99 178 174 128 | ||
2180 | 204 201 155 214 212 158 251 251 187 251 251 187 251 251 187 251 251 187 | ||
2181 | 251 251 187 214 212 158 204 201 155 194 191 148 197 193 154 204 201 155 | ||
2182 | 214 212 158 239 239 170 239 239 170 239 239 170 214 212 158 210 208 158 | ||
2183 | 184 181 136 149 145 103 66 65 55 41 42 42 47 48 46 46 47 45 | ||
2184 | 43 45 43 39 40 39 28 31 30 21 22 21 16 16 16 10 12 12 | ||
2185 | 8 10 10 6 8 8 6 7 7 6 7 7 5 6 5 5 6 5 | ||
2186 | 5 6 5 5 6 5 5 6 5 5 6 5 5 7 7 5 7 7 | ||
2187 | 6 7 7 6 7 7 6 7 7 5 7 7 5 7 7 5 7 7 | ||
2188 | 5 7 7 6 7 7 6 7 7 6 7 7 6 7 7 6 8 8 | ||
2189 | 6 8 8 6 8 8 6 7 7 6 7 7 46 47 45 156 151 111 | ||
2190 | 105 104 92 58 59 55 43 45 43 32 34 33 6 8 8 6 8 8 | ||
2191 | 49 51 48 125 122 87 181 176 137 204 201 155 214 212 158 239 239 170 | ||
2192 | 239 239 170 214 212 158 210 208 158 197 193 154 181 176 137 176 171 126 | ||
2193 | 176 171 126 184 181 136 197 193 154 210 208 158 239 239 170 251 251 187 | ||
2194 | 251 251 187 251 251 187 251 251 187 251 251 187 210 208 158 177 172 135 | ||
2195 | 99 98 80 13 13 13 12 12 12 12 12 12 13 13 13 12 12 12 | ||
2196 | 12 12 12 12 12 12 11 11 11 11 11 11 8 9 9 4 5 5 | ||
2197 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2198 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2199 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2200 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2201 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2202 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2203 | 0 0 0 | ||
2204 | 0 0 0 0 0 0 1 1 0 61 61 53 142 137 94 181 176 137 | ||
2205 | 204 201 155 224 223 159 251 251 187 251 251 187 251 251 187 251 251 187 | ||
2206 | 251 251 187 214 212 158 197 193 154 190 186 136 184 181 136 188 184 146 | ||
2207 | 197 193 154 204 201 155 210 208 158 210 208 158 204 201 155 194 189 146 | ||
2208 | 176 171 126 134 131 96 66 65 55 43 45 43 41 42 42 39 40 39 | ||
2209 | 35 37 36 33 36 34 27 29 28 20 20 20 15 15 15 9 11 11 | ||
2210 | 8 9 9 6 7 7 5 6 5 5 6 5 4 5 5 4 5 5 | ||
2211 | 4 5 5 4 5 5 4 5 5 4 5 5 5 6 5 4 5 5 | ||
2212 | 4 5 5 5 6 5 4 5 5 5 6 5 5 6 5 5 6 5 | ||
2213 | 5 7 7 5 7 7 5 7 7 5 7 7 5 7 7 5 7 7 | ||
2214 | 6 7 7 6 7 7 6 7 7 28 31 30 184 179 149 184 179 149 | ||
2215 | 145 141 105 84 83 72 27 29 28 5 7 7 5 6 5 16 16 16 | ||
2216 | 43 44 41 96 95 69 158 153 112 188 184 146 204 201 155 210 208 158 | ||
2217 | 204 201 155 197 193 154 184 179 149 177 172 135 168 163 120 164 159 111 | ||
2218 | 164 159 111 174 170 121 184 181 136 197 193 154 214 212 158 251 251 187 | ||
2219 | 251 251 187 251 251 187 251 251 187 251 251 187 210 208 158 177 172 135 | ||
2220 | 71 71 57 11 11 11 12 12 12 11 11 11 11 11 11 11 11 11 | ||
2221 | 10 10 9 10 10 9 8 8 7 3 4 4 0 0 0 0 0 0 | ||
2222 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2223 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2224 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2225 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2226 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2227 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2228 | 0 0 0 | ||
2229 | 0 0 0 0 0 0 0 0 0 31 33 31 121 119 87 176 171 126 | ||
2230 | 197 193 154 214 212 158 251 251 187 251 251 187 251 251 187 251 251 187 | ||
2231 | 239 239 170 210 208 158 194 189 146 178 174 128 174 170 121 176 171 126 | ||
2232 | 177 172 135 181 176 137 184 179 149 184 179 149 181 176 137 178 174 128 | ||
2233 | 158 153 112 121 119 87 53 55 47 37 39 37 33 36 34 30 32 31 | ||
2234 | 27 29 28 25 27 26 24 26 24 19 20 19 13 13 13 8 10 10 | ||
2235 | 6 8 8 6 7 7 5 6 5 4 5 5 4 5 5 4 5 5 | ||
2236 | 4 5 5 4 5 5 4 5 5 3 4 4 3 4 4 4 5 5 | ||
2237 | 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5 | ||
2238 | 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 | ||
2239 | 5 6 5 5 6 5 12 14 14 145 141 105 184 179 149 177 172 135 | ||
2240 | 90 89 73 21 22 21 5 6 5 5 6 5 4 5 5 37 39 37 | ||
2241 | 38 39 37 61 61 53 134 131 96 168 163 120 184 181 136 188 184 146 | ||
2242 | 184 179 149 177 172 135 168 163 120 164 159 111 155 149 109 151 147 98 | ||
2243 | 151 147 98 164 159 111 176 171 126 184 179 149 210 208 158 239 239 170 | ||
2244 | 251 251 187 251 251 187 251 251 187 239 239 170 210 208 158 158 153 112 | ||
2245 | 46 47 43 10 10 9 10 10 9 10 10 9 8 9 9 8 9 9 | ||
2246 | 6 7 7 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2247 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2248 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2249 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2250 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2251 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2252 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2253 | 0 0 0 | ||
2254 | 0 0 0 0 0 0 0 0 0 13 12 7 82 81 62 158 153 112 | ||
2255 | 188 184 146 210 208 158 239 239 170 251 251 187 251 251 187 251 251 187 | ||
2256 | 224 223 159 204 201 155 184 181 136 171 165 117 164 159 111 160 154 106 | ||
2257 | 158 153 112 164 159 111 168 163 120 168 163 120 168 163 120 164 159 111 | ||
2258 | 142 137 94 96 95 69 43 44 41 27 29 28 26 28 27 23 24 24 | ||
2259 | 21 22 21 18 19 18 17 17 17 18 19 18 13 13 13 8 8 7 | ||
2260 | 6 7 7 5 6 5 4 5 5 3 4 4 3 4 4 3 4 4 | ||
2261 | 3 4 4 3 4 4 3 3 3 3 3 3 3 4 4 3 4 4 | ||
2262 | 3 4 4 3 4 4 4 5 5 4 5 5 4 5 5 4 5 5 | ||
2263 | 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5 | ||
2264 | 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5 | ||
2265 | 4 5 5 4 5 5 4 5 5 4 5 5 31 33 31 65 66 61 | ||
2266 | 37 39 37 38 39 37 96 95 69 144 139 99 168 163 120 174 170 121 | ||
2267 | 168 163 120 164 159 111 155 149 109 149 145 103 149 143 98 142 137 94 | ||
2268 | 149 143 98 151 147 98 164 159 111 177 172 135 197 193 154 210 208 158 | ||
2269 | 251 251 187 251 251 187 251 251 187 239 239 170 197 193 154 137 133 100 | ||
2270 | 24 26 24 8 9 9 8 9 9 8 8 7 6 7 7 2 2 2 | ||
2271 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2272 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2273 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2274 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2275 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2276 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2277 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2278 | 0 0 0 | ||
2279 | 0 0 0 0 0 0 0 0 0 0 0 0 46 47 43 125 122 87 | ||
2280 | 176 171 126 197 193 154 210 208 158 239 239 170 251 251 187 239 239 170 | ||
2281 | 214 212 158 197 193 154 181 176 137 164 159 111 151 147 98 149 143 98 | ||
2282 | 149 143 98 149 143 98 149 145 103 155 149 109 160 154 106 149 143 98 | ||
2283 | 118 116 76 82 81 62 30 31 28 21 22 21 19 20 19 17 17 17 | ||
2284 | 14 14 13 12 12 12 10 10 9 12 12 12 10 12 12 6 8 8 | ||
2285 | 4 5 5 3 4 4 3 4 4 3 4 4 3 3 3 3 3 3 | ||
2286 | 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 2 3 3 | ||
2287 | 3 4 4 3 4 4 3 4 4 3 4 4 3 4 4 4 5 5 | ||
2288 | 4 5 5 3 4 4 3 4 4 3 4 4 3 4 4 3 4 4 | ||
2289 | 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5 | ||
2290 | 4 5 5 3 4 4 3 4 4 23 24 24 110 109 94 72 73 67 | ||
2291 | 39 40 39 22 24 23 46 47 43 103 101 77 142 137 94 155 149 109 | ||
2292 | 160 154 106 155 149 109 149 143 98 142 137 94 142 137 94 142 137 94 | ||
2293 | 142 137 94 149 143 98 155 149 109 176 171 126 184 179 149 210 208 158 | ||
2294 | 239 239 170 251 251 187 251 251 187 214 212 158 184 179 149 105 104 92 | ||
2295 | 10 10 9 6 7 7 3 4 4 1 1 1 0 0 0 0 0 0 | ||
2296 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2297 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2298 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2299 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2300 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2301 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2302 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2303 | 0 0 0 | ||
2304 | 0 0 0 0 0 0 0 0 0 0 0 0 12 12 9 82 81 62 | ||
2305 | 149 145 103 181 176 137 197 193 154 210 208 158 214 212 158 214 212 158 | ||
2306 | 210 208 158 197 193 154 177 172 135 158 153 112 149 143 98 142 137 94 | ||
2307 | 142 137 94 142 137 94 149 143 98 151 147 98 151 147 98 131 127 93 | ||
2308 | 103 101 77 71 71 57 22 24 23 15 15 15 13 13 13 11 11 11 | ||
2309 | 8 9 9 6 7 7 6 7 7 4 5 5 8 9 9 6 7 7 | ||
2310 | 4 5 5 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 | ||
2311 | 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 | ||
2312 | 2 3 3 2 3 3 2 3 3 3 4 4 3 4 4 3 4 4 | ||
2313 | 3 4 4 3 4 4 3 3 3 3 4 4 3 4 4 3 4 4 | ||
2314 | 3 4 4 3 4 4 3 4 4 3 4 4 3 4 4 3 4 4 | ||
2315 | 3 4 4 3 4 4 21 22 21 145 141 105 145 141 105 72 73 67 | ||
2316 | 17 18 17 3 4 4 21 22 20 66 65 55 118 116 76 142 137 94 | ||
2317 | 149 143 98 151 147 98 149 143 98 142 137 94 142 137 94 142 137 94 | ||
2318 | 142 137 94 149 143 98 155 149 109 168 163 120 184 179 149 210 208 158 | ||
2319 | 239 239 170 251 251 187 251 251 187 210 208 158 177 172 135 71 71 57 | ||
2320 | 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2321 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2322 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2323 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2324 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2325 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2326 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2327 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2328 | 0 0 0 | ||
2329 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 38 35 | ||
2330 | 115 113 82 158 153 112 181 176 137 197 193 154 204 201 155 210 208 158 | ||
2331 | 204 201 155 188 184 146 177 172 135 164 159 111 149 145 103 142 137 94 | ||
2332 | 142 137 94 142 137 94 149 143 98 151 147 98 149 143 98 125 122 87 | ||
2333 | 96 95 69 61 61 53 16 17 12 8 9 9 8 8 7 6 7 7 | ||
2334 | 4 5 5 3 4 4 3 3 3 3 3 3 3 3 3 5 6 5 | ||
2335 | 3 4 4 2 3 3 2 2 2 2 2 2 2 2 2 2 2 2 | ||
2336 | 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 | ||
2337 | 2 2 2 2 2 2 2 3 3 2 3 3 2 3 3 2 3 3 | ||
2338 | 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 | ||
2339 | 3 3 3 2 3 3 2 3 3 3 4 4 3 4 4 3 4 4 | ||
2340 | 3 4 4 3 4 4 3 4 4 8 9 9 8 8 7 3 3 3 | ||
2341 | 3 3 3 3 3 3 9 9 8 36 38 35 82 81 62 118 116 76 | ||
2342 | 142 137 94 151 147 98 151 147 98 151 147 98 149 143 98 149 143 98 | ||
2343 | 149 143 98 151 147 98 160 154 106 176 171 126 188 184 146 210 208 158 | ||
2344 | 239 239 170 251 251 187 239 239 170 210 208 158 156 151 111 31 33 31 | ||
2345 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2346 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2347 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2348 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2349 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2350 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2351 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2352 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2353 | 0 0 0 | ||
2354 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 5 | ||
2355 | 66 65 55 125 122 87 158 153 112 181 176 137 194 189 146 197 193 154 | ||
2356 | 197 193 154 184 179 149 177 172 135 168 163 120 156 151 111 151 147 98 | ||
2357 | 151 147 98 151 147 98 151 147 98 161 156 96 149 143 98 118 116 76 | ||
2358 | 82 81 62 53 55 47 12 12 9 4 5 5 3 4 4 3 3 3 | ||
2359 | 3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 2 2 | ||
2360 | 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 | ||
2361 | 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 | ||
2362 | 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 3 3 | ||
2363 | 2 3 3 2 3 3 2 3 3 2 3 3 2 2 2 2 2 2 | ||
2364 | 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3 | ||
2365 | 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3 3 3 3 | ||
2366 | 3 3 3 3 3 3 72 73 67 61 61 53 53 55 47 96 95 69 | ||
2367 | 131 127 93 151 147 98 161 156 96 161 156 96 151 147 98 151 147 98 | ||
2368 | 161 156 96 160 154 106 164 159 111 177 172 135 197 193 154 210 208 158 | ||
2369 | 239 239 170 251 251 187 224 223 159 197 193 154 131 127 93 9 9 8 | ||
2370 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2371 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2372 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2373 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2374 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2375 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2376 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2377 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2378 | 0 0 0 | ||
2379 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2380 | 24 26 24 82 81 62 131 127 93 164 159 111 178 174 128 188 184 146 | ||
2381 | 188 184 146 188 184 146 181 176 137 176 171 126 168 163 120 164 159 111 | ||
2382 | 160 154 106 160 154 106 160 154 106 160 154 106 151 147 98 125 122 87 | ||
2383 | 82 81 62 61 61 53 12 12 9 3 3 3 3 3 3 2 2 2 | ||
2384 | 2 2 2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 | ||
2385 | 0 0 0 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2386 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2387 | 1 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 2 2 | ||
2388 | 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 | ||
2389 | 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 | ||
2390 | 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3 | ||
2391 | 2 3 3 30 32 31 72 73 67 31 33 31 36 38 35 82 81 62 | ||
2392 | 118 116 76 149 143 98 161 156 96 161 156 96 161 156 96 160 154 106 | ||
2393 | 165 161 109 165 161 109 176 171 126 188 184 146 204 201 155 214 212 158 | ||
2394 | 239 239 170 239 239 170 214 212 158 184 179 149 82 81 62 0 0 0 | ||
2395 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2396 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2397 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2398 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2399 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2400 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2401 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2402 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2403 | 0 0 0 | ||
2404 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2405 | 2 2 2 43 44 41 96 95 69 131 127 93 160 154 106 176 171 126 | ||
2406 | 184 181 136 184 181 136 184 181 136 181 176 137 178 174 128 174 170 121 | ||
2407 | 171 165 117 173 167 111 173 167 111 173 167 111 160 154 106 131 127 93 | ||
2408 | 96 95 69 66 65 55 16 17 12 2 2 2 1 1 1 1 1 1 | ||
2409 | 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2410 | 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2411 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2412 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2413 | 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 2 2 2 | ||
2414 | 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 | ||
2415 | 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 | ||
2416 | 2 2 2 2 2 2 2 2 2 10 9 6 30 31 28 71 71 57 | ||
2417 | 118 116 76 149 143 98 165 161 109 165 161 109 165 161 109 173 167 111 | ||
2418 | 173 167 111 176 171 126 184 181 136 197 193 154 210 208 158 224 223 159 | ||
2419 | 251 251 187 239 239 170 210 208 158 168 163 120 40 41 39 0 0 0 | ||
2420 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2421 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2422 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2423 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2424 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2425 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2426 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2427 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2428 | 0 0 0 | ||
2429 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2430 | 0 0 0 13 12 7 61 61 53 96 95 69 131 127 93 160 154 106 | ||
2431 | 176 171 126 184 181 136 184 181 136 188 184 146 184 181 136 184 181 136 | ||
2432 | 184 181 136 186 182 128 186 182 128 178 174 128 174 170 121 149 145 103 | ||
2433 | 118 116 76 82 81 62 21 22 20 1 1 1 1 1 1 0 0 0 | ||
2434 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2435 | 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 | ||
2436 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2437 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2438 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 | ||
2439 | 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 2 2 2 | ||
2440 | 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 | ||
2441 | 2 2 2 2 2 2 2 2 2 3 3 3 30 31 28 66 65 55 | ||
2442 | 118 116 76 149 143 98 165 161 109 173 167 111 173 167 111 174 170 121 | ||
2443 | 186 182 128 190 186 136 197 193 154 210 208 158 224 223 159 251 251 187 | ||
2444 | 251 251 187 239 239 170 197 193 154 137 133 100 12 12 9 0 0 0 | ||
2445 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2446 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2447 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2448 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2449 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2450 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2451 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2452 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2453 | 0 0 0 | ||
2454 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2455 | 0 0 0 0 0 0 30 31 28 71 71 57 103 101 77 134 131 96 | ||
2456 | 164 159 111 176 171 126 184 181 136 188 184 146 194 189 146 197 193 154 | ||
2457 | 197 193 154 197 193 154 194 191 148 194 189 146 190 186 136 176 171 126 | ||
2458 | 145 141 105 103 101 77 40 41 39 0 0 0 0 0 0 0 0 0 | ||
2459 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2460 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2461 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2462 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2463 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2464 | 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 | ||
2465 | 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 | ||
2466 | 1 2 2 1 2 2 1 2 2 1 2 2 30 31 28 71 71 57 | ||
2467 | 118 116 76 160 154 106 173 167 111 178 174 128 186 182 128 190 186 136 | ||
2468 | 194 191 148 204 201 155 210 208 158 224 223 159 251 251 187 251 251 187 | ||
2469 | 251 251 187 214 212 158 184 179 149 84 83 72 0 0 0 0 0 0 | ||
2470 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2471 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2472 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2473 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2474 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2475 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2476 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2477 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2478 | 0 0 0 | ||
2479 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2480 | 0 0 0 0 0 0 5 5 3 43 44 41 82 81 62 103 101 77 | ||
2481 | 142 137 94 165 161 109 178 174 128 190 186 136 197 193 154 204 201 155 | ||
2482 | 210 208 158 210 208 158 210 208 158 210 208 158 210 208 158 197 193 154 | ||
2483 | 177 172 135 145 141 105 79 78 62 5 4 3 0 0 0 0 0 0 | ||
2484 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2485 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2486 | 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2487 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2488 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2489 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2490 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2491 | 1 1 1 1 1 1 1 2 2 1 2 2 30 31 28 82 81 62 | ||
2492 | 142 137 94 165 161 109 178 174 128 190 186 136 194 191 148 204 201 155 | ||
2493 | 210 208 158 214 212 158 239 239 170 251 251 187 251 251 187 251 251 187 | ||
2494 | 251 251 187 210 208 158 168 163 120 36 38 35 0 0 0 0 0 0 | ||
2495 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2496 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2497 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2498 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2499 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2500 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2501 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2502 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2503 | 0 0 0 | ||
2504 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2505 | 0 0 0 0 0 0 0 0 0 16 17 12 53 55 47 82 81 62 | ||
2506 | 118 116 76 151 147 98 171 165 117 184 181 136 194 191 148 210 208 158 | ||
2507 | 214 212 158 224 223 159 239 239 170 239 239 170 224 223 159 214 212 158 | ||
2508 | 197 193 154 176 171 126 115 113 82 24 26 24 0 0 0 0 0 0 | ||
2509 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2510 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2511 | 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 | ||
2512 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2513 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2514 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2515 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2516 | 1 1 1 1 1 1 1 1 1 1 1 1 40 41 39 103 101 77 | ||
2517 | 151 147 98 176 171 126 190 186 136 197 193 154 210 208 158 214 212 158 | ||
2518 | 239 239 170 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | ||
2519 | 239 239 170 197 193 154 110 109 94 3 4 3 0 0 0 0 0 0 | ||
2520 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2521 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2522 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2523 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2524 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2525 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2526 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2527 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2528 | 0 0 0 | ||
2529 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2530 | 0 0 0 0 0 0 0 0 0 0 0 0 30 31 28 66 65 55 | ||
2531 | 96 95 69 125 122 87 160 154 106 178 174 128 194 189 146 204 201 155 | ||
2532 | 214 212 158 239 239 170 251 251 187 251 251 187 251 251 187 239 239 170 | ||
2533 | 210 208 158 188 184 146 149 145 103 61 61 53 0 0 0 0 0 0 | ||
2534 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2535 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2536 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2537 | 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2538 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2539 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2540 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2541 | 1 1 1 1 1 1 1 1 1 1 1 1 61 61 53 131 127 93 | ||
2542 | 164 159 111 184 181 136 197 193 154 210 208 158 224 223 159 251 251 187 | ||
2543 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 | ||
2544 | 210 208 158 168 163 120 43 44 41 0 0 0 0 0 0 0 0 0 | ||
2545 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2546 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2547 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2548 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2549 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2550 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2551 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2552 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2553 | 0 0 0 | ||
2554 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2555 | 0 0 0 0 0 0 0 0 0 0 0 0 4 3 2 36 38 35 | ||
2556 | 71 71 57 96 95 69 142 137 94 165 161 109 184 181 136 197 193 154 | ||
2557 | 210 208 158 239 239 170 251 251 187 251 251 187 251 251 187 251 251 187 | ||
2558 | 214 212 158 197 193 154 168 163 120 103 101 77 7 7 5 0 0 0 | ||
2559 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2560 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2561 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2562 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 | ||
2563 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2564 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2565 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2566 | 1 1 1 0 0 0 0 0 0 0 0 0 82 81 62 142 137 94 | ||
2567 | 174 170 121 194 189 146 210 208 158 224 223 159 251 251 187 251 251 187 | ||
2568 | 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 224 223 159 | ||
2569 | 184 179 149 99 98 80 3 3 3 0 0 0 0 0 0 0 0 0 | ||
2570 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2571 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2572 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2573 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2574 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2575 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2576 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2577 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2578 | 0 0 0 | ||
2579 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2580 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 5 | ||
2581 | 43 44 41 82 81 62 118 116 76 142 137 94 171 165 117 190 186 136 | ||
2582 | 204 201 155 224 223 159 251 251 187 251 251 187 251 251 187 251 251 187 | ||
2583 | 214 212 158 197 193 154 174 170 121 125 122 87 30 31 28 0 0 0 | ||
2584 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2585 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2586 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2587 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2588 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 | ||
2589 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ||
2590 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2591 | 0 0 0 0 0 0 0 0 0 3 4 3 82 81 62 149 143 98 | ||
2592 | 176 171 126 194 191 148 210 208 158 239 239 170 251 251 187 251 251 187 | ||
2593 | 251 251 187 251 251 187 251 251 187 251 251 187 239 239 170 204 201 155 | ||
2594 | 145 141 105 30 31 28 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2595 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2596 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2597 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2598 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2599 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2600 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2601 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2602 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2603 | 0 0 0 | ||
2604 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2605 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2606 | 10 9 6 46 47 43 82 81 62 118 116 76 149 143 98 174 170 121 | ||
2607 | 194 189 146 210 208 158 224 223 159 251 251 187 251 251 187 224 223 159 | ||
2608 | 210 208 158 194 191 148 174 170 121 134 131 96 53 55 47 0 0 0 | ||
2609 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2610 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2611 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2612 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2613 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2614 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2615 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2616 | 0 0 0 0 0 0 0 0 0 7 7 5 96 95 69 149 143 98 | ||
2617 | 176 171 126 194 191 148 210 208 158 239 239 170 251 251 187 251 251 187 | ||
2618 | 251 251 187 251 251 187 251 251 187 239 239 170 210 208 158 177 172 135 | ||
2619 | 75 75 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2620 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2621 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2622 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2623 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2624 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2625 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2626 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2627 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2628 | 0 0 0 | ||
2629 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2630 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2631 | 0 0 0 10 9 6 46 47 43 82 81 62 118 116 76 149 143 98 | ||
2632 | 176 171 126 194 191 148 210 208 158 214 212 158 214 212 158 210 208 158 | ||
2633 | 197 193 154 184 181 136 164 159 111 131 127 93 53 55 47 0 0 0 | ||
2634 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2635 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2636 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2637 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2638 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2639 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2640 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2641 | 0 0 0 0 0 0 0 0 0 7 7 5 96 95 69 149 143 98 | ||
2642 | 174 170 121 194 189 146 204 201 155 214 212 158 239 239 170 251 251 187 | ||
2643 | 251 251 187 251 251 187 239 239 170 210 208 158 184 179 149 110 109 94 | ||
2644 | 12 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2645 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2646 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2647 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2648 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2649 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2650 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2651 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2652 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2653 | 0 0 0 | ||
2654 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2655 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2656 | 0 0 0 0 0 0 10 9 6 43 44 41 82 81 62 115 113 82 | ||
2657 | 144 139 99 168 163 120 188 184 146 197 193 154 197 193 154 194 189 146 | ||
2658 | 184 181 136 174 170 121 151 147 98 118 116 76 36 38 35 0 0 0 | ||
2659 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2660 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2661 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2662 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2663 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2664 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2665 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2666 | 0 0 0 0 0 0 0 0 0 4 3 2 82 81 62 142 137 94 | ||
2667 | 171 165 117 186 182 128 194 191 148 210 208 158 214 212 158 224 223 159 | ||
2668 | 239 239 170 224 223 159 210 208 158 184 179 149 137 133 100 36 38 35 | ||
2669 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2670 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2671 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2672 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2673 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2674 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2675 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2676 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2677 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2678 | 0 0 0 | ||
2679 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2680 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2681 | 0 0 0 0 0 0 0 0 0 7 7 5 36 38 35 71 71 57 | ||
2682 | 103 101 77 131 127 93 155 149 109 168 163 120 168 163 120 168 163 120 | ||
2683 | 164 159 111 149 143 98 125 122 87 82 81 62 13 12 7 0 0 0 | ||
2684 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2685 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2686 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2687 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2688 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2689 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2690 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2691 | 0 0 0 0 0 0 0 0 0 0 0 0 61 61 53 125 122 87 | ||
2692 | 160 154 106 174 170 121 184 181 136 194 189 146 204 201 155 210 208 158 | ||
2693 | 210 208 158 204 201 155 184 179 149 145 141 105 61 61 53 0 0 0 | ||
2694 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2695 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2696 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2697 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2698 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2699 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2700 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2701 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2702 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2703 | 0 0 0 | ||
2704 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2705 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2706 | 0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 30 31 28 | ||
2707 | 61 61 53 82 81 62 103 101 77 121 119 87 125 122 87 125 122 87 | ||
2708 | 118 116 76 103 101 77 79 78 62 24 26 24 0 0 0 0 0 0 | ||
2709 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2710 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2711 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2712 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2713 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2714 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2715 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2716 | 0 0 0 0 0 0 0 0 0 0 0 0 25 27 25 96 95 69 | ||
2717 | 142 137 94 160 154 106 171 165 117 178 174 128 184 181 136 184 181 136 | ||
2718 | 181 176 137 177 172 135 145 141 105 75 75 61 5 5 3 0 0 0 | ||
2719 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2720 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2721 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2722 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2723 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2724 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2725 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2726 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2727 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2728 | 0 0 0 | ||
2729 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2730 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2731 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2732 | 16 17 12 40 41 39 61 61 53 71 71 57 71 71 57 71 71 57 | ||
2733 | 66 65 55 43 44 41 12 12 9 0 0 0 0 0 0 0 0 0 | ||
2734 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2735 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2736 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2737 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2738 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2739 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2740 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2741 | 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 46 47 43 | ||
2742 | 96 95 69 125 122 87 142 137 94 149 145 103 155 149 109 155 149 109 | ||
2743 | 145 141 105 121 119 87 66 65 55 7 7 5 0 0 0 0 0 0 | ||
2744 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2745 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2746 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2747 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2748 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2749 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2750 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2751 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2752 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2753 | 0 0 0 | ||
2754 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2755 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2756 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2757 | 0 0 0 1 1 1 16 17 12 24 26 24 25 27 25 19 20 18 | ||
2758 | 7 7 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2759 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2760 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2761 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2762 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2763 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2764 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2765 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2766 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 1 | ||
2767 | 25 27 25 61 61 53 82 81 62 96 95 69 96 95 69 82 81 62 | ||
2768 | 61 61 53 25 27 25 2 2 1 0 0 0 0 0 0 0 0 0 | ||
2769 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2770 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2771 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2772 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2773 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2774 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2775 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2776 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2777 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2778 | 0 0 0 | ||
2779 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2780 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2781 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2782 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2783 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2784 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2785 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2786 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2787 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2788 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2789 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2790 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2791 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2792 | 0 0 0 0 0 0 5 6 5 13 12 7 10 9 6 3 4 3 | ||
2793 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2794 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2795 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2796 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2797 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2798 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2799 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2800 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2801 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2802 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2803 | 0 0 0 | ||
2804 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2805 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2806 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2807 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2808 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2809 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2810 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2811 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2812 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2813 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2814 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2815 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2816 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2817 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2818 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2819 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2820 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2821 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2822 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2823 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2824 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2825 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2826 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2827 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2828 | 0 0 0 | ||
diff --git a/drivers/video/logo/logo_linux_vga16.ppm b/drivers/video/logo/logo_linux_vga16.ppm index 12ac3a5454c..1850c15e6fe 100644 --- a/drivers/video/logo/logo_linux_vga16.ppm +++ b/drivers/video/logo/logo_linux_vga16.ppm | |||
@@ -1,2739 +1,1604 @@ | |||
1 | P3 | 1 | P3 |
2 | 142 114 | 2 | # Standard 16-color Linux logo |
3 | 80 80 | ||
3 | 255 | 4 | 255 |
4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 5 | 0 0 0 0 0 0 0 0 0 0 0 0 |
5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 6 | 0 0 0 0 0 0 0 0 0 0 0 0 |
6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 7 | 0 0 0 0 0 0 0 0 0 0 0 0 |
7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 8 | 0 0 0 0 0 0 0 0 0 0 0 0 |
8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 9 | 0 0 0 0 0 0 0 0 0 0 0 0 |
9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 10 | 0 0 0 0 0 0 0 0 0 0 0 0 |
10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 11 | 0 0 0 0 0 0 0 0 0 0 0 0 |
11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 12 | 0 0 0 0 0 0 0 0 0 0 0 0 |
12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 13 | 0 0 0 0 0 0 0 0 0 0 0 0 |
13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 14 | 0 0 0 0 0 0 0 0 0 0 0 0 |
14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 15 | 0 0 0 0 0 0 0 0 0 0 0 0 |
15 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 16 | 0 0 0 0 0 0 0 0 0 0 0 0 |
16 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 17 | 0 0 0 0 0 0 0 0 0 0 0 0 |
17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 18 | 0 0 0 0 0 0 0 0 0 0 0 0 |
18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 19 | 0 0 0 0 0 0 0 0 0 0 0 0 |
19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 20 | 0 0 0 0 0 0 0 0 0 0 0 0 |
20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 21 | 0 0 0 0 0 0 0 0 0 0 0 0 |
21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 22 | 0 0 0 0 0 0 0 0 0 0 0 0 |
22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 23 | 0 0 0 0 0 0 0 0 0 0 0 0 |
23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 24 | 0 0 0 0 0 0 0 0 0 0 0 0 |
24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 25 | 0 0 0 0 0 0 0 0 0 0 0 0 |
25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 26 | 0 0 0 0 0 0 0 0 0 0 0 0 |
26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 27 | 0 0 0 0 0 0 0 0 0 0 0 0 |
27 | 0 0 0 0 0 0 0 0 0 0 0 0 | 28 | 0 0 0 0 0 0 0 0 0 0 0 0 |
28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 29 | 0 0 0 0 0 0 0 0 0 0 0 0 |
29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 30 | 0 0 0 0 0 0 0 0 0 0 0 0 |
30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 31 | 0 0 0 0 0 0 0 0 0 0 0 0 |
31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 32 | 0 0 0 0 0 0 0 0 0 0 0 0 |
32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 33 | 0 0 0 0 0 0 0 0 0 0 0 0 |
33 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 34 | 0 0 0 0 0 0 0 0 0 0 0 0 |
34 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 35 | 0 0 0 0 0 0 0 0 0 0 0 0 |
35 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 36 | 0 0 0 0 0 0 0 0 0 0 0 0 |
36 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 37 | 0 0 0 0 0 0 0 0 0 0 0 0 |
37 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 38 | 0 0 0 0 0 0 0 0 0 0 0 0 |
38 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 39 | 0 0 0 0 0 0 0 0 0 0 0 0 |
39 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 40 | 0 0 0 0 0 0 0 0 0 0 0 0 |
40 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 41 | 0 0 0 0 0 0 0 0 0 0 0 0 |
41 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 42 | 0 0 0 0 0 0 0 0 0 0 0 0 |
42 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 43 | 0 0 0 0 0 0 0 0 0 0 0 0 |
43 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 44 | 0 0 0 0 0 0 0 0 0 0 0 0 |
44 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 45 | 0 0 0 0 0 0 0 0 0 0 0 0 |
45 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 46 | 0 0 0 0 0 0 0 0 0 0 0 0 |
46 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 47 | 0 0 0 0 0 0 0 0 0 0 0 0 |
47 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 48 | 0 0 0 0 0 0 0 0 0 0 0 0 |
48 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 49 | 0 0 0 0 0 0 0 0 0 0 0 0 |
49 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 50 | 0 0 0 0 0 0 0 0 0 0 0 0 |
50 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 51 | 0 0 0 0 0 0 0 0 0 0 0 0 |
51 | 0 0 0 0 0 0 0 0 0 0 0 0 | 52 | 0 0 0 0 0 0 0 0 0 0 0 0 |
52 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 53 | 0 0 0 0 0 0 0 0 0 0 0 0 |
53 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 54 | 85 85 85 85 85 85 85 85 85 85 85 85 |
54 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 55 | 85 85 85 85 85 85 85 85 85 0 0 0 |
55 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 56 | 0 0 0 0 0 0 0 0 0 0 0 0 |
56 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 57 | 0 0 0 0 0 0 0 0 0 0 0 0 |
57 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 58 | 0 0 0 0 0 0 0 0 0 0 0 0 |
58 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 59 | 0 0 0 0 0 0 0 0 0 0 0 0 |
59 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 60 | 0 0 0 0 0 0 0 0 0 0 0 0 |
60 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 61 | 0 0 0 0 0 0 0 0 0 0 0 0 |
61 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 62 | 0 0 0 0 0 0 0 0 0 0 0 0 |
62 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 63 | 0 0 0 0 0 0 0 0 0 0 0 0 |
63 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 64 | 0 0 0 0 0 0 0 0 0 0 0 0 |
64 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 65 | 0 0 0 0 0 0 0 0 0 0 0 0 |
65 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 66 | 0 0 0 0 0 0 0 0 0 0 0 0 |
66 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 67 | 0 0 0 0 0 0 0 0 0 0 0 0 |
67 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 68 | 0 0 0 0 0 0 0 0 0 0 0 0 |
68 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 69 | 0 0 0 0 0 0 0 0 0 0 0 0 |
69 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 70 | 0 0 0 0 0 0 0 0 0 0 0 0 |
70 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 71 | 0 0 0 0 0 0 0 0 0 0 0 0 |
71 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 72 | 0 0 0 0 0 0 0 0 0 0 0 0 |
72 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 73 | 0 0 0 0 0 0 85 85 85 85 85 85 |
73 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 74 | 85 85 85 0 0 0 0 0 0 0 0 0 |
74 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 75 | 0 0 0 0 0 0 0 0 0 85 85 85 |
75 | 0 0 0 0 0 0 0 0 0 0 0 0 | 76 | 85 85 85 85 85 85 0 0 0 0 0 0 |
76 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 77 | 0 0 0 0 0 0 0 0 0 0 0 0 |
77 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 78 | 0 0 0 0 0 0 0 0 0 0 0 0 |
78 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 79 | 0 0 0 0 0 0 0 0 0 0 0 0 |
79 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 80 | 0 0 0 0 0 0 0 0 0 0 0 0 |
80 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 81 | 0 0 0 0 0 0 0 0 0 0 0 0 |
81 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 82 | 0 0 0 0 0 0 0 0 0 0 0 0 |
82 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 83 | 0 0 0 0 0 0 0 0 0 0 0 0 |
83 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 84 | 0 0 0 0 0 0 0 0 0 0 0 0 |
84 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 85 | 0 0 0 0 0 0 0 0 0 0 0 0 |
85 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 86 | 0 0 0 0 0 0 0 0 0 0 0 0 |
86 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 87 | 0 0 0 0 0 0 0 0 0 0 0 0 |
87 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 88 | 0 0 0 0 0 0 0 0 0 0 0 0 |
88 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 89 | 0 0 0 0 0 0 0 0 0 0 0 0 |
89 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 90 | 0 0 0 0 0 0 0 0 0 0 0 0 |
90 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 91 | 0 0 0 0 0 0 0 0 0 0 0 0 |
91 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 92 | 0 0 0 0 0 0 0 0 0 0 0 0 |
92 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 93 | 0 0 0 85 85 85 0 0 0 0 0 0 |
93 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 94 | 0 0 0 0 0 0 0 0 0 0 0 0 |
94 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 95 | 0 0 0 0 0 0 0 0 0 0 0 0 |
95 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 96 | 0 0 0 0 0 0 85 85 85 85 85 85 |
96 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 97 | 0 0 0 0 0 0 0 0 0 0 0 0 |
97 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 98 | 0 0 0 0 0 0 0 0 0 0 0 0 |
98 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 99 | 0 0 0 0 0 0 0 0 0 0 0 0 |
99 | 0 0 0 0 0 0 0 0 0 0 0 0 | 100 | 0 0 0 0 0 0 0 0 0 0 0 0 |
100 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 101 | 0 0 0 0 0 0 0 0 0 0 0 0 |
101 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 102 | 0 0 0 0 0 0 0 0 0 0 0 0 |
102 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 103 | 0 0 0 0 0 0 0 0 0 0 0 0 |
103 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 104 | 0 0 0 0 0 0 0 0 0 0 0 0 |
104 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 105 | 0 0 0 0 0 0 0 0 0 0 0 0 |
105 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 106 | 0 0 0 0 0 0 0 0 0 0 0 0 |
106 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 107 | 0 0 0 0 0 0 0 0 0 0 0 0 |
107 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | 108 | 0 0 0 0 0 0 0 0 0 0 0 0 |
108 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | 109 | 0 0 0 0 0 0 0 0 0 0 0 0 |
109 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 110 | 0 0 0 0 0 0 0 0 0 0 0 0 |
110 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 111 | 0 0 0 0 0 0 0 0 0 0 0 0 |
111 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 112 | 0 0 0 0 0 0 0 0 0 0 0 0 |
112 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 113 | 85 85 85 0 0 0 0 0 0 0 0 0 |
113 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 114 | 0 0 0 0 0 0 0 0 0 0 0 0 |
114 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 115 | 0 0 0 0 0 0 0 0 0 0 0 0 |
115 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 116 | 0 0 0 0 0 0 0 0 0 85 85 85 |
116 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 117 | 85 85 85 0 0 0 0 0 0 0 0 0 |
117 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 118 | 0 0 0 0 0 0 0 0 0 0 0 0 |
118 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 119 | 0 0 0 0 0 0 0 0 0 0 0 0 |
119 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 120 | 0 0 0 0 0 0 0 0 0 0 0 0 |
120 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 121 | 0 0 0 0 0 0 0 0 0 0 0 0 |
121 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 122 | 0 0 0 0 0 0 0 0 0 0 0 0 |
122 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 123 | 0 0 0 0 0 0 0 0 0 0 0 0 |
123 | 0 0 0 0 0 0 0 0 0 0 0 0 | 124 | 0 0 0 0 0 0 0 0 0 0 0 0 |
124 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 125 | 0 0 0 0 0 0 0 0 0 0 0 0 |
125 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 126 | 0 0 0 0 0 0 0 0 0 0 0 0 |
126 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 127 | 0 0 0 0 0 0 0 0 0 0 0 0 |
127 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 128 | 0 0 0 0 0 0 0 0 0 0 0 0 |
128 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 129 | 0 0 0 0 0 0 0 0 0 0 0 0 |
129 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 130 | 0 0 0 0 0 0 0 0 0 0 0 0 |
130 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 131 | 0 0 0 0 0 0 0 0 0 0 0 0 |
131 | 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 | 132 | 0 0 0 0 0 0 0 0 0 85 85 85 |
132 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 133 | 0 0 0 0 0 0 0 0 0 0 0 0 |
133 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 134 | 0 0 0 0 0 0 0 0 0 0 0 0 |
134 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 135 | 0 0 0 0 0 0 0 0 0 0 0 0 |
135 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 136 | 0 0 0 0 0 0 0 0 0 0 0 0 |
136 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 137 | 85 85 85 85 85 85 0 0 0 0 0 0 |
137 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 138 | 0 0 0 0 0 0 0 0 0 0 0 0 |
138 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 139 | 0 0 0 0 0 0 0 0 0 0 0 0 |
139 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 140 | 0 0 0 0 0 0 0 0 0 0 0 0 |
140 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 141 | 0 0 0 0 0 0 0 0 0 0 0 0 |
141 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 142 | 0 0 0 0 0 0 0 0 0 0 0 0 |
142 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 143 | 0 0 0 0 0 0 0 0 0 0 0 0 |
143 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 144 | 0 0 0 0 0 0 0 0 0 0 0 0 |
144 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 145 | 0 0 0 0 0 0 0 0 0 0 0 0 |
145 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 146 | 0 0 0 0 0 0 0 0 0 0 0 0 |
146 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 147 | 0 0 0 0 0 0 0 0 0 0 0 0 |
147 | 0 0 0 0 0 0 0 0 0 0 0 0 | 148 | 0 0 0 0 0 0 0 0 0 0 0 0 |
148 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 149 | 0 0 0 0 0 0 0 0 0 0 0 0 |
149 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 150 | 0 0 0 0 0 0 0 0 0 0 0 0 |
150 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 151 | 0 0 0 0 0 0 0 0 0 0 0 0 |
151 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 152 | 0 0 0 0 0 0 0 0 0 85 85 85 |
152 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 153 | 0 0 0 0 0 0 0 0 0 0 0 0 |
153 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 154 | 0 0 0 0 0 0 0 0 0 0 0 0 |
154 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | 155 | 0 0 0 0 0 0 0 0 0 0 0 0 |
155 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | 156 | 85 85 85 170 170 170 0 0 0 0 0 0 |
156 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | 157 | 0 0 0 85 85 85 0 0 0 0 0 0 |
157 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 158 | 0 0 0 0 0 0 0 0 0 0 0 0 |
158 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 159 | 0 0 0 0 0 0 0 0 0 0 0 0 |
159 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 160 | 0 0 0 0 0 0 0 0 0 0 0 0 |
160 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 161 | 0 0 0 0 0 0 0 0 0 0 0 0 |
161 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 162 | 0 0 0 0 0 0 0 0 0 0 0 0 |
162 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 163 | 0 0 0 0 0 0 0 0 0 0 0 0 |
163 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 164 | 0 0 0 0 0 0 0 0 0 0 0 0 |
164 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 165 | 0 0 0 0 0 0 0 0 0 0 0 0 |
165 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 166 | 0 0 0 0 0 0 0 0 0 0 0 0 |
166 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 167 | 0 0 0 0 0 0 0 0 0 0 0 0 |
167 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 168 | 0 0 0 0 0 0 0 0 0 0 0 0 |
168 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 169 | 0 0 0 0 0 0 0 0 0 0 0 0 |
169 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 170 | 0 0 0 0 0 0 0 0 0 0 0 0 |
170 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 171 | 0 0 0 0 0 0 0 0 0 0 0 0 |
171 | 0 0 0 0 0 0 0 0 0 0 0 0 | 172 | 0 0 0 0 0 0 85 85 85 0 0 0 |
172 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 173 | 0 0 0 0 0 0 0 0 0 0 0 0 |
173 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 174 | 0 0 0 0 0 0 0 0 0 0 0 0 |
174 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 175 | 0 0 0 0 0 0 0 0 0 0 0 0 |
175 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 176 | 170 170 170 170 170 170 85 85 85 0 0 0 |
176 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 177 | 0 0 0 0 0 0 85 85 85 0 0 0 |
177 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 178 | 0 0 0 0 0 0 0 0 0 0 0 0 |
178 | 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 | 179 | 0 0 0 0 0 0 0 0 0 0 0 0 |
179 | 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 | 180 | 0 0 0 0 0 0 0 0 0 0 0 0 |
180 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 181 | 0 0 0 0 0 0 0 0 0 0 0 0 |
181 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 182 | 0 0 0 0 0 0 0 0 0 0 0 0 |
182 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 183 | 0 0 0 0 0 0 0 0 0 0 0 0 |
183 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 184 | 0 0 0 0 0 0 0 0 0 0 0 0 |
184 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 185 | 0 0 0 0 0 0 0 0 0 0 0 0 |
185 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 186 | 0 0 0 0 0 0 0 0 0 0 0 0 |
186 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 187 | 0 0 0 0 0 0 0 0 0 0 0 0 |
187 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 188 | 0 0 0 0 0 0 0 0 0 0 0 0 |
188 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 189 | 0 0 0 0 0 0 0 0 0 0 0 0 |
189 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 190 | 0 0 0 0 0 0 0 0 0 0 0 0 |
190 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 191 | 0 0 0 0 0 0 0 0 0 0 0 0 |
191 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 192 | 0 0 0 0 0 0 85 85 85 0 0 0 |
192 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 193 | 0 0 0 0 0 0 0 0 0 0 0 0 |
193 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 194 | 0 0 0 0 0 0 0 0 0 0 0 0 |
194 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 195 | 0 0 0 0 0 0 0 0 0 0 0 0 |
195 | 0 0 0 0 0 0 0 0 0 0 0 0 | 196 | 0 0 0 85 85 85 0 0 0 0 0 0 |
196 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 197 | 0 0 0 0 0 0 0 0 0 85 85 85 |
197 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 198 | 0 0 0 0 0 0 0 0 0 0 0 0 |
198 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 199 | 0 0 0 0 0 0 0 0 0 0 0 0 |
199 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 200 | 0 0 0 0 0 0 0 0 0 0 0 0 |
200 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 201 | 0 0 0 0 0 0 0 0 0 0 0 0 |
201 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | 202 | 0 0 0 0 0 0 0 0 0 0 0 0 |
202 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | 203 | 0 0 0 0 0 0 0 0 0 0 0 0 |
203 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | 204 | 0 0 0 0 0 0 0 0 0 0 0 0 |
204 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 205 | 0 0 0 0 0 0 0 0 0 0 0 0 |
205 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 206 | 0 0 0 0 0 0 0 0 0 0 0 0 |
206 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 207 | 0 0 0 0 0 0 0 0 0 0 0 0 |
207 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 208 | 0 0 0 0 0 0 0 0 0 0 0 0 |
208 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 209 | 0 0 0 0 0 0 0 0 0 0 0 0 |
209 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 210 | 0 0 0 0 0 0 0 0 0 0 0 0 |
210 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 211 | 0 0 0 0 0 0 0 0 0 0 0 0 |
211 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 212 | 0 0 0 0 0 0 85 85 85 0 0 0 |
212 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 213 | 0 0 0 0 0 0 0 0 0 0 0 0 |
213 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 214 | 0 0 0 0 0 0 0 0 0 0 0 0 |
214 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 215 | 0 0 0 0 0 0 0 0 0 0 0 0 |
215 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 216 | 0 0 0 0 0 0 0 0 0 0 0 0 |
216 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 217 | 0 0 0 0 0 0 0 0 0 85 85 85 |
217 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 218 | 0 0 0 0 0 0 0 0 0 0 0 0 |
218 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 219 | 0 0 0 0 0 0 0 0 0 0 0 0 |
219 | 0 0 0 0 0 0 0 0 0 0 0 0 | 220 | 0 0 0 0 0 0 0 0 0 0 0 0 |
220 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 221 | 0 0 0 0 0 0 0 0 0 0 0 0 |
221 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 222 | 0 0 0 0 0 0 0 0 0 0 0 0 |
222 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 223 | 0 0 0 0 0 0 0 0 0 0 0 0 |
223 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 224 | 0 0 0 0 0 0 0 0 0 0 0 0 |
224 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 225 | 0 0 0 0 0 0 0 0 0 0 0 0 |
225 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 | 226 | 0 0 0 0 0 0 0 0 0 0 0 0 |
226 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 | 227 | 0 0 0 0 0 0 0 0 0 0 0 0 |
227 | 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 | 228 | 0 0 0 0 0 0 0 0 0 0 0 0 |
228 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 229 | 0 0 0 0 0 0 0 0 0 0 0 0 |
229 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 230 | 0 0 0 0 0 0 0 0 0 0 0 0 |
230 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 231 | 0 0 0 0 0 0 0 0 0 0 0 0 |
231 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 232 | 0 0 0 85 85 85 0 0 0 0 0 0 |
232 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 233 | 0 0 0 0 0 0 0 0 0 0 0 0 |
233 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | 234 | 0 0 0 0 0 0 0 0 0 0 0 0 |
234 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 235 | 0 0 0 0 0 0 0 0 0 0 0 0 |
235 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 236 | 0 0 0 0 0 0 0 0 0 0 0 0 |
236 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 237 | 0 0 0 0 0 0 0 0 0 85 85 85 |
237 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 238 | 0 0 0 0 0 0 0 0 0 0 0 0 |
238 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 239 | 0 0 0 0 0 0 0 0 0 0 0 0 |
239 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 240 | 0 0 0 0 0 0 0 0 0 0 0 0 |
240 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 241 | 0 0 0 0 0 0 0 0 0 0 0 0 |
241 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 242 | 0 0 0 0 0 0 0 0 0 0 0 0 |
242 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 243 | 0 0 0 0 0 0 0 0 0 0 0 0 |
243 | 0 0 0 0 0 0 0 0 0 0 0 0 | 244 | 0 0 0 0 0 0 0 0 0 0 0 0 |
244 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 245 | 0 0 0 0 0 0 0 0 0 0 0 0 |
245 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 246 | 0 0 0 0 0 0 0 0 0 0 0 0 |
246 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 247 | 0 0 0 0 0 0 0 0 0 0 0 0 |
247 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 248 | 0 0 0 0 0 0 0 0 0 0 0 0 |
248 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 249 | 0 0 0 0 0 0 0 0 0 0 0 0 |
249 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | 250 | 0 0 0 0 0 0 0 0 0 0 0 0 |
250 | 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 | 251 | 0 0 0 0 0 0 0 0 0 0 0 0 |
251 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 252 | 0 0 0 85 85 85 0 0 0 0 0 0 |
252 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 253 | 0 0 0 0 0 0 0 0 0 0 0 0 |
253 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 254 | 0 0 0 0 0 0 0 0 0 0 0 0 |
254 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 255 | 0 0 0 0 0 0 0 0 0 0 0 0 |
255 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 256 | 0 0 0 0 0 0 0 0 0 0 0 0 |
256 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 257 | 0 0 0 0 0 0 0 0 0 0 0 0 |
257 | 0 0 0 85 85 85 170 170 170 170 85 0 170 170 170 85 85 85 | 258 | 85 85 85 0 0 0 0 0 0 0 0 0 |
258 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 259 | 0 0 0 0 0 0 0 0 0 0 0 0 |
259 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 260 | 0 0 0 0 0 0 0 0 0 0 0 0 |
260 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 261 | 0 0 0 0 0 0 0 0 0 0 0 0 |
261 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 262 | 0 0 0 0 0 0 0 0 0 0 0 0 |
262 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 263 | 0 0 0 0 0 0 0 0 0 0 0 0 |
263 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 264 | 0 0 0 0 0 0 0 0 0 0 0 0 |
264 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 265 | 0 0 0 0 0 0 0 0 0 0 0 0 |
265 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 266 | 0 0 0 0 0 0 0 0 0 0 0 0 |
266 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 267 | 0 0 0 0 0 0 0 0 0 0 0 0 |
267 | 0 0 0 0 0 0 0 0 0 0 0 0 | 268 | 0 0 0 0 0 0 0 0 0 0 0 0 |
268 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 269 | 0 0 0 0 0 0 0 0 0 0 0 0 |
269 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 270 | 0 0 0 0 0 0 0 0 0 0 0 0 |
270 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 271 | 0 0 0 0 0 0 0 0 0 0 0 0 |
271 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 272 | 0 0 0 85 85 85 0 0 0 0 0 0 |
272 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 273 | 0 0 0 0 0 0 0 0 0 0 0 0 |
273 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 274 | 0 0 0 0 0 0 0 0 0 0 0 0 |
274 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 | 275 | 0 0 0 0 0 0 0 0 0 0 0 0 |
275 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 276 | 0 0 0 0 0 0 0 0 0 0 0 0 |
276 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 277 | 0 0 0 0 0 0 0 0 0 0 0 0 |
277 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 278 | 85 85 85 0 0 0 0 0 0 0 0 0 |
278 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 279 | 0 0 0 0 0 0 0 0 0 0 0 0 |
279 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 280 | 0 0 0 0 0 0 0 0 0 0 0 0 |
280 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 281 | 0 0 0 0 0 0 0 0 0 0 0 0 |
281 | 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 85 85 85 | 282 | 0 0 0 0 0 0 0 0 0 0 0 0 |
282 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 283 | 0 0 0 0 0 0 0 0 0 0 0 0 |
283 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 284 | 0 0 0 0 0 0 0 0 0 0 0 0 |
284 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 285 | 0 0 0 0 0 0 0 0 0 0 0 0 |
285 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 286 | 0 0 0 0 0 0 0 0 0 0 0 0 |
286 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 287 | 0 0 0 0 0 0 0 0 0 0 0 0 |
287 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 288 | 0 0 0 0 0 0 0 0 0 0 0 0 |
288 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 289 | 0 0 0 0 0 0 0 0 0 0 0 0 |
289 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 290 | 0 0 0 0 0 0 0 0 0 0 0 0 |
290 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 291 | 0 0 0 0 0 0 0 0 0 0 0 0 |
291 | 0 0 0 0 0 0 0 0 0 0 0 0 | 292 | 0 0 0 85 85 85 0 0 0 0 0 0 |
292 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 293 | 0 0 0 85 85 85 170 170 170 0 0 0 |
293 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 294 | 0 0 0 0 0 0 0 0 0 0 0 0 |
294 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 295 | 0 0 0 0 0 0 170 170 170 170 170 170 |
295 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 296 | 170 170 170 0 0 0 0 0 0 0 0 0 |
296 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 297 | 0 0 0 0 0 0 0 0 0 0 0 0 |
297 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | 298 | 85 85 85 0 0 0 0 0 0 0 0 0 |
298 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 299 | 0 0 0 0 0 0 0 0 0 0 0 0 |
299 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 300 | 0 0 0 0 0 0 0 0 0 0 0 0 |
300 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 301 | 0 0 0 0 0 0 0 0 0 0 0 0 |
301 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 302 | 0 0 0 0 0 0 0 0 0 0 0 0 |
302 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 303 | 0 0 0 0 0 0 0 0 0 0 0 0 |
303 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 304 | 0 0 0 0 0 0 0 0 0 0 0 0 |
304 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 | 305 | 0 0 0 0 0 0 0 0 0 0 0 0 |
305 | 255 255 85 170 170 170 170 170 170 170 85 0 85 255 85 170 85 0 | 306 | 0 0 0 0 0 0 0 0 0 0 0 0 |
306 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 307 | 0 0 0 0 0 0 0 0 0 0 0 0 |
307 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 308 | 0 0 0 0 0 0 0 0 0 0 0 0 |
308 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 309 | 0 0 0 0 0 0 0 0 0 0 0 0 |
309 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 310 | 0 0 0 0 0 0 0 0 0 0 0 0 |
310 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 311 | 0 0 0 0 0 0 0 0 0 0 0 0 |
311 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 312 | 0 0 0 85 85 85 0 0 0 0 0 0 |
312 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 313 | 85 85 85 170 170 170 170 170 170 170 170 170 |
313 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 314 | 0 0 0 0 0 0 0 0 0 0 0 0 |
314 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 315 | 0 0 0 170 170 170 255 255 255 255 255 255 |
315 | 0 0 0 0 0 0 0 0 0 0 0 0 | 316 | 255 255 255 170 170 170 0 0 0 0 0 0 |
316 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 317 | 0 0 0 0 0 0 0 0 0 0 0 0 |
317 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 318 | 85 85 85 0 0 0 0 0 0 0 0 0 |
318 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 319 | 0 0 0 0 0 0 0 0 0 0 0 0 |
319 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 320 | 0 0 0 0 0 0 0 0 0 0 0 0 |
320 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 321 | 0 0 0 0 0 0 0 0 0 0 0 0 |
321 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 322 | 0 0 0 0 0 0 0 0 0 0 0 0 |
322 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 | 323 | 0 0 0 0 0 0 0 0 0 0 0 0 |
323 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 324 | 0 0 0 0 0 0 0 0 0 0 0 0 |
324 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 | 325 | 0 0 0 0 0 0 0 0 0 0 0 0 |
325 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | 326 | 0 0 0 0 0 0 0 0 0 0 0 0 |
326 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 327 | 0 0 0 0 0 0 0 0 0 0 0 0 |
327 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 328 | 0 0 0 0 0 0 0 0 0 0 0 0 |
328 | 85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 170 85 0 | 329 | 0 0 0 0 0 0 0 0 0 0 0 0 |
329 | 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 85 85 85 | 330 | 0 0 0 0 0 0 0 0 0 0 0 0 |
330 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 331 | 0 0 0 0 0 0 0 0 0 0 0 0 |
331 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 332 | 0 0 0 85 85 85 0 0 0 85 85 85 |
332 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 333 | 170 170 170 170 170 170 255 255 255 255 255 255 |
333 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 334 | 0 0 0 0 0 0 0 0 0 0 0 0 |
334 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 335 | 170 170 170 255 255 255 170 170 170 170 170 170 |
335 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 336 | 255 255 255 170 170 170 0 0 0 0 0 0 |
336 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 337 | 0 0 0 0 0 0 0 0 0 0 0 0 |
337 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 338 | 85 85 85 0 0 0 0 0 0 0 0 0 |
338 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 339 | 0 0 0 0 0 0 0 0 0 0 0 0 |
339 | 0 0 0 0 0 0 0 0 0 0 0 0 | 340 | 0 0 0 0 0 0 0 0 0 0 0 0 |
340 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 341 | 0 0 0 0 0 0 0 0 0 0 0 0 |
341 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 342 | 0 0 0 0 0 0 0 0 0 0 0 0 |
342 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 343 | 0 0 0 0 0 0 0 0 0 0 0 0 |
343 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 344 | 0 0 0 0 0 0 0 0 0 0 0 0 |
344 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 345 | 0 0 0 0 0 0 0 0 0 0 0 0 |
345 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | 346 | 0 0 0 0 0 0 0 0 0 0 0 0 |
346 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 347 | 0 0 0 0 0 0 0 0 0 0 0 0 |
347 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 348 | 0 0 0 0 0 0 0 0 0 0 0 0 |
348 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 349 | 0 0 0 0 0 0 0 0 0 0 0 0 |
349 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | 350 | 0 0 0 0 0 0 0 0 0 0 0 0 |
350 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 351 | 0 0 0 0 0 0 0 0 0 0 0 0 |
351 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 352 | 0 0 0 85 85 85 0 0 0 85 85 85 |
352 | 0 0 0 0 0 0 85 85 85 85 85 85 170 85 0 170 170 170 | 353 | 170 170 170 0 0 0 0 0 0 255 255 255 |
353 | 170 170 170 170 85 0 170 170 170 170 170 170 170 85 0 85 85 85 | 354 | 85 85 85 0 0 0 0 0 0 0 0 0 |
354 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 355 | 255 255 255 170 170 170 0 0 0 85 85 85 |
355 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 356 | 170 170 170 255 255 255 170 170 170 0 0 0 |
356 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 357 | 0 0 0 0 0 0 0 0 0 0 0 0 |
357 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 358 | 85 85 85 0 0 0 0 0 0 0 0 0 |
358 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 359 | 0 0 0 0 0 0 0 0 0 0 0 0 |
359 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 360 | 0 0 0 0 0 0 0 0 0 0 0 0 |
360 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 361 | 0 0 0 0 0 0 0 0 0 0 0 0 |
361 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 362 | 0 0 0 0 0 0 0 0 0 0 0 0 |
362 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 363 | 0 0 0 0 0 0 0 0 0 0 0 0 |
363 | 0 0 0 0 0 0 0 0 0 0 0 0 | 364 | 0 0 0 0 0 0 0 0 0 0 0 0 |
364 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 365 | 0 0 0 0 0 0 0 0 0 0 0 0 |
365 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 366 | 0 0 0 0 0 0 0 0 0 0 0 0 |
366 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 367 | 0 0 0 0 0 0 0 0 0 0 0 0 |
367 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 368 | 0 0 0 0 0 0 0 0 0 0 0 0 |
368 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 369 | 0 0 0 0 0 0 0 0 0 0 0 0 |
369 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 370 | 0 0 0 0 0 0 0 0 0 0 0 0 |
370 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | 371 | 0 0 0 0 0 0 0 0 0 0 0 0 |
371 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 372 | 0 0 0 85 85 85 0 0 0 85 85 85 |
372 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 | 373 | 85 85 85 0 0 0 0 0 0 170 170 170 |
373 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | 374 | 85 85 85 0 0 0 0 0 0 0 0 0 |
374 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 375 | 255 255 255 85 85 85 0 0 0 0 0 0 |
375 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 376 | 85 85 85 255 255 255 170 170 170 0 0 0 |
376 | 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 255 85 | 377 | 0 0 0 0 0 0 0 0 0 0 0 0 |
377 | 255 85 85 85 255 85 170 170 170 170 85 0 170 170 170 85 85 85 | 378 | 85 85 85 0 0 0 0 0 0 0 0 0 |
378 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 379 | 0 0 0 0 0 0 0 0 0 0 0 0 |
379 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 380 | 0 0 0 0 0 0 0 0 0 0 0 0 |
380 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 381 | 0 0 0 0 0 0 0 0 0 0 0 0 |
381 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 382 | 0 0 0 0 0 0 0 0 0 0 0 0 |
382 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 383 | 0 0 0 0 0 0 0 0 0 0 0 0 |
383 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 384 | 0 0 0 0 0 0 0 0 0 0 0 0 |
384 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 385 | 0 0 0 0 0 0 0 0 0 0 0 0 |
385 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 386 | 0 0 0 0 0 0 0 0 0 0 0 0 |
386 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 387 | 0 0 0 0 0 0 0 0 0 0 0 0 |
387 | 0 0 0 0 0 0 0 0 0 0 0 0 | 388 | 0 0 0 0 0 0 0 0 0 0 0 0 |
388 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 389 | 0 0 0 0 0 0 0 0 0 0 0 0 |
389 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 390 | 0 0 0 0 0 0 0 0 0 0 0 0 |
390 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 391 | 0 0 0 0 0 0 0 0 0 0 0 0 |
391 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 392 | 0 0 0 85 85 85 0 0 0 85 85 85 |
392 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 393 | 170 170 170 0 0 0 0 0 0 170 170 170 |
393 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | 394 | 85 85 85 85 85 85 85 85 85 85 85 85 |
394 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 395 | 255 255 255 85 85 85 0 0 0 0 0 0 |
395 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 396 | 85 85 85 255 255 255 170 170 170 0 0 0 |
396 | 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | 397 | 0 0 0 0 0 0 0 0 0 0 0 0 |
397 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | 398 | 85 85 85 0 0 0 0 0 0 0 0 0 |
398 | 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 | 399 | 0 0 0 0 0 0 0 0 0 0 0 0 |
399 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 400 | 0 0 0 0 0 0 0 0 0 0 0 0 |
400 | 0 0 0 0 0 0 85 85 85 170 85 0 85 85 85 85 85 85 | 401 | 0 0 0 0 0 0 0 0 0 0 0 0 |
401 | 170 170 170 170 85 0 170 170 170 85 85 85 170 85 0 85 85 85 | 402 | 0 0 0 0 0 0 0 0 0 0 0 0 |
402 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 403 | 0 0 0 0 0 0 0 0 0 0 0 0 |
403 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 404 | 0 0 0 0 0 0 0 0 0 0 0 0 |
404 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 405 | 0 0 0 0 0 0 0 0 0 0 0 0 |
405 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 406 | 0 0 0 0 0 0 0 0 0 0 0 0 |
406 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 407 | 0 0 0 0 0 0 0 0 0 0 0 0 |
407 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 408 | 0 0 0 0 0 0 0 0 0 0 0 0 |
408 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 409 | 0 0 0 0 0 0 0 0 0 0 0 0 |
409 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 410 | 0 0 0 0 0 0 0 0 0 0 0 0 |
410 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 411 | 0 0 0 0 0 0 0 0 0 0 0 0 |
411 | 0 0 0 0 0 0 0 0 0 0 0 0 | 412 | 0 0 0 85 85 85 0 0 0 0 0 0 |
412 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 413 | 255 255 255 0 0 0 0 0 0 170 85 0 |
413 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 414 | 255 255 85 170 85 0 255 255 85 170 85 0 |
414 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 415 | 255 255 85 170 85 0 0 0 0 0 0 0 |
415 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 416 | 85 85 85 255 255 255 0 0 0 0 0 0 |
416 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 417 | 0 0 0 0 0 0 0 0 0 0 0 0 |
417 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 418 | 85 85 85 0 0 0 0 0 0 0 0 0 |
418 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 419 | 0 0 0 0 0 0 0 0 0 0 0 0 |
419 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 420 | 0 0 0 0 0 0 0 0 0 0 0 0 |
420 | 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 | 421 | 0 0 0 0 0 0 0 0 0 0 0 0 |
421 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 422 | 0 0 0 0 0 0 0 0 0 0 0 0 |
422 | 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 | 423 | 0 0 0 0 0 0 0 0 0 0 0 0 |
423 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 424 | 0 0 0 0 0 0 0 0 0 0 0 0 |
424 | 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 170 85 0 | 425 | 0 0 0 0 0 0 0 0 0 0 0 0 |
425 | 85 85 85 85 85 85 170 85 0 85 255 85 85 85 85 85 85 85 | 426 | 0 0 0 0 0 0 0 0 0 0 0 0 |
426 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 427 | 0 0 0 0 0 0 0 0 0 0 0 0 |
427 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 428 | 0 0 0 0 0 0 0 0 0 0 0 0 |
428 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 429 | 0 0 0 0 0 0 0 0 0 0 0 0 |
429 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 430 | 0 0 0 0 0 0 0 0 0 0 0 0 |
430 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 431 | 0 0 0 0 0 0 0 0 0 0 0 0 |
431 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 432 | 0 0 0 85 85 85 0 0 0 0 0 0 |
432 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 433 | 170 170 170 170 170 170 170 85 0 255 255 85 |
433 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 434 | 170 85 0 255 255 85 170 85 0 255 255 85 |
434 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 435 | 170 85 0 255 255 85 170 85 0 255 255 85 |
435 | 0 0 0 0 0 0 0 0 0 0 0 0 | 436 | 170 170 170 170 170 170 0 0 0 0 0 0 |
436 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 437 | 0 0 0 0 0 0 0 0 0 0 0 0 |
437 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 438 | 85 85 85 0 0 0 0 0 0 0 0 0 |
438 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 439 | 0 0 0 0 0 0 0 0 0 0 0 0 |
439 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 440 | 0 0 0 0 0 0 0 0 0 0 0 0 |
440 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 441 | 0 0 0 0 0 0 0 0 0 0 0 0 |
441 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 442 | 0 0 0 0 0 0 0 0 0 0 0 0 |
442 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 443 | 0 0 0 0 0 0 0 0 0 0 0 0 |
443 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | 444 | 0 0 0 0 0 0 0 0 0 0 0 0 |
444 | 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 | 445 | 0 0 0 0 0 0 0 0 0 0 0 0 |
445 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 446 | 0 0 0 0 0 0 0 0 0 0 0 0 |
446 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 447 | 0 0 0 0 0 0 0 0 0 0 0 0 |
447 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 448 | 0 0 0 0 0 0 0 0 0 0 0 0 |
448 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 449 | 0 0 0 0 0 0 0 0 0 0 0 0 |
449 | 85 85 85 85 85 85 85 85 85 85 85 85 170 85 0 0 0 0 | 450 | 0 0 0 0 0 0 0 0 0 0 0 0 |
450 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 451 | 0 0 0 0 0 0 0 0 0 0 0 0 |
451 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 452 | 0 0 0 85 85 85 0 0 0 0 0 0 |
452 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 453 | 0 0 0 170 85 0 255 255 85 170 85 0 |
453 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 454 | 255 255 85 170 85 0 255 255 85 170 85 0 |
454 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 455 | 255 255 85 170 85 0 255 255 85 170 85 0 |
455 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 456 | 255 255 85 170 85 0 0 0 0 0 0 0 |
456 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 457 | 0 0 0 0 0 0 0 0 0 0 0 0 |
457 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 458 | 85 85 85 0 0 0 0 0 0 0 0 0 |
458 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 459 | 0 0 0 0 0 0 0 0 0 0 0 0 |
459 | 0 0 0 0 0 0 0 0 0 0 0 0 | 460 | 0 0 0 0 0 0 0 0 0 0 0 0 |
460 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 461 | 0 0 0 0 0 0 0 0 0 0 0 0 |
461 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 462 | 0 0 0 0 0 0 0 0 0 0 0 0 |
462 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 463 | 0 0 0 0 0 0 0 0 0 0 0 0 |
463 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 464 | 0 0 0 0 0 0 0 0 0 0 0 0 |
464 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 465 | 0 0 0 0 0 0 0 0 0 0 0 0 |
465 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 466 | 0 0 0 0 0 0 0 0 0 0 0 0 |
466 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | 467 | 0 0 0 0 0 0 0 0 0 0 0 0 |
467 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 468 | 0 0 0 0 0 0 0 0 0 0 0 0 |
468 | 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | 469 | 0 0 0 0 0 0 0 0 0 0 0 0 |
469 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 470 | 0 0 0 0 0 0 0 0 0 0 0 0 |
470 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 471 | 0 0 0 0 0 0 0 0 0 0 0 0 |
471 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 472 | 0 0 0 85 85 85 0 0 0 0 0 0 |
472 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | 473 | 170 85 0 255 255 85 170 85 0 255 255 85 |
473 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 | 474 | 170 85 0 255 255 85 170 85 0 255 255 85 |
474 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 475 | 170 85 0 255 255 85 170 85 0 255 255 85 |
475 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 476 | 170 85 0 255 255 85 170 85 0 0 0 0 |
476 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 477 | 0 0 0 0 0 0 0 0 0 0 0 0 |
477 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 478 | 0 0 0 85 85 85 0 0 0 0 0 0 |
478 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 479 | 0 0 0 0 0 0 0 0 0 0 0 0 |
479 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 480 | 0 0 0 0 0 0 0 0 0 0 0 0 |
480 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 481 | 0 0 0 0 0 0 0 0 0 0 0 0 |
481 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 482 | 0 0 0 0 0 0 0 0 0 0 0 0 |
482 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 483 | 0 0 0 0 0 0 0 0 0 0 0 0 |
483 | 0 0 0 0 0 0 0 0 0 0 0 0 | 484 | 0 0 0 0 0 0 0 0 0 0 0 0 |
484 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 485 | 0 0 0 0 0 0 0 0 0 0 0 0 |
485 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 486 | 0 0 0 0 0 0 0 0 0 0 0 0 |
486 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 487 | 0 0 0 0 0 0 0 0 0 0 0 0 |
487 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 488 | 0 0 0 0 0 0 0 0 0 0 0 0 |
488 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 489 | 0 0 0 0 0 0 0 0 0 0 0 0 |
489 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 490 | 0 0 0 0 0 0 0 0 0 0 0 0 |
490 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 491 | 0 0 0 0 0 0 0 0 0 0 0 0 |
491 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | 492 | 0 0 0 85 85 85 85 85 85 0 0 0 |
492 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 493 | 255 255 85 170 85 0 255 255 85 170 85 0 |
493 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 494 | 255 255 85 170 85 0 255 255 85 170 85 0 |
494 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 495 | 255 255 85 170 85 0 255 255 85 170 85 0 |
495 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 496 | 255 255 85 170 85 0 170 85 0 0 0 0 |
496 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 497 | 0 0 0 0 0 0 0 0 0 0 0 0 |
497 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 498 | 0 0 0 85 85 85 0 0 0 0 0 0 |
498 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 499 | 0 0 0 0 0 0 0 0 0 0 0 0 |
499 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 500 | 0 0 0 0 0 0 0 0 0 0 0 0 |
500 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 501 | 0 0 0 0 0 0 0 0 0 0 0 0 |
501 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 502 | 0 0 0 0 0 0 0 0 0 0 0 0 |
502 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 503 | 0 0 0 0 0 0 0 0 0 0 0 0 |
503 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 504 | 0 0 0 0 0 0 0 0 0 0 0 0 |
504 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 505 | 0 0 0 0 0 0 0 0 0 0 0 0 |
505 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 506 | 0 0 0 0 0 0 0 0 0 0 0 0 |
506 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 507 | 0 0 0 0 0 0 0 0 0 0 0 0 |
507 | 0 0 0 0 0 0 0 0 0 0 0 0 | 508 | 0 0 0 0 0 0 0 0 0 0 0 0 |
508 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 509 | 0 0 0 0 0 0 0 0 0 0 0 0 |
509 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 510 | 0 0 0 0 0 0 0 0 0 0 0 0 |
510 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 511 | 0 0 0 0 0 0 0 0 0 0 0 0 |
511 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 512 | 0 0 0 85 85 85 85 85 85 0 0 0 |
512 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 513 | 170 85 0 255 255 85 170 85 0 255 255 85 |
513 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 514 | 170 85 0 255 255 85 170 85 0 255 255 85 |
514 | 0 0 0 85 85 85 0 0 0 0 170 0 85 85 85 0 0 0 | 515 | 170 85 0 255 255 85 170 85 0 170 85 0 |
515 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 516 | 170 85 0 170 85 0 85 85 85 0 0 0 |
516 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 517 | 0 0 0 85 85 85 0 0 0 0 0 0 |
517 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 518 | 0 0 0 0 0 0 85 85 85 0 0 0 |
518 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 519 | 0 0 0 0 0 0 0 0 0 0 0 0 |
519 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 520 | 0 0 0 0 0 0 0 0 0 0 0 0 |
520 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 521 | 0 0 0 0 0 0 0 0 0 0 0 0 |
521 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 522 | 0 0 0 0 0 0 0 0 0 0 0 0 |
522 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 523 | 0 0 0 0 0 0 0 0 0 0 0 0 |
523 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 524 | 0 0 0 0 0 0 0 0 0 0 0 0 |
524 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 525 | 0 0 0 0 0 0 0 0 0 0 0 0 |
525 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 526 | 0 0 0 0 0 0 0 0 0 0 0 0 |
526 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 527 | 0 0 0 0 0 0 0 0 0 0 0 0 |
527 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 528 | 0 0 0 0 0 0 0 0 0 0 0 0 |
528 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 529 | 0 0 0 0 0 0 0 0 0 0 0 0 |
529 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 530 | 0 0 0 0 0 0 0 0 0 0 0 0 |
530 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 531 | 0 0 0 0 0 0 0 0 0 0 0 0 |
531 | 0 0 0 0 0 0 0 0 0 0 0 0 | 532 | 0 0 0 85 85 85 85 85 85 0 0 0 |
532 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 533 | 85 85 85 170 85 0 255 255 85 170 85 0 |
533 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 534 | 255 255 85 170 85 0 255 255 85 170 85 0 |
534 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 535 | 170 85 0 170 85 0 170 85 0 170 85 0 |
535 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 536 | 170 85 0 170 85 0 85 85 85 0 0 0 |
536 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 537 | 0 0 0 85 85 85 170 170 170 85 85 85 |
537 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 538 | 0 0 0 0 0 0 85 85 85 0 0 0 |
538 | 170 85 0 85 255 85 170 85 0 170 85 0 170 85 0 85 255 85 | 539 | 0 0 0 0 0 0 0 0 0 0 0 0 |
539 | 170 85 0 170 85 0 0 170 0 0 0 0 0 0 0 0 0 0 | 540 | 0 0 0 0 0 0 0 0 0 0 0 0 |
540 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 541 | 0 0 0 0 0 0 0 0 0 0 0 0 |
541 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 542 | 0 0 0 0 0 0 0 0 0 0 0 0 |
542 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 543 | 0 0 0 0 0 0 0 0 0 0 0 0 |
543 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 544 | 0 0 0 0 0 0 0 0 0 0 0 0 |
544 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 545 | 0 0 0 0 0 0 0 0 0 0 0 0 |
545 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 546 | 0 0 0 0 0 0 0 0 0 0 0 0 |
546 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 547 | 0 0 0 0 0 0 0 0 0 0 0 0 |
547 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 548 | 0 0 0 0 0 0 0 0 0 0 0 0 |
548 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 549 | 0 0 0 0 0 0 0 0 0 0 0 0 |
549 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 550 | 0 0 0 0 0 0 0 0 0 0 0 0 |
550 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 551 | 0 0 0 0 0 0 0 0 0 0 0 0 |
551 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 552 | 0 0 0 85 85 85 85 85 85 0 0 0 |
552 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 553 | 85 85 85 170 85 0 170 85 0 170 85 0 |
553 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 554 | 170 85 0 170 85 0 170 85 0 170 85 0 |
554 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 555 | 170 85 0 170 85 0 170 85 0 170 85 0 |
555 | 0 0 0 0 0 0 0 0 0 0 0 0 | 556 | 170 170 170 170 170 170 170 170 170 0 0 0 |
556 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 557 | 0 0 0 0 0 0 170 170 170 170 170 170 |
557 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 558 | 0 0 0 0 0 0 0 0 0 85 85 85 |
558 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 559 | 0 0 0 0 0 0 0 0 0 0 0 0 |
559 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 560 | 0 0 0 0 0 0 0 0 0 0 0 0 |
560 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 561 | 0 0 0 0 0 0 0 0 0 0 0 0 |
561 | 0 0 0 0 0 0 0 0 0 0 0 0 0 170 0 170 85 0 | 562 | 0 0 0 0 0 0 0 0 0 0 0 0 |
562 | 255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 170 85 0 | 563 | 0 0 0 0 0 0 0 0 0 0 0 0 |
563 | 255 255 85 85 255 85 170 85 0 170 85 0 85 85 85 0 0 0 | 564 | 0 0 0 0 0 0 0 0 0 0 0 0 |
564 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 565 | 0 0 0 0 0 0 0 0 0 0 0 0 |
565 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 566 | 0 0 0 0 0 0 0 0 0 0 0 0 |
566 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 567 | 0 0 0 0 0 0 0 0 0 0 0 0 |
567 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 568 | 0 0 0 0 0 0 0 0 0 0 0 0 |
568 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 569 | 0 0 0 0 0 0 0 0 0 0 0 0 |
569 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 570 | 0 0 0 0 0 0 0 0 0 0 0 0 |
570 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 571 | 0 0 0 0 0 0 0 0 0 0 0 0 |
571 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 572 | 0 0 0 85 85 85 0 0 0 0 0 0 |
572 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 573 | 85 85 85 170 170 170 170 85 0 170 85 0 |
573 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 574 | 170 85 0 170 85 0 170 85 0 170 85 0 |
574 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 575 | 170 85 0 170 85 0 170 170 170 170 170 170 |
575 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 576 | 170 170 170 170 170 170 170 170 170 85 85 85 |
576 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 577 | 0 0 0 0 0 0 85 85 85 85 85 85 |
577 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 578 | 0 0 0 0 0 0 0 0 0 85 85 85 |
578 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 579 | 0 0 0 0 0 0 0 0 0 0 0 0 |
579 | 0 0 0 0 0 0 0 0 0 0 0 0 | 580 | 0 0 0 0 0 0 0 0 0 0 0 0 |
580 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 581 | 0 0 0 0 0 0 0 0 0 0 0 0 |
581 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 582 | 0 0 0 0 0 0 0 0 0 0 0 0 |
582 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 583 | 0 0 0 0 0 0 0 0 0 0 0 0 |
583 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 584 | 0 0 0 0 0 0 0 0 0 0 0 0 |
584 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 585 | 0 0 0 0 0 0 0 0 0 0 0 0 |
585 | 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 255 255 85 | 586 | 0 0 0 0 0 0 0 0 0 0 0 0 |
586 | 85 255 85 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 | 587 | 0 0 0 0 0 0 0 0 0 0 0 0 |
587 | 255 255 85 170 85 0 255 255 85 85 255 85 170 85 0 0 0 0 | 588 | 0 0 0 0 0 0 0 0 0 0 0 0 |
588 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 589 | 0 0 0 0 0 0 0 0 0 0 0 0 |
589 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 590 | 0 0 0 0 0 0 0 0 0 0 0 0 |
590 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 591 | 0 0 0 0 0 0 0 0 0 0 0 0 |
591 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 592 | 0 0 0 85 85 85 0 0 0 0 0 0 |
592 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 593 | 85 85 85 170 170 170 170 170 170 170 85 0 |
593 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 594 | 170 85 0 170 85 0 170 85 0 170 85 0 |
594 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 595 | 170 170 170 170 170 170 170 170 170 170 170 170 |
595 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 596 | 255 255 255 255 255 255 255 255 255 170 170 170 |
596 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 597 | 0 0 0 0 0 0 0 0 0 0 0 0 |
597 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 598 | 0 0 0 0 0 0 0 0 0 85 85 85 |
598 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 599 | 0 0 0 0 0 0 0 0 0 0 0 0 |
599 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 600 | 0 0 0 0 0 0 0 0 0 0 0 0 |
600 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 601 | 0 0 0 0 0 0 0 0 0 0 0 0 |
601 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 602 | 0 0 0 0 0 0 0 0 0 0 0 0 |
602 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 603 | 0 0 0 0 0 0 0 0 0 0 0 0 |
603 | 0 0 0 0 0 0 0 0 0 0 0 0 | 604 | 0 0 0 0 0 0 0 0 0 0 0 0 |
604 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 605 | 0 0 0 0 0 0 0 0 0 0 0 0 |
605 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 606 | 0 0 0 0 0 0 0 0 0 0 0 0 |
606 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 607 | 0 0 0 0 0 0 0 0 0 0 0 0 |
607 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 608 | 0 0 0 0 0 0 0 0 0 0 0 0 |
608 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 609 | 0 0 0 0 0 0 0 0 0 0 0 0 |
609 | 0 0 0 0 0 0 0 0 0 85 85 85 255 255 85 170 85 0 | 610 | 0 0 0 0 0 0 0 0 0 0 0 0 |
610 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 | 611 | 0 0 0 0 0 0 0 0 0 0 0 0 |
611 | 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 85 255 85 | 612 | 85 85 85 0 0 0 0 0 0 85 85 85 |
612 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 613 | 255 255 255 255 255 255 170 170 170 170 170 170 |
613 | 0 0 0 85 85 85 0 0 0 85 85 85 170 170 170 0 0 0 | 614 | 170 170 170 170 170 170 170 170 170 170 170 170 |
614 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 615 | 170 170 170 170 170 170 255 255 255 255 255 255 |
615 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 616 | 255 255 255 255 255 255 255 255 255 255 255 255 |
616 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 617 | 85 85 85 0 0 0 0 0 0 0 0 0 |
617 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 618 | 0 0 0 0 0 0 0 0 0 0 0 0 |
618 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 619 | 85 85 85 0 0 0 0 0 0 0 0 0 |
619 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 620 | 0 0 0 0 0 0 0 0 0 0 0 0 |
620 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 621 | 0 0 0 0 0 0 0 0 0 0 0 0 |
621 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 622 | 0 0 0 0 0 0 0 0 0 0 0 0 |
622 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 623 | 0 0 0 0 0 0 0 0 0 0 0 0 |
623 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 624 | 0 0 0 0 0 0 0 0 0 0 0 0 |
624 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 625 | 0 0 0 0 0 0 0 0 0 0 0 0 |
625 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 626 | 0 0 0 0 0 0 0 0 0 0 0 0 |
626 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 627 | 0 0 0 0 0 0 0 0 0 0 0 0 |
627 | 0 0 0 0 0 0 0 0 0 0 0 0 | 628 | 0 0 0 0 0 0 0 0 0 0 0 0 |
628 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 629 | 0 0 0 0 0 0 0 0 0 0 0 0 |
629 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 630 | 0 0 0 0 0 0 0 0 0 0 0 0 |
630 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 631 | 0 0 0 0 0 0 0 0 0 0 0 0 |
631 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 632 | 85 85 85 0 0 0 0 0 0 170 170 170 |
632 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 633 | 255 255 255 255 255 255 170 170 170 170 170 170 |
633 | 0 0 0 0 0 0 0 0 0 170 85 0 255 255 85 255 255 85 | 634 | 170 170 170 170 170 170 170 170 170 170 170 170 |
634 | 255 255 85 255 255 85 170 85 0 255 255 85 85 255 85 255 255 85 | 635 | 170 170 170 255 255 255 255 255 255 255 255 255 |
635 | 255 255 85 170 85 0 255 255 85 170 85 0 255 255 85 170 85 0 | 636 | 255 255 255 255 255 255 255 255 255 255 255 255 |
636 | 170 85 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 637 | 170 170 170 0 0 0 0 0 0 0 0 0 |
637 | 85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 | 638 | 0 0 0 0 0 0 0 0 0 0 0 0 |
638 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 639 | 85 85 85 0 0 0 0 0 0 0 0 0 |
639 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 640 | 0 0 0 0 0 0 0 0 0 0 0 0 |
640 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | 641 | 0 0 0 0 0 0 0 0 0 0 0 0 |
641 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 642 | 0 0 0 0 0 0 0 0 0 0 0 0 |
642 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 643 | 0 0 0 0 0 0 0 0 0 0 0 0 |
643 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 644 | 0 0 0 0 0 0 0 0 0 0 0 0 |
644 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 645 | 0 0 0 0 0 0 0 0 0 0 0 0 |
645 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 646 | 0 0 0 0 0 0 0 0 0 0 0 0 |
646 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 647 | 0 0 0 0 0 0 0 0 0 0 0 0 |
647 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 648 | 0 0 0 0 0 0 0 0 0 0 0 0 |
648 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 649 | 0 0 0 0 0 0 0 0 0 0 0 0 |
649 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 650 | 0 0 0 0 0 0 0 0 0 0 0 0 |
650 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 651 | 0 0 0 0 0 0 0 0 0 85 85 85 |
651 | 0 0 0 0 0 0 0 0 0 0 0 0 | 652 | 0 0 0 0 0 0 85 85 85 255 255 255 |
652 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 653 | 255 255 255 255 255 255 255 255 255 170 170 170 |
653 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 654 | 170 170 170 170 170 170 170 170 170 170 170 170 |
654 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 655 | 255 255 255 255 255 255 255 255 255 255 255 255 |
655 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 656 | 255 255 255 255 255 255 255 255 255 255 255 255 |
656 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 657 | 255 255 255 0 0 0 0 0 0 0 0 0 |
657 | 0 0 0 0 0 0 170 85 0 255 255 85 85 255 85 255 255 85 | 658 | 0 0 0 0 0 0 0 0 0 0 0 0 |
658 | 170 170 170 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 659 | 0 0 0 85 85 85 0 0 0 0 0 0 |
659 | 255 255 85 255 255 85 85 255 85 255 255 85 255 255 85 255 255 85 | 660 | 0 0 0 0 0 0 0 0 0 0 0 0 |
660 | 85 255 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 661 | 0 0 0 0 0 0 0 0 0 0 0 0 |
661 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 662 | 0 0 0 0 0 0 0 0 0 0 0 0 |
662 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 663 | 0 0 0 0 0 0 0 0 0 0 0 0 |
663 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 664 | 0 0 0 0 0 0 0 0 0 0 0 0 |
664 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 665 | 0 0 0 0 0 0 0 0 0 0 0 0 |
665 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 666 | 0 0 0 0 0 0 0 0 0 0 0 0 |
666 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 667 | 0 0 0 0 0 0 0 0 0 0 0 0 |
667 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 668 | 0 0 0 0 0 0 0 0 0 0 0 0 |
668 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 669 | 0 0 0 0 0 0 0 0 0 0 0 0 |
669 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 670 | 0 0 0 0 0 0 0 0 0 0 0 0 |
670 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 671 | 0 0 0 0 0 0 85 85 85 0 0 0 |
671 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 672 | 0 0 0 85 85 85 170 170 170 255 255 255 |
672 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 673 | 255 255 255 255 255 255 255 255 255 255 255 255 |
673 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 674 | 255 255 255 255 255 255 255 255 255 255 255 255 |
674 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 675 | 255 255 255 255 255 255 255 255 255 255 255 255 |
675 | 0 0 0 0 0 0 0 0 0 0 0 0 | 676 | 255 255 255 255 255 255 255 255 255 255 255 255 |
676 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 677 | 255 255 255 85 85 85 0 0 0 0 0 0 |
677 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 678 | 0 0 0 0 0 0 0 0 0 0 0 0 |
678 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 679 | 0 0 0 0 0 0 85 85 85 0 0 0 |
679 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 680 | 0 0 0 0 0 0 0 0 0 0 0 0 |
680 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 681 | 0 0 0 0 0 0 0 0 0 0 0 0 |
681 | 0 0 0 0 0 0 170 85 0 255 255 85 255 255 85 255 255 85 | 682 | 0 0 0 0 0 0 0 0 0 0 0 0 |
682 | 255 255 255 255 255 85 255 255 85 170 85 0 255 255 85 170 85 0 | 683 | 0 0 0 0 0 0 0 0 0 0 0 0 |
683 | 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 255 255 85 | 684 | 0 0 0 0 0 0 0 0 0 0 0 0 |
684 | 170 85 0 170 85 0 0 170 0 0 0 0 85 85 85 0 0 0 | 685 | 0 0 0 0 0 0 0 0 0 0 0 0 |
685 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 686 | 0 0 0 0 0 0 0 0 0 0 0 0 |
686 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 687 | 0 0 0 0 0 0 0 0 0 0 0 0 |
687 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 688 | 0 0 0 0 0 0 0 0 0 0 0 0 |
688 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 689 | 0 0 0 0 0 0 0 0 0 0 0 0 |
689 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 690 | 0 0 0 0 0 0 0 0 0 0 0 0 |
690 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 691 | 0 0 0 85 85 85 0 0 0 0 0 0 |
691 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 692 | 0 0 0 85 85 85 255 255 255 255 255 255 |
692 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 693 | 255 255 255 255 255 255 255 255 255 255 255 255 |
693 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 694 | 255 255 255 255 255 255 255 255 255 255 255 255 |
694 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 695 | 255 255 255 255 255 255 255 255 255 255 255 255 |
695 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 696 | 255 255 255 255 255 255 255 255 255 255 255 255 |
696 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 697 | 255 255 255 170 170 170 0 0 0 0 0 0 |
697 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 698 | 0 0 0 0 0 0 0 0 0 0 0 0 |
698 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 699 | 0 0 0 0 0 0 0 0 0 85 85 85 |
699 | 0 0 0 0 0 0 0 0 0 0 0 0 | 700 | 0 0 0 0 0 0 0 0 0 0 0 0 |
700 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 701 | 0 0 0 0 0 0 0 0 0 0 0 0 |
701 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 702 | 0 0 0 0 0 0 0 0 0 0 0 0 |
702 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 703 | 0 0 0 0 0 0 0 0 0 0 0 0 |
703 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 704 | 0 0 0 0 0 0 0 0 0 0 0 0 |
704 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 705 | 0 0 0 0 0 0 0 0 0 0 0 0 |
705 | 0 0 0 170 85 0 85 255 85 255 255 85 170 170 170 255 255 255 | 706 | 0 0 0 0 0 0 0 0 0 0 0 0 |
706 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 707 | 0 0 0 0 0 0 0 0 0 0 0 0 |
707 | 255 255 85 255 255 85 170 85 0 255 255 85 85 255 85 255 255 85 | 708 | 0 0 0 0 0 0 0 0 0 0 0 0 |
708 | 255 255 85 85 255 85 0 0 0 85 85 85 0 0 0 85 85 85 | 709 | 0 0 0 0 0 0 0 0 0 0 0 0 |
709 | 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 | 710 | 0 0 0 0 0 0 0 0 0 0 0 0 |
710 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 711 | 0 0 0 85 85 85 0 0 0 0 0 0 |
711 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 712 | 0 0 0 85 85 85 255 255 255 255 255 255 |
712 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 713 | 255 255 255 255 255 255 255 255 255 255 255 255 |
713 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 714 | 255 255 255 255 255 255 255 255 255 255 255 255 |
714 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 715 | 255 255 255 255 255 255 255 255 255 255 255 255 |
715 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 716 | 255 255 255 255 255 255 255 255 255 255 255 255 |
716 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 717 | 255 255 255 255 255 255 0 0 0 0 0 0 |
717 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 718 | 0 0 0 0 0 0 0 0 0 0 0 0 |
718 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 719 | 0 0 0 0 0 0 0 0 0 0 0 0 |
719 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 720 | 85 85 85 0 0 0 0 0 0 0 0 0 |
720 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 721 | 0 0 0 0 0 0 0 0 0 0 0 0 |
721 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 722 | 0 0 0 0 0 0 0 0 0 0 0 0 |
722 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 723 | 0 0 0 0 0 0 0 0 0 0 0 0 |
723 | 0 0 0 0 0 0 0 0 0 0 0 0 | 724 | 0 0 0 0 0 0 0 0 0 0 0 0 |
724 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 725 | 0 0 0 0 0 0 0 0 0 0 0 0 |
725 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 726 | 0 0 0 0 0 0 0 0 0 0 0 0 |
726 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 727 | 0 0 0 0 0 0 0 0 0 0 0 0 |
727 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 728 | 0 0 0 0 0 0 0 0 0 0 0 0 |
728 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 729 | 0 0 0 0 0 0 0 0 0 0 0 0 |
729 | 0 0 0 255 255 85 255 255 85 255 255 85 255 255 255 255 255 85 | 730 | 0 0 0 0 0 0 0 0 0 0 0 0 |
730 | 255 255 85 255 255 85 85 255 85 255 255 85 255 255 85 85 255 85 | 731 | 85 85 85 0 0 0 0 0 0 0 0 0 |
731 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 | 732 | 85 85 85 170 170 170 255 255 255 255 255 255 |
732 | 255 255 85 170 85 0 85 85 85 0 0 0 0 0 0 85 85 85 | 733 | 255 255 255 255 255 255 255 255 255 255 255 255 |
733 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | 734 | 255 255 255 255 255 255 255 255 255 255 255 255 |
734 | 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 | 735 | 255 255 255 255 255 255 255 255 255 255 255 255 |
735 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 736 | 255 255 255 255 255 255 255 255 255 255 255 255 |
736 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 737 | 255 255 255 255 255 255 85 85 85 0 0 0 |
737 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 738 | 0 0 0 0 0 0 0 0 0 0 0 0 |
738 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 739 | 0 0 0 0 0 0 0 0 0 0 0 0 |
739 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 740 | 0 0 0 85 85 85 0 0 0 0 0 0 |
740 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 741 | 0 0 0 0 0 0 0 0 0 0 0 0 |
741 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 742 | 0 0 0 0 0 0 0 0 0 0 0 0 |
742 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 743 | 0 0 0 0 0 0 0 0 0 0 0 0 |
743 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 744 | 0 0 0 0 0 0 0 0 0 0 0 0 |
744 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 745 | 0 0 0 0 0 0 0 0 0 0 0 0 |
745 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 746 | 0 0 0 0 0 0 0 0 0 0 0 0 |
746 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 747 | 0 0 0 0 0 0 0 0 0 0 0 0 |
747 | 0 0 0 0 0 0 0 0 0 0 0 0 | 748 | 0 0 0 0 0 0 0 0 0 0 0 0 |
748 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 749 | 0 0 0 0 0 0 0 0 0 0 0 0 |
749 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 750 | 0 0 0 0 0 0 0 0 0 85 85 85 |
750 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 751 | 0 0 0 0 0 0 0 0 0 0 0 0 |
751 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 752 | 85 85 85 170 170 170 170 170 170 170 170 170 |
752 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 753 | 255 255 255 255 255 255 255 255 255 170 170 170 |
753 | 170 85 0 170 85 0 255 255 85 255 255 85 255 255 255 170 170 170 | 754 | 170 170 170 170 170 170 255 255 255 255 255 255 |
754 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 755 | 255 255 255 255 255 255 255 255 255 255 255 255 |
755 | 170 85 0 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 | 756 | 170 170 170 170 170 170 170 170 170 170 170 170 |
756 | 255 255 85 85 255 85 170 85 0 85 85 85 0 0 0 0 0 0 | 757 | 170 170 170 170 170 170 170 170 170 85 85 85 |
757 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 | 758 | 0 0 0 0 0 0 0 0 0 0 0 0 |
758 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | 759 | 0 0 0 0 0 0 0 0 0 0 0 0 |
759 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 760 | 0 0 0 85 85 85 0 0 0 0 0 0 |
760 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 761 | 0 0 0 0 0 0 0 0 0 0 0 0 |
761 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | 762 | 0 0 0 0 0 0 0 0 0 0 0 0 |
762 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 763 | 0 0 0 0 0 0 0 0 0 0 0 0 |
763 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 764 | 0 0 0 0 0 0 0 0 0 0 0 0 |
764 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 765 | 0 0 0 0 0 0 0 0 0 0 0 0 |
765 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 766 | 0 0 0 0 0 0 0 0 0 0 0 0 |
766 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 767 | 0 0 0 0 0 0 0 0 0 0 0 0 |
767 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 768 | 0 0 0 0 0 0 0 0 0 0 0 0 |
768 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 769 | 0 0 0 0 0 0 0 0 0 0 0 0 |
769 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 770 | 0 0 0 0 0 0 0 0 0 85 85 85 |
770 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 771 | 0 0 0 0 0 0 0 0 0 0 0 0 |
771 | 0 0 0 0 0 0 0 0 0 0 0 0 | 772 | 170 170 170 170 170 170 170 170 170 255 255 255 |
772 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 773 | 255 255 255 255 255 255 255 255 255 255 255 255 |
773 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 774 | 170 170 170 255 255 255 255 255 255 255 255 255 |
774 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 775 | 255 255 255 255 255 255 255 255 255 255 255 255 |
775 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 776 | 255 255 255 255 255 255 170 170 170 170 170 170 |
776 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 777 | 170 170 170 170 170 170 170 170 170 85 85 85 |
777 | 255 255 85 85 255 85 255 255 85 170 170 170 255 255 255 255 255 85 | 778 | 0 0 0 0 0 0 85 85 85 0 0 0 |
778 | 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 | 779 | 0 0 0 0 0 0 0 0 0 0 0 0 |
779 | 255 255 85 255 255 85 255 255 85 255 255 85 85 255 85 170 85 0 | 780 | 0 0 0 0 0 0 85 85 85 0 0 0 |
780 | 255 255 85 170 85 0 170 85 0 0 0 0 85 85 85 0 0 0 | 781 | 0 0 0 0 0 0 0 0 0 0 0 0 |
781 | 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 | 782 | 0 0 0 0 0 0 0 0 0 0 0 0 |
782 | 85 255 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 | 783 | 0 0 0 0 0 0 0 0 0 0 0 0 |
783 | 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 | 784 | 0 0 0 0 0 0 0 0 0 0 0 0 |
784 | 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 | 785 | 0 0 0 0 0 0 0 0 0 0 0 0 |
785 | 170 170 170 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 | 786 | 0 0 0 0 0 0 0 0 0 0 0 0 |
786 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 787 | 0 0 0 0 0 0 0 0 0 0 0 0 |
787 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 788 | 0 0 0 0 0 0 0 0 0 0 0 0 |
788 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 789 | 0 0 0 0 0 0 0 0 0 0 0 0 |
789 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 790 | 0 0 0 0 0 0 85 85 85 0 0 0 |
790 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 791 | 0 0 0 0 0 0 0 0 0 0 0 0 |
791 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 792 | 170 170 170 255 255 255 255 255 255 255 255 255 |
792 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 793 | 255 255 255 255 255 255 255 255 255 255 255 255 |
793 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 794 | 255 255 255 255 255 255 255 255 255 255 255 255 |
794 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 795 | 255 255 255 255 255 255 255 255 255 255 255 255 |
795 | 0 0 0 0 0 0 0 0 0 0 0 0 | 796 | 255 255 255 255 255 255 255 255 255 255 255 255 |
796 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 797 | 255 255 255 170 170 170 170 170 170 170 170 170 |
797 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 798 | 0 0 0 0 0 0 0 0 0 85 85 85 |
798 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 799 | 85 85 85 0 0 0 0 0 0 0 0 0 |
799 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 800 | 0 0 0 0 0 0 85 85 85 0 0 0 |
800 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 0 | 801 | 0 0 0 0 0 0 0 0 0 0 0 0 |
801 | 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 802 | 0 0 0 0 0 0 0 0 0 0 0 0 |
802 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 803 | 0 0 0 0 0 0 0 0 0 0 0 0 |
803 | 255 255 85 255 255 85 85 255 85 255 255 85 170 85 0 170 85 0 | 804 | 0 0 0 0 0 0 0 0 0 0 0 0 |
804 | 170 85 0 85 255 85 255 255 85 85 85 85 170 170 170 170 170 170 | 805 | 0 0 0 0 0 0 0 0 0 0 0 0 |
805 | 170 170 170 170 170 170 170 170 170 85 255 85 170 170 170 170 170 170 | 806 | 0 0 0 0 0 0 0 0 0 0 0 0 |
806 | 85 85 85 170 170 170 170 170 170 170 85 0 170 170 170 170 170 170 | 807 | 0 0 0 0 0 0 0 0 0 0 0 0 |
807 | 85 255 85 170 170 170 170 85 0 170 170 170 85 255 85 255 85 85 | 808 | 0 0 0 0 0 0 0 0 0 0 0 0 |
808 | 85 255 85 170 170 170 255 255 85 85 85 85 255 255 85 170 170 170 | 809 | 0 0 0 0 0 0 0 0 0 0 0 0 |
809 | 85 255 85 170 170 170 255 255 85 170 170 170 170 170 170 85 85 85 | 810 | 0 0 0 0 0 0 85 85 85 0 0 0 |
810 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 811 | 85 85 85 0 0 0 0 0 0 85 85 85 |
811 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 812 | 255 255 255 255 255 255 255 255 255 255 255 255 |
812 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 813 | 255 255 255 255 255 255 255 255 255 255 255 255 |
813 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 814 | 255 255 255 255 255 255 255 255 255 255 255 255 |
814 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 815 | 255 255 255 255 255 255 255 255 255 255 255 255 |
815 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 816 | 255 255 255 255 255 255 255 255 255 255 255 255 |
816 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 817 | 255 255 255 255 255 255 170 170 170 170 170 170 |
817 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 818 | 85 85 85 0 0 0 0 0 0 0 0 0 |
818 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 819 | 0 0 0 85 85 85 0 0 0 0 0 0 |
819 | 0 0 0 0 0 0 0 0 0 0 0 0 | 820 | 0 0 0 0 0 0 0 0 0 85 85 85 |
820 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 821 | 0 0 0 0 0 0 0 0 0 0 0 0 |
821 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 822 | 0 0 0 0 0 0 0 0 0 0 0 0 |
822 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 823 | 0 0 0 0 0 0 0 0 0 0 0 0 |
823 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 824 | 0 0 0 0 0 0 0 0 0 0 0 0 |
824 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 85 | 825 | 0 0 0 0 0 0 0 0 0 0 0 0 |
825 | 255 255 85 255 255 85 255 255 85 255 255 255 255 255 85 255 255 85 | 826 | 0 0 0 0 0 0 0 0 0 0 0 0 |
826 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 | 827 | 0 0 0 0 0 0 0 0 0 0 0 0 |
827 | 255 255 85 255 255 85 255 255 85 170 85 0 0 170 0 85 85 85 | 828 | 0 0 0 0 0 0 0 0 0 0 0 0 |
828 | 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 85 255 85 | 829 | 0 0 0 0 0 0 0 0 0 0 0 0 |
829 | 255 85 85 85 255 85 85 85 85 255 85 85 85 85 85 170 170 170 | 830 | 0 0 0 85 85 85 0 0 0 0 0 0 |
830 | 170 85 0 170 170 170 85 85 85 85 255 85 85 85 85 85 85 85 | 831 | 85 85 85 0 0 0 0 0 0 170 170 170 |
831 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 832 | 255 255 255 255 255 255 255 255 255 255 255 255 |
832 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 833 | 255 255 255 255 255 255 255 255 255 255 255 255 |
833 | 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 834 | 255 255 255 255 255 255 255 255 255 255 255 255 |
834 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 835 | 255 255 255 255 255 255 255 255 255 255 255 255 |
835 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 836 | 255 255 255 255 255 255 255 255 255 255 255 255 |
836 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 837 | 255 255 255 255 255 255 255 255 255 255 255 255 |
837 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 838 | 170 170 170 85 85 85 0 0 0 0 0 0 |
838 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 839 | 0 0 0 85 85 85 85 85 85 0 0 0 |
839 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 840 | 0 0 0 0 0 0 0 0 0 85 85 85 |
840 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 841 | 0 0 0 0 0 0 0 0 0 0 0 0 |
841 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 842 | 0 0 0 0 0 0 0 0 0 0 0 0 |
842 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 843 | 0 0 0 0 0 0 0 0 0 0 0 0 |
843 | 0 0 0 0 0 0 0 0 0 0 0 0 | 844 | 0 0 0 0 0 0 0 0 0 0 0 0 |
844 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 845 | 0 0 0 0 0 0 0 0 0 0 0 0 |
845 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 846 | 0 0 0 0 0 0 0 0 0 0 0 0 |
846 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 847 | 0 0 0 0 0 0 0 0 0 0 0 0 |
847 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 848 | 0 0 0 0 0 0 0 0 0 0 0 0 |
848 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 85 | 849 | 0 0 0 0 0 0 0 0 0 0 0 0 |
849 | 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 850 | 0 0 0 85 85 85 0 0 0 85 85 85 |
850 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 851 | 0 0 0 0 0 0 85 85 85 255 255 255 |
851 | 255 255 85 255 255 85 170 85 0 255 255 85 85 85 85 85 85 85 | 852 | 255 255 255 255 255 255 255 255 255 255 255 255 |
852 | 255 255 85 170 170 170 85 85 85 85 85 85 0 0 0 85 85 85 | 853 | 255 255 255 255 255 255 255 255 255 255 255 255 |
853 | 0 0 0 85 85 85 85 85 85 170 170 170 170 85 0 170 170 170 | 854 | 255 255 255 255 255 255 255 255 255 255 255 255 |
854 | 170 170 170 255 255 85 170 170 170 85 85 85 85 85 85 85 85 85 | 855 | 255 255 255 255 255 255 255 255 255 255 255 255 |
855 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 856 | 255 255 255 255 255 255 255 255 255 255 255 255 |
856 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 857 | 255 255 255 255 255 255 255 255 255 255 255 255 |
857 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 858 | 255 255 255 170 170 170 0 0 0 85 85 85 |
858 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 859 | 85 85 85 0 0 0 85 85 85 0 0 0 |
859 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 860 | 0 0 0 0 0 0 0 0 0 85 85 85 |
860 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 861 | 0 0 0 0 0 0 0 0 0 0 0 0 |
861 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 862 | 0 0 0 0 0 0 0 0 0 0 0 0 |
862 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 863 | 0 0 0 0 0 0 0 0 0 0 0 0 |
863 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 864 | 0 0 0 0 0 0 0 0 0 0 0 0 |
864 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 865 | 0 0 0 0 0 0 0 0 0 0 0 0 |
865 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 866 | 0 0 0 0 0 0 0 0 0 0 0 0 |
866 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 867 | 0 0 0 0 0 0 0 0 0 0 0 0 |
867 | 0 0 0 0 0 0 0 0 0 0 0 0 | 868 | 0 0 0 0 0 0 0 0 0 0 0 0 |
868 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 869 | 0 0 0 0 0 0 0 0 0 0 0 0 |
869 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 870 | 0 0 0 85 85 85 0 0 0 85 85 85 |
870 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 871 | 0 0 0 85 85 85 170 170 170 255 255 255 |
871 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 872 | 255 255 255 255 255 255 255 255 255 255 255 255 |
872 | 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 255 255 85 | 873 | 255 255 255 255 255 255 255 255 255 255 255 255 |
873 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 874 | 255 255 255 255 255 255 255 255 255 255 255 255 |
874 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 875 | 255 255 255 255 255 255 255 255 255 255 255 255 |
875 | 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 0 170 0 | 876 | 255 255 255 255 255 255 255 255 255 255 255 255 |
876 | 0 0 0 170 85 0 170 85 0 0 170 0 0 0 0 0 0 0 | 877 | 255 255 255 255 255 255 255 255 255 255 255 255 |
877 | 85 85 85 0 0 0 85 85 85 85 85 85 170 170 170 85 85 85 | 878 | 255 255 255 170 170 170 0 0 0 85 85 85 |
878 | 170 170 170 85 85 85 85 85 85 170 170 170 170 85 0 85 85 85 | 879 | 85 85 85 0 0 0 85 85 85 0 0 0 |
879 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 880 | 0 0 0 0 0 0 0 0 0 0 0 0 |
880 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 881 | 85 85 85 0 0 0 0 0 0 0 0 0 |
881 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 882 | 0 0 0 0 0 0 0 0 0 0 0 0 |
882 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 883 | 0 0 0 0 0 0 0 0 0 0 0 0 |
883 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 884 | 0 0 0 0 0 0 0 0 0 0 0 0 |
884 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 885 | 0 0 0 0 0 0 0 0 0 0 0 0 |
885 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 886 | 0 0 0 0 0 0 0 0 0 0 0 0 |
886 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 887 | 0 0 0 0 0 0 0 0 0 0 0 0 |
887 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 888 | 0 0 0 0 0 0 0 0 0 0 0 0 |
888 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 889 | 0 0 0 0 0 0 0 0 0 0 0 0 |
889 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 890 | 85 85 85 0 0 0 0 0 0 85 85 85 |
890 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 891 | 0 0 0 170 170 170 255 255 255 255 255 255 |
891 | 0 0 0 0 0 0 0 0 0 0 0 0 | 892 | 255 255 255 255 255 255 255 255 255 255 255 255 |
892 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 893 | 255 255 255 255 255 255 255 255 255 255 255 255 |
893 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 894 | 255 255 255 255 255 255 255 255 255 255 255 255 |
894 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 895 | 255 255 255 255 255 255 255 255 255 255 255 255 |
895 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 896 | 255 255 255 255 255 255 255 255 255 255 255 255 |
896 | 0 0 0 0 0 0 0 0 0 0 0 0 255 255 85 170 85 0 | 897 | 255 255 255 255 255 255 255 255 255 255 255 255 |
897 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 | 898 | 255 255 255 255 255 255 85 85 85 0 0 0 |
898 | 255 255 85 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 | 899 | 0 0 0 0 0 0 0 0 0 85 85 85 |
899 | 170 85 0 255 255 85 85 255 85 255 255 85 255 255 85 170 85 0 | 900 | 0 0 0 0 0 0 0 0 0 0 0 0 |
900 | 170 85 0 255 255 85 170 85 0 0 0 0 0 0 0 0 0 0 | 901 | 85 85 85 0 0 0 0 0 0 0 0 0 |
901 | 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 | 902 | 0 0 0 0 0 0 0 0 0 0 0 0 |
902 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | 903 | 0 0 0 0 0 0 0 0 0 0 0 0 |
903 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 904 | 0 0 0 0 0 0 0 0 0 0 0 0 |
904 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 905 | 0 0 0 0 0 0 0 0 0 0 0 0 |
905 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 906 | 0 0 0 0 0 0 0 0 0 0 0 0 |
906 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 907 | 0 0 0 0 0 0 0 0 0 0 0 0 |
907 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 908 | 0 0 0 0 0 0 0 0 0 0 0 0 |
908 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 909 | 0 0 0 0 0 0 0 0 0 0 0 0 |
909 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 910 | 85 85 85 0 0 0 85 85 85 0 0 0 |
910 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 911 | 0 0 0 255 255 255 255 255 255 255 255 255 |
911 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 912 | 255 255 255 255 255 255 255 255 255 255 255 255 |
912 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 913 | 255 255 255 255 255 255 255 255 255 255 255 255 |
913 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 914 | 255 255 255 255 255 255 255 255 255 255 255 255 |
914 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 915 | 255 255 255 255 255 255 255 255 255 255 255 255 |
915 | 0 0 0 0 0 0 0 0 0 0 0 0 | 916 | 255 255 255 255 255 255 255 255 255 255 255 255 |
916 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 917 | 255 255 255 255 255 255 255 255 255 255 255 255 |
917 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 918 | 255 255 255 255 255 255 170 170 170 0 0 0 |
918 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 919 | 0 0 0 0 0 0 0 0 0 85 85 85 |
919 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 920 | 0 0 0 0 0 0 0 0 0 0 0 0 |
920 | 0 0 0 0 0 0 0 0 0 0 0 0 255 255 85 255 255 85 | 921 | 85 85 85 0 0 0 0 0 0 0 0 0 |
921 | 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 | 922 | 0 0 0 0 0 0 0 0 0 0 0 0 |
922 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 923 | 0 0 0 0 0 0 0 0 0 0 0 0 |
923 | 255 255 85 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 | 924 | 0 0 0 0 0 0 0 0 0 0 0 0 |
924 | 85 255 85 170 85 0 0 170 0 85 85 85 0 0 0 85 85 85 | 925 | 0 0 0 0 0 0 0 0 0 0 0 0 |
925 | 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 | 926 | 0 0 0 0 0 0 0 0 0 0 0 0 |
926 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 | 927 | 0 0 0 0 0 0 0 0 0 0 0 0 |
927 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 928 | 0 0 0 0 0 0 0 0 0 0 0 0 |
928 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 929 | 0 0 0 0 0 0 0 0 0 85 85 85 |
929 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 930 | 0 0 0 0 0 0 85 85 85 0 0 0 |
930 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 931 | 85 85 85 255 255 255 255 255 255 255 255 255 |
931 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 932 | 255 255 255 255 255 255 255 255 255 255 255 255 |
932 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 933 | 255 255 255 255 255 255 255 255 255 255 255 255 |
933 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 934 | 255 255 255 255 255 255 255 255 255 255 255 255 |
934 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 935 | 255 255 255 255 255 255 255 255 255 255 255 255 |
935 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 936 | 255 255 255 255 255 255 255 255 255 255 255 255 |
936 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 937 | 255 255 255 255 255 255 255 255 255 255 255 255 |
937 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 938 | 255 255 255 255 255 255 170 170 170 0 0 0 |
938 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 939 | 0 0 0 0 0 0 0 0 0 85 85 85 |
939 | 0 0 0 0 0 0 0 0 0 0 0 0 | 940 | 0 0 0 0 0 0 0 0 0 0 0 0 |
940 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 941 | 85 85 85 0 0 0 0 0 0 0 0 0 |
941 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 942 | 0 0 0 0 0 0 0 0 0 0 0 0 |
942 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 943 | 0 0 0 0 0 0 0 0 0 0 0 0 |
943 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 944 | 0 0 0 0 0 0 0 0 0 0 0 0 |
944 | 0 0 0 0 0 0 0 0 0 0 170 0 170 85 0 255 255 85 | 945 | 0 0 0 0 0 0 0 0 0 0 0 0 |
945 | 85 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 946 | 0 0 0 0 0 0 0 0 0 0 0 0 |
946 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 947 | 0 0 0 0 0 0 0 0 0 0 0 0 |
947 | 170 85 0 255 255 85 85 255 85 255 255 85 255 255 85 170 85 0 | 948 | 0 0 0 0 0 0 0 0 0 0 0 0 |
948 | 85 255 85 170 85 0 170 85 0 0 0 0 0 0 0 0 0 0 | 949 | 0 0 0 0 0 0 0 0 0 85 85 85 |
949 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 950 | 0 0 0 85 85 85 0 0 0 0 0 0 |
950 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 951 | 170 170 170 255 255 255 255 255 255 255 255 255 |
951 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | 952 | 255 255 255 255 255 255 255 255 255 255 255 255 |
952 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 953 | 255 255 255 255 255 255 255 255 255 255 255 255 |
953 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 954 | 255 255 255 255 255 255 255 255 255 255 255 255 |
954 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 955 | 255 255 255 255 255 255 255 255 255 255 255 255 |
955 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 956 | 255 255 255 255 255 255 255 255 255 255 255 255 |
956 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 957 | 255 255 255 255 255 255 255 255 255 255 255 255 |
957 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 958 | 255 255 255 255 255 255 170 170 170 0 0 0 |
958 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 959 | 0 0 0 0 0 0 0 0 0 85 85 85 |
959 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 960 | 0 0 0 0 0 0 0 0 0 0 0 0 |
960 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 961 | 0 0 0 85 85 85 0 0 0 0 0 0 |
961 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 962 | 0 0 0 0 0 0 0 0 0 0 0 0 |
962 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 963 | 0 0 0 0 0 0 0 0 0 0 0 0 |
963 | 0 0 0 0 0 0 0 0 0 0 0 0 | 964 | 0 0 0 0 0 0 0 0 0 0 0 0 |
964 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 965 | 0 0 0 0 0 0 0 0 0 0 0 0 |
965 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 966 | 0 0 0 0 0 0 0 0 0 0 0 0 |
966 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 967 | 0 0 0 0 0 0 0 0 0 0 0 0 |
967 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 968 | 0 0 0 0 0 0 0 0 0 0 0 0 |
968 | 0 0 0 0 0 0 0 0 0 170 85 0 255 255 85 255 255 85 | 969 | 0 0 0 0 0 0 85 85 85 0 0 0 |
969 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 970 | 0 0 0 85 85 85 0 0 0 0 0 0 |
970 | 255 255 85 170 85 0 255 255 85 85 255 85 255 255 85 170 85 0 | 971 | 255 255 255 255 255 255 255 255 255 255 255 255 |
971 | 255 255 85 255 255 85 170 85 0 255 255 85 170 85 0 85 255 85 | 972 | 255 255 255 255 255 255 255 255 255 255 255 255 |
972 | 170 85 0 170 85 0 0 0 0 0 0 0 0 0 0 85 85 85 | 973 | 255 255 255 255 255 255 170 170 170 255 255 255 |
973 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 974 | 255 255 255 255 255 255 255 255 255 255 255 255 |
974 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 975 | 255 255 255 255 255 255 255 255 255 255 255 255 |
975 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 976 | 255 255 255 255 255 255 255 255 255 255 255 255 |
976 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 977 | 255 255 255 255 255 255 255 255 255 255 255 255 |
977 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 978 | 255 255 255 255 255 255 255 255 255 0 0 0 |
978 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 979 | 0 0 0 0 0 0 0 0 0 85 85 85 |
979 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 980 | 0 0 0 0 0 0 0 0 0 0 0 0 |
980 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 981 | 0 0 0 85 85 85 0 0 0 0 0 0 |
981 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 982 | 0 0 0 0 0 0 0 0 0 0 0 0 |
982 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 983 | 0 0 0 0 0 0 0 0 0 0 0 0 |
983 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 984 | 0 0 0 0 0 0 0 0 0 0 0 0 |
984 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 985 | 0 0 0 0 0 0 0 0 0 0 0 0 |
985 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 986 | 0 0 0 0 0 0 0 0 0 0 0 0 |
986 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 987 | 0 0 0 0 0 0 0 0 0 0 0 0 |
987 | 0 0 0 0 0 0 0 0 0 0 0 0 | 988 | 0 0 0 0 0 0 0 0 0 0 0 0 |
988 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 989 | 0 0 0 85 85 85 0 0 0 0 0 0 |
989 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 990 | 0 0 0 85 85 85 0 0 0 0 0 0 |
990 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 991 | 255 255 255 255 255 255 255 255 255 255 255 255 |
991 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 992 | 255 255 255 255 255 255 255 255 255 255 255 255 |
992 | 0 0 0 0 0 0 0 0 0 85 85 85 255 255 85 170 85 0 | 993 | 255 255 255 255 255 255 170 170 170 255 255 255 |
993 | 255 255 85 170 85 0 255 255 85 170 85 0 255 255 85 85 255 85 | 994 | 255 255 255 255 255 255 255 255 255 255 255 255 |
994 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 995 | 255 255 255 255 255 255 255 255 255 255 255 255 |
995 | 255 255 85 170 85 0 255 255 85 85 255 85 170 85 0 170 85 0 | 996 | 255 255 255 255 255 255 255 255 255 255 255 255 |
996 | 0 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 997 | 255 255 255 255 255 255 255 255 255 255 255 255 |
997 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 998 | 255 255 255 255 255 255 255 255 255 0 0 0 |
998 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | 999 | 0 0 0 0 0 0 0 0 0 85 85 85 |
999 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1000 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1000 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 1001 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1001 | 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 | 1002 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1002 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1003 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1003 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1004 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1004 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1005 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1005 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1006 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1006 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1007 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1007 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1008 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1008 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1009 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1009 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1010 | 0 0 0 85 85 85 0 0 0 85 85 85 |
1010 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1011 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1011 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1012 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1012 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1013 | 255 255 255 255 255 255 170 170 170 255 255 255 |
1013 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1014 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1014 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1015 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1015 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1016 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1016 | 0 0 0 0 0 0 0 0 0 170 85 0 255 255 85 255 255 85 | 1017 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1017 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 | 1018 | 255 255 255 255 255 255 255 255 255 0 0 0 |
1018 | 255 255 85 255 255 85 170 85 0 255 255 85 170 85 0 85 255 85 | 1019 | 0 0 0 0 0 0 0 0 0 85 85 85 |
1019 | 255 255 85 85 255 85 170 85 0 170 85 0 85 255 85 170 85 0 | 1020 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1020 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1021 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1021 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1022 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1022 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1023 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1023 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 1024 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1024 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 1025 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1025 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | 1026 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1026 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1027 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1027 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1028 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1028 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1029 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1029 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1030 | 0 0 0 85 85 85 0 0 0 85 85 85 |
1030 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1031 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1031 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1032 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1032 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1033 | 255 255 255 255 255 255 170 170 170 255 255 255 |
1033 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1034 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1034 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1035 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1035 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1036 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1036 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1037 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1037 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1038 | 255 255 255 255 255 255 255 255 255 0 0 0 |
1038 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1039 | 0 0 0 0 0 0 0 0 0 85 85 85 |
1039 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1040 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1040 | 0 0 0 0 0 0 0 0 0 85 85 85 255 255 85 85 255 85 | 1041 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1041 | 255 255 85 255 255 85 85 255 85 255 255 85 255 255 85 255 255 85 | 1042 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1042 | 255 255 85 170 85 0 255 255 85 85 255 85 255 255 85 255 255 85 | 1043 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1043 | 170 85 0 170 85 0 85 255 85 170 85 0 0 0 0 0 0 0 | 1044 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1044 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1045 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1045 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1046 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1046 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 1047 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1047 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1048 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1048 | 0 0 0 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 | 1049 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1049 | 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 | 1050 | 0 0 0 0 0 0 85 85 85 85 85 85 |
1050 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1051 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1051 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1052 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1052 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1053 | 255 255 255 255 255 255 170 170 170 255 255 255 |
1053 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1054 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1054 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1055 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1055 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1056 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1056 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1057 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1057 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1058 | 255 255 255 255 255 255 255 255 255 0 0 0 |
1058 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1059 | 0 0 0 0 0 0 0 0 0 85 85 85 |
1059 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1060 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1060 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1061 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1061 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1062 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1062 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1063 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1063 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1064 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1064 | 0 0 0 0 0 0 0 0 0 85 85 85 255 255 85 255 255 85 | 1065 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1065 | 170 85 0 255 255 85 255 255 85 170 85 0 255 255 85 170 85 0 | 1066 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1066 | 255 255 85 85 255 85 170 85 0 255 255 85 170 85 0 85 255 85 | 1067 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1067 | 170 85 0 170 85 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1068 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1068 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 1069 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1069 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1070 | 0 0 0 0 0 0 0 0 0 85 85 85 |
1070 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1071 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1071 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1072 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1072 | 85 85 85 0 0 0 170 170 170 170 170 170 170 170 170 170 170 170 | 1073 | 255 255 255 255 255 255 170 170 170 255 255 255 |
1073 | 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 | 1074 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1074 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1075 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1075 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1076 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1076 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1077 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1077 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1078 | 255 255 255 255 255 255 255 255 255 0 0 0 |
1078 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1079 | 85 85 85 85 85 85 85 85 85 85 85 85 |
1079 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1080 | 85 85 85 0 0 0 0 0 0 0 0 0 |
1080 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1081 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1081 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1082 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1082 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1083 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1083 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1084 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1084 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1085 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1085 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1086 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1086 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1087 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1087 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1088 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1088 | 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 255 255 85 | 1089 | 0 0 0 85 85 85 0 0 0 170 85 0 |
1089 | 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 85 255 85 | 1090 | 255 255 85 170 85 0 0 0 0 0 0 0 |
1090 | 170 85 0 255 255 85 170 85 0 85 255 85 170 85 0 170 85 0 | 1091 | 85 85 85 255 255 255 255 255 255 255 255 255 |
1091 | 0 170 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1092 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1092 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1093 | 255 255 255 255 255 255 170 170 170 255 255 255 |
1093 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1094 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1094 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1095 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1095 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 1096 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1096 | 0 0 0 85 85 85 170 170 170 170 170 170 255 255 255 170 170 170 | 1097 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1097 | 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 | 1098 | 255 255 255 255 255 255 255 255 255 85 85 85 |
1098 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1099 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1099 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1100 | 0 0 0 85 85 85 85 85 85 0 0 0 |
1100 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1101 | 0 0 0 85 85 85 0 0 0 0 0 0 |
1101 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1102 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1102 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1103 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1103 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1104 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1104 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1105 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1105 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1106 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1106 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1107 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1107 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1108 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1108 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1109 | 0 0 0 0 0 0 170 85 0 255 255 85 |
1109 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1110 | 170 85 0 255 255 85 170 85 0 0 0 0 |
1110 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1111 | 0 0 0 85 85 85 255 255 255 255 255 255 |
1111 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1112 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1112 | 0 0 0 0 0 0 0 0 0 0 0 0 85 255 85 255 255 85 | 1113 | 255 255 255 255 255 255 170 170 170 255 255 255 |
1113 | 170 85 0 255 255 85 255 255 85 170 85 0 85 255 85 170 85 0 | 1114 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1114 | 255 255 85 170 85 0 0 170 0 170 85 0 0 0 0 0 0 0 | 1115 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1115 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1116 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1116 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 1117 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1117 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1118 | 255 255 85 170 85 0 255 255 85 0 0 0 |
1118 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1119 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1119 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1120 | 0 0 0 0 0 0 85 85 85 85 85 85 |
1120 | 85 85 85 0 0 0 170 170 170 170 170 170 170 170 170 85 85 85 | 1121 | 85 85 85 0 0 0 0 0 0 0 0 0 |
1121 | 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 | 1122 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1122 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1123 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1123 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1124 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1124 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1125 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1125 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1126 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1126 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1127 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1127 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1128 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1128 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1129 | 0 0 0 170 85 0 255 255 85 170 85 0 |
1129 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1130 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1130 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1131 | 0 0 0 0 0 0 85 85 85 255 255 255 |
1131 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1132 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1132 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1133 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1133 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1134 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1134 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1135 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1135 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1136 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1136 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 85 | 1137 | 255 255 255 255 255 255 255 255 255 255 255 85 |
1137 | 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 | 1138 | 170 85 0 255 255 85 170 85 0 0 0 0 |
1138 | 0 170 0 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 | 1139 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1139 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1140 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1140 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 | 1141 | 170 85 0 0 0 0 0 0 0 0 0 0 |
1141 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | 1142 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1142 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1143 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1143 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1144 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1144 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1145 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1145 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1146 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1146 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1147 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1147 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1148 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1148 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1149 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1149 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1150 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1150 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1151 | 170 85 0 0 0 0 0 0 0 85 85 85 |
1151 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1152 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1152 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1153 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1153 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1154 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1154 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1155 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1155 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1156 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1156 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1157 | 255 255 255 255 255 255 255 255 255 170 85 0 |
1157 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1158 | 255 255 85 170 85 0 255 255 85 0 0 0 |
1158 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1159 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1159 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1160 | 0 0 0 0 0 0 0 0 0 170 85 0 |
1160 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1161 | 255 255 85 170 85 0 0 0 0 0 0 0 |
1161 | 255 255 85 255 255 85 170 85 0 0 170 0 85 85 85 85 85 85 | 1162 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1162 | 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 | 1163 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1163 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 1164 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1164 | 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 85 85 85 | 1165 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1165 | 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 | 1166 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1166 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 | 1167 | 0 0 0 0 0 0 0 0 0 170 85 0 |
1167 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1168 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1168 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1169 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1169 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1170 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1170 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1171 | 255 255 85 0 0 0 0 0 0 0 0 0 |
1171 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1172 | 85 85 85 255 255 255 255 255 255 255 255 255 |
1172 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1173 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1173 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1174 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1174 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1175 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1175 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1176 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1176 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1177 | 255 255 255 255 255 255 255 255 255 255 255 85 |
1177 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1178 | 170 85 0 255 255 85 170 85 0 0 0 0 |
1178 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1179 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1179 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1180 | 0 0 0 0 0 0 0 0 0 255 255 85 |
1180 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1181 | 170 85 0 255 255 85 0 0 0 0 0 0 |
1181 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1182 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1182 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1183 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1183 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1184 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1184 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1185 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1185 | 0 0 0 170 85 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1186 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1186 | 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 85 85 85 | 1187 | 0 0 0 0 0 0 170 85 0 255 255 85 |
1187 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | 1188 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1188 | 170 170 170 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 | 1189 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1189 | 255 255 255 255 255 255 255 255 255 170 170 170 255 255 255 170 170 170 | 1190 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1190 | 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 | 1191 | 170 85 0 255 255 85 0 0 0 0 0 0 |
1191 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1192 | 0 0 0 85 85 85 255 255 255 255 255 255 |
1192 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1193 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1193 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1194 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1194 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1195 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1195 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1196 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1196 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1197 | 255 255 255 255 255 255 170 170 170 170 85 0 |
1197 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1198 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1198 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1199 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1199 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1200 | 0 0 0 0 0 0 255 255 85 170 85 0 |
1200 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1201 | 255 255 85 170 85 0 0 0 0 0 0 0 |
1201 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1202 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1202 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1203 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1203 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1204 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1204 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1205 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1205 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1206 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1206 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1207 | 0 0 0 0 0 0 255 255 85 170 85 0 |
1207 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1208 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1208 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1209 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1209 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1210 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1210 | 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 | 1211 | 255 255 85 170 85 0 255 255 85 0 0 0 |
1211 | 255 255 255 255 255 255 255 255 255 170 170 170 255 255 255 170 170 170 | 1212 | 0 0 0 0 0 0 85 85 85 255 255 255 |
1212 | 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 | 1213 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1213 | 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 | 1214 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1214 | 255 255 255 255 255 255 170 170 170 255 255 255 170 170 170 85 85 85 | 1215 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1215 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1216 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1216 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1217 | 255 255 255 170 170 170 170 170 170 255 255 85 |
1217 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1218 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1218 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1219 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1219 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1220 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1220 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1221 | 170 85 0 255 255 85 0 0 0 0 0 0 |
1221 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1222 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1222 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1223 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1223 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1224 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1224 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1225 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1225 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1226 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1226 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1227 | 0 0 0 0 0 0 170 85 0 255 255 85 |
1227 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1228 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1228 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1229 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1229 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1230 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1230 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1231 | 170 85 0 255 255 85 170 85 0 0 0 0 |
1231 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1232 | 0 0 0 0 0 0 0 0 0 85 85 85 |
1232 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1233 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1233 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1234 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1234 | 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 | 1235 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1235 | 255 255 255 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 | 1236 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1236 | 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 | 1237 | 255 255 255 170 170 170 170 170 170 170 85 0 |
1237 | 255 255 255 255 255 255 170 170 170 255 255 255 255 255 255 255 255 255 | 1238 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1238 | 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 | 1239 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1239 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1240 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1240 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1241 | 255 255 85 170 85 0 255 255 85 0 0 0 |
1241 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1242 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1242 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1243 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1243 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1244 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1244 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1245 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1245 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1246 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1246 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1247 | 0 0 0 0 0 0 255 255 85 170 85 0 |
1247 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1248 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1248 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1249 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1249 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1250 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1250 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1251 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1251 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1252 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1252 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1253 | 0 0 0 255 255 255 255 255 255 255 255 255 |
1253 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1254 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1254 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1255 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1255 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1256 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1256 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1257 | 255 255 255 170 170 170 170 170 170 255 255 85 |
1257 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1258 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1258 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 | 1259 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1259 | 170 170 170 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170 | 1260 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1260 | 255 255 255 170 170 170 255 255 255 170 170 170 255 255 255 255 255 255 | 1261 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1261 | 255 255 255 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170 | 1262 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1262 | 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 | 1263 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1263 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1264 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1264 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1265 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1265 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1266 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1266 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1267 | 0 0 0 0 0 0 170 85 0 255 255 85 |
1267 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1268 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1268 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1269 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1269 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1270 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1270 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1271 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1271 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1272 | 170 85 0 0 0 0 0 0 0 0 0 0 |
1272 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1273 | 0 0 0 255 255 255 255 255 255 255 255 255 |
1273 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1274 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1274 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1275 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1275 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1276 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1276 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1277 | 255 255 255 170 170 170 170 170 170 170 85 0 |
1277 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1278 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1278 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1279 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1279 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1280 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1280 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1281 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1281 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1282 | 255 255 85 0 0 0 0 0 0 0 0 0 |
1282 | 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 | 1283 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1283 | 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 | 1284 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1284 | 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 | 1285 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1285 | 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 | 1286 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1286 | 170 170 170 170 170 170 85 85 85 0 0 0 85 85 85 0 0 0 | 1287 | 0 0 0 0 0 0 255 255 85 170 85 0 |
1287 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1288 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1288 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 1289 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1289 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1290 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1290 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1291 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1291 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1292 | 255 255 85 0 0 0 0 0 0 0 0 0 |
1292 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1293 | 85 85 85 255 255 255 255 255 255 255 255 255 |
1293 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1294 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1294 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1295 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1295 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1296 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1296 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1297 | 255 255 255 170 170 170 85 85 85 255 255 85 |
1297 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1298 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1298 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1299 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1299 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1300 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1300 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1301 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1301 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1302 | 170 85 0 255 255 85 0 0 0 0 0 0 |
1302 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1303 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1303 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1304 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1304 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1305 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1305 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | 1306 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1306 | 170 170 170 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 | 1307 | 0 0 0 0 0 0 170 85 0 255 255 85 |
1307 | 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | 1308 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1308 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | 1309 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1309 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | 1310 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1310 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1311 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1311 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1312 | 170 85 0 255 255 85 85 85 85 85 85 85 |
1312 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1313 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1313 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1314 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1314 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1315 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1315 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1316 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1316 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1317 | 170 170 170 85 85 85 85 85 85 170 85 0 |
1317 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1318 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1318 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1319 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1319 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1320 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1320 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1321 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1321 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1322 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1322 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1323 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1323 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1324 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1324 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1325 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1325 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1326 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1326 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1327 | 0 0 0 0 0 0 255 255 85 170 85 0 |
1327 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1328 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1328 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1329 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1329 | 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 | 1330 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1330 | 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 | 1331 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1331 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1332 | 255 255 85 170 85 0 255 255 85 255 255 255 |
1332 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1333 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1333 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1334 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1334 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1335 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1335 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1336 | 255 255 255 255 255 255 255 255 255 170 170 170 |
1336 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 1337 | 85 85 85 0 0 0 0 0 0 170 85 0 |
1337 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1338 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1338 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1339 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1339 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1340 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1340 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1341 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1341 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1342 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1342 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1343 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1343 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1344 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1344 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1345 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1345 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1346 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1346 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1347 | 0 0 0 0 0 0 170 85 0 255 255 85 |
1347 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1348 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1348 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1349 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1349 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1350 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1350 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1351 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1351 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1352 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1352 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1353 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1353 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | 1354 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1354 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 | 1355 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1355 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1356 | 255 255 255 255 255 255 170 170 170 85 85 85 |
1356 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1357 | 0 0 0 0 0 0 0 0 0 170 85 0 |
1357 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1358 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1358 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1359 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1359 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1360 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1360 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1361 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1361 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1362 | 255 255 85 170 85 0 255 255 85 0 0 0 |
1362 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1363 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1363 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1364 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1364 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1365 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1365 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1366 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1366 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1367 | 0 0 0 0 0 0 255 255 85 170 85 0 |
1367 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1368 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1368 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1369 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1369 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1370 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1370 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1371 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1371 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1372 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1372 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1373 | 170 170 170 255 255 255 255 255 255 255 255 255 |
1373 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1374 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1374 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1375 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1375 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1376 | 170 170 170 85 85 85 85 85 85 0 0 0 |
1376 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1377 | 0 0 0 0 0 0 0 0 0 170 85 0 |
1377 | 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 85 85 85 | 1378 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1378 | 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 | 1379 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1379 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1380 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1380 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 1381 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1381 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1382 | 170 85 0 255 255 85 0 0 0 0 0 0 |
1382 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1383 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1383 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1384 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1384 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1385 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1385 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | 1386 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1386 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1387 | 0 0 0 255 255 85 170 85 0 255 255 85 |
1387 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1388 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1388 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1389 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1389 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1390 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1390 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1391 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1391 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1392 | 170 85 0 255 255 85 170 85 0 170 85 0 |
1392 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1393 | 170 85 0 170 170 170 255 255 255 255 255 255 |
1393 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1394 | 255 255 255 255 255 255 255 255 255 255 255 255 |
1394 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1395 | 255 255 255 255 255 255 170 170 170 85 85 85 |
1395 | 0 0 0 0 0 0 0 0 0 0 0 0 | 1396 | 85 85 85 0 0 0 0 0 0 0 0 0 |
1396 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1397 | 0 0 0 0 0 0 85 85 85 170 85 0 |
1397 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1398 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1398 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1399 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1399 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1400 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1400 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1401 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1401 | 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 | 1402 | 255 255 85 0 0 0 0 0 0 0 0 0 |
1402 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | 1403 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1403 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1404 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1404 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1405 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1405 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1406 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1406 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1407 | 0 0 0 170 85 0 255 255 85 170 85 0 |
1407 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1408 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1408 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1409 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1409 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1410 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1410 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1411 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1411 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1412 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1412 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1413 | 170 85 0 0 0 0 0 0 0 0 0 0 |
1413 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1414 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1414 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1415 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1415 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1416 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1416 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1417 | 0 0 0 0 0 0 85 85 85 170 85 0 |
1417 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1418 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1418 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1419 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1419 | 0 0 0 0 0 0 85 85 85 85 85 85 | 1420 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1420 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1421 | 170 85 0 170 85 0 170 85 0 0 0 0 |
1421 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1422 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1422 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1423 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1423 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1424 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1424 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1425 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1425 | 0 0 0 85 85 85 85 85 85 170 170 170 85 85 85 85 85 85 | 1426 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1426 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 1427 | 0 0 0 255 255 85 170 85 0 255 255 85 |
1427 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1428 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1428 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1429 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1429 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1430 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1430 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1431 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1431 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1432 | 170 85 0 255 255 85 170 85 0 170 85 0 |
1432 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1433 | 170 85 0 0 0 0 0 0 0 0 0 0 |
1433 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1434 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1434 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1435 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1435 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1436 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1436 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1437 | 0 0 0 0 0 0 85 85 85 170 85 0 |
1437 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1438 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1438 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1439 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1439 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1440 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1440 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1441 | 170 85 0 0 0 0 0 0 0 0 0 0 |
1441 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1442 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1442 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1443 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1443 | 0 0 0 85 85 85 170 170 170 170 170 170 | 1444 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1444 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1445 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1445 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1446 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1446 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1447 | 0 0 0 0 0 0 255 255 85 170 85 0 |
1447 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1448 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1448 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1449 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1449 | 0 0 0 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 | 1450 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1450 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1451 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1451 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1452 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1452 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1453 | 170 85 0 0 0 0 0 0 0 0 0 0 |
1453 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1454 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1454 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1455 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1455 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1456 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1456 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 | 1457 | 0 0 0 0 0 0 85 85 85 170 85 0 |
1457 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 1458 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1458 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1459 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1459 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1460 | 170 85 0 170 85 0 170 85 0 170 85 0 |
1460 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1461 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1461 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1462 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1462 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1463 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1463 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1464 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1464 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1465 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1465 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1466 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1466 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1467 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1467 | 85 85 85 170 170 170 255 255 255 170 170 170 | 1468 | 0 0 0 0 0 0 170 85 0 170 85 0 |
1468 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1469 | 170 85 0 170 85 0 170 85 0 170 85 0 |
1469 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1470 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1470 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1471 | 170 85 0 255 255 85 170 85 0 255 255 85 |
1471 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1472 | 170 85 0 255 255 85 170 85 0 170 85 0 |
1472 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1473 | 170 85 0 0 0 0 0 0 0 0 0 0 |
1473 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | 1474 | 85 85 85 85 85 85 85 85 85 85 85 85 |
1474 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1475 | 85 85 85 85 85 85 85 85 85 85 85 85 |
1475 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1476 | 85 85 85 85 85 85 85 85 85 0 0 0 |
1476 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1477 | 0 0 0 0 0 0 0 0 0 170 85 0 |
1477 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1478 | 170 85 0 170 85 0 255 255 85 170 85 0 |
1478 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 1479 | 255 255 85 170 85 0 255 255 85 170 85 0 |
1479 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 1480 | 170 85 0 170 85 0 0 0 0 0 0 0 |
1480 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1481 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1481 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1482 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1482 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1483 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1483 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1484 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1484 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1485 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1485 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1486 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1486 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1487 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1487 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1488 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1488 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1489 | 0 0 0 0 0 0 170 85 0 170 85 0 |
1489 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1490 | 170 85 0 170 85 0 170 85 0 170 85 0 |
1490 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 | 1491 | 170 85 0 170 85 0 255 255 85 170 85 0 |
1491 | 170 170 170 255 255 255 170 170 170 170 170 170 | 1492 | 255 255 85 170 85 0 170 85 0 170 85 0 |
1492 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1493 | 85 85 85 85 85 85 85 85 85 85 85 85 |
1493 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1494 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1494 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1495 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1495 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1496 | 0 0 0 0 0 0 0 0 0 85 85 85 |
1496 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1497 | 85 85 85 85 85 85 85 85 85 170 85 0 |
1497 | 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 0 0 0 | 1498 | 170 85 0 170 85 0 170 85 0 255 255 85 |
1498 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1499 | 170 85 0 255 255 85 170 85 0 170 85 0 |
1499 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1500 | 170 85 0 0 0 0 0 0 0 0 0 0 |
1500 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1501 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1501 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1502 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1502 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1503 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1503 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1504 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1504 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 | 1505 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1505 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 1506 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1506 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1507 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1507 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1508 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1508 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1509 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1509 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1510 | 0 0 0 0 0 0 0 0 0 170 85 0 |
1510 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1511 | 170 85 0 170 85 0 170 85 0 170 85 0 |
1511 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1512 | 170 85 0 170 85 0 170 85 0 170 85 0 |
1512 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1513 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1513 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1514 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1514 | 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 | 1515 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1515 | 255 255 255 255 255 255 170 170 170 170 170 170 | 1516 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1516 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1517 | 0 0 0 0 0 0 0 0 0 170 85 0 |
1517 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1518 | 170 85 0 170 85 0 170 85 0 170 85 0 |
1518 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1519 | 170 85 0 170 85 0 170 85 0 170 85 0 |
1519 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1520 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1520 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1521 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1521 | 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | 1522 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1522 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1523 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1523 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1524 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1524 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1525 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1525 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1526 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1526 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1527 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1527 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1528 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1528 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1529 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1529 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1530 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1530 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1531 | 0 0 0 170 85 0 170 85 0 170 85 0 |
1531 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1532 | 170 85 0 170 85 0 170 85 0 0 0 0 |
1532 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1533 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1533 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1534 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1534 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1535 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1535 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1536 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1536 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1537 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1537 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1538 | 170 85 0 170 85 0 170 85 0 170 85 0 |
1538 | 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 255 255 255 | 1539 | 170 85 0 170 85 0 170 85 0 0 0 0 |
1539 | 255 255 255 170 170 170 170 170 170 0 0 0 | 1540 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1540 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1541 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1541 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1542 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1542 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1543 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1543 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1544 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1544 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1545 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1545 | 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | 1546 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1546 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1547 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1547 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1548 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1548 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1549 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1549 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1550 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1550 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1551 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1551 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1552 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1552 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 | 1553 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1553 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | 1554 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1554 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1555 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1555 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1556 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1556 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1557 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1557 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1558 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1558 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1559 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1559 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1560 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1560 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1561 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1561 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1562 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1562 | 0 0 0 85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 | 1563 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1563 | 170 170 170 170 170 170 85 85 85 0 0 0 | 1564 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1564 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1565 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1565 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1566 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1566 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1567 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1567 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1568 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1568 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | 1569 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1569 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 | 1570 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1570 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1571 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1571 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | 1572 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1572 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1573 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1573 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1574 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1574 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1575 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1575 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 1576 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1576 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1577 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1577 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1578 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1578 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1579 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1579 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1580 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1580 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1581 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1581 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1582 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1582 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1583 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1583 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1584 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1584 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1585 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1585 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | 1586 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1586 | 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 | 1587 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1587 | 170 170 170 170 170 170 0 0 0 0 0 0 | 1588 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1588 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1589 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1589 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1590 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1590 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1591 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1591 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1592 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1592 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | 1593 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1593 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 | 1594 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1594 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1595 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1595 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1596 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1596 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1597 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1597 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | 1598 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1598 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | 1599 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1599 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 1600 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1600 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | 1601 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1601 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | 1602 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1602 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | 1603 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1603 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | 1604 | 0 0 0 0 0 0 0 0 0 0 0 0 |
1604 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1605 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1606 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1607 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1608 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1609 | 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 | ||
1610 | 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 | ||
1611 | 170 170 170 0 0 0 0 0 0 0 0 0 | ||
1612 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1613 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1614 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1615 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1616 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | ||
1617 | 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1618 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | ||
1619 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1620 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1621 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1622 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1623 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | ||
1624 | 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 | ||
1625 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1626 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1627 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1628 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1629 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1630 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1631 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1632 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1633 | 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 | ||
1634 | 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 | ||
1635 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1636 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1637 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1638 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1639 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1640 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | ||
1641 | 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 | ||
1642 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1643 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1644 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1645 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1646 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1647 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1648 | 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | ||
1649 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1650 | 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1651 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1652 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1653 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1654 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1655 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1656 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1657 | 85 85 85 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 | ||
1658 | 255 255 255 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 | ||
1659 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1660 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1661 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1662 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1663 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1664 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | ||
1665 | 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1666 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1667 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1668 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1669 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1670 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1671 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1672 | 85 85 85 0 0 0 170 170 170 255 255 255 85 85 85 85 85 85 | ||
1673 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1674 | 85 85 85 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1675 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1676 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1677 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1678 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1679 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1680 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1681 | 170 170 170 170 170 170 255 255 255 170 170 170 255 255 255 255 255 255 | ||
1682 | 255 255 255 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 | ||
1683 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1684 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1685 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1686 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1687 | 85 85 85 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1688 | 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 | ||
1689 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1690 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1691 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1692 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1693 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1694 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1695 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | ||
1696 | 0 0 0 85 85 85 170 170 170 255 255 255 170 170 170 85 85 85 | ||
1697 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1698 | 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1699 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1700 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1701 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1702 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1703 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1704 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | ||
1705 | 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 | ||
1706 | 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1707 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1708 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1709 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1710 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1711 | 85 85 85 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0 | ||
1712 | 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 | ||
1713 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1714 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1715 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1716 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1717 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1718 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1719 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1720 | 85 85 85 85 85 85 255 255 255 255 255 255 255 255 255 85 85 85 | ||
1721 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 170 170 170 | ||
1722 | 255 255 255 170 170 170 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1723 | 0 0 0 85 85 85 170 170 170 85 85 85 0 0 0 0 0 0 | ||
1724 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1725 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1726 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1727 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1728 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 170 170 170 | ||
1729 | 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 | ||
1730 | 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1731 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1732 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1733 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1734 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1735 | 170 170 170 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 | ||
1736 | 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 | ||
1737 | 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1738 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1739 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1740 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1741 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1742 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1743 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1744 | 85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 85 85 85 | ||
1745 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 255 255 255 | ||
1746 | 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1747 | 85 85 85 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 | ||
1748 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1749 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1750 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1751 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1752 | 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 | ||
1753 | 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 | ||
1754 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1755 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1756 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1757 | 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 | ||
1758 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1759 | 170 170 170 255 255 255 255 255 255 255 255 255 85 85 85 0 0 0 | ||
1760 | 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 | ||
1761 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1762 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1763 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1764 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1765 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1766 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1767 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1768 | 85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 | ||
1769 | 0 0 0 85 85 85 0 0 0 85 85 85 170 170 170 255 255 255 | ||
1770 | 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1771 | 85 85 85 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 | ||
1772 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1773 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1774 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1775 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1776 | 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 | ||
1777 | 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 | ||
1778 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1779 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1780 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1781 | 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255 | ||
1782 | 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1783 | 85 85 85 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 | ||
1784 | 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1785 | 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1786 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1787 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1788 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1789 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1790 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1791 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | ||
1792 | 85 85 85 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 | ||
1793 | 85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 255 255 255 | ||
1794 | 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1795 | 170 170 170 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 | ||
1796 | 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1797 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1798 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1799 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1800 | 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 | ||
1801 | 85 85 85 85 85 85 170 170 170 85 85 85 85 85 85 0 0 0 | ||
1802 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1803 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1804 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1805 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 | ||
1806 | 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1807 | 85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 | ||
1808 | 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 | ||
1809 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1810 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1811 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1812 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1813 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1814 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1815 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1816 | 170 170 170 170 170 170 255 255 255 170 170 170 255 255 255 85 85 85 | ||
1817 | 0 0 0 85 85 85 0 0 0 85 85 85 170 170 170 255 255 255 | ||
1818 | 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1819 | 170 170 170 255 255 255 255 255 255 0 0 0 0 0 0 85 85 85 | ||
1820 | 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1821 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1822 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1823 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 | ||
1824 | 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 | ||
1825 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1826 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1827 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1828 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 | ||
1829 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 | ||
1830 | 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 | ||
1831 | 85 85 85 170 170 170 255 255 255 170 170 170 170 170 170 170 170 170 | ||
1832 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1833 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | ||
1834 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1835 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1836 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1837 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1838 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1839 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 | ||
1840 | 85 85 85 170 170 170 255 255 255 170 170 170 170 170 170 85 85 85 | ||
1841 | 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 170 170 170 | ||
1842 | 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 | ||
1843 | 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 170 170 170 | ||
1844 | 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1845 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1846 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1847 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1848 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1849 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1850 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1851 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1852 | 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 | ||
1853 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 | ||
1854 | 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 | ||
1855 | 0 0 0 85 85 85 170 170 170 170 170 170 255 255 85 85 85 85 | ||
1856 | 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1857 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1858 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1859 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1860 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1861 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1862 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1863 | 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 | ||
1864 | 85 85 85 170 170 170 170 170 170 170 170 170 170 85 0 85 85 85 | ||
1865 | 0 0 0 85 85 85 0 0 0 85 85 85 170 170 170 170 85 0 | ||
1866 | 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1867 | 170 85 0 170 170 170 85 85 85 0 0 0 85 85 85 85 85 85 | ||
1868 | 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1869 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1870 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1871 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1872 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1873 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1874 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1875 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1876 | 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255 | ||
1877 | 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1878 | 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 | ||
1879 | 0 0 0 85 85 85 170 85 0 170 170 170 170 170 170 85 85 85 | ||
1880 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1881 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | ||
1882 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1883 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1884 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1885 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1886 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1887 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 | ||
1888 | 85 85 85 170 85 0 85 255 85 170 85 0 170 170 170 85 85 85 | ||
1889 | 85 85 85 0 0 0 0 0 0 85 85 85 170 85 0 85 255 85 | ||
1890 | 170 85 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1891 | 85 85 85 85 85 85 170 85 0 0 0 0 85 85 85 85 85 85 | ||
1892 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1893 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1894 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1895 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1896 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1897 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1898 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1899 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1900 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 | ||
1901 | 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1902 | 170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 | ||
1903 | 0 0 0 0 0 0 170 170 170 170 85 0 170 170 170 170 85 0 | ||
1904 | 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1905 | 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1906 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1907 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1908 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1909 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1910 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1911 | 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 | ||
1912 | 85 85 85 85 85 85 255 85 85 170 170 170 85 255 85 170 85 0 | ||
1913 | 85 85 85 85 85 85 170 85 0 85 85 85 170 170 170 85 85 85 | ||
1914 | 170 170 170 170 85 0 85 85 85 85 85 85 85 85 85 85 85 85 | ||
1915 | 170 85 0 85 255 85 85 85 85 85 85 85 85 85 85 170 85 0 | ||
1916 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | ||
1917 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1918 | 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1919 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1920 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1921 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1922 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1923 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1924 | 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 170 170 170 | ||
1925 | 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1926 | 85 85 85 170 85 0 170 170 170 170 85 0 85 85 85 0 0 0 | ||
1927 | 85 85 85 85 85 85 85 255 85 170 170 170 170 170 170 170 85 0 | ||
1928 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1929 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1930 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1931 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1932 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1933 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1934 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | ||
1935 | 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 | ||
1936 | 85 85 85 85 85 85 85 255 85 255 85 85 170 170 170 170 170 170 | ||
1937 | 170 170 170 85 255 85 170 170 170 170 85 0 170 170 170 170 85 0 | ||
1938 | 170 170 170 85 85 85 85 255 85 170 85 0 170 170 170 170 85 0 | ||
1939 | 170 170 170 170 170 170 170 85 0 85 85 85 85 85 85 85 255 85 | ||
1940 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1941 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1942 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 | ||
1943 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1944 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1945 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1946 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1947 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1948 | 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 85 85 85 | ||
1949 | 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1950 | 85 85 85 85 85 85 255 255 85 85 85 85 85 85 85 85 85 85 | ||
1951 | 85 255 85 255 85 85 170 170 170 170 85 0 170 170 170 85 255 85 | ||
1952 | 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1953 | 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1954 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1955 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1956 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1957 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1958 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1959 | 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 | ||
1960 | 85 85 85 85 85 85 170 85 0 170 170 170 170 170 170 255 255 85 | ||
1961 | 170 170 170 255 85 85 170 170 170 170 170 170 255 255 85 170 170 170 | ||
1962 | 85 255 85 170 170 170 255 85 85 170 170 170 170 170 170 170 170 170 | ||
1963 | 170 170 170 170 170 170 170 170 170 170 85 0 170 170 170 170 85 0 | ||
1964 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 | ||
1965 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1966 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1967 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1968 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1969 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1970 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1971 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1972 | 0 0 0 85 85 85 170 170 170 85 85 85 0 0 0 85 85 85 | ||
1973 | 85 85 85 170 85 0 85 85 85 0 0 0 85 85 85 85 85 85 | ||
1974 | 85 85 85 170 85 0 170 170 170 170 170 170 255 255 85 170 170 170 | ||
1975 | 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 255 85 85 | ||
1976 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1977 | 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1978 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1979 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1980 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1981 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
1982 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
1983 | 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 | ||
1984 | 85 85 85 85 85 85 170 170 170 255 255 85 170 170 170 170 170 170 | ||
1985 | 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 170 85 0 | ||
1986 | 170 170 170 255 255 85 170 170 170 255 255 85 170 170 170 255 255 85 | ||
1987 | 170 170 170 255 255 85 170 170 170 170 170 170 85 255 85 170 85 0 | ||
1988 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1989 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
1990 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
1991 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
1992 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1993 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1994 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1995 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
1996 | 0 0 0 0 0 0 170 170 170 85 85 85 85 85 85 0 0 0 | ||
1997 | 85 85 85 85 85 85 170 170 170 85 85 85 170 170 170 170 85 0 | ||
1998 | 170 170 170 85 255 85 170 170 170 170 85 0 170 170 170 170 170 170 | ||
1999 | 255 255 85 170 170 170 170 170 170 255 255 255 255 255 85 170 170 170 | ||
2000 | 255 255 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2001 | 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
2002 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2003 | 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
2004 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2005 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2006 | 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 | ||
2007 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
2008 | 85 85 85 170 85 0 170 170 170 170 170 170 170 170 170 255 255 255 | ||
2009 | 170 170 170 255 255 255 255 255 85 170 170 170 255 255 85 170 170 170 | ||
2010 | 255 255 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 | ||
2011 | 170 170 170 170 170 170 170 170 170 255 85 85 170 170 170 170 170 170 | ||
2012 | 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
2013 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2014 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2015 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2016 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2017 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2018 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2019 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2020 | 0 0 0 0 0 0 85 85 85 85 85 85 170 85 0 85 85 85 | ||
2021 | 85 85 85 255 255 85 170 170 170 170 170 170 170 170 170 170 170 170 | ||
2022 | 255 255 85 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 | ||
2023 | 170 170 170 255 255 255 255 255 255 170 170 170 255 255 255 170 170 170 | ||
2024 | 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 | ||
2025 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2026 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2027 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2028 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2029 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2030 | 85 85 85 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 | ||
2031 | 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | ||
2032 | 85 85 85 85 255 85 170 170 170 255 255 85 255 255 255 255 255 255 | ||
2033 | 255 255 255 170 170 170 255 255 255 170 170 170 170 170 170 170 170 170 | ||
2034 | 170 170 170 170 170 170 255 255 85 170 170 170 255 255 85 255 255 255 | ||
2035 | 255 255 85 255 255 255 255 255 85 170 170 170 170 170 170 170 85 0 | ||
2036 | 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2037 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2038 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2039 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2040 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2041 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2042 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2043 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2044 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | ||
2045 | 85 85 85 170 170 170 255 255 85 170 170 170 255 255 85 170 170 170 | ||
2046 | 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 255 255 85 | ||
2047 | 255 255 255 255 255 255 255 255 85 255 255 255 255 255 255 170 170 170 | ||
2048 | 255 255 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 | ||
2049 | 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2050 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
2051 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2052 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2053 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2054 | 85 85 85 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 | ||
2055 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
2056 | 85 85 85 170 170 170 170 170 170 170 170 170 255 255 255 170 170 170 | ||
2057 | 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 255 255 85 | ||
2058 | 170 170 170 255 255 85 170 170 170 255 255 255 170 170 170 255 255 255 | ||
2059 | 255 255 255 255 255 255 170 170 170 255 255 85 170 170 170 255 255 85 | ||
2060 | 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
2061 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
2062 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2063 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2064 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2065 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2066 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2067 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2068 | 0 0 0 0 0 0 0 0 0 85 85 85 170 85 0 170 170 170 | ||
2069 | 255 255 85 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 | ||
2070 | 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 | ||
2071 | 255 255 255 170 170 170 255 255 255 255 255 255 170 170 170 255 255 255 | ||
2072 | 170 170 170 170 170 170 85 85 85 0 0 0 85 85 85 0 0 0 | ||
2073 | 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
2074 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2075 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2076 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2077 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2078 | 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2079 | 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 | ||
2080 | 85 85 85 170 85 0 255 255 255 170 170 170 255 255 255 255 255 255 | ||
2081 | 255 255 85 255 255 255 170 170 170 255 255 85 170 170 170 170 170 170 | ||
2082 | 170 170 170 170 170 170 170 170 170 255 255 85 255 255 255 255 255 255 | ||
2083 | 170 170 170 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 | ||
2084 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2085 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2086 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2087 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2088 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2089 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2090 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2091 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2092 | 0 0 0 0 0 0 0 0 0 85 85 85 85 255 85 170 170 170 | ||
2093 | 170 170 170 255 255 85 170 170 170 255 255 255 170 170 170 255 255 255 | ||
2094 | 255 255 255 255 255 255 255 255 85 170 170 170 170 170 170 255 255 255 | ||
2095 | 170 170 170 255 255 255 255 255 255 170 170 170 255 255 255 255 255 85 | ||
2096 | 170 170 170 170 85 0 85 85 85 0 0 0 0 0 0 85 85 85 | ||
2097 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2098 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2099 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
2100 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2101 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2102 | 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2103 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2104 | 85 85 85 170 170 170 170 170 170 255 255 85 170 170 170 255 255 255 | ||
2105 | 255 255 255 170 170 170 255 255 255 170 170 170 170 170 170 255 255 85 | ||
2106 | 170 170 170 255 255 85 170 170 170 255 255 255 170 170 170 255 255 255 | ||
2107 | 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 255 255 85 | ||
2108 | 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 | ||
2109 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2110 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2111 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2112 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2113 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2114 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2115 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2116 | 0 0 0 0 0 0 0 0 0 85 85 85 170 85 0 170 170 170 | ||
2117 | 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 | ||
2118 | 170 170 170 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 | ||
2119 | 255 255 85 255 255 255 170 170 170 255 255 255 170 170 170 170 170 170 | ||
2120 | 170 170 170 170 170 170 85 85 85 0 0 0 85 85 85 85 85 85 | ||
2121 | 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2122 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2123 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2124 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2125 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2126 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | ||
2127 | 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2128 | 85 85 85 85 85 85 170 170 170 170 170 170 255 255 255 170 170 170 | ||
2129 | 255 255 255 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 | ||
2130 | 255 85 85 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 | ||
2131 | 170 170 170 255 255 255 255 255 255 170 170 170 255 255 255 170 170 170 | ||
2132 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2133 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2134 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2135 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2136 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2137 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2138 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2139 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2140 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 | ||
2141 | 255 255 85 170 170 170 255 255 255 170 170 170 255 255 255 255 255 255 | ||
2142 | 255 255 85 255 255 255 170 170 170 255 255 85 170 170 170 170 170 170 | ||
2143 | 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 255 255 85 | ||
2144 | 170 170 170 170 85 0 85 85 85 0 0 0 85 85 85 0 0 0 | ||
2145 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2146 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2147 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2148 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2149 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2150 | 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 | ||
2151 | 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2152 | 0 0 0 85 85 85 170 170 170 255 255 85 170 170 170 170 170 170 | ||
2153 | 255 255 85 170 170 170 170 170 170 170 170 170 170 170 170 255 85 85 | ||
2154 | 85 255 85 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 | ||
2155 | 255 255 255 255 255 255 255 255 255 255 255 85 170 170 170 170 170 170 | ||
2156 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2157 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2158 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2159 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2160 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2161 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2162 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2163 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2164 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 85 | ||
2165 | 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 | ||
2166 | 255 255 255 170 170 170 170 170 170 170 170 170 170 170 170 255 85 85 | ||
2167 | 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 | ||
2168 | 170 170 170 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 | ||
2169 | 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2170 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2171 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2172 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2173 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2174 | 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 170 170 170 | ||
2175 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2176 | 0 0 0 85 85 85 170 85 0 170 170 170 170 170 170 170 170 170 | ||
2177 | 170 170 170 170 170 170 170 170 170 170 85 0 170 170 170 85 255 85 | ||
2178 | 255 85 85 170 170 170 255 255 85 170 170 170 170 170 170 255 255 255 | ||
2179 | 255 255 255 170 170 170 255 255 255 255 255 255 170 170 170 170 170 170 | ||
2180 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2181 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2182 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2183 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2184 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2185 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2186 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2187 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2188 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 | ||
2189 | 170 170 170 255 255 85 170 170 170 255 255 85 255 255 255 255 255 255 | ||
2190 | 170 170 170 170 170 170 255 255 85 170 170 170 255 85 85 85 255 85 | ||
2191 | 170 170 170 170 85 0 170 170 170 170 170 170 255 255 85 170 170 170 | ||
2192 | 170 85 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2193 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2194 | 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2195 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2196 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2197 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2198 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2199 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2200 | 0 0 0 85 85 85 85 85 85 85 85 85 170 170 170 255 255 85 | ||
2201 | 170 170 170 170 85 0 170 170 170 170 170 170 170 85 0 85 85 85 | ||
2202 | 170 170 170 170 85 0 85 85 85 170 170 170 170 170 170 170 170 170 | ||
2203 | 170 170 170 255 255 255 255 255 255 255 255 85 170 170 170 170 170 170 | ||
2204 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2205 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2206 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2207 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2208 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2209 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2210 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2211 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2212 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 85 0 | ||
2213 | 170 170 170 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170 | ||
2214 | 255 255 255 170 170 170 170 170 170 170 85 0 170 170 170 85 85 85 | ||
2215 | 170 170 170 170 170 170 170 85 0 170 170 170 170 85 0 85 85 85 | ||
2216 | 85 255 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2217 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2218 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2219 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2220 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2221 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2222 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2223 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | ||
2224 | 85 85 85 0 0 0 85 85 85 170 85 0 85 85 85 170 170 170 | ||
2225 | 170 85 0 170 170 170 85 255 85 170 85 0 170 170 170 85 85 85 | ||
2226 | 170 85 0 170 170 170 170 170 170 255 255 85 170 170 170 255 255 255 | ||
2227 | 255 255 85 255 255 255 170 170 170 170 170 170 170 170 170 170 85 0 | ||
2228 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2229 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2230 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2231 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2232 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2233 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2234 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2235 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2236 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2237 | 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 255 255 85 | ||
2238 | 170 170 170 255 255 85 170 170 170 170 170 170 85 255 85 170 170 170 | ||
2239 | 170 85 0 170 85 0 170 170 170 85 255 85 85 85 85 170 170 170 | ||
2240 | 170 85 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 | ||
2241 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 | ||
2242 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2243 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2244 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2245 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2246 | 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2247 | 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 85 85 85 | ||
2248 | 0 0 0 0 0 0 0 0 0 85 85 85 170 85 0 85 85 85 | ||
2249 | 170 170 170 170 85 0 170 170 170 85 85 85 170 170 170 170 85 0 | ||
2250 | 170 170 170 85 255 85 170 85 0 170 170 170 170 170 170 170 170 170 | ||
2251 | 255 255 255 170 170 170 255 255 255 255 255 255 170 170 170 85 85 85 | ||
2252 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2253 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2254 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2255 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2256 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2257 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2258 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2259 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2260 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2261 | 170 85 0 170 170 170 255 255 85 170 170 170 255 255 255 170 170 170 | ||
2262 | 170 170 170 170 170 170 170 170 170 170 85 0 170 170 170 170 85 0 | ||
2263 | 170 170 170 85 255 85 170 85 0 170 170 170 170 85 0 85 85 85 | ||
2264 | 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2265 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2266 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2267 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2268 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2269 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2270 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2271 | 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2272 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | ||
2273 | 85 255 85 170 170 170 170 85 0 170 170 170 170 85 0 85 255 85 | ||
2274 | 170 170 170 170 85 0 170 170 170 170 170 170 170 170 170 255 255 85 | ||
2275 | 170 170 170 255 255 255 170 170 170 170 170 170 170 170 170 0 0 0 | ||
2276 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2277 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2278 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2279 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2280 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2281 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2282 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2283 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2284 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2285 | 85 85 85 170 85 0 85 85 85 170 170 170 255 255 85 170 170 170 | ||
2286 | 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 170 85 0 | ||
2287 | 170 170 170 85 85 85 170 170 170 170 85 0 170 170 170 85 85 85 | ||
2288 | 170 85 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2289 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2290 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2291 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2292 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2293 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2294 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2295 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2296 | 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 170 85 0 | ||
2297 | 85 85 85 255 85 85 85 255 85 170 85 0 170 170 170 170 170 170 | ||
2298 | 170 85 0 170 170 170 85 85 85 255 255 85 170 170 170 170 170 170 | ||
2299 | 255 255 255 170 170 170 255 255 255 255 255 85 85 85 85 0 0 0 | ||
2300 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2301 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2302 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2303 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2304 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2305 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2306 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2307 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2308 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2309 | 0 0 0 85 85 85 170 170 170 170 85 0 170 170 170 170 170 170 | ||
2310 | 170 170 170 170 170 170 170 170 170 255 255 85 85 85 85 170 170 170 | ||
2311 | 85 255 85 255 85 85 170 170 170 85 255 85 255 85 85 85 255 85 | ||
2312 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2313 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2314 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2315 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2316 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2317 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2318 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2319 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2320 | 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 | ||
2321 | 85 85 85 85 255 85 255 85 85 170 170 170 85 255 85 170 85 0 | ||
2322 | 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 255 255 255 | ||
2323 | 170 170 170 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 | ||
2324 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2325 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2326 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2327 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2328 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2329 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2330 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2331 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2332 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2333 | 0 0 0 0 0 0 85 85 85 170 170 170 85 85 85 255 255 85 | ||
2334 | 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 255 255 85 | ||
2335 | 85 85 85 255 255 85 170 170 170 170 85 0 170 170 170 85 85 85 | ||
2336 | 170 85 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2337 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2338 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2339 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2340 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2341 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2342 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2343 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2344 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2345 | 170 170 170 170 85 0 170 170 170 170 85 0 170 170 170 170 170 170 | ||
2346 | 170 85 0 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 | ||
2347 | 255 255 85 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 | ||
2348 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2349 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2350 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2351 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2352 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2353 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2354 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2355 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2356 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2357 | 0 0 0 0 0 0 85 85 85 170 85 0 85 85 85 170 170 170 | ||
2358 | 170 85 0 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 | ||
2359 | 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 170 85 0 | ||
2360 | 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2361 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2362 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2363 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2364 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2365 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2366 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2367 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2368 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | ||
2369 | 170 85 0 85 255 85 170 170 170 170 170 170 255 255 85 170 170 170 | ||
2370 | 255 255 85 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 | ||
2371 | 255 255 255 170 170 170 255 255 85 85 85 85 0 0 0 0 0 0 | ||
2372 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2373 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2374 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2375 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2376 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2377 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2378 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2379 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2380 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2381 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 85 0 | ||
2382 | 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 255 255 85 | ||
2383 | 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 170 170 170 | ||
2384 | 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2385 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2386 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2387 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2388 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2389 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2390 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2391 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2392 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2393 | 85 85 85 170 85 0 170 170 170 170 85 0 170 170 170 170 170 170 | ||
2394 | 170 170 170 255 255 85 170 170 170 255 255 85 170 170 170 255 255 255 | ||
2395 | 170 170 170 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0 | ||
2396 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2397 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2398 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2399 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2400 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2401 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2402 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2403 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2404 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2405 | 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 | ||
2406 | 170 85 0 170 170 170 170 85 0 255 255 85 170 170 170 170 170 170 | ||
2407 | 170 170 170 170 170 170 255 255 85 170 170 170 255 255 85 170 170 170 | ||
2408 | 255 255 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2409 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2410 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2411 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2412 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2413 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2414 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2415 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2416 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | ||
2417 | 85 85 85 170 170 170 255 255 85 170 170 170 255 255 85 170 170 170 | ||
2418 | 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 | ||
2419 | 170 170 170 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 | ||
2420 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2421 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2422 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2423 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2424 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2425 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2426 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2427 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2428 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2429 | 0 0 0 0 0 0 0 0 0 0 0 0 0 170 0 85 85 85 | ||
2430 | 170 85 0 85 255 85 170 170 170 170 170 170 170 170 170 255 255 85 | ||
2431 | 255 255 255 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170 | ||
2432 | 170 170 170 255 255 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2433 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2434 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2435 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2436 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2437 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2438 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2439 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2440 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2441 | 170 85 0 170 170 170 170 170 170 170 170 170 170 170 170 255 255 85 | ||
2442 | 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170 255 255 255 | ||
2443 | 255 255 255 255 255 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2444 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2445 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2446 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2447 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2448 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2449 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2450 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2451 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2452 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2453 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2454 | 85 85 85 170 85 0 170 170 170 170 170 170 255 255 85 170 170 170 | ||
2455 | 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 255 255 255 | ||
2456 | 170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 | ||
2457 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2458 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2459 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2460 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2461 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2462 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2463 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2464 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 255 85 | ||
2465 | 170 170 170 255 255 85 170 170 170 255 255 85 255 255 255 255 255 255 | ||
2466 | 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 | ||
2467 | 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2468 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2469 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2470 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2471 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2472 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2473 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2474 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2475 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2476 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2477 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2478 | 85 85 85 85 85 85 85 85 85 170 85 0 170 170 170 170 170 170 | ||
2479 | 255 255 85 170 170 170 255 255 255 255 255 85 255 255 255 255 255 255 | ||
2480 | 170 170 170 255 255 85 170 170 170 85 85 85 0 0 0 0 0 0 | ||
2481 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2482 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2483 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2484 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2485 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2486 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2487 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2488 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 85 0 | ||
2489 | 170 170 170 170 170 170 170 170 170 255 255 255 170 170 170 255 255 255 | ||
2490 | 170 170 170 255 255 255 170 170 170 255 255 255 255 255 85 255 255 255 | ||
2491 | 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2492 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2493 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2494 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2495 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2496 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2497 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2498 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2499 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2500 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2501 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2502 | 85 85 85 170 85 0 85 85 85 170 170 170 170 170 170 170 170 170 | ||
2503 | 170 170 170 255 255 255 170 170 170 255 255 255 255 255 255 170 170 170 | ||
2504 | 255 255 85 170 170 170 170 170 170 170 85 0 85 85 85 0 0 0 | ||
2505 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2506 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2507 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2508 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2509 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2510 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2511 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2512 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 | ||
2513 | 255 255 85 170 170 170 255 255 85 170 170 170 255 255 255 255 255 255 | ||
2514 | 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 | ||
2515 | 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2516 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2517 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2518 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2519 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2520 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2521 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2522 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2523 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2524 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2525 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2526 | 0 0 0 85 85 85 85 85 85 85 85 85 170 85 0 170 170 170 | ||
2527 | 255 255 85 170 170 170 255 255 85 255 255 255 170 170 170 255 255 255 | ||
2528 | 170 170 170 170 170 170 170 170 170 170 170 170 0 0 0 0 0 0 | ||
2529 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2530 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2531 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2532 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2533 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2534 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2535 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2536 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 | ||
2537 | 170 85 0 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170 | ||
2538 | 255 255 255 255 255 255 170 170 170 255 255 255 255 255 85 170 170 170 | ||
2539 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2540 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2541 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2542 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2543 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2544 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2545 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2546 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2547 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2548 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2549 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2550 | 0 0 0 0 0 0 85 85 85 170 85 0 85 85 85 170 170 170 | ||
2551 | 170 170 170 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 | ||
2552 | 255 255 85 170 170 170 170 85 0 85 255 85 85 85 85 0 0 0 | ||
2553 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2554 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2555 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2556 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2557 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2558 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2559 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2560 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 85 0 | ||
2561 | 170 170 170 170 170 170 255 255 85 170 170 170 255 255 255 255 255 255 | ||
2562 | 255 255 85 255 255 255 170 170 170 255 255 255 170 170 170 85 85 85 | ||
2563 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2564 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2565 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2566 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2567 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2568 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2569 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2570 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2571 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2572 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2573 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2574 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | ||
2575 | 170 85 0 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 | ||
2576 | 170 170 170 170 170 170 170 170 170 170 85 0 0 0 0 0 0 0 | ||
2577 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2578 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2579 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2580 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2581 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2582 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2583 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2584 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | ||
2585 | 255 255 85 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 | ||
2586 | 255 255 255 170 170 170 255 255 85 170 170 170 85 85 85 85 85 85 | ||
2587 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2588 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2589 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2590 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2591 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2592 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2593 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2594 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2595 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2596 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2597 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2598 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | ||
2599 | 85 85 85 170 85 0 170 170 170 170 170 170 170 170 170 170 170 170 | ||
2600 | 170 85 0 170 170 170 170 85 0 85 85 85 0 0 0 0 0 0 | ||
2601 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2602 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2603 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2604 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2605 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2606 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2607 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2608 | 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 | ||
2609 | 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 | ||
2610 | 170 170 170 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 | ||
2611 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2612 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2613 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2614 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2615 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2616 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2617 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2618 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2619 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2620 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2621 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2622 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2623 | 85 85 85 85 85 85 85 85 85 170 85 0 85 85 85 170 85 0 | ||
2624 | 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2625 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2626 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2627 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2628 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2629 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2630 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2631 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2632 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 | ||
2633 | 85 85 85 170 85 0 170 170 170 170 170 170 170 170 170 255 255 85 | ||
2634 | 170 170 170 170 170 170 170 85 0 85 85 85 0 0 0 0 0 0 | ||
2635 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2636 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2637 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2638 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2639 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2640 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2641 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2642 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2643 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2644 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2645 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2646 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2647 | 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | ||
2648 | 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2649 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2650 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2651 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2652 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2653 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2654 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2655 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2656 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 | ||
2657 | 85 85 85 85 255 85 170 85 0 170 170 170 170 85 0 170 170 170 | ||
2658 | 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 | ||
2659 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2660 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2661 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2662 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2663 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2664 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2665 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2666 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2667 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2668 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2669 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2670 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2671 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2672 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2673 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2674 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2675 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2676 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2677 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2678 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2679 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2680 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2681 | 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 | ||
2682 | 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2683 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2684 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2685 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2686 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2687 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2688 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2689 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2690 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2691 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2692 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2693 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2694 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2695 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2696 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2697 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2698 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2699 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2700 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2701 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2702 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2703 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2704 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2705 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2706 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2707 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2708 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2709 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2710 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2711 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2712 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2713 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2714 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2715 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2716 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2717 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2718 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2719 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2720 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2721 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2722 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2723 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2724 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2725 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2726 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2727 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2728 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2729 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2730 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2731 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2732 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2733 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2734 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2735 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2736 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2737 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2738 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
2739 | 0 0 0 0 0 0 0 0 0 0 0 0 | ||
diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c index 84f63205c46..0889d50c328 100644 --- a/drivers/video/pxafb.c +++ b/drivers/video/pxafb.c | |||
@@ -1439,7 +1439,7 @@ static void pxafb_disable_controller(struct pxafb_info *fbi) | |||
1439 | static irqreturn_t pxafb_handle_irq(int irq, void *dev_id) | 1439 | static irqreturn_t pxafb_handle_irq(int irq, void *dev_id) |
1440 | { | 1440 | { |
1441 | struct pxafb_info *fbi = dev_id; | 1441 | struct pxafb_info *fbi = dev_id; |
1442 | unsigned int lccr0, lcsr, lcsr1; | 1442 | unsigned int lccr0, lcsr; |
1443 | 1443 | ||
1444 | lcsr = lcd_readl(fbi, LCSR); | 1444 | lcsr = lcd_readl(fbi, LCSR); |
1445 | if (lcsr & LCSR_LDD) { | 1445 | if (lcsr & LCSR_LDD) { |
@@ -1455,14 +1455,16 @@ static irqreturn_t pxafb_handle_irq(int irq, void *dev_id) | |||
1455 | lcd_writel(fbi, LCSR, lcsr); | 1455 | lcd_writel(fbi, LCSR, lcsr); |
1456 | 1456 | ||
1457 | #ifdef CONFIG_FB_PXA_OVERLAY | 1457 | #ifdef CONFIG_FB_PXA_OVERLAY |
1458 | lcsr1 = lcd_readl(fbi, LCSR1); | 1458 | { |
1459 | if (lcsr1 & LCSR1_BS(1)) | 1459 | unsigned int lcsr1 = lcd_readl(fbi, LCSR1); |
1460 | complete(&fbi->overlay[0].branch_done); | 1460 | if (lcsr1 & LCSR1_BS(1)) |
1461 | complete(&fbi->overlay[0].branch_done); | ||
1461 | 1462 | ||
1462 | if (lcsr1 & LCSR1_BS(2)) | 1463 | if (lcsr1 & LCSR1_BS(2)) |
1463 | complete(&fbi->overlay[1].branch_done); | 1464 | complete(&fbi->overlay[1].branch_done); |
1464 | 1465 | ||
1465 | lcd_writel(fbi, LCSR1, lcsr1); | 1466 | lcd_writel(fbi, LCSR1, lcsr1); |
1467 | } | ||
1466 | #endif | 1468 | #endif |
1467 | return IRQ_HANDLED; | 1469 | return IRQ_HANDLED; |
1468 | } | 1470 | } |
diff --git a/drivers/video/s3fb.c b/drivers/video/s3fb.c index 4dcec48a1d7..c3fad34309e 100644 --- a/drivers/video/s3fb.c +++ b/drivers/video/s3fb.c | |||
@@ -45,11 +45,11 @@ struct s3fb_info { | |||
45 | static const struct svga_fb_format s3fb_formats[] = { | 45 | static const struct svga_fb_format s3fb_formats[] = { |
46 | { 0, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, | 46 | { 0, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, |
47 | FB_TYPE_TEXT, FB_AUX_TEXT_SVGA_STEP4, FB_VISUAL_PSEUDOCOLOR, 8, 16}, | 47 | FB_TYPE_TEXT, FB_AUX_TEXT_SVGA_STEP4, FB_VISUAL_PSEUDOCOLOR, 8, 16}, |
48 | { 4, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, | 48 | { 4, {0, 4, 0}, {0, 4, 0}, {0, 4, 0}, {0, 0, 0}, 0, |
49 | FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 8, 16}, | 49 | FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 8, 16}, |
50 | { 4, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 1, | 50 | { 4, {0, 4, 0}, {0, 4, 0}, {0, 4, 0}, {0, 0, 0}, 1, |
51 | FB_TYPE_INTERLEAVED_PLANES, 1, FB_VISUAL_PSEUDOCOLOR, 8, 16}, | 51 | FB_TYPE_INTERLEAVED_PLANES, 1, FB_VISUAL_PSEUDOCOLOR, 8, 16}, |
52 | { 8, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, | 52 | { 8, {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0}, 0, |
53 | FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 4, 8}, | 53 | FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 4, 8}, |
54 | {16, {10, 5, 0}, {5, 5, 0}, {0, 5, 0}, {0, 0, 0}, 0, | 54 | {16, {10, 5, 0}, {5, 5, 0}, {0, 5, 0}, {0, 0, 0}, 0, |
55 | FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_TRUECOLOR, 2, 4}, | 55 | FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_TRUECOLOR, 2, 4}, |
diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c index fad58cf9ef7..10ddad8e17d 100644 --- a/drivers/video/sa1100fb.c +++ b/drivers/video/sa1100fb.c | |||
@@ -199,16 +199,20 @@ | |||
199 | extern void (*sa1100fb_backlight_power)(int on); | 199 | extern void (*sa1100fb_backlight_power)(int on); |
200 | extern void (*sa1100fb_lcd_power)(int on); | 200 | extern void (*sa1100fb_lcd_power)(int on); |
201 | 201 | ||
202 | /* | 202 | static struct sa1100fb_rgb rgb_4 = { |
203 | * IMHO this looks wrong. In 8BPP, length should be 8. | ||
204 | */ | ||
205 | static struct sa1100fb_rgb rgb_8 = { | ||
206 | .red = { .offset = 0, .length = 4, }, | 203 | .red = { .offset = 0, .length = 4, }, |
207 | .green = { .offset = 0, .length = 4, }, | 204 | .green = { .offset = 0, .length = 4, }, |
208 | .blue = { .offset = 0, .length = 4, }, | 205 | .blue = { .offset = 0, .length = 4, }, |
209 | .transp = { .offset = 0, .length = 0, }, | 206 | .transp = { .offset = 0, .length = 0, }, |
210 | }; | 207 | }; |
211 | 208 | ||
209 | static struct sa1100fb_rgb rgb_8 = { | ||
210 | .red = { .offset = 0, .length = 8, }, | ||
211 | .green = { .offset = 0, .length = 8, }, | ||
212 | .blue = { .offset = 0, .length = 8, }, | ||
213 | .transp = { .offset = 0, .length = 0, }, | ||
214 | }; | ||
215 | |||
212 | static struct sa1100fb_rgb def_rgb_16 = { | 216 | static struct sa1100fb_rgb def_rgb_16 = { |
213 | .red = { .offset = 11, .length = 5, }, | 217 | .red = { .offset = 11, .length = 5, }, |
214 | .green = { .offset = 5, .length = 6, }, | 218 | .green = { .offset = 5, .length = 6, }, |
@@ -613,7 +617,7 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
613 | DPRINTK("var->bits_per_pixel=%d\n", var->bits_per_pixel); | 617 | DPRINTK("var->bits_per_pixel=%d\n", var->bits_per_pixel); |
614 | switch (var->bits_per_pixel) { | 618 | switch (var->bits_per_pixel) { |
615 | case 4: | 619 | case 4: |
616 | rgbidx = RGB_8; | 620 | rgbidx = RGB_4; |
617 | break; | 621 | break; |
618 | case 8: | 622 | case 8: |
619 | rgbidx = RGB_8; | 623 | rgbidx = RGB_8; |
@@ -1382,6 +1386,7 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev) | |||
1382 | fbi->fb.monspecs = monspecs; | 1386 | fbi->fb.monspecs = monspecs; |
1383 | fbi->fb.pseudo_palette = (fbi + 1); | 1387 | fbi->fb.pseudo_palette = (fbi + 1); |
1384 | 1388 | ||
1389 | fbi->rgb[RGB_4] = &rgb_4; | ||
1385 | fbi->rgb[RGB_8] = &rgb_8; | 1390 | fbi->rgb[RGB_8] = &rgb_8; |
1386 | fbi->rgb[RGB_16] = &def_rgb_16; | 1391 | fbi->rgb[RGB_16] = &def_rgb_16; |
1387 | 1392 | ||
diff --git a/drivers/video/sa1100fb.h b/drivers/video/sa1100fb.h index 86831db9a04..1c3b459865d 100644 --- a/drivers/video/sa1100fb.h +++ b/drivers/video/sa1100fb.h | |||
@@ -57,9 +57,10 @@ struct sa1100fb_lcd_reg { | |||
57 | unsigned long lccr3; | 57 | unsigned long lccr3; |
58 | }; | 58 | }; |
59 | 59 | ||
60 | #define RGB_8 (0) | 60 | #define RGB_4 (0) |
61 | #define RGB_16 (1) | 61 | #define RGB_8 (1) |
62 | #define NR_RGB 2 | 62 | #define RGB_16 (2) |
63 | #define NR_RGB 3 | ||
63 | 64 | ||
64 | struct sa1100fb_info { | 65 | struct sa1100fb_info { |
65 | struct fb_info fb; | 66 | struct fb_info fb; |
diff --git a/drivers/video/sis/sis_main.c b/drivers/video/sis/sis_main.c index 346d6458cf7..7e17ee95a97 100644 --- a/drivers/video/sis/sis_main.c +++ b/drivers/video/sis/sis_main.c | |||
@@ -1129,7 +1129,7 @@ sisfb_bpp_to_var(struct sis_video_info *ivideo, struct fb_var_screeninfo *var) | |||
1129 | switch(var->bits_per_pixel) { | 1129 | switch(var->bits_per_pixel) { |
1130 | case 8: | 1130 | case 8: |
1131 | var->red.offset = var->green.offset = var->blue.offset = 0; | 1131 | var->red.offset = var->green.offset = var->blue.offset = 0; |
1132 | var->red.length = var->green.length = var->blue.length = 6; | 1132 | var->red.length = var->green.length = var->blue.length = 8; |
1133 | break; | 1133 | break; |
1134 | case 16: | 1134 | case 16: |
1135 | var->red.offset = 11; | 1135 | var->red.offset = 11; |
diff --git a/drivers/video/skeletonfb.c b/drivers/video/skeletonfb.c index a439159204a..89158bc71da 100644 --- a/drivers/video/skeletonfb.c +++ b/drivers/video/skeletonfb.c | |||
@@ -308,9 +308,11 @@ static int xxxfb_setcolreg(unsigned regno, unsigned red, unsigned green, | |||
308 | * color depth = SUM(var->{color}.length) | 308 | * color depth = SUM(var->{color}.length) |
309 | * | 309 | * |
310 | * Pseudocolor: | 310 | * Pseudocolor: |
311 | * var->{color}.offset is 0 | 311 | * var->{color}.offset is 0 unless the palette index takes less than |
312 | * var->{color}.length contains width of DAC or the number of unique | 312 | * bits_per_pixel bits and is stored in the upper |
313 | * colors available (color depth) | 313 | * bits of the pixel value |
314 | * var->{color}.length is set so that 1 << length is the number of | ||
315 | * available palette entries | ||
314 | * pseudo_palette is not used | 316 | * pseudo_palette is not used |
315 | * RAMDAC[X] is programmed to (red, green, blue) | 317 | * RAMDAC[X] is programmed to (red, green, blue) |
316 | * color depth = var->{color}.length | 318 | * color depth = var->{color}.length |
diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c index 0b370aebdbf..421770b5e6a 100644 --- a/drivers/video/uvesafb.c +++ b/drivers/video/uvesafb.c | |||
@@ -55,6 +55,7 @@ static u16 maxvf __devinitdata; /* maximum vertical frequency */ | |||
55 | static u16 maxhf __devinitdata; /* maximum horizontal frequency */ | 55 | static u16 maxhf __devinitdata; /* maximum horizontal frequency */ |
56 | static u16 vbemode __devinitdata; /* force use of a specific VBE mode */ | 56 | static u16 vbemode __devinitdata; /* force use of a specific VBE mode */ |
57 | static char *mode_option __devinitdata; | 57 | static char *mode_option __devinitdata; |
58 | static u8 dac_width = 6; | ||
58 | 59 | ||
59 | static struct uvesafb_ktask *uvfb_tasks[UVESAFB_TASKS_MAX]; | 60 | static struct uvesafb_ktask *uvfb_tasks[UVESAFB_TASKS_MAX]; |
60 | static DEFINE_MUTEX(uvfb_lock); | 61 | static DEFINE_MUTEX(uvfb_lock); |
@@ -303,22 +304,10 @@ static void uvesafb_setup_var(struct fb_var_screeninfo *var, | |||
303 | var->blue.offset = 0; | 304 | var->blue.offset = 0; |
304 | var->transp.offset = 0; | 305 | var->transp.offset = 0; |
305 | 306 | ||
306 | /* | 307 | var->red.length = 8; |
307 | * We're assuming that we can switch the DAC to 8 bits. If | 308 | var->green.length = 8; |
308 | * this proves to be incorrect, we'll update the fields | 309 | var->blue.length = 8; |
309 | * later in set_par(). | 310 | var->transp.length = 0; |
310 | */ | ||
311 | if (par->vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) { | ||
312 | var->red.length = 8; | ||
313 | var->green.length = 8; | ||
314 | var->blue.length = 8; | ||
315 | var->transp.length = 0; | ||
316 | } else { | ||
317 | var->red.length = 6; | ||
318 | var->green.length = 6; | ||
319 | var->blue.length = 6; | ||
320 | var->transp.length = 0; | ||
321 | } | ||
322 | } | 311 | } |
323 | } | 312 | } |
324 | 313 | ||
@@ -1006,7 +995,7 @@ static int uvesafb_setcolreg(unsigned regno, unsigned red, unsigned green, | |||
1006 | struct fb_info *info) | 995 | struct fb_info *info) |
1007 | { | 996 | { |
1008 | struct uvesafb_pal_entry entry; | 997 | struct uvesafb_pal_entry entry; |
1009 | int shift = 16 - info->var.green.length; | 998 | int shift = 16 - dac_width; |
1010 | int err = 0; | 999 | int err = 0; |
1011 | 1000 | ||
1012 | if (regno >= info->cmap.len) | 1001 | if (regno >= info->cmap.len) |
@@ -1055,7 +1044,7 @@ static int uvesafb_setcolreg(unsigned regno, unsigned red, unsigned green, | |||
1055 | static int uvesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info) | 1044 | static int uvesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info) |
1056 | { | 1045 | { |
1057 | struct uvesafb_pal_entry *entries; | 1046 | struct uvesafb_pal_entry *entries; |
1058 | int shift = 16 - info->var.green.length; | 1047 | int shift = 16 - dac_width; |
1059 | int i, err = 0; | 1048 | int i, err = 0; |
1060 | 1049 | ||
1061 | if (info->var.bits_per_pixel == 8) { | 1050 | if (info->var.bits_per_pixel == 8) { |
@@ -1317,13 +1306,9 @@ setmode: | |||
1317 | err = uvesafb_exec(task); | 1306 | err = uvesafb_exec(task); |
1318 | if (err || (task->t.regs.eax & 0xffff) != 0x004f || | 1307 | if (err || (task->t.regs.eax & 0xffff) != 0x004f || |
1319 | ((task->t.regs.ebx & 0xff00) >> 8) != 8) { | 1308 | ((task->t.regs.ebx & 0xff00) >> 8) != 8) { |
1320 | /* | 1309 | dac_width = 6; |
1321 | * We've failed to set the DAC palette format - | 1310 | } else { |
1322 | * time to correct var. | 1311 | dac_width = 8; |
1323 | */ | ||
1324 | info->var.red.length = 6; | ||
1325 | info->var.green.length = 6; | ||
1326 | info->var.blue.length = 6; | ||
1327 | } | 1312 | } |
1328 | } | 1313 | } |
1329 | 1314 | ||
diff --git a/drivers/video/vfb.c b/drivers/video/vfb.c index cc919ae4657..050d432c7d9 100644 --- a/drivers/video/vfb.c +++ b/drivers/video/vfb.c | |||
@@ -318,13 +318,16 @@ static int vfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
318 | * {hardwarespecific} contains width of RAMDAC | 318 | * {hardwarespecific} contains width of RAMDAC |
319 | * cmap[X] is programmed to (X << red.offset) | (X << green.offset) | (X << blue.offset) | 319 | * cmap[X] is programmed to (X << red.offset) | (X << green.offset) | (X << blue.offset) |
320 | * RAMDAC[X] is programmed to (red, green, blue) | 320 | * RAMDAC[X] is programmed to (red, green, blue) |
321 | * | 321 | * |
322 | * Pseudocolor: | 322 | * Pseudocolor: |
323 | * uses offset = 0 && length = RAMDAC register width. | 323 | * var->{color}.offset is 0 unless the palette index takes less than |
324 | * var->{color}.offset is 0 | 324 | * bits_per_pixel bits and is stored in the upper |
325 | * var->{color}.length contains widht of DAC | 325 | * bits of the pixel value |
326 | * var->{color}.length is set so that 1 << length is the number of available | ||
327 | * palette entries | ||
326 | * cmap is not used | 328 | * cmap is not used |
327 | * RAMDAC[X] is programmed to (red, green, blue) | 329 | * RAMDAC[X] is programmed to (red, green, blue) |
330 | * | ||
328 | * Truecolor: | 331 | * Truecolor: |
329 | * does not use DAC. Usually 3 are present. | 332 | * does not use DAC. Usually 3 are present. |
330 | * var->{color}.offset contains start of bitfield | 333 | * var->{color}.offset contains start of bitfield |
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 59268266b79..9c76a061a04 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c | |||
@@ -190,7 +190,8 @@ static int balloon(void *_vballoon) | |||
190 | try_to_freeze(); | 190 | try_to_freeze(); |
191 | wait_event_interruptible(vb->config_change, | 191 | wait_event_interruptible(vb->config_change, |
192 | (diff = towards_target(vb)) != 0 | 192 | (diff = towards_target(vb)) != 0 |
193 | || kthread_should_stop()); | 193 | || kthread_should_stop() |
194 | || freezing(current)); | ||
194 | if (diff > 0) | 195 | if (diff > 0) |
195 | fill_balloon(vb, diff); | 196 | fill_balloon(vb, diff); |
196 | else if (diff < 0) | 197 | else if (diff < 0) |
diff --git a/drivers/watchdog/orion5x_wdt.c b/drivers/watchdog/orion5x_wdt.c index 7529616739d..2cde568e4fb 100644 --- a/drivers/watchdog/orion5x_wdt.c +++ b/drivers/watchdog/orion5x_wdt.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/uaccess.h> | 22 | #include <linux/uaccess.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/spinlock.h> | 24 | #include <linux/spinlock.h> |
25 | #include <mach/bridge-regs.h> | ||
25 | #include <plat/orion5x_wdt.h> | 26 | #include <plat/orion5x_wdt.h> |
26 | 27 | ||
27 | /* | 28 | /* |
diff --git a/drivers/xen/cpu_hotplug.c b/drivers/xen/cpu_hotplug.c index 5f54c01c156..bdfd584ad85 100644 --- a/drivers/xen/cpu_hotplug.c +++ b/drivers/xen/cpu_hotplug.c | |||
@@ -21,29 +21,41 @@ static void disable_hotplug_cpu(int cpu) | |||
21 | set_cpu_present(cpu, false); | 21 | set_cpu_present(cpu, false); |
22 | } | 22 | } |
23 | 23 | ||
24 | static void vcpu_hotplug(unsigned int cpu) | 24 | static int vcpu_online(unsigned int cpu) |
25 | { | 25 | { |
26 | int err; | 26 | int err; |
27 | char dir[32], state[32]; | 27 | char dir[32], state[32]; |
28 | 28 | ||
29 | if (!cpu_possible(cpu)) | ||
30 | return; | ||
31 | |||
32 | sprintf(dir, "cpu/%u", cpu); | 29 | sprintf(dir, "cpu/%u", cpu); |
33 | err = xenbus_scanf(XBT_NIL, dir, "availability", "%s", state); | 30 | err = xenbus_scanf(XBT_NIL, dir, "availability", "%s", state); |
34 | if (err != 1) { | 31 | if (err != 1) { |
35 | printk(KERN_ERR "XENBUS: Unable to read cpu state\n"); | 32 | printk(KERN_ERR "XENBUS: Unable to read cpu state\n"); |
36 | return; | 33 | return err; |
37 | } | 34 | } |
38 | 35 | ||
39 | if (strcmp(state, "online") == 0) { | 36 | if (strcmp(state, "online") == 0) |
37 | return 1; | ||
38 | else if (strcmp(state, "offline") == 0) | ||
39 | return 0; | ||
40 | |||
41 | printk(KERN_ERR "XENBUS: unknown state(%s) on CPU%d\n", state, cpu); | ||
42 | return -EINVAL; | ||
43 | } | ||
44 | static void vcpu_hotplug(unsigned int cpu) | ||
45 | { | ||
46 | if (!cpu_possible(cpu)) | ||
47 | return; | ||
48 | |||
49 | switch (vcpu_online(cpu)) { | ||
50 | case 1: | ||
40 | enable_hotplug_cpu(cpu); | 51 | enable_hotplug_cpu(cpu); |
41 | } else if (strcmp(state, "offline") == 0) { | 52 | break; |
53 | case 0: | ||
42 | (void)cpu_down(cpu); | 54 | (void)cpu_down(cpu); |
43 | disable_hotplug_cpu(cpu); | 55 | disable_hotplug_cpu(cpu); |
44 | } else { | 56 | break; |
45 | printk(KERN_ERR "XENBUS: unknown state(%s) on CPU%d\n", | 57 | default: |
46 | state, cpu); | 58 | break; |
47 | } | 59 | } |
48 | } | 60 | } |
49 | 61 | ||
@@ -64,12 +76,20 @@ static void handle_vcpu_hotplug_event(struct xenbus_watch *watch, | |||
64 | static int setup_cpu_watcher(struct notifier_block *notifier, | 76 | static int setup_cpu_watcher(struct notifier_block *notifier, |
65 | unsigned long event, void *data) | 77 | unsigned long event, void *data) |
66 | { | 78 | { |
79 | int cpu; | ||
67 | static struct xenbus_watch cpu_watch = { | 80 | static struct xenbus_watch cpu_watch = { |
68 | .node = "cpu", | 81 | .node = "cpu", |
69 | .callback = handle_vcpu_hotplug_event}; | 82 | .callback = handle_vcpu_hotplug_event}; |
70 | 83 | ||
71 | (void)register_xenbus_watch(&cpu_watch); | 84 | (void)register_xenbus_watch(&cpu_watch); |
72 | 85 | ||
86 | for_each_possible_cpu(cpu) { | ||
87 | if (vcpu_online(cpu) == 0) { | ||
88 | (void)cpu_down(cpu); | ||
89 | cpu_clear(cpu, cpu_present_map); | ||
90 | } | ||
91 | } | ||
92 | |||
73 | return NOTIFY_DONE; | 93 | return NOTIFY_DONE; |
74 | } | 94 | } |
75 | 95 | ||
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c index 0d61db1e7b4..4b5b84837ee 100644 --- a/drivers/xen/manage.c +++ b/drivers/xen/manage.c | |||
@@ -62,14 +62,15 @@ static int xen_suspend(void *data) | |||
62 | gnttab_resume(); | 62 | gnttab_resume(); |
63 | xen_mm_unpin_all(); | 63 | xen_mm_unpin_all(); |
64 | 64 | ||
65 | sysdev_resume(); | ||
66 | |||
67 | if (!*cancelled) { | 65 | if (!*cancelled) { |
68 | xen_irq_resume(); | 66 | xen_irq_resume(); |
69 | xen_console_resume(); | 67 | xen_console_resume(); |
70 | xen_timer_resume(); | 68 | xen_timer_resume(); |
71 | } | 69 | } |
72 | 70 | ||
71 | sysdev_resume(); | ||
72 | device_power_up(PMSG_RESUME); | ||
73 | |||
73 | return 0; | 74 | return 0; |
74 | } | 75 | } |
75 | 76 | ||