diff options
Diffstat (limited to 'drivers')
661 files changed, 14523 insertions, 11350 deletions
diff --git a/drivers/Kconfig b/drivers/Kconfig index 4fb134d50da..34f40ea0ba6 100644 --- a/drivers/Kconfig +++ b/drivers/Kconfig | |||
@@ -58,6 +58,8 @@ source "drivers/power/Kconfig" | |||
58 | 58 | ||
59 | source "drivers/hwmon/Kconfig" | 59 | source "drivers/hwmon/Kconfig" |
60 | 60 | ||
61 | source "drivers/watchdog/Kconfig" | ||
62 | |||
61 | source "drivers/ssb/Kconfig" | 63 | source "drivers/ssb/Kconfig" |
62 | 64 | ||
63 | source "drivers/mfd/Kconfig" | 65 | source "drivers/mfd/Kconfig" |
diff --git a/drivers/Makefile b/drivers/Makefile index 174c27eb443..cfe38ffff28 100644 --- a/drivers/Makefile +++ b/drivers/Makefile | |||
@@ -66,7 +66,7 @@ obj-y += i2c/ | |||
66 | obj-$(CONFIG_W1) += w1/ | 66 | obj-$(CONFIG_W1) += w1/ |
67 | obj-$(CONFIG_POWER_SUPPLY) += power/ | 67 | obj-$(CONFIG_POWER_SUPPLY) += power/ |
68 | obj-$(CONFIG_HWMON) += hwmon/ | 68 | obj-$(CONFIG_HWMON) += hwmon/ |
69 | obj-$(CONFIG_WATCHDOG) += char/watchdog/ | 69 | obj-$(CONFIG_WATCHDOG) += watchdog/ |
70 | obj-$(CONFIG_PHONE) += telephony/ | 70 | obj-$(CONFIG_PHONE) += telephony/ |
71 | obj-$(CONFIG_MD) += md/ | 71 | obj-$(CONFIG_MD) += md/ |
72 | obj-$(CONFIG_BT) += bluetooth/ | 72 | obj-$(CONFIG_BT) += bluetooth/ |
@@ -76,6 +76,7 @@ obj-$(CONFIG_MCA) += mca/ | |||
76 | obj-$(CONFIG_EISA) += eisa/ | 76 | obj-$(CONFIG_EISA) += eisa/ |
77 | obj-$(CONFIG_LGUEST_GUEST) += lguest/ | 77 | obj-$(CONFIG_LGUEST_GUEST) += lguest/ |
78 | obj-$(CONFIG_CPU_FREQ) += cpufreq/ | 78 | obj-$(CONFIG_CPU_FREQ) += cpufreq/ |
79 | obj-$(CONFIG_CPU_IDLE) += cpuidle/ | ||
79 | obj-$(CONFIG_MMC) += mmc/ | 80 | obj-$(CONFIG_MMC) += mmc/ |
80 | obj-$(CONFIG_NEW_LEDS) += leds/ | 81 | obj-$(CONFIG_NEW_LEDS) += leds/ |
81 | obj-$(CONFIG_INFINIBAND) += infiniband/ | 82 | obj-$(CONFIG_INFINIBAND) += infiniband/ |
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 4875f0149eb..5d0e26a5c34 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig | |||
@@ -52,7 +52,7 @@ config ACPI_PROCFS | |||
52 | depends on PROC_FS | 52 | depends on PROC_FS |
53 | ---help--- | 53 | ---help--- |
54 | For backwards compatibility, this option allows | 54 | For backwards compatibility, this option allows |
55 | depricated /proc/acpi/ files to exist, even when | 55 | deprecated /proc/acpi/ files to exist, even when |
56 | they have been replaced by functions in /sys. | 56 | they have been replaced by functions in /sys. |
57 | The deprecated files (and their replacements) include: | 57 | The deprecated files (and their replacements) include: |
58 | 58 | ||
@@ -88,7 +88,7 @@ config ACPI_PROC_EVENT | |||
88 | 88 | ||
89 | config ACPI_AC | 89 | config ACPI_AC |
90 | tristate "AC Adapter" | 90 | tristate "AC Adapter" |
91 | depends on X86 | 91 | depends on X86 && POWER_SUPPLY |
92 | default y | 92 | default y |
93 | help | 93 | help |
94 | This driver adds support for the AC Adapter object, which indicates | 94 | This driver adds support for the AC Adapter object, which indicates |
@@ -97,7 +97,7 @@ config ACPI_AC | |||
97 | 97 | ||
98 | config ACPI_BATTERY | 98 | config ACPI_BATTERY |
99 | tristate "Battery" | 99 | tristate "Battery" |
100 | depends on X86 | 100 | depends on X86 && POWER_SUPPLY |
101 | default y | 101 | default y |
102 | help | 102 | help |
103 | This driver adds support for battery information through | 103 | This driver adds support for battery information through |
@@ -117,6 +117,7 @@ config ACPI_BUTTON | |||
117 | config ACPI_VIDEO | 117 | config ACPI_VIDEO |
118 | tristate "Video" | 118 | tristate "Video" |
119 | depends on X86 && BACKLIGHT_CLASS_DEVICE && VIDEO_OUTPUT_CONTROL | 119 | depends on X86 && BACKLIGHT_CLASS_DEVICE && VIDEO_OUTPUT_CONTROL |
120 | depends on INPUT | ||
120 | help | 121 | help |
121 | This driver implement the ACPI Extensions For Display Adapters | 122 | This driver implement the ACPI Extensions For Display Adapters |
122 | for integrated graphics devices on motherboard, as specified in | 123 | for integrated graphics devices on motherboard, as specified in |
@@ -349,12 +350,11 @@ config ACPI_HOTPLUG_MEMORY | |||
349 | $>modprobe acpi_memhotplug | 350 | $>modprobe acpi_memhotplug |
350 | 351 | ||
351 | config ACPI_SBS | 352 | config ACPI_SBS |
352 | tristate "Smart Battery System (EXPERIMENTAL)" | 353 | tristate "Smart Battery System" |
353 | depends on X86 | 354 | depends on X86 |
354 | depends on EXPERIMENTAL | 355 | depends on POWER_SUPPLY |
355 | help | 356 | help |
356 | This driver adds support for the Smart Battery System. | 357 | This driver adds support for the Smart Battery System, another |
357 | A "Smart Battery" is quite old and quite rare compared | 358 | type of access to battery information, found on some laptops. |
358 | to today's ACPI "Control Method" battery. | ||
359 | 359 | ||
360 | endif # ACPI | 360 | endif # ACPI |
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index d4336f1730e..54e3ab0e5fc 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile | |||
@@ -60,3 +60,4 @@ obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o | |||
60 | obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o | 60 | obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o |
61 | obj-y += cm_sbs.o | 61 | obj-y += cm_sbs.o |
62 | obj-$(CONFIG_ACPI_SBS) += sbs.o | 62 | obj-$(CONFIG_ACPI_SBS) += sbs.o |
63 | obj-$(CONFIG_ACPI_SBS) += sbshc.o | ||
diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c index 26d70702b31..e03de37a750 100644 --- a/drivers/acpi/ac.c +++ b/drivers/acpi/ac.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/types.h> | 29 | #include <linux/types.h> |
30 | #include <linux/proc_fs.h> | 30 | #include <linux/proc_fs.h> |
31 | #include <linux/seq_file.h> | 31 | #include <linux/seq_file.h> |
32 | #include <linux/power_supply.h> | ||
32 | #include <acpi/acpi_bus.h> | 33 | #include <acpi/acpi_bus.h> |
33 | #include <acpi/acpi_drivers.h> | 34 | #include <acpi/acpi_drivers.h> |
34 | 35 | ||
@@ -72,16 +73,37 @@ static struct acpi_driver acpi_ac_driver = { | |||
72 | }; | 73 | }; |
73 | 74 | ||
74 | struct acpi_ac { | 75 | struct acpi_ac { |
76 | struct power_supply charger; | ||
75 | struct acpi_device * device; | 77 | struct acpi_device * device; |
76 | unsigned long state; | 78 | unsigned long state; |
77 | }; | 79 | }; |
78 | 80 | ||
81 | #define to_acpi_ac(x) container_of(x, struct acpi_ac, charger); | ||
82 | |||
79 | static const struct file_operations acpi_ac_fops = { | 83 | static const struct file_operations acpi_ac_fops = { |
80 | .open = acpi_ac_open_fs, | 84 | .open = acpi_ac_open_fs, |
81 | .read = seq_read, | 85 | .read = seq_read, |
82 | .llseek = seq_lseek, | 86 | .llseek = seq_lseek, |
83 | .release = single_release, | 87 | .release = single_release, |
84 | }; | 88 | }; |
89 | static int get_ac_property(struct power_supply *psy, | ||
90 | enum power_supply_property psp, | ||
91 | union power_supply_propval *val) | ||
92 | { | ||
93 | struct acpi_ac *ac = to_acpi_ac(psy); | ||
94 | switch (psp) { | ||
95 | case POWER_SUPPLY_PROP_ONLINE: | ||
96 | val->intval = ac->state; | ||
97 | break; | ||
98 | default: | ||
99 | return -EINVAL; | ||
100 | } | ||
101 | return 0; | ||
102 | } | ||
103 | |||
104 | static enum power_supply_property ac_props[] = { | ||
105 | POWER_SUPPLY_PROP_ONLINE, | ||
106 | }; | ||
85 | 107 | ||
86 | /* -------------------------------------------------------------------------- | 108 | /* -------------------------------------------------------------------------- |
87 | AC Adapter Management | 109 | AC Adapter Management |
@@ -208,6 +230,7 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data) | |||
208 | acpi_bus_generate_netlink_event(device->pnp.device_class, | 230 | acpi_bus_generate_netlink_event(device->pnp.device_class, |
209 | device->dev.bus_id, event, | 231 | device->dev.bus_id, event, |
210 | (u32) ac->state); | 232 | (u32) ac->state); |
233 | kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); | ||
211 | break; | 234 | break; |
212 | default: | 235 | default: |
213 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 236 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
@@ -244,7 +267,12 @@ static int acpi_ac_add(struct acpi_device *device) | |||
244 | result = acpi_ac_add_fs(device); | 267 | result = acpi_ac_add_fs(device); |
245 | if (result) | 268 | if (result) |
246 | goto end; | 269 | goto end; |
247 | 270 | ac->charger.name = acpi_device_bid(device); | |
271 | ac->charger.type = POWER_SUPPLY_TYPE_MAINS; | ||
272 | ac->charger.properties = ac_props; | ||
273 | ac->charger.num_properties = ARRAY_SIZE(ac_props); | ||
274 | ac->charger.get_property = get_ac_property; | ||
275 | power_supply_register(&ac->device->dev, &ac->charger); | ||
248 | status = acpi_install_notify_handler(device->handle, | 276 | status = acpi_install_notify_handler(device->handle, |
249 | ACPI_ALL_NOTIFY, acpi_ac_notify, | 277 | ACPI_ALL_NOTIFY, acpi_ac_notify, |
250 | ac); | 278 | ac); |
@@ -279,7 +307,8 @@ static int acpi_ac_remove(struct acpi_device *device, int type) | |||
279 | 307 | ||
280 | status = acpi_remove_notify_handler(device->handle, | 308 | status = acpi_remove_notify_handler(device->handle, |
281 | ACPI_ALL_NOTIFY, acpi_ac_notify); | 309 | ACPI_ALL_NOTIFY, acpi_ac_notify); |
282 | 310 | if (ac->charger.dev) | |
311 | power_supply_unregister(&ac->charger); | ||
283 | acpi_ac_remove_fs(device); | 312 | acpi_ac_remove_fs(device); |
284 | 313 | ||
285 | kfree(ac); | 314 | kfree(ac); |
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 9b2c0f74f86..681e26b56b1 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c | |||
@@ -1,6 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * acpi_battery.c - ACPI Battery Driver ($Revision: 37 $) | 2 | * battery.c - ACPI Battery Driver (Revision: 2.0) |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Alexey Starikovskiy <astarikovskiy@suse.de> | ||
5 | * Copyright (C) 2004-2007 Vladimir Lebedev <vladimir.p.lebedev@intel.com> | ||
4 | * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> | 6 | * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> |
5 | * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> | 7 | * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> |
6 | * | 8 | * |
@@ -27,244 +29,288 @@ | |||
27 | #include <linux/module.h> | 29 | #include <linux/module.h> |
28 | #include <linux/init.h> | 30 | #include <linux/init.h> |
29 | #include <linux/types.h> | 31 | #include <linux/types.h> |
32 | #include <linux/jiffies.h> | ||
33 | |||
34 | #ifdef CONFIG_ACPI_PROCFS | ||
30 | #include <linux/proc_fs.h> | 35 | #include <linux/proc_fs.h> |
31 | #include <linux/seq_file.h> | 36 | #include <linux/seq_file.h> |
32 | #include <asm/uaccess.h> | 37 | #include <asm/uaccess.h> |
38 | #endif | ||
33 | 39 | ||
34 | #include <acpi/acpi_bus.h> | 40 | #include <acpi/acpi_bus.h> |
35 | #include <acpi/acpi_drivers.h> | 41 | #include <acpi/acpi_drivers.h> |
36 | 42 | ||
37 | #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF | 43 | #include <linux/power_supply.h> |
38 | 44 | ||
39 | #define ACPI_BATTERY_FORMAT_BIF "NNNNNNNNNSSSS" | 45 | #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF |
40 | #define ACPI_BATTERY_FORMAT_BST "NNNN" | ||
41 | 46 | ||
42 | #define ACPI_BATTERY_COMPONENT 0x00040000 | 47 | #define ACPI_BATTERY_COMPONENT 0x00040000 |
43 | #define ACPI_BATTERY_CLASS "battery" | 48 | #define ACPI_BATTERY_CLASS "battery" |
44 | #define ACPI_BATTERY_DEVICE_NAME "Battery" | 49 | #define ACPI_BATTERY_DEVICE_NAME "Battery" |
45 | #define ACPI_BATTERY_NOTIFY_STATUS 0x80 | 50 | #define ACPI_BATTERY_NOTIFY_STATUS 0x80 |
46 | #define ACPI_BATTERY_NOTIFY_INFO 0x81 | 51 | #define ACPI_BATTERY_NOTIFY_INFO 0x81 |
47 | #define ACPI_BATTERY_UNITS_WATTS "mW" | ||
48 | #define ACPI_BATTERY_UNITS_AMPS "mA" | ||
49 | 52 | ||
50 | #define _COMPONENT ACPI_BATTERY_COMPONENT | 53 | #define _COMPONENT ACPI_BATTERY_COMPONENT |
51 | 54 | ||
52 | #define ACPI_BATTERY_UPDATE_TIME 0 | ||
53 | |||
54 | #define ACPI_BATTERY_NONE_UPDATE 0 | ||
55 | #define ACPI_BATTERY_EASY_UPDATE 1 | ||
56 | #define ACPI_BATTERY_INIT_UPDATE 2 | ||
57 | |||
58 | ACPI_MODULE_NAME("battery"); | 55 | ACPI_MODULE_NAME("battery"); |
59 | 56 | ||
60 | MODULE_AUTHOR("Paul Diefenbaugh"); | 57 | MODULE_AUTHOR("Paul Diefenbaugh"); |
58 | MODULE_AUTHOR("Alexey Starikovskiy <astarikovskiy@suse.de>"); | ||
61 | MODULE_DESCRIPTION("ACPI Battery Driver"); | 59 | MODULE_DESCRIPTION("ACPI Battery Driver"); |
62 | MODULE_LICENSE("GPL"); | 60 | MODULE_LICENSE("GPL"); |
63 | 61 | ||
64 | static unsigned int update_time = ACPI_BATTERY_UPDATE_TIME; | 62 | static unsigned int cache_time = 1000; |
65 | 63 | module_param(cache_time, uint, 0644); | |
66 | /* 0 - every time, > 0 - by update_time */ | 64 | MODULE_PARM_DESC(cache_time, "cache time in milliseconds"); |
67 | module_param(update_time, uint, 0644); | ||
68 | 65 | ||
66 | #ifdef CONFIG_ACPI_PROCFS | ||
69 | extern struct proc_dir_entry *acpi_lock_battery_dir(void); | 67 | extern struct proc_dir_entry *acpi_lock_battery_dir(void); |
70 | extern void *acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir); | 68 | extern void *acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir); |
71 | 69 | ||
72 | static int acpi_battery_add(struct acpi_device *device); | 70 | enum acpi_battery_files { |
73 | static int acpi_battery_remove(struct acpi_device *device, int type); | 71 | info_tag = 0, |
74 | static int acpi_battery_resume(struct acpi_device *device); | 72 | state_tag, |
73 | alarm_tag, | ||
74 | ACPI_BATTERY_NUMFILES, | ||
75 | }; | ||
76 | |||
77 | #endif | ||
75 | 78 | ||
76 | static const struct acpi_device_id battery_device_ids[] = { | 79 | static const struct acpi_device_id battery_device_ids[] = { |
77 | {"PNP0C0A", 0}, | 80 | {"PNP0C0A", 0}, |
78 | {"", 0}, | 81 | {"", 0}, |
79 | }; | 82 | }; |
80 | MODULE_DEVICE_TABLE(acpi, battery_device_ids); | ||
81 | |||
82 | static struct acpi_driver acpi_battery_driver = { | ||
83 | .name = "battery", | ||
84 | .class = ACPI_BATTERY_CLASS, | ||
85 | .ids = battery_device_ids, | ||
86 | .ops = { | ||
87 | .add = acpi_battery_add, | ||
88 | .resume = acpi_battery_resume, | ||
89 | .remove = acpi_battery_remove, | ||
90 | }, | ||
91 | }; | ||
92 | 83 | ||
93 | struct acpi_battery_state { | 84 | MODULE_DEVICE_TABLE(acpi, battery_device_ids); |
94 | acpi_integer state; | ||
95 | acpi_integer present_rate; | ||
96 | acpi_integer remaining_capacity; | ||
97 | acpi_integer present_voltage; | ||
98 | }; | ||
99 | |||
100 | struct acpi_battery_info { | ||
101 | acpi_integer power_unit; | ||
102 | acpi_integer design_capacity; | ||
103 | acpi_integer last_full_capacity; | ||
104 | acpi_integer battery_technology; | ||
105 | acpi_integer design_voltage; | ||
106 | acpi_integer design_capacity_warning; | ||
107 | acpi_integer design_capacity_low; | ||
108 | acpi_integer battery_capacity_granularity_1; | ||
109 | acpi_integer battery_capacity_granularity_2; | ||
110 | acpi_string model_number; | ||
111 | acpi_string serial_number; | ||
112 | acpi_string battery_type; | ||
113 | acpi_string oem_info; | ||
114 | }; | ||
115 | |||
116 | enum acpi_battery_files{ | ||
117 | ACPI_BATTERY_INFO = 0, | ||
118 | ACPI_BATTERY_STATE, | ||
119 | ACPI_BATTERY_ALARM, | ||
120 | ACPI_BATTERY_NUMFILES, | ||
121 | }; | ||
122 | 85 | ||
123 | struct acpi_battery_flags { | ||
124 | u8 battery_present_prev; | ||
125 | u8 alarm_present; | ||
126 | u8 init_update; | ||
127 | u8 update[ACPI_BATTERY_NUMFILES]; | ||
128 | u8 power_unit; | ||
129 | }; | ||
130 | 86 | ||
131 | struct acpi_battery { | 87 | struct acpi_battery { |
132 | struct mutex mutex; | 88 | struct mutex lock; |
89 | struct power_supply bat; | ||
133 | struct acpi_device *device; | 90 | struct acpi_device *device; |
134 | struct acpi_battery_flags flags; | 91 | unsigned long update_time; |
135 | struct acpi_buffer bif_data; | 92 | int current_now; |
136 | struct acpi_buffer bst_data; | 93 | int capacity_now; |
137 | unsigned long alarm; | 94 | int voltage_now; |
138 | unsigned long update_time[ACPI_BATTERY_NUMFILES]; | 95 | int design_capacity; |
96 | int full_charge_capacity; | ||
97 | int technology; | ||
98 | int design_voltage; | ||
99 | int design_capacity_warning; | ||
100 | int design_capacity_low; | ||
101 | int capacity_granularity_1; | ||
102 | int capacity_granularity_2; | ||
103 | int alarm; | ||
104 | char model_number[32]; | ||
105 | char serial_number[32]; | ||
106 | char type[32]; | ||
107 | char oem_info[32]; | ||
108 | int state; | ||
109 | int power_unit; | ||
110 | u8 alarm_present; | ||
139 | }; | 111 | }; |
140 | 112 | ||
113 | #define to_acpi_battery(x) container_of(x, struct acpi_battery, bat); | ||
114 | |||
141 | inline int acpi_battery_present(struct acpi_battery *battery) | 115 | inline int acpi_battery_present(struct acpi_battery *battery) |
142 | { | 116 | { |
143 | return battery->device->status.battery_present; | 117 | return battery->device->status.battery_present; |
144 | } | 118 | } |
145 | inline char *acpi_battery_power_units(struct acpi_battery *battery) | ||
146 | { | ||
147 | if (battery->flags.power_unit) | ||
148 | return ACPI_BATTERY_UNITS_AMPS; | ||
149 | else | ||
150 | return ACPI_BATTERY_UNITS_WATTS; | ||
151 | } | ||
152 | 119 | ||
153 | inline acpi_handle acpi_battery_handle(struct acpi_battery *battery) | 120 | static int acpi_battery_technology(struct acpi_battery *battery) |
154 | { | 121 | { |
155 | return battery->device->handle; | 122 | if (!strcasecmp("NiCd", battery->type)) |
123 | return POWER_SUPPLY_TECHNOLOGY_NiCd; | ||
124 | if (!strcasecmp("NiMH", battery->type)) | ||
125 | return POWER_SUPPLY_TECHNOLOGY_NiMH; | ||
126 | if (!strcasecmp("LION", battery->type)) | ||
127 | return POWER_SUPPLY_TECHNOLOGY_LION; | ||
128 | if (!strcasecmp("LiP", battery->type)) | ||
129 | return POWER_SUPPLY_TECHNOLOGY_LIPO; | ||
130 | return POWER_SUPPLY_TECHNOLOGY_UNKNOWN; | ||
156 | } | 131 | } |
157 | 132 | ||
158 | /* -------------------------------------------------------------------------- | 133 | static int acpi_battery_get_property(struct power_supply *psy, |
159 | Battery Management | 134 | enum power_supply_property psp, |
160 | -------------------------------------------------------------------------- */ | 135 | union power_supply_propval *val) |
161 | |||
162 | static void acpi_battery_check_result(struct acpi_battery *battery, int result) | ||
163 | { | 136 | { |
164 | if (!battery) | 137 | struct acpi_battery *battery = to_acpi_battery(psy); |
165 | return; | ||
166 | 138 | ||
167 | if (result) { | 139 | if ((!acpi_battery_present(battery)) && |
168 | battery->flags.init_update = 1; | 140 | psp != POWER_SUPPLY_PROP_PRESENT) |
141 | return -ENODEV; | ||
142 | switch (psp) { | ||
143 | case POWER_SUPPLY_PROP_STATUS: | ||
144 | if (battery->state & 0x01) | ||
145 | val->intval = POWER_SUPPLY_STATUS_DISCHARGING; | ||
146 | else if (battery->state & 0x02) | ||
147 | val->intval = POWER_SUPPLY_STATUS_CHARGING; | ||
148 | else if (battery->state == 0) | ||
149 | val->intval = POWER_SUPPLY_STATUS_FULL; | ||
150 | break; | ||
151 | case POWER_SUPPLY_PROP_PRESENT: | ||
152 | val->intval = acpi_battery_present(battery); | ||
153 | break; | ||
154 | case POWER_SUPPLY_PROP_TECHNOLOGY: | ||
155 | val->intval = acpi_battery_technology(battery); | ||
156 | break; | ||
157 | case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: | ||
158 | val->intval = battery->design_voltage * 1000; | ||
159 | break; | ||
160 | case POWER_SUPPLY_PROP_VOLTAGE_NOW: | ||
161 | val->intval = battery->voltage_now * 1000; | ||
162 | break; | ||
163 | case POWER_SUPPLY_PROP_CURRENT_NOW: | ||
164 | val->intval = battery->current_now * 1000; | ||
165 | break; | ||
166 | case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: | ||
167 | case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN: | ||
168 | val->intval = battery->design_capacity * 1000; | ||
169 | break; | ||
170 | case POWER_SUPPLY_PROP_CHARGE_FULL: | ||
171 | case POWER_SUPPLY_PROP_ENERGY_FULL: | ||
172 | val->intval = battery->full_charge_capacity * 1000; | ||
173 | break; | ||
174 | case POWER_SUPPLY_PROP_CHARGE_NOW: | ||
175 | case POWER_SUPPLY_PROP_ENERGY_NOW: | ||
176 | val->intval = battery->capacity_now * 1000; | ||
177 | break; | ||
178 | case POWER_SUPPLY_PROP_MODEL_NAME: | ||
179 | val->strval = battery->model_number; | ||
180 | break; | ||
181 | case POWER_SUPPLY_PROP_MANUFACTURER: | ||
182 | val->strval = battery->oem_info; | ||
183 | break; | ||
184 | default: | ||
185 | return -EINVAL; | ||
169 | } | 186 | } |
187 | return 0; | ||
170 | } | 188 | } |
171 | 189 | ||
172 | static int acpi_battery_extract_package(struct acpi_battery *battery, | 190 | static enum power_supply_property charge_battery_props[] = { |
173 | union acpi_object *package, | 191 | POWER_SUPPLY_PROP_STATUS, |
174 | struct acpi_buffer *format, | 192 | POWER_SUPPLY_PROP_PRESENT, |
175 | struct acpi_buffer *data, | 193 | POWER_SUPPLY_PROP_TECHNOLOGY, |
176 | char *package_name) | 194 | POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, |
195 | POWER_SUPPLY_PROP_VOLTAGE_NOW, | ||
196 | POWER_SUPPLY_PROP_CURRENT_NOW, | ||
197 | POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, | ||
198 | POWER_SUPPLY_PROP_CHARGE_FULL, | ||
199 | POWER_SUPPLY_PROP_CHARGE_NOW, | ||
200 | POWER_SUPPLY_PROP_MODEL_NAME, | ||
201 | POWER_SUPPLY_PROP_MANUFACTURER, | ||
202 | }; | ||
203 | |||
204 | static enum power_supply_property energy_battery_props[] = { | ||
205 | POWER_SUPPLY_PROP_STATUS, | ||
206 | POWER_SUPPLY_PROP_PRESENT, | ||
207 | POWER_SUPPLY_PROP_TECHNOLOGY, | ||
208 | POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, | ||
209 | POWER_SUPPLY_PROP_VOLTAGE_NOW, | ||
210 | POWER_SUPPLY_PROP_CURRENT_NOW, | ||
211 | POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, | ||
212 | POWER_SUPPLY_PROP_ENERGY_FULL, | ||
213 | POWER_SUPPLY_PROP_ENERGY_NOW, | ||
214 | POWER_SUPPLY_PROP_MODEL_NAME, | ||
215 | POWER_SUPPLY_PROP_MANUFACTURER, | ||
216 | }; | ||
217 | |||
218 | #ifdef CONFIG_ACPI_PROCFS | ||
219 | inline char *acpi_battery_units(struct acpi_battery *battery) | ||
177 | { | 220 | { |
178 | acpi_status status = AE_OK; | 221 | return (battery->power_unit)?"mA":"mW"; |
179 | struct acpi_buffer data_null = { 0, NULL }; | 222 | } |
223 | #endif | ||
180 | 224 | ||
181 | status = acpi_extract_package(package, format, &data_null); | 225 | /* -------------------------------------------------------------------------- |
182 | if (status != AE_BUFFER_OVERFLOW) { | 226 | Battery Management |
183 | ACPI_EXCEPTION((AE_INFO, status, "Extracting size %s", | 227 | -------------------------------------------------------------------------- */ |
184 | package_name)); | 228 | struct acpi_offsets { |
185 | return -ENODEV; | 229 | size_t offset; /* offset inside struct acpi_sbs_battery */ |
186 | } | 230 | u8 mode; /* int or string? */ |
231 | }; | ||
187 | 232 | ||
188 | if (data_null.length != data->length) { | 233 | static struct acpi_offsets state_offsets[] = { |
189 | kfree(data->pointer); | 234 | {offsetof(struct acpi_battery, state), 0}, |
190 | data->pointer = kzalloc(data_null.length, GFP_KERNEL); | 235 | {offsetof(struct acpi_battery, current_now), 0}, |
191 | if (!data->pointer) { | 236 | {offsetof(struct acpi_battery, capacity_now), 0}, |
192 | ACPI_EXCEPTION((AE_INFO, AE_NO_MEMORY, "kzalloc()")); | 237 | {offsetof(struct acpi_battery, voltage_now), 0}, |
193 | return -ENOMEM; | 238 | }; |
194 | } | ||
195 | data->length = data_null.length; | ||
196 | } | ||
197 | 239 | ||
198 | status = acpi_extract_package(package, format, data); | 240 | static struct acpi_offsets info_offsets[] = { |
199 | if (ACPI_FAILURE(status)) { | 241 | {offsetof(struct acpi_battery, power_unit), 0}, |
200 | ACPI_EXCEPTION((AE_INFO, status, "Extracting %s", | 242 | {offsetof(struct acpi_battery, design_capacity), 0}, |
201 | package_name)); | 243 | {offsetof(struct acpi_battery, full_charge_capacity), 0}, |
202 | return -ENODEV; | 244 | {offsetof(struct acpi_battery, technology), 0}, |
203 | } | 245 | {offsetof(struct acpi_battery, design_voltage), 0}, |
246 | {offsetof(struct acpi_battery, design_capacity_warning), 0}, | ||
247 | {offsetof(struct acpi_battery, design_capacity_low), 0}, | ||
248 | {offsetof(struct acpi_battery, capacity_granularity_1), 0}, | ||
249 | {offsetof(struct acpi_battery, capacity_granularity_2), 0}, | ||
250 | {offsetof(struct acpi_battery, model_number), 1}, | ||
251 | {offsetof(struct acpi_battery, serial_number), 1}, | ||
252 | {offsetof(struct acpi_battery, type), 1}, | ||
253 | {offsetof(struct acpi_battery, oem_info), 1}, | ||
254 | }; | ||
204 | 255 | ||
256 | static int extract_package(struct acpi_battery *battery, | ||
257 | union acpi_object *package, | ||
258 | struct acpi_offsets *offsets, int num) | ||
259 | { | ||
260 | int i, *x; | ||
261 | union acpi_object *element; | ||
262 | if (package->type != ACPI_TYPE_PACKAGE) | ||
263 | return -EFAULT; | ||
264 | for (i = 0; i < num; ++i) { | ||
265 | if (package->package.count <= i) | ||
266 | return -EFAULT; | ||
267 | element = &package->package.elements[i]; | ||
268 | if (offsets[i].mode) { | ||
269 | if (element->type != ACPI_TYPE_STRING && | ||
270 | element->type != ACPI_TYPE_BUFFER) | ||
271 | return -EFAULT; | ||
272 | strncpy((u8 *)battery + offsets[i].offset, | ||
273 | element->string.pointer, 32); | ||
274 | } else { | ||
275 | if (element->type != ACPI_TYPE_INTEGER) | ||
276 | return -EFAULT; | ||
277 | x = (int *)((u8 *)battery + offsets[i].offset); | ||
278 | *x = element->integer.value; | ||
279 | } | ||
280 | } | ||
205 | return 0; | 281 | return 0; |
206 | } | 282 | } |
207 | 283 | ||
208 | static int acpi_battery_get_status(struct acpi_battery *battery) | 284 | static int acpi_battery_get_status(struct acpi_battery *battery) |
209 | { | 285 | { |
210 | int result = 0; | 286 | if (acpi_bus_get_status(battery->device)) { |
211 | |||
212 | result = acpi_bus_get_status(battery->device); | ||
213 | if (result) { | ||
214 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, "Evaluating _STA")); | 287 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, "Evaluating _STA")); |
215 | return -ENODEV; | 288 | return -ENODEV; |
216 | } | 289 | } |
217 | return result; | 290 | return 0; |
218 | } | 291 | } |
219 | 292 | ||
220 | static int acpi_battery_get_info(struct acpi_battery *battery) | 293 | static int acpi_battery_get_info(struct acpi_battery *battery) |
221 | { | 294 | { |
222 | int result = 0; | 295 | int result = -EFAULT; |
223 | acpi_status status = 0; | 296 | acpi_status status = 0; |
224 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; | 297 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
225 | struct acpi_buffer format = { sizeof(ACPI_BATTERY_FORMAT_BIF), | ||
226 | ACPI_BATTERY_FORMAT_BIF | ||
227 | }; | ||
228 | union acpi_object *package = NULL; | ||
229 | struct acpi_buffer *data = NULL; | ||
230 | struct acpi_battery_info *bif = NULL; | ||
231 | |||
232 | battery->update_time[ACPI_BATTERY_INFO] = get_seconds(); | ||
233 | 298 | ||
234 | if (!acpi_battery_present(battery)) | 299 | if (!acpi_battery_present(battery)) |
235 | return 0; | 300 | return 0; |
301 | mutex_lock(&battery->lock); | ||
302 | status = acpi_evaluate_object(battery->device->handle, "_BIF", | ||
303 | NULL, &buffer); | ||
304 | mutex_unlock(&battery->lock); | ||
236 | 305 | ||
237 | /* Evaluate _BIF */ | ||
238 | |||
239 | status = | ||
240 | acpi_evaluate_object(acpi_battery_handle(battery), "_BIF", NULL, | ||
241 | &buffer); | ||
242 | if (ACPI_FAILURE(status)) { | 306 | if (ACPI_FAILURE(status)) { |
243 | ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF")); | 307 | ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF")); |
244 | return -ENODEV; | 308 | return -ENODEV; |
245 | } | 309 | } |
246 | 310 | ||
247 | package = buffer.pointer; | 311 | result = extract_package(battery, buffer.pointer, |
248 | 312 | info_offsets, ARRAY_SIZE(info_offsets)); | |
249 | data = &battery->bif_data; | ||
250 | |||
251 | /* Extract Package Data */ | ||
252 | |||
253 | result = | ||
254 | acpi_battery_extract_package(battery, package, &format, data, | ||
255 | "_BIF"); | ||
256 | if (result) | ||
257 | goto end; | ||
258 | |||
259 | end: | ||
260 | |||
261 | kfree(buffer.pointer); | 313 | kfree(buffer.pointer); |
262 | |||
263 | if (!result) { | ||
264 | bif = data->pointer; | ||
265 | battery->flags.power_unit = bif->power_unit; | ||
266 | } | ||
267 | |||
268 | return result; | 314 | return result; |
269 | } | 315 | } |
270 | 316 | ||
@@ -273,342 +319,203 @@ static int acpi_battery_get_state(struct acpi_battery *battery) | |||
273 | int result = 0; | 319 | int result = 0; |
274 | acpi_status status = 0; | 320 | acpi_status status = 0; |
275 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; | 321 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
276 | struct acpi_buffer format = { sizeof(ACPI_BATTERY_FORMAT_BST), | ||
277 | ACPI_BATTERY_FORMAT_BST | ||
278 | }; | ||
279 | union acpi_object *package = NULL; | ||
280 | struct acpi_buffer *data = NULL; | ||
281 | |||
282 | battery->update_time[ACPI_BATTERY_STATE] = get_seconds(); | ||
283 | 322 | ||
284 | if (!acpi_battery_present(battery)) | 323 | if (!acpi_battery_present(battery)) |
285 | return 0; | 324 | return 0; |
286 | 325 | ||
287 | /* Evaluate _BST */ | 326 | if (battery->update_time && |
327 | time_before(jiffies, battery->update_time + | ||
328 | msecs_to_jiffies(cache_time))) | ||
329 | return 0; | ||
330 | |||
331 | mutex_lock(&battery->lock); | ||
332 | status = acpi_evaluate_object(battery->device->handle, "_BST", | ||
333 | NULL, &buffer); | ||
334 | mutex_unlock(&battery->lock); | ||
288 | 335 | ||
289 | status = | ||
290 | acpi_evaluate_object(acpi_battery_handle(battery), "_BST", NULL, | ||
291 | &buffer); | ||
292 | if (ACPI_FAILURE(status)) { | 336 | if (ACPI_FAILURE(status)) { |
293 | ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST")); | 337 | ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST")); |
294 | return -ENODEV; | 338 | return -ENODEV; |
295 | } | 339 | } |
296 | 340 | ||
297 | package = buffer.pointer; | 341 | result = extract_package(battery, buffer.pointer, |
298 | 342 | state_offsets, ARRAY_SIZE(state_offsets)); | |
299 | data = &battery->bst_data; | 343 | battery->update_time = jiffies; |
300 | |||
301 | /* Extract Package Data */ | ||
302 | |||
303 | result = | ||
304 | acpi_battery_extract_package(battery, package, &format, data, | ||
305 | "_BST"); | ||
306 | if (result) | ||
307 | goto end; | ||
308 | |||
309 | end: | ||
310 | kfree(buffer.pointer); | 344 | kfree(buffer.pointer); |
311 | |||
312 | return result; | 345 | return result; |
313 | } | 346 | } |
314 | 347 | ||
315 | static int acpi_battery_get_alarm(struct acpi_battery *battery) | 348 | static int acpi_battery_set_alarm(struct acpi_battery *battery) |
316 | { | ||
317 | battery->update_time[ACPI_BATTERY_ALARM] = get_seconds(); | ||
318 | |||
319 | return 0; | ||
320 | } | ||
321 | |||
322 | static int acpi_battery_set_alarm(struct acpi_battery *battery, | ||
323 | unsigned long alarm) | ||
324 | { | 349 | { |
325 | acpi_status status = 0; | 350 | acpi_status status = 0; |
326 | union acpi_object arg0 = { ACPI_TYPE_INTEGER }; | 351 | union acpi_object arg0 = { .type = ACPI_TYPE_INTEGER }; |
327 | struct acpi_object_list arg_list = { 1, &arg0 }; | 352 | struct acpi_object_list arg_list = { 1, &arg0 }; |
328 | 353 | ||
329 | battery->update_time[ACPI_BATTERY_ALARM] = get_seconds(); | 354 | if (!acpi_battery_present(battery)|| !battery->alarm_present) |
330 | |||
331 | if (!acpi_battery_present(battery)) | ||
332 | return -ENODEV; | 355 | return -ENODEV; |
333 | 356 | ||
334 | if (!battery->flags.alarm_present) | 357 | arg0.integer.value = battery->alarm; |
335 | return -ENODEV; | ||
336 | |||
337 | arg0.integer.value = alarm; | ||
338 | 358 | ||
339 | status = | 359 | mutex_lock(&battery->lock); |
340 | acpi_evaluate_object(acpi_battery_handle(battery), "_BTP", | 360 | status = acpi_evaluate_object(battery->device->handle, "_BTP", |
341 | &arg_list, NULL); | 361 | &arg_list, NULL); |
362 | mutex_unlock(&battery->lock); | ||
363 | |||
342 | if (ACPI_FAILURE(status)) | 364 | if (ACPI_FAILURE(status)) |
343 | return -ENODEV; | 365 | return -ENODEV; |
344 | 366 | ||
345 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Alarm set to %d\n", (u32) alarm)); | 367 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Alarm set to %d\n", battery->alarm)); |
346 | |||
347 | battery->alarm = alarm; | ||
348 | |||
349 | return 0; | 368 | return 0; |
350 | } | 369 | } |
351 | 370 | ||
352 | static int acpi_battery_init_alarm(struct acpi_battery *battery) | 371 | static int acpi_battery_init_alarm(struct acpi_battery *battery) |
353 | { | 372 | { |
354 | int result = 0; | ||
355 | acpi_status status = AE_OK; | 373 | acpi_status status = AE_OK; |
356 | acpi_handle handle = NULL; | 374 | acpi_handle handle = NULL; |
357 | struct acpi_battery_info *bif = battery->bif_data.pointer; | ||
358 | unsigned long alarm = battery->alarm; | ||
359 | 375 | ||
360 | /* See if alarms are supported, and if so, set default */ | 376 | /* See if alarms are supported, and if so, set default */ |
361 | 377 | status = acpi_get_handle(battery->device->handle, "_BTP", &handle); | |
362 | status = acpi_get_handle(acpi_battery_handle(battery), "_BTP", &handle); | 378 | if (ACPI_FAILURE(status)) { |
363 | if (ACPI_SUCCESS(status)) { | 379 | battery->alarm_present = 0; |
364 | battery->flags.alarm_present = 1; | 380 | return 0; |
365 | if (!alarm && bif) { | ||
366 | alarm = bif->design_capacity_warning; | ||
367 | } | ||
368 | result = acpi_battery_set_alarm(battery, alarm); | ||
369 | if (result) | ||
370 | goto end; | ||
371 | } else { | ||
372 | battery->flags.alarm_present = 0; | ||
373 | } | 381 | } |
374 | 382 | battery->alarm_present = 1; | |
375 | end: | 383 | if (!battery->alarm) |
376 | 384 | battery->alarm = battery->design_capacity_warning; | |
377 | return result; | 385 | return acpi_battery_set_alarm(battery); |
378 | } | 386 | } |
379 | 387 | ||
380 | static int acpi_battery_init_update(struct acpi_battery *battery) | 388 | static int acpi_battery_update(struct acpi_battery *battery) |
381 | { | 389 | { |
382 | int result = 0; | 390 | int saved_present = acpi_battery_present(battery); |
383 | 391 | int result = acpi_battery_get_status(battery); | |
384 | result = acpi_battery_get_status(battery); | 392 | if (result || !acpi_battery_present(battery)) |
385 | if (result) | ||
386 | return result; | 393 | return result; |
387 | 394 | if (saved_present != acpi_battery_present(battery) || | |
388 | battery->flags.battery_present_prev = acpi_battery_present(battery); | 395 | !battery->update_time) { |
389 | 396 | battery->update_time = 0; | |
390 | if (acpi_battery_present(battery)) { | ||
391 | result = acpi_battery_get_info(battery); | 397 | result = acpi_battery_get_info(battery); |
392 | if (result) | 398 | if (result) |
393 | return result; | 399 | return result; |
394 | result = acpi_battery_get_state(battery); | 400 | if (battery->power_unit) { |
395 | if (result) | 401 | battery->bat.properties = charge_battery_props; |
396 | return result; | 402 | battery->bat.num_properties = |
397 | 403 | ARRAY_SIZE(charge_battery_props); | |
398 | acpi_battery_init_alarm(battery); | ||
399 | } | ||
400 | |||
401 | return result; | ||
402 | } | ||
403 | |||
404 | static int acpi_battery_update(struct acpi_battery *battery, | ||
405 | int update, int *update_result_ptr) | ||
406 | { | ||
407 | int result = 0; | ||
408 | int update_result = ACPI_BATTERY_NONE_UPDATE; | ||
409 | |||
410 | if (!acpi_battery_present(battery)) { | ||
411 | update = 1; | ||
412 | } | ||
413 | |||
414 | if (battery->flags.init_update) { | ||
415 | result = acpi_battery_init_update(battery); | ||
416 | if (result) | ||
417 | goto end; | ||
418 | update_result = ACPI_BATTERY_INIT_UPDATE; | ||
419 | } else if (update) { | ||
420 | result = acpi_battery_get_status(battery); | ||
421 | if (result) | ||
422 | goto end; | ||
423 | if ((!battery->flags.battery_present_prev & acpi_battery_present(battery)) | ||
424 | || (battery->flags.battery_present_prev & !acpi_battery_present(battery))) { | ||
425 | result = acpi_battery_init_update(battery); | ||
426 | if (result) | ||
427 | goto end; | ||
428 | update_result = ACPI_BATTERY_INIT_UPDATE; | ||
429 | } else { | 404 | } else { |
430 | update_result = ACPI_BATTERY_EASY_UPDATE; | 405 | battery->bat.properties = energy_battery_props; |
406 | battery->bat.num_properties = | ||
407 | ARRAY_SIZE(energy_battery_props); | ||
431 | } | 408 | } |
409 | acpi_battery_init_alarm(battery); | ||
432 | } | 410 | } |
433 | 411 | return acpi_battery_get_state(battery); | |
434 | end: | ||
435 | |||
436 | battery->flags.init_update = (result != 0); | ||
437 | |||
438 | *update_result_ptr = update_result; | ||
439 | |||
440 | return result; | ||
441 | } | ||
442 | |||
443 | static void acpi_battery_notify_update(struct acpi_battery *battery) | ||
444 | { | ||
445 | acpi_battery_get_status(battery); | ||
446 | |||
447 | if (battery->flags.init_update) { | ||
448 | return; | ||
449 | } | ||
450 | |||
451 | if ((!battery->flags.battery_present_prev & | ||
452 | acpi_battery_present(battery)) || | ||
453 | (battery->flags.battery_present_prev & | ||
454 | !acpi_battery_present(battery))) { | ||
455 | battery->flags.init_update = 1; | ||
456 | } else { | ||
457 | battery->flags.update[ACPI_BATTERY_INFO] = 1; | ||
458 | battery->flags.update[ACPI_BATTERY_STATE] = 1; | ||
459 | battery->flags.update[ACPI_BATTERY_ALARM] = 1; | ||
460 | } | ||
461 | } | 412 | } |
462 | 413 | ||
463 | /* -------------------------------------------------------------------------- | 414 | /* -------------------------------------------------------------------------- |
464 | FS Interface (/proc) | 415 | FS Interface (/proc) |
465 | -------------------------------------------------------------------------- */ | 416 | -------------------------------------------------------------------------- */ |
466 | 417 | ||
418 | #ifdef CONFIG_ACPI_PROCFS | ||
467 | static struct proc_dir_entry *acpi_battery_dir; | 419 | static struct proc_dir_entry *acpi_battery_dir; |
468 | 420 | ||
469 | static int acpi_battery_print_info(struct seq_file *seq, int result) | 421 | static int acpi_battery_print_info(struct seq_file *seq, int result) |
470 | { | 422 | { |
471 | struct acpi_battery *battery = seq->private; | 423 | struct acpi_battery *battery = seq->private; |
472 | struct acpi_battery_info *bif = NULL; | ||
473 | char *units = "?"; | ||
474 | 424 | ||
475 | if (result) | 425 | if (result) |
476 | goto end; | 426 | goto end; |
477 | 427 | ||
478 | if (acpi_battery_present(battery)) | 428 | seq_printf(seq, "present: %s\n", |
479 | seq_printf(seq, "present: yes\n"); | 429 | acpi_battery_present(battery)?"yes":"no"); |
480 | else { | 430 | if (!acpi_battery_present(battery)) |
481 | seq_printf(seq, "present: no\n"); | ||
482 | goto end; | ||
483 | } | ||
484 | |||
485 | bif = battery->bif_data.pointer; | ||
486 | if (!bif) { | ||
487 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, "BIF buffer is NULL")); | ||
488 | result = -ENODEV; | ||
489 | goto end; | 431 | goto end; |
490 | } | 432 | if (battery->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) |
491 | |||
492 | /* Battery Units */ | ||
493 | |||
494 | units = acpi_battery_power_units(battery); | ||
495 | |||
496 | if (bif->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) | ||
497 | seq_printf(seq, "design capacity: unknown\n"); | 433 | seq_printf(seq, "design capacity: unknown\n"); |
498 | else | 434 | else |
499 | seq_printf(seq, "design capacity: %d %sh\n", | 435 | seq_printf(seq, "design capacity: %d %sh\n", |
500 | (u32) bif->design_capacity, units); | 436 | battery->design_capacity, |
437 | acpi_battery_units(battery)); | ||
501 | 438 | ||
502 | if (bif->last_full_capacity == ACPI_BATTERY_VALUE_UNKNOWN) | 439 | if (battery->full_charge_capacity == ACPI_BATTERY_VALUE_UNKNOWN) |
503 | seq_printf(seq, "last full capacity: unknown\n"); | 440 | seq_printf(seq, "last full capacity: unknown\n"); |
504 | else | 441 | else |
505 | seq_printf(seq, "last full capacity: %d %sh\n", | 442 | seq_printf(seq, "last full capacity: %d %sh\n", |
506 | (u32) bif->last_full_capacity, units); | 443 | battery->full_charge_capacity, |
444 | acpi_battery_units(battery)); | ||
507 | 445 | ||
508 | switch ((u32) bif->battery_technology) { | 446 | seq_printf(seq, "battery technology: %srechargeable\n", |
509 | case 0: | 447 | (!battery->technology)?"non-":""); |
510 | seq_printf(seq, "battery technology: non-rechargeable\n"); | ||
511 | break; | ||
512 | case 1: | ||
513 | seq_printf(seq, "battery technology: rechargeable\n"); | ||
514 | break; | ||
515 | default: | ||
516 | seq_printf(seq, "battery technology: unknown\n"); | ||
517 | break; | ||
518 | } | ||
519 | 448 | ||
520 | if (bif->design_voltage == ACPI_BATTERY_VALUE_UNKNOWN) | 449 | if (battery->design_voltage == ACPI_BATTERY_VALUE_UNKNOWN) |
521 | seq_printf(seq, "design voltage: unknown\n"); | 450 | seq_printf(seq, "design voltage: unknown\n"); |
522 | else | 451 | else |
523 | seq_printf(seq, "design voltage: %d mV\n", | 452 | seq_printf(seq, "design voltage: %d mV\n", |
524 | (u32) bif->design_voltage); | 453 | battery->design_voltage); |
525 | seq_printf(seq, "design capacity warning: %d %sh\n", | 454 | seq_printf(seq, "design capacity warning: %d %sh\n", |
526 | (u32) bif->design_capacity_warning, units); | 455 | battery->design_capacity_warning, |
456 | acpi_battery_units(battery)); | ||
527 | seq_printf(seq, "design capacity low: %d %sh\n", | 457 | seq_printf(seq, "design capacity low: %d %sh\n", |
528 | (u32) bif->design_capacity_low, units); | 458 | battery->design_capacity_low, |
459 | acpi_battery_units(battery)); | ||
529 | seq_printf(seq, "capacity granularity 1: %d %sh\n", | 460 | seq_printf(seq, "capacity granularity 1: %d %sh\n", |
530 | (u32) bif->battery_capacity_granularity_1, units); | 461 | battery->capacity_granularity_1, |
462 | acpi_battery_units(battery)); | ||
531 | seq_printf(seq, "capacity granularity 2: %d %sh\n", | 463 | seq_printf(seq, "capacity granularity 2: %d %sh\n", |
532 | (u32) bif->battery_capacity_granularity_2, units); | 464 | battery->capacity_granularity_2, |
533 | seq_printf(seq, "model number: %s\n", bif->model_number); | 465 | acpi_battery_units(battery)); |
534 | seq_printf(seq, "serial number: %s\n", bif->serial_number); | 466 | seq_printf(seq, "model number: %s\n", battery->model_number); |
535 | seq_printf(seq, "battery type: %s\n", bif->battery_type); | 467 | seq_printf(seq, "serial number: %s\n", battery->serial_number); |
536 | seq_printf(seq, "OEM info: %s\n", bif->oem_info); | 468 | seq_printf(seq, "battery type: %s\n", battery->type); |
537 | 469 | seq_printf(seq, "OEM info: %s\n", battery->oem_info); | |
538 | end: | 470 | end: |
539 | |||
540 | if (result) | 471 | if (result) |
541 | seq_printf(seq, "ERROR: Unable to read battery info\n"); | 472 | seq_printf(seq, "ERROR: Unable to read battery info\n"); |
542 | |||
543 | return result; | 473 | return result; |
544 | } | 474 | } |
545 | 475 | ||
546 | static int acpi_battery_print_state(struct seq_file *seq, int result) | 476 | static int acpi_battery_print_state(struct seq_file *seq, int result) |
547 | { | 477 | { |
548 | struct acpi_battery *battery = seq->private; | 478 | struct acpi_battery *battery = seq->private; |
549 | struct acpi_battery_state *bst = NULL; | ||
550 | char *units = "?"; | ||
551 | 479 | ||
552 | if (result) | 480 | if (result) |
553 | goto end; | 481 | goto end; |
554 | 482 | ||
555 | if (acpi_battery_present(battery)) | 483 | seq_printf(seq, "present: %s\n", |
556 | seq_printf(seq, "present: yes\n"); | 484 | acpi_battery_present(battery)?"yes":"no"); |
557 | else { | 485 | if (!acpi_battery_present(battery)) |
558 | seq_printf(seq, "present: no\n"); | ||
559 | goto end; | ||
560 | } | ||
561 | |||
562 | bst = battery->bst_data.pointer; | ||
563 | if (!bst) { | ||
564 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, "BST buffer is NULL")); | ||
565 | result = -ENODEV; | ||
566 | goto end; | 486 | goto end; |
567 | } | ||
568 | |||
569 | /* Battery Units */ | ||
570 | |||
571 | units = acpi_battery_power_units(battery); | ||
572 | |||
573 | if (!(bst->state & 0x04)) | ||
574 | seq_printf(seq, "capacity state: ok\n"); | ||
575 | else | ||
576 | seq_printf(seq, "capacity state: critical\n"); | ||
577 | 487 | ||
578 | if ((bst->state & 0x01) && (bst->state & 0x02)) { | 488 | seq_printf(seq, "capacity state: %s\n", |
489 | (battery->state & 0x04)?"critical":"ok"); | ||
490 | if ((battery->state & 0x01) && (battery->state & 0x02)) | ||
579 | seq_printf(seq, | 491 | seq_printf(seq, |
580 | "charging state: charging/discharging\n"); | 492 | "charging state: charging/discharging\n"); |
581 | } else if (bst->state & 0x01) | 493 | else if (battery->state & 0x01) |
582 | seq_printf(seq, "charging state: discharging\n"); | 494 | seq_printf(seq, "charging state: discharging\n"); |
583 | else if (bst->state & 0x02) | 495 | else if (battery->state & 0x02) |
584 | seq_printf(seq, "charging state: charging\n"); | 496 | seq_printf(seq, "charging state: charging\n"); |
585 | else { | 497 | else |
586 | seq_printf(seq, "charging state: charged\n"); | 498 | seq_printf(seq, "charging state: charged\n"); |
587 | } | ||
588 | 499 | ||
589 | if (bst->present_rate == ACPI_BATTERY_VALUE_UNKNOWN) | 500 | if (battery->current_now == ACPI_BATTERY_VALUE_UNKNOWN) |
590 | seq_printf(seq, "present rate: unknown\n"); | 501 | seq_printf(seq, "present rate: unknown\n"); |
591 | else | 502 | else |
592 | seq_printf(seq, "present rate: %d %s\n", | 503 | seq_printf(seq, "present rate: %d %s\n", |
593 | (u32) bst->present_rate, units); | 504 | battery->current_now, acpi_battery_units(battery)); |
594 | 505 | ||
595 | if (bst->remaining_capacity == ACPI_BATTERY_VALUE_UNKNOWN) | 506 | if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN) |
596 | seq_printf(seq, "remaining capacity: unknown\n"); | 507 | seq_printf(seq, "remaining capacity: unknown\n"); |
597 | else | 508 | else |
598 | seq_printf(seq, "remaining capacity: %d %sh\n", | 509 | seq_printf(seq, "remaining capacity: %d %sh\n", |
599 | (u32) bst->remaining_capacity, units); | 510 | battery->capacity_now, acpi_battery_units(battery)); |
600 | 511 | if (battery->voltage_now == ACPI_BATTERY_VALUE_UNKNOWN) | |
601 | if (bst->present_voltage == ACPI_BATTERY_VALUE_UNKNOWN) | ||
602 | seq_printf(seq, "present voltage: unknown\n"); | 512 | seq_printf(seq, "present voltage: unknown\n"); |
603 | else | 513 | else |
604 | seq_printf(seq, "present voltage: %d mV\n", | 514 | seq_printf(seq, "present voltage: %d mV\n", |
605 | (u32) bst->present_voltage); | 515 | battery->voltage_now); |
606 | |||
607 | end: | 516 | end: |
608 | 517 | if (result) | |
609 | if (result) { | ||
610 | seq_printf(seq, "ERROR: Unable to read battery state\n"); | 518 | seq_printf(seq, "ERROR: Unable to read battery state\n"); |
611 | } | ||
612 | 519 | ||
613 | return result; | 520 | return result; |
614 | } | 521 | } |
@@ -616,7 +523,6 @@ static int acpi_battery_print_state(struct seq_file *seq, int result) | |||
616 | static int acpi_battery_print_alarm(struct seq_file *seq, int result) | 523 | static int acpi_battery_print_alarm(struct seq_file *seq, int result) |
617 | { | 524 | { |
618 | struct acpi_battery *battery = seq->private; | 525 | struct acpi_battery *battery = seq->private; |
619 | char *units = "?"; | ||
620 | 526 | ||
621 | if (result) | 527 | if (result) |
622 | goto end; | 528 | goto end; |
@@ -625,189 +531,121 @@ static int acpi_battery_print_alarm(struct seq_file *seq, int result) | |||
625 | seq_printf(seq, "present: no\n"); | 531 | seq_printf(seq, "present: no\n"); |
626 | goto end; | 532 | goto end; |
627 | } | 533 | } |
628 | |||
629 | /* Battery Units */ | ||
630 | |||
631 | units = acpi_battery_power_units(battery); | ||
632 | |||
633 | seq_printf(seq, "alarm: "); | 534 | seq_printf(seq, "alarm: "); |
634 | if (!battery->alarm) | 535 | if (!battery->alarm) |
635 | seq_printf(seq, "unsupported\n"); | 536 | seq_printf(seq, "unsupported\n"); |
636 | else | 537 | else |
637 | seq_printf(seq, "%lu %sh\n", battery->alarm, units); | 538 | seq_printf(seq, "%u %sh\n", battery->alarm, |
638 | 539 | acpi_battery_units(battery)); | |
639 | end: | 540 | end: |
640 | |||
641 | if (result) | 541 | if (result) |
642 | seq_printf(seq, "ERROR: Unable to read battery alarm\n"); | 542 | seq_printf(seq, "ERROR: Unable to read battery alarm\n"); |
643 | |||
644 | return result; | 543 | return result; |
645 | } | 544 | } |
646 | 545 | ||
647 | static ssize_t | 546 | static ssize_t acpi_battery_write_alarm(struct file *file, |
648 | acpi_battery_write_alarm(struct file *file, | 547 | const char __user * buffer, |
649 | const char __user * buffer, | 548 | size_t count, loff_t * ppos) |
650 | size_t count, loff_t * ppos) | ||
651 | { | 549 | { |
652 | int result = 0; | 550 | int result = 0; |
653 | char alarm_string[12] = { '\0' }; | 551 | char alarm_string[12] = { '\0' }; |
654 | struct seq_file *m = file->private_data; | 552 | struct seq_file *m = file->private_data; |
655 | struct acpi_battery *battery = m->private; | 553 | struct acpi_battery *battery = m->private; |
656 | int update_result = ACPI_BATTERY_NONE_UPDATE; | ||
657 | 554 | ||
658 | if (!battery || (count > sizeof(alarm_string) - 1)) | 555 | if (!battery || (count > sizeof(alarm_string) - 1)) |
659 | return -EINVAL; | 556 | return -EINVAL; |
660 | |||
661 | mutex_lock(&battery->mutex); | ||
662 | |||
663 | result = acpi_battery_update(battery, 1, &update_result); | ||
664 | if (result) { | 557 | if (result) { |
665 | result = -ENODEV; | 558 | result = -ENODEV; |
666 | goto end; | 559 | goto end; |
667 | } | 560 | } |
668 | |||
669 | if (!acpi_battery_present(battery)) { | 561 | if (!acpi_battery_present(battery)) { |
670 | result = -ENODEV; | 562 | result = -ENODEV; |
671 | goto end; | 563 | goto end; |
672 | } | 564 | } |
673 | |||
674 | if (copy_from_user(alarm_string, buffer, count)) { | 565 | if (copy_from_user(alarm_string, buffer, count)) { |
675 | result = -EFAULT; | 566 | result = -EFAULT; |
676 | goto end; | 567 | goto end; |
677 | } | 568 | } |
678 | |||
679 | alarm_string[count] = '\0'; | 569 | alarm_string[count] = '\0'; |
680 | 570 | battery->alarm = simple_strtol(alarm_string, NULL, 0); | |
681 | result = acpi_battery_set_alarm(battery, | 571 | result = acpi_battery_set_alarm(battery); |
682 | simple_strtoul(alarm_string, NULL, 0)); | ||
683 | if (result) | ||
684 | goto end; | ||
685 | |||
686 | end: | 572 | end: |
687 | |||
688 | acpi_battery_check_result(battery, result); | ||
689 | |||
690 | if (!result) | 573 | if (!result) |
691 | result = count; | 574 | return count; |
692 | |||
693 | mutex_unlock(&battery->mutex); | ||
694 | |||
695 | return result; | 575 | return result; |
696 | } | 576 | } |
697 | 577 | ||
698 | typedef int(*print_func)(struct seq_file *seq, int result); | 578 | typedef int(*print_func)(struct seq_file *seq, int result); |
699 | typedef int(*get_func)(struct acpi_battery *battery); | 579 | |
700 | 580 | static print_func acpi_print_funcs[ACPI_BATTERY_NUMFILES] = { | |
701 | static struct acpi_read_mux { | 581 | acpi_battery_print_info, |
702 | print_func print; | 582 | acpi_battery_print_state, |
703 | get_func get; | 583 | acpi_battery_print_alarm, |
704 | } acpi_read_funcs[ACPI_BATTERY_NUMFILES] = { | ||
705 | {.get = acpi_battery_get_info, .print = acpi_battery_print_info}, | ||
706 | {.get = acpi_battery_get_state, .print = acpi_battery_print_state}, | ||
707 | {.get = acpi_battery_get_alarm, .print = acpi_battery_print_alarm}, | ||
708 | }; | 584 | }; |
709 | 585 | ||
710 | static int acpi_battery_read(int fid, struct seq_file *seq) | 586 | static int acpi_battery_read(int fid, struct seq_file *seq) |
711 | { | 587 | { |
712 | struct acpi_battery *battery = seq->private; | 588 | struct acpi_battery *battery = seq->private; |
713 | int result = 0; | 589 | int result = acpi_battery_update(battery); |
714 | int update_result = ACPI_BATTERY_NONE_UPDATE; | 590 | return acpi_print_funcs[fid](seq, result); |
715 | int update = 0; | 591 | } |
716 | 592 | ||
717 | mutex_lock(&battery->mutex); | 593 | #define DECLARE_FILE_FUNCTIONS(_name) \ |
718 | 594 | static int acpi_battery_read_##_name(struct seq_file *seq, void *offset) \ | |
719 | update = (get_seconds() - battery->update_time[fid] >= update_time); | 595 | { \ |
720 | update = (update | battery->flags.update[fid]); | 596 | return acpi_battery_read(_name##_tag, seq); \ |
721 | 597 | } \ | |
722 | result = acpi_battery_update(battery, update, &update_result); | 598 | static int acpi_battery_##_name##_open_fs(struct inode *inode, struct file *file) \ |
723 | if (result) | 599 | { \ |
724 | goto end; | 600 | return single_open(file, acpi_battery_read_##_name, PDE(inode)->data); \ |
725 | 601 | } | |
726 | if (update_result == ACPI_BATTERY_EASY_UPDATE) { | 602 | |
727 | result = acpi_read_funcs[fid].get(battery); | 603 | DECLARE_FILE_FUNCTIONS(info); |
728 | if (result) | 604 | DECLARE_FILE_FUNCTIONS(state); |
729 | goto end; | 605 | DECLARE_FILE_FUNCTIONS(alarm); |
606 | |||
607 | #undef DECLARE_FILE_FUNCTIONS | ||
608 | |||
609 | #define FILE_DESCRIPTION_RO(_name) \ | ||
610 | { \ | ||
611 | .name = __stringify(_name), \ | ||
612 | .mode = S_IRUGO, \ | ||
613 | .ops = { \ | ||
614 | .open = acpi_battery_##_name##_open_fs, \ | ||
615 | .read = seq_read, \ | ||
616 | .llseek = seq_lseek, \ | ||
617 | .release = single_release, \ | ||
618 | .owner = THIS_MODULE, \ | ||
619 | }, \ | ||
620 | } | ||
621 | |||
622 | #define FILE_DESCRIPTION_RW(_name) \ | ||
623 | { \ | ||
624 | .name = __stringify(_name), \ | ||
625 | .mode = S_IFREG | S_IRUGO | S_IWUSR, \ | ||
626 | .ops = { \ | ||
627 | .open = acpi_battery_##_name##_open_fs, \ | ||
628 | .read = seq_read, \ | ||
629 | .llseek = seq_lseek, \ | ||
630 | .write = acpi_battery_write_##_name, \ | ||
631 | .release = single_release, \ | ||
632 | .owner = THIS_MODULE, \ | ||
633 | }, \ | ||
730 | } | 634 | } |
731 | 635 | ||
732 | end: | ||
733 | result = acpi_read_funcs[fid].print(seq, result); | ||
734 | acpi_battery_check_result(battery, result); | ||
735 | battery->flags.update[fid] = result; | ||
736 | mutex_unlock(&battery->mutex); | ||
737 | return result; | ||
738 | } | ||
739 | |||
740 | static int acpi_battery_read_info(struct seq_file *seq, void *offset) | ||
741 | { | ||
742 | return acpi_battery_read(ACPI_BATTERY_INFO, seq); | ||
743 | } | ||
744 | |||
745 | static int acpi_battery_read_state(struct seq_file *seq, void *offset) | ||
746 | { | ||
747 | return acpi_battery_read(ACPI_BATTERY_STATE, seq); | ||
748 | } | ||
749 | |||
750 | static int acpi_battery_read_alarm(struct seq_file *seq, void *offset) | ||
751 | { | ||
752 | return acpi_battery_read(ACPI_BATTERY_ALARM, seq); | ||
753 | } | ||
754 | |||
755 | static int acpi_battery_info_open_fs(struct inode *inode, struct file *file) | ||
756 | { | ||
757 | return single_open(file, acpi_battery_read_info, PDE(inode)->data); | ||
758 | } | ||
759 | |||
760 | static int acpi_battery_state_open_fs(struct inode *inode, struct file *file) | ||
761 | { | ||
762 | return single_open(file, acpi_battery_read_state, PDE(inode)->data); | ||
763 | } | ||
764 | |||
765 | static int acpi_battery_alarm_open_fs(struct inode *inode, struct file *file) | ||
766 | { | ||
767 | return single_open(file, acpi_battery_read_alarm, PDE(inode)->data); | ||
768 | } | ||
769 | |||
770 | static struct battery_file { | 636 | static struct battery_file { |
771 | struct file_operations ops; | 637 | struct file_operations ops; |
772 | mode_t mode; | 638 | mode_t mode; |
773 | char *name; | 639 | char *name; |
774 | } acpi_battery_file[] = { | 640 | } acpi_battery_file[] = { |
775 | { | 641 | FILE_DESCRIPTION_RO(info), |
776 | .name = "info", | 642 | FILE_DESCRIPTION_RO(state), |
777 | .mode = S_IRUGO, | 643 | FILE_DESCRIPTION_RW(alarm), |
778 | .ops = { | ||
779 | .open = acpi_battery_info_open_fs, | ||
780 | .read = seq_read, | ||
781 | .llseek = seq_lseek, | ||
782 | .release = single_release, | ||
783 | .owner = THIS_MODULE, | ||
784 | }, | ||
785 | }, | ||
786 | { | ||
787 | .name = "state", | ||
788 | .mode = S_IRUGO, | ||
789 | .ops = { | ||
790 | .open = acpi_battery_state_open_fs, | ||
791 | .read = seq_read, | ||
792 | .llseek = seq_lseek, | ||
793 | .release = single_release, | ||
794 | .owner = THIS_MODULE, | ||
795 | }, | ||
796 | }, | ||
797 | { | ||
798 | .name = "alarm", | ||
799 | .mode = S_IFREG | S_IRUGO | S_IWUSR, | ||
800 | .ops = { | ||
801 | .open = acpi_battery_alarm_open_fs, | ||
802 | .read = seq_read, | ||
803 | .write = acpi_battery_write_alarm, | ||
804 | .llseek = seq_lseek, | ||
805 | .release = single_release, | ||
806 | .owner = THIS_MODULE, | ||
807 | }, | ||
808 | }, | ||
809 | }; | 644 | }; |
810 | 645 | ||
646 | #undef FILE_DESCRIPTION_RO | ||
647 | #undef FILE_DESCRIPTION_RW | ||
648 | |||
811 | static int acpi_battery_add_fs(struct acpi_device *device) | 649 | static int acpi_battery_add_fs(struct acpi_device *device) |
812 | { | 650 | { |
813 | struct proc_dir_entry *entry = NULL; | 651 | struct proc_dir_entry *entry = NULL; |
@@ -832,25 +670,51 @@ static int acpi_battery_add_fs(struct acpi_device *device) | |||
832 | entry->owner = THIS_MODULE; | 670 | entry->owner = THIS_MODULE; |
833 | } | 671 | } |
834 | } | 672 | } |
835 | |||
836 | return 0; | 673 | return 0; |
837 | } | 674 | } |
838 | 675 | ||
839 | static int acpi_battery_remove_fs(struct acpi_device *device) | 676 | static void acpi_battery_remove_fs(struct acpi_device *device) |
840 | { | 677 | { |
841 | int i; | 678 | int i; |
842 | if (acpi_device_dir(device)) { | 679 | if (!acpi_device_dir(device)) |
843 | for (i = 0; i < ACPI_BATTERY_NUMFILES; ++i) { | 680 | return; |
844 | remove_proc_entry(acpi_battery_file[i].name, | 681 | for (i = 0; i < ACPI_BATTERY_NUMFILES; ++i) |
682 | remove_proc_entry(acpi_battery_file[i].name, | ||
845 | acpi_device_dir(device)); | 683 | acpi_device_dir(device)); |
846 | } | ||
847 | remove_proc_entry(acpi_device_bid(device), acpi_battery_dir); | ||
848 | acpi_device_dir(device) = NULL; | ||
849 | } | ||
850 | 684 | ||
851 | return 0; | 685 | remove_proc_entry(acpi_device_bid(device), acpi_battery_dir); |
686 | acpi_device_dir(device) = NULL; | ||
687 | } | ||
688 | |||
689 | #endif | ||
690 | |||
691 | static ssize_t acpi_battery_alarm_show(struct device *dev, | ||
692 | struct device_attribute *attr, | ||
693 | char *buf) | ||
694 | { | ||
695 | struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev)); | ||
696 | return sprintf(buf, "%d\n", battery->alarm * 1000); | ||
697 | } | ||
698 | |||
699 | static ssize_t acpi_battery_alarm_store(struct device *dev, | ||
700 | struct device_attribute *attr, | ||
701 | const char *buf, size_t count) | ||
702 | { | ||
703 | unsigned long x; | ||
704 | struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev)); | ||
705 | if (sscanf(buf, "%ld\n", &x) == 1) | ||
706 | battery->alarm = x/1000; | ||
707 | if (acpi_battery_present(battery)) | ||
708 | acpi_battery_set_alarm(battery); | ||
709 | return count; | ||
852 | } | 710 | } |
853 | 711 | ||
712 | static struct device_attribute alarm_attr = { | ||
713 | .attr = {.name = "alarm", .mode = 0644, .owner = THIS_MODULE}, | ||
714 | .show = acpi_battery_alarm_show, | ||
715 | .store = acpi_battery_alarm_store, | ||
716 | }; | ||
717 | |||
854 | /* -------------------------------------------------------------------------- | 718 | /* -------------------------------------------------------------------------- |
855 | Driver Interface | 719 | Driver Interface |
856 | -------------------------------------------------------------------------- */ | 720 | -------------------------------------------------------------------------- */ |
@@ -858,33 +722,17 @@ static int acpi_battery_remove_fs(struct acpi_device *device) | |||
858 | static void acpi_battery_notify(acpi_handle handle, u32 event, void *data) | 722 | static void acpi_battery_notify(acpi_handle handle, u32 event, void *data) |
859 | { | 723 | { |
860 | struct acpi_battery *battery = data; | 724 | struct acpi_battery *battery = data; |
861 | struct acpi_device *device = NULL; | 725 | struct acpi_device *device; |
862 | |||
863 | if (!battery) | 726 | if (!battery) |
864 | return; | 727 | return; |
865 | |||
866 | device = battery->device; | 728 | device = battery->device; |
867 | 729 | acpi_battery_update(battery); | |
868 | switch (event) { | 730 | acpi_bus_generate_proc_event(device, event, |
869 | case ACPI_BATTERY_NOTIFY_STATUS: | 731 | acpi_battery_present(battery)); |
870 | case ACPI_BATTERY_NOTIFY_INFO: | 732 | acpi_bus_generate_netlink_event(device->pnp.device_class, |
871 | case ACPI_NOTIFY_BUS_CHECK: | 733 | device->dev.bus_id, event, |
872 | case ACPI_NOTIFY_DEVICE_CHECK: | ||
873 | device = battery->device; | ||
874 | acpi_battery_notify_update(battery); | ||
875 | acpi_bus_generate_proc_event(device, event, | ||
876 | acpi_battery_present(battery)); | 734 | acpi_battery_present(battery)); |
877 | acpi_bus_generate_netlink_event(device->pnp.device_class, | 735 | kobject_uevent(&battery->bat.dev->kobj, KOBJ_CHANGE); |
878 | device->dev.bus_id, event, | ||
879 | acpi_battery_present(battery)); | ||
880 | break; | ||
881 | default: | ||
882 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | ||
883 | "Unsupported event [0x%x]\n", event)); | ||
884 | break; | ||
885 | } | ||
886 | |||
887 | return; | ||
888 | } | 736 | } |
889 | 737 | ||
890 | static int acpi_battery_add(struct acpi_device *device) | 738 | static int acpi_battery_add(struct acpi_device *device) |
@@ -892,33 +740,27 @@ static int acpi_battery_add(struct acpi_device *device) | |||
892 | int result = 0; | 740 | int result = 0; |
893 | acpi_status status = 0; | 741 | acpi_status status = 0; |
894 | struct acpi_battery *battery = NULL; | 742 | struct acpi_battery *battery = NULL; |
895 | |||
896 | if (!device) | 743 | if (!device) |
897 | return -EINVAL; | 744 | return -EINVAL; |
898 | |||
899 | battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL); | 745 | battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL); |
900 | if (!battery) | 746 | if (!battery) |
901 | return -ENOMEM; | 747 | return -ENOMEM; |
902 | |||
903 | mutex_init(&battery->mutex); | ||
904 | |||
905 | mutex_lock(&battery->mutex); | ||
906 | |||
907 | battery->device = device; | 748 | battery->device = device; |
908 | strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME); | 749 | strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME); |
909 | strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS); | 750 | strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS); |
910 | acpi_driver_data(device) = battery; | 751 | acpi_driver_data(device) = battery; |
911 | 752 | mutex_init(&battery->lock); | |
912 | result = acpi_battery_get_status(battery); | 753 | acpi_battery_update(battery); |
913 | if (result) | 754 | #ifdef CONFIG_ACPI_PROCFS |
914 | goto end; | ||
915 | |||
916 | battery->flags.init_update = 1; | ||
917 | |||
918 | result = acpi_battery_add_fs(device); | 755 | result = acpi_battery_add_fs(device); |
919 | if (result) | 756 | if (result) |
920 | goto end; | 757 | goto end; |
921 | 758 | #endif | |
759 | battery->bat.name = acpi_device_bid(device); | ||
760 | battery->bat.type = POWER_SUPPLY_TYPE_BATTERY; | ||
761 | battery->bat.get_property = acpi_battery_get_property; | ||
762 | result = power_supply_register(&battery->device->dev, &battery->bat); | ||
763 | result = device_create_file(battery->bat.dev, &alarm_attr); | ||
922 | status = acpi_install_notify_handler(device->handle, | 764 | status = acpi_install_notify_handler(device->handle, |
923 | ACPI_ALL_NOTIFY, | 765 | ACPI_ALL_NOTIFY, |
924 | acpi_battery_notify, battery); | 766 | acpi_battery_notify, battery); |
@@ -927,20 +769,16 @@ static int acpi_battery_add(struct acpi_device *device) | |||
927 | result = -ENODEV; | 769 | result = -ENODEV; |
928 | goto end; | 770 | goto end; |
929 | } | 771 | } |
930 | |||
931 | printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n", | 772 | printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n", |
932 | ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device), | 773 | ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device), |
933 | device->status.battery_present ? "present" : "absent"); | 774 | device->status.battery_present ? "present" : "absent"); |
934 | |||
935 | end: | 775 | end: |
936 | |||
937 | if (result) { | 776 | if (result) { |
777 | #ifdef CONFIG_ACPI_PROCFS | ||
938 | acpi_battery_remove_fs(device); | 778 | acpi_battery_remove_fs(device); |
779 | #endif | ||
939 | kfree(battery); | 780 | kfree(battery); |
940 | } | 781 | } |
941 | |||
942 | mutex_unlock(&battery->mutex); | ||
943 | |||
944 | return result; | 782 | return result; |
945 | } | 783 | } |
946 | 784 | ||
@@ -951,27 +789,19 @@ static int acpi_battery_remove(struct acpi_device *device, int type) | |||
951 | 789 | ||
952 | if (!device || !acpi_driver_data(device)) | 790 | if (!device || !acpi_driver_data(device)) |
953 | return -EINVAL; | 791 | return -EINVAL; |
954 | |||
955 | battery = acpi_driver_data(device); | 792 | battery = acpi_driver_data(device); |
956 | |||
957 | mutex_lock(&battery->mutex); | ||
958 | |||
959 | status = acpi_remove_notify_handler(device->handle, | 793 | status = acpi_remove_notify_handler(device->handle, |
960 | ACPI_ALL_NOTIFY, | 794 | ACPI_ALL_NOTIFY, |
961 | acpi_battery_notify); | 795 | acpi_battery_notify); |
962 | 796 | #ifdef CONFIG_ACPI_PROCFS | |
963 | acpi_battery_remove_fs(device); | 797 | acpi_battery_remove_fs(device); |
964 | 798 | #endif | |
965 | kfree(battery->bif_data.pointer); | 799 | if (battery->bat.dev) { |
966 | 800 | device_remove_file(battery->bat.dev, &alarm_attr); | |
967 | kfree(battery->bst_data.pointer); | 801 | power_supply_unregister(&battery->bat); |
968 | 802 | } | |
969 | mutex_unlock(&battery->mutex); | 803 | mutex_destroy(&battery->lock); |
970 | |||
971 | mutex_destroy(&battery->mutex); | ||
972 | |||
973 | kfree(battery); | 804 | kfree(battery); |
974 | |||
975 | return 0; | 805 | return 0; |
976 | } | 806 | } |
977 | 807 | ||
@@ -979,44 +809,48 @@ static int acpi_battery_remove(struct acpi_device *device, int type) | |||
979 | static int acpi_battery_resume(struct acpi_device *device) | 809 | static int acpi_battery_resume(struct acpi_device *device) |
980 | { | 810 | { |
981 | struct acpi_battery *battery; | 811 | struct acpi_battery *battery; |
982 | |||
983 | if (!device) | 812 | if (!device) |
984 | return -EINVAL; | 813 | return -EINVAL; |
985 | 814 | battery = acpi_driver_data(device); | |
986 | battery = device->driver_data; | 815 | battery->update_time = 0; |
987 | |||
988 | battery->flags.init_update = 1; | ||
989 | |||
990 | return 0; | 816 | return 0; |
991 | } | 817 | } |
992 | 818 | ||
819 | static struct acpi_driver acpi_battery_driver = { | ||
820 | .name = "battery", | ||
821 | .class = ACPI_BATTERY_CLASS, | ||
822 | .ids = battery_device_ids, | ||
823 | .ops = { | ||
824 | .add = acpi_battery_add, | ||
825 | .resume = acpi_battery_resume, | ||
826 | .remove = acpi_battery_remove, | ||
827 | }, | ||
828 | }; | ||
829 | |||
993 | static int __init acpi_battery_init(void) | 830 | static int __init acpi_battery_init(void) |
994 | { | 831 | { |
995 | int result; | ||
996 | |||
997 | if (acpi_disabled) | 832 | if (acpi_disabled) |
998 | return -ENODEV; | 833 | return -ENODEV; |
999 | 834 | #ifdef CONFIG_ACPI_PROCFS | |
1000 | acpi_battery_dir = acpi_lock_battery_dir(); | 835 | acpi_battery_dir = acpi_lock_battery_dir(); |
1001 | if (!acpi_battery_dir) | 836 | if (!acpi_battery_dir) |
1002 | return -ENODEV; | 837 | return -ENODEV; |
1003 | 838 | #endif | |
1004 | result = acpi_bus_register_driver(&acpi_battery_driver); | 839 | if (acpi_bus_register_driver(&acpi_battery_driver) < 0) { |
1005 | if (result < 0) { | 840 | #ifdef CONFIG_ACPI_PROCFS |
1006 | acpi_unlock_battery_dir(acpi_battery_dir); | 841 | acpi_unlock_battery_dir(acpi_battery_dir); |
842 | #endif | ||
1007 | return -ENODEV; | 843 | return -ENODEV; |
1008 | } | 844 | } |
1009 | |||
1010 | return 0; | 845 | return 0; |
1011 | } | 846 | } |
1012 | 847 | ||
1013 | static void __exit acpi_battery_exit(void) | 848 | static void __exit acpi_battery_exit(void) |
1014 | { | 849 | { |
1015 | acpi_bus_unregister_driver(&acpi_battery_driver); | 850 | acpi_bus_unregister_driver(&acpi_battery_driver); |
1016 | 851 | #ifdef CONFIG_ACPI_PROCFS | |
1017 | acpi_unlock_battery_dir(acpi_battery_dir); | 852 | acpi_unlock_battery_dir(acpi_battery_dir); |
1018 | 853 | #endif | |
1019 | return; | ||
1020 | } | 854 | } |
1021 | 855 | ||
1022 | module_init(acpi_battery_init); | 856 | module_init(acpi_battery_init); |
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index cbfc81579c9..fb2cff9a2d2 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c | |||
@@ -286,15 +286,11 @@ DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue); | |||
286 | 286 | ||
287 | extern int event_is_open; | 287 | extern int event_is_open; |
288 | 288 | ||
289 | int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data) | 289 | int acpi_bus_generate_proc_event4(const char *device_class, const char *bus_id, u8 type, int data) |
290 | { | 290 | { |
291 | struct acpi_bus_event *event = NULL; | 291 | struct acpi_bus_event *event; |
292 | unsigned long flags = 0; | 292 | unsigned long flags = 0; |
293 | 293 | ||
294 | |||
295 | if (!device) | ||
296 | return -EINVAL; | ||
297 | |||
298 | /* drop event on the floor if no one's listening */ | 294 | /* drop event on the floor if no one's listening */ |
299 | if (!event_is_open) | 295 | if (!event_is_open) |
300 | return 0; | 296 | return 0; |
@@ -303,8 +299,8 @@ int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data) | |||
303 | if (!event) | 299 | if (!event) |
304 | return -ENOMEM; | 300 | return -ENOMEM; |
305 | 301 | ||
306 | strcpy(event->device_class, device->pnp.device_class); | 302 | strcpy(event->device_class, device_class); |
307 | strcpy(event->bus_id, device->pnp.bus_id); | 303 | strcpy(event->bus_id, bus_id); |
308 | event->type = type; | 304 | event->type = type; |
309 | event->data = data; | 305 | event->data = data; |
310 | 306 | ||
@@ -315,6 +311,17 @@ int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data) | |||
315 | wake_up_interruptible(&acpi_bus_event_queue); | 311 | wake_up_interruptible(&acpi_bus_event_queue); |
316 | 312 | ||
317 | return 0; | 313 | return 0; |
314 | |||
315 | } | ||
316 | |||
317 | EXPORT_SYMBOL_GPL(acpi_bus_generate_proc_event4); | ||
318 | |||
319 | int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data) | ||
320 | { | ||
321 | if (!device) | ||
322 | return -EINVAL; | ||
323 | return acpi_bus_generate_proc_event4(device->pnp.device_class, | ||
324 | device->pnp.bus_id, type, data); | ||
318 | } | 325 | } |
319 | 326 | ||
320 | EXPORT_SYMBOL(acpi_bus_generate_proc_event); | 327 | EXPORT_SYMBOL(acpi_bus_generate_proc_event); |
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c index 2e79a3395ec..301e832e696 100644 --- a/drivers/acpi/button.c +++ b/drivers/acpi/button.c | |||
@@ -434,18 +434,18 @@ static int acpi_button_add(struct acpi_device *device) | |||
434 | switch (button->type) { | 434 | switch (button->type) { |
435 | case ACPI_BUTTON_TYPE_POWER: | 435 | case ACPI_BUTTON_TYPE_POWER: |
436 | case ACPI_BUTTON_TYPE_POWERF: | 436 | case ACPI_BUTTON_TYPE_POWERF: |
437 | input->evbit[0] = BIT(EV_KEY); | 437 | input->evbit[0] = BIT_MASK(EV_KEY); |
438 | set_bit(KEY_POWER, input->keybit); | 438 | set_bit(KEY_POWER, input->keybit); |
439 | break; | 439 | break; |
440 | 440 | ||
441 | case ACPI_BUTTON_TYPE_SLEEP: | 441 | case ACPI_BUTTON_TYPE_SLEEP: |
442 | case ACPI_BUTTON_TYPE_SLEEPF: | 442 | case ACPI_BUTTON_TYPE_SLEEPF: |
443 | input->evbit[0] = BIT(EV_KEY); | 443 | input->evbit[0] = BIT_MASK(EV_KEY); |
444 | set_bit(KEY_SLEEP, input->keybit); | 444 | set_bit(KEY_SLEEP, input->keybit); |
445 | break; | 445 | break; |
446 | 446 | ||
447 | case ACPI_BUTTON_TYPE_LID: | 447 | case ACPI_BUTTON_TYPE_LID: |
448 | input->evbit[0] = BIT(EV_SW); | 448 | input->evbit[0] = BIT_MASK(EV_SW); |
449 | set_bit(SW_LID, input->swbit); | 449 | set_bit(SW_LID, input->swbit); |
450 | break; | 450 | break; |
451 | } | 451 | } |
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 3f7935ab0cf..7b4178393e3 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
@@ -121,6 +121,7 @@ static struct acpi_ec { | |||
121 | atomic_t event_count; | 121 | atomic_t event_count; |
122 | wait_queue_head_t wait; | 122 | wait_queue_head_t wait; |
123 | struct list_head list; | 123 | struct list_head list; |
124 | u8 handlers_installed; | ||
124 | } *boot_ec, *first_ec; | 125 | } *boot_ec, *first_ec; |
125 | 126 | ||
126 | /* -------------------------------------------------------------------------- | 127 | /* -------------------------------------------------------------------------- |
@@ -425,7 +426,7 @@ int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit, | |||
425 | handler->func = func; | 426 | handler->func = func; |
426 | handler->data = data; | 427 | handler->data = data; |
427 | mutex_lock(&ec->lock); | 428 | mutex_lock(&ec->lock); |
428 | list_add_tail(&handler->node, &ec->list); | 429 | list_add(&handler->node, &ec->list); |
429 | mutex_unlock(&ec->lock); | 430 | mutex_unlock(&ec->lock); |
430 | return 0; | 431 | return 0; |
431 | } | 432 | } |
@@ -440,7 +441,6 @@ void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit) | |||
440 | if (query_bit == handler->query_bit) { | 441 | if (query_bit == handler->query_bit) { |
441 | list_del(&handler->node); | 442 | list_del(&handler->node); |
442 | kfree(handler); | 443 | kfree(handler); |
443 | break; | ||
444 | } | 444 | } |
445 | } | 445 | } |
446 | mutex_unlock(&ec->lock); | 446 | mutex_unlock(&ec->lock); |
@@ -680,32 +680,50 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval) | |||
680 | status = acpi_evaluate_integer(handle, "_GPE", NULL, &ec->gpe); | 680 | status = acpi_evaluate_integer(handle, "_GPE", NULL, &ec->gpe); |
681 | if (ACPI_FAILURE(status)) | 681 | if (ACPI_FAILURE(status)) |
682 | return status; | 682 | return status; |
683 | |||
684 | /* Find and register all query methods */ | 683 | /* Find and register all query methods */ |
685 | acpi_walk_namespace(ACPI_TYPE_METHOD, handle, 1, | 684 | acpi_walk_namespace(ACPI_TYPE_METHOD, handle, 1, |
686 | acpi_ec_register_query_methods, ec, NULL); | 685 | acpi_ec_register_query_methods, ec, NULL); |
687 | |||
688 | /* Use the global lock for all EC transactions? */ | 686 | /* Use the global lock for all EC transactions? */ |
689 | acpi_evaluate_integer(handle, "_GLK", NULL, &ec->global_lock); | 687 | acpi_evaluate_integer(handle, "_GLK", NULL, &ec->global_lock); |
690 | |||
691 | ec->handle = handle; | 688 | ec->handle = handle; |
692 | |||
693 | printk(KERN_INFO PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n", | ||
694 | ec->gpe, ec->command_addr, ec->data_addr); | ||
695 | |||
696 | return AE_CTRL_TERMINATE; | 689 | return AE_CTRL_TERMINATE; |
697 | } | 690 | } |
698 | 691 | ||
692 | static void ec_remove_handlers(struct acpi_ec *ec) | ||
693 | { | ||
694 | if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle, | ||
695 | ACPI_ADR_SPACE_EC, &acpi_ec_space_handler))) | ||
696 | printk(KERN_ERR PREFIX "failed to remove space handler\n"); | ||
697 | if (ACPI_FAILURE(acpi_remove_gpe_handler(NULL, ec->gpe, | ||
698 | &acpi_ec_gpe_handler))) | ||
699 | printk(KERN_ERR PREFIX "failed to remove gpe handler\n"); | ||
700 | ec->handlers_installed = 0; | ||
701 | } | ||
702 | |||
699 | static int acpi_ec_add(struct acpi_device *device) | 703 | static int acpi_ec_add(struct acpi_device *device) |
700 | { | 704 | { |
701 | struct acpi_ec *ec = NULL; | 705 | struct acpi_ec *ec = NULL; |
702 | 706 | ||
703 | if (!device) | 707 | if (!device) |
704 | return -EINVAL; | 708 | return -EINVAL; |
705 | |||
706 | strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME); | 709 | strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME); |
707 | strcpy(acpi_device_class(device), ACPI_EC_CLASS); | 710 | strcpy(acpi_device_class(device), ACPI_EC_CLASS); |
708 | 711 | ||
712 | /* Check for boot EC */ | ||
713 | if (boot_ec) { | ||
714 | if (boot_ec->handle == device->handle) { | ||
715 | /* Pre-loaded EC from DSDT, just move pointer */ | ||
716 | ec = boot_ec; | ||
717 | boot_ec = NULL; | ||
718 | goto end; | ||
719 | } else if (boot_ec->handle == ACPI_ROOT_OBJECT) { | ||
720 | /* ECDT-based EC, time to shut it down */ | ||
721 | ec_remove_handlers(boot_ec); | ||
722 | kfree(boot_ec); | ||
723 | first_ec = boot_ec = NULL; | ||
724 | } | ||
725 | } | ||
726 | |||
709 | ec = make_acpi_ec(); | 727 | ec = make_acpi_ec(); |
710 | if (!ec) | 728 | if (!ec) |
711 | return -ENOMEM; | 729 | return -ENOMEM; |
@@ -715,25 +733,14 @@ static int acpi_ec_add(struct acpi_device *device) | |||
715 | kfree(ec); | 733 | kfree(ec); |
716 | return -EINVAL; | 734 | return -EINVAL; |
717 | } | 735 | } |
718 | |||
719 | /* Check if we found the boot EC */ | ||
720 | if (boot_ec) { | ||
721 | if (boot_ec->gpe == ec->gpe) { | ||
722 | /* We might have incorrect info for GL at boot time */ | ||
723 | mutex_lock(&boot_ec->lock); | ||
724 | boot_ec->global_lock = ec->global_lock; | ||
725 | /* Copy handlers from new ec into boot ec */ | ||
726 | list_splice(&ec->list, &boot_ec->list); | ||
727 | mutex_unlock(&boot_ec->lock); | ||
728 | kfree(ec); | ||
729 | ec = boot_ec; | ||
730 | } | ||
731 | } else | ||
732 | first_ec = ec; | ||
733 | ec->handle = device->handle; | 736 | ec->handle = device->handle; |
737 | end: | ||
738 | if (!first_ec) | ||
739 | first_ec = ec; | ||
734 | acpi_driver_data(device) = ec; | 740 | acpi_driver_data(device) = ec; |
735 | |||
736 | acpi_ec_add_fs(device); | 741 | acpi_ec_add_fs(device); |
742 | printk(KERN_INFO PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n", | ||
743 | ec->gpe, ec->command_addr, ec->data_addr); | ||
737 | return 0; | 744 | return 0; |
738 | } | 745 | } |
739 | 746 | ||
@@ -756,10 +763,7 @@ static int acpi_ec_remove(struct acpi_device *device, int type) | |||
756 | acpi_driver_data(device) = NULL; | 763 | acpi_driver_data(device) = NULL; |
757 | if (ec == first_ec) | 764 | if (ec == first_ec) |
758 | first_ec = NULL; | 765 | first_ec = NULL; |
759 | 766 | kfree(ec); | |
760 | /* Don't touch boot EC */ | ||
761 | if (boot_ec != ec) | ||
762 | kfree(ec); | ||
763 | return 0; | 767 | return 0; |
764 | } | 768 | } |
765 | 769 | ||
@@ -789,6 +793,8 @@ ec_parse_io_ports(struct acpi_resource *resource, void *context) | |||
789 | static int ec_install_handlers(struct acpi_ec *ec) | 793 | static int ec_install_handlers(struct acpi_ec *ec) |
790 | { | 794 | { |
791 | acpi_status status; | 795 | acpi_status status; |
796 | if (ec->handlers_installed) | ||
797 | return 0; | ||
792 | status = acpi_install_gpe_handler(NULL, ec->gpe, | 798 | status = acpi_install_gpe_handler(NULL, ec->gpe, |
793 | ACPI_GPE_EDGE_TRIGGERED, | 799 | ACPI_GPE_EDGE_TRIGGERED, |
794 | &acpi_ec_gpe_handler, ec); | 800 | &acpi_ec_gpe_handler, ec); |
@@ -807,6 +813,7 @@ static int ec_install_handlers(struct acpi_ec *ec) | |||
807 | return -ENODEV; | 813 | return -ENODEV; |
808 | } | 814 | } |
809 | 815 | ||
816 | ec->handlers_installed = 1; | ||
810 | return 0; | 817 | return 0; |
811 | } | 818 | } |
812 | 819 | ||
@@ -823,41 +830,22 @@ static int acpi_ec_start(struct acpi_device *device) | |||
823 | if (!ec) | 830 | if (!ec) |
824 | return -EINVAL; | 831 | return -EINVAL; |
825 | 832 | ||
826 | /* Boot EC is already working */ | 833 | ret = ec_install_handlers(ec); |
827 | if (ec != boot_ec) | ||
828 | ret = ec_install_handlers(ec); | ||
829 | 834 | ||
830 | /* EC is fully operational, allow queries */ | 835 | /* EC is fully operational, allow queries */ |
831 | atomic_set(&ec->query_pending, 0); | 836 | atomic_set(&ec->query_pending, 0); |
832 | |||
833 | return ret; | 837 | return ret; |
834 | } | 838 | } |
835 | 839 | ||
836 | static int acpi_ec_stop(struct acpi_device *device, int type) | 840 | static int acpi_ec_stop(struct acpi_device *device, int type) |
837 | { | 841 | { |
838 | acpi_status status; | ||
839 | struct acpi_ec *ec; | 842 | struct acpi_ec *ec; |
840 | |||
841 | if (!device) | 843 | if (!device) |
842 | return -EINVAL; | 844 | return -EINVAL; |
843 | |||
844 | ec = acpi_driver_data(device); | 845 | ec = acpi_driver_data(device); |
845 | if (!ec) | 846 | if (!ec) |
846 | return -EINVAL; | 847 | return -EINVAL; |
847 | 848 | ec_remove_handlers(ec); | |
848 | /* Don't touch boot EC */ | ||
849 | if (ec == boot_ec) | ||
850 | return 0; | ||
851 | |||
852 | status = acpi_remove_address_space_handler(ec->handle, | ||
853 | ACPI_ADR_SPACE_EC, | ||
854 | &acpi_ec_space_handler); | ||
855 | if (ACPI_FAILURE(status)) | ||
856 | return -ENODEV; | ||
857 | |||
858 | status = acpi_remove_gpe_handler(NULL, ec->gpe, &acpi_ec_gpe_handler); | ||
859 | if (ACPI_FAILURE(status)) | ||
860 | return -ENODEV; | ||
861 | 849 | ||
862 | return 0; | 850 | return 0; |
863 | } | 851 | } |
@@ -877,7 +865,7 @@ int __init acpi_ec_ecdt_probe(void) | |||
877 | status = acpi_get_table(ACPI_SIG_ECDT, 1, | 865 | status = acpi_get_table(ACPI_SIG_ECDT, 1, |
878 | (struct acpi_table_header **)&ecdt_ptr); | 866 | (struct acpi_table_header **)&ecdt_ptr); |
879 | if (ACPI_SUCCESS(status)) { | 867 | if (ACPI_SUCCESS(status)) { |
880 | printk(KERN_INFO PREFIX "EC description table is found, configuring boot EC\n\n"); | 868 | printk(KERN_INFO PREFIX "EC description table is found, configuring boot EC\n"); |
881 | boot_ec->command_addr = ecdt_ptr->control.address; | 869 | boot_ec->command_addr = ecdt_ptr->control.address; |
882 | boot_ec->data_addr = ecdt_ptr->data.address; | 870 | boot_ec->data_addr = ecdt_ptr->data.address; |
883 | boot_ec->gpe = ecdt_ptr->gpe; | 871 | boot_ec->gpe = ecdt_ptr->gpe; |
@@ -899,7 +887,6 @@ int __init acpi_ec_ecdt_probe(void) | |||
899 | error: | 887 | error: |
900 | kfree(boot_ec); | 888 | kfree(boot_ec); |
901 | boot_ec = NULL; | 889 | boot_ec = NULL; |
902 | |||
903 | return -ENODEV; | 890 | return -ENODEV; |
904 | } | 891 | } |
905 | 892 | ||
diff --git a/drivers/acpi/events/evevent.c b/drivers/acpi/events/evevent.c index a1f87b5def2..e41287815ea 100644 --- a/drivers/acpi/events/evevent.c +++ b/drivers/acpi/events/evevent.c | |||
@@ -239,10 +239,8 @@ u32 acpi_ev_fixed_event_detect(void) | |||
239 | * Read the fixed feature status and enable registers, as all the cases | 239 | * Read the fixed feature status and enable registers, as all the cases |
240 | * depend on their values. Ignore errors here. | 240 | * depend on their values. Ignore errors here. |
241 | */ | 241 | */ |
242 | (void)acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | 242 | (void)acpi_hw_register_read(ACPI_REGISTER_PM1_STATUS, &fixed_status); |
243 | ACPI_REGISTER_PM1_STATUS, &fixed_status); | 243 | (void)acpi_hw_register_read(ACPI_REGISTER_PM1_ENABLE, &fixed_enable); |
244 | (void)acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | ||
245 | ACPI_REGISTER_PM1_ENABLE, &fixed_enable); | ||
246 | 244 | ||
247 | ACPI_DEBUG_PRINT((ACPI_DB_INTERRUPTS, | 245 | ACPI_DEBUG_PRINT((ACPI_DB_INTERRUPTS, |
248 | "Fixed Event Block: Enable %08X Status %08X\n", | 246 | "Fixed Event Block: Enable %08X Status %08X\n", |
diff --git a/drivers/acpi/hardware/hwregs.c b/drivers/acpi/hardware/hwregs.c index 1d371fa663f..73f9c5fb1ba 100644 --- a/drivers/acpi/hardware/hwregs.c +++ b/drivers/acpi/hardware/hwregs.c | |||
@@ -75,8 +75,7 @@ acpi_status acpi_hw_clear_acpi_status(void) | |||
75 | 75 | ||
76 | lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); | 76 | lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); |
77 | 77 | ||
78 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 78 | status = acpi_hw_register_write(ACPI_REGISTER_PM1_STATUS, |
79 | ACPI_REGISTER_PM1_STATUS, | ||
80 | ACPI_BITMASK_ALL_FIXED_STATUS); | 79 | ACPI_BITMASK_ALL_FIXED_STATUS); |
81 | if (ACPI_FAILURE(status)) { | 80 | if (ACPI_FAILURE(status)) { |
82 | goto unlock_and_exit; | 81 | goto unlock_and_exit; |
@@ -259,7 +258,7 @@ struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id) | |||
259 | * | 258 | * |
260 | ******************************************************************************/ | 259 | ******************************************************************************/ |
261 | 260 | ||
262 | acpi_status acpi_get_register(u32 register_id, u32 * return_value) | 261 | acpi_status acpi_get_register_unlocked(u32 register_id, u32 * return_value) |
263 | { | 262 | { |
264 | u32 register_value = 0; | 263 | u32 register_value = 0; |
265 | struct acpi_bit_register_info *bit_reg_info; | 264 | struct acpi_bit_register_info *bit_reg_info; |
@@ -276,8 +275,7 @@ acpi_status acpi_get_register(u32 register_id, u32 * return_value) | |||
276 | 275 | ||
277 | /* Read from the register */ | 276 | /* Read from the register */ |
278 | 277 | ||
279 | status = acpi_hw_register_read(ACPI_MTX_LOCK, | 278 | status = acpi_hw_register_read(bit_reg_info->parent_register, |
280 | bit_reg_info->parent_register, | ||
281 | ®ister_value); | 279 | ®ister_value); |
282 | 280 | ||
283 | if (ACPI_SUCCESS(status)) { | 281 | if (ACPI_SUCCESS(status)) { |
@@ -298,6 +296,16 @@ acpi_status acpi_get_register(u32 register_id, u32 * return_value) | |||
298 | return_ACPI_STATUS(status); | 296 | return_ACPI_STATUS(status); |
299 | } | 297 | } |
300 | 298 | ||
299 | acpi_status acpi_get_register(u32 register_id, u32 * return_value) | ||
300 | { | ||
301 | acpi_status status; | ||
302 | acpi_cpu_flags flags; | ||
303 | flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); | ||
304 | status = acpi_get_register_unlocked(register_id, return_value); | ||
305 | acpi_os_release_lock(acpi_gbl_hardware_lock, flags); | ||
306 | return status; | ||
307 | } | ||
308 | |||
301 | ACPI_EXPORT_SYMBOL(acpi_get_register) | 309 | ACPI_EXPORT_SYMBOL(acpi_get_register) |
302 | 310 | ||
303 | /******************************************************************************* | 311 | /******************************************************************************* |
@@ -335,8 +343,7 @@ acpi_status acpi_set_register(u32 register_id, u32 value) | |||
335 | 343 | ||
336 | /* Always do a register read first so we can insert the new bits */ | 344 | /* Always do a register read first so we can insert the new bits */ |
337 | 345 | ||
338 | status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | 346 | status = acpi_hw_register_read(bit_reg_info->parent_register, |
339 | bit_reg_info->parent_register, | ||
340 | ®ister_value); | 347 | ®ister_value); |
341 | if (ACPI_FAILURE(status)) { | 348 | if (ACPI_FAILURE(status)) { |
342 | goto unlock_and_exit; | 349 | goto unlock_and_exit; |
@@ -363,8 +370,7 @@ acpi_status acpi_set_register(u32 register_id, u32 value) | |||
363 | bit_reg_info-> | 370 | bit_reg_info-> |
364 | access_bit_mask); | 371 | access_bit_mask); |
365 | if (value) { | 372 | if (value) { |
366 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 373 | status = acpi_hw_register_write(ACPI_REGISTER_PM1_STATUS, |
367 | ACPI_REGISTER_PM1_STATUS, | ||
368 | (u16) value); | 374 | (u16) value); |
369 | register_value = 0; | 375 | register_value = 0; |
370 | } | 376 | } |
@@ -377,8 +383,7 @@ acpi_status acpi_set_register(u32 register_id, u32 value) | |||
377 | bit_reg_info->access_bit_mask, | 383 | bit_reg_info->access_bit_mask, |
378 | value); | 384 | value); |
379 | 385 | ||
380 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 386 | status = acpi_hw_register_write(ACPI_REGISTER_PM1_ENABLE, |
381 | ACPI_REGISTER_PM1_ENABLE, | ||
382 | (u16) register_value); | 387 | (u16) register_value); |
383 | break; | 388 | break; |
384 | 389 | ||
@@ -397,15 +402,13 @@ acpi_status acpi_set_register(u32 register_id, u32 value) | |||
397 | bit_reg_info->access_bit_mask, | 402 | bit_reg_info->access_bit_mask, |
398 | value); | 403 | value); |
399 | 404 | ||
400 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 405 | status = acpi_hw_register_write(ACPI_REGISTER_PM1_CONTROL, |
401 | ACPI_REGISTER_PM1_CONTROL, | ||
402 | (u16) register_value); | 406 | (u16) register_value); |
403 | break; | 407 | break; |
404 | 408 | ||
405 | case ACPI_REGISTER_PM2_CONTROL: | 409 | case ACPI_REGISTER_PM2_CONTROL: |
406 | 410 | ||
407 | status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | 411 | status = acpi_hw_register_read(ACPI_REGISTER_PM2_CONTROL, |
408 | ACPI_REGISTER_PM2_CONTROL, | ||
409 | ®ister_value); | 412 | ®ister_value); |
410 | if (ACPI_FAILURE(status)) { | 413 | if (ACPI_FAILURE(status)) { |
411 | goto unlock_and_exit; | 414 | goto unlock_and_exit; |
@@ -430,8 +433,7 @@ acpi_status acpi_set_register(u32 register_id, u32 value) | |||
430 | xpm2_control_block. | 433 | xpm2_control_block. |
431 | address))); | 434 | address))); |
432 | 435 | ||
433 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 436 | status = acpi_hw_register_write(ACPI_REGISTER_PM2_CONTROL, |
434 | ACPI_REGISTER_PM2_CONTROL, | ||
435 | (u8) (register_value)); | 437 | (u8) (register_value)); |
436 | break; | 438 | break; |
437 | 439 | ||
@@ -461,8 +463,7 @@ ACPI_EXPORT_SYMBOL(acpi_set_register) | |||
461 | * | 463 | * |
462 | * FUNCTION: acpi_hw_register_read | 464 | * FUNCTION: acpi_hw_register_read |
463 | * | 465 | * |
464 | * PARAMETERS: use_lock - Lock hardware? True/False | 466 | * PARAMETERS: register_id - ACPI Register ID |
465 | * register_id - ACPI Register ID | ||
466 | * return_value - Where the register value is returned | 467 | * return_value - Where the register value is returned |
467 | * | 468 | * |
468 | * RETURN: Status and the value read. | 469 | * RETURN: Status and the value read. |
@@ -471,19 +472,14 @@ ACPI_EXPORT_SYMBOL(acpi_set_register) | |||
471 | * | 472 | * |
472 | ******************************************************************************/ | 473 | ******************************************************************************/ |
473 | acpi_status | 474 | acpi_status |
474 | acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value) | 475 | acpi_hw_register_read(u32 register_id, u32 * return_value) |
475 | { | 476 | { |
476 | u32 value1 = 0; | 477 | u32 value1 = 0; |
477 | u32 value2 = 0; | 478 | u32 value2 = 0; |
478 | acpi_status status; | 479 | acpi_status status; |
479 | acpi_cpu_flags lock_flags = 0; | ||
480 | 480 | ||
481 | ACPI_FUNCTION_TRACE(hw_register_read); | 481 | ACPI_FUNCTION_TRACE(hw_register_read); |
482 | 482 | ||
483 | if (ACPI_MTX_LOCK == use_lock) { | ||
484 | lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); | ||
485 | } | ||
486 | |||
487 | switch (register_id) { | 483 | switch (register_id) { |
488 | case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */ | 484 | case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */ |
489 | 485 | ||
@@ -491,7 +487,7 @@ acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value) | |||
491 | acpi_hw_low_level_read(16, &value1, | 487 | acpi_hw_low_level_read(16, &value1, |
492 | &acpi_gbl_FADT.xpm1a_event_block); | 488 | &acpi_gbl_FADT.xpm1a_event_block); |
493 | if (ACPI_FAILURE(status)) { | 489 | if (ACPI_FAILURE(status)) { |
494 | goto unlock_and_exit; | 490 | goto exit; |
495 | } | 491 | } |
496 | 492 | ||
497 | /* PM1B is optional */ | 493 | /* PM1B is optional */ |
@@ -507,7 +503,7 @@ acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value) | |||
507 | status = | 503 | status = |
508 | acpi_hw_low_level_read(16, &value1, &acpi_gbl_xpm1a_enable); | 504 | acpi_hw_low_level_read(16, &value1, &acpi_gbl_xpm1a_enable); |
509 | if (ACPI_FAILURE(status)) { | 505 | if (ACPI_FAILURE(status)) { |
510 | goto unlock_and_exit; | 506 | goto exit; |
511 | } | 507 | } |
512 | 508 | ||
513 | /* PM1B is optional */ | 509 | /* PM1B is optional */ |
@@ -523,7 +519,7 @@ acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value) | |||
523 | acpi_hw_low_level_read(16, &value1, | 519 | acpi_hw_low_level_read(16, &value1, |
524 | &acpi_gbl_FADT.xpm1a_control_block); | 520 | &acpi_gbl_FADT.xpm1a_control_block); |
525 | if (ACPI_FAILURE(status)) { | 521 | if (ACPI_FAILURE(status)) { |
526 | goto unlock_and_exit; | 522 | goto exit; |
527 | } | 523 | } |
528 | 524 | ||
529 | status = | 525 | status = |
@@ -558,10 +554,7 @@ acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value) | |||
558 | break; | 554 | break; |
559 | } | 555 | } |
560 | 556 | ||
561 | unlock_and_exit: | 557 | exit: |
562 | if (ACPI_MTX_LOCK == use_lock) { | ||
563 | acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags); | ||
564 | } | ||
565 | 558 | ||
566 | if (ACPI_SUCCESS(status)) { | 559 | if (ACPI_SUCCESS(status)) { |
567 | *return_value = value1; | 560 | *return_value = value1; |
@@ -574,8 +567,7 @@ acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value) | |||
574 | * | 567 | * |
575 | * FUNCTION: acpi_hw_register_write | 568 | * FUNCTION: acpi_hw_register_write |
576 | * | 569 | * |
577 | * PARAMETERS: use_lock - Lock hardware? True/False | 570 | * PARAMETERS: register_id - ACPI Register ID |
578 | * register_id - ACPI Register ID | ||
579 | * Value - The value to write | 571 | * Value - The value to write |
580 | * | 572 | * |
581 | * RETURN: Status | 573 | * RETURN: Status |
@@ -597,28 +589,22 @@ acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value) | |||
597 | * | 589 | * |
598 | ******************************************************************************/ | 590 | ******************************************************************************/ |
599 | 591 | ||
600 | acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value) | 592 | acpi_status acpi_hw_register_write(u32 register_id, u32 value) |
601 | { | 593 | { |
602 | acpi_status status; | 594 | acpi_status status; |
603 | acpi_cpu_flags lock_flags = 0; | ||
604 | u32 read_value; | 595 | u32 read_value; |
605 | 596 | ||
606 | ACPI_FUNCTION_TRACE(hw_register_write); | 597 | ACPI_FUNCTION_TRACE(hw_register_write); |
607 | 598 | ||
608 | if (ACPI_MTX_LOCK == use_lock) { | ||
609 | lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); | ||
610 | } | ||
611 | |||
612 | switch (register_id) { | 599 | switch (register_id) { |
613 | case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */ | 600 | case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */ |
614 | 601 | ||
615 | /* Perform a read first to preserve certain bits (per ACPI spec) */ | 602 | /* Perform a read first to preserve certain bits (per ACPI spec) */ |
616 | 603 | ||
617 | status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | 604 | status = acpi_hw_register_read(ACPI_REGISTER_PM1_STATUS, |
618 | ACPI_REGISTER_PM1_STATUS, | ||
619 | &read_value); | 605 | &read_value); |
620 | if (ACPI_FAILURE(status)) { | 606 | if (ACPI_FAILURE(status)) { |
621 | goto unlock_and_exit; | 607 | goto exit; |
622 | } | 608 | } |
623 | 609 | ||
624 | /* Insert the bits to be preserved */ | 610 | /* Insert the bits to be preserved */ |
@@ -632,7 +618,7 @@ acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value) | |||
632 | acpi_hw_low_level_write(16, value, | 618 | acpi_hw_low_level_write(16, value, |
633 | &acpi_gbl_FADT.xpm1a_event_block); | 619 | &acpi_gbl_FADT.xpm1a_event_block); |
634 | if (ACPI_FAILURE(status)) { | 620 | if (ACPI_FAILURE(status)) { |
635 | goto unlock_and_exit; | 621 | goto exit; |
636 | } | 622 | } |
637 | 623 | ||
638 | /* PM1B is optional */ | 624 | /* PM1B is optional */ |
@@ -647,7 +633,7 @@ acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value) | |||
647 | status = | 633 | status = |
648 | acpi_hw_low_level_write(16, value, &acpi_gbl_xpm1a_enable); | 634 | acpi_hw_low_level_write(16, value, &acpi_gbl_xpm1a_enable); |
649 | if (ACPI_FAILURE(status)) { | 635 | if (ACPI_FAILURE(status)) { |
650 | goto unlock_and_exit; | 636 | goto exit; |
651 | } | 637 | } |
652 | 638 | ||
653 | /* PM1B is optional */ | 639 | /* PM1B is optional */ |
@@ -661,11 +647,10 @@ acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value) | |||
661 | /* | 647 | /* |
662 | * Perform a read first to preserve certain bits (per ACPI spec) | 648 | * Perform a read first to preserve certain bits (per ACPI spec) |
663 | */ | 649 | */ |
664 | status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | 650 | status = acpi_hw_register_read(ACPI_REGISTER_PM1_CONTROL, |
665 | ACPI_REGISTER_PM1_CONTROL, | ||
666 | &read_value); | 651 | &read_value); |
667 | if (ACPI_FAILURE(status)) { | 652 | if (ACPI_FAILURE(status)) { |
668 | goto unlock_and_exit; | 653 | goto exit; |
669 | } | 654 | } |
670 | 655 | ||
671 | /* Insert the bits to be preserved */ | 656 | /* Insert the bits to be preserved */ |
@@ -679,7 +664,7 @@ acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value) | |||
679 | acpi_hw_low_level_write(16, value, | 664 | acpi_hw_low_level_write(16, value, |
680 | &acpi_gbl_FADT.xpm1a_control_block); | 665 | &acpi_gbl_FADT.xpm1a_control_block); |
681 | if (ACPI_FAILURE(status)) { | 666 | if (ACPI_FAILURE(status)) { |
682 | goto unlock_and_exit; | 667 | goto exit; |
683 | } | 668 | } |
684 | 669 | ||
685 | status = | 670 | status = |
@@ -728,11 +713,7 @@ acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value) | |||
728 | break; | 713 | break; |
729 | } | 714 | } |
730 | 715 | ||
731 | unlock_and_exit: | 716 | exit: |
732 | if (ACPI_MTX_LOCK == use_lock) { | ||
733 | acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags); | ||
734 | } | ||
735 | |||
736 | return_ACPI_STATUS(status); | 717 | return_ACPI_STATUS(status); |
737 | } | 718 | } |
738 | 719 | ||
diff --git a/drivers/acpi/hardware/hwsleep.c b/drivers/acpi/hardware/hwsleep.c index cf69c0040a3..81b24842970 100644 --- a/drivers/acpi/hardware/hwsleep.c +++ b/drivers/acpi/hardware/hwsleep.c | |||
@@ -234,15 +234,11 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state) | |||
234 | "While executing method _SST")); | 234 | "While executing method _SST")); |
235 | } | 235 | } |
236 | 236 | ||
237 | /* | 237 | /* Disable/Clear all GPEs */ |
238 | * 1) Disable/Clear all GPEs | 238 | |
239 | */ | ||
240 | status = acpi_hw_disable_all_gpes(); | 239 | status = acpi_hw_disable_all_gpes(); |
241 | if (ACPI_FAILURE(status)) { | ||
242 | return_ACPI_STATUS(status); | ||
243 | } | ||
244 | 240 | ||
245 | return_ACPI_STATUS(AE_OK); | 241 | return_ACPI_STATUS(status); |
246 | } | 242 | } |
247 | 243 | ||
248 | ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep) | 244 | ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep) |
@@ -313,8 +309,7 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) | |||
313 | 309 | ||
314 | /* Get current value of PM1A control */ | 310 | /* Get current value of PM1A control */ |
315 | 311 | ||
316 | status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | 312 | status = acpi_hw_register_read(ACPI_REGISTER_PM1_CONTROL, &PM1Acontrol); |
317 | ACPI_REGISTER_PM1_CONTROL, &PM1Acontrol); | ||
318 | if (ACPI_FAILURE(status)) { | 313 | if (ACPI_FAILURE(status)) { |
319 | return_ACPI_STATUS(status); | 314 | return_ACPI_STATUS(status); |
320 | } | 315 | } |
@@ -341,15 +336,13 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) | |||
341 | 336 | ||
342 | /* Write #1: fill in SLP_TYP data */ | 337 | /* Write #1: fill in SLP_TYP data */ |
343 | 338 | ||
344 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 339 | status = acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL, |
345 | ACPI_REGISTER_PM1A_CONTROL, | ||
346 | PM1Acontrol); | 340 | PM1Acontrol); |
347 | if (ACPI_FAILURE(status)) { | 341 | if (ACPI_FAILURE(status)) { |
348 | return_ACPI_STATUS(status); | 342 | return_ACPI_STATUS(status); |
349 | } | 343 | } |
350 | 344 | ||
351 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 345 | status = acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL, |
352 | ACPI_REGISTER_PM1B_CONTROL, | ||
353 | PM1Bcontrol); | 346 | PM1Bcontrol); |
354 | if (ACPI_FAILURE(status)) { | 347 | if (ACPI_FAILURE(status)) { |
355 | return_ACPI_STATUS(status); | 348 | return_ACPI_STATUS(status); |
@@ -364,15 +357,13 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) | |||
364 | 357 | ||
365 | ACPI_FLUSH_CPU_CACHE(); | 358 | ACPI_FLUSH_CPU_CACHE(); |
366 | 359 | ||
367 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 360 | status = acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL, |
368 | ACPI_REGISTER_PM1A_CONTROL, | ||
369 | PM1Acontrol); | 361 | PM1Acontrol); |
370 | if (ACPI_FAILURE(status)) { | 362 | if (ACPI_FAILURE(status)) { |
371 | return_ACPI_STATUS(status); | 363 | return_ACPI_STATUS(status); |
372 | } | 364 | } |
373 | 365 | ||
374 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 366 | status = acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL, |
375 | ACPI_REGISTER_PM1B_CONTROL, | ||
376 | PM1Bcontrol); | 367 | PM1Bcontrol); |
377 | if (ACPI_FAILURE(status)) { | 368 | if (ACPI_FAILURE(status)) { |
378 | return_ACPI_STATUS(status); | 369 | return_ACPI_STATUS(status); |
@@ -392,8 +383,7 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) | |||
392 | */ | 383 | */ |
393 | acpi_os_stall(10000000); | 384 | acpi_os_stall(10000000); |
394 | 385 | ||
395 | status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 386 | status = acpi_hw_register_write(ACPI_REGISTER_PM1_CONTROL, |
396 | ACPI_REGISTER_PM1_CONTROL, | ||
397 | sleep_enable_reg_info-> | 387 | sleep_enable_reg_info-> |
398 | access_bit_mask); | 388 | access_bit_mask); |
399 | if (ACPI_FAILURE(status)) { | 389 | if (ACPI_FAILURE(status)) { |
@@ -404,7 +394,8 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) | |||
404 | /* Wait until we enter sleep state */ | 394 | /* Wait until we enter sleep state */ |
405 | 395 | ||
406 | do { | 396 | do { |
407 | status = acpi_get_register(ACPI_BITREG_WAKE_STATUS, &in_value); | 397 | status = acpi_get_register_unlocked(ACPI_BITREG_WAKE_STATUS, |
398 | &in_value); | ||
408 | if (ACPI_FAILURE(status)) { | 399 | if (ACPI_FAILURE(status)) { |
409 | return_ACPI_STATUS(status); | 400 | return_ACPI_STATUS(status); |
410 | } | 401 | } |
@@ -520,8 +511,7 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state) | |||
520 | 511 | ||
521 | /* Get current value of PM1A control */ | 512 | /* Get current value of PM1A control */ |
522 | 513 | ||
523 | status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | 514 | status = acpi_hw_register_read(ACPI_REGISTER_PM1_CONTROL, |
524 | ACPI_REGISTER_PM1_CONTROL, | ||
525 | &PM1Acontrol); | 515 | &PM1Acontrol); |
526 | if (ACPI_SUCCESS(status)) { | 516 | if (ACPI_SUCCESS(status)) { |
527 | 517 | ||
@@ -543,11 +533,9 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state) | |||
543 | 533 | ||
544 | /* Just ignore any errors */ | 534 | /* Just ignore any errors */ |
545 | 535 | ||
546 | (void)acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 536 | (void)acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL, |
547 | ACPI_REGISTER_PM1A_CONTROL, | ||
548 | PM1Acontrol); | 537 | PM1Acontrol); |
549 | (void)acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | 538 | (void)acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL, |
550 | ACPI_REGISTER_PM1B_CONTROL, | ||
551 | PM1Bcontrol); | 539 | PM1Bcontrol); |
552 | } | 540 | } |
553 | } | 541 | } |
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 352cf81af58..aabc6ca4a81 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -1043,14 +1043,6 @@ static int __init acpi_wake_gpes_always_on_setup(char *str) | |||
1043 | __setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup); | 1043 | __setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup); |
1044 | 1044 | ||
1045 | /* | 1045 | /* |
1046 | * max_cstate is defined in the base kernel so modules can | ||
1047 | * change it w/o depending on the state of the processor module. | ||
1048 | */ | ||
1049 | unsigned int max_cstate = ACPI_PROCESSOR_MAX_POWER; | ||
1050 | |||
1051 | EXPORT_SYMBOL(max_cstate); | ||
1052 | |||
1053 | /* | ||
1054 | * Acquire a spinlock. | 1046 | * Acquire a spinlock. |
1055 | * | 1047 | * |
1056 | * handle is a pointer to the spinlock_t. | 1048 | * handle is a pointer to the spinlock_t. |
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index 9f11dc296cd..235a51e328c 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <linux/seq_file.h> | 44 | #include <linux/seq_file.h> |
45 | #include <linux/dmi.h> | 45 | #include <linux/dmi.h> |
46 | #include <linux/moduleparam.h> | 46 | #include <linux/moduleparam.h> |
47 | #include <linux/cpuidle.h> | ||
47 | 48 | ||
48 | #include <asm/io.h> | 49 | #include <asm/io.h> |
49 | #include <asm/system.h> | 50 | #include <asm/system.h> |
@@ -421,12 +422,6 @@ static int map_lsapic_id(struct acpi_subtable_header *entry, | |||
421 | return 0; | 422 | return 0; |
422 | } | 423 | } |
423 | 424 | ||
424 | #ifdef CONFIG_IA64 | ||
425 | #define arch_cpu_to_apicid ia64_cpu_to_sapicid | ||
426 | #else | ||
427 | #define arch_cpu_to_apicid x86_cpu_to_apicid | ||
428 | #endif | ||
429 | |||
430 | static int map_madt_entry(u32 acpi_id) | 425 | static int map_madt_entry(u32 acpi_id) |
431 | { | 426 | { |
432 | unsigned long madt_end, entry; | 427 | unsigned long madt_end, entry; |
@@ -500,7 +495,7 @@ static int get_cpu_id(acpi_handle handle, u32 acpi_id) | |||
500 | return apic_id; | 495 | return apic_id; |
501 | 496 | ||
502 | for (i = 0; i < NR_CPUS; ++i) { | 497 | for (i = 0; i < NR_CPUS; ++i) { |
503 | if (arch_cpu_to_apicid[i] == apic_id) | 498 | if (cpu_physical_id(i) == apic_id) |
504 | return i; | 499 | return i; |
505 | } | 500 | } |
506 | return -1; | 501 | return -1; |
@@ -1049,11 +1044,13 @@ static int __init acpi_processor_init(void) | |||
1049 | return -ENOMEM; | 1044 | return -ENOMEM; |
1050 | acpi_processor_dir->owner = THIS_MODULE; | 1045 | acpi_processor_dir->owner = THIS_MODULE; |
1051 | 1046 | ||
1047 | result = cpuidle_register_driver(&acpi_idle_driver); | ||
1048 | if (result < 0) | ||
1049 | goto out_proc; | ||
1050 | |||
1052 | result = acpi_bus_register_driver(&acpi_processor_driver); | 1051 | result = acpi_bus_register_driver(&acpi_processor_driver); |
1053 | if (result < 0) { | 1052 | if (result < 0) |
1054 | remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir); | 1053 | goto out_cpuidle; |
1055 | return result; | ||
1056 | } | ||
1057 | 1054 | ||
1058 | acpi_processor_install_hotplug_notify(); | 1055 | acpi_processor_install_hotplug_notify(); |
1059 | 1056 | ||
@@ -1062,11 +1059,18 @@ static int __init acpi_processor_init(void) | |||
1062 | acpi_processor_ppc_init(); | 1059 | acpi_processor_ppc_init(); |
1063 | 1060 | ||
1064 | return 0; | 1061 | return 0; |
1062 | |||
1063 | out_cpuidle: | ||
1064 | cpuidle_unregister_driver(&acpi_idle_driver); | ||
1065 | |||
1066 | out_proc: | ||
1067 | remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir); | ||
1068 | |||
1069 | return result; | ||
1065 | } | 1070 | } |
1066 | 1071 | ||
1067 | static void __exit acpi_processor_exit(void) | 1072 | static void __exit acpi_processor_exit(void) |
1068 | { | 1073 | { |
1069 | |||
1070 | acpi_processor_ppc_exit(); | 1074 | acpi_processor_ppc_exit(); |
1071 | 1075 | ||
1072 | acpi_thermal_cpufreq_exit(); | 1076 | acpi_thermal_cpufreq_exit(); |
@@ -1075,6 +1079,8 @@ static void __exit acpi_processor_exit(void) | |||
1075 | 1079 | ||
1076 | acpi_bus_unregister_driver(&acpi_processor_driver); | 1080 | acpi_bus_unregister_driver(&acpi_processor_driver); |
1077 | 1081 | ||
1082 | cpuidle_unregister_driver(&acpi_idle_driver); | ||
1083 | |||
1078 | remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir); | 1084 | remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir); |
1079 | 1085 | ||
1080 | return; | 1086 | return; |
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 1f6fb38de01..f996d0e3768 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <linux/sched.h> /* need_resched() */ | 40 | #include <linux/sched.h> /* need_resched() */ |
41 | #include <linux/latency.h> | 41 | #include <linux/latency.h> |
42 | #include <linux/clockchips.h> | 42 | #include <linux/clockchips.h> |
43 | #include <linux/cpuidle.h> | ||
43 | 44 | ||
44 | /* | 45 | /* |
45 | * Include the apic definitions for x86 to have the APIC timer related defines | 46 | * Include the apic definitions for x86 to have the APIC timer related defines |
@@ -64,14 +65,22 @@ ACPI_MODULE_NAME("processor_idle"); | |||
64 | #define ACPI_PROCESSOR_FILE_POWER "power" | 65 | #define ACPI_PROCESSOR_FILE_POWER "power" |
65 | #define US_TO_PM_TIMER_TICKS(t) ((t * (PM_TIMER_FREQUENCY/1000)) / 1000) | 66 | #define US_TO_PM_TIMER_TICKS(t) ((t * (PM_TIMER_FREQUENCY/1000)) / 1000) |
66 | #define PM_TIMER_TICK_NS (1000000000ULL/PM_TIMER_FREQUENCY) | 67 | #define PM_TIMER_TICK_NS (1000000000ULL/PM_TIMER_FREQUENCY) |
68 | #ifndef CONFIG_CPU_IDLE | ||
67 | #define C2_OVERHEAD 4 /* 1us (3.579 ticks per us) */ | 69 | #define C2_OVERHEAD 4 /* 1us (3.579 ticks per us) */ |
68 | #define C3_OVERHEAD 4 /* 1us (3.579 ticks per us) */ | 70 | #define C3_OVERHEAD 4 /* 1us (3.579 ticks per us) */ |
69 | static void (*pm_idle_save) (void) __read_mostly; | 71 | static void (*pm_idle_save) (void) __read_mostly; |
70 | module_param(max_cstate, uint, 0644); | 72 | #else |
73 | #define C2_OVERHEAD 1 /* 1us */ | ||
74 | #define C3_OVERHEAD 1 /* 1us */ | ||
75 | #endif | ||
76 | #define PM_TIMER_TICKS_TO_US(p) (((p) * 1000)/(PM_TIMER_FREQUENCY/1000)) | ||
71 | 77 | ||
78 | static unsigned int max_cstate __read_mostly = ACPI_PROCESSOR_MAX_POWER; | ||
79 | module_param(max_cstate, uint, 0000); | ||
72 | static unsigned int nocst __read_mostly; | 80 | static unsigned int nocst __read_mostly; |
73 | module_param(nocst, uint, 0000); | 81 | module_param(nocst, uint, 0000); |
74 | 82 | ||
83 | #ifndef CONFIG_CPU_IDLE | ||
75 | /* | 84 | /* |
76 | * bm_history -- bit-mask with a bit per jiffy of bus-master activity | 85 | * bm_history -- bit-mask with a bit per jiffy of bus-master activity |
77 | * 1000 HZ: 0xFFFFFFFF: 32 jiffies = 32ms | 86 | * 1000 HZ: 0xFFFFFFFF: 32 jiffies = 32ms |
@@ -82,9 +91,10 @@ module_param(nocst, uint, 0000); | |||
82 | static unsigned int bm_history __read_mostly = | 91 | static unsigned int bm_history __read_mostly = |
83 | (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1)); | 92 | (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1)); |
84 | module_param(bm_history, uint, 0644); | 93 | module_param(bm_history, uint, 0644); |
85 | /* -------------------------------------------------------------------------- | 94 | |
86 | Power Management | 95 | static int acpi_processor_set_power_policy(struct acpi_processor *pr); |
87 | -------------------------------------------------------------------------- */ | 96 | |
97 | #endif | ||
88 | 98 | ||
89 | /* | 99 | /* |
90 | * IBM ThinkPad R40e crashes mysteriously when going into C2 or C3. | 100 | * IBM ThinkPad R40e crashes mysteriously when going into C2 or C3. |
@@ -177,6 +187,18 @@ static inline u32 ticks_elapsed(u32 t1, u32 t2) | |||
177 | return ((0xFFFFFFFF - t1) + t2); | 187 | return ((0xFFFFFFFF - t1) + t2); |
178 | } | 188 | } |
179 | 189 | ||
190 | static inline u32 ticks_elapsed_in_us(u32 t1, u32 t2) | ||
191 | { | ||
192 | if (t2 >= t1) | ||
193 | return PM_TIMER_TICKS_TO_US(t2 - t1); | ||
194 | else if (!(acpi_gbl_FADT.flags & ACPI_FADT_32BIT_TIMER)) | ||
195 | return PM_TIMER_TICKS_TO_US(((0x00FFFFFF - t1) + t2) & 0x00FFFFFF); | ||
196 | else | ||
197 | return PM_TIMER_TICKS_TO_US((0xFFFFFFFF - t1) + t2); | ||
198 | } | ||
199 | |||
200 | #ifndef CONFIG_CPU_IDLE | ||
201 | |||
180 | static void | 202 | static void |
181 | acpi_processor_power_activate(struct acpi_processor *pr, | 203 | acpi_processor_power_activate(struct acpi_processor *pr, |
182 | struct acpi_processor_cx *new) | 204 | struct acpi_processor_cx *new) |
@@ -248,6 +270,7 @@ static void acpi_cstate_enter(struct acpi_processor_cx *cstate) | |||
248 | unused = inl(acpi_gbl_FADT.xpm_timer_block.address); | 270 | unused = inl(acpi_gbl_FADT.xpm_timer_block.address); |
249 | } | 271 | } |
250 | } | 272 | } |
273 | #endif /* !CONFIG_CPU_IDLE */ | ||
251 | 274 | ||
252 | #ifdef ARCH_APICTIMER_STOPS_ON_C3 | 275 | #ifdef ARCH_APICTIMER_STOPS_ON_C3 |
253 | 276 | ||
@@ -330,6 +353,7 @@ int acpi_processor_resume(struct acpi_device * device) | |||
330 | return 0; | 353 | return 0; |
331 | } | 354 | } |
332 | 355 | ||
356 | #ifndef CONFIG_CPU_IDLE | ||
333 | static void acpi_processor_idle(void) | 357 | static void acpi_processor_idle(void) |
334 | { | 358 | { |
335 | struct acpi_processor *pr = NULL; | 359 | struct acpi_processor *pr = NULL; |
@@ -427,7 +451,7 @@ static void acpi_processor_idle(void) | |||
427 | * an SMP system. We do it here instead of doing it at _CST/P_LVL | 451 | * an SMP system. We do it here instead of doing it at _CST/P_LVL |
428 | * detection phase, to work cleanly with logical CPU hotplug. | 452 | * detection phase, to work cleanly with logical CPU hotplug. |
429 | */ | 453 | */ |
430 | if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) && | 454 | if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) && |
431 | !pr->flags.has_cst && !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED)) | 455 | !pr->flags.has_cst && !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED)) |
432 | cx = &pr->power.states[ACPI_STATE_C1]; | 456 | cx = &pr->power.states[ACPI_STATE_C1]; |
433 | #endif | 457 | #endif |
@@ -727,6 +751,7 @@ static int acpi_processor_set_power_policy(struct acpi_processor *pr) | |||
727 | 751 | ||
728 | return 0; | 752 | return 0; |
729 | } | 753 | } |
754 | #endif /* !CONFIG_CPU_IDLE */ | ||
730 | 755 | ||
731 | static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) | 756 | static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) |
732 | { | 757 | { |
@@ -744,7 +769,7 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) | |||
744 | #ifndef CONFIG_HOTPLUG_CPU | 769 | #ifndef CONFIG_HOTPLUG_CPU |
745 | /* | 770 | /* |
746 | * Check for P_LVL2_UP flag before entering C2 and above on | 771 | * Check for P_LVL2_UP flag before entering C2 and above on |
747 | * an SMP system. | 772 | * an SMP system. |
748 | */ | 773 | */ |
749 | if ((num_online_cpus() > 1) && | 774 | if ((num_online_cpus() > 1) && |
750 | !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED)) | 775 | !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED)) |
@@ -945,7 +970,12 @@ static void acpi_processor_power_verify_c2(struct acpi_processor_cx *cx) | |||
945 | * Normalize the C2 latency to expidite policy | 970 | * Normalize the C2 latency to expidite policy |
946 | */ | 971 | */ |
947 | cx->valid = 1; | 972 | cx->valid = 1; |
973 | |||
974 | #ifndef CONFIG_CPU_IDLE | ||
948 | cx->latency_ticks = US_TO_PM_TIMER_TICKS(cx->latency); | 975 | cx->latency_ticks = US_TO_PM_TIMER_TICKS(cx->latency); |
976 | #else | ||
977 | cx->latency_ticks = cx->latency; | ||
978 | #endif | ||
949 | 979 | ||
950 | return; | 980 | return; |
951 | } | 981 | } |
@@ -1025,7 +1055,12 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr, | |||
1025 | * use this in our C3 policy | 1055 | * use this in our C3 policy |
1026 | */ | 1056 | */ |
1027 | cx->valid = 1; | 1057 | cx->valid = 1; |
1058 | |||
1059 | #ifndef CONFIG_CPU_IDLE | ||
1028 | cx->latency_ticks = US_TO_PM_TIMER_TICKS(cx->latency); | 1060 | cx->latency_ticks = US_TO_PM_TIMER_TICKS(cx->latency); |
1061 | #else | ||
1062 | cx->latency_ticks = cx->latency; | ||
1063 | #endif | ||
1029 | 1064 | ||
1030 | return; | 1065 | return; |
1031 | } | 1066 | } |
@@ -1090,6 +1125,7 @@ static int acpi_processor_get_power_info(struct acpi_processor *pr) | |||
1090 | 1125 | ||
1091 | pr->power.count = acpi_processor_power_verify(pr); | 1126 | pr->power.count = acpi_processor_power_verify(pr); |
1092 | 1127 | ||
1128 | #ifndef CONFIG_CPU_IDLE | ||
1093 | /* | 1129 | /* |
1094 | * Set Default Policy | 1130 | * Set Default Policy |
1095 | * ------------------ | 1131 | * ------------------ |
@@ -1101,6 +1137,7 @@ static int acpi_processor_get_power_info(struct acpi_processor *pr) | |||
1101 | result = acpi_processor_set_power_policy(pr); | 1137 | result = acpi_processor_set_power_policy(pr); |
1102 | if (result) | 1138 | if (result) |
1103 | return result; | 1139 | return result; |
1140 | #endif | ||
1104 | 1141 | ||
1105 | /* | 1142 | /* |
1106 | * if one state of type C2 or C3 is available, mark this | 1143 | * if one state of type C2 or C3 is available, mark this |
@@ -1117,35 +1154,6 @@ static int acpi_processor_get_power_info(struct acpi_processor *pr) | |||
1117 | return 0; | 1154 | return 0; |
1118 | } | 1155 | } |
1119 | 1156 | ||
1120 | int acpi_processor_cst_has_changed(struct acpi_processor *pr) | ||
1121 | { | ||
1122 | int result = 0; | ||
1123 | |||
1124 | |||
1125 | if (!pr) | ||
1126 | return -EINVAL; | ||
1127 | |||
1128 | if (nocst) { | ||
1129 | return -ENODEV; | ||
1130 | } | ||
1131 | |||
1132 | if (!pr->flags.power_setup_done) | ||
1133 | return -ENODEV; | ||
1134 | |||
1135 | /* Fall back to the default idle loop */ | ||
1136 | pm_idle = pm_idle_save; | ||
1137 | synchronize_sched(); /* Relies on interrupts forcing exit from idle. */ | ||
1138 | |||
1139 | pr->flags.power = 0; | ||
1140 | result = acpi_processor_get_power_info(pr); | ||
1141 | if ((pr->flags.power == 1) && (pr->flags.power_setup_done)) | ||
1142 | pm_idle = acpi_processor_idle; | ||
1143 | |||
1144 | return result; | ||
1145 | } | ||
1146 | |||
1147 | /* proc interface */ | ||
1148 | |||
1149 | static int acpi_processor_power_seq_show(struct seq_file *seq, void *offset) | 1157 | static int acpi_processor_power_seq_show(struct seq_file *seq, void *offset) |
1150 | { | 1158 | { |
1151 | struct acpi_processor *pr = seq->private; | 1159 | struct acpi_processor *pr = seq->private; |
@@ -1227,6 +1235,35 @@ static const struct file_operations acpi_processor_power_fops = { | |||
1227 | .release = single_release, | 1235 | .release = single_release, |
1228 | }; | 1236 | }; |
1229 | 1237 | ||
1238 | #ifndef CONFIG_CPU_IDLE | ||
1239 | |||
1240 | int acpi_processor_cst_has_changed(struct acpi_processor *pr) | ||
1241 | { | ||
1242 | int result = 0; | ||
1243 | |||
1244 | |||
1245 | if (!pr) | ||
1246 | return -EINVAL; | ||
1247 | |||
1248 | if (nocst) { | ||
1249 | return -ENODEV; | ||
1250 | } | ||
1251 | |||
1252 | if (!pr->flags.power_setup_done) | ||
1253 | return -ENODEV; | ||
1254 | |||
1255 | /* Fall back to the default idle loop */ | ||
1256 | pm_idle = pm_idle_save; | ||
1257 | synchronize_sched(); /* Relies on interrupts forcing exit from idle. */ | ||
1258 | |||
1259 | pr->flags.power = 0; | ||
1260 | result = acpi_processor_get_power_info(pr); | ||
1261 | if ((pr->flags.power == 1) && (pr->flags.power_setup_done)) | ||
1262 | pm_idle = acpi_processor_idle; | ||
1263 | |||
1264 | return result; | ||
1265 | } | ||
1266 | |||
1230 | #ifdef CONFIG_SMP | 1267 | #ifdef CONFIG_SMP |
1231 | static void smp_callback(void *v) | 1268 | static void smp_callback(void *v) |
1232 | { | 1269 | { |
@@ -1249,7 +1286,366 @@ static int acpi_processor_latency_notify(struct notifier_block *b, | |||
1249 | static struct notifier_block acpi_processor_latency_notifier = { | 1286 | static struct notifier_block acpi_processor_latency_notifier = { |
1250 | .notifier_call = acpi_processor_latency_notify, | 1287 | .notifier_call = acpi_processor_latency_notify, |
1251 | }; | 1288 | }; |
1289 | |||
1290 | #endif | ||
1291 | |||
1292 | #else /* CONFIG_CPU_IDLE */ | ||
1293 | |||
1294 | /** | ||
1295 | * acpi_idle_bm_check - checks if bus master activity was detected | ||
1296 | */ | ||
1297 | static int acpi_idle_bm_check(void) | ||
1298 | { | ||
1299 | u32 bm_status = 0; | ||
1300 | |||
1301 | acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status); | ||
1302 | if (bm_status) | ||
1303 | acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 1); | ||
1304 | /* | ||
1305 | * PIIX4 Erratum #18: Note that BM_STS doesn't always reflect | ||
1306 | * the true state of bus mastering activity; forcing us to | ||
1307 | * manually check the BMIDEA bit of each IDE channel. | ||
1308 | */ | ||
1309 | else if (errata.piix4.bmisx) { | ||
1310 | if ((inb_p(errata.piix4.bmisx + 0x02) & 0x01) | ||
1311 | || (inb_p(errata.piix4.bmisx + 0x0A) & 0x01)) | ||
1312 | bm_status = 1; | ||
1313 | } | ||
1314 | return bm_status; | ||
1315 | } | ||
1316 | |||
1317 | /** | ||
1318 | * acpi_idle_update_bm_rld - updates the BM_RLD bit depending on target state | ||
1319 | * @pr: the processor | ||
1320 | * @target: the new target state | ||
1321 | */ | ||
1322 | static inline void acpi_idle_update_bm_rld(struct acpi_processor *pr, | ||
1323 | struct acpi_processor_cx *target) | ||
1324 | { | ||
1325 | if (pr->flags.bm_rld_set && target->type != ACPI_STATE_C3) { | ||
1326 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0); | ||
1327 | pr->flags.bm_rld_set = 0; | ||
1328 | } | ||
1329 | |||
1330 | if (!pr->flags.bm_rld_set && target->type == ACPI_STATE_C3) { | ||
1331 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 1); | ||
1332 | pr->flags.bm_rld_set = 1; | ||
1333 | } | ||
1334 | } | ||
1335 | |||
1336 | /** | ||
1337 | * acpi_idle_do_entry - a helper function that does C2 and C3 type entry | ||
1338 | * @cx: cstate data | ||
1339 | */ | ||
1340 | static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx) | ||
1341 | { | ||
1342 | if (cx->space_id == ACPI_CSTATE_FFH) { | ||
1343 | /* Call into architectural FFH based C-state */ | ||
1344 | acpi_processor_ffh_cstate_enter(cx); | ||
1345 | } else { | ||
1346 | int unused; | ||
1347 | /* IO port based C-state */ | ||
1348 | inb(cx->address); | ||
1349 | /* Dummy wait op - must do something useless after P_LVL2 read | ||
1350 | because chipsets cannot guarantee that STPCLK# signal | ||
1351 | gets asserted in time to freeze execution properly. */ | ||
1352 | unused = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
1353 | } | ||
1354 | } | ||
1355 | |||
1356 | /** | ||
1357 | * acpi_idle_enter_c1 - enters an ACPI C1 state-type | ||
1358 | * @dev: the target CPU | ||
1359 | * @state: the state data | ||
1360 | * | ||
1361 | * This is equivalent to the HALT instruction. | ||
1362 | */ | ||
1363 | static int acpi_idle_enter_c1(struct cpuidle_device *dev, | ||
1364 | struct cpuidle_state *state) | ||
1365 | { | ||
1366 | struct acpi_processor *pr; | ||
1367 | struct acpi_processor_cx *cx = cpuidle_get_statedata(state); | ||
1368 | pr = processors[smp_processor_id()]; | ||
1369 | |||
1370 | if (unlikely(!pr)) | ||
1371 | return 0; | ||
1372 | |||
1373 | if (pr->flags.bm_check) | ||
1374 | acpi_idle_update_bm_rld(pr, cx); | ||
1375 | |||
1376 | current_thread_info()->status &= ~TS_POLLING; | ||
1377 | /* | ||
1378 | * TS_POLLING-cleared state must be visible before we test | ||
1379 | * NEED_RESCHED: | ||
1380 | */ | ||
1381 | smp_mb(); | ||
1382 | if (!need_resched()) | ||
1383 | safe_halt(); | ||
1384 | current_thread_info()->status |= TS_POLLING; | ||
1385 | |||
1386 | cx->usage++; | ||
1387 | |||
1388 | return 0; | ||
1389 | } | ||
1390 | |||
1391 | /** | ||
1392 | * acpi_idle_enter_simple - enters an ACPI state without BM handling | ||
1393 | * @dev: the target CPU | ||
1394 | * @state: the state data | ||
1395 | */ | ||
1396 | static int acpi_idle_enter_simple(struct cpuidle_device *dev, | ||
1397 | struct cpuidle_state *state) | ||
1398 | { | ||
1399 | struct acpi_processor *pr; | ||
1400 | struct acpi_processor_cx *cx = cpuidle_get_statedata(state); | ||
1401 | u32 t1, t2; | ||
1402 | pr = processors[smp_processor_id()]; | ||
1403 | |||
1404 | if (unlikely(!pr)) | ||
1405 | return 0; | ||
1406 | |||
1407 | if (acpi_idle_suspend) | ||
1408 | return(acpi_idle_enter_c1(dev, state)); | ||
1409 | |||
1410 | if (pr->flags.bm_check) | ||
1411 | acpi_idle_update_bm_rld(pr, cx); | ||
1412 | |||
1413 | local_irq_disable(); | ||
1414 | current_thread_info()->status &= ~TS_POLLING; | ||
1415 | /* | ||
1416 | * TS_POLLING-cleared state must be visible before we test | ||
1417 | * NEED_RESCHED: | ||
1418 | */ | ||
1419 | smp_mb(); | ||
1420 | |||
1421 | if (unlikely(need_resched())) { | ||
1422 | current_thread_info()->status |= TS_POLLING; | ||
1423 | local_irq_enable(); | ||
1424 | return 0; | ||
1425 | } | ||
1426 | |||
1427 | if (cx->type == ACPI_STATE_C3) | ||
1428 | ACPI_FLUSH_CPU_CACHE(); | ||
1429 | |||
1430 | t1 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
1431 | acpi_state_timer_broadcast(pr, cx, 1); | ||
1432 | acpi_idle_do_entry(cx); | ||
1433 | t2 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
1434 | |||
1435 | #if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86_TSC) | ||
1436 | /* TSC could halt in idle, so notify users */ | ||
1437 | mark_tsc_unstable("TSC halts in idle");; | ||
1438 | #endif | ||
1439 | |||
1440 | local_irq_enable(); | ||
1441 | current_thread_info()->status |= TS_POLLING; | ||
1442 | |||
1443 | cx->usage++; | ||
1444 | |||
1445 | acpi_state_timer_broadcast(pr, cx, 0); | ||
1446 | cx->time += ticks_elapsed(t1, t2); | ||
1447 | return ticks_elapsed_in_us(t1, t2); | ||
1448 | } | ||
1449 | |||
1450 | static int c3_cpu_count; | ||
1451 | static DEFINE_SPINLOCK(c3_lock); | ||
1452 | |||
1453 | /** | ||
1454 | * acpi_idle_enter_bm - enters C3 with proper BM handling | ||
1455 | * @dev: the target CPU | ||
1456 | * @state: the state data | ||
1457 | * | ||
1458 | * If BM is detected, the deepest non-C3 idle state is entered instead. | ||
1459 | */ | ||
1460 | static int acpi_idle_enter_bm(struct cpuidle_device *dev, | ||
1461 | struct cpuidle_state *state) | ||
1462 | { | ||
1463 | struct acpi_processor *pr; | ||
1464 | struct acpi_processor_cx *cx = cpuidle_get_statedata(state); | ||
1465 | u32 t1, t2; | ||
1466 | pr = processors[smp_processor_id()]; | ||
1467 | |||
1468 | if (unlikely(!pr)) | ||
1469 | return 0; | ||
1470 | |||
1471 | if (acpi_idle_suspend) | ||
1472 | return(acpi_idle_enter_c1(dev, state)); | ||
1473 | |||
1474 | local_irq_disable(); | ||
1475 | current_thread_info()->status &= ~TS_POLLING; | ||
1476 | /* | ||
1477 | * TS_POLLING-cleared state must be visible before we test | ||
1478 | * NEED_RESCHED: | ||
1479 | */ | ||
1480 | smp_mb(); | ||
1481 | |||
1482 | if (unlikely(need_resched())) { | ||
1483 | current_thread_info()->status |= TS_POLLING; | ||
1484 | local_irq_enable(); | ||
1485 | return 0; | ||
1486 | } | ||
1487 | |||
1488 | /* | ||
1489 | * Must be done before busmaster disable as we might need to | ||
1490 | * access HPET ! | ||
1491 | */ | ||
1492 | acpi_state_timer_broadcast(pr, cx, 1); | ||
1493 | |||
1494 | if (acpi_idle_bm_check()) { | ||
1495 | cx = pr->power.bm_state; | ||
1496 | |||
1497 | acpi_idle_update_bm_rld(pr, cx); | ||
1498 | |||
1499 | t1 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
1500 | acpi_idle_do_entry(cx); | ||
1501 | t2 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
1502 | } else { | ||
1503 | acpi_idle_update_bm_rld(pr, cx); | ||
1504 | |||
1505 | spin_lock(&c3_lock); | ||
1506 | c3_cpu_count++; | ||
1507 | /* Disable bus master arbitration when all CPUs are in C3 */ | ||
1508 | if (c3_cpu_count == num_online_cpus()) | ||
1509 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1); | ||
1510 | spin_unlock(&c3_lock); | ||
1511 | |||
1512 | t1 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
1513 | acpi_idle_do_entry(cx); | ||
1514 | t2 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
1515 | |||
1516 | spin_lock(&c3_lock); | ||
1517 | /* Re-enable bus master arbitration */ | ||
1518 | if (c3_cpu_count == num_online_cpus()) | ||
1519 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0); | ||
1520 | c3_cpu_count--; | ||
1521 | spin_unlock(&c3_lock); | ||
1522 | } | ||
1523 | |||
1524 | #if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86_TSC) | ||
1525 | /* TSC could halt in idle, so notify users */ | ||
1526 | mark_tsc_unstable("TSC halts in idle"); | ||
1527 | #endif | ||
1528 | |||
1529 | local_irq_enable(); | ||
1530 | current_thread_info()->status |= TS_POLLING; | ||
1531 | |||
1532 | cx->usage++; | ||
1533 | |||
1534 | acpi_state_timer_broadcast(pr, cx, 0); | ||
1535 | cx->time += ticks_elapsed(t1, t2); | ||
1536 | return ticks_elapsed_in_us(t1, t2); | ||
1537 | } | ||
1538 | |||
1539 | struct cpuidle_driver acpi_idle_driver = { | ||
1540 | .name = "acpi_idle", | ||
1541 | .owner = THIS_MODULE, | ||
1542 | }; | ||
1543 | |||
1544 | /** | ||
1545 | * acpi_processor_setup_cpuidle - prepares and configures CPUIDLE | ||
1546 | * @pr: the ACPI processor | ||
1547 | */ | ||
1548 | static int acpi_processor_setup_cpuidle(struct acpi_processor *pr) | ||
1549 | { | ||
1550 | int i, count = 0; | ||
1551 | struct acpi_processor_cx *cx; | ||
1552 | struct cpuidle_state *state; | ||
1553 | struct cpuidle_device *dev = &pr->power.dev; | ||
1554 | |||
1555 | if (!pr->flags.power_setup_done) | ||
1556 | return -EINVAL; | ||
1557 | |||
1558 | if (pr->flags.power == 0) { | ||
1559 | return -EINVAL; | ||
1560 | } | ||
1561 | |||
1562 | for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) { | ||
1563 | cx = &pr->power.states[i]; | ||
1564 | state = &dev->states[count]; | ||
1565 | |||
1566 | if (!cx->valid) | ||
1567 | continue; | ||
1568 | |||
1569 | #ifdef CONFIG_HOTPLUG_CPU | ||
1570 | if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) && | ||
1571 | !pr->flags.has_cst && | ||
1572 | !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED)) | ||
1573 | continue; | ||
1252 | #endif | 1574 | #endif |
1575 | cpuidle_set_statedata(state, cx); | ||
1576 | |||
1577 | snprintf(state->name, CPUIDLE_NAME_LEN, "C%d", i); | ||
1578 | state->exit_latency = cx->latency; | ||
1579 | state->target_residency = cx->latency * 6; | ||
1580 | state->power_usage = cx->power; | ||
1581 | |||
1582 | state->flags = 0; | ||
1583 | switch (cx->type) { | ||
1584 | case ACPI_STATE_C1: | ||
1585 | state->flags |= CPUIDLE_FLAG_SHALLOW; | ||
1586 | state->enter = acpi_idle_enter_c1; | ||
1587 | break; | ||
1588 | |||
1589 | case ACPI_STATE_C2: | ||
1590 | state->flags |= CPUIDLE_FLAG_BALANCED; | ||
1591 | state->flags |= CPUIDLE_FLAG_TIME_VALID; | ||
1592 | state->enter = acpi_idle_enter_simple; | ||
1593 | break; | ||
1594 | |||
1595 | case ACPI_STATE_C3: | ||
1596 | state->flags |= CPUIDLE_FLAG_DEEP; | ||
1597 | state->flags |= CPUIDLE_FLAG_TIME_VALID; | ||
1598 | state->flags |= CPUIDLE_FLAG_CHECK_BM; | ||
1599 | state->enter = pr->flags.bm_check ? | ||
1600 | acpi_idle_enter_bm : | ||
1601 | acpi_idle_enter_simple; | ||
1602 | break; | ||
1603 | } | ||
1604 | |||
1605 | count++; | ||
1606 | } | ||
1607 | |||
1608 | dev->state_count = count; | ||
1609 | |||
1610 | if (!count) | ||
1611 | return -EINVAL; | ||
1612 | |||
1613 | /* find the deepest state that can handle active BM */ | ||
1614 | if (pr->flags.bm_check) { | ||
1615 | for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) | ||
1616 | if (pr->power.states[i].type == ACPI_STATE_C3) | ||
1617 | break; | ||
1618 | pr->power.bm_state = &pr->power.states[i-1]; | ||
1619 | } | ||
1620 | |||
1621 | return 0; | ||
1622 | } | ||
1623 | |||
1624 | int acpi_processor_cst_has_changed(struct acpi_processor *pr) | ||
1625 | { | ||
1626 | int ret; | ||
1627 | |||
1628 | if (!pr) | ||
1629 | return -EINVAL; | ||
1630 | |||
1631 | if (nocst) { | ||
1632 | return -ENODEV; | ||
1633 | } | ||
1634 | |||
1635 | if (!pr->flags.power_setup_done) | ||
1636 | return -ENODEV; | ||
1637 | |||
1638 | cpuidle_pause_and_lock(); | ||
1639 | cpuidle_disable_device(&pr->power.dev); | ||
1640 | acpi_processor_get_power_info(pr); | ||
1641 | acpi_processor_setup_cpuidle(pr); | ||
1642 | ret = cpuidle_enable_device(&pr->power.dev); | ||
1643 | cpuidle_resume_and_unlock(); | ||
1644 | |||
1645 | return ret; | ||
1646 | } | ||
1647 | |||
1648 | #endif /* CONFIG_CPU_IDLE */ | ||
1253 | 1649 | ||
1254 | int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | 1650 | int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, |
1255 | struct acpi_device *device) | 1651 | struct acpi_device *device) |
@@ -1267,7 +1663,7 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | |||
1267 | "ACPI: processor limited to max C-state %d\n", | 1663 | "ACPI: processor limited to max C-state %d\n", |
1268 | max_cstate); | 1664 | max_cstate); |
1269 | first_run++; | 1665 | first_run++; |
1270 | #ifdef CONFIG_SMP | 1666 | #if !defined (CONFIG_CPU_IDLE) && defined (CONFIG_SMP) |
1271 | register_latency_notifier(&acpi_processor_latency_notifier); | 1667 | register_latency_notifier(&acpi_processor_latency_notifier); |
1272 | #endif | 1668 | #endif |
1273 | } | 1669 | } |
@@ -1285,6 +1681,7 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | |||
1285 | } | 1681 | } |
1286 | 1682 | ||
1287 | acpi_processor_get_power_info(pr); | 1683 | acpi_processor_get_power_info(pr); |
1684 | pr->flags.power_setup_done = 1; | ||
1288 | 1685 | ||
1289 | /* | 1686 | /* |
1290 | * Install the idle handler if processor power management is supported. | 1687 | * Install the idle handler if processor power management is supported. |
@@ -1292,6 +1689,13 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | |||
1292 | * platforms that only support C1. | 1689 | * platforms that only support C1. |
1293 | */ | 1690 | */ |
1294 | if ((pr->flags.power) && (!boot_option_idle_override)) { | 1691 | if ((pr->flags.power) && (!boot_option_idle_override)) { |
1692 | #ifdef CONFIG_CPU_IDLE | ||
1693 | acpi_processor_setup_cpuidle(pr); | ||
1694 | pr->power.dev.cpu = pr->id; | ||
1695 | if (cpuidle_register_device(&pr->power.dev)) | ||
1696 | return -EIO; | ||
1697 | #endif | ||
1698 | |||
1295 | printk(KERN_INFO PREFIX "CPU%d (power states:", pr->id); | 1699 | printk(KERN_INFO PREFIX "CPU%d (power states:", pr->id); |
1296 | for (i = 1; i <= pr->power.count; i++) | 1700 | for (i = 1; i <= pr->power.count; i++) |
1297 | if (pr->power.states[i].valid) | 1701 | if (pr->power.states[i].valid) |
@@ -1299,10 +1703,12 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | |||
1299 | pr->power.states[i].type); | 1703 | pr->power.states[i].type); |
1300 | printk(")\n"); | 1704 | printk(")\n"); |
1301 | 1705 | ||
1706 | #ifndef CONFIG_CPU_IDLE | ||
1302 | if (pr->id == 0) { | 1707 | if (pr->id == 0) { |
1303 | pm_idle_save = pm_idle; | 1708 | pm_idle_save = pm_idle; |
1304 | pm_idle = acpi_processor_idle; | 1709 | pm_idle = acpi_processor_idle; |
1305 | } | 1710 | } |
1711 | #endif | ||
1306 | } | 1712 | } |
1307 | 1713 | ||
1308 | /* 'power' [R] */ | 1714 | /* 'power' [R] */ |
@@ -1316,21 +1722,24 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | |||
1316 | entry->owner = THIS_MODULE; | 1722 | entry->owner = THIS_MODULE; |
1317 | } | 1723 | } |
1318 | 1724 | ||
1319 | pr->flags.power_setup_done = 1; | ||
1320 | |||
1321 | return 0; | 1725 | return 0; |
1322 | } | 1726 | } |
1323 | 1727 | ||
1324 | int acpi_processor_power_exit(struct acpi_processor *pr, | 1728 | int acpi_processor_power_exit(struct acpi_processor *pr, |
1325 | struct acpi_device *device) | 1729 | struct acpi_device *device) |
1326 | { | 1730 | { |
1327 | 1731 | #ifdef CONFIG_CPU_IDLE | |
1732 | if ((pr->flags.power) && (!boot_option_idle_override)) | ||
1733 | cpuidle_unregister_device(&pr->power.dev); | ||
1734 | #endif | ||
1328 | pr->flags.power_setup_done = 0; | 1735 | pr->flags.power_setup_done = 0; |
1329 | 1736 | ||
1330 | if (acpi_device_dir(device)) | 1737 | if (acpi_device_dir(device)) |
1331 | remove_proc_entry(ACPI_PROCESSOR_FILE_POWER, | 1738 | remove_proc_entry(ACPI_PROCESSOR_FILE_POWER, |
1332 | acpi_device_dir(device)); | 1739 | acpi_device_dir(device)); |
1333 | 1740 | ||
1741 | #ifndef CONFIG_CPU_IDLE | ||
1742 | |||
1334 | /* Unregister the idle handler when processor #0 is removed. */ | 1743 | /* Unregister the idle handler when processor #0 is removed. */ |
1335 | if (pr->id == 0) { | 1744 | if (pr->id == 0) { |
1336 | pm_idle = pm_idle_save; | 1745 | pm_idle = pm_idle_save; |
@@ -1345,6 +1754,7 @@ int acpi_processor_power_exit(struct acpi_processor *pr, | |||
1345 | unregister_latency_notifier(&acpi_processor_latency_notifier); | 1754 | unregister_latency_notifier(&acpi_processor_latency_notifier); |
1346 | #endif | 1755 | #endif |
1347 | } | 1756 | } |
1757 | #endif | ||
1348 | 1758 | ||
1349 | return 0; | 1759 | return 0; |
1350 | } | 1760 | } |
diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c index a578986e321..90fd09c65f9 100644 --- a/drivers/acpi/sbs.c +++ b/drivers/acpi/sbs.c | |||
@@ -1,6 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * acpi_sbs.c - ACPI Smart Battery System Driver ($Revision: 1.16 $) | 2 | * sbs.c - ACPI Smart Battery System Driver ($Revision: 2.0 $) |
3 | * | 3 | * |
4 | * Copyright (c) 2007 Alexey Starikovskiy <astarikovskiy@suse.de> | ||
5 | * Copyright (c) 2005-2007 Vladimir Lebedev <vladimir.p.lebedev@intel.com> | ||
4 | * Copyright (c) 2005 Rich Townsend <rhdt@bartol.udel.edu> | 6 | * Copyright (c) 2005 Rich Townsend <rhdt@bartol.udel.edu> |
5 | * | 7 | * |
6 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 8 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
@@ -26,15 +28,22 @@ | |||
26 | #include <linux/module.h> | 28 | #include <linux/module.h> |
27 | #include <linux/moduleparam.h> | 29 | #include <linux/moduleparam.h> |
28 | #include <linux/kernel.h> | 30 | #include <linux/kernel.h> |
31 | |||
32 | #ifdef CONFIG_ACPI_PROCFS | ||
29 | #include <linux/proc_fs.h> | 33 | #include <linux/proc_fs.h> |
30 | #include <linux/seq_file.h> | 34 | #include <linux/seq_file.h> |
31 | #include <asm/uaccess.h> | 35 | #include <asm/uaccess.h> |
36 | #endif | ||
37 | |||
32 | #include <linux/acpi.h> | 38 | #include <linux/acpi.h> |
33 | #include <linux/timer.h> | 39 | #include <linux/timer.h> |
34 | #include <linux/jiffies.h> | 40 | #include <linux/jiffies.h> |
35 | #include <linux/delay.h> | 41 | #include <linux/delay.h> |
36 | 42 | ||
37 | #define ACPI_SBS_COMPONENT 0x00080000 | 43 | #include <linux/power_supply.h> |
44 | |||
45 | #include "sbshc.h" | ||
46 | |||
38 | #define ACPI_SBS_CLASS "sbs" | 47 | #define ACPI_SBS_CLASS "sbs" |
39 | #define ACPI_AC_CLASS "ac_adapter" | 48 | #define ACPI_AC_CLASS "ac_adapter" |
40 | #define ACPI_BATTERY_CLASS "battery" | 49 | #define ACPI_BATTERY_CLASS "battery" |
@@ -44,836 +53,436 @@ | |||
44 | #define ACPI_SBS_FILE_ALARM "alarm" | 53 | #define ACPI_SBS_FILE_ALARM "alarm" |
45 | #define ACPI_BATTERY_DIR_NAME "BAT%i" | 54 | #define ACPI_BATTERY_DIR_NAME "BAT%i" |
46 | #define ACPI_AC_DIR_NAME "AC0" | 55 | #define ACPI_AC_DIR_NAME "AC0" |
47 | #define ACPI_SBC_SMBUS_ADDR 0x9 | ||
48 | #define ACPI_SBSM_SMBUS_ADDR 0xa | ||
49 | #define ACPI_SB_SMBUS_ADDR 0xb | ||
50 | #define ACPI_SBS_AC_NOTIFY_STATUS 0x80 | ||
51 | #define ACPI_SBS_BATTERY_NOTIFY_STATUS 0x80 | ||
52 | #define ACPI_SBS_BATTERY_NOTIFY_INFO 0x81 | ||
53 | 56 | ||
54 | #define _COMPONENT ACPI_SBS_COMPONENT | 57 | enum acpi_sbs_device_addr { |
58 | ACPI_SBS_CHARGER = 0x9, | ||
59 | ACPI_SBS_MANAGER = 0xa, | ||
60 | ACPI_SBS_BATTERY = 0xb, | ||
61 | }; | ||
55 | 62 | ||
56 | ACPI_MODULE_NAME("sbs"); | 63 | #define ACPI_SBS_NOTIFY_STATUS 0x80 |
64 | #define ACPI_SBS_NOTIFY_INFO 0x81 | ||
57 | 65 | ||
58 | MODULE_AUTHOR("Rich Townsend"); | 66 | MODULE_AUTHOR("Alexey Starikovskiy <astarikovskiy@suse.de>"); |
59 | MODULE_DESCRIPTION("Smart Battery System ACPI interface driver"); | 67 | MODULE_DESCRIPTION("Smart Battery System ACPI interface driver"); |
60 | MODULE_LICENSE("GPL"); | 68 | MODULE_LICENSE("GPL"); |
61 | 69 | ||
62 | #define xmsleep(t) msleep(t) | 70 | static unsigned int cache_time = 1000; |
63 | 71 | module_param(cache_time, uint, 0644); | |
64 | #define ACPI_EC_SMB_PRTCL 0x00 /* protocol, PEC */ | 72 | MODULE_PARM_DESC(cache_time, "cache time in milliseconds"); |
65 | |||
66 | #define ACPI_EC_SMB_STS 0x01 /* status */ | ||
67 | #define ACPI_EC_SMB_ADDR 0x02 /* address */ | ||
68 | #define ACPI_EC_SMB_CMD 0x03 /* command */ | ||
69 | #define ACPI_EC_SMB_DATA 0x04 /* 32 data registers */ | ||
70 | #define ACPI_EC_SMB_BCNT 0x24 /* number of data bytes */ | ||
71 | |||
72 | #define ACPI_EC_SMB_STS_DONE 0x80 | ||
73 | #define ACPI_EC_SMB_STS_STATUS 0x1f | ||
74 | |||
75 | #define ACPI_EC_SMB_PRTCL_WRITE 0x00 | ||
76 | #define ACPI_EC_SMB_PRTCL_READ 0x01 | ||
77 | #define ACPI_EC_SMB_PRTCL_WORD_DATA 0x08 | ||
78 | #define ACPI_EC_SMB_PRTCL_BLOCK_DATA 0x0a | ||
79 | |||
80 | #define ACPI_EC_SMB_TRANSACTION_SLEEP 1 | ||
81 | #define ACPI_EC_SMB_ACCESS_SLEEP1 1 | ||
82 | #define ACPI_EC_SMB_ACCESS_SLEEP2 10 | ||
83 | |||
84 | #define DEF_CAPACITY_UNIT 3 | ||
85 | #define MAH_CAPACITY_UNIT 1 | ||
86 | #define MWH_CAPACITY_UNIT 2 | ||
87 | #define CAPACITY_UNIT DEF_CAPACITY_UNIT | ||
88 | |||
89 | #define REQUEST_UPDATE_MODE 1 | ||
90 | #define QUEUE_UPDATE_MODE 2 | ||
91 | |||
92 | #define DATA_TYPE_COMMON 0 | ||
93 | #define DATA_TYPE_INFO 1 | ||
94 | #define DATA_TYPE_STATE 2 | ||
95 | #define DATA_TYPE_ALARM 3 | ||
96 | #define DATA_TYPE_AC_STATE 4 | ||
97 | 73 | ||
98 | extern struct proc_dir_entry *acpi_lock_ac_dir(void); | 74 | extern struct proc_dir_entry *acpi_lock_ac_dir(void); |
99 | extern struct proc_dir_entry *acpi_lock_battery_dir(void); | 75 | extern struct proc_dir_entry *acpi_lock_battery_dir(void); |
100 | extern void acpi_unlock_ac_dir(struct proc_dir_entry *acpi_ac_dir); | 76 | extern void acpi_unlock_ac_dir(struct proc_dir_entry *acpi_ac_dir); |
101 | extern void acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir); | 77 | extern void acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir); |
102 | 78 | ||
103 | #define MAX_SBS_BAT 4 | 79 | #define MAX_SBS_BAT 4 |
104 | #define ACPI_SBS_BLOCK_MAX 32 | 80 | #define ACPI_SBS_BLOCK_MAX 32 |
105 | 81 | ||
106 | #define ACPI_SBS_SMBUS_READ 1 | ||
107 | #define ACPI_SBS_SMBUS_WRITE 2 | ||
108 | |||
109 | #define ACPI_SBS_WORD_DATA 1 | ||
110 | #define ACPI_SBS_BLOCK_DATA 2 | ||
111 | |||
112 | #define UPDATE_DELAY 10 | ||
113 | |||
114 | /* 0 - every time, > 0 - by update_time */ | ||
115 | static unsigned int update_time = 120; | ||
116 | |||
117 | static unsigned int capacity_mode = CAPACITY_UNIT; | ||
118 | |||
119 | module_param(update_time, uint, 0644); | ||
120 | module_param(capacity_mode, uint, 0444); | ||
121 | |||
122 | static int acpi_sbs_add(struct acpi_device *device); | ||
123 | static int acpi_sbs_remove(struct acpi_device *device, int type); | ||
124 | static int acpi_sbs_resume(struct acpi_device *device); | ||
125 | |||
126 | static const struct acpi_device_id sbs_device_ids[] = { | 82 | static const struct acpi_device_id sbs_device_ids[] = { |
127 | {"ACPI0001", 0}, | 83 | {"ACPI0002", 0}, |
128 | {"ACPI0005", 0}, | ||
129 | {"", 0}, | 84 | {"", 0}, |
130 | }; | 85 | }; |
131 | MODULE_DEVICE_TABLE(acpi, sbs_device_ids); | 86 | MODULE_DEVICE_TABLE(acpi, sbs_device_ids); |
132 | 87 | ||
133 | static struct acpi_driver acpi_sbs_driver = { | ||
134 | .name = "sbs", | ||
135 | .class = ACPI_SBS_CLASS, | ||
136 | .ids = sbs_device_ids, | ||
137 | .ops = { | ||
138 | .add = acpi_sbs_add, | ||
139 | .remove = acpi_sbs_remove, | ||
140 | .resume = acpi_sbs_resume, | ||
141 | }, | ||
142 | }; | ||
143 | |||
144 | struct acpi_ac { | ||
145 | int ac_present; | ||
146 | }; | ||
147 | |||
148 | struct acpi_battery_info { | ||
149 | int capacity_mode; | ||
150 | s16 full_charge_capacity; | ||
151 | s16 design_capacity; | ||
152 | s16 design_voltage; | ||
153 | int vscale; | ||
154 | int ipscale; | ||
155 | s16 serial_number; | ||
156 | char manufacturer_name[ACPI_SBS_BLOCK_MAX + 3]; | ||
157 | char device_name[ACPI_SBS_BLOCK_MAX + 3]; | ||
158 | char device_chemistry[ACPI_SBS_BLOCK_MAX + 3]; | ||
159 | }; | ||
160 | |||
161 | struct acpi_battery_state { | ||
162 | s16 voltage; | ||
163 | s16 amperage; | ||
164 | s16 remaining_capacity; | ||
165 | s16 battery_state; | ||
166 | }; | ||
167 | |||
168 | struct acpi_battery_alarm { | ||
169 | s16 remaining_capacity; | ||
170 | }; | ||
171 | |||
172 | struct acpi_battery { | 88 | struct acpi_battery { |
173 | int alive; | 89 | struct power_supply bat; |
174 | int id; | ||
175 | int init_state; | ||
176 | int battery_present; | ||
177 | struct acpi_sbs *sbs; | 90 | struct acpi_sbs *sbs; |
178 | struct acpi_battery_info info; | 91 | #ifdef CONFIG_ACPI_PROCFS |
179 | struct acpi_battery_state state; | 92 | struct proc_dir_entry *proc_entry; |
180 | struct acpi_battery_alarm alarm; | 93 | #endif |
181 | struct proc_dir_entry *battery_entry; | 94 | unsigned long update_time; |
95 | char name[8]; | ||
96 | char manufacturer_name[ACPI_SBS_BLOCK_MAX]; | ||
97 | char device_name[ACPI_SBS_BLOCK_MAX]; | ||
98 | char device_chemistry[ACPI_SBS_BLOCK_MAX]; | ||
99 | u16 alarm_capacity; | ||
100 | u16 full_charge_capacity; | ||
101 | u16 design_capacity; | ||
102 | u16 design_voltage; | ||
103 | u16 serial_number; | ||
104 | u16 cycle_count; | ||
105 | u16 temp_now; | ||
106 | u16 voltage_now; | ||
107 | s16 current_now; | ||
108 | s16 current_avg; | ||
109 | u16 capacity_now; | ||
110 | u16 state_of_charge; | ||
111 | u16 state; | ||
112 | u16 mode; | ||
113 | u16 spec; | ||
114 | u8 id; | ||
115 | u8 present:1; | ||
182 | }; | 116 | }; |
183 | 117 | ||
118 | #define to_acpi_battery(x) container_of(x, struct acpi_battery, bat); | ||
119 | |||
184 | struct acpi_sbs { | 120 | struct acpi_sbs { |
185 | int base; | 121 | struct power_supply charger; |
186 | struct acpi_device *device; | 122 | struct acpi_device *device; |
187 | struct mutex mutex; | 123 | struct acpi_smb_hc *hc; |
188 | int sbsm_present; | 124 | struct mutex lock; |
189 | int sbsm_batteries_supported; | 125 | #ifdef CONFIG_ACPI_PROCFS |
190 | struct proc_dir_entry *ac_entry; | 126 | struct proc_dir_entry *charger_entry; |
191 | struct acpi_ac ac; | 127 | #endif |
192 | struct acpi_battery battery[MAX_SBS_BAT]; | 128 | struct acpi_battery battery[MAX_SBS_BAT]; |
193 | int zombie; | 129 | u8 batteries_supported:4; |
194 | struct timer_list update_timer; | 130 | u8 manager_present:1; |
195 | int run_cnt; | 131 | u8 charger_present:1; |
196 | int update_proc_flg; | ||
197 | }; | 132 | }; |
198 | 133 | ||
199 | static int acpi_sbs_update_run(struct acpi_sbs *sbs, int id, int data_type); | 134 | #define to_acpi_sbs(x) container_of(x, struct acpi_sbs, charger) |
200 | static void acpi_sbs_update_time(void *data); | ||
201 | 135 | ||
202 | union sbs_rw_data { | 136 | static inline int battery_scale(int log) |
203 | u16 word; | ||
204 | u8 block[ACPI_SBS_BLOCK_MAX + 2]; | ||
205 | }; | ||
206 | |||
207 | static int acpi_ec_sbs_access(struct acpi_sbs *sbs, u16 addr, | ||
208 | char read_write, u8 command, int size, | ||
209 | union sbs_rw_data *data); | ||
210 | |||
211 | /* -------------------------------------------------------------------------- | ||
212 | SMBus Communication | ||
213 | -------------------------------------------------------------------------- */ | ||
214 | |||
215 | static int acpi_ec_sbs_read(struct acpi_sbs *sbs, u8 address, u8 * data) | ||
216 | { | 137 | { |
217 | u8 val; | 138 | int scale = 1; |
218 | int err; | 139 | while (log--) |
219 | 140 | scale *= 10; | |
220 | err = ec_read(sbs->base + address, &val); | 141 | return scale; |
221 | if (!err) { | ||
222 | *data = val; | ||
223 | } | ||
224 | xmsleep(ACPI_EC_SMB_TRANSACTION_SLEEP); | ||
225 | return (err); | ||
226 | } | ||
227 | |||
228 | static int acpi_ec_sbs_write(struct acpi_sbs *sbs, u8 address, u8 data) | ||
229 | { | ||
230 | int err; | ||
231 | |||
232 | err = ec_write(sbs->base + address, data); | ||
233 | return (err); | ||
234 | } | ||
235 | |||
236 | static int | ||
237 | acpi_ec_sbs_access(struct acpi_sbs *sbs, u16 addr, | ||
238 | char read_write, u8 command, int size, | ||
239 | union sbs_rw_data *data) | ||
240 | { | ||
241 | unsigned char protocol, len = 0, temp[2] = { 0, 0 }; | ||
242 | int i; | ||
243 | |||
244 | if (read_write == ACPI_SBS_SMBUS_READ) { | ||
245 | protocol = ACPI_EC_SMB_PRTCL_READ; | ||
246 | } else { | ||
247 | protocol = ACPI_EC_SMB_PRTCL_WRITE; | ||
248 | } | ||
249 | |||
250 | switch (size) { | ||
251 | |||
252 | case ACPI_SBS_WORD_DATA: | ||
253 | acpi_ec_sbs_write(sbs, ACPI_EC_SMB_CMD, command); | ||
254 | if (read_write == ACPI_SBS_SMBUS_WRITE) { | ||
255 | acpi_ec_sbs_write(sbs, ACPI_EC_SMB_DATA, data->word); | ||
256 | acpi_ec_sbs_write(sbs, ACPI_EC_SMB_DATA + 1, | ||
257 | data->word >> 8); | ||
258 | } | ||
259 | protocol |= ACPI_EC_SMB_PRTCL_WORD_DATA; | ||
260 | break; | ||
261 | case ACPI_SBS_BLOCK_DATA: | ||
262 | acpi_ec_sbs_write(sbs, ACPI_EC_SMB_CMD, command); | ||
263 | if (read_write == ACPI_SBS_SMBUS_WRITE) { | ||
264 | len = min_t(u8, data->block[0], 32); | ||
265 | acpi_ec_sbs_write(sbs, ACPI_EC_SMB_BCNT, len); | ||
266 | for (i = 0; i < len; i++) | ||
267 | acpi_ec_sbs_write(sbs, ACPI_EC_SMB_DATA + i, | ||
268 | data->block[i + 1]); | ||
269 | } | ||
270 | protocol |= ACPI_EC_SMB_PRTCL_BLOCK_DATA; | ||
271 | break; | ||
272 | default: | ||
273 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
274 | "unsupported transaction %d", size)); | ||
275 | return (-1); | ||
276 | } | ||
277 | |||
278 | acpi_ec_sbs_write(sbs, ACPI_EC_SMB_ADDR, addr << 1); | ||
279 | acpi_ec_sbs_write(sbs, ACPI_EC_SMB_PRTCL, protocol); | ||
280 | |||
281 | acpi_ec_sbs_read(sbs, ACPI_EC_SMB_STS, temp); | ||
282 | |||
283 | if (~temp[0] & ACPI_EC_SMB_STS_DONE) { | ||
284 | xmsleep(ACPI_EC_SMB_ACCESS_SLEEP1); | ||
285 | acpi_ec_sbs_read(sbs, ACPI_EC_SMB_STS, temp); | ||
286 | } | ||
287 | if (~temp[0] & ACPI_EC_SMB_STS_DONE) { | ||
288 | xmsleep(ACPI_EC_SMB_ACCESS_SLEEP2); | ||
289 | acpi_ec_sbs_read(sbs, ACPI_EC_SMB_STS, temp); | ||
290 | } | ||
291 | if ((~temp[0] & ACPI_EC_SMB_STS_DONE) | ||
292 | || (temp[0] & ACPI_EC_SMB_STS_STATUS)) { | ||
293 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
294 | "transaction %d error", size)); | ||
295 | return (-1); | ||
296 | } | ||
297 | |||
298 | if (read_write == ACPI_SBS_SMBUS_WRITE) { | ||
299 | return (0); | ||
300 | } | ||
301 | |||
302 | switch (size) { | ||
303 | |||
304 | case ACPI_SBS_WORD_DATA: | ||
305 | acpi_ec_sbs_read(sbs, ACPI_EC_SMB_DATA, temp); | ||
306 | acpi_ec_sbs_read(sbs, ACPI_EC_SMB_DATA + 1, temp + 1); | ||
307 | data->word = (temp[1] << 8) | temp[0]; | ||
308 | break; | ||
309 | |||
310 | case ACPI_SBS_BLOCK_DATA: | ||
311 | len = 0; | ||
312 | acpi_ec_sbs_read(sbs, ACPI_EC_SMB_BCNT, &len); | ||
313 | len = min_t(u8, len, 32); | ||
314 | for (i = 0; i < len; i++) | ||
315 | acpi_ec_sbs_read(sbs, ACPI_EC_SMB_DATA + i, | ||
316 | data->block + i + 1); | ||
317 | data->block[0] = len; | ||
318 | break; | ||
319 | default: | ||
320 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
321 | "unsupported transaction %d", size)); | ||
322 | return (-1); | ||
323 | } | ||
324 | |||
325 | return (0); | ||
326 | } | 142 | } |
327 | 143 | ||
328 | static int | 144 | static inline int acpi_battery_vscale(struct acpi_battery *battery) |
329 | acpi_sbs_read_word(struct acpi_sbs *sbs, int addr, int func, u16 * word) | ||
330 | { | 145 | { |
331 | union sbs_rw_data data; | 146 | return battery_scale((battery->spec & 0x0f00) >> 8); |
332 | int result = 0; | ||
333 | |||
334 | result = acpi_ec_sbs_access(sbs, addr, | ||
335 | ACPI_SBS_SMBUS_READ, func, | ||
336 | ACPI_SBS_WORD_DATA, &data); | ||
337 | if (result) { | ||
338 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
339 | "acpi_ec_sbs_access() failed")); | ||
340 | } else { | ||
341 | *word = data.word; | ||
342 | } | ||
343 | |||
344 | return result; | ||
345 | } | 147 | } |
346 | 148 | ||
347 | static int | 149 | static inline int acpi_battery_ipscale(struct acpi_battery *battery) |
348 | acpi_sbs_read_str(struct acpi_sbs *sbs, int addr, int func, char *str) | ||
349 | { | 150 | { |
350 | union sbs_rw_data data; | 151 | return battery_scale((battery->spec & 0xf000) >> 12); |
351 | int result = 0; | ||
352 | |||
353 | result = acpi_ec_sbs_access(sbs, addr, | ||
354 | ACPI_SBS_SMBUS_READ, func, | ||
355 | ACPI_SBS_BLOCK_DATA, &data); | ||
356 | if (result) { | ||
357 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
358 | "acpi_ec_sbs_access() failed")); | ||
359 | } else { | ||
360 | strncpy(str, (const char *)data.block + 1, data.block[0]); | ||
361 | str[data.block[0]] = 0; | ||
362 | } | ||
363 | |||
364 | return result; | ||
365 | } | 152 | } |
366 | 153 | ||
367 | static int | 154 | static inline int acpi_battery_mode(struct acpi_battery *battery) |
368 | acpi_sbs_write_word(struct acpi_sbs *sbs, int addr, int func, int word) | ||
369 | { | 155 | { |
370 | union sbs_rw_data data; | 156 | return (battery->mode & 0x8000); |
371 | int result = 0; | ||
372 | |||
373 | data.word = word; | ||
374 | |||
375 | result = acpi_ec_sbs_access(sbs, addr, | ||
376 | ACPI_SBS_SMBUS_WRITE, func, | ||
377 | ACPI_SBS_WORD_DATA, &data); | ||
378 | if (result) { | ||
379 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
380 | "acpi_ec_sbs_access() failed")); | ||
381 | } | ||
382 | |||
383 | return result; | ||
384 | } | 157 | } |
385 | 158 | ||
386 | static int sbs_zombie(struct acpi_sbs *sbs) | 159 | static inline int acpi_battery_scale(struct acpi_battery *battery) |
387 | { | 160 | { |
388 | return (sbs->zombie); | 161 | return (acpi_battery_mode(battery) ? 10 : 1) * |
162 | acpi_battery_ipscale(battery); | ||
389 | } | 163 | } |
390 | 164 | ||
391 | static int sbs_mutex_lock(struct acpi_sbs *sbs) | 165 | static int sbs_get_ac_property(struct power_supply *psy, |
166 | enum power_supply_property psp, | ||
167 | union power_supply_propval *val) | ||
392 | { | 168 | { |
393 | if (sbs_zombie(sbs)) { | 169 | struct acpi_sbs *sbs = to_acpi_sbs(psy); |
394 | return -ENODEV; | 170 | switch (psp) { |
171 | case POWER_SUPPLY_PROP_ONLINE: | ||
172 | val->intval = sbs->charger_present; | ||
173 | break; | ||
174 | default: | ||
175 | return -EINVAL; | ||
395 | } | 176 | } |
396 | mutex_lock(&sbs->mutex); | ||
397 | return 0; | 177 | return 0; |
398 | } | 178 | } |
399 | 179 | ||
400 | static void sbs_mutex_unlock(struct acpi_sbs *sbs) | 180 | static int acpi_battery_technology(struct acpi_battery *battery) |
401 | { | 181 | { |
402 | mutex_unlock(&sbs->mutex); | 182 | if (!strcasecmp("NiCd", battery->device_chemistry)) |
183 | return POWER_SUPPLY_TECHNOLOGY_NiCd; | ||
184 | if (!strcasecmp("NiMH", battery->device_chemistry)) | ||
185 | return POWER_SUPPLY_TECHNOLOGY_NiMH; | ||
186 | if (!strcasecmp("LION", battery->device_chemistry)) | ||
187 | return POWER_SUPPLY_TECHNOLOGY_LION; | ||
188 | if (!strcasecmp("LiP", battery->device_chemistry)) | ||
189 | return POWER_SUPPLY_TECHNOLOGY_LIPO; | ||
190 | return POWER_SUPPLY_TECHNOLOGY_UNKNOWN; | ||
403 | } | 191 | } |
404 | 192 | ||
405 | /* -------------------------------------------------------------------------- | 193 | static int acpi_sbs_battery_get_property(struct power_supply *psy, |
406 | Smart Battery System Management | 194 | enum power_supply_property psp, |
407 | -------------------------------------------------------------------------- */ | 195 | union power_supply_propval *val) |
408 | |||
409 | static int acpi_check_update_proc(struct acpi_sbs *sbs) | ||
410 | { | 196 | { |
411 | acpi_status status = AE_OK; | 197 | struct acpi_battery *battery = to_acpi_battery(psy); |
412 | 198 | ||
413 | if (update_time == 0) { | 199 | if ((!battery->present) && psp != POWER_SUPPLY_PROP_PRESENT) |
414 | sbs->update_proc_flg = 0; | 200 | return -ENODEV; |
415 | return 0; | 201 | switch (psp) { |
416 | } | 202 | case POWER_SUPPLY_PROP_STATUS: |
417 | if (sbs->update_proc_flg == 0) { | 203 | if (battery->current_now < 0) |
418 | status = acpi_os_execute(OSL_GPE_HANDLER, | 204 | val->intval = POWER_SUPPLY_STATUS_DISCHARGING; |
419 | acpi_sbs_update_time, sbs); | 205 | else if (battery->current_now > 0) |
420 | if (status != AE_OK) { | 206 | val->intval = POWER_SUPPLY_STATUS_CHARGING; |
421 | ACPI_EXCEPTION((AE_INFO, status, | 207 | else |
422 | "acpi_os_execute() failed")); | 208 | val->intval = POWER_SUPPLY_STATUS_FULL; |
423 | return 1; | 209 | break; |
424 | } | 210 | case POWER_SUPPLY_PROP_PRESENT: |
425 | sbs->update_proc_flg = 1; | 211 | val->intval = battery->present; |
212 | break; | ||
213 | case POWER_SUPPLY_PROP_TECHNOLOGY: | ||
214 | val->intval = acpi_battery_technology(battery); | ||
215 | break; | ||
216 | case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: | ||
217 | val->intval = battery->design_voltage * | ||
218 | acpi_battery_vscale(battery) * 1000; | ||
219 | break; | ||
220 | case POWER_SUPPLY_PROP_VOLTAGE_NOW: | ||
221 | val->intval = battery->voltage_now * | ||
222 | acpi_battery_vscale(battery) * 1000; | ||
223 | break; | ||
224 | case POWER_SUPPLY_PROP_CURRENT_NOW: | ||
225 | val->intval = abs(battery->current_now) * | ||
226 | acpi_battery_ipscale(battery) * 1000; | ||
227 | break; | ||
228 | case POWER_SUPPLY_PROP_CURRENT_AVG: | ||
229 | val->intval = abs(battery->current_avg) * | ||
230 | acpi_battery_ipscale(battery) * 1000; | ||
231 | break; | ||
232 | case POWER_SUPPLY_PROP_CAPACITY: | ||
233 | val->intval = battery->state_of_charge; | ||
234 | break; | ||
235 | case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: | ||
236 | case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN: | ||
237 | val->intval = battery->design_capacity * | ||
238 | acpi_battery_scale(battery) * 1000; | ||
239 | break; | ||
240 | case POWER_SUPPLY_PROP_CHARGE_FULL: | ||
241 | case POWER_SUPPLY_PROP_ENERGY_FULL: | ||
242 | val->intval = battery->full_charge_capacity * | ||
243 | acpi_battery_scale(battery) * 1000; | ||
244 | break; | ||
245 | case POWER_SUPPLY_PROP_CHARGE_NOW: | ||
246 | case POWER_SUPPLY_PROP_ENERGY_NOW: | ||
247 | val->intval = battery->capacity_now * | ||
248 | acpi_battery_scale(battery) * 1000; | ||
249 | break; | ||
250 | case POWER_SUPPLY_PROP_TEMP: | ||
251 | val->intval = battery->temp_now - 2730; // dK -> dC | ||
252 | break; | ||
253 | case POWER_SUPPLY_PROP_MODEL_NAME: | ||
254 | val->strval = battery->device_name; | ||
255 | break; | ||
256 | case POWER_SUPPLY_PROP_MANUFACTURER: | ||
257 | val->strval = battery->manufacturer_name; | ||
258 | break; | ||
259 | default: | ||
260 | return -EINVAL; | ||
426 | } | 261 | } |
427 | return 0; | 262 | return 0; |
428 | } | 263 | } |
429 | 264 | ||
430 | static int acpi_sbs_generate_event(struct acpi_device *device, | 265 | static enum power_supply_property sbs_ac_props[] = { |
431 | int event, int state, char *bid, char *class) | 266 | POWER_SUPPLY_PROP_ONLINE, |
432 | { | 267 | }; |
433 | char bid_saved[5]; | ||
434 | char class_saved[20]; | ||
435 | int result = 0; | ||
436 | |||
437 | strcpy(bid_saved, acpi_device_bid(device)); | ||
438 | strcpy(class_saved, acpi_device_class(device)); | ||
439 | |||
440 | strcpy(acpi_device_bid(device), bid); | ||
441 | strcpy(acpi_device_class(device), class); | ||
442 | |||
443 | result = acpi_bus_generate_proc_event(device, event, state); | ||
444 | |||
445 | strcpy(acpi_device_bid(device), bid_saved); | ||
446 | strcpy(acpi_device_class(device), class_saved); | ||
447 | |||
448 | acpi_bus_generate_netlink_event(class, bid, event, state); | ||
449 | return result; | ||
450 | } | ||
451 | |||
452 | static int acpi_battery_get_present(struct acpi_battery *battery) | ||
453 | { | ||
454 | s16 state; | ||
455 | int result = 0; | ||
456 | int is_present = 0; | ||
457 | |||
458 | result = acpi_sbs_read_word(battery->sbs, | ||
459 | ACPI_SBSM_SMBUS_ADDR, 0x01, &state); | ||
460 | if (result) { | ||
461 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
462 | "acpi_sbs_read_word() failed")); | ||
463 | } | ||
464 | if (!result) { | ||
465 | is_present = (state & 0x000f) & (1 << battery->id); | ||
466 | } | ||
467 | battery->battery_present = is_present; | ||
468 | |||
469 | return result; | ||
470 | } | ||
471 | 268 | ||
472 | static int acpi_battery_select(struct acpi_battery *battery) | 269 | static enum power_supply_property sbs_charge_battery_props[] = { |
473 | { | 270 | POWER_SUPPLY_PROP_STATUS, |
474 | struct acpi_sbs *sbs = battery->sbs; | 271 | POWER_SUPPLY_PROP_PRESENT, |
475 | int result = 0; | 272 | POWER_SUPPLY_PROP_TECHNOLOGY, |
476 | s16 state; | 273 | POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, |
477 | int foo; | 274 | POWER_SUPPLY_PROP_VOLTAGE_NOW, |
275 | POWER_SUPPLY_PROP_CURRENT_NOW, | ||
276 | POWER_SUPPLY_PROP_CURRENT_AVG, | ||
277 | POWER_SUPPLY_PROP_CAPACITY, | ||
278 | POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, | ||
279 | POWER_SUPPLY_PROP_CHARGE_FULL, | ||
280 | POWER_SUPPLY_PROP_CHARGE_NOW, | ||
281 | POWER_SUPPLY_PROP_TEMP, | ||
282 | POWER_SUPPLY_PROP_MODEL_NAME, | ||
283 | POWER_SUPPLY_PROP_MANUFACTURER, | ||
284 | }; | ||
478 | 285 | ||
479 | if (sbs->sbsm_present) { | 286 | static enum power_supply_property sbs_energy_battery_props[] = { |
287 | POWER_SUPPLY_PROP_STATUS, | ||
288 | POWER_SUPPLY_PROP_PRESENT, | ||
289 | POWER_SUPPLY_PROP_TECHNOLOGY, | ||
290 | POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, | ||
291 | POWER_SUPPLY_PROP_VOLTAGE_NOW, | ||
292 | POWER_SUPPLY_PROP_CURRENT_NOW, | ||
293 | POWER_SUPPLY_PROP_CURRENT_AVG, | ||
294 | POWER_SUPPLY_PROP_CAPACITY, | ||
295 | POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, | ||
296 | POWER_SUPPLY_PROP_ENERGY_FULL, | ||
297 | POWER_SUPPLY_PROP_ENERGY_NOW, | ||
298 | POWER_SUPPLY_PROP_TEMP, | ||
299 | POWER_SUPPLY_PROP_MODEL_NAME, | ||
300 | POWER_SUPPLY_PROP_MANUFACTURER, | ||
301 | }; | ||
480 | 302 | ||
481 | /* Take special care not to knobble other nibbles of | 303 | /* -------------------------------------------------------------------------- |
482 | * state (aka selector_state), since | 304 | Smart Battery System Management |
483 | * it causes charging to halt on SBSELs */ | 305 | -------------------------------------------------------------------------- */ |
484 | 306 | ||
485 | result = | 307 | struct acpi_battery_reader { |
486 | acpi_sbs_read_word(sbs, ACPI_SBSM_SMBUS_ADDR, 0x01, &state); | 308 | u8 command; /* command for battery */ |
487 | if (result) { | 309 | u8 mode; /* word or block? */ |
488 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 310 | size_t offset; /* offset inside struct acpi_sbs_battery */ |
489 | "acpi_sbs_read_word() failed")); | 311 | }; |
490 | goto end; | ||
491 | } | ||
492 | 312 | ||
493 | foo = (state & 0x0fff) | (1 << (battery->id + 12)); | 313 | static struct acpi_battery_reader info_readers[] = { |
494 | result = | 314 | {0x01, SMBUS_READ_WORD, offsetof(struct acpi_battery, alarm_capacity)}, |
495 | acpi_sbs_write_word(sbs, ACPI_SBSM_SMBUS_ADDR, 0x01, foo); | 315 | {0x03, SMBUS_READ_WORD, offsetof(struct acpi_battery, mode)}, |
496 | if (result) { | 316 | {0x10, SMBUS_READ_WORD, offsetof(struct acpi_battery, full_charge_capacity)}, |
497 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 317 | {0x17, SMBUS_READ_WORD, offsetof(struct acpi_battery, cycle_count)}, |
498 | "acpi_sbs_write_word() failed")); | 318 | {0x18, SMBUS_READ_WORD, offsetof(struct acpi_battery, design_capacity)}, |
499 | goto end; | 319 | {0x19, SMBUS_READ_WORD, offsetof(struct acpi_battery, design_voltage)}, |
500 | } | 320 | {0x1a, SMBUS_READ_WORD, offsetof(struct acpi_battery, spec)}, |
501 | } | 321 | {0x1c, SMBUS_READ_WORD, offsetof(struct acpi_battery, serial_number)}, |
322 | {0x20, SMBUS_READ_BLOCK, offsetof(struct acpi_battery, manufacturer_name)}, | ||
323 | {0x21, SMBUS_READ_BLOCK, offsetof(struct acpi_battery, device_name)}, | ||
324 | {0x22, SMBUS_READ_BLOCK, offsetof(struct acpi_battery, device_chemistry)}, | ||
325 | }; | ||
502 | 326 | ||
503 | end: | 327 | static struct acpi_battery_reader state_readers[] = { |
504 | return result; | 328 | {0x08, SMBUS_READ_WORD, offsetof(struct acpi_battery, temp_now)}, |
505 | } | 329 | {0x09, SMBUS_READ_WORD, offsetof(struct acpi_battery, voltage_now)}, |
330 | {0x0a, SMBUS_READ_WORD, offsetof(struct acpi_battery, current_now)}, | ||
331 | {0x0b, SMBUS_READ_WORD, offsetof(struct acpi_battery, current_avg)}, | ||
332 | {0x0f, SMBUS_READ_WORD, offsetof(struct acpi_battery, capacity_now)}, | ||
333 | {0x0e, SMBUS_READ_WORD, offsetof(struct acpi_battery, state_of_charge)}, | ||
334 | {0x16, SMBUS_READ_WORD, offsetof(struct acpi_battery, state)}, | ||
335 | }; | ||
506 | 336 | ||
507 | static int acpi_sbsm_get_info(struct acpi_sbs *sbs) | 337 | static int acpi_manager_get_info(struct acpi_sbs *sbs) |
508 | { | 338 | { |
509 | int result = 0; | 339 | int result = 0; |
510 | s16 battery_system_info; | 340 | u16 battery_system_info; |
511 | |||
512 | result = acpi_sbs_read_word(sbs, ACPI_SBSM_SMBUS_ADDR, 0x04, | ||
513 | &battery_system_info); | ||
514 | if (result) { | ||
515 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
516 | "acpi_sbs_read_word() failed")); | ||
517 | goto end; | ||
518 | } | ||
519 | sbs->sbsm_present = 1; | ||
520 | sbs->sbsm_batteries_supported = battery_system_info & 0x000f; | ||
521 | |||
522 | end: | ||
523 | 341 | ||
342 | result = acpi_smbus_read(sbs->hc, SMBUS_READ_WORD, ACPI_SBS_MANAGER, | ||
343 | 0x04, (u8 *)&battery_system_info); | ||
344 | if (!result) | ||
345 | sbs->batteries_supported = battery_system_info & 0x000f; | ||
524 | return result; | 346 | return result; |
525 | } | 347 | } |
526 | 348 | ||
527 | static int acpi_battery_get_info(struct acpi_battery *battery) | 349 | static int acpi_battery_get_info(struct acpi_battery *battery) |
528 | { | 350 | { |
529 | struct acpi_sbs *sbs = battery->sbs; | 351 | int i, result = 0; |
530 | int result = 0; | 352 | |
531 | s16 battery_mode; | 353 | for (i = 0; i < ARRAY_SIZE(info_readers); ++i) { |
532 | s16 specification_info; | 354 | result = acpi_smbus_read(battery->sbs->hc, |
533 | 355 | info_readers[i].mode, | |
534 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x03, | 356 | ACPI_SBS_BATTERY, |
535 | &battery_mode); | 357 | info_readers[i].command, |
536 | if (result) { | 358 | (u8 *) battery + |
537 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 359 | info_readers[i].offset); |
538 | "acpi_sbs_read_word() failed")); | 360 | if (result) |
539 | goto end; | 361 | break; |
540 | } | ||
541 | battery->info.capacity_mode = (battery_mode & 0x8000) >> 15; | ||
542 | |||
543 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x10, | ||
544 | &battery->info.full_charge_capacity); | ||
545 | if (result) { | ||
546 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
547 | "acpi_sbs_read_word() failed")); | ||
548 | goto end; | ||
549 | } | ||
550 | |||
551 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x18, | ||
552 | &battery->info.design_capacity); | ||
553 | |||
554 | if (result) { | ||
555 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
556 | "acpi_sbs_read_word() failed")); | ||
557 | goto end; | ||
558 | } | ||
559 | |||
560 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x19, | ||
561 | &battery->info.design_voltage); | ||
562 | if (result) { | ||
563 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
564 | "acpi_sbs_read_word() failed")); | ||
565 | goto end; | ||
566 | } | 362 | } |
567 | |||
568 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x1a, | ||
569 | &specification_info); | ||
570 | if (result) { | ||
571 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
572 | "acpi_sbs_read_word() failed")); | ||
573 | goto end; | ||
574 | } | ||
575 | |||
576 | switch ((specification_info & 0x0f00) >> 8) { | ||
577 | case 1: | ||
578 | battery->info.vscale = 10; | ||
579 | break; | ||
580 | case 2: | ||
581 | battery->info.vscale = 100; | ||
582 | break; | ||
583 | case 3: | ||
584 | battery->info.vscale = 1000; | ||
585 | break; | ||
586 | default: | ||
587 | battery->info.vscale = 1; | ||
588 | } | ||
589 | |||
590 | switch ((specification_info & 0xf000) >> 12) { | ||
591 | case 1: | ||
592 | battery->info.ipscale = 10; | ||
593 | break; | ||
594 | case 2: | ||
595 | battery->info.ipscale = 100; | ||
596 | break; | ||
597 | case 3: | ||
598 | battery->info.ipscale = 1000; | ||
599 | break; | ||
600 | default: | ||
601 | battery->info.ipscale = 1; | ||
602 | } | ||
603 | |||
604 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x1c, | ||
605 | &battery->info.serial_number); | ||
606 | if (result) { | ||
607 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
608 | "acpi_sbs_read_word() failed")); | ||
609 | goto end; | ||
610 | } | ||
611 | |||
612 | result = acpi_sbs_read_str(sbs, ACPI_SB_SMBUS_ADDR, 0x20, | ||
613 | battery->info.manufacturer_name); | ||
614 | if (result) { | ||
615 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
616 | "acpi_sbs_read_str() failed")); | ||
617 | goto end; | ||
618 | } | ||
619 | |||
620 | result = acpi_sbs_read_str(sbs, ACPI_SB_SMBUS_ADDR, 0x21, | ||
621 | battery->info.device_name); | ||
622 | if (result) { | ||
623 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
624 | "acpi_sbs_read_str() failed")); | ||
625 | goto end; | ||
626 | } | ||
627 | |||
628 | result = acpi_sbs_read_str(sbs, ACPI_SB_SMBUS_ADDR, 0x22, | ||
629 | battery->info.device_chemistry); | ||
630 | if (result) { | ||
631 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
632 | "acpi_sbs_read_str() failed")); | ||
633 | goto end; | ||
634 | } | ||
635 | |||
636 | end: | ||
637 | return result; | 363 | return result; |
638 | } | 364 | } |
639 | 365 | ||
640 | static int acpi_battery_get_state(struct acpi_battery *battery) | 366 | static int acpi_battery_get_state(struct acpi_battery *battery) |
641 | { | 367 | { |
642 | struct acpi_sbs *sbs = battery->sbs; | 368 | int i, result = 0; |
643 | int result = 0; | ||
644 | 369 | ||
645 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x09, | 370 | if (battery->update_time && |
646 | &battery->state.voltage); | 371 | time_before(jiffies, battery->update_time + |
647 | if (result) { | 372 | msecs_to_jiffies(cache_time))) |
648 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 373 | return 0; |
649 | "acpi_sbs_read_word() failed")); | 374 | for (i = 0; i < ARRAY_SIZE(state_readers); ++i) { |
650 | goto end; | 375 | result = acpi_smbus_read(battery->sbs->hc, |
651 | } | 376 | state_readers[i].mode, |
652 | 377 | ACPI_SBS_BATTERY, | |
653 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x0a, | 378 | state_readers[i].command, |
654 | &battery->state.amperage); | 379 | (u8 *)battery + |
655 | if (result) { | 380 | state_readers[i].offset); |
656 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 381 | if (result) |
657 | "acpi_sbs_read_word() failed")); | 382 | goto end; |
658 | goto end; | ||
659 | } | ||
660 | |||
661 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x0f, | ||
662 | &battery->state.remaining_capacity); | ||
663 | if (result) { | ||
664 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
665 | "acpi_sbs_read_word() failed")); | ||
666 | goto end; | ||
667 | } | ||
668 | |||
669 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x16, | ||
670 | &battery->state.battery_state); | ||
671 | if (result) { | ||
672 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
673 | "acpi_sbs_read_word() failed")); | ||
674 | goto end; | ||
675 | } | 383 | } |
676 | |||
677 | end: | 384 | end: |
385 | battery->update_time = jiffies; | ||
678 | return result; | 386 | return result; |
679 | } | 387 | } |
680 | 388 | ||
681 | static int acpi_battery_get_alarm(struct acpi_battery *battery) | 389 | static int acpi_battery_get_alarm(struct acpi_battery *battery) |
682 | { | 390 | { |
683 | struct acpi_sbs *sbs = battery->sbs; | 391 | return acpi_smbus_read(battery->sbs->hc, SMBUS_READ_WORD, |
684 | int result = 0; | 392 | ACPI_SBS_BATTERY, 0x01, |
685 | 393 | (u8 *)&battery->alarm_capacity); | |
686 | result = acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x01, | ||
687 | &battery->alarm.remaining_capacity); | ||
688 | if (result) { | ||
689 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
690 | "acpi_sbs_read_word() failed")); | ||
691 | goto end; | ||
692 | } | ||
693 | |||
694 | end: | ||
695 | |||
696 | return result; | ||
697 | } | 394 | } |
698 | 395 | ||
699 | static int acpi_battery_set_alarm(struct acpi_battery *battery, | 396 | static int acpi_battery_set_alarm(struct acpi_battery *battery) |
700 | unsigned long alarm) | ||
701 | { | 397 | { |
702 | struct acpi_sbs *sbs = battery->sbs; | 398 | struct acpi_sbs *sbs = battery->sbs; |
703 | int result = 0; | 399 | u16 value, sel = 1 << (battery->id + 12); |
704 | s16 battery_mode; | ||
705 | int foo; | ||
706 | 400 | ||
707 | result = acpi_battery_select(battery); | 401 | int ret; |
708 | if (result) { | ||
709 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
710 | "acpi_battery_select() failed")); | ||
711 | goto end; | ||
712 | } | ||
713 | 402 | ||
714 | /* If necessary, enable the alarm */ | ||
715 | 403 | ||
716 | if (alarm > 0) { | 404 | if (sbs->manager_present) { |
717 | result = | 405 | ret = acpi_smbus_read(sbs->hc, SMBUS_READ_WORD, ACPI_SBS_MANAGER, |
718 | acpi_sbs_read_word(sbs, ACPI_SB_SMBUS_ADDR, 0x03, | 406 | 0x01, (u8 *)&value); |
719 | &battery_mode); | 407 | if (ret) |
720 | if (result) { | ||
721 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
722 | "acpi_sbs_read_word() failed")); | ||
723 | goto end; | 408 | goto end; |
724 | } | 409 | if ((value & 0xf000) != sel) { |
725 | 410 | value &= 0x0fff; | |
726 | result = | 411 | value |= sel; |
727 | acpi_sbs_write_word(sbs, ACPI_SB_SMBUS_ADDR, 0x01, | 412 | ret = acpi_smbus_write(sbs->hc, SMBUS_WRITE_WORD, |
728 | battery_mode & 0xbfff); | 413 | ACPI_SBS_MANAGER, |
729 | if (result) { | 414 | 0x01, (u8 *)&value, 2); |
730 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 415 | if (ret) |
731 | "acpi_sbs_write_word() failed")); | ||
732 | goto end; | 416 | goto end; |
733 | } | 417 | } |
734 | } | 418 | } |
735 | 419 | ret = acpi_smbus_write(sbs->hc, SMBUS_WRITE_WORD, ACPI_SBS_BATTERY, | |
736 | foo = alarm / (battery->info.capacity_mode ? 10 : 1); | 420 | 0x01, (u8 *)&battery->alarm_capacity, 2); |
737 | result = acpi_sbs_write_word(sbs, ACPI_SB_SMBUS_ADDR, 0x01, foo); | ||
738 | if (result) { | ||
739 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
740 | "acpi_sbs_write_word() failed")); | ||
741 | goto end; | ||
742 | } | ||
743 | |||
744 | end: | 421 | end: |
745 | 422 | return ret; | |
746 | return result; | ||
747 | } | 423 | } |
748 | 424 | ||
749 | static int acpi_battery_set_mode(struct acpi_battery *battery) | 425 | static int acpi_ac_get_present(struct acpi_sbs *sbs) |
750 | { | 426 | { |
751 | struct acpi_sbs *sbs = battery->sbs; | 427 | int result; |
752 | int result = 0; | 428 | u16 status; |
753 | s16 battery_mode; | ||
754 | |||
755 | if (capacity_mode == DEF_CAPACITY_UNIT) { | ||
756 | goto end; | ||
757 | } | ||
758 | |||
759 | result = acpi_sbs_read_word(sbs, | ||
760 | ACPI_SB_SMBUS_ADDR, 0x03, &battery_mode); | ||
761 | if (result) { | ||
762 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
763 | "acpi_sbs_read_word() failed")); | ||
764 | goto end; | ||
765 | } | ||
766 | |||
767 | if (capacity_mode == MAH_CAPACITY_UNIT) { | ||
768 | battery_mode &= 0x7fff; | ||
769 | } else { | ||
770 | battery_mode |= 0x8000; | ||
771 | } | ||
772 | result = acpi_sbs_write_word(sbs, | ||
773 | ACPI_SB_SMBUS_ADDR, 0x03, battery_mode); | ||
774 | if (result) { | ||
775 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
776 | "acpi_sbs_write_word() failed")); | ||
777 | goto end; | ||
778 | } | ||
779 | |||
780 | result = acpi_sbs_read_word(sbs, | ||
781 | ACPI_SB_SMBUS_ADDR, 0x03, &battery_mode); | ||
782 | if (result) { | ||
783 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
784 | "acpi_sbs_read_word() failed")); | ||
785 | goto end; | ||
786 | } | ||
787 | 429 | ||
788 | end: | 430 | result = acpi_smbus_read(sbs->hc, SMBUS_READ_WORD, ACPI_SBS_CHARGER, |
431 | 0x13, (u8 *) & status); | ||
432 | if (!result) | ||
433 | sbs->charger_present = (status >> 15) & 0x1; | ||
789 | return result; | 434 | return result; |
790 | } | 435 | } |
791 | 436 | ||
792 | static int acpi_battery_init(struct acpi_battery *battery) | 437 | static ssize_t acpi_battery_alarm_show(struct device *dev, |
438 | struct device_attribute *attr, | ||
439 | char *buf) | ||
793 | { | 440 | { |
794 | int result = 0; | 441 | struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev)); |
795 | 442 | acpi_battery_get_alarm(battery); | |
796 | result = acpi_battery_select(battery); | 443 | return sprintf(buf, "%d\n", battery->alarm_capacity * |
797 | if (result) { | 444 | acpi_battery_scale(battery) * 1000); |
798 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
799 | "acpi_battery_select() failed")); | ||
800 | goto end; | ||
801 | } | ||
802 | |||
803 | result = acpi_battery_set_mode(battery); | ||
804 | if (result) { | ||
805 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
806 | "acpi_battery_set_mode() failed")); | ||
807 | goto end; | ||
808 | } | ||
809 | |||
810 | result = acpi_battery_get_info(battery); | ||
811 | if (result) { | ||
812 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
813 | "acpi_battery_get_info() failed")); | ||
814 | goto end; | ||
815 | } | ||
816 | |||
817 | result = acpi_battery_get_state(battery); | ||
818 | if (result) { | ||
819 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
820 | "acpi_battery_get_state() failed")); | ||
821 | goto end; | ||
822 | } | ||
823 | |||
824 | result = acpi_battery_get_alarm(battery); | ||
825 | if (result) { | ||
826 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
827 | "acpi_battery_get_alarm() failed")); | ||
828 | goto end; | ||
829 | } | ||
830 | |||
831 | end: | ||
832 | return result; | ||
833 | } | 445 | } |
834 | 446 | ||
835 | static int acpi_ac_get_present(struct acpi_sbs *sbs) | 447 | static ssize_t acpi_battery_alarm_store(struct device *dev, |
448 | struct device_attribute *attr, | ||
449 | const char *buf, size_t count) | ||
836 | { | 450 | { |
837 | int result = 0; | 451 | unsigned long x; |
838 | s16 charger_status; | 452 | struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev)); |
839 | 453 | if (sscanf(buf, "%ld\n", &x) == 1) | |
840 | result = acpi_sbs_read_word(sbs, ACPI_SBC_SMBUS_ADDR, 0x13, | 454 | battery->alarm_capacity = x / |
841 | &charger_status); | 455 | (1000 * acpi_battery_scale(battery)); |
842 | 456 | if (battery->present) | |
843 | if (result) { | 457 | acpi_battery_set_alarm(battery); |
844 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 458 | return count; |
845 | "acpi_sbs_read_word() failed")); | ||
846 | goto end; | ||
847 | } | ||
848 | |||
849 | sbs->ac.ac_present = (charger_status & 0x8000) >> 15; | ||
850 | |||
851 | end: | ||
852 | |||
853 | return result; | ||
854 | } | 459 | } |
855 | 460 | ||
461 | static struct device_attribute alarm_attr = { | ||
462 | .attr = {.name = "alarm", .mode = 0644, .owner = THIS_MODULE}, | ||
463 | .show = acpi_battery_alarm_show, | ||
464 | .store = acpi_battery_alarm_store, | ||
465 | }; | ||
466 | |||
856 | /* -------------------------------------------------------------------------- | 467 | /* -------------------------------------------------------------------------- |
857 | FS Interface (/proc/acpi) | 468 | FS Interface (/proc/acpi) |
858 | -------------------------------------------------------------------------- */ | 469 | -------------------------------------------------------------------------- */ |
859 | 470 | ||
471 | #ifdef CONFIG_ACPI_PROCFS | ||
860 | /* Generic Routines */ | 472 | /* Generic Routines */ |
861 | |||
862 | static int | 473 | static int |
863 | acpi_sbs_generic_add_fs(struct proc_dir_entry **dir, | 474 | acpi_sbs_add_fs(struct proc_dir_entry **dir, |
864 | struct proc_dir_entry *parent_dir, | 475 | struct proc_dir_entry *parent_dir, |
865 | char *dir_name, | 476 | char *dir_name, |
866 | struct file_operations *info_fops, | 477 | struct file_operations *info_fops, |
867 | struct file_operations *state_fops, | 478 | struct file_operations *state_fops, |
868 | struct file_operations *alarm_fops, void *data) | 479 | struct file_operations *alarm_fops, void *data) |
869 | { | 480 | { |
870 | struct proc_dir_entry *entry = NULL; | 481 | struct proc_dir_entry *entry = NULL; |
871 | 482 | ||
872 | if (!*dir) { | 483 | if (!*dir) { |
873 | *dir = proc_mkdir(dir_name, parent_dir); | 484 | *dir = proc_mkdir(dir_name, parent_dir); |
874 | if (!*dir) { | 485 | if (!*dir) { |
875 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
876 | "proc_mkdir() failed")); | ||
877 | return -ENODEV; | 486 | return -ENODEV; |
878 | } | 487 | } |
879 | (*dir)->owner = THIS_MODULE; | 488 | (*dir)->owner = THIS_MODULE; |
@@ -882,10 +491,7 @@ acpi_sbs_generic_add_fs(struct proc_dir_entry **dir, | |||
882 | /* 'info' [R] */ | 491 | /* 'info' [R] */ |
883 | if (info_fops) { | 492 | if (info_fops) { |
884 | entry = create_proc_entry(ACPI_SBS_FILE_INFO, S_IRUGO, *dir); | 493 | entry = create_proc_entry(ACPI_SBS_FILE_INFO, S_IRUGO, *dir); |
885 | if (!entry) { | 494 | if (entry) { |
886 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
887 | "create_proc_entry() failed")); | ||
888 | } else { | ||
889 | entry->proc_fops = info_fops; | 495 | entry->proc_fops = info_fops; |
890 | entry->data = data; | 496 | entry->data = data; |
891 | entry->owner = THIS_MODULE; | 497 | entry->owner = THIS_MODULE; |
@@ -895,10 +501,7 @@ acpi_sbs_generic_add_fs(struct proc_dir_entry **dir, | |||
895 | /* 'state' [R] */ | 501 | /* 'state' [R] */ |
896 | if (state_fops) { | 502 | if (state_fops) { |
897 | entry = create_proc_entry(ACPI_SBS_FILE_STATE, S_IRUGO, *dir); | 503 | entry = create_proc_entry(ACPI_SBS_FILE_STATE, S_IRUGO, *dir); |
898 | if (!entry) { | 504 | if (entry) { |
899 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
900 | "create_proc_entry() failed")); | ||
901 | } else { | ||
902 | entry->proc_fops = state_fops; | 505 | entry->proc_fops = state_fops; |
903 | entry->data = data; | 506 | entry->data = data; |
904 | entry->owner = THIS_MODULE; | 507 | entry->owner = THIS_MODULE; |
@@ -908,24 +511,19 @@ acpi_sbs_generic_add_fs(struct proc_dir_entry **dir, | |||
908 | /* 'alarm' [R/W] */ | 511 | /* 'alarm' [R/W] */ |
909 | if (alarm_fops) { | 512 | if (alarm_fops) { |
910 | entry = create_proc_entry(ACPI_SBS_FILE_ALARM, S_IRUGO, *dir); | 513 | entry = create_proc_entry(ACPI_SBS_FILE_ALARM, S_IRUGO, *dir); |
911 | if (!entry) { | 514 | if (entry) { |
912 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
913 | "create_proc_entry() failed")); | ||
914 | } else { | ||
915 | entry->proc_fops = alarm_fops; | 515 | entry->proc_fops = alarm_fops; |
916 | entry->data = data; | 516 | entry->data = data; |
917 | entry->owner = THIS_MODULE; | 517 | entry->owner = THIS_MODULE; |
918 | } | 518 | } |
919 | } | 519 | } |
920 | |||
921 | return 0; | 520 | return 0; |
922 | } | 521 | } |
923 | 522 | ||
924 | static void | 523 | static void |
925 | acpi_sbs_generic_remove_fs(struct proc_dir_entry **dir, | 524 | acpi_sbs_remove_fs(struct proc_dir_entry **dir, |
926 | struct proc_dir_entry *parent_dir) | 525 | struct proc_dir_entry *parent_dir) |
927 | { | 526 | { |
928 | |||
929 | if (*dir) { | 527 | if (*dir) { |
930 | remove_proc_entry(ACPI_SBS_FILE_INFO, *dir); | 528 | remove_proc_entry(ACPI_SBS_FILE_INFO, *dir); |
931 | remove_proc_entry(ACPI_SBS_FILE_STATE, *dir); | 529 | remove_proc_entry(ACPI_SBS_FILE_STATE, *dir); |
@@ -933,82 +531,52 @@ acpi_sbs_generic_remove_fs(struct proc_dir_entry **dir, | |||
933 | remove_proc_entry((*dir)->name, parent_dir); | 531 | remove_proc_entry((*dir)->name, parent_dir); |
934 | *dir = NULL; | 532 | *dir = NULL; |
935 | } | 533 | } |
936 | |||
937 | } | 534 | } |
938 | 535 | ||
939 | /* Smart Battery Interface */ | 536 | /* Smart Battery Interface */ |
940 | |||
941 | static struct proc_dir_entry *acpi_battery_dir = NULL; | 537 | static struct proc_dir_entry *acpi_battery_dir = NULL; |
942 | 538 | ||
539 | static inline char *acpi_battery_units(struct acpi_battery *battery) | ||
540 | { | ||
541 | return acpi_battery_mode(battery) ? " mWh" : " mAh"; | ||
542 | } | ||
543 | |||
544 | |||
943 | static int acpi_battery_read_info(struct seq_file *seq, void *offset) | 545 | static int acpi_battery_read_info(struct seq_file *seq, void *offset) |
944 | { | 546 | { |
945 | struct acpi_battery *battery = seq->private; | 547 | struct acpi_battery *battery = seq->private; |
946 | struct acpi_sbs *sbs = battery->sbs; | 548 | struct acpi_sbs *sbs = battery->sbs; |
947 | int cscale; | ||
948 | int result = 0; | 549 | int result = 0; |
949 | 550 | ||
950 | if (sbs_mutex_lock(sbs)) { | 551 | mutex_lock(&sbs->lock); |
951 | return -ENODEV; | ||
952 | } | ||
953 | |||
954 | result = acpi_check_update_proc(sbs); | ||
955 | if (result) | ||
956 | goto end; | ||
957 | |||
958 | if (update_time == 0) { | ||
959 | result = acpi_sbs_update_run(sbs, battery->id, DATA_TYPE_INFO); | ||
960 | if (result) { | ||
961 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
962 | "acpi_sbs_update_run() failed")); | ||
963 | } | ||
964 | } | ||
965 | 552 | ||
966 | if (battery->battery_present) { | 553 | seq_printf(seq, "present: %s\n", |
967 | seq_printf(seq, "present: yes\n"); | 554 | (battery->present) ? "yes" : "no"); |
968 | } else { | 555 | if (!battery->present) |
969 | seq_printf(seq, "present: no\n"); | ||
970 | goto end; | 556 | goto end; |
971 | } | ||
972 | 557 | ||
973 | if (battery->info.capacity_mode) { | ||
974 | cscale = battery->info.vscale * battery->info.ipscale; | ||
975 | } else { | ||
976 | cscale = battery->info.ipscale; | ||
977 | } | ||
978 | seq_printf(seq, "design capacity: %i%s\n", | 558 | seq_printf(seq, "design capacity: %i%s\n", |
979 | battery->info.design_capacity * cscale, | 559 | battery->design_capacity * acpi_battery_scale(battery), |
980 | battery->info.capacity_mode ? "0 mWh" : " mAh"); | 560 | acpi_battery_units(battery)); |
981 | |||
982 | seq_printf(seq, "last full capacity: %i%s\n", | 561 | seq_printf(seq, "last full capacity: %i%s\n", |
983 | battery->info.full_charge_capacity * cscale, | 562 | battery->full_charge_capacity * acpi_battery_scale(battery), |
984 | battery->info.capacity_mode ? "0 mWh" : " mAh"); | 563 | acpi_battery_units(battery)); |
985 | |||
986 | seq_printf(seq, "battery technology: rechargeable\n"); | 564 | seq_printf(seq, "battery technology: rechargeable\n"); |
987 | |||
988 | seq_printf(seq, "design voltage: %i mV\n", | 565 | seq_printf(seq, "design voltage: %i mV\n", |
989 | battery->info.design_voltage * battery->info.vscale); | 566 | battery->design_voltage * acpi_battery_vscale(battery)); |
990 | |||
991 | seq_printf(seq, "design capacity warning: unknown\n"); | 567 | seq_printf(seq, "design capacity warning: unknown\n"); |
992 | seq_printf(seq, "design capacity low: unknown\n"); | 568 | seq_printf(seq, "design capacity low: unknown\n"); |
993 | seq_printf(seq, "capacity granularity 1: unknown\n"); | 569 | seq_printf(seq, "capacity granularity 1: unknown\n"); |
994 | seq_printf(seq, "capacity granularity 2: unknown\n"); | 570 | seq_printf(seq, "capacity granularity 2: unknown\n"); |
995 | 571 | seq_printf(seq, "model number: %s\n", battery->device_name); | |
996 | seq_printf(seq, "model number: %s\n", | ||
997 | battery->info.device_name); | ||
998 | |||
999 | seq_printf(seq, "serial number: %i\n", | 572 | seq_printf(seq, "serial number: %i\n", |
1000 | battery->info.serial_number); | 573 | battery->serial_number); |
1001 | |||
1002 | seq_printf(seq, "battery type: %s\n", | 574 | seq_printf(seq, "battery type: %s\n", |
1003 | battery->info.device_chemistry); | 575 | battery->device_chemistry); |
1004 | |||
1005 | seq_printf(seq, "OEM info: %s\n", | 576 | seq_printf(seq, "OEM info: %s\n", |
1006 | battery->info.manufacturer_name); | 577 | battery->manufacturer_name); |
1007 | |||
1008 | end: | 578 | end: |
1009 | 579 | mutex_unlock(&sbs->lock); | |
1010 | sbs_mutex_unlock(sbs); | ||
1011 | |||
1012 | return result; | 580 | return result; |
1013 | } | 581 | } |
1014 | 582 | ||
@@ -1022,73 +590,29 @@ static int acpi_battery_read_state(struct seq_file *seq, void *offset) | |||
1022 | struct acpi_battery *battery = seq->private; | 590 | struct acpi_battery *battery = seq->private; |
1023 | struct acpi_sbs *sbs = battery->sbs; | 591 | struct acpi_sbs *sbs = battery->sbs; |
1024 | int result = 0; | 592 | int result = 0; |
1025 | int cscale; | ||
1026 | int foo; | ||
1027 | |||
1028 | if (sbs_mutex_lock(sbs)) { | ||
1029 | return -ENODEV; | ||
1030 | } | ||
1031 | 593 | ||
1032 | result = acpi_check_update_proc(sbs); | 594 | mutex_lock(&sbs->lock); |
1033 | if (result) | 595 | seq_printf(seq, "present: %s\n", |
596 | (battery->present) ? "yes" : "no"); | ||
597 | if (!battery->present) | ||
1034 | goto end; | 598 | goto end; |
1035 | 599 | ||
1036 | if (update_time == 0) { | 600 | acpi_battery_get_state(battery); |
1037 | result = acpi_sbs_update_run(sbs, battery->id, DATA_TYPE_STATE); | 601 | seq_printf(seq, "capacity state: %s\n", |
1038 | if (result) { | 602 | (battery->state & 0x0010) ? "critical" : "ok"); |
1039 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 603 | seq_printf(seq, "charging state: %s\n", |
1040 | "acpi_sbs_update_run() failed")); | 604 | (battery->current_now < 0) ? "discharging" : |
1041 | } | 605 | ((battery->current_now > 0) ? "charging" : "charged")); |
1042 | } | 606 | seq_printf(seq, "present rate: %d mA\n", |
1043 | 607 | abs(battery->current_now) * acpi_battery_ipscale(battery)); | |
1044 | if (battery->battery_present) { | ||
1045 | seq_printf(seq, "present: yes\n"); | ||
1046 | } else { | ||
1047 | seq_printf(seq, "present: no\n"); | ||
1048 | goto end; | ||
1049 | } | ||
1050 | |||
1051 | if (battery->info.capacity_mode) { | ||
1052 | cscale = battery->info.vscale * battery->info.ipscale; | ||
1053 | } else { | ||
1054 | cscale = battery->info.ipscale; | ||
1055 | } | ||
1056 | |||
1057 | if (battery->state.battery_state & 0x0010) { | ||
1058 | seq_printf(seq, "capacity state: critical\n"); | ||
1059 | } else { | ||
1060 | seq_printf(seq, "capacity state: ok\n"); | ||
1061 | } | ||
1062 | |||
1063 | foo = (s16) battery->state.amperage * battery->info.ipscale; | ||
1064 | if (battery->info.capacity_mode) { | ||
1065 | foo = foo * battery->info.design_voltage / 1000; | ||
1066 | } | ||
1067 | if (battery->state.amperage < 0) { | ||
1068 | seq_printf(seq, "charging state: discharging\n"); | ||
1069 | seq_printf(seq, "present rate: %d %s\n", | ||
1070 | -foo, battery->info.capacity_mode ? "mW" : "mA"); | ||
1071 | } else if (battery->state.amperage > 0) { | ||
1072 | seq_printf(seq, "charging state: charging\n"); | ||
1073 | seq_printf(seq, "present rate: %d %s\n", | ||
1074 | foo, battery->info.capacity_mode ? "mW" : "mA"); | ||
1075 | } else { | ||
1076 | seq_printf(seq, "charging state: charged\n"); | ||
1077 | seq_printf(seq, "present rate: 0 %s\n", | ||
1078 | battery->info.capacity_mode ? "mW" : "mA"); | ||
1079 | } | ||
1080 | |||
1081 | seq_printf(seq, "remaining capacity: %i%s\n", | 608 | seq_printf(seq, "remaining capacity: %i%s\n", |
1082 | battery->state.remaining_capacity * cscale, | 609 | battery->capacity_now * acpi_battery_scale(battery), |
1083 | battery->info.capacity_mode ? "0 mWh" : " mAh"); | 610 | acpi_battery_units(battery)); |
1084 | |||
1085 | seq_printf(seq, "present voltage: %i mV\n", | 611 | seq_printf(seq, "present voltage: %i mV\n", |
1086 | battery->state.voltage * battery->info.vscale); | 612 | battery->voltage_now * acpi_battery_vscale(battery)); |
1087 | 613 | ||
1088 | end: | 614 | end: |
1089 | 615 | mutex_unlock(&sbs->lock); | |
1090 | sbs_mutex_unlock(sbs); | ||
1091 | |||
1092 | return result; | 616 | return result; |
1093 | } | 617 | } |
1094 | 618 | ||
@@ -1102,48 +626,25 @@ static int acpi_battery_read_alarm(struct seq_file *seq, void *offset) | |||
1102 | struct acpi_battery *battery = seq->private; | 626 | struct acpi_battery *battery = seq->private; |
1103 | struct acpi_sbs *sbs = battery->sbs; | 627 | struct acpi_sbs *sbs = battery->sbs; |
1104 | int result = 0; | 628 | int result = 0; |
1105 | int cscale; | ||
1106 | |||
1107 | if (sbs_mutex_lock(sbs)) { | ||
1108 | return -ENODEV; | ||
1109 | } | ||
1110 | |||
1111 | result = acpi_check_update_proc(sbs); | ||
1112 | if (result) | ||
1113 | goto end; | ||
1114 | 629 | ||
1115 | if (update_time == 0) { | 630 | mutex_lock(&sbs->lock); |
1116 | result = acpi_sbs_update_run(sbs, battery->id, DATA_TYPE_ALARM); | ||
1117 | if (result) { | ||
1118 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1119 | "acpi_sbs_update_run() failed")); | ||
1120 | } | ||
1121 | } | ||
1122 | 631 | ||
1123 | if (!battery->battery_present) { | 632 | if (!battery->present) { |
1124 | seq_printf(seq, "present: no\n"); | 633 | seq_printf(seq, "present: no\n"); |
1125 | goto end; | 634 | goto end; |
1126 | } | 635 | } |
1127 | 636 | ||
1128 | if (battery->info.capacity_mode) { | 637 | acpi_battery_get_alarm(battery); |
1129 | cscale = battery->info.vscale * battery->info.ipscale; | ||
1130 | } else { | ||
1131 | cscale = battery->info.ipscale; | ||
1132 | } | ||
1133 | |||
1134 | seq_printf(seq, "alarm: "); | 638 | seq_printf(seq, "alarm: "); |
1135 | if (battery->alarm.remaining_capacity) { | 639 | if (battery->alarm_capacity) |
1136 | seq_printf(seq, "%i%s\n", | 640 | seq_printf(seq, "%i%s\n", |
1137 | battery->alarm.remaining_capacity * cscale, | 641 | battery->alarm_capacity * |
1138 | battery->info.capacity_mode ? "0 mWh" : " mAh"); | 642 | acpi_battery_scale(battery), |
1139 | } else { | 643 | acpi_battery_units(battery)); |
644 | else | ||
1140 | seq_printf(seq, "disabled\n"); | 645 | seq_printf(seq, "disabled\n"); |
1141 | } | ||
1142 | |||
1143 | end: | 646 | end: |
1144 | 647 | mutex_unlock(&sbs->lock); | |
1145 | sbs_mutex_unlock(sbs); | ||
1146 | |||
1147 | return result; | 648 | return result; |
1148 | } | 649 | } |
1149 | 650 | ||
@@ -1155,59 +656,29 @@ acpi_battery_write_alarm(struct file *file, const char __user * buffer, | |||
1155 | struct acpi_battery *battery = seq->private; | 656 | struct acpi_battery *battery = seq->private; |
1156 | struct acpi_sbs *sbs = battery->sbs; | 657 | struct acpi_sbs *sbs = battery->sbs; |
1157 | char alarm_string[12] = { '\0' }; | 658 | char alarm_string[12] = { '\0' }; |
1158 | int result, old_alarm, new_alarm; | 659 | int result = 0; |
1159 | 660 | mutex_lock(&sbs->lock); | |
1160 | if (sbs_mutex_lock(sbs)) { | 661 | if (!battery->present) { |
1161 | return -ENODEV; | ||
1162 | } | ||
1163 | |||
1164 | result = acpi_check_update_proc(sbs); | ||
1165 | if (result) | ||
1166 | goto end; | ||
1167 | |||
1168 | if (!battery->battery_present) { | ||
1169 | result = -ENODEV; | 662 | result = -ENODEV; |
1170 | goto end; | 663 | goto end; |
1171 | } | 664 | } |
1172 | |||
1173 | if (count > sizeof(alarm_string) - 1) { | 665 | if (count > sizeof(alarm_string) - 1) { |
1174 | result = -EINVAL; | 666 | result = -EINVAL; |
1175 | goto end; | 667 | goto end; |
1176 | } | 668 | } |
1177 | |||
1178 | if (copy_from_user(alarm_string, buffer, count)) { | 669 | if (copy_from_user(alarm_string, buffer, count)) { |
1179 | result = -EFAULT; | 670 | result = -EFAULT; |
1180 | goto end; | 671 | goto end; |
1181 | } | 672 | } |
1182 | |||
1183 | alarm_string[count] = 0; | 673 | alarm_string[count] = 0; |
1184 | 674 | battery->alarm_capacity = simple_strtoul(alarm_string, NULL, 0) / | |
1185 | old_alarm = battery->alarm.remaining_capacity; | 675 | acpi_battery_scale(battery); |
1186 | new_alarm = simple_strtoul(alarm_string, NULL, 0); | 676 | acpi_battery_set_alarm(battery); |
1187 | |||
1188 | result = acpi_battery_set_alarm(battery, new_alarm); | ||
1189 | if (result) { | ||
1190 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1191 | "acpi_battery_set_alarm() failed")); | ||
1192 | acpi_battery_set_alarm(battery, old_alarm); | ||
1193 | goto end; | ||
1194 | } | ||
1195 | result = acpi_battery_get_alarm(battery); | ||
1196 | if (result) { | ||
1197 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1198 | "acpi_battery_get_alarm() failed")); | ||
1199 | acpi_battery_set_alarm(battery, old_alarm); | ||
1200 | goto end; | ||
1201 | } | ||
1202 | |||
1203 | end: | 677 | end: |
1204 | sbs_mutex_unlock(sbs); | 678 | mutex_unlock(&sbs->lock); |
1205 | 679 | if (result) | |
1206 | if (result) { | ||
1207 | return result; | 680 | return result; |
1208 | } else { | 681 | return count; |
1209 | return count; | ||
1210 | } | ||
1211 | } | 682 | } |
1212 | 683 | ||
1213 | static int acpi_battery_alarm_open_fs(struct inode *inode, struct file *file) | 684 | static int acpi_battery_alarm_open_fs(struct inode *inode, struct file *file) |
@@ -1246,26 +717,15 @@ static struct proc_dir_entry *acpi_ac_dir = NULL; | |||
1246 | 717 | ||
1247 | static int acpi_ac_read_state(struct seq_file *seq, void *offset) | 718 | static int acpi_ac_read_state(struct seq_file *seq, void *offset) |
1248 | { | 719 | { |
1249 | struct acpi_sbs *sbs = seq->private; | ||
1250 | int result; | ||
1251 | 720 | ||
1252 | if (sbs_mutex_lock(sbs)) { | 721 | struct acpi_sbs *sbs = seq->private; |
1253 | return -ENODEV; | ||
1254 | } | ||
1255 | 722 | ||
1256 | if (update_time == 0) { | 723 | mutex_lock(&sbs->lock); |
1257 | result = acpi_sbs_update_run(sbs, -1, DATA_TYPE_AC_STATE); | ||
1258 | if (result) { | ||
1259 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1260 | "acpi_sbs_update_run() failed")); | ||
1261 | } | ||
1262 | } | ||
1263 | 724 | ||
1264 | seq_printf(seq, "state: %s\n", | 725 | seq_printf(seq, "state: %s\n", |
1265 | sbs->ac.ac_present ? "on-line" : "off-line"); | 726 | sbs->charger_present ? "on-line" : "off-line"); |
1266 | |||
1267 | sbs_mutex_unlock(sbs); | ||
1268 | 727 | ||
728 | mutex_unlock(&sbs->lock); | ||
1269 | return 0; | 729 | return 0; |
1270 | } | 730 | } |
1271 | 731 | ||
@@ -1282,429 +742,203 @@ static struct file_operations acpi_ac_state_fops = { | |||
1282 | .owner = THIS_MODULE, | 742 | .owner = THIS_MODULE, |
1283 | }; | 743 | }; |
1284 | 744 | ||
745 | #endif | ||
746 | |||
1285 | /* -------------------------------------------------------------------------- | 747 | /* -------------------------------------------------------------------------- |
1286 | Driver Interface | 748 | Driver Interface |
1287 | -------------------------------------------------------------------------- */ | 749 | -------------------------------------------------------------------------- */ |
750 | static int acpi_battery_read(struct acpi_battery *battery) | ||
751 | { | ||
752 | int result = 0, saved_present = battery->present; | ||
753 | u16 state; | ||
754 | |||
755 | if (battery->sbs->manager_present) { | ||
756 | result = acpi_smbus_read(battery->sbs->hc, SMBUS_READ_WORD, | ||
757 | ACPI_SBS_MANAGER, 0x01, (u8 *)&state); | ||
758 | if (!result) | ||
759 | battery->present = state & (1 << battery->id); | ||
760 | state &= 0x0fff; | ||
761 | state |= 1 << (battery->id + 12); | ||
762 | acpi_smbus_write(battery->sbs->hc, SMBUS_WRITE_WORD, | ||
763 | ACPI_SBS_MANAGER, 0x01, (u8 *)&state, 2); | ||
764 | } else if (battery->id == 0) | ||
765 | battery->present = 1; | ||
766 | if (result || !battery->present) | ||
767 | return result; | ||
1288 | 768 | ||
1289 | /* Smart Battery */ | 769 | if (saved_present != battery->present) { |
770 | battery->update_time = 0; | ||
771 | result = acpi_battery_get_info(battery); | ||
772 | if (result) | ||
773 | return result; | ||
774 | } | ||
775 | result = acpi_battery_get_state(battery); | ||
776 | return result; | ||
777 | } | ||
1290 | 778 | ||
779 | /* Smart Battery */ | ||
1291 | static int acpi_battery_add(struct acpi_sbs *sbs, int id) | 780 | static int acpi_battery_add(struct acpi_sbs *sbs, int id) |
1292 | { | 781 | { |
1293 | int is_present; | 782 | struct acpi_battery *battery = &sbs->battery[id]; |
1294 | int result; | 783 | int result; |
1295 | char dir_name[32]; | ||
1296 | struct acpi_battery *battery; | ||
1297 | |||
1298 | battery = &sbs->battery[id]; | ||
1299 | |||
1300 | battery->alive = 0; | ||
1301 | 784 | ||
1302 | battery->init_state = 0; | ||
1303 | battery->id = id; | 785 | battery->id = id; |
1304 | battery->sbs = sbs; | 786 | battery->sbs = sbs; |
787 | result = acpi_battery_read(battery); | ||
788 | if (result) | ||
789 | return result; | ||
1305 | 790 | ||
1306 | result = acpi_battery_select(battery); | 791 | sprintf(battery->name, ACPI_BATTERY_DIR_NAME, id); |
1307 | if (result) { | 792 | #ifdef CONFIG_ACPI_PROCFS |
1308 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 793 | acpi_sbs_add_fs(&battery->proc_entry, acpi_battery_dir, |
1309 | "acpi_battery_select() failed")); | 794 | battery->name, &acpi_battery_info_fops, |
1310 | goto end; | 795 | &acpi_battery_state_fops, &acpi_battery_alarm_fops, |
1311 | } | 796 | battery); |
1312 | 797 | #endif | |
1313 | result = acpi_battery_get_present(battery); | 798 | battery->bat.name = battery->name; |
1314 | if (result) { | 799 | battery->bat.type = POWER_SUPPLY_TYPE_BATTERY; |
1315 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | 800 | if (!acpi_battery_mode(battery)) { |
1316 | "acpi_battery_get_present() failed")); | 801 | battery->bat.properties = sbs_charge_battery_props; |
1317 | goto end; | 802 | battery->bat.num_properties = |
1318 | } | 803 | ARRAY_SIZE(sbs_charge_battery_props); |
1319 | 804 | } else { | |
1320 | is_present = battery->battery_present; | 805 | battery->bat.properties = sbs_energy_battery_props; |
1321 | 806 | battery->bat.num_properties = | |
1322 | if (is_present) { | 807 | ARRAY_SIZE(sbs_energy_battery_props); |
1323 | result = acpi_battery_init(battery); | ||
1324 | if (result) { | ||
1325 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1326 | "acpi_battery_init() failed")); | ||
1327 | goto end; | ||
1328 | } | ||
1329 | battery->init_state = 1; | ||
1330 | } | ||
1331 | |||
1332 | sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id); | ||
1333 | |||
1334 | result = acpi_sbs_generic_add_fs(&battery->battery_entry, | ||
1335 | acpi_battery_dir, | ||
1336 | dir_name, | ||
1337 | &acpi_battery_info_fops, | ||
1338 | &acpi_battery_state_fops, | ||
1339 | &acpi_battery_alarm_fops, battery); | ||
1340 | if (result) { | ||
1341 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1342 | "acpi_sbs_generic_add_fs() failed")); | ||
1343 | goto end; | ||
1344 | } | 808 | } |
1345 | battery->alive = 1; | 809 | battery->bat.get_property = acpi_sbs_battery_get_property; |
1346 | 810 | result = power_supply_register(&sbs->device->dev, &battery->bat); | |
811 | device_create_file(battery->bat.dev, &alarm_attr); | ||
1347 | printk(KERN_INFO PREFIX "%s [%s]: Battery Slot [%s] (battery %s)\n", | 812 | printk(KERN_INFO PREFIX "%s [%s]: Battery Slot [%s] (battery %s)\n", |
1348 | ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), dir_name, | 813 | ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), |
1349 | sbs->battery->battery_present ? "present" : "absent"); | 814 | battery->name, sbs->battery->present ? "present" : "absent"); |
1350 | |||
1351 | end: | ||
1352 | return result; | 815 | return result; |
1353 | } | 816 | } |
1354 | 817 | ||
1355 | static void acpi_battery_remove(struct acpi_sbs *sbs, int id) | 818 | static void acpi_battery_remove(struct acpi_sbs *sbs, int id) |
1356 | { | 819 | { |
1357 | 820 | if (sbs->battery[id].bat.dev) | |
1358 | if (sbs->battery[id].battery_entry) { | 821 | device_remove_file(sbs->battery[id].bat.dev, &alarm_attr); |
1359 | acpi_sbs_generic_remove_fs(&(sbs->battery[id].battery_entry), | 822 | power_supply_unregister(&sbs->battery[id].bat); |
1360 | acpi_battery_dir); | 823 | #ifdef CONFIG_ACPI_PROCFS |
1361 | } | 824 | if (sbs->battery[id].proc_entry) { |
825 | acpi_sbs_remove_fs(&(sbs->battery[id].proc_entry), | ||
826 | acpi_battery_dir); | ||
827 | } | ||
828 | #endif | ||
1362 | } | 829 | } |
1363 | 830 | ||
1364 | static int acpi_ac_add(struct acpi_sbs *sbs) | 831 | static int acpi_charger_add(struct acpi_sbs *sbs) |
1365 | { | 832 | { |
1366 | int result; | 833 | int result; |
1367 | 834 | ||
1368 | result = acpi_ac_get_present(sbs); | 835 | result = acpi_ac_get_present(sbs); |
1369 | if (result) { | 836 | if (result) |
1370 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1371 | "acpi_ac_get_present() failed")); | ||
1372 | goto end; | 837 | goto end; |
1373 | } | 838 | #ifdef CONFIG_ACPI_PROCFS |
1374 | 839 | result = acpi_sbs_add_fs(&sbs->charger_entry, acpi_ac_dir, | |
1375 | result = acpi_sbs_generic_add_fs(&sbs->ac_entry, | 840 | ACPI_AC_DIR_NAME, NULL, |
1376 | acpi_ac_dir, | 841 | &acpi_ac_state_fops, NULL, sbs); |
1377 | ACPI_AC_DIR_NAME, | 842 | if (result) |
1378 | NULL, &acpi_ac_state_fops, NULL, sbs); | ||
1379 | if (result) { | ||
1380 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1381 | "acpi_sbs_generic_add_fs() failed")); | ||
1382 | goto end; | 843 | goto end; |
1383 | } | 844 | #endif |
1384 | 845 | sbs->charger.name = "sbs-charger"; | |
846 | sbs->charger.type = POWER_SUPPLY_TYPE_MAINS; | ||
847 | sbs->charger.properties = sbs_ac_props; | ||
848 | sbs->charger.num_properties = ARRAY_SIZE(sbs_ac_props); | ||
849 | sbs->charger.get_property = sbs_get_ac_property; | ||
850 | power_supply_register(&sbs->device->dev, &sbs->charger); | ||
1385 | printk(KERN_INFO PREFIX "%s [%s]: AC Adapter [%s] (%s)\n", | 851 | printk(KERN_INFO PREFIX "%s [%s]: AC Adapter [%s] (%s)\n", |
1386 | ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), | 852 | ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), |
1387 | ACPI_AC_DIR_NAME, sbs->ac.ac_present ? "on-line" : "off-line"); | 853 | ACPI_AC_DIR_NAME, sbs->charger_present ? "on-line" : "off-line"); |
1388 | |||
1389 | end: | 854 | end: |
1390 | |||
1391 | return result; | 855 | return result; |
1392 | } | 856 | } |
1393 | 857 | ||
1394 | static void acpi_ac_remove(struct acpi_sbs *sbs) | 858 | static void acpi_charger_remove(struct acpi_sbs *sbs) |
1395 | { | 859 | { |
1396 | 860 | if (sbs->charger.dev) | |
1397 | if (sbs->ac_entry) { | 861 | power_supply_unregister(&sbs->charger); |
1398 | acpi_sbs_generic_remove_fs(&sbs->ac_entry, acpi_ac_dir); | 862 | #ifdef CONFIG_ACPI_PROCFS |
1399 | } | 863 | if (sbs->charger_entry) |
864 | acpi_sbs_remove_fs(&sbs->charger_entry, acpi_ac_dir); | ||
865 | #endif | ||
1400 | } | 866 | } |
1401 | 867 | ||
1402 | static void acpi_sbs_update_time_run(unsigned long data) | 868 | void acpi_sbs_callback(void *context) |
1403 | { | 869 | { |
1404 | acpi_os_execute(OSL_GPE_HANDLER, acpi_sbs_update_time, (void *)data); | 870 | int id; |
1405 | } | 871 | struct acpi_sbs *sbs = context; |
1406 | 872 | struct acpi_battery *bat; | |
1407 | static int acpi_sbs_update_run(struct acpi_sbs *sbs, int id, int data_type) | 873 | u8 saved_charger_state = sbs->charger_present; |
1408 | { | 874 | u8 saved_battery_state; |
1409 | struct acpi_battery *battery; | 875 | acpi_ac_get_present(sbs); |
1410 | int result = 0, cnt; | 876 | if (sbs->charger_present != saved_charger_state) { |
1411 | int old_ac_present = -1; | 877 | #ifdef CONFIG_ACPI_PROC_EVENT |
1412 | int old_battery_present = -1; | 878 | acpi_bus_generate_proc_event4(ACPI_AC_CLASS, ACPI_AC_DIR_NAME, |
1413 | int new_ac_present = -1; | 879 | ACPI_SBS_NOTIFY_STATUS, |
1414 | int new_battery_present = -1; | 880 | sbs->charger_present); |
1415 | int id_min = 0, id_max = MAX_SBS_BAT - 1; | 881 | #endif |
1416 | char dir_name[32]; | 882 | kobject_uevent(&sbs->charger.dev->kobj, KOBJ_CHANGE); |
1417 | int do_battery_init = 0, do_ac_init = 0; | 883 | } |
1418 | int old_remaining_capacity = 0; | 884 | if (sbs->manager_present) { |
1419 | int update_battery = 1; | 885 | for (id = 0; id < MAX_SBS_BAT; ++id) { |
1420 | int up_tm = update_time; | 886 | if (!(sbs->batteries_supported & (1 << id))) |
1421 | 887 | continue; | |
1422 | if (sbs_zombie(sbs)) { | 888 | bat = &sbs->battery[id]; |
1423 | goto end; | 889 | saved_battery_state = bat->present; |
1424 | } | 890 | acpi_battery_read(bat); |
1425 | 891 | if (saved_battery_state == bat->present) | |
1426 | if (id >= 0) { | 892 | continue; |
1427 | id_min = id_max = id; | 893 | #ifdef CONFIG_ACPI_PROC_EVENT |
1428 | } | 894 | acpi_bus_generate_proc_event4(ACPI_BATTERY_CLASS, |
1429 | 895 | bat->name, | |
1430 | if (data_type == DATA_TYPE_COMMON && up_tm > 0) { | 896 | ACPI_SBS_NOTIFY_STATUS, |
1431 | cnt = up_tm / (up_tm > UPDATE_DELAY ? UPDATE_DELAY : up_tm); | 897 | bat->present); |
1432 | if (sbs->run_cnt % cnt != 0) { | 898 | #endif |
1433 | update_battery = 0; | 899 | kobject_uevent(&bat->bat.dev->kobj, KOBJ_CHANGE); |
1434 | } | ||
1435 | } | ||
1436 | |||
1437 | sbs->run_cnt++; | ||
1438 | |||
1439 | old_ac_present = sbs->ac.ac_present; | ||
1440 | |||
1441 | result = acpi_ac_get_present(sbs); | ||
1442 | if (result) { | ||
1443 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1444 | "acpi_ac_get_present() failed")); | ||
1445 | } | ||
1446 | |||
1447 | new_ac_present = sbs->ac.ac_present; | ||
1448 | |||
1449 | do_ac_init = (old_ac_present != new_ac_present); | ||
1450 | if (sbs->run_cnt == 1 && data_type == DATA_TYPE_COMMON) { | ||
1451 | do_ac_init = 1; | ||
1452 | } | ||
1453 | |||
1454 | if (do_ac_init) { | ||
1455 | result = acpi_sbs_generate_event(sbs->device, | ||
1456 | ACPI_SBS_AC_NOTIFY_STATUS, | ||
1457 | new_ac_present, | ||
1458 | ACPI_AC_DIR_NAME, | ||
1459 | ACPI_AC_CLASS); | ||
1460 | if (result) { | ||
1461 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1462 | "acpi_sbs_generate_event() failed")); | ||
1463 | } | ||
1464 | } | ||
1465 | |||
1466 | if (data_type == DATA_TYPE_COMMON) { | ||
1467 | if (!do_ac_init && !update_battery) { | ||
1468 | goto end; | ||
1469 | } | ||
1470 | } | ||
1471 | |||
1472 | if (data_type == DATA_TYPE_AC_STATE && !do_ac_init) { | ||
1473 | goto end; | ||
1474 | } | ||
1475 | |||
1476 | for (id = id_min; id <= id_max; id++) { | ||
1477 | battery = &sbs->battery[id]; | ||
1478 | if (battery->alive == 0) { | ||
1479 | continue; | ||
1480 | } | ||
1481 | |||
1482 | old_remaining_capacity = battery->state.remaining_capacity; | ||
1483 | |||
1484 | old_battery_present = battery->battery_present; | ||
1485 | |||
1486 | result = acpi_battery_select(battery); | ||
1487 | if (result) { | ||
1488 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1489 | "acpi_battery_select() failed")); | ||
1490 | } | ||
1491 | |||
1492 | result = acpi_battery_get_present(battery); | ||
1493 | if (result) { | ||
1494 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1495 | "acpi_battery_get_present() failed")); | ||
1496 | } | ||
1497 | |||
1498 | new_battery_present = battery->battery_present; | ||
1499 | |||
1500 | do_battery_init = ((old_battery_present != new_battery_present) | ||
1501 | && new_battery_present); | ||
1502 | if (!new_battery_present) | ||
1503 | goto event; | ||
1504 | if (do_ac_init || do_battery_init) { | ||
1505 | result = acpi_battery_init(battery); | ||
1506 | if (result) { | ||
1507 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1508 | "acpi_battery_init() " | ||
1509 | "failed")); | ||
1510 | } | ||
1511 | } | ||
1512 | if (sbs_zombie(sbs)) { | ||
1513 | goto end; | ||
1514 | } | ||
1515 | |||
1516 | if ((data_type == DATA_TYPE_COMMON | ||
1517 | || data_type == DATA_TYPE_INFO) | ||
1518 | && new_battery_present) { | ||
1519 | result = acpi_battery_get_info(battery); | ||
1520 | if (result) { | ||
1521 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1522 | "acpi_battery_get_info() failed")); | ||
1523 | } | ||
1524 | } | ||
1525 | if (data_type == DATA_TYPE_INFO) { | ||
1526 | continue; | ||
1527 | } | ||
1528 | if (sbs_zombie(sbs)) { | ||
1529 | goto end; | ||
1530 | } | ||
1531 | |||
1532 | if ((data_type == DATA_TYPE_COMMON | ||
1533 | || data_type == DATA_TYPE_STATE) | ||
1534 | && new_battery_present) { | ||
1535 | result = acpi_battery_get_state(battery); | ||
1536 | if (result) { | ||
1537 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1538 | "acpi_battery_get_state() failed")); | ||
1539 | } | ||
1540 | } | ||
1541 | if (data_type == DATA_TYPE_STATE) { | ||
1542 | goto event; | ||
1543 | } | ||
1544 | if (sbs_zombie(sbs)) { | ||
1545 | goto end; | ||
1546 | } | ||
1547 | |||
1548 | if ((data_type == DATA_TYPE_COMMON | ||
1549 | || data_type == DATA_TYPE_ALARM) | ||
1550 | && new_battery_present) { | ||
1551 | result = acpi_battery_get_alarm(battery); | ||
1552 | if (result) { | ||
1553 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1554 | "acpi_battery_get_alarm() " | ||
1555 | "failed")); | ||
1556 | } | ||
1557 | } | ||
1558 | if (data_type == DATA_TYPE_ALARM) { | ||
1559 | continue; | ||
1560 | } | ||
1561 | if (sbs_zombie(sbs)) { | ||
1562 | goto end; | ||
1563 | } | ||
1564 | |||
1565 | event: | ||
1566 | |||
1567 | if (old_battery_present != new_battery_present || do_ac_init || | ||
1568 | old_remaining_capacity != | ||
1569 | battery->state.remaining_capacity) { | ||
1570 | sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id); | ||
1571 | result = acpi_sbs_generate_event(sbs->device, | ||
1572 | ACPI_SBS_BATTERY_NOTIFY_STATUS, | ||
1573 | new_battery_present, | ||
1574 | dir_name, | ||
1575 | ACPI_BATTERY_CLASS); | ||
1576 | if (result) { | ||
1577 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1578 | "acpi_sbs_generate_event() " | ||
1579 | "failed")); | ||
1580 | } | ||
1581 | } | 900 | } |
1582 | } | 901 | } |
1583 | |||
1584 | end: | ||
1585 | |||
1586 | return result; | ||
1587 | } | 902 | } |
1588 | 903 | ||
1589 | static void acpi_sbs_update_time(void *data) | 904 | static int acpi_sbs_remove(struct acpi_device *device, int type); |
1590 | { | ||
1591 | struct acpi_sbs *sbs = data; | ||
1592 | unsigned long delay = -1; | ||
1593 | int result; | ||
1594 | unsigned int up_tm = update_time; | ||
1595 | |||
1596 | if (sbs_mutex_lock(sbs)) | ||
1597 | return; | ||
1598 | |||
1599 | result = acpi_sbs_update_run(sbs, -1, DATA_TYPE_COMMON); | ||
1600 | if (result) { | ||
1601 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1602 | "acpi_sbs_update_run() failed")); | ||
1603 | } | ||
1604 | |||
1605 | if (sbs_zombie(sbs)) { | ||
1606 | goto end; | ||
1607 | } | ||
1608 | |||
1609 | if (!up_tm) { | ||
1610 | if (timer_pending(&sbs->update_timer)) | ||
1611 | del_timer(&sbs->update_timer); | ||
1612 | } else { | ||
1613 | delay = (up_tm > UPDATE_DELAY ? UPDATE_DELAY : up_tm); | ||
1614 | delay = jiffies + HZ * delay; | ||
1615 | if (timer_pending(&sbs->update_timer)) { | ||
1616 | mod_timer(&sbs->update_timer, delay); | ||
1617 | } else { | ||
1618 | sbs->update_timer.data = (unsigned long)data; | ||
1619 | sbs->update_timer.function = acpi_sbs_update_time_run; | ||
1620 | sbs->update_timer.expires = delay; | ||
1621 | add_timer(&sbs->update_timer); | ||
1622 | } | ||
1623 | } | ||
1624 | |||
1625 | end: | ||
1626 | |||
1627 | sbs_mutex_unlock(sbs); | ||
1628 | } | ||
1629 | 905 | ||
1630 | static int acpi_sbs_add(struct acpi_device *device) | 906 | static int acpi_sbs_add(struct acpi_device *device) |
1631 | { | 907 | { |
1632 | struct acpi_sbs *sbs = NULL; | 908 | struct acpi_sbs *sbs; |
1633 | int result = 0, remove_result = 0; | 909 | int result = 0; |
1634 | int id; | 910 | int id; |
1635 | acpi_status status = AE_OK; | ||
1636 | unsigned long val; | ||
1637 | |||
1638 | status = | ||
1639 | acpi_evaluate_integer(device->handle, "_EC", NULL, &val); | ||
1640 | if (ACPI_FAILURE(status)) { | ||
1641 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, "Error obtaining _EC")); | ||
1642 | return -EIO; | ||
1643 | } | ||
1644 | 911 | ||
1645 | sbs = kzalloc(sizeof(struct acpi_sbs), GFP_KERNEL); | 912 | sbs = kzalloc(sizeof(struct acpi_sbs), GFP_KERNEL); |
1646 | if (!sbs) { | 913 | if (!sbs) { |
1647 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, "kzalloc() failed")); | ||
1648 | result = -ENOMEM; | 914 | result = -ENOMEM; |
1649 | goto end; | 915 | goto end; |
1650 | } | 916 | } |
1651 | 917 | ||
1652 | mutex_init(&sbs->mutex); | 918 | mutex_init(&sbs->lock); |
1653 | |||
1654 | sbs_mutex_lock(sbs); | ||
1655 | 919 | ||
1656 | sbs->base = 0xff & (val >> 8); | 920 | sbs->hc = acpi_driver_data(device->parent); |
1657 | sbs->device = device; | 921 | sbs->device = device; |
1658 | |||
1659 | strcpy(acpi_device_name(device), ACPI_SBS_DEVICE_NAME); | 922 | strcpy(acpi_device_name(device), ACPI_SBS_DEVICE_NAME); |
1660 | strcpy(acpi_device_class(device), ACPI_SBS_CLASS); | 923 | strcpy(acpi_device_class(device), ACPI_SBS_CLASS); |
1661 | acpi_driver_data(device) = sbs; | 924 | acpi_driver_data(device) = sbs; |
1662 | 925 | ||
1663 | result = acpi_ac_add(sbs); | 926 | result = acpi_charger_add(sbs); |
1664 | if (result) { | ||
1665 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, "acpi_ac_add() failed")); | ||
1666 | goto end; | ||
1667 | } | ||
1668 | |||
1669 | acpi_sbsm_get_info(sbs); | ||
1670 | |||
1671 | if (!sbs->sbsm_present) { | ||
1672 | result = acpi_battery_add(sbs, 0); | ||
1673 | if (result) { | ||
1674 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1675 | "acpi_battery_add() failed")); | ||
1676 | goto end; | ||
1677 | } | ||
1678 | } else { | ||
1679 | for (id = 0; id < MAX_SBS_BAT; id++) { | ||
1680 | if ((sbs->sbsm_batteries_supported & (1 << id))) { | ||
1681 | result = acpi_battery_add(sbs, id); | ||
1682 | if (result) { | ||
1683 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1684 | "acpi_battery_add() failed")); | ||
1685 | goto end; | ||
1686 | } | ||
1687 | } | ||
1688 | } | ||
1689 | } | ||
1690 | |||
1691 | init_timer(&sbs->update_timer); | ||
1692 | result = acpi_check_update_proc(sbs); | ||
1693 | if (result) | 927 | if (result) |
1694 | goto end; | 928 | goto end; |
1695 | 929 | ||
930 | result = acpi_manager_get_info(sbs); | ||
931 | if (!result) { | ||
932 | sbs->manager_present = 1; | ||
933 | for (id = 0; id < MAX_SBS_BAT; ++id) | ||
934 | if ((sbs->batteries_supported & (1 << id))) | ||
935 | acpi_battery_add(sbs, id); | ||
936 | } else | ||
937 | acpi_battery_add(sbs, 0); | ||
938 | acpi_smbus_register_callback(sbs->hc, acpi_sbs_callback, sbs); | ||
1696 | end: | 939 | end: |
1697 | 940 | if (result) | |
1698 | sbs_mutex_unlock(sbs); | 941 | acpi_sbs_remove(device, 0); |
1699 | |||
1700 | if (result) { | ||
1701 | remove_result = acpi_sbs_remove(device, 0); | ||
1702 | if (remove_result) { | ||
1703 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1704 | "acpi_sbs_remove() failed")); | ||
1705 | } | ||
1706 | } | ||
1707 | |||
1708 | return result; | 942 | return result; |
1709 | } | 943 | } |
1710 | 944 | ||
@@ -1713,39 +947,25 @@ static int acpi_sbs_remove(struct acpi_device *device, int type) | |||
1713 | struct acpi_sbs *sbs; | 947 | struct acpi_sbs *sbs; |
1714 | int id; | 948 | int id; |
1715 | 949 | ||
1716 | if (!device) { | 950 | if (!device) |
1717 | return -EINVAL; | 951 | return -EINVAL; |
1718 | } | ||
1719 | |||
1720 | sbs = acpi_driver_data(device); | 952 | sbs = acpi_driver_data(device); |
1721 | if (!sbs) { | 953 | if (!sbs) |
1722 | return -EINVAL; | 954 | return -EINVAL; |
1723 | } | 955 | mutex_lock(&sbs->lock); |
1724 | 956 | acpi_smbus_unregister_callback(sbs->hc); | |
1725 | sbs_mutex_lock(sbs); | 957 | for (id = 0; id < MAX_SBS_BAT; ++id) |
1726 | |||
1727 | sbs->zombie = 1; | ||
1728 | del_timer_sync(&sbs->update_timer); | ||
1729 | acpi_os_wait_events_complete(NULL); | ||
1730 | del_timer_sync(&sbs->update_timer); | ||
1731 | |||
1732 | for (id = 0; id < MAX_SBS_BAT; id++) { | ||
1733 | acpi_battery_remove(sbs, id); | 958 | acpi_battery_remove(sbs, id); |
1734 | } | 959 | acpi_charger_remove(sbs); |
1735 | 960 | mutex_unlock(&sbs->lock); | |
1736 | acpi_ac_remove(sbs); | 961 | mutex_destroy(&sbs->lock); |
1737 | |||
1738 | sbs_mutex_unlock(sbs); | ||
1739 | |||
1740 | mutex_destroy(&sbs->mutex); | ||
1741 | |||
1742 | kfree(sbs); | 962 | kfree(sbs); |
1743 | |||
1744 | return 0; | 963 | return 0; |
1745 | } | 964 | } |
1746 | 965 | ||
1747 | static void acpi_sbs_rmdirs(void) | 966 | static void acpi_sbs_rmdirs(void) |
1748 | { | 967 | { |
968 | #ifdef CONFIG_ACPI_PROCFS | ||
1749 | if (acpi_ac_dir) { | 969 | if (acpi_ac_dir) { |
1750 | acpi_unlock_ac_dir(acpi_ac_dir); | 970 | acpi_unlock_ac_dir(acpi_ac_dir); |
1751 | acpi_ac_dir = NULL; | 971 | acpi_ac_dir = NULL; |
@@ -1754,69 +974,58 @@ static void acpi_sbs_rmdirs(void) | |||
1754 | acpi_unlock_battery_dir(acpi_battery_dir); | 974 | acpi_unlock_battery_dir(acpi_battery_dir); |
1755 | acpi_battery_dir = NULL; | 975 | acpi_battery_dir = NULL; |
1756 | } | 976 | } |
977 | #endif | ||
1757 | } | 978 | } |
1758 | 979 | ||
1759 | static int acpi_sbs_resume(struct acpi_device *device) | 980 | static int acpi_sbs_resume(struct acpi_device *device) |
1760 | { | 981 | { |
1761 | struct acpi_sbs *sbs; | 982 | struct acpi_sbs *sbs; |
1762 | |||
1763 | if (!device) | 983 | if (!device) |
1764 | return -EINVAL; | 984 | return -EINVAL; |
1765 | |||
1766 | sbs = device->driver_data; | 985 | sbs = device->driver_data; |
1767 | 986 | acpi_sbs_callback(sbs); | |
1768 | sbs->run_cnt = 0; | ||
1769 | |||
1770 | return 0; | 987 | return 0; |
1771 | } | 988 | } |
1772 | 989 | ||
990 | static struct acpi_driver acpi_sbs_driver = { | ||
991 | .name = "sbs", | ||
992 | .class = ACPI_SBS_CLASS, | ||
993 | .ids = sbs_device_ids, | ||
994 | .ops = { | ||
995 | .add = acpi_sbs_add, | ||
996 | .remove = acpi_sbs_remove, | ||
997 | .resume = acpi_sbs_resume, | ||
998 | }, | ||
999 | }; | ||
1000 | |||
1773 | static int __init acpi_sbs_init(void) | 1001 | static int __init acpi_sbs_init(void) |
1774 | { | 1002 | { |
1775 | int result = 0; | 1003 | int result = 0; |
1776 | 1004 | ||
1777 | if (acpi_disabled) | 1005 | if (acpi_disabled) |
1778 | return -ENODEV; | 1006 | return -ENODEV; |
1779 | 1007 | #ifdef CONFIG_ACPI_PROCFS | |
1780 | if (capacity_mode != DEF_CAPACITY_UNIT | ||
1781 | && capacity_mode != MAH_CAPACITY_UNIT | ||
1782 | && capacity_mode != MWH_CAPACITY_UNIT) { | ||
1783 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1784 | "invalid capacity_mode = %d", capacity_mode)); | ||
1785 | return -EINVAL; | ||
1786 | } | ||
1787 | |||
1788 | acpi_ac_dir = acpi_lock_ac_dir(); | 1008 | acpi_ac_dir = acpi_lock_ac_dir(); |
1789 | if (!acpi_ac_dir) { | 1009 | if (!acpi_ac_dir) |
1790 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1791 | "acpi_lock_ac_dir() failed")); | ||
1792 | return -ENODEV; | 1010 | return -ENODEV; |
1793 | } | ||
1794 | |||
1795 | acpi_battery_dir = acpi_lock_battery_dir(); | 1011 | acpi_battery_dir = acpi_lock_battery_dir(); |
1796 | if (!acpi_battery_dir) { | 1012 | if (!acpi_battery_dir) { |
1797 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1798 | "acpi_lock_battery_dir() failed")); | ||
1799 | acpi_sbs_rmdirs(); | 1013 | acpi_sbs_rmdirs(); |
1800 | return -ENODEV; | 1014 | return -ENODEV; |
1801 | } | 1015 | } |
1802 | 1016 | #endif | |
1803 | result = acpi_bus_register_driver(&acpi_sbs_driver); | 1017 | result = acpi_bus_register_driver(&acpi_sbs_driver); |
1804 | if (result < 0) { | 1018 | if (result < 0) { |
1805 | ACPI_EXCEPTION((AE_INFO, AE_ERROR, | ||
1806 | "acpi_bus_register_driver() failed")); | ||
1807 | acpi_sbs_rmdirs(); | 1019 | acpi_sbs_rmdirs(); |
1808 | return -ENODEV; | 1020 | return -ENODEV; |
1809 | } | 1021 | } |
1810 | |||
1811 | return 0; | 1022 | return 0; |
1812 | } | 1023 | } |
1813 | 1024 | ||
1814 | static void __exit acpi_sbs_exit(void) | 1025 | static void __exit acpi_sbs_exit(void) |
1815 | { | 1026 | { |
1816 | acpi_bus_unregister_driver(&acpi_sbs_driver); | 1027 | acpi_bus_unregister_driver(&acpi_sbs_driver); |
1817 | |||
1818 | acpi_sbs_rmdirs(); | 1028 | acpi_sbs_rmdirs(); |
1819 | |||
1820 | return; | 1029 | return; |
1821 | } | 1030 | } |
1822 | 1031 | ||
diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c new file mode 100644 index 00000000000..046d7c3ed35 --- /dev/null +++ b/drivers/acpi/sbshc.c | |||
@@ -0,0 +1,309 @@ | |||
1 | /* | ||
2 | * SMBus driver for ACPI Embedded Controller (v0.1) | ||
3 | * | ||
4 | * Copyright (c) 2007 Alexey Starikovskiy | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation version 2. | ||
9 | */ | ||
10 | |||
11 | #include <acpi/acpi_bus.h> | ||
12 | #include <acpi/acpi_drivers.h> | ||
13 | #include <acpi/actypes.h> | ||
14 | #include <linux/wait.h> | ||
15 | #include <linux/delay.h> | ||
16 | #include <linux/interrupt.h> | ||
17 | #include "sbshc.h" | ||
18 | |||
19 | #define ACPI_SMB_HC_CLASS "smbus_host_controller" | ||
20 | #define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC" | ||
21 | |||
22 | struct acpi_smb_hc { | ||
23 | struct acpi_ec *ec; | ||
24 | struct mutex lock; | ||
25 | wait_queue_head_t wait; | ||
26 | u8 offset; | ||
27 | u8 query_bit; | ||
28 | smbus_alarm_callback callback; | ||
29 | void *context; | ||
30 | }; | ||
31 | |||
32 | static int acpi_smbus_hc_add(struct acpi_device *device); | ||
33 | static int acpi_smbus_hc_remove(struct acpi_device *device, int type); | ||
34 | |||
35 | static const struct acpi_device_id sbs_device_ids[] = { | ||
36 | {"ACPI0001", 0}, | ||
37 | {"ACPI0005", 0}, | ||
38 | {"", 0}, | ||
39 | }; | ||
40 | |||
41 | MODULE_DEVICE_TABLE(acpi, sbs_device_ids); | ||
42 | |||
43 | static struct acpi_driver acpi_smb_hc_driver = { | ||
44 | .name = "smbus_hc", | ||
45 | .class = ACPI_SMB_HC_CLASS, | ||
46 | .ids = sbs_device_ids, | ||
47 | .ops = { | ||
48 | .add = acpi_smbus_hc_add, | ||
49 | .remove = acpi_smbus_hc_remove, | ||
50 | }, | ||
51 | }; | ||
52 | |||
53 | union acpi_smb_status { | ||
54 | u8 raw; | ||
55 | struct { | ||
56 | u8 status:5; | ||
57 | u8 reserved:1; | ||
58 | u8 alarm:1; | ||
59 | u8 done:1; | ||
60 | } fields; | ||
61 | }; | ||
62 | |||
63 | enum acpi_smb_status_codes { | ||
64 | SMBUS_OK = 0, | ||
65 | SMBUS_UNKNOWN_FAILURE = 0x07, | ||
66 | SMBUS_DEVICE_ADDRESS_NACK = 0x10, | ||
67 | SMBUS_DEVICE_ERROR = 0x11, | ||
68 | SMBUS_DEVICE_COMMAND_ACCESS_DENIED = 0x12, | ||
69 | SMBUS_UNKNOWN_ERROR = 0x13, | ||
70 | SMBUS_DEVICE_ACCESS_DENIED = 0x17, | ||
71 | SMBUS_TIMEOUT = 0x18, | ||
72 | SMBUS_HOST_UNSUPPORTED_PROTOCOL = 0x19, | ||
73 | SMBUS_BUSY = 0x1a, | ||
74 | SMBUS_PEC_ERROR = 0x1f, | ||
75 | }; | ||
76 | |||
77 | enum acpi_smb_offset { | ||
78 | ACPI_SMB_PROTOCOL = 0, /* protocol, PEC */ | ||
79 | ACPI_SMB_STATUS = 1, /* status */ | ||
80 | ACPI_SMB_ADDRESS = 2, /* address */ | ||
81 | ACPI_SMB_COMMAND = 3, /* command */ | ||
82 | ACPI_SMB_DATA = 4, /* 32 data registers */ | ||
83 | ACPI_SMB_BLOCK_COUNT = 0x24, /* number of data bytes */ | ||
84 | ACPI_SMB_ALARM_ADDRESS = 0x25, /* alarm address */ | ||
85 | ACPI_SMB_ALARM_DATA = 0x26, /* 2 bytes alarm data */ | ||
86 | }; | ||
87 | |||
88 | static inline int smb_hc_read(struct acpi_smb_hc *hc, u8 address, u8 *data) | ||
89 | { | ||
90 | return ec_read(hc->offset + address, data); | ||
91 | } | ||
92 | |||
93 | static inline int smb_hc_write(struct acpi_smb_hc *hc, u8 address, u8 data) | ||
94 | { | ||
95 | return ec_write(hc->offset + address, data); | ||
96 | } | ||
97 | |||
98 | static inline int smb_check_done(struct acpi_smb_hc *hc) | ||
99 | { | ||
100 | union acpi_smb_status status = {.raw = 0}; | ||
101 | smb_hc_read(hc, ACPI_SMB_STATUS, &status.raw); | ||
102 | return status.fields.done && (status.fields.status == SMBUS_OK); | ||
103 | } | ||
104 | |||
105 | static int wait_transaction_complete(struct acpi_smb_hc *hc, int timeout) | ||
106 | { | ||
107 | if (wait_event_timeout(hc->wait, smb_check_done(hc), | ||
108 | msecs_to_jiffies(timeout))) | ||
109 | return 0; | ||
110 | else | ||
111 | return -ETIME; | ||
112 | } | ||
113 | |||
114 | int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol, u8 address, | ||
115 | u8 command, u8 *data, u8 length) | ||
116 | { | ||
117 | int ret = -EFAULT, i; | ||
118 | u8 temp, sz = 0; | ||
119 | |||
120 | mutex_lock(&hc->lock); | ||
121 | if (smb_hc_read(hc, ACPI_SMB_PROTOCOL, &temp)) | ||
122 | goto end; | ||
123 | if (temp) { | ||
124 | ret = -EBUSY; | ||
125 | goto end; | ||
126 | } | ||
127 | smb_hc_write(hc, ACPI_SMB_COMMAND, command); | ||
128 | smb_hc_write(hc, ACPI_SMB_COMMAND, command); | ||
129 | if (!(protocol & 0x01)) { | ||
130 | smb_hc_write(hc, ACPI_SMB_BLOCK_COUNT, length); | ||
131 | for (i = 0; i < length; ++i) | ||
132 | smb_hc_write(hc, ACPI_SMB_DATA + i, data[i]); | ||
133 | } | ||
134 | smb_hc_write(hc, ACPI_SMB_ADDRESS, address << 1); | ||
135 | smb_hc_write(hc, ACPI_SMB_PROTOCOL, protocol); | ||
136 | /* | ||
137 | * Wait for completion. Save the status code, data size, | ||
138 | * and data into the return package (if required by the protocol). | ||
139 | */ | ||
140 | ret = wait_transaction_complete(hc, 1000); | ||
141 | if (ret || !(protocol & 0x01)) | ||
142 | goto end; | ||
143 | switch (protocol) { | ||
144 | case SMBUS_RECEIVE_BYTE: | ||
145 | case SMBUS_READ_BYTE: | ||
146 | sz = 1; | ||
147 | break; | ||
148 | case SMBUS_READ_WORD: | ||
149 | sz = 2; | ||
150 | break; | ||
151 | case SMBUS_READ_BLOCK: | ||
152 | if (smb_hc_read(hc, ACPI_SMB_BLOCK_COUNT, &sz)) { | ||
153 | ret = -EFAULT; | ||
154 | goto end; | ||
155 | } | ||
156 | sz &= 0x1f; | ||
157 | break; | ||
158 | } | ||
159 | for (i = 0; i < sz; ++i) | ||
160 | smb_hc_read(hc, ACPI_SMB_DATA + i, &data[i]); | ||
161 | end: | ||
162 | mutex_unlock(&hc->lock); | ||
163 | return ret; | ||
164 | } | ||
165 | |||
166 | int acpi_smbus_read(struct acpi_smb_hc *hc, u8 protocol, u8 address, | ||
167 | u8 command, u8 *data) | ||
168 | { | ||
169 | return acpi_smbus_transaction(hc, protocol, address, command, data, 0); | ||
170 | } | ||
171 | |||
172 | EXPORT_SYMBOL_GPL(acpi_smbus_read); | ||
173 | |||
174 | int acpi_smbus_write(struct acpi_smb_hc *hc, u8 protocol, u8 address, | ||
175 | u8 command, u8 *data, u8 length) | ||
176 | { | ||
177 | return acpi_smbus_transaction(hc, protocol, address, command, data, length); | ||
178 | } | ||
179 | |||
180 | EXPORT_SYMBOL_GPL(acpi_smbus_write); | ||
181 | |||
182 | int acpi_smbus_register_callback(struct acpi_smb_hc *hc, | ||
183 | smbus_alarm_callback callback, void *context) | ||
184 | { | ||
185 | mutex_lock(&hc->lock); | ||
186 | hc->callback = callback; | ||
187 | hc->context = context; | ||
188 | mutex_unlock(&hc->lock); | ||
189 | return 0; | ||
190 | } | ||
191 | |||
192 | EXPORT_SYMBOL_GPL(acpi_smbus_register_callback); | ||
193 | |||
194 | int acpi_smbus_unregister_callback(struct acpi_smb_hc *hc) | ||
195 | { | ||
196 | mutex_lock(&hc->lock); | ||
197 | hc->callback = NULL; | ||
198 | hc->context = NULL; | ||
199 | mutex_unlock(&hc->lock); | ||
200 | return 0; | ||
201 | } | ||
202 | |||
203 | EXPORT_SYMBOL_GPL(acpi_smbus_unregister_callback); | ||
204 | |||
205 | static void acpi_smbus_callback(void *context) | ||
206 | { | ||
207 | struct acpi_smb_hc *hc = context; | ||
208 | |||
209 | if (hc->callback) | ||
210 | hc->callback(hc->context); | ||
211 | } | ||
212 | |||
213 | static int smbus_alarm(void *context) | ||
214 | { | ||
215 | struct acpi_smb_hc *hc = context; | ||
216 | union acpi_smb_status status; | ||
217 | if (smb_hc_read(hc, ACPI_SMB_STATUS, &status.raw)) | ||
218 | return 0; | ||
219 | /* Check if it is only a completion notify */ | ||
220 | if (status.fields.done) | ||
221 | wake_up(&hc->wait); | ||
222 | if (!status.fields.alarm) | ||
223 | return 0; | ||
224 | mutex_lock(&hc->lock); | ||
225 | smb_hc_write(hc, ACPI_SMB_STATUS, status.raw); | ||
226 | if (hc->callback) | ||
227 | acpi_os_execute(OSL_GPE_HANDLER, acpi_smbus_callback, hc); | ||
228 | mutex_unlock(&hc->lock); | ||
229 | return 0; | ||
230 | } | ||
231 | |||
232 | typedef int (*acpi_ec_query_func) (void *data); | ||
233 | |||
234 | extern int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit, | ||
235 | acpi_handle handle, acpi_ec_query_func func, | ||
236 | void *data); | ||
237 | |||
238 | static int acpi_smbus_hc_add(struct acpi_device *device) | ||
239 | { | ||
240 | int status; | ||
241 | unsigned long val; | ||
242 | struct acpi_smb_hc *hc; | ||
243 | |||
244 | if (!device) | ||
245 | return -EINVAL; | ||
246 | |||
247 | status = acpi_evaluate_integer(device->handle, "_EC", NULL, &val); | ||
248 | if (ACPI_FAILURE(status)) { | ||
249 | printk(KERN_ERR PREFIX "error obtaining _EC.\n"); | ||
250 | return -EIO; | ||
251 | } | ||
252 | |||
253 | strcpy(acpi_device_name(device), ACPI_SMB_HC_DEVICE_NAME); | ||
254 | strcpy(acpi_device_class(device), ACPI_SMB_HC_CLASS); | ||
255 | |||
256 | hc = kzalloc(sizeof(struct acpi_smb_hc), GFP_KERNEL); | ||
257 | if (!hc) | ||
258 | return -ENOMEM; | ||
259 | mutex_init(&hc->lock); | ||
260 | init_waitqueue_head(&hc->wait); | ||
261 | |||
262 | hc->ec = acpi_driver_data(device->parent); | ||
263 | hc->offset = (val >> 8) & 0xff; | ||
264 | hc->query_bit = val & 0xff; | ||
265 | acpi_driver_data(device) = hc; | ||
266 | |||
267 | acpi_ec_add_query_handler(hc->ec, hc->query_bit, NULL, smbus_alarm, hc); | ||
268 | printk(KERN_INFO PREFIX "SBS HC: EC = 0x%p, offset = 0x%0x, query_bit = 0x%0x\n", | ||
269 | hc->ec, hc->offset, hc->query_bit); | ||
270 | |||
271 | return 0; | ||
272 | } | ||
273 | |||
274 | extern void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit); | ||
275 | |||
276 | static int acpi_smbus_hc_remove(struct acpi_device *device, int type) | ||
277 | { | ||
278 | struct acpi_smb_hc *hc; | ||
279 | |||
280 | if (!device) | ||
281 | return -EINVAL; | ||
282 | |||
283 | hc = acpi_driver_data(device); | ||
284 | acpi_ec_remove_query_handler(hc->ec, hc->query_bit); | ||
285 | kfree(hc); | ||
286 | return 0; | ||
287 | } | ||
288 | |||
289 | static int __init acpi_smb_hc_init(void) | ||
290 | { | ||
291 | int result; | ||
292 | |||
293 | result = acpi_bus_register_driver(&acpi_smb_hc_driver); | ||
294 | if (result < 0) | ||
295 | return -ENODEV; | ||
296 | return 0; | ||
297 | } | ||
298 | |||
299 | static void __exit acpi_smb_hc_exit(void) | ||
300 | { | ||
301 | acpi_bus_unregister_driver(&acpi_smb_hc_driver); | ||
302 | } | ||
303 | |||
304 | module_init(acpi_smb_hc_init); | ||
305 | module_exit(acpi_smb_hc_exit); | ||
306 | |||
307 | MODULE_LICENSE("GPL"); | ||
308 | MODULE_AUTHOR("Alexey Starikovskiy"); | ||
309 | MODULE_DESCRIPTION("ACPI SMBus HC driver"); | ||
diff --git a/drivers/acpi/sbshc.h b/drivers/acpi/sbshc.h new file mode 100644 index 00000000000..3bda3491a97 --- /dev/null +++ b/drivers/acpi/sbshc.h | |||
@@ -0,0 +1,27 @@ | |||
1 | struct acpi_smb_hc; | ||
2 | enum acpi_smb_protocol { | ||
3 | SMBUS_WRITE_QUICK = 2, | ||
4 | SMBUS_READ_QUICK = 3, | ||
5 | SMBUS_SEND_BYTE = 4, | ||
6 | SMBUS_RECEIVE_BYTE = 5, | ||
7 | SMBUS_WRITE_BYTE = 6, | ||
8 | SMBUS_READ_BYTE = 7, | ||
9 | SMBUS_WRITE_WORD = 8, | ||
10 | SMBUS_READ_WORD = 9, | ||
11 | SMBUS_WRITE_BLOCK = 0xa, | ||
12 | SMBUS_READ_BLOCK = 0xb, | ||
13 | SMBUS_PROCESS_CALL = 0xc, | ||
14 | SMBUS_BLOCK_PROCESS_CALL = 0xd, | ||
15 | }; | ||
16 | |||
17 | static const u8 SMBUS_PEC = 0x80; | ||
18 | |||
19 | typedef void (*smbus_alarm_callback)(void *context); | ||
20 | |||
21 | extern int acpi_smbus_read(struct acpi_smb_hc *hc, u8 protocol, u8 address, | ||
22 | u8 command, u8 * data); | ||
23 | extern int acpi_smbus_write(struct acpi_smb_hc *hc, u8 protocol, u8 slave_address, | ||
24 | u8 command, u8 * data, u8 length); | ||
25 | extern int acpi_smbus_register_callback(struct acpi_smb_hc *hc, | ||
26 | smbus_alarm_callback callback, void *context); | ||
27 | extern int acpi_smbus_unregister_callback(struct acpi_smb_hc *hc); | ||
diff --git a/drivers/acpi/sleep/main.c b/drivers/acpi/sleep/main.c index 5055acf2163..f3d3867303e 100644 --- a/drivers/acpi/sleep/main.c +++ b/drivers/acpi/sleep/main.c | |||
@@ -44,13 +44,12 @@ int acpi_sleep_prepare(u32 acpi_state) | |||
44 | ACPI_FLUSH_CPU_CACHE(); | 44 | ACPI_FLUSH_CPU_CACHE(); |
45 | acpi_enable_wakeup_device_prep(acpi_state); | 45 | acpi_enable_wakeup_device_prep(acpi_state); |
46 | #endif | 46 | #endif |
47 | acpi_gpe_sleep_prepare(acpi_state); | ||
48 | acpi_enter_sleep_state_prep(acpi_state); | 47 | acpi_enter_sleep_state_prep(acpi_state); |
49 | return 0; | 48 | return 0; |
50 | } | 49 | } |
51 | 50 | ||
52 | #ifdef CONFIG_SUSPEND | 51 | #ifdef CONFIG_SUSPEND |
53 | static struct pm_ops acpi_pm_ops; | 52 | static struct platform_suspend_ops acpi_pm_ops; |
54 | 53 | ||
55 | extern void do_suspend_lowlevel(void); | 54 | extern void do_suspend_lowlevel(void); |
56 | 55 | ||
@@ -85,13 +84,12 @@ static int acpi_pm_set_target(suspend_state_t pm_state) | |||
85 | 84 | ||
86 | /** | 85 | /** |
87 | * acpi_pm_prepare - Do preliminary suspend work. | 86 | * acpi_pm_prepare - Do preliminary suspend work. |
88 | * @pm_state: ignored | ||
89 | * | 87 | * |
90 | * If necessary, set the firmware waking vector and do arch-specific | 88 | * If necessary, set the firmware waking vector and do arch-specific |
91 | * nastiness to get the wakeup code to the waking vector. | 89 | * nastiness to get the wakeup code to the waking vector. |
92 | */ | 90 | */ |
93 | 91 | ||
94 | static int acpi_pm_prepare(suspend_state_t pm_state) | 92 | static int acpi_pm_prepare(void) |
95 | { | 93 | { |
96 | int error = acpi_sleep_prepare(acpi_target_sleep_state); | 94 | int error = acpi_sleep_prepare(acpi_target_sleep_state); |
97 | 95 | ||
@@ -160,13 +158,12 @@ static int acpi_pm_enter(suspend_state_t pm_state) | |||
160 | 158 | ||
161 | /** | 159 | /** |
162 | * acpi_pm_finish - Finish up suspend sequence. | 160 | * acpi_pm_finish - Finish up suspend sequence. |
163 | * @pm_state: ignored | ||
164 | * | 161 | * |
165 | * This is called after we wake back up (or if entering the sleep state | 162 | * This is called after we wake back up (or if entering the sleep state |
166 | * failed). | 163 | * failed). |
167 | */ | 164 | */ |
168 | 165 | ||
169 | static int acpi_pm_finish(suspend_state_t pm_state) | 166 | static void acpi_pm_finish(void) |
170 | { | 167 | { |
171 | u32 acpi_state = acpi_target_sleep_state; | 168 | u32 acpi_state = acpi_target_sleep_state; |
172 | 169 | ||
@@ -184,7 +181,6 @@ static int acpi_pm_finish(suspend_state_t pm_state) | |||
184 | init_8259A(0); | 181 | init_8259A(0); |
185 | } | 182 | } |
186 | #endif | 183 | #endif |
187 | return 0; | ||
188 | } | 184 | } |
189 | 185 | ||
190 | static int acpi_pm_state_valid(suspend_state_t pm_state) | 186 | static int acpi_pm_state_valid(suspend_state_t pm_state) |
@@ -203,7 +199,7 @@ static int acpi_pm_state_valid(suspend_state_t pm_state) | |||
203 | } | 199 | } |
204 | } | 200 | } |
205 | 201 | ||
206 | static struct pm_ops acpi_pm_ops = { | 202 | static struct platform_suspend_ops acpi_pm_ops = { |
207 | .valid = acpi_pm_state_valid, | 203 | .valid = acpi_pm_state_valid, |
208 | .set_target = acpi_pm_set_target, | 204 | .set_target = acpi_pm_set_target, |
209 | .prepare = acpi_pm_prepare, | 205 | .prepare = acpi_pm_prepare, |
@@ -233,6 +229,12 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = { | |||
233 | #endif /* CONFIG_SUSPEND */ | 229 | #endif /* CONFIG_SUSPEND */ |
234 | 230 | ||
235 | #ifdef CONFIG_HIBERNATION | 231 | #ifdef CONFIG_HIBERNATION |
232 | static int acpi_hibernation_start(void) | ||
233 | { | ||
234 | acpi_target_sleep_state = ACPI_STATE_S4; | ||
235 | return 0; | ||
236 | } | ||
237 | |||
236 | static int acpi_hibernation_prepare(void) | 238 | static int acpi_hibernation_prepare(void) |
237 | { | 239 | { |
238 | return acpi_sleep_prepare(ACPI_STATE_S4); | 240 | return acpi_sleep_prepare(ACPI_STATE_S4); |
@@ -254,13 +256,29 @@ static int acpi_hibernation_enter(void) | |||
254 | return ACPI_SUCCESS(status) ? 0 : -EFAULT; | 256 | return ACPI_SUCCESS(status) ? 0 : -EFAULT; |
255 | } | 257 | } |
256 | 258 | ||
259 | static void acpi_hibernation_leave(void) | ||
260 | { | ||
261 | /* | ||
262 | * If ACPI is not enabled by the BIOS and the boot kernel, we need to | ||
263 | * enable it here. | ||
264 | */ | ||
265 | acpi_enable(); | ||
266 | } | ||
267 | |||
257 | static void acpi_hibernation_finish(void) | 268 | static void acpi_hibernation_finish(void) |
258 | { | 269 | { |
270 | /* | ||
271 | * If ACPI is not enabled by the BIOS and the boot kernel, we need to | ||
272 | * enable it here. | ||
273 | */ | ||
274 | acpi_enable(); | ||
259 | acpi_leave_sleep_state(ACPI_STATE_S4); | 275 | acpi_leave_sleep_state(ACPI_STATE_S4); |
260 | acpi_disable_wakeup_device(ACPI_STATE_S4); | 276 | acpi_disable_wakeup_device(ACPI_STATE_S4); |
261 | 277 | ||
262 | /* reset firmware waking vector */ | 278 | /* reset firmware waking vector */ |
263 | acpi_set_firmware_waking_vector((acpi_physical_address) 0); | 279 | acpi_set_firmware_waking_vector((acpi_physical_address) 0); |
280 | |||
281 | acpi_target_sleep_state = ACPI_STATE_S0; | ||
264 | } | 282 | } |
265 | 283 | ||
266 | static int acpi_hibernation_pre_restore(void) | 284 | static int acpi_hibernation_pre_restore(void) |
@@ -277,10 +295,13 @@ static void acpi_hibernation_restore_cleanup(void) | |||
277 | acpi_hw_enable_all_runtime_gpes(); | 295 | acpi_hw_enable_all_runtime_gpes(); |
278 | } | 296 | } |
279 | 297 | ||
280 | static struct hibernation_ops acpi_hibernation_ops = { | 298 | static struct platform_hibernation_ops acpi_hibernation_ops = { |
299 | .start = acpi_hibernation_start, | ||
300 | .pre_snapshot = acpi_hibernation_prepare, | ||
301 | .finish = acpi_hibernation_finish, | ||
281 | .prepare = acpi_hibernation_prepare, | 302 | .prepare = acpi_hibernation_prepare, |
282 | .enter = acpi_hibernation_enter, | 303 | .enter = acpi_hibernation_enter, |
283 | .finish = acpi_hibernation_finish, | 304 | .leave = acpi_hibernation_leave, |
284 | .pre_restore = acpi_hibernation_pre_restore, | 305 | .pre_restore = acpi_hibernation_pre_restore, |
285 | .restore_cleanup = acpi_hibernation_restore_cleanup, | 306 | .restore_cleanup = acpi_hibernation_restore_cleanup, |
286 | }; | 307 | }; |
@@ -417,7 +438,7 @@ int __init acpi_sleep_init(void) | |||
417 | } | 438 | } |
418 | } | 439 | } |
419 | 440 | ||
420 | pm_set_ops(&acpi_pm_ops); | 441 | suspend_set_ops(&acpi_pm_ops); |
421 | #endif | 442 | #endif |
422 | 443 | ||
423 | #ifdef CONFIG_HIBERNATION | 444 | #ifdef CONFIG_HIBERNATION |
diff --git a/drivers/acpi/sleep/sleep.h b/drivers/acpi/sleep/sleep.h index ff1f8504f49..a2ea125ae2d 100644 --- a/drivers/acpi/sleep/sleep.h +++ b/drivers/acpi/sleep/sleep.h | |||
@@ -5,6 +5,5 @@ extern int acpi_suspend (u32 state); | |||
5 | extern void acpi_enable_wakeup_device_prep(u8 sleep_state); | 5 | extern void acpi_enable_wakeup_device_prep(u8 sleep_state); |
6 | extern void acpi_enable_wakeup_device(u8 sleep_state); | 6 | extern void acpi_enable_wakeup_device(u8 sleep_state); |
7 | extern void acpi_disable_wakeup_device(u8 sleep_state); | 7 | extern void acpi_disable_wakeup_device(u8 sleep_state); |
8 | extern void acpi_gpe_sleep_prepare(u32 sleep_state); | ||
9 | 8 | ||
10 | extern int acpi_sleep_prepare(u32 acpi_state); | 9 | extern int acpi_sleep_prepare(u32 acpi_state); |
diff --git a/drivers/acpi/sleep/wakeup.c b/drivers/acpi/sleep/wakeup.c index 97c27ddb144..ed8e41becf0 100644 --- a/drivers/acpi/sleep/wakeup.c +++ b/drivers/acpi/sleep/wakeup.c | |||
@@ -64,36 +64,29 @@ void acpi_enable_wakeup_device(u8 sleep_state) | |||
64 | ACPI_FUNCTION_TRACE("acpi_enable_wakeup_device"); | 64 | ACPI_FUNCTION_TRACE("acpi_enable_wakeup_device"); |
65 | spin_lock(&acpi_device_lock); | 65 | spin_lock(&acpi_device_lock); |
66 | list_for_each_safe(node, next, &acpi_wakeup_device_list) { | 66 | list_for_each_safe(node, next, &acpi_wakeup_device_list) { |
67 | struct acpi_device *dev = container_of(node, | 67 | struct acpi_device *dev = |
68 | struct acpi_device, | 68 | container_of(node, struct acpi_device, wakeup_list); |
69 | wakeup_list); | 69 | if (!dev->wakeup.flags.valid) |
70 | 70 | continue; | |
71 | /* If users want to disable run-wake GPE, | 71 | /* If users want to disable run-wake GPE, |
72 | * we only disable it for wake and leave it for runtime | 72 | * we only disable it for wake and leave it for runtime |
73 | */ | 73 | */ |
74 | if (dev->wakeup.flags.run_wake && !dev->wakeup.state.enabled) { | 74 | if (!dev->wakeup.state.enabled || |
75 | spin_unlock(&acpi_device_lock); | 75 | sleep_state > (u32) dev->wakeup.sleep_state) { |
76 | acpi_set_gpe_type(dev->wakeup.gpe_device, | 76 | if (dev->wakeup.flags.run_wake) { |
77 | dev->wakeup.gpe_number, | 77 | spin_unlock(&acpi_device_lock); |
78 | ACPI_GPE_TYPE_RUNTIME); | 78 | /* set_gpe_type will disable GPE, leave it like that */ |
79 | /* Re-enable it, since set_gpe_type will disable it */ | 79 | acpi_set_gpe_type(dev->wakeup.gpe_device, |
80 | acpi_enable_gpe(dev->wakeup.gpe_device, | 80 | dev->wakeup.gpe_number, |
81 | dev->wakeup.gpe_number, ACPI_ISR); | 81 | ACPI_GPE_TYPE_RUNTIME); |
82 | spin_lock(&acpi_device_lock); | 82 | spin_lock(&acpi_device_lock); |
83 | } | ||
83 | continue; | 84 | continue; |
84 | } | 85 | } |
85 | |||
86 | if (!dev->wakeup.flags.valid || | ||
87 | !dev->wakeup.state.enabled || | ||
88 | (sleep_state > (u32) dev->wakeup.sleep_state)) | ||
89 | continue; | ||
90 | |||
91 | spin_unlock(&acpi_device_lock); | 86 | spin_unlock(&acpi_device_lock); |
92 | /* run-wake GPE has been enabled */ | ||
93 | if (!dev->wakeup.flags.run_wake) | 87 | if (!dev->wakeup.flags.run_wake) |
94 | acpi_enable_gpe(dev->wakeup.gpe_device, | 88 | acpi_enable_gpe(dev->wakeup.gpe_device, |
95 | dev->wakeup.gpe_number, ACPI_ISR); | 89 | dev->wakeup.gpe_number, ACPI_ISR); |
96 | dev->wakeup.state.active = 1; | ||
97 | spin_lock(&acpi_device_lock); | 90 | spin_lock(&acpi_device_lock); |
98 | } | 91 | } |
99 | spin_unlock(&acpi_device_lock); | 92 | spin_unlock(&acpi_device_lock); |
@@ -112,26 +105,25 @@ void acpi_disable_wakeup_device(u8 sleep_state) | |||
112 | 105 | ||
113 | spin_lock(&acpi_device_lock); | 106 | spin_lock(&acpi_device_lock); |
114 | list_for_each_safe(node, next, &acpi_wakeup_device_list) { | 107 | list_for_each_safe(node, next, &acpi_wakeup_device_list) { |
115 | struct acpi_device *dev = container_of(node, | 108 | struct acpi_device *dev = |
116 | struct acpi_device, | 109 | container_of(node, struct acpi_device, wakeup_list); |
117 | wakeup_list); | ||
118 | 110 | ||
119 | if (dev->wakeup.flags.run_wake && !dev->wakeup.state.enabled) { | 111 | if (!dev->wakeup.flags.valid) |
120 | spin_unlock(&acpi_device_lock); | ||
121 | acpi_set_gpe_type(dev->wakeup.gpe_device, | ||
122 | dev->wakeup.gpe_number, | ||
123 | ACPI_GPE_TYPE_WAKE_RUN); | ||
124 | /* Re-enable it, since set_gpe_type will disable it */ | ||
125 | acpi_enable_gpe(dev->wakeup.gpe_device, | ||
126 | dev->wakeup.gpe_number, ACPI_NOT_ISR); | ||
127 | spin_lock(&acpi_device_lock); | ||
128 | continue; | 112 | continue; |
129 | } | 113 | if (!dev->wakeup.state.enabled || |
130 | 114 | sleep_state > (u32) dev->wakeup.sleep_state) { | |
131 | if (!dev->wakeup.flags.valid || | 115 | if (dev->wakeup.flags.run_wake) { |
132 | !dev->wakeup.state.active || | 116 | spin_unlock(&acpi_device_lock); |
133 | (sleep_state > (u32) dev->wakeup.sleep_state)) | 117 | acpi_set_gpe_type(dev->wakeup.gpe_device, |
118 | dev->wakeup.gpe_number, | ||
119 | ACPI_GPE_TYPE_WAKE_RUN); | ||
120 | /* Re-enable it, since set_gpe_type will disable it */ | ||
121 | acpi_enable_gpe(dev->wakeup.gpe_device, | ||
122 | dev->wakeup.gpe_number, ACPI_NOT_ISR); | ||
123 | spin_lock(&acpi_device_lock); | ||
124 | } | ||
134 | continue; | 125 | continue; |
126 | } | ||
135 | 127 | ||
136 | spin_unlock(&acpi_device_lock); | 128 | spin_unlock(&acpi_device_lock); |
137 | acpi_disable_wakeup_device_power(dev); | 129 | acpi_disable_wakeup_device_power(dev); |
@@ -142,7 +134,6 @@ void acpi_disable_wakeup_device(u8 sleep_state) | |||
142 | acpi_clear_gpe(dev->wakeup.gpe_device, | 134 | acpi_clear_gpe(dev->wakeup.gpe_device, |
143 | dev->wakeup.gpe_number, ACPI_NOT_ISR); | 135 | dev->wakeup.gpe_number, ACPI_NOT_ISR); |
144 | } | 136 | } |
145 | dev->wakeup.state.active = 0; | ||
146 | spin_lock(&acpi_device_lock); | 137 | spin_lock(&acpi_device_lock); |
147 | } | 138 | } |
148 | spin_unlock(&acpi_device_lock); | 139 | spin_unlock(&acpi_device_lock); |
@@ -160,48 +151,20 @@ static int __init acpi_wakeup_device_init(void) | |||
160 | struct acpi_device *dev = container_of(node, | 151 | struct acpi_device *dev = container_of(node, |
161 | struct acpi_device, | 152 | struct acpi_device, |
162 | wakeup_list); | 153 | wakeup_list); |
163 | |||
164 | /* In case user doesn't load button driver */ | 154 | /* In case user doesn't load button driver */ |
165 | if (dev->wakeup.flags.run_wake && !dev->wakeup.state.enabled) { | 155 | if (!dev->wakeup.flags.run_wake || dev->wakeup.state.enabled) |
166 | spin_unlock(&acpi_device_lock); | 156 | continue; |
167 | acpi_set_gpe_type(dev->wakeup.gpe_device, | 157 | spin_unlock(&acpi_device_lock); |
168 | dev->wakeup.gpe_number, | 158 | acpi_set_gpe_type(dev->wakeup.gpe_device, |
169 | ACPI_GPE_TYPE_WAKE_RUN); | 159 | dev->wakeup.gpe_number, |
170 | acpi_enable_gpe(dev->wakeup.gpe_device, | 160 | ACPI_GPE_TYPE_WAKE_RUN); |
171 | dev->wakeup.gpe_number, ACPI_NOT_ISR); | 161 | acpi_enable_gpe(dev->wakeup.gpe_device, |
172 | dev->wakeup.state.enabled = 1; | 162 | dev->wakeup.gpe_number, ACPI_NOT_ISR); |
173 | spin_lock(&acpi_device_lock); | 163 | dev->wakeup.state.enabled = 1; |
174 | } | 164 | spin_lock(&acpi_device_lock); |
175 | } | 165 | } |
176 | spin_unlock(&acpi_device_lock); | 166 | spin_unlock(&acpi_device_lock); |
177 | |||
178 | return 0; | 167 | return 0; |
179 | } | 168 | } |
180 | 169 | ||
181 | late_initcall(acpi_wakeup_device_init); | 170 | late_initcall(acpi_wakeup_device_init); |
182 | |||
183 | /* | ||
184 | * Disable all wakeup GPEs before entering requested sleep state. | ||
185 | * @sleep_state: ACPI state | ||
186 | * Since acpi_enter_sleep_state() will disable all | ||
187 | * RUNTIME GPEs, we simply mark all GPES that | ||
188 | * are not enabled for wakeup from requested state as RUNTIME. | ||
189 | */ | ||
190 | void acpi_gpe_sleep_prepare(u32 sleep_state) | ||
191 | { | ||
192 | struct list_head *node, *next; | ||
193 | |||
194 | list_for_each_safe(node, next, &acpi_wakeup_device_list) { | ||
195 | struct acpi_device *dev = container_of(node, | ||
196 | struct acpi_device, | ||
197 | wakeup_list); | ||
198 | |||
199 | /* The GPE can wakeup system from this state, don't touch it */ | ||
200 | if ((u32) dev->wakeup.sleep_state >= sleep_state) | ||
201 | continue; | ||
202 | /* acpi_set_gpe_type will automatically disable GPE */ | ||
203 | acpi_set_gpe_type(dev->wakeup.gpe_device, | ||
204 | dev->wakeup.gpe_number, | ||
205 | ACPI_GPE_TYPE_RUNTIME); | ||
206 | } | ||
207 | } | ||
diff --git a/drivers/acpi/tables/tbutils.c b/drivers/acpi/tables/tbutils.c index 8cc9492ffbf..5f1d85f2ffe 100644 --- a/drivers/acpi/tables/tbutils.c +++ b/drivers/acpi/tables/tbutils.c | |||
@@ -400,7 +400,7 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags) | |||
400 | u32 table_count; | 400 | u32 table_count; |
401 | struct acpi_table_header *table; | 401 | struct acpi_table_header *table; |
402 | acpi_physical_address address; | 402 | acpi_physical_address address; |
403 | acpi_physical_address rsdt_address; | 403 | acpi_physical_address uninitialized_var(rsdt_address); |
404 | u32 length; | 404 | u32 length; |
405 | u8 *table_entry; | 405 | u8 *table_entry; |
406 | acpi_status status; | 406 | acpi_status status; |
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c index ad898e10c1a..5f79b445121 100644 --- a/drivers/acpi/thermal.c +++ b/drivers/acpi/thermal.c | |||
@@ -195,6 +195,7 @@ struct acpi_thermal { | |||
195 | struct acpi_thermal_trips trips; | 195 | struct acpi_thermal_trips trips; |
196 | struct acpi_handle_list devices; | 196 | struct acpi_handle_list devices; |
197 | struct timer_list timer; | 197 | struct timer_list timer; |
198 | struct mutex lock; | ||
198 | }; | 199 | }; |
199 | 200 | ||
200 | static const struct file_operations acpi_thermal_state_fops = { | 201 | static const struct file_operations acpi_thermal_state_fops = { |
@@ -711,6 +712,7 @@ static void acpi_thermal_check(void *data) | |||
711 | int result = 0; | 712 | int result = 0; |
712 | struct acpi_thermal *tz = data; | 713 | struct acpi_thermal *tz = data; |
713 | unsigned long sleep_time = 0; | 714 | unsigned long sleep_time = 0; |
715 | unsigned long timeout_jiffies = 0; | ||
714 | int i = 0; | 716 | int i = 0; |
715 | struct acpi_thermal_state state; | 717 | struct acpi_thermal_state state; |
716 | 718 | ||
@@ -720,11 +722,15 @@ static void acpi_thermal_check(void *data) | |||
720 | return; | 722 | return; |
721 | } | 723 | } |
722 | 724 | ||
725 | /* Check if someone else is already running */ | ||
726 | if (!mutex_trylock(&tz->lock)) | ||
727 | return; | ||
728 | |||
723 | state = tz->state; | 729 | state = tz->state; |
724 | 730 | ||
725 | result = acpi_thermal_get_temperature(tz); | 731 | result = acpi_thermal_get_temperature(tz); |
726 | if (result) | 732 | if (result) |
727 | return; | 733 | goto unlock; |
728 | 734 | ||
729 | memset(&tz->state, 0, sizeof(tz->state)); | 735 | memset(&tz->state, 0, sizeof(tz->state)); |
730 | 736 | ||
@@ -787,10 +793,13 @@ static void acpi_thermal_check(void *data) | |||
787 | * a thermal event occurs). Note that _TSP and _TZD values are | 793 | * a thermal event occurs). Note that _TSP and _TZD values are |
788 | * given in 1/10th seconds (we must covert to milliseconds). | 794 | * given in 1/10th seconds (we must covert to milliseconds). |
789 | */ | 795 | */ |
790 | if (tz->state.passive) | 796 | if (tz->state.passive) { |
791 | sleep_time = tz->trips.passive.tsp * 100; | 797 | sleep_time = tz->trips.passive.tsp * 100; |
792 | else if (tz->polling_frequency > 0) | 798 | timeout_jiffies = jiffies + (HZ * sleep_time) / 1000; |
799 | } else if (tz->polling_frequency > 0) { | ||
793 | sleep_time = tz->polling_frequency * 100; | 800 | sleep_time = tz->polling_frequency * 100; |
801 | timeout_jiffies = round_jiffies(jiffies + (HZ * sleep_time) / 1000); | ||
802 | } | ||
794 | 803 | ||
795 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s: temperature[%lu] sleep[%lu]\n", | 804 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s: temperature[%lu] sleep[%lu]\n", |
796 | tz->name, tz->temperature, sleep_time)); | 805 | tz->name, tz->temperature, sleep_time)); |
@@ -804,17 +813,16 @@ static void acpi_thermal_check(void *data) | |||
804 | del_timer(&(tz->timer)); | 813 | del_timer(&(tz->timer)); |
805 | } else { | 814 | } else { |
806 | if (timer_pending(&(tz->timer))) | 815 | if (timer_pending(&(tz->timer))) |
807 | mod_timer(&(tz->timer), | 816 | mod_timer(&(tz->timer), timeout_jiffies); |
808 | jiffies + (HZ * sleep_time) / 1000); | ||
809 | else { | 817 | else { |
810 | tz->timer.data = (unsigned long)tz; | 818 | tz->timer.data = (unsigned long)tz; |
811 | tz->timer.function = acpi_thermal_run; | 819 | tz->timer.function = acpi_thermal_run; |
812 | tz->timer.expires = jiffies + (HZ * sleep_time) / 1000; | 820 | tz->timer.expires = timeout_jiffies; |
813 | add_timer(&(tz->timer)); | 821 | add_timer(&(tz->timer)); |
814 | } | 822 | } |
815 | } | 823 | } |
816 | 824 | unlock: | |
817 | return; | 825 | mutex_unlock(&tz->lock); |
818 | } | 826 | } |
819 | 827 | ||
820 | /* -------------------------------------------------------------------------- | 828 | /* -------------------------------------------------------------------------- |
@@ -1251,7 +1259,7 @@ static int acpi_thermal_add(struct acpi_device *device) | |||
1251 | strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME); | 1259 | strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME); |
1252 | strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS); | 1260 | strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS); |
1253 | acpi_driver_data(device) = tz; | 1261 | acpi_driver_data(device) = tz; |
1254 | 1262 | mutex_init(&tz->lock); | |
1255 | result = acpi_thermal_get_info(tz); | 1263 | result = acpi_thermal_get_info(tz); |
1256 | if (result) | 1264 | if (result) |
1257 | goto end; | 1265 | goto end; |
@@ -1321,7 +1329,7 @@ static int acpi_thermal_remove(struct acpi_device *device, int type) | |||
1321 | } | 1329 | } |
1322 | 1330 | ||
1323 | acpi_thermal_remove_fs(device); | 1331 | acpi_thermal_remove_fs(device); |
1324 | 1332 | mutex_destroy(&tz->lock); | |
1325 | kfree(tz); | 1333 | kfree(tz); |
1326 | return 0; | 1334 | return 0; |
1327 | } | 1335 | } |
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index b8a2095cb5e..bac956b30c5 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c | |||
@@ -409,14 +409,17 @@ acpi_video_device_lcd_query_levels(struct acpi_video_device *device, | |||
409 | static int | 409 | static int |
410 | acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level) | 410 | acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level) |
411 | { | 411 | { |
412 | int status; | 412 | int status = AE_OK; |
413 | union acpi_object arg0 = { ACPI_TYPE_INTEGER }; | 413 | union acpi_object arg0 = { ACPI_TYPE_INTEGER }; |
414 | struct acpi_object_list args = { 1, &arg0 }; | 414 | struct acpi_object_list args = { 1, &arg0 }; |
415 | 415 | ||
416 | 416 | ||
417 | arg0.integer.value = level; | 417 | arg0.integer.value = level; |
418 | status = acpi_evaluate_object(device->dev->handle, "_BCM", &args, NULL); | ||
419 | 418 | ||
419 | if (device->cap._BCM) | ||
420 | status = acpi_evaluate_object(device->dev->handle, "_BCM", | ||
421 | &args, NULL); | ||
422 | device->brightness->curr = level; | ||
420 | return status; | 423 | return status; |
421 | } | 424 | } |
422 | 425 | ||
@@ -424,11 +427,11 @@ static int | |||
424 | acpi_video_device_lcd_get_level_current(struct acpi_video_device *device, | 427 | acpi_video_device_lcd_get_level_current(struct acpi_video_device *device, |
425 | unsigned long *level) | 428 | unsigned long *level) |
426 | { | 429 | { |
427 | int status; | 430 | if (device->cap._BQC) |
428 | 431 | return acpi_evaluate_integer(device->dev->handle, "_BQC", NULL, | |
429 | status = acpi_evaluate_integer(device->dev->handle, "_BQC", NULL, level); | 432 | level); |
430 | 433 | *level = device->brightness->curr; | |
431 | return status; | 434 | return AE_OK; |
432 | } | 435 | } |
433 | 436 | ||
434 | static int | 437 | static int |
@@ -1633,9 +1636,20 @@ static int | |||
1633 | acpi_video_get_next_level(struct acpi_video_device *device, | 1636 | acpi_video_get_next_level(struct acpi_video_device *device, |
1634 | u32 level_current, u32 event) | 1637 | u32 level_current, u32 event) |
1635 | { | 1638 | { |
1636 | int min, max, min_above, max_below, i, l; | 1639 | int min, max, min_above, max_below, i, l, delta = 255; |
1637 | max = max_below = 0; | 1640 | max = max_below = 0; |
1638 | min = min_above = 255; | 1641 | min = min_above = 255; |
1642 | /* Find closest level to level_current */ | ||
1643 | for (i = 0; i < device->brightness->count; i++) { | ||
1644 | l = device->brightness->levels[i]; | ||
1645 | if (abs(l - level_current) < abs(delta)) { | ||
1646 | delta = l - level_current; | ||
1647 | if (!delta) | ||
1648 | break; | ||
1649 | } | ||
1650 | } | ||
1651 | /* Ajust level_current to closest available level */ | ||
1652 | level_current += delta; | ||
1639 | for (i = 0; i < device->brightness->count; i++) { | 1653 | for (i = 0; i < device->brightness->count; i++) { |
1640 | l = device->brightness->levels[i]; | 1654 | l = device->brightness->levels[i]; |
1641 | if (l < min) | 1655 | if (l < min) |
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index 33f5eb03877..ba63619ae5d 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig | |||
@@ -182,6 +182,15 @@ config PATA_ACPI | |||
182 | firmware in the BIOS. This driver can sometimes handle | 182 | firmware in the BIOS. This driver can sometimes handle |
183 | otherwise unsupported hardware. | 183 | otherwise unsupported hardware. |
184 | 184 | ||
185 | config SATA_FSL | ||
186 | tristate "Freescale 3.0Gbps SATA support" | ||
187 | depends on PPC_MPC837x | ||
188 | help | ||
189 | This option enables support for Freescale 3.0Gbps SATA controller. | ||
190 | It can be found on MPC837x and MPC8315. | ||
191 | |||
192 | If unsure, say N. | ||
193 | |||
185 | config PATA_ALI | 194 | config PATA_ALI |
186 | tristate "ALi PATA support (Experimental)" | 195 | tristate "ALi PATA support (Experimental)" |
187 | depends on PCI && EXPERIMENTAL | 196 | depends on PCI && EXPERIMENTAL |
@@ -641,11 +650,4 @@ config PATA_BF54X | |||
641 | 650 | ||
642 | If unsure, say N. | 651 | If unsure, say N. |
643 | 652 | ||
644 | config PATA_BF54X_DMA | ||
645 | bool "DMA mode" | ||
646 | depends on PATA_BF54X | ||
647 | default y | ||
648 | help | ||
649 | Enable DMA mode for Blackfin ATAPI controller. | ||
650 | |||
651 | endif # ATA | 653 | endif # ATA |
diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index 6bdc307649e..b13feb2c5da 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile | |||
@@ -17,6 +17,7 @@ obj-$(CONFIG_SATA_ULI) += sata_uli.o | |||
17 | obj-$(CONFIG_SATA_MV) += sata_mv.o | 17 | obj-$(CONFIG_SATA_MV) += sata_mv.o |
18 | obj-$(CONFIG_SATA_INIC162X) += sata_inic162x.o | 18 | obj-$(CONFIG_SATA_INIC162X) += sata_inic162x.o |
19 | obj-$(CONFIG_PDC_ADMA) += pdc_adma.o | 19 | obj-$(CONFIG_PDC_ADMA) += pdc_adma.o |
20 | obj-$(CONFIG_SATA_FSL) += sata_fsl.o | ||
20 | 21 | ||
21 | obj-$(CONFIG_PATA_ALI) += pata_ali.o | 22 | obj-$(CONFIG_PATA_ALI) += pata_ali.o |
22 | obj-$(CONFIG_PATA_AMD) += pata_amd.o | 23 | obj-$(CONFIG_PATA_AMD) += pata_amd.o |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 10bc3f64c45..47c80604052 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -1479,7 +1479,7 @@ static void ahci_port_intr(struct ata_port *ap) | |||
1479 | return; | 1479 | return; |
1480 | } | 1480 | } |
1481 | 1481 | ||
1482 | /* hmmm... a spurious interupt */ | 1482 | /* hmmm... a spurious interrupt */ |
1483 | 1483 | ||
1484 | /* if !NCQ, ignore. No modern ATA device has broken HSM | 1484 | /* if !NCQ, ignore. No modern ATA device has broken HSM |
1485 | * implementation for non-NCQ commands. | 1485 | * implementation for non-NCQ commands. |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index bbaa545ea99..629eadbd0ec 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -1392,7 +1392,7 @@ static void ata_qc_complete_internal(struct ata_queued_cmd *qc) | |||
1392 | * @tf: Taskfile registers for the command and the result | 1392 | * @tf: Taskfile registers for the command and the result |
1393 | * @cdb: CDB for packet command | 1393 | * @cdb: CDB for packet command |
1394 | * @dma_dir: Data tranfer direction of the command | 1394 | * @dma_dir: Data tranfer direction of the command |
1395 | * @sg: sg list for the data buffer of the command | 1395 | * @sgl: sg list for the data buffer of the command |
1396 | * @n_elem: Number of sg entries | 1396 | * @n_elem: Number of sg entries |
1397 | * @timeout: Timeout in msecs (0 for default) | 1397 | * @timeout: Timeout in msecs (0 for default) |
1398 | * | 1398 | * |
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 026439e05af..8227c45109e 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
@@ -156,7 +156,7 @@ void ata_tf_read(struct ata_port *ap, struct ata_taskfile *tf) | |||
156 | { | 156 | { |
157 | struct ata_ioports *ioaddr = &ap->ioaddr; | 157 | struct ata_ioports *ioaddr = &ap->ioaddr; |
158 | 158 | ||
159 | tf->command = ata_check_status(ap); | 159 | tf->command = ata_chk_status(ap); |
160 | tf->feature = ioread8(ioaddr->error_addr); | 160 | tf->feature = ioread8(ioaddr->error_addr); |
161 | tf->nsect = ioread8(ioaddr->nsect_addr); | 161 | tf->nsect = ioread8(ioaddr->nsect_addr); |
162 | tf->lbal = ioread8(ioaddr->lbal_addr); | 162 | tf->lbal = ioread8(ioaddr->lbal_addr); |
@@ -856,7 +856,7 @@ err_out: | |||
856 | * @pdev: PCI device | 856 | * @pdev: PCI device |
857 | * | 857 | * |
858 | * Some PCI ATA devices report simplex mode but in fact can be told to | 858 | * Some PCI ATA devices report simplex mode but in fact can be told to |
859 | * enter non simplex mode. This implements the neccessary logic to | 859 | * enter non simplex mode. This implements the necessary logic to |
860 | * perform the task on such devices. Calling it on other devices will | 860 | * perform the task on such devices. Calling it on other devices will |
861 | * have -undefined- behaviour. | 861 | * have -undefined- behaviour. |
862 | */ | 862 | */ |
@@ -882,7 +882,7 @@ unsigned long ata_pci_default_filter(struct ata_device *adev, unsigned long xfer | |||
882 | /* Filter out DMA modes if the device has been configured by | 882 | /* Filter out DMA modes if the device has been configured by |
883 | the BIOS as PIO only */ | 883 | the BIOS as PIO only */ |
884 | 884 | ||
885 | if (adev->link->ap->ioaddr.bmdma_addr == 0) | 885 | if (adev->link->ap->ioaddr.bmdma_addr == NULL) |
886 | xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA); | 886 | xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA); |
887 | return xfer_mask; | 887 | return xfer_mask; |
888 | } | 888 | } |
diff --git a/drivers/ata/pata_acpi.c b/drivers/ata/pata_acpi.c index 5d3920f6fd6..0f6f7bcc3de 100644 --- a/drivers/ata/pata_acpi.c +++ b/drivers/ata/pata_acpi.c | |||
@@ -370,8 +370,10 @@ static struct pci_driver pacpi_pci_driver = { | |||
370 | .id_table = pacpi_pci_tbl, | 370 | .id_table = pacpi_pci_tbl, |
371 | .probe = pacpi_init_one, | 371 | .probe = pacpi_init_one, |
372 | .remove = ata_pci_remove_one, | 372 | .remove = ata_pci_remove_one, |
373 | #ifdef CONFIG_PM | ||
373 | .suspend = ata_pci_device_suspend, | 374 | .suspend = ata_pci_device_suspend, |
374 | .resume = ata_pci_device_resume, | 375 | .resume = ata_pci_device_resume, |
376 | #endif | ||
375 | }; | 377 | }; |
376 | 378 | ||
377 | static int __init pacpi_init(void) | 379 | static int __init pacpi_init(void) |
diff --git a/drivers/ata/pata_bf54x.c b/drivers/ata/pata_bf54x.c index 747549e4563..b5e38426b81 100644 --- a/drivers/ata/pata_bf54x.c +++ b/drivers/ata/pata_bf54x.c | |||
@@ -1092,14 +1092,15 @@ static unsigned int bfin_bus_softreset(struct ata_port *ap, | |||
1092 | * Note: Original code is ata_std_softreset(). | 1092 | * Note: Original code is ata_std_softreset(). |
1093 | */ | 1093 | */ |
1094 | 1094 | ||
1095 | static int bfin_std_softreset(struct ata_port *ap, unsigned int *classes, | 1095 | static int bfin_std_softreset(struct ata_link *link, unsigned int *classes, |
1096 | unsigned long deadline) | 1096 | unsigned long deadline) |
1097 | { | 1097 | { |
1098 | struct ata_port *ap = link->ap; | ||
1098 | unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS; | 1099 | unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS; |
1099 | unsigned int devmask = 0, err_mask; | 1100 | unsigned int devmask = 0, err_mask; |
1100 | u8 err; | 1101 | u8 err; |
1101 | 1102 | ||
1102 | if (ata_port_offline(ap)) { | 1103 | if (ata_link_offline(link)) { |
1103 | classes[0] = ATA_DEV_NONE; | 1104 | classes[0] = ATA_DEV_NONE; |
1104 | goto out; | 1105 | goto out; |
1105 | } | 1106 | } |
@@ -1122,9 +1123,11 @@ static int bfin_std_softreset(struct ata_port *ap, unsigned int *classes, | |||
1122 | } | 1123 | } |
1123 | 1124 | ||
1124 | /* determine by signature whether we have ATA or ATAPI devices */ | 1125 | /* determine by signature whether we have ATA or ATAPI devices */ |
1125 | classes[0] = ata_dev_try_classify(ap, 0, &err); | 1126 | classes[0] = ata_dev_try_classify(&ap->link.device[0], |
1127 | devmask & (1 << 0), &err); | ||
1126 | if (slave_possible && err != 0x81) | 1128 | if (slave_possible && err != 0x81) |
1127 | classes[1] = ata_dev_try_classify(ap, 1, &err); | 1129 | classes[1] = ata_dev_try_classify(&ap->link.device[1], |
1130 | devmask & (1 << 1), &err); | ||
1128 | 1131 | ||
1129 | out: | 1132 | out: |
1130 | return 0; | 1133 | return 0; |
@@ -1167,7 +1170,7 @@ static unsigned char bfin_bmdma_status(struct ata_port *ap) | |||
1167 | static void bfin_data_xfer(struct ata_device *adev, unsigned char *buf, | 1170 | static void bfin_data_xfer(struct ata_device *adev, unsigned char *buf, |
1168 | unsigned int buflen, int write_data) | 1171 | unsigned int buflen, int write_data) |
1169 | { | 1172 | { |
1170 | struct ata_port *ap = adev->ap; | 1173 | struct ata_port *ap = adev->link->ap; |
1171 | unsigned int words = buflen >> 1; | 1174 | unsigned int words = buflen >> 1; |
1172 | unsigned short *buf16 = (u16 *) buf; | 1175 | unsigned short *buf16 = (u16 *) buf; |
1173 | void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr; | 1176 | void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr; |
@@ -1206,7 +1209,10 @@ static void bfin_irq_clear(struct ata_port *ap) | |||
1206 | void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr; | 1209 | void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr; |
1207 | 1210 | ||
1208 | pr_debug("in atapi irq clear\n"); | 1211 | pr_debug("in atapi irq clear\n"); |
1209 | ATAPI_SET_INT_STATUS(base, 0x1FF); | 1212 | |
1213 | ATAPI_SET_INT_STATUS(base, ATAPI_GET_INT_STATUS(base)|ATAPI_DEV_INT | ||
1214 | | MULTI_DONE_INT | UDMAIN_DONE_INT | UDMAOUT_DONE_INT | ||
1215 | | MULTI_TERM_INT | UDMAIN_TERM_INT | UDMAOUT_TERM_INT); | ||
1210 | } | 1216 | } |
1211 | 1217 | ||
1212 | /** | 1218 | /** |
@@ -1234,33 +1240,6 @@ static unsigned char bfin_irq_on(struct ata_port *ap) | |||
1234 | } | 1240 | } |
1235 | 1241 | ||
1236 | /** | 1242 | /** |
1237 | * bfin_irq_ack - Acknowledge a device interrupt. | ||
1238 | * @ap: Port on which interrupts are enabled. | ||
1239 | * | ||
1240 | * Note: Original code is ata_irq_ack(). | ||
1241 | */ | ||
1242 | |||
1243 | static unsigned char bfin_irq_ack(struct ata_port *ap, unsigned int chk_drq) | ||
1244 | { | ||
1245 | void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr; | ||
1246 | unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY; | ||
1247 | unsigned char status; | ||
1248 | |||
1249 | pr_debug("in atapi irq ack\n"); | ||
1250 | status = ata_busy_wait(ap, bits, 1000); | ||
1251 | if (status & bits) | ||
1252 | if (ata_msg_err(ap)) | ||
1253 | dev_err(ap->dev, "abnormal status 0x%X\n", status); | ||
1254 | |||
1255 | /* get controller status; clear intr, err bits */ | ||
1256 | ATAPI_SET_INT_STATUS(base, ATAPI_GET_INT_STATUS(base)|ATAPI_DEV_INT | ||
1257 | | MULTI_DONE_INT | UDMAIN_DONE_INT | UDMAOUT_DONE_INT | ||
1258 | | MULTI_TERM_INT | UDMAIN_TERM_INT | UDMAOUT_TERM_INT); | ||
1259 | |||
1260 | return bfin_bmdma_status(ap); | ||
1261 | } | ||
1262 | |||
1263 | /** | ||
1264 | * bfin_bmdma_freeze - Freeze DMA controller port | 1243 | * bfin_bmdma_freeze - Freeze DMA controller port |
1265 | * @ap: port to freeze | 1244 | * @ap: port to freeze |
1266 | * | 1245 | * |
@@ -1308,8 +1287,9 @@ void bfin_bmdma_thaw(struct ata_port *ap) | |||
1308 | * Note: Original code is ata_std_postreset(). | 1287 | * Note: Original code is ata_std_postreset(). |
1309 | */ | 1288 | */ |
1310 | 1289 | ||
1311 | static void bfin_std_postreset(struct ata_port *ap, unsigned int *classes) | 1290 | static void bfin_std_postreset(struct ata_link *link, unsigned int *classes) |
1312 | { | 1291 | { |
1292 | struct ata_port *ap = link->ap; | ||
1313 | void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr; | 1293 | void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr; |
1314 | 1294 | ||
1315 | /* re-enable interrupts */ | 1295 | /* re-enable interrupts */ |
@@ -1395,7 +1375,6 @@ static struct scsi_host_template bfin_sht = { | |||
1395 | }; | 1375 | }; |
1396 | 1376 | ||
1397 | static const struct ata_port_operations bfin_pata_ops = { | 1377 | static const struct ata_port_operations bfin_pata_ops = { |
1398 | .port_disable = ata_port_disable, | ||
1399 | .set_piomode = bfin_set_piomode, | 1378 | .set_piomode = bfin_set_piomode, |
1400 | .set_dmamode = bfin_set_dmamode, | 1379 | .set_dmamode = bfin_set_dmamode, |
1401 | 1380 | ||
@@ -1423,7 +1402,6 @@ static const struct ata_port_operations bfin_pata_ops = { | |||
1423 | .irq_handler = ata_interrupt, | 1402 | .irq_handler = ata_interrupt, |
1424 | .irq_clear = bfin_irq_clear, | 1403 | .irq_clear = bfin_irq_clear, |
1425 | .irq_on = bfin_irq_on, | 1404 | .irq_on = bfin_irq_on, |
1426 | .irq_ack = bfin_irq_ack, | ||
1427 | 1405 | ||
1428 | .port_start = bfin_port_start, | 1406 | .port_start = bfin_port_start, |
1429 | .port_stop = bfin_port_stop, | 1407 | .port_stop = bfin_port_stop, |
@@ -1437,11 +1415,7 @@ static struct ata_port_info bfin_port_info[] = { | |||
1437 | | ATA_FLAG_NO_LEGACY, | 1415 | | ATA_FLAG_NO_LEGACY, |
1438 | .pio_mask = 0x1f, /* pio0-4 */ | 1416 | .pio_mask = 0x1f, /* pio0-4 */ |
1439 | .mwdma_mask = 0, | 1417 | .mwdma_mask = 0, |
1440 | #ifdef CONFIG_PATA_BF54X_DMA | ||
1441 | .udma_mask = ATA_UDMA5, | ||
1442 | #else | ||
1443 | .udma_mask = 0, | 1418 | .udma_mask = 0, |
1444 | #endif | ||
1445 | .port_ops = &bfin_pata_ops, | 1419 | .port_ops = &bfin_pata_ops, |
1446 | }, | 1420 | }, |
1447 | }; | 1421 | }; |
@@ -1607,9 +1581,25 @@ static struct platform_driver bfin_atapi_driver = { | |||
1607 | }, | 1581 | }, |
1608 | }; | 1582 | }; |
1609 | 1583 | ||
1584 | #define ATAPI_MODE_SIZE 10 | ||
1585 | static char bfin_atapi_mode[ATAPI_MODE_SIZE]; | ||
1586 | |||
1610 | static int __init bfin_atapi_init(void) | 1587 | static int __init bfin_atapi_init(void) |
1611 | { | 1588 | { |
1612 | pr_info("register bfin atapi driver\n"); | 1589 | pr_info("register bfin atapi driver\n"); |
1590 | |||
1591 | switch(bfin_atapi_mode[0]) { | ||
1592 | case 'p': | ||
1593 | case 'P': | ||
1594 | break; | ||
1595 | case 'm': | ||
1596 | case 'M': | ||
1597 | bfin_port_info[0].mwdma_mask = ATA_MWDMA2; | ||
1598 | break; | ||
1599 | default: | ||
1600 | bfin_port_info[0].udma_mask = ATA_UDMA5; | ||
1601 | }; | ||
1602 | |||
1613 | return platform_driver_register(&bfin_atapi_driver); | 1603 | return platform_driver_register(&bfin_atapi_driver); |
1614 | } | 1604 | } |
1615 | 1605 | ||
@@ -1620,6 +1610,13 @@ static void __exit bfin_atapi_exit(void) | |||
1620 | 1610 | ||
1621 | module_init(bfin_atapi_init); | 1611 | module_init(bfin_atapi_init); |
1622 | module_exit(bfin_atapi_exit); | 1612 | module_exit(bfin_atapi_exit); |
1613 | /* | ||
1614 | * ATAPI mode: | ||
1615 | * pio/PIO | ||
1616 | * udma/UDMA (default) | ||
1617 | * mwdma/MWDMA | ||
1618 | */ | ||
1619 | module_param_string(bfin_atapi_mode, bfin_atapi_mode, ATAPI_MODE_SIZE, 0); | ||
1623 | 1620 | ||
1624 | MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>"); | 1621 | MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>"); |
1625 | MODULE_DESCRIPTION("PATA driver for blackfin 54x ATAPI controller"); | 1622 | MODULE_DESCRIPTION("PATA driver for blackfin 54x ATAPI controller"); |
diff --git a/drivers/ata/pata_cmd64x.c b/drivers/ata/pata_cmd64x.c index 9e412c26b2a..7acbbd9ee46 100644 --- a/drivers/ata/pata_cmd64x.c +++ b/drivers/ata/pata_cmd64x.c | |||
@@ -215,7 +215,7 @@ static void cmd64x_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
215 | regU &= ~(0x05 << adev->devno); | 215 | regU &= ~(0x05 << adev->devno); |
216 | 216 | ||
217 | if (adev->dma_mode >= XFER_UDMA_0) { | 217 | if (adev->dma_mode >= XFER_UDMA_0) { |
218 | /* Merge thge timing value */ | 218 | /* Merge the timing value */ |
219 | regU |= udma_data[adev->dma_mode - XFER_UDMA_0] << shift; | 219 | regU |= udma_data[adev->dma_mode - XFER_UDMA_0] << shift; |
220 | /* Merge the control bits */ | 220 | /* Merge the control bits */ |
221 | regU |= 1 << adev->devno; /* UDMA on */ | 221 | regU |= 1 << adev->devno; /* UDMA on */ |
diff --git a/drivers/ata/pata_cs5530.c b/drivers/ata/pata_cs5530.c index 57e827e4109..e1818fdd915 100644 --- a/drivers/ata/pata_cs5530.c +++ b/drivers/ata/pata_cs5530.c | |||
@@ -138,7 +138,7 @@ static void cs5530_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
138 | * | 138 | * |
139 | * Called when the libata layer is about to issue a command. We wrap | 139 | * Called when the libata layer is about to issue a command. We wrap |
140 | * this interface so that we can load the correct ATA timings if | 140 | * this interface so that we can load the correct ATA timings if |
141 | * neccessary. Specifically we have a problem that there is only | 141 | * necessary. Specifically we have a problem that there is only |
142 | * one MWDMA/UDMA bit. | 142 | * one MWDMA/UDMA bit. |
143 | */ | 143 | */ |
144 | 144 | ||
diff --git a/drivers/ata/pata_cs5535.c b/drivers/ata/pata_cs5535.c index 3578593a882..01324530d05 100644 --- a/drivers/ata/pata_cs5535.c +++ b/drivers/ata/pata_cs5535.c | |||
@@ -25,7 +25,7 @@ | |||
25 | * Documentation: | 25 | * Documentation: |
26 | * Available from AMD web site. | 26 | * Available from AMD web site. |
27 | * TODO | 27 | * TODO |
28 | * Review errata to see if serializing is neccessary | 28 | * Review errata to see if serializing is necessary |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/kernel.h> | 31 | #include <linux/kernel.h> |
diff --git a/drivers/ata/pata_cs5536.c b/drivers/ata/pata_cs5536.c index 53070f6b1fc..d753e568588 100644 --- a/drivers/ata/pata_cs5536.c +++ b/drivers/ata/pata_cs5536.c | |||
@@ -40,7 +40,7 @@ | |||
40 | #include <asm/msr.h> | 40 | #include <asm/msr.h> |
41 | 41 | ||
42 | #define DRV_NAME "pata_cs5536" | 42 | #define DRV_NAME "pata_cs5536" |
43 | #define DRV_VERSION "0.0.5" | 43 | #define DRV_VERSION "0.0.6" |
44 | 44 | ||
45 | enum { | 45 | enum { |
46 | CFG = 0, | 46 | CFG = 0, |
@@ -214,7 +214,7 @@ static void cs5536_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
214 | cs5536_read(pdev, DTC, &dtc); | 214 | cs5536_read(pdev, DTC, &dtc); |
215 | 215 | ||
216 | dtc &= ~(IDE_DRV_MASK << dshift); | 216 | dtc &= ~(IDE_DRV_MASK << dshift); |
217 | dtc |= mwdma_timings[mode] << dshift; | 217 | dtc |= mwdma_timings[mode - XFER_MW_DMA_0] << dshift; |
218 | 218 | ||
219 | cs5536_write(pdev, DTC, dtc); | 219 | cs5536_write(pdev, DTC, dtc); |
220 | } | 220 | } |
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c index 988ef736b93..ca9aae09dae 100644 --- a/drivers/ata/pata_it821x.c +++ b/drivers/ata/pata_it821x.c | |||
@@ -105,7 +105,7 @@ struct it821x_dev | |||
105 | 105 | ||
106 | /* | 106 | /* |
107 | * We allow users to force the card into non raid mode without | 107 | * We allow users to force the card into non raid mode without |
108 | * flashing the alternative BIOS. This is also neccessary right now | 108 | * flashing the alternative BIOS. This is also necessary right now |
109 | * for embedded platforms that cannot run a PC BIOS but are using this | 109 | * for embedded platforms that cannot run a PC BIOS but are using this |
110 | * device. | 110 | * device. |
111 | */ | 111 | */ |
@@ -383,7 +383,7 @@ static void it821x_passthru_bmdma_stop(struct ata_queued_cmd *qc) | |||
383 | * @ap: ATA port | 383 | * @ap: ATA port |
384 | * @device: Device number (not pointer) | 384 | * @device: Device number (not pointer) |
385 | * | 385 | * |
386 | * Device selection hook. If neccessary perform clock switching | 386 | * Device selection hook. If necessary perform clock switching |
387 | */ | 387 | */ |
388 | 388 | ||
389 | static void it821x_passthru_dev_select(struct ata_port *ap, | 389 | static void it821x_passthru_dev_select(struct ata_port *ap, |
diff --git a/drivers/ata/pata_mpiix.c b/drivers/ata/pata_mpiix.c index d5483087a3f..c0d9e0cf208 100644 --- a/drivers/ata/pata_mpiix.c +++ b/drivers/ata/pata_mpiix.c | |||
@@ -129,7 +129,7 @@ static void mpiix_set_piomode(struct ata_port *ap, struct ata_device *adev) | |||
129 | * | 129 | * |
130 | * Called when the libata layer is about to issue a command. We wrap | 130 | * Called when the libata layer is about to issue a command. We wrap |
131 | * this interface so that we can load the correct ATA timings if | 131 | * this interface so that we can load the correct ATA timings if |
132 | * neccessary. Our logic also clears TIME0/TIME1 for the other device so | 132 | * necessary. Our logic also clears TIME0/TIME1 for the other device so |
133 | * that, even if we get this wrong, cycles to the other device will | 133 | * that, even if we get this wrong, cycles to the other device will |
134 | * be made PIO0. | 134 | * be made PIO0. |
135 | */ | 135 | */ |
diff --git a/drivers/ata/pata_ns87410.c b/drivers/ata/pata_ns87410.c index 6e8e55745b7..9fe66fd7501 100644 --- a/drivers/ata/pata_ns87410.c +++ b/drivers/ata/pata_ns87410.c | |||
@@ -124,7 +124,7 @@ static void ns87410_set_piomode(struct ata_port *ap, struct ata_device *adev) | |||
124 | * | 124 | * |
125 | * Called when the libata layer is about to issue a command. We wrap | 125 | * Called when the libata layer is about to issue a command. We wrap |
126 | * this interface so that we can load the correct ATA timings if | 126 | * this interface so that we can load the correct ATA timings if |
127 | * neccessary. | 127 | * necessary. |
128 | */ | 128 | */ |
129 | 129 | ||
130 | static unsigned int ns87410_qc_issue_prot(struct ata_queued_cmd *qc) | 130 | static unsigned int ns87410_qc_issue_prot(struct ata_queued_cmd *qc) |
diff --git a/drivers/ata/pata_oldpiix.c b/drivers/ata/pata_oldpiix.c index 3cd5eb2b6c9..44da09ace52 100644 --- a/drivers/ata/pata_oldpiix.c +++ b/drivers/ata/pata_oldpiix.c | |||
@@ -200,7 +200,7 @@ static void oldpiix_set_dmamode (struct ata_port *ap, struct ata_device *adev) | |||
200 | * | 200 | * |
201 | * Called when the libata layer is about to issue a command. We wrap | 201 | * Called when the libata layer is about to issue a command. We wrap |
202 | * this interface so that we can load the correct ATA timings if | 202 | * this interface so that we can load the correct ATA timings if |
203 | * neccessary. Our logic also clears TIME0/TIME1 for the other device so | 203 | * necessary. Our logic also clears TIME0/TIME1 for the other device so |
204 | * that, even if we get this wrong, cycles to the other device will | 204 | * that, even if we get this wrong, cycles to the other device will |
205 | * be made PIO0. | 205 | * be made PIO0. |
206 | */ | 206 | */ |
diff --git a/drivers/ata/pata_radisys.c b/drivers/ata/pata_radisys.c index d5b76497f4a..8109b08fc02 100644 --- a/drivers/ata/pata_radisys.c +++ b/drivers/ata/pata_radisys.c | |||
@@ -161,7 +161,7 @@ static void radisys_set_dmamode (struct ata_port *ap, struct ata_device *adev) | |||
161 | * | 161 | * |
162 | * Called when the libata layer is about to issue a command. We wrap | 162 | * Called when the libata layer is about to issue a command. We wrap |
163 | * this interface so that we can load the correct ATA timings if | 163 | * this interface so that we can load the correct ATA timings if |
164 | * neccessary. Our logic also clears TIME0/TIME1 for the other device so | 164 | * necessary. Our logic also clears TIME0/TIME1 for the other device so |
165 | * that, even if we get this wrong, cycles to the other device will | 165 | * that, even if we get this wrong, cycles to the other device will |
166 | * be made PIO0. | 166 | * be made PIO0. |
167 | */ | 167 | */ |
diff --git a/drivers/ata/pata_sc1200.c b/drivers/ata/pata_sc1200.c index 21ebc485ca4..725a8586cd6 100644 --- a/drivers/ata/pata_sc1200.c +++ b/drivers/ata/pata_sc1200.c | |||
@@ -156,7 +156,7 @@ static void sc1200_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
156 | * | 156 | * |
157 | * Called when the libata layer is about to issue a command. We wrap | 157 | * Called when the libata layer is about to issue a command. We wrap |
158 | * this interface so that we can load the correct ATA timings if | 158 | * this interface so that we can load the correct ATA timings if |
159 | * neccessary. Specifically we have a problem that there is only | 159 | * necessary. Specifically we have a problem that there is only |
160 | * one MWDMA/UDMA bit. | 160 | * one MWDMA/UDMA bit. |
161 | */ | 161 | */ |
162 | 162 | ||
diff --git a/drivers/ata/pata_sil680.c b/drivers/ata/pata_sil680.c index 4dc2e73298f..5c1e9cb59ec 100644 --- a/drivers/ata/pata_sil680.c +++ b/drivers/ata/pata_sil680.c | |||
@@ -16,7 +16,7 @@ | |||
16 | * | 16 | * |
17 | * If you have strange problems with nVidia chipset systems please | 17 | * If you have strange problems with nVidia chipset systems please |
18 | * see the SI support documentation and update your system BIOS | 18 | * see the SI support documentation and update your system BIOS |
19 | * if neccessary | 19 | * if necessary |
20 | * | 20 | * |
21 | * TODO | 21 | * TODO |
22 | * If we know all our devices are LBA28 (or LBA28 sized) we could use | 22 | * If we know all our devices are LBA28 (or LBA28 sized) we could use |
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index 5d41b6612d7..ea7a9a652e6 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c | |||
@@ -420,7 +420,7 @@ static struct ata_port_operations via_port_ops_noirq = { | |||
420 | * @pdev: PCI device | 420 | * @pdev: PCI device |
421 | * @flags: configuration flags | 421 | * @flags: configuration flags |
422 | * | 422 | * |
423 | * Set the FIFO properties for this device if neccessary. Used both on | 423 | * Set the FIFO properties for this device if necessary. Used both on |
424 | * set up and on and the resume path | 424 | * set up and on and the resume path |
425 | */ | 425 | */ |
426 | 426 | ||
diff --git a/drivers/ata/pdc_adma.c b/drivers/ata/pdc_adma.c index 8d1b03d5bcb..199f7e150eb 100644 --- a/drivers/ata/pdc_adma.c +++ b/drivers/ata/pdc_adma.c | |||
@@ -318,7 +318,7 @@ static int adma_fill_sg(struct ata_queued_cmd *qc) | |||
318 | struct scatterlist *sg; | 318 | struct scatterlist *sg; |
319 | struct ata_port *ap = qc->ap; | 319 | struct ata_port *ap = qc->ap; |
320 | struct adma_port_priv *pp = ap->private_data; | 320 | struct adma_port_priv *pp = ap->private_data; |
321 | u8 *buf = pp->pkt; | 321 | u8 *buf = pp->pkt, *last_buf = NULL; |
322 | int i = (2 + buf[3]) * 8; | 322 | int i = (2 + buf[3]) * 8; |
323 | u8 pFLAGS = pORD | ((qc->tf.flags & ATA_TFLAG_WRITE) ? pDIRO : 0); | 323 | u8 pFLAGS = pORD | ((qc->tf.flags & ATA_TFLAG_WRITE) ? pDIRO : 0); |
324 | 324 | ||
@@ -334,8 +334,7 @@ static int adma_fill_sg(struct ata_queued_cmd *qc) | |||
334 | *(__le32 *)(buf + i) = cpu_to_le32(len); | 334 | *(__le32 *)(buf + i) = cpu_to_le32(len); |
335 | i += 4; | 335 | i += 4; |
336 | 336 | ||
337 | if (ata_sg_is_last(sg, qc)) | 337 | last_buf = &buf[i]; |
338 | pFLAGS |= pEND; | ||
339 | buf[i++] = pFLAGS; | 338 | buf[i++] = pFLAGS; |
340 | buf[i++] = qc->dev->dma_mode & 0xf; | 339 | buf[i++] = qc->dev->dma_mode & 0xf; |
341 | buf[i++] = 0; /* pPKLW */ | 340 | buf[i++] = 0; /* pPKLW */ |
@@ -348,6 +347,10 @@ static int adma_fill_sg(struct ata_queued_cmd *qc) | |||
348 | VPRINTK("PRD[%u] = (0x%lX, 0x%X)\n", i/4, | 347 | VPRINTK("PRD[%u] = (0x%lX, 0x%X)\n", i/4, |
349 | (unsigned long)addr, len); | 348 | (unsigned long)addr, len); |
350 | } | 349 | } |
350 | |||
351 | if (likely(last_buf)) | ||
352 | *last_buf |= pEND; | ||
353 | |||
351 | return i; | 354 | return i; |
352 | } | 355 | } |
353 | 356 | ||
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c new file mode 100644 index 00000000000..b4c37b9e413 --- /dev/null +++ b/drivers/ata/sata_fsl.c | |||
@@ -0,0 +1,1490 @@ | |||
1 | /* | ||
2 | * drivers/ata/sata_fsl.c | ||
3 | * | ||
4 | * Freescale 3.0Gbps SATA device driver | ||
5 | * | ||
6 | * Author: Ashish Kalra <ashish.kalra@freescale.com> | ||
7 | * Li Yang <leoli@freescale.com> | ||
8 | * | ||
9 | * Copyright (c) 2006-2007 Freescale Semiconductor, Inc. | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify it | ||
12 | * under the terms of the GNU General Public License as published by the | ||
13 | * Free Software Foundation; either version 2 of the License, or (at your | ||
14 | * option) any later version. | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | #include <linux/kernel.h> | ||
19 | #include <linux/module.h> | ||
20 | #include <linux/platform_device.h> | ||
21 | |||
22 | #include <scsi/scsi_host.h> | ||
23 | #include <scsi/scsi_cmnd.h> | ||
24 | #include <linux/libata.h> | ||
25 | #include <asm/io.h> | ||
26 | #include <linux/of_platform.h> | ||
27 | |||
28 | /* Controller information */ | ||
29 | enum { | ||
30 | SATA_FSL_QUEUE_DEPTH = 16, | ||
31 | SATA_FSL_MAX_PRD = 63, | ||
32 | SATA_FSL_MAX_PRD_USABLE = SATA_FSL_MAX_PRD - 1, | ||
33 | SATA_FSL_MAX_PRD_DIRECT = 16, /* Direct PRDT entries */ | ||
34 | |||
35 | SATA_FSL_HOST_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | ||
36 | ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | | ||
37 | ATA_FLAG_NCQ | ATA_FLAG_SKIP_D2H_BSY), | ||
38 | |||
39 | SATA_FSL_MAX_CMDS = SATA_FSL_QUEUE_DEPTH, | ||
40 | SATA_FSL_CMD_HDR_SIZE = 16, /* 4 DWORDS */ | ||
41 | SATA_FSL_CMD_SLOT_SIZE = (SATA_FSL_MAX_CMDS * SATA_FSL_CMD_HDR_SIZE), | ||
42 | |||
43 | /* | ||
44 | * SATA-FSL host controller supports a max. of (15+1) direct PRDEs, and | ||
45 | * chained indirect PRDEs upto a max count of 63. | ||
46 | * We are allocating an array of 63 PRDEs contigiously, but PRDE#15 will | ||
47 | * be setup as an indirect descriptor, pointing to it's next | ||
48 | * (contigious) PRDE. Though chained indirect PRDE arrays are | ||
49 | * supported,it will be more efficient to use a direct PRDT and | ||
50 | * a single chain/link to indirect PRDE array/PRDT. | ||
51 | */ | ||
52 | |||
53 | SATA_FSL_CMD_DESC_CFIS_SZ = 32, | ||
54 | SATA_FSL_CMD_DESC_SFIS_SZ = 32, | ||
55 | SATA_FSL_CMD_DESC_ACMD_SZ = 16, | ||
56 | SATA_FSL_CMD_DESC_RSRVD = 16, | ||
57 | |||
58 | SATA_FSL_CMD_DESC_SIZE = (SATA_FSL_CMD_DESC_CFIS_SZ + | ||
59 | SATA_FSL_CMD_DESC_SFIS_SZ + | ||
60 | SATA_FSL_CMD_DESC_ACMD_SZ + | ||
61 | SATA_FSL_CMD_DESC_RSRVD + | ||
62 | SATA_FSL_MAX_PRD * 16), | ||
63 | |||
64 | SATA_FSL_CMD_DESC_OFFSET_TO_PRDT = | ||
65 | (SATA_FSL_CMD_DESC_CFIS_SZ + | ||
66 | SATA_FSL_CMD_DESC_SFIS_SZ + | ||
67 | SATA_FSL_CMD_DESC_ACMD_SZ + | ||
68 | SATA_FSL_CMD_DESC_RSRVD), | ||
69 | |||
70 | SATA_FSL_CMD_DESC_AR_SZ = (SATA_FSL_CMD_DESC_SIZE * SATA_FSL_MAX_CMDS), | ||
71 | SATA_FSL_PORT_PRIV_DMA_SZ = (SATA_FSL_CMD_SLOT_SIZE + | ||
72 | SATA_FSL_CMD_DESC_AR_SZ), | ||
73 | |||
74 | /* | ||
75 | * MPC8315 has two SATA controllers, SATA1 & SATA2 | ||
76 | * (one port per controller) | ||
77 | * MPC837x has 2/4 controllers, one port per controller | ||
78 | */ | ||
79 | |||
80 | SATA_FSL_MAX_PORTS = 1, | ||
81 | |||
82 | SATA_FSL_IRQ_FLAG = IRQF_SHARED, | ||
83 | }; | ||
84 | |||
85 | /* | ||
86 | * Host Controller command register set - per port | ||
87 | */ | ||
88 | enum { | ||
89 | CQ = 0, | ||
90 | CA = 8, | ||
91 | CC = 0x10, | ||
92 | CE = 0x18, | ||
93 | DE = 0x20, | ||
94 | CHBA = 0x24, | ||
95 | HSTATUS = 0x28, | ||
96 | HCONTROL = 0x2C, | ||
97 | CQPMP = 0x30, | ||
98 | SIGNATURE = 0x34, | ||
99 | ICC = 0x38, | ||
100 | |||
101 | /* | ||
102 | * Host Status Register (HStatus) bitdefs | ||
103 | */ | ||
104 | ONLINE = (1 << 31), | ||
105 | GOING_OFFLINE = (1 << 30), | ||
106 | BIST_ERR = (1 << 29), | ||
107 | |||
108 | FATAL_ERR_HC_MASTER_ERR = (1 << 18), | ||
109 | FATAL_ERR_PARITY_ERR_TX = (1 << 17), | ||
110 | FATAL_ERR_PARITY_ERR_RX = (1 << 16), | ||
111 | FATAL_ERR_DATA_UNDERRUN = (1 << 13), | ||
112 | FATAL_ERR_DATA_OVERRUN = (1 << 12), | ||
113 | FATAL_ERR_CRC_ERR_TX = (1 << 11), | ||
114 | FATAL_ERR_CRC_ERR_RX = (1 << 10), | ||
115 | FATAL_ERR_FIFO_OVRFL_TX = (1 << 9), | ||
116 | FATAL_ERR_FIFO_OVRFL_RX = (1 << 8), | ||
117 | |||
118 | FATAL_ERROR_DECODE = FATAL_ERR_HC_MASTER_ERR | | ||
119 | FATAL_ERR_PARITY_ERR_TX | | ||
120 | FATAL_ERR_PARITY_ERR_RX | | ||
121 | FATAL_ERR_DATA_UNDERRUN | | ||
122 | FATAL_ERR_DATA_OVERRUN | | ||
123 | FATAL_ERR_CRC_ERR_TX | | ||
124 | FATAL_ERR_CRC_ERR_RX | | ||
125 | FATAL_ERR_FIFO_OVRFL_TX | FATAL_ERR_FIFO_OVRFL_RX, | ||
126 | |||
127 | INT_ON_FATAL_ERR = (1 << 5), | ||
128 | INT_ON_PHYRDY_CHG = (1 << 4), | ||
129 | |||
130 | INT_ON_SIGNATURE_UPDATE = (1 << 3), | ||
131 | INT_ON_SNOTIFY_UPDATE = (1 << 2), | ||
132 | INT_ON_SINGL_DEVICE_ERR = (1 << 1), | ||
133 | INT_ON_CMD_COMPLETE = 1, | ||
134 | |||
135 | INT_ON_ERROR = INT_ON_FATAL_ERR | | ||
136 | INT_ON_PHYRDY_CHG | INT_ON_SINGL_DEVICE_ERR, | ||
137 | |||
138 | /* | ||
139 | * Host Control Register (HControl) bitdefs | ||
140 | */ | ||
141 | HCONTROL_ONLINE_PHY_RST = (1 << 31), | ||
142 | HCONTROL_FORCE_OFFLINE = (1 << 30), | ||
143 | HCONTROL_PARITY_PROT_MOD = (1 << 14), | ||
144 | HCONTROL_DPATH_PARITY = (1 << 12), | ||
145 | HCONTROL_SNOOP_ENABLE = (1 << 10), | ||
146 | HCONTROL_PMP_ATTACHED = (1 << 9), | ||
147 | HCONTROL_COPYOUT_STATFIS = (1 << 8), | ||
148 | IE_ON_FATAL_ERR = (1 << 5), | ||
149 | IE_ON_PHYRDY_CHG = (1 << 4), | ||
150 | IE_ON_SIGNATURE_UPDATE = (1 << 3), | ||
151 | IE_ON_SNOTIFY_UPDATE = (1 << 2), | ||
152 | IE_ON_SINGL_DEVICE_ERR = (1 << 1), | ||
153 | IE_ON_CMD_COMPLETE = 1, | ||
154 | |||
155 | DEFAULT_PORT_IRQ_ENABLE_MASK = IE_ON_FATAL_ERR | IE_ON_PHYRDY_CHG | | ||
156 | IE_ON_SIGNATURE_UPDATE | | ||
157 | IE_ON_SINGL_DEVICE_ERR | IE_ON_CMD_COMPLETE, | ||
158 | |||
159 | EXT_INDIRECT_SEG_PRD_FLAG = (1 << 31), | ||
160 | DATA_SNOOP_ENABLE = (1 << 22), | ||
161 | }; | ||
162 | |||
163 | /* | ||
164 | * SATA Superset Registers | ||
165 | */ | ||
166 | enum { | ||
167 | SSTATUS = 0, | ||
168 | SERROR = 4, | ||
169 | SCONTROL = 8, | ||
170 | SNOTIFY = 0xC, | ||
171 | }; | ||
172 | |||
173 | /* | ||
174 | * Control Status Register Set | ||
175 | */ | ||
176 | enum { | ||
177 | TRANSCFG = 0, | ||
178 | TRANSSTATUS = 4, | ||
179 | LINKCFG = 8, | ||
180 | LINKCFG1 = 0xC, | ||
181 | LINKCFG2 = 0x10, | ||
182 | LINKSTATUS = 0x14, | ||
183 | LINKSTATUS1 = 0x18, | ||
184 | PHYCTRLCFG = 0x1C, | ||
185 | COMMANDSTAT = 0x20, | ||
186 | }; | ||
187 | |||
188 | /* PHY (link-layer) configuration control */ | ||
189 | enum { | ||
190 | PHY_BIST_ENABLE = 0x01, | ||
191 | }; | ||
192 | |||
193 | /* | ||
194 | * Command Header Table entry, i.e, command slot | ||
195 | * 4 Dwords per command slot, command header size == 64 Dwords. | ||
196 | */ | ||
197 | struct cmdhdr_tbl_entry { | ||
198 | u32 cda; | ||
199 | u32 prde_fis_len; | ||
200 | u32 ttl; | ||
201 | u32 desc_info; | ||
202 | }; | ||
203 | |||
204 | /* | ||
205 | * Description information bitdefs | ||
206 | */ | ||
207 | enum { | ||
208 | VENDOR_SPECIFIC_BIST = (1 << 10), | ||
209 | CMD_DESC_SNOOP_ENABLE = (1 << 9), | ||
210 | FPDMA_QUEUED_CMD = (1 << 8), | ||
211 | SRST_CMD = (1 << 7), | ||
212 | BIST = (1 << 6), | ||
213 | ATAPI_CMD = (1 << 5), | ||
214 | }; | ||
215 | |||
216 | /* | ||
217 | * Command Descriptor | ||
218 | */ | ||
219 | struct command_desc { | ||
220 | u8 cfis[8 * 4]; | ||
221 | u8 sfis[8 * 4]; | ||
222 | u8 acmd[4 * 4]; | ||
223 | u8 fill[4 * 4]; | ||
224 | u32 prdt[SATA_FSL_MAX_PRD_DIRECT * 4]; | ||
225 | u32 prdt_indirect[(SATA_FSL_MAX_PRD - SATA_FSL_MAX_PRD_DIRECT) * 4]; | ||
226 | }; | ||
227 | |||
228 | /* | ||
229 | * Physical region table descriptor(PRD) | ||
230 | */ | ||
231 | |||
232 | struct prde { | ||
233 | u32 dba; | ||
234 | u8 fill[2 * 4]; | ||
235 | u32 ddc_and_ext; | ||
236 | }; | ||
237 | |||
238 | /* | ||
239 | * ata_port private data | ||
240 | * This is our per-port instance data. | ||
241 | */ | ||
242 | struct sata_fsl_port_priv { | ||
243 | struct cmdhdr_tbl_entry *cmdslot; | ||
244 | dma_addr_t cmdslot_paddr; | ||
245 | struct command_desc *cmdentry; | ||
246 | dma_addr_t cmdentry_paddr; | ||
247 | |||
248 | /* | ||
249 | * SATA FSL controller has a Status FIS which should contain the | ||
250 | * received D2H FIS & taskfile registers. This SFIS is present in | ||
251 | * the command descriptor, and to have a ready reference to it, | ||
252 | * we are caching it here, quite similar to what is done in H/W on | ||
253 | * AHCI compliant devices by copying taskfile fields to a 32-bit | ||
254 | * register. | ||
255 | */ | ||
256 | |||
257 | struct ata_taskfile tf; | ||
258 | }; | ||
259 | |||
260 | /* | ||
261 | * ata_port->host_set private data | ||
262 | */ | ||
263 | struct sata_fsl_host_priv { | ||
264 | void __iomem *hcr_base; | ||
265 | void __iomem *ssr_base; | ||
266 | void __iomem *csr_base; | ||
267 | }; | ||
268 | |||
269 | static inline unsigned int sata_fsl_tag(unsigned int tag, | ||
270 | void __iomem * hcr_base) | ||
271 | { | ||
272 | /* We let libATA core do actual (queue) tag allocation */ | ||
273 | |||
274 | /* all non NCQ/queued commands should have tag#0 */ | ||
275 | if (ata_tag_internal(tag)) { | ||
276 | DPRINTK("mapping internal cmds to tag#0\n"); | ||
277 | return 0; | ||
278 | } | ||
279 | |||
280 | if (unlikely(tag >= SATA_FSL_QUEUE_DEPTH)) { | ||
281 | DPRINTK("tag %d invalid : out of range\n", tag); | ||
282 | return 0; | ||
283 | } | ||
284 | |||
285 | if (unlikely((ioread32(hcr_base + CQ)) & (1 << tag))) { | ||
286 | DPRINTK("tag %d invalid : in use!!\n", tag); | ||
287 | return 0; | ||
288 | } | ||
289 | |||
290 | return tag; | ||
291 | } | ||
292 | |||
293 | static void sata_fsl_setup_cmd_hdr_entry(struct sata_fsl_port_priv *pp, | ||
294 | unsigned int tag, u32 desc_info, | ||
295 | u32 data_xfer_len, u8 num_prde, | ||
296 | u8 fis_len) | ||
297 | { | ||
298 | dma_addr_t cmd_descriptor_address; | ||
299 | |||
300 | cmd_descriptor_address = pp->cmdentry_paddr + | ||
301 | tag * SATA_FSL_CMD_DESC_SIZE; | ||
302 | |||
303 | /* NOTE: both data_xfer_len & fis_len are Dword counts */ | ||
304 | |||
305 | pp->cmdslot[tag].cda = cpu_to_le32(cmd_descriptor_address); | ||
306 | pp->cmdslot[tag].prde_fis_len = | ||
307 | cpu_to_le32((num_prde << 16) | (fis_len << 2)); | ||
308 | pp->cmdslot[tag].ttl = cpu_to_le32(data_xfer_len & ~0x03); | ||
309 | pp->cmdslot[tag].desc_info = cpu_to_le32((desc_info | (tag & 0x1F))); | ||
310 | |||
311 | VPRINTK("cda=0x%x, prde_fis_len=0x%x, ttl=0x%x, di=0x%x\n", | ||
312 | pp->cmdslot[tag].cda, | ||
313 | pp->cmdslot[tag].prde_fis_len, | ||
314 | pp->cmdslot[tag].ttl, pp->cmdslot[tag].desc_info); | ||
315 | |||
316 | } | ||
317 | |||
318 | static unsigned int sata_fsl_fill_sg(struct ata_queued_cmd *qc, void *cmd_desc, | ||
319 | u32 * ttl, dma_addr_t cmd_desc_paddr) | ||
320 | { | ||
321 | struct scatterlist *sg; | ||
322 | unsigned int num_prde = 0; | ||
323 | u32 ttl_dwords = 0; | ||
324 | |||
325 | /* | ||
326 | * NOTE : direct & indirect prdt's are contigiously allocated | ||
327 | */ | ||
328 | struct prde *prd = (struct prde *)&((struct command_desc *) | ||
329 | cmd_desc)->prdt; | ||
330 | |||
331 | struct prde *prd_ptr_to_indirect_ext = NULL; | ||
332 | unsigned indirect_ext_segment_sz = 0; | ||
333 | dma_addr_t indirect_ext_segment_paddr; | ||
334 | |||
335 | VPRINTK("SATA FSL : cd = 0x%x, prd = 0x%x\n", cmd_desc, prd); | ||
336 | |||
337 | indirect_ext_segment_paddr = cmd_desc_paddr + | ||
338 | SATA_FSL_CMD_DESC_OFFSET_TO_PRDT + SATA_FSL_MAX_PRD_DIRECT * 16; | ||
339 | |||
340 | ata_for_each_sg(sg, qc) { | ||
341 | dma_addr_t sg_addr = sg_dma_address(sg); | ||
342 | u32 sg_len = sg_dma_len(sg); | ||
343 | |||
344 | VPRINTK("SATA FSL : fill_sg, sg_addr = 0x%x, sg_len = %d\n", | ||
345 | sg_addr, sg_len); | ||
346 | |||
347 | /* warn if each s/g element is not dword aligned */ | ||
348 | if (sg_addr & 0x03) | ||
349 | ata_port_printk(qc->ap, KERN_ERR, | ||
350 | "s/g addr unaligned : 0x%x\n", sg_addr); | ||
351 | if (sg_len & 0x03) | ||
352 | ata_port_printk(qc->ap, KERN_ERR, | ||
353 | "s/g len unaligned : 0x%x\n", sg_len); | ||
354 | |||
355 | if ((num_prde == (SATA_FSL_MAX_PRD_DIRECT - 1)) && | ||
356 | !ata_sg_is_last(sg, qc)) { | ||
357 | VPRINTK("setting indirect prde\n"); | ||
358 | prd_ptr_to_indirect_ext = prd; | ||
359 | prd->dba = cpu_to_le32(indirect_ext_segment_paddr); | ||
360 | indirect_ext_segment_sz = 0; | ||
361 | ++prd; | ||
362 | ++num_prde; | ||
363 | } | ||
364 | |||
365 | ttl_dwords += sg_len; | ||
366 | prd->dba = cpu_to_le32(sg_addr); | ||
367 | prd->ddc_and_ext = | ||
368 | cpu_to_le32(DATA_SNOOP_ENABLE | (sg_len & ~0x03)); | ||
369 | |||
370 | VPRINTK("sg_fill, ttl=%d, dba=0x%x, ddc=0x%x\n", | ||
371 | ttl_dwords, prd->dba, prd->ddc_and_ext); | ||
372 | |||
373 | ++num_prde; | ||
374 | ++prd; | ||
375 | if (prd_ptr_to_indirect_ext) | ||
376 | indirect_ext_segment_sz += sg_len; | ||
377 | } | ||
378 | |||
379 | if (prd_ptr_to_indirect_ext) { | ||
380 | /* set indirect extension flag along with indirect ext. size */ | ||
381 | prd_ptr_to_indirect_ext->ddc_and_ext = | ||
382 | cpu_to_le32((EXT_INDIRECT_SEG_PRD_FLAG | | ||
383 | DATA_SNOOP_ENABLE | | ||
384 | (indirect_ext_segment_sz & ~0x03))); | ||
385 | } | ||
386 | |||
387 | *ttl = ttl_dwords; | ||
388 | return num_prde; | ||
389 | } | ||
390 | |||
391 | static void sata_fsl_qc_prep(struct ata_queued_cmd *qc) | ||
392 | { | ||
393 | struct ata_port *ap = qc->ap; | ||
394 | struct sata_fsl_port_priv *pp = ap->private_data; | ||
395 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
396 | void __iomem *hcr_base = host_priv->hcr_base; | ||
397 | unsigned int tag = sata_fsl_tag(qc->tag, hcr_base); | ||
398 | struct command_desc *cd; | ||
399 | u32 desc_info = CMD_DESC_SNOOP_ENABLE; | ||
400 | u32 num_prde = 0; | ||
401 | u32 ttl_dwords = 0; | ||
402 | dma_addr_t cd_paddr; | ||
403 | |||
404 | cd = (struct command_desc *)pp->cmdentry + tag; | ||
405 | cd_paddr = pp->cmdentry_paddr + tag * SATA_FSL_CMD_DESC_SIZE; | ||
406 | |||
407 | ata_tf_to_fis(&qc->tf, 0, 1, (u8 *) & cd->cfis); | ||
408 | |||
409 | VPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x\n", | ||
410 | cd->cfis[0], cd->cfis[1], cd->cfis[2]); | ||
411 | |||
412 | if (qc->tf.protocol == ATA_PROT_NCQ) { | ||
413 | VPRINTK("FPDMA xfer,Sctor cnt[0:7],[8:15] = %d,%d\n", | ||
414 | cd->cfis[3], cd->cfis[11]); | ||
415 | } | ||
416 | |||
417 | /* setup "ACMD - atapi command" in cmd. desc. if this is ATAPI cmd */ | ||
418 | if (is_atapi_taskfile(&qc->tf)) { | ||
419 | desc_info |= ATAPI_CMD; | ||
420 | memset((void *)&cd->acmd, 0, 32); | ||
421 | memcpy((void *)&cd->acmd, qc->cdb, qc->dev->cdb_len); | ||
422 | } | ||
423 | |||
424 | if (qc->flags & ATA_QCFLAG_DMAMAP) | ||
425 | num_prde = sata_fsl_fill_sg(qc, (void *)cd, | ||
426 | &ttl_dwords, cd_paddr); | ||
427 | |||
428 | if (qc->tf.protocol == ATA_PROT_NCQ) | ||
429 | desc_info |= FPDMA_QUEUED_CMD; | ||
430 | |||
431 | sata_fsl_setup_cmd_hdr_entry(pp, tag, desc_info, ttl_dwords, | ||
432 | num_prde, 5); | ||
433 | |||
434 | VPRINTK("SATA FSL : xx_qc_prep, di = 0x%x, ttl = %d, num_prde = %d\n", | ||
435 | desc_info, ttl_dwords, num_prde); | ||
436 | } | ||
437 | |||
438 | static unsigned int sata_fsl_qc_issue(struct ata_queued_cmd *qc) | ||
439 | { | ||
440 | struct ata_port *ap = qc->ap; | ||
441 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
442 | void __iomem *hcr_base = host_priv->hcr_base; | ||
443 | unsigned int tag = sata_fsl_tag(qc->tag, hcr_base); | ||
444 | |||
445 | VPRINTK("xx_qc_issue called,CQ=0x%x,CA=0x%x,CE=0x%x,CC=0x%x\n", | ||
446 | ioread32(CQ + hcr_base), | ||
447 | ioread32(CA + hcr_base), | ||
448 | ioread32(CE + hcr_base), ioread32(CC + hcr_base)); | ||
449 | |||
450 | /* Simply queue command to the controller/device */ | ||
451 | iowrite32(1 << tag, CQ + hcr_base); | ||
452 | |||
453 | VPRINTK("xx_qc_issue called, tag=%d, CQ=0x%x, CA=0x%x\n", | ||
454 | tag, ioread32(CQ + hcr_base), ioread32(CA + hcr_base)); | ||
455 | |||
456 | VPRINTK("CE=0x%x, DE=0x%x, CC=0x%x, CmdStat = 0x%x\n", | ||
457 | ioread32(CE + hcr_base), | ||
458 | ioread32(DE + hcr_base), | ||
459 | ioread32(CC + hcr_base), ioread32(COMMANDSTAT + csr_base)); | ||
460 | |||
461 | return 0; | ||
462 | } | ||
463 | |||
464 | static int sata_fsl_scr_write(struct ata_port *ap, unsigned int sc_reg_in, | ||
465 | u32 val) | ||
466 | { | ||
467 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
468 | void __iomem *ssr_base = host_priv->ssr_base; | ||
469 | unsigned int sc_reg; | ||
470 | |||
471 | switch (sc_reg_in) { | ||
472 | case SCR_STATUS: | ||
473 | sc_reg = 0; | ||
474 | break; | ||
475 | case SCR_ERROR: | ||
476 | sc_reg = 1; | ||
477 | break; | ||
478 | case SCR_CONTROL: | ||
479 | sc_reg = 2; | ||
480 | break; | ||
481 | case SCR_ACTIVE: | ||
482 | sc_reg = 3; | ||
483 | break; | ||
484 | default: | ||
485 | return -EINVAL; | ||
486 | } | ||
487 | |||
488 | VPRINTK("xx_scr_write, reg_in = %d\n", sc_reg); | ||
489 | |||
490 | iowrite32(val, (void __iomem *)ssr_base + (sc_reg * 4)); | ||
491 | return 0; | ||
492 | } | ||
493 | |||
494 | static int sata_fsl_scr_read(struct ata_port *ap, unsigned int sc_reg_in, | ||
495 | u32 *val) | ||
496 | { | ||
497 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
498 | void __iomem *ssr_base = host_priv->ssr_base; | ||
499 | unsigned int sc_reg; | ||
500 | |||
501 | switch (sc_reg_in) { | ||
502 | case SCR_STATUS: | ||
503 | sc_reg = 0; | ||
504 | break; | ||
505 | case SCR_ERROR: | ||
506 | sc_reg = 1; | ||
507 | break; | ||
508 | case SCR_CONTROL: | ||
509 | sc_reg = 2; | ||
510 | break; | ||
511 | case SCR_ACTIVE: | ||
512 | sc_reg = 3; | ||
513 | break; | ||
514 | default: | ||
515 | return -EINVAL; | ||
516 | } | ||
517 | |||
518 | VPRINTK("xx_scr_read, reg_in = %d\n", sc_reg); | ||
519 | |||
520 | *val = ioread32((void __iomem *)ssr_base + (sc_reg * 4)); | ||
521 | return 0; | ||
522 | } | ||
523 | |||
524 | static void sata_fsl_freeze(struct ata_port *ap) | ||
525 | { | ||
526 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
527 | void __iomem *hcr_base = host_priv->hcr_base; | ||
528 | u32 temp; | ||
529 | |||
530 | VPRINTK("xx_freeze, CQ=0x%x, CA=0x%x, CE=0x%x, DE=0x%x\n", | ||
531 | ioread32(CQ + hcr_base), | ||
532 | ioread32(CA + hcr_base), | ||
533 | ioread32(CE + hcr_base), ioread32(DE + hcr_base)); | ||
534 | VPRINTK("CmdStat = 0x%x\n", ioread32(csr_base + COMMANDSTAT)); | ||
535 | |||
536 | /* disable interrupts on the controller/port */ | ||
537 | temp = ioread32(hcr_base + HCONTROL); | ||
538 | iowrite32((temp & ~0x3F), hcr_base + HCONTROL); | ||
539 | |||
540 | VPRINTK("in xx_freeze : HControl = 0x%x, HStatus = 0x%x\n", | ||
541 | ioread32(hcr_base + HCONTROL), ioread32(hcr_base + HSTATUS)); | ||
542 | } | ||
543 | |||
544 | static void sata_fsl_thaw(struct ata_port *ap) | ||
545 | { | ||
546 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
547 | void __iomem *hcr_base = host_priv->hcr_base; | ||
548 | u32 temp; | ||
549 | |||
550 | /* ack. any pending IRQs for this controller/port */ | ||
551 | temp = ioread32(hcr_base + HSTATUS); | ||
552 | |||
553 | VPRINTK("xx_thaw, pending IRQs = 0x%x\n", (temp & 0x3F)); | ||
554 | |||
555 | if (temp & 0x3F) | ||
556 | iowrite32((temp & 0x3F), hcr_base + HSTATUS); | ||
557 | |||
558 | /* enable interrupts on the controller/port */ | ||
559 | temp = ioread32(hcr_base + HCONTROL); | ||
560 | iowrite32((temp | DEFAULT_PORT_IRQ_ENABLE_MASK), hcr_base + HCONTROL); | ||
561 | |||
562 | VPRINTK("xx_thaw : HControl = 0x%x, HStatus = 0x%x\n", | ||
563 | ioread32(hcr_base + HCONTROL), ioread32(hcr_base + HSTATUS)); | ||
564 | } | ||
565 | |||
566 | /* | ||
567 | * NOTE : 1st D2H FIS from device does not update sfis in command descriptor. | ||
568 | */ | ||
569 | static inline void sata_fsl_cache_taskfile_from_d2h_fis(struct ata_queued_cmd | ||
570 | *qc, | ||
571 | struct ata_port *ap) | ||
572 | { | ||
573 | struct sata_fsl_port_priv *pp = ap->private_data; | ||
574 | u8 fis[6 * 4]; | ||
575 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
576 | void __iomem *hcr_base = host_priv->hcr_base; | ||
577 | unsigned int tag = sata_fsl_tag(qc->tag, hcr_base); | ||
578 | struct command_desc *cd; | ||
579 | |||
580 | cd = pp->cmdentry + tag; | ||
581 | |||
582 | memcpy(fis, &cd->sfis, 6 * 4); /* should we use memcpy_from_io() */ | ||
583 | ata_tf_from_fis(fis, &pp->tf); | ||
584 | } | ||
585 | |||
586 | static u8 sata_fsl_check_status(struct ata_port *ap) | ||
587 | { | ||
588 | struct sata_fsl_port_priv *pp = ap->private_data; | ||
589 | |||
590 | return pp->tf.command; | ||
591 | } | ||
592 | |||
593 | static void sata_fsl_tf_read(struct ata_port *ap, struct ata_taskfile *tf) | ||
594 | { | ||
595 | struct sata_fsl_port_priv *pp = ap->private_data; | ||
596 | |||
597 | *tf = pp->tf; | ||
598 | } | ||
599 | |||
600 | static int sata_fsl_port_start(struct ata_port *ap) | ||
601 | { | ||
602 | struct device *dev = ap->host->dev; | ||
603 | struct sata_fsl_port_priv *pp; | ||
604 | int retval; | ||
605 | void *mem; | ||
606 | dma_addr_t mem_dma; | ||
607 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
608 | void __iomem *hcr_base = host_priv->hcr_base; | ||
609 | u32 temp; | ||
610 | |||
611 | pp = kzalloc(sizeof(*pp), GFP_KERNEL); | ||
612 | if (!pp) | ||
613 | return -ENOMEM; | ||
614 | |||
615 | /* | ||
616 | * allocate per command dma alignment pad buffer, which is used | ||
617 | * internally by libATA to ensure that all transfers ending on | ||
618 | * unaligned boundaries are padded, to align on Dword boundaries | ||
619 | */ | ||
620 | retval = ata_pad_alloc(ap, dev); | ||
621 | if (retval) { | ||
622 | kfree(pp); | ||
623 | return retval; | ||
624 | } | ||
625 | |||
626 | mem = dma_alloc_coherent(dev, SATA_FSL_PORT_PRIV_DMA_SZ, &mem_dma, | ||
627 | GFP_KERNEL); | ||
628 | if (!mem) { | ||
629 | ata_pad_free(ap, dev); | ||
630 | kfree(pp); | ||
631 | return -ENOMEM; | ||
632 | } | ||
633 | memset(mem, 0, SATA_FSL_PORT_PRIV_DMA_SZ); | ||
634 | |||
635 | pp->cmdslot = mem; | ||
636 | pp->cmdslot_paddr = mem_dma; | ||
637 | |||
638 | mem += SATA_FSL_CMD_SLOT_SIZE; | ||
639 | mem_dma += SATA_FSL_CMD_SLOT_SIZE; | ||
640 | |||
641 | pp->cmdentry = mem; | ||
642 | pp->cmdentry_paddr = mem_dma; | ||
643 | |||
644 | ap->private_data = pp; | ||
645 | |||
646 | VPRINTK("CHBA = 0x%x, cmdentry_phys = 0x%x\n", | ||
647 | pp->cmdslot_paddr, pp->cmdentry_paddr); | ||
648 | |||
649 | /* Now, update the CHBA register in host controller cmd register set */ | ||
650 | iowrite32(pp->cmdslot_paddr & 0xffffffff, hcr_base + CHBA); | ||
651 | |||
652 | /* | ||
653 | * Now, we can bring the controller on-line & also initiate | ||
654 | * the COMINIT sequence, we simply return here and the boot-probing | ||
655 | * & device discovery process is re-initiated by libATA using a | ||
656 | * Softreset EH (dummy) session. Hence, boot probing and device | ||
657 | * discovey will be part of sata_fsl_softreset() callback. | ||
658 | */ | ||
659 | |||
660 | temp = ioread32(hcr_base + HCONTROL); | ||
661 | iowrite32((temp | HCONTROL_ONLINE_PHY_RST), hcr_base + HCONTROL); | ||
662 | |||
663 | VPRINTK("HStatus = 0x%x\n", ioread32(hcr_base + HSTATUS)); | ||
664 | VPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL)); | ||
665 | VPRINTK("CHBA = 0x%x\n", ioread32(hcr_base + CHBA)); | ||
666 | |||
667 | /* | ||
668 | * Workaround for 8315DS board 3gbps link-up issue, | ||
669 | * currently limit SATA port to GEN1 speed | ||
670 | */ | ||
671 | sata_fsl_scr_read(ap, SCR_CONTROL, &temp); | ||
672 | temp &= ~(0xF << 4); | ||
673 | temp |= (0x1 << 4); | ||
674 | sata_fsl_scr_write(ap, SCR_CONTROL, temp); | ||
675 | |||
676 | sata_fsl_scr_read(ap, SCR_CONTROL, &temp); | ||
677 | dev_printk(KERN_WARNING, dev, "scr_control, speed limited to %x\n", | ||
678 | temp); | ||
679 | |||
680 | return 0; | ||
681 | } | ||
682 | |||
683 | static void sata_fsl_port_stop(struct ata_port *ap) | ||
684 | { | ||
685 | struct device *dev = ap->host->dev; | ||
686 | struct sata_fsl_port_priv *pp = ap->private_data; | ||
687 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
688 | void __iomem *hcr_base = host_priv->hcr_base; | ||
689 | u32 temp; | ||
690 | |||
691 | /* | ||
692 | * Force host controller to go off-line, aborting current operations | ||
693 | */ | ||
694 | temp = ioread32(hcr_base + HCONTROL); | ||
695 | temp &= ~HCONTROL_ONLINE_PHY_RST; | ||
696 | temp |= HCONTROL_FORCE_OFFLINE; | ||
697 | iowrite32(temp, hcr_base + HCONTROL); | ||
698 | |||
699 | /* Poll for controller to go offline - should happen immediately */ | ||
700 | ata_wait_register(hcr_base + HSTATUS, ONLINE, ONLINE, 1, 1); | ||
701 | |||
702 | ap->private_data = NULL; | ||
703 | dma_free_coherent(dev, SATA_FSL_PORT_PRIV_DMA_SZ, | ||
704 | pp->cmdslot, pp->cmdslot_paddr); | ||
705 | |||
706 | ata_pad_free(ap, dev); | ||
707 | kfree(pp); | ||
708 | } | ||
709 | |||
710 | static unsigned int sata_fsl_dev_classify(struct ata_port *ap) | ||
711 | { | ||
712 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
713 | void __iomem *hcr_base = host_priv->hcr_base; | ||
714 | struct ata_taskfile tf; | ||
715 | u32 temp; | ||
716 | |||
717 | temp = ioread32(hcr_base + SIGNATURE); | ||
718 | |||
719 | VPRINTK("raw sig = 0x%x\n", temp); | ||
720 | VPRINTK("HStatus = 0x%x\n", ioread32(hcr_base + HSTATUS)); | ||
721 | VPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL)); | ||
722 | |||
723 | tf.lbah = (temp >> 24) & 0xff; | ||
724 | tf.lbam = (temp >> 16) & 0xff; | ||
725 | tf.lbal = (temp >> 8) & 0xff; | ||
726 | tf.nsect = temp & 0xff; | ||
727 | |||
728 | return ata_dev_classify(&tf); | ||
729 | } | ||
730 | |||
731 | static int sata_fsl_softreset(struct ata_port *ap, unsigned int *class, | ||
732 | unsigned long deadline) | ||
733 | { | ||
734 | struct sata_fsl_port_priv *pp = ap->private_data; | ||
735 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
736 | void __iomem *hcr_base = host_priv->hcr_base; | ||
737 | u32 temp; | ||
738 | struct ata_taskfile tf; | ||
739 | u8 *cfis; | ||
740 | u32 Serror; | ||
741 | int i = 0; | ||
742 | struct ata_queued_cmd qc; | ||
743 | u8 *buf; | ||
744 | dma_addr_t dma_address; | ||
745 | struct scatterlist *sg; | ||
746 | unsigned long start_jiffies; | ||
747 | |||
748 | DPRINTK("in xx_softreset\n"); | ||
749 | |||
750 | try_offline_again: | ||
751 | /* | ||
752 | * Force host controller to go off-line, aborting current operations | ||
753 | */ | ||
754 | temp = ioread32(hcr_base + HCONTROL); | ||
755 | temp &= ~HCONTROL_ONLINE_PHY_RST; | ||
756 | iowrite32(temp, hcr_base + HCONTROL); | ||
757 | |||
758 | /* Poll for controller to go offline */ | ||
759 | temp = ata_wait_register(hcr_base + HSTATUS, ONLINE, ONLINE, 1, 500); | ||
760 | |||
761 | if (temp & ONLINE) { | ||
762 | ata_port_printk(ap, KERN_ERR, | ||
763 | "Softreset failed, not off-lined %d\n", i); | ||
764 | |||
765 | /* | ||
766 | * Try to offline controller atleast twice | ||
767 | */ | ||
768 | i++; | ||
769 | if (i == 2) | ||
770 | goto err; | ||
771 | else | ||
772 | goto try_offline_again; | ||
773 | } | ||
774 | |||
775 | DPRINTK("softreset, controller off-lined\n"); | ||
776 | VPRINTK("HStatus = 0x%x\n", ioread32(hcr_base + HSTATUS)); | ||
777 | VPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL)); | ||
778 | |||
779 | /* | ||
780 | * PHY reset should remain asserted for atleast 1ms | ||
781 | */ | ||
782 | msleep(1); | ||
783 | |||
784 | /* | ||
785 | * Now, bring the host controller online again, this can take time | ||
786 | * as PHY reset and communication establishment, 1st D2H FIS and | ||
787 | * device signature update is done, on safe side assume 500ms | ||
788 | * NOTE : Host online status may be indicated immediately!! | ||
789 | */ | ||
790 | |||
791 | temp = ioread32(hcr_base + HCONTROL); | ||
792 | temp |= (HCONTROL_ONLINE_PHY_RST | HCONTROL_SNOOP_ENABLE); | ||
793 | iowrite32(temp, hcr_base + HCONTROL); | ||
794 | |||
795 | temp = ata_wait_register(hcr_base + HSTATUS, ONLINE, 0, 1, 500); | ||
796 | |||
797 | if (!(temp & ONLINE)) { | ||
798 | ata_port_printk(ap, KERN_ERR, | ||
799 | "Softreset failed, not on-lined\n"); | ||
800 | goto err; | ||
801 | } | ||
802 | |||
803 | DPRINTK("softreset, controller off-lined & on-lined\n"); | ||
804 | VPRINTK("HStatus = 0x%x\n", ioread32(hcr_base + HSTATUS)); | ||
805 | VPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL)); | ||
806 | |||
807 | /* | ||
808 | * First, wait for the PHYRDY change to occur before waiting for | ||
809 | * the signature, and also verify if SStatus indicates device | ||
810 | * presence | ||
811 | */ | ||
812 | |||
813 | temp = ata_wait_register(hcr_base + HSTATUS, 0xFF, 0, 1, 500); | ||
814 | if ((!(temp & 0x10)) || ata_port_offline(ap)) { | ||
815 | ata_port_printk(ap, KERN_WARNING, | ||
816 | "No Device OR PHYRDY change,Hstatus = 0x%x\n", | ||
817 | ioread32(hcr_base + HSTATUS)); | ||
818 | goto err; | ||
819 | } | ||
820 | |||
821 | /* | ||
822 | * Wait for the first D2H from device,i.e,signature update notification | ||
823 | */ | ||
824 | start_jiffies = jiffies; | ||
825 | temp = ata_wait_register(hcr_base + HSTATUS, 0xFF, 0x10, | ||
826 | 500, jiffies_to_msecs(deadline - start_jiffies)); | ||
827 | |||
828 | if ((temp & 0xFF) != 0x18) { | ||
829 | ata_port_printk(ap, KERN_WARNING, "No Signature Update\n"); | ||
830 | goto err; | ||
831 | } else { | ||
832 | ata_port_printk(ap, KERN_INFO, | ||
833 | "Signature Update detected @ %d msecs\n", | ||
834 | jiffies_to_msecs(jiffies - start_jiffies)); | ||
835 | } | ||
836 | |||
837 | /* | ||
838 | * Send a device reset (SRST) explicitly on command slot #0 | ||
839 | * Check : will the command queue (reg) be cleared during offlining ?? | ||
840 | * Also we will be online only if Phy commn. has been established | ||
841 | * and device presence has been detected, therefore if we have | ||
842 | * reached here, we can send a command to the target device | ||
843 | */ | ||
844 | |||
845 | if (ap->sactive) | ||
846 | goto skip_srst_do_ncq_error_handling; | ||
847 | |||
848 | DPRINTK("Sending SRST/device reset\n"); | ||
849 | |||
850 | ata_tf_init(ap->device, &tf); | ||
851 | cfis = (u8 *) & pp->cmdentry->cfis; | ||
852 | |||
853 | /* device reset/SRST is a control register update FIS, uses tag0 */ | ||
854 | sata_fsl_setup_cmd_hdr_entry(pp, 0, | ||
855 | SRST_CMD | CMD_DESC_SNOOP_ENABLE, 0, 0, 5); | ||
856 | |||
857 | tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */ | ||
858 | ata_tf_to_fis(&tf, 0, 0, cfis); | ||
859 | |||
860 | DPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x, 0x%x\n", | ||
861 | cfis[0], cfis[1], cfis[2], cfis[3]); | ||
862 | |||
863 | /* | ||
864 | * Queue SRST command to the controller/device, ensure that no | ||
865 | * other commands are active on the controller/device | ||
866 | */ | ||
867 | |||
868 | DPRINTK("@Softreset, CQ = 0x%x, CA = 0x%x, CC = 0x%x\n", | ||
869 | ioread32(CQ + hcr_base), | ||
870 | ioread32(CA + hcr_base), ioread32(CC + hcr_base)); | ||
871 | |||
872 | iowrite32(0xFFFF, CC + hcr_base); | ||
873 | iowrite32(1, CQ + hcr_base); | ||
874 | |||
875 | temp = ata_wait_register(CQ + hcr_base, 0x1, 0x1, 1, 5000); | ||
876 | if (temp & 0x1) { | ||
877 | ata_port_printk(ap, KERN_WARNING, "ATA_SRST issue failed\n"); | ||
878 | |||
879 | DPRINTK("Softreset@5000,CQ=0x%x,CA=0x%x,CC=0x%x\n", | ||
880 | ioread32(CQ + hcr_base), | ||
881 | ioread32(CA + hcr_base), ioread32(CC + hcr_base)); | ||
882 | |||
883 | sata_fsl_scr_read(ap, SCR_ERROR, &Serror); | ||
884 | |||
885 | DPRINTK("HStatus = 0x%x\n", ioread32(hcr_base + HSTATUS)); | ||
886 | DPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL)); | ||
887 | DPRINTK("Serror = 0x%x\n", Serror); | ||
888 | goto err; | ||
889 | } | ||
890 | |||
891 | msleep(1); | ||
892 | |||
893 | /* | ||
894 | * SATA device enters reset state after receving a Control register | ||
895 | * FIS with SRST bit asserted and it awaits another H2D Control reg. | ||
896 | * FIS with SRST bit cleared, then the device does internal diags & | ||
897 | * initialization, followed by indicating it's initialization status | ||
898 | * using ATA signature D2H register FIS to the host controller. | ||
899 | */ | ||
900 | |||
901 | sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_SNOOP_ENABLE, 0, 0, 5); | ||
902 | |||
903 | tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */ | ||
904 | ata_tf_to_fis(&tf, 0, 0, cfis); | ||
905 | |||
906 | iowrite32(1, CQ + hcr_base); | ||
907 | msleep(150); /* ?? */ | ||
908 | |||
909 | /* | ||
910 | * The above command would have signalled an interrupt on command | ||
911 | * complete, which needs special handling, by clearing the Nth | ||
912 | * command bit of the CCreg | ||
913 | */ | ||
914 | iowrite32(0x01, CC + hcr_base); /* We know it will be cmd#0 always */ | ||
915 | goto check_device_signature; | ||
916 | |||
917 | skip_srst_do_ncq_error_handling: | ||
918 | |||
919 | VPRINTK("Sending read log ext(10h) command\n"); | ||
920 | |||
921 | memset(&qc, 0, sizeof(struct ata_queued_cmd)); | ||
922 | ata_tf_init(ap->device, &tf); | ||
923 | |||
924 | tf.command = ATA_CMD_READ_LOG_EXT; | ||
925 | tf.lbal = ATA_LOG_SATA_NCQ; | ||
926 | tf.nsect = 1; | ||
927 | tf.hob_nsect = 0; | ||
928 | tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_LBA48 | ATA_TFLAG_DEVICE; | ||
929 | tf.protocol = ATA_PROT_PIO; | ||
930 | |||
931 | qc.tag = ATA_TAG_INTERNAL; | ||
932 | qc.scsicmd = NULL; | ||
933 | qc.ap = ap; | ||
934 | qc.dev = ap->device; | ||
935 | |||
936 | qc.tf = tf; | ||
937 | qc.flags |= ATA_QCFLAG_RESULT_TF; | ||
938 | qc.dma_dir = DMA_FROM_DEVICE; | ||
939 | |||
940 | buf = ap->sector_buf; | ||
941 | ata_sg_init_one(&qc, buf, 1 * ATA_SECT_SIZE); | ||
942 | |||
943 | /* | ||
944 | * Need to DMA-map the memory buffer associated with the command | ||
945 | */ | ||
946 | |||
947 | sg = qc.__sg; | ||
948 | dma_address = dma_map_single(ap->dev, qc.buf_virt, | ||
949 | sg->length, DMA_FROM_DEVICE); | ||
950 | |||
951 | sg_dma_address(sg) = dma_address; | ||
952 | sg_dma_len(sg) = sg->length; | ||
953 | |||
954 | VPRINTK("EH, addr = 0x%x, len = 0x%x\n", dma_address, sg->length); | ||
955 | |||
956 | sata_fsl_qc_prep(&qc); | ||
957 | sata_fsl_qc_issue(&qc); | ||
958 | |||
959 | temp = ata_wait_register(CQ + hcr_base, 0x1, 0x1, 1, 5000); | ||
960 | if (temp & 0x1) { | ||
961 | VPRINTK("READ_LOG_EXT_10H issue failed\n"); | ||
962 | |||
963 | VPRINTK("READ_LOG@5000,CQ=0x%x,CA=0x%x,CC=0x%x\n", | ||
964 | ioread32(CQ + hcr_base), | ||
965 | ioread32(CA + hcr_base), ioread32(CC + hcr_base)); | ||
966 | |||
967 | sata_fsl_scr_read(ap, SCR_ERROR, &Serror); | ||
968 | |||
969 | VPRINTK("HStatus = 0x%x\n", ioread32(hcr_base + HSTATUS)); | ||
970 | VPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL)); | ||
971 | VPRINTK("Serror = 0x%x\n", Serror); | ||
972 | goto err; | ||
973 | } | ||
974 | |||
975 | iowrite32(0x01, CC + hcr_base); /* We know it will be cmd#0 always */ | ||
976 | |||
977 | check_device_signature: | ||
978 | |||
979 | DPRINTK("SATA FSL : Now checking device signature\n"); | ||
980 | |||
981 | *class = ATA_DEV_NONE; | ||
982 | |||
983 | /* Verify if SStatus indicates device presence */ | ||
984 | if (ata_port_online(ap)) { | ||
985 | /* | ||
986 | * if we are here, device presence has been detected, | ||
987 | * 1st D2H FIS would have been received, but sfis in | ||
988 | * command desc. is not updated, but signature register | ||
989 | * would have been updated | ||
990 | */ | ||
991 | |||
992 | *class = sata_fsl_dev_classify(ap); | ||
993 | |||
994 | DPRINTK("class = %d\n", *class); | ||
995 | VPRINTK("ccreg = 0x%x\n", ioread32(hcr_base + CC)); | ||
996 | VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE)); | ||
997 | } | ||
998 | |||
999 | return 0; | ||
1000 | |||
1001 | err: | ||
1002 | return -EIO; | ||
1003 | } | ||
1004 | |||
1005 | static int sata_fsl_hardreset(struct ata_port *ap, unsigned int *class, | ||
1006 | unsigned long deadline) | ||
1007 | { | ||
1008 | int retval; | ||
1009 | |||
1010 | retval = sata_std_hardreset(ap, class, deadline); | ||
1011 | |||
1012 | DPRINTK("SATA FSL : in xx_hardreset, retval = 0x%d\n", retval); | ||
1013 | |||
1014 | return retval; | ||
1015 | } | ||
1016 | |||
1017 | static void sata_fsl_error_handler(struct ata_port *ap) | ||
1018 | { | ||
1019 | |||
1020 | DPRINTK("in xx_error_handler\n"); | ||
1021 | |||
1022 | /* perform recovery */ | ||
1023 | ata_do_eh(ap, ata_std_prereset, sata_fsl_softreset, sata_fsl_hardreset, | ||
1024 | ata_std_postreset); | ||
1025 | } | ||
1026 | |||
1027 | static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) | ||
1028 | { | ||
1029 | if (qc->flags & ATA_QCFLAG_FAILED) | ||
1030 | qc->err_mask |= AC_ERR_OTHER; | ||
1031 | |||
1032 | if (qc->err_mask) { | ||
1033 | /* make DMA engine forget about the failed command */ | ||
1034 | |||
1035 | } | ||
1036 | } | ||
1037 | |||
1038 | static void sata_fsl_irq_clear(struct ata_port *ap) | ||
1039 | { | ||
1040 | /* unused */ | ||
1041 | } | ||
1042 | |||
1043 | static void sata_fsl_error_intr(struct ata_port *ap) | ||
1044 | { | ||
1045 | struct ata_eh_info *ehi = &ap->eh_info; | ||
1046 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
1047 | void __iomem *hcr_base = host_priv->hcr_base; | ||
1048 | u32 hstatus, dereg, cereg = 0, SError = 0; | ||
1049 | unsigned int err_mask = 0, action = 0; | ||
1050 | struct ata_queued_cmd *qc; | ||
1051 | int freeze = 0; | ||
1052 | |||
1053 | hstatus = ioread32(hcr_base + HSTATUS); | ||
1054 | cereg = ioread32(hcr_base + CE); | ||
1055 | |||
1056 | ata_ehi_clear_desc(ehi); | ||
1057 | |||
1058 | /* | ||
1059 | * Handle & Clear SError | ||
1060 | */ | ||
1061 | |||
1062 | sata_fsl_scr_read(ap, SCR_ERROR, &SError); | ||
1063 | if (unlikely(SError & 0xFFFF0000)) { | ||
1064 | sata_fsl_scr_write(ap, SCR_ERROR, SError); | ||
1065 | err_mask |= AC_ERR_ATA_BUS; | ||
1066 | } | ||
1067 | |||
1068 | DPRINTK("error_intr,hStat=0x%x,CE=0x%x,DE =0x%x,SErr=0x%x\n", | ||
1069 | hstatus, cereg, ioread32(hcr_base + DE), SError); | ||
1070 | |||
1071 | /* handle single device errors */ | ||
1072 | if (cereg) { | ||
1073 | /* | ||
1074 | * clear the command error, also clears queue to the device | ||
1075 | * in error, and we can (re)issue commands to this device. | ||
1076 | * When a device is in error all commands queued into the | ||
1077 | * host controller and at the device are considered aborted | ||
1078 | * and the queue for that device is stopped. Now, after | ||
1079 | * clearing the device error, we can issue commands to the | ||
1080 | * device to interrogate it to find the source of the error. | ||
1081 | */ | ||
1082 | dereg = ioread32(hcr_base + DE); | ||
1083 | iowrite32(dereg, hcr_base + DE); | ||
1084 | iowrite32(cereg, hcr_base + CE); | ||
1085 | |||
1086 | DPRINTK("single device error, CE=0x%x, DE=0x%x\n", | ||
1087 | ioread32(hcr_base + CE), ioread32(hcr_base + DE)); | ||
1088 | /* | ||
1089 | * We should consider this as non fatal error, and TF must | ||
1090 | * be updated as done below. | ||
1091 | */ | ||
1092 | |||
1093 | err_mask |= AC_ERR_DEV; | ||
1094 | } | ||
1095 | |||
1096 | /* handle fatal errors */ | ||
1097 | if (hstatus & FATAL_ERROR_DECODE) { | ||
1098 | err_mask |= AC_ERR_ATA_BUS; | ||
1099 | action |= ATA_EH_SOFTRESET; | ||
1100 | /* how will fatal error interrupts be completed ?? */ | ||
1101 | freeze = 1; | ||
1102 | } | ||
1103 | |||
1104 | /* Handle PHYRDY change notification */ | ||
1105 | if (hstatus & INT_ON_PHYRDY_CHG) { | ||
1106 | DPRINTK("SATA FSL: PHYRDY change indication\n"); | ||
1107 | |||
1108 | /* Setup a soft-reset EH action */ | ||
1109 | ata_ehi_hotplugged(ehi); | ||
1110 | freeze = 1; | ||
1111 | } | ||
1112 | |||
1113 | /* record error info */ | ||
1114 | qc = ata_qc_from_tag(ap, ap->active_tag); | ||
1115 | |||
1116 | if (qc) { | ||
1117 | sata_fsl_cache_taskfile_from_d2h_fis(qc, qc->ap); | ||
1118 | qc->err_mask |= err_mask; | ||
1119 | } else | ||
1120 | ehi->err_mask |= err_mask; | ||
1121 | |||
1122 | ehi->action |= action; | ||
1123 | ehi->serror |= SError; | ||
1124 | |||
1125 | /* freeze or abort */ | ||
1126 | if (freeze) | ||
1127 | ata_port_freeze(ap); | ||
1128 | else | ||
1129 | ata_port_abort(ap); | ||
1130 | } | ||
1131 | |||
1132 | static void sata_fsl_qc_complete(struct ata_queued_cmd *qc) | ||
1133 | { | ||
1134 | if (qc->flags & ATA_QCFLAG_RESULT_TF) { | ||
1135 | DPRINTK("xx_qc_complete called\n"); | ||
1136 | sata_fsl_cache_taskfile_from_d2h_fis(qc, qc->ap); | ||
1137 | } | ||
1138 | } | ||
1139 | |||
1140 | static void sata_fsl_host_intr(struct ata_port *ap) | ||
1141 | { | ||
1142 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
1143 | void __iomem *hcr_base = host_priv->hcr_base; | ||
1144 | u32 hstatus, qc_active = 0; | ||
1145 | struct ata_queued_cmd *qc; | ||
1146 | u32 SError; | ||
1147 | |||
1148 | hstatus = ioread32(hcr_base + HSTATUS); | ||
1149 | |||
1150 | sata_fsl_scr_read(ap, SCR_ERROR, &SError); | ||
1151 | |||
1152 | if (unlikely(SError & 0xFFFF0000)) { | ||
1153 | DPRINTK("serror @host_intr : 0x%x\n", SError); | ||
1154 | sata_fsl_error_intr(ap); | ||
1155 | |||
1156 | } | ||
1157 | |||
1158 | if (unlikely(hstatus & INT_ON_ERROR)) { | ||
1159 | DPRINTK("error interrupt!!\n"); | ||
1160 | sata_fsl_error_intr(ap); | ||
1161 | return; | ||
1162 | } | ||
1163 | |||
1164 | if (ap->sactive) { /* only true for NCQ commands */ | ||
1165 | int i; | ||
1166 | /* Read command completed register */ | ||
1167 | qc_active = ioread32(hcr_base + CC); | ||
1168 | /* clear CC bit, this will also complete the interrupt */ | ||
1169 | iowrite32(qc_active, hcr_base + CC); | ||
1170 | |||
1171 | DPRINTK("Status of all queues :\n"); | ||
1172 | DPRINTK("qc_active/CC = 0x%x, CA = 0x%x, CE=0x%x\n", | ||
1173 | qc_active, ioread32(hcr_base + CA), | ||
1174 | ioread32(hcr_base + CE)); | ||
1175 | |||
1176 | for (i = 0; i < SATA_FSL_QUEUE_DEPTH; i++) { | ||
1177 | if (qc_active & (1 << i)) { | ||
1178 | qc = ata_qc_from_tag(ap, i); | ||
1179 | if (qc) { | ||
1180 | sata_fsl_qc_complete(qc); | ||
1181 | ata_qc_complete(qc); | ||
1182 | } | ||
1183 | DPRINTK | ||
1184 | ("completing ncq cmd,tag=%d,CC=0x%x,CA=0x%x\n", | ||
1185 | i, ioread32(hcr_base + CC), | ||
1186 | ioread32(hcr_base + CA)); | ||
1187 | } | ||
1188 | } | ||
1189 | return; | ||
1190 | |||
1191 | } else if (ap->qc_active) { | ||
1192 | iowrite32(1, hcr_base + CC); | ||
1193 | qc = ata_qc_from_tag(ap, ap->active_tag); | ||
1194 | |||
1195 | DPRINTK("completing non-ncq cmd, tag=%d,CC=0x%x\n", | ||
1196 | ap->active_tag, ioread32(hcr_base + CC)); | ||
1197 | |||
1198 | if (qc) { | ||
1199 | sata_fsl_qc_complete(qc); | ||
1200 | ata_qc_complete(qc); | ||
1201 | } | ||
1202 | } else { | ||
1203 | /* Spurious Interrupt!! */ | ||
1204 | DPRINTK("spurious interrupt!!, CC = 0x%x\n", | ||
1205 | ioread32(hcr_base + CC)); | ||
1206 | return; | ||
1207 | } | ||
1208 | } | ||
1209 | |||
1210 | static irqreturn_t sata_fsl_interrupt(int irq, void *dev_instance) | ||
1211 | { | ||
1212 | struct ata_host *host = dev_instance; | ||
1213 | struct sata_fsl_host_priv *host_priv = host->private_data; | ||
1214 | void __iomem *hcr_base = host_priv->hcr_base; | ||
1215 | u32 interrupt_enables; | ||
1216 | unsigned handled = 0; | ||
1217 | struct ata_port *ap; | ||
1218 | |||
1219 | /* ack. any pending IRQs for this controller/port */ | ||
1220 | interrupt_enables = ioread32(hcr_base + HSTATUS); | ||
1221 | interrupt_enables &= 0x3F; | ||
1222 | |||
1223 | DPRINTK("interrupt status 0x%x\n", interrupt_enables); | ||
1224 | |||
1225 | if (!interrupt_enables) | ||
1226 | return IRQ_NONE; | ||
1227 | |||
1228 | spin_lock(&host->lock); | ||
1229 | |||
1230 | /* Assuming one port per host controller */ | ||
1231 | |||
1232 | ap = host->ports[0]; | ||
1233 | if (ap) { | ||
1234 | sata_fsl_host_intr(ap); | ||
1235 | } else { | ||
1236 | dev_printk(KERN_WARNING, host->dev, | ||
1237 | "interrupt on disabled port 0\n"); | ||
1238 | } | ||
1239 | |||
1240 | iowrite32(interrupt_enables, hcr_base + HSTATUS); | ||
1241 | handled = 1; | ||
1242 | |||
1243 | spin_unlock(&host->lock); | ||
1244 | |||
1245 | return IRQ_RETVAL(handled); | ||
1246 | } | ||
1247 | |||
1248 | /* | ||
1249 | * Multiple ports are represented by multiple SATA controllers with | ||
1250 | * one port per controller | ||
1251 | */ | ||
1252 | static int sata_fsl_init_controller(struct ata_host *host) | ||
1253 | { | ||
1254 | struct sata_fsl_host_priv *host_priv = host->private_data; | ||
1255 | void __iomem *hcr_base = host_priv->hcr_base; | ||
1256 | u32 temp; | ||
1257 | |||
1258 | /* | ||
1259 | * NOTE : We cannot bring the controller online before setting | ||
1260 | * the CHBA, hence main controller initialization is done as | ||
1261 | * part of the port_start() callback | ||
1262 | */ | ||
1263 | |||
1264 | /* ack. any pending IRQs for this controller/port */ | ||
1265 | temp = ioread32(hcr_base + HSTATUS); | ||
1266 | if (temp & 0x3F) | ||
1267 | iowrite32((temp & 0x3F), hcr_base + HSTATUS); | ||
1268 | |||
1269 | /* Keep interrupts disabled on the controller */ | ||
1270 | temp = ioread32(hcr_base + HCONTROL); | ||
1271 | iowrite32((temp & ~0x3F), hcr_base + HCONTROL); | ||
1272 | |||
1273 | /* Disable interrupt coalescing control(icc), for the moment */ | ||
1274 | DPRINTK("icc = 0x%x\n", ioread32(hcr_base + ICC)); | ||
1275 | iowrite32(0x01000000, hcr_base + ICC); | ||
1276 | |||
1277 | /* clear error registers, SError is cleared by libATA */ | ||
1278 | iowrite32(0x00000FFFF, hcr_base + CE); | ||
1279 | iowrite32(0x00000FFFF, hcr_base + DE); | ||
1280 | |||
1281 | /* initially assuming no Port multiplier, set CQPMP to 0 */ | ||
1282 | iowrite32(0x0, hcr_base + CQPMP); | ||
1283 | |||
1284 | /* | ||
1285 | * host controller will be brought on-line, during xx_port_start() | ||
1286 | * callback, that should also initiate the OOB, COMINIT sequence | ||
1287 | */ | ||
1288 | |||
1289 | DPRINTK("HStatus = 0x%x\n", ioread32(hcr_base + HSTATUS)); | ||
1290 | DPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL)); | ||
1291 | |||
1292 | return 0; | ||
1293 | } | ||
1294 | |||
1295 | /* | ||
1296 | * scsi mid-layer and libata interface structures | ||
1297 | */ | ||
1298 | static struct scsi_host_template sata_fsl_sht = { | ||
1299 | .module = THIS_MODULE, | ||
1300 | .name = "sata_fsl", | ||
1301 | .ioctl = ata_scsi_ioctl, | ||
1302 | .queuecommand = ata_scsi_queuecmd, | ||
1303 | .change_queue_depth = ata_scsi_change_queue_depth, | ||
1304 | .can_queue = SATA_FSL_QUEUE_DEPTH, | ||
1305 | .this_id = ATA_SHT_THIS_ID, | ||
1306 | .sg_tablesize = SATA_FSL_MAX_PRD_USABLE, | ||
1307 | .cmd_per_lun = ATA_SHT_CMD_PER_LUN, | ||
1308 | .emulated = ATA_SHT_EMULATED, | ||
1309 | .use_clustering = ATA_SHT_USE_CLUSTERING, | ||
1310 | .proc_name = "sata_fsl", | ||
1311 | .dma_boundary = ATA_DMA_BOUNDARY, | ||
1312 | .slave_configure = ata_scsi_slave_config, | ||
1313 | .slave_destroy = ata_scsi_slave_destroy, | ||
1314 | .bios_param = ata_std_bios_param, | ||
1315 | #ifdef CONFIG_PM | ||
1316 | .suspend = ata_scsi_device_suspend, | ||
1317 | .resume = ata_scsi_device_resume, | ||
1318 | #endif | ||
1319 | }; | ||
1320 | |||
1321 | static const struct ata_port_operations sata_fsl_ops = { | ||
1322 | .port_disable = ata_port_disable, | ||
1323 | |||
1324 | .check_status = sata_fsl_check_status, | ||
1325 | .check_altstatus = sata_fsl_check_status, | ||
1326 | .dev_select = ata_noop_dev_select, | ||
1327 | |||
1328 | .tf_read = sata_fsl_tf_read, | ||
1329 | |||
1330 | .qc_prep = sata_fsl_qc_prep, | ||
1331 | .qc_issue = sata_fsl_qc_issue, | ||
1332 | .irq_clear = sata_fsl_irq_clear, | ||
1333 | .irq_on = ata_dummy_irq_on, | ||
1334 | .irq_ack = ata_dummy_irq_ack, | ||
1335 | |||
1336 | .scr_read = sata_fsl_scr_read, | ||
1337 | .scr_write = sata_fsl_scr_write, | ||
1338 | |||
1339 | .freeze = sata_fsl_freeze, | ||
1340 | .thaw = sata_fsl_thaw, | ||
1341 | .error_handler = sata_fsl_error_handler, | ||
1342 | .post_internal_cmd = sata_fsl_post_internal_cmd, | ||
1343 | |||
1344 | .port_start = sata_fsl_port_start, | ||
1345 | .port_stop = sata_fsl_port_stop, | ||
1346 | }; | ||
1347 | |||
1348 | static const struct ata_port_info sata_fsl_port_info[] = { | ||
1349 | { | ||
1350 | .flags = SATA_FSL_HOST_FLAGS, | ||
1351 | .pio_mask = 0x1f, /* pio 0-4 */ | ||
1352 | .udma_mask = 0x7f, /* udma 0-6 */ | ||
1353 | .port_ops = &sata_fsl_ops, | ||
1354 | }, | ||
1355 | }; | ||
1356 | |||
1357 | static int sata_fsl_probe(struct of_device *ofdev, | ||
1358 | const struct of_device_id *match) | ||
1359 | { | ||
1360 | int retval = 0; | ||
1361 | void __iomem *hcr_base = NULL; | ||
1362 | void __iomem *ssr_base = NULL; | ||
1363 | void __iomem *csr_base = NULL; | ||
1364 | struct sata_fsl_host_priv *host_priv = NULL; | ||
1365 | struct resource *r; | ||
1366 | int irq; | ||
1367 | struct ata_host *host; | ||
1368 | |||
1369 | struct ata_port_info pi = sata_fsl_port_info[0]; | ||
1370 | const struct ata_port_info *ppi[] = { &pi, NULL }; | ||
1371 | |||
1372 | dev_printk(KERN_INFO, &ofdev->dev, | ||
1373 | "Sata FSL Platform/CSB Driver init\n"); | ||
1374 | |||
1375 | r = kmalloc(sizeof(struct resource), GFP_KERNEL); | ||
1376 | |||
1377 | hcr_base = of_iomap(ofdev->node, 0); | ||
1378 | if (!hcr_base) | ||
1379 | goto error_exit_with_cleanup; | ||
1380 | |||
1381 | ssr_base = hcr_base + 0x100; | ||
1382 | csr_base = hcr_base + 0x140; | ||
1383 | |||
1384 | DPRINTK("@reset i/o = 0x%x\n", ioread32(csr_base + TRANSCFG)); | ||
1385 | DPRINTK("sizeof(cmd_desc) = %d\n", sizeof(struct command_desc)); | ||
1386 | DPRINTK("sizeof(#define cmd_desc) = %d\n", SATA_FSL_CMD_DESC_SIZE); | ||
1387 | |||
1388 | host_priv = kzalloc(sizeof(struct sata_fsl_host_priv), GFP_KERNEL); | ||
1389 | if (!host_priv) | ||
1390 | goto error_exit_with_cleanup; | ||
1391 | |||
1392 | host_priv->hcr_base = hcr_base; | ||
1393 | host_priv->ssr_base = ssr_base; | ||
1394 | host_priv->csr_base = csr_base; | ||
1395 | |||
1396 | irq = irq_of_parse_and_map(ofdev->node, 0); | ||
1397 | if (irq < 0) { | ||
1398 | dev_printk(KERN_ERR, &ofdev->dev, "invalid irq from platform\n"); | ||
1399 | goto error_exit_with_cleanup; | ||
1400 | } | ||
1401 | |||
1402 | /* allocate host structure */ | ||
1403 | host = ata_host_alloc_pinfo(&ofdev->dev, ppi, SATA_FSL_MAX_PORTS); | ||
1404 | |||
1405 | /* host->iomap is not used currently */ | ||
1406 | host->private_data = host_priv; | ||
1407 | |||
1408 | /* setup port(s) */ | ||
1409 | |||
1410 | host->ports[0]->ioaddr.cmd_addr = host_priv->hcr_base; | ||
1411 | host->ports[0]->ioaddr.scr_addr = host_priv->ssr_base; | ||
1412 | |||
1413 | /* initialize host controller */ | ||
1414 | sata_fsl_init_controller(host); | ||
1415 | |||
1416 | /* | ||
1417 | * Now, register with libATA core, this will also initiate the | ||
1418 | * device discovery process, invoking our port_start() handler & | ||
1419 | * error_handler() to execute a dummy Softreset EH session | ||
1420 | */ | ||
1421 | ata_host_activate(host, irq, sata_fsl_interrupt, SATA_FSL_IRQ_FLAG, | ||
1422 | &sata_fsl_sht); | ||
1423 | |||
1424 | dev_set_drvdata(&ofdev->dev, host); | ||
1425 | |||
1426 | return 0; | ||
1427 | |||
1428 | error_exit_with_cleanup: | ||
1429 | |||
1430 | if (hcr_base) | ||
1431 | iounmap(hcr_base); | ||
1432 | if (host_priv) | ||
1433 | kfree(host_priv); | ||
1434 | |||
1435 | return retval; | ||
1436 | } | ||
1437 | |||
1438 | static int sata_fsl_remove(struct of_device *ofdev) | ||
1439 | { | ||
1440 | struct ata_host *host = dev_get_drvdata(&ofdev->dev); | ||
1441 | struct sata_fsl_host_priv *host_priv = host->private_data; | ||
1442 | |||
1443 | ata_host_detach(host); | ||
1444 | |||
1445 | dev_set_drvdata(&ofdev->dev, NULL); | ||
1446 | |||
1447 | irq_dispose_mapping(host->irq); | ||
1448 | iounmap(host_priv->hcr_base); | ||
1449 | kfree(host_priv); | ||
1450 | |||
1451 | return 0; | ||
1452 | } | ||
1453 | |||
1454 | static struct of_device_id fsl_sata_match[] = { | ||
1455 | { | ||
1456 | .compatible = "fsl,mpc8315-sata", | ||
1457 | }, | ||
1458 | { | ||
1459 | .compatible = "fsl,mpc8379-sata", | ||
1460 | }, | ||
1461 | {}, | ||
1462 | }; | ||
1463 | |||
1464 | MODULE_DEVICE_TABLE(of, fsl_sata_match); | ||
1465 | |||
1466 | static struct of_platform_driver fsl_sata_driver = { | ||
1467 | .name = "fsl-sata", | ||
1468 | .match_table = fsl_sata_match, | ||
1469 | .probe = sata_fsl_probe, | ||
1470 | .remove = sata_fsl_remove, | ||
1471 | }; | ||
1472 | |||
1473 | static int __init sata_fsl_init(void) | ||
1474 | { | ||
1475 | of_register_platform_driver(&fsl_sata_driver); | ||
1476 | return 0; | ||
1477 | } | ||
1478 | |||
1479 | static void __exit sata_fsl_exit(void) | ||
1480 | { | ||
1481 | of_unregister_platform_driver(&fsl_sata_driver); | ||
1482 | } | ||
1483 | |||
1484 | MODULE_LICENSE("GPL"); | ||
1485 | MODULE_AUTHOR("Ashish Kalra, Freescale Semiconductor"); | ||
1486 | MODULE_DESCRIPTION("Freescale 3.0Gbps SATA controller low level driver"); | ||
1487 | MODULE_VERSION("1.10"); | ||
1488 | |||
1489 | module_init(sata_fsl_init); | ||
1490 | module_exit(sata_fsl_exit); | ||
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index 4df8311968e..7f1b13e89cf 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
@@ -421,7 +421,6 @@ static void mv_error_handler(struct ata_port *ap); | |||
421 | static void mv_post_int_cmd(struct ata_queued_cmd *qc); | 421 | static void mv_post_int_cmd(struct ata_queued_cmd *qc); |
422 | static void mv_eh_freeze(struct ata_port *ap); | 422 | static void mv_eh_freeze(struct ata_port *ap); |
423 | static void mv_eh_thaw(struct ata_port *ap); | 423 | static void mv_eh_thaw(struct ata_port *ap); |
424 | static int mv_slave_config(struct scsi_device *sdev); | ||
425 | static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); | 424 | static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); |
426 | 425 | ||
427 | static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, | 426 | static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, |
@@ -459,7 +458,7 @@ static struct scsi_host_template mv5_sht = { | |||
459 | .use_clustering = 1, | 458 | .use_clustering = 1, |
460 | .proc_name = DRV_NAME, | 459 | .proc_name = DRV_NAME, |
461 | .dma_boundary = MV_DMA_BOUNDARY, | 460 | .dma_boundary = MV_DMA_BOUNDARY, |
462 | .slave_configure = mv_slave_config, | 461 | .slave_configure = ata_scsi_slave_config, |
463 | .slave_destroy = ata_scsi_slave_destroy, | 462 | .slave_destroy = ata_scsi_slave_destroy, |
464 | .bios_param = ata_std_bios_param, | 463 | .bios_param = ata_std_bios_param, |
465 | }; | 464 | }; |
@@ -477,7 +476,7 @@ static struct scsi_host_template mv6_sht = { | |||
477 | .use_clustering = 1, | 476 | .use_clustering = 1, |
478 | .proc_name = DRV_NAME, | 477 | .proc_name = DRV_NAME, |
479 | .dma_boundary = MV_DMA_BOUNDARY, | 478 | .dma_boundary = MV_DMA_BOUNDARY, |
480 | .slave_configure = mv_slave_config, | 479 | .slave_configure = ata_scsi_slave_config, |
481 | .slave_destroy = ata_scsi_slave_destroy, | 480 | .slave_destroy = ata_scsi_slave_destroy, |
482 | .bios_param = ata_std_bios_param, | 481 | .bios_param = ata_std_bios_param, |
483 | }; | 482 | }; |
@@ -756,17 +755,6 @@ static void mv_irq_clear(struct ata_port *ap) | |||
756 | { | 755 | { |
757 | } | 756 | } |
758 | 757 | ||
759 | static int mv_slave_config(struct scsi_device *sdev) | ||
760 | { | ||
761 | int rc = ata_scsi_slave_config(sdev); | ||
762 | if (rc) | ||
763 | return rc; | ||
764 | |||
765 | blk_queue_max_phys_segments(sdev->request_queue, MV_MAX_SG_CT / 2); | ||
766 | |||
767 | return 0; /* scsi layer doesn't check return value, sigh */ | ||
768 | } | ||
769 | |||
770 | static void mv_set_edma_ptrs(void __iomem *port_mmio, | 758 | static void mv_set_edma_ptrs(void __iomem *port_mmio, |
771 | struct mv_host_priv *hpriv, | 759 | struct mv_host_priv *hpriv, |
772 | struct mv_port_priv *pp) | 760 | struct mv_port_priv *pp) |
@@ -1138,7 +1126,7 @@ static void mv_fill_sg(struct ata_queued_cmd *qc) | |||
1138 | { | 1126 | { |
1139 | struct mv_port_priv *pp = qc->ap->private_data; | 1127 | struct mv_port_priv *pp = qc->ap->private_data; |
1140 | struct scatterlist *sg; | 1128 | struct scatterlist *sg; |
1141 | struct mv_sg *mv_sg; | 1129 | struct mv_sg *mv_sg, *last_sg = NULL; |
1142 | 1130 | ||
1143 | mv_sg = pp->sg_tbl; | 1131 | mv_sg = pp->sg_tbl; |
1144 | ata_for_each_sg(sg, qc) { | 1132 | ata_for_each_sg(sg, qc) { |
@@ -1159,13 +1147,13 @@ static void mv_fill_sg(struct ata_queued_cmd *qc) | |||
1159 | sg_len -= len; | 1147 | sg_len -= len; |
1160 | addr += len; | 1148 | addr += len; |
1161 | 1149 | ||
1162 | if (!sg_len && ata_sg_is_last(sg, qc)) | 1150 | last_sg = mv_sg; |
1163 | mv_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL); | ||
1164 | |||
1165 | mv_sg++; | 1151 | mv_sg++; |
1166 | } | 1152 | } |
1167 | |||
1168 | } | 1153 | } |
1154 | |||
1155 | if (likely(last_sg)) | ||
1156 | last_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL); | ||
1169 | } | 1157 | } |
1170 | 1158 | ||
1171 | static inline void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last) | 1159 | static inline void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last) |
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c index b0619278454..26ebffc10f3 100644 --- a/drivers/ata/sata_sil24.c +++ b/drivers/ata/sata_sil24.c | |||
@@ -796,16 +796,19 @@ static inline void sil24_fill_sg(struct ata_queued_cmd *qc, | |||
796 | struct sil24_sge *sge) | 796 | struct sil24_sge *sge) |
797 | { | 797 | { |
798 | struct scatterlist *sg; | 798 | struct scatterlist *sg; |
799 | struct sil24_sge *last_sge = NULL; | ||
799 | 800 | ||
800 | ata_for_each_sg(sg, qc) { | 801 | ata_for_each_sg(sg, qc) { |
801 | sge->addr = cpu_to_le64(sg_dma_address(sg)); | 802 | sge->addr = cpu_to_le64(sg_dma_address(sg)); |
802 | sge->cnt = cpu_to_le32(sg_dma_len(sg)); | 803 | sge->cnt = cpu_to_le32(sg_dma_len(sg)); |
803 | if (ata_sg_is_last(sg, qc)) | 804 | sge->flags = 0; |
804 | sge->flags = cpu_to_le32(SGE_TRM); | 805 | |
805 | else | 806 | last_sge = sge; |
806 | sge->flags = 0; | ||
807 | sge++; | 807 | sge++; |
808 | } | 808 | } |
809 | |||
810 | if (likely(last_sge)) | ||
811 | last_sge->flags = cpu_to_le32(SGE_TRM); | ||
809 | } | 812 | } |
810 | 813 | ||
811 | static int sil24_qc_defer(struct ata_queued_cmd *qc) | 814 | static int sil24_qc_defer(struct ata_queued_cmd *qc) |
diff --git a/drivers/ata/sata_sis.c b/drivers/ata/sata_sis.c index 8d98a9fb0a4..f147dc7bf46 100644 --- a/drivers/ata/sata_sis.c +++ b/drivers/ata/sata_sis.c | |||
@@ -92,7 +92,7 @@ static struct scsi_host_template sis_sht = { | |||
92 | .queuecommand = ata_scsi_queuecmd, | 92 | .queuecommand = ata_scsi_queuecmd, |
93 | .can_queue = ATA_DEF_QUEUE, | 93 | .can_queue = ATA_DEF_QUEUE, |
94 | .this_id = ATA_SHT_THIS_ID, | 94 | .this_id = ATA_SHT_THIS_ID, |
95 | .sg_tablesize = ATA_MAX_PRD, | 95 | .sg_tablesize = LIBATA_MAX_PRD, |
96 | .cmd_per_lun = ATA_SHT_CMD_PER_LUN, | 96 | .cmd_per_lun = ATA_SHT_CMD_PER_LUN, |
97 | .emulated = ATA_SHT_EMULATED, | 97 | .emulated = ATA_SHT_EMULATED, |
98 | .use_clustering = ATA_SHT_USE_CLUSTERING, | 98 | .use_clustering = ATA_SHT_USE_CLUSTERING, |
@@ -166,11 +166,11 @@ static unsigned int get_scr_cfg_addr(struct ata_port *ap, unsigned int sc_reg) | |||
166 | return addr; | 166 | return addr; |
167 | } | 167 | } |
168 | 168 | ||
169 | static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg) | 169 | static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg, u32 *val) |
170 | { | 170 | { |
171 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 171 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
172 | unsigned int cfg_addr = get_scr_cfg_addr(ap, sc_reg); | 172 | unsigned int cfg_addr = get_scr_cfg_addr(ap, sc_reg); |
173 | u32 val, val2 = 0; | 173 | u32 val2 = 0; |
174 | u8 pmr; | 174 | u8 pmr; |
175 | 175 | ||
176 | if (sc_reg == SCR_ERROR) /* doesn't exist in PCI cfg space */ | 176 | if (sc_reg == SCR_ERROR) /* doesn't exist in PCI cfg space */ |
@@ -178,13 +178,16 @@ static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg) | |||
178 | 178 | ||
179 | pci_read_config_byte(pdev, SIS_PMR, &pmr); | 179 | pci_read_config_byte(pdev, SIS_PMR, &pmr); |
180 | 180 | ||
181 | pci_read_config_dword(pdev, cfg_addr, &val); | 181 | pci_read_config_dword(pdev, cfg_addr, val); |
182 | 182 | ||
183 | if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || | 183 | if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || |
184 | (pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED)) | 184 | (pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED)) |
185 | pci_read_config_dword(pdev, cfg_addr+0x10, &val2); | 185 | pci_read_config_dword(pdev, cfg_addr+0x10, &val2); |
186 | 186 | ||
187 | return (val|val2) & 0xfffffffb; /* avoid problems with powerdowned ports */ | 187 | *val |= val2; |
188 | *val &= 0xfffffffb; /* avoid problems with powerdowned ports */ | ||
189 | |||
190 | return 0; | ||
188 | } | 191 | } |
189 | 192 | ||
190 | static void sis_scr_cfg_write (struct ata_port *ap, unsigned int sc_reg, u32 val) | 193 | static void sis_scr_cfg_write (struct ata_port *ap, unsigned int sc_reg, u32 val) |
@@ -214,7 +217,7 @@ static int sis_scr_read(struct ata_port *ap, unsigned int sc_reg, u32 *val) | |||
214 | return -EINVAL; | 217 | return -EINVAL; |
215 | 218 | ||
216 | if (ap->flags & SIS_FLAG_CFGSCR) | 219 | if (ap->flags & SIS_FLAG_CFGSCR) |
217 | return sis_scr_cfg_read(ap, sc_reg); | 220 | return sis_scr_cfg_read(ap, sc_reg, val); |
218 | 221 | ||
219 | pci_read_config_byte(pdev, SIS_PMR, &pmr); | 222 | pci_read_config_byte(pdev, SIS_PMR, &pmr); |
220 | 223 | ||
diff --git a/drivers/atm/firestream.c b/drivers/atm/firestream.c index 94ebc9dc40f..f8f7139c07c 100644 --- a/drivers/atm/firestream.c +++ b/drivers/atm/firestream.c | |||
@@ -1596,7 +1596,7 @@ static irqreturn_t fs_irq (int irq, void *dev_id) | |||
1596 | 1596 | ||
1597 | /* print the bits in the ISR register. */ | 1597 | /* print the bits in the ISR register. */ |
1598 | if (fs_debug & FS_DEBUG_IRQ) { | 1598 | if (fs_debug & FS_DEBUG_IRQ) { |
1599 | /* The FS_DEBUG things are unneccesary here. But this way it is | 1599 | /* The FS_DEBUG things are unnecessary here. But this way it is |
1600 | clear for grep that these are debug prints. */ | 1600 | clear for grep that these are debug prints. */ |
1601 | fs_dprintk (FS_DEBUG_IRQ, "IRQ status:"); | 1601 | fs_dprintk (FS_DEBUG_IRQ, "IRQ status:"); |
1602 | for (i=0;i<27;i++) | 1602 | for (i=0;i<27;i++) |
diff --git a/drivers/base/dmapool.c b/drivers/base/dmapool.c index fbae8674e49..5beddc322e6 100644 --- a/drivers/base/dmapool.c +++ b/drivers/base/dmapool.c | |||
@@ -366,7 +366,7 @@ dma_pool_free (struct dma_pool *pool, void *vaddr, dma_addr_t dma) | |||
366 | unsigned long flags; | 366 | unsigned long flags; |
367 | int map, block; | 367 | int map, block; |
368 | 368 | ||
369 | if ((page = pool_find_page (pool, dma)) == 0) { | 369 | if ((page = pool_find_page(pool, dma)) == NULL) { |
370 | if (pool->dev) | 370 | if (pool->dev) |
371 | dev_err(pool->dev, "dma_pool_free %s, %p/%lx (bad dma)\n", | 371 | dev_err(pool->dev, "dma_pool_free %s, %p/%lx (bad dma)\n", |
372 | pool->name, vaddr, (unsigned long) dma); | 372 | pool->name, vaddr, (unsigned long) dma); |
diff --git a/drivers/base/power/trace.c b/drivers/base/power/trace.c index 2b0c601e422..2b4b392dcbc 100644 --- a/drivers/base/power/trace.c +++ b/drivers/base/power/trace.c | |||
@@ -114,7 +114,7 @@ static unsigned int read_magic_time(void) | |||
114 | get_rtc_time(&time); | 114 | get_rtc_time(&time); |
115 | printk("Time: %2d:%02d:%02d Date: %02d/%02d/%02d\n", | 115 | printk("Time: %2d:%02d:%02d Date: %02d/%02d/%02d\n", |
116 | time.tm_hour, time.tm_min, time.tm_sec, | 116 | time.tm_hour, time.tm_min, time.tm_sec, |
117 | time.tm_mon, time.tm_mday, time.tm_year); | 117 | time.tm_mon + 1, time.tm_mday, time.tm_year % 100); |
118 | val = time.tm_year; /* 100 years */ | 118 | val = time.tm_year; /* 100 years */ |
119 | if (val > 100) | 119 | if (val > 100) |
120 | val -= 100; | 120 | val -= 100; |
diff --git a/drivers/base/topology.c b/drivers/base/topology.c index 8d8cdfec652..e1d3ad4db2f 100644 --- a/drivers/base/topology.c +++ b/drivers/base/topology.c | |||
@@ -94,27 +94,18 @@ static struct attribute_group topology_attr_group = { | |||
94 | .name = "topology" | 94 | .name = "topology" |
95 | }; | 95 | }; |
96 | 96 | ||
97 | static cpumask_t topology_dev_map = CPU_MASK_NONE; | ||
98 | |||
99 | /* Add/Remove cpu_topology interface for CPU device */ | 97 | /* Add/Remove cpu_topology interface for CPU device */ |
100 | static int __cpuinit topology_add_dev(unsigned int cpu) | 98 | static int __cpuinit topology_add_dev(unsigned int cpu) |
101 | { | 99 | { |
102 | int rc; | ||
103 | struct sys_device *sys_dev = get_cpu_sysdev(cpu); | 100 | struct sys_device *sys_dev = get_cpu_sysdev(cpu); |
104 | 101 | ||
105 | rc = sysfs_create_group(&sys_dev->kobj, &topology_attr_group); | 102 | return sysfs_create_group(&sys_dev->kobj, &topology_attr_group); |
106 | if (!rc) | ||
107 | cpu_set(cpu, topology_dev_map); | ||
108 | return rc; | ||
109 | } | 103 | } |
110 | 104 | ||
111 | static void __cpuinit topology_remove_dev(unsigned int cpu) | 105 | static void __cpuinit topology_remove_dev(unsigned int cpu) |
112 | { | 106 | { |
113 | struct sys_device *sys_dev = get_cpu_sysdev(cpu); | 107 | struct sys_device *sys_dev = get_cpu_sysdev(cpu); |
114 | 108 | ||
115 | if (!cpu_isset(cpu, topology_dev_map)) | ||
116 | return; | ||
117 | cpu_clear(cpu, topology_dev_map); | ||
118 | sysfs_remove_group(&sys_dev->kobj, &topology_attr_group); | 109 | sysfs_remove_group(&sys_dev->kobj, &topology_attr_group); |
119 | } | 110 | } |
120 | 111 | ||
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig index ca4d7f0d09b..ce4b1e484e6 100644 --- a/drivers/block/Kconfig +++ b/drivers/block/Kconfig | |||
@@ -204,23 +204,6 @@ config BLK_DEV_COW_COMMON | |||
204 | bool | 204 | bool |
205 | default BLK_DEV_UBD | 205 | default BLK_DEV_UBD |
206 | 206 | ||
207 | config MMAPPER | ||
208 | tristate "Example IO memory driver (BROKEN)" | ||
209 | depends on UML && BROKEN | ||
210 | ---help--- | ||
211 | The User-Mode Linux port can provide support for IO Memory | ||
212 | emulation with this option. This allows a host file to be | ||
213 | specified as an I/O region on the kernel command line. That file | ||
214 | will be mapped into UML's kernel address space where a driver can | ||
215 | locate it and do whatever it wants with the memory, including | ||
216 | providing an interface to it for UML processes to use. | ||
217 | |||
218 | For more information, see | ||
219 | <http://user-mode-linux.sourceforge.net/iomem.html>. | ||
220 | |||
221 | If you'd like to be able to provide a simulated IO port space for | ||
222 | User-Mode Linux processes, say Y. If unsure, say N. | ||
223 | |||
224 | config BLK_DEV_LOOP | 207 | config BLK_DEV_LOOP |
225 | tristate "Loopback device support" | 208 | tristate "Loopback device support" |
226 | ---help--- | 209 | ---help--- |
@@ -351,7 +334,7 @@ config BLK_DEV_RAM_COUNT | |||
351 | default "16" | 334 | default "16" |
352 | depends on BLK_DEV_RAM | 335 | depends on BLK_DEV_RAM |
353 | help | 336 | help |
354 | The default value is 16 RAM disks. Change this if you know what | 337 | The default value is 16 RAM disks. Change this if you know what you |
355 | are doing. If you boot from a filesystem that needs to be extracted | 338 | are doing. If you boot from a filesystem that needs to be extracted |
356 | in memory, you will need at least one RAM disk (e.g. root on cramfs). | 339 | in memory, you will need at least one RAM disk (e.g. root on cramfs). |
357 | 340 | ||
@@ -361,7 +344,7 @@ config BLK_DEV_RAM_SIZE | |||
361 | default "4096" | 344 | default "4096" |
362 | help | 345 | help |
363 | The default value is 4096 kilobytes. Only change this if you know | 346 | The default value is 4096 kilobytes. Only change this if you know |
364 | what are you doing. | 347 | what you are doing. |
365 | 348 | ||
366 | config BLK_DEV_RAM_BLOCKSIZE | 349 | config BLK_DEV_RAM_BLOCKSIZE |
367 | int "Default RAM disk block size (bytes)" | 350 | int "Default RAM disk block size (bytes)" |
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 589cbbd9cd4..56e23042728 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
@@ -29,7 +29,7 @@ | |||
29 | * | 29 | * |
30 | * Maximum number of loop devices when compiled-in now selectable by passing | 30 | * Maximum number of loop devices when compiled-in now selectable by passing |
31 | * max_loop=<1-255> to the kernel on boot. | 31 | * max_loop=<1-255> to the kernel on boot. |
32 | * Erik I. Bolsø, <eriki@himolde.no>, Oct 31, 1999 | 32 | * Erik I. Bolsø, <eriki@himolde.no>, Oct 31, 1999 |
33 | * | 33 | * |
34 | * Completely rewrite request handling to be make_request_fn style and | 34 | * Completely rewrite request handling to be make_request_fn style and |
35 | * non blocking, pushing work to a helper thread. Lots of fixes from | 35 | * non blocking, pushing work to a helper thread. Lots of fixes from |
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index cb136a919f2..6332acad078 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c | |||
@@ -188,7 +188,7 @@ static int sock_xmit(struct nbd_device *lo, int send, void *buf, int size, | |||
188 | if (signal_pending(current)) { | 188 | if (signal_pending(current)) { |
189 | siginfo_t info; | 189 | siginfo_t info; |
190 | printk(KERN_WARNING "nbd (pid %d: %s) got signal %d\n", | 190 | printk(KERN_WARNING "nbd (pid %d: %s) got signal %d\n", |
191 | current->pid, current->comm, | 191 | task_pid_nr(current), current->comm, |
192 | dequeue_signal_lock(current, ¤t->blocked, &info)); | 192 | dequeue_signal_lock(current, ¤t->blocked, &info)); |
193 | result = -EINTR; | 193 | result = -EINTR; |
194 | sock_shutdown(lo, !send); | 194 | sock_shutdown(lo, !send); |
@@ -508,7 +508,6 @@ error_out: | |||
508 | nbd_end_request(req); | 508 | nbd_end_request(req); |
509 | spin_lock(q->queue_lock); | 509 | spin_lock(q->queue_lock); |
510 | } | 510 | } |
511 | return; | ||
512 | } | 511 | } |
513 | 512 | ||
514 | static int nbd_ioctl(struct inode *inode, struct file *file, | 513 | static int nbd_ioctl(struct inode *inode, struct file *file, |
diff --git a/drivers/block/rd.c b/drivers/block/rd.c index 08176d23a46..47f8ac6cce5 100644 --- a/drivers/block/rd.c +++ b/drivers/block/rd.c | |||
@@ -365,7 +365,7 @@ static int rd_open(struct inode *inode, struct file *filp) | |||
365 | /* | 365 | /* |
366 | * Deep badness. rd_blkdev_pagecache_IO() needs to allocate | 366 | * Deep badness. rd_blkdev_pagecache_IO() needs to allocate |
367 | * pagecache pages within a request_fn. We cannot recur back | 367 | * pagecache pages within a request_fn. We cannot recur back |
368 | * into the filesytem which is mounted atop the ramdisk, because | 368 | * into the filesystem which is mounted atop the ramdisk, because |
369 | * that would deadlock on fs locks. And we really don't want | 369 | * that would deadlock on fs locks. And we really don't want |
370 | * to reenter rd_blkdev_pagecache_IO when we're already within | 370 | * to reenter rd_blkdev_pagecache_IO when we're already within |
371 | * that function. | 371 | * that function. |
diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c index 9e7652dcde6..82effce97c5 100644 --- a/drivers/block/xsysace.c +++ b/drivers/block/xsysace.c | |||
@@ -390,8 +390,8 @@ static inline void ace_dump_mem(void *base, int len) | |||
390 | static void ace_dump_regs(struct ace_device *ace) | 390 | static void ace_dump_regs(struct ace_device *ace) |
391 | { | 391 | { |
392 | dev_info(ace->dev, " ctrl: %.8x seccnt/cmd: %.4x ver:%.4x\n" | 392 | dev_info(ace->dev, " ctrl: %.8x seccnt/cmd: %.4x ver:%.4x\n" |
393 | " status:%.8x mpu_lba:%.8x busmode:%4x\n" | 393 | KERN_INFO " status:%.8x mpu_lba:%.8x busmode:%4x\n" |
394 | " error: %.8x cfg_lba:%.8x fatstat:%.4x\n", | 394 | KERN_INFO " error: %.8x cfg_lba:%.8x fatstat:%.4x\n", |
395 | ace_in32(ace, ACE_CTRL), | 395 | ace_in32(ace, ACE_CTRL), |
396 | ace_in(ace, ACE_SECCNTCMD), | 396 | ace_in(ace, ACE_SECCNTCMD), |
397 | ace_in(ace, ACE_VERSION), | 397 | ace_in(ace, ACE_VERSION), |
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index 79245714f0a..af056105316 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c | |||
@@ -1107,7 +1107,7 @@ int open_for_data(struct cdrom_device_info * cdi) | |||
1107 | is the default case! */ | 1107 | is the default case! */ |
1108 | cdinfo(CD_OPEN, "bummer. wrong media type.\n"); | 1108 | cdinfo(CD_OPEN, "bummer. wrong media type.\n"); |
1109 | cdinfo(CD_WARNING, "pid %d must open device O_NONBLOCK!\n", | 1109 | cdinfo(CD_WARNING, "pid %d must open device O_NONBLOCK!\n", |
1110 | (unsigned int)current->pid); | 1110 | (unsigned int)task_pid_nr(current)); |
1111 | ret=-EMEDIUMTYPE; | 1111 | ret=-EMEDIUMTYPE; |
1112 | goto clean_up_and_return; | 1112 | goto clean_up_and_return; |
1113 | } | 1113 | } |
@@ -3458,47 +3458,19 @@ static void cdrom_update_settings(void) | |||
3458 | static int cdrom_sysctl_handler(ctl_table *ctl, int write, struct file * filp, | 3458 | static int cdrom_sysctl_handler(ctl_table *ctl, int write, struct file * filp, |
3459 | void __user *buffer, size_t *lenp, loff_t *ppos) | 3459 | void __user *buffer, size_t *lenp, loff_t *ppos) |
3460 | { | 3460 | { |
3461 | int *valp = ctl->data; | ||
3462 | int val = *valp; | ||
3463 | int ret; | 3461 | int ret; |
3464 | 3462 | ||
3465 | ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos); | 3463 | ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos); |
3466 | 3464 | ||
3467 | if (write && *valp != val) { | 3465 | if (write) { |
3468 | 3466 | ||
3469 | /* we only care for 1 or 0. */ | 3467 | /* we only care for 1 or 0. */ |
3470 | if (*valp) | 3468 | autoclose = !!cdrom_sysctl_settings.autoclose; |
3471 | *valp = 1; | 3469 | autoeject = !!cdrom_sysctl_settings.autoeject; |
3472 | else | 3470 | debug = !!cdrom_sysctl_settings.debug; |
3473 | *valp = 0; | 3471 | lockdoor = !!cdrom_sysctl_settings.lock; |
3472 | check_media_type = !!cdrom_sysctl_settings.check; | ||
3474 | 3473 | ||
3475 | switch (ctl->ctl_name) { | ||
3476 | case DEV_CDROM_AUTOCLOSE: { | ||
3477 | if (valp == &cdrom_sysctl_settings.autoclose) | ||
3478 | autoclose = cdrom_sysctl_settings.autoclose; | ||
3479 | break; | ||
3480 | } | ||
3481 | case DEV_CDROM_AUTOEJECT: { | ||
3482 | if (valp == &cdrom_sysctl_settings.autoeject) | ||
3483 | autoeject = cdrom_sysctl_settings.autoeject; | ||
3484 | break; | ||
3485 | } | ||
3486 | case DEV_CDROM_DEBUG: { | ||
3487 | if (valp == &cdrom_sysctl_settings.debug) | ||
3488 | debug = cdrom_sysctl_settings.debug; | ||
3489 | break; | ||
3490 | } | ||
3491 | case DEV_CDROM_LOCK: { | ||
3492 | if (valp == &cdrom_sysctl_settings.lock) | ||
3493 | lockdoor = cdrom_sysctl_settings.lock; | ||
3494 | break; | ||
3495 | } | ||
3496 | case DEV_CDROM_CHECK_MEDIA: { | ||
3497 | if (valp == &cdrom_sysctl_settings.check) | ||
3498 | check_media_type = cdrom_sysctl_settings.check; | ||
3499 | break; | ||
3500 | } | ||
3501 | } | ||
3502 | /* update the option flags according to the changes. we | 3474 | /* update the option flags according to the changes. we |
3503 | don't have per device options through sysctl yet, | 3475 | don't have per device options through sysctl yet, |
3504 | but we will have and then this will disappear. */ | 3476 | but we will have and then this will disappear. */ |
@@ -3511,7 +3483,6 @@ static int cdrom_sysctl_handler(ctl_table *ctl, int write, struct file * filp, | |||
3511 | /* Place files in /proc/sys/dev/cdrom */ | 3483 | /* Place files in /proc/sys/dev/cdrom */ |
3512 | static ctl_table cdrom_table[] = { | 3484 | static ctl_table cdrom_table[] = { |
3513 | { | 3485 | { |
3514 | .ctl_name = DEV_CDROM_INFO, | ||
3515 | .procname = "info", | 3486 | .procname = "info", |
3516 | .data = &cdrom_sysctl_settings.info, | 3487 | .data = &cdrom_sysctl_settings.info, |
3517 | .maxlen = CDROM_STR_SIZE, | 3488 | .maxlen = CDROM_STR_SIZE, |
@@ -3519,7 +3490,6 @@ static ctl_table cdrom_table[] = { | |||
3519 | .proc_handler = &cdrom_sysctl_info, | 3490 | .proc_handler = &cdrom_sysctl_info, |
3520 | }, | 3491 | }, |
3521 | { | 3492 | { |
3522 | .ctl_name = DEV_CDROM_AUTOCLOSE, | ||
3523 | .procname = "autoclose", | 3493 | .procname = "autoclose", |
3524 | .data = &cdrom_sysctl_settings.autoclose, | 3494 | .data = &cdrom_sysctl_settings.autoclose, |
3525 | .maxlen = sizeof(int), | 3495 | .maxlen = sizeof(int), |
@@ -3527,7 +3497,6 @@ static ctl_table cdrom_table[] = { | |||
3527 | .proc_handler = &cdrom_sysctl_handler, | 3497 | .proc_handler = &cdrom_sysctl_handler, |
3528 | }, | 3498 | }, |
3529 | { | 3499 | { |
3530 | .ctl_name = DEV_CDROM_AUTOEJECT, | ||
3531 | .procname = "autoeject", | 3500 | .procname = "autoeject", |
3532 | .data = &cdrom_sysctl_settings.autoeject, | 3501 | .data = &cdrom_sysctl_settings.autoeject, |
3533 | .maxlen = sizeof(int), | 3502 | .maxlen = sizeof(int), |
@@ -3535,7 +3504,6 @@ static ctl_table cdrom_table[] = { | |||
3535 | .proc_handler = &cdrom_sysctl_handler, | 3504 | .proc_handler = &cdrom_sysctl_handler, |
3536 | }, | 3505 | }, |
3537 | { | 3506 | { |
3538 | .ctl_name = DEV_CDROM_DEBUG, | ||
3539 | .procname = "debug", | 3507 | .procname = "debug", |
3540 | .data = &cdrom_sysctl_settings.debug, | 3508 | .data = &cdrom_sysctl_settings.debug, |
3541 | .maxlen = sizeof(int), | 3509 | .maxlen = sizeof(int), |
@@ -3543,7 +3511,6 @@ static ctl_table cdrom_table[] = { | |||
3543 | .proc_handler = &cdrom_sysctl_handler, | 3511 | .proc_handler = &cdrom_sysctl_handler, |
3544 | }, | 3512 | }, |
3545 | { | 3513 | { |
3546 | .ctl_name = DEV_CDROM_LOCK, | ||
3547 | .procname = "lock", | 3514 | .procname = "lock", |
3548 | .data = &cdrom_sysctl_settings.lock, | 3515 | .data = &cdrom_sysctl_settings.lock, |
3549 | .maxlen = sizeof(int), | 3516 | .maxlen = sizeof(int), |
@@ -3551,7 +3518,6 @@ static ctl_table cdrom_table[] = { | |||
3551 | .proc_handler = &cdrom_sysctl_handler, | 3518 | .proc_handler = &cdrom_sysctl_handler, |
3552 | }, | 3519 | }, |
3553 | { | 3520 | { |
3554 | .ctl_name = DEV_CDROM_CHECK_MEDIA, | ||
3555 | .procname = "check_media", | 3521 | .procname = "check_media", |
3556 | .data = &cdrom_sysctl_settings.check, | 3522 | .data = &cdrom_sysctl_settings.check, |
3557 | .maxlen = sizeof(int), | 3523 | .maxlen = sizeof(int), |
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig index 204d53e506d..65491103e0f 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig | |||
@@ -36,23 +36,6 @@ config VT | |||
36 | If unsure, say Y, or else you won't be able to do much with your new | 36 | If unsure, say Y, or else you won't be able to do much with your new |
37 | shiny Linux system :-) | 37 | shiny Linux system :-) |
38 | 38 | ||
39 | config VT_UNICODE | ||
40 | bool "Virtual console is Unicode by default" | ||
41 | depends on VT | ||
42 | default n | ||
43 | ---help--- | ||
44 | If you say Y here, the virtual terminal will be in UTF-8 by default, | ||
45 | and the keyboard will run in unicode mode. | ||
46 | |||
47 | If you say N here, the virtual terminal will not be in UTF-8 by | ||
48 | default, and the keyboard will run in XLATE mode. | ||
49 | |||
50 | This can also be changed by passing 'default_utf8=<0|1>' on the | ||
51 | kernel command line. | ||
52 | |||
53 | Historically, the kernel has defaulted to non-UTF8 and XLATE mode. | ||
54 | If unsure, say N here. | ||
55 | |||
56 | config VT_CONSOLE | 39 | config VT_CONSOLE |
57 | bool "Support for console on virtual terminal" if EMBEDDED | 40 | bool "Support for console on virtual terminal" if EMBEDDED |
58 | depends on VT | 41 | depends on VT |
@@ -649,8 +632,6 @@ config HVCS | |||
649 | 632 | ||
650 | source "drivers/char/ipmi/Kconfig" | 633 | source "drivers/char/ipmi/Kconfig" |
651 | 634 | ||
652 | source "drivers/char/watchdog/Kconfig" | ||
653 | |||
654 | config DS1620 | 635 | config DS1620 |
655 | tristate "NetWinder thermometer support" | 636 | tristate "NetWinder thermometer support" |
656 | depends on ARCH_NETWINDER | 637 | depends on ARCH_NETWINDER |
diff --git a/drivers/char/apm-emulation.c b/drivers/char/apm-emulation.c index ec116df919d..c99e43b837f 100644 --- a/drivers/char/apm-emulation.c +++ b/drivers/char/apm-emulation.c | |||
@@ -18,7 +18,7 @@ | |||
18 | #include <linux/apm_bios.h> | 18 | #include <linux/apm_bios.h> |
19 | #include <linux/capability.h> | 19 | #include <linux/capability.h> |
20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
21 | #include <linux/pm.h> | 21 | #include <linux/suspend.h> |
22 | #include <linux/apm-emulation.h> | 22 | #include <linux/apm-emulation.h> |
23 | #include <linux/freezer.h> | 23 | #include <linux/freezer.h> |
24 | #include <linux/device.h> | 24 | #include <linux/device.h> |
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c index 9e0adfe27c1..d1bd0f08a33 100644 --- a/drivers/char/cyclades.c +++ b/drivers/char/cyclades.c | |||
@@ -359,7 +359,7 @@ | |||
359 | * | 359 | * |
360 | * Revision 1.36.3.8 1996/06/07 16:29:00 bentson | 360 | * Revision 1.36.3.8 1996/06/07 16:29:00 bentson |
361 | * starting minor number at zero; added missing verify_area | 361 | * starting minor number at zero; added missing verify_area |
362 | * as noted by Heiko Eissfeldt <heiko@colossus.escape.de> | 362 | * as noted by Heiko Eißfeldt <heiko@colossus.escape.de> |
363 | * | 363 | * |
364 | * Revision 1.36.3.7 1996/04/19 21:06:18 bentson | 364 | * Revision 1.36.3.7 1996/04/19 21:06:18 bentson |
365 | * remove unneeded boot message & fix CLOCAL hardware flow | 365 | * remove unneeded boot message & fix CLOCAL hardware flow |
@@ -662,7 +662,7 @@ | |||
662 | static void cy_throttle(struct tty_struct *tty); | 662 | static void cy_throttle(struct tty_struct *tty); |
663 | static void cy_send_xchar(struct tty_struct *tty, char ch); | 663 | static void cy_send_xchar(struct tty_struct *tty, char ch); |
664 | 664 | ||
665 | #define IS_CYC_Z(card) ((card).num_chips == -1) | 665 | #define IS_CYC_Z(card) ((card).num_chips == (unsigned int)-1) |
666 | 666 | ||
667 | #define Z_FPGA_CHECK(card) \ | 667 | #define Z_FPGA_CHECK(card) \ |
668 | ((readl(&((struct RUNTIME_9060 __iomem *) \ | 668 | ((readl(&((struct RUNTIME_9060 __iomem *) \ |
@@ -727,8 +727,6 @@ static struct tty_driver *cy_serial_driver; | |||
727 | driver to probe addresses at a different address, add it to | 727 | driver to probe addresses at a different address, add it to |
728 | this table. If the driver is probing some other board and | 728 | this table. If the driver is probing some other board and |
729 | causing problems, remove the offending address from this table. | 729 | causing problems, remove the offending address from this table. |
730 | The cy_setup function extracts additional addresses from the | ||
731 | boot options line. The form is "cyclades=address,address..." | ||
732 | */ | 730 | */ |
733 | 731 | ||
734 | static unsigned int cy_isa_addresses[] = { | 732 | static unsigned int cy_isa_addresses[] = { |
@@ -897,71 +895,6 @@ static inline int serial_paranoia_check(struct cyclades_port *info, | |||
897 | return 0; | 895 | return 0; |
898 | } /* serial_paranoia_check */ | 896 | } /* serial_paranoia_check */ |
899 | 897 | ||
900 | /* | ||
901 | * This routine is used by the interrupt handler to schedule | ||
902 | * processing in the software interrupt portion of the driver | ||
903 | * (also known as the "bottom half"). This can be called any | ||
904 | * number of times for any channel without harm. | ||
905 | */ | ||
906 | static inline void cy_sched_event(struct cyclades_port *info, int event) | ||
907 | { | ||
908 | info->event |= 1 << event; /* remember what kind of event and who */ | ||
909 | schedule_work(&info->tqueue); | ||
910 | } /* cy_sched_event */ | ||
911 | |||
912 | /* | ||
913 | * This routine is used to handle the "bottom half" processing for the | ||
914 | * serial driver, known also the "software interrupt" processing. | ||
915 | * This processing is done at the kernel interrupt level, after the | ||
916 | * cy#/_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON. This | ||
917 | * is where time-consuming activities which can not be done in the | ||
918 | * interrupt driver proper are done; the interrupt driver schedules | ||
919 | * them using cy_sched_event(), and they get done here. | ||
920 | * | ||
921 | * This is done through one level of indirection--the task queue. | ||
922 | * When a hardware interrupt service routine wants service by the | ||
923 | * driver's bottom half, it enqueues the appropriate tq_struct (one | ||
924 | * per port) to the keventd work queue and sets a request flag | ||
925 | * that the work queue be processed. | ||
926 | * | ||
927 | * Although this may seem unwieldy, it gives the system a way to | ||
928 | * pass an argument (in this case the pointer to the cyclades_port | ||
929 | * structure) to the bottom half of the driver. Previous kernels | ||
930 | * had to poll every port to see if that port needed servicing. | ||
931 | */ | ||
932 | static void | ||
933 | do_softint(struct work_struct *work) | ||
934 | { | ||
935 | struct cyclades_port *info = | ||
936 | container_of(work, struct cyclades_port, tqueue); | ||
937 | struct tty_struct *tty; | ||
938 | |||
939 | tty = info->tty; | ||
940 | if (!tty) | ||
941 | return; | ||
942 | |||
943 | if (test_and_clear_bit(Cy_EVENT_HANGUP, &info->event)) { | ||
944 | tty_hangup(info->tty); | ||
945 | wake_up_interruptible(&info->open_wait); | ||
946 | info->flags &= ~ASYNC_NORMAL_ACTIVE; | ||
947 | } | ||
948 | if (test_and_clear_bit(Cy_EVENT_OPEN_WAKEUP, &info->event)) | ||
949 | wake_up_interruptible(&info->open_wait); | ||
950 | #ifdef CONFIG_CYZ_INTR | ||
951 | if (test_and_clear_bit(Cy_EVENT_Z_RX_FULL, &info->event) && | ||
952 | !timer_pending(&cyz_rx_full_timer[info->line])) | ||
953 | mod_timer(&cyz_rx_full_timer[info->line], jiffies + 1); | ||
954 | #endif | ||
955 | if (test_and_clear_bit(Cy_EVENT_DELTA_WAKEUP, &info->event)) | ||
956 | wake_up_interruptible(&info->delta_msr_wait); | ||
957 | tty_wakeup(tty); | ||
958 | #ifdef Z_WAKE | ||
959 | if (test_and_clear_bit(Cy_EVENT_SHUTDOWN_WAKEUP, &info->event)) | ||
960 | complete(&info->shutdown_wait); | ||
961 | #endif | ||
962 | } /* do_softint */ | ||
963 | |||
964 | |||
965 | /***********************************************************/ | 898 | /***********************************************************/ |
966 | /********* Start of block of Cyclom-Y specific code ********/ | 899 | /********* Start of block of Cyclom-Y specific code ********/ |
967 | 900 | ||
@@ -1045,382 +978,332 @@ static unsigned detect_isa_irq(void __iomem * address) | |||
1045 | } | 978 | } |
1046 | #endif /* CONFIG_ISA */ | 979 | #endif /* CONFIG_ISA */ |
1047 | 980 | ||
1048 | static void cyy_intr_chip(struct cyclades_card *cinfo, int chip, | 981 | static void cyy_chip_rx(struct cyclades_card *cinfo, int chip, |
1049 | void __iomem * base_addr, int status, int index) | 982 | void __iomem *base_addr) |
1050 | { | 983 | { |
1051 | struct cyclades_port *info; | 984 | struct cyclades_port *info; |
1052 | struct tty_struct *tty; | 985 | struct tty_struct *tty; |
1053 | int char_count; | 986 | int len, index = cinfo->bus_index; |
1054 | int j, len, mdm_change, mdm_status, outch; | 987 | u8 save_xir, channel, save_car, data, char_count; |
1055 | int save_xir, channel, save_car; | ||
1056 | char data; | ||
1057 | 988 | ||
1058 | if (status & CySRReceive) { /* reception interrupt */ | ||
1059 | #ifdef CY_DEBUG_INTERRUPTS | 989 | #ifdef CY_DEBUG_INTERRUPTS |
1060 | printk(KERN_DEBUG "cyy_interrupt: rcvd intr, chip %d\n", chip); | 990 | printk(KERN_DEBUG "cyy_interrupt: rcvd intr, chip %d\n", chip); |
1061 | #endif | 991 | #endif |
1062 | /* determine the channel & change to that context */ | 992 | /* determine the channel & change to that context */ |
1063 | spin_lock(&cinfo->card_lock); | 993 | save_xir = readb(base_addr + (CyRIR << index)); |
1064 | save_xir = (u_char) readb(base_addr + (CyRIR << index)); | 994 | channel = save_xir & CyIRChannel; |
1065 | channel = (u_short) (save_xir & CyIRChannel); | 995 | info = &cinfo->ports[channel + chip * 4]; |
1066 | info = &cinfo->ports[channel + chip * 4]; | 996 | save_car = readb(base_addr + (CyCAR << index)); |
1067 | save_car = readb(base_addr + (CyCAR << index)); | 997 | cy_writeb(base_addr + (CyCAR << index), save_xir); |
1068 | cy_writeb(base_addr + (CyCAR << index), save_xir); | 998 | |
1069 | 999 | /* if there is nowhere to put the data, discard it */ | |
1070 | /* if there is nowhere to put the data, discard it */ | 1000 | if (info->tty == NULL) { |
1071 | if (info->tty == NULL) { | 1001 | if ((readb(base_addr + (CyRIVR << index)) & CyIVRMask) == |
1072 | j = (readb(base_addr + (CyRIVR << index)) & | 1002 | CyIVRRxEx) { /* exception */ |
1073 | CyIVRMask); | 1003 | data = readb(base_addr + (CyRDSR << index)); |
1074 | if (j == CyIVRRxEx) { /* exception */ | 1004 | } else { /* normal character reception */ |
1005 | char_count = readb(base_addr + (CyRDCR << index)); | ||
1006 | while (char_count--) | ||
1075 | data = readb(base_addr + (CyRDSR << index)); | 1007 | data = readb(base_addr + (CyRDSR << index)); |
1076 | } else { /* normal character reception */ | 1008 | } |
1077 | char_count = readb(base_addr + | 1009 | goto end; |
1078 | (CyRDCR << index)); | 1010 | } |
1079 | while (char_count--) { | 1011 | /* there is an open port for this data */ |
1080 | data = readb(base_addr + | 1012 | tty = info->tty; |
1081 | (CyRDSR << index)); | 1013 | if ((readb(base_addr + (CyRIVR << index)) & CyIVRMask) == |
1082 | } | 1014 | CyIVRRxEx) { /* exception */ |
1083 | } | 1015 | data = readb(base_addr + (CyRDSR << index)); |
1084 | } else { /* there is an open port for this data */ | 1016 | |
1085 | tty = info->tty; | 1017 | /* For statistics only */ |
1086 | j = (readb(base_addr + (CyRIVR << index)) & | 1018 | if (data & CyBREAK) |
1087 | CyIVRMask); | 1019 | info->icount.brk++; |
1088 | if (j == CyIVRRxEx) { /* exception */ | 1020 | else if (data & CyFRAME) |
1089 | data = readb(base_addr + (CyRDSR << index)); | 1021 | info->icount.frame++; |
1090 | 1022 | else if (data & CyPARITY) | |
1091 | /* For statistics only */ | 1023 | info->icount.parity++; |
1092 | if (data & CyBREAK) | 1024 | else if (data & CyOVERRUN) |
1093 | info->icount.brk++; | 1025 | info->icount.overrun++; |
1094 | else if (data & CyFRAME) | 1026 | |
1095 | info->icount.frame++; | 1027 | if (data & info->ignore_status_mask) { |
1096 | else if (data & CyPARITY) | 1028 | info->icount.rx++; |
1097 | info->icount.parity++; | 1029 | return; |
1098 | else if (data & CyOVERRUN) | 1030 | } |
1099 | info->icount.overrun++; | 1031 | if (tty_buffer_request_room(tty, 1)) { |
1100 | 1032 | if (data & info->read_status_mask) { | |
1101 | if (data & info->ignore_status_mask) { | 1033 | if (data & CyBREAK) { |
1034 | tty_insert_flip_char(tty, | ||
1035 | readb(base_addr + (CyRDSR << | ||
1036 | index)), TTY_BREAK); | ||
1037 | info->icount.rx++; | ||
1038 | if (info->flags & ASYNC_SAK) | ||
1039 | do_SAK(tty); | ||
1040 | } else if (data & CyFRAME) { | ||
1041 | tty_insert_flip_char( tty, | ||
1042 | readb(base_addr + (CyRDSR << | ||
1043 | index)), TTY_FRAME); | ||
1044 | info->icount.rx++; | ||
1045 | info->idle_stats.frame_errs++; | ||
1046 | } else if (data & CyPARITY) { | ||
1047 | /* Pieces of seven... */ | ||
1048 | tty_insert_flip_char(tty, | ||
1049 | readb(base_addr + (CyRDSR << | ||
1050 | index)), TTY_PARITY); | ||
1051 | info->icount.rx++; | ||
1052 | info->idle_stats.parity_errs++; | ||
1053 | } else if (data & CyOVERRUN) { | ||
1054 | tty_insert_flip_char(tty, 0, | ||
1055 | TTY_OVERRUN); | ||
1056 | info->icount.rx++; | ||
1057 | /* If the flip buffer itself is | ||
1058 | overflowing, we still lose | ||
1059 | the next incoming character. | ||
1060 | */ | ||
1061 | tty_insert_flip_char(tty, | ||
1062 | readb(base_addr + (CyRDSR << | ||
1063 | index)), TTY_FRAME); | ||
1102 | info->icount.rx++; | 1064 | info->icount.rx++; |
1103 | spin_unlock(&cinfo->card_lock); | ||
1104 | return; | ||
1105 | } | ||
1106 | if (tty_buffer_request_room(tty, 1)) { | ||
1107 | if (data & info->read_status_mask) { | ||
1108 | if (data & CyBREAK) { | ||
1109 | tty_insert_flip_char( | ||
1110 | tty, | ||
1111 | readb( | ||
1112 | base_addr + | ||
1113 | (CyRDSR << | ||
1114 | index)), | ||
1115 | TTY_BREAK); | ||
1116 | info->icount.rx++; | ||
1117 | if (info->flags & | ||
1118 | ASYNC_SAK) { | ||
1119 | do_SAK(tty); | ||
1120 | } | ||
1121 | } else if (data & CyFRAME) { | ||
1122 | tty_insert_flip_char( | ||
1123 | tty, | ||
1124 | readb( | ||
1125 | base_addr + | ||
1126 | (CyRDSR << | ||
1127 | index)), | ||
1128 | TTY_FRAME); | ||
1129 | info->icount.rx++; | ||
1130 | info->idle_stats. | ||
1131 | frame_errs++; | ||
1132 | } else if (data & CyPARITY) { | ||
1133 | /* Pieces of seven... */ | ||
1134 | tty_insert_flip_char( | ||
1135 | tty, | ||
1136 | readb( | ||
1137 | base_addr + | ||
1138 | (CyRDSR << | ||
1139 | index)), | ||
1140 | TTY_PARITY); | ||
1141 | info->icount.rx++; | ||
1142 | info->idle_stats. | ||
1143 | parity_errs++; | ||
1144 | } else if (data & CyOVERRUN) { | ||
1145 | tty_insert_flip_char( | ||
1146 | tty, 0, | ||
1147 | TTY_OVERRUN); | ||
1148 | info->icount.rx++; | ||
1149 | /* If the flip buffer itself is | ||
1150 | overflowing, we still lose | ||
1151 | the next incoming character. | ||
1152 | */ | ||
1153 | tty_insert_flip_char( | ||
1154 | tty, | ||
1155 | readb( | ||
1156 | base_addr + | ||
1157 | (CyRDSR << | ||
1158 | index)), | ||
1159 | TTY_FRAME); | ||
1160 | info->icount.rx++; | ||
1161 | info->idle_stats. | ||
1162 | overruns++; | ||
1163 | /* These two conditions may imply */ | ||
1164 | /* a normal read should be done. */ | ||
1165 | /* }else if(data & CyTIMEOUT){ */ | ||
1166 | /* }else if(data & CySPECHAR){ */ | ||
1167 | } else { | ||
1168 | tty_insert_flip_char( | ||
1169 | tty, 0, | ||
1170 | TTY_NORMAL); | ||
1171 | info->icount.rx++; | ||
1172 | } | ||
1173 | } else { | ||
1174 | tty_insert_flip_char(tty, 0, | ||
1175 | TTY_NORMAL); | ||
1176 | info->icount.rx++; | ||
1177 | } | ||
1178 | } else { | ||
1179 | /* there was a software buffer | ||
1180 | overrun and nothing could be | ||
1181 | done about it!!! */ | ||
1182 | info->icount.buf_overrun++; | ||
1183 | info->idle_stats.overruns++; | 1065 | info->idle_stats.overruns++; |
1066 | /* These two conditions may imply */ | ||
1067 | /* a normal read should be done. */ | ||
1068 | /* } else if(data & CyTIMEOUT) { */ | ||
1069 | /* } else if(data & CySPECHAR) { */ | ||
1070 | } else { | ||
1071 | tty_insert_flip_char(tty, 0, | ||
1072 | TTY_NORMAL); | ||
1073 | info->icount.rx++; | ||
1184 | } | 1074 | } |
1185 | } else { /* normal character reception */ | 1075 | } else { |
1186 | /* load # chars available from the chip */ | 1076 | tty_insert_flip_char(tty, 0, TTY_NORMAL); |
1187 | char_count = readb(base_addr + | 1077 | info->icount.rx++; |
1188 | (CyRDCR << index)); | 1078 | } |
1079 | } else { | ||
1080 | /* there was a software buffer overrun and nothing | ||
1081 | * could be done about it!!! */ | ||
1082 | info->icount.buf_overrun++; | ||
1083 | info->idle_stats.overruns++; | ||
1084 | } | ||
1085 | } else { /* normal character reception */ | ||
1086 | /* load # chars available from the chip */ | ||
1087 | char_count = readb(base_addr + (CyRDCR << index)); | ||
1189 | 1088 | ||
1190 | #ifdef CY_ENABLE_MONITORING | 1089 | #ifdef CY_ENABLE_MONITORING |
1191 | ++info->mon.int_count; | 1090 | ++info->mon.int_count; |
1192 | info->mon.char_count += char_count; | 1091 | info->mon.char_count += char_count; |
1193 | if (char_count > info->mon.char_max) | 1092 | if (char_count > info->mon.char_max) |
1194 | info->mon.char_max = char_count; | 1093 | info->mon.char_max = char_count; |
1195 | info->mon.char_last = char_count; | 1094 | info->mon.char_last = char_count; |
1196 | #endif | 1095 | #endif |
1197 | len = tty_buffer_request_room(tty, char_count); | 1096 | len = tty_buffer_request_room(tty, char_count); |
1198 | while (len--) { | 1097 | while (len--) { |
1199 | data = readb(base_addr + | 1098 | data = readb(base_addr + (CyRDSR << index)); |
1200 | (CyRDSR << index)); | 1099 | tty_insert_flip_char(tty, data, TTY_NORMAL); |
1201 | tty_insert_flip_char(tty, data, | 1100 | info->idle_stats.recv_bytes++; |
1202 | TTY_NORMAL); | 1101 | info->icount.rx++; |
1203 | info->idle_stats.recv_bytes++; | ||
1204 | info->icount.rx++; | ||
1205 | #ifdef CY_16Y_HACK | 1102 | #ifdef CY_16Y_HACK |
1206 | udelay(10L); | 1103 | udelay(10L); |
1207 | #endif | 1104 | #endif |
1208 | } | ||
1209 | info->idle_stats.recv_idle = jiffies; | ||
1210 | } | ||
1211 | tty_schedule_flip(tty); | ||
1212 | } | 1105 | } |
1213 | /* end of service */ | 1106 | info->idle_stats.recv_idle = jiffies; |
1214 | cy_writeb(base_addr + (CyRIR << index), (save_xir & 0x3f)); | ||
1215 | cy_writeb(base_addr + (CyCAR << index), (save_car)); | ||
1216 | spin_unlock(&cinfo->card_lock); | ||
1217 | } | 1107 | } |
1108 | tty_schedule_flip(tty); | ||
1109 | end: | ||
1110 | /* end of service */ | ||
1111 | cy_writeb(base_addr + (CyRIR << index), save_xir & 0x3f); | ||
1112 | cy_writeb(base_addr + (CyCAR << index), save_car); | ||
1113 | } | ||
1114 | |||
1115 | static void cyy_chip_tx(struct cyclades_card *cinfo, unsigned int chip, | ||
1116 | void __iomem *base_addr) | ||
1117 | { | ||
1118 | struct cyclades_port *info; | ||
1119 | int char_count, index = cinfo->bus_index; | ||
1120 | u8 save_xir, channel, save_car, outch; | ||
1218 | 1121 | ||
1219 | if (status & CySRTransmit) { /* transmission interrupt */ | 1122 | /* Since we only get here when the transmit buffer |
1220 | /* Since we only get here when the transmit buffer | 1123 | is empty, we know we can always stuff a dozen |
1221 | is empty, we know we can always stuff a dozen | 1124 | characters. */ |
1222 | characters. */ | ||
1223 | #ifdef CY_DEBUG_INTERRUPTS | 1125 | #ifdef CY_DEBUG_INTERRUPTS |
1224 | printk(KERN_DEBUG "cyy_interrupt: xmit intr, chip %d\n", chip); | 1126 | printk(KERN_DEBUG "cyy_interrupt: xmit intr, chip %d\n", chip); |
1225 | #endif | 1127 | #endif |
1226 | 1128 | ||
1227 | /* determine the channel & change to that context */ | 1129 | /* determine the channel & change to that context */ |
1228 | spin_lock(&cinfo->card_lock); | 1130 | save_xir = readb(base_addr + (CyTIR << index)); |
1229 | save_xir = (u_char) readb(base_addr + (CyTIR << index)); | 1131 | channel = save_xir & CyIRChannel; |
1230 | channel = (u_short) (save_xir & CyIRChannel); | 1132 | save_car = readb(base_addr + (CyCAR << index)); |
1231 | save_car = readb(base_addr + (CyCAR << index)); | 1133 | cy_writeb(base_addr + (CyCAR << index), save_xir); |
1232 | cy_writeb(base_addr + (CyCAR << index), save_xir); | ||
1233 | 1134 | ||
1234 | /* validate the port# (as configured and open) */ | 1135 | /* validate the port# (as configured and open) */ |
1235 | if (channel + chip * 4 >= cinfo->nports) { | 1136 | if (channel + chip * 4 >= cinfo->nports) { |
1236 | cy_writeb(base_addr + (CySRER << index), | 1137 | cy_writeb(base_addr + (CySRER << index), |
1237 | readb(base_addr + (CySRER << index)) & | 1138 | readb(base_addr + (CySRER << index)) & ~CyTxRdy); |
1238 | ~CyTxRdy); | 1139 | goto end; |
1239 | goto txend; | 1140 | } |
1240 | } | 1141 | info = &cinfo->ports[channel + chip * 4]; |
1241 | info = &cinfo->ports[channel + chip * 4]; | 1142 | if (info->tty == NULL) { |
1242 | if (info->tty == NULL) { | 1143 | cy_writeb(base_addr + (CySRER << index), |
1243 | cy_writeb(base_addr + (CySRER << index), | 1144 | readb(base_addr + (CySRER << index)) & ~CyTxRdy); |
1244 | readb(base_addr + (CySRER << index)) & | 1145 | goto end; |
1245 | ~CyTxRdy); | 1146 | } |
1246 | goto txdone; | ||
1247 | } | ||
1248 | 1147 | ||
1249 | /* load the on-chip space for outbound data */ | 1148 | /* load the on-chip space for outbound data */ |
1250 | char_count = info->xmit_fifo_size; | 1149 | char_count = info->xmit_fifo_size; |
1251 | 1150 | ||
1252 | if (info->x_char) { /* send special char */ | 1151 | if (info->x_char) { /* send special char */ |
1253 | outch = info->x_char; | 1152 | outch = info->x_char; |
1254 | cy_writeb(base_addr + (CyTDR << index), outch); | 1153 | cy_writeb(base_addr + (CyTDR << index), outch); |
1255 | char_count--; | 1154 | char_count--; |
1256 | info->icount.tx++; | 1155 | info->icount.tx++; |
1257 | info->x_char = 0; | 1156 | info->x_char = 0; |
1258 | } | 1157 | } |
1259 | 1158 | ||
1260 | if (info->breakon || info->breakoff) { | 1159 | if (info->breakon || info->breakoff) { |
1261 | if (info->breakon) { | 1160 | if (info->breakon) { |
1262 | cy_writeb(base_addr + (CyTDR << index), 0); | 1161 | cy_writeb(base_addr + (CyTDR << index), 0); |
1263 | cy_writeb(base_addr + (CyTDR << index), 0x81); | 1162 | cy_writeb(base_addr + (CyTDR << index), 0x81); |
1264 | info->breakon = 0; | 1163 | info->breakon = 0; |
1265 | char_count -= 2; | 1164 | char_count -= 2; |
1266 | } | 1165 | } |
1267 | if (info->breakoff) { | 1166 | if (info->breakoff) { |
1268 | cy_writeb(base_addr + (CyTDR << index), 0); | 1167 | cy_writeb(base_addr + (CyTDR << index), 0); |
1269 | cy_writeb(base_addr + (CyTDR << index), 0x83); | 1168 | cy_writeb(base_addr + (CyTDR << index), 0x83); |
1270 | info->breakoff = 0; | 1169 | info->breakoff = 0; |
1271 | char_count -= 2; | 1170 | char_count -= 2; |
1272 | } | ||
1273 | } | 1171 | } |
1172 | } | ||
1274 | 1173 | ||
1275 | while (char_count-- > 0) { | 1174 | while (char_count-- > 0) { |
1276 | if (!info->xmit_cnt) { | 1175 | if (!info->xmit_cnt) { |
1277 | if (readb(base_addr + (CySRER << index)) & | 1176 | if (readb(base_addr + (CySRER << index)) & CyTxMpty) { |
1278 | CyTxMpty) { | 1177 | cy_writeb(base_addr + (CySRER << index), |
1279 | cy_writeb(base_addr + (CySRER << index), | 1178 | readb(base_addr + (CySRER << index)) & |
1280 | readb(base_addr + | ||
1281 | (CySRER << index)) & | ||
1282 | ~CyTxMpty); | 1179 | ~CyTxMpty); |
1283 | } else { | 1180 | } else { |
1284 | cy_writeb(base_addr + (CySRER << index), | 1181 | cy_writeb(base_addr + (CySRER << index), |
1285 | (readb(base_addr + | 1182 | (readb(base_addr + (CySRER << index)) & |
1286 | (CySRER << index)) & | ||
1287 | ~CyTxRdy) | CyTxMpty); | 1183 | ~CyTxRdy) | CyTxMpty); |
1288 | } | ||
1289 | goto txdone; | ||
1290 | } | 1184 | } |
1291 | if (info->xmit_buf == NULL) { | 1185 | goto done; |
1292 | cy_writeb(base_addr + (CySRER << index), | 1186 | } |
1293 | readb(base_addr + (CySRER << index)) & | 1187 | if (info->xmit_buf == NULL) { |
1188 | cy_writeb(base_addr + (CySRER << index), | ||
1189 | readb(base_addr + (CySRER << index)) & | ||
1294 | ~CyTxRdy); | 1190 | ~CyTxRdy); |
1295 | goto txdone; | 1191 | goto done; |
1296 | } | 1192 | } |
1297 | if (info->tty->stopped || info->tty->hw_stopped) { | 1193 | if (info->tty->stopped || info->tty->hw_stopped) { |
1298 | cy_writeb(base_addr + (CySRER << index), | 1194 | cy_writeb(base_addr + (CySRER << index), |
1299 | readb(base_addr + (CySRER << index)) & | 1195 | readb(base_addr + (CySRER << index)) & |
1300 | ~CyTxRdy); | 1196 | ~CyTxRdy); |
1301 | goto txdone; | 1197 | goto done; |
1302 | } | 1198 | } |
1303 | /* Because the Embedded Transmit Commands have | 1199 | /* Because the Embedded Transmit Commands have been enabled, |
1304 | been enabled, we must check to see if the | 1200 | * we must check to see if the escape character, NULL, is being |
1305 | escape character, NULL, is being sent. If it | 1201 | * sent. If it is, we must ensure that there is room for it to |
1306 | is, we must ensure that there is room for it | 1202 | * be doubled in the output stream. Therefore we no longer |
1307 | to be doubled in the output stream. Therefore | 1203 | * advance the pointer when the character is fetched, but |
1308 | we no longer advance the pointer when the | 1204 | * rather wait until after the check for a NULL output |
1309 | character is fetched, but rather wait until | 1205 | * character. This is necessary because there may not be room |
1310 | after the check for a NULL output character. | 1206 | * for the two chars needed to send a NULL.) |
1311 | This is necessary because there may not be | 1207 | */ |
1312 | room for the two chars needed to send a NULL.) | 1208 | outch = info->xmit_buf[info->xmit_tail]; |
1313 | */ | 1209 | if (outch) { |
1314 | outch = info->xmit_buf[info->xmit_tail]; | 1210 | info->xmit_cnt--; |
1315 | if (outch) { | 1211 | info->xmit_tail = (info->xmit_tail + 1) & |
1212 | (SERIAL_XMIT_SIZE - 1); | ||
1213 | cy_writeb(base_addr + (CyTDR << index), outch); | ||
1214 | info->icount.tx++; | ||
1215 | } else { | ||
1216 | if (char_count > 1) { | ||
1316 | info->xmit_cnt--; | 1217 | info->xmit_cnt--; |
1317 | info->xmit_tail = (info->xmit_tail + 1) & | 1218 | info->xmit_tail = (info->xmit_tail + 1) & |
1318 | (SERIAL_XMIT_SIZE - 1); | 1219 | (SERIAL_XMIT_SIZE - 1); |
1319 | cy_writeb(base_addr + (CyTDR << index), outch); | 1220 | cy_writeb(base_addr + (CyTDR << index), outch); |
1221 | cy_writeb(base_addr + (CyTDR << index), 0); | ||
1320 | info->icount.tx++; | 1222 | info->icount.tx++; |
1321 | } else { | 1223 | char_count--; |
1322 | if (char_count > 1) { | ||
1323 | info->xmit_cnt--; | ||
1324 | info->xmit_tail = (info->xmit_tail + 1)& | ||
1325 | (SERIAL_XMIT_SIZE - 1); | ||
1326 | cy_writeb(base_addr + (CyTDR << index), | ||
1327 | outch); | ||
1328 | cy_writeb(base_addr + (CyTDR << index), | ||
1329 | 0); | ||
1330 | info->icount.tx++; | ||
1331 | char_count--; | ||
1332 | } | ||
1333 | } | 1224 | } |
1334 | } | 1225 | } |
1335 | |||
1336 | txdone: | ||
1337 | if (info->xmit_cnt < WAKEUP_CHARS) { | ||
1338 | cy_sched_event(info, Cy_EVENT_WRITE_WAKEUP); | ||
1339 | } | ||
1340 | txend: | ||
1341 | /* end of service */ | ||
1342 | cy_writeb(base_addr + (CyTIR << index), (save_xir & 0x3f)); | ||
1343 | cy_writeb(base_addr + (CyCAR << index), (save_car)); | ||
1344 | spin_unlock(&cinfo->card_lock); | ||
1345 | } | 1226 | } |
1346 | 1227 | ||
1347 | if (status & CySRModem) { /* modem interrupt */ | 1228 | done: |
1229 | tty_wakeup(info->tty); | ||
1230 | end: | ||
1231 | /* end of service */ | ||
1232 | cy_writeb(base_addr + (CyTIR << index), save_xir & 0x3f); | ||
1233 | cy_writeb(base_addr + (CyCAR << index), save_car); | ||
1234 | } | ||
1348 | 1235 | ||
1349 | /* determine the channel & change to that context */ | 1236 | static void cyy_chip_modem(struct cyclades_card *cinfo, int chip, |
1350 | spin_lock(&cinfo->card_lock); | 1237 | void __iomem *base_addr) |
1351 | save_xir = (u_char) readb(base_addr + (CyMIR << index)); | 1238 | { |
1352 | channel = (u_short) (save_xir & CyIRChannel); | 1239 | struct cyclades_port *info; |
1353 | info = &cinfo->ports[channel + chip * 4]; | 1240 | int index = cinfo->bus_index; |
1354 | save_car = readb(base_addr + (CyCAR << index)); | 1241 | u8 save_xir, channel, save_car, mdm_change, mdm_status; |
1355 | cy_writeb(base_addr + (CyCAR << index), save_xir); | ||
1356 | 1242 | ||
1357 | mdm_change = readb(base_addr + (CyMISR << index)); | 1243 | /* determine the channel & change to that context */ |
1358 | mdm_status = readb(base_addr + (CyMSVR1 << index)); | 1244 | save_xir = readb(base_addr + (CyMIR << index)); |
1245 | channel = save_xir & CyIRChannel; | ||
1246 | info = &cinfo->ports[channel + chip * 4]; | ||
1247 | save_car = readb(base_addr + (CyCAR << index)); | ||
1248 | cy_writeb(base_addr + (CyCAR << index), save_xir); | ||
1359 | 1249 | ||
1360 | if (info->tty) { | 1250 | mdm_change = readb(base_addr + (CyMISR << index)); |
1361 | if (mdm_change & CyANY_DELTA) { | 1251 | mdm_status = readb(base_addr + (CyMSVR1 << index)); |
1362 | /* For statistics only */ | ||
1363 | if (mdm_change & CyDCD) | ||
1364 | info->icount.dcd++; | ||
1365 | if (mdm_change & CyCTS) | ||
1366 | info->icount.cts++; | ||
1367 | if (mdm_change & CyDSR) | ||
1368 | info->icount.dsr++; | ||
1369 | if (mdm_change & CyRI) | ||
1370 | info->icount.rng++; | ||
1371 | |||
1372 | cy_sched_event(info, Cy_EVENT_DELTA_WAKEUP); | ||
1373 | } | ||
1374 | 1252 | ||
1375 | if ((mdm_change & CyDCD) && | 1253 | if (!info->tty) |
1376 | (info->flags & ASYNC_CHECK_CD)) { | 1254 | goto end; |
1377 | if (mdm_status & CyDCD) { | 1255 | |
1378 | cy_sched_event(info, | 1256 | if (mdm_change & CyANY_DELTA) { |
1379 | Cy_EVENT_OPEN_WAKEUP); | 1257 | /* For statistics only */ |
1380 | } else { | 1258 | if (mdm_change & CyDCD) |
1381 | cy_sched_event(info, Cy_EVENT_HANGUP); | 1259 | info->icount.dcd++; |
1382 | } | 1260 | if (mdm_change & CyCTS) |
1383 | } | 1261 | info->icount.cts++; |
1384 | if ((mdm_change & CyCTS) && | 1262 | if (mdm_change & CyDSR) |
1385 | (info->flags & ASYNC_CTS_FLOW)) { | 1263 | info->icount.dsr++; |
1386 | if (info->tty->hw_stopped) { | 1264 | if (mdm_change & CyRI) |
1387 | if (mdm_status & CyCTS) { | 1265 | info->icount.rng++; |
1388 | /* cy_start isn't used | 1266 | |
1389 | because... !!! */ | 1267 | wake_up_interruptible(&info->delta_msr_wait); |
1390 | info->tty->hw_stopped = 0; | 1268 | } |
1391 | cy_writeb(base_addr + | 1269 | |
1392 | (CySRER << index), | 1270 | if ((mdm_change & CyDCD) && (info->flags & ASYNC_CHECK_CD)) { |
1393 | readb(base_addr + | 1271 | if (!(mdm_status & CyDCD)) { |
1394 | (CySRER << | 1272 | tty_hangup(info->tty); |
1395 | index))| | 1273 | info->flags &= ~ASYNC_NORMAL_ACTIVE; |
1396 | CyTxRdy); | 1274 | } |
1397 | cy_sched_event(info, | 1275 | wake_up_interruptible(&info->open_wait); |
1398 | Cy_EVENT_WRITE_WAKEUP); | 1276 | } |
1399 | } | 1277 | if ((mdm_change & CyCTS) && (info->flags & ASYNC_CTS_FLOW)) { |
1400 | } else { | 1278 | if (info->tty->hw_stopped) { |
1401 | if (!(mdm_status & CyCTS)) { | 1279 | if (mdm_status & CyCTS) { |
1402 | /* cy_stop isn't used | 1280 | /* cy_start isn't used |
1403 | because ... !!! */ | 1281 | because... !!! */ |
1404 | info->tty->hw_stopped = 1; | 1282 | info->tty->hw_stopped = 0; |
1405 | cy_writeb(base_addr + | 1283 | cy_writeb(base_addr + (CySRER << index), |
1406 | (CySRER << index), | 1284 | readb(base_addr + (CySRER << index)) | |
1407 | readb(base_addr + | 1285 | CyTxRdy); |
1408 | (CySRER << | 1286 | tty_wakeup(info->tty); |
1409 | index)) & | ||
1410 | ~CyTxRdy); | ||
1411 | } | ||
1412 | } | ||
1413 | } | 1287 | } |
1414 | /* if (mdm_change & CyDSR) { | 1288 | } else { |
1289 | if (!(mdm_status & CyCTS)) { | ||
1290 | /* cy_stop isn't used | ||
1291 | because ... !!! */ | ||
1292 | info->tty->hw_stopped = 1; | ||
1293 | cy_writeb(base_addr + (CySRER << index), | ||
1294 | readb(base_addr + (CySRER << index)) & | ||
1295 | ~CyTxRdy); | ||
1415 | } | 1296 | } |
1416 | if (mdm_change & CyRI) { | ||
1417 | }*/ | ||
1418 | } | 1297 | } |
1419 | /* end of service */ | ||
1420 | cy_writeb(base_addr + (CyMIR << index), (save_xir & 0x3f)); | ||
1421 | cy_writeb(base_addr + (CyCAR << index), save_car); | ||
1422 | spin_unlock(&cinfo->card_lock); | ||
1423 | } | 1298 | } |
1299 | /* if (mdm_change & CyDSR) { | ||
1300 | } | ||
1301 | if (mdm_change & CyRI) { | ||
1302 | }*/ | ||
1303 | end: | ||
1304 | /* end of service */ | ||
1305 | cy_writeb(base_addr + (CyMIR << index), save_xir & 0x3f); | ||
1306 | cy_writeb(base_addr + (CyCAR << index), save_car); | ||
1424 | } | 1307 | } |
1425 | 1308 | ||
1426 | /* The real interrupt service routine is called | 1309 | /* The real interrupt service routine is called |
@@ -1432,10 +1315,8 @@ static irqreturn_t cyy_interrupt(int irq, void *dev_id) | |||
1432 | int status; | 1315 | int status; |
1433 | struct cyclades_card *cinfo = dev_id; | 1316 | struct cyclades_card *cinfo = dev_id; |
1434 | void __iomem *base_addr, *card_base_addr; | 1317 | void __iomem *base_addr, *card_base_addr; |
1435 | int chip; | 1318 | unsigned int chip, too_many, had_work; |
1436 | int index; | 1319 | int index; |
1437 | int too_many; | ||
1438 | int had_work; | ||
1439 | 1320 | ||
1440 | if (unlikely(cinfo == NULL)) { | 1321 | if (unlikely(cinfo == NULL)) { |
1441 | #ifdef CY_DEBUG_INTERRUPTS | 1322 | #ifdef CY_DEBUG_INTERRUPTS |
@@ -1470,11 +1351,16 @@ static irqreturn_t cyy_interrupt(int irq, void *dev_id) | |||
1470 | chips to be checked in a round-robin fashion (after | 1351 | chips to be checked in a round-robin fashion (after |
1471 | draining each of a bunch (1000) of characters). | 1352 | draining each of a bunch (1000) of characters). |
1472 | */ | 1353 | */ |
1473 | if (1000 < too_many++) { | 1354 | if (1000 < too_many++) |
1474 | break; | 1355 | break; |
1475 | } | 1356 | spin_lock(&cinfo->card_lock); |
1476 | cyy_intr_chip(cinfo, chip, base_addr, status, | 1357 | if (status & CySRReceive) /* rx intr */ |
1477 | index); | 1358 | cyy_chip_rx(cinfo, chip, base_addr); |
1359 | if (status & CySRTransmit) /* tx intr */ | ||
1360 | cyy_chip_tx(cinfo, chip, base_addr); | ||
1361 | if (status & CySRModem) /* modem intr */ | ||
1362 | cyy_chip_modem(cinfo, chip, base_addr); | ||
1363 | spin_unlock(&cinfo->card_lock); | ||
1478 | } | 1364 | } |
1479 | } | 1365 | } |
1480 | } while (had_work); | 1366 | } while (had_work); |
@@ -1529,7 +1415,7 @@ cyz_issue_cmd(struct cyclades_card *cinfo, | |||
1529 | struct ZFW_CTRL __iomem *zfw_ctrl; | 1415 | struct ZFW_CTRL __iomem *zfw_ctrl; |
1530 | struct BOARD_CTRL __iomem *board_ctrl; | 1416 | struct BOARD_CTRL __iomem *board_ctrl; |
1531 | __u32 __iomem *pci_doorbell; | 1417 | __u32 __iomem *pci_doorbell; |
1532 | int index; | 1418 | unsigned int index; |
1533 | 1419 | ||
1534 | firm_id = cinfo->base_addr + ID_ADDRESS; | 1420 | firm_id = cinfo->base_addr + ID_ADDRESS; |
1535 | if (!ISZLOADED(*cinfo)) { | 1421 | if (!ISZLOADED(*cinfo)) { |
@@ -1554,13 +1440,12 @@ cyz_issue_cmd(struct cyclades_card *cinfo, | |||
1554 | return 0; | 1440 | return 0; |
1555 | } /* cyz_issue_cmd */ | 1441 | } /* cyz_issue_cmd */ |
1556 | 1442 | ||
1557 | static void | 1443 | static void cyz_handle_rx(struct cyclades_port *info, |
1558 | cyz_handle_rx(struct cyclades_port *info, struct CH_CTRL __iomem *ch_ctrl, | ||
1559 | struct BUF_CTRL __iomem *buf_ctrl) | 1444 | struct BUF_CTRL __iomem *buf_ctrl) |
1560 | { | 1445 | { |
1561 | struct cyclades_card *cinfo = info->card; | 1446 | struct cyclades_card *cinfo = info->card; |
1562 | struct tty_struct *tty = info->tty; | 1447 | struct tty_struct *tty = info->tty; |
1563 | int char_count; | 1448 | unsigned int char_count; |
1564 | int len; | 1449 | int len; |
1565 | #ifdef BLOCKMOVE | 1450 | #ifdef BLOCKMOVE |
1566 | unsigned char *buf; | 1451 | unsigned char *buf; |
@@ -1633,9 +1518,11 @@ cyz_handle_rx(struct cyclades_port *info, struct CH_CTRL __iomem *ch_ctrl, | |||
1633 | char_count = rx_put - rx_get; | 1518 | char_count = rx_put - rx_get; |
1634 | else | 1519 | else |
1635 | char_count = rx_put - rx_get + rx_bufsize; | 1520 | char_count = rx_put - rx_get + rx_bufsize; |
1636 | if (char_count >= (int)readl(&buf_ctrl->rx_threshold)) { | 1521 | if (char_count >= readl(&buf_ctrl->rx_threshold) && |
1637 | cy_sched_event(info, Cy_EVENT_Z_RX_FULL); | 1522 | !timer_pending(&cyz_rx_full_timer[ |
1638 | } | 1523 | info->line])) |
1524 | mod_timer(&cyz_rx_full_timer[info->line], | ||
1525 | jiffies + 1); | ||
1639 | #endif | 1526 | #endif |
1640 | info->idle_stats.recv_idle = jiffies; | 1527 | info->idle_stats.recv_idle = jiffies; |
1641 | tty_schedule_flip(tty); | 1528 | tty_schedule_flip(tty); |
@@ -1645,14 +1532,13 @@ cyz_handle_rx(struct cyclades_port *info, struct CH_CTRL __iomem *ch_ctrl, | |||
1645 | } | 1532 | } |
1646 | } | 1533 | } |
1647 | 1534 | ||
1648 | static void | 1535 | static void cyz_handle_tx(struct cyclades_port *info, |
1649 | cyz_handle_tx(struct cyclades_port *info, struct CH_CTRL __iomem *ch_ctrl, | ||
1650 | struct BUF_CTRL __iomem *buf_ctrl) | 1536 | struct BUF_CTRL __iomem *buf_ctrl) |
1651 | { | 1537 | { |
1652 | struct cyclades_card *cinfo = info->card; | 1538 | struct cyclades_card *cinfo = info->card; |
1653 | struct tty_struct *tty = info->tty; | 1539 | struct tty_struct *tty = info->tty; |
1654 | char data; | 1540 | u8 data; |
1655 | int char_count; | 1541 | unsigned int char_count; |
1656 | #ifdef BLOCKMOVE | 1542 | #ifdef BLOCKMOVE |
1657 | int small_count; | 1543 | int small_count; |
1658 | #endif | 1544 | #endif |
@@ -1717,9 +1603,7 @@ cyz_handle_tx(struct cyclades_port *info, struct CH_CTRL __iomem *ch_ctrl, | |||
1717 | } | 1603 | } |
1718 | #endif | 1604 | #endif |
1719 | ztxdone: | 1605 | ztxdone: |
1720 | if (info->xmit_cnt < WAKEUP_CHARS) { | 1606 | tty_wakeup(tty); |
1721 | cy_sched_event(info, Cy_EVENT_WRITE_WAKEUP); | ||
1722 | } | ||
1723 | /* Update tx_put */ | 1607 | /* Update tx_put */ |
1724 | cy_writel(&buf_ctrl->tx_put, tx_put); | 1608 | cy_writel(&buf_ctrl->tx_put, tx_put); |
1725 | } | 1609 | } |
@@ -1781,10 +1665,11 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo) | |||
1781 | if ((fw_ver > 241 ? ((u_long) param) : | 1665 | if ((fw_ver > 241 ? ((u_long) param) : |
1782 | readl(&ch_ctrl->rs_status)) & | 1666 | readl(&ch_ctrl->rs_status)) & |
1783 | C_RS_DCD) { | 1667 | C_RS_DCD) { |
1784 | cy_sched_event(info, | 1668 | wake_up_interruptible(&info->open_wait); |
1785 | Cy_EVENT_OPEN_WAKEUP); | ||
1786 | } else { | 1669 | } else { |
1787 | cy_sched_event(info, Cy_EVENT_HANGUP); | 1670 | tty_hangup(info->tty); |
1671 | wake_up_interruptible(&info->open_wait); | ||
1672 | info->flags &= ~ASYNC_NORMAL_ACTIVE; | ||
1788 | } | 1673 | } |
1789 | } | 1674 | } |
1790 | break; | 1675 | break; |
@@ -1802,7 +1687,7 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo) | |||
1802 | break; | 1687 | break; |
1803 | #ifdef Z_WAKE | 1688 | #ifdef Z_WAKE |
1804 | case C_CM_IOCTLW: | 1689 | case C_CM_IOCTLW: |
1805 | cy_sched_event(info, Cy_EVENT_SHUTDOWN_WAKEUP); | 1690 | complete(&info->shutdown_wait); |
1806 | break; | 1691 | break; |
1807 | #endif | 1692 | #endif |
1808 | #ifdef CONFIG_CYZ_INTR | 1693 | #ifdef CONFIG_CYZ_INTR |
@@ -1814,7 +1699,7 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo) | |||
1814 | printk(KERN_DEBUG "cyz_interrupt: rcvd intr, card %d, " | 1699 | printk(KERN_DEBUG "cyz_interrupt: rcvd intr, card %d, " |
1815 | "port %ld\n", info->card, channel); | 1700 | "port %ld\n", info->card, channel); |
1816 | #endif | 1701 | #endif |
1817 | cyz_handle_rx(info, ch_ctrl, buf_ctrl); | 1702 | cyz_handle_rx(info, buf_ctrl); |
1818 | break; | 1703 | break; |
1819 | case C_CM_TXBEMPTY: | 1704 | case C_CM_TXBEMPTY: |
1820 | case C_CM_TXLOWWM: | 1705 | case C_CM_TXLOWWM: |
@@ -1824,7 +1709,7 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo) | |||
1824 | printk(KERN_DEBUG "cyz_interrupt: xmit intr, card %d, " | 1709 | printk(KERN_DEBUG "cyz_interrupt: xmit intr, card %d, " |
1825 | "port %ld\n", info->card, channel); | 1710 | "port %ld\n", info->card, channel); |
1826 | #endif | 1711 | #endif |
1827 | cyz_handle_tx(info, ch_ctrl, buf_ctrl); | 1712 | cyz_handle_tx(info, buf_ctrl); |
1828 | break; | 1713 | break; |
1829 | #endif /* CONFIG_CYZ_INTR */ | 1714 | #endif /* CONFIG_CYZ_INTR */ |
1830 | case C_CM_FATAL: | 1715 | case C_CM_FATAL: |
@@ -1834,7 +1719,7 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo) | |||
1834 | break; | 1719 | break; |
1835 | } | 1720 | } |
1836 | if (delta_count) | 1721 | if (delta_count) |
1837 | cy_sched_event(info, Cy_EVENT_DELTA_WAKEUP); | 1722 | wake_up_interruptible(&info->delta_msr_wait); |
1838 | if (special_count) | 1723 | if (special_count) |
1839 | tty_schedule_flip(tty); | 1724 | tty_schedule_flip(tty); |
1840 | } | 1725 | } |
@@ -1893,10 +1778,9 @@ static void cyz_poll(unsigned long arg) | |||
1893 | struct FIRM_ID __iomem *firm_id; | 1778 | struct FIRM_ID __iomem *firm_id; |
1894 | struct ZFW_CTRL __iomem *zfw_ctrl; | 1779 | struct ZFW_CTRL __iomem *zfw_ctrl; |
1895 | struct BOARD_CTRL __iomem *board_ctrl; | 1780 | struct BOARD_CTRL __iomem *board_ctrl; |
1896 | struct CH_CTRL __iomem *ch_ctrl; | ||
1897 | struct BUF_CTRL __iomem *buf_ctrl; | 1781 | struct BUF_CTRL __iomem *buf_ctrl; |
1898 | unsigned long expires = jiffies + HZ; | 1782 | unsigned long expires = jiffies + HZ; |
1899 | int card, port; | 1783 | unsigned int port, card; |
1900 | 1784 | ||
1901 | for (card = 0; card < NR_CARDS; card++) { | 1785 | for (card = 0; card < NR_CARDS; card++) { |
1902 | cinfo = &cy_card[card]; | 1786 | cinfo = &cy_card[card]; |
@@ -1923,12 +1807,11 @@ static void cyz_poll(unsigned long arg) | |||
1923 | for (port = 0; port < cinfo->nports; port++) { | 1807 | for (port = 0; port < cinfo->nports; port++) { |
1924 | info = &cinfo->ports[port]; | 1808 | info = &cinfo->ports[port]; |
1925 | tty = info->tty; | 1809 | tty = info->tty; |
1926 | ch_ctrl = &(zfw_ctrl->ch_ctrl[port]); | ||
1927 | buf_ctrl = &(zfw_ctrl->buf_ctrl[port]); | 1810 | buf_ctrl = &(zfw_ctrl->buf_ctrl[port]); |
1928 | 1811 | ||
1929 | if (!info->throttle) | 1812 | if (!info->throttle) |
1930 | cyz_handle_rx(info, ch_ctrl, buf_ctrl); | 1813 | cyz_handle_rx(info, buf_ctrl); |
1931 | cyz_handle_tx(info, ch_ctrl, buf_ctrl); | 1814 | cyz_handle_tx(info, buf_ctrl); |
1932 | } | 1815 | } |
1933 | /* poll every 'cyz_polling_cycle' period */ | 1816 | /* poll every 'cyz_polling_cycle' period */ |
1934 | expires = jiffies + cyz_polling_cycle; | 1817 | expires = jiffies + cyz_polling_cycle; |
@@ -2491,11 +2374,11 @@ block_til_ready(struct tty_struct *tty, struct file *filp, | |||
2491 | static int cy_open(struct tty_struct *tty, struct file *filp) | 2374 | static int cy_open(struct tty_struct *tty, struct file *filp) |
2492 | { | 2375 | { |
2493 | struct cyclades_port *info; | 2376 | struct cyclades_port *info; |
2494 | unsigned int i; | 2377 | unsigned int i, line; |
2495 | int retval, line; | 2378 | int retval; |
2496 | 2379 | ||
2497 | line = tty->index; | 2380 | line = tty->index; |
2498 | if ((line < 0) || (NR_PORTS <= line)) { | 2381 | if ((tty->index < 0) || (NR_PORTS <= line)) { |
2499 | return -ENODEV; | 2382 | return -ENODEV; |
2500 | } | 2383 | } |
2501 | for (i = 0; i < NR_CARDS; i++) | 2384 | for (i = 0; i < NR_CARDS; i++) |
@@ -2812,7 +2695,6 @@ static void cy_close(struct tty_struct *tty, struct file *filp) | |||
2812 | spin_lock_irqsave(&card->card_lock, flags); | 2695 | spin_lock_irqsave(&card->card_lock, flags); |
2813 | 2696 | ||
2814 | tty->closing = 0; | 2697 | tty->closing = 0; |
2815 | info->event = 0; | ||
2816 | info->tty = NULL; | 2698 | info->tty = NULL; |
2817 | if (info->blocked_open) { | 2699 | if (info->blocked_open) { |
2818 | spin_unlock_irqrestore(&card->card_lock, flags); | 2700 | spin_unlock_irqrestore(&card->card_lock, flags); |
@@ -4444,7 +4326,6 @@ static void cy_hangup(struct tty_struct *tty) | |||
4444 | 4326 | ||
4445 | cy_flush_buffer(tty); | 4327 | cy_flush_buffer(tty); |
4446 | shutdown(info); | 4328 | shutdown(info); |
4447 | info->event = 0; | ||
4448 | info->count = 0; | 4329 | info->count = 0; |
4449 | #ifdef CY_DEBUG_COUNT | 4330 | #ifdef CY_DEBUG_COUNT |
4450 | printk(KERN_DEBUG "cyc:cy_hangup (%d): setting count to 0\n", | 4331 | printk(KERN_DEBUG "cyc:cy_hangup (%d): setting count to 0\n", |
@@ -4467,9 +4348,9 @@ static int __devinit cy_init_card(struct cyclades_card *cinfo) | |||
4467 | { | 4348 | { |
4468 | struct cyclades_port *info; | 4349 | struct cyclades_port *info; |
4469 | u32 uninitialized_var(mailbox); | 4350 | u32 uninitialized_var(mailbox); |
4470 | unsigned int nports; | 4351 | unsigned int nports, port; |
4471 | unsigned short chip_number; | 4352 | unsigned short chip_number; |
4472 | int uninitialized_var(index), port; | 4353 | int uninitialized_var(index); |
4473 | 4354 | ||
4474 | spin_lock_init(&cinfo->card_lock); | 4355 | spin_lock_init(&cinfo->card_lock); |
4475 | 4356 | ||
@@ -4502,7 +4383,6 @@ static int __devinit cy_init_card(struct cyclades_card *cinfo) | |||
4502 | info->closing_wait = CLOSING_WAIT_DELAY; | 4383 | info->closing_wait = CLOSING_WAIT_DELAY; |
4503 | info->close_delay = 5 * HZ / 10; | 4384 | info->close_delay = 5 * HZ / 10; |
4504 | 4385 | ||
4505 | INIT_WORK(&info->tqueue, do_softint); | ||
4506 | init_waitqueue_head(&info->open_wait); | 4386 | init_waitqueue_head(&info->open_wait); |
4507 | init_waitqueue_head(&info->close_wait); | 4387 | init_waitqueue_head(&info->close_wait); |
4508 | init_completion(&info->shutdown_wait); | 4388 | init_completion(&info->shutdown_wait); |
@@ -5236,7 +5116,7 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev, | |||
5236 | } | 5116 | } |
5237 | } | 5117 | } |
5238 | #endif /* CONFIG_CYZ_INTR */ | 5118 | #endif /* CONFIG_CYZ_INTR */ |
5239 | cy_card[card_no].num_chips = -1; | 5119 | cy_card[card_no].num_chips = (unsigned int)-1; |
5240 | } | 5120 | } |
5241 | 5121 | ||
5242 | /* set cy_card */ | 5122 | /* set cy_card */ |
@@ -5480,13 +5360,13 @@ static int __init cy_init(void) | |||
5480 | #ifdef CONFIG_PCI | 5360 | #ifdef CONFIG_PCI |
5481 | /* look for pci boards */ | 5361 | /* look for pci boards */ |
5482 | retval = pci_register_driver(&cy_pci_driver); | 5362 | retval = pci_register_driver(&cy_pci_driver); |
5483 | if (retval && !nboards) | 5363 | if (retval && !nboards) { |
5484 | goto err_unr; | 5364 | tty_unregister_driver(cy_serial_driver); |
5365 | goto err_frtty; | ||
5366 | } | ||
5485 | #endif | 5367 | #endif |
5486 | 5368 | ||
5487 | return 0; | 5369 | return 0; |
5488 | err_unr: | ||
5489 | tty_unregister_driver(cy_serial_driver); | ||
5490 | err_frtty: | 5370 | err_frtty: |
5491 | put_tty_driver(cy_serial_driver); | 5371 | put_tty_driver(cy_serial_driver); |
5492 | err: | 5372 | err: |
@@ -5496,7 +5376,7 @@ err: | |||
5496 | static void __exit cy_cleanup_module(void) | 5376 | static void __exit cy_cleanup_module(void) |
5497 | { | 5377 | { |
5498 | struct cyclades_card *card; | 5378 | struct cyclades_card *card; |
5499 | int i, e1; | 5379 | unsigned int i, e1; |
5500 | 5380 | ||
5501 | #ifndef CONFIG_CYZ_INTR | 5381 | #ifndef CONFIG_CYZ_INTR |
5502 | del_timer_sync(&cyz_timerlist); | 5382 | del_timer_sync(&cyz_timerlist); |
@@ -5524,8 +5404,7 @@ static void __exit cy_cleanup_module(void) | |||
5524 | #endif /* CONFIG_CYZ_INTR */ | 5404 | #endif /* CONFIG_CYZ_INTR */ |
5525 | ) | 5405 | ) |
5526 | free_irq(card->irq, card); | 5406 | free_irq(card->irq, card); |
5527 | for (e1 = card->first_line; | 5407 | for (e1 = card->first_line; e1 < card->first_line + |
5528 | e1 < card->first_line + | ||
5529 | card->nports; e1++) | 5408 | card->nports; e1++) |
5530 | tty_unregister_device(cy_serial_driver, e1); | 5409 | tty_unregister_device(cy_serial_driver, e1); |
5531 | kfree(card->ports); | 5410 | kfree(card->ports); |
diff --git a/drivers/char/drm/drm_bufs.c b/drivers/char/drm/drm_bufs.c index 856774fbe02..d24a6c2c2c2 100644 --- a/drivers/char/drm/drm_bufs.c +++ b/drivers/char/drm/drm_bufs.c | |||
@@ -1456,7 +1456,7 @@ int drm_freebufs(struct drm_device *dev, void *data, | |||
1456 | buf = dma->buflist[idx]; | 1456 | buf = dma->buflist[idx]; |
1457 | if (buf->file_priv != file_priv) { | 1457 | if (buf->file_priv != file_priv) { |
1458 | DRM_ERROR("Process %d freeing buffer not owned\n", | 1458 | DRM_ERROR("Process %d freeing buffer not owned\n", |
1459 | current->pid); | 1459 | task_pid_nr(current)); |
1460 | return -EINVAL; | 1460 | return -EINVAL; |
1461 | } | 1461 | } |
1462 | drm_free_buffer(dev, buf); | 1462 | drm_free_buffer(dev, buf); |
diff --git a/drivers/char/drm/drm_drv.c b/drivers/char/drm/drm_drv.c index 72668b15e5c..44a46268b02 100644 --- a/drivers/char/drm/drm_drv.c +++ b/drivers/char/drm/drm_drv.c | |||
@@ -463,7 +463,7 @@ int drm_ioctl(struct inode *inode, struct file *filp, | |||
463 | ++file_priv->ioctl_count; | 463 | ++file_priv->ioctl_count; |
464 | 464 | ||
465 | DRM_DEBUG("pid=%d, cmd=0x%02x, nr=0x%02x, dev 0x%lx, auth=%d\n", | 465 | DRM_DEBUG("pid=%d, cmd=0x%02x, nr=0x%02x, dev 0x%lx, auth=%d\n", |
466 | current->pid, cmd, nr, | 466 | task_pid_nr(current), cmd, nr, |
467 | (long)old_encode_dev(file_priv->head->device), | 467 | (long)old_encode_dev(file_priv->head->device), |
468 | file_priv->authenticated); | 468 | file_priv->authenticated); |
469 | 469 | ||
diff --git a/drivers/char/drm/drm_fops.c b/drivers/char/drm/drm_fops.c index f383fc37190..3992f73299c 100644 --- a/drivers/char/drm/drm_fops.c +++ b/drivers/char/drm/drm_fops.c | |||
@@ -234,7 +234,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp, | |||
234 | if (!drm_cpu_valid()) | 234 | if (!drm_cpu_valid()) |
235 | return -EINVAL; | 235 | return -EINVAL; |
236 | 236 | ||
237 | DRM_DEBUG("pid = %d, minor = %d\n", current->pid, minor); | 237 | DRM_DEBUG("pid = %d, minor = %d\n", task_pid_nr(current), minor); |
238 | 238 | ||
239 | priv = drm_alloc(sizeof(*priv), DRM_MEM_FILES); | 239 | priv = drm_alloc(sizeof(*priv), DRM_MEM_FILES); |
240 | if (!priv) | 240 | if (!priv) |
@@ -244,7 +244,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp, | |||
244 | filp->private_data = priv; | 244 | filp->private_data = priv; |
245 | priv->filp = filp; | 245 | priv->filp = filp; |
246 | priv->uid = current->euid; | 246 | priv->uid = current->euid; |
247 | priv->pid = current->pid; | 247 | priv->pid = task_pid_nr(current); |
248 | priv->minor = minor; | 248 | priv->minor = minor; |
249 | priv->head = drm_heads[minor]; | 249 | priv->head = drm_heads[minor]; |
250 | priv->ioctl_count = 0; | 250 | priv->ioctl_count = 0; |
@@ -339,7 +339,8 @@ int drm_release(struct inode *inode, struct file *filp) | |||
339 | */ | 339 | */ |
340 | 340 | ||
341 | DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n", | 341 | DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n", |
342 | current->pid, (long)old_encode_dev(file_priv->head->device), | 342 | task_pid_nr(current), |
343 | (long)old_encode_dev(file_priv->head->device), | ||
343 | dev->open_count); | 344 | dev->open_count); |
344 | 345 | ||
345 | if (dev->driver->reclaim_buffers_locked && dev->lock.hw_lock) { | 346 | if (dev->driver->reclaim_buffers_locked && dev->lock.hw_lock) { |
diff --git a/drivers/char/drm/drm_hashtab.c b/drivers/char/drm/drm_hashtab.c index 3ad31907070..4b8e7db5a23 100644 --- a/drivers/char/drm/drm_hashtab.c +++ b/drivers/char/drm/drm_hashtab.c | |||
@@ -29,7 +29,7 @@ | |||
29 | * Simple open hash tab implementation. | 29 | * Simple open hash tab implementation. |
30 | * | 30 | * |
31 | * Authors: | 31 | * Authors: |
32 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 32 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
33 | */ | 33 | */ |
34 | 34 | ||
35 | #include "drmP.h" | 35 | #include "drmP.h" |
diff --git a/drivers/char/drm/drm_hashtab.h b/drivers/char/drm/drm_hashtab.h index 0f137677416..573e333ac45 100644 --- a/drivers/char/drm/drm_hashtab.h +++ b/drivers/char/drm/drm_hashtab.h | |||
@@ -29,7 +29,7 @@ | |||
29 | * Simple open hash tab implementation. | 29 | * Simple open hash tab implementation. |
30 | * | 30 | * |
31 | * Authors: | 31 | * Authors: |
32 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 32 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
33 | */ | 33 | */ |
34 | 34 | ||
35 | #ifndef DRM_HASHTAB_H | 35 | #ifndef DRM_HASHTAB_H |
diff --git a/drivers/char/drm/drm_lock.c b/drivers/char/drm/drm_lock.c index c6b73e744d6..bea2a7d5b2b 100644 --- a/drivers/char/drm/drm_lock.c +++ b/drivers/char/drm/drm_lock.c | |||
@@ -58,12 +58,12 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv) | |||
58 | 58 | ||
59 | if (lock->context == DRM_KERNEL_CONTEXT) { | 59 | if (lock->context == DRM_KERNEL_CONTEXT) { |
60 | DRM_ERROR("Process %d using kernel context %d\n", | 60 | DRM_ERROR("Process %d using kernel context %d\n", |
61 | current->pid, lock->context); | 61 | task_pid_nr(current), lock->context); |
62 | return -EINVAL; | 62 | return -EINVAL; |
63 | } | 63 | } |
64 | 64 | ||
65 | DRM_DEBUG("%d (pid %d) requests lock (0x%08x), flags = 0x%08x\n", | 65 | DRM_DEBUG("%d (pid %d) requests lock (0x%08x), flags = 0x%08x\n", |
66 | lock->context, current->pid, | 66 | lock->context, task_pid_nr(current), |
67 | dev->lock.hw_lock->lock, lock->flags); | 67 | dev->lock.hw_lock->lock, lock->flags); |
68 | 68 | ||
69 | if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE)) | 69 | if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE)) |
@@ -153,7 +153,7 @@ int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv) | |||
153 | 153 | ||
154 | if (lock->context == DRM_KERNEL_CONTEXT) { | 154 | if (lock->context == DRM_KERNEL_CONTEXT) { |
155 | DRM_ERROR("Process %d using kernel context %d\n", | 155 | DRM_ERROR("Process %d using kernel context %d\n", |
156 | current->pid, lock->context); | 156 | task_pid_nr(current), lock->context); |
157 | return -EINVAL; | 157 | return -EINVAL; |
158 | } | 158 | } |
159 | 159 | ||
diff --git a/drivers/char/drm/drm_mm.c b/drivers/char/drm/drm_mm.c index 3e6bc14f744..86f4eb61a6a 100644 --- a/drivers/char/drm/drm_mm.c +++ b/drivers/char/drm/drm_mm.c | |||
@@ -38,7 +38,7 @@ | |||
38 | * Aligned allocations can also see improvement. | 38 | * Aligned allocations can also see improvement. |
39 | * | 39 | * |
40 | * Authors: | 40 | * Authors: |
41 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 41 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
42 | */ | 42 | */ |
43 | 43 | ||
44 | #include "drmP.h" | 44 | #include "drmP.h" |
diff --git a/drivers/char/drm/drm_os_linux.h b/drivers/char/drm/drm_os_linux.h index 114e54e0f61..76e44ac94fb 100644 --- a/drivers/char/drm/drm_os_linux.h +++ b/drivers/char/drm/drm_os_linux.h | |||
@@ -7,7 +7,7 @@ | |||
7 | #include <linux/delay.h> | 7 | #include <linux/delay.h> |
8 | 8 | ||
9 | /** Current process ID */ | 9 | /** Current process ID */ |
10 | #define DRM_CURRENTPID current->pid | 10 | #define DRM_CURRENTPID task_pid_nr(current) |
11 | #define DRM_SUSER(p) capable(CAP_SYS_ADMIN) | 11 | #define DRM_SUSER(p) capable(CAP_SYS_ADMIN) |
12 | #define DRM_UDELAY(d) udelay(d) | 12 | #define DRM_UDELAY(d) udelay(d) |
13 | /** Read a byte from a MMIO region */ | 13 | /** Read a byte from a MMIO region */ |
diff --git a/drivers/char/drm/drm_pci.c b/drivers/char/drm/drm_pci.c index e292bb0eaca..b55d5bc6ea6 100644 --- a/drivers/char/drm/drm_pci.c +++ b/drivers/char/drm/drm_pci.c | |||
@@ -8,12 +8,12 @@ | |||
8 | * \todo Implement the remaining ioctl's for the PCI pools. | 8 | * \todo Implement the remaining ioctl's for the PCI pools. |
9 | * \todo The wrappers here are so thin that they would be better off inlined.. | 9 | * \todo The wrappers here are so thin that they would be better off inlined.. |
10 | * | 10 | * |
11 | * \author Jose Fonseca <jrfonseca@tungstengraphics.com> | 11 | * \author José Fonseca <jrfonseca@tungstengraphics.com> |
12 | * \author Leif Delgass <ldelgass@retinalburn.net> | 12 | * \author Leif Delgass <ldelgass@retinalburn.net> |
13 | */ | 13 | */ |
14 | 14 | ||
15 | /* | 15 | /* |
16 | * Copyright 2003 Jos�Fonseca. | 16 | * Copyright 2003 José Fonseca. |
17 | * Copyright 2003 Leif Delgass. | 17 | * Copyright 2003 Leif Delgass. |
18 | * All Rights Reserved. | 18 | * All Rights Reserved. |
19 | * | 19 | * |
diff --git a/drivers/char/drm/drm_sarea.h b/drivers/char/drm/drm_sarea.h index f5466966081..e040f47f369 100644 --- a/drivers/char/drm/drm_sarea.h +++ b/drivers/char/drm/drm_sarea.h | |||
@@ -2,7 +2,7 @@ | |||
2 | * \file drm_sarea.h | 2 | * \file drm_sarea.h |
3 | * \brief SAREA definitions | 3 | * \brief SAREA definitions |
4 | * | 4 | * |
5 | * \author Michel Dänzer <michel@daenzer.net> | 5 | * \author Michel Dänzer <michel@daenzer.net> |
6 | */ | 6 | */ |
7 | 7 | ||
8 | /* | 8 | /* |
diff --git a/drivers/char/drm/drm_sman.c b/drivers/char/drm/drm_sman.c index 8421a93946d..926f146390c 100644 --- a/drivers/char/drm/drm_sman.c +++ b/drivers/char/drm/drm_sman.c | |||
@@ -33,7 +33,7 @@ | |||
33 | * struct or a context identifier. | 33 | * struct or a context identifier. |
34 | * | 34 | * |
35 | * Authors: | 35 | * Authors: |
36 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 36 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
37 | */ | 37 | */ |
38 | 38 | ||
39 | #include "drm_sman.h" | 39 | #include "drm_sman.h" |
diff --git a/drivers/char/drm/drm_sman.h b/drivers/char/drm/drm_sman.h index 39a39fefeef..08ecf83ad5d 100644 --- a/drivers/char/drm/drm_sman.h +++ b/drivers/char/drm/drm_sman.h | |||
@@ -33,7 +33,7 @@ | |||
33 | * struct or a context identifier. | 33 | * struct or a context identifier. |
34 | * | 34 | * |
35 | * Authors: | 35 | * Authors: |
36 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 36 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
37 | */ | 37 | */ |
38 | 38 | ||
39 | #ifndef DRM_SMAN_H | 39 | #ifndef DRM_SMAN_H |
diff --git a/drivers/char/drm/i810_dma.c b/drivers/char/drm/i810_dma.c index 8e841bdee6d..eb381a7c5be 100644 --- a/drivers/char/drm/i810_dma.c +++ b/drivers/char/drm/i810_dma.c | |||
@@ -1024,7 +1024,7 @@ static int i810_getbuf(struct drm_device *dev, void *data, | |||
1024 | retcode = i810_dma_get_buffer(dev, d, file_priv); | 1024 | retcode = i810_dma_get_buffer(dev, d, file_priv); |
1025 | 1025 | ||
1026 | DRM_DEBUG("i810_dma: %d returning %d, granted = %d\n", | 1026 | DRM_DEBUG("i810_dma: %d returning %d, granted = %d\n", |
1027 | current->pid, retcode, d->granted); | 1027 | task_pid_nr(current), retcode, d->granted); |
1028 | 1028 | ||
1029 | sarea_priv->last_dispatch = (int)hw_status[5]; | 1029 | sarea_priv->last_dispatch = (int)hw_status[5]; |
1030 | 1030 | ||
diff --git a/drivers/char/drm/i830_dma.c b/drivers/char/drm/i830_dma.c index 43a1f78712d..69a363edb0d 100644 --- a/drivers/char/drm/i830_dma.c +++ b/drivers/char/drm/i830_dma.c | |||
@@ -1409,7 +1409,7 @@ static int i830_getbuf(struct drm_device *dev, void *data, | |||
1409 | retcode = i830_dma_get_buffer(dev, d, file_priv); | 1409 | retcode = i830_dma_get_buffer(dev, d, file_priv); |
1410 | 1410 | ||
1411 | DRM_DEBUG("i830_dma: %d returning %d, granted = %d\n", | 1411 | DRM_DEBUG("i830_dma: %d returning %d, granted = %d\n", |
1412 | current->pid, retcode, d->granted); | 1412 | task_pid_nr(current), retcode, d->granted); |
1413 | 1413 | ||
1414 | sarea_priv->last_dispatch = (int)hw_status[5]; | 1414 | sarea_priv->last_dispatch = (int)hw_status[5]; |
1415 | 1415 | ||
diff --git a/drivers/char/drm/r128_drv.h b/drivers/char/drm/r128_drv.h index 250d2aa4658..5041bd8dbed 100644 --- a/drivers/char/drm/r128_drv.h +++ b/drivers/char/drm/r128_drv.h | |||
@@ -29,7 +29,7 @@ | |||
29 | * Rickard E. (Rik) Faith <faith@valinux.com> | 29 | * Rickard E. (Rik) Faith <faith@valinux.com> |
30 | * Kevin E. Martin <martin@valinux.com> | 30 | * Kevin E. Martin <martin@valinux.com> |
31 | * Gareth Hughes <gareth@valinux.com> | 31 | * Gareth Hughes <gareth@valinux.com> |
32 | * Michel D�zer <daenzerm@student.ethz.ch> | 32 | * Michel Dänzer <daenzerm@student.ethz.ch> |
33 | */ | 33 | */ |
34 | 34 | ||
35 | #ifndef __R128_DRV_H__ | 35 | #ifndef __R128_DRV_H__ |
diff --git a/drivers/char/drm/radeon_irq.c b/drivers/char/drm/radeon_irq.c index 2b2407ee490..84f5bc36252 100644 --- a/drivers/char/drm/radeon_irq.c +++ b/drivers/char/drm/radeon_irq.c | |||
@@ -27,7 +27,7 @@ | |||
27 | * | 27 | * |
28 | * Authors: | 28 | * Authors: |
29 | * Keith Whitwell <keith@tungstengraphics.com> | 29 | * Keith Whitwell <keith@tungstengraphics.com> |
30 | * Michel D�zer <michel@daenzer.net> | 30 | * Michel Dänzer <michel@daenzer.net> |
31 | */ | 31 | */ |
32 | 32 | ||
33 | #include "drmP.h" | 33 | #include "drmP.h" |
diff --git a/drivers/char/drm/radeon_state.c b/drivers/char/drm/radeon_state.c index 69c9f2febf4..f824f2f5fdc 100644 --- a/drivers/char/drm/radeon_state.c +++ b/drivers/char/drm/radeon_state.c | |||
@@ -3005,7 +3005,7 @@ static int radeon_cp_getparam(struct drm_device *dev, void *data, struct drm_fil | |||
3005 | /* | 3005 | /* |
3006 | * This ioctl() doesn't work on 64-bit platforms because hw_lock is a | 3006 | * This ioctl() doesn't work on 64-bit platforms because hw_lock is a |
3007 | * pointer which can't fit into an int-sized variable. According to | 3007 | * pointer which can't fit into an int-sized variable. According to |
3008 | * Michel Dänzer, the ioctl() is only used on embedded platforms, so | 3008 | * Michel Dänzer, the ioctl() is only used on embedded platforms, so |
3009 | * not supporting it shouldn't be a problem. If the same functionality | 3009 | * not supporting it shouldn't be a problem. If the same functionality |
3010 | * is needed on 64-bit platforms, a new ioctl() would have to be added, | 3010 | * is needed on 64-bit platforms, a new ioctl() would have to be added, |
3011 | * so backwards-compatibility for the embedded platforms can be | 3011 | * so backwards-compatibility for the embedded platforms can be |
diff --git a/drivers/char/drm/sis_mm.c b/drivers/char/drm/sis_mm.c index 8c66838ff51..6be1c575758 100644 --- a/drivers/char/drm/sis_mm.c +++ b/drivers/char/drm/sis_mm.c | |||
@@ -28,7 +28,7 @@ | |||
28 | 28 | ||
29 | /* | 29 | /* |
30 | * Authors: | 30 | * Authors: |
31 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 31 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
32 | */ | 32 | */ |
33 | 33 | ||
34 | #include "drmP.h" | 34 | #include "drmP.h" |
diff --git a/drivers/char/drm/via_mm.c b/drivers/char/drm/via_mm.c index 9afc1684348..3ffbf864983 100644 --- a/drivers/char/drm/via_mm.c +++ b/drivers/char/drm/via_mm.c | |||
@@ -22,7 +22,7 @@ | |||
22 | * DEALINGS IN THE SOFTWARE. | 22 | * DEALINGS IN THE SOFTWARE. |
23 | */ | 23 | */ |
24 | /* | 24 | /* |
25 | * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 25 | * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
26 | */ | 26 | */ |
27 | 27 | ||
28 | #include "drmP.h" | 28 | #include "drmP.h" |
diff --git a/drivers/char/drm/via_verifier.h b/drivers/char/drm/via_verifier.h index 28b50296a7b..d6f8214b69f 100644 --- a/drivers/char/drm/via_verifier.h +++ b/drivers/char/drm/via_verifier.h | |||
@@ -20,7 +20,7 @@ | |||
20 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 20 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
21 | * DEALINGS IN THE SOFTWARE. | 21 | * DEALINGS IN THE SOFTWARE. |
22 | * | 22 | * |
23 | * Author: Thomas Hellström 2004. | 23 | * Author: Thomas Hellström 2004. |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #ifndef _VIA_VERIFIER_H_ | 26 | #ifndef _VIA_VERIFIER_H_ |
diff --git a/drivers/char/esp.c b/drivers/char/esp.c index 2e7ae42a550..28607763ae6 100644 --- a/drivers/char/esp.c +++ b/drivers/char/esp.c | |||
@@ -19,7 +19,7 @@ | |||
19 | * | 19 | * |
20 | * rs_set_termios fixed to look also for changes of the input | 20 | * rs_set_termios fixed to look also for changes of the input |
21 | * flags INPCK, BRKINT, PARMRK, IGNPAR and IGNBRK. | 21 | * flags INPCK, BRKINT, PARMRK, IGNPAR and IGNBRK. |
22 | * Bernd Anh�pl 05/17/96. | 22 | * Bernd Anhäupl 05/17/96. |
23 | * | 23 | * |
24 | * --- End of notices from serial.c --- | 24 | * --- End of notices from serial.c --- |
25 | * | 25 | * |
@@ -58,10 +58,10 @@ | |||
58 | #include <linux/mm.h> | 58 | #include <linux/mm.h> |
59 | #include <linux/init.h> | 59 | #include <linux/init.h> |
60 | #include <linux/delay.h> | 60 | #include <linux/delay.h> |
61 | #include <linux/bitops.h> | ||
61 | 62 | ||
62 | #include <asm/system.h> | 63 | #include <asm/system.h> |
63 | #include <asm/io.h> | 64 | #include <asm/io.h> |
64 | #include <asm/bitops.h> | ||
65 | 65 | ||
66 | #include <asm/dma.h> | 66 | #include <asm/dma.h> |
67 | #include <linux/slab.h> | 67 | #include <linux/slab.h> |
diff --git a/drivers/char/hw_random/omap-rng.c b/drivers/char/hw_random/omap-rng.c index e13dd1892bf..3f35a1c562b 100644 --- a/drivers/char/hw_random/omap-rng.c +++ b/drivers/char/hw_random/omap-rng.c | |||
@@ -10,7 +10,7 @@ | |||
10 | * Mostly based on original driver: | 10 | * Mostly based on original driver: |
11 | * | 11 | * |
12 | * Copyright (C) 2005 Nokia Corporation | 12 | * Copyright (C) 2005 Nokia Corporation |
13 | * Author: Juha Yrj��<juha.yrjola@nokia.com> | 13 | * Author: Juha Yrjölä <juha.yrjola@nokia.com> |
14 | * | 14 | * |
15 | * This file is licensed under the terms of the GNU General Public | 15 | * This file is licensed under the terms of the GNU General Public |
16 | * License version 2. This program is licensed "as is" without any | 16 | * License version 2. This program is licensed "as is" without any |
diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c index cd406416eff..30e56451642 100644 --- a/drivers/char/i8k.c +++ b/drivers/char/i8k.c | |||
@@ -371,14 +371,14 @@ static int i8k_proc_show(struct seq_file *seq, void *offset) | |||
371 | int fn_key, cpu_temp, ac_power; | 371 | int fn_key, cpu_temp, ac_power; |
372 | int left_fan, right_fan, left_speed, right_speed; | 372 | int left_fan, right_fan, left_speed, right_speed; |
373 | 373 | ||
374 | cpu_temp = i8k_get_temp(0); /* 11100 µs */ | 374 | cpu_temp = i8k_get_temp(0); /* 11100 µs */ |
375 | left_fan = i8k_get_fan_status(I8K_FAN_LEFT); /* 580 µs */ | 375 | left_fan = i8k_get_fan_status(I8K_FAN_LEFT); /* 580 µs */ |
376 | right_fan = i8k_get_fan_status(I8K_FAN_RIGHT); /* 580 µs */ | 376 | right_fan = i8k_get_fan_status(I8K_FAN_RIGHT); /* 580 µs */ |
377 | left_speed = i8k_get_fan_speed(I8K_FAN_LEFT); /* 580 µs */ | 377 | left_speed = i8k_get_fan_speed(I8K_FAN_LEFT); /* 580 µs */ |
378 | right_speed = i8k_get_fan_speed(I8K_FAN_RIGHT); /* 580 µs */ | 378 | right_speed = i8k_get_fan_speed(I8K_FAN_RIGHT); /* 580 µs */ |
379 | fn_key = i8k_get_fn_status(); /* 750 µs */ | 379 | fn_key = i8k_get_fn_status(); /* 750 µs */ |
380 | if (power_status) | 380 | if (power_status) |
381 | ac_power = i8k_get_power_status(); /* 14700 µs */ | 381 | ac_power = i8k_get_power_status(); /* 14700 µs */ |
382 | else | 382 | else |
383 | ac_power = -1; | 383 | ac_power = -1; |
384 | 384 | ||
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index 8435fba73da..5dc1265ce1d 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c | |||
@@ -221,10 +221,8 @@ struct ipmi_smi | |||
221 | void *send_info; | 221 | void *send_info; |
222 | 222 | ||
223 | #ifdef CONFIG_PROC_FS | 223 | #ifdef CONFIG_PROC_FS |
224 | /* A list of proc entries for this interface. This does not | 224 | /* A list of proc entries for this interface. */ |
225 | need a lock, only one thread creates it and only one thread | 225 | struct mutex proc_entry_lock; |
226 | destroys it. */ | ||
227 | spinlock_t proc_entry_lock; | ||
228 | struct ipmi_proc_entry *proc_entries; | 226 | struct ipmi_proc_entry *proc_entries; |
229 | #endif | 227 | #endif |
230 | 228 | ||
@@ -1891,11 +1889,11 @@ int ipmi_smi_add_proc_entry(ipmi_smi_t smi, char *name, | |||
1891 | file->write_proc = write_proc; | 1889 | file->write_proc = write_proc; |
1892 | file->owner = owner; | 1890 | file->owner = owner; |
1893 | 1891 | ||
1894 | spin_lock(&smi->proc_entry_lock); | 1892 | mutex_lock(&smi->proc_entry_lock); |
1895 | /* Stick it on the list. */ | 1893 | /* Stick it on the list. */ |
1896 | entry->next = smi->proc_entries; | 1894 | entry->next = smi->proc_entries; |
1897 | smi->proc_entries = entry; | 1895 | smi->proc_entries = entry; |
1898 | spin_unlock(&smi->proc_entry_lock); | 1896 | mutex_unlock(&smi->proc_entry_lock); |
1899 | } | 1897 | } |
1900 | #endif /* CONFIG_PROC_FS */ | 1898 | #endif /* CONFIG_PROC_FS */ |
1901 | 1899 | ||
@@ -1939,7 +1937,7 @@ static void remove_proc_entries(ipmi_smi_t smi) | |||
1939 | #ifdef CONFIG_PROC_FS | 1937 | #ifdef CONFIG_PROC_FS |
1940 | struct ipmi_proc_entry *entry; | 1938 | struct ipmi_proc_entry *entry; |
1941 | 1939 | ||
1942 | spin_lock(&smi->proc_entry_lock); | 1940 | mutex_lock(&smi->proc_entry_lock); |
1943 | while (smi->proc_entries) { | 1941 | while (smi->proc_entries) { |
1944 | entry = smi->proc_entries; | 1942 | entry = smi->proc_entries; |
1945 | smi->proc_entries = entry->next; | 1943 | smi->proc_entries = entry->next; |
@@ -1948,7 +1946,7 @@ static void remove_proc_entries(ipmi_smi_t smi) | |||
1948 | kfree(entry->name); | 1946 | kfree(entry->name); |
1949 | kfree(entry); | 1947 | kfree(entry); |
1950 | } | 1948 | } |
1951 | spin_unlock(&smi->proc_entry_lock); | 1949 | mutex_unlock(&smi->proc_entry_lock); |
1952 | remove_proc_entry(smi->proc_dir_name, proc_ipmi_root); | 1950 | remove_proc_entry(smi->proc_dir_name, proc_ipmi_root); |
1953 | #endif /* CONFIG_PROC_FS */ | 1951 | #endif /* CONFIG_PROC_FS */ |
1954 | } | 1952 | } |
@@ -2614,6 +2612,14 @@ channel_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg) | |||
2614 | return; | 2612 | return; |
2615 | } | 2613 | } |
2616 | 2614 | ||
2615 | void ipmi_poll_interface(ipmi_user_t user) | ||
2616 | { | ||
2617 | ipmi_smi_t intf = user->intf; | ||
2618 | |||
2619 | if (intf->handlers->poll) | ||
2620 | intf->handlers->poll(intf->send_info); | ||
2621 | } | ||
2622 | |||
2617 | int ipmi_register_smi(struct ipmi_smi_handlers *handlers, | 2623 | int ipmi_register_smi(struct ipmi_smi_handlers *handlers, |
2618 | void *send_info, | 2624 | void *send_info, |
2619 | struct ipmi_device_id *device_id, | 2625 | struct ipmi_device_id *device_id, |
@@ -2671,7 +2677,7 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers, | |||
2671 | } | 2677 | } |
2672 | intf->curr_seq = 0; | 2678 | intf->curr_seq = 0; |
2673 | #ifdef CONFIG_PROC_FS | 2679 | #ifdef CONFIG_PROC_FS |
2674 | spin_lock_init(&intf->proc_entry_lock); | 2680 | mutex_init(&intf->proc_entry_lock); |
2675 | #endif | 2681 | #endif |
2676 | spin_lock_init(&intf->waiting_msgs_lock); | 2682 | spin_lock_init(&intf->waiting_msgs_lock); |
2677 | INIT_LIST_HEAD(&intf->waiting_msgs); | 2683 | INIT_LIST_HEAD(&intf->waiting_msgs); |
@@ -4166,6 +4172,7 @@ EXPORT_SYMBOL(ipmi_destroy_user); | |||
4166 | EXPORT_SYMBOL(ipmi_get_version); | 4172 | EXPORT_SYMBOL(ipmi_get_version); |
4167 | EXPORT_SYMBOL(ipmi_request_settime); | 4173 | EXPORT_SYMBOL(ipmi_request_settime); |
4168 | EXPORT_SYMBOL(ipmi_request_supply_msgs); | 4174 | EXPORT_SYMBOL(ipmi_request_supply_msgs); |
4175 | EXPORT_SYMBOL(ipmi_poll_interface); | ||
4169 | EXPORT_SYMBOL(ipmi_register_smi); | 4176 | EXPORT_SYMBOL(ipmi_register_smi); |
4170 | EXPORT_SYMBOL(ipmi_unregister_smi); | 4177 | EXPORT_SYMBOL(ipmi_unregister_smi); |
4171 | EXPORT_SYMBOL(ipmi_register_for_cmd); | 4178 | EXPORT_SYMBOL(ipmi_register_for_cmd); |
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index c1222e98525..4f560d0bb80 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c | |||
@@ -675,7 +675,8 @@ static void handle_transaction_done(struct smi_info *smi_info) | |||
675 | } | 675 | } |
676 | 676 | ||
677 | /* Called on timeouts and events. Timeouts should pass the elapsed | 677 | /* Called on timeouts and events. Timeouts should pass the elapsed |
678 | time, interrupts should pass in zero. */ | 678 | time, interrupts should pass in zero. Must be called with |
679 | si_lock held and interrupts disabled. */ | ||
679 | static enum si_sm_result smi_event_handler(struct smi_info *smi_info, | 680 | static enum si_sm_result smi_event_handler(struct smi_info *smi_info, |
680 | int time) | 681 | int time) |
681 | { | 682 | { |
@@ -892,13 +893,16 @@ static int ipmi_thread(void *data) | |||
892 | static void poll(void *send_info) | 893 | static void poll(void *send_info) |
893 | { | 894 | { |
894 | struct smi_info *smi_info = send_info; | 895 | struct smi_info *smi_info = send_info; |
896 | unsigned long flags; | ||
895 | 897 | ||
896 | /* | 898 | /* |
897 | * Make sure there is some delay in the poll loop so we can | 899 | * Make sure there is some delay in the poll loop so we can |
898 | * drive time forward and timeout things. | 900 | * drive time forward and timeout things. |
899 | */ | 901 | */ |
900 | udelay(10); | 902 | udelay(10); |
903 | spin_lock_irqsave(&smi_info->si_lock, flags); | ||
901 | smi_event_handler(smi_info, 10); | 904 | smi_event_handler(smi_info, 10); |
905 | spin_unlock_irqrestore(&smi_info->si_lock, flags); | ||
902 | } | 906 | } |
903 | 907 | ||
904 | static void request_events(void *send_info) | 908 | static void request_events(void *send_info) |
@@ -1006,6 +1010,10 @@ static int smi_start_processing(void *send_info, | |||
1006 | 1010 | ||
1007 | new_smi->intf = intf; | 1011 | new_smi->intf = intf; |
1008 | 1012 | ||
1013 | /* Try to claim any interrupts. */ | ||
1014 | if (new_smi->irq_setup) | ||
1015 | new_smi->irq_setup(new_smi); | ||
1016 | |||
1009 | /* Set up the timer that drives the interface. */ | 1017 | /* Set up the timer that drives the interface. */ |
1010 | setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi); | 1018 | setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi); |
1011 | new_smi->last_timeout_jiffies = jiffies; | 1019 | new_smi->last_timeout_jiffies = jiffies; |
@@ -2372,20 +2380,9 @@ static int try_get_dev_id(struct smi_info *smi_info) | |||
2372 | /* Otherwise, we got some data. */ | 2380 | /* Otherwise, we got some data. */ |
2373 | resp_len = smi_info->handlers->get_result(smi_info->si_sm, | 2381 | resp_len = smi_info->handlers->get_result(smi_info->si_sm, |
2374 | resp, IPMI_MAX_MSG_LENGTH); | 2382 | resp, IPMI_MAX_MSG_LENGTH); |
2375 | if (resp_len < 14) { | ||
2376 | /* That's odd, it should be longer. */ | ||
2377 | rv = -EINVAL; | ||
2378 | goto out; | ||
2379 | } | ||
2380 | 2383 | ||
2381 | if ((resp[1] != IPMI_GET_DEVICE_ID_CMD) || (resp[2] != 0)) { | 2384 | /* Check and record info from the get device id, in case we need it. */ |
2382 | /* That's odd, it shouldn't be able to fail. */ | 2385 | rv = ipmi_demangle_device_id(resp, resp_len, &smi_info->device_id); |
2383 | rv = -EINVAL; | ||
2384 | goto out; | ||
2385 | } | ||
2386 | |||
2387 | /* Record info from the get device id, in case we need it. */ | ||
2388 | ipmi_demangle_device_id(resp+3, resp_len-3, &smi_info->device_id); | ||
2389 | 2386 | ||
2390 | out: | 2387 | out: |
2391 | kfree(resp); | 2388 | kfree(resp); |
@@ -2765,10 +2762,6 @@ static int try_smi_init(struct smi_info *new_smi) | |||
2765 | setup_oem_data_handler(new_smi); | 2762 | setup_oem_data_handler(new_smi); |
2766 | setup_xaction_handlers(new_smi); | 2763 | setup_xaction_handlers(new_smi); |
2767 | 2764 | ||
2768 | /* Try to claim any interrupts. */ | ||
2769 | if (new_smi->irq_setup) | ||
2770 | new_smi->irq_setup(new_smi); | ||
2771 | |||
2772 | INIT_LIST_HEAD(&(new_smi->xmit_msgs)); | 2765 | INIT_LIST_HEAD(&(new_smi->xmit_msgs)); |
2773 | INIT_LIST_HEAD(&(new_smi->hp_xmit_msgs)); | 2766 | INIT_LIST_HEAD(&(new_smi->hp_xmit_msgs)); |
2774 | new_smi->curr_msg = NULL; | 2767 | new_smi->curr_msg = NULL; |
diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c index 41f78e2c158..e686fc92516 100644 --- a/drivers/char/ipmi/ipmi_watchdog.c +++ b/drivers/char/ipmi/ipmi_watchdog.c | |||
@@ -50,10 +50,19 @@ | |||
50 | #include <linux/poll.h> | 50 | #include <linux/poll.h> |
51 | #include <linux/string.h> | 51 | #include <linux/string.h> |
52 | #include <linux/ctype.h> | 52 | #include <linux/ctype.h> |
53 | #include <linux/delay.h> | ||
53 | #include <asm/atomic.h> | 54 | #include <asm/atomic.h> |
54 | 55 | ||
55 | #ifdef CONFIG_X86_LOCAL_APIC | 56 | #ifdef CONFIG_X86 |
56 | #include <asm/apic.h> | 57 | /* This is ugly, but I've determined that x86 is the only architecture |
58 | that can reasonably support the IPMI NMI watchdog timeout at this | ||
59 | time. If another architecture adds this capability somehow, it | ||
60 | will have to be a somewhat different mechanism and I have no idea | ||
61 | how it will work. So in the unlikely event that another | ||
62 | architecture supports this, we can figure out a good generic | ||
63 | mechanism for it at that time. */ | ||
64 | #include <asm/kdebug.h> | ||
65 | #define HAVE_DIE_NMI | ||
57 | #endif | 66 | #endif |
58 | 67 | ||
59 | #define PFX "IPMI Watchdog: " | 68 | #define PFX "IPMI Watchdog: " |
@@ -166,8 +175,6 @@ static char expect_close; | |||
166 | 175 | ||
167 | static int ifnum_to_use = -1; | 176 | static int ifnum_to_use = -1; |
168 | 177 | ||
169 | static DECLARE_RWSEM(register_sem); | ||
170 | |||
171 | /* Parameters to ipmi_set_timeout */ | 178 | /* Parameters to ipmi_set_timeout */ |
172 | #define IPMI_SET_TIMEOUT_NO_HB 0 | 179 | #define IPMI_SET_TIMEOUT_NO_HB 0 |
173 | #define IPMI_SET_TIMEOUT_HB_IF_NECESSARY 1 | 180 | #define IPMI_SET_TIMEOUT_HB_IF_NECESSARY 1 |
@@ -193,11 +200,9 @@ static int set_param_int(const char *val, struct kernel_param *kp) | |||
193 | if (endp == val) | 200 | if (endp == val) |
194 | return -EINVAL; | 201 | return -EINVAL; |
195 | 202 | ||
196 | down_read(®ister_sem); | ||
197 | *((int *)kp->arg) = l; | 203 | *((int *)kp->arg) = l; |
198 | if (watchdog_user) | 204 | if (watchdog_user) |
199 | rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY); | 205 | rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY); |
200 | up_read(®ister_sem); | ||
201 | 206 | ||
202 | return rv; | 207 | return rv; |
203 | } | 208 | } |
@@ -226,17 +231,15 @@ static int set_param_str(const char *val, struct kernel_param *kp) | |||
226 | 231 | ||
227 | s = strstrip(valcp); | 232 | s = strstrip(valcp); |
228 | 233 | ||
229 | down_read(®ister_sem); | ||
230 | rv = fn(s, NULL); | 234 | rv = fn(s, NULL); |
231 | if (rv) | 235 | if (rv) |
232 | goto out_unlock; | 236 | goto out; |
233 | 237 | ||
234 | check_parms(); | 238 | check_parms(); |
235 | if (watchdog_user) | 239 | if (watchdog_user) |
236 | rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY); | 240 | rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY); |
237 | 241 | ||
238 | out_unlock: | 242 | out: |
239 | up_read(®ister_sem); | ||
240 | return rv; | 243 | return rv; |
241 | } | 244 | } |
242 | 245 | ||
@@ -319,9 +322,12 @@ static unsigned char ipmi_version_minor; | |||
319 | /* If a pretimeout occurs, this is used to allow only one panic to happen. */ | 322 | /* If a pretimeout occurs, this is used to allow only one panic to happen. */ |
320 | static atomic_t preop_panic_excl = ATOMIC_INIT(-1); | 323 | static atomic_t preop_panic_excl = ATOMIC_INIT(-1); |
321 | 324 | ||
322 | static int ipmi_heartbeat(void); | 325 | #ifdef HAVE_DIE_NMI |
323 | static void panic_halt_ipmi_heartbeat(void); | 326 | static int testing_nmi; |
327 | static int nmi_handler_registered; | ||
328 | #endif | ||
324 | 329 | ||
330 | static int ipmi_heartbeat(void); | ||
325 | 331 | ||
326 | /* We use a mutex to make sure that only one thing can send a set | 332 | /* We use a mutex to make sure that only one thing can send a set |
327 | timeout at one time, because we only have one copy of the data. | 333 | timeout at one time, because we only have one copy of the data. |
@@ -360,6 +366,9 @@ static int i_ipmi_set_timeout(struct ipmi_smi_msg *smi_msg, | |||
360 | int hbnow = 0; | 366 | int hbnow = 0; |
361 | 367 | ||
362 | 368 | ||
369 | /* These can be cleared as we are setting the timeout. */ | ||
370 | pretimeout_since_last_heartbeat = 0; | ||
371 | |||
363 | data[0] = 0; | 372 | data[0] = 0; |
364 | WDOG_SET_TIMER_USE(data[0], WDOG_TIMER_USE_SMS_OS); | 373 | WDOG_SET_TIMER_USE(data[0], WDOG_TIMER_USE_SMS_OS); |
365 | 374 | ||
@@ -434,31 +443,75 @@ static int ipmi_set_timeout(int do_heartbeat) | |||
434 | 443 | ||
435 | wait_for_completion(&set_timeout_wait); | 444 | wait_for_completion(&set_timeout_wait); |
436 | 445 | ||
446 | mutex_unlock(&set_timeout_lock); | ||
447 | |||
437 | if ((do_heartbeat == IPMI_SET_TIMEOUT_FORCE_HB) | 448 | if ((do_heartbeat == IPMI_SET_TIMEOUT_FORCE_HB) |
438 | || ((send_heartbeat_now) | 449 | || ((send_heartbeat_now) |
439 | && (do_heartbeat == IPMI_SET_TIMEOUT_HB_IF_NECESSARY))) | 450 | && (do_heartbeat == IPMI_SET_TIMEOUT_HB_IF_NECESSARY))) |
440 | { | ||
441 | rv = ipmi_heartbeat(); | 451 | rv = ipmi_heartbeat(); |
442 | } | ||
443 | mutex_unlock(&set_timeout_lock); | ||
444 | 452 | ||
445 | out: | 453 | out: |
446 | return rv; | 454 | return rv; |
447 | } | 455 | } |
448 | 456 | ||
449 | static void dummy_smi_free(struct ipmi_smi_msg *msg) | 457 | static atomic_t panic_done_count = ATOMIC_INIT(0); |
458 | |||
459 | static void panic_smi_free(struct ipmi_smi_msg *msg) | ||
450 | { | 460 | { |
461 | atomic_dec(&panic_done_count); | ||
451 | } | 462 | } |
452 | static void dummy_recv_free(struct ipmi_recv_msg *msg) | 463 | static void panic_recv_free(struct ipmi_recv_msg *msg) |
453 | { | 464 | { |
465 | atomic_dec(&panic_done_count); | ||
466 | } | ||
467 | |||
468 | static struct ipmi_smi_msg panic_halt_heartbeat_smi_msg = | ||
469 | { | ||
470 | .done = panic_smi_free | ||
471 | }; | ||
472 | static struct ipmi_recv_msg panic_halt_heartbeat_recv_msg = | ||
473 | { | ||
474 | .done = panic_recv_free | ||
475 | }; | ||
476 | |||
477 | static void panic_halt_ipmi_heartbeat(void) | ||
478 | { | ||
479 | struct kernel_ipmi_msg msg; | ||
480 | struct ipmi_system_interface_addr addr; | ||
481 | int rv; | ||
482 | |||
483 | /* Don't reset the timer if we have the timer turned off, that | ||
484 | re-enables the watchdog. */ | ||
485 | if (ipmi_watchdog_state == WDOG_TIMEOUT_NONE) | ||
486 | return; | ||
487 | |||
488 | addr.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE; | ||
489 | addr.channel = IPMI_BMC_CHANNEL; | ||
490 | addr.lun = 0; | ||
491 | |||
492 | msg.netfn = 0x06; | ||
493 | msg.cmd = IPMI_WDOG_RESET_TIMER; | ||
494 | msg.data = NULL; | ||
495 | msg.data_len = 0; | ||
496 | rv = ipmi_request_supply_msgs(watchdog_user, | ||
497 | (struct ipmi_addr *) &addr, | ||
498 | 0, | ||
499 | &msg, | ||
500 | NULL, | ||
501 | &panic_halt_heartbeat_smi_msg, | ||
502 | &panic_halt_heartbeat_recv_msg, | ||
503 | 1); | ||
504 | if (!rv) | ||
505 | atomic_add(2, &panic_done_count); | ||
454 | } | 506 | } |
507 | |||
455 | static struct ipmi_smi_msg panic_halt_smi_msg = | 508 | static struct ipmi_smi_msg panic_halt_smi_msg = |
456 | { | 509 | { |
457 | .done = dummy_smi_free | 510 | .done = panic_smi_free |
458 | }; | 511 | }; |
459 | static struct ipmi_recv_msg panic_halt_recv_msg = | 512 | static struct ipmi_recv_msg panic_halt_recv_msg = |
460 | { | 513 | { |
461 | .done = dummy_recv_free | 514 | .done = panic_recv_free |
462 | }; | 515 | }; |
463 | 516 | ||
464 | /* Special call, doesn't claim any locks. This is only to be called | 517 | /* Special call, doesn't claim any locks. This is only to be called |
@@ -470,13 +523,21 @@ static void panic_halt_ipmi_set_timeout(void) | |||
470 | int send_heartbeat_now; | 523 | int send_heartbeat_now; |
471 | int rv; | 524 | int rv; |
472 | 525 | ||
526 | /* Wait for the messages to be free. */ | ||
527 | while (atomic_read(&panic_done_count) != 0) | ||
528 | ipmi_poll_interface(watchdog_user); | ||
473 | rv = i_ipmi_set_timeout(&panic_halt_smi_msg, | 529 | rv = i_ipmi_set_timeout(&panic_halt_smi_msg, |
474 | &panic_halt_recv_msg, | 530 | &panic_halt_recv_msg, |
475 | &send_heartbeat_now); | 531 | &send_heartbeat_now); |
476 | if (!rv) { | 532 | if (!rv) { |
533 | atomic_add(2, &panic_done_count); | ||
477 | if (send_heartbeat_now) | 534 | if (send_heartbeat_now) |
478 | panic_halt_ipmi_heartbeat(); | 535 | panic_halt_ipmi_heartbeat(); |
479 | } | 536 | } else |
537 | printk(KERN_WARNING PFX | ||
538 | "Unable to extend the watchdog timeout."); | ||
539 | while (atomic_read(&panic_done_count) != 0) | ||
540 | ipmi_poll_interface(watchdog_user); | ||
480 | } | 541 | } |
481 | 542 | ||
482 | /* We use a semaphore to make sure that only one thing can send a | 543 | /* We use a semaphore to make sure that only one thing can send a |
@@ -505,24 +566,14 @@ static struct ipmi_recv_msg heartbeat_recv_msg = | |||
505 | .done = heartbeat_free_recv | 566 | .done = heartbeat_free_recv |
506 | }; | 567 | }; |
507 | 568 | ||
508 | static struct ipmi_smi_msg panic_halt_heartbeat_smi_msg = | ||
509 | { | ||
510 | .done = dummy_smi_free | ||
511 | }; | ||
512 | static struct ipmi_recv_msg panic_halt_heartbeat_recv_msg = | ||
513 | { | ||
514 | .done = dummy_recv_free | ||
515 | }; | ||
516 | |||
517 | static int ipmi_heartbeat(void) | 569 | static int ipmi_heartbeat(void) |
518 | { | 570 | { |
519 | struct kernel_ipmi_msg msg; | 571 | struct kernel_ipmi_msg msg; |
520 | int rv; | 572 | int rv; |
521 | struct ipmi_system_interface_addr addr; | 573 | struct ipmi_system_interface_addr addr; |
522 | 574 | ||
523 | if (ipmi_ignore_heartbeat) { | 575 | if (ipmi_ignore_heartbeat) |
524 | return 0; | 576 | return 0; |
525 | } | ||
526 | 577 | ||
527 | if (ipmi_start_timer_on_heartbeat) { | 578 | if (ipmi_start_timer_on_heartbeat) { |
528 | ipmi_start_timer_on_heartbeat = 0; | 579 | ipmi_start_timer_on_heartbeat = 0; |
@@ -533,7 +584,6 @@ static int ipmi_heartbeat(void) | |||
533 | We don't want to set the action, though, we want to | 584 | We don't want to set the action, though, we want to |
534 | leave that alone (thus it can't be combined with the | 585 | leave that alone (thus it can't be combined with the |
535 | above operation. */ | 586 | above operation. */ |
536 | pretimeout_since_last_heartbeat = 0; | ||
537 | return ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY); | 587 | return ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY); |
538 | } | 588 | } |
539 | 589 | ||
@@ -586,35 +636,6 @@ static int ipmi_heartbeat(void) | |||
586 | return rv; | 636 | return rv; |
587 | } | 637 | } |
588 | 638 | ||
589 | static void panic_halt_ipmi_heartbeat(void) | ||
590 | { | ||
591 | struct kernel_ipmi_msg msg; | ||
592 | struct ipmi_system_interface_addr addr; | ||
593 | |||
594 | |||
595 | /* Don't reset the timer if we have the timer turned off, that | ||
596 | re-enables the watchdog. */ | ||
597 | if (ipmi_watchdog_state == WDOG_TIMEOUT_NONE) | ||
598 | return; | ||
599 | |||
600 | addr.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE; | ||
601 | addr.channel = IPMI_BMC_CHANNEL; | ||
602 | addr.lun = 0; | ||
603 | |||
604 | msg.netfn = 0x06; | ||
605 | msg.cmd = IPMI_WDOG_RESET_TIMER; | ||
606 | msg.data = NULL; | ||
607 | msg.data_len = 0; | ||
608 | ipmi_request_supply_msgs(watchdog_user, | ||
609 | (struct ipmi_addr *) &addr, | ||
610 | 0, | ||
611 | &msg, | ||
612 | NULL, | ||
613 | &panic_halt_heartbeat_smi_msg, | ||
614 | &panic_halt_heartbeat_recv_msg, | ||
615 | 1); | ||
616 | } | ||
617 | |||
618 | static struct watchdog_info ident = | 639 | static struct watchdog_info ident = |
619 | { | 640 | { |
620 | .options = 0, /* WDIOF_SETTIMEOUT, */ | 641 | .options = 0, /* WDIOF_SETTIMEOUT, */ |
@@ -895,7 +916,6 @@ static void ipmi_register_watchdog(int ipmi_intf) | |||
895 | { | 916 | { |
896 | int rv = -EBUSY; | 917 | int rv = -EBUSY; |
897 | 918 | ||
898 | down_write(®ister_sem); | ||
899 | if (watchdog_user) | 919 | if (watchdog_user) |
900 | goto out; | 920 | goto out; |
901 | 921 | ||
@@ -921,15 +941,56 @@ static void ipmi_register_watchdog(int ipmi_intf) | |||
921 | printk(KERN_CRIT PFX "Unable to register misc device\n"); | 941 | printk(KERN_CRIT PFX "Unable to register misc device\n"); |
922 | } | 942 | } |
923 | 943 | ||
924 | out: | 944 | #ifdef HAVE_DIE_NMI |
925 | up_write(®ister_sem); | 945 | if (nmi_handler_registered) { |
946 | int old_pretimeout = pretimeout; | ||
947 | int old_timeout = timeout; | ||
948 | int old_preop_val = preop_val; | ||
949 | |||
950 | /* Set the pretimeout to go off in a second and give | ||
951 | ourselves plenty of time to stop the timer. */ | ||
952 | ipmi_watchdog_state = WDOG_TIMEOUT_RESET; | ||
953 | preop_val = WDOG_PREOP_NONE; /* Make sure nothing happens */ | ||
954 | pretimeout = 99; | ||
955 | timeout = 100; | ||
956 | |||
957 | testing_nmi = 1; | ||
958 | |||
959 | rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_FORCE_HB); | ||
960 | if (rv) { | ||
961 | printk(KERN_WARNING PFX "Error starting timer to" | ||
962 | " test NMI: 0x%x. The NMI pretimeout will" | ||
963 | " likely not work\n", rv); | ||
964 | rv = 0; | ||
965 | goto out_restore; | ||
966 | } | ||
967 | |||
968 | msleep(1500); | ||
926 | 969 | ||
970 | if (testing_nmi != 2) { | ||
971 | printk(KERN_WARNING PFX "IPMI NMI didn't seem to" | ||
972 | " occur. The NMI pretimeout will" | ||
973 | " likely not work\n"); | ||
974 | } | ||
975 | out_restore: | ||
976 | testing_nmi = 0; | ||
977 | preop_val = old_preop_val; | ||
978 | pretimeout = old_pretimeout; | ||
979 | timeout = old_timeout; | ||
980 | } | ||
981 | #endif | ||
982 | |||
983 | out: | ||
927 | if ((start_now) && (rv == 0)) { | 984 | if ((start_now) && (rv == 0)) { |
928 | /* Run from startup, so start the timer now. */ | 985 | /* Run from startup, so start the timer now. */ |
929 | start_now = 0; /* Disable this function after first startup. */ | 986 | start_now = 0; /* Disable this function after first startup. */ |
930 | ipmi_watchdog_state = action_val; | 987 | ipmi_watchdog_state = action_val; |
931 | ipmi_set_timeout(IPMI_SET_TIMEOUT_FORCE_HB); | 988 | ipmi_set_timeout(IPMI_SET_TIMEOUT_FORCE_HB); |
932 | printk(KERN_INFO PFX "Starting now!\n"); | 989 | printk(KERN_INFO PFX "Starting now!\n"); |
990 | } else { | ||
991 | /* Stop the timer now. */ | ||
992 | ipmi_watchdog_state = WDOG_TIMEOUT_NONE; | ||
993 | ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB); | ||
933 | } | 994 | } |
934 | } | 995 | } |
935 | 996 | ||
@@ -937,8 +998,6 @@ static void ipmi_unregister_watchdog(int ipmi_intf) | |||
937 | { | 998 | { |
938 | int rv; | 999 | int rv; |
939 | 1000 | ||
940 | down_write(®ister_sem); | ||
941 | |||
942 | if (!watchdog_user) | 1001 | if (!watchdog_user) |
943 | goto out; | 1002 | goto out; |
944 | 1003 | ||
@@ -963,20 +1022,44 @@ static void ipmi_unregister_watchdog(int ipmi_intf) | |||
963 | watchdog_user = NULL; | 1022 | watchdog_user = NULL; |
964 | 1023 | ||
965 | out: | 1024 | out: |
966 | up_write(®ister_sem); | 1025 | return; |
967 | } | 1026 | } |
968 | 1027 | ||
969 | #ifdef HAVE_NMI_HANDLER | 1028 | #ifdef HAVE_DIE_NMI |
970 | static int | 1029 | static int |
971 | ipmi_nmi(void *dev_id, int cpu, int handled) | 1030 | ipmi_nmi(struct notifier_block *self, unsigned long val, void *data) |
972 | { | 1031 | { |
1032 | struct die_args *args = data; | ||
1033 | |||
1034 | if (val != DIE_NMI) | ||
1035 | return NOTIFY_OK; | ||
1036 | |||
1037 | /* Hack, if it's a memory or I/O error, ignore it. */ | ||
1038 | if (args->err & 0xc0) | ||
1039 | return NOTIFY_OK; | ||
1040 | |||
1041 | /* | ||
1042 | * If we get here, it's an NMI that's not a memory or I/O | ||
1043 | * error. We can't truly tell if it's from IPMI or not | ||
1044 | * without sending a message, and sending a message is almost | ||
1045 | * impossible because of locking. | ||
1046 | */ | ||
1047 | |||
1048 | if (testing_nmi) { | ||
1049 | testing_nmi = 2; | ||
1050 | return NOTIFY_STOP; | ||
1051 | } | ||
1052 | |||
973 | /* If we are not expecting a timeout, ignore it. */ | 1053 | /* If we are not expecting a timeout, ignore it. */ |
974 | if (ipmi_watchdog_state == WDOG_TIMEOUT_NONE) | 1054 | if (ipmi_watchdog_state == WDOG_TIMEOUT_NONE) |
975 | return NOTIFY_DONE; | 1055 | return NOTIFY_OK; |
1056 | |||
1057 | if (preaction_val != WDOG_PRETIMEOUT_NMI) | ||
1058 | return NOTIFY_OK; | ||
976 | 1059 | ||
977 | /* If no one else handled the NMI, we assume it was the IPMI | 1060 | /* If no one else handled the NMI, we assume it was the IPMI |
978 | watchdog. */ | 1061 | watchdog. */ |
979 | if ((!handled) && (preop_val == WDOG_PREOP_PANIC)) { | 1062 | if (preop_val == WDOG_PREOP_PANIC) { |
980 | /* On some machines, the heartbeat will give | 1063 | /* On some machines, the heartbeat will give |
981 | an error and not work unless we re-enable | 1064 | an error and not work unless we re-enable |
982 | the timer. So do so. */ | 1065 | the timer. So do so. */ |
@@ -985,18 +1068,12 @@ ipmi_nmi(void *dev_id, int cpu, int handled) | |||
985 | panic(PFX "pre-timeout"); | 1068 | panic(PFX "pre-timeout"); |
986 | } | 1069 | } |
987 | 1070 | ||
988 | return NOTIFY_DONE; | 1071 | return NOTIFY_STOP; |
989 | } | 1072 | } |
990 | 1073 | ||
991 | static struct nmi_handler ipmi_nmi_handler = | 1074 | static struct notifier_block ipmi_nmi_handler = { |
992 | { | 1075 | .notifier_call = ipmi_nmi |
993 | .link = LIST_HEAD_INIT(ipmi_nmi_handler.link), | ||
994 | .dev_name = "ipmi_watchdog", | ||
995 | .dev_id = NULL, | ||
996 | .handler = ipmi_nmi, | ||
997 | .priority = 0, /* Call us last. */ | ||
998 | }; | 1076 | }; |
999 | int nmi_handler_registered; | ||
1000 | #endif | 1077 | #endif |
1001 | 1078 | ||
1002 | static int wdog_reboot_handler(struct notifier_block *this, | 1079 | static int wdog_reboot_handler(struct notifier_block *this, |
@@ -1009,7 +1086,7 @@ static int wdog_reboot_handler(struct notifier_block *this, | |||
1009 | /* Make sure we only do this once. */ | 1086 | /* Make sure we only do this once. */ |
1010 | reboot_event_handled = 1; | 1087 | reboot_event_handled = 1; |
1011 | 1088 | ||
1012 | if (code == SYS_DOWN || code == SYS_HALT) { | 1089 | if (code == SYS_POWER_OFF || code == SYS_HALT) { |
1013 | /* Disable the WDT if we are shutting down. */ | 1090 | /* Disable the WDT if we are shutting down. */ |
1014 | ipmi_watchdog_state = WDOG_TIMEOUT_NONE; | 1091 | ipmi_watchdog_state = WDOG_TIMEOUT_NONE; |
1015 | panic_halt_ipmi_set_timeout(); | 1092 | panic_halt_ipmi_set_timeout(); |
@@ -1113,7 +1190,7 @@ static int preaction_op(const char *inval, char *outval) | |||
1113 | preaction_val = WDOG_PRETIMEOUT_NONE; | 1190 | preaction_val = WDOG_PRETIMEOUT_NONE; |
1114 | else if (strcmp(inval, "pre_smi") == 0) | 1191 | else if (strcmp(inval, "pre_smi") == 0) |
1115 | preaction_val = WDOG_PRETIMEOUT_SMI; | 1192 | preaction_val = WDOG_PRETIMEOUT_SMI; |
1116 | #ifdef HAVE_NMI_HANDLER | 1193 | #ifdef HAVE_DIE_NMI |
1117 | else if (strcmp(inval, "pre_nmi") == 0) | 1194 | else if (strcmp(inval, "pre_nmi") == 0) |
1118 | preaction_val = WDOG_PRETIMEOUT_NMI; | 1195 | preaction_val = WDOG_PRETIMEOUT_NMI; |
1119 | #endif | 1196 | #endif |
@@ -1147,7 +1224,7 @@ static int preop_op(const char *inval, char *outval) | |||
1147 | 1224 | ||
1148 | static void check_parms(void) | 1225 | static void check_parms(void) |
1149 | { | 1226 | { |
1150 | #ifdef HAVE_NMI_HANDLER | 1227 | #ifdef HAVE_DIE_NMI |
1151 | int do_nmi = 0; | 1228 | int do_nmi = 0; |
1152 | int rv; | 1229 | int rv; |
1153 | 1230 | ||
@@ -1160,20 +1237,9 @@ static void check_parms(void) | |||
1160 | preop_op("preop_none", NULL); | 1237 | preop_op("preop_none", NULL); |
1161 | do_nmi = 0; | 1238 | do_nmi = 0; |
1162 | } | 1239 | } |
1163 | #ifdef CONFIG_X86_LOCAL_APIC | ||
1164 | if (nmi_watchdog == NMI_IO_APIC) { | ||
1165 | printk(KERN_WARNING PFX "nmi_watchdog is set to IO APIC" | ||
1166 | " mode (value is %d), that is incompatible" | ||
1167 | " with using NMI in the IPMI watchdog." | ||
1168 | " Disabling IPMI nmi pretimeout.\n", | ||
1169 | nmi_watchdog); | ||
1170 | preaction_val = WDOG_PRETIMEOUT_NONE; | ||
1171 | do_nmi = 0; | ||
1172 | } | ||
1173 | #endif | ||
1174 | } | 1240 | } |
1175 | if (do_nmi && !nmi_handler_registered) { | 1241 | if (do_nmi && !nmi_handler_registered) { |
1176 | rv = request_nmi(&ipmi_nmi_handler); | 1242 | rv = register_die_notifier(&ipmi_nmi_handler); |
1177 | if (rv) { | 1243 | if (rv) { |
1178 | printk(KERN_WARNING PFX | 1244 | printk(KERN_WARNING PFX |
1179 | "Can't register nmi handler\n"); | 1245 | "Can't register nmi handler\n"); |
@@ -1181,7 +1247,7 @@ static void check_parms(void) | |||
1181 | } else | 1247 | } else |
1182 | nmi_handler_registered = 1; | 1248 | nmi_handler_registered = 1; |
1183 | } else if (!do_nmi && nmi_handler_registered) { | 1249 | } else if (!do_nmi && nmi_handler_registered) { |
1184 | release_nmi(&ipmi_nmi_handler); | 1250 | unregister_die_notifier(&ipmi_nmi_handler); |
1185 | nmi_handler_registered = 0; | 1251 | nmi_handler_registered = 0; |
1186 | } | 1252 | } |
1187 | #endif | 1253 | #endif |
@@ -1217,9 +1283,9 @@ static int __init ipmi_wdog_init(void) | |||
1217 | 1283 | ||
1218 | rv = ipmi_smi_watcher_register(&smi_watcher); | 1284 | rv = ipmi_smi_watcher_register(&smi_watcher); |
1219 | if (rv) { | 1285 | if (rv) { |
1220 | #ifdef HAVE_NMI_HANDLER | 1286 | #ifdef HAVE_DIE_NMI |
1221 | if (preaction_val == WDOG_PRETIMEOUT_NMI) | 1287 | if (nmi_handler_registered) |
1222 | release_nmi(&ipmi_nmi_handler); | 1288 | unregister_die_notifier(&ipmi_nmi_handler); |
1223 | #endif | 1289 | #endif |
1224 | atomic_notifier_chain_unregister(&panic_notifier_list, | 1290 | atomic_notifier_chain_unregister(&panic_notifier_list, |
1225 | &wdog_panic_notifier); | 1291 | &wdog_panic_notifier); |
@@ -1238,9 +1304,9 @@ static void __exit ipmi_wdog_exit(void) | |||
1238 | ipmi_smi_watcher_unregister(&smi_watcher); | 1304 | ipmi_smi_watcher_unregister(&smi_watcher); |
1239 | ipmi_unregister_watchdog(watchdog_ifnum); | 1305 | ipmi_unregister_watchdog(watchdog_ifnum); |
1240 | 1306 | ||
1241 | #ifdef HAVE_NMI_HANDLER | 1307 | #ifdef HAVE_DIE_NMI |
1242 | if (nmi_handler_registered) | 1308 | if (nmi_handler_registered) |
1243 | release_nmi(&ipmi_nmi_handler); | 1309 | unregister_die_notifier(&ipmi_nmi_handler); |
1244 | #endif | 1310 | #endif |
1245 | 1311 | ||
1246 | atomic_notifier_chain_unregister(&panic_notifier_list, | 1312 | atomic_notifier_chain_unregister(&panic_notifier_list, |
diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c index 77a7a4a0662..85d596a3c18 100644 --- a/drivers/char/isicom.c +++ b/drivers/char/isicom.c | |||
@@ -1529,7 +1529,7 @@ static int __devinit reset_card(struct pci_dev *pdev, | |||
1529 | portcount = inw(base + 0x2); | 1529 | portcount = inw(base + 0x2); |
1530 | if (!inw(base + 0xe) & 0x1 || (portcount != 0 && portcount != 4 && | 1530 | if (!inw(base + 0xe) & 0x1 || (portcount != 0 && portcount != 4 && |
1531 | portcount != 8 && portcount != 16)) { | 1531 | portcount != 8 && portcount != 16)) { |
1532 | dev_err(&pdev->dev, "ISILoad:PCI Card%d reset failure.", | 1532 | dev_err(&pdev->dev, "ISILoad:PCI Card%d reset failure.\n", |
1533 | card + 1); | 1533 | card + 1); |
1534 | retval = -EIO; | 1534 | retval = -EIO; |
1535 | goto end; | 1535 | goto end; |
@@ -1622,7 +1622,9 @@ static int __devinit load_firmware(struct pci_dev *pdev, | |||
1622 | 1622 | ||
1623 | if ((status = inw(base + 0x4)) != 0) { | 1623 | if ((status = inw(base + 0x4)) != 0) { |
1624 | dev_warn(&pdev->dev, "Card%d rejected load header:\n" | 1624 | dev_warn(&pdev->dev, "Card%d rejected load header:\n" |
1625 | "Address:0x%x\nCount:0x%x\nStatus:0x%x\n", | 1625 | KERN_WARNING "Address:0x%x\n" |
1626 | KERN_WARNING "Count:0x%x\n" | ||
1627 | KERN_WARNING "Status:0x%x\n", | ||
1626 | index + 1, frame->addr, frame->count, status); | 1628 | index + 1, frame->addr, frame->count, status); |
1627 | goto errrelfw; | 1629 | goto errrelfw; |
1628 | } | 1630 | } |
@@ -1666,7 +1668,9 @@ static int __devinit load_firmware(struct pci_dev *pdev, | |||
1666 | 1668 | ||
1667 | if ((status = inw(base + 0x4)) != 0) { | 1669 | if ((status = inw(base + 0x4)) != 0) { |
1668 | dev_warn(&pdev->dev, "Card%d rejected verify header:\n" | 1670 | dev_warn(&pdev->dev, "Card%d rejected verify header:\n" |
1669 | "Address:0x%x\nCount:0x%x\nStatus: 0x%x\n", | 1671 | KERN_WARNING "Address:0x%x\n" |
1672 | KERN_WARNING "Count:0x%x\n" | ||
1673 | KERN_WARNING "Status: 0x%x\n", | ||
1670 | index + 1, frame->addr, frame->count, status); | 1674 | index + 1, frame->addr, frame->count, status); |
1671 | goto errrelfw; | 1675 | goto errrelfw; |
1672 | } | 1676 | } |
diff --git a/drivers/char/keyboard.c b/drivers/char/keyboard.c index 212276affa1..fc54d234507 100644 --- a/drivers/char/keyboard.c +++ b/drivers/char/keyboard.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include <linux/sysrq.h> | 42 | #include <linux/sysrq.h> |
43 | #include <linux/input.h> | 43 | #include <linux/input.h> |
44 | #include <linux/reboot.h> | 44 | #include <linux/reboot.h> |
45 | #include <linux/notifier.h> | ||
45 | 46 | ||
46 | extern void ctrl_alt_del(void); | 47 | extern void ctrl_alt_del(void); |
47 | 48 | ||
@@ -81,7 +82,8 @@ void compute_shiftstate(void); | |||
81 | typedef void (k_handler_fn)(struct vc_data *vc, unsigned char value, | 82 | typedef void (k_handler_fn)(struct vc_data *vc, unsigned char value, |
82 | char up_flag); | 83 | char up_flag); |
83 | static k_handler_fn K_HANDLERS; | 84 | static k_handler_fn K_HANDLERS; |
84 | static k_handler_fn *k_handler[16] = { K_HANDLERS }; | 85 | k_handler_fn *k_handler[16] = { K_HANDLERS }; |
86 | EXPORT_SYMBOL_GPL(k_handler); | ||
85 | 87 | ||
86 | #define FN_HANDLERS\ | 88 | #define FN_HANDLERS\ |
87 | fn_null, fn_enter, fn_show_ptregs, fn_show_mem,\ | 89 | fn_null, fn_enter, fn_show_ptregs, fn_show_mem,\ |
@@ -127,7 +129,7 @@ int shift_state = 0; | |||
127 | */ | 129 | */ |
128 | 130 | ||
129 | static struct input_handler kbd_handler; | 131 | static struct input_handler kbd_handler; |
130 | static unsigned long key_down[NBITS(KEY_MAX)]; /* keyboard key bitmap */ | 132 | static unsigned long key_down[BITS_TO_LONGS(KEY_CNT)]; /* keyboard key bitmap */ |
131 | static unsigned char shift_down[NR_SHIFT]; /* shift state counters.. */ | 133 | static unsigned char shift_down[NR_SHIFT]; /* shift state counters.. */ |
132 | static int dead_key_next; | 134 | static int dead_key_next; |
133 | static int npadch = -1; /* -1 or number assembled on pad */ | 135 | static int npadch = -1; /* -1 or number assembled on pad */ |
@@ -160,6 +162,23 @@ static int sysrq_alt_use; | |||
160 | static int sysrq_alt; | 162 | static int sysrq_alt; |
161 | 163 | ||
162 | /* | 164 | /* |
165 | * Notifier list for console keyboard events | ||
166 | */ | ||
167 | static ATOMIC_NOTIFIER_HEAD(keyboard_notifier_list); | ||
168 | |||
169 | int register_keyboard_notifier(struct notifier_block *nb) | ||
170 | { | ||
171 | return atomic_notifier_chain_register(&keyboard_notifier_list, nb); | ||
172 | } | ||
173 | EXPORT_SYMBOL_GPL(register_keyboard_notifier); | ||
174 | |||
175 | int unregister_keyboard_notifier(struct notifier_block *nb) | ||
176 | { | ||
177 | return atomic_notifier_chain_unregister(&keyboard_notifier_list, nb); | ||
178 | } | ||
179 | EXPORT_SYMBOL_GPL(unregister_keyboard_notifier); | ||
180 | |||
181 | /* | ||
163 | * Translation of scancodes to keycodes. We set them on only the first | 182 | * Translation of scancodes to keycodes. We set them on only the first |
164 | * keyboard in the list that accepts the scancode and keycode. | 183 | * keyboard in the list that accepts the scancode and keycode. |
165 | * Explanation for not choosing the first attached keyboard anymore: | 184 | * Explanation for not choosing the first attached keyboard anymore: |
@@ -1130,6 +1149,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) | |||
1130 | unsigned char type, raw_mode; | 1149 | unsigned char type, raw_mode; |
1131 | struct tty_struct *tty; | 1150 | struct tty_struct *tty; |
1132 | int shift_final; | 1151 | int shift_final; |
1152 | struct keyboard_notifier_param param = { .vc = vc, .value = keycode, .down = down }; | ||
1133 | 1153 | ||
1134 | tty = vc->vc_tty; | 1154 | tty = vc->vc_tty; |
1135 | 1155 | ||
@@ -1217,10 +1237,11 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) | |||
1217 | return; | 1237 | return; |
1218 | } | 1238 | } |
1219 | 1239 | ||
1220 | shift_final = (shift_state | kbd->slockstate) ^ kbd->lockstate; | 1240 | param.shift = shift_final = (shift_state | kbd->slockstate) ^ kbd->lockstate; |
1221 | key_map = key_maps[shift_final]; | 1241 | key_map = key_maps[shift_final]; |
1222 | 1242 | ||
1223 | if (!key_map) { | 1243 | if (atomic_notifier_call_chain(&keyboard_notifier_list, KBD_KEYCODE, ¶m) == NOTIFY_STOP || !key_map) { |
1244 | atomic_notifier_call_chain(&keyboard_notifier_list, KBD_UNBOUND_KEYCODE, ¶m); | ||
1224 | compute_shiftstate(); | 1245 | compute_shiftstate(); |
1225 | kbd->slockstate = 0; | 1246 | kbd->slockstate = 0; |
1226 | return; | 1247 | return; |
@@ -1237,6 +1258,9 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) | |||
1237 | type = KTYP(keysym); | 1258 | type = KTYP(keysym); |
1238 | 1259 | ||
1239 | if (type < 0xf0) { | 1260 | if (type < 0xf0) { |
1261 | param.value = keysym; | ||
1262 | if (atomic_notifier_call_chain(&keyboard_notifier_list, KBD_UNICODE, ¶m) == NOTIFY_STOP) | ||
1263 | return; | ||
1240 | if (down && !raw_mode) | 1264 | if (down && !raw_mode) |
1241 | to_utf8(vc, keysym); | 1265 | to_utf8(vc, keysym); |
1242 | return; | 1266 | return; |
@@ -1244,9 +1268,6 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) | |||
1244 | 1268 | ||
1245 | type -= 0xf0; | 1269 | type -= 0xf0; |
1246 | 1270 | ||
1247 | if (raw_mode && type != KT_SPEC && type != KT_SHIFT) | ||
1248 | return; | ||
1249 | |||
1250 | if (type == KT_LETTER) { | 1271 | if (type == KT_LETTER) { |
1251 | type = KT_LATIN; | 1272 | type = KT_LATIN; |
1252 | if (vc_kbd_led(kbd, VC_CAPSLOCK)) { | 1273 | if (vc_kbd_led(kbd, VC_CAPSLOCK)) { |
@@ -1255,9 +1276,18 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) | |||
1255 | keysym = key_map[keycode]; | 1276 | keysym = key_map[keycode]; |
1256 | } | 1277 | } |
1257 | } | 1278 | } |
1279 | param.value = keysym; | ||
1280 | |||
1281 | if (atomic_notifier_call_chain(&keyboard_notifier_list, KBD_KEYSYM, ¶m) == NOTIFY_STOP) | ||
1282 | return; | ||
1283 | |||
1284 | if (raw_mode && type != KT_SPEC && type != KT_SHIFT) | ||
1285 | return; | ||
1258 | 1286 | ||
1259 | (*k_handler[type])(vc, keysym & 0xff, !down); | 1287 | (*k_handler[type])(vc, keysym & 0xff, !down); |
1260 | 1288 | ||
1289 | atomic_notifier_call_chain(&keyboard_notifier_list, KBD_POST_KEYSYM, ¶m); | ||
1290 | |||
1261 | if (type != KT_SLOCK) | 1291 | if (type != KT_SLOCK) |
1262 | kbd->slockstate = 0; | 1292 | kbd->slockstate = 0; |
1263 | } | 1293 | } |
@@ -1347,12 +1377,12 @@ static void kbd_start(struct input_handle *handle) | |||
1347 | static const struct input_device_id kbd_ids[] = { | 1377 | static const struct input_device_id kbd_ids[] = { |
1348 | { | 1378 | { |
1349 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT, | 1379 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT, |
1350 | .evbit = { BIT(EV_KEY) }, | 1380 | .evbit = { BIT_MASK(EV_KEY) }, |
1351 | }, | 1381 | }, |
1352 | 1382 | ||
1353 | { | 1383 | { |
1354 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT, | 1384 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT, |
1355 | .evbit = { BIT(EV_SND) }, | 1385 | .evbit = { BIT_MASK(EV_SND) }, |
1356 | }, | 1386 | }, |
1357 | 1387 | ||
1358 | { }, /* Terminating entry */ | 1388 | { }, /* Terminating entry */ |
diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c index ed76f0a127f..2fc255a2148 100644 --- a/drivers/char/moxa.c +++ b/drivers/char/moxa.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <linux/pci.h> | 41 | #include <linux/pci.h> |
42 | #include <linux/init.h> | 42 | #include <linux/init.h> |
43 | #include <linux/bitops.h> | 43 | #include <linux/bitops.h> |
44 | #include <linux/completion.h> | ||
44 | 45 | ||
45 | #include <asm/system.h> | 46 | #include <asm/system.h> |
46 | #include <asm/io.h> | 47 | #include <asm/io.h> |
@@ -142,7 +143,7 @@ struct moxa_port { | |||
142 | struct tty_struct *tty; | 143 | struct tty_struct *tty; |
143 | int cflag; | 144 | int cflag; |
144 | wait_queue_head_t open_wait; | 145 | wait_queue_head_t open_wait; |
145 | wait_queue_head_t close_wait; | 146 | struct completion close_wait; |
146 | 147 | ||
147 | struct timer_list emptyTimer; | 148 | struct timer_list emptyTimer; |
148 | 149 | ||
@@ -166,7 +167,6 @@ struct moxa_port { | |||
166 | 167 | ||
167 | #define WAKEUP_CHARS 256 | 168 | #define WAKEUP_CHARS 256 |
168 | 169 | ||
169 | static int verbose = 0; | ||
170 | static int ttymajor = MOXAMAJOR; | 170 | static int ttymajor = MOXAMAJOR; |
171 | /* Variables for insmod */ | 171 | /* Variables for insmod */ |
172 | #ifdef MODULE | 172 | #ifdef MODULE |
@@ -184,7 +184,6 @@ module_param_array(baseaddr, int, NULL, 0); | |||
184 | module_param_array(numports, int, NULL, 0); | 184 | module_param_array(numports, int, NULL, 0); |
185 | #endif | 185 | #endif |
186 | module_param(ttymajor, int, 0); | 186 | module_param(ttymajor, int, 0); |
187 | module_param(verbose, bool, 0644); | ||
188 | 187 | ||
189 | /* | 188 | /* |
190 | * static functions: | 189 | * static functions: |
@@ -208,13 +207,13 @@ static int moxa_tiocmget(struct tty_struct *tty, struct file *file); | |||
208 | static int moxa_tiocmset(struct tty_struct *tty, struct file *file, | 207 | static int moxa_tiocmset(struct tty_struct *tty, struct file *file, |
209 | unsigned int set, unsigned int clear); | 208 | unsigned int set, unsigned int clear); |
210 | static void moxa_poll(unsigned long); | 209 | static void moxa_poll(unsigned long); |
211 | static void set_tty_param(struct tty_struct *); | 210 | static void moxa_set_tty_param(struct tty_struct *); |
212 | static int block_till_ready(struct tty_struct *, struct file *, | 211 | static int moxa_block_till_ready(struct tty_struct *, struct file *, |
213 | struct moxa_port *); | 212 | struct moxa_port *); |
214 | static void setup_empty_event(struct tty_struct *); | 213 | static void moxa_setup_empty_event(struct tty_struct *); |
215 | static void check_xmit_empty(unsigned long); | 214 | static void moxa_check_xmit_empty(unsigned long); |
216 | static void shut_down(struct moxa_port *); | 215 | static void moxa_shut_down(struct moxa_port *); |
217 | static void receive_data(struct moxa_port *); | 216 | static void moxa_receive_data(struct moxa_port *); |
218 | /* | 217 | /* |
219 | * moxa board interface functions: | 218 | * moxa board interface functions: |
220 | */ | 219 | */ |
@@ -283,8 +282,10 @@ static int __devinit moxa_pci_probe(struct pci_dev *pdev, | |||
283 | int retval; | 282 | int retval; |
284 | 283 | ||
285 | retval = pci_enable_device(pdev); | 284 | retval = pci_enable_device(pdev); |
286 | if (retval) | 285 | if (retval) { |
286 | dev_err(&pdev->dev, "can't enable pci device\n"); | ||
287 | goto err; | 287 | goto err; |
288 | } | ||
288 | 289 | ||
289 | for (i = 0; i < MAX_BOARDS; i++) | 290 | for (i = 0; i < MAX_BOARDS; i++) |
290 | if (moxa_boards[i].basemem == NULL) | 291 | if (moxa_boards[i].basemem == NULL) |
@@ -292,16 +293,17 @@ static int __devinit moxa_pci_probe(struct pci_dev *pdev, | |||
292 | 293 | ||
293 | retval = -ENODEV; | 294 | retval = -ENODEV; |
294 | if (i >= MAX_BOARDS) { | 295 | if (i >= MAX_BOARDS) { |
295 | if (verbose) | 296 | dev_warn(&pdev->dev, "more than %u MOXA Intellio family boards " |
296 | printk("More than %d MOXA Intellio family boards " | ||
297 | "found. Board is ignored.\n", MAX_BOARDS); | 297 | "found. Board is ignored.\n", MAX_BOARDS); |
298 | goto err; | 298 | goto err; |
299 | } | 299 | } |
300 | 300 | ||
301 | board = &moxa_boards[i]; | 301 | board = &moxa_boards[i]; |
302 | board->basemem = pci_iomap(pdev, 2, 0x4000); | 302 | board->basemem = pci_iomap(pdev, 2, 0x4000); |
303 | if (board->basemem == NULL) | 303 | if (board->basemem == NULL) { |
304 | dev_err(&pdev->dev, "can't remap io space 2\n"); | ||
304 | goto err; | 305 | goto err; |
306 | } | ||
305 | 307 | ||
306 | board->boardType = board_type; | 308 | board->boardType = board_type; |
307 | switch (board_type) { | 309 | switch (board_type) { |
@@ -347,7 +349,8 @@ static int __init moxa_init(void) | |||
347 | int i, numBoards, retval = 0; | 349 | int i, numBoards, retval = 0; |
348 | struct moxa_port *ch; | 350 | struct moxa_port *ch; |
349 | 351 | ||
350 | printk(KERN_INFO "MOXA Intellio family driver version %s\n", MOXA_VERSION); | 352 | printk(KERN_INFO "MOXA Intellio family driver version %s\n", |
353 | MOXA_VERSION); | ||
351 | moxaDriver = alloc_tty_driver(MAX_PORTS + 1); | 354 | moxaDriver = alloc_tty_driver(MAX_PORTS + 1); |
352 | if (!moxaDriver) | 355 | if (!moxaDriver) |
353 | return -ENOMEM; | 356 | return -ENOMEM; |
@@ -372,13 +375,13 @@ static int __init moxa_init(void) | |||
372 | ch->closing_wait = 30 * HZ; | 375 | ch->closing_wait = 30 * HZ; |
373 | ch->cflag = B9600 | CS8 | CREAD | CLOCAL | HUPCL; | 376 | ch->cflag = B9600 | CS8 | CREAD | CLOCAL | HUPCL; |
374 | init_waitqueue_head(&ch->open_wait); | 377 | init_waitqueue_head(&ch->open_wait); |
375 | init_waitqueue_head(&ch->close_wait); | 378 | init_completion(&ch->close_wait); |
376 | 379 | ||
377 | setup_timer(&ch->emptyTimer, check_xmit_empty, | 380 | setup_timer(&ch->emptyTimer, moxa_check_xmit_empty, |
378 | (unsigned long)ch); | 381 | (unsigned long)ch); |
379 | } | 382 | } |
380 | 383 | ||
381 | printk("Tty devices major number = %d\n", ttymajor); | 384 | pr_debug("Moxa tty devices major number = %d\n", ttymajor); |
382 | 385 | ||
383 | if (tty_register_driver(moxaDriver)) { | 386 | if (tty_register_driver(moxaDriver)) { |
384 | printk(KERN_ERR "Couldn't install MOXA Smartio family driver !\n"); | 387 | printk(KERN_ERR "Couldn't install MOXA Smartio family driver !\n"); |
@@ -400,11 +403,10 @@ static int __init moxa_init(void) | |||
400 | moxa_boards[numBoards].numPorts = moxa_isa_boards[i].numPorts; | 403 | moxa_boards[numBoards].numPorts = moxa_isa_boards[i].numPorts; |
401 | moxa_boards[numBoards].busType = MOXA_BUS_TYPE_ISA; | 404 | moxa_boards[numBoards].busType = MOXA_BUS_TYPE_ISA; |
402 | moxa_boards[numBoards].baseAddr = moxa_isa_boards[i].baseAddr; | 405 | moxa_boards[numBoards].baseAddr = moxa_isa_boards[i].baseAddr; |
403 | if (verbose) | 406 | pr_debug("Moxa board %2d: %s board(baseAddr=%lx)\n", |
404 | printk("Board %2d: %s board(baseAddr=%lx)\n", | 407 | numBoards + 1, |
405 | numBoards + 1, | 408 | moxa_brdname[moxa_boards[numBoards].boardType-1], |
406 | moxa_brdname[moxa_boards[numBoards].boardType - 1], | 409 | moxa_boards[numBoards].baseAddr); |
407 | moxa_boards[numBoards].baseAddr); | ||
408 | numBoards++; | 410 | numBoards++; |
409 | } | 411 | } |
410 | } | 412 | } |
@@ -413,14 +415,13 @@ static int __init moxa_init(void) | |||
413 | for (i = 0; i < MAX_BOARDS; i++) { | 415 | for (i = 0; i < MAX_BOARDS; i++) { |
414 | if ((type[i] == MOXA_BOARD_C218_ISA) || | 416 | if ((type[i] == MOXA_BOARD_C218_ISA) || |
415 | (type[i] == MOXA_BOARD_C320_ISA)) { | 417 | (type[i] == MOXA_BOARD_C320_ISA)) { |
416 | if (verbose) | 418 | pr_debug("Moxa board %2d: %s board(baseAddr=%lx)\n", |
417 | printk("Board %2d: %s board(baseAddr=%lx)\n", | 419 | numBoards + 1, moxa_brdname[type[i] - 1], |
418 | numBoards + 1, | 420 | (unsigned long)baseaddr[i]); |
419 | moxa_brdname[type[i] - 1], | ||
420 | (unsigned long) baseaddr[i]); | ||
421 | if (numBoards >= MAX_BOARDS) { | 421 | if (numBoards >= MAX_BOARDS) { |
422 | if (verbose) | 422 | printk(KERN_WARNING "More than %d MOXA " |
423 | printk("More than %d MOXA Intellio family boards found. Board is ignored.", MAX_BOARDS); | 423 | "Intellio family boards found. Board " |
424 | "is ignored.\n", MAX_BOARDS); | ||
424 | continue; | 425 | continue; |
425 | } | 426 | } |
426 | moxa_boards[numBoards].boardType = type[i]; | 427 | moxa_boards[numBoards].boardType = type[i]; |
@@ -456,16 +457,14 @@ static void __exit moxa_exit(void) | |||
456 | { | 457 | { |
457 | int i; | 458 | int i; |
458 | 459 | ||
459 | if (verbose) | ||
460 | printk("Unloading module moxa ...\n"); | ||
461 | |||
462 | del_timer_sync(&moxaTimer); | 460 | del_timer_sync(&moxaTimer); |
463 | 461 | ||
464 | for (i = 0; i < MAX_PORTS; i++) | 462 | for (i = 0; i < MAX_PORTS; i++) |
465 | del_timer_sync(&moxa_ports[i].emptyTimer); | 463 | del_timer_sync(&moxa_ports[i].emptyTimer); |
466 | 464 | ||
467 | if (tty_unregister_driver(moxaDriver)) | 465 | if (tty_unregister_driver(moxaDriver)) |
468 | printk("Couldn't unregister MOXA Intellio family serial driver\n"); | 466 | printk(KERN_ERR "Couldn't unregister MOXA Intellio family " |
467 | "serial driver\n"); | ||
469 | put_tty_driver(moxaDriver); | 468 | put_tty_driver(moxaDriver); |
470 | 469 | ||
471 | #ifdef CONFIG_PCI | 470 | #ifdef CONFIG_PCI |
@@ -475,9 +474,6 @@ static void __exit moxa_exit(void) | |||
475 | for (i = 0; i < MAX_BOARDS; i++) | 474 | for (i = 0; i < MAX_BOARDS; i++) |
476 | if (moxa_boards[i].basemem) | 475 | if (moxa_boards[i].basemem) |
477 | iounmap(moxa_boards[i].basemem); | 476 | iounmap(moxa_boards[i].basemem); |
478 | |||
479 | if (verbose) | ||
480 | printk("Done\n"); | ||
481 | } | 477 | } |
482 | 478 | ||
483 | module_init(moxa_init); | 479 | module_init(moxa_init); |
@@ -504,12 +500,12 @@ static int moxa_open(struct tty_struct *tty, struct file *filp) | |||
504 | ch->tty = tty; | 500 | ch->tty = tty; |
505 | if (!(ch->asyncflags & ASYNC_INITIALIZED)) { | 501 | if (!(ch->asyncflags & ASYNC_INITIALIZED)) { |
506 | ch->statusflags = 0; | 502 | ch->statusflags = 0; |
507 | set_tty_param(tty); | 503 | moxa_set_tty_param(tty); |
508 | MoxaPortLineCtrl(ch->port, 1, 1); | 504 | MoxaPortLineCtrl(ch->port, 1, 1); |
509 | MoxaPortEnable(ch->port); | 505 | MoxaPortEnable(ch->port); |
510 | ch->asyncflags |= ASYNC_INITIALIZED; | 506 | ch->asyncflags |= ASYNC_INITIALIZED; |
511 | } | 507 | } |
512 | retval = block_till_ready(tty, filp, ch); | 508 | retval = moxa_block_till_ready(tty, filp, ch); |
513 | 509 | ||
514 | moxa_unthrottle(tty); | 510 | moxa_unthrottle(tty); |
515 | 511 | ||
@@ -532,9 +528,7 @@ static void moxa_close(struct tty_struct *tty, struct file *filp) | |||
532 | return; | 528 | return; |
533 | } | 529 | } |
534 | if (!MoxaPortIsValid(port)) { | 530 | if (!MoxaPortIsValid(port)) { |
535 | #ifdef SERIAL_DEBUG_CLOSE | 531 | pr_debug("Invalid portno in moxa_close\n"); |
536 | printk("Invalid portno in moxa_close\n"); | ||
537 | #endif | ||
538 | tty->driver_data = NULL; | 532 | tty->driver_data = NULL; |
539 | return; | 533 | return; |
540 | } | 534 | } |
@@ -547,13 +541,13 @@ static void moxa_close(struct tty_struct *tty, struct file *filp) | |||
547 | ch = (struct moxa_port *) tty->driver_data; | 541 | ch = (struct moxa_port *) tty->driver_data; |
548 | 542 | ||
549 | if ((tty->count == 1) && (ch->count != 1)) { | 543 | if ((tty->count == 1) && (ch->count != 1)) { |
550 | printk("moxa_close: bad serial port count; tty->count is 1, " | 544 | printk(KERN_WARNING "moxa_close: bad serial port count; " |
551 | "ch->count is %d\n", ch->count); | 545 | "tty->count is 1, ch->count is %d\n", ch->count); |
552 | ch->count = 1; | 546 | ch->count = 1; |
553 | } | 547 | } |
554 | if (--ch->count < 0) { | 548 | if (--ch->count < 0) { |
555 | printk("moxa_close: bad serial port count, device=%s\n", | 549 | printk(KERN_WARNING "moxa_close: bad serial port count, " |
556 | tty->name); | 550 | "device=%s\n", tty->name); |
557 | ch->count = 0; | 551 | ch->count = 0; |
558 | } | 552 | } |
559 | if (ch->count) { | 553 | if (ch->count) { |
@@ -563,11 +557,11 @@ static void moxa_close(struct tty_struct *tty, struct file *filp) | |||
563 | 557 | ||
564 | ch->cflag = tty->termios->c_cflag; | 558 | ch->cflag = tty->termios->c_cflag; |
565 | if (ch->asyncflags & ASYNC_INITIALIZED) { | 559 | if (ch->asyncflags & ASYNC_INITIALIZED) { |
566 | setup_empty_event(tty); | 560 | moxa_setup_empty_event(tty); |
567 | tty_wait_until_sent(tty, 30 * HZ); /* 30 seconds timeout */ | 561 | tty_wait_until_sent(tty, 30 * HZ); /* 30 seconds timeout */ |
568 | del_timer_sync(&moxa_ports[ch->port].emptyTimer); | 562 | del_timer_sync(&moxa_ports[ch->port].emptyTimer); |
569 | } | 563 | } |
570 | shut_down(ch); | 564 | moxa_shut_down(ch); |
571 | MoxaPortFlushData(port, 2); | 565 | MoxaPortFlushData(port, 2); |
572 | 566 | ||
573 | if (tty->driver->flush_buffer) | 567 | if (tty->driver->flush_buffer) |
@@ -584,7 +578,7 @@ static void moxa_close(struct tty_struct *tty, struct file *filp) | |||
584 | wake_up_interruptible(&ch->open_wait); | 578 | wake_up_interruptible(&ch->open_wait); |
585 | } | 579 | } |
586 | ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CLOSING); | 580 | ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CLOSING); |
587 | wake_up_interruptible(&ch->close_wait); | 581 | complete_all(&ch->close_wait); |
588 | } | 582 | } |
589 | 583 | ||
590 | static int moxa_write(struct tty_struct *tty, | 584 | static int moxa_write(struct tty_struct *tty, |
@@ -653,7 +647,7 @@ static int moxa_chars_in_buffer(struct tty_struct *tty) | |||
653 | * in tty_ioctl.c, etc. | 647 | * in tty_ioctl.c, etc. |
654 | */ | 648 | */ |
655 | if (!(ch->statusflags & EMPTYWAIT)) | 649 | if (!(ch->statusflags & EMPTYWAIT)) |
656 | setup_empty_event(tty); | 650 | moxa_setup_empty_event(tty); |
657 | } | 651 | } |
658 | return (chars); | 652 | return (chars); |
659 | } | 653 | } |
@@ -751,7 +745,7 @@ static int moxa_ioctl(struct tty_struct *tty, struct file *file, | |||
751 | retval = tty_check_change(tty); | 745 | retval = tty_check_change(tty); |
752 | if (retval) | 746 | if (retval) |
753 | return (retval); | 747 | return (retval); |
754 | setup_empty_event(tty); | 748 | moxa_setup_empty_event(tty); |
755 | tty_wait_until_sent(tty, 0); | 749 | tty_wait_until_sent(tty, 0); |
756 | if (!arg) | 750 | if (!arg) |
757 | MoxaPortSendBreak(ch->port, 0); | 751 | MoxaPortSendBreak(ch->port, 0); |
@@ -760,7 +754,7 @@ static int moxa_ioctl(struct tty_struct *tty, struct file *file, | |||
760 | retval = tty_check_change(tty); | 754 | retval = tty_check_change(tty); |
761 | if (retval) | 755 | if (retval) |
762 | return (retval); | 756 | return (retval); |
763 | setup_empty_event(tty); | 757 | moxa_setup_empty_event(tty); |
764 | tty_wait_until_sent(tty, 0); | 758 | tty_wait_until_sent(tty, 0); |
765 | MoxaPortSendBreak(ch->port, arg); | 759 | MoxaPortSendBreak(ch->port, arg); |
766 | return (0); | 760 | return (0); |
@@ -809,7 +803,7 @@ static void moxa_set_termios(struct tty_struct *tty, | |||
809 | 803 | ||
810 | if (ch == NULL) | 804 | if (ch == NULL) |
811 | return; | 805 | return; |
812 | set_tty_param(tty); | 806 | moxa_set_tty_param(tty); |
813 | if (!(old_termios->c_cflag & CLOCAL) && | 807 | if (!(old_termios->c_cflag & CLOCAL) && |
814 | (tty->termios->c_cflag & CLOCAL)) | 808 | (tty->termios->c_cflag & CLOCAL)) |
815 | wake_up_interruptible(&ch->open_wait); | 809 | wake_up_interruptible(&ch->open_wait); |
@@ -845,7 +839,7 @@ static void moxa_hangup(struct tty_struct *tty) | |||
845 | struct moxa_port *ch = (struct moxa_port *) tty->driver_data; | 839 | struct moxa_port *ch = (struct moxa_port *) tty->driver_data; |
846 | 840 | ||
847 | moxa_flush_buffer(tty); | 841 | moxa_flush_buffer(tty); |
848 | shut_down(ch); | 842 | moxa_shut_down(ch); |
849 | ch->event = 0; | 843 | ch->event = 0; |
850 | ch->count = 0; | 844 | ch->count = 0; |
851 | ch->asyncflags &= ~ASYNC_NORMAL_ACTIVE; | 845 | ch->asyncflags &= ~ASYNC_NORMAL_ACTIVE; |
@@ -875,7 +869,7 @@ static void moxa_poll(unsigned long ignored) | |||
875 | continue; | 869 | continue; |
876 | if (!(ch->statusflags & THROTTLE) && | 870 | if (!(ch->statusflags & THROTTLE) && |
877 | (MoxaPortRxQueue(ch->port) > 0)) | 871 | (MoxaPortRxQueue(ch->port) > 0)) |
878 | receive_data(ch); | 872 | moxa_receive_data(ch); |
879 | if ((tp = ch->tty) == 0) | 873 | if ((tp = ch->tty) == 0) |
880 | continue; | 874 | continue; |
881 | if (ch->statusflags & LOWWAIT) { | 875 | if (ch->statusflags & LOWWAIT) { |
@@ -909,7 +903,7 @@ static void moxa_poll(unsigned long ignored) | |||
909 | 903 | ||
910 | /******************************************************************************/ | 904 | /******************************************************************************/ |
911 | 905 | ||
912 | static void set_tty_param(struct tty_struct *tty) | 906 | static void moxa_set_tty_param(struct tty_struct *tty) |
913 | { | 907 | { |
914 | register struct ktermios *ts; | 908 | register struct ktermios *ts; |
915 | struct moxa_port *ch; | 909 | struct moxa_port *ch; |
@@ -934,7 +928,7 @@ static void set_tty_param(struct tty_struct *tty) | |||
934 | MoxaPortSetTermio(ch->port, ts, tty_get_baud_rate(tty)); | 928 | MoxaPortSetTermio(ch->port, ts, tty_get_baud_rate(tty)); |
935 | } | 929 | } |
936 | 930 | ||
937 | static int block_till_ready(struct tty_struct *tty, struct file *filp, | 931 | static int moxa_block_till_ready(struct tty_struct *tty, struct file *filp, |
938 | struct moxa_port *ch) | 932 | struct moxa_port *ch) |
939 | { | 933 | { |
940 | DECLARE_WAITQUEUE(wait,current); | 934 | DECLARE_WAITQUEUE(wait,current); |
@@ -948,7 +942,7 @@ static int block_till_ready(struct tty_struct *tty, struct file *filp, | |||
948 | */ | 942 | */ |
949 | if (tty_hung_up_p(filp) || (ch->asyncflags & ASYNC_CLOSING)) { | 943 | if (tty_hung_up_p(filp) || (ch->asyncflags & ASYNC_CLOSING)) { |
950 | if (ch->asyncflags & ASYNC_CLOSING) | 944 | if (ch->asyncflags & ASYNC_CLOSING) |
951 | interruptible_sleep_on(&ch->close_wait); | 945 | wait_for_completion_interruptible(&ch->close_wait); |
952 | #ifdef SERIAL_DO_RESTART | 946 | #ifdef SERIAL_DO_RESTART |
953 | if (ch->asyncflags & ASYNC_HUP_NOTIFY) | 947 | if (ch->asyncflags & ASYNC_HUP_NOTIFY) |
954 | return (-EAGAIN); | 948 | return (-EAGAIN); |
@@ -971,10 +965,8 @@ static int block_till_ready(struct tty_struct *tty, struct file *filp, | |||
971 | */ | 965 | */ |
972 | retval = 0; | 966 | retval = 0; |
973 | add_wait_queue(&ch->open_wait, &wait); | 967 | add_wait_queue(&ch->open_wait, &wait); |
974 | #ifdef SERIAL_DEBUG_OPEN | 968 | pr_debug("block_til_ready before block: ttys%d, count = %d\n", |
975 | printk("block_til_ready before block: ttys%d, count = %d\n", | 969 | ch->port, ch->count); |
976 | ch->line, ch->count); | ||
977 | #endif | ||
978 | spin_lock_irqsave(&moxa_lock, flags); | 970 | spin_lock_irqsave(&moxa_lock, flags); |
979 | if (!tty_hung_up_p(filp)) | 971 | if (!tty_hung_up_p(filp)) |
980 | ch->count--; | 972 | ch->count--; |
@@ -1013,10 +1005,8 @@ static int block_till_ready(struct tty_struct *tty, struct file *filp, | |||
1013 | ch->count++; | 1005 | ch->count++; |
1014 | ch->blocked_open--; | 1006 | ch->blocked_open--; |
1015 | spin_unlock_irqrestore(&moxa_lock, flags); | 1007 | spin_unlock_irqrestore(&moxa_lock, flags); |
1016 | #ifdef SERIAL_DEBUG_OPEN | 1008 | pr_debug("block_til_ready after blocking: ttys%d, count = %d\n", |
1017 | printk("block_til_ready after blocking: ttys%d, count = %d\n", | 1009 | ch->port, ch->count); |
1018 | ch->line, ch->count); | ||
1019 | #endif | ||
1020 | if (retval) | 1010 | if (retval) |
1021 | return (retval); | 1011 | return (retval); |
1022 | /* FIXME: review to see if we need to use set_bit on these */ | 1012 | /* FIXME: review to see if we need to use set_bit on these */ |
@@ -1024,7 +1014,7 @@ static int block_till_ready(struct tty_struct *tty, struct file *filp, | |||
1024 | return 0; | 1014 | return 0; |
1025 | } | 1015 | } |
1026 | 1016 | ||
1027 | static void setup_empty_event(struct tty_struct *tty) | 1017 | static void moxa_setup_empty_event(struct tty_struct *tty) |
1028 | { | 1018 | { |
1029 | struct moxa_port *ch = tty->driver_data; | 1019 | struct moxa_port *ch = tty->driver_data; |
1030 | unsigned long flags; | 1020 | unsigned long flags; |
@@ -1035,24 +1025,24 @@ static void setup_empty_event(struct tty_struct *tty) | |||
1035 | spin_unlock_irqrestore(&moxa_lock, flags); | 1025 | spin_unlock_irqrestore(&moxa_lock, flags); |
1036 | } | 1026 | } |
1037 | 1027 | ||
1038 | static void check_xmit_empty(unsigned long data) | 1028 | static void moxa_check_xmit_empty(unsigned long data) |
1039 | { | 1029 | { |
1040 | struct moxa_port *ch; | 1030 | struct moxa_port *ch; |
1041 | 1031 | ||
1042 | ch = (struct moxa_port *) data; | 1032 | ch = (struct moxa_port *) data; |
1043 | del_timer_sync(&moxa_ports[ch->port].emptyTimer); | ||
1044 | if (ch->tty && (ch->statusflags & EMPTYWAIT)) { | 1033 | if (ch->tty && (ch->statusflags & EMPTYWAIT)) { |
1045 | if (MoxaPortTxQueue(ch->port) == 0) { | 1034 | if (MoxaPortTxQueue(ch->port) == 0) { |
1046 | ch->statusflags &= ~EMPTYWAIT; | 1035 | ch->statusflags &= ~EMPTYWAIT; |
1047 | tty_wakeup(ch->tty); | 1036 | tty_wakeup(ch->tty); |
1048 | return; | 1037 | return; |
1049 | } | 1038 | } |
1050 | mod_timer(&moxa_ports[ch->port].emptyTimer, jiffies + HZ); | 1039 | mod_timer(&moxa_ports[ch->port].emptyTimer, |
1040 | round_jiffies(jiffies + HZ)); | ||
1051 | } else | 1041 | } else |
1052 | ch->statusflags &= ~EMPTYWAIT; | 1042 | ch->statusflags &= ~EMPTYWAIT; |
1053 | } | 1043 | } |
1054 | 1044 | ||
1055 | static void shut_down(struct moxa_port *ch) | 1045 | static void moxa_shut_down(struct moxa_port *ch) |
1056 | { | 1046 | { |
1057 | struct tty_struct *tp; | 1047 | struct tty_struct *tp; |
1058 | 1048 | ||
@@ -1072,7 +1062,7 @@ static void shut_down(struct moxa_port *ch) | |||
1072 | ch->asyncflags &= ~ASYNC_INITIALIZED; | 1062 | ch->asyncflags &= ~ASYNC_INITIALIZED; |
1073 | } | 1063 | } |
1074 | 1064 | ||
1075 | static void receive_data(struct moxa_port *ch) | 1065 | static void moxa_receive_data(struct moxa_port *ch) |
1076 | { | 1066 | { |
1077 | struct tty_struct *tp; | 1067 | struct tty_struct *tp; |
1078 | struct ktermios *ts; | 1068 | struct ktermios *ts; |
@@ -1406,8 +1396,8 @@ static struct mon_str moxaLog; | |||
1406 | static int moxaFuncTout = HZ / 2; | 1396 | static int moxaFuncTout = HZ / 2; |
1407 | 1397 | ||
1408 | static void moxafunc(void __iomem *, int, ushort); | 1398 | static void moxafunc(void __iomem *, int, ushort); |
1409 | static void wait_finish(void __iomem *); | 1399 | static void moxa_wait_finish(void __iomem *); |
1410 | static void low_water_check(void __iomem *); | 1400 | static void moxa_low_water_check(void __iomem *); |
1411 | static int moxaloadbios(int, unsigned char __user *, int); | 1401 | static int moxaloadbios(int, unsigned char __user *, int); |
1412 | static int moxafindcard(int); | 1402 | static int moxafindcard(int); |
1413 | static int moxaload320b(int, unsigned char __user *, int); | 1403 | static int moxaload320b(int, unsigned char __user *, int); |
@@ -1473,7 +1463,7 @@ void MoxaPortFlushData(int port, int mode) | |||
1473 | moxafunc(ofsAddr, FC_FlushQueue, mode); | 1463 | moxafunc(ofsAddr, FC_FlushQueue, mode); |
1474 | if (mode != 1) { | 1464 | if (mode != 1) { |
1475 | moxa_ports[port].lowChkFlag = 0; | 1465 | moxa_ports[port].lowChkFlag = 0; |
1476 | low_water_check(ofsAddr); | 1466 | moxa_low_water_check(ofsAddr); |
1477 | } | 1467 | } |
1478 | } | 1468 | } |
1479 | 1469 | ||
@@ -1654,7 +1644,7 @@ int MoxaDriverPoll(void) | |||
1654 | if (moxa_ports[p].lowChkFlag) { | 1644 | if (moxa_ports[p].lowChkFlag) { |
1655 | moxa_ports[p].lowChkFlag = 0; | 1645 | moxa_ports[p].lowChkFlag = 0; |
1656 | ofsAddr = moxa_ports[p].tableAddr; | 1646 | ofsAddr = moxa_ports[p].tableAddr; |
1657 | low_water_check(ofsAddr); | 1647 | moxa_low_water_check(ofsAddr); |
1658 | } | 1648 | } |
1659 | } | 1649 | } |
1660 | } | 1650 | } |
@@ -2081,7 +2071,7 @@ int MoxaPortSetTermio(int port, struct ktermios *termio, speed_t baud) | |||
2081 | writeb(termio->c_cc[VSTART], ofsAddr + FuncArg); | 2071 | writeb(termio->c_cc[VSTART], ofsAddr + FuncArg); |
2082 | writeb(termio->c_cc[VSTOP], ofsAddr + FuncArg1); | 2072 | writeb(termio->c_cc[VSTOP], ofsAddr + FuncArg1); |
2083 | writeb(FC_SetXonXoff, ofsAddr + FuncCode); | 2073 | writeb(FC_SetXonXoff, ofsAddr + FuncCode); |
2084 | wait_finish(ofsAddr); | 2074 | moxa_wait_finish(ofsAddr); |
2085 | 2075 | ||
2086 | } | 2076 | } |
2087 | return (0); | 2077 | return (0); |
@@ -2480,10 +2470,10 @@ static void moxafunc(void __iomem *ofsAddr, int cmd, ushort arg) | |||
2480 | 2470 | ||
2481 | writew(arg, ofsAddr + FuncArg); | 2471 | writew(arg, ofsAddr + FuncArg); |
2482 | writew(cmd, ofsAddr + FuncCode); | 2472 | writew(cmd, ofsAddr + FuncCode); |
2483 | wait_finish(ofsAddr); | 2473 | moxa_wait_finish(ofsAddr); |
2484 | } | 2474 | } |
2485 | 2475 | ||
2486 | static void wait_finish(void __iomem *ofsAddr) | 2476 | static void moxa_wait_finish(void __iomem *ofsAddr) |
2487 | { | 2477 | { |
2488 | unsigned long i, j; | 2478 | unsigned long i, j; |
2489 | 2479 | ||
@@ -2496,7 +2486,7 @@ static void wait_finish(void __iomem *ofsAddr) | |||
2496 | } | 2486 | } |
2497 | } | 2487 | } |
2498 | 2488 | ||
2499 | static void low_water_check(void __iomem *ofsAddr) | 2489 | static void moxa_low_water_check(void __iomem *ofsAddr) |
2500 | { | 2490 | { |
2501 | int len; | 2491 | int len; |
2502 | ushort rptr, wptr, mask; | 2492 | ushort rptr, wptr, mask; |
diff --git a/drivers/char/mxser.c b/drivers/char/mxser.c index 2aee3fef041..fd0abef7ee0 100644 --- a/drivers/char/mxser.c +++ b/drivers/char/mxser.c | |||
@@ -56,11 +56,11 @@ | |||
56 | #include <linux/mm.h> | 56 | #include <linux/mm.h> |
57 | #include <linux/delay.h> | 57 | #include <linux/delay.h> |
58 | #include <linux/pci.h> | 58 | #include <linux/pci.h> |
59 | #include <linux/bitops.h> | ||
59 | 60 | ||
60 | #include <asm/system.h> | 61 | #include <asm/system.h> |
61 | #include <asm/io.h> | 62 | #include <asm/io.h> |
62 | #include <asm/irq.h> | 63 | #include <asm/irq.h> |
63 | #include <asm/bitops.h> | ||
64 | #include <asm/uaccess.h> | 64 | #include <asm/uaccess.h> |
65 | 65 | ||
66 | #include "mxser.h" | 66 | #include "mxser.h" |
@@ -383,7 +383,6 @@ static int mxser_init(void); | |||
383 | 383 | ||
384 | /* static void mxser_poll(unsigned long); */ | 384 | /* static void mxser_poll(unsigned long); */ |
385 | static int mxser_get_ISA_conf(int, struct mxser_hwconf *); | 385 | static int mxser_get_ISA_conf(int, struct mxser_hwconf *); |
386 | static int mxser_get_PCI_conf(int, int, int, struct mxser_hwconf *); | ||
387 | static void mxser_do_softint(struct work_struct *); | 386 | static void mxser_do_softint(struct work_struct *); |
388 | static int mxser_open(struct tty_struct *, struct file *); | 387 | static int mxser_open(struct tty_struct *, struct file *); |
389 | static void mxser_close(struct tty_struct *, struct file *); | 388 | static void mxser_close(struct tty_struct *, struct file *); |
@@ -422,7 +421,7 @@ static void mxser_wait_until_sent(struct tty_struct *tty, int timeout); | |||
422 | static void mxser_startrx(struct tty_struct *tty); | 421 | static void mxser_startrx(struct tty_struct *tty); |
423 | static void mxser_stoprx(struct tty_struct *tty); | 422 | static void mxser_stoprx(struct tty_struct *tty); |
424 | 423 | ||
425 | 424 | #ifdef CONFIG_PCI | |
426 | static int CheckIsMoxaMust(int io) | 425 | static int CheckIsMoxaMust(int io) |
427 | { | 426 | { |
428 | u8 oldmcr, hwid; | 427 | u8 oldmcr, hwid; |
@@ -445,6 +444,7 @@ static int CheckIsMoxaMust(int io) | |||
445 | } | 444 | } |
446 | return MOXA_OTHER_UART; | 445 | return MOXA_OTHER_UART; |
447 | } | 446 | } |
447 | #endif | ||
448 | 448 | ||
449 | /* above is modified by Victor Yu. 08-15-2002 */ | 449 | /* above is modified by Victor Yu. 08-15-2002 */ |
450 | 450 | ||
@@ -1938,14 +1938,6 @@ static irqreturn_t mxser_interrupt(int irq, void *dev_id) | |||
1938 | inb(info->base + UART_MSR); | 1938 | inb(info->base + UART_MSR); |
1939 | continue; | 1939 | continue; |
1940 | } | 1940 | } |
1941 | /* above add by Victor Yu. 09-13-2002 */ | ||
1942 | /* | ||
1943 | if (info->tty->flip.count < TTY_FLIPBUF_SIZE / 4) { | ||
1944 | info->IER |= MOXA_MUST_RECV_ISR; | ||
1945 | outb(info->IER, info->base + UART_IER); | ||
1946 | } | ||
1947 | */ | ||
1948 | |||
1949 | 1941 | ||
1950 | /* mask by Victor Yu. 09-13-2002 | 1942 | /* mask by Victor Yu. 09-13-2002 |
1951 | if ( !info->tty || | 1943 | if ( !info->tty || |
@@ -2599,19 +2591,8 @@ static int mxser_change_speed(struct mxser_struct *info, struct ktermios *old_te | |||
2599 | info->IER |= UART_IER_MSI; | 2591 | info->IER |= UART_IER_MSI; |
2600 | if ((info->type == PORT_16550A) || (info->IsMoxaMustChipFlag)) { | 2592 | if ((info->type == PORT_16550A) || (info->IsMoxaMustChipFlag)) { |
2601 | info->MCR |= UART_MCR_AFE; | 2593 | info->MCR |= UART_MCR_AFE; |
2602 | /* status = mxser_get_msr(info->base, 0, info->port); */ | ||
2603 | /* | ||
2604 | save_flags(flags); | ||
2605 | cli(); | ||
2606 | status = inb(baseaddr + UART_MSR); | ||
2607 | restore_flags(flags); | ||
2608 | */ | ||
2609 | /* mxser_check_modem_status(info, status); */ | ||
2610 | } else { | 2594 | } else { |
2611 | /* status = mxser_get_msr(info->base, 0, info->port); */ | ||
2612 | /* MX_LOCK(&info->slock); */ | ||
2613 | status = inb(info->base + UART_MSR); | 2595 | status = inb(info->base + UART_MSR); |
2614 | /* MX_UNLOCK(&info->slock); */ | ||
2615 | if (info->tty->hw_stopped) { | 2596 | if (info->tty->hw_stopped) { |
2616 | if (status & UART_MSR_CTS) { | 2597 | if (status & UART_MSR_CTS) { |
2617 | info->tty->hw_stopped = 0; | 2598 | info->tty->hw_stopped = 0; |
diff --git a/drivers/char/mxser_new.c b/drivers/char/mxser_new.c index 6a563932ba1..081c84c7b54 100644 --- a/drivers/char/mxser_new.c +++ b/drivers/char/mxser_new.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * mxser.c -- MOXA Smartio/Industio family multiport serial driver. | 2 | * mxser.c -- MOXA Smartio/Industio family multiport serial driver. |
3 | * | 3 | * |
4 | * Copyright (C) 1999-2006 Moxa Technologies (support@moxa.com.tw). | 4 | * Copyright (C) 1999-2006 Moxa Technologies (support@moxa.com.tw). |
5 | * Copyright (C) 2006 Jiri Slaby <jirislaby@gmail.com> | 5 | * Copyright (C) 2006-2007 Jiri Slaby <jirislaby@gmail.com> |
6 | * | 6 | * |
7 | * This code is loosely based on the 1.8 moxa driver which is based on | 7 | * This code is loosely based on the 1.8 moxa driver which is based on |
8 | * Linux serial driver, written by Linus Torvalds, Theodore T'so and | 8 | * Linux serial driver, written by Linus Torvalds, Theodore T'so and |
@@ -39,16 +39,16 @@ | |||
39 | #include <linux/mm.h> | 39 | #include <linux/mm.h> |
40 | #include <linux/delay.h> | 40 | #include <linux/delay.h> |
41 | #include <linux/pci.h> | 41 | #include <linux/pci.h> |
42 | #include <linux/bitops.h> | ||
42 | 43 | ||
43 | #include <asm/system.h> | 44 | #include <asm/system.h> |
44 | #include <asm/io.h> | 45 | #include <asm/io.h> |
45 | #include <asm/irq.h> | 46 | #include <asm/irq.h> |
46 | #include <asm/bitops.h> | ||
47 | #include <asm/uaccess.h> | 47 | #include <asm/uaccess.h> |
48 | 48 | ||
49 | #include "mxser_new.h" | 49 | #include "mxser_new.h" |
50 | 50 | ||
51 | #define MXSER_VERSION "2.0.1" /* 1.9.15 */ | 51 | #define MXSER_VERSION "2.0.2" /* 1.10 */ |
52 | #define MXSERMAJOR 174 | 52 | #define MXSERMAJOR 174 |
53 | #define MXSERCUMAJOR 175 | 53 | #define MXSERCUMAJOR 175 |
54 | 54 | ||
@@ -72,6 +72,12 @@ | |||
72 | #define UART_MCR_AFE 0x20 | 72 | #define UART_MCR_AFE 0x20 |
73 | #define UART_LSR_SPECIAL 0x1E | 73 | #define UART_LSR_SPECIAL 0x1E |
74 | 74 | ||
75 | #define PCI_DEVICE_ID_CB108 0x1080 | ||
76 | #define PCI_DEVICE_ID_CB114 0x1142 | ||
77 | #define PCI_DEVICE_ID_CB134I 0x1341 | ||
78 | #define PCI_DEVICE_ID_CP138U 0x1380 | ||
79 | #define PCI_DEVICE_ID_POS104UL 0x1044 | ||
80 | |||
75 | 81 | ||
76 | #define C168_ASIC_ID 1 | 82 | #define C168_ASIC_ID 1 |
77 | #define C104_ASIC_ID 2 | 83 | #define C104_ASIC_ID 2 |
@@ -107,71 +113,63 @@ struct mxser_cardinfo { | |||
107 | }; | 113 | }; |
108 | 114 | ||
109 | static const struct mxser_cardinfo mxser_cards[] = { | 115 | static const struct mxser_cardinfo mxser_cards[] = { |
110 | { 8, "C168 series", }, /* C168-ISA */ | 116 | /* 0*/ { 8, "C168 series", }, |
111 | { 4, "C104 series", }, /* C104-ISA */ | 117 | { 4, "C104 series", }, |
112 | { 4, "CI-104J series", }, /* CI104J */ | 118 | { 4, "CI-104J series", }, |
113 | { 8, "C168H/PCI series", }, /* C168-PCI */ | 119 | { 8, "C168H/PCI series", }, |
114 | { 4, "C104H/PCI series", }, /* C104-PCI */ | 120 | { 4, "C104H/PCI series", }, |
115 | { 4, "C102 series", MXSER_HAS2 }, /* C102-ISA */ | 121 | /* 5*/ { 4, "C102 series", MXSER_HAS2 }, /* C102-ISA */ |
116 | { 4, "CI-132 series", MXSER_HAS2 }, /* CI132 */ | 122 | { 4, "CI-132 series", MXSER_HAS2 }, |
117 | { 4, "CI-134 series", }, /* CI134 */ | 123 | { 4, "CI-134 series", }, |
118 | { 2, "CP-132 series", }, /* CP132 */ | 124 | { 2, "CP-132 series", }, |
119 | { 4, "CP-114 series", }, /* CP114 */ | 125 | { 4, "CP-114 series", }, |
120 | { 4, "CT-114 series", }, /* CT114 */ | 126 | /*10*/ { 4, "CT-114 series", }, |
121 | { 2, "CP-102 series", MXSER_HIGHBAUD }, /* CP102 */ | 127 | { 2, "CP-102 series", MXSER_HIGHBAUD }, |
122 | { 4, "CP-104U series", }, /* CP104U */ | 128 | { 4, "CP-104U series", }, |
123 | { 8, "CP-168U series", }, /* CP168U */ | 129 | { 8, "CP-168U series", }, |
124 | { 2, "CP-132U series", }, /* CP132U */ | 130 | { 2, "CP-132U series", }, |
125 | { 4, "CP-134U series", }, /* CP134U */ | 131 | /*15*/ { 4, "CP-134U series", }, |
126 | { 4, "CP-104JU series", }, /* CP104JU */ | 132 | { 4, "CP-104JU series", }, |
127 | { 8, "Moxa UC7000 Serial", }, /* RC7000 */ | 133 | { 8, "Moxa UC7000 Serial", }, /* RC7000 */ |
128 | { 8, "CP-118U series", }, /* CP118U */ | 134 | { 8, "CP-118U series", }, |
129 | { 2, "CP-102UL series", }, /* CP102UL */ | 135 | { 2, "CP-102UL series", }, |
130 | { 2, "CP-102U series", }, /* CP102U */ | 136 | /*20*/ { 2, "CP-102U series", }, |
131 | { 8, "CP-118EL series", }, /* CP118EL */ | 137 | { 8, "CP-118EL series", }, |
132 | { 8, "CP-168EL series", }, /* CP168EL */ | 138 | { 8, "CP-168EL series", }, |
133 | { 4, "CP-104EL series", } /* CP104EL */ | 139 | { 4, "CP-104EL series", }, |
140 | { 8, "CB-108 series", }, | ||
141 | /*25*/ { 4, "CB-114 series", }, | ||
142 | { 4, "CB-134I series", }, | ||
143 | { 8, "CP-138U series", }, | ||
144 | { 4, "POS-104UL series", } | ||
134 | }; | 145 | }; |
135 | 146 | ||
136 | /* driver_data correspond to the lines in the structure above | 147 | /* driver_data correspond to the lines in the structure above |
137 | see also ISA probe function before you change something */ | 148 | see also ISA probe function before you change something */ |
138 | static struct pci_device_id mxser_pcibrds[] = { | 149 | static struct pci_device_id mxser_pcibrds[] = { |
139 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_C168), | 150 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_C168), .driver_data = 3 }, |
140 | .driver_data = 3 }, | 151 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_C104), .driver_data = 4 }, |
141 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_C104), | 152 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132), .driver_data = 8 }, |
142 | .driver_data = 4 }, | 153 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114), .driver_data = 9 }, |
143 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP132), | 154 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CT114), .driver_data = 10 }, |
144 | .driver_data = 8 }, | 155 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102), .driver_data = 11 }, |
145 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP114), | 156 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104U), .driver_data = 12 }, |
146 | .driver_data = 9 }, | 157 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168U), .driver_data = 13 }, |
147 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CT114), | 158 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132U), .driver_data = 14 }, |
148 | .driver_data = 10 }, | 159 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134U), .driver_data = 15 }, |
149 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP102), | 160 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104JU),.driver_data = 16 }, |
150 | .driver_data = 11 }, | 161 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_RC7000), .driver_data = 17 }, |
151 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP104U), | 162 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118U), .driver_data = 18 }, |
152 | .driver_data = 12 }, | 163 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102UL),.driver_data = 19 }, |
153 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP168U), | 164 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102U), .driver_data = 20 }, |
154 | .driver_data = 13 }, | 165 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118EL),.driver_data = 21 }, |
155 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP132U), | 166 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168EL),.driver_data = 22 }, |
156 | .driver_data = 14 }, | 167 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104EL),.driver_data = 23 }, |
157 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP134U), | 168 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CB108), .driver_data = 24 }, |
158 | .driver_data = 15 }, | 169 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CB114), .driver_data = 25 }, |
159 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP104JU), | 170 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CB134I), .driver_data = 26 }, |
160 | .driver_data = 16 }, | 171 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CP138U), .driver_data = 27 }, |
161 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_RC7000), | 172 | { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_POS104UL), .driver_data = 28 }, |
162 | .driver_data = 17 }, | ||
163 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP118U), | ||
164 | .driver_data = 18 }, | ||
165 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP102UL), | ||
166 | .driver_data = 19 }, | ||
167 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP102U), | ||
168 | .driver_data = 20 }, | ||
169 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP118EL), | ||
170 | .driver_data = 21 }, | ||
171 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP168EL), | ||
172 | .driver_data = 22 }, | ||
173 | { PCI_DEVICE(PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP104EL), | ||
174 | .driver_data = 23 }, | ||
175 | { } | 173 | { } |
176 | }; | 174 | }; |
177 | MODULE_DEVICE_TABLE(pci, mxser_pcibrds); | 175 | MODULE_DEVICE_TABLE(pci, mxser_pcibrds); |
diff --git a/drivers/char/n_tty.c b/drivers/char/n_tty.c index 03805691193..596c7173997 100644 --- a/drivers/char/n_tty.c +++ b/drivers/char/n_tty.c | |||
@@ -437,7 +437,7 @@ static inline void finish_erasing(struct tty_struct *tty) | |||
437 | * @c: character input | 437 | * @c: character input |
438 | * @tty: terminal device | 438 | * @tty: terminal device |
439 | * | 439 | * |
440 | * Perform erase and neccessary output when an erase character is | 440 | * Perform erase and necessary output when an erase character is |
441 | * present in the stream from the driver layer. Handles the complexities | 441 | * present in the stream from the driver layer. Handles the complexities |
442 | * of UTF-8 multibyte symbols. | 442 | * of UTF-8 multibyte symbols. |
443 | */ | 443 | */ |
@@ -657,7 +657,7 @@ static inline void n_tty_receive_overrun(struct tty_struct *tty) | |||
657 | * @c: character | 657 | * @c: character |
658 | * | 658 | * |
659 | * Process a parity error and queue the right data to indicate | 659 | * Process a parity error and queue the right data to indicate |
660 | * the error case if neccessary. Locking as per n_tty_receive_buf. | 660 | * the error case if necessary. Locking as per n_tty_receive_buf. |
661 | */ | 661 | */ |
662 | static inline void n_tty_receive_parity_error(struct tty_struct *tty, | 662 | static inline void n_tty_receive_parity_error(struct tty_struct *tty, |
663 | unsigned char c) | 663 | unsigned char c) |
diff --git a/drivers/char/pty.c b/drivers/char/pty.c index 73de77105fe..706ff34728f 100644 --- a/drivers/char/pty.c +++ b/drivers/char/pty.c | |||
@@ -318,7 +318,7 @@ int pty_limit = NR_UNIX98_PTY_DEFAULT; | |||
318 | static int pty_limit_min = 0; | 318 | static int pty_limit_min = 0; |
319 | static int pty_limit_max = NR_UNIX98_PTY_MAX; | 319 | static int pty_limit_max = NR_UNIX98_PTY_MAX; |
320 | 320 | ||
321 | ctl_table pty_table[] = { | 321 | static struct ctl_table pty_table[] = { |
322 | { | 322 | { |
323 | .ctl_name = PTY_MAX, | 323 | .ctl_name = PTY_MAX, |
324 | .procname = "max", | 324 | .procname = "max", |
@@ -340,6 +340,27 @@ ctl_table pty_table[] = { | |||
340 | } | 340 | } |
341 | }; | 341 | }; |
342 | 342 | ||
343 | static struct ctl_table pty_kern_table[] = { | ||
344 | { | ||
345 | .ctl_name = KERN_PTY, | ||
346 | .procname = "pty", | ||
347 | .mode = 0555, | ||
348 | .child = pty_table, | ||
349 | }, | ||
350 | {} | ||
351 | }; | ||
352 | |||
353 | static struct ctl_table pty_root_table[] = { | ||
354 | { | ||
355 | .ctl_name = CTL_KERN, | ||
356 | .procname = "kernel", | ||
357 | .mode = 0555, | ||
358 | .child = pty_kern_table, | ||
359 | }, | ||
360 | {} | ||
361 | }; | ||
362 | |||
363 | |||
343 | static int pty_unix98_ioctl(struct tty_struct *tty, struct file *file, | 364 | static int pty_unix98_ioctl(struct tty_struct *tty, struct file *file, |
344 | unsigned int cmd, unsigned long arg) | 365 | unsigned int cmd, unsigned long arg) |
345 | { | 366 | { |
@@ -404,6 +425,7 @@ static void __init unix98_pty_init(void) | |||
404 | panic("Couldn't register Unix98 pts driver"); | 425 | panic("Couldn't register Unix98 pts driver"); |
405 | 426 | ||
406 | pty_table[1].data = &ptm_driver->refcount; | 427 | pty_table[1].data = &ptm_driver->refcount; |
428 | register_sysctl_table(pty_root_table); | ||
407 | } | 429 | } |
408 | #else | 430 | #else |
409 | static inline void unix98_pty_init(void) { } | 431 | static inline void unix98_pty_init(void) { } |
diff --git a/drivers/char/random.c b/drivers/char/random.c index af274e5a25e..1756b1f7cb7 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c | |||
@@ -649,7 +649,7 @@ EXPORT_SYMBOL_GPL(add_input_randomness); | |||
649 | 649 | ||
650 | void add_interrupt_randomness(int irq) | 650 | void add_interrupt_randomness(int irq) |
651 | { | 651 | { |
652 | if (irq >= NR_IRQS || irq_timer_state[irq] == 0) | 652 | if (irq >= NR_IRQS || irq_timer_state[irq] == NULL) |
653 | return; | 653 | return; |
654 | 654 | ||
655 | DEBUG_ENT("irq event %d\n", irq); | 655 | DEBUG_ENT("irq event %d\n", irq); |
diff --git a/drivers/char/rocket.c b/drivers/char/rocket.c index 56cbba7b6ec..d83419c3857 100644 --- a/drivers/char/rocket.c +++ b/drivers/char/rocket.c | |||
@@ -84,6 +84,7 @@ | |||
84 | #include <linux/mutex.h> | 84 | #include <linux/mutex.h> |
85 | #include <linux/ioport.h> | 85 | #include <linux/ioport.h> |
86 | #include <linux/delay.h> | 86 | #include <linux/delay.h> |
87 | #include <linux/completion.h> | ||
87 | #include <linux/wait.h> | 88 | #include <linux/wait.h> |
88 | #include <linux/pci.h> | 89 | #include <linux/pci.h> |
89 | #include <asm/uaccess.h> | 90 | #include <asm/uaccess.h> |
@@ -548,8 +549,8 @@ static void rp_handle_port(struct r_port *info) | |||
548 | static void rp_do_poll(unsigned long dummy) | 549 | static void rp_do_poll(unsigned long dummy) |
549 | { | 550 | { |
550 | CONTROLLER_t *ctlp; | 551 | CONTROLLER_t *ctlp; |
551 | int ctrl, aiop, ch, line, i; | 552 | int ctrl, aiop, ch, line; |
552 | unsigned int xmitmask; | 553 | unsigned int xmitmask, i; |
553 | unsigned int CtlMask; | 554 | unsigned int CtlMask; |
554 | unsigned char AiopMask; | 555 | unsigned char AiopMask; |
555 | Word_t bit; | 556 | Word_t bit; |
@@ -562,7 +563,7 @@ static void rp_do_poll(unsigned long dummy) | |||
562 | /* Get a ptr to the board's control struct */ | 563 | /* Get a ptr to the board's control struct */ |
563 | ctlp = sCtlNumToCtlPtr(ctrl); | 564 | ctlp = sCtlNumToCtlPtr(ctrl); |
564 | 565 | ||
565 | /* Get the interupt status from the board */ | 566 | /* Get the interrupt status from the board */ |
566 | #ifdef CONFIG_PCI | 567 | #ifdef CONFIG_PCI |
567 | if (ctlp->BusType == isPCI) | 568 | if (ctlp->BusType == isPCI) |
568 | CtlMask = sPCIGetControllerIntStatus(ctlp); | 569 | CtlMask = sPCIGetControllerIntStatus(ctlp); |
@@ -650,7 +651,7 @@ static void init_r_port(int board, int aiop, int chan, struct pci_dev *pci_dev) | |||
650 | info->closing_wait = 3000; | 651 | info->closing_wait = 3000; |
651 | info->close_delay = 50; | 652 | info->close_delay = 50; |
652 | init_waitqueue_head(&info->open_wait); | 653 | init_waitqueue_head(&info->open_wait); |
653 | init_waitqueue_head(&info->close_wait); | 654 | init_completion(&info->close_wait); |
654 | info->flags &= ~ROCKET_MODE_MASK; | 655 | info->flags &= ~ROCKET_MODE_MASK; |
655 | switch (pc104[board][line]) { | 656 | switch (pc104[board][line]) { |
656 | case 422: | 657 | case 422: |
@@ -699,8 +700,8 @@ static void init_r_port(int board, int aiop, int chan, struct pci_dev *pci_dev) | |||
699 | spin_lock_init(&info->slock); | 700 | spin_lock_init(&info->slock); |
700 | mutex_init(&info->write_mtx); | 701 | mutex_init(&info->write_mtx); |
701 | rp_table[line] = info; | 702 | rp_table[line] = info; |
702 | if (pci_dev) | 703 | tty_register_device(rocket_driver, line, pci_dev ? &pci_dev->dev : |
703 | tty_register_device(rocket_driver, line, &pci_dev->dev); | 704 | NULL); |
704 | } | 705 | } |
705 | 706 | ||
706 | /* | 707 | /* |
@@ -878,7 +879,8 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, | |||
878 | if (tty_hung_up_p(filp)) | 879 | if (tty_hung_up_p(filp)) |
879 | return ((info->flags & ROCKET_HUP_NOTIFY) ? -EAGAIN : -ERESTARTSYS); | 880 | return ((info->flags & ROCKET_HUP_NOTIFY) ? -EAGAIN : -ERESTARTSYS); |
880 | if (info->flags & ROCKET_CLOSING) { | 881 | if (info->flags & ROCKET_CLOSING) { |
881 | interruptible_sleep_on(&info->close_wait); | 882 | if (wait_for_completion_interruptible(&info->close_wait)) |
883 | return -ERESTARTSYS; | ||
882 | return ((info->flags & ROCKET_HUP_NOTIFY) ? -EAGAIN : -ERESTARTSYS); | 884 | return ((info->flags & ROCKET_HUP_NOTIFY) ? -EAGAIN : -ERESTARTSYS); |
883 | } | 885 | } |
884 | 886 | ||
@@ -983,8 +985,10 @@ static int rp_open(struct tty_struct *tty, struct file *filp) | |||
983 | return -ENOMEM; | 985 | return -ENOMEM; |
984 | 986 | ||
985 | if (info->flags & ROCKET_CLOSING) { | 987 | if (info->flags & ROCKET_CLOSING) { |
986 | interruptible_sleep_on(&info->close_wait); | 988 | retval = wait_for_completion_interruptible(&info->close_wait); |
987 | free_page(page); | 989 | free_page(page); |
990 | if (retval) | ||
991 | return retval; | ||
988 | return ((info->flags & ROCKET_HUP_NOTIFY) ? -EAGAIN : -ERESTARTSYS); | 992 | return ((info->flags & ROCKET_HUP_NOTIFY) ? -EAGAIN : -ERESTARTSYS); |
989 | } | 993 | } |
990 | 994 | ||
@@ -1176,7 +1180,7 @@ static void rp_close(struct tty_struct *tty, struct file *filp) | |||
1176 | } | 1180 | } |
1177 | info->flags &= ~(ROCKET_INITIALIZED | ROCKET_CLOSING | ROCKET_NORMAL_ACTIVE); | 1181 | info->flags &= ~(ROCKET_INITIALIZED | ROCKET_CLOSING | ROCKET_NORMAL_ACTIVE); |
1178 | tty->closing = 0; | 1182 | tty->closing = 0; |
1179 | wake_up_interruptible(&info->close_wait); | 1183 | complete_all(&info->close_wait); |
1180 | atomic_dec(&rp_num_ports_open); | 1184 | atomic_dec(&rp_num_ports_open); |
1181 | 1185 | ||
1182 | #ifdef ROCKET_DEBUG_OPEN | 1186 | #ifdef ROCKET_DEBUG_OPEN |
@@ -1869,8 +1873,6 @@ static __init int register_PCI(int i, struct pci_dev *dev) | |||
1869 | int fast_clock = 0; | 1873 | int fast_clock = 0; |
1870 | int altChanRingIndicator = 0; | 1874 | int altChanRingIndicator = 0; |
1871 | int ports_per_aiop = 8; | 1875 | int ports_per_aiop = 8; |
1872 | int ret; | ||
1873 | unsigned int class_rev; | ||
1874 | WordIO_t ConfigIO = 0; | 1876 | WordIO_t ConfigIO = 0; |
1875 | ByteIO_t UPCIRingInd = 0; | 1877 | ByteIO_t UPCIRingInd = 0; |
1876 | 1878 | ||
@@ -1878,12 +1880,6 @@ static __init int register_PCI(int i, struct pci_dev *dev) | |||
1878 | return 0; | 1880 | return 0; |
1879 | 1881 | ||
1880 | rcktpt_io_addr[i] = pci_resource_start(dev, 0); | 1882 | rcktpt_io_addr[i] = pci_resource_start(dev, 0); |
1881 | ret = pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev); | ||
1882 | |||
1883 | if (ret) { | ||
1884 | printk(KERN_INFO " Error during register_PCI(), unable to read config dword \n"); | ||
1885 | return 0; | ||
1886 | } | ||
1887 | 1883 | ||
1888 | rcktpt_type[i] = ROCKET_TYPE_NORMAL; | 1884 | rcktpt_type[i] = ROCKET_TYPE_NORMAL; |
1889 | rocketModel[i].loadrm2 = 0; | 1885 | rocketModel[i].loadrm2 = 0; |
@@ -2037,8 +2033,9 @@ static __init int register_PCI(int i, struct pci_dev *dev) | |||
2037 | ports_per_aiop = 6; | 2033 | ports_per_aiop = 6; |
2038 | str = "6-port"; | 2034 | str = "6-port"; |
2039 | 2035 | ||
2040 | /* If class_rev is 1, the rocketmodem flash must be loaded. If it is 2 it is a "socketed" version. */ | 2036 | /* If revision is 1, the rocketmodem flash must be loaded. |
2041 | if ((class_rev & 0xFF) == 1) { | 2037 | * If it is 2 it is a "socketed" version. */ |
2038 | if (dev->revision == 1) { | ||
2042 | rcktpt_type[i] = ROCKET_TYPE_MODEMII; | 2039 | rcktpt_type[i] = ROCKET_TYPE_MODEMII; |
2043 | rocketModel[i].loadrm2 = 1; | 2040 | rocketModel[i].loadrm2 = 1; |
2044 | } else { | 2041 | } else { |
@@ -2053,7 +2050,7 @@ static __init int register_PCI(int i, struct pci_dev *dev) | |||
2053 | max_num_aiops = 1; | 2050 | max_num_aiops = 1; |
2054 | ports_per_aiop = 4; | 2051 | ports_per_aiop = 4; |
2055 | str = "4-port"; | 2052 | str = "4-port"; |
2056 | if ((class_rev & 0xFF) == 1) { | 2053 | if (dev->revision == 1) { |
2057 | rcktpt_type[i] = ROCKET_TYPE_MODEMII; | 2054 | rcktpt_type[i] = ROCKET_TYPE_MODEMII; |
2058 | rocketModel[i].loadrm2 = 1; | 2055 | rocketModel[i].loadrm2 = 1; |
2059 | } else { | 2056 | } else { |
@@ -2362,26 +2359,14 @@ static const struct tty_operations rocket_ops = { | |||
2362 | */ | 2359 | */ |
2363 | static int __init rp_init(void) | 2360 | static int __init rp_init(void) |
2364 | { | 2361 | { |
2365 | int retval, pci_boards_found, isa_boards_found, i; | 2362 | int ret = -ENOMEM, pci_boards_found, isa_boards_found, i; |
2366 | 2363 | ||
2367 | printk(KERN_INFO "RocketPort device driver module, version %s, %s\n", | 2364 | printk(KERN_INFO "RocketPort device driver module, version %s, %s\n", |
2368 | ROCKET_VERSION, ROCKET_DATE); | 2365 | ROCKET_VERSION, ROCKET_DATE); |
2369 | 2366 | ||
2370 | rocket_driver = alloc_tty_driver(MAX_RP_PORTS); | 2367 | rocket_driver = alloc_tty_driver(MAX_RP_PORTS); |
2371 | if (!rocket_driver) | 2368 | if (!rocket_driver) |
2372 | return -ENOMEM; | 2369 | goto err; |
2373 | |||
2374 | /* | ||
2375 | * Initialize the array of pointers to our own internal state | ||
2376 | * structures. | ||
2377 | */ | ||
2378 | memset(rp_table, 0, sizeof (rp_table)); | ||
2379 | memset(xmit_flags, 0, sizeof (xmit_flags)); | ||
2380 | |||
2381 | for (i = 0; i < MAX_RP_PORTS; i++) | ||
2382 | lineNumbers[i] = 0; | ||
2383 | nextLineNumber = 0; | ||
2384 | memset(rocketModel, 0, sizeof (rocketModel)); | ||
2385 | 2370 | ||
2386 | /* | 2371 | /* |
2387 | * If board 1 is non-zero, there is at least one ISA configured. If controller is | 2372 | * If board 1 is non-zero, there is at least one ISA configured. If controller is |
@@ -2396,8 +2381,11 @@ static int __init rp_init(void) | |||
2396 | 2381 | ||
2397 | /* If an ISA card is configured, reserve the 4 byte IO space for the Mudbac controller */ | 2382 | /* If an ISA card is configured, reserve the 4 byte IO space for the Mudbac controller */ |
2398 | if (controller && (!request_region(controller, 4, "Comtrol RocketPort"))) { | 2383 | if (controller && (!request_region(controller, 4, "Comtrol RocketPort"))) { |
2399 | printk(KERN_INFO "Unable to reserve IO region for first configured ISA RocketPort controller 0x%lx. Driver exiting \n", controller); | 2384 | printk(KERN_ERR "Unable to reserve IO region for first " |
2400 | return -EBUSY; | 2385 | "configured ISA RocketPort controller 0x%lx. " |
2386 | "Driver exiting\n", controller); | ||
2387 | ret = -EBUSY; | ||
2388 | goto err_tty; | ||
2401 | } | 2389 | } |
2402 | 2390 | ||
2403 | /* Store ISA variable retrieved from command line or .conf file. */ | 2391 | /* Store ISA variable retrieved from command line or .conf file. */ |
@@ -2434,15 +2422,14 @@ static int __init rp_init(void) | |||
2434 | rocket_driver->init_termios.c_ispeed = 9600; | 2422 | rocket_driver->init_termios.c_ispeed = 9600; |
2435 | rocket_driver->init_termios.c_ospeed = 9600; | 2423 | rocket_driver->init_termios.c_ospeed = 9600; |
2436 | #ifdef ROCKET_SOFT_FLOW | 2424 | #ifdef ROCKET_SOFT_FLOW |
2437 | rocket_driver->flags |= TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; | 2425 | rocket_driver->flags |= TTY_DRIVER_REAL_RAW; |
2438 | #endif | 2426 | #endif |
2439 | tty_set_operations(rocket_driver, &rocket_ops); | 2427 | tty_set_operations(rocket_driver, &rocket_ops); |
2440 | 2428 | ||
2441 | retval = tty_register_driver(rocket_driver); | 2429 | ret = tty_register_driver(rocket_driver); |
2442 | if (retval < 0) { | 2430 | if (ret < 0) { |
2443 | printk(KERN_INFO "Couldn't install tty RocketPort driver (error %d)\n", -retval); | 2431 | printk(KERN_ERR "Couldn't install tty RocketPort driver\n"); |
2444 | put_tty_driver(rocket_driver); | 2432 | goto err_tty; |
2445 | return -1; | ||
2446 | } | 2433 | } |
2447 | 2434 | ||
2448 | #ifdef ROCKET_DEBUG_OPEN | 2435 | #ifdef ROCKET_DEBUG_OPEN |
@@ -2469,14 +2456,18 @@ static int __init rp_init(void) | |||
2469 | max_board = pci_boards_found + isa_boards_found; | 2456 | max_board = pci_boards_found + isa_boards_found; |
2470 | 2457 | ||
2471 | if (max_board == 0) { | 2458 | if (max_board == 0) { |
2472 | printk(KERN_INFO "No rocketport ports found; unloading driver.\n"); | 2459 | printk(KERN_ERR "No rocketport ports found; unloading driver\n"); |
2473 | del_timer_sync(&rocket_timer); | 2460 | ret = -ENXIO; |
2474 | tty_unregister_driver(rocket_driver); | 2461 | goto err_ttyu; |
2475 | put_tty_driver(rocket_driver); | ||
2476 | return -ENXIO; | ||
2477 | } | 2462 | } |
2478 | 2463 | ||
2479 | return 0; | 2464 | return 0; |
2465 | err_ttyu: | ||
2466 | tty_unregister_driver(rocket_driver); | ||
2467 | err_tty: | ||
2468 | put_tty_driver(rocket_driver); | ||
2469 | err: | ||
2470 | return ret; | ||
2480 | } | 2471 | } |
2481 | 2472 | ||
2482 | 2473 | ||
@@ -2491,10 +2482,14 @@ static void rp_cleanup_module(void) | |||
2491 | if (retval) | 2482 | if (retval) |
2492 | printk(KERN_INFO "Error %d while trying to unregister " | 2483 | printk(KERN_INFO "Error %d while trying to unregister " |
2493 | "rocketport driver\n", -retval); | 2484 | "rocketport driver\n", -retval); |
2494 | put_tty_driver(rocket_driver); | ||
2495 | 2485 | ||
2496 | for (i = 0; i < MAX_RP_PORTS; i++) | 2486 | for (i = 0; i < MAX_RP_PORTS; i++) |
2497 | kfree(rp_table[i]); | 2487 | if (rp_table[i]) { |
2488 | tty_unregister_device(rocket_driver, i); | ||
2489 | kfree(rp_table[i]); | ||
2490 | } | ||
2491 | |||
2492 | put_tty_driver(rocket_driver); | ||
2498 | 2493 | ||
2499 | for (i = 0; i < NUM_BOARDS; i++) { | 2494 | for (i = 0; i < NUM_BOARDS; i++) { |
2500 | if (rcktpt_io_addr[i] <= 0 || is_PCI[i]) | 2495 | if (rcktpt_io_addr[i] <= 0 || is_PCI[i]) |
diff --git a/drivers/char/rocket_int.h b/drivers/char/rocket_int.h index b4c53dfa795..55b8f2d71a9 100644 --- a/drivers/char/rocket_int.h +++ b/drivers/char/rocket_int.h | |||
@@ -1163,13 +1163,8 @@ struct r_port { | |||
1163 | int read_status_mask; | 1163 | int read_status_mask; |
1164 | int cps; | 1164 | int cps; |
1165 | 1165 | ||
1166 | #ifdef DECLARE_WAITQUEUE | ||
1167 | wait_queue_head_t open_wait; | 1166 | wait_queue_head_t open_wait; |
1168 | wait_queue_head_t close_wait; | 1167 | struct completion close_wait; |
1169 | #else | ||
1170 | struct wait_queue *open_wait; | ||
1171 | struct wait_queue *close_wait; | ||
1172 | #endif | ||
1173 | spinlock_t slock; | 1168 | spinlock_t slock; |
1174 | struct mutex write_mtx; | 1169 | struct mutex write_mtx; |
1175 | }; | 1170 | }; |
diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c index 859858561ab..877e53dcb99 100644 --- a/drivers/char/sonypi.c +++ b/drivers/char/sonypi.c | |||
@@ -7,7 +7,7 @@ | |||
7 | * | 7 | * |
8 | * Copyright (C) 2005 Narayanan R S <nars@kadamba.org> | 8 | * Copyright (C) 2005 Narayanan R S <nars@kadamba.org> |
9 | * | 9 | * |
10 | * Copyright (C) 2001-2002 Alcôve <www.alcove.com> | 10 | * Copyright (C) 2001-2002 Alcôve <www.alcove.com> |
11 | * | 11 | * |
12 | * Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au> | 12 | * Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au> |
13 | * | 13 | * |
@@ -1178,9 +1178,9 @@ static int __devinit sonypi_create_input_devices(void) | |||
1178 | jog_dev->id.bustype = BUS_ISA; | 1178 | jog_dev->id.bustype = BUS_ISA; |
1179 | jog_dev->id.vendor = PCI_VENDOR_ID_SONY; | 1179 | jog_dev->id.vendor = PCI_VENDOR_ID_SONY; |
1180 | 1180 | ||
1181 | jog_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 1181 | jog_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
1182 | jog_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_MIDDLE); | 1182 | jog_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_MIDDLE); |
1183 | jog_dev->relbit[0] = BIT(REL_WHEEL); | 1183 | jog_dev->relbit[0] = BIT_MASK(REL_WHEEL); |
1184 | 1184 | ||
1185 | sonypi_device.input_key_dev = key_dev = input_allocate_device(); | 1185 | sonypi_device.input_key_dev = key_dev = input_allocate_device(); |
1186 | if (!key_dev) { | 1186 | if (!key_dev) { |
@@ -1193,7 +1193,7 @@ static int __devinit sonypi_create_input_devices(void) | |||
1193 | key_dev->id.vendor = PCI_VENDOR_ID_SONY; | 1193 | key_dev->id.vendor = PCI_VENDOR_ID_SONY; |
1194 | 1194 | ||
1195 | /* Initialize the Input Drivers: special keys */ | 1195 | /* Initialize the Input Drivers: special keys */ |
1196 | key_dev->evbit[0] = BIT(EV_KEY); | 1196 | key_dev->evbit[0] = BIT_MASK(EV_KEY); |
1197 | for (i = 0; sonypi_inputkeys[i].sonypiev; i++) | 1197 | for (i = 0; sonypi_inputkeys[i].sonypiev; i++) |
1198 | if (sonypi_inputkeys[i].inputev) | 1198 | if (sonypi_inputkeys[i].inputev) |
1199 | set_bit(sonypi_inputkeys[i].inputev, key_dev->keybit); | 1199 | set_bit(sonypi_inputkeys[i].inputev, key_dev->keybit); |
diff --git a/drivers/char/sx.c b/drivers/char/sx.c index 85a23283dff..a6e1c9ba121 100644 --- a/drivers/char/sx.c +++ b/drivers/char/sx.c | |||
@@ -1467,7 +1467,7 @@ static int sx_open(struct tty_struct *tty, struct file *filp) | |||
1467 | 1467 | ||
1468 | line = tty->index; | 1468 | line = tty->index; |
1469 | sx_dprintk(SX_DEBUG_OPEN, "%d: opening line %d. tty=%p ctty=%p, " | 1469 | sx_dprintk(SX_DEBUG_OPEN, "%d: opening line %d. tty=%p ctty=%p, " |
1470 | "np=%d)\n", current->pid, line, tty, | 1470 | "np=%d)\n", task_pid_nr(current), line, tty, |
1471 | current->signal->tty, sx_nports); | 1471 | current->signal->tty, sx_nports); |
1472 | 1472 | ||
1473 | if ((line < 0) || (line >= SX_NPORTS) || (line >= sx_nports)) | 1473 | if ((line < 0) || (line >= SX_NPORTS) || (line >= sx_nports)) |
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c index 78d14935f2b..de60e1ea4fb 100644 --- a/drivers/char/sysrq.c +++ b/drivers/char/sysrq.c | |||
@@ -251,7 +251,7 @@ static void send_sig_all(int sig) | |||
251 | struct task_struct *p; | 251 | struct task_struct *p; |
252 | 252 | ||
253 | for_each_process(p) { | 253 | for_each_process(p) { |
254 | if (p->mm && !is_init(p)) | 254 | if (p->mm && !is_global_init(p)) |
255 | /* Not swapper, init nor kernel thread */ | 255 | /* Not swapper, init nor kernel thread */ |
256 | force_sig(sig, p); | 256 | force_sig(sig, p); |
257 | } | 257 | } |
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index 9c867cf6de6..f36fecd3fd2 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c | |||
@@ -103,6 +103,7 @@ | |||
103 | #include <linux/selection.h> | 103 | #include <linux/selection.h> |
104 | 104 | ||
105 | #include <linux/kmod.h> | 105 | #include <linux/kmod.h> |
106 | #include <linux/nsproxy.h> | ||
106 | 107 | ||
107 | #undef TTY_DEBUG_HANGUP | 108 | #undef TTY_DEBUG_HANGUP |
108 | 109 | ||
@@ -942,7 +943,7 @@ EXPORT_SYMBOL_GPL(tty_ldisc_deref); | |||
942 | * @tty: terminal to activate ldisc on | 943 | * @tty: terminal to activate ldisc on |
943 | * | 944 | * |
944 | * Set the TTY_LDISC flag when the line discipline can be called | 945 | * Set the TTY_LDISC flag when the line discipline can be called |
945 | * again. Do neccessary wakeups for existing sleepers. | 946 | * again. Do necessary wakeups for existing sleepers. |
946 | * | 947 | * |
947 | * Note: nobody should set this bit except via this function. Clearing | 948 | * Note: nobody should set this bit except via this function. Clearing |
948 | * directly is allowed. | 949 | * directly is allowed. |
@@ -1503,7 +1504,7 @@ EXPORT_SYMBOL(tty_hangup); | |||
1503 | * | 1504 | * |
1504 | * The user has asked via system call for the terminal to be hung up. | 1505 | * The user has asked via system call for the terminal to be hung up. |
1505 | * We do this synchronously so that when the syscall returns the process | 1506 | * We do this synchronously so that when the syscall returns the process |
1506 | * is complete. That guarantee is neccessary for security reasons. | 1507 | * is complete. That guarantee is necessary for security reasons. |
1507 | */ | 1508 | */ |
1508 | 1509 | ||
1509 | void tty_vhangup(struct tty_struct * tty) | 1510 | void tty_vhangup(struct tty_struct * tty) |
@@ -1690,7 +1691,7 @@ EXPORT_SYMBOL(stop_tty); | |||
1690 | * @tty: tty to start | 1691 | * @tty: tty to start |
1691 | * | 1692 | * |
1692 | * Start a tty that has been stopped if at all possible. Perform | 1693 | * Start a tty that has been stopped if at all possible. Perform |
1693 | * any neccessary wakeups and propagate the TIOCPKT status. If this | 1694 | * any necessary wakeups and propagate the TIOCPKT status. If this |
1694 | * is the tty was previous stopped and is being started then the | 1695 | * is the tty was previous stopped and is being started then the |
1695 | * driver start method is invoked and the line discipline woken. | 1696 | * driver start method is invoked and the line discipline woken. |
1696 | * | 1697 | * |
@@ -2876,7 +2877,7 @@ static int tty_fasync(int fd, struct file * filp, int on) | |||
2876 | * @tty: tty to fake input into | 2877 | * @tty: tty to fake input into |
2877 | * @p: pointer to character | 2878 | * @p: pointer to character |
2878 | * | 2879 | * |
2879 | * Fake input to a tty device. Does the neccessary locking and | 2880 | * Fake input to a tty device. Does the necessary locking and |
2880 | * input management. | 2881 | * input management. |
2881 | * | 2882 | * |
2882 | * FIXME: does not honour flow control ?? | 2883 | * FIXME: does not honour flow control ?? |
@@ -3107,7 +3108,7 @@ static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t | |||
3107 | */ | 3108 | */ |
3108 | if (tty == real_tty && current->signal->tty != real_tty) | 3109 | if (tty == real_tty && current->signal->tty != real_tty) |
3109 | return -ENOTTY; | 3110 | return -ENOTTY; |
3110 | return put_user(pid_nr(real_tty->pgrp), p); | 3111 | return put_user(pid_vnr(real_tty->pgrp), p); |
3111 | } | 3112 | } |
3112 | 3113 | ||
3113 | /** | 3114 | /** |
@@ -3141,7 +3142,7 @@ static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t | |||
3141 | if (pgrp_nr < 0) | 3142 | if (pgrp_nr < 0) |
3142 | return -EINVAL; | 3143 | return -EINVAL; |
3143 | rcu_read_lock(); | 3144 | rcu_read_lock(); |
3144 | pgrp = find_pid(pgrp_nr); | 3145 | pgrp = find_vpid(pgrp_nr); |
3145 | retval = -ESRCH; | 3146 | retval = -ESRCH; |
3146 | if (!pgrp) | 3147 | if (!pgrp) |
3147 | goto out_unlock; | 3148 | goto out_unlock; |
@@ -3178,7 +3179,7 @@ static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t _ | |||
3178 | return -ENOTTY; | 3179 | return -ENOTTY; |
3179 | if (!real_tty->session) | 3180 | if (!real_tty->session) |
3180 | return -ENOTTY; | 3181 | return -ENOTTY; |
3181 | return put_user(pid_nr(real_tty->session), p); | 3182 | return put_user(pid_vnr(real_tty->session), p); |
3182 | } | 3183 | } |
3183 | 3184 | ||
3184 | /** | 3185 | /** |
@@ -3528,8 +3529,8 @@ void __do_SAK(struct tty_struct *tty) | |||
3528 | /* Kill the entire session */ | 3529 | /* Kill the entire session */ |
3529 | do_each_pid_task(session, PIDTYPE_SID, p) { | 3530 | do_each_pid_task(session, PIDTYPE_SID, p) { |
3530 | printk(KERN_NOTICE "SAK: killed process %d" | 3531 | printk(KERN_NOTICE "SAK: killed process %d" |
3531 | " (%s): process_session(p)==tty->session\n", | 3532 | " (%s): task_session_nr(p)==tty->session\n", |
3532 | p->pid, p->comm); | 3533 | task_pid_nr(p), p->comm); |
3533 | send_sig(SIGKILL, p, 1); | 3534 | send_sig(SIGKILL, p, 1); |
3534 | } while_each_pid_task(session, PIDTYPE_SID, p); | 3535 | } while_each_pid_task(session, PIDTYPE_SID, p); |
3535 | /* Now kill any processes that happen to have the | 3536 | /* Now kill any processes that happen to have the |
@@ -3538,8 +3539,8 @@ void __do_SAK(struct tty_struct *tty) | |||
3538 | do_each_thread(g, p) { | 3539 | do_each_thread(g, p) { |
3539 | if (p->signal->tty == tty) { | 3540 | if (p->signal->tty == tty) { |
3540 | printk(KERN_NOTICE "SAK: killed process %d" | 3541 | printk(KERN_NOTICE "SAK: killed process %d" |
3541 | " (%s): process_session(p)==tty->session\n", | 3542 | " (%s): task_session_nr(p)==tty->session\n", |
3542 | p->pid, p->comm); | 3543 | task_pid_nr(p), p->comm); |
3543 | send_sig(SIGKILL, p, 1); | 3544 | send_sig(SIGKILL, p, 1); |
3544 | continue; | 3545 | continue; |
3545 | } | 3546 | } |
@@ -3559,7 +3560,7 @@ void __do_SAK(struct tty_struct *tty) | |||
3559 | filp->private_data == tty) { | 3560 | filp->private_data == tty) { |
3560 | printk(KERN_NOTICE "SAK: killed process %d" | 3561 | printk(KERN_NOTICE "SAK: killed process %d" |
3561 | " (%s): fd#%d opened to the tty\n", | 3562 | " (%s): fd#%d opened to the tty\n", |
3562 | p->pid, p->comm, i); | 3563 | task_pid_nr(p), p->comm, i); |
3563 | force_sig(SIGKILL, p); | 3564 | force_sig(SIGKILL, p); |
3564 | break; | 3565 | break; |
3565 | } | 3566 | } |
diff --git a/drivers/char/tty_ioctl.c b/drivers/char/tty_ioctl.c index 745d552620b..7a003504c26 100644 --- a/drivers/char/tty_ioctl.c +++ b/drivers/char/tty_ioctl.c | |||
@@ -228,7 +228,8 @@ EXPORT_SYMBOL(tty_termios_input_baud_rate); | |||
228 | * and will all go away once this is done. | 228 | * and will all go away once this is done. |
229 | */ | 229 | */ |
230 | 230 | ||
231 | void tty_termios_encode_baud_rate(struct ktermios *termios, speed_t ibaud, speed_t obaud) | 231 | void tty_termios_encode_baud_rate(struct ktermios *termios, |
232 | speed_t ibaud, speed_t obaud) | ||
232 | { | 233 | { |
233 | int i = 0; | 234 | int i = 0; |
234 | int ifound = -1, ofound = -1; | 235 | int ifound = -1, ofound = -1; |
@@ -263,11 +264,15 @@ void tty_termios_encode_baud_rate(struct ktermios *termios, speed_t ibaud, speed | |||
263 | */ | 264 | */ |
264 | 265 | ||
265 | do { | 266 | do { |
266 | if (obaud - oclose >= baud_table[i] && obaud + oclose <= baud_table[i]) { | 267 | if (obaud - oclose <= baud_table[i] && |
268 | obaud + oclose >= baud_table[i]) { | ||
267 | termios->c_cflag |= baud_bits[i]; | 269 | termios->c_cflag |= baud_bits[i]; |
268 | ofound = i; | 270 | ofound = i; |
269 | } | 271 | } |
270 | if (ibaud - iclose >= baud_table[i] && ibaud + iclose <= baud_table[i]) { | 272 | if (ibaud - iclose <= baud_table[i] && |
273 | ibaud + iclose >= baud_table[i]) { | ||
274 | /* For the case input == output don't set IBAUD bits | ||
275 | if the user didn't do so */ | ||
271 | if (ofound == i && !ibinput) | 276 | if (ofound == i && !ibinput) |
272 | ifound = i; | 277 | ifound = i; |
273 | #ifdef IBSHIFT | 278 | #ifdef IBSHIFT |
@@ -439,7 +444,7 @@ static void change_termios(struct tty_struct * tty, struct ktermios * new_termio | |||
439 | * @arg: user data | 444 | * @arg: user data |
440 | * @opt: option information | 445 | * @opt: option information |
441 | * | 446 | * |
442 | * Helper function to prepare termios data and run neccessary other | 447 | * Helper function to prepare termios data and run necessary other |
443 | * functions before using change_termios to do the actual changes. | 448 | * functions before using change_termios to do the actual changes. |
444 | * | 449 | * |
445 | * Locking: | 450 | * Locking: |
diff --git a/drivers/char/vt.c b/drivers/char/vt.c index 645ad980898..7a5badfb7d8 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c | |||
@@ -99,6 +99,7 @@ | |||
99 | #include <linux/pm.h> | 99 | #include <linux/pm.h> |
100 | #include <linux/font.h> | 100 | #include <linux/font.h> |
101 | #include <linux/bitops.h> | 101 | #include <linux/bitops.h> |
102 | #include <linux/notifier.h> | ||
102 | 103 | ||
103 | #include <asm/io.h> | 104 | #include <asm/io.h> |
104 | #include <asm/system.h> | 105 | #include <asm/system.h> |
@@ -158,11 +159,7 @@ static void blank_screen_t(unsigned long dummy); | |||
158 | static void set_palette(struct vc_data *vc); | 159 | static void set_palette(struct vc_data *vc); |
159 | 160 | ||
160 | static int printable; /* Is console ready for printing? */ | 161 | static int printable; /* Is console ready for printing? */ |
161 | #ifdef CONFIG_VT_UNICODE | 162 | int default_utf8 = true; |
162 | int default_utf8 = 1; | ||
163 | #else | ||
164 | int default_utf8; | ||
165 | #endif | ||
166 | module_param(default_utf8, int, S_IRUGO | S_IWUSR); | 163 | module_param(default_utf8, int, S_IRUGO | S_IWUSR); |
167 | 164 | ||
168 | /* | 165 | /* |
@@ -227,6 +224,35 @@ enum { | |||
227 | }; | 224 | }; |
228 | 225 | ||
229 | /* | 226 | /* |
227 | * Notifier list for console events. | ||
228 | */ | ||
229 | static ATOMIC_NOTIFIER_HEAD(vt_notifier_list); | ||
230 | |||
231 | int register_vt_notifier(struct notifier_block *nb) | ||
232 | { | ||
233 | return atomic_notifier_chain_register(&vt_notifier_list, nb); | ||
234 | } | ||
235 | EXPORT_SYMBOL_GPL(register_vt_notifier); | ||
236 | |||
237 | int unregister_vt_notifier(struct notifier_block *nb) | ||
238 | { | ||
239 | return atomic_notifier_chain_unregister(&vt_notifier_list, nb); | ||
240 | } | ||
241 | EXPORT_SYMBOL_GPL(unregister_vt_notifier); | ||
242 | |||
243 | static void notify_write(struct vc_data *vc, unsigned int unicode) | ||
244 | { | ||
245 | struct vt_notifier_param param = { .vc = vc, unicode = unicode }; | ||
246 | atomic_notifier_call_chain(&vt_notifier_list, VT_WRITE, ¶m); | ||
247 | } | ||
248 | |||
249 | static void notify_update(struct vc_data *vc) | ||
250 | { | ||
251 | struct vt_notifier_param param = { .vc = vc }; | ||
252 | atomic_notifier_call_chain(&vt_notifier_list, VT_UPDATE, ¶m); | ||
253 | } | ||
254 | |||
255 | /* | ||
230 | * Low-Level Functions | 256 | * Low-Level Functions |
231 | */ | 257 | */ |
232 | 258 | ||
@@ -722,6 +748,7 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ | |||
722 | return -ENXIO; | 748 | return -ENXIO; |
723 | if (!vc_cons[currcons].d) { | 749 | if (!vc_cons[currcons].d) { |
724 | struct vc_data *vc; | 750 | struct vc_data *vc; |
751 | struct vt_notifier_param param; | ||
725 | 752 | ||
726 | /* prevent users from taking too much memory */ | 753 | /* prevent users from taking too much memory */ |
727 | if (currcons >= MAX_NR_USER_CONSOLES && !capable(CAP_SYS_RESOURCE)) | 754 | if (currcons >= MAX_NR_USER_CONSOLES && !capable(CAP_SYS_RESOURCE)) |
@@ -733,7 +760,7 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ | |||
733 | /* although the numbers above are not valid since long ago, the | 760 | /* although the numbers above are not valid since long ago, the |
734 | point is still up-to-date and the comment still has its value | 761 | point is still up-to-date and the comment still has its value |
735 | even if only as a historical artifact. --mj, July 1998 */ | 762 | even if only as a historical artifact. --mj, July 1998 */ |
736 | vc = kzalloc(sizeof(struct vc_data), GFP_KERNEL); | 763 | param.vc = vc = kzalloc(sizeof(struct vc_data), GFP_KERNEL); |
737 | if (!vc) | 764 | if (!vc) |
738 | return -ENOMEM; | 765 | return -ENOMEM; |
739 | vc_cons[currcons].d = vc; | 766 | vc_cons[currcons].d = vc; |
@@ -750,6 +777,7 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ | |||
750 | } | 777 | } |
751 | vc->vc_kmalloced = 1; | 778 | vc->vc_kmalloced = 1; |
752 | vc_init(vc, vc->vc_rows, vc->vc_cols, 1); | 779 | vc_init(vc, vc->vc_rows, vc->vc_cols, 1); |
780 | atomic_notifier_call_chain(&vt_notifier_list, VT_ALLOCATE, ¶m); | ||
753 | } | 781 | } |
754 | return 0; | 782 | return 0; |
755 | } | 783 | } |
@@ -911,6 +939,8 @@ void vc_deallocate(unsigned int currcons) | |||
911 | 939 | ||
912 | if (vc_cons_allocated(currcons)) { | 940 | if (vc_cons_allocated(currcons)) { |
913 | struct vc_data *vc = vc_cons[currcons].d; | 941 | struct vc_data *vc = vc_cons[currcons].d; |
942 | struct vt_notifier_param param = { .vc = vc }; | ||
943 | atomic_notifier_call_chain(&vt_notifier_list, VT_DEALLOCATE, ¶m); | ||
914 | vc->vc_sw->con_deinit(vc); | 944 | vc->vc_sw->con_deinit(vc); |
915 | put_pid(vc->vt_pid); | 945 | put_pid(vc->vt_pid); |
916 | module_put(vc->vc_sw->owner); | 946 | module_put(vc->vc_sw->owner); |
@@ -1023,6 +1053,7 @@ static void lf(struct vc_data *vc) | |||
1023 | vc->vc_pos += vc->vc_size_row; | 1053 | vc->vc_pos += vc->vc_size_row; |
1024 | } | 1054 | } |
1025 | vc->vc_need_wrap = 0; | 1055 | vc->vc_need_wrap = 0; |
1056 | notify_write(vc, '\n'); | ||
1026 | } | 1057 | } |
1027 | 1058 | ||
1028 | static void ri(struct vc_data *vc) | 1059 | static void ri(struct vc_data *vc) |
@@ -1043,6 +1074,7 @@ static inline void cr(struct vc_data *vc) | |||
1043 | { | 1074 | { |
1044 | vc->vc_pos -= vc->vc_x << 1; | 1075 | vc->vc_pos -= vc->vc_x << 1; |
1045 | vc->vc_need_wrap = vc->vc_x = 0; | 1076 | vc->vc_need_wrap = vc->vc_x = 0; |
1077 | notify_write(vc, '\r'); | ||
1046 | } | 1078 | } |
1047 | 1079 | ||
1048 | static inline void bs(struct vc_data *vc) | 1080 | static inline void bs(struct vc_data *vc) |
@@ -1051,6 +1083,7 @@ static inline void bs(struct vc_data *vc) | |||
1051 | vc->vc_pos -= 2; | 1083 | vc->vc_pos -= 2; |
1052 | vc->vc_x--; | 1084 | vc->vc_x--; |
1053 | vc->vc_need_wrap = 0; | 1085 | vc->vc_need_wrap = 0; |
1086 | notify_write(vc, '\b'); | ||
1054 | } | 1087 | } |
1055 | } | 1088 | } |
1056 | 1089 | ||
@@ -1597,6 +1630,7 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c) | |||
1597 | break; | 1630 | break; |
1598 | } | 1631 | } |
1599 | vc->vc_pos += (vc->vc_x << 1); | 1632 | vc->vc_pos += (vc->vc_x << 1); |
1633 | notify_write(vc, '\t'); | ||
1600 | return; | 1634 | return; |
1601 | case 10: case 11: case 12: | 1635 | case 10: case 11: case 12: |
1602 | lf(vc); | 1636 | lf(vc); |
@@ -2256,6 +2290,7 @@ rescan_last_byte: | |||
2256 | tc = conv_uni_to_pc(vc, ' '); /* A space is printed in the second column */ | 2290 | tc = conv_uni_to_pc(vc, ' '); /* A space is printed in the second column */ |
2257 | if (tc < 0) tc = ' '; | 2291 | if (tc < 0) tc = ' '; |
2258 | } | 2292 | } |
2293 | notify_write(vc, c); | ||
2259 | 2294 | ||
2260 | if (inverse) { | 2295 | if (inverse) { |
2261 | FLUSH | 2296 | FLUSH |
@@ -2278,6 +2313,7 @@ rescan_last_byte: | |||
2278 | release_console_sem(); | 2313 | release_console_sem(); |
2279 | 2314 | ||
2280 | out: | 2315 | out: |
2316 | notify_update(vc); | ||
2281 | return n; | 2317 | return n; |
2282 | #undef FLUSH | 2318 | #undef FLUSH |
2283 | } | 2319 | } |
@@ -2321,6 +2357,7 @@ static void console_callback(struct work_struct *ignored) | |||
2321 | do_blank_screen(0); | 2357 | do_blank_screen(0); |
2322 | blank_timer_expired = 0; | 2358 | blank_timer_expired = 0; |
2323 | } | 2359 | } |
2360 | notify_update(vc_cons[fg_console].d); | ||
2324 | 2361 | ||
2325 | release_console_sem(); | 2362 | release_console_sem(); |
2326 | } | 2363 | } |
@@ -2422,6 +2459,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count) | |||
2422 | continue; | 2459 | continue; |
2423 | } | 2460 | } |
2424 | scr_writew((vc->vc_attr << 8) + c, (unsigned short *)vc->vc_pos); | 2461 | scr_writew((vc->vc_attr << 8) + c, (unsigned short *)vc->vc_pos); |
2462 | notify_write(vc, c); | ||
2425 | cnt++; | 2463 | cnt++; |
2426 | if (myx == vc->vc_cols - 1) { | 2464 | if (myx == vc->vc_cols - 1) { |
2427 | vc->vc_need_wrap = 1; | 2465 | vc->vc_need_wrap = 1; |
@@ -2440,6 +2478,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count) | |||
2440 | } | 2478 | } |
2441 | } | 2479 | } |
2442 | set_cursor(vc); | 2480 | set_cursor(vc); |
2481 | notify_update(vc); | ||
2443 | 2482 | ||
2444 | quit: | 2483 | quit: |
2445 | clear_bit(0, &printing); | 2484 | clear_bit(0, &printing); |
diff --git a/drivers/cpuidle/Kconfig b/drivers/cpuidle/Kconfig new file mode 100644 index 00000000000..3bed4127d4a --- /dev/null +++ b/drivers/cpuidle/Kconfig | |||
@@ -0,0 +1,20 @@ | |||
1 | |||
2 | config CPU_IDLE | ||
3 | bool "CPU idle PM support" | ||
4 | help | ||
5 | CPU idle is a generic framework for supporting software-controlled | ||
6 | idle processor power management. It includes modular cross-platform | ||
7 | governors that can be swapped during runtime. | ||
8 | |||
9 | If you're using a mobile platform that supports CPU idle PM (e.g. | ||
10 | an ACPI-capable notebook), you should say Y here. | ||
11 | |||
12 | config CPU_IDLE_GOV_LADDER | ||
13 | bool | ||
14 | depends on CPU_IDLE | ||
15 | default y | ||
16 | |||
17 | config CPU_IDLE_GOV_MENU | ||
18 | bool | ||
19 | depends on CPU_IDLE && NO_HZ | ||
20 | default y | ||
diff --git a/drivers/cpuidle/Makefile b/drivers/cpuidle/Makefile new file mode 100644 index 00000000000..5634f88379d --- /dev/null +++ b/drivers/cpuidle/Makefile | |||
@@ -0,0 +1,5 @@ | |||
1 | # | ||
2 | # Makefile for cpuidle. | ||
3 | # | ||
4 | |||
5 | obj-y += cpuidle.o driver.o governor.o sysfs.o governors/ | ||
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c new file mode 100644 index 00000000000..fdf4106b817 --- /dev/null +++ b/drivers/cpuidle/cpuidle.c | |||
@@ -0,0 +1,295 @@ | |||
1 | /* | ||
2 | * cpuidle.c - core cpuidle infrastructure | ||
3 | * | ||
4 | * (C) 2006-2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | ||
5 | * Shaohua Li <shaohua.li@intel.com> | ||
6 | * Adam Belay <abelay@novell.com> | ||
7 | * | ||
8 | * This code is licenced under the GPL. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/mutex.h> | ||
13 | #include <linux/sched.h> | ||
14 | #include <linux/notifier.h> | ||
15 | #include <linux/latency.h> | ||
16 | #include <linux/cpu.h> | ||
17 | #include <linux/cpuidle.h> | ||
18 | |||
19 | #include "cpuidle.h" | ||
20 | |||
21 | DEFINE_PER_CPU(struct cpuidle_device *, cpuidle_devices); | ||
22 | EXPORT_PER_CPU_SYMBOL_GPL(cpuidle_devices); | ||
23 | |||
24 | DEFINE_MUTEX(cpuidle_lock); | ||
25 | LIST_HEAD(cpuidle_detected_devices); | ||
26 | static void (*pm_idle_old)(void); | ||
27 | |||
28 | static int enabled_devices; | ||
29 | |||
30 | /** | ||
31 | * cpuidle_idle_call - the main idle loop | ||
32 | * | ||
33 | * NOTE: no locks or semaphores should be used here | ||
34 | */ | ||
35 | static void cpuidle_idle_call(void) | ||
36 | { | ||
37 | struct cpuidle_device *dev = __get_cpu_var(cpuidle_devices); | ||
38 | struct cpuidle_state *target_state; | ||
39 | int next_state; | ||
40 | |||
41 | /* check if the device is ready */ | ||
42 | if (!dev || !dev->enabled) { | ||
43 | if (pm_idle_old) | ||
44 | pm_idle_old(); | ||
45 | else | ||
46 | local_irq_enable(); | ||
47 | return; | ||
48 | } | ||
49 | |||
50 | /* ask the governor for the next state */ | ||
51 | next_state = cpuidle_curr_governor->select(dev); | ||
52 | if (need_resched()) | ||
53 | return; | ||
54 | target_state = &dev->states[next_state]; | ||
55 | |||
56 | /* enter the state and update stats */ | ||
57 | dev->last_residency = target_state->enter(dev, target_state); | ||
58 | dev->last_state = target_state; | ||
59 | target_state->time += dev->last_residency; | ||
60 | target_state->usage++; | ||
61 | |||
62 | /* give the governor an opportunity to reflect on the outcome */ | ||
63 | if (cpuidle_curr_governor->reflect) | ||
64 | cpuidle_curr_governor->reflect(dev); | ||
65 | } | ||
66 | |||
67 | /** | ||
68 | * cpuidle_install_idle_handler - installs the cpuidle idle loop handler | ||
69 | */ | ||
70 | void cpuidle_install_idle_handler(void) | ||
71 | { | ||
72 | if (enabled_devices && (pm_idle != cpuidle_idle_call)) { | ||
73 | /* Make sure all changes finished before we switch to new idle */ | ||
74 | smp_wmb(); | ||
75 | pm_idle = cpuidle_idle_call; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | /** | ||
80 | * cpuidle_uninstall_idle_handler - uninstalls the cpuidle idle loop handler | ||
81 | */ | ||
82 | void cpuidle_uninstall_idle_handler(void) | ||
83 | { | ||
84 | if (enabled_devices && (pm_idle != pm_idle_old)) { | ||
85 | pm_idle = pm_idle_old; | ||
86 | cpu_idle_wait(); | ||
87 | } | ||
88 | } | ||
89 | |||
90 | /** | ||
91 | * cpuidle_pause_and_lock - temporarily disables CPUIDLE | ||
92 | */ | ||
93 | void cpuidle_pause_and_lock(void) | ||
94 | { | ||
95 | mutex_lock(&cpuidle_lock); | ||
96 | cpuidle_uninstall_idle_handler(); | ||
97 | } | ||
98 | |||
99 | EXPORT_SYMBOL_GPL(cpuidle_pause_and_lock); | ||
100 | |||
101 | /** | ||
102 | * cpuidle_resume_and_unlock - resumes CPUIDLE operation | ||
103 | */ | ||
104 | void cpuidle_resume_and_unlock(void) | ||
105 | { | ||
106 | cpuidle_install_idle_handler(); | ||
107 | mutex_unlock(&cpuidle_lock); | ||
108 | } | ||
109 | |||
110 | EXPORT_SYMBOL_GPL(cpuidle_resume_and_unlock); | ||
111 | |||
112 | /** | ||
113 | * cpuidle_enable_device - enables idle PM for a CPU | ||
114 | * @dev: the CPU | ||
115 | * | ||
116 | * This function must be called between cpuidle_pause_and_lock and | ||
117 | * cpuidle_resume_and_unlock when used externally. | ||
118 | */ | ||
119 | int cpuidle_enable_device(struct cpuidle_device *dev) | ||
120 | { | ||
121 | int ret, i; | ||
122 | |||
123 | if (dev->enabled) | ||
124 | return 0; | ||
125 | if (!cpuidle_curr_driver || !cpuidle_curr_governor) | ||
126 | return -EIO; | ||
127 | if (!dev->state_count) | ||
128 | return -EINVAL; | ||
129 | |||
130 | if ((ret = cpuidle_add_state_sysfs(dev))) | ||
131 | return ret; | ||
132 | |||
133 | if (cpuidle_curr_governor->enable && | ||
134 | (ret = cpuidle_curr_governor->enable(dev))) | ||
135 | goto fail_sysfs; | ||
136 | |||
137 | for (i = 0; i < dev->state_count; i++) { | ||
138 | dev->states[i].usage = 0; | ||
139 | dev->states[i].time = 0; | ||
140 | } | ||
141 | dev->last_residency = 0; | ||
142 | dev->last_state = NULL; | ||
143 | |||
144 | smp_wmb(); | ||
145 | |||
146 | dev->enabled = 1; | ||
147 | |||
148 | enabled_devices++; | ||
149 | return 0; | ||
150 | |||
151 | fail_sysfs: | ||
152 | cpuidle_remove_state_sysfs(dev); | ||
153 | |||
154 | return ret; | ||
155 | } | ||
156 | |||
157 | EXPORT_SYMBOL_GPL(cpuidle_enable_device); | ||
158 | |||
159 | /** | ||
160 | * cpuidle_disable_device - disables idle PM for a CPU | ||
161 | * @dev: the CPU | ||
162 | * | ||
163 | * This function must be called between cpuidle_pause_and_lock and | ||
164 | * cpuidle_resume_and_unlock when used externally. | ||
165 | */ | ||
166 | void cpuidle_disable_device(struct cpuidle_device *dev) | ||
167 | { | ||
168 | if (!dev->enabled) | ||
169 | return; | ||
170 | if (!cpuidle_curr_driver || !cpuidle_curr_governor) | ||
171 | return; | ||
172 | |||
173 | dev->enabled = 0; | ||
174 | |||
175 | if (cpuidle_curr_governor->disable) | ||
176 | cpuidle_curr_governor->disable(dev); | ||
177 | |||
178 | cpuidle_remove_state_sysfs(dev); | ||
179 | enabled_devices--; | ||
180 | } | ||
181 | |||
182 | EXPORT_SYMBOL_GPL(cpuidle_disable_device); | ||
183 | |||
184 | /** | ||
185 | * cpuidle_register_device - registers a CPU's idle PM feature | ||
186 | * @dev: the cpu | ||
187 | */ | ||
188 | int cpuidle_register_device(struct cpuidle_device *dev) | ||
189 | { | ||
190 | int ret; | ||
191 | struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu); | ||
192 | |||
193 | if (!sys_dev) | ||
194 | return -EINVAL; | ||
195 | if (!try_module_get(cpuidle_curr_driver->owner)) | ||
196 | return -EINVAL; | ||
197 | |||
198 | init_completion(&dev->kobj_unregister); | ||
199 | |||
200 | mutex_lock(&cpuidle_lock); | ||
201 | |||
202 | per_cpu(cpuidle_devices, dev->cpu) = dev; | ||
203 | list_add(&dev->device_list, &cpuidle_detected_devices); | ||
204 | if ((ret = cpuidle_add_sysfs(sys_dev))) { | ||
205 | mutex_unlock(&cpuidle_lock); | ||
206 | module_put(cpuidle_curr_driver->owner); | ||
207 | return ret; | ||
208 | } | ||
209 | |||
210 | cpuidle_enable_device(dev); | ||
211 | cpuidle_install_idle_handler(); | ||
212 | |||
213 | mutex_unlock(&cpuidle_lock); | ||
214 | |||
215 | return 0; | ||
216 | |||
217 | } | ||
218 | |||
219 | EXPORT_SYMBOL_GPL(cpuidle_register_device); | ||
220 | |||
221 | /** | ||
222 | * cpuidle_unregister_device - unregisters a CPU's idle PM feature | ||
223 | * @dev: the cpu | ||
224 | */ | ||
225 | void cpuidle_unregister_device(struct cpuidle_device *dev) | ||
226 | { | ||
227 | struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu); | ||
228 | |||
229 | cpuidle_pause_and_lock(); | ||
230 | |||
231 | cpuidle_disable_device(dev); | ||
232 | |||
233 | cpuidle_remove_sysfs(sys_dev); | ||
234 | list_del(&dev->device_list); | ||
235 | wait_for_completion(&dev->kobj_unregister); | ||
236 | per_cpu(cpuidle_devices, dev->cpu) = NULL; | ||
237 | |||
238 | cpuidle_resume_and_unlock(); | ||
239 | |||
240 | module_put(cpuidle_curr_driver->owner); | ||
241 | } | ||
242 | |||
243 | EXPORT_SYMBOL_GPL(cpuidle_unregister_device); | ||
244 | |||
245 | #ifdef CONFIG_SMP | ||
246 | |||
247 | static void smp_callback(void *v) | ||
248 | { | ||
249 | /* we already woke the CPU up, nothing more to do */ | ||
250 | } | ||
251 | |||
252 | /* | ||
253 | * This function gets called when a part of the kernel has a new latency | ||
254 | * requirement. This means we need to get all processors out of their C-state, | ||
255 | * and then recalculate a new suitable C-state. Just do a cross-cpu IPI; that | ||
256 | * wakes them all right up. | ||
257 | */ | ||
258 | static int cpuidle_latency_notify(struct notifier_block *b, | ||
259 | unsigned long l, void *v) | ||
260 | { | ||
261 | smp_call_function(smp_callback, NULL, 0, 1); | ||
262 | return NOTIFY_OK; | ||
263 | } | ||
264 | |||
265 | static struct notifier_block cpuidle_latency_notifier = { | ||
266 | .notifier_call = cpuidle_latency_notify, | ||
267 | }; | ||
268 | |||
269 | #define latency_notifier_init(x) do { register_latency_notifier(x); } while (0) | ||
270 | |||
271 | #else /* CONFIG_SMP */ | ||
272 | |||
273 | #define latency_notifier_init(x) do { } while (0) | ||
274 | |||
275 | #endif /* CONFIG_SMP */ | ||
276 | |||
277 | /** | ||
278 | * cpuidle_init - core initializer | ||
279 | */ | ||
280 | static int __init cpuidle_init(void) | ||
281 | { | ||
282 | int ret; | ||
283 | |||
284 | pm_idle_old = pm_idle; | ||
285 | |||
286 | ret = cpuidle_add_class_sysfs(&cpu_sysdev_class); | ||
287 | if (ret) | ||
288 | return ret; | ||
289 | |||
290 | latency_notifier_init(&cpuidle_latency_notifier); | ||
291 | |||
292 | return 0; | ||
293 | } | ||
294 | |||
295 | core_initcall(cpuidle_init); | ||
diff --git a/drivers/cpuidle/cpuidle.h b/drivers/cpuidle/cpuidle.h new file mode 100644 index 00000000000..9476ba33ee2 --- /dev/null +++ b/drivers/cpuidle/cpuidle.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * cpuidle.h - The internal header file | ||
3 | */ | ||
4 | |||
5 | #ifndef __DRIVER_CPUIDLE_H | ||
6 | #define __DRIVER_CPUIDLE_H | ||
7 | |||
8 | #include <linux/sysdev.h> | ||
9 | |||
10 | /* For internal use only */ | ||
11 | extern struct cpuidle_governor *cpuidle_curr_governor; | ||
12 | extern struct cpuidle_driver *cpuidle_curr_driver; | ||
13 | extern struct list_head cpuidle_governors; | ||
14 | extern struct list_head cpuidle_detected_devices; | ||
15 | extern struct mutex cpuidle_lock; | ||
16 | extern spinlock_t cpuidle_driver_lock; | ||
17 | |||
18 | /* idle loop */ | ||
19 | extern void cpuidle_install_idle_handler(void); | ||
20 | extern void cpuidle_uninstall_idle_handler(void); | ||
21 | |||
22 | /* governors */ | ||
23 | extern int cpuidle_switch_governor(struct cpuidle_governor *gov); | ||
24 | |||
25 | /* sysfs */ | ||
26 | extern int cpuidle_add_class_sysfs(struct sysdev_class *cls); | ||
27 | extern void cpuidle_remove_class_sysfs(struct sysdev_class *cls); | ||
28 | extern int cpuidle_add_state_sysfs(struct cpuidle_device *device); | ||
29 | extern void cpuidle_remove_state_sysfs(struct cpuidle_device *device); | ||
30 | extern int cpuidle_add_sysfs(struct sys_device *sysdev); | ||
31 | extern void cpuidle_remove_sysfs(struct sys_device *sysdev); | ||
32 | |||
33 | #endif /* __DRIVER_CPUIDLE_H */ | ||
diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c new file mode 100644 index 00000000000..2257004fe33 --- /dev/null +++ b/drivers/cpuidle/driver.c | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * driver.c - driver support | ||
3 | * | ||
4 | * (C) 2006-2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | ||
5 | * Shaohua Li <shaohua.li@intel.com> | ||
6 | * Adam Belay <abelay@novell.com> | ||
7 | * | ||
8 | * This code is licenced under the GPL. | ||
9 | */ | ||
10 | |||
11 | #include <linux/mutex.h> | ||
12 | #include <linux/module.h> | ||
13 | #include <linux/cpuidle.h> | ||
14 | |||
15 | #include "cpuidle.h" | ||
16 | |||
17 | struct cpuidle_driver *cpuidle_curr_driver; | ||
18 | DEFINE_SPINLOCK(cpuidle_driver_lock); | ||
19 | |||
20 | /** | ||
21 | * cpuidle_register_driver - registers a driver | ||
22 | * @drv: the driver | ||
23 | */ | ||
24 | int cpuidle_register_driver(struct cpuidle_driver *drv) | ||
25 | { | ||
26 | if (!drv) | ||
27 | return -EINVAL; | ||
28 | |||
29 | spin_lock(&cpuidle_driver_lock); | ||
30 | if (cpuidle_curr_driver) { | ||
31 | spin_unlock(&cpuidle_driver_lock); | ||
32 | return -EBUSY; | ||
33 | } | ||
34 | cpuidle_curr_driver = drv; | ||
35 | spin_unlock(&cpuidle_driver_lock); | ||
36 | |||
37 | return 0; | ||
38 | } | ||
39 | |||
40 | EXPORT_SYMBOL_GPL(cpuidle_register_driver); | ||
41 | |||
42 | /** | ||
43 | * cpuidle_unregister_driver - unregisters a driver | ||
44 | * @drv: the driver | ||
45 | */ | ||
46 | void cpuidle_unregister_driver(struct cpuidle_driver *drv) | ||
47 | { | ||
48 | if (!drv) | ||
49 | return; | ||
50 | |||
51 | spin_lock(&cpuidle_driver_lock); | ||
52 | cpuidle_curr_driver = NULL; | ||
53 | spin_unlock(&cpuidle_driver_lock); | ||
54 | } | ||
55 | |||
56 | EXPORT_SYMBOL_GPL(cpuidle_unregister_driver); | ||
diff --git a/drivers/cpuidle/governor.c b/drivers/cpuidle/governor.c new file mode 100644 index 00000000000..bb699cb2dc5 --- /dev/null +++ b/drivers/cpuidle/governor.c | |||
@@ -0,0 +1,141 @@ | |||
1 | /* | ||
2 | * governor.c - governor support | ||
3 | * | ||
4 | * (C) 2006-2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | ||
5 | * Shaohua Li <shaohua.li@intel.com> | ||
6 | * Adam Belay <abelay@novell.com> | ||
7 | * | ||
8 | * This code is licenced under the GPL. | ||
9 | */ | ||
10 | |||
11 | #include <linux/mutex.h> | ||
12 | #include <linux/module.h> | ||
13 | #include <linux/cpuidle.h> | ||
14 | |||
15 | #include "cpuidle.h" | ||
16 | |||
17 | LIST_HEAD(cpuidle_governors); | ||
18 | struct cpuidle_governor *cpuidle_curr_governor; | ||
19 | |||
20 | /** | ||
21 | * __cpuidle_find_governor - finds a governor of the specified name | ||
22 | * @str: the name | ||
23 | * | ||
24 | * Must be called with cpuidle_lock aquired. | ||
25 | */ | ||
26 | static struct cpuidle_governor * __cpuidle_find_governor(const char *str) | ||
27 | { | ||
28 | struct cpuidle_governor *gov; | ||
29 | |||
30 | list_for_each_entry(gov, &cpuidle_governors, governor_list) | ||
31 | if (!strnicmp(str, gov->name, CPUIDLE_NAME_LEN)) | ||
32 | return gov; | ||
33 | |||
34 | return NULL; | ||
35 | } | ||
36 | |||
37 | /** | ||
38 | * cpuidle_switch_governor - changes the governor | ||
39 | * @gov: the new target governor | ||
40 | * | ||
41 | * NOTE: "gov" can be NULL to specify disabled | ||
42 | * Must be called with cpuidle_lock aquired. | ||
43 | */ | ||
44 | int cpuidle_switch_governor(struct cpuidle_governor *gov) | ||
45 | { | ||
46 | struct cpuidle_device *dev; | ||
47 | |||
48 | if (gov == cpuidle_curr_governor) | ||
49 | return 0; | ||
50 | |||
51 | cpuidle_uninstall_idle_handler(); | ||
52 | |||
53 | if (cpuidle_curr_governor) { | ||
54 | list_for_each_entry(dev, &cpuidle_detected_devices, device_list) | ||
55 | cpuidle_disable_device(dev); | ||
56 | module_put(cpuidle_curr_governor->owner); | ||
57 | } | ||
58 | |||
59 | cpuidle_curr_governor = gov; | ||
60 | |||
61 | if (gov) { | ||
62 | if (!try_module_get(cpuidle_curr_governor->owner)) | ||
63 | return -EINVAL; | ||
64 | list_for_each_entry(dev, &cpuidle_detected_devices, device_list) | ||
65 | cpuidle_enable_device(dev); | ||
66 | cpuidle_install_idle_handler(); | ||
67 | printk(KERN_INFO "cpuidle: using governor %s\n", gov->name); | ||
68 | } | ||
69 | |||
70 | return 0; | ||
71 | } | ||
72 | |||
73 | /** | ||
74 | * cpuidle_register_governor - registers a governor | ||
75 | * @gov: the governor | ||
76 | */ | ||
77 | int cpuidle_register_governor(struct cpuidle_governor *gov) | ||
78 | { | ||
79 | int ret = -EEXIST; | ||
80 | |||
81 | if (!gov || !gov->select) | ||
82 | return -EINVAL; | ||
83 | |||
84 | mutex_lock(&cpuidle_lock); | ||
85 | if (__cpuidle_find_governor(gov->name) == NULL) { | ||
86 | ret = 0; | ||
87 | list_add_tail(&gov->governor_list, &cpuidle_governors); | ||
88 | if (!cpuidle_curr_governor || | ||
89 | cpuidle_curr_governor->rating < gov->rating) | ||
90 | cpuidle_switch_governor(gov); | ||
91 | } | ||
92 | mutex_unlock(&cpuidle_lock); | ||
93 | |||
94 | return ret; | ||
95 | } | ||
96 | |||
97 | EXPORT_SYMBOL_GPL(cpuidle_register_governor); | ||
98 | |||
99 | /** | ||
100 | * cpuidle_replace_governor - find a replacement governor | ||
101 | * @exclude_rating: the rating that will be skipped while looking for | ||
102 | * new governor. | ||
103 | */ | ||
104 | static struct cpuidle_governor *cpuidle_replace_governor(int exclude_rating) | ||
105 | { | ||
106 | struct cpuidle_governor *gov; | ||
107 | struct cpuidle_governor *ret_gov = NULL; | ||
108 | unsigned int max_rating = 0; | ||
109 | |||
110 | list_for_each_entry(gov, &cpuidle_governors, governor_list) { | ||
111 | if (gov->rating == exclude_rating) | ||
112 | continue; | ||
113 | if (gov->rating > max_rating) { | ||
114 | max_rating = gov->rating; | ||
115 | ret_gov = gov; | ||
116 | } | ||
117 | } | ||
118 | |||
119 | return ret_gov; | ||
120 | } | ||
121 | |||
122 | /** | ||
123 | * cpuidle_unregister_governor - unregisters a governor | ||
124 | * @gov: the governor | ||
125 | */ | ||
126 | void cpuidle_unregister_governor(struct cpuidle_governor *gov) | ||
127 | { | ||
128 | if (!gov) | ||
129 | return; | ||
130 | |||
131 | mutex_lock(&cpuidle_lock); | ||
132 | if (gov == cpuidle_curr_governor) { | ||
133 | struct cpuidle_governor *new_gov; | ||
134 | new_gov = cpuidle_replace_governor(gov->rating); | ||
135 | cpuidle_switch_governor(new_gov); | ||
136 | } | ||
137 | list_del(&gov->governor_list); | ||
138 | mutex_unlock(&cpuidle_lock); | ||
139 | } | ||
140 | |||
141 | EXPORT_SYMBOL_GPL(cpuidle_unregister_governor); | ||
diff --git a/drivers/cpuidle/governors/Makefile b/drivers/cpuidle/governors/Makefile new file mode 100644 index 00000000000..1b512722689 --- /dev/null +++ b/drivers/cpuidle/governors/Makefile | |||
@@ -0,0 +1,6 @@ | |||
1 | # | ||
2 | # Makefile for cpuidle governors. | ||
3 | # | ||
4 | |||
5 | obj-$(CONFIG_CPU_IDLE_GOV_LADDER) += ladder.o | ||
6 | obj-$(CONFIG_CPU_IDLE_GOV_MENU) += menu.o | ||
diff --git a/drivers/cpuidle/governors/ladder.c b/drivers/cpuidle/governors/ladder.c new file mode 100644 index 00000000000..eb666ecae7c --- /dev/null +++ b/drivers/cpuidle/governors/ladder.c | |||
@@ -0,0 +1,166 @@ | |||
1 | /* | ||
2 | * ladder.c - the residency ladder algorithm | ||
3 | * | ||
4 | * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> | ||
5 | * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> | ||
6 | * Copyright (C) 2004, 2005 Dominik Brodowski <linux@brodo.de> | ||
7 | * | ||
8 | * (C) 2006-2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | ||
9 | * Shaohua Li <shaohua.li@intel.com> | ||
10 | * Adam Belay <abelay@novell.com> | ||
11 | * | ||
12 | * This code is licenced under the GPL. | ||
13 | */ | ||
14 | |||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/cpuidle.h> | ||
17 | #include <linux/latency.h> | ||
18 | #include <linux/moduleparam.h> | ||
19 | #include <linux/jiffies.h> | ||
20 | |||
21 | #include <asm/io.h> | ||
22 | #include <asm/uaccess.h> | ||
23 | |||
24 | #define PROMOTION_COUNT 4 | ||
25 | #define DEMOTION_COUNT 1 | ||
26 | |||
27 | struct ladder_device_state { | ||
28 | struct { | ||
29 | u32 promotion_count; | ||
30 | u32 demotion_count; | ||
31 | u32 promotion_time; | ||
32 | u32 demotion_time; | ||
33 | } threshold; | ||
34 | struct { | ||
35 | int promotion_count; | ||
36 | int demotion_count; | ||
37 | } stats; | ||
38 | }; | ||
39 | |||
40 | struct ladder_device { | ||
41 | struct ladder_device_state states[CPUIDLE_STATE_MAX]; | ||
42 | int last_state_idx; | ||
43 | }; | ||
44 | |||
45 | static DEFINE_PER_CPU(struct ladder_device, ladder_devices); | ||
46 | |||
47 | /** | ||
48 | * ladder_do_selection - prepares private data for a state change | ||
49 | * @ldev: the ladder device | ||
50 | * @old_idx: the current state index | ||
51 | * @new_idx: the new target state index | ||
52 | */ | ||
53 | static inline void ladder_do_selection(struct ladder_device *ldev, | ||
54 | int old_idx, int new_idx) | ||
55 | { | ||
56 | ldev->states[old_idx].stats.promotion_count = 0; | ||
57 | ldev->states[old_idx].stats.demotion_count = 0; | ||
58 | ldev->last_state_idx = new_idx; | ||
59 | } | ||
60 | |||
61 | /** | ||
62 | * ladder_select_state - selects the next state to enter | ||
63 | * @dev: the CPU | ||
64 | */ | ||
65 | static int ladder_select_state(struct cpuidle_device *dev) | ||
66 | { | ||
67 | struct ladder_device *ldev = &__get_cpu_var(ladder_devices); | ||
68 | struct ladder_device_state *last_state; | ||
69 | int last_residency, last_idx = ldev->last_state_idx; | ||
70 | |||
71 | if (unlikely(!ldev)) | ||
72 | return 0; | ||
73 | |||
74 | last_state = &ldev->states[last_idx]; | ||
75 | |||
76 | if (dev->states[last_idx].flags & CPUIDLE_FLAG_TIME_VALID) | ||
77 | last_residency = cpuidle_get_last_residency(dev) - dev->states[last_idx].exit_latency; | ||
78 | else | ||
79 | last_residency = last_state->threshold.promotion_time + 1; | ||
80 | |||
81 | /* consider promotion */ | ||
82 | if (last_idx < dev->state_count - 1 && | ||
83 | last_residency > last_state->threshold.promotion_time && | ||
84 | dev->states[last_idx + 1].exit_latency <= system_latency_constraint()) { | ||
85 | last_state->stats.promotion_count++; | ||
86 | last_state->stats.demotion_count = 0; | ||
87 | if (last_state->stats.promotion_count >= last_state->threshold.promotion_count) { | ||
88 | ladder_do_selection(ldev, last_idx, last_idx + 1); | ||
89 | return last_idx + 1; | ||
90 | } | ||
91 | } | ||
92 | |||
93 | /* consider demotion */ | ||
94 | if (last_idx > 0 && | ||
95 | last_residency < last_state->threshold.demotion_time) { | ||
96 | last_state->stats.demotion_count++; | ||
97 | last_state->stats.promotion_count = 0; | ||
98 | if (last_state->stats.demotion_count >= last_state->threshold.demotion_count) { | ||
99 | ladder_do_selection(ldev, last_idx, last_idx - 1); | ||
100 | return last_idx - 1; | ||
101 | } | ||
102 | } | ||
103 | |||
104 | /* otherwise remain at the current state */ | ||
105 | return last_idx; | ||
106 | } | ||
107 | |||
108 | /** | ||
109 | * ladder_enable_device - setup for the governor | ||
110 | * @dev: the CPU | ||
111 | */ | ||
112 | static int ladder_enable_device(struct cpuidle_device *dev) | ||
113 | { | ||
114 | int i; | ||
115 | struct ladder_device *ldev = &per_cpu(ladder_devices, dev->cpu); | ||
116 | struct ladder_device_state *lstate; | ||
117 | struct cpuidle_state *state; | ||
118 | |||
119 | ldev->last_state_idx = 0; | ||
120 | |||
121 | for (i = 0; i < dev->state_count; i++) { | ||
122 | state = &dev->states[i]; | ||
123 | lstate = &ldev->states[i]; | ||
124 | |||
125 | lstate->stats.promotion_count = 0; | ||
126 | lstate->stats.demotion_count = 0; | ||
127 | |||
128 | lstate->threshold.promotion_count = PROMOTION_COUNT; | ||
129 | lstate->threshold.demotion_count = DEMOTION_COUNT; | ||
130 | |||
131 | if (i < dev->state_count - 1) | ||
132 | lstate->threshold.promotion_time = state->exit_latency; | ||
133 | if (i > 0) | ||
134 | lstate->threshold.demotion_time = state->exit_latency; | ||
135 | } | ||
136 | |||
137 | return 0; | ||
138 | } | ||
139 | |||
140 | static struct cpuidle_governor ladder_governor = { | ||
141 | .name = "ladder", | ||
142 | .rating = 10, | ||
143 | .enable = ladder_enable_device, | ||
144 | .select = ladder_select_state, | ||
145 | .owner = THIS_MODULE, | ||
146 | }; | ||
147 | |||
148 | /** | ||
149 | * init_ladder - initializes the governor | ||
150 | */ | ||
151 | static int __init init_ladder(void) | ||
152 | { | ||
153 | return cpuidle_register_governor(&ladder_governor); | ||
154 | } | ||
155 | |||
156 | /** | ||
157 | * exit_ladder - exits the governor | ||
158 | */ | ||
159 | static void __exit exit_ladder(void) | ||
160 | { | ||
161 | cpuidle_unregister_governor(&ladder_governor); | ||
162 | } | ||
163 | |||
164 | MODULE_LICENSE("GPL"); | ||
165 | module_init(init_ladder); | ||
166 | module_exit(exit_ladder); | ||
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c new file mode 100644 index 00000000000..299d45c3bdd --- /dev/null +++ b/drivers/cpuidle/governors/menu.c | |||
@@ -0,0 +1,137 @@ | |||
1 | /* | ||
2 | * menu.c - the menu idle governor | ||
3 | * | ||
4 | * Copyright (C) 2006-2007 Adam Belay <abelay@novell.com> | ||
5 | * | ||
6 | * This code is licenced under the GPL. | ||
7 | */ | ||
8 | |||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/cpuidle.h> | ||
11 | #include <linux/latency.h> | ||
12 | #include <linux/time.h> | ||
13 | #include <linux/ktime.h> | ||
14 | #include <linux/hrtimer.h> | ||
15 | #include <linux/tick.h> | ||
16 | |||
17 | #define BREAK_FUZZ 4 /* 4 us */ | ||
18 | |||
19 | struct menu_device { | ||
20 | int last_state_idx; | ||
21 | |||
22 | unsigned int expected_us; | ||
23 | unsigned int predicted_us; | ||
24 | unsigned int last_measured_us; | ||
25 | unsigned int elapsed_us; | ||
26 | }; | ||
27 | |||
28 | static DEFINE_PER_CPU(struct menu_device, menu_devices); | ||
29 | |||
30 | /** | ||
31 | * menu_select - selects the next idle state to enter | ||
32 | * @dev: the CPU | ||
33 | */ | ||
34 | static int menu_select(struct cpuidle_device *dev) | ||
35 | { | ||
36 | struct menu_device *data = &__get_cpu_var(menu_devices); | ||
37 | int i; | ||
38 | |||
39 | /* determine the expected residency time */ | ||
40 | data->expected_us = | ||
41 | (u32) ktime_to_ns(tick_nohz_get_sleep_length()) / 1000; | ||
42 | |||
43 | /* find the deepest idle state that satisfies our constraints */ | ||
44 | for (i = 1; i < dev->state_count; i++) { | ||
45 | struct cpuidle_state *s = &dev->states[i]; | ||
46 | |||
47 | if (s->target_residency > data->expected_us) | ||
48 | break; | ||
49 | if (s->target_residency > data->predicted_us) | ||
50 | break; | ||
51 | if (s->exit_latency > system_latency_constraint()) | ||
52 | break; | ||
53 | } | ||
54 | |||
55 | data->last_state_idx = i - 1; | ||
56 | return i - 1; | ||
57 | } | ||
58 | |||
59 | /** | ||
60 | * menu_reflect - attempts to guess what happened after entry | ||
61 | * @dev: the CPU | ||
62 | * | ||
63 | * NOTE: it's important to be fast here because this operation will add to | ||
64 | * the overall exit latency. | ||
65 | */ | ||
66 | static void menu_reflect(struct cpuidle_device *dev) | ||
67 | { | ||
68 | struct menu_device *data = &__get_cpu_var(menu_devices); | ||
69 | int last_idx = data->last_state_idx; | ||
70 | unsigned int measured_us = | ||
71 | cpuidle_get_last_residency(dev) + data->elapsed_us; | ||
72 | struct cpuidle_state *target = &dev->states[last_idx]; | ||
73 | |||
74 | /* | ||
75 | * Ugh, this idle state doesn't support residency measurements, so we | ||
76 | * are basically lost in the dark. As a compromise, assume we slept | ||
77 | * for one full standard timer tick. However, be aware that this | ||
78 | * could potentially result in a suboptimal state transition. | ||
79 | */ | ||
80 | if (!(target->flags & CPUIDLE_FLAG_TIME_VALID)) | ||
81 | measured_us = USEC_PER_SEC / HZ; | ||
82 | |||
83 | /* Predict time remaining until next break event */ | ||
84 | if (measured_us + BREAK_FUZZ < data->expected_us - target->exit_latency) { | ||
85 | data->predicted_us = max(measured_us, data->last_measured_us); | ||
86 | data->last_measured_us = measured_us; | ||
87 | data->elapsed_us = 0; | ||
88 | } else { | ||
89 | if (data->elapsed_us < data->elapsed_us + measured_us) | ||
90 | data->elapsed_us = measured_us; | ||
91 | else | ||
92 | data->elapsed_us = -1; | ||
93 | data->predicted_us = max(measured_us, data->last_measured_us); | ||
94 | } | ||
95 | } | ||
96 | |||
97 | /** | ||
98 | * menu_enable_device - scans a CPU's states and does setup | ||
99 | * @dev: the CPU | ||
100 | */ | ||
101 | static int menu_enable_device(struct cpuidle_device *dev) | ||
102 | { | ||
103 | struct menu_device *data = &per_cpu(menu_devices, dev->cpu); | ||
104 | |||
105 | memset(data, 0, sizeof(struct menu_device)); | ||
106 | |||
107 | return 0; | ||
108 | } | ||
109 | |||
110 | static struct cpuidle_governor menu_governor = { | ||
111 | .name = "menu", | ||
112 | .rating = 20, | ||
113 | .enable = menu_enable_device, | ||
114 | .select = menu_select, | ||
115 | .reflect = menu_reflect, | ||
116 | .owner = THIS_MODULE, | ||
117 | }; | ||
118 | |||
119 | /** | ||
120 | * init_menu - initializes the governor | ||
121 | */ | ||
122 | static int __init init_menu(void) | ||
123 | { | ||
124 | return cpuidle_register_governor(&menu_governor); | ||
125 | } | ||
126 | |||
127 | /** | ||
128 | * exit_menu - exits the governor | ||
129 | */ | ||
130 | static void __exit exit_menu(void) | ||
131 | { | ||
132 | cpuidle_unregister_governor(&menu_governor); | ||
133 | } | ||
134 | |||
135 | MODULE_LICENSE("GPL"); | ||
136 | module_init(init_menu); | ||
137 | module_exit(exit_menu); | ||
diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c new file mode 100644 index 00000000000..0f3515e77d4 --- /dev/null +++ b/drivers/cpuidle/sysfs.c | |||
@@ -0,0 +1,361 @@ | |||
1 | /* | ||
2 | * sysfs.c - sysfs support | ||
3 | * | ||
4 | * (C) 2006-2007 Shaohua Li <shaohua.li@intel.com> | ||
5 | * | ||
6 | * This code is licenced under the GPL. | ||
7 | */ | ||
8 | |||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/cpuidle.h> | ||
11 | #include <linux/sysfs.h> | ||
12 | #include <linux/cpu.h> | ||
13 | |||
14 | #include "cpuidle.h" | ||
15 | |||
16 | static unsigned int sysfs_switch; | ||
17 | static int __init cpuidle_sysfs_setup(char *unused) | ||
18 | { | ||
19 | sysfs_switch = 1; | ||
20 | return 1; | ||
21 | } | ||
22 | __setup("cpuidle_sysfs_switch", cpuidle_sysfs_setup); | ||
23 | |||
24 | static ssize_t show_available_governors(struct sys_device *dev, char *buf) | ||
25 | { | ||
26 | ssize_t i = 0; | ||
27 | struct cpuidle_governor *tmp; | ||
28 | |||
29 | mutex_lock(&cpuidle_lock); | ||
30 | list_for_each_entry(tmp, &cpuidle_governors, governor_list) { | ||
31 | if (i >= (ssize_t) ((PAGE_SIZE/sizeof(char)) - CPUIDLE_NAME_LEN - 2)) | ||
32 | goto out; | ||
33 | i += scnprintf(&buf[i], CPUIDLE_NAME_LEN, "%s ", tmp->name); | ||
34 | } | ||
35 | |||
36 | out: | ||
37 | i+= sprintf(&buf[i], "\n"); | ||
38 | mutex_unlock(&cpuidle_lock); | ||
39 | return i; | ||
40 | } | ||
41 | |||
42 | static ssize_t show_current_driver(struct sys_device *dev, char *buf) | ||
43 | { | ||
44 | ssize_t ret; | ||
45 | |||
46 | spin_lock(&cpuidle_driver_lock); | ||
47 | if (cpuidle_curr_driver) | ||
48 | ret = sprintf(buf, "%s\n", cpuidle_curr_driver->name); | ||
49 | else | ||
50 | ret = sprintf(buf, "none\n"); | ||
51 | spin_unlock(&cpuidle_driver_lock); | ||
52 | |||
53 | return ret; | ||
54 | } | ||
55 | |||
56 | static ssize_t show_current_governor(struct sys_device *dev, char *buf) | ||
57 | { | ||
58 | ssize_t ret; | ||
59 | |||
60 | mutex_lock(&cpuidle_lock); | ||
61 | if (cpuidle_curr_governor) | ||
62 | ret = sprintf(buf, "%s\n", cpuidle_curr_governor->name); | ||
63 | else | ||
64 | ret = sprintf(buf, "none\n"); | ||
65 | mutex_unlock(&cpuidle_lock); | ||
66 | |||
67 | return ret; | ||
68 | } | ||
69 | |||
70 | static ssize_t store_current_governor(struct sys_device *dev, | ||
71 | const char *buf, size_t count) | ||
72 | { | ||
73 | char gov_name[CPUIDLE_NAME_LEN]; | ||
74 | int ret = -EINVAL; | ||
75 | size_t len = count; | ||
76 | struct cpuidle_governor *gov; | ||
77 | |||
78 | if (!len || len >= sizeof(gov_name)) | ||
79 | return -EINVAL; | ||
80 | |||
81 | memcpy(gov_name, buf, len); | ||
82 | gov_name[len] = '\0'; | ||
83 | if (gov_name[len - 1] == '\n') | ||
84 | gov_name[--len] = '\0'; | ||
85 | |||
86 | mutex_lock(&cpuidle_lock); | ||
87 | |||
88 | list_for_each_entry(gov, &cpuidle_governors, governor_list) { | ||
89 | if (strlen(gov->name) == len && !strcmp(gov->name, gov_name)) { | ||
90 | ret = cpuidle_switch_governor(gov); | ||
91 | break; | ||
92 | } | ||
93 | } | ||
94 | |||
95 | mutex_unlock(&cpuidle_lock); | ||
96 | |||
97 | if (ret) | ||
98 | return ret; | ||
99 | else | ||
100 | return count; | ||
101 | } | ||
102 | |||
103 | static SYSDEV_ATTR(current_driver, 0444, show_current_driver, NULL); | ||
104 | static SYSDEV_ATTR(current_governor_ro, 0444, show_current_governor, NULL); | ||
105 | |||
106 | static struct attribute *cpuclass_default_attrs[] = { | ||
107 | &attr_current_driver.attr, | ||
108 | &attr_current_governor_ro.attr, | ||
109 | NULL | ||
110 | }; | ||
111 | |||
112 | static SYSDEV_ATTR(available_governors, 0444, show_available_governors, NULL); | ||
113 | static SYSDEV_ATTR(current_governor, 0644, show_current_governor, | ||
114 | store_current_governor); | ||
115 | |||
116 | static struct attribute *cpuclass_switch_attrs[] = { | ||
117 | &attr_available_governors.attr, | ||
118 | &attr_current_driver.attr, | ||
119 | &attr_current_governor.attr, | ||
120 | NULL | ||
121 | }; | ||
122 | |||
123 | static struct attribute_group cpuclass_attr_group = { | ||
124 | .attrs = cpuclass_default_attrs, | ||
125 | .name = "cpuidle", | ||
126 | }; | ||
127 | |||
128 | /** | ||
129 | * cpuidle_add_class_sysfs - add CPU global sysfs attributes | ||
130 | */ | ||
131 | int cpuidle_add_class_sysfs(struct sysdev_class *cls) | ||
132 | { | ||
133 | if (sysfs_switch) | ||
134 | cpuclass_attr_group.attrs = cpuclass_switch_attrs; | ||
135 | |||
136 | return sysfs_create_group(&cls->kset.kobj, &cpuclass_attr_group); | ||
137 | } | ||
138 | |||
139 | /** | ||
140 | * cpuidle_remove_class_sysfs - remove CPU global sysfs attributes | ||
141 | */ | ||
142 | void cpuidle_remove_class_sysfs(struct sysdev_class *cls) | ||
143 | { | ||
144 | sysfs_remove_group(&cls->kset.kobj, &cpuclass_attr_group); | ||
145 | } | ||
146 | |||
147 | struct cpuidle_attr { | ||
148 | struct attribute attr; | ||
149 | ssize_t (*show)(struct cpuidle_device *, char *); | ||
150 | ssize_t (*store)(struct cpuidle_device *, const char *, size_t count); | ||
151 | }; | ||
152 | |||
153 | #define define_one_ro(_name, show) \ | ||
154 | static struct cpuidle_attr attr_##_name = __ATTR(_name, 0444, show, NULL) | ||
155 | #define define_one_rw(_name, show, store) \ | ||
156 | static struct cpuidle_attr attr_##_name = __ATTR(_name, 0644, show, store) | ||
157 | |||
158 | #define kobj_to_cpuidledev(k) container_of(k, struct cpuidle_device, kobj) | ||
159 | #define attr_to_cpuidleattr(a) container_of(a, struct cpuidle_attr, attr) | ||
160 | static ssize_t cpuidle_show(struct kobject * kobj, struct attribute * attr ,char * buf) | ||
161 | { | ||
162 | int ret = -EIO; | ||
163 | struct cpuidle_device *dev = kobj_to_cpuidledev(kobj); | ||
164 | struct cpuidle_attr * cattr = attr_to_cpuidleattr(attr); | ||
165 | |||
166 | if (cattr->show) { | ||
167 | mutex_lock(&cpuidle_lock); | ||
168 | ret = cattr->show(dev, buf); | ||
169 | mutex_unlock(&cpuidle_lock); | ||
170 | } | ||
171 | return ret; | ||
172 | } | ||
173 | |||
174 | static ssize_t cpuidle_store(struct kobject * kobj, struct attribute * attr, | ||
175 | const char * buf, size_t count) | ||
176 | { | ||
177 | int ret = -EIO; | ||
178 | struct cpuidle_device *dev = kobj_to_cpuidledev(kobj); | ||
179 | struct cpuidle_attr * cattr = attr_to_cpuidleattr(attr); | ||
180 | |||
181 | if (cattr->store) { | ||
182 | mutex_lock(&cpuidle_lock); | ||
183 | ret = cattr->store(dev, buf, count); | ||
184 | mutex_unlock(&cpuidle_lock); | ||
185 | } | ||
186 | return ret; | ||
187 | } | ||
188 | |||
189 | static struct sysfs_ops cpuidle_sysfs_ops = { | ||
190 | .show = cpuidle_show, | ||
191 | .store = cpuidle_store, | ||
192 | }; | ||
193 | |||
194 | static void cpuidle_sysfs_release(struct kobject *kobj) | ||
195 | { | ||
196 | struct cpuidle_device *dev = kobj_to_cpuidledev(kobj); | ||
197 | |||
198 | complete(&dev->kobj_unregister); | ||
199 | } | ||
200 | |||
201 | static struct kobj_type ktype_cpuidle = { | ||
202 | .sysfs_ops = &cpuidle_sysfs_ops, | ||
203 | .release = cpuidle_sysfs_release, | ||
204 | }; | ||
205 | |||
206 | struct cpuidle_state_attr { | ||
207 | struct attribute attr; | ||
208 | ssize_t (*show)(struct cpuidle_state *, char *); | ||
209 | ssize_t (*store)(struct cpuidle_state *, const char *, size_t); | ||
210 | }; | ||
211 | |||
212 | #define define_one_state_ro(_name, show) \ | ||
213 | static struct cpuidle_state_attr attr_##_name = __ATTR(_name, 0444, show, NULL) | ||
214 | |||
215 | #define define_show_state_function(_name) \ | ||
216 | static ssize_t show_state_##_name(struct cpuidle_state *state, char *buf) \ | ||
217 | { \ | ||
218 | return sprintf(buf, "%u\n", state->_name);\ | ||
219 | } | ||
220 | |||
221 | static ssize_t show_state_name(struct cpuidle_state *state, char *buf) | ||
222 | { | ||
223 | return sprintf(buf, "%s\n", state->name); | ||
224 | } | ||
225 | |||
226 | define_show_state_function(exit_latency) | ||
227 | define_show_state_function(power_usage) | ||
228 | define_show_state_function(usage) | ||
229 | define_show_state_function(time) | ||
230 | define_one_state_ro(name, show_state_name); | ||
231 | define_one_state_ro(latency, show_state_exit_latency); | ||
232 | define_one_state_ro(power, show_state_power_usage); | ||
233 | define_one_state_ro(usage, show_state_usage); | ||
234 | define_one_state_ro(time, show_state_time); | ||
235 | |||
236 | static struct attribute *cpuidle_state_default_attrs[] = { | ||
237 | &attr_name.attr, | ||
238 | &attr_latency.attr, | ||
239 | &attr_power.attr, | ||
240 | &attr_usage.attr, | ||
241 | &attr_time.attr, | ||
242 | NULL | ||
243 | }; | ||
244 | |||
245 | #define kobj_to_state_obj(k) container_of(k, struct cpuidle_state_kobj, kobj) | ||
246 | #define kobj_to_state(k) (kobj_to_state_obj(k)->state) | ||
247 | #define attr_to_stateattr(a) container_of(a, struct cpuidle_state_attr, attr) | ||
248 | static ssize_t cpuidle_state_show(struct kobject * kobj, | ||
249 | struct attribute * attr ,char * buf) | ||
250 | { | ||
251 | int ret = -EIO; | ||
252 | struct cpuidle_state *state = kobj_to_state(kobj); | ||
253 | struct cpuidle_state_attr * cattr = attr_to_stateattr(attr); | ||
254 | |||
255 | if (cattr->show) | ||
256 | ret = cattr->show(state, buf); | ||
257 | |||
258 | return ret; | ||
259 | } | ||
260 | |||
261 | static struct sysfs_ops cpuidle_state_sysfs_ops = { | ||
262 | .show = cpuidle_state_show, | ||
263 | }; | ||
264 | |||
265 | static void cpuidle_state_sysfs_release(struct kobject *kobj) | ||
266 | { | ||
267 | struct cpuidle_state_kobj *state_obj = kobj_to_state_obj(kobj); | ||
268 | |||
269 | complete(&state_obj->kobj_unregister); | ||
270 | } | ||
271 | |||
272 | static struct kobj_type ktype_state_cpuidle = { | ||
273 | .sysfs_ops = &cpuidle_state_sysfs_ops, | ||
274 | .default_attrs = cpuidle_state_default_attrs, | ||
275 | .release = cpuidle_state_sysfs_release, | ||
276 | }; | ||
277 | |||
278 | static void inline cpuidle_free_state_kobj(struct cpuidle_device *device, int i) | ||
279 | { | ||
280 | kobject_unregister(&device->kobjs[i]->kobj); | ||
281 | wait_for_completion(&device->kobjs[i]->kobj_unregister); | ||
282 | kfree(device->kobjs[i]); | ||
283 | device->kobjs[i] = NULL; | ||
284 | } | ||
285 | |||
286 | /** | ||
287 | * cpuidle_add_driver_sysfs - adds driver-specific sysfs attributes | ||
288 | * @device: the target device | ||
289 | */ | ||
290 | int cpuidle_add_state_sysfs(struct cpuidle_device *device) | ||
291 | { | ||
292 | int i, ret = -ENOMEM; | ||
293 | struct cpuidle_state_kobj *kobj; | ||
294 | |||
295 | /* state statistics */ | ||
296 | for (i = 0; i < device->state_count; i++) { | ||
297 | kobj = kzalloc(sizeof(struct cpuidle_state_kobj), GFP_KERNEL); | ||
298 | if (!kobj) | ||
299 | goto error_state; | ||
300 | kobj->state = &device->states[i]; | ||
301 | init_completion(&kobj->kobj_unregister); | ||
302 | |||
303 | kobj->kobj.parent = &device->kobj; | ||
304 | kobj->kobj.ktype = &ktype_state_cpuidle; | ||
305 | kobject_set_name(&kobj->kobj, "state%d", i); | ||
306 | ret = kobject_register(&kobj->kobj); | ||
307 | if (ret) { | ||
308 | kfree(kobj); | ||
309 | goto error_state; | ||
310 | } | ||
311 | device->kobjs[i] = kobj; | ||
312 | } | ||
313 | |||
314 | return 0; | ||
315 | |||
316 | error_state: | ||
317 | for (i = i - 1; i >= 0; i--) | ||
318 | cpuidle_free_state_kobj(device, i); | ||
319 | return ret; | ||
320 | } | ||
321 | |||
322 | /** | ||
323 | * cpuidle_remove_driver_sysfs - removes driver-specific sysfs attributes | ||
324 | * @device: the target device | ||
325 | */ | ||
326 | void cpuidle_remove_state_sysfs(struct cpuidle_device *device) | ||
327 | { | ||
328 | int i; | ||
329 | |||
330 | for (i = 0; i < device->state_count; i++) | ||
331 | cpuidle_free_state_kobj(device, i); | ||
332 | } | ||
333 | |||
334 | /** | ||
335 | * cpuidle_add_sysfs - creates a sysfs instance for the target device | ||
336 | * @sysdev: the target device | ||
337 | */ | ||
338 | int cpuidle_add_sysfs(struct sys_device *sysdev) | ||
339 | { | ||
340 | int cpu = sysdev->id; | ||
341 | struct cpuidle_device *dev; | ||
342 | |||
343 | dev = per_cpu(cpuidle_devices, cpu); | ||
344 | dev->kobj.parent = &sysdev->kobj; | ||
345 | dev->kobj.ktype = &ktype_cpuidle; | ||
346 | kobject_set_name(&dev->kobj, "%s", "cpuidle"); | ||
347 | return kobject_register(&dev->kobj); | ||
348 | } | ||
349 | |||
350 | /** | ||
351 | * cpuidle_remove_sysfs - deletes a sysfs instance on the target device | ||
352 | * @sysdev: the target device | ||
353 | */ | ||
354 | void cpuidle_remove_sysfs(struct sys_device *sysdev) | ||
355 | { | ||
356 | int cpu = sysdev->id; | ||
357 | struct cpuidle_device *dev; | ||
358 | |||
359 | dev = per_cpu(cpuidle_devices, cpu); | ||
360 | kobject_unregister(&dev->kobj); | ||
361 | } | ||
diff --git a/drivers/dma/ioat.c b/drivers/dma/ioat.c index f7276bf2fe7..f204c39fb41 100644 --- a/drivers/dma/ioat.c +++ b/drivers/dma/ioat.c | |||
@@ -34,7 +34,7 @@ | |||
34 | #include "ioatdma_registers.h" | 34 | #include "ioatdma_registers.h" |
35 | #include "ioatdma_hw.h" | 35 | #include "ioatdma_hw.h" |
36 | 36 | ||
37 | MODULE_VERSION("1.24"); | 37 | MODULE_VERSION(IOAT_DMA_VERSION); |
38 | MODULE_LICENSE("GPL"); | 38 | MODULE_LICENSE("GPL"); |
39 | MODULE_AUTHOR("Intel Corporation"); | 39 | MODULE_AUTHOR("Intel Corporation"); |
40 | 40 | ||
@@ -55,9 +55,7 @@ struct ioat_device { | |||
55 | 55 | ||
56 | static int __devinit ioat_probe(struct pci_dev *pdev, | 56 | static int __devinit ioat_probe(struct pci_dev *pdev, |
57 | const struct pci_device_id *id); | 57 | const struct pci_device_id *id); |
58 | #ifdef IOAT_DMA_REMOVE | ||
59 | static void __devexit ioat_remove(struct pci_dev *pdev); | 58 | static void __devexit ioat_remove(struct pci_dev *pdev); |
60 | #endif | ||
61 | 59 | ||
62 | static int ioat_dca_enabled = 1; | 60 | static int ioat_dca_enabled = 1; |
63 | module_param(ioat_dca_enabled, int, 0644); | 61 | module_param(ioat_dca_enabled, int, 0644); |
@@ -73,7 +71,7 @@ static int ioat_setup_functionality(struct pci_dev *pdev, void __iomem *iobase) | |||
73 | switch (version) { | 71 | switch (version) { |
74 | case IOAT_VER_1_2: | 72 | case IOAT_VER_1_2: |
75 | device->dma = ioat_dma_probe(pdev, iobase); | 73 | device->dma = ioat_dma_probe(pdev, iobase); |
76 | if (ioat_dca_enabled) | 74 | if (device->dma && ioat_dca_enabled) |
77 | device->dca = ioat_dca_init(pdev, iobase); | 75 | device->dca = ioat_dca_init(pdev, iobase); |
78 | break; | 76 | break; |
79 | default: | 77 | default: |
@@ -87,27 +85,25 @@ static void ioat_shutdown_functionality(struct pci_dev *pdev) | |||
87 | { | 85 | { |
88 | struct ioat_device *device = pci_get_drvdata(pdev); | 86 | struct ioat_device *device = pci_get_drvdata(pdev); |
89 | 87 | ||
90 | if (device->dma) { | 88 | dev_err(&pdev->dev, "Removing dma and dca services\n"); |
91 | ioat_dma_remove(device->dma); | ||
92 | device->dma = NULL; | ||
93 | } | ||
94 | |||
95 | if (device->dca) { | 89 | if (device->dca) { |
96 | unregister_dca_provider(device->dca); | 90 | unregister_dca_provider(device->dca); |
97 | free_dca_provider(device->dca); | 91 | free_dca_provider(device->dca); |
98 | device->dca = NULL; | 92 | device->dca = NULL; |
99 | } | 93 | } |
100 | 94 | ||
95 | if (device->dma) { | ||
96 | ioat_dma_remove(device->dma); | ||
97 | device->dma = NULL; | ||
98 | } | ||
101 | } | 99 | } |
102 | 100 | ||
103 | static struct pci_driver ioat_pci_drv = { | 101 | static struct pci_driver ioat_pci_driver = { |
104 | .name = "ioatdma", | 102 | .name = "ioatdma", |
105 | .id_table = ioat_pci_tbl, | 103 | .id_table = ioat_pci_tbl, |
106 | .probe = ioat_probe, | 104 | .probe = ioat_probe, |
107 | .shutdown = ioat_shutdown_functionality, | 105 | .shutdown = ioat_shutdown_functionality, |
108 | #ifdef IOAT_DMA_REMOVE | ||
109 | .remove = __devexit_p(ioat_remove), | 106 | .remove = __devexit_p(ioat_remove), |
110 | #endif | ||
111 | }; | 107 | }; |
112 | 108 | ||
113 | static int __devinit ioat_probe(struct pci_dev *pdev, | 109 | static int __devinit ioat_probe(struct pci_dev *pdev, |
@@ -122,7 +118,7 @@ static int __devinit ioat_probe(struct pci_dev *pdev, | |||
122 | if (err) | 118 | if (err) |
123 | goto err_enable_device; | 119 | goto err_enable_device; |
124 | 120 | ||
125 | err = pci_request_regions(pdev, ioat_pci_drv.name); | 121 | err = pci_request_regions(pdev, ioat_pci_driver.name); |
126 | if (err) | 122 | if (err) |
127 | goto err_request_regions; | 123 | goto err_request_regions; |
128 | 124 | ||
@@ -176,13 +172,11 @@ err_enable_device: | |||
176 | return err; | 172 | return err; |
177 | } | 173 | } |
178 | 174 | ||
179 | #ifdef IOAT_DMA_REMOVE | ||
180 | /* | 175 | /* |
181 | * It is unsafe to remove this module: if removed while a requested | 176 | * It is unsafe to remove this module: if removed while a requested |
182 | * dma is outstanding, esp. from tcp, it is possible to hang while | 177 | * dma is outstanding, esp. from tcp, it is possible to hang while |
183 | * waiting for something that will never finish, thus hanging at | 178 | * waiting for something that will never finish. However, if you're |
184 | * least one cpu. However, if you're feeling lucky and need to do | 179 | * feeling lucky, this usually works just fine. |
185 | * some testing, this usually works just fine. | ||
186 | */ | 180 | */ |
187 | static void __devexit ioat_remove(struct pci_dev *pdev) | 181 | static void __devexit ioat_remove(struct pci_dev *pdev) |
188 | { | 182 | { |
@@ -191,21 +185,16 @@ static void __devexit ioat_remove(struct pci_dev *pdev) | |||
191 | ioat_shutdown_functionality(pdev); | 185 | ioat_shutdown_functionality(pdev); |
192 | 186 | ||
193 | kfree(device); | 187 | kfree(device); |
194 | |||
195 | iounmap(device->iobase); | ||
196 | pci_release_regions(pdev); | ||
197 | pci_disable_device(pdev); | ||
198 | } | 188 | } |
199 | #endif | ||
200 | 189 | ||
201 | static int __init ioat_init_module(void) | 190 | static int __init ioat_init_module(void) |
202 | { | 191 | { |
203 | return pci_register_driver(&ioat_pci_drv); | 192 | return pci_register_driver(&ioat_pci_driver); |
204 | } | 193 | } |
205 | module_init(ioat_init_module); | 194 | module_init(ioat_init_module); |
206 | 195 | ||
207 | static void __exit ioat_exit_module(void) | 196 | static void __exit ioat_exit_module(void) |
208 | { | 197 | { |
209 | pci_unregister_driver(&ioat_pci_drv); | 198 | pci_unregister_driver(&ioat_pci_driver); |
210 | } | 199 | } |
211 | module_exit(ioat_exit_module); | 200 | module_exit(ioat_exit_module); |
diff --git a/drivers/dma/ioat_dca.c b/drivers/dma/ioat_dca.c index 2ae04c30ede..ba985715b80 100644 --- a/drivers/dma/ioat_dca.c +++ b/drivers/dma/ioat_dca.c | |||
@@ -65,7 +65,7 @@ static inline u16 dcaid_from_pcidev(struct pci_dev *pci) | |||
65 | return (pci->bus->number << 8) | pci->devfn; | 65 | return (pci->bus->number << 8) | pci->devfn; |
66 | } | 66 | } |
67 | 67 | ||
68 | static int dca_enabled_in_bios(void) | 68 | static int dca_enabled_in_bios(struct pci_dev *pdev) |
69 | { | 69 | { |
70 | /* CPUID level 9 returns DCA configuration */ | 70 | /* CPUID level 9 returns DCA configuration */ |
71 | /* Bit 0 indicates DCA enabled by the BIOS */ | 71 | /* Bit 0 indicates DCA enabled by the BIOS */ |
@@ -75,17 +75,17 @@ static int dca_enabled_in_bios(void) | |||
75 | cpuid_level_9 = cpuid_eax(9); | 75 | cpuid_level_9 = cpuid_eax(9); |
76 | res = test_bit(0, &cpuid_level_9); | 76 | res = test_bit(0, &cpuid_level_9); |
77 | if (!res) | 77 | if (!res) |
78 | printk(KERN_ERR "ioat dma: DCA is disabled in BIOS\n"); | 78 | dev_err(&pdev->dev, "DCA is disabled in BIOS\n"); |
79 | 79 | ||
80 | return res; | 80 | return res; |
81 | } | 81 | } |
82 | 82 | ||
83 | static int system_has_dca_enabled(void) | 83 | static int system_has_dca_enabled(struct pci_dev *pdev) |
84 | { | 84 | { |
85 | if (boot_cpu_has(X86_FEATURE_DCA)) | 85 | if (boot_cpu_has(X86_FEATURE_DCA)) |
86 | return dca_enabled_in_bios(); | 86 | return dca_enabled_in_bios(pdev); |
87 | 87 | ||
88 | printk(KERN_ERR "ioat dma: boot cpu doesn't have X86_FEATURE_DCA\n"); | 88 | dev_err(&pdev->dev, "boot cpu doesn't have X86_FEATURE_DCA\n"); |
89 | return 0; | 89 | return 0; |
90 | } | 90 | } |
91 | 91 | ||
@@ -208,7 +208,7 @@ struct dca_provider *ioat_dca_init(struct pci_dev *pdev, void __iomem *iobase) | |||
208 | int i; | 208 | int i; |
209 | int err; | 209 | int err; |
210 | 210 | ||
211 | if (!system_has_dca_enabled()) | 211 | if (!system_has_dca_enabled(pdev)) |
212 | return NULL; | 212 | return NULL; |
213 | 213 | ||
214 | /* I/OAT v1 systems must have a known tag_map to support DCA */ | 214 | /* I/OAT v1 systems must have a known tag_map to support DCA */ |
diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c index 66c5bb53211..7e4a785c2df 100644 --- a/drivers/dma/ioat_dma.c +++ b/drivers/dma/ioat_dma.c | |||
@@ -46,9 +46,12 @@ | |||
46 | /* internal functions */ | 46 | /* internal functions */ |
47 | static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan); | 47 | static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan); |
48 | static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan); | 48 | static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan); |
49 | static struct ioat_desc_sw * | ||
50 | ioat_dma_get_next_descriptor(struct ioat_dma_chan *ioat_chan); | ||
49 | 51 | ||
50 | static struct ioat_dma_chan *ioat_lookup_chan_by_index(struct ioatdma_device *device, | 52 | static inline struct ioat_dma_chan *ioat_lookup_chan_by_index( |
51 | int index) | 53 | struct ioatdma_device *device, |
54 | int index) | ||
52 | { | 55 | { |
53 | return device->idx[index]; | 56 | return device->idx[index]; |
54 | } | 57 | } |
@@ -148,57 +151,102 @@ static void ioat_set_src(dma_addr_t addr, | |||
148 | struct dma_async_tx_descriptor *tx, | 151 | struct dma_async_tx_descriptor *tx, |
149 | int index) | 152 | int index) |
150 | { | 153 | { |
151 | struct ioat_desc_sw *iter, *desc = tx_to_ioat_desc(tx); | 154 | tx_to_ioat_desc(tx)->src = addr; |
152 | struct ioat_dma_chan *ioat_chan = to_ioat_chan(tx->chan); | ||
153 | |||
154 | pci_unmap_addr_set(desc, src, addr); | ||
155 | |||
156 | list_for_each_entry(iter, &desc->async_tx.tx_list, node) { | ||
157 | iter->hw->src_addr = addr; | ||
158 | addr += ioat_chan->xfercap; | ||
159 | } | ||
160 | |||
161 | } | 155 | } |
162 | 156 | ||
163 | static void ioat_set_dest(dma_addr_t addr, | 157 | static void ioat_set_dest(dma_addr_t addr, |
164 | struct dma_async_tx_descriptor *tx, | 158 | struct dma_async_tx_descriptor *tx, |
165 | int index) | 159 | int index) |
166 | { | 160 | { |
167 | struct ioat_desc_sw *iter, *desc = tx_to_ioat_desc(tx); | 161 | tx_to_ioat_desc(tx)->dst = addr; |
168 | struct ioat_dma_chan *ioat_chan = to_ioat_chan(tx->chan); | ||
169 | |||
170 | pci_unmap_addr_set(desc, dst, addr); | ||
171 | |||
172 | list_for_each_entry(iter, &desc->async_tx.tx_list, node) { | ||
173 | iter->hw->dst_addr = addr; | ||
174 | addr += ioat_chan->xfercap; | ||
175 | } | ||
176 | } | 162 | } |
177 | 163 | ||
178 | static dma_cookie_t ioat_tx_submit(struct dma_async_tx_descriptor *tx) | 164 | static dma_cookie_t ioat_tx_submit(struct dma_async_tx_descriptor *tx) |
179 | { | 165 | { |
180 | struct ioat_dma_chan *ioat_chan = to_ioat_chan(tx->chan); | 166 | struct ioat_dma_chan *ioat_chan = to_ioat_chan(tx->chan); |
181 | struct ioat_desc_sw *desc = tx_to_ioat_desc(tx); | 167 | struct ioat_desc_sw *first = tx_to_ioat_desc(tx); |
168 | struct ioat_desc_sw *prev, *new; | ||
169 | struct ioat_dma_descriptor *hw; | ||
182 | int append = 0; | 170 | int append = 0; |
183 | dma_cookie_t cookie; | 171 | dma_cookie_t cookie; |
184 | struct ioat_desc_sw *group_start; | 172 | LIST_HEAD(new_chain); |
173 | u32 copy; | ||
174 | size_t len; | ||
175 | dma_addr_t src, dst; | ||
176 | int orig_ack; | ||
177 | unsigned int desc_count = 0; | ||
178 | |||
179 | /* src and dest and len are stored in the initial descriptor */ | ||
180 | len = first->len; | ||
181 | src = first->src; | ||
182 | dst = first->dst; | ||
183 | orig_ack = first->async_tx.ack; | ||
184 | new = first; | ||
185 | 185 | ||
186 | group_start = list_entry(desc->async_tx.tx_list.next, | ||
187 | struct ioat_desc_sw, node); | ||
188 | spin_lock_bh(&ioat_chan->desc_lock); | 186 | spin_lock_bh(&ioat_chan->desc_lock); |
187 | prev = to_ioat_desc(ioat_chan->used_desc.prev); | ||
188 | prefetch(prev->hw); | ||
189 | do { | ||
190 | copy = min((u32) len, ioat_chan->xfercap); | ||
191 | |||
192 | new->async_tx.ack = 1; | ||
193 | |||
194 | hw = new->hw; | ||
195 | hw->size = copy; | ||
196 | hw->ctl = 0; | ||
197 | hw->src_addr = src; | ||
198 | hw->dst_addr = dst; | ||
199 | hw->next = 0; | ||
200 | |||
201 | /* chain together the physical address list for the HW */ | ||
202 | wmb(); | ||
203 | prev->hw->next = (u64) new->async_tx.phys; | ||
204 | |||
205 | len -= copy; | ||
206 | dst += copy; | ||
207 | src += copy; | ||
208 | |||
209 | list_add_tail(&new->node, &new_chain); | ||
210 | desc_count++; | ||
211 | prev = new; | ||
212 | } while (len && (new = ioat_dma_get_next_descriptor(ioat_chan))); | ||
213 | |||
214 | hw->ctl = IOAT_DMA_DESCRIPTOR_CTL_CP_STS; | ||
215 | if (new->async_tx.callback) { | ||
216 | hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_INT_GN; | ||
217 | if (first != new) { | ||
218 | /* move callback into to last desc */ | ||
219 | new->async_tx.callback = first->async_tx.callback; | ||
220 | new->async_tx.callback_param | ||
221 | = first->async_tx.callback_param; | ||
222 | first->async_tx.callback = NULL; | ||
223 | first->async_tx.callback_param = NULL; | ||
224 | } | ||
225 | } | ||
226 | |||
227 | new->tx_cnt = desc_count; | ||
228 | new->async_tx.ack = orig_ack; /* client is in control of this ack */ | ||
229 | |||
230 | /* store the original values for use in later cleanup */ | ||
231 | if (new != first) { | ||
232 | new->src = first->src; | ||
233 | new->dst = first->dst; | ||
234 | new->len = first->len; | ||
235 | } | ||
236 | |||
189 | /* cookie incr and addition to used_list must be atomic */ | 237 | /* cookie incr and addition to used_list must be atomic */ |
190 | cookie = ioat_chan->common.cookie; | 238 | cookie = ioat_chan->common.cookie; |
191 | cookie++; | 239 | cookie++; |
192 | if (cookie < 0) | 240 | if (cookie < 0) |
193 | cookie = 1; | 241 | cookie = 1; |
194 | ioat_chan->common.cookie = desc->async_tx.cookie = cookie; | 242 | ioat_chan->common.cookie = new->async_tx.cookie = cookie; |
195 | 243 | ||
196 | /* write address into NextDescriptor field of last desc in chain */ | 244 | /* write address into NextDescriptor field of last desc in chain */ |
197 | to_ioat_desc(ioat_chan->used_desc.prev)->hw->next = | 245 | to_ioat_desc(ioat_chan->used_desc.prev)->hw->next = |
198 | group_start->async_tx.phys; | 246 | first->async_tx.phys; |
199 | list_splice_init(&desc->async_tx.tx_list, ioat_chan->used_desc.prev); | 247 | __list_splice(&new_chain, ioat_chan->used_desc.prev); |
200 | 248 | ||
201 | ioat_chan->pending += desc->tx_cnt; | 249 | ioat_chan->pending += desc_count; |
202 | if (ioat_chan->pending >= 4) { | 250 | if (ioat_chan->pending >= 4) { |
203 | append = 1; | 251 | append = 1; |
204 | ioat_chan->pending = 0; | 252 | ioat_chan->pending = 0; |
@@ -267,7 +315,7 @@ static int ioat_dma_alloc_chan_resources(struct dma_chan *chan) | |||
267 | chanerr = readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET); | 315 | chanerr = readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET); |
268 | if (chanerr) { | 316 | if (chanerr) { |
269 | dev_err(&ioat_chan->device->pdev->dev, | 317 | dev_err(&ioat_chan->device->pdev->dev, |
270 | "ioatdma: CHANERR = %x, clearing\n", chanerr); | 318 | "CHANERR = %x, clearing\n", chanerr); |
271 | writel(chanerr, ioat_chan->reg_base + IOAT_CHANERR_OFFSET); | 319 | writel(chanerr, ioat_chan->reg_base + IOAT_CHANERR_OFFSET); |
272 | } | 320 | } |
273 | 321 | ||
@@ -276,7 +324,7 @@ static int ioat_dma_alloc_chan_resources(struct dma_chan *chan) | |||
276 | desc = ioat_dma_alloc_descriptor(ioat_chan, GFP_KERNEL); | 324 | desc = ioat_dma_alloc_descriptor(ioat_chan, GFP_KERNEL); |
277 | if (!desc) { | 325 | if (!desc) { |
278 | dev_err(&ioat_chan->device->pdev->dev, | 326 | dev_err(&ioat_chan->device->pdev->dev, |
279 | "ioatdma: Only %d initial descriptors\n", i); | 327 | "Only %d initial descriptors\n", i); |
280 | break; | 328 | break; |
281 | } | 329 | } |
282 | list_add_tail(&desc->node, &tmp_list); | 330 | list_add_tail(&desc->node, &tmp_list); |
@@ -342,12 +390,13 @@ static void ioat_dma_free_chan_resources(struct dma_chan *chan) | |||
342 | /* one is ok since we left it on there on purpose */ | 390 | /* one is ok since we left it on there on purpose */ |
343 | if (in_use_descs > 1) | 391 | if (in_use_descs > 1) |
344 | dev_err(&ioat_chan->device->pdev->dev, | 392 | dev_err(&ioat_chan->device->pdev->dev, |
345 | "ioatdma: Freeing %d in use descriptors!\n", | 393 | "Freeing %d in use descriptors!\n", |
346 | in_use_descs - 1); | 394 | in_use_descs - 1); |
347 | 395 | ||
348 | ioat_chan->last_completion = ioat_chan->completion_addr = 0; | 396 | ioat_chan->last_completion = ioat_chan->completion_addr = 0; |
349 | ioat_chan->pending = 0; | 397 | ioat_chan->pending = 0; |
350 | } | 398 | } |
399 | |||
351 | /** | 400 | /** |
352 | * ioat_dma_get_next_descriptor - return the next available descriptor | 401 | * ioat_dma_get_next_descriptor - return the next available descriptor |
353 | * @ioat_chan: IOAT DMA channel handle | 402 | * @ioat_chan: IOAT DMA channel handle |
@@ -356,8 +405,8 @@ static void ioat_dma_free_chan_resources(struct dma_chan *chan) | |||
356 | * channel's desc_lock held. Allocates more descriptors if the channel | 405 | * channel's desc_lock held. Allocates more descriptors if the channel |
357 | * has run out. | 406 | * has run out. |
358 | */ | 407 | */ |
359 | static struct ioat_desc_sw *ioat_dma_get_next_descriptor( | 408 | static struct ioat_desc_sw * |
360 | struct ioat_dma_chan *ioat_chan) | 409 | ioat_dma_get_next_descriptor(struct ioat_dma_chan *ioat_chan) |
361 | { | 410 | { |
362 | struct ioat_desc_sw *new = NULL; | 411 | struct ioat_desc_sw *new = NULL; |
363 | 412 | ||
@@ -382,51 +431,11 @@ static struct dma_async_tx_descriptor *ioat_dma_prep_memcpy( | |||
382 | int int_en) | 431 | int int_en) |
383 | { | 432 | { |
384 | struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan); | 433 | struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan); |
385 | struct ioat_desc_sw *first, *prev, *new; | 434 | struct ioat_desc_sw *new; |
386 | LIST_HEAD(new_chain); | ||
387 | u32 copy; | ||
388 | size_t orig_len; | ||
389 | int desc_count = 0; | ||
390 | |||
391 | if (!len) | ||
392 | return NULL; | ||
393 | |||
394 | orig_len = len; | ||
395 | |||
396 | first = NULL; | ||
397 | prev = NULL; | ||
398 | 435 | ||
399 | spin_lock_bh(&ioat_chan->desc_lock); | 436 | spin_lock_bh(&ioat_chan->desc_lock); |
400 | while (len) { | 437 | new = ioat_dma_get_next_descriptor(ioat_chan); |
401 | new = ioat_dma_get_next_descriptor(ioat_chan); | 438 | new->len = len; |
402 | copy = min((u32) len, ioat_chan->xfercap); | ||
403 | |||
404 | new->hw->size = copy; | ||
405 | new->hw->ctl = 0; | ||
406 | new->async_tx.cookie = 0; | ||
407 | new->async_tx.ack = 1; | ||
408 | |||
409 | /* chain together the physical address list for the HW */ | ||
410 | if (!first) | ||
411 | first = new; | ||
412 | else | ||
413 | prev->hw->next = (u64) new->async_tx.phys; | ||
414 | |||
415 | prev = new; | ||
416 | len -= copy; | ||
417 | list_add_tail(&new->node, &new_chain); | ||
418 | desc_count++; | ||
419 | } | ||
420 | |||
421 | list_splice(&new_chain, &new->async_tx.tx_list); | ||
422 | |||
423 | new->hw->ctl = IOAT_DMA_DESCRIPTOR_CTL_CP_STS; | ||
424 | new->hw->next = 0; | ||
425 | new->tx_cnt = desc_count; | ||
426 | new->async_tx.ack = 0; /* client is in control of this ack */ | ||
427 | new->async_tx.cookie = -EBUSY; | ||
428 | |||
429 | pci_unmap_len_set(new, len, orig_len); | ||
430 | spin_unlock_bh(&ioat_chan->desc_lock); | 439 | spin_unlock_bh(&ioat_chan->desc_lock); |
431 | 440 | ||
432 | return new ? &new->async_tx : NULL; | 441 | return new ? &new->async_tx : NULL; |
@@ -464,7 +473,7 @@ static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan) | |||
464 | 473 | ||
465 | prefetch(ioat_chan->completion_virt); | 474 | prefetch(ioat_chan->completion_virt); |
466 | 475 | ||
467 | if (!spin_trylock(&ioat_chan->cleanup_lock)) | 476 | if (!spin_trylock_bh(&ioat_chan->cleanup_lock)) |
468 | return; | 477 | return; |
469 | 478 | ||
470 | /* The completion writeback can happen at any time, | 479 | /* The completion writeback can happen at any time, |
@@ -474,22 +483,25 @@ static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan) | |||
474 | 483 | ||
475 | #if (BITS_PER_LONG == 64) | 484 | #if (BITS_PER_LONG == 64) |
476 | phys_complete = | 485 | phys_complete = |
477 | ioat_chan->completion_virt->full & IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR; | 486 | ioat_chan->completion_virt->full |
487 | & IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR; | ||
478 | #else | 488 | #else |
479 | phys_complete = ioat_chan->completion_virt->low & IOAT_LOW_COMPLETION_MASK; | 489 | phys_complete = |
490 | ioat_chan->completion_virt->low & IOAT_LOW_COMPLETION_MASK; | ||
480 | #endif | 491 | #endif |
481 | 492 | ||
482 | if ((ioat_chan->completion_virt->full & IOAT_CHANSTS_DMA_TRANSFER_STATUS) == | 493 | if ((ioat_chan->completion_virt->full |
494 | & IOAT_CHANSTS_DMA_TRANSFER_STATUS) == | ||
483 | IOAT_CHANSTS_DMA_TRANSFER_STATUS_HALTED) { | 495 | IOAT_CHANSTS_DMA_TRANSFER_STATUS_HALTED) { |
484 | dev_err(&ioat_chan->device->pdev->dev, | 496 | dev_err(&ioat_chan->device->pdev->dev, |
485 | "ioatdma: Channel halted, chanerr = %x\n", | 497 | "Channel halted, chanerr = %x\n", |
486 | readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET)); | 498 | readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET)); |
487 | 499 | ||
488 | /* TODO do something to salvage the situation */ | 500 | /* TODO do something to salvage the situation */ |
489 | } | 501 | } |
490 | 502 | ||
491 | if (phys_complete == ioat_chan->last_completion) { | 503 | if (phys_complete == ioat_chan->last_completion) { |
492 | spin_unlock(&ioat_chan->cleanup_lock); | 504 | spin_unlock_bh(&ioat_chan->cleanup_lock); |
493 | return; | 505 | return; |
494 | } | 506 | } |
495 | 507 | ||
@@ -517,6 +529,11 @@ static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan) | |||
517 | pci_unmap_addr(desc, src), | 529 | pci_unmap_addr(desc, src), |
518 | pci_unmap_len(desc, len), | 530 | pci_unmap_len(desc, len), |
519 | PCI_DMA_TODEVICE); | 531 | PCI_DMA_TODEVICE); |
532 | if (desc->async_tx.callback) { | ||
533 | desc->async_tx.callback( | ||
534 | desc->async_tx.callback_param); | ||
535 | desc->async_tx.callback = NULL; | ||
536 | } | ||
520 | } | 537 | } |
521 | 538 | ||
522 | if (desc->async_tx.phys != phys_complete) { | 539 | if (desc->async_tx.phys != phys_complete) { |
@@ -548,7 +565,7 @@ static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan) | |||
548 | if (cookie != 0) | 565 | if (cookie != 0) |
549 | ioat_chan->completed_cookie = cookie; | 566 | ioat_chan->completed_cookie = cookie; |
550 | 567 | ||
551 | spin_unlock(&ioat_chan->cleanup_lock); | 568 | spin_unlock_bh(&ioat_chan->cleanup_lock); |
552 | } | 569 | } |
553 | 570 | ||
554 | static void ioat_dma_dependency_added(struct dma_chan *chan) | 571 | static void ioat_dma_dependency_added(struct dma_chan *chan) |
@@ -613,8 +630,13 @@ static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan) | |||
613 | spin_lock_bh(&ioat_chan->desc_lock); | 630 | spin_lock_bh(&ioat_chan->desc_lock); |
614 | 631 | ||
615 | desc = ioat_dma_get_next_descriptor(ioat_chan); | 632 | desc = ioat_dma_get_next_descriptor(ioat_chan); |
616 | desc->hw->ctl = IOAT_DMA_DESCRIPTOR_NUL; | 633 | desc->hw->ctl = IOAT_DMA_DESCRIPTOR_NUL |
634 | | IOAT_DMA_DESCRIPTOR_CTL_INT_GN | ||
635 | | IOAT_DMA_DESCRIPTOR_CTL_CP_STS; | ||
617 | desc->hw->next = 0; | 636 | desc->hw->next = 0; |
637 | desc->hw->size = 0; | ||
638 | desc->hw->src_addr = 0; | ||
639 | desc->hw->dst_addr = 0; | ||
618 | desc->async_tx.ack = 1; | 640 | desc->async_tx.ack = 1; |
619 | 641 | ||
620 | list_add_tail(&desc->node, &ioat_chan->used_desc); | 642 | list_add_tail(&desc->node, &ioat_chan->used_desc); |
@@ -633,6 +655,12 @@ static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan) | |||
633 | */ | 655 | */ |
634 | #define IOAT_TEST_SIZE 2000 | 656 | #define IOAT_TEST_SIZE 2000 |
635 | 657 | ||
658 | static void ioat_dma_test_callback(void *dma_async_param) | ||
659 | { | ||
660 | printk(KERN_ERR "ioatdma: ioat_dma_test_callback(%p)\n", | ||
661 | dma_async_param); | ||
662 | } | ||
663 | |||
636 | /** | 664 | /** |
637 | * ioat_dma_self_test - Perform a IOAT transaction to verify the HW works. | 665 | * ioat_dma_self_test - Perform a IOAT transaction to verify the HW works. |
638 | * @device: device to be tested | 666 | * @device: device to be tested |
@@ -643,7 +671,7 @@ static int ioat_dma_self_test(struct ioatdma_device *device) | |||
643 | u8 *src; | 671 | u8 *src; |
644 | u8 *dest; | 672 | u8 *dest; |
645 | struct dma_chan *dma_chan; | 673 | struct dma_chan *dma_chan; |
646 | struct dma_async_tx_descriptor *tx; | 674 | struct dma_async_tx_descriptor *tx = NULL; |
647 | dma_addr_t addr; | 675 | dma_addr_t addr; |
648 | dma_cookie_t cookie; | 676 | dma_cookie_t cookie; |
649 | int err = 0; | 677 | int err = 0; |
@@ -673,6 +701,13 @@ static int ioat_dma_self_test(struct ioatdma_device *device) | |||
673 | } | 701 | } |
674 | 702 | ||
675 | tx = ioat_dma_prep_memcpy(dma_chan, IOAT_TEST_SIZE, 0); | 703 | tx = ioat_dma_prep_memcpy(dma_chan, IOAT_TEST_SIZE, 0); |
704 | if (!tx) { | ||
705 | dev_err(&device->pdev->dev, | ||
706 | "Self-test prep failed, disabling\n"); | ||
707 | err = -ENODEV; | ||
708 | goto free_resources; | ||
709 | } | ||
710 | |||
676 | async_tx_ack(tx); | 711 | async_tx_ack(tx); |
677 | addr = dma_map_single(dma_chan->device->dev, src, IOAT_TEST_SIZE, | 712 | addr = dma_map_single(dma_chan->device->dev, src, IOAT_TEST_SIZE, |
678 | DMA_TO_DEVICE); | 713 | DMA_TO_DEVICE); |
@@ -680,19 +715,27 @@ static int ioat_dma_self_test(struct ioatdma_device *device) | |||
680 | addr = dma_map_single(dma_chan->device->dev, dest, IOAT_TEST_SIZE, | 715 | addr = dma_map_single(dma_chan->device->dev, dest, IOAT_TEST_SIZE, |
681 | DMA_FROM_DEVICE); | 716 | DMA_FROM_DEVICE); |
682 | ioat_set_dest(addr, tx, 0); | 717 | ioat_set_dest(addr, tx, 0); |
718 | tx->callback = ioat_dma_test_callback; | ||
719 | tx->callback_param = (void *)0x8086; | ||
683 | cookie = ioat_tx_submit(tx); | 720 | cookie = ioat_tx_submit(tx); |
721 | if (cookie < 0) { | ||
722 | dev_err(&device->pdev->dev, | ||
723 | "Self-test setup failed, disabling\n"); | ||
724 | err = -ENODEV; | ||
725 | goto free_resources; | ||
726 | } | ||
684 | ioat_dma_memcpy_issue_pending(dma_chan); | 727 | ioat_dma_memcpy_issue_pending(dma_chan); |
685 | msleep(1); | 728 | msleep(1); |
686 | 729 | ||
687 | if (ioat_dma_is_complete(dma_chan, cookie, NULL, NULL) != DMA_SUCCESS) { | 730 | if (ioat_dma_is_complete(dma_chan, cookie, NULL, NULL) != DMA_SUCCESS) { |
688 | dev_err(&device->pdev->dev, | 731 | dev_err(&device->pdev->dev, |
689 | "ioatdma: Self-test copy timed out, disabling\n"); | 732 | "Self-test copy timed out, disabling\n"); |
690 | err = -ENODEV; | 733 | err = -ENODEV; |
691 | goto free_resources; | 734 | goto free_resources; |
692 | } | 735 | } |
693 | if (memcmp(src, dest, IOAT_TEST_SIZE)) { | 736 | if (memcmp(src, dest, IOAT_TEST_SIZE)) { |
694 | dev_err(&device->pdev->dev, | 737 | dev_err(&device->pdev->dev, |
695 | "ioatdma: Self-test copy failed compare, disabling\n"); | 738 | "Self-test copy failed compare, disabling\n"); |
696 | err = -ENODEV; | 739 | err = -ENODEV; |
697 | goto free_resources; | 740 | goto free_resources; |
698 | } | 741 | } |
@@ -730,6 +773,9 @@ static int ioat_dma_setup_interrupts(struct ioatdma_device *device) | |||
730 | goto msi; | 773 | goto msi; |
731 | if (!strcmp(ioat_interrupt_style, "intx")) | 774 | if (!strcmp(ioat_interrupt_style, "intx")) |
732 | goto intx; | 775 | goto intx; |
776 | dev_err(&device->pdev->dev, "invalid ioat_interrupt_style %s\n", | ||
777 | ioat_interrupt_style); | ||
778 | goto err_no_irq; | ||
733 | 779 | ||
734 | msix: | 780 | msix: |
735 | /* The number of MSI-X vectors should equal the number of channels */ | 781 | /* The number of MSI-X vectors should equal the number of channels */ |
@@ -906,9 +952,9 @@ struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev, | |||
906 | device->common.device_dependency_added = ioat_dma_dependency_added; | 952 | device->common.device_dependency_added = ioat_dma_dependency_added; |
907 | device->common.dev = &pdev->dev; | 953 | device->common.dev = &pdev->dev; |
908 | dev_err(&device->pdev->dev, | 954 | dev_err(&device->pdev->dev, |
909 | "ioatdma: Intel(R) I/OAT DMA Engine found," | 955 | "Intel(R) I/OAT DMA Engine found," |
910 | " %d channels, device version 0x%02x\n", | 956 | " %d channels, device version 0x%02x, driver version %s\n", |
911 | device->common.chancnt, device->version); | 957 | device->common.chancnt, device->version, IOAT_DMA_VERSION); |
912 | 958 | ||
913 | err = ioat_dma_setup_interrupts(device); | 959 | err = ioat_dma_setup_interrupts(device); |
914 | if (err) | 960 | if (err) |
@@ -931,9 +977,8 @@ err_completion_pool: | |||
931 | err_dma_pool: | 977 | err_dma_pool: |
932 | kfree(device); | 978 | kfree(device); |
933 | err_kzalloc: | 979 | err_kzalloc: |
934 | iounmap(iobase); | ||
935 | dev_err(&device->pdev->dev, | 980 | dev_err(&device->pdev->dev, |
936 | "ioatdma: Intel(R) I/OAT DMA Engine initialization failed\n"); | 981 | "Intel(R) I/OAT DMA Engine initialization failed\n"); |
937 | return NULL; | 982 | return NULL; |
938 | } | 983 | } |
939 | 984 | ||
@@ -942,13 +987,17 @@ void ioat_dma_remove(struct ioatdma_device *device) | |||
942 | struct dma_chan *chan, *_chan; | 987 | struct dma_chan *chan, *_chan; |
943 | struct ioat_dma_chan *ioat_chan; | 988 | struct ioat_dma_chan *ioat_chan; |
944 | 989 | ||
945 | dma_async_device_unregister(&device->common); | ||
946 | |||
947 | ioat_dma_remove_interrupts(device); | 990 | ioat_dma_remove_interrupts(device); |
948 | 991 | ||
992 | dma_async_device_unregister(&device->common); | ||
993 | |||
949 | pci_pool_destroy(device->dma_pool); | 994 | pci_pool_destroy(device->dma_pool); |
950 | pci_pool_destroy(device->completion_pool); | 995 | pci_pool_destroy(device->completion_pool); |
951 | 996 | ||
997 | iounmap(device->reg_base); | ||
998 | pci_release_regions(device->pdev); | ||
999 | pci_disable_device(device->pdev); | ||
1000 | |||
952 | list_for_each_entry_safe(chan, _chan, | 1001 | list_for_each_entry_safe(chan, _chan, |
953 | &device->common.channels, device_node) { | 1002 | &device->common.channels, device_node) { |
954 | ioat_chan = to_ioat_chan(chan); | 1003 | ioat_chan = to_ioat_chan(chan); |
diff --git a/drivers/dma/ioatdma.h b/drivers/dma/ioatdma.h index 2a319e124ec..5f9881e7b0e 100644 --- a/drivers/dma/ioatdma.h +++ b/drivers/dma/ioatdma.h | |||
@@ -28,6 +28,8 @@ | |||
28 | #include <linux/cache.h> | 28 | #include <linux/cache.h> |
29 | #include <linux/pci_ids.h> | 29 | #include <linux/pci_ids.h> |
30 | 30 | ||
31 | #define IOAT_DMA_VERSION "1.26" | ||
32 | |||
31 | enum ioat_interrupt { | 33 | enum ioat_interrupt { |
32 | none = 0, | 34 | none = 0, |
33 | msix_multi_vector = 1, | 35 | msix_multi_vector = 1, |
@@ -122,9 +124,9 @@ struct ioat_desc_sw { | |||
122 | struct ioat_dma_descriptor *hw; | 124 | struct ioat_dma_descriptor *hw; |
123 | struct list_head node; | 125 | struct list_head node; |
124 | int tx_cnt; | 126 | int tx_cnt; |
125 | DECLARE_PCI_UNMAP_LEN(len) | 127 | size_t len; |
126 | DECLARE_PCI_UNMAP_ADDR(src) | 128 | dma_addr_t src; |
127 | DECLARE_PCI_UNMAP_ADDR(dst) | 129 | dma_addr_t dst; |
128 | struct dma_async_tx_descriptor async_tx; | 130 | struct dma_async_tx_descriptor async_tx; |
129 | }; | 131 | }; |
130 | 132 | ||
diff --git a/drivers/edac/edac_core.h b/drivers/edac/edac_core.h index e80af67664c..2d23e304f5e 100644 --- a/drivers/edac/edac_core.h +++ b/drivers/edac/edac_core.h | |||
@@ -94,8 +94,6 @@ extern int edac_debug_level; | |||
94 | 94 | ||
95 | #endif /* !CONFIG_EDAC_DEBUG */ | 95 | #endif /* !CONFIG_EDAC_DEBUG */ |
96 | 96 | ||
97 | #define BIT(x) (1 << (x)) | ||
98 | |||
99 | #define PCI_VEND_DEV(vend, dev) PCI_VENDOR_ID_ ## vend, \ | 97 | #define PCI_VEND_DEV(vend, dev) PCI_VENDOR_ID_ ## vend, \ |
100 | PCI_DEVICE_ID_ ## vend ## _ ## dev | 98 | PCI_DEVICE_ID_ ## vend ## _ ## dev |
101 | 99 | ||
diff --git a/drivers/edac/pasemi_edac.c b/drivers/edac/pasemi_edac.c index e66cdd42a39..9007d067722 100644 --- a/drivers/edac/pasemi_edac.c +++ b/drivers/edac/pasemi_edac.c | |||
@@ -270,6 +270,7 @@ static void __devexit pasemi_edac_remove(struct pci_dev *pdev) | |||
270 | 270 | ||
271 | static const struct pci_device_id pasemi_edac_pci_tbl[] = { | 271 | static const struct pci_device_id pasemi_edac_pci_tbl[] = { |
272 | { PCI_DEVICE(PCI_VENDOR_ID_PASEMI, 0xa00a) }, | 272 | { PCI_DEVICE(PCI_VENDOR_ID_PASEMI, 0xa00a) }, |
273 | { } | ||
273 | }; | 274 | }; |
274 | 275 | ||
275 | MODULE_DEVICE_TABLE(pci, pasemi_edac_pci_tbl); | 276 | MODULE_DEVICE_TABLE(pci, pasemi_edac_pci_tbl); |
diff --git a/drivers/firewire/fw-transaction.c b/drivers/firewire/fw-transaction.c index 9959b799dbe..c00d4a9b39e 100644 --- a/drivers/firewire/fw-transaction.c +++ b/drivers/firewire/fw-transaction.c | |||
@@ -228,7 +228,7 @@ fw_fill_request(struct fw_packet *packet, int tcode, int tlabel, | |||
228 | * | 228 | * |
229 | * @param card the card from which to send the request | 229 | * @param card the card from which to send the request |
230 | * @param tcode the tcode for this transaction. Do not use | 230 | * @param tcode the tcode for this transaction. Do not use |
231 | * TCODE_LOCK_REQUEST directly, insted use TCODE_LOCK_MASK_SWAP | 231 | * TCODE_LOCK_REQUEST directly, instead use TCODE_LOCK_MASK_SWAP |
232 | * etc. to specify tcode and ext_tcode. | 232 | * etc. to specify tcode and ext_tcode. |
233 | * @param node_id the destination node ID (bus ID and PHY ID concatenated) | 233 | * @param node_id the destination node ID (bus ID and PHY ID concatenated) |
234 | * @param generation the generation for which node_id is valid | 234 | * @param generation the generation for which node_id is valid |
diff --git a/drivers/firmware/dcdbas.h b/drivers/firmware/dcdbas.h index dcdba0f1b32..87bc3417de2 100644 --- a/drivers/firmware/dcdbas.h +++ b/drivers/firmware/dcdbas.h | |||
@@ -17,7 +17,6 @@ | |||
17 | #define _DCDBAS_H_ | 17 | #define _DCDBAS_H_ |
18 | 18 | ||
19 | #include <linux/device.h> | 19 | #include <linux/device.h> |
20 | #include <linux/input.h> | ||
21 | #include <linux/sysfs.h> | 20 | #include <linux/sysfs.h> |
22 | #include <linux/types.h> | 21 | #include <linux/types.h> |
23 | 22 | ||
diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c index a702e2f6da7..1ca6f4635ee 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c | |||
@@ -113,13 +113,13 @@ static ssize_t hidraw_write(struct file *file, const char __user *buffer, size_t | |||
113 | 113 | ||
114 | if (count > HID_MIN_BUFFER_SIZE) { | 114 | if (count > HID_MIN_BUFFER_SIZE) { |
115 | printk(KERN_WARNING "hidraw: pid %d passed too large report\n", | 115 | printk(KERN_WARNING "hidraw: pid %d passed too large report\n", |
116 | current->pid); | 116 | task_pid_nr(current)); |
117 | return -EINVAL; | 117 | return -EINVAL; |
118 | } | 118 | } |
119 | 119 | ||
120 | if (count < 2) { | 120 | if (count < 2) { |
121 | printk(KERN_WARNING "hidraw: pid %d passed too short report\n", | 121 | printk(KERN_WARNING "hidraw: pid %d passed too short report\n", |
122 | current->pid); | 122 | task_pid_nr(current)); |
123 | return -EINVAL; | 123 | return -EINVAL; |
124 | } | 124 | } |
125 | 125 | ||
diff --git a/drivers/hid/usbhid/hid-ff.c b/drivers/hid/usbhid/hid-ff.c index 22329feb3b5..4c210e16b1b 100644 --- a/drivers/hid/usbhid/hid-ff.c +++ b/drivers/hid/usbhid/hid-ff.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: hid-ff.c,v 1.2 2002/04/18 22:02:47 jdeneux Exp $ | ||
3 | * | ||
4 | * Force feedback support for hid devices. | 2 | * Force feedback support for hid devices. |
5 | * Not all hid devices use the same protocol. For example, some use PID, | 3 | * Not all hid devices use the same protocol. For example, some use PID, |
6 | * other use their own proprietary procotol. | 4 | * other use their own proprietary procotol. |
diff --git a/drivers/hid/usbhid/usbkbd.c b/drivers/hid/usbhid/usbkbd.c index b76b02f7b52..775a1ef28a2 100644 --- a/drivers/hid/usbhid/usbkbd.c +++ b/drivers/hid/usbhid/usbkbd.c | |||
@@ -274,8 +274,11 @@ static int usb_kbd_probe(struct usb_interface *iface, | |||
274 | 274 | ||
275 | input_set_drvdata(input_dev, kbd); | 275 | input_set_drvdata(input_dev, kbd); |
276 | 276 | ||
277 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP); | 277 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_LED) | |
278 | input_dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL) | BIT(LED_COMPOSE) | BIT(LED_KANA); | 278 | BIT_MASK(EV_REP); |
279 | input_dev->ledbit[0] = BIT_MASK(LED_NUML) | BIT_MASK(LED_CAPSL) | | ||
280 | BIT_MASK(LED_SCROLLL) | BIT_MASK(LED_COMPOSE) | | ||
281 | BIT_MASK(LED_KANA); | ||
279 | 282 | ||
280 | for (i = 0; i < 255; i++) | 283 | for (i = 0; i < 255; i++) |
281 | set_bit(usb_kbd_keycode[i], input_dev->keybit); | 284 | set_bit(usb_kbd_keycode[i], input_dev->keybit); |
diff --git a/drivers/hid/usbhid/usbmouse.c b/drivers/hid/usbhid/usbmouse.c index 5345c73bcf6..f8ad6910d3d 100644 --- a/drivers/hid/usbhid/usbmouse.c +++ b/drivers/hid/usbhid/usbmouse.c | |||
@@ -173,11 +173,13 @@ static int usb_mouse_probe(struct usb_interface *intf, const struct usb_device_i | |||
173 | usb_to_input_id(dev, &input_dev->id); | 173 | usb_to_input_id(dev, &input_dev->id); |
174 | input_dev->dev.parent = &intf->dev; | 174 | input_dev->dev.parent = &intf->dev; |
175 | 175 | ||
176 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 176 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
177 | input_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE); | 177 | input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | |
178 | input_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 178 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); |
179 | input_dev->keybit[LONG(BTN_MOUSE)] |= BIT(BTN_SIDE) | BIT(BTN_EXTRA); | 179 | input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); |
180 | input_dev->relbit[0] |= BIT(REL_WHEEL); | 180 | input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) | |
181 | BIT_MASK(BTN_EXTRA); | ||
182 | input_dev->relbit[0] |= BIT_MASK(REL_WHEEL); | ||
181 | 183 | ||
182 | input_set_drvdata(input_dev, mouse); | 184 | input_set_drvdata(input_dev, mouse); |
183 | 185 | ||
diff --git a/drivers/hwmon/adm1026.c b/drivers/hwmon/adm1026.c index aa875ca50d9..3e63c148677 100644 --- a/drivers/hwmon/adm1026.c +++ b/drivers/hwmon/adm1026.c | |||
@@ -1651,7 +1651,7 @@ static int adm1026_detect(struct i2c_adapter *adapter, int address, | |||
1651 | break; | 1651 | break; |
1652 | default : | 1652 | default : |
1653 | dev_err(&adapter->dev, ": Internal error, invalid " | 1653 | dev_err(&adapter->dev, ": Internal error, invalid " |
1654 | "kind (%d)!", kind); | 1654 | "kind (%d)!\n", kind); |
1655 | err = -EFAULT; | 1655 | err = -EFAULT; |
1656 | goto exitfree; | 1656 | goto exitfree; |
1657 | } | 1657 | } |
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c index 4879125b4cd..1001d2e122a 100644 --- a/drivers/hwmon/applesmc.c +++ b/drivers/hwmon/applesmc.c | |||
@@ -1099,7 +1099,7 @@ static int applesmc_create_accelerometer(void) | |||
1099 | idev->name = "applesmc"; | 1099 | idev->name = "applesmc"; |
1100 | idev->id.bustype = BUS_HOST; | 1100 | idev->id.bustype = BUS_HOST; |
1101 | idev->dev.parent = &pdev->dev; | 1101 | idev->dev.parent = &pdev->dev; |
1102 | idev->evbit[0] = BIT(EV_ABS); | 1102 | idev->evbit[0] = BIT_MASK(EV_ABS); |
1103 | input_set_abs_params(idev, ABS_X, | 1103 | input_set_abs_params(idev, ABS_X, |
1104 | -256, 256, APPLESMC_INPUT_FUZZ, APPLESMC_INPUT_FLAT); | 1104 | -256, 256, APPLESMC_INPUT_FUZZ, APPLESMC_INPUT_FLAT); |
1105 | input_set_abs_params(idev, ABS_Y, | 1105 | input_set_abs_params(idev, ABS_Y, |
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c index 6f66551d9e5..5c82ec7f8bb 100644 --- a/drivers/hwmon/coretemp.c +++ b/drivers/hwmon/coretemp.c | |||
@@ -150,7 +150,7 @@ static struct coretemp_data *coretemp_update_device(struct device *dev) | |||
150 | static int __devinit coretemp_probe(struct platform_device *pdev) | 150 | static int __devinit coretemp_probe(struct platform_device *pdev) |
151 | { | 151 | { |
152 | struct coretemp_data *data; | 152 | struct coretemp_data *data; |
153 | struct cpuinfo_x86 *c = &(cpu_data)[pdev->id]; | 153 | struct cpuinfo_x86 *c = &cpu_data(pdev->id); |
154 | int err; | 154 | int err; |
155 | u32 eax, edx; | 155 | u32 eax, edx; |
156 | 156 | ||
@@ -359,7 +359,7 @@ static int __init coretemp_init(void) | |||
359 | struct pdev_entry *p, *n; | 359 | struct pdev_entry *p, *n; |
360 | 360 | ||
361 | /* quick check if we run Intel */ | 361 | /* quick check if we run Intel */ |
362 | if (cpu_data[0].x86_vendor != X86_VENDOR_INTEL) | 362 | if (cpu_data(0).x86_vendor != X86_VENDOR_INTEL) |
363 | goto exit; | 363 | goto exit; |
364 | 364 | ||
365 | err = platform_driver_register(&coretemp_driver); | 365 | err = platform_driver_register(&coretemp_driver); |
@@ -367,7 +367,7 @@ static int __init coretemp_init(void) | |||
367 | goto exit; | 367 | goto exit; |
368 | 368 | ||
369 | for_each_online_cpu(i) { | 369 | for_each_online_cpu(i) { |
370 | struct cpuinfo_x86 *c = &(cpu_data)[i]; | 370 | struct cpuinfo_x86 *c = &cpu_data(i); |
371 | 371 | ||
372 | /* check if family 6, models e, f, 16 */ | 372 | /* check if family 6, models e, f, 16 */ |
373 | if ((c->cpuid_level < 0) || (c->x86 != 0x6) || | 373 | if ((c->cpuid_level < 0) || (c->x86 != 0x6) || |
diff --git a/drivers/hwmon/gl520sm.c b/drivers/hwmon/gl520sm.c index a3b56c816e1..2d39d8fc238 100644 --- a/drivers/hwmon/gl520sm.c +++ b/drivers/hwmon/gl520sm.c | |||
@@ -2,7 +2,7 @@ | |||
2 | gl520sm.c - Part of lm_sensors, Linux kernel modules for hardware | 2 | gl520sm.c - Part of lm_sensors, Linux kernel modules for hardware |
3 | monitoring | 3 | monitoring |
4 | Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>, | 4 | Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>, |
5 | Kyösti Mälkki <kmalkki@cc.hut.fi> | 5 | Kyösti Mälkki <kmalkki@cc.hut.fi> |
6 | Copyright (c) 2005 Maarten Deprez <maartendeprez@users.sourceforge.net> | 6 | Copyright (c) 2005 Maarten Deprez <maartendeprez@users.sourceforge.net> |
7 | 7 | ||
8 | This program is free software; you can redistribute it and/or modify | 8 | This program is free software; you can redistribute it and/or modify |
@@ -805,7 +805,7 @@ static void __exit sensors_gl520sm_exit(void) | |||
805 | 805 | ||
806 | 806 | ||
807 | MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>, " | 807 | MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>, " |
808 | "Kyösti Mälkki <kmalkki@cc.hut.fi>, " | 808 | "Kyösti Mälkki <kmalkki@cc.hut.fi>, " |
809 | "Maarten Deprez <maartendeprez@users.sourceforge.net>"); | 809 | "Maarten Deprez <maartendeprez@users.sourceforge.net>"); |
810 | MODULE_DESCRIPTION("GL520SM driver"); | 810 | MODULE_DESCRIPTION("GL520SM driver"); |
811 | MODULE_LICENSE("GPL"); | 811 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/hwmon/hdaps.c b/drivers/hwmon/hdaps.c index 8a7ae03aeee..bab5fd2e4df 100644 --- a/drivers/hwmon/hdaps.c +++ b/drivers/hwmon/hdaps.c | |||
@@ -574,7 +574,7 @@ static int __init hdaps_init(void) | |||
574 | idev = hdaps_idev->input; | 574 | idev = hdaps_idev->input; |
575 | idev->name = "hdaps"; | 575 | idev->name = "hdaps"; |
576 | idev->dev.parent = &pdev->dev; | 576 | idev->dev.parent = &pdev->dev; |
577 | idev->evbit[0] = BIT(EV_ABS); | 577 | idev->evbit[0] = BIT_MASK(EV_ABS); |
578 | input_set_abs_params(idev, ABS_X, | 578 | input_set_abs_params(idev, ABS_X, |
579 | -256, 256, HDAPS_INPUT_FUZZ, HDAPS_INPUT_FLAT); | 579 | -256, 256, HDAPS_INPUT_FUZZ, HDAPS_INPUT_FLAT); |
580 | input_set_abs_params(idev, ABS_Y, | 580 | input_set_abs_params(idev, ABS_Y, |
diff --git a/drivers/hwmon/hwmon-vid.c b/drivers/hwmon/hwmon-vid.c index f17e771e42f..3330667280b 100644 --- a/drivers/hwmon/hwmon-vid.c +++ b/drivers/hwmon/hwmon-vid.c | |||
@@ -200,7 +200,7 @@ static u8 find_vrm(u8 eff_family, u8 eff_model, u8 eff_stepping, u8 vendor) | |||
200 | 200 | ||
201 | u8 vid_which_vrm(void) | 201 | u8 vid_which_vrm(void) |
202 | { | 202 | { |
203 | struct cpuinfo_x86 *c = cpu_data; | 203 | struct cpuinfo_x86 *c = &cpu_data(0); |
204 | u32 eax; | 204 | u32 eax; |
205 | u8 eff_family, eff_model, eff_stepping, vrm_ret; | 205 | u8 eff_family, eff_model, eff_stepping, vrm_ret; |
206 | 206 | ||
diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c index f207434730d..650b07d5b90 100644 --- a/drivers/hwmon/lm63.c +++ b/drivers/hwmon/lm63.c | |||
@@ -533,7 +533,7 @@ static void lm63_init_client(struct i2c_client *client) | |||
533 | 533 | ||
534 | /* Start converting if needed */ | 534 | /* Start converting if needed */ |
535 | if (data->config & 0x40) { /* standby */ | 535 | if (data->config & 0x40) { /* standby */ |
536 | dev_dbg(&client->dev, "Switching to operational mode"); | 536 | dev_dbg(&client->dev, "Switching to operational mode\n"); |
537 | data->config &= 0xA7; | 537 | data->config &= 0xA7; |
538 | i2c_smbus_write_byte_data(client, LM63_REG_CONFIG1, | 538 | i2c_smbus_write_byte_data(client, LM63_REG_CONFIG1, |
539 | data->config); | 539 | data->config); |
diff --git a/drivers/hwmon/sis5595.c b/drivers/hwmon/sis5595.c index 860b71ccbb8..7e2d9787bab 100644 --- a/drivers/hwmon/sis5595.c +++ b/drivers/hwmon/sis5595.c | |||
@@ -3,7 +3,7 @@ | |||
3 | for hardware monitoring | 3 | for hardware monitoring |
4 | 4 | ||
5 | Copyright (C) 1998 - 2001 Frodo Looijaard <frodol@dds.nl>, | 5 | Copyright (C) 1998 - 2001 Frodo Looijaard <frodol@dds.nl>, |
6 | Kyösti Mälkki <kmalkki@cc.hut.fi>, and | 6 | Kyösti Mälkki <kmalkki@cc.hut.fi>, and |
7 | Mark D. Studebaker <mdsxyz123@yahoo.com> | 7 | Mark D. Studebaker <mdsxyz123@yahoo.com> |
8 | Ported to Linux 2.6 by Aurelien Jarno <aurelien@aurel32.net> with | 8 | Ported to Linux 2.6 by Aurelien Jarno <aurelien@aurel32.net> with |
9 | the help of Jean Delvare <khali@linux-fr.org> | 9 | the help of Jean Delvare <khali@linux-fr.org> |
diff --git a/drivers/hwmon/via686a.c b/drivers/hwmon/via686a.c index 8f63dada601..2635bba1e3f 100644 --- a/drivers/hwmon/via686a.c +++ b/drivers/hwmon/via686a.c | |||
@@ -3,7 +3,7 @@ | |||
3 | for hardware monitoring | 3 | for hardware monitoring |
4 | 4 | ||
5 | Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>, | 5 | Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>, |
6 | Kyösti Mälkki <kmalkki@cc.hut.fi>, | 6 | Kyösti Mälkki <kmalkki@cc.hut.fi>, |
7 | Mark Studebaker <mdsxyz123@yahoo.com>, | 7 | Mark Studebaker <mdsxyz123@yahoo.com>, |
8 | and Bob Dougherty <bobd@stanford.edu> | 8 | and Bob Dougherty <bobd@stanford.edu> |
9 | (Some conversion-factor data were contributed by Jonathan Teh Soon Yew | 9 | (Some conversion-factor data were contributed by Jonathan Teh Soon Yew |
@@ -866,7 +866,7 @@ static void __exit sm_via686a_exit(void) | |||
866 | } | 866 | } |
867 | } | 867 | } |
868 | 868 | ||
869 | MODULE_AUTHOR("Kyösti Mälkki <kmalkki@cc.hut.fi>, " | 869 | MODULE_AUTHOR("Kyösti Mälkki <kmalkki@cc.hut.fi>, " |
870 | "Mark Studebaker <mdsxyz123@yahoo.com> " | 870 | "Mark Studebaker <mdsxyz123@yahoo.com> " |
871 | "and Bob Dougherty <bobd@stanford.edu>"); | 871 | "and Bob Dougherty <bobd@stanford.edu>"); |
872 | MODULE_DESCRIPTION("VIA 686A Sensor device"); | 872 | MODULE_DESCRIPTION("VIA 686A Sensor device"); |
diff --git a/drivers/hwmon/vt1211.c b/drivers/hwmon/vt1211.c index e69416465e6..7dfcc8dd316 100644 --- a/drivers/hwmon/vt1211.c +++ b/drivers/hwmon/vt1211.c | |||
@@ -795,7 +795,7 @@ static ssize_t set_pwm_auto_point_pwm(struct device *dev, | |||
795 | 795 | ||
796 | if ((val < 0) || (val > 255)) { | 796 | if ((val < 0) || (val > 255)) { |
797 | dev_err(dev, "pwm value %ld is out of range. " | 797 | dev_err(dev, "pwm value %ld is out of range. " |
798 | "Choose a value between 0 and 255." , val); | 798 | "Choose a value between 0 and 255.\n" , val); |
799 | return -EINVAL; | 799 | return -EINVAL; |
800 | } | 800 | } |
801 | 801 | ||
diff --git a/drivers/hwmon/w83791d.c b/drivers/hwmon/w83791d.c index b6f2ebf9f9c..a9c01a6f005 100644 --- a/drivers/hwmon/w83791d.c +++ b/drivers/hwmon/w83791d.c | |||
@@ -1096,7 +1096,7 @@ static int w83791d_detect(struct i2c_adapter *adapter, int address, int kind) | |||
1096 | if (kind == w83791d) { | 1096 | if (kind == w83791d) { |
1097 | client_name = "w83791d"; | 1097 | client_name = "w83791d"; |
1098 | } else { | 1098 | } else { |
1099 | dev_err(dev, "w83791d: Internal error: unknown kind (%d)?!?", | 1099 | dev_err(dev, "w83791d: Internal error: unknown kind (%d)?!?\n", |
1100 | kind); | 1100 | kind); |
1101 | goto error1; | 1101 | goto error1; |
1102 | } | 1102 | } |
diff --git a/drivers/hwmon/w83792d.c b/drivers/hwmon/w83792d.c index f836198b705..007449d3e16 100644 --- a/drivers/hwmon/w83792d.c +++ b/drivers/hwmon/w83792d.c | |||
@@ -1385,8 +1385,8 @@ w83792d_detect(struct i2c_adapter *adapter, int address, int kind) | |||
1385 | if (kind == w83792d) { | 1385 | if (kind == w83792d) { |
1386 | client_name = "w83792d"; | 1386 | client_name = "w83792d"; |
1387 | } else { | 1387 | } else { |
1388 | dev_err(dev, "w83792d: Internal error: unknown" | 1388 | dev_err(dev, "w83792d: Internal error: unknown kind (%d)?!?\n", |
1389 | " kind (%d)?!?", kind); | 1389 | kind); |
1390 | goto ERROR1; | 1390 | goto ERROR1; |
1391 | } | 1391 | } |
1392 | 1392 | ||
diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c index 7f0a0a62cf6..a37cb6b8593 100644 --- a/drivers/i2c/algos/i2c-algo-bit.c +++ b/drivers/i2c/algos/i2c-algo-bit.c | |||
@@ -18,7 +18,7 @@ | |||
18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | 18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
19 | /* ------------------------------------------------------------------------- */ | 19 | /* ------------------------------------------------------------------------- */ |
20 | 20 | ||
21 | /* With some changes from Frodo Looijaard <frodol@dds.nl>, Kyösti Mälkki | 21 | /* With some changes from Frodo Looijaard <frodol@dds.nl>, Kyösti Mälkki |
22 | <kmalkki@cc.hut.fi> and Jean Delvare <khali@linux-fr.org> */ | 22 | <kmalkki@cc.hut.fi> and Jean Delvare <khali@linux-fr.org> */ |
23 | 23 | ||
24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
diff --git a/drivers/i2c/algos/i2c-algo-pca.c b/drivers/i2c/algos/i2c-algo-pca.c index 36fdf971f08..2a16211f12e 100644 --- a/drivers/i2c/algos/i2c-algo-pca.c +++ b/drivers/i2c/algos/i2c-algo-pca.c | |||
@@ -350,7 +350,7 @@ static int pca_init(struct i2c_algo_pca_data *adap) | |||
350 | pca_outw(adap, I2C_PCA_ADR, own << 1); | 350 | pca_outw(adap, I2C_PCA_ADR, own << 1); |
351 | 351 | ||
352 | pca_set_con(adap, I2C_PCA_CON_ENSIO | clock); | 352 | pca_set_con(adap, I2C_PCA_CON_ENSIO | clock); |
353 | udelay(500); /* 500 µs for oscilator to stabilise */ | 353 | udelay(500); /* 500 µs for oscilator to stabilise */ |
354 | 354 | ||
355 | return 0; | 355 | return 0; |
356 | } | 356 | } |
diff --git a/drivers/i2c/algos/i2c-algo-pcf.c b/drivers/i2c/algos/i2c-algo-pcf.c index ecb2c2d7d54..ab2e6f3498b 100644 --- a/drivers/i2c/algos/i2c-algo-pcf.c +++ b/drivers/i2c/algos/i2c-algo-pcf.c | |||
@@ -19,7 +19,7 @@ | |||
19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | 19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
20 | /* ------------------------------------------------------------------------- */ | 20 | /* ------------------------------------------------------------------------- */ |
21 | 21 | ||
22 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and | 22 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and |
23 | Frodo Looijaard <frodol@dds.nl> ,and also from Martin Bailey | 23 | Frodo Looijaard <frodol@dds.nl> ,and also from Martin Bailey |
24 | <mbailey@littlefeet-inc.com> */ | 24 | <mbailey@littlefeet-inc.com> */ |
25 | 25 | ||
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig index de95c75efb4..c466c6cfc2e 100644 --- a/drivers/i2c/busses/Kconfig +++ b/drivers/i2c/busses/Kconfig | |||
@@ -278,7 +278,7 @@ config I2C_IXP2000 | |||
278 | depends on ARCH_IXP2000 | 278 | depends on ARCH_IXP2000 |
279 | select I2C_ALGOBIT | 279 | select I2C_ALGOBIT |
280 | help | 280 | help |
281 | Say Y here if you have an Intel IXP2000(2400, 2800, 2850) based | 281 | Say Y here if you have an Intel IXP2000 (2400, 2800, 2850) based |
282 | system and are using GPIO lines for an I2C bus. | 282 | system and are using GPIO lines for an I2C bus. |
283 | 283 | ||
284 | This support is also available as a module. If so, the module | 284 | This support is also available as a module. If so, the module |
@@ -293,8 +293,8 @@ config I2C_POWERMAC | |||
293 | default y | 293 | default y |
294 | help | 294 | help |
295 | This exposes the various PowerMac i2c interfaces to the linux i2c | 295 | This exposes the various PowerMac i2c interfaces to the linux i2c |
296 | layer and to userland. It is used by various drivers on the powemac | 296 | layer and to userland. It is used by various drivers on the PowerMac |
297 | platform, thus should generally be enabled. | 297 | platform, and should generally be enabled. |
298 | 298 | ||
299 | This support is also available as a module. If so, the module | 299 | This support is also available as a module. If so, the module |
300 | will be called i2c-powermac. | 300 | will be called i2c-powermac. |
@@ -438,12 +438,12 @@ config I2C_SIMTEC | |||
438 | tristate "Simtec Generic I2C interface" | 438 | tristate "Simtec Generic I2C interface" |
439 | select I2C_ALGOBIT | 439 | select I2C_ALGOBIT |
440 | help | 440 | help |
441 | If you say yes to this option, support will be inclyded for | 441 | If you say yes to this option, support will be included for |
442 | the Simtec Generic I2C interface. This driver is for the | 442 | the Simtec Generic I2C interface. This driver is for the |
443 | simple I2C bus used on newer Simtec products for general | 443 | simple I2C bus used on newer Simtec products for general |
444 | I2C, such as DDC on the Simtec BBD2016A. | 444 | I2C, such as DDC on the Simtec BBD2016A. |
445 | 445 | ||
446 | This driver can also be build as a module. If so, the module | 446 | This driver can also be built as a module. If so, the module |
447 | will be called i2c-simtec. | 447 | will be called i2c-simtec. |
448 | 448 | ||
449 | config SCx200_I2C | 449 | config SCx200_I2C |
diff --git a/drivers/i2c/busses/i2c-elektor.c b/drivers/i2c/busses/i2c-elektor.c index 804f0a551c0..b7a9977b025 100644 --- a/drivers/i2c/busses/i2c-elektor.c +++ b/drivers/i2c/busses/i2c-elektor.c | |||
@@ -19,7 +19,7 @@ | |||
19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | 19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
20 | /* ------------------------------------------------------------------------- */ | 20 | /* ------------------------------------------------------------------------- */ |
21 | 21 | ||
22 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even | 22 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even |
23 | Frodo Looijaard <frodol@dds.nl> */ | 23 | Frodo Looijaard <frodol@dds.nl> */ |
24 | 24 | ||
25 | /* Partialy rewriten by Oleg I. Vdovikin for mmapped support of | 25 | /* Partialy rewriten by Oleg I. Vdovikin for mmapped support of |
diff --git a/drivers/i2c/busses/i2c-hydra.c b/drivers/i2c/busses/i2c-hydra.c index 9832f773651..f9972f9651e 100644 --- a/drivers/i2c/busses/i2c-hydra.c +++ b/drivers/i2c/busses/i2c-hydra.c | |||
@@ -7,7 +7,7 @@ | |||
7 | Copyright (c) 1999-2004 Geert Uytterhoeven <geert@linux-m68k.org> | 7 | Copyright (c) 1999-2004 Geert Uytterhoeven <geert@linux-m68k.org> |
8 | 8 | ||
9 | Based on i2c Support for Via Technologies 82C586B South Bridge | 9 | Based on i2c Support for Via Technologies 82C586B South Bridge |
10 | Copyright (c) 1998, 1999 Kyösti Mälkki <kmalkki@cc.hut.fi> | 10 | Copyright (c) 1998, 1999 Kyösti Mälkki <kmalkki@cc.hut.fi> |
11 | 11 | ||
12 | This program is free software; you can redistribute it and/or modify | 12 | This program is free software; you can redistribute it and/or modify |
13 | it under the terms of the GNU General Public License as published by | 13 | it under the terms of the GNU General Public License as published by |
diff --git a/drivers/i2c/busses/i2c-ibm_iic.c b/drivers/i2c/busses/i2c-ibm_iic.c index e08bacadd6b..9b43ff7270d 100644 --- a/drivers/i2c/busses/i2c-ibm_iic.c +++ b/drivers/i2c/busses/i2c-ibm_iic.c | |||
@@ -18,7 +18,7 @@ | |||
18 | * Copyright 1995-97 Simon G. Vogl | 18 | * Copyright 1995-97 Simon G. Vogl |
19 | * 1998-99 Hans Berglund | 19 | * 1998-99 Hans Berglund |
20 | * | 20 | * |
21 | * With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> | 21 | * With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> |
22 | * and even Frodo Looijaard <frodol@dds.nl> | 22 | * and even Frodo Looijaard <frodol@dds.nl> |
23 | * | 23 | * |
24 | * This program is free software; you can redistribute it and/or modify it | 24 | * This program is free software; you can redistribute it and/or modify it |
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index e471e3bfdc1..89a30028ddb 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c | |||
@@ -8,7 +8,7 @@ | |||
8 | * Tony Lindgren <tony@atomide.com> and Imre Deak <imre.deak@nokia.com> | 8 | * Tony Lindgren <tony@atomide.com> and Imre Deak <imre.deak@nokia.com> |
9 | * Copyright (C) 2005 Nokia Corporation | 9 | * Copyright (C) 2005 Nokia Corporation |
10 | * | 10 | * |
11 | * Cleaned up by Juha Yrjölä <juha.yrjola@nokia.com> | 11 | * Cleaned up by Juha Yrjölä <juha.yrjola@nokia.com> |
12 | * | 12 | * |
13 | * This program is free software; you can redistribute it and/or modify | 13 | * This program is free software; you can redistribute it and/or modify |
14 | * it under the terms of the GNU General Public License as published by | 14 | * it under the terms of the GNU General Public License as published by |
diff --git a/drivers/i2c/busses/i2c-parport-light.c b/drivers/i2c/busses/i2c-parport-light.c index 49a95e2887b..c6faf9bdad1 100644 --- a/drivers/i2c/busses/i2c-parport-light.c +++ b/drivers/i2c/busses/i2c-parport-light.c | |||
@@ -7,7 +7,7 @@ | |||
7 | Copyright (C) 1995-2000 Simon G. Vogl | 7 | Copyright (C) 1995-2000 Simon G. Vogl |
8 | With some changes from: | 8 | With some changes from: |
9 | Frodo Looijaard <frodol@dds.nl> | 9 | Frodo Looijaard <frodol@dds.nl> |
10 | Kyösti Mälkki <kmalkki@cc.hut.fi> | 10 | Kyösti Mälkki <kmalkki@cc.hut.fi> |
11 | 11 | ||
12 | This program is free software; you can redistribute it and/or modify | 12 | This program is free software; you can redistribute it and/or modify |
13 | it under the terms of the GNU General Public License as published by | 13 | it under the terms of the GNU General Public License as published by |
diff --git a/drivers/i2c/busses/i2c-parport.c b/drivers/i2c/busses/i2c-parport.c index 039a07fde90..59ba2086d2f 100644 --- a/drivers/i2c/busses/i2c-parport.c +++ b/drivers/i2c/busses/i2c-parport.c | |||
@@ -7,7 +7,7 @@ | |||
7 | Copyright (C) 1995-2000 Simon G. Vogl | 7 | Copyright (C) 1995-2000 Simon G. Vogl |
8 | With some changes from: | 8 | With some changes from: |
9 | Frodo Looijaard <frodol@dds.nl> | 9 | Frodo Looijaard <frodol@dds.nl> |
10 | Kyösti Mälkki <kmalkki@cc.hut.fi> | 10 | Kyösti Mälkki <kmalkki@cc.hut.fi> |
11 | 11 | ||
12 | This program is free software; you can redistribute it and/or modify | 12 | This program is free software; you can redistribute it and/or modify |
13 | it under the terms of the GNU General Public License as published by | 13 | it under the terms of the GNU General Public License as published by |
diff --git a/drivers/i2c/busses/i2c-pmcmsp.c b/drivers/i2c/busses/i2c-pmcmsp.c index 17cecf1ea79..be99c02ecac 100644 --- a/drivers/i2c/busses/i2c-pmcmsp.c +++ b/drivers/i2c/busses/i2c-pmcmsp.c | |||
@@ -591,18 +591,18 @@ static int pmcmsptwi_master_xfer(struct i2c_adapter *adap, | |||
591 | if (msg->flags & I2C_M_TEN) | 591 | if (msg->flags & I2C_M_TEN) |
592 | pmcmsptwi_set_twi_config(&oldcfg, data); | 592 | pmcmsptwi_set_twi_config(&oldcfg, data); |
593 | 593 | ||
594 | dev_dbg(&adap->dev, "I2C %s of %d bytes ", | 594 | dev_dbg(&adap->dev, "I2C %s of %d bytes %s\n", |
595 | (msg->flags & I2C_M_RD) ? "read" : "write", msg->len); | 595 | (msg->flags & I2C_M_RD) ? "read" : "write", msg->len, |
596 | (ret == MSP_TWI_XFER_OK) ? "succeeded" : "failed"); | ||
597 | |||
596 | if (ret != MSP_TWI_XFER_OK) { | 598 | if (ret != MSP_TWI_XFER_OK) { |
597 | /* | 599 | /* |
598 | * TODO: We could potentially loop and retry in the case | 600 | * TODO: We could potentially loop and retry in the case |
599 | * of MSP_TWI_XFER_TIMEOUT. | 601 | * of MSP_TWI_XFER_TIMEOUT. |
600 | */ | 602 | */ |
601 | dev_dbg(&adap->dev, "failed\n"); | ||
602 | return -1; | 603 | return -1; |
603 | } | 604 | } |
604 | 605 | ||
605 | dev_dbg(&adap->dev, "succeeded\n"); | ||
606 | return 0; | 606 | return 0; |
607 | } | 607 | } |
608 | 608 | ||
diff --git a/drivers/i2c/busses/i2c-pnx.c b/drivers/i2c/busses/i2c-pnx.c index 17376feb1ac..f8d0dff0de7 100644 --- a/drivers/i2c/busses/i2c-pnx.c +++ b/drivers/i2c/busses/i2c-pnx.c | |||
@@ -575,7 +575,7 @@ static int __devinit i2c_pnx_probe(struct platform_device *pdev) | |||
575 | else { | 575 | else { |
576 | freq_mhz = PNX_DEFAULT_FREQ; | 576 | freq_mhz = PNX_DEFAULT_FREQ; |
577 | dev_info(&pdev->dev, "Setting bus frequency to default value: " | 577 | dev_info(&pdev->dev, "Setting bus frequency to default value: " |
578 | "%d MHz", freq_mhz); | 578 | "%d MHz\n", freq_mhz); |
579 | } | 579 | } |
580 | 580 | ||
581 | i2c_pnx->adapter->algo = &pnx_algorithm; | 581 | i2c_pnx->adapter->algo = &pnx_algorithm; |
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c index 00fad11733a..6426a61f8d4 100644 --- a/drivers/i2c/busses/i2c-pxa.c +++ b/drivers/i2c/busses/i2c-pxa.c | |||
@@ -85,7 +85,7 @@ struct bits { | |||
85 | const char *set; | 85 | const char *set; |
86 | const char *unset; | 86 | const char *unset; |
87 | }; | 87 | }; |
88 | #define BIT(m, s, u) { .mask = m, .set = s, .unset = u } | 88 | #define PXA_BIT(m, s, u) { .mask = m, .set = s, .unset = u } |
89 | 89 | ||
90 | static inline void | 90 | static inline void |
91 | decode_bits(const char *prefix, const struct bits *bits, int num, u32 val) | 91 | decode_bits(const char *prefix, const struct bits *bits, int num, u32 val) |
@@ -100,17 +100,17 @@ decode_bits(const char *prefix, const struct bits *bits, int num, u32 val) | |||
100 | } | 100 | } |
101 | 101 | ||
102 | static const struct bits isr_bits[] = { | 102 | static const struct bits isr_bits[] = { |
103 | BIT(ISR_RWM, "RX", "TX"), | 103 | PXA_BIT(ISR_RWM, "RX", "TX"), |
104 | BIT(ISR_ACKNAK, "NAK", "ACK"), | 104 | PXA_BIT(ISR_ACKNAK, "NAK", "ACK"), |
105 | BIT(ISR_UB, "Bsy", "Rdy"), | 105 | PXA_BIT(ISR_UB, "Bsy", "Rdy"), |
106 | BIT(ISR_IBB, "BusBsy", "BusRdy"), | 106 | PXA_BIT(ISR_IBB, "BusBsy", "BusRdy"), |
107 | BIT(ISR_SSD, "SlaveStop", NULL), | 107 | PXA_BIT(ISR_SSD, "SlaveStop", NULL), |
108 | BIT(ISR_ALD, "ALD", NULL), | 108 | PXA_BIT(ISR_ALD, "ALD", NULL), |
109 | BIT(ISR_ITE, "TxEmpty", NULL), | 109 | PXA_BIT(ISR_ITE, "TxEmpty", NULL), |
110 | BIT(ISR_IRF, "RxFull", NULL), | 110 | PXA_BIT(ISR_IRF, "RxFull", NULL), |
111 | BIT(ISR_GCAD, "GenCall", NULL), | 111 | PXA_BIT(ISR_GCAD, "GenCall", NULL), |
112 | BIT(ISR_SAD, "SlaveAddr", NULL), | 112 | PXA_BIT(ISR_SAD, "SlaveAddr", NULL), |
113 | BIT(ISR_BED, "BusErr", NULL), | 113 | PXA_BIT(ISR_BED, "BusErr", NULL), |
114 | }; | 114 | }; |
115 | 115 | ||
116 | static void decode_ISR(unsigned int val) | 116 | static void decode_ISR(unsigned int val) |
@@ -120,21 +120,21 @@ static void decode_ISR(unsigned int val) | |||
120 | } | 120 | } |
121 | 121 | ||
122 | static const struct bits icr_bits[] = { | 122 | static const struct bits icr_bits[] = { |
123 | BIT(ICR_START, "START", NULL), | 123 | PXA_BIT(ICR_START, "START", NULL), |
124 | BIT(ICR_STOP, "STOP", NULL), | 124 | PXA_BIT(ICR_STOP, "STOP", NULL), |
125 | BIT(ICR_ACKNAK, "ACKNAK", NULL), | 125 | PXA_BIT(ICR_ACKNAK, "ACKNAK", NULL), |
126 | BIT(ICR_TB, "TB", NULL), | 126 | PXA_BIT(ICR_TB, "TB", NULL), |
127 | BIT(ICR_MA, "MA", NULL), | 127 | PXA_BIT(ICR_MA, "MA", NULL), |
128 | BIT(ICR_SCLE, "SCLE", "scle"), | 128 | PXA_BIT(ICR_SCLE, "SCLE", "scle"), |
129 | BIT(ICR_IUE, "IUE", "iue"), | 129 | PXA_BIT(ICR_IUE, "IUE", "iue"), |
130 | BIT(ICR_GCD, "GCD", NULL), | 130 | PXA_BIT(ICR_GCD, "GCD", NULL), |
131 | BIT(ICR_ITEIE, "ITEIE", NULL), | 131 | PXA_BIT(ICR_ITEIE, "ITEIE", NULL), |
132 | BIT(ICR_IRFIE, "IRFIE", NULL), | 132 | PXA_BIT(ICR_IRFIE, "IRFIE", NULL), |
133 | BIT(ICR_BEIE, "BEIE", NULL), | 133 | PXA_BIT(ICR_BEIE, "BEIE", NULL), |
134 | BIT(ICR_SSDIE, "SSDIE", NULL), | 134 | PXA_BIT(ICR_SSDIE, "SSDIE", NULL), |
135 | BIT(ICR_ALDIE, "ALDIE", NULL), | 135 | PXA_BIT(ICR_ALDIE, "ALDIE", NULL), |
136 | BIT(ICR_SADIE, "SADIE", NULL), | 136 | PXA_BIT(ICR_SADIE, "SADIE", NULL), |
137 | BIT(ICR_UR, "UR", "ur"), | 137 | PXA_BIT(ICR_UR, "UR", "ur"), |
138 | }; | 138 | }; |
139 | 139 | ||
140 | static void decode_ICR(unsigned int val) | 140 | static void decode_ICR(unsigned int val) |
diff --git a/drivers/i2c/busses/i2c-via.c b/drivers/i2c/busses/i2c-via.c index 81520868797..61716f6b14d 100644 --- a/drivers/i2c/busses/i2c-via.c +++ b/drivers/i2c/busses/i2c-via.c | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | i2c Support for Via Technologies 82C586B South Bridge | 5 | i2c Support for Via Technologies 82C586B South Bridge |
6 | 6 | ||
7 | Copyright (c) 1998, 1999 Kyösti Mälkki <kmalkki@cc.hut.fi> | 7 | Copyright (c) 1998, 1999 Kyösti Mälkki <kmalkki@cc.hut.fi> |
8 | 8 | ||
9 | 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 |
10 | it under the terms of the GNU General Public License as published by | 10 | it under the terms of the GNU General Public License as published by |
@@ -176,7 +176,7 @@ static void __exit i2c_vt586b_exit(void) | |||
176 | } | 176 | } |
177 | 177 | ||
178 | 178 | ||
179 | MODULE_AUTHOR("Kyösti Mälkki <kmalkki@cc.hut.fi>"); | 179 | MODULE_AUTHOR("Kyösti Mälkki <kmalkki@cc.hut.fi>"); |
180 | MODULE_DESCRIPTION("i2c for Via vt82c586b southbridge"); | 180 | MODULE_DESCRIPTION("i2c for Via vt82c586b southbridge"); |
181 | MODULE_LICENSE("GPL"); | 181 | MODULE_LICENSE("GPL"); |
182 | 182 | ||
diff --git a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c index edc275002f8..c9ce77f13c0 100644 --- a/drivers/i2c/busses/i2c-viapro.c +++ b/drivers/i2c/busses/i2c-viapro.c | |||
@@ -2,7 +2,7 @@ | |||
2 | i2c-viapro.c - Part of lm_sensors, Linux kernel modules for hardware | 2 | i2c-viapro.c - Part of lm_sensors, Linux kernel modules for hardware |
3 | monitoring | 3 | monitoring |
4 | Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>, | 4 | Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>, |
5 | Philip Edelbrock <phil@netroedge.com>, Kyösti Mälkki <kmalkki@cc.hut.fi>, | 5 | Philip Edelbrock <phil@netroedge.com>, Kyösti Mälkki <kmalkki@cc.hut.fi>, |
6 | Mark D. Studebaker <mdsxyz123@yahoo.com> | 6 | Mark D. Studebaker <mdsxyz123@yahoo.com> |
7 | Copyright (C) 2005 - 2007 Jean Delvare <khali@linux-fr.org> | 7 | Copyright (C) 2005 - 2007 Jean Delvare <khali@linux-fr.org> |
8 | 8 | ||
diff --git a/drivers/i2c/chips/menelaus.c b/drivers/i2c/chips/menelaus.c index 66436bae11a..2dea0123a95 100644 --- a/drivers/i2c/chips/menelaus.c +++ b/drivers/i2c/chips/menelaus.c | |||
@@ -1195,7 +1195,7 @@ static int menelaus_probe(struct i2c_client *client) | |||
1195 | err = request_irq(client->irq, menelaus_irq, IRQF_DISABLED, | 1195 | err = request_irq(client->irq, menelaus_irq, IRQF_DISABLED, |
1196 | DRIVER_NAME, menelaus); | 1196 | DRIVER_NAME, menelaus); |
1197 | if (err) { | 1197 | if (err) { |
1198 | dev_dbg(&client->dev, "can't get IRQ %d, err %d", | 1198 | dev_dbg(&client->dev, "can't get IRQ %d, err %d\n", |
1199 | client->irq, err); | 1199 | client->irq, err); |
1200 | goto fail1; | 1200 | goto fail1; |
1201 | } | 1201 | } |
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index e73d58c43f3..1a4e8dc03b3 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c | |||
@@ -17,7 +17,7 @@ | |||
17 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | 17 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
18 | /* ------------------------------------------------------------------------- */ | 18 | /* ------------------------------------------------------------------------- */ |
19 | 19 | ||
20 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>. | 20 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>. |
21 | All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl> | 21 | All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl> |
22 | SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and | 22 | SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and |
23 | Jean Delvare <khali@linux-fr.org> */ | 23 | Jean Delvare <khali@linux-fr.org> */ |
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig index 6d9fd92763f..6eaece96524 100644 --- a/drivers/ide/Kconfig +++ b/drivers/ide/Kconfig | |||
@@ -1056,6 +1056,9 @@ endif | |||
1056 | config BLK_DEV_IDEDMA | 1056 | config BLK_DEV_IDEDMA |
1057 | def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA | 1057 | def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA |
1058 | 1058 | ||
1059 | config IDE_ARCH_OBSOLETE_INIT | ||
1060 | def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC | ||
1061 | |||
1059 | endif | 1062 | endif |
1060 | 1063 | ||
1061 | config BLK_DEV_HD_ONLY | 1064 | config BLK_DEV_HD_ONLY |
diff --git a/drivers/ide/arm/bast-ide.c b/drivers/ide/arm/bast-ide.c index f7449d04114..48db6167bb9 100644 --- a/drivers/ide/arm/bast-ide.c +++ b/drivers/ide/arm/bast-ide.c | |||
@@ -45,7 +45,7 @@ bastide_register(unsigned int base, unsigned int aux, int irq, | |||
45 | hw.io_ports[IDE_CONTROL_OFFSET] = aux + (6 * 0x20); | 45 | hw.io_ports[IDE_CONTROL_OFFSET] = aux + (6 * 0x20); |
46 | hw.irq = irq; | 46 | hw.irq = irq; |
47 | 47 | ||
48 | ide_register_hw(&hw, 0, hwif); | 48 | ide_register_hw(&hw, NULL, 0, hwif); |
49 | 49 | ||
50 | return 0; | 50 | return 0; |
51 | } | 51 | } |
diff --git a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c index e4875cef78b..410a0d13e35 100644 --- a/drivers/ide/arm/icside.c +++ b/drivers/ide/arm/icside.c | |||
@@ -316,27 +316,29 @@ static int icside_dma_end(ide_drive_t *drive) | |||
316 | 316 | ||
317 | drive->waiting_for_dma = 0; | 317 | drive->waiting_for_dma = 0; |
318 | 318 | ||
319 | disable_dma(hwif->hw.dma); | 319 | disable_dma(state->dev->dma); |
320 | 320 | ||
321 | /* Teardown mappings after DMA has completed. */ | 321 | /* Teardown mappings after DMA has completed. */ |
322 | dma_unmap_sg(state->dev, hwif->sg_table, hwif->sg_nents, | 322 | dma_unmap_sg(state->dev, hwif->sg_table, hwif->sg_nents, |
323 | hwif->sg_dma_direction); | 323 | hwif->sg_dma_direction); |
324 | 324 | ||
325 | return get_dma_residue(hwif->hw.dma) != 0; | 325 | return get_dma_residue(state->dev->dma) != 0; |
326 | } | 326 | } |
327 | 327 | ||
328 | static void icside_dma_start(ide_drive_t *drive) | 328 | static void icside_dma_start(ide_drive_t *drive) |
329 | { | 329 | { |
330 | ide_hwif_t *hwif = HWIF(drive); | 330 | ide_hwif_t *hwif = HWIF(drive); |
331 | struct icside_state *state = hwif->hwif_data; | ||
331 | 332 | ||
332 | /* We can not enable DMA on both channels simultaneously. */ | 333 | /* We can not enable DMA on both channels simultaneously. */ |
333 | BUG_ON(dma_channel_active(hwif->hw.dma)); | 334 | BUG_ON(dma_channel_active(state->dev->dma)); |
334 | enable_dma(hwif->hw.dma); | 335 | enable_dma(state->dev->dma); |
335 | } | 336 | } |
336 | 337 | ||
337 | static int icside_dma_setup(ide_drive_t *drive) | 338 | static int icside_dma_setup(ide_drive_t *drive) |
338 | { | 339 | { |
339 | ide_hwif_t *hwif = HWIF(drive); | 340 | ide_hwif_t *hwif = HWIF(drive); |
341 | struct icside_state *state = hwif->hwif_data; | ||
340 | struct request *rq = hwif->hwgroup->rq; | 342 | struct request *rq = hwif->hwgroup->rq; |
341 | unsigned int dma_mode; | 343 | unsigned int dma_mode; |
342 | 344 | ||
@@ -348,7 +350,7 @@ static int icside_dma_setup(ide_drive_t *drive) | |||
348 | /* | 350 | /* |
349 | * We can not enable DMA on both channels. | 351 | * We can not enable DMA on both channels. |
350 | */ | 352 | */ |
351 | BUG_ON(dma_channel_active(hwif->hw.dma)); | 353 | BUG_ON(dma_channel_active(state->dev->dma)); |
352 | 354 | ||
353 | icside_build_sglist(drive, rq); | 355 | icside_build_sglist(drive, rq); |
354 | 356 | ||
@@ -365,14 +367,14 @@ static int icside_dma_setup(ide_drive_t *drive) | |||
365 | /* | 367 | /* |
366 | * Select the correct timing for this drive. | 368 | * Select the correct timing for this drive. |
367 | */ | 369 | */ |
368 | set_dma_speed(hwif->hw.dma, drive->drive_data); | 370 | set_dma_speed(state->dev->dma, drive->drive_data); |
369 | 371 | ||
370 | /* | 372 | /* |
371 | * Tell the DMA engine about the SG table and | 373 | * Tell the DMA engine about the SG table and |
372 | * data direction. | 374 | * data direction. |
373 | */ | 375 | */ |
374 | set_dma_sg(hwif->hw.dma, hwif->sg_table, hwif->sg_nents); | 376 | set_dma_sg(state->dev->dma, hwif->sg_table, hwif->sg_nents); |
375 | set_dma_mode(hwif->hw.dma, dma_mode); | 377 | set_dma_mode(state->dev->dma, dma_mode); |
376 | 378 | ||
377 | drive->waiting_for_dma = 1; | 379 | drive->waiting_for_dma = 1; |
378 | 380 | ||
@@ -415,7 +417,6 @@ static void icside_dma_lost_irq(ide_drive_t *drive) | |||
415 | 417 | ||
416 | static void icside_dma_init(ide_hwif_t *hwif) | 418 | static void icside_dma_init(ide_hwif_t *hwif) |
417 | { | 419 | { |
418 | hwif->atapi_dma = 1; | ||
419 | hwif->mwdma_mask = 7; /* MW0..2 */ | 420 | hwif->mwdma_mask = 7; /* MW0..2 */ |
420 | hwif->swdma_mask = 7; /* SW0..2 */ | 421 | hwif->swdma_mask = 7; /* SW0..2 */ |
421 | 422 | ||
@@ -439,40 +440,16 @@ static void icside_dma_init(ide_hwif_t *hwif) | |||
439 | #define icside_dma_init(hwif) (0) | 440 | #define icside_dma_init(hwif) (0) |
440 | #endif | 441 | #endif |
441 | 442 | ||
442 | static ide_hwif_t *icside_find_hwif(unsigned long dataport) | ||
443 | { | ||
444 | ide_hwif_t *hwif; | ||
445 | int index; | ||
446 | |||
447 | for (index = 0; index < MAX_HWIFS; ++index) { | ||
448 | hwif = &ide_hwifs[index]; | ||
449 | if (hwif->io_ports[IDE_DATA_OFFSET] == dataport) | ||
450 | goto found; | ||
451 | } | ||
452 | |||
453 | for (index = 0; index < MAX_HWIFS; ++index) { | ||
454 | hwif = &ide_hwifs[index]; | ||
455 | if (!hwif->io_ports[IDE_DATA_OFFSET]) | ||
456 | goto found; | ||
457 | } | ||
458 | |||
459 | hwif = NULL; | ||
460 | found: | ||
461 | return hwif; | ||
462 | } | ||
463 | |||
464 | static ide_hwif_t * | 443 | static ide_hwif_t * |
465 | icside_setup(void __iomem *base, struct cardinfo *info, struct expansion_card *ec) | 444 | icside_setup(void __iomem *base, struct cardinfo *info, struct expansion_card *ec) |
466 | { | 445 | { |
467 | unsigned long port = (unsigned long)base + info->dataoffset; | 446 | unsigned long port = (unsigned long)base + info->dataoffset; |
468 | ide_hwif_t *hwif; | 447 | ide_hwif_t *hwif; |
469 | 448 | ||
470 | hwif = icside_find_hwif(port); | 449 | hwif = ide_find_port(port); |
471 | if (hwif) { | 450 | if (hwif) { |
472 | int i; | 451 | int i; |
473 | 452 | ||
474 | memset(&hwif->hw, 0, sizeof(hw_regs_t)); | ||
475 | |||
476 | /* | 453 | /* |
477 | * Ensure we're using MMIO | 454 | * Ensure we're using MMIO |
478 | */ | 455 | */ |
@@ -480,13 +457,10 @@ icside_setup(void __iomem *base, struct cardinfo *info, struct expansion_card *e | |||
480 | hwif->mmio = 1; | 457 | hwif->mmio = 1; |
481 | 458 | ||
482 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { | 459 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { |
483 | hwif->hw.io_ports[i] = port; | ||
484 | hwif->io_ports[i] = port; | 460 | hwif->io_ports[i] = port; |
485 | port += 1 << info->stepping; | 461 | port += 1 << info->stepping; |
486 | } | 462 | } |
487 | hwif->hw.io_ports[IDE_CONTROL_OFFSET] = (unsigned long)base + info->ctrloffset; | ||
488 | hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)base + info->ctrloffset; | 463 | hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)base + info->ctrloffset; |
489 | hwif->hw.irq = ec->irq; | ||
490 | hwif->irq = ec->irq; | 464 | hwif->irq = ec->irq; |
491 | hwif->noprobe = 0; | 465 | hwif->noprobe = 0; |
492 | hwif->chipset = ide_acorn; | 466 | hwif->chipset = ide_acorn; |
@@ -501,6 +475,7 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec) | |||
501 | { | 475 | { |
502 | ide_hwif_t *hwif; | 476 | ide_hwif_t *hwif; |
503 | void __iomem *base; | 477 | void __iomem *base; |
478 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
504 | 479 | ||
505 | base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0); | 480 | base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0); |
506 | if (!base) | 481 | if (!base) |
@@ -524,9 +499,9 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec) | |||
524 | 499 | ||
525 | state->hwif[0] = hwif; | 500 | state->hwif[0] = hwif; |
526 | 501 | ||
527 | probe_hwif_init(hwif); | 502 | idx[0] = hwif->index; |
528 | 503 | ||
529 | ide_proc_register_port(hwif); | 504 | ide_device_add(idx); |
530 | 505 | ||
531 | return 0; | 506 | return 0; |
532 | } | 507 | } |
@@ -538,6 +513,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec) | |||
538 | void __iomem *ioc_base, *easi_base; | 513 | void __iomem *ioc_base, *easi_base; |
539 | unsigned int sel = 0; | 514 | unsigned int sel = 0; |
540 | int ret; | 515 | int ret; |
516 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
541 | 517 | ||
542 | ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0); | 518 | ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0); |
543 | if (!ioc_base) { | 519 | if (!ioc_base) { |
@@ -593,7 +569,6 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec) | |||
593 | hwif->serialized = 1; | 569 | hwif->serialized = 1; |
594 | hwif->config_data = (unsigned long)ioc_base; | 570 | hwif->config_data = (unsigned long)ioc_base; |
595 | hwif->select_data = sel; | 571 | hwif->select_data = sel; |
596 | hwif->hw.dma = ec->dma; | ||
597 | 572 | ||
598 | mate->maskproc = icside_maskproc; | 573 | mate->maskproc = icside_maskproc; |
599 | mate->channel = 1; | 574 | mate->channel = 1; |
@@ -602,18 +577,16 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec) | |||
602 | mate->serialized = 1; | 577 | mate->serialized = 1; |
603 | mate->config_data = (unsigned long)ioc_base; | 578 | mate->config_data = (unsigned long)ioc_base; |
604 | mate->select_data = sel | 1; | 579 | mate->select_data = sel | 1; |
605 | mate->hw.dma = ec->dma; | ||
606 | 580 | ||
607 | if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) { | 581 | if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) { |
608 | icside_dma_init(hwif); | 582 | icside_dma_init(hwif); |
609 | icside_dma_init(mate); | 583 | icside_dma_init(mate); |
610 | } | 584 | } |
611 | 585 | ||
612 | probe_hwif_init(hwif); | 586 | idx[0] = hwif->index; |
613 | probe_hwif_init(mate); | 587 | idx[1] = mate->index; |
614 | 588 | ||
615 | ide_proc_register_port(hwif); | 589 | ide_device_add(idx); |
616 | ide_proc_register_port(mate); | ||
617 | 590 | ||
618 | return 0; | 591 | return 0; |
619 | 592 | ||
diff --git a/drivers/ide/arm/ide_arm.c b/drivers/ide/arm/ide_arm.c index bce2bec8141..8957cbadf5c 100644 --- a/drivers/ide/arm/ide_arm.c +++ b/drivers/ide/arm/ide_arm.c | |||
@@ -31,5 +31,5 @@ void __init ide_arm_init(void) | |||
31 | memset(&hw, 0, sizeof(hw)); | 31 | memset(&hw, 0, sizeof(hw)); |
32 | ide_std_init_ports(&hw, IDE_ARM_IO, IDE_ARM_IO + 0x206); | 32 | ide_std_init_ports(&hw, IDE_ARM_IO, IDE_ARM_IO + 0x206); |
33 | hw.irq = IDE_ARM_IRQ; | 33 | hw.irq = IDE_ARM_IRQ; |
34 | ide_register_hw(&hw, 1, NULL); | 34 | ide_register_hw(&hw, NULL, 1, NULL); |
35 | } | 35 | } |
diff --git a/drivers/ide/arm/rapide.c b/drivers/ide/arm/rapide.c index 83811af1161..0775a3afef4 100644 --- a/drivers/ide/arm/rapide.c +++ b/drivers/ide/arm/rapide.c | |||
@@ -13,42 +13,25 @@ | |||
13 | 13 | ||
14 | #include <asm/ecard.h> | 14 | #include <asm/ecard.h> |
15 | 15 | ||
16 | /* | ||
17 | * Something like this really should be in generic code, but isn't. | ||
18 | */ | ||
19 | static ide_hwif_t * | 16 | static ide_hwif_t * |
20 | rapide_locate_hwif(void __iomem *base, void __iomem *ctrl, unsigned int sz, int irq) | 17 | rapide_locate_hwif(void __iomem *base, void __iomem *ctrl, unsigned int sz, int irq) |
21 | { | 18 | { |
22 | unsigned long port = (unsigned long)base; | 19 | unsigned long port = (unsigned long)base; |
23 | ide_hwif_t *hwif; | 20 | ide_hwif_t *hwif = ide_find_port(port); |
24 | int index, i; | 21 | int i; |
25 | |||
26 | for (index = 0; index < MAX_HWIFS; ++index) { | ||
27 | hwif = ide_hwifs + index; | ||
28 | if (hwif->io_ports[IDE_DATA_OFFSET] == port) | ||
29 | goto found; | ||
30 | } | ||
31 | |||
32 | for (index = 0; index < MAX_HWIFS; ++index) { | ||
33 | hwif = ide_hwifs + index; | ||
34 | if (hwif->io_ports[IDE_DATA_OFFSET] == 0) | ||
35 | goto found; | ||
36 | } | ||
37 | 22 | ||
38 | return NULL; | 23 | if (hwif == NULL) |
24 | goto out; | ||
39 | 25 | ||
40 | found: | ||
41 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { | 26 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { |
42 | hwif->hw.io_ports[i] = port; | ||
43 | hwif->io_ports[i] = port; | 27 | hwif->io_ports[i] = port; |
44 | port += sz; | 28 | port += sz; |
45 | } | 29 | } |
46 | hwif->hw.io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl; | ||
47 | hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl; | 30 | hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl; |
48 | hwif->hw.irq = hwif->irq = irq; | 31 | hwif->irq = irq; |
49 | hwif->mmio = 1; | 32 | hwif->mmio = 1; |
50 | default_hwif_mmiops(hwif); | 33 | default_hwif_mmiops(hwif); |
51 | 34 | out: | |
52 | return hwif; | 35 | return hwif; |
53 | } | 36 | } |
54 | 37 | ||
@@ -58,6 +41,7 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id) | |||
58 | ide_hwif_t *hwif; | 41 | ide_hwif_t *hwif; |
59 | void __iomem *base; | 42 | void __iomem *base; |
60 | int ret; | 43 | int ret; |
44 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
61 | 45 | ||
62 | ret = ecard_request_resources(ec); | 46 | ret = ecard_request_resources(ec); |
63 | if (ret) | 47 | if (ret) |
@@ -74,8 +58,11 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id) | |||
74 | hwif->hwif_data = base; | 58 | hwif->hwif_data = base; |
75 | hwif->gendev.parent = &ec->dev; | 59 | hwif->gendev.parent = &ec->dev; |
76 | hwif->noprobe = 0; | 60 | hwif->noprobe = 0; |
77 | probe_hwif_init(hwif); | 61 | |
78 | ide_proc_register_port(hwif); | 62 | idx[0] = hwif->index; |
63 | |||
64 | ide_device_add(idx); | ||
65 | |||
79 | ecard_set_drvdata(ec, hwif); | 66 | ecard_set_drvdata(ec, hwif); |
80 | goto out; | 67 | goto out; |
81 | } | 68 | } |
diff --git a/drivers/ide/cris/ide-cris.c b/drivers/ide/cris/ide-cris.c index 06c75f18eb8..ff20377b4c8 100644 --- a/drivers/ide/cris/ide-cris.c +++ b/drivers/ide/cris/ide-cris.c | |||
@@ -782,7 +782,7 @@ init_e100_ide (void) | |||
782 | ide_offsets, | 782 | ide_offsets, |
783 | 0, 0, cris_ide_ack_intr, | 783 | 0, 0, cris_ide_ack_intr, |
784 | ide_default_irq(0)); | 784 | ide_default_irq(0)); |
785 | ide_register_hw(&hw, 1, &hwif); | 785 | ide_register_hw(&hw, NULL, 1, &hwif); |
786 | hwif->mmio = 1; | 786 | hwif->mmio = 1; |
787 | hwif->chipset = ide_etrax100; | 787 | hwif->chipset = ide_etrax100; |
788 | hwif->set_pio_mode = &cris_set_pio_mode; | 788 | hwif->set_pio_mode = &cris_set_pio_mode; |
@@ -805,6 +805,7 @@ init_e100_ide (void) | |||
805 | hwif->dma_host_on = &cris_dma_on; | 805 | hwif->dma_host_on = &cris_dma_on; |
806 | hwif->dma_off_quietly = &cris_dma_off; | 806 | hwif->dma_off_quietly = &cris_dma_off; |
807 | hwif->cbl = ATA_CBL_PATA40; | 807 | hwif->cbl = ATA_CBL_PATA40; |
808 | hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA; | ||
808 | hwif->pio_mask = ATA_PIO4, | 809 | hwif->pio_mask = ATA_PIO4, |
809 | hwif->drives[0].autotune = 1; | 810 | hwif->drives[0].autotune = 1; |
810 | hwif->drives[1].autotune = 1; | 811 | hwif->drives[1].autotune = 1; |
diff --git a/drivers/ide/h8300/ide-h8300.c b/drivers/ide/h8300/ide-h8300.c index 6d26ad7360d..4a49b5c59ac 100644 --- a/drivers/ide/h8300/ide-h8300.c +++ b/drivers/ide/h8300/ide-h8300.c | |||
@@ -68,7 +68,6 @@ static inline void hw_setup(hw_regs_t *hw) | |||
68 | hw->io_ports[i] = CONFIG_H8300_IDE_BASE + H8300_IDE_GAP*i; | 68 | hw->io_ports[i] = CONFIG_H8300_IDE_BASE + H8300_IDE_GAP*i; |
69 | hw->io_ports[IDE_CONTROL_OFFSET] = CONFIG_H8300_IDE_ALT; | 69 | hw->io_ports[IDE_CONTROL_OFFSET] = CONFIG_H8300_IDE_ALT; |
70 | hw->irq = EXT_IRQ0 + CONFIG_H8300_IDE_IRQ; | 70 | hw->irq = EXT_IRQ0 + CONFIG_H8300_IDE_IRQ; |
71 | hw->dma = NO_DMA; | ||
72 | hw->chipset = ide_generic; | 71 | hw->chipset = ide_generic; |
73 | } | 72 | } |
74 | 73 | ||
@@ -101,7 +100,7 @@ void __init h8300_ide_init(void) | |||
101 | hw_setup(&hw); | 100 | hw_setup(&hw); |
102 | 101 | ||
103 | /* register if */ | 102 | /* register if */ |
104 | idx = ide_register_hw(&hw, 1, &hwif); | 103 | idx = ide_register_hw(&hw, NULL, 1, &hwif); |
105 | if (idx == -1) { | 104 | if (idx == -1) { |
106 | printk(KERN_ERR "ide-h8300: IDE I/F register failed\n"); | 105 | printk(KERN_ERR "ide-h8300: IDE I/F register failed\n"); |
107 | return; | 106 | return; |
diff --git a/drivers/ide/ide-acpi.c b/drivers/ide/ide-acpi.c index 1d5f6823101..89df48fdc69 100644 --- a/drivers/ide/ide-acpi.c +++ b/drivers/ide/ide-acpi.c | |||
@@ -350,7 +350,7 @@ static int taskfile_load_raw(ide_drive_t *drive, | |||
350 | 350 | ||
351 | memset(&args, 0, sizeof(ide_task_t)); | 351 | memset(&args, 0, sizeof(ide_task_t)); |
352 | args.command_type = IDE_DRIVE_TASK_NO_DATA; | 352 | args.command_type = IDE_DRIVE_TASK_NO_DATA; |
353 | args.data_phase = TASKFILE_IN; | 353 | args.data_phase = TASKFILE_NO_DATA; |
354 | args.handler = &task_no_data_intr; | 354 | args.handler = &task_no_data_intr; |
355 | 355 | ||
356 | /* convert gtf to IDE Taskfile */ | 356 | /* convert gtf to IDE Taskfile */ |
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index ca843522f91..57a5f63d6ae 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
@@ -120,7 +120,7 @@ | |||
120 | * Reformat to match kernel tabbing style. | 120 | * Reformat to match kernel tabbing style. |
121 | * Add CDROM_GET_UPC ioctl. | 121 | * Add CDROM_GET_UPC ioctl. |
122 | * 3.10 Apr 10, 1996 -- Fix compilation error with STANDARD_ATAPI. | 122 | * 3.10 Apr 10, 1996 -- Fix compilation error with STANDARD_ATAPI. |
123 | * 3.11 Apr 29, 1996 -- Patch from Heiko Eissfeldt <heiko@colossus.escape.de> | 123 | * 3.11 Apr 29, 1996 -- Patch from Heiko Eißfeldt <heiko@colossus.escape.de> |
124 | * to remove redundant verify_area calls. | 124 | * to remove redundant verify_area calls. |
125 | * 3.12 May 7, 1996 -- Rudimentary changer support. Based on patches | 125 | * 3.12 May 7, 1996 -- Rudimentary changer support. Based on patches |
126 | * from Gerhard Zuber <zuber@berlin.snafu.de>. | 126 | * from Gerhard Zuber <zuber@berlin.snafu.de>. |
@@ -256,7 +256,7 @@ | |||
256 | * - Minimize the TOC reading - only do it when we | 256 | * - Minimize the TOC reading - only do it when we |
257 | * know a media change has occurred. | 257 | * know a media change has occurred. |
258 | * - Moved all the CDROMREADx ioctls to the Uniform layer. | 258 | * - Moved all the CDROMREADx ioctls to the Uniform layer. |
259 | * - Heiko Eissfeldt <heiko@colossus.escape.de> supplied | 259 | * - Heiko Eißfeldt <heiko@colossus.escape.de> supplied |
260 | * some fixes for CDI. | 260 | * some fixes for CDI. |
261 | * - CD-ROM leaving door locked fix from Andries | 261 | * - CD-ROM leaving door locked fix from Andries |
262 | * Brouwer <Andries.Brouwer@cwi.nl> | 262 | * Brouwer <Andries.Brouwer@cwi.nl> |
@@ -2341,7 +2341,7 @@ static int cdrom_read_toc(ide_drive_t *drive, struct request_sense *sense) | |||
2341 | If we get an error for the regular case, we assume | 2341 | If we get an error for the regular case, we assume |
2342 | a CDI without additional audio tracks. In this case | 2342 | a CDI without additional audio tracks. In this case |
2343 | the readable TOC is empty (CDI tracks are not included) | 2343 | the readable TOC is empty (CDI tracks are not included) |
2344 | and only holds the Leadout entry. Heiko Eißfeldt */ | 2344 | and only holds the Leadout entry. Heiko Eißfeldt */ |
2345 | ntracks = 0; | 2345 | ntracks = 0; |
2346 | stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0, | 2346 | stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0, |
2347 | (char *)&toc->hdr, | 2347 | (char *)&toc->hdr, |
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 92177ca48b4..00123d99527 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c | |||
@@ -169,7 +169,7 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, | |||
169 | 169 | ||
170 | nsectors.all = (u16) rq->nr_sectors; | 170 | nsectors.all = (u16) rq->nr_sectors; |
171 | 171 | ||
172 | if (hwif->no_lba48_dma && lba48 && dma) { | 172 | if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && lba48 && dma) { |
173 | if (block + rq->nr_sectors > 1ULL << 28) | 173 | if (block + rq->nr_sectors > 1ULL << 28) |
174 | dma = 0; | 174 | dma = 0; |
175 | else | 175 | else |
@@ -593,28 +593,12 @@ static int smart_enable(ide_drive_t *drive) | |||
593 | return ide_raw_taskfile(drive, &args, NULL); | 593 | return ide_raw_taskfile(drive, &args, NULL); |
594 | } | 594 | } |
595 | 595 | ||
596 | static int get_smart_values(ide_drive_t *drive, u8 *buf) | 596 | static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd) |
597 | { | 597 | { |
598 | ide_task_t args; | 598 | ide_task_t args; |
599 | 599 | ||
600 | memset(&args, 0, sizeof(ide_task_t)); | 600 | memset(&args, 0, sizeof(ide_task_t)); |
601 | args.tfRegister[IDE_FEATURE_OFFSET] = SMART_READ_VALUES; | 601 | args.tfRegister[IDE_FEATURE_OFFSET] = sub_cmd; |
602 | args.tfRegister[IDE_NSECTOR_OFFSET] = 0x01; | ||
603 | args.tfRegister[IDE_LCYL_OFFSET] = SMART_LCYL_PASS; | ||
604 | args.tfRegister[IDE_HCYL_OFFSET] = SMART_HCYL_PASS; | ||
605 | args.tfRegister[IDE_COMMAND_OFFSET] = WIN_SMART; | ||
606 | args.command_type = IDE_DRIVE_TASK_IN; | ||
607 | args.data_phase = TASKFILE_IN; | ||
608 | args.handler = &task_in_intr; | ||
609 | (void) smart_enable(drive); | ||
610 | return ide_raw_taskfile(drive, &args, buf); | ||
611 | } | ||
612 | |||
613 | static int get_smart_thresholds(ide_drive_t *drive, u8 *buf) | ||
614 | { | ||
615 | ide_task_t args; | ||
616 | memset(&args, 0, sizeof(ide_task_t)); | ||
617 | args.tfRegister[IDE_FEATURE_OFFSET] = SMART_READ_THRESHOLDS; | ||
618 | args.tfRegister[IDE_NSECTOR_OFFSET] = 0x01; | 602 | args.tfRegister[IDE_NSECTOR_OFFSET] = 0x01; |
619 | args.tfRegister[IDE_LCYL_OFFSET] = SMART_LCYL_PASS; | 603 | args.tfRegister[IDE_LCYL_OFFSET] = SMART_LCYL_PASS; |
620 | args.tfRegister[IDE_HCYL_OFFSET] = SMART_HCYL_PASS; | 604 | args.tfRegister[IDE_HCYL_OFFSET] = SMART_HCYL_PASS; |
@@ -656,7 +640,7 @@ static int proc_idedisk_read_smart_thresholds | |||
656 | ide_drive_t *drive = (ide_drive_t *)data; | 640 | ide_drive_t *drive = (ide_drive_t *)data; |
657 | int len = 0, i = 0; | 641 | int len = 0, i = 0; |
658 | 642 | ||
659 | if (!get_smart_thresholds(drive, page)) { | 643 | if (get_smart_data(drive, page, SMART_READ_THRESHOLDS) == 0) { |
660 | unsigned short *val = (unsigned short *) page; | 644 | unsigned short *val = (unsigned short *) page; |
661 | char *out = ((char *)val) + (SECTOR_WORDS * 4); | 645 | char *out = ((char *)val) + (SECTOR_WORDS * 4); |
662 | page = out; | 646 | page = out; |
@@ -675,7 +659,7 @@ static int proc_idedisk_read_smart_values | |||
675 | ide_drive_t *drive = (ide_drive_t *)data; | 659 | ide_drive_t *drive = (ide_drive_t *)data; |
676 | int len = 0, i = 0; | 660 | int len = 0, i = 0; |
677 | 661 | ||
678 | if (!get_smart_values(drive, page)) { | 662 | if (get_smart_data(drive, page, SMART_READ_VALUES) == 0) { |
679 | unsigned short *val = (unsigned short *) page; | 663 | unsigned short *val = (unsigned short *) page; |
680 | char *out = ((char *)val) + (SECTOR_WORDS * 4); | 664 | char *out = ((char *)val) + (SECTOR_WORDS * 4); |
681 | page = out; | 665 | page = out; |
@@ -856,7 +840,7 @@ static int set_lba_addressing(ide_drive_t *drive, int arg) | |||
856 | 840 | ||
857 | drive->addressing = 0; | 841 | drive->addressing = 0; |
858 | 842 | ||
859 | if (HWIF(drive)->no_lba48) | 843 | if (drive->hwif->host_flags & IDE_HFLAG_NO_LBA48) |
860 | return 0; | 844 | return 0; |
861 | 845 | ||
862 | if (!idedisk_supports_lba48(drive->id)) | 846 | if (!idedisk_supports_lba48(drive->id)) |
@@ -889,6 +873,7 @@ static inline void idedisk_add_settings(ide_drive_t *drive) { ; } | |||
889 | 873 | ||
890 | static void idedisk_setup (ide_drive_t *drive) | 874 | static void idedisk_setup (ide_drive_t *drive) |
891 | { | 875 | { |
876 | ide_hwif_t *hwif = drive->hwif; | ||
892 | struct hd_driveid *id = drive->id; | 877 | struct hd_driveid *id = drive->id; |
893 | unsigned long long capacity; | 878 | unsigned long long capacity; |
894 | 879 | ||
@@ -909,7 +894,6 @@ static void idedisk_setup (ide_drive_t *drive) | |||
909 | (void)set_lba_addressing(drive, 1); | 894 | (void)set_lba_addressing(drive, 1); |
910 | 895 | ||
911 | if (drive->addressing == 1) { | 896 | if (drive->addressing == 1) { |
912 | ide_hwif_t *hwif = HWIF(drive); | ||
913 | int max_s = 2048; | 897 | int max_s = 2048; |
914 | 898 | ||
915 | if (max_s > hwif->rqsize) | 899 | if (max_s > hwif->rqsize) |
@@ -932,7 +916,7 @@ static void idedisk_setup (ide_drive_t *drive) | |||
932 | drive->capacity64 = 1ULL << 28; | 916 | drive->capacity64 = 1ULL << 28; |
933 | } | 917 | } |
934 | 918 | ||
935 | if (drive->hwif->no_lba48_dma && drive->addressing) { | 919 | if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && drive->addressing) { |
936 | if (drive->capacity64 > 1ULL << 28) { | 920 | if (drive->capacity64 > 1ULL << 28) { |
937 | printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode will" | 921 | printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode will" |
938 | " be used for accessing sectors > %u\n", | 922 | " be used for accessing sectors > %u\n", |
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c index bc57ce6bf0b..428f7a8a00b 100644 --- a/drivers/ide/ide-dma.c +++ b/drivers/ide/ide-dma.c | |||
@@ -338,8 +338,10 @@ static int config_drive_for_dma (ide_drive_t *drive) | |||
338 | ide_hwif_t *hwif = drive->hwif; | 338 | ide_hwif_t *hwif = drive->hwif; |
339 | struct hd_driveid *id = drive->id; | 339 | struct hd_driveid *id = drive->id; |
340 | 340 | ||
341 | if (drive->media != ide_disk && hwif->atapi_dma == 0) | 341 | if (drive->media != ide_disk) { |
342 | return 0; | 342 | if (hwif->host_flags & IDE_HFLAG_NO_ATAPI_DMA) |
343 | return -1; | ||
344 | } | ||
343 | 345 | ||
344 | /* | 346 | /* |
345 | * Enable DMA on any drive that has | 347 | * Enable DMA on any drive that has |
@@ -726,8 +728,10 @@ u8 ide_find_dma_mode(ide_drive_t *drive, u8 req_mode) | |||
726 | int x, i; | 728 | int x, i; |
727 | u8 mode = 0; | 729 | u8 mode = 0; |
728 | 730 | ||
729 | if (drive->media != ide_disk && hwif->atapi_dma == 0) | 731 | if (drive->media != ide_disk) { |
730 | return 0; | 732 | if (hwif->host_flags & IDE_HFLAG_NO_ATAPI_DMA) |
733 | return 0; | ||
734 | } | ||
731 | 735 | ||
732 | for (i = 0; i < ARRAY_SIZE(xfer_mode_bases); i++) { | 736 | for (i = 0; i < ARRAY_SIZE(xfer_mode_bases); i++) { |
733 | if (req_mode < xfer_mode_bases[i]) | 737 | if (req_mode < xfer_mode_bases[i]) |
@@ -897,10 +901,7 @@ void ide_dma_timeout (ide_drive_t *drive) | |||
897 | 901 | ||
898 | EXPORT_SYMBOL(ide_dma_timeout); | 902 | EXPORT_SYMBOL(ide_dma_timeout); |
899 | 903 | ||
900 | /* | 904 | static void ide_release_dma_engine(ide_hwif_t *hwif) |
901 | * Needed for allowing full modular support of ide-driver | ||
902 | */ | ||
903 | static int ide_release_dma_engine(ide_hwif_t *hwif) | ||
904 | { | 905 | { |
905 | if (hwif->dmatable_cpu) { | 906 | if (hwif->dmatable_cpu) { |
906 | pci_free_consistent(hwif->pci_dev, | 907 | pci_free_consistent(hwif->pci_dev, |
@@ -909,7 +910,6 @@ static int ide_release_dma_engine(ide_hwif_t *hwif) | |||
909 | hwif->dmatable_dma); | 910 | hwif->dmatable_dma); |
910 | hwif->dmatable_cpu = NULL; | 911 | hwif->dmatable_cpu = NULL; |
911 | } | 912 | } |
912 | return 1; | ||
913 | } | 913 | } |
914 | 914 | ||
915 | static int ide_release_iomio_dma(ide_hwif_t *hwif) | 915 | static int ide_release_iomio_dma(ide_hwif_t *hwif) |
@@ -952,12 +952,6 @@ static int ide_mapped_mmio_dma(ide_hwif_t *hwif, unsigned long base, unsigned in | |||
952 | { | 952 | { |
953 | printk(KERN_INFO " %s: MMIO-DMA ", hwif->name); | 953 | printk(KERN_INFO " %s: MMIO-DMA ", hwif->name); |
954 | 954 | ||
955 | hwif->dma_base = base; | ||
956 | |||
957 | if(hwif->mate) | ||
958 | hwif->dma_master = (hwif->channel) ? hwif->mate->dma_base : base; | ||
959 | else | ||
960 | hwif->dma_master = base; | ||
961 | return 0; | 955 | return 0; |
962 | } | 956 | } |
963 | 957 | ||
@@ -971,8 +965,6 @@ static int ide_iomio_dma(ide_hwif_t *hwif, unsigned long base, unsigned int port | |||
971 | return 1; | 965 | return 1; |
972 | } | 966 | } |
973 | 967 | ||
974 | hwif->dma_base = base; | ||
975 | |||
976 | if (hwif->cds->extra) { | 968 | if (hwif->cds->extra) { |
977 | hwif->extra_base = base + (hwif->channel ? 8 : 16); | 969 | hwif->extra_base = base + (hwif->channel ? 8 : 16); |
978 | 970 | ||
@@ -987,10 +979,6 @@ static int ide_iomio_dma(ide_hwif_t *hwif, unsigned long base, unsigned int port | |||
987 | } | 979 | } |
988 | } | 980 | } |
989 | 981 | ||
990 | if(hwif->mate) | ||
991 | hwif->dma_master = (hwif->channel) ? hwif->mate->dma_base:base; | ||
992 | else | ||
993 | hwif->dma_master = base; | ||
994 | return 0; | 982 | return 0; |
995 | } | 983 | } |
996 | 984 | ||
@@ -1002,12 +990,9 @@ static int ide_dma_iobase(ide_hwif_t *hwif, unsigned long base, unsigned int por | |||
1002 | return ide_iomio_dma(hwif, base, ports); | 990 | return ide_iomio_dma(hwif, base, ports); |
1003 | } | 991 | } |
1004 | 992 | ||
1005 | /* | 993 | void ide_setup_dma(ide_hwif_t *hwif, unsigned long base, unsigned num_ports) |
1006 | * This can be called for a dynamically installed interface. Don't __init it | ||
1007 | */ | ||
1008 | void ide_setup_dma (ide_hwif_t *hwif, unsigned long dma_base, unsigned int num_ports) | ||
1009 | { | 994 | { |
1010 | if (ide_dma_iobase(hwif, dma_base, num_ports)) | 995 | if (ide_dma_iobase(hwif, base, num_ports)) |
1011 | return; | 996 | return; |
1012 | 997 | ||
1013 | if (ide_allocate_dma_engine(hwif)) { | 998 | if (ide_allocate_dma_engine(hwif)) { |
@@ -1015,6 +1000,13 @@ void ide_setup_dma (ide_hwif_t *hwif, unsigned long dma_base, unsigned int num_p | |||
1015 | return; | 1000 | return; |
1016 | } | 1001 | } |
1017 | 1002 | ||
1003 | hwif->dma_base = base; | ||
1004 | |||
1005 | if (hwif->mate) | ||
1006 | hwif->dma_master = hwif->channel ? hwif->mate->dma_base : base; | ||
1007 | else | ||
1008 | hwif->dma_master = base; | ||
1009 | |||
1018 | if (!(hwif->dma_command)) | 1010 | if (!(hwif->dma_command)) |
1019 | hwif->dma_command = hwif->dma_base; | 1011 | hwif->dma_command = hwif->dma_base; |
1020 | if (!(hwif->dma_vendor1)) | 1012 | if (!(hwif->dma_vendor1)) |
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index ec835e37e72..c89f0d3058e 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -47,15 +47,15 @@ | |||
47 | #include <linux/device.h> | 47 | #include <linux/device.h> |
48 | #include <linux/kmod.h> | 48 | #include <linux/kmod.h> |
49 | #include <linux/scatterlist.h> | 49 | #include <linux/scatterlist.h> |
50 | #include <linux/bitops.h> | ||
50 | 51 | ||
51 | #include <asm/byteorder.h> | 52 | #include <asm/byteorder.h> |
52 | #include <asm/irq.h> | 53 | #include <asm/irq.h> |
53 | #include <asm/uaccess.h> | 54 | #include <asm/uaccess.h> |
54 | #include <asm/io.h> | 55 | #include <asm/io.h> |
55 | #include <asm/bitops.h> | ||
56 | 56 | ||
57 | static int __ide_end_request(ide_drive_t *drive, struct request *rq, | 57 | static int __ide_end_request(ide_drive_t *drive, struct request *rq, |
58 | int uptodate, unsigned int nr_bytes) | 58 | int uptodate, unsigned int nr_bytes, int dequeue) |
59 | { | 59 | { |
60 | int ret = 1; | 60 | int ret = 1; |
61 | 61 | ||
@@ -80,9 +80,11 @@ static int __ide_end_request(ide_drive_t *drive, struct request *rq, | |||
80 | 80 | ||
81 | if (!end_that_request_chunk(rq, uptodate, nr_bytes)) { | 81 | if (!end_that_request_chunk(rq, uptodate, nr_bytes)) { |
82 | add_disk_randomness(rq->rq_disk); | 82 | add_disk_randomness(rq->rq_disk); |
83 | if (!list_empty(&rq->queuelist)) | 83 | if (dequeue) { |
84 | blkdev_dequeue_request(rq); | 84 | if (!list_empty(&rq->queuelist)) |
85 | HWGROUP(drive)->rq = NULL; | 85 | blkdev_dequeue_request(rq); |
86 | HWGROUP(drive)->rq = NULL; | ||
87 | } | ||
86 | end_that_request_last(rq, uptodate); | 88 | end_that_request_last(rq, uptodate); |
87 | ret = 0; | 89 | ret = 0; |
88 | } | 90 | } |
@@ -122,7 +124,7 @@ int ide_end_request (ide_drive_t *drive, int uptodate, int nr_sectors) | |||
122 | nr_bytes = rq->hard_cur_sectors << 9; | 124 | nr_bytes = rq->hard_cur_sectors << 9; |
123 | } | 125 | } |
124 | 126 | ||
125 | ret = __ide_end_request(drive, rq, uptodate, nr_bytes); | 127 | ret = __ide_end_request(drive, rq, uptodate, nr_bytes, 1); |
126 | 128 | ||
127 | spin_unlock_irqrestore(&ide_lock, flags); | 129 | spin_unlock_irqrestore(&ide_lock, flags); |
128 | return ret; | 130 | return ret; |
@@ -255,39 +257,13 @@ int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq, | |||
255 | int uptodate, int nr_sectors) | 257 | int uptodate, int nr_sectors) |
256 | { | 258 | { |
257 | unsigned long flags; | 259 | unsigned long flags; |
258 | int ret = 1; | 260 | int ret; |
259 | 261 | ||
260 | spin_lock_irqsave(&ide_lock, flags); | 262 | spin_lock_irqsave(&ide_lock, flags); |
261 | |||
262 | BUG_ON(!blk_rq_started(rq)); | 263 | BUG_ON(!blk_rq_started(rq)); |
263 | 264 | ret = __ide_end_request(drive, rq, uptodate, nr_sectors << 9, 0); | |
264 | /* | ||
265 | * if failfast is set on a request, override number of sectors and | ||
266 | * complete the whole request right now | ||
267 | */ | ||
268 | if (blk_noretry_request(rq) && end_io_error(uptodate)) | ||
269 | nr_sectors = rq->hard_nr_sectors; | ||
270 | |||
271 | if (!blk_fs_request(rq) && end_io_error(uptodate) && !rq->errors) | ||
272 | rq->errors = -EIO; | ||
273 | |||
274 | /* | ||
275 | * decide whether to reenable DMA -- 3 is a random magic for now, | ||
276 | * if we DMA timeout more than 3 times, just stay in PIO | ||
277 | */ | ||
278 | if (drive->state == DMA_PIO_RETRY && drive->retry_pio <= 3) { | ||
279 | drive->state = 0; | ||
280 | HWGROUP(drive)->hwif->ide_dma_on(drive); | ||
281 | } | ||
282 | |||
283 | if (!end_that_request_first(rq, uptodate, nr_sectors)) { | ||
284 | add_disk_randomness(rq->rq_disk); | ||
285 | if (blk_rq_tagged(rq)) | ||
286 | blk_queue_end_tag(drive->queue, rq); | ||
287 | end_that_request_last(rq, uptodate); | ||
288 | ret = 0; | ||
289 | } | ||
290 | spin_unlock_irqrestore(&ide_lock, flags); | 265 | spin_unlock_irqrestore(&ide_lock, flags); |
266 | |||
291 | return ret; | 267 | return ret; |
292 | } | 268 | } |
293 | EXPORT_SYMBOL_GPL(ide_end_dequeued_request); | 269 | EXPORT_SYMBOL_GPL(ide_end_dequeued_request); |
@@ -484,7 +460,8 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8 | |||
484 | } | 460 | } |
485 | } | 461 | } |
486 | 462 | ||
487 | if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ && hwif->err_stops_fifo == 0) | 463 | if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ && |
464 | (hwif->host_flags & IDE_HFLAG_ERROR_STOPS_FIFO) == 0) | ||
488 | try_to_flush_leftover_data(drive); | 465 | try_to_flush_leftover_data(drive); |
489 | 466 | ||
490 | if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) { | 467 | if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) { |
@@ -799,7 +776,20 @@ static ide_startstop_t do_special (ide_drive_t *drive) | |||
799 | s->b.set_tune = 0; | 776 | s->b.set_tune = 0; |
800 | 777 | ||
801 | if (set_pio_mode_abuse(drive->hwif, req_pio)) { | 778 | if (set_pio_mode_abuse(drive->hwif, req_pio)) { |
802 | if (hwif->set_pio_mode) | 779 | |
780 | if (hwif->set_pio_mode == NULL) | ||
781 | return ide_stopped; | ||
782 | |||
783 | /* | ||
784 | * take ide_lock for drive->[no_]unmask/[no_]io_32bit | ||
785 | */ | ||
786 | if (req_pio == 8 || req_pio == 9) { | ||
787 | unsigned long flags; | ||
788 | |||
789 | spin_lock_irqsave(&ide_lock, flags); | ||
790 | hwif->set_pio_mode(drive, req_pio); | ||
791 | spin_unlock_irqrestore(&ide_lock, flags); | ||
792 | } else | ||
803 | hwif->set_pio_mode(drive, req_pio); | 793 | hwif->set_pio_mode(drive, req_pio); |
804 | } else { | 794 | } else { |
805 | int keep_dma = drive->using_dma; | 795 | int keep_dma = drive->using_dma; |
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index d4d790f91f9..95168833d06 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
@@ -693,35 +693,16 @@ static u8 ide_auto_reduce_xfer (ide_drive_t *drive) | |||
693 | } | 693 | } |
694 | #endif /* CONFIG_BLK_DEV_IDEDMA */ | 694 | #endif /* CONFIG_BLK_DEV_IDEDMA */ |
695 | 695 | ||
696 | /* | 696 | int ide_driveid_update(ide_drive_t *drive) |
697 | * Update the | ||
698 | */ | ||
699 | int ide_driveid_update (ide_drive_t *drive) | ||
700 | { | 697 | { |
701 | ide_hwif_t *hwif = HWIF(drive); | 698 | ide_hwif_t *hwif = drive->hwif; |
702 | struct hd_driveid *id; | 699 | struct hd_driveid *id; |
703 | #if 0 | 700 | unsigned long timeout, flags; |
704 | id = kmalloc(SECTOR_WORDS*4, GFP_ATOMIC); | ||
705 | if (!id) | ||
706 | return 0; | ||
707 | |||
708 | taskfile_lib_get_identify(drive, (char *)&id); | ||
709 | 701 | ||
710 | ide_fix_driveid(id); | ||
711 | if (id) { | ||
712 | drive->id->dma_ultra = id->dma_ultra; | ||
713 | drive->id->dma_mword = id->dma_mword; | ||
714 | drive->id->dma_1word = id->dma_1word; | ||
715 | /* anything more ? */ | ||
716 | kfree(id); | ||
717 | } | ||
718 | return 1; | ||
719 | #else | ||
720 | /* | 702 | /* |
721 | * Re-read drive->id for possible DMA mode | 703 | * Re-read drive->id for possible DMA mode |
722 | * change (copied from ide-probe.c) | 704 | * change (copied from ide-probe.c) |
723 | */ | 705 | */ |
724 | unsigned long timeout, flags; | ||
725 | 706 | ||
726 | SELECT_MASK(drive, 1); | 707 | SELECT_MASK(drive, 1); |
727 | if (IDE_CONTROL_REG) | 708 | if (IDE_CONTROL_REG) |
@@ -763,7 +744,6 @@ int ide_driveid_update (ide_drive_t *drive) | |||
763 | } | 744 | } |
764 | 745 | ||
765 | return 1; | 746 | return 1; |
766 | #endif | ||
767 | } | 747 | } |
768 | 748 | ||
769 | int ide_config_drive_speed(ide_drive_t *drive, u8 speed) | 749 | int ide_config_drive_speed(ide_drive_t *drive, u8 speed) |
diff --git a/drivers/ide/ide-pnp.c b/drivers/ide/ide-pnp.c index 2b8009c50e9..e245521af7b 100644 --- a/drivers/ide/ide-pnp.c +++ b/drivers/ide/ide-pnp.c | |||
@@ -40,9 +40,8 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id | |||
40 | ide_std_init_ports(&hw, pnp_port_start(dev, 0), | 40 | ide_std_init_ports(&hw, pnp_port_start(dev, 0), |
41 | pnp_port_start(dev, 1)); | 41 | pnp_port_start(dev, 1)); |
42 | hw.irq = pnp_irq(dev, 0); | 42 | hw.irq = pnp_irq(dev, 0); |
43 | hw.dma = NO_DMA; | ||
44 | 43 | ||
45 | index = ide_register_hw(&hw, 1, &hwif); | 44 | index = ide_register_hw(&hw, NULL, 1, &hwif); |
46 | 45 | ||
47 | if (index != -1) { | 46 | if (index != -1) { |
48 | printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index); | 47 | printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index); |
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 3c945d64d84..d5146c57e5b 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
@@ -717,7 +717,7 @@ EXPORT_SYMBOL_GPL(ide_undecoded_slave); | |||
717 | * This routine only knows how to look for drive units 0 and 1 | 717 | * This routine only knows how to look for drive units 0 and 1 |
718 | * on an interface, so any setting of MAX_DRIVES > 2 won't work here. | 718 | * on an interface, so any setting of MAX_DRIVES > 2 won't work here. |
719 | */ | 719 | */ |
720 | static void probe_hwif(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif)) | 720 | static void probe_hwif(ide_hwif_t *hwif) |
721 | { | 721 | { |
722 | unsigned long flags; | 722 | unsigned long flags; |
723 | unsigned int irqd; | 723 | unsigned int irqd; |
@@ -819,8 +819,8 @@ static void probe_hwif(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif)) | |||
819 | return; | 819 | return; |
820 | } | 820 | } |
821 | 821 | ||
822 | if (fixup) | 822 | if (hwif->fixup) |
823 | fixup(hwif); | 823 | hwif->fixup(hwif); |
824 | 824 | ||
825 | for (unit = 0; unit < MAX_DRIVES; ++unit) { | 825 | for (unit = 0; unit < MAX_DRIVES; ++unit) { |
826 | ide_drive_t *drive = &hwif->drives[unit]; | 826 | ide_drive_t *drive = &hwif->drives[unit]; |
@@ -859,10 +859,11 @@ static void probe_hwif(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif)) | |||
859 | } | 859 | } |
860 | 860 | ||
861 | static int hwif_init(ide_hwif_t *hwif); | 861 | static int hwif_init(ide_hwif_t *hwif); |
862 | static void hwif_register_devices(ide_hwif_t *hwif); | ||
862 | 863 | ||
863 | int probe_hwif_init_with_fixup(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif)) | 864 | static int probe_hwif_init(ide_hwif_t *hwif) |
864 | { | 865 | { |
865 | probe_hwif(hwif, fixup); | 866 | probe_hwif(hwif); |
866 | 867 | ||
867 | if (!hwif_init(hwif)) { | 868 | if (!hwif_init(hwif)) { |
868 | printk(KERN_INFO "%s: failed to initialize IDE interface\n", | 869 | printk(KERN_INFO "%s: failed to initialize IDE interface\n", |
@@ -870,34 +871,12 @@ int probe_hwif_init_with_fixup(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif) | |||
870 | return -1; | 871 | return -1; |
871 | } | 872 | } |
872 | 873 | ||
873 | if (hwif->present) { | 874 | if (hwif->present) |
874 | u16 unit = 0; | 875 | hwif_register_devices(hwif); |
875 | int ret; | ||
876 | 876 | ||
877 | for (unit = 0; unit < MAX_DRIVES; ++unit) { | ||
878 | ide_drive_t *drive = &hwif->drives[unit]; | ||
879 | /* For now don't attach absent drives, we may | ||
880 | want them on default or a new "empty" class | ||
881 | for hotplug reprobing ? */ | ||
882 | if (drive->present) { | ||
883 | ret = device_register(&drive->gendev); | ||
884 | if (ret < 0) | ||
885 | printk(KERN_WARNING "IDE: %s: " | ||
886 | "device_register error: %d\n", | ||
887 | __FUNCTION__, ret); | ||
888 | } | ||
889 | } | ||
890 | } | ||
891 | return 0; | 877 | return 0; |
892 | } | 878 | } |
893 | 879 | ||
894 | int probe_hwif_init(ide_hwif_t *hwif) | ||
895 | { | ||
896 | return probe_hwif_init_with_fixup(hwif, NULL); | ||
897 | } | ||
898 | |||
899 | EXPORT_SYMBOL(probe_hwif_init); | ||
900 | |||
901 | #if MAX_HWIFS > 1 | 880 | #if MAX_HWIFS > 1 |
902 | /* | 881 | /* |
903 | * save_match() is used to simplify logic in init_irq() below. | 882 | * save_match() is used to simplify logic in init_irq() below. |
@@ -951,7 +930,8 @@ static int ide_init_queue(ide_drive_t *drive) | |||
951 | blk_queue_segment_boundary(q, 0xffff); | 930 | blk_queue_segment_boundary(q, 0xffff); |
952 | 931 | ||
953 | if (!hwif->rqsize) { | 932 | if (!hwif->rqsize) { |
954 | if (hwif->no_lba48 || hwif->no_lba48_dma) | 933 | if ((hwif->host_flags & IDE_HFLAG_NO_LBA48) || |
934 | (hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA)) | ||
955 | hwif->rqsize = 256; | 935 | hwif->rqsize = 256; |
956 | else | 936 | else |
957 | hwif->rqsize = 65536; | 937 | hwif->rqsize = 65536; |
@@ -1378,6 +1358,24 @@ out: | |||
1378 | return 0; | 1358 | return 0; |
1379 | } | 1359 | } |
1380 | 1360 | ||
1361 | static void hwif_register_devices(ide_hwif_t *hwif) | ||
1362 | { | ||
1363 | unsigned int i; | ||
1364 | |||
1365 | for (i = 0; i < MAX_DRIVES; i++) { | ||
1366 | ide_drive_t *drive = &hwif->drives[i]; | ||
1367 | |||
1368 | if (drive->present) { | ||
1369 | int ret = device_register(&drive->gendev); | ||
1370 | |||
1371 | if (ret < 0) | ||
1372 | printk(KERN_WARNING "IDE: %s: " | ||
1373 | "device_register error: %d\n", | ||
1374 | __FUNCTION__, ret); | ||
1375 | } | ||
1376 | } | ||
1377 | } | ||
1378 | |||
1381 | int ideprobe_init (void) | 1379 | int ideprobe_init (void) |
1382 | { | 1380 | { |
1383 | unsigned int index; | 1381 | unsigned int index; |
@@ -1389,27 +1387,18 @@ int ideprobe_init (void) | |||
1389 | 1387 | ||
1390 | for (index = 0; index < MAX_HWIFS; ++index) | 1388 | for (index = 0; index < MAX_HWIFS; ++index) |
1391 | if (probe[index]) | 1389 | if (probe[index]) |
1392 | probe_hwif(&ide_hwifs[index], NULL); | 1390 | probe_hwif(&ide_hwifs[index]); |
1393 | for (index = 0; index < MAX_HWIFS; ++index) | 1391 | for (index = 0; index < MAX_HWIFS; ++index) |
1394 | if (probe[index]) | 1392 | if (probe[index]) |
1395 | hwif_init(&ide_hwifs[index]); | 1393 | hwif_init(&ide_hwifs[index]); |
1396 | for (index = 0; index < MAX_HWIFS; ++index) { | 1394 | for (index = 0; index < MAX_HWIFS; ++index) { |
1397 | if (probe[index]) { | 1395 | if (probe[index]) { |
1398 | ide_hwif_t *hwif = &ide_hwifs[index]; | 1396 | ide_hwif_t *hwif = &ide_hwifs[index]; |
1399 | int unit; | ||
1400 | if (!hwif->present) | 1397 | if (!hwif->present) |
1401 | continue; | 1398 | continue; |
1402 | if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced) | 1399 | if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced) |
1403 | hwif->chipset = ide_generic; | 1400 | hwif->chipset = ide_generic; |
1404 | for (unit = 0; unit < MAX_DRIVES; ++unit) | 1401 | hwif_register_devices(hwif); |
1405 | if (hwif->drives[unit].present) { | ||
1406 | int ret = device_register( | ||
1407 | &hwif->drives[unit].gendev); | ||
1408 | if (ret < 0) | ||
1409 | printk(KERN_WARNING "IDE: %s: " | ||
1410 | "device_register error: %d\n", | ||
1411 | __FUNCTION__, ret); | ||
1412 | } | ||
1413 | } | 1402 | } |
1414 | } | 1403 | } |
1415 | for (index = 0; index < MAX_HWIFS; ++index) | 1404 | for (index = 0; index < MAX_HWIFS; ++index) |
@@ -1419,3 +1408,22 @@ int ideprobe_init (void) | |||
1419 | } | 1408 | } |
1420 | 1409 | ||
1421 | EXPORT_SYMBOL_GPL(ideprobe_init); | 1410 | EXPORT_SYMBOL_GPL(ideprobe_init); |
1411 | |||
1412 | int ide_device_add(u8 idx[4]) | ||
1413 | { | ||
1414 | int i, rc = 0; | ||
1415 | |||
1416 | for (i = 0; i < 4; i++) { | ||
1417 | if (idx[i] != 0xff) | ||
1418 | rc |= probe_hwif_init(&ide_hwifs[idx[i]]); | ||
1419 | } | ||
1420 | |||
1421 | for (i = 0; i < 4; i++) { | ||
1422 | if (idx[i] != 0xff) | ||
1423 | ide_proc_register_port(&ide_hwifs[idx[i]]); | ||
1424 | } | ||
1425 | |||
1426 | return rc; | ||
1427 | } | ||
1428 | |||
1429 | EXPORT_SYMBOL_GPL(ide_device_add); | ||
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c index fc1d8ae6a80..a4007d30da5 100644 --- a/drivers/ide/ide-proc.c +++ b/drivers/ide/ide-proc.c | |||
@@ -804,8 +804,6 @@ void ide_proc_register_port(ide_hwif_t *hwif) | |||
804 | create_proc_ide_drives(hwif); | 804 | create_proc_ide_drives(hwif); |
805 | } | 805 | } |
806 | 806 | ||
807 | EXPORT_SYMBOL_GPL(ide_proc_register_port); | ||
808 | |||
809 | #ifdef CONFIG_BLK_DEV_IDEPCI | 807 | #ifdef CONFIG_BLK_DEV_IDEPCI |
810 | void ide_pci_create_host_proc(const char *name, get_info_t *get_info) | 808 | void ide_pci_create_host_proc(const char *name, get_info_t *get_info) |
811 | { | 809 | { |
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index 1fa57947bca..7b9181b5469 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c | |||
@@ -565,7 +565,7 @@ typedef struct os_dat_s { | |||
565 | * The following parameter is used to select the point in the internal | 565 | * The following parameter is used to select the point in the internal |
566 | * tape fifo in which we will start to refill the buffer. Decreasing | 566 | * tape fifo in which we will start to refill the buffer. Decreasing |
567 | * the following parameter will improve the system's latency and | 567 | * the following parameter will improve the system's latency and |
568 | * interactive response, while using a high value might improve sytem | 568 | * interactive response, while using a high value might improve system |
569 | * throughput. | 569 | * throughput. |
570 | */ | 570 | */ |
571 | #define IDETAPE_FIFO_THRESHOLD 2 | 571 | #define IDETAPE_FIFO_THRESHOLD 2 |
@@ -621,7 +621,6 @@ typedef struct os_dat_s { | |||
621 | */ | 621 | */ |
622 | #define USE_IOTRACE 0 | 622 | #define USE_IOTRACE 0 |
623 | #if USE_IOTRACE | 623 | #if USE_IOTRACE |
624 | #include <linux/io_trace.h> | ||
625 | #define IO_IDETAPE_FIFO 500 | 624 | #define IO_IDETAPE_FIFO 500 |
626 | #endif | 625 | #endif |
627 | 626 | ||
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c index 2a3c8d49834..73ef6bf5fbc 100644 --- a/drivers/ide/ide-taskfile.c +++ b/drivers/ide/ide-taskfile.c | |||
@@ -8,23 +8,6 @@ | |||
8 | * Copyright (C) 2003-2004 Bartlomiej Zolnierkiewicz | 8 | * Copyright (C) 2003-2004 Bartlomiej Zolnierkiewicz |
9 | * | 9 | * |
10 | * The big the bad and the ugly. | 10 | * The big the bad and the ugly. |
11 | * | ||
12 | * Problems to be fixed because of BH interface or the lack therefore. | ||
13 | * | ||
14 | * Fill me in stupid !!! | ||
15 | * | ||
16 | * HOST: | ||
17 | * General refers to the Controller and Driver "pair". | ||
18 | * DATA HANDLER: | ||
19 | * Under the context of Linux it generally refers to an interrupt handler. | ||
20 | * However, it correctly describes the 'HOST' | ||
21 | * DATA BLOCK: | ||
22 | * The amount of data needed to be transfered as predefined in the | ||
23 | * setup of the device. | ||
24 | * STORAGE ATOMIC: | ||
25 | * The 'DATA BLOCK' associated to the 'DATA HANDLER', and can be as | ||
26 | * small as a single sector or as large as the entire command block | ||
27 | * request. | ||
28 | */ | 11 | */ |
29 | 12 | ||
30 | #include <linux/module.h> | 13 | #include <linux/module.h> |
@@ -695,9 +678,6 @@ int ide_wait_cmd (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature, u8 sectors, | |||
695 | return ide_do_drive_cmd(drive, &rq, ide_wait); | 678 | return ide_do_drive_cmd(drive, &rq, ide_wait); |
696 | } | 679 | } |
697 | 680 | ||
698 | /* | ||
699 | * FIXME : this needs to map into at taskfile. <andre@linux-ide.org> | ||
700 | */ | ||
701 | int ide_cmd_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg) | 681 | int ide_cmd_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg) |
702 | { | 682 | { |
703 | int err = 0; | 683 | int err = 0; |
@@ -761,9 +741,6 @@ static int ide_wait_cmd_task(ide_drive_t *drive, u8 *buf) | |||
761 | return ide_do_drive_cmd(drive, &rq, ide_wait); | 741 | return ide_do_drive_cmd(drive, &rq, ide_wait); |
762 | } | 742 | } |
763 | 743 | ||
764 | /* | ||
765 | * FIXME : this needs to map into at taskfile. <andre@linux-ide.org> | ||
766 | */ | ||
767 | int ide_task_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg) | 744 | int ide_task_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg) |
768 | { | 745 | { |
769 | void __user *p = (void __user *)arg; | 746 | void __user *p = (void __user *)arg; |
@@ -860,9 +837,14 @@ ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task) | |||
860 | case TASKFILE_OUT_DMA: | 837 | case TASKFILE_OUT_DMA: |
861 | case TASKFILE_IN_DMAQ: | 838 | case TASKFILE_IN_DMAQ: |
862 | case TASKFILE_IN_DMA: | 839 | case TASKFILE_IN_DMA: |
863 | hwif->dma_setup(drive); | 840 | if (!drive->using_dma) |
864 | hwif->dma_exec_cmd(drive, taskfile->command); | 841 | break; |
865 | hwif->dma_start(drive); | 842 | |
843 | if (!hwif->dma_setup(drive)) { | ||
844 | hwif->dma_exec_cmd(drive, taskfile->command); | ||
845 | hwif->dma_start(drive); | ||
846 | return ide_started; | ||
847 | } | ||
866 | break; | 848 | break; |
867 | 849 | ||
868 | default: | 850 | default: |
@@ -876,7 +858,8 @@ ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task) | |||
876 | return task->prehandler(drive, task->rq); | 858 | return task->prehandler(drive, task->rq); |
877 | } | 859 | } |
878 | ide_execute_command(drive, taskfile->command, task->handler, WAIT_WORSTCASE, NULL); | 860 | ide_execute_command(drive, taskfile->command, task->handler, WAIT_WORSTCASE, NULL); |
861 | return ide_started; | ||
879 | } | 862 | } |
880 | 863 | ||
881 | return ide_started; | 864 | return ide_stopped; |
882 | } | 865 | } |
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 5b090662683..674a65c1a13 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
@@ -134,8 +134,6 @@ static void init_hwif_data(ide_hwif_t *hwif, unsigned int index) | |||
134 | 134 | ||
135 | hwif->bus_state = BUSSTATE_ON; | 135 | hwif->bus_state = BUSSTATE_ON; |
136 | 136 | ||
137 | hwif->atapi_dma = 0; /* disable all atapi dma */ | ||
138 | |||
139 | init_completion(&hwif->gendev_rel_comp); | 137 | init_completion(&hwif->gendev_rel_comp); |
140 | 138 | ||
141 | default_hwif_iops(hwif); | 139 | default_hwif_iops(hwif); |
@@ -170,7 +168,6 @@ static void init_hwif_default(ide_hwif_t *hwif, unsigned int index) | |||
170 | 168 | ||
171 | ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, &hwif->irq); | 169 | ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, &hwif->irq); |
172 | 170 | ||
173 | memcpy(&hwif->hw, &hw, sizeof(hw)); | ||
174 | memcpy(hwif->io_ports, hw.io_ports, sizeof(hw.io_ports)); | 171 | memcpy(hwif->io_ports, hw.io_ports, sizeof(hw.io_ports)); |
175 | 172 | ||
176 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; | 173 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; |
@@ -216,7 +213,7 @@ static void __init init_ide_data (void) | |||
216 | init_hwif_data(hwif, index); | 213 | init_hwif_data(hwif, index); |
217 | init_hwif_default(hwif, index); | 214 | init_hwif_default(hwif, index); |
218 | #if !defined(CONFIG_PPC32) || !defined(CONFIG_PCI) | 215 | #if !defined(CONFIG_PPC32) || !defined(CONFIG_PCI) |
219 | hwif->irq = hwif->hw.irq = | 216 | hwif->irq = |
220 | ide_init_default_irq(hwif->io_ports[IDE_DATA_OFFSET]); | 217 | ide_init_default_irq(hwif->io_ports[IDE_DATA_OFFSET]); |
221 | #endif | 218 | #endif |
222 | } | 219 | } |
@@ -267,6 +264,30 @@ static int ide_system_bus_speed(void) | |||
267 | return system_bus_speed; | 264 | return system_bus_speed; |
268 | } | 265 | } |
269 | 266 | ||
267 | ide_hwif_t * ide_find_port(unsigned long base) | ||
268 | { | ||
269 | ide_hwif_t *hwif; | ||
270 | int i; | ||
271 | |||
272 | for (i = 0; i < MAX_HWIFS; i++) { | ||
273 | hwif = &ide_hwifs[i]; | ||
274 | if (hwif->io_ports[IDE_DATA_OFFSET] == base) | ||
275 | goto found; | ||
276 | } | ||
277 | |||
278 | for (i = 0; i < MAX_HWIFS; i++) { | ||
279 | hwif = &ide_hwifs[i]; | ||
280 | if (hwif->io_ports[IDE_DATA_OFFSET] == 0) | ||
281 | goto found; | ||
282 | } | ||
283 | |||
284 | hwif = NULL; | ||
285 | found: | ||
286 | return hwif; | ||
287 | } | ||
288 | |||
289 | EXPORT_SYMBOL_GPL(ide_find_port); | ||
290 | |||
270 | static struct resource* hwif_request_region(ide_hwif_t *hwif, | 291 | static struct resource* hwif_request_region(ide_hwif_t *hwif, |
271 | unsigned long addr, int num) | 292 | unsigned long addr, int num) |
272 | { | 293 | { |
@@ -379,7 +400,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) | |||
379 | 400 | ||
380 | hwif->pio_mask = tmp_hwif->pio_mask; | 401 | hwif->pio_mask = tmp_hwif->pio_mask; |
381 | 402 | ||
382 | hwif->atapi_dma = tmp_hwif->atapi_dma; | ||
383 | hwif->ultra_mask = tmp_hwif->ultra_mask; | 403 | hwif->ultra_mask = tmp_hwif->ultra_mask; |
384 | hwif->mwdma_mask = tmp_hwif->mwdma_mask; | 404 | hwif->mwdma_mask = tmp_hwif->mwdma_mask; |
385 | hwif->swdma_mask = tmp_hwif->swdma_mask; | 405 | hwif->swdma_mask = tmp_hwif->swdma_mask; |
@@ -394,6 +414,8 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) | |||
394 | hwif->cds = tmp_hwif->cds; | 414 | hwif->cds = tmp_hwif->cds; |
395 | #endif | 415 | #endif |
396 | 416 | ||
417 | hwif->fixup = tmp_hwif->fixup; | ||
418 | |||
397 | hwif->set_pio_mode = tmp_hwif->set_pio_mode; | 419 | hwif->set_pio_mode = tmp_hwif->set_pio_mode; |
398 | hwif->set_dma_mode = tmp_hwif->set_dma_mode; | 420 | hwif->set_dma_mode = tmp_hwif->set_dma_mode; |
399 | hwif->mdma_filter = tmp_hwif->mdma_filter; | 421 | hwif->mdma_filter = tmp_hwif->mdma_filter; |
@@ -440,7 +462,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) | |||
440 | 462 | ||
441 | hwif->mmio = tmp_hwif->mmio; | 463 | hwif->mmio = tmp_hwif->mmio; |
442 | hwif->rqsize = tmp_hwif->rqsize; | 464 | hwif->rqsize = tmp_hwif->rqsize; |
443 | hwif->no_lba48 = tmp_hwif->no_lba48; | ||
444 | 465 | ||
445 | #ifndef CONFIG_BLK_DEV_IDECS | 466 | #ifndef CONFIG_BLK_DEV_IDECS |
446 | hwif->irq = tmp_hwif->irq; | 467 | hwif->irq = tmp_hwif->irq; |
@@ -656,7 +677,6 @@ void ide_setup_ports ( hw_regs_t *hw, | |||
656 | } | 677 | } |
657 | } | 678 | } |
658 | hw->irq = irq; | 679 | hw->irq = irq; |
659 | hw->dma = NO_DMA; | ||
660 | hw->ack_intr = ack_intr; | 680 | hw->ack_intr = ack_intr; |
661 | /* | 681 | /* |
662 | * hw->iops = iops; | 682 | * hw->iops = iops; |
@@ -664,11 +684,11 @@ void ide_setup_ports ( hw_regs_t *hw, | |||
664 | } | 684 | } |
665 | 685 | ||
666 | /** | 686 | /** |
667 | * ide_register_hw_with_fixup - register IDE interface | 687 | * ide_register_hw - register IDE interface |
668 | * @hw: hardware registers | 688 | * @hw: hardware registers |
689 | * @fixup: fixup function | ||
669 | * @initializing: set while initializing built-in drivers | 690 | * @initializing: set while initializing built-in drivers |
670 | * @hwifp: pointer to returned hwif | 691 | * @hwifp: pointer to returned hwif |
671 | * @fixup: fixup function | ||
672 | * | 692 | * |
673 | * Register an IDE interface, specifying exactly the registers etc. | 693 | * Register an IDE interface, specifying exactly the registers etc. |
674 | * Set init=1 iff calling before probes have taken place. | 694 | * Set init=1 iff calling before probes have taken place. |
@@ -676,9 +696,8 @@ void ide_setup_ports ( hw_regs_t *hw, | |||
676 | * Returns -1 on error. | 696 | * Returns -1 on error. |
677 | */ | 697 | */ |
678 | 698 | ||
679 | int ide_register_hw_with_fixup(hw_regs_t *hw, int initializing, | 699 | int ide_register_hw(hw_regs_t *hw, void (*fixup)(ide_hwif_t *), |
680 | ide_hwif_t **hwifp, | 700 | int initializing, ide_hwif_t **hwifp) |
681 | void(*fixup)(ide_hwif_t *hwif)) | ||
682 | { | 701 | { |
683 | int index, retry = 1; | 702 | int index, retry = 1; |
684 | ide_hwif_t *hwif; | 703 | ide_hwif_t *hwif; |
@@ -686,7 +705,7 @@ int ide_register_hw_with_fixup(hw_regs_t *hw, int initializing, | |||
686 | do { | 705 | do { |
687 | for (index = 0; index < MAX_HWIFS; ++index) { | 706 | for (index = 0; index < MAX_HWIFS; ++index) { |
688 | hwif = &ide_hwifs[index]; | 707 | hwif = &ide_hwifs[index]; |
689 | if (hwif->hw.io_ports[IDE_DATA_OFFSET] == hw->io_ports[IDE_DATA_OFFSET]) | 708 | if (hwif->io_ports[IDE_DATA_OFFSET] == hw->io_ports[IDE_DATA_OFFSET]) |
690 | goto found; | 709 | goto found; |
691 | } | 710 | } |
692 | for (index = 0; index < MAX_HWIFS; ++index) { | 711 | for (index = 0; index < MAX_HWIFS; ++index) { |
@@ -694,7 +713,7 @@ int ide_register_hw_with_fixup(hw_regs_t *hw, int initializing, | |||
694 | if (hwif->hold) | 713 | if (hwif->hold) |
695 | continue; | 714 | continue; |
696 | if ((!hwif->present && !hwif->mate && !initializing) || | 715 | if ((!hwif->present && !hwif->mate && !initializing) || |
697 | (!hwif->hw.io_ports[IDE_DATA_OFFSET] && initializing)) | 716 | (!hwif->io_ports[IDE_DATA_OFFSET] && initializing)) |
698 | goto found; | 717 | goto found; |
699 | } | 718 | } |
700 | for (index = 0; index < MAX_HWIFS; index++) | 719 | for (index = 0; index < MAX_HWIFS; index++) |
@@ -710,16 +729,18 @@ found: | |||
710 | } | 729 | } |
711 | if (hwif->present) | 730 | if (hwif->present) |
712 | return -1; | 731 | return -1; |
713 | memcpy(&hwif->hw, hw, sizeof(*hw)); | 732 | memcpy(hwif->io_ports, hw->io_ports, sizeof(hwif->io_ports)); |
714 | memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports)); | ||
715 | hwif->irq = hw->irq; | 733 | hwif->irq = hw->irq; |
716 | hwif->noprobe = 0; | 734 | hwif->noprobe = 0; |
735 | hwif->fixup = fixup; | ||
717 | hwif->chipset = hw->chipset; | 736 | hwif->chipset = hw->chipset; |
718 | hwif->gendev.parent = hw->dev; | 737 | hwif->gendev.parent = hw->dev; |
738 | hwif->ack_intr = hw->ack_intr; | ||
739 | |||
740 | if (initializing == 0) { | ||
741 | u8 idx[4] = { index, 0xff, 0xff, 0xff }; | ||
719 | 742 | ||
720 | if (!initializing) { | 743 | ide_device_add(idx); |
721 | probe_hwif_init_with_fixup(hwif, fixup); | ||
722 | ide_proc_register_port(hwif); | ||
723 | } | 744 | } |
724 | 745 | ||
725 | if (hwifp) | 746 | if (hwifp) |
@@ -728,13 +749,6 @@ found: | |||
728 | return (initializing || hwif->present) ? index : -1; | 749 | return (initializing || hwif->present) ? index : -1; |
729 | } | 750 | } |
730 | 751 | ||
731 | EXPORT_SYMBOL(ide_register_hw_with_fixup); | ||
732 | |||
733 | int ide_register_hw(hw_regs_t *hw, int initializing, ide_hwif_t **hwifp) | ||
734 | { | ||
735 | return ide_register_hw_with_fixup(hw, initializing, hwifp, NULL); | ||
736 | } | ||
737 | |||
738 | EXPORT_SYMBOL(ide_register_hw); | 752 | EXPORT_SYMBOL(ide_register_hw); |
739 | 753 | ||
740 | /* | 754 | /* |
@@ -1050,7 +1064,7 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device | |||
1050 | ide_init_hwif_ports(&hw, (unsigned long) args[0], | 1064 | ide_init_hwif_ports(&hw, (unsigned long) args[0], |
1051 | (unsigned long) args[1], NULL); | 1065 | (unsigned long) args[1], NULL); |
1052 | hw.irq = args[2]; | 1066 | hw.irq = args[2]; |
1053 | if (ide_register_hw(&hw, 0, NULL) == -1) | 1067 | if (ide_register_hw(&hw, NULL, 0, NULL) == -1) |
1054 | return -EIO; | 1068 | return -EIO; |
1055 | return 0; | 1069 | return 0; |
1056 | } | 1070 | } |
@@ -1401,6 +1415,9 @@ static int __init ide_setup(char *s) | |||
1401 | "reset", "minus6", "ata66", "minus8", "minus9", | 1415 | "reset", "minus6", "ata66", "minus8", "minus9", |
1402 | "minus10", "four", "qd65xx", "ht6560b", "cmd640_vlb", | 1416 | "minus10", "four", "qd65xx", "ht6560b", "cmd640_vlb", |
1403 | "dtc2278", "umc8672", "ali14xx", NULL }; | 1417 | "dtc2278", "umc8672", "ali14xx", NULL }; |
1418 | |||
1419 | hw_regs_t hwregs; | ||
1420 | |||
1404 | hw = s[3] - '0'; | 1421 | hw = s[3] - '0'; |
1405 | hwif = &ide_hwifs[hw]; | 1422 | hwif = &ide_hwifs[hw]; |
1406 | i = match_parm(&s[4], ide_words, vals, 3); | 1423 | i = match_parm(&s[4], ide_words, vals, 3); |
@@ -1510,9 +1527,9 @@ static int __init ide_setup(char *s) | |||
1510 | case 2: /* base,ctl */ | 1527 | case 2: /* base,ctl */ |
1511 | vals[2] = 0; /* default irq = probe for it */ | 1528 | vals[2] = 0; /* default irq = probe for it */ |
1512 | case 3: /* base,ctl,irq */ | 1529 | case 3: /* base,ctl,irq */ |
1513 | hwif->hw.irq = vals[2]; | 1530 | memset(&hwregs, 0, sizeof(hwregs)); |
1514 | ide_init_hwif_ports(&hwif->hw, (unsigned long) vals[0], (unsigned long) vals[1], &hwif->irq); | 1531 | ide_init_hwif_ports(&hwregs, vals[0], vals[1], &hwif->irq); |
1515 | memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports)); | 1532 | memcpy(hwif->io_ports, hwregs.io_ports, sizeof(hwif->io_ports)); |
1516 | hwif->irq = vals[2]; | 1533 | hwif->irq = vals[2]; |
1517 | hwif->noprobe = 0; | 1534 | hwif->noprobe = 0; |
1518 | hwif->chipset = ide_forced; | 1535 | hwif->chipset = ide_forced; |
diff --git a/drivers/ide/legacy/ali14xx.c b/drivers/ide/legacy/ali14xx.c index 2f0ef9b4403..10311ecc674 100644 --- a/drivers/ide/legacy/ali14xx.c +++ b/drivers/ide/legacy/ali14xx.c | |||
@@ -102,6 +102,8 @@ static void outReg (u8 data, u8 reg) | |||
102 | outb_p(data, dataPort); | 102 | outb_p(data, dataPort); |
103 | } | 103 | } |
104 | 104 | ||
105 | static DEFINE_SPINLOCK(ali14xx_lock); | ||
106 | |||
105 | /* | 107 | /* |
106 | * Set PIO mode for the specified drive. | 108 | * Set PIO mode for the specified drive. |
107 | * This function computes timing parameters | 109 | * This function computes timing parameters |
@@ -129,14 +131,14 @@ static void ali14xx_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
129 | 131 | ||
130 | /* stuff timing parameters into controller registers */ | 132 | /* stuff timing parameters into controller registers */ |
131 | driveNum = (HWIF(drive)->index << 1) + drive->select.b.unit; | 133 | driveNum = (HWIF(drive)->index << 1) + drive->select.b.unit; |
132 | spin_lock_irqsave(&ide_lock, flags); | 134 | spin_lock_irqsave(&ali14xx_lock, flags); |
133 | outb_p(regOn, basePort); | 135 | outb_p(regOn, basePort); |
134 | outReg(param1, regTab[driveNum].reg1); | 136 | outReg(param1, regTab[driveNum].reg1); |
135 | outReg(param2, regTab[driveNum].reg2); | 137 | outReg(param2, regTab[driveNum].reg2); |
136 | outReg(param3, regTab[driveNum].reg3); | 138 | outReg(param3, regTab[driveNum].reg3); |
137 | outReg(param4, regTab[driveNum].reg4); | 139 | outReg(param4, regTab[driveNum].reg4); |
138 | outb_p(regOff, basePort); | 140 | outb_p(regOff, basePort); |
139 | spin_unlock_irqrestore(&ide_lock, flags); | 141 | spin_unlock_irqrestore(&ali14xx_lock, flags); |
140 | } | 142 | } |
141 | 143 | ||
142 | /* | 144 | /* |
@@ -193,6 +195,7 @@ static int __init initRegisters (void) { | |||
193 | static int __init ali14xx_probe(void) | 195 | static int __init ali14xx_probe(void) |
194 | { | 196 | { |
195 | ide_hwif_t *hwif, *mate; | 197 | ide_hwif_t *hwif, *mate; |
198 | static u8 idx[4] = { 0, 1, 0xff, 0xff }; | ||
196 | 199 | ||
197 | printk(KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n", | 200 | printk(KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n", |
198 | basePort, regOn); | 201 | basePort, regOn); |
@@ -217,11 +220,7 @@ static int __init ali14xx_probe(void) | |||
217 | mate->mate = hwif; | 220 | mate->mate = hwif; |
218 | mate->channel = 1; | 221 | mate->channel = 1; |
219 | 222 | ||
220 | probe_hwif_init(hwif); | 223 | ide_device_add(idx); |
221 | probe_hwif_init(mate); | ||
222 | |||
223 | ide_proc_register_port(hwif); | ||
224 | ide_proc_register_port(mate); | ||
225 | 224 | ||
226 | return 0; | 225 | return 0; |
227 | } | 226 | } |
diff --git a/drivers/ide/legacy/buddha.c b/drivers/ide/legacy/buddha.c index 101aee1711c..4a0be251a05 100644 --- a/drivers/ide/legacy/buddha.c +++ b/drivers/ide/legacy/buddha.c | |||
@@ -212,8 +212,8 @@ fail_base2: | |||
212 | // xsurf_iops, | 212 | // xsurf_iops, |
213 | IRQ_AMIGA_PORTS); | 213 | IRQ_AMIGA_PORTS); |
214 | } | 214 | } |
215 | 215 | ||
216 | index = ide_register_hw(&hw, 1, &hwif); | 216 | index = ide_register_hw(&hw, NULL, 1, &hwif); |
217 | if (index != -1) { | 217 | if (index != -1) { |
218 | hwif->mmio = 1; | 218 | hwif->mmio = 1; |
219 | printk("ide%d: ", index); | 219 | printk("ide%d: ", index); |
diff --git a/drivers/ide/legacy/dtc2278.c b/drivers/ide/legacy/dtc2278.c index f1652125486..24a845d45bd 100644 --- a/drivers/ide/legacy/dtc2278.c +++ b/drivers/ide/legacy/dtc2278.c | |||
@@ -67,20 +67,24 @@ static void sub22 (char b, char c) | |||
67 | } | 67 | } |
68 | } | 68 | } |
69 | 69 | ||
70 | static DEFINE_SPINLOCK(dtc2278_lock); | ||
71 | |||
70 | static void dtc2278_set_pio_mode(ide_drive_t *drive, const u8 pio) | 72 | static void dtc2278_set_pio_mode(ide_drive_t *drive, const u8 pio) |
71 | { | 73 | { |
72 | unsigned long flags; | 74 | unsigned long flags; |
73 | 75 | ||
74 | if (pio >= 3) { | 76 | if (pio >= 3) { |
75 | spin_lock_irqsave(&ide_lock, flags); | 77 | spin_lock_irqsave(&dtc2278_lock, flags); |
76 | /* | 78 | /* |
77 | * This enables PIO mode4 (3?) on the first interface | 79 | * This enables PIO mode4 (3?) on the first interface |
78 | */ | 80 | */ |
79 | sub22(1,0xc3); | 81 | sub22(1,0xc3); |
80 | sub22(0,0xa0); | 82 | sub22(0,0xa0); |
81 | spin_unlock_irqrestore(&ide_lock, flags); | 83 | spin_unlock_irqrestore(&dtc2278_lock, flags); |
82 | } else { | 84 | } else { |
83 | /* we don't know how to set it back again.. */ | 85 | /* we don't know how to set it back again.. */ |
86 | /* Actually we do - there is a data sheet available for the | ||
87 | Winbond but does anyone actually care */ | ||
84 | } | 88 | } |
85 | 89 | ||
86 | /* | 90 | /* |
@@ -94,6 +98,7 @@ static int __init dtc2278_probe(void) | |||
94 | { | 98 | { |
95 | unsigned long flags; | 99 | unsigned long flags; |
96 | ide_hwif_t *hwif, *mate; | 100 | ide_hwif_t *hwif, *mate; |
101 | static u8 idx[4] = { 0, 1, 0xff, 0xff }; | ||
97 | 102 | ||
98 | hwif = &ide_hwifs[0]; | 103 | hwif = &ide_hwifs[0]; |
99 | mate = &ide_hwifs[1]; | 104 | mate = &ide_hwifs[1]; |
@@ -129,16 +134,13 @@ static int __init dtc2278_probe(void) | |||
129 | 134 | ||
130 | mate->serialized = 1; | 135 | mate->serialized = 1; |
131 | mate->chipset = ide_dtc2278; | 136 | mate->chipset = ide_dtc2278; |
137 | mate->pio_mask = ATA_PIO4; | ||
132 | mate->drives[0].no_unmask = 1; | 138 | mate->drives[0].no_unmask = 1; |
133 | mate->drives[1].no_unmask = 1; | 139 | mate->drives[1].no_unmask = 1; |
134 | mate->mate = hwif; | 140 | mate->mate = hwif; |
135 | mate->channel = 1; | 141 | mate->channel = 1; |
136 | 142 | ||
137 | probe_hwif_init(hwif); | 143 | ide_device_add(idx); |
138 | probe_hwif_init(mate); | ||
139 | |||
140 | ide_proc_register_port(hwif); | ||
141 | ide_proc_register_port(mate); | ||
142 | 144 | ||
143 | return 0; | 145 | return 0; |
144 | } | 146 | } |
diff --git a/drivers/ide/legacy/falconide.c b/drivers/ide/legacy/falconide.c index f0829b83e97..7d7936f1b90 100644 --- a/drivers/ide/legacy/falconide.c +++ b/drivers/ide/legacy/falconide.c | |||
@@ -72,7 +72,7 @@ void __init falconide_init(void) | |||
72 | 0, 0, NULL, | 72 | 0, 0, NULL, |
73 | // falconide_iops, | 73 | // falconide_iops, |
74 | IRQ_MFP_IDE); | 74 | IRQ_MFP_IDE); |
75 | index = ide_register_hw(&hw, 1, NULL); | 75 | index = ide_register_hw(&hw, NULL, 1, NULL); |
76 | 76 | ||
77 | if (index != -1) | 77 | if (index != -1) |
78 | printk("ide%d: Falcon IDE interface\n", index); | 78 | printk("ide%d: Falcon IDE interface\n", index); |
diff --git a/drivers/ide/legacy/gayle.c b/drivers/ide/legacy/gayle.c index 0830a021bbb..53331ee1e95 100644 --- a/drivers/ide/legacy/gayle.c +++ b/drivers/ide/legacy/gayle.c | |||
@@ -165,7 +165,7 @@ found: | |||
165 | // &gayle_iops, | 165 | // &gayle_iops, |
166 | IRQ_AMIGA_PORTS); | 166 | IRQ_AMIGA_PORTS); |
167 | 167 | ||
168 | index = ide_register_hw(&hw, 1, &hwif); | 168 | index = ide_register_hw(&hw, NULL, 1, &hwif); |
169 | if (index != -1) { | 169 | if (index != -1) { |
170 | hwif->mmio = 1; | 170 | hwif->mmio = 1; |
171 | switch (i) { | 171 | switch (i) { |
diff --git a/drivers/ide/legacy/ht6560b.c b/drivers/ide/legacy/ht6560b.c index 2e5a9cc5c0f..a4245d13f11 100644 --- a/drivers/ide/legacy/ht6560b.c +++ b/drivers/ide/legacy/ht6560b.c | |||
@@ -247,6 +247,8 @@ static u8 ht_pio2timings(ide_drive_t *drive, const u8 pio) | |||
247 | } | 247 | } |
248 | } | 248 | } |
249 | 249 | ||
250 | static DEFINE_SPINLOCK(ht6560b_lock); | ||
251 | |||
250 | /* | 252 | /* |
251 | * Enable/Disable so called prefetch mode | 253 | * Enable/Disable so called prefetch mode |
252 | */ | 254 | */ |
@@ -254,9 +256,9 @@ static void ht_set_prefetch(ide_drive_t *drive, u8 state) | |||
254 | { | 256 | { |
255 | unsigned long flags; | 257 | unsigned long flags; |
256 | int t = HT_PREFETCH_MODE << 8; | 258 | int t = HT_PREFETCH_MODE << 8; |
257 | 259 | ||
258 | spin_lock_irqsave(&ide_lock, flags); | 260 | spin_lock_irqsave(&ht6560b_lock, flags); |
259 | 261 | ||
260 | /* | 262 | /* |
261 | * Prefetch mode and unmask irq seems to conflict | 263 | * Prefetch mode and unmask irq seems to conflict |
262 | */ | 264 | */ |
@@ -268,9 +270,9 @@ static void ht_set_prefetch(ide_drive_t *drive, u8 state) | |||
268 | drive->drive_data &= ~t; /* disable prefetch mode */ | 270 | drive->drive_data &= ~t; /* disable prefetch mode */ |
269 | drive->no_unmask = 0; | 271 | drive->no_unmask = 0; |
270 | } | 272 | } |
271 | 273 | ||
272 | spin_unlock_irqrestore(&ide_lock, flags); | 274 | spin_unlock_irqrestore(&ht6560b_lock, flags); |
273 | 275 | ||
274 | #ifdef DEBUG | 276 | #ifdef DEBUG |
275 | printk("ht6560b: drive %s prefetch mode %sabled\n", drive->name, (state ? "en" : "dis")); | 277 | printk("ht6560b: drive %s prefetch mode %sabled\n", drive->name, (state ? "en" : "dis")); |
276 | #endif | 278 | #endif |
@@ -287,16 +289,14 @@ static void ht6560b_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
287 | ht_set_prefetch(drive, pio & 1); | 289 | ht_set_prefetch(drive, pio & 1); |
288 | return; | 290 | return; |
289 | } | 291 | } |
290 | 292 | ||
291 | timing = ht_pio2timings(drive, pio); | 293 | timing = ht_pio2timings(drive, pio); |
292 | 294 | ||
293 | spin_lock_irqsave(&ide_lock, flags); | 295 | spin_lock_irqsave(&ht6560b_lock, flags); |
294 | |||
295 | drive->drive_data &= 0xff00; | 296 | drive->drive_data &= 0xff00; |
296 | drive->drive_data |= timing; | 297 | drive->drive_data |= timing; |
297 | 298 | spin_unlock_irqrestore(&ht6560b_lock, flags); | |
298 | spin_unlock_irqrestore(&ide_lock, flags); | 299 | |
299 | |||
300 | #ifdef DEBUG | 300 | #ifdef DEBUG |
301 | printk("ht6560b: drive %s tuned to pio mode %#x timing=%#x\n", drive->name, pio, timing); | 301 | printk("ht6560b: drive %s tuned to pio mode %#x timing=%#x\n", drive->name, pio, timing); |
302 | #endif | 302 | #endif |
@@ -311,6 +311,7 @@ MODULE_PARM_DESC(probe, "probe for HT6560B chipset"); | |||
311 | int __init ht6560b_init(void) | 311 | int __init ht6560b_init(void) |
312 | { | 312 | { |
313 | ide_hwif_t *hwif, *mate; | 313 | ide_hwif_t *hwif, *mate; |
314 | static u8 idx[4] = { 0, 1, 0xff, 0xff }; | ||
314 | int t; | 315 | int t; |
315 | 316 | ||
316 | if (probe_ht6560b == 0) | 317 | if (probe_ht6560b == 0) |
@@ -359,11 +360,7 @@ int __init ht6560b_init(void) | |||
359 | mate->drives[0].drive_data = t; | 360 | mate->drives[0].drive_data = t; |
360 | mate->drives[1].drive_data = t; | 361 | mate->drives[1].drive_data = t; |
361 | 362 | ||
362 | probe_hwif_init(hwif); | 363 | ide_device_add(idx); |
363 | probe_hwif_init(mate); | ||
364 | |||
365 | ide_proc_register_port(hwif); | ||
366 | ide_proc_register_port(mate); | ||
367 | 364 | ||
368 | return 0; | 365 | return 0; |
369 | 366 | ||
diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c index e8e360c2619..03715c05866 100644 --- a/drivers/ide/legacy/ide-cs.c +++ b/drivers/ide/legacy/ide-cs.c | |||
@@ -153,7 +153,7 @@ static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq | |||
153 | hw.irq = irq; | 153 | hw.irq = irq; |
154 | hw.chipset = ide_pci; | 154 | hw.chipset = ide_pci; |
155 | hw.dev = &handle->dev; | 155 | hw.dev = &handle->dev; |
156 | return ide_register_hw_with_fixup(&hw, 0, NULL, ide_undecoded_slave); | 156 | return ide_register_hw(&hw, &ide_undecoded_slave, 0, NULL); |
157 | } | 157 | } |
158 | 158 | ||
159 | /*====================================================================== | 159 | /*====================================================================== |
diff --git a/drivers/ide/legacy/ide_platform.c b/drivers/ide/legacy/ide_platform.c index b992b2b91fe..7bb79f53dac 100644 --- a/drivers/ide/legacy/ide_platform.c +++ b/drivers/ide/legacy/ide_platform.c | |||
@@ -33,39 +33,24 @@ static ide_hwif_t *__devinit plat_ide_locate_hwif(void __iomem *base, | |||
33 | int mmio) | 33 | int mmio) |
34 | { | 34 | { |
35 | unsigned long port = (unsigned long)base; | 35 | unsigned long port = (unsigned long)base; |
36 | ide_hwif_t *hwif; | 36 | ide_hwif_t *hwif = ide_find_port(port); |
37 | int index, i; | 37 | int i; |
38 | |||
39 | for (index = 0; index < MAX_HWIFS; ++index) { | ||
40 | hwif = ide_hwifs + index; | ||
41 | if (hwif->io_ports[IDE_DATA_OFFSET] == port) | ||
42 | goto found; | ||
43 | } | ||
44 | |||
45 | for (index = 0; index < MAX_HWIFS; ++index) { | ||
46 | hwif = ide_hwifs + index; | ||
47 | if (hwif->io_ports[IDE_DATA_OFFSET] == 0) | ||
48 | goto found; | ||
49 | } | ||
50 | 38 | ||
51 | return NULL; | 39 | if (hwif == NULL) |
52 | 40 | goto out; | |
53 | found: | ||
54 | 41 | ||
55 | hwif->hw.io_ports[IDE_DATA_OFFSET] = port; | 42 | hwif->io_ports[IDE_DATA_OFFSET] = port; |
56 | 43 | ||
57 | port += (1 << pdata->ioport_shift); | 44 | port += (1 << pdata->ioport_shift); |
58 | for (i = IDE_ERROR_OFFSET; i <= IDE_STATUS_OFFSET; | 45 | for (i = IDE_ERROR_OFFSET; i <= IDE_STATUS_OFFSET; |
59 | i++, port += (1 << pdata->ioport_shift)) | 46 | i++, port += (1 << pdata->ioport_shift)) |
60 | hwif->hw.io_ports[i] = port; | 47 | hwif->io_ports[i] = port; |
61 | 48 | ||
62 | hwif->hw.io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl; | 49 | hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl; |
63 | 50 | ||
64 | memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports)); | 51 | hwif->irq = irq; |
65 | hwif->hw.irq = hwif->irq = irq; | ||
66 | 52 | ||
67 | hwif->hw.dma = NO_DMA; | 53 | hwif->chipset = ide_generic; |
68 | hwif->chipset = hwif->hw.chipset = ide_generic; | ||
69 | 54 | ||
70 | if (mmio) { | 55 | if (mmio) { |
71 | hwif->mmio = 1; | 56 | hwif->mmio = 1; |
@@ -73,8 +58,8 @@ found: | |||
73 | } | 58 | } |
74 | 59 | ||
75 | hwif_prop.hwif = hwif; | 60 | hwif_prop.hwif = hwif; |
76 | hwif_prop.index = index; | 61 | hwif_prop.index = hwif->index; |
77 | 62 | out: | |
78 | return hwif; | 63 | return hwif; |
79 | } | 64 | } |
80 | 65 | ||
@@ -83,6 +68,7 @@ static int __devinit plat_ide_probe(struct platform_device *pdev) | |||
83 | struct resource *res_base, *res_alt, *res_irq; | 68 | struct resource *res_base, *res_alt, *res_irq; |
84 | ide_hwif_t *hwif; | 69 | ide_hwif_t *hwif; |
85 | struct pata_platform_info *pdata; | 70 | struct pata_platform_info *pdata; |
71 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
86 | int ret = 0; | 72 | int ret = 0; |
87 | int mmio = 0; | 73 | int mmio = 0; |
88 | 74 | ||
@@ -130,10 +116,11 @@ static int __devinit plat_ide_probe(struct platform_device *pdev) | |||
130 | hwif->gendev.parent = &pdev->dev; | 116 | hwif->gendev.parent = &pdev->dev; |
131 | hwif->noprobe = 0; | 117 | hwif->noprobe = 0; |
132 | 118 | ||
133 | probe_hwif_init(hwif); | 119 | idx[0] = hwif->index; |
120 | |||
121 | ide_device_add(idx); | ||
134 | 122 | ||
135 | platform_set_drvdata(pdev, hwif); | 123 | platform_set_drvdata(pdev, hwif); |
136 | ide_proc_register_port(hwif); | ||
137 | 124 | ||
138 | return 0; | 125 | return 0; |
139 | 126 | ||
diff --git a/drivers/ide/legacy/macide.c b/drivers/ide/legacy/macide.c index b557c45a5a9..e87cd2f1643 100644 --- a/drivers/ide/legacy/macide.c +++ b/drivers/ide/legacy/macide.c | |||
@@ -93,21 +93,21 @@ void macide_init(void) | |||
93 | 0, 0, macide_ack_intr, | 93 | 0, 0, macide_ack_intr, |
94 | // quadra_ide_iops, | 94 | // quadra_ide_iops, |
95 | IRQ_NUBUS_F); | 95 | IRQ_NUBUS_F); |
96 | index = ide_register_hw(&hw, 1, &hwif); | 96 | index = ide_register_hw(&hw, NULL, 1, &hwif); |
97 | break; | 97 | break; |
98 | case MAC_IDE_PB: | 98 | case MAC_IDE_PB: |
99 | ide_setup_ports(&hw, IDE_BASE, macide_offsets, | 99 | ide_setup_ports(&hw, IDE_BASE, macide_offsets, |
100 | 0, 0, macide_ack_intr, | 100 | 0, 0, macide_ack_intr, |
101 | // macide_pb_iops, | 101 | // macide_pb_iops, |
102 | IRQ_NUBUS_C); | 102 | IRQ_NUBUS_C); |
103 | index = ide_register_hw(&hw, 1, &hwif); | 103 | index = ide_register_hw(&hw, NULL, 1, &hwif); |
104 | break; | 104 | break; |
105 | case MAC_IDE_BABOON: | 105 | case MAC_IDE_BABOON: |
106 | ide_setup_ports(&hw, BABOON_BASE, macide_offsets, | 106 | ide_setup_ports(&hw, BABOON_BASE, macide_offsets, |
107 | 0, 0, NULL, | 107 | 0, 0, NULL, |
108 | // macide_baboon_iops, | 108 | // macide_baboon_iops, |
109 | IRQ_BABOON_1); | 109 | IRQ_BABOON_1); |
110 | index = ide_register_hw(&hw, 1, &hwif); | 110 | index = ide_register_hw(&hw, NULL, 1, &hwif); |
111 | if (index == -1) break; | 111 | if (index == -1) break; |
112 | if (macintosh_config->ident == MAC_MODEL_PB190) { | 112 | if (macintosh_config->ident == MAC_MODEL_PB190) { |
113 | 113 | ||
diff --git a/drivers/ide/legacy/q40ide.c b/drivers/ide/legacy/q40ide.c index e628a983ce3..a73db1bd482 100644 --- a/drivers/ide/legacy/q40ide.c +++ b/drivers/ide/legacy/q40ide.c | |||
@@ -89,9 +89,8 @@ void q40_ide_setup_ports ( hw_regs_t *hw, | |||
89 | else | 89 | else |
90 | hw->io_ports[i] = Q40_ISA_IO_B(base + offsets[i]); | 90 | hw->io_ports[i] = Q40_ISA_IO_B(base + offsets[i]); |
91 | } | 91 | } |
92 | 92 | ||
93 | hw->irq = irq; | 93 | hw->irq = irq; |
94 | hw->dma = NO_DMA; | ||
95 | hw->ack_intr = ack_intr; | 94 | hw->ack_intr = ack_intr; |
96 | /* | 95 | /* |
97 | * hw->iops = iops; | 96 | * hw->iops = iops; |
@@ -102,7 +101,7 @@ void q40_ide_setup_ports ( hw_regs_t *hw, | |||
102 | 101 | ||
103 | /* | 102 | /* |
104 | * the static array is needed to have the name reported in /proc/ioports, | 103 | * the static array is needed to have the name reported in /proc/ioports, |
105 | * hwif->name unfortunately isn´t available yet | 104 | * hwif->name unfortunately isn't available yet |
106 | */ | 105 | */ |
107 | static const char *q40_ide_names[Q40IDE_NUM_HWIFS]={ | 106 | static const char *q40_ide_names[Q40IDE_NUM_HWIFS]={ |
108 | "ide0", "ide1" | 107 | "ide0", "ide1" |
@@ -142,7 +141,7 @@ void q40ide_init(void) | |||
142 | 0, NULL, | 141 | 0, NULL, |
143 | // m68kide_iops, | 142 | // m68kide_iops, |
144 | q40ide_default_irq(pcide_bases[i])); | 143 | q40ide_default_irq(pcide_bases[i])); |
145 | index = ide_register_hw(&hw, 1, &hwif); | 144 | index = ide_register_hw(&hw, NULL, 1, &hwif); |
146 | // **FIXME** | 145 | // **FIXME** |
147 | if (index != -1) | 146 | if (index != -1) |
148 | hwif->mmio = 1; | 147 | hwif->mmio = 1; |
diff --git a/drivers/ide/legacy/qd65xx.c b/drivers/ide/legacy/qd65xx.c index 0c81d2d0b94..912e73853fa 100644 --- a/drivers/ide/legacy/qd65xx.c +++ b/drivers/ide/legacy/qd65xx.c | |||
@@ -89,26 +89,6 @@ | |||
89 | 89 | ||
90 | static int timings[4]={-1,-1,-1,-1}; /* stores current timing for each timer */ | 90 | static int timings[4]={-1,-1,-1,-1}; /* stores current timing for each timer */ |
91 | 91 | ||
92 | static void qd_write_reg (u8 content, unsigned long reg) | ||
93 | { | ||
94 | unsigned long flags; | ||
95 | |||
96 | spin_lock_irqsave(&ide_lock, flags); | ||
97 | outb(content,reg); | ||
98 | spin_unlock_irqrestore(&ide_lock, flags); | ||
99 | } | ||
100 | |||
101 | static u8 __init qd_read_reg (unsigned long reg) | ||
102 | { | ||
103 | unsigned long flags; | ||
104 | u8 read; | ||
105 | |||
106 | spin_lock_irqsave(&ide_lock, flags); | ||
107 | read = inb(reg); | ||
108 | spin_unlock_irqrestore(&ide_lock, flags); | ||
109 | return read; | ||
110 | } | ||
111 | |||
112 | /* | 92 | /* |
113 | * qd_select: | 93 | * qd_select: |
114 | * | 94 | * |
@@ -121,7 +101,7 @@ static void qd_select (ide_drive_t *drive) | |||
121 | (QD_TIMREG(drive) & 0x02); | 101 | (QD_TIMREG(drive) & 0x02); |
122 | 102 | ||
123 | if (timings[index] != QD_TIMING(drive)) | 103 | if (timings[index] != QD_TIMING(drive)) |
124 | qd_write_reg(timings[index] = QD_TIMING(drive), QD_TIMREG(drive)); | 104 | outb(timings[index] = QD_TIMING(drive), QD_TIMREG(drive)); |
125 | } | 105 | } |
126 | 106 | ||
127 | /* | 107 | /* |
@@ -284,7 +264,7 @@ static void qd6580_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
284 | } | 264 | } |
285 | 265 | ||
286 | if (!HWIF(drive)->channel && drive->media != ide_disk) { | 266 | if (!HWIF(drive)->channel && drive->media != ide_disk) { |
287 | qd_write_reg(0x5f, QD_CONTROL_PORT); | 267 | outb(0x5f, QD_CONTROL_PORT); |
288 | printk(KERN_WARNING "%s: ATAPI: disabled read-ahead FIFO " | 268 | printk(KERN_WARNING "%s: ATAPI: disabled read-ahead FIFO " |
289 | "and post-write buffer on %s.\n", | 269 | "and post-write buffer on %s.\n", |
290 | drive->name, HWIF(drive)->name); | 270 | drive->name, HWIF(drive)->name); |
@@ -301,16 +281,15 @@ static void qd6580_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
301 | 281 | ||
302 | static int __init qd_testreg(int port) | 282 | static int __init qd_testreg(int port) |
303 | { | 283 | { |
304 | u8 savereg; | ||
305 | u8 readreg; | ||
306 | unsigned long flags; | 284 | unsigned long flags; |
285 | u8 savereg, readreg; | ||
307 | 286 | ||
308 | spin_lock_irqsave(&ide_lock, flags); | 287 | local_irq_save(flags); |
309 | savereg = inb_p(port); | 288 | savereg = inb_p(port); |
310 | outb_p(QD_TESTVAL, port); /* safe value */ | 289 | outb_p(QD_TESTVAL, port); /* safe value */ |
311 | readreg = inb_p(port); | 290 | readreg = inb_p(port); |
312 | outb(savereg, port); | 291 | outb(savereg, port); |
313 | spin_unlock_irqrestore(&ide_lock, flags); | 292 | local_irq_restore(flags); |
314 | 293 | ||
315 | if (savereg == QD_TESTVAL) { | 294 | if (savereg == QD_TESTVAL) { |
316 | printk(KERN_ERR "Outch ! the probe for qd65xx isn't reliable !\n"); | 295 | printk(KERN_ERR "Outch ! the probe for qd65xx isn't reliable !\n"); |
@@ -364,13 +343,13 @@ static void __exit qd_unsetup(ide_hwif_t *hwif) | |||
364 | 343 | ||
365 | if (set_pio_mode == (void *)qd6500_set_pio_mode) { | 344 | if (set_pio_mode == (void *)qd6500_set_pio_mode) { |
366 | // will do it for both | 345 | // will do it for both |
367 | qd_write_reg(QD6500_DEF_DATA, QD_TIMREG(&hwif->drives[0])); | 346 | outb(QD6500_DEF_DATA, QD_TIMREG(&hwif->drives[0])); |
368 | } else if (set_pio_mode == (void *)qd6580_set_pio_mode) { | 347 | } else if (set_pio_mode == (void *)qd6580_set_pio_mode) { |
369 | if (QD_CONTROL(hwif) & QD_CONTR_SEC_DISABLED) { | 348 | if (QD_CONTROL(hwif) & QD_CONTR_SEC_DISABLED) { |
370 | qd_write_reg(QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0])); | 349 | outb(QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0])); |
371 | qd_write_reg(QD6580_DEF_DATA2, QD_TIMREG(&hwif->drives[1])); | 350 | outb(QD6580_DEF_DATA2, QD_TIMREG(&hwif->drives[1])); |
372 | } else { | 351 | } else { |
373 | qd_write_reg(hwif->channel ? QD6580_DEF_DATA2 : QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0])); | 352 | outb(hwif->channel ? QD6580_DEF_DATA2 : QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0])); |
374 | } | 353 | } |
375 | } else { | 354 | } else { |
376 | printk(KERN_WARNING "Unknown qd65xx tuning fonction !\n"); | 355 | printk(KERN_WARNING "Unknown qd65xx tuning fonction !\n"); |
@@ -389,10 +368,11 @@ static void __exit qd_unsetup(ide_hwif_t *hwif) | |||
389 | static int __init qd_probe(int base) | 368 | static int __init qd_probe(int base) |
390 | { | 369 | { |
391 | ide_hwif_t *hwif; | 370 | ide_hwif_t *hwif; |
371 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
392 | u8 config; | 372 | u8 config; |
393 | u8 unit; | 373 | u8 unit; |
394 | 374 | ||
395 | config = qd_read_reg(QD_CONFIG_PORT); | 375 | config = inb(QD_CONFIG_PORT); |
396 | 376 | ||
397 | if (! ((config & QD_CONFIG_BASEPORT) >> 1 == (base == 0xb0)) ) | 377 | if (! ((config & QD_CONFIG_BASEPORT) >> 1 == (base == 0xb0)) ) |
398 | return 1; | 378 | return 1; |
@@ -419,9 +399,9 @@ static int __init qd_probe(int base) | |||
419 | 399 | ||
420 | hwif->set_pio_mode = &qd6500_set_pio_mode; | 400 | hwif->set_pio_mode = &qd6500_set_pio_mode; |
421 | 401 | ||
422 | probe_hwif_init(hwif); | 402 | idx[0] = unit; |
423 | 403 | ||
424 | ide_proc_register_port(hwif); | 404 | ide_device_add(idx); |
425 | 405 | ||
426 | return 1; | 406 | return 1; |
427 | } | 407 | } |
@@ -436,7 +416,7 @@ static int __init qd_probe(int base) | |||
436 | 416 | ||
437 | /* qd6580 found */ | 417 | /* qd6580 found */ |
438 | 418 | ||
439 | control = qd_read_reg(QD_CONTROL_PORT); | 419 | control = inb(QD_CONTROL_PORT); |
440 | 420 | ||
441 | printk(KERN_NOTICE "qd6580 at %#x\n", base); | 421 | printk(KERN_NOTICE "qd6580 at %#x\n", base); |
442 | printk(KERN_DEBUG "qd6580: config=%#x, control=%#x, ID3=%u\n", | 422 | printk(KERN_DEBUG "qd6580: config=%#x, control=%#x, ID3=%u\n", |
@@ -453,11 +433,11 @@ static int __init qd_probe(int base) | |||
453 | 433 | ||
454 | hwif->set_pio_mode = &qd6580_set_pio_mode; | 434 | hwif->set_pio_mode = &qd6580_set_pio_mode; |
455 | 435 | ||
456 | probe_hwif_init(hwif); | 436 | idx[0] = unit; |
457 | 437 | ||
458 | qd_write_reg(QD_DEF_CONTR,QD_CONTROL_PORT); | 438 | ide_device_add(idx); |
459 | 439 | ||
460 | ide_proc_register_port(hwif); | 440 | outb(QD_DEF_CONTR, QD_CONTROL_PORT); |
461 | 441 | ||
462 | return 1; | 442 | return 1; |
463 | } else { | 443 | } else { |
@@ -474,19 +454,17 @@ static int __init qd_probe(int base) | |||
474 | 454 | ||
475 | hwif->set_pio_mode = &qd6580_set_pio_mode; | 455 | hwif->set_pio_mode = &qd6580_set_pio_mode; |
476 | 456 | ||
477 | probe_hwif_init(hwif); | ||
478 | |||
479 | qd_setup(mate, base, config | (control << 8), | 457 | qd_setup(mate, base, config | (control << 8), |
480 | QD6580_DEF_DATA2, QD6580_DEF_DATA2); | 458 | QD6580_DEF_DATA2, QD6580_DEF_DATA2); |
481 | 459 | ||
482 | mate->set_pio_mode = &qd6580_set_pio_mode; | 460 | mate->set_pio_mode = &qd6580_set_pio_mode; |
483 | 461 | ||
484 | probe_hwif_init(mate); | 462 | idx[0] = 0; |
463 | idx[1] = 1; | ||
485 | 464 | ||
486 | qd_write_reg(QD_DEF_CONTR,QD_CONTROL_PORT); | 465 | ide_device_add(idx); |
487 | 466 | ||
488 | ide_proc_register_port(hwif); | 467 | outb(QD_DEF_CONTR, QD_CONTROL_PORT); |
489 | ide_proc_register_port(mate); | ||
490 | 468 | ||
491 | return 0; /* no other qd65xx possible */ | 469 | return 0; /* no other qd65xx possible */ |
492 | } | 470 | } |
diff --git a/drivers/ide/legacy/umc8672.c b/drivers/ide/legacy/umc8672.c index 1151c92dd53..79577b91687 100644 --- a/drivers/ide/legacy/umc8672.c +++ b/drivers/ide/legacy/umc8672.c | |||
@@ -124,8 +124,9 @@ static void umc_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
124 | 124 | ||
125 | static int __init umc8672_probe(void) | 125 | static int __init umc8672_probe(void) |
126 | { | 126 | { |
127 | unsigned long flags; | ||
128 | ide_hwif_t *hwif, *mate; | 127 | ide_hwif_t *hwif, *mate; |
128 | unsigned long flags; | ||
129 | static u8 idx[4] = { 0, 1, 0xff, 0xff }; | ||
129 | 130 | ||
130 | if (!request_region(0x108, 2, "umc8672")) { | 131 | if (!request_region(0x108, 2, "umc8672")) { |
131 | printk(KERN_ERR "umc8672: ports 0x108-0x109 already in use.\n"); | 132 | printk(KERN_ERR "umc8672: ports 0x108-0x109 already in use.\n"); |
@@ -158,11 +159,7 @@ static int __init umc8672_probe(void) | |||
158 | mate->mate = hwif; | 159 | mate->mate = hwif; |
159 | mate->channel = 1; | 160 | mate->channel = 1; |
160 | 161 | ||
161 | probe_hwif_init(hwif); | 162 | ide_device_add(idx); |
162 | probe_hwif_init(mate); | ||
163 | |||
164 | ide_proc_register_port(hwif); | ||
165 | ide_proc_register_port(mate); | ||
166 | 163 | ||
167 | return 0; | 164 | return 0; |
168 | } | 165 | } |
diff --git a/drivers/ide/mips/au1xxx-ide.c b/drivers/ide/mips/au1xxx-ide.c index 47c035a550e..1de58566e5b 100644 --- a/drivers/ide/mips/au1xxx-ide.c +++ b/drivers/ide/mips/au1xxx-ide.c | |||
@@ -601,8 +601,9 @@ static int au_ide_probe(struct device *dev) | |||
601 | _auide_hwif *ahwif = &auide_hwif; | 601 | _auide_hwif *ahwif = &auide_hwif; |
602 | ide_hwif_t *hwif; | 602 | ide_hwif_t *hwif; |
603 | struct resource *res; | 603 | struct resource *res; |
604 | hw_regs_t *hw; | ||
605 | int ret = 0; | 604 | int ret = 0; |
605 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
606 | hw_regs_t hw; | ||
606 | 607 | ||
607 | #if defined(CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA) | 608 | #if defined(CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA) |
608 | char *mode = "MWDMA2"; | 609 | char *mode = "MWDMA2"; |
@@ -644,12 +645,12 @@ static int au_ide_probe(struct device *dev) | |||
644 | /* FIXME: This might possibly break PCMCIA IDE devices */ | 645 | /* FIXME: This might possibly break PCMCIA IDE devices */ |
645 | 646 | ||
646 | hwif = &ide_hwifs[pdev->id]; | 647 | hwif = &ide_hwifs[pdev->id]; |
647 | hw = &hwif->hw; | 648 | hwif->irq = ahwif->irq; |
648 | hwif->irq = hw->irq = ahwif->irq; | ||
649 | hwif->chipset = ide_au1xxx; | 649 | hwif->chipset = ide_au1xxx; |
650 | 650 | ||
651 | auide_setup_ports(hw, ahwif); | 651 | memset(&hw, 0, sizeof(hw)); |
652 | memcpy(hwif->io_ports, hw->io_ports, sizeof(hwif->io_ports)); | 652 | auide_setup_ports(&hw, ahwif); |
653 | memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports)); | ||
653 | 654 | ||
654 | hwif->ultra_mask = 0x0; /* Disable Ultra DMA */ | 655 | hwif->ultra_mask = 0x0; /* Disable Ultra DMA */ |
655 | #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA | 656 | #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA |
@@ -699,9 +700,6 @@ static int au_ide_probe(struct device *dev) | |||
699 | hwif->dma_host_on = &auide_dma_host_on; | 700 | hwif->dma_host_on = &auide_dma_host_on; |
700 | hwif->dma_lost_irq = &auide_dma_lost_irq; | 701 | hwif->dma_lost_irq = &auide_dma_lost_irq; |
701 | hwif->ide_dma_on = &auide_dma_on; | 702 | hwif->ide_dma_on = &auide_dma_on; |
702 | |||
703 | hwif->atapi_dma = 1; | ||
704 | |||
705 | #else /* !CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA */ | 703 | #else /* !CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA */ |
706 | hwif->channel = 0; | 704 | hwif->channel = 0; |
707 | hwif->hold = 1; | 705 | hwif->hold = 1; |
@@ -709,8 +707,10 @@ static int au_ide_probe(struct device *dev) | |||
709 | hwif->config_data = 0; /* no chipset-specific code */ | 707 | hwif->config_data = 0; /* no chipset-specific code */ |
710 | 708 | ||
711 | hwif->drives[0].autotune = 1; /* 1=autotune, 2=noautotune, 0=default */ | 709 | hwif->drives[0].autotune = 1; /* 1=autotune, 2=noautotune, 0=default */ |
710 | hwif->drives[1].autotune = 1; | ||
712 | #endif | 711 | #endif |
713 | hwif->drives[0].no_io_32bit = 1; | 712 | hwif->drives[0].no_io_32bit = 1; |
713 | hwif->drives[1].no_io_32bit = 1; | ||
714 | 714 | ||
715 | auide_hwif.hwif = hwif; | 715 | auide_hwif.hwif = hwif; |
716 | hwif->hwif_data = &auide_hwif; | 716 | hwif->hwif_data = &auide_hwif; |
@@ -720,9 +720,9 @@ static int au_ide_probe(struct device *dev) | |||
720 | dbdma_init_done = 1; | 720 | dbdma_init_done = 1; |
721 | #endif | 721 | #endif |
722 | 722 | ||
723 | probe_hwif_init(hwif); | 723 | idx[0] = hwif->index; |
724 | 724 | ||
725 | ide_proc_register_port(hwif); | 725 | ide_device_add(idx); |
726 | 726 | ||
727 | dev_set_drvdata(dev, hwif); | 727 | dev_set_drvdata(dev, hwif); |
728 | 728 | ||
diff --git a/drivers/ide/mips/swarm.c b/drivers/ide/mips/swarm.c index c2e29571b00..521edd41b57 100644 --- a/drivers/ide/mips/swarm.c +++ b/drivers/ide/mips/swarm.c | |||
@@ -71,6 +71,7 @@ static int __devinit swarm_ide_probe(struct device *dev) | |||
71 | u8 __iomem *base; | 71 | u8 __iomem *base; |
72 | phys_t offset, size; | 72 | phys_t offset, size; |
73 | int i; | 73 | int i; |
74 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
74 | 75 | ||
75 | if (!SIBYTE_HAVE_IDE) | 76 | if (!SIBYTE_HAVE_IDE) |
76 | return -ENODEV; | 77 | return -ENODEV; |
@@ -119,18 +120,15 @@ static int __devinit swarm_ide_probe(struct device *dev) | |||
119 | hwif->noprobe = 0; | 120 | hwif->noprobe = 0; |
120 | 121 | ||
121 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) | 122 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) |
122 | hwif->hw.io_ports[i] = | 123 | hwif->io_ports[i] = |
123 | (unsigned long)(base + ((0x1f0 + i) << 5)); | 124 | (unsigned long)(base + ((0x1f0 + i) << 5)); |
124 | hwif->hw.io_ports[IDE_CONTROL_OFFSET] = | 125 | hwif->io_ports[IDE_CONTROL_OFFSET] = |
125 | (unsigned long)(base + (0x3f6 << 5)); | 126 | (unsigned long)(base + (0x3f6 << 5)); |
126 | hwif->hw.irq = K_INT_GB_IDE; | 127 | hwif->irq = K_INT_GB_IDE; |
127 | 128 | ||
128 | memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports)); | 129 | idx[0] = hwif->index; |
129 | hwif->irq = hwif->hw.irq; | ||
130 | 130 | ||
131 | probe_hwif_init(hwif); | 131 | ide_device_add(idx); |
132 | |||
133 | ide_proc_register_port(hwif); | ||
134 | 132 | ||
135 | dev_set_drvdata(dev, hwif); | 133 | dev_set_drvdata(dev, hwif); |
136 | 134 | ||
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c index 3a4c2c26a77..19ec421f7b9 100644 --- a/drivers/ide/pci/aec62xx.c +++ b/drivers/ide/pci/aec62xx.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/aec62xx.c Version 0.25 Aug 1, 2007 | 2 | * linux/drivers/ide/pci/aec62xx.c Version 0.27 Sep 16, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org> |
5 | * Copyright (C) 2007 MontaVista Software, Inc. <source@mvista.com> | 5 | * Copyright (C) 2007 MontaVista Software, Inc. <source@mvista.com> |
@@ -141,19 +141,6 @@ static void aec_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
141 | drive->hwif->set_dma_mode(drive, pio + XFER_PIO_0); | 141 | drive->hwif->set_dma_mode(drive, pio + XFER_PIO_0); |
142 | } | 142 | } |
143 | 143 | ||
144 | static void aec62xx_dma_lost_irq (ide_drive_t *drive) | ||
145 | { | ||
146 | switch (HWIF(drive)->pci_dev->device) { | ||
147 | case PCI_DEVICE_ID_ARTOP_ATP860: | ||
148 | case PCI_DEVICE_ID_ARTOP_ATP860R: | ||
149 | case PCI_DEVICE_ID_ARTOP_ATP865: | ||
150 | case PCI_DEVICE_ID_ARTOP_ATP865R: | ||
151 | printk(" AEC62XX time out "); | ||
152 | default: | ||
153 | break; | ||
154 | } | ||
155 | } | ||
156 | |||
157 | static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const char *name) | 144 | static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const char *name) |
158 | { | 145 | { |
159 | int bus_speed = system_bus_clock(); | 146 | int bus_speed = system_bus_clock(); |
@@ -184,34 +171,21 @@ static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const ch | |||
184 | static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) | 171 | static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) |
185 | { | 172 | { |
186 | struct pci_dev *dev = hwif->pci_dev; | 173 | struct pci_dev *dev = hwif->pci_dev; |
187 | u8 reg54 = 0, mask = hwif->channel ? 0xf0 : 0x0f; | ||
188 | unsigned long flags; | ||
189 | 174 | ||
190 | hwif->set_pio_mode = &aec_set_pio_mode; | 175 | hwif->set_pio_mode = &aec_set_pio_mode; |
191 | 176 | ||
192 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) { | 177 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) |
193 | if(hwif->mate) | ||
194 | hwif->mate->serialized = hwif->serialized = 1; | ||
195 | hwif->set_dma_mode = &aec6210_set_mode; | 178 | hwif->set_dma_mode = &aec6210_set_mode; |
196 | } else | 179 | else |
197 | hwif->set_dma_mode = &aec6260_set_mode; | 180 | hwif->set_dma_mode = &aec6260_set_mode; |
198 | 181 | ||
199 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | ||
200 | |||
201 | if (hwif->dma_base == 0) | 182 | if (hwif->dma_base == 0) |
202 | return; | 183 | return; |
203 | 184 | ||
204 | hwif->ultra_mask = hwif->cds->udma_mask; | 185 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) |
205 | hwif->mwdma_mask = 0x07; | 186 | return; |
206 | |||
207 | hwif->dma_lost_irq = &aec62xx_dma_lost_irq; | ||
208 | 187 | ||
209 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) { | 188 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) { |
210 | spin_lock_irqsave(&ide_lock, flags); | ||
211 | pci_read_config_byte (dev, 0x54, ®54); | ||
212 | pci_write_config_byte(dev, 0x54, (reg54 & ~mask)); | ||
213 | spin_unlock_irqrestore(&ide_lock, flags); | ||
214 | } else if (hwif->cbl != ATA_CBL_PATA40_SHORT) { | ||
215 | u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01; | 189 | u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01; |
216 | 190 | ||
217 | pci_read_config_byte(hwif->pci_dev, 0x49, &ata66); | 191 | pci_read_config_byte(hwif->pci_dev, 0x49, &ata66); |
@@ -220,73 +194,53 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) | |||
220 | } | 194 | } |
221 | } | 195 | } |
222 | 196 | ||
223 | static int __devinit init_setup_aec62xx(struct pci_dev *dev, ide_pci_device_t *d) | 197 | static const struct ide_port_info aec62xx_chipsets[] __devinitdata = { |
224 | { | ||
225 | return ide_setup_pci_device(dev, d); | ||
226 | } | ||
227 | |||
228 | static int __devinit init_setup_aec6x80(struct pci_dev *dev, ide_pci_device_t *d) | ||
229 | { | ||
230 | unsigned long dma_base = pci_resource_start(dev, 4); | ||
231 | |||
232 | if (inb(dma_base + 2) & 0x10) { | ||
233 | d->name = (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R) ? | ||
234 | "AEC6880R" : "AEC6880"; | ||
235 | d->udma_mask = 0x7f; /* udma0-6 */ | ||
236 | } | ||
237 | |||
238 | return ide_setup_pci_device(dev, d); | ||
239 | } | ||
240 | |||
241 | static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | ||
242 | { /* 0 */ | 198 | { /* 0 */ |
243 | .name = "AEC6210", | 199 | .name = "AEC6210", |
244 | .init_setup = init_setup_aec62xx, | ||
245 | .init_chipset = init_chipset_aec62xx, | 200 | .init_chipset = init_chipset_aec62xx, |
246 | .init_hwif = init_hwif_aec62xx, | 201 | .init_hwif = init_hwif_aec62xx, |
247 | .autodma = AUTODMA, | ||
248 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, | 202 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, |
249 | .bootable = OFF_BOARD, | 203 | .host_flags = IDE_HFLAG_SERIALIZE | |
204 | IDE_HFLAG_NO_ATAPI_DMA | | ||
205 | IDE_HFLAG_OFF_BOARD, | ||
250 | .pio_mask = ATA_PIO4, | 206 | .pio_mask = ATA_PIO4, |
251 | .udma_mask = 0x07, /* udma0-2 */ | 207 | .mwdma_mask = ATA_MWDMA2, |
208 | .udma_mask = ATA_UDMA2, | ||
252 | },{ /* 1 */ | 209 | },{ /* 1 */ |
253 | .name = "AEC6260", | 210 | .name = "AEC6260", |
254 | .init_setup = init_setup_aec62xx, | ||
255 | .init_chipset = init_chipset_aec62xx, | 211 | .init_chipset = init_chipset_aec62xx, |
256 | .init_hwif = init_hwif_aec62xx, | 212 | .init_hwif = init_hwif_aec62xx, |
257 | .autodma = NOAUTODMA, | 213 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_NO_AUTODMA | |
258 | .bootable = OFF_BOARD, | 214 | IDE_HFLAG_OFF_BOARD, |
259 | .pio_mask = ATA_PIO4, | 215 | .pio_mask = ATA_PIO4, |
260 | .udma_mask = 0x1f, /* udma0-4 */ | 216 | .mwdma_mask = ATA_MWDMA2, |
217 | .udma_mask = ATA_UDMA4, | ||
261 | },{ /* 2 */ | 218 | },{ /* 2 */ |
262 | .name = "AEC6260R", | 219 | .name = "AEC6260R", |
263 | .init_setup = init_setup_aec62xx, | ||
264 | .init_chipset = init_chipset_aec62xx, | 220 | .init_chipset = init_chipset_aec62xx, |
265 | .init_hwif = init_hwif_aec62xx, | 221 | .init_hwif = init_hwif_aec62xx, |
266 | .autodma = AUTODMA, | ||
267 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, | 222 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, |
268 | .bootable = NEVER_BOARD, | 223 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA, |
269 | .pio_mask = ATA_PIO4, | 224 | .pio_mask = ATA_PIO4, |
270 | .udma_mask = 0x1f, /* udma0-4 */ | 225 | .mwdma_mask = ATA_MWDMA2, |
226 | .udma_mask = ATA_UDMA4, | ||
271 | },{ /* 3 */ | 227 | },{ /* 3 */ |
272 | .name = "AEC6280", | 228 | .name = "AEC6280", |
273 | .init_setup = init_setup_aec6x80, | ||
274 | .init_chipset = init_chipset_aec62xx, | 229 | .init_chipset = init_chipset_aec62xx, |
275 | .init_hwif = init_hwif_aec62xx, | 230 | .init_hwif = init_hwif_aec62xx, |
276 | .autodma = AUTODMA, | 231 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_OFF_BOARD, |
277 | .bootable = OFF_BOARD, | ||
278 | .pio_mask = ATA_PIO4, | 232 | .pio_mask = ATA_PIO4, |
279 | .udma_mask = 0x3f, /* udma0-5 */ | 233 | .mwdma_mask = ATA_MWDMA2, |
234 | .udma_mask = ATA_UDMA5, | ||
280 | },{ /* 4 */ | 235 | },{ /* 4 */ |
281 | .name = "AEC6280R", | 236 | .name = "AEC6280R", |
282 | .init_setup = init_setup_aec6x80, | ||
283 | .init_chipset = init_chipset_aec62xx, | 237 | .init_chipset = init_chipset_aec62xx, |
284 | .init_hwif = init_hwif_aec62xx, | 238 | .init_hwif = init_hwif_aec62xx, |
285 | .autodma = AUTODMA, | ||
286 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, | 239 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, |
287 | .bootable = OFF_BOARD, | 240 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_OFF_BOARD, |
288 | .pio_mask = ATA_PIO4, | 241 | .pio_mask = ATA_PIO4, |
289 | .udma_mask = 0x3f, /* udma0-5 */ | 242 | .mwdma_mask = ATA_MWDMA2, |
243 | .udma_mask = ATA_UDMA5, | ||
290 | } | 244 | } |
291 | }; | 245 | }; |
292 | 246 | ||
@@ -299,14 +253,26 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | |||
299 | * finds a device matching our IDE device tables. | 253 | * finds a device matching our IDE device tables. |
300 | * | 254 | * |
301 | * NOTE: since we're going to modify the 'name' field for AEC-6[26]80[R] | 255 | * NOTE: since we're going to modify the 'name' field for AEC-6[26]80[R] |
302 | * chips, pass a local copy of 'struct pci_device_id' down the call chain. | 256 | * chips, pass a local copy of 'struct ide_port_info' down the call chain. |
303 | */ | 257 | */ |
304 | 258 | ||
305 | static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 259 | static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
306 | { | 260 | { |
307 | ide_pci_device_t d = aec62xx_chipsets[id->driver_data]; | 261 | struct ide_port_info d; |
262 | u8 idx = id->driver_data; | ||
263 | |||
264 | d = aec62xx_chipsets[idx]; | ||
265 | |||
266 | if (idx == 3 || idx == 4) { | ||
267 | unsigned long dma_base = pci_resource_start(dev, 4); | ||
268 | |||
269 | if (inb(dma_base + 2) & 0x10) { | ||
270 | d.name = (idx == 4) ? "AEC6880R" : "AEC6880"; | ||
271 | d.udma_mask = ATA_UDMA6; | ||
272 | } | ||
273 | } | ||
308 | 274 | ||
309 | return d.init_setup(dev, &d); | 275 | return ide_setup_pci_device(dev, &d); |
310 | } | 276 | } |
311 | 277 | ||
312 | static const struct pci_device_id aec62xx_pci_tbl[] = { | 278 | static const struct pci_device_id aec62xx_pci_tbl[] = { |
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index 31d4e50647d..a607dd31a64 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/alim15x3.c Version 0.26 Jul 14 2007 | 2 | * linux/drivers/ide/pci/alim15x3.c Version 0.29 Sep 16 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 1998-2000 Michel Aubry, Maintainer | 4 | * Copyright (C) 1998-2000 Michel Aubry, Maintainer |
5 | * Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer | 5 | * Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer |
@@ -492,6 +492,13 @@ static unsigned int __devinit init_chipset_ali15x3 (struct pci_dev *dev, const c | |||
492 | * clear bit 7 | 492 | * clear bit 7 |
493 | */ | 493 | */ |
494 | pci_write_config_byte(dev, 0x4b, tmpbyte & 0x7F); | 494 | pci_write_config_byte(dev, 0x4b, tmpbyte & 0x7F); |
495 | /* | ||
496 | * check m1533, 0x5e, bit 1~4 == 1001 => & 00011110 = 00010010 | ||
497 | */ | ||
498 | if (m5229_revision >= 0x20 && isa_dev) { | ||
499 | pci_read_config_byte(isa_dev, 0x5e, &tmpbyte); | ||
500 | chip_is_1543c_e = ((tmpbyte & 0x1e) == 0x12) ? 1: 0; | ||
501 | } | ||
495 | goto out; | 502 | goto out; |
496 | } | 503 | } |
497 | 504 | ||
@@ -537,7 +544,30 @@ static unsigned int __devinit init_chipset_ali15x3 (struct pci_dev *dev, const c | |||
537 | pci_write_config_byte(isa_dev, 0x79, tmpbyte | 0x02); | 544 | pci_write_config_byte(isa_dev, 0x79, tmpbyte | 0x02); |
538 | } | 545 | } |
539 | } | 546 | } |
547 | |||
540 | out: | 548 | out: |
549 | /* | ||
550 | * CD_ROM DMA on (m5229, 0x53, bit0) | ||
551 | * Enable this bit even if we want to use PIO. | ||
552 | * PIO FIFO off (m5229, 0x53, bit1) | ||
553 | * The hardware will use 0x54h and 0x55h to control PIO FIFO. | ||
554 | * (Not on later devices it seems) | ||
555 | * | ||
556 | * 0x53 changes meaning on later revs - we must no touch | ||
557 | * bit 1 on them. Need to check if 0x20 is the right break. | ||
558 | */ | ||
559 | if (m5229_revision >= 0x20) { | ||
560 | pci_read_config_byte(dev, 0x53, &tmpbyte); | ||
561 | |||
562 | if (m5229_revision <= 0x20) | ||
563 | tmpbyte = (tmpbyte & (~0x02)) | 0x01; | ||
564 | else if (m5229_revision == 0xc7 || m5229_revision == 0xc8) | ||
565 | tmpbyte |= 0x03; | ||
566 | else | ||
567 | tmpbyte |= 0x01; | ||
568 | |||
569 | pci_write_config_byte(dev, 0x53, tmpbyte); | ||
570 | } | ||
541 | pci_dev_put(north); | 571 | pci_dev_put(north); |
542 | pci_dev_put(isa_dev); | 572 | pci_dev_put(isa_dev); |
543 | local_irq_restore(flags); | 573 | local_irq_restore(flags); |
@@ -616,36 +646,8 @@ static u8 __devinit ata66_ali15x3(ide_hwif_t *hwif) | |||
616 | if ((tmpbyte & (1 << hwif->channel)) == 0) | 646 | if ((tmpbyte & (1 << hwif->channel)) == 0) |
617 | cbl = ATA_CBL_PATA80; | 647 | cbl = ATA_CBL_PATA80; |
618 | } | 648 | } |
619 | } else { | ||
620 | /* | ||
621 | * check m1533, 0x5e, bit 1~4 == 1001 => & 00011110 = 00010010 | ||
622 | */ | ||
623 | pci_read_config_byte(isa_dev, 0x5e, &tmpbyte); | ||
624 | chip_is_1543c_e = ((tmpbyte & 0x1e) == 0x12) ? 1: 0; | ||
625 | } | 649 | } |
626 | 650 | ||
627 | /* | ||
628 | * CD_ROM DMA on (m5229, 0x53, bit0) | ||
629 | * Enable this bit even if we want to use PIO | ||
630 | * PIO FIFO off (m5229, 0x53, bit1) | ||
631 | * The hardware will use 0x54h and 0x55h to control PIO FIFO | ||
632 | * (Not on later devices it seems) | ||
633 | * | ||
634 | * 0x53 changes meaning on later revs - we must no touch | ||
635 | * bit 1 on them. Need to check if 0x20 is the right break | ||
636 | */ | ||
637 | |||
638 | pci_read_config_byte(dev, 0x53, &tmpbyte); | ||
639 | |||
640 | if(m5229_revision <= 0x20) | ||
641 | tmpbyte = (tmpbyte & (~0x02)) | 0x01; | ||
642 | else if (m5229_revision == 0xc7 || m5229_revision == 0xc8) | ||
643 | tmpbyte |= 0x03; | ||
644 | else | ||
645 | tmpbyte |= 0x01; | ||
646 | |||
647 | pci_write_config_byte(dev, 0x53, tmpbyte); | ||
648 | |||
649 | local_irq_restore(flags); | 651 | local_irq_restore(flags); |
650 | 652 | ||
651 | return cbl; | 653 | return cbl; |
@@ -664,35 +666,8 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif) | |||
664 | hwif->set_dma_mode = &ali_set_dma_mode; | 666 | hwif->set_dma_mode = &ali_set_dma_mode; |
665 | hwif->udma_filter = &ali_udma_filter; | 667 | hwif->udma_filter = &ali_udma_filter; |
666 | 668 | ||
667 | /* don't use LBA48 DMA on ALi devices before rev 0xC5 */ | 669 | if (hwif->dma_base == 0) |
668 | hwif->no_lba48_dma = (m5229_revision <= 0xC4) ? 1 : 0; | ||
669 | |||
670 | if (!hwif->dma_base) { | ||
671 | hwif->drives[0].autotune = 1; | ||
672 | hwif->drives[1].autotune = 1; | ||
673 | return; | 670 | return; |
674 | } | ||
675 | |||
676 | /* | ||
677 | * check in ->init_dma guarantees m5229_revision >= 0x20 here | ||
678 | */ | ||
679 | |||
680 | if (m5229_revision > 0x20) | ||
681 | hwif->atapi_dma = 1; | ||
682 | |||
683 | if (m5229_revision <= 0x20) | ||
684 | hwif->ultra_mask = 0x00; /* no udma */ | ||
685 | else if (m5229_revision < 0xC2) | ||
686 | hwif->ultra_mask = 0x07; /* udma0-2 */ | ||
687 | else if (m5229_revision == 0xC2 || m5229_revision == 0xC3) | ||
688 | hwif->ultra_mask = 0x1f; /* udma0-4 */ | ||
689 | else if (m5229_revision == 0xC4) | ||
690 | hwif->ultra_mask = 0x3f; /* udma0-5 */ | ||
691 | else | ||
692 | hwif->ultra_mask = 0x7f; /* udma0-6 */ | ||
693 | |||
694 | hwif->mwdma_mask = 0x07; | ||
695 | hwif->swdma_mask = 0x07; | ||
696 | 671 | ||
697 | hwif->dma_setup = &ali15x3_dma_setup; | 672 | hwif->dma_setup = &ali15x3_dma_setup; |
698 | 673 | ||
@@ -771,14 +746,15 @@ static void __devinit init_dma_ali15x3 (ide_hwif_t *hwif, unsigned long dmabase) | |||
771 | ide_setup_dma(hwif, dmabase, 8); | 746 | ide_setup_dma(hwif, dmabase, 8); |
772 | } | 747 | } |
773 | 748 | ||
774 | static ide_pci_device_t ali15x3_chipset __devinitdata = { | 749 | static const struct ide_port_info ali15x3_chipset __devinitdata = { |
775 | .name = "ALI15X3", | 750 | .name = "ALI15X3", |
776 | .init_chipset = init_chipset_ali15x3, | 751 | .init_chipset = init_chipset_ali15x3, |
777 | .init_hwif = init_hwif_ali15x3, | 752 | .init_hwif = init_hwif_ali15x3, |
778 | .init_dma = init_dma_ali15x3, | 753 | .init_dma = init_dma_ali15x3, |
779 | .autodma = AUTODMA, | 754 | .host_flags = IDE_HFLAG_BOOTABLE, |
780 | .bootable = ON_BOARD, | ||
781 | .pio_mask = ATA_PIO5, | 755 | .pio_mask = ATA_PIO5, |
756 | .swdma_mask = ATA_SWDMA2, | ||
757 | .mwdma_mask = ATA_MWDMA2, | ||
782 | }; | 758 | }; |
783 | 759 | ||
784 | /** | 760 | /** |
@@ -796,15 +772,34 @@ static int __devinit alim15x3_init_one(struct pci_dev *dev, const struct pci_dev | |||
796 | { }, | 772 | { }, |
797 | }; | 773 | }; |
798 | 774 | ||
799 | ide_pci_device_t *d = &ali15x3_chipset; | 775 | struct ide_port_info d = ali15x3_chipset; |
776 | u8 rev = dev->revision; | ||
800 | 777 | ||
801 | if (pci_dev_present(ati_rs100)) | 778 | if (pci_dev_present(ati_rs100)) |
802 | printk(KERN_WARNING "alim15x3: ATI Radeon IGP Northbridge is not yet fully tested.\n"); | 779 | printk(KERN_WARNING "alim15x3: ATI Radeon IGP Northbridge is not yet fully tested.\n"); |
803 | 780 | ||
781 | /* don't use LBA48 DMA on ALi devices before rev 0xC5 */ | ||
782 | if (rev <= 0xC4) | ||
783 | d.host_flags |= IDE_HFLAG_NO_LBA48_DMA; | ||
784 | |||
785 | if (rev >= 0x20) { | ||
786 | if (rev == 0x20) | ||
787 | d.host_flags |= IDE_HFLAG_NO_ATAPI_DMA; | ||
788 | |||
789 | if (rev < 0xC2) | ||
790 | d.udma_mask = ATA_UDMA2; | ||
791 | else if (rev == 0xC2 || rev == 0xC3) | ||
792 | d.udma_mask = ATA_UDMA4; | ||
793 | else if (rev == 0xC4) | ||
794 | d.udma_mask = ATA_UDMA5; | ||
795 | else | ||
796 | d.udma_mask = ATA_UDMA6; | ||
797 | } | ||
798 | |||
804 | #if defined(CONFIG_SPARC64) | 799 | #if defined(CONFIG_SPARC64) |
805 | d->init_hwif = init_hwif_common_ali15x3; | 800 | d.init_hwif = init_hwif_common_ali15x3; |
806 | #endif /* CONFIG_SPARC64 */ | 801 | #endif /* CONFIG_SPARC64 */ |
807 | return ide_setup_pci_device(dev, d); | 802 | return ide_setup_pci_device(dev, &d); |
808 | } | 803 | } |
809 | 804 | ||
810 | 805 | ||
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c index 3bf3d931eea..8d4125ec252 100644 --- a/drivers/ide/pci/amd74xx.c +++ b/drivers/ide/pci/amd74xx.c | |||
@@ -77,7 +77,7 @@ static struct amd_ide_chip { | |||
77 | }; | 77 | }; |
78 | 78 | ||
79 | static struct amd_ide_chip *amd_config; | 79 | static struct amd_ide_chip *amd_config; |
80 | static ide_pci_device_t *amd_chipset; | 80 | static const struct ide_port_info *amd_chipset; |
81 | static unsigned int amd_80w; | 81 | static unsigned int amd_80w; |
82 | static unsigned int amd_clock; | 82 | static unsigned int amd_clock; |
83 | 83 | ||
@@ -233,7 +233,6 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch | |||
233 | * Print the boot message. | 233 | * Print the boot message. |
234 | */ | 234 | */ |
235 | 235 | ||
236 | pci_read_config_byte(dev, PCI_REVISION_ID, &t); | ||
237 | printk(KERN_INFO "%s: %s (rev %02x) UDMA%s controller\n", | 236 | printk(KERN_INFO "%s: %s (rev %02x) UDMA%s controller\n", |
238 | amd_chipset->name, pci_name(dev), dev->revision, | 237 | amd_chipset->name, pci_name(dev), dev->revision, |
239 | amd_dma[fls(amd_config->udma_mask) - 1]); | 238 | amd_dma[fls(amd_config->udma_mask) - 1]); |
@@ -243,29 +242,18 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch | |||
243 | 242 | ||
244 | static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) | 243 | static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) |
245 | { | 244 | { |
246 | int i; | ||
247 | |||
248 | if (hwif->irq == 0) /* 0 is bogus but will do for now */ | 245 | if (hwif->irq == 0) /* 0 is bogus but will do for now */ |
249 | hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel); | 246 | hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel); |
250 | 247 | ||
251 | hwif->set_pio_mode = &amd_set_pio_mode; | 248 | hwif->set_pio_mode = &amd_set_pio_mode; |
252 | hwif->set_dma_mode = &amd_set_drive; | 249 | hwif->set_dma_mode = &amd_set_drive; |
253 | 250 | ||
254 | for (i = 0; i < 2; i++) { | ||
255 | hwif->drives[i].io_32bit = 1; | ||
256 | hwif->drives[i].unmask = 1; | ||
257 | hwif->drives[i].autotune = 1; | ||
258 | } | ||
259 | |||
260 | if (!hwif->dma_base) | 251 | if (!hwif->dma_base) |
261 | return; | 252 | return; |
262 | 253 | ||
263 | hwif->atapi_dma = 1; | ||
264 | |||
265 | hwif->ultra_mask = amd_config->udma_mask; | 254 | hwif->ultra_mask = amd_config->udma_mask; |
266 | hwif->mwdma_mask = 0x07; | 255 | if (amd_config->flags & AMD_BAD_SWDMA) |
267 | if ((amd_config->flags & AMD_BAD_SWDMA) == 0) | 256 | hwif->swdma_mask = 0x00; |
268 | hwif->swdma_mask = 0x07; | ||
269 | 257 | ||
270 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) { | 258 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) { |
271 | if ((amd_80w >> hwif->channel) & 1) | 259 | if ((amd_80w >> hwif->channel) & 1) |
@@ -275,18 +263,24 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) | |||
275 | } | 263 | } |
276 | } | 264 | } |
277 | 265 | ||
266 | #define IDE_HFLAGS_AMD \ | ||
267 | (IDE_HFLAG_PIO_NO_BLACKLIST | \ | ||
268 | IDE_HFLAG_PIO_NO_DOWNGRADE | \ | ||
269 | IDE_HFLAG_POST_SET_MODE | \ | ||
270 | IDE_HFLAG_IO_32BIT | \ | ||
271 | IDE_HFLAG_UNMASK_IRQS | \ | ||
272 | IDE_HFLAG_BOOTABLE) | ||
273 | |||
278 | #define DECLARE_AMD_DEV(name_str) \ | 274 | #define DECLARE_AMD_DEV(name_str) \ |
279 | { \ | 275 | { \ |
280 | .name = name_str, \ | 276 | .name = name_str, \ |
281 | .init_chipset = init_chipset_amd74xx, \ | 277 | .init_chipset = init_chipset_amd74xx, \ |
282 | .init_hwif = init_hwif_amd74xx, \ | 278 | .init_hwif = init_hwif_amd74xx, \ |
283 | .autodma = AUTODMA, \ | ||
284 | .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \ | 279 | .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \ |
285 | .bootable = ON_BOARD, \ | 280 | .host_flags = IDE_HFLAGS_AMD, \ |
286 | .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST \ | ||
287 | | IDE_HFLAG_PIO_NO_DOWNGRADE \ | ||
288 | | IDE_HFLAG_POST_SET_MODE, \ | ||
289 | .pio_mask = ATA_PIO5, \ | 281 | .pio_mask = ATA_PIO5, \ |
282 | .swdma_mask = ATA_SWDMA2, \ | ||
283 | .mwdma_mask = ATA_MWDMA2, \ | ||
290 | } | 284 | } |
291 | 285 | ||
292 | #define DECLARE_NV_DEV(name_str) \ | 286 | #define DECLARE_NV_DEV(name_str) \ |
@@ -294,16 +288,14 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) | |||
294 | .name = name_str, \ | 288 | .name = name_str, \ |
295 | .init_chipset = init_chipset_amd74xx, \ | 289 | .init_chipset = init_chipset_amd74xx, \ |
296 | .init_hwif = init_hwif_amd74xx, \ | 290 | .init_hwif = init_hwif_amd74xx, \ |
297 | .autodma = AUTODMA, \ | ||
298 | .enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \ | 291 | .enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \ |
299 | .bootable = ON_BOARD, \ | 292 | .host_flags = IDE_HFLAGS_AMD, \ |
300 | .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST \ | ||
301 | | IDE_HFLAG_PIO_NO_DOWNGRADE \ | ||
302 | | IDE_HFLAG_POST_SET_MODE, \ | ||
303 | .pio_mask = ATA_PIO5, \ | 293 | .pio_mask = ATA_PIO5, \ |
294 | .swdma_mask = ATA_SWDMA2, \ | ||
295 | .mwdma_mask = ATA_MWDMA2, \ | ||
304 | } | 296 | } |
305 | 297 | ||
306 | static ide_pci_device_t amd74xx_chipsets[] __devinitdata = { | 298 | static const struct ide_port_info amd74xx_chipsets[] __devinitdata = { |
307 | /* 0 */ DECLARE_AMD_DEV("AMD7401"), | 299 | /* 0 */ DECLARE_AMD_DEV("AMD7401"), |
308 | /* 1 */ DECLARE_AMD_DEV("AMD7409"), | 300 | /* 1 */ DECLARE_AMD_DEV("AMD7409"), |
309 | /* 2 */ DECLARE_AMD_DEV("AMD7411"), | 301 | /* 2 */ DECLARE_AMD_DEV("AMD7411"), |
diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c index 446900da132..ef8e0164ef7 100644 --- a/drivers/ide/pci/atiixp.c +++ b/drivers/ide/pci/atiixp.c | |||
@@ -172,21 +172,12 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) | |||
172 | u8 ch = hwif->channel; | 172 | u8 ch = hwif->channel; |
173 | struct pci_dev *pdev = hwif->pci_dev; | 173 | struct pci_dev *pdev = hwif->pci_dev; |
174 | 174 | ||
175 | if (!hwif->irq) | ||
176 | hwif->irq = ch ? 15 : 14; | ||
177 | |||
178 | hwif->set_pio_mode = &atiixp_set_pio_mode; | 175 | hwif->set_pio_mode = &atiixp_set_pio_mode; |
179 | hwif->set_dma_mode = &atiixp_set_dma_mode; | 176 | hwif->set_dma_mode = &atiixp_set_dma_mode; |
180 | hwif->drives[0].autotune = 1; | ||
181 | hwif->drives[1].autotune = 1; | ||
182 | 177 | ||
183 | if (!hwif->dma_base) | 178 | if (!hwif->dma_base) |
184 | return; | 179 | return; |
185 | 180 | ||
186 | hwif->atapi_dma = 1; | ||
187 | hwif->ultra_mask = 0x3f; | ||
188 | hwif->mwdma_mask = 0x07; | ||
189 | |||
190 | pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode); | 181 | pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode); |
191 | 182 | ||
192 | if ((udma_mode & 0x07) >= 0x04 || (udma_mode & 0x70) >= 0x40) | 183 | if ((udma_mode & 0x07) >= 0x04 || (udma_mode & 0x70) >= 0x40) |
@@ -198,23 +189,24 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) | |||
198 | hwif->dma_host_off = &atiixp_dma_host_off; | 189 | hwif->dma_host_off = &atiixp_dma_host_off; |
199 | } | 190 | } |
200 | 191 | ||
201 | 192 | static const struct ide_port_info atiixp_pci_info[] __devinitdata = { | |
202 | static ide_pci_device_t atiixp_pci_info[] __devinitdata = { | ||
203 | { /* 0 */ | 193 | { /* 0 */ |
204 | .name = "ATIIXP", | 194 | .name = "ATIIXP", |
205 | .init_hwif = init_hwif_atiixp, | 195 | .init_hwif = init_hwif_atiixp, |
206 | .autodma = AUTODMA, | ||
207 | .enablebits = {{0x48,0x01,0x00}, {0x48,0x08,0x00}}, | 196 | .enablebits = {{0x48,0x01,0x00}, {0x48,0x08,0x00}}, |
208 | .bootable = ON_BOARD, | 197 | .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_BOOTABLE, |
209 | .pio_mask = ATA_PIO4, | 198 | .pio_mask = ATA_PIO4, |
199 | .mwdma_mask = ATA_MWDMA2, | ||
200 | .udma_mask = ATA_UDMA5, | ||
210 | },{ /* 1 */ | 201 | },{ /* 1 */ |
211 | .name = "SB600_PATA", | 202 | .name = "SB600_PATA", |
212 | .init_hwif = init_hwif_atiixp, | 203 | .init_hwif = init_hwif_atiixp, |
213 | .autodma = AUTODMA, | ||
214 | .enablebits = {{0x48,0x01,0x00}, {0x00,0x00,0x00}}, | 204 | .enablebits = {{0x48,0x01,0x00}, {0x00,0x00,0x00}}, |
215 | .bootable = ON_BOARD, | 205 | .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_LEGACY_IRQS | |
216 | .host_flags = IDE_HFLAG_SINGLE, | 206 | IDE_HFLAG_BOOTABLE, |
217 | .pio_mask = ATA_PIO4, | 207 | .pio_mask = ATA_PIO4, |
208 | .mwdma_mask = ATA_MWDMA2, | ||
209 | .udma_mask = ATA_UDMA5, | ||
218 | }, | 210 | }, |
219 | }; | 211 | }; |
220 | 212 | ||
diff --git a/drivers/ide/pci/cmd640.c b/drivers/ide/pci/cmd640.c index f369645e4d1..4aa48104e0c 100644 --- a/drivers/ide/pci/cmd640.c +++ b/drivers/ide/pci/cmd640.c | |||
@@ -185,6 +185,8 @@ static u8 recovery_counts[4] = {16, 16, 16, 16}; /* Recovery count (encoded) */ | |||
185 | 185 | ||
186 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ | 186 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ |
187 | 187 | ||
188 | static DEFINE_SPINLOCK(cmd640_lock); | ||
189 | |||
188 | /* | 190 | /* |
189 | * These are initialized to point at the devices we control | 191 | * These are initialized to point at the devices we control |
190 | */ | 192 | */ |
@@ -258,12 +260,12 @@ static u8 get_cmd640_reg_vlb (u16 reg) | |||
258 | 260 | ||
259 | static u8 get_cmd640_reg(u16 reg) | 261 | static u8 get_cmd640_reg(u16 reg) |
260 | { | 262 | { |
261 | u8 b; | ||
262 | unsigned long flags; | 263 | unsigned long flags; |
264 | u8 b; | ||
263 | 265 | ||
264 | spin_lock_irqsave(&ide_lock, flags); | 266 | spin_lock_irqsave(&cmd640_lock, flags); |
265 | b = __get_cmd640_reg(reg); | 267 | b = __get_cmd640_reg(reg); |
266 | spin_unlock_irqrestore(&ide_lock, flags); | 268 | spin_unlock_irqrestore(&cmd640_lock, flags); |
267 | return b; | 269 | return b; |
268 | } | 270 | } |
269 | 271 | ||
@@ -271,9 +273,9 @@ static void put_cmd640_reg(u16 reg, u8 val) | |||
271 | { | 273 | { |
272 | unsigned long flags; | 274 | unsigned long flags; |
273 | 275 | ||
274 | spin_lock_irqsave(&ide_lock, flags); | 276 | spin_lock_irqsave(&cmd640_lock, flags); |
275 | __put_cmd640_reg(reg,val); | 277 | __put_cmd640_reg(reg,val); |
276 | spin_unlock_irqrestore(&ide_lock, flags); | 278 | spin_unlock_irqrestore(&cmd640_lock, flags); |
277 | } | 279 | } |
278 | 280 | ||
279 | static int __init match_pci_cmd640_device (void) | 281 | static int __init match_pci_cmd640_device (void) |
@@ -351,7 +353,7 @@ static int __init secondary_port_responding (void) | |||
351 | { | 353 | { |
352 | unsigned long flags; | 354 | unsigned long flags; |
353 | 355 | ||
354 | spin_lock_irqsave(&ide_lock, flags); | 356 | spin_lock_irqsave(&cmd640_lock, flags); |
355 | 357 | ||
356 | outb_p(0x0a, 0x170 + IDE_SELECT_OFFSET); /* select drive0 */ | 358 | outb_p(0x0a, 0x170 + IDE_SELECT_OFFSET); /* select drive0 */ |
357 | udelay(100); | 359 | udelay(100); |
@@ -359,11 +361,11 @@ static int __init secondary_port_responding (void) | |||
359 | outb_p(0x1a, 0x170 + IDE_SELECT_OFFSET); /* select drive1 */ | 361 | outb_p(0x1a, 0x170 + IDE_SELECT_OFFSET); /* select drive1 */ |
360 | udelay(100); | 362 | udelay(100); |
361 | if ((inb_p(0x170 + IDE_SELECT_OFFSET) & 0x1f) != 0x1a) { | 363 | if ((inb_p(0x170 + IDE_SELECT_OFFSET) & 0x1f) != 0x1a) { |
362 | spin_unlock_irqrestore(&ide_lock, flags); | 364 | spin_unlock_irqrestore(&cmd640_lock, flags); |
363 | return 0; /* nothing responded */ | 365 | return 0; /* nothing responded */ |
364 | } | 366 | } |
365 | } | 367 | } |
366 | spin_unlock_irqrestore(&ide_lock, flags); | 368 | spin_unlock_irqrestore(&cmd640_lock, flags); |
367 | return 1; /* success */ | 369 | return 1; /* success */ |
368 | } | 370 | } |
369 | 371 | ||
@@ -440,11 +442,11 @@ static void __init setup_device_ptrs (void) | |||
440 | static void set_prefetch_mode (unsigned int index, int mode) | 442 | static void set_prefetch_mode (unsigned int index, int mode) |
441 | { | 443 | { |
442 | ide_drive_t *drive = cmd_drives[index]; | 444 | ide_drive_t *drive = cmd_drives[index]; |
445 | unsigned long flags; | ||
443 | int reg = prefetch_regs[index]; | 446 | int reg = prefetch_regs[index]; |
444 | u8 b; | 447 | u8 b; |
445 | unsigned long flags; | ||
446 | 448 | ||
447 | spin_lock_irqsave(&ide_lock, flags); | 449 | spin_lock_irqsave(&cmd640_lock, flags); |
448 | b = __get_cmd640_reg(reg); | 450 | b = __get_cmd640_reg(reg); |
449 | if (mode) { /* want prefetch on? */ | 451 | if (mode) { /* want prefetch on? */ |
450 | #if CMD640_PREFETCH_MASKS | 452 | #if CMD640_PREFETCH_MASKS |
@@ -460,7 +462,7 @@ static void set_prefetch_mode (unsigned int index, int mode) | |||
460 | b |= prefetch_masks[index]; /* disable prefetch */ | 462 | b |= prefetch_masks[index]; /* disable prefetch */ |
461 | } | 463 | } |
462 | __put_cmd640_reg(reg, b); | 464 | __put_cmd640_reg(reg, b); |
463 | spin_unlock_irqrestore(&ide_lock, flags); | 465 | spin_unlock_irqrestore(&cmd640_lock, flags); |
464 | } | 466 | } |
465 | 467 | ||
466 | /* | 468 | /* |
@@ -561,7 +563,7 @@ static void program_drive_counts (unsigned int index) | |||
561 | /* | 563 | /* |
562 | * Now that everything is ready, program the new timings | 564 | * Now that everything is ready, program the new timings |
563 | */ | 565 | */ |
564 | spin_lock_irqsave(&ide_lock, flags); | 566 | spin_lock_irqsave(&cmd640_lock, flags); |
565 | /* | 567 | /* |
566 | * Program the address_setup clocks into ARTTIM reg, | 568 | * Program the address_setup clocks into ARTTIM reg, |
567 | * and then the active/recovery counts into the DRWTIM reg | 569 | * and then the active/recovery counts into the DRWTIM reg |
@@ -570,7 +572,7 @@ static void program_drive_counts (unsigned int index) | |||
570 | setup_count |= __get_cmd640_reg(arttim_regs[index]) & 0x3f; | 572 | setup_count |= __get_cmd640_reg(arttim_regs[index]) & 0x3f; |
571 | __put_cmd640_reg(arttim_regs[index], setup_count); | 573 | __put_cmd640_reg(arttim_regs[index], setup_count); |
572 | __put_cmd640_reg(drwtim_regs[index], pack_nibbles(active_count, recovery_count)); | 574 | __put_cmd640_reg(drwtim_regs[index], pack_nibbles(active_count, recovery_count)); |
573 | spin_unlock_irqrestore(&ide_lock, flags); | 575 | spin_unlock_irqrestore(&cmd640_lock, flags); |
574 | } | 576 | } |
575 | 577 | ||
576 | /* | 578 | /* |
@@ -670,20 +672,20 @@ static void cmd640_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
670 | 672 | ||
671 | static int pci_conf1(void) | 673 | static int pci_conf1(void) |
672 | { | 674 | { |
673 | u32 tmp; | ||
674 | unsigned long flags; | 675 | unsigned long flags; |
676 | u32 tmp; | ||
675 | 677 | ||
676 | spin_lock_irqsave(&ide_lock, flags); | 678 | spin_lock_irqsave(&cmd640_lock, flags); |
677 | outb(0x01, 0xCFB); | 679 | outb(0x01, 0xCFB); |
678 | tmp = inl(0xCF8); | 680 | tmp = inl(0xCF8); |
679 | outl(0x80000000, 0xCF8); | 681 | outl(0x80000000, 0xCF8); |
680 | if (inl(0xCF8) == 0x80000000) { | 682 | if (inl(0xCF8) == 0x80000000) { |
681 | outl(tmp, 0xCF8); | 683 | outl(tmp, 0xCF8); |
682 | spin_unlock_irqrestore(&ide_lock, flags); | 684 | spin_unlock_irqrestore(&cmd640_lock, flags); |
683 | return 1; | 685 | return 1; |
684 | } | 686 | } |
685 | outl(tmp, 0xCF8); | 687 | outl(tmp, 0xCF8); |
686 | spin_unlock_irqrestore(&ide_lock, flags); | 688 | spin_unlock_irqrestore(&cmd640_lock, flags); |
687 | return 0; | 689 | return 0; |
688 | } | 690 | } |
689 | 691 | ||
@@ -691,15 +693,15 @@ static int pci_conf2(void) | |||
691 | { | 693 | { |
692 | unsigned long flags; | 694 | unsigned long flags; |
693 | 695 | ||
694 | spin_lock_irqsave(&ide_lock, flags); | 696 | spin_lock_irqsave(&cmd640_lock, flags); |
695 | outb(0x00, 0xCFB); | 697 | outb(0x00, 0xCFB); |
696 | outb(0x00, 0xCF8); | 698 | outb(0x00, 0xCF8); |
697 | outb(0x00, 0xCFA); | 699 | outb(0x00, 0xCFA); |
698 | if (inb(0xCF8) == 0x00 && inb(0xCF8) == 0x00) { | 700 | if (inb(0xCF8) == 0x00 && inb(0xCF8) == 0x00) { |
699 | spin_unlock_irqrestore(&ide_lock, flags); | 701 | spin_unlock_irqrestore(&cmd640_lock, flags); |
700 | return 1; | 702 | return 1; |
701 | } | 703 | } |
702 | spin_unlock_irqrestore(&ide_lock, flags); | 704 | spin_unlock_irqrestore(&cmd640_lock, flags); |
703 | return 0; | 705 | return 0; |
704 | } | 706 | } |
705 | 707 | ||
diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c index f3d3bde8dab..ea0143ef5fe 100644 --- a/drivers/ide/pci/cmd64x.c +++ b/drivers/ide/pci/cmd64x.c | |||
@@ -439,11 +439,8 @@ static unsigned int __devinit init_chipset_cmd64x(struct pci_dev *dev, const cha | |||
439 | u8 mrdmode = 0; | 439 | u8 mrdmode = 0; |
440 | 440 | ||
441 | if (dev->device == PCI_DEVICE_ID_CMD_646) { | 441 | if (dev->device == PCI_DEVICE_ID_CMD_646) { |
442 | u8 rev = 0; | ||
443 | 442 | ||
444 | pci_read_config_byte(dev, PCI_REVISION_ID, &rev); | 443 | switch (dev->revision) { |
445 | |||
446 | switch (rev) { | ||
447 | case 0x07: | 444 | case 0x07: |
448 | case 0x05: | 445 | case 0x05: |
449 | printk("%s: UltraDMA capable\n", name); | 446 | printk("%s: UltraDMA capable\n", name); |
@@ -505,22 +502,13 @@ static u8 __devinit ata66_cmd64x(ide_hwif_t *hwif) | |||
505 | static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) | 502 | static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) |
506 | { | 503 | { |
507 | struct pci_dev *dev = hwif->pci_dev; | 504 | struct pci_dev *dev = hwif->pci_dev; |
508 | u8 rev = 0; | ||
509 | |||
510 | pci_read_config_byte(dev, PCI_REVISION_ID, &rev); | ||
511 | 505 | ||
512 | hwif->set_pio_mode = &cmd64x_set_pio_mode; | 506 | hwif->set_pio_mode = &cmd64x_set_pio_mode; |
513 | hwif->set_dma_mode = &cmd64x_set_dma_mode; | 507 | hwif->set_dma_mode = &cmd64x_set_dma_mode; |
514 | 508 | ||
515 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | ||
516 | |||
517 | if (!hwif->dma_base) | 509 | if (!hwif->dma_base) |
518 | return; | 510 | return; |
519 | 511 | ||
520 | hwif->atapi_dma = 1; | ||
521 | hwif->mwdma_mask = 0x07; | ||
522 | hwif->ultra_mask = hwif->cds->udma_mask; | ||
523 | |||
524 | /* | 512 | /* |
525 | * UltraDMA only supported on PCI646U and PCI646U2, which | 513 | * UltraDMA only supported on PCI646U and PCI646U2, which |
526 | * correspond to revisions 0x03, 0x05 and 0x07 respectively. | 514 | * correspond to revisions 0x03, 0x05 and 0x07 respectively. |
@@ -533,7 +521,7 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) | |||
533 | * | 521 | * |
534 | * So we only do UltraDMA on revision 0x05 and 0x07 chipsets. | 522 | * So we only do UltraDMA on revision 0x05 and 0x07 chipsets. |
535 | */ | 523 | */ |
536 | if (dev->device == PCI_DEVICE_ID_CMD_646 && rev < 5) | 524 | if (dev->device == PCI_DEVICE_ID_CMD_646 && dev->revision < 5) |
537 | hwif->ultra_mask = 0x00; | 525 | hwif->ultra_mask = 0x00; |
538 | 526 | ||
539 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 527 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
@@ -547,11 +535,10 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) | |||
547 | hwif->ide_dma_test_irq = &cmd648_ide_dma_test_irq; | 535 | hwif->ide_dma_test_irq = &cmd648_ide_dma_test_irq; |
548 | break; | 536 | break; |
549 | case PCI_DEVICE_ID_CMD_646: | 537 | case PCI_DEVICE_ID_CMD_646: |
550 | hwif->chipset = ide_cmd646; | 538 | if (dev->revision == 0x01) { |
551 | if (rev == 0x01) { | ||
552 | hwif->ide_dma_end = &cmd646_1_ide_dma_end; | 539 | hwif->ide_dma_end = &cmd646_1_ide_dma_end; |
553 | break; | 540 | break; |
554 | } else if (rev >= 0x03) | 541 | } else if (dev->revision >= 0x03) |
555 | goto alt_irq_bits; | 542 | goto alt_irq_bits; |
556 | /* fall thru */ | 543 | /* fall thru */ |
557 | default: | 544 | default: |
@@ -561,80 +548,62 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) | |||
561 | } | 548 | } |
562 | } | 549 | } |
563 | 550 | ||
564 | static int __devinit init_setup_cmd64x(struct pci_dev *dev, ide_pci_device_t *d) | 551 | static const struct ide_port_info cmd64x_chipsets[] __devinitdata = { |
565 | { | ||
566 | return ide_setup_pci_device(dev, d); | ||
567 | } | ||
568 | |||
569 | static int __devinit init_setup_cmd646(struct pci_dev *dev, ide_pci_device_t *d) | ||
570 | { | ||
571 | /* | ||
572 | * The original PCI0646 didn't have the primary channel enable bit, | ||
573 | * it appeared starting with PCI0646U (i.e. revision ID 3). | ||
574 | */ | ||
575 | if (dev->revision < 3) | ||
576 | d->enablebits[0].reg = 0; | ||
577 | |||
578 | return ide_setup_pci_device(dev, d); | ||
579 | } | ||
580 | |||
581 | static ide_pci_device_t cmd64x_chipsets[] __devinitdata = { | ||
582 | { /* 0 */ | 552 | { /* 0 */ |
583 | .name = "CMD643", | 553 | .name = "CMD643", |
584 | .init_setup = init_setup_cmd64x, | ||
585 | .init_chipset = init_chipset_cmd64x, | 554 | .init_chipset = init_chipset_cmd64x, |
586 | .init_hwif = init_hwif_cmd64x, | 555 | .init_hwif = init_hwif_cmd64x, |
587 | .autodma = AUTODMA, | ||
588 | .enablebits = {{0x00,0x00,0x00}, {0x51,0x08,0x08}}, | 556 | .enablebits = {{0x00,0x00,0x00}, {0x51,0x08,0x08}}, |
589 | .bootable = ON_BOARD, | 557 | .host_flags = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE, |
590 | .host_flags = IDE_HFLAG_ABUSE_PREFETCH, | ||
591 | .pio_mask = ATA_PIO5, | 558 | .pio_mask = ATA_PIO5, |
559 | .mwdma_mask = ATA_MWDMA2, | ||
592 | .udma_mask = 0x00, /* no udma */ | 560 | .udma_mask = 0x00, /* no udma */ |
593 | },{ /* 1 */ | 561 | },{ /* 1 */ |
594 | .name = "CMD646", | 562 | .name = "CMD646", |
595 | .init_setup = init_setup_cmd646, | ||
596 | .init_chipset = init_chipset_cmd64x, | 563 | .init_chipset = init_chipset_cmd64x, |
597 | .init_hwif = init_hwif_cmd64x, | 564 | .init_hwif = init_hwif_cmd64x, |
598 | .autodma = AUTODMA, | ||
599 | .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, | 565 | .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, |
600 | .bootable = ON_BOARD, | 566 | .host_flags = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE, |
601 | .host_flags = IDE_HFLAG_ABUSE_PREFETCH, | ||
602 | .pio_mask = ATA_PIO5, | 567 | .pio_mask = ATA_PIO5, |
603 | .udma_mask = 0x07, /* udma0-2 */ | 568 | .mwdma_mask = ATA_MWDMA2, |
569 | .udma_mask = ATA_UDMA2, | ||
604 | },{ /* 2 */ | 570 | },{ /* 2 */ |
605 | .name = "CMD648", | 571 | .name = "CMD648", |
606 | .init_setup = init_setup_cmd64x, | ||
607 | .init_chipset = init_chipset_cmd64x, | 572 | .init_chipset = init_chipset_cmd64x, |
608 | .init_hwif = init_hwif_cmd64x, | 573 | .init_hwif = init_hwif_cmd64x, |
609 | .autodma = AUTODMA, | ||
610 | .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, | 574 | .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, |
611 | .bootable = ON_BOARD, | 575 | .chipset = ide_cmd646, |
612 | .host_flags = IDE_HFLAG_ABUSE_PREFETCH, | 576 | .host_flags = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE, |
613 | .pio_mask = ATA_PIO5, | 577 | .pio_mask = ATA_PIO5, |
614 | .udma_mask = 0x1f, /* udma0-4 */ | 578 | .mwdma_mask = ATA_MWDMA2, |
579 | .udma_mask = ATA_UDMA4, | ||
615 | },{ /* 3 */ | 580 | },{ /* 3 */ |
616 | .name = "CMD649", | 581 | .name = "CMD649", |
617 | .init_setup = init_setup_cmd64x, | ||
618 | .init_chipset = init_chipset_cmd64x, | 582 | .init_chipset = init_chipset_cmd64x, |
619 | .init_hwif = init_hwif_cmd64x, | 583 | .init_hwif = init_hwif_cmd64x, |
620 | .autodma = AUTODMA, | ||
621 | .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, | 584 | .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, |
622 | .bootable = ON_BOARD, | 585 | .host_flags = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE, |
623 | .host_flags = IDE_HFLAG_ABUSE_PREFETCH, | ||
624 | .pio_mask = ATA_PIO5, | 586 | .pio_mask = ATA_PIO5, |
625 | .udma_mask = 0x3f, /* udma0-5 */ | 587 | .mwdma_mask = ATA_MWDMA2, |
588 | .udma_mask = ATA_UDMA5, | ||
626 | } | 589 | } |
627 | }; | 590 | }; |
628 | 591 | ||
629 | /* | ||
630 | * We may have to modify enablebits for PCI0646, so we'd better pass | ||
631 | * a local copy of the ide_pci_device_t structure down the call chain... | ||
632 | */ | ||
633 | static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 592 | static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
634 | { | 593 | { |
635 | ide_pci_device_t d = cmd64x_chipsets[id->driver_data]; | 594 | struct ide_port_info d; |
595 | u8 idx = id->driver_data; | ||
596 | |||
597 | d = cmd64x_chipsets[idx]; | ||
598 | |||
599 | /* | ||
600 | * The original PCI0646 didn't have the primary channel enable bit, | ||
601 | * it appeared starting with PCI0646U (i.e. revision ID 3). | ||
602 | */ | ||
603 | if (idx == 1 && dev->revision < 3) | ||
604 | d.enablebits[0].reg = 0; | ||
636 | 605 | ||
637 | return d.init_setup(dev, &d); | 606 | return ide_setup_pci_device(dev, &d); |
638 | } | 607 | } |
639 | 608 | ||
640 | static const struct pci_device_id cmd64x_pci_tbl[] = { | 609 | static const struct pci_device_id cmd64x_pci_tbl[] = { |
diff --git a/drivers/ide/pci/cs5520.c b/drivers/ide/pci/cs5520.c index a8bf4940ca9..0466462fd21 100644 --- a/drivers/ide/pci/cs5520.c +++ b/drivers/ide/pci/cs5520.c | |||
@@ -106,18 +106,6 @@ static void cs5520_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
106 | } | 106 | } |
107 | 107 | ||
108 | /* | 108 | /* |
109 | * We provide a callback for our nonstandard DMA location | ||
110 | */ | ||
111 | |||
112 | static void __devinit cs5520_init_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwif_t *hwif) | ||
113 | { | ||
114 | unsigned long bmide = pci_resource_start(dev, 2); /* Not the usual 4 */ | ||
115 | if(hwif->mate && hwif->mate->dma_base) /* Second channel at primary + 8 */ | ||
116 | bmide += 8; | ||
117 | ide_setup_dma(hwif, bmide, 8); | ||
118 | } | ||
119 | |||
120 | /* | ||
121 | * We wrap the DMA activate to set the vdma flag. This is needed | 109 | * We wrap the DMA activate to set the vdma flag. This is needed |
122 | * so that the IDE DMA layer issues PIO not DMA commands over the | 110 | * so that the IDE DMA layer issues PIO not DMA commands over the |
123 | * DMA channel | 111 | * DMA channel |
@@ -125,6 +113,7 @@ static void __devinit cs5520_init_setup_dma(struct pci_dev *dev, ide_pci_device_ | |||
125 | 113 | ||
126 | static int cs5520_dma_on(ide_drive_t *drive) | 114 | static int cs5520_dma_on(ide_drive_t *drive) |
127 | { | 115 | { |
116 | /* ATAPI is harder so leave it for now */ | ||
128 | drive->vdma = 1; | 117 | drive->vdma = 1; |
129 | return 0; | 118 | return 0; |
130 | } | 119 | } |
@@ -134,33 +123,25 @@ static void __devinit init_hwif_cs5520(ide_hwif_t *hwif) | |||
134 | hwif->set_pio_mode = &cs5520_set_pio_mode; | 123 | hwif->set_pio_mode = &cs5520_set_pio_mode; |
135 | hwif->set_dma_mode = &cs5520_set_dma_mode; | 124 | hwif->set_dma_mode = &cs5520_set_dma_mode; |
136 | 125 | ||
137 | if (hwif->dma_base == 0) { | 126 | if (hwif->dma_base == 0) |
138 | hwif->drives[1].autotune = hwif->drives[0].autotune = 1; | ||
139 | return; | 127 | return; |
140 | } | ||
141 | 128 | ||
142 | hwif->ide_dma_on = &cs5520_dma_on; | 129 | hwif->ide_dma_on = &cs5520_dma_on; |
143 | |||
144 | /* ATAPI is harder so leave it for now */ | ||
145 | hwif->atapi_dma = 0; | ||
146 | hwif->ultra_mask = 0; | ||
147 | hwif->swdma_mask = 0; | ||
148 | hwif->mwdma_mask = 0; | ||
149 | } | 130 | } |
150 | 131 | ||
151 | #define DECLARE_CS_DEV(name_str) \ | 132 | #define DECLARE_CS_DEV(name_str) \ |
152 | { \ | 133 | { \ |
153 | .name = name_str, \ | 134 | .name = name_str, \ |
154 | .init_setup_dma = cs5520_init_setup_dma, \ | ||
155 | .init_hwif = init_hwif_cs5520, \ | 135 | .init_hwif = init_hwif_cs5520, \ |
156 | .autodma = AUTODMA, \ | ||
157 | .bootable = ON_BOARD, \ | ||
158 | .host_flags = IDE_HFLAG_ISA_PORTS | \ | 136 | .host_flags = IDE_HFLAG_ISA_PORTS | \ |
159 | IDE_HFLAG_VDMA, \ | 137 | IDE_HFLAG_CS5520 | \ |
138 | IDE_HFLAG_VDMA | \ | ||
139 | IDE_HFLAG_NO_ATAPI_DMA | \ | ||
140 | IDE_HFLAG_BOOTABLE, \ | ||
160 | .pio_mask = ATA_PIO4, \ | 141 | .pio_mask = ATA_PIO4, \ |
161 | } | 142 | } |
162 | 143 | ||
163 | static ide_pci_device_t cyrix_chipsets[] __devinitdata = { | 144 | static const struct ide_port_info cyrix_chipsets[] __devinitdata = { |
164 | /* 0 */ DECLARE_CS_DEV("Cyrix 5510"), | 145 | /* 0 */ DECLARE_CS_DEV("Cyrix 5510"), |
165 | /* 1 */ DECLARE_CS_DEV("Cyrix 5520") | 146 | /* 1 */ DECLARE_CS_DEV("Cyrix 5520") |
166 | }; | 147 | }; |
@@ -173,9 +154,8 @@ static ide_pci_device_t cyrix_chipsets[] __devinitdata = { | |||
173 | 154 | ||
174 | static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 155 | static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
175 | { | 156 | { |
176 | ide_hwif_t *hwif = NULL, *mate = NULL; | 157 | const struct ide_port_info *d = &cyrix_chipsets[id->driver_data]; |
177 | ata_index_t index; | 158 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; |
178 | ide_pci_device_t *d = &cyrix_chipsets[id->driver_data]; | ||
179 | 159 | ||
180 | ide_setup_pci_noise(dev, d); | 160 | ide_setup_pci_noise(dev, d); |
181 | 161 | ||
@@ -191,29 +171,14 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devic | |||
191 | return -ENODEV; | 171 | return -ENODEV; |
192 | } | 172 | } |
193 | 173 | ||
194 | index.all = 0xf0f0; | ||
195 | |||
196 | /* | 174 | /* |
197 | * Now the chipset is configured we can let the core | 175 | * Now the chipset is configured we can let the core |
198 | * do all the device setup for us | 176 | * do all the device setup for us |
199 | */ | 177 | */ |
200 | 178 | ||
201 | ide_pci_setup_ports(dev, d, 14, &index); | 179 | ide_pci_setup_ports(dev, d, 14, &idx[0]); |
202 | |||
203 | if ((index.b.low & 0xf0) != 0xf0) | ||
204 | hwif = &ide_hwifs[index.b.low]; | ||
205 | if ((index.b.high & 0xf0) != 0xf0) | ||
206 | mate = &ide_hwifs[index.b.high]; | ||
207 | |||
208 | if (hwif) | ||
209 | probe_hwif_init(hwif); | ||
210 | if (mate) | ||
211 | probe_hwif_init(mate); | ||
212 | 180 | ||
213 | if (hwif) | 181 | ide_device_add(idx); |
214 | ide_proc_register_port(hwif); | ||
215 | if (mate) | ||
216 | ide_proc_register_port(mate); | ||
217 | 182 | ||
218 | return 0; | 183 | return 0; |
219 | } | 184 | } |
diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c index 0d23b8aabe9..599408952bd 100644 --- a/drivers/ide/pci/cs5530.c +++ b/drivers/ide/pci/cs5530.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/cs5530.c Version 0.76 Aug 3 2007 | 2 | * linux/drivers/ide/pci/cs5530.c Version 0.77 Sep 24 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 2000 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 2000 Andre Hedrick <andre@linux-ide.org> |
5 | * Copyright (C) 2000 Mark Lord <mlord@pobox.com> | 5 | * Copyright (C) 2000 Mark Lord <mlord@pobox.com> |
@@ -146,7 +146,6 @@ static void cs5530_set_dma_mode(ide_drive_t *drive, const u8 mode) | |||
146 | static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const char *name) | 146 | static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const char *name) |
147 | { | 147 | { |
148 | struct pci_dev *master_0 = NULL, *cs5530_0 = NULL; | 148 | struct pci_dev *master_0 = NULL, *cs5530_0 = NULL; |
149 | unsigned long flags; | ||
150 | 149 | ||
151 | if (pci_resource_start(dev, 4) == 0) | 150 | if (pci_resource_start(dev, 4) == 0) |
152 | return -EFAULT; | 151 | return -EFAULT; |
@@ -171,9 +170,6 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const ch | |||
171 | goto out; | 170 | goto out; |
172 | } | 171 | } |
173 | 172 | ||
174 | spin_lock_irqsave(&ide_lock, flags); | ||
175 | /* all CPUs (there should only be one CPU with this chipset) */ | ||
176 | |||
177 | /* | 173 | /* |
178 | * Enable BusMaster and MemoryWriteAndInvalidate for the cs5530: | 174 | * Enable BusMaster and MemoryWriteAndInvalidate for the cs5530: |
179 | * --> OR 0x14 into 16-bit PCI COMMAND reg of function 0 of the cs5530 | 175 | * --> OR 0x14 into 16-bit PCI COMMAND reg of function 0 of the cs5530 |
@@ -224,8 +220,6 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const ch | |||
224 | pci_write_config_byte(master_0, 0x42, 0x00); | 220 | pci_write_config_byte(master_0, 0x42, 0x00); |
225 | pci_write_config_byte(master_0, 0x43, 0xc1); | 221 | pci_write_config_byte(master_0, 0x43, 0xc1); |
226 | 222 | ||
227 | spin_unlock_irqrestore(&ide_lock, flags); | ||
228 | |||
229 | out: | 223 | out: |
230 | pci_dev_put(master_0); | 224 | pci_dev_put(master_0); |
231 | pci_dev_put(cs5530_0); | 225 | pci_dev_put(cs5530_0); |
@@ -245,9 +239,6 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif) | |||
245 | unsigned long basereg; | 239 | unsigned long basereg; |
246 | u32 d0_timings; | 240 | u32 d0_timings; |
247 | 241 | ||
248 | if (hwif->mate) | ||
249 | hwif->serialized = hwif->mate->serialized = 1; | ||
250 | |||
251 | hwif->set_pio_mode = &cs5530_set_pio_mode; | 242 | hwif->set_pio_mode = &cs5530_set_pio_mode; |
252 | hwif->set_dma_mode = &cs5530_set_dma_mode; | 243 | hwif->set_dma_mode = &cs5530_set_dma_mode; |
253 | 244 | ||
@@ -258,27 +249,22 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif) | |||
258 | if (CS5530_BAD_PIO(inl(basereg + 8))) | 249 | if (CS5530_BAD_PIO(inl(basereg + 8))) |
259 | outl(cs5530_pio_timings[(d0_timings >> 31) & 1][0], basereg + 8); | 250 | outl(cs5530_pio_timings[(d0_timings >> 31) & 1][0], basereg + 8); |
260 | 251 | ||
261 | hwif->drives[0].autotune = 1; | ||
262 | hwif->drives[1].autotune = 1; | ||
263 | |||
264 | if (hwif->dma_base == 0) | 252 | if (hwif->dma_base == 0) |
265 | return; | 253 | return; |
266 | 254 | ||
267 | hwif->atapi_dma = 1; | ||
268 | hwif->ultra_mask = 0x07; | ||
269 | hwif->mwdma_mask = 0x07; | ||
270 | |||
271 | hwif->udma_filter = cs5530_udma_filter; | 255 | hwif->udma_filter = cs5530_udma_filter; |
272 | } | 256 | } |
273 | 257 | ||
274 | static ide_pci_device_t cs5530_chipset __devinitdata = { | 258 | static const struct ide_port_info cs5530_chipset __devinitdata = { |
275 | .name = "CS5530", | 259 | .name = "CS5530", |
276 | .init_chipset = init_chipset_cs5530, | 260 | .init_chipset = init_chipset_cs5530, |
277 | .init_hwif = init_hwif_cs5530, | 261 | .init_hwif = init_hwif_cs5530, |
278 | .autodma = AUTODMA, | 262 | .host_flags = IDE_HFLAG_SERIALIZE | |
279 | .bootable = ON_BOARD, | 263 | IDE_HFLAG_POST_SET_MODE | |
264 | IDE_HFLAG_BOOTABLE, | ||
280 | .pio_mask = ATA_PIO4, | 265 | .pio_mask = ATA_PIO4, |
281 | .host_flags = IDE_HFLAG_POST_SET_MODE, | 266 | .mwdma_mask = ATA_MWDMA2, |
267 | .udma_mask = ATA_UDMA2, | ||
282 | }; | 268 | }; |
283 | 269 | ||
284 | static int __devinit cs5530_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 270 | static int __devinit cs5530_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c index e4891a16afe..9094916e378 100644 --- a/drivers/ide/pci/cs5535.c +++ b/drivers/ide/pci/cs5535.c | |||
@@ -84,7 +84,7 @@ static void cs5535_set_speed(ide_drive_t *drive, const u8 speed) | |||
84 | 84 | ||
85 | /* Set the PIO timings */ | 85 | /* Set the PIO timings */ |
86 | if ((speed & XFER_MODE) == XFER_PIO) { | 86 | if ((speed & XFER_MODE) == XFER_PIO) { |
87 | ide_drive_t *pair = &drive->hwif->drives[drive->dn ^ 1]; | 87 | ide_drive_t *pair = ide_get_paired_drive(drive); |
88 | u8 cmd, pioa; | 88 | u8 cmd, pioa; |
89 | 89 | ||
90 | cmd = pioa = speed - XFER_PIO_0; | 90 | cmd = pioa = speed - XFER_PIO_0; |
@@ -180,25 +180,20 @@ static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) | |||
180 | hwif->set_pio_mode = &cs5535_set_pio_mode; | 180 | hwif->set_pio_mode = &cs5535_set_pio_mode; |
181 | hwif->set_dma_mode = &cs5535_set_dma_mode; | 181 | hwif->set_dma_mode = &cs5535_set_dma_mode; |
182 | 182 | ||
183 | hwif->drives[1].autotune = hwif->drives[0].autotune = 1; | ||
184 | |||
185 | if (hwif->dma_base == 0) | 183 | if (hwif->dma_base == 0) |
186 | return; | 184 | return; |
187 | 185 | ||
188 | hwif->atapi_dma = 1; | ||
189 | hwif->ultra_mask = 0x1F; | ||
190 | hwif->mwdma_mask = 0x07; | ||
191 | |||
192 | hwif->cbl = cs5535_cable_detect(hwif->pci_dev); | 186 | hwif->cbl = cs5535_cable_detect(hwif->pci_dev); |
193 | } | 187 | } |
194 | 188 | ||
195 | static ide_pci_device_t cs5535_chipset __devinitdata = { | 189 | static const struct ide_port_info cs5535_chipset __devinitdata = { |
196 | .name = "CS5535", | 190 | .name = "CS5535", |
197 | .init_hwif = init_hwif_cs5535, | 191 | .init_hwif = init_hwif_cs5535, |
198 | .autodma = AUTODMA, | 192 | .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_POST_SET_MODE | |
199 | .bootable = ON_BOARD, | 193 | IDE_HFLAG_BOOTABLE, |
200 | .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_POST_SET_MODE, | ||
201 | .pio_mask = ATA_PIO4, | 194 | .pio_mask = ATA_PIO4, |
195 | .mwdma_mask = ATA_MWDMA2, | ||
196 | .udma_mask = ATA_UDMA4, | ||
202 | }; | 197 | }; |
203 | 198 | ||
204 | static int __devinit cs5535_init_one(struct pci_dev *dev, | 199 | static int __devinit cs5535_init_one(struct pci_dev *dev, |
diff --git a/drivers/ide/pci/cy82c693.c b/drivers/ide/pci/cy82c693.c index c498ecfd7fc..3ef4fc10fe2 100644 --- a/drivers/ide/pci/cy82c693.c +++ b/drivers/ide/pci/cy82c693.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/cy82c693.c Version 0.40 Sep. 10, 2002 | 2 | * linux/drivers/ide/pci/cy82c693.c Version 0.41 Aug 27, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 1998-2000 Andreas S. Krebs (akrebs@altavista.net), Maintainer | 4 | * Copyright (C) 1998-2000 Andreas S. Krebs (akrebs@altavista.net), Maintainer |
5 | * Copyright (C) 1998-2002 Andre Hedrick <andre@linux-ide.org>, Integrator | 5 | * Copyright (C) 1998-2002 Andre Hedrick <andre@linux-ide.org>, Integrator |
@@ -428,18 +428,10 @@ static unsigned int __devinit init_chipset_cy82c693(struct pci_dev *dev, const c | |||
428 | */ | 428 | */ |
429 | static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif) | 429 | static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif) |
430 | { | 430 | { |
431 | hwif->chipset = ide_cy82c693; | ||
432 | hwif->set_pio_mode = &cy82c693_set_pio_mode; | 431 | hwif->set_pio_mode = &cy82c693_set_pio_mode; |
433 | 432 | ||
434 | if (!hwif->dma_base) { | 433 | if (hwif->dma_base == 0) |
435 | hwif->drives[0].autotune = 1; | ||
436 | hwif->drives[1].autotune = 1; | ||
437 | return; | 434 | return; |
438 | } | ||
439 | |||
440 | hwif->atapi_dma = 1; | ||
441 | hwif->mwdma_mask = 0x04; | ||
442 | hwif->swdma_mask = 0x04; | ||
443 | 435 | ||
444 | hwif->ide_dma_on = &cy82c693_ide_dma_on; | 436 | hwif->ide_dma_on = &cy82c693_ide_dma_on; |
445 | } | 437 | } |
@@ -456,15 +448,17 @@ static void __devinit init_iops_cy82c693(ide_hwif_t *hwif) | |||
456 | } | 448 | } |
457 | } | 449 | } |
458 | 450 | ||
459 | static ide_pci_device_t cy82c693_chipset __devinitdata = { | 451 | static const struct ide_port_info cy82c693_chipset __devinitdata = { |
460 | .name = "CY82C693", | 452 | .name = "CY82C693", |
461 | .init_chipset = init_chipset_cy82c693, | 453 | .init_chipset = init_chipset_cy82c693, |
462 | .init_iops = init_iops_cy82c693, | 454 | .init_iops = init_iops_cy82c693, |
463 | .init_hwif = init_hwif_cy82c693, | 455 | .init_hwif = init_hwif_cy82c693, |
464 | .autodma = AUTODMA, | 456 | .chipset = ide_cy82c693, |
465 | .bootable = ON_BOARD, | 457 | .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
466 | .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 458 | IDE_HFLAG_BOOTABLE, |
467 | .pio_mask = ATA_PIO4, | 459 | .pio_mask = ATA_PIO4, |
460 | .swdma_mask = ATA_SWDMA2_ONLY, | ||
461 | .mwdma_mask = ATA_MWDMA2_ONLY, | ||
468 | }; | 462 | }; |
469 | 463 | ||
470 | static int __devinit cy82c693_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 464 | static int __devinit cy82c693_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
diff --git a/drivers/ide/pci/delkin_cb.c b/drivers/ide/pci/delkin_cb.c index 46f4a888c03..83829081640 100644 --- a/drivers/ide/pci/delkin_cb.c +++ b/drivers/ide/pci/delkin_cb.c | |||
@@ -80,7 +80,7 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id) | |||
80 | hw.irq = dev->irq; | 80 | hw.irq = dev->irq; |
81 | hw.chipset = ide_pci; /* this enables IRQ sharing */ | 81 | hw.chipset = ide_pci; /* this enables IRQ sharing */ |
82 | 82 | ||
83 | rc = ide_register_hw_with_fixup(&hw, 0, &hwif, ide_undecoded_slave); | 83 | rc = ide_register_hw(&hw, &ide_undecoded_slave, 0, &hwif); |
84 | if (rc < 0) { | 84 | if (rc < 0) { |
85 | printk(KERN_ERR "delkin_cb: ide_register_hw failed (%d)\n", rc); | 85 | printk(KERN_ERR "delkin_cb: ide_register_hw failed (%d)\n", rc); |
86 | pci_disable_device(dev); | 86 | pci_disable_device(dev); |
diff --git a/drivers/ide/pci/generic.c b/drivers/ide/pci/generic.c index cce6311b02d..f44d70852c3 100644 --- a/drivers/ide/pci/generic.c +++ b/drivers/ide/pci/generic.c | |||
@@ -54,130 +54,61 @@ __setup("all-generic-ide", ide_generic_all_on); | |||
54 | module_param_named(all_generic_ide, ide_generic_all, bool, 0444); | 54 | module_param_named(all_generic_ide, ide_generic_all, bool, 0444); |
55 | MODULE_PARM_DESC(all_generic_ide, "IDE generic will claim all unknown PCI IDE storage controllers."); | 55 | MODULE_PARM_DESC(all_generic_ide, "IDE generic will claim all unknown PCI IDE storage controllers."); |
56 | 56 | ||
57 | static void __devinit init_hwif_generic (ide_hwif_t *hwif) | 57 | #define IDE_HFLAGS_UMC (IDE_HFLAG_NO_DMA | IDE_HFLAG_FORCE_LEGACY_IRQS) |
58 | { | 58 | |
59 | switch(hwif->pci_dev->device) { | 59 | #define DECLARE_GENERIC_PCI_DEV(name_str, extra_flags) \ |
60 | case PCI_DEVICE_ID_UMC_UM8673F: | 60 | { \ |
61 | case PCI_DEVICE_ID_UMC_UM8886A: | 61 | .name = name_str, \ |
62 | case PCI_DEVICE_ID_UMC_UM8886BF: | 62 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | \ |
63 | hwif->irq = hwif->channel ? 15 : 14; | 63 | extra_flags | \ |
64 | break; | 64 | IDE_HFLAG_BOOTABLE, \ |
65 | default: | 65 | .swdma_mask = ATA_SWDMA2, \ |
66 | break; | 66 | .mwdma_mask = ATA_MWDMA2, \ |
67 | .udma_mask = ATA_UDMA6, \ | ||
67 | } | 68 | } |
68 | 69 | ||
69 | if (!(hwif->dma_base)) | 70 | static const struct ide_port_info generic_chipsets[] __devinitdata = { |
70 | return; | 71 | /* 0 */ DECLARE_GENERIC_PCI_DEV("Unknown", 0), |
71 | |||
72 | hwif->atapi_dma = 1; | ||
73 | hwif->ultra_mask = 0x7f; | ||
74 | hwif->mwdma_mask = 0x07; | ||
75 | hwif->swdma_mask = 0x07; | ||
76 | } | ||
77 | |||
78 | #if 0 | ||
79 | /* Logic to add back later on */ | ||
80 | |||
81 | if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE) { | ||
82 | ide_pci_device_t *unknown = unknown_chipset; | ||
83 | init_setup_unknown(dev, unknown); | ||
84 | return 1; | ||
85 | } | ||
86 | return 0; | ||
87 | #endif | ||
88 | 72 | ||
89 | static ide_pci_device_t generic_chipsets[] __devinitdata = { | 73 | { /* 1 */ |
90 | { /* 0 */ | ||
91 | .name = "Unknown", | ||
92 | .init_hwif = init_hwif_generic, | ||
93 | .autodma = AUTODMA, | ||
94 | .bootable = ON_BOARD, | ||
95 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
96 | },{ /* 1 */ | ||
97 | .name = "NS87410", | 74 | .name = "NS87410", |
98 | .init_hwif = init_hwif_generic, | ||
99 | .autodma = AUTODMA, | ||
100 | .enablebits = {{0x43,0x08,0x08}, {0x47,0x08,0x08}}, | 75 | .enablebits = {{0x43,0x08,0x08}, {0x47,0x08,0x08}}, |
101 | .bootable = ON_BOARD, | 76 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
102 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 77 | IDE_HFLAG_BOOTABLE, |
103 | },{ /* 2 */ | 78 | .swdma_mask = ATA_SWDMA2, |
104 | .name = "SAMURAI", | 79 | .mwdma_mask = ATA_MWDMA2, |
105 | .init_hwif = init_hwif_generic, | 80 | .udma_mask = ATA_UDMA6, |
106 | .autodma = AUTODMA, | 81 | }, |
107 | .bootable = ON_BOARD, | 82 | |
108 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 83 | /* 2 */ DECLARE_GENERIC_PCI_DEV("SAMURAI", 0), |
109 | },{ /* 3 */ | 84 | /* 3 */ DECLARE_GENERIC_PCI_DEV("HT6565", 0), |
110 | .name = "HT6565", | 85 | /* 4 */ DECLARE_GENERIC_PCI_DEV("UM8673F", IDE_HFLAGS_UMC), |
111 | .init_hwif = init_hwif_generic, | 86 | /* 5 */ DECLARE_GENERIC_PCI_DEV("UM8886A", IDE_HFLAGS_UMC), |
112 | .autodma = AUTODMA, | 87 | /* 6 */ DECLARE_GENERIC_PCI_DEV("UM8886BF", IDE_HFLAGS_UMC), |
113 | .bootable = ON_BOARD, | 88 | /* 7 */ DECLARE_GENERIC_PCI_DEV("HINT_IDE", 0), |
114 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 89 | /* 8 */ DECLARE_GENERIC_PCI_DEV("VIA_IDE", IDE_HFLAG_NO_AUTODMA), |
115 | },{ /* 4 */ | 90 | /* 9 */ DECLARE_GENERIC_PCI_DEV("OPTI621V", IDE_HFLAG_NO_AUTODMA), |
116 | .name = "UM8673F", | 91 | |
117 | .init_hwif = init_hwif_generic, | 92 | { /* 10 */ |
118 | .autodma = NODMA, | ||
119 | .bootable = ON_BOARD, | ||
120 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
121 | },{ /* 5 */ | ||
122 | .name = "UM8886A", | ||
123 | .init_hwif = init_hwif_generic, | ||
124 | .autodma = NODMA, | ||
125 | .bootable = ON_BOARD, | ||
126 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
127 | },{ /* 6 */ | ||
128 | .name = "UM8886BF", | ||
129 | .init_hwif = init_hwif_generic, | ||
130 | .autodma = NODMA, | ||
131 | .bootable = ON_BOARD, | ||
132 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
133 | },{ /* 7 */ | ||
134 | .name = "HINT_IDE", | ||
135 | .init_hwif = init_hwif_generic, | ||
136 | .autodma = AUTODMA, | ||
137 | .bootable = ON_BOARD, | ||
138 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
139 | },{ /* 8 */ | ||
140 | .name = "VIA_IDE", | ||
141 | .init_hwif = init_hwif_generic, | ||
142 | .autodma = NOAUTODMA, | ||
143 | .bootable = ON_BOARD, | ||
144 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
145 | },{ /* 9 */ | ||
146 | .name = "OPTI621V", | ||
147 | .init_hwif = init_hwif_generic, | ||
148 | .autodma = NOAUTODMA, | ||
149 | .bootable = ON_BOARD, | ||
150 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
151 | },{ /* 10 */ | ||
152 | .name = "VIA8237SATA", | 93 | .name = "VIA8237SATA", |
153 | .init_hwif = init_hwif_generic, | 94 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
154 | .autodma = AUTODMA, | 95 | IDE_HFLAG_OFF_BOARD, |
155 | .bootable = OFF_BOARD, | 96 | .swdma_mask = ATA_SWDMA2, |
156 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 97 | .mwdma_mask = ATA_MWDMA2, |
157 | },{ /* 11 */ | 98 | .udma_mask = ATA_UDMA6, |
158 | .name = "Piccolo0102", | 99 | }, |
159 | .init_hwif = init_hwif_generic, | 100 | |
160 | .autodma = NOAUTODMA, | 101 | /* 11 */ DECLARE_GENERIC_PCI_DEV("Piccolo0102", IDE_HFLAG_NO_AUTODMA), |
161 | .bootable = ON_BOARD, | 102 | /* 12 */ DECLARE_GENERIC_PCI_DEV("Piccolo0103", IDE_HFLAG_NO_AUTODMA), |
162 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 103 | /* 13 */ DECLARE_GENERIC_PCI_DEV("Piccolo0105", IDE_HFLAG_NO_AUTODMA), |
163 | },{ /* 12 */ | 104 | |
164 | .name = "Piccolo0103", | 105 | { /* 14 */ |
165 | .init_hwif = init_hwif_generic, | ||
166 | .autodma = NOAUTODMA, | ||
167 | .bootable = ON_BOARD, | ||
168 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
169 | },{ /* 13 */ | ||
170 | .name = "Piccolo0105", | ||
171 | .init_hwif = init_hwif_generic, | ||
172 | .autodma = NOAUTODMA, | ||
173 | .bootable = ON_BOARD, | ||
174 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
175 | },{ /* 14 */ | ||
176 | .name = "Revolution", | 106 | .name = "Revolution", |
177 | .init_hwif = init_hwif_generic, | 107 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
178 | .autodma = AUTODMA, | 108 | IDE_HFLAG_OFF_BOARD, |
179 | .bootable = OFF_BOARD, | 109 | .swdma_mask = ATA_SWDMA2, |
180 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 110 | .mwdma_mask = ATA_MWDMA2, |
111 | .udma_mask = ATA_UDMA6, | ||
181 | } | 112 | } |
182 | }; | 113 | }; |
183 | 114 | ||
@@ -192,7 +123,7 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = { | |||
192 | 123 | ||
193 | static int __devinit generic_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 124 | static int __devinit generic_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
194 | { | 125 | { |
195 | ide_pci_device_t *d = &generic_chipsets[id->driver_data]; | 126 | const struct ide_port_info *d = &generic_chipsets[id->driver_data]; |
196 | int ret = -ENODEV; | 127 | int ret = -ENODEV; |
197 | 128 | ||
198 | /* Don't use the generic entry unless instructed to do so */ | 129 | /* Don't use the generic entry unless instructed to do so */ |
diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c index 44ac0e2f7a0..ae6307fae4f 100644 --- a/drivers/ide/pci/hpt34x.c +++ b/drivers/ide/pci/hpt34x.c | |||
@@ -125,49 +125,45 @@ static unsigned int __devinit init_chipset_hpt34x(struct pci_dev *dev, const cha | |||
125 | 125 | ||
126 | static void __devinit init_hwif_hpt34x(ide_hwif_t *hwif) | 126 | static void __devinit init_hwif_hpt34x(ide_hwif_t *hwif) |
127 | { | 127 | { |
128 | u16 pcicmd = 0; | ||
129 | |||
130 | hwif->set_pio_mode = &hpt34x_set_pio_mode; | 128 | hwif->set_pio_mode = &hpt34x_set_pio_mode; |
131 | hwif->set_dma_mode = &hpt34x_set_mode; | 129 | hwif->set_dma_mode = &hpt34x_set_mode; |
130 | } | ||
132 | 131 | ||
133 | hwif->drives[0].autotune = 1; | 132 | static const struct ide_port_info hpt34x_chipsets[] __devinitdata = { |
134 | hwif->drives[1].autotune = 1; | 133 | { /* 0 */ |
135 | 134 | .name = "HPT343", | |
136 | pci_read_config_word(hwif->pci_dev, PCI_COMMAND, &pcicmd); | 135 | .init_chipset = init_chipset_hpt34x, |
137 | 136 | .init_hwif = init_hwif_hpt34x, | |
138 | if (!hwif->dma_base) | 137 | .extra = 16, |
139 | return; | 138 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | |
140 | 139 | IDE_HFLAG_NO_AUTODMA, | |
140 | .pio_mask = ATA_PIO5, | ||
141 | }, | ||
142 | { /* 1 */ | ||
143 | .name = "HPT345", | ||
144 | .init_chipset = init_chipset_hpt34x, | ||
145 | .init_hwif = init_hwif_hpt34x, | ||
146 | .extra = 16, | ||
147 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | | ||
148 | IDE_HFLAG_NO_AUTODMA | | ||
149 | IDE_HFLAG_OFF_BOARD, | ||
150 | .pio_mask = ATA_PIO5, | ||
141 | #ifdef CONFIG_HPT34X_AUTODMA | 151 | #ifdef CONFIG_HPT34X_AUTODMA |
142 | if ((pcicmd & PCI_COMMAND_MEMORY) == 0) | 152 | .swdma_mask = ATA_SWDMA2, |
143 | return; | 153 | .mwdma_mask = ATA_MWDMA2, |
144 | 154 | .udma_mask = ATA_UDMA2, | |
145 | hwif->ultra_mask = 0x07; | ||
146 | hwif->mwdma_mask = 0x07; | ||
147 | hwif->swdma_mask = 0x07; | ||
148 | #endif | 155 | #endif |
149 | } | 156 | } |
150 | |||
151 | static ide_pci_device_t hpt34x_chipset __devinitdata = { | ||
152 | .name = "HPT34X", | ||
153 | .init_chipset = init_chipset_hpt34x, | ||
154 | .init_hwif = init_hwif_hpt34x, | ||
155 | .autodma = NOAUTODMA, | ||
156 | .bootable = NEVER_BOARD, | ||
157 | .extra = 16, | ||
158 | .pio_mask = ATA_PIO5, | ||
159 | }; | 157 | }; |
160 | 158 | ||
161 | static int __devinit hpt34x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 159 | static int __devinit hpt34x_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
162 | { | 160 | { |
163 | ide_pci_device_t *d = &hpt34x_chipset; | 161 | const struct ide_port_info *d; |
164 | static char *chipset_names[] = {"HPT343", "HPT345"}; | ||
165 | u16 pcicmd = 0; | 162 | u16 pcicmd = 0; |
166 | 163 | ||
167 | pci_read_config_word(dev, PCI_COMMAND, &pcicmd); | 164 | pci_read_config_word(dev, PCI_COMMAND, &pcicmd); |
168 | 165 | ||
169 | d->name = chipset_names[(pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0]; | 166 | d = &hpt34x_chipsets[(pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0]; |
170 | d->bootable = (pcicmd & PCI_COMMAND_MEMORY) ? OFF_BOARD : NEVER_BOARD; | ||
171 | 167 | ||
172 | return ide_setup_pci_device(dev, d); | 168 | return ide_setup_pci_device(dev, d); |
173 | } | 169 | } |
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index fcb21ddab2c..612b795241b 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c | |||
@@ -1,9 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/hpt366.c Version 1.14 Oct 1, 2007 | 2 | * linux/drivers/ide/pci/hpt366.c Version 1.20 Oct 1, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org> |
5 | * Portions Copyright (C) 2001 Sun Microsystems, Inc. | 5 | * Portions Copyright (C) 2001 Sun Microsystems, Inc. |
6 | * Portions Copyright (C) 2003 Red Hat Inc | 6 | * Portions Copyright (C) 2003 Red Hat Inc |
7 | * Portions Copyright (C) 2007 Bartlomiej Zolnierkiewicz | ||
7 | * Portions Copyright (C) 2005-2007 MontaVista Software, Inc. | 8 | * Portions Copyright (C) 2005-2007 MontaVista Software, Inc. |
8 | * | 9 | * |
9 | * Thanks to HighPoint Technologies for their assistance, and hardware. | 10 | * Thanks to HighPoint Technologies for their assistance, and hardware. |
@@ -393,8 +394,9 @@ enum ata_clock { | |||
393 | */ | 394 | */ |
394 | 395 | ||
395 | struct hpt_info { | 396 | struct hpt_info { |
397 | char *chip_name; /* Chip name */ | ||
396 | u8 chip_type; /* Chip type */ | 398 | u8 chip_type; /* Chip type */ |
397 | u8 max_ultra; /* Max. UltraDMA mode allowed */ | 399 | u8 udma_mask; /* Allowed UltraDMA modes mask. */ |
398 | u8 dpll_clk; /* DPLL clock in MHz */ | 400 | u8 dpll_clk; /* DPLL clock in MHz */ |
399 | u8 pci_clk; /* PCI clock in MHz */ | 401 | u8 pci_clk; /* PCI clock in MHz */ |
400 | u32 **settings; /* Chipset settings table */ | 402 | u32 **settings; /* Chipset settings table */ |
@@ -432,78 +434,89 @@ static u32 *hpt37x_settings[NUM_ATA_CLOCKS] = { | |||
432 | }; | 434 | }; |
433 | 435 | ||
434 | static struct hpt_info hpt36x __devinitdata = { | 436 | static struct hpt_info hpt36x __devinitdata = { |
437 | .chip_name = "HPT36x", | ||
435 | .chip_type = HPT36x, | 438 | .chip_type = HPT36x, |
436 | .max_ultra = HPT366_ALLOW_ATA66_3 ? (HPT366_ALLOW_ATA66_4 ? 4 : 3) : 2, | 439 | .udma_mask = HPT366_ALLOW_ATA66_3 ? (HPT366_ALLOW_ATA66_4 ? ATA_UDMA4 : ATA_UDMA3) : ATA_UDMA2, |
437 | .dpll_clk = 0, /* no DPLL */ | 440 | .dpll_clk = 0, /* no DPLL */ |
438 | .settings = hpt36x_settings | 441 | .settings = hpt36x_settings |
439 | }; | 442 | }; |
440 | 443 | ||
441 | static struct hpt_info hpt370 __devinitdata = { | 444 | static struct hpt_info hpt370 __devinitdata = { |
445 | .chip_name = "HPT370", | ||
442 | .chip_type = HPT370, | 446 | .chip_type = HPT370, |
443 | .max_ultra = HPT370_ALLOW_ATA100_5 ? 5 : 4, | 447 | .udma_mask = HPT370_ALLOW_ATA100_5 ? ATA_UDMA5 : ATA_UDMA4, |
444 | .dpll_clk = 48, | 448 | .dpll_clk = 48, |
445 | .settings = hpt37x_settings | 449 | .settings = hpt37x_settings |
446 | }; | 450 | }; |
447 | 451 | ||
448 | static struct hpt_info hpt370a __devinitdata = { | 452 | static struct hpt_info hpt370a __devinitdata = { |
453 | .chip_name = "HPT370A", | ||
449 | .chip_type = HPT370A, | 454 | .chip_type = HPT370A, |
450 | .max_ultra = HPT370_ALLOW_ATA100_5 ? 5 : 4, | 455 | .udma_mask = HPT370_ALLOW_ATA100_5 ? ATA_UDMA5 : ATA_UDMA4, |
451 | .dpll_clk = 48, | 456 | .dpll_clk = 48, |
452 | .settings = hpt37x_settings | 457 | .settings = hpt37x_settings |
453 | }; | 458 | }; |
454 | 459 | ||
455 | static struct hpt_info hpt374 __devinitdata = { | 460 | static struct hpt_info hpt374 __devinitdata = { |
461 | .chip_name = "HPT374", | ||
456 | .chip_type = HPT374, | 462 | .chip_type = HPT374, |
457 | .max_ultra = 5, | 463 | .udma_mask = ATA_UDMA5, |
458 | .dpll_clk = 48, | 464 | .dpll_clk = 48, |
459 | .settings = hpt37x_settings | 465 | .settings = hpt37x_settings |
460 | }; | 466 | }; |
461 | 467 | ||
462 | static struct hpt_info hpt372 __devinitdata = { | 468 | static struct hpt_info hpt372 __devinitdata = { |
469 | .chip_name = "HPT372", | ||
463 | .chip_type = HPT372, | 470 | .chip_type = HPT372, |
464 | .max_ultra = HPT372_ALLOW_ATA133_6 ? 6 : 5, | 471 | .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, |
465 | .dpll_clk = 55, | 472 | .dpll_clk = 55, |
466 | .settings = hpt37x_settings | 473 | .settings = hpt37x_settings |
467 | }; | 474 | }; |
468 | 475 | ||
469 | static struct hpt_info hpt372a __devinitdata = { | 476 | static struct hpt_info hpt372a __devinitdata = { |
477 | .chip_name = "HPT372A", | ||
470 | .chip_type = HPT372A, | 478 | .chip_type = HPT372A, |
471 | .max_ultra = HPT372_ALLOW_ATA133_6 ? 6 : 5, | 479 | .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, |
472 | .dpll_clk = 66, | 480 | .dpll_clk = 66, |
473 | .settings = hpt37x_settings | 481 | .settings = hpt37x_settings |
474 | }; | 482 | }; |
475 | 483 | ||
476 | static struct hpt_info hpt302 __devinitdata = { | 484 | static struct hpt_info hpt302 __devinitdata = { |
485 | .chip_name = "HPT302", | ||
477 | .chip_type = HPT302, | 486 | .chip_type = HPT302, |
478 | .max_ultra = HPT372_ALLOW_ATA133_6 ? 6 : 5, | 487 | .udma_mask = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, |
479 | .dpll_clk = 66, | 488 | .dpll_clk = 66, |
480 | .settings = hpt37x_settings | 489 | .settings = hpt37x_settings |
481 | }; | 490 | }; |
482 | 491 | ||
483 | static struct hpt_info hpt371 __devinitdata = { | 492 | static struct hpt_info hpt371 __devinitdata = { |
493 | .chip_name = "HPT371", | ||
484 | .chip_type = HPT371, | 494 | .chip_type = HPT371, |
485 | .max_ultra = HPT371_ALLOW_ATA133_6 ? 6 : 5, | 495 | .udma_mask = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, |
486 | .dpll_clk = 66, | 496 | .dpll_clk = 66, |
487 | .settings = hpt37x_settings | 497 | .settings = hpt37x_settings |
488 | }; | 498 | }; |
489 | 499 | ||
490 | static struct hpt_info hpt372n __devinitdata = { | 500 | static struct hpt_info hpt372n __devinitdata = { |
501 | .chip_name = "HPT372N", | ||
491 | .chip_type = HPT372N, | 502 | .chip_type = HPT372N, |
492 | .max_ultra = HPT372_ALLOW_ATA133_6 ? 6 : 5, | 503 | .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, |
493 | .dpll_clk = 77, | 504 | .dpll_clk = 77, |
494 | .settings = hpt37x_settings | 505 | .settings = hpt37x_settings |
495 | }; | 506 | }; |
496 | 507 | ||
497 | static struct hpt_info hpt302n __devinitdata = { | 508 | static struct hpt_info hpt302n __devinitdata = { |
509 | .chip_name = "HPT302N", | ||
498 | .chip_type = HPT302N, | 510 | .chip_type = HPT302N, |
499 | .max_ultra = HPT302_ALLOW_ATA133_6 ? 6 : 5, | 511 | .udma_mask = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, |
500 | .dpll_clk = 77, | 512 | .dpll_clk = 77, |
501 | .settings = hpt37x_settings | 513 | .settings = hpt37x_settings |
502 | }; | 514 | }; |
503 | 515 | ||
504 | static struct hpt_info hpt371n __devinitdata = { | 516 | static struct hpt_info hpt371n __devinitdata = { |
517 | .chip_name = "HPT371N", | ||
505 | .chip_type = HPT371N, | 518 | .chip_type = HPT371N, |
506 | .max_ultra = HPT371_ALLOW_ATA133_6 ? 6 : 5, | 519 | .udma_mask = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, |
507 | .dpll_clk = 77, | 520 | .dpll_clk = 77, |
508 | .settings = hpt37x_settings | 521 | .settings = hpt37x_settings |
509 | }; | 522 | }; |
@@ -676,12 +689,11 @@ static int hpt3xx_quirkproc(ide_drive_t *drive) | |||
676 | 689 | ||
677 | static void hpt3xx_intrproc(ide_drive_t *drive) | 690 | static void hpt3xx_intrproc(ide_drive_t *drive) |
678 | { | 691 | { |
679 | ide_hwif_t *hwif = HWIF(drive); | ||
680 | |||
681 | if (drive->quirk_list) | 692 | if (drive->quirk_list) |
682 | return; | 693 | return; |
694 | |||
683 | /* drives in the quirk_list may not like intr setups/cleanups */ | 695 | /* drives in the quirk_list may not like intr setups/cleanups */ |
684 | hwif->OUTB(drive->ctl | 2, IDE_CONTROL_REG); | 696 | outb(drive->ctl | 2, IDE_CONTROL_REG); |
685 | } | 697 | } |
686 | 698 | ||
687 | static void hpt3xx_maskproc(ide_drive_t *drive, int mask) | 699 | static void hpt3xx_maskproc(ide_drive_t *drive, int mask) |
@@ -709,8 +721,8 @@ static void hpt3xx_maskproc(ide_drive_t *drive, int mask) | |||
709 | enable_irq (hwif->irq); | 721 | enable_irq (hwif->irq); |
710 | } | 722 | } |
711 | } else | 723 | } else |
712 | hwif->OUTB(mask ? (drive->ctl | 2) : (drive->ctl & ~2), | 724 | outb(mask ? (drive->ctl | 2) : (drive->ctl & ~2), |
713 | IDE_CONTROL_REG); | 725 | IDE_CONTROL_REG); |
714 | } | 726 | } |
715 | 727 | ||
716 | /* | 728 | /* |
@@ -750,9 +762,9 @@ static void hpt370_irq_timeout(ide_drive_t *drive) | |||
750 | printk(KERN_DEBUG "%s: %d bytes in FIFO\n", drive->name, bfifo & 0x1ff); | 762 | printk(KERN_DEBUG "%s: %d bytes in FIFO\n", drive->name, bfifo & 0x1ff); |
751 | 763 | ||
752 | /* get DMA command mode */ | 764 | /* get DMA command mode */ |
753 | dma_cmd = hwif->INB(hwif->dma_command); | 765 | dma_cmd = inb(hwif->dma_command); |
754 | /* stop DMA */ | 766 | /* stop DMA */ |
755 | hwif->OUTB(dma_cmd & ~0x1, hwif->dma_command); | 767 | outb(dma_cmd & ~0x1, hwif->dma_command); |
756 | hpt370_clear_engine(drive); | 768 | hpt370_clear_engine(drive); |
757 | } | 769 | } |
758 | 770 | ||
@@ -767,12 +779,12 @@ static void hpt370_ide_dma_start(ide_drive_t *drive) | |||
767 | static int hpt370_ide_dma_end(ide_drive_t *drive) | 779 | static int hpt370_ide_dma_end(ide_drive_t *drive) |
768 | { | 780 | { |
769 | ide_hwif_t *hwif = HWIF(drive); | 781 | ide_hwif_t *hwif = HWIF(drive); |
770 | u8 dma_stat = hwif->INB(hwif->dma_status); | 782 | u8 dma_stat = inb(hwif->dma_status); |
771 | 783 | ||
772 | if (dma_stat & 0x01) { | 784 | if (dma_stat & 0x01) { |
773 | /* wait a little */ | 785 | /* wait a little */ |
774 | udelay(20); | 786 | udelay(20); |
775 | dma_stat = hwif->INB(hwif->dma_status); | 787 | dma_stat = inb(hwif->dma_status); |
776 | if (dma_stat & 0x01) | 788 | if (dma_stat & 0x01) |
777 | hpt370_irq_timeout(drive); | 789 | hpt370_irq_timeout(drive); |
778 | } | 790 | } |
@@ -833,34 +845,32 @@ static int hpt374_ide_dma_end(ide_drive_t *drive) | |||
833 | 845 | ||
834 | static void hpt3xxn_set_clock(ide_hwif_t *hwif, u8 mode) | 846 | static void hpt3xxn_set_clock(ide_hwif_t *hwif, u8 mode) |
835 | { | 847 | { |
836 | u8 scr2 = hwif->INB(hwif->dma_master + 0x7b); | 848 | u8 scr2 = inb(hwif->dma_master + 0x7b); |
837 | 849 | ||
838 | if ((scr2 & 0x7f) == mode) | 850 | if ((scr2 & 0x7f) == mode) |
839 | return; | 851 | return; |
840 | 852 | ||
841 | /* Tristate the bus */ | 853 | /* Tristate the bus */ |
842 | hwif->OUTB(0x80, hwif->dma_master + 0x73); | 854 | outb(0x80, hwif->dma_master + 0x73); |
843 | hwif->OUTB(0x80, hwif->dma_master + 0x77); | 855 | outb(0x80, hwif->dma_master + 0x77); |
844 | 856 | ||
845 | /* Switch clock and reset channels */ | 857 | /* Switch clock and reset channels */ |
846 | hwif->OUTB(mode, hwif->dma_master + 0x7b); | 858 | outb(mode, hwif->dma_master + 0x7b); |
847 | hwif->OUTB(0xc0, hwif->dma_master + 0x79); | 859 | outb(0xc0, hwif->dma_master + 0x79); |
848 | 860 | ||
849 | /* | 861 | /* |
850 | * Reset the state machines. | 862 | * Reset the state machines. |
851 | * NOTE: avoid accidentally enabling the disabled channels. | 863 | * NOTE: avoid accidentally enabling the disabled channels. |
852 | */ | 864 | */ |
853 | hwif->OUTB(hwif->INB(hwif->dma_master + 0x70) | 0x32, | 865 | outb(inb(hwif->dma_master + 0x70) | 0x32, hwif->dma_master + 0x70); |
854 | hwif->dma_master + 0x70); | 866 | outb(inb(hwif->dma_master + 0x74) | 0x32, hwif->dma_master + 0x74); |
855 | hwif->OUTB(hwif->INB(hwif->dma_master + 0x74) | 0x32, | ||
856 | hwif->dma_master + 0x74); | ||
857 | 867 | ||
858 | /* Complete reset */ | 868 | /* Complete reset */ |
859 | hwif->OUTB(0x00, hwif->dma_master + 0x79); | 869 | outb(0x00, hwif->dma_master + 0x79); |
860 | 870 | ||
861 | /* Reconnect channels to bus */ | 871 | /* Reconnect channels to bus */ |
862 | hwif->OUTB(0x00, hwif->dma_master + 0x73); | 872 | outb(0x00, hwif->dma_master + 0x73); |
863 | hwif->OUTB(0x00, hwif->dma_master + 0x77); | 873 | outb(0x00, hwif->dma_master + 0x77); |
864 | } | 874 | } |
865 | 875 | ||
866 | /** | 876 | /** |
@@ -1139,7 +1149,7 @@ static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev, const cha | |||
1139 | * Select 66 MHz DPLL clock only if UltraATA/133 mode is | 1149 | * Select 66 MHz DPLL clock only if UltraATA/133 mode is |
1140 | * supported/enabled, use 50 MHz DPLL clock otherwise... | 1150 | * supported/enabled, use 50 MHz DPLL clock otherwise... |
1141 | */ | 1151 | */ |
1142 | if (info->max_ultra == 6) { | 1152 | if (info->udma_mask == ATA_UDMA6) { |
1143 | dpll_clk = 66; | 1153 | dpll_clk = 66; |
1144 | clock = ATA_CLOCK_66MHZ; | 1154 | clock = ATA_CLOCK_66MHZ; |
1145 | } else if (dpll_clk) { /* HPT36x chips don't have DPLL */ | 1155 | } else if (dpll_clk) { /* HPT36x chips don't have DPLL */ |
@@ -1291,14 +1301,9 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) | |||
1291 | if (new_mcr != old_mcr) | 1301 | if (new_mcr != old_mcr) |
1292 | pci_write_config_byte(dev, hwif->select_data + 1, new_mcr); | 1302 | pci_write_config_byte(dev, hwif->select_data + 1, new_mcr); |
1293 | 1303 | ||
1294 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | ||
1295 | |||
1296 | if (hwif->dma_base == 0) | 1304 | if (hwif->dma_base == 0) |
1297 | return; | 1305 | return; |
1298 | 1306 | ||
1299 | hwif->ultra_mask = hwif->cds->udma_mask; | ||
1300 | hwif->mwdma_mask = 0x07; | ||
1301 | |||
1302 | /* | 1307 | /* |
1303 | * The HPT37x uses the CBLID pins as outputs for MA15/MA16 | 1308 | * The HPT37x uses the CBLID pins as outputs for MA15/MA16 |
1304 | * address lines to access an external EEPROM. To read valid | 1309 | * address lines to access an external EEPROM. To read valid |
@@ -1354,7 +1359,7 @@ static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase) | |||
1354 | u8 dma_new = 0, dma_old = 0; | 1359 | u8 dma_new = 0, dma_old = 0; |
1355 | unsigned long flags; | 1360 | unsigned long flags; |
1356 | 1361 | ||
1357 | dma_old = hwif->INB(dmabase + 2); | 1362 | dma_old = inb(dmabase + 2); |
1358 | 1363 | ||
1359 | local_irq_save(flags); | 1364 | local_irq_save(flags); |
1360 | 1365 | ||
@@ -1365,60 +1370,26 @@ static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase) | |||
1365 | if (masterdma & 0x30) dma_new |= 0x20; | 1370 | if (masterdma & 0x30) dma_new |= 0x20; |
1366 | if ( slavedma & 0x30) dma_new |= 0x40; | 1371 | if ( slavedma & 0x30) dma_new |= 0x40; |
1367 | if (dma_new != dma_old) | 1372 | if (dma_new != dma_old) |
1368 | hwif->OUTB(dma_new, dmabase + 2); | 1373 | outb(dma_new, dmabase + 2); |
1369 | 1374 | ||
1370 | local_irq_restore(flags); | 1375 | local_irq_restore(flags); |
1371 | 1376 | ||
1372 | ide_setup_dma(hwif, dmabase, 8); | 1377 | ide_setup_dma(hwif, dmabase, 8); |
1373 | } | 1378 | } |
1374 | 1379 | ||
1375 | static int __devinit init_setup_hpt374(struct pci_dev *dev, ide_pci_device_t *d) | 1380 | static void __devinit hpt374_init(struct pci_dev *dev, struct pci_dev *dev2) |
1376 | { | 1381 | { |
1377 | struct pci_dev *dev2; | 1382 | if (dev2->irq != dev->irq) { |
1378 | 1383 | /* FIXME: we need a core pci_set_interrupt() */ | |
1379 | if (PCI_FUNC(dev->devfn) & 1) | 1384 | dev2->irq = dev->irq; |
1380 | return -ENODEV; | 1385 | printk(KERN_INFO "HPT374: PCI config space interrupt fixed\n"); |
1381 | |||
1382 | pci_set_drvdata(dev, &hpt374); | ||
1383 | |||
1384 | if ((dev2 = pci_get_slot(dev->bus, dev->devfn + 1)) != NULL) { | ||
1385 | int ret; | ||
1386 | |||
1387 | pci_set_drvdata(dev2, &hpt374); | ||
1388 | |||
1389 | if (dev2->irq != dev->irq) { | ||
1390 | /* FIXME: we need a core pci_set_interrupt() */ | ||
1391 | dev2->irq = dev->irq; | ||
1392 | printk(KERN_WARNING "%s: PCI config space interrupt " | ||
1393 | "fixed.\n", d->name); | ||
1394 | } | ||
1395 | ret = ide_setup_pci_devices(dev, dev2, d); | ||
1396 | if (ret < 0) | ||
1397 | pci_dev_put(dev2); | ||
1398 | return ret; | ||
1399 | } | 1386 | } |
1400 | return ide_setup_pci_device(dev, d); | ||
1401 | } | ||
1402 | |||
1403 | static int __devinit init_setup_hpt372n(struct pci_dev *dev, ide_pci_device_t *d) | ||
1404 | { | ||
1405 | pci_set_drvdata(dev, &hpt372n); | ||
1406 | |||
1407 | return ide_setup_pci_device(dev, d); | ||
1408 | } | 1387 | } |
1409 | 1388 | ||
1410 | static int __devinit init_setup_hpt371(struct pci_dev *dev, ide_pci_device_t *d) | 1389 | static void __devinit hpt371_init(struct pci_dev *dev) |
1411 | { | 1390 | { |
1412 | struct hpt_info *info; | ||
1413 | u8 mcr1 = 0; | 1391 | u8 mcr1 = 0; |
1414 | 1392 | ||
1415 | if (dev->revision > 1) { | ||
1416 | d->name = "HPT371N"; | ||
1417 | |||
1418 | info = &hpt371n; | ||
1419 | } else | ||
1420 | info = &hpt371; | ||
1421 | |||
1422 | /* | 1393 | /* |
1423 | * HPT371 chips physically have only one channel, the secondary one, | 1394 | * HPT371 chips physically have only one channel, the secondary one, |
1424 | * but the primary channel registers do exist! Go figure... | 1395 | * but the primary channel registers do exist! Go figure... |
@@ -1428,194 +1399,102 @@ static int __devinit init_setup_hpt371(struct pci_dev *dev, ide_pci_device_t *d) | |||
1428 | pci_read_config_byte(dev, 0x50, &mcr1); | 1399 | pci_read_config_byte(dev, 0x50, &mcr1); |
1429 | if (mcr1 & 0x04) | 1400 | if (mcr1 & 0x04) |
1430 | pci_write_config_byte(dev, 0x50, mcr1 & ~0x04); | 1401 | pci_write_config_byte(dev, 0x50, mcr1 & ~0x04); |
1431 | |||
1432 | pci_set_drvdata(dev, info); | ||
1433 | |||
1434 | return ide_setup_pci_device(dev, d); | ||
1435 | } | 1402 | } |
1436 | 1403 | ||
1437 | static int __devinit init_setup_hpt372a(struct pci_dev *dev, ide_pci_device_t *d) | 1404 | static int __devinit hpt36x_init(struct pci_dev *dev, struct pci_dev *dev2) |
1438 | { | 1405 | { |
1439 | struct hpt_info *info; | 1406 | u8 mcr1 = 0, pin1 = 0, pin2 = 0; |
1440 | |||
1441 | if (dev->revision > 1) { | ||
1442 | d->name = "HPT372N"; | ||
1443 | 1407 | ||
1444 | info = &hpt372n; | 1408 | /* |
1445 | } else | 1409 | * Now we'll have to force both channels enabled if |
1446 | info = &hpt372a; | 1410 | * at least one of them has been enabled by BIOS... |
1447 | pci_set_drvdata(dev, info); | 1411 | */ |
1448 | 1412 | pci_read_config_byte(dev, 0x50, &mcr1); | |
1449 | return ide_setup_pci_device(dev, d); | 1413 | if (mcr1 & 0x30) |
1450 | } | 1414 | pci_write_config_byte(dev, 0x50, mcr1 | 0x30); |
1451 | |||
1452 | static int __devinit init_setup_hpt302(struct pci_dev *dev, ide_pci_device_t *d) | ||
1453 | { | ||
1454 | struct hpt_info *info; | ||
1455 | 1415 | ||
1456 | if (dev->revision > 1) { | 1416 | pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin1); |
1457 | d->name = "HPT302N"; | 1417 | pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2); |
1458 | 1418 | ||
1459 | info = &hpt302n; | 1419 | if (pin1 != pin2 && dev->irq == dev2->irq) { |
1460 | } else | 1420 | printk(KERN_INFO "HPT36x: onboard version of chipset, " |
1461 | info = &hpt302; | 1421 | "pin1=%d pin2=%d\n", pin1, pin2); |
1462 | pci_set_drvdata(dev, info); | 1422 | return 1; |
1423 | } | ||
1463 | 1424 | ||
1464 | return ide_setup_pci_device(dev, d); | 1425 | return 0; |
1465 | } | 1426 | } |
1466 | 1427 | ||
1467 | static int __devinit init_setup_hpt366(struct pci_dev *dev, ide_pci_device_t *d) | 1428 | static const struct ide_port_info hpt366_chipsets[] __devinitdata = { |
1468 | { | 1429 | { /* 0 */ |
1469 | struct pci_dev *dev2; | 1430 | .name = "HPT36x", |
1470 | u8 rev = dev->revision; | 1431 | .init_chipset = init_chipset_hpt366, |
1471 | static char *chipset_names[] = { "HPT366", "HPT366", "HPT368", | 1432 | .init_hwif = init_hwif_hpt366, |
1472 | "HPT370", "HPT370A", "HPT372", | 1433 | .init_dma = init_dma_hpt366, |
1473 | "HPT372N" }; | ||
1474 | static struct hpt_info *info[] = { &hpt36x, &hpt36x, &hpt36x, | ||
1475 | &hpt370, &hpt370a, &hpt372, | ||
1476 | &hpt372n }; | ||
1477 | |||
1478 | if (PCI_FUNC(dev->devfn) & 1) | ||
1479 | return -ENODEV; | ||
1480 | |||
1481 | switch (rev) { | ||
1482 | case 0: | ||
1483 | case 1: | ||
1484 | case 2: | ||
1485 | /* | 1434 | /* |
1486 | * HPT36x chips have one channel per function and have | 1435 | * HPT36x chips have one channel per function and have |
1487 | * both channel enable bits located differently and visible | 1436 | * both channel enable bits located differently and visible |
1488 | * to both functions -- really stupid design decision... :-( | 1437 | * to both functions -- really stupid design decision... :-( |
1489 | * Bit 4 is for the primary channel, bit 5 for the secondary. | 1438 | * Bit 4 is for the primary channel, bit 5 for the secondary. |
1490 | */ | 1439 | */ |
1491 | d->host_flags |= IDE_HFLAG_SINGLE; | 1440 | .enablebits = {{0x50,0x10,0x10}, {0x54,0x04,0x04}}, |
1492 | d->enablebits[0].mask = d->enablebits[0].val = 0x10; | ||
1493 | |||
1494 | d->udma_mask = HPT366_ALLOW_ATA66_3 ? (HPT366_ALLOW_ATA66_4 ? | ||
1495 | ATA_UDMA4 : ATA_UDMA3) : ATA_UDMA2; | ||
1496 | break; | ||
1497 | case 3: | ||
1498 | case 4: | ||
1499 | d->udma_mask = HPT370_ALLOW_ATA100_5 ? ATA_UDMA5 : ATA_UDMA4; | ||
1500 | break; | ||
1501 | default: | ||
1502 | rev = 6; | ||
1503 | /* fall thru */ | ||
1504 | case 5: | ||
1505 | case 6: | ||
1506 | d->udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5; | ||
1507 | break; | ||
1508 | } | ||
1509 | |||
1510 | d->name = chipset_names[rev]; | ||
1511 | |||
1512 | pci_set_drvdata(dev, info[rev]); | ||
1513 | |||
1514 | if (rev > 2) | ||
1515 | goto init_single; | ||
1516 | |||
1517 | if ((dev2 = pci_get_slot(dev->bus, dev->devfn + 1)) != NULL) { | ||
1518 | u8 mcr1 = 0, pin1 = 0, pin2 = 0; | ||
1519 | int ret; | ||
1520 | |||
1521 | pci_set_drvdata(dev2, info[rev]); | ||
1522 | |||
1523 | /* | ||
1524 | * Now we'll have to force both channels enabled if | ||
1525 | * at least one of them has been enabled by BIOS... | ||
1526 | */ | ||
1527 | pci_read_config_byte(dev, 0x50, &mcr1); | ||
1528 | if (mcr1 & 0x30) | ||
1529 | pci_write_config_byte(dev, 0x50, mcr1 | 0x30); | ||
1530 | |||
1531 | pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin1); | ||
1532 | pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2); | ||
1533 | if (pin1 != pin2 && dev->irq == dev2->irq) { | ||
1534 | d->bootable = ON_BOARD; | ||
1535 | printk("%s: onboard version of chipset, pin1=%d pin2=%d\n", | ||
1536 | d->name, pin1, pin2); | ||
1537 | } | ||
1538 | ret = ide_setup_pci_devices(dev, dev2, d); | ||
1539 | if (ret < 0) | ||
1540 | pci_dev_put(dev2); | ||
1541 | return ret; | ||
1542 | } | ||
1543 | init_single: | ||
1544 | return ide_setup_pci_device(dev, d); | ||
1545 | } | ||
1546 | |||
1547 | static ide_pci_device_t hpt366_chipsets[] __devinitdata = { | ||
1548 | { /* 0 */ | ||
1549 | .name = "HPT366", | ||
1550 | .init_setup = init_setup_hpt366, | ||
1551 | .init_chipset = init_chipset_hpt366, | ||
1552 | .init_hwif = init_hwif_hpt366, | ||
1553 | .init_dma = init_dma_hpt366, | ||
1554 | .autodma = AUTODMA, | ||
1555 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, | ||
1556 | .bootable = OFF_BOARD, | ||
1557 | .extra = 240, | 1441 | .extra = 240, |
1442 | .host_flags = IDE_HFLAG_SINGLE | | ||
1443 | IDE_HFLAG_NO_ATAPI_DMA | | ||
1444 | IDE_HFLAG_OFF_BOARD, | ||
1558 | .pio_mask = ATA_PIO4, | 1445 | .pio_mask = ATA_PIO4, |
1446 | .mwdma_mask = ATA_MWDMA2, | ||
1559 | },{ /* 1 */ | 1447 | },{ /* 1 */ |
1560 | .name = "HPT372A", | 1448 | .name = "HPT372A", |
1561 | .init_setup = init_setup_hpt372a, | ||
1562 | .init_chipset = init_chipset_hpt366, | 1449 | .init_chipset = init_chipset_hpt366, |
1563 | .init_hwif = init_hwif_hpt366, | 1450 | .init_hwif = init_hwif_hpt366, |
1564 | .init_dma = init_dma_hpt366, | 1451 | .init_dma = init_dma_hpt366, |
1565 | .autodma = AUTODMA, | ||
1566 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, | 1452 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, |
1567 | .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, | ||
1568 | .bootable = OFF_BOARD, | ||
1569 | .extra = 240, | 1453 | .extra = 240, |
1454 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_OFF_BOARD, | ||
1570 | .pio_mask = ATA_PIO4, | 1455 | .pio_mask = ATA_PIO4, |
1456 | .mwdma_mask = ATA_MWDMA2, | ||
1571 | },{ /* 2 */ | 1457 | },{ /* 2 */ |
1572 | .name = "HPT302", | 1458 | .name = "HPT302", |
1573 | .init_setup = init_setup_hpt302, | ||
1574 | .init_chipset = init_chipset_hpt366, | 1459 | .init_chipset = init_chipset_hpt366, |
1575 | .init_hwif = init_hwif_hpt366, | 1460 | .init_hwif = init_hwif_hpt366, |
1576 | .init_dma = init_dma_hpt366, | 1461 | .init_dma = init_dma_hpt366, |
1577 | .autodma = AUTODMA, | ||
1578 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, | 1462 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, |
1579 | .udma_mask = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, | ||
1580 | .bootable = OFF_BOARD, | ||
1581 | .extra = 240, | 1463 | .extra = 240, |
1464 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_OFF_BOARD, | ||
1582 | .pio_mask = ATA_PIO4, | 1465 | .pio_mask = ATA_PIO4, |
1466 | .mwdma_mask = ATA_MWDMA2, | ||
1583 | },{ /* 3 */ | 1467 | },{ /* 3 */ |
1584 | .name = "HPT371", | 1468 | .name = "HPT371", |
1585 | .init_setup = init_setup_hpt371, | ||
1586 | .init_chipset = init_chipset_hpt366, | 1469 | .init_chipset = init_chipset_hpt366, |
1587 | .init_hwif = init_hwif_hpt366, | 1470 | .init_hwif = init_hwif_hpt366, |
1588 | .init_dma = init_dma_hpt366, | 1471 | .init_dma = init_dma_hpt366, |
1589 | .autodma = AUTODMA, | ||
1590 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, | 1472 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, |
1591 | .udma_mask = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, | ||
1592 | .bootable = OFF_BOARD, | ||
1593 | .extra = 240, | 1473 | .extra = 240, |
1474 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_OFF_BOARD, | ||
1594 | .pio_mask = ATA_PIO4, | 1475 | .pio_mask = ATA_PIO4, |
1476 | .mwdma_mask = ATA_MWDMA2, | ||
1595 | },{ /* 4 */ | 1477 | },{ /* 4 */ |
1596 | .name = "HPT374", | 1478 | .name = "HPT374", |
1597 | .init_setup = init_setup_hpt374, | ||
1598 | .init_chipset = init_chipset_hpt366, | 1479 | .init_chipset = init_chipset_hpt366, |
1599 | .init_hwif = init_hwif_hpt366, | 1480 | .init_hwif = init_hwif_hpt366, |
1600 | .init_dma = init_dma_hpt366, | 1481 | .init_dma = init_dma_hpt366, |
1601 | .autodma = AUTODMA, | ||
1602 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, | 1482 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, |
1603 | .udma_mask = ATA_UDMA5, | 1483 | .udma_mask = ATA_UDMA5, |
1604 | .bootable = OFF_BOARD, | ||
1605 | .extra = 240, | 1484 | .extra = 240, |
1485 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_OFF_BOARD, | ||
1606 | .pio_mask = ATA_PIO4, | 1486 | .pio_mask = ATA_PIO4, |
1487 | .mwdma_mask = ATA_MWDMA2, | ||
1607 | },{ /* 5 */ | 1488 | },{ /* 5 */ |
1608 | .name = "HPT372N", | 1489 | .name = "HPT372N", |
1609 | .init_setup = init_setup_hpt372n, | ||
1610 | .init_chipset = init_chipset_hpt366, | 1490 | .init_chipset = init_chipset_hpt366, |
1611 | .init_hwif = init_hwif_hpt366, | 1491 | .init_hwif = init_hwif_hpt366, |
1612 | .init_dma = init_dma_hpt366, | 1492 | .init_dma = init_dma_hpt366, |
1613 | .autodma = AUTODMA, | ||
1614 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, | 1493 | .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, |
1615 | .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, | ||
1616 | .bootable = OFF_BOARD, | ||
1617 | .extra = 240, | 1494 | .extra = 240, |
1495 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_OFF_BOARD, | ||
1618 | .pio_mask = ATA_PIO4, | 1496 | .pio_mask = ATA_PIO4, |
1497 | .mwdma_mask = ATA_MWDMA2, | ||
1619 | } | 1498 | } |
1620 | }; | 1499 | }; |
1621 | 1500 | ||
@@ -1626,16 +1505,77 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = { | |||
1626 | * | 1505 | * |
1627 | * Called when the PCI registration layer (or the IDE initialization) | 1506 | * Called when the PCI registration layer (or the IDE initialization) |
1628 | * finds a device matching our IDE device tables. | 1507 | * finds a device matching our IDE device tables. |
1629 | * | ||
1630 | * NOTE: since we'll have to modify some fields of the ide_pci_device_t | ||
1631 | * structure depending on the chip's revision, we'd better pass a local | ||
1632 | * copy down the call chain... | ||
1633 | */ | 1508 | */ |
1634 | static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 1509 | static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
1635 | { | 1510 | { |
1636 | ide_pci_device_t d = hpt366_chipsets[id->driver_data]; | 1511 | struct hpt_info *info = NULL; |
1512 | struct pci_dev *dev2 = NULL; | ||
1513 | struct ide_port_info d; | ||
1514 | u8 idx = id->driver_data; | ||
1515 | u8 rev = dev->revision; | ||
1516 | |||
1517 | if ((idx == 0 || idx == 4) && (PCI_FUNC(dev->devfn) & 1)) | ||
1518 | return -ENODEV; | ||
1519 | |||
1520 | switch (idx) { | ||
1521 | case 0: | ||
1522 | if (rev < 3) | ||
1523 | info = &hpt36x; | ||
1524 | else { | ||
1525 | static struct hpt_info *hpt37x_info[] = | ||
1526 | { &hpt370, &hpt370a, &hpt372, &hpt372n }; | ||
1527 | |||
1528 | info = hpt37x_info[min_t(u8, rev, 6) - 3]; | ||
1529 | idx++; | ||
1530 | } | ||
1531 | break; | ||
1532 | case 1: | ||
1533 | info = (rev > 1) ? &hpt372n : &hpt372a; | ||
1534 | break; | ||
1535 | case 2: | ||
1536 | info = (rev > 1) ? &hpt302n : &hpt302; | ||
1537 | break; | ||
1538 | case 3: | ||
1539 | hpt371_init(dev); | ||
1540 | info = (rev > 1) ? &hpt371n : &hpt371; | ||
1541 | break; | ||
1542 | case 4: | ||
1543 | info = &hpt374; | ||
1544 | break; | ||
1545 | case 5: | ||
1546 | info = &hpt372n; | ||
1547 | break; | ||
1548 | } | ||
1549 | |||
1550 | d = hpt366_chipsets[idx]; | ||
1551 | |||
1552 | d.name = info->chip_name; | ||
1553 | d.udma_mask = info->udma_mask; | ||
1554 | |||
1555 | pci_set_drvdata(dev, info); | ||
1556 | |||
1557 | if (info == &hpt36x || info == &hpt374) | ||
1558 | dev2 = pci_get_slot(dev->bus, dev->devfn + 1); | ||
1559 | |||
1560 | if (dev2) { | ||
1561 | int ret; | ||
1562 | |||
1563 | pci_set_drvdata(dev2, info); | ||
1564 | |||
1565 | if (info == &hpt374) | ||
1566 | hpt374_init(dev, dev2); | ||
1567 | else { | ||
1568 | if (hpt36x_init(dev, dev2)) | ||
1569 | d.host_flags |= IDE_HFLAG_BOOTABLE; | ||
1570 | } | ||
1571 | |||
1572 | ret = ide_setup_pci_devices(dev, dev2, &d); | ||
1573 | if (ret < 0) | ||
1574 | pci_dev_put(dev2); | ||
1575 | return ret; | ||
1576 | } | ||
1637 | 1577 | ||
1638 | return d.init_setup(dev, &d); | 1578 | return ide_setup_pci_device(dev, &d); |
1639 | } | 1579 | } |
1640 | 1580 | ||
1641 | static const struct pci_device_id hpt366_pci_tbl[] = { | 1581 | static const struct pci_device_id hpt366_pci_tbl[] = { |
diff --git a/drivers/ide/pci/it8213.c b/drivers/ide/pci/it8213.c index 24a71d03744..90b52ed37bf 100644 --- a/drivers/ide/pci/it8213.c +++ b/drivers/ide/pci/it8213.c | |||
@@ -170,17 +170,9 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif) | |||
170 | hwif->set_dma_mode = &it8213_set_dma_mode; | 170 | hwif->set_dma_mode = &it8213_set_dma_mode; |
171 | hwif->set_pio_mode = &it8213_set_pio_mode; | 171 | hwif->set_pio_mode = &it8213_set_pio_mode; |
172 | 172 | ||
173 | hwif->drives[0].autotune = 1; | ||
174 | hwif->drives[1].autotune = 1; | ||
175 | |||
176 | if (!hwif->dma_base) | 173 | if (!hwif->dma_base) |
177 | return; | 174 | return; |
178 | 175 | ||
179 | hwif->atapi_dma = 1; | ||
180 | hwif->ultra_mask = 0x7f; | ||
181 | hwif->mwdma_mask = 0x06; | ||
182 | hwif->swdma_mask = 0x04; | ||
183 | |||
184 | pci_read_config_byte(hwif->pci_dev, 0x42, ®42h); | 176 | pci_read_config_byte(hwif->pci_dev, 0x42, ®42h); |
185 | 177 | ||
186 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 178 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
@@ -192,14 +184,16 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif) | |||
192 | { \ | 184 | { \ |
193 | .name = name_str, \ | 185 | .name = name_str, \ |
194 | .init_hwif = init_hwif_it8213, \ | 186 | .init_hwif = init_hwif_it8213, \ |
195 | .autodma = AUTODMA, \ | ||
196 | .enablebits = {{0x41,0x80,0x80}}, \ | 187 | .enablebits = {{0x41,0x80,0x80}}, \ |
197 | .bootable = ON_BOARD, \ | 188 | .host_flags = IDE_HFLAG_SINGLE | \ |
198 | .host_flags = IDE_HFLAG_SINGLE, \ | 189 | IDE_HFLAG_BOOTABLE, \ |
199 | .pio_mask = ATA_PIO4, \ | 190 | .pio_mask = ATA_PIO4, \ |
191 | .swdma_mask = ATA_SWDMA2_ONLY, \ | ||
192 | .mwdma_mask = ATA_MWDMA12_ONLY, \ | ||
193 | .udma_mask = ATA_UDMA6, \ | ||
200 | } | 194 | } |
201 | 195 | ||
202 | static ide_pci_device_t it8213_chipsets[] __devinitdata = { | 196 | static const struct ide_port_info it8213_chipsets[] __devinitdata = { |
203 | /* 0 */ DECLARE_ITE_DEV("IT8213"), | 197 | /* 0 */ DECLARE_ITE_DEV("IT8213"), |
204 | }; | 198 | }; |
205 | 199 | ||
diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c index f3391a8698a..5c997543531 100644 --- a/drivers/ide/pci/it821x.c +++ b/drivers/ide/pci/it821x.c | |||
@@ -95,7 +95,7 @@ struct it821x_dev | |||
95 | 95 | ||
96 | /* | 96 | /* |
97 | * We allow users to force the card into non raid mode without | 97 | * We allow users to force the card into non raid mode without |
98 | * flashing the alternative BIOS. This is also neccessary right now | 98 | * flashing the alternative BIOS. This is also necessary right now |
99 | * for embedded platforms that cannot run a PC BIOS but are using this | 99 | * for embedded platforms that cannot run a PC BIOS but are using this |
100 | * device. | 100 | * device. |
101 | */ | 101 | */ |
@@ -544,12 +544,10 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif) | |||
544 | 544 | ||
545 | ide_set_hwifdata(hwif, idev); | 545 | ide_set_hwifdata(hwif, idev); |
546 | 546 | ||
547 | hwif->atapi_dma = 1; | ||
548 | |||
549 | pci_read_config_byte(hwif->pci_dev, 0x50, &conf); | 547 | pci_read_config_byte(hwif->pci_dev, 0x50, &conf); |
550 | if(conf & 1) { | 548 | if (conf & 1) { |
551 | idev->smart = 1; | 549 | idev->smart = 1; |
552 | hwif->atapi_dma = 0; | 550 | hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA; |
553 | /* Long I/O's although allowed in LBA48 space cause the | 551 | /* Long I/O's although allowed in LBA48 space cause the |
554 | onboard firmware to enter the twighlight zone */ | 552 | onboard firmware to enter the twighlight zone */ |
555 | hwif->rqsize = 256; | 553 | hwif->rqsize = 256; |
@@ -566,14 +564,14 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif) | |||
566 | 564 | ||
567 | /* | 565 | /* |
568 | * Not in the docs but according to the reference driver | 566 | * Not in the docs but according to the reference driver |
569 | * this is neccessary. | 567 | * this is necessary. |
570 | */ | 568 | */ |
571 | 569 | ||
572 | pci_read_config_byte(hwif->pci_dev, 0x08, &conf); | 570 | pci_read_config_byte(hwif->pci_dev, 0x08, &conf); |
573 | if(conf == 0x10) { | 571 | if (conf == 0x10) { |
574 | idev->timing10 = 1; | 572 | idev->timing10 = 1; |
575 | hwif->atapi_dma = 0; | 573 | hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA; |
576 | if(!idev->smart) | 574 | if (idev->smart == 0) |
577 | printk(KERN_WARNING "it821x: Revision 0x10, workarounds activated.\n"); | 575 | printk(KERN_WARNING "it821x: Revision 0x10, workarounds activated.\n"); |
578 | } | 576 | } |
579 | 577 | ||
@@ -587,14 +585,11 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif) | |||
587 | } else | 585 | } else |
588 | hwif->host_flags |= IDE_HFLAG_NO_SET_MODE; | 586 | hwif->host_flags |= IDE_HFLAG_NO_SET_MODE; |
589 | 587 | ||
590 | hwif->drives[0].autotune = 1; | ||
591 | hwif->drives[1].autotune = 1; | ||
592 | |||
593 | if (hwif->dma_base == 0) | 588 | if (hwif->dma_base == 0) |
594 | return; | 589 | return; |
595 | 590 | ||
596 | hwif->ultra_mask = 0x7f; | 591 | hwif->ultra_mask = ATA_UDMA6; |
597 | hwif->mwdma_mask = 0x07; | 592 | hwif->mwdma_mask = ATA_MWDMA2; |
598 | 593 | ||
599 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 594 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
600 | hwif->cbl = ata66_it821x(hwif); | 595 | hwif->cbl = ata66_it821x(hwif); |
@@ -638,13 +633,12 @@ static unsigned int __devinit init_chipset_it821x(struct pci_dev *dev, const cha | |||
638 | .name = name_str, \ | 633 | .name = name_str, \ |
639 | .init_chipset = init_chipset_it821x, \ | 634 | .init_chipset = init_chipset_it821x, \ |
640 | .init_hwif = init_hwif_it821x, \ | 635 | .init_hwif = init_hwif_it821x, \ |
641 | .autodma = AUTODMA, \ | ||
642 | .bootable = ON_BOARD, \ | ||
643 | .fixup = it821x_fixups, \ | 636 | .fixup = it821x_fixups, \ |
637 | .host_flags = IDE_HFLAG_BOOTABLE, \ | ||
644 | .pio_mask = ATA_PIO4, \ | 638 | .pio_mask = ATA_PIO4, \ |
645 | } | 639 | } |
646 | 640 | ||
647 | static ide_pci_device_t it821x_chipsets[] __devinitdata = { | 641 | static const struct ide_port_info it821x_chipsets[] __devinitdata = { |
648 | /* 0 */ DECLARE_ITE_DEV("IT8212"), | 642 | /* 0 */ DECLARE_ITE_DEV("IT8212"), |
649 | }; | 643 | }; |
650 | 644 | ||
diff --git a/drivers/ide/pci/jmicron.c b/drivers/ide/pci/jmicron.c index bb893ffcc98..bdf64d99770 100644 --- a/drivers/ide/pci/jmicron.c +++ b/drivers/ide/pci/jmicron.c | |||
@@ -111,27 +111,21 @@ static void __devinit init_hwif_jmicron(ide_hwif_t *hwif) | |||
111 | hwif->set_pio_mode = &jmicron_set_pio_mode; | 111 | hwif->set_pio_mode = &jmicron_set_pio_mode; |
112 | hwif->set_dma_mode = &jmicron_set_dma_mode; | 112 | hwif->set_dma_mode = &jmicron_set_dma_mode; |
113 | 113 | ||
114 | hwif->drives[0].autotune = 1; | ||
115 | hwif->drives[1].autotune = 1; | ||
116 | |||
117 | if (hwif->dma_base == 0) | 114 | if (hwif->dma_base == 0) |
118 | return; | 115 | return; |
119 | 116 | ||
120 | hwif->atapi_dma = 1; | ||
121 | hwif->ultra_mask = 0x7f; | ||
122 | hwif->mwdma_mask = 0x07; | ||
123 | |||
124 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 117 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
125 | hwif->cbl = ata66_jmicron(hwif); | 118 | hwif->cbl = ata66_jmicron(hwif); |
126 | } | 119 | } |
127 | 120 | ||
128 | static ide_pci_device_t jmicron_chipset __devinitdata = { | 121 | static const struct ide_port_info jmicron_chipset __devinitdata = { |
129 | .name = "JMB", | 122 | .name = "JMB", |
130 | .init_hwif = init_hwif_jmicron, | 123 | .init_hwif = init_hwif_jmicron, |
131 | .autodma = AUTODMA, | 124 | .host_flags = IDE_HFLAG_BOOTABLE, |
132 | .bootable = ON_BOARD, | ||
133 | .enablebits = { { 0x40, 0x01, 0x01 }, { 0x40, 0x10, 0x10 } }, | 125 | .enablebits = { { 0x40, 0x01, 0x01 }, { 0x40, 0x10, 0x10 } }, |
134 | .pio_mask = ATA_PIO5, | 126 | .pio_mask = ATA_PIO5, |
127 | .mwdma_mask = ATA_MWDMA2, | ||
128 | .udma_mask = ATA_UDMA6, | ||
135 | }; | 129 | }; |
136 | 130 | ||
137 | /** | 131 | /** |
diff --git a/drivers/ide/pci/ns87415.c b/drivers/ide/pci/ns87415.c index a8cd50ab62f..d4df4642dbb 100644 --- a/drivers/ide/pci/ns87415.c +++ b/drivers/ide/pci/ns87415.c | |||
@@ -260,15 +260,15 @@ static void __devinit init_hwif_ns87415 (ide_hwif_t *hwif) | |||
260 | hwif->ide_dma_end = &ns87415_ide_dma_end; | 260 | hwif->ide_dma_end = &ns87415_ide_dma_end; |
261 | } | 261 | } |
262 | 262 | ||
263 | static ide_pci_device_t ns87415_chipset __devinitdata = { | 263 | static const struct ide_port_info ns87415_chipset __devinitdata = { |
264 | .name = "NS87415", | 264 | .name = "NS87415", |
265 | #ifdef CONFIG_SUPERIO | 265 | #ifdef CONFIG_SUPERIO |
266 | .init_iops = init_iops_ns87415, | 266 | .init_iops = init_iops_ns87415, |
267 | #endif | 267 | #endif |
268 | .init_hwif = init_hwif_ns87415, | 268 | .init_hwif = init_hwif_ns87415, |
269 | .autodma = AUTODMA, | 269 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
270 | .bootable = ON_BOARD, | 270 | IDE_HFLAG_NO_ATAPI_DMA | |
271 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 271 | IDE_HFLAG_BOOTABLE, |
272 | }; | 272 | }; |
273 | 273 | ||
274 | static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 274 | static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
diff --git a/drivers/ide/pci/opti621.c b/drivers/ide/pci/opti621.c index 250662ea18a..8953d9c3926 100644 --- a/drivers/ide/pci/opti621.c +++ b/drivers/ide/pci/opti621.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/opti621.c Version 0.7 Sept 10, 2002 | 2 | * linux/drivers/ide/pci/opti621.c Version 0.9 Sep 24, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 1996-1998 Linus Torvalds & authors (see below) | 4 | * Copyright (C) 1996-1998 Linus Torvalds & authors (see below) |
5 | */ | 5 | */ |
@@ -57,9 +57,6 @@ | |||
57 | * There is a 25/33MHz switch in configuration | 57 | * There is a 25/33MHz switch in configuration |
58 | * register, but driver is written for use at any frequency which get | 58 | * register, but driver is written for use at any frequency which get |
59 | * (use idebus=xx to select PCI bus speed). | 59 | * (use idebus=xx to select PCI bus speed). |
60 | * Use hda=autotune and hdb=autotune for automatical tune of the PIO modes. | ||
61 | * If you get strange results, do not use this and set PIO manually | ||
62 | * by hdparm. | ||
63 | * | 60 | * |
64 | * Version 0.1, Nov 8, 1996 | 61 | * Version 0.1, Nov 8, 1996 |
65 | * by Jaromir Koutek, for 2.1.8. | 62 | * by Jaromir Koutek, for 2.1.8. |
@@ -136,6 +133,8 @@ static int reg_base; | |||
136 | #define PIO_NOT_EXIST 254 | 133 | #define PIO_NOT_EXIST 254 |
137 | #define PIO_DONT_KNOW 255 | 134 | #define PIO_DONT_KNOW 255 |
138 | 135 | ||
136 | static DEFINE_SPINLOCK(opti621_lock); | ||
137 | |||
139 | /* there are stored pio numbers from other calls of opti621_set_pio_mode */ | 138 | /* there are stored pio numbers from other calls of opti621_set_pio_mode */ |
140 | static void compute_pios(ide_drive_t *drive, const u8 pio) | 139 | static void compute_pios(ide_drive_t *drive, const u8 pio) |
141 | /* Store values into drive->drive_data | 140 | /* Store values into drive->drive_data |
@@ -281,7 +280,7 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
281 | second.recovery_time, drdy); | 280 | second.recovery_time, drdy); |
282 | #endif | 281 | #endif |
283 | 282 | ||
284 | spin_lock_irqsave(&ide_lock, flags); | 283 | spin_lock_irqsave(&opti621_lock, flags); |
285 | 284 | ||
286 | reg_base = hwif->io_ports[IDE_DATA_OFFSET]; | 285 | reg_base = hwif->io_ports[IDE_DATA_OFFSET]; |
287 | 286 | ||
@@ -320,7 +319,7 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
320 | /* and read prefetch for both drives */ | 319 | /* and read prefetch for both drives */ |
321 | write_reg(misc, MISC_REG); | 320 | write_reg(misc, MISC_REG); |
322 | 321 | ||
323 | spin_unlock_irqrestore(&ide_lock, flags); | 322 | spin_unlock_irqrestore(&opti621_lock, flags); |
324 | } | 323 | } |
325 | 324 | ||
326 | /* | 325 | /* |
@@ -332,32 +331,27 @@ static void __devinit init_hwif_opti621 (ide_hwif_t *hwif) | |||
332 | hwif->drives[1].drive_data = PIO_DONT_KNOW; | 331 | hwif->drives[1].drive_data = PIO_DONT_KNOW; |
333 | 332 | ||
334 | hwif->set_pio_mode = &opti621_set_pio_mode; | 333 | hwif->set_pio_mode = &opti621_set_pio_mode; |
335 | |||
336 | if (!(hwif->dma_base)) | ||
337 | return; | ||
338 | |||
339 | hwif->atapi_dma = 1; | ||
340 | hwif->mwdma_mask = 0x07; | ||
341 | hwif->swdma_mask = 0x07; | ||
342 | } | 334 | } |
343 | 335 | ||
344 | static ide_pci_device_t opti621_chipsets[] __devinitdata = { | 336 | static const struct ide_port_info opti621_chipsets[] __devinitdata = { |
345 | { /* 0 */ | 337 | { /* 0 */ |
346 | .name = "OPTI621", | 338 | .name = "OPTI621", |
347 | .init_hwif = init_hwif_opti621, | 339 | .init_hwif = init_hwif_opti621, |
348 | .autodma = AUTODMA, | ||
349 | .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, | 340 | .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, |
350 | .bootable = ON_BOARD, | 341 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
342 | IDE_HFLAG_BOOTABLE, | ||
351 | .pio_mask = ATA_PIO3, | 343 | .pio_mask = ATA_PIO3, |
352 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 344 | .swdma_mask = ATA_SWDMA2, |
345 | .mwdma_mask = ATA_MWDMA2, | ||
353 | },{ /* 1 */ | 346 | },{ /* 1 */ |
354 | .name = "OPTI621X", | 347 | .name = "OPTI621X", |
355 | .init_hwif = init_hwif_opti621, | 348 | .init_hwif = init_hwif_opti621, |
356 | .autodma = AUTODMA, | ||
357 | .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, | 349 | .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, |
358 | .bootable = ON_BOARD, | 350 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
351 | IDE_HFLAG_BOOTABLE, | ||
359 | .pio_mask = ATA_PIO3, | 352 | .pio_mask = ATA_PIO3, |
360 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 353 | .swdma_mask = ATA_SWDMA2, |
354 | .mwdma_mask = ATA_MWDMA2, | ||
361 | } | 355 | } |
362 | }; | 356 | }; |
363 | 357 | ||
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c index 8704b6f3331..4234efeba60 100644 --- a/drivers/ide/pci/pdc202xx_new.c +++ b/drivers/ide/pci/pdc202xx_new.c | |||
@@ -332,16 +332,12 @@ static long __devinit detect_pll_input_clock(unsigned long dma_base) | |||
332 | static void __devinit apple_kiwi_init(struct pci_dev *pdev) | 332 | static void __devinit apple_kiwi_init(struct pci_dev *pdev) |
333 | { | 333 | { |
334 | struct device_node *np = pci_device_to_OF_node(pdev); | 334 | struct device_node *np = pci_device_to_OF_node(pdev); |
335 | unsigned int class_rev = 0; | ||
336 | u8 conf; | 335 | u8 conf; |
337 | 336 | ||
338 | if (np == NULL || !of_device_is_compatible(np, "kiwi-root")) | 337 | if (np == NULL || !of_device_is_compatible(np, "kiwi-root")) |
339 | return; | 338 | return; |
340 | 339 | ||
341 | pci_read_config_dword(pdev, PCI_CLASS_REVISION, &class_rev); | 340 | if (pdev->revision >= 0x03) { |
342 | class_rev &= 0xff; | ||
343 | |||
344 | if (class_rev >= 0x03) { | ||
345 | /* Setup chip magic config stuff (from darwin) */ | 341 | /* Setup chip magic config stuff (from darwin) */ |
346 | pci_read_config_byte (pdev, 0x40, &conf); | 342 | pci_read_config_byte (pdev, 0x40, &conf); |
347 | pci_write_config_byte(pdev, 0x40, (conf | 0x01)); | 343 | pci_write_config_byte(pdev, 0x40, (conf | 0x01)); |
@@ -475,32 +471,76 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif) | |||
475 | hwif->quirkproc = &pdcnew_quirkproc; | 471 | hwif->quirkproc = &pdcnew_quirkproc; |
476 | hwif->resetproc = &pdcnew_reset; | 472 | hwif->resetproc = &pdcnew_reset; |
477 | 473 | ||
478 | hwif->err_stops_fifo = 1; | ||
479 | |||
480 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | ||
481 | |||
482 | if (hwif->dma_base == 0) | 474 | if (hwif->dma_base == 0) |
483 | return; | 475 | return; |
484 | 476 | ||
485 | hwif->atapi_dma = 1; | ||
486 | |||
487 | hwif->ultra_mask = hwif->cds->udma_mask; | ||
488 | hwif->mwdma_mask = 0x07; | ||
489 | |||
490 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 477 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
491 | hwif->cbl = pdcnew_cable_detect(hwif); | 478 | hwif->cbl = pdcnew_cable_detect(hwif); |
492 | } | 479 | } |
493 | 480 | ||
494 | static int __devinit init_setup_pdcnew(struct pci_dev *dev, ide_pci_device_t *d) | 481 | static struct pci_dev * __devinit pdc20270_get_dev2(struct pci_dev *dev) |
495 | { | 482 | { |
496 | return ide_setup_pci_device(dev, d); | 483 | struct pci_dev *dev2; |
484 | |||
485 | dev2 = pci_get_slot(dev->bus, PCI_DEVFN(PCI_SLOT(dev->devfn) + 2, | ||
486 | PCI_FUNC(dev->devfn))); | ||
487 | if (dev2 && | ||
488 | dev2->vendor == dev->vendor && | ||
489 | dev2->device == dev->device) { | ||
490 | |||
491 | if (dev2->irq != dev->irq) { | ||
492 | dev2->irq = dev->irq; | ||
493 | printk(KERN_INFO "PDC20270: PCI config space " | ||
494 | "interrupt fixed\n"); | ||
495 | } | ||
496 | |||
497 | return dev2; | ||
498 | } | ||
499 | |||
500 | return NULL; | ||
497 | } | 501 | } |
498 | 502 | ||
499 | static int __devinit init_setup_pdc20270(struct pci_dev *dev, ide_pci_device_t *d) | 503 | #define DECLARE_PDCNEW_DEV(name_str, udma) \ |
504 | { \ | ||
505 | .name = name_str, \ | ||
506 | .init_chipset = init_chipset_pdcnew, \ | ||
507 | .init_hwif = init_hwif_pdc202new, \ | ||
508 | .host_flags = IDE_HFLAG_POST_SET_MODE | \ | ||
509 | IDE_HFLAG_ERROR_STOPS_FIFO | \ | ||
510 | IDE_HFLAG_OFF_BOARD, \ | ||
511 | .pio_mask = ATA_PIO4, \ | ||
512 | .mwdma_mask = ATA_MWDMA2, \ | ||
513 | .udma_mask = udma, \ | ||
514 | } | ||
515 | |||
516 | static const struct ide_port_info pdcnew_chipsets[] __devinitdata = { | ||
517 | /* 0 */ DECLARE_PDCNEW_DEV("PDC20268", ATA_UDMA5), | ||
518 | /* 1 */ DECLARE_PDCNEW_DEV("PDC20269", ATA_UDMA6), | ||
519 | /* 2 */ DECLARE_PDCNEW_DEV("PDC20270", ATA_UDMA5), | ||
520 | /* 3 */ DECLARE_PDCNEW_DEV("PDC20271", ATA_UDMA6), | ||
521 | /* 4 */ DECLARE_PDCNEW_DEV("PDC20275", ATA_UDMA6), | ||
522 | /* 5 */ DECLARE_PDCNEW_DEV("PDC20276", ATA_UDMA6), | ||
523 | /* 6 */ DECLARE_PDCNEW_DEV("PDC20277", ATA_UDMA6), | ||
524 | }; | ||
525 | |||
526 | /** | ||
527 | * pdc202new_init_one - called when a pdc202xx is found | ||
528 | * @dev: the pdc202new device | ||
529 | * @id: the matching pci id | ||
530 | * | ||
531 | * Called when the PCI registration layer (or the IDE initialization) | ||
532 | * finds a device matching our IDE device tables. | ||
533 | */ | ||
534 | |||
535 | static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_device_id *id) | ||
500 | { | 536 | { |
537 | const struct ide_port_info *d; | ||
501 | struct pci_dev *bridge = dev->bus->self; | 538 | struct pci_dev *bridge = dev->bus->self; |
539 | u8 idx = id->driver_data; | ||
540 | |||
541 | d = &pdcnew_chipsets[idx]; | ||
502 | 542 | ||
503 | if (bridge != NULL && | 543 | if (idx == 2 && bridge && |
504 | bridge->vendor == PCI_VENDOR_ID_DEC && | 544 | bridge->vendor == PCI_VENDOR_ID_DEC && |
505 | bridge->device == PCI_DEVICE_ID_DEC_21150) { | 545 | bridge->device == PCI_DEVICE_ID_DEC_21150) { |
506 | struct pci_dev *dev2; | 546 | struct pci_dev *dev2; |
@@ -508,133 +548,26 @@ static int __devinit init_setup_pdc20270(struct pci_dev *dev, ide_pci_device_t * | |||
508 | if (PCI_SLOT(dev->devfn) & 2) | 548 | if (PCI_SLOT(dev->devfn) & 2) |
509 | return -ENODEV; | 549 | return -ENODEV; |
510 | 550 | ||
511 | dev2 = pci_get_slot(dev->bus, PCI_DEVFN(PCI_SLOT(dev->devfn) + 2, | 551 | dev2 = pdc20270_get_dev2(dev); |
512 | PCI_FUNC(dev->devfn))); | ||
513 | if (dev2 != NULL && | ||
514 | dev2->vendor == dev->vendor && | ||
515 | dev2->device == dev->device) { | ||
516 | int ret; | ||
517 | |||
518 | if (dev2->irq != dev->irq) { | ||
519 | dev2->irq = dev->irq; | ||
520 | 552 | ||
521 | printk(KERN_WARNING "%s: PCI config space " | 553 | if (dev2) { |
522 | "interrupt fixed.\n", d->name); | 554 | int ret = ide_setup_pci_devices(dev, dev2, d); |
523 | } | ||
524 | |||
525 | ret = ide_setup_pci_devices(dev, dev2, d); | ||
526 | if (ret < 0) | 555 | if (ret < 0) |
527 | pci_dev_put(dev2); | 556 | pci_dev_put(dev2); |
528 | return ret; | 557 | return ret; |
529 | } | 558 | } |
530 | } | 559 | } |
531 | return ide_setup_pci_device(dev, d); | ||
532 | } | ||
533 | 560 | ||
534 | static int __devinit init_setup_pdc20276(struct pci_dev *dev, ide_pci_device_t *d) | 561 | if (idx == 5 && bridge && |
535 | { | ||
536 | struct pci_dev *bridge = dev->bus->self; | ||
537 | |||
538 | if (bridge != NULL && | ||
539 | bridge->vendor == PCI_VENDOR_ID_INTEL && | 562 | bridge->vendor == PCI_VENDOR_ID_INTEL && |
540 | (bridge->device == PCI_DEVICE_ID_INTEL_I960 || | 563 | (bridge->device == PCI_DEVICE_ID_INTEL_I960 || |
541 | bridge->device == PCI_DEVICE_ID_INTEL_I960RM)) { | 564 | bridge->device == PCI_DEVICE_ID_INTEL_I960RM)) { |
542 | 565 | printk(KERN_INFO "PDC20276: attached to I2O RAID controller, " | |
543 | printk(KERN_INFO "%s: attached to I2O RAID controller, " | 566 | "skipping\n"); |
544 | "skipping.\n", d->name); | ||
545 | return -ENODEV; | 567 | return -ENODEV; |
546 | } | 568 | } |
547 | return ide_setup_pci_device(dev, d); | ||
548 | } | ||
549 | |||
550 | static ide_pci_device_t pdcnew_chipsets[] __devinitdata = { | ||
551 | { /* 0 */ | ||
552 | .name = "PDC20268", | ||
553 | .init_setup = init_setup_pdcnew, | ||
554 | .init_chipset = init_chipset_pdcnew, | ||
555 | .init_hwif = init_hwif_pdc202new, | ||
556 | .autodma = AUTODMA, | ||
557 | .bootable = OFF_BOARD, | ||
558 | .pio_mask = ATA_PIO4, | ||
559 | .udma_mask = 0x3f, /* udma0-5 */ | ||
560 | .host_flags = IDE_HFLAG_POST_SET_MODE, | ||
561 | },{ /* 1 */ | ||
562 | .name = "PDC20269", | ||
563 | .init_setup = init_setup_pdcnew, | ||
564 | .init_chipset = init_chipset_pdcnew, | ||
565 | .init_hwif = init_hwif_pdc202new, | ||
566 | .autodma = AUTODMA, | ||
567 | .bootable = OFF_BOARD, | ||
568 | .pio_mask = ATA_PIO4, | ||
569 | .udma_mask = 0x7f, /* udma0-6*/ | ||
570 | .host_flags = IDE_HFLAG_POST_SET_MODE, | ||
571 | },{ /* 2 */ | ||
572 | .name = "PDC20270", | ||
573 | .init_setup = init_setup_pdc20270, | ||
574 | .init_chipset = init_chipset_pdcnew, | ||
575 | .init_hwif = init_hwif_pdc202new, | ||
576 | .autodma = AUTODMA, | ||
577 | .bootable = OFF_BOARD, | ||
578 | .pio_mask = ATA_PIO4, | ||
579 | .udma_mask = 0x3f, /* udma0-5 */ | ||
580 | .host_flags = IDE_HFLAG_POST_SET_MODE, | ||
581 | },{ /* 3 */ | ||
582 | .name = "PDC20271", | ||
583 | .init_setup = init_setup_pdcnew, | ||
584 | .init_chipset = init_chipset_pdcnew, | ||
585 | .init_hwif = init_hwif_pdc202new, | ||
586 | .autodma = AUTODMA, | ||
587 | .bootable = OFF_BOARD, | ||
588 | .pio_mask = ATA_PIO4, | ||
589 | .udma_mask = 0x7f, /* udma0-6*/ | ||
590 | .host_flags = IDE_HFLAG_POST_SET_MODE, | ||
591 | },{ /* 4 */ | ||
592 | .name = "PDC20275", | ||
593 | .init_setup = init_setup_pdcnew, | ||
594 | .init_chipset = init_chipset_pdcnew, | ||
595 | .init_hwif = init_hwif_pdc202new, | ||
596 | .autodma = AUTODMA, | ||
597 | .bootable = OFF_BOARD, | ||
598 | .pio_mask = ATA_PIO4, | ||
599 | .udma_mask = 0x7f, /* udma0-6*/ | ||
600 | .host_flags = IDE_HFLAG_POST_SET_MODE, | ||
601 | },{ /* 5 */ | ||
602 | .name = "PDC20276", | ||
603 | .init_setup = init_setup_pdc20276, | ||
604 | .init_chipset = init_chipset_pdcnew, | ||
605 | .init_hwif = init_hwif_pdc202new, | ||
606 | .autodma = AUTODMA, | ||
607 | .bootable = OFF_BOARD, | ||
608 | .pio_mask = ATA_PIO4, | ||
609 | .udma_mask = 0x7f, /* udma0-6*/ | ||
610 | .host_flags = IDE_HFLAG_POST_SET_MODE, | ||
611 | },{ /* 6 */ | ||
612 | .name = "PDC20277", | ||
613 | .init_setup = init_setup_pdcnew, | ||
614 | .init_chipset = init_chipset_pdcnew, | ||
615 | .init_hwif = init_hwif_pdc202new, | ||
616 | .autodma = AUTODMA, | ||
617 | .bootable = OFF_BOARD, | ||
618 | .pio_mask = ATA_PIO4, | ||
619 | .udma_mask = 0x7f, /* udma0-6*/ | ||
620 | .host_flags = IDE_HFLAG_POST_SET_MODE, | ||
621 | } | ||
622 | }; | ||
623 | 569 | ||
624 | /** | 570 | return ide_setup_pci_device(dev, d); |
625 | * pdc202new_init_one - called when a pdc202xx is found | ||
626 | * @dev: the pdc202new device | ||
627 | * @id: the matching pci id | ||
628 | * | ||
629 | * Called when the PCI registration layer (or the IDE initialization) | ||
630 | * finds a device matching our IDE device tables. | ||
631 | */ | ||
632 | |||
633 | static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_device_id *id) | ||
634 | { | ||
635 | ide_pci_device_t *d = &pdcnew_chipsets[id->driver_data]; | ||
636 | |||
637 | return d->init_setup(dev, d); | ||
638 | } | 571 | } |
639 | 572 | ||
640 | static const struct pci_device_id pdc202new_pci_tbl[] = { | 573 | static const struct pci_device_id pdc202new_pci_tbl[] = { |
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c index e1d2337a9f1..e09742e2ba5 100644 --- a/drivers/ide/pci/pdc202xx_old.c +++ b/drivers/ide/pci/pdc202xx_old.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/pdc202xx_old.c Version 0.51 Jul 27, 2007 | 2 | * linux/drivers/ide/pci/pdc202xx_old.c Version 0.52 Aug 27, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 1998-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 1998-2002 Andre Hedrick <andre@linux-ide.org> |
5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. | 5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. |
@@ -97,9 +97,6 @@ static void pdc202xx_set_mode(ide_drive_t *drive, const u8 speed) | |||
97 | case XFER_MW_DMA_2: TB = 0x60; TC = 0x03; break; | 97 | case XFER_MW_DMA_2: TB = 0x60; TC = 0x03; break; |
98 | case XFER_MW_DMA_1: TB = 0x60; TC = 0x04; break; | 98 | case XFER_MW_DMA_1: TB = 0x60; TC = 0x04; break; |
99 | case XFER_MW_DMA_0: TB = 0xE0; TC = 0x0F; break; | 99 | case XFER_MW_DMA_0: TB = 0xE0; TC = 0x0F; break; |
100 | case XFER_SW_DMA_2: TB = 0x60; TC = 0x05; break; | ||
101 | case XFER_SW_DMA_1: TB = 0x80; TC = 0x06; break; | ||
102 | case XFER_SW_DMA_0: TB = 0xC0; TC = 0x0B; break; | ||
103 | case XFER_PIO_4: TA = 0x01; TB = 0x04; break; | 100 | case XFER_PIO_4: TA = 0x01; TB = 0x04; break; |
104 | case XFER_PIO_3: TA = 0x02; TB = 0x06; break; | 101 | case XFER_PIO_3: TA = 0x02; TB = 0x06; break; |
105 | case XFER_PIO_2: TA = 0x03; TB = 0x08; break; | 102 | case XFER_PIO_2: TA = 0x03; TB = 0x08; break; |
@@ -305,13 +302,6 @@ static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev, | |||
305 | 302 | ||
306 | static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif) | 303 | static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif) |
307 | { | 304 | { |
308 | struct pci_dev *dev = hwif->pci_dev; | ||
309 | |||
310 | /* PDC20265 has problems with large LBA48 requests */ | ||
311 | if ((dev->device == PCI_DEVICE_ID_PROMISE_20267) || | ||
312 | (dev->device == PCI_DEVICE_ID_PROMISE_20265)) | ||
313 | hwif->rqsize = 256; | ||
314 | |||
315 | hwif->set_pio_mode = &pdc202xx_set_pio_mode; | 305 | hwif->set_pio_mode = &pdc202xx_set_pio_mode; |
316 | hwif->set_dma_mode = &pdc202xx_set_mode; | 306 | hwif->set_dma_mode = &pdc202xx_set_mode; |
317 | 307 | ||
@@ -320,18 +310,9 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif) | |||
320 | if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246) | 310 | if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246) |
321 | hwif->resetproc = &pdc202xx_reset; | 311 | hwif->resetproc = &pdc202xx_reset; |
322 | 312 | ||
323 | hwif->err_stops_fifo = 1; | ||
324 | |||
325 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | ||
326 | |||
327 | if (hwif->dma_base == 0) | 313 | if (hwif->dma_base == 0) |
328 | return; | 314 | return; |
329 | 315 | ||
330 | hwif->ultra_mask = hwif->cds->udma_mask; | ||
331 | hwif->mwdma_mask = 0x07; | ||
332 | hwif->swdma_mask = 0x07; | ||
333 | hwif->atapi_dma = 1; | ||
334 | |||
335 | hwif->dma_lost_irq = &pdc202xx_dma_lost_irq; | 316 | hwif->dma_lost_irq = &pdc202xx_dma_lost_irq; |
336 | hwif->dma_timeout = &pdc202xx_dma_timeout; | 317 | hwif->dma_timeout = &pdc202xx_dma_timeout; |
337 | 318 | ||
@@ -377,8 +358,8 @@ static void __devinit init_dma_pdc202xx(ide_hwif_t *hwif, unsigned long dmabase) | |||
377 | ide_setup_dma(hwif, dmabase, 8); | 358 | ide_setup_dma(hwif, dmabase, 8); |
378 | } | 359 | } |
379 | 360 | ||
380 | static int __devinit init_setup_pdc202ata4(struct pci_dev *dev, | 361 | static void __devinit pdc202ata4_fixup_irq(struct pci_dev *dev, |
381 | ide_pci_device_t *d) | 362 | const char *name) |
382 | { | 363 | { |
383 | if ((dev->class >> 8) != PCI_CLASS_STORAGE_IDE) { | 364 | if ((dev->class >> 8) != PCI_CLASS_STORAGE_IDE) { |
384 | u8 irq = 0, irq2 = 0; | 365 | u8 irq = 0, irq2 = 0; |
@@ -388,90 +369,45 @@ static int __devinit init_setup_pdc202ata4(struct pci_dev *dev, | |||
388 | if (irq != irq2) { | 369 | if (irq != irq2) { |
389 | pci_write_config_byte(dev, | 370 | pci_write_config_byte(dev, |
390 | (PCI_INTERRUPT_LINE)|0x80, irq); /* 0xbc */ | 371 | (PCI_INTERRUPT_LINE)|0x80, irq); /* 0xbc */ |
391 | printk(KERN_INFO "%s: pci-config space interrupt " | 372 | printk(KERN_INFO "%s: PCI config space interrupt " |
392 | "mirror fixed.\n", d->name); | 373 | "mirror fixed\n", name); |
393 | } | 374 | } |
394 | } | 375 | } |
395 | return ide_setup_pci_device(dev, d); | ||
396 | } | 376 | } |
397 | 377 | ||
398 | static int __devinit init_setup_pdc20265(struct pci_dev *dev, | 378 | #define DECLARE_PDC2026X_DEV(name_str, udma, extra_flags) \ |
399 | ide_pci_device_t *d) | 379 | { \ |
400 | { | 380 | .name = name_str, \ |
401 | if ((dev->bus->self) && | 381 | .init_chipset = init_chipset_pdc202xx, \ |
402 | (dev->bus->self->vendor == PCI_VENDOR_ID_INTEL) && | 382 | .init_hwif = init_hwif_pdc202xx, \ |
403 | ((dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960) || | 383 | .init_dma = init_dma_pdc202xx, \ |
404 | (dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960RM))) { | 384 | .extra = 48, \ |
405 | printk(KERN_INFO "ide: Skipping Promise PDC20265 " | 385 | .host_flags = IDE_HFLAG_ERROR_STOPS_FIFO | \ |
406 | "attached to I2O RAID controller.\n"); | 386 | extra_flags | \ |
407 | return -ENODEV; | 387 | IDE_HFLAG_OFF_BOARD, \ |
388 | .pio_mask = ATA_PIO4, \ | ||
389 | .mwdma_mask = ATA_MWDMA2, \ | ||
390 | .udma_mask = udma, \ | ||
408 | } | 391 | } |
409 | return ide_setup_pci_device(dev, d); | ||
410 | } | ||
411 | 392 | ||
412 | static int __devinit init_setup_pdc202xx(struct pci_dev *dev, | 393 | static const struct ide_port_info pdc202xx_chipsets[] __devinitdata = { |
413 | ide_pci_device_t *d) | ||
414 | { | ||
415 | return ide_setup_pci_device(dev, d); | ||
416 | } | ||
417 | |||
418 | static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = { | ||
419 | { /* 0 */ | 394 | { /* 0 */ |
420 | .name = "PDC20246", | 395 | .name = "PDC20246", |
421 | .init_setup = init_setup_pdc202ata4, | ||
422 | .init_chipset = init_chipset_pdc202xx, | 396 | .init_chipset = init_chipset_pdc202xx, |
423 | .init_hwif = init_hwif_pdc202xx, | 397 | .init_hwif = init_hwif_pdc202xx, |
424 | .init_dma = init_dma_pdc202xx, | 398 | .init_dma = init_dma_pdc202xx, |
425 | .autodma = AUTODMA, | ||
426 | .bootable = OFF_BOARD, | ||
427 | .extra = 16, | 399 | .extra = 16, |
400 | .host_flags = IDE_HFLAG_ERROR_STOPS_FIFO | | ||
401 | IDE_HFLAG_OFF_BOARD, | ||
428 | .pio_mask = ATA_PIO4, | 402 | .pio_mask = ATA_PIO4, |
429 | .udma_mask = 0x07, /* udma0-2 */ | 403 | .mwdma_mask = ATA_MWDMA2, |
430 | },{ /* 1 */ | 404 | .udma_mask = ATA_UDMA2, |
431 | .name = "PDC20262", | 405 | }, |
432 | .init_setup = init_setup_pdc202ata4, | 406 | |
433 | .init_chipset = init_chipset_pdc202xx, | 407 | /* 1 */ DECLARE_PDC2026X_DEV("PDC20262", ATA_UDMA4, 0), |
434 | .init_hwif = init_hwif_pdc202xx, | 408 | /* 2 */ DECLARE_PDC2026X_DEV("PDC20263", ATA_UDMA4, 0), |
435 | .init_dma = init_dma_pdc202xx, | 409 | /* 3 */ DECLARE_PDC2026X_DEV("PDC20265", ATA_UDMA5, IDE_HFLAG_RQSIZE_256), |
436 | .autodma = AUTODMA, | 410 | /* 4 */ DECLARE_PDC2026X_DEV("PDC20267", ATA_UDMA5, IDE_HFLAG_RQSIZE_256), |
437 | .bootable = OFF_BOARD, | ||
438 | .extra = 48, | ||
439 | .pio_mask = ATA_PIO4, | ||
440 | .udma_mask = 0x1f, /* udma0-4 */ | ||
441 | },{ /* 2 */ | ||
442 | .name = "PDC20263", | ||
443 | .init_setup = init_setup_pdc202ata4, | ||
444 | .init_chipset = init_chipset_pdc202xx, | ||
445 | .init_hwif = init_hwif_pdc202xx, | ||
446 | .init_dma = init_dma_pdc202xx, | ||
447 | .autodma = AUTODMA, | ||
448 | .bootable = OFF_BOARD, | ||
449 | .extra = 48, | ||
450 | .pio_mask = ATA_PIO4, | ||
451 | .udma_mask = 0x1f, /* udma0-4 */ | ||
452 | },{ /* 3 */ | ||
453 | .name = "PDC20265", | ||
454 | .init_setup = init_setup_pdc20265, | ||
455 | .init_chipset = init_chipset_pdc202xx, | ||
456 | .init_hwif = init_hwif_pdc202xx, | ||
457 | .init_dma = init_dma_pdc202xx, | ||
458 | .autodma = AUTODMA, | ||
459 | .bootable = OFF_BOARD, | ||
460 | .extra = 48, | ||
461 | .pio_mask = ATA_PIO4, | ||
462 | .udma_mask = 0x3f, /* udma0-5 */ | ||
463 | },{ /* 4 */ | ||
464 | .name = "PDC20267", | ||
465 | .init_setup = init_setup_pdc202xx, | ||
466 | .init_chipset = init_chipset_pdc202xx, | ||
467 | .init_hwif = init_hwif_pdc202xx, | ||
468 | .init_dma = init_dma_pdc202xx, | ||
469 | .autodma = AUTODMA, | ||
470 | .bootable = OFF_BOARD, | ||
471 | .extra = 48, | ||
472 | .pio_mask = ATA_PIO4, | ||
473 | .udma_mask = 0x3f, /* udma0-5 */ | ||
474 | } | ||
475 | }; | 411 | }; |
476 | 412 | ||
477 | /** | 413 | /** |
@@ -485,9 +421,28 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = { | |||
485 | 421 | ||
486 | static int __devinit pdc202xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 422 | static int __devinit pdc202xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
487 | { | 423 | { |
488 | ide_pci_device_t *d = &pdc202xx_chipsets[id->driver_data]; | 424 | const struct ide_port_info *d; |
425 | u8 idx = id->driver_data; | ||
426 | |||
427 | d = &pdc202xx_chipsets[idx]; | ||
428 | |||
429 | if (idx < 3) | ||
430 | pdc202ata4_fixup_irq(dev, d->name); | ||
431 | |||
432 | if (idx == 3) { | ||
433 | struct pci_dev *bridge = dev->bus->self; | ||
489 | 434 | ||
490 | return d->init_setup(dev, d); | 435 | if (bridge && |
436 | bridge->vendor == PCI_VENDOR_ID_INTEL && | ||
437 | (bridge->device == PCI_DEVICE_ID_INTEL_I960 || | ||
438 | bridge->device == PCI_DEVICE_ID_INTEL_I960RM)) { | ||
439 | printk(KERN_INFO "ide: Skipping Promise PDC20265 " | ||
440 | "attached to I2O RAID controller\n"); | ||
441 | return -ENODEV; | ||
442 | } | ||
443 | } | ||
444 | |||
445 | return ide_setup_pci_device(dev, d); | ||
491 | } | 446 | } |
492 | 447 | ||
493 | static const struct pci_device_id pdc202xx_pci_tbl[] = { | 448 | static const struct pci_device_id pdc202xx_pci_tbl[] = { |
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c index a8dd0c0add3..9329d4a810e 100644 --- a/drivers/ide/pci/piix.c +++ b/drivers/ide/pci/piix.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/piix.c Version 0.53 Aug 9, 2007 | 2 | * linux/drivers/ide/pci/piix.c Version 0.54 Sep 5, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer | 4 | * Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer |
5 | * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org> | 5 | * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org> |
@@ -254,53 +254,20 @@ static void piix_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
254 | } | 254 | } |
255 | 255 | ||
256 | /** | 256 | /** |
257 | * piix_is_ichx - check if ICHx | 257 | * init_chipset_ich - set up the ICH chipset |
258 | * @dev: PCI device to check | ||
259 | * | ||
260 | * returns 1 if ICHx, 0 otherwise. | ||
261 | */ | ||
262 | static int piix_is_ichx(struct pci_dev *dev) | ||
263 | { | ||
264 | switch (dev->device) { | ||
265 | case PCI_DEVICE_ID_INTEL_82801EB_1: | ||
266 | case PCI_DEVICE_ID_INTEL_82801AA_1: | ||
267 | case PCI_DEVICE_ID_INTEL_82801AB_1: | ||
268 | case PCI_DEVICE_ID_INTEL_82801BA_8: | ||
269 | case PCI_DEVICE_ID_INTEL_82801BA_9: | ||
270 | case PCI_DEVICE_ID_INTEL_82801CA_10: | ||
271 | case PCI_DEVICE_ID_INTEL_82801CA_11: | ||
272 | case PCI_DEVICE_ID_INTEL_82801DB_1: | ||
273 | case PCI_DEVICE_ID_INTEL_82801DB_10: | ||
274 | case PCI_DEVICE_ID_INTEL_82801DB_11: | ||
275 | case PCI_DEVICE_ID_INTEL_82801EB_11: | ||
276 | case PCI_DEVICE_ID_INTEL_82801E_11: | ||
277 | case PCI_DEVICE_ID_INTEL_ESB_2: | ||
278 | case PCI_DEVICE_ID_INTEL_ICH6_19: | ||
279 | case PCI_DEVICE_ID_INTEL_ICH7_21: | ||
280 | case PCI_DEVICE_ID_INTEL_ESB2_18: | ||
281 | case PCI_DEVICE_ID_INTEL_ICH8_6: | ||
282 | return 1; | ||
283 | } | ||
284 | |||
285 | return 0; | ||
286 | } | ||
287 | |||
288 | /** | ||
289 | * init_chipset_piix - set up the PIIX chipset | ||
290 | * @dev: PCI device to set up | 258 | * @dev: PCI device to set up |
291 | * @name: Name of the device | 259 | * @name: Name of the device |
292 | * | 260 | * |
293 | * Initialize the PCI device as required. For the PIIX this turns | 261 | * Initialize the PCI device as required. For the ICH this turns |
294 | * out to be nice and simple | 262 | * out to be nice and simple. |
295 | */ | 263 | */ |
296 | 264 | ||
297 | static unsigned int __devinit init_chipset_piix (struct pci_dev *dev, const char *name) | 265 | static unsigned int __devinit init_chipset_ich(struct pci_dev *dev, const char *name) |
298 | { | 266 | { |
299 | if (piix_is_ichx(dev)) { | 267 | u32 extra = 0; |
300 | unsigned int extra = 0; | 268 | |
301 | pci_read_config_dword(dev, 0x54, &extra); | 269 | pci_read_config_dword(dev, 0x54, &extra); |
302 | pci_write_config_dword(dev, 0x54, extra|0x400); | 270 | pci_write_config_dword(dev, 0x54, extra | 0x400); |
303 | } | ||
304 | 271 | ||
305 | return 0; | 272 | return 0; |
306 | } | 273 | } |
@@ -318,9 +285,9 @@ static void piix_dma_clear_irq(ide_drive_t *drive) | |||
318 | u8 dma_stat; | 285 | u8 dma_stat; |
319 | 286 | ||
320 | /* clear the INTR & ERROR bits */ | 287 | /* clear the INTR & ERROR bits */ |
321 | dma_stat = hwif->INB(hwif->dma_status); | 288 | dma_stat = inb(hwif->dma_status); |
322 | /* Should we force the bit as well ? */ | 289 | /* Should we force the bit as well ? */ |
323 | hwif->OUTB(dma_stat, hwif->dma_status); | 290 | outb(dma_stat, hwif->dma_status); |
324 | } | 291 | } |
325 | 292 | ||
326 | struct ich_laptop { | 293 | struct ich_laptop { |
@@ -374,35 +341,12 @@ static u8 __devinit piix_cable_detect(ide_hwif_t *hwif) | |||
374 | 341 | ||
375 | static void __devinit init_hwif_piix(ide_hwif_t *hwif) | 342 | static void __devinit init_hwif_piix(ide_hwif_t *hwif) |
376 | { | 343 | { |
377 | #ifndef CONFIG_IA64 | ||
378 | if (!hwif->irq) | ||
379 | hwif->irq = hwif->channel ? 15 : 14; | ||
380 | #endif /* CONFIG_IA64 */ | ||
381 | |||
382 | if (hwif->pci_dev->device == PCI_DEVICE_ID_INTEL_82371MX) { | ||
383 | /* This is a painful system best to let it self tune for now */ | ||
384 | return; | ||
385 | } | ||
386 | |||
387 | hwif->set_pio_mode = &piix_set_pio_mode; | 344 | hwif->set_pio_mode = &piix_set_pio_mode; |
388 | hwif->set_dma_mode = &piix_set_dma_mode; | 345 | hwif->set_dma_mode = &piix_set_dma_mode; |
389 | 346 | ||
390 | hwif->drives[0].autotune = 1; | ||
391 | hwif->drives[1].autotune = 1; | ||
392 | |||
393 | if (!hwif->dma_base) | 347 | if (!hwif->dma_base) |
394 | return; | 348 | return; |
395 | 349 | ||
396 | /* ICHx need to clear the bmdma status for all interrupts */ | ||
397 | if (piix_is_ichx(hwif->pci_dev)) | ||
398 | hwif->ide_dma_clear_irq = &piix_dma_clear_irq; | ||
399 | |||
400 | hwif->atapi_dma = 1; | ||
401 | |||
402 | hwif->ultra_mask = hwif->cds->udma_mask; | ||
403 | hwif->mwdma_mask = 0x06; | ||
404 | hwif->swdma_mask = 0x04; | ||
405 | |||
406 | if (hwif->ultra_mask & 0x78) { | 350 | if (hwif->ultra_mask & 0x78) { |
407 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 351 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
408 | hwif->cbl = piix_cable_detect(hwif); | 352 | hwif->cbl = piix_cable_detect(hwif); |
@@ -412,21 +356,49 @@ static void __devinit init_hwif_piix(ide_hwif_t *hwif) | |||
412 | hwif->ultra_mask = hwif->mwdma_mask = hwif->swdma_mask = 0; | 356 | hwif->ultra_mask = hwif->mwdma_mask = hwif->swdma_mask = 0; |
413 | } | 357 | } |
414 | 358 | ||
359 | static void __devinit init_hwif_ich(ide_hwif_t *hwif) | ||
360 | { | ||
361 | init_hwif_piix(hwif); | ||
362 | |||
363 | /* ICHx need to clear the BMDMA status for all interrupts */ | ||
364 | if (hwif->dma_base) | ||
365 | hwif->ide_dma_clear_irq = &piix_dma_clear_irq; | ||
366 | } | ||
367 | |||
368 | #ifndef CONFIG_IA64 | ||
369 | #define IDE_HFLAGS_PIIX (IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_BOOTABLE) | ||
370 | #else | ||
371 | #define IDE_HFLAGS_PIIX IDE_HFLAG_BOOTABLE | ||
372 | #endif | ||
373 | |||
415 | #define DECLARE_PIIX_DEV(name_str, udma) \ | 374 | #define DECLARE_PIIX_DEV(name_str, udma) \ |
416 | { \ | 375 | { \ |
417 | .name = name_str, \ | 376 | .name = name_str, \ |
418 | .init_chipset = init_chipset_piix, \ | ||
419 | .init_hwif = init_hwif_piix, \ | 377 | .init_hwif = init_hwif_piix, \ |
420 | .autodma = AUTODMA, \ | ||
421 | .enablebits = {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, \ | 378 | .enablebits = {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, \ |
422 | .bootable = ON_BOARD, \ | 379 | .host_flags = IDE_HFLAGS_PIIX, \ |
423 | .pio_mask = ATA_PIO4, \ | 380 | .pio_mask = ATA_PIO4, \ |
381 | .swdma_mask = ATA_SWDMA2_ONLY, \ | ||
382 | .mwdma_mask = ATA_MWDMA12_ONLY, \ | ||
424 | .udma_mask = udma, \ | 383 | .udma_mask = udma, \ |
425 | } | 384 | } |
426 | 385 | ||
427 | static ide_pci_device_t piix_pci_info[] __devinitdata = { | 386 | #define DECLARE_ICH_DEV(name_str, udma) \ |
428 | /* 0 */ DECLARE_PIIX_DEV("PIIXa", 0x00), /* no udma */ | 387 | { \ |
429 | /* 1 */ DECLARE_PIIX_DEV("PIIXb", 0x00), /* no udma */ | 388 | .name = name_str, \ |
389 | .init_chipset = init_chipset_ich, \ | ||
390 | .init_hwif = init_hwif_ich, \ | ||
391 | .enablebits = {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, \ | ||
392 | .host_flags = IDE_HFLAGS_PIIX, \ | ||
393 | .pio_mask = ATA_PIO4, \ | ||
394 | .swdma_mask = ATA_SWDMA2_ONLY, \ | ||
395 | .mwdma_mask = ATA_MWDMA12_ONLY, \ | ||
396 | .udma_mask = udma, \ | ||
397 | } | ||
398 | |||
399 | static const struct ide_port_info piix_pci_info[] __devinitdata = { | ||
400 | /* 0 */ DECLARE_PIIX_DEV("PIIXa", 0x00), /* no udma */ | ||
401 | /* 1 */ DECLARE_PIIX_DEV("PIIXb", 0x00), /* no udma */ | ||
430 | 402 | ||
431 | /* 2 */ | 403 | /* 2 */ |
432 | { /* | 404 | { /* |
@@ -435,36 +407,35 @@ static ide_pci_device_t piix_pci_info[] __devinitdata = { | |||
435 | * of the bit 14 of the IDETIM register at offset 0x6c | 407 | * of the bit 14 of the IDETIM register at offset 0x6c |
436 | */ | 408 | */ |
437 | .name = "MPIIX", | 409 | .name = "MPIIX", |
438 | .init_hwif = init_hwif_piix, | ||
439 | .autodma = NODMA, | ||
440 | .enablebits = {{0x6d,0xc0,0x80}, {0x6d,0xc0,0xc0}}, | 410 | .enablebits = {{0x6d,0xc0,0x80}, {0x6d,0xc0,0xc0}}, |
441 | .bootable = ON_BOARD, | 411 | .host_flags = IDE_HFLAG_ISA_PORTS | IDE_HFLAG_NO_DMA | |
442 | .host_flags = IDE_HFLAG_ISA_PORTS, | 412 | IDE_HFLAGS_PIIX, |
443 | .pio_mask = ATA_PIO4, | 413 | .pio_mask = ATA_PIO4, |
414 | /* This is a painful system best to let it self tune for now */ | ||
444 | }, | 415 | }, |
445 | 416 | ||
446 | /* 3 */ DECLARE_PIIX_DEV("PIIX3", 0x00), /* no udma */ | 417 | /* 3 */ DECLARE_PIIX_DEV("PIIX3", 0x00), /* no udma */ |
447 | /* 4 */ DECLARE_PIIX_DEV("PIIX4", 0x07), /* udma0-2 */ | 418 | /* 4 */ DECLARE_PIIX_DEV("PIIX4", ATA_UDMA2), |
448 | /* 5 */ DECLARE_PIIX_DEV("ICH0", 0x07), /* udma0-2 */ | 419 | /* 5 */ DECLARE_ICH_DEV("ICH0", ATA_UDMA2), |
449 | /* 6 */ DECLARE_PIIX_DEV("PIIX4", 0x07), /* udma0-2 */ | 420 | /* 6 */ DECLARE_PIIX_DEV("PIIX4", ATA_UDMA2), |
450 | /* 7 */ DECLARE_PIIX_DEV("ICH", 0x1f), /* udma0-4 */ | 421 | /* 7 */ DECLARE_ICH_DEV("ICH", ATA_UDMA4), |
451 | /* 8 */ DECLARE_PIIX_DEV("PIIX4", 0x1f), /* udma0-4 */ | 422 | /* 8 */ DECLARE_PIIX_DEV("PIIX4", ATA_UDMA4), |
452 | /* 9 */ DECLARE_PIIX_DEV("PIIX4", 0x07), /* udma0-2 */ | 423 | /* 9 */ DECLARE_PIIX_DEV("PIIX4", ATA_UDMA2), |
453 | /* 10 */ DECLARE_PIIX_DEV("ICH2", 0x3f), /* udma0-5 */ | 424 | /* 10 */ DECLARE_ICH_DEV("ICH2", ATA_UDMA5), |
454 | /* 11 */ DECLARE_PIIX_DEV("ICH2M", 0x3f), /* udma0-5 */ | 425 | /* 11 */ DECLARE_ICH_DEV("ICH2M", ATA_UDMA5), |
455 | /* 12 */ DECLARE_PIIX_DEV("ICH3M", 0x3f), /* udma0-5 */ | 426 | /* 12 */ DECLARE_ICH_DEV("ICH3M", ATA_UDMA5), |
456 | /* 13 */ DECLARE_PIIX_DEV("ICH3", 0x3f), /* udma0-5 */ | 427 | /* 13 */ DECLARE_ICH_DEV("ICH3", ATA_UDMA5), |
457 | /* 14 */ DECLARE_PIIX_DEV("ICH4", 0x3f), /* udma0-5 */ | 428 | /* 14 */ DECLARE_ICH_DEV("ICH4", ATA_UDMA5), |
458 | /* 15 */ DECLARE_PIIX_DEV("ICH5", 0x3f), /* udma0-5 */ | 429 | /* 15 */ DECLARE_ICH_DEV("ICH5", ATA_UDMA5), |
459 | /* 16 */ DECLARE_PIIX_DEV("C-ICH", 0x3f), /* udma0-5 */ | 430 | /* 16 */ DECLARE_ICH_DEV("C-ICH", ATA_UDMA5), |
460 | /* 17 */ DECLARE_PIIX_DEV("ICH4", 0x3f), /* udma0-5 */ | 431 | /* 17 */ DECLARE_ICH_DEV("ICH4", ATA_UDMA5), |
461 | /* 18 */ DECLARE_PIIX_DEV("ICH5-SATA", 0x3f), /* udma0-5 */ | 432 | /* 18 */ DECLARE_ICH_DEV("ICH5-SATA", ATA_UDMA5), |
462 | /* 19 */ DECLARE_PIIX_DEV("ICH5", 0x3f), /* udma0-5 */ | 433 | /* 19 */ DECLARE_ICH_DEV("ICH5", ATA_UDMA5), |
463 | /* 20 */ DECLARE_PIIX_DEV("ICH6", 0x3f), /* udma0-5 */ | 434 | /* 20 */ DECLARE_ICH_DEV("ICH6", ATA_UDMA5), |
464 | /* 21 */ DECLARE_PIIX_DEV("ICH7", 0x3f), /* udma0-5 */ | 435 | /* 21 */ DECLARE_ICH_DEV("ICH7", ATA_UDMA5), |
465 | /* 22 */ DECLARE_PIIX_DEV("ICH4", 0x3f), /* udma0-5 */ | 436 | /* 22 */ DECLARE_ICH_DEV("ICH4", ATA_UDMA5), |
466 | /* 23 */ DECLARE_PIIX_DEV("ESB2", 0x3f), /* udma0-5 */ | 437 | /* 23 */ DECLARE_ICH_DEV("ESB2", ATA_UDMA5), |
467 | /* 24 */ DECLARE_PIIX_DEV("ICH8M", 0x3f), /* udma0-5 */ | 438 | /* 24 */ DECLARE_ICH_DEV("ICH8M", ATA_UDMA5), |
468 | }; | 439 | }; |
469 | 440 | ||
470 | /** | 441 | /** |
@@ -478,9 +449,7 @@ static ide_pci_device_t piix_pci_info[] __devinitdata = { | |||
478 | 449 | ||
479 | static int __devinit piix_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 450 | static int __devinit piix_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
480 | { | 451 | { |
481 | ide_pci_device_t *d = &piix_pci_info[id->driver_data]; | 452 | return ide_setup_pci_device(dev, &piix_pci_info[id->driver_data]); |
482 | |||
483 | return ide_setup_pci_device(dev, d); | ||
484 | } | 453 | } |
485 | 454 | ||
486 | /** | 455 | /** |
diff --git a/drivers/ide/pci/rz1000.c b/drivers/ide/pci/rz1000.c index 3f506e8d44e..6b10ae260fa 100644 --- a/drivers/ide/pci/rz1000.c +++ b/drivers/ide/pci/rz1000.c | |||
@@ -35,13 +35,13 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif) | |||
35 | u16 reg; | 35 | u16 reg; |
36 | struct pci_dev *dev = hwif->pci_dev; | 36 | struct pci_dev *dev = hwif->pci_dev; |
37 | 37 | ||
38 | hwif->chipset = ide_rz1000; | ||
39 | if (!pci_read_config_word (dev, 0x40, ®) && | 38 | if (!pci_read_config_word (dev, 0x40, ®) && |
40 | !pci_write_config_word(dev, 0x40, reg & 0xdfff)) { | 39 | !pci_write_config_word(dev, 0x40, reg & 0xdfff)) { |
41 | printk(KERN_INFO "%s: disabled chipset read-ahead " | 40 | printk(KERN_INFO "%s: disabled chipset read-ahead " |
42 | "(buggy RZ1000/RZ1001)\n", hwif->name); | 41 | "(buggy RZ1000/RZ1001)\n", hwif->name); |
43 | } else { | 42 | } else { |
44 | hwif->serialized = 1; | 43 | if (hwif->mate) |
44 | hwif->mate->serialized = hwif->serialized = 1; | ||
45 | hwif->drives[0].no_unmask = 1; | 45 | hwif->drives[0].no_unmask = 1; |
46 | hwif->drives[1].no_unmask = 1; | 46 | hwif->drives[1].no_unmask = 1; |
47 | printk(KERN_INFO "%s: serialized, disabled unmasking " | 47 | printk(KERN_INFO "%s: serialized, disabled unmasking " |
@@ -49,11 +49,11 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif) | |||
49 | } | 49 | } |
50 | } | 50 | } |
51 | 51 | ||
52 | static ide_pci_device_t rz1000_chipset __devinitdata = { | 52 | static const struct ide_port_info rz1000_chipset __devinitdata = { |
53 | .name = "RZ100x", | 53 | .name = "RZ100x", |
54 | .init_hwif = init_hwif_rz1000, | 54 | .init_hwif = init_hwif_rz1000, |
55 | .autodma = NODMA, | 55 | .chipset = ide_rz1000, |
56 | .bootable = ON_BOARD, | 56 | .host_flags = IDE_HFLAG_NO_DMA | IDE_HFLAG_BOOTABLE, |
57 | }; | 57 | }; |
58 | 58 | ||
59 | static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 59 | static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c index 54c5c98a2e2..d2c8b5524f2 100644 --- a/drivers/ide/pci/sc1200.c +++ b/drivers/ide/pci/sc1200.c | |||
@@ -362,33 +362,26 @@ static int sc1200_resume (struct pci_dev *dev) | |||
362 | */ | 362 | */ |
363 | static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif) | 363 | static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif) |
364 | { | 364 | { |
365 | if (hwif->mate) | ||
366 | hwif->serialized = hwif->mate->serialized = 1; | ||
367 | |||
368 | hwif->set_pio_mode = &sc1200_set_pio_mode; | 365 | hwif->set_pio_mode = &sc1200_set_pio_mode; |
369 | hwif->set_dma_mode = &sc1200_set_dma_mode; | 366 | hwif->set_dma_mode = &sc1200_set_dma_mode; |
370 | 367 | ||
371 | hwif->drives[0].autotune = 1; | ||
372 | hwif->drives[1].autotune = 1; | ||
373 | |||
374 | if (hwif->dma_base == 0) | 368 | if (hwif->dma_base == 0) |
375 | return; | 369 | return; |
376 | 370 | ||
377 | hwif->udma_filter = sc1200_udma_filter; | 371 | hwif->udma_filter = sc1200_udma_filter; |
378 | hwif->ide_dma_end = &sc1200_ide_dma_end; | 372 | hwif->ide_dma_end = &sc1200_ide_dma_end; |
379 | |||
380 | hwif->atapi_dma = 1; | ||
381 | hwif->ultra_mask = 0x07; | ||
382 | hwif->mwdma_mask = 0x07; | ||
383 | } | 373 | } |
384 | 374 | ||
385 | static ide_pci_device_t sc1200_chipset __devinitdata = { | 375 | static const struct ide_port_info sc1200_chipset __devinitdata = { |
386 | .name = "SC1200", | 376 | .name = "SC1200", |
387 | .init_hwif = init_hwif_sc1200, | 377 | .init_hwif = init_hwif_sc1200, |
388 | .autodma = AUTODMA, | 378 | .host_flags = IDE_HFLAG_SERIALIZE | |
389 | .bootable = ON_BOARD, | 379 | IDE_HFLAG_POST_SET_MODE | |
390 | .host_flags = IDE_HFLAG_ABUSE_DMA_MODES | IDE_HFLAG_POST_SET_MODE, | 380 | IDE_HFLAG_ABUSE_DMA_MODES | |
381 | IDE_HFLAG_BOOTABLE, | ||
391 | .pio_mask = ATA_PIO4, | 382 | .pio_mask = ATA_PIO4, |
383 | .mwdma_mask = ATA_MWDMA2, | ||
384 | .udma_mask = ATA_UDMA2, | ||
392 | }; | 385 | }; |
393 | 386 | ||
394 | static int __devinit sc1200_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 387 | static int __devinit sc1200_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
diff --git a/drivers/ide/pci/scc_pata.c b/drivers/ide/pci/scc_pata.c index bd4c1d3070e..ebb7132b9b8 100644 --- a/drivers/ide/pci/scc_pata.c +++ b/drivers/ide/pci/scc_pata.c | |||
@@ -472,7 +472,7 @@ static u8 scc_udma_filter(ide_drive_t *drive) | |||
472 | if ((drive->media != ide_disk) && (mask & 0xE0)) { | 472 | if ((drive->media != ide_disk) && (mask & 0xE0)) { |
473 | printk(KERN_INFO "%s: limit %s to UDMA4\n", | 473 | printk(KERN_INFO "%s: limit %s to UDMA4\n", |
474 | SCC_PATA_NAME, drive->name); | 474 | SCC_PATA_NAME, drive->name); |
475 | mask = 0x1F; | 475 | mask = ATA_UDMA4; |
476 | } | 476 | } |
477 | 477 | ||
478 | return mask; | 478 | return mask; |
@@ -538,12 +538,13 @@ static int setup_mmio_scc (struct pci_dev *dev, const char *name) | |||
538 | /** | 538 | /** |
539 | * init_setup_scc - set up an SCC PATA Controller | 539 | * init_setup_scc - set up an SCC PATA Controller |
540 | * @dev: PCI device | 540 | * @dev: PCI device |
541 | * @d: IDE PCI device | 541 | * @d: IDE port info |
542 | * | 542 | * |
543 | * Perform the initial set up for this device. | 543 | * Perform the initial set up for this device. |
544 | */ | 544 | */ |
545 | 545 | ||
546 | static int __devinit init_setup_scc(struct pci_dev *dev, ide_pci_device_t *d) | 546 | static int __devinit init_setup_scc(struct pci_dev *dev, |
547 | const struct ide_port_info *d) | ||
547 | { | 548 | { |
548 | unsigned long ctl_base; | 549 | unsigned long ctl_base; |
549 | unsigned long dma_base; | 550 | unsigned long dma_base; |
@@ -683,17 +684,10 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif) | |||
683 | hwif->ide_dma_test_irq = scc_dma_test_irq; | 684 | hwif->ide_dma_test_irq = scc_dma_test_irq; |
684 | hwif->udma_filter = scc_udma_filter; | 685 | hwif->udma_filter = scc_udma_filter; |
685 | 686 | ||
686 | hwif->drives[0].autotune = IDE_TUNE_AUTO; | 687 | if (in_be32((void __iomem *)(hwif->config_data + 0xff0)) & CCKCTRL_ATACLKOEN) |
687 | hwif->drives[1].autotune = IDE_TUNE_AUTO; | 688 | hwif->ultra_mask = ATA_UDMA6; /* 133MHz */ |
688 | 689 | else | |
689 | if (in_be32((void __iomem *)(hwif->config_data + 0xff0)) & CCKCTRL_ATACLKOEN) { | 690 | hwif->ultra_mask = ATA_UDMA5; /* 100MHz */ |
690 | hwif->ultra_mask = 0x7f; /* 133MHz */ | ||
691 | } else { | ||
692 | hwif->ultra_mask = 0x3f; /* 100MHz */ | ||
693 | } | ||
694 | hwif->mwdma_mask = 0x00; | ||
695 | hwif->swdma_mask = 0x00; | ||
696 | hwif->atapi_dma = 1; | ||
697 | 691 | ||
698 | /* we support 80c cable only. */ | 692 | /* we support 80c cable only. */ |
699 | hwif->cbl = ATA_CBL_PATA80; | 693 | hwif->cbl = ATA_CBL_PATA80; |
@@ -702,16 +696,14 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif) | |||
702 | #define DECLARE_SCC_DEV(name_str) \ | 696 | #define DECLARE_SCC_DEV(name_str) \ |
703 | { \ | 697 | { \ |
704 | .name = name_str, \ | 698 | .name = name_str, \ |
705 | .init_setup = init_setup_scc, \ | ||
706 | .init_iops = init_iops_scc, \ | 699 | .init_iops = init_iops_scc, \ |
707 | .init_hwif = init_hwif_scc, \ | 700 | .init_hwif = init_hwif_scc, \ |
708 | .autodma = AUTODMA, \ | 701 | .host_flags = IDE_HFLAG_SINGLE | \ |
709 | .bootable = ON_BOARD, \ | 702 | IDE_HFLAG_BOOTABLE, \ |
710 | .host_flags = IDE_HFLAG_SINGLE, \ | ||
711 | .pio_mask = ATA_PIO4, \ | 703 | .pio_mask = ATA_PIO4, \ |
712 | } | 704 | } |
713 | 705 | ||
714 | static ide_pci_device_t scc_chipsets[] __devinitdata = { | 706 | static const struct ide_port_info scc_chipsets[] __devinitdata = { |
715 | /* 0 */ DECLARE_SCC_DEV("sccIDE"), | 707 | /* 0 */ DECLARE_SCC_DEV("sccIDE"), |
716 | }; | 708 | }; |
717 | 709 | ||
@@ -726,8 +718,7 @@ static ide_pci_device_t scc_chipsets[] __devinitdata = { | |||
726 | 718 | ||
727 | static int __devinit scc_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 719 | static int __devinit scc_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
728 | { | 720 | { |
729 | ide_pci_device_t *d = &scc_chipsets[id->driver_data]; | 721 | return init_setup_scc(dev, &scc_chipsets[id->driver_data]); |
730 | return d->init_setup(dev, d); | ||
731 | } | 722 | } |
732 | 723 | ||
733 | /** | 724 | /** |
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index d3ffc52e22a..a7280311357 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c | |||
@@ -158,13 +158,6 @@ static void svwks_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
158 | 158 | ||
159 | u8 ultra_enable = 0, ultra_timing = 0, dma_timing = 0; | 159 | u8 ultra_enable = 0, ultra_timing = 0, dma_timing = 0; |
160 | 160 | ||
161 | /* If we are about to put a disk into UDMA mode we screwed up. | ||
162 | Our code assumes we never _ever_ do this on an OSB4 */ | ||
163 | |||
164 | if(dev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4 && | ||
165 | drive->media == ide_disk && speed >= XFER_UDMA_0) | ||
166 | BUG(); | ||
167 | |||
168 | pci_read_config_byte(dev, (0x56|hwif->channel), &ultra_timing); | 161 | pci_read_config_byte(dev, (0x56|hwif->channel), &ultra_timing); |
169 | pci_read_config_byte(dev, 0x54, &ultra_enable); | 162 | pci_read_config_byte(dev, 0x54, &ultra_enable); |
170 | 163 | ||
@@ -360,23 +353,10 @@ static u8 __devinit ata66_svwks(ide_hwif_t *hwif) | |||
360 | 353 | ||
361 | static void __devinit init_hwif_svwks (ide_hwif_t *hwif) | 354 | static void __devinit init_hwif_svwks (ide_hwif_t *hwif) |
362 | { | 355 | { |
363 | if (!hwif->irq) | ||
364 | hwif->irq = hwif->channel ? 15 : 14; | ||
365 | |||
366 | hwif->set_pio_mode = &svwks_set_pio_mode; | 356 | hwif->set_pio_mode = &svwks_set_pio_mode; |
367 | hwif->set_dma_mode = &svwks_set_dma_mode; | 357 | hwif->set_dma_mode = &svwks_set_dma_mode; |
368 | hwif->udma_filter = &svwks_udma_filter; | 358 | hwif->udma_filter = &svwks_udma_filter; |
369 | 359 | ||
370 | hwif->atapi_dma = 1; | ||
371 | |||
372 | if (hwif->pci_dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) | ||
373 | hwif->ultra_mask = 0x3f; | ||
374 | |||
375 | hwif->mwdma_mask = 0x07; | ||
376 | |||
377 | hwif->drives[0].autotune = 1; | ||
378 | hwif->drives[1].autotune = 1; | ||
379 | |||
380 | if (!hwif->dma_base) | 360 | if (!hwif->dma_base) |
381 | return; | 361 | return; |
382 | 362 | ||
@@ -386,72 +366,49 @@ static void __devinit init_hwif_svwks (ide_hwif_t *hwif) | |||
386 | } | 366 | } |
387 | } | 367 | } |
388 | 368 | ||
389 | static int __devinit init_setup_svwks (struct pci_dev *dev, ide_pci_device_t *d) | 369 | static const struct ide_port_info serverworks_chipsets[] __devinitdata = { |
390 | { | ||
391 | return ide_setup_pci_device(dev, d); | ||
392 | } | ||
393 | |||
394 | static int __devinit init_setup_csb6 (struct pci_dev *dev, ide_pci_device_t *d) | ||
395 | { | ||
396 | if (!(PCI_FUNC(dev->devfn) & 1)) { | ||
397 | d->bootable = NEVER_BOARD; | ||
398 | if (dev->resource[0].start == 0x01f1) | ||
399 | d->bootable = ON_BOARD; | ||
400 | } | ||
401 | |||
402 | if ((dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE || | ||
403 | dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2) && | ||
404 | (!(PCI_FUNC(dev->devfn) & 1))) | ||
405 | d->host_flags |= IDE_HFLAG_SINGLE; | ||
406 | else | ||
407 | d->host_flags &= ~IDE_HFLAG_SINGLE; | ||
408 | |||
409 | return ide_setup_pci_device(dev, d); | ||
410 | } | ||
411 | |||
412 | static ide_pci_device_t serverworks_chipsets[] __devinitdata = { | ||
413 | { /* 0 */ | 370 | { /* 0 */ |
414 | .name = "SvrWks OSB4", | 371 | .name = "SvrWks OSB4", |
415 | .init_setup = init_setup_svwks, | ||
416 | .init_chipset = init_chipset_svwks, | 372 | .init_chipset = init_chipset_svwks, |
417 | .init_hwif = init_hwif_svwks, | 373 | .init_hwif = init_hwif_svwks, |
418 | .autodma = AUTODMA, | 374 | .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_BOOTABLE, |
419 | .bootable = ON_BOARD, | ||
420 | .pio_mask = ATA_PIO4, | 375 | .pio_mask = ATA_PIO4, |
376 | .mwdma_mask = ATA_MWDMA2, | ||
377 | .udma_mask = 0x00, /* UDMA is problematic on OSB4 */ | ||
421 | },{ /* 1 */ | 378 | },{ /* 1 */ |
422 | .name = "SvrWks CSB5", | 379 | .name = "SvrWks CSB5", |
423 | .init_setup = init_setup_svwks, | ||
424 | .init_chipset = init_chipset_svwks, | 380 | .init_chipset = init_chipset_svwks, |
425 | .init_hwif = init_hwif_svwks, | 381 | .init_hwif = init_hwif_svwks, |
426 | .autodma = AUTODMA, | 382 | .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_BOOTABLE, |
427 | .bootable = ON_BOARD, | ||
428 | .pio_mask = ATA_PIO4, | 383 | .pio_mask = ATA_PIO4, |
384 | .mwdma_mask = ATA_MWDMA2, | ||
385 | .udma_mask = ATA_UDMA5, | ||
429 | },{ /* 2 */ | 386 | },{ /* 2 */ |
430 | .name = "SvrWks CSB6", | 387 | .name = "SvrWks CSB6", |
431 | .init_setup = init_setup_csb6, | ||
432 | .init_chipset = init_chipset_svwks, | 388 | .init_chipset = init_chipset_svwks, |
433 | .init_hwif = init_hwif_svwks, | 389 | .init_hwif = init_hwif_svwks, |
434 | .autodma = AUTODMA, | 390 | .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_BOOTABLE, |
435 | .bootable = ON_BOARD, | ||
436 | .pio_mask = ATA_PIO4, | 391 | .pio_mask = ATA_PIO4, |
392 | .mwdma_mask = ATA_MWDMA2, | ||
393 | .udma_mask = ATA_UDMA5, | ||
437 | },{ /* 3 */ | 394 | },{ /* 3 */ |
438 | .name = "SvrWks CSB6", | 395 | .name = "SvrWks CSB6", |
439 | .init_setup = init_setup_csb6, | ||
440 | .init_chipset = init_chipset_svwks, | 396 | .init_chipset = init_chipset_svwks, |
441 | .init_hwif = init_hwif_svwks, | 397 | .init_hwif = init_hwif_svwks, |
442 | .autodma = AUTODMA, | 398 | .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_SINGLE | |
443 | .bootable = ON_BOARD, | 399 | IDE_HFLAG_BOOTABLE, |
444 | .host_flags = IDE_HFLAG_SINGLE, | ||
445 | .pio_mask = ATA_PIO4, | 400 | .pio_mask = ATA_PIO4, |
401 | .mwdma_mask = ATA_MWDMA2, | ||
402 | .udma_mask = ATA_UDMA5, | ||
446 | },{ /* 4 */ | 403 | },{ /* 4 */ |
447 | .name = "SvrWks HT1000", | 404 | .name = "SvrWks HT1000", |
448 | .init_setup = init_setup_svwks, | ||
449 | .init_chipset = init_chipset_svwks, | 405 | .init_chipset = init_chipset_svwks, |
450 | .init_hwif = init_hwif_svwks, | 406 | .init_hwif = init_hwif_svwks, |
451 | .autodma = AUTODMA, | 407 | .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_SINGLE | |
452 | .bootable = ON_BOARD, | 408 | IDE_HFLAG_BOOTABLE, |
453 | .host_flags = IDE_HFLAG_SINGLE, | ||
454 | .pio_mask = ATA_PIO4, | 409 | .pio_mask = ATA_PIO4, |
410 | .mwdma_mask = ATA_MWDMA2, | ||
411 | .udma_mask = ATA_UDMA5, | ||
455 | } | 412 | } |
456 | }; | 413 | }; |
457 | 414 | ||
@@ -466,9 +423,21 @@ static ide_pci_device_t serverworks_chipsets[] __devinitdata = { | |||
466 | 423 | ||
467 | static int __devinit svwks_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 424 | static int __devinit svwks_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
468 | { | 425 | { |
469 | ide_pci_device_t *d = &serverworks_chipsets[id->driver_data]; | 426 | struct ide_port_info d; |
427 | u8 idx = id->driver_data; | ||
428 | |||
429 | d = serverworks_chipsets[idx]; | ||
430 | |||
431 | if (idx == 2 || idx == 3) { | ||
432 | if ((PCI_FUNC(dev->devfn) & 1) == 0) { | ||
433 | if (pci_resource_start(dev, 0) != 0x01f1) | ||
434 | d.host_flags &= ~IDE_HFLAG_BOOTABLE; | ||
435 | d.host_flags |= IDE_HFLAG_SINGLE; | ||
436 | } else | ||
437 | d.host_flags &= ~IDE_HFLAG_SINGLE; | ||
438 | } | ||
470 | 439 | ||
471 | return d->init_setup(dev, d); | 440 | return ide_setup_pci_device(dev, &d); |
472 | } | 441 | } |
473 | 442 | ||
474 | static const struct pci_device_id svwks_pci_tbl[] = { | 443 | static const struct pci_device_id svwks_pci_tbl[] = { |
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c index 9a9474f534e..de820aa58cd 100644 --- a/drivers/ide/pci/sgiioc4.c +++ b/drivers/ide/pci/sgiioc4.c | |||
@@ -592,8 +592,7 @@ ide_init_sgiioc4(ide_hwif_t * hwif) | |||
592 | if (hwif->dma_base == 0) | 592 | if (hwif->dma_base == 0) |
593 | return; | 593 | return; |
594 | 594 | ||
595 | hwif->atapi_dma = 1; | 595 | hwif->mwdma_mask = ATA_MWDMA2_ONLY; |
596 | hwif->mwdma_mask = 0x04; | ||
597 | 596 | ||
598 | hwif->dma_setup = &sgiioc4_ide_dma_setup; | 597 | hwif->dma_setup = &sgiioc4_ide_dma_setup; |
599 | hwif->dma_start = &sgiioc4_ide_dma_start; | 598 | hwif->dma_start = &sgiioc4_ide_dma_start; |
@@ -615,6 +614,7 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
615 | void __iomem *virt_base; | 614 | void __iomem *virt_base; |
616 | ide_hwif_t *hwif; | 615 | ide_hwif_t *hwif; |
617 | int h; | 616 | int h; |
617 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
618 | 618 | ||
619 | /* | 619 | /* |
620 | * Find an empty HWIF; if none available, return -ENOMEM. | 620 | * Find an empty HWIF; if none available, return -ENOMEM. |
@@ -655,10 +655,12 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
655 | } | 655 | } |
656 | 656 | ||
657 | if (hwif->io_ports[IDE_DATA_OFFSET] != cmd_base) { | 657 | if (hwif->io_ports[IDE_DATA_OFFSET] != cmd_base) { |
658 | hw_regs_t hw; | ||
659 | |||
658 | /* Initialize the IO registers */ | 660 | /* Initialize the IO registers */ |
659 | sgiioc4_init_hwif_ports(&hwif->hw, cmd_base, ctl, irqport); | 661 | memset(&hw, 0, sizeof(hw)); |
660 | memcpy(hwif->io_ports, hwif->hw.io_ports, | 662 | sgiioc4_init_hwif_ports(&hw, cmd_base, ctl, irqport); |
661 | sizeof (hwif->io_ports)); | 663 | memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports)); |
662 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; | 664 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; |
663 | } | 665 | } |
664 | 666 | ||
@@ -680,11 +682,10 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
680 | 682 | ||
681 | ide_init_sgiioc4(hwif); | 683 | ide_init_sgiioc4(hwif); |
682 | 684 | ||
683 | if (probe_hwif_init(hwif)) | 685 | idx[0] = hwif->index; |
684 | return -EIO; | ||
685 | 686 | ||
686 | /* Create /proc/ide entries */ | 687 | if (ide_device_add(idx)) |
687 | ide_proc_register_port(hwif); | 688 | return -EIO; |
688 | 689 | ||
689 | return 0; | 690 | return 0; |
690 | } | 691 | } |
@@ -692,14 +693,12 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
692 | static unsigned int __devinit | 693 | static unsigned int __devinit |
693 | pci_init_sgiioc4(struct pci_dev *dev) | 694 | pci_init_sgiioc4(struct pci_dev *dev) |
694 | { | 695 | { |
695 | unsigned int class_rev; | ||
696 | int ret; | 696 | int ret; |
697 | 697 | ||
698 | pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev); | ||
699 | class_rev &= 0xff; | ||
700 | printk(KERN_INFO "%s: IDE controller at PCI slot %s, revision %d\n", | 698 | printk(KERN_INFO "%s: IDE controller at PCI slot %s, revision %d\n", |
701 | DRV_NAME, pci_name(dev), class_rev); | 699 | DRV_NAME, pci_name(dev), dev->revision); |
702 | if (class_rev < IOC4_SUPPORTED_FIRMWARE_REV) { | 700 | |
701 | if (dev->revision < IOC4_SUPPORTED_FIRMWARE_REV) { | ||
703 | printk(KERN_ERR "Skipping %s IDE controller in slot %s: " | 702 | printk(KERN_ERR "Skipping %s IDE controller in slot %s: " |
704 | "firmware is obsolete - please upgrade to " | 703 | "firmware is obsolete - please upgrade to " |
705 | "revision46 or higher\n", | 704 | "revision46 or higher\n", |
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index 85d0afd00e6..6d99441c605 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/siimage.c Version 1.16 Jul 13 2007 | 2 | * linux/drivers/ide/pci/siimage.c Version 1.18 Oct 18 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 2001-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 2001-2002 Andre Hedrick <andre@linux-ide.org> |
5 | * Copyright (C) 2003 Red Hat <alan@redhat.com> | 5 | * Copyright (C) 2003 Red Hat <alan@redhat.com> |
@@ -26,7 +26,7 @@ | |||
26 | * | 26 | * |
27 | * If you have strange problems with nVidia chipset systems please | 27 | * If you have strange problems with nVidia chipset systems please |
28 | * see the SI support documentation and update your system BIOS | 28 | * see the SI support documentation and update your system BIOS |
29 | * if neccessary | 29 | * if necessary |
30 | * | 30 | * |
31 | * The Dell DRAC4 has some interesting features including effectively hot | 31 | * The Dell DRAC4 has some interesting features including effectively hot |
32 | * unplugging/replugging the virtual CD interface when the DRAC is reset. | 32 | * unplugging/replugging the virtual CD interface when the DRAC is reset. |
@@ -57,8 +57,8 @@ | |||
57 | 57 | ||
58 | static int pdev_is_sata(struct pci_dev *pdev) | 58 | static int pdev_is_sata(struct pci_dev *pdev) |
59 | { | 59 | { |
60 | switch(pdev->device) | 60 | #ifdef CONFIG_BLK_DEV_IDE_SATA |
61 | { | 61 | switch(pdev->device) { |
62 | case PCI_DEVICE_ID_SII_3112: | 62 | case PCI_DEVICE_ID_SII_3112: |
63 | case PCI_DEVICE_ID_SII_1210SA: | 63 | case PCI_DEVICE_ID_SII_1210SA: |
64 | return 1; | 64 | return 1; |
@@ -66,9 +66,10 @@ static int pdev_is_sata(struct pci_dev *pdev) | |||
66 | return 0; | 66 | return 0; |
67 | } | 67 | } |
68 | BUG(); | 68 | BUG(); |
69 | #endif | ||
69 | return 0; | 70 | return 0; |
70 | } | 71 | } |
71 | 72 | ||
72 | /** | 73 | /** |
73 | * is_sata - check if hwif is SATA | 74 | * is_sata - check if hwif is SATA |
74 | * @hwif: interface to check | 75 | * @hwif: interface to check |
@@ -136,7 +137,7 @@ static inline unsigned long siimage_seldev(ide_drive_t *drive, int r) | |||
136 | * SI3112 SATA controller life is a bit simpler. | 137 | * SI3112 SATA controller life is a bit simpler. |
137 | */ | 138 | */ |
138 | 139 | ||
139 | static u8 sil_udma_filter(ide_drive_t *drive) | 140 | static u8 sil_pata_udma_filter(ide_drive_t *drive) |
140 | { | 141 | { |
141 | ide_hwif_t *hwif = drive->hwif; | 142 | ide_hwif_t *hwif = drive->hwif; |
142 | unsigned long base = (unsigned long) hwif->hwif_data; | 143 | unsigned long base = (unsigned long) hwif->hwif_data; |
@@ -147,23 +148,23 @@ static u8 sil_udma_filter(ide_drive_t *drive) | |||
147 | else | 148 | else |
148 | pci_read_config_byte(hwif->pci_dev, 0x8A, &scsc); | 149 | pci_read_config_byte(hwif->pci_dev, 0x8A, &scsc); |
149 | 150 | ||
150 | if (is_sata(hwif)) { | ||
151 | mask = strstr(drive->id->model, "Maxtor") ? 0x3f : 0x7f; | ||
152 | goto out; | ||
153 | } | ||
154 | |||
155 | if ((scsc & 0x30) == 0x10) /* 133 */ | 151 | if ((scsc & 0x30) == 0x10) /* 133 */ |
156 | mask = 0x7f; | 152 | mask = ATA_UDMA6; |
157 | else if ((scsc & 0x30) == 0x20) /* 2xPCI */ | 153 | else if ((scsc & 0x30) == 0x20) /* 2xPCI */ |
158 | mask = 0x7f; | 154 | mask = ATA_UDMA6; |
159 | else if ((scsc & 0x30) == 0x00) /* 100 */ | 155 | else if ((scsc & 0x30) == 0x00) /* 100 */ |
160 | mask = 0x3f; | 156 | mask = ATA_UDMA5; |
161 | else /* Disabled ? */ | 157 | else /* Disabled ? */ |
162 | BUG(); | 158 | BUG(); |
163 | out: | 159 | |
164 | return mask; | 160 | return mask; |
165 | } | 161 | } |
166 | 162 | ||
163 | static u8 sil_sata_udma_filter(ide_drive_t *drive) | ||
164 | { | ||
165 | return strstr(drive->id->model, "Maxtor") ? ATA_UDMA5 : ATA_UDMA6; | ||
166 | } | ||
167 | |||
167 | /** | 168 | /** |
168 | * sil_set_pio_mode - set host controller for PIO mode | 169 | * sil_set_pio_mode - set host controller for PIO mode |
169 | * @drive: drive | 170 | * @drive: drive |
@@ -180,7 +181,7 @@ static void sil_set_pio_mode(ide_drive_t *drive, u8 pio) | |||
180 | const u16 data_speed[] = { 0x328a, 0x2283, 0x1104, 0x10c3, 0x10c1 }; | 181 | const u16 data_speed[] = { 0x328a, 0x2283, 0x1104, 0x10c3, 0x10c1 }; |
181 | 182 | ||
182 | ide_hwif_t *hwif = HWIF(drive); | 183 | ide_hwif_t *hwif = HWIF(drive); |
183 | ide_drive_t *pair = &hwif->drives[drive->dn ^ 1]; | 184 | ide_drive_t *pair = ide_get_paired_drive(drive); |
184 | u32 speedt = 0; | 185 | u32 speedt = 0; |
185 | u16 speedp = 0; | 186 | u16 speedp = 0; |
186 | unsigned long addr = siimage_seldev(drive, 0x04); | 187 | unsigned long addr = siimage_seldev(drive, 0x04); |
@@ -340,10 +341,11 @@ static int siimage_io_ide_dma_test_irq (ide_drive_t *drive) | |||
340 | static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive) | 341 | static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive) |
341 | { | 342 | { |
342 | ide_hwif_t *hwif = HWIF(drive); | 343 | ide_hwif_t *hwif = HWIF(drive); |
343 | unsigned long base = (unsigned long)hwif->hwif_data; | ||
344 | unsigned long addr = siimage_selreg(hwif, 0x1); | 344 | unsigned long addr = siimage_selreg(hwif, 0x1); |
345 | 345 | ||
346 | if (SATA_ERROR_REG) { | 346 | if (SATA_ERROR_REG) { |
347 | unsigned long base = (unsigned long)hwif->hwif_data; | ||
348 | |||
347 | u32 ext_stat = readl((void __iomem *)(base + 0x10)); | 349 | u32 ext_stat = readl((void __iomem *)(base + 0x10)); |
348 | u8 watchdog = 0; | 350 | u8 watchdog = 0; |
349 | if (ext_stat & ((hwif->channel) ? 0x40 : 0x10)) { | 351 | if (ext_stat & ((hwif->channel) ? 0x40 : 0x10)) { |
@@ -376,7 +378,7 @@ static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive) | |||
376 | } | 378 | } |
377 | 379 | ||
378 | /** | 380 | /** |
379 | * siimage_busproc - bus isolation ioctl | 381 | * sil_sata_busproc - bus isolation IOCTL |
380 | * @drive: drive to isolate/restore | 382 | * @drive: drive to isolate/restore |
381 | * @state: bus state to set | 383 | * @state: bus state to set |
382 | * | 384 | * |
@@ -384,8 +386,8 @@ static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive) | |||
384 | * SATA controller the work required is quite limited, we | 386 | * SATA controller the work required is quite limited, we |
385 | * just have to clean up the statistics | 387 | * just have to clean up the statistics |
386 | */ | 388 | */ |
387 | 389 | ||
388 | static int siimage_busproc (ide_drive_t * drive, int state) | 390 | static int sil_sata_busproc(ide_drive_t * drive, int state) |
389 | { | 391 | { |
390 | ide_hwif_t *hwif = HWIF(drive); | 392 | ide_hwif_t *hwif = HWIF(drive); |
391 | u32 stat_config = 0; | 393 | u32 stat_config = 0; |
@@ -417,14 +419,14 @@ static int siimage_busproc (ide_drive_t * drive, int state) | |||
417 | } | 419 | } |
418 | 420 | ||
419 | /** | 421 | /** |
420 | * siimage_reset_poll - wait for sata reset | 422 | * sil_sata_reset_poll - wait for SATA reset |
421 | * @drive: drive we are resetting | 423 | * @drive: drive we are resetting |
422 | * | 424 | * |
423 | * Poll the SATA phy and see whether it has come back from the dead | 425 | * Poll the SATA phy and see whether it has come back from the dead |
424 | * yet. | 426 | * yet. |
425 | */ | 427 | */ |
426 | 428 | ||
427 | static int siimage_reset_poll (ide_drive_t *drive) | 429 | static int sil_sata_reset_poll(ide_drive_t *drive) |
428 | { | 430 | { |
429 | if (SATA_STATUS_REG) { | 431 | if (SATA_STATUS_REG) { |
430 | ide_hwif_t *hwif = HWIF(drive); | 432 | ide_hwif_t *hwif = HWIF(drive); |
@@ -436,27 +438,22 @@ static int siimage_reset_poll (ide_drive_t *drive) | |||
436 | HWGROUP(drive)->polling = 0; | 438 | HWGROUP(drive)->polling = 0; |
437 | return ide_started; | 439 | return ide_started; |
438 | } | 440 | } |
439 | return 0; | ||
440 | } else { | ||
441 | return 0; | ||
442 | } | 441 | } |
442 | |||
443 | return 0; | ||
443 | } | 444 | } |
444 | 445 | ||
445 | /** | 446 | /** |
446 | * siimage_pre_reset - reset hook | 447 | * sil_sata_pre_reset - reset hook |
447 | * @drive: IDE device being reset | 448 | * @drive: IDE device being reset |
448 | * | 449 | * |
449 | * For the SATA devices we need to handle recalibration/geometry | 450 | * For the SATA devices we need to handle recalibration/geometry |
450 | * differently | 451 | * differently |
451 | */ | 452 | */ |
452 | |||
453 | static void siimage_pre_reset (ide_drive_t *drive) | ||
454 | { | ||
455 | if (drive->media != ide_disk) | ||
456 | return; | ||
457 | 453 | ||
458 | if (is_sata(HWIF(drive))) | 454 | static void sil_sata_pre_reset(ide_drive_t *drive) |
459 | { | 455 | { |
456 | if (drive->media == ide_disk) { | ||
460 | drive->special.b.set_geometry = 0; | 457 | drive->special.b.set_geometry = 0; |
461 | drive->special.b.recalibrate = 0; | 458 | drive->special.b.recalibrate = 0; |
462 | } | 459 | } |
@@ -502,7 +499,6 @@ static void siimage_reset (ide_drive_t *drive) | |||
502 | drive->failures++; | 499 | drive->failures++; |
503 | } | 500 | } |
504 | } | 501 | } |
505 | |||
506 | } | 502 | } |
507 | 503 | ||
508 | /** | 504 | /** |
@@ -640,13 +636,9 @@ static unsigned int setup_mmio_siimage (struct pci_dev *dev, const char *name) | |||
640 | 636 | ||
641 | static unsigned int __devinit init_chipset_siimage(struct pci_dev *dev, const char *name) | 637 | static unsigned int __devinit init_chipset_siimage(struct pci_dev *dev, const char *name) |
642 | { | 638 | { |
643 | u32 class_rev = 0; | 639 | u8 rev = dev->revision, tmpbyte = 0, BA5_EN = 0; |
644 | u8 tmpbyte = 0; | ||
645 | u8 BA5_EN = 0; | ||
646 | 640 | ||
647 | pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev); | 641 | pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, rev ? 1 : 255); |
648 | class_rev &= 0xff; | ||
649 | pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (class_rev) ? 1 : 255); | ||
650 | 642 | ||
651 | pci_read_config_byte(dev, 0x8A, &BA5_EN); | 643 | pci_read_config_byte(dev, 0x8A, &BA5_EN); |
652 | if ((BA5_EN & 0x01) || (pci_resource_start(dev, 5))) { | 644 | if ((BA5_EN & 0x01) || (pci_resource_start(dev, 5))) { |
@@ -762,16 +754,11 @@ static void __devinit init_mmio_iops_siimage(ide_hwif_t *hwif) | |||
762 | hwif->sata_misc[SATA_IEN_OFFSET] = base + 0x148; | 754 | hwif->sata_misc[SATA_IEN_OFFSET] = base + 0x148; |
763 | } | 755 | } |
764 | 756 | ||
765 | hw.irq = hwif->pci_dev->irq; | 757 | memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports)); |
766 | |||
767 | memcpy(&hwif->hw, &hw, sizeof(hw)); | ||
768 | memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports)); | ||
769 | 758 | ||
770 | hwif->irq = hw.irq; | 759 | hwif->irq = dev->irq; |
771 | 760 | ||
772 | base = (unsigned long) addr; | 761 | hwif->dma_base = (unsigned long)addr + (ch ? 0x08 : 0x00); |
773 | |||
774 | hwif->dma_base = base + (ch ? 0x08 : 0x00); | ||
775 | 762 | ||
776 | hwif->mmio = 1; | 763 | hwif->mmio = 1; |
777 | } | 764 | } |
@@ -825,19 +812,14 @@ static void __devinit siimage_fixup(ide_hwif_t *hwif) | |||
825 | 812 | ||
826 | static void __devinit init_iops_siimage(ide_hwif_t *hwif) | 813 | static void __devinit init_iops_siimage(ide_hwif_t *hwif) |
827 | { | 814 | { |
828 | struct pci_dev *dev = hwif->pci_dev; | ||
829 | u32 class_rev = 0; | ||
830 | |||
831 | pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev); | ||
832 | class_rev &= 0xff; | ||
833 | |||
834 | hwif->hwif_data = NULL; | 815 | hwif->hwif_data = NULL; |
835 | 816 | ||
836 | /* Pessimal until we finish probing */ | 817 | /* Pessimal until we finish probing */ |
837 | hwif->rqsize = 15; | 818 | hwif->rqsize = 15; |
838 | 819 | ||
839 | if (pci_get_drvdata(dev) == NULL) | 820 | if (pci_get_drvdata(hwif->pci_dev) == NULL) |
840 | return; | 821 | return; |
822 | |||
841 | init_mmio_iops_siimage(hwif); | 823 | init_mmio_iops_siimage(hwif); |
842 | } | 824 | } |
843 | 825 | ||
@@ -873,34 +855,32 @@ static u8 __devinit ata66_siimage(ide_hwif_t *hwif) | |||
873 | 855 | ||
874 | static void __devinit init_hwif_siimage(ide_hwif_t *hwif) | 856 | static void __devinit init_hwif_siimage(ide_hwif_t *hwif) |
875 | { | 857 | { |
858 | u8 sata = is_sata(hwif); | ||
859 | |||
876 | hwif->resetproc = &siimage_reset; | 860 | hwif->resetproc = &siimage_reset; |
877 | hwif->set_pio_mode = &sil_set_pio_mode; | 861 | hwif->set_pio_mode = &sil_set_pio_mode; |
878 | hwif->set_dma_mode = &sil_set_dma_mode; | 862 | hwif->set_dma_mode = &sil_set_dma_mode; |
879 | hwif->reset_poll = &siimage_reset_poll; | ||
880 | hwif->pre_reset = &siimage_pre_reset; | ||
881 | hwif->udma_filter = &sil_udma_filter; | ||
882 | 863 | ||
883 | if(is_sata(hwif)) { | 864 | if (sata) { |
884 | static int first = 1; | 865 | static int first = 1; |
885 | 866 | ||
886 | hwif->busproc = &siimage_busproc; | 867 | hwif->busproc = &sil_sata_busproc; |
868 | hwif->reset_poll = &sil_sata_reset_poll; | ||
869 | hwif->pre_reset = &sil_sata_pre_reset; | ||
870 | hwif->udma_filter = &sil_sata_udma_filter; | ||
887 | 871 | ||
888 | if (first) { | 872 | if (first) { |
889 | printk(KERN_INFO "siimage: For full SATA support you should use the libata sata_sil module.\n"); | 873 | printk(KERN_INFO "siimage: For full SATA support you should use the libata sata_sil module.\n"); |
890 | first = 0; | 874 | first = 0; |
891 | } | 875 | } |
892 | } | 876 | } else |
893 | 877 | hwif->udma_filter = &sil_pata_udma_filter; | |
894 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | ||
895 | 878 | ||
896 | if (hwif->dma_base == 0) | 879 | if (hwif->dma_base == 0) |
897 | return; | 880 | return; |
898 | 881 | ||
899 | hwif->ultra_mask = 0x7f; | 882 | if (sata) |
900 | hwif->mwdma_mask = 0x07; | 883 | hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA; |
901 | |||
902 | if (!is_sata(hwif)) | ||
903 | hwif->atapi_dma = 1; | ||
904 | 884 | ||
905 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 885 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
906 | hwif->cbl = ata66_siimage(hwif); | 886 | hwif->cbl = ata66_siimage(hwif); |
@@ -919,12 +899,13 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif) | |||
919 | .init_iops = init_iops_siimage, \ | 899 | .init_iops = init_iops_siimage, \ |
920 | .init_hwif = init_hwif_siimage, \ | 900 | .init_hwif = init_hwif_siimage, \ |
921 | .fixup = siimage_fixup, \ | 901 | .fixup = siimage_fixup, \ |
922 | .autodma = AUTODMA, \ | 902 | .host_flags = IDE_HFLAG_BOOTABLE, \ |
923 | .bootable = ON_BOARD, \ | ||
924 | .pio_mask = ATA_PIO4, \ | 903 | .pio_mask = ATA_PIO4, \ |
904 | .mwdma_mask = ATA_MWDMA2, \ | ||
905 | .udma_mask = ATA_UDMA6, \ | ||
925 | } | 906 | } |
926 | 907 | ||
927 | static ide_pci_device_t siimage_chipsets[] __devinitdata = { | 908 | static const struct ide_port_info siimage_chipsets[] __devinitdata = { |
928 | /* 0 */ DECLARE_SII_DEV("SiI680"), | 909 | /* 0 */ DECLARE_SII_DEV("SiI680"), |
929 | /* 1 */ DECLARE_SII_DEV("SiI3112 Serial ATA"), | 910 | /* 1 */ DECLARE_SII_DEV("SiI3112 Serial ATA"), |
930 | /* 2 */ DECLARE_SII_DEV("Adaptec AAR-1210SA") | 911 | /* 2 */ DECLARE_SII_DEV("Adaptec AAR-1210SA") |
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index 5a54e2e20b3..6b7bb53acef 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c | |||
@@ -264,7 +264,7 @@ static void sis_ata133_program_timings(ide_drive_t *drive, const u8 mode) | |||
264 | if (mode >= XFER_MW_DMA_0) { | 264 | if (mode >= XFER_MW_DMA_0) { |
265 | t1 &= ~0x04; /* disable UDMA */ | 265 | t1 &= ~0x04; /* disable UDMA */ |
266 | idx = mode - XFER_MW_DMA_0 + 5; | 266 | idx = mode - XFER_MW_DMA_0 + 5; |
267 | } | 267 | } else |
268 | idx = mode - XFER_PIO_0; | 268 | idx = mode - XFER_PIO_0; |
269 | t1 |= ini_time_value[clk][idx] << 12; | 269 | t1 |= ini_time_value[clk][idx] << 12; |
270 | t1 |= act_time_value[clk][idx] << 16; | 270 | t1 |= act_time_value[clk][idx] << 16; |
@@ -564,38 +564,30 @@ static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif) | |||
564 | { | 564 | { |
565 | u8 udma_rates[] = { 0x00, 0x00, 0x07, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f }; | 565 | u8 udma_rates[] = { 0x00, 0x00, 0x07, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f }; |
566 | 566 | ||
567 | if (!hwif->irq) | ||
568 | hwif->irq = hwif->channel ? 15 : 14; | ||
569 | |||
570 | hwif->set_pio_mode = &sis_set_pio_mode; | 567 | hwif->set_pio_mode = &sis_set_pio_mode; |
571 | hwif->set_dma_mode = &sis_set_dma_mode; | 568 | hwif->set_dma_mode = &sis_set_dma_mode; |
572 | 569 | ||
573 | if (chipset_family >= ATA_133) | 570 | if (chipset_family >= ATA_133) |
574 | hwif->udma_filter = sis5513_ata133_udma_filter; | 571 | hwif->udma_filter = sis5513_ata133_udma_filter; |
575 | 572 | ||
576 | hwif->drives[0].autotune = 1; | ||
577 | hwif->drives[1].autotune = 1; | ||
578 | |||
579 | if (hwif->dma_base == 0) | 573 | if (hwif->dma_base == 0) |
580 | return; | 574 | return; |
581 | 575 | ||
582 | hwif->atapi_dma = 1; | ||
583 | |||
584 | hwif->ultra_mask = udma_rates[chipset_family]; | 576 | hwif->ultra_mask = udma_rates[chipset_family]; |
585 | hwif->mwdma_mask = 0x07; | ||
586 | 577 | ||
587 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 578 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
588 | hwif->cbl = ata66_sis5513(hwif); | 579 | hwif->cbl = ata66_sis5513(hwif); |
589 | } | 580 | } |
590 | 581 | ||
591 | static ide_pci_device_t sis5513_chipset __devinitdata = { | 582 | static const struct ide_port_info sis5513_chipset __devinitdata = { |
592 | .name = "SIS5513", | 583 | .name = "SIS5513", |
593 | .init_chipset = init_chipset_sis5513, | 584 | .init_chipset = init_chipset_sis5513, |
594 | .init_hwif = init_hwif_sis5513, | 585 | .init_hwif = init_hwif_sis5513, |
595 | .autodma = NOAUTODMA, | ||
596 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, | 586 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, |
597 | .bootable = ON_BOARD, | 587 | .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_NO_AUTODMA | |
588 | IDE_HFLAG_BOOTABLE, | ||
598 | .pio_mask = ATA_PIO4, | 589 | .pio_mask = ATA_PIO4, |
590 | .mwdma_mask = ATA_MWDMA2, | ||
599 | }; | 591 | }; |
600 | 592 | ||
601 | static int __devinit sis5513_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 593 | static int __devinit sis5513_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c index 771efb8884c..147d783f752 100644 --- a/drivers/ide/pci/sl82c105.c +++ b/drivers/ide/pci/sl82c105.c | |||
@@ -361,19 +361,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) | |||
361 | hwif->selectproc = &sl82c105_selectproc; | 361 | hwif->selectproc = &sl82c105_selectproc; |
362 | hwif->resetproc = &sl82c105_resetproc; | 362 | hwif->resetproc = &sl82c105_resetproc; |
363 | 363 | ||
364 | /* | ||
365 | * We support 32-bit I/O on this interface, and | ||
366 | * it doesn't have problems with interrupts. | ||
367 | */ | ||
368 | hwif->drives[0].io_32bit = hwif->drives[1].io_32bit = 1; | ||
369 | hwif->drives[0].unmask = hwif->drives[1].unmask = 1; | ||
370 | |||
371 | /* | ||
372 | * We always autotune PIO, this is done before DMA is checked, | ||
373 | * so there's no risk of accidentally disabling DMA | ||
374 | */ | ||
375 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | ||
376 | |||
377 | if (!hwif->dma_base) | 364 | if (!hwif->dma_base) |
378 | return; | 365 | return; |
379 | 366 | ||
@@ -388,8 +375,7 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) | |||
388 | return; | 375 | return; |
389 | } | 376 | } |
390 | 377 | ||
391 | hwif->atapi_dma = 1; | 378 | hwif->mwdma_mask = ATA_MWDMA2; |
392 | hwif->mwdma_mask = 0x07; | ||
393 | 379 | ||
394 | hwif->ide_dma_on = &sl82c105_ide_dma_on; | 380 | hwif->ide_dma_on = &sl82c105_ide_dma_on; |
395 | hwif->dma_off_quietly = &sl82c105_dma_off_quietly; | 381 | hwif->dma_off_quietly = &sl82c105_dma_off_quietly; |
@@ -401,13 +387,15 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) | |||
401 | hwif->serialized = hwif->mate->serialized = 1; | 387 | hwif->serialized = hwif->mate->serialized = 1; |
402 | } | 388 | } |
403 | 389 | ||
404 | static ide_pci_device_t sl82c105_chipset __devinitdata = { | 390 | static const struct ide_port_info sl82c105_chipset __devinitdata = { |
405 | .name = "W82C105", | 391 | .name = "W82C105", |
406 | .init_chipset = init_chipset_sl82c105, | 392 | .init_chipset = init_chipset_sl82c105, |
407 | .init_hwif = init_hwif_sl82c105, | 393 | .init_hwif = init_hwif_sl82c105, |
408 | .autodma = NOAUTODMA, | ||
409 | .enablebits = {{0x40,0x01,0x01}, {0x40,0x10,0x10}}, | 394 | .enablebits = {{0x40,0x01,0x01}, {0x40,0x10,0x10}}, |
410 | .bootable = ON_BOARD, | 395 | .host_flags = IDE_HFLAG_IO_32BIT | |
396 | IDE_HFLAG_UNMASK_IRQS | | ||
397 | IDE_HFLAG_NO_AUTODMA | | ||
398 | IDE_HFLAG_BOOTABLE, | ||
411 | .pio_mask = ATA_PIO5, | 399 | .pio_mask = ATA_PIO5, |
412 | }; | 400 | }; |
413 | 401 | ||
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index fa8df6d4383..eb4445b229e 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/slc90e66.c Version 0.18 Aug 9, 2007 | 2 | * linux/drivers/ide/pci/slc90e66.c Version 0.19 Sep 24, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org> |
5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com> | 5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com> |
@@ -21,6 +21,8 @@ | |||
21 | 21 | ||
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | 23 | ||
24 | static DEFINE_SPINLOCK(slc90e66_lock); | ||
25 | |||
24 | static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) | 26 | static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) |
25 | { | 27 | { |
26 | ide_hwif_t *hwif = HWIF(drive); | 28 | ide_hwif_t *hwif = HWIF(drive); |
@@ -40,7 +42,7 @@ static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
40 | { 2, 1 }, | 42 | { 2, 1 }, |
41 | { 2, 3 }, }; | 43 | { 2, 3 }, }; |
42 | 44 | ||
43 | spin_lock_irqsave(&ide_lock, flags); | 45 | spin_lock_irqsave(&slc90e66_lock, flags); |
44 | pci_read_config_word(dev, master_port, &master_data); | 46 | pci_read_config_word(dev, master_port, &master_data); |
45 | 47 | ||
46 | if (pio > 1) | 48 | if (pio > 1) |
@@ -71,7 +73,7 @@ static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
71 | pci_write_config_word(dev, master_port, master_data); | 73 | pci_write_config_word(dev, master_port, master_data); |
72 | if (is_slave) | 74 | if (is_slave) |
73 | pci_write_config_byte(dev, slave_port, slave_data); | 75 | pci_write_config_byte(dev, slave_port, slave_data); |
74 | spin_unlock_irqrestore(&ide_lock, flags); | 76 | spin_unlock_irqrestore(&slc90e66_lock, flags); |
75 | } | 77 | } |
76 | 78 | ||
77 | static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed) | 79 | static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed) |
@@ -133,37 +135,28 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) | |||
133 | u8 reg47 = 0; | 135 | u8 reg47 = 0; |
134 | u8 mask = hwif->channel ? 0x01 : 0x02; /* bit0:Primary */ | 136 | u8 mask = hwif->channel ? 0x01 : 0x02; /* bit0:Primary */ |
135 | 137 | ||
136 | if (!hwif->irq) | ||
137 | hwif->irq = hwif->channel ? 15 : 14; | ||
138 | |||
139 | hwif->set_pio_mode = &slc90e66_set_pio_mode; | 138 | hwif->set_pio_mode = &slc90e66_set_pio_mode; |
140 | hwif->set_dma_mode = &slc90e66_set_dma_mode; | 139 | hwif->set_dma_mode = &slc90e66_set_dma_mode; |
141 | 140 | ||
142 | pci_read_config_byte(hwif->pci_dev, 0x47, ®47); | 141 | pci_read_config_byte(hwif->pci_dev, 0x47, ®47); |
143 | 142 | ||
144 | hwif->drives[0].autotune = 1; | ||
145 | hwif->drives[1].autotune = 1; | ||
146 | |||
147 | if (hwif->dma_base == 0) | 143 | if (hwif->dma_base == 0) |
148 | return; | 144 | return; |
149 | 145 | ||
150 | hwif->atapi_dma = 1; | ||
151 | hwif->ultra_mask = 0x1f; | ||
152 | hwif->mwdma_mask = 0x06; | ||
153 | hwif->swdma_mask = 0x04; | ||
154 | |||
155 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 146 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
156 | /* bit[0(1)]: 0:80, 1:40 */ | 147 | /* bit[0(1)]: 0:80, 1:40 */ |
157 | hwif->cbl = (reg47 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; | 148 | hwif->cbl = (reg47 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; |
158 | } | 149 | } |
159 | 150 | ||
160 | static ide_pci_device_t slc90e66_chipset __devinitdata = { | 151 | static const struct ide_port_info slc90e66_chipset __devinitdata = { |
161 | .name = "SLC90E66", | 152 | .name = "SLC90E66", |
162 | .init_hwif = init_hwif_slc90e66, | 153 | .init_hwif = init_hwif_slc90e66, |
163 | .autodma = AUTODMA, | ||
164 | .enablebits = {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, | 154 | .enablebits = {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, |
165 | .bootable = ON_BOARD, | 155 | .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_BOOTABLE, |
166 | .pio_mask = ATA_PIO4, | 156 | .pio_mask = ATA_PIO4, |
157 | .swdma_mask = ATA_SWDMA2_ONLY, | ||
158 | .mwdma_mask = ATA_MWDMA12_ONLY, | ||
159 | .udma_mask = ATA_UDMA4, | ||
167 | }; | 160 | }; |
168 | 161 | ||
169 | static int __devinit slc90e66_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 162 | static int __devinit slc90e66_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
diff --git a/drivers/ide/pci/tc86c001.c b/drivers/ide/pci/tc86c001.c index de62db576ad..a66ebd14664 100644 --- a/drivers/ide/pci/tc86c001.c +++ b/drivers/ide/pci/tc86c001.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/ide/pci/tc86c001.c Version 1.00 Dec 12, 2006 | 2 | * drivers/ide/pci/tc86c001.c Version 1.01 Sep 5, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 2002 Toshiba Corporation | 4 | * Copyright (C) 2002 Toshiba Corporation |
5 | * Copyright (C) 2005-2006 MontaVista Software, Inc. <source@mvista.com> | 5 | * Copyright (C) 2005-2006 MontaVista Software, Inc. <source@mvista.com> |
@@ -17,7 +17,7 @@ static void tc86c001_set_mode(ide_drive_t *drive, const u8 speed) | |||
17 | { | 17 | { |
18 | ide_hwif_t *hwif = HWIF(drive); | 18 | ide_hwif_t *hwif = HWIF(drive); |
19 | unsigned long scr_port = hwif->config_data + (drive->dn ? 0x02 : 0x00); | 19 | unsigned long scr_port = hwif->config_data + (drive->dn ? 0x02 : 0x00); |
20 | u16 mode, scr = hwif->INW(scr_port); | 20 | u16 mode, scr = inw(scr_port); |
21 | 21 | ||
22 | switch (speed) { | 22 | switch (speed) { |
23 | case XFER_UDMA_4: mode = 0x00c0; break; | 23 | case XFER_UDMA_4: mode = 0x00c0; break; |
@@ -65,7 +65,7 @@ static int tc86c001_timer_expiry(ide_drive_t *drive) | |||
65 | ide_hwif_t *hwif = HWIF(drive); | 65 | ide_hwif_t *hwif = HWIF(drive); |
66 | ide_expiry_t *expiry = ide_get_hwifdata(hwif); | 66 | ide_expiry_t *expiry = ide_get_hwifdata(hwif); |
67 | ide_hwgroup_t *hwgroup = HWGROUP(drive); | 67 | ide_hwgroup_t *hwgroup = HWGROUP(drive); |
68 | u8 dma_stat = hwif->INB(hwif->dma_status); | 68 | u8 dma_stat = inb(hwif->dma_status); |
69 | 69 | ||
70 | /* Restore a higher level driver's expiry handler first. */ | 70 | /* Restore a higher level driver's expiry handler first. */ |
71 | hwgroup->expiry = expiry; | 71 | hwgroup->expiry = expiry; |
@@ -73,7 +73,7 @@ static int tc86c001_timer_expiry(ide_drive_t *drive) | |||
73 | if ((dma_stat & 5) == 1) { /* DMA active and no interrupt */ | 73 | if ((dma_stat & 5) == 1) { /* DMA active and no interrupt */ |
74 | unsigned long sc_base = hwif->config_data; | 74 | unsigned long sc_base = hwif->config_data; |
75 | unsigned long twcr_port = sc_base + (drive->dn ? 0x06 : 0x04); | 75 | unsigned long twcr_port = sc_base + (drive->dn ? 0x06 : 0x04); |
76 | u8 dma_cmd = hwif->INB(hwif->dma_command); | 76 | u8 dma_cmd = inb(hwif->dma_command); |
77 | 77 | ||
78 | printk(KERN_WARNING "%s: DMA interrupt possibly stuck, " | 78 | printk(KERN_WARNING "%s: DMA interrupt possibly stuck, " |
79 | "attempting recovery...\n", drive->name); | 79 | "attempting recovery...\n", drive->name); |
@@ -135,7 +135,7 @@ static int tc86c001_busproc(ide_drive_t *drive, int state) | |||
135 | u16 scr1; | 135 | u16 scr1; |
136 | 136 | ||
137 | /* System Control 1 Register bit 11 (ATA Hard Reset) read */ | 137 | /* System Control 1 Register bit 11 (ATA Hard Reset) read */ |
138 | scr1 = hwif->INW(sc_base + 0x00); | 138 | scr1 = inw(sc_base + 0x00); |
139 | 139 | ||
140 | switch (state) { | 140 | switch (state) { |
141 | case BUSSTATE_ON: | 141 | case BUSSTATE_ON: |
@@ -165,7 +165,7 @@ static int tc86c001_busproc(ide_drive_t *drive, int state) | |||
165 | static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) | 165 | static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) |
166 | { | 166 | { |
167 | unsigned long sc_base = pci_resource_start(hwif->pci_dev, 5); | 167 | unsigned long sc_base = pci_resource_start(hwif->pci_dev, 5); |
168 | u16 scr1 = hwif->INW(sc_base + 0x00);; | 168 | u16 scr1 = inw(sc_base + 0x00); |
169 | 169 | ||
170 | /* System Control 1 Register bit 15 (Soft Reset) set */ | 170 | /* System Control 1 Register bit 15 (Soft Reset) set */ |
171 | outw(scr1 | 0x8000, sc_base + 0x00); | 171 | outw(scr1 | 0x8000, sc_base + 0x00); |
@@ -184,8 +184,6 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) | |||
184 | 184 | ||
185 | hwif->busproc = &tc86c001_busproc; | 185 | hwif->busproc = &tc86c001_busproc; |
186 | 186 | ||
187 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | ||
188 | |||
189 | if (!hwif->dma_base) | 187 | if (!hwif->dma_base) |
190 | return; | 188 | return; |
191 | 189 | ||
@@ -198,10 +196,6 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) | |||
198 | /* Sector Count Register limit */ | 196 | /* Sector Count Register limit */ |
199 | hwif->rqsize = 0xffff; | 197 | hwif->rqsize = 0xffff; |
200 | 198 | ||
201 | hwif->atapi_dma = 1; | ||
202 | hwif->ultra_mask = 0x1f; | ||
203 | hwif->mwdma_mask = 0x07; | ||
204 | |||
205 | hwif->dma_start = &tc86c001_dma_start; | 199 | hwif->dma_start = &tc86c001_dma_start; |
206 | 200 | ||
207 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) { | 201 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) { |
@@ -209,7 +203,7 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) | |||
209 | * System Control 1 Register bit 13 (PDIAGN): | 203 | * System Control 1 Register bit 13 (PDIAGN): |
210 | * 0=80-pin cable, 1=40-pin cable | 204 | * 0=80-pin cable, 1=40-pin cable |
211 | */ | 205 | */ |
212 | scr1 = hwif->INW(sc_base + 0x00); | 206 | scr1 = inw(sc_base + 0x00); |
213 | hwif->cbl = (scr1 & 0x2000) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; | 207 | hwif->cbl = (scr1 & 0x2000) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; |
214 | } | 208 | } |
215 | } | 209 | } |
@@ -224,14 +218,14 @@ static unsigned int __devinit init_chipset_tc86c001(struct pci_dev *dev, | |||
224 | return err; | 218 | return err; |
225 | } | 219 | } |
226 | 220 | ||
227 | static ide_pci_device_t tc86c001_chipset __devinitdata = { | 221 | static const struct ide_port_info tc86c001_chipset __devinitdata = { |
228 | .name = "TC86C001", | 222 | .name = "TC86C001", |
229 | .init_chipset = init_chipset_tc86c001, | 223 | .init_chipset = init_chipset_tc86c001, |
230 | .init_hwif = init_hwif_tc86c001, | 224 | .init_hwif = init_hwif_tc86c001, |
231 | .autodma = AUTODMA, | 225 | .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_OFF_BOARD, |
232 | .bootable = OFF_BOARD, | ||
233 | .host_flags = IDE_HFLAG_SINGLE, | ||
234 | .pio_mask = ATA_PIO4, | 226 | .pio_mask = ATA_PIO4, |
227 | .mwdma_mask = ATA_MWDMA2, | ||
228 | .udma_mask = ATA_UDMA4, | ||
235 | }; | 229 | }; |
236 | 230 | ||
237 | static int __devinit tc86c001_init_one(struct pci_dev *dev, | 231 | static int __devinit tc86c001_init_one(struct pci_dev *dev, |
diff --git a/drivers/ide/pci/triflex.c b/drivers/ide/pci/triflex.c index 4075c907f05..a227c41d23a 100644 --- a/drivers/ide/pci/triflex.c +++ b/drivers/ide/pci/triflex.c | |||
@@ -100,22 +100,16 @@ static void __devinit init_hwif_triflex(ide_hwif_t *hwif) | |||
100 | { | 100 | { |
101 | hwif->set_pio_mode = &triflex_set_pio_mode; | 101 | hwif->set_pio_mode = &triflex_set_pio_mode; |
102 | hwif->set_dma_mode = &triflex_set_mode; | 102 | hwif->set_dma_mode = &triflex_set_mode; |
103 | |||
104 | if (hwif->dma_base == 0) | ||
105 | return; | ||
106 | |||
107 | hwif->atapi_dma = 1; | ||
108 | hwif->mwdma_mask = 0x07; | ||
109 | hwif->swdma_mask = 0x07; | ||
110 | } | 103 | } |
111 | 104 | ||
112 | static ide_pci_device_t triflex_device __devinitdata = { | 105 | static const struct ide_port_info triflex_device __devinitdata = { |
113 | .name = "TRIFLEX", | 106 | .name = "TRIFLEX", |
114 | .init_hwif = init_hwif_triflex, | 107 | .init_hwif = init_hwif_triflex, |
115 | .autodma = AUTODMA, | ||
116 | .enablebits = {{0x80, 0x01, 0x01}, {0x80, 0x02, 0x02}}, | 108 | .enablebits = {{0x80, 0x01, 0x01}, {0x80, 0x02, 0x02}}, |
117 | .bootable = ON_BOARD, | 109 | .host_flags = IDE_HFLAG_BOOTABLE, |
118 | .pio_mask = ATA_PIO4, | 110 | .pio_mask = ATA_PIO4, |
111 | .swdma_mask = ATA_SWDMA2, | ||
112 | .mwdma_mask = ATA_MWDMA2, | ||
119 | }; | 113 | }; |
120 | 114 | ||
121 | static int __devinit triflex_init_one(struct pci_dev *dev, | 115 | static int __devinit triflex_init_one(struct pci_dev *dev, |
diff --git a/drivers/ide/pci/trm290.c b/drivers/ide/pci/trm290.c index e3d943ada7b..5011ba22e36 100644 --- a/drivers/ide/pci/trm290.c +++ b/drivers/ide/pci/trm290.c | |||
@@ -250,8 +250,6 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif) | |||
250 | u8 reg = 0; | 250 | u8 reg = 0; |
251 | struct pci_dev *dev = hwif->pci_dev; | 251 | struct pci_dev *dev = hwif->pci_dev; |
252 | 252 | ||
253 | hwif->no_lba48 = 1; | ||
254 | hwif->chipset = ide_trm290; | ||
255 | cfgbase = pci_resource_start(dev, 4); | 253 | cfgbase = pci_resource_start(dev, 4); |
256 | if ((dev->class & 5) && cfgbase) { | 254 | if ((dev->class & 5) && cfgbase) { |
257 | hwif->config_data = cfgbase; | 255 | hwif->config_data = cfgbase; |
@@ -321,14 +319,17 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif) | |||
321 | #endif | 319 | #endif |
322 | } | 320 | } |
323 | 321 | ||
324 | static ide_pci_device_t trm290_chipset __devinitdata = { | 322 | static const struct ide_port_info trm290_chipset __devinitdata = { |
325 | .name = "TRM290", | 323 | .name = "TRM290", |
326 | .init_hwif = init_hwif_trm290, | 324 | .init_hwif = init_hwif_trm290, |
327 | .autodma = NOAUTODMA, | 325 | .chipset = ide_trm290, |
328 | .bootable = ON_BOARD, | 326 | .host_flags = IDE_HFLAG_NO_ATAPI_DMA | |
329 | #if 0 /* play it safe for now */ | 327 | #if 0 /* play it safe for now */ |
330 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | 328 | IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
331 | #endif | 329 | #endif |
330 | IDE_HFLAG_NO_AUTODMA | | ||
331 | IDE_HFLAG_BOOTABLE | | ||
332 | IDE_HFLAG_NO_LBA48, | ||
332 | }; | 333 | }; |
333 | 334 | ||
334 | static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 335 | static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c index b25fb65b240..a0d3c16b68e 100644 --- a/drivers/ide/pci/via82cxxx.c +++ b/drivers/ide/pci/via82cxxx.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * |
3 | * Version 3.49 | 3 | * Version 3.50 |
4 | * | 4 | * |
5 | * VIA IDE driver for Linux. Supported southbridges: | 5 | * VIA IDE driver for Linux. Supported southbridges: |
6 | * | 6 | * |
@@ -422,67 +422,40 @@ static u8 __devinit via82cxxx_cable_detect(ide_hwif_t *hwif) | |||
422 | 422 | ||
423 | static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif) | 423 | static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif) |
424 | { | 424 | { |
425 | struct via82cxxx_dev *vdev = pci_get_drvdata(hwif->pci_dev); | ||
426 | int i; | ||
427 | |||
428 | hwif->set_pio_mode = &via_set_pio_mode; | 425 | hwif->set_pio_mode = &via_set_pio_mode; |
429 | hwif->set_dma_mode = &via_set_drive; | 426 | hwif->set_dma_mode = &via_set_drive; |
430 | 427 | ||
431 | #ifdef CONFIG_PPC_CHRP | ||
432 | if(machine_is(chrp) && _chrp_type == _CHRP_Pegasos) { | ||
433 | hwif->irq = hwif->channel ? 15 : 14; | ||
434 | } | ||
435 | #endif | ||
436 | |||
437 | for (i = 0; i < 2; i++) { | ||
438 | hwif->drives[i].io_32bit = 1; | ||
439 | hwif->drives[i].unmask = (vdev->via_config->flags & VIA_NO_UNMASK) ? 0 : 1; | ||
440 | hwif->drives[i].autotune = 1; | ||
441 | } | ||
442 | |||
443 | if (!hwif->dma_base) | 428 | if (!hwif->dma_base) |
444 | return; | 429 | return; |
445 | 430 | ||
446 | hwif->atapi_dma = 1; | ||
447 | |||
448 | hwif->ultra_mask = vdev->via_config->udma_mask; | ||
449 | hwif->mwdma_mask = 0x07; | ||
450 | hwif->swdma_mask = 0x07; | ||
451 | |||
452 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 431 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
453 | hwif->cbl = via82cxxx_cable_detect(hwif); | 432 | hwif->cbl = via82cxxx_cable_detect(hwif); |
454 | } | 433 | } |
455 | 434 | ||
456 | static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = { | 435 | static const struct ide_port_info via82cxxx_chipset __devinitdata = { |
457 | { /* 0 */ | 436 | .name = "VP_IDE", |
458 | .name = "VP_IDE", | 437 | .init_chipset = init_chipset_via82cxxx, |
459 | .init_chipset = init_chipset_via82cxxx, | 438 | .init_hwif = init_hwif_via82cxxx, |
460 | .init_hwif = init_hwif_via82cxxx, | 439 | .enablebits = { { 0x40, 0x02, 0x02 }, { 0x40, 0x01, 0x01 } }, |
461 | .autodma = NOAUTODMA, | 440 | .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | |
462 | .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, | 441 | IDE_HFLAG_PIO_NO_DOWNGRADE | |
463 | .bootable = ON_BOARD, | 442 | IDE_HFLAG_POST_SET_MODE | |
464 | .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | 443 | IDE_HFLAG_IO_32BIT | |
465 | | IDE_HFLAG_PIO_NO_DOWNGRADE | 444 | IDE_HFLAG_BOOTABLE, |
466 | | IDE_HFLAG_POST_SET_MODE, | 445 | .pio_mask = ATA_PIO5, |
467 | .pio_mask = ATA_PIO5, | 446 | .swdma_mask = ATA_SWDMA2, |
468 | },{ /* 1 */ | 447 | .mwdma_mask = ATA_MWDMA2, |
469 | .name = "VP_IDE", | ||
470 | .init_chipset = init_chipset_via82cxxx, | ||
471 | .init_hwif = init_hwif_via82cxxx, | ||
472 | .autodma = AUTODMA, | ||
473 | .enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, | ||
474 | .bootable = ON_BOARD, | ||
475 | .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | ||
476 | | IDE_HFLAG_PIO_NO_DOWNGRADE | ||
477 | | IDE_HFLAG_POST_SET_MODE, | ||
478 | .pio_mask = ATA_PIO5, | ||
479 | } | ||
480 | }; | 448 | }; |
481 | 449 | ||
482 | static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 450 | static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
483 | { | 451 | { |
484 | struct pci_dev *isa = NULL; | 452 | struct pci_dev *isa = NULL; |
485 | struct via_isa_bridge *via_config; | 453 | struct via_isa_bridge *via_config; |
454 | u8 idx = id->driver_data; | ||
455 | struct ide_port_info d; | ||
456 | |||
457 | d = via82cxxx_chipset; | ||
458 | |||
486 | /* | 459 | /* |
487 | * Find the ISA bridge and check we know what it is. | 460 | * Find the ISA bridge and check we know what it is. |
488 | */ | 461 | */ |
@@ -492,7 +465,23 @@ static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_i | |||
492 | printk(KERN_WARNING "VP_IDE: Unknown VIA SouthBridge, disabling DMA.\n"); | 465 | printk(KERN_WARNING "VP_IDE: Unknown VIA SouthBridge, disabling DMA.\n"); |
493 | return -ENODEV; | 466 | return -ENODEV; |
494 | } | 467 | } |
495 | return ide_setup_pci_device(dev, &via82cxxx_chipsets[id->driver_data]); | 468 | |
469 | if (idx == 0) | ||
470 | d.host_flags |= IDE_HFLAG_NO_AUTODMA; | ||
471 | else | ||
472 | d.enablebits[1].reg = d.enablebits[0].reg = 0; | ||
473 | |||
474 | if ((via_config->flags & VIA_NO_UNMASK) == 0) | ||
475 | d.host_flags |= IDE_HFLAG_UNMASK_IRQS; | ||
476 | |||
477 | #ifdef CONFIG_PPC_CHRP | ||
478 | if (machine_is(chrp) && _chrp_type == _CHRP_Pegasos) | ||
479 | d.host_flags |= IDE_HFLAG_FORCE_LEGACY_IRQS; | ||
480 | #endif | ||
481 | |||
482 | d.udma_mask = via_config->udma_mask; | ||
483 | |||
484 | return ide_setup_pci_device(dev, &d); | ||
496 | } | 485 | } |
497 | 486 | ||
498 | static const struct pci_device_id via_pci_tbl[] = { | 487 | static const struct pci_device_id via_pci_tbl[] = { |
diff --git a/drivers/ide/ppc/mpc8xx.c b/drivers/ide/ppc/mpc8xx.c index df2e92034f5..5f0da35ab5a 100644 --- a/drivers/ide/ppc/mpc8xx.c +++ b/drivers/ide/ppc/mpc8xx.c | |||
@@ -316,8 +316,8 @@ m8xx_ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port, | |||
316 | 316 | ||
317 | ide_hwifs[data_port].pio_mask = ATA_PIO4; | 317 | ide_hwifs[data_port].pio_mask = ATA_PIO4; |
318 | ide_hwifs[data_port].set_pio_mode = m8xx_ide_set_pio_mode; | 318 | ide_hwifs[data_port].set_pio_mode = m8xx_ide_set_pio_mode; |
319 | ide_hwifs[data_port].ack_intr = (ide_ack_intr_t *)ide_interrupt_ack; | ||
319 | 320 | ||
320 | hw->ack_intr = (ide_ack_intr_t *) ide_interrupt_ack; | ||
321 | /* Enable Harddisk Interrupt, | 321 | /* Enable Harddisk Interrupt, |
322 | * and make it edge sensitive | 322 | * and make it edge sensitive |
323 | */ | 323 | */ |
@@ -402,8 +402,8 @@ void m8xx_ide_init_hwif_ports (hw_regs_t *hw, | |||
402 | 402 | ||
403 | ide_hwifs[data_port].pio_mask = ATA_PIO4; | 403 | ide_hwifs[data_port].pio_mask = ATA_PIO4; |
404 | ide_hwifs[data_port].set_pio_mode = m8xx_ide_set_pio_mode; | 404 | ide_hwifs[data_port].set_pio_mode = m8xx_ide_set_pio_mode; |
405 | ide_hwifs[data_port].ack_intr = (ide_ack_intr_t *)ide_interrupt_ack; | ||
405 | 406 | ||
406 | hw->ack_intr = (ide_ack_intr_t *) ide_interrupt_ack; | ||
407 | /* Enable Harddisk Interrupt, | 407 | /* Enable Harddisk Interrupt, |
408 | * and make it edge sensitive | 408 | * and make it edge sensitive |
409 | */ | 409 | */ |
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c index 1d25a343300..816b5311dad 100644 --- a/drivers/ide/ppc/pmac.c +++ b/drivers/ide/ppc/pmac.c | |||
@@ -1039,6 +1039,8 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) | |||
1039 | { | 1039 | { |
1040 | struct device_node *np = pmif->node; | 1040 | struct device_node *np = pmif->node; |
1041 | const int *bidp; | 1041 | const int *bidp; |
1042 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
1043 | hw_regs_t hw; | ||
1042 | 1044 | ||
1043 | pmif->cable_80 = 0; | 1045 | pmif->cable_80 = 0; |
1044 | pmif->broken_dma = pmif->broken_dma_warn = 0; | 1046 | pmif->broken_dma = pmif->broken_dma_warn = 0; |
@@ -1124,8 +1126,9 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) | |||
1124 | /* Tell common code _not_ to mess with resources */ | 1126 | /* Tell common code _not_ to mess with resources */ |
1125 | hwif->mmio = 1; | 1127 | hwif->mmio = 1; |
1126 | hwif->hwif_data = pmif; | 1128 | hwif->hwif_data = pmif; |
1127 | pmac_ide_init_hwif_ports(&hwif->hw, pmif->regbase, 0, &hwif->irq); | 1129 | memset(&hw, 0, sizeof(hw)); |
1128 | memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports)); | 1130 | pmac_ide_init_hwif_ports(&hw, pmif->regbase, 0, &hwif->irq); |
1131 | memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports)); | ||
1129 | hwif->chipset = ide_pmac; | 1132 | hwif->chipset = ide_pmac; |
1130 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET] || pmif->mediabay; | 1133 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET] || pmif->mediabay; |
1131 | hwif->hold = pmif->mediabay; | 1134 | hwif->hold = pmif->mediabay; |
@@ -1163,10 +1166,9 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) | |||
1163 | pmac_ide_setup_dma(pmif, hwif); | 1166 | pmac_ide_setup_dma(pmif, hwif); |
1164 | #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ | 1167 | #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ |
1165 | 1168 | ||
1166 | /* We probe the hwif now */ | 1169 | idx[0] = hwif->index; |
1167 | probe_hwif_init(hwif); | ||
1168 | 1170 | ||
1169 | ide_proc_register_port(hwif); | 1171 | ide_device_add(idx); |
1170 | 1172 | ||
1171 | return 0; | 1173 | return 0; |
1172 | } | 1174 | } |
@@ -1780,7 +1782,6 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) | |||
1780 | hwif->dma_timeout = &ide_dma_timeout; | 1782 | hwif->dma_timeout = &ide_dma_timeout; |
1781 | hwif->dma_lost_irq = &pmac_ide_dma_lost_irq; | 1783 | hwif->dma_lost_irq = &pmac_ide_dma_lost_irq; |
1782 | 1784 | ||
1783 | hwif->atapi_dma = 1; | ||
1784 | switch(pmif->kind) { | 1785 | switch(pmif->kind) { |
1785 | case controller_sh_ata6: | 1786 | case controller_sh_ata6: |
1786 | hwif->ultra_mask = pmif->cable_80 ? 0x7f : 0x07; | 1787 | hwif->ultra_mask = pmif->cable_80 ? 0x7f : 0x07; |
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c index 3d101f73f91..02d14bf85ab 100644 --- a/drivers/ide/setup-pci.c +++ b/drivers/ide/setup-pci.c | |||
@@ -147,14 +147,15 @@ static int ide_setup_pci_baseregs (struct pci_dev *dev, const char *name) | |||
147 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI | 147 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI |
148 | /** | 148 | /** |
149 | * ide_get_or_set_dma_base - setup BMIBA | 149 | * ide_get_or_set_dma_base - setup BMIBA |
150 | * @hwif: Interface | 150 | * @d: IDE port info |
151 | * @hwif: IDE interface | ||
151 | * | 152 | * |
152 | * Fetch the DMA Bus-Master-I/O-Base-Address (BMIBA) from PCI space. | 153 | * Fetch the DMA Bus-Master-I/O-Base-Address (BMIBA) from PCI space. |
153 | * Where a device has a partner that is already in DMA mode we check | 154 | * Where a device has a partner that is already in DMA mode we check |
154 | * and enforce IDE simplex rules. | 155 | * and enforce IDE simplex rules. |
155 | */ | 156 | */ |
156 | 157 | ||
157 | static unsigned long ide_get_or_set_dma_base (ide_hwif_t *hwif) | 158 | static unsigned long ide_get_or_set_dma_base(const struct ide_port_info *d, ide_hwif_t *hwif) |
158 | { | 159 | { |
159 | unsigned long dma_base = 0; | 160 | unsigned long dma_base = 0; |
160 | struct pci_dev *dev = hwif->pci_dev; | 161 | struct pci_dev *dev = hwif->pci_dev; |
@@ -165,14 +166,15 @@ static unsigned long ide_get_or_set_dma_base (ide_hwif_t *hwif) | |||
165 | if (hwif->mate && hwif->mate->dma_base) { | 166 | if (hwif->mate && hwif->mate->dma_base) { |
166 | dma_base = hwif->mate->dma_base - (hwif->channel ? 0 : 8); | 167 | dma_base = hwif->mate->dma_base - (hwif->channel ? 0 : 8); |
167 | } else { | 168 | } else { |
168 | dma_base = pci_resource_start(dev, 4); | 169 | u8 baridx = (d->host_flags & IDE_HFLAG_CS5520) ? 2 : 4; |
169 | if (!dma_base) { | 170 | |
170 | printk(KERN_ERR "%s: dma_base is invalid\n", | 171 | dma_base = pci_resource_start(dev, baridx); |
171 | hwif->cds->name); | 172 | |
172 | } | 173 | if (dma_base == 0) |
174 | printk(KERN_ERR "%s: DMA base is invalid\n", d->name); | ||
173 | } | 175 | } |
174 | 176 | ||
175 | if (dma_base) { | 177 | if ((d->host_flags & IDE_HFLAG_CS5520) == 0 && dma_base) { |
176 | u8 simplex_stat = 0; | 178 | u8 simplex_stat = 0; |
177 | dma_base += hwif->channel ? 8 : 0; | 179 | dma_base += hwif->channel ? 8 : 0; |
178 | 180 | ||
@@ -183,13 +185,13 @@ static unsigned long ide_get_or_set_dma_base (ide_hwif_t *hwif) | |||
183 | case PCI_DEVICE_ID_CMD_643: | 185 | case PCI_DEVICE_ID_CMD_643: |
184 | case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE: | 186 | case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE: |
185 | case PCI_DEVICE_ID_REVOLUTION: | 187 | case PCI_DEVICE_ID_REVOLUTION: |
186 | simplex_stat = hwif->INB(dma_base + 2); | 188 | simplex_stat = inb(dma_base + 2); |
187 | hwif->OUTB((simplex_stat&0x60),(dma_base + 2)); | 189 | outb(simplex_stat & 0x60, dma_base + 2); |
188 | simplex_stat = hwif->INB(dma_base + 2); | 190 | simplex_stat = inb(dma_base + 2); |
189 | if (simplex_stat & 0x80) { | 191 | if (simplex_stat & 0x80) { |
190 | printk(KERN_INFO "%s: simplex device: " | 192 | printk(KERN_INFO "%s: simplex device: " |
191 | "DMA forced\n", | 193 | "DMA forced\n", |
192 | hwif->cds->name); | 194 | d->name); |
193 | } | 195 | } |
194 | break; | 196 | break; |
195 | default: | 197 | default: |
@@ -212,8 +214,8 @@ static unsigned long ide_get_or_set_dma_base (ide_hwif_t *hwif) | |||
212 | */ | 214 | */ |
213 | if (hwif->mate && hwif->mate->dma_base) { | 215 | if (hwif->mate && hwif->mate->dma_base) { |
214 | printk(KERN_INFO "%s: simplex device: " | 216 | printk(KERN_INFO "%s: simplex device: " |
215 | "DMA disabled\n", | 217 | "DMA disabled\n", |
216 | hwif->cds->name); | 218 | d->name); |
217 | dma_base = 0; | 219 | dma_base = 0; |
218 | } | 220 | } |
219 | } | 221 | } |
@@ -223,10 +225,11 @@ static unsigned long ide_get_or_set_dma_base (ide_hwif_t *hwif) | |||
223 | } | 225 | } |
224 | #endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ | 226 | #endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ |
225 | 227 | ||
226 | void ide_setup_pci_noise (struct pci_dev *dev, ide_pci_device_t *d) | 228 | void ide_setup_pci_noise(struct pci_dev *dev, const struct ide_port_info *d) |
227 | { | 229 | { |
228 | printk(KERN_INFO "%s: IDE controller at PCI slot %s\n", | 230 | printk(KERN_INFO "%s: IDE controller (0x%04x:0x%04x rev 0x%02x) at " |
229 | d->name, pci_name(dev)); | 231 | " PCI slot %s\n", d->name, dev->vendor, dev->device, |
232 | dev->revision, pci_name(dev)); | ||
230 | } | 233 | } |
231 | 234 | ||
232 | EXPORT_SYMBOL_GPL(ide_setup_pci_noise); | 235 | EXPORT_SYMBOL_GPL(ide_setup_pci_noise); |
@@ -235,15 +238,15 @@ EXPORT_SYMBOL_GPL(ide_setup_pci_noise); | |||
235 | /** | 238 | /** |
236 | * ide_pci_enable - do PCI enables | 239 | * ide_pci_enable - do PCI enables |
237 | * @dev: PCI device | 240 | * @dev: PCI device |
238 | * @d: IDE pci device data | 241 | * @d: IDE port info |
239 | * | 242 | * |
240 | * Enable the IDE PCI device. We attempt to enable the device in full | 243 | * Enable the IDE PCI device. We attempt to enable the device in full |
241 | * but if that fails then we only need BAR4 so we will enable that. | 244 | * but if that fails then we only need BAR4 so we will enable that. |
242 | * | 245 | * |
243 | * Returns zero on success or an error code | 246 | * Returns zero on success or an error code |
244 | */ | 247 | */ |
245 | 248 | ||
246 | static int ide_pci_enable(struct pci_dev *dev, ide_pci_device_t *d) | 249 | static int ide_pci_enable(struct pci_dev *dev, const struct ide_port_info *d) |
247 | { | 250 | { |
248 | int ret; | 251 | int ret; |
249 | 252 | ||
@@ -258,9 +261,9 @@ static int ide_pci_enable(struct pci_dev *dev, ide_pci_device_t *d) | |||
258 | } | 261 | } |
259 | 262 | ||
260 | /* | 263 | /* |
261 | * assume all devices can do 32-bit dma for now. we can add a | 264 | * assume all devices can do 32-bit DMA for now, we can add |
262 | * dma mask field to the ide_pci_device_t if we need it (or let | 265 | * a DMA mask field to the struct ide_port_info if we need it |
263 | * lower level driver set the dma mask) | 266 | * (or let lower level driver set the DMA mask) |
264 | */ | 267 | */ |
265 | ret = pci_set_dma_mask(dev, DMA_32BIT_MASK); | 268 | ret = pci_set_dma_mask(dev, DMA_32BIT_MASK); |
266 | if (ret < 0) { | 269 | if (ret < 0) { |
@@ -282,13 +285,13 @@ out: | |||
282 | /** | 285 | /** |
283 | * ide_pci_configure - configure an unconfigured device | 286 | * ide_pci_configure - configure an unconfigured device |
284 | * @dev: PCI device | 287 | * @dev: PCI device |
285 | * @d: IDE pci device data | 288 | * @d: IDE port info |
286 | * | 289 | * |
287 | * Enable and configure the PCI device we have been passed. | 290 | * Enable and configure the PCI device we have been passed. |
288 | * Returns zero on success or an error code. | 291 | * Returns zero on success or an error code. |
289 | */ | 292 | */ |
290 | 293 | ||
291 | static int ide_pci_configure(struct pci_dev *dev, ide_pci_device_t *d) | 294 | static int ide_pci_configure(struct pci_dev *dev, const struct ide_port_info *d) |
292 | { | 295 | { |
293 | u16 pcicmd = 0; | 296 | u16 pcicmd = 0; |
294 | /* | 297 | /* |
@@ -316,15 +319,15 @@ static int ide_pci_configure(struct pci_dev *dev, ide_pci_device_t *d) | |||
316 | 319 | ||
317 | /** | 320 | /** |
318 | * ide_pci_check_iomem - check a register is I/O | 321 | * ide_pci_check_iomem - check a register is I/O |
319 | * @dev: pci device | 322 | * @dev: PCI device |
320 | * @d: ide_pci_device | 323 | * @d: IDE port info |
321 | * @bar: bar number | 324 | * @bar: BAR number |
322 | * | 325 | * |
323 | * Checks if a BAR is configured and points to MMIO space. If so | 326 | * Checks if a BAR is configured and points to MMIO space. If so |
324 | * print an error and return an error code. Otherwise return 0 | 327 | * print an error and return an error code. Otherwise return 0 |
325 | */ | 328 | */ |
326 | 329 | ||
327 | static int ide_pci_check_iomem(struct pci_dev *dev, ide_pci_device_t *d, int bar) | 330 | static int ide_pci_check_iomem(struct pci_dev *dev, const struct ide_port_info *d, int bar) |
328 | { | 331 | { |
329 | ulong flags = pci_resource_flags(dev, bar); | 332 | ulong flags = pci_resource_flags(dev, bar); |
330 | 333 | ||
@@ -346,7 +349,7 @@ static int ide_pci_check_iomem(struct pci_dev *dev, ide_pci_device_t *d, int bar | |||
346 | /** | 349 | /** |
347 | * ide_hwif_configure - configure an IDE interface | 350 | * ide_hwif_configure - configure an IDE interface |
348 | * @dev: PCI device holding interface | 351 | * @dev: PCI device holding interface |
349 | * @d: IDE pci data | 352 | * @d: IDE port info |
350 | * @mate: Paired interface if any | 353 | * @mate: Paired interface if any |
351 | * | 354 | * |
352 | * Perform the initial set up for the hardware interface structure. This | 355 | * Perform the initial set up for the hardware interface structure. This |
@@ -355,11 +358,12 @@ static int ide_pci_check_iomem(struct pci_dev *dev, ide_pci_device_t *d, int bar | |||
355 | * | 358 | * |
356 | * Returns the new hardware interface structure, or NULL on a failure | 359 | * Returns the new hardware interface structure, or NULL on a failure |
357 | */ | 360 | */ |
358 | 361 | ||
359 | static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, ide_pci_device_t *d, ide_hwif_t *mate, int port, int irq) | 362 | static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, const struct ide_port_info *d, ide_hwif_t *mate, int port, int irq) |
360 | { | 363 | { |
361 | unsigned long ctl = 0, base = 0; | 364 | unsigned long ctl = 0, base = 0; |
362 | ide_hwif_t *hwif; | 365 | ide_hwif_t *hwif; |
366 | u8 bootable = (d->host_flags & IDE_HFLAG_BOOTABLE) ? 1 : 0; | ||
363 | 367 | ||
364 | if ((d->host_flags & IDE_HFLAG_ISA_PORTS) == 0) { | 368 | if ((d->host_flags & IDE_HFLAG_ISA_PORTS) == 0) { |
365 | /* Possibly we should fail if these checks report true */ | 369 | /* Possibly we should fail if these checks report true */ |
@@ -380,23 +384,24 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, ide_pci_device_t *d, | |||
380 | ctl = port ? 0x374 : 0x3f4; | 384 | ctl = port ? 0x374 : 0x3f4; |
381 | base = port ? 0x170 : 0x1f0; | 385 | base = port ? 0x170 : 0x1f0; |
382 | } | 386 | } |
383 | if ((hwif = ide_match_hwif(base, d->bootable, d->name)) == NULL) | 387 | if ((hwif = ide_match_hwif(base, bootable, d->name)) == NULL) |
384 | return NULL; /* no room in ide_hwifs[] */ | 388 | return NULL; /* no room in ide_hwifs[] */ |
385 | if (hwif->io_ports[IDE_DATA_OFFSET] != base || | 389 | if (hwif->io_ports[IDE_DATA_OFFSET] != base || |
386 | hwif->io_ports[IDE_CONTROL_OFFSET] != (ctl | 2)) { | 390 | hwif->io_ports[IDE_CONTROL_OFFSET] != (ctl | 2)) { |
387 | memset(&hwif->hw, 0, sizeof(hwif->hw)); | 391 | hw_regs_t hw; |
388 | #ifndef IDE_ARCH_OBSOLETE_INIT | 392 | |
389 | ide_std_init_ports(&hwif->hw, base, (ctl | 2)); | 393 | memset(&hw, 0, sizeof(hw)); |
390 | hwif->hw.io_ports[IDE_IRQ_OFFSET] = 0; | 394 | #ifndef CONFIG_IDE_ARCH_OBSOLETE_INIT |
395 | ide_std_init_ports(&hw, base, ctl | 2); | ||
391 | #else | 396 | #else |
392 | ide_init_hwif_ports(&hwif->hw, base, (ctl | 2), NULL); | 397 | ide_init_hwif_ports(&hw, base, ctl | 2, NULL); |
393 | #endif | 398 | #endif |
394 | memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports)); | 399 | memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports)); |
395 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; | 400 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; |
396 | } | 401 | } |
397 | hwif->chipset = ide_pci; | 402 | hwif->chipset = d->chipset ? d->chipset : ide_pci; |
398 | hwif->pci_dev = dev; | 403 | hwif->pci_dev = dev; |
399 | hwif->cds = (struct ide_pci_device_s *) d; | 404 | hwif->cds = d; |
400 | hwif->channel = port; | 405 | hwif->channel = port; |
401 | 406 | ||
402 | if (!hwif->irq) | 407 | if (!hwif->irq) |
@@ -411,28 +416,25 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, ide_pci_device_t *d, | |||
411 | /** | 416 | /** |
412 | * ide_hwif_setup_dma - configure DMA interface | 417 | * ide_hwif_setup_dma - configure DMA interface |
413 | * @dev: PCI device | 418 | * @dev: PCI device |
414 | * @d: IDE pci data | 419 | * @d: IDE port info |
415 | * @hwif: Hardware interface we are configuring | 420 | * @hwif: IDE interface |
416 | * | 421 | * |
417 | * Set up the DMA base for the interface. Enable the master bits as | 422 | * Set up the DMA base for the interface. Enable the master bits as |
418 | * necessary and attempt to bring the device DMA into a ready to use | 423 | * necessary and attempt to bring the device DMA into a ready to use |
419 | * state | 424 | * state |
420 | */ | 425 | */ |
421 | 426 | ||
422 | #ifndef CONFIG_BLK_DEV_IDEDMA_PCI | 427 | static void ide_hwif_setup_dma(struct pci_dev *dev, const struct ide_port_info *d, ide_hwif_t *hwif) |
423 | static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwif_t *hwif) | ||
424 | { | ||
425 | } | ||
426 | #else | ||
427 | static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwif_t *hwif) | ||
428 | { | 428 | { |
429 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI | ||
429 | u16 pcicmd; | 430 | u16 pcicmd; |
431 | |||
430 | pci_read_config_word(dev, PCI_COMMAND, &pcicmd); | 432 | pci_read_config_word(dev, PCI_COMMAND, &pcicmd); |
431 | 433 | ||
432 | if ((d->autodma == AUTODMA) || | 434 | if ((d->host_flags & IDE_HFLAG_NO_AUTODMA) == 0 || |
433 | ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && | 435 | ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && |
434 | (dev->class & 0x80))) { | 436 | (dev->class & 0x80))) { |
435 | unsigned long dma_base = ide_get_or_set_dma_base(hwif); | 437 | unsigned long dma_base = ide_get_or_set_dma_base(d, hwif); |
436 | if (dma_base && !(pcicmd & PCI_COMMAND_MASTER)) { | 438 | if (dma_base && !(pcicmd & PCI_COMMAND_MASTER)) { |
437 | /* | 439 | /* |
438 | * Set up BM-DMA capability | 440 | * Set up BM-DMA capability |
@@ -456,13 +458,13 @@ static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwi | |||
456 | "(BIOS)\n", hwif->name, d->name); | 458 | "(BIOS)\n", hwif->name, d->name); |
457 | } | 459 | } |
458 | } | 460 | } |
459 | } | ||
460 | #endif /* CONFIG_BLK_DEV_IDEDMA_PCI*/ | 461 | #endif /* CONFIG_BLK_DEV_IDEDMA_PCI*/ |
462 | } | ||
461 | 463 | ||
462 | /** | 464 | /** |
463 | * ide_setup_pci_controller - set up IDE PCI | 465 | * ide_setup_pci_controller - set up IDE PCI |
464 | * @dev: PCI device | 466 | * @dev: PCI device |
465 | * @d: IDE PCI data | 467 | * @d: IDE port info |
466 | * @noisy: verbose flag | 468 | * @noisy: verbose flag |
467 | * @config: returned as 1 if we configured the hardware | 469 | * @config: returned as 1 if we configured the hardware |
468 | * | 470 | * |
@@ -470,11 +472,10 @@ static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwi | |||
470 | * up the PCI side of the device, checks that the device is enabled | 472 | * up the PCI side of the device, checks that the device is enabled |
471 | * and enables it if need be | 473 | * and enables it if need be |
472 | */ | 474 | */ |
473 | 475 | ||
474 | static int ide_setup_pci_controller(struct pci_dev *dev, ide_pci_device_t *d, int noisy, int *config) | 476 | static int ide_setup_pci_controller(struct pci_dev *dev, const struct ide_port_info *d, int noisy, int *config) |
475 | { | 477 | { |
476 | int ret; | 478 | int ret; |
477 | u32 class_rev; | ||
478 | u16 pcicmd; | 479 | u16 pcicmd; |
479 | 480 | ||
480 | if (noisy) | 481 | if (noisy) |
@@ -497,10 +498,6 @@ static int ide_setup_pci_controller(struct pci_dev *dev, ide_pci_device_t *d, in | |||
497 | printk(KERN_INFO "%s: device enabled (Linux)\n", d->name); | 498 | printk(KERN_INFO "%s: device enabled (Linux)\n", d->name); |
498 | } | 499 | } |
499 | 500 | ||
500 | pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev); | ||
501 | class_rev &= 0xff; | ||
502 | if (noisy) | ||
503 | printk(KERN_INFO "%s: chipset revision %d\n", d->name, class_rev); | ||
504 | out: | 501 | out: |
505 | return ret; | 502 | return ret; |
506 | } | 503 | } |
@@ -508,9 +505,9 @@ out: | |||
508 | /** | 505 | /** |
509 | * ide_pci_setup_ports - configure ports/devices on PCI IDE | 506 | * ide_pci_setup_ports - configure ports/devices on PCI IDE |
510 | * @dev: PCI device | 507 | * @dev: PCI device |
511 | * @d: IDE pci device info | 508 | * @d: IDE port info |
512 | * @pciirq: IRQ line | 509 | * @pciirq: IRQ line |
513 | * @index: ata index to update | 510 | * @idx: ATA index table to update |
514 | * | 511 | * |
515 | * Scan the interfaces attached to this device and do any | 512 | * Scan the interfaces attached to this device and do any |
516 | * necessary per port setup. Attach the devices and ask the | 513 | * necessary per port setup. Attach the devices and ask the |
@@ -520,26 +517,25 @@ out: | |||
520 | * but is also used directly as a helper function by some controllers | 517 | * but is also used directly as a helper function by some controllers |
521 | * where the chipset setup is not the default PCI IDE one. | 518 | * where the chipset setup is not the default PCI IDE one. |
522 | */ | 519 | */ |
523 | 520 | ||
524 | void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, ata_index_t *index) | 521 | void ide_pci_setup_ports(struct pci_dev *dev, const struct ide_port_info *d, int pciirq, u8 *idx) |
525 | { | 522 | { |
526 | int channels = (d->host_flags & IDE_HFLAG_SINGLE) ? 1 : 2, port; | 523 | int channels = (d->host_flags & IDE_HFLAG_SINGLE) ? 1 : 2, port; |
527 | int at_least_one_hwif_enabled = 0; | ||
528 | ide_hwif_t *hwif, *mate = NULL; | 524 | ide_hwif_t *hwif, *mate = NULL; |
529 | u8 tmp; | 525 | u8 tmp; |
530 | 526 | ||
531 | index->all = 0xf0f0; | ||
532 | |||
533 | /* | 527 | /* |
534 | * Set up the IDE ports | 528 | * Set up the IDE ports |
535 | */ | 529 | */ |
536 | 530 | ||
537 | for (port = 0; port < channels; ++port) { | 531 | for (port = 0; port < channels; ++port) { |
538 | ide_pci_enablebit_t *e = &(d->enablebits[port]); | 532 | const ide_pci_enablebit_t *e = &(d->enablebits[port]); |
539 | 533 | ||
540 | if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) || | 534 | if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) || |
541 | (tmp & e->mask) != e->val)) | 535 | (tmp & e->mask) != e->val)) { |
536 | printk(KERN_INFO "%s: IDE port disabled\n", d->name); | ||
542 | continue; /* port not enabled */ | 537 | continue; /* port not enabled */ |
538 | } | ||
543 | 539 | ||
544 | if ((hwif = ide_hwif_configure(dev, d, mate, port, pciirq)) == NULL) | 540 | if ((hwif = ide_hwif_configure(dev, d, mate, port, pciirq)) == NULL) |
545 | continue; | 541 | continue; |
@@ -547,27 +543,49 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a | |||
547 | /* setup proper ancestral information */ | 543 | /* setup proper ancestral information */ |
548 | hwif->gendev.parent = &dev->dev; | 544 | hwif->gendev.parent = &dev->dev; |
549 | 545 | ||
550 | if (hwif->channel) { | 546 | *(idx + port) = hwif->index; |
551 | index->b.high = hwif->index; | ||
552 | } else { | ||
553 | index->b.low = hwif->index; | ||
554 | } | ||
555 | 547 | ||
556 | 548 | ||
557 | if (d->init_iops) | 549 | if (d->init_iops) |
558 | d->init_iops(hwif); | 550 | d->init_iops(hwif); |
559 | 551 | ||
560 | if (d->autodma == NODMA) | 552 | if ((d->host_flags & IDE_HFLAG_NO_DMA) == 0) |
561 | goto bypass_legacy_dma; | ||
562 | |||
563 | if(d->init_setup_dma) | ||
564 | d->init_setup_dma(dev, d, hwif); | ||
565 | else | ||
566 | ide_hwif_setup_dma(dev, d, hwif); | 553 | ide_hwif_setup_dma(dev, d, hwif); |
567 | bypass_legacy_dma: | 554 | |
555 | if ((!hwif->irq && (d->host_flags & IDE_HFLAG_LEGACY_IRQS)) || | ||
556 | (d->host_flags & IDE_HFLAG_FORCE_LEGACY_IRQS)) | ||
557 | hwif->irq = port ? 15 : 14; | ||
558 | |||
559 | hwif->fixup = d->fixup; | ||
560 | |||
568 | hwif->host_flags = d->host_flags; | 561 | hwif->host_flags = d->host_flags; |
569 | hwif->pio_mask = d->pio_mask; | 562 | hwif->pio_mask = d->pio_mask; |
570 | 563 | ||
564 | if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate) | ||
565 | hwif->mate->serialized = hwif->serialized = 1; | ||
566 | |||
567 | if (d->host_flags & IDE_HFLAG_IO_32BIT) { | ||
568 | hwif->drives[0].io_32bit = 1; | ||
569 | hwif->drives[1].io_32bit = 1; | ||
570 | } | ||
571 | |||
572 | if (d->host_flags & IDE_HFLAG_UNMASK_IRQS) { | ||
573 | hwif->drives[0].unmask = 1; | ||
574 | hwif->drives[1].unmask = 1; | ||
575 | } | ||
576 | |||
577 | if (hwif->dma_base) { | ||
578 | hwif->swdma_mask = d->swdma_mask; | ||
579 | hwif->mwdma_mask = d->mwdma_mask; | ||
580 | hwif->ultra_mask = d->udma_mask; | ||
581 | } | ||
582 | |||
583 | hwif->drives[0].autotune = 1; | ||
584 | hwif->drives[1].autotune = 1; | ||
585 | |||
586 | if (d->host_flags & IDE_HFLAG_RQSIZE_256) | ||
587 | hwif->rqsize = 256; | ||
588 | |||
571 | if (d->init_hwif) | 589 | if (d->init_hwif) |
572 | /* Call chipset-specific routine | 590 | /* Call chipset-specific routine |
573 | * for each enabled hwif | 591 | * for each enabled hwif |
@@ -575,10 +593,7 @@ bypass_legacy_dma: | |||
575 | d->init_hwif(hwif); | 593 | d->init_hwif(hwif); |
576 | 594 | ||
577 | mate = hwif; | 595 | mate = hwif; |
578 | at_least_one_hwif_enabled = 1; | ||
579 | } | 596 | } |
580 | if (!at_least_one_hwif_enabled) | ||
581 | printk(KERN_INFO "%s: neither IDE port enabled (BIOS)\n", d->name); | ||
582 | } | 597 | } |
583 | 598 | ||
584 | EXPORT_SYMBOL_GPL(ide_pci_setup_ports); | 599 | EXPORT_SYMBOL_GPL(ide_pci_setup_ports); |
@@ -590,13 +605,13 @@ EXPORT_SYMBOL_GPL(ide_pci_setup_ports); | |||
590 | * | 605 | * |
591 | * One thing that is not standardized is the location of the | 606 | * One thing that is not standardized is the location of the |
592 | * primary/secondary interface "enable/disable" bits. For chipsets that | 607 | * primary/secondary interface "enable/disable" bits. For chipsets that |
593 | * we "know" about, this information is in the ide_pci_device_t struct; | 608 | * we "know" about, this information is in the struct ide_port_info; |
594 | * for all other chipsets, we just assume both interfaces are enabled. | 609 | * for all other chipsets, we just assume both interfaces are enabled. |
595 | */ | 610 | */ |
596 | static int do_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d, | 611 | static int do_ide_setup_pci_device(struct pci_dev *dev, |
597 | ata_index_t *index, u8 noisy) | 612 | const struct ide_port_info *d, |
613 | u8 *idx, u8 noisy) | ||
598 | { | 614 | { |
599 | static ata_index_t ata_index = { .b = { .low = 0xff, .high = 0xff } }; | ||
600 | int tried_config = 0; | 615 | int tried_config = 0; |
601 | int pciirq, ret; | 616 | int pciirq, ret; |
602 | 617 | ||
@@ -646,51 +661,35 @@ static int do_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d, | |||
646 | 661 | ||
647 | /* FIXME: silent failure can happen */ | 662 | /* FIXME: silent failure can happen */ |
648 | 663 | ||
649 | *index = ata_index; | 664 | ide_pci_setup_ports(dev, d, pciirq, idx); |
650 | ide_pci_setup_ports(dev, d, pciirq, index); | ||
651 | out: | 665 | out: |
652 | return ret; | 666 | return ret; |
653 | } | 667 | } |
654 | 668 | ||
655 | int ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d) | 669 | int ide_setup_pci_device(struct pci_dev *dev, const struct ide_port_info *d) |
656 | { | 670 | { |
657 | ide_hwif_t *hwif = NULL, *mate = NULL; | 671 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; |
658 | ata_index_t index_list; | ||
659 | int ret; | 672 | int ret; |
660 | 673 | ||
661 | ret = do_ide_setup_pci_device(dev, d, &index_list, 1); | 674 | ret = do_ide_setup_pci_device(dev, d, &idx[0], 1); |
662 | if (ret < 0) | ||
663 | goto out; | ||
664 | |||
665 | if ((index_list.b.low & 0xf0) != 0xf0) | ||
666 | hwif = &ide_hwifs[index_list.b.low]; | ||
667 | if ((index_list.b.high & 0xf0) != 0xf0) | ||
668 | mate = &ide_hwifs[index_list.b.high]; | ||
669 | 675 | ||
670 | if (hwif) | 676 | if (ret >= 0) |
671 | probe_hwif_init_with_fixup(hwif, d->fixup); | 677 | ide_device_add(idx); |
672 | if (mate) | ||
673 | probe_hwif_init_with_fixup(mate, d->fixup); | ||
674 | 678 | ||
675 | if (hwif) | ||
676 | ide_proc_register_port(hwif); | ||
677 | if (mate) | ||
678 | ide_proc_register_port(mate); | ||
679 | out: | ||
680 | return ret; | 679 | return ret; |
681 | } | 680 | } |
682 | 681 | ||
683 | EXPORT_SYMBOL_GPL(ide_setup_pci_device); | 682 | EXPORT_SYMBOL_GPL(ide_setup_pci_device); |
684 | 683 | ||
685 | int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2, | 684 | int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2, |
686 | ide_pci_device_t *d) | 685 | const struct ide_port_info *d) |
687 | { | 686 | { |
688 | struct pci_dev *pdev[] = { dev1, dev2 }; | 687 | struct pci_dev *pdev[] = { dev1, dev2 }; |
689 | ata_index_t index_list[2]; | ||
690 | int ret, i; | 688 | int ret, i; |
689 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
691 | 690 | ||
692 | for (i = 0; i < 2; i++) { | 691 | for (i = 0; i < 2; i++) { |
693 | ret = do_ide_setup_pci_device(pdev[i], d, index_list + i, !i); | 692 | ret = do_ide_setup_pci_device(pdev[i], d, &idx[i*2], !i); |
694 | /* | 693 | /* |
695 | * FIXME: Mom, mom, they stole me the helper function to undo | 694 | * FIXME: Mom, mom, they stole me the helper function to undo |
696 | * do_ide_setup_pci_device() on the first device! | 695 | * do_ide_setup_pci_device() on the first device! |
@@ -699,25 +698,7 @@ int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2, | |||
699 | goto out; | 698 | goto out; |
700 | } | 699 | } |
701 | 700 | ||
702 | for (i = 0; i < 2; i++) { | 701 | ide_device_add(idx); |
703 | u8 idx[2] = { index_list[i].b.low, index_list[i].b.high }; | ||
704 | int j; | ||
705 | |||
706 | for (j = 0; j < 2; j++) { | ||
707 | if ((idx[j] & 0xf0) != 0xf0) | ||
708 | probe_hwif_init(ide_hwifs + idx[j]); | ||
709 | } | ||
710 | } | ||
711 | |||
712 | for (i = 0; i < 2; i++) { | ||
713 | u8 idx[2] = { index_list[i].b.low, index_list[i].b.high }; | ||
714 | int j; | ||
715 | |||
716 | for (j = 0; j < 2; j++) { | ||
717 | if ((idx[j] & 0xf0) != 0xf0) | ||
718 | ide_proc_register_port(ide_hwifs + idx[j]); | ||
719 | } | ||
720 | } | ||
721 | out: | 702 | out: |
722 | return ret; | 703 | return ret; |
723 | } | 704 | } |
@@ -742,9 +723,6 @@ static LIST_HEAD(ide_pci_drivers); | |||
742 | * hands the controllers off to the core PCI code to do the rest of | 723 | * hands the controllers off to the core PCI code to do the rest of |
743 | * the work. | 724 | * the work. |
744 | * | 725 | * |
745 | * The driver_data of the driver table must point to an ide_pci_device_t | ||
746 | * describing the interface. | ||
747 | * | ||
748 | * Returns are the same as for pci_register_driver | 726 | * Returns are the same as for pci_register_driver |
749 | */ | 727 | */ |
750 | 728 | ||
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 93644f82592..d08fb30768b 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c | |||
@@ -2797,11 +2797,12 @@ static void cma_remove_one(struct ib_device *device) | |||
2797 | 2797 | ||
2798 | static int cma_init(void) | 2798 | static int cma_init(void) |
2799 | { | 2799 | { |
2800 | int ret, low, high; | 2800 | int ret, low, high, remaining; |
2801 | 2801 | ||
2802 | get_random_bytes(&next_port, sizeof next_port); | 2802 | get_random_bytes(&next_port, sizeof next_port); |
2803 | inet_get_local_port_range(&low, &high); | 2803 | inet_get_local_port_range(&low, &high); |
2804 | next_port = ((unsigned int) next_port % (high - low)) + low; | 2804 | remaining = (high - low) + 1; |
2805 | next_port = ((unsigned int) next_port % remaining) + low; | ||
2805 | 2806 | ||
2806 | cma_wq = create_singlethread_workqueue("rdma_cm"); | 2807 | cma_wq = create_singlethread_workqueue("rdma_cm"); |
2807 | if (!cma_wq) | 2808 | if (!cma_wq) |
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c index a3409fdb307..7a7dab890f6 100644 --- a/drivers/infiniband/hw/ehca/ehca_main.c +++ b/drivers/infiniband/hw/ehca/ehca_main.c | |||
@@ -579,12 +579,12 @@ static ssize_t ehca_show_##name(struct device *dev, \ | |||
579 | \ | 579 | \ |
580 | rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL); \ | 580 | rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL); \ |
581 | if (!rblock) { \ | 581 | if (!rblock) { \ |
582 | dev_err(dev, "Can't allocate rblock memory."); \ | 582 | dev_err(dev, "Can't allocate rblock memory.\n"); \ |
583 | return 0; \ | 583 | return 0; \ |
584 | } \ | 584 | } \ |
585 | \ | 585 | \ |
586 | if (hipz_h_query_hca(shca->ipz_hca_handle, rblock) != H_SUCCESS) { \ | 586 | if (hipz_h_query_hca(shca->ipz_hca_handle, rblock) != H_SUCCESS) { \ |
587 | dev_err(dev, "Can't query device properties"); \ | 587 | dev_err(dev, "Can't query device properties\n"); \ |
588 | ehca_free_fw_ctrlblock(rblock); \ | 588 | ehca_free_fw_ctrlblock(rblock); \ |
589 | return 0; \ | 589 | return 0; \ |
590 | } \ | 590 | } \ |
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 1d62c8b88e1..e5b4e9bfbdc 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c | |||
@@ -495,7 +495,7 @@ static unsigned int evdev_poll(struct file *file, poll_table *wait) | |||
495 | #ifdef CONFIG_COMPAT | 495 | #ifdef CONFIG_COMPAT |
496 | 496 | ||
497 | #define BITS_PER_LONG_COMPAT (sizeof(compat_long_t) * 8) | 497 | #define BITS_PER_LONG_COMPAT (sizeof(compat_long_t) * 8) |
498 | #define NBITS_COMPAT(x) ((((x) - 1) / BITS_PER_LONG_COMPAT) + 1) | 498 | #define BITS_TO_LONGS_COMPAT(x) ((((x) - 1) / BITS_PER_LONG_COMPAT) + 1) |
499 | 499 | ||
500 | #ifdef __BIG_ENDIAN | 500 | #ifdef __BIG_ENDIAN |
501 | static int bits_to_user(unsigned long *bits, unsigned int maxbit, | 501 | static int bits_to_user(unsigned long *bits, unsigned int maxbit, |
@@ -504,7 +504,7 @@ static int bits_to_user(unsigned long *bits, unsigned int maxbit, | |||
504 | int len, i; | 504 | int len, i; |
505 | 505 | ||
506 | if (compat) { | 506 | if (compat) { |
507 | len = NBITS_COMPAT(maxbit) * sizeof(compat_long_t); | 507 | len = BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t); |
508 | if (len > maxlen) | 508 | if (len > maxlen) |
509 | len = maxlen; | 509 | len = maxlen; |
510 | 510 | ||
@@ -515,7 +515,7 @@ static int bits_to_user(unsigned long *bits, unsigned int maxbit, | |||
515 | sizeof(compat_long_t))) | 515 | sizeof(compat_long_t))) |
516 | return -EFAULT; | 516 | return -EFAULT; |
517 | } else { | 517 | } else { |
518 | len = NBITS(maxbit) * sizeof(long); | 518 | len = BITS_TO_LONGS(maxbit) * sizeof(long); |
519 | if (len > maxlen) | 519 | if (len > maxlen) |
520 | len = maxlen; | 520 | len = maxlen; |
521 | 521 | ||
@@ -530,8 +530,8 @@ static int bits_to_user(unsigned long *bits, unsigned int maxbit, | |||
530 | unsigned int maxlen, void __user *p, int compat) | 530 | unsigned int maxlen, void __user *p, int compat) |
531 | { | 531 | { |
532 | int len = compat ? | 532 | int len = compat ? |
533 | NBITS_COMPAT(maxbit) * sizeof(compat_long_t) : | 533 | BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t) : |
534 | NBITS(maxbit) * sizeof(long); | 534 | BITS_TO_LONGS(maxbit) * sizeof(long); |
535 | 535 | ||
536 | if (len > maxlen) | 536 | if (len > maxlen) |
537 | len = maxlen; | 537 | len = maxlen; |
@@ -545,7 +545,7 @@ static int bits_to_user(unsigned long *bits, unsigned int maxbit, | |||
545 | static int bits_to_user(unsigned long *bits, unsigned int maxbit, | 545 | static int bits_to_user(unsigned long *bits, unsigned int maxbit, |
546 | unsigned int maxlen, void __user *p, int compat) | 546 | unsigned int maxlen, void __user *p, int compat) |
547 | { | 547 | { |
548 | int len = NBITS(maxbit) * sizeof(long); | 548 | int len = BITS_TO_LONGS(maxbit) * sizeof(long); |
549 | 549 | ||
550 | if (len > maxlen) | 550 | if (len > maxlen) |
551 | len = maxlen; | 551 | len = maxlen; |
diff --git a/drivers/input/fixp-arith.h b/drivers/input/fixp-arith.h index ed3d2da0c48..3089d738232 100644 --- a/drivers/input/fixp-arith.h +++ b/drivers/input/fixp-arith.h | |||
@@ -24,7 +24,7 @@ | |||
24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
25 | * | 25 | * |
26 | * Should you need to contact me, the author, you can do so by | 26 | * Should you need to contact me, the author, you can do so by |
27 | * e-mail - mail your message to <deneux@ifrance.com> | 27 | * e-mail - mail your message to <johann.deneux@gmail.com> |
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <linux/types.h> | 30 | #include <linux/types.h> |
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c index 20896d5e5f0..bfc6061f155 100644 --- a/drivers/input/gameport/gameport.c +++ b/drivers/input/gameport/gameport.c | |||
@@ -136,7 +136,8 @@ static int gameport_measure_speed(struct gameport *gameport) | |||
136 | } | 136 | } |
137 | 137 | ||
138 | gameport_close(gameport); | 138 | gameport_close(gameport); |
139 | return (cpu_data[raw_smp_processor_id()].loops_per_jiffy * (unsigned long)HZ / (1000 / 50)) / (tx < 1 ? 1 : tx); | 139 | return (cpu_data(raw_smp_processor_id()).loops_per_jiffy * |
140 | (unsigned long)HZ / (1000 / 50)) / (tx < 1 ? 1 : tx); | ||
140 | 141 | ||
141 | #else | 142 | #else |
142 | 143 | ||
@@ -448,9 +449,8 @@ static int gameport_thread(void *nothing) | |||
448 | set_freezable(); | 449 | set_freezable(); |
449 | do { | 450 | do { |
450 | gameport_handle_event(); | 451 | gameport_handle_event(); |
451 | wait_event_interruptible(gameport_wait, | 452 | wait_event_freezable(gameport_wait, |
452 | kthread_should_stop() || !list_empty(&gameport_event_list)); | 453 | kthread_should_stop() || !list_empty(&gameport_event_list)); |
453 | try_to_freeze(); | ||
454 | } while (!kthread_should_stop()); | 454 | } while (!kthread_should_stop()); |
455 | 455 | ||
456 | printk(KERN_DEBUG "gameport: kgameportd exiting\n"); | 456 | printk(KERN_DEBUG "gameport: kgameportd exiting\n"); |
diff --git a/drivers/input/input.c b/drivers/input/input.c index 2f2b020cd62..307c7b5c2b3 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c | |||
@@ -584,10 +584,10 @@ static int input_default_setkeycode(struct input_dev *dev, | |||
584 | 584 | ||
585 | 585 | ||
586 | #define MATCH_BIT(bit, max) \ | 586 | #define MATCH_BIT(bit, max) \ |
587 | for (i = 0; i < NBITS(max); i++) \ | 587 | for (i = 0; i < BITS_TO_LONGS(max); i++) \ |
588 | if ((id->bit[i] & dev->bit[i]) != id->bit[i]) \ | 588 | if ((id->bit[i] & dev->bit[i]) != id->bit[i]) \ |
589 | break; \ | 589 | break; \ |
590 | if (i != NBITS(max)) \ | 590 | if (i != BITS_TO_LONGS(max)) \ |
591 | continue; | 591 | continue; |
592 | 592 | ||
593 | static const struct input_device_id *input_match_device(const struct input_device_id *id, | 593 | static const struct input_device_id *input_match_device(const struct input_device_id *id, |
@@ -698,7 +698,7 @@ static void input_seq_print_bitmap(struct seq_file *seq, const char *name, | |||
698 | { | 698 | { |
699 | int i; | 699 | int i; |
700 | 700 | ||
701 | for (i = NBITS(max) - 1; i > 0; i--) | 701 | for (i = BITS_TO_LONGS(max) - 1; i > 0; i--) |
702 | if (bitmap[i]) | 702 | if (bitmap[i]) |
703 | break; | 703 | break; |
704 | 704 | ||
@@ -892,7 +892,7 @@ static int input_print_modalias_bits(char *buf, int size, | |||
892 | 892 | ||
893 | len += snprintf(buf, max(size, 0), "%c", name); | 893 | len += snprintf(buf, max(size, 0), "%c", name); |
894 | for (i = min_bit; i < max_bit; i++) | 894 | for (i = min_bit; i < max_bit; i++) |
895 | if (bm[LONG(i)] & BIT(i)) | 895 | if (bm[BIT_WORD(i)] & BIT_MASK(i)) |
896 | len += snprintf(buf + len, max(size - len, 0), "%X,", i); | 896 | len += snprintf(buf + len, max(size - len, 0), "%X,", i); |
897 | return len; | 897 | return len; |
898 | } | 898 | } |
@@ -991,7 +991,7 @@ static int input_print_bitmap(char *buf, int buf_size, unsigned long *bitmap, | |||
991 | int i; | 991 | int i; |
992 | int len = 0; | 992 | int len = 0; |
993 | 993 | ||
994 | for (i = NBITS(max) - 1; i > 0; i--) | 994 | for (i = BITS_TO_LONGS(max) - 1; i > 0; i--) |
995 | if (bitmap[i]) | 995 | if (bitmap[i]) |
996 | break; | 996 | break; |
997 | 997 | ||
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c index 2b201f9aa02..22b2789ef58 100644 --- a/drivers/input/joydev.c +++ b/drivers/input/joydev.c | |||
@@ -844,8 +844,8 @@ static const struct input_device_id joydev_blacklist[] = { | |||
844 | { | 844 | { |
845 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | 845 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | |
846 | INPUT_DEVICE_ID_MATCH_KEYBIT, | 846 | INPUT_DEVICE_ID_MATCH_KEYBIT, |
847 | .evbit = { BIT(EV_KEY) }, | 847 | .evbit = { BIT_MASK(EV_KEY) }, |
848 | .keybit = { [LONG(BTN_TOUCH)] = BIT(BTN_TOUCH) }, | 848 | .keybit = { [BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH) }, |
849 | }, /* Avoid itouchpads, touchscreens and tablets */ | 849 | }, /* Avoid itouchpads, touchscreens and tablets */ |
850 | { } /* Terminating entry */ | 850 | { } /* Terminating entry */ |
851 | }; | 851 | }; |
@@ -854,20 +854,20 @@ static const struct input_device_id joydev_ids[] = { | |||
854 | { | 854 | { |
855 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | 855 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | |
856 | INPUT_DEVICE_ID_MATCH_ABSBIT, | 856 | INPUT_DEVICE_ID_MATCH_ABSBIT, |
857 | .evbit = { BIT(EV_ABS) }, | 857 | .evbit = { BIT_MASK(EV_ABS) }, |
858 | .absbit = { BIT(ABS_X) }, | 858 | .absbit = { BIT_MASK(ABS_X) }, |
859 | }, | 859 | }, |
860 | { | 860 | { |
861 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | 861 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | |
862 | INPUT_DEVICE_ID_MATCH_ABSBIT, | 862 | INPUT_DEVICE_ID_MATCH_ABSBIT, |
863 | .evbit = { BIT(EV_ABS) }, | 863 | .evbit = { BIT_MASK(EV_ABS) }, |
864 | .absbit = { BIT(ABS_WHEEL) }, | 864 | .absbit = { BIT_MASK(ABS_WHEEL) }, |
865 | }, | 865 | }, |
866 | { | 866 | { |
867 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | 867 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | |
868 | INPUT_DEVICE_ID_MATCH_ABSBIT, | 868 | INPUT_DEVICE_ID_MATCH_ABSBIT, |
869 | .evbit = { BIT(EV_ABS) }, | 869 | .evbit = { BIT_MASK(EV_ABS) }, |
870 | .absbit = { BIT(ABS_THROTTLE) }, | 870 | .absbit = { BIT_MASK(ABS_THROTTLE) }, |
871 | }, | 871 | }, |
872 | { } /* Terminating entry */ | 872 | { } /* Terminating entry */ |
873 | }; | 873 | }; |
diff --git a/drivers/input/joystick/a3d.c b/drivers/input/joystick/a3d.c index ff701ab10d7..52ba16f487c 100644 --- a/drivers/input/joystick/a3d.c +++ b/drivers/input/joystick/a3d.c | |||
@@ -326,14 +326,19 @@ static int a3d_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
326 | 326 | ||
327 | a3d->length = 33; | 327 | a3d->length = 33; |
328 | 328 | ||
329 | input_dev->evbit[0] |= BIT(EV_ABS) | BIT(EV_KEY) | BIT(EV_REL); | 329 | input_dev->evbit[0] |= BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY) | |
330 | input_dev->relbit[0] |= BIT(REL_X) | BIT(REL_Y); | 330 | BIT_MASK(EV_REL); |
331 | input_dev->absbit[0] |= BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_THROTTLE) | BIT(ABS_RUDDER) | 331 | input_dev->relbit[0] |= BIT_MASK(REL_X) | BIT_MASK(REL_Y); |
332 | | BIT(ABS_HAT0X) | BIT(ABS_HAT0Y) | BIT(ABS_HAT1X) | BIT(ABS_HAT1Y); | 332 | input_dev->absbit[0] |= BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | |
333 | input_dev->keybit[LONG(BTN_MOUSE)] |= BIT(BTN_RIGHT) | BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | 333 | BIT_MASK(ABS_THROTTLE) | BIT_MASK(ABS_RUDDER) | |
334 | | BIT(BTN_SIDE) | BIT(BTN_EXTRA); | 334 | BIT_MASK(ABS_HAT0X) | BIT_MASK(ABS_HAT0Y) | |
335 | input_dev->keybit[LONG(BTN_JOYSTICK)] |= BIT(BTN_TRIGGER) | BIT(BTN_THUMB) | BIT(BTN_TOP) | 335 | BIT_MASK(ABS_HAT1X) | BIT_MASK(ABS_HAT1Y); |
336 | | BIT(BTN_PINKIE); | 336 | input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_RIGHT) | |
337 | BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_MIDDLE) | | ||
338 | BIT_MASK(BTN_SIDE) | BIT_MASK(BTN_EXTRA); | ||
339 | input_dev->keybit[BIT_WORD(BTN_JOYSTICK)] |= | ||
340 | BIT_MASK(BTN_TRIGGER) | BIT_MASK(BTN_THUMB) | | ||
341 | BIT_MASK(BTN_TOP) | BIT_MASK(BTN_PINKIE); | ||
337 | 342 | ||
338 | a3d_read(a3d, data); | 343 | a3d_read(a3d, data); |
339 | 344 | ||
@@ -348,9 +353,10 @@ static int a3d_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
348 | } else { | 353 | } else { |
349 | a3d->length = 29; | 354 | a3d->length = 29; |
350 | 355 | ||
351 | input_dev->evbit[0] |= BIT(EV_KEY) | BIT(EV_REL); | 356 | input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
352 | input_dev->relbit[0] |= BIT(REL_X) | BIT(REL_Y); | 357 | input_dev->relbit[0] |= BIT_MASK(REL_X) | BIT_MASK(REL_Y); |
353 | input_dev->keybit[LONG(BTN_MOUSE)] |= BIT(BTN_RIGHT) | BIT(BTN_LEFT) | BIT(BTN_MIDDLE); | 358 | input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_RIGHT) | |
359 | BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_MIDDLE); | ||
354 | 360 | ||
355 | a3d_read(a3d, data); | 361 | a3d_read(a3d, data); |
356 | 362 | ||
diff --git a/drivers/input/joystick/adi.c b/drivers/input/joystick/adi.c index 28140c4a110..d1ca8a14950 100644 --- a/drivers/input/joystick/adi.c +++ b/drivers/input/joystick/adi.c | |||
@@ -431,7 +431,7 @@ static int adi_init_input(struct adi *adi, struct adi_port *port, int half) | |||
431 | input_dev->open = adi_open; | 431 | input_dev->open = adi_open; |
432 | input_dev->close = adi_close; | 432 | input_dev->close = adi_close; |
433 | 433 | ||
434 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 434 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
435 | 435 | ||
436 | for (i = 0; i < adi->axes10 + adi->axes8 + (adi->hats + (adi->pad != -1)) * 2; i++) | 436 | for (i = 0; i < adi->axes10 + adi->axes8 + (adi->hats + (adi->pad != -1)) * 2; i++) |
437 | set_bit(adi->abs[i], input_dev->absbit); | 437 | set_bit(adi->abs[i], input_dev->absbit); |
diff --git a/drivers/input/joystick/amijoy.c b/drivers/input/joystick/amijoy.c index b0f5541ec3e..5cf9f3610e6 100644 --- a/drivers/input/joystick/amijoy.c +++ b/drivers/input/joystick/amijoy.c | |||
@@ -137,9 +137,10 @@ static int __init amijoy_init(void) | |||
137 | amijoy_dev[i]->open = amijoy_open; | 137 | amijoy_dev[i]->open = amijoy_open; |
138 | amijoy_dev[i]->close = amijoy_close; | 138 | amijoy_dev[i]->close = amijoy_close; |
139 | 139 | ||
140 | amijoy_dev[i]->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 140 | amijoy_dev[i]->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
141 | amijoy_dev[i]->absbit[0] = BIT(ABS_X) | BIT(ABS_Y); | 141 | amijoy_dev[i]->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y); |
142 | amijoy_dev[i]->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 142 | amijoy_dev[i]->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | |
143 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); | ||
143 | for (j = 0; j < 2; j++) { | 144 | for (j = 0; j < 2; j++) { |
144 | amijoy_dev[i]->absmin[ABS_X + j] = -1; | 145 | amijoy_dev[i]->absmin[ABS_X + j] = -1; |
145 | amijoy_dev[i]->absmax[ABS_X + j] = 1; | 146 | amijoy_dev[i]->absmax[ABS_X + j] = 1; |
diff --git a/drivers/input/joystick/analog.c b/drivers/input/joystick/analog.c index bdd157c1ebf..15739880afc 100644 --- a/drivers/input/joystick/analog.c +++ b/drivers/input/joystick/analog.c | |||
@@ -456,7 +456,7 @@ static int analog_init_device(struct analog_port *port, struct analog *analog, i | |||
456 | input_dev->open = analog_open; | 456 | input_dev->open = analog_open; |
457 | input_dev->close = analog_close; | 457 | input_dev->close = analog_close; |
458 | 458 | ||
459 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 459 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
460 | 460 | ||
461 | for (i = j = 0; i < 4; i++) | 461 | for (i = j = 0; i < 4; i++) |
462 | if (analog->mask & (1 << i)) { | 462 | if (analog->mask & (1 << i)) { |
diff --git a/drivers/input/joystick/cobra.c b/drivers/input/joystick/cobra.c index d3352a849b8..55646a6d89f 100644 --- a/drivers/input/joystick/cobra.c +++ b/drivers/input/joystick/cobra.c | |||
@@ -218,7 +218,7 @@ static int cobra_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
218 | input_dev->open = cobra_open; | 218 | input_dev->open = cobra_open; |
219 | input_dev->close = cobra_close; | 219 | input_dev->close = cobra_close; |
220 | 220 | ||
221 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 221 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
222 | input_set_abs_params(input_dev, ABS_X, -1, 1, 0, 0); | 222 | input_set_abs_params(input_dev, ABS_X, -1, 1, 0, 0); |
223 | input_set_abs_params(input_dev, ABS_Y, -1, 1, 0, 0); | 223 | input_set_abs_params(input_dev, ABS_Y, -1, 1, 0, 0); |
224 | for (j = 0; cobra_btn[j]; j++) | 224 | for (j = 0; cobra_btn[j]; j++) |
diff --git a/drivers/input/joystick/db9.c b/drivers/input/joystick/db9.c index b069ee18e35..a6ca9d5e252 100644 --- a/drivers/input/joystick/db9.c +++ b/drivers/input/joystick/db9.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * Copyright (c) 1999-2001 Vojtech Pavlik | 4 | * Copyright (c) 1999-2001 Vojtech Pavlik |
5 | * | 5 | * |
6 | * Based on the work of: | 6 | * Based on the work of: |
7 | * Andree Borrmann Mats Sjövall | 7 | * Andree Borrmann Mats Sjövall |
8 | */ | 8 | */ |
9 | 9 | ||
10 | /* | 10 | /* |
@@ -631,7 +631,7 @@ static struct db9 __init *db9_probe(int parport, int mode) | |||
631 | input_dev->open = db9_open; | 631 | input_dev->open = db9_open; |
632 | input_dev->close = db9_close; | 632 | input_dev->close = db9_close; |
633 | 633 | ||
634 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 634 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
635 | for (j = 0; j < db9_mode->n_buttons; j++) | 635 | for (j = 0; j < db9_mode->n_buttons; j++) |
636 | set_bit(db9_mode->buttons[j], input_dev->keybit); | 636 | set_bit(db9_mode->buttons[j], input_dev->keybit); |
637 | for (j = 0; j < db9_mode->n_axis; j++) { | 637 | for (j = 0; j < db9_mode->n_axis; j++) { |
diff --git a/drivers/input/joystick/gamecon.c b/drivers/input/joystick/gamecon.c index 1a452e0e5f2..df2a9d02ca6 100644 --- a/drivers/input/joystick/gamecon.c +++ b/drivers/input/joystick/gamecon.c | |||
@@ -653,12 +653,12 @@ static int __init gc_setup_pad(struct gc *gc, int idx, int pad_type) | |||
653 | input_dev->close = gc_close; | 653 | input_dev->close = gc_close; |
654 | 654 | ||
655 | if (pad_type != GC_SNESMOUSE) { | 655 | if (pad_type != GC_SNESMOUSE) { |
656 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 656 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
657 | 657 | ||
658 | for (i = 0; i < 2; i++) | 658 | for (i = 0; i < 2; i++) |
659 | input_set_abs_params(input_dev, ABS_X + i, -1, 1, 0, 0); | 659 | input_set_abs_params(input_dev, ABS_X + i, -1, 1, 0, 0); |
660 | } else | 660 | } else |
661 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 661 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
662 | 662 | ||
663 | gc->pads[0] |= gc_status_bit[idx]; | 663 | gc->pads[0] |= gc_status_bit[idx]; |
664 | gc->pads[pad_type] |= gc_status_bit[idx]; | 664 | gc->pads[pad_type] |= gc_status_bit[idx]; |
diff --git a/drivers/input/joystick/gf2k.c b/drivers/input/joystick/gf2k.c index d514aebf755..1f6302c0eb3 100644 --- a/drivers/input/joystick/gf2k.c +++ b/drivers/input/joystick/gf2k.c | |||
@@ -315,7 +315,7 @@ static int gf2k_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
315 | input_dev->open = gf2k_open; | 315 | input_dev->open = gf2k_open; |
316 | input_dev->close = gf2k_close; | 316 | input_dev->close = gf2k_close; |
317 | 317 | ||
318 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 318 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
319 | 319 | ||
320 | for (i = 0; i < gf2k_axes[gf2k->id]; i++) | 320 | for (i = 0; i < gf2k_axes[gf2k->id]; i++) |
321 | set_bit(gf2k_abs[i], input_dev->absbit); | 321 | set_bit(gf2k_abs[i], input_dev->absbit); |
diff --git a/drivers/input/joystick/grip.c b/drivers/input/joystick/grip.c index 73eb5ab6f14..fd3853ab1aa 100644 --- a/drivers/input/joystick/grip.c +++ b/drivers/input/joystick/grip.c | |||
@@ -370,7 +370,7 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
370 | input_dev->open = grip_open; | 370 | input_dev->open = grip_open; |
371 | input_dev->close = grip_close; | 371 | input_dev->close = grip_close; |
372 | 372 | ||
373 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 373 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
374 | 374 | ||
375 | for (j = 0; (t = grip_abs[grip->mode[i]][j]) >= 0; j++) { | 375 | for (j = 0; (t = grip_abs[grip->mode[i]][j]) >= 0; j++) { |
376 | 376 | ||
diff --git a/drivers/input/joystick/grip_mp.c b/drivers/input/joystick/grip_mp.c index 4ed3a3eadf1..c57e21d68c0 100644 --- a/drivers/input/joystick/grip_mp.c +++ b/drivers/input/joystick/grip_mp.c | |||
@@ -606,7 +606,7 @@ static int register_slot(int slot, struct grip_mp *grip) | |||
606 | input_dev->open = grip_open; | 606 | input_dev->open = grip_open; |
607 | input_dev->close = grip_close; | 607 | input_dev->close = grip_close; |
608 | 608 | ||
609 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 609 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
610 | 610 | ||
611 | for (j = 0; (t = grip_abs[port->mode][j]) >= 0; j++) | 611 | for (j = 0; (t = grip_abs[port->mode][j]) >= 0; j++) |
612 | input_set_abs_params(input_dev, t, -1, 1, 0, 0); | 612 | input_set_abs_params(input_dev, t, -1, 1, 0, 0); |
diff --git a/drivers/input/joystick/guillemot.c b/drivers/input/joystick/guillemot.c index d4e8073caf2..aa6bfb3fb8c 100644 --- a/drivers/input/joystick/guillemot.c +++ b/drivers/input/joystick/guillemot.c | |||
@@ -238,7 +238,7 @@ static int guillemot_connect(struct gameport *gameport, struct gameport_driver * | |||
238 | input_dev->open = guillemot_open; | 238 | input_dev->open = guillemot_open; |
239 | input_dev->close = guillemot_close; | 239 | input_dev->close = guillemot_close; |
240 | 240 | ||
241 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 241 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
242 | 242 | ||
243 | for (i = 0; (t = guillemot->type->abs[i]) >= 0; i++) | 243 | for (i = 0; (t = guillemot->type->abs[i]) >= 0; i++) |
244 | input_set_abs_params(input_dev, t, 0, 255, 0, 0); | 244 | input_set_abs_params(input_dev, t, 0, 255, 0, 0); |
diff --git a/drivers/input/joystick/iforce/Makefile b/drivers/input/joystick/iforce/Makefile index 17ae42bf9ff..74daff49ab6 100644 --- a/drivers/input/joystick/iforce/Makefile +++ b/drivers/input/joystick/iforce/Makefile | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Makefile for the I-Force driver | 2 | # Makefile for the I-Force driver |
3 | # | 3 | # |
4 | # By Johann Deneux <deneux@ifrance.com> | 4 | # By Johann Deneux <johann.deneux@gmail.com> |
5 | # | 5 | # |
6 | 6 | ||
7 | # Goal definition | 7 | # Goal definition |
diff --git a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c index 682244b1c04..6f826b37d9a 100644 --- a/drivers/input/joystick/iforce/iforce-main.c +++ b/drivers/input/joystick/iforce/iforce-main.c | |||
@@ -389,7 +389,8 @@ int iforce_init_device(struct iforce *iforce) | |||
389 | * Set input device bitfields and ranges. | 389 | * Set input device bitfields and ranges. |
390 | */ | 390 | */ |
391 | 391 | ||
392 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_FF_STATUS); | 392 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) | |
393 | BIT_MASK(EV_FF_STATUS); | ||
393 | 394 | ||
394 | for (i = 0; iforce->type->btn[i] >= 0; i++) | 395 | for (i = 0; iforce->type->btn[i] >= 0; i++) |
395 | set_bit(iforce->type->btn[i], input_dev->keybit); | 396 | set_bit(iforce->type->btn[i], input_dev->keybit); |
diff --git a/drivers/input/joystick/iforce/iforce.h b/drivers/input/joystick/iforce/iforce.h index 40a853ac21c..a964a7cfd21 100644 --- a/drivers/input/joystick/iforce/iforce.h +++ b/drivers/input/joystick/iforce/iforce.h | |||
@@ -62,13 +62,13 @@ | |||
62 | #define FF_CORE_IS_PLAYED 3 /* Effect is currently being played */ | 62 | #define FF_CORE_IS_PLAYED 3 /* Effect is currently being played */ |
63 | #define FF_CORE_SHOULD_PLAY 4 /* User wants the effect to be played */ | 63 | #define FF_CORE_SHOULD_PLAY 4 /* User wants the effect to be played */ |
64 | #define FF_CORE_UPDATE 5 /* Effect is being updated */ | 64 | #define FF_CORE_UPDATE 5 /* Effect is being updated */ |
65 | #define FF_MODCORE_MAX 5 | 65 | #define FF_MODCORE_CNT 6 |
66 | 66 | ||
67 | struct iforce_core_effect { | 67 | struct iforce_core_effect { |
68 | /* Information about where modifiers are stored in the device's memory */ | 68 | /* Information about where modifiers are stored in the device's memory */ |
69 | struct resource mod1_chunk; | 69 | struct resource mod1_chunk; |
70 | struct resource mod2_chunk; | 70 | struct resource mod2_chunk; |
71 | unsigned long flags[NBITS(FF_MODCORE_MAX)]; | 71 | unsigned long flags[BITS_TO_LONGS(FF_MODCORE_CNT)]; |
72 | }; | 72 | }; |
73 | 73 | ||
74 | #define FF_CMD_EFFECT 0x010e | 74 | #define FF_CMD_EFFECT 0x010e |
diff --git a/drivers/input/joystick/interact.c b/drivers/input/joystick/interact.c index 1aec1e9d7c5..bc8ea95dfd0 100644 --- a/drivers/input/joystick/interact.c +++ b/drivers/input/joystick/interact.c | |||
@@ -269,7 +269,7 @@ static int interact_connect(struct gameport *gameport, struct gameport_driver *d | |||
269 | input_dev->open = interact_open; | 269 | input_dev->open = interact_open; |
270 | input_dev->close = interact_close; | 270 | input_dev->close = interact_close; |
271 | 271 | ||
272 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 272 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
273 | 273 | ||
274 | for (i = 0; (t = interact_type[interact->type].abs[i]) >= 0; i++) { | 274 | for (i = 0; (t = interact_type[interact->type].abs[i]) >= 0; i++) { |
275 | set_bit(t, input_dev->absbit); | 275 | set_bit(t, input_dev->absbit); |
diff --git a/drivers/input/joystick/magellan.c b/drivers/input/joystick/magellan.c index b35604ee43a..54e676948eb 100644 --- a/drivers/input/joystick/magellan.c +++ b/drivers/input/joystick/magellan.c | |||
@@ -170,7 +170,7 @@ static int magellan_connect(struct serio *serio, struct serio_driver *drv) | |||
170 | input_dev->id.version = 0x0100; | 170 | input_dev->id.version = 0x0100; |
171 | input_dev->dev.parent = &serio->dev; | 171 | input_dev->dev.parent = &serio->dev; |
172 | 172 | ||
173 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 173 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
174 | 174 | ||
175 | for (i = 0; i < 9; i++) | 175 | for (i = 0; i < 9; i++) |
176 | set_bit(magellan_buttons[i], input_dev->keybit); | 176 | set_bit(magellan_buttons[i], input_dev->keybit); |
diff --git a/drivers/input/joystick/sidewinder.c b/drivers/input/joystick/sidewinder.c index 2adf73f63c9..7b4865fdee5 100644 --- a/drivers/input/joystick/sidewinder.c +++ b/drivers/input/joystick/sidewinder.c | |||
@@ -758,7 +758,7 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
758 | input_dev->open = sw_open; | 758 | input_dev->open = sw_open; |
759 | input_dev->close = sw_close; | 759 | input_dev->close = sw_close; |
760 | 760 | ||
761 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 761 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
762 | 762 | ||
763 | for (j = 0; (bits = sw_bit[sw->type][j]); j++) { | 763 | for (j = 0; (bits = sw_bit[sw->type][j]); j++) { |
764 | code = sw_abs[sw->type][j]; | 764 | code = sw_abs[sw->type][j]; |
diff --git a/drivers/input/joystick/spaceball.c b/drivers/input/joystick/spaceball.c index abb7c4cf54a..d4087fd4965 100644 --- a/drivers/input/joystick/spaceball.c +++ b/drivers/input/joystick/spaceball.c | |||
@@ -228,18 +228,23 @@ static int spaceball_connect(struct serio *serio, struct serio_driver *drv) | |||
228 | input_dev->id.version = 0x0100; | 228 | input_dev->id.version = 0x0100; |
229 | input_dev->dev.parent = &serio->dev; | 229 | input_dev->dev.parent = &serio->dev; |
230 | 230 | ||
231 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 231 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
232 | 232 | ||
233 | switch (id) { | 233 | switch (id) { |
234 | case SPACEBALL_4000FLX: | 234 | case SPACEBALL_4000FLX: |
235 | case SPACEBALL_4000FLX_L: | 235 | case SPACEBALL_4000FLX_L: |
236 | input_dev->keybit[LONG(BTN_0)] |= BIT(BTN_9); | 236 | input_dev->keybit[BIT_WORD(BTN_0)] |= BIT_MASK(BTN_9); |
237 | input_dev->keybit[LONG(BTN_A)] |= BIT(BTN_A) | BIT(BTN_B) | BIT(BTN_C) | BIT(BTN_MODE); | 237 | input_dev->keybit[BIT_WORD(BTN_A)] |= BIT_MASK(BTN_A) | |
238 | BIT_MASK(BTN_B) | BIT_MASK(BTN_C) | | ||
239 | BIT_MASK(BTN_MODE); | ||
238 | default: | 240 | default: |
239 | input_dev->keybit[LONG(BTN_0)] |= BIT(BTN_2) | BIT(BTN_3) | BIT(BTN_4) | 241 | input_dev->keybit[BIT_WORD(BTN_0)] |= BIT_MASK(BTN_2) | |
240 | | BIT(BTN_5) | BIT(BTN_6) | BIT(BTN_7) | BIT(BTN_8); | 242 | BIT_MASK(BTN_3) | BIT_MASK(BTN_4) | |
243 | BIT_MASK(BTN_5) | BIT_MASK(BTN_6) | | ||
244 | BIT_MASK(BTN_7) | BIT_MASK(BTN_8); | ||
241 | case SPACEBALL_3003C: | 245 | case SPACEBALL_3003C: |
242 | input_dev->keybit[LONG(BTN_0)] |= BIT(BTN_1) | BIT(BTN_8); | 246 | input_dev->keybit[BIT_WORD(BTN_0)] |= BIT_MASK(BTN_1) | |
247 | BIT_MASK(BTN_8); | ||
243 | } | 248 | } |
244 | 249 | ||
245 | for (i = 0; i < 3; i++) { | 250 | for (i = 0; i < 3; i++) { |
diff --git a/drivers/input/joystick/spaceorb.c b/drivers/input/joystick/spaceorb.c index c4937f1e837..f7ce4004f4b 100644 --- a/drivers/input/joystick/spaceorb.c +++ b/drivers/input/joystick/spaceorb.c | |||
@@ -185,7 +185,7 @@ static int spaceorb_connect(struct serio *serio, struct serio_driver *drv) | |||
185 | input_dev->id.version = 0x0100; | 185 | input_dev->id.version = 0x0100; |
186 | input_dev->dev.parent = &serio->dev; | 186 | input_dev->dev.parent = &serio->dev; |
187 | 187 | ||
188 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 188 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
189 | 189 | ||
190 | for (i = 0; i < 6; i++) | 190 | for (i = 0; i < 6; i++) |
191 | set_bit(spaceorb_buttons[i], input_dev->keybit); | 191 | set_bit(spaceorb_buttons[i], input_dev->keybit); |
diff --git a/drivers/input/joystick/stinger.c b/drivers/input/joystick/stinger.c index 8581ee991d4..baa10b2f7ba 100644 --- a/drivers/input/joystick/stinger.c +++ b/drivers/input/joystick/stinger.c | |||
@@ -156,10 +156,11 @@ static int stinger_connect(struct serio *serio, struct serio_driver *drv) | |||
156 | input_dev->id.version = 0x0100; | 156 | input_dev->id.version = 0x0100; |
157 | input_dev->dev.parent = &serio->dev; | 157 | input_dev->dev.parent = &serio->dev; |
158 | 158 | ||
159 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 159 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
160 | input_dev->keybit[LONG(BTN_A)] = BIT(BTN_A) | BIT(BTN_B) | BIT(BTN_C) | BIT(BTN_X) | | 160 | input_dev->keybit[BIT_WORD(BTN_A)] = BIT_MASK(BTN_A) | BIT_MASK(BTN_B) | |
161 | BIT(BTN_Y) | BIT(BTN_Z) | BIT(BTN_TL) | BIT(BTN_TR) | | 161 | BIT_MASK(BTN_C) | BIT_MASK(BTN_X) | BIT_MASK(BTN_Y) | |
162 | BIT(BTN_START) | BIT(BTN_SELECT); | 162 | BIT_MASK(BTN_Z) | BIT_MASK(BTN_TL) | BIT_MASK(BTN_TR) | |
163 | BIT_MASK(BTN_START) | BIT_MASK(BTN_SELECT); | ||
163 | input_set_abs_params(input_dev, ABS_X, -64, 64, 0, 4); | 164 | input_set_abs_params(input_dev, ABS_X, -64, 64, 0, 4); |
164 | input_set_abs_params(input_dev, ABS_Y, -64, 64, 0, 4); | 165 | input_set_abs_params(input_dev, ABS_Y, -64, 64, 0, 4); |
165 | 166 | ||
diff --git a/drivers/input/joystick/tmdc.c b/drivers/input/joystick/tmdc.c index 3b36ee04f72..0feeb8acb53 100644 --- a/drivers/input/joystick/tmdc.c +++ b/drivers/input/joystick/tmdc.c | |||
@@ -333,7 +333,7 @@ static int tmdc_setup_port(struct tmdc *tmdc, int idx, unsigned char *data) | |||
333 | input_dev->open = tmdc_open; | 333 | input_dev->open = tmdc_open; |
334 | input_dev->close = tmdc_close; | 334 | input_dev->close = tmdc_close; |
335 | 335 | ||
336 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 336 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
337 | 337 | ||
338 | for (i = 0; i < port->absc && i < TMDC_ABS; i++) | 338 | for (i = 0; i < port->absc && i < TMDC_ABS; i++) |
339 | if (port->abs[i] >= 0) | 339 | if (port->abs[i] >= 0) |
diff --git a/drivers/input/joystick/turbografx.c b/drivers/input/joystick/turbografx.c index 8381c6f1437..bbebd4e2ad7 100644 --- a/drivers/input/joystick/turbografx.c +++ b/drivers/input/joystick/turbografx.c | |||
@@ -229,7 +229,7 @@ static struct tgfx __init *tgfx_probe(int parport, int *n_buttons, int n_devs) | |||
229 | input_dev->open = tgfx_open; | 229 | input_dev->open = tgfx_open; |
230 | input_dev->close = tgfx_close; | 230 | input_dev->close = tgfx_close; |
231 | 231 | ||
232 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 232 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
233 | input_set_abs_params(input_dev, ABS_X, -1, 1, 0, 0); | 233 | input_set_abs_params(input_dev, ABS_X, -1, 1, 0, 0); |
234 | input_set_abs_params(input_dev, ABS_Y, -1, 1, 0, 0); | 234 | input_set_abs_params(input_dev, ABS_Y, -1, 1, 0, 0); |
235 | 235 | ||
diff --git a/drivers/input/joystick/twidjoy.c b/drivers/input/joystick/twidjoy.c index c91504ec38e..1085c841fec 100644 --- a/drivers/input/joystick/twidjoy.c +++ b/drivers/input/joystick/twidjoy.c | |||
@@ -207,7 +207,7 @@ static int twidjoy_connect(struct serio *serio, struct serio_driver *drv) | |||
207 | input_dev->id.version = 0x0100; | 207 | input_dev->id.version = 0x0100; |
208 | input_dev->dev.parent = &serio->dev; | 208 | input_dev->dev.parent = &serio->dev; |
209 | 209 | ||
210 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 210 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
211 | input_set_abs_params(input_dev, ABS_X, -50, 50, 4, 4); | 211 | input_set_abs_params(input_dev, ABS_X, -50, 50, 4, 4); |
212 | input_set_abs_params(input_dev, ABS_Y, -50, 50, 4, 4); | 212 | input_set_abs_params(input_dev, ABS_Y, -50, 50, 4, 4); |
213 | 213 | ||
diff --git a/drivers/input/joystick/warrior.c b/drivers/input/joystick/warrior.c index 4e85f72eefd..e928b6e3724 100644 --- a/drivers/input/joystick/warrior.c +++ b/drivers/input/joystick/warrior.c | |||
@@ -162,9 +162,11 @@ static int warrior_connect(struct serio *serio, struct serio_driver *drv) | |||
162 | input_dev->id.version = 0x0100; | 162 | input_dev->id.version = 0x0100; |
163 | input_dev->dev.parent = &serio->dev; | 163 | input_dev->dev.parent = &serio->dev; |
164 | 164 | ||
165 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL) | BIT(EV_ABS); | 165 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL) | |
166 | input_dev->keybit[LONG(BTN_TRIGGER)] = BIT(BTN_TRIGGER) | BIT(BTN_THUMB) | BIT(BTN_TOP) | BIT(BTN_TOP2); | 166 | BIT_MASK(EV_ABS); |
167 | input_dev->relbit[0] = BIT(REL_DIAL); | 167 | input_dev->keybit[BIT_WORD(BTN_TRIGGER)] = BIT_MASK(BTN_TRIGGER) | |
168 | BIT_MASK(BTN_THUMB) | BIT_MASK(BTN_TOP) | BIT_MASK(BTN_TOP2); | ||
169 | input_dev->relbit[0] = BIT_MASK(REL_DIAL); | ||
168 | input_set_abs_params(input_dev, ABS_X, -64, 64, 0, 8); | 170 | input_set_abs_params(input_dev, ABS_X, -64, 64, 0, 8); |
169 | input_set_abs_params(input_dev, ABS_Y, -64, 64, 0, 8); | 171 | input_set_abs_params(input_dev, ABS_Y, -64, 64, 0, 8); |
170 | input_set_abs_params(input_dev, ABS_THROTTLE, -112, 112, 0, 0); | 172 | input_set_abs_params(input_dev, ABS_THROTTLE, -112, 112, 0, 0); |
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index 623629a69b0..6dd375825a1 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c | |||
@@ -658,7 +658,7 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id | |||
658 | input_dev->open = xpad_open; | 658 | input_dev->open = xpad_open; |
659 | input_dev->close = xpad_close; | 659 | input_dev->close = xpad_close; |
660 | 660 | ||
661 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 661 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
662 | 662 | ||
663 | /* set up buttons */ | 663 | /* set up buttons */ |
664 | for (i = 0; xpad_btn[i] >= 0; i++) | 664 | for (i = 0; xpad_btn[i] >= 0; i++) |
diff --git a/drivers/input/keyboard/aaed2000_kbd.c b/drivers/input/keyboard/aaed2000_kbd.c index 63d6ead6b87..72abc196ce6 100644 --- a/drivers/input/keyboard/aaed2000_kbd.c +++ b/drivers/input/keyboard/aaed2000_kbd.c | |||
@@ -125,7 +125,7 @@ static int __devinit aaedkbd_probe(struct platform_device *pdev) | |||
125 | input_dev->id.version = 0x0100; | 125 | input_dev->id.version = 0x0100; |
126 | input_dev->dev.parent = &pdev->dev; | 126 | input_dev->dev.parent = &pdev->dev; |
127 | 127 | ||
128 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 128 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
129 | input_dev->keycode = aaedkbd->keycode; | 129 | input_dev->keycode = aaedkbd->keycode; |
130 | input_dev->keycodesize = sizeof(unsigned char); | 130 | input_dev->keycodesize = sizeof(unsigned char); |
131 | input_dev->keycodemax = ARRAY_SIZE(aaedkbd_keycode); | 131 | input_dev->keycodemax = ARRAY_SIZE(aaedkbd_keycode); |
diff --git a/drivers/input/keyboard/amikbd.c b/drivers/input/keyboard/amikbd.c index c67e84ec2d6..81bf7562aca 100644 --- a/drivers/input/keyboard/amikbd.c +++ b/drivers/input/keyboard/amikbd.c | |||
@@ -209,7 +209,7 @@ static int __init amikbd_init(void) | |||
209 | amikbd_dev->id.product = 0x0001; | 209 | amikbd_dev->id.product = 0x0001; |
210 | amikbd_dev->id.version = 0x0100; | 210 | amikbd_dev->id.version = 0x0100; |
211 | 211 | ||
212 | amikbd_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 212 | amikbd_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
213 | 213 | ||
214 | for (i = 0; i < 0x78; i++) | 214 | for (i = 0; i < 0x78; i++) |
215 | set_bit(i, amikbd_dev->keybit); | 215 | set_bit(i, amikbd_dev->keybit); |
diff --git a/drivers/input/keyboard/atakbd.c b/drivers/input/keyboard/atakbd.c index a1800151b6c..4e92100c56a 100644 --- a/drivers/input/keyboard/atakbd.c +++ b/drivers/input/keyboard/atakbd.c | |||
@@ -237,7 +237,7 @@ static int __init atakbd_init(void) | |||
237 | atakbd_dev->id.product = 0x0001; | 237 | atakbd_dev->id.product = 0x0001; |
238 | atakbd_dev->id.version = 0x0100; | 238 | atakbd_dev->id.version = 0x0100; |
239 | 239 | ||
240 | atakbd_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 240 | atakbd_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
241 | atakbd_dev->keycode = atakbd_keycode; | 241 | atakbd_dev->keycode = atakbd_keycode; |
242 | atakbd_dev->keycodesize = sizeof(unsigned char); | 242 | atakbd_dev->keycodesize = sizeof(unsigned char); |
243 | atakbd_dev->keycodemax = ARRAY_SIZE(atakbd_keycode); | 243 | atakbd_dev->keycodemax = ARRAY_SIZE(atakbd_keycode); |
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index 41fc3d03b6e..b39c5b31e62 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
@@ -900,27 +900,32 @@ static void atkbd_set_device_attrs(struct atkbd *atkbd) | |||
900 | 900 | ||
901 | input_set_drvdata(input_dev, atkbd); | 901 | input_set_drvdata(input_dev, atkbd); |
902 | 902 | ||
903 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_MSC); | 903 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | |
904 | BIT_MASK(EV_MSC); | ||
904 | 905 | ||
905 | if (atkbd->write) { | 906 | if (atkbd->write) { |
906 | input_dev->evbit[0] |= BIT(EV_LED); | 907 | input_dev->evbit[0] |= BIT_MASK(EV_LED); |
907 | input_dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL); | 908 | input_dev->ledbit[0] = BIT_MASK(LED_NUML) | |
909 | BIT_MASK(LED_CAPSL) | BIT_MASK(LED_SCROLLL); | ||
908 | } | 910 | } |
909 | 911 | ||
910 | if (atkbd->extra) | 912 | if (atkbd->extra) |
911 | input_dev->ledbit[0] |= BIT(LED_COMPOSE) | BIT(LED_SUSPEND) | | 913 | input_dev->ledbit[0] |= BIT_MASK(LED_COMPOSE) | |
912 | BIT(LED_SLEEP) | BIT(LED_MUTE) | BIT(LED_MISC); | 914 | BIT_MASK(LED_SUSPEND) | BIT_MASK(LED_SLEEP) | |
915 | BIT_MASK(LED_MUTE) | BIT_MASK(LED_MISC); | ||
913 | 916 | ||
914 | if (!atkbd->softrepeat) { | 917 | if (!atkbd->softrepeat) { |
915 | input_dev->rep[REP_DELAY] = 250; | 918 | input_dev->rep[REP_DELAY] = 250; |
916 | input_dev->rep[REP_PERIOD] = 33; | 919 | input_dev->rep[REP_PERIOD] = 33; |
917 | } | 920 | } |
918 | 921 | ||
919 | input_dev->mscbit[0] = atkbd->softraw ? BIT(MSC_SCAN) : BIT(MSC_RAW) | BIT(MSC_SCAN); | 922 | input_dev->mscbit[0] = atkbd->softraw ? BIT_MASK(MSC_SCAN) : |
923 | BIT_MASK(MSC_RAW) | BIT_MASK(MSC_SCAN); | ||
920 | 924 | ||
921 | if (atkbd->scroll) { | 925 | if (atkbd->scroll) { |
922 | input_dev->evbit[0] |= BIT(EV_REL); | 926 | input_dev->evbit[0] |= BIT_MASK(EV_REL); |
923 | input_dev->relbit[0] = BIT(REL_WHEEL) | BIT(REL_HWHEEL); | 927 | input_dev->relbit[0] = BIT_MASK(REL_WHEEL) | |
928 | BIT_MASK(REL_HWHEEL); | ||
924 | set_bit(BTN_MIDDLE, input_dev->keybit); | 929 | set_bit(BTN_MIDDLE, input_dev->keybit); |
925 | } | 930 | } |
926 | 931 | ||
diff --git a/drivers/input/keyboard/corgikbd.c b/drivers/input/keyboard/corgikbd.c index 6578bfff644..790fed368aa 100644 --- a/drivers/input/keyboard/corgikbd.c +++ b/drivers/input/keyboard/corgikbd.c | |||
@@ -325,7 +325,8 @@ static int __init corgikbd_probe(struct platform_device *pdev) | |||
325 | input_dev->id.version = 0x0100; | 325 | input_dev->id.version = 0x0100; |
326 | input_dev->dev.parent = &pdev->dev; | 326 | input_dev->dev.parent = &pdev->dev; |
327 | 327 | ||
328 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_PWR) | BIT(EV_SW); | 328 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | |
329 | BIT_MASK(EV_PWR) | BIT_MASK(EV_SW); | ||
329 | input_dev->keycode = corgikbd->keycode; | 330 | input_dev->keycode = corgikbd->keycode; |
330 | input_dev->keycodesize = sizeof(unsigned char); | 331 | input_dev->keycodesize = sizeof(unsigned char); |
331 | input_dev->keycodemax = ARRAY_SIZE(corgikbd_keycode); | 332 | input_dev->keycodemax = ARRAY_SIZE(corgikbd_keycode); |
diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index e2a3293bc67..3eddf52a0bb 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c | |||
@@ -62,7 +62,7 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev) | |||
62 | 62 | ||
63 | platform_set_drvdata(pdev, input); | 63 | platform_set_drvdata(pdev, input); |
64 | 64 | ||
65 | input->evbit[0] = BIT(EV_KEY); | 65 | input->evbit[0] = BIT_MASK(EV_KEY); |
66 | 66 | ||
67 | input->name = pdev->name; | 67 | input->name = pdev->name; |
68 | input->phys = "gpio-keys/input0"; | 68 | input->phys = "gpio-keys/input0"; |
diff --git a/drivers/input/keyboard/hil_kbd.c b/drivers/input/keyboard/hil_kbd.c index cdd254f2e6c..adbf29f0169 100644 --- a/drivers/input/keyboard/hil_kbd.c +++ b/drivers/input/keyboard/hil_kbd.c | |||
@@ -323,8 +323,9 @@ static int hil_kbd_connect(struct serio *serio, struct serio_driver *drv) | |||
323 | goto bail2; | 323 | goto bail2; |
324 | } | 324 | } |
325 | 325 | ||
326 | kbd->dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 326 | kbd->dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
327 | kbd->dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL); | 327 | kbd->dev->ledbit[0] = BIT_MASK(LED_NUML) | BIT_MASK(LED_CAPSL) | |
328 | BIT_MASK(LED_SCROLLL); | ||
328 | kbd->dev->keycodemax = HIL_KEYCODES_SET1_TBLSIZE; | 329 | kbd->dev->keycodemax = HIL_KEYCODES_SET1_TBLSIZE; |
329 | kbd->dev->keycodesize = sizeof(hil_kbd_set1[0]); | 330 | kbd->dev->keycodesize = sizeof(hil_kbd_set1[0]); |
330 | kbd->dev->keycode = hil_kbd_set1; | 331 | kbd->dev->keycode = hil_kbd_set1; |
diff --git a/drivers/input/keyboard/hilkbd.c b/drivers/input/keyboard/hilkbd.c index 499b6974457..50d80ecf0b8 100644 --- a/drivers/input/keyboard/hilkbd.c +++ b/drivers/input/keyboard/hilkbd.c | |||
@@ -266,8 +266,9 @@ hil_keyb_init(void) | |||
266 | if (hphilkeyb_keycode[i] != KEY_RESERVED) | 266 | if (hphilkeyb_keycode[i] != KEY_RESERVED) |
267 | set_bit(hphilkeyb_keycode[i], hil_dev.dev->keybit); | 267 | set_bit(hphilkeyb_keycode[i], hil_dev.dev->keybit); |
268 | 268 | ||
269 | hil_dev.dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 269 | hil_dev.dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
270 | hil_dev.dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL); | 270 | hil_dev.dev->ledbit[0] = BIT_MASK(LED_NUML) | BIT_MASK(LED_CAPSL) | |
271 | BIT_MASK(LED_SCROLLL); | ||
271 | hil_dev.dev->keycodemax = HIL_KEYCODES_SET1_TBLSIZE; | 272 | hil_dev.dev->keycodemax = HIL_KEYCODES_SET1_TBLSIZE; |
272 | hil_dev.dev->keycodesize= sizeof(hphilkeyb_keycode[0]); | 273 | hil_dev.dev->keycodesize= sizeof(hphilkeyb_keycode[0]); |
273 | hil_dev.dev->keycode = hphilkeyb_keycode; | 274 | hil_dev.dev->keycode = hphilkeyb_keycode; |
diff --git a/drivers/input/keyboard/locomokbd.c b/drivers/input/keyboard/locomokbd.c index 7a41b271f22..5a0ca18d675 100644 --- a/drivers/input/keyboard/locomokbd.c +++ b/drivers/input/keyboard/locomokbd.c | |||
@@ -233,7 +233,7 @@ static int locomokbd_probe(struct locomo_dev *dev) | |||
233 | input_dev->id.version = 0x0100; | 233 | input_dev->id.version = 0x0100; |
234 | input_dev->dev.parent = &dev->dev; | 234 | input_dev->dev.parent = &dev->dev; |
235 | 235 | ||
236 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 236 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
237 | input_dev->keycode = locomokbd->keycode; | 237 | input_dev->keycode = locomokbd->keycode; |
238 | input_dev->keycodesize = sizeof(unsigned char); | 238 | input_dev->keycodesize = sizeof(unsigned char); |
239 | input_dev->keycodemax = ARRAY_SIZE(locomokbd_keycode); | 239 | input_dev->keycodemax = ARRAY_SIZE(locomokbd_keycode); |
diff --git a/drivers/input/keyboard/newtonkbd.c b/drivers/input/keyboard/newtonkbd.c index b97a41e3ee5..48d1cab0aa1 100644 --- a/drivers/input/keyboard/newtonkbd.c +++ b/drivers/input/keyboard/newtonkbd.c | |||
@@ -106,7 +106,7 @@ static int nkbd_connect(struct serio *serio, struct serio_driver *drv) | |||
106 | input_dev->id.version = 0x0100; | 106 | input_dev->id.version = 0x0100; |
107 | input_dev->dev.parent = &serio->dev; | 107 | input_dev->dev.parent = &serio->dev; |
108 | 108 | ||
109 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 109 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
110 | input_dev->keycode = nkbd->keycode; | 110 | input_dev->keycode = nkbd->keycode; |
111 | input_dev->keycodesize = sizeof(unsigned char); | 111 | input_dev->keycodesize = sizeof(unsigned char); |
112 | input_dev->keycodemax = ARRAY_SIZE(nkbd_keycode); | 112 | input_dev->keycodemax = ARRAY_SIZE(nkbd_keycode); |
diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c index 76f1969552c..babc913d549 100644 --- a/drivers/input/keyboard/omap-keypad.c +++ b/drivers/input/keyboard/omap-keypad.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * OMAP Keypad Driver | 4 | * OMAP Keypad Driver |
5 | * | 5 | * |
6 | * Copyright (C) 2003 Nokia Corporation | 6 | * Copyright (C) 2003 Nokia Corporation |
7 | * Written by Timo Teräs <ext-timo.teras@nokia.com> | 7 | * Written by Timo Teräs <ext-timo.teras@nokia.com> |
8 | * | 8 | * |
9 | * Added support for H2 & H3 Keypad | 9 | * Added support for H2 & H3 Keypad |
10 | * Copyright (C) 2004 Texas Instruments | 10 | * Copyright (C) 2004 Texas Instruments |
@@ -481,6 +481,6 @@ static void __exit omap_kp_exit(void) | |||
481 | module_init(omap_kp_init); | 481 | module_init(omap_kp_init); |
482 | module_exit(omap_kp_exit); | 482 | module_exit(omap_kp_exit); |
483 | 483 | ||
484 | MODULE_AUTHOR("Timo Teräs"); | 484 | MODULE_AUTHOR("Timo Teräs"); |
485 | MODULE_DESCRIPTION("OMAP Keypad Driver"); | 485 | MODULE_DESCRIPTION("OMAP Keypad Driver"); |
486 | MODULE_LICENSE("GPL"); | 486 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/input/keyboard/pxa27x_keyboard.c b/drivers/input/keyboard/pxa27x_keyboard.c index b7061aa3881..bdd64ee4c5c 100644 --- a/drivers/input/keyboard/pxa27x_keyboard.c +++ b/drivers/input/keyboard/pxa27x_keyboard.c | |||
@@ -183,8 +183,9 @@ static int __devinit pxakbd_probe(struct platform_device *pdev) | |||
183 | input_dev->close = pxakbd_close; | 183 | input_dev->close = pxakbd_close; |
184 | input_dev->dev.parent = &pdev->dev; | 184 | input_dev->dev.parent = &pdev->dev; |
185 | 185 | ||
186 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_REL); | 186 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | |
187 | input_dev->relbit[LONG(REL_WHEEL)] = BIT(REL_WHEEL); | 187 | BIT_MASK(EV_REL); |
188 | input_dev->relbit[BIT_WORD(REL_WHEEL)] = BIT_MASK(REL_WHEEL); | ||
188 | for (row = 0; row < pdata->nr_rows; row++) { | 189 | for (row = 0; row < pdata->nr_rows; row++) { |
189 | for (col = 0; col < pdata->nr_cols; col++) { | 190 | for (col = 0; col < pdata->nr_cols; col++) { |
190 | int code = pdata->keycodes[row][col]; | 191 | int code = pdata->keycodes[row][col]; |
diff --git a/drivers/input/keyboard/spitzkbd.c b/drivers/input/keyboard/spitzkbd.c index 41b80385476..410d78a774d 100644 --- a/drivers/input/keyboard/spitzkbd.c +++ b/drivers/input/keyboard/spitzkbd.c | |||
@@ -381,7 +381,8 @@ static int __init spitzkbd_probe(struct platform_device *dev) | |||
381 | input_dev->id.product = 0x0001; | 381 | input_dev->id.product = 0x0001; |
382 | input_dev->id.version = 0x0100; | 382 | input_dev->id.version = 0x0100; |
383 | 383 | ||
384 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_PWR) | BIT(EV_SW); | 384 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | |
385 | BIT_MASK(EV_PWR) | BIT_MASK(EV_SW); | ||
385 | input_dev->keycode = spitzkbd->keycode; | 386 | input_dev->keycode = spitzkbd->keycode; |
386 | input_dev->keycodesize = sizeof(unsigned char); | 387 | input_dev->keycodesize = sizeof(unsigned char); |
387 | input_dev->keycodemax = ARRAY_SIZE(spitzkbd_keycode); | 388 | input_dev->keycodemax = ARRAY_SIZE(spitzkbd_keycode); |
diff --git a/drivers/input/keyboard/stowaway.c b/drivers/input/keyboard/stowaway.c index b44b0684d54..7437219370b 100644 --- a/drivers/input/keyboard/stowaway.c +++ b/drivers/input/keyboard/stowaway.c | |||
@@ -110,7 +110,7 @@ static int skbd_connect(struct serio *serio, struct serio_driver *drv) | |||
110 | input_dev->id.version = 0x0100; | 110 | input_dev->id.version = 0x0100; |
111 | input_dev->dev.parent = &serio->dev; | 111 | input_dev->dev.parent = &serio->dev; |
112 | 112 | ||
113 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 113 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
114 | input_dev->keycode = skbd->keycode; | 114 | input_dev->keycode = skbd->keycode; |
115 | input_dev->keycodesize = sizeof(unsigned char); | 115 | input_dev->keycodesize = sizeof(unsigned char); |
116 | input_dev->keycodemax = ARRAY_SIZE(skbd_keycode); | 116 | input_dev->keycodemax = ARRAY_SIZE(skbd_keycode); |
diff --git a/drivers/input/keyboard/sunkbd.c b/drivers/input/keyboard/sunkbd.c index 1d4e39624cf..be0f5d19d02 100644 --- a/drivers/input/keyboard/sunkbd.c +++ b/drivers/input/keyboard/sunkbd.c | |||
@@ -277,9 +277,11 @@ static int sunkbd_connect(struct serio *serio, struct serio_driver *drv) | |||
277 | 277 | ||
278 | input_dev->event = sunkbd_event; | 278 | input_dev->event = sunkbd_event; |
279 | 279 | ||
280 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_SND) | BIT(EV_REP); | 280 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_LED) | |
281 | input_dev->ledbit[0] = BIT(LED_CAPSL) | BIT(LED_COMPOSE) | BIT(LED_SCROLLL) | BIT(LED_NUML); | 281 | BIT_MASK(EV_SND) | BIT_MASK(EV_REP); |
282 | input_dev->sndbit[0] = BIT(SND_CLICK) | BIT(SND_BELL); | 282 | input_dev->ledbit[0] = BIT_MASK(LED_CAPSL) | BIT_MASK(LED_COMPOSE) | |
283 | BIT_MASK(LED_SCROLLL) | BIT_MASK(LED_NUML); | ||
284 | input_dev->sndbit[0] = BIT_MASK(SND_CLICK) | BIT_MASK(SND_BELL); | ||
283 | 285 | ||
284 | input_dev->keycode = sunkbd->keycode; | 286 | input_dev->keycode = sunkbd->keycode; |
285 | input_dev->keycodesize = sizeof(unsigned char); | 287 | input_dev->keycodesize = sizeof(unsigned char); |
diff --git a/drivers/input/keyboard/xtkbd.c b/drivers/input/keyboard/xtkbd.c index f3a56eb58ed..152a2c07050 100644 --- a/drivers/input/keyboard/xtkbd.c +++ b/drivers/input/keyboard/xtkbd.c | |||
@@ -110,7 +110,7 @@ static int xtkbd_connect(struct serio *serio, struct serio_driver *drv) | |||
110 | input_dev->id.version = 0x0100; | 110 | input_dev->id.version = 0x0100; |
111 | input_dev->dev.parent = &serio->dev; | 111 | input_dev->dev.parent = &serio->dev; |
112 | 112 | ||
113 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 113 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
114 | input_dev->keycode = xtkbd->keycode; | 114 | input_dev->keycode = xtkbd->keycode; |
115 | input_dev->keycodesize = sizeof(unsigned char); | 115 | input_dev->keycodesize = sizeof(unsigned char); |
116 | input_dev->keycodemax = ARRAY_SIZE(xtkbd_keycode); | 116 | input_dev->keycodemax = ARRAY_SIZE(xtkbd_keycode); |
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 7acc6351bb4..8f5c7b90187 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig | |||
@@ -70,9 +70,9 @@ config INPUT_WISTRON_BTNS | |||
70 | select LEDS_CLASS | 70 | select LEDS_CLASS |
71 | select CHECK_SIGNATURE | 71 | select CHECK_SIGNATURE |
72 | help | 72 | help |
73 | Say Y here for support of Winstron laptop button interface, used on | 73 | Say Y here for support of Wistron laptop button interfaces, used on |
74 | laptops of various brands, including Acer and Fujitsu-Siemens. If | 74 | laptops of various brands, including Acer and Fujitsu-Siemens. If |
75 | available, mail and wifi leds will be controlable via /sys/class/leds. | 75 | available, mail and wifi LEDs will be controllable via /sys/class/leds. |
76 | 76 | ||
77 | To compile this driver as a module, choose M here: the module will | 77 | To compile this driver as a module, choose M here: the module will |
78 | be called wistron_btns. | 78 | be called wistron_btns. |
diff --git a/drivers/input/misc/ati_remote.c b/drivers/input/misc/ati_remote.c index 471aab20644..3a7937481ad 100644 --- a/drivers/input/misc/ati_remote.c +++ b/drivers/input/misc/ati_remote.c | |||
@@ -662,10 +662,10 @@ static void ati_remote_input_init(struct ati_remote *ati_remote) | |||
662 | struct input_dev *idev = ati_remote->idev; | 662 | struct input_dev *idev = ati_remote->idev; |
663 | int i; | 663 | int i; |
664 | 664 | ||
665 | idev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 665 | idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
666 | idev->keybit[LONG(BTN_MOUSE)] = ( BIT(BTN_LEFT) | BIT(BTN_RIGHT) | | 666 | idev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | |
667 | BIT(BTN_SIDE) | BIT(BTN_EXTRA) ); | 667 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_SIDE) | BIT_MASK(BTN_EXTRA); |
668 | idev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 668 | idev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); |
669 | for (i = 0; ati_remote_tbl[i].kind != KIND_END; i++) | 669 | for (i = 0; ati_remote_tbl[i].kind != KIND_END; i++) |
670 | if (ati_remote_tbl[i].type == EV_KEY) | 670 | if (ati_remote_tbl[i].type == EV_KEY) |
671 | set_bit(ati_remote_tbl[i].code, idev->keybit); | 671 | set_bit(ati_remote_tbl[i].code, idev->keybit); |
diff --git a/drivers/input/misc/ati_remote2.c b/drivers/input/misc/ati_remote2.c index 1031543e5c3..f2709b82485 100644 --- a/drivers/input/misc/ati_remote2.c +++ b/drivers/input/misc/ati_remote2.c | |||
@@ -346,9 +346,10 @@ static int ati_remote2_input_init(struct ati_remote2 *ar2) | |||
346 | ar2->idev = idev; | 346 | ar2->idev = idev; |
347 | input_set_drvdata(idev, ar2); | 347 | input_set_drvdata(idev, ar2); |
348 | 348 | ||
349 | idev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_REL); | 349 | idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | BIT_MASK(EV_REL); |
350 | idev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT); | 350 | idev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | |
351 | idev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 351 | BIT_MASK(BTN_RIGHT); |
352 | idev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); | ||
352 | for (i = 0; ati_remote2_key_table[i].key_code != KEY_RESERVED; i++) | 353 | for (i = 0; ati_remote2_key_table[i].key_code != KEY_RESERVED; i++) |
353 | set_bit(ati_remote2_key_table[i].key_code, idev->keybit); | 354 | set_bit(ati_remote2_key_table[i].key_code, idev->keybit); |
354 | 355 | ||
diff --git a/drivers/input/misc/atlas_btns.c b/drivers/input/misc/atlas_btns.c index e43e92fd9e2..4e3ad657ed8 100644 --- a/drivers/input/misc/atlas_btns.c +++ b/drivers/input/misc/atlas_btns.c | |||
@@ -81,7 +81,7 @@ static int atlas_acpi_button_add(struct acpi_device *device) | |||
81 | input_dev->name = "Atlas ACPI button driver"; | 81 | input_dev->name = "Atlas ACPI button driver"; |
82 | input_dev->phys = "ASIM0000/atlas/input0"; | 82 | input_dev->phys = "ASIM0000/atlas/input0"; |
83 | input_dev->id.bustype = BUS_HOST; | 83 | input_dev->id.bustype = BUS_HOST; |
84 | input_dev->evbit[LONG(EV_KEY)] = BIT(EV_KEY); | 84 | input_dev->evbit[BIT_WORD(EV_KEY)] = BIT_MASK(EV_KEY); |
85 | 85 | ||
86 | set_bit(KEY_F1, input_dev->keybit); | 86 | set_bit(KEY_F1, input_dev->keybit); |
87 | set_bit(KEY_F2, input_dev->keybit); | 87 | set_bit(KEY_F2, input_dev->keybit); |
diff --git a/drivers/input/misc/cobalt_btns.c b/drivers/input/misc/cobalt_btns.c index 064b0793601..1aef97ed5e8 100644 --- a/drivers/input/misc/cobalt_btns.c +++ b/drivers/input/misc/cobalt_btns.c | |||
@@ -104,7 +104,7 @@ static int __devinit cobalt_buttons_probe(struct platform_device *pdev) | |||
104 | input->id.bustype = BUS_HOST; | 104 | input->id.bustype = BUS_HOST; |
105 | input->cdev.dev = &pdev->dev; | 105 | input->cdev.dev = &pdev->dev; |
106 | 106 | ||
107 | input->evbit[0] = BIT(EV_KEY); | 107 | input->evbit[0] = BIT_MASK(EV_KEY); |
108 | for (i = 0; i < ARRAY_SIZE(buttons_map); i++) { | 108 | for (i = 0; i < ARRAY_SIZE(buttons_map); i++) { |
109 | set_bit(buttons_map[i].keycode, input->keybit); | 109 | set_bit(buttons_map[i].keycode, input->keybit); |
110 | buttons_map[i].count = 0; | 110 | buttons_map[i].count = 0; |
diff --git a/drivers/input/misc/ixp4xx-beeper.c b/drivers/input/misc/ixp4xx-beeper.c index e759944041a..d2ade7443b7 100644 --- a/drivers/input/misc/ixp4xx-beeper.c +++ b/drivers/input/misc/ixp4xx-beeper.c | |||
@@ -109,8 +109,8 @@ static int __devinit ixp4xx_spkr_probe(struct platform_device *dev) | |||
109 | input_dev->id.version = 0x0100; | 109 | input_dev->id.version = 0x0100; |
110 | input_dev->dev.parent = &dev->dev; | 110 | input_dev->dev.parent = &dev->dev; |
111 | 111 | ||
112 | input_dev->evbit[0] = BIT(EV_SND); | 112 | input_dev->evbit[0] = BIT_MASK(EV_SND); |
113 | input_dev->sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE); | 113 | input_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE); |
114 | input_dev->event = ixp4xx_spkr_event; | 114 | input_dev->event = ixp4xx_spkr_event; |
115 | 115 | ||
116 | err = request_irq(IRQ_IXP4XX_TIMER2, &ixp4xx_spkr_interrupt, | 116 | err = request_irq(IRQ_IXP4XX_TIMER2, &ixp4xx_spkr_interrupt, |
diff --git a/drivers/input/misc/keyspan_remote.c b/drivers/input/misc/keyspan_remote.c index 1bffc9fa98c..fd74347047d 100644 --- a/drivers/input/misc/keyspan_remote.c +++ b/drivers/input/misc/keyspan_remote.c | |||
@@ -497,7 +497,7 @@ static int keyspan_probe(struct usb_interface *interface, const struct usb_devic | |||
497 | usb_to_input_id(udev, &input_dev->id); | 497 | usb_to_input_id(udev, &input_dev->id); |
498 | input_dev->dev.parent = &interface->dev; | 498 | input_dev->dev.parent = &interface->dev; |
499 | 499 | ||
500 | input_dev->evbit[0] = BIT(EV_KEY); /* We will only report KEY events. */ | 500 | input_dev->evbit[0] = BIT_MASK(EV_KEY); /* We will only report KEY events. */ |
501 | for (i = 0; i < ARRAY_SIZE(keyspan_key_table); i++) | 501 | for (i = 0; i < ARRAY_SIZE(keyspan_key_table); i++) |
502 | if (keyspan_key_table[i] != KEY_RESERVED) | 502 | if (keyspan_key_table[i] != KEY_RESERVED) |
503 | set_bit(keyspan_key_table[i], input_dev->keybit); | 503 | set_bit(keyspan_key_table[i], input_dev->keybit); |
diff --git a/drivers/input/misc/m68kspkr.c b/drivers/input/misc/m68kspkr.c index e9f26e766b4..0c64d9bb718 100644 --- a/drivers/input/misc/m68kspkr.c +++ b/drivers/input/misc/m68kspkr.c | |||
@@ -65,8 +65,8 @@ static int __devinit m68kspkr_probe(struct platform_device *dev) | |||
65 | input_dev->id.version = 0x0100; | 65 | input_dev->id.version = 0x0100; |
66 | input_dev->dev.parent = &dev->dev; | 66 | input_dev->dev.parent = &dev->dev; |
67 | 67 | ||
68 | input_dev->evbit[0] = BIT(EV_SND); | 68 | input_dev->evbit[0] = BIT_MASK(EV_SND); |
69 | input_dev->sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE); | 69 | input_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE); |
70 | input_dev->event = m68kspkr_event; | 70 | input_dev->event = m68kspkr_event; |
71 | 71 | ||
72 | err = input_register_device(input_dev); | 72 | err = input_register_device(input_dev); |
diff --git a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c index c19f77fbaf2..4941a9e61e9 100644 --- a/drivers/input/misc/pcspkr.c +++ b/drivers/input/misc/pcspkr.c | |||
@@ -86,8 +86,8 @@ static int __devinit pcspkr_probe(struct platform_device *dev) | |||
86 | pcspkr_dev->id.version = 0x0100; | 86 | pcspkr_dev->id.version = 0x0100; |
87 | pcspkr_dev->dev.parent = &dev->dev; | 87 | pcspkr_dev->dev.parent = &dev->dev; |
88 | 88 | ||
89 | pcspkr_dev->evbit[0] = BIT(EV_SND); | 89 | pcspkr_dev->evbit[0] = BIT_MASK(EV_SND); |
90 | pcspkr_dev->sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE); | 90 | pcspkr_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE); |
91 | pcspkr_dev->event = pcspkr_event; | 91 | pcspkr_dev->event = pcspkr_event; |
92 | 92 | ||
93 | err = input_register_device(pcspkr_dev); | 93 | err = input_register_device(pcspkr_dev); |
diff --git a/drivers/input/misc/powermate.c b/drivers/input/misc/powermate.c index 448a470d28f..7a7b8c7b963 100644 --- a/drivers/input/misc/powermate.c +++ b/drivers/input/misc/powermate.c | |||
@@ -363,10 +363,11 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i | |||
363 | 363 | ||
364 | input_dev->event = powermate_input_event; | 364 | input_dev->event = powermate_input_event; |
365 | 365 | ||
366 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL) | BIT(EV_MSC); | 366 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL) | |
367 | input_dev->keybit[LONG(BTN_0)] = BIT(BTN_0); | 367 | BIT_MASK(EV_MSC); |
368 | input_dev->relbit[LONG(REL_DIAL)] = BIT(REL_DIAL); | 368 | input_dev->keybit[BIT_WORD(BTN_0)] = BIT_MASK(BTN_0); |
369 | input_dev->mscbit[LONG(MSC_PULSELED)] = BIT(MSC_PULSELED); | 369 | input_dev->relbit[BIT_WORD(REL_DIAL)] = BIT_MASK(REL_DIAL); |
370 | input_dev->mscbit[BIT_WORD(MSC_PULSELED)] = BIT_MASK(MSC_PULSELED); | ||
370 | 371 | ||
371 | /* get a handle to the interrupt data pipe */ | 372 | /* get a handle to the interrupt data pipe */ |
372 | pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress); | 373 | pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress); |
diff --git a/drivers/input/misc/sparcspkr.c b/drivers/input/misc/sparcspkr.c index e36ec1d92be..a3637d87088 100644 --- a/drivers/input/misc/sparcspkr.c +++ b/drivers/input/misc/sparcspkr.c | |||
@@ -115,8 +115,8 @@ static int __devinit sparcspkr_probe(struct device *dev) | |||
115 | input_dev->id.version = 0x0100; | 115 | input_dev->id.version = 0x0100; |
116 | input_dev->dev.parent = dev; | 116 | input_dev->dev.parent = dev; |
117 | 117 | ||
118 | input_dev->evbit[0] = BIT(EV_SND); | 118 | input_dev->evbit[0] = BIT_MASK(EV_SND); |
119 | input_dev->sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE); | 119 | input_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE); |
120 | 120 | ||
121 | input_dev->event = state->event; | 121 | input_dev->event = state->event; |
122 | 122 | ||
diff --git a/drivers/input/misc/yealink.c b/drivers/input/misc/yealink.c index ab15880fd56..46279ef2b64 100644 --- a/drivers/input/misc/yealink.c +++ b/drivers/input/misc/yealink.c | |||
@@ -945,7 +945,7 @@ static int usb_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
945 | /* input_dev->event = input_ev; TODO */ | 945 | /* input_dev->event = input_ev; TODO */ |
946 | 946 | ||
947 | /* register available key events */ | 947 | /* register available key events */ |
948 | input_dev->evbit[0] = BIT(EV_KEY); | 948 | input_dev->evbit[0] = BIT_MASK(EV_KEY); |
949 | for (i = 0; i < 256; i++) { | 949 | for (i = 0; i < 256; i++) { |
950 | int k = map_p1k_to_key(i); | 950 | int k = map_p1k_to_key(i); |
951 | if (k >= 0) { | 951 | if (k >= 0) { |
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c index 64d70a9b714..2b5ed119c9a 100644 --- a/drivers/input/mouse/alps.c +++ b/drivers/input/mouse/alps.c | |||
@@ -455,24 +455,25 @@ int alps_init(struct psmouse *psmouse) | |||
455 | if (alps_hw_init(psmouse, &version)) | 455 | if (alps_hw_init(psmouse, &version)) |
456 | goto init_fail; | 456 | goto init_fail; |
457 | 457 | ||
458 | dev1->evbit[LONG(EV_KEY)] |= BIT(EV_KEY); | 458 | dev1->evbit[BIT_WORD(EV_KEY)] |= BIT_MASK(EV_KEY); |
459 | dev1->keybit[LONG(BTN_TOUCH)] |= BIT(BTN_TOUCH); | 459 | dev1->keybit[BIT_WORD(BTN_TOUCH)] |= BIT_MASK(BTN_TOUCH); |
460 | dev1->keybit[LONG(BTN_TOOL_FINGER)] |= BIT(BTN_TOOL_FINGER); | 460 | dev1->keybit[BIT_WORD(BTN_TOOL_FINGER)] |= BIT_MASK(BTN_TOOL_FINGER); |
461 | dev1->keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 461 | dev1->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_LEFT) | |
462 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); | ||
462 | 463 | ||
463 | dev1->evbit[LONG(EV_ABS)] |= BIT(EV_ABS); | 464 | dev1->evbit[BIT_WORD(EV_ABS)] |= BIT_MASK(EV_ABS); |
464 | input_set_abs_params(dev1, ABS_X, 0, 1023, 0, 0); | 465 | input_set_abs_params(dev1, ABS_X, 0, 1023, 0, 0); |
465 | input_set_abs_params(dev1, ABS_Y, 0, 767, 0, 0); | 466 | input_set_abs_params(dev1, ABS_Y, 0, 767, 0, 0); |
466 | input_set_abs_params(dev1, ABS_PRESSURE, 0, 127, 0, 0); | 467 | input_set_abs_params(dev1, ABS_PRESSURE, 0, 127, 0, 0); |
467 | 468 | ||
468 | if (priv->i->flags & ALPS_WHEEL) { | 469 | if (priv->i->flags & ALPS_WHEEL) { |
469 | dev1->evbit[LONG(EV_REL)] |= BIT(EV_REL); | 470 | dev1->evbit[BIT_WORD(EV_REL)] |= BIT_MASK(EV_REL); |
470 | dev1->relbit[LONG(REL_WHEEL)] |= BIT(REL_WHEEL); | 471 | dev1->relbit[BIT_WORD(REL_WHEEL)] |= BIT_MASK(REL_WHEEL); |
471 | } | 472 | } |
472 | 473 | ||
473 | if (priv->i->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) { | 474 | if (priv->i->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) { |
474 | dev1->keybit[LONG(BTN_FORWARD)] |= BIT(BTN_FORWARD); | 475 | dev1->keybit[BIT_WORD(BTN_FORWARD)] |= BIT_MASK(BTN_FORWARD); |
475 | dev1->keybit[LONG(BTN_BACK)] |= BIT(BTN_BACK); | 476 | dev1->keybit[BIT_WORD(BTN_BACK)] |= BIT_MASK(BTN_BACK); |
476 | } | 477 | } |
477 | 478 | ||
478 | snprintf(priv->phys, sizeof(priv->phys), "%s/input1", psmouse->ps2dev.serio->phys); | 479 | snprintf(priv->phys, sizeof(priv->phys), "%s/input1", psmouse->ps2dev.serio->phys); |
@@ -483,9 +484,10 @@ int alps_init(struct psmouse *psmouse) | |||
483 | dev2->id.product = PSMOUSE_ALPS; | 484 | dev2->id.product = PSMOUSE_ALPS; |
484 | dev2->id.version = 0x0000; | 485 | dev2->id.version = 0x0000; |
485 | 486 | ||
486 | dev2->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 487 | dev2->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
487 | dev2->relbit[LONG(REL_X)] |= BIT(REL_X) | BIT(REL_Y); | 488 | dev2->relbit[BIT_WORD(REL_X)] |= BIT_MASK(REL_X) | BIT_MASK(REL_Y); |
488 | dev2->keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 489 | dev2->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_LEFT) | |
490 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); | ||
489 | 491 | ||
490 | if (input_register_device(priv->dev2)) | 492 | if (input_register_device(priv->dev2)) |
491 | goto init_fail; | 493 | goto init_fail; |
diff --git a/drivers/input/mouse/amimouse.c b/drivers/input/mouse/amimouse.c index 239a0e16d91..a185ac78a42 100644 --- a/drivers/input/mouse/amimouse.c +++ b/drivers/input/mouse/amimouse.c | |||
@@ -111,9 +111,10 @@ static int __init amimouse_init(void) | |||
111 | amimouse_dev->id.product = 0x0002; | 111 | amimouse_dev->id.product = 0x0002; |
112 | amimouse_dev->id.version = 0x0100; | 112 | amimouse_dev->id.version = 0x0100; |
113 | 113 | ||
114 | amimouse_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 114 | amimouse_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
115 | amimouse_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 115 | amimouse_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); |
116 | amimouse_dev->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 116 | amimouse_dev->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | |
117 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); | ||
117 | amimouse_dev->open = amimouse_open; | 118 | amimouse_dev->open = amimouse_open; |
118 | amimouse_dev->close = amimouse_close; | 119 | amimouse_dev->close = amimouse_close; |
119 | 120 | ||
diff --git a/drivers/input/mouse/atarimouse.c b/drivers/input/mouse/atarimouse.c index c8c7244b48a..98a3561d4b0 100644 --- a/drivers/input/mouse/atarimouse.c +++ b/drivers/input/mouse/atarimouse.c | |||
@@ -137,9 +137,10 @@ static int __init atamouse_init(void) | |||
137 | atamouse_dev->id.product = 0x0002; | 137 | atamouse_dev->id.product = 0x0002; |
138 | atamouse_dev->id.version = 0x0100; | 138 | atamouse_dev->id.version = 0x0100; |
139 | 139 | ||
140 | atamouse_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 140 | atamouse_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
141 | atamouse_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 141 | atamouse_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); |
142 | atamouse_dev->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 142 | atamouse_dev->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | |
143 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); | ||
143 | atamouse_dev->open = atamouse_open; | 144 | atamouse_dev->open = atamouse_open; |
144 | atamouse_dev->close = atamouse_close; | 145 | atamouse_dev->close = atamouse_close; |
145 | 146 | ||
diff --git a/drivers/input/mouse/hil_ptr.c b/drivers/input/mouse/hil_ptr.c index 449bf4dcbbc..27f88fbb713 100644 --- a/drivers/input/mouse/hil_ptr.c +++ b/drivers/input/mouse/hil_ptr.c | |||
@@ -298,12 +298,12 @@ static int hil_ptr_connect(struct serio *serio, struct serio_driver *driver) | |||
298 | idd = ptr->idd + 1; | 298 | idd = ptr->idd + 1; |
299 | txt = "unknown"; | 299 | txt = "unknown"; |
300 | if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_REL) { | 300 | if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_REL) { |
301 | ptr->dev->evbit[0] = BIT(EV_REL); | 301 | ptr->dev->evbit[0] = BIT_MASK(EV_REL); |
302 | txt = "relative"; | 302 | txt = "relative"; |
303 | } | 303 | } |
304 | 304 | ||
305 | if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_ABS) { | 305 | if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_ABS) { |
306 | ptr->dev->evbit[0] = BIT(EV_ABS); | 306 | ptr->dev->evbit[0] = BIT_MASK(EV_ABS); |
307 | txt = "absolute"; | 307 | txt = "absolute"; |
308 | } | 308 | } |
309 | if (!ptr->dev->evbit[0]) | 309 | if (!ptr->dev->evbit[0]) |
@@ -311,7 +311,7 @@ static int hil_ptr_connect(struct serio *serio, struct serio_driver *driver) | |||
311 | 311 | ||
312 | ptr->nbtn = HIL_IDD_NUM_BUTTONS(idd); | 312 | ptr->nbtn = HIL_IDD_NUM_BUTTONS(idd); |
313 | if (ptr->nbtn) | 313 | if (ptr->nbtn) |
314 | ptr->dev->evbit[0] |= BIT(EV_KEY); | 314 | ptr->dev->evbit[0] |= BIT_MASK(EV_KEY); |
315 | 315 | ||
316 | naxsets = HIL_IDD_NUM_AXSETS(*idd); | 316 | naxsets = HIL_IDD_NUM_AXSETS(*idd); |
317 | ptr->naxes = HIL_IDD_NUM_AXES_PER_SET(*idd); | 317 | ptr->naxes = HIL_IDD_NUM_AXES_PER_SET(*idd); |
diff --git a/drivers/input/mouse/inport.c b/drivers/input/mouse/inport.c index 79b624fe899..655a3921743 100644 --- a/drivers/input/mouse/inport.c +++ b/drivers/input/mouse/inport.c | |||
@@ -163,9 +163,10 @@ static int __init inport_init(void) | |||
163 | inport_dev->id.product = 0x0001; | 163 | inport_dev->id.product = 0x0001; |
164 | inport_dev->id.version = 0x0100; | 164 | inport_dev->id.version = 0x0100; |
165 | 165 | ||
166 | inport_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 166 | inport_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
167 | inport_dev->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 167 | inport_dev->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | |
168 | inport_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 168 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); |
169 | inport_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); | ||
169 | 170 | ||
170 | inport_dev->open = inport_open; | 171 | inport_dev->open = inport_open; |
171 | inport_dev->close = inport_close; | 172 | inport_dev->close = inport_close; |
diff --git a/drivers/input/mouse/lifebook.c b/drivers/input/mouse/lifebook.c index d7de4c53b3d..9ec57d80186 100644 --- a/drivers/input/mouse/lifebook.c +++ b/drivers/input/mouse/lifebook.c | |||
@@ -270,9 +270,10 @@ static int lifebook_create_relative_device(struct psmouse *psmouse) | |||
270 | dev2->id.version = 0x0000; | 270 | dev2->id.version = 0x0000; |
271 | dev2->dev.parent = &psmouse->ps2dev.serio->dev; | 271 | dev2->dev.parent = &psmouse->ps2dev.serio->dev; |
272 | 272 | ||
273 | dev2->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 273 | dev2->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
274 | dev2->relbit[LONG(REL_X)] = BIT(REL_X) | BIT(REL_Y); | 274 | dev2->relbit[BIT_WORD(REL_X)] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); |
275 | dev2->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT); | 275 | dev2->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | |
276 | BIT_MASK(BTN_RIGHT); | ||
276 | 277 | ||
277 | error = input_register_device(priv->dev2); | 278 | error = input_register_device(priv->dev2); |
278 | if (error) | 279 | if (error) |
@@ -295,9 +296,9 @@ int lifebook_init(struct psmouse *psmouse) | |||
295 | if (lifebook_absolute_mode(psmouse)) | 296 | if (lifebook_absolute_mode(psmouse)) |
296 | return -1; | 297 | return -1; |
297 | 298 | ||
298 | dev1->evbit[0] = BIT(EV_ABS) | BIT(EV_KEY); | 299 | dev1->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); |
299 | dev1->relbit[0] = 0; | 300 | dev1->relbit[0] = 0; |
300 | dev1->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 301 | dev1->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
301 | input_set_abs_params(dev1, ABS_X, 0, max_coord, 0, 0); | 302 | input_set_abs_params(dev1, ABS_X, 0, max_coord, 0, 0); |
302 | input_set_abs_params(dev1, ABS_Y, 0, max_coord, 0, 0); | 303 | input_set_abs_params(dev1, ABS_Y, 0, max_coord, 0, 0); |
303 | 304 | ||
diff --git a/drivers/input/mouse/logibm.c b/drivers/input/mouse/logibm.c index 26c3b2e2ca9..b23a4f3ea5c 100644 --- a/drivers/input/mouse/logibm.c +++ b/drivers/input/mouse/logibm.c | |||
@@ -156,9 +156,10 @@ static int __init logibm_init(void) | |||
156 | logibm_dev->id.product = 0x0001; | 156 | logibm_dev->id.product = 0x0001; |
157 | logibm_dev->id.version = 0x0100; | 157 | logibm_dev->id.version = 0x0100; |
158 | 158 | ||
159 | logibm_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 159 | logibm_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
160 | logibm_dev->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 160 | logibm_dev->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | |
161 | logibm_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 161 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); |
162 | logibm_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); | ||
162 | 163 | ||
163 | logibm_dev->open = logibm_open; | 164 | logibm_dev->open = logibm_open; |
164 | logibm_dev->close = logibm_close; | 165 | logibm_dev->close = logibm_close; |
diff --git a/drivers/input/mouse/pc110pad.c b/drivers/input/mouse/pc110pad.c index 05d992e514f..8991ab0b4fe 100644 --- a/drivers/input/mouse/pc110pad.c +++ b/drivers/input/mouse/pc110pad.c | |||
@@ -144,9 +144,9 @@ static int __init pc110pad_init(void) | |||
144 | pc110pad_dev->id.product = 0x0001; | 144 | pc110pad_dev->id.product = 0x0001; |
145 | pc110pad_dev->id.version = 0x0100; | 145 | pc110pad_dev->id.version = 0x0100; |
146 | 146 | ||
147 | pc110pad_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 147 | pc110pad_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
148 | pc110pad_dev->absbit[0] = BIT(ABS_X) | BIT(ABS_Y); | 148 | pc110pad_dev->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y); |
149 | pc110pad_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 149 | pc110pad_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
150 | 150 | ||
151 | pc110pad_dev->absmax[ABS_X] = 0x1ff; | 151 | pc110pad_dev->absmax[ABS_X] = 0x1ff; |
152 | pc110pad_dev->absmax[ABS_Y] = 0x0ff; | 152 | pc110pad_dev->absmax[ABS_Y] = 0x0ff; |
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index 07352575653..21a9c0b69a1 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c | |||
@@ -906,7 +906,7 @@ static void psmouse_activate(struct psmouse *psmouse) | |||
906 | 906 | ||
907 | /* | 907 | /* |
908 | * psmouse_deactivate() puts the mouse into poll mode so that we don't get motion | 908 | * psmouse_deactivate() puts the mouse into poll mode so that we don't get motion |
909 | * reports from it unless we explicitely request it. | 909 | * reports from it unless we explicitly request it. |
910 | */ | 910 | */ |
911 | 911 | ||
912 | static void psmouse_deactivate(struct psmouse *psmouse) | 912 | static void psmouse_deactivate(struct psmouse *psmouse) |
@@ -1115,9 +1115,10 @@ static int psmouse_switch_protocol(struct psmouse *psmouse, const struct psmouse | |||
1115 | 1115 | ||
1116 | input_dev->dev.parent = &psmouse->ps2dev.serio->dev; | 1116 | input_dev->dev.parent = &psmouse->ps2dev.serio->dev; |
1117 | 1117 | ||
1118 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 1118 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
1119 | input_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 1119 | input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | |
1120 | input_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 1120 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); |
1121 | input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); | ||
1121 | 1122 | ||
1122 | psmouse->set_rate = psmouse_set_rate; | 1123 | psmouse->set_rate = psmouse_set_rate; |
1123 | psmouse->set_resolution = psmouse_set_resolution; | 1124 | psmouse->set_resolution = psmouse_set_resolution; |
diff --git a/drivers/input/mouse/rpcmouse.c b/drivers/input/mouse/rpcmouse.c index 355efd0423e..18a48636ba4 100644 --- a/drivers/input/mouse/rpcmouse.c +++ b/drivers/input/mouse/rpcmouse.c | |||
@@ -78,9 +78,10 @@ static int __init rpcmouse_init(void) | |||
78 | rpcmouse_dev->id.product = 0x0001; | 78 | rpcmouse_dev->id.product = 0x0001; |
79 | rpcmouse_dev->id.version = 0x0100; | 79 | rpcmouse_dev->id.version = 0x0100; |
80 | 80 | ||
81 | rpcmouse_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 81 | rpcmouse_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
82 | rpcmouse_dev->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 82 | rpcmouse_dev->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | |
83 | rpcmouse_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 83 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); |
84 | rpcmouse_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); | ||
84 | 85 | ||
85 | rpcmouse_lastx = (short) iomd_readl(IOMD_MOUSEX); | 86 | rpcmouse_lastx = (short) iomd_readl(IOMD_MOUSEX); |
86 | rpcmouse_lasty = (short) iomd_readl(IOMD_MOUSEY); | 87 | rpcmouse_lasty = (short) iomd_readl(IOMD_MOUSEY); |
diff --git a/drivers/input/mouse/sermouse.c b/drivers/input/mouse/sermouse.c index 77b8ee2b965..ed917bfd086 100644 --- a/drivers/input/mouse/sermouse.c +++ b/drivers/input/mouse/sermouse.c | |||
@@ -268,9 +268,10 @@ static int sermouse_connect(struct serio *serio, struct serio_driver *drv) | |||
268 | input_dev->id.version = 0x0100; | 268 | input_dev->id.version = 0x0100; |
269 | input_dev->dev.parent = &serio->dev; | 269 | input_dev->dev.parent = &serio->dev; |
270 | 270 | ||
271 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 271 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
272 | input_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT); | 272 | input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | |
273 | input_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 273 | BIT_MASK(BTN_RIGHT); |
274 | input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); | ||
274 | 275 | ||
275 | if (c & 0x01) set_bit(BTN_MIDDLE, input_dev->keybit); | 276 | if (c & 0x01) set_bit(BTN_MIDDLE, input_dev->keybit); |
276 | if (c & 0x02) set_bit(BTN_SIDE, input_dev->keybit); | 277 | if (c & 0x02) set_bit(BTN_SIDE, input_dev->keybit); |
diff --git a/drivers/input/mouse/touchkit_ps2.c b/drivers/input/mouse/touchkit_ps2.c index 7b977fd2357..3fadb2accac 100644 --- a/drivers/input/mouse/touchkit_ps2.c +++ b/drivers/input/mouse/touchkit_ps2.c | |||
@@ -85,7 +85,7 @@ int touchkit_ps2_detect(struct psmouse *psmouse, int set_properties) | |||
85 | return -ENODEV; | 85 | return -ENODEV; |
86 | 86 | ||
87 | if (set_properties) { | 87 | if (set_properties) { |
88 | dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 88 | dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
89 | set_bit(BTN_TOUCH, dev->keybit); | 89 | set_bit(BTN_TOUCH, dev->keybit); |
90 | input_set_abs_params(dev, ABS_X, 0, TOUCHKIT_MAX_XC, 0, 0); | 90 | input_set_abs_params(dev, ABS_X, 0, TOUCHKIT_MAX_XC, 0, 0); |
91 | input_set_abs_params(dev, ABS_Y, 0, TOUCHKIT_MAX_YC, 0, 0); | 91 | input_set_abs_params(dev, ABS_Y, 0, TOUCHKIT_MAX_YC, 0, 0); |
diff --git a/drivers/input/mouse/vsxxxaa.c b/drivers/input/mouse/vsxxxaa.c index 4a321576f34..404eedd5ffa 100644 --- a/drivers/input/mouse/vsxxxaa.c +++ b/drivers/input/mouse/vsxxxaa.c | |||
@@ -330,7 +330,7 @@ vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse) | |||
330 | 330 | ||
331 | /* | 331 | /* |
332 | * Check for Power-On-Reset packets. These are sent out | 332 | * Check for Power-On-Reset packets. These are sent out |
333 | * after plugging the mouse in, or when explicitely | 333 | * after plugging the mouse in, or when explicitly |
334 | * requested by sending 'T'. | 334 | * requested by sending 'T'. |
335 | * | 335 | * |
336 | * [0]: 1 0 1 0 R3 R2 R1 R0 | 336 | * [0]: 1 0 1 0 R3 R2 R1 R0 |
diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c index 79146d6ed2a..78c3ea75da2 100644 --- a/drivers/input/mousedev.c +++ b/drivers/input/mousedev.c | |||
@@ -998,34 +998,36 @@ static const struct input_device_id mousedev_ids[] = { | |||
998 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | 998 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | |
999 | INPUT_DEVICE_ID_MATCH_KEYBIT | | 999 | INPUT_DEVICE_ID_MATCH_KEYBIT | |
1000 | INPUT_DEVICE_ID_MATCH_RELBIT, | 1000 | INPUT_DEVICE_ID_MATCH_RELBIT, |
1001 | .evbit = { BIT(EV_KEY) | BIT(EV_REL) }, | 1001 | .evbit = { BIT_MASK(EV_KEY) | BIT_MASK(EV_REL) }, |
1002 | .keybit = { [LONG(BTN_LEFT)] = BIT(BTN_LEFT) }, | 1002 | .keybit = { [BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) }, |
1003 | .relbit = { BIT(REL_X) | BIT(REL_Y) }, | 1003 | .relbit = { BIT_MASK(REL_X) | BIT_MASK(REL_Y) }, |
1004 | }, /* A mouse like device, at least one button, | 1004 | }, /* A mouse like device, at least one button, |
1005 | two relative axes */ | 1005 | two relative axes */ |
1006 | { | 1006 | { |
1007 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | 1007 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | |
1008 | INPUT_DEVICE_ID_MATCH_RELBIT, | 1008 | INPUT_DEVICE_ID_MATCH_RELBIT, |
1009 | .evbit = { BIT(EV_KEY) | BIT(EV_REL) }, | 1009 | .evbit = { BIT_MASK(EV_KEY) | BIT_MASK(EV_REL) }, |
1010 | .relbit = { BIT(REL_WHEEL) }, | 1010 | .relbit = { BIT_MASK(REL_WHEEL) }, |
1011 | }, /* A separate scrollwheel */ | 1011 | }, /* A separate scrollwheel */ |
1012 | { | 1012 | { |
1013 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | 1013 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | |
1014 | INPUT_DEVICE_ID_MATCH_KEYBIT | | 1014 | INPUT_DEVICE_ID_MATCH_KEYBIT | |
1015 | INPUT_DEVICE_ID_MATCH_ABSBIT, | 1015 | INPUT_DEVICE_ID_MATCH_ABSBIT, |
1016 | .evbit = { BIT(EV_KEY) | BIT(EV_ABS) }, | 1016 | .evbit = { BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) }, |
1017 | .keybit = { [LONG(BTN_TOUCH)] = BIT(BTN_TOUCH) }, | 1017 | .keybit = { [BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH) }, |
1018 | .absbit = { BIT(ABS_X) | BIT(ABS_Y) }, | 1018 | .absbit = { BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) }, |
1019 | }, /* A tablet like device, at least touch detection, | 1019 | }, /* A tablet like device, at least touch detection, |
1020 | two absolute axes */ | 1020 | two absolute axes */ |
1021 | { | 1021 | { |
1022 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | 1022 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | |
1023 | INPUT_DEVICE_ID_MATCH_KEYBIT | | 1023 | INPUT_DEVICE_ID_MATCH_KEYBIT | |
1024 | INPUT_DEVICE_ID_MATCH_ABSBIT, | 1024 | INPUT_DEVICE_ID_MATCH_ABSBIT, |
1025 | .evbit = { BIT(EV_KEY) | BIT(EV_ABS) }, | 1025 | .evbit = { BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) }, |
1026 | .keybit = { [LONG(BTN_TOOL_FINGER)] = BIT(BTN_TOOL_FINGER) }, | 1026 | .keybit = { [BIT_WORD(BTN_TOOL_FINGER)] = |
1027 | .absbit = { BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE) | | 1027 | BIT_MASK(BTN_TOOL_FINGER) }, |
1028 | BIT(ABS_TOOL_WIDTH) }, | 1028 | .absbit = { BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | |
1029 | BIT_MASK(ABS_PRESSURE) | | ||
1030 | BIT_MASK(ABS_TOOL_WIDTH) }, | ||
1029 | }, /* A touchpad */ | 1031 | }, /* A touchpad */ |
1030 | 1032 | ||
1031 | { }, /* Terminating entry */ | 1033 | { }, /* Terminating entry */ |
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c index b3bc15acd3f..7f5293828fb 100644 --- a/drivers/input/serio/serio.c +++ b/drivers/input/serio/serio.c | |||
@@ -387,9 +387,8 @@ static int serio_thread(void *nothing) | |||
387 | set_freezable(); | 387 | set_freezable(); |
388 | do { | 388 | do { |
389 | serio_handle_event(); | 389 | serio_handle_event(); |
390 | wait_event_interruptible(serio_wait, | 390 | wait_event_freezable(serio_wait, |
391 | kthread_should_stop() || !list_empty(&serio_event_list)); | 391 | kthread_should_stop() || !list_empty(&serio_event_list)); |
392 | try_to_freeze(); | ||
393 | } while (!kthread_should_stop()); | 392 | } while (!kthread_should_stop()); |
394 | 393 | ||
395 | printk(KERN_DEBUG "serio: kseriod exiting\n"); | 394 | printk(KERN_DEBUG "serio: kseriod exiting\n"); |
diff --git a/drivers/input/tablet/acecad.c b/drivers/input/tablet/acecad.c index dd2310458c4..b973d0ef6d1 100644 --- a/drivers/input/tablet/acecad.c +++ b/drivers/input/tablet/acecad.c | |||
@@ -192,10 +192,14 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_ | |||
192 | input_dev->open = usb_acecad_open; | 192 | input_dev->open = usb_acecad_open; |
193 | input_dev->close = usb_acecad_close; | 193 | input_dev->close = usb_acecad_close; |
194 | 194 | ||
195 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 195 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
196 | input_dev->absbit[0] = BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE); | 196 | input_dev->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | |
197 | input_dev->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE); | 197 | BIT_MASK(ABS_PRESSURE); |
198 | input_dev->keybit[LONG(BTN_DIGI)] = BIT(BTN_TOOL_PEN) |BIT(BTN_TOUCH) | BIT(BTN_STYLUS) | BIT(BTN_STYLUS2); | 198 | input_dev->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | |
199 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); | ||
200 | input_dev->keybit[BIT_WORD(BTN_DIGI)] = BIT_MASK(BTN_TOOL_PEN) | | ||
201 | BIT_MASK(BTN_TOUCH) | BIT_MASK(BTN_STYLUS) | | ||
202 | BIT_MASK(BTN_STYLUS2); | ||
199 | 203 | ||
200 | switch (id->driver_info) { | 204 | switch (id->driver_info) { |
201 | case 0: | 205 | case 0: |
diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c index b2ca10f2fe0..d2c6da26472 100644 --- a/drivers/input/tablet/gtco.c +++ b/drivers/input/tablet/gtco.c | |||
@@ -573,10 +573,12 @@ static void gtco_setup_caps(struct input_dev *inputdev) | |||
573 | struct gtco *device = input_get_drvdata(inputdev); | 573 | struct gtco *device = input_get_drvdata(inputdev); |
574 | 574 | ||
575 | /* Which events */ | 575 | /* Which events */ |
576 | inputdev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_MSC); | 576 | inputdev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) | |
577 | BIT_MASK(EV_MSC); | ||
577 | 578 | ||
578 | /* Misc event menu block */ | 579 | /* Misc event menu block */ |
579 | inputdev->mscbit[0] = BIT(MSC_SCAN)|BIT(MSC_SERIAL)|BIT(MSC_RAW) ; | 580 | inputdev->mscbit[0] = BIT_MASK(MSC_SCAN) | BIT_MASK(MSC_SERIAL) | |
581 | BIT_MASK(MSC_RAW); | ||
580 | 582 | ||
581 | /* Absolute values based on HID report info */ | 583 | /* Absolute values based on HID report info */ |
582 | input_set_abs_params(inputdev, ABS_X, device->min_X, device->max_X, | 584 | input_set_abs_params(inputdev, ABS_X, device->min_X, device->max_X, |
diff --git a/drivers/input/tablet/kbtab.c b/drivers/input/tablet/kbtab.c index 91e6d00d4a4..1182fc13316 100644 --- a/drivers/input/tablet/kbtab.c +++ b/drivers/input/tablet/kbtab.c | |||
@@ -153,10 +153,13 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
153 | input_dev->open = kbtab_open; | 153 | input_dev->open = kbtab_open; |
154 | input_dev->close = kbtab_close; | 154 | input_dev->close = kbtab_close; |
155 | 155 | ||
156 | input_dev->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_MSC); | 156 | input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) | |
157 | input_dev->keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE); | 157 | BIT_MASK(EV_MSC); |
158 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH); | 158 | input_dev->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_LEFT) | |
159 | input_dev->mscbit[0] |= BIT(MSC_SERIAL); | 159 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); |
160 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) | | ||
161 | BIT_MASK(BTN_TOUCH); | ||
162 | input_dev->mscbit[0] |= BIT_MASK(MSC_SERIAL); | ||
160 | input_set_abs_params(input_dev, ABS_X, 0, 0x2000, 4, 0); | 163 | input_set_abs_params(input_dev, ABS_X, 0, 0x2000, 4, 0); |
161 | input_set_abs_params(input_dev, ABS_Y, 0, 0x1750, 4, 0); | 164 | input_set_abs_params(input_dev, ABS_Y, 0, 0x1750, 4, 0); |
162 | input_set_abs_params(input_dev, ABS_PRESSURE, 0, 0xff, 0, 0); | 165 | input_set_abs_params(input_dev, ABS_PRESSURE, 0, 0xff, 0, 0); |
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c index 064e123c9b7..d64b1ea136b 100644 --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c | |||
@@ -140,48 +140,58 @@ static void wacom_close(struct input_dev *dev) | |||
140 | 140 | ||
141 | void input_dev_mo(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | 141 | void input_dev_mo(struct input_dev *input_dev, struct wacom_wac *wacom_wac) |
142 | { | 142 | { |
143 | input_dev->keybit[LONG(BTN_LEFT)] |= BIT(BTN_1) | BIT(BTN_5); | 143 | input_dev->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_1) | |
144 | BIT_MASK(BTN_5); | ||
144 | input_set_abs_params(input_dev, ABS_WHEEL, 0, 71, 0, 0); | 145 | input_set_abs_params(input_dev, ABS_WHEEL, 0, 71, 0, 0); |
145 | } | 146 | } |
146 | 147 | ||
147 | void input_dev_g4(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | 148 | void input_dev_g4(struct input_dev *input_dev, struct wacom_wac *wacom_wac) |
148 | { | 149 | { |
149 | input_dev->evbit[0] |= BIT(EV_MSC); | 150 | input_dev->evbit[0] |= BIT_MASK(EV_MSC); |
150 | input_dev->mscbit[0] |= BIT(MSC_SERIAL); | 151 | input_dev->mscbit[0] |= BIT_MASK(MSC_SERIAL); |
151 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_FINGER); | 152 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_FINGER); |
152 | input_dev->keybit[LONG(BTN_LEFT)] |= BIT(BTN_0) | BIT(BTN_4); | 153 | input_dev->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_0) | |
154 | BIT_MASK(BTN_4); | ||
153 | } | 155 | } |
154 | 156 | ||
155 | void input_dev_g(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | 157 | void input_dev_g(struct input_dev *input_dev, struct wacom_wac *wacom_wac) |
156 | { | 158 | { |
157 | input_dev->evbit[0] |= BIT(EV_REL); | 159 | input_dev->evbit[0] |= BIT_MASK(EV_REL); |
158 | input_dev->relbit[0] |= BIT(REL_WHEEL); | 160 | input_dev->relbit[0] |= BIT_MASK(REL_WHEEL); |
159 | input_dev->keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE); | 161 | input_dev->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_LEFT) | |
160 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER) | BIT(BTN_TOOL_MOUSE) | BIT(BTN_STYLUS2); | 162 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); |
163 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER) | | ||
164 | BIT_MASK(BTN_TOOL_MOUSE) | BIT_MASK(BTN_STYLUS2); | ||
161 | input_set_abs_params(input_dev, ABS_DISTANCE, 0, wacom_wac->features->distance_max, 0, 0); | 165 | input_set_abs_params(input_dev, ABS_DISTANCE, 0, wacom_wac->features->distance_max, 0, 0); |
162 | } | 166 | } |
163 | 167 | ||
164 | void input_dev_i3s(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | 168 | void input_dev_i3s(struct input_dev *input_dev, struct wacom_wac *wacom_wac) |
165 | { | 169 | { |
166 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_FINGER); | 170 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_FINGER); |
167 | input_dev->keybit[LONG(BTN_LEFT)] |= BIT(BTN_0) | BIT(BTN_1) | BIT(BTN_2) | BIT(BTN_3); | 171 | input_dev->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_0) | |
172 | BIT_MASK(BTN_1) | BIT_MASK(BTN_2) | BIT_MASK(BTN_3); | ||
168 | input_set_abs_params(input_dev, ABS_RX, 0, 4096, 0, 0); | 173 | input_set_abs_params(input_dev, ABS_RX, 0, 4096, 0, 0); |
169 | } | 174 | } |
170 | 175 | ||
171 | void input_dev_i3(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | 176 | void input_dev_i3(struct input_dev *input_dev, struct wacom_wac *wacom_wac) |
172 | { | 177 | { |
173 | input_dev->keybit[LONG(BTN_LEFT)] |= BIT(BTN_4) | BIT(BTN_5) | BIT(BTN_6) | BIT(BTN_7); | 178 | input_dev->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_4) | |
179 | BIT_MASK(BTN_5) | BIT_MASK(BTN_6) | BIT_MASK(BTN_7); | ||
174 | input_set_abs_params(input_dev, ABS_RY, 0, 4096, 0, 0); | 180 | input_set_abs_params(input_dev, ABS_RY, 0, 4096, 0, 0); |
175 | } | 181 | } |
176 | 182 | ||
177 | void input_dev_i(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | 183 | void input_dev_i(struct input_dev *input_dev, struct wacom_wac *wacom_wac) |
178 | { | 184 | { |
179 | input_dev->evbit[0] |= BIT(EV_MSC) | BIT(EV_REL); | 185 | input_dev->evbit[0] |= BIT_MASK(EV_MSC) | BIT_MASK(EV_REL); |
180 | input_dev->mscbit[0] |= BIT(MSC_SERIAL); | 186 | input_dev->mscbit[0] |= BIT_MASK(MSC_SERIAL); |
181 | input_dev->relbit[0] |= BIT(REL_WHEEL); | 187 | input_dev->relbit[0] |= BIT_MASK(REL_WHEEL); |
182 | input_dev->keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE) | BIT(BTN_SIDE) | BIT(BTN_EXTRA); | 188 | input_dev->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_LEFT) | |
183 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER) | BIT(BTN_TOOL_MOUSE) | BIT(BTN_TOOL_BRUSH) | 189 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE) | |
184 | | BIT(BTN_TOOL_PENCIL) | BIT(BTN_TOOL_AIRBRUSH) | BIT(BTN_TOOL_LENS) | BIT(BTN_STYLUS2); | 190 | BIT_MASK(BTN_SIDE) | BIT_MASK(BTN_EXTRA); |
191 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER) | | ||
192 | BIT_MASK(BTN_TOOL_MOUSE) | BIT_MASK(BTN_TOOL_BRUSH) | | ||
193 | BIT_MASK(BTN_TOOL_PENCIL) | BIT_MASK(BTN_TOOL_AIRBRUSH) | | ||
194 | BIT_MASK(BTN_TOOL_LENS) | BIT_MASK(BTN_STYLUS2); | ||
185 | input_set_abs_params(input_dev, ABS_DISTANCE, 0, wacom_wac->features->distance_max, 0, 0); | 195 | input_set_abs_params(input_dev, ABS_DISTANCE, 0, wacom_wac->features->distance_max, 0, 0); |
186 | input_set_abs_params(input_dev, ABS_WHEEL, 0, 1023, 0, 0); | 196 | input_set_abs_params(input_dev, ABS_WHEEL, 0, 1023, 0, 0); |
187 | input_set_abs_params(input_dev, ABS_TILT_X, 0, 127, 0, 0); | 197 | input_set_abs_params(input_dev, ABS_TILT_X, 0, 127, 0, 0); |
@@ -192,12 +202,13 @@ void input_dev_i(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | |||
192 | 202 | ||
193 | void input_dev_pl(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | 203 | void input_dev_pl(struct input_dev *input_dev, struct wacom_wac *wacom_wac) |
194 | { | 204 | { |
195 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); | 205 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_STYLUS2) | |
206 | BIT_MASK(BTN_TOOL_RUBBER); | ||
196 | } | 207 | } |
197 | 208 | ||
198 | void input_dev_pt(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | 209 | void input_dev_pt(struct input_dev *input_dev, struct wacom_wac *wacom_wac) |
199 | { | 210 | { |
200 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); | 211 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER); |
201 | } | 212 | } |
202 | 213 | ||
203 | static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *id) | 214 | static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *id) |
@@ -243,12 +254,13 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
243 | input_dev->open = wacom_open; | 254 | input_dev->open = wacom_open; |
244 | input_dev->close = wacom_close; | 255 | input_dev->close = wacom_close; |
245 | 256 | ||
246 | input_dev->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS); | 257 | input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
247 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH) | BIT(BTN_STYLUS); | 258 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) | |
259 | BIT_MASK(BTN_TOUCH) | BIT_MASK(BTN_STYLUS); | ||
248 | input_set_abs_params(input_dev, ABS_X, 0, wacom_wac->features->x_max, 4, 0); | 260 | input_set_abs_params(input_dev, ABS_X, 0, wacom_wac->features->x_max, 4, 0); |
249 | input_set_abs_params(input_dev, ABS_Y, 0, wacom_wac->features->y_max, 4, 0); | 261 | input_set_abs_params(input_dev, ABS_Y, 0, wacom_wac->features->y_max, 4, 0); |
250 | input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom_wac->features->pressure_max, 0, 0); | 262 | input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom_wac->features->pressure_max, 0, 0); |
251 | input_dev->absbit[LONG(ABS_MISC)] |= BIT(ABS_MISC); | 263 | input_dev->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC); |
252 | 264 | ||
253 | wacom_init_input_dev(input_dev, wacom_wac); | 265 | wacom_init_input_dev(input_dev, wacom_wac); |
254 | 266 | ||
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c index 51ae4fb7d12..f59aecf5ec1 100644 --- a/drivers/input/touchscreen/ads7846.c +++ b/drivers/input/touchscreen/ads7846.c | |||
@@ -917,8 +917,8 @@ static int __devinit ads7846_probe(struct spi_device *spi) | |||
917 | input_dev->phys = ts->phys; | 917 | input_dev->phys = ts->phys; |
918 | input_dev->dev.parent = &spi->dev; | 918 | input_dev->dev.parent = &spi->dev; |
919 | 919 | ||
920 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 920 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
921 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 921 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
922 | input_set_abs_params(input_dev, ABS_X, | 922 | input_set_abs_params(input_dev, ABS_X, |
923 | pdata->x_min ? : 0, | 923 | pdata->x_min ? : 0, |
924 | pdata->x_max ? : MAX_12BIT, | 924 | pdata->x_max ? : MAX_12BIT, |
diff --git a/drivers/input/touchscreen/corgi_ts.c b/drivers/input/touchscreen/corgi_ts.c index e6a31d11878..b1b2e07bf08 100644 --- a/drivers/input/touchscreen/corgi_ts.c +++ b/drivers/input/touchscreen/corgi_ts.c | |||
@@ -302,8 +302,8 @@ static int __init corgits_probe(struct platform_device *pdev) | |||
302 | input_dev->id.version = 0x0100; | 302 | input_dev->id.version = 0x0100; |
303 | input_dev->dev.parent = &pdev->dev; | 303 | input_dev->dev.parent = &pdev->dev; |
304 | 304 | ||
305 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 305 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
306 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 306 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
307 | input_set_abs_params(input_dev, ABS_X, X_AXIS_MIN, X_AXIS_MAX, 0, 0); | 307 | input_set_abs_params(input_dev, ABS_X, X_AXIS_MIN, X_AXIS_MAX, 0, 0); |
308 | input_set_abs_params(input_dev, ABS_Y, Y_AXIS_MIN, Y_AXIS_MAX, 0, 0); | 308 | input_set_abs_params(input_dev, ABS_Y, Y_AXIS_MIN, Y_AXIS_MAX, 0, 0); |
309 | input_set_abs_params(input_dev, ABS_PRESSURE, PRESSURE_MIN, PRESSURE_MAX, 0, 0); | 309 | input_set_abs_params(input_dev, ABS_PRESSURE, PRESSURE_MIN, PRESSURE_MAX, 0, 0); |
diff --git a/drivers/input/touchscreen/elo.c b/drivers/input/touchscreen/elo.c index 557d781719f..d20689cdbd5 100644 --- a/drivers/input/touchscreen/elo.c +++ b/drivers/input/touchscreen/elo.c | |||
@@ -320,8 +320,8 @@ static int elo_connect(struct serio *serio, struct serio_driver *drv) | |||
320 | input_dev->id.version = 0x0100; | 320 | input_dev->id.version = 0x0100; |
321 | input_dev->dev.parent = &serio->dev; | 321 | input_dev->dev.parent = &serio->dev; |
322 | 322 | ||
323 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 323 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
324 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 324 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
325 | 325 | ||
326 | serio_set_drvdata(serio, elo); | 326 | serio_set_drvdata(serio, elo); |
327 | err = serio_open(serio, drv); | 327 | err = serio_open(serio, drv); |
diff --git a/drivers/input/touchscreen/fujitsu_ts.c b/drivers/input/touchscreen/fujitsu_ts.c index daf7a4afc93..80b21800355 100644 --- a/drivers/input/touchscreen/fujitsu_ts.c +++ b/drivers/input/touchscreen/fujitsu_ts.c | |||
@@ -122,8 +122,8 @@ static int fujitsu_connect(struct serio *serio, struct serio_driver *drv) | |||
122 | input_dev->id.vendor = SERIO_FUJITSU; | 122 | input_dev->id.vendor = SERIO_FUJITSU; |
123 | input_dev->id.product = 0; | 123 | input_dev->id.product = 0; |
124 | input_dev->id.version = 0x0100; | 124 | input_dev->id.version = 0x0100; |
125 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 125 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
126 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 126 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
127 | 127 | ||
128 | input_set_abs_params(input_dev, ABS_X, 0, 4096, 0, 0); | 128 | input_set_abs_params(input_dev, ABS_X, 0, 4096, 0, 0); |
129 | input_set_abs_params(input_dev, ABS_Y, 0, 4096, 0, 0); | 129 | input_set_abs_params(input_dev, ABS_Y, 0, 4096, 0, 0); |
diff --git a/drivers/input/touchscreen/gunze.c b/drivers/input/touchscreen/gunze.c index 39d602600d7..a48a15868c4 100644 --- a/drivers/input/touchscreen/gunze.c +++ b/drivers/input/touchscreen/gunze.c | |||
@@ -137,8 +137,8 @@ static int gunze_connect(struct serio *serio, struct serio_driver *drv) | |||
137 | input_dev->id.product = 0x0051; | 137 | input_dev->id.product = 0x0051; |
138 | input_dev->id.version = 0x0100; | 138 | input_dev->id.version = 0x0100; |
139 | input_dev->dev.parent = &serio->dev; | 139 | input_dev->dev.parent = &serio->dev; |
140 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 140 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
141 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 141 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
142 | input_set_abs_params(input_dev, ABS_X, 24, 1000, 0, 0); | 142 | input_set_abs_params(input_dev, ABS_X, 24, 1000, 0, 0); |
143 | input_set_abs_params(input_dev, ABS_Y, 24, 1000, 0, 0); | 143 | input_set_abs_params(input_dev, ABS_Y, 24, 1000, 0, 0); |
144 | 144 | ||
diff --git a/drivers/input/touchscreen/h3600_ts_input.c b/drivers/input/touchscreen/h3600_ts_input.c index 09ed7803cb8..2ae6c6016a8 100644 --- a/drivers/input/touchscreen/h3600_ts_input.c +++ b/drivers/input/touchscreen/h3600_ts_input.c | |||
@@ -373,8 +373,9 @@ static int h3600ts_connect(struct serio *serio, struct serio_driver *drv) | |||
373 | 373 | ||
374 | input_dev->event = h3600ts_event; | 374 | input_dev->event = h3600ts_event; |
375 | 375 | ||
376 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_LED) | BIT(EV_PWR); | 376 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) | |
377 | input_dev->ledbit[0] = BIT(LED_SLEEP); | 377 | BIT_MASK(EV_LED) | BIT_MASK(EV_PWR); |
378 | input_dev->ledbit[0] = BIT_MASK(LED_SLEEP); | ||
378 | input_set_abs_params(input_dev, ABS_X, 60, 985, 0, 0); | 379 | input_set_abs_params(input_dev, ABS_X, 60, 985, 0, 0); |
379 | input_set_abs_params(input_dev, ABS_Y, 35, 1024, 0, 0); | 380 | input_set_abs_params(input_dev, ABS_Y, 35, 1024, 0, 0); |
380 | 381 | ||
diff --git a/drivers/input/touchscreen/hp680_ts_input.c b/drivers/input/touchscreen/hp680_ts_input.c index 1a15475aedf..c38d4e0f95c 100644 --- a/drivers/input/touchscreen/hp680_ts_input.c +++ b/drivers/input/touchscreen/hp680_ts_input.c | |||
@@ -81,8 +81,8 @@ static int __init hp680_ts_init(void) | |||
81 | if (!hp680_ts_dev) | 81 | if (!hp680_ts_dev) |
82 | return -ENOMEM; | 82 | return -ENOMEM; |
83 | 83 | ||
84 | hp680_ts_dev->evbit[0] = BIT(EV_ABS) | BIT(EV_KEY); | 84 | hp680_ts_dev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); |
85 | hp680_ts_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 85 | hp680_ts_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
86 | 86 | ||
87 | input_set_abs_params(hp680_ts_dev, ABS_X, | 87 | input_set_abs_params(hp680_ts_dev, ABS_X, |
88 | HP680_TS_ABS_X_MIN, HP680_TS_ABS_X_MAX, 0, 0); | 88 | HP680_TS_ABS_X_MIN, HP680_TS_ABS_X_MAX, 0, 0); |
diff --git a/drivers/input/touchscreen/mk712.c b/drivers/input/touchscreen/mk712.c index 44140feeffc..80a65886870 100644 --- a/drivers/input/touchscreen/mk712.c +++ b/drivers/input/touchscreen/mk712.c | |||
@@ -186,8 +186,8 @@ static int __init mk712_init(void) | |||
186 | mk712_dev->open = mk712_open; | 186 | mk712_dev->open = mk712_open; |
187 | mk712_dev->close = mk712_close; | 187 | mk712_dev->close = mk712_close; |
188 | 188 | ||
189 | mk712_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 189 | mk712_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
190 | mk712_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 190 | mk712_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
191 | input_set_abs_params(mk712_dev, ABS_X, 0, 0xfff, 88, 0); | 191 | input_set_abs_params(mk712_dev, ABS_X, 0, 0xfff, 88, 0); |
192 | input_set_abs_params(mk712_dev, ABS_Y, 0, 0xfff, 88, 0); | 192 | input_set_abs_params(mk712_dev, ABS_Y, 0, 0xfff, 88, 0); |
193 | 193 | ||
diff --git a/drivers/input/touchscreen/mtouch.c b/drivers/input/touchscreen/mtouch.c index 4ec3b1f940c..9077228418b 100644 --- a/drivers/input/touchscreen/mtouch.c +++ b/drivers/input/touchscreen/mtouch.c | |||
@@ -151,8 +151,8 @@ static int mtouch_connect(struct serio *serio, struct serio_driver *drv) | |||
151 | input_dev->id.product = 0; | 151 | input_dev->id.product = 0; |
152 | input_dev->id.version = 0x0100; | 152 | input_dev->id.version = 0x0100; |
153 | input_dev->dev.parent = &serio->dev; | 153 | input_dev->dev.parent = &serio->dev; |
154 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 154 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
155 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 155 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
156 | input_set_abs_params(mtouch->dev, ABS_X, MTOUCH_MIN_XC, MTOUCH_MAX_XC, 0, 0); | 156 | input_set_abs_params(mtouch->dev, ABS_X, MTOUCH_MIN_XC, MTOUCH_MAX_XC, 0, 0); |
157 | input_set_abs_params(mtouch->dev, ABS_Y, MTOUCH_MIN_YC, MTOUCH_MAX_YC, 0, 0); | 157 | input_set_abs_params(mtouch->dev, ABS_Y, MTOUCH_MIN_YC, MTOUCH_MAX_YC, 0, 0); |
158 | 158 | ||
diff --git a/drivers/input/touchscreen/penmount.c b/drivers/input/touchscreen/penmount.c index f2c0d3c7149..c7f9cebebbb 100644 --- a/drivers/input/touchscreen/penmount.c +++ b/drivers/input/touchscreen/penmount.c | |||
@@ -113,8 +113,8 @@ static int pm_connect(struct serio *serio, struct serio_driver *drv) | |||
113 | input_dev->id.version = 0x0100; | 113 | input_dev->id.version = 0x0100; |
114 | input_dev->dev.parent = &serio->dev; | 114 | input_dev->dev.parent = &serio->dev; |
115 | 115 | ||
116 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 116 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
117 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 117 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
118 | input_set_abs_params(pm->dev, ABS_X, 0, 0x3ff, 0, 0); | 118 | input_set_abs_params(pm->dev, ABS_X, 0, 0x3ff, 0, 0); |
119 | input_set_abs_params(pm->dev, ABS_Y, 0, 0x3ff, 0, 0); | 119 | input_set_abs_params(pm->dev, ABS_Y, 0, 0x3ff, 0, 0); |
120 | 120 | ||
diff --git a/drivers/input/touchscreen/touchright.c b/drivers/input/touchscreen/touchright.c index 3def7bb1df4..3a5c142c2a7 100644 --- a/drivers/input/touchscreen/touchright.c +++ b/drivers/input/touchscreen/touchright.c | |||
@@ -125,8 +125,8 @@ static int tr_connect(struct serio *serio, struct serio_driver *drv) | |||
125 | input_dev->id.product = 0; | 125 | input_dev->id.product = 0; |
126 | input_dev->id.version = 0x0100; | 126 | input_dev->id.version = 0x0100; |
127 | input_dev->dev.parent = &serio->dev; | 127 | input_dev->dev.parent = &serio->dev; |
128 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 128 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
129 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 129 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
130 | input_set_abs_params(tr->dev, ABS_X, TR_MIN_XC, TR_MAX_XC, 0, 0); | 130 | input_set_abs_params(tr->dev, ABS_X, TR_MIN_XC, TR_MAX_XC, 0, 0); |
131 | input_set_abs_params(tr->dev, ABS_Y, TR_MIN_YC, TR_MAX_YC, 0, 0); | 131 | input_set_abs_params(tr->dev, ABS_Y, TR_MIN_YC, TR_MAX_YC, 0, 0); |
132 | 132 | ||
diff --git a/drivers/input/touchscreen/touchwin.c b/drivers/input/touchscreen/touchwin.c index ac4bdcf1866..763a656a59f 100644 --- a/drivers/input/touchscreen/touchwin.c +++ b/drivers/input/touchscreen/touchwin.c | |||
@@ -132,8 +132,8 @@ static int tw_connect(struct serio *serio, struct serio_driver *drv) | |||
132 | input_dev->id.product = 0; | 132 | input_dev->id.product = 0; |
133 | input_dev->id.version = 0x0100; | 133 | input_dev->id.version = 0x0100; |
134 | input_dev->dev.parent = &serio->dev; | 134 | input_dev->dev.parent = &serio->dev; |
135 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 135 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
136 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 136 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
137 | input_set_abs_params(tw->dev, ABS_X, TW_MIN_XC, TW_MAX_XC, 0, 0); | 137 | input_set_abs_params(tw->dev, ABS_X, TW_MIN_XC, TW_MAX_XC, 0, 0); |
138 | input_set_abs_params(tw->dev, ABS_Y, TW_MIN_YC, TW_MAX_YC, 0, 0); | 138 | input_set_abs_params(tw->dev, ABS_Y, TW_MIN_YC, TW_MAX_YC, 0, 0); |
139 | 139 | ||
diff --git a/drivers/input/touchscreen/ucb1400_ts.c b/drivers/input/touchscreen/ucb1400_ts.c index 86aed64ec0f..7549939b953 100644 --- a/drivers/input/touchscreen/ucb1400_ts.c +++ b/drivers/input/touchscreen/ucb1400_ts.c | |||
@@ -333,10 +333,9 @@ static int ucb1400_ts_thread(void *_ucb) | |||
333 | timeout = msecs_to_jiffies(10); | 333 | timeout = msecs_to_jiffies(10); |
334 | } | 334 | } |
335 | 335 | ||
336 | wait_event_interruptible_timeout(ucb->ts_wait, | 336 | wait_event_freezable_timeout(ucb->ts_wait, |
337 | ucb->irq_pending || ucb->ts_restart || kthread_should_stop(), | 337 | ucb->irq_pending || ucb->ts_restart || kthread_should_stop(), |
338 | timeout); | 338 | timeout); |
339 | try_to_freeze(); | ||
340 | } | 339 | } |
341 | 340 | ||
342 | /* Send the "pen off" if we are stopping with the pen still active */ | 341 | /* Send the "pen off" if we are stopping with the pen still active */ |
@@ -518,7 +517,7 @@ static int ucb1400_ts_probe(struct device *dev) | |||
518 | idev->id.product = id; | 517 | idev->id.product = id; |
519 | idev->open = ucb1400_ts_open; | 518 | idev->open = ucb1400_ts_open; |
520 | idev->close = ucb1400_ts_close; | 519 | idev->close = ucb1400_ts_close; |
521 | idev->evbit[0] = BIT(EV_ABS); | 520 | idev->evbit[0] = BIT_MASK(EV_ABS); |
522 | 521 | ||
523 | ucb1400_adc_enable(ucb); | 522 | ucb1400_adc_enable(ucb); |
524 | x_res = ucb1400_ts_read_xres(ucb); | 523 | x_res = ucb1400_ts_read_xres(ucb); |
diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c index 9fb3d5c3099..5f34b78d5dd 100644 --- a/drivers/input/touchscreen/usbtouchscreen.c +++ b/drivers/input/touchscreen/usbtouchscreen.c | |||
@@ -868,8 +868,8 @@ static int usbtouch_probe(struct usb_interface *intf, | |||
868 | input_dev->open = usbtouch_open; | 868 | input_dev->open = usbtouch_open; |
869 | input_dev->close = usbtouch_close; | 869 | input_dev->close = usbtouch_close; |
870 | 870 | ||
871 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 871 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
872 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 872 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
873 | input_set_abs_params(input_dev, ABS_X, type->min_xc, type->max_xc, 0, 0); | 873 | input_set_abs_params(input_dev, ABS_X, type->min_xc, type->max_xc, 0, 0); |
874 | input_set_abs_params(input_dev, ABS_Y, type->min_yc, type->max_yc, 0, 0); | 874 | input_set_abs_params(input_dev, ABS_Y, type->min_yc, type->max_yc, 0, 0); |
875 | if (type->max_press) | 875 | if (type->max_press) |
diff --git a/drivers/isdn/act2000/act2000_isa.c b/drivers/isdn/act2000/act2000_isa.c index 09ea50dd345..819ea85576a 100644 --- a/drivers/isdn/act2000/act2000_isa.c +++ b/drivers/isdn/act2000/act2000_isa.c | |||
@@ -126,7 +126,7 @@ act2000_isa_enable_irq(act2000_card * card) | |||
126 | 126 | ||
127 | /* | 127 | /* |
128 | * Install interrupt handler, enable irq on card. | 128 | * Install interrupt handler, enable irq on card. |
129 | * If irq is -1, choose next free irq, else irq is given explicitely. | 129 | * If irq is -1, choose next free irq, else irq is given explicitly. |
130 | */ | 130 | */ |
131 | int | 131 | int |
132 | act2000_isa_config_irq(act2000_card * card, short irq) | 132 | act2000_isa_config_irq(act2000_card * card, short irq) |
diff --git a/drivers/isdn/gigaset/common.c b/drivers/isdn/gigaset/common.c index 6df336bdd57..acd417197d0 100644 --- a/drivers/isdn/gigaset/common.c +++ b/drivers/isdn/gigaset/common.c | |||
@@ -534,7 +534,8 @@ int gigaset_fill_inbuf(struct inbuf_t *inbuf, const unsigned char *src, | |||
534 | n = RBUFSIZE - tail; | 534 | n = RBUFSIZE - tail; |
535 | if (!n) { | 535 | if (!n) { |
536 | dev_err(inbuf->cs->dev, | 536 | dev_err(inbuf->cs->dev, |
537 | "buffer overflow (%u bytes lost)", bytesleft); | 537 | "buffer overflow (%u bytes lost)\n", |
538 | bytesleft); | ||
538 | break; | 539 | break; |
539 | } | 540 | } |
540 | if (n > bytesleft) | 541 | if (n > bytesleft) |
diff --git a/drivers/isdn/hardware/avm/b1.c b/drivers/isdn/hardware/avm/b1.c index 7a69a18d07e..4484a641723 100644 --- a/drivers/isdn/hardware/avm/b1.c +++ b/drivers/isdn/hardware/avm/b1.c | |||
@@ -321,12 +321,15 @@ void b1_reset_ctr(struct capi_ctr *ctrl) | |||
321 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); | 321 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); |
322 | avmcard *card = cinfo->card; | 322 | avmcard *card = cinfo->card; |
323 | unsigned int port = card->port; | 323 | unsigned int port = card->port; |
324 | unsigned long flags; | ||
324 | 325 | ||
325 | b1_reset(port); | 326 | b1_reset(port); |
326 | b1_reset(port); | 327 | b1_reset(port); |
327 | 328 | ||
328 | memset(cinfo->version, 0, sizeof(cinfo->version)); | 329 | memset(cinfo->version, 0, sizeof(cinfo->version)); |
330 | spin_lock_irqsave(&card->lock, flags); | ||
329 | capilib_release(&cinfo->ncci_head); | 331 | capilib_release(&cinfo->ncci_head); |
332 | spin_unlock_irqrestore(&card->lock, flags); | ||
330 | capi_ctr_reseted(ctrl); | 333 | capi_ctr_reseted(ctrl); |
331 | } | 334 | } |
332 | 335 | ||
@@ -361,9 +364,8 @@ void b1_release_appl(struct capi_ctr *ctrl, u16 appl) | |||
361 | unsigned int port = card->port; | 364 | unsigned int port = card->port; |
362 | unsigned long flags; | 365 | unsigned long flags; |
363 | 366 | ||
364 | capilib_release_appl(&cinfo->ncci_head, appl); | ||
365 | |||
366 | spin_lock_irqsave(&card->lock, flags); | 367 | spin_lock_irqsave(&card->lock, flags); |
368 | capilib_release_appl(&cinfo->ncci_head, appl); | ||
367 | b1_put_byte(port, SEND_RELEASE); | 369 | b1_put_byte(port, SEND_RELEASE); |
368 | b1_put_word(port, appl); | 370 | b1_put_word(port, appl); |
369 | spin_unlock_irqrestore(&card->lock, flags); | 371 | spin_unlock_irqrestore(&card->lock, flags); |
@@ -380,27 +382,27 @@ u16 b1_send_message(struct capi_ctr *ctrl, struct sk_buff *skb) | |||
380 | u8 subcmd = CAPIMSG_SUBCOMMAND(skb->data); | 382 | u8 subcmd = CAPIMSG_SUBCOMMAND(skb->data); |
381 | u16 dlen, retval; | 383 | u16 dlen, retval; |
382 | 384 | ||
385 | spin_lock_irqsave(&card->lock, flags); | ||
383 | if (CAPICMD(cmd, subcmd) == CAPI_DATA_B3_REQ) { | 386 | if (CAPICMD(cmd, subcmd) == CAPI_DATA_B3_REQ) { |
384 | retval = capilib_data_b3_req(&cinfo->ncci_head, | 387 | retval = capilib_data_b3_req(&cinfo->ncci_head, |
385 | CAPIMSG_APPID(skb->data), | 388 | CAPIMSG_APPID(skb->data), |
386 | CAPIMSG_NCCI(skb->data), | 389 | CAPIMSG_NCCI(skb->data), |
387 | CAPIMSG_MSGID(skb->data)); | 390 | CAPIMSG_MSGID(skb->data)); |
388 | if (retval != CAPI_NOERROR) | 391 | if (retval != CAPI_NOERROR) { |
392 | spin_unlock_irqrestore(&card->lock, flags); | ||
389 | return retval; | 393 | return retval; |
394 | } | ||
390 | 395 | ||
391 | dlen = CAPIMSG_DATALEN(skb->data); | 396 | dlen = CAPIMSG_DATALEN(skb->data); |
392 | 397 | ||
393 | spin_lock_irqsave(&card->lock, flags); | ||
394 | b1_put_byte(port, SEND_DATA_B3_REQ); | 398 | b1_put_byte(port, SEND_DATA_B3_REQ); |
395 | b1_put_slice(port, skb->data, len); | 399 | b1_put_slice(port, skb->data, len); |
396 | b1_put_slice(port, skb->data + len, dlen); | 400 | b1_put_slice(port, skb->data + len, dlen); |
397 | spin_unlock_irqrestore(&card->lock, flags); | ||
398 | } else { | 401 | } else { |
399 | spin_lock_irqsave(&card->lock, flags); | ||
400 | b1_put_byte(port, SEND_MESSAGE); | 402 | b1_put_byte(port, SEND_MESSAGE); |
401 | b1_put_slice(port, skb->data, len); | 403 | b1_put_slice(port, skb->data, len); |
402 | spin_unlock_irqrestore(&card->lock, flags); | ||
403 | } | 404 | } |
405 | spin_unlock_irqrestore(&card->lock, flags); | ||
404 | 406 | ||
405 | dev_kfree_skb_any(skb); | 407 | dev_kfree_skb_any(skb); |
406 | return CAPI_NOERROR; | 408 | return CAPI_NOERROR; |
@@ -534,17 +536,17 @@ irqreturn_t b1_interrupt(int interrupt, void *devptr) | |||
534 | 536 | ||
535 | ApplId = (unsigned) b1_get_word(card->port); | 537 | ApplId = (unsigned) b1_get_word(card->port); |
536 | MsgLen = b1_get_slice(card->port, card->msgbuf); | 538 | MsgLen = b1_get_slice(card->port, card->msgbuf); |
537 | spin_unlock_irqrestore(&card->lock, flags); | ||
538 | if (!(skb = alloc_skb(MsgLen, GFP_ATOMIC))) { | 539 | if (!(skb = alloc_skb(MsgLen, GFP_ATOMIC))) { |
539 | printk(KERN_ERR "%s: incoming packet dropped\n", | 540 | printk(KERN_ERR "%s: incoming packet dropped\n", |
540 | card->name); | 541 | card->name); |
542 | spin_unlock_irqrestore(&card->lock, flags); | ||
541 | } else { | 543 | } else { |
542 | memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); | 544 | memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); |
543 | if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_CONF) | 545 | if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_CONF) |
544 | capilib_data_b3_conf(&cinfo->ncci_head, ApplId, | 546 | capilib_data_b3_conf(&cinfo->ncci_head, ApplId, |
545 | CAPIMSG_NCCI(skb->data), | 547 | CAPIMSG_NCCI(skb->data), |
546 | CAPIMSG_MSGID(skb->data)); | 548 | CAPIMSG_MSGID(skb->data)); |
547 | 549 | spin_unlock_irqrestore(&card->lock, flags); | |
548 | capi_ctr_handle_message(ctrl, ApplId, skb); | 550 | capi_ctr_handle_message(ctrl, ApplId, skb); |
549 | } | 551 | } |
550 | break; | 552 | break; |
@@ -554,21 +556,17 @@ irqreturn_t b1_interrupt(int interrupt, void *devptr) | |||
554 | ApplId = b1_get_word(card->port); | 556 | ApplId = b1_get_word(card->port); |
555 | NCCI = b1_get_word(card->port); | 557 | NCCI = b1_get_word(card->port); |
556 | WindowSize = b1_get_word(card->port); | 558 | WindowSize = b1_get_word(card->port); |
557 | spin_unlock_irqrestore(&card->lock, flags); | ||
558 | |||
559 | capilib_new_ncci(&cinfo->ncci_head, ApplId, NCCI, WindowSize); | 559 | capilib_new_ncci(&cinfo->ncci_head, ApplId, NCCI, WindowSize); |
560 | 560 | spin_unlock_irqrestore(&card->lock, flags); | |
561 | break; | 561 | break; |
562 | 562 | ||
563 | case RECEIVE_FREE_NCCI: | 563 | case RECEIVE_FREE_NCCI: |
564 | 564 | ||
565 | ApplId = b1_get_word(card->port); | 565 | ApplId = b1_get_word(card->port); |
566 | NCCI = b1_get_word(card->port); | 566 | NCCI = b1_get_word(card->port); |
567 | spin_unlock_irqrestore(&card->lock, flags); | ||
568 | |||
569 | if (NCCI != 0xffffffff) | 567 | if (NCCI != 0xffffffff) |
570 | capilib_free_ncci(&cinfo->ncci_head, ApplId, NCCI); | 568 | capilib_free_ncci(&cinfo->ncci_head, ApplId, NCCI); |
571 | 569 | spin_unlock_irqrestore(&card->lock, flags); | |
572 | break; | 570 | break; |
573 | 571 | ||
574 | case RECEIVE_START: | 572 | case RECEIVE_START: |
diff --git a/drivers/isdn/hardware/avm/b1dma.c b/drivers/isdn/hardware/avm/b1dma.c index 428872b653e..669f6f67449 100644 --- a/drivers/isdn/hardware/avm/b1dma.c +++ b/drivers/isdn/hardware/avm/b1dma.c | |||
@@ -486,11 +486,13 @@ static void b1dma_handle_rx(avmcard *card) | |||
486 | card->name); | 486 | card->name); |
487 | } else { | 487 | } else { |
488 | memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); | 488 | memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); |
489 | if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_CONF) | 489 | if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_CONF) { |
490 | spin_lock(&card->lock); | ||
490 | capilib_data_b3_conf(&cinfo->ncci_head, ApplId, | 491 | capilib_data_b3_conf(&cinfo->ncci_head, ApplId, |
491 | CAPIMSG_NCCI(skb->data), | 492 | CAPIMSG_NCCI(skb->data), |
492 | CAPIMSG_MSGID(skb->data)); | 493 | CAPIMSG_MSGID(skb->data)); |
493 | 494 | spin_unlock(&card->lock); | |
495 | } | ||
494 | capi_ctr_handle_message(ctrl, ApplId, skb); | 496 | capi_ctr_handle_message(ctrl, ApplId, skb); |
495 | } | 497 | } |
496 | break; | 498 | break; |
@@ -500,9 +502,9 @@ static void b1dma_handle_rx(avmcard *card) | |||
500 | ApplId = _get_word(&p); | 502 | ApplId = _get_word(&p); |
501 | NCCI = _get_word(&p); | 503 | NCCI = _get_word(&p); |
502 | WindowSize = _get_word(&p); | 504 | WindowSize = _get_word(&p); |
503 | 505 | spin_lock(&card->lock); | |
504 | capilib_new_ncci(&cinfo->ncci_head, ApplId, NCCI, WindowSize); | 506 | capilib_new_ncci(&cinfo->ncci_head, ApplId, NCCI, WindowSize); |
505 | 507 | spin_unlock(&card->lock); | |
506 | break; | 508 | break; |
507 | 509 | ||
508 | case RECEIVE_FREE_NCCI: | 510 | case RECEIVE_FREE_NCCI: |
@@ -510,9 +512,11 @@ static void b1dma_handle_rx(avmcard *card) | |||
510 | ApplId = _get_word(&p); | 512 | ApplId = _get_word(&p); |
511 | NCCI = _get_word(&p); | 513 | NCCI = _get_word(&p); |
512 | 514 | ||
513 | if (NCCI != 0xffffffff) | 515 | if (NCCI != 0xffffffff) { |
516 | spin_lock(&card->lock); | ||
514 | capilib_free_ncci(&cinfo->ncci_head, ApplId, NCCI); | 517 | capilib_free_ncci(&cinfo->ncci_head, ApplId, NCCI); |
515 | 518 | spin_unlock(&card->lock); | |
519 | } | ||
516 | break; | 520 | break; |
517 | 521 | ||
518 | case RECEIVE_START: | 522 | case RECEIVE_START: |
@@ -751,10 +755,10 @@ void b1dma_reset_ctr(struct capi_ctr *ctrl) | |||
751 | 755 | ||
752 | spin_lock_irqsave(&card->lock, flags); | 756 | spin_lock_irqsave(&card->lock, flags); |
753 | b1dma_reset(card); | 757 | b1dma_reset(card); |
754 | spin_unlock_irqrestore(&card->lock, flags); | ||
755 | 758 | ||
756 | memset(cinfo->version, 0, sizeof(cinfo->version)); | 759 | memset(cinfo->version, 0, sizeof(cinfo->version)); |
757 | capilib_release(&cinfo->ncci_head); | 760 | capilib_release(&cinfo->ncci_head); |
761 | spin_unlock_irqrestore(&card->lock, flags); | ||
758 | capi_ctr_reseted(ctrl); | 762 | capi_ctr_reseted(ctrl); |
759 | } | 763 | } |
760 | 764 | ||
@@ -803,8 +807,11 @@ void b1dma_release_appl(struct capi_ctr *ctrl, u16 appl) | |||
803 | avmcard *card = cinfo->card; | 807 | avmcard *card = cinfo->card; |
804 | struct sk_buff *skb; | 808 | struct sk_buff *skb; |
805 | void *p; | 809 | void *p; |
810 | unsigned long flags; | ||
806 | 811 | ||
812 | spin_lock_irqsave(&card->lock, flags); | ||
807 | capilib_release_appl(&cinfo->ncci_head, appl); | 813 | capilib_release_appl(&cinfo->ncci_head, appl); |
814 | spin_unlock_irqrestore(&card->lock, flags); | ||
808 | 815 | ||
809 | skb = alloc_skb(7, GFP_ATOMIC); | 816 | skb = alloc_skb(7, GFP_ATOMIC); |
810 | if (!skb) { | 817 | if (!skb) { |
@@ -832,10 +839,13 @@ u16 b1dma_send_message(struct capi_ctr *ctrl, struct sk_buff *skb) | |||
832 | u16 retval = CAPI_NOERROR; | 839 | u16 retval = CAPI_NOERROR; |
833 | 840 | ||
834 | if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_REQ) { | 841 | if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_REQ) { |
842 | unsigned long flags; | ||
843 | spin_lock_irqsave(&card->lock, flags); | ||
835 | retval = capilib_data_b3_req(&cinfo->ncci_head, | 844 | retval = capilib_data_b3_req(&cinfo->ncci_head, |
836 | CAPIMSG_APPID(skb->data), | 845 | CAPIMSG_APPID(skb->data), |
837 | CAPIMSG_NCCI(skb->data), | 846 | CAPIMSG_NCCI(skb->data), |
838 | CAPIMSG_MSGID(skb->data)); | 847 | CAPIMSG_MSGID(skb->data)); |
848 | spin_unlock_irqrestore(&card->lock, flags); | ||
839 | } | 849 | } |
840 | if (retval == CAPI_NOERROR) | 850 | if (retval == CAPI_NOERROR) |
841 | b1dma_queue_tx(card, skb); | 851 | b1dma_queue_tx(card, skb); |
diff --git a/drivers/isdn/hardware/avm/c4.c b/drivers/isdn/hardware/avm/c4.c index d58f927e766..4bbbbe68807 100644 --- a/drivers/isdn/hardware/avm/c4.c +++ b/drivers/isdn/hardware/avm/c4.c | |||
@@ -678,7 +678,9 @@ static irqreturn_t c4_handle_interrupt(avmcard *card) | |||
678 | for (i=0; i < card->nr_controllers; i++) { | 678 | for (i=0; i < card->nr_controllers; i++) { |
679 | avmctrl_info *cinfo = &card->ctrlinfo[i]; | 679 | avmctrl_info *cinfo = &card->ctrlinfo[i]; |
680 | memset(cinfo->version, 0, sizeof(cinfo->version)); | 680 | memset(cinfo->version, 0, sizeof(cinfo->version)); |
681 | spin_lock_irqsave(&card->lock, flags); | ||
681 | capilib_release(&cinfo->ncci_head); | 682 | capilib_release(&cinfo->ncci_head); |
683 | spin_unlock_irqrestore(&card->lock, flags); | ||
682 | capi_ctr_reseted(&cinfo->capi_ctrl); | 684 | capi_ctr_reseted(&cinfo->capi_ctrl); |
683 | } | 685 | } |
684 | card->nlogcontr = 0; | 686 | card->nlogcontr = 0; |
@@ -727,6 +729,7 @@ static void c4_send_init(avmcard *card) | |||
727 | { | 729 | { |
728 | struct sk_buff *skb; | 730 | struct sk_buff *skb; |
729 | void *p; | 731 | void *p; |
732 | unsigned long flags; | ||
730 | 733 | ||
731 | skb = alloc_skb(15, GFP_ATOMIC); | 734 | skb = alloc_skb(15, GFP_ATOMIC); |
732 | if (!skb) { | 735 | if (!skb) { |
@@ -744,12 +747,15 @@ static void c4_send_init(avmcard *card) | |||
744 | skb_put(skb, (u8 *)p - (u8 *)skb->data); | 747 | skb_put(skb, (u8 *)p - (u8 *)skb->data); |
745 | 748 | ||
746 | skb_queue_tail(&card->dma->send_queue, skb); | 749 | skb_queue_tail(&card->dma->send_queue, skb); |
750 | spin_lock_irqsave(&card->lock, flags); | ||
747 | c4_dispatch_tx(card); | 751 | c4_dispatch_tx(card); |
752 | spin_unlock_irqrestore(&card->lock, flags); | ||
748 | } | 753 | } |
749 | 754 | ||
750 | static int queue_sendconfigword(avmcard *card, u32 val) | 755 | static int queue_sendconfigword(avmcard *card, u32 val) |
751 | { | 756 | { |
752 | struct sk_buff *skb; | 757 | struct sk_buff *skb; |
758 | unsigned long flags; | ||
753 | void *p; | 759 | void *p; |
754 | 760 | ||
755 | skb = alloc_skb(3+4, GFP_ATOMIC); | 761 | skb = alloc_skb(3+4, GFP_ATOMIC); |
@@ -766,7 +772,9 @@ static int queue_sendconfigword(avmcard *card, u32 val) | |||
766 | skb_put(skb, (u8 *)p - (u8 *)skb->data); | 772 | skb_put(skb, (u8 *)p - (u8 *)skb->data); |
767 | 773 | ||
768 | skb_queue_tail(&card->dma->send_queue, skb); | 774 | skb_queue_tail(&card->dma->send_queue, skb); |
775 | spin_lock_irqsave(&card->lock, flags); | ||
769 | c4_dispatch_tx(card); | 776 | c4_dispatch_tx(card); |
777 | spin_unlock_irqrestore(&card->lock, flags); | ||
770 | return 0; | 778 | return 0; |
771 | } | 779 | } |
772 | 780 | ||
@@ -986,7 +994,9 @@ static void c4_release_appl(struct capi_ctr *ctrl, u16 appl) | |||
986 | struct sk_buff *skb; | 994 | struct sk_buff *skb; |
987 | void *p; | 995 | void *p; |
988 | 996 | ||
997 | spin_lock_irqsave(&card->lock, flags); | ||
989 | capilib_release_appl(&cinfo->ncci_head, appl); | 998 | capilib_release_appl(&cinfo->ncci_head, appl); |
999 | spin_unlock_irqrestore(&card->lock, flags); | ||
990 | 1000 | ||
991 | if (ctrl->cnr == card->cardnr) { | 1001 | if (ctrl->cnr == card->cardnr) { |
992 | skb = alloc_skb(7, GFP_ATOMIC); | 1002 | skb = alloc_skb(7, GFP_ATOMIC); |
@@ -1019,7 +1029,8 @@ static u16 c4_send_message(struct capi_ctr *ctrl, struct sk_buff *skb) | |||
1019 | u16 retval = CAPI_NOERROR; | 1029 | u16 retval = CAPI_NOERROR; |
1020 | unsigned long flags; | 1030 | unsigned long flags; |
1021 | 1031 | ||
1022 | if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_REQ) { | 1032 | spin_lock_irqsave(&card->lock, flags); |
1033 | if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_REQ) { | ||
1023 | retval = capilib_data_b3_req(&cinfo->ncci_head, | 1034 | retval = capilib_data_b3_req(&cinfo->ncci_head, |
1024 | CAPIMSG_APPID(skb->data), | 1035 | CAPIMSG_APPID(skb->data), |
1025 | CAPIMSG_NCCI(skb->data), | 1036 | CAPIMSG_NCCI(skb->data), |
@@ -1027,10 +1038,9 @@ static u16 c4_send_message(struct capi_ctr *ctrl, struct sk_buff *skb) | |||
1027 | } | 1038 | } |
1028 | if (retval == CAPI_NOERROR) { | 1039 | if (retval == CAPI_NOERROR) { |
1029 | skb_queue_tail(&card->dma->send_queue, skb); | 1040 | skb_queue_tail(&card->dma->send_queue, skb); |
1030 | spin_lock_irqsave(&card->lock, flags); | ||
1031 | c4_dispatch_tx(card); | 1041 | c4_dispatch_tx(card); |
1032 | spin_unlock_irqrestore(&card->lock, flags); | ||
1033 | } | 1042 | } |
1043 | spin_unlock_irqrestore(&card->lock, flags); | ||
1034 | return retval; | 1044 | return retval; |
1035 | } | 1045 | } |
1036 | 1046 | ||
diff --git a/drivers/isdn/hardware/avm/t1isa.c b/drivers/isdn/hardware/avm/t1isa.c index c925020fe9b..6130724e46e 100644 --- a/drivers/isdn/hardware/avm/t1isa.c +++ b/drivers/isdn/hardware/avm/t1isa.c | |||
@@ -180,8 +180,8 @@ static irqreturn_t t1isa_interrupt(int interrupt, void *devptr) | |||
180 | 180 | ||
181 | ApplId = (unsigned) b1_get_word(card->port); | 181 | ApplId = (unsigned) b1_get_word(card->port); |
182 | MsgLen = t1_get_slice(card->port, card->msgbuf); | 182 | MsgLen = t1_get_slice(card->port, card->msgbuf); |
183 | spin_unlock_irqrestore(&card->lock, flags); | ||
184 | if (!(skb = alloc_skb(MsgLen, GFP_ATOMIC))) { | 183 | if (!(skb = alloc_skb(MsgLen, GFP_ATOMIC))) { |
184 | spin_unlock_irqrestore(&card->lock, flags); | ||
185 | printk(KERN_ERR "%s: incoming packet dropped\n", | 185 | printk(KERN_ERR "%s: incoming packet dropped\n", |
186 | card->name); | 186 | card->name); |
187 | } else { | 187 | } else { |
@@ -190,7 +190,7 @@ static irqreturn_t t1isa_interrupt(int interrupt, void *devptr) | |||
190 | capilib_data_b3_conf(&cinfo->ncci_head, ApplId, | 190 | capilib_data_b3_conf(&cinfo->ncci_head, ApplId, |
191 | CAPIMSG_NCCI(skb->data), | 191 | CAPIMSG_NCCI(skb->data), |
192 | CAPIMSG_MSGID(skb->data)); | 192 | CAPIMSG_MSGID(skb->data)); |
193 | 193 | spin_unlock_irqrestore(&card->lock, flags); | |
194 | capi_ctr_handle_message(ctrl, ApplId, skb); | 194 | capi_ctr_handle_message(ctrl, ApplId, skb); |
195 | } | 195 | } |
196 | break; | 196 | break; |
@@ -200,21 +200,17 @@ static irqreturn_t t1isa_interrupt(int interrupt, void *devptr) | |||
200 | ApplId = b1_get_word(card->port); | 200 | ApplId = b1_get_word(card->port); |
201 | NCCI = b1_get_word(card->port); | 201 | NCCI = b1_get_word(card->port); |
202 | WindowSize = b1_get_word(card->port); | 202 | WindowSize = b1_get_word(card->port); |
203 | spin_unlock_irqrestore(&card->lock, flags); | ||
204 | |||
205 | capilib_new_ncci(&cinfo->ncci_head, ApplId, NCCI, WindowSize); | 203 | capilib_new_ncci(&cinfo->ncci_head, ApplId, NCCI, WindowSize); |
206 | 204 | spin_unlock_irqrestore(&card->lock, flags); | |
207 | break; | 205 | break; |
208 | 206 | ||
209 | case RECEIVE_FREE_NCCI: | 207 | case RECEIVE_FREE_NCCI: |
210 | 208 | ||
211 | ApplId = b1_get_word(card->port); | 209 | ApplId = b1_get_word(card->port); |
212 | NCCI = b1_get_word(card->port); | 210 | NCCI = b1_get_word(card->port); |
213 | spin_unlock_irqrestore(&card->lock, flags); | ||
214 | |||
215 | if (NCCI != 0xffffffff) | 211 | if (NCCI != 0xffffffff) |
216 | capilib_free_ncci(&cinfo->ncci_head, ApplId, NCCI); | 212 | capilib_free_ncci(&cinfo->ncci_head, ApplId, NCCI); |
217 | 213 | spin_unlock_irqrestore(&card->lock, flags); | |
218 | break; | 214 | break; |
219 | 215 | ||
220 | case RECEIVE_START: | 216 | case RECEIVE_START: |
@@ -333,13 +329,16 @@ static void t1isa_reset_ctr(struct capi_ctr *ctrl) | |||
333 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); | 329 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); |
334 | avmcard *card = cinfo->card; | 330 | avmcard *card = cinfo->card; |
335 | unsigned int port = card->port; | 331 | unsigned int port = card->port; |
332 | unsigned long flags; | ||
336 | 333 | ||
337 | t1_disable_irq(port); | 334 | t1_disable_irq(port); |
338 | b1_reset(port); | 335 | b1_reset(port); |
339 | b1_reset(port); | 336 | b1_reset(port); |
340 | 337 | ||
341 | memset(cinfo->version, 0, sizeof(cinfo->version)); | 338 | memset(cinfo->version, 0, sizeof(cinfo->version)); |
339 | spin_lock_irqsave(&card->lock, flags); | ||
342 | capilib_release(&cinfo->ncci_head); | 340 | capilib_release(&cinfo->ncci_head); |
341 | spin_unlock_irqrestore(&card->lock, flags); | ||
343 | capi_ctr_reseted(ctrl); | 342 | capi_ctr_reseted(ctrl); |
344 | } | 343 | } |
345 | 344 | ||
@@ -466,29 +465,26 @@ static u16 t1isa_send_message(struct capi_ctr *ctrl, struct sk_buff *skb) | |||
466 | u8 subcmd = CAPIMSG_SUBCOMMAND(skb->data); | 465 | u8 subcmd = CAPIMSG_SUBCOMMAND(skb->data); |
467 | u16 dlen, retval; | 466 | u16 dlen, retval; |
468 | 467 | ||
468 | spin_lock_irqsave(&card->lock, flags); | ||
469 | if (CAPICMD(cmd, subcmd) == CAPI_DATA_B3_REQ) { | 469 | if (CAPICMD(cmd, subcmd) == CAPI_DATA_B3_REQ) { |
470 | retval = capilib_data_b3_req(&cinfo->ncci_head, | 470 | retval = capilib_data_b3_req(&cinfo->ncci_head, |
471 | CAPIMSG_APPID(skb->data), | 471 | CAPIMSG_APPID(skb->data), |
472 | CAPIMSG_NCCI(skb->data), | 472 | CAPIMSG_NCCI(skb->data), |
473 | CAPIMSG_MSGID(skb->data)); | 473 | CAPIMSG_MSGID(skb->data)); |
474 | if (retval != CAPI_NOERROR) | 474 | if (retval != CAPI_NOERROR) { |
475 | spin_unlock_irqrestore(&card->lock, flags); | ||
475 | return retval; | 476 | return retval; |
476 | 477 | } | |
477 | dlen = CAPIMSG_DATALEN(skb->data); | 478 | dlen = CAPIMSG_DATALEN(skb->data); |
478 | 479 | ||
479 | spin_lock_irqsave(&card->lock, flags); | ||
480 | b1_put_byte(port, SEND_DATA_B3_REQ); | 480 | b1_put_byte(port, SEND_DATA_B3_REQ); |
481 | t1_put_slice(port, skb->data, len); | 481 | t1_put_slice(port, skb->data, len); |
482 | t1_put_slice(port, skb->data + len, dlen); | 482 | t1_put_slice(port, skb->data + len, dlen); |
483 | spin_unlock_irqrestore(&card->lock, flags); | ||
484 | } else { | 483 | } else { |
485 | |||
486 | spin_lock_irqsave(&card->lock, flags); | ||
487 | b1_put_byte(port, SEND_MESSAGE); | 484 | b1_put_byte(port, SEND_MESSAGE); |
488 | t1_put_slice(port, skb->data, len); | 485 | t1_put_slice(port, skb->data, len); |
489 | spin_unlock_irqrestore(&card->lock, flags); | ||
490 | } | 486 | } |
491 | 487 | spin_unlock_irqrestore(&card->lock, flags); | |
492 | dev_kfree_skb_any(skb); | 488 | dev_kfree_skb_any(skb); |
493 | return CAPI_NOERROR; | 489 | return CAPI_NOERROR; |
494 | } | 490 | } |
diff --git a/drivers/isdn/hardware/eicon/capifunc.c b/drivers/isdn/hardware/eicon/capifunc.c index 82edc1c1db7..4d425c644d4 100644 --- a/drivers/isdn/hardware/eicon/capifunc.c +++ b/drivers/isdn/hardware/eicon/capifunc.c | |||
@@ -321,7 +321,7 @@ void sendf(APPL * appl, word command, dword Id, word Number, byte * format, ...) | |||
321 | DBG_BLK((((char *)(long)GET_DWORD(&msg.info.data_b3_ind.Data)) + i, | 321 | DBG_BLK((((char *)(long)GET_DWORD(&msg.info.data_b3_ind.Data)) + i, |
322 | ((dlength - i) < 256) ? (dlength - i) : 256)) | 322 | ((dlength - i) < 256) ? (dlength - i) : 256)) |
323 | if (!(myDriverDebugHandle.dbgMask & DL_PRV0)) | 323 | if (!(myDriverDebugHandle.dbgMask & DL_PRV0)) |
324 | break; /* not more if not explicitely requested */ | 324 | break; /* not more if not explicitly requested */ |
325 | } | 325 | } |
326 | } | 326 | } |
327 | break; | 327 | break; |
@@ -965,7 +965,7 @@ static u16 diva_send_message(struct capi_ctr *ctrl, | |||
965 | ((GET_WORD(&msg->info.data_b3_req.Data_Length) - j) < | 965 | ((GET_WORD(&msg->info.data_b3_req.Data_Length) - j) < |
966 | 256) ? (GET_WORD(&msg->info.data_b3_req.Data_Length) - j) : 256)) | 966 | 256) ? (GET_WORD(&msg->info.data_b3_req.Data_Length) - j) : 256)) |
967 | if (!(myDriverDebugHandle.dbgMask & DL_PRV0)) | 967 | if (!(myDriverDebugHandle.dbgMask & DL_PRV0)) |
968 | break; /* not more if not explicitely requested */ | 968 | break; /* not more if not explicitly requested */ |
969 | } | 969 | } |
970 | } | 970 | } |
971 | #endif | 971 | #endif |
diff --git a/drivers/isdn/hisax/amd7930_fn.c b/drivers/isdn/hisax/amd7930_fn.c index 3b19caeba25..c0d7036404a 100644 --- a/drivers/isdn/hisax/amd7930_fn.c +++ b/drivers/isdn/hisax/amd7930_fn.c | |||
@@ -767,7 +767,7 @@ Amd7930_init(struct IsdnCardState *cs) | |||
767 | /* read */ | 767 | /* read */ |
768 | if (*ptr++ >= 0x100) { | 768 | if (*ptr++ >= 0x100) { |
769 | if (cmd < 8) | 769 | if (cmd < 8) |
770 | /* setzt Register zurück */ | 770 | /* reset register */ |
771 | rByteAMD(cs, cmd); | 771 | rByteAMD(cs, cmd); |
772 | else { | 772 | else { |
773 | wByteAMD(cs, 0x00, cmd); | 773 | wByteAMD(cs, 0x00, cmd); |
diff --git a/drivers/isdn/hisax/enternow_pci.c b/drivers/isdn/hisax/enternow_pci.c index b73027ff50e..39f421ed8de 100644 --- a/drivers/isdn/hisax/enternow_pci.c +++ b/drivers/isdn/hisax/enternow_pci.c | |||
@@ -75,16 +75,16 @@ | |||
75 | static const char *enternow_pci_rev = "$Revision: 1.1.4.5 $"; | 75 | static const char *enternow_pci_rev = "$Revision: 1.1.4.5 $"; |
76 | 76 | ||
77 | 77 | ||
78 | /* für PowerISDN PCI */ | 78 | /* for PowerISDN PCI */ |
79 | #define TJ_AMD_IRQ 0x20 | 79 | #define TJ_AMD_IRQ 0x20 |
80 | #define TJ_LED1 0x40 | 80 | #define TJ_LED1 0x40 |
81 | #define TJ_LED2 0x80 | 81 | #define TJ_LED2 0x80 |
82 | 82 | ||
83 | 83 | ||
84 | /* Das Fenster zum AMD... | 84 | /* The window to [the] AMD [chip]... |
85 | * Ab Adresse hw.njet.base + TJ_AMD_PORT werden vom AMD jeweils 8 Bit in | 85 | * From address hw.njet.base + TJ_AMD_PORT onwards, the AMD |
86 | * den TigerJet i/o-Raum gemappt | 86 | * maps [consecutive/multiple] 8 bits into the TigerJet I/O space |
87 | * -> 0x01 des AMD bei hw.njet.base + 0C4 */ | 87 | * -> 0x01 of the AMD at hw.njet.base + 0C4 */ |
88 | #define TJ_AMD_PORT 0xC0 | 88 | #define TJ_AMD_PORT 0xC0 |
89 | 89 | ||
90 | 90 | ||
@@ -96,11 +96,11 @@ static const char *enternow_pci_rev = "$Revision: 1.1.4.5 $"; | |||
96 | static unsigned char | 96 | static unsigned char |
97 | ReadByteAmd7930(struct IsdnCardState *cs, unsigned char offset) | 97 | ReadByteAmd7930(struct IsdnCardState *cs, unsigned char offset) |
98 | { | 98 | { |
99 | /* direktes Register */ | 99 | /* direct register */ |
100 | if(offset < 8) | 100 | if(offset < 8) |
101 | return (inb(cs->hw.njet.isac + 4*offset)); | 101 | return (inb(cs->hw.njet.isac + 4*offset)); |
102 | 102 | ||
103 | /* indirektes Register */ | 103 | /* indirect register */ |
104 | else { | 104 | else { |
105 | outb(offset, cs->hw.njet.isac + 4*AMD_CR); | 105 | outb(offset, cs->hw.njet.isac + 4*AMD_CR); |
106 | return(inb(cs->hw.njet.isac + 4*AMD_DR)); | 106 | return(inb(cs->hw.njet.isac + 4*AMD_DR)); |
@@ -111,11 +111,11 @@ ReadByteAmd7930(struct IsdnCardState *cs, unsigned char offset) | |||
111 | static void | 111 | static void |
112 | WriteByteAmd7930(struct IsdnCardState *cs, unsigned char offset, unsigned char value) | 112 | WriteByteAmd7930(struct IsdnCardState *cs, unsigned char offset, unsigned char value) |
113 | { | 113 | { |
114 | /* direktes Register */ | 114 | /* direct register */ |
115 | if(offset < 8) | 115 | if(offset < 8) |
116 | outb(value, cs->hw.njet.isac + 4*offset); | 116 | outb(value, cs->hw.njet.isac + 4*offset); |
117 | 117 | ||
118 | /* indirektes Register */ | 118 | /* indirect register */ |
119 | else { | 119 | else { |
120 | outb(offset, cs->hw.njet.isac + 4*AMD_CR); | 120 | outb(offset, cs->hw.njet.isac + 4*AMD_CR); |
121 | outb(value, cs->hw.njet.isac + 4*AMD_DR); | 121 | outb(value, cs->hw.njet.isac + 4*AMD_DR); |
diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c index 077080aca79..fba8b624ffc 100644 --- a/drivers/isdn/hisax/hfc_pci.c +++ b/drivers/isdn/hisax/hfc_pci.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* $Id: hfc_pci.c,v 1.48.2.4 2004/02/11 13:21:33 keil Exp $ | 1 | /* $Id: hfc_pci.c,v 1.48.2.4 2004/02/11 13:21:33 keil Exp $ |
2 | * | 2 | * |
3 | * low level driver for CCD´s hfc-pci based cards | 3 | * low level driver for CCD's hfc-pci based cards |
4 | * | 4 | * |
5 | * Author Werner Cornelius | 5 | * Author Werner Cornelius |
6 | * based on existing driver for CCD hfc ISA cards | 6 | * based on existing driver for CCD hfc ISA cards |
diff --git a/drivers/isdn/hisax/isdnhdlc.c b/drivers/isdn/hisax/isdnhdlc.c index 268dced6c34..c69a77a8006 100644 --- a/drivers/isdn/hisax/isdnhdlc.c +++ b/drivers/isdn/hisax/isdnhdlc.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * isdnhdlc.c -- General purpose ISDN HDLC decoder. | 2 | * isdnhdlc.c -- General purpose ISDN HDLC decoder. |
3 | * | 3 | * |
4 | *Copyright (C) 2002 Wolfgang Mües <wolfgang@iksw-muees.de> | 4 | *Copyright (C) 2002 Wolfgang Mües <wolfgang@iksw-muees.de> |
5 | * 2001 Frode Isaksen <fisaksen@bewan.com> | 5 | * 2001 Frode Isaksen <fisaksen@bewan.com> |
6 | * 2001 Kai Germaschewski <kai.germaschewski@gmx.de> | 6 | * 2001 Kai Germaschewski <kai.germaschewski@gmx.de> |
7 | * | 7 | * |
@@ -27,7 +27,7 @@ | |||
27 | 27 | ||
28 | /*-------------------------------------------------------------------*/ | 28 | /*-------------------------------------------------------------------*/ |
29 | 29 | ||
30 | MODULE_AUTHOR("Wolfgang Mües <wolfgang@iksw-muees.de>, " | 30 | MODULE_AUTHOR("Wolfgang Mües <wolfgang@iksw-muees.de>, " |
31 | "Frode Isaksen <fisaksen@bewan.com>, " | 31 | "Frode Isaksen <fisaksen@bewan.com>, " |
32 | "Kai Germaschewski <kai.germaschewski@gmx.de>"); | 32 | "Kai Germaschewski <kai.germaschewski@gmx.de>"); |
33 | MODULE_DESCRIPTION("General purpose ISDN HDLC decoder"); | 33 | MODULE_DESCRIPTION("General purpose ISDN HDLC decoder"); |
diff --git a/drivers/isdn/hisax/isdnhdlc.h b/drivers/isdn/hisax/isdnhdlc.h index 45167d2f8fb..cf0a95a2401 100644 --- a/drivers/isdn/hisax/isdnhdlc.h +++ b/drivers/isdn/hisax/isdnhdlc.h | |||
@@ -5,7 +5,7 @@ | |||
5 | * Neccessary because some ISDN devices don't have HDLC | 5 | * Neccessary because some ISDN devices don't have HDLC |
6 | * controllers. Also included: a bit reversal table. | 6 | * controllers. Also included: a bit reversal table. |
7 | * | 7 | * |
8 | *Copyright (C) 2002 Wolfgang Mües <wolfgang@iksw-muees.de> | 8 | *Copyright (C) 2002 Wolfgang Mües <wolfgang@iksw-muees.de> |
9 | * 2001 Frode Isaksen <fisaksen@bewan.com> | 9 | * 2001 Frode Isaksen <fisaksen@bewan.com> |
10 | * 2001 Kai Germaschewski <kai.germaschewski@gmx.de> | 10 | * 2001 Kai Germaschewski <kai.germaschewski@gmx.de> |
11 | * | 11 | * |
diff --git a/drivers/isdn/hisax/jade.c b/drivers/isdn/hisax/jade.c index 43d61d1bc5b..70840a710ac 100644 --- a/drivers/isdn/hisax/jade.c +++ b/drivers/isdn/hisax/jade.c | |||
@@ -304,7 +304,7 @@ initjade(struct IsdnCardState *cs) | |||
304 | cs->BC_Write_Reg(cs, 1, jade_HDLC_IMR, 0x00); | 304 | cs->BC_Write_Reg(cs, 1, jade_HDLC_IMR, 0x00); |
305 | /* Setup host access to hdlc controller */ | 305 | /* Setup host access to hdlc controller */ |
306 | jade_write_indirect(cs, jade_HDLCCNTRACCESS, (jadeINDIRECT_HAH1|jadeINDIRECT_HAH2)); | 306 | jade_write_indirect(cs, jade_HDLCCNTRACCESS, (jadeINDIRECT_HAH1|jadeINDIRECT_HAH2)); |
307 | /* Unmask HDLC int (don´t forget DSP int later on)*/ | 307 | /* Unmask HDLC int (don't forget DSP int later on)*/ |
308 | cs->BC_Write_Reg(cs, -1,jade_INT, (jadeINT_HDLC1|jadeINT_HDLC2)); | 308 | cs->BC_Write_Reg(cs, -1,jade_INT, (jadeINT_HDLC1|jadeINT_HDLC2)); |
309 | 309 | ||
310 | /* once again TRANSPARENT */ | 310 | /* once again TRANSPARENT */ |
diff --git a/drivers/isdn/pcbit/capi.c b/drivers/isdn/pcbit/capi.c index 7b55e151f1b..ac5a91ccde8 100644 --- a/drivers/isdn/pcbit/capi.c +++ b/drivers/isdn/pcbit/capi.c | |||
@@ -15,9 +15,9 @@ | |||
15 | 15 | ||
16 | /* | 16 | /* |
17 | * Documentation: | 17 | * Documentation: |
18 | * - "Common ISDN API - Perfil Português - Versão 2.1", | 18 | * - "Common ISDN API - Perfil Português - Versão 2.1", |
19 | * Telecom Portugal, Fev 1992. | 19 | * Telecom Portugal, Fev 1992. |
20 | * - "Common ISDN API - Especificação de protocolos para | 20 | * - "Common ISDN API - Especificação de protocolos para |
21 | * acesso aos canais B", Inesc, Jan 1994. | 21 | * acesso aos canais B", Inesc, Jan 1994. |
22 | */ | 22 | */ |
23 | 23 | ||
diff --git a/drivers/isdn/sc/debug.h b/drivers/isdn/sc/debug.h deleted file mode 100644 index e9db96ede4b..00000000000 --- a/drivers/isdn/sc/debug.h +++ /dev/null | |||
@@ -1,19 +0,0 @@ | |||
1 | /* $Id: debug.h,v 1.2.8.1 2001/09/23 22:24:59 kai Exp $ | ||
2 | * | ||
3 | * Copyright (C) 1996 SpellCaster Telecommunications Inc. | ||
4 | * | ||
5 | * This software may be used and distributed according to the terms | ||
6 | * of the GNU General Public License, incorporated herein by reference. | ||
7 | * | ||
8 | * For more information, please contact gpl-info@spellcast.com or write: | ||
9 | * | ||
10 | * SpellCaster Telecommunications Inc. | ||
11 | * 5621 Finch Avenue East, Unit #3 | ||
12 | * Scarborough, Ontario Canada | ||
13 | * M1B 2T9 | ||
14 | * +1 (416) 297-8565 | ||
15 | * +1 (416) 297-6433 Facsimile | ||
16 | */ | ||
17 | |||
18 | #define REQUEST_IRQ(a,b,c,d,e) request_irq(a,b,c,d,e) | ||
19 | #define FREE_IRQ(a,b) free_irq(a,b) | ||
diff --git a/drivers/isdn/sc/includes.h b/drivers/isdn/sc/includes.h index 5286e0c810a..4766e5b7737 100644 --- a/drivers/isdn/sc/includes.h +++ b/drivers/isdn/sc/includes.h | |||
@@ -14,4 +14,3 @@ | |||
14 | #include <linux/timer.h> | 14 | #include <linux/timer.h> |
15 | #include <linux/wait.h> | 15 | #include <linux/wait.h> |
16 | #include <linux/isdnif.h> | 16 | #include <linux/isdnif.h> |
17 | #include "debug.h" | ||
diff --git a/drivers/isdn/sc/init.c b/drivers/isdn/sc/init.c index 0bf76344a0d..d09c854cfac 100644 --- a/drivers/isdn/sc/init.c +++ b/drivers/isdn/sc/init.c | |||
@@ -404,7 +404,7 @@ static void __exit sc_exit(void) | |||
404 | /* | 404 | /* |
405 | * Release the IRQ | 405 | * Release the IRQ |
406 | */ | 406 | */ |
407 | FREE_IRQ(sc_adapter[i]->interrupt, NULL); | 407 | free_irq(sc_adapter[i]->interrupt, NULL); |
408 | 408 | ||
409 | /* | 409 | /* |
410 | * Reset for a clean start | 410 | * Reset for a clean start |
diff --git a/drivers/leds/leds-s3c24xx.c b/drivers/leds/leds-s3c24xx.c index 50914439d86..0fd64075129 100644 --- a/drivers/leds/leds-s3c24xx.c +++ b/drivers/leds/leds-s3c24xx.c | |||
@@ -43,7 +43,7 @@ static void s3c24xx_led_set(struct led_classdev *led_cdev, | |||
43 | struct s3c24xx_gpio_led *led = to_gpio(led_cdev); | 43 | struct s3c24xx_gpio_led *led = to_gpio(led_cdev); |
44 | struct s3c24xx_led_platdata *pd = led->pdata; | 44 | struct s3c24xx_led_platdata *pd = led->pdata; |
45 | 45 | ||
46 | /* there will be a sort delay between setting the output and | 46 | /* there will be a short delay between setting the output and |
47 | * going from output to input when using tristate. */ | 47 | * going from output to input when using tristate. */ |
48 | 48 | ||
49 | s3c2410_gpio_setpin(pd->gpio, (value ? 1 : 0) ^ | 49 | s3c2410_gpio_setpin(pd->gpio, (value ? 1 : 0) ^ |
diff --git a/drivers/macintosh/adbhid.c b/drivers/macintosh/adbhid.c index 2766e4fc4ea..883da72b536 100644 --- a/drivers/macintosh/adbhid.c +++ b/drivers/macintosh/adbhid.c | |||
@@ -791,8 +791,10 @@ adbhid_input_register(int id, int default_id, int original_handler_id, | |||
791 | if (hid->keycode[i]) | 791 | if (hid->keycode[i]) |
792 | set_bit(hid->keycode[i], input_dev->keybit); | 792 | set_bit(hid->keycode[i], input_dev->keybit); |
793 | 793 | ||
794 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP); | 794 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_LED) | |
795 | input_dev->ledbit[0] = BIT(LED_SCROLLL) | BIT(LED_CAPSL) | BIT(LED_NUML); | 795 | BIT_MASK(EV_REP); |
796 | input_dev->ledbit[0] = BIT_MASK(LED_SCROLLL) | | ||
797 | BIT_MASK(LED_CAPSL) | BIT_MASK(LED_NUML); | ||
796 | input_dev->event = adbhid_kbd_event; | 798 | input_dev->event = adbhid_kbd_event; |
797 | input_dev->keycodemax = KEY_FN; | 799 | input_dev->keycodemax = KEY_FN; |
798 | input_dev->keycodesize = sizeof(hid->keycode[0]); | 800 | input_dev->keycodesize = sizeof(hid->keycode[0]); |
@@ -801,16 +803,18 @@ adbhid_input_register(int id, int default_id, int original_handler_id, | |||
801 | case ADB_MOUSE: | 803 | case ADB_MOUSE: |
802 | sprintf(hid->name, "ADB mouse"); | 804 | sprintf(hid->name, "ADB mouse"); |
803 | 805 | ||
804 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 806 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
805 | input_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 807 | input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | |
806 | input_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 808 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); |
809 | input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); | ||
807 | break; | 810 | break; |
808 | 811 | ||
809 | case ADB_MISC: | 812 | case ADB_MISC: |
810 | switch (original_handler_id) { | 813 | switch (original_handler_id) { |
811 | case 0x02: /* Adjustable keyboard button device */ | 814 | case 0x02: /* Adjustable keyboard button device */ |
812 | sprintf(hid->name, "ADB adjustable keyboard buttons"); | 815 | sprintf(hid->name, "ADB adjustable keyboard buttons"); |
813 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 816 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | |
817 | BIT_MASK(EV_REP); | ||
814 | set_bit(KEY_SOUND, input_dev->keybit); | 818 | set_bit(KEY_SOUND, input_dev->keybit); |
815 | set_bit(KEY_MUTE, input_dev->keybit); | 819 | set_bit(KEY_MUTE, input_dev->keybit); |
816 | set_bit(KEY_VOLUMEUP, input_dev->keybit); | 820 | set_bit(KEY_VOLUMEUP, input_dev->keybit); |
@@ -818,7 +822,8 @@ adbhid_input_register(int id, int default_id, int original_handler_id, | |||
818 | break; | 822 | break; |
819 | case 0x1f: /* Powerbook button device */ | 823 | case 0x1f: /* Powerbook button device */ |
820 | sprintf(hid->name, "ADB Powerbook buttons"); | 824 | sprintf(hid->name, "ADB Powerbook buttons"); |
821 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 825 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | |
826 | BIT_MASK(EV_REP); | ||
822 | set_bit(KEY_MUTE, input_dev->keybit); | 827 | set_bit(KEY_MUTE, input_dev->keybit); |
823 | set_bit(KEY_VOLUMEUP, input_dev->keybit); | 828 | set_bit(KEY_VOLUMEUP, input_dev->keybit); |
824 | set_bit(KEY_VOLUMEDOWN, input_dev->keybit); | 829 | set_bit(KEY_VOLUMEDOWN, input_dev->keybit); |
diff --git a/drivers/macintosh/mac_hid.c b/drivers/macintosh/mac_hid.c index 33dee3a773e..89302309da9 100644 --- a/drivers/macintosh/mac_hid.c +++ b/drivers/macintosh/mac_hid.c | |||
@@ -117,9 +117,10 @@ static int emumousebtn_input_register(void) | |||
117 | emumousebtn->id.product = 0x0001; | 117 | emumousebtn->id.product = 0x0001; |
118 | emumousebtn->id.version = 0x0100; | 118 | emumousebtn->id.version = 0x0100; |
119 | 119 | ||
120 | emumousebtn->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 120 | emumousebtn->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
121 | emumousebtn->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); | 121 | emumousebtn->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | |
122 | emumousebtn->relbit[0] = BIT(REL_X) | BIT(REL_Y); | 122 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); |
123 | emumousebtn->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); | ||
123 | 124 | ||
124 | ret = input_register_device(emumousebtn); | 125 | ret = input_register_device(emumousebtn); |
125 | if (ret) | 126 | if (ret) |
diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c index c803d2bba65..48d647abea4 100644 --- a/drivers/macintosh/mediabay.c +++ b/drivers/macintosh/mediabay.c | |||
@@ -563,7 +563,7 @@ static void media_bay_step(int i) | |||
563 | ide_init_hwif_ports(&hw, (unsigned long) bay->cd_base, (unsigned long) 0, NULL); | 563 | ide_init_hwif_ports(&hw, (unsigned long) bay->cd_base, (unsigned long) 0, NULL); |
564 | hw.irq = bay->cd_irq; | 564 | hw.irq = bay->cd_irq; |
565 | hw.chipset = ide_pmac; | 565 | hw.chipset = ide_pmac; |
566 | bay->cd_index = ide_register_hw(&hw, 0, NULL); | 566 | bay->cd_index = ide_register_hw(&hw, NULL, 0, NULL); |
567 | pmu_resume(); | 567 | pmu_resume(); |
568 | } | 568 | } |
569 | if (bay->cd_index == -1) { | 569 | if (bay->cd_index == -1) { |
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index f7c509b7a8e..dc741d3a453 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c | |||
@@ -1521,7 +1521,7 @@ pmu_sr_intr(void) | |||
1521 | req = current_req; | 1521 | req = current_req; |
1522 | /* | 1522 | /* |
1523 | * For PMU sleep and freq change requests, we lock the | 1523 | * For PMU sleep and freq change requests, we lock the |
1524 | * PMU until it's explicitely unlocked. This avoids any | 1524 | * PMU until it's explicitly unlocked. This avoids any |
1525 | * spurrious event polling getting in | 1525 | * spurrious event polling getting in |
1526 | */ | 1526 | */ |
1527 | current_req = req->next; | 1527 | current_req = req->next; |
diff --git a/drivers/md/Kconfig b/drivers/md/Kconfig index 34a8c60a254..9b6fbf044fd 100644 --- a/drivers/md/Kconfig +++ b/drivers/md/Kconfig | |||
@@ -267,6 +267,12 @@ config DM_MULTIPATH_RDAC | |||
267 | ---help--- | 267 | ---help--- |
268 | Multipath support for LSI/Engenio RDAC. | 268 | Multipath support for LSI/Engenio RDAC. |
269 | 269 | ||
270 | config DM_MULTIPATH_HP | ||
271 | tristate "HP MSA multipath support (EXPERIMENTAL)" | ||
272 | depends on DM_MULTIPATH && BLK_DEV_DM && EXPERIMENTAL | ||
273 | ---help--- | ||
274 | Multipath support for HP MSA (Active/Passive) series hardware. | ||
275 | |||
270 | config DM_DELAY | 276 | config DM_DELAY |
271 | tristate "I/O delaying target (EXPERIMENTAL)" | 277 | tristate "I/O delaying target (EXPERIMENTAL)" |
272 | depends on BLK_DEV_DM && EXPERIMENTAL | 278 | depends on BLK_DEV_DM && EXPERIMENTAL |
@@ -276,4 +282,10 @@ config DM_DELAY | |||
276 | 282 | ||
277 | If unsure, say N. | 283 | If unsure, say N. |
278 | 284 | ||
285 | config DM_UEVENT | ||
286 | bool "DM uevents (EXPERIMENTAL)" | ||
287 | depends on BLK_DEV_DM && EXPERIMENTAL | ||
288 | ---help--- | ||
289 | Generate udev events for DM events. | ||
290 | |||
279 | endif # MD | 291 | endif # MD |
diff --git a/drivers/md/Makefile b/drivers/md/Makefile index c49366cdc05..d9aa7edb878 100644 --- a/drivers/md/Makefile +++ b/drivers/md/Makefile | |||
@@ -8,6 +8,7 @@ dm-multipath-objs := dm-hw-handler.o dm-path-selector.o dm-mpath.o | |||
8 | dm-snapshot-objs := dm-snap.o dm-exception-store.o | 8 | dm-snapshot-objs := dm-snap.o dm-exception-store.o |
9 | dm-mirror-objs := dm-log.o dm-raid1.o | 9 | dm-mirror-objs := dm-log.o dm-raid1.o |
10 | dm-rdac-objs := dm-mpath-rdac.o | 10 | dm-rdac-objs := dm-mpath-rdac.o |
11 | dm-hp-sw-objs := dm-mpath-hp-sw.o | ||
11 | md-mod-objs := md.o bitmap.o | 12 | md-mod-objs := md.o bitmap.o |
12 | raid456-objs := raid5.o raid6algos.o raid6recov.o raid6tables.o \ | 13 | raid456-objs := raid5.o raid6algos.o raid6recov.o raid6tables.o \ |
13 | raid6int1.o raid6int2.o raid6int4.o \ | 14 | raid6int1.o raid6int2.o raid6int4.o \ |
@@ -35,6 +36,7 @@ obj-$(CONFIG_DM_CRYPT) += dm-crypt.o | |||
35 | obj-$(CONFIG_DM_DELAY) += dm-delay.o | 36 | obj-$(CONFIG_DM_DELAY) += dm-delay.o |
36 | obj-$(CONFIG_DM_MULTIPATH) += dm-multipath.o dm-round-robin.o | 37 | obj-$(CONFIG_DM_MULTIPATH) += dm-multipath.o dm-round-robin.o |
37 | obj-$(CONFIG_DM_MULTIPATH_EMC) += dm-emc.o | 38 | obj-$(CONFIG_DM_MULTIPATH_EMC) += dm-emc.o |
39 | obj-$(CONFIG_DM_MULTIPATH_HP) += dm-hp-sw.o | ||
38 | obj-$(CONFIG_DM_MULTIPATH_RDAC) += dm-rdac.o | 40 | obj-$(CONFIG_DM_MULTIPATH_RDAC) += dm-rdac.o |
39 | obj-$(CONFIG_DM_SNAPSHOT) += dm-snapshot.o | 41 | obj-$(CONFIG_DM_SNAPSHOT) += dm-snapshot.o |
40 | obj-$(CONFIG_DM_MIRROR) += dm-mirror.o | 42 | obj-$(CONFIG_DM_MIRROR) += dm-mirror.o |
@@ -48,6 +50,10 @@ ifeq ($(CONFIG_ALTIVEC),y) | |||
48 | altivec_flags := -maltivec -mabi=altivec | 50 | altivec_flags := -maltivec -mabi=altivec |
49 | endif | 51 | endif |
50 | 52 | ||
53 | ifeq ($(CONFIG_DM_UEVENT),y) | ||
54 | dm-mod-objs += dm-uevent.o | ||
55 | endif | ||
56 | |||
51 | targets += raid6int1.c | 57 | targets += raid6int1.c |
52 | $(obj)/raid6int1.c: UNROLL := 1 | 58 | $(obj)/raid6int1.c: UNROLL := 1 |
53 | $(obj)/raid6int1.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | 59 | $(obj)/raid6int1.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE |
diff --git a/drivers/md/dm-bio-list.h b/drivers/md/dm-bio-list.h index 3f7b827649e..d4509be0fe6 100644 --- a/drivers/md/dm-bio-list.h +++ b/drivers/md/dm-bio-list.h | |||
@@ -21,11 +21,6 @@ static inline int bio_list_empty(const struct bio_list *bl) | |||
21 | return bl->head == NULL; | 21 | return bl->head == NULL; |
22 | } | 22 | } |
23 | 23 | ||
24 | #define BIO_LIST_INIT { .head = NULL, .tail = NULL } | ||
25 | |||
26 | #define BIO_LIST(bl) \ | ||
27 | struct bio_list bl = BIO_LIST_INIT | ||
28 | |||
29 | static inline void bio_list_init(struct bio_list *bl) | 24 | static inline void bio_list_init(struct bio_list *bl) |
30 | { | 25 | { |
31 | bl->head = bl->tail = NULL; | 26 | bl->head = bl->tail = NULL; |
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c index 64fee90bb68..0eb5416798b 100644 --- a/drivers/md/dm-crypt.c +++ b/drivers/md/dm-crypt.c | |||
@@ -36,7 +36,6 @@ struct dm_crypt_io { | |||
36 | struct work_struct work; | 36 | struct work_struct work; |
37 | atomic_t pending; | 37 | atomic_t pending; |
38 | int error; | 38 | int error; |
39 | int post_process; | ||
40 | }; | 39 | }; |
41 | 40 | ||
42 | /* | 41 | /* |
@@ -57,7 +56,7 @@ struct crypt_config; | |||
57 | 56 | ||
58 | struct crypt_iv_operations { | 57 | struct crypt_iv_operations { |
59 | int (*ctr)(struct crypt_config *cc, struct dm_target *ti, | 58 | int (*ctr)(struct crypt_config *cc, struct dm_target *ti, |
60 | const char *opts); | 59 | const char *opts); |
61 | void (*dtr)(struct crypt_config *cc); | 60 | void (*dtr)(struct crypt_config *cc); |
62 | const char *(*status)(struct crypt_config *cc); | 61 | const char *(*status)(struct crypt_config *cc); |
63 | int (*generator)(struct crypt_config *cc, u8 *iv, sector_t sector); | 62 | int (*generator)(struct crypt_config *cc, u8 *iv, sector_t sector); |
@@ -80,6 +79,8 @@ struct crypt_config { | |||
80 | mempool_t *page_pool; | 79 | mempool_t *page_pool; |
81 | struct bio_set *bs; | 80 | struct bio_set *bs; |
82 | 81 | ||
82 | struct workqueue_struct *io_queue; | ||
83 | struct workqueue_struct *crypt_queue; | ||
83 | /* | 84 | /* |
84 | * crypto related data | 85 | * crypto related data |
85 | */ | 86 | */ |
@@ -112,7 +113,7 @@ static void clone_init(struct dm_crypt_io *, struct bio *); | |||
112 | * Different IV generation algorithms: | 113 | * Different IV generation algorithms: |
113 | * | 114 | * |
114 | * plain: the initial vector is the 32-bit little-endian version of the sector | 115 | * plain: the initial vector is the 32-bit little-endian version of the sector |
115 | * number, padded with zeros if neccessary. | 116 | * number, padded with zeros if necessary. |
116 | * | 117 | * |
117 | * essiv: "encrypted sector|salt initial vector", the sector number is | 118 | * essiv: "encrypted sector|salt initial vector", the sector number is |
118 | * encrypted with the bulk cipher using a salt as key. The salt | 119 | * encrypted with the bulk cipher using a salt as key. The salt |
@@ -137,7 +138,7 @@ static int crypt_iv_plain_gen(struct crypt_config *cc, u8 *iv, sector_t sector) | |||
137 | } | 138 | } |
138 | 139 | ||
139 | static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti, | 140 | static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti, |
140 | const char *opts) | 141 | const char *opts) |
141 | { | 142 | { |
142 | struct crypto_cipher *essiv_tfm; | 143 | struct crypto_cipher *essiv_tfm; |
143 | struct crypto_hash *hash_tfm; | 144 | struct crypto_hash *hash_tfm; |
@@ -175,6 +176,7 @@ static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti, | |||
175 | 176 | ||
176 | if (err) { | 177 | if (err) { |
177 | ti->error = "Error calculating hash in ESSIV"; | 178 | ti->error = "Error calculating hash in ESSIV"; |
179 | kfree(salt); | ||
178 | return err; | 180 | return err; |
179 | } | 181 | } |
180 | 182 | ||
@@ -188,7 +190,7 @@ static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti, | |||
188 | if (crypto_cipher_blocksize(essiv_tfm) != | 190 | if (crypto_cipher_blocksize(essiv_tfm) != |
189 | crypto_blkcipher_ivsize(cc->tfm)) { | 191 | crypto_blkcipher_ivsize(cc->tfm)) { |
190 | ti->error = "Block size of ESSIV cipher does " | 192 | ti->error = "Block size of ESSIV cipher does " |
191 | "not match IV size of block cipher"; | 193 | "not match IV size of block cipher"; |
192 | crypto_free_cipher(essiv_tfm); | 194 | crypto_free_cipher(essiv_tfm); |
193 | kfree(salt); | 195 | kfree(salt); |
194 | return -EINVAL; | 196 | return -EINVAL; |
@@ -319,10 +321,10 @@ crypt_convert_scatterlist(struct crypt_config *cc, struct scatterlist *out, | |||
319 | return r; | 321 | return r; |
320 | } | 322 | } |
321 | 323 | ||
322 | static void | 324 | static void crypt_convert_init(struct crypt_config *cc, |
323 | crypt_convert_init(struct crypt_config *cc, struct convert_context *ctx, | 325 | struct convert_context *ctx, |
324 | struct bio *bio_out, struct bio *bio_in, | 326 | struct bio *bio_out, struct bio *bio_in, |
325 | sector_t sector, int write) | 327 | sector_t sector, int write) |
326 | { | 328 | { |
327 | ctx->bio_in = bio_in; | 329 | ctx->bio_in = bio_in; |
328 | ctx->bio_out = bio_out; | 330 | ctx->bio_out = bio_out; |
@@ -338,7 +340,7 @@ crypt_convert_init(struct crypt_config *cc, struct convert_context *ctx, | |||
338 | * Encrypt / decrypt data from one bio to another one (can be the same one) | 340 | * Encrypt / decrypt data from one bio to another one (can be the same one) |
339 | */ | 341 | */ |
340 | static int crypt_convert(struct crypt_config *cc, | 342 | static int crypt_convert(struct crypt_config *cc, |
341 | struct convert_context *ctx) | 343 | struct convert_context *ctx) |
342 | { | 344 | { |
343 | int r = 0; | 345 | int r = 0; |
344 | 346 | ||
@@ -370,7 +372,7 @@ static int crypt_convert(struct crypt_config *cc, | |||
370 | } | 372 | } |
371 | 373 | ||
372 | r = crypt_convert_scatterlist(cc, &sg_out, &sg_in, sg_in.length, | 374 | r = crypt_convert_scatterlist(cc, &sg_out, &sg_in, sg_in.length, |
373 | ctx->write, ctx->sector); | 375 | ctx->write, ctx->sector); |
374 | if (r < 0) | 376 | if (r < 0) |
375 | break; | 377 | break; |
376 | 378 | ||
@@ -380,13 +382,13 @@ static int crypt_convert(struct crypt_config *cc, | |||
380 | return r; | 382 | return r; |
381 | } | 383 | } |
382 | 384 | ||
383 | static void dm_crypt_bio_destructor(struct bio *bio) | 385 | static void dm_crypt_bio_destructor(struct bio *bio) |
384 | { | 386 | { |
385 | struct dm_crypt_io *io = bio->bi_private; | 387 | struct dm_crypt_io *io = bio->bi_private; |
386 | struct crypt_config *cc = io->target->private; | 388 | struct crypt_config *cc = io->target->private; |
387 | 389 | ||
388 | bio_free(bio, cc->bs); | 390 | bio_free(bio, cc->bs); |
389 | } | 391 | } |
390 | 392 | ||
391 | /* | 393 | /* |
392 | * Generate a new unfragmented bio with the given size | 394 | * Generate a new unfragmented bio with the given size |
@@ -458,7 +460,7 @@ static void crypt_free_buffer_pages(struct crypt_config *cc, struct bio *clone) | |||
458 | * One of the bios was finished. Check for completion of | 460 | * One of the bios was finished. Check for completion of |
459 | * the whole request and correctly clean up the buffer. | 461 | * the whole request and correctly clean up the buffer. |
460 | */ | 462 | */ |
461 | static void dec_pending(struct dm_crypt_io *io, int error) | 463 | static void crypt_dec_pending(struct dm_crypt_io *io, int error) |
462 | { | 464 | { |
463 | struct crypt_config *cc = (struct crypt_config *) io->target->private; | 465 | struct crypt_config *cc = (struct crypt_config *) io->target->private; |
464 | 466 | ||
@@ -474,18 +476,36 @@ static void dec_pending(struct dm_crypt_io *io, int error) | |||
474 | } | 476 | } |
475 | 477 | ||
476 | /* | 478 | /* |
477 | * kcryptd: | 479 | * kcryptd/kcryptd_io: |
478 | * | 480 | * |
479 | * Needed because it would be very unwise to do decryption in an | 481 | * Needed because it would be very unwise to do decryption in an |
480 | * interrupt context. | 482 | * interrupt context. |
483 | * | ||
484 | * kcryptd performs the actual encryption or decryption. | ||
485 | * | ||
486 | * kcryptd_io performs the IO submission. | ||
487 | * | ||
488 | * They must be separated as otherwise the final stages could be | ||
489 | * starved by new requests which can block in the first stages due | ||
490 | * to memory allocation. | ||
481 | */ | 491 | */ |
482 | static struct workqueue_struct *_kcryptd_workqueue; | ||
483 | static void kcryptd_do_work(struct work_struct *work); | 492 | static void kcryptd_do_work(struct work_struct *work); |
493 | static void kcryptd_do_crypt(struct work_struct *work); | ||
484 | 494 | ||
485 | static void kcryptd_queue_io(struct dm_crypt_io *io) | 495 | static void kcryptd_queue_io(struct dm_crypt_io *io) |
486 | { | 496 | { |
497 | struct crypt_config *cc = io->target->private; | ||
498 | |||
487 | INIT_WORK(&io->work, kcryptd_do_work); | 499 | INIT_WORK(&io->work, kcryptd_do_work); |
488 | queue_work(_kcryptd_workqueue, &io->work); | 500 | queue_work(cc->io_queue, &io->work); |
501 | } | ||
502 | |||
503 | static void kcryptd_queue_crypt(struct dm_crypt_io *io) | ||
504 | { | ||
505 | struct crypt_config *cc = io->target->private; | ||
506 | |||
507 | INIT_WORK(&io->work, kcryptd_do_crypt); | ||
508 | queue_work(cc->crypt_queue, &io->work); | ||
489 | } | 509 | } |
490 | 510 | ||
491 | static void crypt_endio(struct bio *clone, int error) | 511 | static void crypt_endio(struct bio *clone, int error) |
@@ -508,13 +528,12 @@ static void crypt_endio(struct bio *clone, int error) | |||
508 | } | 528 | } |
509 | 529 | ||
510 | bio_put(clone); | 530 | bio_put(clone); |
511 | io->post_process = 1; | 531 | kcryptd_queue_crypt(io); |
512 | kcryptd_queue_io(io); | ||
513 | return; | 532 | return; |
514 | 533 | ||
515 | out: | 534 | out: |
516 | bio_put(clone); | 535 | bio_put(clone); |
517 | dec_pending(io, error); | 536 | crypt_dec_pending(io, error); |
518 | } | 537 | } |
519 | 538 | ||
520 | static void clone_init(struct dm_crypt_io *io, struct bio *clone) | 539 | static void clone_init(struct dm_crypt_io *io, struct bio *clone) |
@@ -544,7 +563,7 @@ static void process_read(struct dm_crypt_io *io) | |||
544 | */ | 563 | */ |
545 | clone = bio_alloc_bioset(GFP_NOIO, bio_segments(base_bio), cc->bs); | 564 | clone = bio_alloc_bioset(GFP_NOIO, bio_segments(base_bio), cc->bs); |
546 | if (unlikely(!clone)) { | 565 | if (unlikely(!clone)) { |
547 | dec_pending(io, -ENOMEM); | 566 | crypt_dec_pending(io, -ENOMEM); |
548 | return; | 567 | return; |
549 | } | 568 | } |
550 | 569 | ||
@@ -579,7 +598,7 @@ static void process_write(struct dm_crypt_io *io) | |||
579 | while (remaining) { | 598 | while (remaining) { |
580 | clone = crypt_alloc_buffer(io, remaining); | 599 | clone = crypt_alloc_buffer(io, remaining); |
581 | if (unlikely(!clone)) { | 600 | if (unlikely(!clone)) { |
582 | dec_pending(io, -ENOMEM); | 601 | crypt_dec_pending(io, -ENOMEM); |
583 | return; | 602 | return; |
584 | } | 603 | } |
585 | 604 | ||
@@ -589,7 +608,7 @@ static void process_write(struct dm_crypt_io *io) | |||
589 | if (unlikely(crypt_convert(cc, &ctx) < 0)) { | 608 | if (unlikely(crypt_convert(cc, &ctx) < 0)) { |
590 | crypt_free_buffer_pages(cc, clone); | 609 | crypt_free_buffer_pages(cc, clone); |
591 | bio_put(clone); | 610 | bio_put(clone); |
592 | dec_pending(io, -EIO); | 611 | crypt_dec_pending(io, -EIO); |
593 | return; | 612 | return; |
594 | } | 613 | } |
595 | 614 | ||
@@ -624,17 +643,23 @@ static void process_read_endio(struct dm_crypt_io *io) | |||
624 | crypt_convert_init(cc, &ctx, io->base_bio, io->base_bio, | 643 | crypt_convert_init(cc, &ctx, io->base_bio, io->base_bio, |
625 | io->base_bio->bi_sector - io->target->begin, 0); | 644 | io->base_bio->bi_sector - io->target->begin, 0); |
626 | 645 | ||
627 | dec_pending(io, crypt_convert(cc, &ctx)); | 646 | crypt_dec_pending(io, crypt_convert(cc, &ctx)); |
628 | } | 647 | } |
629 | 648 | ||
630 | static void kcryptd_do_work(struct work_struct *work) | 649 | static void kcryptd_do_work(struct work_struct *work) |
631 | { | 650 | { |
632 | struct dm_crypt_io *io = container_of(work, struct dm_crypt_io, work); | 651 | struct dm_crypt_io *io = container_of(work, struct dm_crypt_io, work); |
633 | 652 | ||
634 | if (io->post_process) | 653 | if (bio_data_dir(io->base_bio) == READ) |
635 | process_read_endio(io); | ||
636 | else if (bio_data_dir(io->base_bio) == READ) | ||
637 | process_read(io); | 654 | process_read(io); |
655 | } | ||
656 | |||
657 | static void kcryptd_do_crypt(struct work_struct *work) | ||
658 | { | ||
659 | struct dm_crypt_io *io = container_of(work, struct dm_crypt_io, work); | ||
660 | |||
661 | if (bio_data_dir(io->base_bio) == READ) | ||
662 | process_read_endio(io); | ||
638 | else | 663 | else |
639 | process_write(io); | 664 | process_write(io); |
640 | } | 665 | } |
@@ -690,7 +715,7 @@ static int crypt_set_key(struct crypt_config *cc, char *key) | |||
690 | cc->key_size = key_size; /* initial settings */ | 715 | cc->key_size = key_size; /* initial settings */ |
691 | 716 | ||
692 | if ((!key_size && strcmp(key, "-")) || | 717 | if ((!key_size && strcmp(key, "-")) || |
693 | (key_size && crypt_decode_key(cc->key, key, key_size) < 0)) | 718 | (key_size && crypt_decode_key(cc->key, key, key_size) < 0)) |
694 | return -EINVAL; | 719 | return -EINVAL; |
695 | 720 | ||
696 | set_bit(DM_CRYPT_KEY_VALID, &cc->flags); | 721 | set_bit(DM_CRYPT_KEY_VALID, &cc->flags); |
@@ -746,7 +771,7 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
746 | 771 | ||
747 | if (crypt_set_key(cc, argv[1])) { | 772 | if (crypt_set_key(cc, argv[1])) { |
748 | ti->error = "Error decoding key"; | 773 | ti->error = "Error decoding key"; |
749 | goto bad1; | 774 | goto bad_cipher; |
750 | } | 775 | } |
751 | 776 | ||
752 | /* Compatiblity mode for old dm-crypt cipher strings */ | 777 | /* Compatiblity mode for old dm-crypt cipher strings */ |
@@ -757,19 +782,19 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
757 | 782 | ||
758 | if (strcmp(chainmode, "ecb") && !ivmode) { | 783 | if (strcmp(chainmode, "ecb") && !ivmode) { |
759 | ti->error = "This chaining mode requires an IV mechanism"; | 784 | ti->error = "This chaining mode requires an IV mechanism"; |
760 | goto bad1; | 785 | goto bad_cipher; |
761 | } | 786 | } |
762 | 787 | ||
763 | if (snprintf(cc->cipher, CRYPTO_MAX_ALG_NAME, "%s(%s)", chainmode, | 788 | if (snprintf(cc->cipher, CRYPTO_MAX_ALG_NAME, "%s(%s)", |
764 | cipher) >= CRYPTO_MAX_ALG_NAME) { | 789 | chainmode, cipher) >= CRYPTO_MAX_ALG_NAME) { |
765 | ti->error = "Chain mode + cipher name is too long"; | 790 | ti->error = "Chain mode + cipher name is too long"; |
766 | goto bad1; | 791 | goto bad_cipher; |
767 | } | 792 | } |
768 | 793 | ||
769 | tfm = crypto_alloc_blkcipher(cc->cipher, 0, CRYPTO_ALG_ASYNC); | 794 | tfm = crypto_alloc_blkcipher(cc->cipher, 0, CRYPTO_ALG_ASYNC); |
770 | if (IS_ERR(tfm)) { | 795 | if (IS_ERR(tfm)) { |
771 | ti->error = "Error allocating crypto tfm"; | 796 | ti->error = "Error allocating crypto tfm"; |
772 | goto bad1; | 797 | goto bad_cipher; |
773 | } | 798 | } |
774 | 799 | ||
775 | strcpy(cc->cipher, cipher); | 800 | strcpy(cc->cipher, cipher); |
@@ -793,18 +818,18 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
793 | cc->iv_gen_ops = &crypt_iv_null_ops; | 818 | cc->iv_gen_ops = &crypt_iv_null_ops; |
794 | else { | 819 | else { |
795 | ti->error = "Invalid IV mode"; | 820 | ti->error = "Invalid IV mode"; |
796 | goto bad2; | 821 | goto bad_ivmode; |
797 | } | 822 | } |
798 | 823 | ||
799 | if (cc->iv_gen_ops && cc->iv_gen_ops->ctr && | 824 | if (cc->iv_gen_ops && cc->iv_gen_ops->ctr && |
800 | cc->iv_gen_ops->ctr(cc, ti, ivopts) < 0) | 825 | cc->iv_gen_ops->ctr(cc, ti, ivopts) < 0) |
801 | goto bad2; | 826 | goto bad_ivmode; |
802 | 827 | ||
803 | cc->iv_size = crypto_blkcipher_ivsize(tfm); | 828 | cc->iv_size = crypto_blkcipher_ivsize(tfm); |
804 | if (cc->iv_size) | 829 | if (cc->iv_size) |
805 | /* at least a 64 bit sector number should fit in our buffer */ | 830 | /* at least a 64 bit sector number should fit in our buffer */ |
806 | cc->iv_size = max(cc->iv_size, | 831 | cc->iv_size = max(cc->iv_size, |
807 | (unsigned int)(sizeof(u64) / sizeof(u8))); | 832 | (unsigned int)(sizeof(u64) / sizeof(u8))); |
808 | else { | 833 | else { |
809 | if (cc->iv_gen_ops) { | 834 | if (cc->iv_gen_ops) { |
810 | DMWARN("Selected cipher does not support IVs"); | 835 | DMWARN("Selected cipher does not support IVs"); |
@@ -817,13 +842,13 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
817 | cc->io_pool = mempool_create_slab_pool(MIN_IOS, _crypt_io_pool); | 842 | cc->io_pool = mempool_create_slab_pool(MIN_IOS, _crypt_io_pool); |
818 | if (!cc->io_pool) { | 843 | if (!cc->io_pool) { |
819 | ti->error = "Cannot allocate crypt io mempool"; | 844 | ti->error = "Cannot allocate crypt io mempool"; |
820 | goto bad3; | 845 | goto bad_slab_pool; |
821 | } | 846 | } |
822 | 847 | ||
823 | cc->page_pool = mempool_create_page_pool(MIN_POOL_PAGES, 0); | 848 | cc->page_pool = mempool_create_page_pool(MIN_POOL_PAGES, 0); |
824 | if (!cc->page_pool) { | 849 | if (!cc->page_pool) { |
825 | ti->error = "Cannot allocate page mempool"; | 850 | ti->error = "Cannot allocate page mempool"; |
826 | goto bad4; | 851 | goto bad_page_pool; |
827 | } | 852 | } |
828 | 853 | ||
829 | cc->bs = bioset_create(MIN_IOS, MIN_IOS); | 854 | cc->bs = bioset_create(MIN_IOS, MIN_IOS); |
@@ -834,25 +859,25 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
834 | 859 | ||
835 | if (crypto_blkcipher_setkey(tfm, cc->key, key_size) < 0) { | 860 | if (crypto_blkcipher_setkey(tfm, cc->key, key_size) < 0) { |
836 | ti->error = "Error setting key"; | 861 | ti->error = "Error setting key"; |
837 | goto bad5; | 862 | goto bad_device; |
838 | } | 863 | } |
839 | 864 | ||
840 | if (sscanf(argv[2], "%llu", &tmpll) != 1) { | 865 | if (sscanf(argv[2], "%llu", &tmpll) != 1) { |
841 | ti->error = "Invalid iv_offset sector"; | 866 | ti->error = "Invalid iv_offset sector"; |
842 | goto bad5; | 867 | goto bad_device; |
843 | } | 868 | } |
844 | cc->iv_offset = tmpll; | 869 | cc->iv_offset = tmpll; |
845 | 870 | ||
846 | if (sscanf(argv[4], "%llu", &tmpll) != 1) { | 871 | if (sscanf(argv[4], "%llu", &tmpll) != 1) { |
847 | ti->error = "Invalid device sector"; | 872 | ti->error = "Invalid device sector"; |
848 | goto bad5; | 873 | goto bad_device; |
849 | } | 874 | } |
850 | cc->start = tmpll; | 875 | cc->start = tmpll; |
851 | 876 | ||
852 | if (dm_get_device(ti, argv[3], cc->start, ti->len, | 877 | if (dm_get_device(ti, argv[3], cc->start, ti->len, |
853 | dm_table_get_mode(ti->table), &cc->dev)) { | 878 | dm_table_get_mode(ti->table), &cc->dev)) { |
854 | ti->error = "Device lookup failed"; | 879 | ti->error = "Device lookup failed"; |
855 | goto bad5; | 880 | goto bad_device; |
856 | } | 881 | } |
857 | 882 | ||
858 | if (ivmode && cc->iv_gen_ops) { | 883 | if (ivmode && cc->iv_gen_ops) { |
@@ -861,27 +886,45 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
861 | cc->iv_mode = kmalloc(strlen(ivmode) + 1, GFP_KERNEL); | 886 | cc->iv_mode = kmalloc(strlen(ivmode) + 1, GFP_KERNEL); |
862 | if (!cc->iv_mode) { | 887 | if (!cc->iv_mode) { |
863 | ti->error = "Error kmallocing iv_mode string"; | 888 | ti->error = "Error kmallocing iv_mode string"; |
864 | goto bad5; | 889 | goto bad_ivmode_string; |
865 | } | 890 | } |
866 | strcpy(cc->iv_mode, ivmode); | 891 | strcpy(cc->iv_mode, ivmode); |
867 | } else | 892 | } else |
868 | cc->iv_mode = NULL; | 893 | cc->iv_mode = NULL; |
869 | 894 | ||
895 | cc->io_queue = create_singlethread_workqueue("kcryptd_io"); | ||
896 | if (!cc->io_queue) { | ||
897 | ti->error = "Couldn't create kcryptd io queue"; | ||
898 | goto bad_io_queue; | ||
899 | } | ||
900 | |||
901 | cc->crypt_queue = create_singlethread_workqueue("kcryptd"); | ||
902 | if (!cc->crypt_queue) { | ||
903 | ti->error = "Couldn't create kcryptd queue"; | ||
904 | goto bad_crypt_queue; | ||
905 | } | ||
906 | |||
870 | ti->private = cc; | 907 | ti->private = cc; |
871 | return 0; | 908 | return 0; |
872 | 909 | ||
873 | bad5: | 910 | bad_crypt_queue: |
911 | destroy_workqueue(cc->io_queue); | ||
912 | bad_io_queue: | ||
913 | kfree(cc->iv_mode); | ||
914 | bad_ivmode_string: | ||
915 | dm_put_device(ti, cc->dev); | ||
916 | bad_device: | ||
874 | bioset_free(cc->bs); | 917 | bioset_free(cc->bs); |
875 | bad_bs: | 918 | bad_bs: |
876 | mempool_destroy(cc->page_pool); | 919 | mempool_destroy(cc->page_pool); |
877 | bad4: | 920 | bad_page_pool: |
878 | mempool_destroy(cc->io_pool); | 921 | mempool_destroy(cc->io_pool); |
879 | bad3: | 922 | bad_slab_pool: |
880 | if (cc->iv_gen_ops && cc->iv_gen_ops->dtr) | 923 | if (cc->iv_gen_ops && cc->iv_gen_ops->dtr) |
881 | cc->iv_gen_ops->dtr(cc); | 924 | cc->iv_gen_ops->dtr(cc); |
882 | bad2: | 925 | bad_ivmode: |
883 | crypto_free_blkcipher(tfm); | 926 | crypto_free_blkcipher(tfm); |
884 | bad1: | 927 | bad_cipher: |
885 | /* Must zero key material before freeing */ | 928 | /* Must zero key material before freeing */ |
886 | memset(cc, 0, sizeof(*cc) + cc->key_size * sizeof(u8)); | 929 | memset(cc, 0, sizeof(*cc) + cc->key_size * sizeof(u8)); |
887 | kfree(cc); | 930 | kfree(cc); |
@@ -892,7 +935,8 @@ static void crypt_dtr(struct dm_target *ti) | |||
892 | { | 935 | { |
893 | struct crypt_config *cc = (struct crypt_config *) ti->private; | 936 | struct crypt_config *cc = (struct crypt_config *) ti->private; |
894 | 937 | ||
895 | flush_workqueue(_kcryptd_workqueue); | 938 | destroy_workqueue(cc->io_queue); |
939 | destroy_workqueue(cc->crypt_queue); | ||
896 | 940 | ||
897 | bioset_free(cc->bs); | 941 | bioset_free(cc->bs); |
898 | mempool_destroy(cc->page_pool); | 942 | mempool_destroy(cc->page_pool); |
@@ -918,9 +962,13 @@ static int crypt_map(struct dm_target *ti, struct bio *bio, | |||
918 | io = mempool_alloc(cc->io_pool, GFP_NOIO); | 962 | io = mempool_alloc(cc->io_pool, GFP_NOIO); |
919 | io->target = ti; | 963 | io->target = ti; |
920 | io->base_bio = bio; | 964 | io->base_bio = bio; |
921 | io->error = io->post_process = 0; | 965 | io->error = 0; |
922 | atomic_set(&io->pending, 0); | 966 | atomic_set(&io->pending, 0); |
923 | kcryptd_queue_io(io); | 967 | |
968 | if (bio_data_dir(io->base_bio) == READ) | ||
969 | kcryptd_queue_io(io); | ||
970 | else | ||
971 | kcryptd_queue_crypt(io); | ||
924 | 972 | ||
925 | return DM_MAPIO_SUBMITTED; | 973 | return DM_MAPIO_SUBMITTED; |
926 | } | 974 | } |
@@ -1037,25 +1085,12 @@ static int __init dm_crypt_init(void) | |||
1037 | if (!_crypt_io_pool) | 1085 | if (!_crypt_io_pool) |
1038 | return -ENOMEM; | 1086 | return -ENOMEM; |
1039 | 1087 | ||
1040 | _kcryptd_workqueue = create_workqueue("kcryptd"); | ||
1041 | if (!_kcryptd_workqueue) { | ||
1042 | r = -ENOMEM; | ||
1043 | DMERR("couldn't create kcryptd"); | ||
1044 | goto bad1; | ||
1045 | } | ||
1046 | |||
1047 | r = dm_register_target(&crypt_target); | 1088 | r = dm_register_target(&crypt_target); |
1048 | if (r < 0) { | 1089 | if (r < 0) { |
1049 | DMERR("register failed %d", r); | 1090 | DMERR("register failed %d", r); |
1050 | goto bad2; | 1091 | kmem_cache_destroy(_crypt_io_pool); |
1051 | } | 1092 | } |
1052 | 1093 | ||
1053 | return 0; | ||
1054 | |||
1055 | bad2: | ||
1056 | destroy_workqueue(_kcryptd_workqueue); | ||
1057 | bad1: | ||
1058 | kmem_cache_destroy(_crypt_io_pool); | ||
1059 | return r; | 1094 | return r; |
1060 | } | 1095 | } |
1061 | 1096 | ||
@@ -1066,7 +1101,6 @@ static void __exit dm_crypt_exit(void) | |||
1066 | if (r < 0) | 1101 | if (r < 0) |
1067 | DMERR("unregister failed %d", r); | 1102 | DMERR("unregister failed %d", r); |
1068 | 1103 | ||
1069 | destroy_workqueue(_kcryptd_workqueue); | ||
1070 | kmem_cache_destroy(_crypt_io_pool); | 1104 | kmem_cache_destroy(_crypt_io_pool); |
1071 | } | 1105 | } |
1072 | 1106 | ||
diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c index 6928c136d3c..bdd37f881c4 100644 --- a/drivers/md/dm-delay.c +++ b/drivers/md/dm-delay.c | |||
@@ -83,7 +83,7 @@ static struct bio *flush_delayed_bios(struct delay_c *dc, int flush_all) | |||
83 | struct dm_delay_info *delayed, *next; | 83 | struct dm_delay_info *delayed, *next; |
84 | unsigned long next_expires = 0; | 84 | unsigned long next_expires = 0; |
85 | int start_timer = 0; | 85 | int start_timer = 0; |
86 | BIO_LIST(flush_bios); | 86 | struct bio_list flush_bios = { }; |
87 | 87 | ||
88 | mutex_lock(&delayed_bios_lock); | 88 | mutex_lock(&delayed_bios_lock); |
89 | list_for_each_entry_safe(delayed, next, &dc->delayed_bios, list) { | 89 | list_for_each_entry_safe(delayed, next, &dc->delayed_bios, list) { |
@@ -163,34 +163,32 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
163 | goto bad; | 163 | goto bad; |
164 | } | 164 | } |
165 | 165 | ||
166 | if (argc == 3) { | 166 | dc->dev_write = NULL; |
167 | dc->dev_write = NULL; | 167 | if (argc == 3) |
168 | goto out; | 168 | goto out; |
169 | } | ||
170 | 169 | ||
171 | if (sscanf(argv[4], "%llu", &tmpll) != 1) { | 170 | if (sscanf(argv[4], "%llu", &tmpll) != 1) { |
172 | ti->error = "Invalid write device sector"; | 171 | ti->error = "Invalid write device sector"; |
173 | goto bad; | 172 | goto bad_dev_read; |
174 | } | 173 | } |
175 | dc->start_write = tmpll; | 174 | dc->start_write = tmpll; |
176 | 175 | ||
177 | if (sscanf(argv[5], "%u", &dc->write_delay) != 1) { | 176 | if (sscanf(argv[5], "%u", &dc->write_delay) != 1) { |
178 | ti->error = "Invalid write delay"; | 177 | ti->error = "Invalid write delay"; |
179 | goto bad; | 178 | goto bad_dev_read; |
180 | } | 179 | } |
181 | 180 | ||
182 | if (dm_get_device(ti, argv[3], dc->start_write, ti->len, | 181 | if (dm_get_device(ti, argv[3], dc->start_write, ti->len, |
183 | dm_table_get_mode(ti->table), &dc->dev_write)) { | 182 | dm_table_get_mode(ti->table), &dc->dev_write)) { |
184 | ti->error = "Write device lookup failed"; | 183 | ti->error = "Write device lookup failed"; |
185 | dm_put_device(ti, dc->dev_read); | 184 | goto bad_dev_read; |
186 | goto bad; | ||
187 | } | 185 | } |
188 | 186 | ||
189 | out: | 187 | out: |
190 | dc->delayed_pool = mempool_create_slab_pool(128, delayed_cache); | 188 | dc->delayed_pool = mempool_create_slab_pool(128, delayed_cache); |
191 | if (!dc->delayed_pool) { | 189 | if (!dc->delayed_pool) { |
192 | DMERR("Couldn't create delayed bio pool."); | 190 | DMERR("Couldn't create delayed bio pool."); |
193 | goto bad; | 191 | goto bad_dev_write; |
194 | } | 192 | } |
195 | 193 | ||
196 | setup_timer(&dc->delay_timer, handle_delayed_timer, (unsigned long)dc); | 194 | setup_timer(&dc->delay_timer, handle_delayed_timer, (unsigned long)dc); |
@@ -203,6 +201,11 @@ out: | |||
203 | ti->private = dc; | 201 | ti->private = dc; |
204 | return 0; | 202 | return 0; |
205 | 203 | ||
204 | bad_dev_write: | ||
205 | if (dc->dev_write) | ||
206 | dm_put_device(ti, dc->dev_write); | ||
207 | bad_dev_read: | ||
208 | dm_put_device(ti, dc->dev_read); | ||
206 | bad: | 209 | bad: |
207 | kfree(dc); | 210 | kfree(dc); |
208 | return -EINVAL; | 211 | return -EINVAL; |
@@ -305,7 +308,7 @@ static int delay_status(struct dm_target *ti, status_type_t type, | |||
305 | (unsigned long long) dc->start_read, | 308 | (unsigned long long) dc->start_read, |
306 | dc->read_delay); | 309 | dc->read_delay); |
307 | if (dc->dev_write) | 310 | if (dc->dev_write) |
308 | DMEMIT("%s %llu %u", dc->dev_write->name, | 311 | DMEMIT(" %s %llu %u", dc->dev_write->name, |
309 | (unsigned long long) dc->start_write, | 312 | (unsigned long long) dc->start_write, |
310 | dc->write_delay); | 313 | dc->write_delay); |
311 | break; | 314 | break; |
diff --git a/drivers/md/dm-emc.c b/drivers/md/dm-emc.c index 342517261ec..6b91b9ab1d4 100644 --- a/drivers/md/dm-emc.c +++ b/drivers/md/dm-emc.c | |||
@@ -81,7 +81,7 @@ static struct bio *get_failover_bio(struct dm_path *path, unsigned data_size) | |||
81 | } | 81 | } |
82 | 82 | ||
83 | if (bio_add_page(bio, page, data_size, 0) != data_size) { | 83 | if (bio_add_page(bio, page, data_size, 0) != data_size) { |
84 | DMERR("get_failover_bio: alloc_page() failed."); | 84 | DMERR("get_failover_bio: bio_add_page() failed."); |
85 | __free_page(page); | 85 | __free_page(page); |
86 | bio_put(bio); | 86 | bio_put(bio); |
87 | return NULL; | 87 | return NULL; |
@@ -211,12 +211,10 @@ fail_path: | |||
211 | 211 | ||
212 | static struct emc_handler *alloc_emc_handler(void) | 212 | static struct emc_handler *alloc_emc_handler(void) |
213 | { | 213 | { |
214 | struct emc_handler *h = kmalloc(sizeof(*h), GFP_KERNEL); | 214 | struct emc_handler *h = kzalloc(sizeof(*h), GFP_KERNEL); |
215 | 215 | ||
216 | if (h) { | 216 | if (h) |
217 | memset(h, 0, sizeof(*h)); | ||
218 | spin_lock_init(&h->lock); | 217 | spin_lock_init(&h->lock); |
219 | } | ||
220 | 218 | ||
221 | return h; | 219 | return h; |
222 | } | 220 | } |
diff --git a/drivers/md/dm-hw-handler.c b/drivers/md/dm-hw-handler.c index baafaaba4d4..2ee84d8aa0b 100644 --- a/drivers/md/dm-hw-handler.c +++ b/drivers/md/dm-hw-handler.c | |||
@@ -91,12 +91,10 @@ void dm_put_hw_handler(struct hw_handler_type *hwht) | |||
91 | 91 | ||
92 | static struct hwh_internal *_alloc_hw_handler(struct hw_handler_type *hwht) | 92 | static struct hwh_internal *_alloc_hw_handler(struct hw_handler_type *hwht) |
93 | { | 93 | { |
94 | struct hwh_internal *hwhi = kmalloc(sizeof(*hwhi), GFP_KERNEL); | 94 | struct hwh_internal *hwhi = kzalloc(sizeof(*hwhi), GFP_KERNEL); |
95 | 95 | ||
96 | if (hwhi) { | 96 | if (hwhi) |
97 | memset(hwhi, 0, sizeof(*hwhi)); | ||
98 | hwhi->hwht = *hwht; | 97 | hwhi->hwht = *hwht; |
99 | } | ||
100 | 98 | ||
101 | return hwhi; | 99 | return hwhi; |
102 | } | 100 | } |
diff --git a/drivers/md/dm-hw-handler.h b/drivers/md/dm-hw-handler.h index e0832e6fcf3..46809dcb121 100644 --- a/drivers/md/dm-hw-handler.h +++ b/drivers/md/dm-hw-handler.h | |||
@@ -58,5 +58,6 @@ unsigned dm_scsi_err_handler(struct hw_handler *hwh, struct bio *bio); | |||
58 | #define MP_FAIL_PATH 1 | 58 | #define MP_FAIL_PATH 1 |
59 | #define MP_BYPASS_PG 2 | 59 | #define MP_BYPASS_PG 2 |
60 | #define MP_ERROR_IO 4 /* Don't retry this I/O */ | 60 | #define MP_ERROR_IO 4 /* Don't retry this I/O */ |
61 | #define MP_RETRY 8 | ||
61 | 62 | ||
62 | #endif | 63 | #endif |
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c index b441d82c338..138200bf5e0 100644 --- a/drivers/md/dm-ioctl.c +++ b/drivers/md/dm-ioctl.c | |||
@@ -700,7 +700,7 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size) | |||
700 | int r; | 700 | int r; |
701 | char *new_name = (char *) param + param->data_start; | 701 | char *new_name = (char *) param + param->data_start; |
702 | 702 | ||
703 | if (new_name < (char *) (param + 1) || | 703 | if (new_name < (char *) param->data || |
704 | invalid_str(new_name, (void *) param + param_size)) { | 704 | invalid_str(new_name, (void *) param + param_size)) { |
705 | DMWARN("Invalid new logical volume name supplied."); | 705 | DMWARN("Invalid new logical volume name supplied."); |
706 | return -EINVAL; | 706 | return -EINVAL; |
@@ -726,7 +726,7 @@ static int dev_set_geometry(struct dm_ioctl *param, size_t param_size) | |||
726 | if (!md) | 726 | if (!md) |
727 | return -ENXIO; | 727 | return -ENXIO; |
728 | 728 | ||
729 | if (geostr < (char *) (param + 1) || | 729 | if (geostr < (char *) param->data || |
730 | invalid_str(geostr, (void *) param + param_size)) { | 730 | invalid_str(geostr, (void *) param + param_size)) { |
731 | DMWARN("Invalid geometry supplied."); | 731 | DMWARN("Invalid geometry supplied."); |
732 | goto out; | 732 | goto out; |
@@ -1233,7 +1233,7 @@ static int target_message(struct dm_ioctl *param, size_t param_size) | |||
1233 | if (r) | 1233 | if (r) |
1234 | goto out; | 1234 | goto out; |
1235 | 1235 | ||
1236 | if (tmsg < (struct dm_target_msg *) (param + 1) || | 1236 | if (tmsg < (struct dm_target_msg *) param->data || |
1237 | invalid_str(tmsg->message, (void *) param + param_size)) { | 1237 | invalid_str(tmsg->message, (void *) param + param_size)) { |
1238 | DMWARN("Invalid target message parameters."); | 1238 | DMWARN("Invalid target message parameters."); |
1239 | r = -EINVAL; | 1239 | r = -EINVAL; |
@@ -1358,7 +1358,7 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl **param) | |||
1358 | if (tmp.data_size < sizeof(tmp)) | 1358 | if (tmp.data_size < sizeof(tmp)) |
1359 | return -EINVAL; | 1359 | return -EINVAL; |
1360 | 1360 | ||
1361 | dmi = (struct dm_ioctl *) vmalloc(tmp.data_size); | 1361 | dmi = vmalloc(tmp.data_size); |
1362 | if (!dmi) | 1362 | if (!dmi) |
1363 | return -ENOMEM; | 1363 | return -ENOMEM; |
1364 | 1364 | ||
@@ -1515,3 +1515,35 @@ void dm_interface_exit(void) | |||
1515 | 1515 | ||
1516 | dm_hash_exit(); | 1516 | dm_hash_exit(); |
1517 | } | 1517 | } |
1518 | |||
1519 | /** | ||
1520 | * dm_copy_name_and_uuid - Copy mapped device name & uuid into supplied buffers | ||
1521 | * @md: Pointer to mapped_device | ||
1522 | * @name: Buffer (size DM_NAME_LEN) for name | ||
1523 | * @uuid: Buffer (size DM_UUID_LEN) for uuid or empty string if uuid not defined | ||
1524 | */ | ||
1525 | int dm_copy_name_and_uuid(struct mapped_device *md, char *name, char *uuid) | ||
1526 | { | ||
1527 | int r = 0; | ||
1528 | struct hash_cell *hc; | ||
1529 | |||
1530 | if (!md) | ||
1531 | return -ENXIO; | ||
1532 | |||
1533 | dm_get(md); | ||
1534 | down_read(&_hash_lock); | ||
1535 | hc = dm_get_mdptr(md); | ||
1536 | if (!hc || hc->md != md) { | ||
1537 | r = -ENXIO; | ||
1538 | goto out; | ||
1539 | } | ||
1540 | |||
1541 | strcpy(name, hc->name); | ||
1542 | strcpy(uuid, hc->uuid ? : ""); | ||
1543 | |||
1544 | out: | ||
1545 | up_read(&_hash_lock); | ||
1546 | dm_put(md); | ||
1547 | |||
1548 | return r; | ||
1549 | } | ||
diff --git a/drivers/md/dm-log.c b/drivers/md/dm-log.c index a66428d860f..072ee4353ea 100644 --- a/drivers/md/dm-log.c +++ b/drivers/md/dm-log.c | |||
@@ -696,7 +696,7 @@ static struct dirty_log_type _disk_type = { | |||
696 | .module = THIS_MODULE, | 696 | .module = THIS_MODULE, |
697 | .ctr = disk_ctr, | 697 | .ctr = disk_ctr, |
698 | .dtr = disk_dtr, | 698 | .dtr = disk_dtr, |
699 | .suspend = disk_flush, | 699 | .postsuspend = disk_flush, |
700 | .resume = disk_resume, | 700 | .resume = disk_resume, |
701 | .get_region_size = core_get_region_size, | 701 | .get_region_size = core_get_region_size, |
702 | .is_clean = core_is_clean, | 702 | .is_clean = core_is_clean, |
diff --git a/drivers/md/dm-log.h b/drivers/md/dm-log.h index 86a301c8daf..3fae87eb596 100644 --- a/drivers/md/dm-log.h +++ b/drivers/md/dm-log.h | |||
@@ -32,7 +32,8 @@ struct dirty_log_type { | |||
32 | * There are times when we don't want the log to touch | 32 | * There are times when we don't want the log to touch |
33 | * the disk. | 33 | * the disk. |
34 | */ | 34 | */ |
35 | int (*suspend)(struct dirty_log *log); | 35 | int (*presuspend)(struct dirty_log *log); |
36 | int (*postsuspend)(struct dirty_log *log); | ||
36 | int (*resume)(struct dirty_log *log); | 37 | int (*resume)(struct dirty_log *log); |
37 | 38 | ||
38 | /* | 39 | /* |
diff --git a/drivers/md/dm-mpath-hp-sw.c b/drivers/md/dm-mpath-hp-sw.c new file mode 100644 index 00000000000..204bf42c944 --- /dev/null +++ b/drivers/md/dm-mpath-hp-sw.c | |||
@@ -0,0 +1,248 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2005 Mike Christie, All rights reserved. | ||
3 | * Copyright (C) 2007 Red Hat, Inc. All rights reserved. | ||
4 | * Authors: Mike Christie | ||
5 | * Dave Wysochanski | ||
6 | * | ||
7 | * This file is released under the GPL. | ||
8 | * | ||
9 | * This module implements the specific path activation code for | ||
10 | * HP StorageWorks and FSC FibreCat Asymmetric (Active/Passive) | ||
11 | * storage arrays. | ||
12 | * These storage arrays have controller-based failover, not | ||
13 | * LUN-based failover. However, LUN-based failover is the design | ||
14 | * of dm-multipath. Thus, this module is written for LUN-based failover. | ||
15 | */ | ||
16 | #include <linux/blkdev.h> | ||
17 | #include <linux/list.h> | ||
18 | #include <linux/types.h> | ||
19 | #include <scsi/scsi.h> | ||
20 | #include <scsi/scsi_cmnd.h> | ||
21 | #include <scsi/scsi_dbg.h> | ||
22 | |||
23 | #include "dm.h" | ||
24 | #include "dm-hw-handler.h" | ||
25 | |||
26 | #define DM_MSG_PREFIX "multipath hp-sw" | ||
27 | #define DM_HP_HWH_NAME "hp-sw" | ||
28 | #define DM_HP_HWH_VER "1.0.0" | ||
29 | |||
30 | struct hp_sw_context { | ||
31 | unsigned char sense[SCSI_SENSE_BUFFERSIZE]; | ||
32 | }; | ||
33 | |||
34 | /* | ||
35 | * hp_sw_error_is_retryable - Is an HP-specific check condition retryable? | ||
36 | * @req: path activation request | ||
37 | * | ||
38 | * Examine error codes of request and determine whether the error is retryable. | ||
39 | * Some error codes are already retried by scsi-ml (see | ||
40 | * scsi_decide_disposition), but some HP specific codes are not. | ||
41 | * The intent of this routine is to supply the logic for the HP specific | ||
42 | * check conditions. | ||
43 | * | ||
44 | * Returns: | ||
45 | * 1 - command completed with retryable error | ||
46 | * 0 - command completed with non-retryable error | ||
47 | * | ||
48 | * Possible optimizations | ||
49 | * 1. More hardware-specific error codes | ||
50 | */ | ||
51 | static int hp_sw_error_is_retryable(struct request *req) | ||
52 | { | ||
53 | /* | ||
54 | * NOT_READY is known to be retryable | ||
55 | * For now we just dump out the sense data and call it retryable | ||
56 | */ | ||
57 | if (status_byte(req->errors) == CHECK_CONDITION) | ||
58 | __scsi_print_sense(DM_HP_HWH_NAME, req->sense, req->sense_len); | ||
59 | |||
60 | /* | ||
61 | * At this point we don't have complete information about all the error | ||
62 | * codes from this hardware, so we are just conservative and retry | ||
63 | * when in doubt. | ||
64 | */ | ||
65 | return 1; | ||
66 | } | ||
67 | |||
68 | /* | ||
69 | * hp_sw_end_io - Completion handler for HP path activation. | ||
70 | * @req: path activation request | ||
71 | * @error: scsi-ml error | ||
72 | * | ||
73 | * Check sense data, free request structure, and notify dm that | ||
74 | * pg initialization has completed. | ||
75 | * | ||
76 | * Context: scsi-ml softirq | ||
77 | * | ||
78 | */ | ||
79 | static void hp_sw_end_io(struct request *req, int error) | ||
80 | { | ||
81 | struct dm_path *path = req->end_io_data; | ||
82 | unsigned err_flags = 0; | ||
83 | |||
84 | if (!error) { | ||
85 | DMDEBUG("%s path activation command - success", | ||
86 | path->dev->name); | ||
87 | goto out; | ||
88 | } | ||
89 | |||
90 | if (hp_sw_error_is_retryable(req)) { | ||
91 | DMDEBUG("%s path activation command - retry", | ||
92 | path->dev->name); | ||
93 | err_flags = MP_RETRY; | ||
94 | goto out; | ||
95 | } | ||
96 | |||
97 | DMWARN("%s path activation fail - error=0x%x", | ||
98 | path->dev->name, error); | ||
99 | err_flags = MP_FAIL_PATH; | ||
100 | |||
101 | out: | ||
102 | req->end_io_data = NULL; | ||
103 | __blk_put_request(req->q, req); | ||
104 | dm_pg_init_complete(path, err_flags); | ||
105 | } | ||
106 | |||
107 | /* | ||
108 | * hp_sw_get_request - Allocate an HP specific path activation request | ||
109 | * @path: path on which request will be sent (needed for request queue) | ||
110 | * | ||
111 | * The START command is used for path activation request. | ||
112 | * These arrays are controller-based failover, not LUN based. | ||
113 | * One START command issued to a single path will fail over all | ||
114 | * LUNs for the same controller. | ||
115 | * | ||
116 | * Possible optimizations | ||
117 | * 1. Make timeout configurable | ||
118 | * 2. Preallocate request | ||
119 | */ | ||
120 | static struct request *hp_sw_get_request(struct dm_path *path) | ||
121 | { | ||
122 | struct request *req; | ||
123 | struct block_device *bdev = path->dev->bdev; | ||
124 | struct request_queue *q = bdev_get_queue(bdev); | ||
125 | struct hp_sw_context *h = path->hwhcontext; | ||
126 | |||
127 | req = blk_get_request(q, WRITE, GFP_NOIO); | ||
128 | if (!req) | ||
129 | goto out; | ||
130 | |||
131 | req->timeout = 60 * HZ; | ||
132 | |||
133 | req->errors = 0; | ||
134 | req->cmd_type = REQ_TYPE_BLOCK_PC; | ||
135 | req->cmd_flags |= REQ_FAILFAST | REQ_NOMERGE; | ||
136 | req->end_io_data = path; | ||
137 | req->sense = h->sense; | ||
138 | memset(req->sense, 0, SCSI_SENSE_BUFFERSIZE); | ||
139 | |||
140 | memset(&req->cmd, 0, BLK_MAX_CDB); | ||
141 | req->cmd[0] = START_STOP; | ||
142 | req->cmd[4] = 1; | ||
143 | req->cmd_len = COMMAND_SIZE(req->cmd[0]); | ||
144 | |||
145 | out: | ||
146 | return req; | ||
147 | } | ||
148 | |||
149 | /* | ||
150 | * hp_sw_pg_init - HP path activation implementation. | ||
151 | * @hwh: hardware handler specific data | ||
152 | * @bypassed: unused; is the path group bypassed? (see dm-mpath.c) | ||
153 | * @path: path to send initialization command | ||
154 | * | ||
155 | * Send an HP-specific path activation command on 'path'. | ||
156 | * Do not try to optimize in any way, just send the activation command. | ||
157 | * More than one path activation command may be sent to the same controller. | ||
158 | * This seems to work fine for basic failover support. | ||
159 | * | ||
160 | * Possible optimizations | ||
161 | * 1. Detect an in-progress activation request and avoid submitting another one | ||
162 | * 2. Model the controller and only send a single activation request at a time | ||
163 | * 3. Determine the state of a path before sending an activation request | ||
164 | * | ||
165 | * Context: kmpathd (see process_queued_ios() in dm-mpath.c) | ||
166 | */ | ||
167 | static void hp_sw_pg_init(struct hw_handler *hwh, unsigned bypassed, | ||
168 | struct dm_path *path) | ||
169 | { | ||
170 | struct request *req; | ||
171 | struct hp_sw_context *h; | ||
172 | |||
173 | path->hwhcontext = hwh->context; | ||
174 | h = hwh->context; | ||
175 | |||
176 | req = hp_sw_get_request(path); | ||
177 | if (!req) { | ||
178 | DMERR("%s path activation command - allocation fail", | ||
179 | path->dev->name); | ||
180 | goto retry; | ||
181 | } | ||
182 | |||
183 | DMDEBUG("%s path activation command - sent", path->dev->name); | ||
184 | |||
185 | blk_execute_rq_nowait(req->q, NULL, req, 1, hp_sw_end_io); | ||
186 | return; | ||
187 | |||
188 | retry: | ||
189 | dm_pg_init_complete(path, MP_RETRY); | ||
190 | } | ||
191 | |||
192 | static int hp_sw_create(struct hw_handler *hwh, unsigned argc, char **argv) | ||
193 | { | ||
194 | struct hp_sw_context *h; | ||
195 | |||
196 | h = kmalloc(sizeof(*h), GFP_KERNEL); | ||
197 | if (!h) | ||
198 | return -ENOMEM; | ||
199 | |||
200 | hwh->context = h; | ||
201 | |||
202 | return 0; | ||
203 | } | ||
204 | |||
205 | static void hp_sw_destroy(struct hw_handler *hwh) | ||
206 | { | ||
207 | struct hp_sw_context *h = hwh->context; | ||
208 | |||
209 | kfree(h); | ||
210 | } | ||
211 | |||
212 | static struct hw_handler_type hp_sw_hwh = { | ||
213 | .name = DM_HP_HWH_NAME, | ||
214 | .module = THIS_MODULE, | ||
215 | .create = hp_sw_create, | ||
216 | .destroy = hp_sw_destroy, | ||
217 | .pg_init = hp_sw_pg_init, | ||
218 | }; | ||
219 | |||
220 | static int __init hp_sw_init(void) | ||
221 | { | ||
222 | int r; | ||
223 | |||
224 | r = dm_register_hw_handler(&hp_sw_hwh); | ||
225 | if (r < 0) | ||
226 | DMERR("register failed %d", r); | ||
227 | else | ||
228 | DMINFO("version " DM_HP_HWH_VER " loaded"); | ||
229 | |||
230 | return r; | ||
231 | } | ||
232 | |||
233 | static void __exit hp_sw_exit(void) | ||
234 | { | ||
235 | int r; | ||
236 | |||
237 | r = dm_unregister_hw_handler(&hp_sw_hwh); | ||
238 | if (r < 0) | ||
239 | DMERR("unregister failed %d", r); | ||
240 | } | ||
241 | |||
242 | module_init(hp_sw_init); | ||
243 | module_exit(hp_sw_exit); | ||
244 | |||
245 | MODULE_DESCRIPTION("DM Multipath HP StorageWorks / FSC FibreCat (A/P) support"); | ||
246 | MODULE_AUTHOR("Mike Christie, Dave Wysochanski <dm-devel@redhat.com>"); | ||
247 | MODULE_LICENSE("GPL"); | ||
248 | MODULE_VERSION(DM_HP_HWH_VER); | ||
diff --git a/drivers/md/dm-mpath-rdac.c b/drivers/md/dm-mpath-rdac.c index 16b16134577..e04eb5c697f 100644 --- a/drivers/md/dm-mpath-rdac.c +++ b/drivers/md/dm-mpath-rdac.c | |||
@@ -664,20 +664,21 @@ static struct hw_handler_type rdac_handler = { | |||
664 | 664 | ||
665 | static int __init rdac_init(void) | 665 | static int __init rdac_init(void) |
666 | { | 666 | { |
667 | int r = dm_register_hw_handler(&rdac_handler); | 667 | int r; |
668 | |||
669 | if (r < 0) { | ||
670 | DMERR("%s: register failed %d", RDAC_DM_HWH_NAME, r); | ||
671 | return r; | ||
672 | } | ||
673 | 668 | ||
674 | rdac_wkqd = create_singlethread_workqueue("rdac_wkqd"); | 669 | rdac_wkqd = create_singlethread_workqueue("rdac_wkqd"); |
675 | if (!rdac_wkqd) { | 670 | if (!rdac_wkqd) { |
676 | DMERR("Failed to create workqueue rdac_wkqd."); | 671 | DMERR("Failed to create workqueue rdac_wkqd."); |
677 | dm_unregister_hw_handler(&rdac_handler); | ||
678 | return -ENOMEM; | 672 | return -ENOMEM; |
679 | } | 673 | } |
680 | 674 | ||
675 | r = dm_register_hw_handler(&rdac_handler); | ||
676 | if (r < 0) { | ||
677 | DMERR("%s: register failed %d", RDAC_DM_HWH_NAME, r); | ||
678 | destroy_workqueue(rdac_wkqd); | ||
679 | return r; | ||
680 | } | ||
681 | |||
681 | DMINFO("%s: version %s loaded", RDAC_DM_HWH_NAME, RDAC_DM_HWH_VER); | 682 | DMINFO("%s: version %s loaded", RDAC_DM_HWH_NAME, RDAC_DM_HWH_VER); |
682 | return 0; | 683 | return 0; |
683 | } | 684 | } |
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 31056abca89..24b2b1e32fa 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include "dm-hw-handler.h" | 10 | #include "dm-hw-handler.h" |
11 | #include "dm-bio-list.h" | 11 | #include "dm-bio-list.h" |
12 | #include "dm-bio-record.h" | 12 | #include "dm-bio-record.h" |
13 | #include "dm-uevent.h" | ||
13 | 14 | ||
14 | #include <linux/ctype.h> | 15 | #include <linux/ctype.h> |
15 | #include <linux/init.h> | 16 | #include <linux/init.h> |
@@ -75,6 +76,8 @@ struct multipath { | |||
75 | unsigned queue_io; /* Must we queue all I/O? */ | 76 | unsigned queue_io; /* Must we queue all I/O? */ |
76 | unsigned queue_if_no_path; /* Queue I/O if last path fails? */ | 77 | unsigned queue_if_no_path; /* Queue I/O if last path fails? */ |
77 | unsigned saved_queue_if_no_path;/* Saved state during suspension */ | 78 | unsigned saved_queue_if_no_path;/* Saved state during suspension */ |
79 | unsigned pg_init_retries; /* Number of times to retry pg_init */ | ||
80 | unsigned pg_init_count; /* Number of times pg_init called */ | ||
78 | 81 | ||
79 | struct work_struct process_queued_ios; | 82 | struct work_struct process_queued_ios; |
80 | struct bio_list queued_ios; | 83 | struct bio_list queued_ios; |
@@ -225,6 +228,8 @@ static void __switch_pg(struct multipath *m, struct pgpath *pgpath) | |||
225 | m->pg_init_required = 0; | 228 | m->pg_init_required = 0; |
226 | m->queue_io = 0; | 229 | m->queue_io = 0; |
227 | } | 230 | } |
231 | |||
232 | m->pg_init_count = 0; | ||
228 | } | 233 | } |
229 | 234 | ||
230 | static int __choose_path_in_pg(struct multipath *m, struct priority_group *pg) | 235 | static int __choose_path_in_pg(struct multipath *m, struct priority_group *pg) |
@@ -424,6 +429,7 @@ static void process_queued_ios(struct work_struct *work) | |||
424 | must_queue = 0; | 429 | must_queue = 0; |
425 | 430 | ||
426 | if (m->pg_init_required && !m->pg_init_in_progress) { | 431 | if (m->pg_init_required && !m->pg_init_in_progress) { |
432 | m->pg_init_count++; | ||
427 | m->pg_init_required = 0; | 433 | m->pg_init_required = 0; |
428 | m->pg_init_in_progress = 1; | 434 | m->pg_init_in_progress = 1; |
429 | init_required = 1; | 435 | init_required = 1; |
@@ -689,9 +695,11 @@ static int parse_features(struct arg_set *as, struct multipath *m) | |||
689 | int r; | 695 | int r; |
690 | unsigned argc; | 696 | unsigned argc; |
691 | struct dm_target *ti = m->ti; | 697 | struct dm_target *ti = m->ti; |
698 | const char *param_name; | ||
692 | 699 | ||
693 | static struct param _params[] = { | 700 | static struct param _params[] = { |
694 | {0, 1, "invalid number of feature args"}, | 701 | {0, 3, "invalid number of feature args"}, |
702 | {1, 50, "pg_init_retries must be between 1 and 50"}, | ||
695 | }; | 703 | }; |
696 | 704 | ||
697 | r = read_param(_params, shift(as), &argc, &ti->error); | 705 | r = read_param(_params, shift(as), &argc, &ti->error); |
@@ -701,12 +709,28 @@ static int parse_features(struct arg_set *as, struct multipath *m) | |||
701 | if (!argc) | 709 | if (!argc) |
702 | return 0; | 710 | return 0; |
703 | 711 | ||
704 | if (!strnicmp(shift(as), MESG_STR("queue_if_no_path"))) | 712 | do { |
705 | return queue_if_no_path(m, 1, 0); | 713 | param_name = shift(as); |
706 | else { | 714 | argc--; |
715 | |||
716 | if (!strnicmp(param_name, MESG_STR("queue_if_no_path"))) { | ||
717 | r = queue_if_no_path(m, 1, 0); | ||
718 | continue; | ||
719 | } | ||
720 | |||
721 | if (!strnicmp(param_name, MESG_STR("pg_init_retries")) && | ||
722 | (argc >= 1)) { | ||
723 | r = read_param(_params + 1, shift(as), | ||
724 | &m->pg_init_retries, &ti->error); | ||
725 | argc--; | ||
726 | continue; | ||
727 | } | ||
728 | |||
707 | ti->error = "Unrecognised multipath feature request"; | 729 | ti->error = "Unrecognised multipath feature request"; |
708 | return -EINVAL; | 730 | r = -EINVAL; |
709 | } | 731 | } while (argc && !r); |
732 | |||
733 | return r; | ||
710 | } | 734 | } |
711 | 735 | ||
712 | static int multipath_ctr(struct dm_target *ti, unsigned int argc, | 736 | static int multipath_ctr(struct dm_target *ti, unsigned int argc, |
@@ -834,6 +858,9 @@ static int fail_path(struct pgpath *pgpath) | |||
834 | if (pgpath == m->current_pgpath) | 858 | if (pgpath == m->current_pgpath) |
835 | m->current_pgpath = NULL; | 859 | m->current_pgpath = NULL; |
836 | 860 | ||
861 | dm_path_uevent(DM_UEVENT_PATH_FAILED, m->ti, | ||
862 | pgpath->path.dev->name, m->nr_valid_paths); | ||
863 | |||
837 | queue_work(kmultipathd, &m->trigger_event); | 864 | queue_work(kmultipathd, &m->trigger_event); |
838 | 865 | ||
839 | out: | 866 | out: |
@@ -873,6 +900,9 @@ static int reinstate_path(struct pgpath *pgpath) | |||
873 | if (!m->nr_valid_paths++ && m->queue_size) | 900 | if (!m->nr_valid_paths++ && m->queue_size) |
874 | queue_work(kmultipathd, &m->process_queued_ios); | 901 | queue_work(kmultipathd, &m->process_queued_ios); |
875 | 902 | ||
903 | dm_path_uevent(DM_UEVENT_PATH_REINSTATED, m->ti, | ||
904 | pgpath->path.dev->name, m->nr_valid_paths); | ||
905 | |||
876 | queue_work(kmultipathd, &m->trigger_event); | 906 | queue_work(kmultipathd, &m->trigger_event); |
877 | 907 | ||
878 | out: | 908 | out: |
@@ -976,6 +1006,26 @@ static int bypass_pg_num(struct multipath *m, const char *pgstr, int bypassed) | |||
976 | } | 1006 | } |
977 | 1007 | ||
978 | /* | 1008 | /* |
1009 | * Should we retry pg_init immediately? | ||
1010 | */ | ||
1011 | static int pg_init_limit_reached(struct multipath *m, struct pgpath *pgpath) | ||
1012 | { | ||
1013 | unsigned long flags; | ||
1014 | int limit_reached = 0; | ||
1015 | |||
1016 | spin_lock_irqsave(&m->lock, flags); | ||
1017 | |||
1018 | if (m->pg_init_count <= m->pg_init_retries) | ||
1019 | m->pg_init_required = 1; | ||
1020 | else | ||
1021 | limit_reached = 1; | ||
1022 | |||
1023 | spin_unlock_irqrestore(&m->lock, flags); | ||
1024 | |||
1025 | return limit_reached; | ||
1026 | } | ||
1027 | |||
1028 | /* | ||
979 | * pg_init must call this when it has completed its initialisation | 1029 | * pg_init must call this when it has completed its initialisation |
980 | */ | 1030 | */ |
981 | void dm_pg_init_complete(struct dm_path *path, unsigned err_flags) | 1031 | void dm_pg_init_complete(struct dm_path *path, unsigned err_flags) |
@@ -985,8 +1035,14 @@ void dm_pg_init_complete(struct dm_path *path, unsigned err_flags) | |||
985 | struct multipath *m = pg->m; | 1035 | struct multipath *m = pg->m; |
986 | unsigned long flags; | 1036 | unsigned long flags; |
987 | 1037 | ||
988 | /* We insist on failing the path if the PG is already bypassed. */ | 1038 | /* |
989 | if (err_flags && pg->bypassed) | 1039 | * If requested, retry pg_init until maximum number of retries exceeded. |
1040 | * If retry not requested and PG already bypassed, always fail the path. | ||
1041 | */ | ||
1042 | if (err_flags & MP_RETRY) { | ||
1043 | if (pg_init_limit_reached(m, pgpath)) | ||
1044 | err_flags |= MP_FAIL_PATH; | ||
1045 | } else if (err_flags && pg->bypassed) | ||
990 | err_flags |= MP_FAIL_PATH; | 1046 | err_flags |= MP_FAIL_PATH; |
991 | 1047 | ||
992 | if (err_flags & MP_FAIL_PATH) | 1048 | if (err_flags & MP_FAIL_PATH) |
@@ -996,7 +1052,7 @@ void dm_pg_init_complete(struct dm_path *path, unsigned err_flags) | |||
996 | bypass_pg(m, pg, 1); | 1052 | bypass_pg(m, pg, 1); |
997 | 1053 | ||
998 | spin_lock_irqsave(&m->lock, flags); | 1054 | spin_lock_irqsave(&m->lock, flags); |
999 | if (err_flags) { | 1055 | if (err_flags & ~MP_RETRY) { |
1000 | m->current_pgpath = NULL; | 1056 | m->current_pgpath = NULL; |
1001 | m->current_pg = NULL; | 1057 | m->current_pg = NULL; |
1002 | } else if (!m->pg_init_required) | 1058 | } else if (!m->pg_init_required) |
@@ -1148,11 +1204,15 @@ static int multipath_status(struct dm_target *ti, status_type_t type, | |||
1148 | 1204 | ||
1149 | /* Features */ | 1205 | /* Features */ |
1150 | if (type == STATUSTYPE_INFO) | 1206 | if (type == STATUSTYPE_INFO) |
1151 | DMEMIT("1 %u ", m->queue_size); | 1207 | DMEMIT("2 %u %u ", m->queue_size, m->pg_init_count); |
1152 | else if (m->queue_if_no_path) | 1208 | else { |
1153 | DMEMIT("1 queue_if_no_path "); | 1209 | DMEMIT("%u ", m->queue_if_no_path + |
1154 | else | 1210 | (m->pg_init_retries > 0) * 2); |
1155 | DMEMIT("0 "); | 1211 | if (m->queue_if_no_path) |
1212 | DMEMIT("queue_if_no_path "); | ||
1213 | if (m->pg_init_retries) | ||
1214 | DMEMIT("pg_init_retries %u ", m->pg_init_retries); | ||
1215 | } | ||
1156 | 1216 | ||
1157 | if (hwh->type && hwh->type->status) | 1217 | if (hwh->type && hwh->type->status) |
1158 | sz += hwh->type->status(hwh, type, result + sz, maxlen - sz); | 1218 | sz += hwh->type->status(hwh, type, result + sz, maxlen - sz); |
diff --git a/drivers/md/dm-path-selector.c b/drivers/md/dm-path-selector.c index f10a0c89b3f..ca1bb636a3e 100644 --- a/drivers/md/dm-path-selector.c +++ b/drivers/md/dm-path-selector.c | |||
@@ -94,12 +94,10 @@ out: | |||
94 | 94 | ||
95 | static struct ps_internal *_alloc_path_selector(struct path_selector_type *pst) | 95 | static struct ps_internal *_alloc_path_selector(struct path_selector_type *pst) |
96 | { | 96 | { |
97 | struct ps_internal *psi = kmalloc(sizeof(*psi), GFP_KERNEL); | 97 | struct ps_internal *psi = kzalloc(sizeof(*psi), GFP_KERNEL); |
98 | 98 | ||
99 | if (psi) { | 99 | if (psi) |
100 | memset(psi, 0, sizeof(*psi)); | ||
101 | psi->pst = *pst; | 100 | psi->pst = *pst; |
102 | } | ||
103 | 101 | ||
104 | return psi; | 102 | return psi; |
105 | } | 103 | } |
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c index d09ff15490a..31123d4a6b9 100644 --- a/drivers/md/dm-raid1.c +++ b/drivers/md/dm-raid1.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/time.h> | 19 | #include <linux/time.h> |
20 | #include <linux/vmalloc.h> | 20 | #include <linux/vmalloc.h> |
21 | #include <linux/workqueue.h> | 21 | #include <linux/workqueue.h> |
22 | #include <linux/log2.h> | ||
22 | 23 | ||
23 | #define DM_MSG_PREFIX "raid1" | 24 | #define DM_MSG_PREFIX "raid1" |
24 | #define DM_IO_PAGES 64 | 25 | #define DM_IO_PAGES 64 |
@@ -113,6 +114,7 @@ struct region { | |||
113 | * Mirror set structures. | 114 | * Mirror set structures. |
114 | *---------------------------------------------------------------*/ | 115 | *---------------------------------------------------------------*/ |
115 | struct mirror { | 116 | struct mirror { |
117 | struct mirror_set *ms; | ||
116 | atomic_t error_count; | 118 | atomic_t error_count; |
117 | struct dm_dev *dev; | 119 | struct dm_dev *dev; |
118 | sector_t offset; | 120 | sector_t offset; |
@@ -974,6 +976,7 @@ static struct mirror_set *alloc_context(unsigned int nr_mirrors, | |||
974 | 976 | ||
975 | if (rh_init(&ms->rh, ms, dl, region_size, ms->nr_regions)) { | 977 | if (rh_init(&ms->rh, ms, dl, region_size, ms->nr_regions)) { |
976 | ti->error = "Error creating dirty region hash"; | 978 | ti->error = "Error creating dirty region hash"; |
979 | dm_io_client_destroy(ms->io_client); | ||
977 | kfree(ms); | 980 | kfree(ms); |
978 | return NULL; | 981 | return NULL; |
979 | } | 982 | } |
@@ -994,7 +997,7 @@ static void free_context(struct mirror_set *ms, struct dm_target *ti, | |||
994 | 997 | ||
995 | static inline int _check_region_size(struct dm_target *ti, uint32_t size) | 998 | static inline int _check_region_size(struct dm_target *ti, uint32_t size) |
996 | { | 999 | { |
997 | return !(size % (PAGE_SIZE >> 9) || (size & (size - 1)) || | 1000 | return !(size % (PAGE_SIZE >> 9) || !is_power_of_2(size) || |
998 | size > ti->len); | 1001 | size > ti->len); |
999 | } | 1002 | } |
1000 | 1003 | ||
@@ -1015,6 +1018,7 @@ static int get_mirror(struct mirror_set *ms, struct dm_target *ti, | |||
1015 | return -ENXIO; | 1018 | return -ENXIO; |
1016 | } | 1019 | } |
1017 | 1020 | ||
1021 | ms->mirror[mirror].ms = ms; | ||
1018 | ms->mirror[mirror].offset = offset; | 1022 | ms->mirror[mirror].offset = offset; |
1019 | 1023 | ||
1020 | return 0; | 1024 | return 0; |
@@ -1163,16 +1167,14 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
1163 | ms->kmirrord_wq = create_singlethread_workqueue("kmirrord"); | 1167 | ms->kmirrord_wq = create_singlethread_workqueue("kmirrord"); |
1164 | if (!ms->kmirrord_wq) { | 1168 | if (!ms->kmirrord_wq) { |
1165 | DMERR("couldn't start kmirrord"); | 1169 | DMERR("couldn't start kmirrord"); |
1166 | free_context(ms, ti, m); | 1170 | r = -ENOMEM; |
1167 | return -ENOMEM; | 1171 | goto err_free_context; |
1168 | } | 1172 | } |
1169 | INIT_WORK(&ms->kmirrord_work, do_mirror); | 1173 | INIT_WORK(&ms->kmirrord_work, do_mirror); |
1170 | 1174 | ||
1171 | r = parse_features(ms, argc, argv, &args_used); | 1175 | r = parse_features(ms, argc, argv, &args_used); |
1172 | if (r) { | 1176 | if (r) |
1173 | free_context(ms, ti, ms->nr_mirrors); | 1177 | goto err_destroy_wq; |
1174 | return r; | ||
1175 | } | ||
1176 | 1178 | ||
1177 | argv += args_used; | 1179 | argv += args_used; |
1178 | argc -= args_used; | 1180 | argc -= args_used; |
@@ -1188,19 +1190,22 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
1188 | 1190 | ||
1189 | if (argc) { | 1191 | if (argc) { |
1190 | ti->error = "Too many mirror arguments"; | 1192 | ti->error = "Too many mirror arguments"; |
1191 | free_context(ms, ti, ms->nr_mirrors); | 1193 | r = -EINVAL; |
1192 | return -EINVAL; | 1194 | goto err_destroy_wq; |
1193 | } | 1195 | } |
1194 | 1196 | ||
1195 | r = kcopyd_client_create(DM_IO_PAGES, &ms->kcopyd_client); | 1197 | r = kcopyd_client_create(DM_IO_PAGES, &ms->kcopyd_client); |
1196 | if (r) { | 1198 | if (r) |
1197 | destroy_workqueue(ms->kmirrord_wq); | 1199 | goto err_destroy_wq; |
1198 | free_context(ms, ti, ms->nr_mirrors); | ||
1199 | return r; | ||
1200 | } | ||
1201 | 1200 | ||
1202 | wake(ms); | 1201 | wake(ms); |
1203 | return 0; | 1202 | return 0; |
1203 | |||
1204 | err_destroy_wq: | ||
1205 | destroy_workqueue(ms->kmirrord_wq); | ||
1206 | err_free_context: | ||
1207 | free_context(ms, ti, ms->nr_mirrors); | ||
1208 | return r; | ||
1204 | } | 1209 | } |
1205 | 1210 | ||
1206 | static void mirror_dtr(struct dm_target *ti) | 1211 | static void mirror_dtr(struct dm_target *ti) |
@@ -1302,7 +1307,7 @@ static void mirror_postsuspend(struct dm_target *ti) | |||
1302 | wait_event(_kmirrord_recovery_stopped, | 1307 | wait_event(_kmirrord_recovery_stopped, |
1303 | !atomic_read(&ms->rh.recovery_in_flight)); | 1308 | !atomic_read(&ms->rh.recovery_in_flight)); |
1304 | 1309 | ||
1305 | if (log->type->suspend && log->type->suspend(log)) | 1310 | if (log->type->postsuspend && log->type->postsuspend(log)) |
1306 | /* FIXME: need better error handling */ | 1311 | /* FIXME: need better error handling */ |
1307 | DMWARN("log suspend failed"); | 1312 | DMWARN("log suspend failed"); |
1308 | } | 1313 | } |
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 98a633f3d6b..cee16fadd9e 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
18 | #include <linux/slab.h> | 18 | #include <linux/slab.h> |
19 | #include <linux/vmalloc.h> | 19 | #include <linux/vmalloc.h> |
20 | #include <linux/log2.h> | ||
20 | 21 | ||
21 | #include "dm-snap.h" | 22 | #include "dm-snap.h" |
22 | #include "dm-bio-list.h" | 23 | #include "dm-bio-list.h" |
@@ -415,7 +416,7 @@ static int set_chunk_size(struct dm_snapshot *s, const char *chunk_size_arg, | |||
415 | chunk_size = round_up(chunk_size, PAGE_SIZE >> 9); | 416 | chunk_size = round_up(chunk_size, PAGE_SIZE >> 9); |
416 | 417 | ||
417 | /* Check chunk_size is a power of 2 */ | 418 | /* Check chunk_size is a power of 2 */ |
418 | if (chunk_size & (chunk_size - 1)) { | 419 | if (!is_power_of_2(chunk_size)) { |
419 | *error = "Chunk size is not a power of 2"; | 420 | *error = "Chunk size is not a power of 2"; |
420 | return -EINVAL; | 421 | return -EINVAL; |
421 | } | 422 | } |
diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c index 51f5e076001..969944a8aba 100644 --- a/drivers/md/dm-stripe.c +++ b/drivers/md/dm-stripe.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/blkdev.h> | 11 | #include <linux/blkdev.h> |
12 | #include <linux/bio.h> | 12 | #include <linux/bio.h> |
13 | #include <linux/slab.h> | 13 | #include <linux/slab.h> |
14 | #include <linux/log2.h> | ||
14 | 15 | ||
15 | #define DM_MSG_PREFIX "striped" | 16 | #define DM_MSG_PREFIX "striped" |
16 | 17 | ||
@@ -99,7 +100,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
99 | /* | 100 | /* |
100 | * chunk_size is a power of two | 101 | * chunk_size is a power of two |
101 | */ | 102 | */ |
102 | if (!chunk_size || (chunk_size & (chunk_size - 1)) || | 103 | if (!is_power_of_2(chunk_size) || |
103 | (chunk_size < (PAGE_SIZE >> SECTOR_SHIFT))) { | 104 | (chunk_size < (PAGE_SIZE >> SECTOR_SHIFT))) { |
104 | ti->error = "Invalid chunk size"; | 105 | ti->error = "Invalid chunk size"; |
105 | return -EINVAL; | 106 | return -EINVAL; |
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index fbe477bb2c6..8939e610508 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c | |||
@@ -213,12 +213,11 @@ static int alloc_targets(struct dm_table *t, unsigned int num) | |||
213 | int dm_table_create(struct dm_table **result, int mode, | 213 | int dm_table_create(struct dm_table **result, int mode, |
214 | unsigned num_targets, struct mapped_device *md) | 214 | unsigned num_targets, struct mapped_device *md) |
215 | { | 215 | { |
216 | struct dm_table *t = kmalloc(sizeof(*t), GFP_KERNEL); | 216 | struct dm_table *t = kzalloc(sizeof(*t), GFP_KERNEL); |
217 | 217 | ||
218 | if (!t) | 218 | if (!t) |
219 | return -ENOMEM; | 219 | return -ENOMEM; |
220 | 220 | ||
221 | memset(t, 0, sizeof(*t)); | ||
222 | INIT_LIST_HEAD(&t->devices); | 221 | INIT_LIST_HEAD(&t->devices); |
223 | atomic_set(&t->holders, 1); | 222 | atomic_set(&t->holders, 1); |
224 | 223 | ||
diff --git a/drivers/md/dm-target.c b/drivers/md/dm-target.c index 477a041a41c..835cf95b857 100644 --- a/drivers/md/dm-target.c +++ b/drivers/md/dm-target.c | |||
@@ -88,12 +88,10 @@ void dm_put_target_type(struct target_type *t) | |||
88 | 88 | ||
89 | static struct tt_internal *alloc_target(struct target_type *t) | 89 | static struct tt_internal *alloc_target(struct target_type *t) |
90 | { | 90 | { |
91 | struct tt_internal *ti = kmalloc(sizeof(*ti), GFP_KERNEL); | 91 | struct tt_internal *ti = kzalloc(sizeof(*ti), GFP_KERNEL); |
92 | 92 | ||
93 | if (ti) { | 93 | if (ti) |
94 | memset(ti, 0, sizeof(*ti)); | ||
95 | ti->tt = *t; | 94 | ti->tt = *t; |
96 | } | ||
97 | 95 | ||
98 | return ti; | 96 | return ti; |
99 | } | 97 | } |
diff --git a/drivers/md/dm-uevent.c b/drivers/md/dm-uevent.c new file mode 100644 index 00000000000..50377e5dc2a --- /dev/null +++ b/drivers/md/dm-uevent.c | |||
@@ -0,0 +1,222 @@ | |||
1 | /* | ||
2 | * Device Mapper Uevent Support (dm-uevent) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License as published by the | ||
6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
7 | * option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but | ||
10 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
12 | * General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along | ||
15 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * Copyright IBM Corporation, 2007 | ||
19 | * Author: Mike Anderson <andmike@linux.vnet.ibm.com> | ||
20 | */ | ||
21 | #include <linux/list.h> | ||
22 | #include <linux/slab.h> | ||
23 | #include <linux/kobject.h> | ||
24 | #include <linux/dm-ioctl.h> | ||
25 | |||
26 | #include "dm.h" | ||
27 | #include "dm-uevent.h" | ||
28 | |||
29 | #define DM_MSG_PREFIX "uevent" | ||
30 | |||
31 | static const struct { | ||
32 | enum dm_uevent_type type; | ||
33 | enum kobject_action action; | ||
34 | char *name; | ||
35 | } _dm_uevent_type_names[] = { | ||
36 | {DM_UEVENT_PATH_FAILED, KOBJ_CHANGE, "PATH_FAILED"}, | ||
37 | {DM_UEVENT_PATH_REINSTATED, KOBJ_CHANGE, "PATH_REINSTATED"}, | ||
38 | }; | ||
39 | |||
40 | static struct kmem_cache *_dm_event_cache; | ||
41 | |||
42 | struct dm_uevent { | ||
43 | struct mapped_device *md; | ||
44 | enum kobject_action action; | ||
45 | struct kobj_uevent_env ku_env; | ||
46 | struct list_head elist; | ||
47 | char name[DM_NAME_LEN]; | ||
48 | char uuid[DM_UUID_LEN]; | ||
49 | }; | ||
50 | |||
51 | static void dm_uevent_free(struct dm_uevent *event) | ||
52 | { | ||
53 | kmem_cache_free(_dm_event_cache, event); | ||
54 | } | ||
55 | |||
56 | static struct dm_uevent *dm_uevent_alloc(struct mapped_device *md) | ||
57 | { | ||
58 | struct dm_uevent *event; | ||
59 | |||
60 | event = kmem_cache_zalloc(_dm_event_cache, GFP_ATOMIC); | ||
61 | if (!event) | ||
62 | return NULL; | ||
63 | |||
64 | INIT_LIST_HEAD(&event->elist); | ||
65 | event->md = md; | ||
66 | |||
67 | return event; | ||
68 | } | ||
69 | |||
70 | static struct dm_uevent *dm_build_path_uevent(struct mapped_device *md, | ||
71 | struct dm_target *ti, | ||
72 | enum kobject_action action, | ||
73 | const char *dm_action, | ||
74 | const char *path, | ||
75 | unsigned nr_valid_paths) | ||
76 | { | ||
77 | struct dm_uevent *event; | ||
78 | |||
79 | event = dm_uevent_alloc(md); | ||
80 | if (!event) { | ||
81 | DMERR("%s: dm_uevent_alloc() failed", __FUNCTION__); | ||
82 | goto err_nomem; | ||
83 | } | ||
84 | |||
85 | event->action = action; | ||
86 | |||
87 | if (add_uevent_var(&event->ku_env, "DM_TARGET=%s", ti->type->name)) { | ||
88 | DMERR("%s: add_uevent_var() for DM_TARGET failed", | ||
89 | __FUNCTION__); | ||
90 | goto err_add; | ||
91 | } | ||
92 | |||
93 | if (add_uevent_var(&event->ku_env, "DM_ACTION=%s", dm_action)) { | ||
94 | DMERR("%s: add_uevent_var() for DM_ACTION failed", | ||
95 | __FUNCTION__); | ||
96 | goto err_add; | ||
97 | } | ||
98 | |||
99 | if (add_uevent_var(&event->ku_env, "DM_SEQNUM=%u", | ||
100 | dm_next_uevent_seq(md))) { | ||
101 | DMERR("%s: add_uevent_var() for DM_SEQNUM failed", | ||
102 | __FUNCTION__); | ||
103 | goto err_add; | ||
104 | } | ||
105 | |||
106 | if (add_uevent_var(&event->ku_env, "DM_PATH=%s", path)) { | ||
107 | DMERR("%s: add_uevent_var() for DM_PATH failed", __FUNCTION__); | ||
108 | goto err_add; | ||
109 | } | ||
110 | |||
111 | if (add_uevent_var(&event->ku_env, "DM_NR_VALID_PATHS=%d", | ||
112 | nr_valid_paths)) { | ||
113 | DMERR("%s: add_uevent_var() for DM_NR_VALID_PATHS failed", | ||
114 | __FUNCTION__); | ||
115 | goto err_add; | ||
116 | } | ||
117 | |||
118 | return event; | ||
119 | |||
120 | err_add: | ||
121 | dm_uevent_free(event); | ||
122 | err_nomem: | ||
123 | return ERR_PTR(-ENOMEM); | ||
124 | } | ||
125 | |||
126 | /** | ||
127 | * dm_send_uevents - send uevents for given list | ||
128 | * | ||
129 | * @events: list of events to send | ||
130 | * @kobj: kobject generating event | ||
131 | * | ||
132 | */ | ||
133 | void dm_send_uevents(struct list_head *events, struct kobject *kobj) | ||
134 | { | ||
135 | int r; | ||
136 | struct dm_uevent *event, *next; | ||
137 | |||
138 | list_for_each_entry_safe(event, next, events, elist) { | ||
139 | list_del_init(&event->elist); | ||
140 | |||
141 | /* | ||
142 | * Need to call dm_copy_name_and_uuid from here for now. | ||
143 | * Context of previous var adds and locking used for | ||
144 | * hash_cell not compatable. | ||
145 | */ | ||
146 | if (dm_copy_name_and_uuid(event->md, event->name, | ||
147 | event->uuid)) { | ||
148 | DMERR("%s: dm_copy_name_and_uuid() failed", | ||
149 | __FUNCTION__); | ||
150 | goto uevent_free; | ||
151 | } | ||
152 | |||
153 | if (add_uevent_var(&event->ku_env, "DM_NAME=%s", event->name)) { | ||
154 | DMERR("%s: add_uevent_var() for DM_NAME failed", | ||
155 | __FUNCTION__); | ||
156 | goto uevent_free; | ||
157 | } | ||
158 | |||
159 | if (add_uevent_var(&event->ku_env, "DM_UUID=%s", event->uuid)) { | ||
160 | DMERR("%s: add_uevent_var() for DM_UUID failed", | ||
161 | __FUNCTION__); | ||
162 | goto uevent_free; | ||
163 | } | ||
164 | |||
165 | r = kobject_uevent_env(kobj, event->action, event->ku_env.envp); | ||
166 | if (r) | ||
167 | DMERR("%s: kobject_uevent_env failed", __FUNCTION__); | ||
168 | uevent_free: | ||
169 | dm_uevent_free(event); | ||
170 | } | ||
171 | } | ||
172 | EXPORT_SYMBOL_GPL(dm_send_uevents); | ||
173 | |||
174 | /** | ||
175 | * dm_path_uevent - called to create a new path event and queue it | ||
176 | * | ||
177 | * @event_type: path event type enum | ||
178 | * @ti: pointer to a dm_target | ||
179 | * @path: string containing pathname | ||
180 | * @nr_valid_paths: number of valid paths remaining | ||
181 | * | ||
182 | */ | ||
183 | void dm_path_uevent(enum dm_uevent_type event_type, struct dm_target *ti, | ||
184 | const char *path, unsigned nr_valid_paths) | ||
185 | { | ||
186 | struct mapped_device *md = dm_table_get_md(ti->table); | ||
187 | struct dm_uevent *event; | ||
188 | |||
189 | if (event_type >= ARRAY_SIZE(_dm_uevent_type_names)) { | ||
190 | DMERR("%s: Invalid event_type %d", __FUNCTION__, event_type); | ||
191 | goto out; | ||
192 | } | ||
193 | |||
194 | event = dm_build_path_uevent(md, ti, | ||
195 | _dm_uevent_type_names[event_type].action, | ||
196 | _dm_uevent_type_names[event_type].name, | ||
197 | path, nr_valid_paths); | ||
198 | if (IS_ERR(event)) | ||
199 | goto out; | ||
200 | |||
201 | dm_uevent_add(md, &event->elist); | ||
202 | |||
203 | out: | ||
204 | dm_put(md); | ||
205 | } | ||
206 | EXPORT_SYMBOL_GPL(dm_path_uevent); | ||
207 | |||
208 | int dm_uevent_init(void) | ||
209 | { | ||
210 | _dm_event_cache = KMEM_CACHE(dm_uevent, 0); | ||
211 | if (!_dm_event_cache) | ||
212 | return -ENOMEM; | ||
213 | |||
214 | DMINFO("version 1.0.3"); | ||
215 | |||
216 | return 0; | ||
217 | } | ||
218 | |||
219 | void dm_uevent_exit(void) | ||
220 | { | ||
221 | kmem_cache_destroy(_dm_event_cache); | ||
222 | } | ||
diff --git a/drivers/md/dm-uevent.h b/drivers/md/dm-uevent.h new file mode 100644 index 00000000000..2eccc8bd671 --- /dev/null +++ b/drivers/md/dm-uevent.h | |||
@@ -0,0 +1,59 @@ | |||
1 | /* | ||
2 | * Device Mapper Uevent Support | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License as published by the | ||
6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
7 | * option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but | ||
10 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
12 | * General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along | ||
15 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * Copyright IBM Corporation, 2007 | ||
19 | * Author: Mike Anderson <andmike@linux.vnet.ibm.com> | ||
20 | */ | ||
21 | #ifndef DM_UEVENT_H | ||
22 | #define DM_UEVENT_H | ||
23 | |||
24 | enum dm_uevent_type { | ||
25 | DM_UEVENT_PATH_FAILED, | ||
26 | DM_UEVENT_PATH_REINSTATED, | ||
27 | }; | ||
28 | |||
29 | #ifdef CONFIG_DM_UEVENT | ||
30 | |||
31 | extern int dm_uevent_init(void); | ||
32 | extern void dm_uevent_exit(void); | ||
33 | extern void dm_send_uevents(struct list_head *events, struct kobject *kobj); | ||
34 | extern void dm_path_uevent(enum dm_uevent_type event_type, | ||
35 | struct dm_target *ti, const char *path, | ||
36 | unsigned nr_valid_paths); | ||
37 | |||
38 | #else | ||
39 | |||
40 | static inline int dm_uevent_init(void) | ||
41 | { | ||
42 | return 0; | ||
43 | } | ||
44 | static inline void dm_uevent_exit(void) | ||
45 | { | ||
46 | } | ||
47 | static inline void dm_send_uevents(struct list_head *events, | ||
48 | struct kobject *kobj) | ||
49 | { | ||
50 | } | ||
51 | static inline void dm_path_uevent(enum dm_uevent_type event_type, | ||
52 | struct dm_target *ti, const char *path, | ||
53 | unsigned nr_valid_paths) | ||
54 | { | ||
55 | } | ||
56 | |||
57 | #endif /* CONFIG_DM_UEVENT */ | ||
58 | |||
59 | #endif /* DM_UEVENT_H */ | ||
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index d837d37f620..07cbbb8eb3e 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include "dm.h" | 8 | #include "dm.h" |
9 | #include "dm-bio-list.h" | 9 | #include "dm-bio-list.h" |
10 | #include "dm-uevent.h" | ||
10 | 11 | ||
11 | #include <linux/init.h> | 12 | #include <linux/init.h> |
12 | #include <linux/module.h> | 13 | #include <linux/module.h> |
@@ -112,6 +113,9 @@ struct mapped_device { | |||
112 | */ | 113 | */ |
113 | atomic_t event_nr; | 114 | atomic_t event_nr; |
114 | wait_queue_head_t eventq; | 115 | wait_queue_head_t eventq; |
116 | atomic_t uevent_seq; | ||
117 | struct list_head uevent_list; | ||
118 | spinlock_t uevent_lock; /* Protect access to uevent_list */ | ||
115 | 119 | ||
116 | /* | 120 | /* |
117 | * freeze/thaw support require holding onto a super block | 121 | * freeze/thaw support require holding onto a super block |
@@ -143,11 +147,19 @@ static int __init local_init(void) | |||
143 | return -ENOMEM; | 147 | return -ENOMEM; |
144 | } | 148 | } |
145 | 149 | ||
150 | r = dm_uevent_init(); | ||
151 | if (r) { | ||
152 | kmem_cache_destroy(_tio_cache); | ||
153 | kmem_cache_destroy(_io_cache); | ||
154 | return r; | ||
155 | } | ||
156 | |||
146 | _major = major; | 157 | _major = major; |
147 | r = register_blkdev(_major, _name); | 158 | r = register_blkdev(_major, _name); |
148 | if (r < 0) { | 159 | if (r < 0) { |
149 | kmem_cache_destroy(_tio_cache); | 160 | kmem_cache_destroy(_tio_cache); |
150 | kmem_cache_destroy(_io_cache); | 161 | kmem_cache_destroy(_io_cache); |
162 | dm_uevent_exit(); | ||
151 | return r; | 163 | return r; |
152 | } | 164 | } |
153 | 165 | ||
@@ -162,6 +174,7 @@ static void local_exit(void) | |||
162 | kmem_cache_destroy(_tio_cache); | 174 | kmem_cache_destroy(_tio_cache); |
163 | kmem_cache_destroy(_io_cache); | 175 | kmem_cache_destroy(_io_cache); |
164 | unregister_blkdev(_major, _name); | 176 | unregister_blkdev(_major, _name); |
177 | dm_uevent_exit(); | ||
165 | 178 | ||
166 | _major = 0; | 179 | _major = 0; |
167 | 180 | ||
@@ -751,15 +764,13 @@ static void __clone_and_map(struct clone_info *ci) | |||
751 | /* | 764 | /* |
752 | * Split the bio into several clones. | 765 | * Split the bio into several clones. |
753 | */ | 766 | */ |
754 | static void __split_bio(struct mapped_device *md, struct bio *bio) | 767 | static int __split_bio(struct mapped_device *md, struct bio *bio) |
755 | { | 768 | { |
756 | struct clone_info ci; | 769 | struct clone_info ci; |
757 | 770 | ||
758 | ci.map = dm_get_table(md); | 771 | ci.map = dm_get_table(md); |
759 | if (!ci.map) { | 772 | if (unlikely(!ci.map)) |
760 | bio_io_error(bio); | 773 | return -EIO; |
761 | return; | ||
762 | } | ||
763 | 774 | ||
764 | ci.md = md; | 775 | ci.md = md; |
765 | ci.bio = bio; | 776 | ci.bio = bio; |
@@ -779,6 +790,8 @@ static void __split_bio(struct mapped_device *md, struct bio *bio) | |||
779 | /* drop the extra reference count */ | 790 | /* drop the extra reference count */ |
780 | dec_pending(ci.io, 0); | 791 | dec_pending(ci.io, 0); |
781 | dm_table_put(ci.map); | 792 | dm_table_put(ci.map); |
793 | |||
794 | return 0; | ||
782 | } | 795 | } |
783 | /*----------------------------------------------------------------- | 796 | /*----------------------------------------------------------------- |
784 | * CRUD END | 797 | * CRUD END |
@@ -790,7 +803,7 @@ static void __split_bio(struct mapped_device *md, struct bio *bio) | |||
790 | */ | 803 | */ |
791 | static int dm_request(struct request_queue *q, struct bio *bio) | 804 | static int dm_request(struct request_queue *q, struct bio *bio) |
792 | { | 805 | { |
793 | int r; | 806 | int r = -EIO; |
794 | int rw = bio_data_dir(bio); | 807 | int rw = bio_data_dir(bio); |
795 | struct mapped_device *md = q->queuedata; | 808 | struct mapped_device *md = q->queuedata; |
796 | 809 | ||
@@ -815,18 +828,11 @@ static int dm_request(struct request_queue *q, struct bio *bio) | |||
815 | while (test_bit(DMF_BLOCK_IO, &md->flags)) { | 828 | while (test_bit(DMF_BLOCK_IO, &md->flags)) { |
816 | up_read(&md->io_lock); | 829 | up_read(&md->io_lock); |
817 | 830 | ||
818 | if (bio_rw(bio) == READA) { | 831 | if (bio_rw(bio) != READA) |
819 | bio_io_error(bio); | 832 | r = queue_io(md, bio); |
820 | return 0; | ||
821 | } | ||
822 | |||
823 | r = queue_io(md, bio); | ||
824 | if (r < 0) { | ||
825 | bio_io_error(bio); | ||
826 | return 0; | ||
827 | 833 | ||
828 | } else if (r == 0) | 834 | if (r <= 0) |
829 | return 0; /* deferred successfully */ | 835 | goto out_req; |
830 | 836 | ||
831 | /* | 837 | /* |
832 | * We're in a while loop, because someone could suspend | 838 | * We're in a while loop, because someone could suspend |
@@ -835,8 +841,13 @@ static int dm_request(struct request_queue *q, struct bio *bio) | |||
835 | down_read(&md->io_lock); | 841 | down_read(&md->io_lock); |
836 | } | 842 | } |
837 | 843 | ||
838 | __split_bio(md, bio); | 844 | r = __split_bio(md, bio); |
839 | up_read(&md->io_lock); | 845 | up_read(&md->io_lock); |
846 | |||
847 | out_req: | ||
848 | if (r < 0) | ||
849 | bio_io_error(bio); | ||
850 | |||
840 | return 0; | 851 | return 0; |
841 | } | 852 | } |
842 | 853 | ||
@@ -977,6 +988,9 @@ static struct mapped_device *alloc_dev(int minor) | |||
977 | atomic_set(&md->holders, 1); | 988 | atomic_set(&md->holders, 1); |
978 | atomic_set(&md->open_count, 0); | 989 | atomic_set(&md->open_count, 0); |
979 | atomic_set(&md->event_nr, 0); | 990 | atomic_set(&md->event_nr, 0); |
991 | atomic_set(&md->uevent_seq, 0); | ||
992 | INIT_LIST_HEAD(&md->uevent_list); | ||
993 | spin_lock_init(&md->uevent_lock); | ||
980 | 994 | ||
981 | md->queue = blk_alloc_queue(GFP_KERNEL); | 995 | md->queue = blk_alloc_queue(GFP_KERNEL); |
982 | if (!md->queue) | 996 | if (!md->queue) |
@@ -1044,12 +1058,14 @@ static struct mapped_device *alloc_dev(int minor) | |||
1044 | return NULL; | 1058 | return NULL; |
1045 | } | 1059 | } |
1046 | 1060 | ||
1061 | static void unlock_fs(struct mapped_device *md); | ||
1062 | |||
1047 | static void free_dev(struct mapped_device *md) | 1063 | static void free_dev(struct mapped_device *md) |
1048 | { | 1064 | { |
1049 | int minor = md->disk->first_minor; | 1065 | int minor = md->disk->first_minor; |
1050 | 1066 | ||
1051 | if (md->suspended_bdev) { | 1067 | if (md->suspended_bdev) { |
1052 | thaw_bdev(md->suspended_bdev, NULL); | 1068 | unlock_fs(md); |
1053 | bdput(md->suspended_bdev); | 1069 | bdput(md->suspended_bdev); |
1054 | } | 1070 | } |
1055 | mempool_destroy(md->tio_pool); | 1071 | mempool_destroy(md->tio_pool); |
@@ -1073,8 +1089,16 @@ static void free_dev(struct mapped_device *md) | |||
1073 | */ | 1089 | */ |
1074 | static void event_callback(void *context) | 1090 | static void event_callback(void *context) |
1075 | { | 1091 | { |
1092 | unsigned long flags; | ||
1093 | LIST_HEAD(uevents); | ||
1076 | struct mapped_device *md = (struct mapped_device *) context; | 1094 | struct mapped_device *md = (struct mapped_device *) context; |
1077 | 1095 | ||
1096 | spin_lock_irqsave(&md->uevent_lock, flags); | ||
1097 | list_splice_init(&md->uevent_list, &uevents); | ||
1098 | spin_unlock_irqrestore(&md->uevent_lock, flags); | ||
1099 | |||
1100 | dm_send_uevents(&uevents, &md->disk->kobj); | ||
1101 | |||
1078 | atomic_inc(&md->event_nr); | 1102 | atomic_inc(&md->event_nr); |
1079 | wake_up(&md->eventq); | 1103 | wake_up(&md->eventq); |
1080 | } | 1104 | } |
@@ -1233,7 +1257,8 @@ static void __flush_deferred_io(struct mapped_device *md, struct bio *c) | |||
1233 | while (c) { | 1257 | while (c) { |
1234 | n = c->bi_next; | 1258 | n = c->bi_next; |
1235 | c->bi_next = NULL; | 1259 | c->bi_next = NULL; |
1236 | __split_bio(md, c); | 1260 | if (__split_bio(md, c)) |
1261 | bio_io_error(c); | ||
1237 | c = n; | 1262 | c = n; |
1238 | } | 1263 | } |
1239 | } | 1264 | } |
@@ -1491,6 +1516,11 @@ out: | |||
1491 | /*----------------------------------------------------------------- | 1516 | /*----------------------------------------------------------------- |
1492 | * Event notification. | 1517 | * Event notification. |
1493 | *---------------------------------------------------------------*/ | 1518 | *---------------------------------------------------------------*/ |
1519 | uint32_t dm_next_uevent_seq(struct mapped_device *md) | ||
1520 | { | ||
1521 | return atomic_add_return(1, &md->uevent_seq); | ||
1522 | } | ||
1523 | |||
1494 | uint32_t dm_get_event_nr(struct mapped_device *md) | 1524 | uint32_t dm_get_event_nr(struct mapped_device *md) |
1495 | { | 1525 | { |
1496 | return atomic_read(&md->event_nr); | 1526 | return atomic_read(&md->event_nr); |
@@ -1502,6 +1532,15 @@ int dm_wait_event(struct mapped_device *md, int event_nr) | |||
1502 | (event_nr != atomic_read(&md->event_nr))); | 1532 | (event_nr != atomic_read(&md->event_nr))); |
1503 | } | 1533 | } |
1504 | 1534 | ||
1535 | void dm_uevent_add(struct mapped_device *md, struct list_head *elist) | ||
1536 | { | ||
1537 | unsigned long flags; | ||
1538 | |||
1539 | spin_lock_irqsave(&md->uevent_lock, flags); | ||
1540 | list_add(elist, &md->uevent_list); | ||
1541 | spin_unlock_irqrestore(&md->uevent_lock, flags); | ||
1542 | } | ||
1543 | |||
1505 | /* | 1544 | /* |
1506 | * The gendisk is only valid as long as you have a reference | 1545 | * The gendisk is only valid as long as you have a reference |
1507 | * count on 'md'. | 1546 | * count on 'md'. |
diff --git a/drivers/md/kcopyd.c b/drivers/md/kcopyd.c index 7e052378c47..f3831f31223 100644 --- a/drivers/md/kcopyd.c +++ b/drivers/md/kcopyd.c | |||
@@ -198,7 +198,7 @@ struct kcopyd_job { | |||
198 | * These fields are only used if the job has been split | 198 | * These fields are only used if the job has been split |
199 | * into more manageable parts. | 199 | * into more manageable parts. |
200 | */ | 200 | */ |
201 | struct semaphore lock; | 201 | struct mutex lock; |
202 | atomic_t sub_jobs; | 202 | atomic_t sub_jobs; |
203 | sector_t progress; | 203 | sector_t progress; |
204 | }; | 204 | }; |
@@ -456,7 +456,7 @@ static void segment_complete(int read_err, | |||
456 | sector_t count = 0; | 456 | sector_t count = 0; |
457 | struct kcopyd_job *job = (struct kcopyd_job *) context; | 457 | struct kcopyd_job *job = (struct kcopyd_job *) context; |
458 | 458 | ||
459 | down(&job->lock); | 459 | mutex_lock(&job->lock); |
460 | 460 | ||
461 | /* update the error */ | 461 | /* update the error */ |
462 | if (read_err) | 462 | if (read_err) |
@@ -480,7 +480,7 @@ static void segment_complete(int read_err, | |||
480 | job->progress += count; | 480 | job->progress += count; |
481 | } | 481 | } |
482 | } | 482 | } |
483 | up(&job->lock); | 483 | mutex_unlock(&job->lock); |
484 | 484 | ||
485 | if (count) { | 485 | if (count) { |
486 | int i; | 486 | int i; |
@@ -562,7 +562,7 @@ int kcopyd_copy(struct kcopyd_client *kc, struct io_region *from, | |||
562 | dispatch_job(job); | 562 | dispatch_job(job); |
563 | 563 | ||
564 | else { | 564 | else { |
565 | init_MUTEX(&job->lock); | 565 | mutex_init(&job->lock); |
566 | job->progress = 0; | 566 | job->progress = 0; |
567 | split_job(job); | 567 | split_job(job); |
568 | } | 568 | } |
diff --git a/drivers/md/md.c b/drivers/md/md.c index c059ae6f37e..808cd954945 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -4717,7 +4717,7 @@ mdk_thread_t *md_register_thread(void (*run) (mddev_t *), mddev_t *mddev, | |||
4717 | 4717 | ||
4718 | void md_unregister_thread(mdk_thread_t *thread) | 4718 | void md_unregister_thread(mdk_thread_t *thread) |
4719 | { | 4719 | { |
4720 | dprintk("interrupting MD-thread pid %d\n", thread->tsk->pid); | 4720 | dprintk("interrupting MD-thread pid %d\n", task_pid_nr(thread->tsk)); |
4721 | 4721 | ||
4722 | kthread_stop(thread->tsk); | 4722 | kthread_stop(thread->tsk); |
4723 | kfree(thread); | 4723 | kfree(thread); |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 16775a0df7f..85478d6a9c1 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -9,7 +9,7 @@ | |||
9 | * | 9 | * |
10 | * Better read-balancing code written by Mika Kuoppala <miku@iki.fi>, 2000 | 10 | * Better read-balancing code written by Mika Kuoppala <miku@iki.fi>, 2000 |
11 | * | 11 | * |
12 | * Fixes to reconstruction by Jakob Østergaard" <jakob@ostenfeld.dk> | 12 | * Fixes to reconstruction by Jakob Østergaard" <jakob@ostenfeld.dk> |
13 | * Various fixes by Neil Brown <neilb@cse.unsw.edu.au> | 13 | * Various fixes by Neil Brown <neilb@cse.unsw.edu.au> |
14 | * | 14 | * |
15 | * Changes by Peter T. Breuer <ptb@it.uc3m.es> 31/1/2003 to support | 15 | * Changes by Peter T. Breuer <ptb@it.uc3m.es> 31/1/2003 to support |
diff --git a/drivers/media/common/saa7146_hlp.c b/drivers/media/common/saa7146_hlp.c index d2905720eb7..9c905399a23 100644 --- a/drivers/media/common/saa7146_hlp.c +++ b/drivers/media/common/saa7146_hlp.c | |||
@@ -312,7 +312,7 @@ static int sort_and_eliminate(u32* values, int* count) | |||
312 | return -EINVAL; | 312 | return -EINVAL; |
313 | } | 313 | } |
314 | 314 | ||
315 | /* bubble sort the first ´count´ items of the array ´values´ */ | 315 | /* bubble sort the first @count items of the array @values */ |
316 | for( top = *count; top > 0; top--) { | 316 | for( top = *count; top > 0; top--) { |
317 | for( low = 0, high = 1; high < top; low++, high++) { | 317 | for( low = 0, high = 1; high < top; low++, high++) { |
318 | if( values[low] > values[high] ) { | 318 | if( values[low] > values[high] ) { |
diff --git a/drivers/media/dvb/bt8xx/bt878.c b/drivers/media/dvb/bt8xx/bt878.c index eca602d9b3d..85e36a1d6d7 100644 --- a/drivers/media/dvb/bt8xx/bt878.c +++ b/drivers/media/dvb/bt8xx/bt878.c | |||
@@ -280,7 +280,7 @@ static irqreturn_t bt878_irq(int irq, void *dev_id) | |||
280 | if (!(astat = (stat & mask))) | 280 | if (!(astat = (stat & mask))) |
281 | return IRQ_NONE; /* this interrupt is not for me */ | 281 | return IRQ_NONE; /* this interrupt is not for me */ |
282 | /* dprintk("bt878(%d) debug: irq count %d, stat 0x%8.8x, mask 0x%8.8x\n",bt->nr,count,stat,mask); */ | 282 | /* dprintk("bt878(%d) debug: irq count %d, stat 0x%8.8x, mask 0x%8.8x\n",bt->nr,count,stat,mask); */ |
283 | btwrite(astat, BT878_AINT_STAT); /* try to clear interupt condition */ | 283 | btwrite(astat, BT878_AINT_STAT); /* try to clear interrupt condition */ |
284 | 284 | ||
285 | 285 | ||
286 | if (astat & (BT878_ASCERR | BT878_AOCERR)) { | 286 | if (astat & (BT878_ASCERR | BT878_AOCERR)) { |
diff --git a/drivers/media/dvb/cinergyT2/cinergyT2.c b/drivers/media/dvb/cinergyT2/cinergyT2.c index 5a12b567955..a05e5c18228 100644 --- a/drivers/media/dvb/cinergyT2/cinergyT2.c +++ b/drivers/media/dvb/cinergyT2/cinergyT2.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * TerraTec Cinergy T²/qanu USB2 DVB-T adapter. | 2 | * TerraTec Cinergy T²/qanu USB2 DVB-T adapter. |
3 | * | 3 | * |
4 | * Copyright (C) 2004 Daniel Mack <daniel@qanu.de> and | 4 | * Copyright (C) 2004 Daniel Mack <daniel@qanu.de> and |
5 | * Holger Waechtler <holger@qanu.de> | 5 | * Holger Waechtler <holger@qanu.de> |
@@ -820,7 +820,7 @@ static int cinergyt2_register_rc(struct cinergyt2 *cinergyt2) | |||
820 | 820 | ||
821 | input_dev->name = DRIVER_NAME " remote control"; | 821 | input_dev->name = DRIVER_NAME " remote control"; |
822 | input_dev->phys = cinergyt2->phys; | 822 | input_dev->phys = cinergyt2->phys; |
823 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 823 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
824 | for (i = 0; i < ARRAY_SIZE(rc_keys); i += 3) | 824 | for (i = 0; i < ARRAY_SIZE(rc_keys); i += 3) |
825 | set_bit(rc_keys[i + 2], input_dev->keybit); | 825 | set_bit(rc_keys[i + 2], input_dev->keybit); |
826 | input_dev->keycodesize = 0; | 826 | input_dev->keycodesize = 0; |
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index b203640ef1c..445f0266557 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c | |||
@@ -527,7 +527,8 @@ static int dvb_frontend_thread(void *data) | |||
527 | up(&fepriv->sem); /* is locked when we enter the thread... */ | 527 | up(&fepriv->sem); /* is locked when we enter the thread... */ |
528 | restart: | 528 | restart: |
529 | timeout = wait_event_interruptible_timeout(fepriv->wait_queue, | 529 | timeout = wait_event_interruptible_timeout(fepriv->wait_queue, |
530 | dvb_frontend_should_wakeup(fe) || kthread_should_stop(), | 530 | dvb_frontend_should_wakeup(fe) || kthread_should_stop() |
531 | || freezing(current), | ||
531 | fepriv->delay); | 532 | fepriv->delay); |
532 | 533 | ||
533 | if (kthread_should_stop() || dvb_frontend_is_exiting(fe)) { | 534 | if (kthread_should_stop() || dvb_frontend_is_exiting(fe)) { |
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-remote.c b/drivers/media/dvb/dvb-usb/dvb-usb-remote.c index 7b9f35bfb4f..c0c2c22ddd8 100644 --- a/drivers/media/dvb/dvb-usb/dvb-usb-remote.c +++ b/drivers/media/dvb/dvb-usb/dvb-usb-remote.c | |||
@@ -106,7 +106,7 @@ int dvb_usb_remote_init(struct dvb_usb_device *d) | |||
106 | if (!input_dev) | 106 | if (!input_dev) |
107 | return -ENOMEM; | 107 | return -ENOMEM; |
108 | 108 | ||
109 | input_dev->evbit[0] = BIT(EV_KEY); | 109 | input_dev->evbit[0] = BIT_MASK(EV_KEY); |
110 | input_dev->name = "IR-receiver inside an USB DVB receiver"; | 110 | input_dev->name = "IR-receiver inside an USB DVB receiver"; |
111 | input_dev->phys = d->rc_phys; | 111 | input_dev->phys = d->rc_phys; |
112 | usb_to_input_id(d->udev, &input_dev->id); | 112 | usb_to_input_id(d->udev, &input_dev->id); |
diff --git a/drivers/media/dvb/ttpci/av7110_ir.c b/drivers/media/dvb/ttpci/av7110_ir.c index 5d19c402dad..a283e1de83f 100644 --- a/drivers/media/dvb/ttpci/av7110_ir.c +++ b/drivers/media/dvb/ttpci/av7110_ir.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include <linux/module.h> | 27 | #include <linux/module.h> |
28 | #include <linux/proc_fs.h> | 28 | #include <linux/proc_fs.h> |
29 | #include <linux/kernel.h> | 29 | #include <linux/kernel.h> |
30 | #include <asm/bitops.h> | 30 | #include <linux/bitops.h> |
31 | 31 | ||
32 | #include "av7110.h" | 32 | #include "av7110.h" |
33 | #include "av7110_hw.h" | 33 | #include "av7110_hw.h" |
diff --git a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c index 288e79f2cb0..7902ae1d9a1 100644 --- a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c +++ b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c | |||
@@ -128,7 +128,7 @@ struct ttusb { | |||
128 | struct dvb_frontend* fe; | 128 | struct dvb_frontend* fe; |
129 | }; | 129 | }; |
130 | 130 | ||
131 | /* ugly workaround ... don't know why it's neccessary to read */ | 131 | /* ugly workaround ... don't know why it's necessary to read */ |
132 | /* all result codes. */ | 132 | /* all result codes. */ |
133 | 133 | ||
134 | #define DEBUG 0 | 134 | #define DEBUG 0 |
diff --git a/drivers/media/dvb/ttusb-dec/ttusb_dec.c b/drivers/media/dvb/ttusb-dec/ttusb_dec.c index 5e691fd7990..1ec981d98b9 100644 --- a/drivers/media/dvb/ttusb-dec/ttusb_dec.c +++ b/drivers/media/dvb/ttusb-dec/ttusb_dec.c | |||
@@ -1198,7 +1198,7 @@ static int ttusb_init_rc( struct ttusb_dec *dec) | |||
1198 | 1198 | ||
1199 | input_dev->name = "ttusb_dec remote control"; | 1199 | input_dev->name = "ttusb_dec remote control"; |
1200 | input_dev->phys = dec->rc_phys; | 1200 | input_dev->phys = dec->rc_phys; |
1201 | input_dev->evbit[0] = BIT(EV_KEY); | 1201 | input_dev->evbit[0] = BIT_MASK(EV_KEY); |
1202 | input_dev->keycodesize = sizeof(u16); | 1202 | input_dev->keycodesize = sizeof(u16); |
1203 | input_dev->keycodemax = 0x1a; | 1203 | input_dev->keycodemax = 0x1a; |
1204 | input_dev->keycode = rc_keys; | 1204 | input_dev->keycode = rc_keys; |
diff --git a/drivers/media/video/bt8xx/bttv-cards.c b/drivers/media/video/bt8xx/bttv-cards.c index dd6a7d68b07..3abd9fa54d2 100644 --- a/drivers/media/video/bt8xx/bttv-cards.c +++ b/drivers/media/video/bt8xx/bttv-cards.c | |||
@@ -1259,7 +1259,7 @@ struct tvcard bttv_tvcards[] = { | |||
1259 | .has_radio = 1, | 1259 | .has_radio = 1, |
1260 | }, | 1260 | }, |
1261 | [BTTV_BOARD_LIFETEC_9415] = { | 1261 | [BTTV_BOARD_LIFETEC_9415] = { |
1262 | /* Tim Röstermundt <rosterm@uni-muenster.de> | 1262 | /* Tim Röstermundt <rosterm@uni-muenster.de> |
1263 | in de.comp.os.unix.linux.hardware: | 1263 | in de.comp.os.unix.linux.hardware: |
1264 | options bttv card=0 pll=1 radio=1 gpiomask=0x18e0 | 1264 | options bttv card=0 pll=1 radio=1 gpiomask=0x18e0 |
1265 | gpiomux =0x44c71f,0x44d71f,0,0x44d71f,0x44dfff | 1265 | gpiomux =0x44c71f,0x44d71f,0,0x44d71f,0x44dfff |
@@ -2824,7 +2824,7 @@ struct tvcard bttv_tvcards[] = { | |||
2824 | }, | 2824 | }, |
2825 | /* ---- card 0x8b ---------------------------------- */ | 2825 | /* ---- card 0x8b ---------------------------------- */ |
2826 | [BTTV_BOARD_PV_M4900] = { | 2826 | [BTTV_BOARD_PV_M4900] = { |
2827 | /* Sérgio Fortier <sergiofortier@yahoo.com.br> */ | 2827 | /* Sérgio Fortier <sergiofortier@yahoo.com.br> */ |
2828 | .name = "Prolink PixelView PlayTV MPEG2 PV-M4900", | 2828 | .name = "Prolink PixelView PlayTV MPEG2 PV-M4900", |
2829 | .video_inputs = 3, | 2829 | .video_inputs = 3, |
2830 | .audio_inputs = 1, | 2830 | .audio_inputs = 1, |
@@ -4709,18 +4709,18 @@ adtvk503_audio(struct bttv *btv, struct video_audio *v, int set) | |||
4709 | * | 4709 | * |
4710 | * The board hardwire Y0 (xpoint) to MUX1 and MUXOUT to Yin. | 4710 | * The board hardwire Y0 (xpoint) to MUX1 and MUXOUT to Yin. |
4711 | * GPIO pins are wired as: | 4711 | * GPIO pins are wired as: |
4712 | * GPIO[0:3] - AX[0:3] (xpoint) - P1[0:3] (microcontroler) | 4712 | * GPIO[0:3] - AX[0:3] (xpoint) - P1[0:3] (microcontroller) |
4713 | * GPIO[4:6] - AY[0:2] (xpoint) - P1[4:6] (microcontroler) | 4713 | * GPIO[4:6] - AY[0:2] (xpoint) - P1[4:6] (microcontroller) |
4714 | * GPIO[7] - DATA (xpoint) - P1[7] (microcontroler) | 4714 | * GPIO[7] - DATA (xpoint) - P1[7] (microcontroller) |
4715 | * GPIO[8] - - P3[5] (microcontroler) | 4715 | * GPIO[8] - - P3[5] (microcontroller) |
4716 | * GPIO[9] - RESET (xpoint) - P3[6] (microcontroler) | 4716 | * GPIO[9] - RESET (xpoint) - P3[6] (microcontroller) |
4717 | * GPIO[10] - STROBE (xpoint) - P3[7] (microcontroler) | 4717 | * GPIO[10] - STROBE (xpoint) - P3[7] (microcontroller) |
4718 | * GPINTR - - P3[4] (microcontroler) | 4718 | * GPINTR - - P3[4] (microcontroller) |
4719 | * | 4719 | * |
4720 | * The microcontroler is a 80C32 like. It should be possible to change xpoint | 4720 | * The microcontroller is a 80C32 like. It should be possible to change xpoint |
4721 | * configuration either directly (as we are doing) or using the microcontroler | 4721 | * configuration either directly (as we are doing) or using the microcontroller |
4722 | * which is also wired to I2C interface. I have no further info on the | 4722 | * which is also wired to I2C interface. I have no further info on the |
4723 | * microcontroler features, one would need to disassembly the firmware. | 4723 | * microcontroller features, one would need to disassembly the firmware. |
4724 | * note: the vendor refused to give any information on this product, all | 4724 | * note: the vendor refused to give any information on this product, all |
4725 | * that stuff was found using a multimeter! :) | 4725 | * that stuff was found using a multimeter! :) |
4726 | */ | 4726 | */ |
@@ -4788,7 +4788,7 @@ static void tibetCS16_init(struct bttv *btv) | |||
4788 | * The analog switch is controlled by the "master", but the detection order | 4788 | * The analog switch is controlled by the "master", but the detection order |
4789 | * of the four BT878A chips is in an order which I just don't understand. | 4789 | * of the four BT878A chips is in an order which I just don't understand. |
4790 | * The "master" is actually the second controller to be detected. The | 4790 | * The "master" is actually the second controller to be detected. The |
4791 | * logic on the board uses logical numbers for the 4 controlers, but | 4791 | * logic on the board uses logical numbers for the 4 controllers, but |
4792 | * those numbers are different from the detection sequence. When working | 4792 | * those numbers are different from the detection sequence. When working |
4793 | * with the analog switch, we need to "map" from the detection sequence | 4793 | * with the analog switch, we need to "map" from the detection sequence |
4794 | * over to the board's logical controller number. This mapping sequence | 4794 | * over to the board's logical controller number. This mapping sequence |
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c index b8d5327c438..e467682aabd 100644 --- a/drivers/media/video/em28xx/em28xx-video.c +++ b/drivers/media/video/em28xx/em28xx-video.c | |||
@@ -907,7 +907,7 @@ static int em28xx_set_fmt(struct em28xx *dev, unsigned int cmd, struct v4l2_form | |||
907 | 907 | ||
908 | /* stop io in case it is already in progress */ | 908 | /* stop io in case it is already in progress */ |
909 | if (dev->stream == STREAM_ON) { | 909 | if (dev->stream == STREAM_ON) { |
910 | em28xx_videodbg("VIDIOC_SET_FMT: interupting stream\n"); | 910 | em28xx_videodbg("VIDIOC_SET_FMT: interrupting stream\n"); |
911 | if ((ret = em28xx_stream_interrupt(dev))) | 911 | if ((ret = em28xx_stream_interrupt(dev))) |
912 | return ret; | 912 | return ret; |
913 | } | 913 | } |
diff --git a/drivers/media/video/meye.c b/drivers/media/video/meye.c index 7533fc20331..69283926a8d 100644 --- a/drivers/media/video/meye.c +++ b/drivers/media/video/meye.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2001-2004 Stelian Pop <stelian@popies.net> | 4 | * Copyright (C) 2001-2004 Stelian Pop <stelian@popies.net> |
5 | * | 5 | * |
6 | * Copyright (C) 2001-2002 Alcôve <www.alcove.com> | 6 | * Copyright (C) 2001-2002 Alcôve <www.alcove.com> |
7 | * | 7 | * |
8 | * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com> | 8 | * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com> |
9 | * | 9 | * |
diff --git a/drivers/media/video/meye.h b/drivers/media/video/meye.h index 323d0074120..d535748df44 100644 --- a/drivers/media/video/meye.h +++ b/drivers/media/video/meye.h | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2001-2004 Stelian Pop <stelian@popies.net> | 4 | * Copyright (C) 2001-2004 Stelian Pop <stelian@popies.net> |
5 | * | 5 | * |
6 | * Copyright (C) 2001-2002 Alcôve <www.alcove.com> | 6 | * Copyright (C) 2001-2002 Alcôve <www.alcove.com> |
7 | * | 7 | * |
8 | * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com> | 8 | * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com> |
9 | * | 9 | * |
diff --git a/drivers/media/video/saa5246a.c b/drivers/media/video/saa5246a.c index e20aa3612a7..ad0232935df 100644 --- a/drivers/media/video/saa5246a.c +++ b/drivers/media/video/saa5246a.c | |||
@@ -196,10 +196,10 @@ static int i2c_senddata(struct saa5246a_device *t, ...) | |||
196 | return i2c_sendbuf(t, buf[0], ct-1, buf+1); | 196 | return i2c_sendbuf(t, buf[0], ct-1, buf+1); |
197 | } | 197 | } |
198 | 198 | ||
199 | /* Get count number of bytes from I²C-device at address adr, store them in buf. | 199 | /* Get count number of bytes from I²C-device at address adr, store them in buf. |
200 | * Start & stop handshaking is done by this routine, ack will be sent after the | 200 | * Start & stop handshaking is done by this routine, ack will be sent after the |
201 | * last byte to inhibit further sending of data. If uaccess is 'true', data is | 201 | * last byte to inhibit further sending of data. If uaccess is 'true', data is |
202 | * written to user-space with put_user. Returns -1 if I²C-device didn't send | 202 | * written to user-space with put_user. Returns -1 if I²C-device didn't send |
203 | * acknowledge, 0 otherwise | 203 | * acknowledge, 0 otherwise |
204 | */ | 204 | */ |
205 | static int i2c_getdata(struct saa5246a_device *t, int count, u8 *buf) | 205 | static int i2c_getdata(struct saa5246a_device *t, int count, u8 *buf) |
diff --git a/drivers/media/video/saa5249.c b/drivers/media/video/saa5249.c index 17f1e2e9a66..94bb59a32b1 100644 --- a/drivers/media/video/saa5249.c +++ b/drivers/media/video/saa5249.c | |||
@@ -291,10 +291,10 @@ static int i2c_senddata(struct saa5249_device *t, ...) | |||
291 | return i2c_sendbuf(t, buf[0], ct-1, buf+1); | 291 | return i2c_sendbuf(t, buf[0], ct-1, buf+1); |
292 | } | 292 | } |
293 | 293 | ||
294 | /* Get count number of bytes from I²C-device at address adr, store them in buf. Start & stop | 294 | /* Get count number of bytes from I²C-device at address adr, store them in buf. Start & stop |
295 | * handshaking is done by this routine, ack will be sent after the last byte to inhibit further | 295 | * handshaking is done by this routine, ack will be sent after the last byte to inhibit further |
296 | * sending of data. If uaccess is 'true', data is written to user-space with put_user. | 296 | * sending of data. If uaccess is 'true', data is written to user-space with put_user. |
297 | * Returns -1 if I²C-device didn't send acknowledge, 0 otherwise | 297 | * Returns -1 if I²C-device didn't send acknowledge, 0 otherwise |
298 | */ | 298 | */ |
299 | 299 | ||
300 | static int i2c_getdata(struct saa5249_device *t, int count, u8 *buf) | 300 | static int i2c_getdata(struct saa5249_device *t, int count, u8 *buf) |
diff --git a/drivers/media/video/usbvideo/konicawc.c b/drivers/media/video/usbvideo/konicawc.c index 491505d6fde..3e93f805877 100644 --- a/drivers/media/video/usbvideo/konicawc.c +++ b/drivers/media/video/usbvideo/konicawc.c | |||
@@ -238,8 +238,8 @@ static void konicawc_register_input(struct konicawc *cam, struct usb_device *dev | |||
238 | usb_to_input_id(dev, &input_dev->id); | 238 | usb_to_input_id(dev, &input_dev->id); |
239 | input_dev->dev.parent = &dev->dev; | 239 | input_dev->dev.parent = &dev->dev; |
240 | 240 | ||
241 | input_dev->evbit[0] = BIT(EV_KEY); | 241 | input_dev->evbit[0] = BIT_MASK(EV_KEY); |
242 | input_dev->keybit[LONG(BTN_0)] = BIT(BTN_0); | 242 | input_dev->keybit[BIT_WORD(BTN_0)] = BIT_MASK(BTN_0); |
243 | 243 | ||
244 | input_dev->private = cam; | 244 | input_dev->private = cam; |
245 | 245 | ||
diff --git a/drivers/media/video/usbvideo/quickcam_messenger.c b/drivers/media/video/usbvideo/quickcam_messenger.c index dd1a6d6bbc9..d847273eeba 100644 --- a/drivers/media/video/usbvideo/quickcam_messenger.c +++ b/drivers/media/video/usbvideo/quickcam_messenger.c | |||
@@ -102,8 +102,8 @@ static void qcm_register_input(struct qcm *cam, struct usb_device *dev) | |||
102 | usb_to_input_id(dev, &input_dev->id); | 102 | usb_to_input_id(dev, &input_dev->id); |
103 | input_dev->dev.parent = &dev->dev; | 103 | input_dev->dev.parent = &dev->dev; |
104 | 104 | ||
105 | input_dev->evbit[0] = BIT(EV_KEY); | 105 | input_dev->evbit[0] = BIT_MASK(EV_KEY); |
106 | input_dev->keybit[LONG(BTN_0)] = BIT(BTN_0); | 106 | input_dev->keybit[BIT_WORD(BTN_0)] = BIT_MASK(BTN_0); |
107 | 107 | ||
108 | input_dev->private = cam; | 108 | input_dev->private = cam; |
109 | 109 | ||
diff --git a/drivers/media/video/usbvideo/vicam.c b/drivers/media/video/usbvideo/vicam.c index ff555129c82..db3c9e3deb2 100644 --- a/drivers/media/video/usbvideo/vicam.c +++ b/drivers/media/video/usbvideo/vicam.c | |||
@@ -955,7 +955,7 @@ read_frame(struct vicam_camera *cam, int framenum) | |||
955 | request[7] = realShutter >> 8; | 955 | request[7] = realShutter >> 8; |
956 | } | 956 | } |
957 | 957 | ||
958 | // Per John Markus Bjørndalen, byte at index 8 causes problems if it isn't 0 | 958 | // Per John Markus Bjørndalen, byte at index 8 causes problems if it isn't 0 |
959 | request[8] = 0; | 959 | request[8] = 0; |
960 | // bytes 9-15 do not seem to affect exposure or image quality | 960 | // bytes 9-15 do not seem to affect exposure or image quality |
961 | 961 | ||
diff --git a/drivers/media/video/v4l1-compat.c b/drivers/media/video/v4l1-compat.c index 9eac65f34bf..dcf22a3b672 100644 --- a/drivers/media/video/v4l1-compat.c +++ b/drivers/media/video/v4l1-compat.c | |||
@@ -144,7 +144,7 @@ const static unsigned int palette2pixelformat[] = { | |||
144 | [VIDEO_PALETTE_YUV422P] = V4L2_PIX_FMT_YUV422P, | 144 | [VIDEO_PALETTE_YUV422P] = V4L2_PIX_FMT_YUV422P, |
145 | }; | 145 | }; |
146 | 146 | ||
147 | static unsigned int __attribute_pure__ | 147 | static unsigned int __pure |
148 | palette_to_pixelformat(unsigned int palette) | 148 | palette_to_pixelformat(unsigned int palette) |
149 | { | 149 | { |
150 | if (palette < ARRAY_SIZE(palette2pixelformat)) | 150 | if (palette < ARRAY_SIZE(palette2pixelformat)) |
diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c index c3440b280d2..321249240d0 100644 --- a/drivers/media/video/v4l2-common.c +++ b/drivers/media/video/v4l2-common.c | |||
@@ -37,7 +37,7 @@ | |||
37 | * Video4linux 1/2 integration by Justin Schoeman | 37 | * Video4linux 1/2 integration by Justin Schoeman |
38 | * <justin@suntiger.ee.up.ac.za> | 38 | * <justin@suntiger.ee.up.ac.za> |
39 | * 2.4 PROCFS support ported from 2.4 kernels by | 39 | * 2.4 PROCFS support ported from 2.4 kernels by |
40 | * Iñaki García Etxebarria <garetxe@euskalnet.net> | 40 | * Iñaki GarcÃa Etxebarria <garetxe@euskalnet.net> |
41 | * Makefile fix by "W. Michael Petullo" <mike@flyn.org> | 41 | * Makefile fix by "W. Michael Petullo" <mike@flyn.org> |
42 | * 2.4 devfs support ported from 2.4 kernels by | 42 | * 2.4 devfs support ported from 2.4 kernels by |
43 | * Dan Merillat <dan@merillat.org> | 43 | * Dan Merillat <dan@merillat.org> |
diff --git a/drivers/media/video/zoran_driver.c b/drivers/media/video/zoran_driver.c index 1c14fa2bd41..419e5af7853 100644 --- a/drivers/media/video/zoran_driver.c +++ b/drivers/media/video/zoran_driver.c | |||
@@ -1285,7 +1285,7 @@ zoran_open (struct inode *inode, | |||
1285 | } | 1285 | } |
1286 | 1286 | ||
1287 | dprintk(1, KERN_INFO "%s: zoran_open(%s, pid=[%d]), users(-)=%d\n", | 1287 | dprintk(1, KERN_INFO "%s: zoran_open(%s, pid=[%d]), users(-)=%d\n", |
1288 | ZR_DEVNAME(zr), current->comm, current->pid, zr->user); | 1288 | ZR_DEVNAME(zr), current->comm, task_pid_nr(current), zr->user); |
1289 | 1289 | ||
1290 | /* now, create the open()-specific file_ops struct */ | 1290 | /* now, create the open()-specific file_ops struct */ |
1291 | fh = kzalloc(sizeof(struct zoran_fh), GFP_KERNEL); | 1291 | fh = kzalloc(sizeof(struct zoran_fh), GFP_KERNEL); |
@@ -1358,7 +1358,7 @@ zoran_close (struct inode *inode, | |||
1358 | struct zoran *zr = fh->zr; | 1358 | struct zoran *zr = fh->zr; |
1359 | 1359 | ||
1360 | dprintk(1, KERN_INFO "%s: zoran_close(%s, pid=[%d]), users(+)=%d\n", | 1360 | dprintk(1, KERN_INFO "%s: zoran_close(%s, pid=[%d]), users(+)=%d\n", |
1361 | ZR_DEVNAME(zr), current->comm, current->pid, zr->user); | 1361 | ZR_DEVNAME(zr), current->comm, task_pid_nr(current), zr->user); |
1362 | 1362 | ||
1363 | /* kernel locks (fs/device.c), so don't do that ourselves | 1363 | /* kernel locks (fs/device.c), so don't do that ourselves |
1364 | * (prevents deadlocks) */ | 1364 | * (prevents deadlocks) */ |
diff --git a/drivers/message/i2o/README b/drivers/message/i2o/README index a81f851f7b5..911fc3021e3 100644 --- a/drivers/message/i2o/README +++ b/drivers/message/i2o/README | |||
@@ -30,13 +30,13 @@ Juha Sievanen, University of Helsinki Finland | |||
30 | Bug fixes | 30 | Bug fixes |
31 | Core code extensions | 31 | Core code extensions |
32 | 32 | ||
33 | Auvo Häkkinen, University of Helsinki Finland | 33 | Auvo Häkkinen, University of Helsinki Finland |
34 | LAN OSM code | 34 | LAN OSM code |
35 | /Proc interface to LAN class | 35 | /Proc interface to LAN class |
36 | Bug fixes | 36 | Bug fixes |
37 | Core code extensions | 37 | Core code extensions |
38 | 38 | ||
39 | Taneli Vähäkangas, University of Helsinki Finland | 39 | Taneli Vähäkangas, University of Helsinki Finland |
40 | Fixes to i2o_config | 40 | Fixes to i2o_config |
41 | 41 | ||
42 | CREDITS | 42 | CREDITS |
diff --git a/drivers/message/i2o/exec-osm.c b/drivers/message/i2o/exec-osm.c index ce8f1a34ed2..6cbcc21de51 100644 --- a/drivers/message/i2o/exec-osm.c +++ b/drivers/message/i2o/exec-osm.c | |||
@@ -15,8 +15,8 @@ | |||
15 | * | 15 | * |
16 | * Fixes/additions: | 16 | * Fixes/additions: |
17 | * Philipp Rumpf | 17 | * Philipp Rumpf |
18 | * Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI> | 18 | * Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI> |
19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> | 19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> |
20 | * Deepak Saxena <deepak@plexity.net> | 20 | * Deepak Saxena <deepak@plexity.net> |
21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> | 21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> |
22 | * Alan Cox <alan@redhat.com>: | 22 | * Alan Cox <alan@redhat.com>: |
diff --git a/drivers/message/i2o/i2o_config.c b/drivers/message/i2o/i2o_config.c index 84e046e94f5..c0fb77dc19b 100644 --- a/drivers/message/i2o/i2o_config.c +++ b/drivers/message/i2o/i2o_config.c | |||
@@ -10,12 +10,12 @@ | |||
10 | * Added basic ioctl() support | 10 | * Added basic ioctl() support |
11 | * Deepak Saxena (06/07/1999): | 11 | * Deepak Saxena (06/07/1999): |
12 | * Added software download ioctl (still testing) | 12 | * Added software download ioctl (still testing) |
13 | * Auvo Häkkinen (09/10/1999): | 13 | * Auvo Häkkinen (09/10/1999): |
14 | * Changes to i2o_cfg_reply(), ioctl_parms() | 14 | * Changes to i2o_cfg_reply(), ioctl_parms() |
15 | * Added ioct_validate() | 15 | * Added ioct_validate() |
16 | * Taneli Vähäkangas (09/30/1999): | 16 | * Taneli Vähäkangas (09/30/1999): |
17 | * Fixed ioctl_swdl() | 17 | * Fixed ioctl_swdl() |
18 | * Taneli Vähäkangas (10/04/1999): | 18 | * Taneli Vähäkangas (10/04/1999): |
19 | * Changed ioctl_swdl(), implemented ioctl_swul() and ioctl_swdel() | 19 | * Changed ioctl_swdl(), implemented ioctl_swul() and ioctl_swdel() |
20 | * Deepak Saxena (11/18/1999): | 20 | * Deepak Saxena (11/18/1999): |
21 | * Added event managmenet support | 21 | * Added event managmenet support |
diff --git a/drivers/message/i2o/i2o_proc.c b/drivers/message/i2o/i2o_proc.c index 06892ac2286..6fdd072201f 100644 --- a/drivers/message/i2o/i2o_proc.c +++ b/drivers/message/i2o/i2o_proc.c | |||
@@ -19,8 +19,8 @@ | |||
19 | * | 19 | * |
20 | * | 20 | * |
21 | * Fixes/additions: | 21 | * Fixes/additions: |
22 | * Juha Sievänen (Juha.Sievanen@cs.Helsinki.FI), | 22 | * Juha Sievänen (Juha.Sievanen@cs.Helsinki.FI), |
23 | * Auvo Häkkinen (Auvo.Hakkinen@cs.Helsinki.FI) | 23 | * Auvo Häkkinen (Auvo.Hakkinen@cs.Helsinki.FI) |
24 | * University of Helsinki, Department of Computer Science | 24 | * University of Helsinki, Department of Computer Science |
25 | * LAN entries | 25 | * LAN entries |
26 | * Markus Lidel <Markus.Lidel@shadowconnect.com> | 26 | * Markus Lidel <Markus.Lidel@shadowconnect.com> |
diff --git a/drivers/message/i2o/iop.c b/drivers/message/i2o/iop.c index a1ec16a075c..7814a06ae97 100644 --- a/drivers/message/i2o/iop.c +++ b/drivers/message/i2o/iop.c | |||
@@ -15,8 +15,8 @@ | |||
15 | * | 15 | * |
16 | * Fixes/additions: | 16 | * Fixes/additions: |
17 | * Philipp Rumpf | 17 | * Philipp Rumpf |
18 | * Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI> | 18 | * Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI> |
19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> | 19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> |
20 | * Deepak Saxena <deepak@plexity.net> | 20 | * Deepak Saxena <deepak@plexity.net> |
21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> | 21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> |
22 | * Alan Cox <alan@redhat.com>: | 22 | * Alan Cox <alan@redhat.com>: |
diff --git a/drivers/message/i2o/pci.c b/drivers/message/i2o/pci.c index 3661e6e065d..685a89547a5 100644 --- a/drivers/message/i2o/pci.c +++ b/drivers/message/i2o/pci.c | |||
@@ -15,8 +15,8 @@ | |||
15 | * | 15 | * |
16 | * Fixes/additions: | 16 | * Fixes/additions: |
17 | * Philipp Rumpf | 17 | * Philipp Rumpf |
18 | * Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI> | 18 | * Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI> |
19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> | 19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> |
20 | * Deepak Saxena <deepak@plexity.net> | 20 | * Deepak Saxena <deepak@plexity.net> |
21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> | 21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> |
22 | * Alan Cox <alan@redhat.com>: | 22 | * Alan Cox <alan@redhat.com>: |
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index a20a51efe11..25716193a53 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig | |||
@@ -10,8 +10,8 @@ config MFD_SM501 | |||
10 | ---help--- | 10 | ---help--- |
11 | This is the core driver for the Silicon Motion SM501 multimedia | 11 | This is the core driver for the Silicon Motion SM501 multimedia |
12 | companion chip. This device is a multifunction device which may | 12 | companion chip. This device is a multifunction device which may |
13 | provide numerous interfaces including USB host controller USB gadget, | 13 | provide numerous interfaces including USB host controller, USB gadget, |
14 | Asyncronous Serial ports, Audio functions and a dual display video | 14 | asynchronous serial ports, audio functions, and a dual display video |
15 | interface. The device may be connected by PCI or local bus with | 15 | interface. The device may be connected by PCI or local bus with |
16 | varying functions enabled. | 16 | varying functions enabled. |
17 | 17 | ||
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index 346c44eff95..b5e67c0ff43 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig | |||
@@ -111,6 +111,21 @@ config ASUS_LAPTOP | |||
111 | 111 | ||
112 | If you have an ACPI-compatible ASUS laptop, say Y or M here. | 112 | If you have an ACPI-compatible ASUS laptop, say Y or M here. |
113 | 113 | ||
114 | config FUJITSU_LAPTOP | ||
115 | tristate "Fujitsu Laptop Extras" | ||
116 | depends on X86 | ||
117 | depends on ACPI | ||
118 | depends on BACKLIGHT_CLASS_DEVICE | ||
119 | ---help--- | ||
120 | This is a driver for laptops built by Fujitsu: | ||
121 | |||
122 | * P2xxx/P5xxx/S6xxx/S7xxx series Lifebooks | ||
123 | * Possibly other Fujitsu laptop models | ||
124 | |||
125 | It adds support for LCD brightness control. | ||
126 | |||
127 | If you have a Fujitsu laptop, say Y or M here. | ||
128 | |||
114 | config MSI_LAPTOP | 129 | config MSI_LAPTOP |
115 | tristate "MSI Laptop Extras" | 130 | tristate "MSI Laptop Extras" |
116 | depends on X86 | 131 | depends on X86 |
@@ -134,6 +149,7 @@ config SONY_LAPTOP | |||
134 | tristate "Sony Laptop Extras" | 149 | tristate "Sony Laptop Extras" |
135 | depends on X86 && ACPI | 150 | depends on X86 && ACPI |
136 | select BACKLIGHT_CLASS_DEVICE | 151 | select BACKLIGHT_CLASS_DEVICE |
152 | depends on INPUT | ||
137 | ---help--- | 153 | ---help--- |
138 | This mini-driver drives the SNC and SPIC devices present in the ACPI | 154 | This mini-driver drives the SNC and SPIC devices present in the ACPI |
139 | BIOS of the Sony Vaio laptops. | 155 | BIOS of the Sony Vaio laptops. |
@@ -156,6 +172,7 @@ config THINKPAD_ACPI | |||
156 | select BACKLIGHT_CLASS_DEVICE | 172 | select BACKLIGHT_CLASS_DEVICE |
157 | select HWMON | 173 | select HWMON |
158 | select NVRAM | 174 | select NVRAM |
175 | depends on INPUT | ||
159 | ---help--- | 176 | ---help--- |
160 | This is a driver for the IBM and Lenovo ThinkPad laptops. It adds | 177 | This is a driver for the IBM and Lenovo ThinkPad laptops. It adds |
161 | support for Fn-Fx key combinations, Bluetooth control, video | 178 | support for Fn-Fx key combinations, Bluetooth control, video |
@@ -163,7 +180,7 @@ config THINKPAD_ACPI | |||
163 | For more information about this driver see | 180 | For more information about this driver see |
164 | <file:Documentation/thinkpad-acpi.txt> and <http://ibm-acpi.sf.net/> . | 181 | <file:Documentation/thinkpad-acpi.txt> and <http://ibm-acpi.sf.net/> . |
165 | 182 | ||
166 | This driver was formely known as ibm-acpi. | 183 | This driver was formerly known as ibm-acpi. |
167 | 184 | ||
168 | If you have an IBM or Lenovo ThinkPad laptop, say Y or M here. | 185 | If you have an IBM or Lenovo ThinkPad laptop, say Y or M here. |
169 | 186 | ||
@@ -197,7 +214,7 @@ config THINKPAD_ACPI_BAY | |||
197 | default y | 214 | default y |
198 | ---help--- | 215 | ---help--- |
199 | Allows the thinkpad_acpi driver to handle removable bays. It will | 216 | Allows the thinkpad_acpi driver to handle removable bays. It will |
200 | eletrically disable the device in the bay, and also generate | 217 | electrically disable the device in the bay, and also generate |
201 | notifications when the bay lever is ejected or inserted. | 218 | notifications when the bay lever is ejected or inserted. |
202 | 219 | ||
203 | If you are not sure, say Y here. | 220 | If you are not sure, say Y here. |
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index a24c61475c2..87f2685d728 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile | |||
@@ -15,4 +15,5 @@ obj-$(CONFIG_PHANTOM) += phantom.o | |||
15 | obj-$(CONFIG_SGI_IOC4) += ioc4.o | 15 | obj-$(CONFIG_SGI_IOC4) += ioc4.o |
16 | obj-$(CONFIG_SONY_LAPTOP) += sony-laptop.o | 16 | obj-$(CONFIG_SONY_LAPTOP) += sony-laptop.o |
17 | obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o | 17 | obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o |
18 | obj-$(CONFIG_FUJITSU_LAPTOP) += fujitsu-laptop.o | ||
18 | obj-$(CONFIG_EEPROM_93CX6) += eeprom_93cx6.o | 19 | obj-$(CONFIG_EEPROM_93CX6) += eeprom_93cx6.o |
diff --git a/drivers/misc/fujitsu-laptop.c b/drivers/misc/fujitsu-laptop.c new file mode 100644 index 00000000000..d366a6cc1fd --- /dev/null +++ b/drivers/misc/fujitsu-laptop.c | |||
@@ -0,0 +1,358 @@ | |||
1 | /*-*-linux-c-*-*/ | ||
2 | |||
3 | /* | ||
4 | Copyright (C) 2007 Jonathan Woithe <jwoithe@physics.adelaide.edu.au> | ||
5 | Based on earlier work: | ||
6 | Copyright (C) 2003 Shane Spencer <shane@bogomip.com> | ||
7 | Adrian Yee <brewt-fujitsu@brewt.org> | ||
8 | |||
9 | Templated from msi-laptop.c which is copyright by its respective authors. | ||
10 | |||
11 | This program is free software; you can redistribute it and/or modify | ||
12 | it under the terms of the GNU General Public License as published by | ||
13 | the Free Software Foundation; either version 2 of the License, or | ||
14 | (at your option) any later version. | ||
15 | |||
16 | This program is distributed in the hope that it will be useful, but | ||
17 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
19 | General Public License for more details. | ||
20 | |||
21 | You should have received a copy of the GNU General Public License | ||
22 | along with this program; if not, write to the Free Software | ||
23 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | ||
24 | 02110-1301, USA. | ||
25 | */ | ||
26 | |||
27 | /* | ||
28 | * fujitsu-laptop.c - Fujitsu laptop support, providing access to additional | ||
29 | * features made available on a range of Fujitsu laptops including the | ||
30 | * P2xxx/P5xxx/S6xxx/S7xxx series. | ||
31 | * | ||
32 | * This driver exports a few files in /sys/devices/platform/fujitsu-laptop/; | ||
33 | * others may be added at a later date. | ||
34 | * | ||
35 | * lcd_level - Screen brightness: contains a single integer in the | ||
36 | * range 0..7. (rw) | ||
37 | * | ||
38 | * In addition to these platform device attributes the driver | ||
39 | * registers itself in the Linux backlight control subsystem and is | ||
40 | * available to userspace under /sys/class/backlight/fujitsu-laptop/. | ||
41 | * | ||
42 | * This driver has been tested on a Fujitsu Lifebook S7020. It should | ||
43 | * work on most P-series and S-series Lifebooks, but YMMV. | ||
44 | */ | ||
45 | |||
46 | #include <linux/module.h> | ||
47 | #include <linux/kernel.h> | ||
48 | #include <linux/init.h> | ||
49 | #include <linux/acpi.h> | ||
50 | #include <linux/dmi.h> | ||
51 | #include <linux/backlight.h> | ||
52 | #include <linux/platform_device.h> | ||
53 | #include <linux/autoconf.h> | ||
54 | |||
55 | #define FUJITSU_DRIVER_VERSION "0.3" | ||
56 | |||
57 | #define FUJITSU_LCD_N_LEVELS 8 | ||
58 | |||
59 | #define ACPI_FUJITSU_CLASS "fujitsu" | ||
60 | #define ACPI_FUJITSU_HID "FUJ02B1" | ||
61 | #define ACPI_FUJITSU_DRIVER_NAME "Fujitsu laptop FUJ02B1 ACPI extras driver" | ||
62 | #define ACPI_FUJITSU_DEVICE_NAME "Fujitsu FUJ02B1" | ||
63 | |||
64 | struct fujitsu_t { | ||
65 | acpi_handle acpi_handle; | ||
66 | struct backlight_device *bl_device; | ||
67 | struct platform_device *pf_device; | ||
68 | |||
69 | unsigned long fuj02b1_state; | ||
70 | unsigned int brightness_changed; | ||
71 | unsigned int brightness_level; | ||
72 | }; | ||
73 | |||
74 | static struct fujitsu_t *fujitsu; | ||
75 | |||
76 | /* Hardware access */ | ||
77 | |||
78 | static int set_lcd_level(int level) | ||
79 | { | ||
80 | acpi_status status = AE_OK; | ||
81 | union acpi_object arg0 = { ACPI_TYPE_INTEGER }; | ||
82 | struct acpi_object_list arg_list = { 1, &arg0 }; | ||
83 | acpi_handle handle = NULL; | ||
84 | |||
85 | if (level < 0 || level >= FUJITSU_LCD_N_LEVELS) | ||
86 | return -EINVAL; | ||
87 | |||
88 | if (!fujitsu) | ||
89 | return -EINVAL; | ||
90 | |||
91 | status = acpi_get_handle(fujitsu->acpi_handle, "SBLL", &handle); | ||
92 | if (ACPI_FAILURE(status)) { | ||
93 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "SBLL not present\n")); | ||
94 | return -ENODEV; | ||
95 | } | ||
96 | |||
97 | arg0.integer.value = level; | ||
98 | |||
99 | status = acpi_evaluate_object(handle, NULL, &arg_list, NULL); | ||
100 | if (ACPI_FAILURE(status)) | ||
101 | return -ENODEV; | ||
102 | |||
103 | return 0; | ||
104 | } | ||
105 | |||
106 | static int get_lcd_level(void) | ||
107 | { | ||
108 | unsigned long state = 0; | ||
109 | acpi_status status = AE_OK; | ||
110 | |||
111 | // Get the Brightness | ||
112 | status = | ||
113 | acpi_evaluate_integer(fujitsu->acpi_handle, "GBLL", NULL, &state); | ||
114 | if (status < 0) | ||
115 | return status; | ||
116 | |||
117 | fujitsu->fuj02b1_state = state; | ||
118 | fujitsu->brightness_level = state & 0x0fffffff; | ||
119 | |||
120 | if (state & 0x80000000) | ||
121 | fujitsu->brightness_changed = 1; | ||
122 | else | ||
123 | fujitsu->brightness_changed = 0; | ||
124 | |||
125 | if (status < 0) | ||
126 | return status; | ||
127 | |||
128 | return fujitsu->brightness_level; | ||
129 | } | ||
130 | |||
131 | /* Backlight device stuff */ | ||
132 | |||
133 | static int bl_get_brightness(struct backlight_device *b) | ||
134 | { | ||
135 | return get_lcd_level(); | ||
136 | } | ||
137 | |||
138 | static int bl_update_status(struct backlight_device *b) | ||
139 | { | ||
140 | return set_lcd_level(b->props.brightness); | ||
141 | } | ||
142 | |||
143 | static struct backlight_ops fujitsubl_ops = { | ||
144 | .get_brightness = bl_get_brightness, | ||
145 | .update_status = bl_update_status, | ||
146 | }; | ||
147 | |||
148 | /* Platform device */ | ||
149 | |||
150 | static ssize_t show_lcd_level(struct device *dev, | ||
151 | struct device_attribute *attr, char *buf) | ||
152 | { | ||
153 | |||
154 | int ret; | ||
155 | |||
156 | ret = get_lcd_level(); | ||
157 | if (ret < 0) | ||
158 | return ret; | ||
159 | |||
160 | return sprintf(buf, "%i\n", ret); | ||
161 | } | ||
162 | |||
163 | static ssize_t store_lcd_level(struct device *dev, | ||
164 | struct device_attribute *attr, const char *buf, | ||
165 | size_t count) | ||
166 | { | ||
167 | |||
168 | int level, ret; | ||
169 | |||
170 | if (sscanf(buf, "%i", &level) != 1 | ||
171 | || (level < 0 || level >= FUJITSU_LCD_N_LEVELS)) | ||
172 | return -EINVAL; | ||
173 | |||
174 | ret = set_lcd_level(level); | ||
175 | if (ret < 0) | ||
176 | return ret; | ||
177 | |||
178 | return count; | ||
179 | } | ||
180 | |||
181 | static DEVICE_ATTR(lcd_level, 0644, show_lcd_level, store_lcd_level); | ||
182 | |||
183 | static struct attribute *fujitsupf_attributes[] = { | ||
184 | &dev_attr_lcd_level.attr, | ||
185 | NULL | ||
186 | }; | ||
187 | |||
188 | static struct attribute_group fujitsupf_attribute_group = { | ||
189 | .attrs = fujitsupf_attributes | ||
190 | }; | ||
191 | |||
192 | static struct platform_driver fujitsupf_driver = { | ||
193 | .driver = { | ||
194 | .name = "fujitsu-laptop", | ||
195 | .owner = THIS_MODULE, | ||
196 | } | ||
197 | }; | ||
198 | |||
199 | /* ACPI device */ | ||
200 | |||
201 | int acpi_fujitsu_add(struct acpi_device *device) | ||
202 | { | ||
203 | int result = 0; | ||
204 | int state = 0; | ||
205 | |||
206 | ACPI_FUNCTION_TRACE("acpi_fujitsu_add"); | ||
207 | |||
208 | if (!device) | ||
209 | return -EINVAL; | ||
210 | |||
211 | fujitsu->acpi_handle = device->handle; | ||
212 | sprintf(acpi_device_name(device), "%s", ACPI_FUJITSU_DEVICE_NAME); | ||
213 | sprintf(acpi_device_class(device), "%s", ACPI_FUJITSU_CLASS); | ||
214 | acpi_driver_data(device) = fujitsu; | ||
215 | |||
216 | result = acpi_bus_get_power(fujitsu->acpi_handle, &state); | ||
217 | if (result) { | ||
218 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | ||
219 | "Error reading power state\n")); | ||
220 | goto end; | ||
221 | } | ||
222 | |||
223 | printk(KERN_INFO PREFIX "%s [%s] (%s)\n", | ||
224 | acpi_device_name(device), acpi_device_bid(device), | ||
225 | !device->power.state ? "on" : "off"); | ||
226 | |||
227 | end: | ||
228 | |||
229 | return result; | ||
230 | } | ||
231 | |||
232 | int acpi_fujitsu_remove(struct acpi_device *device, int type) | ||
233 | { | ||
234 | ACPI_FUNCTION_TRACE("acpi_fujitsu_remove"); | ||
235 | |||
236 | if (!device || !acpi_driver_data(device)) | ||
237 | return -EINVAL; | ||
238 | fujitsu->acpi_handle = 0; | ||
239 | |||
240 | return 0; | ||
241 | } | ||
242 | |||
243 | static const struct acpi_device_id fujitsu_device_ids[] = { | ||
244 | {ACPI_FUJITSU_HID, 0}, | ||
245 | {"", 0}, | ||
246 | }; | ||
247 | |||
248 | static struct acpi_driver acpi_fujitsu_driver = { | ||
249 | .name = ACPI_FUJITSU_DRIVER_NAME, | ||
250 | .class = ACPI_FUJITSU_CLASS, | ||
251 | .ids = fujitsu_device_ids, | ||
252 | .ops = { | ||
253 | .add = acpi_fujitsu_add, | ||
254 | .remove = acpi_fujitsu_remove, | ||
255 | }, | ||
256 | }; | ||
257 | |||
258 | /* Initialization */ | ||
259 | |||
260 | static int __init fujitsu_init(void) | ||
261 | { | ||
262 | int ret, result; | ||
263 | |||
264 | if (acpi_disabled) | ||
265 | return -ENODEV; | ||
266 | |||
267 | fujitsu = kmalloc(sizeof(struct fujitsu_t), GFP_KERNEL); | ||
268 | if (!fujitsu) | ||
269 | return -ENOMEM; | ||
270 | memset(fujitsu, 0, sizeof(struct fujitsu_t)); | ||
271 | |||
272 | result = acpi_bus_register_driver(&acpi_fujitsu_driver); | ||
273 | if (result < 0) { | ||
274 | ret = -ENODEV; | ||
275 | goto fail_acpi; | ||
276 | } | ||
277 | |||
278 | /* Register backlight stuff */ | ||
279 | |||
280 | fujitsu->bl_device = | ||
281 | backlight_device_register("fujitsu-laptop", NULL, NULL, | ||
282 | &fujitsubl_ops); | ||
283 | if (IS_ERR(fujitsu->bl_device)) | ||
284 | return PTR_ERR(fujitsu->bl_device); | ||
285 | |||
286 | fujitsu->bl_device->props.max_brightness = FUJITSU_LCD_N_LEVELS - 1; | ||
287 | ret = platform_driver_register(&fujitsupf_driver); | ||
288 | if (ret) | ||
289 | goto fail_backlight; | ||
290 | |||
291 | /* Register platform stuff */ | ||
292 | |||
293 | fujitsu->pf_device = platform_device_alloc("fujitsu-laptop", -1); | ||
294 | if (!fujitsu->pf_device) { | ||
295 | ret = -ENOMEM; | ||
296 | goto fail_platform_driver; | ||
297 | } | ||
298 | |||
299 | ret = platform_device_add(fujitsu->pf_device); | ||
300 | if (ret) | ||
301 | goto fail_platform_device1; | ||
302 | |||
303 | ret = | ||
304 | sysfs_create_group(&fujitsu->pf_device->dev.kobj, | ||
305 | &fujitsupf_attribute_group); | ||
306 | if (ret) | ||
307 | goto fail_platform_device2; | ||
308 | |||
309 | printk(KERN_INFO "fujitsu-laptop: driver " FUJITSU_DRIVER_VERSION | ||
310 | " successfully loaded.\n"); | ||
311 | |||
312 | return 0; | ||
313 | |||
314 | fail_platform_device2: | ||
315 | |||
316 | platform_device_del(fujitsu->pf_device); | ||
317 | |||
318 | fail_platform_device1: | ||
319 | |||
320 | platform_device_put(fujitsu->pf_device); | ||
321 | |||
322 | fail_platform_driver: | ||
323 | |||
324 | platform_driver_unregister(&fujitsupf_driver); | ||
325 | |||
326 | fail_backlight: | ||
327 | |||
328 | backlight_device_unregister(fujitsu->bl_device); | ||
329 | |||
330 | fail_acpi: | ||
331 | |||
332 | kfree(fujitsu); | ||
333 | |||
334 | return ret; | ||
335 | } | ||
336 | |||
337 | static void __exit fujitsu_cleanup(void) | ||
338 | { | ||
339 | sysfs_remove_group(&fujitsu->pf_device->dev.kobj, | ||
340 | &fujitsupf_attribute_group); | ||
341 | platform_device_unregister(fujitsu->pf_device); | ||
342 | platform_driver_unregister(&fujitsupf_driver); | ||
343 | backlight_device_unregister(fujitsu->bl_device); | ||
344 | |||
345 | acpi_bus_unregister_driver(&acpi_fujitsu_driver); | ||
346 | |||
347 | kfree(fujitsu); | ||
348 | |||
349 | printk(KERN_INFO "fujitsu-laptop: driver unloaded.\n"); | ||
350 | } | ||
351 | |||
352 | module_init(fujitsu_init); | ||
353 | module_exit(fujitsu_cleanup); | ||
354 | |||
355 | MODULE_AUTHOR("Jonathan Woithe"); | ||
356 | MODULE_DESCRIPTION("Fujitsu laptop extras support"); | ||
357 | MODULE_VERSION(FUJITSU_DRIVER_VERSION); | ||
358 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/misc/ibmasm/remote.c b/drivers/misc/ibmasm/remote.c index 0550ce075fc..477bb43c899 100644 --- a/drivers/misc/ibmasm/remote.c +++ b/drivers/misc/ibmasm/remote.c | |||
@@ -17,7 +17,7 @@ | |||
17 | * | 17 | * |
18 | * Copyright (C) IBM Corporation, 2004 | 18 | * Copyright (C) IBM Corporation, 2004 |
19 | * | 19 | * |
20 | * Authors: Max Asböck <amax@us.ibm.com> | 20 | * Authors: Max Asböck <amax@us.ibm.com> |
21 | * Vernon Mauery <vernux@us.ibm.com> | 21 | * Vernon Mauery <vernux@us.ibm.com> |
22 | * | 22 | * |
23 | */ | 23 | */ |
@@ -226,9 +226,9 @@ int ibmasm_init_remote_input_dev(struct service_processor *sp) | |||
226 | mouse_dev->id.product = pdev->device; | 226 | mouse_dev->id.product = pdev->device; |
227 | mouse_dev->id.version = 1; | 227 | mouse_dev->id.version = 1; |
228 | mouse_dev->dev.parent = sp->dev; | 228 | mouse_dev->dev.parent = sp->dev; |
229 | mouse_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 229 | mouse_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
230 | mouse_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | | 230 | mouse_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | |
231 | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE); | 231 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); |
232 | set_bit(BTN_TOUCH, mouse_dev->keybit); | 232 | set_bit(BTN_TOUCH, mouse_dev->keybit); |
233 | mouse_dev->name = "ibmasm RSA I remote mouse"; | 233 | mouse_dev->name = "ibmasm RSA I remote mouse"; |
234 | input_set_abs_params(mouse_dev, ABS_X, 0, MOUSE_X_MAX, 0, 0); | 234 | input_set_abs_params(mouse_dev, ABS_X, 0, MOUSE_X_MAX, 0, 0); |
@@ -239,7 +239,7 @@ int ibmasm_init_remote_input_dev(struct service_processor *sp) | |||
239 | keybd_dev->id.product = pdev->device; | 239 | keybd_dev->id.product = pdev->device; |
240 | keybd_dev->id.version = 2; | 240 | keybd_dev->id.version = 2; |
241 | keybd_dev->dev.parent = sp->dev; | 241 | keybd_dev->dev.parent = sp->dev; |
242 | keybd_dev->evbit[0] = BIT(EV_KEY); | 242 | keybd_dev->evbit[0] = BIT_MASK(EV_KEY); |
243 | keybd_dev->name = "ibmasm RSA I remote keyboard"; | 243 | keybd_dev->name = "ibmasm RSA I remote keyboard"; |
244 | 244 | ||
245 | for (i = 0; i < XLATE_SIZE; i++) { | 245 | for (i = 0; i < XLATE_SIZE; i++) { |
diff --git a/drivers/misc/phantom.c b/drivers/misc/phantom.c index 5108b7c576d..cd221fd0fb9 100644 --- a/drivers/misc/phantom.c +++ b/drivers/misc/phantom.c | |||
@@ -9,6 +9,7 @@ | |||
9 | * You need an userspace library to cooperate with this driver. It (and other | 9 | * You need an userspace library to cooperate with this driver. It (and other |
10 | * info) may be obtained here: | 10 | * info) may be obtained here: |
11 | * http://www.fi.muni.cz/~xslaby/phantom.html | 11 | * http://www.fi.muni.cz/~xslaby/phantom.html |
12 | * or alternatively, you might use OpenHaptics provided by Sensable. | ||
12 | */ | 13 | */ |
13 | 14 | ||
14 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
@@ -24,13 +25,14 @@ | |||
24 | #include <asm/atomic.h> | 25 | #include <asm/atomic.h> |
25 | #include <asm/io.h> | 26 | #include <asm/io.h> |
26 | 27 | ||
27 | #define PHANTOM_VERSION "n0.9.5" | 28 | #define PHANTOM_VERSION "n0.9.7" |
28 | 29 | ||
29 | #define PHANTOM_MAX_MINORS 8 | 30 | #define PHANTOM_MAX_MINORS 8 |
30 | 31 | ||
31 | #define PHN_IRQCTL 0x4c /* irq control in caddr space */ | 32 | #define PHN_IRQCTL 0x4c /* irq control in caddr space */ |
32 | 33 | ||
33 | #define PHB_RUNNING 1 | 34 | #define PHB_RUNNING 1 |
35 | #define PHB_NOT_OH 2 | ||
34 | 36 | ||
35 | static struct class *phantom_class; | 37 | static struct class *phantom_class; |
36 | static int phantom_major; | 38 | static int phantom_major; |
@@ -47,7 +49,11 @@ struct phantom_device { | |||
47 | struct cdev cdev; | 49 | struct cdev cdev; |
48 | 50 | ||
49 | struct mutex open_lock; | 51 | struct mutex open_lock; |
50 | spinlock_t ioctl_lock; | 52 | spinlock_t regs_lock; |
53 | |||
54 | /* used in NOT_OH mode */ | ||
55 | struct phm_regs oregs; | ||
56 | u32 ctl_reg; | ||
51 | }; | 57 | }; |
52 | 58 | ||
53 | static unsigned char phantom_devices[PHANTOM_MAX_MINORS]; | 59 | static unsigned char phantom_devices[PHANTOM_MAX_MINORS]; |
@@ -82,6 +88,7 @@ static long phantom_ioctl(struct file *file, unsigned int cmd, | |||
82 | struct phm_regs rs; | 88 | struct phm_regs rs; |
83 | struct phm_reg r; | 89 | struct phm_reg r; |
84 | void __user *argp = (void __user *)arg; | 90 | void __user *argp = (void __user *)arg; |
91 | unsigned long flags; | ||
85 | unsigned int i; | 92 | unsigned int i; |
86 | 93 | ||
87 | if (_IOC_TYPE(cmd) != PH_IOC_MAGIC || | 94 | if (_IOC_TYPE(cmd) != PH_IOC_MAGIC || |
@@ -96,32 +103,45 @@ static long phantom_ioctl(struct file *file, unsigned int cmd, | |||
96 | if (r.reg > 7) | 103 | if (r.reg > 7) |
97 | return -EINVAL; | 104 | return -EINVAL; |
98 | 105 | ||
99 | spin_lock(&dev->ioctl_lock); | 106 | spin_lock_irqsave(&dev->regs_lock, flags); |
100 | if (r.reg == PHN_CONTROL && (r.value & PHN_CTL_IRQ) && | 107 | if (r.reg == PHN_CONTROL && (r.value & PHN_CTL_IRQ) && |
101 | phantom_status(dev, dev->status | PHB_RUNNING)){ | 108 | phantom_status(dev, dev->status | PHB_RUNNING)){ |
102 | spin_unlock(&dev->ioctl_lock); | 109 | spin_unlock_irqrestore(&dev->regs_lock, flags); |
103 | return -ENODEV; | 110 | return -ENODEV; |
104 | } | 111 | } |
105 | 112 | ||
106 | pr_debug("phantom: writing %x to %u\n", r.value, r.reg); | 113 | pr_debug("phantom: writing %x to %u\n", r.value, r.reg); |
114 | |||
115 | /* preserve amp bit (don't allow to change it when in NOT_OH) */ | ||
116 | if (r.reg == PHN_CONTROL && (dev->status & PHB_NOT_OH)) { | ||
117 | r.value &= ~PHN_CTL_AMP; | ||
118 | r.value |= dev->ctl_reg & PHN_CTL_AMP; | ||
119 | dev->ctl_reg = r.value; | ||
120 | } | ||
121 | |||
107 | iowrite32(r.value, dev->iaddr + r.reg); | 122 | iowrite32(r.value, dev->iaddr + r.reg); |
108 | ioread32(dev->iaddr); /* PCI posting */ | 123 | ioread32(dev->iaddr); /* PCI posting */ |
109 | 124 | ||
110 | if (r.reg == PHN_CONTROL && !(r.value & PHN_CTL_IRQ)) | 125 | if (r.reg == PHN_CONTROL && !(r.value & PHN_CTL_IRQ)) |
111 | phantom_status(dev, dev->status & ~PHB_RUNNING); | 126 | phantom_status(dev, dev->status & ~PHB_RUNNING); |
112 | spin_unlock(&dev->ioctl_lock); | 127 | spin_unlock_irqrestore(&dev->regs_lock, flags); |
113 | break; | 128 | break; |
114 | case PHN_SET_REGS: | 129 | case PHN_SET_REGS: |
115 | if (copy_from_user(&rs, argp, sizeof(rs))) | 130 | if (copy_from_user(&rs, argp, sizeof(rs))) |
116 | return -EFAULT; | 131 | return -EFAULT; |
117 | 132 | ||
118 | pr_debug("phantom: SRS %u regs %x\n", rs.count, rs.mask); | 133 | pr_debug("phantom: SRS %u regs %x\n", rs.count, rs.mask); |
119 | spin_lock(&dev->ioctl_lock); | 134 | spin_lock_irqsave(&dev->regs_lock, flags); |
120 | for (i = 0; i < min(rs.count, 8U); i++) | 135 | if (dev->status & PHB_NOT_OH) |
121 | if ((1 << i) & rs.mask) | 136 | memcpy(&dev->oregs, &rs, sizeof(rs)); |
122 | iowrite32(rs.values[i], dev->oaddr + i); | 137 | else { |
123 | ioread32(dev->iaddr); /* PCI posting */ | 138 | u32 m = min(rs.count, 8U); |
124 | spin_unlock(&dev->ioctl_lock); | 139 | for (i = 0; i < m; i++) |
140 | if (rs.mask & BIT(i)) | ||
141 | iowrite32(rs.values[i], dev->oaddr + i); | ||
142 | ioread32(dev->iaddr); /* PCI posting */ | ||
143 | } | ||
144 | spin_unlock_irqrestore(&dev->regs_lock, flags); | ||
125 | break; | 145 | break; |
126 | case PHN_GET_REG: | 146 | case PHN_GET_REG: |
127 | if (copy_from_user(&r, argp, sizeof(r))) | 147 | if (copy_from_user(&r, argp, sizeof(r))) |
@@ -135,20 +155,35 @@ static long phantom_ioctl(struct file *file, unsigned int cmd, | |||
135 | if (copy_to_user(argp, &r, sizeof(r))) | 155 | if (copy_to_user(argp, &r, sizeof(r))) |
136 | return -EFAULT; | 156 | return -EFAULT; |
137 | break; | 157 | break; |
138 | case PHN_GET_REGS: | 158 | case PHN_GET_REGS: { |
159 | u32 m; | ||
160 | |||
139 | if (copy_from_user(&rs, argp, sizeof(rs))) | 161 | if (copy_from_user(&rs, argp, sizeof(rs))) |
140 | return -EFAULT; | 162 | return -EFAULT; |
141 | 163 | ||
164 | m = min(rs.count, 8U); | ||
165 | |||
142 | pr_debug("phantom: GRS %u regs %x\n", rs.count, rs.mask); | 166 | pr_debug("phantom: GRS %u regs %x\n", rs.count, rs.mask); |
143 | spin_lock(&dev->ioctl_lock); | 167 | spin_lock_irqsave(&dev->regs_lock, flags); |
144 | for (i = 0; i < min(rs.count, 8U); i++) | 168 | for (i = 0; i < m; i++) |
145 | if ((1 << i) & rs.mask) | 169 | if (rs.mask & BIT(i)) |
146 | rs.values[i] = ioread32(dev->iaddr + i); | 170 | rs.values[i] = ioread32(dev->iaddr + i); |
147 | spin_unlock(&dev->ioctl_lock); | 171 | spin_unlock_irqrestore(&dev->regs_lock, flags); |
148 | 172 | ||
149 | if (copy_to_user(argp, &rs, sizeof(rs))) | 173 | if (copy_to_user(argp, &rs, sizeof(rs))) |
150 | return -EFAULT; | 174 | return -EFAULT; |
151 | break; | 175 | break; |
176 | } case PHN_NOT_OH: | ||
177 | spin_lock_irqsave(&dev->regs_lock, flags); | ||
178 | if (dev->status & PHB_RUNNING) { | ||
179 | printk(KERN_ERR "phantom: you need to set NOT_OH " | ||
180 | "before you start the device!\n"); | ||
181 | spin_unlock_irqrestore(&dev->regs_lock, flags); | ||
182 | return -EINVAL; | ||
183 | } | ||
184 | dev->status |= PHB_NOT_OH; | ||
185 | spin_unlock_irqrestore(&dev->regs_lock, flags); | ||
186 | break; | ||
152 | default: | 187 | default: |
153 | return -ENOTTY; | 188 | return -ENOTTY; |
154 | } | 189 | } |
@@ -171,8 +206,11 @@ static int phantom_open(struct inode *inode, struct file *file) | |||
171 | return -EINVAL; | 206 | return -EINVAL; |
172 | } | 207 | } |
173 | 208 | ||
209 | WARN_ON(dev->status & PHB_NOT_OH); | ||
210 | |||
174 | file->private_data = dev; | 211 | file->private_data = dev; |
175 | 212 | ||
213 | atomic_set(&dev->counter, 0); | ||
176 | dev->opened++; | 214 | dev->opened++; |
177 | mutex_unlock(&dev->open_lock); | 215 | mutex_unlock(&dev->open_lock); |
178 | 216 | ||
@@ -187,6 +225,7 @@ static int phantom_release(struct inode *inode, struct file *file) | |||
187 | 225 | ||
188 | dev->opened = 0; | 226 | dev->opened = 0; |
189 | phantom_status(dev, dev->status & ~PHB_RUNNING); | 227 | phantom_status(dev, dev->status & ~PHB_RUNNING); |
228 | dev->status &= ~PHB_NOT_OH; | ||
190 | 229 | ||
191 | mutex_unlock(&dev->open_lock); | 230 | mutex_unlock(&dev->open_lock); |
192 | 231 | ||
@@ -220,12 +259,32 @@ static struct file_operations phantom_file_ops = { | |||
220 | static irqreturn_t phantom_isr(int irq, void *data) | 259 | static irqreturn_t phantom_isr(int irq, void *data) |
221 | { | 260 | { |
222 | struct phantom_device *dev = data; | 261 | struct phantom_device *dev = data; |
262 | unsigned int i; | ||
263 | u32 ctl; | ||
223 | 264 | ||
224 | if (!(ioread32(dev->iaddr + PHN_CONTROL) & PHN_CTL_IRQ)) | 265 | spin_lock(&dev->regs_lock); |
266 | ctl = ioread32(dev->iaddr + PHN_CONTROL); | ||
267 | if (!(ctl & PHN_CTL_IRQ)) { | ||
268 | spin_unlock(&dev->regs_lock); | ||
225 | return IRQ_NONE; | 269 | return IRQ_NONE; |
270 | } | ||
226 | 271 | ||
227 | iowrite32(0, dev->iaddr); | 272 | iowrite32(0, dev->iaddr); |
228 | iowrite32(0xc0, dev->iaddr); | 273 | iowrite32(0xc0, dev->iaddr); |
274 | |||
275 | if (dev->status & PHB_NOT_OH) { | ||
276 | struct phm_regs *r = &dev->oregs; | ||
277 | u32 m = min(r->count, 8U); | ||
278 | |||
279 | for (i = 0; i < m; i++) | ||
280 | if (r->mask & BIT(i)) | ||
281 | iowrite32(r->values[i], dev->oaddr + i); | ||
282 | |||
283 | dev->ctl_reg ^= PHN_CTL_AMP; | ||
284 | iowrite32(dev->ctl_reg, dev->iaddr + PHN_CONTROL); | ||
285 | } | ||
286 | spin_unlock(&dev->regs_lock); | ||
287 | |||
229 | ioread32(dev->iaddr); /* PCI posting */ | 288 | ioread32(dev->iaddr); /* PCI posting */ |
230 | 289 | ||
231 | atomic_inc(&dev->counter); | 290 | atomic_inc(&dev->counter); |
@@ -297,7 +356,7 @@ static int __devinit phantom_probe(struct pci_dev *pdev, | |||
297 | } | 356 | } |
298 | 357 | ||
299 | mutex_init(&pht->open_lock); | 358 | mutex_init(&pht->open_lock); |
300 | spin_lock_init(&pht->ioctl_lock); | 359 | spin_lock_init(&pht->regs_lock); |
301 | init_waitqueue_head(&pht->wait); | 360 | init_waitqueue_head(&pht->wait); |
302 | cdev_init(&pht->cdev, &phantom_file_ops); | 361 | cdev_init(&pht->cdev, &phantom_file_ops); |
303 | pht->cdev.owner = THIS_MODULE; | 362 | pht->cdev.owner = THIS_MODULE; |
@@ -378,6 +437,8 @@ static int phantom_suspend(struct pci_dev *pdev, pm_message_t state) | |||
378 | iowrite32(0, dev->caddr + PHN_IRQCTL); | 437 | iowrite32(0, dev->caddr + PHN_IRQCTL); |
379 | ioread32(dev->caddr + PHN_IRQCTL); /* PCI posting */ | 438 | ioread32(dev->caddr + PHN_IRQCTL); /* PCI posting */ |
380 | 439 | ||
440 | synchronize_irq(pdev->irq); | ||
441 | |||
381 | return 0; | 442 | return 0; |
382 | } | 443 | } |
383 | 444 | ||
diff --git a/drivers/misc/sony-laptop.c b/drivers/misc/sony-laptop.c index e73a71f04bb..bb13858f60a 100644 --- a/drivers/misc/sony-laptop.c +++ b/drivers/misc/sony-laptop.c | |||
@@ -14,7 +14,7 @@ | |||
14 | * | 14 | * |
15 | * Copyright (C) 2005 Narayanan R S <nars@kadamba.org> | 15 | * Copyright (C) 2005 Narayanan R S <nars@kadamba.org> |
16 | * | 16 | * |
17 | * Copyright (C) 2001-2002 Alcôve <www.alcove.com> | 17 | * Copyright (C) 2001-2002 Alcôve <www.alcove.com> |
18 | * | 18 | * |
19 | * Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au> | 19 | * Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au> |
20 | * | 20 | * |
@@ -277,7 +277,7 @@ static void do_sony_laptop_release_key(struct work_struct *work) | |||
277 | static DECLARE_WORK(sony_laptop_release_key_work, | 277 | static DECLARE_WORK(sony_laptop_release_key_work, |
278 | do_sony_laptop_release_key); | 278 | do_sony_laptop_release_key); |
279 | 279 | ||
280 | /* forward event to the input subsytem */ | 280 | /* forward event to the input subsystem */ |
281 | static void sony_laptop_report_input_event(u8 event) | 281 | static void sony_laptop_report_input_event(u8 event) |
282 | { | 282 | { |
283 | struct input_dev *jog_dev = sony_laptop_input.jog_dev; | 283 | struct input_dev *jog_dev = sony_laptop_input.jog_dev; |
@@ -411,9 +411,9 @@ static int sony_laptop_setup_input(void) | |||
411 | jog_dev->id.bustype = BUS_ISA; | 411 | jog_dev->id.bustype = BUS_ISA; |
412 | jog_dev->id.vendor = PCI_VENDOR_ID_SONY; | 412 | jog_dev->id.vendor = PCI_VENDOR_ID_SONY; |
413 | 413 | ||
414 | jog_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL); | 414 | jog_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); |
415 | jog_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_MIDDLE); | 415 | jog_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_MIDDLE); |
416 | jog_dev->relbit[0] = BIT(REL_WHEEL); | 416 | jog_dev->relbit[0] = BIT_MASK(REL_WHEEL); |
417 | 417 | ||
418 | error = input_register_device(jog_dev); | 418 | error = input_register_device(jog_dev); |
419 | if (error) | 419 | if (error) |
@@ -1173,7 +1173,8 @@ static struct acpi_driver sony_nc_driver = { | |||
1173 | #define SONYPI_TYPE3_OFFSET 0x12 | 1173 | #define SONYPI_TYPE3_OFFSET 0x12 |
1174 | 1174 | ||
1175 | struct sony_pic_ioport { | 1175 | struct sony_pic_ioport { |
1176 | struct acpi_resource_io io; | 1176 | struct acpi_resource_io io1; |
1177 | struct acpi_resource_io io2; | ||
1177 | struct list_head list; | 1178 | struct list_head list; |
1178 | }; | 1179 | }; |
1179 | 1180 | ||
@@ -1443,11 +1444,11 @@ static u8 sony_pic_call1(u8 dev) | |||
1443 | { | 1444 | { |
1444 | u8 v1, v2; | 1445 | u8 v1, v2; |
1445 | 1446 | ||
1446 | wait_on_command(inb_p(spic_dev.cur_ioport->io.minimum + 4) & 2, | 1447 | wait_on_command(inb_p(spic_dev.cur_ioport->io1.minimum + 4) & 2, |
1447 | ITERATIONS_LONG); | 1448 | ITERATIONS_LONG); |
1448 | outb(dev, spic_dev.cur_ioport->io.minimum + 4); | 1449 | outb(dev, spic_dev.cur_ioport->io1.minimum + 4); |
1449 | v1 = inb_p(spic_dev.cur_ioport->io.minimum + 4); | 1450 | v1 = inb_p(spic_dev.cur_ioport->io1.minimum + 4); |
1450 | v2 = inb_p(spic_dev.cur_ioport->io.minimum); | 1451 | v2 = inb_p(spic_dev.cur_ioport->io1.minimum); |
1451 | dprintk("sony_pic_call1: 0x%.4x\n", (v2 << 8) | v1); | 1452 | dprintk("sony_pic_call1: 0x%.4x\n", (v2 << 8) | v1); |
1452 | return v2; | 1453 | return v2; |
1453 | } | 1454 | } |
@@ -1456,13 +1457,13 @@ static u8 sony_pic_call2(u8 dev, u8 fn) | |||
1456 | { | 1457 | { |
1457 | u8 v1; | 1458 | u8 v1; |
1458 | 1459 | ||
1459 | wait_on_command(inb_p(spic_dev.cur_ioport->io.minimum + 4) & 2, | 1460 | wait_on_command(inb_p(spic_dev.cur_ioport->io1.minimum + 4) & 2, |
1460 | ITERATIONS_LONG); | 1461 | ITERATIONS_LONG); |
1461 | outb(dev, spic_dev.cur_ioport->io.minimum + 4); | 1462 | outb(dev, spic_dev.cur_ioport->io1.minimum + 4); |
1462 | wait_on_command(inb_p(spic_dev.cur_ioport->io.minimum + 4) & 2, | 1463 | wait_on_command(inb_p(spic_dev.cur_ioport->io1.minimum + 4) & 2, |
1463 | ITERATIONS_LONG); | 1464 | ITERATIONS_LONG); |
1464 | outb(fn, spic_dev.cur_ioport->io.minimum); | 1465 | outb(fn, spic_dev.cur_ioport->io1.minimum); |
1465 | v1 = inb_p(spic_dev.cur_ioport->io.minimum); | 1466 | v1 = inb_p(spic_dev.cur_ioport->io1.minimum); |
1466 | dprintk("sony_pic_call2: 0x%.4x\n", v1); | 1467 | dprintk("sony_pic_call2: 0x%.4x\n", v1); |
1467 | return v1; | 1468 | return v1; |
1468 | } | 1469 | } |
@@ -1471,13 +1472,13 @@ static u8 sony_pic_call3(u8 dev, u8 fn, u8 v) | |||
1471 | { | 1472 | { |
1472 | u8 v1; | 1473 | u8 v1; |
1473 | 1474 | ||
1474 | wait_on_command(inb_p(spic_dev.cur_ioport->io.minimum + 4) & 2, ITERATIONS_LONG); | 1475 | wait_on_command(inb_p(spic_dev.cur_ioport->io1.minimum + 4) & 2, ITERATIONS_LONG); |
1475 | outb(dev, spic_dev.cur_ioport->io.minimum + 4); | 1476 | outb(dev, spic_dev.cur_ioport->io1.minimum + 4); |
1476 | wait_on_command(inb_p(spic_dev.cur_ioport->io.minimum + 4) & 2, ITERATIONS_LONG); | 1477 | wait_on_command(inb_p(spic_dev.cur_ioport->io1.minimum + 4) & 2, ITERATIONS_LONG); |
1477 | outb(fn, spic_dev.cur_ioport->io.minimum); | 1478 | outb(fn, spic_dev.cur_ioport->io1.minimum); |
1478 | wait_on_command(inb_p(spic_dev.cur_ioport->io.minimum + 4) & 2, ITERATIONS_LONG); | 1479 | wait_on_command(inb_p(spic_dev.cur_ioport->io1.minimum + 4) & 2, ITERATIONS_LONG); |
1479 | outb(v, spic_dev.cur_ioport->io.minimum); | 1480 | outb(v, spic_dev.cur_ioport->io1.minimum); |
1480 | v1 = inb_p(spic_dev.cur_ioport->io.minimum); | 1481 | v1 = inb_p(spic_dev.cur_ioport->io1.minimum); |
1481 | dprintk("sony_pic_call3: 0x%.4x\n", v1); | 1482 | dprintk("sony_pic_call3: 0x%.4x\n", v1); |
1482 | return v1; | 1483 | return v1; |
1483 | } | 1484 | } |
@@ -2074,7 +2075,18 @@ sony_pic_read_possible_resource(struct acpi_resource *resource, void *context) | |||
2074 | 2075 | ||
2075 | switch (resource->type) { | 2076 | switch (resource->type) { |
2076 | case ACPI_RESOURCE_TYPE_START_DEPENDENT: | 2077 | case ACPI_RESOURCE_TYPE_START_DEPENDENT: |
2078 | { | ||
2079 | /* start IO enumeration */ | ||
2080 | struct sony_pic_ioport *ioport = kzalloc(sizeof(*ioport), GFP_KERNEL); | ||
2081 | if (!ioport) | ||
2082 | return AE_ERROR; | ||
2083 | |||
2084 | list_add(&ioport->list, &dev->ioports); | ||
2085 | return AE_OK; | ||
2086 | } | ||
2087 | |||
2077 | case ACPI_RESOURCE_TYPE_END_DEPENDENT: | 2088 | case ACPI_RESOURCE_TYPE_END_DEPENDENT: |
2089 | /* end IO enumeration */ | ||
2078 | return AE_OK; | 2090 | return AE_OK; |
2079 | 2091 | ||
2080 | case ACPI_RESOURCE_TYPE_IRQ: | 2092 | case ACPI_RESOURCE_TYPE_IRQ: |
@@ -2101,7 +2113,7 @@ sony_pic_read_possible_resource(struct acpi_resource *resource, void *context) | |||
2101 | if (!interrupt) | 2113 | if (!interrupt) |
2102 | return AE_ERROR; | 2114 | return AE_ERROR; |
2103 | 2115 | ||
2104 | list_add_tail(&interrupt->list, &dev->interrupts); | 2116 | list_add(&interrupt->list, &dev->interrupts); |
2105 | interrupt->irq.triggering = p->triggering; | 2117 | interrupt->irq.triggering = p->triggering; |
2106 | interrupt->irq.polarity = p->polarity; | 2118 | interrupt->irq.polarity = p->polarity; |
2107 | interrupt->irq.sharable = p->sharable; | 2119 | interrupt->irq.sharable = p->sharable; |
@@ -2113,18 +2125,27 @@ sony_pic_read_possible_resource(struct acpi_resource *resource, void *context) | |||
2113 | case ACPI_RESOURCE_TYPE_IO: | 2125 | case ACPI_RESOURCE_TYPE_IO: |
2114 | { | 2126 | { |
2115 | struct acpi_resource_io *io = &resource->data.io; | 2127 | struct acpi_resource_io *io = &resource->data.io; |
2116 | struct sony_pic_ioport *ioport = NULL; | 2128 | struct sony_pic_ioport *ioport = |
2129 | list_first_entry(&dev->ioports, struct sony_pic_ioport, list); | ||
2117 | if (!io) { | 2130 | if (!io) { |
2118 | dprintk("Blank IO resource\n"); | 2131 | dprintk("Blank IO resource\n"); |
2119 | return AE_OK; | 2132 | return AE_OK; |
2120 | } | 2133 | } |
2121 | 2134 | ||
2122 | ioport = kzalloc(sizeof(*ioport), GFP_KERNEL); | 2135 | if (!ioport->io1.minimum) { |
2123 | if (!ioport) | 2136 | memcpy(&ioport->io1, io, sizeof(*io)); |
2137 | dprintk("IO1 at 0x%.4x (0x%.2x)\n", ioport->io1.minimum, | ||
2138 | ioport->io1.address_length); | ||
2139 | } | ||
2140 | else if (!ioport->io2.minimum) { | ||
2141 | memcpy(&ioport->io2, io, sizeof(*io)); | ||
2142 | dprintk("IO2 at 0x%.4x (0x%.2x)\n", ioport->io2.minimum, | ||
2143 | ioport->io2.address_length); | ||
2144 | } | ||
2145 | else { | ||
2146 | printk(KERN_ERR DRV_PFX "Unknown SPIC Type, more than 2 IO Ports\n"); | ||
2124 | return AE_ERROR; | 2147 | return AE_ERROR; |
2125 | 2148 | } | |
2126 | list_add_tail(&ioport->list, &dev->ioports); | ||
2127 | memcpy(&ioport->io, io, sizeof(*io)); | ||
2128 | return AE_OK; | 2149 | return AE_OK; |
2129 | } | 2150 | } |
2130 | default: | 2151 | default: |
@@ -2199,10 +2220,22 @@ static int sony_pic_enable(struct acpi_device *device, | |||
2199 | { | 2220 | { |
2200 | acpi_status status; | 2221 | acpi_status status; |
2201 | int result = 0; | 2222 | int result = 0; |
2223 | /* Type 1 resource layout is: | ||
2224 | * IO | ||
2225 | * IO | ||
2226 | * IRQNoFlags | ||
2227 | * End | ||
2228 | * | ||
2229 | * Type 2 and 3 resource layout is: | ||
2230 | * IO | ||
2231 | * IRQNoFlags | ||
2232 | * End | ||
2233 | */ | ||
2202 | struct { | 2234 | struct { |
2203 | struct acpi_resource io_res; | 2235 | struct acpi_resource res1; |
2204 | struct acpi_resource irq_res; | 2236 | struct acpi_resource res2; |
2205 | struct acpi_resource end; | 2237 | struct acpi_resource res3; |
2238 | struct acpi_resource res4; | ||
2206 | } *resource; | 2239 | } *resource; |
2207 | struct acpi_buffer buffer = { 0, NULL }; | 2240 | struct acpi_buffer buffer = { 0, NULL }; |
2208 | 2241 | ||
@@ -2217,21 +2250,49 @@ static int sony_pic_enable(struct acpi_device *device, | |||
2217 | buffer.length = sizeof(*resource) + 1; | 2250 | buffer.length = sizeof(*resource) + 1; |
2218 | buffer.pointer = resource; | 2251 | buffer.pointer = resource; |
2219 | 2252 | ||
2220 | /* setup io resource */ | 2253 | /* setup Type 1 resources */ |
2221 | resource->io_res.type = ACPI_RESOURCE_TYPE_IO; | 2254 | if (spic_dev.model == SONYPI_DEVICE_TYPE1) { |
2222 | resource->io_res.length = sizeof(struct acpi_resource); | ||
2223 | memcpy(&resource->io_res.data.io, &ioport->io, | ||
2224 | sizeof(struct acpi_resource_io)); | ||
2225 | 2255 | ||
2226 | /* setup irq resource */ | 2256 | /* setup io resources */ |
2227 | resource->irq_res.type = ACPI_RESOURCE_TYPE_IRQ; | 2257 | resource->res1.type = ACPI_RESOURCE_TYPE_IO; |
2228 | resource->irq_res.length = sizeof(struct acpi_resource); | 2258 | resource->res1.length = sizeof(struct acpi_resource); |
2229 | memcpy(&resource->irq_res.data.irq, &irq->irq, | 2259 | memcpy(&resource->res1.data.io, &ioport->io1, |
2230 | sizeof(struct acpi_resource_irq)); | 2260 | sizeof(struct acpi_resource_io)); |
2231 | /* we requested a shared irq */ | ||
2232 | resource->irq_res.data.irq.sharable = ACPI_SHARED; | ||
2233 | 2261 | ||
2234 | resource->end.type = ACPI_RESOURCE_TYPE_END_TAG; | 2262 | resource->res2.type = ACPI_RESOURCE_TYPE_IO; |
2263 | resource->res2.length = sizeof(struct acpi_resource); | ||
2264 | memcpy(&resource->res2.data.io, &ioport->io2, | ||
2265 | sizeof(struct acpi_resource_io)); | ||
2266 | |||
2267 | /* setup irq resource */ | ||
2268 | resource->res3.type = ACPI_RESOURCE_TYPE_IRQ; | ||
2269 | resource->res3.length = sizeof(struct acpi_resource); | ||
2270 | memcpy(&resource->res3.data.irq, &irq->irq, | ||
2271 | sizeof(struct acpi_resource_irq)); | ||
2272 | /* we requested a shared irq */ | ||
2273 | resource->res3.data.irq.sharable = ACPI_SHARED; | ||
2274 | |||
2275 | resource->res4.type = ACPI_RESOURCE_TYPE_END_TAG; | ||
2276 | |||
2277 | } | ||
2278 | /* setup Type 2/3 resources */ | ||
2279 | else { | ||
2280 | /* setup io resource */ | ||
2281 | resource->res1.type = ACPI_RESOURCE_TYPE_IO; | ||
2282 | resource->res1.length = sizeof(struct acpi_resource); | ||
2283 | memcpy(&resource->res1.data.io, &ioport->io1, | ||
2284 | sizeof(struct acpi_resource_io)); | ||
2285 | |||
2286 | /* setup irq resource */ | ||
2287 | resource->res2.type = ACPI_RESOURCE_TYPE_IRQ; | ||
2288 | resource->res2.length = sizeof(struct acpi_resource); | ||
2289 | memcpy(&resource->res2.data.irq, &irq->irq, | ||
2290 | sizeof(struct acpi_resource_irq)); | ||
2291 | /* we requested a shared irq */ | ||
2292 | resource->res2.data.irq.sharable = ACPI_SHARED; | ||
2293 | |||
2294 | resource->res3.type = ACPI_RESOURCE_TYPE_END_TAG; | ||
2295 | } | ||
2235 | 2296 | ||
2236 | /* Attempt to set the resource */ | 2297 | /* Attempt to set the resource */ |
2237 | dprintk("Evaluating _SRS\n"); | 2298 | dprintk("Evaluating _SRS\n"); |
@@ -2239,7 +2300,7 @@ static int sony_pic_enable(struct acpi_device *device, | |||
2239 | 2300 | ||
2240 | /* check for total failure */ | 2301 | /* check for total failure */ |
2241 | if (ACPI_FAILURE(status)) { | 2302 | if (ACPI_FAILURE(status)) { |
2242 | printk(KERN_ERR DRV_PFX "Error evaluating _SRS"); | 2303 | printk(KERN_ERR DRV_PFX "Error evaluating _SRS\n"); |
2243 | result = -ENODEV; | 2304 | result = -ENODEV; |
2244 | goto end; | 2305 | goto end; |
2245 | } | 2306 | } |
@@ -2268,11 +2329,14 @@ static irqreturn_t sony_pic_irq(int irq, void *dev_id) | |||
2268 | 2329 | ||
2269 | struct sony_pic_dev *dev = (struct sony_pic_dev *) dev_id; | 2330 | struct sony_pic_dev *dev = (struct sony_pic_dev *) dev_id; |
2270 | 2331 | ||
2271 | ev = inb_p(dev->cur_ioport->io.minimum); | 2332 | ev = inb_p(dev->cur_ioport->io1.minimum); |
2272 | data_mask = inb_p(dev->cur_ioport->io.minimum + dev->evport_offset); | 2333 | if (dev->cur_ioport->io2.minimum) |
2334 | data_mask = inb_p(dev->cur_ioport->io2.minimum); | ||
2335 | else | ||
2336 | data_mask = inb_p(dev->cur_ioport->io1.minimum + dev->evport_offset); | ||
2273 | 2337 | ||
2274 | dprintk("event ([%.2x] [%.2x]) at port 0x%.4x(+0x%.2x)\n", | 2338 | dprintk("event ([%.2x] [%.2x]) at port 0x%.4x(+0x%.2x)\n", |
2275 | ev, data_mask, dev->cur_ioport->io.minimum, dev->evport_offset); | 2339 | ev, data_mask, dev->cur_ioport->io1.minimum, dev->evport_offset); |
2276 | 2340 | ||
2277 | if (ev == 0x00 || ev == 0xff) | 2341 | if (ev == 0x00 || ev == 0xff) |
2278 | return IRQ_HANDLED; | 2342 | return IRQ_HANDLED; |
@@ -2323,8 +2387,11 @@ static int sony_pic_remove(struct acpi_device *device, int type) | |||
2323 | } | 2387 | } |
2324 | 2388 | ||
2325 | free_irq(spic_dev.cur_irq->irq.interrupts[0], &spic_dev); | 2389 | free_irq(spic_dev.cur_irq->irq.interrupts[0], &spic_dev); |
2326 | release_region(spic_dev.cur_ioport->io.minimum, | 2390 | release_region(spic_dev.cur_ioport->io1.minimum, |
2327 | spic_dev.cur_ioport->io.address_length); | 2391 | spic_dev.cur_ioport->io1.address_length); |
2392 | if (spic_dev.cur_ioport->io2.minimum) | ||
2393 | release_region(spic_dev.cur_ioport->io2.minimum, | ||
2394 | spic_dev.cur_ioport->io2.address_length); | ||
2328 | 2395 | ||
2329 | sonypi_compat_exit(); | 2396 | sonypi_compat_exit(); |
2330 | 2397 | ||
@@ -2397,14 +2464,36 @@ static int sony_pic_add(struct acpi_device *device) | |||
2397 | goto err_remove_input; | 2464 | goto err_remove_input; |
2398 | 2465 | ||
2399 | /* request io port */ | 2466 | /* request io port */ |
2400 | list_for_each_entry(io, &spic_dev.ioports, list) { | 2467 | list_for_each_entry_reverse(io, &spic_dev.ioports, list) { |
2401 | if (request_region(io->io.minimum, io->io.address_length, | 2468 | if (request_region(io->io1.minimum, io->io1.address_length, |
2402 | "Sony Programable I/O Device")) { | 2469 | "Sony Programable I/O Device")) { |
2403 | dprintk("I/O port: 0x%.4x (0x%.4x) + 0x%.2x\n", | 2470 | dprintk("I/O port1: 0x%.4x (0x%.4x) + 0x%.2x\n", |
2404 | io->io.minimum, io->io.maximum, | 2471 | io->io1.minimum, io->io1.maximum, |
2405 | io->io.address_length); | 2472 | io->io1.address_length); |
2406 | spic_dev.cur_ioport = io; | 2473 | /* Type 1 have 2 ioports */ |
2407 | break; | 2474 | if (io->io2.minimum) { |
2475 | if (request_region(io->io2.minimum, | ||
2476 | io->io2.address_length, | ||
2477 | "Sony Programable I/O Device")) { | ||
2478 | dprintk("I/O port2: 0x%.4x (0x%.4x) + 0x%.2x\n", | ||
2479 | io->io2.minimum, io->io2.maximum, | ||
2480 | io->io2.address_length); | ||
2481 | spic_dev.cur_ioport = io; | ||
2482 | break; | ||
2483 | } | ||
2484 | else { | ||
2485 | dprintk("Unable to get I/O port2: " | ||
2486 | "0x%.4x (0x%.4x) + 0x%.2x\n", | ||
2487 | io->io2.minimum, io->io2.maximum, | ||
2488 | io->io2.address_length); | ||
2489 | release_region(io->io1.minimum, | ||
2490 | io->io1.address_length); | ||
2491 | } | ||
2492 | } | ||
2493 | else { | ||
2494 | spic_dev.cur_ioport = io; | ||
2495 | break; | ||
2496 | } | ||
2408 | } | 2497 | } |
2409 | } | 2498 | } |
2410 | if (!spic_dev.cur_ioport) { | 2499 | if (!spic_dev.cur_ioport) { |
@@ -2414,7 +2503,7 @@ static int sony_pic_add(struct acpi_device *device) | |||
2414 | } | 2503 | } |
2415 | 2504 | ||
2416 | /* request IRQ */ | 2505 | /* request IRQ */ |
2417 | list_for_each_entry(irq, &spic_dev.interrupts, list) { | 2506 | list_for_each_entry_reverse(irq, &spic_dev.interrupts, list) { |
2418 | if (!request_irq(irq->irq.interrupts[0], sony_pic_irq, | 2507 | if (!request_irq(irq->irq.interrupts[0], sony_pic_irq, |
2419 | IRQF_SHARED, "sony-laptop", &spic_dev)) { | 2508 | IRQF_SHARED, "sony-laptop", &spic_dev)) { |
2420 | dprintk("IRQ: %d - triggering: %d - " | 2509 | dprintk("IRQ: %d - triggering: %d - " |
@@ -2462,8 +2551,11 @@ err_free_irq: | |||
2462 | free_irq(spic_dev.cur_irq->irq.interrupts[0], &spic_dev); | 2551 | free_irq(spic_dev.cur_irq->irq.interrupts[0], &spic_dev); |
2463 | 2552 | ||
2464 | err_release_region: | 2553 | err_release_region: |
2465 | release_region(spic_dev.cur_ioport->io.minimum, | 2554 | release_region(spic_dev.cur_ioport->io1.minimum, |
2466 | spic_dev.cur_ioport->io.address_length); | 2555 | spic_dev.cur_ioport->io1.address_length); |
2556 | if (spic_dev.cur_ioport->io2.minimum) | ||
2557 | release_region(spic_dev.cur_ioport->io2.minimum, | ||
2558 | spic_dev.cur_ioport->io2.address_length); | ||
2467 | 2559 | ||
2468 | err_remove_compat: | 2560 | err_remove_compat: |
2469 | sonypi_compat_exit(); | 2561 | sonypi_compat_exit(); |
diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c index 81e068fa7ac..e953276664a 100644 --- a/drivers/misc/thinkpad_acpi.c +++ b/drivers/misc/thinkpad_acpi.c | |||
@@ -22,7 +22,7 @@ | |||
22 | */ | 22 | */ |
23 | 23 | ||
24 | #define IBM_VERSION "0.16" | 24 | #define IBM_VERSION "0.16" |
25 | #define TPACPI_SYSFS_VERSION 0x010000 | 25 | #define TPACPI_SYSFS_VERSION 0x020000 |
26 | 26 | ||
27 | /* | 27 | /* |
28 | * Changelog: | 28 | * Changelog: |
@@ -117,6 +117,12 @@ IBM_BIOS_MODULE_ALIAS("K[U,X-Z]"); | |||
117 | 117 | ||
118 | #define __unused __attribute__ ((unused)) | 118 | #define __unused __attribute__ ((unused)) |
119 | 119 | ||
120 | static enum { | ||
121 | TPACPI_LIFE_INIT = 0, | ||
122 | TPACPI_LIFE_RUNNING, | ||
123 | TPACPI_LIFE_EXITING, | ||
124 | } tpacpi_lifecycle; | ||
125 | |||
120 | /**************************************************************************** | 126 | /**************************************************************************** |
121 | **************************************************************************** | 127 | **************************************************************************** |
122 | * | 128 | * |
@@ -342,6 +348,9 @@ static void dispatch_acpi_notify(acpi_handle handle, u32 event, void *data) | |||
342 | { | 348 | { |
343 | struct ibm_struct *ibm = data; | 349 | struct ibm_struct *ibm = data; |
344 | 350 | ||
351 | if (tpacpi_lifecycle != TPACPI_LIFE_RUNNING) | ||
352 | return; | ||
353 | |||
345 | if (!ibm || !ibm->acpi || !ibm->acpi->notify) | 354 | if (!ibm || !ibm->acpi || !ibm->acpi->notify) |
346 | return; | 355 | return; |
347 | 356 | ||
@@ -517,8 +526,10 @@ static char *next_cmd(char **cmds) | |||
517 | ****************************************************************************/ | 526 | ****************************************************************************/ |
518 | 527 | ||
519 | static struct platform_device *tpacpi_pdev; | 528 | static struct platform_device *tpacpi_pdev; |
529 | static struct platform_device *tpacpi_sensors_pdev; | ||
520 | static struct device *tpacpi_hwmon; | 530 | static struct device *tpacpi_hwmon; |
521 | static struct input_dev *tpacpi_inputdev; | 531 | static struct input_dev *tpacpi_inputdev; |
532 | static struct mutex tpacpi_inputdev_send_mutex; | ||
522 | 533 | ||
523 | 534 | ||
524 | static int tpacpi_resume_handler(struct platform_device *pdev) | 535 | static int tpacpi_resume_handler(struct platform_device *pdev) |
@@ -543,6 +554,12 @@ static struct platform_driver tpacpi_pdriver = { | |||
543 | .resume = tpacpi_resume_handler, | 554 | .resume = tpacpi_resume_handler, |
544 | }; | 555 | }; |
545 | 556 | ||
557 | static struct platform_driver tpacpi_hwmon_pdriver = { | ||
558 | .driver = { | ||
559 | .name = IBM_HWMON_DRVR_NAME, | ||
560 | .owner = THIS_MODULE, | ||
561 | }, | ||
562 | }; | ||
546 | 563 | ||
547 | /************************************************************************* | 564 | /************************************************************************* |
548 | * thinkpad-acpi driver attributes | 565 | * thinkpad-acpi driver attributes |
@@ -692,6 +709,8 @@ static int parse_strtoul(const char *buf, | |||
692 | { | 709 | { |
693 | char *endp; | 710 | char *endp; |
694 | 711 | ||
712 | while (*buf && isspace(*buf)) | ||
713 | buf++; | ||
695 | *value = simple_strtoul(buf, &endp, 0); | 714 | *value = simple_strtoul(buf, &endp, 0); |
696 | while (*endp && isspace(*endp)) | 715 | while (*endp && isspace(*endp)) |
697 | endp++; | 716 | endp++; |
@@ -989,6 +1008,7 @@ static int __init hotkey_init(struct ibm_init_struct *iibm) | |||
989 | 1008 | ||
990 | int res, i; | 1009 | int res, i; |
991 | int status; | 1010 | int status; |
1011 | int hkeyv; | ||
992 | 1012 | ||
993 | vdbg_printk(TPACPI_DBG_INIT, "initializing hotkey subdriver\n"); | 1013 | vdbg_printk(TPACPI_DBG_INIT, "initializing hotkey subdriver\n"); |
994 | 1014 | ||
@@ -1014,18 +1034,35 @@ static int __init hotkey_init(struct ibm_init_struct *iibm) | |||
1014 | return res; | 1034 | return res; |
1015 | 1035 | ||
1016 | /* mask not supported on 570, 600e/x, 770e, 770x, A21e, A2xm/p, | 1036 | /* mask not supported on 570, 600e/x, 770e, 770x, A21e, A2xm/p, |
1017 | A30, R30, R31, T20-22, X20-21, X22-24 */ | 1037 | A30, R30, R31, T20-22, X20-21, X22-24. Detected by checking |
1018 | tp_features.hotkey_mask = | 1038 | for HKEY interface version 0x100 */ |
1019 | acpi_evalf(hkey_handle, NULL, "DHKN", "qv"); | 1039 | if (acpi_evalf(hkey_handle, &hkeyv, "MHKV", "qd")) { |
1040 | if ((hkeyv >> 8) != 1) { | ||
1041 | printk(IBM_ERR "unknown version of the " | ||
1042 | "HKEY interface: 0x%x\n", hkeyv); | ||
1043 | printk(IBM_ERR "please report this to %s\n", | ||
1044 | IBM_MAIL); | ||
1045 | } else { | ||
1046 | /* | ||
1047 | * MHKV 0x100 in A31, R40, R40e, | ||
1048 | * T4x, X31, and later | ||
1049 | * */ | ||
1050 | tp_features.hotkey_mask = 1; | ||
1051 | } | ||
1052 | } | ||
1020 | 1053 | ||
1021 | vdbg_printk(TPACPI_DBG_INIT, "hotkey masks are %s\n", | 1054 | vdbg_printk(TPACPI_DBG_INIT, "hotkey masks are %s\n", |
1022 | str_supported(tp_features.hotkey_mask)); | 1055 | str_supported(tp_features.hotkey_mask)); |
1023 | 1056 | ||
1024 | if (tp_features.hotkey_mask) { | 1057 | if (tp_features.hotkey_mask) { |
1025 | /* MHKA available in A31, R40, R40e, T4x, X31, and later */ | ||
1026 | if (!acpi_evalf(hkey_handle, &hotkey_all_mask, | 1058 | if (!acpi_evalf(hkey_handle, &hotkey_all_mask, |
1027 | "MHKA", "qd")) | 1059 | "MHKA", "qd")) { |
1060 | printk(IBM_ERR | ||
1061 | "missing MHKA handler, " | ||
1062 | "please report this to %s\n", | ||
1063 | IBM_MAIL); | ||
1028 | hotkey_all_mask = 0x080cU; /* FN+F12, FN+F4, FN+F3 */ | 1064 | hotkey_all_mask = 0x080cU; /* FN+F12, FN+F4, FN+F3 */ |
1065 | } | ||
1029 | } | 1066 | } |
1030 | 1067 | ||
1031 | res = hotkey_get(&hotkey_orig_status, &hotkey_orig_mask); | 1068 | res = hotkey_get(&hotkey_orig_status, &hotkey_orig_mask); |
@@ -1131,6 +1168,8 @@ static void tpacpi_input_send_key(unsigned int scancode, | |||
1131 | unsigned int keycode) | 1168 | unsigned int keycode) |
1132 | { | 1169 | { |
1133 | if (keycode != KEY_RESERVED) { | 1170 | if (keycode != KEY_RESERVED) { |
1171 | mutex_lock(&tpacpi_inputdev_send_mutex); | ||
1172 | |||
1134 | input_report_key(tpacpi_inputdev, keycode, 1); | 1173 | input_report_key(tpacpi_inputdev, keycode, 1); |
1135 | if (keycode == KEY_UNKNOWN) | 1174 | if (keycode == KEY_UNKNOWN) |
1136 | input_event(tpacpi_inputdev, EV_MSC, MSC_SCAN, | 1175 | input_event(tpacpi_inputdev, EV_MSC, MSC_SCAN, |
@@ -1142,6 +1181,8 @@ static void tpacpi_input_send_key(unsigned int scancode, | |||
1142 | input_event(tpacpi_inputdev, EV_MSC, MSC_SCAN, | 1181 | input_event(tpacpi_inputdev, EV_MSC, MSC_SCAN, |
1143 | scancode); | 1182 | scancode); |
1144 | input_sync(tpacpi_inputdev); | 1183 | input_sync(tpacpi_inputdev); |
1184 | |||
1185 | mutex_unlock(&tpacpi_inputdev_send_mutex); | ||
1145 | } | 1186 | } |
1146 | } | 1187 | } |
1147 | 1188 | ||
@@ -1149,18 +1190,47 @@ static void tpacpi_input_send_radiosw(void) | |||
1149 | { | 1190 | { |
1150 | int wlsw; | 1191 | int wlsw; |
1151 | 1192 | ||
1152 | if (tp_features.hotkey_wlsw && !hotkey_get_wlsw(&wlsw)) | 1193 | mutex_lock(&tpacpi_inputdev_send_mutex); |
1194 | |||
1195 | if (tp_features.hotkey_wlsw && !hotkey_get_wlsw(&wlsw)) { | ||
1153 | input_report_switch(tpacpi_inputdev, | 1196 | input_report_switch(tpacpi_inputdev, |
1154 | SW_RADIO, !!wlsw); | 1197 | SW_RADIO, !!wlsw); |
1198 | input_sync(tpacpi_inputdev); | ||
1199 | } | ||
1200 | |||
1201 | mutex_unlock(&tpacpi_inputdev_send_mutex); | ||
1155 | } | 1202 | } |
1156 | 1203 | ||
1157 | static void hotkey_notify(struct ibm_struct *ibm, u32 event) | 1204 | static void hotkey_notify(struct ibm_struct *ibm, u32 event) |
1158 | { | 1205 | { |
1159 | u32 hkey; | 1206 | u32 hkey; |
1160 | unsigned int keycode, scancode; | 1207 | unsigned int keycode, scancode; |
1161 | int send_acpi_ev = 0; | 1208 | int send_acpi_ev; |
1209 | int ignore_acpi_ev; | ||
1210 | |||
1211 | if (event != 0x80) { | ||
1212 | printk(IBM_ERR "unknown HKEY notification event %d\n", event); | ||
1213 | /* forward it to userspace, maybe it knows how to handle it */ | ||
1214 | acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class, | ||
1215 | ibm->acpi->device->dev.bus_id, | ||
1216 | event, 0); | ||
1217 | return; | ||
1218 | } | ||
1219 | |||
1220 | while (1) { | ||
1221 | if (!acpi_evalf(hkey_handle, &hkey, "MHKP", "d")) { | ||
1222 | printk(IBM_ERR "failed to retrieve HKEY event\n"); | ||
1223 | return; | ||
1224 | } | ||
1225 | |||
1226 | if (hkey == 0) { | ||
1227 | /* queue empty */ | ||
1228 | return; | ||
1229 | } | ||
1230 | |||
1231 | send_acpi_ev = 0; | ||
1232 | ignore_acpi_ev = 0; | ||
1162 | 1233 | ||
1163 | if (event == 0x80 && acpi_evalf(hkey_handle, &hkey, "MHKP", "d")) { | ||
1164 | switch (hkey >> 12) { | 1234 | switch (hkey >> 12) { |
1165 | case 1: | 1235 | case 1: |
1166 | /* 0x1000-0x1FFF: key presses */ | 1236 | /* 0x1000-0x1FFF: key presses */ |
@@ -1182,9 +1252,11 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event) | |||
1182 | * eat up known LID events */ | 1252 | * eat up known LID events */ |
1183 | if (hkey != 0x5001 && hkey != 0x5002) { | 1253 | if (hkey != 0x5001 && hkey != 0x5002) { |
1184 | printk(IBM_ERR | 1254 | printk(IBM_ERR |
1185 | "unknown LID-related hotkey event: 0x%04x\n", | 1255 | "unknown LID-related HKEY event: 0x%04x\n", |
1186 | hkey); | 1256 | hkey); |
1187 | send_acpi_ev = 1; | 1257 | send_acpi_ev = 1; |
1258 | } else { | ||
1259 | ignore_acpi_ev = 1; | ||
1188 | } | 1260 | } |
1189 | break; | 1261 | break; |
1190 | case 7: | 1262 | case 7: |
@@ -1202,21 +1274,18 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event) | |||
1202 | printk(IBM_NOTICE "unhandled HKEY event 0x%04x\n", hkey); | 1274 | printk(IBM_NOTICE "unhandled HKEY event 0x%04x\n", hkey); |
1203 | send_acpi_ev = 1; | 1275 | send_acpi_ev = 1; |
1204 | } | 1276 | } |
1205 | } else { | ||
1206 | printk(IBM_ERR "unknown hotkey notification event %d\n", event); | ||
1207 | hkey = 0; | ||
1208 | send_acpi_ev = 1; | ||
1209 | } | ||
1210 | 1277 | ||
1211 | /* Legacy events */ | 1278 | /* Legacy events */ |
1212 | if (send_acpi_ev || hotkey_report_mode < 2) | 1279 | if (!ignore_acpi_ev && (send_acpi_ev || hotkey_report_mode < 2)) { |
1213 | acpi_bus_generate_proc_event(ibm->acpi->device, event, hkey); | 1280 | acpi_bus_generate_proc_event(ibm->acpi->device, event, hkey); |
1281 | } | ||
1214 | 1282 | ||
1215 | /* netlink events */ | 1283 | /* netlink events */ |
1216 | if (send_acpi_ev) { | 1284 | if (!ignore_acpi_ev && send_acpi_ev) { |
1217 | acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class, | 1285 | acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class, |
1218 | ibm->acpi->device->dev.bus_id, | 1286 | ibm->acpi->device->dev.bus_id, |
1219 | event, hkey); | 1287 | event, hkey); |
1288 | } | ||
1220 | } | 1289 | } |
1221 | } | 1290 | } |
1222 | 1291 | ||
@@ -2812,7 +2881,7 @@ static int __init thermal_init(struct ibm_init_struct *iibm) | |||
2812 | 2881 | ||
2813 | switch(thermal_read_mode) { | 2882 | switch(thermal_read_mode) { |
2814 | case TPACPI_THERMAL_TPEC_16: | 2883 | case TPACPI_THERMAL_TPEC_16: |
2815 | res = sysfs_create_group(&tpacpi_pdev->dev.kobj, | 2884 | res = sysfs_create_group(&tpacpi_sensors_pdev->dev.kobj, |
2816 | &thermal_temp_input16_group); | 2885 | &thermal_temp_input16_group); |
2817 | if (res) | 2886 | if (res) |
2818 | return res; | 2887 | return res; |
@@ -2820,7 +2889,7 @@ static int __init thermal_init(struct ibm_init_struct *iibm) | |||
2820 | case TPACPI_THERMAL_TPEC_8: | 2889 | case TPACPI_THERMAL_TPEC_8: |
2821 | case TPACPI_THERMAL_ACPI_TMP07: | 2890 | case TPACPI_THERMAL_ACPI_TMP07: |
2822 | case TPACPI_THERMAL_ACPI_UPDT: | 2891 | case TPACPI_THERMAL_ACPI_UPDT: |
2823 | res = sysfs_create_group(&tpacpi_pdev->dev.kobj, | 2892 | res = sysfs_create_group(&tpacpi_sensors_pdev->dev.kobj, |
2824 | &thermal_temp_input8_group); | 2893 | &thermal_temp_input8_group); |
2825 | if (res) | 2894 | if (res) |
2826 | return res; | 2895 | return res; |
@@ -2837,13 +2906,13 @@ static void thermal_exit(void) | |||
2837 | { | 2906 | { |
2838 | switch(thermal_read_mode) { | 2907 | switch(thermal_read_mode) { |
2839 | case TPACPI_THERMAL_TPEC_16: | 2908 | case TPACPI_THERMAL_TPEC_16: |
2840 | sysfs_remove_group(&tpacpi_pdev->dev.kobj, | 2909 | sysfs_remove_group(&tpacpi_sensors_pdev->dev.kobj, |
2841 | &thermal_temp_input16_group); | 2910 | &thermal_temp_input16_group); |
2842 | break; | 2911 | break; |
2843 | case TPACPI_THERMAL_TPEC_8: | 2912 | case TPACPI_THERMAL_TPEC_8: |
2844 | case TPACPI_THERMAL_ACPI_TMP07: | 2913 | case TPACPI_THERMAL_ACPI_TMP07: |
2845 | case TPACPI_THERMAL_ACPI_UPDT: | 2914 | case TPACPI_THERMAL_ACPI_UPDT: |
2846 | sysfs_remove_group(&tpacpi_pdev->dev.kobj, | 2915 | sysfs_remove_group(&tpacpi_sensors_pdev->dev.kobj, |
2847 | &thermal_temp_input16_group); | 2916 | &thermal_temp_input16_group); |
2848 | break; | 2917 | break; |
2849 | case TPACPI_THERMAL_NONE: | 2918 | case TPACPI_THERMAL_NONE: |
@@ -3626,7 +3695,7 @@ static struct device_attribute dev_attr_fan_fan1_input = | |||
3626 | __ATTR(fan1_input, S_IRUGO, | 3695 | __ATTR(fan1_input, S_IRUGO, |
3627 | fan_fan1_input_show, NULL); | 3696 | fan_fan1_input_show, NULL); |
3628 | 3697 | ||
3629 | /* sysfs fan fan_watchdog (driver) ------------------------------------- */ | 3698 | /* sysfs fan fan_watchdog (hwmon driver) ------------------------------- */ |
3630 | static ssize_t fan_fan_watchdog_show(struct device_driver *drv, | 3699 | static ssize_t fan_fan_watchdog_show(struct device_driver *drv, |
3631 | char *buf) | 3700 | char *buf) |
3632 | { | 3701 | { |
@@ -3768,10 +3837,10 @@ static int __init fan_init(struct ibm_init_struct *iibm) | |||
3768 | 3837 | ||
3769 | if (fan_status_access_mode != TPACPI_FAN_NONE || | 3838 | if (fan_status_access_mode != TPACPI_FAN_NONE || |
3770 | fan_control_access_mode != TPACPI_FAN_WR_NONE) { | 3839 | fan_control_access_mode != TPACPI_FAN_WR_NONE) { |
3771 | rc = sysfs_create_group(&tpacpi_pdev->dev.kobj, | 3840 | rc = sysfs_create_group(&tpacpi_sensors_pdev->dev.kobj, |
3772 | &fan_attr_group); | 3841 | &fan_attr_group); |
3773 | if (!(rc < 0)) | 3842 | if (!(rc < 0)) |
3774 | rc = driver_create_file(&tpacpi_pdriver.driver, | 3843 | rc = driver_create_file(&tpacpi_hwmon_pdriver.driver, |
3775 | &driver_attr_fan_watchdog); | 3844 | &driver_attr_fan_watchdog); |
3776 | if (rc < 0) | 3845 | if (rc < 0) |
3777 | return rc; | 3846 | return rc; |
@@ -3854,8 +3923,8 @@ static void fan_exit(void) | |||
3854 | vdbg_printk(TPACPI_DBG_EXIT, "cancelling any pending fan watchdog tasks\n"); | 3923 | vdbg_printk(TPACPI_DBG_EXIT, "cancelling any pending fan watchdog tasks\n"); |
3855 | 3924 | ||
3856 | /* FIXME: can we really do this unconditionally? */ | 3925 | /* FIXME: can we really do this unconditionally? */ |
3857 | sysfs_remove_group(&tpacpi_pdev->dev.kobj, &fan_attr_group); | 3926 | sysfs_remove_group(&tpacpi_sensors_pdev->dev.kobj, &fan_attr_group); |
3858 | driver_remove_file(&tpacpi_pdriver.driver, &driver_attr_fan_watchdog); | 3927 | driver_remove_file(&tpacpi_hwmon_pdriver.driver, &driver_attr_fan_watchdog); |
3859 | 3928 | ||
3860 | cancel_delayed_work(&fan_watchdog_task); | 3929 | cancel_delayed_work(&fan_watchdog_task); |
3861 | flush_scheduled_work(); | 3930 | flush_scheduled_work(); |
@@ -3888,6 +3957,9 @@ static void fan_watchdog_fire(struct work_struct *ignored) | |||
3888 | { | 3957 | { |
3889 | int rc; | 3958 | int rc; |
3890 | 3959 | ||
3960 | if (tpacpi_lifecycle != TPACPI_LIFE_RUNNING) | ||
3961 | return; | ||
3962 | |||
3891 | printk(IBM_NOTICE "fan watchdog: enabling fan\n"); | 3963 | printk(IBM_NOTICE "fan watchdog: enabling fan\n"); |
3892 | rc = fan_set_enable(); | 3964 | rc = fan_set_enable(); |
3893 | if (rc < 0) { | 3965 | if (rc < 0) { |
@@ -3908,7 +3980,8 @@ static void fan_watchdog_reset(void) | |||
3908 | if (fan_watchdog_active) | 3980 | if (fan_watchdog_active) |
3909 | cancel_delayed_work(&fan_watchdog_task); | 3981 | cancel_delayed_work(&fan_watchdog_task); |
3910 | 3982 | ||
3911 | if (fan_watchdog_maxinterval > 0) { | 3983 | if (fan_watchdog_maxinterval > 0 && |
3984 | tpacpi_lifecycle != TPACPI_LIFE_EXITING) { | ||
3912 | fan_watchdog_active = 1; | 3985 | fan_watchdog_active = 1; |
3913 | if (!schedule_delayed_work(&fan_watchdog_task, | 3986 | if (!schedule_delayed_work(&fan_watchdog_task, |
3914 | msecs_to_jiffies(fan_watchdog_maxinterval | 3987 | msecs_to_jiffies(fan_watchdog_maxinterval |
@@ -4302,6 +4375,19 @@ static struct ibm_struct fan_driver_data = { | |||
4302 | **************************************************************************** | 4375 | **************************************************************************** |
4303 | ****************************************************************************/ | 4376 | ****************************************************************************/ |
4304 | 4377 | ||
4378 | /* sysfs name ---------------------------------------------------------- */ | ||
4379 | static ssize_t thinkpad_acpi_pdev_name_show(struct device *dev, | ||
4380 | struct device_attribute *attr, | ||
4381 | char *buf) | ||
4382 | { | ||
4383 | return snprintf(buf, PAGE_SIZE, "%s\n", IBM_NAME); | ||
4384 | } | ||
4385 | |||
4386 | static struct device_attribute dev_attr_thinkpad_acpi_pdev_name = | ||
4387 | __ATTR(name, S_IRUGO, thinkpad_acpi_pdev_name_show, NULL); | ||
4388 | |||
4389 | /* --------------------------------------------------------------------- */ | ||
4390 | |||
4305 | /* /proc support */ | 4391 | /* /proc support */ |
4306 | static struct proc_dir_entry *proc_dir; | 4392 | static struct proc_dir_entry *proc_dir; |
4307 | 4393 | ||
@@ -4674,6 +4760,8 @@ static int __init thinkpad_acpi_module_init(void) | |||
4674 | { | 4760 | { |
4675 | int ret, i; | 4761 | int ret, i; |
4676 | 4762 | ||
4763 | tpacpi_lifecycle = TPACPI_LIFE_INIT; | ||
4764 | |||
4677 | /* Parameter checking */ | 4765 | /* Parameter checking */ |
4678 | if (hotkey_report_mode > 2) | 4766 | if (hotkey_report_mode > 2) |
4679 | return -EINVAL; | 4767 | return -EINVAL; |
@@ -4702,19 +4790,31 @@ static int __init thinkpad_acpi_module_init(void) | |||
4702 | 4790 | ||
4703 | ret = platform_driver_register(&tpacpi_pdriver); | 4791 | ret = platform_driver_register(&tpacpi_pdriver); |
4704 | if (ret) { | 4792 | if (ret) { |
4705 | printk(IBM_ERR "unable to register platform driver\n"); | 4793 | printk(IBM_ERR "unable to register main platform driver\n"); |
4706 | thinkpad_acpi_module_exit(); | 4794 | thinkpad_acpi_module_exit(); |
4707 | return ret; | 4795 | return ret; |
4708 | } | 4796 | } |
4709 | tp_features.platform_drv_registered = 1; | 4797 | tp_features.platform_drv_registered = 1; |
4710 | 4798 | ||
4799 | ret = platform_driver_register(&tpacpi_hwmon_pdriver); | ||
4800 | if (ret) { | ||
4801 | printk(IBM_ERR "unable to register hwmon platform driver\n"); | ||
4802 | thinkpad_acpi_module_exit(); | ||
4803 | return ret; | ||
4804 | } | ||
4805 | tp_features.sensors_pdrv_registered = 1; | ||
4806 | |||
4711 | ret = tpacpi_create_driver_attributes(&tpacpi_pdriver.driver); | 4807 | ret = tpacpi_create_driver_attributes(&tpacpi_pdriver.driver); |
4808 | if (!ret) { | ||
4809 | tp_features.platform_drv_attrs_registered = 1; | ||
4810 | ret = tpacpi_create_driver_attributes(&tpacpi_hwmon_pdriver.driver); | ||
4811 | } | ||
4712 | if (ret) { | 4812 | if (ret) { |
4713 | printk(IBM_ERR "unable to create sysfs driver attributes\n"); | 4813 | printk(IBM_ERR "unable to create sysfs driver attributes\n"); |
4714 | thinkpad_acpi_module_exit(); | 4814 | thinkpad_acpi_module_exit(); |
4715 | return ret; | 4815 | return ret; |
4716 | } | 4816 | } |
4717 | tp_features.platform_drv_attrs_registered = 1; | 4817 | tp_features.sensors_pdrv_attrs_registered = 1; |
4718 | 4818 | ||
4719 | 4819 | ||
4720 | /* Device initialization */ | 4820 | /* Device initialization */ |
@@ -4727,7 +4827,26 @@ static int __init thinkpad_acpi_module_init(void) | |||
4727 | thinkpad_acpi_module_exit(); | 4827 | thinkpad_acpi_module_exit(); |
4728 | return ret; | 4828 | return ret; |
4729 | } | 4829 | } |
4730 | tpacpi_hwmon = hwmon_device_register(&tpacpi_pdev->dev); | 4830 | tpacpi_sensors_pdev = platform_device_register_simple( |
4831 | IBM_HWMON_DRVR_NAME, | ||
4832 | -1, NULL, 0); | ||
4833 | if (IS_ERR(tpacpi_sensors_pdev)) { | ||
4834 | ret = PTR_ERR(tpacpi_sensors_pdev); | ||
4835 | tpacpi_sensors_pdev = NULL; | ||
4836 | printk(IBM_ERR "unable to register hwmon platform device\n"); | ||
4837 | thinkpad_acpi_module_exit(); | ||
4838 | return ret; | ||
4839 | } | ||
4840 | ret = device_create_file(&tpacpi_sensors_pdev->dev, | ||
4841 | &dev_attr_thinkpad_acpi_pdev_name); | ||
4842 | if (ret) { | ||
4843 | printk(IBM_ERR | ||
4844 | "unable to create sysfs hwmon device attributes\n"); | ||
4845 | thinkpad_acpi_module_exit(); | ||
4846 | return ret; | ||
4847 | } | ||
4848 | tp_features.sensors_pdev_attrs_registered = 1; | ||
4849 | tpacpi_hwmon = hwmon_device_register(&tpacpi_sensors_pdev->dev); | ||
4731 | if (IS_ERR(tpacpi_hwmon)) { | 4850 | if (IS_ERR(tpacpi_hwmon)) { |
4732 | ret = PTR_ERR(tpacpi_hwmon); | 4851 | ret = PTR_ERR(tpacpi_hwmon); |
4733 | tpacpi_hwmon = NULL; | 4852 | tpacpi_hwmon = NULL; |
@@ -4735,6 +4854,7 @@ static int __init thinkpad_acpi_module_init(void) | |||
4735 | thinkpad_acpi_module_exit(); | 4854 | thinkpad_acpi_module_exit(); |
4736 | return ret; | 4855 | return ret; |
4737 | } | 4856 | } |
4857 | mutex_init(&tpacpi_inputdev_send_mutex); | ||
4738 | tpacpi_inputdev = input_allocate_device(); | 4858 | tpacpi_inputdev = input_allocate_device(); |
4739 | if (!tpacpi_inputdev) { | 4859 | if (!tpacpi_inputdev) { |
4740 | printk(IBM_ERR "unable to allocate input device\n"); | 4860 | printk(IBM_ERR "unable to allocate input device\n"); |
@@ -4769,6 +4889,7 @@ static int __init thinkpad_acpi_module_init(void) | |||
4769 | tp_features.input_device_registered = 1; | 4889 | tp_features.input_device_registered = 1; |
4770 | } | 4890 | } |
4771 | 4891 | ||
4892 | tpacpi_lifecycle = TPACPI_LIFE_RUNNING; | ||
4772 | return 0; | 4893 | return 0; |
4773 | } | 4894 | } |
4774 | 4895 | ||
@@ -4776,6 +4897,8 @@ static void thinkpad_acpi_module_exit(void) | |||
4776 | { | 4897 | { |
4777 | struct ibm_struct *ibm, *itmp; | 4898 | struct ibm_struct *ibm, *itmp; |
4778 | 4899 | ||
4900 | tpacpi_lifecycle = TPACPI_LIFE_EXITING; | ||
4901 | |||
4779 | list_for_each_entry_safe_reverse(ibm, itmp, | 4902 | list_for_each_entry_safe_reverse(ibm, itmp, |
4780 | &tpacpi_all_drivers, | 4903 | &tpacpi_all_drivers, |
4781 | all_drivers) { | 4904 | all_drivers) { |
@@ -4794,12 +4917,22 @@ static void thinkpad_acpi_module_exit(void) | |||
4794 | if (tpacpi_hwmon) | 4917 | if (tpacpi_hwmon) |
4795 | hwmon_device_unregister(tpacpi_hwmon); | 4918 | hwmon_device_unregister(tpacpi_hwmon); |
4796 | 4919 | ||
4920 | if (tp_features.sensors_pdev_attrs_registered) | ||
4921 | device_remove_file(&tpacpi_sensors_pdev->dev, | ||
4922 | &dev_attr_thinkpad_acpi_pdev_name); | ||
4923 | if (tpacpi_sensors_pdev) | ||
4924 | platform_device_unregister(tpacpi_sensors_pdev); | ||
4797 | if (tpacpi_pdev) | 4925 | if (tpacpi_pdev) |
4798 | platform_device_unregister(tpacpi_pdev); | 4926 | platform_device_unregister(tpacpi_pdev); |
4799 | 4927 | ||
4928 | if (tp_features.sensors_pdrv_attrs_registered) | ||
4929 | tpacpi_remove_driver_attributes(&tpacpi_hwmon_pdriver.driver); | ||
4800 | if (tp_features.platform_drv_attrs_registered) | 4930 | if (tp_features.platform_drv_attrs_registered) |
4801 | tpacpi_remove_driver_attributes(&tpacpi_pdriver.driver); | 4931 | tpacpi_remove_driver_attributes(&tpacpi_pdriver.driver); |
4802 | 4932 | ||
4933 | if (tp_features.sensors_pdrv_registered) | ||
4934 | platform_driver_unregister(&tpacpi_hwmon_pdriver); | ||
4935 | |||
4803 | if (tp_features.platform_drv_registered) | 4936 | if (tp_features.platform_drv_registered) |
4804 | platform_driver_unregister(&tpacpi_pdriver); | 4937 | platform_driver_unregister(&tpacpi_pdriver); |
4805 | 4938 | ||
diff --git a/drivers/misc/thinkpad_acpi.h b/drivers/misc/thinkpad_acpi.h index acd5835ec88..3abcc812063 100644 --- a/drivers/misc/thinkpad_acpi.h +++ b/drivers/misc/thinkpad_acpi.h | |||
@@ -58,13 +58,14 @@ | |||
58 | 58 | ||
59 | #define IBM_NAME "thinkpad" | 59 | #define IBM_NAME "thinkpad" |
60 | #define IBM_DESC "ThinkPad ACPI Extras" | 60 | #define IBM_DESC "ThinkPad ACPI Extras" |
61 | #define IBM_FILE "thinkpad_acpi" | 61 | #define IBM_FILE IBM_NAME "_acpi" |
62 | #define IBM_URL "http://ibm-acpi.sf.net/" | 62 | #define IBM_URL "http://ibm-acpi.sf.net/" |
63 | #define IBM_MAIL "ibm-acpi-devel@lists.sourceforge.net" | 63 | #define IBM_MAIL "ibm-acpi-devel@lists.sourceforge.net" |
64 | 64 | ||
65 | #define IBM_PROC_DIR "ibm" | 65 | #define IBM_PROC_DIR "ibm" |
66 | #define IBM_ACPI_EVENT_PREFIX "ibm" | 66 | #define IBM_ACPI_EVENT_PREFIX "ibm" |
67 | #define IBM_DRVR_NAME IBM_FILE | 67 | #define IBM_DRVR_NAME IBM_FILE |
68 | #define IBM_HWMON_DRVR_NAME IBM_NAME "_hwmon" | ||
68 | 69 | ||
69 | #define IBM_LOG IBM_FILE ": " | 70 | #define IBM_LOG IBM_FILE ": " |
70 | #define IBM_ERR KERN_ERR IBM_LOG | 71 | #define IBM_ERR KERN_ERR IBM_LOG |
@@ -171,6 +172,7 @@ static int parse_strtoul(const char *buf, unsigned long max, | |||
171 | 172 | ||
172 | /* Device model */ | 173 | /* Device model */ |
173 | static struct platform_device *tpacpi_pdev; | 174 | static struct platform_device *tpacpi_pdev; |
175 | static struct platform_device *tpacpi_sensors_pdev; | ||
174 | static struct device *tpacpi_hwmon; | 176 | static struct device *tpacpi_hwmon; |
175 | static struct platform_driver tpacpi_pdriver; | 177 | static struct platform_driver tpacpi_pdriver; |
176 | static struct input_dev *tpacpi_inputdev; | 178 | static struct input_dev *tpacpi_inputdev; |
@@ -233,22 +235,25 @@ struct ibm_init_struct { | |||
233 | 235 | ||
234 | static struct { | 236 | static struct { |
235 | #ifdef CONFIG_THINKPAD_ACPI_BAY | 237 | #ifdef CONFIG_THINKPAD_ACPI_BAY |
236 | u16 bay_status:1; | 238 | u32 bay_status:1; |
237 | u16 bay_eject:1; | 239 | u32 bay_eject:1; |
238 | u16 bay_status2:1; | 240 | u32 bay_status2:1; |
239 | u16 bay_eject2:1; | 241 | u32 bay_eject2:1; |
240 | #endif | 242 | #endif |
241 | u16 bluetooth:1; | 243 | u32 bluetooth:1; |
242 | u16 hotkey:1; | 244 | u32 hotkey:1; |
243 | u16 hotkey_mask:1; | 245 | u32 hotkey_mask:1; |
244 | u16 hotkey_wlsw:1; | 246 | u32 hotkey_wlsw:1; |
245 | u16 light:1; | 247 | u32 light:1; |
246 | u16 light_status:1; | 248 | u32 light_status:1; |
247 | u16 wan:1; | 249 | u32 wan:1; |
248 | u16 fan_ctrl_status_undef:1; | 250 | u32 fan_ctrl_status_undef:1; |
249 | u16 input_device_registered:1; | 251 | u32 input_device_registered:1; |
250 | u16 platform_drv_registered:1; | 252 | u32 platform_drv_registered:1; |
251 | u16 platform_drv_attrs_registered:1; | 253 | u32 platform_drv_attrs_registered:1; |
254 | u32 sensors_pdrv_registered:1; | ||
255 | u32 sensors_pdrv_attrs_registered:1; | ||
256 | u32 sensors_pdev_attrs_registered:1; | ||
252 | } tp_features; | 257 | } tp_features; |
253 | 258 | ||
254 | struct thinkpad_id_data { | 259 | struct thinkpad_id_data { |
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig index 2a2a125b0c7..a592fc04cf7 100644 --- a/drivers/mtd/maps/Kconfig +++ b/drivers/mtd/maps/Kconfig | |||
@@ -54,7 +54,7 @@ config MTD_PHYSMAP_BANKWIDTH | |||
54 | help | 54 | help |
55 | This is the total width of the data bus of the flash devices | 55 | This is the total width of the data bus of the flash devices |
56 | in octets. For example, if you have a data bus width of 32 | 56 | in octets. For example, if you have a data bus width of 32 |
57 | bits, you would set the bus width octect value to 4. This is | 57 | bits, you would set the bus width octet value to 4. This is |
58 | used internally by the CFI drivers. | 58 | used internally by the CFI drivers. |
59 | Ignore this option if you use run-time physmap configuration | 59 | Ignore this option if you use run-time physmap configuration |
60 | (i.e., run-time calling physmap_configure()). | 60 | (i.e., run-time calling physmap_configure()). |
@@ -73,12 +73,12 @@ config MTD_PMC_MSP_EVM | |||
73 | depends on PMC_MSP && MTD_CFI | 73 | depends on PMC_MSP && MTD_CFI |
74 | select MTD_PARTITIONS | 74 | select MTD_PARTITIONS |
75 | help | 75 | help |
76 | This provides a 'mapping' driver which support the way | 76 | This provides a 'mapping' driver which supports the way |
77 | in which user-programmable flash chips are connected on the | 77 | in which user-programmable flash chips are connected on the |
78 | PMC-Sierra MSP eval/demo boards | 78 | PMC-Sierra MSP eval/demo boards. |
79 | 79 | ||
80 | choice | 80 | choice |
81 | prompt "Maximum mappable memory avialable for flash IO" | 81 | prompt "Maximum mappable memory available for flash IO" |
82 | depends on MTD_PMC_MSP_EVM | 82 | depends on MTD_PMC_MSP_EVM |
83 | default MSP_FLASH_MAP_LIMIT_32M | 83 | default MSP_FLASH_MAP_LIMIT_32M |
84 | 84 | ||
diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index b79a9cf2d16..21b921dd6aa 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c | |||
@@ -696,7 +696,7 @@ static int s3c24xx_nand_probe(struct platform_device *pdev, | |||
696 | 696 | ||
697 | info->clk = clk_get(&pdev->dev, "nand"); | 697 | info->clk = clk_get(&pdev->dev, "nand"); |
698 | if (IS_ERR(info->clk)) { | 698 | if (IS_ERR(info->clk)) { |
699 | dev_err(&pdev->dev, "failed to get clock"); | 699 | dev_err(&pdev->dev, "failed to get clock\n"); |
700 | err = -ENOENT; | 700 | err = -ENOENT; |
701 | goto exit_error; | 701 | goto exit_error; |
702 | } | 702 | } |
diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c index a4f1bf33164..6330c8cc72b 100644 --- a/drivers/mtd/ubi/wl.c +++ b/drivers/mtd/ubi/wl.c | |||
@@ -1309,7 +1309,7 @@ static int ubi_thread(void *u) | |||
1309 | struct ubi_device *ubi = u; | 1309 | struct ubi_device *ubi = u; |
1310 | 1310 | ||
1311 | ubi_msg("background thread \"%s\" started, PID %d", | 1311 | ubi_msg("background thread \"%s\" started, PID %d", |
1312 | ubi->bgt_name, current->pid); | 1312 | ubi->bgt_name, task_pid_nr(current)); |
1313 | 1313 | ||
1314 | set_freezable(); | 1314 | set_freezable(); |
1315 | for (;;) { | 1315 | for (;;) { |
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c index 862f47223fd..6f8e7d4cf74 100644 --- a/drivers/net/3c59x.c +++ b/drivers/net/3c59x.c | |||
@@ -1491,7 +1491,7 @@ vortex_up(struct net_device *dev) | |||
1491 | struct vortex_private *vp = netdev_priv(dev); | 1491 | struct vortex_private *vp = netdev_priv(dev); |
1492 | void __iomem *ioaddr = vp->ioaddr; | 1492 | void __iomem *ioaddr = vp->ioaddr; |
1493 | unsigned int config; | 1493 | unsigned int config; |
1494 | int i, mii_reg1, mii_reg5, err; | 1494 | int i, mii_reg1, mii_reg5, err = 0; |
1495 | 1495 | ||
1496 | if (VORTEX_PCI(vp)) { | 1496 | if (VORTEX_PCI(vp)) { |
1497 | pci_set_power_state(VORTEX_PCI(vp), PCI_D0); /* Go active */ | 1497 | pci_set_power_state(VORTEX_PCI(vp), PCI_D0); /* Go active */ |
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c index 973b684c11e..eef6fecfff2 100644 --- a/drivers/net/8139too.c +++ b/drivers/net/8139too.c | |||
@@ -73,7 +73,7 @@ | |||
73 | 73 | ||
74 | Jean-Jacques Michel - bug fix | 74 | Jean-Jacques Michel - bug fix |
75 | 75 | ||
76 | Tobias Ringström - Rx interrupt status checking suggestion | 76 | Tobias Ringström - Rx interrupt status checking suggestion |
77 | 77 | ||
78 | Andrew Morton - Clear blocked signals, avoid | 78 | Andrew Morton - Clear blocked signals, avoid |
79 | buffer overrun setting current->comm. | 79 | buffer overrun setting current->comm. |
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 83d52c8acab..ce34b539bf3 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -855,7 +855,7 @@ config BFIN_MAC_USE_L1 | |||
855 | depends on BFIN_MAC && BF537 | 855 | depends on BFIN_MAC && BF537 |
856 | default y | 856 | default y |
857 | help | 857 | help |
858 | To get maximum network performace, you should use L1 memory as rx/tx buffers. | 858 | To get maximum network performance, you should use L1 memory as rx/tx buffers. |
859 | Say N here if you want to reserve L1 memory for other uses. | 859 | Say N here if you want to reserve L1 memory for other uses. |
860 | 860 | ||
861 | config BFIN_TX_DESC_NUM | 861 | config BFIN_TX_DESC_NUM |
@@ -1293,9 +1293,6 @@ config PCNET32_NAPI | |||
1293 | deployed on potentially unfriendly networks (e.g. in a firewall), | 1293 | deployed on potentially unfriendly networks (e.g. in a firewall), |
1294 | then say Y here. | 1294 | then say Y here. |
1295 | 1295 | ||
1296 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
1297 | information. | ||
1298 | |||
1299 | If in doubt, say N. | 1296 | If in doubt, say N. |
1300 | 1297 | ||
1301 | config AMD8111_ETH | 1298 | config AMD8111_ETH |
@@ -1313,7 +1310,7 @@ config AMD8111_ETH | |||
1313 | will be called amd8111e. | 1310 | will be called amd8111e. |
1314 | 1311 | ||
1315 | config AMD8111E_NAPI | 1312 | config AMD8111E_NAPI |
1316 | bool "Enable NAPI support" | 1313 | bool "Use RX polling (NAPI)" |
1317 | depends on AMD8111_ETH | 1314 | depends on AMD8111_ETH |
1318 | help | 1315 | help |
1319 | NAPI is a new driver API designed to reduce CPU and interrupt load | 1316 | NAPI is a new driver API designed to reduce CPU and interrupt load |
@@ -1324,9 +1321,6 @@ config AMD8111E_NAPI | |||
1324 | deployed on potentially unfriendly networks (e.g. in a firewall), | 1321 | deployed on potentially unfriendly networks (e.g. in a firewall), |
1325 | then say Y here. | 1322 | then say Y here. |
1326 | 1323 | ||
1327 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
1328 | information. | ||
1329 | |||
1330 | If in doubt, say N. | 1324 | If in doubt, say N. |
1331 | 1325 | ||
1332 | config ADAPTEC_STARFIRE | 1326 | config ADAPTEC_STARFIRE |
@@ -1355,9 +1349,6 @@ config ADAPTEC_STARFIRE_NAPI | |||
1355 | deployed on potentially unfriendly networks (e.g. in a firewall), | 1349 | deployed on potentially unfriendly networks (e.g. in a firewall), |
1356 | then say Y here. | 1350 | then say Y here. |
1357 | 1351 | ||
1358 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
1359 | information. | ||
1360 | |||
1361 | If in doubt, say N. | 1352 | If in doubt, say N. |
1362 | 1353 | ||
1363 | config AC3200 | 1354 | config AC3200 |
@@ -1431,7 +1422,7 @@ config FORCEDETH | |||
1431 | called forcedeth. | 1422 | called forcedeth. |
1432 | 1423 | ||
1433 | config FORCEDETH_NAPI | 1424 | config FORCEDETH_NAPI |
1434 | bool "Use Rx and Tx Polling (NAPI) (EXPERIMENTAL)" | 1425 | bool "Use Rx Polling (NAPI) (EXPERIMENTAL)" |
1435 | depends on FORCEDETH && EXPERIMENTAL | 1426 | depends on FORCEDETH && EXPERIMENTAL |
1436 | help | 1427 | help |
1437 | NAPI is a new driver API designed to reduce CPU and interrupt load | 1428 | NAPI is a new driver API designed to reduce CPU and interrupt load |
@@ -1442,9 +1433,6 @@ config FORCEDETH_NAPI | |||
1442 | deployed on potentially unfriendly networks (e.g. in a firewall), | 1433 | deployed on potentially unfriendly networks (e.g. in a firewall), |
1443 | then say Y here. | 1434 | then say Y here. |
1444 | 1435 | ||
1445 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
1446 | information. | ||
1447 | |||
1448 | If in doubt, say N. | 1436 | If in doubt, say N. |
1449 | 1437 | ||
1450 | config CS89x0 | 1438 | config CS89x0 |
@@ -1756,9 +1744,6 @@ config VIA_RHINE_NAPI | |||
1756 | deployed on potentially unfriendly networks (e.g. in a firewall), | 1744 | deployed on potentially unfriendly networks (e.g. in a firewall), |
1757 | then say Y here. | 1745 | then say Y here. |
1758 | 1746 | ||
1759 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
1760 | information. | ||
1761 | |||
1762 | config LAN_SAA9730 | 1747 | config LAN_SAA9730 |
1763 | bool "Philips SAA9730 Ethernet support" | 1748 | bool "Philips SAA9730 Ethernet support" |
1764 | depends on NET_PCI && PCI && MIPS_ATLAS | 1749 | depends on NET_PCI && PCI && MIPS_ATLAS |
@@ -2003,9 +1988,6 @@ config E1000_NAPI | |||
2003 | deployed on potentially unfriendly networks (e.g. in a firewall), | 1988 | deployed on potentially unfriendly networks (e.g. in a firewall), |
2004 | then say Y here. | 1989 | then say Y here. |
2005 | 1990 | ||
2006 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
2007 | information. | ||
2008 | |||
2009 | If in doubt, say N. | 1991 | If in doubt, say N. |
2010 | 1992 | ||
2011 | config E1000_DISABLE_PACKET_SPLIT | 1993 | config E1000_DISABLE_PACKET_SPLIT |
@@ -2099,7 +2081,7 @@ config R8169 | |||
2099 | will be called r8169. This is recommended. | 2081 | will be called r8169. This is recommended. |
2100 | 2082 | ||
2101 | config R8169_NAPI | 2083 | config R8169_NAPI |
2102 | bool "Use Rx and Tx Polling (NAPI) (EXPERIMENTAL)" | 2084 | bool "Use Rx Polling (NAPI) (EXPERIMENTAL)" |
2103 | depends on R8169 && EXPERIMENTAL | 2085 | depends on R8169 && EXPERIMENTAL |
2104 | help | 2086 | help |
2105 | NAPI is a new driver API designed to reduce CPU and interrupt load | 2087 | NAPI is a new driver API designed to reduce CPU and interrupt load |
@@ -2110,9 +2092,6 @@ config R8169_NAPI | |||
2110 | deployed on potentially unfriendly networks (e.g. in a firewall), | 2092 | deployed on potentially unfriendly networks (e.g. in a firewall), |
2111 | then say Y here. | 2093 | then say Y here. |
2112 | 2094 | ||
2113 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
2114 | information. | ||
2115 | |||
2116 | If in doubt, say N. | 2095 | If in doubt, say N. |
2117 | 2096 | ||
2118 | config R8169_VLAN | 2097 | config R8169_VLAN |
@@ -2364,7 +2343,7 @@ config GIANFAR | |||
2364 | and MPC86xx family of chips, and the FEC on the 8540. | 2343 | and MPC86xx family of chips, and the FEC on the 8540. |
2365 | 2344 | ||
2366 | config GFAR_NAPI | 2345 | config GFAR_NAPI |
2367 | bool "NAPI Support" | 2346 | bool "Use Rx Polling (NAPI)" |
2368 | depends on GIANFAR | 2347 | depends on GIANFAR |
2369 | 2348 | ||
2370 | config UCC_GETH | 2349 | config UCC_GETH |
@@ -2376,7 +2355,7 @@ config UCC_GETH | |||
2376 | which is available on some Freescale SOCs. | 2355 | which is available on some Freescale SOCs. |
2377 | 2356 | ||
2378 | config UGETH_NAPI | 2357 | config UGETH_NAPI |
2379 | bool "NAPI Support" | 2358 | bool "Use Rx Polling (NAPI)" |
2380 | depends on UCC_GETH | 2359 | depends on UCC_GETH |
2381 | 2360 | ||
2382 | config UGETH_MAGIC_PACKET | 2361 | config UGETH_MAGIC_PACKET |
@@ -2494,7 +2473,7 @@ config CHELSIO_T3 | |||
2494 | 2473 | ||
2495 | config EHEA | 2474 | config EHEA |
2496 | tristate "eHEA Ethernet support" | 2475 | tristate "eHEA Ethernet support" |
2497 | depends on IBMEBUS | 2476 | depends on IBMEBUS && INET |
2498 | select INET_LRO | 2477 | select INET_LRO |
2499 | ---help--- | 2478 | ---help--- |
2500 | This driver supports the IBM pSeries eHEA ethernet adapter. | 2479 | This driver supports the IBM pSeries eHEA ethernet adapter. |
@@ -2559,9 +2538,6 @@ config IXGB_NAPI | |||
2559 | deployed on potentially unfriendly networks (e.g. in a firewall), | 2538 | deployed on potentially unfriendly networks (e.g. in a firewall), |
2560 | then say Y here. | 2539 | then say Y here. |
2561 | 2540 | ||
2562 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
2563 | information. | ||
2564 | |||
2565 | If in doubt, say N. | 2541 | If in doubt, say N. |
2566 | 2542 | ||
2567 | config S2IO | 2543 | config S2IO |
@@ -2584,14 +2560,11 @@ config S2IO_NAPI | |||
2584 | deployed on potentially unfriendly networks (e.g. in a firewall), | 2560 | deployed on potentially unfriendly networks (e.g. in a firewall), |
2585 | then say Y here. | 2561 | then say Y here. |
2586 | 2562 | ||
2587 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
2588 | information. | ||
2589 | |||
2590 | If in doubt, say N. | 2563 | If in doubt, say N. |
2591 | 2564 | ||
2592 | config MYRI10GE | 2565 | config MYRI10GE |
2593 | tristate "Myricom Myri-10G Ethernet support" | 2566 | tristate "Myricom Myri-10G Ethernet support" |
2594 | depends on PCI | 2567 | depends on PCI && INET |
2595 | select FW_LOADER | 2568 | select FW_LOADER |
2596 | select CRC32 | 2569 | select CRC32 |
2597 | select INET_LRO | 2570 | select INET_LRO |
diff --git a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c index 1cc74ec88a5..eebf5bb2b03 100644 --- a/drivers/net/amd8111e.c +++ b/drivers/net/amd8111e.c | |||
@@ -1111,7 +1111,7 @@ static struct net_device_stats *amd8111e_get_stats(struct net_device * dev) | |||
1111 | 1111 | ||
1112 | return new_stats; | 1112 | return new_stats; |
1113 | } | 1113 | } |
1114 | /* This function recalculate the interupt coalescing mode on every interrupt | 1114 | /* This function recalculate the interrupt coalescing mode on every interrupt |
1115 | according to the datarate and the packet rate. | 1115 | according to the datarate and the packet rate. |
1116 | */ | 1116 | */ |
1117 | static int amd8111e_calc_coalesce(struct net_device *dev) | 1117 | static int amd8111e_calc_coalesce(struct net_device *dev) |
diff --git a/drivers/net/ariadne.c b/drivers/net/ariadne.c index 3fa3bccd1ad..10f3a196be3 100644 --- a/drivers/net/ariadne.c +++ b/drivers/net/ariadne.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Amiga Linux/m68k Ariadne Ethernet Driver | 2 | * Amiga Linux/m68k Ariadne Ethernet Driver |
3 | * | 3 | * |
4 | * © Copyright 1995-2003 by Geert Uytterhoeven (geert@linux-m68k.org) | 4 | * © Copyright 1995-2003 by Geert Uytterhoeven (geert@linux-m68k.org) |
5 | * Peter De Schrijver (p2@mind.be) | 5 | * Peter De Schrijver (p2@mind.be) |
6 | * | 6 | * |
7 | * --------------------------------------------------------------------------- | 7 | * --------------------------------------------------------------------------- |
diff --git a/drivers/net/ariadne.h b/drivers/net/ariadne.h index f7913d5a39f..bb613f292e0 100644 --- a/drivers/net/ariadne.h +++ b/drivers/net/ariadne.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Amiga Linux/m68k Ariadne Ethernet Driver | 2 | * Amiga Linux/m68k Ariadne Ethernet Driver |
3 | * | 3 | * |
4 | * © Copyright 1995 by Geert Uytterhoeven (geert@linux-m68k.org) | 4 | * © Copyright 1995 by Geert Uytterhoeven (geert@linux-m68k.org) |
5 | * Peter De Schrijver | 5 | * Peter De Schrijver |
6 | * (Peter.DeSchrijver@linux.cc.kuleuven.ac.be) | 6 | * (Peter.DeSchrijver@linux.cc.kuleuven.ac.be) |
7 | * | 7 | * |
diff --git a/drivers/net/au1000_eth.c b/drivers/net/au1000_eth.c index 185f98e3964..504b7ce2747 100644 --- a/drivers/net/au1000_eth.c +++ b/drivers/net/au1000_eth.c | |||
@@ -542,7 +542,7 @@ static struct { | |||
542 | static int num_ifs; | 542 | static int num_ifs; |
543 | 543 | ||
544 | /* | 544 | /* |
545 | * Setup the base address and interupt of the Au1xxx ethernet macs | 545 | * Setup the base address and interrupt of the Au1xxx ethernet macs |
546 | * based on cpu type and whether the interface is enabled in sys_pinfunc | 546 | * based on cpu type and whether the interface is enabled in sys_pinfunc |
547 | * register. The last interface is enabled if SYS_PF_NI2 (bit 4) is 0. | 547 | * register. The last interface is enabled if SYS_PF_NI2 (bit 4) is 0. |
548 | */ | 548 | */ |
diff --git a/drivers/net/ax88796.c b/drivers/net/ax88796.c index 9fe0517cf89..7495a9ee8f4 100644 --- a/drivers/net/ax88796.c +++ b/drivers/net/ax88796.c | |||
@@ -900,7 +900,7 @@ static int ax_probe(struct platform_device *pdev) | |||
900 | 900 | ||
901 | ax->map2 = ioremap(res->start, size); | 901 | ax->map2 = ioremap(res->start, size); |
902 | if (ax->map2 == NULL) { | 902 | if (ax->map2 == NULL) { |
903 | dev_err(&pdev->dev, "cannot map reset register"); | 903 | dev_err(&pdev->dev, "cannot map reset register\n"); |
904 | ret = -ENXIO; | 904 | ret = -ENXIO; |
905 | goto exit_mem2; | 905 | goto exit_mem2; |
906 | } | 906 | } |
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 78ed633ceb8..da767d3d5af 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -26,7 +26,7 @@ | |||
26 | #include <linux/etherdevice.h> | 26 | #include <linux/etherdevice.h> |
27 | #include <linux/skbuff.h> | 27 | #include <linux/skbuff.h> |
28 | #include <linux/dma-mapping.h> | 28 | #include <linux/dma-mapping.h> |
29 | #include <asm/bitops.h> | 29 | #include <linux/bitops.h> |
30 | #include <asm/io.h> | 30 | #include <asm/io.h> |
31 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
32 | #include <linux/delay.h> | 32 | #include <linux/delay.h> |
@@ -56,8 +56,8 @@ | |||
56 | 56 | ||
57 | #define DRV_MODULE_NAME "bnx2" | 57 | #define DRV_MODULE_NAME "bnx2" |
58 | #define PFX DRV_MODULE_NAME ": " | 58 | #define PFX DRV_MODULE_NAME ": " |
59 | #define DRV_MODULE_VERSION "1.6.7" | 59 | #define DRV_MODULE_VERSION "1.6.8" |
60 | #define DRV_MODULE_RELDATE "October 10, 2007" | 60 | #define DRV_MODULE_RELDATE "October 17, 2007" |
61 | 61 | ||
62 | #define RUN_AT(x) (jiffies + (x)) | 62 | #define RUN_AT(x) (jiffies + (x)) |
63 | 63 | ||
@@ -3079,14 +3079,18 @@ bnx2_set_power_state(struct bnx2 *bp, pci_power_t state) | |||
3079 | autoneg = bp->autoneg; | 3079 | autoneg = bp->autoneg; |
3080 | advertising = bp->advertising; | 3080 | advertising = bp->advertising; |
3081 | 3081 | ||
3082 | bp->autoneg = AUTONEG_SPEED; | 3082 | if (bp->phy_port == PORT_TP) { |
3083 | bp->advertising = ADVERTISED_10baseT_Half | | 3083 | bp->autoneg = AUTONEG_SPEED; |
3084 | ADVERTISED_10baseT_Full | | 3084 | bp->advertising = ADVERTISED_10baseT_Half | |
3085 | ADVERTISED_100baseT_Half | | 3085 | ADVERTISED_10baseT_Full | |
3086 | ADVERTISED_100baseT_Full | | 3086 | ADVERTISED_100baseT_Half | |
3087 | ADVERTISED_Autoneg; | 3087 | ADVERTISED_100baseT_Full | |
3088 | ADVERTISED_Autoneg; | ||
3089 | } | ||
3088 | 3090 | ||
3089 | bnx2_setup_copper_phy(bp); | 3091 | spin_lock_bh(&bp->phy_lock); |
3092 | bnx2_setup_phy(bp, bp->phy_port); | ||
3093 | spin_unlock_bh(&bp->phy_lock); | ||
3090 | 3094 | ||
3091 | bp->autoneg = autoneg; | 3095 | bp->autoneg = autoneg; |
3092 | bp->advertising = advertising; | 3096 | bp->advertising = advertising; |
@@ -3097,10 +3101,16 @@ bnx2_set_power_state(struct bnx2 *bp, pci_power_t state) | |||
3097 | 3101 | ||
3098 | /* Enable port mode. */ | 3102 | /* Enable port mode. */ |
3099 | val &= ~BNX2_EMAC_MODE_PORT; | 3103 | val &= ~BNX2_EMAC_MODE_PORT; |
3100 | val |= BNX2_EMAC_MODE_PORT_MII | | 3104 | val |= BNX2_EMAC_MODE_MPKT_RCVD | |
3101 | BNX2_EMAC_MODE_MPKT_RCVD | | ||
3102 | BNX2_EMAC_MODE_ACPI_RCVD | | 3105 | BNX2_EMAC_MODE_ACPI_RCVD | |
3103 | BNX2_EMAC_MODE_MPKT; | 3106 | BNX2_EMAC_MODE_MPKT; |
3107 | if (bp->phy_port == PORT_TP) | ||
3108 | val |= BNX2_EMAC_MODE_PORT_MII; | ||
3109 | else { | ||
3110 | val |= BNX2_EMAC_MODE_PORT_GMII; | ||
3111 | if (bp->line_speed == SPEED_2500) | ||
3112 | val |= BNX2_EMAC_MODE_25G_MODE; | ||
3113 | } | ||
3104 | 3114 | ||
3105 | REG_WR(bp, BNX2_EMAC_MODE, val); | 3115 | REG_WR(bp, BNX2_EMAC_MODE, val); |
3106 | 3116 | ||
@@ -6428,7 +6438,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) | |||
6428 | /* enable device (incl. PCI PM wakeup), and bus-mastering */ | 6438 | /* enable device (incl. PCI PM wakeup), and bus-mastering */ |
6429 | rc = pci_enable_device(pdev); | 6439 | rc = pci_enable_device(pdev); |
6430 | if (rc) { | 6440 | if (rc) { |
6431 | dev_err(&pdev->dev, "Cannot enable PCI device, aborting."); | 6441 | dev_err(&pdev->dev, "Cannot enable PCI device, aborting.\n"); |
6432 | goto err_out; | 6442 | goto err_out; |
6433 | } | 6443 | } |
6434 | 6444 | ||
diff --git a/drivers/net/bnx2_fw2.h b/drivers/net/bnx2_fw2.h index 5bd52bead9b..4b129b7cbfa 100644 --- a/drivers/net/bnx2_fw2.h +++ b/drivers/net/bnx2_fw2.h | |||
@@ -15,3248 +15,3270 @@ | |||
15 | */ | 15 | */ |
16 | 16 | ||
17 | static u8 bnx2_COM_b09FwText[] = { | 17 | static u8 bnx2_COM_b09FwText[] = { |
18 | /* 0x1f, 0x8b, 0x08, 0x00, 0x0e, 0x34, 0xe7, 0x45, 0x00, 0x03, */ | 18 | 0xdc, 0x5b, 0x6b, 0x6c, 0x1c, 0xd7, 0x75, 0x3e, 0x33, 0x3b, 0x4b, 0xae, |
19 | 0xdc, 0x5b, | 19 | 0xc8, 0x15, 0x35, 0x22, 0x57, 0xd4, 0x9a, 0xa2, 0xed, 0x5d, 0x72, 0x28, |
20 | 0x6d, 0x70, 0x5c, 0xd5, 0x79, 0x7e, 0xef, 0xd9, 0xbb, 0xf2, 0x5a, 0x92, | 20 | 0xb2, 0x96, 0xea, 0xae, 0x29, 0xa6, 0x62, 0xd3, 0x4d, 0xb4, 0xd9, 0xa5, |
21 | 0xe5, 0x6b, 0x79, 0x23, 0x16, 0x4b, 0xc0, 0xae, 0x75, 0x6d, 0x69, 0xb0, | 21 | 0x5c, 0xb5, 0x75, 0x5a, 0x4a, 0x26, 0xfc, 0x48, 0x55, 0x83, 0xde, 0xa5, |
22 | 0x43, 0x16, 0xa1, 0x80, 0x9a, 0xd9, 0xc0, 0xb2, 0x2b, 0x33, 0x9e, 0x0c, | 22 | 0x9c, 0xa0, 0xa8, 0x53, 0xc9, 0x76, 0x85, 0x20, 0x05, 0xaa, 0x05, 0x1f, |
23 | 0x69, 0x64, 0x50, 0x80, 0xb6, 0x4c, 0x46, 0xec, 0x1a, 0x9a, 0x4e, 0x87, | 23 | 0x89, 0x52, 0xb0, 0x1c, 0xc5, 0x92, 0x29, 0xb5, 0x71, 0x6b, 0x96, 0xb4, |
24 | 0xd6, 0xa6, 0x6e, 0x9b, 0xc9, 0x34, 0x78, 0x47, 0x1f, 0x8d, 0xa7, 0x15, | 24 | 0x6c, 0x15, 0xd8, 0x6a, 0x65, 0xc7, 0x6d, 0x68, 0x54, 0x2e, 0x65, 0xca, |
25 | 0xba, 0x06, 0x1b, 0xd9, 0xd3, 0xd0, 0xa0, 0x6a, 0x71, 0xf1, 0x8f, 0x8d, | 25 | 0x69, 0x95, 0x26, 0x48, 0x8d, 0xa0, 0x42, 0x95, 0x3f, 0x8e, 0xe1, 0xf4, |
26 | 0xaf, 0xf9, 0x48, 0xaa, 0x4c, 0x4d, 0xa5, 0x18, 0x48, 0x69, 0xa7, 0x4d, | 26 | 0x87, 0x5b, 0xf4, 0x87, 0xd1, 0x07, 0x22, 0xd7, 0x8f, 0xed, 0xf7, 0xdd, |
27 | 0xfb, 0xa3, 0x9e, 0xa1, 0x5f, 0x84, 0x32, 0xfd, 0xc1, 0x74, 0xda, 0x4e, | 27 | 0xb9, 0x43, 0x0e, 0x97, 0x14, 0x45, 0xf9, 0xf5, 0xa3, 0x04, 0x56, 0x33, |
28 | 0x3a, 0x24, 0x53, 0x08, 0x84, 0xed, 0xf3, 0x9c, 0x7b, 0xee, 0xea, 0x6a, | 28 | 0xf7, 0x7d, 0xee, 0xb9, 0xe7, 0x7c, 0xe7, 0x31, 0x57, 0x3f, 0x2f, 0x52, |
29 | 0x25, 0x7f, 0xf1, 0x91, 0x1f, 0xd5, 0xcc, 0xfa, 0xde, 0xf3, 0xfd, 0x9e, | 29 | 0x27, 0xfa, 0x6f, 0x3d, 0x7e, 0x89, 0x87, 0x7f, 0xaf, 0x70, 0xfb, 0xce, |
30 | 0xf7, 0xbc, 0xef, 0xf3, 0x7e, 0xdc, 0xe3, 0x4f, 0x8a, 0xb4, 0x8a, 0xf9, | 30 | 0xdb, 0x77, 0xe0, 0xf5, 0x0e, 0xd3, 0xa8, 0x0d, 0xb1, 0x9e, 0xff, 0xc4, |
31 | 0xdb, 0x80, 0x5f, 0xfa, 0xc1, 0xdf, 0x2c, 0x5f, 0x37, 0x78, 0xdd, 0x0d, | 31 | 0xf0, 0xeb, 0xd6, 0xef, 0x2b, 0xfd, 0xd9, 0xf8, 0xbd, 0x89, 0xc6, 0xc1, |
32 | 0x78, 0xbd, 0x41, 0xc5, 0xec, 0x18, 0xeb, 0xf9, 0x4f, 0x12, 0xbf, 0x01, | 32 | 0x7f, 0x17, 0x31, 0xae, 0xd1, 0x27, 0xf8, 0x57, 0xa9, 0xac, 0xde, 0x6e, |
33 | 0xf3, 0xbe, 0xd6, 0x9f, 0x83, 0xdf, 0x9b, 0x68, 0x1c, 0xfb, 0x0f, 0x11, | 33 | 0x92, 0x96, 0x55, 0xda, 0x43, 0xde, 0x92, 0x8a, 0x66, 0xfe, 0x24, 0x62, |
34 | 0xeb, 0x3c, 0x7d, 0xa2, 0x7f, 0xf5, 0xfa, 0x85, 0xdb, 0x15, 0x69, 0xb9, | 34 | 0xa6, 0x33, 0x47, 0xb2, 0x8e, 0x11, 0x09, 0xa5, 0xbb, 0x8a, 0x05, 0x47, |
35 | 0x40, 0x7b, 0x2c, 0x58, 0x52, 0xd3, 0xcc, 0x9f, 0x24, 0x54, 0x6e, 0xec, | 35 | 0x24, 0x53, 0xda, 0x96, 0xc8, 0xc9, 0x7b, 0x95, 0x62, 0xcc, 0x92, 0xac, |
36 | 0xe1, 0x82, 0x2b, 0x89, 0x58, 0x6e, 0xf7, 0xc1, 0xb2, 0x2b, 0x92, 0xaf, | 36 | 0x23, 0x91, 0x9b, 0xd3, 0xef, 0x3e, 0xf5, 0xd2, 0xce, 0xe4, 0x5b, 0x53, |
37 | 0xed, 0x48, 0x17, 0xe5, 0x67, 0xf5, 0x4a, 0xd2, 0x16, 0xd6, 0x5f, 0x95, | 37 | 0x21, 0x89, 0xd8, 0xe9, 0x17, 0xc4, 0xde, 0x2a, 0x91, 0x56, 0x8c, 0x79, |
38 | 0x7b, 0xef, 0xc9, 0x17, 0x6e, 0xca, 0xfc, 0x68, 0x2e, 0x26, 0x09, 0x27, | 38 | 0xb2, 0x33, 0x63, 0x48, 0x83, 0x3f, 0xd7, 0x9b, 0x95, 0x97, 0x3a, 0xa5, |
39 | 0xf7, 0xbc, 0x38, 0xdb, 0x25, 0xd1, 0x83, 0x31, 0x4f, 0xf4, 0xe5, 0x2d, | 39 | 0xd8, 0x92, 0x8e, 0x88, 0x99, 0xee, 0xb8, 0x92, 0x0d, 0xd9, 0x83, 0xa1, |
40 | 0xe9, 0x08, 0xe7, 0x7a, 0xb3, 0xfe, 0x42, 0x9f, 0x54, 0xb6, 0xe4, 0x12, | 40 | 0xb4, 0x2d, 0x73, 0x65, 0xe9, 0x3f, 0x30, 0x2e, 0x91, 0x48, 0xfa, 0x4b, |
41 | 0xa2, 0x72, 0xdb, 0x5e, 0x2d, 0xc4, 0x9c, 0xb1, 0x58, 0xce, 0x91, 0x45, | 41 | 0x91, 0xda, 0x0e, 0x89, 0x58, 0xe9, 0xa9, 0x23, 0x5f, 0x73, 0x8e, 0x54, |
42 | 0x5f, 0x46, 0xee, 0x9f, 0x96, 0x44, 0x22, 0xf7, 0xe5, 0xc4, 0xba, 0x6d, | 42 | 0x4c, 0xc7, 0xe9, 0x9a, 0x96, 0x68, 0xef, 0xe9, 0x1e, 0xb4, 0x97, 0x92, |
43 | 0x92, 0xb0, 0x73, 0x4b, 0x0f, 0xff, 0xbe, 0x7b, 0xb0, 0xae, 0x5c, 0xb7, | 43 | 0x5d, 0x22, 0x3b, 0xc5, 0x74, 0x8a, 0xd1, 0x90, 0x13, 0x91, 0x6c, 0xd9, |
44 | 0x7f, 0x5e, 0xda, 0x87, 0x4e, 0x0c, 0xa2, 0xbd, 0x96, 0xe9, 0x17, 0xb9, | 44 | 0x91, 0x5c, 0x59, 0xe4, 0x1f, 0x4a, 0x86, 0x9c, 0x76, 0x9a, 0x65, 0x7a, |
45 | 0x49, 0x94, 0x5b, 0x69, 0x8f, 0xb9, 0x09, 0x29, 0xf8, 0xae, 0x14, 0x7d, | 45 | 0xfb, 0xbb, 0x95, 0x0c, 0x68, 0xf9, 0x7b, 0x67, 0xea, 0xc8, 0xa8, 0x43, |
46 | 0x91, 0xbf, 0xac, 0x59, 0x72, 0xc2, 0xed, 0x92, 0xf9, 0x9d, 0xef, 0xd5, | 46 | 0x7a, 0x1f, 0x8b, 0x90, 0xae, 0x50, 0x7a, 0xa8, 0xb6, 0xe0, 0x58, 0x32, |
47 | 0xf3, 0xa0, 0xe5, 0xfb, 0xee, 0xd2, 0xc3, 0x93, 0x2e, 0xe9, 0x3d, 0x90, | 47 | 0x5c, 0x62, 0xdd, 0x80, 0xc9, 0xba, 0x70, 0x3a, 0x52, 0x77, 0xda, 0x89, |
48 | 0x08, 0xe8, 0xdd, 0xbb, 0xae, 0xec, 0xda, 0x32, 0x5e, 0x63, 0xdd, 0xa8, | 48 | 0xea, 0xba, 0x52, 0x26, 0x8b, 0xf9, 0x46, 0x4a, 0xec, 0x1b, 0xe9, 0x2e, |
49 | 0x62, 0x5d, 0x3c, 0x97, 0x68, 0x3d, 0xe1, 0xb6, 0x9b, 0xba, 0x57, 0x6f, | 49 | 0x38, 0x31, 0x5d, 0x3f, 0xba, 0x33, 0xeb, 0xc4, 0x51, 0xdf, 0xaa, 0xdb, |
50 | 0x29, 0x60, 0xbe, 0x89, 0x1a, 0xfb, 0xe6, 0xaf, 0x2f, 0xbb, 0x49, 0x53, | 50 | 0x7a, 0xbe, 0x5c, 0x70, 0x1c, 0xdd, 0x76, 0x35, 0x94, 0x75, 0xba, 0x74, |
51 | 0xbf, 0x70, 0x63, 0xc1, 0x4d, 0xa1, 0xbe, 0xc7, 0xb4, 0x8d, 0x3d, 0x58, | 51 | 0xfd, 0xab, 0xbb, 0x0a, 0xce, 0x76, 0x5d, 0xff, 0xd6, 0xae, 0xac, 0x93, |
52 | 0x76, 0x5d, 0xd3, 0xf6, 0x76, 0xac, 0xe0, 0xf6, 0x9b, 0xfa, 0xf7, 0x6e, | 52 | 0xd2, 0xf5, 0xe3, 0xf7, 0x17, 0x9c, 0x1e, 0x5d, 0xdf, 0x8a, 0xfa, 0x5e, |
53 | 0x2e, 0xbb, 0x3b, 0x4d, 0x7d, 0x0f, 0xe6, 0xca, 0x9a, 0xfa, 0x85, 0x7b, | 53 | 0x5d, 0xff, 0x83, 0xde, 0x82, 0x93, 0x46, 0xfd, 0x97, 0x22, 0x66, 0x87, |
54 | 0xca, 0xee, 0xa0, 0xa9, 0xdf, 0x7d, 0x73, 0xc1, 0x1d, 0x32, 0xf5, 0x89, | 54 | 0x2d, 0x63, 0xa5, 0x04, 0x7e, 0x19, 0xb4, 0xf5, 0xa1, 0x6e, 0x0f, 0x7e, |
55 | 0xa1, 0xb2, 0x9b, 0x43, 0xfd, 0x97, 0x13, 0x6a, 0x9b, 0x23, 0x53, 0xb5, | 55 | 0x77, 0xe1, 0x37, 0xbf, 0x41, 0x1a, 0xfa, 0xf1, 0x6c, 0x6b, 0xf5, 0x78, |
56 | 0x34, 0x7e, 0x79, 0xb4, 0x0d, 0xa3, 0x6e, 0x37, 0x7e, 0xb7, 0xe3, 0xf7, | 56 | 0x07, 0x1e, 0xb9, 0x11, 0x79, 0x3d, 0x14, 0x97, 0x97, 0x3a, 0x5f, 0x07, |
57 | 0xc8, 0x46, 0xe9, 0x18, 0xc1, 0xf3, 0xbf, 0xba, 0x03, 0xde, 0x81, 0x47, | 57 | 0x0f, 0x6d, 0x39, 0x57, 0x16, 0xa3, 0xbf, 0x33, 0x0e, 0xde, 0xc5, 0xe4, |
58 | 0x5e, 0x42, 0x5e, 0x8f, 0xa5, 0xe4, 0x85, 0xbe, 0xd7, 0xc1, 0x43, 0x47, | 58 | 0xb9, 0x72, 0xbd, 0x84, 0x1e, 0x0f, 0x81, 0x37, 0x5f, 0x90, 0x7c, 0x2c, |
59 | 0x4e, 0xfb, 0x62, 0x8d, 0xf4, 0xa5, 0xc0, 0xbb, 0xa4, 0x3c, 0xe3, 0xb7, | 59 | 0x22, 0x1b, 0x27, 0x0d, 0x69, 0xeb, 0x8e, 0x48, 0xc6, 0xe6, 0xda, 0x38, |
60 | 0x49, 0xec, 0xb1, 0x18, 0x78, 0xf3, 0xcb, 0x52, 0x4a, 0x26, 0x64, 0xd3, | 60 | 0xed, 0x89, 0x98, 0x84, 0x26, 0x33, 0x4d, 0xa6, 0x74, 0xd8, 0x39, 0x29, |
61 | 0xac, 0x25, 0x5b, 0x07, 0x12, 0x92, 0x77, 0xb8, 0x36, 0x4e, 0x7b, 0x26, | 61 | 0x82, 0x77, 0x57, 0x28, 0x97, 0x68, 0x4b, 0x48, 0x6e, 0xfc, 0x36, 0x19, |
62 | 0x29, 0xb1, 0xd9, 0xfc, 0x66, 0x25, 0xdb, 0x9c, 0xa2, 0x54, 0xc0, 0xbb, | 62 | 0xb4, 0x49, 0xd7, 0xdc, 0xcd, 0xde, 0x5a, 0x11, 0x23, 0x7b, 0x72, 0x40, |
63 | 0x57, 0x29, 0x97, 0x68, 0x4b, 0x4b, 0x71, 0xfa, 0x5a, 0x19, 0x73, 0x48, | 63 | 0xc6, 0xdc, 0xa8, 0x91, 0x3b, 0xf9, 0x59, 0xc9, 0xa6, 0x24, 0x86, 0x71, |
64 | 0xd7, 0x1f, 0x5c, 0x15, 0xac, 0x95, 0xb0, 0x0a, 0xc7, 0x46, 0x65, 0xca, | 64 | 0xf1, 0x3c, 0x5a, 0x66, 0x4a, 0x03, 0x32, 0xea, 0x8a, 0x91, 0x75, 0xc9, |
65 | 0x6b, 0xb7, 0x8a, 0xc7, 0x6e, 0x96, 0x42, 0x56, 0x92, 0x18, 0x97, 0x2a, | 65 | 0xcf, 0x66, 0xb4, 0x37, 0xa8, 0xbe, 0xa8, 0x6b, 0x0d, 0xa9, 0xb9, 0x23, |
66 | 0xa1, 0xa5, 0x5a, 0x1b, 0x95, 0x49, 0x4f, 0xac, 0x82, 0x47, 0x7e, 0x76, | 66 | 0xa8, 0xb7, 0x51, 0xdf, 0x68, 0xf4, 0xa9, 0x39, 0x54, 0x7d, 0x62, 0x44, |
67 | 0xa1, 0xbd, 0x43, 0xf7, 0x45, 0x5d, 0x4f, 0x4c, 0xcf, 0x9d, 0x40, 0xbd, | 67 | 0xa2, 0xf2, 0x74, 0x29, 0xa6, 0xfb, 0x56, 0x2a, 0xd9, 0x94, 0x8d, 0x7e, |
68 | 0x83, 0xfa, 0x4e, 0x6b, 0x58, 0xcf, 0xa1, 0xeb, 0xd3, 0x13, 0xd2, 0x2e, | 68 | 0x03, 0x32, 0xe2, 0xc6, 0x64, 0x10, 0xcf, 0x61, 0x97, 0x72, 0x15, 0x87, |
69 | 0x4f, 0xd5, 0x92, 0xa6, 0x6f, 0xbd, 0x5e, 0xc8, 0x3a, 0xe8, 0x37, 0x2a, | 69 | 0x4c, 0x35, 0x14, 0xf3, 0x27, 0xd4, 0x7c, 0x89, 0x50, 0x9a, 0xf3, 0xb5, |
70 | 0x13, 0x5e, 0x52, 0xc6, 0xf0, 0x1c, 0xf7, 0xb8, 0x7e, 0x0a, 0x32, 0x75, | 70 | 0xa2, 0xdf, 0xdb, 0xa0, 0xcb, 0x10, 0x4b, 0x9d, 0x65, 0x46, 0xf2, 0xe3, |
71 | 0xdd, 0xc1, 0xd2, 0x51, 0x3d, 0x5f, 0x3a, 0x96, 0xe3, 0x7c, 0x3d, 0xe8, | 71 | 0x06, 0xe4, 0x0d, 0x4f, 0xc5, 0xd7, 0x3e, 0xd0, 0x6f, 0x89, 0xd3, 0x6d, |
72 | 0xf7, 0x12, 0xe8, 0xb2, 0xc4, 0xd6, 0x67, 0x99, 0x97, 0xd2, 0xb4, 0x05, | 72 | 0x48, 0x01, 0x67, 0x55, 0xb4, 0x51, 0x2e, 0xcd, 0x9a, 0x59, 0xb7, 0x56, |
73 | 0x79, 0xc3, 0x53, 0xf3, 0x75, 0x18, 0xf4, 0xdb, 0xe2, 0x0e, 0x58, 0x52, | 73 | 0x72, 0x56, 0x42, 0x42, 0x13, 0x94, 0xa5, 0x41, 0x19, 0xc1, 0x18, 0xd3, |
74 | 0xc6, 0x59, 0x55, 0x1c, 0x94, 0x6b, 0x0b, 0xaa, 0xe0, 0xad, 0x93, 0xa2, | 74 | 0x61, 0x9f, 0xb7, 0xb1, 0xef, 0x41, 0x75, 0x0e, 0x35, 0xe9, 0xa2, 0x99, |
75 | 0x9d, 0x96, 0xd8, 0x0c, 0x65, 0x69, 0x4c, 0x26, 0x30, 0x46, 0xb9, 0xec, | 75 | 0x2b, 0x37, 0x8b, 0x39, 0xb9, 0x5f, 0x5e, 0x19, 0x17, 0x3b, 0x94, 0x7e, |
76 | 0xf3, 0x0e, 0xf6, 0x3d, 0xa6, 0xcf, 0xa1, 0x25, 0x57, 0x51, 0x45, 0xbf, | 76 | 0xb7, 0x92, 0x75, 0x46, 0xcd, 0xec, 0xb3, 0x96, 0x84, 0x27, 0x0c, 0x19, |
77 | 0x4b, 0xd4, 0xec, 0xbd, 0xf2, 0xd2, 0xb4, 0x38, 0x38, 0xc7, 0x7a, 0xc1, | 77 | 0x75, 0x92, 0xd0, 0x80, 0xa3, 0xe6, 0xee, 0xf2, 0x2c, 0xfa, 0x71, 0x1c, |
78 | 0x9d, 0x54, 0x85, 0xa7, 0x6d, 0x89, 0xcf, 0x58, 0x32, 0xe9, 0x66, 0xa0, | 78 | 0xfa, 0x95, 0x4c, 0xf0, 0x95, 0xef, 0xdb, 0x6c, 0x53, 0xc9, 0x33, 0xfb, |
79 | 0x01, 0x87, 0xd4, 0x2e, 0x7f, 0x01, 0xfd, 0x38, 0x0e, 0xfd, 0x6a, 0x0a, | 79 | 0xe0, 0x0c, 0xb0, 0x8f, 0xe7, 0x5c, 0x9c, 0x89, 0x3a, 0xa3, 0x04, 0xce, |
80 | 0x7c, 0xe5, 0xfb, 0x0e, 0x47, 0x69, 0x79, 0x66, 0x1f, 0x9c, 0x01, 0xf6, | 80 | 0x48, 0x8c, 0xbe, 0x4e, 0xc8, 0xd4, 0x09, 0x4b, 0xf2, 0x29, 0xec, 0x0b, |
81 | 0xf1, 0x8c, 0x87, 0x33, 0xd1, 0x67, 0x94, 0xc6, 0x19, 0x89, 0x35, 0xdc, | 81 | 0xbd, 0xf3, 0xa9, 0x45, 0xba, 0x46, 0xc6, 0xab, 0xe9, 0xe2, 0x38, 0xd2, |
82 | 0x07, 0x99, 0x3a, 0x6a, 0x4b, 0x29, 0x8b, 0x7d, 0xa1, 0x77, 0x29, 0xbb, | 82 | 0xe5, 0xd1, 0x34, 0x7c, 0x82, 0xf4, 0x2d, 0xd2, 0x33, 0x36, 0xee, 0xd3, |
83 | 0x4c, 0xd7, 0xc4, 0x74, 0x33, 0x5d, 0x1c, 0x47, 0xba, 0x02, 0x9a, 0xc6, | 83 | 0xc8, 0xf5, 0x48, 0x9b, 0x4f, 0x17, 0xc7, 0x91, 0xae, 0x26, 0x9e, 0x35, |
84 | 0x8f, 0x92, 0xbe, 0x65, 0x7a, 0xa6, 0xa6, 0x43, 0x1a, 0xb9, 0x1e, 0x69, | 84 | 0xff, 0x8c, 0x3e, 0xd0, 0x31, 0xe2, 0x5a, 0x38, 0xa3, 0xa8, 0xe4, 0xed, |
85 | 0x0b, 0xe9, 0xe2, 0x38, 0xd2, 0xb5, 0x99, 0x67, 0xcd, 0x3f, 0x6b, 0x18, | 85 | 0xa2, 0x31, 0xd2, 0xbb, 0x2d, 0x0e, 0x6d, 0x36, 0x86, 0x7b, 0x49, 0xb3, |
86 | 0x74, 0x4c, 0x78, 0x36, 0xce, 0xa8, 0x5d, 0x4a, 0x4e, 0xc5, 0x9a, 0x18, | 86 | 0x83, 0x73, 0xac, 0x51, 0xe7, 0x0d, 0xf9, 0x26, 0xef, 0xd0, 0x9f, 0xeb, |
87 | 0xda, 0x91, 0x82, 0x36, 0x5b, 0xe3, 0x43, 0xa4, 0xd9, 0xc5, 0x39, 0xb6, | 87 | 0xe3, 0xbd, 0x64, 0xcb, 0xa8, 0x9a, 0x8f, 0x34, 0x7d, 0x14, 0xf3, 0x90, |
88 | 0xe8, 0xf3, 0x56, 0xb9, 0x49, 0xf2, 0x0e, 0xfd, 0xb9, 0x3e, 0xde, 0x6b, | 88 | 0xd6, 0x4b, 0x90, 0xd5, 0x1e, 0xc8, 0x68, 0x4a, 0xfe, 0xae, 0xbc, 0x5d, |
89 | 0x8e, 0x4c, 0xea, 0xf9, 0x48, 0xd3, 0x47, 0x31, 0x0f, 0x69, 0x7d, 0x05, | 89 | 0xbe, 0x53, 0xee, 0x92, 0xbf, 0x81, 0xde, 0xfe, 0x75, 0x39, 0x21, 0x2f, |
90 | 0xb2, 0x3a, 0x08, 0x19, 0xcd, 0xca, 0x5f, 0xf8, 0x3b, 0xe5, 0xcf, 0xfc, | 90 | 0x94, 0x5b, 0xe5, 0xdb, 0xe5, 0xb8, 0x3c, 0xaf, 0xe4, 0xb7, 0x4f, 0xa4, |
91 | 0x7e, 0xf9, 0x0e, 0xf4, 0xf6, 0xdb, 0x7e, 0x5a, 0x9e, 0xf7, 0x7b, 0xe4, | 91 | 0x81, 0x32, 0x9d, 0x90, 0x46, 0xe8, 0xcf, 0x46, 0xe8, 0xe6, 0x13, 0xe0, |
92 | 0x39, 0x3f, 0x25, 0xcf, 0x6a, 0xf9, 0x1d, 0x16, 0xe9, 0xa0, 0x4c, 0xa7, | 92 | 0xdf, 0x89, 0x4e, 0xc9, 0x34, 0xa5, 0x25, 0x72, 0x0b, 0x7e, 0x9b, 0xf1, |
93 | 0xa5, 0x13, 0xfa, 0xb3, 0x09, 0xba, 0xf9, 0x38, 0xf8, 0x77, 0xb4, 0x4f, | 93 | 0x6b, 0x4e, 0x43, 0xee, 0x5c, 0xf2, 0x8e, 0x3c, 0xb4, 0x24, 0xa7, 0xf6, |
94 | 0xf2, 0x9b, 0x73, 0x92, 0xb8, 0x1a, 0xbf, 0x2b, 0xf0, 0xeb, 0xca, 0xd9, | 94 | 0x6c, 0xc9, 0x48, 0x79, 0xfe, 0x16, 0x4f, 0x76, 0x45, 0xfa, 0xc1, 0x63, |
95 | 0x5a, 0x56, 0xec, 0x1c, 0x79, 0x68, 0x4b, 0x51, 0xef, 0xd9, 0x96, 0x09, | 95 | 0xb3, 0xfb, 0x7f, 0x2a, 0x19, 0x1b, 0xfb, 0xe8, 0xde, 0xa6, 0x78, 0x6f, |
96 | 0xff, 0x91, 0xab, 0x03, 0xd9, 0x15, 0x19, 0x01, 0x8f, 0xd5, 0xc0, 0x4f, | 96 | 0x76, 0x53, 0x66, 0x13, 0x90, 0x7b, 0xcb, 0xc8, 0xb9, 0x67, 0x80, 0x1b, |
97 | 0xea, 0x79, 0x07, 0xfb, 0x18, 0xd8, 0xa1, 0x79, 0xaf, 0x06, 0x28, 0xb3, | 97 | 0xf5, 0x46, 0xf6, 0x78, 0x51, 0x0a, 0xc7, 0x2b, 0x52, 0x48, 0x85, 0xe5, |
98 | 0x69, 0xc8, 0xbd, 0x6d, 0x15, 0xbd, 0x93, 0xc0, 0x8d, 0x36, 0xab, 0x70, | 98 | 0x11, 0xbb, 0x22, 0x7d, 0xa9, 0x1a, 0x39, 0x64, 0x83, 0xf7, 0xdb, 0x7f, |
99 | 0xa4, 0x22, 0xe5, 0x23, 0x75, 0x29, 0x67, 0xe3, 0xf2, 0x90, 0x53, 0x97, | 99 | 0xdf, 0xf0, 0x31, 0xfb, 0x89, 0xf2, 0x61, 0xbc, 0xb3, 0x4e, 0xe4, 0x84, |
100 | 0xe1, 0x6c, 0x8b, 0xec, 0x77, 0xc0, 0xfb, 0x9d, 0xbf, 0x6d, 0x85, 0x98, | 100 | 0x7a, 0xf7, 0xea, 0x8b, 0xe5, 0xb0, 0x64, 0x62, 0xc5, 0xb8, 0x25, 0x2d, |
101 | 0xfd, 0xb8, 0xff, 0x3b, 0x78, 0x67, 0x9d, 0xc8, 0x51, 0xfd, 0x1e, 0xd4, | 101 | 0xa6, 0xb7, 0xee, 0xb0, 0xdf, 0x06, 0x7e, 0x4c, 0x01, 0x27, 0x93, 0x4a, |
102 | 0x57, 0xfc, 0xb8, 0xe4, 0x93, 0x95, 0x94, 0x2d, 0x5b, 0x54, 0xb0, 0xee, | 102 | 0x5f, 0xf2, 0xe3, 0xeb, 0xae, 0x66, 0x54, 0x35, 0xfa, 0xdb, 0x3d, 0x32, |
103 | 0x78, 0xd8, 0x06, 0x7e, 0x2c, 0x01, 0x27, 0x33, 0x5a, 0x5f, 0x4a, 0xd3, | 103 | 0xaf, 0xf8, 0x99, 0x18, 0x34, 0xd2, 0x31, 0x69, 0x2b, 0xb1, 0xdc, 0x6b, |
104 | 0xeb, 0xdf, 0xce, 0xeb, 0x6a, 0xf4, 0x77, 0x06, 0xe5, 0xac, 0xe6, 0x67, | 104 | 0xdc, 0x5d, 0xa6, 0x3c, 0xe3, 0xbd, 0x4c, 0x3a, 0x6f, 0x42, 0x3f, 0x0b, |
105 | 0x7a, 0xcc, 0xca, 0x25, 0x65, 0x6b, 0x8d, 0xe5, 0x21, 0xeb, 0x4e, 0x9f, | 105 | 0xcf, 0x8c, 0xa6, 0x37, 0x48, 0x23, 0xe7, 0x21, 0x8d, 0x7c, 0xfe, 0x79, |
106 | 0xf2, 0x8c, 0x77, 0x9f, 0x74, 0x5e, 0x89, 0x7e, 0x36, 0x9e, 0x79, 0x43, | 106 | 0x80, 0xc6, 0xa7, 0x16, 0xde, 0x4f, 0x04, 0xde, 0x8b, 0xe5, 0x4b, 0x75, |
107 | 0x6f, 0x94, 0x46, 0xce, 0x43, 0x1a, 0xf9, 0xfc, 0x66, 0x84, 0xc6, 0x27, | 107 | 0x1e, 0x6d, 0xbd, 0xf2, 0xc6, 0xc4, 0x57, 0xf4, 0x3a, 0x78, 0x3f, 0xcb, |
108 | 0x1b, 0xef, 0x47, 0x23, 0xef, 0x15, 0xff, 0x8f, 0x5a, 0x03, 0xda, 0x86, | 108 | 0xf9, 0xff, 0xaa, 0xe2, 0xc9, 0x4b, 0xf1, 0x3a, 0xeb, 0xcc, 0x06, 0xd6, |
109 | 0xe4, 0x8d, 0x99, 0xaf, 0x98, 0x75, 0xf0, 0x7e, 0x8a, 0xf3, 0x7f, 0xab, | 109 | 0x79, 0x31, 0xb0, 0xce, 0x8b, 0x81, 0x75, 0x8a, 0xe0, 0xa9, 0x6c, 0x30, |
110 | 0x1e, 0xc8, 0x4b, 0xe5, 0x22, 0xeb, 0x2c, 0x44, 0xd6, 0xf9, 0x6e, 0x64, | 110 | 0x21, 0xc3, 0x79, 0x9a, 0x31, 0x39, 0x8a, 0x39, 0x5f, 0x97, 0x50, 0x9a, |
111 | 0x9d, 0xef, 0x46, 0xd6, 0xa9, 0x80, 0xa7, 0xb2, 0x51, 0x41, 0x86, 0x4b, | 111 | 0x7a, 0xee, 0xe3, 0xcd, 0x65, 0xf4, 0x4f, 0xcb, 0xfc, 0x44, 0x51, 0xf2, |
112 | 0x34, 0x63, 0x72, 0x08, 0x73, 0xbe, 0x2e, 0xb1, 0x1c, 0xf5, 0x3c, 0xc4, | 112 | 0xc7, 0xc3, 0xb2, 0x4f, 0xf5, 0xdb, 0xa5, 0xe9, 0x0b, 0xb6, 0x45, 0x64, |
113 | 0x9b, 0x73, 0xe8, 0x9f, 0x93, 0xb3, 0x33, 0x15, 0x29, 0x1d, 0x89, 0xcb, | 113 | 0x6f, 0x8c, 0xef, 0x7e, 0x9b, 0x05, 0x3e, 0xb3, 0xfc, 0xc6, 0x4d, 0x5e, |
114 | 0x1d, 0xba, 0xdf, 0x26, 0x43, 0x5f, 0xb4, 0x2d, 0x21, 0x7b, 0x92, 0x7c, | 114 | 0x99, 0xef, 0xb3, 0x7a, 0x2f, 0x03, 0xde, 0xb8, 0xb3, 0x6f, 0x2a, 0x3c, |
115 | 0x0f, 0xdb, 0x6c, 0xf0, 0x99, 0xe5, 0x6f, 0x5d, 0x19, 0x94, 0xf9, 0xbe, | 115 | 0x9c, 0x2b, 0x13, 0xb7, 0x24, 0x15, 0x72, 0xe4, 0x60, 0x5f, 0xaa, 0x59, |
116 | 0x60, 0xf6, 0x32, 0x1a, 0x8c, 0x3b, 0xf5, 0xa6, 0xc6, 0xc3, 0x45, 0x9f, | 116 | 0x46, 0x6c, 0x23, 0x35, 0xdc, 0x55, 0x4b, 0xbd, 0xc8, 0x98, 0x4e, 0x3d, |
117 | 0xb8, 0x25, 0xd9, 0x98, 0x2b, 0xfb, 0x86, 0xb3, 0x5d, 0x32, 0xe1, 0x58, | 117 | 0xb0, 0x41, 0x12, 0x26, 0x31, 0x5f, 0xed, 0xcb, 0x30, 0x3d, 0xfa, 0x6d, |
118 | 0xd9, 0xf1, 0xfe, 0x75, 0xd4, 0x8b, 0xbc, 0x72, 0xdb, 0x80, 0x0d, 0x92, | 118 | 0x96, 0xfb, 0x4d, 0xa7, 0xb1, 0xaa, 0x9e, 0xba, 0x1d, 0xc2, 0x3b, 0x65, |
119 | 0x56, 0xc4, 0x7c, 0xbd, 0x2f, 0x4b, 0x05, 0xf4, 0x3b, 0x2c, 0x8f, 0x28, | 119 | 0x78, 0xb7, 0x3e, 0x63, 0x0b, 0x65, 0xe2, 0xf0, 0xad, 0xba, 0xec, 0xb7, |
120 | 0xb7, 0xb3, 0xa9, 0x9e, 0xba, 0x1d, 0xc3, 0x3b, 0x65, 0x78, 0x97, 0x39, | 120 | 0xe3, 0xc0, 0x96, 0x94, 0x7f, 0xb6, 0x65, 0x69, 0xd9, 0xc7, 0x89, 0x20, |
121 | 0x63, 0x1b, 0x65, 0xe2, 0xf0, 0x35, 0xa6, 0x1c, 0xb6, 0x6f, 0xb6, 0x57, | 121 | 0x86, 0x73, 0xaf, 0xc0, 0x27, 0x87, 0x72, 0x17, 0x06, 0xad, 0x29, 0xe8, |
122 | 0x96, 0xcf, 0x76, 0xaf, 0x2c, 0x87, 0x38, 0x11, 0xc5, 0x70, 0xee, 0x15, | 122 | 0x5c, 0xad, 0xa6, 0x61, 0xb3, 0xa6, 0x01, 0xb4, 0x76, 0x42, 0xb2, 0x94, |
123 | 0xf8, 0xe4, 0x52, 0xee, 0xe2, 0xa0, 0x35, 0x0b, 0x9d, 0x5b, 0x67, 0x68, | 123 | 0x2e, 0x29, 0xd1, 0xaa, 0x2a, 0x93, 0xf7, 0xfe, 0xfb, 0x7a, 0xd5, 0xee, |
124 | 0xb8, 0xc2, 0xd0, 0x00, 0x5a, 0xfb, 0x20, 0x59, 0x5a, 0x97, 0xb4, 0x68, | 124 | 0xe9, 0x9c, 0xff, 0xf4, 0xf1, 0xfd, 0xcd, 0x80, 0xbd, 0x68, 0x85, 0xce, |
125 | 0x35, 0x95, 0xc9, 0xfb, 0xf0, 0x7d, 0x83, 0x6e, 0x0f, 0x74, 0x2e, 0x7c, | 125 | 0xc6, 0xc0, 0x2b, 0x1f, 0xeb, 0x89, 0xc1, 0x71, 0xd8, 0x07, 0xc8, 0xaa, |
126 | 0x86, 0xf8, 0xfe, 0x66, 0xc4, 0x5e, 0xf4, 0x40, 0x67, 0x93, 0xe0, 0x55, | 126 | 0xc2, 0xf6, 0x28, 0xf0, 0xd0, 0xd2, 0xd8, 0x1c, 0xd1, 0xd8, 0x1c, 0x05, |
127 | 0x88, 0xf5, 0xc4, 0xe0, 0x14, 0xec, 0x03, 0x64, 0x55, 0x63, 0x7b, 0x3b, | 127 | 0x2e, 0xb3, 0x6c, 0xeb, 0x72, 0x4c, 0x97, 0xe3, 0x28, 0xc3, 0x8e, 0x4f, |
128 | 0xf0, 0xd0, 0x36, 0xd8, 0x9c, 0x30, 0xd8, 0xdc, 0x0e, 0x5c, 0x66, 0xd9, | 128 | 0x12, 0xbb, 0x1b, 0x8a, 0x43, 0x27, 0x14, 0xde, 0xd3, 0x56, 0x00, 0x85, |
129 | 0x31, 0xe5, 0xa4, 0x29, 0xa7, 0x50, 0x86, 0x1d, 0x9f, 0x25, 0x2e, 0x5f, | 129 | 0x89, 0xd7, 0xc4, 0xed, 0x56, 0x99, 0x2e, 0x61, 0xbd, 0x05, 0x6c, 0xe4, |
130 | 0x77, 0x70, 0xef, 0x51, 0x8d, 0xf7, 0xb4, 0x15, 0x40, 0x61, 0xe2, 0x35, | 130 | 0xde, 0x83, 0xf4, 0x90, 0x96, 0x75, 0x62, 0xc2, 0x76, 0x65, 0x62, 0xa4, |
131 | 0x71, 0xbb, 0x47, 0xe6, 0x6b, 0x58, 0xaf, 0x81, 0x8d, 0xdc, 0x7b, 0x94, | 131 | 0xf7, 0x61, 0xec, 0x9d, 0xf8, 0x43, 0xba, 0x6f, 0x06, 0xad, 0xdc, 0xc7, |
132 | 0x1e, 0xd2, 0xb2, 0x5e, 0x14, 0x6c, 0x57, 0x3e, 0x49, 0x7a, 0x1f, 0xc4, | 132 | 0x27, 0x49, 0x2b, 0xd7, 0xab, 0xa6, 0xf7, 0xc3, 0xe2, 0x20, 0x69, 0x3f, |
133 | 0xde, 0x89, 0x3f, 0xa4, 0xfb, 0x2a, 0xd0, 0xca, 0x7d, 0xfc, 0x3c, 0x69, | 133 | 0x83, 0x3d, 0x67, 0x80, 0x79, 0x62, 0x0c, 0x74, 0x0e, 0x60, 0xcf, 0xfd, |
134 | 0xe5, 0x7a, 0xcd, 0xf4, 0x7e, 0x58, 0x1c, 0x24, 0xed, 0x27, 0xb1, 0xe7, | 134 | 0xc0, 0xc3, 0xbb, 0x80, 0x87, 0x7b, 0x80, 0x87, 0x7d, 0xc0, 0xc3, 0x34, |
135 | 0x3c, 0x30, 0x4f, 0xac, 0xd1, 0xbe, 0x51, 0xec, 0x79, 0x04, 0x78, 0x78, | 135 | 0xb0, 0xb0, 0x17, 0x58, 0xd8, 0x03, 0x2c, 0x4c, 0x81, 0x37, 0x31, 0x99, |
136 | 0x3b, 0xf0, 0x70, 0x37, 0xf0, 0x70, 0x18, 0x78, 0x98, 0x03, 0x16, 0x0e, | 136 | 0x02, 0x36, 0x4e, 0x01, 0x23, 0xa7, 0x30, 0xc7, 0xf0, 0xa4, 0x18, 0x0f, |
137 | 0x01, 0x0b, 0x07, 0x81, 0x85, 0x59, 0xf0, 0x26, 0x29, 0x73, 0xc0, 0xc6, | 137 | 0x60, 0x0f, 0xdf, 0x9c, 0x48, 0x9e, 0x82, 0x2c, 0xc5, 0x8b, 0x26, 0xe4, |
138 | 0x39, 0x60, 0xe4, 0x1c, 0xe6, 0x18, 0x9f, 0x15, 0xeb, 0x4b, 0xd8, 0xc3, | 138 | 0x3f, 0xd5, 0x0b, 0xd9, 0xee, 0x92, 0x99, 0xb2, 0x25, 0x05, 0xd8, 0xd4, |
139 | 0x63, 0x33, 0x99, 0x93, 0x90, 0xa5, 0x54, 0x45, 0x41, 0xfe, 0xb3, 0x43, | 139 | 0xb6, 0xad, 0xed, 0xd0, 0x35, 0xc8, 0x7b, 0x5c, 0xf4, 0xdf, 0x7a, 0xfd, |
140 | 0x90, 0xed, 0x7e, 0xa9, 0xfa, 0xb6, 0x94, 0x69, 0x53, 0xb7, 0xf7, 0x42, | 140 | 0xfc, 0xb1, 0x88, 0xf3, 0x4f, 0x94, 0xc5, 0x84, 0xc8, 0x79, 0xc9, 0xbb, |
141 | 0xd7, 0x20, 0xef, 0x29, 0x31, 0x7f, 0x1b, 0xcc, 0xf3, 0x1f, 0x45, 0xdc, | 141 | 0xed, 0x76, 0x9b, 0xd9, 0x85, 0x7e, 0x2c, 0xa7, 0xcc, 0x03, 0xc7, 0xef, |
142 | 0xbf, 0xa3, 0x2c, 0xa6, 0x45, 0xce, 0x48, 0xc9, 0xeb, 0x75, 0x0a, 0xaa, | 142 | 0x30, 0x87, 0x8e, 0x2b, 0x7f, 0x05, 0x78, 0x55, 0x91, 0xd1, 0x14, 0x75, |
143 | 0x1f, 0xfd, 0x58, 0xce, 0xaa, 0xfb, 0x8f, 0x5c, 0xaf, 0xf6, 0x1e, 0x21, | 143 | 0xab, 0x22, 0xa7, 0x53, 0xc9, 0xde, 0xa2, 0xd4, 0xcb, 0x58, 0x6c, 0x5c, |
144 | 0x5f, 0xa6, 0x81, 0x57, 0x75, 0x99, 0xcc, 0x52, 0xb7, 0xea, 0x72, 0x22, | 144 | 0xd9, 0x5a, 0x2b, 0x7d, 0x4c, 0xd9, 0xab, 0x82, 0x83, 0x67, 0xa9, 0xdb, |
145 | 0x9b, 0x19, 0xaa, 0x48, 0x9b, 0x4c, 0x25, 0xa7, 0xb5, 0xad, 0xb5, 0x73, | 145 | 0xcc, 0x1f, 0xe7, 0xfe, 0xdb, 0xf1, 0x0b, 0x83, 0x16, 0xce, 0x6f, 0x49, |
146 | 0x87, 0xb5, 0xbd, 0x2a, 0xbb, 0x78, 0xd6, 0x06, 0x54, 0xe9, 0x08, 0xf7, | 146 | 0x5f, 0x8f, 0x6d, 0x3e, 0xd4, 0x59, 0x84, 0x42, 0x24, 0xed, 0x79, 0xac, |
147 | 0xdf, 0x8b, 0x5f, 0x1c, 0xb4, 0x70, 0x7e, 0x5b, 0x86, 0x07, 0x1d, 0xf5, | 147 | 0x9c, 0x1b, 0x6f, 0x8f, 0xb7, 0x9b, 0x96, 0x0c, 0x5a, 0x86, 0x0c, 0x43, |
148 | 0x40, 0x5f, 0x05, 0x08, 0x96, 0x71, 0xce, 0x62, 0xe5, 0xe2, 0x74, 0x6f, | 148 | 0xbe, 0xfb, 0x52, 0x6f, 0x57, 0xc6, 0x62, 0x6c, 0xaf, 0x95, 0xaf, 0x2b, |
149 | 0xaa, 0xa8, 0x6c, 0x19, 0xb3, 0x2d, 0x19, 0x87, 0x7c, 0x0f, 0x67, 0xdf, | 149 | 0x9f, 0x03, 0x6b, 0xcf, 0x9c, 0xc0, 0xba, 0x61, 0x9c, 0x01, 0xd7, 0xe5, |
150 | 0xa9, 0x4f, 0x25, 0xd9, 0xbe, 0x4e, 0xbe, 0xae, 0x7d, 0x0e, 0xac, 0x5d, | 150 | 0x3c, 0x28, 0x97, 0x2c, 0x94, 0x93, 0xa7, 0x8a, 0x52, 0x86, 0x9e, 0x6c, |
151 | 0x3d, 0x8a, 0x75, 0xe3, 0x38, 0x03, 0xae, 0xcb, 0x79, 0x50, 0xae, 0xd9, | 151 | 0x90, 0xec, 0xf6, 0x1a, 0xc9, 0xf4, 0x27, 0x64, 0x78, 0xa2, 0x0c, 0x9c, |
152 | 0x28, 0x67, 0x4e, 0x56, 0xc4, 0x87, 0x9e, 0x6c, 0x94, 0xc2, 0xce, 0x16, | 152 | 0x8a, 0x28, 0x5d, 0xc9, 0x0f, 0x24, 0xe4, 0xf1, 0x09, 0xd6, 0x9d, 0xc3, |
153 | 0xc9, 0x8f, 0xa4, 0x65, 0x7c, 0xc6, 0x07, 0x4e, 0xe1, 0x1c, 0xdd, 0x56, | 153 | 0xfe, 0x93, 0xc7, 0x32, 0xc2, 0xfd, 0x1b, 0x92, 0xd9, 0x7f, 0x4e, 0x1e, |
154 | 0x29, 0x8d, 0xa6, 0xe5, 0xd1, 0x19, 0xd6, 0x9d, 0xc6, 0xfe, 0x33, 0x87, | 154 | 0x71, 0xcf, 0xc9, 0x10, 0xce, 0xf0, 0xe9, 0xf2, 0xac, 0x1c, 0x70, 0x1d, |
155 | 0xf2, 0xc2, 0xfd, 0xc7, 0xf5, 0xbe, 0xd2, 0xea, 0xb4, 0xec, 0xf7, 0xde, | 155 | 0x39, 0x0d, 0xbc, 0xcf, 0x1d, 0x07, 0xee, 0x39, 0xeb, 0x81, 0x51, 0xc9, |
156 | 0x30, 0x7a, 0x14, 0x94, 0xef, 0xc7, 0x99, 0x9e, 0xf0, 0x17, 0xb0, 0x7f, | 156 | 0x73, 0xb4, 0xa1, 0x26, 0xfc, 0xbc, 0x69, 0xf0, 0xf7, 0x89, 0x09, 0xf2, |
157 | 0x57, 0xe6, 0x81, 0xff, 0xc5, 0x23, 0xc0, 0x41, 0xb7, 0x03, 0x98, 0x95, | 157 | 0xd7, 0x94, 0x47, 0x7f, 0xd1, 0x80, 0x3e, 0x26, 0xc0, 0xcf, 0x56, 0x39, |
158 | 0x59, 0xa0, 0x4d, 0x8d, 0xc1, 0xef, 0xab, 0x6a, 0x5e, 0xf7, 0xc8, 0x91, | 158 | 0xec, 0x26, 0x67, 0x33, 0x26, 0x70, 0x31, 0x65, 0x87, 0xa4, 0x2e, 0x8e, |
159 | 0x19, 0x25, 0xdf, 0xbe, 0x31, 0x8d, 0x32, 0xb0, 0x31, 0x9b, 0x39, 0x3d, | 159 | 0x7e, 0x5e, 0x9f, 0x5c, 0x2a, 0x84, 0xb3, 0x2e, 0xa2, 0xef, 0xdb, 0xa0, |
160 | 0xa6, 0x7a, 0xe4, 0x86, 0xce, 0x14, 0xc6, 0xe5, 0x54, 0xc9, 0xdb, 0x18, | 160 | 0x93, 0x63, 0x63, 0xf8, 0x65, 0xd0, 0x0f, 0xf2, 0x6b, 0x27, 0x67, 0xa7, |
161 | 0x03, 0x2f, 0x8f, 0xa7, 0x15, 0xfb, 0x2a, 0x29, 0x66, 0x63, 0x38, 0xff, | 161 | 0x4c, 0xf6, 0x4f, 0xe0, 0xcc, 0x80, 0x2b, 0x93, 0x00, 0x1e, 0x9b, 0xef, |
162 | 0x0a, 0xfa, 0xbf, 0x8f, 0xf5, 0x7a, 0x64, 0x16, 0xbe, 0xd6, 0xec, 0x4c, | 162 | 0x69, 0x33, 0x4f, 0x1a, 0x5c, 0xca, 0x59, 0x02, 0x34, 0x11, 0xd3, 0xda, |
163 | 0x1e, 0xe3, 0x88, 0x5d, 0x99, 0xe3, 0x4b, 0x0a, 0x18, 0x33, 0x0b, 0xf9, | 163 | 0xcf, 0x7d, 0x47, 0xb8, 0xce, 0x46, 0xf4, 0x7f, 0x07, 0x7e, 0xae, 0x2d, |
164 | 0x1e, 0x85, 0x2f, 0x33, 0x03, 0xd1, 0x69, 0x4d, 0xe3, 0x4c, 0x7b, 0x9d, | 164 | 0x33, 0x38, 0x97, 0x9f, 0x82, 0x57, 0x99, 0xb8, 0x57, 0x1e, 0x9e, 0x4c, |
165 | 0x71, 0xe0, 0x41, 0xbe, 0x87, 0xef, 0x9c, 0xd3, 0x95, 0x13, 0x1e, 0xe5, | 165 | 0x9e, 0x9b, 0x37, 0xf9, 0xee, 0x14, 0xf3, 0xe6, 0x6d, 0x22, 0x8d, 0xe4, |
166 | 0x30, 0x2d, 0x4f, 0xf9, 0x1c, 0xd7, 0xbb, 0xf0, 0x1c, 0x7c, 0x9f, 0xdf, | 166 | 0x57, 0x0a, 0xbc, 0x72, 0x6c, 0xd3, 0xdc, 0xaa, 0x7d, 0x3b, 0xea, 0x89, |
167 | 0xf5, 0xae, 0x44, 0xff, 0x77, 0xe1, 0x07, 0x3b, 0x52, 0xc5, 0xb9, 0x95, | 167 | 0x03, 0x9a, 0xe0, 0x67, 0x74, 0x07, 0xf5, 0x84, 0xf6, 0xce, 0xd7, 0x93, |
168 | 0xc1, 0xcb, 0x7c, 0x2a, 0x28, 0x8f, 0xcf, 0x66, 0x16, 0xde, 0x50, 0x7c, | 168 | 0x64, 0x7c, 0xca, 0x84, 0xff, 0xd1, 0x6d, 0xc9, 0x31, 0x55, 0x06, 0x8f, |
169 | 0x77, 0x2b, 0xf3, 0xea, 0x5a, 0x91, 0x4e, 0xf2, 0x33, 0x0b, 0x5e, 0xba, | 169 | 0x06, 0x92, 0xf1, 0x8c, 0x49, 0x9f, 0xb7, 0x4b, 0x9e, 0x76, 0xd9, 0x1f, |
170 | 0x8e, 0x52, 0xdb, 0x8d, 0xef, 0x47, 0x3d, 0x72, 0x41, 0x9f, 0x2d, 0xf3, | 170 | 0x7c, 0x1c, 0x8f, 0xea, 0xfe, 0xe7, 0x20, 0x23, 0xf4, 0xcf, 0xba, 0x40, |
171 | 0x03, 0x51, 0x3d, 0xa2, 0x3d, 0x0c, 0xf5, 0x28, 0x93, 0x5a, 0x52, 0x0a, | 171 | 0xb3, 0xa7, 0x3b, 0xd3, 0xe3, 0x31, 0xd5, 0x36, 0xa6, 0xf6, 0x60, 0x60, |
172 | 0xed, 0xb6, 0x1c, 0xd6, 0x65, 0x0b, 0xb4, 0x66, 0x52, 0xdc, 0xdf, 0x44, | 172 | 0x5d, 0xc8, 0x26, 0x7c, 0xb5, 0x9c, 0xd2, 0x23, 0x3b, 0x03, 0x5f, 0x1e, |
173 | 0xad, 0x5f, 0x9e, 0xf2, 0xd8, 0x1f, 0x7c, 0x9e, 0x6e, 0x37, 0xfd, 0x4f, | 173 | 0x7a, 0xe0, 0xe9, 0xd0, 0x4c, 0x89, 0xb4, 0xdc, 0x43, 0x7e, 0x14, 0x41, |
174 | 0x83, 0x87, 0xf4, 0xdf, 0xfa, 0x41, 0x73, 0xa0, 0x5b, 0xf3, 0xd3, 0x49, | 174 | 0xcc, 0x31, 0x33, 0x8d, 0x73, 0xed, 0x91, 0x22, 0xfd, 0xb9, 0xf9, 0xd0, |
175 | 0xdd, 0x36, 0xe5, 0x05, 0x7e, 0x9a, 0x82, 0x2f, 0x37, 0x07, 0x5f, 0xae, | 175 | 0xd3, 0x32, 0x38, 0x43, 0x7b, 0x83, 0x9f, 0xeb, 0xd8, 0x8c, 0x1f, 0x32, |
176 | 0xa8, 0xf5, 0xcc, 0xc9, 0xc3, 0xd7, 0x87, 0x9e, 0x04, 0x3a, 0x56, 0xad, | 176 | 0xca, 0x16, 0x6c, 0xc1, 0x39, 0xc3, 0x4e, 0xa4, 0x36, 0x6a, 0x3f, 0xe6, |
177 | 0x91, 0x96, 0xbb, 0x40, 0x5f, 0xa6, 0x02, 0x62, 0x0e, 0xab, 0x1c, 0xce, | 177 | 0x49, 0x9c, 0xdb, 0x79, 0x9c, 0x6b, 0x49, 0x86, 0x4e, 0x5e, 0xa2, 0xcc, |
178 | 0x7d, 0x50, 0x2a, 0xf4, 0xf7, 0xce, 0xc6, 0x9e, 0x92, 0xb1, 0x2a, 0xed, | 178 | 0x76, 0xcd, 0x48, 0xb2, 0x6b, 0x4c, 0xb6, 0xd9, 0xd3, 0xd0, 0xb7, 0xcc, |
179 | 0x11, 0x7e, 0x9e, 0xeb, 0x30, 0xbe, 0xc8, 0x6b, 0x5b, 0xd1, 0x0d, 0x39, | 179 | 0x40, 0x65, 0x97, 0x99, 0xe6, 0x98, 0x23, 0x18, 0x83, 0xe7, 0xcc, 0x25, |
180 | 0x80, 0x1d, 0xc9, 0x6e, 0x32, 0x7e, 0xce, 0x13, 0x38, 0xcf, 0x33, 0x38, | 180 | 0x39, 0x54, 0x66, 0xdd, 0xef, 0x80, 0x9f, 0xb0, 0x3b, 0x3d, 0x4f, 0x6a, |
181 | 0xf7, 0x9a, 0xec, 0x3d, 0xf6, 0x0a, 0x65, 0xba, 0xbf, 0x2a, 0x99, 0xfe, | 181 | 0x39, 0xc7, 0x7c, 0x96, 0x3f, 0xdf, 0x25, 0x3d, 0x1f, 0xfb, 0xb1, 0x0f, |
182 | 0x29, 0xd9, 0xe1, 0xcc, 0x43, 0x1f, 0xf3, 0xa3, 0xf5, 0x5b, 0x54, 0x8e, | 182 | 0xc7, 0x2c, 0xce, 0xbb, 0x9b, 0xb6, 0x06, 0x78, 0xd3, 0x61, 0x56, 0x76, |
183 | 0x63, 0x0e, 0x62, 0x0c, 0x9e, 0xd5, 0x57, 0xe4, 0x21, 0x9f, 0x75, 0x0f, | 183 | 0x85, 0xd1, 0x7e, 0xba, 0x87, 0xef, 0x98, 0x07, 0xb6, 0xc6, 0x76, 0xce, |
184 | 0x81, 0x9f, 0xd0, 0x95, 0xc1, 0x27, 0x8c, 0x1e, 0x60, 0x3e, 0x3b, 0x9c, | 184 | 0xa3, 0x2f, 0xf6, 0xe5, 0xae, 0x93, 0xb6, 0x66, 0x9f, 0x5e, 0x9e, 0x3b, |
185 | 0xef, 0x15, 0x33, 0x1f, 0xfb, 0xb1, 0x0f, 0xc7, 0x2c, 0xcf, 0xbb, 0x8b, | 185 | 0xfd, 0x00, 0x96, 0x1f, 0x6e, 0xf2, 0x78, 0x3f, 0x12, 0xf2, 0xb0, 0xfb, |
186 | 0xb6, 0x08, 0x78, 0xb4, 0x4b, 0xd5, 0x6f, 0x89, 0xa3, 0xfd, 0xc4, 0x20, | 186 | 0x2f, 0x51, 0xa6, 0x7e, 0x3d, 0x26, 0x39, 0x37, 0x89, 0x7d, 0x42, 0x87, |
187 | 0xdf, 0x31, 0x0f, 0x6c, 0x91, 0xe3, 0x9e, 0x41, 0x5f, 0xf8, 0x7a, 0xde, | 187 | 0xca, 0x0d, 0x86, 0xb7, 0x47, 0xf0, 0xbf, 0xff, 0x32, 0xf8, 0x20, 0x45, |
188 | 0x7a, 0x29, 0x74, 0x85, 0xf4, 0x52, 0x06, 0xe8, 0x27, 0x68, 0x1b, 0xbc, | 188 | 0x8f, 0x37, 0xe4, 0x0b, 0x79, 0xd2, 0x00, 0xd9, 0xae, 0xc3, 0xbc, 0x58, |
189 | 0x39, 0xe0, 0xfd, 0x1f, 0xc6, 0x02, 0x99, 0x3c, 0x80, 0x32, 0xf5, 0xef, | 189 | 0x47, 0xf1, 0xe0, 0x96, 0x26, 0xcf, 0xef, 0x4d, 0x16, 0x33, 0x8c, 0xd7, |
190 | 0x80, 0x14, 0xbd, 0x0c, 0xf6, 0x09, 0x1d, 0xf3, 0x3b, 0xac, 0x60, 0x8f, | 190 | 0x1a, 0x29, 0xb3, 0xc0, 0xa8, 0xf2, 0xfd, 0x36, 0xe7, 0x9e, 0x32, 0xd7, |
191 | 0xe0, 0xff, 0xc8, 0x39, 0xf0, 0x41, 0x2a, 0x01, 0x6f, 0xc8, 0x17, 0xf2, | 191 | 0x91, 0xde, 0xc4, 0x85, 0xd0, 0x7e, 0x96, 0xbb, 0xa6, 0x4c, 0xf0, 0x1e, |
192 | 0xa4, 0x03, 0xb2, 0x0f, 0xb9, 0x87, 0xdc, 0x96, 0x34, 0x0f, 0xfe, 0xbd, | 192 | 0xe7, 0x93, 0xdd, 0xde, 0xae, 0x71, 0xe9, 0x99, 0x10, 0x65, 0x94, 0xf2, |
193 | 0x33, 0xf0, 0x8b, 0x33, 0x95, 0x3c, 0xe3, 0xb9, 0x4e, 0xe2, 0x26, 0x30, | 193 | 0x9c, 0x77, 0xb7, 0xd9, 0xf7, 0x08, 0x65, 0x34, 0x86, 0xf3, 0x26, 0x2e, |
194 | 0xcc, 0x87, 0x70, 0x60, 0xee, 0x25, 0xb5, 0x9e, 0xf4, 0xa6, 0x97, 0x62, | 194 | 0xf0, 0x69, 0xc1, 0x26, 0xc6, 0x71, 0xc6, 0x5b, 0x34, 0xed, 0x7c, 0xb7, |
195 | 0x7d, 0x2c, 0xf7, 0x2f, 0x41, 0x86, 0xab, 0x38, 0x9f, 0xc2, 0xce, 0x5e, | 195 | 0x64, 0xca, 0xc6, 0x1a, 0xee, 0x7f, 0x6f, 0xf0, 0xea, 0xf8, 0xde, 0xc2, |
196 | 0x83, 0x5b, 0xcf, 0xc6, 0x28, 0xaf, 0x55, 0x60, 0x4c, 0xc9, 0xdb, 0xe1, | 196 | 0x33, 0x39, 0xb6, 0x94, 0x56, 0x9e, 0x67, 0xf5, 0x19, 0x9e, 0x06, 0xed, |
197 | 0xdc, 0x4d, 0xbe, 0x39, 0x8e, 0x3c, 0xe7, 0x45, 0xb1, 0x03, 0xb6, 0xcf, | 197 | 0xac, 0xc7, 0x73, 0xe6, 0x14, 0xf4, 0x0f, 0x58, 0xd1, 0xd3, 0x11, 0xbf, |
198 | 0xa5, 0x1c, 0x26, 0x21, 0x07, 0x36, 0x6c, 0x68, 0x0a, 0x67, 0xfe, 0x6f, | 198 | 0x88, 0xfe, 0x39, 0x60, 0x7c, 0xd1, 0x62, 0xdb, 0x55, 0x63, 0x71, 0x8c, |
199 | 0x9d, 0xc1, 0x5e, 0xf8, 0x6e, 0xcb, 0x9c, 0x83, 0x35, 0xbd, 0xc5, 0x8d, | 199 | 0x49, 0x3f, 0x13, 0x3e, 0xed, 0x05, 0xe3, 0x81, 0xf2, 0x2b, 0x46, 0x76, |
200 | 0x41, 0x1d, 0xdf, 0xb7, 0xf0, 0x8c, 0x0e, 0xaf, 0xa4, 0x9d, 0xe7, 0xdb, | 200 | 0xe6, 0xaa, 0x91, 0x83, 0x5c, 0xcc, 0xb8, 0x3b, 0x20, 0xcf, 0xd4, 0x17, |
201 | 0x7c, 0xa6, 0x27, 0xb0, 0x17, 0xd6, 0xe3, 0x59, 0x3d, 0x2e, 0x7b, 0x89, | 201 | 0x1b, 0x6b, 0x27, 0xe3, 0xff, 0x62, 0xb6, 0x27, 0xa6, 0xa1, 0xdb, 0x07, |
202 | 0x9b, 0x83, 0xdb, 0x52, 0x2f, 0xa2, 0x7f, 0x11, 0x36, 0xa1, 0x62, 0xb3, | 202 | 0xc0, 0x58, 0xef, 0x2c, 0x5b, 0xd5, 0xd9, 0xce, 0x9b, 0x61, 0x8d, 0x75, |
203 | 0xed, 0x6d, 0x6b, 0x79, 0x8c, 0xa2, 0x5f, 0x0a, 0x1f, 0x78, 0xc9, 0xfa, | 203 | 0x2c, 0x27, 0xed, 0x7b, 0xe5, 0x35, 0xec, 0x77, 0x16, 0x7c, 0x9e, 0x95, |
204 | 0x92, 0xff, 0x92, 0x55, 0xa8, 0xbe, 0x6d, 0x15, 0x21, 0x27, 0x55, 0x8f, | 204 | 0x42, 0xb9, 0x24, 0xf9, 0x93, 0xdb, 0xec, 0x61, 0xc4, 0xb8, 0x8b, 0xb4, |
205 | 0xf1, 0x0b, 0xf5, 0xc7, 0xc1, 0xda, 0x99, 0xd4, 0x5b, 0xaa, 0x37, 0x3d, | 205 | 0x13, 0xc3, 0x8a, 0xf4, 0xbd, 0x8d, 0xdd, 0xae, 0x14, 0x6b, 0xd2, 0xc4, |
206 | 0x0f, 0x2c, 0xb8, 0x1f, 0x3a, 0x5d, 0xb4, 0x17, 0xa4, 0xec, 0xd7, 0xa4, | 206 | 0xb2, 0x0e, 0xc8, 0x13, 0xea, 0x4a, 0x8b, 0x32, 0x79, 0xe7, 0xb2, 0xfd, |
207 | 0x74, 0x6c, 0x07, 0xf4, 0x2d, 0x1d, 0xa1, 0x8b, 0x78, 0x56, 0xa1, 0x1f, | 207 | 0x20, 0xbe, 0xed, 0x59, 0xba, 0xa7, 0x19, 0xb9, 0xfe, 0x9e, 0x76, 0x2f, |
208 | 0x6e, 0xed, 0xf2, 0xa4, 0xd2, 0x92, 0x23, 0xae, 0x6d, 0x83, 0xec, 0xa0, | 208 | 0xec, 0x89, 0xd8, 0x01, 0xcc, 0x77, 0x81, 0xf9, 0x2e, 0x30, 0xdf, 0x05, |
209 | 0xae, 0xb6, 0x2c, 0x7f, 0xb7, 0xad, 0xa2, 0x15, 0xb1, 0xee, 0xe0, 0x4a, | 209 | 0xe6, 0xbb, 0xc0, 0x7c, 0x17, 0xf6, 0xc0, 0x05, 0xee, 0xbb, 0xc0, 0x7d, |
210 | 0x7a, 0xab, 0x72, 0x71, 0x7a, 0x77, 0x35, 0xe8, 0x25, 0x66, 0x00, 0xff, | 210 | 0x17, 0xb8, 0xef, 0x02, 0xf7, 0xdd, 0x2c, 0xce, 0x8e, 0xd8, 0x4e, 0xbb, |
211 | 0x3d, 0xe0, 0xbf, 0x07, 0xfc, 0xf7, 0x80, 0xff, 0x1e, 0xf0, 0xdf, 0x83, | 211 | 0x71, 0xdf, 0x82, 0xad, 0xf4, 0x7c, 0x9b, 0x9b, 0xb4, 0xbf, 0x00, 0x9d, |
212 | 0x6d, 0xf0, 0x60, 0x03, 0x3c, 0xd8, 0x00, 0x0f, 0x36, 0xc0, 0x83, 0x0d, | 212 | 0xb4, 0x5b, 0x64, 0xb8, 0x6b, 0x33, 0xf6, 0x56, 0x87, 0x67, 0x3d, 0x9e, |
213 | 0xf0, 0x0a, 0x38, 0x27, 0xe2, 0x3c, 0x6d, 0xc8, 0x3d, 0x0d, 0xbb, 0x19, | 213 | 0x58, 0xa3, 0xeb, 0x33, 0x5a, 0x77, 0xbe, 0x0a, 0xba, 0x4c, 0x94, 0x7f, |
214 | 0xf8, 0x39, 0x57, 0x1a, 0xdf, 0x01, 0xfa, 0xe7, 0x6c, 0x91, 0xf1, 0xfe, | 214 | 0x09, 0xb2, 0x59, 0x03, 0x7a, 0x7e, 0x41, 0xfb, 0x15, 0xa7, 0x2c, 0x4f, |
215 | 0x2b, 0xb0, 0xb7, 0x56, 0x3c, 0xdb, 0xf0, 0xc4, 0x1a, 0xfd, 0x9f, 0x35, | 215 | 0x36, 0xeb, 0x51, 0xf7, 0x69, 0xd4, 0xd5, 0xa3, 0xcf, 0x21, 0xf4, 0xa1, |
216 | 0x7a, 0xf2, 0x55, 0xd0, 0xa5, 0x50, 0xfe, 0x05, 0xc8, 0x61, 0x0b, 0xe8, | 216 | 0x5f, 0xd2, 0xa0, 0xeb, 0x82, 0xfd, 0xe8, 0x9f, 0xfc, 0x26, 0xd6, 0x4a, |
217 | 0xf9, 0x94, 0xf1, 0x31, 0xbe, 0x61, 0x07, 0x72, 0xd8, 0x86, 0xba, 0xcf, | 217 | 0xa2, 0x5f, 0x03, 0xe6, 0x6e, 0x45, 0x9f, 0xcf, 0xa2, 0xcf, 0xcd, 0x28, |
218 | 0xa0, 0xae, 0x0d, 0x7d, 0xf6, 0xa3, 0x0f, 0x7d, 0x94, 0x0e, 0x53, 0x17, | 218 | 0xd3, 0x9f, 0xdd, 0x82, 0xf2, 0xa7, 0xaa, 0xc6, 0xdc, 0x8a, 0xba, 0xcf, |
219 | 0xed, 0x47, 0x5f, 0xe5, 0x0b, 0x58, 0x2b, 0x83, 0x7e, 0x1d, 0x98, 0xbb, | 219 | 0x54, 0xd5, 0xcd, 0xa3, 0x0e, 0x71, 0xb0, 0x7d, 0x51, 0x8f, 0x2b, 0xa2, |
220 | 0x07, 0x7d, 0x6e, 0x46, 0x9f, 0xab, 0x50, 0xa6, 0x6f, 0xdb, 0x8d, 0xf2, | 220 | 0xdc, 0x5c, 0xd5, 0xe7, 0x12, 0xea, 0x7a, 0x51, 0xf7, 0x3d, 0x3c, 0x11, |
221 | 0xa7, 0x9b, 0xc6, 0x5c, 0x83, 0xba, 0xcf, 0x36, 0xd5, 0x9d, 0x45, 0x1d, | 221 | 0xff, 0xda, 0xa4, 0xc9, 0x6f, 0xa3, 0x6f, 0x9a, 0x40, 0x7d, 0x58, 0xfb, |
222 | 0x62, 0x62, 0xe7, 0x45, 0x33, 0xae, 0x82, 0x72, 0x57, 0x53, 0x9f, 0x57, | 222 | 0x97, 0x4f, 0xd2, 0xdf, 0x82, 0x9d, 0xfd, 0x53, 0xcb, 0xf3, 0xc7, 0x9e, |
223 | 0x50, 0x37, 0x84, 0xba, 0xbf, 0xc2, 0x13, 0xb1, 0xb0, 0x43, 0x9a, 0xc2, | 223 | 0xb1, 0x3d, 0x59, 0xf5, 0xcb, 0x3f, 0xaa, 0x2a, 0xb3, 0xef, 0xff, 0x56, |
224 | 0x36, 0xfa, 0xa9, 0x69, 0xd4, 0xc7, 0x8d, 0xaf, 0xf9, 0x24, 0x7d, 0x2f, | 224 | 0xd5, 0xed, 0xda, 0xb8, 0xb4, 0xfc, 0x7e, 0x78, 0xf9, 0x98, 0xe3, 0x55, |
225 | 0xd8, 0xdc, 0x3f, 0xb6, 0x03, 0xdf, 0x0c, 0xde, 0xab, 0x96, 0xc3, 0xb0, | 225 | 0x7d, 0x5e, 0x6e, 0x5c, 0x5a, 0xfe, 0x7c, 0xcd, 0xf2, 0x31, 0xbf, 0xb5, |
226 | 0xfc, 0xcd, 0xa6, 0x32, 0xfb, 0x7e, 0xbf, 0xa9, 0xae, 0x6d, 0xd3, 0xca, | 226 | 0x61, 0x69, 0xdd, 0xe1, 0xa6, 0xa5, 0x65, 0xfa, 0x7d, 0x31, 0xc4, 0x2d, |
227 | 0xf2, 0x4f, 0xe3, 0xab, 0xc7, 0xdc, 0xdb, 0xd4, 0xe7, 0xeb, 0x9d, 0x2b, | 227 | 0x7e, 0xff, 0x07, 0x37, 0x79, 0xed, 0xe4, 0x6f, 0xb5, 0x2c, 0x29, 0xe3, |
228 | 0xcb, 0xbb, 0x5b, 0x56, 0x8f, 0xd9, 0xbe, 0x71, 0x65, 0xdd, 0xad, 0x9b, | 228 | 0x8d, 0xb2, 0x89, 0x73, 0xb8, 0x60, 0x40, 0xe7, 0x6c, 0x33, 0xfd, 0x8a, |
229 | 0x57, 0x96, 0xe9, 0x03, 0x26, 0x11, 0xc3, 0x84, 0xfd, 0x77, 0x7e, 0x22, | 229 | 0x91, 0x83, 0x4c, 0x65, 0xcb, 0xfe, 0x7c, 0xd4, 0xe5, 0xea, 0xdc, 0x80, |
230 | 0x68, 0x27, 0x7f, 0x9b, 0x65, 0x49, 0x2b, 0x23, 0xca, 0x0a, 0xe7, 0xb0, | 230 | 0x9f, 0x13, 0xa0, 0x8f, 0x15, 0x85, 0xdc, 0x00, 0x8b, 0x63, 0xc9, 0xa3, |
231 | 0x64, 0x41, 0x9f, 0x1c, 0x95, 0x7b, 0xc9, 0x2a, 0x42, 0xa6, 0x0a, 0x7e, | 231 | 0x45, 0x59, 0xd4, 0xe1, 0x36, 0xf3, 0x5a, 0x3a, 0x3c, 0xa9, 0x71, 0xeb, |
232 | 0x38, 0x1f, 0x75, 0xb6, 0x39, 0x4f, 0x10, 0xe6, 0x07, 0xe8, 0x6f, 0xb5, | 232 | 0x32, 0xe8, 0xac, 0x48, 0x7f, 0xaa, 0x96, 0x76, 0x47, 0xe3, 0x19, 0xb1, |
233 | 0x43, 0x6e, 0xee, 0xa2, 0x4d, 0x3a, 0x54, 0x91, 0x65, 0xfd, 0xdc, 0xaa, | 233 | 0xa8, 0x52, 0x09, 0x6d, 0xad, 0xc8, 0xc1, 0xd4, 0x3b, 0x15, 0x51, 0x38, |
234 | 0xce, 0xa7, 0x9f, 0xf7, 0x19, 0x8c, 0x3a, 0x07, 0x3a, 0xeb, 0x32, 0x92, | 234 | 0xf8, 0x4d, 0xcd, 0x57, 0xe2, 0xa1, 0x0d, 0xb9, 0x8d, 0x29, 0x3f, 0x2e, |
235 | 0x5d, 0x47, 0x1b, 0x63, 0xb0, 0x8b, 0xb8, 0x53, 0xaf, 0xc7, 0xb6, 0xd7, | 235 | 0x94, 0x3e, 0x45, 0x9f, 0xe4, 0x88, 0x87, 0xb3, 0xc4, 0x22, 0x94, 0xcb, |
236 | 0x65, 0x5f, 0xf6, 0xdd, 0xba, 0x68, 0xcc, 0xbb, 0x57, 0xe3, 0x4e, 0x5a, | 236 | 0x63, 0xe8, 0xc3, 0xf5, 0xf1, 0x9c, 0x21, 0xb6, 0x5b, 0xca, 0xce, 0xe4, |
237 | 0x75, 0xe3, 0x8c, 0x1c, 0xc4, 0x12, 0x88, 0xed, 0x93, 0xb4, 0x49, 0xc7, | 237 | 0x6d, 0xce, 0xbb, 0x12, 0x5e, 0xfe, 0xd8, 0xa2, 0x2f, 0x68, 0x39, 0x67, |
238 | 0xe9, 0x9f, 0x1c, 0x0c, 0x30, 0x95, 0xb8, 0x83, 0xb2, 0x3f, 0x85, 0x39, | 238 | 0x60, 0xf3, 0xd8, 0x46, 0xff, 0xe0, 0x0c, 0x7d, 0x91, 0x80, 0x6f, 0xd3, |
239 | 0xb9, 0x3e, 0x9e, 0x55, 0xe2, 0xb8, 0xad, 0x6d, 0x4a, 0xc9, 0xe1, 0xbc, | 239 | 0x11, 0x12, 0x67, 0x11, 0x47, 0xbd, 0x7d, 0xb5, 0xd0, 0xd7, 0x5f, 0xc3, |
240 | 0x6b, 0x61, 0xe3, 0xbf, 0xd8, 0xf4, 0x0b, 0x6d, 0xf7, 0x24, 0xec, 0x1b, | 240 | 0x5e, 0x57, 0xc6, 0xab, 0x76, 0xf3, 0xfa, 0xba, 0xbd, 0x77, 0x41, 0xb7, |
241 | 0xdb, 0xe8, 0x2b, 0x9c, 0xa4, 0x5f, 0x12, 0xc1, 0xaa, 0x9b, 0x62, 0xe2, | 241 | 0x7d, 0xd9, 0x5b, 0x29, 0x07, 0x70, 0x45, 0x9d, 0xc5, 0xf3, 0xe5, 0xe4, |
242 | 0x2e, 0x63, 0x66, 0xb0, 0xaf, 0x2d, 0xf4, 0xfb, 0x2f, 0x61, 0xaf, 0x6b, | 242 | 0xb1, 0x22, 0x74, 0x69, 0x4e, 0xc5, 0xbb, 0xfe, 0xb9, 0xd0, 0xaf, 0x49, |
243 | 0x63, 0x51, 0xaf, 0xba, 0xb8, 0x6e, 0xef, 0x69, 0xe8, 0x76, 0x28, 0x7b, | 243 | 0x9e, 0x9a, 0x82, 0x6c, 0x0f, 0xa9, 0x38, 0x80, 0x31, 0x40, 0x45, 0x76, |
244 | 0x6b, 0xe5, 0x03, 0x5e, 0xd5, 0x67, 0xf1, 0xac, 0x9f, 0x39, 0x5c, 0x81, | 244 | 0xa7, 0x86, 0x62, 0xe4, 0x43, 0xc6, 0xbc, 0x1a, 0xa6, 0x1f, 0x31, 0xe7, |
245 | 0x2e, 0x2d, 0xea, 0xd8, 0x37, 0x3c, 0x17, 0xfa, 0x38, 0x99, 0xe3, 0x73, | 245 | 0x92, 0x67, 0x29, 0xb4, 0xa7, 0xc0, 0xdb, 0x7f, 0x95, 0x5c, 0x8c, 0x75, |
246 | 0x90, 0xed, 0xbd, 0x3a, 0x26, 0x60, 0x3c, 0x50, 0x97, 0x5d, 0xd9, 0x4f, | 246 | 0xff, 0x55, 0x99, 0x86, 0xff, 0xa3, 0x7c, 0x22, 0xe5, 0x03, 0xd0, 0xa7, |
247 | 0x25, 0xc9, 0x87, 0xbc, 0xfa, 0x71, 0x9c, 0x3e, 0xc3, 0xa2, 0x47, 0x9e, | 247 | 0x83, 0xad, 0x2f, 0x93, 0xa7, 0x17, 0xc0, 0x67, 0xdf, 0x2f, 0xb8, 0x4c, |
248 | 0x65, 0xd1, 0x9e, 0x05, 0x26, 0xfc, 0xab, 0x14, 0x93, 0xac, 0x7b, 0xab, | 248 | 0xbf, 0x54, 0x96, 0xfa, 0xcf, 0x22, 0x8f, 0x94, 0xfe, 0x19, 0x76, 0xc8, |
249 | 0x3e, 0x0f, 0xbf, 0x4a, 0xfb, 0x47, 0xda, 0xde, 0xd3, 0xbf, 0x83, 0x5d, | 249 | 0xc4, 0x7c, 0xb4, 0x77, 0xb4, 0x29, 0xac, 0xdf, 0x11, 0xa6, 0xff, 0xe6, |
250 | 0xf7, 0xc9, 0xd3, 0x25, 0xf0, 0x39, 0xf4, 0x01, 0x7e, 0x40, 0x1f, 0x55, | 250 | 0xd9, 0xff, 0x10, 0xd6, 0x43, 0x4c, 0x5d, 0xfa, 0x0f, 0x23, 0xef, 0xb6, |
251 | 0x56, 0xfa, 0xd2, 0x22, 0x0f, 0xd5, 0xfe, 0x01, 0x36, 0x47, 0x05, 0xbe, | 251 | 0xd2, 0xb7, 0xc2, 0xfe, 0x89, 0xab, 0x6c, 0x63, 0x5d, 0x44, 0xfb, 0xdc, |
252 | 0x0a, 0xe3, 0x65, 0x97, 0xf5, 0x37, 0xc6, 0xe9, 0xcb, 0x05, 0xb6, 0x3e, | 252 | 0x51, 0xed, 0x63, 0xdb, 0xda, 0xc7, 0x26, 0x1d, 0x46, 0xc4, 0x4e, 0xfb, |
253 | 0x86, 0xf5, 0x10, 0x5f, 0xd7, 0xfe, 0xd3, 0x2a, 0x79, 0x3d, 0xf4, 0xb3, | 253 | 0xbe, 0x02, 0xcf, 0x0c, 0x67, 0xb3, 0x55, 0xf9, 0x0a, 0xb2, 0xb2, 0xaf, |
254 | 0xb0, 0x7f, 0xf8, 0x50, 0x3e, 0xdb, 0x58, 0x97, 0x30, 0xfe, 0x77, 0xbb, | 254 | 0xe0, 0xd3, 0x74, 0x16, 0xfb, 0xa4, 0x6f, 0xa7, 0x72, 0x3f, 0x8d, 0x5e, |
255 | 0xf1, 0xb7, 0x1d, 0xe3, 0x6f, 0x6b, 0x3a, 0x12, 0x4e, 0x2e, 0xf4, 0x0b, | 255 | 0xbe, 0x89, 0x34, 0xf8, 0x36, 0x53, 0xd9, 0xe6, 0xa3, 0x30, 0x83, 0xd8, |
256 | 0x78, 0x66, 0xe9, 0x83, 0x6a, 0x3b, 0xfd, 0x82, 0x0e, 0x59, 0xdb, 0x2f, | 256 | 0xdb, 0x6f, 0x83, 0xd6, 0x3d, 0x92, 0x1d, 0x3f, 0xab, 0x6d, 0x30, 0x63, |
257 | 0x08, 0x69, 0x3a, 0x85, 0x7d, 0xd2, 0xcf, 0xd3, 0x79, 0xa0, 0xce, 0x20, | 257 | 0x07, 0xfa, 0xed, 0x9e, 0xcc, 0x66, 0x53, 0x0d, 0x86, 0x9e, 0xa7, 0x19, |
258 | 0xf7, 0x44, 0x1a, 0x42, 0xfb, 0xa8, 0xed, 0xf0, 0x21, 0x98, 0x3c, 0xe6, | 258 | 0x56, 0x33, 0x90, 0x97, 0xe2, 0x5a, 0xf4, 0x6d, 0x7c, 0x3f, 0x67, 0x56, |
259 | 0x24, 0x41, 0xeb, 0x6e, 0x29, 0x4c, 0x9f, 0x32, 0xf6, 0x96, 0x71, 0x04, | 259 | 0xfb, 0x39, 0xe7, 0xe5, 0xa0, 0xeb, 0xc5, 0x0a, 0xfd, 0xa5, 0x0b, 0xa8, |
260 | 0x7d, 0xf8, 0x40, 0x66, 0x0b, 0xd9, 0x0e, 0xcb, 0xcc, 0xd3, 0x05, 0x0b, | 260 | 0x53, 0xb4, 0xc7, 0xe9, 0x4f, 0x9a, 0x26, 0xfd, 0xc9, 0x24, 0x82, 0x0e, |
261 | 0x19, 0xc9, 0x51, 0x71, 0x2d, 0xfa, 0x31, 0xa1, 0x4f, 0xb3, 0x60, 0x7c, | 261 | 0x6f, 0x2f, 0x6d, 0xd8, 0xcb, 0xcc, 0xc2, 0x5e, 0xea, 0x2f, 0x2c, 0xdd, |
262 | 0x9a, 0x33, 0xb2, 0xcf, 0x0b, 0xe2, 0x86, 0x91, 0xda, 0x12, 0xea, 0x34, | 262 | 0x0b, 0xe9, 0xb7, 0xc1, 0x4f, 0x4b, 0xe3, 0x14, 0xe7, 0xfc, 0x46, 0x98, |
263 | 0xed, 0x29, 0xfa, 0x96, 0x0a, 0x3e, 0x77, 0xfe, 0xde, 0x0c, 0x02, 0x90, | 263 | 0x18, 0xd6, 0x4f, 0x9f, 0xc8, 0xf5, 0x7c, 0xb1, 0xa5, 0xf3, 0xc2, 0x63, |
264 | 0x60, 0x2f, 0x5b, 0xb1, 0x97, 0x6a, 0x63, 0x2f, 0x6d, 0x4b, 0xcd, 0x3e, | 264 | 0x28, 0x4d, 0x5d, 0xa3, 0x8d, 0xfb, 0xf7, 0xf5, 0xca, 0xd2, 0xd8, 0xce, |
265 | 0x0e, 0xc7, 0x4e, 0xae, 0x1a, 0x2b, 0xd8, 0xc7, 0xdc, 0x79, 0xda, 0xb8, | 265 | 0x3d, 0xfc, 0x09, 0xe6, 0x8c, 0x19, 0x79, 0xe5, 0x9b, 0xd1, 0xcf, 0x41, |
266 | 0x47, 0xfa, 0x0d, 0x8e, 0xd9, 0x63, 0x78, 0x4e, 0x8f, 0x63, 0x8f, 0x49, | 266 | 0xdc, 0x5d, 0x7a, 0x05, 0x4f, 0xea, 0x8e, 0x9a, 0x07, 0xfb, 0x8d, 0xaa, |
267 | 0xab, 0xa4, 0x7d, 0x2d, 0xfa, 0x2d, 0x88, 0xb3, 0x6b, 0x2f, 0xe1, 0x49, | 267 | 0xfd, 0x8e, 0xb9, 0x97, 0xd4, 0x1e, 0xa7, 0x4b, 0x3f, 0x90, 0xc2, 0xc9, |
268 | 0xfd, 0xd0, 0xf3, 0x60, 0x4f, 0xed, 0x7a, 0x4f, 0x53, 0xde, 0x2b, 0x7a, | 268 | 0x1f, 0xc2, 0x26, 0x06, 0x73, 0x75, 0xcc, 0x73, 0x92, 0x57, 0xc5, 0x00, |
269 | 0x1f, 0xf3, 0xb5, 0xbf, 0x91, 0xf2, 0xb1, 0x1f, 0xc0, 0xee, 0x45, 0x73, | 269 | 0xb6, 0x92, 0x66, 0xe6, 0xe1, 0xbe, 0x17, 0xf6, 0xe2, 0x85, 0x71, 0x9c, |
270 | 0x73, 0xcc, 0x6b, 0x92, 0x1f, 0x95, 0x08, 0x7e, 0x72, 0xaf, 0xcc, 0xbb, | 270 | 0xbf, 0xe1, 0xb5, 0xab, 0xf5, 0x7d, 0x9e, 0xd7, 0x04, 0xe8, 0xa9, 0xc0, |
271 | 0xbd, 0x1c, 0x0f, 0xe2, 0x83, 0x69, 0x9c, 0xb1, 0x15, 0xb4, 0xeb, 0xf5, | 271 | 0x47, 0x8d, 0x83, 0x86, 0xe0, 0x98, 0xc7, 0xa4, 0xcf, 0xe5, 0x59, 0xb5, |
272 | 0x43, 0xbe, 0xb6, 0x44, 0xe8, 0xa9, 0xc3, 0xe7, 0x4c, 0x81, 0x86, 0xe8, | 272 | 0xc7, 0x87, 0xc4, 0xb1, 0xf3, 0xe2, 0xfb, 0x25, 0x5c, 0x9f, 0x78, 0x90, |
273 | 0x98, 0x03, 0x32, 0xec, 0xf1, 0x3c, 0x7a, 0x53, 0x7b, 0xc5, 0x75, 0x4a, | 273 | 0x43, 0x0c, 0xc5, 0xdc, 0xaa, 0xcf, 0x57, 0x9f, 0xa7, 0xd1, 0x0b, 0xd5, |
274 | 0x12, 0xfa, 0x19, 0x5c, 0x9f, 0x3a, 0x5f, 0x84, 0xe3, 0xcb, 0x5c, 0x6a, | 274 | 0xf2, 0x31, 0x8a, 0xd8, 0xab, 0xe0, 0x92, 0x4f, 0xbe, 0xdc, 0xfa, 0x6b, |
275 | 0xc8, 0xbb, 0x90, 0x6f, 0xed, 0x4b, 0xcd, 0x32, 0x30, 0x89, 0x58, 0xab, | 275 | 0x5f, 0x31, 0xb8, 0x9f, 0x11, 0x95, 0x4f, 0x7c, 0x6d, 0x41, 0x7e, 0x87, |
276 | 0xec, 0x91, 0x4f, 0xa1, 0x6c, 0x86, 0x6b, 0xbf, 0x6a, 0x71, 0x3f, 0x13, | 276 | 0x81, 0x2b, 0x9e, 0x3c, 0xbe, 0xaa, 0x79, 0xe3, 0xcb, 0x6d, 0x54, 0xcb, |
277 | 0x3a, 0x7f, 0xf8, 0x4f, 0x0d, 0x19, 0x1d, 0x07, 0x76, 0x04, 0x32, 0xf7, | 277 | 0x00, 0x63, 0x43, 0xea, 0x95, 0x2f, 0x23, 0x1d, 0xf6, 0xdd, 0x8a, 0x17, |
278 | 0xf7, 0x86, 0x37, 0xa1, 0x6c, 0xb6, 0x9b, 0x73, 0x66, 0x2c, 0x48, 0xdd, | 278 | 0x6c, 0x53, 0x79, 0x46, 0x75, 0xce, 0x83, 0x0b, 0xe7, 0xbc, 0xbe, 0x4a, |
279 | 0x09, 0xe5, 0x60, 0x9b, 0x73, 0xa7, 0xe6, 0x05, 0xdb, 0xb4, 0xcf, 0xad, | 279 | 0x66, 0x53, 0xb6, 0xa7, 0xa3, 0xd4, 0x45, 0xe8, 0x34, 0xf8, 0xf5, 0xfc, |
280 | 0xcf, 0x72, 0xac, 0x71, 0x96, 0x1b, 0x9a, 0xe4, 0xf2, 0xdd, 0x8d, 0x81, | 280 | 0x12, 0xdd, 0xef, 0xba, 0x46, 0x8e, 0x36, 0x2a, 0xa1, 0xc9, 0x97, 0xc1, |
281 | 0x1e, 0x52, 0xdf, 0xa0, 0xb7, 0xe0, 0xd7, 0xb3, 0x2b, 0xf4, 0xbb, 0xff, | 281 | 0xcb, 0x5b, 0x11, 0xbb, 0x88, 0x58, 0x13, 0xc4, 0x28, 0xfa, 0x22, 0x8b, |
282 | 0x3c, 0x39, 0xd9, 0x76, 0x89, 0xcd, 0x7e, 0x0f, 0xbc, 0xbc, 0x06, 0xb1, | 282 | 0xfe, 0xf1, 0xb4, 0xac, 0xe4, 0x1b, 0x5f, 0xcf, 0x0f, 0xb9, 0x7d, 0x8d, |
283 | 0x8a, 0x88, 0x3d, 0x43, 0x1c, 0xa2, 0xbf, 0xb1, 0xec, 0xef, 0xce, 0xcb, | 283 | 0x7e, 0xc8, 0xaf, 0xd6, 0x30, 0x96, 0x99, 0x83, 0x9e, 0x1e, 0xc0, 0xf8, |
284 | 0x5a, 0xbe, 0xee, 0xc5, 0x7c, 0x8d, 0x4f, 0x5e, 0xa2, 0xaf, 0x31, 0xdc, | 284 | 0x1a, 0xe7, 0x47, 0xb0, 0x6f, 0xa7, 0xad, 0x5a, 0xc7, 0xc7, 0x8b, 0xa8, |
285 | 0x22, 0xad, 0xc4, 0xa2, 0x33, 0xf0, 0x6d, 0x2d, 0x69, 0x71, 0xbf, 0x01, | 285 | 0x6c, 0x9c, 0xdc, 0xa2, 0x30, 0xc3, 0x9e, 0x58, 0xc4, 0x8c, 0x61, 0x97, |
286 | 0x1b, 0x76, 0xda, 0x5e, 0xe7, 0x86, 0x98, 0xd0, 0x2e, 0x9b, 0x66, 0xb7, | 286 | 0xf2, 0xab, 0xf4, 0x34, 0xb6, 0x51, 0x7c, 0x8c, 0x78, 0xd6, 0x62, 0xbe, |
287 | 0x68, 0x5c, 0x70, 0x66, 0x96, 0x71, 0x61, 0x1c, 0xbc, 0x1f, 0x09, 0xf2, | 287 | 0x67, 0x65, 0x1c, 0xf0, 0x72, 0xba, 0x2b, 0xc7, 0x0a, 0x37, 0x55, 0xf1, |
288 | 0xbc, 0xc9, 0x4d, 0x72, 0xa9, 0xf1, 0xf5, 0xb2, 0xdf, 0x3f, 0xd6, 0xf0, | 288 | 0x72, 0x25, 0xdc, 0x3c, 0x07, 0xde, 0xa5, 0x11, 0x13, 0x27, 0xcf, 0x88, |
289 | 0xfb, 0xaf, 0x6c, 0xe2, 0xe3, 0x5a, 0xb8, 0x78, 0x1a, 0x7c, 0xcb, 0x21, | 289 | 0xec, 0x41, 0x9c, 0x9c, 0x7c, 0x4b, 0xa4, 0x0f, 0xb1, 0x72, 0x72, 0x56, |
290 | 0xfe, 0x65, 0x5c, 0x3b, 0x8c, 0x78, 0x98, 0xb1, 0x58, 0x1e, 0x31, 0x71, | 290 | 0x24, 0x83, 0x78, 0x99, 0xf1, 0xdb, 0x5d, 0xe0, 0x69, 0x2f, 0xe2, 0xe9, |
291 | 0xe6, 0xb4, 0xc8, 0x6e, 0xc4, 0xc8, 0x99, 0x1f, 0x31, 0x7f, 0xf5, 0xbc, | 291 | 0x1e, 0x60, 0x6a, 0x0a, 0x18, 0xbb, 0x1d, 0xfc, 0xed, 0x02, 0xbf, 0x6d, |
292 | 0x9f, 0x99, 0x13, 0xb9, 0x1d, 0x7c, 0x1d, 0x04, 0x6e, 0x66, 0x81, 0xa3, | 292 | 0xc4, 0x5b, 0x65, 0x39, 0x70, 0x5c, 0x8c, 0x7d, 0x2a, 0x7f, 0x4d, 0x7d, |
293 | 0x3b, 0xc1, 0xdf, 0x7e, 0x8d, 0x9d, 0xf7, 0x1f, 0x11, 0xeb, 0x0e, 0x9d, | 293 | 0x8f, 0xc1, 0xce, 0x56, 0x2a, 0x87, 0x52, 0xed, 0x88, 0xf5, 0x13, 0xf2, |
294 | 0xab, 0xa6, 0x3e, 0x27, 0x61, 0x47, 0xeb, 0xf5, 0xfd, 0xd9, 0x5e, 0xc4, | 294 | 0x39, 0x8b, 0xb1, 0xad, 0x61, 0xb5, 0x75, 0x7f, 0x3f, 0x14, 0xf4, 0x6b, |
295 | 0xf5, 0x69, 0xb9, 0xd5, 0x66, 0x1c, 0x6b, 0xd9, 0x5b, 0x07, 0xe6, 0x63, | 295 | 0xb3, 0xd7, 0xb5, 0x13, 0xcb, 0xf9, 0x9f, 0x53, 0xb6, 0xe2, 0xc5, 0xd0, |
296 | 0x51, 0x9f, 0xb4, 0x70, 0x51, 0x3b, 0xb0, 0x9a, 0xf7, 0x45, 0x6d, 0x0b, | 296 | 0x6a, 0xfc, 0xdf, 0xb7, 0xc0, 0xff, 0x9e, 0x3a, 0xa9, 0xbb, 0x4b, 0xe5, |
297 | 0x0e, 0xc7, 0x2e, 0xc4, 0xfb, 0x3b, 0x1a, 0xbc, 0x6f, 0x69, 0x95, 0xd6, | 297 | 0x16, 0xda, 0xba, 0x0f, 0x11, 0xcf, 0x52, 0xb0, 0xfb, 0xb0, 0xcf, 0x15, |
298 | 0xdb, 0x75, 0x1e, 0x61, 0xeb, 0xc0, 0x7e, 0xe2, 0x55, 0x16, 0x76, 0x1d, | 298 | 0xb9, 0x33, 0x75, 0xb5, 0x72, 0xd1, 0xd9, 0x20, 0xf9, 0xed, 0x0f, 0x6a, |
299 | 0xf6, 0xb7, 0x2e, 0xb7, 0x65, 0xdf, 0xae, 0xbf, 0xe8, 0x6e, 0x94, 0xd2, | 299 | 0x4c, 0x3f, 0xf5, 0x87, 0x59, 0xa7, 0x08, 0x1d, 0xf1, 0xf2, 0x88, 0x43, |
300 | 0xce, 0xfb, 0x0c, 0x66, 0x2f, 0x7d, 0xad, 0xe0, 0x56, 0xa0, 0x1f, 0x41, | 300 | 0xe3, 0x11, 0x58, 0x0a, 0xfe, 0x35, 0xca, 0x74, 0xef, 0x55, 0x9c, 0xe3, |
301 | 0xce, 0x70, 0xef, 0x74, 0x02, 0x96, 0x80, 0x7f, 0x9d, 0x32, 0x3f, 0xf4, | 301 | 0xb6, 0x33, 0x4c, 0x42, 0x11, 0x6b, 0xa6, 0x63, 0x51, 0x95, 0x43, 0xde, |
302 | 0x16, 0xce, 0x70, 0xc7, 0x49, 0x26, 0x9c, 0x14, 0x70, 0x78, 0x3e, 0xd9, | 302 | 0xe4, 0xb0, 0xde, 0xc6, 0xb9, 0x0e, 0xc8, 0x34, 0xfc, 0x8b, 0x99, 0x5e, |
303 | 0xae, 0xf3, 0xc5, 0x9f, 0x70, 0x59, 0xef, 0xe0, 0x4c, 0x47, 0x65, 0x1e, | 303 | 0xd0, 0xb8, 0xbd, 0x19, 0xfd, 0xa9, 0x7b, 0xe4, 0xf9, 0x80, 0x0c, 0xc6, |
304 | 0xfe, 0x43, 0x75, 0x08, 0x34, 0xee, 0xec, 0x42, 0x7f, 0xea, 0x1d, 0x79, | 304 | 0xc8, 0xd3, 0x18, 0xfa, 0xef, 0x45, 0x9f, 0x46, 0x3c, 0xff, 0x28, 0x34, |
305 | 0x3e, 0x0a, 0xdb, 0x4b, 0x9e, 0x26, 0xd1, 0x7f, 0x0f, 0xfa, 0x74, 0xe2, | 305 | 0x6d, 0x33, 0x9e, 0xfe, 0x3c, 0xca, 0x9c, 0x23, 0x68, 0x5b, 0x77, 0x85, |
306 | 0x79, 0x5f, 0x6c, 0xde, 0x61, 0xec, 0xfc, 0x79, 0x94, 0x39, 0x47, 0xd4, | 306 | 0x45, 0xcd, 0xc9, 0x31, 0xcd, 0x0a, 0x03, 0x16, 0xd7, 0xe2, 0x3a, 0x6c, |
307 | 0x76, 0x7e, 0x2e, 0x2e, 0x7a, 0x4e, 0x8e, 0xe9, 0xd2, 0xfa, 0xbf, 0xbc, | 307 | 0x7b, 0xaf, 0x72, 0x47, 0x77, 0x6f, 0x60, 0xbd, 0x86, 0xc0, 0x7a, 0xbd, |
308 | 0x16, 0xd7, 0x61, 0xdb, 0xcf, 0xea, 0xd7, 0x0f, 0x0c, 0x45, 0xd6, 0xeb, | 308 | 0x81, 0xf5, 0x48, 0x67, 0x63, 0x80, 0xce, 0x46, 0x8c, 0xff, 0x5d, 0xac, |
309 | 0x88, 0xac, 0x37, 0x14, 0x59, 0x8f, 0x74, 0x76, 0x46, 0xe8, 0xec, 0xc4, | 309 | 0x4d, 0x7e, 0x04, 0xd7, 0xcc, 0x07, 0xd6, 0xf4, 0xf7, 0xd7, 0x1c, 0x18, |
310 | 0xf8, 0x22, 0xd6, 0x26, 0x3f, 0xa2, 0x6b, 0x3e, 0x18, 0x59, 0x33, 0xdc, | 310 | 0xf7, 0x0e, 0xd6, 0x63, 0x5d, 0x2c, 0x50, 0x47, 0x1a, 0x9a, 0x50, 0xc7, |
311 | 0x5f, 0x57, 0x64, 0xdc, 0xbb, 0x58, 0x8f, 0x75, 0xc9, 0x48, 0x1d, 0x69, | 311 | 0x72, 0x63, 0x80, 0xae, 0xa8, 0x8a, 0xf7, 0xa7, 0xd5, 0x19, 0x92, 0xcf, |
312 | 0xd8, 0x8c, 0x3a, 0x96, 0x3b, 0x23, 0x74, 0x91, 0xd6, 0x0d, 0xa8, 0xd7, | 312 | 0x75, 0xb0, 0x6b, 0x26, 0x6c, 0x4b, 0x0d, 0xfc, 0xaf, 0xea, 0xbd, 0x7e, |
313 | 0xfe, 0x13, 0xf8, 0xdc, 0x0a, 0xbb, 0xa5, 0x60, 0x3b, 0x5a, 0xe0, 0x5f, | 313 | 0x0d, 0xeb, 0xfa, 0xf3, 0xc5, 0x30, 0x07, 0xfb, 0xb3, 0x6f, 0x48, 0x8f, |
314 | 0x35, 0xef, 0xf5, 0x51, 0xac, 0x1b, 0xce, 0x97, 0xc4, 0x1c, 0xec, 0xcf, | 314 | 0x67, 0x3d, 0xdb, 0xff, 0xb6, 0xf2, 0x8c, 0xe2, 0x5b, 0x1a, 0xb4, 0x93, |
315 | 0xbe, 0x31, 0x33, 0x9e, 0xf5, 0x6c, 0xff, 0xf3, 0xfa, 0x9f, 0x6a, 0xbe, | 315 | 0xc6, 0x36, 0x99, 0x6a, 0xb4, 0x70, 0x9e, 0xa6, 0xb6, 0xa5, 0xc0, 0xda, |
316 | 0x6d, 0x06, 0xed, 0x3a, 0xef, 0x22, 0x73, 0x9d, 0x36, 0xce, 0x93, 0xf1, | 316 | 0xb2, 0x69, 0xb4, 0x77, 0xf3, 0xfc, 0x37, 0x68, 0x4c, 0xad, 0x33, 0xb2, |
317 | 0xb1, 0x25, 0x57, 0xbb, 0xca, 0xea, 0x1d, 0xe0, 0xd9, 0x6f, 0x34, 0x58, | 317 | 0xc7, 0x99, 0x4b, 0xa8, 0xd7, 0xb1, 0x22, 0xe2, 0x13, 0x65, 0x87, 0x7c, |
318 | 0xda, 0x6a, 0x15, 0x8e, 0x30, 0x5f, 0xd0, 0x66, 0x62, 0x3e, 0xc4, 0x1e, | 318 | 0x3b, 0x41, 0x3b, 0x44, 0xdf, 0x86, 0x36, 0xf6, 0x9c, 0x7e, 0xc7, 0x13, |
319 | 0xda, 0xc6, 0xd8, 0xa6, 0x9d, 0x36, 0x86, 0x7e, 0x0b, 0xed, 0xe7, 0x69, | 319 | 0x72, 0xfc, 0xd0, 0x4c, 0xa3, 0x5c, 0x54, 0x7c, 0xb5, 0x65, 0x7e, 0x81, |
320 | 0xf3, 0x8e, 0x27, 0x64, 0xf8, 0x81, 0x6a, 0xa7, 0xbc, 0xa8, 0x79, 0xea, | 320 | 0xaf, 0x61, 0xfd, 0xbd, 0xe6, 0x31, 0xfd, 0x2d, 0x64, 0x3f, 0x7c, 0x27, |
321 | 0xc8, 0xd9, 0x06, 0x4f, 0xe3, 0xe6, 0xbb, 0xcc, 0x01, 0xf3, 0xcd, 0xa3, | 321 | 0xbc, 0x97, 0x32, 0xa0, 0x23, 0x21, 0xed, 0xdd, 0xcc, 0x61, 0x14, 0xf1, |
322 | 0x0f, 0x7e, 0x11, 0xde, 0x6b, 0x79, 0xd0, 0x90, 0x96, 0xde, 0x01, 0xc6, | 322 | 0x74, 0xf0, 0x34, 0xf0, 0x84, 0xcd, 0x42, 0x0c, 0xd2, 0xde, 0xcd, 0x58, |
323 | 0x6e, 0x15, 0x3c, 0x99, 0xa7, 0xb0, 0xf0, 0x0c, 0xf2, 0x17, 0xbd, 0x03, | 323 | 0x50, 0x40, 0xdb, 0x15, 0x15, 0x07, 0xce, 0x94, 0x6d, 0xe3, 0x4e, 0xd7, |
324 | 0xb0, 0x4b, 0xc0, 0xa1, 0xde, 0x81, 0x73, 0x3a, 0x9e, 0xab, 0xfa, 0x8e, | 324 | 0xcb, 0x1d, 0xcd, 0x3b, 0xab, 0xe5, 0x8e, 0x1e, 0xa8, 0xc5, 0x79, 0x9c, |
325 | 0x75, 0x9b, 0x17, 0xe4, 0x88, 0xce, 0xba, 0x17, 0xca, 0x11, 0xdd, 0xb3, | 325 | 0xf2, 0x73, 0x47, 0xf3, 0xa2, 0x72, 0x47, 0xa7, 0xae, 0x93, 0x3b, 0xca, |
326 | 0x8e, 0x79, 0x8d, 0x30, 0x47, 0x74, 0x56, 0x74, 0x8e, 0xe8, 0xf8, 0x45, | 326 | 0xac, 0x3d, 0x77, 0xc4, 0xf9, 0x2d, 0xb9, 0xbb, 0xc7, 0x36, 0xbf, 0xa8, |
327 | 0x72, 0x44, 0xf9, 0x4b, 0xcf, 0x11, 0x71, 0x7e, 0x5b, 0xee, 0x1c, 0x74, | 327 | 0x73, 0x47, 0x6f, 0x88, 0x97, 0x3b, 0xba, 0x28, 0x2b, 0xe7, 0x8e, 0x8e, |
328 | 0xd4, 0xaf, 0x9a, 0x1c, 0xd1, 0x1b, 0x12, 0xe4, 0x88, 0x5e, 0x94, 0xb5, | 328 | 0x56, 0xe5, 0x8e, 0x9a, 0x54, 0xee, 0x88, 0xf3, 0x78, 0xb9, 0x23, 0x96, |
329 | 0x73, 0x44, 0x87, 0x9a, 0x72, 0x44, 0x9b, 0x75, 0x8e, 0x88, 0xf3, 0x04, | 329 | 0xf3, 0xdd, 0xbf, 0xac, 0x72, 0xe9, 0xf9, 0x6e, 0x60, 0xb0, 0xeb, 0x63, |
330 | 0x39, 0x22, 0x96, 0x4b, 0x03, 0x43, 0x91, 0x5c, 0x07, 0xf0, 0xd7, 0xbb, | 330 | 0x9c, 0x6d, 0x0c, 0xa8, 0xf8, 0xf2, 0x4a, 0xb8, 0xd9, 0xf1, 0x31, 0x8e, |
331 | 0x01, 0x7c, 0x73, 0xac, 0x51, 0x2f, 0xc4, 0x34, 0x62, 0xff, 0x15, 0x0d, | 331 | 0xb6, 0x60, 0xf3, 0x82, 0x3d, 0xf3, 0xf1, 0x6e, 0x54, 0xd9, 0xbd, 0xe5, |
332 | 0xfb, 0xb5, 0x8c, 0x6f, 0x96, 0x96, 0xb9, 0x8b, 0xe1, 0xdb, 0x68, 0xe0, | 332 | 0xf9, 0xc5, 0x7b, 0xaa, 0xf2, 0x8b, 0x03, 0x9e, 0xdd, 0x50, 0x38, 0x37, |
333 | 0x97, 0xac, 0xc0, 0xb6, 0xc9, 0x86, 0xef, 0xe2, 0xad, 0x63, 0x0c, 0x3d, | 333 | 0xa8, 0x71, 0x6e, 0x74, 0xc1, 0xcf, 0x39, 0x59, 0xcb, 0x18, 0x7c, 0xa4, |
334 | 0x51, 0x5b, 0x9e, 0x77, 0x02, 0xbc, 0x1e, 0x6b, 0xe4, 0x49, 0xce, 0xe7, | 334 | 0x14, 0xc4, 0x51, 0x4b, 0x8d, 0xf5, 0xf2, 0x2c, 0x8b, 0x18, 0x7a, 0xb8, |
335 | 0x1f, 0x25, 0xe5, 0xc0, 0x9a, 0xdf, 0xbd, 0x52, 0xf9, 0xd5, 0xdf, 0xbd, | 335 | 0x0a, 0x43, 0x1f, 0x5b, 0xf1, 0xbb, 0x58, 0x3c, 0xb3, 0xfc, 0xbb, 0x98, |
336 | 0x2c, 0x49, 0x82, 0xce, 0xd2, 0x40, 0x49, 0xc7, 0x5d, 0xf3, 0xde, 0xaf, | 336 | 0x21, 0xcd, 0xf4, 0x39, 0xba, 0xf3, 0xd8, 0x03, 0x63, 0xe6, 0xfd, 0x92, |
337 | 0xc8, 0xd2, 0xdd, 0x0e, 0xf0, 0x27, 0xcc, 0x9f, 0xf0, 0x7c, 0x97, 0x6d, | 337 | 0x19, 0xb0, 0x81, 0x45, 0x7e, 0xfe, 0x85, 0xe7, 0xbc, 0x68, 0x63, 0xb2, |
338 | 0x4a, 0x41, 0x7d, 0x7c, 0x39, 0x94, 0x07, 0x74, 0x0e, 0xe5, 0xc5, 0x75, | 338 | 0xe6, 0xc7, 0x97, 0x83, 0x79, 0x48, 0xe5, 0x60, 0xbe, 0x5f, 0x1b, 0xcc, |
339 | 0xd1, 0x1c, 0xca, 0x59, 0xb9, 0x70, 0x0e, 0xe5, 0x81, 0x35, 0x72, 0x28, | 339 | 0xc1, 0xcc, 0x03, 0xb3, 0x32, 0x16, 0xf3, 0x5b, 0x2b, 0xe7, 0x60, 0x1e, |
340 | 0x2f, 0xcb, 0x72, 0x0e, 0xe5, 0x65, 0x09, 0x73, 0x28, 0x31, 0x59, 0xda, | 340 | 0x5a, 0x21, 0x07, 0xf3, 0x5d, 0x59, 0xcc, 0xc1, 0x7c, 0x57, 0xfc, 0x1c, |
341 | 0x1c, 0x48, 0xe3, 0x03, 0xfe, 0x12, 0x7e, 0x67, 0xf0, 0x0b, 0x72, 0x2a, | 341 | 0x0c, 0xe7, 0x08, 0x69, 0x9f, 0x56, 0x30, 0xee, 0x02, 0x7e, 0xe7, 0xf1, |
342 | 0x67, 0x1b, 0xf4, 0xaf, 0x95, 0x53, 0x79, 0x7d, 0xdd, 0x07, 0xc9, 0xa9, | 342 | 0xf3, 0xf2, 0x32, 0xf3, 0x0b, 0x7b, 0x58, 0x29, 0x2f, 0xf3, 0x6f, 0xb5, |
343 | 0x04, 0x36, 0x20, 0xcc, 0xa9, 0xe0, 0xe7, 0xc0, 0xe6, 0xa8, 0x68, 0x4e, | 343 | 0x1f, 0x24, 0x2f, 0xe3, 0xd9, 0x04, 0x3f, 0x2f, 0x83, 0x9f, 0x0d, 0x1b, |
344 | 0xe5, 0x27, 0xd4, 0x07, 0xd4, 0xb1, 0xcc, 0x7a, 0xe8, 0x05, 0xec, 0x52, | 344 | 0x64, 0x06, 0xf3, 0x32, 0xef, 0x53, 0x37, 0x50, 0xc7, 0x32, 0xeb, 0xa1, |
345 | 0x5e, 0xe7, 0x38, 0x3e, 0x67, 0x78, 0x38, 0x87, 0x3d, 0xa7, 0x71, 0x16, | 345 | 0x23, 0xb0, 0x53, 0x19, 0xd8, 0x99, 0x69, 0xf7, 0xd7, 0xd5, 0x79, 0xcc, |
346 | 0xe4, 0x63, 0xaf, 0xf6, 0x2d, 0xf3, 0x76, 0xca, 0x2a, 0xf4, 0xc1, 0x9a, | 346 | 0xb8, 0x53, 0xd8, 0x77, 0x02, 0xe7, 0x41, 0x5e, 0xb6, 0x2b, 0x5f, 0x34, |
347 | 0x4d, 0xf3, 0xbb, 0xb8, 0x6d, 0xed, 0xf5, 0x29, 0xe3, 0x09, 0xab, 0x8c, | 347 | 0x63, 0xc5, 0x8d, 0x6c, 0x27, 0xac, 0xda, 0x38, 0xbf, 0x9d, 0x5b, 0xc6, |
348 | 0xbd, 0x0c, 0x4f, 0xcf, 0xc9, 0x5e, 0x3f, 0xf4, 0xa9, 0x06, 0x1a, 0x73, | 348 | 0x50, 0x99, 0xf2, 0x1e, 0x31, 0x0a, 0xd8, 0x4b, 0xdf, 0xf8, 0x94, 0x0c, |
349 | 0x50, 0x37, 0xe7, 0x81, 0xb3, 0xc0, 0x89, 0x4b, 0xb0, 0x51, 0xa7, 0x40, | 349 | 0x95, 0x7d, 0x3f, 0xab, 0x5b, 0x9f, 0xc5, 0x94, 0xd2, 0xd3, 0x69, 0xf0, |
350 | 0x73, 0x74, 0x1f, 0x88, 0x89, 0x07, 0x51, 0xa7, 0xcf, 0x9c, 0xbe, 0x65, | 350 | 0x00, 0x98, 0xb1, 0x06, 0x9b, 0x75, 0x16, 0x34, 0x07, 0xf7, 0x81, 0x18, |
351 | 0x48, 0x4b, 0x9a, 0x7a, 0x7e, 0x09, 0xf3, 0xb1, 0xee, 0x94, 0x8e, 0xc7, | 351 | 0xba, 0x07, 0x75, 0xea, 0xdc, 0xe9, 0x6f, 0xfa, 0xb4, 0x24, 0xa8, 0xf3, |
352 | 0xca, 0x83, 0xdc, 0x2b, 0x6d, 0xdd, 0x22, 0xe8, 0x43, 0x5d, 0x95, 0x31, | 352 | 0x6b, 0x98, 0x8f, 0x75, 0x67, 0x55, 0xfc, 0x56, 0xe8, 0xe1, 0x5e, 0x69, |
353 | 0x20, 0xed, 0x5e, 0x18, 0xa3, 0xb5, 0xeb, 0x18, 0xad, 0x4b, 0xf3, 0x83, | 353 | 0xfb, 0xe6, 0x40, 0x1f, 0xea, 0x66, 0x18, 0x33, 0xd2, 0x0e, 0xfa, 0x31, |
354 | 0xbc, 0xbe, 0x35, 0x41, 0xac, 0xec, 0x72, 0xb9, 0x87, 0x33, 0x06, 0xeb, | 354 | 0x5d, 0x54, 0xc5, 0x74, 0x9b, 0x15, 0x3f, 0xc8, 0xeb, 0x5f, 0x8b, 0x10, |
355 | 0x58, 0x0e, 0x62, 0xc1, 0xbc, 0xe2, 0xfb, 0xef, 0xe1, 0x5c, 0x99, 0xa7, | 355 | 0x3b, 0x37, 0x3b, 0xdc, 0xc3, 0x79, 0x8d, 0x7b, 0x2c, 0xfb, 0xb1, 0x23, |
356 | 0x09, 0xcf, 0xef, 0x2b, 0x66, 0xdf, 0x43, 0x52, 0xe9, 0x92, 0xc4, 0x66, | 356 | 0xdf, 0xc9, 0xa7, 0xa7, 0x54, 0xde, 0x67, 0xda, 0xf5, 0xcf, 0xf0, 0x5b, |
357 | 0xd0, 0x53, 0x9a, 0xa1, 0xdf, 0xfd, 0x69, 0x1d, 0x83, 0x24, 0xdd, 0xf3, | 357 | 0xd8, 0x3b, 0xcb, 0xbd, 0x72, 0xa1, 0x59, 0x22, 0xb1, 0x34, 0x73, 0xbd, |
358 | 0xeb, 0xed, 0x1d, 0x97, 0xa1, 0xb7, 0x23, 0x17, 0xd4, 0xdb, 0xaf, 0x25, | 358 | 0xf4, 0xd5, 0x77, 0x30, 0xf7, 0x50, 0xd3, 0xb4, 0x8a, 0xfe, 0xee, 0x5b, |
359 | 0xa2, 0x7a, 0x7b, 0xc7, 0x65, 0xe8, 0xed, 0xbe, 0xcb, 0xd2, 0x5b, 0xee, | 359 | 0x45, 0x7f, 0xef, 0xae, 0xd2, 0xdf, 0xfe, 0x55, 0xf5, 0xf7, 0xeb, 0x91, |
360 | 0x8d, 0x98, 0x14, 0xe6, 0xc4, 0x56, 0xfb, 0x59, 0xe1, 0xba, 0xe3, 0x58, | 360 | 0xa0, 0xfe, 0xee, 0x5b, 0x45, 0x7f, 0x1f, 0xad, 0xd2, 0xdf, 0x83, 0x37, |
361 | 0x33, 0x7f, 0x9e, 0x35, 0xc7, 0xce, 0x9b, 0x5b, 0x6d, 0xf6, 0xb1, 0x2e, | 361 | 0xa4, 0xbf, 0x3a, 0x36, 0x4e, 0xdd, 0xaa, 0x72, 0xc6, 0xc3, 0x13, 0xc4, |
362 | 0xe5, 0xbc, 0x19, 0x5b, 0xd1, 0xde, 0xb6, 0x1b, 0xbb, 0x74, 0x9f, 0x89, | 362 | 0xac, 0x4f, 0xeb, 0xdc, 0xd5, 0x4a, 0xbe, 0x98, 0x4f, 0x43, 0x5b, 0xcd, |
363 | 0xe7, 0xc3, 0xb8, 0x3e, 0xaa, 0x3f, 0x94, 0x0b, 0xca, 0xc2, 0x77, 0xc0, | 363 | 0x47, 0xe3, 0x87, 0xfd, 0x23, 0xf6, 0xe9, 0xf9, 0xa3, 0xfd, 0xf0, 0x69, |
364 | 0x2f, 0xca, 0x43, 0xa8, 0x73, 0xdd, 0x4d, 0x32, 0xb8, 0x88, 0x78, 0xbf, | 364 | 0xaf, 0xbd, 0xee, 0x1f, 0x8b, 0x99, 0xf6, 0x7d, 0xc0, 0xad, 0x1f, 0xd1, |
365 | 0xdb, 0xc8, 0x20, 0xcf, 0xba, 0x4f, 0x7f, 0x67, 0xaa, 0x7a, 0x4f, 0x05, | 365 | 0xda, 0x6b, 0x91, 0x3f, 0xc6, 0x56, 0xf4, 0x07, 0xa2, 0xda, 0x66, 0x4e, |
366 | 0x71, 0xbe, 0x8b, 0x67, 0x35, 0xd4, 0x35, 0xf0, 0x24, 0x19, 0xb6, 0x91, | 366 | 0x6a, 0x1d, 0xf4, 0xf3, 0x12, 0x41, 0x7d, 0xa6, 0x9c, 0x52, 0x36, 0x7f, |
367 | 0x8f, 0x2e, 0x7c, 0x9e, 0x1d, 0xf0, 0xd7, 0xc0, 0x23, 0x5d, 0xbf, 0x32, | 367 | 0x8a, 0x3d, 0x51, 0x3e, 0x7d, 0x0c, 0xd8, 0x52, 0xa5, 0x13, 0x73, 0x52, |
368 | 0x27, 0x7c, 0x61, 0x3c, 0x93, 0x4a, 0x1c, 0x7d, 0x4f, 0x0c, 0x42, 0xc7, | 368 | 0x00, 0x6e, 0x79, 0x3a, 0x41, 0x39, 0xeb, 0xc4, 0xbe, 0x61, 0x2b, 0xdd, |
369 | 0x07, 0x89, 0x51, 0x35, 0xc4, 0x3d, 0x94, 0x43, 0xca, 0xe6, 0xb6, 0xfe, | 369 | 0xa7, 0xbd, 0xb3, 0x70, 0xf0, 0x9c, 0xf1, 0x75, 0x3f, 0x81, 0x75, 0xfd, |
370 | 0x5d, 0x8a, 0x3e, 0xd5, 0x13, 0x88, 0x83, 0x29, 0xaf, 0x69, 0xd9, 0xe5, | 370 | 0x36, 0xda, 0x1e, 0x07, 0x3e, 0xd9, 0x36, 0xf8, 0x93, 0x2d, 0xc0, 0x19, |
371 | 0x6f, 0x3b, 0x7d, 0x56, 0x71, 0x8d, 0x7a, 0xbd, 0xc4, 0x58, 0xd1, 0x11, | 371 | 0xd6, 0x2f, 0xcd, 0x73, 0xaf, 0x8e, 0xb1, 0x52, 0x0c, 0xa3, 0xef, 0xe9, |
372 | 0xb5, 0x75, 0xe0, 0xbf, 0x13, 0xb4, 0x4b, 0x57, 0xb8, 0x31, 0x23, 0x6b, | 372 | 0x1e, 0x60, 0x4e, 0x0f, 0x71, 0xb3, 0x84, 0xd8, 0x8c, 0x7a, 0x41, 0x5d, |
373 | 0x79, 0xbc, 0x53, 0x6e, 0x7f, 0x08, 0x7b, 0xcf, 0xef, 0xfd, 0xaf, 0xa1, | 373 | 0xe9, 0xe8, 0xda, 0x6d, 0xd2, 0xe7, 0x7b, 0x12, 0x71, 0xfc, 0x2d, 0x4a, |
374 | 0x3e, 0x05, 0x9d, 0xa7, 0x7d, 0x67, 0x3c, 0x72, 0x93, 0xe9, 0xd7, 0xad, | 374 | 0xaf, 0x76, 0x97, 0x3b, 0x66, 0xdf, 0x30, 0xb9, 0x46, 0xa5, 0x92, 0x57, |
375 | 0xbf, 0x57, 0x16, 0xb2, 0x37, 0x98, 0x6f, 0x57, 0xb4, 0x3f, 0x19, 0xda, | 375 | 0xdf, 0x19, 0xc4, 0x6c, 0xeb, 0xde, 0xb2, 0x8e, 0x36, 0xf3, 0x16, 0x27, |
376 | 0xec, 0x15, 0xe7, 0xcc, 0xfb, 0x12, 0x45, 0x1d, 0xcf, 0x70, 0xbc, 0x96, | 376 | 0xa4, 0xe5, 0x3e, 0x83, 0x77, 0xea, 0xd1, 0xeb, 0xf0, 0x47, 0x78, 0x47, |
377 | 0x49, 0xc4, 0x20, 0x76, 0x24, 0x97, 0x9e, 0x30, 0xb1, 0x1b, 0x75, 0xac, | 377 | 0xe1, 0x27, 0x2a, 0x5f, 0x37, 0xed, 0xd2, 0xf7, 0x60, 0xcc, 0xb4, 0x53, |
378 | 0x1d, 0x67, 0xe8, 0x9b, 0x58, 0x85, 0xf1, 0xeb, 0xca, 0x7b, 0x12, 0x6b, | 378 | 0xf7, 0xdb, 0xa2, 0xbe, 0xb1, 0x66, 0x53, 0x3b, 0xf4, 0xf7, 0x36, 0xda, |
379 | 0xcb, 0xc0, 0x96, 0x0f, 0x20, 0x03, 0xcd, 0xe7, 0x97, 0x80, 0xee, 0x87, | 379 | 0xc4, 0x24, 0x31, 0x75, 0xc9, 0x79, 0xf3, 0x8e, 0x47, 0x4e, 0xc5, 0x5c, |
380 | 0xe7, 0x17, 0xfa, 0x31, 0x73, 0x66, 0xdf, 0xdd, 0xc1, 0x19, 0xfe, 0xbf, | 380 | 0x1c, 0xaf, 0x7c, 0x7f, 0xc4, 0x49, 0x56, 0xe0, 0xfb, 0x40, 0x44, 0xc7, |
381 | 0xd8, 0xa7, 0x15, 0xd9, 0x67, 0x88, 0x47, 0x0f, 0x98, 0x7d, 0xde, 0xd4, | 381 | 0x97, 0xd4, 0xf9, 0xa8, 0x8a, 0x7d, 0xbd, 0x78, 0x8a, 0xf1, 0xf7, 0xd2, |
382 | 0x84, 0x47, 0x23, 0x4d, 0x3a, 0xfb, 0x71, 0xe2, 0xd1, 0x9f, 0xac, 0xff, | 382 | 0xbb, 0x1d, 0x2b, 0xcb, 0x40, 0xcb, 0x07, 0x90, 0x81, 0xea, 0xf3, 0x8b, |
383 | 0xf8, 0xf1, 0x88, 0xfb, 0xea, 0x5e, 0x13, 0x87, 0x82, 0x7d, 0x3c, 0x22, | 383 | 0x00, 0x8b, 0xfc, 0xf3, 0xf3, 0x7d, 0xac, 0xbf, 0xd0, 0xfb, 0xde, 0xa2, |
384 | 0x2a, 0xf7, 0x51, 0xc6, 0x7b, 0x1f, 0xe4, 0x7c, 0xa2, 0x38, 0xc2, 0x33, | 384 | 0xf5, 0xe9, 0xff, 0xc3, 0x3e, 0x8d, 0xc0, 0x3e, 0x7d, 0x6c, 0xfc, 0xa2, |
385 | 0xe9, 0xd0, 0x3e, 0x6c, 0xa0, 0x7b, 0xb0, 0xe5, 0xd5, 0xb8, 0xbc, 0x7e, | 385 | 0xde, 0xe7, 0xce, 0x2a, 0x6c, 0xec, 0x41, 0xfd, 0xe1, 0x9a, 0x8d, 0x1f, |
386 | 0x57, 0x42, 0xfe, 0xf7, 0x46, 0x7e, 0x0f, 0xb3, 0x4d, 0x4e, 0x8b, 0xe5, | 386 | 0x10, 0x1b, 0xf7, 0xde, 0x10, 0x36, 0xfe, 0x70, 0xdd, 0x5a, 0xb1, 0xf1, |
387 | 0xd7, 0xd6, 0x07, 0x76, 0xe8, 0xb5, 0x4d, 0x81, 0xdd, 0xe1, 0x98, 0x50, | 387 | 0xd0, 0x07, 0xc6, 0x46, 0xee, 0x6b, 0x65, 0x3c, 0xda, 0xb7, 0x0c, 0x8f, |
388 | 0x9f, 0x1d, 0xb4, 0xb3, 0xad, 0x5b, 0x96, 0x3a, 0x2f, 0x27, 0x06, 0xdc, | 388 | 0xfe, 0xe0, 0x13, 0xc4, 0xa3, 0xd5, 0xb0, 0x84, 0xe7, 0xd2, 0xa0, 0x7c, |
389 | 0xe6, 0xbc, 0xa1, 0xd6, 0x8a, 0x01, 0x2f, 0x9c, 0x0f, 0x5c, 0x8e, 0x01, | 389 | 0x6c, 0x4f, 0xff, 0xe0, 0x5f, 0xcc, 0x84, 0xe5, 0xc2, 0xbd, 0x11, 0x79, |
390 | 0x89, 0xb3, 0x9d, 0x5a, 0x36, 0x4a, 0x49, 0xc6, 0x3e, 0x7d, 0x06, 0x3b, | 390 | 0x6d, 0x27, 0xfc, 0x6e, 0xf2, 0x48, 0x9d, 0x07, 0xcb, 0xd1, 0x3a, 0xcf, |
391 | 0xf9, 0x8e, 0xd8, 0xd6, 0x43, 0xbc, 0xeb, 0x21, 0xd6, 0xf5, 0x10, 0xff, | 391 | 0x36, 0xc6, 0x1b, 0xbd, 0x9c, 0x02, 0xc7, 0xf8, 0x3a, 0x6d, 0xa3, 0x9d, |
392 | 0x7a, 0x88, 0x71, 0x3d, 0xc4, 0xb6, 0x1e, 0x62, 0x5b, 0x0f, 0xb1, 0xad, | 392 | 0x6d, 0x5b, 0xe4, 0xf5, 0xc6, 0x1b, 0x89, 0x53, 0xf9, 0x8d, 0x66, 0xa5, |
393 | 0xd7, 0x6f, 0x62, 0xe4, 0x11, 0x93, 0xf7, 0xe7, 0x77, 0x72, 0xe6, 0x17, | 393 | 0x38, 0x75, 0xf5, 0x9c, 0xe6, 0x62, 0x9c, 0x4a, 0xac, 0x6d, 0xd4, 0x79, |
394 | 0x2a, 0xb0, 0x25, 0x93, 0xbc, 0xe7, 0xa0, 0x0a, 0xd9, 0xf5, 0x66, 0x7f, | 394 | 0x2c, 0xc6, 0x67, 0xfb, 0x35, 0x7e, 0xf2, 0x1d, 0xf1, 0xb8, 0x8b, 0x58, |
395 | 0x61, 0x4e, 0xbc, 0xc7, 0xe4, 0x6c, 0x5e, 0xd7, 0x79, 0x43, 0x51, 0xb3, | 395 | 0xdc, 0x45, 0x1c, 0xee, 0x22, 0x46, 0x87, 0x6d, 0x7e, 0x01, 0x32, 0xf7, |
396 | 0xad, 0xc1, 0xb7, 0x74, 0xde, 0xc7, 0xf8, 0x2d, 0xf8, 0x25, 0xfa, 0x3e, | 396 | 0x6d, 0x17, 0x31, 0xb8, 0x8b, 0x18, 0xdc, 0xed, 0xd2, 0x71, 0x7c, 0xbf, |
397 | 0x13, 0x75, 0xb4, 0xae, 0x72, 0xcc, 0xc9, 0x88, 0x52, 0xb9, 0xeb, 0x31, | 397 | 0xfe, 0x76, 0xc1, 0xef, 0xfb, 0xcc, 0x83, 0x14, 0x61, 0x57, 0x46, 0x79, |
398 | 0x66, 0x47, 0x10, 0x13, 0x24, 0x25, 0xa6, 0x72, 0x6d, 0xe4, 0xa9, 0xa5, | 398 | 0x3f, 0xc3, 0xcc, 0xa6, 0xd6, 0xe9, 0xfd, 0xf9, 0x79, 0xfd, 0x56, 0x9d, |
399 | 0x72, 0x1b, 0xcc, 0x5c, 0x47, 0x5b, 0x03, 0xdf, 0xaa, 0x8f, 0x65, 0x5b, | 399 | 0x5b, 0xda, 0xb4, 0x49, 0xf9, 0x0b, 0xe6, 0x2b, 0x75, 0xde, 0x1d, 0x00, |
400 | 0xe5, 0x6e, 0xe6, 0x13, 0xe7, 0x1e, 0xd6, 0xf7, 0x74, 0xae, 0x5c, 0x6b, | 400 | 0xde, 0x23, 0x79, 0x14, 0xbe, 0x92, 0xba, 0x87, 0x45, 0x3d, 0xad, 0x98, |
401 | 0x4a, 0xe3, 0x7b, 0x21, 0x7b, 0x37, 0xe6, 0xd3, 0xf7, 0x88, 0x1a, 0xfc, | 401 | 0x69, 0xe6, 0x8e, 0xc4, 0x34, 0xd3, 0x77, 0x60, 0xcc, 0x36, 0x2f, 0x66, |
402 | 0x56, 0xe7, 0xe5, 0xf7, 0x94, 0xe1, 0x77, 0xc0, 0xe3, 0x18, 0xfb, 0xe9, | 402 | 0x89, 0x49, 0xc8, 0x4c, 0xd7, 0x93, 0xa7, 0x86, 0x99, 0x5e, 0xaf, 0xe7, |
403 | 0xbc, 0x30, 0x79, 0x1d, 0xce, 0xa7, 0xf3, 0x7a, 0x58, 0x47, 0xdf, 0xa5, | 403 | 0x9a, 0xaf, 0xf3, 0xfc, 0xbd, 0x4e, 0x96, 0x2d, 0x33, 0xfd, 0x59, 0x3e, |
404 | 0xc0, 0x53, 0xc5, 0xa5, 0x63, 0xf4, 0x9e, 0xb8, 0x1b, 0x5d, 0x37, 0xfc, | 404 | 0x71, 0xee, 0x7e, 0xfd, 0x3d, 0x8d, 0x4b, 0xd7, 0x1a, 0x53, 0x18, 0x9f, |
405 | 0x26, 0x7e, 0x29, 0x6b, 0x76, 0xeb, 0xef, 0x68, 0x81, 0xcd, 0x98, 0xd2, | 405 | 0x4d, 0xdd, 0x8b, 0xf9, 0xd4, 0xfd, 0xa7, 0x05, 0x7e, 0x9b, 0xd7, 0xe4, |
406 | 0x32, 0x68, 0xe7, 0xb8, 0xaf, 0xf7, 0x21, 0x7f, 0x53, 0x5a, 0xfe, 0x8a, | 406 | 0xf7, 0x98, 0xe6, 0xb7, 0xc7, 0xe3, 0x10, 0xfb, 0xa9, 0xdc, 0x36, 0x79, |
407 | 0x88, 0x63, 0x26, 0x07, 0xb7, 0xa5, 0x6d, 0x75, 0xa0, 0x95, 0xf9, 0xd7, | 407 | 0xed, 0xcf, 0xa7, 0x72, 0x93, 0x58, 0x47, 0xdd, 0x01, 0xc1, 0xb3, 0x62, |
408 | 0x61, 0x3f, 0xc4, 0x3d, 0xae, 0xd7, 0x6c, 0xc7, 0x99, 0x57, 0x0b, 0xf1, | 408 | 0x49, 0xc3, 0xc0, 0x7d, 0x61, 0x27, 0xb8, 0xae, 0xff, 0x2d, 0x7f, 0x2d, |
409 | 0x4c, 0xb6, 0x04, 0xf9, 0xb6, 0x0f, 0xa3, 0x4b, 0xad, 0x4d, 0xba, 0x14, | 409 | 0x6b, 0x6e, 0x51, 0xdf, 0x07, 0x3d, 0xbb, 0x31, 0xa6, 0x64, 0xd0, 0x4a, |
410 | 0xee, 0x93, 0xfb, 0xe7, 0x73, 0xed, 0x3b, 0x15, 0x8b, 0x7e, 0xe4, 0xfb, | 410 | 0x73, 0x5f, 0xef, 0x43, 0xfe, 0xc6, 0x94, 0xfc, 0xe5, 0x10, 0x67, 0x8d, |
411 | 0x48, 0x43, 0x36, 0x78, 0xb7, 0xe4, 0x8b, 0x90, 0x41, 0xfd, 0x9d, 0x02, | 411 | 0xf6, 0x74, 0x24, 0x2c, 0x73, 0xba, 0x8e, 0x39, 0xe4, 0xbe, 0xb2, 0x8f, |
412 | 0x7a, 0x54, 0xaf, 0x0f, 0x33, 0xc7, 0xbc, 0xf3, 0x0b, 0xe6, 0xde, 0x82, | 412 | 0x7d, 0x5c, 0xaf, 0xda, 0xa6, 0x33, 0xff, 0xe7, 0x63, 0x9a, 0xb4, 0x78, |
413 | 0x3c, 0xcc, 0xfc, 0x83, 0xbd, 0x2a, 0xff, 0x30, 0x0c, 0x59, 0x81, 0x0f, | 413 | 0x79, 0xc1, 0xb5, 0xde, 0xa9, 0x58, 0xd4, 0xa5, 0xc1, 0x05, 0x5d, 0xaa, |
414 | 0xe0, 0x75, 0x68, 0x9f, 0x4e, 0xb9, 0xf4, 0x07, 0x9a, 0xbf, 0xbf, 0x3c, | 414 | 0xab, 0xd2, 0x25, 0x7f, 0x9f, 0xeb, 0xc5, 0xff, 0xe6, 0xbe, 0xd2, 0x5d, |
415 | 0xda, 0x16, 0xf0, 0xe1, 0xed, 0xd6, 0xe0, 0x1b, 0xc4, 0xdf, 0x26, 0x57, | 415 | 0x90, 0xb9, 0x72, 0xe0, 0x1b, 0xcf, 0x82, 0x6c, 0xf0, 0x4e, 0xcc, 0x3d, |
416 | 0x96, 0x39, 0xfe, 0x7f, 0x8c, 0xac, 0x1c, 0x86, 0x6d, 0x1e, 0x86, 0x2c, | 416 | 0x90, 0x41, 0x7e, 0xdf, 0xd8, 0x03, 0x3d, 0xaa, 0x54, 0xfa, 0x98, 0x27, |
417 | 0x22, 0x26, 0xd7, 0xf3, 0x1d, 0x96, 0xd2, 0xd3, 0x0b, 0x9d, 0x2b, 0xfb, | 417 | 0xdf, 0xde, 0xaf, 0xef, 0x5b, 0x5c, 0x51, 0x39, 0x12, 0x6b, 0x59, 0x8e, |
418 | 0xa3, 0xee, 0x58, 0xd8, 0xff, 0xb1, 0xa6, 0xfe, 0x8f, 0xa1, 0xff, 0x0b, | 418 | 0xa4, 0x0f, 0xb2, 0x02, 0x3f, 0x00, 0x3a, 0x98, 0x57, 0x67, 0x49, 0x9f, |
419 | 0x4d, 0xfd, 0x1f, 0x8b, 0xf4, 0x3f, 0xda, 0xd4, 0x1f, 0x31, 0xe2, 0xd3, | 419 | 0xa0, 0xfa, 0x1b, 0xd2, 0xc5, 0x7a, 0x8f, 0x0f, 0x9d, 0xf5, 0xde, 0x77, |
420 | 0xff, 0xdc, 0xd4, 0xff, 0x68, 0xa4, 0xff, 0x6c, 0x53, 0xff, 0x59, 0xf4, | 420 | 0x14, 0x73, 0xd3, 0xd2, 0x32, 0xc7, 0x27, 0xea, 0x3d, 0x59, 0x39, 0x06, |
421 | 0x7f, 0xad, 0xa9, 0x3f, 0xea, 0x8e, 0xb5, 0x98, 0xef, 0x62, 0xc4, 0xd8, | 421 | 0xfb, 0xdc, 0x07, 0x59, 0xac, 0x91, 0x9c, 0x9a, 0xef, 0x98, 0xe4, 0x9f, |
422 | 0x7d, 0x26, 0x16, 0xc7, 0xb3, 0xd6, 0xfc, 0xad, 0x85, 0x72, 0xd7, 0x83, | 422 | 0xfd, 0xcf, 0xc6, 0xa5, 0xfd, 0x51, 0x77, 0xd2, 0xef, 0xff, 0x78, 0x55, |
423 | 0x33, 0x08, 0xef, 0xb4, 0x51, 0x5f, 0xf3, 0xd0, 0xd7, 0x65, 0x5f, 0x26, | 423 | 0xff, 0xc7, 0xd1, 0xff, 0x67, 0x55, 0xfd, 0x1f, 0x0f, 0xf4, 0x3f, 0xa1, |
424 | 0x90, 0xc7, 0xa8, 0x2c, 0x12, 0x1f, 0x2a, 0x12, 0x73, 0x7d, 0xfa, 0x47, | 424 | 0xfb, 0xd7, 0xa2, 0xbf, 0xd2, 0x83, 0x26, 0xdf, 0x2f, 0x36, 0x1d, 0xc4, |
425 | 0x56, 0xb9, 0x1a, 0xda, 0x24, 0xde, 0x5b, 0xe2, 0x7d, 0xd7, 0xc0, 0xf6, | 425 | 0xb3, 0xcf, 0xfa, 0x63, 0x4e, 0x04, 0xc6, 0x4c, 0x56, 0xad, 0x31, 0x89, |
426 | 0xc6, 0xdd, 0x45, 0x13, 0x83, 0x5d, 0xd1, 0x06, 0xda, 0x81, 0x97, 0x21, | 426 | 0x7e, 0xf1, 0xa6, 0xa5, 0x6b, 0xa0, 0xee, 0x64, 0x8d, 0xfe, 0xbe, 0x47, |
427 | 0x66, 0xca, 0xe1, 0x40, 0x6f, 0x28, 0xbf, 0x9c, 0xdf, 0xe8, 0x0f, 0x65, | 427 | 0x9f, 0xe5, 0xa0, 0xce, 0x17, 0xe0, 0x59, 0x0a, 0x7e, 0x33, 0xe2, 0x77, |
428 | 0xd5, 0xac, 0x33, 0xbc, 0x0a, 0xd7, 0xd2, 0xab, 0x72, 0x5b, 0xb1, 0x4b, | 428 | 0x0a, 0xca, 0x9e, 0xff, 0x8d, 0xc2, 0xbf, 0x93, 0x47, 0xbd, 0xcd, 0x40, |
429 | 0xc0, 0xb5, 0x91, 0x06, 0xae, 0x7d, 0x51, 0xe6, 0x1a, 0xf1, 0xf6, 0x19, | 429 | 0x6f, 0x17, 0xfd, 0x1a, 0x4f, 0x2e, 0x83, 0x32, 0x49, 0x9c, 0x28, 0x4a, |
430 | 0xd9, 0xef, 0xed, 0xe1, 0x3d, 0x9d, 0xc3, 0x79, 0xf9, 0x68, 0xe2, 0xed, | 430 | 0xc8, 0x29, 0xd3, 0x57, 0x32, 0x0a, 0x33, 0xbe, 0x7d, 0xe2, 0xbd, 0x2b, |
431 | 0x3d, 0x0d, 0x3b, 0xc9, 0x3b, 0x1d, 0xe9, 0x83, 0xbc, 0x83, 0x1b, 0xe6, | 431 | 0xde, 0xd7, 0xf5, 0xec, 0x70, 0xd8, 0x99, 0xd3, 0x31, 0xe2, 0xaf, 0x90, |
432 | 0x66, 0x27, 0xbd, 0x5f, 0xc7, 0xfe, 0x69, 0x33, 0x2f, 0x37, 0xde, 0xe6, | 432 | 0x7e, 0xe0, 0xa6, 0x8f, 0x9d, 0x72, 0xcc, 0xd3, 0x1f, 0xca, 0x31, 0xe7, |
433 | 0x7c, 0x49, 0xd9, 0x1f, 0xdc, 0x77, 0x68, 0xcc, 0x5b, 0x69, 0xcc, 0x9b, | 433 | 0xd7, 0x7a, 0x44, 0x99, 0xd5, 0xeb, 0xf4, 0x2d, 0xc3, 0xb7, 0xc4, 0xb2, |
434 | 0x32, 0xfa, 0x46, 0x1b, 0xbc, 0x6c, 0x2f, 0x8b, 0xb0, 0x97, 0x63, 0x88, | 434 | 0x3c, 0x5c, 0x68, 0x0d, 0xf8, 0xd6, 0xbf, 0x80, 0x6f, 0xf7, 0xca, 0x94, |
435 | 0xb9, 0x17, 0xbd, 0xb5, 0xf2, 0xa3, 0x97, 0x6b, 0x2f, 0x9b, 0xf3, 0xcc, | 435 | 0x9d, 0x50, 0x79, 0xd0, 0x43, 0x0b, 0x79, 0x81, 0xc3, 0x91, 0x46, 0x87, |
436 | 0xcd, 0xf6, 0x92, 0xeb, 0x34, 0xe7, 0x96, 0xd3, 0x4d, 0xf8, 0x4f, 0x79, | 436 | 0x79, 0x81, 0xe4, 0xa9, 0x8c, 0x7c, 0xb0, 0xbc, 0xc0, 0xbe, 0x2a, 0x1d, |
437 | 0x3a, 0x67, 0x7c, 0x6a, 0x3c, 0xab, 0xe7, 0xa0, 0x8f, 0x4a, 0xc6, 0xb4, | 437 | 0xd9, 0xbb, 0xaa, 0xed, 0xfc, 0xb3, 0xfa, 0xb5, 0xe6, 0x05, 0x1e, 0xa9, |
438 | 0xfc, 0xb2, 0x1c, 0xc6, 0x96, 0xf7, 0x34, 0x62, 0xcb, 0xe5, 0x78, 0x10, | 438 | 0xb2, 0x63, 0x87, 0x6e, 0xc0, 0x76, 0xe6, 0x95, 0xed, 0xe4, 0x5e, 0xaf, |
439 | 0xbe, 0x6b, 0xff, 0x67, 0x0c, 0x3e, 0xd2, 0x47, 0x76, 0xac, 0xb2, 0xb7, | 439 | 0xe7, 0xcb, 0x7f, 0x25, 0xf2, 0xd1, 0xd8, 0xce, 0xd5, 0x72, 0xe2, 0x41, |
440 | 0x5b, 0xed, 0xd5, 0x6d, 0xcc, 0x97, 0x5e, 0x2b, 0xb7, 0xea, 0x38, 0xfe, | 440 | 0x7b, 0x40, 0xb9, 0xba, 0xac, 0xfd, 0x6c, 0x3c, 0x67, 0x2e, 0x43, 0x3f, |
441 | 0x8c, 0xc9, 0x4d, 0xcd, 0x69, 0xff, 0x9f, 0xdf, 0x0b, 0xca, 0xd9, 0x4d, | 441 | 0x4d, 0x19, 0x54, 0xb2, 0xcc, 0xb2, 0x1f, 0xff, 0xde, 0xb7, 0x10, 0xff, |
442 | 0xc6, 0xdf, 0xbb, 0x18, 0xae, 0xae, 0x8c, 0x4d, 0x95, 0x3a, 0x88, 0xb1, | 442 | 0x2e, 0xc6, 0xac, 0xf0, 0x67, 0xbb, 0xfc, 0xd8, 0x88, 0x7e, 0xb3, 0x6d, |
443 | 0x8c, 0x4d, 0xfb, 0xdb, 0x89, 0xa1, 0x05, 0xff, 0x82, 0xe3, 0x31, 0x8e, | 443 | 0x14, 0xdc, 0x3d, 0xe6, 0x90, 0x6a, 0x63, 0x8e, 0xf7, 0x36, 0xf9, 0x9c, |
444 | 0xe3, 0xd9, 0x47, 0xc7, 0xa1, 0xe8, 0xb7, 0x68, 0xc6, 0x07, 0x71, 0x68, | 444 | 0xba, 0x27, 0x70, 0x5e, 0xe7, 0xd2, 0xa6, 0x54, 0x4c, 0xc0, 0xef, 0x1c, |
445 | 0xc1, 0xff, 0x71, 0x5b, 0x80, 0x83, 0x17, 0x8a, 0x59, 0x3e, 0xdf, 0xce, | 445 | 0x85, 0xd4, 0x46, 0xed, 0x03, 0x5e, 0x0f, 0x67, 0x97, 0xc6, 0xcf, 0xa6, |
446 | 0xbc, 0xde, 0xa2, 0x77, 0x31, 0x5a, 0x57, 0xc7, 0xbd, 0xb1, 0x55, 0x71, | 446 | 0x79, 0x04, 0x63, 0x19, 0x3f, 0x7f, 0x21, 0x4a, 0x4c, 0xcd, 0x96, 0x57, |
447 | 0xaf, 0x6d, 0xe2, 0xda, 0x5f, 0xd2, 0x71, 0x6f, 0xc0, 0x63, 0xee, 0x25, | 447 | 0x1d, 0x8f, 0x71, 0x1c, 0xcf, 0x3e, 0x2a, 0x56, 0x46, 0xbf, 0x39, 0x3d, |
448 | 0x1a, 0x47, 0xb9, 0xc0, 0x42, 0x7e, 0x53, 0x21, 0x3e, 0xd0, 0x47, 0x81, | 448 | 0xde, 0x8b, 0x95, 0xb3, 0xe5, 0xad, 0x51, 0x0f, 0x17, 0x57, 0x8b, 0x63, |
449 | 0x9f, 0x35, 0xfd, 0x8b, 0xe0, 0x73, 0x72, 0x0d, 0xb9, 0xf9, 0xb8, 0xed, | 449 | 0x8e, 0x44, 0x99, 0x8b, 0x9c, 0x73, 0xaf, 0x47, 0xeb, 0xf2, 0xd8, 0x3c, |
450 | 0x44, 0xb8, 0xf7, 0x73, 0x12, 0xe4, 0xeb, 0x76, 0x83, 0x16, 0xc6, 0x56, | 450 | 0xb4, 0x2c, 0x36, 0xb7, 0x74, 0xec, 0x7d, 0xbf, 0x8a, 0xcd, 0x3d, 0x1e, |
451 | 0x71, 0x23, 0x0f, 0x3f, 0x35, 0xf7, 0x2a, 0xc3, 0x7e, 0x61, 0x1c, 0xdf, | 451 | 0x73, 0x2f, 0xc1, 0xd8, 0xca, 0x01, 0x36, 0xf2, 0x5b, 0x10, 0xb1, 0x82, |
452 | 0xf8, 0xee, 0x5a, 0xc9, 0xaf, 0xc8, 0x9f, 0x74, 0x33, 0x0d, 0x8d, 0x73, | 452 | 0x3e, 0x0b, 0xe4, 0x67, 0xfc, 0x37, 0x94, 0x1f, 0xb3, 0x5c, 0x7e, 0x3e, |
453 | 0xcf, 0x5f, 0xc6, 0x77, 0x8b, 0x0f, 0x73, 0x3f, 0xa2, 0xd9, 0xae, 0xf1, | 453 | 0x6e, 0xbb, 0xe1, 0xef, 0xfd, 0xb2, 0x78, 0xf9, 0xc5, 0x3d, 0xa0, 0x85, |
454 | 0xbb, 0x29, 0xbf, 0x95, 0x8a, 0x75, 0x67, 0x9f, 0x0b, 0x1d, 0xe0, 0xbd, | 454 | 0xf1, 0x56, 0x58, 0xcb, 0xc3, 0xcf, 0x69, 0xfc, 0xf6, 0xfb, 0xf9, 0xb9, |
455 | 0xe1, 0x28, 0xbe, 0x26, 0xa4, 0x34, 0x2b, 0x89, 0x64, 0x8e, 0xdf, 0x00, | 455 | 0x86, 0x85, 0x6f, 0xc9, 0xc5, 0xcc, 0x92, 0x1c, 0xcf, 0x16, 0xa6, 0xce, |
456 | 0x68, 0xff, 0x7f, 0x68, 0xf6, 0x99, 0x92, 0x7d, 0x33, 0x41, 0xce, 0x53, | 456 | 0x71, 0xee, 0x99, 0x1b, 0xf8, 0xde, 0xf2, 0x61, 0xee, 0x7c, 0x54, 0xdb, |
457 | 0x5d, 0xf0, 0x5e, 0xdc, 0xe3, 0xe0, 0x43, 0xe6, 0x50, 0x98, 0xf3, 0x54, | 457 | 0xb9, 0x57, 0x21, 0xfb, 0x09, 0x7d, 0xff, 0xaf, 0x0b, 0x3a, 0xc0, 0x3b, |
458 | 0xc1, 0xbd, 0xb8, 0x43, 0x1f, 0xdd, 0xbd, 0x38, 0xce, 0x6f, 0xcb, 0x9e, | 458 | 0xd0, 0xd5, 0x58, 0xab, 0xee, 0xf9, 0x45, 0x36, 0xa5, 0xf9, 0xed, 0x82, |
459 | 0x35, 0xee, 0xc5, 0xc5, 0x2e, 0xf1, 0x5e, 0xdc, 0x26, 0x9d, 0xf3, 0xe4, | 459 | 0x3e, 0xc1, 0x4f, 0xf4, 0x5e, 0xe3, 0x72, 0x6c, 0xc2, 0xcb, 0xd3, 0x9a, |
460 | 0x3c, 0x41, 0xce, 0x93, 0xe5, 0xad, 0x03, 0xcc, 0x95, 0xf0, 0xee, 0xdb, | 460 | 0xab, 0xde, 0xf1, 0xbb, 0x04, 0x5e, 0x24, 0x8f, 0xfa, 0x79, 0x5a, 0xd3, |
461 | 0xa0, 0xbe, 0x2f, 0xbc, 0x75, 0xe0, 0xe7, 0x11, 0xa3, 0xfc, 0x75, 0xfb, | 461 | 0xbb, 0xe3, 0x77, 0xf4, 0xa3, 0xbb, 0xe3, 0xc7, 0xf9, 0x2d, 0xd9, 0xbb, |
462 | 0xc7, 0x1f, 0xa3, 0x70, 0x2f, 0xbf, 0x11, 0x7c, 0xdf, 0x95, 0xcb, 0xc9, | 462 | 0xc2, 0x1d, 0xbf, 0xd0, 0x1a, 0xef, 0xf8, 0x6d, 0x54, 0x79, 0x5a, 0xce, |
463 | 0x03, 0x7c, 0xb8, 0xbc, 0xe6, 0x3e, 0x9d, 0xd7, 0x7c, 0xa7, 0x3d, 0x9a, | 463 | 0xe3, 0xe5, 0x69, 0x59, 0x6e, 0xeb, 0xfe, 0x94, 0xc2, 0xa8, 0xe9, 0x09, |
464 | 0xd7, 0x54, 0x17, 0xb9, 0x1b, 0xb6, 0x6f, 0x8d, 0xbc, 0x66, 0x3c, 0x72, | 464 | 0xe6, 0x75, 0x1e, 0x5c, 0xf7, 0xc9, 0xe4, 0x75, 0xde, 0x8b, 0x7e, 0xfc, |
465 | 0x37, 0x2c, 0x6e, 0xee, 0x86, 0x6d, 0x72, 0x11, 0x4b, 0x9a, 0x3c, 0xa6, | 465 | 0x79, 0x1d, 0x7e, 0x17, 0xf8, 0xb2, 0xf7, 0xdd, 0x5a, 0x6e, 0x24, 0x3f, |
466 | 0xba, 0xe0, 0xdd, 0xb0, 0xce, 0x0d, 0x1f, 0x3e, 0x8f, 0xb9, 0xea, 0x6e, | 466 | 0xf0, 0xe1, 0x72, 0xb0, 0x07, 0x55, 0x0e, 0x76, 0xfb, 0xfa, 0x60, 0x0e, |
467 | 0x18, 0x6c, 0xdd, 0x16, 0x49, 0x5f, 0x56, 0xdc, 0xf3, 0x61, 0x62, 0x1e, | 467 | 0xd6, 0xbc, 0xce, 0x3d, 0xb8, 0x83, 0x2b, 0xe4, 0x60, 0xc3, 0x81, 0x7b, |
468 | 0xde, 0xab, 0x6f, 0xc1, 0x9e, 0xe3, 0xb2, 0x27, 0x49, 0xf9, 0xe4, 0xdd, | 468 | 0x70, 0x61, 0x7d, 0x0f, 0x6e, 0xa3, 0x83, 0x18, 0x53, 0xe7, 0x5b, 0xcd, |
469 | 0xc6, 0x3e, 0xe8, 0x02, 0x9e, 0x3e, 0xcb, 0xfd, 0x3c, 0x23, 0x6b, 0xa4, | 469 | 0x55, 0xef, 0xc1, 0xed, 0x5e, 0xff, 0xe1, 0xf3, 0xad, 0xcb, 0xee, 0xc1, |
470 | 0x6f, 0xe5, 0x3d, 0x84, 0xe5, 0x3b, 0xbd, 0x89, 0xc6, 0x9d, 0xde, 0x29, | 470 | 0x1d, 0xcd, 0x48, 0x8b, 0x24, 0x6e, 0x28, 0x16, 0xfa, 0x30, 0x71, 0x10, |
471 | 0xc8, 0x8d, 0x9a, 0x49, 0xc8, 0x7c, 0x44, 0xa6, 0x26, 0x3d, 0xf8, 0x4b, | 471 | 0xff, 0x8f, 0x40, 0x0d, 0xf6, 0x0c, 0x99, 0x8f, 0x51, 0x3e, 0x29, 0x77, |
472 | 0xb3, 0x8e, 0x69, 0xe7, 0xff, 0xef, 0x48, 0x02, 0xf3, 0x78, 0x0f, 0xb8, | 472 | 0x69, 0x33, 0x5f, 0xe6, 0x7b, 0x17, 0xcf, 0xc7, 0xe8, 0xef, 0x5c, 0x7a, |
473 | 0x43, 0x62, 0xb3, 0xc1, 0x37, 0xcb, 0xe0, 0xff, 0xb8, 0xa4, 0xd0, 0x87, | 473 | 0xb7, 0x62, 0xf1, 0x6e, 0x72, 0x64, 0xe1, 0x6e, 0xf2, 0x18, 0x64, 0xc6, |
474 | 0x77, 0x3c, 0xe3, 0xb2, 0x5f, 0xe7, 0x2c, 0x42, 0x59, 0xfe, 0x35, 0xf0, | 474 | 0x9c, 0x88, 0xc8, 0x74, 0xc0, 0xb6, 0x8e, 0xba, 0xf0, 0x9b, 0x26, 0x6d, |
475 | 0x78, 0x73, 0x7e, 0xb9, 0x9c, 0x5c, 0xc3, 0xee, 0x27, 0xa5, 0x3c, 0x43, | 475 | 0xdd, 0xce, 0xff, 0xa7, 0x82, 0xb8, 0xb0, 0xc4, 0xfb, 0xcc, 0x0d, 0x12, |
476 | 0x79, 0xbe, 0xc1, 0xfc, 0xff, 0x82, 0xd3, 0x52, 0xf6, 0x4f, 0x99, 0xf8, | 476 | 0x9a, 0x54, 0x98, 0x1a, 0xf3, 0xfe, 0xaf, 0x4e, 0x1c, 0x7d, 0x78, 0x77, |
477 | 0x42, 0x7f, 0xdb, 0x01, 0x2f, 0xb7, 0x18, 0x1b, 0x8c, 0x67, 0x75, 0x0b, | 477 | 0x35, 0x2c, 0x87, 0x62, 0x94, 0x65, 0x5f, 0x8e, 0xbf, 0x05, 0xfe, 0x36, |
478 | 0x6d, 0x1e, 0xd6, 0x38, 0x2e, 0xc3, 0xd3, 0x3b, 0x52, 0x7b, 0x81, 0x77, | 478 | 0x65, 0x16, 0xcb, 0x31, 0x2d, 0xd7, 0x94, 0x69, 0x5f, 0xfe, 0x62, 0x32, |
479 | 0x63, 0x7a, 0xcd, 0xcb, 0xe1, 0xb9, 0x75, 0x9e, 0xef, 0x8d, 0x97, 0xca, | 479 | 0x32, 0x41, 0x59, 0xde, 0xa1, 0xff, 0x9f, 0xc4, 0x39, 0x29, 0x94, 0xcf, |
480 | 0xf7, 0xd0, 0x3f, 0xae, 0x62, 0x7f, 0x5b, 0x20, 0x1f, 0x5f, 0x95, 0xe2, | 480 | 0xea, 0x78, 0x43, 0x7d, 0x8b, 0x02, 0x1f, 0x5b, 0xb4, 0x0d, 0xc6, 0x73, |
481 | 0xb1, 0x6b, 0x65, 0xf8, 0x68, 0x06, 0xf4, 0xbc, 0x5f, 0x2f, 0x67, 0xe1, | 481 | 0xa6, 0x85, 0x36, 0x8f, 0xdf, 0x1e, 0xa5, 0x6f, 0x7c, 0x5b, 0x7c, 0x08, |
482 | 0x4b, 0x3f, 0xcd, 0x7b, 0x63, 0xc0, 0x50, 0xf0, 0xed, 0xf9, 0x55, 0xdf, | 482 | 0x78, 0x37, 0xa8, 0x72, 0x27, 0x37, 0xc2, 0x6f, 0xe3, 0x1a, 0xdf, 0x48, |
483 | 0xb1, 0xa3, 0x77, 0xcd, 0xfa, 0x1b, 0x77, 0x87, 0x9e, 0xf5, 0x25, 0xd1, | 483 | 0xd7, 0xca, 0x73, 0xdf, 0x5f, 0xbe, 0x8c, 0xfd, 0xb5, 0x40, 0x36, 0xbe, |
484 | 0x49, 0x9a, 0x67, 0x96, 0xef, 0x8f, 0x2f, 0xfa, 0xbb, 0xb4, 0x6d, 0x7b, | 484 | 0x2a, 0xb9, 0x93, 0xb7, 0x49, 0xdf, 0x89, 0x24, 0xe8, 0x79, 0xbf, 0x52, |
485 | 0xc6, 0x5f, 0x91, 0xfb, 0xd1, 0x67, 0x38, 0x5e, 0xfb, 0x1e, 0xec, 0xdb, | 485 | 0x48, 0xc1, 0xb7, 0x7e, 0x96, 0x77, 0xe1, 0x80, 0xa1, 0x2e, 0x30, 0x14, |
486 | 0x39, 0x8b, 0xf6, 0x6d, 0xca, 0x93, 0xab, 0x63, 0xc2, 0xf3, 0x10, 0x0b, | 486 | 0xbc, 0x7b, 0x61, 0x99, 0xbf, 0x11, 0xbc, 0x43, 0x97, 0x5a, 0xb8, 0x13, |
487 | 0x3c, 0xd0, 0x77, 0x38, 0x82, 0xef, 0xfb, 0x3d, 0xfa, 0x5c, 0x03, 0xac, | 487 | 0xf5, 0x7c, 0x59, 0x22, 0x8d, 0xa4, 0x7b, 0x62, 0xf1, 0x2e, 0xfc, 0x5c, |
488 | 0x58, 0x88, 0xdc, 0xc1, 0x58, 0x3e, 0xdb, 0xe0, 0x6e, 0x46, 0x70, 0x16, | 488 | 0x39, 0xa7, 0xec, 0xdb, 0x73, 0xe5, 0x25, 0x39, 0x21, 0x75, 0x8e, 0xc3, |
489 | 0xc1, 0xfd, 0x11, 0xed, 0x6f, 0x1e, 0xdc, 0xe3, 0x06, 0xf7, 0x47, 0x7a, | 489 | 0xa5, 0x97, 0x61, 0xe3, 0x2e, 0x1b, 0xb4, 0x71, 0x63, 0xae, 0xdc, 0x12, |
490 | 0x67, 0x59, 0xd7, 0xd5, 0x64, 0xfb, 0x12, 0x90, 0x01, 0xde, 0x3b, 0xe2, | 490 | 0x12, 0x9e, 0x89, 0x18, 0xe0, 0x83, 0xba, 0x9b, 0xe2, 0xdd, 0x4d, 0x68, |
491 | 0xbd, 0x71, 0xd2, 0xac, 0x73, 0x1d, 0xff, 0x47, 0xdd, 0xd5, 0xc7, 0xb6, | 491 | 0x55, 0x67, 0xfb, 0x7f, 0xd4, 0x5d, 0x7d, 0x6c, 0x5b, 0xd7, 0x75, 0x3f, |
492 | 0x75, 0x5d, 0xf7, 0xc3, 0x47, 0xea, 0xc3, 0xb4, 0x2c, 0x53, 0x32, 0x25, | 492 | 0x7c, 0xa4, 0x3e, 0x4c, 0xcb, 0xd2, 0x93, 0x4c, 0xc9, 0xb4, 0x2d, 0xcb, |
493 | 0xd3, 0x96, 0x2c, 0xbf, 0x27, 0x3d, 0x59, 0x72, 0xac, 0x14, 0xac, 0xab, | 493 | 0x8f, 0xd2, 0x93, 0xa5, 0xc4, 0x4a, 0xc1, 0x79, 0xda, 0xaa, 0x01, 0x5a, |
494 | 0xad, 0x02, 0x46, 0xa4, 0x0c, 0x49, 0x7f, 0xb4, 0x08, 0x06, 0xfa, 0xa3, | 494 | 0xc7, 0x52, 0xf4, 0xc7, 0x82, 0x60, 0xa5, 0x65, 0x25, 0xf3, 0xd2, 0x2c, |
495 | 0x99, 0x8b, 0x66, 0xab, 0x4b, 0xd9, 0x4e, 0x0a, 0xf4, 0x0f, 0xb7, 0xc5, | 495 | 0x51, 0x29, 0xdb, 0xc9, 0xfe, 0x18, 0xe0, 0x25, 0xd9, 0x9a, 0xfd, 0x51, |
496 | 0x80, 0x6c, 0x58, 0x60, 0x86, 0xb4, 0x12, 0x63, 0x56, 0x4c, 0xd6, 0x66, | 496 | 0xe4, 0x95, 0x94, 0x12, 0x63, 0x56, 0x4d, 0xc6, 0xe6, 0x84, 0x02, 0x0b, |
497 | 0x85, 0x0c, 0xd8, 0x30, 0x4e, 0x54, 0x9c, 0x14, 0x50, 0xc6, 0x04, 0x69, | 497 | 0x36, 0x56, 0x92, 0x9d, 0x14, 0x50, 0xc0, 0x24, 0x6d, 0x87, 0x2c, 0x6d, |
498 | 0x83, 0xa2, 0x58, 0x61, 0x45, 0x76, 0x36, 0x6c, 0x7f, 0x65, 0x43, 0xd0, | 498 | 0x11, 0x55, 0x76, 0xda, 0x7f, 0x8d, 0x2d, 0xc0, 0xb2, 0x2e, 0x69, 0x14, |
499 | 0x05, 0x9b, 0xb3, 0x38, 0x76, 0xb0, 0x06, 0x45, 0xd6, 0x7d, 0x62, 0x18, | 499 | 0x3b, 0xc8, 0x02, 0x2c, 0x58, 0xbb, 0x6e, 0x28, 0xf6, 0x4f, 0xc7, 0x9d, |
500 | 0xd0, 0x0d, 0xdc, 0xf9, 0xdd, 0x0f, 0xf2, 0xf1, 0xf1, 0x51, 0x1f, 0x89, | 500 | 0xdf, 0xfd, 0x20, 0x1f, 0xc9, 0x47, 0x7d, 0x24, 0x6e, 0x81, 0x09, 0x10, |
501 | 0x33, 0x60, 0x02, 0x04, 0xbe, 0xf7, 0x78, 0xdf, 0x7b, 0xf7, 0x9e, 0x7b, | 501 | 0xc8, 0xf7, 0xde, 0x7d, 0xef, 0xdd, 0x7b, 0xee, 0xf9, 0xf8, 0x9d, 0x73, |
502 | 0xce, 0xb9, 0xbf, 0x73, 0xee, 0x39, 0x87, 0x9e, 0x7b, 0xdb, 0x9b, 0xf3, | 502 | 0xcf, 0xb9, 0x94, 0xba, 0xe2, 0x35, 0x57, 0x6e, 0x49, 0x65, 0x7e, 0x65, |
503 | 0xb9, 0xca, 0x77, 0x8e, 0x8a, 0x77, 0x0e, 0x28, 0x9d, 0xa5, 0xe3, 0xc5, | 503 | 0xce, 0x89, 0x9c, 0x0f, 0x95, 0x43, 0x0b, 0x9a, 0x3a, 0x27, 0x6d, 0x99, |
504 | 0x63, 0xc6, 0x6c, 0x61, 0x22, 0xe2, 0x67, 0xfe, 0x9e, 0xad, 0xc2, 0xbe, | 504 | 0x17, 0x33, 0xb0, 0x80, 0x73, 0x3d, 0x35, 0xf6, 0xaf, 0x95, 0xf9, 0xc0, |
505 | 0x6e, 0x87, 0xe1, 0xd6, 0xa2, 0x67, 0xbc, 0x85, 0x9e, 0xcd, 0x32, 0xc1, | 505 | 0x14, 0x31, 0x85, 0x69, 0x13, 0x7d, 0xde, 0x2b, 0xf4, 0x81, 0xf7, 0xba, |
506 | 0xf6, 0x78, 0x5d, 0x77, 0x4b, 0xda, 0xc9, 0xeb, 0x88, 0x85, 0xd7, 0x31, | 506 | 0x7c, 0x40, 0xe9, 0xbc, 0x56, 0xa5, 0xa3, 0x36, 0xc2, 0x6f, 0xf2, 0x9d, |
507 | 0x0e, 0x92, 0x76, 0x75, 0x19, 0xba, 0xe2, 0x8c, 0x6f, 0x68, 0xd0, 0xee, | 507 | 0xfd, 0xe2, 0x9d, 0xdd, 0x4a, 0x67, 0xe9, 0xdc, 0xf7, 0x71, 0x63, 0xba, |
508 | 0x74, 0x9d, 0x76, 0x3b, 0xff, 0x1f, 0xd1, 0xee, 0x1d, 0x81, 0x7f, 0x5f, | 508 | 0x08, 0x5f, 0x9b, 0xe9, 0x52, 0x87, 0xdf, 0xac, 0x4d, 0xe8, 0xf8, 0xb9, |
509 | 0xad, 0x22, 0x6e, 0x4d, 0x63, 0x00, 0x9d, 0x3b, 0x04, 0x3a, 0x42, 0x9f, | 509 | 0x3a, 0x3a, 0x56, 0xcb, 0x03, 0xfb, 0xe6, 0x65, 0x9d, 0x2d, 0x69, 0x26, |
510 | 0x5a, 0xe5, 0x15, 0x82, 0x4e, 0x45, 0x5c, 0x71, 0xad, 0xf6, 0x5a, 0xb4, | 510 | 0xcf, 0x23, 0x9f, 0x5f, 0xe7, 0x65, 0x48, 0x9a, 0x95, 0xe5, 0xe7, 0x92, |
511 | 0xee, 0xa7, 0x64, 0xbb, 0x04, 0xf6, 0x09, 0xfc, 0x79, 0xed, 0xd7, 0xc8, | 511 | 0x3b, 0x27, 0xa3, 0x42, 0xb3, 0xe9, 0x32, 0xcd, 0xf6, 0xfc, 0x3f, 0xa0, |
512 | 0x63, 0x1f, 0x6b, 0x8d, 0x04, 0x56, 0x72, 0xdb, 0x27, 0x0c, 0x08, 0x1d, | 512 | 0xd9, 0x4d, 0x81, 0x79, 0x5f, 0x29, 0x22, 0xff, 0x6e, 0x58, 0xe4, 0x2e, |
513 | 0xf6, 0xc9, 0xb1, 0x4d, 0xda, 0x27, 0xe7, 0xa5, 0x7d, 0x92, 0xdd, 0xb8, | 513 | 0xac, 0xd2, 0x88, 0xb2, 0xff, 0xee, 0x1a, 0x28, 0xd0, 0x12, 0xba, 0x34, |
514 | 0x7d, 0xb2, 0xbb, 0x25, 0xae, 0xab, 0x31, 0x9e, 0xcd, 0xdb, 0x27, 0xc6, | 514 | 0x52, 0x58, 0xa7, 0x98, 0x8c, 0x43, 0x98, 0xa5, 0xd2, 0x77, 0xa2, 0x90, |
515 | 0x9a, 0xf6, 0xc9, 0x90, 0xc3, 0x17, 0x83, 0xfe, 0xfe, 0x06, 0x65, 0x8f, | 515 | 0x3f, 0xf8, 0x24, 0xf0, 0x51, 0x10, 0xdf, 0x3b, 0xc9, 0x63, 0xfb, 0x97, |
516 | 0x43, 0xc7, 0x69, 0x3a, 0x83, 0xc6, 0xc7, 0x5d, 0x7e, 0xe1, 0x4f, 0x93, | 516 | 0x60, 0xd7, 0x06, 0x36, 0xf2, 0xe4, 0x36, 0x7c, 0x94, 0x8a, 0x8d, 0x04, |
517 | 0xd6, 0xbf, 0xf8, 0x3f, 0xa6, 0xf5, 0x50, 0x8b, 0xcf, 0xbb, 0x31, 0x1e, | 517 | 0x5e, 0x22, 0x27, 0x6e, 0x57, 0xf2, 0x5e, 0x66, 0xb3, 0x3f, 0x6c, 0x67, |
518 | 0x0a, 0xef, 0xd8, 0x14, 0x8e, 0x77, 0xd3, 0x7a, 0xa8, 0xad, 0xef, 0xb4, | 518 | 0x3f, 0x92, 0x69, 0x5c, 0x79, 0xee, 0xd6, 0x7c, 0x14, 0x3c, 0x4f, 0xda, |
519 | 0x7d, 0xcc, 0x62, 0xb3, 0xef, 0x74, 0xd4, 0x68, 0xa7, 0xdb, 0xff, 0xd8, | 519 | 0xc9, 0xd9, 0x6c, 0xe5, 0xb9, 0x4e, 0xf9, 0xb9, 0x61, 0x0f, 0x5d, 0x65, |
520 | 0xe1, 0x53, 0x75, 0xea, 0x77, 0xc8, 0x14, 0xf9, 0x8e, 0x4d, 0xe8, 0x77, | 520 | 0xd1, 0xcc, 0xa5, 0x7d, 0x75, 0xf9, 0x6a, 0x95, 0xf1, 0x48, 0x5f, 0x45, |
521 | 0x41, 0x96, 0xac, 0x6c, 0x96, 0x60, 0x33, 0xe1, 0x7d, 0x11, 0x21, 0x6b, | 521 | 0x8f, 0xe7, 0xc9, 0x4d, 0xf1, 0xa5, 0xcc, 0x3b, 0xab, 0xe4, 0xf0, 0xd4, |
522 | 0x2e, 0xbc, 0xc5, 0xef, 0x63, 0x7a, 0xbe, 0xf8, 0x87, 0x62, 0x9d, 0x92, | 522 | 0xfa, 0x29, 0xfb, 0x5d, 0xf1, 0x19, 0xd0, 0xf8, 0x0f, 0x69, 0x75, 0x12, |
523 | 0xfe, 0x07, 0xb4, 0x0f, 0xfb, 0xce, 0x88, 0xb6, 0x32, 0xbe, 0x49, 0xf9, | 523 | 0x7a, 0xae, 0x96, 0xd6, 0xef, 0xff, 0x9a, 0x68, 0x1d, 0xe9, 0xf8, 0xf5, |
524 | 0x23, 0x14, 0xf6, 0x6f, 0xe7, 0x87, 0x68, 0x5d, 0xf3, 0x36, 0x67, 0x2b, | 524 | 0xd2, 0x7a, 0x7f, 0x5d, 0x2c, 0xbc, 0x32, 0x1e, 0x0a, 0x75, 0x6f, 0x0b, |
525 | 0x68, 0x19, 0xdf, 0xcb, 0xf3, 0x12, 0x69, 0xb2, 0xb5, 0xa0, 0x3f, 0xcf, | 525 | 0xcb, 0xd7, 0xd2, 0x7a, 0x7f, 0xc3, 0x78, 0x6a, 0xe3, 0x5c, 0xcc, 0xea, |
526 | 0x33, 0x2e, 0x18, 0xad, 0x63, 0x82, 0xe6, 0xb9, 0xb9, 0x28, 0x6c, 0x3a, | 526 | 0x78, 0x6a, 0xbf, 0xc1, 0x32, 0x92, 0x65, 0x79, 0x69, 0xa8, 0xe3, 0xff, |
527 | 0xad, 0x3b, 0x57, 0x64, 0xec, 0xa9, 0xb8, 0x0e, 0x9c, 0xa6, 0x75, 0xa7, | 527 | 0xce, 0x15, 0x6f, 0x75, 0xeb, 0x79, 0xc8, 0x1a, 0xf9, 0x4e, 0x0e, 0xe9, |
528 | 0x1b, 0x07, 0xef, 0xf5, 0xe0, 0x0b, 0xcf, 0xdc, 0x4f, 0x3d, 0x77, 0x26, | 528 | 0x77, 0x42, 0xae, 0x22, 0x8e, 0x43, 0xf0, 0x9f, 0xf0, 0x5e, 0xe4, 0x62, |
529 | 0x62, 0xce, 0x53, 0x9e, 0x73, 0x57, 0xcf, 0xe1, 0xca, 0x36, 0xda, 0xca, | 529 | 0xd5, 0xe1, 0x2e, 0x7e, 0x2f, 0xcb, 0xff, 0x0b, 0xcf, 0x0b, 0x9b, 0x25, |
530 | 0xfb, 0x53, 0x62, 0x5c, 0xdf, 0xfc, 0x62, 0x02, 0xb9, 0x6a, 0xf5, 0xfc, | 530 | 0x63, 0x12, 0x68, 0x1f, 0xf2, 0x9d, 0x11, 0x6d, 0x65, 0x8e, 0x96, 0x8a, |
531 | 0x21, 0x77, 0xce, 0x14, 0xd6, 0x01, 0x2d, 0x87, 0x3a, 0x3f, 0x1b, 0xb4, | 531 | 0x51, 0x28, 0x3f, 0xa0, 0x51, 0x6c, 0xa2, 0xde, 0xfe, 0x6d, 0xcf, 0x6f, |
532 | 0x18, 0xf1, 0xc8, 0x99, 0x72, 0xae, 0x25, 0xb8, 0xcf, 0x4d, 0x8b, 0xc6, | 532 | 0xd0, 0xf1, 0x88, 0x83, 0x3c, 0x3f, 0xe1, 0x2a, 0xbf, 0x0b, 0xfa, 0xf4, |
533 | 0x3a, 0x32, 0xa7, 0xd6, 0x91, 0x45, 0x87, 0x1e, 0x6f, 0xc5, 0xed, 0xfd, | 533 | 0x3c, 0x63, 0x84, 0xfe, 0x32, 0x3e, 0xa8, 0x9e, 0xa3, 0x59, 0xe1, 0xdf, |
534 | 0x1e, 0xb8, 0xdd, 0x2b, 0x6f, 0x0a, 0x7d, 0x7a, 0x92, 0x71, 0xc8, 0x67, | 534 | 0x69, 0x5d, 0xba, 0x2a, 0x73, 0x6b, 0xc5, 0x79, 0xe0, 0xb5, 0xb2, 0x2e, |
535 | 0x80, 0x43, 0x42, 0xc8, 0x5b, 0x92, 0x58, 0x04, 0xdf, 0x17, 0x19, 0x8f, | 535 | 0xad, 0xc1, 0xc3, 0x07, 0x3d, 0xf8, 0xc3, 0xb3, 0x9e, 0x55, 0xcf, 0xa1, |
536 | 0x44, 0x98, 0x57, 0x7e, 0x44, 0xe7, 0x18, 0x6b, 0x5f, 0xa7, 0xfd, 0xca, | 536 | 0x85, 0x9c, 0xfa, 0x84, 0xe7, 0x1c, 0x96, 0xeb, 0xd2, 0x9c, 0x4a, 0x5b, |
537 | 0x3e, 0x83, 0xdc, 0xea, 0x38, 0x53, 0xc4, 0xf1, 0xfb, 0x28, 0xfb, 0x98, | 537 | 0x79, 0x7f, 0x42, 0x8c, 0x6b, 0xea, 0xde, 0x38, 0xea, 0xef, 0xca, 0x35, |
538 | 0x35, 0x19, 0xa7, 0x1f, 0xd1, 0x59, 0x11, 0x33, 0x83, 0xfd, 0x3d, 0xc4, | 538 | 0x51, 0xb5, 0x75, 0x60, 0xb0, 0x0b, 0x5a, 0x1e, 0x75, 0xcd, 0x39, 0x68, |
539 | 0x1c, 0x3c, 0x20, 0xde, 0x2f, 0x7d, 0x19, 0xf7, 0x23, 0xa6, 0x6e, 0xe3, | 539 | 0xd1, 0xe7, 0x51, 0x07, 0xe6, 0xb6, 0x2d, 0xb8, 0xaf, 0x96, 0x16, 0x15, |
540 | 0xf1, 0xfb, 0x2a, 0xb7, 0x8e, 0xdb, 0xe1, 0x9d, 0x4b, 0x4a, 0xa6, 0xc4, | 540 | 0xbb, 0x32, 0xa7, 0xec, 0xca, 0xa2, 0x4b, 0xaf, 0xd7, 0xe3, 0xf7, 0x2e, |
541 | 0x35, 0xbe, 0xff, 0x49, 0xa3, 0xf5, 0xfe, 0xb8, 0x91, 0xaa, 0xa6, 0x8c, | 541 | 0x0f, 0xfc, 0xee, 0x55, 0x0b, 0x86, 0x3e, 0x3d, 0xc5, 0x98, 0xe4, 0x33, |
542 | 0x44, 0x05, 0xed, 0x9e, 0x34, 0x92, 0x55, 0xd8, 0x90, 0x9a, 0x47, 0xac, | 542 | 0xc0, 0x24, 0x26, 0x6a, 0xb1, 0x24, 0x2e, 0xc1, 0xf5, 0x1c, 0x63, 0x93, |
543 | 0x28, 0xe4, 0x6d, 0x95, 0xd6, 0xdf, 0x8b, 0x58, 0x24, 0x57, 0x9e, 0xc4, | 543 | 0x30, 0xf3, 0xca, 0x6b, 0x74, 0x8e, 0x31, 0xf7, 0x35, 0xba, 0x4b, 0xf9, |
544 | 0x06, 0xfa, 0x7d, 0xb8, 0xa9, 0xdf, 0x9a, 0xbe, 0x38, 0x86, 0xbf, 0xe7, | 544 | 0x69, 0x90, 0x5f, 0x9d, 0x47, 0x8b, 0x5a, 0x06, 0x1f, 0x39, 0x0f, 0x45, |
545 | 0x15, 0xa6, 0xa9, 0xc6, 0xb5, 0x41, 0xf8, 0xd7, 0x27, 0xb3, 0xb4, 0x16, | 545 | 0x86, 0x63, 0xf4, 0x1a, 0x9d, 0x15, 0xf9, 0x3e, 0x58, 0xff, 0x43, 0x9e, |
546 | 0xae, 0xb5, 0x5a, 0x70, 0xed, 0xe2, 0xba, 0xfd, 0xfe, 0xa4, 0x32, 0x2e, | 546 | 0xc4, 0xdd, 0xe2, 0xfd, 0x32, 0xae, 0x71, 0x27, 0xf2, 0x02, 0xb7, 0x5e, |
547 | 0xf3, 0xa3, 0xfd, 0xb6, 0xc0, 0xaf, 0xdc, 0xef, 0x26, 0x6c, 0xeb, 0xe2, | 547 | 0x9f, 0xa0, 0xea, 0x05, 0xb9, 0x1d, 0xde, 0xb9, 0xac, 0x64, 0x4a, 0x9c, |
548 | 0x29, 0xb4, 0xd1, 0x7e, 0x70, 0xed, 0x07, 0xeb, 0x55, 0xf1, 0xc0, 0x3a, | 548 | 0xe3, 0xfb, 0x9f, 0x32, 0xea, 0xef, 0x8f, 0x19, 0x89, 0x62, 0xc2, 0x88, |
549 | 0x3e, 0x21, 0x88, 0x7c, 0xaf, 0x90, 0x8c, 0x6b, 0x85, 0x8d, 0xb5, 0xc2, | 549 | 0x2f, 0xa1, 0xdd, 0x53, 0xc6, 0x44, 0x11, 0xbe, 0xa4, 0xe6, 0x91, 0x48, |
550 | 0xfd, 0x83, 0xbd, 0x05, 0x9f, 0x8f, 0xb0, 0xb7, 0xcc, 0x24, 0x49, 0x5f, | 550 | 0x14, 0xf2, 0xb6, 0x46, 0x9b, 0xaf, 0x53, 0x2c, 0x52, 0x4d, 0xad, 0xc8, |
551 | 0xf7, 0x99, 0xaa, 0xd3, 0xbf, 0xeb, 0x95, 0x4b, 0x39, 0xea, 0x91, 0x4b, | 551 | 0x16, 0xfa, 0x7d, 0xac, 0xaa, 0xdf, 0x9a, 0xbe, 0xf8, 0x8e, 0xd8, 0xcf, |
552 | 0xe9, 0x94, 0xb5, 0x80, 0x43, 0xd6, 0x22, 0x0e, 0xdc, 0x36, 0xcc, 0x76, | 552 | 0xcb, 0x4c, 0x53, 0x8d, 0x71, 0x83, 0x88, 0xbd, 0x0f, 0x3b, 0xb4, 0x11, |
553 | 0x4b, 0x0f, 0xeb, 0x90, 0x1e, 0xb1, 0x6d, 0xe2, 0xbf, 0xea, 0xb4, 0x5b, | 553 | 0xc6, 0x8d, 0xd4, 0x61, 0xdc, 0xc5, 0x4d, 0xfb, 0xfd, 0x69, 0x65, 0x5c, |
554 | 0xdc, 0x79, 0xf1, 0x90, 0x3b, 0x60, 0x33, 0x69, 0xc3, 0xa4, 0x4a, 0xf5, | 554 | 0xd6, 0x7c, 0xfb, 0x6d, 0x81, 0x65, 0xb9, 0xdf, 0x55, 0x38, 0xb7, 0x86, |
555 | 0x9c, 0x7a, 0x1e, 0x77, 0x23, 0x6f, 0xb1, 0xd2, 0x92, 0x63, 0xe9, 0xd5, | 555 | 0xa7, 0xd0, 0x46, 0xc7, 0xc8, 0x75, 0x4c, 0xac, 0x5d, 0xc5, 0x74, 0x75, |
556 | 0xdf, 0x91, 0x96, 0xfe, 0x62, 0xfd, 0x8a, 0xb7, 0xc5, 0x74, 0x5e, 0x76, | 556 | 0x3e, 0x45, 0x50, 0xc5, 0xb4, 0x71, 0x1d, 0xbe, 0xd6, 0x2a, 0xf7, 0x0f, |
557 | 0xd5, 0xfd, 0xea, 0x9f, 0x5b, 0x9f, 0xe1, 0x5d, 0xa3, 0xc2, 0xe7, 0x9d, | 557 | 0x7e, 0x17, 0xe2, 0x3f, 0x6e, 0xbf, 0xcb, 0x1d, 0xf3, 0xf5, 0xaa, 0x0d, |
558 | 0xad, 0xeb, 0xb2, 0x19, 0xd9, 0xdf, 0x42, 0xb3, 0x9d, 0xe1, 0xbf, 0x42, | 558 | 0xed, 0xf7, 0xa8, 0x0d, 0x75, 0xcb, 0x59, 0xc0, 0x25, 0x67, 0x61, 0x17, |
559 | 0x8a, 0x76, 0xde, 0xba, 0x7d, 0x73, 0xfe, 0xb3, 0xad, 0x6e, 0x1c, 0xdc, | 559 | 0x86, 0xeb, 0x65, 0xff, 0xa5, 0x8d, 0xf5, 0x07, 0xfc, 0x97, 0x20, 0xf9, |
560 | 0x27, 0xfd, 0x62, 0x73, 0x2a, 0x0e, 0x7b, 0x40, 0xd9, 0x7b, 0xeb, 0xf1, | 560 | 0x2f, 0xbb, 0xfd, 0x97, 0xda, 0x3a, 0x7f, 0xc8, 0x1c, 0x70, 0x9a, 0xf4, |
561 | 0x3b, 0xae, 0xcd, 0x29, 0x5f, 0xa2, 0x65, 0x96, 0x09, 0x7c, 0x7e, 0xfc, | 561 | 0x65, 0x12, 0xf9, 0xf2, 0x1e, 0x01, 0x3c, 0xe6, 0x4a, 0x1d, 0xe6, 0x52, |
562 | 0x54, 0x87, 0x1d, 0x52, 0x7b, 0x59, 0xd8, 0xaf, 0x02, 0xdf, 0xeb, 0xe7, | 562 | 0x5d, 0xcd, 0xa8, 0x57, 0x7f, 0xfb, 0xea, 0xfa, 0x0b, 0x1b, 0x16, 0x6b, |
563 | 0x43, 0x67, 0x6f, 0x64, 0xce, 0xcc, 0x96, 0x39, 0x93, 0x7c, 0x05, 0x5b, | 563 | 0x88, 0xef, 0xbc, 0xfc, 0xab, 0x3b, 0xd5, 0xbf, 0x5a, 0x5d, 0x86, 0x77, |
564 | 0x0b, 0xf1, 0xc5, 0x53, 0xae, 0x18, 0xef, 0x4f, 0x42, 0x8b, 0x5e, 0x8f, | 564 | 0xf5, 0x8b, 0x18, 0xb8, 0x53, 0xd6, 0x63, 0x63, 0xb2, 0xbf, 0xd9, 0x6a, |
565 | 0xb8, 0x67, 0xc4, 0x2d, 0xb7, 0xeb, 0xe7, 0x1d, 0x07, 0x2e, 0x47, 0x7f, | 565 | 0x5f, 0xc3, 0x7f, 0x89, 0x14, 0xed, 0xbc, 0xf5, 0xfa, 0xf6, 0xe2, 0x68, |
566 | 0x6b, 0xb5, 0x57, 0xa2, 0xbb, 0xe5, 0x5a, 0x5c, 0xf5, 0xc6, 0x48, 0xa1, | 566 | 0x3b, 0x6b, 0x6c, 0xef, 0x78, 0xa7, 0x8c, 0x8f, 0xcd, 0xa9, 0x3c, 0xf2, |
567 | 0x0d, 0xf7, 0xcf, 0xbd, 0xf6, 0xee, 0xda, 0xe0, 0xda, 0x2b, 0xea, 0x8b, | 567 | 0x6e, 0xe5, 0xf7, 0x6d, 0xc6, 0xeb, 0x38, 0x37, 0xa7, 0x62, 0x8a, 0x11, |
568 | 0xf8, 0x0e, 0x09, 0x1d, 0xd0, 0x43, 0x95, 0x12, 0xe2, 0xaf, 0x3f, 0x0b, | 568 | 0xab, 0x40, 0xe0, 0xf1, 0xc9, 0xd3, 0x4d, 0xb6, 0xa9, 0xd6, 0xb8, 0xb0, |
569 | 0x99, 0x67, 0x3d, 0xeb, 0xc8, 0x49, 0xf3, 0x9e, 0xc7, 0xfa, 0x9e, 0x4a, | 569 | 0x8e, 0x05, 0x9e, 0xd7, 0xcf, 0x97, 0x35, 0x65, 0x9b, 0xcf, 0x99, 0x55, |
570 | 0x20, 0x86, 0xbd, 0x3f, 0xc4, 0x96, 0xf4, 0xb3, 0xee, 0x41, 0xfb, 0x71, | 570 | 0x37, 0x67, 0x92, 0xaf, 0xe0, 0x6f, 0x21, 0x3f, 0x7a, 0xa4, 0x26, 0x47, |
571 | 0xf3, 0x16, 0xfc, 0xbd, 0xca, 0xff, 0x94, 0x52, 0xeb, 0xcb, 0xa1, 0x0d, | 571 | 0xfd, 0xd3, 0xd0, 0xa2, 0xdd, 0x23, 0x6f, 0x1b, 0x79, 0xd7, 0x8d, 0xfa, |
572 | 0xec, 0xad, 0x6c, 0x4e, 0x4f, 0x5b, 0xe6, 0x0a, 0x61, 0xdf, 0x07, 0xf1, | 572 | 0xb9, 0xee, 0xc2, 0xea, 0xb2, 0x6e, 0x63, 0x95, 0xd0, 0xef, 0x52, 0xe9, |
573 | 0xc2, 0xc7, 0x7a, 0xa9, 0xf7, 0x2b, 0x5d, 0x5d, 0xf6, 0x1f, 0xf4, 0xc9, | 573 | 0xe5, 0x28, 0xb0, 0x69, 0x6f, 0x1d, 0xaf, 0x69, 0xbc, 0x64, 0xba, 0xfa, |
574 | 0xbd, 0x28, 0x7c, 0xd7, 0x43, 0x2f, 0x94, 0x10, 0xcb, 0x8d, 0xef, 0x7e, | 574 | 0xf9, 0xf8, 0xc6, 0xfd, 0xac, 0xb1, 0xbf, 0x7b, 0x3d, 0xec, 0x6f, 0x23, |
575 | 0x8b, 0xbf, 0xf3, 0xd2, 0x51, 0x3a, 0x16, 0x1d, 0x58, 0x4e, 0xce, 0x4f, | 575 | 0x5f, 0x42, 0xec, 0x9d, 0xe2, 0x3b, 0x2a, 0x74, 0x41, 0x1b, 0x2d, 0xe5, |
576 | 0x99, 0x60, 0x2b, 0xd5, 0xe8, 0x6f, 0xa2, 0x9f, 0x93, 0xfb, 0x19, 0xd5, | 576 | 0x91, 0x4b, 0xfe, 0x1b, 0xa8, 0x67, 0x65, 0x7d, 0xeb, 0xaa, 0xcf, 0xf3, |
577 | 0xfb, 0xbd, 0x57, 0xe3, 0xe5, 0x2f, 0xfc, 0x69, 0xdf, 0xc7, 0x8d, 0x8d, | 577 | 0x9e, 0xd3, 0xf2, 0x7a, 0x4b, 0x60, 0x1c, 0xeb, 0x83, 0xc8, 0x41, 0xe9, |
578 | 0xfc, 0xd6, 0x86, 0xfc, 0x85, 0xd8, 0xe7, 0xdf, 0xc8, 0x9e, 0x89, 0xde, | 578 | 0x62, 0x1d, 0x84, 0xf6, 0x83, 0xd6, 0x0d, 0xc4, 0x80, 0x55, 0x3c, 0x2a, |
579 | 0x1b, 0x9e, 0x16, 0x39, 0xa7, 0x4e, 0x3e, 0xb8, 0x3f, 0xfb, 0xc3, 0xe0, | 579 | 0xa1, 0xec, 0xcc, 0xd1, 0x2d, 0xac, 0xbb, 0x6c, 0x4f, 0x5f, 0x47, 0xac, |
580 | 0x87, 0x91, 0x16, 0x5d, 0xf5, 0xc9, 0xfd, 0xfd, 0x6e, 0xba, 0x06, 0x3d, | 580 | 0x55, 0xc2, 0x9a, 0x10, 0xf2, 0x9e, 0x9d, 0x76, 0x6a, 0xbf, 0xbf, 0xa5, |
581 | 0x7d, 0x55, 0xde, 0xfb, 0xc0, 0xd8, 0xf3, 0x87, 0x9f, 0xba, 0x4a, 0x67, | 581 | 0xc5, 0xbe, 0xd9, 0x29, 0xd7, 0xaa, 0x70, 0xad, 0x8d, 0xae, 0xe6, 0x91, |
582 | 0xae, 0x81, 0x87, 0x0d, 0xe6, 0xb6, 0x31, 0xca, 0x87, 0x91, 0x57, 0x24, | 582 | 0x97, 0x8e, 0x6b, 0x0f, 0xf2, 0x35, 0x2f, 0x7d, 0xf5, 0xb6, 0xe2, 0x25, |
583 | 0x72, 0x73, 0xf4, 0xbe, 0xa1, 0xc8, 0x15, 0x3a, 0x23, 0x72, 0x20, 0xc7, | 583 | 0x60, 0x3a, 0x39, 0x47, 0x05, 0x92, 0x73, 0xb6, 0x4e, 0xf0, 0xa5, 0x4a, |
584 | 0x23, 0xf7, 0x78, 0x3d, 0x3c, 0x53, 0x7d, 0x9b, 0xce, 0x56, 0x82, 0xfc, | 584 | 0xf4, 0x4f, 0xd1, 0xdf, 0x14, 0xfe, 0x5f, 0x65, 0xae, 0xb6, 0xb7, 0x8e, |
585 | 0xdf, 0xc0, 0xee, 0xad, 0x79, 0x90, 0xcd, 0x3c, 0x7e, 0x4f, 0xf0, 0xf8, | 585 | 0x53, 0x9b, 0x03, 0x31, 0xb9, 0x61, 0x1c, 0xb1, 0xa3, 0x6b, 0xab, 0xeb, |
586 | 0xf0, 0x9a, 0x3c, 0x7e, 0xa4, 0xce, 0xe3, 0x5f, 0xe9, 0x97, 0xfc, 0xdc, | 586 | 0x38, 0xb5, 0x39, 0x10, 0x8f, 0x6f, 0x29, 0x8e, 0x18, 0xb1, 0xa6, 0x37, |
587 | 0xcb, 0xcf, 0xea, 0xa5, 0x43, 0xe2, 0xb9, 0x6f, 0xf3, 0xf1, 0x56, 0x3a, | 587 | 0xac, 0x33, 0x70, 0xaf, 0xa9, 0xe8, 0xb5, 0xe4, 0x51, 0x51, 0x7b, 0xeb, |
588 | 0x14, 0x92, 0xc7, 0x67, 0x2b, 0xac, 0xe3, 0x0b, 0x6f, 0xd3, 0xb9, 0x6b, | 588 | 0xe6, 0x89, 0x3b, 0xb3, 0x9e, 0x0c, 0xde, 0xe8, 0xab, 0xd3, 0x61, 0x77, |
589 | 0x59, 0x5f, 0x4a, 0xe4, 0x2f, 0x38, 0x6b, 0x69, 0xe8, 0xfb, 0xd1, 0xae, | 589 | 0x60, 0x3d, 0xa0, 0x86, 0xb6, 0x41, 0xcf, 0x58, 0x96, 0xf7, 0xba, 0x31, |
590 | 0x1d, 0xff, 0x6b, 0xbd, 0x24, 0x73, 0xae, 0xca, 0x52, 0x3f, 0xd1, 0x5b, | 590 | 0x72, 0x04, 0x10, 0xc3, 0x2e, 0xd2, 0x99, 0x2b, 0xe0, 0x67, 0x83, 0x39, |
591 | 0xd1, 0x21, 0x17, 0xff, 0x37, 0xdb, 0x8e, 0xe7, 0xd5, 0x1a, 0x78, 0x7c, | 591 | 0x6f, 0x80, 0x32, 0x21, 0xd4, 0x52, 0x89, 0xba, 0x28, 0xbd, 0xbe, 0x28, |
592 | 0x0d, 0xbf, 0x46, 0x2b, 0x5f, 0xf6, 0x79, 0xe0, 0xe1, 0xa7, 0xfb, 0xe5, | 592 | 0xea, 0xa3, 0xce, 0x88, 0xba, 0xcf, 0xc1, 0xf0, 0x6d, 0xb6, 0x91, 0x67, |
593 | 0x3e, 0xd5, 0x5a, 0x7e, 0x8d, 0xa6, 0xb8, 0x0e, 0xe7, 0xbe, 0x3d, 0xeb, | 593 | 0x8a, 0x6f, 0xd1, 0xd9, 0xa5, 0x20, 0xff, 0x57, 0xf0, 0x7c, 0x7d, 0xed, |
594 | 0xfd, 0x3d, 0x2a, 0x17, 0xf0, 0x87, 0xfd, 0x72, 0xbd, 0x40, 0x7e, 0xe0, | 594 | 0x67, 0x35, 0xbf, 0xdf, 0x16, 0xfc, 0xde, 0xbb, 0x21, 0xbf, 0x1f, 0x2f, |
595 | 0x0a, 0xd3, 0xe1, 0x22, 0x63, 0x95, 0x21, 0xea, 0xbc, 0xaa, 0xc7, 0x3a, | 595 | 0xf3, 0x3b, 0x77, 0x28, 0x28, 0x6b, 0x2b, 0x53, 0x57, 0xda, 0xe9, 0xa8, |
596 | 0x24, 0xf4, 0xad, 0xd3, 0x4f, 0x73, 0x51, 0xe5, 0x76, 0xe7, 0x1c, 0x63, | 596 | 0x78, 0xee, 0x5b, 0xfc, 0x7d, 0x27, 0x1d, 0x35, 0xe5, 0xf7, 0xb3, 0x4b, |
597 | 0xba, 0x28, 0x6c, 0x9c, 0xf6, 0xf2, 0xd6, 0x3e, 0xe6, 0x6a, 0xd8, 0xb5, | 597 | 0xac, 0xfb, 0xb3, 0x6f, 0xd1, 0xb9, 0x2b, 0x8e, 0x2f, 0x21, 0xea, 0x32, |
598 | 0x26, 0xb8, 0xf9, 0x0d, 0x75, 0x4a, 0x30, 0xbf, 0x64, 0x48, 0x1c, 0x3c, | 598 | 0xdc, 0x7b, 0x86, 0xe8, 0xfb, 0xd1, 0xce, 0x4b, 0x16, 0xea, 0xf5, 0x55, |
599 | 0xc3, 0xf8, 0x76, 0xb3, 0xfb, 0x45, 0x9f, 0x14, 0x23, 0xba, 0x6b, 0x60, | 599 | 0x41, 0xea, 0x2b, 0xba, 0x29, 0x62, 0x20, 0xde, 0xfa, 0x0a, 0xfc, 0x79, |
600 | 0xb8, 0x8f, 0x31, 0x0f, 0xd2, 0xe6, 0xc8, 0xbc, 0x58, 0x15, 0xba, 0xe0, | 600 | 0x5e, 0xd9, 0xc6, 0xc9, 0x0d, 0x62, 0x1f, 0xf5, 0xbc, 0xd9, 0xe9, 0x81, |
601 | 0xe2, 0x54, 0x8d, 0x92, 0xd1, 0x6d, 0x94, 0x99, 0xe2, 0x77, 0xcf, 0xd8, | 601 | 0x91, 0xbf, 0xdb, 0x25, 0xd7, 0xb1, 0x36, 0x8a, 0x81, 0x54, 0xe5, 0x81, |
602 | 0x6c, 0x7b, 0xf9, 0x29, 0xcb, 0xf2, 0x9b, 0x99, 0xda, 0xa2, 0xf0, 0xa2, | 602 | 0xb8, 0xd7, 0xf9, 0xd9, 0x1e, 0x4c, 0xaa, 0x75, 0xf7, 0x9f, 0x76, 0x49, |
603 | 0xf6, 0xa7, 0x77, 0xa9, 0x38, 0x87, 0x5e, 0xb1, 0x2f, 0x29, 0x6b, 0xf5, | 603 | 0x3b, 0x82, 0x9a, 0xc8, 0x55, 0xa6, 0xc3, 0x3f, 0x30, 0x7e, 0xd9, 0x4f, |
604 | 0xf0, 0x71, 0x45, 0x3f, 0x1b, 0xd7, 0xc1, 0xbb, 0x9d, 0xaa, 0xdd, 0x65, | 604 | 0xcd, 0x97, 0xf5, 0x58, 0xf7, 0x0b, 0x7f, 0xc8, 0x1d, 0xcb, 0x99, 0x55, |
605 | 0x47, 0x3b, 0xb4, 0xb9, 0xac, 0xda, 0xe2, 0x99, 0x1a, 0x53, 0x74, 0x2b, | 605 | 0x35, 0xee, 0x69, 0xd7, 0x98, 0x66, 0x85, 0xdf, 0xf3, 0x49, 0xd6, 0x31, |
606 | 0x7d, 0x0b, 0x39, 0x5c, 0x51, 0xb9, 0x7a, 0xc2, 0x7e, 0xa0, 0xd9, 0xfa, | 606 | 0x7b, 0x6b, 0x6c, 0x45, 0x2d, 0xbf, 0x61, 0x3f, 0x16, 0xcc, 0x2f, 0x19, |
607 | 0x58, 0x2e, 0x73, 0xdb, 0xff, 0xae, 0xc5, 0x85, 0x2d, 0x77, 0x99, 0x31, | 607 | 0x12, 0x1b, 0x8f, 0x31, 0xe6, 0xdd, 0xee, 0x7a, 0xd2, 0xa7, 0xc5, 0x8d, |
608 | 0x6f, 0x55, 0xc8, 0x8a, 0xbb, 0x4f, 0x18, 0x8b, 0x5f, 0xec, 0x0f, 0xf1, | 608 | 0xb5, 0x7b, 0x7d, 0xd4, 0x7e, 0xc7, 0x3c, 0x48, 0x3f, 0x24, 0xf5, 0x42, |
609 | 0xb1, 0x7a, 0xcf, 0xe9, 0x7a, 0x9f, 0x10, 0xa3, 0x61, 0x45, 0xe4, 0xb3, | 609 | 0x51, 0xe8, 0x82, 0xd9, 0x91, 0x12, 0x4d, 0x44, 0x77, 0x51, 0x6a, 0x84, |
610 | 0x74, 0xbb, 0xcb, 0x8e, 0x76, 0x5a, 0x57, 0xe8, 0xfd, 0x87, 0x8f, 0x7c, | 610 | 0xdf, 0x3d, 0x66, 0xb3, 0x3f, 0xe6, 0x27, 0x87, 0xe5, 0x37, 0x35, 0xb2, |
611 | 0xb3, 0x85, 0xdb, 0x3e, 0x19, 0xc3, 0x1b, 0x12, 0xfb, 0xa7, 0x32, 0x46, | 611 | 0x43, 0xd5, 0xcc, 0xe9, 0x58, 0x7b, 0x8b, 0xc2, 0x90, 0xed, 0x62, 0xdd, |
612 | 0x43, 0x1f, 0xc3, 0xbf, 0x8c, 0x98, 0x0a, 0xc4, 0x49, 0x38, 0xf5, 0x8d, | 612 | 0x52, 0xee, 0x49, 0xc4, 0xdf, 0x97, 0xf4, 0xb3, 0x71, 0x1e, 0xbc, 0xdb, |
613 | 0x1c, 0x6f, 0x00, 0x6b, 0x51, 0x15, 0xfb, 0xa6, 0xd8, 0xaf, 0x68, 0x87, | 613 | 0xac, 0xda, 0x5d, 0x74, 0xb5, 0x43, 0x9b, 0x8b, 0xaa, 0x2d, 0x9e, 0xa9, |
614 | 0x9d, 0x77, 0x21, 0x36, 0x7f, 0x13, 0x18, 0x74, 0x23, 0xf2, 0x67, 0x7a, | 614 | 0xb1, 0x86, 0xae, 0xd3, 0x82, 0x1c, 0xae, 0xaa, 0xfa, 0x44, 0xf9, 0xbc, |
615 | 0xc8, 0x9f, 0xf3, 0xfd, 0xc8, 0x83, 0x43, 0x3e, 0x5c, 0x76, 0xd2, 0xa0, | 615 | 0x99, 0xe2, 0x45, 0x6e, 0xd3, 0xa5, 0xae, 0x5f, 0x64, 0xfc, 0x5b, 0x14, |
616 | 0x1a, 0xdb, 0x0a, 0x06, 0x95, 0x43, 0x3e, 0x3a, 0x67, 0x5b, 0xd1, 0x8a, | 616 | 0x32, 0x22, 0xfb, 0xd2, 0x54, 0xee, 0x8b, 0xc4, 0xed, 0xb8, 0xa7, 0x5d, |
617 | 0xc0, 0x9a, 0x8f, 0xc0, 0x7f, 0x35, 0xb9, 0x42, 0x07, 0x44, 0xce, 0x38, | 617 | 0xe5, 0x62, 0xbe, 0x25, 0xd7, 0x05, 0x54, 0x1f, 0xe4, 0x75, 0xfe, 0x5c, |
618 | 0x6a, 0x1f, 0x94, 0x79, 0x0d, 0x3e, 0xcd, 0x3c, 0x78, 0x96, 0xed, 0x8f, | 618 | 0xaa, 0xf6, 0x29, 0xdf, 0x28, 0xea, 0x75, 0x88, 0x8f, 0x7d, 0x33, 0xd9, |
619 | 0xec, 0x49, 0xec, 0xb7, 0xe8, 0x79, 0x41, 0x0e, 0x3c, 0x3e, 0x4d, 0x9e, | 619 | 0x77, 0x7c, 0x32, 0xe7, 0xd8, 0x14, 0x6b, 0xa9, 0x32, 0x7f, 0x43, 0x7f, |
620 | 0xbb, 0xdf, 0xdd, 0x41, 0xc1, 0x38, 0x3f, 0xd3, 0x84, 0x7e, 0xe2, 0xe7, | 620 | 0x47, 0xac, 0x19, 0x39, 0x16, 0xc8, 0x9f, 0x70, 0xeb, 0x16, 0x39, 0xb6, |
621 | 0xa4, 0x29, 0xc1, 0x76, 0x12, 0x6c, 0xd6, 0xd3, 0x27, 0xad, 0x50, 0x99, | 621 | 0x00, 0x6c, 0x50, 0x11, 0x6b, 0xa8, 0x1b, 0xe1, 0xe7, 0xbd, 0xcc, 0x9b, |
622 | 0x0c, 0x6e, 0x0b, 0xdb, 0x15, 0xcf, 0xc1, 0xfd, 0xf1, 0x50, 0x07, 0xb9, | 622 | 0xe6, 0x36, 0x70, 0xe8, 0x56, 0x64, 0xcd, 0xf2, 0x90, 0x35, 0xf7, 0xfb, |
623 | 0x73, 0x72, 0x7b, 0x45, 0x9e, 0xe2, 0x5b, 0xd1, 0x07, 0xc9, 0x18, 0x84, | 623 | 0x51, 0xcb, 0x87, 0x9a, 0x3e, 0x67, 0xd8, 0xa0, 0x12, 0xfb, 0x0a, 0x06, |
624 | 0xbe, 0xc2, 0xbc, 0x3d, 0xa0, 0xf6, 0x89, 0xb6, 0xf3, 0xf1, 0x84, 0x3a, | 624 | 0x15, 0x4c, 0x1f, 0x9d, 0xb3, 0x23, 0xd1, 0x25, 0x81, 0x37, 0xef, 0x43, |
625 | 0x0e, 0x8a, 0xf9, 0x94, 0xc7, 0x9a, 0xbf, 0xf1, 0xf7, 0xf3, 0x2e, 0xb2, | 625 | 0xce, 0xcf, 0xf0, 0x2a, 0x1d, 0x36, 0xcf, 0x92, 0xdc, 0xef, 0xa1, 0xc0, |
626 | 0xfd, 0x6a, 0xfe, 0x9a, 0x62, 0x41, 0x22, 0x63, 0x46, 0x90, 0xce, 0x57, | 626 | 0xb6, 0x77, 0x9a, 0xf9, 0xed, 0x2c, 0xfb, 0x1f, 0xce, 0x14, 0xd6, 0x5d, |
627 | 0xd6, 0xf2, 0xbf, 0x78, 0xe5, 0xba, 0x6e, 0xdf, 0x60, 0xae, 0xeb, 0x4f, | 627 | 0x34, 0xcd, 0xb0, 0x0f, 0x00, 0x3e, 0x2d, 0x9e, 0xa7, 0xe2, 0x6e, 0x0a, |
628 | 0x76, 0xc8, 0xdc, 0x32, 0x67, 0x5f, 0xfe, 0x93, 0xfb, 0xe2, 0x85, 0xc9, | 628 | 0xc6, 0xf8, 0x99, 0x16, 0x74, 0x11, 0x3f, 0x27, 0x49, 0x71, 0xf6, 0x93, |
629 | 0x5a, 0x70, 0x22, 0x8f, 0xb7, 0x46, 0x3f, 0x8b, 0x7e, 0x9e, 0xee, 0x84, | 629 | 0xe0, 0xb3, 0x4e, 0x4f, 0x45, 0xcc, 0x02, 0x19, 0xdc, 0x16, 0xbe, 0x2b, |
630 | 0x23, 0x2a, 0x66, 0x09, 0x31, 0x4a, 0x0f, 0x2a, 0xbe, 0xd6, 0xba, 0x9f, | 630 | 0x9e, 0x83, 0xfb, 0x63, 0x66, 0x13, 0xd5, 0xd6, 0x1c, 0xb7, 0x8b, 0x3a, |
631 | 0x3c, 0x74, 0xff, 0xa3, 0x22, 0x56, 0x53, 0xae, 0x1d, 0x43, 0x8a, 0x1e, | 631 | 0xcc, 0x9b, 0xd1, 0x7b, 0xc8, 0xe8, 0x81, 0x6e, 0xc2, 0x9c, 0xdd, 0xad, |
632 | 0xa0, 0x59, 0xc4, 0x41, 0xb3, 0x01, 0x07, 0xcd, 0x0c, 0x75, 0xbc, 0x4d, | 632 | 0xd6, 0x8b, 0x3a, 0xf8, 0xfb, 0x90, 0xfa, 0x2e, 0xe7, 0x5a, 0x7e, 0xd7, |
633 | 0x9c, 0x9f, 0xaf, 0x3c, 0xb5, 0x5d, 0xe6, 0x8b, 0x63, 0x2f, 0xf1, 0x92, | 633 | 0xbc, 0x8c, 0xbf, 0x0f, 0x5b, 0xc8, 0xfe, 0x5d, 0x35, 0x7f, 0xd5, 0xeb, |
634 | 0x3a, 0x5e, 0x6f, 0xbc, 0x56, 0x98, 0x82, 0xc2, 0xdf, 0xe4, 0x18, 0xeb, | 634 | 0x66, 0xfd, 0x46, 0x90, 0xce, 0x7b, 0xae, 0x9b, 0x6d, 0x54, 0xcb, 0xdb, |
635 | 0xcb, 0x44, 0xf6, 0x81, 0x70, 0x2b, 0x0d, 0x5e, 0x73, 0x5c, 0x47, 0x1f, | 635 | 0xb1, 0xc5, 0x5a, 0xde, 0x9f, 0xef, 0x96, 0xf5, 0x71, 0xee, 0xbe, 0xfc, |
636 | 0xc7, 0x1d, 0x7d, 0x1c, 0x75, 0xf4, 0x71, 0x6f, 0x9b, 0x3e, 0xb2, 0x8e, | 636 | 0x9c, 0xfb, 0xe2, 0x15, 0x0f, 0x71, 0xeb, 0x5e, 0xad, 0x73, 0x4b, 0xf4, |
637 | 0xe7, 0xf7, 0x9c, 0xad, 0x7e, 0xdc, 0xbe, 0xa2, 0x9f, 0xc8, 0x23, 0x06, | 637 | 0x6f, 0xd1, 0xcf, 0xd2, 0x7a, 0x28, 0xac, 0xf2, 0x99, 0x90, 0xbf, 0x74, |
638 | 0x3d, 0xb7, 0x52, 0x2e, 0x1c, 0x51, 0x6b, 0xc7, 0x2f, 0x55, 0x2e, 0xba, | 638 | 0x8f, 0xe2, 0x55, 0xad, 0xe7, 0xc9, 0x43, 0xcf, 0x3f, 0x20, 0xf2, 0x8e, |
639 | 0x57, 0x9f, 0xff, 0x8e, 0xda, 0xcf, 0x9b, 0x93, 0x57, 0x9d, 0xf9, 0xc7, | 639 | 0xa5, 0x9d, 0xd8, 0xaf, 0xe8, 0x01, 0x9a, 0x85, 0x5d, 0x34, 0xeb, 0x76, |
640 | 0xdf, 0xa5, 0xa4, 0xcc, 0x23, 0x57, 0xb2, 0x7d, 0xb9, 0x8d, 0x1f, 0x1a, | 640 | 0xd1, 0xcc, 0x50, 0xdf, 0x77, 0x89, 0xe3, 0xf3, 0x4b, 0xaf, 0x76, 0xc8, |
641 | 0xf1, 0x1c, 0xc0, 0x20, 0xc2, 0x2e, 0xdc, 0x2d, 0x6b, 0xc1, 0x05, 0x68, | 641 | 0x7a, 0x78, 0xac, 0x29, 0x7e, 0x5f, 0x7d, 0xdf, 0x6c, 0xbc, 0x0f, 0x84, |
642 | 0xa9, 0x9e, 0xcb, 0xeb, 0x57, 0xb9, 0x3b, 0xc7, 0xc3, 0xf7, 0x37, 0x8f, | 642 | 0x28, 0x28, 0xe2, 0x4d, 0xae, 0xb1, 0xbe, 0x44, 0x64, 0xb3, 0x37, 0x5c, |
643 | 0x17, 0xd7, 0xff, 0x4c, 0xf8, 0xf2, 0xe4, 0xfe, 0xd1, 0x8a, 0xca, 0x47, | 643 | 0x47, 0x83, 0x6f, 0xb9, 0xce, 0xa3, 0x8f, 0x83, 0xae, 0x3e, 0xf6, 0xbb, |
644 | 0xb6, 0x4c, 0xc4, 0x06, 0x2c, 0x2e, 0xc3, 0xff, 0xda, 0x2e, 0x77, 0x57, | 644 | 0xfa, 0x78, 0xb0, 0x41, 0x1f, 0x59, 0x9f, 0xf3, 0x7b, 0xce, 0x16, 0x3f, |
645 | 0xea, 0xa2, 0x4c, 0xbd, 0x3e, 0x4a, 0x59, 0xe4, 0x35, 0x48, 0xff, 0x98, | 645 | 0x69, 0x5f, 0xd1, 0x4f, 0xd4, 0x49, 0x83, 0x9e, 0x3b, 0x29, 0x1d, 0x0a, |
646 | 0xcc, 0xbf, 0x5d, 0x5c, 0xbe, 0x25, 0x72, 0x5e, 0x13, 0x2a, 0x8f, 0x37, | 646 | 0x2b, 0x3b, 0x11, 0x55, 0xf5, 0x03, 0x5e, 0x7d, 0xfe, 0x31, 0x35, 0x9e, |
647 | 0x43, 0x3d, 0x02, 0xe7, 0x7e, 0xfc, 0xfc, 0xdb, 0x17, 0xc2, 0x9b, 0xcf, | 647 | 0x37, 0x37, 0xaf, 0xba, 0xeb, 0xab, 0x9f, 0xa3, 0x09, 0x59, 0x27, 0xaf, |
648 | 0xbf, 0x75, 0xde, 0xb3, 0xb9, 0xfc, 0xdb, 0x10, 0x8f, 0xdd, 0x58, 0x90, | 648 | 0x64, 0xfb, 0x62, 0x83, 0x78, 0x34, 0x72, 0x3b, 0x80, 0x37, 0x84, 0x6f, |
649 | 0xf9, 0xb7, 0xcd, 0x7b, 0x32, 0x32, 0xff, 0x36, 0xe3, 0xc0, 0x0f, 0x12, | 649 | 0xb8, 0x4f, 0xee, 0x6f, 0x17, 0xa0, 0xe5, 0x72, 0xad, 0xb2, 0x5f, 0xd5, |
650 | 0xaf, 0xbf, 0xe5, 0x88, 0xdf, 0x96, 0xb9, 0xb5, 0x8b, 0x75, 0xcc, 0x2a, | 650 | 0xf0, 0x3d, 0x1b, 0xba, 0xb3, 0x75, 0xca, 0x38, 0xff, 0x3d, 0x11, 0xcb, |
651 | 0x73, 0x6b, 0x65, 0xbc, 0xb7, 0xb3, 0x0e, 0x8c, 0xdc, 0xfb, 0x91, 0xef, | 651 | 0x93, 0xeb, 0x48, 0xab, 0xaa, 0xde, 0x3a, 0x62, 0x21, 0x47, 0x60, 0x71, |
652 | 0xd9, 0xe6, 0xda, 0xfb, 0x91, 0x39, 0xb5, 0xa6, 0xd1, 0xce, 0x86, 0xc3, | 652 | 0x05, 0x71, 0xd8, 0x46, 0xb5, 0xc9, 0x52, 0x17, 0xa5, 0xca, 0x7b, 0xc2, |
653 | 0x1a, 0x81, 0x7a, 0x08, 0x71, 0xe6, 0xdd, 0xad, 0x6d, 0xea, 0x21, 0xc4, | 653 | 0x14, 0x44, 0x1d, 0x86, 0x8c, 0x8f, 0xc9, 0x1a, 0xe2, 0xc5, 0x95, 0x1b, |
654 | 0xdb, 0xd4, 0x43, 0x70, 0xea, 0x7e, 0x27, 0xc6, 0x02, 0x26, 0xc6, 0xda, | 654 | 0xa2, 0x6e, 0x37, 0xae, 0x6a, 0x91, 0x53, 0xd4, 0x26, 0x70, 0xed, 0x27, |
655 | 0x08, 0x2c, 0x8c, 0x7a, 0x06, 0x51, 0x3a, 0x5f, 0xc7, 0x9e, 0x0f, 0x52, | 655 | 0xaf, 0x21, 0xfe, 0x71, 0x68, 0xfb, 0x35, 0xc4, 0xee, 0x7b, 0xb6, 0x57, |
656 | 0x5a, 0x61, 0xcf, 0xf3, 0x15, 0xad, 0x8f, 0x46, 0x5d, 0xfa, 0xc8, 0x0b, | 656 | 0x43, 0x6c, 0xf2, 0xd8, 0x8d, 0x05, 0x59, 0x43, 0x5c, 0xbd, 0x46, 0x23, |
657 | 0x8b, 0x5a, 0x2a, 0xce, 0x47, 0xcb, 0x6b, 0xd6, 0x21, 0xaf, 0x59, 0x0f, | 657 | 0x6b, 0x88, 0x53, 0x2e, 0xac, 0x20, 0xf1, 0xf9, 0x4d, 0x57, 0x7e, 0xb7, |
658 | 0x79, 0xc5, 0x3d, 0xd9, 0x36, 0xfd, 0xfe, 0xa5, 0xba, 0x07, 0xff, 0x4f, | 658 | 0xac, 0x0f, 0x5e, 0x2c, 0xe3, 0x53, 0x59, 0x1f, 0x2c, 0xf3, 0xc1, 0xdd, |
659 | 0x46, 0x50, 0xb3, 0x85, 0x68, 0xf7, 0x80, 0xc2, 0x7f, 0x0e, 0x79, 0x3d, | 659 | 0x7b, 0xdf, 0xc8, 0xb5, 0x20, 0xf9, 0x9e, 0x5d, 0x35, 0x6b, 0x41, 0xb2, |
660 | 0xcb, 0xf2, 0xaa, 0xaf, 0xa3, 0xbf, 0xed, 0x6c, 0x00, 0x8d, 0x19, 0x87, | 660 | 0x2e, 0xd8, 0x32, 0xbc, 0xf8, 0x4e, 0xdb, 0x25, 0xec, 0xf7, 0x10, 0x63, |
661 | 0x7c, 0x87, 0xaf, 0xbd, 0x21, 0xe2, 0xa4, 0x9a, 0xed, 0x45, 0x8d, 0x27, | 661 | 0xde, 0xdd, 0xd9, 0x60, 0xbf, 0x87, 0x58, 0x83, 0xfd, 0x1e, 0xdc, 0xba, |
662 | 0xf6, 0x09, 0x59, 0xba, 0xe3, 0x47, 0xdc, 0x8a, 0xbe, 0x16, 0x52, 0x7e, | 662 | 0xdf, 0x8d, 0xa7, 0x80, 0x7f, 0x61, 0x17, 0x81, 0x7b, 0xb1, 0x5f, 0x43, |
663 | 0x32, 0x4d, 0x8b, 0xce, 0x26, 0xcc, 0xd1, 0xc0, 0x1b, 0x22, 0xc6, 0xd7, | 663 | 0x94, 0xce, 0x97, 0x71, 0xe6, 0x3d, 0x94, 0x54, 0x38, 0xf3, 0xfc, 0x92, |
664 | 0xd1, 0xb7, 0x7f, 0xe5, 0xbe, 0xe9, 0xeb, 0x7a, 0xcd, 0x7c, 0xa7, 0xc9, | 664 | 0xd6, 0x47, 0xfd, 0x35, 0xfa, 0xc8, 0x0b, 0x77, 0x46, 0x54, 0xce, 0x8f, |
665 | 0x9f, 0x71, 0xa3, 0xa9, 0xee, 0x1f, 0x7c, 0x47, 0xdb, 0xd2, 0x86, 0x9d, | 665 | 0x96, 0x57, 0xc7, 0x25, 0xaf, 0x8e, 0x87, 0xbc, 0xe2, 0x1e, 0xa7, 0x41, |
666 | 0x12, 0x31, 0xa6, 0x7d, 0x36, 0xfc, 0x64, 0x09, 0x96, 0xfd, 0xbe, 0x34, | 666 | 0xbf, 0x41, 0x13, 0xdc, 0x83, 0xff, 0x97, 0xc2, 0xd8, 0xa7, 0x86, 0xe8, |
667 | 0xe2, 0x99, 0xfb, 0xae, 0x98, 0x74, 0xa2, 0x70, 0x7e, 0x8f, 0xe4, 0x95, | 667 | 0x0b, 0xdd, 0x0a, 0xeb, 0xb9, 0xe4, 0xf5, 0x2c, 0xcb, 0xab, 0x3e, 0x8f, |
668 | 0x0b, 0xa2, 0xa6, 0x25, 0x6a, 0x20, 0x26, 0x79, 0x7d, 0x4e, 0x30, 0xe8, | 668 | 0xfe, 0x36, 0xc2, 0xfb, 0x1a, 0x1f, 0xee, 0xf7, 0x1d, 0xbb, 0xf2, 0x0b, |
669 | 0x9c, 0xab, 0x76, 0xd1, 0x22, 0xa3, 0x7b, 0xbf, 0x5d, 0x16, 0xbe, 0x3e, | 669 | 0x91, 0x17, 0x50, 0xed, 0x27, 0x6a, 0x0c, 0x71, 0x48, 0xc8, 0xd2, 0xba, |
670 | 0xd6, 0x49, 0x45, 0xd4, 0x36, 0x35, 0x16, 0x3a, 0xf9, 0xb9, 0x83, 0xb4, | 670 | 0x1f, 0xf9, 0x2b, 0xfa, 0x1c, 0x6a, 0xa7, 0x20, 0x7f, 0x9a, 0x16, 0xcd, |
671 | 0x54, 0x1a, 0x17, 0x35, 0xa1, 0x64, 0x7d, 0x11, 0xb4, 0xf5, 0x51, 0xbf, | 671 | 0x35, 0x38, 0xa3, 0x5d, 0xe1, 0x08, 0x91, 0xff, 0xeb, 0xea, 0xdb, 0x7f, |
672 | 0xfd, 0x0d, 0xa6, 0xdd, 0xd7, 0x44, 0x8c, 0xe5, 0x62, 0xf1, 0x82, 0xfc, | 672 | 0x72, 0xdf, 0xf4, 0x79, 0x6d, 0x33, 0xdf, 0xae, 0x8a, 0x69, 0x54, 0xe7, |
673 | 0x2c, 0x3f, 0xa5, 0xde, 0xc1, 0xef, 0xab, 0xfe, 0x98, 0xe2, 0xfd, 0xa6, | 673 | 0x4d, 0x22, 0x7e, 0xb4, 0x2b, 0x69, 0xd8, 0x09, 0x91, 0x7f, 0xda, 0x69, |
674 | 0xc3, 0x96, 0x73, 0xfe, 0x79, 0xe3, 0x95, 0x63, 0x9b, 0xc2, 0x2b, 0xd9, | 674 | 0x23, 0x56, 0x16, 0x67, 0xd9, 0xef, 0x4c, 0x22, 0xd7, 0xb9, 0xf3, 0x92, |
675 | 0x74, 0x03, 0xaf, 0x38, 0x9f, 0xad, 0xb1, 0xcb, 0xe4, 0xa0, 0xac, 0xf7, | 675 | 0x45, 0xa7, 0xb2, 0x57, 0x0f, 0x48, 0x5e, 0x79, 0x5a, 0xec, 0xd3, 0x89, |
676 | 0x00, 0x1a, 0x6c, 0x05, 0x16, 0x4b, 0x83, 0x96, 0x46, 0xcc, 0x8a, 0x24, | 676 | 0x7d, 0x1d, 0x27, 0xd8, 0x3e, 0xc7, 0x19, 0x60, 0xce, 0x15, 0x5b, 0x68, |
677 | 0xfc, 0x33, 0x94, 0xaf, 0x5e, 0xa7, 0x4c, 0x11, 0x98, 0x99, 0x3f, 0xcb, | 677 | 0x91, 0x91, 0xbc, 0xdf, 0x2e, 0x88, 0x58, 0x1f, 0xeb, 0xa4, 0x1c, 0xf6, |
678 | 0xe7, 0x76, 0x4a, 0x1f, 0x8d, 0xbe, 0x07, 0x7a, 0x65, 0x07, 0xb7, 0xff, | 678 | 0x6b, 0x35, 0x16, 0x9a, 0xf9, 0xb9, 0x3d, 0xb4, 0x9c, 0x07, 0xcf, 0x35, |
679 | 0xeb, 0x41, 0x19, 0x97, 0xed, 0xbc, 0xde, 0xcb, 0xd7, 0xbf, 0x10, 0x69, | 679 | 0xa9, 0xfd, 0x53, 0xd0, 0xd6, 0x47, 0x5d, 0xf6, 0xdf, 0x32, 0xed, 0x1e, |
680 | 0xbe, 0xbe, 0x85, 0xaf, 0xf7, 0xa7, 0x31, 0x87, 0xc6, 0x15, 0xf8, 0x25, | 680 | 0x11, 0x79, 0x97, 0x8b, 0xb9, 0xa7, 0xe5, 0x67, 0xe1, 0x55, 0xf5, 0x0e, |
681 | 0x27, 0x29, 0xc7, 0xf3, 0x93, 0xaf, 0xf2, 0xda, 0x7a, 0x95, 0xf5, 0x55, | 681 | 0x7e, 0x5f, 0xf1, 0x75, 0x8a, 0x75, 0xb9, 0xf3, 0x00, 0xdd, 0x7f, 0xde, |
682 | 0x45, 0xb7, 0x1b, 0x40, 0xce, 0x8e, 0x98, 0x13, 0x83, 0xdb, 0x5c, 0x2c, | 682 | 0x78, 0xe5, 0xe4, 0xb6, 0xf0, 0x8a, 0x93, 0xac, 0xe0, 0x15, 0xf7, 0xb3, |
683 | 0x4c, 0x71, 0xbb, 0x21, 0xf2, 0x5f, 0x35, 0x29, 0x5f, 0xd1, 0xbc, 0xaa, | 683 | 0x35, 0x76, 0xf9, 0xe3, 0x1e, 0xb9, 0x9f, 0x05, 0x68, 0xb0, 0x13, 0x58, |
684 | 0xe3, 0xed, 0xdf, 0x18, 0x90, 0x31, 0x55, 0xef, 0xec, 0x94, 0xf4, 0x9b, | 684 | 0x2c, 0x09, 0x5a, 0x1a, 0xe3, 0x91, 0x70, 0xdc, 0x3f, 0x46, 0x99, 0xe2, |
685 | 0x14, 0x3e, 0x4f, 0xc4, 0x73, 0x3c, 0x23, 0xf8, 0xd0, 0x9a, 0x31, 0xeb, | 685 | 0x35, 0x4a, 0xe5, 0x60, 0xe7, 0xf9, 0xb3, 0xf0, 0x37, 0x7b, 0x64, 0x9c, |
686 | 0xef, 0xdf, 0x06, 0xbe, 0x42, 0xdd, 0x54, 0x1e, 0x03, 0xeb, 0xc5, 0x98, | 686 | 0x46, 0xdf, 0x03, 0xbd, 0xb2, 0x9b, 0xdb, 0x37, 0xef, 0x91, 0x39, 0xdb, |
687 | 0x1d, 0xca, 0xd5, 0x63, 0xd5, 0x9e, 0xdb, 0x2d, 0xef, 0xff, 0xe9, 0x80, | 687 | 0xee, 0xf3, 0xed, 0x7c, 0xfe, 0xc9, 0x70, 0xf5, 0xf9, 0x1d, 0x7c, 0xbe, |
688 | 0xac, 0x55, 0x7a, 0x5b, 0x9d, 0xeb, 0x35, 0x07, 0xf1, 0xcb, 0x3e, 0x41, | 688 | 0x2b, 0x89, 0x39, 0x34, 0x2e, 0x21, 0x36, 0x39, 0x4c, 0x69, 0x9e, 0x9f, |
689 | 0x1b, 0xff, 0x02, 0xf4, 0xa5, 0xc1, 0xc7, 0x3c, 0x9e, 0x34, 0xfa, 0xf8, | 689 | 0x4c, 0x91, 0x6d, 0xeb, 0x65, 0xd6, 0x57, 0x4b, 0xba, 0x5d, 0x37, 0xb7, |
690 | 0xb3, 0x01, 0x5d, 0x9f, 0x50, 0x8e, 0xeb, 0x28, 0xf7, 0x37, 0xc5, 0xe3, | 690 | 0x0b, 0x89, 0x39, 0x31, 0xb8, 0xcd, 0x6c, 0x76, 0x84, 0xdb, 0xed, 0x27, |
691 | 0xd2, 0xd7, 0xe3, 0x7c, 0xee, 0x35, 0xbf, 0x78, 0x56, 0x30, 0x2d, 0xeb, | 691 | 0xff, 0x65, 0x8b, 0x32, 0x4b, 0x9a, 0x57, 0x75, 0x2e, 0xfe, 0x2f, 0xba, |
692 | 0x8b, 0x05, 0xd3, 0x99, 0x49, 0x39, 0xcf, 0x0d, 0x9f, 0x6e, 0xa4, 0xee, | 692 | 0x65, 0x6e, 0xd5, 0xae, 0xb0, 0xa4, 0xdf, 0xb0, 0x88, 0x7b, 0x22, 0xb7, |
693 | 0xd3, 0x9d, 0x2b, 0xf4, 0x0f, 0xc2, 0xbf, 0x61, 0x5c, 0xe1, 0xf9, 0x0e, | 693 | 0xe3, 0x19, 0xc1, 0x87, 0x91, 0x31, 0xab, 0xfc, 0x7e, 0xec, 0x31, 0x26, |
694 | 0x3f, 0xc3, 0x6d, 0x91, 0xab, 0x90, 0xe3, 0xcf, 0x1e, 0x15, 0xd7, 0xd3, | 694 | 0xf6, 0x7c, 0xe5, 0x31, 0xb0, 0x5e, 0x1c, 0xb7, 0xcd, 0x74, 0x39, 0x6f, |
695 | 0xca, 0x2b, 0x32, 0x4e, 0x42, 0xaf, 0x5b, 0xb8, 0x77, 0x80, 0x9f, 0x21, | 695 | 0x6d, 0x6d, 0x9f, 0xbc, 0x7f, 0x67, 0x8f, 0xdc, 0x7f, 0xb5, 0x53, 0xed, |
696 | 0xd7, 0xae, 0xf6, 0xef, 0xa1, 0x96, 0x38, 0x98, 0x56, 0x1e, 0x5b, 0xcb, | 696 | 0x15, 0xa8, 0x6d, 0xce, 0x17, 0x90, 0xa7, 0x2d, 0x68, 0xe3, 0x5f, 0x80, |
697 | 0x0f, 0x2b, 0xf6, 0x13, 0x3d, 0xf8, 0x6c, 0xad, 0x7a, 0x06, 0xef, 0x08, | 697 | 0xbe, 0x34, 0xf8, 0x3b, 0x8f, 0x27, 0x89, 0x3e, 0xf6, 0xf6, 0xe8, 0x3d, |
698 | 0x3f, 0x5a, 0xb2, 0x45, 0x5e, 0x21, 0xc7, 0x01, 0xfa, 0xce, 0x7c, 0x96, | 698 | 0x17, 0xe5, 0xb8, 0x4e, 0x70, 0x7f, 0x13, 0x3c, 0x2e, 0x7d, 0x3e, 0xc6, |
699 | 0xb6, 0xf0, 0x5c, 0x7d, 0xc3, 0xf8, 0x35, 0xec, 0xb7, 0x93, 0x8c, 0x79, | 699 | 0xc7, 0x5e, 0xf3, 0x8b, 0x67, 0x05, 0xf9, 0x39, 0x2c, 0x03, 0x53, 0xc1, |
700 | 0x62, 0x1a, 0x17, 0xec, 0xc9, 0xb3, 0x06, 0xd3, 0xb9, 0x90, 0xad, 0x05, | 700 | 0x64, 0x6a, 0x58, 0xce, 0x73, 0x25, 0xae, 0x1b, 0x2e, 0xc7, 0x75, 0xe7, |
701 | 0xec, 0x1e, 0xea, 0x64, 0x59, 0xfd, 0x22, 0x8d, 0xb1, 0xfd, 0x07, 0x99, | 701 | 0xb2, 0xc7, 0x7b, 0x10, 0xcf, 0x30, 0x2e, 0xf1, 0x7c, 0x87, 0x9e, 0xe1, |
702 | 0xb5, 0x23, 0x29, 0x82, 0xbc, 0x59, 0xa1, 0xc3, 0xcc, 0x13, 0xc9, 0x2a, | 702 | 0xb6, 0xa8, 0x63, 0x48, 0xf3, 0x67, 0x9b, 0xca, 0xef, 0xa9, 0xe7, 0x15, |
703 | 0xf8, 0xd9, 0xa0, 0x27, 0x4a, 0x44, 0x8f, 0x97, 0xc6, 0x42, 0xdf, 0x27, | 703 | 0x99, 0x2f, 0xa1, 0xed, 0x16, 0xee, 0xbd, 0x97, 0x9f, 0x21, 0x6d, 0x57, |
704 | 0xdb, 0x6c, 0x7c, 0x6f, 0x85, 0x12, 0xdc, 0x8f, 0x54, 0xf5, 0x77, 0xe8, | 704 | 0xe3, 0xf7, 0x50, 0x5d, 0x4e, 0x4c, 0x3d, 0x8f, 0x6d, 0x14, 0x8b, 0x15, |
705 | 0x43, 0x51, 0xe7, 0x04, 0x74, 0xd4, 0xf3, 0xfe, 0xdb, 0x74, 0x3a, 0x8d, | 705 | 0xeb, 0x8a, 0x1e, 0x7c, 0xb6, 0x51, 0xac, 0x44, 0xe4, 0x39, 0xfb, 0x26, |
706 | 0x7e, 0x6f, 0x5c, 0x3e, 0x4f, 0x6c, 0x4a, 0x3e, 0x83, 0x1e, 0xf2, 0xf9, | 706 | 0xea, 0xe4, 0x15, 0x72, 0x1c, 0xa0, 0x27, 0xe6, 0x1d, 0xda, 0xc1, 0x73, |
707 | 0xea, 0xa0, 0xe4, 0x9b, 0x1a, 0xf3, 0x68, 0x90, 0x66, 0x8b, 0x88, 0x01, | 707 | 0xf5, 0x27, 0x06, 0xea, 0x86, 0x4b, 0x24, 0x73, 0x9f, 0x98, 0xc6, 0x59, |
708 | 0x7b, 0x18, 0x75, 0xa7, 0x8a, 0x19, 0xd6, 0x4b, 0x99, 0x86, 0x5e, 0xba, | 708 | 0x7b, 0xf8, 0xac, 0xc1, 0x74, 0xce, 0x3a, 0xa5, 0x80, 0xdd, 0x46, 0xcd, |
709 | 0x94, 0xf0, 0xc7, 0x21, 0xe3, 0xa8, 0xcb, 0xa6, 0xe2, 0x7e, 0x30, 0x8e, | 709 | 0x2c, 0xab, 0xbf, 0x4f, 0x03, 0xec, 0xeb, 0x41, 0x66, 0xed, 0x70, 0x82, |
710 | 0xdd, 0x34, 0xb6, 0xb0, 0x95, 0xef, 0xa5, 0x95, 0xc4, 0x74, 0x5c, 0xe5, | 710 | 0x20, 0x6f, 0x11, 0xf3, 0x18, 0xf3, 0xc4, 0x44, 0x11, 0xfc, 0x6c, 0xd0, |
711 | 0xfa, 0x5b, 0x66, 0x92, 0xf5, 0xe3, 0x1c, 0xcb, 0x72, 0xae, 0xf8, 0x00, | 711 | 0x63, 0x79, 0xa2, 0x47, 0xf3, 0x03, 0xe6, 0x37, 0xc9, 0xb6, 0x2a, 0xd7, |
712 | 0x2d, 0x86, 0x87, 0x69, 0x74, 0x41, 0xd7, 0x37, 0xc1, 0x58, 0xff, 0x6d, | 712 | 0x23, 0x66, 0x9c, 0xfb, 0x91, 0x28, 0xfe, 0x25, 0x7d, 0x24, 0xf6, 0x71, |
713 | 0x48, 0xea, 0x24, 0x3d, 0xee, 0x5f, 0x11, 0xbe, 0x0b, 0xf3, 0xfa, 0xa7, | 713 | 0x01, 0x1d, 0xf5, 0xbc, 0xff, 0x39, 0x4d, 0x27, 0xd1, 0xef, 0xad, 0xcb, |
714 | 0x35, 0xee, 0xad, 0xeb, 0xe8, 0xa5, 0xbf, 0x52, 0x32, 0x5b, 0xbb, 0x91, | 714 | 0xe7, 0xa9, 0x6d, 0xc9, 0x67, 0xd0, 0x43, 0x3e, 0x3f, 0x54, 0x7c, 0x53, |
715 | 0x88, 0x52, 0x36, 0x31, 0xfd, 0x97, 0x82, 0xff, 0x47, 0xaf, 0xc3, 0x0f, | 715 | 0x62, 0x1e, 0x0d, 0xd2, 0x4c, 0x0e, 0xb9, 0x60, 0x9f, 0x47, 0x0d, 0x66, |
716 | 0x07, 0x1d, 0x6d, 0x52, 0xba, 0xe0, 0xa6, 0xc5, 0x30, 0x8f, 0x1b, 0xdf, | 716 | 0x2e, 0xc5, 0x7a, 0x29, 0x55, 0xd1, 0x4b, 0x17, 0xe2, 0xfe, 0x18, 0x64, |
717 | 0xd7, 0xfe, 0x79, 0x36, 0xfa, 0x94, 0x58, 0xfb, 0xc7, 0xae, 0x73, 0x3b, | 717 | 0x1c, 0x7b, 0xd1, 0xa9, 0x1c, 0x20, 0x8c, 0x63, 0x1f, 0x0d, 0x2c, 0xec, |
718 | 0xb1, 0x36, 0x69, 0xbd, 0xe1, 0xc5, 0x87, 0xba, 0x8e, 0xa5, 0xe6, 0x45, | 718 | 0xe4, 0x7b, 0x69, 0x35, 0x3e, 0x1a, 0x53, 0x7b, 0x15, 0x44, 0xac, 0x09, |
719 | 0x19, 0xeb, 0xc9, 0xf8, 0x2d, 0x94, 0xf6, 0xbb, 0x79, 0xf2, 0x23, 0x3a, | 719 | 0xd6, 0x8f, 0x73, 0x2c, 0xcb, 0xe9, 0xdc, 0xdd, 0xb4, 0x18, 0xea, 0xa5, |
720 | 0x36, 0x6f, 0xd2, 0xf1, 0x82, 0xf5, 0x7c, 0x96, 0x66, 0x58, 0xae, 0x9d, | 720 | 0xfe, 0x05, 0xbd, 0x7f, 0x0b, 0xc6, 0x3a, 0xd4, 0x2b, 0x75, 0x92, 0x1e, |
721 | 0xeb, 0x05, 0xb7, 0x27, 0xf0, 0x59, 0x8c, 0x65, 0x9f, 0xed, 0xe6, 0xa2, | 721 | 0xf7, 0x6f, 0x89, 0x38, 0x85, 0x75, 0xed, 0x57, 0x35, 0xee, 0x9d, 0x9b, |
722 | 0x29, 0xe3, 0xee, 0x44, 0xed, 0xb9, 0x2e, 0xa1, 0x47, 0x43, 0xf6, 0x3f, | 722 | 0xe8, 0xa5, 0x92, 0x92, 0xd9, 0xd2, 0x1b, 0xf1, 0x28, 0x39, 0xf1, 0xd1, |
723 | 0x0d, 0xea, 0xf5, 0x20, 0x53, 0x44, 0x1e, 0x21, 0x7f, 0x96, 0xb9, 0x7d, | 723 | 0xff, 0x15, 0xfc, 0xdf, 0x7f, 0x0d, 0xb5, 0x38, 0xd0, 0xd1, 0x16, 0x25, |
724 | 0x61, 0x90, 0x32, 0x25, 0x3c, 0x07, 0xeb, 0x1d, 0xfa, 0xce, 0xe7, 0x4b, | 724 | 0xb3, 0xb5, 0xb4, 0xe8, 0xe5, 0x71, 0xe3, 0x7a, 0xe9, 0xa7, 0x33, 0xd1, |
725 | 0x72, 0x5e, 0x47, 0xf9, 0xd9, 0xc8, 0xbb, 0x3f, 0x5e, 0x9d, 0x12, 0xb1, | 725 | 0x57, 0x85, 0xed, 0x1f, 0xb8, 0xc6, 0xed, 0x84, 0x6d, 0xd2, 0x7a, 0xc3, |
726 | 0x77, 0xd0, 0xcd, 0x72, 0x3e, 0x63, 0x74, 0xd1, 0x53, 0xaf, 0x28, 0x4c, | 726 | 0x8b, 0x0f, 0xf5, 0xde, 0x9c, 0x9a, 0x17, 0x65, 0xce, 0x27, 0xe3, 0x37, |
727 | 0xe9, 0x90, 0xef, 0x8c, 0x90, 0xef, 0x98, 0x98, 0x8f, 0x4c, 0xc9, 0x60, | 727 | 0x33, 0xe9, 0xaf, 0xe5, 0xc9, 0x8f, 0xe9, 0xe4, 0xbc, 0x45, 0x93, 0x59, |
728 | 0xbc, 0xa6, 0x7d, 0x0f, 0xfd, 0x7c, 0x1e, 0x50, 0x3a, 0x04, 0xdf, 0x0d, | 728 | 0xec, 0x81, 0x38, 0xc6, 0x72, 0xed, 0xb6, 0x17, 0xdc, 0x9e, 0xc0, 0x67, |
729 | 0xec, 0x14, 0x71, 0x89, 0x36, 0xae, 0xe3, 0x33, 0x46, 0xcf, 0x30, 0xee, | 729 | 0xe3, 0x2c, 0xfb, 0xec, 0xb7, 0xe7, 0x2c, 0x99, 0x7f, 0x27, 0xf6, 0xdb, |
730 | 0x7c, 0xb6, 0xd0, 0x45, 0xb7, 0x8a, 0x5d, 0xf4, 0x66, 0x71, 0x98, 0x6e, | 730 | 0x6b, 0x11, 0x7a, 0xd4, 0xb4, 0xfb, 0xf7, 0x68, 0x7b, 0x90, 0xca, 0xa1, |
731 | 0xce, 0x6f, 0xa7, 0x8b, 0x8c, 0x99, 0x2f, 0xda, 0x01, 0x33, 0xc7, 0xf6, | 731 | 0xce, 0x90, 0x3f, 0x0b, 0xdc, 0x3e, 0xdb, 0x43, 0xa9, 0x3c, 0x9e, 0x03, |
732 | 0xc5, 0x0b, 0x51, 0x11, 0x33, 0xc4, 0x72, 0x87, 0xf6, 0xc0, 0x7f, 0x89, | 732 | 0x7b, 0x87, 0xbe, 0xf3, 0xf1, 0xb2, 0x9c, 0xd7, 0x7e, 0x7e, 0x36, 0xf6, |
733 | 0x5d, 0xcc, 0x73, 0x8c, 0xbd, 0xbb, 0xe9, 0x03, 0x7e, 0x67, 0xae, 0xa0, | 733 | 0x0e, 0x98, 0x2c, 0x8e, 0x88, 0x1c, 0x3c, 0xe8, 0x66, 0x39, 0x9f, 0xe3, |
734 | 0x63, 0x1d, 0xe0, 0x93, 0x1f, 0xaf, 0xe3, 0xd7, 0xf5, 0x79, 0x24, 0xb4, | 734 | 0x34, 0xeb, 0xa9, 0x57, 0x14, 0xa6, 0x74, 0xc9, 0x77, 0x4a, 0xc8, 0xf7, |
735 | 0x0e, 0x8f, 0xc4, 0x84, 0xae, 0xcf, 0xcf, 0xf3, 0xf7, 0xf3, 0xf0, 0x9f, | 735 | 0xb8, 0x98, 0x8f, 0x54, 0xde, 0x60, 0xbc, 0xa6, 0xe3, 0x0c, 0x5d, 0x7c, |
736 | 0x33, 0xbd, 0x59, 0x3f, 0x7f, 0x3d, 0x80, 0xf6, 0xb8, 0x66, 0xcb, 0x58, | 736 | 0x1c, 0x50, 0x3a, 0x04, 0xd7, 0xee, 0xdd, 0x23, 0xf2, 0x13, 0x6d, 0x9c, |
737 | 0x49, 0x31, 0xb6, 0x08, 0x9f, 0x83, 0xb6, 0x11, 0x45, 0x87, 0x6e, 0x1e, | 737 | 0xc7, 0xe7, 0x38, 0x3d, 0xc3, 0xb8, 0xf3, 0xd9, 0x6c, 0x0b, 0xdd, 0xc8, |
738 | 0x9f, 0x4f, 0xb4, 0xcf, 0x2c, 0x75, 0xd3, 0x99, 0x12, 0x63, 0x90, 0x92, | 738 | 0xb5, 0xd0, 0x9b, 0xb9, 0x5e, 0xba, 0x3e, 0xdf, 0x41, 0xb3, 0x8c, 0x99, |
739 | 0x9f, 0x6d, 0x18, 0xb4, 0x0d, 0xec, 0xd5, 0xf5, 0x5f, 0x2f, 0x72, 0xdf, | 739 | 0x67, 0xed, 0x80, 0x95, 0x66, 0xff, 0xe2, 0x6a, 0x54, 0xe4, 0x10, 0xb1, |
740 | 0x73, 0x25, 0x89, 0x41, 0x72, 0x4b, 0xbd, 0x94, 0x2f, 0xf5, 0xa8, 0xf3, | 740 | 0xdc, 0xa1, 0x3d, 0xf0, 0x5f, 0x7c, 0x2f, 0xf3, 0x1c, 0x63, 0xef, 0x56, |
741 | 0x07, 0x44, 0x8c, 0xbb, 0xac, 0x63, 0x84, 0xef, 0xd6, 0xd2, 0x6f, 0x6f, | 741 | 0xfa, 0x80, 0xdf, 0x99, 0xce, 0xea, 0x9c, 0x07, 0xc4, 0xe3, 0x07, 0xcb, |
742 | 0x31, 0x4f, 0x61, 0x4d, 0x95, 0x76, 0x29, 0x74, 0xcd, 0x8d, 0x96, 0xba, | 742 | 0xf8, 0x75, 0x73, 0x1e, 0x31, 0x37, 0xe1, 0x91, 0x71, 0xa1, 0xeb, 0x33, |
743 | 0xc4, 0xe0, 0xb9, 0x19, 0xfa, 0x2e, 0xaf, 0xb7, 0xa3, 0x57, 0xe1, 0x3f, | 743 | 0xf3, 0x7c, 0x7d, 0x1e, 0x71, 0x73, 0x4b, 0xc4, 0x24, 0xbe, 0x14, 0x40, |
744 | 0xfe, 0x2a, 0xf8, 0xa6, 0x0c, 0x1e, 0x1b, 0xbd, 0x8a, 0xba, 0x48, 0x7e, | 744 | 0x7b, 0x9c, 0xb3, 0x65, 0xce, 0xa4, 0x18, 0x5b, 0x98, 0x8f, 0x41, 0xdb, |
745 | 0x91, 0xe7, 0x94, 0x0c, 0x4f, 0x8a, 0xdc, 0x10, 0x29, 0xa3, 0x27, 0x45, | 745 | 0xb0, 0xa2, 0x43, 0x2b, 0x8f, 0x4f, 0xc6, 0x30, 0x52, 0xcb, 0xad, 0x74, |
746 | 0x2d, 0xba, 0x1f, 0x0a, 0xdd, 0x64, 0x65, 0x4d, 0x03, 0x78, 0x04, 0x3e, | 746 | 0x26, 0xcf, 0x18, 0x24, 0xef, 0x67, 0x1f, 0x06, 0x6d, 0x7f, 0xe7, 0xa0, |
747 | 0x18, 0x19, 0x83, 0x75, 0xc2, 0xee, 0x7b, 0x6b, 0x20, 0x36, 0x41, 0xf1, | 747 | 0xde, 0xd3, 0x76, 0x96, 0xfb, 0x9e, 0xce, 0x4b, 0x0c, 0x92, 0x5e, 0x6e, |
748 | 0x41, 0xf0, 0xbd, 0x94, 0x59, 0x55, 0x5f, 0x40, 0xe8, 0xfb, 0xd0, 0x3e, | 748 | 0xa7, 0x4c, 0xbe, 0x4d, 0x1d, 0xdf, 0x2d, 0xf2, 0xdd, 0xe5, 0xde, 0x12, |
749 | 0x9d, 0x2f, 0xa9, 0xcf, 0xf5, 0x5a, 0xa1, 0xcf, 0x7b, 0x5c, 0xdf, 0x87, | 749 | 0xb8, 0xb6, 0x91, 0x7e, 0x43, 0xae, 0x11, 0x6c, 0xaa, 0xf4, 0x4b, 0xa1, |
750 | 0x5c, 0xdf, 0xd7, 0xe3, 0xe5, 0x78, 0xcd, 0xe3, 0x75, 0x9e, 0x64, 0x8d, | 750 | 0x6b, 0xbc, 0xf3, 0x8c, 0xc6, 0xe8, 0x39, 0xb6, 0xb7, 0xfd, 0x97, 0x11, |
751 | 0xa2, 0xcc, 0x82, 0xe4, 0xbf, 0xd0, 0xbe, 0xf1, 0xd0, 0x97, 0x15, 0x06, | 751 | 0x2b, 0xfe, 0x22, 0xf8, 0xa6, 0x00, 0x1e, 0xeb, 0xbf, 0x8c, 0x7d, 0x9f, |
752 | 0xcf, 0x2c, 0x8f, 0x45, 0xfa, 0x8c, 0x1e, 0x7f, 0x66, 0xea, 0xef, 0x6b, | 752 | 0xfc, 0x22, 0xf7, 0x68, 0x22, 0x34, 0x2c, 0x6a, 0x46, 0xa4, 0x8c, 0x4e, |
753 | 0xf1, 0x34, 0x70, 0xd1, 0xdc, 0x4e, 0xa9, 0xe3, 0xd0, 0xaf, 0x6c, 0x14, | 753 | 0x89, 0xba, 0xec, 0xef, 0x08, 0xdd, 0x14, 0x71, 0x2c, 0x03, 0x78, 0x24, |
754 | 0xd0, 0xed, 0xe4, 0x72, 0x0f, 0xad, 0x88, 0x9a, 0x5c, 0xc0, 0x18, 0xb8, | 754 | 0x12, 0x26, 0x92, 0x39, 0x59, 0xa7, 0xec, 0xce, 0x9b, 0xdd, 0xe3, 0x43, |
755 | 0x1f, 0xcf, 0xc9, 0x86, 0x3a, 0x08, 0x35, 0xd7, 0x21, 0xe3, 0x07, 0x22, | 755 | 0x14, 0xeb, 0x01, 0xdf, 0x4b, 0x99, 0x95, 0x7b, 0x22, 0x90, 0xd0, 0xf7, |
756 | 0xd7, 0x79, 0x3e, 0x53, 0xcb, 0xff, 0x55, 0x3b, 0x2d, 0x6a, 0xdc, 0xa0, | 756 | 0xe6, 0x21, 0x5d, 0x63, 0xa0, 0x8f, 0xb5, 0xad, 0xd0, 0xc7, 0x6d, 0x35, |
757 | 0x2d, 0x63, 0x48, 0x81, 0xf9, 0x19, 0xbf, 0x34, 0xd9, 0x55, 0x33, 0xe8, | 757 | 0xd7, 0xcd, 0x9a, 0xeb, 0x1a, 0x7f, 0x63, 0xad, 0x8c, 0xed, 0x3c, 0xc9, |
758 | 0x67, 0x16, 0x7b, 0x2b, 0x86, 0xfd, 0x22, 0xcb, 0x98, 0xdc, 0x2b, 0x4f, | 758 | 0x3d, 0x98, 0x52, 0x0b, 0x92, 0xff, 0xcc, 0x43, 0x83, 0xe6, 0xfd, 0x0a, |
759 | 0xb9, 0xf6, 0xca, 0x4f, 0x8a, 0xbd, 0x72, 0xec, 0x93, 0x83, 0xae, 0xa0, | 759 | 0x83, 0xa7, 0x56, 0x06, 0xc2, 0x9d, 0x46, 0x9b, 0x3f, 0x35, 0xf2, 0xaf, |
760 | 0xa5, 0x57, 0x4c, 0x0b, 0xe6, 0x31, 0xca, 0xf3, 0x68, 0xd2, 0xc5, 0x6b, | 760 | 0xa5, 0x58, 0x12, 0xb8, 0xe8, 0xf5, 0x3d, 0x52, 0xc7, 0xa1, 0x5f, 0x4e, |
761 | 0x42, 0xdf, 0x44, 0x93, 0x7e, 0x19, 0x5f, 0x9d, 0xa2, 0xac, 0x88, 0xbf, | 761 | 0x14, 0xd0, 0x6d, 0x6a, 0xa5, 0x8d, 0x56, 0xc5, 0x9e, 0x63, 0xc0, 0x18, |
762 | 0x96, 0x9f, 0x71, 0x23, 0x61, 0x5b, 0x93, 0xab, 0x8c, 0x29, 0x2a, 0xc5, | 762 | 0xb8, 0x1f, 0xcf, 0x71, 0xcc, 0x26, 0xc2, 0x3e, 0xf2, 0x90, 0xf1, 0xc3, |
763 | 0x2d, 0x74, 0xb3, 0xdc, 0xc1, 0x98, 0xef, 0x6f, 0x69, 0xb5, 0x4c, 0x8c, | 763 | 0xe1, 0x6b, 0x3c, 0x9f, 0x89, 0x95, 0xff, 0x29, 0x4d, 0x8b, 0x7d, 0x7a, |
764 | 0x0d, 0xb7, 0x53, 0x3e, 0xca, 0xbc, 0x36, 0x19, 0xe4, 0x79, 0x65, 0x7c, | 764 | 0xd0, 0x96, 0x31, 0xa4, 0xc0, 0xfc, 0x8c, 0x5f, 0xaa, 0xfc, 0xaa, 0x31, |
765 | 0x3b, 0xc9, 0xf2, 0xc7, 0x63, 0xa8, 0x94, 0x6a, 0xef, 0xe7, 0xa2, 0x71, | 765 | 0xf4, 0xd3, 0xc1, 0x9a, 0x8a, 0x61, 0xbf, 0xc0, 0x32, 0x26, 0xd7, 0xca, |
766 | 0x33, 0x31, 0xdd, 0xc3, 0xf6, 0x4b, 0x88, 0xff, 0x6d, 0xfe, 0xff, 0x6c, | 766 | 0x13, 0x35, 0x6b, 0xe5, 0x53, 0x62, 0xad, 0x1c, 0xeb, 0xe4, 0x1b, 0xe5, |
767 | 0x04, 0xb4, 0x59, 0x5c, 0xc2, 0xf7, 0x8c, 0x7d, 0x0a, 0xb5, 0xf7, 0x67, | 767 | 0x2d, 0xea, 0x3c, 0x16, 0x8b, 0x66, 0xaf, 0x08, 0x7d, 0x13, 0x9d, 0xf0, |
768 | 0xb9, 0xcd, 0xec, 0x34, 0xec, 0x20, 0xd8, 0x7b, 0x36, 0xff, 0xcb, 0x36, | 768 | 0xcb, 0x3c, 0xeb, 0x04, 0xbb, 0x37, 0x86, 0xa8, 0x6d, 0xc0, 0x67, 0xcc, |
769 | 0x15, 0xe6, 0xbb, 0xdc, 0xb5, 0x6c, 0xc4, 0x10, 0x3a, 0x1e, 0x75, 0x5d, | 769 | 0x88, 0xdb, 0x91, 0xe1, 0x35, 0xc6, 0x14, 0x4b, 0xb9, 0x1d, 0x74, 0xbd, |
770 | 0xc6, 0xd4, 0x67, 0xdc, 0x98, 0xe5, 0xbe, 0xdc, 0x24, 0x3c, 0xc3, 0xa4, | 770 | 0xd0, 0xc4, 0x98, 0xef, 0x9f, 0x69, 0xad, 0x40, 0x8c, 0x0d, 0x3b, 0x28, |
771 | 0x4c, 0x74, 0x1f, 0xcb, 0xc1, 0x76, 0xfe, 0x44, 0x3e, 0xd6, 0x56, 0xca, | 771 | 0x13, 0x65, 0x5e, 0x1b, 0x0e, 0xf2, 0xbc, 0x32, 0xbe, 0x1d, 0x66, 0xf9, |
772 | 0x4f, 0x8d, 0xab, 0x7c, 0xac, 0x48, 0x9b, 0x7c, 0x2c, 0xdc, 0xc7, 0x38, | 772 | 0xe3, 0x31, 0x2c, 0xe5, 0x4b, 0xef, 0xa7, 0xa3, 0x31, 0x2b, 0x3e, 0xda, |
773 | 0x60, 0xbe, 0x76, 0x6f, 0x36, 0xea, 0x7c, 0x2f, 0x19, 0x99, 0xe8, 0x36, | 773 | 0xc6, 0xfe, 0x8b, 0xc9, 0xff, 0x36, 0xff, 0x9f, 0x0b, 0x83, 0x36, 0x8b, |
774 | 0x81, 0x99, 0x2a, 0x4b, 0xfb, 0xb9, 0x0f, 0x71, 0x33, 0x33, 0xcd, 0x7d, | 774 | 0xcb, 0xb8, 0xce, 0xd8, 0x27, 0x5b, 0x7a, 0x7f, 0x86, 0xdb, 0xcc, 0x8c, |
775 | 0x2d, 0x39, 0xfb, 0x5f, 0xbb, 0x97, 0x8c, 0xa2, 0x9d, 0xdf, 0xd5, 0x2e, | 775 | 0xc2, 0x0f, 0x82, 0xbf, 0x67, 0xf3, 0xbf, 0x6c, 0xb3, 0xc4, 0x7c, 0x97, |
776 | 0x4e, 0xa2, 0xed, 0x12, 0xda, 0xd7, 0xfe, 0x27, 0x11, 0xd5, 0xe3, 0x74, | 776 | 0xbe, 0xe2, 0x84, 0x0d, 0xa1, 0xe3, 0xb1, 0x2f, 0xcd, 0x80, 0xfa, 0x8c, |
777 | 0xde, 0x8b, 0xf1, 0x40, 0xbe, 0xf8, 0xb3, 0x72, 0x9b, 0x6e, 0x16, 0x61, | 777 | 0x19, 0x33, 0xdc, 0x97, 0xeb, 0x84, 0x67, 0x58, 0x94, 0x8a, 0x1e, 0x62, |
778 | 0x8f, 0x1b, 0xcc, 0xf7, 0xe8, 0x91, 0x49, 0xd9, 0x0a, 0x63, 0xc0, 0x6b, | 778 | 0x39, 0xe8, 0xe0, 0x4f, 0xd4, 0x6a, 0xed, 0xa4, 0xcc, 0xc8, 0xa0, 0xaa, |
779 | 0x7b, 0x7d, 0xab, 0xc5, 0x37, 0x6a, 0x99, 0xa6, 0xd8, 0x96, 0x66, 0x3f, | 779 | 0xd5, 0xfa, 0x59, 0x83, 0x5a, 0x2d, 0xdc, 0xc7, 0x38, 0x60, 0xbe, 0x74, |
780 | 0xbc, 0xb4, 0xc1, 0x86, 0xc9, 0xbe, 0x82, 0x35, 0x14, 0xeb, 0x67, 0xb6, | 780 | 0x7b, 0x26, 0xea, 0x7e, 0x2f, 0x19, 0xa9, 0xe8, 0x2e, 0x81, 0x99, 0x96, |
781 | 0xe6, 0xb7, 0x81, 0xf7, 0x60, 0x1b, 0x5d, 0x60, 0xfd, 0x25, 0xe3, 0x93, | 781 | 0x96, 0x1f, 0xe6, 0x3e, 0xc4, 0xac, 0xd4, 0x28, 0xf7, 0x35, 0xef, 0xee, |
782 | 0x58, 0x97, 0xb2, 0x0e, 0x93, 0xf2, 0x93, 0x6a, 0xfa, 0x39, 0x04, 0xc9, | 782 | 0x7f, 0xe9, 0xf6, 0x44, 0x14, 0xed, 0xfc, 0x35, 0xed, 0x62, 0x24, 0xda, |
783 | 0xc3, 0xa3, 0x8d, 0xb8, 0x48, 0xc7, 0xfe, 0x7a, 0xc0, 0xb1, 0xbf, 0x1e, | 783 | 0x2e, 0xa3, 0x7d, 0xe9, 0x97, 0xf1, 0xa8, 0x1e, 0xa7, 0xfb, 0x5e, 0x8c, |
784 | 0x72, 0xc4, 0x45, 0x86, 0x05, 0x3e, 0x6b, 0x60, 0xaa, 0xb0, 0xc2, 0x54, | 784 | 0x07, 0xf2, 0xc5, 0x9f, 0x4b, 0xef, 0xd0, 0xf5, 0x1c, 0xfc, 0x71, 0x43, |
785 | 0xc0, 0x5e, 0x52, 0xb7, 0x2d, 0xd6, 0x75, 0xdb, 0x8e, 0x75, 0x74, 0x9b, | 785 | 0xd5, 0x5f, 0x59, 0xe4, 0x2c, 0x31, 0x06, 0xbc, 0x72, 0xd0, 0xb7, 0x96, |
786 | 0x97, 0xad, 0xba, 0xa2, 0xf4, 0x88, 0x15, 0xc5, 0x1a, 0x73, 0x83, 0xf5, | 786 | 0xfb, 0x41, 0x29, 0x55, 0x95, 0xdb, 0x52, 0x1d, 0x73, 0x97, 0x3e, 0x58, |
787 | 0xc5, 0xeb, 0xd5, 0x69, 0xd6, 0x23, 0x51, 0xd6, 0x23, 0x53, 0xac, 0x47, | 787 | 0x2f, 0xd9, 0x97, 0x60, 0x43, 0x61, 0x3f, 0x9d, 0x92, 0xdf, 0x06, 0xde, |
788 | 0x26, 0x59, 0x8f, 0xd8, 0x4c, 0x03, 0x93, 0xc7, 0xfe, 0x11, 0xeb, 0x69, | 788 | 0x83, 0x6f, 0xf4, 0x34, 0xeb, 0x2f, 0x99, 0x9f, 0xc4, 0xba, 0x94, 0x75, |
789 | 0xac, 0x1f, 0x33, 0xf4, 0x4c, 0x15, 0x3a, 0x79, 0x8a, 0x31, 0xd0, 0x47, | 789 | 0x98, 0x94, 0x9f, 0x44, 0xd5, 0x4f, 0x3c, 0x48, 0x1e, 0xee, 0xaf, 0xe4, |
790 | 0xb4, 0x3a, 0xdf, 0xcb, 0xfc, 0x2b, 0x71, 0x4f, 0xb3, 0x5d, 0x83, 0xda, | 790 | 0x49, 0xba, 0xd6, 0xd8, 0x03, 0xae, 0x35, 0x76, 0xd3, 0x95, 0x27, 0x19, |
791 | 0x2b, 0xf0, 0x17, 0xff, 0x39, 0xf4, 0xce, 0x2b, 0x59, 0x1a, 0xf1, 0xdd, | 791 | 0x12, 0xf8, 0xac, 0x82, 0xa9, 0x42, 0x0a, 0x53, 0x01, 0x7b, 0x49, 0xdd, |
792 | 0x2c, 0x82, 0xce, 0xab, 0xa8, 0x55, 0xf1, 0x12, 0x64, 0x1b, 0x35, 0x82, | 792 | 0xb6, 0x58, 0xd6, 0x6d, 0xbb, 0x37, 0xd1, 0x6d, 0x5e, 0xbe, 0xea, 0xaa, |
793 | 0x7f, 0x30, 0x31, 0xc3, 0x7d, 0x1f, 0xf1, 0xe5, 0x79, 0x5e, 0xbe, 0x1d, | 793 | 0xd2, 0x23, 0x91, 0x28, 0x6c, 0x0c, 0xf6, 0x59, 0xfa, 0xfb, 0xe2, 0x28, |
794 | 0xcd, 0x86, 0xfa, 0x59, 0x06, 0x8e, 0x2b, 0x19, 0x38, 0xde, 0x90, 0x81, | 794 | 0xeb, 0x91, 0x28, 0xeb, 0x91, 0x11, 0xd6, 0x23, 0xc3, 0xac, 0x47, 0x6c, |
795 | 0x6c, 0x8e, 0x47, 0xd2, 0xb7, 0xb0, 0x9d, 0xc6, 0x0f, 0x26, 0x76, 0xf5, | 795 | 0xa6, 0x81, 0xc5, 0x63, 0xff, 0x98, 0xf5, 0x34, 0xec, 0xc7, 0x18, 0x3d, |
796 | 0xb1, 0xfc, 0x22, 0x66, 0xa2, 0x51, 0xbf, 0xc7, 0x4f, 0xa7, 0xc3, 0x41, | 796 | 0x53, 0x84, 0x4e, 0x1e, 0x61, 0x0c, 0xf4, 0x31, 0xad, 0xcd, 0xb7, 0x33, |
797 | 0x55, 0xf7, 0xc7, 0x14, 0x39, 0xef, 0xf9, 0xe2, 0xbb, 0x8c, 0x4b, 0x58, | 797 | 0xff, 0x4a, 0xdc, 0x53, 0xed, 0xd7, 0x60, 0xdf, 0x18, 0xc4, 0x86, 0x7f, |
798 | 0x4e, 0x43, 0x38, 0xbf, 0x0c, 0xbf, 0x28, 0xdb, 0x0d, 0xdd, 0xc2, 0xaf, | 798 | 0x08, 0xbd, 0xf3, 0xb2, 0x43, 0x7d, 0xbe, 0xeb, 0x39, 0xd0, 0x79, 0x0d, |
799 | 0xb4, 0x28, 0xda, 0xe2, 0xdc, 0x9a, 0x64, 0x1d, 0x17, 0x5d, 0x31, 0xac, | 799 | 0x7b, 0x6b, 0xbc, 0x08, 0xd9, 0xc6, 0xbe, 0xc7, 0xdf, 0x1e, 0x1a, 0xe3, |
800 | 0x99, 0xb8, 0xf1, 0x9b, 0xc3, 0xa8, 0xe1, 0xfe, 0x83, 0xea, 0xe7, 0x86, | 800 | 0xbe, 0xf7, 0xf9, 0x32, 0x3c, 0x2f, 0x8f, 0x47, 0x1d, 0xb3, 0x8b, 0x65, |
801 | 0xe5, 0xde, 0x5c, 0x72, 0x97, 0xd4, 0x27, 0xcc, 0xa3, 0xe1, 0xb8, 0xb0, | 801 | 0x60, 0x52, 0xc9, 0xc0, 0x64, 0x45, 0x06, 0x9c, 0x34, 0x8f, 0xa4, 0x73, |
802 | 0xdd, 0x3a, 0xae, 0xc8, 0xf5, 0x73, 0x91, 0xe7, 0xbb, 0x12, 0x9d, 0xe4, | 802 | 0xa1, 0x83, 0x06, 0x8f, 0xc4, 0xf7, 0x76, 0xb2, 0xfc, 0x22, 0x67, 0xa2, |
803 | 0xf9, 0xee, 0x51, 0x6b, 0x67, 0x96, 0xbf, 0x17, 0xeb, 0x32, 0xaf, 0xa1, | 803 | 0xb2, 0xff, 0x90, 0x9f, 0xa6, 0x43, 0x41, 0xb5, 0x6f, 0x91, 0xc5, 0x76, |
804 | 0xc3, 0xa8, 0x7f, 0x1f, 0x12, 0x75, 0x22, 0x4e, 0xa2, 0x0e, 0x4f, 0x02, | 804 | 0xf3, 0x27, 0x94, 0xc9, 0xbd, 0xcb, 0xb8, 0x84, 0xe5, 0xd4, 0xc4, 0xf1, |
805 | 0xcf, 0x63, 0xee, 0x85, 0xfe, 0xf8, 0x07, 0x5e, 0xa3, 0xf1, 0x5e, 0xf0, | 805 | 0x45, 0xc4, 0x45, 0xd9, 0x6f, 0x68, 0x15, 0x71, 0xa5, 0x45, 0xd1, 0x16, |
806 | 0x23, 0x1f, 0x97, 0x67, 0xe8, 0x52, 0x41, 0xf7, 0xe1, 0x3d, 0x32, 0xbe, | 806 | 0xc7, 0x91, 0x61, 0xd6, 0x71, 0xd1, 0x55, 0x23, 0x32, 0x16, 0x33, 0x2e, |
807 | 0x8b, 0x7e, 0xf8, 0x68, 0x87, 0xfd, 0x9e, 0xc8, 0x05, 0x31, 0xfe, 0xc4, | 807 | 0xf7, 0x62, 0x5f, 0xfa, 0x6f, 0x17, 0x1f, 0xeb, 0x95, 0xf5, 0xb9, 0x4f, |
808 | 0xdd, 0xa7, 0xa3, 0xaa, 0x4f, 0xa8, 0x75, 0xd9, 0x85, 0xda, 0x3e, 0x84, | 808 | 0xed, 0x95, 0xfa, 0x84, 0x79, 0x34, 0x14, 0x13, 0xbe, 0x5b, 0xd3, 0x25, |
809 | 0x9a, 0x48, 0x8b, 0xa2, 0x16, 0x65, 0xa7, 0xb0, 0x59, 0x17, 0x85, 0xed, | 809 | 0x69, 0x3f, 0x17, 0x79, 0xbe, 0x97, 0xa2, 0xc3, 0x3c, 0xdf, 0x6d, 0xca, |
810 | 0xb1, 0x7f, 0x57, 0xa3, 0x3e, 0xe6, 0x7e, 0xd7, 0xb5, 0x3b, 0xbc, 0x6e, | 810 | 0x76, 0x3a, 0x7c, 0x5d, 0xd8, 0x65, 0xb6, 0xa1, 0xbd, 0xd8, 0xd3, 0xdf, |
811 | 0x1d, 0x12, 0x18, 0x6d, 0x14, 0xf5, 0xda, 0x45, 0x5e, 0xea, 0x8c, 0xf8, | 811 | 0x8c, 0x47, 0x9f, 0xe2, 0x77, 0x62, 0x1f, 0xa1, 0x2f, 0xe3, 0x79, 0xcc, |
812 | 0xce, 0x58, 0xc0, 0x77, 0x0f, 0xa9, 0xef, 0x3e, 0x2f, 0xb0, 0xb1, 0x11, | 812 | 0xbd, 0xd0, 0x1f, 0x3f, 0x61, 0x1b, 0x8d, 0xf7, 0x82, 0x1f, 0xf9, 0x7b, |
813 | 0xeb, 0x66, 0xbd, 0x28, 0xf8, 0x9d, 0xe7, 0xd9, 0x9e, 0x64, 0x7e, 0x8f, | 813 | 0x61, 0x8c, 0x2e, 0x64, 0x75, 0x1f, 0xde, 0x23, 0xe3, 0x39, 0xf4, 0xc3, |
814 | 0x54, 0xf8, 0xb9, 0xa7, 0x05, 0x3d, 0x35, 0x3d, 0x40, 0x0b, 0xc8, 0x40, | 814 | 0x47, 0xbb, 0xed, 0xf7, 0x44, 0x4d, 0x88, 0xf1, 0x8d, 0xda, 0x3e, 0x7d, |
815 | 0x8f, 0xe2, 0x7f, 0xcb, 0x4c, 0xf9, 0xf5, 0xb8, 0xdb, 0xd1, 0x99, 0xb1, | 815 | 0x45, 0xf5, 0x09, 0x7b, 0x79, 0xb6, 0xf0, 0x18, 0x76, 0x13, 0xf6, 0x74, |
816 | 0x4e, 0x01, 0x63, 0xc5, 0x98, 0x4c, 0x5f, 0xbc, 0x1c, 0xf1, 0xe5, 0xe6, | 816 | 0x5a, 0x14, 0x7b, 0x6d, 0x36, 0x0b, 0x9f, 0x75, 0x51, 0xf8, 0x1e, 0x0f, |
817 | 0x61, 0xeb, 0x20, 0xdf, 0x65, 0x0f, 0xe2, 0xa9, 0xb8, 0x0f, 0x3b, 0x29, | 817 | 0xef, 0xad, 0xec, 0xff, 0x79, 0x57, 0xcd, 0xb9, 0x75, 0xb6, 0x5b, 0x47, |
818 | 0x9e, 0x46, 0xbf, 0xd0, 0x4e, 0xd3, 0xc0, 0x76, 0xd1, 0xc2, 0x79, 0xdf, | 818 | 0x05, 0x46, 0xeb, 0xc7, 0x1e, 0xf4, 0xa2, 0x66, 0xf5, 0x4f, 0xc5, 0x35, |
819 | 0x76, 0x75, 0x5f, 0xb7, 0x98, 0x0b, 0x32, 0xf0, 0x1e, 0xfd, 0x6e, 0xbc, | 819 | 0x63, 0x01, 0xd7, 0x3e, 0xa7, 0xae, 0x7d, 0x56, 0x60, 0x63, 0x63, 0xbc, |
820 | 0x17, 0xef, 0xc7, 0x7d, 0x78, 0x9e, 0x7c, 0xee, 0x00, 0xeb, 0xed, 0xc4, | 820 | 0x95, 0xf5, 0xa2, 0xe0, 0x77, 0x9e, 0x67, 0x7b, 0x98, 0xf9, 0x3d, 0xbc, |
821 | 0xb4, 0x7c, 0x96, 0x71, 0x5d, 0x7e, 0x37, 0x60, 0x7b, 0xf7, 0x57, 0xce, | 821 | 0xc4, 0xcf, 0x9d, 0x16, 0xf4, 0xd4, 0xf4, 0x00, 0x2d, 0x20, 0x03, 0x6d, |
822 | 0x9f, 0x4f, 0xd5, 0xf1, 0xc1, 0xfc, 0x6d, 0xa7, 0xb2, 0xf0, 0x7d, 0xe2, | 822 | 0x8a, 0xff, 0x23, 0x56, 0xc2, 0xaf, 0xc7, 0xdd, 0x88, 0xce, 0x63, 0xb0, |
823 | 0xbb, 0x11, 0x9f, 0xb0, 0x6b, 0x6d, 0xfe, 0xe4, 0x79, 0x9d, 0xe3, 0xf3, | 823 | 0xcf, 0x3c, 0x56, 0x8c, 0xc9, 0xf2, 0xc5, 0x0a, 0x61, 0x5f, 0x7a, 0x1e, |
824 | 0x33, 0xc5, 0xdb, 0xc2, 0x66, 0xcf, 0xa5, 0x47, 0x7c, 0xe5, 0x32, 0xc6, | 824 | 0xbe, 0x0e, 0xea, 0x5e, 0x0e, 0x20, 0x9f, 0x8a, 0xfb, 0xb0, 0x87, 0x62, |
825 | 0x3b, 0xe2, 0x4b, 0xb1, 0x0c, 0x24, 0x8b, 0x89, 0x5a, 0x5e, 0xe2, 0x02, | 825 | 0x49, 0xf4, 0x0b, 0xed, 0x34, 0x0d, 0xfe, 0xa8, 0x86, 0x16, 0xee, 0xfb, |
826 | 0x3a, 0xdd, 0x6f, 0x85, 0x4e, 0x1b, 0xef, 0x0f, 0xcb, 0x9a, 0xb7, 0x38, | 826 | 0x3a, 0xd4, 0x7d, 0xad, 0x62, 0x2e, 0xc8, 0xc0, 0x7b, 0xf4, 0xbb, 0xf1, |
827 | 0x66, 0x39, 0x2c, 0xb0, 0x1c, 0x16, 0x58, 0x0e, 0x0b, 0x2c, 0x87, 0x6c, | 827 | 0x5e, 0xbc, 0x1f, 0xf7, 0xe1, 0x79, 0xf2, 0xb9, 0xdd, 0xac, 0xb7, 0xe3, |
828 | 0xab, 0xbe, 0x56, 0x60, 0x39, 0xe4, 0xb5, 0xe4, 0x55, 0x5e, 0x4b, 0xa4, | 828 | 0xa3, 0xf2, 0x59, 0xc6, 0x35, 0x79, 0xad, 0xdb, 0xf6, 0xee, 0xaf, 0x9c, |
829 | 0xec, 0xc6, 0x95, 0x7f, 0x53, 0xcb, 0xae, 0x3b, 0x6f, 0x53, 0xcb, 0x2a, | 829 | 0x3f, 0x9f, 0xda, 0x83, 0x08, 0xf3, 0xd7, 0x41, 0x05, 0x11, 0xfb, 0xc4, |
830 | 0xd6, 0x6f, 0xf2, 0x1d, 0x99, 0x68, 0x96, 0xd9, 0x5b, 0x2c, 0xb3, 0x1d, | 830 | 0xb5, 0x3e, 0x9f, 0xf0, 0x6b, 0x6d, 0xfe, 0xe4, 0x79, 0x9d, 0xe3, 0xe3, |
831 | 0xb1, 0x41, 0xba, 0x5b, 0xc2, 0x9c, 0x59, 0xe6, 0x1c, 0xeb, 0xea, 0x94, | 831 | 0x33, 0xb9, 0x77, 0x84, 0xcf, 0x9e, 0x4e, 0xf6, 0xf9, 0x0a, 0x05, 0x8c, |
832 | 0x1f, 0x58, 0x2b, 0xc0, 0xf2, 0x04, 0xac, 0x69, 0x31, 0xdd, 0x07, 0xe9, | 832 | 0xb7, 0xcf, 0x97, 0x60, 0x19, 0x98, 0xc8, 0xc5, 0x4b, 0x19, 0xa1, 0x6b, |
833 | 0x1e, 0xeb, 0xeb, 0xbb, 0x25, 0xc8, 0xf0, 0x1e, 0x75, 0x6e, 0xb1, 0x0c, | 833 | 0x18, 0xeb, 0x76, 0x45, 0xcc, 0x69, 0xa3, 0x47, 0x60, 0x3e, 0x7e, 0x1f, |
834 | 0x63, 0xfd, 0xb3, 0x7d, 0xb7, 0x8a, 0x06, 0x63, 0xb2, 0x40, 0x28, 0x43, | 834 | 0x7f, 0x67, 0x39, 0xcc, 0xb2, 0x1c, 0x66, 0x59, 0x0e, 0xb3, 0x2c, 0x87, |
835 | 0xd0, 0xa7, 0x02, 0xa7, 0xf1, 0xbc, 0xaf, 0xb0, 0xde, 0x87, 0x0f, 0x0f, | 835 | 0xec, 0xab, 0x7e, 0x2b, 0xcb, 0x72, 0xc8, 0xb6, 0xe4, 0x15, 0xb6, 0x25, |
836 | 0xeb, 0xc5, 0x19, 0x1f, 0xaf, 0x17, 0x91, 0x9b, 0xac, 0x4f, 0xcf, 0x97, | 836 | 0x52, 0x76, 0x63, 0x2a, 0xbe, 0xa9, 0x65, 0x17, 0xeb, 0x7f, 0x6e, 0x1f, |
837 | 0x6c, 0x96, 0xfb, 0x7e, 0xfa, 0x56, 0x09, 0xeb, 0x34, 0x68, 0xc4, 0xe7, | 837 | 0x47, 0xcb, 0x2a, 0xec, 0x37, 0xf9, 0x8e, 0x0f, 0x55, 0xcb, 0xec, 0x0d, |
838 | 0x65, 0x12, 0xbe, 0x31, 0x23, 0x86, 0xb1, 0x8f, 0x67, 0x0d, 0xc1, 0x27, | 838 | 0x96, 0xd9, 0xa6, 0xf1, 0x1e, 0xba, 0x95, 0xc7, 0x9c, 0x45, 0xac, 0x39, |
839 | 0x7f, 0x0a, 0x3a, 0x30, 0xed, 0x5f, 0xdc, 0x85, 0xda, 0xf3, 0x71, 0xa3, | 839 | 0xd6, 0xd5, 0x09, 0x3f, 0xb0, 0x56, 0x80, 0xe5, 0x09, 0x58, 0x33, 0xc2, |
840 | 0x53, 0xf9, 0x1a, 0x71, 0x8c, 0xf6, 0x68, 0x0b, 0xba, 0xe1, 0xbc, 0xdd, | 840 | 0x74, 0xef, 0xa1, 0xdb, 0xac, 0xaf, 0x6f, 0xe5, 0x21, 0xc3, 0x07, 0xd4, |
841 | 0xbe, 0x24, 0x7e, 0xb3, 0x21, 0x0a, 0xff, 0x9b, 0x4b, 0x7f, 0x5d, 0xe2, | 841 | 0x71, 0x84, 0x65, 0x18, 0xf6, 0xcf, 0xf6, 0xdd, 0xc8, 0x19, 0x8c, 0xc9, |
842 | 0xfb, 0x05, 0xbd, 0x66, 0x12, 0x7e, 0xe4, 0x90, 0xd3, 0xd3, 0xfe, 0xd8, | 842 | 0x02, 0x66, 0x8a, 0xa0, 0x4f, 0x05, 0x4e, 0xe3, 0x79, 0x5f, 0x65, 0xbd, |
843 | 0x0c, 0x3d, 0x5b, 0x45, 0xbf, 0xaf, 0x52, 0x3e, 0x0c, 0x7d, 0x64, 0x45, | 843 | 0x8f, 0x18, 0x1e, 0xec, 0xc5, 0x19, 0x1f, 0xdb, 0x8b, 0xf0, 0x75, 0xd6, |
844 | 0xef, 0x90, 0xa4, 0x5d, 0x37, 0xe3, 0xce, 0x27, 0xbc, 0x75, 0x9c, 0x99, | 844 | 0xa7, 0xe7, 0xf3, 0x36, 0xcb, 0x7d, 0x17, 0xfd, 0x59, 0x1e, 0x76, 0x1a, |
845 | 0x10, 0x38, 0xb9, 0x8b, 0xf5, 0x0b, 0x68, 0xf3, 0x13, 0xe6, 0x35, 0x7e, | 845 | 0x34, 0xe2, 0xe3, 0x02, 0x89, 0xd8, 0x98, 0x31, 0x8e, 0xb1, 0x0f, 0x3a, |
846 | 0x5f, 0x41, 0xeb, 0xb7, 0x1f, 0xb3, 0xce, 0xc1, 0x9c, 0xe1, 0x7c, 0x6d, | 846 | 0x86, 0xe0, 0x93, 0xdb, 0x98, 0x23, 0xa6, 0xfd, 0x3b, 0x7b, 0xb1, 0x9f, |
847 | 0x9d, 0xb6, 0xaa, 0x74, 0x9a, 0xed, 0xd0, 0x69, 0xb9, 0xba, 0x4e, 0x63, | 847 | 0x7e, 0xcc, 0x68, 0x56, 0xb1, 0x46, 0x7c, 0x47, 0xfb, 0x1e, 0x85, 0x4d, |
848 | 0xde, 0x10, 0xba, 0x0c, 0xba, 0xea, 0x51, 0xc6, 0x91, 0xf2, 0x18, 0xf8, | 848 | 0x71, 0xdc, 0x68, 0x0d, 0x12, 0xbf, 0x43, 0x11, 0x65, 0x7a, 0xd4, 0xea, |
849 | 0x70, 0x87, 0xd0, 0x5d, 0xac, 0xfb, 0xd9, 0xae, 0x58, 0xac, 0x66, 0x7d, | 849 | 0xaf, 0x0b, 0x7c, 0xbf, 0xa0, 0xd7, 0x58, 0xdc, 0x8f, 0xfa, 0x72, 0xfa, |
850 | 0x87, 0x85, 0x0e, 0xd1, 0xfc, 0xbd, 0x7f, 0xb7, 0x94, 0x8b, 0x6e, 0xa1, | 850 | 0xaa, 0x7f, 0x7c, 0x8c, 0x9e, 0x2d, 0xa2, 0xdf, 0x97, 0x29, 0x13, 0x82, |
851 | 0x0f, 0x72, 0x27, 0xa1, 0xb7, 0xbc, 0xda, 0x8f, 0x73, 0x3b, 0xb4, 0xb7, | 851 | 0x3e, 0x8a, 0x44, 0xd7, 0x49, 0xd2, 0xae, 0x95, 0x71, 0xe7, 0x63, 0xde, |
852 | 0x23, 0x2f, 0xb1, 0x3e, 0x5b, 0x8c, 0xc2, 0xa6, 0xed, 0x51, 0xb6, 0x0f, | 852 | 0x3a, 0xce, 0x8a, 0x0b, 0x9c, 0xdc, 0xc2, 0xfa, 0x05, 0xb4, 0xf9, 0x3e, |
853 | 0xea, 0x72, 0x61, 0xaf, 0x0b, 0x63, 0xd5, 0xfa, 0x6c, 0x40, 0xf9, 0x35, | 853 | 0xf3, 0x5a, 0x14, 0x75, 0x69, 0x4a, 0xbf, 0xbd, 0xce, 0x3a, 0x07, 0x73, |
854 | 0xe0, 0x87, 0xc4, 0x9c, 0xb7, 0xc5, 0x08, 0x26, 0x30, 0x02, 0xdf, 0x13, | 854 | 0x86, 0xe3, 0x8d, 0x75, 0xda, 0x9a, 0xd2, 0x69, 0xb6, 0x4b, 0xa7, 0xa5, |
855 | 0x60, 0x7a, 0x89, 0x1a, 0xe2, 0x44, 0xef, 0xd2, 0xaa, 0x90, 0x8d, 0x77, | 855 | 0xcb, 0x3a, 0x8d, 0x79, 0x43, 0xe8, 0xb2, 0xa0, 0xa8, 0x8d, 0x4e, 0xab, |
856 | 0x05, 0x76, 0xc9, 0xf3, 0x77, 0xb3, 0xd3, 0x07, 0x45, 0x3f, 0xf3, 0x4b, | 856 | 0xef, 0xc0, 0x87, 0xbb, 0x85, 0xee, 0x62, 0xdd, 0x3f, 0x84, 0x3d, 0xc8, |
857 | 0x0d, 0xfd, 0x38, 0x57, 0x78, 0x0f, 0xeb, 0x86, 0xe8, 0x6b, 0x65, 0x42, | 857 | 0x1c, 0xdf, 0x31, 0xa1, 0x43, 0x34, 0x7f, 0x3f, 0xbc, 0x4f, 0xca, 0x45, |
858 | 0xea, 0xc0, 0xc5, 0x32, 0x6a, 0x80, 0x89, 0x3e, 0x73, 0x5f, 0xf5, 0x38, | 858 | 0xab, 0xd0, 0x07, 0xe9, 0x29, 0xe8, 0x2d, 0xaf, 0xf6, 0x0f, 0x72, 0x3b, |
859 | 0xd1, 0x0f, 0xad, 0x0f, 0x36, 0x22, 0x7b, 0x8c, 0x6b, 0xfb, 0x31, 0x47, | 859 | 0xb4, 0xb7, 0xc3, 0x2f, 0xb2, 0x3e, 0x5b, 0x8c, 0xc2, 0xa7, 0x6d, 0x53, |
860 | 0x59, 0x07, 0x0f, 0x3d, 0xcb, 0xef, 0xc7, 0xb5, 0xf5, 0xc7, 0x73, 0xaf, | 860 | 0xbe, 0x0f, 0xf6, 0x14, 0xc3, 0x5a, 0x17, 0xc6, 0xaa, 0xf5, 0x59, 0xb7, |
861 | 0x3e, 0x1e, 0xf8, 0xf6, 0x70, 0xcf, 0xbb, 0x74, 0x57, 0x8d, 0xe7, 0x6e, | 861 | 0x8a, 0x6b, 0x20, 0x0e, 0x89, 0x39, 0x6f, 0x88, 0x11, 0x2c, 0x60, 0x04, |
862 | 0x7d, 0x3c, 0xcf, 0xa8, 0xf1, 0x50, 0xce, 0x88, 0x0d, 0x28, 0xdc, 0xbf, | 862 | 0xbe, 0x27, 0xc0, 0xf4, 0x82, 0x7e, 0x61, 0x3b, 0xf0, 0x2e, 0xad, 0x09, |
863 | 0xe1, 0x67, 0x77, 0x27, 0x18, 0xc7, 0xe4, 0x96, 0x40, 0xe7, 0xfd, 0x8a, | 863 | 0xd9, 0x78, 0x57, 0x60, 0x97, 0x0c, 0x5f, 0x9b, 0x19, 0x7d, 0x54, 0xf4, |
864 | 0x9f, 0x9c, 0x7e, 0x54, 0x67, 0x5f, 0xad, 0xc9, 0x3b, 0xac, 0x7f, 0xef, | 864 | 0x33, 0xb3, 0x5c, 0xd1, 0x8f, 0x73, 0xd9, 0xf7, 0x60, 0x37, 0x44, 0x5f, |
865 | 0x09, 0x1c, 0x33, 0xc2, 0x38, 0x06, 0xd7, 0x29, 0x0f, 0x3d, 0x9d, 0x0b, | 865 | 0x97, 0x86, 0xa4, 0x0e, 0x5c, 0x2c, 0x98, 0xd8, 0xe3, 0x0c, 0x7d, 0xe6, |
866 | 0xa3, 0x4e, 0xed, 0x0c, 0x8f, 0x9b, 0xed, 0xb1, 0x69, 0xfe, 0x14, 0xfe, | 866 | 0xbe, 0xea, 0x71, 0xa2, 0x1f, 0x5a, 0x1f, 0x6c, 0x45, 0xf6, 0x18, 0xd7, |
867 | 0x35, 0x3c, 0x47, 0xdf, 0xff, 0x3c, 0xdd, 0x9b, 0x87, 0x2e, 0x07, 0x8e, | 867 | 0x76, 0x61, 0x8e, 0x1c, 0x17, 0x0f, 0x7d, 0x8f, 0xdf, 0x8f, 0x73, 0x9b, |
868 | 0x95, 0xb5, 0x6c, 0xef, 0x2d, 0x4b, 0xff, 0x6e, 0xca, 0xd3, 0xbf, 0x0b, | 868 | 0x8f, 0xe7, 0x76, 0x79, 0x3c, 0x88, 0xed, 0xe1, 0x9e, 0x77, 0xe9, 0x96, |
869 | 0xdf, 0xee, 0x34, 0x70, 0x7e, 0x08, 0x7e, 0xe0, 0xa4, 0xfa, 0xad, 0x8f, | 869 | 0x1a, 0xcf, 0xad, 0xf2, 0x78, 0xbe, 0xab, 0xc6, 0x43, 0x69, 0x63, 0xbc, |
870 | 0x5c, 0x15, 0xcf, 0xf2, 0xd2, 0x4b, 0x33, 0x8e, 0xd8, 0x38, 0xc4, 0xaa, | 870 | 0x5b, 0xe1, 0xfe, 0x2d, 0x3f, 0xbb, 0x35, 0xce, 0x38, 0x26, 0xbd, 0x0c, |
871 | 0x64, 0x59, 0xcf, 0xd8, 0xa1, 0x0e, 0x43, 0xe6, 0xdc, 0xdc, 0xa8, 0x6a, | 871 | 0x3a, 0xdf, 0xa5, 0xf8, 0xc9, 0x1d, 0x47, 0x75, 0xf7, 0x35, 0x32, 0xbc, |
872 | 0xec, 0x74, 0x94, 0xe7, 0xcc, 0x8e, 0x1a, 0x46, 0x4a, 0xf8, 0x1a, 0xba, | 872 | 0xce, 0xfa, 0xf7, 0xb6, 0xc0, 0x31, 0x7d, 0x8c, 0x63, 0x70, 0x9e, 0x32, |
873 | 0xed, 0x1e, 0xea, 0xe2, 0x75, 0xf4, 0x2c, 0xa1, 0x96, 0x9a, 0x65, 0x62, | 873 | 0xd0, 0xd3, 0xe9, 0x10, 0xf6, 0xe1, 0x1d, 0xe3, 0x71, 0xb3, 0x3f, 0x36, |
874 | 0x0f, 0xe0, 0x12, 0xf3, 0x64, 0x3e, 0x6a, 0x45, 0x1e, 0x17, 0x76, 0x29, | 874 | 0xca, 0x9f, 0x22, 0xbe, 0x26, 0xe2, 0xbe, 0xea, 0xfe, 0xaf, 0xd3, 0xed, |
875 | 0xd6, 0x17, 0x03, 0x74, 0x62, 0x5a, 0xa3, 0x0f, 0x7c, 0xbc, 0x84, 0x3a, | 875 | 0x79, 0xe8, 0x72, 0xe0, 0x58, 0xb9, 0x57, 0xef, 0xed, 0x15, 0x19, 0xdf, |
876 | 0x9a, 0x51, 0x1e, 0x3f, 0xfc, 0xc7, 0x63, 0xe6, 0x9b, 0xbc, 0x2e, 0x5d, | 876 | 0x4d, 0x78, 0xc6, 0x77, 0x11, 0xdb, 0x1d, 0x05, 0xce, 0x37, 0x11, 0x07, |
877 | 0x12, 0x7e, 0x99, 0x0b, 0x94, 0x63, 0x39, 0x3d, 0x22, 0xe4, 0xd4, 0x18, | 877 | 0x9e, 0x50, 0xbf, 0x5f, 0x92, 0x2e, 0xe2, 0x59, 0x5e, 0x7a, 0x69, 0xcc, |
878 | 0x61, 0x29, 0x62, 0xb9, 0x42, 0x6c, 0xc2, 0xb8, 0xa8, 0xdb, 0x23, 0x6d, | 878 | 0x95, 0x1f, 0x87, 0xbc, 0x14, 0x87, 0xf5, 0x8c, 0x6d, 0x36, 0x19, 0x47, |
879 | 0x1d, 0x1e, 0xe5, 0xb2, 0xaa, 0x87, 0x90, 0x86, 0xee, 0xd8, 0xb8, 0x4f, | 879 | 0x65, 0x9c, 0xb9, 0xa8, 0xb1, 0xd3, 0x09, 0x9e, 0x33, 0x3b, 0x6a, 0x18, |
880 | 0x22, 0xfd, 0x89, 0x7d, 0x31, 0x4e, 0x4c, 0xe6, 0xf6, 0x7d, 0xc3, 0xae, | 880 | 0x09, 0x11, 0x6b, 0x68, 0xb5, 0xdb, 0xa8, 0x85, 0xed, 0xe8, 0x59, 0xc2, |
881 | 0x33, 0x45, 0xbd, 0x48, 0xd0, 0x4e, 0xf8, 0x13, 0x8d, 0x29, 0xa6, 0x9b, | 881 | 0x3e, 0x70, 0x11, 0x0b, 0x6b, 0x00, 0x17, 0x98, 0x27, 0x33, 0xd1, 0x48, |
882 | 0xfe, 0xdd, 0x19, 0xa7, 0xdf, 0xe0, 0x9c, 0xc8, 0xeb, 0x7f, 0xa5, 0x2a, | 882 | 0xf8, 0x51, 0xe1, 0x97, 0xc2, 0xbe, 0x18, 0xa0, 0x13, 0xd3, 0x1a, 0x7d, |
883 | 0xd7, 0xe0, 0x1c, 0xdb, 0xf4, 0xf9, 0x83, 0x4e, 0x4c, 0x62, 0x15, 0x93, | 883 | 0xe0, 0xef, 0xcb, 0xd8, 0x0b, 0x34, 0xca, 0xe3, 0x47, 0xfc, 0x78, 0xc0, |
884 | 0xc2, 0x97, 0xb3, 0x9b, 0x12, 0x0b, 0x53, 0xf4, 0x68, 0x01, 0x3a, 0x8c, | 884 | 0x7a, 0x93, 0xed, 0xd2, 0x05, 0x11, 0x97, 0x79, 0x9a, 0xd2, 0x2c, 0xa7, |
885 | 0xee, 0x24, 0x6c, 0xfc, 0xa2, 0x0c, 0x64, 0x7c, 0x8a, 0x52, 0x55, 0xd0, | 885 | 0xc7, 0x85, 0x9c, 0x1a, 0x7d, 0x2c, 0x45, 0x2c, 0x57, 0xc8, 0x43, 0x18, |
886 | 0xc8, 0xc7, 0x58, 0x89, 0x79, 0xaf, 0x88, 0x3d, 0x7f, 0x3e, 0x2e, 0xe3, | 886 | 0x44, 0x0c, 0x50, 0xf9, 0x3a, 0x3c, 0xca, 0x15, 0xb5, 0x57, 0x42, 0x12, |
887 | 0x77, 0x54, 0x7e, 0x5d, 0xf9, 0xcb, 0x87, 0x29, 0xb9, 0x40, 0xd9, 0x4c, | 887 | 0xba, 0x63, 0xeb, 0x31, 0x89, 0xe4, 0xa7, 0x8e, 0xc5, 0xb8, 0x31, 0x59, |
888 | 0xf4, 0x4b, 0xa2, 0xd6, 0x75, 0x26, 0x3a, 0xa1, 0x7c, 0x3b, 0x11, 0xbe, | 888 | 0xa3, 0xda, 0x51, 0xf8, 0x69, 0x2a, 0x9e, 0x88, 0xfc, 0xf8, 0xf2, 0x6f, |
889 | 0x0e, 0x7f, 0x99, 0x49, 0x5f, 0x2e, 0x58, 0xd9, 0x0c, 0x49, 0x9f, 0x05, | 889 | 0xe9, 0xb8, 0xe3, 0x06, 0xe7, 0x44, 0x6e, 0xe8, 0xcb, 0x45, 0x69, 0x83, |
890 | 0x71, 0x1f, 0x0c, 0x5e, 0x7b, 0x77, 0xb0, 0x0e, 0x39, 0x21, 0xfc, 0x16, | 890 | 0xd3, 0xec, 0xd3, 0x67, 0x8e, 0xb8, 0x31, 0x49, 0x24, 0x37, 0x21, 0x62, |
891 | 0x8c, 0x54, 0xe6, 0xd1, 0x1e, 0x3e, 0x87, 0x7e, 0x82, 0x9d, 0x96, 0x29, | 891 | 0x39, 0xfb, 0x28, 0xbe, 0x30, 0x42, 0x0f, 0x64, 0xa1, 0xc3, 0x68, 0x3d, |
892 | 0x3e, 0xa5, 0xda, 0xd6, 0x28, 0xc4, 0xbc, 0x10, 0xfa, 0x55, 0x3b, 0x1b, | 892 | 0x6e, 0xe3, 0x57, 0x72, 0x20, 0xe3, 0x23, 0x94, 0x28, 0x82, 0x46, 0x3e, |
893 | 0x35, 0x1a, 0xf7, 0xc3, 0xe7, 0x71, 0x42, 0xe0, 0xc8, 0x11, 0xb6, 0x79, | 893 | 0xc6, 0x4a, 0xcc, 0x7b, 0x39, 0xac, 0xef, 0xf3, 0xf7, 0x02, 0x7e, 0x1b, |
894 | 0x44, 0xbb, 0xda, 0xac, 0xf0, 0x5f, 0xf0, 0x79, 0xf9, 0x81, 0x21, 0xfd, | 894 | 0xe6, 0x0f, 0x54, 0xbc, 0xbc, 0x97, 0x26, 0x16, 0xc8, 0x49, 0x45, 0xef, |
895 | 0x9b, 0x08, 0xb8, 0x2e, 0xfd, 0x1a, 0xfc, 0xcc, 0x32, 0xf7, 0xa3, 0x29, | 895 | 0x15, 0x7b, 0x79, 0xa7, 0xa2, 0x43, 0x2a, 0xb6, 0x13, 0xe6, 0xf3, 0x88, |
896 | 0x9e, 0x7e, 0x98, 0xe2, 0x9b, 0xf0, 0x33, 0x9d, 0xbc, 0xaf, 0x7e, 0x26, | 896 | 0x97, 0x59, 0x74, 0x7f, 0x36, 0xe2, 0xa4, 0x48, 0xc6, 0x2c, 0x88, 0xfb, |
897 | 0xa6, 0x35, 0xaf, 0x3d, 0x37, 0x58, 0x36, 0x5e, 0x5f, 0xd7, 0xfe, 0xfb, | 897 | 0x60, 0xb0, 0xed, 0xdd, 0xcd, 0x3a, 0xe4, 0x94, 0x88, 0x5b, 0x30, 0x52, |
898 | 0x50, 0xaf, 0xe1, 0x4c, 0xab, 0x90, 0xf8, 0xdd, 0x0c, 0x60, 0xf0, 0x7c, | 898 | 0x99, 0x47, 0x7b, 0xc4, 0x1c, 0xba, 0x08, 0x7e, 0x5a, 0x2a, 0xf7, 0xaa, |
899 | 0xf5, 0x71, 0xfc, 0x5e, 0x8c, 0x2f, 0x2d, 0xb0, 0x71, 0x84, 0xb1, 0x0d, | 899 | 0x6a, 0x5b, 0x22, 0x93, 0x79, 0xc1, 0xfc, 0x6d, 0xdb, 0x89, 0x1a, 0x95, |
900 | 0x30, 0xce, 0x98, 0xd8, 0x17, 0x8b, 0x3f, 0x16, 0xf1, 0xe5, 0x97, 0x07, | 900 | 0xfb, 0x11, 0xf3, 0x38, 0x25, 0x70, 0x64, 0x1f, 0xfb, 0x3c, 0xa2, 0x5d, |
901 | 0xc9, 0x0f, 0x7f, 0x9c, 0xad, 0x63, 0x29, 0xba, 0x45, 0xdc, 0xbb, 0xdc, | 901 | 0x69, 0x46, 0xc4, 0x2f, 0xf8, 0xb8, 0xf0, 0xc8, 0x7e, 0xa9, 0xdb, 0xe4, |
902 | 0x8f, 0xc4, 0xfa, 0x0c, 0x9d, 0x78, 0x87, 0xed, 0x86, 0x09, 0x15, 0x87, | 902 | 0x79, 0x19, 0xd7, 0xe0, 0x67, 0x16, 0xb8, 0x1f, 0x55, 0xf9, 0xf4, 0xbd, |
903 | 0xd3, 0x21, 0x6a, 0x53, 0xc9, 0xbd, 0x54, 0xad, 0x53, 0x34, 0xef, 0xe9, | 903 | 0x14, 0xdb, 0x46, 0x9c, 0x69, 0xea, 0x8e, 0xc6, 0x99, 0x98, 0xd6, 0xc5, |
904 | 0xbd, 0x0e, 0xe7, 0x6f, 0x73, 0x41, 0x76, 0x9d, 0x98, 0x02, 0xfe, 0x29, | 904 | 0xcd, 0x6a, 0x1a, 0xb4, 0xff, 0xf7, 0x91, 0xb6, 0xe1, 0x4c, 0x2b, 0x53, |
905 | 0x31, 0x47, 0x97, 0x88, 0xe4, 0x1c, 0x37, 0xf6, 0x31, 0xba, 0x78, 0x9e, | 905 | 0xfc, 0x16, 0x08, 0x30, 0x78, 0xa6, 0xf8, 0x3c, 0x7e, 0x03, 0xc7, 0x97, |
906 | 0x60, 0x0f, 0xc2, 0xef, 0xf7, 0x35, 0xfe, 0xc4, 0x7e, 0xc4, 0xd5, 0x21, | 906 | 0x14, 0xd8, 0x38, 0xcc, 0xd8, 0x06, 0x18, 0x67, 0x40, 0xac, 0x8b, 0xc5, |
907 | 0xe0, 0xa8, 0x3e, 0x9b, 0x79, 0x66, 0x1a, 0xe7, 0x83, 0x6c, 0x9f, 0x69, | 907 | 0x1e, 0x0a, 0xfb, 0x32, 0x2b, 0x3d, 0xe4, 0x47, 0x3c, 0xce, 0xd6, 0xb9, |
908 | 0xdc, 0x2b, 0x7d, 0x51, 0x6c, 0xb3, 0xa9, 0xf9, 0x82, 0x1f, 0x6a, 0x54, | 908 | 0x1c, 0xad, 0x22, 0xef, 0x5d, 0xae, 0x47, 0xc2, 0x3e, 0x43, 0x27, 0xae, |
909 | 0xd5, 0x29, 0xb0, 0xc8, 0xec, 0x07, 0x9d, 0x3e, 0x2d, 0x79, 0x5c, 0x6f, | 909 | 0xb3, 0xdf, 0xf0, 0x90, 0xca, 0xb9, 0x41, 0xcd, 0xa6, 0xce, 0xb9, 0xd1, |
910 | 0xef, 0x62, 0x23, 0xb1, 0x4e, 0xf8, 0xdd, 0x30, 0xd4, 0xeb, 0xdc, 0x0b, | 910 | 0x3a, 0x45, 0xf3, 0x9e, 0x5e, 0xeb, 0x70, 0xff, 0xde, 0x18, 0x64, 0xd7, |
911 | 0xda, 0xf3, 0x1c, 0x39, 0xf7, 0x36, 0x1e, 0xdf, 0xa5, 0x7f, 0xb3, 0xe8, | 911 | 0x8d, 0x29, 0x10, 0x9f, 0x12, 0x73, 0x74, 0x81, 0x48, 0xce, 0x71, 0x65, |
912 | 0xfe, 0xcc, 0xdb, 0x16, 0x8f, 0x79, 0xfb, 0xf9, 0x90, 0xdc, 0x3b, 0x7b, | 912 | 0x1d, 0xa3, 0x85, 0xe7, 0x09, 0xfe, 0x20, 0xe2, 0x7e, 0x8f, 0xf0, 0x27, |
913 | 0x58, 0xb5, 0xf1, 0x8a, 0x6f, 0x5d, 0xfe, 0x0e, 0xfc, 0x50, 0x8d, 0xfc, | 913 | 0xd6, 0x23, 0x7e, 0xb4, 0x1f, 0x38, 0xaa, 0xd3, 0x66, 0x9e, 0x19, 0xc5, |
914 | 0x8b, 0x77, 0x84, 0x5e, 0x69, 0xf5, 0x85, 0x47, 0x58, 0x9f, 0x4a, 0x39, | 914 | 0x71, 0x0f, 0xfb, 0x67, 0x1a, 0xf7, 0xca, 0x58, 0x14, 0xfb, 0x6c, 0x6a, |
915 | 0x3e, 0xe1, 0x21, 0xc7, 0xfd, 0x31, 0xe0, 0x96, 0x8f, 0x2f, 0xc7, 0xc7, | 915 | 0xbe, 0x10, 0x87, 0xea, 0x97, 0x39, 0x4c, 0xd9, 0x08, 0x59, 0x5d, 0xa0, |
916 | 0xdb, 0xca, 0xf1, 0x9e, 0x61, 0xe9, 0x8b, 0x6d, 0x95, 0x63, 0xe4, 0x00, | 916 | 0xd3, 0xaf, 0x4a, 0x1e, 0x37, 0x5b, 0xbb, 0xd8, 0x4a, 0x5e, 0x13, 0x7e, |
917 | 0x9d, 0xa8, 0xb6, 0xf3, 0x7b, 0x61, 0x1e, 0x90, 0xcb, 0xee, 0xf4, 0x95, | 917 | 0x0b, 0x0d, 0xfb, 0x8d, 0x1e, 0x04, 0xed, 0x79, 0x8e, 0xdc, 0x6b, 0x1b, |
918 | 0x80, 0x66, 0xda, 0x5f, 0x82, 0x7d, 0x43, 0xf0, 0x25, 0xf6, 0x5e, 0x4e, | 918 | 0xcf, 0xef, 0xd5, 0xbf, 0xc3, 0x74, 0x67, 0xe6, 0x6d, 0x87, 0xc7, 0xbc, |
919 | 0x1a, 0xa9, 0x79, 0xf7, 0x5e, 0xea, 0x46, 0xee, 0xbd, 0xed, 0x71, 0x2f, | 919 | 0x1d, 0xec, 0x95, 0x6b, 0x67, 0x7f, 0xa1, 0xda, 0x78, 0xe5, 0xb8, 0x3a, |
920 | 0xb0, 0x3b, 0x64, 0xc3, 0x8a, 0x48, 0x5f, 0x80, 0xa6, 0xdf, 0xb0, 0xef, | 920 | 0x4f, 0x22, 0x0e, 0x55, 0xa9, 0xbf, 0x78, 0x5b, 0xe8, 0x95, 0xfa, 0x58, |
921 | 0x70, 0xc9, 0xca, 0x96, 0x09, 0xbe, 0xee, 0x30, 0x9d, 0xc3, 0xfe, 0xb4, | 921 | 0x78, 0x98, 0xf5, 0xa9, 0x94, 0xe3, 0x53, 0x1e, 0x72, 0xdc, 0x35, 0x0e, |
922 | 0xf2, 0x25, 0x1f, 0x2b, 0x48, 0x3a, 0x84, 0x0e, 0x0a, 0xfe, 0x00, 0xbe, | 922 | 0xdc, 0xf2, 0xc9, 0xe5, 0x78, 0xb2, 0xa1, 0x1c, 0x4f, 0xf6, 0xca, 0x58, |
923 | 0x8d, 0xa4, 0xfd, 0x69, 0x9e, 0x63, 0xe9, 0x47, 0xce, 0x2c, 0x45, 0xd4, | 923 | 0x6c, 0xbd, 0x1c, 0xbf, 0x81, 0xbe, 0x14, 0x37, 0xca, 0x81, 0x44, 0x4d, |
924 | 0xbc, 0x71, 0x5b, 0x3c, 0xcf, 0x33, 0x5f, 0x10, 0xf3, 0x65, 0x3d, 0xbf, | 924 | 0xbb, 0x3b, 0x56, 0x02, 0x9a, 0xe9, 0x78, 0x09, 0xd6, 0x0d, 0xc1, 0x97, |
925 | 0x52, 0x8f, 0x4f, 0xc6, 0xda, 0x50, 0xa3, 0xff, 0xe0, 0x75, 0xcf, 0x7f, | 925 | 0x58, 0x7b, 0x99, 0x32, 0x12, 0xf3, 0xb5, 0x6b, 0xa9, 0x5b, 0xb9, 0x17, |
926 | 0x30, 0x24, 0x6a, 0x37, 0xdc, 0xa8, 0x1e, 0x64, 0xbc, 0x89, 0x39, 0x85, | 926 | 0xeb, 0x34, 0xb5, 0xf7, 0x02, 0xbb, 0x43, 0x36, 0x22, 0x61, 0x19, 0x0b, |
927 | 0x0f, 0x52, 0xfb, 0x88, 0x1f, 0xda, 0x4b, 0xbd, 0x07, 0x18, 0x05, 0x18, | 927 | 0xd0, 0xf4, 0xeb, 0xf5, 0x1d, 0xcb, 0x47, 0x9c, 0x02, 0x21, 0xd6, 0x1d, |
928 | 0x64, 0x33, 0xbe, 0x34, 0x0e, 0x22, 0xce, 0xdc, 0xe4, 0x7b, 0x50, 0x73, | 928 | 0xa2, 0x73, 0x58, 0x9f, 0x56, 0xb1, 0xe4, 0x93, 0x59, 0x49, 0x07, 0xf3, |
929 | 0x6a, 0xdc, 0x4c, 0x51, 0x0f, 0xfc, 0x10, 0xa8, 0x25, 0x6d, 0xe6, 0x9a, | 929 | 0x88, 0xe0, 0x0f, 0xe0, 0xdb, 0x70, 0xd2, 0x9f, 0xe4, 0x39, 0x96, 0x71, |
930 | 0x64, 0xec, 0x94, 0x90, 0xb1, 0xd4, 0xf2, 0x29, 0x25, 0x63, 0xa7, 0x94, | 930 | 0xe4, 0xd4, 0x72, 0x58, 0xcd, 0x1b, 0xb7, 0xc5, 0xf3, 0xaa, 0xf6, 0x92, |
931 | 0x1f, 0xfe, 0x94, 0x92, 0xb1, 0x53, 0x4a, 0xc6, 0x4e, 0x29, 0x19, 0x3b, | 931 | 0xd7, 0x71, 0x07, 0xcc, 0x57, 0xe4, 0xeb, 0x95, 0xdc, 0x64, 0xd8, 0x86, |
932 | 0xc5, 0x7c, 0x3e, 0xc6, 0xf8, 0x16, 0x58, 0x44, 0xfb, 0x41, 0x7b, 0x29, | 932 | 0x12, 0xfd, 0x37, 0xdb, 0x3d, 0xff, 0x11, 0x53, 0xec, 0xe3, 0xf0, 0x46, |
933 | 0x53, 0xc2, 0x75, 0xac, 0xcf, 0x6e, 0x39, 0x7b, 0x69, 0x44, 0xca, 0x19, | 933 | 0xf1, 0x08, 0xe3, 0x4d, 0xcc, 0x29, 0x62, 0x90, 0x3a, 0x46, 0xfc, 0xc4, |
934 | 0x63, 0x13, 0x19, 0xaf, 0xc7, 0xef, 0xc2, 0x1c, 0xfc, 0x1e, 0xd3, 0xef, | 934 | 0x41, 0x6a, 0x3f, 0xcc, 0x28, 0xc0, 0x20, 0x9b, 0xf1, 0xa5, 0x71, 0x04, |
935 | 0x23, 0x3a, 0x33, 0x8f, 0xbe, 0xfa, 0x28, 0x29, 0x6a, 0xc9, 0x76, 0x50, | 935 | 0xb9, 0xe6, 0x16, 0xdf, 0x83, 0xfd, 0xa8, 0x06, 0xad, 0x04, 0xb5, 0x21, |
936 | 0xc2, 0x89, 0x85, 0x43, 0xc8, 0x0f, 0x93, 0xb6, 0x5f, 0xb6, 0x6d, 0xae, | 936 | 0x0e, 0x81, 0xfd, 0xb0, 0xad, 0x74, 0x95, 0x8c, 0x9d, 0x16, 0x32, 0x96, |
937 | 0x98, 0xe6, 0x93, 0x98, 0x9a, 0x2f, 0xb7, 0x5d, 0xd4, 0x45, 0xe9, 0x22, | 937 | 0x58, 0x39, 0xad, 0x64, 0xec, 0xb4, 0x8a, 0xc3, 0x9f, 0x56, 0x32, 0x76, |
938 | 0xe8, 0x8a, 0x98, 0x4a, 0x93, 0xe7, 0x46, 0xd0, 0x49, 0x86, 0x44, 0xb9, | 938 | 0x5a, 0xc9, 0xd8, 0x69, 0x25, 0x63, 0xa7, 0x99, 0xcf, 0x07, 0x18, 0xdf, |
939 | 0x68, 0x70, 0x4c, 0xd1, 0xe0, 0xdb, 0x62, 0x8c, 0x88, 0x49, 0x84, 0x2f, | 939 | 0x02, 0x8b, 0xe8, 0x38, 0x68, 0x3b, 0xa5, 0xf2, 0x38, 0x0f, 0xfb, 0x5c, |
940 | 0xb3, 0x3d, 0x1d, 0x72, 0x85, 0x31, 0x7e, 0x0e, 0xcb, 0xc2, 0xc1, 0x08, | 940 | 0x2b, 0x67, 0xef, 0xf6, 0x49, 0x39, 0x63, 0x6c, 0x22, 0xeb, 0xc9, 0xf8, |
941 | 0xeb, 0xa4, 0x8d, 0xd3, 0xa1, 0x31, 0xf6, 0x76, 0xba, 0x67, 0xa3, 0x79, | 941 | 0x5d, 0x98, 0x83, 0x57, 0x98, 0xe6, 0x1f, 0xd3, 0x99, 0x79, 0xf4, 0xd5, |
942 | 0x39, 0x77, 0x1c, 0x6b, 0x49, 0x44, 0xad, 0x23, 0x12, 0x17, 0x6f, 0xb1, | 942 | 0x47, 0x13, 0x62, 0x1f, 0xdc, 0x26, 0x8a, 0xbb, 0xb1, 0xb0, 0xc9, 0x63, |
943 | 0x6b, 0x74, 0x34, 0xba, 0x97, 0x8f, 0xad, 0x74, 0x96, 0x0e, 0x90, 0xd1, | 943 | 0xcd, 0x4a, 0xdf, 0xcf, 0x31, 0x6c, 0xc1, 0x27, 0xde, 0x7a, 0x15, 0x7c, |
944 | 0x57, 0xa3, 0xbf, 0x60, 0x39, 0xe8, 0x66, 0x39, 0x38, 0xaa, 0xec, 0x92, | 944 | 0x32, 0xae, 0xe6, 0xab, 0xd6, 0x2f, 0x6a, 0xa1, 0x64, 0x0e, 0x74, 0x45, |
945 | 0xa3, 0x75, 0xbb, 0x64, 0xcf, 0x1e, 0xc4, 0x65, 0x64, 0xc4, 0xbe, 0xd7, | 945 | 0xfe, 0xa4, 0xc5, 0x73, 0x23, 0xe8, 0xe4, 0x98, 0x1e, 0x34, 0x38, 0xa9, |
946 | 0x56, 0x55, 0x43, 0x00, 0xbe, 0x6f, 0x9c, 0x77, 0x51, 0x7c, 0x18, 0xe7, | 946 | 0x68, 0xf0, 0xb8, 0x18, 0x23, 0xf2, 0x0f, 0x11, 0xcb, 0x6c, 0x4c, 0x87, |
947 | 0xf8, 0x2d, 0x22, 0x6b, 0x32, 0xee, 0x1b, 0xdf, 0x23, 0xb0, 0xbb, 0xcf, | 947 | 0x74, 0x76, 0x80, 0x9f, 0xc3, 0xb2, 0x70, 0x24, 0xcc, 0x3a, 0x69, 0xeb, |
948 | 0xc2, 0x3d, 0x47, 0xa5, 0xde, 0xf3, 0x91, 0x7f, 0xfc, 0x36, 0xe3, 0x89, | 948 | 0x74, 0xa8, 0x8c, 0xbd, 0x91, 0xee, 0xd9, 0x6a, 0x5d, 0xce, 0xba, 0xcb, |
949 | 0x1a, 0x3d, 0xc1, 0xef, 0xcc, 0x17, 0xf7, 0xf1, 0xb3, 0x75, 0x4d, 0x09, | 949 | 0x96, 0x84, 0x95, 0x1d, 0x91, 0xb8, 0x78, 0x87, 0x5d, 0xa2, 0x13, 0xd1, |
950 | 0x3b, 0x6e, 0xf8, 0xb6, 0x92, 0xbf, 0xaf, 0xdd, 0xbb, 0x2d, 0xc1, 0x8f, | 950 | 0x83, 0xfc, 0x3d, 0x92, 0x74, 0xe8, 0x30, 0x19, 0x9d, 0x25, 0xfa, 0x11, |
951 | 0x8c, 0xa7, 0x8d, 0xd9, 0xe8, 0x7b, 0xb5, 0xd3, 0x27, 0xe1, 0x63, 0x87, | 951 | 0xcb, 0x41, 0x2b, 0xcb, 0xc1, 0x09, 0xe5, 0x97, 0x9c, 0x28, 0xfb, 0x25, |
952 | 0x9c, 0x58, 0x21, 0xd3, 0xe7, 0x25, 0x1f, 0x12, 0x2b, 0x35, 0xe2, 0x63, | 952 | 0x93, 0x07, 0x90, 0x97, 0x91, 0x12, 0xeb, 0x5e, 0x3b, 0xcb, 0xbf, 0xc3, |
953 | 0x21, 0x2f, 0x35, 0xfa, 0x77, 0x1e, 0x5b, 0x88, 0xb0, 0x77, 0x22, 0x9f, | 953 | 0x02, 0x3d, 0xb6, 0x88, 0xfd, 0x28, 0x7a, 0x71, 0x6c, 0xd2, 0x55, 0xf6, |
954 | 0x9f, 0xa6, 0x19, 0x91, 0x83, 0x8d, 0x38, 0xe9, 0x33, 0xf3, 0xfa, 0x5d, | 954 | 0xab, 0x63, 0xbe, 0x07, 0x0f, 0x08, 0xec, 0xee, 0x7b, 0x00, 0xf7, 0x9c, |
955 | 0xb6, 0xe2, 0x8d, 0xcf, 0x20, 0xce, 0xad, 0xb8, 0x48, 0x6b, 0xaf, 0x39, | 955 | 0x90, 0x7a, 0xcf, 0x47, 0xfe, 0xc1, 0x77, 0x18, 0x4f, 0x94, 0xe8, 0x31, |
956 | 0xf0, 0xd7, 0x8d, 0x2d, 0xac, 0xf6, 0x85, 0x45, 0x4e, 0xf8, 0x76, 0xc6, | 956 | 0x7e, 0x67, 0x26, 0x77, 0x88, 0x9f, 0xad, 0xf7, 0x96, 0xb0, 0x63, 0x86, |
957 | 0x48, 0x3a, 0x1e, 0x7a, 0x9c, 0x9f, 0x0f, 0x3f, 0x5e, 0x80, 0x92, 0x57, | 957 | 0x6f, 0x27, 0xf9, 0x3b, 0x1b, 0xbd, 0x3b, 0x22, 0xf8, 0x91, 0xf1, 0xb4, |
958 | 0xd0, 0xae, 0x93, 0x46, 0x17, 0x6a, 0x5f, 0xe0, 0xef, 0xc5, 0xfe, 0x65, | 958 | 0x31, 0x13, 0x7d, 0xaf, 0x34, 0x3d, 0x85, 0x18, 0x3b, 0xe4, 0x24, 0x62, |
959 | 0x86, 0xba, 0xd5, 0xde, 0x44, 0x8f, 0xda, 0xcf, 0x8a, 0xb0, 0xec, 0x35, | 959 | 0x5a, 0x3e, 0x2f, 0xf9, 0x90, 0x58, 0xa9, 0x92, 0x0b, 0x2b, 0xf3, 0xc2, |
960 | 0x72, 0x9d, 0x47, 0xeb, 0x3e, 0x3d, 0xc8, 0x84, 0xdb, 0xa7, 0xf7, 0xf4, | 960 | 0xff, 0x8b, 0xc7, 0x66, 0x12, 0xd6, 0x4e, 0xe4, 0xf3, 0x93, 0x04, 0x9f, |
961 | 0x3a, 0xeb, 0xd5, 0x7a, 0x72, 0x80, 0x58, 0xd6, 0x2e, 0x52, 0xbe, 0x4a, | 961 | 0x00, 0xfb, 0x53, 0x58, 0x4c, 0x67, 0xfd, 0x2e, 0x5b, 0xf1, 0xc6, 0x67, |
962 | 0x33, 0x4f, 0x1b, 0xcd, 0xe9, 0xdb, 0xf4, 0x3d, 0xdd, 0x9d, 0x31, 0xf3, | 962 | 0x90, 0xe7, 0x96, 0x5b, 0xa4, 0x8d, 0x6d, 0x0e, 0xe2, 0x75, 0x03, 0x0b, |
963 | 0xc2, 0x9b, 0x76, 0x50, 0xf1, 0x5f, 0x27, 0x9d, 0x29, 0x05, 0x79, 0xcd, | 963 | 0x6b, 0x9d, 0x21, 0x51, 0x1b, 0xde, 0xc1, 0x18, 0x49, 0xe7, 0x3e, 0x0f, |
964 | 0x87, 0x6e, 0x05, 0xbd, 0xfc, 0xc3, 0xc8, 0x73, 0xf9, 0x7a, 0xa0, 0x93, | 964 | 0xf2, 0xf3, 0x11, 0xc7, 0x0b, 0xd0, 0xc4, 0x25, 0xb4, 0x6b, 0xa6, 0xfe, |
965 | 0x96, 0x96, 0x10, 0x6b, 0xf1, 0x47, 0x7b, 0x64, 0x7c, 0x71, 0x9a, 0xe9, | 965 | 0x85, 0xd2, 0xef, 0xf1, 0x75, 0xb1, 0x7e, 0x99, 0xa2, 0x56, 0xb5, 0x36, |
966 | 0x72, 0x80, 0xd7, 0x47, 0x43, 0xed, 0x1d, 0xe1, 0x1a, 0x74, 0x89, 0xa8, | 966 | 0xa1, 0xf7, 0xad, 0x08, 0xb3, 0xec, 0x55, 0x6a, 0x9f, 0xfb, 0xcb, 0x31, |
967 | 0x37, 0x1a, 0xf8, 0xd2, 0x44, 0x90, 0xed, 0x02, 0xb9, 0xf7, 0x70, 0x88, | 967 | 0x3d, 0x21, 0x13, 0x35, 0x31, 0xbd, 0xaf, 0x6e, 0x62, 0xaf, 0x36, 0x93, |
968 | 0x9f, 0xfd, 0xfd, 0x52, 0x1a, 0xfe, 0xb2, 0xd0, 0x11, 0x7e, 0x7e, 0x92, | 968 | 0x03, 0xe4, 0xd4, 0xb5, 0x90, 0x8a, 0x55, 0x5a, 0x19, 0xda, 0x6a, 0x4d, |
969 | 0xf1, 0x44, 0x9c, 0x3a, 0xa9, 0xb2, 0xd4, 0xc9, 0x76, 0x41, 0x27, 0xe3, | 969 | 0xdf, 0x76, 0xef, 0xf1, 0xb5, 0x36, 0x8f, 0x93, 0xf3, 0xa6, 0x1d, 0x54, |
970 | 0x89, 0xb1, 0xd0, 0xa8, 0x4f, 0xbc, 0x4b, 0xe4, 0xd4, 0x3c, 0x1c, 0x38, | 970 | 0xfc, 0xd7, 0x4c, 0x67, 0xf2, 0x41, 0xb6, 0xf9, 0xd0, 0xad, 0xa0, 0x97, |
971 | 0xc0, 0x7c, 0x85, 0x77, 0xbd, 0xae, 0xde, 0xe5, 0x7e, 0xc7, 0x2f, 0x6a, | 971 | 0xbf, 0x17, 0xb5, 0x2e, 0x5f, 0x0a, 0x34, 0xd3, 0xf2, 0x32, 0x72, 0x2d, |
972 | 0x38, 0x3f, 0xe2, 0x37, 0x2f, 0xdc, 0xc2, 0xef, 0x51, 0xcd, 0xcf, 0x30, | 972 | 0xfe, 0xf1, 0x80, 0xcc, 0x25, 0x4e, 0x32, 0x5d, 0x0e, 0xb3, 0x7d, 0x34, |
973 | 0x76, 0x0e, 0x53, 0x7e, 0xbe, 0x83, 0xc7, 0x10, 0x63, 0x3b, 0x22, 0xca, | 973 | 0xd4, 0xda, 0x11, 0xce, 0x41, 0x97, 0x88, 0xdf, 0x21, 0x0a, 0xdc, 0x3b, |
974 | 0xe7, 0x8f, 0x50, 0xb6, 0x7a, 0x92, 0x7e, 0xbf, 0xea, 0xf4, 0x09, 0x3f, | 974 | 0x14, 0x64, 0xbf, 0x40, 0xae, 0x3d, 0x1c, 0xe5, 0x67, 0x7f, 0x33, 0x9f, |
975 | 0xc2, 0x7d, 0x96, 0x39, 0xfd, 0x5d, 0xdc, 0xaf, 0x0f, 0x6d, 0xb7, 0x8e, | 975 | 0x44, 0xbc, 0xcc, 0x3c, 0xce, 0xcf, 0x9f, 0x60, 0x3c, 0x11, 0xa3, 0x66, |
976 | 0x09, 0x92, 0xff, 0x7b, 0x61, 0xea, 0x7c, 0x0e, 0xbe, 0x97, 0x1a, 0x15, | 976 | 0x5a, 0x5a, 0x6e, 0x66, 0xbf, 0xa0, 0x99, 0xf1, 0xc4, 0x80, 0xd9, 0xef, |
977 | 0xa3, 0xd6, 0xa5, 0x3b, 0x24, 0xfd, 0xcf, 0x2f, 0x88, 0xb8, 0x5a, 0xbe, | 977 | 0x13, 0xef, 0x12, 0x75, 0x35, 0x9f, 0x0f, 0x1c, 0x66, 0xbe, 0xc2, 0xbb, |
978 | 0x9f, 0x9f, 0x39, 0x87, 0x76, 0x2f, 0x98, 0x74, 0xd3, 0x96, 0xf4, 0x7e, | 978 | 0xfe, 0x5d, 0xbd, 0xab, 0xf6, 0x1d, 0xff, 0x51, 0xc2, 0xf1, 0x71, 0x3f, |
979 | 0x23, 0x10, 0x26, 0xff, 0xcb, 0x88, 0x7d, 0x02, 0x56, 0x33, 0x2f, 0xd8, | 979 | 0x39, 0x37, 0xf0, 0x1b, 0x5c, 0xf3, 0x63, 0x8c, 0x9d, 0x43, 0x94, 0x99, |
980 | 0xfb, 0x58, 0xbf, 0x3f, 0x87, 0xfb, 0xf8, 0xf3, 0x65, 0x9c, 0x07, 0x79, | 980 | 0x6f, 0xe2, 0x31, 0x8c, 0xb3, 0x1f, 0x11, 0xe5, 0xe3, 0xfb, 0xc8, 0x29, |
981 | 0x9c, 0x58, 0xaf, 0x11, 0xef, 0x02, 0xbd, 0x78, 0x20, 0x12, 0x12, 0xfc, | 981 | 0x4e, 0xd1, 0x5f, 0x15, 0xdd, 0x31, 0xe1, 0xfb, 0xb8, 0xcf, 0xb2, 0xb6, |
982 | 0xf7, 0x08, 0xf3, 0x54, 0x87, 0xf0, 0x35, 0xf6, 0xa3, 0xad, 0x3d, 0xc4, | 982 | 0xbf, 0x85, 0xfb, 0xf5, 0x91, 0x5d, 0xab, 0x63, 0x82, 0xe4, 0xff, 0xeb, |
983 | 0xd8, 0xc2, 0xbc, 0x30, 0xb1, 0x0f, 0xe7, 0xf1, 0x3e, 0x3f, 0xd3, 0x48, | 983 | 0x10, 0x35, 0x7f, 0x0d, 0xb1, 0x97, 0x12, 0xe5, 0xa2, 0xa8, 0x57, 0x90, |
984 | 0xf2, 0x10, 0xc6, 0xd3, 0xc4, 0xdc, 0x81, 0x43, 0x13, 0xc4, 0xf3, 0x09, | 984 | 0xf1, 0xe7, 0xab, 0x22, 0x87, 0x96, 0xef, 0xe7, 0x67, 0xce, 0xa1, 0xdd, |
985 | 0xfc, 0xc1, 0xf3, 0x19, 0x42, 0x7d, 0xa7, 0x20, 0xa5, 0xf8, 0x1d, 0xc9, | 985 | 0x55, 0x8b, 0xae, 0xdb, 0x92, 0xde, 0x3f, 0x08, 0x84, 0xc8, 0xff, 0x12, |
986 | 0x92, 0x1c, 0xf7, 0x5c, 0xd5, 0x4f, 0xd2, 0x4f, 0x75, 0x74, 0x44, 0xff, | 986 | 0x72, 0x9f, 0xc4, 0xfe, 0x1a, 0x8e, 0x7d, 0x88, 0xf5, 0xfb, 0xd7, 0x70, |
987 | 0x9e, 0x21, 0x0d, 0xe2, 0xd9, 0x5a, 0x56, 0x70, 0xdc, 0x4b, 0x77, 0x4b, | 987 | 0x1f, 0x7f, 0xbe, 0x84, 0xe3, 0x20, 0x8f, 0x13, 0xf6, 0x1a, 0xf9, 0x2e, |
988 | 0x3d, 0x74, 0x4f, 0xed, 0x69, 0xdd, 0x15, 0x76, 0x19, 0xeb, 0xf0, 0x74, | 988 | 0xd0, 0x8b, 0x87, 0xc3, 0xa6, 0xe0, 0xbf, 0xfb, 0x98, 0xa7, 0x9a, 0x44, |
989 | 0x2f, 0xdd, 0x59, 0xea, 0x20, 0xea, 0x0f, 0x8a, 0x3d, 0xe7, 0xbb, 0xa5, | 989 | 0xac, 0xb1, 0x0b, 0x6d, 0xed, 0xfd, 0xc0, 0x16, 0xce, 0xd0, 0x21, 0x1c, |
990 | 0x32, 0xbf, 0x3f, 0x31, 0x22, 0xfd, 0x3a, 0x0d, 0x1e, 0xb9, 0xeb, 0xc1, | 990 | 0xc7, 0x3a, 0xfd, 0x4c, 0x23, 0xc9, 0x43, 0x18, 0x4f, 0x15, 0x73, 0x07, |
991 | 0x23, 0x1f, 0x08, 0x1e, 0xd9, 0x37, 0xb2, 0x36, 0x8f, 0xec, 0x52, 0xb6, | 991 | 0x8e, 0x0e, 0x11, 0xcf, 0x27, 0xf0, 0xc7, 0x2f, 0xf1, 0x1b, 0x91, 0x4e, |
992 | 0x48, 0x90, 0x3a, 0x15, 0x7f, 0xbc, 0xc4, 0xfc, 0xf1, 0x2c, 0xf3, 0xc7, | 992 | 0x3f, 0xbf, 0x23, 0xc1, 0xef, 0x98, 0xc8, 0xcb, 0x71, 0xcf, 0x15, 0xfd, |
993 | 0xe1, 0x36, 0xfc, 0x61, 0xb8, 0xf8, 0xe3, 0x88, 0xe0, 0x8f, 0x87, 0x46, | 993 | 0x24, 0xe3, 0x54, 0x5f, 0xe9, 0xd3, 0xbf, 0xd1, 0x48, 0x3d, 0x78, 0x76, |
994 | 0xd6, 0xe2, 0x8f, 0xc3, 0xfe, 0xb5, 0x7c, 0x4d, 0xe2, 0xb7, 0x3c, 0x2f, | 994 | 0x59, 0x56, 0xf8, 0x7b, 0x3b, 0xdd, 0xca, 0xb7, 0xd1, 0x6d, 0xb5, 0xa6, |
995 | 0xcc, 0xd9, 0xbb, 0x99, 0xd7, 0x6d, 0xaa, 0xcc, 0x23, 0x67, 0x61, 0x25, | 995 | 0x75, 0x4b, 0xf8, 0x65, 0xac, 0xc3, 0x93, 0xed, 0xb4, 0xbe, 0xdc, 0x44, |
996 | 0x6a, 0xd0, 0xbf, 0x08, 0x9b, 0x6c, 0x55, 0xd8, 0xfc, 0x31, 0x11, 0xc3, | 996 | 0xd4, 0x15, 0x14, 0x6b, 0xce, 0xb7, 0xf2, 0x05, 0x7e, 0xff, 0x97, 0xfb, |
997 | 0xba, 0x28, 0xf8, 0x8b, 0xd7, 0xff, 0x18, 0x72, 0xaa, 0xdc, 0x73, 0xd1, | 997 | 0x64, 0x5c, 0xa7, 0xc2, 0x23, 0xb7, 0x3c, 0x78, 0xe4, 0x03, 0xc1, 0x23, |
998 | 0x4d, 0x37, 0xa3, 0x98, 0x0b, 0x53, 0xcd, 0x05, 0xae, 0x75, 0xe9, 0xfa, | 998 | 0x5f, 0xec, 0xdb, 0x98, 0x47, 0x50, 0xf3, 0x0f, 0xde, 0x08, 0x52, 0xb3, |
999 | 0x90, 0x01, 0xbe, 0x7e, 0xe1, 0x03, 0xf0, 0xe8, 0x72, 0x4f, 0x20, 0x59, | 999 | 0xe2, 0x8f, 0x17, 0x99, 0x3f, 0x9e, 0x65, 0xfe, 0x38, 0xd6, 0x80, 0x3f, |
1000 | 0xf8, 0xe6, 0x08, 0xf0, 0x5f, 0x7e, 0x99, 0x1c, 0xd7, 0x03, 0x7c, 0x3d, | 1000 | 0x8c, 0x1a, 0xfe, 0x38, 0x2e, 0xf8, 0xe3, 0x89, 0xbe, 0x8d, 0xf8, 0xe3, |
1001 | 0x2c, 0x7e, 0xfb, 0x09, 0xb2, 0xf2, 0x8f, 0x88, 0x71, 0x64, 0x9e, 0xbc, | 1001 | 0x98, 0x7f, 0xa3, 0x58, 0x93, 0xaf, 0x35, 0xc0, 0xef, 0x9e, 0xb3, 0xf7, |
1002 | 0x59, 0x1a, 0xa6, 0x5b, 0xa5, 0xdd, 0xb4, 0x5a, 0x1a, 0xa1, 0x37, 0x45, | 1002 | 0x31, 0xaf, 0xdb, 0xb4, 0x34, 0x8f, 0xfa, 0x84, 0xd5, 0xa8, 0x41, 0x3f, |
1003 | 0x2d, 0x0d, 0x99, 0x1b, 0xb9, 0x2a, 0xe6, 0xc8, 0xa0, 0x43, 0x61, 0x6e, | 1003 | 0x13, 0x3e, 0xd9, 0x9a, 0xf0, 0xf9, 0xc7, 0x45, 0xcd, 0xc1, 0xa2, 0xe0, |
1004 | 0xb3, 0xb4, 0x9b, 0x56, 0x96, 0x34, 0x7f, 0x83, 0xb7, 0xc1, 0x2f, 0xf1, | 1004 | 0x2f, 0xb6, 0xff, 0xe3, 0xa8, 0xab, 0xaa, 0x9d, 0x8b, 0x56, 0xba, 0x1e, |
1005 | 0x3e, 0x99, 0x2f, 0xd7, 0xca, 0x33, 0xc9, 0x26, 0x9e, 0x91, 0xf7, 0x80, | 1005 | 0xc5, 0x5c, 0x58, 0x7a, 0x2e, 0x08, 0xeb, 0xbb, 0x6a, 0xef, 0xc8, 0x40, |
1006 | 0x57, 0xf2, 0xad, 0xb9, 0xbe, 0xdd, 0xa1, 0x18, 0x62, 0xf5, 0x82, 0xd4, | 1006 | 0x3c, 0x4b, 0xce, 0x07, 0xe0, 0xd1, 0x95, 0xb6, 0xc0, 0x44, 0xf6, 0x1b, |
1007 | 0x81, 0xb8, 0x45, 0xc3, 0x9a, 0x3c, 0xe4, 0x07, 0x86, 0xfe, 0x2a, 0xaf, | 1007 | 0x7d, 0xc0, 0x7f, 0x99, 0x15, 0x72, 0x9d, 0x0f, 0xf0, 0xf9, 0x90, 0xf8, |
1008 | 0xb9, 0x3c, 0x67, 0x36, 0xe2, 0x9c, 0x46, 0x18, 0x0f, 0x6f, 0x17, 0xf8, | 1008 | 0x6d, 0x2b, 0xc8, 0xca, 0x87, 0xc8, 0x71, 0x64, 0x9e, 0xbc, 0x9e, 0xef, |
1009 | 0x37, 0x61, 0x07, 0x22, 0x49, 0xaa, 0x5d, 0x30, 0x6c, 0xd4, 0x73, 0x4c, | 1009 | 0xa5, 0x1b, 0xf9, 0x7d, 0xb4, 0x96, 0xef, 0xa3, 0x37, 0xc5, 0xbe, 0x1a, |
1010 | 0xf3, 0xf3, 0x0c, 0xe5, 0x6f, 0xda, 0xe6, 0xe0, 0x3f, 0x37, 0xd6, 0xc5, | 1010 | 0xb2, 0x36, 0x72, 0x4d, 0xcc, 0x91, 0x41, 0x47, 0x43, 0xdc, 0x66, 0x79, |
1011 | 0x5e, 0xf2, 0x63, 0xdc, 0x67, 0xac, 0xc3, 0x8d, 0xfd, 0x1a, 0xaa, 0xef, | 1011 | 0x1f, 0xad, 0x2e, 0x6b, 0xfe, 0x06, 0x6f, 0x83, 0x5f, 0x62, 0x9d, 0xb2, |
1012 | 0xd7, 0x74, 0xf3, 0xb8, 0xa5, 0xec, 0xcd, 0xda, 0xdc, 0xae, 0xca, 0xed, | 1012 | 0x66, 0xae, 0x9e, 0x67, 0x26, 0xaa, 0x79, 0x46, 0xdc, 0x03, 0x5e, 0xc9, |
1013 | 0xaa, 0xd8, 0xfb, 0xe3, 0xeb, 0x4b, 0xd8, 0x77, 0x1e, 0xa6, 0xd5, 0x79, | 1013 | 0xd4, 0xd5, 0xfa, 0x22, 0x5f, 0x11, 0xb9, 0x7a, 0x41, 0x6a, 0x42, 0xde, |
1014 | 0xc8, 0x28, 0xfc, 0x21, 0x8d, 0xbd, 0xde, 0xd5, 0x65, 0x5c, 0x87, 0x4f, | 1014 | 0xa2, 0x11, 0x19, 0x3e, 0xea, 0x07, 0x86, 0xce, 0xb1, 0xcd, 0xe5, 0x39, |
1015 | 0xa4, 0xb1, 0xd7, 0xbb, 0xaa, 0xf6, 0x7a, 0x57, 0x97, 0x63, 0x42, 0x6f, | 1015 | 0xb3, 0x91, 0xe7, 0xd4, 0xc7, 0x78, 0xb8, 0x43, 0xe0, 0xdf, 0xb8, 0x1d, |
1016 | 0xe7, 0x4b, 0x4c, 0xf7, 0x92, 0x5f, 0xc5, 0x39, 0xee, 0x53, 0xbf, 0x2d, | 1016 | 0x08, 0x4f, 0x50, 0xe9, 0x69, 0xc3, 0xc6, 0x5e, 0x8f, 0x49, 0x7e, 0x9e, |
1017 | 0xf4, 0x98, 0xf0, 0x69, 0xf7, 0xd9, 0x6b, 0xd3, 0xf0, 0x50, 0x0b, 0x0d, | 1017 | 0xa1, 0xe2, 0x4d, 0xbb, 0x5c, 0xfc, 0x57, 0x8b, 0x75, 0xb1, 0x96, 0xfc, |
1018 | 0x63, 0x02, 0x67, 0xa5, 0xf8, 0x99, 0xc9, 0xd2, 0x63, 0xff, 0x3b, 0x60, | 1018 | 0x10, 0xf7, 0x19, 0x76, 0xb8, 0xb2, 0x5e, 0x43, 0xe5, 0xf5, 0x9a, 0x56, |
1019 | 0x78, 0x46, 0x00, 0xf3, 0x9e, 0x30, 0x34, 0xef, 0xc1, 0xe6, 0x8e, 0xf9, | 1019 | 0x1e, 0xb7, 0x94, 0xbd, 0x19, 0x9b, 0xdb, 0x15, 0xff, 0x6f, 0x40, 0x75, |
1020 | 0x19, 0x20, 0xf7, 0x14, 0xd9, 0x80, 0xfb, 0x16, 0x90, 0xf2, 0x4a, 0x06, | 1020 | 0xeb, 0x41, 0x73, 0x7f, 0x40, 0xf1, 0x25, 0xa0, 0x79, 0x67, 0x19, 0x86, |
1021 | 0xad, 0xbc, 0x02, 0xa6, 0x09, 0x75, 0x88, 0xfe, 0xa6, 0xf5, 0x9f, 0xe5, | 1021 | 0x43, 0x3d, 0xa0, 0x3c, 0x0a, 0x1a, 0x0f, 0x41, 0xcc, 0xf5, 0x1e, 0x5a, |
1022 | 0x60, 0xe3, 0x80, 0x4d, 0x40, 0x73, 0x9b, 0xa7, 0x90, 0x32, 0xf7, 0x0c, | 1022 | 0x03, 0x12, 0x07, 0x8d, 0x89, 0x20, 0xe6, 0x7a, 0x0f, 0x41, 0xe7, 0x7a, |
1023 | 0xac, 0x6f, 0xb1, 0xae, 0x6d, 0xb4, 0x01, 0xef, 0xb1, 0x5e, 0x34, 0x85, | 1023 | 0x0f, 0xad, 0xb1, 0x01, 0x97, 0xdb, 0xcd, 0x53, 0x80, 0xe1, 0x3e, 0x85, |
1024 | 0x85, 0x61, 0x49, 0x0f, 0x03, 0xb0, 0x7e, 0x00, 0xa5, 0x75, 0x50, 0x1d, | 1024 | 0x19, 0xba, 0xce, 0x51, 0x0d, 0x7a, 0x77, 0x52, 0x0c, 0x78, 0x4c, 0x5b, |
1025 | 0x01, 0x4f, 0xef, 0x02, 0x4d, 0x40, 0xf7, 0x39, 0x01, 0xdb, 0xa2, 0xce, | 1025 | 0x50, 0x05, 0x7f, 0x18, 0xba, 0x62, 0x84, 0xa1, 0x0d, 0xb8, 0x9d, 0xe5, |
1026 | 0xfd, 0xca, 0xe0, 0xb5, 0xb2, 0x0d, 0xd0, 0x73, 0xab, 0x16, 0xf5, 0x88, | 1026 | 0x02, 0x34, 0xd3, 0x79, 0x4a, 0x0c, 0x30, 0x3c, 0x23, 0x80, 0x79, 0x4f, |
1027 | 0xc9, 0x83, 0xf2, 0x99, 0x93, 0x0a, 0x03, 0x19, 0x79, 0x81, 0x0d, 0x9a, | 1027 | 0x18, 0x9a, 0xf7, 0x60, 0x73, 0xc7, 0xfc, 0x0c, 0x90, 0x7b, 0x98, 0x6c, |
1028 | 0x17, 0xc0, 0xe1, 0x04, 0x4c, 0xeb, 0xc0, 0x32, 0x6a, 0x8d, 0x2e, 0xd0, | 1028 | 0xc0, 0x7d, 0x0b, 0x48, 0x79, 0x25, 0x83, 0x56, 0x5e, 0x01, 0xd3, 0x84, |
1029 | 0x3c, 0x1e, 0x16, 0x97, 0x7e, 0x90, 0x18, 0x03, 0x54, 0x8c, 0x05, 0xc8, | 1029 | 0x3a, 0x44, 0x7f, 0xd3, 0x7a, 0x0d, 0x79, 0xd8, 0x38, 0x60, 0x13, 0xd0, |
1030 | 0x97, 0x01, 0xb6, 0x29, 0x41, 0x7e, 0x05, 0xe5, 0x05, 0x90, 0xd9, 0x20, | 1030 | 0xdc, 0xe6, 0x29, 0xa4, 0xcc, 0x3d, 0x03, 0xeb, 0x5b, 0xac, 0x6b, 0x1b, |
1031 | 0xbf, 0x83, 0xca, 0x4e, 0x50, 0x5e, 0x04, 0xb2, 0x97, 0x08, 0x41, 0xfd, | 1031 | 0x6d, 0xc0, 0x7b, 0xac, 0x17, 0x4d, 0x61, 0x61, 0x58, 0xd2, 0xc3, 0x00, |
1032 | 0x0c, 0xa4, 0x81, 0xec, 0xe6, 0x29, 0x22, 0x60, 0x7e, 0x52, 0x80, 0x10, | 1032 | 0xac, 0x1f, 0x40, 0x69, 0x1d, 0x54, 0x47, 0xc0, 0xd3, 0xbb, 0x40, 0x13, |
1033 | 0x43, 0x03, 0x3c, 0x1f, 0x10, 0x1b, 0xc6, 0x30, 0xf5, 0x31, 0x64, 0xe4, | 1033 | 0xd0, 0x7d, 0x4e, 0xc0, 0xb6, 0xa8, 0x73, 0xbf, 0x32, 0x78, 0xad, 0x6c, |
1034 | 0x1b, 0x88, 0x19, 0x88, 0x7c, 0xc3, 0xce, 0x70, 0x40, 0x00, 0x16, 0x56, | 1034 | 0x03, 0xf4, 0xfc, 0xaa, 0x45, 0x3d, 0xde, 0xf2, 0xa0, 0x7c, 0xe6, 0xa4, |
1035 | 0xff, 0xff, 0x1f, 0x53, 0x61, 0x01, 0xa6, 0x53, 0xd0, 0x3a, 0xd6, 0xdf, | 1035 | 0xc2, 0x40, 0x46, 0x5e, 0x60, 0x83, 0xe6, 0x05, 0x70, 0x38, 0x01, 0xd3, |
1036 | 0xff, 0x0f, 0x88, 0xb0, 0x30, 0xb4, 0xc0, 0xd7, 0x23, 0xe6, 0xc8, 0x83, | 1036 | 0x3a, 0xb0, 0x8c, 0x5a, 0x93, 0x04, 0x34, 0x8f, 0x87, 0xc5, 0xa5, 0x1f, |
1037 | 0xca, 0xd0, 0x05, 0x40, 0x56, 0x1b, 0xbc, 0x4d, 0xc0, 0x02, 0xbe, 0xef, | 1037 | 0x24, 0xc6, 0x00, 0x15, 0x63, 0x01, 0xf2, 0x65, 0x80, 0x6d, 0x4a, 0x90, |
1038 | 0x79, 0x01, 0xc3, 0x2f, 0x60, 0x99, 0xf5, 0xff, 0xff, 0x52, 0xb8, 0x5a, | 1038 | 0x5f, 0x41, 0x79, 0x01, 0x64, 0x36, 0xc8, 0xef, 0xa0, 0xb2, 0x13, 0x94, |
1039 | 0x10, 0x00, 0x00, 0x19, 0x3f, 0x16, 0x21, 0xc4, 0x7d, 0x00, 0x00, 0x00 }; | 1039 | 0x17, 0x81, 0xec, 0x25, 0x42, 0x50, 0x3f, 0x03, 0x69, 0x20, 0xbb, 0x79, |
1040 | 0x8a, 0x08, 0x98, 0x9f, 0x14, 0x20, 0xc4, 0xd0, 0x00, 0xcf, 0x07, 0xc4, | ||
1041 | 0x86, 0x31, 0x4c, 0x7d, 0x0c, 0x19, 0xf9, 0x06, 0x62, 0x06, 0x22, 0xdf, | ||
1042 | 0xb0, 0x33, 0x1c, 0x10, 0x80, 0x85, 0xd5, 0xff, 0xff, 0xc7, 0x54, 0x58, | ||
1043 | 0x80, 0xe9, 0x14, 0xb4, 0x8e, 0xf5, 0xf7, 0xff, 0x03, 0x22, 0x2c, 0x0c, | ||
1044 | 0x2d, 0xf0, 0xf5, 0x88, 0x0b, 0xe5, 0x41, 0x65, 0xe8, 0x02, 0x20, 0xab, | ||
1045 | 0x0d, 0xde, 0x26, 0x60, 0x01, 0xdf, 0x61, 0xbd, 0x80, 0xe1, 0x17, 0xb0, | ||
1046 | 0xcc, 0xfa, 0xff, 0x7f, 0x29, 0x5c, 0x2d, 0x08, 0x00, 0x00, 0xff, 0x88, | ||
1047 | 0x78, 0xb5, 0x98, 0x7e, 0x00, 0x00, 0x00 }; | ||
1040 | 1048 | ||
1041 | static const u32 bnx2_COM_b09FwData[(0x0/4) + 1] = { 0x0 }; | 1049 | static const u32 bnx2_COM_b09FwData[(0x0/4) + 1] = { 0x0 }; |
1042 | static const u32 bnx2_COM_b09FwRodata[(0x88/4) + 1] = { | 1050 | static const u32 bnx2_COM_b09FwRodata[(0x88/4) + 1] = { |
1043 | 0x08001b68, 0x08001ba4, 0x08001ba4, 0x08001ba4, 0x08001ba4, 0x08001ba4, | 1051 | 0x08001b7c, 0x08001bb8, 0x08001bb8, 0x08001bb8, 0x08001bb8, 0x08001bb8, |
1044 | 0x08001ab4, 0x08001ba4, 0x08001b28, 0x08001ba4, 0x08001a3c, 0x08001ba4, | 1052 | 0x08001ac8, 0x08001bb8, 0x08001b3c, 0x08001bb8, 0x08001a50, 0x08001bb8, |
1045 | 0x08001ba4, 0x08001ba4, 0x08001a48, 0x00000000, 0x08002abc, 0x08002b0c, | 1053 | 0x08001bb8, 0x08001bb8, 0x08001a5c, 0x00000000, 0x08002b74, 0x08002bc4, |
1046 | 0x08002b3c, 0x08002b6c, 0x08002b9c, 0x00000000, 0x0800604c, 0x0800604c, | 1054 | 0x08002bf4, 0x08002c24, 0x08002c58, 0x00000000, 0x08006120, 0x08006120, |
1047 | 0x0800604c, 0x0800604c, 0x0800604c, 0x08006078, 0x08006078, 0x080060b8, | 1055 | 0x08006120, 0x08006120, 0x08006120, 0x0800614c, 0x0800614c, 0x0800618c, |
1048 | 0x080060c4, 0x080060c4, 0x0800604c, 0x00000000, 0x00000000 }; | 1056 | 0x08006198, 0x08006198, 0x08006120, 0x00000000, 0x00000000 }; |
1049 | 1057 | ||
1050 | static struct fw_info bnx2_com_fw_09 = { | 1058 | static struct fw_info bnx2_com_fw_09 = { |
1059 | /* Firmware version: 3.7.1 */ | ||
1051 | .ver_major = 0x3, | 1060 | .ver_major = 0x3, |
1052 | .ver_minor = 0x4, | 1061 | .ver_minor = 0x7, |
1053 | .ver_fix = 0x3, | 1062 | .ver_fix = 0x1, |
1054 | 1063 | ||
1055 | .start_addr = 0x080000b4, | 1064 | .start_addr = 0x080000b4, |
1056 | 1065 | ||
1057 | .text_addr = 0x08000000, | 1066 | .text_addr = 0x08000000, |
1058 | .text_len = 0x7dc0, | 1067 | .text_len = 0x7e94, |
1059 | .text_index = 0x0, | 1068 | .text_index = 0x0, |
1060 | .gz_text = bnx2_COM_b09FwText, | 1069 | .gz_text = bnx2_COM_b09FwText, |
1061 | .gz_text_len = sizeof(bnx2_COM_b09FwText), | 1070 | .gz_text_len = sizeof(bnx2_COM_b09FwText), |
1062 | 1071 | ||
1063 | .data_addr = 0x08007e60, | 1072 | .data_addr = 0x08007f40, |
1064 | .data_len = 0x0, | 1073 | .data_len = 0x0, |
1065 | .data_index = 0x0, | 1074 | .data_index = 0x0, |
1066 | .data = bnx2_COM_b09FwData, | 1075 | .data = bnx2_COM_b09FwData, |
1067 | 1076 | ||
1068 | .sbss_addr = 0x08007e60, | 1077 | .sbss_addr = 0x08007f40, |
1069 | .sbss_len = 0x60, | 1078 | .sbss_len = 0x60, |
1070 | .sbss_index = 0x0, | 1079 | .sbss_index = 0x0, |
1071 | 1080 | ||
1072 | .bss_addr = 0x08007ec0, | 1081 | .bss_addr = 0x08007fa0, |
1073 | .bss_len = 0x88, | 1082 | .bss_len = 0x88, |
1074 | .bss_index = 0x0, | 1083 | .bss_index = 0x0, |
1075 | 1084 | ||
1076 | .rodata_addr = 0x08007dc0, | 1085 | .rodata_addr = 0x08007e98, |
1077 | .rodata_len = 0x88, | 1086 | .rodata_len = 0x88, |
1078 | .rodata_index = 0x0, | 1087 | .rodata_index = 0x0, |
1079 | .rodata = bnx2_COM_b09FwRodata, | 1088 | .rodata = bnx2_COM_b09FwRodata, |
1080 | }; | 1089 | }; |
1081 | 1090 | ||
1082 | static u8 bnx2_CP_b09FwText[] = { | 1091 | static u8 bnx2_CP_b09FwText[] = { |
1083 | /* 0x1f, 0x8b, 0x08, 0x00, 0x0f, 0x34, 0xe7, 0x45, 0x00, 0x03, */ | 1092 | 0xbd, 0x7d, 0x0d, 0x74, 0x5c, 0xd7, 0x5d, 0xe7, 0xff, 0xdd, 0x79, 0x92, |
1084 | 0xbd, 0x7d, | 1093 | 0xc6, 0xb2, 0x6c, 0x3f, 0xcb, 0x13, 0x79, 0x62, 0xab, 0xf6, 0x8c, 0xf4, |
1085 | 0x0d, 0x74, 0x5c, 0x57, 0x7d, 0xe7, 0xff, 0xdd, 0x19, 0x49, 0x63, 0x59, | 1094 | 0x64, 0xab, 0x91, 0x08, 0x2f, 0xae, 0x28, 0x82, 0x9d, 0x84, 0xe9, 0x48, |
1086 | 0x96, 0x9f, 0xe5, 0x89, 0x32, 0x51, 0x84, 0x3d, 0x23, 0x3d, 0xd9, 0x22, | 1095 | 0xb2, 0x9d, 0x34, 0xed, 0xca, 0x8d, 0x5b, 0xb2, 0x9c, 0x02, 0x62, 0x24, |
1087 | 0x12, 0xe1, 0xc5, 0x11, 0xac, 0xda, 0x2a, 0xe9, 0x30, 0x92, 0x3f, 0x12, | 1096 | 0x27, 0xe9, 0x77, 0xd2, 0x04, 0xb6, 0xec, 0xc9, 0x6e, 0x26, 0x23, 0xf9, |
1088 | 0x02, 0xab, 0x10, 0x43, 0xb3, 0x1c, 0x4a, 0xc5, 0x48, 0x4e, 0x02, 0x04, | 1097 | 0x83, 0x74, 0xec, 0x51, 0x12, 0x25, 0xce, 0xa1, 0x3d, 0xbb, 0xaa, 0xa4, |
1089 | 0xea, 0x40, 0xe8, 0x86, 0xdd, 0xec, 0x66, 0x32, 0x92, 0x3f, 0x9a, 0x8e, | 1098 | 0xd8, 0x06, 0x06, 0x8f, 0x93, 0xb8, 0xa5, 0xec, 0xa6, 0x54, 0x28, 0xae, |
1090 | 0x3d, 0x93, 0x44, 0x89, 0xbd, 0xdd, 0x9c, 0xad, 0x90, 0x14, 0x3b, 0x74, | 1099 | 0x09, 0xa1, 0x07, 0x52, 0x48, 0xd9, 0x40, 0x53, 0x2a, 0xdc, 0xb4, 0xcd, |
1091 | 0x07, 0x4f, 0xe2, 0x98, 0x96, 0x73, 0x0a, 0x8d, 0x50, 0x8c, 0x9b, 0xe6, | 1100 | 0x9e, 0x53, 0xb6, 0x01, 0xca, 0x12, 0x68, 0xe8, 0xdb, 0xdf, 0xef, 0xde, |
1092 | 0xb0, 0xdd, 0xd0, 0xa6, 0x34, 0xdb, 0x86, 0x22, 0x8c, 0x81, 0xf4, 0x2c, | 1101 | 0xfb, 0x34, 0xa3, 0x0f, 0xe7, 0xa3, 0xec, 0xe2, 0x73, 0x9e, 0xdf, 0xbc, |
1093 | 0xdd, 0x86, 0x42, 0x77, 0xd3, 0x36, 0xe5, 0xed, 0xef, 0x77, 0xef, 0x7d, | 1102 | 0xfb, 0xee, 0xc7, 0xff, 0xfe, 0xef, 0xff, 0xfb, 0xfe, 0xef, 0xd3, 0x76, |
1094 | 0x9a, 0x91, 0x34, 0xce, 0x07, 0xdd, 0xad, 0xcf, 0x79, 0x7e, 0xf3, 0xee, | 1103 | 0x91, 0x66, 0xb1, 0xff, 0x36, 0xe0, 0x7a, 0x5b, 0xea, 0xf6, 0xd1, 0x6b, |
1095 | 0xbb, 0x1f, 0xff, 0xfb, 0xbf, 0xff, 0xef, 0xfb, 0xbf, 0x4f, 0x97, 0x8b, | 1104 | 0xae, 0xfe, 0xc9, 0xab, 0xf9, 0xec, 0x3a, 0x4d, 0x31, 0x79, 0x13, 0xff, |
1096 | 0x34, 0x8b, 0xfd, 0xb7, 0x01, 0xd7, 0xd5, 0xc9, 0xfd, 0xe3, 0x57, 0x5f, | 1105 | 0x52, 0x6f, 0xa0, 0x0e, 0x3a, 0xf4, 0xa2, 0xb1, 0x78, 0x49, 0x5c, 0x65, |
1097 | 0x39, 0x70, 0x25, 0x9f, 0xa3, 0x91, 0x68, 0x44, 0xde, 0xc4, 0xbf, 0xe4, | 1106 | 0xdc, 0x3b, 0x72, 0xbe, 0xc4, 0x63, 0x99, 0x91, 0x5f, 0x1e, 0xf5, 0x45, |
1098 | 0x1b, 0xa8, 0x83, 0x0e, 0xdd, 0x70, 0x2c, 0x5e, 0x12, 0x53, 0x43, 0xde, | 1107 | 0xb2, 0x95, 0x9e, 0xd4, 0x80, 0xfc, 0x4b, 0x58, 0x48, 0xb8, 0xc2, 0xf2, |
1099 | 0xfe, 0x8c, 0x27, 0xb1, 0xc8, 0x50, 0xee, 0xce, 0x71, 0x4f, 0x24, 0x5d, | 1108 | 0xb7, 0x64, 0x5e, 0xfd, 0x6f, 0x5f, 0xf8, 0xc9, 0xf4, 0xcb, 0xd3, 0x31, |
1100 | 0xee, 0x4b, 0x0e, 0xcb, 0x3f, 0x05, 0xb9, 0x78, 0x54, 0x58, 0xfe, 0x96, | 1109 | 0x89, 0x7b, 0x99, 0x0f, 0x8b, 0xb7, 0x4b, 0xe2, 0xed, 0x19, 0xb9, 0xe3, |
1101 | 0xa1, 0x57, 0x7f, 0xeb, 0x2b, 0xff, 0x2a, 0xf5, 0xf2, 0x4c, 0x44, 0x62, | 1110 | 0xd3, 0xbb, 0xff, 0x46, 0x64, 0x63, 0xd4, 0xd7, 0x4b, 0xe1, 0x17, 0x76, |
1102 | 0xee, 0xd0, 0xed, 0xe2, 0x6e, 0x93, 0x58, 0xe7, 0x50, 0x72, 0xff, 0x23, | 1111 | 0x4b, 0x61, 0x5b, 0x26, 0x39, 0xd2, 0x90, 0x49, 0xc8, 0x17, 0xab, 0x9e, |
1103 | 0xdb, 0x97, 0x44, 0x5a, 0xc3, 0xbe, 0x5e, 0x0a, 0xbe, 0xb2, 0x5d, 0x72, | 1112 | 0x9c, 0xab, 0xca, 0xf0, 0xa9, 0xd2, 0xcb, 0xa1, 0x9b, 0x09, 0x63, 0x13, |
1104 | 0x1d, 0x43, 0x89, 0xb1, 0x86, 0x21, 0x57, 0x9e, 0xaa, 0xc8, 0xe8, 0x89, | 1113 | 0x7d, 0x8e, 0xc4, 0x32, 0x72, 0x61, 0xb4, 0xef, 0x9e, 0x50, 0xf9, 0x32, |
1105 | 0xc2, 0xcb, 0x41, 0x74, 0x28, 0x88, 0x4c, 0x0d, 0x38, 0x12, 0x19, 0x92, | 1114 | 0xe2, 0x65, 0xfc, 0x60, 0x41, 0x5a, 0xfa, 0x2f, 0xf6, 0xa1, 0x4e, 0xe5, |
1106 | 0xb3, 0xe3, 0x03, 0xf7, 0x04, 0xca, 0xf3, 0xfc, 0x45, 0x69, 0x19, 0x3c, | 1115 | 0xe0, 0xb5, 0x8d, 0x27, 0xe2, 0xa2, 0x32, 0x5d, 0xcf, 0xe7, 0x62, 0xd7, |
1107 | 0x37, 0x80, 0xf7, 0x65, 0x41, 0xdd, 0xbd, 0xd7, 0x9c, 0x28, 0xc4, 0x44, | 1116 | 0x88, 0xf2, 0xfd, 0xe0, 0x82, 0x74, 0x05, 0x4f, 0x09, 0xca, 0xcf, 0xc6, |
1108 | 0x0d, 0xf5, 0xbc, 0x90, 0x89, 0x5c, 0x25, 0x7c, 0x7f, 0x56, 0x7a, 0xfc, | 1117 | 0x25, 0x57, 0x95, 0x16, 0x94, 0xe1, 0xde, 0x8c, 0x3a, 0x69, 0x2f, 0x17, |
1109 | 0xa7, 0x05, 0xe5, 0xe5, 0x98, 0x64, 0x2a, 0xd2, 0x82, 0x32, 0xdc, 0x9b, | 1118 | 0x4b, 0x48, 0xb1, 0xfa, 0x63, 0xcd, 0x66, 0xec, 0xaf, 0xaf, 0x33, 0xf7, |
1110 | 0x51, 0x27, 0xe5, 0x66, 0x22, 0xae, 0xe4, 0x2b, 0x3f, 0x5e, 0x67, 0xc6, | 1119 | 0xdd, 0xf6, 0xbe, 0xee, 0x67, 0xdd, 0x4c, 0x3c, 0xae, 0x4e, 0xc8, 0xcb, |
1111 | 0x9d, 0xb3, 0xf7, 0xbf, 0x8e, 0x99, 0x3b, 0xc6, 0x2d, 0xc6, 0x64, 0x29, | 1120 | 0x13, 0x7d, 0x2f, 0x87, 0x31, 0xdf, 0xf7, 0x06, 0xa4, 0x41, 0x06, 0x13, |
1112 | 0x92, 0x10, 0xc0, 0x82, 0x79, 0x25, 0x64, 0xb2, 0x98, 0x94, 0x4c, 0x81, | 1121 | 0x80, 0xa9, 0xec, 0xa0, 0xef, 0x14, 0xda, 0xfe, 0x12, 0x70, 0x0e, 0xf8, |
1113 | 0xb0, 0x45, 0x25, 0xeb, 0x12, 0xae, 0x04, 0xda, 0xb7, 0x39, 0xf5, 0xeb, | 1122 | 0xca, 0x29, 0x29, 0x10, 0xce, 0x72, 0x5c, 0x16, 0x63, 0x49, 0x01, 0xfc, |
1114 | 0xb3, 0xee, 0x0b, 0xa8, 0x9b, 0x44, 0xbd, 0x4e, 0x79, 0x12, 0x75, 0x4f, | 1123 | 0xc0, 0x45, 0xbb, 0x8c, 0xa3, 0x3c, 0x57, 0xe2, 0x7c, 0x5c, 0xc9, 0x7b, |
1115 | 0x57, 0xe2, 0xf2, 0x44, 0xe5, 0x57, 0x25, 0x8d, 0xb6, 0x8f, 0x57, 0x30, | 1124 | 0x1e, 0xe6, 0xd2, 0x8e, 0x36, 0x3b, 0x1d, 0xd3, 0x3f, 0x9e, 0x97, 0xd5, |
1116 | 0x76, 0xb1, 0x51, 0x86, 0xa7, 0x9b, 0x25, 0x33, 0xdd, 0x9d, 0xc8, 0x4a, | 1125 | 0x67, 0xdd, 0xe7, 0x51, 0x37, 0xa5, 0xeb, 0x3d, 0x51, 0x4d, 0xca, 0xe3, |
1117 | 0x10, 0x7c, 0xda, 0xff, 0xa8, 0x8c, 0xb5, 0xa1, 0x7e, 0x91, 0xef, 0x12, | 1126 | 0xd5, 0x84, 0x3c, 0x56, 0xfd, 0x98, 0x64, 0x3d, 0xe2, 0x00, 0xb0, 0x96, |
1118 | 0x2b, 0xde, 0x65, 0xfd, 0x3e, 0x37, 0xab, 0x1c, 0x49, 0xef, 0x4d, 0x25, | 1127 | 0x1b, 0x65, 0x60, 0xaa, 0x59, 0x72, 0x53, 0x9d, 0xc9, 0xbc, 0x84, 0xe1, |
1119 | 0xc6, 0x14, 0x9f, 0x1b, 0x24, 0xd3, 0x8f, 0xe7, 0xd1, 0xa8, 0x44, 0xbc, | 1128 | 0x9d, 0xc1, 0x07, 0x64, 0xa4, 0x15, 0xf5, 0xcb, 0x7c, 0x97, 0x5c, 0xf6, |
1120 | 0x20, 0xb8, 0xc3, 0xbf, 0x0c, 0x70, 0xa4, 0x92, 0x49, 0xc5, 0xb6, 0x6c, | 1129 | 0x2e, 0x1f, 0xf4, 0x78, 0x79, 0xe5, 0x48, 0xf6, 0x60, 0x3a, 0x39, 0xa2, |
1121 | 0x97, 0xca, 0x25, 0x55, 0x5c, 0x72, 0x95, 0x2b, 0x25, 0xd9, 0x16, 0x04, | 1130 | 0xf8, 0xdc, 0x20, 0xb9, 0x5e, 0x3c, 0x0f, 0xbb, 0x12, 0xf3, 0xc3, 0xf0, |
1122 | 0xef, 0xf3, 0x3b, 0x51, 0x2e, 0x32, 0x5c, 0x90, 0xfd, 0x58, 0x23, 0xf4, | 1131 | 0x8e, 0x60, 0x17, 0xe0, 0x48, 0xa7, 0x52, 0x8a, 0x6d, 0xd9, 0x2e, 0x5d, |
1123 | 0x29, 0xbe, 0x1a, 0xda, 0x8c, 0x79, 0xf4, 0xb9, 0xc3, 0xd2, 0x28, 0xe9, | 1132 | 0x48, 0xa9, 0x24, 0xe6, 0x71, 0xb5, 0xa4, 0x5a, 0xc3, 0xf0, 0x3d, 0x81, |
1124 | 0xb8, 0xa4, 0xd5, 0x90, 0x24, 0xd5, 0xd0, 0x3a, 0x94, 0x39, 0xd2, 0xe0, | 1133 | 0x8f, 0x72, 0x91, 0x81, 0x92, 0xdc, 0xae, 0x32, 0x3e, 0xfa, 0x94, 0x40, |
1125 | 0x7d, 0xc1, 0xd2, 0xd2, 0x46, 0x3c, 0xcb, 0xa8, 0x1a, 0x6a, 0x5b, 0x55, | 1134 | 0x65, 0xb6, 0x60, 0x1e, 0x3d, 0xc0, 0x43, 0xa3, 0x64, 0x13, 0x92, 0x55, |
1126 | 0x9e, 0x4a, 0x8a, 0x5a, 0x07, 0x5c, 0xa5, 0x7a, 0xd3, 0x8a, 0x65, 0xb8, | 1135 | 0x19, 0x49, 0xa9, 0xcc, 0x3a, 0x94, 0x39, 0xd2, 0xe0, 0xff, 0x77, 0x4b, |
1127 | 0xeb, 0xb2, 0x0f, 0x36, 0xad, 0x2d, 0xdb, 0xef, 0xac, 0x2c, 0xbb, 0xbd, | 1136 | 0x7f, 0x9b, 0xf0, 0x2c, 0xc3, 0x2a, 0xd3, 0xba, 0xa2, 0x3c, 0x9d, 0x12, |
1128 | 0x85, 0xb0, 0x8a, 0xe2, 0xef, 0xb8, 0x9e, 0x6b, 0x3a, 0xde, 0xed, 0x36, | 1137 | 0xf5, 0xe3, 0x71, 0x8c, 0xd9, 0x9d, 0x55, 0x2c, 0xc3, 0x5d, 0x97, 0x15, |
1129 | 0x60, 0x5e, 0xa3, 0x7e, 0xca, 0xdd, 0xa9, 0x9e, 0x0f, 0xa4, 0x9d, 0x30, | 1138 | 0x9a, 0x56, 0x97, 0x4d, 0x3a, 0xcb, 0xcb, 0x4e, 0xb5, 0x10, 0x56, 0x51, |
1130 | 0xf3, 0x9d, 0xc2, 0x3b, 0x54, 0x1d, 0xf2, 0xb1, 0x6e, 0xae, 0x1c, 0xc2, | 1139 | 0xfc, 0x9d, 0xd4, 0x73, 0xcd, 0x26, 0x3a, 0xbd, 0x06, 0xcc, 0x6b, 0x38, |
1131 | 0xdc, 0xce, 0x4f, 0xa7, 0xdc, 0x2e, 0x85, 0xfb, 0x3c, 0x7f, 0x07, 0x41, | 1140 | 0x48, 0x7b, 0x43, 0xea, 0xb9, 0x50, 0xda, 0x08, 0x33, 0xdf, 0x29, 0xbc, |
1132 | 0xc6, 0xcf, 0xe9, 0x35, 0xfd, 0xee, 0x74, 0x02, 0xcf, 0x80, 0x3f, 0x9e, | 1141 | 0x43, 0xd5, 0x4c, 0x80, 0x75, 0x4e, 0xc8, 0x51, 0xcc, 0xed, 0xd2, 0x54, |
1133 | 0x4e, 0x6d, 0x92, 0xab, 0xed, 0xba, 0x7c, 0x13, 0x63, 0x76, 0xbb, 0x77, | 1142 | 0xda, 0xeb, 0x50, 0xb8, 0xcf, 0xf1, 0x77, 0x18, 0xe6, 0x82, 0x82, 0xa6, |
1134 | 0xa8, 0x6e, 0xd7, 0x57, 0x29, 0x77, 0x56, 0xce, 0xe0, 0x39, 0x08, 0x6e, | 1143 | 0x81, 0x6f, 0x4e, 0x25, 0xf1, 0x0c, 0xf8, 0x13, 0xd9, 0xf4, 0x66, 0xb9, |
1135 | 0xf4, 0x53, 0x89, 0x1c, 0xd6, 0xec, 0x42, 0x21, 0x2e, 0xdf, 0x2b, 0xa4, | 1144 | 0xc9, 0xae, 0xcb, 0x37, 0x31, 0x66, 0xa7, 0x77, 0x87, 0xea, 0xf4, 0x02, |
1136 | 0x40, 0xc5, 0xa9, 0xde, 0x39, 0xe9, 0xf3, 0xe7, 0x00, 0x6f, 0x1e, 0xd7, | 1145 | 0x95, 0xf6, 0x66, 0xe4, 0xf7, 0xf1, 0x1c, 0x86, 0x07, 0x82, 0x74, 0xb2, |
1137 | 0x41, 0xbe, 0x2b, 0xe3, 0x5d, 0x99, 0x6d, 0x83, 0xe0, 0x26, 0xff, 0x37, | 1146 | 0x80, 0x35, 0x7b, 0xb1, 0x94, 0x90, 0x6f, 0x95, 0xd2, 0xa0, 0xfc, 0x74, |
1138 | 0x83, 0xb1, 0x76, 0xc3, 0x17, 0x4f, 0x15, 0xb1, 0x9e, 0x80, 0xf9, 0x74, | 1147 | 0xf7, 0xac, 0xf4, 0x04, 0xb3, 0x80, 0xb7, 0x88, 0xeb, 0x08, 0xdf, 0x55, |
1139 | 0x11, 0xeb, 0x89, 0xb5, 0x7a, 0x5c, 0xaf, 0x7b, 0x2f, 0xd6, 0x9d, 0xb4, | 1148 | 0xf0, 0xae, 0xc2, 0xb6, 0x61, 0x78, 0x53, 0xf0, 0xeb, 0xe1, 0x48, 0x9b, |
1140 | 0x41, 0xba, 0xd8, 0x61, 0x69, 0xf9, 0x03, 0xf6, 0x2e, 0x92, 0x29, 0x3a, | 1149 | 0xe1, 0xa5, 0x2f, 0x96, 0xb1, 0x9e, 0x80, 0xf9, 0x71, 0xac, 0xd3, 0x63, |
1141 | 0x92, 0xf1, 0xff, 0x31, 0x48, 0x6b, 0x7e, 0x11, 0x67, 0xb8, 0x48, 0x5a, | 1150 | 0xe5, 0x88, 0x4e, 0xba, 0xb1, 0xee, 0xa4, 0x0d, 0xd2, 0xc5, 0x1e, 0x4b, |
1142 | 0x6c, 0x00, 0xac, 0x7c, 0xcc, 0xda, 0x7a, 0x1b, 0x1d, 0xe0, 0x96, 0xeb, | 1151 | 0xff, 0xa3, 0xf6, 0x2e, 0x92, 0x03, 0x8d, 0xe5, 0x82, 0x1f, 0x84, 0x59, |
1143 | 0xc0, 0xf7, 0x31, 0xe5, 0x35, 0xd9, 0xf7, 0x21, 0x5f, 0xf0, 0xdf, 0x26, | 1152 | 0xcd, 0x63, 0xe2, 0x0c, 0x94, 0x49, 0xbb, 0x0d, 0x80, 0x95, 0x8f, 0x1f, |
1144 | 0x47, 0xbc, 0x6a, 0xbd, 0x0c, 0x69, 0xb2, 0x92, 0x93, 0xec, 0x83, 0x81, | 1153 | 0xb3, 0xf5, 0xda, 0x1d, 0xe0, 0x96, 0xeb, 0xc0, 0xf7, 0x71, 0xe5, 0x37, |
1145 | 0x0c, 0xfb, 0xc0, 0x13, 0xfb, 0x74, 0x7d, 0xd1, 0x6d, 0x5d, 0xd6, 0xd1, | 1154 | 0xd9, 0xf7, 0x11, 0x2f, 0xf1, 0x1f, 0xe8, 0xcd, 0xaf, 0xd5, 0xcb, 0x91, |
1146 | 0x75, 0xf1, 0x6f, 0x7d, 0x23, 0xc6, 0x70, 0x46, 0x8a, 0xd5, 0xb6, 0x23, | 1155 | 0x26, 0xab, 0x05, 0xc9, 0x3f, 0x18, 0xca, 0x40, 0x00, 0x3c, 0xb1, 0x4f, |
1147 | 0xc5, 0xfc, 0x66, 0x0b, 0x1f, 0x9e, 0x07, 0x9d, 0x4c, 0xe5, 0x82, 0x5d, | 1156 | 0x2f, 0x10, 0xdd, 0xd6, 0x63, 0x1d, 0x5d, 0x17, 0xff, 0xae, 0x69, 0xc4, |
1148 | 0xdb, 0x70, 0x1e, 0x57, 0xd7, 0xa1, 0x6d, 0x17, 0x7c, 0xe0, 0x4a, 0xb6, | 1157 | 0x18, 0xce, 0x60, 0xb9, 0xd6, 0x76, 0xb0, 0xfc, 0xe4, 0x16, 0x0b, 0x1f, |
1149 | 0x30, 0x88, 0x71, 0xe3, 0xb8, 0x07, 0xc1, 0x94, 0x9f, 0x4e, 0x45, 0x65, | 1158 | 0x9e, 0xfb, 0x9d, 0x5c, 0xf5, 0x6f, 0xed, 0xda, 0x46, 0xf3, 0xb8, 0x69, |
1150 | 0x08, 0xcf, 0xa3, 0xe4, 0x3d, 0xe0, 0x4f, 0xa2, 0x99, 0xed, 0xbe, 0x8c, | 1159 | 0x0d, 0xda, 0x0e, 0xc3, 0x89, 0x40, 0x46, 0x54, 0x66, 0x31, 0x9e, 0x2b, |
1151 | 0x80, 0xee, 0xf3, 0x95, 0xd7, 0x97, 0x22, 0x7a, 0x0e, 0xfe, 0x3f, 0x59, | 1160 | 0x89, 0xd3, 0x90, 0xf1, 0xbd, 0x21, 0x59, 0x27, 0x76, 0x5e, 0xb6, 0xdc, |
1152 | 0xdc, 0x70, 0x1c, 0x33, 0xe6, 0x54, 0xb1, 0x43, 0xf2, 0xd3, 0x9e, 0x4c, | 1161 | 0x03, 0xaf, 0x74, 0xa1, 0xdc, 0x11, 0xc8, 0x8d, 0x11, 0x07, 0x65, 0x1d, |
1153 | 0x16, 0x16, 0x7a, 0x95, 0xbc, 0x4c, 0x7e, 0xc7, 0xfa, 0xa5, 0x40, 0xbb, | 1162 | 0x15, 0x94, 0x61, 0xfd, 0xc6, 0x81, 0xaf, 0x7c, 0xa9, 0x5f, 0xaf, 0x65, |
1154 | 0x43, 0x32, 0x5c, 0xf1, 0x24, 0x5f, 0xc0, 0xbd, 0xd8, 0x0d, 0xfa, 0x8d, | 1163 | 0xbe, 0x34, 0x0c, 0xde, 0xcf, 0xe0, 0x77, 0x76, 0xb3, 0x2b, 0x5d, 0xa0, |
1155 | 0x4a, 0x3a, 0x61, 0xd6, 0x26, 0x5f, 0x18, 0xc1, 0xfc, 0x80, 0x6b, 0x8f, | 1164 | 0x43, 0xae, 0xb1, 0xb8, 0xb9, 0xdd, 0xa0, 0xd5, 0xea, 0xeb, 0x4b, 0x2c, |
1156 | 0xbf, 0x07, 0x2d, 0x4c, 0xae, 0x64, 0x06, 0x48, 0x3f, 0x6f, 0x06, 0x96, | 1165 | 0x3d, 0xf7, 0xe0, 0x5f, 0x88, 0xd3, 0x25, 0x78, 0x62, 0x19, 0xf2, 0xf5, |
1157 | 0x98, 0xcc, 0xfa, 0xe0, 0x0b, 0xd7, 0xc0, 0x92, 0x2f, 0xc6, 0xa2, 0xc3, | 1166 | 0xf3, 0x21, 0xe8, 0x19, 0x65, 0x84, 0x99, 0x35, 0x13, 0x32, 0x51, 0xde, |
1158 | 0x98, 0xf7, 0x70, 0xf9, 0x57, 0xd0, 0x7f, 0x8b, 0xfe, 0x0d, 0x7e, 0xb2, | 1167 | 0x26, 0xc5, 0x29, 0x5f, 0xc6, 0x4b, 0xf3, 0xdd, 0x4a, 0x5e, 0x86, 0xac, |
1159 | 0x65, 0x51, 0xdc, 0xe3, 0xb8, 0x13, 0xe6, 0x90, 0x56, 0x21, 0x1b, 0xa6, | 1168 | 0xf1, 0x41, 0x0b, 0x69, 0xf0, 0x41, 0x46, 0x06, 0xaa, 0x18, 0xaf, 0x84, |
1160 | 0x3b, 0x65, 0x12, 0xb4, 0x3a, 0x2c, 0xf8, 0x3d, 0xcf, 0xb9, 0x10, 0xae, | 1169 | 0x7b, 0xb9, 0x13, 0x6d, 0x5d, 0xc9, 0x26, 0xcd, 0x3a, 0x17, 0x4b, 0x63, |
1161 | 0x0e, 0xfd, 0x7b, 0x72, 0x7a, 0x8b, 0x7e, 0xce, 0x8e, 0x76, 0x48, 0x6e, | 1170 | 0xc0, 0x15, 0xd6, 0x8d, 0xb2, 0x41, 0xc3, 0x3c, 0x0c, 0x3a, 0xf4, 0x24, |
1162 | 0x3e, 0x9c, 0x33, 0xe5, 0x05, 0x65, 0x44, 0xea, 0xb0, 0x08, 0x65, 0x46, | 1171 | 0xd7, 0xa7, 0xe1, 0x7c, 0x13, 0xf0, 0xc5, 0x65, 0x26, 0x68, 0xb4, 0x38, |
1163 | 0x10, 0x3c, 0xe8, 0x53, 0x6e, 0x04, 0xc1, 0x69, 0x9f, 0x72, 0xe4, 0x0c, | 1172 | 0x22, 0x7f, 0xc6, 0xdd, 0x01, 0xe0, 0x61, 0xa0, 0x72, 0x0f, 0xfa, 0x6f, |
1164 | 0xe4, 0x03, 0x65, 0x07, 0x79, 0xd9, 0x53, 0x5c, 0xab, 0x4c, 0xa1, 0x17, | 1173 | 0xc1, 0x6f, 0x96, 0x89, 0x2d, 0x73, 0xf5, 0xf3, 0x40, 0x85, 0x30, 0x47, |
1165 | 0xeb, 0xd1, 0x28, 0xd9, 0xfe, 0xe3, 0x84, 0x15, 0x72, 0xe7, 0xa5, 0x4f, | 1174 | 0x74, 0x0f, 0x3e, 0x98, 0x82, 0xfc, 0x01, 0xdd, 0x0f, 0x90, 0x5f, 0xe6, |
1166 | 0x66, 0xbc, 0x5c, 0x22, 0xa2, 0xf1, 0x04, 0xca, 0x82, 0x3c, 0x4c, 0xeb, | 1175 | 0x38, 0x17, 0xc2, 0xb5, 0x4d, 0xff, 0x1e, 0x9f, 0xda, 0xa1, 0x9f, 0xf3, |
1167 | 0x99, 0x75, 0x49, 0xbe, 0xbf, 0x64, 0xeb, 0xc8, 0xaf, 0xb2, 0x4e, 0x74, | 1176 | 0xc3, 0xdb, 0xa4, 0x30, 0x17, 0xcd, 0x99, 0xb2, 0x87, 0xf2, 0x26, 0x7d, |
1168 | 0x4d, 0x9d, 0x7f, 0xa7, 0x0c, 0x5f, 0xf6, 0x62, 0xdd, 0x3a, 0x14, 0xf1, | 1177 | 0x0c, 0x74, 0x05, 0xf9, 0x13, 0x86, 0x0f, 0x06, 0x94, 0x41, 0x61, 0xf8, |
1169 | 0xd8, 0xb5, 0x8d, 0xcf, 0x12, 0x6b, 0x18, 0xfa, 0x3d, 0xbc, 0x7b, 0xee, | 1178 | 0x78, 0x40, 0x99, 0x74, 0x1e, 0xb2, 0x86, 0x72, 0x88, 0x72, 0x61, 0x50, |
1170 | 0x53, 0x8f, 0x7a, 0xf5, 0xde, 0xfd, 0x28, 0xba, 0xf6, 0xdd, 0x94, 0x44, | 1179 | 0x71, 0xdd, 0x73, 0xa5, 0x00, 0xeb, 0xd3, 0x28, 0xf9, 0xde, 0x47, 0x08, |
1171 | 0xbd, 0x54, 0xef, 0x8d, 0xea, 0x4f, 0x1a, 0xa4, 0x35, 0x08, 0x1e, 0xf5, | 1180 | 0x2b, 0x64, 0xd8, 0xb3, 0x1f, 0xcb, 0xf9, 0x85, 0x64, 0x4c, 0xe3, 0x49, |
1172 | 0xc3, 0xf2, 0xc6, 0x86, 0xb5, 0x63, 0x5c, 0x55, 0xa7, 0xec, 0x68, 0x9d, | 1181 | 0xb0, 0x5e, 0x71, 0xc9, 0xea, 0x99, 0x75, 0x48, 0xb1, 0x77, 0xd2, 0xd6, |
1173 | 0xb2, 0xcf, 0xd7, 0x29, 0x7b, 0x7b, 0xe3, 0xda, 0xb2, 0xdb, 0xeb, 0x94, | 1182 | 0x79, 0x49, 0xd7, 0x71, 0x57, 0xd5, 0xf9, 0x75, 0x65, 0x78, 0x3c, 0xc0, |
1174 | 0xcd, 0xd6, 0x29, 0xfb, 0x69, 0x9d, 0x32, 0x69, 0x5a, 0x5b, 0x16, 0xa9, | 1183 | 0x5a, 0xfe, 0xb4, 0x22, 0x1e, 0x3b, 0x76, 0xf1, 0x59, 0xe2, 0x0d, 0x99, |
1175 | 0x53, 0xd6, 0x57, 0xa7, 0x2c, 0x0a, 0xbe, 0xdb, 0x26, 0xf9, 0xf8, 0xbd, | 1184 | 0xaf, 0xe1, 0xdd, 0xb9, 0x3b, 0x1f, 0xf5, 0xd7, 0x7a, 0xb7, 0xb5, 0x61, |
1176 | 0x9c, 0xbb, 0xc5, 0x4d, 0x29, 0xb2, 0x16, 0x37, 0x0d, 0xa8, 0xd7, 0xb9, | 1185 | 0xf5, 0xbb, 0x09, 0x71, 0xfd, 0x74, 0xf7, 0x01, 0xf5, 0x4f, 0x78, 0x17, |
1177 | 0xaa, 0xde, 0x17, 0xeb, 0xd4, 0x6b, 0x44, 0xbd, 0xb6, 0x55, 0xf5, 0x76, | 1186 | 0x86, 0x8f, 0x06, 0x51, 0x79, 0x6f, 0xc3, 0xea, 0x31, 0x7e, 0x76, 0x8d, |
1178 | 0xd4, 0xc1, 0x75, 0x13, 0xea, 0xc5, 0x56, 0xd5, 0x7b, 0xb0, 0x4e, 0x3d, | 1187 | 0xb2, 0xf3, 0x6b, 0x94, 0xfd, 0xc9, 0x1a, 0x65, 0xef, 0x6d, 0x5c, 0x5d, |
1179 | 0x96, 0x7f, 0xc6, 0x8e, 0xd3, 0x07, 0x2d, 0xf4, 0x5a, 0xeb, 0xd5, 0x28, | 1188 | 0xf6, 0xc0, 0x1a, 0x65, 0x4f, 0xaf, 0x51, 0xe6, 0x37, 0xad, 0x2e, 0xdb, |
1180 | 0xd2, 0xce, 0xf2, 0x5e, 0xe8, 0x90, 0x0e, 0x65, 0xe4, 0x02, 0x65, 0x10, | 1189 | 0xb5, 0x46, 0xd9, 0x5b, 0xd7, 0x28, 0x3b, 0xb0, 0x46, 0x99, 0x0b, 0x1e, |
1181 | 0xcb, 0x3a, 0x41, 0xe7, 0x71, 0xd0, 0x1d, 0xe5, 0x28, 0xf8, 0x8c, 0x73, | 1190 | 0xde, 0x25, 0xc5, 0xc4, 0xbd, 0x9c, 0xbb, 0xc5, 0xcd, 0xe7, 0x62, 0xab, |
1182 | 0xa9, 0x6c, 0x90, 0xb1, 0x78, 0x9f, 0x7b, 0xb5, 0x6a, 0x01, 0x8d, 0xa5, | 1191 | 0x71, 0xd3, 0x80, 0x7a, 0xed, 0x2b, 0xea, 0x7d, 0x6d, 0x8d, 0x7a, 0x8d, |
1183 | 0xdc, 0xa4, 0x22, 0xff, 0x49, 0x2e, 0x32, 0xe4, 0xe5, 0x86, 0x45, 0xc5, | 1192 | 0xa8, 0xd7, 0xba, 0xa2, 0xde, 0xcd, 0xee, 0xea, 0x7a, 0x4d, 0xa8, 0x17, |
1184 | 0x95, 0x04, 0x32, 0xe2, 0xab, 0x36, 0x25, 0xf7, 0x80, 0xbf, 0xd2, 0xd0, | 1193 | 0x5f, 0x51, 0xef, 0x77, 0xd7, 0xa8, 0xc7, 0xf2, 0x4f, 0xd9, 0x71, 0x7a, |
1185 | 0x59, 0x37, 0x06, 0xc3, 0x9a, 0xb7, 0x4c, 0xdd, 0x8b, 0xcb, 0x54, 0x5f, | 1194 | 0xa0, 0xd1, 0x5e, 0x6b, 0xbd, 0x1a, 0x45, 0xda, 0x58, 0x1e, 0x40, 0x1f, |
1186 | 0x0e, 0x52, 0x16, 0x0e, 0x8d, 0x7e, 0x2a, 0xe3, 0x2d, 0x0c, 0x36, 0x82, | 1195 | 0xfd, 0xb4, 0x32, 0x32, 0x86, 0xf2, 0x4c, 0xe3, 0x0d, 0x74, 0x9e, 0x04, |
1187 | 0x66, 0xcf, 0xa3, 0xcd, 0x6e, 0xb4, 0xdc, 0x57, 0x8e, 0xca, 0x48, 0x79, | 1196 | 0xdd, 0x51, 0x26, 0x83, 0xcf, 0x7c, 0xf2, 0xfe, 0x06, 0x19, 0x49, 0xf4, |
1188 | 0x00, 0xbc, 0xe0, 0xc8, 0x39, 0x6f, 0xa3, 0x9c, 0xf3, 0x51, 0xb7, 0x12, | 1197 | 0x78, 0x6f, 0x53, 0x2d, 0xa0, 0xb1, 0xb4, 0x97, 0x52, 0xe4, 0x3f, 0x29, |
1189 | 0x91, 0xc5, 0xb8, 0x23, 0x8b, 0x78, 0xce, 0xf8, 0x78, 0x57, 0x09, 0x79, | 1198 | 0x80, 0xb7, 0x0b, 0x03, 0xa2, 0x12, 0x4a, 0x42, 0x19, 0x0c, 0x54, 0xab, |
1190 | 0x6b, 0x40, 0x0e, 0x14, 0x7d, 0x39, 0x5c, 0xbc, 0x41, 0x85, 0x7a, 0x6d, | 1199 | 0x92, 0x7b, 0xc0, 0x5f, 0x59, 0xe8, 0xbf, 0x03, 0xe1, 0x80, 0xe6, 0x2d, |
1191 | 0xa7, 0xbf, 0x5e, 0x1e, 0x73, 0x4d, 0xdf, 0xbb, 0xbd, 0x05, 0x68, 0xd4, | 1200 | 0x53, 0xf7, 0xf2, 0xf2, 0xb9, 0x5f, 0x8e, 0x50, 0xae, 0x66, 0x82, 0x3b, |
1192 | 0xa8, 0x9c, 0xf7, 0x52, 0x89, 0x45, 0xcd, 0x13, 0xff, 0x27, 0x18, 0x41, | 1201 | 0x73, 0xfe, 0x7c, 0x7f, 0x23, 0x68, 0xf6, 0x12, 0xda, 0xec, 0x43, 0xcb, |
1193 | 0x3f, 0xb3, 0x5e, 0xca, 0xfd, 0x03, 0x3c, 0x8f, 0x95, 0x69, 0xcb, 0x54, | 1202 | 0x43, 0x15, 0x57, 0x06, 0x2b, 0x19, 0xf0, 0x82, 0x23, 0x17, 0xfd, 0x4d, |
1194 | 0xfb, 0x9a, 0x44, 0x5f, 0x87, 0x8a, 0x1b, 0xe4, 0x56, 0xdb, 0x7e, 0x97, | 1203 | 0x72, 0x31, 0x40, 0xdd, 0x6a, 0x4c, 0x16, 0x12, 0x8e, 0x2c, 0xe0, 0x39, |
1195 | 0xb7, 0xd0, 0x0b, 0x9e, 0x73, 0x4f, 0x50, 0x86, 0x14, 0x00, 0xd7, 0x5e, | 1204 | 0x17, 0xe0, 0x5d, 0x35, 0xe2, 0xad, 0x8c, 0x1c, 0x2e, 0xf7, 0xcb, 0xb1, |
1196 | 0xf0, 0x36, 0xda, 0x7e, 0x4d, 0xcb, 0x33, 0xd8, 0x3e, 0x85, 0x8d, 0x90, | 1205 | 0xf2, 0x87, 0x55, 0xa4, 0x23, 0x87, 0x82, 0xf5, 0x72, 0xc6, 0x33, 0x7d, |
1197 | 0xcf, 0x7f, 0x17, 0xdc, 0x1a, 0x67, 0x7d, 0x96, 0x51, 0xe7, 0x48, 0x49, | 1206 | 0xef, 0xf3, 0xe7, 0xa1, 0x9d, 0x5d, 0xb9, 0xe4, 0xa7, 0x93, 0x0b, 0x9a, |
1198 | 0x0d, 0x41, 0x26, 0x0c, 0x50, 0x66, 0x26, 0x21, 0x2f, 0x21, 0x7b, 0x8a, | 1207 | 0x27, 0xfe, 0x31, 0x1c, 0x44, 0x3f, 0x33, 0x7e, 0xda, 0xfb, 0x03, 0x0a, |
1199 | 0x3f, 0x0d, 0xd2, 0xd1, 0x5a, 0x39, 0x28, 0xb9, 0x6a, 0x1d, 0x96, 0x25, | 1208 | 0xc9, 0x0a, 0x6d, 0xa9, 0x5a, 0x5f, 0xe3, 0xe8, 0xeb, 0x68, 0x79, 0x83, |
1200 | 0x8d, 0x5c, 0x2d, 0x2e, 0x2d, 0xcb, 0x8a, 0x1c, 0xe4, 0xcb, 0x53, 0x15, | 1209 | 0xdc, 0x6a, 0xdb, 0xef, 0xf5, 0xe7, 0xbb, 0xc1, 0x73, 0xde, 0x29, 0xca, |
1201 | 0xca, 0x85, 0x0f, 0x82, 0x47, 0x3b, 0x65, 0xa4, 0x90, 0xca, 0xa5, 0x65, | 1210 | 0x90, 0x12, 0xe0, 0x3a, 0x08, 0xde, 0x46, 0xdb, 0x2f, 0x09, 0xdb, 0xc0, |
1202 | 0x1b, 0xd6, 0xef, 0xd7, 0xb1, 0xa6, 0x51, 0x5c, 0x0f, 0xad, 0x97, 0x56, | 1211 | 0xf6, 0x2a, 0x6d, 0x82, 0xac, 0xff, 0x87, 0xf0, 0xd6, 0x04, 0xeb, 0xb3, |
1203 | 0x1f, 0xba, 0x9b, 0xe5, 0xe8, 0xb4, 0x9d, 0x36, 0xd2, 0x6f, 0x03, 0x0f, | 1212 | 0x8c, 0xfa, 0x4b, 0x26, 0x55, 0x06, 0x32, 0xa1, 0xaf, 0x0b, 0xfa, 0x2b, |
1204 | 0x93, 0x5c, 0xf3, 0x44, 0x26, 0xe2, 0x8c, 0xd2, 0x5e, 0x19, 0x85, 0x7c, | 1213 | 0x25, 0x83, 0x55, 0xc8, 0x9e, 0xf2, 0x0f, 0xc3, 0xac, 0xcb, 0x31, 0xa2, |
1205 | 0xcc, 0x96, 0xd9, 0x37, 0xe1, 0x4d, 0xd8, 0xdf, 0xb0, 0x9b, 0x0a, 0x9d, | 1214 | 0xb1, 0xa4, 0x50, 0xab, 0xc3, 0x32, 0xd6, 0x23, 0xff, 0x2f, 0x2e, 0xc9, |
1206 | 0xf6, 0x77, 0x0b, 0x7e, 0x27, 0xed, 0x6f, 0xc8, 0xd4, 0x82, 0x67, 0x7f, | 1215 | 0x8a, 0x02, 0xe4, 0x8b, 0xb1, 0xd1, 0xfe, 0x13, 0x78, 0xb4, 0x5d, 0x06, |
1207 | 0xc7, 0xb5, 0x1c, 0x32, 0xbf, 0x13, 0xf8, 0xdd, 0xaf, 0x7f, 0x4f, 0x15, | 1216 | 0x4b, 0xe9, 0x42, 0x56, 0x76, 0x61, 0xfd, 0x7e, 0x0d, 0x6b, 0xea, 0xe2, |
1208 | 0x77, 0xed, 0x52, 0xde, 0x95, 0x92, 0x9d, 0xef, 0x94, 0x03, 0x85, 0x77, | 1217 | 0xfa, 0x93, 0xf5, 0xb2, 0x31, 0x80, 0x1d, 0xc0, 0x72, 0x74, 0xda, 0x46, |
1209 | 0x58, 0xd9, 0x82, 0x4b, 0xbe, 0xe4, 0x98, 0x79, 0x26, 0xf4, 0xba, 0xe7, | 1218 | 0xfb, 0xec, 0x19, 0xe0, 0x61, 0x9c, 0x6b, 0x9e, 0xcc, 0xc5, 0x9c, 0x61, |
1210 | 0x8b, 0x39, 0x67, 0x94, 0xf0, 0xe3, 0xf7, 0x70, 0xa1, 0xcf, 0xdd, 0x24, | 1219 | 0xda, 0x3e, 0xc3, 0x90, 0x8f, 0xf9, 0x0a, 0xfb, 0x26, 0xbc, 0x49, 0xfb, |
1211 | 0xa4, 0x81, 0x29, 0x67, 0xb8, 0xe2, 0xa4, 0x23, 0x43, 0x3d, 0x89, 0x49, | 1220 | 0x1b, 0x36, 0x5b, 0xa9, 0xdd, 0xfe, 0x6e, 0xc1, 0xef, 0x94, 0xfd, 0x0d, |
1212 | 0x39, 0x8c, 0xdf, 0xe2, 0x46, 0x86, 0xbe, 0x84, 0xbb, 0xc1, 0xc1, 0x57, | 1221 | 0x99, 0x5a, 0xf2, 0xed, 0xef, 0x04, 0x7e, 0x77, 0xdb, 0xdf, 0x49, 0xfc, |
1213 | 0xb6, 0x43, 0xb6, 0x16, 0x29, 0x2f, 0x3d, 0xcc, 0x3d, 0x29, 0x67, 0x56, | 1222 | 0xee, 0xd5, 0xbf, 0x27, 0xca, 0x7b, 0xf7, 0x2a, 0xff, 0x6a, 0xc9, 0xcf, |
1214 | 0xd8, 0x58, 0xc4, 0x85, 0x92, 0xec, 0x74, 0xea, 0x78, 0x4e, 0x52, 0xb9, | 1223 | 0xb5, 0xcb, 0xe1, 0xd2, 0x7b, 0xad, 0x6c, 0xc1, 0x25, 0x9f, 0x77, 0xcc, |
1215 | 0x19, 0x30, 0xc4, 0x8d, 0x7e, 0x54, 0xde, 0xe7, 0x83, 0x76, 0xaf, 0x74, | 1224 | 0x3c, 0x01, 0x77, 0x99, 0x6d, 0x0a, 0xce, 0xb0, 0xb6, 0xdd, 0xda, 0x61, |
1216 | 0x64, 0xd7, 0x95, 0x51, 0xd8, 0x44, 0xde, 0xcc, 0x2e, 0xc8, 0x58, 0xc8, | 1225 | 0xeb, 0xf4, 0x78, 0x9b, 0x85, 0x34, 0x30, 0xe1, 0x0c, 0x54, 0x9d, 0x6c, |
1217 | 0xbe, 0x08, 0xe9, 0x41, 0x9d, 0x92, 0xb1, 0xe8, 0x10, 0xb0, 0x7d, 0xaa, | 1226 | 0x2c, 0xd3, 0x95, 0x1c, 0x97, 0x63, 0xf8, 0x2d, 0x5e, 0x2c, 0xf3, 0x79, |
1218 | 0x7f, 0x64, 0xb2, 0x90, 0xbd, 0x5d, 0x0d, 0xed, 0xff, 0x6c, 0x66, 0xe0, | 1227 | 0xdc, 0x0d, 0x0e, 0xbe, 0x00, 0x7d, 0x33, 0x5e, 0xa6, 0xbc, 0xf4, 0x31, |
1219 | 0xad, 0x92, 0xdd, 0xab, 0x80, 0xa3, 0xf6, 0x31, 0xc8, 0x4c, 0xcc, 0x2b, | 1228 | 0xf7, 0x94, 0x9c, 0x5f, 0x66, 0xaf, 0x11, 0x17, 0x4a, 0xf2, 0x53, 0xe9, |
1220 | 0x08, 0x40, 0xcf, 0x90, 0xe7, 0x37, 0xdd, 0x14, 0x19, 0x6a, 0x90, 0xe1, | 1229 | 0x47, 0x0a, 0x92, 0x2e, 0x4c, 0x83, 0x21, 0x0e, 0x04, 0xae, 0xbc, 0x27, |
1221 | 0xbd, 0xed, 0x68, 0xc3, 0x77, 0xc4, 0xd7, 0x79, 0xe0, 0x33, 0x95, 0x1c, | 1230 | 0x00, 0xed, 0x5e, 0xed, 0xc8, 0xde, 0xab, 0x5d, 0xd8, 0x57, 0xfe, 0xf4, |
1222 | 0x11, 0xb9, 0x7b, 0x6a, 0x60, 0xc9, 0x99, 0x2c, 0x7d, 0x10, 0x3c, 0x79, | 1231 | 0x5e, 0xc8, 0xd8, 0x7c, 0xe9, 0xea, 0x18, 0xe9, 0x41, 0x9d, 0x95, 0x11, |
1223 | 0x15, 0xda, 0x3f, 0x80, 0xf6, 0x2f, 0x3b, 0xf9, 0xe9, 0x57, 0x9c, 0xc9, | 1232 | 0x37, 0x03, 0x6c, 0x9f, 0xed, 0x1d, 0x1c, 0x2f, 0xe5, 0x3f, 0xac, 0x32, |
1224 | 0xe9, 0xbf, 0x75, 0xa6, 0xa6, 0xb7, 0x6c, 0xd9, 0x39, 0xb8, 0x65, 0xcb, | 1233 | 0xb7, 0xff, 0x6a, 0xae, 0x6f, 0x17, 0x74, 0x79, 0x18, 0xc6, 0x32, 0x6d, |
1225 | 0xf8, 0x60, 0xd4, 0xea, 0x97, 0x2d, 0x5b, 0xa6, 0x06, 0x07, 0x81, 0x83, | 1234 | 0xd0, 0x4b, 0x5c, 0x57, 0xea, 0xa9, 0x9b, 0x6e, 0x8a, 0x65, 0x1a, 0x64, |
1226 | 0x3e, 0x77, 0x44, 0x3c, 0x77, 0x97, 0x80, 0x7f, 0xe2, 0x1c, 0x93, 0xfa, | 1235 | 0xe0, 0x60, 0x1b, 0xea, 0xb3, 0x9c, 0xb8, 0x72, 0xd0, 0x47, 0x3a, 0x35, |
1227 | 0x27, 0x85, 0xf7, 0x6c, 0xef, 0xe9, 0xf7, 0xc3, 0xd2, 0x97, 0x68, 0x13, | 1236 | 0x28, 0x72, 0xf7, 0x44, 0xdf, 0xa2, 0x33, 0x3e, 0xf9, 0x73, 0xe0, 0xc7, |
1228 | 0x8e, 0x1f, 0xb1, 0x75, 0xda, 0x01, 0xfb, 0x03, 0x76, 0x7d, 0x0b, 0xaa, | 1237 | 0x7e, 0xc9, 0x1f, 0x7c, 0x00, 0xf8, 0x7d, 0xd9, 0x29, 0x4e, 0xbd, 0xe2, |
1229 | 0xc1, 0x63, 0x39, 0xe7, 0xc2, 0x72, 0xae, 0xed, 0x8f, 0xac, 0x2d, 0xbb, | 1238 | 0x8c, 0x4f, 0xfd, 0x9d, 0x33, 0x31, 0xb5, 0x63, 0xc7, 0x50, 0xff, 0x8e, |
1230 | 0x11, 0xe5, 0x7c, 0x26, 0xce, 0x88, 0x17, 0xda, 0x22, 0x0d, 0xda, 0x76, | 1239 | 0x1d, 0xa3, 0xfd, 0xae, 0xd5, 0x2d, 0x3b, 0x76, 0x4c, 0xf4, 0x67, 0x31, |
1231 | 0xcc, 0x16, 0x48, 0x33, 0x51, 0x99, 0x28, 0xb4, 0xa1, 0x0d, 0xe8, 0xe2, | 1240 | 0xff, 0x1e, 0x6f, 0x50, 0x7c, 0x6f, 0x2f, 0x95, 0x7c, 0xc2, 0xac, 0xfd, |
1232 | 0x94, 0xbd, 0x8e, 0x02, 0xb6, 0xbd, 0xe8, 0xeb, 0xe8, 0x21, 0xb4, 0xa3, | 1241 | 0x4c, 0xd0, 0x8d, 0xf7, 0x6c, 0xdf, 0xab, 0xdf, 0x0f, 0x48, 0x4f, 0xb2, |
1233 | 0xcc, 0x48, 0xf5, 0x8a, 0xfa, 0x04, 0xea, 0xf4, 0xb9, 0x9b, 0x85, 0x36, | 1242 | 0x55, 0x38, 0x7e, 0x87, 0xd5, 0x49, 0x6c, 0x07, 0x7a, 0xe9, 0xa5, 0x1d, |
1234 | 0xc7, 0x71, 0xc9, 0x16, 0xc9, 0xdf, 0x3d, 0x80, 0x27, 0x26, 0xc9, 0x76, | 1243 | 0xa8, 0x50, 0x2f, 0x05, 0x7c, 0xd0, 0x26, 0xde, 0x06, 0x1b, 0x82, 0xed, |
1235 | 0x3c, 0x57, 0x0e, 0xc0, 0x0e, 0x69, 0xb0, 0x3a, 0x33, 0x94, 0x17, 0xfc, | 1244 | 0x94, 0x5d, 0xf7, 0x92, 0x6a, 0xf0, 0x63, 0xba, 0x5f, 0x75, 0x36, 0x13, |
1236 | 0x77, 0x87, 0x12, 0xef, 0x80, 0x8c, 0xcd, 0x5d, 0x8e, 0x7a, 0x0e, 0xf0, | 1245 | 0x33, 0x6b, 0xde, 0x63, 0xed, 0xeb, 0x4d, 0x28, 0xe7, 0x33, 0x71, 0x49, |
1237 | 0x42, 0x3b, 0x05, 0x36, 0xcb, 0x5c, 0x5a, 0x32, 0xdb, 0xee, 0xc5, 0xdd, | 1246 | 0x7c, 0xd1, 0xde, 0x69, 0xd0, 0xf6, 0x69, 0xbe, 0x44, 0x5a, 0x72, 0x65, |
1238 | 0xc5, 0x73, 0x1e, 0xf7, 0xb7, 0xe0, 0x3e, 0x89, 0x7b, 0x08, 0x27, 0xf0, | 1247 | 0xac, 0xd4, 0x8f, 0x36, 0xa0, 0x97, 0xb3, 0xf6, 0x3a, 0x81, 0xf1, 0x0e, |
1239 | 0xea, 0x47, 0xac, 0xce, 0xba, 0x06, 0x63, 0xff, 0x6b, 0xc9, 0x94, 0x12, | 1248 | 0xa2, 0xaf, 0x13, 0x47, 0xd1, 0x8e, 0xb2, 0x24, 0xdd, 0x2d, 0xea, 0x41, |
1240 | 0xb4, 0x39, 0x36, 0x66, 0xbc, 0xb4, 0xab, 0x44, 0x6d, 0x56, 0x32, 0x85, | 1249 | 0xd4, 0xe9, 0xf1, 0xb6, 0x08, 0xed, 0x9a, 0x47, 0x24, 0x5f, 0x26, 0xdf, |
1241 | 0xfa, 0xf0, 0x09, 0xbc, 0x83, 0x32, 0x7e, 0x12, 0xbf, 0x1f, 0xa4, 0x4d, | 1250 | 0xd3, 0x36, 0x88, 0x4b, 0xaa, 0x0d, 0xcf, 0xd5, 0xc3, 0xb0, 0x75, 0x1a, |
1242 | 0x3c, 0x25, 0xe3, 0x73, 0x1c, 0xa7, 0x00, 0x98, 0x4a, 0x92, 0x3d, 0xf9, | 1251 | 0x22, 0x7b, 0x43, 0x6a, 0x76, 0xd1, 0xaf, 0x2a, 0xf1, 0x0f, 0xcb, 0xc8, |
1243 | 0x00, 0xae, 0x69, 0x5c, 0x0f, 0xe3, 0xe2, 0xdc, 0xd8, 0xff, 0xe2, 0x26, | 1252 | 0xec, 0x76, 0xd4, 0x33, 0xf6, 0xbc, 0xf2, 0x61, 0x17, 0xcd, 0x66, 0x25, |
1244 | 0x05, 0x5c, 0xf3, 0x39, 0x4b, 0x3a, 0xae, 0xe0, 0x37, 0x69, 0xb8, 0x42, | 1253 | 0xb7, 0xeb, 0x5e, 0xdc, 0x3d, 0x3c, 0x17, 0x71, 0x7f, 0x0b, 0xee, 0xe3, |
1245 | 0xdb, 0x06, 0xf4, 0x5b, 0x09, 0xe9, 0xda, 0xb7, 0xbf, 0x13, 0x9a, 0xaf, | 1254 | 0xb8, 0x47, 0x70, 0x02, 0xe7, 0x41, 0xcc, 0xea, 0xb2, 0x51, 0x8c, 0xfd, |
1246 | 0x73, 0x6d, 0xa0, 0x99, 0xca, 0xa0, 0x96, 0x39, 0x19, 0x0f, 0xf7, 0x0a, | 1255 | 0xef, 0x25, 0x37, 0x09, 0x7a, 0x2d, 0x85, 0x9b, 0x72, 0x7e, 0xd6, 0x53, |
1247 | 0x6c, 0x8f, 0x36, 0xce, 0xd1, 0xb3, 0x65, 0x9e, 0x2e, 0x4b, 0xea, 0xb2, | 1256 | 0xa2, 0xb6, 0x28, 0x99, 0x40, 0x7d, 0xf8, 0x29, 0xfe, 0x11, 0x19, 0x3d, |
1248 | 0x7e, 0x5b, 0x86, 0x7b, 0xa5, 0x41, 0xc6, 0xda, 0x01, 0x31, 0xe5, 0xb3, | 1257 | 0x8d, 0xdf, 0x0f, 0xd2, 0xee, 0x9e, 0x90, 0xd1, 0x59, 0x8e, 0x53, 0x02, |
1249 | 0x84, 0xf8, 0xa4, 0x0c, 0x00, 0xfd, 0xc2, 0x66, 0x38, 0x73, 0x51, 0xf9, | 1258 | 0x4c, 0x93, 0x92, 0x3f, 0xfd, 0x00, 0xae, 0x29, 0x5c, 0x0f, 0xe3, 0xe2, |
1250 | 0xb7, 0xa4, 0x6d, 0xb1, 0xc7, 0x2b, 0xa4, 0x63, 0xd2, 0x76, 0x10, 0xdc, | 1259 | 0xdc, 0xd8, 0xff, 0xc2, 0x66, 0x25, 0x2d, 0xfa, 0x39, 0x4f, 0xfa, 0xae, |
1251 | 0xef, 0x37, 0xa1, 0x7f, 0xf2, 0xbc, 0x48, 0xc3, 0xd1, 0xa8, 0xcc, 0xb8, | 1260 | 0xe2, 0x37, 0x69, 0xbb, 0x4a, 0x1b, 0x08, 0x74, 0x5d, 0x8d, 0xe8, 0x3d, |
1252 | 0xa4, 0x85, 0x77, 0xb4, 0x90, 0x06, 0x1a, 0x3d, 0xd2, 0x70, 0x2d, 0x7f, | 1261 | 0xb0, 0xbf, 0x93, 0x9a, 0xdf, 0x0b, 0xad, 0xa0, 0xa5, 0x6a, 0x56, 0xcb, |
1253 | 0x71, 0x0d, 0xd9, 0x5f, 0x0e, 0xf6, 0x1d, 0xed, 0xbc, 0x1e, 0xd8, 0xce, | 1262 | 0x22, 0xc0, 0x00, 0xb9, 0x03, 0x9b, 0xa4, 0x95, 0x73, 0xec, 0xb5, 0x65, |
1254 | 0x1c, 0xe3, 0x30, 0x9f, 0x5d, 0x05, 0x9e, 0xca, 0x2c, 0xf3, 0x94, 0xc8, | 1263 | 0xbd, 0xba, 0x2c, 0xa5, 0xcb, 0xfa, 0x6c, 0x19, 0xee, 0xd5, 0x06, 0x19, |
1255 | 0x6c, 0x81, 0xb8, 0x09, 0xed, 0x3f, 0xae, 0x33, 0xf1, 0xf3, 0x38, 0xe6, | 1264 | 0x69, 0x03, 0xc4, 0x94, 0xdb, 0x12, 0xe1, 0x93, 0xb2, 0x01, 0x74, 0x8d, |
1256 | 0xcc, 0xfb, 0x19, 0x8b, 0xa7, 0x2f, 0x59, 0x3c, 0x7d, 0xd9, 0xde, 0x5d, | 1265 | 0xf5, 0x3d, 0x7f, 0x59, 0xb9, 0xb8, 0xa8, 0xed, 0xbd, 0x73, 0x55, 0xd2, |
1257 | 0x27, 0xab, 0x6d, 0xc1, 0x05, 0x3c, 0x73, 0x7d, 0xa2, 0x1a, 0x67, 0xd9, | 1266 | 0x37, 0x69, 0x3e, 0x0c, 0xef, 0x0f, 0x9a, 0xd0, 0x3f, 0x65, 0x81, 0x48, |
1258 | 0xc2, 0x0c, 0xee, 0xa8, 0x5b, 0x7c, 0x5c, 0xc6, 0xb5, 0x9d, 0x16, 0x91, | 1267 | 0xc3, 0x09, 0x57, 0xa6, 0x3d, 0xd2, 0xc0, 0xc7, 0x5a, 0x48, 0x03, 0x8d, |
1259 | 0x77, 0x69, 0xd9, 0x06, 0x21, 0xdd, 0x5c, 0x00, 0xcc, 0x0d, 0x92, 0x8b, | 1268 | 0x3e, 0x69, 0xbb, 0x9e, 0xef, 0xb8, 0x86, 0xec, 0xaf, 0x00, 0x1b, 0x92, |
1260 | 0x47, 0xf4, 0xda, 0x47, 0xbd, 0x03, 0x51, 0x43, 0xab, 0xc4, 0xc9, 0x0a, | 1269 | 0xb6, 0x64, 0x17, 0xec, 0x73, 0x8e, 0x71, 0x8c, 0xcf, 0x9e, 0x02, 0xaf, |
1261 | 0x5f, 0xaa, 0x06, 0xa6, 0xb8, 0x95, 0x73, 0x84, 0x8b, 0xb4, 0xfb, 0x88, | 1270 | 0xe5, 0x96, 0x78, 0x4d, 0x64, 0xa6, 0x44, 0xdc, 0x44, 0x36, 0x26, 0xd7, |
1262 | 0x86, 0xeb, 0x16, 0xc8, 0xbb, 0x9c, 0xa8, 0xf6, 0x46, 0xb9, 0x0c, 0xb4, | 1271 | 0x99, 0xf8, 0x39, 0x87, 0x39, 0xf3, 0x7e, 0xde, 0xe2, 0xe9, 0xf3, 0x16, |
1263 | 0xa0, 0xe2, 0xd0, 0x5c, 0xc1, 0xd3, 0xb0, 0x9b, 0xb2, 0x73, 0xb4, 0xa1, | 1272 | 0x4f, 0x4f, 0xda, 0xbb, 0xe7, 0xe4, 0xb5, 0xcd, 0x38, 0x8f, 0x67, 0xae, |
1264 | 0xbb, 0xe8, 0xb7, 0xc4, 0xb2, 0xfd, 0xad, 0xa4, 0x23, 0xa5, 0x60, 0x7f, | 1273 | 0x0f, 0xe8, 0xaa, 0x4a, 0x9e, 0x9b, 0xc6, 0x1d, 0x75, 0xcb, 0xe7, 0x64, |
1265 | 0xe1, 0x59, 0x65, 0xfb, 0x35, 0x9d, 0x3a, 0xca, 0x8b, 0x6b, 0x3b, 0x19, | 1274 | 0x54, 0xdb, 0x6f, 0x31, 0x79, 0x87, 0x96, 0x79, 0x5f, 0xc5, 0x5a, 0x96, |
1266 | 0xbc, 0x12, 0xb1, 0xbe, 0x73, 0x54, 0x79, 0x9b, 0x57, 0x97, 0x25, 0xa9, | 1275 | 0x00, 0x73, 0x83, 0x14, 0x12, 0x31, 0xbd, 0xf6, 0xae, 0xff, 0x5b, 0xae, |
1267 | 0x87, 0xd1, 0x2e, 0x99, 0xed, 0x6f, 0x27, 0x8f, 0xb9, 0xca, 0x03, 0x2e, | 1276 | 0xa1, 0x55, 0xe2, 0x64, 0x99, 0xbf, 0x56, 0x07, 0x53, 0xe4, 0xa3, 0x12, |
1268 | 0x3d, 0xed, 0x1b, 0xe5, 0xd4, 0xc0, 0xc6, 0x55, 0xf5, 0xf5, 0xdd, 0xb1, | 1277 | 0x2e, 0xd2, 0xee, 0xa7, 0x35, 0x5c, 0xb7, 0x40, 0x0e, 0x16, 0x44, 0xb5, |
1269 | 0xcf, 0x51, 0x7b, 0x77, 0xed, 0x3d, 0x69, 0xef, 0xb9, 0xe8, 0x00, 0xef, | 1278 | 0x35, 0xca, 0x95, 0xa0, 0x05, 0x95, 0x80, 0x46, 0x0b, 0x9f, 0x82, 0x3d, |
1270 | 0x8e, 0x44, 0x87, 0x78, 0xc7, 0x1a, 0x0e, 0xb1, 0x0f, 0xcd, 0x57, 0x56, | 1279 | 0x95, 0x9f, 0xa5, 0x9d, 0xde, 0x41, 0xdf, 0x28, 0x9e, 0xef, 0xdd, 0x48, |
1271 | 0xce, 0xf4, 0xb8, 0x79, 0x21, 0x5f, 0xfd, 0xa9, 0xdc, 0x32, 0x67, 0xe4, | 1280 | 0x3a, 0x52, 0x86, 0x6f, 0x1c, 0x95, 0xef, 0xd5, 0x74, 0xea, 0x28, 0x3f, |
1272 | 0xef, 0x2e, 0xc8, 0x20, 0xf8, 0x6f, 0xee, 0xa2, 0x00, 0xfe, 0xbd, 0x65, | 1281 | 0xa1, 0x6d, 0x71, 0xd7, 0xdf, 0xea, 0x5a, 0x9f, 0xde, 0x55, 0xfe, 0x96, |
1273 | 0xb9, 0xa5, 0x42, 0xbc, 0xfd, 0x06, 0xf0, 0xb7, 0x35, 0x4a, 0xde, 0x74, | 1282 | 0x95, 0x65, 0x29, 0xea, 0x67, 0xb4, 0x4b, 0xe5, 0x7b, 0xdb, 0xc8, 0x63, |
1274 | 0x85, 0x72, 0xf7, 0x4e, 0xd1, 0xf6, 0x69, 0x81, 0x38, 0x3f, 0x2b, 0x5c, | 1283 | 0x1e, 0xfc, 0xe1, 0xac, 0xf2, 0xb5, 0xff, 0x55, 0x50, 0x7d, 0x9b, 0x56, |
1275 | 0x9b, 0x7c, 0xe1, 0x19, 0xbd, 0x36, 0x07, 0x0b, 0x8b, 0xc0, 0xcf, 0xd7, | 1284 | 0xd4, 0xd7, 0x77, 0xc7, 0x3e, 0xbb, 0xf6, 0xee, 0xd9, 0x7b, 0xca, 0xde, |
1276 | 0x41, 0xf7, 0x41, 0xb0, 0xe8, 0xe7, 0x41, 0x39, 0x7f, 0x84, 0xdf, 0xe8, | 1285 | 0x0b, 0x6e, 0x1f, 0xef, 0x8e, 0xb8, 0x19, 0xde, 0xb1, 0x86, 0x19, 0xf6, |
1277 | 0xbb, 0xf0, 0x1c, 0xde, 0xb7, 0x4a, 0xbe, 0x44, 0x9e, 0x8b, 0x5a, 0x1e, | 1286 | 0xa1, 0xf9, 0x2a, 0x34, 0xb6, 0x72, 0x97, 0x57, 0x14, 0xf2, 0xd5, 0x57, |
1278 | 0x3e, 0x05, 0x7e, 0xba, 0x0c, 0xfd, 0xa2, 0x6c, 0x80, 0xbf, 0xff, 0x11, | 1287 | 0xe5, 0x96, 0x59, 0x23, 0x97, 0xf7, 0x96, 0xc2, 0x10, 0x3e, 0xa2, 0xb7, |
1279 | 0xef, 0x70, 0x9f, 0xc3, 0x22, 0xb6, 0xd3, 0xd6, 0xe1, 0xd8, 0x5c, 0x3b, | 1288 | 0x00, 0xff, 0x38, 0x7b, 0xb0, 0x22, 0xb7, 0x54, 0x89, 0xb7, 0x4f, 0x02, |
1280 | 0xae, 0x59, 0x5c, 0xfb, 0xad, 0x8f, 0x2f, 0xaf, 0x1b, 0xd7, 0x2b, 0xd5, | 1289 | 0x7f, 0x43, 0x2e, 0x79, 0xd3, 0x13, 0xca, 0xe3, 0xbb, 0x84, 0xf6, 0x6a, |
1281 | 0x9b, 0x93, 0x70, 0xcd, 0x44, 0x1e, 0x2f, 0xb0, 0x3e, 0xe9, 0xff, 0x1f, | 1290 | 0xb1, 0x44, 0x9c, 0x5f, 0x10, 0xae, 0x4d, 0xb1, 0xf4, 0xb4, 0x5e, 0x9b, |
1282 | 0x62, 0x46, 0x17, 0xfc, 0xc9, 0x3a, 0x73, 0x5f, 0xdd, 0x96, 0x6b, 0x5e, | 1291 | 0x23, 0xa5, 0x05, 0xe0, 0xe7, 0xcb, 0xa0, 0xfb, 0x30, 0x5c, 0x08, 0x8a, |
1283 | 0x4b, 0x83, 0xf4, 0x6f, 0x52, 0x83, 0x39, 0xc8, 0x9d, 0xa8, 0xd7, 0x2a, | 1292 | 0xa0, 0x9c, 0x3f, 0xc6, 0x6f, 0xd8, 0x28, 0xa5, 0x67, 0xf1, 0x7e, 0xa3, |
1284 | 0x23, 0xda, 0x27, 0x22, 0x4d, 0x90, 0x06, 0x6e, 0x56, 0x86, 0x36, 0x3f, | 1293 | 0x14, 0x27, 0xc9, 0x73, 0xae, 0xe5, 0xe1, 0xb3, 0xe0, 0xa7, 0x9f, 0x41, |
1285 | 0xa4, 0x0c, 0x6d, 0x3e, 0x03, 0x5a, 0xc4, 0x55, 0x5c, 0x72, 0x0c, 0x6d, | 1294 | 0xbf, 0x28, 0xeb, 0xe3, 0xef, 0x1f, 0xe0, 0x1d, 0xee, 0xb3, 0x58, 0xc4, |
1286 | 0x7e, 0x1d, 0x77, 0x5c, 0xc5, 0x0b, 0x4e, 0xc8, 0xc7, 0xc3, 0xf0, 0xf9, | 1295 | 0x36, 0xda, 0x40, 0x1c, 0x9b, 0x6b, 0xc7, 0x35, 0xa3, 0xaf, 0x5e, 0xef, |
1287 | 0x76, 0x15, 0xa2, 0xce, 0x78, 0x05, 0xf4, 0x5b, 0x8c, 0xa1, 0x7c, 0x81, | 1296 | 0x97, 0x73, 0xbd, 0xd2, 0xdd, 0x05, 0x59, 0x8a, 0x2b, 0xc8, 0xb9, 0x12, |
1288 | 0x38, 0xc7, 0xfc, 0x39, 0xce, 0x56, 0xdb, 0xff, 0xe3, 0x32, 0x51, 0x0c, | 1297 | 0xeb, 0x93, 0xfe, 0xfb, 0xd6, 0x19, 0x1d, 0xb1, 0xa1, 0xd9, 0xdc, 0x57, |
1289 | 0xb4, 0x5d, 0x95, 0x9d, 0xbb, 0x17, 0xf7, 0xf5, 0x5a, 0xce, 0x28, 0x2f, | 1298 | 0xb6, 0xe5, 0x9a, 0xd7, 0xd3, 0x20, 0x7d, 0xa8, 0x74, 0x7f, 0x01, 0x72, |
1290 | 0xad, 0x8c, 0xbc, 0x7a, 0x17, 0xee, 0xdd, 0x89, 0x83, 0xd2, 0xed, 0x46, | 1299 | 0xc7, 0xf5, 0x37, 0xca, 0xa0, 0x96, 0x9d, 0xa4, 0x09, 0xd2, 0xc0, 0xcd, |
1291 | 0xe4, 0x39, 0xf4, 0xf5, 0x43, 0x67, 0xa2, 0xf2, 0x32, 0xae, 0x9f, 0xe0, | 1300 | 0xca, 0xd0, 0xe6, 0xfb, 0x95, 0xa1, 0xcd, 0xa7, 0x41, 0x8b, 0xb8, 0xca, |
1292 | 0x7a, 0x15, 0xd7, 0x2b, 0xe8, 0xf7, 0x45, 0x94, 0xaf, 0x97, 0x05, 0xb7, | 1301 | 0x8b, 0x8e, 0xa1, 0xcd, 0x2f, 0xe3, 0x8e, 0xab, 0xfc, 0xa2, 0x13, 0xf1, |
1293 | 0x19, 0xf5, 0x45, 0x8d, 0x57, 0x5e, 0x70, 0xc6, 0x4e, 0xbe, 0x84, 0x2b, | 1302 | 0xf1, 0x00, 0xfc, 0xca, 0xbd, 0x25, 0xd7, 0x19, 0xad, 0x82, 0x7e, 0xcb, |
1294 | 0xaa, 0x26, 0x2a, 0xcf, 0x3b, 0xd9, 0xb9, 0x60, 0xe3, 0xa2, 0x47, 0x19, | 1303 | 0x71, 0x94, 0xcf, 0x13, 0xe7, 0x98, 0x3f, 0xc7, 0xd9, 0x69, 0xfb, 0x3f, |
1295 | 0xf6, 0xa7, 0x8e, 0xe9, 0x7b, 0x08, 0x73, 0x00, 0x4d, 0x17, 0x17, 0x30, | 1304 | 0x27, 0x63, 0xe5, 0x50, 0xdb, 0x5b, 0xf9, 0xd9, 0x7b, 0x71, 0x5f, 0xaf, |
1296 | 0xf6, 0x33, 0x9a, 0x67, 0x46, 0x20, 0xf3, 0xb3, 0xb0, 0x4b, 0xc6, 0x34, | 1305 | 0xe5, 0x8c, 0xf2, 0xb3, 0xca, 0xc8, 0xab, 0x77, 0xe0, 0xde, 0x99, 0x3c, |
1297 | 0x4c, 0x97, 0x03, 0x3e, 0xf8, 0xba, 0x03, 0xb8, 0xcf, 0x35, 0xca, 0x52, | 1306 | 0x22, 0x9d, 0x5e, 0x4c, 0x9e, 0x45, 0x5f, 0xdf, 0x75, 0xc6, 0xaa, 0x2f, |
1298 | 0x9c, 0x76, 0xe4, 0x97, 0x75, 0xfd, 0x6c, 0xb1, 0x5b, 0xe3, 0x76, 0x66, | 1307 | 0xe3, 0xfa, 0x3e, 0xae, 0x57, 0x71, 0xbd, 0x82, 0x7e, 0x5f, 0x40, 0xf9, |
1299 | 0x0d, 0xff, 0xd0, 0x3f, 0x0b, 0xe5, 0x81, 0x91, 0xc6, 0xb3, 0x05, 0xca, | 1308 | 0x7a, 0x99, 0xf7, 0x9a, 0x51, 0x5f, 0xd4, 0x68, 0xf5, 0x79, 0x67, 0xe4, |
1300 | 0x02, 0xe8, 0x9f, 0xc2, 0x14, 0xee, 0x8d, 0x5a, 0x26, 0xe4, 0x25, 0x94, | 1309 | 0xf4, 0x4b, 0xb8, 0x5c, 0x35, 0x56, 0x7d, 0xce, 0xc9, 0xcf, 0x86, 0x9b, |
1301 | 0x07, 0x6c, 0x47, 0x99, 0x50, 0x2b, 0x77, 0x28, 0x6b, 0x28, 0x7b, 0x28, | 1310 | 0x16, 0x7c, 0xca, 0xb0, 0xaf, 0x3a, 0xa6, 0xef, 0x0c, 0xe6, 0x00, 0x9a, |
1302 | 0x4b, 0xcc, 0x7a, 0x8c, 0x3f, 0x48, 0x19, 0x7e, 0x2d, 0xfc, 0x53, 0xda, | 1311 | 0x2e, 0xcf, 0x63, 0xec, 0xa7, 0x35, 0xcf, 0x0c, 0x42, 0x1f, 0xe4, 0x61, |
1303 | 0x1f, 0x9d, 0xc6, 0x07, 0x99, 0xce, 0x28, 0x23, 0x4f, 0xf7, 0xe8, 0xb5, | 1312 | 0xaf, 0x8c, 0x68, 0x98, 0xb6, 0x03, 0x3e, 0xf8, 0xd3, 0x7d, 0xb8, 0xcf, |
1304 | 0x98, 0x28, 0xa8, 0x38, 0x20, 0x47, 0x19, 0xae, 0x63, 0x7b, 0x71, 0xcf, | 1313 | 0x36, 0xca, 0x62, 0x82, 0xf6, 0xe5, 0x93, 0xba, 0x7e, 0xbe, 0x7c, 0xbd, |
1305 | 0xaa, 0x09, 0x5c, 0xd9, 0x63, 0x1f, 0xc0, 0x6f, 0xae, 0xcd, 0x04, 0xea, | 1314 | 0xc6, 0xed, 0xf4, 0x2a, 0xfe, 0xa1, 0x4f, 0x18, 0xc9, 0x03, 0x23, 0x8d, |
1306 | 0xe1, 0x2a, 0x8e, 0xe2, 0x8e, 0x0b, 0xb6, 0x99, 0x91, 0x23, 0x5c, 0xd3, | 1315 | 0x67, 0x4a, 0x94, 0x05, 0xd0, 0x4d, 0xa5, 0x09, 0xdc, 0x1b, 0xb5, 0x4c, |
1307 | 0x84, 0x5d, 0xd3, 0x2f, 0x03, 0x0f, 0x9c, 0x9f, 0xd2, 0xf1, 0x07, 0xe5, | 1316 | 0x28, 0x4a, 0x24, 0x0f, 0xd8, 0x8e, 0x32, 0xa1, 0x5e, 0xee, 0x50, 0xd6, |
1308 | 0xed, 0x00, 0xde, 0x2b, 0xd6, 0xdf, 0x6d, 0x15, 0xc3, 0x83, 0xb8, 0x7a, | 1317 | 0x50, 0xf6, 0x50, 0x96, 0x98, 0xf5, 0x18, 0x7d, 0x90, 0x32, 0xfc, 0x3a, |
1309 | 0xc9, 0xcf, 0x2d, 0x66, 0xbd, 0x34, 0xed, 0x7e, 0x37, 0x6a, 0x78, 0x31, | 1318 | 0xe8, 0x4d, 0xda, 0x25, 0xbe, 0xf1, 0x4d, 0xa6, 0x72, 0xca, 0xc8, 0xd3, |
1310 | 0x8e, 0xb2, 0x08, 0xca, 0xda, 0x45, 0xf3, 0xfe, 0x32, 0x1e, 0xd3, 0x16, | 1319 | 0xfd, 0x7a, 0x2d, 0xc6, 0x4a, 0x2a, 0x01, 0xc8, 0x51, 0x86, 0xeb, 0xe4, |
1311 | 0x8f, 0xfc, 0xad, 0xec, 0x6f, 0xd0, 0x13, 0x6c, 0xda, 0x8c, 0x37, 0x80, | 1320 | 0x41, 0xdc, 0xf3, 0x6a, 0x0c, 0x57, 0xfe, 0xe4, 0xfb, 0xf0, 0x9b, 0x6b, |
1312 | 0x71, 0x31, 0x97, 0x63, 0x7b, 0xd4, 0x38, 0xe4, 0xf7, 0xb8, 0x47, 0x19, | 1321 | 0x33, 0x86, 0x7a, 0xb8, 0xca, 0xc3, 0xb8, 0xe3, 0x2a, 0xdf, 0xa8, 0x8c, |
1313 | 0xce, 0x38, 0x03, 0xe7, 0xc7, 0x7e, 0x51, 0xae, 0x71, 0xe0, 0x4b, 0xd5, | 1322 | 0x1c, 0xe1, 0x9a, 0x26, 0xed, 0x9a, 0x3e, 0x09, 0x3c, 0x70, 0x7e, 0x4a, |
1314 | 0x87, 0xff, 0x32, 0xd6, 0xec, 0x71, 0xd9, 0x57, 0xbc, 0x5a, 0xfb, 0xd4, | 1323 | 0xc7, 0x38, 0x94, 0xbf, 0x07, 0x78, 0xaf, 0x5a, 0x9f, 0x7a, 0xa3, 0x18, |
1315 | 0x8d, 0x47, 0xcd, 0x7a, 0x88, 0x0a, 0xeb, 0xa1, 0xef, 0x38, 0x6d, 0x9b, | 1324 | 0x1e, 0xc4, 0xd5, 0x4d, 0x7e, 0x6e, 0x31, 0xeb, 0xa5, 0x69, 0x77, 0x5d, |
1316 | 0x31, 0xfd, 0x3e, 0x7a, 0x94, 0xbf, 0x29, 0x9f, 0x6b, 0xe5, 0xbd, 0xb1, | 1325 | 0x83, 0xe1, 0xc5, 0x04, 0xca, 0x62, 0x28, 0x6b, 0x33, 0x3a, 0x73, 0x09, |
1317 | 0x6b, 0xf2, 0x2b, 0x64, 0x1d, 0x6d, 0x0b, 0xac, 0x59, 0xb9, 0x16, 0xef, | 1326 | 0x8f, 0x59, 0x8b, 0x47, 0xfe, 0x56, 0xf6, 0x37, 0xe8, 0x09, 0xb6, 0x2e, |
1318 | 0xf4, 0xf1, 0x29, 0xf3, 0xc8, 0x4f, 0x07, 0xc1, 0x13, 0xaa, 0xc1, 0xf0, | 1327 | 0xe4, 0x35, 0xc6, 0xc5, 0x5c, 0x4e, 0xee, 0x57, 0xa3, 0x65, 0xfa, 0xc9, |
1319 | 0x3e, 0x7d, 0x8d, 0x7a, 0xfc, 0x04, 0xfb, 0x0b, 0xbc, 0x72, 0x02, 0xb6, | 1328 | 0x94, 0xe1, 0x8c, 0x65, 0x70, 0x7e, 0xec, 0x17, 0xe5, 0x1a, 0x07, 0x81, |
1320 | 0xdb, 0xae, 0xe5, 0x3e, 0x20, 0x2b, 0xe3, 0x31, 0x39, 0x59, 0x68, 0x91, | 1329 | 0xd4, 0xe2, 0x04, 0x4f, 0x62, 0xcd, 0xce, 0xc9, 0xa1, 0xf2, 0x47, 0xb4, |
1321 | 0xb9, 0x82, 0x82, 0xc1, 0x60, 0x64, 0x67, 0x44, 0x12, 0x5a, 0xff, 0xd2, | 1330 | 0xdf, 0xde, 0x78, 0xc2, 0xac, 0x87, 0xa8, 0xa8, 0x1e, 0xfa, 0x4e, 0xd0, |
1322 | 0xbe, 0x1b, 0x9e, 0x8e, 0x58, 0xba, 0x83, 0xc3, 0xd2, 0xfc, 0x1b, 0xd0, | 1331 | 0xe6, 0xf9, 0x75, 0xfd, 0xde, 0x3d, 0xc1, 0xdf, 0x49, 0x1d, 0x4f, 0xaa, |
1323 | 0xb1, 0x65, 0xe8, 0xd8, 0x56, 0xe8, 0xe0, 0xd5, 0x32, 0xa2, 0xab, 0x61, | 1332 | 0xc9, 0x7b, 0x63, 0xef, 0x14, 0x97, 0xc9, 0x3a, 0xda, 0x1d, 0x58, 0xb3, |
1324 | 0xad, 0x8c, 0x60, 0x9b, 0x14, 0xbc, 0xf2, 0x83, 0x68, 0x17, 0xd2, 0x5f, | 1333 | 0x4a, 0x3d, 0xde, 0x19, 0x47, 0xa0, 0xcc, 0x23, 0x3f, 0x1d, 0x01, 0x4f, |
1325 | 0x4c, 0xd3, 0x5a, 0x56, 0x72, 0xce, 0xae, 0xca, 0x94, 0xb3, 0xbb, 0xb2, | 1334 | 0x60, 0xf2, 0x9a, 0xf7, 0xe9, 0x83, 0xac, 0xc5, 0x4f, 0x3e, 0x6c, 0x62, |
1326 | 0x5a, 0x07, 0xf5, 0xb9, 0x51, 0x31, 0xb0, 0x9e, 0xd4, 0x71, 0xbc, 0x94, | 1335 | 0x57, 0x4e, 0xc1, 0xa6, 0xdb, 0xbb, 0xd4, 0x07, 0x64, 0x65, 0x22, 0x2e, |
1327 | 0x9f, 0x01, 0x4e, 0x76, 0x83, 0xee, 0x9e, 0x2e, 0xc1, 0x8f, 0xa7, 0x5c, | 1336 | 0xa7, 0x4b, 0x2d, 0x32, 0x5b, 0x52, 0x6d, 0x31, 0x2b, 0x3b, 0x63, 0x92, |
1328 | 0x06, 0xcc, 0x8f, 0x01, 0xe6, 0xd9, 0x92, 0x13, 0xda, 0x06, 0xc2, 0xe0, | 1337 | 0xd4, 0xfa, 0x97, 0x76, 0xdf, 0xc0, 0x54, 0xcc, 0xd2, 0xdd, 0x8d, 0xe8, |
1329 | 0xc9, 0xec, 0x74, 0xbf, 0x2c, 0xce, 0x93, 0x0e, 0x21, 0x03, 0x4a, 0x58, | 1338 | 0xff, 0x93, 0xd0, 0xb1, 0x15, 0xe8, 0xd8, 0x8d, 0xd0, 0xc1, 0x2b, 0x65, |
1330 | 0x4f, 0x7f, 0x1d, 0xec, 0x00, 0x8e, 0x0f, 0xb9, 0x3d, 0xdd, 0xa1, 0xdf, | 1339 | 0xc4, 0xfe, 0x86, 0xd5, 0x32, 0x82, 0x6d, 0xd2, 0xf0, 0xd6, 0x8f, 0xa0, |
1331 | 0x19, 0x7d, 0xde, 0x29, 0x8b, 0xe5, 0xf7, 0x58, 0xd8, 0x0e, 0xd7, 0xc0, | 1340 | 0x5d, 0x44, 0x7f, 0x71, 0x4d, 0x6b, 0x79, 0x29, 0x38, 0x7b, 0xab, 0x13, |
1332 | 0xb6, 0x6e, 0x19, 0xb6, 0xdd, 0x80, 0x6d, 0x4f, 0x5d, 0xd8, 0xea, 0xe9, | 1341 | 0xce, 0xbe, 0xea, 0x4a, 0x1d, 0xd4, 0xe3, 0xb9, 0x62, 0x60, 0x3d, 0x5d, |
1333 | 0xe2, 0x2e, 0xd8, 0x34, 0xe4, 0x8f, 0x10, 0xaf, 0xed, 0x96, 0x1e, 0x6e, | 1342 | 0xa2, 0xed, 0x9a, 0x0e, 0x72, 0xc0, 0xc9, 0x3e, 0xd0, 0xdd, 0x53, 0x93, |
1334 | 0xb7, 0xf6, 0x2e, 0x6d, 0xa2, 0x9f, 0x02, 0x1e, 0xd2, 0x18, 0x7e, 0xcf, | 1343 | 0xf0, 0xef, 0x29, 0x97, 0x01, 0xf3, 0x19, 0xc0, 0x3c, 0x33, 0xe9, 0x44, |
1335 | 0x3d, 0x4a, 0x59, 0x86, 0x72, 0x3e, 0x7f, 0x06, 0x75, 0xf0, 0x3c, 0xf7, | 1344 | 0xb6, 0x81, 0x30, 0x40, 0x33, 0x33, 0xd5, 0x2b, 0x0b, 0x73, 0xa4, 0x43, |
1336 | 0xe7, 0x56, 0x0e, 0xde, 0x65, 0x61, 0xa1, 0x9d, 0x90, 0x86, 0x4d, 0x3c, | 1345 | 0xc8, 0x80, 0x49, 0xac, 0x67, 0xb0, 0x0e, 0x76, 0x00, 0xc7, 0x87, 0xdc, |
1337 | 0xe2, 0x64, 0xe6, 0x08, 0x43, 0x0e, 0xf0, 0xe2, 0x5d, 0xa5, 0xb6, 0x4f, | 1346 | 0x9e, 0xda, 0xa6, 0xdf, 0x19, 0x7d, 0xde, 0x2e, 0x0b, 0x95, 0x3b, 0x2d, |
1338 | 0xde, 0xd9, 0xef, 0x15, 0xb6, 0x1f, 0xf6, 0x1d, 0xce, 0x65, 0xbd, 0xd5, | 1347 | 0x6c, 0xc7, 0xea, 0x60, 0x5b, 0xb7, 0x04, 0xdb, 0x3e, 0xc0, 0xb6, 0x7f, |
1339 | 0xf3, 0x21, 0x7d, 0x85, 0xf6, 0xf5, 0x94, 0x93, 0x5e, 0x33, 0xaf, 0x5a, | 1348 | 0x4d, 0xd8, 0xd6, 0xd2, 0xc5, 0x1d, 0xb0, 0x69, 0xc8, 0x1f, 0x11, 0x5e, |
1340 | 0x9a, 0xa3, 0xbc, 0x8d, 0xca, 0x4e, 0xd0, 0xc9, 0xce, 0x15, 0xb4, 0xa6, | 1349 | 0xdb, 0x2c, 0x3d, 0x94, 0xac, 0x1d, 0x4c, 0x9b, 0xe8, 0x87, 0x80, 0x87, |
1341 | 0xdd, 0x10, 0x4b, 0xc7, 0xeb, 0xec, 0xfc, 0x0e, 0x18, 0xbe, 0xf1, 0x63, | 1350 | 0x34, 0x86, 0xdf, 0xb3, 0x8f, 0x52, 0x96, 0xa1, 0x9c, 0xcf, 0x0f, 0xa1, |
1342 | 0xd0, 0x87, 0x94, 0x37, 0x37, 0x1b, 0xdf, 0x5c, 0x4e, 0x00, 0xd6, 0xf0, | 1351 | 0x0e, 0x9e, 0x67, 0x13, 0x56, 0x0e, 0x7e, 0xc2, 0xc2, 0x42, 0x3b, 0x21, |
1343 | 0x99, 0xb4, 0xc9, 0xdf, 0x94, 0x49, 0x55, 0x5a, 0x34, 0xbe, 0x4b, 0xa7, | 1352 | 0x0b, 0x5b, 0x79, 0xd0, 0xc9, 0xcd, 0x12, 0x86, 0x53, 0x80, 0x17, 0xef, |
1344 | 0x8e, 0x9f, 0x56, 0xed, 0xf5, 0xa8, 0x8c, 0x9a, 0x35, 0x3f, 0xcc, 0x35, | 1353 | 0xaa, 0xf5, 0x7d, 0xf2, 0xce, 0x7e, 0xaf, 0xb2, 0xfd, 0xb0, 0xef, 0x68, |
1345 | 0xa7, 0x2f, 0xd2, 0xfd, 0xc0, 0xa8, 0xe5, 0xaf, 0x54, 0x29, 0x27, 0xbb, | 1354 | 0x2e, 0xeb, 0xad, 0x9e, 0x8f, 0xe8, 0x2b, 0xb2, 0xbb, 0x27, 0x9c, 0xec, |
1346 | 0xed, 0xdc, 0xbf, 0x5c, 0x67, 0xed, 0x5a, 0x97, 0xd7, 0x6e, 0xb4, 0xb2, | 1355 | 0xaa, 0x79, 0xd5, 0xd3, 0x1c, 0xe5, 0xad, 0x2b, 0x43, 0xa0, 0x93, 0xa1, |
1347 | 0x7a, 0x8e, 0x22, 0x5d, 0x0f, 0x44, 0xb5, 0x6f, 0x2b, 0xca, 0x97, 0x46, | 1356 | 0x65, 0xb4, 0xa6, 0xdd, 0x13, 0x4b, 0xc7, 0xeb, 0xec, 0xfc, 0x0e, 0x1b, |
1348 | 0x8f, 0xf2, 0x93, 0xb6, 0x12, 0xca, 0x67, 0xfb, 0xdc, 0x36, 0xd0, 0xdb, | 1357 | 0xbe, 0x09, 0xe2, 0xd0, 0x87, 0x94, 0x37, 0xff, 0xc5, 0xf8, 0xec, 0xf2, |
1349 | 0x53, 0x6b, 0xec, 0xae, 0xa4, 0x95, 0x9b, 0xf4, 0x83, 0xc3, 0x31, 0x72, | 1358 | 0xe5, 0x06, 0xc6, 0x69, 0xcd, 0x33, 0x69, 0x93, 0xbf, 0x29, 0x93, 0x6a, |
1350 | 0x56, 0x4e, 0xe6, 0xd0, 0xff, 0x94, 0xb3, 0xb3, 0x52, 0x4f, 0x5e, 0x86, | 1359 | 0xb4, 0x68, 0x7c, 0x9a, 0x76, 0x8c, 0x55, 0x6f, 0xc7, 0xbb, 0x32, 0x6c, |
1351 | 0x72, 0x92, 0xf3, 0xb9, 0x57, 0xee, 0x78, 0x90, 0x3c, 0x7a, 0xbb, 0xb6, | 1360 | 0xd6, 0xfc, 0x18, 0xd7, 0x9c, 0x3e, 0x4a, 0xe7, 0x03, 0xc3, 0x96, 0xbf, |
1352 | 0xaf, 0xaf, 0xda, 0x71, 0x00, 0xf8, 0x23, 0xfc, 0x8b, 0x9b, 0x60, 0x32, | 1361 | 0xd2, 0x93, 0x05, 0xb9, 0xd5, 0xce, 0xfd, 0xd2, 0x1a, 0x6b, 0xb7, 0x71, |
1353 | 0x40, 0xe7, 0xa6, 0x65, 0xdc, 0xae, 0xdb, 0xf8, 0xf2, 0xfa, 0xf3, 0x6a, | 1362 | 0x69, 0xed, 0x86, 0xab, 0x2b, 0xe7, 0x28, 0xd2, 0xf1, 0x80, 0xab, 0x7d, |
1354 | 0xc7, 0x6f, 0xc6, 0x59, 0x95, 0x85, 0x59, 0xdb, 0xb1, 0xb0, 0xeb, 0x56, | 1363 | 0x5e, 0xfa, 0xf0, 0x8d, 0x3e, 0xe5, 0x27, 0x6d, 0x25, 0x94, 0xcf, 0xf4, |
1355 | 0xdb, 0xb2, 0x9c, 0x03, 0xed, 0xd9, 0x46, 0x63, 0x0b, 0x16, 0x69, 0x7f, | 1364 | 0x78, 0xad, 0xf0, 0x0d, 0xbe, 0xb8, 0xca, 0xee, 0x4a, 0x59, 0xb9, 0x49, |
1356 | 0x52, 0x76, 0xd1, 0xfe, 0x8c, 0x35, 0x4a, 0x33, 0xe7, 0x33, 0x68, 0xcb, | 1365 | 0xff, 0x38, 0x1a, 0xa3, 0x60, 0xe5, 0x64, 0x01, 0xfd, 0x4f, 0x38, 0x43, |
1357 | 0x68, 0xa7, 0xae, 0x9e, 0xdf, 0x6a, 0xff, 0x91, 0x70, 0x12, 0x6e, 0x43, | 1366 | 0xd5, 0xb5, 0xe4, 0x65, 0x24, 0x27, 0x39, 0x9f, 0x7b, 0xe5, 0x8e, 0x07, |
1358 | 0x5b, 0x49, 0x45, 0xd8, 0x02, 0x19, 0xf5, 0xaf, 0xd5, 0x6b, 0xa0, 0x68, | 1367 | 0xc9, 0xa3, 0x25, 0x6d, 0x5f, 0x5f, 0xb3, 0xe7, 0x30, 0xf0, 0x47, 0xf8, |
1359 | 0xbb, 0xee, 0xf8, 0x76, 0x83, 0x89, 0x31, 0x27, 0xd1, 0x3f, 0xc7, 0x24, | 1368 | 0x17, 0x36, 0xc3, 0x64, 0x80, 0xce, 0xcd, 0xca, 0xa8, 0x5d, 0xb7, 0xd1, |
1360 | 0xff, 0xf1, 0x4e, 0x3b, 0xbf, 0x9e, 0x2c, 0xab, 0xd5, 0x3d, 0x97, 0x2d, | 1369 | 0xa5, 0xf5, 0xe7, 0x35, 0x0c, 0xdd, 0xc8, 0x58, 0xae, 0xb2, 0x30, 0x6b, |
1361 | 0xe3, 0x6f, 0xe7, 0x8a, 0x35, 0x0a, 0xf1, 0x17, 0xd2, 0x45, 0x2d, 0x0e, | 1370 | 0x3b, 0x16, 0x76, 0xdd, 0x4a, 0x5b, 0x96, 0x73, 0xa0, 0x3d, 0xdb, 0x68, |
1362 | 0x49, 0x13, 0xa4, 0x85, 0x90, 0x16, 0xb7, 0x5a, 0x7d, 0x13, 0xd2, 0xde, | 1371 | 0x6c, 0xc1, 0x32, 0xed, 0x4f, 0xca, 0x2e, 0xda, 0x9f, 0x57, 0x37, 0x4a, |
1363 | 0xa5, 0xa0, 0xbd, 0xfb, 0x80, 0x27, 0xca, 0x70, 0xc6, 0xed, 0x36, 0xe3, | 1372 | 0x33, 0xe7, 0x93, 0xb5, 0x65, 0xb4, 0x53, 0x57, 0xce, 0x6f, 0xa5, 0x5f, |
1364 | 0xf9, 0x08, 0x9e, 0x43, 0x3e, 0xb9, 0x98, 0x0c, 0xa7, 0xfc, 0x66, 0x9b, | 1373 | 0x49, 0x38, 0x09, 0xb7, 0xa1, 0xad, 0x94, 0x22, 0x6c, 0xa1, 0x0c, 0x07, |
1365 | 0x8c, 0x95, 0xfb, 0xa1, 0x9f, 0xcb, 0x36, 0x9c, 0x37, 0xe5, 0xff, 0x57, | 1374 | 0xd7, 0xe9, 0x35, 0x50, 0xb4, 0x5d, 0xf7, 0x34, 0x34, 0x9a, 0x38, 0xf6, |
1366 | 0xe9, 0x77, 0x35, 0x1a, 0x3b, 0xfd, 0x43, 0x8d, 0x94, 0xaf, 0x9b, 0xe4, | 1375 | 0x5e, 0xf4, 0xcf, 0x31, 0xc9, 0x7f, 0xbc, 0xd3, 0xce, 0x5f, 0x4b, 0x96, |
1367 | 0x60, 0x4d, 0xd9, 0xc5, 0xe4, 0x77, 0xed, 0x9c, 0x2f, 0xff, 0x7f, 0x30, | 1376 | 0xd5, 0xeb, 0x9e, 0x2b, 0x97, 0xf0, 0x37, 0xb4, 0x6c, 0x8d, 0x22, 0xfc, |
1368 | 0xe7, 0xc4, 0xaa, 0x39, 0xbb, 0x76, 0xce, 0x15, 0xbc, 0x6f, 0xc3, 0xfb, | 1377 | 0x45, 0x74, 0x51, 0x8f, 0x43, 0xd2, 0x04, 0x69, 0x21, 0xa2, 0xc5, 0x9d, |
1369 | 0x16, 0xea, 0x82, 0x64, 0x55, 0xde, 0x58, 0x5c, 0xe8, 0x79, 0xd5, 0xca, | 1378 | 0x56, 0xdf, 0x44, 0xb4, 0xb7, 0x15, 0xb4, 0x77, 0x1f, 0xf0, 0x44, 0x19, |
1370 | 0x89, 0x50, 0x46, 0x70, 0x5e, 0x1f, 0xb1, 0x73, 0x78, 0xa0, 0x66, 0x5e, | 1379 | 0xce, 0x78, 0xde, 0x16, 0x3c, 0x1f, 0xc7, 0x73, 0xc4, 0x27, 0x91, 0x0c, |
1371 | 0x1f, 0x79, 0x13, 0xf3, 0xea, 0x5c, 0x31, 0xaf, 0x5d, 0x17, 0x9d, 0x57, | 1380 | 0xa7, 0x4d, 0xb4, 0x52, 0x8e, 0x53, 0x86, 0xc7, 0x61, 0xf7, 0x50, 0xd6, |
1372 | 0x3d, 0x1e, 0x27, 0x2f, 0x87, 0xf3, 0x8b, 0xc9, 0x8d, 0x05, 0xce, 0x71, | 1381 | 0x6f, 0xb7, 0xfc, 0x94, 0xb3, 0xbc, 0x44, 0x5d, 0xf0, 0xfb, 0xe8, 0xe7, |
1373 | 0x27, 0xe6, 0x48, 0x18, 0xc2, 0x39, 0x0e, 0xd9, 0x39, 0x8a, 0xea, 0xda, | 1382 | 0x86, 0x46, 0x63, 0xa7, 0x17, 0x1b, 0x29, 0x5f, 0x37, 0xcb, 0x91, 0xba, |
1374 | 0xf1, 0x73, 0xf8, 0x5d, 0x3b, 0x3f, 0xea, 0xfe, 0x1f, 0x83, 0xa6, 0x9b, | 1383 | 0xb2, 0xcb, 0xc9, 0xef, 0xfa, 0x39, 0x6f, 0xff, 0x7f, 0x30, 0xe7, 0xe4, |
1375 | 0x24, 0xd3, 0xdf, 0x64, 0xe5, 0xff, 0x97, 0xe5, 0xd6, 0x22, 0xd7, 0x3a, | 1384 | 0x8a, 0x39, 0x7b, 0x76, 0xce, 0x55, 0xbc, 0x6f, 0xc5, 0xfb, 0x16, 0xea, |
1376 | 0x95, 0x16, 0xd9, 0xa3, 0xf6, 0x15, 0x9f, 0x6d, 0x64, 0x8c, 0x7f, 0x97, | 1385 | 0x82, 0x54, 0x4d, 0xde, 0x58, 0x5c, 0x68, 0x7d, 0x56, 0x2f, 0x27, 0x22, |
1377 | 0x6f, 0xf5, 0x18, 0xf4, 0xc5, 0x6e, 0xd8, 0x7c, 0x3b, 0x0b, 0x6a, 0x20, | 1386 | 0x19, 0xc1, 0x79, 0x1d, 0xb5, 0x73, 0xf8, 0x7c, 0xdd, 0xbc, 0x8e, 0xbe, |
1378 | 0x22, 0x41, 0x70, 0x9b, 0xdf, 0x8c, 0xb1, 0x37, 0x6a, 0x5f, 0x75, 0x6d, | 1387 | 0x89, 0x79, 0xb5, 0x2f, 0x9b, 0xd7, 0xde, 0xcb, 0xce, 0x6b, 0x2d, 0x1e, |
1379 | 0x7c, 0xfd, 0x99, 0x46, 0xf1, 0x68, 0x6f, 0x50, 0x9f, 0x43, 0xdf, 0x1d, | 1388 | 0x27, 0x2f, 0x47, 0xf3, 0x8b, 0xcb, 0x81, 0x12, 0xe7, 0x38, 0x84, 0x39, |
1380 | 0xa3, 0x0d, 0x96, 0x81, 0x9d, 0x9c, 0x4e, 0x44, 0xb4, 0x2d, 0x46, 0x9d, | 1389 | 0x12, 0x86, 0x68, 0x8e, 0x19, 0x3b, 0x47, 0x51, 0x1d, 0x7b, 0x7e, 0x0a, |
1381 | 0x98, 0x4a, 0xa4, 0xa5, 0x2c, 0xd9, 0x63, 0xe9, 0x84, 0x12, 0x8e, 0x01, | 1390 | 0xbf, 0xeb, 0xe7, 0x47, 0xdd, 0xff, 0xf7, 0xa0, 0xe9, 0x26, 0xf8, 0xc4, |
1382 | 0x5b, 0x0d, 0x36, 0xe4, 0xad, 0x90, 0x35, 0xb7, 0x56, 0xf6, 0xaa, 0x5b, | 1391 | 0x4d, 0x56, 0xfe, 0x3f, 0x29, 0xb7, 0x96, 0xb9, 0xd6, 0xe9, 0xac, 0xc8, |
1383 | 0x60, 0xef, 0xdc, 0x72, 0xf2, 0x03, 0xea, 0x36, 0xd8, 0x3a, 0xb7, 0x9d, | 1392 | 0x7e, 0x75, 0xa8, 0xfc, 0x72, 0x23, 0xf7, 0x11, 0xf6, 0x06, 0x56, 0x8f, |
1384 | 0xbc, 0x41, 0xed, 0x83, 0x6d, 0xb3, 0x0f, 0x76, 0xce, 0xbe, 0x0a, 0x6d, | 1393 | 0x41, 0x5f, 0xec, 0x83, 0xcd, 0x37, 0x54, 0x52, 0x7d, 0x31, 0x09, 0xc3, |
1385 | 0xcf, 0x9b, 0x41, 0x7b, 0x9d, 0x35, 0xb4, 0x46, 0x1b, 0x87, 0xf3, 0x23, | 1394 | 0xdb, 0x82, 0x66, 0x8c, 0xbd, 0x49, 0xfb, 0xaa, 0xab, 0x63, 0xf8, 0xcf, |
1386 | 0xee, 0x8f, 0x71, 0x0d, 0xfc, 0xa4, 0x7a, 0x45, 0xaf, 0x4b, 0xdb, 0x8a, | 1395 | 0x36, 0x8a, 0x4f, 0x7b, 0x83, 0xfa, 0x1c, 0xfa, 0xee, 0x24, 0x6d, 0xb0, |
1387 | 0xb2, 0xd7, 0x92, 0x55, 0xa1, 0x7e, 0xda, 0x60, 0xe3, 0x46, 0x94, 0xb7, | 1396 | 0x1c, 0xec, 0xe4, 0x6c, 0x32, 0xa6, 0x6d, 0x31, 0xea, 0xc4, 0x74, 0x32, |
1388 | 0xaf, 0x45, 0x5b, 0xa4, 0x11, 0x17, 0x78, 0x26, 0xfe, 0x48, 0x5b, 0xb5, | 1397 | 0x2b, 0x15, 0xc9, 0x9f, 0xcc, 0x26, 0xe1, 0xd8, 0x62, 0x0c, 0xd8, 0x6a, |
1389 | 0xf3, 0xdf, 0xd4, 0x24, 0x5e, 0x67, 0x93, 0x34, 0xdf, 0x0b, 0xf9, 0x5a, | 1398 | 0xb0, 0x21, 0x6f, 0x85, 0xac, 0xb9, 0xb5, 0x7a, 0x50, 0xdd, 0x02, 0x7b, |
1390 | 0x4b, 0x53, 0xbc, 0xbb, 0x56, 0xd7, 0x90, 0xb6, 0x28, 0x83, 0x43, 0x7a, | 1399 | 0xe7, 0x96, 0xd3, 0xef, 0x53, 0xb7, 0xc1, 0xd6, 0xb9, 0xed, 0xf4, 0x8d, |
1391 | 0xd8, 0xfa, 0x1a, 0xf2, 0xf7, 0xa2, 0xf4, 0x74, 0x4f, 0x64, 0x28, 0x08, | 1400 | 0xea, 0x10, 0x6c, 0x9b, 0x43, 0xb0, 0x73, 0x0e, 0x55, 0x69, 0x7b, 0xde, |
1392 | 0xc6, 0x07, 0x64, 0x23, 0xe3, 0x01, 0x99, 0x4a, 0x35, 0x26, 0xa0, 0xbc, | 1401 | 0x0c, 0xba, 0x6b, 0x87, 0x1e, 0xe2, 0x5c, 0xb8, 0x26, 0xb4, 0x71, 0x38, |
1393 | 0xda, 0x98, 0x00, 0xfd, 0xac, 0x47, 0x80, 0xdf, 0x19, 0x5c, 0x22, 0x63, | 1402 | 0x3f, 0xe2, 0xfe, 0x0b, 0x5c, 0x83, 0x20, 0xa5, 0x76, 0x34, 0x71, 0x5d, |
1394 | 0x8c, 0x3b, 0x54, 0x42, 0xbb, 0xfc, 0x1b, 0xd6, 0x2e, 0x0f, 0xe1, 0x48, | 1403 | 0x5a, 0x97, 0x95, 0xbd, 0x96, 0xac, 0x8a, 0xf4, 0xd3, 0x06, 0x1b, 0x4f, |
1395 | 0x02, 0x0e, 0x23, 0x9f, 0xd7, 0xea, 0xb9, 0x95, 0xfa, 0x3b, 0xb7, 0x6c, | 1404 | 0x32, 0x7e, 0xe5, 0xe5, 0x69, 0x8b, 0x34, 0xe2, 0x01, 0xcf, 0xc4, 0x1f, |
1396 | 0xd3, 0x26, 0xe5, 0xc6, 0x22, 0xe7, 0x4d, 0x19, 0x4c, 0xdc, 0xd4, 0xca, | 1405 | 0x69, 0xab, 0x7e, 0xfe, 0x57, 0x36, 0x89, 0x9f, 0xc3, 0xf8, 0xf7, 0x42, |
1397 | 0xe0, 0x84, 0xb5, 0xa3, 0x50, 0x47, 0xcb, 0xcf, 0xb5, 0xb2, 0x93, 0x72, | 1406 | 0xbe, 0xd6, 0xd3, 0x14, 0xef, 0x5e, 0x1d, 0x7f, 0x50, 0x06, 0x47, 0xf4, |
1398 | 0x8f, 0xf1, 0xf9, 0x07, 0x7c, 0xd2, 0xfa, 0x7b, 0x24, 0xbd, 0x1c, 0x9f, | 1407 | 0xb0, 0xf3, 0x35, 0xe4, 0xef, 0x65, 0xe9, 0xe9, 0x9e, 0x58, 0x26, 0x0c, |
1399 | 0x17, 0xd0, 0x9b, 0xf8, 0x91, 0x21, 0xbd, 0xdf, 0xe6, 0xce, 0xca, 0x6e, | 1408 | 0x47, 0xfb, 0x64, 0x13, 0xe3, 0x01, 0xb9, 0x6a, 0x2d, 0x26, 0xa0, 0xfc, |
1400 | 0x19, 0x8e, 0x33, 0xd6, 0xc9, 0x78, 0x9e, 0x97, 0x9b, 0x05, 0x0f, 0x4c, | 1409 | 0xfa, 0x98, 0x00, 0xfd, 0xac, 0x4f, 0x03, 0xbf, 0xd3, 0xb8, 0x44, 0x46, |
1401 | 0x16, 0x15, 0x2c, 0xf8, 0x46, 0x19, 0x73, 0x03, 0xd9, 0xe5, 0x3b, 0x3a, | 1410 | 0x18, 0x77, 0xa8, 0x46, 0x76, 0xf9, 0x57, 0xac, 0x5d, 0x1e, 0xc1, 0x91, |
1402 | 0x76, 0x6c, 0x74, 0xed, 0x4c, 0x93, 0xb1, 0x5d, 0x1d, 0x1d, 0xff, 0x5d, | 1411 | 0x02, 0x1c, 0x46, 0x3e, 0xaf, 0xd6, 0x73, 0xcb, 0xf5, 0x77, 0x61, 0xc9, |
1403 | 0x04, 0xf5, 0x2d, 0x6a, 0xfb, 0x56, 0x69, 0xfd, 0xbb, 0xa0, 0xeb, 0x7c, | 1412 | 0xa6, 0x4d, 0xc9, 0x81, 0xb2, 0xb6, 0x13, 0x21, 0x83, 0x89, 0x9b, 0x7a, |
1404 | 0xae, 0x29, 0x8c, 0x63, 0x2e, 0xba, 0x11, 0x5b, 0xaf, 0xb6, 0xfc, 0x8b, | 1413 | 0x19, 0x9c, 0xb4, 0x76, 0x14, 0xea, 0x68, 0xf9, 0xb9, 0x5a, 0x76, 0x52, |
1405 | 0x36, 0x3e, 0x9d, 0x84, 0xec, 0x0f, 0xcb, 0xfe, 0xb0, 0x4e, 0xd9, 0xb7, | 1414 | 0xee, 0x31, 0x6e, 0xff, 0x40, 0x40, 0x5a, 0x7f, 0x97, 0x64, 0x97, 0xe2, |
1406 | 0xea, 0x94, 0xfd, 0xcf, 0x3a, 0x65, 0x26, 0x2e, 0xb8, 0xb3, 0xf0, 0xf7, | 1415 | 0xf6, 0x02, 0x7a, 0x93, 0x20, 0x96, 0xd1, 0x7b, 0x7a, 0xde, 0x8c, 0xec, |
1407 | 0x78, 0x37, 0xa5, 0x7d, 0x77, 0xb1, 0xfb, 0x61, 0xb9, 0xe5, 0x3a, 0x1b, | 1416 | 0x93, 0x81, 0x04, 0x63, 0xa0, 0x8c, 0xf3, 0xf9, 0x85, 0x19, 0xe9, 0x66, |
1408 | 0xac, 0x5f, 0xc6, 0x18, 0xb1, 0x89, 0x0d, 0x67, 0x75, 0x6c, 0xb8, 0xcf, | 1417 | 0x8c, 0x03, 0x16, 0x7c, 0xa3, 0x8c, 0x78, 0xa1, 0xec, 0x0d, 0x1c, 0x1d, |
1409 | 0xdd, 0xa1, 0xf4, 0x5e, 0xca, 0x7e, 0xc6, 0x19, 0xf7, 0x69, 0xbc, 0x10, | 1418 | 0x53, 0x36, 0xba, 0xf6, 0x62, 0x93, 0xb1, 0x5d, 0x1d, 0x1d, 0x17, 0x5e, |
1410 | 0x27, 0x5f, 0x61, 0x0c, 0x38, 0xc7, 0xbd, 0xd8, 0xa4, 0xba, 0x18, 0x6d, | 1419 | 0x00, 0xf5, 0x2d, 0x68, 0xfb, 0x56, 0x69, 0xfd, 0x3b, 0xaf, 0xeb, 0xfc, |
1411 | 0x57, 0x6d, 0x13, 0xb3, 0x6e, 0xb4, 0x8b, 0x5b, 0x64, 0x04, 0xb6, 0xc2, | 1420 | 0x41, 0x53, 0x14, 0xdf, 0x5c, 0xf0, 0x62, 0xb6, 0x5e, 0x7d, 0xf9, 0xd7, |
1412 | 0xce, 0x42, 0x9b, 0xec, 0x9a, 0x1e, 0x58, 0x47, 0xbd, 0xb5, 0x7b, 0xda, | 1421 | 0x6c, 0xdc, 0xba, 0x1b, 0xb2, 0x3f, 0x2a, 0xfb, 0xde, 0x1a, 0x65, 0xb1, |
1413 | 0xf8, 0x83, 0xfb, 0xc0, 0x57, 0x69, 0x21, 0x8c, 0x29, 0x5f, 0x84, 0x36, | 1422 | 0xf8, 0xea, 0xb2, 0xcd, 0x6b, 0x94, 0x99, 0x78, 0xe1, 0x50, 0x69, 0x27, |
1414 | 0xf1, 0x5a, 0x5b, 0xf8, 0xb5, 0xfb, 0xfb, 0xa5, 0x8b, 0xf4, 0xe7, 0xc0, | 1423 | 0xde, 0x4d, 0x68, 0xdf, 0x5d, 0xf4, 0x9e, 0x5b, 0xb7, 0x14, 0x96, 0xea, |
1415 | 0x76, 0x78, 0xa3, 0xfd, 0x35, 0xcb, 0xc8, 0x74, 0x88, 0x2b, 0xf5, 0x33, | 1424 | 0x6c, 0xb0, 0x7e, 0x19, 0x63, 0xc7, 0x26, 0x66, 0x9c, 0xd7, 0x31, 0xe3, |
1416 | 0xb6, 0x8b, 0x5c, 0xa4, 0x9d, 0xb6, 0x4b, 0xe4, 0xe9, 0x65, 0x59, 0xbc, | 1425 | 0x1e, 0x6f, 0x8f, 0xd2, 0x7b, 0x2c, 0xb7, 0x33, 0xfe, 0x78, 0x48, 0xe3, |
1417 | 0x15, 0x36, 0x93, 0x04, 0x99, 0x01, 0xe9, 0x8c, 0x88, 0x8e, 0xf1, 0xf8, | 1426 | 0x85, 0x38, 0xf9, 0x02, 0x63, 0xc3, 0x05, 0xee, 0x0f, 0xa7, 0xd4, 0xe5, |
1418 | 0x46, 0x36, 0xf7, 0x70, 0x6f, 0x07, 0xf4, 0x6f, 0x6c, 0x15, 0x13, 0x37, | 1427 | 0x68, 0xbb, 0x66, 0x9b, 0x98, 0x75, 0xa3, 0x5d, 0xdc, 0x22, 0x83, 0xb0, |
1419 | 0x0d, 0xed, 0x94, 0x7a, 0xb4, 0x7b, 0x9d, 0xa5, 0x5d, 0xee, 0xb9, 0xee, | 1428 | 0x15, 0x86, 0x4a, 0xad, 0xb2, 0x77, 0xea, 0xa3, 0xeb, 0xa8, 0xb7, 0xf6, |
1420 | 0xa6, 0xcc, 0xd5, 0x6b, 0x42, 0x3a, 0xde, 0x55, 0x90, 0x64, 0x48, 0xc7, | 1429 | 0x4d, 0x19, 0x7f, 0xf0, 0x10, 0xf8, 0x2a, 0x2b, 0x84, 0x31, 0x1d, 0x88, |
1421 | 0x8b, 0x92, 0x5e, 0x41, 0xc7, 0x8b, 0x32, 0xa4, 0xe9, 0xb8, 0x71, 0x05, | 1430 | 0xd0, 0x26, 0x5e, 0x6d, 0x0b, 0xbf, 0x76, 0x7f, 0xf7, 0x5f, 0xa6, 0x3f, |
1422 | 0x1d, 0x77, 0x5a, 0x3a, 0xde, 0x13, 0x33, 0x74, 0xa1, 0xb4, 0x9e, 0x22, | 1431 | 0x07, 0xb6, 0xc3, 0x1b, 0xed, 0xaf, 0x59, 0x06, 0xa7, 0x22, 0x5c, 0xa9, |
1423 | 0x9d, 0x1a, 0x3a, 0x76, 0x34, 0x1d, 0x2f, 0xe2, 0x1e, 0xf5, 0xae, 0xb3, | 1432 | 0x1f, 0xb1, 0x5d, 0xec, 0x32, 0xed, 0xb4, 0x5d, 0x22, 0x4f, 0x2d, 0xc9, |
1424 | 0x75, 0x22, 0xb6, 0x8c, 0xbf, 0xc3, 0x32, 0xca, 0xc5, 0x4f, 0xc6, 0x8c, | 1433 | 0xe2, 0x9d, 0xb0, 0x99, 0x24, 0xcc, 0xf5, 0x49, 0x7b, 0x4c, 0x74, 0x8c, |
1425 | 0x5e, 0x1a, 0x02, 0x1d, 0x85, 0xe5, 0xfb, 0x6d, 0xfc, 0xa0, 0xb6, 0xcc, | 1434 | 0x27, 0x30, 0xb2, 0xb9, 0x8b, 0x7b, 0x3e, 0xa0, 0x7f, 0x63, 0xab, 0x98, |
1426 | 0xc4, 0x47, 0x76, 0x16, 0xc6, 0x62, 0x2b, 0xe9, 0x73, 0x08, 0xf4, 0x19, | 1435 | 0x78, 0x6a, 0x64, 0xa7, 0xac, 0x45, 0xbb, 0xd7, 0x5b, 0xda, 0xe5, 0xbe, |
1427 | 0xd6, 0x79, 0x2d, 0xfa, 0x6c, 0xb6, 0xfb, 0x16, 0x71, 0xbd, 0x2f, 0x9f, | 1436 | 0xee, 0x3e, 0xca, 0x5c, 0xac, 0x89, 0xa1, 0xe3, 0xbd, 0x25, 0x49, 0x45, |
1428 | 0x8e, 0x1b, 0x5a, 0xbd, 0x45, 0xcf, 0x9d, 0xf3, 0x3e, 0xfb, 0x06, 0x68, | 1437 | 0x74, 0xbc, 0x20, 0xd9, 0x65, 0x74, 0xbc, 0x20, 0x83, 0x9a, 0x8e, 0x1b, |
1429 | 0xd5, 0xac, 0xcd, 0xb9, 0xaa, 0xbf, 0xcd, 0x58, 0x54, 0xd2, 0xc4, 0xb0, | 1438 | 0x97, 0xd1, 0x71, 0xbb, 0xa5, 0xe3, 0x8f, 0xc6, 0x0d, 0x5d, 0x28, 0xad, |
1430 | 0x19, 0x27, 0xbd, 0x98, 0xed, 0x68, 0xe4, 0x53, 0x83, 0x96, 0x4f, 0xad, | 1439 | 0xa7, 0x48, 0xa7, 0x86, 0x8e, 0x1d, 0x4d, 0xc7, 0x0b, 0xb8, 0xbb, 0xfe, |
1431 | 0x63, 0xcc, 0x35, 0xa8, 0xca, 0xec, 0x01, 0xe8, 0x0a, 0xda, 0xd8, 0x5a, | 1440 | 0xc7, 0x6c, 0x9d, 0x98, 0x2d, 0xe3, 0xef, 0xa8, 0x8c, 0x72, 0x71, 0x2a, |
1432 | 0x4e, 0xe3, 0x5d, 0x67, 0x32, 0x53, 0x78, 0x35, 0x88, 0x78, 0x8c, 0x0f, | 1441 | 0x6e, 0xf4, 0xd2, 0x20, 0xe8, 0x28, 0x2a, 0xff, 0x4d, 0x4b, 0x9f, 0xf5, |
1433 | 0x71, 0x5f, 0x40, 0xc6, 0x1c, 0x94, 0x75, 0x95, 0xcd, 0xbc, 0x94, 0xd7, | 1442 | 0x65, 0x26, 0x3e, 0x32, 0x54, 0x3a, 0xb2, 0x82, 0x3e, 0x07, 0x41, 0x9f, |
1434 | 0x8a, 0xe7, 0x01, 0xe9, 0x2a, 0x2b, 0xf9, 0xe8, 0x74, 0x8b, 0xec, 0x2f, | 1443 | 0x51, 0x9d, 0xd7, 0xa2, 0xcf, 0x66, 0xbb, 0x9f, 0x91, 0xd4, 0x7b, 0xff, |
1435 | 0x44, 0xe5, 0xe3, 0x68, 0xff, 0xb1, 0x82, 0x0b, 0x7f, 0xfc, 0x4c, 0x8c, | 1444 | 0xd9, 0x84, 0xa1, 0xd5, 0x5b, 0xf4, 0xdc, 0x39, 0xef, 0x0b, 0x6f, 0x80, |
1436 | 0x76, 0xe1, 0xbe, 0x02, 0xf7, 0x27, 0x59, 0x37, 0xbe, 0x6a, 0x7f, 0x36, | 1445 | 0x56, 0xcd, 0xda, 0x5c, 0xac, 0xf9, 0xdb, 0x8c, 0x45, 0xa5, 0x4c, 0x6c, |
1437 | 0x22, 0x5d, 0x3d, 0x79, 0x78, 0x2a, 0x12, 0xdd, 0x03, 0x38, 0x9a, 0x86, | 1446 | 0x9b, 0x71, 0xd2, 0xcb, 0xd9, 0x8e, 0x2f, 0xd5, 0xf9, 0x15, 0x1b, 0xa4, |
1438 | 0x86, 0xe4, 0x07, 0x03, 0x1b, 0x51, 0xf6, 0xb2, 0x1d, 0x6f, 0xd4, 0x31, | 1447 | 0xc0, 0xbc, 0x87, 0xea, 0x46, 0xc6, 0xa2, 0x47, 0xdc, 0x4c, 0x9f, 0x64, |
1439 | 0xf1, 0xde, 0x41, 0x79, 0x77, 0x65, 0x48, 0xae, 0xaf, 0x98, 0x3d, 0xd5, | 1448 | 0x2b, 0xed, 0xa9, 0x62, 0x89, 0x7e, 0xd1, 0xab, 0x36, 0x37, 0x02, 0xcf, |
1440 | 0xea, 0x9e, 0x69, 0xca, 0x5d, 0x80, 0xfe, 0x49, 0xbb, 0x41, 0x70, 0xce, | 1449 | 0x95, 0x16, 0x79, 0xb4, 0x44, 0xda, 0x3a, 0x62, 0x70, 0xb1, 0x26, 0xad, |
1441 | 0xc3, 0xaa, 0x1f, 0x89, 0x4a, 0xac, 0x27, 0x95, 0x58, 0x10, 0xf3, 0x7c, | 1450 | 0x73, 0xad, 0xd9, 0x4f, 0xbd, 0x0e, 0xe8, 0x83, 0xee, 0xa1, 0xcd, 0xae, |
1442 | 0xbe, 0xfc, 0x0f, 0xc1, 0x58, 0x3c, 0x2a, 0x3f, 0xf0, 0x38, 0xc7, 0x41, | 1451 | 0xe5, 0x3e, 0xde, 0xb5, 0xa7, 0x72, 0xa5, 0xa8, 0x5f, 0xee, 0x3f, 0x70, |
1443 | 0xb9, 0xae, 0x5c, 0x3b, 0x36, 0x97, 0xf3, 0x0f, 0x63, 0xdc, 0xa7, 0xc8, | 1452 | 0x4f, 0xb8, 0x3d, 0xd5, 0x51, 0xf1, 0x6d, 0x9c, 0x79, 0x23, 0x9e, 0xfb, |
1444 | 0x54, 0x16, 0x62, 0x8c, 0xa5, 0xd3, 0xe7, 0xe8, 0x7a, 0x1b, 0xfc, 0x38, | 1453 | 0xa4, 0xa3, 0xa2, 0xe4, 0x03, 0x53, 0x2d, 0x72, 0x7b, 0xc9, 0x95, 0x0f, |
1445 | 0x48, 0xee, 0xae, 0xb7, 0x81, 0x6e, 0xe2, 0xd0, 0xf9, 0x57, 0x01, 0xc6, | 1454 | 0xa1, 0xfd, 0x07, 0x4b, 0x1e, 0xfc, 0xfb, 0xff, 0x1d, 0xa7, 0x9d, 0x79, |
1446 | 0xab, 0x18, 0xfb, 0x62, 0xcc, 0x8b, 0xcf, 0x5f, 0xc7, 0xb8, 0x6c, 0xfb, | 1455 | 0xa8, 0xc4, 0x7d, 0x50, 0x47, 0xdb, 0x2a, 0xcb, 0xf7, 0x86, 0x63, 0xd2, |
1447 | 0x1b, 0xd6, 0x5e, 0xe6, 0xfa, 0x1b, 0xde, 0xa9, 0xaf, 0x77, 0x5a, 0xc7, | 1456 | 0xd1, 0x55, 0x84, 0xe7, 0x23, 0xee, 0x7e, 0xc0, 0xd1, 0x94, 0xc9, 0xc8, |
1448 | 0x62, 0x43, 0xe2, 0xc4, 0xde, 0x91, 0x90, 0x75, 0x5e, 0xed, 0xf8, 0xdc, | 1457 | 0x77, 0xfa, 0x36, 0xa1, 0x2c, 0xca, 0xf1, 0x18, 0x76, 0x4c, 0xfc, 0xb8, |
1449 | 0x27, 0x86, 0xc5, 0x38, 0x20, 0xd1, 0xdd, 0xdb, 0x07, 0x65, 0x04, 0xf3, | 1458 | 0x5f, 0xde, 0x59, 0xcd, 0xc8, 0x0d, 0x55, 0xb3, 0x77, 0x5b, 0xdb, 0x9b, |
1450 | 0xdb, 0xb9, 0x66, 0x7e, 0xf7, 0x08, 0xe3, 0xab, 0xe7, 0x0b, 0x9c, 0x43, | 1459 | 0x4d, 0x7b, 0xf3, 0xd0, 0x67, 0x59, 0x2f, 0x0c, 0x2f, 0xfa, 0xa0, 0xa2, |
1451 | 0x75, 0x5e, 0xea, 0x0b, 0x66, 0x5e, 0xb1, 0x9e, 0xd5, 0xf3, 0xd1, 0xed, | 1460 | 0xe3, 0xae, 0xc4, 0xbb, 0xd2, 0xc9, 0x79, 0x31, 0xcf, 0x97, 0x2a, 0xff, |
1452 | 0xd5, 0x09, 0xc0, 0xf2, 0x35, 0x9d, 0x57, 0x10, 0x04, 0x6f, 0xed, 0x39, | 1461 | 0x1c, 0x8e, 0x24, 0x5c, 0xf9, 0x8e, 0xcf, 0x39, 0xf6, 0xcb, 0xf5, 0x95, |
1453 | 0x1f, 0x24, 0x2f, 0x49, 0xf5, 0x2e, 0x54, 0xf7, 0x77, 0xc6, 0x22, 0x43, | 1462 | 0xfa, 0xb1, 0xb9, 0x3f, 0x1b, 0x5b, 0xc7, 0xfd, 0x90, 0x5c, 0xf5, 0x9f, |
1454 | 0x69, 0xad, 0xcf, 0xf0, 0x9c, 0xcc, 0x96, 0xd3, 0x58, 0x47, 0x89, 0x66, | 1463 | 0xe3, 0x8c, 0xdb, 0xd3, 0x87, 0xe9, 0xf8, 0x31, 0xee, 0x87, 0xbb, 0xb8, |
1455 | 0xfb, 0xa3, 0x9a, 0x4f, 0xb2, 0x5e, 0xda, 0xee, 0x61, 0x85, 0x3e, 0x54, | 1464 | 0x83, 0x0e, 0x13, 0xb0, 0x21, 0xae, 0x01, 0x8c, 0xd7, 0x30, 0x96, 0xc6, |
1456 | 0x10, 0x28, 0x6f, 0xb5, 0xdc, 0xa0, 0xbe, 0xc2, 0xdc, 0xe5, 0xdf, 0xda, | 1465 | 0x18, 0x1a, 0x9f, 0xbf, 0x8c, 0x71, 0xd9, 0xf6, 0x93, 0xd6, 0xfe, 0x3e, |
1457 | 0x1c, 0x96, 0x5e, 0xc6, 0xb3, 0xc6, 0xa2, 0x43, 0xb1, 0x64, 0xbe, 0xec, | 1466 | 0xb2, 0xc4, 0x8b, 0x6b, 0xeb, 0xb1, 0x8d, 0x23, 0xf1, 0x8c, 0x38, 0xf1, |
1458 | 0xe1, 0x77, 0x0b, 0xee, 0x3b, 0x60, 0xaf, 0xf8, 0xb0, 0x67, 0x24, 0xae, | 1467 | 0x9f, 0x48, 0xca, 0x3a, 0xbf, 0x7e, 0x7c, 0xee, 0x47, 0xc3, 0xa2, 0xec, |
1459 | 0x8c, 0x6c, 0x00, 0x2d, 0xf7, 0xe4, 0x94, 0x22, 0x6f, 0xba, 0xc9, 0xc9, | 1468 | 0x13, 0x77, 0xdf, 0xee, 0x7e, 0x19, 0xc4, 0xfc, 0x86, 0x56, 0xcd, 0xef, |
1460 | 0x72, 0x3c, 0x59, 0x2a, 0x7f, 0x96, 0xed, 0x51, 0xb7, 0x5e, 0x2c, 0xcf, | 1469 | 0x1e, 0x61, 0xbc, 0xf6, 0x52, 0x89, 0x73, 0xa8, 0xcd, 0x4b, 0xfd, 0xb6, |
1461 | 0xc8, 0x86, 0xa7, 0x2a, 0x1c, 0x83, 0xfe, 0xef, 0x1b, 0x19, 0x23, 0x6a, | 1470 | 0x99, 0x57, 0xbc, 0x6b, 0xe5, 0x7c, 0x74, 0x7b, 0x75, 0x0a, 0xb0, 0x7c, |
1462 | 0xfb, 0x66, 0x9f, 0x21, 0x5e, 0xa2, 0x74, 0xc9, 0xf1, 0x2f, 0x6d, 0x7d, | 1471 | 0x49, 0xe7, 0x42, 0x84, 0xe1, 0x5b, 0xbb, 0x2e, 0x85, 0xa9, 0x2b, 0xd2, |
1463 | 0x13, 0xce, 0xef, 0xb3, 0x16, 0xee, 0xd5, 0xe3, 0xbe, 0xa0, 0xed, 0x97, | 1472 | 0xdd, 0xf3, 0xb5, 0x7d, 0xa4, 0x91, 0x58, 0x26, 0xab, 0xf5, 0x23, 0x9e, |
1464 | 0xd3, 0x15, 0xda, 0x8c, 0xdc, 0xdf, 0x49, 0x1d, 0x9f, 0x11, 0xc2, 0x11, | 1473 | 0x53, 0xf9, 0xca, 0x7e, 0xac, 0xa3, 0xb8, 0xf9, 0x5e, 0x57, 0xf3, 0x5d, |
1465 | 0x04, 0xcf, 0xf9, 0x46, 0x77, 0x3f, 0x55, 0xe1, 0x1e, 0x47, 0x10, 0xfc, | 1474 | 0xde, 0xdf, 0x6f, 0xf7, 0xca, 0x22, 0x9f, 0x2c, 0x0c, 0x95, 0xbf, 0x52, |
1466 | 0x88, 0x76, 0xf1, 0xde, 0x22, 0xc6, 0x0b, 0x71, 0xb0, 0x35, 0x17, 0x85, | 1475 | 0x0e, 0x51, 0xff, 0x61, 0xee, 0xf2, 0x98, 0xdd, 0x3f, 0xe8, 0x66, 0x7c, |
1467 | 0x5c, 0x9c, 0x1a, 0x20, 0x7e, 0x05, 0x1e, 0x6a, 0x8f, 0x7b, 0xa3, 0xc4, | 1476 | 0x0c, 0xb4, 0x18, 0x07, 0xdd, 0xf9, 0xf8, 0xdd, 0x82, 0xfb, 0x1e, 0xd8, |
1468 | 0x92, 0x9f, 0x2a, 0xb7, 0x24, 0x3f, 0x5d, 0x76, 0x81, 0x67, 0xce, 0x3b, | 1477 | 0x3f, 0x01, 0xec, 0x23, 0x49, 0x28, 0x23, 0x6b, 0xc0, 0x1b, 0x5d, 0x05, |
1469 | 0x9e, 0x9c, 0xb0, 0x73, 0xce, 0x96, 0x89, 0xdf, 0xd7, 0xda, 0x87, 0x7c, | 1478 | 0xa5, 0xc8, 0xeb, 0x5e, 0x6a, 0xbc, 0x92, 0x48, 0x4d, 0x56, 0x9e, 0x60, |
1470 | 0x61, 0x85, 0xbf, 0x44, 0x98, 0xaa, 0xb0, 0x10, 0xb6, 0xa4, 0xc5, 0x4d, | 1479 | 0x7b, 0xd4, 0x5d, 0x2b, 0x36, 0x68, 0xf2, 0x6c, 0xbe, 0x58, 0xe5, 0x18, |
1471 | 0x10, 0xfc, 0xd8, 0x37, 0x6b, 0x3a, 0x55, 0x94, 0x29, 0x8c, 0x9b, 0xdb, | 1480 | 0xa4, 0xfb, 0x37, 0x32, 0x86, 0x6b, 0xfb, 0x66, 0x9f, 0x11, 0x5e, 0x5c, |
1472 | 0xac, 0x88, 0x87, 0x58, 0xf2, 0x0e, 0x8c, 0xfd, 0x29, 0x8c, 0xbd, 0xbf, | 1481 | 0xba, 0xf8, 0xf8, 0xb7, 0xdf, 0xfa, 0x3a, 0x9c, 0xdf, 0x13, 0x16, 0xee, |
1473 | 0xcc, 0xf1, 0x20, 0x2b, 0x30, 0xf7, 0xa9, 0x4a, 0x08, 0x6f, 0xbd, 0xb1, | 1482 | 0x95, 0xe3, 0x3e, 0xaf, 0xed, 0xa1, 0xc7, 0xab, 0xb4, 0x41, 0xb9, 0x8f, |
1474 | 0xc3, 0x35, 0xef, 0xb5, 0x36, 0x5e, 0xf8, 0xac, 0x11, 0xd9, 0xae, 0xbc, | 1483 | 0x94, 0x7e, 0x64, 0x5a, 0x08, 0x47, 0x18, 0x3e, 0x1b, 0x18, 0x5b, 0xe0, |
1475 | 0x7e, 0xd0, 0xd7, 0xe2, 0xa6, 0xa8, 0xfc, 0x22, 0xe4, 0x6e, 0x20, 0x8f, | 1484 | 0x8b, 0x55, 0xee, 0x99, 0x84, 0xe1, 0xdf, 0xd2, 0xce, 0x3e, 0x58, 0xc6, |
1476 | 0x42, 0x9e, 0x2d, 0x6a, 0xba, 0xc9, 0x5c, 0xce, 0xff, 0x23, 0xf2, 0xeb, | 1485 | 0x78, 0x11, 0x0e, 0x76, 0x16, 0x5c, 0xc8, 0xd9, 0x89, 0x3e, 0xe2, 0x57, |
1477 | 0xeb, 0x18, 0x5f, 0x1e, 0xf6, 0x68, 0xbb, 0x2e, 0x05, 0x8b, 0x1e, 0xe5, | 1486 | 0xe0, 0xf1, 0x76, 0x79, 0x07, 0x24, 0x9e, 0xfa, 0x78, 0xa5, 0x25, 0x75, |
1478 | 0xf3, 0x06, 0x99, 0x71, 0x73, 0xbd, 0xd0, 0x15, 0x28, 0x6b, 0xa5, 0xbf, | 1487 | 0x67, 0xc5, 0x03, 0x9e, 0x39, 0xef, 0x44, 0x6a, 0xcc, 0xce, 0x39, 0x5f, |
1479 | 0x9d, 0xcc, 0x44, 0x52, 0xc9, 0x49, 0x61, 0x3e, 0x14, 0x73, 0x15, 0x98, | 1488 | 0x21, 0x7e, 0x5f, 0x6b, 0xbf, 0xf3, 0xf9, 0x65, 0xfe, 0x17, 0x61, 0xaa, |
1480 | 0x23, 0x44, 0xd9, 0x10, 0x85, 0xcc, 0xe3, 0x1a, 0x9a, 0xf1, 0x26, 0xcb, | 1489 | 0xc1, 0x42, 0xd8, 0x52, 0x16, 0x37, 0x61, 0xf8, 0xf7, 0x01, 0xc7, 0xdc, |
1481 | 0xd5, 0xba, 0x07, 0x84, 0x7b, 0x86, 0xa9, 0xc4, 0x3e, 0x6d, 0x9f, 0x88, | 1490 | 0x0f, 0x1f, 0x46, 0x26, 0x30, 0x6e, 0x61, 0x8b, 0x22, 0x1e, 0xe2, 0xa9, |
1482 | 0x8c, 0x17, 0x58, 0x77, 0x3b, 0xac, 0x13, 0xaf, 0xa6, 0xbe, 0xce, 0xe1, | 1491 | 0x3b, 0x30, 0xf6, 0xc7, 0x31, 0xf6, 0xed, 0x15, 0x8e, 0x07, 0xd9, 0x83, |
1483 | 0x02, 0x9f, 0x87, 0x71, 0xac, 0x58, 0x2c, 0x53, 0x90, 0x97, 0x23, 0x03, | 1492 | 0xb9, 0x4f, 0x54, 0x23, 0x78, 0xd7, 0x1a, 0x3b, 0x5a, 0xf3, 0x6e, 0x6b, |
1484 | 0xf2, 0x32, 0xed, 0xce, 0x61, 0xd0, 0xb6, 0xeb, 0xf1, 0xbd, 0x29, 0xcf, | 1493 | 0x33, 0x46, 0xcf, 0x1a, 0x91, 0x6d, 0x0a, 0xbe, 0x63, 0xae, 0xba, 0xb0, |
1485 | 0xf8, 0xb2, 0x94, 0x19, 0xec, 0xa3, 0x9d, 0x9d, 0x53, 0x9a, 0x27, 0x44, | 1494 | 0xd9, 0x95, 0x9f, 0x81, 0x1c, 0x0f, 0xe5, 0x51, 0xc8, 0xc7, 0x05, 0x4d, |
1486 | 0xa1, 0x6d, 0x2c, 0x5b, 0x96, 0x91, 0x6c, 0xc1, 0xc6, 0x7a, 0x46, 0x39, | 1495 | 0x37, 0xb9, 0xed, 0xfc, 0x3f, 0x26, 0x4f, 0xad, 0x63, 0xbc, 0x7a, 0xc0, |
1487 | 0xe7, 0x0d, 0x35, 0x73, 0x6f, 0x95, 0x28, 0x60, 0x1a, 0x89, 0x24, 0x9d, | 1496 | 0xa7, 0x2d, 0xbc, 0x18, 0x2e, 0xf8, 0x94, 0xf7, 0x1b, 0x64, 0xda, 0x2b, |
1488 | 0x06, 0xef, 0x23, 0x2d, 0x46, 0xe7, 0x43, 0xee, 0xb7, 0xdd, 0xdf, 0xce, | 1497 | 0x74, 0x43, 0xf7, 0xa0, 0x6c, 0x23, 0xfd, 0xf7, 0x54, 0x2e, 0x96, 0x4e, |
1489 | 0x3d, 0x53, 0x05, 0x1f, 0x5a, 0xb5, 0xdf, 0x7e, 0x8d, 0x1a, 0xfa, 0xf3, | 1498 | 0x8d, 0x0b, 0x73, 0xbe, 0x98, 0x13, 0xc1, 0xbc, 0x26, 0xca, 0x06, 0x17, |
1490 | 0x04, 0xf4, 0xa0, 0x95, 0x95, 0xb1, 0x91, 0xae, 0x65, 0xfa, 0xe6, 0xf8, | 1499 | 0x32, 0x94, 0x6b, 0x68, 0xc6, 0x1b, 0xaf, 0xd4, 0xea, 0x1e, 0x16, 0xee, |
1491 | 0xd2, 0x1e, 0xf1, 0x92, 0x23, 0xc3, 0x65, 0x51, 0x91, 0x21, 0x37, 0x36, | 1500 | 0x4d, 0xa6, 0x93, 0x87, 0xb4, 0xbd, 0x23, 0x32, 0x5a, 0x62, 0xdd, 0xdd, |
1492 | 0x5c, 0x5e, 0x49, 0xf3, 0x4f, 0x55, 0xfe, 0xbd, 0xb5, 0x05, 0x6b, 0x63, | 1501 | 0xb0, 0x76, 0xfc, 0xba, 0xfa, 0x3a, 0x57, 0x0d, 0x7c, 0x1e, 0xc5, 0xc5, |
1493 | 0xaa, 0xb5, 0xef, 0xc8, 0x77, 0x2b, 0xf6, 0x2b, 0x92, 0x26, 0x07, 0x86, | 1502 | 0xe2, 0xcc, 0x29, 0x79, 0x39, 0xd6, 0x27, 0x2f, 0xd3, 0x8e, 0x1d, 0x00, |
1494 | 0xfb, 0xb4, 0x5c, 0x93, 0xf4, 0x5b, 0x1b, 0xa0, 0x7c, 0x66, 0xb4, 0x8f, | 1503 | 0x6d, 0x7b, 0xbe, 0xce, 0x2b, 0xd1, 0xe5, 0xb9, 0x40, 0x16, 0x73, 0xfd, |
1495 | 0xc6, 0x9c, 0x8b, 0x98, 0xcd, 0x3d, 0x33, 0xb8, 0x4e, 0x97, 0x1d, 0x99, | 1504 | 0x3d, 0xb4, 0xdb, 0x0b, 0x4a, 0xf3, 0x84, 0x28, 0xb4, 0x8d, 0xe7, 0x2b, |
1496 | 0x82, 0x7c, 0x38, 0x20, 0x7f, 0x1f, 0xa4, 0xe3, 0xe6, 0xbd, 0x59, 0x5f, | 1505 | 0x32, 0x98, 0x2f, 0xd9, 0xd8, 0xd1, 0x30, 0xe7, 0xbc, 0xa1, 0x6e, 0xee, |
1497 | 0xd6, 0xe7, 0x5e, 0x44, 0xb3, 0xe4, 0x4f, 0x46, 0x25, 0x77, 0x92, 0x7b, | 1506 | 0x1b, 0xc5, 0x05, 0x4c, 0x83, 0xb1, 0x94, 0xd3, 0xe0, 0x7f, 0xaa, 0xc5, |
1498 | 0x60, 0xcf, 0xed, 0xaf, 0xe6, 0x6d, 0x50, 0x0e, 0x70, 0xbf, 0xd6, 0x91, | 1507 | 0xd8, 0x10, 0xd0, 0x23, 0xad, 0xf7, 0xb7, 0x71, 0x6f, 0x56, 0xc1, 0x27, |
1499 | 0x3c, 0xfc, 0xda, 0x11, 0xee, 0xc3, 0xf7, 0xff, 0x1f, 0xf4, 0xc1, 0x7a, | 1508 | 0x57, 0x6d, 0x1f, 0xbe, 0x56, 0x65, 0xfe, 0x32, 0x09, 0xbd, 0x6a, 0x65, |
1500 | 0x61, 0xdb, 0x16, 0xb4, 0x6d, 0xb4, 0x6d, 0x47, 0xef, 0x78, 0x73, 0x6d, | 1509 | 0x65, 0x7c, 0xb0, 0x63, 0x89, 0xbe, 0x39, 0xbe, 0xb4, 0xc5, 0xfc, 0xd4, |
1501 | 0x5b, 0xd1, 0x36, 0x16, 0x8e, 0xfb, 0x06, 0xdb, 0x6a, 0x7c, 0x5e, 0x33, | 1510 | 0xe0, 0x40, 0x45, 0x54, 0x2c, 0xe3, 0xc5, 0x07, 0x2a, 0xcb, 0x69, 0xfe, |
1502 | 0x5c, 0x28, 0x2e, 0xc1, 0x4f, 0x4e, 0x4c, 0x48, 0xda, 0x19, 0x1f, 0xd0, | 1511 | 0x8b, 0xd5, 0xcf, 0x5a, 0xdb, 0xb2, 0x3e, 0x46, 0x5b, 0xff, 0x8e, 0x7c, |
1503 | 0xf3, 0xb9, 0x66, 0xb8, 0x0c, 0x38, 0xe2, 0x41, 0x90, 0xf7, 0x43, 0x3d, | 1512 | 0xb7, 0x6c, 0xff, 0x23, 0x05, 0xbe, 0xb2, 0xfb, 0xc6, 0x5c, 0x93, 0xec, |
1504 | 0xcc, 0x7f, 0xc7, 0x44, 0x3c, 0x96, 0x71, 0xdf, 0x92, 0xfe, 0x04, 0xa3, | 1513 | 0x5b, 0x19, 0xd8, 0x9c, 0xd6, 0x3e, 0x1f, 0x73, 0x3b, 0xe2, 0x36, 0xbf, |
1505 | 0xa4, 0x2e, 0xf3, 0xd9, 0x24, 0xcf, 0xfd, 0xc9, 0xf8, 0x46, 0xdc, 0x55, | 1514 | 0xce, 0xe0, 0x3a, 0x5b, 0x71, 0x64, 0x02, 0xf2, 0xe1, 0xb0, 0xfc, 0x53, |
1506 | 0x17, 0x71, 0x92, 0xf5, 0x18, 0xef, 0xdd, 0x68, 0xcb, 0x23, 0x2c, 0x4f, | 1515 | 0x98, 0x4d, 0x98, 0xf7, 0x66, 0x7d, 0x59, 0x9f, 0x7b, 0x1b, 0xcd, 0x52, |
1507 | 0x45, 0x21, 0x4b, 0x4c, 0x79, 0xc4, 0x96, 0x03, 0x26, 0x3f, 0x9f, 0x04, | 1516 | 0x3c, 0xed, 0x4a, 0xe1, 0x34, 0xf7, 0xd4, 0xce, 0xdd, 0x51, 0xcb, 0x0f, |
1508 | 0xb7, 0xd9, 0x72, 0x3e, 0x2b, 0x5d, 0x6e, 0x9e, 0x0d, 0x0f, 0x8d, 0x09, | 1517 | 0xa1, 0x1c, 0xe0, 0xbe, 0xb0, 0x23, 0x45, 0xf8, 0xc8, 0x83, 0xdc, 0xef, |
1509 | 0xe3, 0x3a, 0x99, 0xeb, 0x1a, 0x64, 0x2b, 0xd6, 0x87, 0x3e, 0xa3, 0x23, | 1518 | 0xef, 0xfd, 0x47, 0xe6, 0xea, 0xc4, 0xb9, 0x4e, 0xa6, 0x6d, 0x0b, 0xda, |
1510 | 0xcd, 0x80, 0xe3, 0x9c, 0xff, 0x76, 0xd8, 0xd6, 0x81, 0xfc, 0xc0, 0x37, | 1519 | 0x36, 0xda, 0xb6, 0xc1, 0xc7, 0xdf, 0x5c, 0xdb, 0x8d, 0x68, 0x1b, 0x8f, |
1511 | 0xf4, 0x3f, 0x2b, 0x3d, 0x69, 0xe5, 0x30, 0x07, 0x20, 0x90, 0x9d, 0xfe, | 1520 | 0xc6, 0x7d, 0x83, 0x6d, 0x35, 0x3e, 0xaf, 0x1d, 0x28, 0x95, 0x17, 0x5d, |
1512 | 0xb6, 0xc4, 0x2e, 0xfc, 0x1e, 0xef, 0x4f, 0xca, 0xec, 0x20, 0xe8, 0xb1, | 1521 | 0xdf, 0x4f, 0x8e, 0x49, 0xd6, 0x19, 0xed, 0xd3, 0xf3, 0xb9, 0x76, 0xa0, |
1513 | 0x9f, 0xbc, 0xb1, 0x15, 0x36, 0x0f, 0x7e, 0xf7, 0xb4, 0xc8, 0x92, 0x9b, | 1522 | 0x02, 0x38, 0x12, 0x61, 0x58, 0x0c, 0x22, 0xbd, 0xce, 0x7f, 0x27, 0xa1, |
1514 | 0x73, 0xd7, 0xc1, 0x5f, 0x1b, 0xc1, 0xac, 0xe6, 0x0a, 0x9e, 0x7b, 0x1b, | 1523 | 0xde, 0x59, 0xc6, 0x7d, 0x50, 0xfa, 0x27, 0x8c, 0xba, 0x7a, 0xcc, 0xc1, |
1515 | 0x84, 0x5c, 0xda, 0xed, 0xc1, 0xbd, 0x76, 0xbe, 0xdf, 0xc2, 0x7c, 0x7f, | 1524 | 0x93, 0x22, 0xf7, 0x3b, 0x13, 0x9b, 0x70, 0x57, 0x1d, 0xc4, 0x49, 0xde, |
1516 | 0xad, 0x59, 0x9a, 0x59, 0x5e, 0x5b, 0xb7, 0x51, 0xf6, 0xb8, 0xdb, 0xdd, | 1525 | 0x67, 0xfc, 0x78, 0x93, 0x2d, 0x8f, 0xb1, 0x3c, 0xed, 0x42, 0x96, 0x98, |
1517 | 0xd8, 0x8a, 0xba, 0xe7, 0x51, 0x97, 0x65, 0x9e, 0xcb, 0x1c, 0x9d, 0xd9, | 1526 | 0xf2, 0x98, 0x2d, 0x07, 0x4c, 0x41, 0x31, 0x05, 0x6e, 0xb3, 0xe5, 0x7c, |
1518 | 0x32, 0xe9, 0xcc, 0xc0, 0xda, 0xd5, 0x13, 0x04, 0xd7, 0xf9, 0x1c, 0x37, | 1527 | 0x56, 0xba, 0xdc, 0x3c, 0x1b, 0x1e, 0x1a, 0x11, 0xc6, 0x89, 0x72, 0xd7, |
1519 | 0x08, 0xae, 0xf7, 0xfb, 0xdc, 0x67, 0xe5, 0xf9, 0xc0, 0xd8, 0x54, 0x21, | 1528 | 0x37, 0xc8, 0x4e, 0xac, 0x0f, 0x7d, 0x50, 0x47, 0x9a, 0x01, 0xc7, 0xc5, |
1520 | 0xed, 0x3c, 0x67, 0xe5, 0x75, 0x10, 0xbc, 0xec, 0xf7, 0xca, 0xef, 0x54, | 1529 | 0xe0, 0xc7, 0x61, 0xab, 0x87, 0xf2, 0x9d, 0xc0, 0xd0, 0xff, 0x8c, 0x74, |
1521 | 0x52, 0x8f, 0xd3, 0xe7, 0x3e, 0x83, 0xe7, 0x33, 0xbe, 0xc9, 0x2b, 0xfa, | 1530 | 0x65, 0x95, 0xc3, 0x5c, 0x83, 0x50, 0x86, 0x82, 0x5d, 0xc9, 0xbd, 0xf8, |
1522 | 0x13, 0xb4, 0x8b, 0xab, 0x7e, 0xd0, 0xb0, 0x27, 0x5f, 0xd4, 0x3e, 0x3a, | 1531 | 0x3d, 0xda, 0x9b, 0x92, 0x99, 0x7e, 0xd0, 0x63, 0x2f, 0x79, 0x63, 0x27, |
1523 | 0xf1, 0x67, 0x62, 0xfc, 0x55, 0x18, 0x30, 0x61, 0x2f, 0xb3, 0xc9, 0x65, | 1532 | 0x6c, 0x28, 0xfc, 0xee, 0x6a, 0x91, 0x45, 0xaf, 0xe0, 0xad, 0x83, 0xff, |
1524 | 0x7e, 0xa0, 0xa6, 0xdf, 0xda, 0x77, 0x0a, 0xef, 0x58, 0x16, 0x04, 0x97, | 1533 | 0x37, 0x88, 0x59, 0xcd, 0x96, 0x7c, 0xef, 0x36, 0x08, 0xb9, 0xac, 0xd7, |
1525 | 0x0c, 0xfc, 0x31, 0xe6, 0x94, 0x2a, 0x71, 0xef, 0xee, 0x03, 0x9a, 0xff, | 1534 | 0x85, 0x7b, 0xfd, 0x7c, 0xbf, 0x8e, 0xf9, 0x9e, 0x6b, 0x96, 0x66, 0x96, |
1526 | 0x04, 0x7e, 0x3d, 0xe9, 0x24, 0xea, 0x2a, 0xe5, 0x1d, 0xee, 0x52, 0xa9, | 1535 | 0xd7, 0xd7, 0x6d, 0x94, 0xfd, 0xde, 0x6e, 0x2f, 0xbe, 0xac, 0xee, 0x25, |
1527 | 0x9c, 0xc8, 0x5b, 0xb0, 0xfe, 0x5c, 0x63, 0x30, 0x48, 0x1b, 0x60, 0xdf, | 1536 | 0xd4, 0x65, 0x99, 0xef, 0x31, 0x17, 0x68, 0xa6, 0x42, 0x3a, 0x33, 0xb0, |
1528 | 0xb6, 0xbd, 0xd9, 0xc4, 0x92, 0xe8, 0x4b, 0xa7, 0x37, 0xc1, 0xd7, 0xd5, | 1537 | 0x76, 0x74, 0x85, 0xe1, 0xf5, 0x01, 0xc7, 0x0d, 0xc3, 0x1b, 0x82, 0x1e, |
1529 | 0xf6, 0x4c, 0x14, 0x7c, 0x3d, 0xd1, 0x16, 0x04, 0xef, 0xf7, 0xc3, 0x35, | 1538 | 0xef, 0x19, 0x79, 0x2e, 0x34, 0x36, 0x5a, 0x44, 0x3b, 0xcf, 0x5a, 0x79, |
1530 | 0xb3, 0xb1, 0x6a, 0xe8, 0xf8, 0x6c, 0xff, 0xb9, 0x66, 0x63, 0xc7, 0x31, | 1539 | 0x1d, 0x86, 0x2f, 0x07, 0xdd, 0xf2, 0xb9, 0x6a, 0xfa, 0x1c, 0x7d, 0xf8, |
1531 | 0x4f, 0x30, 0xa9, 0xe3, 0xfa, 0xaa, 0x1d, 0x3a, 0x64, 0xdb, 0x57, 0x39, | 1540 | 0xf3, 0x78, 0x3e, 0x1f, 0x98, 0xfc, 0xa5, 0x3f, 0x43, 0xbb, 0x84, 0xea, |
1532 | 0x7e, 0x8e, 0xe5, 0xef, 0xf3, 0x43, 0x98, 0xaa, 0xed, 0xb3, 0xfd, 0xeb, | 1541 | 0x05, 0x0d, 0xfb, 0xf2, 0x59, 0xed, 0xf3, 0x13, 0x7f, 0x66, 0xcf, 0xa0, |
1533 | 0xac, 0xcd, 0x19, 0x05, 0x2e, 0x3d, 0xb7, 0x4b, 0xfd, 0x4d, 0x60, 0x74, | 1542 | 0x06, 0x03, 0x26, 0xec, 0xe7, 0x36, 0x7b, 0xcc, 0x69, 0xd4, 0xf4, 0x5b, |
1534 | 0x6b, 0x48, 0xc3, 0x7f, 0x17, 0x3c, 0x18, 0x37, 0xcf, 0x99, 0x6d, 0xec, | 1543 | 0xff, 0x4e, 0xe1, 0x1d, 0xcb, 0xc2, 0xf0, 0x8a, 0xbe, 0x96, 0xf5, 0xd0, |
1535 | 0x63, 0xab, 0x4c, 0x6e, 0xc3, 0x73, 0xf4, 0x5a, 0xdc, 0x87, 0x2f, 0x8b, | 1544 | 0xd7, 0x93, 0xdc, 0x0b, 0x7c, 0x9f, 0xe6, 0x3f, 0x91, 0x03, 0xdc, 0xf7, |
1536 | 0xc8, 0x15, 0x89, 0x61, 0xb5, 0xcd, 0x7d, 0x50, 0xfa, 0xac, 0x8c, 0xfb, | 1545 | 0x02, 0x0e, 0x95, 0xf2, 0x8f, 0x75, 0xa8, 0x74, 0x41, 0xe4, 0x2d, 0x58, |
1537 | 0x1a, 0xf4, 0x7d, 0x0e, 0xfe, 0x78, 0x93, 0x3c, 0x08, 0x9a, 0x56, 0x03, | 1546 | 0x7f, 0xae, 0x31, 0x18, 0xa4, 0x15, 0xb0, 0xef, 0xfa, 0xa5, 0x66, 0x13, |
1538 | 0xa9, 0xe4, 0x82, 0x4a, 0xf5, 0xce, 0xa8, 0x94, 0x3f, 0xa6, 0xae, 0xe7, | 1547 | 0x9b, 0xa2, 0x6f, 0x9e, 0xdd, 0x0c, 0xdf, 0x59, 0xdb, 0x33, 0xdc, 0x57, |
1539 | 0xbc, 0x06, 0x89, 0x8b, 0x19, 0xe2, 0xb7, 0x08, 0xfc, 0x17, 0x81, 0xe3, | 1548 | 0x1f, 0x6b, 0x0d, 0xc3, 0xf7, 0x06, 0xd1, 0x9a, 0xd9, 0xd8, 0x37, 0x74, |
1540 | 0x8b, 0xee, 0xf1, 0xfa, 0x56, 0xb7, 0x18, 0xfd, 0x96, 0xd3, 0xb4, 0x69, | 1549 | 0x7c, 0xbe, 0x57, 0xd6, 0x1b, 0xbb, 0x90, 0xb9, 0x8d, 0x29, 0xbd, 0x4f, |
1541 | 0xec, 0xf2, 0x3f, 0xf6, 0xc3, 0x35, 0x84, 0x6d, 0xc8, 0x1c, 0x99, 0xba, | 1550 | 0xa0, 0xda, 0xa0, 0x43, 0x76, 0xfd, 0x00, 0x38, 0xe5, 0x18, 0xcc, 0x73, |
1542 | 0x6b, 0x94, 0xe5, 0x1a, 0x41, 0x31, 0xe4, 0x40, 0xf7, 0xa9, 0xe4, 0x84, | 1551 | 0x8c, 0x60, 0xaa, 0xb5, 0xcf, 0xf7, 0xae, 0xb3, 0x36, 0xac, 0x0b, 0x5c, |
1543 | 0x5a, 0x0a, 0x36, 0xed, 0xe8, 0xee, 0x7d, 0x42, 0xf7, 0x93, 0xf2, 0xd3, | 1552 | 0xfa, 0x5e, 0x87, 0xfa, 0x5e, 0x68, 0x74, 0x6b, 0x44, 0xc3, 0xff, 0x10, |
1544 | 0x2a, 0x0f, 0x78, 0xb6, 0x4a, 0xd3, 0x0e, 0xe2, 0x99, 0xb0, 0xc6, 0x18, | 1553 | 0x3e, 0x98, 0x30, 0xcf, 0xb9, 0x5d, 0xec, 0x63, 0xa7, 0x8c, 0xef, 0xc2, |
1545 | 0x4f, 0x72, 0xef, 0x40, 0xdd, 0x31, 0xa5, 0xf7, 0xa0, 0x6d, 0x1d, 0xc2, | 1554 | 0xb3, 0x7b, 0x1d, 0xee, 0x03, 0x57, 0xc6, 0xe4, 0xaa, 0xe4, 0x80, 0xda, |
1546 | 0x1c, 0x5f, 0x2f, 0xcd, 0xd4, 0x43, 0x8c, 0x93, 0xbd, 0x96, 0x2e, 0x84, | 1555 | 0xe5, 0x3d, 0x28, 0x3d, 0x56, 0xc6, 0x7d, 0x09, 0xfa, 0xbe, 0x00, 0xff, |
1547 | 0x4c, 0x3a, 0x46, 0x19, 0x18, 0x31, 0xb1, 0xdf, 0xca, 0xcf, 0xa1, 0x9d, | 1556 | 0xbe, 0x49, 0x1e, 0x04, 0x4d, 0xab, 0xbe, 0x74, 0x6a, 0x5e, 0xa5, 0xbb, |
1548 | 0xce, 0x67, 0x89, 0x45, 0x21, 0xa3, 0xa6, 0xc0, 0xc5, 0x87, 0x8e, 0x49, | 1557 | 0xa7, 0x55, 0x3a, 0x18, 0x51, 0x13, 0x9c, 0x57, 0x3f, 0x71, 0x31, 0x4d, |
1549 | 0xb4, 0xc1, 0xfb, 0x5f, 0xcd, 0xc6, 0x6f, 0xa2, 0x0f, 0xc5, 0xb1, 0x1b, | 1558 | 0xfc, 0x96, 0x81, 0xff, 0x32, 0x70, 0x7c, 0xd9, 0x3d, 0xe3, 0xc0, 0xea, |
1550 | 0x24, 0xbf, 0x26, 0xde, 0x52, 0x02, 0xfc, 0xcd, 0x32, 0x79, 0x8c, 0x6b, | 1559 | 0x16, 0xa3, 0xdf, 0x0a, 0x9a, 0x36, 0x8d, 0x9d, 0xff, 0xa7, 0x41, 0xb4, |
1551 | 0x11, 0x85, 0xcc, 0xe1, 0xd8, 0x12, 0xcd, 0xf4, 0x07, 0xc1, 0x38, 0xcb, | 1560 | 0x86, 0x3d, 0x5e, 0x03, 0x73, 0x71, 0xd6, 0x5c, 0xa3, 0x3c, 0xd7, 0x08, |
1552 | 0x4f, 0x92, 0x7f, 0x25, 0xc5, 0x77, 0xb9, 0x93, 0x0b, 0x9b, 0xd4, 0x0a, | 1561 | 0x8a, 0xa1, 0x00, 0xba, 0x4f, 0xa7, 0xc6, 0xd4, 0x62, 0xb8, 0x79, 0x4f, |
1553 | 0x59, 0xdb, 0x62, 0xe1, 0xd0, 0x78, 0x92, 0x92, 0x96, 0x23, 0xd4, 0x37, | 1562 | 0x67, 0xf7, 0x63, 0xba, 0x9f, 0x74, 0x90, 0x55, 0x4f, 0x02, 0x9e, 0x9d, |
1554 | 0xb7, 0xd5, 0xc0, 0x33, 0x7a, 0xc7, 0x94, 0xd7, 0xf8, 0x26, 0xe0, 0xf9, | 1563 | 0xd2, 0xb4, 0x87, 0x78, 0x26, 0xac, 0x71, 0xc6, 0xa7, 0xbc, 0x3b, 0x50, |
1555 | 0x3d, 0xc0, 0xd3, 0x62, 0xe1, 0x69, 0x5c, 0x05, 0x4f, 0x4b, 0x08, 0x0f, | 1564 | 0x77, 0x44, 0xe9, 0x3d, 0x6d, 0x5b, 0x87, 0x30, 0xbf, 0x1b, 0xf8, 0xa5, |
1556 | 0xe4, 0x1c, 0xe5, 0x6a, 0xec, 0x9a, 0x74, 0x59, 0x9c, 0xbc, 0x27, 0x9d, | 1565 | 0x1e, 0x62, 0xcc, 0xed, 0xb5, 0x74, 0x21, 0x64, 0xd2, 0x49, 0xca, 0xc0, |
1557 | 0x4a, 0xfb, 0x2f, 0xd4, 0x37, 0x8d, 0xee, 0xf8, 0x80, 0x2b, 0xe3, 0x5a, | 1566 | 0x98, 0x89, 0x25, 0x57, 0xef, 0xe4, 0xfa, 0xd3, 0x13, 0x88, 0xbb, 0x90, |
1558 | 0xd7, 0x44, 0xaf, 0xe9, 0x2e, 0x2f, 0xc0, 0x7a, 0x15, 0x27, 0xe3, 0x11, | 1567 | 0x51, 0x13, 0xe0, 0xe2, 0xa3, 0x27, 0xc5, 0x6d, 0xf0, 0xbb, 0xd7, 0x1b, |
1559 | 0xf6, 0x7a, 0x76, 0xd5, 0x3d, 0x90, 0xff, 0x8b, 0xa9, 0xa8, 0xb5, 0x25, | 1568 | 0x3f, 0x8c, 0x3e, 0x19, 0xc7, 0x6e, 0x90, 0xe2, 0xaa, 0xf8, 0xcd, 0x24, |
1560 | 0x4a, 0x3e, 0xfd, 0x96, 0xb8, 0xde, 0xdb, 0xaf, 0xc2, 0xf4, 0x12, 0x60, | 1569 | 0xe0, 0x6f, 0x96, 0xf1, 0x93, 0x5c, 0x0b, 0x17, 0x32, 0x87, 0x63, 0x8b, |
1561 | 0x82, 0x3c, 0x3e, 0xd6, 0xe7, 0x8e, 0xca, 0xa5, 0xda, 0x37, 0xb3, 0xb8, | 1570 | 0x9b, 0xeb, 0x0d, 0xc3, 0x51, 0x96, 0x9f, 0x26, 0xff, 0x4a, 0x9a, 0xef, |
1562 | 0xc6, 0xdc, 0x62, 0x35, 0x73, 0x83, 0xfe, 0x53, 0xe1, 0xdc, 0x20, 0x13, | 1571 | 0x0a, 0xa7, 0xe7, 0x37, 0xab, 0x65, 0xb2, 0xb6, 0xc5, 0xc2, 0xa1, 0xf1, |
1563 | 0x51, 0xaf, 0x24, 0xf7, 0x5b, 0x5c, 0xb4, 0x62, 0x4e, 0xb1, 0x9a, 0xf9, | 1572 | 0x24, 0x93, 0x5a, 0x8e, 0x50, 0xdf, 0xcc, 0xd4, 0xc1, 0x13, 0x7c, 0x7c, |
1564 | 0x74, 0x27, 0xf6, 0xb3, 0xcc, 0xcc, 0xa7, 0x27, 0xef, 0xc5, 0x2c, 0x7e, | 1573 | 0xc2, 0x6f, 0x7c, 0x13, 0xf0, 0xfc, 0x0f, 0xc0, 0xd3, 0x62, 0xe1, 0x69, |
1565 | 0x57, 0xc3, 0x58, 0xf5, 0x17, 0x67, 0x24, 0x90, 0x29, 0x1f, 0x6b, 0xd4, | 1574 | 0x5c, 0x01, 0x4f, 0x4b, 0x04, 0x0f, 0xe4, 0x1c, 0xe5, 0x6a, 0xfc, 0xda, |
1566 | 0x4b, 0xff, 0x24, 0x66, 0xf3, 0x98, 0x15, 0x9e, 0x37, 0x58, 0xfe, 0x72, | 1575 | 0x6c, 0x45, 0x9c, 0xa2, 0x2f, 0xed, 0x4a, 0xfb, 0x43, 0xd4, 0x37, 0x8d, |
1567 | 0x25, 0xaf, 0xfd, 0xb7, 0x2f, 0xad, 0x37, 0x7c, 0x1a, 0xb5, 0xf9, 0x6b, | 1576 | 0xde, 0x68, 0x9f, 0x27, 0xa3, 0x5a, 0xd7, 0xb8, 0xd7, 0x76, 0x56, 0xe6, |
1568 | 0xfc, 0xdd, 0xb1, 0xde, 0xee, 0xef, 0xe7, 0xd2, 0xf2, 0xfb, 0xeb, 0x69, | 1577 | 0x61, 0xbd, 0x8a, 0x93, 0xf3, 0x09, 0xfb, 0x5a, 0x76, 0xd5, 0x3d, 0x90, |
1569 | 0x97, 0x34, 0x78, 0x43, 0xab, 0xca, 0x62, 0x28, 0xbb, 0x7d, 0xbd, 0x95, | 1578 | 0xff, 0x0b, 0x69, 0xd7, 0xda, 0x12, 0x93, 0x01, 0xfd, 0xa0, 0x84, 0xce, |
1570 | 0x0b, 0x28, 0xbb, 0x07, 0x7e, 0x1a, 0xf3, 0x34, 0xf8, 0x8e, 0x32, 0xb8, | 1579 | 0x15, 0xa8, 0xc1, 0xf4, 0x12, 0x60, 0x82, 0x3c, 0x3e, 0xd9, 0xe3, 0x0d, |
1571 | 0x16, 0x27, 0x7d, 0x60, 0x45, 0xf2, 0x3c, 0xe5, 0x22, 0x6d, 0x4a, 0xcc, | 1580 | 0xcb, 0x56, 0xed, 0xeb, 0x59, 0x5c, 0x63, 0x6e, 0xf1, 0xba, 0xb9, 0x41, |
1572 | 0x51, 0x7d, 0x27, 0x8c, 0xa3, 0xe3, 0x77, 0x3d, 0xdb, 0x9f, 0xf8, 0x26, | 1581 | 0xff, 0xa9, 0x68, 0x6e, 0x90, 0x89, 0xa8, 0x37, 0x29, 0x7f, 0x64, 0x71, |
1573 | 0xae, 0xe5, 0xdb, 0x53, 0xe0, 0xfb, 0x03, 0xbe, 0x13, 0x9d, 0x65, 0x1e, | 1582 | 0xb1, 0x11, 0x73, 0x8a, 0xd7, 0xcd, 0xa7, 0x33, 0x79, 0x3b, 0xcb, 0xcc, |
1574 | 0x80, 0xa6, 0xe1, 0xda, 0xbe, 0xaf, 0x47, 0xdf, 0x21, 0x2d, 0x93, 0x5e, | 1583 | 0x7c, 0xba, 0x8a, 0x7e, 0xdc, 0xe2, 0x77, 0x2d, 0x9f, 0xc4, 0xd8, 0x3d, |
1575 | 0xae, 0xd7, 0x74, 0xd3, 0x44, 0x5d, 0x7c, 0x8c, 0xf4, 0xc7, 0x58, 0x72, | 1584 | 0xd3, 0x12, 0xca, 0x44, 0x80, 0x35, 0xea, 0xa6, 0x7f, 0x12, 0xb7, 0xb9, |
1576 | 0xb3, 0xd6, 0x8f, 0xd5, 0x75, 0x6c, 0x82, 0xae, 0x89, 0x1b, 0x1e, 0x75, | 1585 | 0xd7, 0x0a, 0xcf, 0x1b, 0x2c, 0x7f, 0x79, 0x52, 0xd4, 0xfe, 0xe0, 0xdf, |
1577 | 0xcd, 0x7e, 0x77, 0xb5, 0xbf, 0x31, 0xf4, 0x47, 0x3b, 0x0d, 0x7e, 0xba, | 1586 | 0x59, 0x3e, 0x75, 0x6d, 0x9e, 0x1c, 0x7f, 0x1f, 0x5c, 0x6f, 0xf3, 0x05, |
1578 | 0xc7, 0x68, 0x0e, 0xe5, 0x97, 0x13, 0x55, 0x57, 0x6a, 0x3f, 0x33, 0xa6, | 1587 | 0x0a, 0x59, 0x79, 0x65, 0x3d, 0xed, 0x92, 0x06, 0xff, 0x57, 0x56, 0x94, |
1579 | 0xf3, 0x8e, 0x96, 0xeb, 0x4e, 0xd8, 0xb1, 0x49, 0xb7, 0x26, 0xfe, 0x5f, | 1588 | 0xc5, 0x51, 0x76, 0x6a, 0xbd, 0x95, 0x0b, 0x28, 0xbb, 0x07, 0x7e, 0x1f, |
1580 | 0x1d, 0x5f, 0x1c, 0xb5, 0x4d, 0x40, 0x65, 0x8d, 0x32, 0x35, 0x40, 0x1a, | 1589 | 0xf3, 0x3e, 0xf8, 0x8e, 0x32, 0xb8, 0x1e, 0x27, 0x3d, 0x60, 0x45, 0xf2, |
1581 | 0xe5, 0xdc, 0xb5, 0x0d, 0x75, 0x0d, 0xed, 0x08, 0x43, 0x9f, 0xb4, 0x9d, | 1590 | 0x3c, 0xe5, 0x22, 0x6d, 0x4a, 0xcc, 0x51, 0x6d, 0x8f, 0xe2, 0xf2, 0xf8, |
1582 | 0xa2, 0xd7, 0x64, 0x0b, 0x8d, 0xc6, 0x67, 0x89, 0xcb, 0xe6, 0x06, 0x9d, | 1591 | 0xbd, 0x96, 0xed, 0x4f, 0x7c, 0x13, 0xd7, 0xf2, 0x8d, 0x09, 0xf0, 0xfd, |
1583 | 0x47, 0x80, 0xb2, 0x72, 0xa8, 0xcb, 0xa2, 0x32, 0xdb, 0xff, 0xbf, 0x83, | 1592 | 0xe1, 0xc0, 0x71, 0x67, 0x98, 0x57, 0xa0, 0x69, 0xb8, 0xbe, 0xef, 0x1b, |
1584 | 0xf4, 0x5e, 0xd6, 0xad, 0xbb, 0x6f, 0x9f, 0x98, 0x11, 0x8d, 0xa7, 0xbf, | 1593 | 0x18, 0x26, 0xb4, 0xb4, 0x4c, 0x7a, 0x21, 0x4f, 0x3b, 0xd2, 0x44, 0x5d, |
1585 | 0xa8, 0xe2, 0xc9, 0xce, 0x2d, 0xbe, 0x7a, 0x6e, 0x05, 0xc0, 0x7b, 0x0f, | 1594 | 0x7c, 0xd2, 0xd3, 0x39, 0xee, 0x39, 0xad, 0x97, 0xeb, 0xd7, 0xb1, 0x09, |
1586 | 0x64, 0x27, 0xd7, 0xc9, 0xe4, 0x6f, 0x3f, 0x2e, 0x4e, 0x34, 0xd3, 0x5b, | 1595 | 0xba, 0x26, 0x61, 0x78, 0xd4, 0x33, 0xfb, 0xe7, 0xb5, 0xfe, 0x46, 0xd0, |
1587 | 0x6f, 0x6e, 0xa5, 0x10, 0xaf, 0x9c, 0x1b, 0x68, 0x35, 0x9c, 0x17, 0x69, | 1596 | 0x1f, 0xed, 0x34, 0xf8, 0xfd, 0x3e, 0xa3, 0x43, 0x94, 0x5f, 0x8e, 0xab, |
1588 | 0x3b, 0xae, 0xf7, 0x89, 0x94, 0x22, 0x2c, 0xad, 0xab, 0x70, 0x1b, 0xd2, | 1597 | 0xae, 0xd6, 0x7e, 0x6b, 0x5c, 0xe7, 0x37, 0x2d, 0xd5, 0x1d, 0xb3, 0x63, |
1589 | 0x9d, 0xa1, 0xb9, 0xa7, 0x34, 0xcd, 0xb5, 0x58, 0x9a, 0x43, 0x5d, 0x97, | 1598 | 0x93, 0x6e, 0xcd, 0x7e, 0x42, 0x6d, 0x7c, 0x71, 0xd4, 0x2e, 0x01, 0x95, |
1590 | 0xfb, 0xde, 0xa3, 0x2d, 0x55, 0x9a, 0xdb, 0x60, 0x69, 0xee, 0x99, 0xf5, | 1599 | 0x35, 0xca, 0x44, 0x1f, 0x69, 0x94, 0x73, 0xd7, 0x36, 0xd4, 0xb5, 0xb4, |
1591 | 0x66, 0x4f, 0xfc, 0xfd, 0x2d, 0x66, 0x4f, 0xea, 0x2f, 0x57, 0x3d, 0x6f, | 1600 | 0x23, 0x0c, 0x7d, 0xd2, 0x76, 0x72, 0xaf, 0xcd, 0x97, 0x1a, 0x8d, 0xcf, |
1592 | 0xa2, 0xcd, 0x08, 0x5f, 0x2c, 0x7c, 0xae, 0x85, 0xf5, 0x0c, 0x60, 0xad, | 1601 | 0x92, 0x90, 0x2d, 0x0d, 0x3a, 0x2f, 0x01, 0x65, 0x95, 0x48, 0x97, 0xb9, |
1593 | 0x95, 0x35, 0x4d, 0x36, 0xee, 0xc6, 0xfd, 0x73, 0xfa, 0x7d, 0x51, 0x79, | 1602 | 0x32, 0xd3, 0xfb, 0x7f, 0xc2, 0xec, 0x41, 0xd6, 0x5d, 0x33, 0x0f, 0x20, |
1594 | 0x14, 0x76, 0x50, 0xbe, 0xfc, 0x8f, 0xc1, 0x02, 0x7c, 0xbf, 0xa9, 0x65, | 1603 | 0x39, 0x2d, 0x1a, 0x4f, 0x5f, 0xab, 0xe1, 0xc9, 0xce, 0x2d, 0xb1, 0x72, |
1595 | 0xdd, 0x7b, 0x5b, 0x0b, 0xf9, 0x6d, 0x06, 0xbf, 0x0e, 0xd6, 0xf8, 0x3c, | 1604 | 0x6e, 0x70, 0x6a, 0xfd, 0x7b, 0x20, 0x3b, 0xb9, 0x4e, 0x26, 0xe7, 0xfc, |
1596 | 0x98, 0x2f, 0xca, 0xfe, 0x01, 0xeb, 0x01, 0xb9, 0xbc, 0x5c, 0x97, 0x31, | 1605 | 0x9c, 0x38, 0x6e, 0xae, 0x7b, 0xad, 0xb9, 0x4d, 0x46, 0x78, 0xe5, 0xdc, |
1597 | 0x0b, 0xe3, 0xe3, 0x30, 0x66, 0x68, 0xf6, 0x13, 0x29, 0xe7, 0xef, 0x84, | 1606 | 0x40, 0xab, 0xd1, 0xbc, 0x48, 0xdb, 0x09, 0xbd, 0xef, 0xa4, 0x14, 0x61, |
1598 | 0x4f, 0x74, 0x0f, 0xf4, 0x24, 0xe9, 0xfb, 0xa5, 0x16, 0x93, 0xe7, 0x1b, | 1607 | 0xd9, 0xb8, 0x02, 0xb7, 0x11, 0xdd, 0x19, 0x9a, 0xfb, 0xa2, 0xa6, 0xb9, |
1599 | 0x87, 0x1e, 0xfb, 0x65, 0x9b, 0x0b, 0x75, 0xf8, 0x57, 0xeb, 0xe7, 0xf8, | 1608 | 0x16, 0x4b, 0x73, 0xa8, 0xeb, 0x71, 0x1f, 0xfd, 0xbe, 0x96, 0x1a, 0xcd, |
1600 | 0x82, 0xf6, 0x1d, 0xd2, 0xcc, 0xdf, 0xb7, 0x98, 0x98, 0xf1, 0xb7, 0x5a, | 1609 | 0x6d, 0xb0, 0x34, 0xa7, 0x5a, 0xcc, 0x1e, 0x7b, 0xb9, 0xc5, 0xec, 0x71, |
1601 | 0xc8, 0x67, 0x6a, 0xdb, 0x0f, 0x37, 0x68, 0xbe, 0x70, 0xc2, 0xe7, 0xcf, | 1610 | 0x25, 0x57, 0x3c, 0xbf, 0x93, 0xcf, 0xf0, 0xc5, 0xa2, 0xe7, 0x7a, 0x58, |
1602 | 0xb4, 0xae, 0x7c, 0x0e, 0xdb, 0x3d, 0xd9, 0xba, 0xb2, 0x5d, 0x58, 0xfe, | 1611 | 0xcf, 0x03, 0xd6, 0x7a, 0x59, 0xd3, 0x64, 0xe3, 0x78, 0xdc, 0x8f, 0xa7, |
1603 | 0x73, 0x1b, 0x57, 0x96, 0x5f, 0xe3, 0xae, 0x6c, 0xff, 0xf5, 0x55, 0xcf, | 1612 | 0xdf, 0xe7, 0xca, 0xa3, 0xb0, 0x83, 0x8a, 0x95, 0x1f, 0x84, 0xf3, 0xf0, |
1604 | 0x2d, 0x9b, 0x56, 0x3e, 0x5f, 0xbd, 0xea, 0x79, 0x6a, 0xd5, 0xf3, 0x85, | 1613 | 0xfd, 0x26, 0x96, 0x74, 0xef, 0x4c, 0x0b, 0xf9, 0x6d, 0x1a, 0xbf, 0x8e, |
1605 | 0x55, 0xcf, 0x57, 0xb5, 0xad, 0x7c, 0xbe, 0xbd, 0xad, 0x3e, 0xbc, 0x87, | 1614 | 0xd4, 0xf9, 0x3c, 0x98, 0x2f, 0xca, 0xfe, 0x19, 0xeb, 0x01, 0xb9, 0xbc, |
1606 | 0xdb, 0x56, 0xc2, 0x75, 0xa7, 0x8e, 0xf7, 0xcf, 0x54, 0xa2, 0xb2, 0xab, | 1615 | 0x54, 0x97, 0x31, 0x10, 0xe3, 0xe3, 0x9c, 0xab, 0xb6, 0xdb, 0xfd, 0x49, |
1607 | 0x80, 0xf7, 0x4e, 0xe7, 0x66, 0xa3, 0xd7, 0x6a, 0xdf, 0x33, 0xbe, 0xf6, | 1616 | 0xca, 0xf9, 0xbb, 0xe1, 0x13, 0xdd, 0x03, 0x3d, 0x49, 0xfa, 0xee, 0xd8, |
1608 | 0xd7, 0xab, 0xfa, 0xab, 0xb6, 0xdb, 0x5d, 0x6d, 0xe7, 0x57, 0xdb, 0x19, | 1617 | 0x60, 0xf2, 0x89, 0x13, 0xd0, 0x63, 0x3f, 0x6f, 0x73, 0xab, 0x6e, 0xbf, |
1609 | 0xd9, 0x36, 0x5b, 0xe1, 0x3b, 0x96, 0x87, 0xfd, 0x9a, 0xb6, 0x53, 0xc5, | 1618 | 0x7d, 0xed, 0x5c, 0x62, 0xd0, 0xbe, 0x43, 0x9a, 0x79, 0xdb, 0x06, 0x13, |
1610 | 0x4e, 0x9d, 0x0b, 0x3b, 0xaa, 0x73, 0x61, 0x93, 0xe0, 0xc3, 0x3b, 0x75, | 1619 | 0x83, 0xde, 0xba, 0x81, 0x7c, 0xa6, 0x76, 0xed, 0xda, 0xa8, 0xf9, 0xc2, |
1611 | 0x4c, 0x69, 0x93, 0x42, 0x79, 0xa5, 0x55, 0xc7, 0x95, 0x74, 0x2c, 0xb5, | 1620 | 0x89, 0x9e, 0xab, 0x2b, 0x9e, 0xa3, 0x76, 0x7f, 0xb3, 0x71, 0x79, 0xbb, |
1612 | 0x30, 0x0a, 0xdb, 0x96, 0x39, 0xb0, 0x81, 0xec, 0xf1, 0xcd, 0xdd, 0xe4, | 1621 | 0xa8, 0xfc, 0xce, 0x4d, 0xcb, 0xcb, 0xff, 0xa3, 0xb7, 0xbc, 0x7d, 0xe3, |
1613 | 0xc4, 0x1e, 0x0e, 0x86, 0xdd, 0x20, 0x98, 0xf4, 0x6e, 0xb3, 0xf9, 0x62, | 1622 | 0xe6, 0xe5, 0xcf, 0x7b, 0x57, 0x3c, 0x7f, 0x64, 0xc5, 0xf3, 0xef, 0xad, |
1614 | 0xb8, 0x57, 0x4c, 0x1b, 0xea, 0xe0, 0x27, 0xa0, 0x83, 0xab, 0xba, 0xf7, | 1623 | 0x78, 0xde, 0xd1, 0xba, 0xfc, 0xf9, 0x43, 0x2b, 0x9e, 0x4f, 0xb5, 0xae, |
1615 | 0x4e, 0x8c, 0xb5, 0x00, 0x9a, 0x19, 0x90, 0xdf, 0xad, 0xa4, 0xbe, 0x24, | 1624 | 0x0d, 0xef, 0x42, 0xeb, 0x72, 0xb8, 0xee, 0xd6, 0xfb, 0x07, 0xd3, 0x55, |
1616 | 0xfa, 0xcc, 0x4d, 0x3f, 0x6c, 0xb8, 0xa5, 0x4f, 0xbd, 0xdf, 0xf3, 0x61, | 1625 | 0x57, 0xf6, 0x96, 0xf0, 0xde, 0x79, 0xdf, 0x16, 0xa3, 0xd7, 0xea, 0xdf, |
1617 | 0xeb, 0x05, 0xf2, 0xb0, 0x3f, 0x08, 0x1a, 0xea, 0x85, 0xbd, 0xe7, 0x69, | 1626 | 0x33, 0x5e, 0xb7, 0x7b, 0xcb, 0xf2, 0xfe, 0x6a, 0xed, 0xf6, 0xd5, 0xda, |
1618 | 0xbf, 0xf4, 0xb4, 0xa6, 0x2d, 0xd2, 0x58, 0x8b, 0xce, 0xd7, 0x7f, 0xd4, | 1627 | 0x05, 0xb5, 0x76, 0x46, 0xb6, 0xcd, 0x54, 0xf9, 0x8e, 0xe5, 0x51, 0xbf, |
1619 | 0x77, 0x62, 0x99, 0xfe, 0x3f, 0x32, 0x71, 0x1a, 0xbf, 0xdb, 0xfd, 0x1a, | 1628 | 0xa6, 0xed, 0x44, 0xd9, 0xd7, 0x39, 0xb7, 0xc3, 0x3a, 0xe7, 0x36, 0x05, |
1620 | 0xf8, 0x76, 0xa7, 0xb7, 0x05, 0x3e, 0x0a, 0x69, 0x88, 0xf1, 0xaf, 0xcb, | 1629 | 0x3e, 0xbc, 0x5b, 0xc7, 0xa8, 0x36, 0xc3, 0x50, 0x1e, 0xaf, 0x6e, 0xd4, |
1621 | 0x75, 0x1e, 0x21, 0x03, 0x68, 0x33, 0x51, 0xc6, 0x09, 0x53, 0x83, 0x63, | 1630 | 0x71, 0x2a, 0xd1, 0x79, 0xb7, 0xc3, 0xb0, 0x6d, 0x99, 0x6b, 0x1b, 0xca, |
1622 | 0xc2, 0x79, 0xa7, 0x12, 0x49, 0xa5, 0xed, 0xaa, 0xe0, 0x46, 0x9f, 0x39, | 1631 | 0xfe, 0xc0, 0xdc, 0x4d, 0xee, 0xed, 0xb1, 0x70, 0xc0, 0x0b, 0xc3, 0x71, |
1623 | 0xb6, 0xdc, 0x63, 0x21, 0x3f, 0xef, 0xff, 0xf4, 0x94, 0x97, 0x73, 0x23, | 1632 | 0xff, 0x76, 0x9b, 0x7f, 0x86, 0x7b, 0xd5, 0xb4, 0xa1, 0x0e, 0x7e, 0x0c, |
1624 | 0x36, 0x2f, 0x37, 0x53, 0x30, 0xb4, 0x39, 0x41, 0xda, 0x84, 0x3f, 0xb5, | 1633 | 0x3a, 0xb8, 0xa6, 0x7b, 0xef, 0xc6, 0x58, 0xf3, 0xa0, 0x99, 0x3e, 0xf9, |
1625 | 0xd8, 0xff, 0xb7, 0x01, 0xed, 0xfb, 0xa4, 0x22, 0xed, 0xff, 0x4d, 0x30, | 1634 | 0x9d, 0x6a, 0xfa, 0xf3, 0xa2, 0xcf, 0x16, 0xf5, 0xc2, 0x86, 0x9b, 0xbf, |
1626 | 0x17, 0x65, 0x5f, 0x84, 0x7b, 0xff, 0xa7, 0x33, 0x1a, 0x57, 0x77, 0xca, | 1635 | 0xf3, 0xbd, 0x7e, 0x00, 0x5b, 0x2f, 0x94, 0x87, 0x83, 0x7e, 0xd0, 0x50, |
1627 | 0x81, 0x22, 0x6d, 0xe1, 0x98, 0xce, 0xe7, 0x18, 0xf7, 0x69, 0xa7, 0xc5, | 1636 | 0x37, 0xec, 0x3d, 0x5f, 0xfb, 0xa5, 0x8f, 0x6b, 0xda, 0x22, 0x8d, 0x31, |
1628 | 0x80, 0xc7, 0x0f, 0x01, 0x7f, 0x2d, 0xb0, 0xb9, 0x47, 0x50, 0x27, 0x22, | 1637 | 0xdf, 0x86, 0x76, 0x81, 0x13, 0xcf, 0xf5, 0xfe, 0xb1, 0x89, 0xd3, 0x04, |
1629 | 0x63, 0x60, 0xf1, 0xd9, 0x02, 0xf9, 0x93, 0xf7, 0x28, 0xea, 0xbb, 0x32, | 1638 | 0x9d, 0xde, 0x97, 0xc0, 0xb7, 0x43, 0xfe, 0x0e, 0xf8, 0x28, 0xa4, 0x21, |
1630 | 0x5f, 0xb8, 0x59, 0xe7, 0xdb, 0x9d, 0x46, 0xdb, 0x27, 0x71, 0xcd, 0x16, | 1639 | 0xc6, 0xd3, 0xb6, 0xdb, 0x7c, 0xc7, 0x36, 0x99, 0x76, 0x19, 0x77, 0x4c, |
1631 | 0x26, 0xd0, 0x66, 0xaf, 0xae, 0x3f, 0x5b, 0x62, 0x8e, 0xb2, 0x40, 0x2e, | 1640 | 0xf7, 0x8f, 0x08, 0xe7, 0x9d, 0x4e, 0xa6, 0x94, 0xb6, 0xab, 0xc2, 0x03, |
1632 | 0xed, 0x97, 0xfc, 0x5c, 0x97, 0x8c, 0xc5, 0x17, 0x66, 0xa2, 0xcb, 0x71, | 1641 | 0x01, 0x73, 0x79, 0xb9, 0x67, 0x43, 0x7e, 0x1e, 0xbe, 0x6b, 0xc2, 0x2f, |
1633 | 0x99, 0x8f, 0x6f, 0xe0, 0x1e, 0x47, 0xfe, 0x4a, 0xee, 0x07, 0x4b, 0x74, | 1642 | 0x78, 0x31, 0x9b, 0xff, 0x9b, 0x2b, 0x19, 0xda, 0x1c, 0x23, 0x6d, 0xc2, |
1634 | 0x74, 0xbb, 0xea, 0x6d, 0xd3, 0x3e, 0xd7, 0xa0, 0xec, 0xac, 0x0c, 0xc9, | 1643 | 0x9f, 0x5a, 0xe8, 0xfd, 0xbb, 0x90, 0xf6, 0x7d, 0x4a, 0x91, 0xf6, 0xbf, |
1635 | 0x4d, 0x95, 0xcf, 0x6e, 0x36, 0xb1, 0xa8, 0x15, 0xf1, 0xad, 0xc3, 0xc4, | 1644 | 0x17, 0xce, 0xba, 0xec, 0x8b, 0x70, 0x0f, 0xdf, 0x95, 0xd3, 0xb8, 0xba, |
1636 | 0x8a, 0x3a, 0x1a, 0xe5, 0xb9, 0x25, 0x99, 0x3d, 0x25, 0x12, 0x39, 0x1a, | 1645 | 0x5b, 0x0e, 0x97, 0x69, 0x0b, 0xc7, 0x75, 0x7e, 0xc8, 0x68, 0x40, 0x3b, |
1637 | 0xc6, 0x12, 0x59, 0xe6, 0x4a, 0xd7, 0x95, 0x80, 0xeb, 0x14, 0x64, 0x6b, | 1646 | 0x2d, 0x0e, 0x3c, 0x8e, 0x01, 0x7f, 0x2d, 0xb0, 0xb9, 0x6f, 0x44, 0x9d, |
1638 | 0x3c, 0x26, 0x5f, 0xdc, 0x16, 0x8e, 0x95, 0x0b, 0xa6, 0xb7, 0xe5, 0xe4, | 1647 | 0x98, 0x8c, 0x0c, 0xb7, 0x80, 0xf7, 0xc8, 0x9f, 0xbc, 0xbb, 0xa8, 0xef, |
1639 | 0xd3, 0xb8, 0xb2, 0x57, 0xa6, 0x4a, 0x19, 0xc5, 0x71, 0xbf, 0x13, 0x50, | 1648 | 0xc9, 0x5c, 0x69, 0x44, 0xe7, 0xef, 0x3d, 0x8e, 0xb6, 0x4f, 0xe0, 0x9a, |
1640 | 0x96, 0xa9, 0x21, 0x4f, 0x72, 0x6d, 0xe1, 0xd8, 0xf0, 0x6f, 0x76, 0x84, | 1649 | 0x29, 0x7d, 0x18, 0x6d, 0xde, 0xaf, 0xeb, 0xcf, 0x4c, 0x32, 0x17, 0x5a, |
1641 | 0xe3, 0xd3, 0xe6, 0x36, 0x67, 0x1e, 0xf2, 0xdc, 0x77, 0x01, 0xfd, 0x45, | 1650 | 0x20, 0x97, 0x3e, 0x21, 0xc5, 0xd9, 0x0e, 0x19, 0x49, 0xcc, 0x4f, 0xbb, |
1642 | 0x86, 0xee, 0xde, 0x40, 0xdf, 0x61, 0x58, 0xd8, 0x0e, 0x32, 0x5d, 0xb1, | 1651 | 0x4b, 0x71, 0x99, 0x47, 0x37, 0x70, 0xcf, 0xa4, 0x78, 0x35, 0xf7, 0x97, |
1643 | 0x6f, 0xc2, 0x49, 0xf8, 0x6b, 0xe1, 0x5c, 0x4c, 0xc6, 0x81, 0xa3, 0xdc, | 1652 | 0xc5, 0x1d, 0xde, 0xad, 0xba, 0x5b, 0xb5, 0xcf, 0xd5, 0x2f, 0x43, 0xd5, |
1644 | 0xeb, 0xc2, 0xdb, 0xe7, 0x7a, 0xaa, 0x1e, 0xbc, 0xa3, 0x36, 0x96, 0xc8, | 1653 | 0x8c, 0xdc, 0x54, 0x7d, 0x62, 0x8b, 0x89, 0x45, 0x2d, 0x8b, 0x6f, 0x1d, |
1645 | 0xf8, 0xe0, 0x3a, 0xe0, 0xad, 0x05, 0xe5, 0x1f, 0x94, 0xa9, 0x63, 0x6f, | 1654 | 0xd3, 0x52, 0xe5, 0x84, 0xcb, 0xf3, 0x59, 0x32, 0x73, 0x56, 0x24, 0x76, |
1646 | 0xdb, 0xcc, 0xbd, 0xec, 0x06, 0xcf, 0xb1, 0x39, 0xa7, 0x3c, 0xbf, 0x73, | 1655 | 0x22, 0x8a, 0x4d, 0xb2, 0xcc, 0x93, 0x8e, 0xab, 0x01, 0xd7, 0x59, 0xc8, |
1647 | 0x37, 0xea, 0xf0, 0xfd, 0xcd, 0x68, 0x93, 0xca, 0x65, 0x22, 0x9b, 0xe1, | 1656 | 0xd6, 0x44, 0x5c, 0x3e, 0xbb, 0x2b, 0x1a, 0xab, 0x10, 0x4e, 0xed, 0x2a, |
1648 | 0x13, 0x71, 0xdc, 0x20, 0xd2, 0xb5, 0xa3, 0x59, 0xe7, 0x90, 0xca, 0x29, | 1657 | 0xc8, 0x9d, 0xb8, 0xf2, 0x57, 0xa7, 0x27, 0x73, 0x8a, 0xe3, 0xfe, 0x75, |
1649 | 0xea, 0xf3, 0xb0, 0xed, 0xdd, 0x3a, 0x47, 0x03, 0x7e, 0x7b, 0x6e, 0x24, | 1658 | 0x48, 0x59, 0xa6, 0x32, 0xbe, 0x14, 0x5a, 0xa3, 0xb1, 0xe1, 0xdf, 0xec, |
1650 | 0x42, 0xf9, 0xd5, 0x2b, 0xc3, 0xd4, 0x27, 0xa7, 0x6e, 0xd6, 0xb4, 0xdf, | 1659 | 0x89, 0xc6, 0xa7, 0xcd, 0x6d, 0xce, 0x56, 0x14, 0xb9, 0x8f, 0x03, 0xfa, |
1651 | 0xbd, 0x8d, 0x67, 0x99, 0xfa, 0x8c, 0x8d, 0x1e, 0x27, 0x8c, 0xa3, 0x28, | 1660 | 0x8b, 0x65, 0x3e, 0xb7, 0x81, 0xbe, 0xc3, 0x80, 0xb0, 0x1d, 0x64, 0xba, |
1652 | 0x87, 0xfd, 0xfe, 0x9a, 0x30, 0xdc, 0xf5, 0x26, 0x61, 0xb8, 0xeb, 0x4d, | 1661 | 0x62, 0xdf, 0x84, 0x93, 0xf0, 0xd7, 0xc3, 0xb9, 0x90, 0x4a, 0x00, 0x47, |
1653 | 0xc2, 0x40, 0x5c, 0x00, 0x8e, 0xca, 0x5f, 0x6c, 0x08, 0x63, 0xd5, 0x97, | 1662 | 0x85, 0xd7, 0x85, 0xb7, 0xc7, 0xf3, 0xd5, 0x5a, 0xf0, 0xde, 0x6c, 0x63, |
1654 | 0x62, 0x1e, 0x07, 0x8b, 0x77, 0xc9, 0xa1, 0xa2, 0xa3, 0xe3, 0x8e, 0x0b, | 1663 | 0x89, 0x8c, 0x0f, 0xae, 0x03, 0xde, 0x5a, 0x50, 0x9e, 0x97, 0x89, 0x93, |
1655 | 0x8a, 0x32, 0xc1, 0x05, 0x4f, 0x82, 0xf7, 0x8a, 0xe0, 0xcd, 0x22, 0x78, | 1664 | 0xb7, 0x6e, 0xe1, 0xde, 0x78, 0x83, 0xef, 0xd8, 0x1c, 0x56, 0x9e, 0x39, |
1656 | 0xb1, 0x08, 0xbe, 0x84, 0xfd, 0x7f, 0x06, 0xf6, 0xff, 0x93, 0x58, 0x9b, | 1665 | 0x9a, 0x40, 0x1d, 0xbe, 0x1f, 0x41, 0x9b, 0x74, 0x21, 0x17, 0xdb, 0x02, |
1657 | 0xd3, 0x2b, 0x78, 0x39, 0xad, 0x79, 0x39, 0x5f, 0xa4, 0xaf, 0xd6, 0x7f, | 1666 | 0x9f, 0x88, 0xe3, 0x86, 0xb1, 0x8e, 0x3d, 0xcd, 0x3a, 0x27, 0x55, 0xce, |
1658 | 0x11, 0x7e, 0x8d, 0xca, 0x70, 0x21, 0x05, 0x55, 0xe2, 0x44, 0xb3, 0xfd, | 1667 | 0x52, 0x9f, 0x47, 0x6d, 0x27, 0x74, 0xce, 0x07, 0xfc, 0xf6, 0xc2, 0x60, |
1659 | 0x9f, 0x24, 0xbf, 0xca, 0x83, 0xfe, 0x0d, 0x68, 0x73, 0x18, 0x34, 0x9e, | 1668 | 0x8c, 0xf2, 0xab, 0x5b, 0x06, 0xa8, 0x4f, 0xce, 0x8e, 0x68, 0xda, 0xef, |
1660 | 0xa2, 0x1d, 0x48, 0xfb, 0x27, 0x07, 0xde, 0x3c, 0x4c, 0x5f, 0x4d, 0x5d, | 1669 | 0xdc, 0xc5, 0xf3, 0x57, 0x3d, 0xc6, 0x46, 0x4f, 0x10, 0xc6, 0x9b, 0x51, |
1661 | 0xb9, 0x49, 0xa8, 0x5f, 0xa2, 0x3b, 0x98, 0x7b, 0xc8, 0xb9, 0x26, 0x57, | 1670 | 0x0e, 0xfb, 0xfd, 0x35, 0x61, 0x28, 0xbc, 0x49, 0x18, 0x0a, 0x6f, 0x12, |
1662 | 0xe1, 0xc9, 0xf0, 0xef, 0x84, 0x47, 0x3d, 0x43, 0xbe, 0x7d, 0x99, 0x7c, | 1671 | 0x06, 0xe2, 0x02, 0x70, 0x54, 0xaf, 0xd8, 0x18, 0xc5, 0xbe, 0xb7, 0x62, |
1663 | 0x5b, 0xc3, 0xab, 0x01, 0xe7, 0x17, 0xb8, 0xdb, 0xea, 0xb5, 0xad, 0xd6, | 1672 | 0x1e, 0x47, 0xca, 0x05, 0x39, 0x5a, 0x76, 0x74, 0xdc, 0x71, 0x5e, 0x51, |
1664 | 0xdf, 0xb4, 0x5c, 0x5f, 0x8f, 0x5f, 0x22, 0x3f, 0x42, 0x27, 0x11, 0xf7, | 1673 | 0x26, 0x78, 0xe0, 0x49, 0xf0, 0x5e, 0x19, 0xbc, 0x59, 0x06, 0x2f, 0x96, |
1665 | 0xc9, 0x4c, 0x64, 0x8b, 0xc5, 0x3d, 0x6c, 0xb7, 0x1d, 0x97, 0x00, 0xf7, | 1674 | 0xc1, 0x97, 0xb0, 0xff, 0xcf, 0x43, 0x3e, 0x3c, 0x81, 0xb5, 0x79, 0x7c, |
1666 | 0x9d, 0x92, 0x9b, 0x0f, 0xc4, 0xdb, 0x11, 0xf6, 0x59, 0xed, 0xc7, 0xb5, | 1675 | 0x19, 0x2f, 0x67, 0x35, 0x2f, 0x17, 0xcb, 0xf4, 0xd5, 0x7a, 0x2f, 0xc3, |
1667 | 0xfd, 0x8c, 0x17, 0x1c, 0x19, 0xd9, 0xc6, 0x7d, 0x08, 0x07, 0x7a, 0x3e, | 1676 | 0xaf, 0xae, 0x0c, 0x94, 0xd2, 0x50, 0x25, 0x8e, 0x9b, 0xef, 0xfd, 0x28, |
1668 | 0x5c, 0x0f, 0xd8, 0xfb, 0x7a, 0xcd, 0x29, 0x63, 0x29, 0x5b, 0x5b, 0x6c, | 1677 | 0xf9, 0x55, 0x1e, 0x0c, 0x0e, 0xa2, 0xcd, 0x24, 0x68, 0x3c, 0x4d, 0x3b, |
1669 | 0xfc, 0x89, 0xfd, 0x1d, 0x5e, 0xb5, 0x4e, 0x17, 0x02, 0x9e, 0x11, 0x9b, | 1678 | 0x90, 0xf6, 0x4f, 0x01, 0xbc, 0x79, 0x8c, 0xbe, 0x9a, 0xba, 0x7a, 0xb3, |
1670 | 0xf2, 0x6e, 0xa8, 0xa1, 0x95, 0xfb, 0x2c, 0xad, 0xa8, 0x55, 0xf3, 0xb8, | 1679 | 0x50, 0xbf, 0xb8, 0x7b, 0x98, 0xcb, 0xc8, 0xb9, 0xa6, 0x56, 0xe0, 0xc9, |
1671 | 0xdd, 0xd2, 0x4a, 0x08, 0x6f, 0x3c, 0xa4, 0x95, 0xa6, 0x90, 0x56, 0x72, | 1680 | 0xf0, 0xef, 0x98, 0x4f, 0x3d, 0x43, 0xbe, 0x7d, 0x96, 0x7c, 0x5b, 0xc7, |
1672 | 0x33, 0x21, 0xad, 0xb0, 0xed, 0xed, 0x21, 0xad, 0x24, 0x6b, 0x69, 0x25, | 1681 | 0xab, 0x3f, 0xc5, 0xf9, 0x85, 0xde, 0xae, 0xb5, 0xda, 0xd6, 0xea, 0x6f, |
1673 | 0x37, 0xe3, 0xe0, 0x5a, 0x0d, 0x07, 0xe9, 0x85, 0xfd, 0x90, 0x5e, 0x00, | 1682 | 0x5e, 0xaa, 0xaf, 0xc7, 0x9f, 0x24, 0x3f, 0xaa, 0xcc, 0x24, 0x71, 0x9f, |
1674 | 0x4b, 0xe5, 0xd6, 0xd6, 0x90, 0x5e, 0xe2, 0xe8, 0xe7, 0x50, 0xd1, 0xe4, | 1683 | 0xca, 0xc5, 0x76, 0x58, 0xdc, 0xc3, 0x76, 0xdb, 0x73, 0x05, 0x70, 0xdf, |
1675 | 0x74, 0xc0, 0xef, 0xb2, 0x3a, 0xc4, 0xc5, 0x9a, 0x1b, 0x1f, 0xb1, 0x3e, | 1684 | 0x2e, 0x85, 0xb9, 0x50, 0xfc, 0x3d, 0x51, 0x9f, 0xb5, 0x7e, 0x3c, 0xdb, |
1676 | 0x8d, 0xf8, 0x96, 0x46, 0xaa, 0x79, 0xee, 0xab, 0x68, 0x03, 0xb8, 0x67, | 1685 | 0xcf, 0x68, 0xc9, 0x91, 0xc1, 0x5d, 0xdc, 0xd7, 0x70, 0xa0, 0xe7, 0xa3, |
1677 | 0x2e, 0xeb, 0x76, 0x4d, 0x1b, 0xf7, 0xfb, 0x53, 0xa8, 0xbb, 0x07, 0xb4, | 1686 | 0xf5, 0x80, 0xbd, 0xaf, 0xd7, 0x9c, 0x32, 0x96, 0xb2, 0xb5, 0xc5, 0xc6, |
1678 | 0x11, 0xe2, 0xe0, 0x7a, 0x8b, 0x83, 0xd5, 0x6b, 0x39, 0x66, 0x71, 0xb0, | 1687 | 0x9f, 0xd8, 0xdf, 0xe4, 0x8a, 0x75, 0x7a, 0x31, 0xe4, 0xb9, 0xb6, 0x09, |
1679 | 0xc7, 0xe2, 0x40, 0xf3, 0x4b, 0x8e, 0x6b, 0xa6, 0x34, 0x0e, 0x9a, 0x34, | 1688 | 0xff, 0x60, 0x1d, 0xad, 0x3c, 0x60, 0x69, 0x45, 0xad, 0x98, 0xc7, 0x5d, |
1680 | 0x0e, 0x44, 0x85, 0x6d, 0xc7, 0xea, 0xe0, 0x80, 0x75, 0xf6, 0xe8, 0xf9, | 1689 | 0x96, 0x56, 0x22, 0x78, 0x13, 0x11, 0xad, 0x34, 0x45, 0xb4, 0x52, 0x98, |
1681 | 0x47, 0x30, 0xff, 0xfd, 0x98, 0xbf, 0xd2, 0xf3, 0xe7, 0x3a, 0x70, 0xfe, | 1690 | 0x8e, 0x68, 0x85, 0x6d, 0xef, 0x8a, 0x68, 0x25, 0x55, 0x4f, 0x2b, 0x85, |
1682 | 0x80, 0xa5, 0x72, 0x72, 0x79, 0xfe, 0x6d, 0xe8, 0xe3, 0x60, 0x31, 0xa2, | 1691 | 0x69, 0x07, 0xd7, 0x4a, 0x38, 0x48, 0x2f, 0xec, 0x87, 0xf4, 0x02, 0x58, |
1683 | 0xe7, 0x0f, 0xdb, 0x7e, 0x30, 0x9c, 0xff, 0xe9, 0x8a, 0xc9, 0x7f, 0x3e, | 1692 | 0xaa, 0x9f, 0x59, 0xa2, 0x97, 0x04, 0xfa, 0x39, 0x5a, 0x36, 0x39, 0x22, |
1684 | 0xbd, 0x46, 0xcf, 0x4d, 0x59, 0xde, 0xf0, 0xb4, 0x5f, 0xcc, 0x98, 0xf6, | 1693 | 0xf0, 0xbb, 0xac, 0x0e, 0xf1, 0xb0, 0xe6, 0xc6, 0x47, 0x5c, 0x9b, 0x46, |
1685 | 0x19, 0xe8, 0xb6, 0x69, 0x3f, 0x69, 0xcf, 0x43, 0x19, 0x7b, 0xe9, 0x1b, | 1694 | 0x02, 0x4b, 0x23, 0xb5, 0x7c, 0xfa, 0x15, 0xb4, 0x01, 0xdc, 0x33, 0x37, |
1686 | 0x3e, 0x79, 0xe7, 0xe3, 0x3a, 0x0f, 0xe5, 0x71, 0xda, 0x4d, 0xc5, 0x36, | 1695 | 0x76, 0xb7, 0xa6, 0x8d, 0xfb, 0x83, 0x12, 0xea, 0x0e, 0x83, 0x36, 0x22, |
1687 | 0x19, 0x99, 0xae, 0x85, 0x9b, 0xf0, 0xe6, 0xb4, 0x1c, 0xcd, 0x62, 0x7e, | 1696 | 0x1c, 0xbc, 0xc7, 0xe2, 0x60, 0xe5, 0x5a, 0xde, 0x66, 0x71, 0x30, 0x6c, |
1688 | 0xe3, 0x7e, 0x2f, 0xe4, 0x9b, 0xa6, 0x25, 0x94, 0xa7, 0x72, 0xc3, 0x91, | 1697 | 0x71, 0xa0, 0xf9, 0xa5, 0xc0, 0x35, 0x53, 0x1a, 0x07, 0x4d, 0x1a, 0x07, |
1689 | 0x26, 0x51, 0x0f, 0x7c, 0x08, 0x73, 0x8e, 0xca, 0x66, 0xaf, 0xdb, 0xdd, | 1698 | 0xa2, 0xa2, 0xb6, 0xb7, 0xad, 0x81, 0x03, 0xd6, 0x19, 0xd6, 0xf3, 0x8f, |
1690 | 0xa1, 0xa8, 0x0b, 0x2f, 0xab, 0xd1, 0x85, 0xed, 0x56, 0x17, 0x6e, 0xa2, | 1699 | 0x61, 0xfe, 0xb7, 0x63, 0xfe, 0x4a, 0xcf, 0x9f, 0xeb, 0x60, 0x72, 0xb9, |
1691 | 0x2e, 0x04, 0xdc, 0x77, 0xca, 0xe1, 0x22, 0xd7, 0x2f, 0x97, 0x6c, 0x82, | 1700 | 0x8b, 0xd5, 0xbf, 0x5e, 0x9a, 0x7f, 0x2b, 0xfa, 0x38, 0x52, 0x8e, 0xe9, |
1692 | 0xfe, 0xff, 0x81, 0xc7, 0xb3, 0x27, 0x3a, 0x6e, 0x96, 0x38, 0xac, 0x69, | 1701 | 0xf9, 0xc3, 0xb6, 0xef, 0x8f, 0xe6, 0xff, 0x78, 0xd5, 0xe4, 0x53, 0x3f, |
1693 | 0x99, 0x3a, 0x2d, 0xa5, 0xcf, 0x6a, 0x2c, 0xd2, 0xc6, 0x8e, 0x33, 0x16, | 1702 | 0xbe, 0x4a, 0xcf, 0x95, 0x2c, 0x6f, 0xf8, 0xda, 0x2f, 0x66, 0x4c, 0xfb, |
1694 | 0x4a, 0xbd, 0xf7, 0xe3, 0xe0, 0x73, 0x75, 0xf4, 0xde, 0x64, 0xd1, 0xd8, | 1703 | 0x3c, 0x74, 0xdb, 0x54, 0x90, 0xb2, 0xe7, 0xae, 0x8c, 0xbd, 0xf4, 0x95, |
1695 | 0x6f, 0x0d, 0xb0, 0x09, 0xe5, 0x44, 0x3b, 0xae, 0x8d, 0x3c, 0xab, 0xd0, | 1704 | 0x80, 0xbc, 0xf3, 0x21, 0x9d, 0xd7, 0x72, 0x8e, 0x76, 0x53, 0xb9, 0x55, |
1696 | 0xdb, 0xa3, 0x9a, 0xa5, 0xe1, 0x44, 0xab, 0x4c, 0x4c, 0x1b, 0x1b, 0x57, | 1705 | 0x06, 0xa7, 0xea, 0xe1, 0x26, 0xbc, 0x05, 0x2d, 0x47, 0xf3, 0x98, 0xdf, |
1697 | 0x9d, 0x00, 0xfe, 0x4f, 0x30, 0xdf, 0x55, 0x74, 0x7e, 0x7e, 0xb6, 0x04, | 1706 | 0x68, 0xd0, 0x0d, 0xf9, 0xa6, 0x69, 0x09, 0xe5, 0xe9, 0xc2, 0x40, 0xac, |
1698 | 0x3b, 0x77, 0xf6, 0x4e, 0x93, 0xb7, 0x32, 0xdd, 0xa0, 0x7f, 0xd3, 0x06, | 1707 | 0x49, 0xd4, 0x03, 0xef, 0xc7, 0x9c, 0x5d, 0xd9, 0xe2, 0x77, 0x7a, 0x7b, |
1699 | 0xc9, 0xfb, 0x69, 0xe8, 0xbb, 0x98, 0x4c, 0xa0, 0xcf, 0xee, 0x6d, 0x8d, | 1708 | 0x14, 0x75, 0xe1, 0x95, 0x75, 0xba, 0xb0, 0xcd, 0xea, 0xc2, 0xcd, 0xd4, |
1700 | 0x98, 0x73, 0x1c, 0x6d, 0xe9, 0xf3, 0x31, 0x8e, 0xd6, 0x28, 0xd1, 0xd9, | 1709 | 0x85, 0x80, 0xfb, 0x6e, 0x39, 0x56, 0xe6, 0xfa, 0x15, 0x52, 0x4d, 0xd0, |
1701 | 0xb8, 0xce, 0xad, 0xe7, 0xd9, 0xd1, 0xcc, 0x60, 0x1b, 0xde, 0x31, 0x9f, | 1710 | 0xff, 0xdf, 0xf1, 0x79, 0xc6, 0x45, 0xc7, 0xcd, 0x92, 0xc7, 0x34, 0x2d, |
1702 | 0xc1, 0xc5, 0x58, 0xa1, 0xec, 0x47, 0xbf, 0x47, 0xc5, 0xee, 0xf7, 0x0c, | 1711 | 0x53, 0xa7, 0xa5, 0xf5, 0x99, 0x90, 0x05, 0xda, 0xd8, 0x09, 0xc6, 0x42, |
1703 | 0x69, 0xfd, 0x17, 0x39, 0xea, 0xda, 0x33, 0x74, 0x83, 0x58, 0xf7, 0x7a, | 1712 | 0xa9, 0xf7, 0xfe, 0x3e, 0xfc, 0xcc, 0x1a, 0x7a, 0x6f, 0xbc, 0x6c, 0xec, |
1704 | 0x7a, 0xd1, 0x18, 0xb9, 0x19, 0xac, 0x9f, 0x3a, 0x15, 0xc5, 0xbd, 0x13, | 1713 | 0xb7, 0x06, 0xd8, 0x84, 0x72, 0xaa, 0x0d, 0xd7, 0x26, 0x9e, 0x89, 0xe8, |
1705 | 0xf7, 0xb0, 0xbf, 0x50, 0x8f, 0x40, 0x37, 0xbe, 0xb3, 0x6f, 0xa3, 0x34, | 1714 | 0xee, 0x52, 0xcd, 0xd2, 0x70, 0x6a, 0xa3, 0x8c, 0x4d, 0x19, 0x1b, 0x57, |
1706 | 0x03, 0xdf, 0xb3, 0x0a, 0xb8, 0x36, 0x39, 0x59, 0x39, 0xcd, 0x0b, 0x55, | 1715 | 0x9d, 0x02, 0xfe, 0x4f, 0x31, 0x7f, 0x56, 0x74, 0xbe, 0x7f, 0x7e, 0x12, |
1707 | 0x7a, 0x78, 0xf2, 0x75, 0xf9, 0x81, 0x34, 0x41, 0x5a, 0xa0, 0x5c, 0x24, | 1716 | 0x76, 0xee, 0xcc, 0xdd, 0xe6, 0x1c, 0xc8, 0x54, 0x83, 0xfe, 0x4d, 0x1b, |
1708 | 0x6d, 0x50, 0x26, 0x3a, 0xfa, 0x6c, 0x03, 0xe9, 0xe1, 0x09, 0xdf, 0x8b, | 1717 | 0xa4, 0x18, 0x64, 0xa1, 0xef, 0xe2, 0x32, 0x86, 0x3e, 0x3b, 0x77, 0x35, |
1709 | 0x70, 0xdf, 0xde, 0xc4, 0xe5, 0x49, 0x1b, 0xa4, 0xf9, 0xa4, 0x8e, 0xd7, | 1718 | 0x62, 0xce, 0x09, 0xb4, 0xa5, 0xcf, 0xc7, 0x38, 0x5a, 0xa3, 0xb8, 0x33, |
1710 | 0xa7, 0xe5, 0x7b, 0x92, 0x6e, 0xeb, 0x86, 0x5d, 0xf6, 0x2f, 0xbb, 0xc6, | 1719 | 0x49, 0x9d, 0xab, 0xcf, 0xf3, 0xae, 0xb9, 0xfe, 0x56, 0xbc, 0x63, 0x7e, |
1711 | 0xe6, 0xdc, 0xad, 0xa6, 0x39, 0xe8, 0x26, 0xe6, 0xd0, 0xf5, 0xca, 0xfb, | 1720 | 0x84, 0x87, 0xb1, 0x22, 0xd9, 0x8f, 0x7e, 0x4f, 0x88, 0xdd, 0xef, 0xc9, |
1712 | 0x2a, 0x39, 0xe0, 0xe1, 0x5e, 0x28, 0xe5, 0x3b, 0x75, 0x5e, 0xe2, 0xee, | 1721 | 0x68, 0xfd, 0x17, 0x3b, 0xe1, 0xd9, 0xb3, 0x7a, 0xfd, 0x58, 0xf7, 0xb5, |
1713 | 0xc2, 0x46, 0xb9, 0xc5, 0x8f, 0xd9, 0xb8, 0xfb, 0x41, 0xd0, 0xc1, 0xa2, | 1722 | 0xf4, 0xa2, 0x31, 0x72, 0x73, 0x58, 0x3f, 0x75, 0xd6, 0xc5, 0xbd, 0x1d, |
1714 | 0x23, 0x27, 0xce, 0xe2, 0x3a, 0xe7, 0x70, 0xfd, 0xce, 0xfb, 0xe9, 0x94, | 1723 | 0xf7, 0xa8, 0xbf, 0x48, 0x8f, 0x40, 0x37, 0xbe, 0xfd, 0xd0, 0x26, 0x69, |
1715 | 0x22, 0xb3, 0x7b, 0xd1, 0xc4, 0xa2, 0xf4, 0xb9, 0x13, 0xfa, 0x0c, 0xc8, | 1724 | 0x06, 0xbe, 0x67, 0x14, 0x70, 0x6d, 0x72, 0xbc, 0x0a, 0x9a, 0x17, 0x6a, |
1716 | 0x82, 0xd3, 0x74, 0xe2, 0xd0, 0x46, 0xe3, 0x4b, 0x03, 0x16, 0xaf, 0xd1, | 1725 | 0xf4, 0xf0, 0xc4, 0xeb, 0xf2, 0x03, 0x69, 0x82, 0xb4, 0x40, 0xb9, 0x48, |
1717 | 0x1d, 0xa1, 0x2d, 0xe7, 0x07, 0x41, 0x96, 0x76, 0x83, 0x28, 0xed, 0x23, | 1726 | 0xda, 0xa0, 0x4c, 0x24, 0x6d, 0x1b, 0x7a, 0x78, 0x2c, 0xf0, 0x63, 0xcc, |
1718 | 0xc1, 0xe7, 0x43, 0x19, 0xe3, 0x13, 0x5b, 0x9d, 0xc6, 0x53, 0x2f, 0x5a, | 1727 | 0x03, 0x30, 0x71, 0x79, 0xd2, 0x06, 0x69, 0x3e, 0xa5, 0xe3, 0xf5, 0x59, |
1719 | 0x5a, 0x91, 0x88, 0x1a, 0x7a, 0xc6, 0x69, 0x38, 0x71, 0x9c, 0x6b, 0xa6, | 1728 | 0xf9, 0x96, 0x64, 0x5b, 0x3b, 0x61, 0x97, 0xfd, 0xdb, 0xae, 0xb1, 0x39, |
1720 | 0xf3, 0xa4, 0x0d, 0x5d, 0x3d, 0xe7, 0x54, 0xe9, 0xea, 0x1b, 0xf6, 0xb7, | 1729 | 0x2b, 0xac, 0x69, 0x0e, 0xba, 0x89, 0x39, 0x79, 0xdd, 0xf2, 0x9e, 0x6a, |
1721 | 0x1a, 0x6a, 0x92, 0x74, 0xaa, 0x09, 0xf3, 0x1d, 0x2e, 0x84, 0x30, 0x7e, | 1730 | 0x01, 0x78, 0xb8, 0x17, 0x4a, 0xf9, 0x6e, 0x9d, 0xe7, 0xb8, 0xaf, 0xb4, |
1722 | 0x1f, 0x70, 0x11, 0x1e, 0xd0, 0xed, 0xec, 0x9f, 0xe1, 0x5a, 0x02, 0x2c, | 1731 | 0x49, 0x6e, 0x09, 0xe2, 0x36, 0xee, 0x7e, 0x04, 0x74, 0xb0, 0xe0, 0xc8, |
1723 | 0xf7, 0x01, 0xee, 0xf3, 0x80, 0xf9, 0x02, 0x2e, 0xd5, 0x11, 0x91, 0x3f, | 1732 | 0xa9, 0x0b, 0xb8, 0x2e, 0x3a, 0x5c, 0xbf, 0x4b, 0x41, 0x36, 0xad, 0xc8, |
1724 | 0x76, 0x22, 0xb3, 0xb5, 0xf0, 0x12, 0xc6, 0xd3, 0x16, 0xde, 0xd7, 0x82, | 1733 | 0xec, 0xbe, 0x9b, 0x5c, 0x90, 0x1e, 0x6f, 0x4c, 0x18, 0xeb, 0x98, 0x77, |
1725 | 0xd5, 0x95, 0xc5, 0x81, 0x2e, 0xc0, 0x43, 0x38, 0x5f, 0x02, 0x8c, 0xb4, | 1734 | 0x9a, 0x4e, 0xfd, 0xfe, 0x26, 0xe3, 0x4b, 0x03, 0x16, 0xbf, 0xd1, 0x1b, |
1726 | 0x5b, 0x9f, 0xc7, 0xb3, 0x0b, 0xf8, 0x5e, 0xb0, 0x30, 0x81, 0x1e, 0xa7, | 1735 | 0xa4, 0x2d, 0x17, 0x84, 0x61, 0x9e, 0x76, 0x83, 0x28, 0xed, 0x23, 0xc1, |
1727 | 0xff, 0x47, 0xf5, 0x77, 0x81, 0x76, 0xf4, 0x9f, 0xdb, 0xe7, 0xce, 0x55, | 1736 | 0xe7, 0x43, 0x19, 0xe3, 0x13, 0x3b, 0x9d, 0xc6, 0xb3, 0x2f, 0x58, 0x5a, |
1728 | 0x32, 0xa0, 0xc7, 0x21, 0x9e, 0xa7, 0x8a, 0x4b, 0xb4, 0x03, 0xc0, 0xf7, | 1737 | 0x91, 0x98, 0xca, 0x3c, 0xed, 0x34, 0x9c, 0x7a, 0x84, 0x6b, 0xa6, 0xf3, |
1729 | 0x3f, 0x94, 0xc8, 0xa9, 0x84, 0x1c, 0x2a, 0x70, 0x0f, 0xe8, 0x24, 0xf0, | 1738 | 0xae, 0x0d, 0x5d, 0x3d, 0xeb, 0xd4, 0xe8, 0xea, 0x2b, 0xf6, 0xb7, 0xca, |
1730 | 0xa1, 0xcf, 0xa4, 0xa0, 0xce, 0x15, 0xb8, 0xa0, 0xec, 0x67, 0xb7, 0xe3, | 1739 | 0x34, 0x49, 0x36, 0xdd, 0x84, 0xf9, 0x0e, 0x94, 0x22, 0x18, 0xbf, 0x0d, |
1731 | 0xea, 0xc5, 0xf5, 0x56, 0x5c, 0x20, 0x87, 0xd9, 0x13, 0xb8, 0xfa, 0xd0, | 1740 | 0xb8, 0x08, 0x0f, 0xe8, 0x76, 0xe6, 0x7f, 0xe2, 0x5a, 0x04, 0x2c, 0xf7, |
1732 | 0xb7, 0x8a, 0x37, 0x09, 0x73, 0xa9, 0xbe, 0x8d, 0x36, 0xda, 0xb6, 0xcc, | 1741 | 0x01, 0xee, 0x4b, 0x80, 0xf9, 0x45, 0x5c, 0x6a, 0x5b, 0x4c, 0xfe, 0xd4, |
1733 | 0xa9, 0xa1, 0x01, 0xe0, 0x6f, 0x00, 0xb0, 0x25, 0x70, 0x31, 0xff, 0xf8, | 1742 | 0x89, 0xcd, 0xd4, 0xc3, 0x4b, 0x18, 0xbf, 0x6b, 0xe1, 0x7d, 0x2d, 0x58, |
1734 | 0x87, 0x8e, 0x9c, 0x7a, 0x19, 0x17, 0x18, 0xec, 0x14, 0x08, 0xf3, 0xd4, | 1743 | 0x3d, 0x59, 0xe8, 0xeb, 0x00, 0x3c, 0x84, 0xf3, 0x25, 0xc0, 0x48, 0xbb, |
1735 | 0x20, 0x2e, 0x28, 0xb1, 0x53, 0x69, 0x5c, 0x23, 0xb8, 0xfe, 0xd2, 0x31, | 1744 | 0xf5, 0x39, 0x3c, 0x7b, 0x80, 0xef, 0x79, 0x0b, 0x13, 0xe8, 0x71, 0xea, |
1736 | 0x3c, 0xd7, 0x09, 0x7c, 0x85, 0x3c, 0x02, 0x9c, 0xaf, 0xe0, 0xb9, 0xaf, | 1745 | 0x2f, 0x6a, 0xbf, 0x4b, 0xb4, 0xa3, 0xff, 0xd2, 0x3e, 0xb7, 0xaf, 0x90, |
1737 | 0x3b, 0x6f, 0x9c, 0xe7, 0x7e, 0xe2, 0x18, 0x9e, 0x7b, 0xc5, 0xa9, 0xf2, | 1746 | 0x01, 0x5d, 0x0e, 0xf1, 0x3c, 0x51, 0x5e, 0xa4, 0x1d, 0x00, 0xbe, 0xff, |
1738 | 0xdc, 0x59, 0x47, 0x3d, 0xfc, 0x8c, 0x13, 0x79, 0x98, 0xbe, 0xc4, 0x59, | 1747 | 0xae, 0xc4, 0xce, 0x26, 0xe5, 0x68, 0x89, 0x7b, 0x40, 0xa7, 0x81, 0x0f, |
1739 | 0xc7, 0xf0, 0x7f, 0x44, 0x86, 0xf7, 0x82, 0x96, 0x1e, 0x5e, 0xc0, 0x45, | 1748 | 0x7d, 0xc6, 0x05, 0x75, 0xae, 0xc2, 0x05, 0x65, 0x3f, 0xb3, 0x1b, 0x57, |
1740 | 0xba, 0x7a, 0x16, 0xe5, 0x2f, 0xac, 0x1a, 0xf7, 0xf9, 0x37, 0x31, 0xee, | 1749 | 0x37, 0xae, 0xb7, 0xe2, 0x02, 0x39, 0xcc, 0x9c, 0xc2, 0xd5, 0x83, 0xbe, |
1741 | 0xab, 0x76, 0x5c, 0x51, 0xd5, 0x71, 0x2f, 0xa0, 0xef, 0x97, 0xec, 0xb8, | 1750 | 0x55, 0xa2, 0x49, 0x98, 0x9b, 0xf5, 0x0d, 0xb4, 0xd1, 0xb6, 0x65, 0x41, |
1742 | 0x17, 0x6a, 0xc6, 0x05, 0xad, 0x3c, 0xbc, 0x84, 0x8b, 0x74, 0xf1, 0x22, | 1751 | 0x65, 0xfa, 0x80, 0xbf, 0x3e, 0xc0, 0x96, 0xc4, 0xc5, 0x7c, 0xe6, 0xef, |
1743 | 0xca, 0x43, 0x99, 0x80, 0x85, 0x6e, 0x6e, 0xd0, 0x67, 0x9d, 0xe2, 0x5e, | 1752 | 0x3a, 0x72, 0xf6, 0x65, 0x5c, 0x60, 0xb0, 0xb3, 0x20, 0xcc, 0xb3, 0xfd, |
1744 | 0xc3, 0xb2, 0x6e, 0x4c, 0xd7, 0xe8, 0x87, 0x37, 0xa2, 0x1f, 0x27, 0x8b, | 1753 | 0xb8, 0xa0, 0xc4, 0xce, 0x66, 0x71, 0x0d, 0xe2, 0xfa, 0x2b, 0xc7, 0xf0, |
1745 | 0xb4, 0x11, 0x17, 0x6a, 0xe4, 0x02, 0x7d, 0xa3, 0x40, 0x8e, 0x69, 0x3f, | 1754 | 0x5c, 0x3b, 0xf0, 0x15, 0xf1, 0x08, 0x70, 0xbe, 0x8c, 0xe7, 0xbe, 0xec, |
1746 | 0x88, 0x3e, 0x11, 0xfd, 0xa3, 0xd5, 0xb6, 0xd5, 0x27, 0x75, 0xee, 0xd8, | 1755 | 0xbc, 0x71, 0x9e, 0xfb, 0xbe, 0x63, 0x78, 0xee, 0x15, 0xa7, 0xc6, 0x73, |
1747 | 0xaf, 0x15, 0x3a, 0xe5, 0xd3, 0x05, 0xda, 0x84, 0xa4, 0x97, 0x20, 0x98, | 1756 | 0x17, 0x1c, 0xf5, 0xf0, 0xd3, 0x4e, 0xec, 0x61, 0xfa, 0x12, 0x17, 0x1c, |
1748 | 0xd8, 0x41, 0xfb, 0x34, 0x17, 0x5c, 0xe2, 0x91, 0x4e, 0x3c, 0xf7, 0x33, | 1757 | 0xc3, 0xff, 0x31, 0x19, 0x38, 0x08, 0x5a, 0x7a, 0x78, 0x1e, 0x17, 0xe9, |
1749 | 0x6b, 0x75, 0x46, 0x69, 0x18, 0xbe, 0x7b, 0xe6, 0xe8, 0xaf, 0x40, 0x67, | 1758 | 0xea, 0x19, 0x94, 0x3f, 0xbf, 0x62, 0xdc, 0xe7, 0xde, 0xc4, 0xb8, 0xaf, |
1750 | 0x34, 0x00, 0x6e, 0xd2, 0x5b, 0x87, 0xdc, 0x58, 0x52, 0x53, 0x9b, 0x25, | 1759 | 0xda, 0x71, 0x45, 0xd5, 0xc6, 0x7d, 0x11, 0x7d, 0xbf, 0x64, 0xc7, 0x7d, |
1751 | 0x21, 0x37, 0x15, 0x1a, 0x61, 0xf7, 0x30, 0xaf, 0xaa, 0x59, 0xba, 0x77, | 1760 | 0xb1, 0x6e, 0x5c, 0xd0, 0xca, 0xc3, 0x8b, 0xb8, 0x48, 0x17, 0x2f, 0xa0, |
1752 | 0xc4, 0x4c, 0xde, 0xb7, 0x1b, 0xc7, 0x6f, 0xd7, 0xe4, 0xa1, 0xc7, 0x13, | 1761 | 0x3c, 0x92, 0x09, 0x1f, 0xf4, 0xa4, 0xb9, 0x01, 0xbc, 0x1b, 0x87, 0x7e, |
1753 | 0x78, 0xff, 0x7b, 0x2e, 0xe5, 0x60, 0xdc, 0xbb, 0x56, 0xe7, 0xf4, 0x74, | 1762 | 0x6c, 0x58, 0xd2, 0x8d, 0xd9, 0x3a, 0xfd, 0xf0, 0x46, 0xf4, 0xe3, 0x78, |
1754 | 0xed, 0xa0, 0xdd, 0x72, 0xbd, 0xd6, 0xe1, 0xd1, 0x35, 0x76, 0x92, 0xea, | 1763 | 0x99, 0x36, 0xe2, 0x7c, 0x9d, 0x5c, 0xa0, 0x6f, 0x14, 0xca, 0x49, 0xed, |
1755 | 0x70, 0xa5, 0x6a, 0xa3, 0x8d, 0x17, 0x52, 0x49, 0xc2, 0xf5, 0x90, 0x70, | 1764 | 0x07, 0xd1, 0x27, 0xa2, 0x7f, 0xb4, 0xd2, 0xb6, 0xfa, 0xa8, 0xce, 0x45, |
1756 | 0xff, 0xeb, 0x1e, 0xc9, 0xfb, 0xad, 0xf0, 0x0b, 0x18, 0x3b, 0x4f, 0xf5, | 1765 | 0xfb, 0x95, 0x52, 0xbb, 0xdc, 0x59, 0xa2, 0x4d, 0x48, 0x7a, 0x09, 0xc3, |
1757 | 0xd2, 0x36, 0x9a, 0x9d, 0x76, 0x6d, 0x5e, 0xf4, 0x46, 0x79, 0x4e, 0x8f, | 1766 | 0xb1, 0x3d, 0xb4, 0x4f, 0x0b, 0xe1, 0x15, 0x3e, 0xe9, 0xc4, 0xf7, 0x7e, |
1758 | 0xd3, 0xa8, 0x61, 0x34, 0x67, 0x25, 0xb8, 0x8f, 0x10, 0xd3, 0xe7, 0x73, | 1767 | 0x79, 0xb5, 0xce, 0x98, 0x1c, 0x80, 0xef, 0x9e, 0x3b, 0xf1, 0x8b, 0xd0, |
1759 | 0x66, 0xcb, 0x2d, 0x5a, 0xef, 0xcc, 0x96, 0x99, 0x87, 0x0f, 0x7f, 0xaa, | 1768 | 0x19, 0x0d, 0x80, 0x9b, 0xf4, 0xb6, 0x4d, 0x0e, 0x4c, 0xaa, 0x89, 0x2d, |
1760 | 0xcc, 0xbc, 0x7b, 0x5f, 0xdc, 0x77, 0xc2, 0xcf, 0x2d, 0x6f, 0x91, 0xf1, | 1769 | 0x90, 0x25, 0x37, 0x95, 0x1a, 0x61, 0xf7, 0x30, 0x4f, 0xab, 0x59, 0x3a, |
1761 | 0xe9, 0x75, 0xd2, 0xe8, 0xa9, 0xf8, 0x66, 0xc8, 0x47, 0xb6, 0xe9, 0xda, | 1770 | 0xf7, 0xc4, 0x4d, 0x1e, 0xb9, 0x97, 0xc0, 0x6f, 0xcf, 0xe4, 0xb5, 0x27, |
1762 | 0x01, 0xff, 0x70, 0x66, 0xab, 0x3c, 0x39, 0xc3, 0xbe, 0x3b, 0x64, 0x6e, | 1771 | 0x92, 0x78, 0xff, 0x0f, 0x1e, 0xe5, 0x60, 0xc2, 0xbf, 0x4e, 0xe7, 0x08, |
1763 | 0x5e, 0x1c, 0xf7, 0x9d, 0xeb, 0x51, 0x07, 0x72, 0x7d, 0x07, 0xcb, 0x92, | 1772 | 0x75, 0xec, 0xa1, 0xdd, 0x72, 0x83, 0xd6, 0xe1, 0xee, 0x2a, 0x3b, 0x49, |
1764 | 0xb8, 0x8b, 0x72, 0xdf, 0x19, 0x95, 0x73, 0x03, 0x7c, 0x66, 0xee, 0xbf, | 1773 | 0x6d, 0xf3, 0xa4, 0x66, 0xa3, 0x8d, 0x96, 0xd2, 0x29, 0xc2, 0xf5, 0x90, |
1765 | 0x44, 0xd9, 0xdf, 0xb9, 0x81, 0x4e, 0x79, 0x7c, 0x1e, 0x34, 0x01, 0xb9, | 1774 | 0x70, 0xff, 0xeb, 0x1e, 0x29, 0x06, 0x1b, 0xe1, 0x17, 0x30, 0x76, 0x9e, |
1766 | 0x3f, 0x72, 0x82, 0x30, 0x89, 0xec, 0x9a, 0x65, 0x2c, 0xbd, 0xdb, 0x65, | 1775 | 0xee, 0xa6, 0x6d, 0x34, 0x33, 0xe5, 0xd9, 0x3c, 0xeb, 0x4d, 0xf2, 0xac, |
1767 | 0xdc, 0x94, 0xfb, 0x34, 0xb7, 0x0c, 0x70, 0x2c, 0xe8, 0x25, 0xe8, 0xb8, | 1776 | 0x1e, 0xa7, 0x51, 0xc3, 0x68, 0xce, 0x5e, 0x70, 0x1f, 0x21, 0xae, 0xcf, |
1768 | 0xae, 0x1d, 0x46, 0x16, 0xa4, 0x67, 0x1b, 0x50, 0xce, 0x7e, 0xe1, 0x3f, | 1777 | 0xfb, 0xcc, 0x54, 0x5a, 0xb4, 0xde, 0x99, 0xa9, 0x30, 0xaf, 0x1f, 0xfe, |
1769 | 0xee, 0x65, 0x3f, 0x61, 0x5b, 0x85, 0x39, 0x35, 0x6a, 0x7a, 0x59, 0x5a, | 1778 | 0x54, 0x85, 0x79, 0xfc, 0x81, 0x78, 0x6f, 0x87, 0x9f, 0x5b, 0xd9, 0x21, |
1770 | 0xa5, 0x3f, 0xce, 0xfc, 0x4c, 0xf6, 0x37, 0xfb, 0xe8, 0xd5, 0x7b, 0x21, | 1779 | 0xa3, 0x53, 0xeb, 0xa4, 0xd1, 0x57, 0x89, 0x2d, 0xd0, 0x1f, 0x6c, 0xd3, |
1771 | 0xdc, 0x53, 0x36, 0xb6, 0x15, 0xd7, 0x44, 0xef, 0x29, 0xc0, 0xae, 0xba, | 1780 | 0xb1, 0x07, 0xfe, 0xe1, 0xf4, 0x4e, 0x79, 0x62, 0x9a, 0x7d, 0x6f, 0x93, |
1772 | 0x42, 0xdb, 0x17, 0x73, 0x15, 0xae, 0x20, 0x63, 0x51, 0xe1, 0x1a, 0x25, | 1781 | 0xd9, 0x39, 0x71, 0xbc, 0xb7, 0xaf, 0x47, 0x1d, 0xc8, 0xf5, 0x3d, 0x2c, |
1773 | 0xe4, 0xd1, 0xe2, 0xf2, 0x3a, 0x6d, 0x69, 0x58, 0xb9, 0x4e, 0xa4, 0x15, | 1782 | 0x4b, 0xe1, 0x2e, 0xca, 0x7b, 0xbb, 0x2b, 0x17, 0xfb, 0xf8, 0xcc, 0xb3, |
1774 | 0x7f, 0xcc, 0xda, 0x1e, 0x8b, 0x92, 0x83, 0x5d, 0xd6, 0xab, 0xd7, 0x6c, | 1783 | 0x04, 0xe2, 0xb2, 0xbf, 0x8b, 0x7d, 0xed, 0x72, 0x6e, 0x0e, 0x34, 0x01, |
1775 | 0x11, 0xb6, 0xac, 0x5d, 0x33, 0x6d, 0xcf, 0xe6, 0xc3, 0x35, 0x1b, 0x85, | 1784 | 0xb9, 0x3f, 0x78, 0x8a, 0x30, 0x89, 0xec, 0x9d, 0x61, 0x2c, 0xbd, 0xd3, |
1776 | 0xc6, 0x29, 0xab, 0x4d, 0x5c, 0x33, 0x97, 0xf1, 0x6e, 0xe0, 0x3d, 0x87, | 1785 | 0x63, 0xdc, 0x94, 0xfb, 0x34, 0xb7, 0xf4, 0x71, 0x2c, 0xe8, 0x25, 0xe8, |
1777 | 0x75, 0xca, 0x61, 0x8d, 0x72, 0xe5, 0x0e, 0x99, 0x3d, 0xa6, 0x3a, 0x1b, | 1786 | 0xb8, 0x8e, 0x3d, 0x46, 0x16, 0x64, 0x67, 0x1a, 0x50, 0xce, 0x7e, 0xe1, |
1778 | 0x44, 0x92, 0xe3, 0x5e, 0x87, 0x4c, 0xce, 0x33, 0x96, 0xb0, 0x05, 0x36, | 1787 | 0x3f, 0x1e, 0x64, 0x3f, 0x51, 0x5b, 0x85, 0x39, 0x35, 0x6a, 0x7a, 0x59, |
1779 | 0xd8, 0x56, 0x5c, 0x9d, 0x78, 0x66, 0x3b, 0xf0, 0x54, 0x59, 0xa1, 0x6d, | 1788 | 0x5c, 0xa1, 0x3f, 0xce, 0xff, 0x48, 0xf6, 0x37, 0xfb, 0xe8, 0xd6, 0x7b, |
1780 | 0xd3, 0x1a, 0x3b, 0xeb, 0x71, 0x8c, 0xcd, 0x1c, 0xe1, 0x27, 0x80, 0x87, | 1789 | 0x21, 0xdc, 0x53, 0x36, 0xb6, 0x15, 0xd7, 0x44, 0xef, 0x29, 0xc0, 0xae, |
1781 | 0x2a, 0xef, 0x4c, 0xd5, 0xc4, 0x9f, 0x38, 0x57, 0xad, 0x43, 0x31, 0xdf, | 1790 | 0xba, 0x4a, 0xdb, 0x17, 0xb3, 0x55, 0xae, 0x20, 0x63, 0x51, 0xd1, 0x1a, |
1782 | 0xb8, 0x5e, 0x4f, 0x1d, 0x87, 0x2a, 0x36, 0xbe, 0x19, 0x7b, 0x2a, 0x41, | 1791 | 0x25, 0xe5, 0xd1, 0xf2, 0xd2, 0x3a, 0xed, 0x68, 0x58, 0xbe, 0x4e, 0xa4, |
1783 | 0x7b, 0x2a, 0x5b, 0x72, 0xcd, 0xf9, 0x80, 0x51, 0xf8, 0x4e, 0x5e, 0xef, | 1792 | 0x95, 0x60, 0xc4, 0xda, 0x1e, 0x0b, 0x72, 0x0c, 0x76, 0x59, 0xb7, 0x5e, |
1784 | 0x26, 0xd2, 0xfa, 0xd8, 0x0c, 0xe1, 0x8a, 0x85, 0x70, 0xad, 0x58, 0x33, | 1793 | 0xb3, 0x05, 0xd8, 0xb2, 0x76, 0xcd, 0xb4, 0x3d, 0x5b, 0x8c, 0xd6, 0x6c, |
1785 | 0x9e, 0xe7, 0x5a, 0x1b, 0xe7, 0x98, 0x5a, 0xce, 0x5f, 0x34, 0xb1, 0x7d, | 1794 | 0x18, 0x1a, 0xa7, 0x92, 0xd9, 0xcc, 0x35, 0xf3, 0x18, 0xef, 0x06, 0xde, |
1786 | 0xc6, 0x51, 0x3a, 0xeb, 0xc0, 0x74, 0xa7, 0xb6, 0x61, 0x45, 0x8d, 0xc9, | 1795 | 0x0b, 0x58, 0xa7, 0x02, 0xd6, 0xa8, 0x50, 0xd9, 0x26, 0x33, 0x27, 0x55, |
1787 | 0x81, 0x22, 0xcf, 0x82, 0x31, 0x9e, 0x78, 0x23, 0xe3, 0x49, 0xbd, 0xb3, | 1796 | 0x7b, 0x83, 0x48, 0x6a, 0xd4, 0xdf, 0x26, 0xe3, 0x73, 0x8c, 0x25, 0xec, |
1788 | 0xf2, 0x5e, 0x8c, 0xcd, 0x5c, 0x1d, 0x65, 0xe3, 0x37, 0x1b, 0x6c, 0x8e, | 1797 | 0x80, 0x0d, 0xb6, 0x13, 0x57, 0x3b, 0x9e, 0xd9, 0x2e, 0x21, 0xc5, 0x8a, |
1789 | 0x48, 0x6d, 0x0c, 0xc7, 0xe4, 0xf2, 0xac, 0xcc, 0x8b, 0x4e, 0x8d, 0x2e, | 1798 | 0x42, 0xdb, 0xa6, 0x55, 0x76, 0xd6, 0x39, 0x8c, 0xcd, 0x33, 0x9d, 0x8f, |
1790 | 0x61, 0x9d, 0x7f, 0x5d, 0xef, 0x0d, 0x4a, 0x29, 0x02, 0xed, 0x37, 0x3e, | 1799 | 0x01, 0x0f, 0x35, 0xde, 0x29, 0xd5, 0xc5, 0x9f, 0x38, 0x57, 0xad, 0x43, |
1791 | 0x90, 0x1a, 0x34, 0xe7, 0x60, 0x92, 0xb2, 0xb3, 0x68, 0xe6, 0x7f, 0x5e, | 1800 | 0x31, 0xdf, 0x84, 0x5e, 0x4f, 0x1d, 0x87, 0x2a, 0x37, 0xbe, 0x19, 0x7b, |
1792 | 0xe7, 0xf4, 0x98, 0xdc, 0x45, 0x93, 0xef, 0x73, 0x8f, 0x9c, 0x87, 0x0e, | 1801 | 0x2a, 0x49, 0x7b, 0x2a, 0x3f, 0xe9, 0x99, 0xf3, 0x06, 0xc3, 0xf0, 0x9d, |
1793 | 0xaf, 0xae, 0x6d, 0x93, 0x4c, 0x02, 0x17, 0x59, 0xbd, 0x2f, 0x91, 0x94, | 1802 | 0xfc, 0xfc, 0x66, 0xd2, 0xfa, 0xc8, 0x34, 0xe1, 0x8a, 0x47, 0x70, 0x2d, |
1794 | 0xec, 0xc0, 0xc7, 0x37, 0xf1, 0x9c, 0x44, 0x0c, 0xeb, 0x93, 0x9f, 0xe1, | 1803 | 0x5b, 0x33, 0x9e, 0x0f, 0x5b, 0x1d, 0xe7, 0x28, 0x2d, 0xe5, 0x43, 0x9a, |
1795 | 0xd9, 0x49, 0xf6, 0x7b, 0xb1, 0xbe, 0x28, 0x66, 0x99, 0x87, 0x0f, 0x59, | 1804 | 0xd8, 0x3e, 0xe3, 0x28, 0xed, 0x6b, 0xc0, 0x74, 0xb7, 0xb6, 0x61, 0x45, |
1796 | 0xf9, 0xb6, 0xbe, 0x44, 0xb3, 0x7e, 0xbf, 0xce, 0xe6, 0x5b, 0x3b, 0x22, | 1805 | 0xdd, 0x26, 0x87, 0xcb, 0x3c, 0x5b, 0xc6, 0x78, 0xe2, 0x27, 0x19, 0x5f, |
1797 | 0x37, 0x06, 0xf2, 0x87, 0x10, 0x9f, 0x8f, 0xd9, 0x39, 0x25, 0x75, 0xcc, | 1806 | 0xea, 0x9e, 0x91, 0x63, 0x18, 0x9b, 0xb9, 0x3f, 0xca, 0xc6, 0x6f, 0x36, |
1798 | 0x4a, 0x82, 0x73, 0x7e, 0xc2, 0xc6, 0x2c, 0x39, 0x97, 0x1b, 0x2c, 0x7d, | 1807 | 0xd8, 0x1c, 0x91, 0xfa, 0x18, 0x8e, 0xc9, 0x0d, 0x5a, 0x9e, 0x67, 0x9d, |
1799 | 0x1b, 0xfb, 0xa7, 0x6a, 0x43, 0x9b, 0x7d, 0xbf, 0x27, 0xb5, 0x2c, 0xec, | 1808 | 0x1e, 0x5e, 0xc4, 0x3a, 0xff, 0x9a, 0xde, 0x1b, 0x94, 0xc9, 0x18, 0xb4, |
1800 | 0xb7, 0xb6, 0xb3, 0x8e, 0xf3, 0x1c, 0x17, 0x9d, 0x13, 0x10, 0xfa, 0x46, | 1809 | 0xdf, 0x68, 0x5f, 0xba, 0xdf, 0x9c, 0xab, 0x49, 0xc9, 0x50, 0xd9, 0xcc, |
1801 | 0x3d, 0x35, 0x7e, 0x81, 0xf1, 0xe5, 0xf2, 0xd3, 0xf5, 0x64, 0x54, 0xd5, | 1810 | 0xff, 0x92, 0xce, 0x11, 0x32, 0xb9, 0x90, 0x26, 0x7f, 0xe8, 0x1e, 0xb9, |
1802 | 0x27, 0xa4, 0x2f, 0x37, 0xb1, 0x8d, 0xdf, 0x2d, 0x08, 0x7d, 0xb9, 0x7e, | 1811 | 0x04, 0x1d, 0x5e, 0x5b, 0xdb, 0x26, 0x19, 0x07, 0x2e, 0xf2, 0x7a, 0x5f, |
1803 | 0xeb, 0xcb, 0xb5, 0x6a, 0x5f, 0xce, 0xc4, 0x1e, 0x5a, 0x97, 0x7d, 0xb9, | 1812 | 0x22, 0x25, 0xf9, 0xbe, 0x47, 0x37, 0xf3, 0xdc, 0x45, 0x1c, 0xeb, 0x53, |
1804 | 0xfc, 0x74, 0x0e, 0xb4, 0x12, 0x7e, 0x67, 0xc1, 0xd8, 0x42, 0x93, 0x05, | 1813 | 0x9c, 0xe6, 0x59, 0x4c, 0xf6, 0x7b, 0xb9, 0xbe, 0x28, 0x66, 0x99, 0xd7, |
1805 | 0x9e, 0x79, 0x69, 0x94, 0xec, 0xa8, 0x82, 0xdf, 0x60, 0x7c, 0x2c, 0xc6, | 1814 | 0x0f, 0x59, 0xf9, 0x63, 0x3d, 0xc9, 0x66, 0xfd, 0x7e, 0x9d, 0xcd, 0xdf, |
1806 | 0x2a, 0x94, 0xfa, 0x96, 0xf5, 0x2f, 0x3a, 0x25, 0xdd, 0xbe, 0x0e, 0xf3, | 1815 | 0x76, 0x44, 0x0e, 0x84, 0xf2, 0x87, 0xd0, 0x93, 0x67, 0xec, 0x9c, 0x52, |
1807 | 0xbe, 0x53, 0xaf, 0xf9, 0x5c, 0xc1, 0xec, 0x7d, 0x66, 0xf7, 0x32, 0x26, | 1816 | 0x3a, 0x66, 0x25, 0xe1, 0xc5, 0x20, 0x69, 0x63, 0x96, 0x9c, 0xcb, 0x41, |
1808 | 0xc4, 0x73, 0x4d, 0x9a, 0xbf, 0x92, 0xc3, 0x91, 0x5e, 0x63, 0xcf, 0x7a, | 1817 | 0x4b, 0xdf, 0xc6, 0xfe, 0xa9, 0xd9, 0xd0, 0x66, 0xdf, 0xef, 0x09, 0x2d, |
1809 | 0xdf, 0x04, 0xde, 0x4f, 0x02, 0xe7, 0x31, 0x3b, 0x6e, 0x12, 0x30, 0x1d, | 1818 | 0x0b, 0x7b, 0xad, 0xed, 0xac, 0xe3, 0x3c, 0x8f, 0x88, 0xce, 0x09, 0x88, |
1810 | 0xc0, 0xda, 0x5c, 0x6b, 0x65, 0x32, 0xc7, 0xde, 0xd3, 0xc4, 0xd8, 0xc0, | 1819 | 0x7c, 0xa3, 0xae, 0x3a, 0xbf, 0xc0, 0xf8, 0x72, 0xc5, 0xa9, 0xb5, 0x64, |
1811 | 0x7c, 0x21, 0x8c, 0x11, 0x46, 0xec, 0x99, 0x4a, 0x2f, 0xd2, 0xe8, 0xad, | 1820 | 0x54, 0xcd, 0x27, 0xa4, 0x2f, 0x37, 0xb6, 0x8b, 0xdf, 0x47, 0x88, 0x7c, |
1812 | 0xab, 0x6b, 0xab, 0x9e, 0x7e, 0x5d, 0xdd, 0x44, 0x5a, 0xba, 0x53, 0xe7, | 1821 | 0xb9, 0x5e, 0xeb, 0xcb, 0x6d, 0xd4, 0xbe, 0x9c, 0x89, 0x3d, 0x6c, 0x5c, |
1813 | 0xb9, 0xac, 0x1f, 0x48, 0xed, 0xd1, 0x39, 0xf2, 0x3a, 0xc6, 0x98, 0x13, | 1822 | 0xf2, 0xe5, 0x8a, 0x53, 0x05, 0xd0, 0x4a, 0xf4, 0x3d, 0x07, 0x63, 0x0b, |
1814 | 0xe6, 0x94, 0x7d, 0x57, 0xde, 0xa1, 0x65, 0xfe, 0x01, 0x9f, 0xfa, 0x6b, | 1823 | 0x8d, 0x97, 0x78, 0x86, 0xa6, 0x51, 0xf2, 0xc3, 0x0a, 0x7e, 0x83, 0xf1, |
1815 | 0x87, 0xfe, 0xdd, 0x38, 0x14, 0x04, 0xe7, 0x06, 0xee, 0x86, 0xad, 0xe2, | 1824 | 0xb1, 0x18, 0xab, 0x50, 0xea, 0xeb, 0xd6, 0xbf, 0x68, 0x97, 0x6c, 0xdb, |
1816 | 0xb9, 0xdf, 0x97, 0xee, 0xc4, 0xb0, 0xb6, 0x9d, 0xb0, 0x46, 0x7b, 0x9b, | 1825 | 0x3a, 0xcc, 0xfb, 0x6e, 0xbd, 0xe6, 0xb3, 0x25, 0xb3, 0xf7, 0x99, 0x3f, |
1817 | 0x65, 0x9d, 0x77, 0xb3, 0xcd, 0x99, 0xc9, 0x41, 0x6e, 0xa6, 0x60, 0x33, | 1826 | 0xc8, 0x98, 0x10, 0xcf, 0x49, 0x69, 0xfe, 0x4a, 0x0d, 0xc4, 0xba, 0x8d, |
1818 | 0xf1, 0x4c, 0x70, 0x8f, 0x7d, 0x97, 0x0b, 0x9a, 0x41, 0x47, 0x1f, 0x13, | 1827 | 0x3d, 0xeb, 0x7b, 0xad, 0xd2, 0x7c, 0x1a, 0x38, 0x8f, 0xdb, 0x71, 0x53, |
1819 | 0x23, 0x63, 0xb2, 0x55, 0x19, 0xc3, 0x5c, 0x83, 0x34, 0x09, 0x39, 0x7a, | 1828 | 0x80, 0xe9, 0x30, 0xd6, 0xe6, 0x3a, 0x2b, 0x93, 0x39, 0xf6, 0x47, 0x9b, |
1820 | 0x44, 0x52, 0xfc, 0xee, 0x07, 0xc7, 0xce, 0xcb, 0xa5, 0xd0, 0xcb, 0x6c, | 1829 | 0x18, 0x1b, 0x98, 0x2b, 0x45, 0x31, 0xc2, 0x98, 0x3d, 0xa3, 0xe9, 0xc7, |
1821 | 0xa7, 0xbf, 0xd9, 0x83, 0x67, 0xee, 0xe1, 0x78, 0xee, 0x41, 0xe8, 0x96, | 1830 | 0x1a, 0xfd, 0x75, 0x6b, 0xda, 0xaa, 0x8f, 0xbf, 0xae, 0x6e, 0x22, 0x2d, |
1822 | 0xeb, 0xd7, 0xea, 0x96, 0x04, 0xfd, 0xfa, 0x6c, 0x89, 0xbe, 0xe1, 0x7a, | 1831 | 0xdd, 0xad, 0xf3, 0x5c, 0xd6, 0xf7, 0xa5, 0xf7, 0xeb, 0x9c, 0x7b, 0x1d, |
1823 | 0xb4, 0xe9, 0x90, 0x8f, 0x4f, 0x77, 0xb7, 0x91, 0xb7, 0xc6, 0x20, 0xd7, | 1832 | 0x63, 0x2c, 0x08, 0x73, 0xd4, 0xbe, 0x29, 0x3f, 0xa1, 0x65, 0xfe, 0xe1, |
1824 | 0xd5, 0xfd, 0xe1, 0x59, 0x20, 0x96, 0xf1, 0x3d, 0xfb, 0x6d, 0x92, 0xe4, | 1833 | 0x80, 0xfa, 0x6b, 0x8f, 0xfe, 0xdd, 0x98, 0x09, 0xc3, 0x8b, 0x7d, 0x13, |
1825 | 0xfb, 0x5d, 0xf9, 0x7c, 0x25, 0x95, 0x5c, 0x82, 0x6e, 0x1a, 0x73, 0x7e, | 1834 | 0x8c, 0x29, 0x7a, 0xdf, 0x96, 0xce, 0xe4, 0x80, 0xb6, 0x9d, 0xb0, 0x46, |
1826 | 0xf1, 0x72, 0x13, 0x53, 0x7d, 0x7b, 0x9b, 0x39, 0x3b, 0xd0, 0x4c, 0x9b, | 1835 | 0x07, 0x9b, 0x65, 0x9d, 0x3f, 0x62, 0x73, 0x66, 0x0a, 0x90, 0x9b, 0x69, |
1827 | 0xdd, 0xc6, 0x59, 0x6b, 0x69, 0x76, 0xc9, 0xca, 0xe3, 0x20, 0x68, 0x1e, | 1836 | 0xd8, 0x4c, 0x3c, 0x7f, 0xdc, 0x65, 0xdf, 0x15, 0xc2, 0x66, 0xd0, 0xd1, |
1828 | 0xd0, 0x32, 0x78, 0x0f, 0x65, 0xf0, 0x01, 0xbf, 0xc7, 0xd0, 0xbe, 0xf6, | 1837 | 0x07, 0xc5, 0xc8, 0x98, 0x7c, 0x4d, 0xc6, 0x30, 0xd7, 0x20, 0x4b, 0x42, |
1829 | 0x99, 0x02, 0xac, 0x23, 0xf0, 0x30, 0x10, 0x65, 0x7e, 0x9e, 0xe5, 0x4f, | 1838 | 0x76, 0x8f, 0x4b, 0x9a, 0xdf, 0x2a, 0xe1, 0xd8, 0x45, 0xd9, 0x0a, 0xbd, |
1830 | 0x2f, 0xbd, 0x68, 0xe5, 0x92, 0x72, 0xd6, 0xf2, 0xa5, 0xba, 0x2a, 0xb6, | 1839 | 0xcc, 0x76, 0xb4, 0x55, 0xf9, 0xcc, 0x3d, 0x1c, 0xdf, 0x3b, 0x02, 0xdd, |
1831 | 0x42, 0xe6, 0x1e, 0x9a, 0xa6, 0x3e, 0xf6, 0x17, 0xbe, 0x0b, 0x39, 0x95, | 1840 | 0x72, 0xc3, 0x6a, 0xdd, 0x92, 0xa4, 0x5f, 0x9f, 0x9f, 0xa4, 0x6f, 0xb8, |
1832 | 0xd5, 0x78, 0xe8, 0x90, 0xfb, 0xa6, 0x25, 0x7d, 0x1e, 0xba, 0x2a, 0x3f, | 1841 | 0x1e, 0x6d, 0xb6, 0xc9, 0x87, 0xa6, 0x7e, 0xbe, 0x95, 0xbc, 0x35, 0x02, |
1833 | 0xbf, 0x92, 0x37, 0xd7, 0xf6, 0xc7, 0xb9, 0x7e, 0xb8, 0xcd, 0xf8, 0xb6, | 1842 | 0xb9, 0xae, 0xee, 0x8f, 0xce, 0x16, 0xb1, 0x8c, 0xef, 0xd9, 0x6f, 0x93, |
1834 | 0x2b, 0xe7, 0xba, 0x80, 0xb9, 0xa6, 0xf5, 0x5c, 0xb9, 0x6f, 0xf3, 0x31, | 1843 | 0xa4, 0xde, 0xeb, 0xc9, 0x6f, 0x54, 0xd3, 0xa9, 0x45, 0xe8, 0xa6, 0x11, |
1835 | 0x3b, 0xd7, 0xf5, 0xe1, 0x5c, 0x07, 0x57, 0xce, 0x35, 0xf4, 0xed, 0x43, | 1844 | 0xe7, 0x57, 0xb7, 0x9b, 0x98, 0xea, 0x07, 0x5a, 0xcd, 0x59, 0x84, 0x66, |
1836 | 0xb9, 0x9b, 0xd4, 0xf9, 0xf2, 0x3a, 0x4f, 0x7b, 0x7a, 0xbd, 0x0c, 0x97, | 1845 | 0xe0, 0x34, 0x8a, 0xb3, 0xd6, 0xd3, 0xec, 0xa2, 0x95, 0xc7, 0x61, 0xd8, |
1837 | 0x5a, 0xad, 0xbc, 0x74, 0xa1, 0x7b, 0x98, 0xc3, 0xbe, 0x70, 0xaf, 0x2b, | 1846 | 0xdc, 0xa7, 0x65, 0xf0, 0x7e, 0xca, 0xe0, 0xc3, 0x41, 0x97, 0xa1, 0x7d, |
1838 | 0x16, 0x67, 0x8a, 0x78, 0xa0, 0xac, 0x6d, 0xd3, 0x67, 0x6c, 0x66, 0xe1, | 1847 | 0xed, 0x33, 0x85, 0x58, 0x47, 0xe0, 0xa1, 0xcf, 0x65, 0xbe, 0x9f, 0xe5, |
1839 | 0x5f, 0xdd, 0x5a, 0x60, 0xdd, 0xf0, 0xfd, 0xc5, 0x62, 0xc7, 0xa1, 0x4f, | 1848 | 0x4f, 0x3f, 0xbb, 0x60, 0xe5, 0x92, 0x72, 0x56, 0xf3, 0xa5, 0xba, 0x26, |
1840 | 0x4d, 0xbf, 0xa9, 0x77, 0x4d, 0x4c, 0xc1, 0xc4, 0x87, 0x19, 0x17, 0x36, | 1849 | 0xbe, 0x4c, 0xe6, 0x1e, 0x9d, 0xa2, 0x3e, 0x0e, 0xe6, 0xbf, 0x09, 0x39, |
1841 | 0x67, 0x7f, 0x99, 0x8b, 0x78, 0x07, 0x78, 0xea, 0x53, 0x85, 0xd4, 0x60, | 1850 | 0x95, 0xd7, 0x78, 0xd8, 0x26, 0xf7, 0x4d, 0x49, 0xf6, 0x12, 0x74, 0x55, |
1842 | 0x26, 0x42, 0x39, 0x7a, 0x5c, 0x0e, 0x55, 0x46, 0xa4, 0x4b, 0x9f, 0xff, | 1851 | 0x71, 0x6e, 0x39, 0x6f, 0xae, 0xee, 0x8f, 0x73, 0x7d, 0xa4, 0xd5, 0xf8, |
1843 | 0x7c, 0xdd, 0xd8, 0x71, 0xba, 0x36, 0x76, 0xcc, 0x74, 0x02, 0xc6, 0x8e, | 1852 | 0xb6, 0xcb, 0xe7, 0x3a, 0x8f, 0xb9, 0x66, 0xf5, 0x5c, 0xb9, 0x6f, 0x33, |
1844 | 0xf7, 0xfc, 0x0c, 0xb1, 0x63, 0x71, 0x4c, 0xec, 0xb8, 0x9e, 0x7f, 0x35, | 1853 | 0x67, 0xe7, 0xba, 0x3e, 0x9a, 0x6b, 0xff, 0xf2, 0xb9, 0x46, 0xbe, 0x7d, |
1845 | 0x55, 0x3c, 0x8e, 0x79, 0x35, 0x43, 0x96, 0x2c, 0x3a, 0xd9, 0xf9, 0x16, | 1854 | 0x24, 0x77, 0x53, 0x3a, 0xff, 0x5e, 0xe7, 0x7d, 0x4f, 0xad, 0x97, 0x81, |
1846 | 0xdc, 0xcf, 0xe2, 0x1e, 0xc3, 0xfd, 0x3c, 0xee, 0x2e, 0xee, 0x17, 0x70, | 1855 | 0xc9, 0x8d, 0x56, 0x5e, 0x7a, 0xd0, 0x3d, 0xcc, 0x89, 0x9f, 0xbf, 0xd7, |
1847 | 0x8f, 0xcb, 0xd4, 0xb2, 0xce, 0x38, 0x0e, 0xb9, 0x41, 0x5d, 0xc6, 0xb6, | 1856 | 0x13, 0x8b, 0x33, 0x45, 0x3c, 0x50, 0xd6, 0xb6, 0xea, 0x33, 0x3b, 0x33, |
1848 | 0xc6, 0x1f, 0x98, 0x2b, 0xb7, 0xf3, 0x7b, 0x2d, 0xce, 0xec, 0x3c, 0xe7, | 1857 | 0xf0, 0xaf, 0x6e, 0x2d, 0xb1, 0x6e, 0xf4, 0xfe, 0x72, 0xb1, 0xe3, 0xc8, |
1849 | 0xd0, 0x2a, 0x93, 0xd3, 0x94, 0xd9, 0x6d, 0x52, 0x9a, 0x0e, 0x6d, 0xdb, | 1858 | 0xa7, 0xa6, 0xdf, 0xd4, 0xbd, 0x2a, 0xa6, 0x60, 0xe2, 0xc3, 0x8c, 0x0b, |
1850 | 0x9f, 0xef, 0xe0, 0x9e, 0xc1, 0x98, 0x84, 0xb6, 0xeb, 0x3d, 0x1d, 0x66, | 1859 | 0x9b, 0xb3, 0xc4, 0xcc, 0x45, 0xbc, 0x03, 0x3c, 0xf5, 0xf1, 0x52, 0xba, |
1851 | 0xaf, 0xf1, 0x3b, 0x58, 0xe3, 0x8d, 0x58, 0x83, 0x93, 0x72, 0x7e, 0x66, | 1860 | 0x3f, 0x17, 0xa3, 0x1c, 0x9d, 0x96, 0xa3, 0xd5, 0x41, 0xe9, 0xd0, 0xe7, |
1852 | 0xe3, 0x0a, 0x1b, 0x36, 0x69, 0x63, 0x82, 0x33, 0x56, 0xf7, 0xd6, 0x97, | 1861 | 0x49, 0x5f, 0x37, 0x76, 0x9c, 0xad, 0x8f, 0x1d, 0x33, 0x9d, 0x80, 0xb1, |
1853 | 0x11, 0xb5, 0xeb, 0x9f, 0xb0, 0x67, 0xcb, 0xc2, 0x1c, 0xa1, 0xa4, 0x5e, | 1862 | 0xe3, 0xfd, 0x3f, 0x42, 0xec, 0x58, 0x1c, 0x13, 0x3b, 0x5e, 0xcb, 0xbf, |
1854 | 0x9f, 0xd1, 0xca, 0x71, 0x8c, 0x37, 0x28, 0xe9, 0x19, 0xce, 0x73, 0xf9, | 1863 | 0x9a, 0x28, 0x4f, 0x63, 0x5e, 0xcd, 0x90, 0x25, 0x0b, 0x4e, 0x7e, 0xae, |
1855 | 0x9b, 0x11, 0x90, 0x87, 0x27, 0xa0, 0x57, 0x57, 0xd0, 0x25, 0xe8, 0x96, | 1864 | 0x05, 0xf7, 0x0b, 0xb8, 0xc7, 0x71, 0xbf, 0x84, 0xbb, 0x87, 0xfb, 0x8b, |
1856 | 0x73, 0x73, 0x40, 0xbb, 0x8f, 0xca, 0x6c, 0x89, 0xf0, 0xf5, 0x24, 0x22, | 1865 | 0xb8, 0x27, 0x64, 0x62, 0x49, 0x67, 0x4c, 0x43, 0x6e, 0x50, 0x97, 0xb1, |
1857 | 0xfa, 0xac, 0x19, 0x9e, 0x67, 0x4c, 0x8e, 0xfb, 0x70, 0x25, 0x3c, 0x67, | 1866 | 0xad, 0xf1, 0x07, 0x66, 0x2b, 0x6d, 0xfc, 0x2e, 0x8c, 0x33, 0x33, 0xc7, |
1858 | 0xb6, 0x89, 0x67, 0x07, 0x57, 0x9d, 0x35, 0xb3, 0xfa, 0x59, 0xdb, 0x0e, | 1867 | 0x39, 0x6c, 0x94, 0xf1, 0x29, 0xca, 0xec, 0x56, 0x99, 0x9c, 0x8a, 0x6c, |
1859 | 0x3c, 0x73, 0x16, 0xce, 0xa1, 0x1e, 0x3d, 0x05, 0x32, 0xa9, 0xf3, 0xce, | 1868 | 0xdb, 0xbb, 0xb6, 0x71, 0xcf, 0x60, 0x44, 0x22, 0xdb, 0xf5, 0x77, 0xb7, |
1860 | 0x36, 0xcb, 0x63, 0x0f, 0x2e, 0xe7, 0xbc, 0xb6, 0xc1, 0x46, 0xe9, 0x84, | 1869 | 0xd9, 0x5c, 0xfb, 0x2d, 0xd2, 0xbc, 0x09, 0x6b, 0x70, 0x5a, 0x2e, 0x4d, |
1861 | 0x89, 0x3c, 0x1a, 0x1d, 0xea, 0x81, 0x8f, 0xc7, 0x3c, 0x99, 0x9e, 0xc4, | 1870 | 0x6f, 0x5a, 0x66, 0xc3, 0xa6, 0x6c, 0x4c, 0x70, 0xda, 0xea, 0xde, 0xb5, |
1862 | 0x6d, 0x3a, 0x17, 0xb9, 0x7a, 0xee, 0xaf, 0x9a, 0x8f, 0x1c, 0x9e, 0xb3, | 1871 | 0x65, 0x44, 0xfd, 0xfa, 0x27, 0x6d, 0x4e, 0x69, 0x94, 0x23, 0x94, 0xd2, |
1863 | 0x4a, 0xe8, 0xef, 0x5a, 0xec, 0xd4, 0xe5, 0x71, 0xcc, 0x87, 0xfb, 0x7e, | 1872 | 0xeb, 0x33, 0x5c, 0x9d, 0xc6, 0x78, 0xfd, 0x92, 0x9d, 0xe6, 0x3c, 0x97, |
1864 | 0x1a, 0x0f, 0x09, 0x7e, 0xa7, 0xeb, 0x29, 0xe0, 0x60, 0xb2, 0xf2, 0x6d, | 1873 | 0xbe, 0x4d, 0x01, 0x79, 0x78, 0x0a, 0x7a, 0x75, 0x19, 0x5d, 0x82, 0x6e, |
1865 | 0xd0, 0xbb, 0x63, 0xcf, 0x9c, 0x91, 0xc6, 0x06, 0x64, 0xa2, 0x9c, 0x70, | 1874 | 0x39, 0x37, 0x07, 0xb4, 0xfb, 0xa8, 0xcc, 0x4c, 0x12, 0xbe, 0xae, 0x64, |
1866 | 0x26, 0xca, 0x03, 0xce, 0xbe, 0xb2, 0x7d, 0x37, 0xb0, 0x67, 0xb3, 0x34, | 1875 | 0x4c, 0x9f, 0x5d, 0xc3, 0xf3, 0xb4, 0xc9, 0x99, 0x1f, 0xa8, 0x46, 0xe7, |
1867 | 0xe3, 0xf7, 0x4c, 0x97, 0x33, 0x06, 0x7c, 0xe5, 0x8b, 0xdd, 0x4e, 0x5a, | 1876 | 0xd6, 0x36, 0xeb, 0xef, 0x11, 0x2c, 0x3f, 0xbb, 0x66, 0xf5, 0xb3, 0xb6, |
1868 | 0xdf, 0x3d, 0x7b, 0x87, 0x1c, 0xc0, 0x5a, 0x0d, 0xcf, 0xc4, 0xb5, 0x9c, | 1877 | 0x1d, 0x78, 0x86, 0x2d, 0x9a, 0xc3, 0x5a, 0xf4, 0x14, 0xca, 0xb8, 0xce, |
1869 | 0xaf, 0x7e, 0x5b, 0x2a, 0x5c, 0x57, 0x7e, 0x13, 0x89, 0x7c, 0x7c, 0x5c, | 1878 | 0x3b, 0xdb, 0x22, 0x67, 0x1e, 0x5c, 0xca, 0xa1, 0x6d, 0x85, 0x8d, 0xd2, |
1870 | 0x7f, 0xe7, 0xc8, 0xd8, 0x0e, 0x27, 0xd1, 0xdf, 0x71, 0x1b, 0x13, 0xef, | 1879 | 0x0e, 0x13, 0x79, 0xd8, 0xcd, 0x74, 0xc1, 0xc7, 0x63, 0x9e, 0x4c, 0x57, |
1871 | 0x73, 0xb2, 0xba, 0x1f, 0xb3, 0x1e, 0xf9, 0xe2, 0x09, 0xdc, 0x57, 0x9f, | 1880 | 0xf2, 0x36, 0x9d, 0xdb, 0x5c, 0x3b, 0x47, 0x58, 0xcb, 0x6f, 0x8e, 0xce, |
1872 | 0x79, 0x0e, 0xf5, 0x8c, 0x85, 0xbb, 0x10, 0xdc, 0x63, 0xe4, 0xd5, 0x71, | 1881 | 0x6d, 0x25, 0x65, 0x10, 0x74, 0x38, 0xa4, 0xcb, 0x13, 0x98, 0x0f, 0xf7, |
1873 | 0x99, 0xaa, 0x30, 0x7f, 0xc4, 0xd1, 0x7c, 0x34, 0x59, 0x3e, 0x00, 0x9d, | 1882 | 0xfd, 0x34, 0x1e, 0x20, 0x7b, 0xb8, 0xe7, 0x87, 0xb9, 0x57, 0xbf, 0x01, |
1874 | 0xb4, 0xf2, 0xcc, 0xdf, 0xce, 0xea, 0x3a, 0x24, 0x67, 0x84, 0xb0, 0x70, | 1883 | 0x7a, 0x77, 0xec, 0x19, 0x36, 0xd2, 0x58, 0x9f, 0x8c, 0x55, 0x92, 0xce, |
1875 | 0x0d, 0x56, 0x9e, 0x87, 0xbf, 0xf8, 0xbf, 0x70, 0x5f, 0xd1, 0xc8, 0x50, | 1884 | 0x58, 0xa5, 0xcf, 0x39, 0x54, 0xb1, 0xef, 0xfa, 0x8a, 0x58, 0x0f, 0xfc, |
1876 | 0x0b, 0x47, 0x9a, 0xf2, 0xce, 0xc8, 0x95, 0x69, 0x39, 0x08, 0x78, 0x0e, | 1885 | 0x9e, 0xee, 0x70, 0x46, 0x80, 0xaf, 0x62, 0xb9, 0xd3, 0xc9, 0xea, 0xbb, |
1877 | 0xe3, 0x52, 0xf7, 0xf3, 0x3b, 0x2c, 0xf3, 0x92, 0x9f, 0xbb, 0x4f, 0xd4, | 1886 | 0x6f, 0xef, 0x90, 0x03, 0x58, 0xab, 0x81, 0xe9, 0xa4, 0x96, 0xf3, 0xb5, |
1878 | 0x43, 0xe7, 0x9d, 0xe8, 0x43, 0x07, 0x25, 0xf2, 0xd0, 0xa2, 0xd3, 0xf0, | 1887 | 0xef, 0x61, 0x45, 0xeb, 0xfa, 0xa4, 0xde, 0x1b, 0x9a, 0x97, 0x69, 0xfd, |
1879 | 0x50, 0xb7, 0xf6, 0xcb, 0x77, 0xfb, 0xdd, 0x89, 0x7d, 0x72, 0x52, 0xa2, | 1888 | 0x7d, 0x25, 0x63, 0x3b, 0x9c, 0x46, 0x7f, 0xd3, 0x36, 0x26, 0xde, 0xe3, |
1880 | 0xf7, 0x2b, 0x7d, 0xfe, 0x2b, 0xef, 0x32, 0xc6, 0x77, 0x52, 0x22, 0xf7, | 1889 | 0xe4, 0x75, 0x3f, 0x66, 0x3d, 0x8a, 0xe5, 0x53, 0xb8, 0xaf, 0x3c, 0x43, |
1881 | 0xc7, 0xec, 0xd9, 0x51, 0x13, 0xd7, 0x5b, 0xd2, 0x7c, 0xff, 0x9b, 0x71, | 1890 | 0x1d, 0xe9, 0x19, 0xc2, 0xfd, 0x08, 0xf4, 0x59, 0x78, 0x8f, 0x91, 0x57, |
1882 | 0xe2, 0x6c, 0x49, 0x8e, 0x6b, 0xde, 0x19, 0x86, 0x9e, 0xc8, 0x94, 0x92, | 1891 | 0xd3, 0x32, 0x51, 0x65, 0xfe, 0x08, 0xfb, 0x41, 0x79, 0xe5, 0x30, 0x74, |
1883 | 0xcb, 0x75, 0x4c, 0xbe, 0xe7, 0xf3, 0x9b, 0x0d, 0xbf, 0xb0, 0x4e, 0x8f, | 1892 | 0xd2, 0xf2, 0x33, 0x84, 0x43, 0xb5, 0x75, 0x48, 0x4d, 0x0b, 0x61, 0xe1, |
1884 | 0xc3, 0xef, 0x38, 0x18, 0x9d, 0x91, 0xb9, 0x2c, 0xcc, 0xfd, 0x34, 0x6b, | 1893 | 0x1a, 0x2c, 0x3f, 0x5f, 0x7f, 0xf9, 0x7f, 0xd1, 0xbe, 0xa2, 0x91, 0xa1, |
1885 | 0xca, 0xf7, 0x67, 0xb1, 0x86, 0x3d, 0x58, 0x2f, 0x8e, 0xe7, 0xe8, 0xfd, | 1894 | 0x16, 0x8e, 0x2c, 0xe5, 0x9d, 0x91, 0x2b, 0x9f, 0x96, 0x23, 0xc0, 0xe3, |
1886 | 0x5c, 0x9e, 0x9d, 0x75, 0xa5, 0x2f, 0xd1, 0xb4, 0x6c, 0x07, 0xb1, 0xee, | 1895 | 0x31, 0xc0, 0xa4, 0xee, 0xe7, 0xf7, 0x5e, 0x2a, 0x52, 0x9c, 0xbd, 0x4f, |
1887 | 0x7d, 0xd2, 0x04, 0xb8, 0xd5, 0x43, 0x79, 0x63, 0xd7, 0x09, 0xe9, 0x54, | 1896 | 0xd4, 0x43, 0x97, 0x1c, 0xf7, 0xa1, 0x23, 0x12, 0x7b, 0x68, 0xc1, 0x69, |
1888 | 0x20, 0xb9, 0x49, 0xb3, 0x3d, 0x83, 0xbb, 0xf5, 0x1a, 0xde, 0x6b, 0x69, | 1897 | 0x78, 0xa8, 0x53, 0xfb, 0xe5, 0xfb, 0x82, 0xce, 0xe4, 0x21, 0x39, 0x2d, |
1889 | 0x66, 0x9d, 0xb1, 0x1f, 0xf1, 0x6c, 0xe8, 0x22, 0x2f, 0xbb, 0xa6, 0x7f, | 1898 | 0xee, 0xfd, 0x4a, 0x9f, 0x27, 0x2b, 0x7a, 0x8c, 0xf1, 0x9d, 0x96, 0xd8, |
1890 | 0x08, 0x3d, 0xcf, 0x7d, 0x17, 0x6d, 0x2f, 0xd6, 0xb1, 0x05, 0xc9, 0x4b, | 1899 | 0xfd, 0x71, 0x7b, 0x16, 0xd5, 0xc4, 0xf5, 0x16, 0x35, 0xdf, 0x3f, 0x97, |
1891 | 0xcf, 0x58, 0xbf, 0x32, 0x08, 0xa6, 0x7d, 0x1f, 0x78, 0xac, 0xe7, 0x4b, | 1900 | 0x20, 0xce, 0x16, 0x65, 0x5a, 0xf3, 0xce, 0x00, 0xf4, 0x44, 0x6e, 0x32, |
1892 | 0x6e, 0x71, 0xe6, 0x4a, 0x5b, 0x9d, 0xd9, 0x52, 0x20, 0x13, 0x3e, 0xbf, | 1901 | 0xb5, 0x54, 0xc7, 0xe4, 0x7b, 0x6e, 0x4c, 0x18, 0x7e, 0x61, 0x9d, 0x2e, |
1893 | 0xe3, 0xc1, 0x1c, 0x00, 0xda, 0x5b, 0x2c, 0xeb, 0x86, 0x6e, 0xfd, 0xeb, | 1902 | 0x87, 0xdf, 0x85, 0xb0, 0x3a, 0xff, 0xca, 0x28, 0xf7, 0xd3, 0xac, 0x29, |
1894 | 0xcd, 0x3c, 0x8f, 0x74, 0x93, 0xf7, 0xa2, 0x98, 0x7a, 0xc4, 0x31, 0x7d, | 1903 | 0xdf, 0xff, 0x10, 0x6b, 0xd8, 0x85, 0xf5, 0xe2, 0x78, 0x8e, 0xde, 0xcf, |
1895 | 0xe4, 0xee, 0xe3, 0x59, 0xe1, 0xf7, 0x34, 0xfa, 0x12, 0x71, 0xfd, 0x5d, | 1904 | 0xe5, 0x59, 0x5c, 0x4f, 0x7a, 0x92, 0x4d, 0x4b, 0x76, 0x10, 0xeb, 0xde, |
1896 | 0x8f, 0xcf, 0xa1, 0x1d, 0xc6, 0x28, 0x72, 0xdc, 0x67, 0x9d, 0x59, 0xc8, | 1905 | 0x27, 0x4d, 0x80, 0x5b, 0x3d, 0x54, 0x34, 0x76, 0x9d, 0x90, 0x4e, 0x05, |
1897 | 0xb3, 0xb9, 0x69, 0x9e, 0xe1, 0x67, 0x3e, 0x6d, 0xa4, 0x53, 0xc9, 0x15, | 1906 | 0x92, 0x9b, 0x34, 0xdb, 0xd5, 0xbf, 0x4f, 0xaf, 0xe1, 0xbd, 0x96, 0x66, |
1898 | 0xee, 0xa4, 0xfd, 0x06, 0x5c, 0x0e, 0x2e, 0x50, 0x44, 0x97, 0xf5, 0xb9, | 1907 | 0xd6, 0x19, 0xfb, 0x11, 0xcf, 0x86, 0x2e, 0x8a, 0xb2, 0x77, 0xea, 0xbb, |
1899 | 0xe3, 0xcb, 0xdf, 0x85, 0x0b, 0xcb, 0xc2, 0xef, 0xc3, 0x29, 0x9d, 0x3b, | 1908 | 0xd0, 0xf3, 0xdc, 0x77, 0xd1, 0xf6, 0xe2, 0x1a, 0xb6, 0x20, 0x79, 0xe9, |
1900 | 0x0d, 0x5f, 0xf6, 0xb1, 0x31, 0xf9, 0x89, 0x33, 0x5f, 0x78, 0xc5, 0x79, | 1909 | 0x69, 0xeb, 0x57, 0x86, 0xe1, 0x54, 0x10, 0x00, 0x8f, 0x6b, 0xf9, 0x92, |
1901 | 0xb4, 0x90, 0xbe, 0xea, 0x12, 0xd0, 0xc7, 0x39, 0xbf, 0x97, 0xf2, 0x0b, | 1910 | 0x3b, 0x9c, 0xd9, 0xc9, 0x9d, 0xce, 0xcc, 0x64, 0x28, 0x63, 0x01, 0xbf, |
1902 | 0x36, 0x5f, 0x41, 0x72, 0x95, 0x09, 0x99, 0xe9, 0xe8, 0x76, 0xef, 0xd7, | 1911 | 0x19, 0xc2, 0x1c, 0x00, 0xda, 0x5b, 0x2c, 0xeb, 0x84, 0x6e, 0xdd, 0x9d, |
1903 | 0x6b, 0x33, 0x03, 0x9c, 0x7d, 0x1b, 0xeb, 0xf7, 0xc9, 0x38, 0xf5, 0xdb, | 1912 | 0xe0, 0xf9, 0xa6, 0x9b, 0xfc, 0x17, 0xc4, 0xd4, 0x23, 0x8e, 0xe9, 0x23, |
1904 | 0x78, 0x41, 0x81, 0x97, 0xd5, 0xcf, 0xe3, 0x82, 0x6d, 0xdb, 0xa8, 0x6d, | 1913 | 0x77, 0x3e, 0x92, 0x17, 0x7e, 0x9f, 0xa3, 0x27, 0x99, 0xd0, 0xdf, 0x10, |
1905 | 0x94, 0x7d, 0x3e, 0xeb, 0x6d, 0x75, 0x86, 0x4b, 0x5b, 0xb0, 0x8e, 0x7b, | 1914 | 0xf9, 0x0c, 0xda, 0x61, 0x8c, 0x32, 0xc7, 0x7d, 0xc6, 0x99, 0x81, 0x3c, |
1906 | 0xa1, 0x3f, 0x1d, 0xd8, 0x69, 0xa0, 0x6d, 0x94, 0x4d, 0x02, 0x07, 0xe3, | 1915 | 0x9b, 0x9d, 0xe2, 0x37, 0x01, 0x98, 0x4f, 0x1b, 0x6b, 0x57, 0x72, 0x95, |
1907 | 0xbe, 0x91, 0xe7, 0xc3, 0x92, 0xd3, 0x3e, 0x9e, 0xb9, 0xa7, 0x95, 0x89, | 1916 | 0x37, 0x6e, 0xbf, 0x5b, 0x57, 0x80, 0x0b, 0x14, 0xd3, 0x65, 0x3d, 0xde, |
1908 | 0x99, 0x05, 0xc1, 0x1c, 0xec, 0x83, 0x6c, 0x7f, 0x09, 0xbc, 0xf0, 0x08, | 1917 | 0xe8, 0xd2, 0xb7, 0xec, 0xa2, 0xb2, 0xe8, 0x9b, 0x76, 0x4a, 0xe7, 0x4e, |
1909 | 0xae, 0xb7, 0xdb, 0x3d, 0xed, 0x17, 0x2e, 0xb2, 0xa7, 0xed, 0xca, 0xc9, | 1918 | 0xc3, 0x97, 0x3d, 0x33, 0x22, 0xdf, 0x77, 0xe6, 0x4a, 0xaf, 0x38, 0x8f, |
1910 | 0x8a, 0x3e, 0xd7, 0xae, 0xf3, 0xab, 0x92, 0xea, 0xbf, 0x5f, 0xa2, 0xd7, | 1919 | 0x96, 0xb2, 0xd7, 0x5c, 0x01, 0xfa, 0xb8, 0x18, 0xe4, 0x29, 0xbf, 0x60, |
1911 | 0x4a, 0xf5, 0xe8, 0x9c, 0xb4, 0xb4, 0x7c, 0x38, 0x6e, 0xf4, 0x30, 0x61, | 1920 | 0xf3, 0x4d, 0x49, 0xa1, 0x3a, 0x26, 0xd3, 0xdb, 0x3a, 0xbd, 0xfb, 0xf5, |
1912 | 0x4a, 0x02, 0x9e, 0xad, 0xc0, 0x05, 0xe1, 0x31, 0x6d, 0x44, 0x6d, 0xba, | 1921 | 0xda, 0x9c, 0x01, 0xce, 0xbe, 0x81, 0xf5, 0x3b, 0x93, 0xa0, 0x7e, 0x1b, |
1913 | 0x94, 0xfa, 0x70, 0x49, 0x3e, 0x12, 0x0f, 0xcf, 0x14, 0xa0, 0x1f, 0xc8, | 1922 | 0x2d, 0x29, 0xf0, 0xb2, 0xfa, 0x69, 0x5c, 0xb0, 0x6d, 0x1b, 0xb5, 0x8d, |
1914 | 0xb8, 0x8f, 0x5d, 0x6a, 0xf4, 0xe4, 0xe6, 0x3a, 0xfd, 0x84, 0x73, 0x73, | 1923 | 0x72, 0x28, 0x60, 0xbd, 0x9d, 0xce, 0xc0, 0xe4, 0x0e, 0xac, 0xe3, 0x41, |
1915 | 0xec, 0xdc, 0x48, 0xb7, 0x7f, 0x96, 0xa0, 0x4f, 0xb1, 0x24, 0x4d, 0xab, | 1924 | 0xe8, 0x4f, 0x07, 0x76, 0x1a, 0x68, 0x1b, 0x65, 0xe3, 0xc0, 0xc1, 0x68, |
1916 | 0xea, 0x33, 0xa6, 0xbf, 0xe1, 0x72, 0x73, 0x46, 0x81, 0x75, 0x5d, 0xd8, | 1925 | 0x60, 0xe4, 0xf9, 0x80, 0x14, 0xb4, 0x8f, 0x67, 0xee, 0x59, 0x65, 0x62, |
1917 | 0xa6, 0xb4, 0x73, 0x89, 0x47, 0xbd, 0x6e, 0x05, 0x25, 0x3c, 0x67, 0x00, | 1926 | 0x66, 0x61, 0x38, 0x0b, 0xfb, 0x80, 0xdf, 0xc5, 0x9a, 0xa8, 0xce, 0xe1, |
1918 | 0x6e, 0xae, 0x5c, 0xe1, 0xbe, 0x43, 0x91, 0x0e, 0x43, 0x5c, 0x7f, 0x5b, | 1927 | 0xfa, 0x71, 0xbb, 0xa7, 0x3d, 0x7f, 0x99, 0x3d, 0x6d, 0x4f, 0x4e, 0x57, |
1919 | 0xf3, 0xc9, 0x78, 0x81, 0xb1, 0x95, 0x47, 0x83, 0xf4, 0x28, 0x79, 0x8c, | 1928 | 0xf5, 0x39, 0x79, 0x9d, 0x5f, 0x95, 0x52, 0xeb, 0xda, 0xf4, 0x5a, 0xa9, |
1920 | 0x7d, 0xf0, 0x7d, 0x41, 0xc7, 0x73, 0xf7, 0xfa, 0x8c, 0x15, 0x75, 0x1f, | 1929 | 0x2e, 0x9d, 0x93, 0x96, 0x95, 0x47, 0x12, 0x46, 0x0f, 0x13, 0xa6, 0x14, |
1921 | 0xbf, 0x43, 0x85, 0x72, 0x0a, 0xfa, 0xb7, 0xb8, 0xe8, 0xf0, 0x1b, 0x78, | 1930 | 0xe0, 0xd9, 0x09, 0x5c, 0x10, 0x1e, 0xd3, 0x46, 0xd4, 0x3b, 0xb7, 0x52, |
1922 | 0x37, 0x0a, 0xee, 0xf3, 0x8b, 0xce, 0x77, 0xa7, 0x9f, 0xc5, 0x73, 0x83, | 1931 | 0x1f, 0x2e, 0xca, 0xa7, 0x12, 0xd1, 0x19, 0x05, 0xf4, 0x03, 0x19, 0x37, |
1923 | 0xfd, 0xee, 0x9d, 0xd1, 0x53, 0x22, 0xc5, 0x70, 0xbe, 0x89, 0x1c, 0xd6, | 1932 | 0xb7, 0xd5, 0xe8, 0xc9, 0x2d, 0x6b, 0xf4, 0x13, 0xcd, 0xcd, 0xb1, 0x73, |
1924 | 0xfe, 0x02, 0xd6, 0xbe, 0xfe, 0x77, 0xee, 0xf0, 0xae, 0x8c, 0x77, 0xe5, | 1933 | 0x23, 0xdd, 0x6e, 0xbe, 0x92, 0x3e, 0xc5, 0xa2, 0x34, 0xad, 0xa8, 0xcf, |
1925 | 0x0f, 0x07, 0xe9, 0x36, 0xd2, 0x22, 0xe9, 0xef, 0xb5, 0xfc, 0xe6, 0x41, | 1934 | 0x98, 0xfe, 0xbe, 0xed, 0xe6, 0xcc, 0x03, 0xeb, 0x7a, 0xb0, 0x4d, 0x69, |
1926 | 0xcd, 0x17, 0x93, 0xc5, 0xc7, 0xc1, 0x17, 0x69, 0xee, 0x37, 0x07, 0x0f, | 1935 | 0xe7, 0x12, 0x8f, 0x7a, 0xdd, 0x4a, 0x4a, 0x78, 0x6e, 0xe1, 0x0c, 0x64, |
1927 | 0xfb, 0x37, 0x80, 0x2f, 0xf6, 0xc8, 0xef, 0xc3, 0x2e, 0xf8, 0xdd, 0xca, | 1936 | 0xcb, 0x55, 0xde, 0x4f, 0x28, 0xd2, 0x61, 0x84, 0xeb, 0x6f, 0x68, 0x3e, |
1928 | 0x10, 0xf8, 0x63, 0x10, 0xfc, 0x32, 0x00, 0x1e, 0xf1, 0xb5, 0x8d, 0xfc, | 1937 | 0x19, 0x2d, 0x31, 0xb6, 0xf2, 0x68, 0x98, 0x1d, 0x26, 0x8f, 0xb1, 0x0f, |
1929 | 0x04, 0xf4, 0x1f, 0xf4, 0x9a, 0xb3, 0xaf, 0xd4, 0xe5, 0x64, 0x4b, 0x9e, | 1938 | 0xbe, 0x9f, 0xd2, 0xf1, 0xdc, 0x83, 0x01, 0x63, 0x45, 0x9d, 0x8f, 0xdc, |
1930 | 0x33, 0x51, 0xe2, 0xf7, 0x5a, 0xd4, 0x5b, 0x1b, 0x24, 0x9a, 0x98, 0x13, | 1939 | 0xa1, 0x22, 0x39, 0x05, 0xfd, 0x5b, 0x5e, 0x70, 0xf8, 0xdd, 0xbe, 0x03, |
1931 | 0xf2, 0x42, 0x37, 0x73, 0x1c, 0xdb, 0x81, 0xab, 0x53, 0xc4, 0xd5, 0x5c, | 1940 | 0x82, 0xfb, 0xdc, 0x82, 0xf3, 0xcd, 0xa9, 0x67, 0xf0, 0xdc, 0x60, 0xbf, |
1932 | 0xa5, 0xcf, 0xbd, 0x04, 0x3c, 0xd1, 0xae, 0x79, 0xa2, 0xd5, 0x49, 0xbb, | 1941 | 0xd5, 0x67, 0xf4, 0x94, 0xc8, 0x1f, 0x46, 0xf3, 0x4d, 0x16, 0xb0, 0xf6, |
1933 | 0x37, 0x58, 0x9e, 0x78, 0x11, 0x3c, 0x71, 0x7e, 0x0d, 0x4f, 0x3c, 0x6d, | 1942 | 0x2f, 0x62, 0xed, 0xd7, 0xfe, 0x36, 0x1f, 0xde, 0x55, 0xf0, 0xae, 0xf2, |
1934 | 0xe9, 0x7f, 0xa1, 0x86, 0x27, 0xe6, 0x6c, 0xd9, 0xcc, 0x45, 0x78, 0xe2, | 1943 | 0x0b, 0x61, 0xb6, 0x95, 0xb4, 0x18, 0xe8, 0xb3, 0xa9, 0x97, 0xf7, 0x9b, |
1935 | 0x52, 0x2f, 0xf5, 0xa5, 0x31, 0x79, 0x15, 0x3c, 0x21, 0x8a, 0x3c, 0x71, | 1944 | 0xfb, 0x35, 0x5f, 0x8c, 0x97, 0xcf, 0x81, 0x2f, 0xb2, 0xdc, 0x6f, 0x0e, |
1936 | 0xa9, 0xe6, 0x09, 0xc6, 0x8e, 0xc8, 0x17, 0x9d, 0x90, 0x23, 0xe4, 0x8b, | 1945 | 0x1f, 0x0e, 0x6e, 0x04, 0x5f, 0xec, 0x97, 0xdf, 0x83, 0x5d, 0xf0, 0x3b, |
1937 | 0xb3, 0xb2, 0x04, 0xbe, 0x78, 0x5e, 0x71, 0xec, 0x19, 0xda, 0x0a, 0x25, | 1946 | 0xd5, 0x0c, 0xf8, 0xa3, 0x1f, 0xfc, 0xd2, 0x07, 0x1e, 0x09, 0xb4, 0x8d, |
1938 | 0xfa, 0x64, 0x27, 0x8a, 0x5d, 0xe0, 0x77, 0x25, 0xff, 0x65, 0x3a, 0x08, | 1947 | 0xfc, 0x18, 0xf4, 0x1f, 0xf4, 0x9a, 0x73, 0x68, 0xb2, 0xc3, 0xc9, 0x4f, |
1939 | 0x16, 0xe1, 0xa7, 0x3f, 0x08, 0x7b, 0x3e, 0xaa, 0xbf, 0xa9, 0xb8, 0x00, | 1948 | 0xfa, 0xce, 0xd8, 0x24, 0xbf, 0xff, 0xa2, 0xde, 0xda, 0x20, 0x6e, 0x72, |
1940 | 0xba, 0x0f, 0xe9, 0x7d, 0xc2, 0x01, 0xbd, 0x1f, 0x9e, 0xc5, 0x1c, 0x26, | 1949 | 0x56, 0xc8, 0x0b, 0x9d, 0xcc, 0x71, 0x6c, 0x03, 0xae, 0xce, 0x12, 0x57, |
1941 | 0xd4, 0x7f, 0x86, 0x2f, 0xec, 0x62, 0x5d, 0x69, 0xe7, 0x1f, 0xd3, 0x3c, | 1950 | 0xb3, 0xd5, 0x1e, 0xef, 0x0a, 0xf0, 0x44, 0x9b, 0xe6, 0x89, 0x8d, 0x4e, |
1942 | 0xd4, 0x00, 0x7d, 0xf0, 0xe8, 0x00, 0x63, 0x4d, 0x9e, 0xbb, 0x4f, 0x75, | 1951 | 0xd6, 0xbb, 0xd1, 0xf2, 0xc4, 0x0b, 0xe0, 0x89, 0x4b, 0xab, 0x78, 0xe2, |
1943 | 0xe7, 0x46, 0x00, 0x73, 0x44, 0xdd, 0x2f, 0x8c, 0x73, 0xb4, 0xad, 0xb2, | 1952 | 0x29, 0x4b, 0xff, 0xf3, 0x75, 0x3c, 0x31, 0x6b, 0xcb, 0xa6, 0x2f, 0xc3, |
1944 | 0xf3, 0x29, 0x23, 0x46, 0x21, 0xeb, 0xcc, 0xbb, 0x5c, 0xd0, 0x04, 0x9b, | 1953 | 0x13, 0x5b, 0xfd, 0xf4, 0xe7, 0x47, 0xe4, 0x55, 0xf0, 0x84, 0x28, 0xf2, |
1945 | 0xb4, 0x49, 0x19, 0x1b, 0x5d, 0xed, 0x48, 0xb9, 0x1f, 0x84, 0x00, 0x6d, | 1954 | 0xc4, 0x56, 0xcd, 0x13, 0x8c, 0x1d, 0x91, 0x2f, 0xda, 0x21, 0x47, 0xc8, |
1946 | 0x84, 0xbd, 0xb0, 0x0b, 0xab, 0x3d, 0x52, 0xa8, 0xb5, 0xf1, 0xff, 0x03, | 1955 | 0x17, 0x17, 0x64, 0x11, 0x7c, 0xf1, 0x9c, 0xe2, 0xd8, 0x67, 0x68, 0x2b, |
1947 | 0x6c, 0x7c, 0xb6, 0x91, 0xa8, 0xb1, 0xf1, 0x7f, 0xcd, 0xf2, 0x1a, 0x7f, | 1956 | 0x4c, 0xd2, 0x27, 0x3b, 0x55, 0xee, 0x00, 0xbf, 0x2b, 0xf9, 0xaf, 0x53, |
1948 | 0xbb, 0xda, 0xde, 0x3f, 0x00, 0xf8, 0x76, 0x2f, 0xdb, 0xfb, 0xec, 0x83, | 1957 | 0x61, 0xb8, 0x00, 0x3f, 0xfd, 0x41, 0xd8, 0xf3, 0xae, 0xfe, 0x0e, 0xe4, |
1949 | 0x76, 0x87, 0xc8, 0xf5, 0xb0, 0xf9, 0xde, 0x0d, 0x1e, 0xbc, 0x01, 0xbe, | 1958 | 0x3c, 0xe8, 0x3e, 0xa2, 0xf7, 0x31, 0x07, 0xf4, 0x7e, 0x6c, 0x06, 0x73, |
1950 | 0xd4, 0x7b, 0x0a, 0xae, 0xec, 0x29, 0xb4, 0xc3, 0xe7, 0xee, 0x94, 0xf7, | 1959 | 0x18, 0x53, 0x9f, 0x82, 0x2f, 0xec, 0x61, 0x5d, 0x69, 0xe7, 0x9f, 0xd4, |
1951 | 0x4e, 0x6f, 0x95, 0x9d, 0x25, 0xff, 0x12, 0x69, 0xee, 0x80, 0x8d, 0x5a, | 1960 | 0x3c, 0xd4, 0x00, 0x7d, 0xf0, 0x68, 0x1f, 0x63, 0x4d, 0xbe, 0x77, 0x48, |
1952 | 0x00, 0x9c, 0x11, 0x2b, 0xb7, 0xcf, 0x02, 0x6f, 0xdd, 0xc9, 0x9f, 0xa8, | 1961 | 0x75, 0x16, 0x06, 0x01, 0x73, 0x4c, 0xdd, 0x2f, 0x8c, 0x73, 0xb4, 0xae, |
1953 | 0x17, 0xad, 0x5d, 0xc4, 0xb3, 0x8e, 0xf5, 0xfa, 0x89, 0xa3, 0x3d, 0x63, | 1962 | 0xb0, 0xf3, 0x29, 0x23, 0x86, 0x21, 0xeb, 0xcc, 0xbb, 0x42, 0xd8, 0x04, |
1954 | 0x29, 0x1d, 0x72, 0xea, 0x18, 0xbd, 0xaf, 0x24, 0xec, 0x72, 0x1f, 0x36, | 1963 | 0x9b, 0xb4, 0x49, 0x19, 0x1b, 0x5d, 0xed, 0x49, 0x7b, 0x3f, 0x07, 0x01, |
1955 | 0xc9, 0x16, 0xf4, 0xc7, 0x78, 0xf2, 0x46, 0x79, 0xfa, 0xaa, 0xe8, 0x5d, | 1964 | 0xda, 0x08, 0x7b, 0x61, 0x2f, 0x56, 0x7b, 0xb0, 0x54, 0x6f, 0xe3, 0xff, |
1956 | 0x59, 0xcd, 0x87, 0x9d, 0x4e, 0x66, 0x1a, 0x3e, 0xc0, 0xde, 0x18, 0xe6, | 1965 | 0x67, 0xd8, 0xf8, 0x6c, 0x23, 0xae, 0xb1, 0xf1, 0x7f, 0xc5, 0xf2, 0x1a, |
1957 | 0xa0, 0xda, 0x37, 0xcb, 0x75, 0xb2, 0x53, 0xcf, 0x67, 0x46, 0x0e, 0x42, | 1966 | 0x7f, 0x7b, 0xda, 0xde, 0x3f, 0x0c, 0xf8, 0xf6, 0x2d, 0xd9, 0xfb, 0xec, |
1958 | 0x37, 0xff, 0x41, 0x61, 0xa7, 0x2c, 0x8d, 0xb6, 0xe1, 0x39, 0x26, 0x4f, | 1967 | 0x83, 0x76, 0x87, 0xc8, 0x0d, 0xb0, 0xf9, 0xde, 0x09, 0x1e, 0xbc, 0x11, |
1959 | 0x17, 0xfa, 0xe0, 0xfb, 0xbc, 0x0b, 0x38, 0x6a, 0xc4, 0x73, 0xa3, 0x0c, | 1968 | 0xbe, 0xd4, 0xbb, 0x4a, 0x9e, 0xec, 0x2f, 0xb5, 0xc1, 0xe7, 0x6e, 0x97, |
1960 | 0x5f, 0x42, 0x5e, 0x6d, 0x91, 0x45, 0x94, 0xbf, 0x5b, 0x7e, 0xc1, 0x96, | 1969 | 0x77, 0x4f, 0xed, 0x94, 0xa1, 0xc9, 0x0f, 0x5e, 0x21, 0xcd, 0xdb, 0x60, |
1961 | 0xb3, 0x8c, 0xbc, 0xd1, 0x82, 0xb6, 0x31, 0x39, 0x57, 0xa0, 0x5d, 0xa9, | 1970 | 0xa3, 0x4e, 0x01, 0xce, 0x98, 0x95, 0xdb, 0x3f, 0x04, 0xde, 0x3a, 0x53, |
1962 | 0x79, 0x62, 0xf0, 0x7b, 0xd2, 0x97, 0xfe, 0x1e, 0xec, 0xd4, 0xb3, 0xb8, | 1971 | 0xdf, 0x57, 0x6d, 0xdb, 0x8d, 0x9c, 0xe7, 0xd9, 0xc9, 0xb5, 0xfa, 0x49, |
1963 | 0x9e, 0x91, 0xd4, 0x9e, 0x71, 0xa7, 0x2f, 0xd9, 0xed, 0x40, 0x77, 0xe2, | 1972 | 0xa0, 0x3d, 0x63, 0x29, 0xdb, 0xe4, 0xec, 0x49, 0x7a, 0x5f, 0x29, 0xd8, |
1964 | 0x8a, 0x3a, 0x7d, 0x6e, 0xa3, 0x73, 0x85, 0xed, 0xa3, 0x41, 0x9e, 0xd9, | 1973 | 0xe5, 0x01, 0x6c, 0x92, 0x1d, 0xe8, 0x8f, 0xf1, 0xe4, 0x4d, 0xf2, 0xd4, |
1965 | 0xab, 0x12, 0x2d, 0x58, 0x93, 0xed, 0x4e, 0x8f, 0x2d, 0xe3, 0x73, 0xca, | 1974 | 0x35, 0xee, 0x27, 0xf2, 0x9a, 0x0f, 0xdb, 0x9d, 0xdc, 0xd4, 0x8d, 0x52, |
1966 | 0x78, 0x40, 0xa7, 0xd4, 0x96, 0x0d, 0x22, 0x5d, 0x2d, 0xb0, 0x79, 0x26, | 1975 | 0x3c, 0x18, 0xc7, 0x1c, 0x54, 0xdb, 0x16, 0xb9, 0x5e, 0x86, 0xf4, 0x7c, |
1967 | 0x44, 0xb5, 0xb7, 0x48, 0x54, 0xba, 0x67, 0x55, 0x27, 0xca, 0x3c, 0x5b, | 1976 | 0xce, 0xc8, 0x11, 0xe8, 0xe6, 0x3f, 0x28, 0x0d, 0xc9, 0xe2, 0x70, 0x2b, |
1968 | 0x16, 0x6f, 0x81, 0x7e, 0x40, 0x59, 0x07, 0xca, 0xb6, 0xd9, 0xb2, 0xb6, | 1977 | 0x9e, 0xe3, 0xf2, 0x54, 0xa9, 0x07, 0xbe, 0xcf, 0x3b, 0x80, 0xa3, 0x46, |
1969 | 0x16, 0x69, 0x44, 0xd9, 0x8c, 0xe6, 0xf9, 0xf3, 0x3d, 0x9e, 0x9b, 0x75, | 1978 | 0x3c, 0x37, 0xca, 0xc0, 0x15, 0xe4, 0xd5, 0x16, 0x59, 0x40, 0xf9, 0x3b, |
1970 | 0x9a, 0xa5, 0xeb, 0x44, 0x0b, 0x64, 0xc3, 0x46, 0x59, 0xbc, 0xaa, 0x49, | 1979 | 0xe5, 0xdf, 0xd9, 0x72, 0x96, 0x91, 0x37, 0x5a, 0xd0, 0x36, 0x2e, 0x17, |
1971 | 0xba, 0xf0, 0x8e, 0x71, 0x6e, 0xff, 0x44, 0x4c, 0xae, 0x3d, 0xd1, 0x9d, | 1980 | 0x4b, 0xb4, 0x2b, 0x35, 0x4f, 0xf4, 0x7f, 0x4b, 0x7a, 0xb2, 0xdf, 0x82, |
1972 | 0xf8, 0x38, 0xe6, 0xd0, 0x7d, 0x8a, 0x71, 0xef, 0xfc, 0x25, 0x8c, 0xfb, | 1981 | 0x9d, 0x7a, 0x01, 0xd7, 0xd3, 0x92, 0xde, 0x3f, 0xea, 0xf4, 0xa4, 0x3a, |
1973 | 0x74, 0x9d, 0xe2, 0xbd, 0x49, 0xcb, 0x1f, 0xe2, 0xc3, 0x7c, 0x93, 0x88, | 1982 | 0x1d, 0xe8, 0x4e, 0x5c, 0xae, 0xd3, 0xe3, 0x35, 0x3a, 0x57, 0xd9, 0x3e, |
1974 | 0x32, 0xf9, 0x24, 0xfc, 0x5c, 0xea, 0xf0, 0x6e, 0xfb, 0xfd, 0x8c, 0xe3, | 1983 | 0x1a, 0xe4, 0xe9, 0x83, 0x2a, 0xd9, 0x82, 0x35, 0xd9, 0xed, 0x74, 0xd9, |
1975 | 0x97, 0xd0, 0x6f, 0x9b, 0xa5, 0x5d, 0x52, 0x24, 0x3f, 0x52, 0x0f, 0xe1, | 1984 | 0x32, 0x3e, 0xeb, 0x9c, 0x3c, 0xe9, 0x3c, 0xab, 0x76, 0x6c, 0x10, 0xe9, |
1976 | 0x3e, 0xe3, 0x48, 0xbe, 0x2a, 0xb3, 0xe6, 0xc9, 0x57, 0xc7, 0x14, 0x73, | 1985 | 0x68, 0x81, 0xcd, 0x33, 0x26, 0xaa, 0xad, 0x45, 0x5c, 0xe9, 0x9c, 0x51, |
1977 | 0x59, 0x50, 0x56, 0xf9, 0xc5, 0xc0, 0xac, 0x31, 0x79, 0xc1, 0xc8, 0xa5, | 1986 | 0xed, 0x28, 0xf3, 0x6d, 0x59, 0xa2, 0x05, 0xfa, 0x01, 0x65, 0xdb, 0x50, |
1978 | 0x0f, 0x18, 0xb9, 0xf4, 0xd8, 0x99, 0x15, 0x72, 0xe9, 0xbc, 0x96, 0x4b, | 1987 | 0xb6, 0xcb, 0x96, 0xb5, 0xb6, 0x48, 0x23, 0xca, 0xce, 0x68, 0x9e, 0xbf, |
1979 | 0x7b, 0x05, 0xf7, 0xf9, 0xf3, 0x90, 0x4b, 0x2f, 0xe2, 0xd9, 0xd5, 0x72, | 1988 | 0xd4, 0xe5, 0x7b, 0x79, 0xa7, 0x59, 0x3a, 0x4e, 0xb5, 0x40, 0x36, 0x6c, |
1980 | 0x29, 0x2e, 0xd6, 0x5e, 0x96, 0xaf, 0xea, 0xf1, 0xe7, 0x8a, 0x51, 0x6d, | 1989 | 0x92, 0x85, 0x6b, 0x9a, 0xa4, 0x03, 0xef, 0x18, 0xe7, 0x0e, 0x4e, 0xc5, |
1981 | 0x57, 0xe5, 0x67, 0x60, 0x93, 0x14, 0xa7, 0xac, 0xfe, 0x96, 0xa1, 0x36, | 1990 | 0xe5, 0xba, 0x53, 0x9d, 0xc9, 0x0f, 0x61, 0x0e, 0x9d, 0x67, 0x19, 0xf7, |
1982 | 0xe9, 0x19, 0xfc, 0xa9, 0x84, 0x36, 0xe7, 0x7f, 0xba, 0x84, 0xdf, 0xee, | 1991 | 0x7e, 0xf2, 0x0a, 0xc6, 0x7d, 0x3a, 0xce, 0xf2, 0xde, 0xa4, 0xe5, 0x0f, |
1983 | 0x7c, 0x5e, 0x51, 0x86, 0xbd, 0x0a, 0x19, 0x26, 0xaa, 0xbe, 0x0c, 0xc3, | 1992 | 0xf1, 0x61, 0xbe, 0x71, 0x44, 0x99, 0x7c, 0x1a, 0x7e, 0x2e, 0x75, 0x78, |
1984 | 0xbb, 0x32, 0xde, 0x95, 0xd9, 0xef, 0x8f, 0x7e, 0x3a, 0xe6, 0x52, 0x7e, | 1993 | 0xa7, 0xfd, 0x1e, 0xc7, 0x9f, 0x5e, 0x41, 0xbf, 0x6d, 0x86, 0xf6, 0x54, |
1985 | 0x50, 0x66, 0x40, 0x26, 0x15, 0x21, 0x93, 0x8a, 0x90, 0x53, 0x45, 0xc8, | 1994 | 0x99, 0xfc, 0x48, 0x3d, 0x84, 0xfb, 0xb4, 0x23, 0xc5, 0x9a, 0xcc, 0x9a, |
1986 | 0x25, 0xd8, 0x6c, 0x67, 0x8a, 0x90, 0x4b, 0x45, 0xc8, 0x25, 0xc8, 0xb8, | 1995 | 0x23, 0x5f, 0x9d, 0x54, 0xcc, 0x65, 0x41, 0x59, 0xf5, 0x67, 0x42, 0xb3, |
1987 | 0x27, 0x20, 0xe3, 0x8c, 0x4c, 0x1b, 0x85, 0x4c, 0x9b, 0x91, 0xfb, 0xac, | 1996 | 0xc6, 0xe4, 0x05, 0x23, 0x97, 0xde, 0x67, 0xe4, 0xd2, 0x99, 0xf3, 0xcb, |
1988 | 0xae, 0x37, 0xb1, 0x92, 0x7e, 0xeb, 0x23, 0x0d, 0xe8, 0x18, 0xf2, 0x99, | 1997 | 0xe4, 0xd2, 0x25, 0x2d, 0x97, 0x0e, 0x0a, 0xee, 0x73, 0x97, 0x20, 0x97, |
1989 | 0x9a, 0xd8, 0xe0, 0x8d, 0x47, 0x34, 0xbf, 0xbb, 0x9e, 0xba, 0xc2, 0x61, | 1998 | 0x5e, 0xc0, 0xb3, 0xa7, 0xe5, 0x52, 0x42, 0xac, 0xbd, 0x2c, 0x3f, 0xd0, |
1990 | 0x0e, 0xcd, 0x4f, 0xb4, 0xff, 0xbe, 0x9d, 0xbf, 0xa5, 0x09, 0x7c, 0xfd, | 1999 | 0xe3, 0xcf, 0x96, 0x5d, 0x6d, 0x57, 0x15, 0xa7, 0x61, 0x93, 0x94, 0x27, |
1991 | 0x03, 0xcb, 0xd7, 0xdb, 0x97, 0xf9, 0x3a, 0xe5, 0x30, 0x56, 0x5c, 0x9f, | 2000 | 0xac, 0xfe, 0x96, 0x4c, 0xab, 0x74, 0xf5, 0xff, 0x50, 0x22, 0x9b, 0xf3, |
1992 | 0xaf, 0x3b, 0xec, 0xbb, 0x5c, 0xb0, 0x0e, 0x7c, 0xbd, 0x6e, 0x15, 0x5f, | 2001 | 0xcf, 0xae, 0xe0, 0xf7, 0x46, 0x9f, 0x53, 0x94, 0x61, 0xaf, 0x42, 0x86, |
1993 | 0xc7, 0xc0, 0xd7, 0x7b, 0xd6, 0xf0, 0xf5, 0x06, 0x67, 0x58, 0xb7, 0xe1, | 2002 | 0x89, 0x5a, 0x5b, 0x86, 0xe1, 0x5d, 0x05, 0xef, 0x2a, 0xec, 0xf7, 0x6f, |
1994 | 0x19, 0x09, 0x3e, 0x37, 0x3a, 0x55, 0xbe, 0xbe, 0x47, 0xf3, 0xf5, 0x21, | 2003 | 0x7f, 0x38, 0xe2, 0x51, 0x7e, 0x50, 0x66, 0x40, 0x26, 0x95, 0x21, 0x93, |
1995 | 0xf0, 0xf5, 0x75, 0x35, 0x7c, 0xbd, 0x47, 0x52, 0x37, 0x67, 0x22, 0x5b, | 2004 | 0xca, 0x90, 0x53, 0x65, 0xc8, 0x25, 0xd8, 0x6c, 0xe7, 0xcb, 0x90, 0x4b, |
1996 | 0x65, 0xfc, 0x7e, 0xd5, 0xbe, 0x49, 0xfe, 0x49, 0x4c, 0x7b, 0xc3, 0x63, | 2005 | 0x65, 0xc8, 0x25, 0xc8, 0xb8, 0xc7, 0x20, 0xe3, 0x8c, 0x4c, 0x1b, 0x86, |
1997 | 0xc3, 0xd3, 0xed, 0x92, 0x7d, 0xe8, 0x15, 0x94, 0x91, 0xcf, 0x52, 0x63, | 2006 | 0x4c, 0x3b, 0x23, 0xf7, 0x59, 0x5d, 0x6f, 0x62, 0x25, 0xbd, 0xd6, 0x47, |
1998 | 0x69, 0xc7, 0x95, 0x83, 0x47, 0x7e, 0x22, 0x0b, 0x9a, 0xb7, 0x44, 0x26, | 2007 | 0xea, 0xd3, 0x31, 0xe4, 0xf3, 0x75, 0xb1, 0xc1, 0x03, 0xc7, 0x35, 0xbf, |
1999 | 0x8e, 0xc4, 0x64, 0xf2, 0x08, 0xe3, 0x10, 0x7f, 0x63, 0xe9, 0xbd, 0x49, | 2008 | 0x7b, 0xbe, 0xba, 0xca, 0x61, 0x0e, 0xcd, 0xf7, 0xb5, 0xff, 0xbe, 0x9b, |
2000 | 0x26, 0xf7, 0x32, 0x6f, 0x2e, 0x2a, 0xe3, 0x47, 0xe0, 0x6f, 0x1d, 0x61, | 2009 | 0xbf, 0xa5, 0x09, 0x7c, 0xfd, 0x1d, 0xcb, 0xd7, 0xbb, 0x97, 0xf8, 0x3a, |
2001 | 0x1c, 0xe2, 0xa5, 0x65, 0x1e, 0x5b, 0x80, 0x6c, 0x19, 0x3f, 0xc2, 0xb5, | 2010 | 0xed, 0x30, 0x56, 0xbc, 0x36, 0x5f, 0x6f, 0xb3, 0xef, 0x0a, 0xe1, 0x3a, |
2002 | 0x8e, 0xa1, 0x9f, 0x16, 0x39, 0x74, 0x44, 0xe4, 0xb6, 0x23, 0x51, 0xf9, | 2011 | 0xf0, 0xf5, 0xba, 0x15, 0x7c, 0x1d, 0x07, 0x5f, 0xef, 0x5f, 0xc5, 0xd7, |
2003 | 0xe8, 0x91, 0x65, 0x5e, 0x1b, 0x0d, 0x79, 0xed, 0x59, 0xf0, 0x5a, 0xb7, | 2012 | 0x1b, 0x9c, 0x01, 0xdd, 0x86, 0x67, 0x24, 0xf8, 0xdc, 0xe8, 0xd4, 0xf8, |
2004 | 0xe5, 0x35, 0xb5, 0xcc, 0x6b, 0x7f, 0x5a, 0xc3, 0x6b, 0x6c, 0x4f, 0x5e, | 2013 | 0xfa, 0x1e, 0xcd, 0xd7, 0x47, 0xc1, 0xd7, 0xd7, 0xd7, 0xf1, 0xf5, 0x7e, |
2005 | 0x7b, 0xce, 0x96, 0xf1, 0x39, 0x2a, 0xfb, 0x8e, 0x74, 0xca, 0xf8, 0x43, | 2014 | 0x49, 0xdf, 0x9c, 0x8b, 0xed, 0x94, 0xd1, 0xfb, 0x55, 0xdb, 0x66, 0xf9, |
2006 | 0x6f, 0x91, 0x89, 0xfb, 0x09, 0xab, 0xf9, 0x8e, 0x13, 0x6d, 0xb1, 0x99, | 2015 | 0x17, 0x31, 0xed, 0x0d, 0x8f, 0x0d, 0x4c, 0xb5, 0x49, 0xfe, 0xa1, 0x57, |
2007 | 0x4a, 0x37, 0xfa, 0x0f, 0x73, 0x88, 0xf4, 0xf7, 0x10, 0x7a, 0x67, 0x25, | 2016 | 0x50, 0x46, 0x3e, 0x4b, 0x8f, 0x64, 0x1d, 0x4f, 0x8e, 0x1c, 0xff, 0xbe, |
2008 | 0x95, 0xe3, 0x78, 0x8d, 0xf0, 0xa3, 0x4f, 0xc0, 0xbf, 0xd8, 0x07, 0x98, | 2017 | 0xcc, 0x6b, 0xde, 0x12, 0x19, 0x3b, 0x1e, 0x97, 0xf1, 0xe3, 0x8c, 0x43, |
2009 | 0x6e, 0x39, 0x22, 0xa9, 0xa8, 0xbc, 0x2c, 0x53, 0xfe, 0x27, 0x2e, 0x37, | 2018 | 0x7c, 0xcf, 0xd2, 0x7b, 0x93, 0x8c, 0x1f, 0x64, 0xde, 0x9c, 0x2b, 0xa3, |
2010 | 0xf6, 0x04, 0x6c, 0x11, 0x6d, 0xfb, 0xa4, 0x25, 0xfb, 0xce, 0x40, 0xfb, | 2019 | 0xc7, 0xe1, 0x6f, 0x1d, 0x67, 0x1c, 0xe2, 0xa5, 0x25, 0x1e, 0x9b, 0x87, |
2011 | 0x18, 0xa5, 0xb2, 0x30, 0x16, 0xc0, 0xb8, 0xb9, 0x63, 0xbe, 0xc7, 0xc4, | 2020 | 0x6c, 0x19, 0x3d, 0xce, 0xb5, 0x8e, 0xa3, 0x9f, 0x16, 0x39, 0x7a, 0x5c, |
2012 | 0xfc, 0xc7, 0x06, 0x7d, 0xe6, 0x45, 0xc7, 0x6c, 0x07, 0xf8, 0x9e, 0xcf, | 2021 | 0xe4, 0xb6, 0xe3, 0xae, 0x7c, 0xe0, 0xf8, 0x12, 0xaf, 0x0d, 0x47, 0xbc, |
2013 | 0xb0, 0x67, 0xf4, 0x59, 0x43, 0xb6, 0x7f, 0x44, 0x7f, 0x1b, 0x91, 0x31, | 2022 | 0xf6, 0x0c, 0x78, 0xad, 0xd3, 0xf2, 0x9a, 0x5a, 0xe2, 0xb5, 0xaf, 0xd6, |
2014 | 0xf5, 0x7c, 0x99, 0xdf, 0xb0, 0x81, 0xff, 0x59, 0xe6, 0xb7, 0xb0, 0xf6, | 2023 | 0xf1, 0x1a, 0xdb, 0x93, 0xd7, 0x9e, 0xb5, 0x65, 0x7c, 0x76, 0xe5, 0xd0, |
2015 | 0xb7, 0x9b, 0xf8, 0x2c, 0xf9, 0xee, 0x87, 0x0e, 0xbf, 0x5d, 0x35, 0xa5, | 2024 | 0xf1, 0x76, 0x19, 0x7d, 0xe8, 0x2d, 0x32, 0x76, 0x3f, 0x61, 0x35, 0xdf, |
2016 | 0x73, 0xbd, 0xf0, 0xbb, 0xcc, 0x67, 0xd6, 0x7f, 0x84, 0xf1, 0x8e, 0x64, | 2025 | 0x85, 0xa2, 0x2d, 0x36, 0x5d, 0xed, 0x44, 0xff, 0x51, 0x0e, 0x11, 0x71, |
2017 | 0x52, 0xbd, 0xf7, 0x72, 0xe6, 0x1e, 0xec, 0x9d, 0x67, 0xdd, 0xad, 0x96, | 2026 | 0xed, 0x77, 0xcf, 0x48, 0xba, 0xc0, 0xf1, 0x1a, 0xe1, 0x47, 0x9f, 0x82, |
2018 | 0x47, 0xb7, 0x6a, 0xbf, 0x83, 0x36, 0xd6, 0x78, 0xe9, 0x45, 0xc9, 0xd3, | 2027 | 0x7f, 0x71, 0x08, 0x30, 0xdd, 0x72, 0x5c, 0xd2, 0xae, 0xbc, 0x2c, 0x13, |
2019 | 0x36, 0x19, 0xdd, 0xea, 0xe4, 0x66, 0x92, 0x97, 0x1b, 0xfb, 0x79, 0xdd, | 2028 | 0xc1, 0xe9, 0xed, 0xc6, 0x9e, 0x80, 0x2d, 0xa2, 0x6d, 0x9f, 0xac, 0xe4, |
2020 | 0xa5, 0xcc, 0x3b, 0x4c, 0xab, 0xb5, 0x32, 0xf9, 0x84, 0x84, 0x32, 0x39, | 2029 | 0xdf, 0x1e, 0x6a, 0x1f, 0x63, 0xb2, 0x22, 0x8c, 0x05, 0x30, 0x6e, 0x6e, |
2021 | 0x75, 0x33, 0xbf, 0xb7, 0x9b, 0x3d, 0xa2, 0xbf, 0x2f, 0x95, 0xec, 0x56, | 2030 | 0xbf, 0x85, 0xca, 0xfc, 0xc7, 0x06, 0x7d, 0xe6, 0x45, 0xc7, 0x6c, 0xfb, |
2022 | 0x9c, 0xd3, 0xa7, 0x21, 0x5f, 0x43, 0x5a, 0x48, 0xc8, 0x27, 0x8f, 0x90, | 2031 | 0xf8, 0x9e, 0xcf, 0xb0, 0x67, 0xf4, 0xd9, 0x45, 0xb6, 0x67, 0x3f, 0x09, |
2023 | 0x1e, 0x54, 0xbc, 0x55, 0x3e, 0x61, 0xe9, 0x61, 0x46, 0x0a, 0x90, 0x3b, | 2032 | 0x1d, 0x53, 0x2f, 0x56, 0xf8, 0x4d, 0x1c, 0xf8, 0x9f, 0x15, 0x7e, 0x5b, |
2024 | 0x47, 0x8e, 0x7c, 0x54, 0x66, 0x6e, 0x5c, 0x4d, 0x0f, 0x13, 0x55, 0x7a, | 2033 | 0xeb, 0x37, 0xdb, 0x4c, 0x7c, 0x96, 0x7c, 0xf7, 0x5d, 0x27, 0x5f, 0x9a, |
2025 | 0x88, 0xc3, 0x3e, 0x73, 0x6a, 0xe9, 0xe1, 0x97, 0x97, 0xe9, 0x61, 0xc6, | 2034 | 0xd3, 0xdf, 0x38, 0xc8, 0xf9, 0xf8, 0x5d, 0xe1, 0x33, 0xeb, 0xcf, 0x31, |
2026 | 0xf9, 0xe7, 0xd2, 0xc3, 0xf5, 0x2b, 0xe8, 0x61, 0x4a, 0xd3, 0xc3, 0xce, | 2035 | 0xde, 0x91, 0x4a, 0xa9, 0x63, 0xdb, 0x99, 0x7b, 0x70, 0x70, 0x8e, 0x75, |
2027 | 0x65, 0x7a, 0x98, 0x3a, 0xc2, 0x71, 0xf5, 0xde, 0xa8, 0xbb, 0xe8, 0x70, | 2036 | 0x77, 0x5a, 0x1e, 0xdd, 0xa9, 0xfd, 0x0e, 0xda, 0x58, 0xa3, 0x93, 0x2f, |
2028 | 0xcd, 0x97, 0x69, 0x21, 0x39, 0xa9, 0xf3, 0xf5, 0x53, 0x39, 0x9e, 0x6f, | 2037 | 0x48, 0x91, 0xb6, 0xc9, 0xf0, 0x4e, 0xa7, 0x30, 0xfd, 0x73, 0xdb, 0x8d, |
2029 | 0xda, 0xa0, 0x18, 0x27, 0xa9, 0xae, 0x7f, 0xeb, 0xbf, 0xe8, 0xfa, 0xbf, | 2038 | 0xfd, 0x3c, 0xb0, 0x95, 0x79, 0x87, 0x59, 0xb5, 0x5a, 0x26, 0x9f, 0x92, |
2030 | 0xfc, 0xff, 0x79, 0xfd, 0xd5, 0xa5, 0xcc, 0xdd, 0xe7, 0x99, 0x55, 0x23, | 2039 | 0x48, 0x26, 0xa7, 0x6f, 0xce, 0xc2, 0xce, 0xce, 0x1f, 0xd7, 0xdf, 0xab, |
2031 | 0x8f, 0x43, 0x7a, 0x88, 0x5d, 0x6a, 0xf4, 0x02, 0xd7, 0x98, 0xcf, 0x90, | 2040 | 0x4a, 0x75, 0x2a, 0xce, 0xe9, 0x4e, 0xc8, 0xd7, 0x88, 0x16, 0x92, 0xf2, |
2032 | 0x67, 0x90, 0x7f, 0x67, 0x20, 0xff, 0x9e, 0x84, 0xfc, 0x3b, 0xbd, 0x62, | 2041 | 0xd1, 0xe3, 0xa4, 0x07, 0x95, 0xd8, 0x28, 0x1f, 0xb1, 0xf4, 0x70, 0x46, |
2033 | 0x4f, 0x60, 0xd0, 0xc6, 0x23, 0x02, 0x39, 0xe8, 0x57, 0xf1, 0xb1, 0x38, | 2042 | 0x4a, 0x90, 0x3b, 0xc7, 0x8f, 0x7f, 0x40, 0xa6, 0x0f, 0xac, 0xa4, 0x87, |
2034 | 0x40, 0x7c, 0x98, 0xfc, 0x13, 0xe6, 0xfe, 0xae, 0xc4, 0x49, 0x54, 0xe7, | 2043 | 0xb1, 0x1a, 0x3d, 0x24, 0x60, 0x9f, 0x39, 0xf5, 0xf4, 0xf0, 0xf3, 0x4b, |
2035 | 0x1c, 0x3d, 0xea, 0xd7, 0xe2, 0x84, 0x70, 0xbf, 0x5c, 0x33, 0x47, 0xfc, | 2044 | 0xf4, 0x30, 0xed, 0xfc, 0x6b, 0xe9, 0xe1, 0x86, 0x65, 0xf4, 0x30, 0xa1, |
2036 | 0x2e, 0xf3, 0x79, 0x46, 0xe7, 0x91, 0xe4, 0xf5, 0x1e, 0x14, 0xf1, 0xc2, | 2045 | 0xe9, 0x61, 0x68, 0x89, 0x1e, 0x26, 0x8e, 0x73, 0x5c, 0xbd, 0x37, 0xea, |
2037 | 0x3d, 0x28, 0xe2, 0x24, 0xaa, 0xed, 0xfd, 0x7c, 0xb9, 0x49, 0xe7, 0xd0, | 2046 | 0x2d, 0x38, 0x5c, 0xf3, 0x25, 0x5a, 0x48, 0x8d, 0xeb, 0x7c, 0xfd, 0x74, |
2038 | 0x1f, 0x98, 0x8f, 0xcb, 0x62, 0x9c, 0x31, 0x3e, 0x7e, 0x97, 0x90, 0x7e, | 2047 | 0x81, 0xe7, 0x9b, 0x36, 0x28, 0xc6, 0x49, 0x6a, 0xeb, 0xbf, 0xf1, 0xdf, |
2039 | 0xb3, 0x97, 0xc8, 0x4b, 0x8e, 0xb9, 0x72, 0xe0, 0xe9, 0x0d, 0x96, 0xb6, | 2048 | 0x74, 0xfd, 0xaf, 0xda, 0xfa, 0xff, 0x77, 0xfd, 0x33, 0x5b, 0x99, 0xbb, |
2040 | 0x19, 0x1b, 0xe4, 0x99, 0xdd, 0x70, 0x2f, 0xa2, 0xd7, 0xca, 0xba, 0x96, | 2049 | 0xcf, 0x33, 0xb0, 0x46, 0x1e, 0x47, 0xf4, 0x90, 0xdb, 0x6a, 0xf4, 0x02, |
2041 | 0x9a, 0x98, 0x25, 0xf0, 0x3e, 0x2d, 0xc9, 0xcc, 0x00, 0xee, 0xf3, 0x1c, | 2050 | 0xd7, 0x98, 0xcf, 0x90, 0x67, 0x90, 0x7f, 0xe7, 0x21, 0xff, 0x9e, 0x80, |
2042 | 0x7b, 0xbf, 0x4c, 0x3d, 0x38, 0x01, 0x5b, 0x6e, 0x2f, 0x74, 0x0e, 0xcf, | 2051 | 0xfc, 0x7b, 0x7c, 0xd9, 0x9e, 0x40, 0xbf, 0x8d, 0x47, 0x84, 0x72, 0x24, |
2043 | 0x9f, 0x99, 0xef, 0x70, 0x13, 0x86, 0x59, 0xfd, 0xdd, 0x29, 0xfa, 0x80, | 2052 | 0xa8, 0xe1, 0x63, 0xa1, 0x8f, 0xf8, 0x30, 0xf9, 0x27, 0xcc, 0xfd, 0x5d, |
2044 | 0xa4, 0x87, 0x04, 0x9e, 0x67, 0x6c, 0x5c, 0x29, 0x21, 0xf9, 0xc2, 0x05, | 2053 | 0x8e, 0x13, 0x57, 0xe7, 0x1c, 0x3d, 0x1a, 0xd4, 0xe3, 0x84, 0x70, 0xbf, |
2045 | 0xf3, 0x6d, 0xcb, 0xc2, 0x4b, 0xb8, 0xbf, 0xde, 0x7a, 0x18, 0x3f, 0x64, | 2054 | 0x5c, 0x37, 0x47, 0xfc, 0xae, 0xf0, 0xf9, 0x8c, 0xce, 0x23, 0x29, 0xea, |
2046 | 0xd4, 0xdc, 0xd1, 0xd7, 0x92, 0xa4, 0xcb, 0x26, 0xc7, 0xa5, 0x1a, 0x37, | 2055 | 0x3d, 0x28, 0xe2, 0x85, 0x7b, 0x50, 0xc4, 0x89, 0xab, 0xed, 0xfd, 0x62, |
2047 | 0x99, 0x91, 0xc3, 0xda, 0x7e, 0x1e, 0xb2, 0xb9, 0x2d, 0xa9, 0xd1, 0x9c, | 2056 | 0xa5, 0x49, 0xe7, 0xd0, 0x1f, 0x9e, 0x4b, 0xc8, 0x42, 0x82, 0x31, 0x3e, |
2048 | 0x18, 0x1b, 0xfa, 0x77, 0x60, 0x43, 0x7f, 0xb1, 0x92, 0xd6, 0xfb, 0x58, | 2057 | 0x7e, 0xe7, 0x90, 0x7e, 0xb3, 0x9f, 0x2c, 0x4a, 0x81, 0xb9, 0x72, 0xe0, |
2049 | 0xa7, 0x61, 0x43, 0x3f, 0x01, 0xdd, 0x43, 0x9d, 0x13, 0xb7, 0x3a, 0x67, | 2058 | 0xe9, 0x0d, 0x96, 0xb6, 0x19, 0x1b, 0xe4, 0x19, 0xe0, 0x68, 0x2f, 0xa2, |
2050 | 0x4a, 0xdd, 0xa8, 0x75, 0xce, 0x37, 0xb5, 0xce, 0x79, 0xef, 0x1a, 0x9d, | 2059 | 0xdb, 0xca, 0xba, 0x96, 0xba, 0x98, 0x25, 0xf0, 0x3e, 0x25, 0xa9, 0x5c, |
2051 | 0x73, 0x48, 0x75, 0x97, 0xa8, 0x73, 0x86, 0xd5, 0x1e, 0x87, 0xf6, 0xe2, | 2060 | 0x1f, 0xee, 0x73, 0x1c, 0xfb, 0x13, 0x32, 0xf1, 0xe0, 0x87, 0x61, 0xcb, |
2052 | 0xe6, 0x3a, 0x3a, 0xe7, 0x7d, 0xf2, 0x2e, 0xfb, 0xee, 0x1e, 0x79, 0xff, | 2061 | 0xbd, 0x1f, 0x3a, 0x87, 0xe7, 0xcf, 0xb8, 0xf7, 0xe0, 0x69, 0x18, 0x66, |
2053 | 0x0e, 0xbd, 0x77, 0xe3, 0xce, 0x2a, 0x7e, 0x6b, 0xc9, 0xe8, 0xa0, 0xeb, | 2062 | 0xf4, 0x77, 0xac, 0xe8, 0x03, 0x92, 0x1e, 0x92, 0x78, 0x3e, 0x63, 0xe3, |
2054 | 0x54, 0xaf, 0xde, 0xf3, 0xfd, 0x46, 0x8d, 0xce, 0xe9, 0x52, 0x03, 0xce, | 2063 | 0x4a, 0x49, 0x29, 0x96, 0x5e, 0x94, 0x7c, 0x85, 0xdf, 0x5c, 0x7b, 0x09, |
2055 | 0xb0, 0x6e, 0xc3, 0xd8, 0x04, 0x9f, 0x7d, 0x27, 0x3d, 0xda, 0x84, 0xe7, | 2064 | 0xf7, 0xd7, 0x5b, 0x0f, 0xe3, 0x87, 0x0c, 0xeb, 0x3b, 0xd7, 0x66, 0x51, |
2056 | 0x84, 0x44, 0x8e, 0x60, 0xee, 0xe6, 0x7b, 0x50, 0xca, 0xbc, 0x7b, 0xab, | 2065 | 0xb2, 0x15, 0x93, 0xe3, 0x52, 0x8b, 0x9b, 0x9c, 0x91, 0x63, 0xda, 0x7e, |
2057 | 0x7d, 0xa7, 0xc2, 0xf2, 0xa8, 0x29, 0xef, 0xb6, 0xe5, 0x46, 0x57, 0x75, | 2066 | 0xce, 0xd8, 0xdc, 0x96, 0xf4, 0x70, 0x41, 0x8c, 0x0d, 0xfd, 0x39, 0xd8, |
2058 | 0xa9, 0x4e, 0xad, 0xab, 0xb6, 0x83, 0xa1, 0x66, 0xa1, 0x5f, 0x67, 0x8b, | 2067 | 0xd0, 0x9f, 0xad, 0x66, 0xf5, 0x3e, 0xd6, 0xe3, 0xb0, 0xa1, 0x1f, 0x83, |
2059 | 0xa1, 0xce, 0xe2, 0x6f, 0xc6, 0x9e, 0x19, 0xa3, 0x08, 0x63, 0xd8, 0x49, | 2068 | 0xee, 0xa1, 0xce, 0x49, 0x58, 0x9d, 0x33, 0xa1, 0x0e, 0x68, 0x9d, 0xf3, |
2060 | 0xd4, 0xc1, 0x55, 0x0c, 0x6d, 0x4a, 0xfe, 0x86, 0xaf, 0x80, 0x6b, 0x1e, | 2069 | 0xe7, 0x5a, 0xe7, 0xbc, 0x7b, 0x95, 0xce, 0x39, 0xaa, 0x3a, 0x27, 0xa9, |
2061 | 0x78, 0xbd, 0x19, 0xfc, 0xf3, 0x6f, 0x0a, 0x8c, 0x81, 0xb6, 0xcb, 0xd1, | 2070 | 0x73, 0x06, 0xd4, 0x7e, 0x87, 0xf6, 0xe2, 0x96, 0x35, 0x74, 0xce, 0x7b, |
2062 | 0xe9, 0xda, 0x77, 0x9d, 0xf2, 0x9e, 0xe9, 0x2d, 0xb2, 0xbf, 0xf4, 0x2d, | 2071 | 0xe4, 0x1d, 0xf6, 0xdd, 0x3d, 0xf2, 0xde, 0x3d, 0x7a, 0xef, 0xc6, 0x9b, |
2063 | 0xf0, 0xc1, 0x56, 0x99, 0x2a, 0x15, 0xf4, 0x79, 0xf5, 0x4d, 0xfa, 0x3b, | 2072 | 0x51, 0xfc, 0x76, 0x93, 0xd1, 0x41, 0xd7, 0xab, 0x6e, 0xbd, 0xe7, 0xfb, |
2064 | 0x1e, 0xfc, 0xbe, 0x8d, 0x91, 0x91, 0x3b, 0x1d, 0x23, 0x23, 0xd3, 0xaa, | 2073 | 0x95, 0x3a, 0x9d, 0xd3, 0xa1, 0xfa, 0x9c, 0x01, 0xdd, 0x86, 0xb1, 0x09, |
2065 | 0x6a, 0xb3, 0x86, 0x7d, 0xf2, 0xdb, 0x21, 0x23, 0xa5, 0x84, 0xfe, 0xc6, | 2074 | 0x3e, 0x07, 0x4e, 0x76, 0xb8, 0x09, 0xcf, 0x49, 0x89, 0x1d, 0xc7, 0xdc, |
2066 | 0xe9, 0x6c, 0xe5, 0x0a, 0xf9, 0xc2, 0x31, 0x75, 0xa7, 0xaa, 0x9e, 0xef, | 2075 | 0xcd, 0xf7, 0xa5, 0x94, 0x79, 0xf7, 0x56, 0xfb, 0x4e, 0x45, 0xe5, 0xae, |
2067 | 0xd5, 0x36, 0xeb, 0xdc, 0x0a, 0x9b, 0xf5, 0xaf, 0x64, 0xf1, 0xfd, 0x31, | 2076 | 0x29, 0xef, 0xb4, 0xe5, 0x46, 0x57, 0x75, 0xa8, 0x76, 0xad, 0xab, 0x76, |
2068 | 0xcc, 0x13, 0x34, 0x7c, 0xe5, 0xf7, 0xb8, 0x17, 0xda, 0x1e, 0x97, 0x0b, | 2077 | 0x83, 0xa1, 0x66, 0xa0, 0x5f, 0x67, 0xca, 0x91, 0xce, 0xe2, 0x6f, 0xc6, |
2069 | 0x32, 0xa2, 0xf1, 0x47, 0x79, 0xda, 0x02, 0x39, 0xb8, 0xa4, 0xf5, 0xeb, | 2078 | 0x9e, 0x19, 0xa3, 0x88, 0x62, 0xd8, 0x29, 0xd4, 0xc1, 0x55, 0x8e, 0x6c, |
2070 | 0x66, 0xd0, 0x20, 0x65, 0xe9, 0xc7, 0xe4, 0x45, 0x2d, 0xcf, 0x36, 0x5b, | 2079 | 0x4a, 0xfe, 0x86, 0xaf, 0x80, 0x6b, 0x0e, 0x78, 0xbd, 0x19, 0xfc, 0xf3, |
2071 | 0xdb, 0x75, 0x81, 0xb1, 0xd4, 0x23, 0xb4, 0x5d, 0xbf, 0x69, 0xcb, 0x59, | 2080 | 0x1f, 0x4a, 0x8c, 0x81, 0xb6, 0xc9, 0x89, 0xa9, 0xfa, 0x77, 0xed, 0xf2, |
2072 | 0x96, 0x4a, 0x2c, 0x09, 0xf5, 0x5d, 0x1c, 0x32, 0x94, 0xf2, 0xf4, 0x8d, | 2081 | 0xae, 0xa9, 0x1d, 0x72, 0xfb, 0xe4, 0xd6, 0xa4, 0x34, 0xef, 0x94, 0x89, |
2073 | 0xda, 0xae, 0x5f, 0xb3, 0x7d, 0x50, 0x7e, 0x1a, 0xd9, 0xbd, 0xdd, 0x59, | 2082 | 0xc9, 0x29, 0x7d, 0xfe, 0x7d, 0xb3, 0xfe, 0x2e, 0x08, 0xbf, 0x97, 0x63, |
2074 | 0xb0, 0x65, 0x7c, 0x0e, 0xe3, 0xe9, 0x5e, 0x3a, 0x6b, 0xf9, 0x4c, 0x39, | 2083 | 0x64, 0xe4, 0x90, 0x63, 0x64, 0x64, 0x56, 0xd5, 0x6c, 0xd6, 0xa8, 0x4f, |
2075 | 0x5f, 0xc2, 0xfb, 0x4d, 0x78, 0x4f, 0x3e, 0x3b, 0xad, 0xf9, 0x4c, 0xdb, | 2084 | 0x7e, 0x8b, 0x64, 0x70, 0x32, 0xa9, 0xbf, 0xa5, 0x3a, 0x53, 0xbd, 0x4a, |
2076 | 0x27, 0x4e, 0xbf, 0xdd, 0x5f, 0x58, 0xde, 0x1b, 0xc8, 0x91, 0xcf, 0xd4, | 2085 | 0x7e, 0xfb, 0xa4, 0xba, 0x4b, 0xd5, 0xce, 0xf7, 0x6a, 0x9b, 0x75, 0x76, |
2077 | 0x51, 0x77, 0xc1, 0xc8, 0x03, 0xe6, 0xa9, 0x7e, 0x1e, 0xba, 0x83, 0x6d, | 2086 | 0x99, 0xcd, 0xfa, 0xbf, 0x64, 0xe1, 0xbd, 0x71, 0xcc, 0x13, 0x34, 0x7c, |
2078 | 0x51, 0xfe, 0x70, 0x9a, 0xbe, 0x2d, 0xfc, 0x9f, 0x56, 0x3c, 0xb7, 0xe3, | 2087 | 0xf5, 0xb7, 0xb8, 0x17, 0xda, 0x96, 0x90, 0x17, 0x65, 0x50, 0xe3, 0x8f, |
2079 | 0x79, 0x56, 0xde, 0xbb, 0x37, 0xa6, 0xe7, 0x3d, 0x85, 0x79, 0x1c, 0x38, | 2088 | 0xf2, 0xb4, 0x05, 0x72, 0x70, 0x51, 0xeb, 0xd7, 0x2d, 0xa0, 0x41, 0xca, |
2080 | 0x82, 0x39, 0x39, 0xc6, 0x76, 0x8e, 0x9e, 0x8a, 0x4a, 0xc3, 0x29, 0xf2, | 2089 | 0xd2, 0x0f, 0xca, 0x0b, 0x5a, 0x9e, 0x6d, 0xb1, 0xb6, 0xeb, 0x3c, 0xbf, |
2081 | 0x1d, 0xcf, 0xda, 0x04, 0xc1, 0xbe, 0x7e, 0xd2, 0x6d, 0xca, 0xdd, 0xa9, | 2090 | 0x6d, 0x7d, 0x9c, 0xb6, 0xeb, 0x9f, 0xdb, 0x72, 0x96, 0xa5, 0x93, 0x8b, |
2082 | 0xcf, 0x96, 0x6e, 0x4f, 0x44, 0x80, 0x93, 0x03, 0x58, 0x8f, 0xa9, 0x82, | 2091 | 0x42, 0x7d, 0x97, 0x80, 0x0c, 0xa5, 0x3c, 0x7d, 0xa3, 0xb6, 0xeb, 0x97, |
2083 | 0xe7, 0x66, 0x1c, 0x2f, 0x81, 0x79, 0xc2, 0x06, 0xec, 0x86, 0x2d, 0xd8, | 2092 | 0x6c, 0x1f, 0x94, 0x9f, 0x46, 0x76, 0xef, 0x76, 0xe6, 0x6d, 0x19, 0x9f, |
2084 | 0x0d, 0x3b, 0xb0, 0x1b, 0x76, 0xe0, 0x46, 0x39, 0x71, 0x15, 0x73, 0x4c, | 2093 | 0xa3, 0x78, 0xba, 0x9f, 0xcd, 0x5b, 0x3e, 0x53, 0xce, 0xe7, 0xf1, 0x7e, |
2085 | 0x72, 0xd7, 0xc2, 0x2b, 0x97, 0xef, 0xe8, 0x38, 0x7d, 0xe3, 0xcd, 0x23, | 2094 | 0x33, 0xde, 0x93, 0xcf, 0x1e, 0xd7, 0x7c, 0xa6, 0xed, 0x13, 0xa7, 0xd7, |
2086 | 0xf0, 0xd9, 0xc5, 0x4d, 0x8d, 0x32, 0x0f, 0x7f, 0xc9, 0x6d, 0xbc, 0x79, | 2095 | 0xee, 0x2f, 0x2c, 0xed, 0x0d, 0x14, 0xc8, 0x67, 0xea, 0x84, 0x37, 0x6f, |
2087 | 0xa7, 0x74, 0x0f, 0xe2, 0xfd, 0xe0, 0x05, 0xe9, 0xb9, 0xf9, 0x56, 0xa7, | 2096 | 0xe4, 0x01, 0xf3, 0x54, 0x7f, 0x03, 0xba, 0x83, 0x6d, 0x51, 0xfe, 0x70, |
2088 | 0x71, 0x74, 0x04, 0x78, 0x4c, 0x3b, 0xa9, 0xc4, 0x98, 0xb3, 0x80, 0x71, | 2097 | 0x96, 0xbe, 0x2d, 0xfc, 0x9f, 0x8d, 0x78, 0x6e, 0xc3, 0xf3, 0x8c, 0xbc, |
2089 | 0x32, 0xdb, 0x23, 0xc2, 0xb8, 0xe5, 0x02, 0x63, 0x11, 0x37, 0x77, 0x47, | 2098 | 0xfb, 0x60, 0x5c, 0xcf, 0x7b, 0x02, 0xf3, 0x38, 0x7c, 0x1c, 0x73, 0x72, |
2090 | 0xfa, 0x92, 0xe3, 0x4e, 0x6a, 0x54, 0x45, 0x52, 0xa3, 0x23, 0x4e, 0x58, | 2099 | 0x8c, 0xed, 0xec, 0x9e, 0x75, 0xa5, 0xe1, 0x2c, 0xf9, 0x8e, 0x67, 0x6d, |
2091 | 0x8f, 0xdf, 0x48, 0x85, 0x9c, 0x01, 0xac, 0x07, 0x8a, 0xd3, 0xa0, 0xa7, | 2100 | 0xc2, 0xf0, 0x50, 0x2f, 0xe9, 0x36, 0xed, 0x0d, 0xe9, 0xb3, 0xa5, 0xbb, |
2092 | 0xff, 0x28, 0xf9, 0x63, 0x2d, 0x32, 0x5f, 0xe8, 0x76, 0x33, 0x2a, 0xae, | 2101 | 0x93, 0x31, 0xe0, 0xe4, 0x30, 0xd6, 0x63, 0xa2, 0xe4, 0x7b, 0x39, 0xc7, |
2093 | 0x73, 0x4b, 0xd4, 0x09, 0x10, 0xfd, 0xa9, 0x98, 0xcc, 0x96, 0xb6, 0x8a, | 2102 | 0x4f, 0x62, 0x9e, 0xb0, 0x01, 0x3b, 0x61, 0x0b, 0x76, 0xc2, 0x0e, 0xec, |
2094 | 0xd2, 0xb6, 0x7b, 0x87, 0x64, 0xa6, 0x4b, 0x72, 0x6e, 0x40, 0xda, 0x14, | 2103 | 0x84, 0x1d, 0xb8, 0x49, 0x4e, 0x5d, 0xc3, 0x1c, 0x93, 0xc2, 0x75, 0xf0, |
2095 | 0xfa, 0xe7, 0xb7, 0x67, 0xd5, 0x09, 0xee, 0x25, 0x86, 0xbc, 0x70, 0x39, | 2104 | 0xca, 0xe5, 0xaf, 0x75, 0x9c, 0xbe, 0xf1, 0xe6, 0x41, 0xf8, 0xec, 0xe2, |
2096 | 0xf9, 0xa4, 0x04, 0x1c, 0x82, 0x6e, 0x19, 0xe3, 0x6d, 0x12, 0xca, 0xbd, | 2105 | 0xa5, 0x87, 0x99, 0x87, 0xbf, 0xe8, 0x35, 0xde, 0x3c, 0x24, 0x9d, 0xfd, |
2097 | 0x8f, 0xea, 0xf8, 0x29, 0x63, 0xb6, 0xb5, 0x7b, 0x0f, 0xe4, 0x8f, 0x58, | 2106 | 0x78, 0xdf, 0xff, 0xa2, 0x74, 0xdd, 0x7c, 0xab, 0xd3, 0x38, 0x3c, 0x08, |
2098 | 0x5d, 0xfe, 0x98, 0x2b, 0x72, 0x9f, 0x46, 0x72, 0x51, 0xc6, 0x88, 0x3d, | 2107 | 0x3c, 0x66, 0x9d, 0x74, 0x72, 0xc4, 0x99, 0xc7, 0x38, 0xb9, 0xdd, 0x31, |
2099 | 0xfc, 0x9e, 0x61, 0xdd, 0x26, 0x99, 0x1a, 0xc8, 0xd9, 0x3c, 0x8f, 0x47, | 2108 | 0x61, 0xdc, 0x72, 0x9e, 0xb1, 0x88, 0x9b, 0x3b, 0x63, 0x3d, 0xa9, 0x51, |
2100 | 0x12, 0xcc, 0x21, 0x26, 0x4e, 0xc6, 0x07, 0xc8, 0xeb, 0xab, 0xf7, 0x36, | 2109 | 0x27, 0x3d, 0xac, 0x62, 0xe9, 0xe1, 0x41, 0x27, 0xaa, 0xc7, 0x6f, 0xae, |
2101 | 0x62, 0x35, 0xf2, 0xc0, 0x91, 0xc5, 0x52, 0xb8, 0x17, 0xc2, 0xfe, 0xf0, | 2110 | 0x42, 0xce, 0x00, 0xd6, 0xc3, 0xe5, 0x4f, 0x83, 0x9e, 0x8e, 0x48, 0xf1, |
2102 | 0x3c, 0x63, 0xe4, 0x6d, 0x66, 0x4d, 0x3b, 0xc2, 0xc5, 0xfd, 0xca, 0x95, | 2111 | 0x64, 0x8b, 0xcc, 0x95, 0x3a, 0xbd, 0x9c, 0x4a, 0xe8, 0xdc, 0x12, 0x75, |
2103 | 0x32, 0x56, 0x79, 0x94, 0xa9, 0xae, 0x96, 0xaf, 0x8f, 0x55, 0x8c, 0x6c, | 2112 | 0x0a, 0x44, 0x7f, 0x36, 0x2e, 0x33, 0x93, 0x3b, 0x45, 0x69, 0xdb, 0x7d, |
2104 | 0x9d, 0xa9, 0x84, 0xba, 0x25, 0x66, 0x74, 0xe9, 0x1a, 0x7d, 0x62, 0xa2, | 2113 | 0x9b, 0xe4, 0xa6, 0x26, 0xe5, 0x62, 0x9f, 0xb4, 0x2a, 0xf4, 0xcf, 0x6f, |
2105 | 0x99, 0x55, 0x7d, 0x42, 0xbd, 0xa8, 0xe4, 0x03, 0xf3, 0x1d, 0x12, 0x7d, | 2114 | 0xdc, 0xaa, 0x53, 0xdc, 0x4b, 0x8c, 0x78, 0x61, 0x3b, 0xf9, 0x64, 0x12, |
2106 | 0x58, 0x96, 0xa6, 0xbc, 0xec, 0xe5, 0xcc, 0xd5, 0x98, 0xf2, 0xdf, 0x8c, | 2115 | 0x38, 0x04, 0xdd, 0x32, 0xc6, 0xdb, 0x24, 0x94, 0x7b, 0x1f, 0xd0, 0xf1, |
2107 | 0x7e, 0xfc, 0x6f, 0x09, 0xea, 0xc3, 0x31, 0xf5, 0x75, 0xdc, 0x37, 0x69, | 2116 | 0x53, 0xc6, 0x6c, 0xeb, 0xf7, 0x1e, 0xc8, 0x1f, 0xf1, 0x35, 0xf9, 0x63, |
2108 | 0xfa, 0x03, 0x4f, 0xe1, 0xd9, 0xf8, 0x09, 0xbf, 0x03, 0x3f, 0xe1, 0x8b, | 2117 | 0xb6, 0xcc, 0x7d, 0x1a, 0x29, 0xb8, 0x8c, 0x11, 0xfb, 0xf8, 0x3d, 0xcd, |
2109 | 0xd0, 0x75, 0x67, 0xe0, 0x27, 0x3c, 0x09, 0x3f, 0xe1, 0x34, 0xfc, 0x84, | 2118 | 0xba, 0x4d, 0x32, 0xd1, 0x57, 0xb0, 0x79, 0x1e, 0x7f, 0x9e, 0x64, 0x0e, |
2110 | 0x27, 0xa0, 0x27, 0x6b, 0xfd, 0x83, 0xc9, 0x15, 0xfe, 0x41, 0xa0, 0xf9, | 2119 | 0x31, 0x71, 0x32, 0xda, 0x47, 0x5e, 0x5f, 0xb9, 0xb7, 0x11, 0xaf, 0x93, |
2111 | 0x9f, 0xf1, 0xc0, 0x27, 0x6b, 0x7c, 0x83, 0x7d, 0x46, 0x5f, 0xc1, 0xef, | 2120 | 0x07, 0x8e, 0x2c, 0x4c, 0x46, 0x7b, 0x21, 0xec, 0x0f, 0xcf, 0xd3, 0x46, |
2112 | 0x37, 0x7c, 0xd4, 0xa5, 0x6e, 0xd2, 0xfa, 0xd1, 0xe4, 0xed, 0x8e, 0x2e, | 2121 | 0xde, 0xe6, 0x56, 0xb5, 0x23, 0x5c, 0xdc, 0xaf, 0x5c, 0x2e, 0x63, 0x95, |
2113 | 0xeb, 0xab, 0x2e, 0x65, 0xf4, 0xd5, 0x6c, 0x55, 0x5f, 0x19, 0x3e, 0x7a, | 2122 | 0x4f, 0x99, 0xea, 0x69, 0xf9, 0x7a, 0xa6, 0x6a, 0x64, 0xeb, 0x74, 0x35, |
2114 | 0xb8, 0x24, 0x11, 0xaf, 0xb4, 0x90, 0xf1, 0x77, 0x69, 0x1e, 0x6a, 0xf3, | 2123 | 0xd2, 0x2d, 0x71, 0xa3, 0x4b, 0x57, 0xe9, 0x13, 0x13, 0xcd, 0xac, 0xe9, |
2115 | 0xb6, 0x4a, 0xe4, 0x01, 0xd5, 0xde, 0x20, 0x19, 0xfb, 0x0c, 0xfa, 0x3a, | 2124 | 0x13, 0xea, 0x45, 0x25, 0xef, 0x9b, 0xdb, 0x26, 0xee, 0xc3, 0xb2, 0x38, |
2116 | 0x3a, 0x8d, 0xbe, 0xae, 0x95, 0xac, 0xb6, 0xcf, 0x2e, 0x8e, 0xef, 0x27, | 2125 | 0xe1, 0x7f, 0x7a, 0x3b, 0x73, 0x35, 0x26, 0x82, 0x37, 0xa3, 0x1f, 0x9b, |
2117 | 0x56, 0xe1, 0x3b, 0x5f, 0xbc, 0x5b, 0xe3, 0xfc, 0xfe, 0x32, 0xf7, 0x59, | 2126 | 0xae, 0xa4, 0x3e, 0x1c, 0x51, 0x8d, 0xb8, 0x6f, 0xd6, 0xf4, 0x07, 0x9e, |
2118 | 0x5a, 0x64, 0xb2, 0x1c, 0xe2, 0x9c, 0xe7, 0x59, 0x99, 0x8b, 0xd1, 0x29, | 2127 | 0xc2, 0xb3, 0xf1, 0x13, 0x3e, 0x07, 0x3f, 0xe1, 0xb3, 0xd0, 0x75, 0xe7, |
2119 | 0x91, 0x87, 0x3b, 0x78, 0xce, 0x4a, 0x65, 0xfd, 0xf5, 0x3a, 0x87, 0xe5, | 2128 | 0xe1, 0x27, 0x3c, 0x01, 0x3f, 0xe1, 0x71, 0xf8, 0x09, 0x8f, 0x41, 0x4f, |
2120 | 0xc4, 0x80, 0x24, 0xb2, 0x03, 0xa4, 0xd5, 0xfb, 0x64, 0x56, 0xaf, 0x45, | 2129 | 0xd6, 0xfb, 0x07, 0xe3, 0xcb, 0xfc, 0x83, 0x50, 0xf3, 0x3f, 0xe3, 0x81, |
2121 | 0x87, 0x34, 0x3c, 0x4c, 0x1b, 0x25, 0xdc, 0xcf, 0xeb, 0xba, 0xcc, 0x7e, | 2130 | 0x4f, 0xd4, 0xf9, 0x06, 0x87, 0x8c, 0xbe, 0x82, 0xdf, 0x6f, 0xf8, 0xa8, |
2122 | 0x23, 0x35, 0x66, 0xea, 0x89, 0x1c, 0xd4, 0xeb, 0x75, 0x5c, 0xe7, 0x19, | 2131 | 0x43, 0xdd, 0xa4, 0xf5, 0xa3, 0xc9, 0xdb, 0x1d, 0x5e, 0xd2, 0x57, 0x1d, |
2123 | 0xde, 0x34, 0xcf, 0xb8, 0x3c, 0xbf, 0x47, 0xc5, 0x98, 0xfc, 0x3f, 0x67, | 2132 | 0xca, 0xe8, 0xab, 0x99, 0x9a, 0xbe, 0x32, 0x7c, 0xf4, 0xf0, 0xa4, 0xc4, |
2124 | 0xfd, 0x7e, 0xe1, 0x32, 0x63, 0xcf, 0x6c, 0xb2, 0x76, 0x8c, 0x89, 0x53, | 2133 | 0xfc, 0xc9, 0xf9, 0x5c, 0xb0, 0x57, 0xf3, 0x50, 0xab, 0xbf, 0x53, 0x62, |
2125 | 0xd5, 0xb7, 0x61, 0xd8, 0x4f, 0xed, 0x37, 0x14, 0xb7, 0x38, 0x93, 0xa5, | 2134 | 0x0f, 0xa8, 0xb6, 0x06, 0xc9, 0xd9, 0x67, 0xd0, 0xd7, 0x89, 0x4f, 0xa3, |
2126 | 0xad, 0x4e, 0xbe, 0xc4, 0xbd, 0x6c, 0xfb, 0xf7, 0x2e, 0xdc, 0x3d, 0xce, | 2135 | 0xaf, 0xeb, 0x24, 0xaf, 0xed, 0xb3, 0xcb, 0xe3, 0xfb, 0xb1, 0x15, 0xf8, |
2127 | 0x01, 0x6f, 0x0b, 0xca, 0x18, 0xb3, 0x64, 0xcc, 0xe6, 0x97, 0x2e, 0x63, | 2136 | 0x2e, 0x96, 0x27, 0x34, 0xce, 0xef, 0xaf, 0x70, 0x9f, 0xa5, 0x45, 0xc6, |
2128 | 0x8c, 0x36, 0xe3, 0x71, 0x6c, 0x96, 0x6d, 0x71, 0xa6, 0x4a, 0xdd, 0xf0, | 2137 | 0x2b, 0x11, 0xce, 0x79, 0x9e, 0x95, 0xb9, 0x18, 0xed, 0x12, 0x7b, 0x78, |
2129 | 0xcd, 0x79, 0xae, 0x8a, 0xef, 0x77, 0x72, 0xed, 0xa0, 0x83, 0x5d, 0x7d, | 2138 | 0x1b, 0xcf, 0x59, 0xa9, 0x7c, 0xb0, 0x5e, 0xe7, 0xb0, 0x9c, 0xea, 0x93, |
2130 | 0x66, 0x77, 0x42, 0xae, 0xb0, 0x31, 0x68, 0xea, 0xe1, 0x9f, 0x5f, 0xb1, | 2139 | 0x64, 0xbe, 0x8f, 0xb4, 0x7a, 0x9f, 0xcc, 0xe8, 0xb5, 0xd8, 0x26, 0x0d, |
2131 | 0x77, 0x7b, 0x08, 0x7a, 0xec, 0x16, 0xc8, 0x23, 0xea, 0xe1, 0x43, 0x72, | 2140 | 0x0f, 0xd3, 0x46, 0x89, 0xf6, 0xf3, 0xde, 0x7f, 0xa5, 0xfd, 0xe6, 0x6a, |
2132 | 0xb5, 0xa5, 0xe7, 0x95, 0x7a, 0xf8, 0xbc, 0x30, 0x4e, 0xdc, 0x8f, 0x77, | 2141 | 0xdc, 0xd4, 0x13, 0x39, 0xa2, 0xd7, 0x6b, 0x5a, 0xe7, 0x19, 0xde, 0x34, |
2133 | 0xb9, 0x20, 0x06, 0x7a, 0x38, 0x5c, 0xe3, 0xab, 0xd1, 0xef, 0x6b, 0x1a, | 2142 | 0xc7, 0xb8, 0x3c, 0xbf, 0x6f, 0xc5, 0x98, 0xfc, 0xbf, 0x66, 0xfd, 0x7e, |
2134 | 0x32, 0xfb, 0x61, 0x2b, 0xfd, 0x3e, 0xc8, 0x81, 0x78, 0xe8, 0xe7, 0x35, | 2143 | 0xf9, 0x4a, 0x63, 0xcf, 0x6c, 0xb6, 0x76, 0x8c, 0x89, 0x53, 0xad, 0x6d, |
2135 | 0x2e, 0xef, 0xd7, 0xee, 0xb1, 0x6d, 0xa7, 0xfc, 0xfb, 0x89, 0xa3, 0xe4, | 2144 | 0xc3, 0xb0, 0x9f, 0xfa, 0x6f, 0x32, 0xee, 0x70, 0xc6, 0x27, 0x77, 0x3a, |
2136 | 0x21, 0xe9, 0x81, 0x2e, 0x63, 0x0e, 0xc8, 0x6f, 0x69, 0x9c, 0x89, 0x22, | 2145 | 0xc5, 0x49, 0xee, 0x65, 0xdb, 0xbf, 0xd1, 0xe1, 0xed, 0x77, 0x0e, 0xfb, |
2137 | 0xed, 0x6d, 0xd2, 0x30, 0x5a, 0x39, 0x9f, 0x0c, 0x73, 0x38, 0xf2, 0xb6, | 2146 | 0x3b, 0x50, 0xc6, 0x98, 0x25, 0x63, 0x36, 0xf7, 0x5f, 0xc9, 0x18, 0x6d, |
2138 | 0xed, 0x84, 0xdd, 0x93, 0xcf, 0xcb, 0xdc, 0x65, 0xd4, 0x83, 0x23, 0x91, | 2147 | 0xce, 0xe7, 0xd8, 0x2c, 0xdb, 0xe1, 0x4c, 0x4c, 0x76, 0xc2, 0x37, 0xe7, |
2139 | 0xf5, 0xfc, 0x7e, 0x22, 0xda, 0xf6, 0x18, 0xbd, 0x28, 0x61, 0x5f, 0x7c, | 2148 | 0xb9, 0x2a, 0xbe, 0x1f, 0xe2, 0xda, 0x41, 0x07, 0x7b, 0xfa, 0xcc, 0xee, |
2140 | 0x6e, 0xa8, 0xe9, 0x9b, 0x76, 0x14, 0xef, 0xab, 0xcf, 0x91, 0x3d, 0xa3, | 2149 | 0x98, 0x5c, 0x65, 0x63, 0xd0, 0xd4, 0xc3, 0x3f, 0xbd, 0x6c, 0xef, 0xf6, |
2141 | 0xf7, 0x19, 0xcd, 0xf7, 0x12, 0x42, 0x3e, 0x21, 0xef, 0x24, 0xf5, 0x59, | 2150 | 0x28, 0xf4, 0xd8, 0x2d, 0x90, 0x47, 0xd4, 0xc3, 0x47, 0xe5, 0x6d, 0x96, |
2142 | 0x27, 0xef, 0x61, 0xda, 0x3d, 0xdc, 0x83, 0x75, 0x17, 0x26, 0xfd, 0x4f, | 2151 | 0x9e, 0x97, 0xeb, 0xe1, 0x4b, 0xc2, 0x38, 0x71, 0x2f, 0xde, 0x15, 0xc2, |
2143 | 0xe8, 0x6f, 0xfc, 0xcd, 0x88, 0x38, 0x79, 0xff, 0x36, 0x9d, 0x7b, 0x92, | 2152 | 0x38, 0xe8, 0xe1, 0x58, 0x9d, 0xaf, 0x46, 0xbf, 0xaf, 0x29, 0x63, 0xf6, |
2144 | 0xd7, 0xb1, 0xe6, 0x1c, 0xee, 0x55, 0x1f, 0xb5, 0xeb, 0x61, 0xfe, 0x4d, | 2153 | 0xc3, 0x96, 0xfb, 0x7d, 0x90, 0x03, 0x89, 0xc8, 0xcf, 0x6b, 0x5c, 0xda, |
2145 | 0x0b, 0x96, 0x65, 0x01, 0x1b, 0x75, 0x08, 0x65, 0x6f, 0x5c, 0xba, 0x8e, | 2154 | 0xaf, 0xdd, 0x6f, 0xdb, 0x4e, 0x04, 0x7f, 0x44, 0x1c, 0xa5, 0x8e, 0xca, |
2146 | 0x7e, 0x58, 0xf3, 0xc2, 0x66, 0xf8, 0x02, 0xc3, 0x47, 0xa1, 0xab, 0x8f, | 2155 | 0x2f, 0x42, 0xa7, 0x31, 0x07, 0xe4, 0x2f, 0x34, 0xce, 0x44, 0x91, 0xf6, |
2147 | 0x26, 0x64, 0xe7, 0x51, 0xad, 0x1b, 0xd3, 0x6b, 0x63, 0x05, 0x7d, 0x6e, | 2156 | 0x36, 0x6b, 0x18, 0xad, 0x9c, 0x4f, 0x45, 0x39, 0x1c, 0x45, 0xdb, 0x76, |
2148 | 0xd4, 0x79, 0x8f, 0x3e, 0xc7, 0xf6, 0xd6, 0xa3, 0x11, 0x39, 0x1c, 0xef, | 2157 | 0xcc, 0xee, 0xc9, 0x17, 0xe5, 0xeb, 0x8c, 0x73, 0xa6, 0x06, 0x63, 0xeb, |
2149 | 0x73, 0x7b, 0x9c, 0xf7, 0x5a, 0x5d, 0x18, 0xc6, 0xb0, 0x5b, 0xd0, 0xfe, | 2158 | 0xf9, 0x3d, 0x46, 0xb4, 0xfd, 0x45, 0xed, 0xb7, 0x67, 0x25, 0xea, 0x8b, |
2150 | 0xf5, 0xe2, 0xd8, 0x61, 0xfc, 0x3a, 0x22, 0x33, 0x7b, 0x3b, 0x01, 0xdb, | 2159 | 0xcf, 0x0d, 0x75, 0x7d, 0xd3, 0x8e, 0xe2, 0x7d, 0xe5, 0x39, 0xb2, 0xa7, |
2151 | 0x5f, 0x5d, 0x66, 0xce, 0x20, 0x63, 0xad, 0xf4, 0xb7, 0xe7, 0xa3, 0x09, | 2160 | 0xf5, 0x3e, 0xa3, 0xf9, 0x5e, 0x42, 0xc4, 0x27, 0xe4, 0x9d, 0x94, 0x3e, |
2152 | 0xca, 0xb2, 0x2e, 0xc0, 0x32, 0x72, 0x94, 0xfa, 0xcc, 0xd3, 0x3c, 0x0e, | 2161 | 0xeb, 0xe4, 0x3f, 0x4c, 0xbb, 0x87, 0x7b, 0xb0, 0xde, 0xfc, 0x78, 0xf0, |
2153 | 0x18, 0xdc, 0x06, 0xed, 0x87, 0x90, 0x2f, 0xdf, 0x22, 0xde, 0x03, 0x90, | 2162 | 0x11, 0xfd, 0xcd, 0xc0, 0x69, 0x11, 0xa7, 0x18, 0xdc, 0xa6, 0x73, 0x4f, |
2154 | 0x71, 0x47, 0x63, 0xd2, 0x73, 0xb4, 0x45, 0xb6, 0x1d, 0xa5, 0x1f, 0x52, | 2163 | 0x8a, 0x3a, 0xd6, 0x5c, 0xc0, 0xbd, 0xe6, 0xa3, 0x76, 0x3c, 0xcc, 0xbf, |
2155 | 0xeb, 0x97, 0xd2, 0x2e, 0x7d, 0x04, 0x73, 0x7c, 0xb7, 0x96, 0x93, 0xdc, | 2164 | 0xc3, 0xc1, 0xb2, 0x3c, 0x60, 0xa3, 0x0e, 0xa1, 0xec, 0x4d, 0x48, 0xc7, |
2156 | 0xd3, 0xdc, 0x4f, 0xde, 0x45, 0xdd, 0x2c, 0x6c, 0xe6, 0xcc, 0x51, 0x57, | 2165 | 0x89, 0x5f, 0xd0, 0xbc, 0xb0, 0x05, 0xbe, 0xc0, 0xc0, 0x09, 0xe8, 0xea, |
2157 | 0xef, 0x91, 0x66, 0x30, 0xe7, 0x6c, 0xd9, 0xc5, 0x38, 0x46, 0xe6, 0xe4, | 2166 | 0x13, 0x49, 0x19, 0x3a, 0xa1, 0x75, 0x63, 0x76, 0x75, 0xac, 0xa0, 0xc7, |
2158 | 0xe9, 0xa7, 0x8c, 0x76, 0x00, 0xc7, 0xef, 0xb5, 0xbc, 0xb3, 0xbe, 0xc3, | 2167 | 0x73, 0x9d, 0x77, 0xe9, 0x73, 0x6c, 0x6f, 0x3d, 0x11, 0x93, 0x63, 0x89, |
2159 | 0xf2, 0xe8, 0xcf, 0xc8, 0x7b, 0x5b, 0x3a, 0x8c, 0xec, 0x7c, 0x4b, 0x07, | 2168 | 0x1e, 0xaf, 0xcb, 0x79, 0xb7, 0xd5, 0x85, 0x51, 0x0c, 0xbb, 0x05, 0xed, |
2160 | 0x73, 0x93, 0x36, 0x7b, 0xbc, 0x37, 0x69, 0x7b, 0xc2, 0xc8, 0xd0, 0xd7, | 2169 | 0x5f, 0x2f, 0x8e, 0x1d, 0xc5, 0xaf, 0x63, 0x32, 0x7d, 0xb0, 0x1d, 0xb0, |
2161 | 0xe2, 0x45, 0x01, 0x8e, 0xc2, 0x7d, 0x29, 0x7d, 0x96, 0x2f, 0x38, 0xe7, | 2170 | 0x75, 0x6e, 0x33, 0x67, 0x90, 0xb1, 0x56, 0xfa, 0x1b, 0xf7, 0x6e, 0x92, |
2162 | 0xeb, 0xf3, 0x2b, 0xfe, 0xa2, 0xfe, 0x3b, 0x21, 0xdc, 0x23, 0xab, 0x7e, | 2171 | 0xb2, 0xac, 0x03, 0xb0, 0x0c, 0x9e, 0xa0, 0x3e, 0xf3, 0x35, 0x8f, 0x03, |
2163 | 0x6f, 0x65, 0x57, 0x85, 0x71, 0xf2, 0xcf, 0x86, 0x7f, 0x97, 0xa4, 0x26, | 2172 | 0x06, 0xaf, 0x41, 0xfb, 0x21, 0xe4, 0xcb, 0xb7, 0x88, 0xff, 0x00, 0x64, |
2164 | 0xef, 0xb0, 0x76, 0x0f, 0x8c, 0xb1, 0xa6, 0xe5, 0xdc, 0xa0, 0xa0, 0xa4, | 2173 | 0xdc, 0x89, 0xb8, 0x74, 0x9d, 0x68, 0x91, 0x5d, 0x27, 0xe8, 0x87, 0xd4, |
2165 | 0xbf, 0x5f, 0xf4, 0x9c, 0x73, 0xbe, 0x70, 0xd6, 0xf9, 0xee, 0xb4, 0x04, | 2174 | 0xfb, 0xa5, 0xb4, 0x4b, 0xe7, 0x30, 0xc7, 0x77, 0x6a, 0x39, 0xc9, 0x3d, |
2166 | 0x51, 0xef, 0x27, 0xce, 0xf7, 0x3d, 0xee, 0x99, 0x7f, 0xdd, 0xf9, 0x5e, | 2175 | 0xcd, 0xdb, 0xc9, 0xbb, 0xa8, 0x9b, 0x87, 0xcd, 0x9c, 0x3b, 0xe1, 0xe9, |
2167 | 0xc1, 0x03, 0x1f, 0xde, 0x87, 0x79, 0xbc, 0xe2, 0xfc, 0x00, 0xeb, 0x7b, | 2176 | 0x3d, 0xd2, 0x1c, 0xe6, 0x9c, 0xaf, 0x78, 0x18, 0xc7, 0xc8, 0x9c, 0x22, |
2168 | 0xb0, 0x98, 0x4e, 0xb9, 0x36, 0x26, 0x7e, 0xb6, 0xf0, 0x8a, 0xf3, 0xb5, | 2177 | 0xfd, 0x94, 0xe1, 0x6d, 0xc0, 0xf1, 0x31, 0xcb, 0x3b, 0x43, 0xdb, 0x2c, |
2169 | 0x6a, 0x3c, 0x69, 0x30, 0xa4, 0x91, 0x43, 0x7c, 0x57, 0xc6, 0xbb, 0xb2, | 2178 | 0x8f, 0xfe, 0x88, 0xbc, 0x77, 0xf3, 0x36, 0x23, 0x3b, 0x7f, 0x76, 0x1b, |
2170 | 0xde, 0xff, 0x71, 0xe6, 0xa6, 0x6d, 0x7e, 0x89, 0xe6, 0xe3, 0x85, 0xe5, | 2179 | 0x73, 0x93, 0xb6, 0xf8, 0xbc, 0x37, 0x69, 0x7b, 0xc2, 0xc8, 0xd0, 0xd7, |
2171 | 0x7d, 0x99, 0x51, 0xbd, 0x57, 0xf1, 0xac, 0x33, 0x37, 0x7f, 0x77, 0x87, | 2180 | 0xe2, 0x45, 0x01, 0x8e, 0xa2, 0x7d, 0x29, 0x7d, 0x96, 0x2f, 0xbc, 0x18, |
2172 | 0xc9, 0x33, 0x3a, 0x8b, 0x77, 0x26, 0xe7, 0x72, 0x76, 0xfe, 0x2c, 0xea, | 2181 | 0xe8, 0xf3, 0x2b, 0xc1, 0x02, 0xf3, 0x08, 0xf5, 0x77, 0x14, 0x6a, 0xdf, |
2173 | 0x3c, 0xe3, 0xcc, 0xea, 0xf8, 0x97, 0xf6, 0xc5, 0x9d, 0x99, 0xf9, 0x67, | 2182 | 0x5b, 0xd9, 0x5b, 0x65, 0x9c, 0xfc, 0x89, 0xe8, 0x6f, 0xa9, 0xd4, 0xe5, |
2174 | 0x9c, 0x79, 0xbd, 0x07, 0x7d, 0xce, 0x79, 0x74, 0x9a, 0x7d, 0x9f, 0x43, | 2183 | 0x1d, 0xd6, 0xef, 0x81, 0x31, 0xd6, 0xb4, 0x94, 0x1b, 0x14, 0x4e, 0xea, |
2175 | 0x9d, 0x05, 0xe7, 0x04, 0xfa, 0x9b, 0x9f, 0xe6, 0x79, 0xdc, 0x6e, 0xd8, | 2184 | 0xef, 0x21, 0x3d, 0xeb, 0x5c, 0x2a, 0x5d, 0x70, 0xbe, 0x39, 0x25, 0xa1, |
2176 | 0x05, 0xfc, 0x7b, 0x3f, 0xfc, 0x1e, 0xc7, 0xb3, 0xce, 0xfc, 0x72, 0xbf, | 2185 | 0xeb, 0x7f, 0xdf, 0xf9, 0xb6, 0xcf, 0x3d, 0xf3, 0x2f, 0x3b, 0xdf, 0x2a, |
2177 | 0x8b, 0xe8, 0x87, 0x75, 0x49, 0x8b, 0x1c, 0xf7, 0x59, 0xf4, 0xbf, 0x76, | 2186 | 0xf9, 0xe0, 0xc3, 0x0b, 0x98, 0xc7, 0x2b, 0xce, 0x77, 0xb0, 0xbe, 0x47, |
2178 | 0xaf, 0x6a, 0x2d, 0x4e, 0x5e, 0x00, 0x4e, 0x2e, 0x58, 0x9c, 0xbc, 0x6a, | 2187 | 0xca, 0xd9, 0xb4, 0x67, 0x63, 0xe2, 0x17, 0x4a, 0xaf, 0x38, 0x5f, 0xaa, |
2179 | 0x71, 0xf2, 0x7c, 0x0d, 0x4e, 0x44, 0xad, 0xc4, 0xc9, 0xab, 0xc0, 0x89, | 2188 | 0xc5, 0x93, 0xfa, 0x23, 0x1a, 0x39, 0xca, 0x77, 0x15, 0xbc, 0xab, 0xe8, |
2180 | 0xa8, 0xfa, 0x38, 0xc1, 0xbb, 0x32, 0xde, 0x69, 0x9c, 0xbc, 0xb4, 0x0a, | 2189 | 0xfd, 0x1f, 0x67, 0x76, 0xca, 0xe6, 0x97, 0x68, 0x3e, 0x9e, 0x5f, 0xda, |
2181 | 0x27, 0x4b, 0xcb, 0x71, 0x79, 0x83, 0x93, 0x17, 0x81, 0x93, 0xaf, 0x5a, | 2190 | 0x97, 0x19, 0xd6, 0x7b, 0x15, 0xcf, 0x38, 0xb3, 0x73, 0x9f, 0xdb, 0x66, |
2182 | 0xd8, 0x2f, 0x58, 0x9c, 0xe0, 0x3e, 0x7f, 0x01, 0x75, 0x5e, 0xaa, 0xc1, | 2191 | 0xf2, 0x8c, 0x2e, 0xe0, 0x9d, 0xc9, 0xb9, 0x9c, 0x99, 0xbb, 0x80, 0x3a, |
2183 | 0xc9, 0x05, 0xe0, 0xe4, 0x25, 0x8b, 0x93, 0xef, 0x5b, 0x9c, 0x7c, 0x1f, | 2192 | 0x4f, 0x3b, 0x33, 0x3a, 0xfe, 0xc5, 0x76, 0x17, 0x9c, 0xe9, 0xb9, 0xa7, |
2184 | 0x75, 0x96, 0x80, 0x93, 0xf3, 0x75, 0x70, 0xf2, 0x22, 0x70, 0x12, 0xf6, | 2193 | 0x9d, 0x39, 0xbd, 0x07, 0x7d, 0xd1, 0x79, 0x74, 0x8a, 0x7d, 0x5f, 0x44, |
2185 | 0x7b, 0x1e, 0xfd, 0x7c, 0xbf, 0x06, 0x27, 0x2f, 0xd6, 0xc1, 0x09, 0xf7, | 2194 | 0x9d, 0x79, 0xe7, 0x14, 0xfa, 0x9b, 0x9b, 0xe2, 0x79, 0xdc, 0x4e, 0xd8, |
2186 | 0x62, 0xc3, 0x9c, 0xee, 0x99, 0xd7, 0xc9, 0xe9, 0x96, 0x3b, 0x5f, 0x3f, | 2195 | 0x05, 0xfc, 0x1b, 0x45, 0xfc, 0x1e, 0xc7, 0x33, 0xce, 0xdc, 0x52, 0xbf, |
2187 | 0xa7, 0x9b, 0x75, 0x66, 0xa4, 0xfa, 0x37, 0x25, 0xee, 0xb6, 0x39, 0x6a, | 2196 | 0x0b, 0xe8, 0x87, 0x75, 0x49, 0x8b, 0x1c, 0xf7, 0x19, 0xf4, 0xbf, 0x7a, |
2188 | 0x26, 0x17, 0xb0, 0xfa, 0xcd, 0xa6, 0x6e, 0xf0, 0x79, 0x3e, 0xe7, 0x8a, | 2197 | 0xaf, 0x6a, 0x35, 0x4e, 0x9e, 0x07, 0x4e, 0x5e, 0xb4, 0x38, 0x79, 0xd5, |
2189 | 0xc9, 0x29, 0x8d, 0xee, 0xf8, 0x10, 0x78, 0x6d, 0x97, 0x1c, 0x38, 0xd6, | 2198 | 0xe2, 0xe4, 0xb9, 0x3a, 0x9c, 0x88, 0x5a, 0x8e, 0x93, 0x57, 0x81, 0x13, |
2190 | 0x78, 0x38, 0x6b, 0xcb, 0xbc, 0x1d, 0xdd, 0x39, 0xa5, 0xf8, 0x2e, 0xcc, | 2199 | 0x51, 0x6b, 0xe3, 0x04, 0xef, 0x2a, 0x78, 0xa7, 0x71, 0xf2, 0xd2, 0x0a, |
2191 | 0x49, 0xa0, 0x5f, 0xd2, 0xc0, 0x6f, 0x0b, 0xf6, 0xa6, 0xa5, 0x76, 0x4f, | 2200 | 0x9c, 0x2c, 0x2e, 0xc5, 0xe5, 0x0d, 0x4e, 0x5e, 0x00, 0x4e, 0x7e, 0x60, |
2192 | 0xba, 0xc0, 0x6f, 0x34, 0x61, 0xec, 0x25, 0xfe, 0xfd, 0x8b, 0x24, 0xf3, | 2201 | 0x61, 0x7f, 0xd1, 0xe2, 0x04, 0xf7, 0xb9, 0x17, 0x51, 0xe7, 0xa5, 0x3a, |
2193 | 0xac, 0xf2, 0x1a, 0xde, 0x14, 0xf4, 0xc7, 0xa0, 0xce, 0xad, 0xca, 0x14, | 2202 | 0x9c, 0xbc, 0x08, 0x9c, 0xbc, 0x64, 0x71, 0xf2, 0x6d, 0x8b, 0x93, 0x6f, |
2194 | 0x68, 0x73, 0x27, 0x99, 0xa3, 0x06, 0x5b, 0x79, 0xc8, 0x9e, 0x09, 0xf3, | 2203 | 0xa3, 0xce, 0x22, 0x70, 0x72, 0x69, 0x0d, 0x9c, 0xbc, 0x00, 0x9c, 0x44, |
2195 | 0xf5, 0x39, 0x95, 0x2a, 0xff, 0xd4, 0x9e, 0x87, 0x26, 0xdf, 0x55, 0xe9, | 2204 | 0xfd, 0x5e, 0x42, 0x3f, 0xdf, 0xae, 0xc3, 0xc9, 0x0b, 0x6b, 0xe0, 0x84, |
2196 | 0xe6, 0xe0, 0xf2, 0x77, 0x02, 0x4f, 0xca, 0xd3, 0x3a, 0x56, 0xdc, 0x8c, | 2205 | 0x7b, 0xb1, 0x51, 0x4e, 0xf7, 0x99, 0xd7, 0xc9, 0xe9, 0x5e, 0x7c, 0x03, |
2197 | 0xf5, 0x09, 0x82, 0xc7, 0x7c, 0x13, 0xa3, 0x5d, 0xd4, 0x31, 0x5a, 0x81, | 2206 | 0x39, 0xdd, 0xac, 0x73, 0x46, 0x6a, 0x7f, 0xbb, 0x62, 0xc2, 0xe6, 0xa8, |
2198 | 0x37, 0x3e, 0x69, 0xe3, 0xb4, 0x3d, 0x83, 0x2f, 0x2d, 0xc7, 0x68, 0x6b, | 2207 | 0x99, 0x5c, 0xc0, 0xda, 0x37, 0x9b, 0x3a, 0xc1, 0xe7, 0xc5, 0x02, 0xbc, |
2199 | 0xf3, 0x59, 0xcc, 0xfe, 0x7a, 0xa6, 0xf4, 0x88, 0xce, 0xd1, 0x19, 0xe1, | 2208 | 0x11, 0x9d, 0x53, 0xea, 0xee, 0x19, 0x03, 0xaf, 0xbd, 0x5b, 0x0e, 0x9f, |
2200 | 0xf7, 0x37, 0x20, 0x23, 0x26, 0x66, 0xe6, 0x65, 0xf2, 0x41, 0x3e, 0x53, | 2209 | 0x6c, 0x3c, 0x96, 0xb7, 0x65, 0xfe, 0x9e, 0xce, 0x82, 0x52, 0x7c, 0x17, |
2201 | 0xbf, 0x45, 0xa0, 0xc3, 0x28, 0xc3, 0x73, 0x92, 0x19, 0x64, 0x99, 0x69, | 2210 | 0xe5, 0x24, 0xd0, 0x2f, 0x69, 0xe0, 0xb7, 0x0a, 0xbb, 0xb3, 0x52, 0xbf, |
2202 | 0x33, 0xa2, 0xfd, 0xe5, 0x93, 0x32, 0xbc, 0x3c, 0x3e, 0xf1, 0x7b, 0x57, | 2211 | 0x27, 0x3d, 0xc5, 0x6f, 0x34, 0x71, 0x7f, 0x8c, 0x7f, 0x67, 0x23, 0xc5, |
2203 | 0xcd, 0x77, 0xab, 0x69, 0xf3, 0xa4, 0x9d, 0x4c, 0x85, 0xef, 0xc3, 0x3d, | 2212 | 0x3c, 0xab, 0xa2, 0x86, 0x37, 0x0d, 0xfd, 0xd1, 0xaf, 0x73, 0xab, 0xf8, |
2204 | 0xf2, 0xbb, 0xec, 0xb7, 0xb3, 0xf8, 0xbe, 0xf6, 0x5b, 0xad, 0x5a, 0x74, | 2213 | 0x37, 0x82, 0x62, 0xf0, 0xfb, 0x47, 0xfb, 0x68, 0x2b, 0x67, 0xec, 0x99, |
2205 | 0xe0, 0x37, 0xbf, 0x87, 0x36, 0xe5, 0x8c, 0xa0, 0xcd, 0x82, 0xdb, 0x32, | 2214 | 0xb0, 0x40, 0x9f, 0x53, 0xa9, 0xf1, 0x4f, 0xfd, 0x79, 0x68, 0xf2, 0x5d, |
2206 | 0xaa, 0x86, 0x6e, 0x18, 0xe5, 0xb9, 0xb9, 0xd9, 0x35, 0xdf, 0xba, 0xae, | 2215 | 0x8d, 0x6e, 0x8e, 0x2c, 0x7d, 0x77, 0xf0, 0xb4, 0x3c, 0xa5, 0x63, 0xc5, |
2207 | 0xea, 0xc5, 0xbc, 0x5e, 0x53, 0xe6, 0x67, 0xdd, 0x05, 0x5a, 0xd4, 0xb4, | 2216 | 0xcd, 0xfa, 0xef, 0x2b, 0x9c, 0x09, 0x4c, 0x8c, 0x76, 0x41, 0xc7, 0x68, |
2208 | 0xa5, 0xe9, 0xff, 0xc0, 0xb2, 0xbe, 0xa4, 0x9e, 0x35, 0xdf, 0x9e, 0x31, | 2217 | 0x05, 0xde, 0xf8, 0xb8, 0x8d, 0xd3, 0x76, 0xf5, 0xbf, 0xb4, 0x14, 0xa3, |
2209 | 0xfa, 0x32, 0x95, 0x18, 0xc1, 0xf8, 0xfa, 0x6f, 0x2a, 0xd8, 0x73, 0xbd, | 2218 | 0xad, 0xcf, 0x67, 0x31, 0xfb, 0xeb, 0xb9, 0xc9, 0x39, 0x9d, 0xa3, 0x33, |
2210 | 0xd9, 0xf9, 0xdb, 0xb5, 0xae, 0x9f, 0xf2, 0xd3, 0xc9, 0xa8, 0xd4, 0xa9, | 2219 | 0xc8, 0xef, 0x6f, 0x40, 0x46, 0x8c, 0x4d, 0x57, 0x64, 0xfc, 0x41, 0x3e, |
2211 | 0x5b, 0xaa, 0xa9, 0xab, 0xe7, 0xed, 0xca, 0x7f, 0xc5, 0xda, 0x7c, 0xbe, | 2220 | 0x53, 0xbf, 0xc5, 0xa0, 0xc3, 0x28, 0xc3, 0x0b, 0x92, 0xeb, 0x67, 0x99, |
2212 | 0x58, 0x96, 0xe1, 0xe9, 0xbf, 0x84, 0xff, 0x98, 0x90, 0xdf, 0x2e, 0x96, | 2221 | 0x69, 0x33, 0xa8, 0xfd, 0xe5, 0xd3, 0x32, 0xb0, 0x34, 0x3e, 0xf1, 0xfb, |
2213 | 0x40, 0xaf, 0xb9, 0xcd, 0xf6, 0x5b, 0x4d, 0x19, 0xc0, 0xcd, 0x6f, 0xaf, | 2222 | 0x89, 0xba, 0xef, 0x60, 0xd3, 0xe6, 0xc9, 0x3a, 0xb9, 0x2a, 0xdf, 0x47, |
2214 | 0xe8, 0x7c, 0xe2, 0xc8, 0x17, 0x40, 0x17, 0x9f, 0x2b, 0x71, 0x0c, 0xc0, | 2223 | 0x7b, 0xe4, 0x9f, 0xb0, 0xdf, 0x0a, 0xe4, 0xfb, 0xfa, 0x6f, 0xbf, 0x6a, |
2215 | 0x12, 0x81, 0x6d, 0x0f, 0x3b, 0x61, 0xa6, 0xa4, 0x73, 0xe7, 0xae, 0x2b, | 2224 | 0xd1, 0x81, 0xdf, 0xfc, 0xbe, 0xda, 0x84, 0x33, 0x88, 0x36, 0xf3, 0x5e, |
2216 | 0x97, 0x74, 0xcc, 0x62, 0x67, 0xb9, 0x53, 0x76, 0x95, 0x5b, 0x64, 0x37, | 2225 | 0xcb, 0xb0, 0xca, 0xdc, 0x38, 0xcc, 0x73, 0x73, 0x33, 0xab, 0xbe, 0x9d, |
2217 | 0xf4, 0xc2, 0xee, 0xb2, 0x87, 0x2b, 0x26, 0xef, 0x2e, 0x9b, 0x75, 0xfa, | 2226 | 0x5d, 0xd3, 0x8b, 0x45, 0xbd, 0xa6, 0xcc, 0xcf, 0x2a, 0x80, 0x16, 0x35, |
2218 | 0x58, 0x99, 0xeb, 0xbd, 0x43, 0x66, 0x8f, 0xad, 0xfe, 0x3e, 0xe7, 0x42, | 2227 | 0x6d, 0x69, 0xfa, 0x3f, 0xbc, 0xa4, 0x2f, 0xa9, 0x67, 0xcd, 0xb7, 0x67, |
2219 | 0x2e, 0xfc, 0x3b, 0x4b, 0x4a, 0x31, 0xbf, 0x8c, 0xb4, 0x84, 0xab, 0x98, | 2228 | 0x8c, 0xbe, 0x4c, 0x27, 0x07, 0x31, 0xbe, 0xfe, 0x1b, 0x0d, 0xf6, 0x5c, |
2220 | 0x3a, 0xbc, 0xa0, 0xf1, 0xc0, 0x0c, 0xd7, 0x54, 0x69, 0x49, 0x98, 0xa7, | 2229 | 0x6f, 0x7e, 0xee, 0x2e, 0xad, 0xeb, 0x27, 0x82, 0x6c, 0xca, 0x95, 0x35, |
2221 | 0xcf, 0xbf, 0xad, 0x34, 0x73, 0x39, 0xcf, 0x4d, 0xf3, 0x5b, 0x5e, 0x3b, | 2230 | 0xea, 0x4e, 0xd6, 0xd5, 0xd5, 0xf3, 0xf6, 0xe4, 0xb7, 0xb0, 0x36, 0xbf, |
2222 | 0x2b, 0x61, 0xde, 0x78, 0xbd, 0x9c, 0x71, 0xd8, 0xf9, 0x3b, 0xc2, 0x1c, | 2231 | 0x51, 0xae, 0xc8, 0xc0, 0xd4, 0x5f, 0xc1, 0x7f, 0x4c, 0xca, 0x6f, 0x96, |
2223 | 0xbf, 0x18, 0x73, 0xc6, 0xa5, 0xeb, 0x54, 0x0b, 0xee, 0xa7, 0x2f, 0xd7, | 2232 | 0x1f, 0x01, 0xbd, 0x16, 0xb6, 0xd8, 0x6f, 0x35, 0xe5, 0x00, 0x37, 0xbf, |
2224 | 0x67, 0x9b, 0x4f, 0x89, 0x2d, 0xd3, 0xf9, 0xe4, 0x78, 0x5e, 0xfd, 0x7d, | 2233 | 0xbd, 0xa2, 0xf3, 0x89, 0x63, 0xbf, 0x0d, 0xba, 0xf8, 0xcc, 0x23, 0x1c, |
2225 | 0xb5, 0x90, 0x1f, 0xaa, 0x7f, 0xa7, 0x40, 0xe4, 0xff, 0x02, 0xfb, 0x2e, | 2234 | 0x03, 0xb0, 0xc4, 0x60, 0xdb, 0xc3, 0x4e, 0x98, 0x7e, 0x44, 0xe7, 0xce, |
2226 | 0x88, 0x71, 0xec, 0x6e, 0x00, 0x00, 0x00 }; | 2235 | 0x5d, 0x5f, 0x79, 0x44, 0xc7, 0x2c, 0x86, 0x2a, 0xed, 0xb2, 0xb7, 0xd2, |
2236 | 0x22, 0xfb, 0xa0, 0x17, 0xf6, 0x55, 0x7c, 0x5c, 0x71, 0x79, 0x67, 0xc5, | ||
2237 | 0xac, 0xd3, 0x07, 0x2b, 0x5c, 0xef, 0x3d, 0x32, 0x73, 0x72, 0xe5, 0xf7, | ||
2238 | 0x3e, 0xe7, 0x0b, 0xd1, 0xdf, 0x73, 0x52, 0x8a, 0xf9, 0x65, 0xa4, 0x25, | ||
2239 | 0x5c, 0xe5, 0xf4, 0xb1, 0x79, 0x8d, 0x07, 0x66, 0xb8, 0xa6, 0x27, 0x17, | ||
2240 | 0x85, 0x79, 0xfa, 0xfc, 0x1b, 0x4e, 0x7f, 0xb9, 0x9d, 0xe7, 0xa6, 0xf9, | ||
2241 | 0x2d, 0xaf, 0xa1, 0x6a, 0x94, 0x37, 0xbe, 0x56, 0xce, 0x38, 0xec, 0xfc, | ||
2242 | 0x3d, 0x51, 0x8e, 0x5f, 0x9c, 0x39, 0xe3, 0xd2, 0x71, 0xb6, 0x05, 0xf7, | ||
2243 | 0xef, 0x6e, 0xd7, 0x67, 0x9b, 0xcf, 0x8a, 0x2d, 0xd3, 0xf9, 0xe4, 0x78, | ||
2244 | 0x5e, 0xf9, 0xbd, 0xb6, 0x88, 0x1f, 0x6a, 0x7f, 0xf7, 0x40, 0xe4, 0xff, | ||
2245 | 0x02, 0x06, 0x86, 0xe5, 0x0a, 0xd4, 0x6f, 0x00, 0x00, 0x00 }; | ||
2227 | 2246 | ||
2228 | static const u32 bnx2_CP_b09FwData[(0x0/4) + 1] = { 0x0 }; | 2247 | static const u32 bnx2_CP_b09FwData[(0x0/4) + 1] = { 0x0 }; |
2229 | static const u32 bnx2_CP_b09FwRodata[(0x118/4) + 1] = { | 2248 | static const u32 bnx2_CP_b09FwRodata[(0x118/4) + 1] = { |
2230 | 0x0800061c, 0x0800083c, 0x08000780, 0x080007a8, 0x080007d0, 0x080007f8, | 2249 | 0x0800069c, 0x080008bc, 0x08000800, 0x08000828, 0x08000850, 0x08000878, |
2231 | 0x08000654, 0x08000640, 0x08000864, 0x08000864, 0x08000670, 0x0800068c, | 2250 | 0x080006d4, 0x080006c0, 0x080008e4, 0x080008e4, 0x080006f0, 0x0800070c, |
2232 | 0x0800068c, 0x08000864, 0x080006a4, 0x080006b8, 0x08000864, 0x080006cc, | 2251 | 0x0800070c, 0x080008e4, 0x08000724, 0x08000738, 0x080008e4, 0x0800074c, |
2233 | 0x08000864, 0x08000864, 0x080006e0, 0x08000864, 0x08000864, 0x08000864, | 2252 | 0x080008e4, 0x080008e4, 0x08000760, 0x080008e4, 0x080008e4, 0x080008e4, |
2234 | 0x08000864, 0x08000864, 0x08000864, 0x08000864, 0x08000864, 0x08000864, | 2253 | 0x080008e4, 0x080008e4, 0x080008e4, 0x080008e4, 0x080008e4, 0x080008e4, |
2235 | 0x08000864, 0x080006f4, 0x08000864, 0x08000708, 0x0800071c, 0x08000730, | 2254 | 0x080008e4, 0x08000774, 0x080008e4, 0x08000788, 0x0800079c, 0x080007b0, |
2236 | 0x08000864, 0x08000744, 0x08000758, 0x0800076c, 0x08003200, 0x08003218, | 2255 | 0x080008e4, 0x080007c4, 0x080007d8, 0x080007ec, 0x080032e8, 0x08003300, |
2237 | 0x08003228, 0x08003238, 0x08003250, 0x08003268, 0x08003278, 0x08003288, | 2256 | 0x08003310, 0x08003320, 0x08003338, 0x08003350, 0x08003360, 0x08003370, |
2238 | 0x080032a8, 0x080032b8, 0x080032c8, 0x08003358, 0x08003298, 0x080032d8, | 2257 | 0x08003390, 0x080033a0, 0x080033b0, 0x08003440, 0x08003380, 0x080033c0, |
2239 | 0x080032e8, 0x08003300, 0x08003320, 0x08003358, 0x08003338, 0x08003338, | 2258 | 0x080033d0, 0x080033e8, 0x08003408, 0x08003440, 0x08003420, 0x08003420, |
2240 | 0x080050d4, 0x080050d4, 0x080050d4, 0x080050d4, 0x080050d4, 0x080050fc, | 2259 | 0x080051bc, 0x080051bc, 0x080051bc, 0x080051bc, 0x080051bc, 0x080051e4, |
2241 | 0x080050fc, 0x08005124, 0x08005174, 0x08005144, 0x00000000 }; | 2260 | 0x080051e4, 0x0800520c, 0x0800525c, 0x0800522c, 0x00000000 }; |
2242 | 2261 | ||
2243 | static struct fw_info bnx2_cp_fw_09 = { | 2262 | static struct fw_info bnx2_cp_fw_09 = { |
2263 | /* Firmware version: 3.7.1 */ | ||
2244 | .ver_major = 0x3, | 2264 | .ver_major = 0x3, |
2245 | .ver_minor = 0x4, | 2265 | .ver_minor = 0x7, |
2246 | .ver_fix = 0x3, | 2266 | .ver_fix = 0x1, |
2247 | 2267 | ||
2248 | .start_addr = 0x0800006c, | 2268 | .start_addr = 0x0800006c, |
2249 | 2269 | ||
2250 | .text_addr = 0x08000000, | 2270 | .text_addr = 0x08000000, |
2251 | .text_len = 0x6ee8, | 2271 | .text_len = 0x6fd0, |
2252 | .text_index = 0x0, | 2272 | .text_index = 0x0, |
2253 | .gz_text = bnx2_CP_b09FwText, | 2273 | .gz_text = bnx2_CP_b09FwText, |
2254 | .gz_text_len = sizeof(bnx2_CP_b09FwText), | 2274 | .gz_text_len = sizeof(bnx2_CP_b09FwText), |
2255 | 2275 | ||
2256 | .data_addr = 0x08007020, | 2276 | .data_addr = 0x08007100, |
2257 | .data_len = 0x0, | 2277 | .data_len = 0x0, |
2258 | .data_index = 0x0, | 2278 | .data_index = 0x0, |
2259 | .data = bnx2_CP_b09FwData, | 2279 | .data = bnx2_CP_b09FwData, |
2260 | 2280 | ||
2261 | .sbss_addr = 0x08007024, | 2281 | .sbss_addr = 0x08007104, |
2262 | .sbss_len = 0xa1, | 2282 | .sbss_len = 0xa9, |
2263 | .sbss_index = 0x0, | 2283 | .sbss_index = 0x0, |
2264 | 2284 | ||
2265 | .bss_addr = 0x080070d0, | 2285 | .bss_addr = 0x080071b0, |
2266 | .bss_len = 0x3b0, | 2286 | .bss_len = 0x3b0, |
2267 | .bss_index = 0x0, | 2287 | .bss_index = 0x0, |
2268 | 2288 | ||
2269 | .rodata_addr = 0x08006ee8, | 2289 | .rodata_addr = 0x08006fd0, |
2270 | .rodata_len = 0x118, | 2290 | .rodata_len = 0x118, |
2271 | .rodata_index = 0x0, | 2291 | .rodata_index = 0x0, |
2272 | .rodata = bnx2_CP_b09FwRodata, | 2292 | .rodata = bnx2_CP_b09FwRodata, |
2273 | }; | 2293 | }; |
2274 | 2294 | ||
2275 | static u8 bnx2_RXP_b09FwText[] = { | 2295 | static u8 bnx2_RXP_b09FwText[] = { |
2276 | /* 0x1f, 0x8b, 0x08, 0x00, 0x0e, 0x34, 0xe7, 0x45, 0x00, 0x03, */ | 2296 | 0xec, 0x5c, 0x7d, 0x6c, 0x1c, 0xc7, 0x75, 0x7f, 0x3b, 0xbb, 0xa4, 0x8e, |
2277 | 0xec, 0x5c, | 2297 | 0xd4, 0x91, 0x5c, 0x1e, 0x4f, 0xcc, 0x51, 0xa6, 0xed, 0x5b, 0x71, 0x25, |
2278 | 0x5d, 0x6c, 0x1c, 0xd7, 0x75, 0x3e, 0xf3, 0x43, 0x6a, 0x49, 0xf1, 0x67, | 2298 | 0x9e, 0x4d, 0xc6, 0x59, 0xd1, 0x07, 0x9b, 0x28, 0x0e, 0xc9, 0x66, 0xef, |
2279 | 0xb8, 0x5c, 0xb1, 0x2b, 0x99, 0x96, 0x77, 0xc9, 0x91, 0xc8, 0x58, 0x8a, | 2299 | 0x24, 0xb1, 0x86, 0x5b, 0x53, 0x35, 0x1d, 0x1b, 0x6d, 0xea, 0xb2, 0x47, |
2280 | 0x31, 0xa2, 0x09, 0x5b, 0x48, 0x17, 0xf6, 0x76, 0x76, 0x25, 0xb1, 0xb1, | 2300 | 0xb5, 0x29, 0x8c, 0x06, 0x90, 0xbf, 0x00, 0x17, 0xa8, 0xe4, 0xcb, 0x91, |
2281 | 0x03, 0x53, 0xb6, 0x62, 0x07, 0x45, 0x6a, 0xb0, 0x4b, 0xb9, 0x0e, 0x8c, | 2301 | 0x8a, 0x55, 0xf7, 0xc0, 0xbd, 0xc8, 0x8c, 0x18, 0x20, 0x6e, 0x7d, 0x25, |
2282 | 0x06, 0x90, 0xff, 0x52, 0xbf, 0xb0, 0xde, 0x2c, 0xa9, 0x58, 0x4d, 0x17, | 2302 | 0x29, 0x4a, 0x08, 0x0e, 0x3a, 0xa6, 0x71, 0x1a, 0xfd, 0x61, 0xd7, 0x04, |
2283 | 0x9c, 0xb5, 0x4d, 0x9b, 0x0e, 0x60, 0xb7, 0x0b, 0x92, 0x12, 0xf5, 0xb0, | 2303 | 0x2b, 0x1b, 0x6e, 0x91, 0xd6, 0x72, 0xe3, 0xb6, 0x46, 0x50, 0x04, 0x84, |
2284 | 0xd0, 0xb2, 0xa9, 0xdb, 0xea, 0xc1, 0x8e, 0x09, 0x56, 0xb1, 0x53, 0xa0, | 2304 | 0xec, 0x34, 0x6e, 0xd0, 0x0f, 0xa1, 0x2e, 0x6c, 0x03, 0x96, 0xbd, 0xfd, |
2285 | 0x2d, 0x5c, 0x27, 0x69, 0xfc, 0x10, 0x14, 0xaa, 0xec, 0xc4, 0x42, 0xd1, | 2305 | 0xbd, 0xd9, 0x5d, 0xf2, 0x48, 0x5b, 0x76, 0xd0, 0x3f, 0xfa, 0x4f, 0x77, |
2286 | 0xa2, 0x02, 0x12, 0xd8, 0x29, 0x22, 0x7b, 0xfa, 0x7d, 0x77, 0x66, 0xc8, | 2306 | 0x80, 0xc3, 0xce, 0xcc, 0xbe, 0xf7, 0xe6, 0xcd, 0x9b, 0xf7, 0x39, 0x4b, |
2287 | 0x25, 0x2d, 0xdb, 0x41, 0x1f, 0xfa, 0xd2, 0xbd, 0xc0, 0x62, 0xee, 0xbd, | 2307 | 0xe9, 0xb7, 0xe3, 0xd4, 0x4e, 0x41, 0xeb, 0xc0, 0x2f, 0x7d, 0xf4, 0xb1, |
2288 | 0x73, 0xee, 0xb9, 0xe7, 0x9e, 0xff, 0x73, 0x87, 0xd2, 0x1f, 0x74, 0x48, | 2308 | 0x87, 0x6e, 0xb9, 0xfd, 0x96, 0x5b, 0xd1, 0xdd, 0xaf, 0x2a, 0x3b, 0xd4, |
2289 | 0xbb, 0x84, 0xad, 0x13, 0xbf, 0xd4, 0x89, 0x27, 0x1e, 0xb9, 0x69, 0xf4, | 2309 | 0x70, 0x3e, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8, 0x45, |
2290 | 0xa6, 0x9b, 0xd1, 0xbd, 0xd9, 0x30, 0x4c, 0x23, 0x9a, 0x6f, 0xb6, 0x66, | 2310 | 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8, 0x45, 0x2d, |
2291 | 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, | 2311 | 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8, 0x45, 0x2d, 0x6a, |
2292 | 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, | 2312 | 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8, 0x45, 0x2d, 0x6a, 0x51, |
2293 | 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, | 2313 | 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8, 0x45, 0x2d, 0x6a, 0x51, 0x8b, |
2294 | 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, | 2314 | 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8, 0x45, 0xed, 0xff, 0x7b, 0x53, 0x89, |
2295 | 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, | 2315 | 0x74, 0x7e, 0x76, 0x04, 0x3f, 0x8a, 0x89, 0x5c, 0xfa, 0x01, 0xc7, 0xa4, |
2296 | 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0x6b, 0xb6, 0x66, 0xfb, 0xff, 0xde, | 2316 | 0x98, 0x9a, 0xeb, 0x3f, 0x3e, 0x65, 0x12, 0xd9, 0xf5, 0xa1, 0x74, 0x9e, |
2297 | 0x0c, 0x11, 0x8b, 0xcf, 0xce, 0xf0, 0x27, 0x31, 0x3d, 0x23, 0x0f, 0xb9, | 2317 | 0x3e, 0xf0, 0x4a, 0x49, 0x8d, 0x78, 0xfe, 0xfa, 0xdc, 0xd5, 0x67, 0x9e, |
2298 | 0xb6, 0xc4, 0x8c, 0xcc, 0xd5, 0xa9, 0x49, 0x5b, 0x24, 0x5b, 0xdb, 0x97, | 2318 | 0xbf, 0xdd, 0xb8, 0x52, 0x53, 0x29, 0xa6, 0xe7, 0x66, 0xf6, 0xeb, 0xfb, |
2299 | 0xca, 0xc9, 0x87, 0x7e, 0x31, 0x61, 0x0a, 0xe7, 0xaf, 0xcf, 0x5c, 0xfd, | 2319 | 0x28, 0xd6, 0x0f, 0x9c, 0xa7, 0x07, 0xff, 0xb1, 0x93, 0x3a, 0x43, 0x5a, |
2300 | 0x8b, 0x57, 0x6f, 0x4d, 0x5f, 0xa9, 0x1a, 0x12, 0xb3, 0x32, 0x33, 0x07, | 2320 | 0x44, 0x0b, 0x15, 0xc3, 0x3a, 0x88, 0xe7, 0x72, 0x7d, 0xc8, 0x5a, 0x23, |
2301 | 0xac, 0xbd, 0x12, 0xeb, 0xc7, 0x9a, 0x17, 0x87, 0xfe, 0xa9, 0x4b, 0xba, | 2321 | 0x8d, 0x56, 0x75, 0x7f, 0xc5, 0x72, 0x45, 0x61, 0x3a, 0x54, 0xae, 0xc7, |
2302 | 0x22, 0x5c, 0x22, 0x0b, 0xe5, 0xb4, 0x73, 0x18, 0xcf, 0x33, 0xb5, 0x7d, | 2322 | 0x68, 0x5d, 0xfe, 0x3b, 0x0f, 0xac, 0x69, 0x72, 0xff, 0x82, 0xe2, 0x34, |
2303 | 0xce, 0x9a, 0x98, 0xb2, 0x6a, 0x05, 0x3b, 0x96, 0xca, 0x1a, 0xf1, 0x48, | 2323 | 0x3c, 0xef, 0x8c, 0xe5, 0x79, 0x2f, 0xe1, 0xf7, 0x33, 0x0b, 0x63, 0xf7, |
2304 | 0xa9, 0x16, 0x93, 0x8b, 0xea, 0xdf, 0x79, 0x60, 0x4f, 0x9b, 0xfd, 0xf3, | 2324 | 0x43, 0xcf, 0xd6, 0x54, 0x12, 0xe6, 0x1f, 0x2b, 0xce, 0x62, 0x2b, 0x95, |
2305 | 0x9a, 0x5b, 0xf7, 0xfd, 0xd3, 0x8e, 0xef, 0xbf, 0x8e, 0xdf, 0x7b, 0x0e, | 2325 | 0xe7, 0x89, 0xa6, 0xdd, 0x18, 0x9d, 0x74, 0x4b, 0x4a, 0xa1, 0x51, 0x51, |
2306 | 0xc6, 0xde, 0x47, 0x7e, 0xd6, 0x34, 0x44, 0xb7, 0xff, 0x4c, 0x73, 0x17, | 2326 | 0x0e, 0x9c, 0x9d, 0x55, 0x0e, 0x9e, 0x3d, 0xa9, 0x1c, 0x3a, 0x5b, 0x55, |
2307 | 0x5b, 0xa5, 0x34, 0x2f, 0x32, 0xed, 0xc5, 0xe4, 0x94, 0x57, 0xd4, 0xf2, | 2327 | 0x9c, 0xb3, 0x54, 0x12, 0xfb, 0xe3, 0x64, 0xeb, 0xe7, 0x94, 0x7c, 0xa3, |
2308 | 0xf5, 0xb2, 0x76, 0x68, 0x79, 0x56, 0x3b, 0xbc, 0x7c, 0x4a, 0x3b, 0xb2, | 2328 | 0x57, 0x71, 0xe6, 0xaf, 0x7a, 0x8e, 0x65, 0xe8, 0xbf, 0x4e, 0x9a, 0xcd, |
2309 | 0x5c, 0xd1, 0xdc, 0x65, 0x29, 0xea, 0x07, 0x3a, 0x24, 0x6b, 0x9d, 0xd5, | 2329 | 0xeb, 0x39, 0x15, 0x0f, 0x63, 0x8d, 0xec, 0xa4, 0xe7, 0x89, 0x9c, 0xf7, |
2310 | 0x72, 0xf5, 0x3e, 0xcd, 0x9d, 0xbf, 0xea, 0xbb, 0x4e, 0xda, 0xfa, 0x3d, | 2330 | 0xb8, 0x93, 0x35, 0x75, 0xa1, 0xc4, 0xa8, 0xdc, 0x68, 0x07, 0x5d, 0x4d, |
2311 | 0x31, 0xb3, 0xdc, 0xcf, 0x2d, 0xfb, 0x18, 0x9b, 0x92, 0x4d, 0xf8, 0xbe, | 2331 | 0xc9, 0xbb, 0xde, 0x0b, 0x8e, 0xb5, 0x0c, 0x3a, 0x75, 0xe0, 0x93, 0x2e, |
2312 | 0x9e, 0xf1, 0x9f, 0x74, 0x47, 0x6d, 0x4b, 0xd7, 0x62, 0x52, 0xaa, 0xb7, | 2332 | 0x72, 0xcc, 0x4f, 0xc8, 0x63, 0x49, 0xc9, 0x0f, 0x86, 0xfc, 0x50, 0x9a, |
2313 | 0x03, 0x6f, 0x87, 0x96, 0x9b, 0x37, 0xb5, 0xbc, 0xe7, 0xbf, 0xe6, 0x3a, | 2333 | 0xf9, 0x2d, 0x2e, 0x09, 0xf0, 0xb5, 0x93, 0x8a, 0x35, 0x9d, 0x26, 0x97, |
2314 | 0xd2, 0x6f, 0x88, 0xef, 0xcf, 0x38, 0x7b, 0x92, 0xc7, 0xe5, 0x0c, 0xf0, | 2334 | 0xb6, 0xc3, 0xaf, 0x7b, 0xcf, 0x0f, 0xea, 0xb4, 0xd2, 0x30, 0x4a, 0x25, |
2315 | 0xd6, 0x80, 0x4f, 0x2c, 0x3d, 0x43, 0xfa, 0x22, 0x9a, 0x8b, 0x5a, 0x6e, | 2335 | 0xec, 0x7d, 0xc6, 0x4d, 0x93, 0xc8, 0x91, 0xed, 0x64, 0xfb, 0xe9, 0x85, |
2316 | 0x28, 0xa2, 0x4f, 0x52, 0xa4, 0xbf, 0xb0, 0xa4, 0x83, 0xce, 0xed, 0x52, | 2336 | 0x46, 0x8a, 0xfe, 0xbc, 0x61, 0xa6, 0xca, 0xb4, 0x83, 0x8a, 0xc9, 0x24, |
2317 | 0xa8, 0x5a, 0x32, 0xb1, 0xb4, 0x15, 0xfe, 0xa2, 0xff, 0xea, 0x50, 0x42, | 2337 | 0x7d, 0x17, 0x38, 0xd3, 0x58, 0x5b, 0x98, 0xa6, 0x5e, 0x06, 0x6c, 0xb9, |
2318 | 0xfe, 0xb2, 0x9e, 0x3e, 0x55, 0x04, 0x2f, 0x66, 0xbc, 0x94, 0x80, 0xcf, | 2338 | 0xf1, 0x23, 0xfe, 0xb7, 0x31, 0xfa, 0x54, 0x56, 0xe2, 0x94, 0xc0, 0x67, |
2319 | 0x59, 0x77, 0xb4, 0x5f, 0x5e, 0xab, 0x27, 0xe5, 0xbb, 0x75, 0x3b, 0x59, | 2339 | 0x00, 0xcb, 0x7c, 0x4b, 0x58, 0xc9, 0xbb, 0x0f, 0x4b, 0xa5, 0xa9, 0x2c, |
2320 | 0x92, 0x6d, 0x52, 0x48, 0x58, 0xb2, 0x82, 0x35, 0xd3, 0xa0, 0x43, 0xb7, | 2340 | 0xe6, 0x1a, 0x4e, 0x20, 0xfb, 0x56, 0xec, 0x8f, 0x9f, 0x37, 0x28, 0xf9, |
2321 | 0x6d, 0xab, 0x04, 0xd8, 0x52, 0xfd, 0x27, 0xfc, 0xb7, 0x32, 0xd6, 0xe4, | 2341 | 0xf9, 0x1b, 0x20, 0x03, 0x4a, 0x0a, 0xda, 0x9b, 0x2a, 0x62, 0x66, 0xba, |
2322 | 0xa8, 0x5a, 0x53, 0x04, 0xdd, 0x21, 0x2c, 0xcf, 0xa1, 0x60, 0xd5, 0x59, | 2342 | 0x11, 0xc7, 0x98, 0x79, 0xf1, 0xbc, 0x43, 0x16, 0xe9, 0x65, 0xab, 0x0b, |
2323 | 0x02, 0x58, 0x29, 0x4e, 0x8e, 0x62, 0xae, 0xfe, 0x85, 0x50, 0x16, 0xad, | 2343 | 0xb2, 0x4a, 0x53, 0xd9, 0xea, 0x04, 0x4e, 0x0b, 0x75, 0x9b, 0xbc, 0x07, |
2324 | 0x38, 0x2f, 0x9f, 0xbb, 0x71, 0xbe, 0xdd, 0xe0, 0x89, 0x24, 0x74, 0xd9, | 2344 | 0xa6, 0xdb, 0x86, 0x79, 0xaf, 0x43, 0xcd, 0x79, 0xde, 0x54, 0x96, 0x3a, |
2325 | 0x93, 0x2c, 0x60, 0x66, 0xba, 0xde, 0x81, 0x31, 0x69, 0xf1, 0xfd, 0x23, | 2345 | 0xfd, 0xb9, 0x21, 0xd0, 0xd0, 0x68, 0x72, 0x5c, 0x01, 0xdc, 0xdb, 0xcc, |
2326 | 0x8e, 0x58, 0x25, 0xa7, 0x1b, 0xbc, 0x4b, 0x49, 0xc9, 0xe9, 0xc2, 0x9a, | 2346 | 0x5f, 0x2c, 0x91, 0xe3, 0x3e, 0x3f, 0xb3, 0xe4, 0xcc, 0xa6, 0x83, 0x75, |
2327 | 0x16, 0xb1, 0x6c, 0x9e, 0x81, 0x78, 0xdb, 0x30, 0xef, 0x77, 0x1a, 0x19, | 2347 | 0xe3, 0x54, 0x76, 0xaf, 0x0f, 0xfa, 0x90, 0xad, 0x8b, 0x3d, 0x5b, 0x7d, |
2328 | 0xdf, 0x9f, 0x1c, 0x95, 0xae, 0x60, 0x6e, 0x1f, 0x70, 0x98, 0x32, 0x31, | 2348 | 0x18, 0x2b, 0x37, 0x82, 0x8e, 0x55, 0x26, 0x5e, 0x63, 0x17, 0xad, 0x25, |
2329 | 0xae, 0x01, 0xee, 0x03, 0xd2, 0x17, 0x8b, 0x67, 0xd8, 0xe7, 0x73, 0x54, | 2349 | 0x49, 0x5c, 0xb6, 0x7a, 0x02, 0xb8, 0x4e, 0xf0, 0x1a, 0x9e, 0x71, 0x3b, |
2330 | 0xdc, 0xd9, 0x54, 0xb8, 0x6f, 0x87, 0x94, 0xbc, 0xeb, 0xc3, 0x3e, 0x78, | 2350 | 0xcd, 0xcc, 0xb7, 0xd2, 0x89, 0x79, 0x96, 0x6d, 0x05, 0x67, 0x21, 0x68, |
2331 | 0xed, 0xe1, 0xcc, 0xce, 0x4e, 0x8c, 0xb5, 0x1b, 0x80, 0xc7, 0x29, 0x09, | 2351 | 0xcf, 0x6d, 0x25, 0xc5, 0x6e, 0x9c, 0x44, 0x5f, 0xa3, 0x29, 0xd3, 0x7b, |
2332 | 0xf7, 0xd8, 0x21, 0x6b, 0x09, 0xd1, 0x2f, 0x39, 0xbd, 0x21, 0x5c, 0x17, | 2352 | 0x61, 0xc6, 0x9a, 0x55, 0xf2, 0x67, 0x97, 0x95, 0x02, 0xce, 0xfc, 0xc0, |
2333 | 0x68, 0x8d, 0x64, 0xde, 0x2e, 0x33, 0xf3, 0xad, 0x72, 0x72, 0x9e, 0xbc, | 2353 | 0xd9, 0x0b, 0xca, 0xc1, 0xc6, 0xcb, 0x1d, 0xd4, 0x6e, 0x40, 0xbb, 0x34, |
2334 | 0x2d, 0x43, 0x16, 0x78, 0xde, 0x52, 0xd4, 0xb2, 0xf5, 0x53, 0xe8, 0x9b, | 2354 | 0x3a, 0xe1, 0x2a, 0xc4, 0xfc, 0x2e, 0x40, 0x5e, 0xb6, 0x0e, 0xc9, 0x9b, |
2335 | 0x32, 0x69, 0xfb, 0xaf, 0xcd, 0x38, 0xb3, 0x5a, 0x6e, 0xf9, 0x8c, 0x96, | 2355 | 0x9d, 0xca, 0x41, 0xd0, 0x6a, 0x31, 0xbf, 0x1e, 0xa7, 0x4e, 0x95, 0x76, |
2336 | 0x87, 0x0e, 0x1c, 0x5a, 0x3e, 0xaf, 0x1d, 0xae, 0xaf, 0x76, 0x4a, 0x7b, | 2356 | 0x98, 0x21, 0x6c, 0x8c, 0xbe, 0x0e, 0xde, 0xd6, 0xac, 0x24, 0xe0, 0xa8, |
2337 | 0x1a, 0xda, 0x66, 0xca, 0x49, 0x4f, 0x13, 0xd2, 0xbb, 0x00, 0x7e, 0x65, | 2357 | 0xcb, 0xc7, 0xe9, 0x0e, 0xf8, 0x61, 0xdd, 0x61, 0xbd, 0x11, 0x76, 0x61, |
2338 | 0x2d, 0x70, 0xde, 0xee, 0xd2, 0x0e, 0x03, 0x57, 0x8b, 0xfd, 0xad, 0x0e, | 2358 | 0xee, 0x8f, 0x7a, 0xca, 0xc3, 0x3b, 0x19, 0x06, 0xf6, 0x60, 0x3f, 0x30, |
2339 | 0xe9, 0x32, 0x64, 0x9b, 0x1d, 0xc1, 0xc6, 0xe4, 0x5b, 0xa0, 0x6d, 0xcd, | 2359 | 0x65, 0x3a, 0xdd, 0x1a, 0x95, 0x74, 0x41, 0x86, 0x9e, 0xa7, 0x1b, 0x69, |
2340 | 0x49, 0x00, 0x4e, 0xba, 0x83, 0x35, 0x3d, 0x21, 0x3d, 0xd4, 0x25, 0xea, | 2360 | 0xc6, 0x22, 0xca, 0x43, 0x9f, 0x85, 0xa9, 0x41, 0x46, 0x26, 0x64, 0xb4, |
2341 | 0x91, 0x9e, 0xcd, 0xcf, 0xfd, 0x69, 0x6f, 0x69, 0xff, 0x76, 0xc2, 0xc0, | 2361 | 0xb7, 0xa4, 0x8a, 0x7b, 0x41, 0xa2, 0xa4, 0x68, 0x81, 0x3c, 0x17, 0xe8, |
2342 | 0x3e, 0x52, 0x0f, 0x4d, 0xda, 0x6e, 0x8f, 0x29, 0x45, 0x4b, 0x97, 0xb4, | 2362 | 0x0e, 0x89, 0x2f, 0x72, 0x16, 0x74, 0xb0, 0x9d, 0xfb, 0x58, 0x37, 0x26, |
2343 | 0x95, 0x93, 0x1b, 0x64, 0xc6, 0x11, 0xc9, 0x41, 0xbf, 0x75, 0xdb, 0x04, | 2363 | 0xd7, 0x55, 0x73, 0x66, 0x6a, 0x91, 0x48, 0x11, 0xb9, 0x21, 0xd0, 0x63, |
2344 | 0x8f, 0x6c, 0xf0, 0x68, 0xcf, 0xa9, 0x41, 0xfd, 0x0e, 0x49, 0xf5, 0x15, | 2364 | 0xdd, 0x64, 0x38, 0x17, 0x3c, 0x32, 0xef, 0xdc, 0x37, 0x81, 0x13, 0x23, |
2345 | 0x35, 0x33, 0xe4, 0xe7, 0x82, 0xdc, 0xa6, 0xd6, 0xeb, 0x19, 0x07, 0x3a, | 2365 | 0xc7, 0xea, 0x68, 0xe2, 0x13, 0xfc, 0x24, 0x59, 0xe6, 0x2c, 0x43, 0xb9, |
2346 | 0xd9, 0xce, 0x3e, 0xf6, 0x8d, 0xa9, 0x7d, 0x8d, 0x8c, 0x9d, 0x5c, 0x14, | 2366 | 0x4f, 0x65, 0x73, 0x9f, 0xef, 0x7b, 0x83, 0x23, 0x1a, 0xbd, 0x24, 0xf7, |
2347 | 0xd1, 0xf4, 0xcc, 0x3e, 0xe0, 0xa3, 0xae, 0x12, 0xee, 0x29, 0xd0, 0x48, | 2367 | 0xcb, 0x76, 0xc4, 0x70, 0x72, 0x8f, 0xc4, 0xf2, 0x99, 0x76, 0x49, 0x29, |
2348 | 0xda, 0xd9, 0xb7, 0xb1, 0x26, 0x26, 0xae, 0xd3, 0xd9, 0x40, 0x27, 0xe8, | 2368 | 0x5a, 0xfa, 0x06, 0x2d, 0xe8, 0x85, 0x50, 0x73, 0x71, 0xca, 0x4b, 0xfe, |
2349 | 0x49, 0x90, 0xe7, 0xe4, 0xa1, 0x3a, 0xa7, 0xb6, 0x71, 0xce, 0x5f, 0xfb, | 2369 | 0x46, 0xb1, 0x16, 0xdb, 0x17, 0xec, 0xc4, 0xe4, 0xbd, 0xf0, 0x5c, 0x0e, |
2350 | 0xdb, 0x46, 0x4c, 0x79, 0x5d, 0x9d, 0x97, 0x76, 0x45, 0x38, 0x75, 0x46, | 2370 | 0xb6, 0x6a, 0x48, 0xfd, 0x29, 0x56, 0xd9, 0xfe, 0x99, 0xb7, 0x55, 0x43, |
2351 | 0x21, 0x7f, 0xa6, 0x3d, 0xd1, 0x0a, 0x8e, 0xb5, 0x8e, 0x0b, 0x7a, 0xa1, | 2371 | 0x50, 0x48, 0x4f, 0xf4, 0xaa, 0xd4, 0x45, 0xe3, 0xd6, 0x55, 0x4f, 0xec, |
2352 | 0x1b, 0x99, 0x0e, 0xc9, 0x29, 0xfa, 0x0e, 0x62, 0x2f, 0xda, 0x1b, 0xec, | 2372 | 0xc3, 0xfb, 0xe1, 0x14, 0x78, 0x33, 0xd2, 0xb0, 0xb6, 0x84, 0x4a, 0xb0, |
2353 | 0xc6, 0xe6, 0x59, 0x38, 0x97, 0x81, 0xed, 0xa6, 0x95, 0xfe, 0x14, 0x2a, | 2373 | 0x73, 0x6b, 0x28, 0xa5, 0x93, 0x89, 0xbd, 0x25, 0xc8, 0x1e, 0x5f, 0x85, |
2354 | 0xf4, 0x07, 0xa4, 0x6d, 0x35, 0xad, 0x4b, 0x80, 0xaf, 0xf4, 0x6c, 0x37, | 2374 | 0xe0, 0xaf, 0xc5, 0xa7, 0x4f, 0x17, 0x6c, 0xda, 0x0e, 0x78, 0x74, 0xac, |
2355 | 0x68, 0xe3, 0x18, 0xb6, 0x67, 0xe3, 0xfd, 0x7e, 0xd8, 0xfa, 0xc1, 0x41, | 2375 | 0x5b, 0xa5, 0xcc, 0x74, 0xec, 0x5f, 0x9d, 0x65, 0xf9, 0xb6, 0x43, 0xff, |
2356 | 0xf0, 0x87, 0x70, 0x76, 0x0a, 0xf2, 0xce, 0xba, 0xd8, 0xd3, 0x75, 0x6e, | 2376 | 0x15, 0x2a, 0x5a, 0x4c, 0x3b, 0xa4, 0x21, 0x68, 0xf0, 0xb6, 0x66, 0x1a, |
2357 | 0x56, 0x3c, 0xe8, 0xc1, 0x79, 0x06, 0x67, 0xc9, 0xaf, 0x76, 0xe8, 0xb3, | 2377 | 0xe1, 0xd9, 0xb2, 0xfe, 0x6a, 0x34, 0x32, 0xc2, 0xb0, 0x0c, 0xc7, 0xf0, |
2358 | 0x26, 0x05, 0x27, 0x9d, 0xa2, 0xfc, 0x03, 0xda, 0x75, 0xd9, 0x76, 0x4b, | 2378 | 0xc6, 0x68, 0x5a, 0xbc, 0xef, 0xed, 0xdf, 0xb2, 0xa6, 0x49, 0x62, 0x16, |
2359 | 0x23, 0xed, 0x91, 0xac, 0xa8, 0x8f, 0xa6, 0xc4, 0x47, 0x08, 0x4b, 0x38, | 2379 | 0x3c, 0xfb, 0x67, 0x01, 0x19, 0x7e, 0x1a, 0x2c, 0x9f, 0xc3, 0x76, 0x79, |
2360 | 0xc2, 0xa7, 0x0f, 0x8a, 0xfe, 0x6b, 0xdf, 0xda, 0x74, 0x56, 0x5b, 0x06, | 2380 | 0x33, 0x6c, 0x33, 0x1c, 0x74, 0xa8, 0x97, 0x79, 0xa8, 0xc7, 0x7d, 0x7b, |
2361 | 0x66, 0x41, 0x43, 0xc0, 0x5b, 0xf0, 0xe4, 0xb3, 0x60, 0xc9, 0xd7, 0xad, | 2381 | 0x0c, 0x79, 0x0a, 0xcf, 0x52, 0x09, 0x68, 0x7c, 0xd2, 0x3e, 0x18, 0x1e, |
2362 | 0xfc, 0x23, 0x6c, 0x23, 0x1c, 0x74, 0xa2, 0x8f, 0x34, 0xac, 0x74, 0x04, | 2382 | 0x7e, 0xc2, 0x85, 0x9f, 0x70, 0xe1, 0x1f, 0x5c, 0xf8, 0x11, 0x97, 0xfd, |
2363 | 0xf6, 0x15, 0xd1, 0x14, 0xc9, 0x46, 0x0b, 0x71, 0x7c, 0xda, 0x39, 0x08, | 2383 | 0x4a, 0x9a, 0x9e, 0x1f, 0x84, 0xdf, 0xdb, 0xf4, 0x43, 0x68, 0x63, 0xe8, |
2364 | 0x0f, 0xbb, 0xf7, 0x60, 0xf7, 0x1e, 0x7c, 0x82, 0x07, 0x9b, 0xf7, 0xe8, | 2384 | 0x0b, 0x52, 0xe1, 0x87, 0xa6, 0x6b, 0x02, 0xb6, 0x0e, 0x9b, 0x5b, 0xe2, |
2365 | 0x27, 0x52, 0xf2, 0xea, 0x10, 0xfc, 0xda, 0x86, 0x5f, 0x41, 0x1b, 0x43, | 2385 | 0x39, 0x1d, 0xcf, 0x02, 0x9e, 0x26, 0xfc, 0x2c, 0xeb, 0x61, 0xe8, 0x5f, |
2366 | 0x5f, 0x17, 0x03, 0x7e, 0x65, 0xba, 0xaa, 0xc3, 0x76, 0x61, 0x43, 0x4b, | 2386 | 0xd9, 0x2f, 0xa5, 0xe0, 0x83, 0xd8, 0xef, 0xb0, 0x7f, 0x62, 0x58, 0xcf, |
2367 | 0x9c, 0xb3, 0xf0, 0xcc, 0xe3, 0x69, 0xc3, 0x8f, 0x52, 0xaf, 0x22, 0xff, | 2387 | 0x2b, 0x58, 0x8c, 0xeb, 0xe1, 0x1c, 0xd9, 0xee, 0xe2, 0x24, 0x12, 0x25, |
2368 | 0x49, 0x3f, 0x93, 0x84, 0x4f, 0xa1, 0xaf, 0xa1, 0x2f, 0x21, 0xac, 0xef, | 2388 | 0xe5, 0xf0, 0x20, 0x6c, 0xf2, 0xe6, 0x16, 0xf0, 0xca, 0xb6, 0x79, 0x1d, |
2369 | 0xe7, 0x1d, 0xae, 0xf5, 0x65, 0xdc, 0xa1, 0x1d, 0x75, 0x88, 0x1e, 0x2f, | 2389 | 0xbb, 0x16, 0xb4, 0xf7, 0x3b, 0xfc, 0x7f, 0xb7, 0xb7, 0x03, 0x30, 0xd2, |
2370 | 0x6a, 0x47, 0x87, 0x60, 0x63, 0x37, 0xb6, 0x80, 0x56, 0xda, 0xda, 0x75, | 2390 | 0xc6, 0x3b, 0xfd, 0x71, 0x77, 0xe0, 0x7f, 0xf8, 0xbd, 0x91, 0xb6, 0x69, |
2371 | 0x74, 0x15, 0x68, 0xbf, 0xe8, 0x0c, 0xfe, 0x5d, 0xde, 0x36, 0xc0, 0x28, | 2391 | 0x5f, 0x30, 0xe6, 0xfe, 0x06, 0xbf, 0x96, 0xb8, 0x2d, 0x46, 0x7b, 0x96, |
2372 | 0xa1, 0x76, 0x05, 0xe3, 0xb6, 0xd0, 0x9f, 0xf0, 0x7d, 0x3a, 0x95, 0x95, | 2392 | 0x7d, 0xbf, 0xb9, 0x67, 0x01, 0x9a, 0xb1, 0xec, 0xf3, 0xb8, 0xe7, 0x7c, |
2373 | 0xdd, 0xe1, 0x98, 0xfd, 0x75, 0x7a, 0x1d, 0xfd, 0x96, 0x98, 0x0c, 0x9c, | 2393 | 0xe8, 0x3f, 0x3b, 0x40, 0x0f, 0xfc, 0xb9, 0x9b, 0x71, 0x84, 0xe8, 0xbf, |
2374 | 0x09, 0xfc, 0xe0, 0xc0, 0x82, 0x25, 0xf6, 0x99, 0x80, 0xc6, 0x81, 0x73, | 2394 | 0x14, 0x98, 0x16, 0xe6, 0xb6, 0xcb, 0xc2, 0xf3, 0x66, 0x2c, 0xb6, 0x4f, |
2375 | 0x91, 0x3f, 0x6c, 0x01, 0x3e, 0xd0, 0xe7, 0x6d, 0xc4, 0x09, 0x91, 0xf7, | 2395 | 0xbd, 0xd9, 0x3e, 0xf7, 0xc3, 0x3e, 0xad, 0x56, 0x32, 0xac, 0xbf, 0x82, |
2376 | 0x34, 0x98, 0x0a, 0xe6, 0xb6, 0xf2, 0x82, 0x3e, 0x98, 0xf6, 0x66, 0x35, | 2396 | 0x7d, 0x3e, 0x61, 0x29, 0x90, 0x0d, 0xd1, 0xc5, 0x4a, 0x1c, 0xbe, 0x41, |
2377 | 0xda, 0xdb, 0x01, 0xd8, 0x9b, 0xd3, 0x2a, 0x69, 0xe7, 0xef, 0x60, 0x6f, | 2397 | 0x4b, 0xbd, 0x41, 0x7b, 0xd3, 0xd3, 0xd0, 0xcb, 0x33, 0x3c, 0x87, 0x23, |
2378 | 0x4f, 0x39, 0x1a, 0x78, 0x23, 0x72, 0xa1, 0xdc, 0x01, 0x5b, 0x37, 0x93, | 2398 | 0x3a, 0x21, 0xfd, 0xb5, 0xef, 0x0f, 0xd6, 0xd5, 0x6f, 0x80, 0x2f, 0xcf, |
2379 | 0xef, 0xc8, 0x9e, 0xd4, 0xb4, 0x68, 0x72, 0x9a, 0x73, 0x35, 0xcc, 0x29, | 2399 | 0x9b, 0x06, 0xcd, 0xe2, 0xb0, 0x1a, 0xd8, 0x62, 0x38, 0x6f, 0x23, 0x26, |
2380 | 0xff, 0x1b, 0xd8, 0xf7, 0x45, 0xe3, 0x69, 0xd0, 0xe5, 0xfb, 0xd3, 0xc0, | 2400 | 0x3a, 0x37, 0xa9, 0x54, 0xca, 0xb4, 0x90, 0x91, 0x59, 0x00, 0xed, 0x29, |
2381 | 0x59, 0xd8, 0x6f, 0x84, 0xb6, 0x15, 0xcd, 0xa7, 0x10, 0xf3, 0xdc, 0xcf, | 2401 | 0xcb, 0xb7, 0x7b, 0xb6, 0x8d, 0x45, 0xd0, 0x9f, 0x71, 0x07, 0xe1, 0x17, |
2382 | 0x19, 0x52, 0x1c, 0x6e, 0x91, 0xf4, 0xf0, 0x02, 0x70, 0x4f, 0x3a, 0x81, | 2402 | 0xd8, 0x6e, 0xc0, 0x17, 0xe8, 0x2f, 0x82, 0xfe, 0x4c, 0xa3, 0x85, 0xbe, |
2383 | 0x1d, 0x53, 0xd7, 0x17, 0x81, 0x7f, 0xc6, 0x1b, 0x82, 0x1e, 0xd3, 0x0e, | 2403 | 0xa6, 0x85, 0xb1, 0x36, 0xdc, 0x0f, 0x44, 0x6d, 0x86, 0xeb, 0x1e, 0xa5, |
2384 | 0x40, 0x17, 0xf0, 0x2f, 0x02, 0xff, 0x4c, 0xbd, 0x45, 0xbe, 0x69, 0x46, | 2404 | 0x3b, 0xdc, 0x84, 0xe2, 0x3c, 0xc5, 0x7e, 0xb9, 0x9c, 0x81, 0x5d, 0x29, |
2385 | 0xb1, 0x34, 0x3a, 0x4f, 0x1b, 0xc0, 0xa2, 0x7d, 0x4f, 0xc8, 0x17, 0xbd, | 2405 | 0x65, 0x8b, 0xd7, 0x56, 0x69, 0x71, 0x03, 0x86, 0xec, 0xb2, 0x6f, 0xb3, |
2386 | 0xb8, 0xe6, 0x3e, 0x4b, 0x3f, 0x5b, 0x1a, 0x86, 0x9d, 0x68, 0x25, 0x87, | 2406 | 0xb6, 0x33, 0x58, 0x4a, 0xa9, 0xd2, 0xf7, 0x10, 0x1d, 0xac, 0x68, 0x80, |
2387 | 0x7b, 0x1b, 0xb2, 0xb8, 0x0e, 0x23, 0xd9, 0x52, 0x60, 0x83, 0x59, 0x77, | 2407 | 0xe1, 0x31, 0xcf, 0xfb, 0x73, 0x63, 0x95, 0x5e, 0xf8, 0x52, 0x1e, 0x5f, |
2388 | 0xa8, 0x98, 0x34, 0x94, 0x2f, 0x11, 0x39, 0x5c, 0x36, 0x01, 0xc3, 0x31, | 2408 | 0xf5, 0xa6, 0x2c, 0x7f, 0xee, 0x97, 0x2b, 0x0f, 0xf0, 0x19, 0x61, 0x2f, |
2389 | 0xe7, 0x83, 0xb9, 0xb1, 0x72, 0x1f, 0x7c, 0x23, 0xc7, 0x57, 0xfd, 0x49, | 2409 | 0x94, 0x2e, 0x5b, 0x3f, 0xf7, 0xa0, 0xbf, 0x5b, 0x70, 0x3e, 0x9e, 0x8e, |
2390 | 0x27, 0x98, 0xfb, 0xdd, 0x72, 0x81, 0x32, 0x62, 0xdc, 0x4e, 0x95, 0x9c, | 2410 | 0x31, 0xe6, 0xeb, 0x2c, 0x29, 0x87, 0x4c, 0xd1, 0xdb, 0x1a, 0xf8, 0xbc, |
2391 | 0x7f, 0xf7, 0xa1, 0xbf, 0x9b, 0xd6, 0x5c, 0x1b, 0x4f, 0x7a, 0x2c, 0x8c, | 2411 | 0x43, 0x98, 0x3c, 0x50, 0x29, 0xf7, 0xb4, 0xd2, 0x55, 0x95, 0x63, 0xeb, |
2392 | 0xf5, 0xda, 0x11, 0x5b, 0xef, 0x6b, 0x0d, 0x7d, 0xd8, 0x11, 0x4c, 0x1e, | 2412 | 0x65, 0x38, 0x01, 0xa7, 0xb2, 0x0f, 0xf2, 0x28, 0x77, 0x37, 0xcd, 0xc5, |
2393 | 0x2a, 0x97, 0x7a, 0x5b, 0xe5, 0xaa, 0xc1, 0xd8, 0x79, 0x09, 0x46, 0xed, | 2413 | 0x0a, 0x15, 0x8f, 0xd6, 0x2c, 0x1f, 0x07, 0xe3, 0x78, 0xbe, 0x22, 0x7a, |
2394 | 0x96, 0xf7, 0x82, 0x1f, 0xa5, 0x9e, 0x86, 0xb9, 0x58, 0xbe, 0xec, 0xcb, | 2414 | 0x63, 0xb4, 0x31, 0xd6, 0x19, 0x67, 0x89, 0xf6, 0x65, 0x16, 0x49, 0xe2, |
2395 | 0x9a, 0x13, 0xac, 0xc1, 0xb8, 0x23, 0x57, 0xd6, 0xfb, 0x62, 0xb2, 0x3e, | 2415 | 0xf6, 0xc4, 0x36, 0x71, 0x93, 0x85, 0x4a, 0xb9, 0xbb, 0x69, 0x9c, 0xca, |
2396 | 0xb6, 0xb8, 0x66, 0x49, 0xf6, 0x0e, 0x2f, 0x8a, 0x5a, 0xdb, 0x1b, 0xdb, | 2416 | 0x83, 0x96, 0xd8, 0xbf, 0x81, 0xdb, 0xbf, 0x89, 0xbb, 0x8b, 0xd2, 0xdd, |
2397 | 0x58, 0x9b, 0xc8, 0x97, 0x4b, 0x3d, 0x0d, 0xe3, 0x64, 0x0e, 0xb8, 0xf4, | 2417 | 0x8c, 0x2f, 0x7a, 0xdb, 0x36, 0x69, 0xa7, 0x03, 0x7e, 0x7a, 0xda, 0x36, |
2398 | 0x03, 0xeb, 0x6b, 0xfb, 0x37, 0xd6, 0xee, 0x90, 0x54, 0x0f, 0xd7, 0xeb, | 2418 | 0x69, 0x98, 0x4c, 0xb3, 0x69, 0x9c, 0x61, 0x9a, 0x7b, 0x36, 0x69, 0x0e, |
2399 | 0x7d, 0x6d, 0x1b, 0xb8, 0x53, 0x21, 0x3d, 0xbd, 0x6d, 0x1b, 0x38, 0x6c, | 2419 | 0x6f, 0xe5, 0xe7, 0x28, 0xc1, 0x07, 0xc5, 0x5a, 0x73, 0xb4, 0xff, 0x62, |
2400 | 0xe2, 0x6c, 0x18, 0x0f, 0x13, 0xe7, 0xc0, 0x06, 0xce, 0xfd, 0x9b, 0xe9, | 2420 | 0x65, 0x60, 0xfc, 0x0e, 0x42, 0x8c, 0x1c, 0xde, 0x11, 0xf8, 0x70, 0x6d, |
2401 | 0x39, 0x21, 0xf0, 0x41, 0xb1, 0xd6, 0x8c, 0x1c, 0xb8, 0x50, 0x1e, 0x1c, | 2421 | 0xbf, 0x03, 0x59, 0x69, 0xc4, 0x3e, 0x51, 0xa1, 0x32, 0xce, 0xf9, 0x81, |
2402 | 0xff, 0xa2, 0x20, 0xe6, 0xed, 0xdf, 0x16, 0xfa, 0x64, 0xf3, 0x80, 0x0b, | 2422 | 0x3a, 0xed, 0x5f, 0xab, 0x53, 0xa0, 0x4b, 0xac, 0x13, 0x6f, 0xc1, 0xc6, |
2403 | 0x5e, 0x99, 0x42, 0x1f, 0xa7, 0x49, 0x09, 0x72, 0x7e, 0xa8, 0x26, 0x07, | 2423 | 0xa8, 0xb4, 0x3b, 0x17, 0x9f, 0xd4, 0x72, 0x3a, 0x6c, 0x8d, 0xc6, 0xcb, |
2404 | 0xd6, 0x6a, 0x12, 0xea, 0x12, 0x75, 0xe2, 0x32, 0x6c, 0x4c, 0x8a, 0xbb, | 2424 | 0xf0, 0xe1, 0x6a, 0x6e, 0xef, 0xeb, 0x79, 0xf5, 0x71, 0x4f, 0x35, 0xd9, |
2405 | 0x32, 0x1d, 0x13, 0x66, 0xc6, 0x82, 0xad, 0xc9, 0x78, 0x09, 0x3e, 0xd9, | 2425 | 0x1f, 0xc6, 0x47, 0x9d, 0x2c, 0xe6, 0xeb, 0x6c, 0x5b, 0xf0, 0x2b, 0x0d, |
2406 | 0xc8, 0xec, 0x79, 0x3b, 0x67, 0x3c, 0xe9, 0x1b, 0x88, 0xdb, 0x39, 0xe9, | 2426 | 0xa6, 0xfd, 0x4c, 0x17, 0x75, 0x22, 0x8e, 0xd6, 0xcf, 0xec, 0xf2, 0x6d, |
2407 | 0x38, 0xe8, 0x8e, 0x62, 0xbe, 0x46, 0xdb, 0x82, 0x5f, 0xa9, 0x13, 0xf7, | 2427 | 0x87, 0x34, 0x0d, 0xbe, 0x79, 0x26, 0xcb, 0x71, 0xbf, 0x35, 0x06, 0xf8, |
2408 | 0x7c, 0xb7, 0x74, 0x21, 0x2e, 0xd6, 0x5e, 0xda, 0x11, 0xd8, 0x8e, 0x98, | 2428 | 0x49, 0x35, 0x37, 0xd6, 0x77, 0xa4, 0x7e, 0x67, 0x5f, 0xb1, 0x5e, 0xea, |
2409 | 0x26, 0x7c, 0xed, 0xcc, 0x28, 0xe3, 0x78, 0x6b, 0x0c, 0xf0, 0x13, 0x46, | 2429 | 0x2b, 0x56, 0x74, 0xb6, 0x13, 0xe1, 0x64, 0xd1, 0x97, 0xb9, 0x54, 0x0a, |
2410 | 0x66, 0x6c, 0xe7, 0xf1, 0xda, 0x9d, 0x3b, 0x0b, 0xb5, 0xe2, 0xce, 0x42, | 2430 | 0x36, 0xc1, 0x6b, 0x27, 0xb1, 0xe6, 0x0f, 0x60, 0x7f, 0x6c, 0xdf, 0x44, |
2411 | 0xd9, 0xa2, 0x9d, 0xe8, 0xee, 0x28, 0xfa, 0x2a, 0x57, 0x4a, 0xc2, 0x26, | 2431 | 0xe3, 0x2e, 0xd6, 0x18, 0xf9, 0x00, 0xe7, 0x0e, 0xde, 0xe0, 0xd3, 0x6c, |
2412 | 0x2e, 0xab, 0x3c, 0xe2, 0xb5, 0x7a, 0x1d, 0xf6, 0x47, 0xfb, 0x16, 0x19, | 2432 | 0xec, 0x5a, 0x8c, 0xfc, 0x6b, 0x60, 0x9f, 0xdc, 0x7f, 0xc7, 0xf3, 0xe3, |
2413 | 0xf7, 0xb0, 0xc7, 0xc8, 0x87, 0x90, 0x3b, 0x68, 0x83, 0x4f, 0xcb, 0xe2, | 2433 | 0xc3, 0xdd, 0x5d, 0xfe, 0xdc, 0x8f, 0x03, 0x9b, 0x0e, 0x69, 0x31, 0x9d, |
2414 | 0xd4, 0xfa, 0xc8, 0xbf, 0x85, 0xf6, 0xc9, 0xfe, 0xfb, 0x7e, 0xe0, 0xef, | 2434 | 0x8c, 0x32, 0x8e, 0x1c, 0x66, 0xbc, 0xa1, 0x29, 0xec, 0x9f, 0xf3, 0x2e, |
2415 | 0xef, 0xe8, 0x0e, 0xe6, 0xde, 0x0a, 0x6d, 0x3a, 0xc2, 0x45, 0x3c, 0xc3, | 2435 | 0xe7, 0x1e, 0x9c, 0x77, 0x4c, 0x07, 0x7e, 0x8e, 0x6c, 0xe4, 0x4f, 0x9e, |
2416 | 0xda, 0x38, 0x72, 0x92, 0xf1, 0xba, 0xa9, 0xd1, 0x3f, 0xe7, 0x3c, 0xe6, | 2436 | 0x40, 0x2e, 0x52, 0x84, 0xdd, 0x68, 0xb9, 0x2b, 0x34, 0x23, 0x7d, 0x24, |
2417 | 0x12, 0xcc, 0x23, 0xa6, 0x43, 0x3f, 0x27, 0xd9, 0x1c, 0xfc, 0x88, 0x8e, | 2437 | 0xc5, 0x5a, 0x72, 0x8f, 0x01, 0xe6, 0xdf, 0x60, 0x73, 0xdd, 0x5d, 0x81, |
2418 | 0xdc, 0xa2, 0x00, 0xbb, 0x31, 0x33, 0x57, 0x64, 0x46, 0xf9, 0x48, 0x89, | 2438 | 0x1e, 0x06, 0x3e, 0x5e, 0xfa, 0x5d, 0xc0, 0xbe, 0xb5, 0x0d, 0xf6, 0xcd, |
2419 | 0xb5, 0x64, 0x9e, 0x00, 0xcc, 0x7f, 0xc0, 0xe6, 0xda, 0xba, 0x43, 0x3d, | 2439 | 0x66, 0x58, 0xbc, 0x5f, 0xdf, 0xf6, 0xfe, 0x9f, 0xd9, 0x7e, 0xf1, 0x6e, |
2420 | 0x0c, 0x7d, 0xbc, 0xf2, 0xbb, 0x80, 0xbd, 0xbc, 0x05, 0xf6, 0xdd, 0x46, | 2440 | 0x15, 0xfe, 0xb4, 0x35, 0xb0, 0xfd, 0x8b, 0x54, 0x84, 0x6f, 0xd5, 0x4c, |
2421 | 0x58, 0xbc, 0xbf, 0xb8, 0xe5, 0xfd, 0x4f, 0x69, 0xbf, 0x78, 0xb7, 0x0a, | 2441 | 0xce, 0x2d, 0x0f, 0x02, 0x17, 0xe3, 0x3a, 0x78, 0x84, 0xbf, 0x40, 0x8c, |
2422 | 0x7f, 0xda, 0x1a, 0xda, 0xfe, 0x05, 0x29, 0xc0, 0xb7, 0x9a, 0x36, 0x73, | 2442 | 0x85, 0xbc, 0x11, 0x13, 0x92, 0x37, 0x72, 0x3e, 0x05, 0xd8, 0x34, 0x60, |
2423 | 0xc7, 0xdb, 0xb0, 0x16, 0xe3, 0x1a, 0x68, 0x84, 0xbf, 0x40, 0xcc, 0x04, | 2443 | 0xd9, 0xff, 0x32, 0xec, 0x85, 0x38, 0xcb, 0xbc, 0x58, 0x67, 0x1c, 0xf6, |
2424 | 0xbf, 0x11, 0x13, 0x12, 0x37, 0x30, 0x3f, 0xa2, 0x9f, 0x00, 0x2c, 0xfd, | 2444 | 0x55, 0xe4, 0x39, 0xd9, 0x36, 0x68, 0x94, 0xf7, 0x82, 0x6a, 0x86, 0xb0, |
2425 | 0x2f, 0x61, 0x5f, 0xe9, 0x20, 0xcf, 0x0b, 0x35, 0xae, 0xa1, 0xaf, 0x12, | 2445 | 0x21, 0xdd, 0xed, 0xb0, 0x9c, 0xdf, 0x30, 0xed, 0xae, 0x20, 0x6f, 0x18, |
2426 | 0xdf, 0x1d, 0x6d, 0x83, 0x46, 0xf9, 0xaf, 0x19, 0x76, 0x04, 0x1b, 0xe1, | 2446 | 0x23, 0xbb, 0x61, 0xe3, 0x57, 0xa2, 0xa9, 0xa7, 0x90, 0xbb, 0x99, 0x2d, |
2427 | 0xdd, 0x0a, 0xcb, 0x7c, 0x85, 0xb8, 0xbb, 0xc3, 0x3c, 0x60, 0x4c, 0xb2, | 2447 | 0x2c, 0x0b, 0x9e, 0xd7, 0x7d, 0x19, 0x85, 0x78, 0xa5, 0x9e, 0xad, 0xe3, |
2428 | 0xf5, 0x2c, 0x7e, 0x45, 0x99, 0x7c, 0x16, 0xb9, 0x98, 0xdd, 0x42, 0x5e, | 2448 | 0xdf, 0x4a, 0x6c, 0xfa, 0x4a, 0xb6, 0x34, 0xb2, 0x11, 0x2b, 0x20, 0xe3, |
2429 | 0x90, 0x35, 0x56, 0xc0, 0xa3, 0x68, 0xdd, 0x13, 0xbd, 0x9b, 0xc7, 0xf7, | 2449 | 0xf4, 0xa4, 0xc8, 0x25, 0x29, 0x5f, 0xf7, 0xe5, 0x8b, 0xf8, 0x0c, 0xff, |
2430 | 0xc5, 0x37, 0x7c, 0x25, 0x2d, 0x4d, 0xb2, 0x88, 0x15, 0xe0, 0x71, 0x6a, | 2450 | 0x28, 0xfd, 0x07, 0xce, 0x3d, 0xf4, 0x83, 0xe1, 0x99, 0xb3, 0x9e, 0xd9, |
2431 | 0x42, 0xcf, 0x24, 0x24, 0x57, 0x0b, 0xf8, 0x8b, 0x78, 0x0b, 0xff, 0xc8, | 2451 | 0x38, 0x9b, 0x34, 0x74, 0x69, 0x0c, 0xb8, 0x74, 0x14, 0x34, 0x38, 0x6e, |
2432 | 0x2e, 0x64, 0xb2, 0xee, 0x07, 0x23, 0x99, 0x53, 0xcf, 0xb2, 0x90, 0x4d, | 2452 | 0x5b, 0x22, 0x97, 0xa0, 0xa2, 0xce, 0xf9, 0x85, 0xcc, 0x0d, 0x6d, 0xf6, |
2433 | 0x0a, 0xba, 0x34, 0x86, 0xb5, 0x72, 0x02, 0x38, 0x18, 0x87, 0x1d, 0x3d, | 2453 | 0x03, 0x22, 0xd7, 0x86, 0x39, 0xee, 0xff, 0x41, 0x97, 0x7f, 0xd6, 0x1d, |
2434 | 0x13, 0x97, 0x82, 0xc5, 0x7c, 0x41, 0xe5, 0x7a, 0x59, 0xfa, 0x01, 0x3d, | 2454 | 0x3c, 0x1e, 0x17, 0xb9, 0xae, 0x6d, 0xf3, 0x7f, 0xd7, 0xe1, 0xf3, 0x26, |
2435 | 0xd3, 0x86, 0x39, 0xf6, 0x1f, 0xee, 0x0e, 0x64, 0xdd, 0xc9, 0xf1, 0xb8, | 2455 | 0xc7, 0x98, 0xff, 0xc9, 0xb6, 0xf1, 0xa3, 0x89, 0xad, 0xe3, 0xaf, 0xf6, |
2436 | 0x9e, 0xe9, 0xde, 0x32, 0xff, 0x7a, 0x67, 0x40, 0x9b, 0x1a, 0x63, 0xfe, | 2456 | 0x85, 0xfa, 0x20, 0x72, 0x8f, 0x05, 0xfc, 0xb2, 0x9e, 0x6e, 0xe7, 0xf5, |
2437 | 0x5f, 0xb6, 0x8c, 0xbf, 0x1e, 0xdf, 0x3c, 0x7e, 0x60, 0x67, 0xa4, 0x0f, | 2457 | 0x17, 0xd1, 0x97, 0x3f, 0x01, 0x4d, 0xa9, 0xe3, 0xbf, 0x80, 0xbe, 0x6c, |
2438 | 0x7a, 0xe6, 0x89, 0x90, 0x5e, 0xea, 0xe9, 0x56, 0x5a, 0x7f, 0x13, 0x7d, | 2458 | 0xc0, 0x5e, 0x43, 0x5f, 0x9a, 0x79, 0xd8, 0xa8, 0x3b, 0xaa, 0x02, 0x39, |
2439 | 0x79, 0x0e, 0x38, 0x95, 0x8e, 0xff, 0x06, 0xfa, 0xb2, 0x0e, 0xfb, 0x09, | 2459 | 0xac, 0x93, 0xdd, 0x9b, 0x2e, 0xc3, 0xc6, 0x0b, 0x0d, 0xc8, 0x6e, 0x23, |
2440 | 0xfa, 0xd2, 0x48, 0xc3, 0x7a, 0x5d, 0x51, 0xd1, 0x91, 0x93, 0xba, 0xa3, | 2460 | 0xae, 0x6e, 0xc0, 0x94, 0x36, 0x61, 0xfc, 0xb8, 0x53, 0x68, 0x78, 0xc8, |
2441 | 0x7b, 0x90, 0x77, 0xa4, 0x24, 0x5f, 0x07, 0xef, 0xd6, 0xe3, 0xea, 0x3a, | 2461 | 0xfb, 0x9a, 0x63, 0x70, 0x06, 0xfd, 0x12, 0xf6, 0xba, 0x42, 0x53, 0xee, |
2442 | 0x4c, 0x71, 0x03, 0x26, 0x88, 0x3b, 0xf9, 0xba, 0x8f, 0x3c, 0xae, 0x31, | 2462 | 0x9a, 0x2d, 0xcc, 0x93, 0x32, 0x6f, 0x15, 0xe6, 0x93, 0x4a, 0x61, 0x91, |
2443 | 0x06, 0x0f, 0xa3, 0x5f, 0xc4, 0x59, 0x57, 0x64, 0xd2, 0x5b, 0xcb, 0xea, | 2463 | 0x73, 0xda, 0x18, 0xfa, 0xb2, 0x3e, 0x41, 0x8c, 0x3b, 0xa5, 0xd8, 0x67, |
2444 | 0xf6, 0xa9, 0x20, 0x0f, 0xb5, 0xbf, 0xad, 0xe5, 0x17, 0x99, 0xa3, 0xc6, | 2464 | 0xe7, 0x90, 0xcf, 0x2e, 0xe1, 0x77, 0x0e, 0xbf, 0x3a, 0x7e, 0x61, 0xdd, |
2445 | 0xd0, 0x57, 0xf5, 0x07, 0x62, 0xdc, 0x33, 0x5a, 0x76, 0x79, 0x0e, 0xf9, | 2465 | 0xf0, 0x2d, 0xd4, 0x1d, 0xd2, 0xdf, 0x23, 0x36, 0xf9, 0xeb, 0xff, 0x74, |
2446 | 0xe9, 0x12, 0x7e, 0x67, 0xf1, 0xab, 0xe1, 0x17, 0xd5, 0x01, 0x2f, 0xa0, | 2466 | 0x09, 0xf9, 0xf4, 0x5c, 0x92, 0x9e, 0x30, 0x45, 0x8f, 0xf0, 0x7d, 0x9c, |
2447 | 0x8e, 0x50, 0xfe, 0x1e, 0xb1, 0x29, 0xd8, 0xff, 0x67, 0x4b, 0xc8, 0x8f, | 2467 | 0x8d, 0x5c, 0x5c, 0x7f, 0x8b, 0x7e, 0x25, 0xc8, 0xe9, 0x88, 0xde, 0xa8, |
2448 | 0xe7, 0x12, 0xf2, 0x94, 0xad, 0xf7, 0xea, 0x81, 0x8f, 0xcb, 0x22, 0xb7, | 2468 | 0xe2, 0x2c, 0x87, 0x0f, 0x05, 0xfe, 0xe9, 0xe4, 0x57, 0x1c, 0xe9, 0xcb, |
2449 | 0xb6, 0x2e, 0xcb, 0x97, 0xc2, 0x1c, 0x4d, 0xe4, 0x9d, 0x0a, 0x64, 0xb9, | 2469 | 0x83, 0x9c, 0x0d, 0x7e, 0xc7, 0x96, 0x50, 0xaf, 0x40, 0x3e, 0x0a, 0xfd, |
2450 | 0xff, 0x48, 0xe8, 0x9f, 0xbe, 0xf6, 0xa0, 0xab, 0x7c, 0x79, 0x98, 0x83, | 2470 | 0x0c, 0x7a, 0xfc, 0x46, 0xb5, 0x1d, 0xfc, 0x98, 0x54, 0x9c, 0x30, 0x46, |
2451 | 0xc1, 0xef, 0x64, 0x15, 0xd4, 0x1b, 0xe0, 0x8f, 0x26, 0xef, 0x41, 0x8f, | 2471 | 0x49, 0x19, 0xd0, 0x77, 0x28, 0xed, 0xc8, 0xdb, 0xe0, 0x77, 0xe4, 0x98, |
2452 | 0xdf, 0xa9, 0xb4, 0x83, 0x1e, 0x5b, 0x0a, 0xc7, 0x90, 0xbb, 0x68, 0x83, | 2472 | 0x65, 0x46, 0xc7, 0x17, 0x2a, 0x02, 0xb0, 0x90, 0x79, 0x16, 0x7d, 0xe8, |
2453 | 0xd6, 0x36, 0xad, 0x1d, 0x79, 0x18, 0xfc, 0x8e, 0x1a, 0x93, 0x67, 0x17, | 2473 | 0xdf, 0xe5, 0x2a, 0xe3, 0x09, 0x7a, 0xb3, 0xaa, 0xd2, 0xbf, 0x20, 0x0f, |
2454 | 0xa7, 0x16, 0xca, 0x3a, 0x60, 0xc1, 0xf3, 0x51, 0xf4, 0xa1, 0x7f, 0x97, | 2474 | 0xc4, 0xbb, 0xe3, 0xb0, 0xc1, 0x5e, 0xc4, 0xab, 0x7e, 0x95, 0xf6, 0x72, |
2455 | 0x2a, 0x5c, 0xa7, 0xcb, 0xbb, 0x15, 0x43, 0x7e, 0x8e, 0xbc, 0xee, 0x3d, | 2475 | 0xcc, 0xd8, 0xa3, 0xe1, 0x59, 0xc0, 0xef, 0x20, 0xf2, 0xc2, 0x6b, 0xe0, |
2456 | 0xfb, 0xe2, 0x14, 0x6c, 0xb0, 0x0f, 0xf1, 0x0a, 0xb5, 0xd0, 0x1e, 0xc6, | 2476 | 0x5c, 0x03, 0x9e, 0x79, 0x8b, 0x01, 0x87, 0xe1, 0x35, 0xf0, 0xd6, 0x09, |
2457 | 0x8c, 0x01, 0x13, 0xcf, 0x3c, 0x7e, 0x87, 0x91, 0xe7, 0x5d, 0x7b, 0xcd, | 2477 | 0x1d, 0x34, 0xf4, 0x49, 0xfa, 0x8c, 0x2e, 0x73, 0x27, 0x85, 0xe7, 0x7d, |
2458 | 0x27, 0xc1, 0x93, 0xb6, 0x18, 0xd6, 0x10, 0xde, 0x04, 0x6d, 0x5d, 0xd0, | 2478 | 0x3f, 0xf9, 0xd1, 0x79, 0x96, 0xb3, 0x0a, 0x1d, 0xe2, 0x31, 0xbf, 0x63, |
2459 | 0xc1, 0xb4, 0x35, 0x21, 0xdd, 0x96, 0xca, 0x9d, 0x34, 0xce, 0x07, 0x7e, | 2479 | 0x7f, 0xce, 0xf4, 0x8c, 0x51, 0x1b, 0x9b, 0xb9, 0x5c, 0xf5, 0xfb, 0xe1, |
2460 | 0xf2, 0xe3, 0xf3, 0xe4, 0xb3, 0x01, 0x1d, 0xe2, 0x98, 0xef, 0xe8, 0xcf, | 2480 | 0x1c, 0x29, 0x61, 0x4c, 0x65, 0x3f, 0x5d, 0x80, 0xad, 0xf2, 0x78, 0x9c, |
2461 | 0x89, 0x2f, 0x7d, 0x30, 0x8b, 0xc3, 0x5c, 0xaa, 0x04, 0xfd, 0x68, 0x4e, | 2481 | 0xe4, 0x19, 0x6c, 0x39, 0x4f, 0xa9, 0x47, 0xc7, 0x66, 0x4c, 0x3e, 0x57, |
2462 | 0xb4, 0x28, 0xa6, 0xd2, 0x4f, 0xe7, 0x61, 0xab, 0x1c, 0x8f, 0x8b, 0x92, | 2482 | 0x9d, 0xa6, 0x2b, 0xe1, 0xb9, 0xf2, 0x19, 0xa1, 0x0e, 0xad, 0x3e, 0x89, |
2463 | 0xc1, 0x26, 0x79, 0x52, 0x8f, 0x56, 0xa7, 0x66, 0x6c, 0xca, 0xd5, 0x92, | 2483 | 0x73, 0x15, 0x41, 0xcd, 0x02, 0x3f, 0x30, 0xc7, 0xe7, 0x8b, 0x3a, 0xb2, |
2464 | 0xe9, 0x72, 0x24, 0x57, 0xca, 0x08, 0x75, 0x66, 0xe5, 0xdb, 0x90, 0xab, | 2484 | 0x8a, 0x3c, 0xac, 0x4a, 0x09, 0xbf, 0xe6, 0x3a, 0x85, 0x3a, 0x05, 0xe7, |
2465 | 0x1e, 0xd6, 0x20, 0xf0, 0x03, 0x73, 0x94, 0x2f, 0xea, 0xc4, 0x0a, 0xf2, | 2485 | 0x57, 0x99, 0x03, 0x8d, 0x24, 0x9e, 0x4b, 0x78, 0xa6, 0xf0, 0x3c, 0x87, |
2466 | 0xb0, 0x8a, 0xc4, 0x83, 0x1a, 0xea, 0x19, 0xd4, 0x1d, 0x90, 0x5f, 0x79, | 2486 | 0x67, 0x3f, 0x9e, 0x75, 0xb6, 0x8f, 0x20, 0xef, 0xf9, 0x08, 0x3f, 0xb0, |
2467 | 0x0e, 0x38, 0x12, 0x78, 0x2e, 0xe1, 0x99, 0xc4, 0xf3, 0x2c, 0x9e, 0xfd, | 2487 | 0x93, 0x02, 0xdb, 0x34, 0xfd, 0x65, 0x23, 0x47, 0x3f, 0x68, 0x8c, 0xd2, |
2468 | 0x78, 0xd6, 0x68, 0x1f, 0x61, 0xde, 0xf3, 0x31, 0x7a, 0x60, 0x27, 0x79, | 2488 | 0x5f, 0x34, 0xb2, 0xf4, 0xfd, 0x86, 0x45, 0xcf, 0x36, 0x86, 0xe9, 0x7b, |
2469 | 0xda, 0xb4, 0x7c, 0xaf, 0x9e, 0x91, 0xbf, 0xad, 0x1f, 0x94, 0xbf, 0xa9, | 2489 | 0x8d, 0x0c, 0xd7, 0x90, 0xc8, 0xe1, 0xd2, 0xf0, 0xcd, 0x17, 0xe8, 0x2b, |
2470 | 0x8f, 0xca, 0x5f, 0xd7, 0x1d, 0x79, 0xb9, 0xbe, 0x5f, 0xfe, 0xaa, 0x3e, | 2490 | 0x6e, 0x03, 0x3e, 0x47, 0xfa, 0xcb, 0xe3, 0x76, 0xfd, 0x3a, 0x2a, 0x3e, |
2471 | 0xcc, 0x9a, 0x10, 0x39, 0x5c, 0x0a, 0xbe, 0xf9, 0xbc, 0x3c, 0xe8, 0xd5, | 2491 | 0xa5, 0x23, 0xcf, 0x54, 0xb9, 0x8e, 0xa3, 0x47, 0xad, 0xbb, 0x13, 0x7c, |
2472 | 0xe1, 0x73, 0x28, 0xff, 0x8b, 0x53, 0xd9, 0xda, 0x75, 0x52, 0x78, 0xd6, | 2492 | 0xf6, 0xc2, 0xe4, 0xba, 0xe6, 0x04, 0xc3, 0xa1, 0x1e, 0x56, 0x90, 0xbf, |
2473 | 0x42, 0x9e, 0x69, 0xb0, 0x2e, 0x93, 0xc7, 0x9c, 0x3b, 0xe2, 0x94, 0xbd, | 2493 | 0xb4, 0xd0, 0x64, 0xd2, 0x58, 0x71, 0xd4, 0x74, 0xe0, 0x8f, 0x26, 0x00, |
2474 | 0x6e, 0xb3, 0x4e, 0x39, 0x49, 0x38, 0xd4, 0xbb, 0x1a, 0xf2, 0x97, 0x16, | 2494 | 0x87, 0x35, 0xdd, 0x38, 0xad, 0x9d, 0x86, 0x2d, 0x58, 0xa8, 0xa5, 0x93, |
2475 | 0x99, 0x48, 0xa4, 0x57, 0x5c, 0x23, 0x19, 0xfa, 0xa3, 0x3b, 0x01, 0x87, | 2495 | 0x31, 0xf8, 0x3e, 0x99, 0x9f, 0x48, 0xdf, 0xe2, 0xfb, 0xd2, 0xb0, 0xc6, |
2476 | 0x3d, 0xbd, 0x0e, 0x59, 0x7b, 0x1e, 0xb6, 0xe0, 0xa0, 0x56, 0x4e, 0xc4, | 2496 | 0xe4, 0x39, 0x3b, 0x98, 0xe3, 0xf8, 0xa8, 0x03, 0xb6, 0x11, 0xc4, 0x90, |
2477 | 0xe0, 0xfb, 0x54, 0x7e, 0xa2, 0x7c, 0x4b, 0xe0, 0x4b, 0xa3, 0x9a, 0x91, | 2497 | 0xed, 0x34, 0xd9, 0x37, 0x4e, 0x04, 0xfe, 0x71, 0x85, 0x1e, 0x76, 0x07, |
2478 | 0x73, 0xd9, 0x70, 0x8e, 0xf1, 0xd1, 0x02, 0xec, 0x72, 0x18, 0x43, 0xb6, | 2498 | 0xec, 0xb7, 0x11, 0x7b, 0x94, 0x96, 0x30, 0x2f, 0xda, 0x0d, 0xde, 0x3c, |
2479 | 0xe2, 0xa4, 0x6f, 0x3c, 0x16, 0xfa, 0xc7, 0x15, 0x39, 0xe1, 0x0d, 0x66, | 2499 | 0xef, 0x30, 0xea, 0xf3, 0x74, 0x42, 0xa3, 0xbf, 0x9f, 0x35, 0xf4, 0xc3, |
2480 | 0xaf, 0x20, 0xf6, 0x68, 0x2d, 0x51, 0x5e, 0xb4, 0x0b, 0xb4, 0xf9, 0xfe, | 2500 | 0x02, 0x01, 0xae, 0xdd, 0xf3, 0xc6, 0x4d, 0xa3, 0x64, 0x8b, 0x0e, 0xfa, |
2481 | 0xdd, 0xac, 0xbf, 0xe3, 0xa6, 0xfc, 0x70, 0x36, 0x6d, 0x3d, 0xa2, 0xcf, | 2501 | 0xa7, 0x53, 0x1c, 0x93, 0xd7, 0x8f, 0xbd, 0x08, 0x3d, 0xa8, 0x2d, 0xb5, |
2482 | 0x40, 0xce, 0xbe, 0x7f, 0xd4, 0x4e, 0x9f, 0x9a, 0xd0, 0x3b, 0xe5, 0x27, | 2502 | 0x52, 0xad, 0xa6, 0xd1, 0xe5, 0x91, 0x01, 0xb9, 0x6e, 0xad, 0x9e, 0x40, |
2483 | 0xcf, 0x30, 0x26, 0xaf, 0x4e, 0x7d, 0x1f, 0x7a, 0x50, 0x5d, 0x6a, 0x95, | 2503 | 0x9e, 0xd7, 0x46, 0x8b, 0xbd, 0x52, 0xd9, 0xe1, 0xb7, 0x33, 0xd2, 0x6f, |
2484 | 0x6a, 0xd5, 0x94, 0x4b, 0x23, 0x83, 0x6a, 0xdf, 0x6a, 0x2d, 0x8e, 0x3c, | 2504 | 0x3b, 0x26, 0x9e, 0xf5, 0xb4, 0xbe, 0x95, 0x97, 0x67, 0xa9, 0xe8, 0x76, |
2485 | 0xaf, 0x4d, 0xa6, 0xfb, 0x94, 0xb2, 0xc3, 0x6f, 0x0f, 0x2b, 0xbf, 0xed, | 2505 | 0xa2, 0x42, 0xd9, 0x0d, 0x99, 0x70, 0x7f, 0x40, 0x77, 0x04, 0x62, 0xa0, |
2486 | 0xda, 0x78, 0xd6, 0x92, 0xd6, 0x66, 0x5a, 0x5e, 0x96, 0x82, 0x07, 0x1d, | 2506 | 0x36, 0xa0, 0x1f, 0x12, 0xff, 0xed, 0x7d, 0x51, 0x63, 0x39, 0xbe, 0x8e, |
2487 | 0x8b, 0xef, 0x02, 0x4f, 0xd8, 0x1f, 0xb4, 0x0a, 0x3a, 0x62, 0xa0, 0x39, | 2507 | 0xd8, 0xc2, 0xb1, 0x52, 0x91, 0x7a, 0xb7, 0xb0, 0xf4, 0xa6, 0xce, 0xfe, |
2488 | 0x68, 0x3d, 0xa8, 0xff, 0xd2, 0xff, 0x1d, 0x93, 0x7c, 0x7c, 0x1b, 0xb1, | 2508 | 0xe5, 0x7b, 0xf5, 0xdd, 0xc1, 0x98, 0xfd, 0x3b, 0x8f, 0xdb, 0xe9, 0xfb, |
2489 | 0x85, 0xb1, 0x52, 0x53, 0x7a, 0xb7, 0xb0, 0xf4, 0x53, 0x8b, 0xfe, 0x65, | 2509 | 0xb5, 0x9d, 0xb4, 0x58, 0xe3, 0xf7, 0xad, 0xb4, 0x50, 0x1b, 0xb8, 0xf2, |
2490 | 0xa5, 0xb6, 0x2b, 0x1c, 0xd3, 0xbf, 0x73, 0xdc, 0x2e, 0x2f, 0x57, 0xb7, | 2510 | 0x90, 0xe8, 0xa5, 0xd5, 0xeb, 0x6e, 0xd6, 0x3f, 0x2f, 0x20, 0x93, 0x89, |
2491 | 0xcb, 0x62, 0x95, 0xef, 0x5b, 0x65, 0xa1, 0x3a, 0x78, 0xa5, 0x57, 0xef, | 2511 | 0x0f, 0xe9, 0xdd, 0x91, 0x2e, 0x7a, 0xf5, 0x5e, 0xa3, 0x7a, 0xbf, 0x80, |
2492 | 0x93, 0xd5, 0xeb, 0x6e, 0xb4, 0xee, 0xd7, 0xc1, 0x93, 0x63, 0x1f, 0xc9, | 2512 | 0x3e, 0x8e, 0xc4, 0xd9, 0xce, 0xd0, 0xe7, 0x79, 0xe3, 0x4a, 0x5a, 0xb0, |
2493 | 0x07, 0x23, 0xdd, 0xf2, 0xd6, 0x7d, 0xe9, 0x17, 0xfe, 0x44, 0x87, 0x3e, | 2513 | 0x9e, 0xbd, 0x0c, 0xfd, 0x32, 0x4e, 0xfa, 0x3a, 0xc9, 0xb4, 0x99, 0x2e, |
2494 | 0x8e, 0x74, 0xd0, 0xce, 0xd0, 0xe7, 0x7c, 0xfa, 0x4a, 0x56, 0xa7, 0x9e, | 2514 | 0xce, 0xc7, 0x7c, 0x05, 0x34, 0xf1, 0xae, 0x3e, 0x00, 0x5a, 0xaf, 0x48, |
2495 | 0xfd, 0x00, 0xfa, 0x95, 0xae, 0x04, 0x3a, 0x49, 0xdc, 0xc4, 0x0b, 0xf9, | 2515 | 0x59, 0x1c, 0xb6, 0x8c, 0x2b, 0x08, 0x51, 0xde, 0x65, 0x73, 0x20, 0x23, |
2496 | 0xd8, 0x6f, 0x00, 0x27, 0xde, 0xd5, 0x06, 0x81, 0xeb, 0x0d, 0xc5, 0x8b, | 2516 | 0xc4, 0x6e, 0xaa, 0xa5, 0x6e, 0xd6, 0xbf, 0x8b, 0x78, 0x80, 0x9a, 0xab, |
2497 | 0xbb, 0x9d, 0xf4, 0x15, 0x84, 0x28, 0xff, 0x92, 0x3d, 0x38, 0x3c, 0xa0, | 2517 | 0xb4, 0x4e, 0xeb, 0xc7, 0x2e, 0x9a, 0xac, 0x8b, 0x6c, 0xc3, 0x3f, 0x44, |
2498 | 0xef, 0x92, 0x6a, 0xf2, 0x46, 0xeb, 0xbb, 0x88, 0x07, 0xd9, 0x44, 0xfa, | 2518 | 0x4e, 0xaa, 0xd3, 0x53, 0x75, 0xf6, 0x5d, 0x4c, 0x8b, 0xeb, 0x82, 0x7d, |
2499 | 0xd4, 0x45, 0x59, 0x9d, 0xba, 0x60, 0x53, 0x17, 0x69, 0xc3, 0xff, 0x80, | 2519 | 0xfa, 0xdd, 0xe0, 0xc1, 0x19, 0xc6, 0x3b, 0xcc, 0xab, 0x9f, 0xe5, 0x73, |
2500 | 0x9c, 0xd4, 0x92, 0x4a, 0x8d, 0xbe, 0x8b, 0xb8, 0x58, 0x17, 0xec, 0xb5, | 2520 | 0x6b, 0x61, 0xdc, 0x4c, 0x9a, 0x37, 0xb3, 0x45, 0x46, 0x03, 0xfa, 0x5e, |
2501 | 0x4e, 0x80, 0x06, 0x77, 0x3f, 0xde, 0x61, 0xde, 0xf8, 0x3c, 0xe5, 0xd6, | 2521 | 0xc1, 0xeb, 0xbd, 0x8b, 0x75, 0xdf, 0x01, 0xaf, 0x03, 0xc0, 0x45, 0x0c, |
2502 | 0xc2, 0xb5, 0xc3, 0x59, 0xbd, 0x7f, 0x0b, 0x8f, 0x06, 0xad, 0x43, 0x3a, | 2522 | 0x4d, 0x35, 0xaf, 0xf1, 0x9a, 0x5c, 0xe3, 0x54, 0x1d, 0x39, 0xe0, 0xc6, |
2503 | 0xf7, 0xfb, 0x2f, 0xec, 0xfb, 0x3e, 0x68, 0x1d, 0xc4, 0x5a, 0xc4, 0xd0, | 2523 | 0x1a, 0x98, 0xab, 0x0b, 0xec, 0xf3, 0x57, 0x65, 0xfe, 0xac, 0x22, 0xff, |
2504 | 0x64, 0xe3, 0x1e, 0x3f, 0x52, 0x7b, 0x3c, 0x5b, 0x43, 0x0e, 0xb8, 0xbe, | 2524 | 0xb9, 0x3c, 0xf2, 0x4c, 0x90, 0x5f, 0x3c, 0x07, 0x59, 0xc7, 0xe8, 0xb5, |
2505 | 0x07, 0xe6, 0x6a, 0x3a, 0xce, 0x69, 0x2a, 0xb9, 0x5c, 0x1a, 0x21, 0x7f, | 2525 | 0x59, 0xae, 0x2f, 0x0f, 0x51, 0x39, 0xb1, 0x7e, 0x6c, 0xca, 0x44, 0x4d, |
2506 | 0x6f, 0xef, 0x61, 0x2c, 0x37, 0x32, 0x2f, 0x85, 0x79, 0x46, 0x4c, 0x7e, | 2526 | 0x8f, 0x38, 0x50, 0xde, 0x37, 0xe0, 0xeb, 0x55, 0x3f, 0xe3, 0x3c, 0x27, |
2507 | 0x8c, 0xba, 0x6b, 0x12, 0xfe, 0x7f, 0x61, 0xef, 0x20, 0x68, 0x40, 0x7d, | 2527 | 0xcf, 0xa4, 0x2c, 0x5a, 0xe9, 0x8b, 0x5a, 0x1a, 0xf8, 0x3c, 0x77, 0x29, |
2508 | 0x9a, 0x54, 0xf1, 0x7c, 0xca, 0x05, 0x8e, 0x9c, 0xc2, 0xfd, 0xa6, 0x2c, | 2528 | 0x38, 0xcf, 0x6f, 0x83, 0x1f, 0xf4, 0xeb, 0x3d, 0x81, 0xff, 0x4b, 0x40, |
2509 | 0x01, 0xf7, 0x38, 0xf9, 0x00, 0xdc, 0x33, 0x9c, 0x57, 0x32, 0xc0, 0x7c, | 2529 | 0x57, 0x87, 0xf4, 0xc3, 0x14, 0x0b, 0xfc, 0x5f, 0x82, 0x5e, 0x3d, 0xad, |
2510 | 0x2d, 0x05, 0xbc, 0xbd, 0xa1, 0xff, 0x8b, 0x43, 0x57, 0xf7, 0x59, 0x77, | 2530 | 0x42, 0x87, 0x58, 0x7f, 0xfa, 0xbb, 0x37, 0xf5, 0x87, 0xdf, 0xad, 0x1f, |
2511 | 0x4b, 0x2c, 0xf4, 0x7f, 0x71, 0x79, 0xeb, 0x79, 0xe8, 0x7d, 0x9c, 0xfa, | 2531 | 0x73, 0xc0, 0x63, 0x7e, 0xae, 0x95, 0x0a, 0xd5, 0x18, 0x4d, 0x65, 0x91, |
2512 | 0x93, 0xe8, 0xd9, 0xd0, 0x9f, 0x46, 0xfc, 0xad, 0x92, 0xaf, 0xc4, 0x80, | 2532 | 0x73, 0x23, 0xfe, 0xe4, 0xa1, 0x4b, 0x85, 0x1a, 0xeb, 0x72, 0x29, 0xd0, |
2513 | 0x17, 0x39, 0xf7, 0x28, 0xf1, 0x62, 0x5c, 0xa5, 0x2e, 0x17, 0x43, 0x5d, | 2533 | 0xe5, 0x78, 0x40, 0xfb, 0x6f, 0xa0, 0xcb, 0x46, 0x7a, 0x55, 0x70, 0x7d, |
2514 | 0xee, 0x08, 0x71, 0xaf, 0x41, 0x97, 0xd3, 0xa9, 0x55, 0x9d, 0xf5, 0xd5, | 2534 | 0xd5, 0x27, 0x6b, 0x64, 0x15, 0xf6, 0x55, 0xac, 0x70, 0x2c, 0x62, 0xdb, |
2515 | 0x4e, 0x55, 0xf3, 0x1a, 0xb0, 0xaf, 0x42, 0x99, 0xb1, 0x88, 0xb6, 0x75, | 2535 | 0xa2, 0xe3, 0xcc, 0x7f, 0xb1, 0x32, 0x2a, 0x8a, 0x8d, 0xac, 0x28, 0xba, |
2516 | 0x71, 0x6a, 0x12, 0x35, 0x6c, 0xa1, 0x7c, 0x50, 0x2f, 0xd4, 0x47, 0xf5, | 2536 | 0xcc, 0xdf, 0x3e, 0xf0, 0xad, 0xc8, 0x3a, 0x78, 0xa1, 0xf1, 0xae, 0xb7, |
2517 | 0x82, 0x47, 0x7d, 0xdb, 0x6b, 0x2d, 0x28, 0x1e, 0x27, 0x65, 0xa1, 0xfe, | 2537 | 0xb0, 0x6f, 0x07, 0xfa, 0xd0, 0xfd, 0x71, 0x3e, 0xdf, 0xeb, 0x99, 0xaf, |
2518 | 0x81, 0x5f, 0xda, 0xbb, 0x0d, 0x7d, 0xe8, 0xfe, 0x38, 0xe5, 0x7b, 0x3d, | 2538 | 0xb4, 0x2d, 0x58, 0xde, 0x49, 0x5a, 0x1e, 0x7c, 0xa9, 0x8b, 0x73, 0xb4, |
2519 | 0xe9, 0x42, 0x50, 0x27, 0xbf, 0x13, 0x72, 0x66, 0xe8, 0x7b, 0xdd, 0xcc, | 2539 | 0xb3, 0x83, 0x4c, 0x1f, 0x7c, 0x24, 0x93, 0xb4, 0xe8, 0xf2, 0x1a, 0x2c, |
2520 | 0xd1, 0x96, 0x87, 0x88, 0x1f, 0x74, 0x24, 0x12, 0xb2, 0xe8, 0x71, 0x8f, | 2540 | 0x17, 0xf8, 0xba, 0x39, 0x9d, 0x1e, 0x96, 0xe7, 0xc7, 0xba, 0xc5, 0xf7, |
2521 | 0xd5, 0x29, 0xf2, 0xb2, 0x30, 0x67, 0xc9, 0x09, 0x25, 0x3f, 0x9e, 0x9b, | 2541 | 0x4d, 0x2a, 0xe5, 0x13, 0x03, 0xfa, 0x43, 0x64, 0x5c, 0x59, 0x53, 0x8d, |
2522 | 0xf7, 0x47, 0x86, 0x4c, 0xc6, 0x07, 0xad, 0x47, 0x25, 0x7d, 0x65, 0xcd, | 2542 | 0xea, 0x24, 0xe2, 0xea, 0xc2, 0xbc, 0x4a, 0x7b, 0x64, 0x1d, 0xc6, 0x67, |
2523 | 0x48, 0xbf, 0x30, 0x81, 0xb8, 0xba, 0x30, 0x6f, 0x88, 0xab, 0xea, 0x30, | 2543 | 0x64, 0x9c, 0x84, 0x35, 0x06, 0x7b, 0xff, 0x8d, 0xa6, 0xbd, 0x77, 0xd2, |
2524 | 0xca, 0x28, 0x5d, 0x81, 0x35, 0x86, 0x67, 0xbf, 0xa7, 0xe1, 0xec, 0x5d, | 2544 | 0xc5, 0xd3, 0x9f, 0x85, 0xdd, 0xb3, 0x5c, 0xb5, 0xf4, 0x11, 0xe4, 0x19, |
2525 | 0x72, 0xe1, 0xf9, 0xcf, 0xc3, 0xee, 0x5f, 0x81, 0x2c, 0xcc, 0xd4, 0x71, | 2545 | 0x73, 0x04, 0xf9, 0x22, 0x7f, 0xb6, 0x53, 0xe1, 0xb9, 0xb0, 0xbc, 0x77, |
2526 | 0xe4, 0x19, 0xcf, 0xc9, 0xa0, 0x55, 0x42, 0xfe, 0x0c, 0xbe, 0xa3, 0xbd, | 2546 | 0x49, 0xf9, 0x0b, 0x29, 0xff, 0x1b, 0xa8, 0xdc, 0xeb, 0xdb, 0x38, 0xbf, |
2527 | 0xa2, 0x6c, 0x60, 0x41, 0xc7, 0xb8, 0x9f, 0x7c, 0xe2, 0x78, 0xb7, 0x2c, | 2547 | 0x13, 0xa0, 0xe1, 0xbf, 0xe3, 0xf1, 0x67, 0x90, 0x1f, 0xf1, 0xbb, 0x9a, |
2528 | 0xf4, 0x05, 0x36, 0xce, 0x77, 0x03, 0xc0, 0x11, 0xbc, 0xe3, 0xf8, 0xb7, | 2548 | 0x8f, 0x47, 0x3d, 0x4c, 0x07, 0xef, 0xfe, 0x10, 0x6b, 0xb2, 0x8c, 0xc3, |
2529 | 0x64, 0x40, 0xbd, 0xab, 0xaa, 0x75, 0x25, 0xe9, 0x0d, 0xe5, 0xf7, 0x18, | 2549 | 0xf9, 0x0e, 0xf2, 0x6d, 0x29, 0x94, 0x3b, 0x12, 0x8c, 0x7a, 0x92, 0x7e, |
2530 | 0xf6, 0x24, 0x8f, 0xa3, 0xf9, 0x4e, 0x09, 0x6c, 0x29, 0xe2, 0xbb, 0x25, | 2550 | 0xad, 0x9e, 0xa2, 0x89, 0x7a, 0x3f, 0x15, 0xea, 0x69, 0x9c, 0xc1, 0x13, |
2531 | 0x47, 0x6b, 0x09, 0xb9, 0xa7, 0x96, 0x94, 0x2f, 0xd7, 0xfa, 0x25, 0x0f, | 2551 | 0xdd, 0xbc, 0xb7, 0xfc, 0x12, 0xf6, 0x23, 0x98, 0xd7, 0x1a, 0x1d, 0x71, |
2532 | 0x39, 0x4e, 0x8e, 0x3e, 0xd9, 0xc3, 0xb3, 0xe5, 0x96, 0xd2, 0x2f, 0x88, | 2552 | 0x43, 0x7e, 0xe2, 0x01, 0x7f, 0x5a, 0x30, 0x8e, 0x05, 0x3c, 0x34, 0xd3, |
2533 | 0x4e, 0x5a, 0xab, 0x72, 0xdc, 0x8b, 0xe8, 0xe9, 0x08, 0xe9, 0x33, 0xc3, | 2553 | 0x8b, 0x83, 0x96, 0x0d, 0x3a, 0x67, 0x02, 0x3a, 0xec, 0x47, 0xc0, 0xeb, |
2534 | 0x71, 0x2c, 0xa4, 0xa1, 0x11, 0x5f, 0x07, 0x70, 0x65, 0x81, 0xe7, 0xa5, | 2554 | 0x44, 0x8a, 0x96, 0x5c, 0xe6, 0x63, 0x27, 0x95, 0x93, 0xdc, 0x7f, 0x0e, |
2535 | 0x10, 0x0f, 0xfd, 0x08, 0x68, 0x3d, 0x96, 0x94, 0x25, 0x8f, 0x74, 0x6c, | 2555 | 0x7a, 0xc6, 0x74, 0x76, 0x70, 0x7e, 0xb3, 0x45, 0xc6, 0x47, 0xeb, 0x25, |
2536 | 0x97, 0x52, 0x82, 0xfd, 0x57, 0xa0, 0x6f, 0xc4, 0xb3, 0x8d, 0xf9, 0xcd, | 2556 | 0xc8, 0x98, 0xe5, 0xcb, 0x70, 0x71, 0x5a, 0xf8, 0x25, 0x3e, 0xbf, 0x21, |
2537 | 0x26, 0x1e, 0x3f, 0x5c, 0x2b, 0x82, 0xc7, 0xe4, 0x2f, 0xe1, 0xe0, 0xaf, | 2557 | 0xe4, 0xf8, 0xac, 0x0b, 0x3b, 0x03, 0xbd, 0xf2, 0xd7, 0x2c, 0xcc, 0x75, |
2538 | 0xbf, 0x40, 0xf9, 0xed, 0x43, 0x8e, 0x6f, 0x07, 0xba, 0x69, 0x6d, 0xec, | 2558 | 0xe2, 0xac, 0x78, 0xdd, 0x76, 0xba, 0x07, 0x76, 0x9f, 0xaf, 0xf1, 0xfa, |
2539 | 0x99, 0x9f, 0xeb, 0x82, 0xac, 0xb8, 0x6f, 0xbb, 0x1c, 0x83, 0xdd, 0xe7, | 2559 | 0x13, 0xd0, 0xa3, 0x1f, 0xcb, 0xf5, 0x0b, 0x4b, 0xbd, 0x01, 0x3e, 0xe3, |
2540 | 0xaa, 0xdc, 0xff, 0x18, 0xf4, 0xe8, 0x2d, 0xb5, 0x7f, 0x7e, 0xa9, 0x2f, | 2560 | 0x76, 0x6e, 0xc3, 0x6d, 0xa5, 0x03, 0x55, 0xfd, 0x63, 0xf0, 0x7f, 0x13, |
2541 | 0x5c, 0xcf, 0xb5, 0x5d, 0x5b, 0xd6, 0xb6, 0xca, 0xa1, 0x8a, 0x75, 0x8d, | 2561 | 0xf8, 0x82, 0xce, 0x64, 0x19, 0x9f, 0xe9, 0x00, 0xae, 0x96, 0xfc, 0x04, |
2542 | 0xf5, 0xbf, 0x8f, 0xf5, 0xba, 0x9c, 0x1e, 0xe5, 0x7a, 0xe2, 0x01, 0x5c, | 2562 | 0x3a, 0x09, 0x59, 0xef, 0xe7, 0x6b, 0xad, 0x94, 0xaf, 0x86, 0xb4, 0x98, |
2543 | 0x35, 0xf1, 0x29, 0x78, 0xe2, 0xaa, 0xde, 0xcf, 0x55, 0x5b, 0x25, 0x57, | 2563 | 0xce, 0x87, 0xa8, 0x87, 0xbf, 0x2c, 0x69, 0x4d, 0x49, 0x5a, 0x78, 0x5f, |
2544 | 0x89, 0x70, 0x11, 0xcf, 0x47, 0xa8, 0x87, 0xbf, 0xaa, 0x70, 0x4d, 0x2a, | 2564 | 0x63, 0x9f, 0x73, 0x3b, 0xf0, 0xe3, 0xec, 0xff, 0x69, 0x21, 0xd1, 0x41, |
2545 | 0x5c, 0x78, 0x5f, 0xa5, 0xcf, 0xb9, 0x15, 0xeb, 0x3b, 0xe8, 0xff, 0xa5, | 2565 | 0x0b, 0xb2, 0xa6, 0x6f, 0xf7, 0x7d, 0x4d, 0xa2, 0x0d, 0xef, 0x77, 0xc1, |
2546 | 0x14, 0xef, 0x94, 0x92, 0xaa, 0xe9, 0xdb, 0x95, 0xaf, 0x29, 0xc5, 0xdb, | 2566 | 0xe6, 0x87, 0x90, 0x5b, 0x74, 0x62, 0x2e, 0xbd, 0x6d, 0x6e, 0x3b, 0xff, |
2547 | 0xf0, 0xbe, 0x13, 0x36, 0xbf, 0x0f, 0xb9, 0x45, 0x17, 0xeb, 0xdc, 0x2d, | 2567 | 0xb1, 0x6d, 0xfc, 0xeb, 0x80, 0xeb, 0xc1, 0x9a, 0x3e, 0x5c, 0x01, 0x70, |
2548 | 0x73, 0x5b, 0xe9, 0x8f, 0x6d, 0xa1, 0x3f, 0x06, 0xb8, 0x5e, 0xec, 0x19, | 2568 | 0xd3, 0x73, 0x90, 0xb3, 0xc5, 0x7e, 0x85, 0xe3, 0xe4, 0x75, 0x92, 0x97, |
2549 | 0xc0, 0xe5, 0x01, 0x37, 0x3d, 0x07, 0x3e, 0x3b, 0xf4, 0x2b, 0x8c, 0x93, | 2569 | 0xe9, 0x25, 0x05, 0x70, 0xbd, 0xc0, 0x0d, 0xc7, 0xbe, 0x1c, 0xaa, 0xa0, |
2550 | 0xd7, 0x29, 0x5a, 0xa6, 0x97, 0xfe, 0x1b, 0xe7, 0xea, 0xc3, 0xda, 0x68, | 2570 | 0xf3, 0xcd, 0x9a, 0xbc, 0xbb, 0xc0, 0x19, 0xf4, 0x24, 0x78, 0xef, 0xe5, |
2551 | 0x1c, 0xf0, 0xe1, 0x69, 0xe0, 0x99, 0xab, 0xaa, 0xbb, 0x0b, 0xc8, 0x60, | 2571 | 0xda, 0xa7, 0xc9, 0xec, 0xba, 0x26, 0x79, 0xb1, 0xac, 0x98, 0x5f, 0xe6, |
2552 | 0x7b, 0x9c, 0x67, 0x2f, 0x55, 0x3f, 0x8b, 0x67, 0xd7, 0x35, 0xf0, 0x8b, | 2572 | 0x15, 0x7a, 0x8a, 0x38, 0xe4, 0x58, 0xa8, 0x0b, 0x13, 0x2a, 0x15, 0xb2, |
2553 | 0xbc, 0x22, 0xbd, 0xa4, 0x95, 0xf7, 0x48, 0xb0, 0x37, 0x07, 0x7a, 0x1c, | 2573 | 0x3a, 0xf2, 0x73, 0xbe, 0xb7, 0x65, 0xbb, 0xd4, 0xf9, 0xae, 0x34, 0x26, |
2554 | 0x37, 0x24, 0x3f, 0x6a, 0x21, 0x3f, 0xe7, 0x3d, 0x2c, 0xed, 0xd2, 0xe2, | 2574 | 0x4c, 0x8e, 0xb5, 0x9a, 0xdc, 0xfb, 0x91, 0x25, 0xbe, 0xbb, 0x4d, 0xf3, |
2555 | 0xdd, 0x67, 0x4c, 0xb7, 0x19, 0x6b, 0x4d, 0x75, 0xf6, 0xe3, 0x4b, 0xbc, | 2575 | 0x5d, 0x5f, 0x86, 0xb0, 0xf7, 0x07, 0x97, 0x4c, 0x7a, 0xa4, 0x9e, 0xa1, |
2556 | 0x8b, 0x4d, 0xf1, 0xee, 0x6e, 0x98, 0xd7, 0x18, 0x8f, 0x2c, 0xd9, 0xf2, | 2576 | 0x87, 0xea, 0x86, 0x7e, 0x3f, 0x7c, 0x40, 0x71, 0xe3, 0x4e, 0xf7, 0x73, |
2557 | 0x78, 0x6d, 0x58, 0x1e, 0xad, 0xa5, 0xad, 0xfb, 0xe1, 0x03, 0x0a, 0xeb, | 2577 | 0x09, 0xae, 0x45, 0x34, 0xe4, 0x81, 0x2d, 0xa6, 0x9f, 0x17, 0x94, 0xb9, |
2558 | 0x77, 0xb4, 0x43, 0x71, 0xfa, 0x2f, 0x13, 0x79, 0x60, 0x8b, 0x1d, 0xe4, | 2578 | 0x66, 0x9b, 0x33, 0xf8, 0x1e, 0x47, 0xaf, 0xd1, 0xf6, 0xdc, 0xe1, 0xff, |
2559 | 0x05, 0x25, 0xd6, 0x6c, 0x73, 0x69, 0xde, 0xe3, 0x58, 0x55, 0xd9, 0x9a, | 2579 | 0x32, 0x6f, 0xe0, 0xf5, 0xd9, 0x5f, 0x23, 0x4f, 0x70, 0x91, 0x27, 0xb8, |
2560 | 0x3b, 0xfc, 0x5f, 0xe6, 0x0d, 0xdc, 0x9f, 0xfe, 0x1a, 0x79, 0x82, 0x87, | 2580 | 0xc8, 0x13, 0x5c, 0xe4, 0x09, 0x2e, 0xf2, 0x04, 0x17, 0x79, 0x82, 0x8b, |
2561 | 0x3c, 0xc1, 0x43, 0x9e, 0xe0, 0x21, 0x4f, 0xf0, 0x90, 0x27, 0x78, 0xc8, | 2581 | 0x3c, 0xc1, 0x45, 0x9e, 0x80, 0xd8, 0xed, 0xd7, 0x0b, 0x63, 0xc8, 0x7f, |
2562 | 0x13, 0x3c, 0xe4, 0x09, 0x1e, 0xf2, 0x04, 0xc4, 0xee, 0xa0, 0x5e, 0x18, | 2582 | 0xe1, 0xbf, 0xdc, 0xcf, 0x43, 0x4e, 0x7c, 0xdf, 0xc9, 0x31, 0x87, 0x63, |
2563 | 0x43, 0xfe, 0x0b, 0xff, 0xe5, 0xdd, 0x06, 0x3e, 0xf1, 0xfe, 0x92, 0x31, | 2583 | 0x33, 0xcf, 0xad, 0xee, 0x70, 0xf8, 0xdc, 0xa4, 0xef, 0xbb, 0x13, 0x73, |
2564 | 0x87, 0xb1, 0x99, 0x73, 0xab, 0xdb, 0x5c, 0xca, 0x4d, 0xf9, 0xbe, 0x3b, | 2584 | 0xe3, 0x41, 0x3e, 0xc2, 0x30, 0x61, 0xec, 0x66, 0x38, 0x1a, 0x75, 0x2c, |
2565 | 0x31, 0x37, 0x1e, 0xe6, 0x23, 0x84, 0x89, 0x62, 0x37, 0xe1, 0xe4, 0xa0, | 2585 | 0x05, 0x36, 0xc6, 0xf9, 0x8a, 0x1f, 0xb3, 0xfc, 0x5c, 0xf9, 0x75, 0xe4, |
2566 | 0xeb, 0x68, 0xb0, 0x31, 0xe6, 0x2b, 0x41, 0xcc, 0x0a, 0x72, 0xe5, 0xb7, | 2586 | 0x2c, 0x69, 0xe4, 0x2c, 0xfd, 0xc8, 0x4f, 0xf8, 0x8e, 0x3b, 0xbc, 0x63, |
2567 | 0x91, 0xb3, 0xa4, 0x90, 0xb3, 0xf4, 0x23, 0x3f, 0xe1, 0x9d, 0x75, 0x74, | 2587 | 0xb2, 0x95, 0xc3, 0xee, 0x98, 0x72, 0xb7, 0xcb, 0xb9, 0xb4, 0x99, 0x2e, |
2568 | 0xc7, 0x94, 0xd5, 0x8e, 0x7a, 0x63, 0xda, 0x3d, 0x1e, 0x73, 0x69, 0x3b, | 2588 | 0x0a, 0x31, 0xd7, 0x43, 0x1e, 0xe5, 0x47, 0xbe, 0x86, 0xbc, 0xf5, 0x9b, |
2569 | 0x55, 0xd0, 0xf5, 0xb9, 0x5e, 0xf1, 0x25, 0x37, 0xf2, 0x4d, 0xe4, 0xad, | 2589 | 0xf2, 0x3e, 0x6d, 0x7c, 0x90, 0xcf, 0x7c, 0xe5, 0x1a, 0xb9, 0x6b, 0x28, |
2570 | 0xcf, 0xa9, 0xfb, 0xb4, 0xf1, 0x21, 0xca, 0xbc, 0xf2, 0x09, 0xb9, 0x6b, | 2590 | 0x5f, 0xff, 0x1e, 0x50, 0x2c, 0xb0, 0xfc, 0x88, 0xba, 0xcf, 0x43, 0xe0, |
2571 | 0xc4, 0xdf, 0xe0, 0x1e, 0x50, 0x5f, 0x20, 0xff, 0x44, 0x7a, 0xce, 0x81, | 2591 | 0xe7, 0x63, 0x94, 0x58, 0xde, 0x89, 0x39, 0x9d, 0x7a, 0xe4, 0x5d, 0x12, |
2572 | 0xe1, 0xe7, 0x62, 0x12, 0x3f, 0xb3, 0x1d, 0x73, 0x96, 0xf4, 0xaa, 0xbb, | 2592 | 0x8e, 0xf2, 0xbc, 0xd6, 0x43, 0xed, 0x26, 0x89, 0xf3, 0x7c, 0xe3, 0xc0, |
2573 | 0x24, 0x88, 0xf2, 0xdc, 0x55, 0xc8, 0xcb, 0x16, 0xfd, 0x1c, 0x6f, 0x1c, | 2593 | 0x74, 0xd9, 0xbf, 0x5e, 0x3a, 0x96, 0xaf, 0x5d, 0x92, 0x3a, 0x75, 0xb8, |
2574 | 0x88, 0x97, 0xfe, 0x75, 0x65, 0x2a, 0x57, 0x5d, 0x51, 0x3a, 0x75, 0xb4, | 2594 | 0x5e, 0x40, 0x7d, 0xd4, 0x07, 0x18, 0x0d, 0xb5, 0x55, 0x48, 0x9b, 0x69, |
2575 | 0x96, 0x47, 0x7d, 0xd4, 0xd3, 0x2b, 0xed, 0x26, 0x6a, 0xab, 0x08, 0x37, | 2595 | 0x5e, 0x4d, 0xc8, 0x9a, 0xe7, 0xfc, 0xc6, 0x79, 0xe2, 0xac, 0x79, 0x9d, |
2576 | 0x71, 0xfe, 0x32, 0xae, 0x6a, 0x9e, 0x73, 0xeb, 0xf2, 0x84, 0xac, 0xb9, | 2596 | 0x4b, 0xc7, 0xca, 0x55, 0x23, 0xc5, 0xb5, 0xb2, 0xad, 0x5f, 0x3a, 0x76, |
2577 | 0xcf, 0xca, 0x54, 0xa9, 0x92, 0x4e, 0xb2, 0x56, 0xce, 0x5a, 0x2b, 0x53, | 2597 | 0x02, 0x34, 0x16, 0x91, 0x1b, 0xa8, 0x72, 0xed, 0x4b, 0xc7, 0xa6, 0xab, |
2578 | 0x27, 0x81, 0x63, 0x11, 0xb9, 0x81, 0xa1, 0xf6, 0x5e, 0x99, 0x9a, 0xae, | 2598 | 0xfe, 0x7d, 0x96, 0xcf, 0x03, 0xe2, 0x60, 0xb6, 0x9d, 0xd4, 0x05, 0xff, |
2579 | 0x04, 0xf7, 0x59, 0x01, 0x0d, 0x8c, 0x57, 0xed, 0x62, 0x2c, 0x04, 0xf7, | 2599 | 0x5e, 0x4b, 0x48, 0x5c, 0xc6, 0x63, 0x7c, 0x0d, 0x78, 0x7c, 0x6e, 0x19, |
2580 | 0x5a, 0xba, 0x5a, 0xcb, 0x75, 0x5c, 0x6f, 0x62, 0x1d, 0xe5, 0x36, 0x8c, | 2600 | 0xe0, 0xf2, 0xd9, 0x31, 0x0f, 0x97, 0x8e, 0x95, 0x6a, 0xcd, 0x3c, 0x30, |
2581 | 0xb5, 0x94, 0x1d, 0x69, 0x58, 0x99, 0x2a, 0x56, 0x1b, 0x69, 0x20, 0x1e, | 2601 | 0x1d, 0xa6, 0x1b, 0xee, 0x87, 0xf7, 0x92, 0x20, 0xb1, 0xec, 0x79, 0xc5, |
2582 | 0xe2, 0x8d, 0xce, 0xc3, 0xb3, 0xc4, 0x45, 0x3f, 0xe3, 0xfb, 0x85, 0x91, | 2602 | 0x91, 0xfe, 0x20, 0xef, 0x3a, 0x81, 0xfc, 0x4e, 0x93, 0x7a, 0xee, 0x8f, |
2583 | 0xfe, 0x30, 0xef, 0x3a, 0x89, 0xfc, 0xce, 0x0c, 0xf4, 0x5c, 0x8d, 0xbf, | 2603 | 0xff, 0x4c, 0xc6, 0xa9, 0xb4, 0xe0, 0x79, 0x7e, 0xe2, 0x5d, 0xf6, 0x3b, |
2584 | 0xa3, 0xe2, 0x54, 0x4a, 0xe7, 0x3c, 0x9f, 0x78, 0x37, 0xba, 0x80, 0x39, | 2604 | 0x98, 0xc3, 0x78, 0x31, 0x84, 0x15, 0x01, 0x6c, 0x47, 0x93, 0x3c, 0x5b, |
2585 | 0x8c, 0x17, 0x23, 0x58, 0x3d, 0x84, 0xed, 0x6c, 0xe0, 0x67, 0x4b, 0xb8, | 2605 | 0x82, 0xf5, 0x98, 0x27, 0xde, 0xe7, 0xcf, 0xb1, 0x7f, 0x79, 0x07, 0xc7, |
2586 | 0x1f, 0x69, 0xe2, 0x39, 0x2f, 0x61, 0x2f, 0xd2, 0x45, 0x98, 0x38, 0x68, | 2606 | 0xf9, 0x18, 0xd6, 0xc5, 0x59, 0xba, 0xff, 0x5b, 0xd9, 0x37, 0xef, 0x89, |
2587 | 0x83, 0x2c, 0xbd, 0xff, 0x2d, 0xef, 0x1b, 0xcf, 0x44, 0x9e, 0x9a, 0x58, | 2607 | 0x65, 0xaa, 0x01, 0x87, 0xe1, 0x99, 0x46, 0x88, 0x83, 0x17, 0xe7, 0x7d, |
2588 | 0x43, 0x78, 0xe2, 0x88, 0xd6, 0xe0, 0xc5, 0xb9, 0x60, 0x9d, 0xbe, 0x7e, | 2608 | 0x3c, 0xb1, 0x71, 0xff, 0xf7, 0x49, 0xeb, 0x36, 0xf3, 0x1a, 0xae, 0x1f, |
2589 | 0xff, 0xf7, 0x69, 0xfb, 0x36, 0xd2, 0x1a, 0xed, 0x1f, 0xe1, 0x19, 0x0e, | 2609 | 0xd2, 0xc9, 0xf8, 0xe7, 0xb6, 0x81, 0x2f, 0xff, 0x4f, 0x31, 0x3c, 0xa1, |
2590 | 0xe4, 0xb6, 0xbe, 0x5e, 0xfd, 0x9f, 0x61, 0x78, 0x42, 0x17, 0x3f, 0x76, | 2610 | 0x8b, 0x1f, 0xb9, 0x47, 0xcd, 0x34, 0xd5, 0xa1, 0xe1, 0xfd, 0x05, 0xdf, |
2591 | 0x8f, 0x3a, 0xdc, 0x50, 0x87, 0x46, 0xf7, 0x17, 0xbc, 0x0f, 0x60, 0x7d, | 2611 | 0x07, 0x70, 0x7d, 0xcf, 0xdf, 0x1a, 0x9a, 0x6b, 0xc5, 0x67, 0x83, 0x58, |
2592 | 0xcf, 0x6f, 0x07, 0x8d, 0xb5, 0xe2, 0xcb, 0x61, 0x2c, 0xdb, 0x29, 0x59, | 2612 | 0xd6, 0x47, 0xb6, 0xc6, 0x75, 0xc3, 0x85, 0x60, 0xbc, 0x0b, 0xb1, 0x8d, |
2593 | 0x93, 0x75, 0xc3, 0xf9, 0x70, 0xbc, 0x03, 0xb1, 0x8d, 0xe3, 0x3a, 0xf8, | 2613 | 0xc7, 0x0d, 0xc8, 0x17, 0xba, 0x6c, 0xb5, 0x07, 0x75, 0x4b, 0xc2, 0xff, |
2594 | 0x0b, 0x5d, 0x76, 0xda, 0xc3, 0xba, 0x25, 0x1e, 0x7c, 0xe3, 0x19, 0xa6, | 2614 | 0x26, 0x94, 0x61, 0x3b, 0xe2, 0xba, 0xaf, 0x2d, 0x98, 0x0b, 0xed, 0x88, |
2595 | 0x1d, 0xb1, 0xee, 0x6b, 0x0b, 0xe7, 0x22, 0x3b, 0xa2, 0x1f, 0x36, 0xc3, | 2615 | 0xfd, 0xb0, 0x16, 0xcc, 0xb1, 0xbf, 0x15, 0xa8, 0x5d, 0xb8, 0x0f, 0x3a, |
2596 | 0x39, 0xfa, 0x5b, 0x1d, 0xb5, 0x0b, 0xfb, 0xc0, 0xb3, 0xd8, 0x68, 0x4b, | 2616 | 0x8b, 0xcd, 0xb6, 0x14, 0x3e, 0x13, 0x74, 0x6e, 0x3e, 0xf4, 0x5b, 0xf0, |
2597 | 0xd1, 0x33, 0x2e, 0x67, 0xe7, 0x23, 0xbf, 0x05, 0x9f, 0x32, 0x64, 0x86, | 2617 | 0x29, 0x83, 0x5a, 0xe0, 0xfb, 0xe3, 0xf0, 0x7d, 0x9d, 0x74, 0x00, 0x3e, |
2598 | 0xbe, 0xbf, 0x03, 0xbe, 0xaf, 0x4b, 0x0e, 0xc1, 0x67, 0x1d, 0x86, 0xcf, | 2618 | 0xeb, 0x20, 0x7c, 0xd6, 0x21, 0xd4, 0x8b, 0x63, 0x4b, 0xcd, 0xf7, 0xbc, |
2599 | 0x3a, 0x82, 0x7a, 0x71, 0x6c, 0xa9, 0xf1, 0x9e, 0x97, 0x35, 0x6a, 0x97, | 2619 | 0x5c, 0xa3, 0x76, 0x2a, 0x47, 0xe4, 0xf9, 0x97, 0x3c, 0xd5, 0xfc, 0x10, |
2600 | 0x76, 0x5c, 0xc9, 0xbf, 0xe8, 0x1b, 0xf6, 0x47, 0xd0, 0x01, 0xd6, 0x5d, | 2620 | 0x3a, 0xc0, 0x75, 0x57, 0xa8, 0x13, 0xf0, 0xb7, 0x56, 0x02, 0x3a, 0xb1, |
2601 | 0x91, 0x4e, 0xc0, 0xdf, 0x3a, 0x71, 0xe8, 0xc4, 0xd6, 0xfb, 0xe4, 0x61, | 2621 | 0xfd, 0x3e, 0x39, 0x03, 0xdb, 0x68, 0xb7, 0x85, 0xcc, 0xe5, 0x7c, 0xd9, |
2602 | 0xd8, 0x46, 0x7b, 0x56, 0xc5, 0x86, 0xa5, 0x80, 0xf7, 0xa5, 0x6a, 0xc0, | 2622 | 0x97, 0x6b, 0xbe, 0xec, 0xe1, 0x97, 0x41, 0x5f, 0xa3, 0x52, 0x5d, 0xa7, |
2603 | 0x7b, 0xf8, 0x65, 0xe0, 0x37, 0xa5, 0x58, 0xb3, 0xa4, 0x88, 0x7d, 0x8b, | 2623 | 0x12, 0xd6, 0x2d, 0x61, 0xdd, 0x12, 0xea, 0xbc, 0xe9, 0x7a, 0xf3, 0x77, |
2604 | 0xd8, 0xb7, 0x88, 0x3a, 0x6f, 0xba, 0xd6, 0xf8, 0x1d, 0xab, 0x33, 0xa4, | 2624 | 0xaf, 0x8e, 0x80, 0x77, 0xc6, 0x0d, 0xfb, 0x7a, 0xd3, 0xfe, 0xc3, 0xe7, |
2605 | 0x9d, 0x6b, 0xa3, 0xbe, 0xd5, 0x70, 0xfe, 0xe8, 0x79, 0x0a, 0xfc, 0x7f, | 2625 | 0x49, 0xc8, 0xff, 0x11, 0xc8, 0xff, 0x28, 0xea, 0x9b, 0xdf, 0x47, 0x7d, |
2606 | 0x0c, 0xfc, 0x3f, 0x81, 0xfa, 0xe6, 0x8f, 0x50, 0xdf, 0x7c, 0x0d, 0xf5, | 2626 | 0xf3, 0x7b, 0xa8, 0x6f, 0x8e, 0xa0, 0xbe, 0x99, 0x44, 0x7d, 0xf3, 0x65, |
2607 | 0xcd, 0x71, 0xd4, 0x37, 0x13, 0xa8, 0x6f, 0xbe, 0x0a, 0xff, 0xf1, 0x15, | 2627 | 0xf8, 0x8f, 0xfb, 0xe0, 0x3f, 0x26, 0xe0, 0x3f, 0xc6, 0xe5, 0xdd, 0xd3, |
2608 | 0xf8, 0x8f, 0x63, 0xf0, 0x1f, 0xe3, 0xea, 0xee, 0xe9, 0xa8, 0xb7, 0xf5, | 2628 | 0x61, 0x77, 0xfb, 0x9d, 0x4a, 0xb8, 0x16, 0xb7, 0x9f, 0x12, 0x99, 0x25, |
2609 | 0x4e, 0x25, 0xda, 0x8b, 0xed, 0x67, 0x22, 0x76, 0x11, 0x67, 0x1a, 0x93, | 2629 | 0xec, 0x69, 0x8c, 0x6a, 0x0d, 0xae, 0x6f, 0x2c, 0x72, 0x46, 0xb9, 0xbe, |
2610 | 0x6a, 0x9d, 0xf5, 0x8d, 0x23, 0xee, 0x41, 0xd6, 0x37, 0xc7, 0xb4, 0x09, | 2630 | 0x99, 0x50, 0x26, 0x91, 0xbf, 0xdf, 0x3f, 0xcc, 0x75, 0x4f, 0x42, 0xc9, |
2611 | 0xe4, 0xef, 0xf7, 0xef, 0x67, 0xdd, 0x13, 0xd7, 0x72, 0xaa, 0xee, 0x49, | 2631 | 0xcb, 0xba, 0xc7, 0xb8, 0xe0, 0x20, 0x75, 0x43, 0xee, 0x87, 0x3d, 0x1b, |
2612 | 0x9f, 0x77, 0x91, 0x22, 0x21, 0xf7, 0xc3, 0x99, 0xd3, 0x67, 0x73, 0xa0, | 2632 | 0xe7, 0xf2, 0xe0, 0xc5, 0xcf, 0xf9, 0xba, 0x03, 0xbf, 0x17, 0xa7, 0xc5, |
2613 | 0x25, 0xc8, 0xf9, 0x7a, 0x42, 0xbf, 0xd7, 0x21, 0x8b, 0xb3, 0xa8, 0x19, | 2633 | 0x59, 0xd4, 0x0c, 0xee, 0x3f, 0x28, 0x45, 0xe9, 0x1b, 0x75, 0x8c, 0x51, |
2614 | 0xbc, 0x1f, 0x6b, 0x05, 0xe5, 0x1b, 0x2d, 0x8c, 0x51, 0x2b, 0x7b, 0xff, | 2634 | 0x2b, 0xbb, 0xaf, 0x06, 0xe3, 0x11, 0x9a, 0x9a, 0x47, 0x6d, 0x7b, 0xfa, |
2615 | 0x1c, 0x8e, 0x47, 0x64, 0x72, 0x1e, 0xb5, 0xed, 0xf3, 0xff, 0xa8, 0xe5, | 2635 | 0x6f, 0x95, 0xbc, 0x1c, 0x5b, 0x18, 0x23, 0xdf, 0x3d, 0xfd, 0xd7, 0xc1, |
2616 | 0xd4, 0xd8, 0xc1, 0x18, 0xf9, 0xee, 0xf3, 0x7f, 0x1f, 0x8e, 0x8b, 0xa1, | 2636 | 0xb8, 0x14, 0xe8, 0x43, 0xc0, 0xab, 0x6e, 0xe1, 0xd9, 0x15, 0xe4, 0x1c, |
2617 | 0x3e, 0x84, 0xb4, 0x5a, 0x0e, 0x9e, 0xdd, 0x61, 0xce, 0xf1, 0x6a, 0xef, | 2637 | 0x2f, 0xf6, 0x6c, 0xfd, 0x3f, 0xef, 0xb8, 0xb5, 0x28, 0x64, 0x1e, 0xdf, |
2618 | 0xe6, 0xff, 0xd3, 0x8e, 0xad, 0x45, 0x13, 0xfb, 0x1b, 0x3b, 0x82, 0xfa, | 2638 | 0xe5, 0xd7, 0x67, 0xcd, 0xf3, 0x9d, 0x4d, 0xf3, 0xba, 0xfc, 0x0e, 0x5b, |
2619 | 0xac, 0x71, 0xbe, 0xab, 0x61, 0xfe, 0x8a, 0xfa, 0xce, 0x5a, 0x28, 0xb7, | 2639 | 0xac, 0xb4, 0xbd, 0x07, 0x0f, 0x4c, 0x4b, 0x83, 0x46, 0xd5, 0xa6, 0x0f, |
2620 | 0xfd, 0x0a, 0x1e, 0x58, 0x96, 0x86, 0x98, 0xe7, 0x7d, 0xe4, 0xf3, 0xfb, | 2640 | 0x3d, 0xfe, 0x5e, 0xe8, 0x88, 0x76, 0xf9, 0x0d, 0xcf, 0x91, 0xf7, 0x7a, |
2621 | 0x9f, 0xab, 0xb7, 0xab, 0x6f, 0x72, 0xae, 0xca, 0xb7, 0x61, 0xe7, 0x23, | 2641 | 0xb0, 0xf3, 0x91, 0x27, 0x77, 0xf9, 0xbe, 0x80, 0xfb, 0x49, 0xc5, 0xf7, |
2622 | 0xa5, 0x1d, 0x81, 0x2f, 0x60, 0x3f, 0xa1, 0x05, 0xfe, 0xfd, 0x8f, 0x81, | 2642 | 0xef, 0x8f, 0x83, 0x0e, 0x64, 0xed, 0x36, 0xd7, 0x70, 0x7a, 0x70, 0x97, |
2623 | 0x07, 0xbc, 0xf6, 0x1a, 0x6b, 0x38, 0x2b, 0xbc, 0x4b, 0xb9, 0x32, 0xc5, | 2643 | 0xa2, 0x1f, 0x9f, 0xe1, 0xb3, 0x96, 0xb4, 0xb9, 0xd6, 0xe3, 0xba, 0x2f, |
2624 | 0xdc, 0xba, 0xa4, 0x70, 0xb3, 0xd6, 0x63, 0xdd, 0x17, 0xc5, 0x80, 0x08, | 2644 | 0x8c, 0x01, 0x21, 0xad, 0xff, 0x48, 0xfa, 0x7c, 0xdf, 0x87, 0x9a, 0x8e, |
2625 | 0xd7, 0xcf, 0x13, 0x01, 0xdd, 0xe3, 0xa8, 0xe9, 0x08, 0x13, 0x8d, 0x1b, | 2645 | 0x61, 0xc2, 0x71, 0x73, 0xfd, 0x17, 0x0f, 0xee, 0xe1, 0x98, 0xd7, 0x58, |
2626 | 0xeb, 0xbf, 0x8e, 0xf0, 0x1e, 0xee, 0x4a, 0x90, 0x57, 0x29, 0x7c, 0x66, | 2646 | 0xc0, 0xab, 0x16, 0xd0, 0xfb, 0x77, 0xcf, 0xf7, 0x3d, 0x8c, 0xaf, 0x37, |
2627 | 0x88, 0xef, 0x3f, 0xfd, 0xc0, 0xf7, 0x70, 0xbd, 0xd5, 0xb0, 0xfe, 0x3c, | 2647 | 0xe1, 0x5f, 0x40, 0xae, 0xc7, 0x77, 0x26, 0xbb, 0xe5, 0x77, 0xc9, 0x77, |
2628 | 0x72, 0x3d, 0xde, 0x99, 0xec, 0x52, 0xdf, 0x19, 0xdf, 0x9f, 0xed, 0x94, | 2648 | 0x66, 0x3b, 0xe8, 0xed, 0x53, 0xc8, 0x59, 0x2d, 0x23, 0x73, 0x09, 0xb5, |
2629 | 0x5f, 0x3c, 0xe3, 0xfb, 0xe3, 0x4e, 0x7a, 0xf8, 0x4d, 0xd4, 0x1e, 0x67, | 2649 | 0xc7, 0x32, 0xdb, 0xc9, 0x08, 0xf3, 0x39, 0x90, 0x9e, 0xa6, 0x9b, 0x7b, |
2630 | 0x68, 0x27, 0x23, 0xa4, 0x73, 0x30, 0x35, 0x2d, 0x03, 0xbd, 0x41, 0x2e, | 2650 | 0xfc, 0x5c, 0xfc, 0xab, 0xca, 0x47, 0xf9, 0x16, 0xc1, 0x3a, 0x3f, 0x6a, |
2631 | 0xfe, 0x75, 0xed, 0xe3, 0x74, 0xeb, 0xe1, 0x3e, 0x3f, 0x6c, 0xd8, 0x27, | 2651 | 0x5a, 0x27, 0xdd, 0xb4, 0xce, 0x0a, 0xdb, 0x6c, 0xed, 0x4b, 0xd8, 0x73, |
2632 | 0xd5, 0xb0, 0xcf, 0x0a, 0x6d, 0xb6, 0x7a, 0x2f, 0xce, 0x5c, 0xdc, 0x75, | 2652 | 0x69, 0xf7, 0xcd, 0x7a, 0x32, 0xa8, 0xcb, 0x1e, 0x1e, 0x69, 0xa3, 0x6a, |
2633 | 0xa3, 0x95, 0x08, 0xeb, 0xb2, 0x47, 0x47, 0xda, 0xa4, 0xd2, 0x97, 0x5e, | 2653 | 0xaf, 0xb1, 0xf2, 0x1a, 0xf2, 0xf5, 0xe2, 0x08, 0xe6, 0x92, 0x03, 0x78, |
2634 | 0xf9, 0x11, 0xf2, 0xf5, 0xc2, 0x08, 0xe6, 0x12, 0x83, 0x78, 0xc7, 0xf9, | 2654 | 0xc7, 0xf3, 0x46, 0x8d, 0x84, 0xb1, 0x52, 0xa3, 0xcf, 0x01, 0xdf, 0x28, |
2635 | 0x74, 0x15, 0xb9, 0xe8, 0x4a, 0x55, 0x86, 0xb0, 0x3e, 0x5d, 0x14, 0xe1, | 2655 | 0x11, 0xf1, 0x3c, 0xf7, 0x25, 0x6f, 0xb5, 0xc0, 0x07, 0xa4, 0xd6, 0xb0, |
2636 | 0x3c, 0xfb, 0x8a, 0xb6, 0x6a, 0xe8, 0x03, 0x92, 0x6b, 0x38, 0xf3, 0x04, | 2656 | 0xe7, 0x49, 0xd4, 0x5f, 0x47, 0x37, 0xea, 0x61, 0x5e, 0xe7, 0x56, 0x65, |
2637 | 0xea, 0xaf, 0x13, 0xeb, 0xf5, 0x30, 0xf7, 0xb9, 0x59, 0x5b, 0x53, 0xb9, | 2657 | 0x4d, 0xe6, 0xc6, 0xfb, 0x95, 0x52, 0xd2, 0xdf, 0xe3, 0xef, 0xc2, 0x5f, |
2638 | 0xf1, 0x01, 0xad, 0x98, 0x08, 0xce, 0xf8, 0x87, 0xf0, 0x17, 0x86, 0xce, | 2658 | 0xa8, 0x82, 0x71, 0xdf, 0x01, 0x6d, 0x85, 0x16, 0x4e, 0xa9, 0xf2, 0x0e, |
2639 | 0xb5, 0xef, 0x03, 0xb7, 0x26, 0x0b, 0xcf, 0x18, 0xea, 0x0e, 0xb6, 0x30, | 2659 | 0xb6, 0x38, 0xc2, 0x67, 0xcd, 0xcf, 0x8f, 0x93, 0x5d, 0xb8, 0xa7, 0x3f, |
2640 | 0x42, 0x59, 0xf3, 0x79, 0x2d, 0xde, 0x45, 0x67, 0xfa, 0xf3, 0xf0, 0x4c, | 2660 | 0x0d, 0xf6, 0x34, 0x16, 0xd4, 0xd3, 0xe1, 0x9e, 0x62, 0xf4, 0xe6, 0xac, |
2641 | 0xd9, 0xb0, 0x9e, 0x8e, 0xce, 0x14, 0x93, 0x77, 0x67, 0x2d, 0xac, 0xfd, | 2661 | 0x0e, 0xdc, 0x9b, 0x20, 0x8f, 0x02, 0x2d, 0x35, 0xd2, 0x9f, 0x42, 0xa7, |
2642 | 0x1c, 0xf8, 0x91, 0x97, 0xa5, 0x7a, 0xea, 0x33, 0xf0, 0x94, 0x1b, 0x78, | 2662 | 0xd2, 0x24, 0x1b, 0x6d, 0xdb, 0x19, 0x96, 0x36, 0x6b, 0xf8, 0xf1, 0x14, |
2643 | 0x63, 0x6e, 0x91, 0x61, 0x71, 0xa3, 0x86, 0x1f, 0x4f, 0xc2, 0x0e, 0xbf, | 2663 | 0xec, 0xf0, 0x78, 0x4f, 0x78, 0x37, 0xac, 0x9a, 0x1e, 0xd7, 0x3d, 0x68, |
2644 | 0xd1, 0x1b, 0xdd, 0x0d, 0x1b, 0xb6, 0xcf, 0xba, 0x07, 0x8d, 0xf3, 0xfd, | 2664 | 0x3c, 0xdf, 0x0f, 0x5b, 0x4c, 0xc3, 0x3e, 0x39, 0x67, 0x2a, 0x70, 0xad, |
2645 | 0xb0, 0xc5, 0x14, 0xec, 0x93, 0x39, 0x53, 0x9e, 0xb5, 0x0a, 0xed, 0xc9, | 2665 | 0xc2, 0xf6, 0xa4, 0x3b, 0xaa, 0xa1, 0x4f, 0x50, 0x06, 0xf5, 0x0e, 0xef, |
2646 | 0x72, 0x8d, 0xb4, 0x75, 0x4c, 0x86, 0x51, 0xef, 0xf0, 0xfc, 0x19, 0x59, | 2666 | 0x3f, 0x47, 0x8b, 0x8d, 0x90, 0x87, 0x2c, 0xec, 0x71, 0x14, 0xbf, 0x61, |
2647 | 0xac, 0x47, 0x34, 0x8c, 0xc2, 0x1e, 0x0f, 0xe2, 0xb7, 0x1f, 0xef, 0x1c, | 2667 | 0xbc, 0xb3, 0xf0, 0xe3, 0x5a, 0x69, 0x85, 0x1e, 0x95, 0xb9, 0x38, 0x72, |
2648 | 0xfc, 0x58, 0x2b, 0xad, 0xc8, 0xe3, 0x2a, 0x17, 0x47, 0xae, 0x3d, 0x44, | 2668 | 0xed, 0x41, 0xe6, 0xef, 0x4e, 0xc0, 0xb3, 0x3e, 0xb3, 0x9e, 0xde, 0x49, |
2649 | 0xfa, 0xee, 0x04, 0x3c, 0xf5, 0x99, 0x7a, 0x7a, 0xa7, 0xb8, 0x7d, 0xf4, | 2669 | 0x4e, 0x2f, 0xfb, 0x8a, 0x14, 0x68, 0x03, 0xc7, 0x5d, 0x87, 0xad, 0xf7, |
2650 | 0x15, 0x49, 0xe0, 0xc6, 0x1a, 0xef, 0x22, 0x6c, 0xbd, 0x1f, 0xcf, 0xb4, | 2670 | 0xe3, 0x69, 0xe8, 0x45, 0x96, 0xad, 0xa4, 0xef, 0x79, 0x6a, 0x96, 0xbf, |
2651 | 0x55, 0x20, 0x6f, 0x15, 0x7e, 0xdf, 0x37, 0x46, 0xf9, 0x8d, 0xe2, 0x7c, | 2671 | 0x51, 0x5c, 0x08, 0xc6, 0x03, 0xfa, 0x3d, 0xac, 0x7b, 0xa9, 0x1b, 0x68, |
2652 | 0x38, 0x1e, 0xb4, 0xbe, 0x4c, 0xdd, 0x4b, 0xee, 0x96, 0x95, 0xf9, 0x28, | 2672 | 0x65, 0x3e, 0x8c, 0x83, 0x67, 0x60, 0x83, 0x7c, 0x67, 0x3b, 0x06, 0xb9, |
2653 | 0x0e, 0x9e, 0x86, 0x0d, 0xf2, 0xce, 0x76, 0x0c, 0x7c, 0xe1, 0x58, 0x0b, | 2673 | 0xf0, 0x58, 0x09, 0xe2, 0x21, 0xe6, 0x17, 0x91, 0x94, 0xb4, 0xe7, 0x68, |
2654 | 0xe3, 0x21, 0xe6, 0x17, 0x97, 0x71, 0xee, 0x8c, 0x9c, 0x41, 0xfd, 0x2f, | 2674 | 0x19, 0xf5, 0x3f, 0xf5, 0xf2, 0x13, 0xf9, 0xae, 0xbb, 0x33, 0xd0, 0xf7, |
2655 | 0x7d, 0x7c, 0xa6, 0x80, 0x7f, 0x7b, 0xa8, 0xef, 0x9b, 0xd7, 0x1b, 0x36, | 2675 | 0xad, 0xf8, 0xaa, 0xc9, 0xfd, 0x31, 0xf0, 0xa7, 0x35, 0xe1, 0x33, 0x8e, |
2656 | 0xfb, 0x63, 0xa0, 0xcf, 0x6c, 0x58, 0xcf, 0x35, 0x41, 0x7d, 0xb2, 0x26, | 2676 | 0x5f, 0x9f, 0xac, 0x11, 0xe2, 0x71, 0xca, 0xfb, 0x82, 0xc8, 0x3d, 0x4d, |
2657 | 0x88, 0xc7, 0x49, 0xff, 0x76, 0x3d, 0xf3, 0xa2, 0x3c, 0xa0, 0xce, 0x54, | 2677 | 0xbf, 0x23, 0xf7, 0x54, 0xa7, 0x23, 0xf3, 0xa8, 0x6d, 0xb3, 0x03, 0x99, |
2658 | 0x93, 0xe3, 0xf3, 0xbe, 0xef, 0x8e, 0x0e, 0x0e, 0x2f, 0x4a, 0x7a, 0xf8, | 2678 | 0x45, 0x32, 0x32, 0x27, 0x68, 0x48, 0x3f, 0x40, 0xaa, 0xfc, 0xd6, 0x97, |
2659 | 0xa4, 0xec, 0xb3, 0x0e, 0xb1, 0x1e, 0xb3, 0x88, 0xc7, 0xbf, 0xbd, 0x25, | 2679 | 0x16, 0xde, 0x17, 0x5a, 0x72, 0x9e, 0x77, 0x06, 0xbc, 0xbf, 0x28, 0xd7, |
2660 | 0xe3, 0xfb, 0xa7, 0x41, 0xfb, 0xf7, 0xd5, 0x3e, 0x2f, 0x82, 0x7e, 0xf0, | 2680 | 0x79, 0x1a, 0xfc, 0x43, 0x56, 0xb2, 0x26, 0x61, 0x5e, 0xf1, 0x4c, 0x32, |
2661 | 0x4a, 0xd5, 0x24, 0xa4, 0x15, 0xcf, 0x04, 0xe9, 0x2d, 0xcb, 0xf1, 0xfa, | 2681 | 0xbf, 0x15, 0x3a, 0xd2, 0xf8, 0x61, 0x70, 0x36, 0x8f, 0x90, 0xe3, 0xbe, |
2662 | 0x85, 0x50, 0x36, 0x8f, 0x89, 0xeb, 0x5d, 0x36, 0x5c, 0xbb, 0x0c, 0xd8, | 2682 | 0xa5, 0x3a, 0x66, 0x05, 0xb0, 0xdf, 0x09, 0x78, 0xcb, 0x81, 0x5f, 0xac, |
2663 | 0x85, 0x90, 0xb6, 0x0c, 0xe8, 0xc5, 0xfe, 0xf5, 0xb7, 0x13, 0xf4, 0x0d, | 2683 | 0xdf, 0x58, 0x4f, 0xb2, 0x6f, 0xe0, 0x33, 0x77, 0x90, 0x35, 0x3a, 0x23, |
2664 | 0x94, 0xb9, 0x8b, 0xac, 0xd1, 0x1d, 0x41, 0x1e, 0x95, 0xf8, 0x24, 0x3f, | 2684 | 0xc8, 0xa3, 0x92, 0xd7, 0xf2, 0x03, 0x09, 0xda, 0xea, 0x07, 0x18, 0x2f, |
2665 | 0x10, 0x97, 0xcd, 0x7e, 0x80, 0xeb, 0xe2, 0xd7, 0xd0, 0x15, 0xd2, 0x51, | 2685 | 0xf1, 0x31, 0xba, 0xc2, 0x7c, 0x94, 0xa4, 0xff, 0x94, 0x71, 0x4b, 0xd2, |
2666 | 0x54, 0xfe, 0x53, 0xc5, 0x2d, 0x85, 0xcf, 0xd8, 0xe2, 0x0b, 0x2a, 0xea, | 2686 | 0x53, 0xb7, 0xf9, 0x82, 0x6f, 0xc9, 0xe7, 0xaa, 0xca, 0xbe, 0x89, 0xe3, |
2667 | 0xb9, 0x6a, 0xd0, 0x37, 0x31, 0xfe, 0x51, 0x87, 0xbb, 0xe0, 0xff, 0xa0, | 2687 | 0x1f, 0xeb, 0x70, 0x27, 0xfc, 0x1f, 0x74, 0x10, 0x76, 0x9c, 0x9f, 0xe7, |
2668 | 0x83, 0xb0, 0xe3, 0xdc, 0x3c, 0xef, 0x27, 0x86, 0x78, 0xaf, 0x74, 0x36, | 2688 | 0xfb, 0x89, 0x41, 0xbe, 0x57, 0x3a, 0x57, 0xc0, 0xd9, 0x2e, 0xf0, 0xf7, |
2669 | 0x0f, 0xd9, 0x2e, 0xf0, 0xfb, 0x63, 0x22, 0xa8, 0x31, 0x83, 0xfa, 0x2b, | 2689 | 0xc7, 0xa4, 0x5f, 0x63, 0xfa, 0xf5, 0x57, 0x9a, 0x7d, 0x21, 0xda, 0x92, |
2670 | 0x45, 0x5f, 0x88, 0xb6, 0xa4, 0xfc, 0x64, 0x5e, 0x7d, 0x6f, 0x8c, 0x03, | 2690 | 0xf4, 0x93, 0x05, 0xf9, 0xbd, 0x31, 0x01, 0x18, 0x8f, 0x7d, 0x67, 0xd3, |
2671 | 0xc6, 0xa7, 0xef, 0x6c, 0xf8, 0x9b, 0x89, 0x1f, 0x64, 0x83, 0xbf, 0x99, | 2691 | 0xdf, 0x58, 0xbc, 0x6c, 0xfb, 0x7f, 0x63, 0x11, 0x7c, 0xfb, 0xad, 0xf9, |
2672 | 0x08, 0xbf, 0xfd, 0x56, 0x83, 0x3c, 0xe2, 0xe1, 0x9a, 0x29, 0x13, 0xb5, | 2692 | 0x79, 0xc4, 0x83, 0x75, 0x8d, 0x26, 0xeb, 0xe1, 0xdf, 0x5c, 0xf0, 0x39, |
2673 | 0xe8, 0x6f, 0x28, 0x28, 0x07, 0xf8, 0xe6, 0x5a, 0x94, 0x3b, 0xf8, 0x41, | 2693 | 0xc0, 0x37, 0xd7, 0xc3, 0xdc, 0xc1, 0x93, 0xf1, 0xa5, 0xbc, 0xe5, 0x2c, |
2674 | 0x4d, 0xb3, 0x49, 0x96, 0x4b, 0x61, 0x4e, 0xc4, 0x1a, 0x80, 0x3c, 0xc4, | 2694 | 0x97, 0x82, 0x9c, 0x88, 0x6b, 0x00, 0x96, 0x21, 0xc6, 0x8b, 0xfe, 0xf9, |
2675 | 0x78, 0x31, 0xaa, 0x2f, 0x07, 0x20, 0x3f, 0xf0, 0x1c, 0x74, 0xbd, 0x3b, | 2695 | 0x2d, 0x88, 0x3d, 0x38, 0x3f, 0xc8, 0x1c, 0x7c, 0xbd, 0x39, 0xeb, 0xd7, |
2676 | 0x1b, 0xd4, 0xb9, 0x25, 0xfa, 0xc5, 0xfe, 0xa8, 0xee, 0xdd, 0x25, 0xa5, | 2696 | 0xb9, 0x65, 0xf6, 0x8b, 0xfd, 0x61, 0xdd, 0xbb, 0x9b, 0xca, 0x13, 0xfc, |
2677 | 0x63, 0x7c, 0x1f, 0x93, 0x77, 0x66, 0x63, 0xea, 0x7d, 0x41, 0x62, 0xe1, | 2697 | 0x3e, 0x46, 0x6f, 0xcc, 0xc6, 0xe4, 0xfb, 0x22, 0xc5, 0x82, 0xf7, 0x3c, |
2678 | 0x7b, 0x8e, 0xe3, 0x52, 0x50, 0xef, 0xab, 0x21, 0x3e, 0xd4, 0x69, 0x5f, | 2698 | 0x4e, 0x50, 0x51, 0xbe, 0xaf, 0x05, 0xf4, 0x50, 0xa7, 0xdd, 0x17, 0x8e, |
2679 | 0x89, 0xc6, 0xa6, 0x76, 0xbc, 0x1e, 0xac, 0x9b, 0xac, 0x57, 0xe5, 0xf1, | 2699 | 0x35, 0xe5, 0x48, 0xc3, 0xc7, 0x9b, 0x6a, 0xd4, 0xe8, 0xd1, 0xc6, 0x2a, |
2680 | 0xfa, 0x2a, 0xce, 0xaf, 0x49, 0x6e, 0xbc, 0x28, 0xbb, 0x6d, 0x4b, 0xc5, | 2700 | 0xf6, 0xaf, 0x50, 0x7e, 0xbc, 0x44, 0x37, 0x98, 0xba, 0x8c, 0xfb, 0x4e, |
2681 | 0x7d, 0x37, 0x4e, 0x1d, 0xa3, 0x7e, 0x8d, 0xa9, 0xba, 0xb3, 0x88, 0x7c, | 2701 | 0x82, 0x75, 0x8c, 0xf5, 0x6b, 0x4c, 0xd6, 0x9d, 0x25, 0xe4, 0x0b, 0xc5, |
2682 | 0xa1, 0x30, 0xc2, 0x6f, 0x3c, 0xbf, 0xba, 0xab, 0x50, 0x4e, 0x5b, 0x59, | 2702 | 0x11, 0xfe, 0xc6, 0xf3, 0xde, 0x5d, 0xc5, 0x8a, 0xa1, 0xdb, 0xf4, 0x81, |
2683 | 0xf9, 0xd0, 0x77, 0x4d, 0x8e, 0x45, 0x47, 0x3d, 0x74, 0xd7, 0xc3, 0xb5, | 2703 | 0xe7, 0x68, 0x3c, 0x26, 0x21, 0x72, 0xab, 0x77, 0x3d, 0x58, 0xbf, 0x78, |
2684 | 0x0b, 0x77, 0x05, 0x67, 0xc5, 0xfb, 0x1a, 0x61, 0x0d, 0xf5, 0x6d, 0xf6, | 2704 | 0x97, 0xbf, 0x57, 0xbc, 0xaf, 0x33, 0xac, 0x2a, 0xbf, 0xcd, 0xfe, 0xe4, |
2685 | 0x5f, 0x6f, 0x35, 0x65, 0xed, 0x56, 0xdf, 0xbf, 0xdf, 0xb1, 0xc4, 0x0d, | 2705 | 0x76, 0x8d, 0xd6, 0x6e, 0xf7, 0xbc, 0xfb, 0x2d, 0x9d, 0x9c, 0xa0, 0x76, |
2686 | 0x6b, 0x57, 0x4b, 0xd5, 0xae, 0xed, 0x2a, 0x07, 0x71, 0x47, 0x52, 0x5a, | 2706 | 0xf5, 0xbf, 0xb9, 0xb7, 0xcb, 0x1c, 0xc4, 0x19, 0x49, 0x2b, 0x05, 0xd8, |
2687 | 0x1e, 0xf6, 0x7a, 0xc6, 0x43, 0x9d, 0xa3, 0xa7, 0x0f, 0xae, 0xea, 0x16, | 2707 | 0xeb, 0xb2, 0x8b, 0x3a, 0x47, 0x18, 0xa3, 0xab, 0x42, 0x47, 0xcc, 0xe5, |
2688 | 0x62, 0x6e, 0x3a, 0x35, 0x27, 0x6e, 0x2f, 0xbf, 0x37, 0xcf, 0x38, 0x84, | 2708 | 0x3b, 0x80, 0x3b, 0x7a, 0xf8, 0x7b, 0xf3, 0x8c, 0xc5, 0x30, 0x7d, 0xfe, |
2689 | 0xd9, 0x19, 0xdc, 0x75, 0xdd, 0x34, 0xae, 0xfc, 0xac, 0x48, 0x18, 0x7b, | 2709 | 0x5d, 0xd7, 0x2d, 0xf7, 0x49, 0x3f, 0x4b, 0x14, 0xc4, 0x9e, 0x5b, 0x9a, |
2690 | 0x6e, 0x6a, 0xb4, 0x89, 0xc6, 0xdc, 0x92, 0xb6, 0x20, 0x13, 0x26, 0x68, | 2710 | 0x6d, 0xa2, 0x39, 0xb7, 0x64, 0x5b, 0xa0, 0x49, 0x0d, 0xbc, 0x94, 0x2b, |
2691 | 0x29, 0x95, 0xa3, 0x3c, 0x8d, 0x7f, 0x1b, 0xb0, 0x7a, 0xd7, 0xd3, 0xa0, | 2711 | 0x61, 0x9e, 0xc6, 0x7f, 0x4b, 0xb0, 0x7a, 0xd7, 0x37, 0xc0, 0xe7, 0x34, |
2692 | 0x73, 0x1a, 0x74, 0xf2, 0x1c, 0xd3, 0xb5, 0x48, 0xe7, 0xa2, 0x5a, 0x81, | 2712 | 0xf8, 0xe4, 0x7d, 0x4c, 0xd7, 0x43, 0x9d, 0x0b, 0x6b, 0x05, 0xee, 0x23, |
2693 | 0x7d, 0xc4, 0x7c, 0x0f, 0x31, 0xdf, 0x43, 0xcc, 0xf7, 0x10, 0xf3, 0x3d, | 2713 | 0xe6, 0xbb, 0x88, 0xf9, 0x2e, 0x62, 0xbe, 0x8b, 0x98, 0xef, 0x22, 0xe6, |
2694 | 0xc4, 0x7c, 0x0f, 0x31, 0xdf, 0x43, 0xcc, 0xf7, 0x10, 0xf3, 0xbd, 0xf1, | 2714 | 0xbb, 0x88, 0xf9, 0x2e, 0x62, 0xbe, 0x8b, 0x98, 0xef, 0x8e, 0x07, 0x79, |
2695 | 0x30, 0x4f, 0x7b, 0x62, 0x3d, 0x4f, 0x5b, 0xa9, 0xf3, 0x3b, 0x94, 0xa2, | 2715 | 0xda, 0x63, 0x1b, 0x79, 0xda, 0x4a, 0x83, 0xbf, 0x43, 0x49, 0x5e, 0x4a, |
2696 | 0xa5, 0x58, 0x94, 0x20, 0xcf, 0x15, 0x9d, 0x39, 0x4d, 0x94, 0xe7, 0x5e, | 2716 | 0x25, 0xf2, 0xf3, 0x5c, 0x12, 0x9c, 0xd3, 0x84, 0x79, 0xee, 0xc7, 0x7f, |
2697 | 0xfb, 0x9b, 0x48, 0xb0, 0x8e, 0x39, 0x1e, 0xd7, 0x15, 0x35, 0xdd, 0xe6, | 2717 | 0x13, 0xf1, 0xf1, 0x38, 0xc7, 0x63, 0xbc, 0x92, 0x22, 0x4c, 0xc6, 0xf3, |
2698 | 0xba, 0x20, 0xcf, 0x63, 0x6d, 0xb5, 0x79, 0x0d, 0xf2, 0xb5, 0x0c, 0xfd, | 2718 | 0xf3, 0x3c, 0xae, 0xad, 0xb6, 0xe2, 0x20, 0x5f, 0xcb, 0xb1, 0x3f, 0x63, |
2699 | 0x19, 0xed, 0x22, 0x11, 0xd4, 0x8b, 0x99, 0xf3, 0xf7, 0xba, 0x88, 0xbf, | 2719 | 0xbb, 0x48, 0xfa, 0xf5, 0x62, 0xee, 0xf5, 0x2f, 0xa1, 0x76, 0x3c, 0x5e, |
2700 | 0x85, 0x9a, 0x8a, 0xc1, 0xbc, 0x17, 0xbc, 0x97, 0x7f, 0xb7, 0x00, 0x39, | 2720 | 0xac, 0xcb, 0x18, 0x8c, 0xf1, 0x7b, 0x18, 0x6b, 0xac, 0x73, 0xfc, 0xee, |
2701 | 0xf0, 0xdd, 0x7d, 0xac, 0x27, 0x0a, 0xb5, 0xa4, 0x14, 0x17, 0xa3, 0xfc, | 2721 | 0x5e, 0xae, 0x27, 0x8a, 0xf5, 0x14, 0x95, 0x16, 0xc3, 0xfc, 0x07, 0x78, |
2702 | 0x07, 0xeb, 0xbc, 0x7d, 0x5a, 0xbe, 0x42, 0xd9, 0xea, 0x32, 0x9d, 0x00, | 2722 | 0xee, 0x90, 0x52, 0xa8, 0xf2, 0xd9, 0x0a, 0x9a, 0x4e, 0x42, 0x28, 0x66, |
2703 | 0x53, 0xec, 0xc6, 0xbc, 0xee, 0x4d, 0x55, 0x23, 0xad, 0xd4, 0x49, 0xcf, | 2723 | 0x73, 0x5e, 0x77, 0x49, 0xd6, 0x48, 0xfe, 0xdf, 0x05, 0x0d, 0x83, 0xb7, |
2704 | 0x7e, 0xd0, 0x16, 0xdd, 0xe3, 0x8a, 0x18, 0xb3, 0x09, 0xd1, 0x67, 0x91, | 2724 | 0xf0, 0x1e, 0x97, 0x48, 0x9d, 0x4d, 0xca, 0xbf, 0x31, 0x48, 0x98, 0x83, |
2705 | 0xd3, 0xda, 0x43, 0xea, 0x6f, 0x1d, 0x7a, 0xb0, 0x8f, 0x3e, 0x3b, 0x10, | 2725 | 0xf2, 0x6f, 0x1d, 0xba, 0xb1, 0x8e, 0x98, 0xdd, 0x13, 0xfe, 0xed, 0x06, |
2706 | 0xfd, 0x2d, 0x06, 0xeb, 0xae, 0xec, 0xc6, 0xfd, 0x2b, 0xcf, 0x91, 0x80, | 2726 | 0xd7, 0x5d, 0xf6, 0xe6, 0xfd, 0x2b, 0xef, 0x23, 0x09, 0x7b, 0xbd, 0xa7, |
2707 | 0xbd, 0x7e, 0x69, 0x27, 0xce, 0x06, 0xb9, 0x5e, 0xde, 0xa1, 0xf2, 0x6e, | 2727 | 0x0f, 0x7b, 0xc3, 0xb9, 0x5e, 0xd9, 0x25, 0xf3, 0x6e, 0xf8, 0xce, 0x33, |
2708 | 0xf8, 0xce, 0xd3, 0x43, 0xe9, 0x3e, 0xe9, 0xda, 0x25, 0x67, 0x86, 0x58, | 2728 | 0x83, 0x37, 0xf5, 0x52, 0xe7, 0x6e, 0x5a, 0x1e, 0xe4, 0x1a, 0xad, 0x0d, |
2709 | 0xa3, 0xb5, 0x01, 0x1f, 0x61, 0x79, 0xe7, 0xb4, 0x4b, 0x96, 0xe7, 0xe1, | 2729 | 0xf4, 0x18, 0xd6, 0xc8, 0xd8, 0x62, 0x37, 0x9d, 0x9d, 0x87, 0x6f, 0x9d, |
2710 | 0x5b, 0xe7, 0xd3, 0x0e, 0xff, 0xbe, 0x60, 0x01, 0x21, 0x6d, 0xa1, 0x3e, | 2730 | 0x37, 0x2c, 0xfe, 0xfb, 0x82, 0x85, 0xc1, 0x24, 0x7c, 0xf2, 0x78, 0x2f, |
2711 | 0xd6, 0xc7, 0x98, 0xbc, 0x58, 0xa7, 0xae, 0xf4, 0x60, 0x7d, 0x3f, 0x74, | 2731 | 0xc7, 0xe4, 0xc5, 0x06, 0xeb, 0x4a, 0x37, 0xf0, 0xfb, 0xa1, 0x8b, 0x3b, |
2712 | 0x71, 0x1b, 0x6c, 0x48, 0xc7, 0xfe, 0x11, 0xee, 0xf7, 0x14, 0xee, 0x1e, | 2732 | 0x60, 0x43, 0x02, 0xeb, 0x87, 0xb4, 0xff, 0x53, 0xd2, 0xee, 0x36, 0xf3, |
2713 | 0xfb, 0xb7, 0x77, 0x2a, 0xdd, 0xd0, 0xd3, 0x56, 0x4a, 0x07, 0xed, 0x1f, | 2733 | 0x7d, 0x52, 0x37, 0x84, 0xa1, 0xa7, 0x05, 0x78, 0xff, 0x48, 0x6d, 0x69, |
2714 | 0xab, 0x2d, 0x1d, 0xe1, 0xf7, 0xc2, 0x69, 0xaf, 0xf1, 0xbb, 0xe1, 0x3e, | 2734 | 0x11, 0x7f, 0x2f, 0x9c, 0x76, 0x9b, 0xbf, 0x1b, 0x0e, 0x29, 0xc5, 0x2a, |
2715 | 0xad, 0x50, 0xe1, 0xdf, 0x38, 0x0c, 0xc9, 0x21, 0x8b, 0x7f, 0xff, 0xb3, | 2735 | 0xff, 0x8d, 0xc3, 0x20, 0xfd, 0x4f, 0xe1, 0x56, 0x17, 0xd3, 0xd6, 0x79, |
2716 | 0x4f, 0x7b, 0xa0, 0x4a, 0x18, 0x1b, 0x7d, 0xd6, 0xe1, 0xcb, 0xb0, 0xe5, | 2736 | 0x86, 0xdf, 0xcf, 0xe6, 0x2f, 0xc4, 0x81, 0x13, 0xe2, 0x80, 0x41, 0x54, |
2717 | 0xff, 0x29, 0xdc, 0xea, 0x62, 0xdb, 0x3a, 0xcb, 0xf0, 0xfb, 0x1d, 0xe7, | 2737 | 0xf3, 0x31, 0x07, 0xe2, 0xca, 0x44, 0x3d, 0x20, 0x32, 0x59, 0x15, 0x52, |
2718 | 0xc7, 0x4d, 0xdd, 0xe4, 0x34, 0x71, 0x12, 0x27, 0xca, 0xc0, 0xc7, 0x39, | 2738 | 0x2d, 0xdb, 0x50, 0xb7, 0x5d, 0x36, 0x77, 0xcb, 0xa6, 0x4c, 0xda, 0x22, |
2719 | 0x49, 0x3d, 0x39, 0xd5, 0x4e, 0xa2, 0x14, 0x22, 0x88, 0x84, 0xe5, 0xfc, | 2739 | 0x06, 0x49, 0x9b, 0x6a, 0xd2, 0x2e, 0x76, 0x31, 0xed, 0x2e, 0x96, 0x81, |
2720 | 0xcc, 0x63, 0x14, 0x3c, 0xc8, 0xa6, 0x4e, 0x42, 0x55, 0x94, 0x74, 0x5b, | 2740 | 0x34, 0xcd, 0xec, 0x1a, 0x56, 0x32, 0xa4, 0x5d, 0x4c, 0xae, 0x31, 0x04, |
2721 | 0x27, 0xee, 0xb8, 0x40, 0x5c, 0x80, 0x6a, 0x39, 0x69, 0xe9, 0x86, 0x3d, | 2741 | 0x88, 0x53, 0xab, 0x5b, 0x2f, 0x32, 0x4d, 0x53, 0x90, 0x57, 0x25, 0xdd, |
2722 | 0xa7, 0x5b, 0xba, 0x00, 0x57, 0x9e, 0xe3, 0xa4, 0x4d, 0xe7, 0xcc, 0x1a, | 2742 | 0x4d, 0x6f, 0x76, 0x3f, 0x55, 0x64, 0xad, 0x72, 0xd1, 0x25, 0x6a, 0xa7, |
2723 | 0x03, 0x69, 0x70, 0x41, 0x23, 0x33, 0x6d, 0xe3, 0x66, 0x37, 0x48, 0x5c, | 2743 | 0x6a, 0x7f, 0x17, 0x67, 0xcf, 0xf3, 0x9d, 0x63, 0x20, 0x6c, 0xd5, 0x90, |
2724 | 0x57, 0x29, 0x83, 0x02, 0x6b, 0x2b, 0xb8, 0xe1, 0xef, 0xe2, 0xf0, 0x3c, | 2744 | 0xac, 0xf3, 0x9d, 0xef, 0x7c, 0xff, 0xdf, 0xfb, 0x3e, 0xef, 0x2f, 0x53, |
2725 | 0xdf, 0x39, 0x76, 0xd3, 0xc0, 0x44, 0x24, 0xeb, 0x7c, 0xe7, 0x3b, 0xdf, | 2745 | 0xa0, 0x2f, 0xc3, 0x8a, 0xa9, 0x4b, 0x65, 0xb6, 0xb1, 0x50, 0xa6, 0x1d, |
2726 | 0xff, 0xf7, 0xbe, 0xcf, 0xfb, 0x9b, 0x6e, 0xb9, 0x08, 0x3a, 0xce, 0x8d, | 2746 | 0x7e, 0x13, 0xbc, 0xdc, 0x23, 0x8b, 0xa0, 0xe3, 0xfc, 0x68, 0xab, 0xe7, |
2727 | 0xb5, 0xfa, 0xfe, 0xd6, 0x0e, 0x9f, 0x87, 0x07, 0xfb, 0x7c, 0x19, 0xa5, | 2747 | 0x6f, 0xed, 0xf4, 0x78, 0x38, 0xd2, 0xeb, 0xc9, 0x28, 0xad, 0x4b, 0xe6, |
2728 | 0x75, 0xc9, 0x9c, 0xd6, 0xa7, 0xbb, 0x0e, 0x7d, 0x7b, 0x16, 0x6b, 0x8a, | 2748 | 0xb5, 0x3e, 0xdd, 0x7d, 0xe8, 0xdb, 0x0f, 0xb0, 0xa6, 0x10, 0xce, 0x61, |
2729 | 0xe0, 0x1c, 0x1e, 0xe9, 0xd3, 0x78, 0x64, 0xf0, 0xbd, 0xff, 0xd0, 0x7b, | 2749 | 0xb8, 0x57, 0xe3, 0x91, 0x8f, 0xef, 0x7d, 0x87, 0xde, 0x7b, 0x0f, 0xbd, |
2730 | 0xdf, 0xa1, 0xf7, 0xde, 0xff, 0xd1, 0x9e, 0xe5, 0xc3, 0xf4, 0xc0, 0x75, | 2750 | 0x9f, 0xfc, 0x1f, 0xed, 0x59, 0x3e, 0x4c, 0x0f, 0x5c, 0xa7, 0x19, 0xe7, |
2731 | 0x5a, 0x53, 0x1a, 0xfd, 0xf2, 0x93, 0x6a, 0x39, 0x6f, 0x25, 0xa9, 0x0b, | 2751 | 0x2c, 0xf9, 0xc2, 0x84, 0x9a, 0x2b, 0x98, 0x09, 0xea, 0x02, 0x29, 0x71, |
2732 | 0xcc, 0x88, 0xab, 0x66, 0x9c, 0x36, 0x60, 0x5c, 0x9b, 0xac, 0xae, 0x83, | 2752 | 0x54, 0xca, 0x6e, 0x03, 0xc6, 0xb5, 0xc9, 0xc2, 0x0a, 0x68, 0x1e, 0xfb, |
2733 | 0xe6, 0xb1, 0x8f, 0x76, 0x9b, 0xf1, 0xf2, 0x89, 0x3e, 0xf2, 0x4c, 0x10, | 2753 | 0x68, 0xb7, 0x18, 0x2f, 0x7f, 0xb6, 0x97, 0x3c, 0xd3, 0x81, 0x6b, 0xf0, |
2734 | 0xd7, 0x60, 0xd8, 0xc3, 0x11, 0xb4, 0x73, 0x5f, 0x74, 0x12, 0xe6, 0x39, | 2754 | 0x59, 0x43, 0x21, 0xb4, 0x73, 0x5e, 0xb3, 0x63, 0xc6, 0x45, 0xed, 0xbf, |
2735 | 0xed, 0xbf, 0xa1, 0x0e, 0xe3, 0xaa, 0x9c, 0xce, 0xfd, 0x60, 0x9b, 0x16, | 2755 | 0xa1, 0x0e, 0xe3, 0xa8, 0xbc, 0xce, 0xfd, 0x60, 0x9b, 0x16, 0x79, 0x60, |
2736 | 0xb9, 0x6d, 0xa7, 0xba, 0xfd, 0xdc, 0x20, 0xd8, 0xbb, 0xa9, 0x3e, 0xea, | 2756 | 0x25, 0x7b, 0xbc, 0x5c, 0x22, 0xd8, 0xbb, 0x2f, 0xf6, 0x52, 0xbf, 0x78, |
2737 | 0x17, 0x2f, 0x38, 0xcd, 0x3a, 0x73, 0x5f, 0x98, 0x77, 0x05, 0xa2, 0x79, | 2757 | 0xd5, 0xde, 0xab, 0x33, 0x76, 0x85, 0x79, 0x5a, 0x20, 0x9a, 0x97, 0x45, |
2738 | 0x4a, 0xa4, 0x54, 0x11, 0xb9, 0x86, 0xdf, 0x6f, 0x2a, 0x7e, 0xfc, 0x42, | 2758 | 0xca, 0x55, 0x91, 0x9b, 0xf8, 0xfd, 0xb1, 0xea, 0xc5, 0x2f, 0x14, 0x6d, |
2739 | 0xd1, 0xd6, 0x9e, 0x96, 0x1b, 0xc5, 0x2f, 0x48, 0x15, 0x32, 0x67, 0xc7, | 2759 | 0xed, 0x49, 0xd9, 0x2e, 0x3d, 0x2b, 0x35, 0xc8, 0x9c, 0x2d, 0xdb, 0x71, |
2740 | 0x71, 0xdd, 0x3b, 0x4e, 0x54, 0x9f, 0xf9, 0x0f, 0xf2, 0x4a, 0x62, 0xe3, | 2760 | 0x1e, 0xda, 0x61, 0x7d, 0xe6, 0xaf, 0x17, 0x94, 0x44, 0xc6, 0x28, 0xd3, |
2741 | 0x94, 0x69, 0x6d, 0xf2, 0xc3, 0x75, 0xe6, 0xd5, 0x59, 0xe6, 0x1d, 0x61, | 2761 | 0xda, 0xe4, 0x67, 0x2b, 0xcc, 0xbb, 0x33, 0x8d, 0x87, 0xc2, 0xfc, 0xb7, |
2742 | 0x7e, 0x5b, 0x44, 0xd2, 0xe1, 0x80, 0xd6, 0x4b, 0xe5, 0x69, 0x68, 0x12, | 2762 | 0x90, 0x64, 0x82, 0x7e, 0xad, 0x97, 0xca, 0xb7, 0x45, 0x3e, 0xc1, 0xb7, |
2743 | 0xf8, 0xf6, 0x87, 0xf5, 0xb3, 0x7d, 0xf4, 0xb9, 0x7c, 0xbc, 0xce, 0x77, | 2763 | 0x4f, 0x56, 0x5e, 0xe9, 0xa5, 0xcf, 0xe5, 0xe3, 0x15, 0xbe, 0xfb, 0xf0, |
2744 | 0x03, 0x4f, 0x43, 0xea, 0x76, 0x00, 0xfa, 0x2b, 0x80, 0xc7, 0xe4, 0xb9, | 2764 | 0xf4, 0x49, 0xc3, 0xf2, 0x43, 0x7f, 0x05, 0xf0, 0x18, 0x3c, 0x77, 0xee, |
2745 | 0x73, 0xbf, 0xcf, 0x73, 0x6d, 0xa8, 0xa3, 0x0d, 0xdb, 0x26, 0xb9, 0x11, | 2765 | 0xf7, 0x47, 0x5c, 0x1b, 0xea, 0x68, 0xc3, 0xb6, 0x49, 0x7e, 0x18, 0x38, |
2746 | 0xe0, 0xa0, 0x1a, 0xd6, 0xf9, 0x47, 0xf5, 0xb0, 0xc6, 0xe5, 0x40, 0x99, | 2766 | 0xa8, 0x86, 0x74, 0xbe, 0x52, 0x23, 0xa8, 0x71, 0xd9, 0x5f, 0x61, 0x5e, |
2747 | 0x7e, 0x7b, 0xf3, 0xa8, 0xc6, 0xe8, 0xd4, 0xee, 0xf7, 0xf4, 0x5e, 0x50, | 2767 | 0x9d, 0x71, 0x54, 0x63, 0x74, 0xf2, 0xf6, 0x82, 0xde, 0x0b, 0xca, 0xb9, |
2748 | 0xce, 0x96, 0x1d, 0xd2, 0xaa, 0x29, 0x3b, 0xe0, 0xb5, 0xeb, 0xb5, 0x37, | 2768 | 0x8a, 0x4d, 0x5a, 0x35, 0x64, 0x0b, 0xbc, 0xb6, 0x59, 0xdf, 0xea, 0xe3, |
2749 | 0xfa, 0x79, 0x57, 0x37, 0x6a, 0xdf, 0xef, 0xf3, 0x6c, 0x34, 0xd6, 0x5d, | 2769 | 0x5d, 0x6d, 0xd7, 0x17, 0x7b, 0x5d, 0x1b, 0x8d, 0x75, 0xaf, 0xf7, 0xba, |
2750 | 0xe8, 0xf3, 0xea, 0xa2, 0xbe, 0xcd, 0x45, 0xdb, 0xac, 0x84, 0xbd, 0x7d, | 2770 | 0x75, 0x61, 0xcf, 0xe6, 0xa2, 0x6d, 0x56, 0xc6, 0xde, 0x7e, 0x2c, 0xf5, |
2751 | 0x5b, 0x6a, 0x1b, 0xdf, 0x95, 0x77, 0x8b, 0xdf, 0x91, 0x5f, 0x6c, 0x9c, | 2771 | 0xd5, 0x9f, 0xca, 0x9d, 0xd2, 0x4f, 0xe4, 0xb7, 0xab, 0xe7, 0xa1, 0x73, |
2752 | 0x81, 0xce, 0x61, 0x95, 0xb2, 0x90, 0x27, 0x6f, 0xd7, 0x5c, 0xf7, 0x6d, | 2772 | 0x98, 0xe5, 0x1c, 0xe4, 0xc9, 0xbb, 0x75, 0xc7, 0x79, 0xd7, 0x3e, 0x07, |
2753 | 0x67, 0x01, 0xf6, 0x81, 0xeb, 0xfe, 0xd6, 0xd9, 0x93, 0xd8, 0xc4, 0x37, | 2773 | 0xfb, 0xc0, 0x71, 0xfe, 0x64, 0xef, 0x48, 0x64, 0xfc, 0x7b, 0xd8, 0x73, |
2754 | 0xb1, 0xe7, 0x0c, 0x78, 0x88, 0x58, 0x98, 0x06, 0xbd, 0x7d, 0xb1, 0x5f, | 2774 | 0x16, 0x3c, 0x44, 0x2c, 0xcc, 0x80, 0xde, 0x52, 0x7d, 0xd2, 0x19, 0xd0, |
2755 | 0x3a, 0x42, 0x9a, 0x4e, 0x86, 0x27, 0x5a, 0xb1, 0x07, 0xc3, 0xd7, 0xc3, | 2775 | 0x74, 0x32, 0x34, 0xde, 0x8a, 0x3d, 0xf8, 0x3c, 0x3d, 0x9c, 0x7b, 0x49, |
2756 | 0xb9, 0x97, 0xe9, 0x7e, 0xd2, 0x8c, 0x51, 0xfb, 0x09, 0xe6, 0x6f, 0x05, | 2776 | 0xf7, 0x91, 0x66, 0x7c, 0xf5, 0x0a, 0xe6, 0x6f, 0x05, 0x5f, 0x1c, 0xc5, |
2757 | 0x5f, 0x1c, 0xc5, 0x4f, 0xc9, 0x9d, 0x71, 0xac, 0x75, 0x9c, 0xb4, 0xd7, | 2777 | 0x4f, 0xc9, 0xc3, 0x31, 0xac, 0x75, 0x8c, 0xb4, 0xd7, 0x2a, 0x91, 0x67, |
2758 | 0x2a, 0xb1, 0xc7, 0xb0, 0x8f, 0x4c, 0x8b, 0xdc, 0xcb, 0x6f, 0xf6, 0xd1, | 2778 | 0xb0, 0x8f, 0x6c, 0x8b, 0x3c, 0x2a, 0xdc, 0xea, 0xa5, 0x3f, 0xef, 0x51, |
2759 | 0x9f, 0x77, 0x2f, 0xcf, 0xb2, 0xf1, 0xb9, 0x4e, 0x71, 0xa5, 0x05, 0xf2, | 2779 | 0x81, 0x65, 0xdf, 0x57, 0xbb, 0xc4, 0x91, 0x16, 0xc8, 0xef, 0x85, 0x09, |
2760 | 0x7b, 0x75, 0xd2, 0xd3, 0x95, 0x7e, 0xad, 0x4e, 0xa0, 0xbd, 0x9d, 0x7d, | 2780 | 0x57, 0x57, 0xfa, 0x83, 0x3a, 0x85, 0xf6, 0x56, 0xee, 0x7d, 0x45, 0xdd, |
2761 | 0x4f, 0x51, 0xb7, 0xcb, 0xba, 0xad, 0xd0, 0xc5, 0xe7, 0xa0, 0x03, 0xa5, | 2781 | 0x2e, 0xe7, 0xb4, 0x42, 0x17, 0x9f, 0x82, 0x0e, 0x94, 0xac, 0x5f, 0x91, |
2762 | 0x6a, 0x17, 0xa4, 0x3e, 0x1e, 0x42, 0x1b, 0xea, 0x28, 0x1a, 0x4b, 0x64, | 2782 | 0xc6, 0x58, 0x00, 0x6d, 0xa8, 0xa3, 0x68, 0x2c, 0x91, 0x54, 0x81, 0xf9, |
2763 | 0x26, 0xcf, 0x7c, 0x2d, 0xe6, 0x4e, 0x61, 0x8d, 0x0b, 0xc4, 0x0d, 0xae, | 2783 | 0x5d, 0xcc, 0xb5, 0xc2, 0x1a, 0xcf, 0x11, 0x37, 0xb8, 0xc6, 0x36, 0xc6, |
2764 | 0xb1, 0x8d, 0x31, 0x38, 0xbf, 0xce, 0x06, 0x8d, 0xb0, 0x8e, 0xf4, 0x9d, | 2784 | 0xe0, 0xbc, 0x3a, 0x0b, 0x34, 0xc2, 0x3a, 0xd2, 0x77, 0x02, 0x3c, 0x99, |
2765 | 0x04, 0x4f, 0x26, 0x29, 0x37, 0x31, 0xde, 0x18, 0xc6, 0x63, 0xb9, 0x13, | 2785 | 0xa0, 0xdc, 0xc4, 0x78, 0xa3, 0x18, 0x8f, 0xe5, 0x2e, 0x8c, 0x77, 0x45, |
2766 | 0xe3, 0x5d, 0x90, 0x94, 0xd3, 0x18, 0x73, 0x0a, 0x6d, 0x88, 0x33, 0x53, | 2786 | 0x92, 0x76, 0x73, 0xcc, 0x38, 0xda, 0x10, 0x67, 0xe2, 0xd0, 0x1f, 0x06, |
2767 | 0xd0, 0x1f, 0x86, 0xd4, 0xec, 0x7a, 0x18, 0xf2, 0xbb, 0x4f, 0x66, 0xcd, | 2787 | 0x55, 0x7a, 0x25, 0x08, 0xf9, 0xdd, 0x2b, 0x69, 0xe3, 0xc8, 0x81, 0x3d, |
2768 | 0x23, 0x07, 0xf6, 0x98, 0xd5, 0xf6, 0x81, 0x61, 0x8c, 0xf9, 0x6b, 0xea, | 2788 | 0xe6, 0xb4, 0x7d, 0xe0, 0xf3, 0x8d, 0x7a, 0x6b, 0xea, 0x3a, 0xb0, 0x26, |
2769 | 0x3c, 0xb0, 0x26, 0xf6, 0xc7, 0x0f, 0xb6, 0x71, 0x6a, 0x7d, 0x0d, 0x38, | 2789 | 0xf6, 0xc7, 0x0f, 0xb6, 0x71, 0x72, 0x65, 0x09, 0x38, 0xb5, 0xf4, 0x41, |
2770 | 0xb5, 0xf6, 0x61, 0xca, 0x39, 0x2b, 0x33, 0x61, 0xae, 0x89, 0xf5, 0x61, | 2790 | 0xd2, 0xbe, 0x20, 0xa9, 0x20, 0xd7, 0xc4, 0xfa, 0x20, 0xd6, 0x4c, 0x3f, |
2771 | 0xac, 0x99, 0x7e, 0xac, 0x67, 0x81, 0x43, 0x47, 0xfc, 0x3a, 0xb6, 0x15, | 2791 | 0xd6, 0x77, 0x81, 0x43, 0x47, 0xbc, 0x3a, 0xb6, 0x15, 0x5f, 0x12, 0x67, |
2772 | 0x23, 0x85, 0xb3, 0xf7, 0xec, 0x5a, 0xd6, 0x7d, 0x56, 0x52, 0x6b, 0x19, | 2792 | 0xef, 0xda, 0xb5, 0xac, 0xfb, 0x8a, 0x24, 0x97, 0xb2, 0x32, 0xad, 0xfb, |
2773 | 0x99, 0xd7, 0xfd, 0x78, 0x86, 0x83, 0x5a, 0xf7, 0x20, 0xaf, 0xc6, 0x7a, | 2793 | 0xf1, 0x0c, 0x07, 0xb4, 0xee, 0x41, 0x5e, 0x8d, 0x9c, 0xc0, 0x59, 0xc6, |
2774 | 0x70, 0x96, 0x89, 0x07, 0x36, 0x70, 0xb4, 0x47, 0xcb, 0xcc, 0x7e, 0x8f, | 2794 | 0xf6, 0x6d, 0xe0, 0xf0, 0x09, 0x72, 0x91, 0xd1, 0xe7, 0xf2, 0x2c, 0xbe, |
2775 | 0x67, 0xf1, 0xad, 0x87, 0x77, 0xd4, 0x26, 0xb1, 0x6f, 0x40, 0x46, 0xe6, | 2795 | 0x9d, 0xe0, 0x1d, 0xb5, 0x49, 0xe4, 0x5b, 0x90, 0x91, 0x85, 0x66, 0x7d, |
2776 | 0x1b, 0xf5, 0x21, 0xf9, 0x24, 0xdf, 0xd1, 0xcf, 0x38, 0xcb, 0xdd, 0xbc, | 2796 | 0x40, 0x3e, 0x2d, 0xf4, 0xf4, 0x31, 0xce, 0xf2, 0xd7, 0x82, 0x21, 0x1f, |
2777 | 0x29, 0x1f, 0xe7, 0x75, 0x2c, 0x74, 0x31, 0x20, 0xd6, 0x79, 0xcf, 0x3e, | 2797 | 0x17, 0x74, 0x2c, 0x74, 0xc6, 0x2f, 0xe6, 0x65, 0xd7, 0x3e, 0x1f, 0x9e, |
2778 | 0x1f, 0x59, 0x5c, 0x55, 0xfc, 0x3e, 0x72, 0x7e, 0x4b, 0x05, 0xd1, 0x36, | 2798 | 0x59, 0x50, 0xfc, 0x3e, 0x7c, 0x79, 0x5d, 0x75, 0xa0, 0x6d, 0x00, 0xed, |
2779 | 0x84, 0x76, 0x5c, 0x87, 0x29, 0x73, 0xf9, 0xbf, 0xb9, 0x4b, 0xa3, 0xae, | 2799 | 0xb8, 0x0e, 0x43, 0xa6, 0x0a, 0x9f, 0x3b, 0xb3, 0x23, 0x8e, 0x33, 0xad, |
2780 | 0x3b, 0xaf, 0xf3, 0xc3, 0x12, 0xe6, 0xaa, 0x6a, 0xe8, 0xe4, 0x71, 0xc9, | 2800 | 0xf3, 0xc3, 0x62, 0xc6, 0x82, 0x6a, 0xea, 0xe4, 0x51, 0x29, 0x04, 0xdb, |
2781 | 0x87, 0xdb, 0x31, 0x57, 0xc2, 0xdc, 0x52, 0x23, 0x58, 0x0f, 0xcb, 0x3d, | 2801 | 0x31, 0x57, 0xcc, 0x58, 0x57, 0xc3, 0x58, 0x0f, 0xcb, 0x27, 0xc8, 0x13, |
2782 | 0xe4, 0x89, 0xc8, 0x9e, 0x70, 0x7c, 0x2b, 0xbd, 0xa9, 0x12, 0xd1, 0x61, | 2802 | 0xa1, 0x1d, 0xe1, 0xf8, 0x66, 0x66, 0x4d, 0xc5, 0xc2, 0x43, 0xca, 0x4c, |
2783 | 0x65, 0x25, 0x73, 0xf8, 0xb5, 0x28, 0x1d, 0x47, 0x8c, 0x44, 0x15, 0x78, | 2803 | 0xe4, 0xf1, 0x6b, 0x51, 0x3a, 0x8e, 0x18, 0x0a, 0x2b, 0xf0, 0x2e, 0xf6, |
2784 | 0x17, 0x7b, 0xb2, 0x4f, 0xba, 0x6e, 0xda, 0x66, 0x7d, 0xc2, 0x0c, 0x29, | 2804 | 0x64, 0x9d, 0x76, 0x9c, 0x8c, 0xc5, 0xfa, 0x98, 0x11, 0x50, 0xf4, 0xb7, |
2785 | 0xfa, 0x5b, 0x3a, 0x74, 0xbc, 0xf1, 0x72, 0x6f, 0xc2, 0x3c, 0xa9, 0x8e, | 2805 | 0x74, 0xea, 0x78, 0xe3, 0xb5, 0x93, 0x31, 0xe3, 0xb4, 0x3a, 0xee, 0xbd, |
2786 | 0xfb, 0xef, 0x53, 0xc0, 0xcc, 0xe6, 0x78, 0x67, 0x36, 0x95, 0x29, 0x2f, | 2806 | 0xc7, 0x81, 0x99, 0x7b, 0xe3, 0x9d, 0x5f, 0x53, 0x86, 0xbc, 0x51, 0x88, |
2787 | 0xe5, 0x13, 0xd1, 0x65, 0x65, 0x65, 0x30, 0x66, 0x66, 0x56, 0x11, 0x37, | 2807 | 0x85, 0xe7, 0x94, 0x99, 0xc5, 0x98, 0xd9, 0xb4, 0x22, 0x6e, 0xc4, 0x8c, |
2788 | 0x12, 0x66, 0x87, 0xa2, 0x4f, 0xb4, 0x5d, 0xef, 0x3b, 0x8d, 0xfe, 0x09, | 2808 | 0x4e, 0x45, 0x9f, 0x68, 0xbb, 0xde, 0x77, 0x06, 0xfd, 0x63, 0xaa, 0xc5, |
2789 | 0xd5, 0xe2, 0xaf, 0x87, 0xf7, 0xf5, 0xe3, 0x7e, 0x8f, 0x67, 0x88, 0x39, | 2809 | 0x5b, 0x0f, 0xef, 0xeb, 0xed, 0x3e, 0x97, 0x67, 0x88, 0x39, 0x23, 0xc0, |
2790 | 0xa3, 0xc0, 0x4c, 0xe6, 0x9a, 0xe9, 0xdc, 0x86, 0x64, 0x6c, 0x62, 0x54, | 2810 | 0x4c, 0xe6, 0x9a, 0xe9, 0xdc, 0x86, 0x44, 0x64, 0x7c, 0x44, 0x63, 0xe8, |
2791 | 0x63, 0xe8, 0xfd, 0x53, 0x7f, 0x47, 0x1d, 0xca, 0x25, 0xd6, 0xc5, 0x7d, | 2811 | 0xe3, 0x33, 0x7f, 0x47, 0x1d, 0xca, 0x65, 0xd6, 0x45, 0x3d, 0x7e, 0x1b, |
2792 | 0x7e, 0x1b, 0xd5, 0x3a, 0xf3, 0xfd, 0x53, 0x59, 0x9d, 0xc7, 0x58, 0x57, | 2812 | 0xd1, 0x3a, 0xf3, 0xe3, 0x33, 0x39, 0x9d, 0xf7, 0xd8, 0x50, 0x11, 0x6f, |
2793 | 0x31, 0x7f, 0xdf, 0xcd, 0x3b, 0x8b, 0xa6, 0x9c, 0x47, 0x38, 0xce, 0x5a, | 2813 | 0xdf, 0x7b, 0x77, 0x16, 0x4e, 0xda, 0x4f, 0x71, 0x9c, 0x25, 0xff, 0x64, |
2794 | 0x60, 0xba, 0x5d, 0x98, 0x23, 0x3a, 0x57, 0x6c, 0xd0, 0x06, 0xfd, 0x01, | 2814 | 0xbb, 0x30, 0xa7, 0x74, 0xaa, 0xd4, 0xa4, 0x0d, 0xfa, 0x03, 0x98, 0x2f, |
2795 | 0xcc, 0x17, 0x68, 0xc4, 0xbd, 0x2f, 0x88, 0x31, 0x11, 0x3c, 0x40, 0x27, | 2815 | 0xd0, 0x8c, 0x7b, 0x5f, 0x11, 0xdf, 0x78, 0xc7, 0x01, 0x3a, 0x81, 0xae, |
2796 | 0xd0, 0x35, 0xa1, 0xa3, 0x56, 0x30, 0x4e, 0x6e, 0x5d, 0xb2, 0x5e, 0x7f, | 2816 | 0x09, 0x1d, 0xb5, 0x8a, 0x71, 0xf2, 0x2b, 0x92, 0x73, 0xfb, 0x4b, 0x07, |
2797 | 0x09, 0x32, 0x27, 0x35, 0x57, 0xf9, 0xb4, 0x31, 0x38, 0x37, 0xe6, 0xc0, | 2817 | 0x73, 0x58, 0xf3, 0xd5, 0x2f, 0x1b, 0x83, 0x73, 0x63, 0x0e, 0xbc, 0x3f, |
2798 | 0xfb, 0xfd, 0x53, 0xa4, 0x4f, 0x9e, 0x4d, 0x54, 0xcd, 0x6d, 0x70, 0x3d, | 2818 | 0x3e, 0x43, 0xfa, 0xe4, 0xd9, 0x84, 0xd5, 0xd4, 0x2a, 0xd7, 0x33, 0x20, |
2799 | 0x83, 0x32, 0xbf, 0x3e, 0x24, 0xcb, 0xf8, 0xad, 0xae, 0x7b, 0xf7, 0xb6, | 2819 | 0xd3, 0x2b, 0x83, 0x32, 0x87, 0xdf, 0xc2, 0x8a, 0x7b, 0x6f, 0x1b, 0xd0, |
2800 | 0x0d, 0xdd, 0x7a, 0x3e, 0x6f, 0x6a, 0x7e, 0x5d, 0x76, 0x18, 0x33, 0x01, | 2820 | 0xad, 0xa7, 0x0b, 0x86, 0xe6, 0xd7, 0x39, 0x9b, 0x31, 0x13, 0xf0, 0x8a, |
2801 | 0xaf, 0xe8, 0x9c, 0x2a, 0xf6, 0x65, 0x5e, 0xe1, 0x10, 0xe5, 0xa3, 0x53, | 2821 | 0xce, 0xa9, 0x62, 0x5f, 0xc6, 0x89, 0x06, 0x29, 0x1f, 0xed, 0x06, 0xe4, |
2802 | 0x87, 0x5c, 0xdd, 0xae, 0x51, 0x4f, 0x65, 0xbd, 0x35, 0x15, 0x0d, 0x74, | 2822 | 0xea, 0x46, 0x9d, 0x7a, 0x2a, 0xeb, 0xcd, 0x78, 0xd8, 0xdf, 0x2d, 0x0b, |
2803 | 0xc9, 0x2a, 0xf0, 0xae, 0x0c, 0xd9, 0x99, 0x7b, 0x25, 0x24, 0xcb, 0x79, | 2823 | 0xc0, 0xbb, 0x0a, 0x64, 0x67, 0xfe, 0xcd, 0x80, 0xcc, 0x15, 0x74, 0x3c, |
2804 | 0x1d, 0x4f, 0x8e, 0xfe, 0x5e, 0x39, 0x52, 0xad, 0x4d, 0xca, 0x6e, 0x2d, | 2824 | 0x39, 0xfc, 0x17, 0x65, 0x4b, 0xad, 0x3e, 0x21, 0xb7, 0xeb, 0x51, 0xfd, |
2805 | 0xae, 0xbf, 0x51, 0xae, 0xe5, 0x5e, 0x37, 0xe4, 0xf9, 0x51, 0x9d, 0x57, | 2825 | 0x8d, 0x72, 0x2d, 0xff, 0x0b, 0x9f, 0xbc, 0x32, 0xa2, 0xf3, 0xea, 0xa2, |
2806 | 0x17, 0x2f, 0x4b, 0xef, 0x00, 0x75, 0x9e, 0x2d, 0x9d, 0x63, 0x07, 0xec, | 2826 | 0x15, 0x79, 0xaa, 0x9f, 0x3a, 0xcf, 0xba, 0xce, 0xb1, 0x03, 0x76, 0x40, |
2807 | 0x80, 0xce, 0xf1, 0x33, 0xe8, 0x1c, 0xef, 0x40, 0xe7, 0xf8, 0x69, 0x11, | 2827 | 0xe7, 0x78, 0x0f, 0x3a, 0xc7, 0x6f, 0xa0, 0x73, 0xfc, 0xba, 0x04, 0x7c, |
2808 | 0xf8, 0x52, 0x4c, 0xfb, 0xf8, 0xbf, 0x08, 0x1c, 0xa2, 0xac, 0xb6, 0xce, | 2828 | 0x29, 0x65, 0x3c, 0xfc, 0x9f, 0x01, 0x0e, 0x51, 0x56, 0x9b, 0xe7, 0x71, |
2809 | 0xe0, 0x4e, 0x17, 0xb3, 0xa0, 0xc1, 0x5b, 0x92, 0x06, 0xde, 0xa6, 0xe4, | 2829 | 0xa7, 0x33, 0x39, 0xd0, 0xe0, 0x47, 0x92, 0x01, 0xde, 0x26, 0x65, 0x73, |
2810 | 0xfa, 0xc6, 0xbc, 0xec, 0x6c, 0x78, 0x79, 0xc8, 0x1f, 0x30, 0x07, 0x6c, | 2830 | 0x75, 0x5a, 0xb6, 0x56, 0xdd, 0x3c, 0xe5, 0xfb, 0xcc, 0x01, 0x1b, 0xe3, |
2811 | 0x9c, 0xf7, 0x14, 0x07, 0x0e, 0x1d, 0x91, 0xd8, 0x49, 0xe2, 0x47, 0x50, | 2831 | 0x3d, 0x45, 0x81, 0x43, 0x47, 0x24, 0x72, 0x9a, 0xf8, 0xd1, 0x21, 0x6b, |
2812 | 0x36, 0x0b, 0xef, 0x68, 0x1c, 0xda, 0x2c, 0xb0, 0x1c, 0x10, 0x9d, 0x4f, | 2832 | 0xc5, 0xdf, 0x69, 0x1c, 0x5a, 0x2b, 0xb2, 0xec, 0x17, 0x9d, 0x4f, 0x76, |
2813 | 0xb6, 0xb0, 0x27, 0x65, 0xe7, 0x97, 0xa8, 0x3f, 0xa6, 0x7d, 0x40, 0x9e, | 2833 | 0x6e, 0x47, 0x2a, 0x76, 0x03, 0xf5, 0xc7, 0xb4, 0x0f, 0xc8, 0xf5, 0xc9, |
2814 | 0x4f, 0x9e, 0x78, 0xf9, 0x67, 0xff, 0xee, 0x95, 0xce, 0xb3, 0x5b, 0x32, | 2834 | 0x13, 0x2f, 0x3f, 0xf7, 0xee, 0x5e, 0xe9, 0x3c, 0xbb, 0x59, 0xa3, 0x1b, |
2815 | 0xbb, 0xd0, 0xae, 0x81, 0x5d, 0xc3, 0x5e, 0xcc, 0x5b, 0xfd, 0x05, 0x6d, | 2835 | 0xed, 0x9a, 0xd8, 0x35, 0xe4, 0xc6, 0xbc, 0xd5, 0xdf, 0xd0, 0x06, 0x73, |
2816 | 0x30, 0x47, 0xb1, 0x4b, 0xb6, 0x21, 0x43, 0xea, 0xf1, 0x2e, 0xad, 0xfb, | 2836 | 0x94, 0xba, 0x65, 0x03, 0x32, 0xa4, 0x11, 0xed, 0xd6, 0xba, 0x5f, 0x23, |
2817 | 0xd5, 0xe3, 0x43, 0x3a, 0x17, 0x97, 0xe3, 0xe4, 0x0a, 0xb6, 0xac, 0x14, | 2837 | 0x3a, 0xa8, 0x73, 0x77, 0x39, 0x4e, 0xbe, 0x68, 0xc9, 0x7c, 0xd1, 0x0c, |
2818 | 0xac, 0x68, 0x16, 0xf4, 0xb7, 0x0b, 0x5b, 0xed, 0x3a, 0xee, 0x60, 0x07, | 2838 | 0xe7, 0x40, 0x7f, 0xb7, 0x61, 0xab, 0x6d, 0xe2, 0x0e, 0xb6, 0x70, 0x06, |
2819 | 0x67, 0x70, 0xa3, 0x46, 0x39, 0x7f, 0x57, 0x63, 0xef, 0x66, 0xed, 0x4f, | 2839 | 0xdb, 0x75, 0xca, 0xf9, 0x2f, 0x34, 0xf6, 0xae, 0xd5, 0x3f, 0xc3, 0x38, |
2820 | 0x18, 0xc7, 0x3a, 0x93, 0x94, 0x3f, 0xf6, 0x13, 0x03, 0xe9, 0x8f, 0x9a, | 2840 | 0xe6, 0xf9, 0x84, 0x3c, 0xee, 0x23, 0x06, 0xd2, 0x1f, 0x95, 0xd2, 0xfd, |
2821 | 0xd1, 0xfd, 0xbd, 0x7e, 0xd7, 0xd1, 0x76, 0xa7, 0x46, 0x3c, 0x16, 0xb9, | 2841 | 0xdd, 0x7e, 0x9b, 0x68, 0xbb, 0x55, 0x27, 0x1e, 0x8b, 0x5c, 0x2d, 0x58, |
2822 | 0x94, 0xb7, 0x21, 0x4b, 0x5e, 0x8f, 0x50, 0x07, 0x28, 0xa9, 0x46, 0x3f, | 2842 | 0x90, 0x25, 0xbf, 0x0a, 0x51, 0x07, 0x28, 0xab, 0x66, 0x3f, 0xc7, 0x5b, |
2823 | 0xd7, 0x5f, 0xb3, 0xeb, 0x1e, 0xb5, 0xb9, 0xae, 0xb8, 0x8f, 0xdb, 0x94, | 2843 | 0xb3, 0xe3, 0x1c, 0xb5, 0xb8, 0xae, 0xa8, 0x87, 0xdb, 0x94, 0xfd, 0x3b, |
2824 | 0xfd, 0x7b, 0x5a, 0xee, 0xe7, 0x8b, 0x67, 0xe5, 0x2d, 0xdc, 0xb7, 0xa7, | 2844 | 0x5a, 0xee, 0x17, 0x4a, 0x17, 0xe4, 0x1d, 0xdc, 0xb7, 0xab, 0xe3, 0x64, |
2825 | 0xe3, 0x64, 0xe4, 0x4d, 0xe8, 0x78, 0xb5, 0x62, 0x23, 0x6f, 0x7b, 0x1a, | 2845 | 0xe5, 0x16, 0x74, 0xbc, 0x7a, 0xa9, 0x99, 0xd7, 0x3d, 0x89, 0x73, 0x32, |
2826 | 0xe7, 0x64, 0xa9, 0x95, 0x2b, 0x2f, 0xcb, 0xe5, 0xab, 0xfb, 0xea, 0xa5, | 2846 | 0xd5, 0xfc, 0xf2, 0x75, 0xb9, 0x76, 0x63, 0x57, 0xbd, 0x71, 0x23, 0xa2, |
2827 | 0xab, 0x31, 0xf5, 0xf2, 0x95, 0x61, 0x95, 0xbb, 0xe2, 0xba, 0xff, 0x74, | 2847 | 0xae, 0x2f, 0x0f, 0xa9, 0xfc, 0xb2, 0xe3, 0xfc, 0xd3, 0x9e, 0x95, 0x3b, |
2828 | 0x96, 0xe4, 0xdd, 0x0d, 0x57, 0x4e, 0x3b, 0xc6, 0x40, 0x40, 0x1a, 0xb9, | 2848 | 0xab, 0x8e, 0x9c, 0xb5, 0x7d, 0xfd, 0x7e, 0x69, 0xe6, 0xd6, 0x39, 0x4e, |
2829 | 0x75, 0xae, 0x1b, 0x04, 0x36, 0xdf, 0xe8, 0x75, 0xdd, 0x47, 0xc7, 0xc7, | 2849 | 0x07, 0xb0, 0x79, 0xfb, 0xa4, 0xe3, 0x3c, 0x3d, 0x36, 0x26, 0xd1, 0x93, |
2830 | 0x25, 0xde, 0x4b, 0x1d, 0xe5, 0xf3, 0x11, 0xe6, 0xbb, 0x12, 0x73, 0x52, | 2850 | 0xd4, 0x51, 0x9e, 0x0b, 0x31, 0x3f, 0x96, 0x98, 0x93, 0xb4, 0xac, 0xcb, |
2831 | 0xb6, 0x7d, 0xbe, 0xac, 0x14, 0xf0, 0xad, 0xcb, 0xd3, 0x5f, 0x1e, 0x3b, | 2851 | 0x15, 0xa5, 0x80, 0x6f, 0xdd, 0xae, 0xfe, 0xf2, 0xcc, 0x31, 0x2f, 0x56, |
2832 | 0xe6, 0xc7, 0x4a, 0x7e, 0xf4, 0x22, 0x7d, 0xc9, 0x91, 0xff, 0xf2, 0x25, | 2852 | 0x72, 0xe7, 0x35, 0xfa, 0x92, 0x43, 0xff, 0xe5, 0x4b, 0x36, 0xe4, 0x62, |
2833 | 0x9b, 0x72, 0xae, 0xf0, 0x19, 0xf4, 0x0f, 0xcb, 0xb7, 0x0a, 0xa1, 0x43, | 2853 | 0x71, 0x04, 0xfd, 0x83, 0xf2, 0xc3, 0x62, 0xe0, 0x50, 0xd9, 0xc0, 0x73, |
2834 | 0x65, 0x13, 0xcf, 0x31, 0x95, 0x2b, 0xdc, 0x73, 0x87, 0x75, 0xcc, 0x00, | 2854 | 0x54, 0xe5, 0x8b, 0x8f, 0x9c, 0x21, 0x1d, 0x33, 0x80, 0x4e, 0x62, 0x38, |
2835 | 0x3a, 0x89, 0xe9, 0xba, 0xcb, 0x0e, 0xe7, 0xeb, 0xc2, 0x7c, 0x7b, 0xe6, | 2855 | 0xce, 0x9c, 0xcd, 0xf9, 0xba, 0x31, 0xdf, 0x8e, 0x71, 0x0c, 0xf2, 0xff, |
2836 | 0x31, 0xc8, 0xff, 0xd3, 0x5a, 0x3e, 0x9f, 0x53, 0xb0, 0x7d, 0xc1, 0xdf, | 2856 | 0xac, 0x96, 0xcf, 0x17, 0x15, 0x6c, 0x5f, 0xf0, 0x77, 0x50, 0xd2, 0x45, |
2837 | 0x61, 0x99, 0x2d, 0x40, 0xc6, 0x2b, 0xe6, 0x9c, 0x52, 0x57, 0xb0, 0x22, | 2857 | 0xc8, 0x78, 0xc5, 0x9c, 0x53, 0xea, 0x0a, 0x66, 0x68, 0x0e, 0xd8, 0x31, |
2838 | 0xcb, 0xc0, 0x8e, 0x25, 0xe0, 0xcd, 0x93, 0x3a, 0xb6, 0xda, 0xa3, 0xb1, | 2858 | 0x0b, 0xbc, 0x79, 0x49, 0xc7, 0x56, 0x4f, 0x68, 0xec, 0x99, 0x67, 0x39, |
2839 | 0x67, 0x85, 0xe5, 0x8c, 0x24, 0xcb, 0x4e, 0xb7, 0x3e, 0xbf, 0xfd, 0xdd, | 2859 | 0x2b, 0x89, 0x8a, 0xdd, 0xa3, 0xcf, 0x6f, 0xf7, 0xf6, 0x2f, 0x43, 0xee, |
2840 | 0x57, 0x23, 0xde, 0x9d, 0x83, 0x8f, 0x33, 0x4a, 0xda, 0x60, 0x03, 0xcd, | 2860 | 0x9d, 0x83, 0x8f, 0xb3, 0x4a, 0xda, 0x60, 0x03, 0xa5, 0xd6, 0xcf, 0x81, |
2841 | 0x6c, 0x2d, 0x80, 0x27, 0x22, 0x38, 0xdb, 0x56, 0xcd, 0x0f, 0x75, 0xc8, | 2861 | 0x27, 0x42, 0x38, 0xdb, 0x56, 0xcd, 0x0f, 0x0d, 0xc8, 0xef, 0x86, 0xf6, |
2842 | 0xef, 0xba, 0xf6, 0x23, 0x7a, 0xf1, 0x8a, 0xba, 0xc9, 0x76, 0xcf, 0xa0, | 2862 | 0x23, 0xba, 0xf1, 0x8a, 0x86, 0xc1, 0x76, 0x17, 0xd0, 0xaf, 0x5d, 0x92, |
2843 | 0x5f, 0xbb, 0xa4, 0xae, 0xb4, 0x69, 0x5c, 0x7d, 0xb8, 0x2e, 0x09, 0x3d, | 2863 | 0xcb, 0x6d, 0x1a, 0x57, 0x9f, 0xac, 0x4b, 0x40, 0x0f, 0xf9, 0x3e, 0xca, |
2844 | 0xe4, 0x69, 0x94, 0x03, 0xa8, 0x8b, 0xfa, 0x65, 0x03, 0xe5, 0x45, 0x94, | 2864 | 0x7e, 0xd4, 0x85, 0xbd, 0xb2, 0x0f, 0xe5, 0x19, 0x94, 0x5b, 0xf0, 0x64, |
2845 | 0x5b, 0xf0, 0x64, 0x9b, 0x11, 0xe8, 0x15, 0x78, 0xbe, 0x81, 0xf1, 0xc6, | 2865 | 0x9b, 0x61, 0xe8, 0x15, 0x78, 0xbe, 0x8d, 0xf1, 0xc6, 0xb0, 0xe6, 0xac, |
2846 | 0xb1, 0xe6, 0x8c, 0x29, 0x1f, 0x9d, 0xa2, 0x2c, 0x19, 0x53, 0xcc, 0x4b, | 2866 | 0x21, 0x1f, 0x9e, 0xa1, 0x2c, 0x19, 0x55, 0xcc, 0x63, 0x9e, 0xb3, 0xf0, |
2847 | 0x5e, 0xb6, 0xf1, 0xac, 0x0e, 0xab, 0x99, 0x35, 0x96, 0xf1, 0x2c, 0x79, | 2867 | 0xac, 0x0d, 0xa9, 0xd4, 0x12, 0xcb, 0x78, 0x96, 0xdd, 0xef, 0x4f, 0x60, |
2848 | 0xdf, 0x1f, 0xc2, 0x24, 0xf4, 0x49, 0x5d, 0xf5, 0x30, 0xe9, 0xa3, 0x26, | 2868 | 0x12, 0xfa, 0x24, 0x6f, 0xb8, 0x98, 0xf4, 0xe1, 0x1e, 0x26, 0xb1, 0xae, |
2849 | 0x26, 0xb1, 0xae, 0x5d, 0x66, 0xaf, 0x90, 0xd7, 0x4d, 0xd0, 0x5b, 0x87, | 2869 | 0x5d, 0xd2, 0xcb, 0xe4, 0x75, 0x03, 0xf4, 0xd6, 0x29, 0xa9, 0x1b, 0x41, |
2850 | 0xcc, 0x5c, 0x0d, 0x6b, 0x7d, 0xb4, 0x0c, 0x5a, 0xdc, 0x06, 0x5d, 0x6d, | 2870 | 0xad, 0x8f, 0x56, 0x40, 0x8b, 0x1b, 0xa0, 0xab, 0x35, 0xd0, 0x54, 0xb2, |
2851 | 0x82, 0xa6, 0x52, 0x05, 0x6b, 0x6a, 0x51, 0x45, 0xb5, 0x2f, 0xe0, 0x09, | 2871 | 0x68, 0xc6, 0x67, 0x54, 0x58, 0xfb, 0x02, 0x5e, 0x00, 0xbd, 0x76, 0xbc, |
2852 | 0xd0, 0x6b, 0xf0, 0x15, 0xea, 0xa2, 0xe4, 0xe5, 0x38, 0x68, 0x4f, 0xdc, | 2872 | 0x49, 0x5d, 0x94, 0xbc, 0x1c, 0x05, 0xed, 0x89, 0xd3, 0x61, 0x59, 0x99, |
2853 | 0xa0, 0x6d, 0xa7, 0xe3, 0xca, 0x06, 0x0d, 0x82, 0x2e, 0x0b, 0x1e, 0x4f, | 2873 | 0xa8, 0xb2, 0x40, 0x83, 0xa0, 0xcb, 0xa2, 0xcb, 0xd3, 0xef, 0x2b, 0x8d, |
2854 | 0xbf, 0xa7, 0x34, 0xae, 0x4e, 0xdd, 0x96, 0x44, 0xf2, 0xb6, 0x58, 0xc0, | 2874 | 0xab, 0xf1, 0x07, 0x12, 0x4b, 0x3c, 0x10, 0x13, 0x58, 0x60, 0xda, 0x1f, |
2855 | 0x02, 0xcb, 0xf9, 0x50, 0x1c, 0x8c, 0x39, 0x29, 0xd7, 0x30, 0x8f, 0x01, | 2875 | 0x88, 0x8d, 0x31, 0x27, 0xe4, 0x26, 0xe6, 0xf1, 0x81, 0xbf, 0x47, 0x4e, |
2856 | 0xfe, 0x1e, 0x3d, 0xa1, 0xf9, 0x7b, 0x4a, 0x02, 0x87, 0x79, 0x1c, 0xf4, | 2876 | 0x69, 0xfe, 0x8e, 0x8b, 0xff, 0x30, 0x8f, 0x83, 0xde, 0x80, 0x41, 0x2e, |
2857 | 0x06, 0x0c, 0xf2, 0x78, 0x3a, 0xe9, 0xd3, 0xe8, 0xd7, 0xc1, 0xbf, 0x16, | 2877 | 0x4f, 0x27, 0x3c, 0x1a, 0xfd, 0x26, 0xf8, 0xd7, 0x84, 0x25, 0x16, 0x94, |
2858 | 0x2c, 0xb1, 0xb0, 0xac, 0x82, 0xff, 0xb7, 0xf1, 0xfd, 0x66, 0x6d, 0x44, | 2878 | 0x05, 0xf0, 0xff, 0x06, 0xbe, 0xdf, 0xad, 0x0f, 0xab, 0xf9, 0x25, 0xe5, |
2859 | 0xad, 0xac, 0x29, 0x3f, 0x97, 0xe4, 0x19, 0xe8, 0xc9, 0xb7, 0x70, 0x76, | 2879 | 0xe5, 0x92, 0x7c, 0x07, 0x7a, 0xf2, 0x43, 0x9c, 0x5d, 0x97, 0xd6, 0xdd, |
2860 | 0x9d, 0x5a, 0x77, 0x8f, 0x8d, 0x33, 0x7e, 0x96, 0x56, 0x97, 0xed, 0x93, | 2880 | 0x23, 0x63, 0x8c, 0x9f, 0x65, 0xd4, 0x35, 0xeb, 0xb4, 0xec, 0x8e, 0x4e, |
2861 | 0xb2, 0x3f, 0x36, 0x89, 0xf2, 0x31, 0x3c, 0x0d, 0x9c, 0x43, 0x48, 0xc7, | 2881 | 0xa0, 0x7c, 0x0c, 0x4f, 0x1f, 0xce, 0x21, 0xa0, 0xe3, 0xdf, 0x6b, 0x05, |
2862 | 0xbf, 0x37, 0xf3, 0x8e, 0xf2, 0xfe, 0x67, 0x61, 0x42, 0xe7, 0xe7, 0x1b, | 2882 | 0x5b, 0xb9, 0xff, 0xd3, 0x30, 0x8e, 0xbe, 0xc4, 0xb2, 0x93, 0xf8, 0x4e, |
2863 | 0x76, 0x2f, 0xbe, 0xd3, 0x17, 0xc3, 0xbd, 0x41, 0x67, 0x52, 0x11, 0x9d, | 2883 | 0x5f, 0x0c, 0xf7, 0x06, 0x9d, 0x49, 0x85, 0x74, 0xbe, 0x69, 0x05, 0xba, |
2864 | 0x6f, 0x5a, 0x86, 0x2e, 0xb1, 0x85, 0xf1, 0xde, 0xa7, 0x2f, 0xaf, 0x0a, | 2884 | 0xc4, 0x3a, 0xc6, 0xbb, 0x47, 0x5f, 0x5e, 0x0d, 0x3c, 0x3c, 0xfa, 0x2f, |
2865 | 0x1e, 0x1e, 0xfb, 0x97, 0x9b, 0x0c, 0x33, 0x47, 0xfd, 0x6e, 0xc4, 0x93, | 2885 | 0x27, 0x11, 0x64, 0x4e, 0xfb, 0x17, 0x21, 0x57, 0xfe, 0x7d, 0xea, 0xec, |
2866 | 0x7f, 0x9f, 0xb8, 0xfb, 0xf6, 0xca, 0x94, 0x81, 0x97, 0x5b, 0x66, 0x18, | 2886 | 0x5a, 0xf3, 0x71, 0x1f, 0x5e, 0x3e, 0x32, 0x82, 0x68, 0x0b, 0x59, 0x06, |
2867 | 0x6d, 0x21, 0xcb, 0x20, 0x8b, 0x4a, 0x9a, 0x7e, 0xd9, 0xce, 0xeb, 0x9b, | 2887 | 0x59, 0x54, 0xd6, 0xf4, 0xcb, 0x76, 0x6e, 0xdf, 0x7c, 0x2d, 0x66, 0xdc, |
2868 | 0xab, 0x26, 0xcc, 0x0f, 0xc4, 0xeb, 0xbb, 0x6a, 0x53, 0xee, 0xb4, 0x03, | 2888 | 0x17, 0xb7, 0xef, 0x82, 0x45, 0xb9, 0xd3, 0x0e, 0x7c, 0x09, 0x6b, 0xbd, |
2869 | 0x5f, 0xa2, 0x5a, 0xaf, 0x7c, 0xdf, 0xce, 0x02, 0x15, 0xac, 0x68, 0x1a, | 2889 | 0xf2, 0x9e, 0x95, 0x03, 0x2a, 0x98, 0xe1, 0x0c, 0x68, 0xb4, 0x4d, 0xcc, |
2870 | 0x34, 0xda, 0x26, 0x56, 0x7c, 0x4e, 0x1e, 0xcc, 0xbb, 0xac, 0xfb, 0xb2, | 2890 | 0xe8, 0x94, 0xec, 0xcf, 0x3b, 0xa7, 0xfb, 0xb2, 0x6d, 0xb3, 0x6f, 0x73, |
2871 | 0x6d, 0xa3, 0x6f, 0x63, 0x5e, 0xae, 0x9f, 0x7b, 0xe1, 0x1e, 0xe8, 0x9b, | 2891 | 0x5e, 0xae, 0x9f, 0x7b, 0xe1, 0x1e, 0xe8, 0x9b, 0x36, 0x34, 0x8d, 0x36, |
2872 | 0x36, 0x35, 0x8d, 0xd6, 0xab, 0xdd, 0x03, 0x1e, 0x8d, 0x36, 0xf6, 0x11, | 2892 | 0x6a, 0x03, 0xfd, 0x2e, 0x8d, 0x36, 0xf7, 0x11, 0xfc, 0x3f, 0xfb, 0x20, |
2873 | 0xfe, 0x3f, 0xfb, 0x20, 0x9d, 0x38, 0xca, 0xcb, 0xbb, 0xc0, 0xb3, 0xca, | 2893 | 0x9d, 0xd8, 0xca, 0x8d, 0xd3, 0xe3, 0x59, 0xe3, 0x79, 0x0e, 0x83, 0x36, |
2874 | 0xf3, 0x1c, 0x01, 0x6d, 0x1c, 0xa4, 0x9f, 0x86, 0x6f, 0xd1, 0xa3, 0x9f, | 2894 | 0x0e, 0xd2, 0x4f, 0xd3, 0xb7, 0xe8, 0xd2, 0xcf, 0xd3, 0x7b, 0xf4, 0x43, |
2875 | 0x47, 0x9b, 0xf4, 0x43, 0xba, 0xe9, 0x90, 0xd9, 0xab, 0xb6, 0xcc, 0x17, | 2895 | 0xba, 0xe9, 0x94, 0xf4, 0x0d, 0x4b, 0xa6, 0x8b, 0xfa, 0xbe, 0xa1, 0x6b, |
2876 | 0xf4, 0x7d, 0x43, 0xd7, 0xa4, 0xcf, 0x68, 0x12, 0x74, 0x43, 0x5a, 0x27, | 2896 | 0xd2, 0x67, 0x34, 0x01, 0xba, 0x21, 0xad, 0x93, 0xb7, 0x0c, 0x29, 0x83, |
2877 | 0x6f, 0x99, 0x52, 0x02, 0x1d, 0x95, 0x80, 0x4f, 0x25, 0xd0, 0x54, 0x19, | 2897 | 0x8e, 0xca, 0xc0, 0xa7, 0x32, 0x68, 0xaa, 0x02, 0x7c, 0x2b, 0x03, 0xdf, |
2878 | 0xf8, 0x56, 0x02, 0xbe, 0x95, 0x6a, 0x56, 0xbc, 0x82, 0x3d, 0x53, 0x66, | 2898 | 0xca, 0x75, 0x33, 0x5a, 0xc5, 0x9e, 0x29, 0xb3, 0xd7, 0x41, 0x47, 0x1b, |
2879 | 0x6f, 0x81, 0x8e, 0xb6, 0x6b, 0xbc, 0x7f, 0xbd, 0x66, 0x93, 0x72, 0xf0, | 2899 | 0x75, 0xde, 0xbf, 0x5e, 0xb3, 0x41, 0x39, 0x78, 0x77, 0xef, 0xee, 0xff, |
2880 | 0x66, 0xf3, 0xee, 0xff, 0x81, 0xbb, 0x1f, 0x92, 0x5d, 0xd8, 0x2d, 0x6f, | 2900 | 0x81, 0xbb, 0x1f, 0x94, 0xdb, 0xb0, 0x5b, 0xde, 0x29, 0x8d, 0x02, 0x93, |
2881 | 0x15, 0xc7, 0x80, 0x49, 0x02, 0x8c, 0x72, 0x40, 0x1b, 0x53, 0x72, 0xbd, | 2901 | 0x04, 0x18, 0x65, 0x83, 0x36, 0xe2, 0xb2, 0x59, 0x9a, 0x94, 0x2d, 0xc8, |
2882 | 0x38, 0x2d, 0x3b, 0x90, 0x4f, 0x37, 0x36, 0x62, 0xd0, 0xa7, 0x23, 0xb2, | 2902 | 0xa7, 0xed, 0xd5, 0x08, 0xf4, 0xe9, 0x90, 0xcc, 0xbf, 0x35, 0x22, 0xb7, |
2883 | 0xf2, 0xda, 0xa8, 0xbc, 0xb9, 0xa1, 0x64, 0x09, 0xf4, 0x9b, 0xdb, 0xa4, | 2903 | 0x56, 0x95, 0xcc, 0x82, 0x7e, 0xf3, 0x6b, 0xf4, 0xbb, 0x83, 0x9e, 0xcb, |
2884 | 0xdf, 0x1d, 0xf4, 0x5c, 0xea, 0xd0, 0x71, 0xfa, 0xd9, 0x8a, 0xe7, 0x7f, | 2904 | 0x9d, 0x3a, 0x4e, 0x9f, 0xae, 0xba, 0xfe, 0xf7, 0xa9, 0x6a, 0x97, 0x4c, |
2885 | 0x9f, 0xab, 0x74, 0xca, 0x7c, 0xc5, 0x94, 0xc7, 0x2b, 0xdd, 0xf2, 0xe5, | 2905 | 0x57, 0x0d, 0x79, 0xbe, 0xda, 0x23, 0x2f, 0x56, 0x83, 0x72, 0x16, 0x76, |
2886 | 0x4a, 0x58, 0x4e, 0xc3, 0x0e, 0xfc, 0x4a, 0x65, 0x50, 0x9e, 0xac, 0x0c, | 2906 | 0xe0, 0xd7, 0xaa, 0x03, 0xf2, 0x52, 0x75, 0x50, 0xbe, 0x5e, 0x0b, 0xcb, |
2887 | 0xc9, 0x57, 0xab, 0x51, 0xf9, 0x5a, 0xd5, 0x96, 0x4c, 0x35, 0x2e, 0xe9, | 2907 | 0x37, 0x6a, 0x96, 0x64, 0x6b, 0x51, 0xc9, 0xd4, 0x46, 0xe5, 0x85, 0x1a, |
2888 | 0xea, 0x98, 0x3c, 0x51, 0xa5, 0x5f, 0x1d, 0xf3, 0xe1, 0x37, 0xd3, 0xf4, | 2908 | 0xfd, 0xea, 0x98, 0x0f, 0xbf, 0xd4, 0x9e, 0xbf, 0x82, 0xeb, 0xea, 0xc0, |
2889 | 0x57, 0x70, 0x5d, 0x41, 0xac, 0x2b, 0xae, 0xe6, 0x74, 0x9c, 0x52, 0x32, | 2909 | 0xba, 0xa2, 0x6a, 0x4a, 0xc7, 0x29, 0x25, 0xeb, 0xfa, 0x3c, 0x44, 0x2e, |
2890 | 0x9e, 0xcf, 0x43, 0xe4, 0x39, 0x8c, 0x75, 0xf1, 0x35, 0x25, 0x65, 0x3d, | 2910 | 0x61, 0xac, 0xc5, 0xb7, 0x94, 0x54, 0xf4, 0xfc, 0xcd, 0xff, 0x33, 0x09, |
2891 | 0x7f, 0xe3, 0xff, 0x46, 0x42, 0xda, 0x36, 0x7a, 0xae, 0x34, 0x88, 0x36, | 2911 | 0x68, 0xdb, 0xe8, 0x52, 0x79, 0x00, 0x6d, 0x20, 0xf7, 0x0a, 0x4d, 0xdf, |
2892 | 0x90, 0x7b, 0xf9, 0x86, 0xef, 0xa3, 0xe1, 0xf3, 0x6f, 0xd8, 0x5e, 0x86, | 2912 | 0x47, 0xd3, 0xe7, 0xdf, 0xb4, 0xbd, 0x7c, 0xda, 0x6f, 0x7d, 0x97, 0xb6, |
2893 | 0xf6, 0x5b, 0xdf, 0xa4, 0xed, 0xa5, 0xcf, 0x9e, 0xf8, 0x41, 0x3b, 0xe7, | 2913 | 0x97, 0x3e, 0x7b, 0xe2, 0x07, 0xed, 0x9c, 0x9b, 0xda, 0x6f, 0xb2, 0x1f, |
2894 | 0x9a, 0xf6, 0x9b, 0x3c, 0x88, 0x6d, 0x34, 0xe6, 0xbd, 0x98, 0x79, 0xf8, | 2914 | 0xdb, 0x68, 0xce, 0xbb, 0x98, 0x7d, 0xf2, 0xff, 0x59, 0xdc, 0x18, 0xd5, |
2895 | 0xff, 0x53, 0xbc, 0x18, 0xd5, 0xb9, 0xea, 0x20, 0xff, 0x4f, 0x05, 0x6b, | 2915 | 0xc5, 0xda, 0x00, 0xff, 0xaf, 0x05, 0x6b, 0xf9, 0xf2, 0xdc, 0xf1, 0xe9, |
2896 | 0xf9, 0xf4, 0xdc, 0xf1, 0xf9, 0xe2, 0xac, 0x7a, 0xbc, 0x48, 0x8d, 0xc6, | 2916 | 0x52, 0x5a, 0x3d, 0x5f, 0xa2, 0x46, 0xe3, 0xc8, 0xe2, 0x5e, 0x4e, 0xdc, |
2897 | 0x95, 0x8b, 0xcd, 0x9c, 0xb8, 0x2f, 0xc9, 0xa6, 0x13, 0xd2, 0x6b, 0xf0, | 2917 | 0x73, 0xb2, 0x66, 0x07, 0xf4, 0x1a, 0x5c, 0x5f, 0x7d, 0x42, 0xe7, 0xc7, |
2898 | 0xf3, 0x1f, 0x75, 0x7e, 0xdc, 0xec, 0x09, 0xd2, 0x1f, 0x63, 0x6f, 0x9d, | 2918 | 0xa5, 0x4f, 0x91, 0xfe, 0x18, 0x7b, 0xeb, 0xf2, 0xe2, 0x09, 0xd0, 0x6d, |
2899 | 0x7e, 0x3c, 0x01, 0xba, 0xad, 0x63, 0xca, 0xa5, 0x8a, 0xe7, 0xb3, 0x5a, | 2919 | 0x6d, 0x43, 0xae, 0x56, 0x5d, 0x9f, 0xd5, 0xbc, 0xa6, 0x97, 0x7b, 0xa0, |
2900 | 0xd1, 0xf4, 0xf2, 0x2b, 0xd0, 0x1c, 0x63, 0x0e, 0xde, 0x33, 0x5b, 0xf2, | 2920 | 0x39, 0xc6, 0x1c, 0xdc, 0x67, 0xae, 0xec, 0xf6, 0x4d, 0xe1, 0xde, 0x60, |
2901 | 0xfa, 0xce, 0xe0, 0xde, 0x60, 0x8f, 0x63, 0xbf, 0x46, 0x37, 0xe7, 0xe2, | 2921 | 0x8f, 0x63, 0xbf, 0xbe, 0x1e, 0xce, 0xc5, 0xff, 0xe3, 0x41, 0xd9, 0x5b, |
2902 | 0xff, 0xe9, 0xa0, 0xec, 0xaf, 0x97, 0xb9, 0xc6, 0xb6, 0xa6, 0x45, 0x2f, | 2922 | 0x2f, 0x73, 0x8d, 0x2d, 0x4d, 0x8b, 0x6e, 0x5c, 0x37, 0x2a, 0xaf, 0xe2, |
2903 | 0xae, 0x1b, 0x97, 0x17, 0x70, 0x7e, 0x65, 0x93, 0xeb, 0x0f, 0x4a, 0x39, | 2923 | 0xfc, 0x2a, 0x06, 0xd7, 0xdf, 0x21, 0x95, 0x28, 0x6d, 0x5b, 0xe2, 0xf7, |
2904 | 0x4e, 0xdb, 0x96, 0xf8, 0x7d, 0x42, 0x4a, 0x98, 0xa7, 0x1c, 0x6f, 0xf8, | 2924 | 0x29, 0x29, 0x63, 0x9e, 0x4a, 0xb4, 0xe9, 0x0f, 0x73, 0x71, 0xb6, 0x62, |
2905 | 0xc3, 0x3c, 0x9c, 0x2d, 0x9b, 0x0f, 0xe6, 0x5d, 0x2c, 0x1d, 0xc7, 0x3b, | 2925 | 0xec, 0xcf, 0x3b, 0x53, 0x3e, 0x8e, 0x77, 0xd4, 0x45, 0xa1, 0x33, 0x9d, |
2906 | 0xea, 0xe2, 0xd0, 0x99, 0x16, 0xf8, 0x7e, 0x11, 0x65, 0xfa, 0x46, 0x56, | 2926 | 0xe3, 0xfb, 0x22, 0xca, 0xf4, 0x8d, 0xcc, 0xe3, 0x19, 0xf2, 0xea, 0xde, |
2907 | 0xf0, 0x8c, 0xf8, 0x75, 0xd5, 0x01, 0xad, 0xab, 0x4f, 0x3f, 0xe8, 0xb7, | 2927 | 0xeb, 0xd7, 0xba, 0xfa, 0xe4, 0x7e, 0xbf, 0xd9, 0xb2, 0x99, 0x4b, 0xfa, |
2908 | 0x54, 0xb2, 0xb2, 0xa9, 0x40, 0x42, 0x19, 0xaf, 0xfe, 0x7c, 0x80, 0x98, | 2928 | 0x63, 0xca, 0xf7, 0xf3, 0xdf, 0xf7, 0x13, 0x73, 0x8f, 0x5b, 0xfc, 0x05, |
2909 | 0x7b, 0xdc, 0xe6, 0x2f, 0x24, 0x7f, 0x35, 0xb5, 0x4f, 0xc1, 0xff, 0x76, | 2929 | 0xe4, 0x33, 0x43, 0xfb, 0x14, 0xbc, 0x6f, 0x47, 0xe4, 0x65, 0x83, 0x79, |
2910 | 0x44, 0x9e, 0x32, 0x99, 0xc7, 0x9e, 0x54, 0xb3, 0xc5, 0x9c, 0x9f, 0xe3, | 2930 | 0xec, 0x09, 0x95, 0x2e, 0x5d, 0xf7, 0x72, 0x7c, 0x63, 0xea, 0x78, 0xe5, |
2911 | 0x9b, 0x50, 0xc7, 0xcb, 0x37, 0x07, 0xbc, 0x9c, 0x77, 0x8e, 0x7d, 0x30, | 2931 | 0x7e, 0xbf, 0x9b, 0xf3, 0xce, 0xb1, 0x0f, 0xe6, 0xb9, 0x1f, 0xa4, 0x13, |
2912 | 0xcf, 0xfd, 0x20, 0x9d, 0x30, 0xdf, 0xbd, 0xbd, 0xf9, 0x3f, 0x52, 0xe5, | 2932 | 0xe6, 0xbb, 0xb7, 0xef, 0xfd, 0x0f, 0x55, 0xa5, 0x00, 0xbc, 0xb3, 0x5a, |
2913 | 0x3c, 0xf0, 0xce, 0x6e, 0xd1, 0xfc, 0x98, 0xab, 0xfe, 0xdb, 0xdd, 0xd3, | 2933 | 0x34, 0x3f, 0xe6, 0x6b, 0xff, 0x76, 0x76, 0x34, 0x3f, 0x37, 0x7d, 0x0c, |
2914 | 0xfc, 0xdc, 0xf0, 0x31, 0xfc, 0x6e, 0x80, 0xb6, 0x2d, 0x71, 0xe3, 0x92, | 2934 | 0x7f, 0xee, 0xa7, 0x6d, 0x4b, 0xdc, 0xb8, 0xea, 0xe6, 0x8e, 0x6a, 0x1b, |
2915 | 0x97, 0x3b, 0xaa, 0x6d, 0x68, 0x60, 0x05, 0xea, 0xc8, 0xab, 0xe0, 0x93, | 2935 | 0x1a, 0x58, 0x81, 0x3a, 0xf2, 0x2a, 0xf8, 0x64, 0xaf, 0x2d, 0xff, 0xfe, |
2916 | 0x66, 0x5b, 0xfe, 0xfd, 0x07, 0x69, 0x3f, 0x51, 0x42, 0x6c, 0x67, 0x00, | 2936 | 0x03, 0x9a, 0xb8, 0x8a, 0x6c, 0x8c, 0x67, 0x00, 0x00, 0x00 }; |
2917 | 0x00, 0x00 }; | ||
2918 | 2937 | ||
2919 | static const u32 bnx2_RXP_b09FwData[(0x0/4) + 1] = { 0x0 }; | 2938 | static const u32 bnx2_RXP_b09FwData[(0x0/4) + 1] = { 0x0 }; |
2920 | static const u32 bnx2_RXP_b09FwRodata[(0x278/4) + 1] = { | 2939 | static const u32 bnx2_RXP_b09FwRodata[(0x278/4) + 1] = { |
2921 | 0x08004050, 0x08003f50, 0x08003ff4, 0x0800400c, 0x08004024, 0x08004044, | 2940 | 0x08004070, 0x08003f70, 0x08004014, 0x0800402c, 0x08004044, 0x08004064, |
2922 | 0x08004050, 0x08004050, 0x08003f58, 0x00000000, 0x08004a0c, 0x08004a44, | 2941 | 0x08004070, 0x08004070, 0x08003f78, 0x00000000, 0x08004a2c, 0x08004a64, |
2923 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004a7c, 0x08004c40, | 2942 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004a9c, 0x08004c60, |
2924 | 0x08004b88, 0x08004bc0, 0x08004c40, 0x08004b10, 0x08004c40, 0x08004c40, | 2943 | 0x08004ba8, 0x08004be0, 0x08004c60, 0x08004b30, 0x08004c60, 0x08004c60, |
2925 | 0x08004bc0, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2944 | 0x08004be0, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2926 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c00, | 2945 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c20, |
2927 | 0x08004c40, 0x08004c00, 0x08004b88, 0x08004c40, 0x08004c40, 0x08004c00, | 2946 | 0x08004c60, 0x08004c20, 0x08004ba8, 0x08004c60, 0x08004c60, 0x08004c20, |
2928 | 0x08004c00, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2947 | 0x08004c20, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2929 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2948 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2930 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2949 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2931 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2950 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2932 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2951 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2933 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2952 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2934 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2953 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2935 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2954 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2936 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2955 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2937 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2956 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2938 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2957 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2939 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2958 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2940 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2959 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2941 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2960 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2942 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2961 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2943 | 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, 0x08004c40, | 2962 | 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, 0x08004c60, |
2944 | 0x08004aec, 0x00000000, 0x08006058, 0x08006070, 0x08006070, 0x08006070, | 2963 | 0x08004b0c, 0x00000000, 0x08006078, 0x08006090, 0x08006090, 0x08006090, |
2945 | 0x08006058, 0x08006070, 0x08006070, 0x08006070, 0x08006058, 0x08006070, | 2964 | 0x08006078, 0x08006090, 0x08006090, 0x08006090, 0x08006078, 0x08006090, |
2946 | 0x08006070, 0x08006070, 0x08006058, 0x08006070, 0x08006070, 0x08006070, | 2965 | 0x08006090, 0x08006090, 0x08006078, 0x08006090, 0x08006090, 0x08006090, |
2947 | 0x08006064, 0x00000000, 0x00000000 }; | 2966 | 0x08006084, 0x00000000, 0x00000000 }; |
2948 | 2967 | ||
2949 | static struct fw_info bnx2_rxp_fw_09 = { | 2968 | static struct fw_info bnx2_rxp_fw_09 = { |
2969 | /* Firmware version: 3.7.1 */ | ||
2950 | .ver_major = 0x3, | 2970 | .ver_major = 0x3, |
2951 | .ver_minor = 0x4, | 2971 | .ver_minor = 0x7, |
2952 | .ver_fix = 0x3, | 2972 | .ver_fix = 0x1, |
2953 | 2973 | ||
2954 | .start_addr = 0x08003184, | 2974 | .start_addr = 0x08003184, |
2955 | 2975 | ||
2956 | .text_addr = 0x08000000, | 2976 | .text_addr = 0x08000000, |
2957 | .text_len = 0x6768, | 2977 | .text_len = 0x6788, |
2958 | .text_index = 0x0, | 2978 | .text_index = 0x0, |
2959 | .gz_text = bnx2_RXP_b09FwText, | 2979 | .gz_text = bnx2_RXP_b09FwText, |
2960 | .gz_text_len = sizeof(bnx2_RXP_b09FwText), | 2980 | .gz_text_len = sizeof(bnx2_RXP_b09FwText), |
2961 | 2981 | ||
2962 | .data_addr = 0x08006a00, | 2982 | .data_addr = 0x08006a20, |
2963 | .data_len = 0x0, | 2983 | .data_len = 0x0, |
2964 | .data_index = 0x0, | 2984 | .data_index = 0x0, |
2965 | .data = bnx2_RXP_b09FwData, | 2985 | .data = bnx2_RXP_b09FwData, |
2966 | 2986 | ||
2967 | .sbss_addr = 0x08006a00, | 2987 | .sbss_addr = 0x08006a20, |
2968 | .sbss_len = 0x20, | 2988 | .sbss_len = 0x20, |
2969 | .sbss_index = 0x0, | 2989 | .sbss_index = 0x0, |
2970 | 2990 | ||
2971 | .bss_addr = 0x08006a20, | 2991 | .bss_addr = 0x08006a40, |
2972 | .bss_len = 0x13dc, | 2992 | .bss_len = 0x13dc, |
2973 | .bss_index = 0x0, | 2993 | .bss_index = 0x0, |
2974 | 2994 | ||
2975 | .rodata_addr = 0x08006768, | 2995 | .rodata_addr = 0x08006788, |
2976 | .rodata_len = 0x278, | 2996 | .rodata_len = 0x278, |
2977 | .rodata_index = 0x0, | 2997 | .rodata_index = 0x0, |
2978 | .rodata = bnx2_RXP_b09FwRodata, | 2998 | .rodata = bnx2_RXP_b09FwRodata, |
2979 | }; | 2999 | }; |
2980 | 3000 | ||
2981 | static u8 bnx2_TPAT_b09FwText[] = { | 3001 | static u8 bnx2_TPAT_b09FwText[] = { |
2982 | /* 0x1f, 0x8b, 0x08, 0x00, 0x0e, 0x34, 0xe7, 0x45, 0x00, 0x03, */ | 3002 | 0xcd, 0x58, 0x5d, 0x6c, 0x1c, 0x57, 0x15, 0x3e, 0xf3, 0xb7, 0x3b, 0xde, |
2983 | 0xcd, 0x58, | 3003 | 0x38, 0xf1, 0x24, 0x19, 0xca, 0xa6, 0x72, 0xe9, 0x8c, 0x3d, 0x76, 0x8c, |
2984 | 0x5d, 0x68, 0x1c, 0xd7, 0x15, 0x3e, 0xf3, 0xb7, 0x3b, 0x52, 0x24, 0xeb, | 3004 | 0x6c, 0x35, 0xd3, 0x76, 0xd5, 0x58, 0x68, 0xa4, 0x4e, 0x67, 0x76, 0x1d, |
2985 | 0x5a, 0xd9, 0xa6, 0xeb, 0xa0, 0x34, 0x33, 0xda, 0x91, 0xac, 0x22, 0x13, | 3005 | 0x2b, 0xf4, 0xc1, 0x85, 0x48, 0x3c, 0xf0, 0xe2, 0xae, 0x1d, 0x05, 0x78, |
2986 | 0x4f, 0x9d, 0x25, 0x16, 0x65, 0x21, 0x93, 0xd9, 0x91, 0xac, 0x98, 0x3c, | 3006 | 0x2a, 0x28, 0x0f, 0x11, 0x2f, 0x59, 0x76, 0x37, 0xfd, 0x41, 0xdb, 0x2c, |
2987 | 0x28, 0xc5, 0x90, 0x87, 0x52, 0x50, 0x57, 0x32, 0x09, 0x79, 0x69, 0xda, | 3007 | 0x35, 0xc8, 0x41, 0x02, 0xa4, 0xb0, 0x69, 0xe2, 0x97, 0xad, 0x27, 0x2d, |
2988 | 0xc6, 0x90, 0x3e, 0x79, 0x3b, 0x2b, 0xc7, 0x0e, 0x6c, 0xbc, 0x8d, 0x52, | 3008 | 0x45, 0xea, 0x4b, 0x95, 0x28, 0x55, 0x2b, 0xc4, 0x13, 0x2f, 0x54, 0x79, |
2989 | 0xe4, 0x52, 0xfa, 0x60, 0xd6, 0xb1, 0x05, 0xcd, 0x46, 0x93, 0xd4, 0x7e, | 3009 | 0xac, 0x52, 0x5a, 0xf1, 0x00, 0x28, 0x42, 0x15, 0xaa, 0x68, 0xf0, 0xe5, |
2990 | 0x35, 0x36, 0x4e, 0x93, 0xa7, 0x42, 0x9f, 0x52, 0xf4, 0x18, 0xd2, 0x12, | 3010 | 0x3b, 0x77, 0x66, 0xdc, 0xdd, 0xc4, 0x49, 0xcb, 0x9f, 0x84, 0xa5, 0xf5, |
2991 | 0xda, 0x52, 0x8a, 0x69, 0xa1, 0x09, 0x8d, 0xeb, 0xdb, 0xef, 0xdc, 0x99, | 3011 | 0x9d, 0xb9, 0xf7, 0x9e, 0x73, 0xcf, 0x3d, 0x3f, 0xdf, 0x39, 0x67, 0xca, |
2992 | 0x91, 0x57, 0xb6, 0xec, 0xa4, 0x25, 0x85, 0x0a, 0x56, 0x77, 0xe6, 0xce, | 3012 | 0x2a, 0x95, 0x28, 0xfb, 0xdb, 0x8d, 0xdf, 0xc9, 0xa7, 0x9f, 0x39, 0x79, |
2993 | 0x3d, 0xe7, 0x9e, 0x7b, 0xee, 0x77, 0xbe, 0x73, 0xee, 0x2d, 0xeb, 0x34, | 3013 | 0xf8, 0xa1, 0x47, 0x1d, 0xa2, 0x87, 0x1f, 0x52, 0x94, 0xa2, 0x46, 0xff, |
2994 | 0x48, 0xd9, 0xdf, 0x30, 0x7e, 0x2f, 0x7e, 0xf7, 0x85, 0x17, 0xab, 0x8f, | 3014 | 0x85, 0x3f, 0x30, 0xb1, 0x72, 0xfe, 0xfc, 0x23, 0x53, 0x0d, 0x7e, 0xe3, |
2995 | 0x3c, 0xea, 0x10, 0x3d, 0xfa, 0x88, 0x66, 0x98, 0x06, 0x7d, 0x09, 0x7f, | 3015 | 0x44, 0x1e, 0x99, 0x5a, 0xb0, 0xf4, 0xe5, 0x15, 0x8f, 0x28, 0xec, 0xcf, |
2996 | 0x50, 0x22, 0x72, 0xfd, 0xfc, 0x23, 0x5b, 0xaf, 0x9d, 0x72, 0x42, 0x8f, | 3016 | 0x3a, 0x31, 0xfd, 0x43, 0x34, 0x6c, 0x9d, 0x78, 0xfe, 0x81, 0xe0, 0xd6, |
2997 | 0x6c, 0xa3, 0x26, 0xbe, 0xbe, 0xe4, 0x11, 0x05, 0xbd, 0x69, 0xa7, 0x4e, | 3017 | 0xa1, 0x37, 0x0f, 0xbb, 0x37, 0xcf, 0x6b, 0x64, 0x5a, 0xc1, 0xb2, 0x69, |
2998 | 0xff, 0x92, 0xcd, 0x92, 0x49, 0xdc, 0xff, 0x50, 0xed, 0xc6, 0xfe, 0xcb, | 3018 | 0x4d, 0x93, 0x39, 0x1e, 0x5c, 0x75, 0x7e, 0x7e, 0x30, 0x28, 0xd0, 0x9e, |
2999 | 0x07, 0xdd, 0xeb, 0x67, 0x0d, 0xb2, 0x45, 0x6d, 0xd1, 0x16, 0x93, 0x64, | 3019 | 0x9c, 0x97, 0x4d, 0xcd, 0x2e, 0x35, 0xf4, 0xc0, 0xa4, 0x5a, 0xe7, 0x94, |
3000 | 0x8f, 0xd5, 0x9a, 0xce, 0x2f, 0xf6, 0x1e, 0x28, 0xd0, 0xae, 0x5c, 0x97, | 3020 | 0x12, 0x75, 0x3d, 0xab, 0x0a, 0x1e, 0xa1, 0x0d, 0xfe, 0x1e, 0xde, 0x13, |
3001 | 0xa0, 0xb8, 0x43, 0x4d, 0xab, 0x66, 0x53, 0xd4, 0x7e, 0x49, 0x0b, 0x3b, | 3021 | 0x5d, 0xa9, 0x9e, 0x33, 0x49, 0x0d, 0x42, 0x3c, 0xcf, 0x51, 0xab, 0x2b, |
3002 | 0x9e, 0x98, 0x85, 0x8e, 0xa0, 0x04, 0xfd, 0x1e, 0xde, 0x13, 0x53, 0x8b, | 3022 | 0xc4, 0x0f, 0x7d, 0x85, 0x56, 0x7c, 0x93, 0x96, 0x2d, 0x77, 0x31, 0x54, |
3003 | 0xce, 0xd8, 0xa4, 0xd7, 0x02, 0x3c, 0x4f, 0x51, 0xab, 0x23, 0xe5, 0x2b, | 3023 | 0xb6, 0x44, 0x3c, 0x25, 0xc4, 0xb7, 0x7d, 0x95, 0x54, 0x6f, 0x41, 0x89, |
3004 | 0xbe, 0x46, 0x4b, 0xbe, 0x4d, 0x8b, 0xc2, 0x0d, 0x1c, 0xed, 0xa6, 0xac, | 3024 | 0x36, 0x16, 0x95, 0x78, 0x63, 0x91, 0xf5, 0x01, 0xf9, 0x16, 0x94, 0x70, |
3005 | 0x4c, 0x48, 0xf9, 0x9c, 0xaf, 0x93, 0xee, 0xcd, 0x69, 0xe1, 0xfa, 0xbc, | 3025 | 0x83, 0xc7, 0xc0, 0x8c, 0x3b, 0x7b, 0x68, 0xd9, 0xa6, 0x31, 0xd5, 0x9b, |
3006 | 0x56, 0x5f, 0x9f, 0x67, 0x7f, 0xc0, 0xbe, 0x39, 0x2d, 0x58, 0xe7, 0xb6, | 3026 | 0xc3, 0x79, 0x65, 0xf0, 0x71, 0x28, 0xf2, 0x67, 0x2d, 0x95, 0x26, 0xf1, |
3007 | 0x66, 0xd7, 0xdb, 0xbb, 0x68, 0xb1, 0x44, 0x23, 0xba, 0x37, 0x85, 0xf9, | 3027 | 0x1b, 0xa1, 0x9a, 0x4f, 0x23, 0xaa, 0xa7, 0x52, 0xdd, 0x56, 0xe8, 0xe5, |
3008 | 0x4a, 0xd0, 0xe3, 0x50, 0xe8, 0x4f, 0x0b, 0x9d, 0x2a, 0xf8, 0x0d, 0xd0, | 3028 | 0x8a, 0x81, 0xdf, 0x51, 0xa5, 0xba, 0xf1, 0x9d, 0x8c, 0x0f, 0xef, 0x37, |
3009 | 0xac, 0x4f, 0x03, 0xba, 0xa7, 0x53, 0xa3, 0xa4, 0xd1, 0x1b, 0x55, 0x0b, | 3029 | 0xb1, 0xc6, 0x32, 0x33, 0xfd, 0x20, 0xed, 0x6e, 0x3c, 0x7f, 0x0b, 0xfb, |
3010 | 0xbf, 0xc3, 0x5a, 0xb4, 0xfe, 0x7c, 0xa6, 0x87, 0xc7, 0xdb, 0xf8, 0xc6, | 3030 | 0x0c, 0x8a, 0x2a, 0xb7, 0xaf, 0x8d, 0xe0, 0x59, 0xc1, 0xfc, 0x51, 0xc8, |
3011 | 0x36, 0xb3, 0x7c, 0xbf, 0xec, 0x30, 0x9e, 0x9f, 0xc3, 0x38, 0x8b, 0xc2, | 3031 | 0xc5, 0x7c, 0x1c, 0xc8, 0x31, 0x4e, 0xed, 0xee, 0x22, 0xee, 0x53, 0xa0, |
3012 | 0xea, 0xed, 0xdf, 0x06, 0xf0, 0xac, 0xa1, 0xff, 0x30, 0xec, 0x62, 0x3d, | 3032 | 0x86, 0x35, 0x35, 0x53, 0x27, 0x1d, 0x34, 0x1a, 0x85, 0xf6, 0x15, 0xa1, |
3013 | 0x0e, 0xec, 0x28, 0xd3, 0x4a, 0x67, 0x1e, 0xeb, 0x29, 0x50, 0x53, 0x4c, | 3033 | 0x06, 0x42, 0x44, 0x15, 0x6f, 0xa6, 0x27, 0xcf, 0x50, 0x49, 0xf3, 0x0a, |
3014 | 0x4c, 0x35, 0xc8, 0x84, 0x8c, 0x41, 0x41, 0xe9, 0x8a, 0xd4, 0x6b, 0x52, | 3034 | 0x54, 0xf5, 0x77, 0x53, 0xcb, 0xd2, 0xa8, 0x39, 0x67, 0x50, 0xb8, 0xa4, |
3015 | 0x86, 0x55, 0x6f, 0xaa, 0xab, 0xe6, 0xd0, 0xc9, 0xf0, 0x0a, 0x14, 0xf9, | 3035 | 0xe3, 0x8e, 0xfb, 0x40, 0xa7, 0x80, 0xfe, 0xa5, 0xcc, 0xe6, 0x45, 0x6a, |
3016 | 0xc3, 0xd4, 0x12, 0x06, 0xc5, 0xfb, 0x2c, 0x0a, 0x16, 0x4c, 0xac, 0x71, | 3036 | 0x5a, 0x05, 0xcc, 0x8f, 0x51, 0xd3, 0xde, 0xab, 0xa8, 0xc1, 0x0b, 0x98, |
3017 | 0x14, 0x72, 0x1a, 0xe4, 0x5f, 0xcb, 0xf6, 0xbc, 0x48, 0xb1, 0x28, 0xa0, | 3037 | 0x9f, 0xb2, 0x7a, 0xf4, 0x3c, 0x46, 0x05, 0xef, 0x7b, 0xb1, 0x97, 0xdf, |
3018 | 0x7f, 0x84, 0xe2, 0xd2, 0x6e, 0x4d, 0xaf, 0xbd, 0x82, 0xfe, 0x09, 0xd1, | 3038 | 0x15, 0xf0, 0x23, 0x2b, 0x4a, 0x66, 0xa8, 0x95, 0xe4, 0xb4, 0x3c, 0x9f, |
3019 | 0xa5, 0x53, 0x68, 0x35, 0xbc, 0xef, 0xc6, 0x58, 0x7e, 0xd7, 0xa0, 0x8f, | 3039 | 0xce, 0x35, 0x92, 0xdb, 0xed, 0x8d, 0x7d, 0xdd, 0x1a, 0x74, 0xcc, 0xb6, |
3020 | 0x44, 0x98, 0x78, 0xd4, 0x4a, 0x72, 0x59, 0xee, 0x4f, 0xfb, 0x9a, 0xc9, | 3040 | 0xc1, 0x9e, 0xdc, 0x2e, 0xd2, 0x07, 0x1e, 0xe7, 0x79, 0xfe, 0xc3, 0xbc, |
3021 | 0xed, 0xfb, 0xed, 0xc1, 0x4e, 0x41, 0x27, 0x3a, 0xb3, 0x98, 0x8f, 0x9a, | 3041 | 0x43, 0x5a, 0xe0, 0x59, 0x31, 0x7d, 0x85, 0xd2, 0xb5, 0x54, 0xf6, 0xc8, |
3022 | 0x46, 0x0d, 0xe3, 0xb0, 0x37, 0xbc, 0xbf, 0x81, 0xc2, 0xc1, 0xe3, 0xdc, | 3042 | 0x7f, 0x2c, 0x7b, 0xb7, 0xad, 0xe8, 0xdc, 0xa3, 0xb8, 0x9f, 0x74, 0x19, |
3023 | 0xcf, 0x7f, 0xe8, 0x77, 0xc8, 0xa8, 0xf1, 0xb7, 0x6f, 0x52, 0xfa, 0x2d, | 3043 | 0x3c, 0xdb, 0xb8, 0x7f, 0x01, 0xfe, 0xd1, 0x0c, 0x55, 0x6a, 0x94, 0x4d, |
3024 | 0xb5, 0x3f, 0xf4, 0x1f, 0xcb, 0xde, 0x4b, 0x22, 0x3c, 0xf3, 0x28, 0xd6, | 3044 | 0x72, 0xe7, 0x57, 0xb1, 0xf2, 0x41, 0x47, 0xa3, 0x98, 0x75, 0xe5, 0xeb, |
3025 | 0xa8, 0x60, 0x83, 0xe7, 0x02, 0xf0, 0x11, 0xcf, 0xe8, 0xd4, 0x2c, 0x17, | 3045 | 0x19, 0x1d, 0xfb, 0xc6, 0xbb, 0x90, 0xb3, 0x61, 0x99, 0x70, 0xbc, 0xe5, |
3026 | 0xc9, 0xf5, 0x8f, 0xa2, 0xf7, 0xd7, 0x6d, 0x83, 0xea, 0xec, 0x2b, 0xdf, | 3046 | 0x63, 0x42, 0x5c, 0xf4, 0x85, 0x28, 0x04, 0xde, 0xcc, 0x25, 0x9a, 0x2d, |
3027 | 0xcc, 0x64, 0x18, 0x1b, 0x1f, 0x64, 0x76, 0x0a, 0x5a, 0x3c, 0x22, 0xe5, | 3047 | 0x1b, 0x34, 0x6d, 0x61, 0x84, 0x8e, 0xbd, 0x72, 0x9d, 0x8c, 0x5c, 0x9e, |
3028 | 0x8a, 0x2f, 0xa5, 0x55, 0xf3, 0x9c, 0x13, 0x34, 0x5d, 0x36, 0x69, 0x52, | 3048 | 0xdc, 0x37, 0xf1, 0xd7, 0x57, 0x08, 0x3e, 0x79, 0xa3, 0xf3, 0x7b, 0xd6, |
3029 | 0xa0, 0x85, 0x8f, 0xbd, 0x72, 0x83, 0x2c, 0x60, 0xa1, 0x1f, 0xff, 0xfc, | 3049 | 0xc7, 0xcc, 0x82, 0xa4, 0x11, 0xa2, 0x37, 0x7f, 0x2f, 0x9a, 0x5f, 0x67, |
3030 | 0xf7, 0xa6, 0x86, 0x25, 0xd0, 0xb5, 0x36, 0xeb, 0x98, 0x70, 0x66, 0x95, | 3050 | 0x34, 0x42, 0xd4, 0x2a, 0x7c, 0xae, 0x8b, 0x3b, 0xb3, 0x7f, 0x13, 0xd5, |
3031 | 0x8c, 0x94, 0xf1, 0xcc, 0xbd, 0x64, 0x2e, 0x65, 0x32, 0x52, 0x46, 0x55, | 3051 | 0xfa, 0xbe, 0x59, 0xef, 0x40, 0x3e, 0x0f, 0x63, 0x9f, 0xa8, 0xde, 0xe5, |
3032 | 0x81, 0x3d, 0x6f, 0x0a, 0xd8, 0x87, 0x75, 0x31, 0xc6, 0x89, 0xa2, 0x9e, | 3052 | 0x7b, 0x98, 0xd4, 0x84, 0xde, 0x5a, 0xd8, 0xaf, 0x56, 0x76, 0xb1, 0x7f, |
3033 | 0x6f, 0x37, 0xda, 0xb0, 0xd1, 0x43, 0xdb, 0x13, 0xf0, 0x0f, 0x51, 0x0b, | 3053 | 0xc0, 0xc6, 0x4b, 0x66, 0xb5, 0xe3, 0x96, 0x5f, 0xa0, 0x25, 0x33, 0xee, |
3034 | 0x63, 0xf5, 0xea, 0x7d, 0x8c, 0x0d, 0xec, 0xef, 0x82, 0x1d, 0xb5, 0xdd, | 3054 | 0xcf, 0x96, 0x57, 0xe9, 0x01, 0x3e, 0xc7, 0x34, 0x82, 0x63, 0x66, 0x4f, |
3035 | 0xf2, 0x29, 0x5a, 0xb0, 0xeb, 0xbd, 0xe9, 0xf2, 0x32, 0x3d, 0xc4, 0x73, | 3055 | 0xd2, 0x1b, 0x1a, 0x95, 0xf0, 0x0c, 0x1e, 0xcd, 0x0e, 0x29, 0x91, 0xbf, |
3036 | 0xd8, 0x56, 0xed, 0x88, 0xdd, 0x55, 0x72, 0x88, 0xc4, 0x41, 0x3c, 0xf7, | 3056 | 0x8b, 0xef, 0x0b, 0xba, 0xc5, 0x8c, 0x6e, 0x31, 0xa3, 0x1b, 0xcb, 0xe8, |
3037 | 0x88, 0xe2, 0x36, 0x69, 0xa1, 0x7f, 0x1f, 0xaf, 0x15, 0x72, 0xf3, 0x99, | 3057 | 0x9e, 0x1c, 0xa0, 0x7b, 0x92, 0xe9, 0xb0, 0x37, 0xcc, 0xf6, 0x86, 0xd9, |
3038 | 0xdc, 0x7c, 0x26, 0x37, 0x92, 0xc9, 0x3d, 0xd5, 0x27, 0xf7, 0x14, 0xcb, | 3058 | 0x5e, 0x3d, 0xdb, 0x5b, 0xcd, 0xf6, 0x62, 0xec, 0x3b, 0x90, 0xcf, 0x9d, |
3039 | 0x61, 0x6c, 0x90, 0x8d, 0x0d, 0xb2, 0xb1, 0x66, 0x36, 0x36, 0xca, 0xc6, | 3059 | 0x09, 0x15, 0xc8, 0xe8, 0x89, 0x07, 0x23, 0x9f, 0xc2, 0xd8, 0x73, 0xaf, |
3040 | 0xa2, 0xed, 0x8d, 0xc1, 0x36, 0x77, 0xca, 0xd1, 0x6c, 0x8a, 0x3d, 0xf9, | 3060 | 0xc7, 0xda, 0x18, 0x5d, 0xf0, 0x2d, 0x6a, 0x27, 0x0e, 0x64, 0x6f, 0x53, |
3041 | 0x70, 0xe8, 0x53, 0x50, 0xf7, 0xdc, 0xcd, 0xba, 0x31, 0x42, 0xe7, 0xfc, | 3061 | 0x94, 0xa8, 0xa0, 0x1d, 0xa3, 0x9e, 0x77, 0x53, 0xd4, 0xfc, 0x0a, 0x6c, |
3042 | 0x21, 0x5a, 0x49, 0xc6, 0x28, 0x4e, 0x56, 0x28, 0x4c, 0x74, 0xc8, 0x8e, | 3062 | 0x37, 0xca, 0x74, 0xe5, 0x1a, 0x14, 0xd1, 0x4c, 0x66, 0xad, 0x55, 0xaa, |
3043 | 0x50, 0xd7, 0xbb, 0x2e, 0x67, 0x7d, 0x1f, 0x7b, 0x66, 0xb3, 0x5c, 0x79, | 3063 | 0xc0, 0x5f, 0x54, 0xd8, 0x6f, 0x52, 0x3e, 0x37, 0x93, 0x0a, 0xd6, 0xa9, |
3044 | 0x96, 0x1c, 0x7c, 0x9f, 0x16, 0xcb, 0xe4, 0x03, 0x2b, 0x3a, 0xf6, 0xad, | 3064 | 0xa1, 0x56, 0x5c, 0xab, 0x49, 0x6e, 0x39, 0xd2, 0xc8, 0x52, 0x03, 0x1b, |
3045 | 0xa2, 0x9e, 0xe3, 0xc4, 0xe7, 0x35, 0x37, 0xf5, 0xaa, 0x2b, 0x62, 0x72, | 3065 | 0x7b, 0x1a, 0x54, 0x4d, 0x4c, 0x7a, 0x4f, 0x3b, 0x25, 0xe3, 0xb4, 0xd9, |
3046 | 0xcb, 0xa1, 0x41, 0x42, 0xaf, 0xc1, 0x4f, 0x49, 0x93, 0xa2, 0xc4, 0xa6, | 3066 | 0xbd, 0x2e, 0xde, 0x3c, 0xe8, 0xd0, 0x95, 0x64, 0x9c, 0x7e, 0x95, 0x94, |
3047 | 0x0f, 0x8d, 0x97, 0x54, 0x8c, 0xc6, 0x9d, 0x4d, 0x79, 0x79, 0xaf, 0x43, | 3067 | 0xe9, 0xb5, 0xc4, 0xa6, 0x57, 0x13, 0x52, 0x23, 0x1f, 0x7e, 0x6c, 0x5b, |
3048 | 0x57, 0x30, 0xcf, 0xc5, 0xa4, 0x4c, 0xbf, 0x4a, 0x4a, 0xf4, 0x4e, 0x42, | 3068 | 0x74, 0x39, 0x19, 0xd4, 0xfb, 0x07, 0xac, 0x77, 0x73, 0x7f, 0x40, 0xe6, |
3049 | 0x7a, 0xe8, 0x03, 0xc3, 0x25, 0x41, 0x6f, 0x27, 0xfd, 0x3e, 0xff, 0x88, | 3069 | 0xbe, 0x80, 0x1a, 0x5a, 0x90, 0xe2, 0x40, 0x9c, 0xe2, 0x80, 0xf4, 0xa9, |
3050 | 0x7d, 0x6e, 0xdf, 0x5f, 0x23, 0x7b, 0xb4, 0xc6, 0x38, 0x4b, 0x39, 0xa0, | 3070 | 0x56, 0xb7, 0x79, 0xbf, 0x06, 0x0c, 0x5a, 0xf1, 0xc3, 0xbd, 0x1a, 0xec, |
3051 | 0x9e, 0x72, 0x80, 0xc2, 0x52, 0xab, 0x13, 0x3f, 0x68, 0x80, 0x7f, 0x96, | 3071 | 0x12, 0x23, 0x0a, 0xd4, 0xed, 0x51, 0xda, 0xc8, 0x5d, 0xf1, 0xdc, 0xe7, |
3052 | 0xfc, 0x60, 0xb7, 0xa1, 0xf6, 0xa3, 0x89, 0x3d, 0xcc, 0x5b, 0xde, 0x9b, | 3072 | 0x63, 0xec, 0xf6, 0xce, 0x1a, 0x98, 0xbd, 0xdd, 0xb6, 0x7f, 0xc6, 0x19, |
3053 | 0xab, 0xce, 0x92, 0xe7, 0x9e, 0xaa, 0x33, 0x6a, 0x4f, 0x5b, 0x39, 0x2e, | 3073 | 0xa3, 0xb0, 0x9b, 0x46, 0x4f, 0xe8, 0x88, 0x1f, 0xef, 0x23, 0x8d, 0x63, |
3054 | 0xfb, 0xe6, 0xf8, 0x33, 0xe6, 0x18, 0xa2, 0x06, 0xe2, 0xec, 0x09, 0x13, | 3074 | 0xc0, 0xd9, 0xb4, 0xe9, 0x4c, 0x97, 0x68, 0x62, 0xd3, 0xa4, 0x8d, 0x4e, |
3055 | 0xb1, 0xe3, 0xfd, 0xdd, 0x60, 0x5c, 0x39, 0x1b, 0x8c, 0x6f, 0xa2, 0xf1, | 3075 | 0x91, 0x9c, 0xde, 0x28, 0xad, 0x74, 0x4b, 0x34, 0x79, 0x49, 0xc7, 0xde, |
3056 | 0x0d, 0x9b, 0xd6, 0xdb, 0x45, 0x72, 0xba, 0x43, 0xb4, 0xd4, 0x19, 0xa4, | 3076 | 0x5d, 0x34, 0xb9, 0xa6, 0xda, 0x1c, 0xcb, 0x31, 0x74, 0x3c, 0xd1, 0x13, |
3057 | 0xca, 0x05, 0x13, 0x63, 0xef, 0xa3, 0xca, 0xaa, 0x5e, 0xe2, 0x38, 0xae, | 3077 | 0xf0, 0xd1, 0x12, 0x4d, 0xac, 0xbb, 0xd2, 0x7f, 0x56, 0xbc, 0x96, 0xaf, |
3058 | 0xc3, 0xc7, 0xe3, 0x5d, 0x09, 0x7c, 0x0e, 0xd2, 0xf8, 0x9a, 0xab, 0xb0, | 3078 | 0xd1, 0x0f, 0xe8, 0xda, 0x5c, 0x01, 0x77, 0xb2, 0xc9, 0x9f, 0x1e, 0x3c, |
3059 | 0xb3, 0xe4, 0xb5, 0x7c, 0x83, 0x7e, 0x4c, 0xd7, 0xf6, 0x15, 0xb0, 0xa6, | 3079 | 0xcf, 0x80, 0x9b, 0xf1, 0x1c, 0x98, 0xee, 0x71, 0x1d, 0x52, 0x99, 0x9f, |
3060 | 0x12, 0xf9, 0x93, 0xfd, 0xf3, 0xe9, 0x80, 0x18, 0xf7, 0xc5, 0x45, 0xda, | 3080 | 0x49, 0x13, 0x97, 0x4c, 0x25, 0xee, 0xb2, 0xce, 0xd8, 0x07, 0xcd, 0xcc, |
3061 | 0xe5, 0x3a, 0xa4, 0xb3, 0x3e, 0x9b, 0xc6, 0x2f, 0xd8, 0x5a, 0xbd, 0xc3, | 3081 | 0x07, 0x75, 0x25, 0x3a, 0x57, 0xc4, 0x59, 0x7f, 0x12, 0x91, 0x07, 0xdf, |
3062 | 0x3e, 0x63, 0xfc, 0xd9, 0x19, 0xfe, 0x4c, 0x2d, 0x3c, 0x53, 0xc4, 0x5c, | 3082 | 0x03, 0x96, 0xad, 0x54, 0xbe, 0x0f, 0xf9, 0x30, 0xd7, 0xe3, 0xb5, 0x9b, |
3063 | 0x7f, 0x91, 0xa1, 0x27, 0xb1, 0x0f, 0x3a, 0x2d, 0x55, 0x7f, 0x04, 0xfb, | 3083 | 0xd9, 0x3c, 0xf3, 0x00, 0x46, 0xf8, 0xfb, 0x29, 0x62, 0x3c, 0x38, 0xc6, |
3064 | 0xd0, 0xd7, 0xe5, 0x6f, 0xd7, 0xb3, 0x7e, 0xd6, 0x01, 0x7e, 0xf0, 0xef, | 3084 | 0x34, 0x45, 0x9a, 0x58, 0x63, 0x8c, 0xc1, 0xd8, 0xe3, 0x77, 0xbe, 0xdb, |
3065 | 0xa7, 0x90, 0xb9, 0xe0, 0x08, 0xcb, 0x14, 0x69, 0x7c, 0x95, 0xf9, 0x05, | 3085 | 0x08, 0xd5, 0xa1, 0x95, 0xfa, 0x8c, 0x0d, 0xb9, 0x54, 0x89, 0x19, 0x75, |
3066 | 0x6d, 0x97, 0xdf, 0x79, 0x6d, 0x03, 0xd4, 0x80, 0x57, 0x1a, 0x53, 0x25, | 3086 | 0x60, 0x88, 0xea, 0x95, 0x30, 0xf2, 0x79, 0x3f, 0xd3, 0xd2, 0xf8, 0xb7, |
3067 | 0xd8, 0xa5, 0x2b, 0xbe, 0x68, 0x80, 0x3f, 0x74, 0x6f, 0x10, 0x2d, 0xcf, | 3087 | 0xa5, 0xbd, 0x63, 0xf8, 0xaf, 0x0e, 0x79, 0x56, 0x69, 0xaa, 0x7c, 0x5c, |
3068 | 0xf7, 0x73, 0x23, 0x8f, 0xa9, 0xb8, 0x33, 0x44, 0x75, 0xe0, 0xd7, 0x84, | 3088 | 0xae, 0x61, 0xae, 0xcf, 0x6b, 0xd6, 0x6d, 0x6b, 0x78, 0xef, 0xe7, 0x32, |
3069 | 0x3d, 0xcb, 0x34, 0x51, 0x3e, 0xaa, 0xbe, 0xa1, 0xaf, 0xc7, 0xdf, 0xc4, | 3089 | 0x20, 0xc6, 0xbd, 0x16, 0x4e, 0x31, 0x32, 0xbd, 0xf0, 0xfe, 0x46, 0x19, |
3070 | 0x6d, 0xdf, 0xf0, 0xde, 0xcb, 0x6d, 0x40, 0x6c, 0x7b, 0x2d, 0xcc, 0x62, | 3090 | 0xb6, 0x01, 0xa6, 0x11, 0x74, 0x49, 0xd4, 0xeb, 0xe8, 0xc0, 0x1c, 0xf5, |
3071 | 0x65, 0x7e, 0xe1, 0xf1, 0xcd, 0x32, 0xf6, 0x06, 0x7c, 0x46, 0xf0, 0x25, | 3091 | 0x8b, 0x2a, 0xd3, 0xd9, 0xcc, 0x07, 0xf7, 0x5f, 0xd7, 0x95, 0xf8, 0x9c, |
3072 | 0x51, 0xb7, 0x6d, 0x82, 0x6f, 0xf4, 0xaf, 0xea, 0x2c, 0x57, 0x62, 0x3d, | 3092 | 0xe7, 0xfc, 0x81, 0x98, 0x7e, 0x12, 0x3a, 0x98, 0x9a, 0x6f, 0xf1, 0xfe, |
3073 | 0x58, 0xff, 0x9a, 0xa9, 0xd5, 0xcf, 0x78, 0xce, 0x1f, 0x88, 0xe5, 0x2b, | 3093 | 0xbe, 0x41, 0xde, 0x5a, 0xc3, 0xd2, 0x61, 0x53, 0x15, 0x06, 0x8d, 0x7f, |
3074 | 0xf0, 0xc1, 0xc4, 0x4c, 0x8b, 0xc7, 0xf7, 0x2c, 0xf2, 0x56, 0x9b, 0xc2, | 3094 | 0x34, 0x06, 0x5b, 0xbb, 0x4e, 0x8b, 0x7e, 0x07, 0x79, 0x0a, 0xe4, 0xf5, |
3075 | 0xc4, 0x9e, 0xc2, 0x73, 0x54, 0xff, 0xc9, 0x08, 0xf6, 0xda, 0x75, 0x5a, | 3095 | 0x74, 0x7a, 0xb9, 0xc3, 0xba, 0x30, 0x69, 0x72, 0x5d, 0x88, 0xe7, 0x7c, |
3076 | 0xf4, 0x5b, 0xd8, 0x53, 0x20, 0xaf, 0x6b, 0xd2, 0x1b, 0x6d, 0xf6, 0x85, | 3096 | 0xb6, 0xc9, 0xbb, 0xd0, 0x0b, 0xe1, 0x86, 0x53, 0xf3, 0x37, 0x60, 0x9f, |
3077 | 0x4d, 0x95, 0x35, 0x29, 0x4f, 0xfa, 0xbc, 0x27, 0xbf, 0x83, 0x5f, 0x08, | 3097 | 0x8d, 0x3e, 0xdb, 0xc6, 0x90, 0x3a, 0xf1, 0xd6, 0xe6, 0x60, 0xd7, 0x99, |
3078 | 0x2b, 0x9c, 0x98, 0xf9, 0x08, 0xfb, 0xb3, 0xde, 0xe3, 0xbd, 0xb1, 0x94, | 3098 | 0x4c, 0x46, 0xb6, 0x97, 0x4e, 0xed, 0x8a, 0x4a, 0x17, 0x2b, 0x9f, 0x08, |
3079 | 0x4f, 0xbc, 0xd5, 0x29, 0xec, 0xeb, 0x54, 0x66, 0x23, 0xef, 0x97, 0x49, | 3099 | 0xd5, 0x63, 0x8c, 0x2d, 0x40, 0xb7, 0xd8, 0xd7, 0xc3, 0xbe, 0xa4, 0x00, |
3080 | 0x2b, 0x55, 0x9d, 0xce, 0x57, 0x3f, 0x93, 0xba, 0xc7, 0xfc, 0x5a, 0x80, | 3100 | 0x1d, 0xfe, 0x4d, 0x18, 0xc0, 0xdf, 0x8b, 0x15, 0xcc, 0xaf, 0x9d, 0x86, |
3081 | 0x6f, 0x31, 0xae, 0x8b, 0x71, 0x49, 0x01, 0x3e, 0xfc, 0x07, 0x78, 0x45, | 3101 | 0xac, 0x1a, 0x68, 0x53, 0x1f, 0x63, 0x79, 0x16, 0x3a, 0xf9, 0xfd, 0xbc, |
3082 | 0xca, 0xf3, 0x55, 0xf4, 0xaf, 0x1e, 0x87, 0xad, 0x06, 0x64, 0x53, 0x8c, | 3102 | 0xf9, 0xb7, 0x25, 0xbf, 0x51, 0x9a, 0xde, 0x1c, 0xa5, 0x13, 0xfd, 0x51, |
3083 | 0xb1, 0x3d, 0x73, 0xed, 0x7c, 0x7d, 0xde, 0xcc, 0x7b, 0x4a, 0xdf, 0x10, | 3103 | 0x9a, 0x38, 0xcb, 0x34, 0x42, 0xb4, 0x2b, 0x8c, 0x91, 0xf0, 0x51, 0x4f, |
3084 | 0x4d, 0x6e, 0x0c, 0xd1, 0xb3, 0xbd, 0x21, 0x1a, 0x3f, 0xcd, 0x32, 0xe0, | 3104 | 0xea, 0xa1, 0xac, 0xa9, 0x7c, 0x4f, 0xac, 0x6f, 0x12, 0xad, 0xf6, 0xf9, |
3085 | 0xa6, 0xaa, 0x27, 0x22, 0xc6, 0xa8, 0xa7, 0xfc, 0x50, 0x36, 0x74, 0x5e, | 3105 | 0x0c, 0x7d, 0x80, 0xa7, 0x4a, 0x47, 0x7e, 0x42, 0x74, 0xa4, 0xcf, 0xb4, |
3086 | 0x27, 0xbe, 0x6f, 0x10, 0x2d, 0xf7, 0x78, 0x0e, 0xb3, 0x4f, 0xa7, 0x4e, | 3106 | 0xdb, 0xba, 0x03, 0x5f, 0x0b, 0x3c, 0x2d, 0xe2, 0x5c, 0xa4, 0x79, 0xc8, |
3087 | 0x87, 0x7e, 0x4a, 0x74, 0xa8, 0xc7, 0xb2, 0x5b, 0xbe, 0x83, 0x5e, 0x01, | 3107 | 0x79, 0x1b, 0x11, 0x72, 0x58, 0x15, 0xbf, 0x05, 0xe4, 0x35, 0xbe, 0xff, |
3088 | 0x9d, 0x82, 0x38, 0x0f, 0x19, 0x1e, 0xf2, 0xdd, 0x7a, 0x88, 0xfc, 0x15, | 3108 | 0x1c, 0xe2, 0x8f, 0xb1, 0x7c, 0x0b, 0x77, 0x2f, 0x50, 0xdb, 0x5f, 0xc4, |
3089 | 0xe1, 0x37, 0x87, 0x9c, 0xc6, 0xeb, 0x9f, 0x42, 0xfc, 0x31, 0x8f, 0xdf, | 3109 | 0x1e, 0xb6, 0xf1, 0x51, 0xac, 0xef, 0x46, 0x2e, 0xc8, 0x72, 0x85, 0xc5, |
3090 | 0xc4, 0xda, 0x0b, 0xb4, 0xe2, 0xcf, 0x63, 0x0c, 0xef, 0xf1, 0x61, 0x7c, | 3110 | 0xb9, 0x62, 0x2f, 0xe2, 0x60, 0x04, 0xf8, 0x7f, 0xbf, 0x3e, 0x9c, 0x2b, |
3091 | 0x1f, 0x46, 0x1e, 0xc8, 0xf2, 0x84, 0xe0, 0x3c, 0xb1, 0x1b, 0x71, 0x30, | 3111 | 0xb0, 0xcf, 0x3e, 0x80, 0xdc, 0x80, 0x44, 0x5d, 0x62, 0x5e, 0xfb, 0x31, |
3092 | 0x00, 0xee, 0xdf, 0x63, 0x6e, 0xcf, 0x13, 0x18, 0x57, 0xda, 0x83, 0xbc, | 3112 | 0x8e, 0xe0, 0xfd, 0x00, 0xf6, 0x0e, 0xe6, 0x89, 0x9c, 0xee, 0x6e, 0x39, |
3093 | 0x70, 0x3f, 0xfa, 0x59, 0xd7, 0x28, 0xda, 0x01, 0xbc, 0xef, 0xc1, 0xd8, | 3113 | 0x02, 0x31, 0xb1, 0x86, 0x58, 0x59, 0x9f, 0x61, 0xcc, 0x80, 0x3d, 0xd8, |
3094 | 0xfe, 0x1c, 0x91, 0xcb, 0xdd, 0x2d, 0x3f, 0x20, 0x26, 0x56, 0x11, 0x2b, | 3114 | 0xa6, 0x45, 0x60, 0xb8, 0x09, 0x1e, 0x6c, 0xdb, 0x22, 0x6c, 0xc8, 0x79, |
3095 | 0x6b, 0x9c, 0x27, 0x38, 0x16, 0x79, 0x4f, 0x8b, 0xe0, 0x6f, 0x1b, 0x3a, | 3115 | 0xce, 0xa2, 0xc9, 0x4d, 0x8e, 0xeb, 0x34, 0x8f, 0xc4, 0xdb, 0x79, 0x84, |
3096 | 0x78, 0x6f, 0x8b, 0xd8, 0x43, 0xce, 0x71, 0x82, 0x2a, 0x1b, 0x3b, 0xe5, | 3116 | 0x64, 0x4c, 0x34, 0x13, 0xf6, 0x89, 0xd0, 0x8c, 0xce, 0x6e, 0x09, 0xc4, |
3097 | 0x0f, 0x5e, 0x0f, 0x38, 0xec, 0x34, 0xaf, 0xc5, 0x15, 0x0d, 0xf0, 0x59, | 3117 | 0x70, 0x39, 0x66, 0x5c, 0xdb, 0x9c, 0x05, 0xbd, 0x86, 0xf8, 0xa8, 0x9a, |
3098 | 0xb8, 0x31, 0x8d, 0xef, 0xc8, 0x85, 0x22, 0xb2, 0x1b, 0xa7, 0x53, 0x2e, | 3118 | 0xf5, 0xb3, 0x29, 0xa6, 0xd5, 0x37, 0x1d, 0xe9, 0x93, 0xcd, 0xc4, 0xc2, |
3099 | 0x6b, 0x6c, 0x8c, 0x29, 0x9c, 0xc6, 0x89, 0xc0, 0x3b, 0x73, 0x59, 0xce, | 3119 | 0x3b, 0x63, 0x5a, 0x8e, 0x61, 0x4c, 0x4f, 0x61, 0x04, 0x7c, 0x8b, 0x34, |
3100 | 0x5d, 0x8c, 0x25, 0x0a, 0x20, 0xbb, 0x19, 0x1a, 0x52, 0x2e, 0xf9, 0x23, | 3120 | 0x21, 0x56, 0xfc, 0x31, 0xaa, 0xc3, 0x3f, 0x43, 0xe0, 0x5a, 0x1d, 0xb8, |
3101 | 0xd4, 0x00, 0x2e, 0x03, 0xf0, 0x59, 0x03, 0x7c, 0x56, 0xef, 0xe3, 0xb3, | 3121 | 0x16, 0x0f, 0xe0, 0x5a, 0xfc, 0x99, 0xb8, 0x06, 0xcc, 0xea, 0x02, 0xb3, |
3102 | 0xfa, 0xe7, 0xf2, 0x19, 0xb8, 0xaa, 0x03, 0xae, 0xea, 0x80, 0xab, 0x50, | 3122 | 0x50, 0x23, 0xbc, 0x06, 0x8c, 0x7f, 0x15, 0xe7, 0x5d, 0xee, 0xee, 0x84, |
3103 | 0x1b, 0xbc, 0x03, 0xec, 0xbf, 0xdd, 0xd9, 0x89, 0xe3, 0x98, 0xdf, 0x98, | 3123 | 0x75, 0x8c, 0x73, 0x8c, 0x77, 0x33, 0xf4, 0xe6, 0xc1, 0x7f, 0x15, 0xef, |
3104 | 0xe7, 0xa6, 0xe8, 0xf2, 0xde, 0xff, 0x94, 0xe7, 0x8e, 0x83, 0x13, 0x6c, | 3124 | 0xda, 0xc0, 0x06, 0x93, 0xbe, 0x7b, 0xf0, 0xde, 0x98, 0x77, 0x06, 0x98, |
3105 | 0xfa, 0xfe, 0xde, 0x7b, 0x73, 0xdd, 0x09, 0x70, 0x9d, 0xf5, 0xf9, 0x5c, | 3125 | 0x67, 0x7c, 0x36, 0xe6, 0x35, 0x18, 0xf3, 0x74, 0xf8, 0x60, 0x03, 0x78, |
3106 | 0xd7, 0x64, 0xae, 0x33, 0x81, 0xbd, 0x26, 0x78, 0x40, 0x5f, 0xed, 0x9f, | 3126 | 0xa0, 0xae, 0x0d, 0x9e, 0xd3, 0xc1, 0x39, 0x3c, 0xa7, 0x67, 0x79, 0x55, |
3107 | 0xe7, 0x24, 0xe6, 0xe1, 0x3e, 0x33, 0xcb, 0xa5, 0x3a, 0x75, 0x81, 0x7b, | 3127 | 0xa5, 0x1e, 0xfc, 0x5f, 0xf3, 0xf8, 0x9c, 0x39, 0xd6, 0xbb, 0xd4, 0xff, |
3108 | 0xc3, 0xe3, 0x79, 0x60, 0x73, 0x92, 0x72, 0xd1, 0x13, 0x66, 0x89, 0xac, | 3128 | 0x13, 0xba, 0x4d, 0xc6, 0x34, 0xfc, 0x62, 0x6d, 0x94, 0xb4, 0xb3, 0x9f, |
3109 | 0x49, 0xe0, 0x61, 0x75, 0x88, 0x8c, 0xd3, 0xb7, 0xf0, 0x8e, 0x7a, 0x00, | 3129 | 0xfa, 0x3d, 0x6a, 0x03, 0xc4, 0x3b, 0xfe, 0x6d, 0xe6, 0x3c, 0x4a, 0xc0, |
3110 | 0x71, 0x8e, 0x7f, 0x1b, 0xb9, 0x8e, 0x41, 0x70, 0x8d, 0x49, 0x85, 0x55, | 3130 | 0x1c, 0x9d, 0x0a, 0x6b, 0x06, 0xde, 0x95, 0xa1, 0x7d, 0x47, 0x90, 0x77, |
3111 | 0x0b, 0xef, 0xda, 0xb6, 0x71, 0x87, 0x90, 0x6f, 0x8c, 0x9a, 0x3b, 0xf3, | 3131 | 0xb4, 0xc0, 0x9d, 0x7f, 0x9f, 0x9f, 0xfb, 0xbc, 0xa7, 0x44, 0xea, 0xba, |
3112 | 0x7b, 0x7e, 0xee, 0xf1, 0x98, 0x41, 0xd2, 0xd7, 0x5c, 0xc7, 0xd1, 0x5d, | 3132 | 0xeb, 0x38, 0xaa, 0xeb, 0x5f, 0x03, 0x46, 0xbc, 0xe3, 0x31, 0x0e, 0x36, |
3113 | 0xff, 0x1a, 0xb8, 0xe1, 0x7d, 0x8f, 0xf9, 0x2f, 0x06, 0x0a, 0x0a, 0x64, | 3133 | 0xe1, 0x0d, 0x05, 0xd2, 0xd7, 0xc4, 0x69, 0x23, 0xe0, 0xb3, 0x1b, 0x0e, |
3114 | 0xae, 0xca, 0xe3, 0x56, 0x8d, 0xe7, 0x6e, 0x3a, 0x88, 0x73, 0xe7, 0x35, | 3134 | 0xe2, 0xdd, 0x79, 0x09, 0x7e, 0xc4, 0x39, 0xf4, 0x22, 0xe2, 0xa7, 0x96, |
3115 | 0xe0, 0x87, 0x73, 0xe7, 0xf9, 0x2a, 0xd7, 0x7b, 0x69, 0x8c, 0xb6, 0x7a, | 3135 | 0xc5, 0x6a, 0xab, 0x9f, 0x9f, 0xb9, 0x0f, 0x72, 0x1b, 0xa0, 0x19, 0xdc, |
3116 | 0xf9, 0x9c, 0xa3, 0xb0, 0xdb, 0x82, 0x4c, 0xff, 0x58, 0xc6, 0x8b, 0x94, | 3136 | 0xcb, 0x71, 0x20, 0xc4, 0x09, 0xdc, 0x49, 0xc3, 0x39, 0xc6, 0xba, 0x49, |
3117 | 0xcf, 0x62, 0x4d, 0x06, 0xe6, 0xb1, 0xd6, 0x6c, 0x2a, 0xac, 0xb1, 0x5f, | 3137 | 0x85, 0x75, 0xd6, 0x8b, 0x0b, 0xfa, 0x49, 0x6b, 0x81, 0xae, 0x0f, 0xe1, |
3118 | 0x5c, 0xc8, 0x57, 0xc4, 0x1c, 0x6d, 0x6e, 0xe3, 0x83, 0x93, 0xbd, 0x0f, | 3138 | 0xc2, 0x73, 0xfd, 0xeb, 0x3a, 0x63, 0xa9, 0x86, 0x18, 0x2d, 0xe2, 0x5c, |
3119 | 0x4c, 0xe6, 0x50, 0x03, 0xb1, 0x59, 0xc4, 0xbc, 0xd6, 0x96, 0x2e, 0xca, | 3139 | 0x63, 0x9b, 0x17, 0x65, 0xbc, 0x98, 0xde, 0x2b, 0x9f, 0xd8, 0xa6, 0x67, |
3120 | 0x74, 0xb1, 0xbc, 0x57, 0x7e, 0x76, 0x4b, 0x9e, 0x79, 0x6d, 0xa2, 0xcc, | 3140 | 0x7c, 0x9b, 0x2a, 0x33, 0x8e, 0xb1, 0x1c, 0x9a, 0xc4, 0xd4, 0x52, 0x86, |
3121 | 0xfc, 0xc5, 0x76, 0x18, 0x8a, 0x4b, 0x07, 0x33, 0x2e, 0xad, 0x60, 0x3f, | 3141 | 0xa9, 0x93, 0xb0, 0x67, 0x49, 0xc6, 0xa7, 0xea, 0x3d, 0x98, 0xe1, 0xea, |
3122 | 0x07, 0x55, 0x5c, 0xea, 0xde, 0xc3, 0x19, 0x9f, 0xee, 0x46, 0xcb, 0x7d, | 3142 | 0x5e, 0x8c, 0x3c, 0x27, 0xb2, 0x78, 0xd1, 0x21, 0x2f, 0xf3, 0x2d, 0x91, |
3123 | 0x37, 0xb2, 0x38, 0x31, 0x61, 0x2f, 0xeb, 0x1d, 0x24, 0x03, 0x76, 0x45, | 3143 | 0xb6, 0xce, 0x35, 0x04, 0xdf, 0xe9, 0xaf, 0xf0, 0x6d, 0xc6, 0x0a, 0xf6, |
3124 | 0x6a, 0x4d, 0x7f, 0x93, 0x4b, 0x1e, 0x73, 0x04, 0xe3, 0x53, 0x71, 0x29, | 3144 | 0x4f, 0x89, 0xa9, 0x98, 0x9f, 0x82, 0xcc, 0x8c, 0x0f, 0x4c, 0xc7, 0xf4, |
3125 | 0xfa, 0x27, 0x60, 0x33, 0xf3, 0x02, 0xcb, 0xb1, 0xfc, 0x4e, 0x72, 0x7f, | 3145 | 0x3b, 0xd1, 0xfd, 0x05, 0x74, 0xd6, 0x0e, 0x74, 0x98, 0xdb, 0x64, 0x1a, |
3126 | 0x85, 0x9c, 0xd8, 0x41, 0x0e, 0x7d, 0x1b, 0x2c, 0xc3, 0xdc, 0x30, 0x8a, | 3146 | 0xc6, 0x88, 0x7d, 0xd8, 0x1f, 0x31, 0x3e, 0x40, 0x67, 0x4c, 0x3b, 0x9e, |
3127 | 0xf1, 0x21, 0xf3, 0x02, 0x7c, 0xc6, 0xb2, 0xe5, 0x2c, 0x0e, 0x23, 0x7c, | 3147 | 0xc5, 0x63, 0x15, 0x6b, 0x5c, 0x03, 0xcb, 0xf8, 0x22, 0x23, 0xe0, 0x7b, |
3128 | 0xe3, 0xba, 0x97, 0xe3, 0x23, 0x20, 0xab, 0xc6, 0xeb, 0xe0, 0x9a, 0x98, | 3148 | 0x70, 0x7d, 0xcc, 0xf9, 0x91, 0x6b, 0x52, 0xae, 0x3d, 0xf3, 0x5a, 0xd5, |
3129 | 0xf3, 0x22, 0xd7, 0xa1, 0x5c, 0x6f, 0xe6, 0xf5, 0xa9, 0x37, 0x35, 0x7b, | 3149 | 0x9b, 0xa9, 0xdd, 0xad, 0xee, 0xb4, 0x06, 0xeb, 0xce, 0x43, 0xc6, 0xce, |
3130 | 0xb7, 0x5a, 0x53, 0xf4, 0xd7, 0x9a, 0xe8, 0xd8, 0xb1, 0xd6, 0xf4, 0xac, | 3150 | 0x75, 0xe7, 0x41, 0x23, 0xad, 0x3b, 0xa7, 0x8d, 0xbb, 0xd7, 0x9d, 0x39, |
3131 | 0xb4, 0xd6, 0xac, 0x58, 0x77, 0xaf, 0x35, 0x73, 0xd9, 0x7b, 0xd7, 0x9a, | 3151 | 0xed, 0xbd, 0xeb, 0xce, 0x66, 0x97, 0xcf, 0xdc, 0x19, 0x2f, 0x56, 0xe0, |
3132 | 0x71, 0x87, 0xf7, 0x08, 0xb9, 0x54, 0xf0, 0x5a, 0xa8, 0x69, 0x66, 0x7c, | 3152 | 0xaf, 0xad, 0x24, 0xbf, 0x27, 0xf7, 0x06, 0xa1, 0x59, 0x3b, 0x9b, 0xda, |
3133 | 0x11, 0xdd, 0xc6, 0x17, 0xd1, 0x69, 0xb7, 0x7c, 0x8e, 0x38, 0xa6, 0xdd, | 3153 | 0xbe, 0x29, 0x7d, 0x11, 0x38, 0xb2, 0x39, 0x0b, 0x3b, 0xa2, 0xa6, 0x1e, |
3134 | 0x72, 0x8b, 0x6b, 0xa0, 0x0d, 0xae, 0x81, 0x0c, 0xe4, 0xd2, 0x7e, 0xce, | 3154 | 0xc2, 0x8e, 0x9c, 0x86, 0x75, 0x5a, 0x02, 0x46, 0xb3, 0x3e, 0x8b, 0x19, |
3135 | 0xc8, 0x7d, 0xc2, 0xbe, 0x1c, 0x04, 0x27, 0xb3, 0x1f, 0x8b, 0x19, 0x3f, | 3155 | 0x4e, 0x60, 0xf4, 0x3e, 0x06, 0x4e, 0xe4, 0xf8, 0xc2, 0xfc, 0xfe, 0x9f, |
3136 | 0xa0, 0xf5, 0x3e, 0x05, 0x3f, 0xe4, 0xbc, 0xc2, 0x3e, 0xfb, 0x7f, 0xe2, | 3156 | 0xf0, 0x85, 0xcc, 0x11, 0xe0, 0x84, 0x19, 0x30, 0x5e, 0x4a, 0x59, 0x50, |
3137 | 0x15, 0xb2, 0x07, 0xc0, 0x0f, 0x36, 0xea, 0xcd, 0x46, 0x47, 0xd9, 0x02, | 3157 | 0x93, 0x0b, 0xb1, 0xe0, 0x73, 0x0c, 0x0c, 0xf6, 0x4c, 0xec, 0x0f, 0x45, |
3138 | 0x5f, 0x48, 0x39, 0xe7, 0x33, 0xf6, 0x53, 0xbe, 0x50, 0x3e, 0x51, 0x78, | 3158 | 0x7a, 0xcb, 0x67, 0x9f, 0x40, 0xcf, 0xe4, 0x71, 0x8e, 0x64, 0x3c, 0xde, |
3139 | 0x2c, 0xd2, 0xbb, 0x3e, 0x63, 0x01, 0xe7, 0x23, 0x8f, 0x73, 0x22, 0xf3, | 3159 | 0x12, 0x6f, 0x79, 0x11, 0xe6, 0xaa, 0xb0, 0x3d, 0xfb, 0xc3, 0xa2, 0x72, |
3140 | 0xef, 0x4d, 0xf9, 0xae, 0x17, 0xa2, 0x2f, 0xc2, 0x9e, 0x33, 0x0e, 0xe6, | 3160 | 0x64, 0xc3, 0x04, 0x1d, 0xfb, 0xc4, 0xf8, 0x1d, 0xbd, 0x50, 0xda, 0xb3, |
3141 | 0xb5, 0x43, 0xeb, 0x36, 0xe4, 0x18, 0x0b, 0xe5, 0x3b, 0xce, 0x3d, 0xe9, | 3161 | 0x70, 0x7d, 0xfc, 0xef, 0xfa, 0xc8, 0x1b, 0x77, 0xf1, 0x91, 0xcb, 0x99, |
3142 | 0xf9, 0x84, 0x6b, 0xe1, 0xff, 0x16, 0x1b, 0x17, 0xef, 0x82, 0x8d, 0x37, | 3162 | 0x8f, 0x24, 0xf7, 0xf0, 0x91, 0x37, 0x3e, 0xa7, 0x8f, 0xb8, 0xe5, 0x0f, |
3143 | 0x33, 0x6c, 0xfc, 0xf2, 0x1e, 0xd8, 0xb8, 0xf8, 0x05, 0xb1, 0xe1, 0x3a, | 3163 | 0x51, 0x3f, 0xbd, 0x0d, 0x39, 0x42, 0x4b, 0x88, 0x0f, 0xfd, 0x9d, 0xfa, |
3144 | 0x1f, 0xa3, 0x5e, 0x7a, 0xcf, 0x63, 0x7c, 0x48, 0xf9, 0xb1, 0xbf, 0x53, | 3164 | 0x94, 0xd0, 0xd4, 0x5f, 0x64, 0x9d, 0xa5, 0x79, 0xa5, 0x85, 0x77, 0xed, |
3145 | 0x3e, 0x09, 0x6c, 0xe3, 0xd5, 0x9b, 0x32, 0xce, 0x72, 0x89, 0xfe, 0xd6, | 3165 | 0x15, 0xae, 0x97, 0x39, 0xe7, 0xa4, 0xb9, 0x65, 0xe2, 0xc5, 0xd4, 0x3f, |
3146 | 0xad, 0x5c, 0x32, 0xfe, 0x6a, 0x8a, 0x8b, 0xf1, 0xb7, 0xa4, 0x3c, 0xb7, | 3166 | 0x26, 0x5e, 0x11, 0xe2, 0xc2, 0x0e, 0xfe, 0xc0, 0x35, 0xf4, 0x55, 0xf8, |
3147 | 0x03, 0x0e, 0xb8, 0x56, 0xbe, 0x0a, 0x1e, 0x68, 0xd1, 0xff, 0xa2, 0x56, | 3167 | 0x55, 0x8b, 0xfe, 0x17, 0x35, 0x34, 0x63, 0x78, 0xc5, 0x3c, 0xde, 0xc9, |
3148 | 0x66, 0xce, 0xae, 0xda, 0x47, 0xdb, 0xf9, 0xbe, 0xe7, 0x7b, 0x5e, 0xa0, | 3168 | 0xed, 0x9f, 0xdb, 0xbe, 0x40, 0xe7, 0xad, 0x3d, 0xd0, 0xdb, 0xa3, 0xd4, |
3149 | 0xb3, 0x62, 0x17, 0xfc, 0xb5, 0x9f, 0x5a, 0xaf, 0x9b, 0x7c, 0x7e, 0x00, | 3169 | 0xfa, 0xb1, 0xce, 0x7d, 0x05, 0xfc, 0xe2, 0x71, 0x9d, 0x63, 0x17, 0x7d, |
3150 | 0x1e, 0x1e, 0x37, 0x39, 0x56, 0x71, 0x56, 0xc4, 0x73, 0x7f, 0x3d, 0x0d, | 3170 | 0x24, 0x9e, 0x07, 0xeb, 0x6c, 0xf8, 0xa5, 0x5f, 0xc8, 0xe3, 0x65, 0x00, |
3151 | 0x3c, 0xfa, 0xbc, 0x76, 0xb5, 0xee, 0x3e, 0xae, 0xff, 0x1e, 0x4a, 0x92, | 3171 | 0xfb, 0x4f, 0xa1, 0x54, 0xb9, 0x23, 0xaf, 0x0c, 0xf5, 0xd4, 0x1a, 0x7a, |
3152 | 0x3b, 0xf2, 0xc8, 0xb6, 0x73, 0xb3, 0x81, 0x73, 0x73, 0x5d, 0xe9, 0xe0, | 3172 | 0xea, 0x58, 0xf2, 0xe0, 0xbe, 0x2b, 0xd5, 0x63, 0x5b, 0xf6, 0xd1, 0x5b, |
3153 | 0xb3, 0x55, 0xea, 0xbf, 0x13, 0xea, 0xac, 0x7c, 0x53, 0x9e, 0x53, 0xe7, | 3173 | 0xa2, 0x25, 0x7b, 0xe9, 0x03, 0x05, 0x2a, 0x2d, 0x66, 0x3e, 0xe3, 0x20, |
3154 | 0xe5, 0xd1, 0x02, 0x0d, 0xce, 0x67, 0x58, 0x61, 0x5f, 0x0c, 0xab, 0x7a, | 3174 | 0x1f, 0xb9, 0x7e, 0x03, 0xfc, 0xb9, 0xd6, 0x80, 0x1c, 0xb4, 0x8a, 0x58, |
3155 | 0x82, 0x31, 0xd5, 0x42, 0xbe, 0x5d, 0x82, 0x3f, 0x1a, 0x2a, 0x16, 0xb0, | 3175 | 0xbc, 0x80, 0x3c, 0xbc, 0x02, 0xbd, 0xd4, 0x65, 0x6c, 0x8c, 0xd1, 0x35, |
3156 | 0xf6, 0xcc, 0x1f, 0x2d, 0xf8, 0xa3, 0x9e, 0xa4, 0x31, 0xf1, 0xe5, 0x9e, | 3176 | 0xe4, 0xfe, 0x36, 0xf2, 0xf3, 0x19, 0xe8, 0xa6, 0x05, 0xdd, 0xc4, 0x49, |
3157 | 0x1d, 0xfe, 0x88, 0x7c, 0x6a, 0x2f, 0x9a, 0x38, 0x6f, 0x5f, 0x49, 0x54, | 3177 | 0x1a, 0x27, 0xd7, 0xa0, 0x9b, 0x85, 0x01, 0xdd, 0x2c, 0xfc, 0x47, 0xfd, |
3158 | 0xfe, 0x5c, 0x68, 0xb5, 0xa9, 0xf9, 0x60, 0xed, 0x38, 0xd7, 0x6d, 0x5c, | 3178 | 0xc5, 0x1f, 0x91, 0x6b, 0xcd, 0x65, 0x1d, 0xf3, 0x57, 0x12, 0x99, 0x5b, |
3159 | 0x77, 0xcd, 0x2c, 0x55, 0xd1, 0xd7, 0xb3, 0x29, 0x84, 0x4f, 0xbe, 0x7d, | 3179 | 0x97, 0x5a, 0x1d, 0x6a, 0xdc, 0x1f, 0x9c, 0xe6, 0xda, 0x8e, 0x6b, 0xb3, |
3160 | 0x90, 0x16, 0x8d, 0x1a, 0xe3, 0x17, 0xef, 0x09, 0x35, 0xc3, 0x83, 0xa8, | 3180 | 0xf9, 0x95, 0x0a, 0xe6, 0xfa, 0x26, 0x45, 0xd0, 0xcf, 0x37, 0x0f, 0xd3, |
3161 | 0xa5, 0x92, 0xb1, 0x45, 0xbd, 0x36, 0x06, 0x1c, 0x35, 0x29, 0x80, 0x9d, | 3181 | 0xb2, 0x16, 0xb0, 0x4f, 0xe3, 0x3d, 0xa1, 0x46, 0x74, 0x18, 0xf5, 0x56, |
3162 | 0x01, 0x74, 0xcf, 0xb5, 0x6d, 0x7b, 0xb9, 0xcd, 0x67, 0xa4, 0x26, 0xf1, | 3182 | 0x32, 0xbe, 0x8c, 0x7e, 0x1c, 0xbe, 0xd5, 0xa0, 0x10, 0x72, 0x86, 0xe0, |
3163 | 0x19, 0xbc, 0xdb, 0xbb, 0x0e, 0x7d, 0x03, 0xcf, 0xe0, 0xcc, 0xea, 0xc4, | 3183 | 0xbd, 0xd0, 0x31, 0xcd, 0xd5, 0x0e, 0xf7, 0x51, 0x0d, 0xe2, 0x5e, 0xbd, |
3164 | 0xc0, 0xd5, 0xcb, 0x89, 0x45, 0xad, 0x12, 0xdf, 0x51, 0x30, 0x57, 0x96, | 3184 | 0xd7, 0xbf, 0x09, 0x7e, 0x23, 0xdf, 0x40, 0x7f, 0xeb, 0x34, 0x81, 0xd3, |
3165 | 0xa1, 0xe3, 0x99, 0x42, 0x8a, 0xcb, 0x32, 0xf4, 0x70, 0xcc, 0x10, 0xe6, | 3185 | 0xcf, 0xc2, 0x6d, 0x5b, 0x36, 0x7f, 0xcb, 0x60, 0x1c, 0x1d, 0x07, 0x8f, |
3166 | 0x63, 0xff, 0xe5, 0x58, 0x2b, 0xf7, 0xd5, 0xee, 0x85, 0xec, 0xbc, 0x4a, | 3186 | 0xa7, 0x0b, 0xa9, 0xaf, 0x8e, 0x83, 0x0f, 0xc7, 0x11, 0xe1, 0x3c, 0xd6, |
3167 | 0xca, 0x07, 0xec, 0xdf, 0xd0, 0x7b, 0xbe, 0x90, 0xdf, 0xc7, 0xb4, 0x10, | 3187 | 0x65, 0xee, 0x7f, 0xe5, 0x81, 0xfa, 0xbe, 0x40, 0x39, 0x86, 0x35, 0xa1, |
3168 | 0xf3, 0x8d, 0x7d, 0x8c, 0x43, 0x0d, 0x78, 0xc3, 0x98, 0x84, 0xfb, 0x90, | 3188 | 0x37, 0xd6, 0x75, 0xe4, 0x9d, 0x2c, 0xe4, 0xdf, 0x6d, 0x5a, 0xc0, 0x81, |
3169 | 0x57, 0xf6, 0x21, 0x37, 0x97, 0x8a, 0xaa, 0x6d, 0x26, 0xc7, 0xb2, 0xf1, | 3189 | 0xfa, 0x1c, 0x63, 0x96, 0x02, 0xdf, 0xa3, 0xb4, 0xaf, 0x44, 0x1f, 0x52, |
3170 | 0xba, 0x1a, 0xc7, 0x39, 0x21, 0x4e, 0xd4, 0x59, 0x41, 0x8b, 0x3a, 0xe4, | 3190 | 0x9f, 0x43, 0xde, 0xb6, 0x8b, 0x72, 0x6c, 0x24, 0xa7, 0xb3, 0xfd, 0xaa, |
3171 | 0x34, 0x7c, 0x9c, 0x81, 0x50, 0x5b, 0xac, 0x24, 0x9c, 0xcf, 0xf7, 0xd9, | 3191 | 0xdc, 0xc7, 0xf9, 0xa2, 0x99, 0xc8, 0x7e, 0x42, 0xa9, 0x76, 0xc9, 0xa9, |
3172 | 0xba, 0xe2, 0xb9, 0x4d, 0xc8, 0xe0, 0x79, 0x83, 0xf4, 0x86, 0xcf, 0xf7, | 3192 | 0xfb, 0xe8, 0x93, 0x50, 0x7b, 0xb4, 0x13, 0xce, 0xf5, 0x73, 0xa6, 0x2a, |
3173 | 0x07, 0xd9, 0xdd, 0x46, 0x89, 0x86, 0x21, 0x0f, 0xbb, 0xc6, 0xd8, 0xae, | 3193 | 0xb1, 0xef, 0x06, 0x68, 0xf0, 0xbc, 0x49, 0x6a, 0xdd, 0xe7, 0xef, 0x0c, |
3174 | 0xa0, 0xa1, 0x6a, 0x11, 0xd6, 0xbd, 0x5f, 0x4f, 0xef, 0x5c, 0x7e, 0x93, | 3194 | 0xfc, 0x0d, 0x04, 0xf1, 0x63, 0xd3, 0x6e, 0xd0, 0x43, 0xae, 0x71, 0x96, |
3175 | 0xcd, 0x65, 0x83, 0x5f, 0x08, 0xe7, 0x1d, 0x9f, 0xf3, 0xda, 0xd7, 0x0c, | 3195 | 0x2b, 0xac, 0xcb, 0x3a, 0x85, 0x79, 0x1f, 0x52, 0xd3, 0x6f, 0x33, 0xef, |
3176 | 0xba, 0x4e, 0x8a, 0x23, 0xc5, 0x37, 0x90, 0xef, 0x0e, 0x42, 0x26, 0x50, | 3196 | 0x66, 0x67, 0x99, 0x88, 0x1f, 0xc6, 0x5d, 0x9f, 0x73, 0xde, 0x97, 0x34, |
3177 | 0xfc, 0x92, 0x9e, 0x19, 0x72, 0x99, 0x8a, 0xb1, 0x5d, 0xc7, 0x77, 0xcc, | 3197 | 0xba, 0x49, 0x12, 0x37, 0xad, 0x87, 0x91, 0x0b, 0x0f, 0x83, 0x26, 0x94, |
3178 | 0xed, 0xef, 0x01, 0x62, 0xab, 0x9a, 0xcd, 0xd7, 0x8f, 0xd3, 0x4d, 0xe0, | 3198 | 0x98, 0x93, 0xf6, 0x15, 0x39, 0x8d, 0xa7, 0x0d, 0xf3, 0x58, 0xd6, 0x87, |
3179 | 0x74, 0xb3, 0xb0, 0x75, 0xee, 0x28, 0x15, 0x30, 0x8e, 0x6d, 0x64, 0x2e, | 3199 | 0xdf, 0x43, 0xc4, 0x59, 0x25, 0x3b, 0x6f, 0xd0, 0x67, 0xdf, 0x87, 0xcf, |
3180 | 0x61, 0x99, 0x4f, 0xac, 0xed, 0x7a, 0x2a, 0x3b, 0xe8, 0xf8, 0x53, 0x9f, | 3200 | 0xde, 0xc8, 0xf6, 0x00, 0x87, 0xed, 0x02, 0xf6, 0xb1, 0x8c, 0x8c, 0x2f, |
3181 | 0x8e, 0x12, 0xaf, 0x4d, 0x34, 0xd2, 0xf3, 0xb3, 0xfa, 0x6b, 0xc0, 0xcf, | 3201 | 0x4c, 0xb3, 0x65, 0x0c, 0xf3, 0x99, 0xdc, 0x81, 0xc7, 0x47, 0x03, 0x3c, |
3182 | 0x38, 0x6f, 0x3c, 0xa0, 0x63, 0x1d, 0x5c, 0x7f, 0xd5, 0x55, 0x3f, 0x0e, | 3202 | 0x6c, 0xbe, 0x9b, 0x55, 0x4f, 0x7b, 0x6c, 0xf9, 0x57, 0x87, 0x9e, 0xd1, |
3183 | 0x56, 0xdb, 0xf4, 0xfe, 0x30, 0x9b, 0x67, 0x5f, 0x1a, 0x0f, 0x1e, 0xda, | 3203 | 0x93, 0xdc, 0xa7, 0xe2, 0x1e, 0x5c, 0x9b, 0xc5, 0x72, 0xfe, 0x97, 0xc5, |
3184 | 0x64, 0xb3, 0xcf, 0x76, 0x6b, 0x87, 0x79, 0x91, 0xd8, 0xbd, 0x19, 0x8d, | 3204 | 0x61, 0xbe, 0xa7, 0xb2, 0x73, 0xfc, 0x34, 0x36, 0x3c, 0x8c, 0xc9, 0x8d, |
3185 | 0xf1, 0x66, 0xd4, 0x38, 0x07, 0xe3, 0x79, 0x0b, 0x1f, 0x8c, 0xd5, 0xcf, | 3205 | 0x01, 0xd9, 0x8d, 0x1d, 0xce, 0xdd, 0xa5, 0xa3, 0x35, 0x50, 0xd8, 0xdf, |
3186 | 0xc7, 0xa8, 0xf5, 0x05, 0x31, 0xfa, 0x46, 0x9b, 0xb9, 0x22, 0xc5, 0x68, | 3206 | 0xb4, 0x80, 0xf3, 0x33, 0x9e, 0xb7, 0xfd, 0x83, 0x7d, 0xf5, 0xb3, 0x7d, |
3187 | 0xe3, 0x0e, 0x8c, 0xa2, 0x06, 0x2a, 0xe5, 0xf8, 0xe4, 0x78, 0xc9, 0xf1, | 3207 | 0xd4, 0xf8, 0x9c, 0x3e, 0xfa, 0x72, 0x87, 0x71, 0x23, 0xf5, 0xd1, 0xfa, |
3188 | 0x99, 0x3f, 0xf3, 0xfd, 0x08, 0x38, 0x38, 0xe3, 0xb6, 0x18, 0xdc, 0x16, | 3208 | 0x1d, 0x3e, 0x8a, 0xfa, 0xc8, 0xce, 0xfd, 0x93, 0xe3, 0x25, 0xf7, 0xcf, |
3189 | 0xa9, 0x1c, 0xe7, 0x96, 0x23, 0x4a, 0xe3, 0x78, 0x19, 0x71, 0x1c, 0x19, | 3209 | 0xfc, 0x99, 0x63, 0x1c, 0xb8, 0x9c, 0xe1, 0x5c, 0x13, 0x38, 0x57, 0x95, |
3190 | 0x9c, 0xf3, 0x38, 0x86, 0x59, 0x8e, 0xe3, 0x98, 0xe5, 0x46, 0x32, 0x39, | 3210 | 0x79, 0xcf, 0x2d, 0x57, 0x29, 0x8d, 0xe5, 0x55, 0xc4, 0x72, 0x55, 0xe3, |
3191 | 0xb4, 0x88, 0xe7, 0x28, 0x8b, 0xe7, 0x16, 0x78, 0x37, 0xca, 0xe2, 0xb9, | 3211 | 0x3c, 0xc8, 0x31, 0xcc, 0x74, 0x1c, 0xc7, 0x4c, 0x37, 0x96, 0xd1, 0x61, |
3192 | 0x85, 0x18, 0x5e, 0xc9, 0xe2, 0xb9, 0x95, 0xc5, 0x33, 0xdf, 0xdb, 0x19, | 3212 | 0x44, 0x3c, 0x57, 0xb3, 0x78, 0x6e, 0x75, 0x5d, 0xa7, 0x9a, 0xc5, 0x73, |
3193 | 0x55, 0x95, 0x8b, 0x9d, 0x3a, 0x78, 0x6d, 0x45, 0xe9, 0x6c, 0x62, 0x9d, | 3213 | 0x0b, 0x31, 0xdc, 0xce, 0xe2, 0xb9, 0x95, 0xc5, 0x33, 0x7f, 0xdf, 0xd3, |
3194 | 0xb0, 0xb1, 0x93, 0xc7, 0xc5, 0x1d, 0xf7, 0x5b, 0x58, 0xcf, 0xad, 0xbc, | 3214 | 0x2a, 0x9c, 0x1b, 0x5d, 0x27, 0x06, 0xc6, 0xb5, 0x25, 0xcf, 0x06, 0xee, |
3195 | 0x32, 0x8b, 0xbc, 0x72, 0x0e, 0x79, 0xa5, 0xdb, 0x77, 0xbf, 0x75, 0x56, | 3215 | 0x09, 0x19, 0xbb, 0x79, 0x5c, 0xdc, 0xf1, 0x1d, 0x0c, 0xf7, 0xf9, 0x34, |
3196 | 0xe5, 0x95, 0x27, 0x8b, 0x79, 0x5e, 0xe9, 0x66, 0x79, 0xa5, 0xab, 0xf2, | 3216 | 0xd7, 0xd4, 0x90, 0x6b, 0x2e, 0x20, 0xd7, 0xf4, 0x06, 0xbe, 0x83, 0x9d, |
3197 | 0xca, 0x13, 0x45, 0xce, 0x2b, 0x31, 0x05, 0xc5, 0xfe, 0xbc, 0x12, 0x6f, | 3217 | 0x97, 0xb9, 0xe6, 0xeb, 0xc5, 0x3c, 0xd7, 0xf4, 0xb2, 0x5c, 0xd3, 0x93, |
3198 | 0xcb, 0x2b, 0xb9, 0x2c, 0xf7, 0xef, 0x94, 0x57, 0x72, 0x9f, 0x71, 0x6e, | 3218 | 0xb9, 0xe6, 0xab, 0x45, 0xce, 0x35, 0x4d, 0x3a, 0x5a, 0x1c, 0xcc, 0x35, |
3199 | 0xb1, 0x72, 0x5e, 0xbd, 0x2d, 0x9f, 0xe4, 0x63, 0xd8, 0x56, 0xe6, 0x25, | 3219 | 0xcd, 0xa1, 0x5c, 0x93, 0xd3, 0xf2, 0xfc, 0x4e, 0xb9, 0x26, 0xd7, 0xd9, |
3200 | 0xe6, 0xe0, 0xb4, 0xae, 0xbf, 0x92, 0xe4, 0xb1, 0x74, 0x0c, 0xf3, 0xe0, | 3220 | 0xbd, 0x6a, 0x92, 0x7c, 0x0f, 0xcb, 0xca, 0xb8, 0xc4, 0x78, 0x9c, 0xd6, |
3201 | 0xbd, 0xb3, 0x53, 0x2c, 0xd9, 0x59, 0x2c, 0x0d, 0xa7, 0x32, 0x9d, 0xfe, | 3221 | 0xfc, 0x57, 0x92, 0x3c, 0x96, 0x4e, 0xe3, 0x1c, 0xbc, 0x77, 0x77, 0x8a, |
3202 | 0x78, 0x3a, 0x56, 0xdc, 0x1e, 0x4f, 0xb9, 0x9e, 0x3c, 0x9e, 0x52, 0x9d, | 3222 | 0x25, 0x33, 0x8b, 0xa5, 0xdd, 0x29, 0x4d, 0x77, 0x30, 0x9e, 0x4e, 0x17, |
3203 | 0x1f, 0x1a, 0x65, 0xae, 0x07, 0x70, 0x96, 0x76, 0xfd, 0x39, 0xf4, 0x5e, | 3223 | 0x87, 0xe3, 0x29, 0xe7, 0x93, 0xc7, 0x53, 0xca, 0xf3, 0x3d, 0xad, 0xcc, |
3204 | 0xe8, 0x4d, 0xa3, 0xae, 0x36, 0xe9, 0x6a, 0xce, 0x37, 0xea, 0xbe, 0x07, | 3224 | 0x35, 0x02, 0xfa, 0x6d, 0xd7, 0x5f, 0xc0, 0xec, 0xa5, 0xfe, 0x2c, 0x6a, |
3205 | 0x6d, 0x2f, 0xb7, 0xb5, 0xb8, 0xf5, 0xad, 0x8b, 0xda, 0xfa, 0x7d, 0xf0, | 3225 | 0x6e, 0x9d, 0xae, 0xe6, 0x78, 0x23, 0xbf, 0x09, 0x61, 0xec, 0xe7, 0xb2, |
3206 | 0xc8, 0x79, 0xf5, 0xfd, 0x33, 0x79, 0xb5, 0x84, 0x33, 0xb0, 0x97, 0x8f, | 3226 | 0x16, 0xb7, 0xd7, 0x7a, 0xa8, 0xbb, 0xdf, 0x01, 0x8e, 0x5c, 0x94, 0xeb, |
3207 | 0x7b, 0x1d, 0xf3, 0xb9, 0xe2, 0x2c, 0x9e, 0x5e, 0xee, 0xdd, 0x82, 0xf9, | 3227 | 0x9f, 0x88, 0xab, 0x68, 0x09, 0xdb, 0x5e, 0xbe, 0xef, 0x17, 0x38, 0xcf, |
3208 | 0x8a, 0xc7, 0x7d, 0xff, 0x44, 0x0e, 0x41, 0x5d, 0xbe, 0x35, 0x96, 0xcf, | 3228 | 0xb5, 0xce, 0xe3, 0xe9, 0xd9, 0x7e, 0xae, 0x13, 0x5e, 0xe7, 0xb9, 0xbf, |
3209 | 0x38, 0x1e, 0xd6, 0xec, 0xd0, 0xa5, 0x6d, 0xe7, 0x9c, 0xf4, 0x7c, 0x83, | 3229 | 0x23, 0x9f, 0xa0, 0x66, 0xdf, 0xde, 0xcb, 0xfd, 0x8f, 0x87, 0x3b, 0x3b, |
3210 | 0x75, 0xa3, 0x3e, 0xe1, 0x3a, 0x25, 0xfc, 0x8a, 0x4e, 0x2f, 0xd1, 0xb7, | 3230 | 0xf4, 0xfa, 0x50, 0x0f, 0x94, 0xf6, 0x3e, 0x75, 0xf9, 0x8d, 0x97, 0x6b, |
3211 | 0x7c, 0xee, 0xd3, 0x69, 0xf6, 0x31, 0x29, 0x5f, 0x40, 0xcd, 0xf2, 0xf4, | 3231 | 0x97, 0xe8, 0x0b, 0x2a, 0x9d, 0xa2, 0xaf, 0xf9, 0x3c, 0xa7, 0x52, 0xed, |
3212 | 0xb6, 0x9a, 0xa5, 0x48, 0xe3, 0x07, 0xfa, 0xcf, 0x87, 0x37, 0xe5, 0xf8, | 3232 | 0x31, 0x21, 0x9e, 0x41, 0x1d, 0xf3, 0xd4, 0x50, 0x1d, 0x53, 0xa4, 0x89, |
3213 | 0xa4, 0x7b, 0x36, 0xa0, 0x40, 0x9b, 0x5d, 0xe7, 0x5a, 0x76, 0xab, 0x76, | 3233 | 0x47, 0x06, 0x7b, 0xc8, 0x2d, 0x31, 0x31, 0xed, 0x9e, 0x0f, 0x29, 0x54, |
3214 | 0x25, 0x1a, 0xbd, 0x21, 0xf5, 0x49, 0xce, 0x85, 0x57, 0x33, 0x5f, 0xe1, | 3234 | 0x6a, 0x1b, 0x5c, 0xe7, 0x6e, 0xd7, 0xb5, 0x44, 0xfb, 0x6e, 0x09, 0x75, |
3215 | 0xdb, 0x99, 0x1b, 0xe0, 0xd6, 0x48, 0xdd, 0xf1, 0x06, 0xeb, 0x3c, 0x0f, | 3235 | 0x9a, 0xf3, 0xe2, 0x6f, 0x33, 0x5d, 0x61, 0xed, 0xdc, 0x2d, 0x60, 0x6b, |
3216 | 0xbf, 0xa3, 0x4d, 0xb8, 0xbe, 0xb9, 0xdb, 0xbd, 0xab, 0x89, 0x7d, 0x71, | 3236 | 0x55, 0x7e, 0x0b, 0x0e, 0x37, 0xf8, 0x1c, 0x7e, 0xc7, 0x98, 0x70, 0xcd, |
3217 | 0x9d, 0xa3, 0x06, 0xa9, 0xbb, 0x8b, 0x25, 0xdf, 0xfd, 0x59, 0x8b, 0x52, | 3237 | 0x73, 0xb7, 0xef, 0xb3, 0x3a, 0xec, 0xe2, 0x3a, 0xc7, 0x35, 0x92, 0xdf, |
3218 | 0x9e, 0x88, 0xfc, 0x05, 0xd8, 0x02, 0x9c, 0x8b, 0x45, 0xec, 0xcd, 0x24, | 3238 | 0x37, 0x56, 0x7c, 0xf7, 0xa7, 0x2d, 0x4a, 0x71, 0xa2, 0xea, 0x2f, 0x41, |
3219 | 0x78, 0xc9, 0x75, 0x0e, 0xe8, 0x42, 0x61, 0x7f, 0x19, 0xba, 0x8d, 0x03, | 3239 | 0x16, 0xd4, 0x9d, 0xd6, 0x32, 0x6c, 0x33, 0x0d, 0x5c, 0x72, 0x9d, 0x47, |
3220 | 0x5c, 0x3f, 0x7e, 0x2a, 0x97, 0x7b, 0x2a, 0x07, 0xfb, 0x8c, 0x91, 0x7a, | 3240 | 0x54, 0x5b, 0xe2, 0xf8, 0x2a, 0x78, 0x6b, 0x8f, 0x70, 0x4d, 0xf9, 0xb1, |
3221 | 0xb2, 0x5b, 0xe7, 0x36, 0x48, 0xf8, 0xb9, 0x80, 0x79, 0x9c, 0xbb, 0xe0, | 3241 | 0x58, 0xed, 0xcb, 0x7c, 0xec, 0xb3, 0x8f, 0xc4, 0xc9, 0x5e, 0x95, 0xc7, |
3222 | 0xa7, 0x24, 0xa2, 0x33, 0x8e, 0x98, 0xed, 0x38, 0x62, 0xae, 0xa3, 0x03, | 3242 | 0x30, 0xe1, 0xe7, 0x02, 0x71, 0x2d, 0xb9, 0xb3, 0xff, 0xd8, 0x56, 0xf5, |
3223 | 0xdd, 0xb6, 0x4d, 0xbb, 0xb0, 0x27, 0xc8, 0xc1, 0xf4, 0x00, 0x6c, 0xb9, | 3243 | 0x9c, 0x63, 0xd5, 0xba, 0x8e, 0xb5, 0xd0, 0x55, 0xe1, 0xdd, 0xfb, 0x4c, |
3224 | 0xe0, 0x88, 0x3a, 0x6a, 0xc1, 0x1f, 0x18, 0xae, 0x78, 0x9a, 0x3e, 0xc1, | 3244 | 0xda, 0x03, 0x9b, 0x20, 0x1f, 0xd3, 0x7d, 0x90, 0xe5, 0x92, 0x63, 0xc5, |
3225 | 0x1a, 0x6f, 0xc8, 0xf4, 0xde, 0xc5, 0x11, 0xd1, 0xd6, 0xdc, 0x37, 0x30, | 3245 | 0xa8, 0x0f, 0xbf, 0xa7, 0xb9, 0xd6, 0x53, 0xa4, 0x98, 0x54, 0xba, 0x25, |
3226 | 0x37, 0xdb, 0xc4, 0x31, 0xca, 0xf9, 0x72, 0x5e, 0x5b, 0x80, 0x8f, 0x8e, | 3246 | 0xd2, 0x6f, 0x33, 0x8e, 0x55, 0xdd, 0x3e, 0xfb, 0x16, 0xce, 0x66, 0x99, |
3227 | 0xac, 0x6b, 0xe0, 0x35, 0xce, 0x97, 0x23, 0xd9, 0xfd, 0x12, 0xf6, 0x07, | 3247 | 0x38, 0x46, 0x39, 0x5f, 0x2e, 0x2a, 0x4b, 0xd0, 0xd1, 0xb1, 0x8d, 0x5d, |
3228 | 0xeb, 0xbf, 0x74, 0x47, 0xad, 0x99, 0xd7, 0x94, 0xe9, 0xdd, 0x69, 0x3c, | 3248 | 0xc0, 0x35, 0xce, 0x97, 0x07, 0xb2, 0x6f, 0x50, 0xb0, 0x0f, 0xee, 0xff, |
3229 | 0xc3, 0xf3, 0x13, 0x6c, 0x99, 0x98, 0xba, 0xa0, 0xce, 0x3d, 0xd3, 0xa8, | 3249 | 0xfa, 0x1d, 0xf5, 0x67, 0x5e, 0x67, 0x32, 0xbd, 0x10, 0xcd, 0x79, 0x3e, |
3230 | 0xf1, 0xb8, 0x95, 0xa8, 0x83, 0xf8, 0xae, 0x8b, 0x6b, 0x27, 0x89, 0xf8, | 3250 | 0x9f, 0x20, 0xcb, 0xd4, 0xcc, 0x25, 0xd9, 0x13, 0xcd, 0xa2, 0xee, 0xe3, |
3231 | 0x4f, 0x9f, 0x63, 0x3e, 0x13, 0xcd, 0xb0, 0x0e, 0x3e, 0x1b, 0x71, 0xfc, | 3251 | 0x51, 0xa0, 0x26, 0xe2, 0xef, 0x61, 0xae, 0x55, 0xc7, 0x73, 0x35, 0x7b, |
3232 | 0xfc, 0x1b, 0x2f, 0xf3, 0x0a, 0xbd, 0x68, 0x18, 0x00, 0x00, 0x00 }; | 3252 | 0x6e, 0x72, 0xbf, 0x34, 0xcf, 0x3c, 0xb8, 0x6f, 0xe2, 0xf8, 0xf9, 0x27, |
3253 | 0x6e, 0xb7, 0x92, 0x82, 0x90, 0x18, 0x00, 0x00, 0x00 }; | ||
3233 | 3254 | ||
3234 | static const u32 bnx2_TPAT_b09FwData[(0x0/4) + 1] = { 0x0 }; | 3255 | static const u32 bnx2_TPAT_b09FwData[(0x0/4) + 1] = { 0x0 }; |
3235 | static const u32 bnx2_TPAT_b09FwRodata[(0x0/4) + 1] = { 0x0 }; | 3256 | static const u32 bnx2_TPAT_b09FwRodata[(0x0/4) + 1] = { 0x0 }; |
3236 | 3257 | ||
3237 | static struct fw_info bnx2_tpat_fw_09 = { | 3258 | static struct fw_info bnx2_tpat_fw_09 = { |
3259 | /* Firmware version: 3.7.1 */ | ||
3238 | .ver_major = 0x3, | 3260 | .ver_major = 0x3, |
3239 | .ver_minor = 0x4, | 3261 | .ver_minor = 0x7, |
3240 | .ver_fix = 0x3, | 3262 | .ver_fix = 0x1, |
3241 | 3263 | ||
3242 | .start_addr = 0x08000860, | 3264 | .start_addr = 0x08000860, |
3243 | 3265 | ||
3244 | .text_addr = 0x08000800, | 3266 | .text_addr = 0x08000800, |
3245 | .text_len = 0x1864, | 3267 | .text_len = 0x188c, |
3246 | .text_index = 0x0, | 3268 | .text_index = 0x0, |
3247 | .gz_text = bnx2_TPAT_b09FwText, | 3269 | .gz_text = bnx2_TPAT_b09FwText, |
3248 | .gz_text_len = sizeof(bnx2_TPAT_b09FwText), | 3270 | .gz_text_len = sizeof(bnx2_TPAT_b09FwText), |
3249 | 3271 | ||
3250 | .data_addr = 0x08002080, | 3272 | .data_addr = 0x080020c0, |
3251 | .data_len = 0x0, | 3273 | .data_len = 0x0, |
3252 | .data_index = 0x0, | 3274 | .data_index = 0x0, |
3253 | .data = bnx2_TPAT_b09FwData, | 3275 | .data = bnx2_TPAT_b09FwData, |
3254 | 3276 | ||
3255 | .sbss_addr = 0x08002088, | 3277 | .sbss_addr = 0x080020c8, |
3256 | .sbss_len = 0x2c, | 3278 | .sbss_len = 0x30, |
3257 | .sbss_index = 0x0, | 3279 | .sbss_index = 0x0, |
3258 | 3280 | ||
3259 | .bss_addr = 0x080020c0, | 3281 | .bss_addr = 0x08002100, |
3260 | .bss_len = 0x850, | 3282 | .bss_len = 0x850, |
3261 | .bss_index = 0x0, | 3283 | .bss_index = 0x0, |
3262 | 3284 | ||
@@ -3267,768 +3289,770 @@ static struct fw_info bnx2_tpat_fw_09 = { | |||
3267 | }; | 3289 | }; |
3268 | 3290 | ||
3269 | static u8 bnx2_TXP_b09FwText[] = { | 3291 | static u8 bnx2_TXP_b09FwText[] = { |
3270 | /* 0x1f, 0x8b, 0x08, 0x00, 0x0e, 0x34, 0xe7, 0x45, 0x00, 0x03, */ | 3292 | 0xbd, 0x7c, 0x7d, 0x70, 0x1c, 0xe7, 0x79, 0xdf, 0xb3, 0xbb, 0x07, 0xe0, |
3271 | 0xcd, 0x7c, | 3293 | 0x00, 0x82, 0xe0, 0x12, 0x39, 0x52, 0x27, 0x0a, 0xa6, 0x6e, 0x89, 0x3d, |
3272 | 0x6f, 0x70, 0x5b, 0xd7, 0x95, 0xdf, 0x79, 0xef, 0x81, 0x24, 0x48, 0xd1, | 3294 | 0x08, 0x32, 0x20, 0x71, 0xc5, 0x20, 0x36, 0x26, 0xb9, 0xca, 0xab, 0xbb, |
3273 | 0xd4, 0x13, 0x17, 0x56, 0x60, 0x87, 0x71, 0x00, 0xf1, 0x81, 0x66, 0x42, | 3295 | 0x03, 0x78, 0x94, 0x31, 0x31, 0xc4, 0xc2, 0x16, 0xed, 0x70, 0xd4, 0xeb, |
3274 | 0xae, 0x04, 0x2b, 0x4c, 0xc2, 0x6d, 0xd1, 0xf8, 0x05, 0x00, 0x29, 0x48, | 3296 | 0x01, 0xa4, 0x95, 0x54, 0x9e, 0xb2, 0xb6, 0xda, 0x72, 0x5a, 0x35, 0x3a, |
3275 | 0xd1, 0x6c, 0x68, 0x95, 0x49, 0x94, 0x54, 0xe3, 0x62, 0x41, 0x52, 0xf1, | 3297 | 0x1f, 0xc0, 0x0f, 0x29, 0x47, 0x1c, 0x24, 0xc0, 0x84, 0xfe, 0x70, 0x93, |
3276 | 0xb6, 0xce, 0x54, 0x9b, 0x78, 0x5a, 0x4d, 0xeb, 0xad, 0x11, 0x90, 0xfa, | 3298 | 0x13, 0x0e, 0x24, 0x64, 0xf7, 0x88, 0x93, 0xfc, 0xd9, 0x3f, 0x62, 0x0b, |
3277 | 0xe7, 0x85, 0x04, 0xda, 0x62, 0x44, 0x7f, 0xc8, 0x07, 0x18, 0x80, 0x24, | 3299 | 0x03, 0xd2, 0xb4, 0x5a, 0xbb, 0xb5, 0xda, 0x28, 0x13, 0xcf, 0xf4, 0x63, |
3278 | 0x6f, 0xf2, 0x44, 0x28, 0x9b, 0x7f, 0xfd, 0xd0, 0xac, 0x50, 0x4a, 0xd6, | 3300 | 0x30, 0x14, 0xa5, 0x28, 0x71, 0xa7, 0x56, 0x9b, 0x4c, 0xa2, 0x36, 0x94, |
3279 | 0xba, 0x9b, 0xb4, 0xa3, 0xed, 0x66, 0x67, 0x3b, 0xd3, 0x2f, 0x1c, 0x49, | 3301 | 0xaf, 0xbf, 0xdf, 0xbb, 0xbb, 0xe0, 0x01, 0x22, 0x65, 0x51, 0x93, 0x14, |
3280 | 0xf6, 0x7a, 0x77, 0x67, 0x36, 0xda, 0x6e, 0xb6, 0xab, 0xb6, 0xb2, 0xd1, | 3302 | 0x33, 0x37, 0x77, 0xfb, 0xee, 0xbb, 0xef, 0xfb, 0x7c, 0xbd, 0xcf, 0xf3, |
3281 | 0xdf, 0xef, 0xbe, 0xf7, 0x28, 0x90, 0xa6, 0x6c, 0xcb, 0xb3, 0xed, 0x94, | 3303 | 0xfc, 0x9e, 0xf7, 0x5d, 0x44, 0x45, 0xda, 0xc4, 0xff, 0xdb, 0x8a, 0x4f, |
3282 | 0x33, 0x18, 0xe0, 0xdd, 0x77, 0xdf, 0xb9, 0xe7, 0x9e, 0x73, 0xee, 0x39, | 3304 | 0xec, 0xd8, 0xf1, 0xc7, 0xef, 0xfd, 0xf8, 0xbd, 0xbf, 0x8a, 0x9f, 0xf7, |
3283 | 0xe7, 0x77, 0xee, 0x7d, 0x0c, 0x8b, 0x74, 0x89, 0xf7, 0xf7, 0x00, 0x3e, | 3305 | 0x89, 0xd6, 0x62, 0xf0, 0xe6, 0x5b, 0x86, 0x48, 0xf6, 0xcf, 0xe5, 0x43, |
3284 | 0x91, 0x43, 0x87, 0x9f, 0xd9, 0x3e, 0xb2, 0xfd, 0x13, 0xf8, 0xf9, 0x09, | 3306 | 0xff, 0xe1, 0x71, 0x33, 0x18, 0x9f, 0x1f, 0x09, 0xeb, 0x89, 0x57, 0x87, |
3285 | 0x31, 0x02, 0x06, 0x6f, 0xbe, 0x69, 0x88, 0x64, 0xff, 0x42, 0x3e, 0xf0, | 3307 | 0x93, 0xb6, 0x84, 0x8d, 0x44, 0xfe, 0xa1, 0x71, 0x5b, 0xc4, 0xad, 0xf6, |
3286 | 0x1f, 0x1e, 0x37, 0x7d, 0xfa, 0xfc, 0x48, 0x50, 0x4f, 0x4c, 0xec, 0x4a, | 3308 | 0xc5, 0x52, 0xf2, 0x6e, 0x3d, 0x1f, 0x09, 0x09, 0xdb, 0x3f, 0x92, 0xb8, |
3287 | 0x5a, 0x12, 0x34, 0x12, 0xb2, 0x6f, 0xca, 0x12, 0xb1, 0x9d, 0xa1, 0x48, | 3309 | 0xf6, 0xe4, 0xf7, 0x3e, 0x6e, 0xbd, 0x5d, 0x36, 0x24, 0x6c, 0x26, 0xb2, |
3288 | 0x4a, 0xde, 0x6a, 0xe6, 0x43, 0x01, 0x61, 0xfb, 0x47, 0x12, 0x77, 0x9e, | 3310 | 0x62, 0xf6, 0x48, 0xb8, 0x0b, 0xcf, 0x7c, 0xf5, 0xae, 0x47, 0x0d, 0xe9, |
3289 | 0xfb, 0xc9, 0xa7, 0xa3, 0xb7, 0xca, 0x86, 0x04, 0xcd, 0x44, 0x56, 0xcc, | 3311 | 0x08, 0xc6, 0x7a, 0xab, 0xfe, 0xbd, 0xbb, 0x24, 0xbf, 0x2b, 0x51, 0x8f, |
3290 | 0x01, 0x09, 0xf6, 0xe1, 0x99, 0x6f, 0x3f, 0x6a, 0x18, 0xd2, 0xb3, 0xca, | 3312 | 0x85, 0x12, 0xef, 0xd6, 0xa7, 0x06, 0xc2, 0xa2, 0x27, 0xac, 0x68, 0xd2, |
3291 | 0xab, 0xcc, 0x95, 0x56, 0x9a, 0x3f, 0x79, 0x34, 0x2c, 0xbf, 0x57, 0x0f, | 3313 | 0x88, 0xc8, 0xcb, 0x35, 0x53, 0x5e, 0xac, 0xc5, 0x64, 0xb2, 0x26, 0x1d, |
3292 | 0xc9, 0xf7, 0xea, 0xa6, 0x5c, 0xac, 0x07, 0xb4, 0xf1, 0x92, 0x29, 0xb3, | 3314 | 0xe9, 0xda, 0x8d, 0x68, 0xaa, 0xa3, 0xef, 0xbb, 0xf5, 0xe4, 0x40, 0x28, |
3293 | 0xa5, 0x69, 0xfd, 0x48, 0x31, 0x2f, 0xa9, 0x7a, 0x56, 0x2f, 0x2c, 0x98, | 3315 | 0x6b, 0x24, 0xa4, 0x23, 0x59, 0x93, 0xd1, 0x63, 0xc5, 0xd6, 0x87, 0x9b, |
3294 | 0x3d, 0xc9, 0xf3, 0x39, 0x7d, 0x76, 0xa1, 0xb7, 0x27, 0x75, 0x7e, 0x5a, | 3316 | 0x12, 0x4f, 0xd6, 0x75, 0x5b, 0xb2, 0xa1, 0x84, 0x9d, 0xd7, 0xf5, 0xf6, |
3295 | 0x2f, 0x14, 0xc3, 0x3d, 0xc9, 0xba, 0xd9, 0x93, 0x5a, 0x0c, 0xe1, 0xba, | 3317 | 0x41, 0xf3, 0x63, 0x68, 0xaf, 0x0e, 0x86, 0x26, 0x8b, 0xa6, 0x9c, 0x1b, |
3296 | 0xb7, 0x27, 0xb9, 0x18, 0x9d, 0x17, 0xd9, 0x8a, 0x3e, 0xe1, 0x9e, 0x54, | 3318 | 0x68, 0x15, 0xdd, 0x0e, 0x4b, 0xb2, 0xd6, 0xfa, 0xb0, 0x9e, 0x88, 0x88, |
3297 | 0x29, 0x9a, 0x15, 0xe9, 0x8f, 0xbf, 0x2a, 0x7d, 0x3d, 0xa9, 0xfa, 0x3f, | 3319 | 0x5b, 0xab, 0xd7, 0x8f, 0x39, 0xff, 0x64, 0xaf, 0xf9, 0xeb, 0xe1, 0xf0, |
3298 | 0xd1, 0x1b, 0xa6, 0x26, 0x85, 0x5f, 0x15, 0x33, 0x9c, 0xb8, 0xd5, 0x7c, | 3320 | 0x64, 0x51, 0xde, 0x0e, 0xd9, 0x76, 0x74, 0x42, 0x7a, 0xcc, 0x9c, 0x68, |
3299 | 0xc8, 0xd2, 0xc4, 0xb4, 0x6e, 0x37, 0xb7, 0x58, 0x41, 0xc9, 0x9d, 0xee, | 3321 | 0x92, 0xec, 0xef, 0x89, 0x1e, 0xc1, 0xf7, 0x78, 0x7f, 0xdc, 0x4c, 0xc9, |
3300 | 0x14, 0x5b, 0xcd, 0xc9, 0x94, 0xdc, 0xe2, 0x90, 0xb9, 0x2c, 0x6d, 0x62, | 3322 | 0x16, 0x71, 0xcd, 0x6f, 0xae, 0x98, 0x3d, 0x5d, 0x59, 0x3d, 0x11, 0x96, |
3301 | 0x87, 0xfc, 0xeb, 0x66, 0x33, 0x19, 0xff, 0x32, 0xe5, 0x8a, 0x71, 0xa4, | 3323 | 0x74, 0x51, 0x13, 0xc3, 0x8e, 0xc8, 0x64, 0xc5, 0x96, 0xfc, 0x52, 0x87, |
3302 | 0x67, 0xbc, 0x2e, 0x92, 0x2c, 0x05, 0x25, 0x19, 0x7f, 0xab, 0xe9, 0x3e, | 3324 | 0xe4, 0x2b, 0xf2, 0xc4, 0x94, 0xd3, 0x2e, 0x53, 0x4b, 0x47, 0x7d, 0x5d, |
3303 | 0x13, 0xc4, 0x98, 0x81, 0x9e, 0xb1, 0x52, 0xb3, 0x99, 0x8e, 0x83, 0x7e, | 3325 | 0x44, 0xd0, 0xd6, 0x2b, 0xf9, 0x5a, 0x14, 0x9f, 0x9f, 0xf8, 0xfc, 0xea, |
3304 | 0xdc, 0x7f, 0xb6, 0x4d, 0xca, 0x21, 0xbb, 0x3c, 0x1b, 0xff, 0x6f, 0xba, | 3326 | 0x22, 0x3b, 0x05, 0xcf, 0xf7, 0xa7, 0xdd, 0xea, 0xd7, 0xc2, 0x5e, 0xdb, |
3305 | 0xab, 0x13, 0xce, 0x91, 0xd7, 0xb6, 0xe8, 0x56, 0x5e, 0x72, 0x21, 0x29, | 3327 | 0x7f, 0xd9, 0xe2, 0x7d, 0x83, 0xdf, 0x12, 0xf8, 0x2d, 0x85, 0x65, 0xcd, |
3306 | 0x17, 0xe2, 0x9f, 0x92, 0x13, 0xf1, 0x30, 0xe6, 0x17, 0x94, 0x63, 0x71, | 3328 | 0x88, 0xca, 0xf7, 0xee, 0x8a, 0xc9, 0x54, 0x69, 0x0d, 0xb2, 0x89, 0xca, |
3307 | 0xc8, 0xd1, 0x3a, 0xac, 0x25, 0xeb, 0xd1, 0x48, 0x56, 0x9e, 0x97, 0xe4, | 3329 | 0x37, 0x6a, 0x11, 0x79, 0x49, 0xc9, 0x22, 0xa4, 0x0d, 0xa3, 0xcf, 0x64, |
3308 | 0x62, 0xbf, 0x99, 0x16, 0x8c, 0x6d, 0x35, 0x3f, 0x9a, 0x8c, 0x63, 0xbc, | 3330 | 0x69, 0x42, 0x3f, 0x51, 0xcc, 0x4b, 0xaa, 0x96, 0xd5, 0x0b, 0x73, 0x66, |
3309 | 0xe1, 0xff, 0xd5, 0xb4, 0x43, 0xd1, 0x6c, 0x59, 0x06, 0xa5, 0x50, 0xea, | 3331 | 0x47, 0x72, 0x29, 0xa7, 0x4f, 0xce, 0x75, 0x76, 0xa4, 0x96, 0x26, 0xf4, |
3310 | 0x8f, 0xff, 0x4c, 0x34, 0x09, 0x5a, 0x62, 0x4f, 0x59, 0x26, 0xe4, 0x16, | 3332 | 0x42, 0x31, 0x0a, 0x39, 0x98, 0x1d, 0xa9, 0xf9, 0x08, 0xae, 0x3b, 0x3b, |
3311 | 0x1d, 0x4c, 0x19, 0x4d, 0xd9, 0x83, 0xf1, 0x93, 0x16, 0xee, 0xd7, 0x65, | 3333 | 0x92, 0xf3, 0xd6, 0x0c, 0x26, 0x45, 0x9f, 0x68, 0x47, 0xaa, 0x64, 0x65, |
3312 | 0xb3, 0x6e, 0xb5, 0x4b, 0xc1, 0x94, 0x50, 0x97, 0x3c, 0x22, 0x85, 0xd3, | 3334 | 0x45, 0xba, 0x9d, 0x1f, 0x48, 0x57, 0x47, 0xaa, 0xf6, 0x5b, 0xfa, 0x8a, |
3313 | 0x68, 0x8f, 0xdb, 0xbd, 0x3a, 0x9e, 0xc9, 0x8c, 0xb0, 0x4d, 0x34, 0x23, | 3335 | 0xa9, 0x49, 0xe1, 0x1e, 0x31, 0xa3, 0x89, 0xb7, 0xeb, 0xb7, 0xdb, 0x9a, |
3314 | 0x11, 0x33, 0x53, 0xe0, 0xa8, 0xe2, 0x0c, 0x62, 0xfc, 0x98, 0xdd, 0xa9, | 3336 | 0x98, 0xf6, 0x3b, 0xf5, 0xed, 0x90, 0x4d, 0x6e, 0xb6, 0x15, 0xbc, 0x92, |
3315 | 0x99, 0xb2, 0x62, 0x06, 0xa4, 0xea, 0xc4, 0xec, 0xb0, 0xd6, 0x2e, 0xc7, | 3337 | 0x26, 0x53, 0x72, 0xf3, 0x7d, 0xe6, 0xaa, 0x34, 0x89, 0x1b, 0x09, 0xae, |
3316 | 0x62, 0x5d, 0x90, 0x69, 0x18, 0xb4, 0xe5, 0x9b, 0x7a, 0x22, 0x16, 0xce, | 3338 | 0xeb, 0xf5, 0xa4, 0xf3, 0x07, 0xe4, 0x91, 0xf2, 0xee, 0x18, 0x86, 0x5e, |
3317 | 0x41, 0x51, 0x3a, 0x64, 0x35, 0x07, 0x7e, 0xe6, 0xe2, 0x59, 0x2d, 0x55, | 3339 | 0x92, 0xa0, 0x39, 0xe9, 0xbc, 0x5b, 0xf7, 0x9e, 0x09, 0x63, 0xce, 0x50, |
3318 | 0xff, 0x8a, 0x96, 0x3c, 0xbf, 0x5f, 0xdb, 0x75, 0x1e, 0x7d, 0xea, 0xe7, | 3340 | 0xc7, 0x50, 0xa9, 0x5e, 0x4f, 0x3b, 0x18, 0xdf, 0x09, 0x9e, 0x6d, 0x92, |
3319 | 0x3c, 0xbb, 0x0b, 0x83, 0x37, 0x1d, 0xcf, 0xb2, 0x1d, 0x3c, 0x2b, 0xde, | 3341 | 0x72, 0xc4, 0x2d, 0x4f, 0x3a, 0x96, 0xe1, 0xc9, 0x87, 0xba, 0xe7, 0xb5, |
3320 | 0xd1, 0x06, 0x5d, 0x36, 0x26, 0x43, 0x3d, 0x49, 0xa5, 0x4b, 0xf2, 0xa6, | 3342 | 0x0b, 0x7d, 0xe4, 0x25, 0x17, 0x91, 0x72, 0xc1, 0xf9, 0x98, 0x3c, 0xe5, |
3321 | 0x4b, 0x6e, 0x42, 0x93, 0x5e, 0xcb, 0x96, 0xe0, 0x27, 0xa1, 0xcf, 0x45, | 3343 | 0x44, 0xc1, 0x5f, 0x58, 0x4e, 0x39, 0xb0, 0x2f, 0xfb, 0xb8, 0x96, 0xac, |
3322 | 0xe8, 0x72, 0x31, 0x22, 0x47, 0x4a, 0x12, 0xd2, 0x85, 0x63, 0x65, 0xf5, | 3344 | 0x59, 0xb1, 0xac, 0x3c, 0x2d, 0xc9, 0xf9, 0x6e, 0x33, 0x2d, 0x98, 0xdb, |
3323 | 0xaa, 0x43, 0x7b, 0x80, 0x6e, 0xa1, 0xfb, 0x82, 0xc3, 0x67, 0xa1, 0xc3, | 3345 | 0xae, 0xdf, 0x99, 0x74, 0x30, 0x5f, 0xff, 0xff, 0xad, 0xbb, 0x11, 0x2b, |
3324 | 0x52, 0x1a, 0xf2, 0xc9, 0x60, 0xec, 0x7d, 0xda, 0x9e, 0xea, 0xa4, 0x96, | 3346 | 0x5b, 0x96, 0x5e, 0x29, 0x94, 0xba, 0x9d, 0x1f, 0x43, 0x4f, 0x61, 0x5b, |
3325 | 0x81, 0x9d, 0x14, 0x4e, 0x0f, 0x41, 0x77, 0xd1, 0xc8, 0x8a, 0x6c, 0x96, | 3347 | 0xdc, 0x71, 0xdb, 0x84, 0xdc, 0xac, 0xde, 0x94, 0x51, 0x97, 0x07, 0x31, |
3326 | 0x82, 0x65, 0x45, 0xbe, 0x2c, 0xdd, 0x72, 0x6c, 0xd1, 0x92, 0x23, 0x8b, | 3348 | 0x7f, 0xd2, 0xc6, 0xfd, 0x9a, 0x6c, 0xd3, 0xed, 0x66, 0x29, 0x98, 0x12, |
3327 | 0x21, 0xc9, 0x9b, 0x51, 0xb3, 0x26, 0x7d, 0xd9, 0x4d, 0x89, 0x1e, 0x79, | 3349 | 0x69, 0x93, 0xdd, 0x52, 0x98, 0x45, 0xbb, 0xe3, 0x76, 0xea, 0x78, 0x26, |
3328 | 0xfe, 0x74, 0x34, 0x53, 0x96, 0x7e, 0xfb, 0x75, 0xdc, 0xcf, 0x9d, 0xa4, | 3350 | 0x33, 0xc0, 0x36, 0xd1, 0x8c, 0x04, 0x75, 0x2c, 0xb2, 0x50, 0xed, 0xc5, |
3329 | 0x4e, 0x25, 0x9f, 0x8a, 0x1b, 0x92, 0x85, 0x4d, 0x18, 0xd6, 0x1f, 0x81, | 3351 | 0xfc, 0x71, 0xb7, 0x55, 0x33, 0x65, 0xcd, 0x0c, 0x49, 0xa5, 0x1a, 0x77, |
3330 | 0xff, 0xe6, 0x73, 0xc9, 0x78, 0x34, 0x2c, 0xa2, 0x4b, 0xea, 0x0b, 0xfd, | 3352 | 0xa3, 0x5a, 0xb3, 0x9c, 0x8a, 0xb7, 0x41, 0xa6, 0x51, 0x8c, 0x2d, 0x5f, |
3331 | 0xe6, 0x6e, 0x89, 0x9a, 0x19, 0xca, 0x3f, 0x3e, 0x04, 0x3d, 0xfc, 0x77, | 3353 | 0xd6, 0x13, 0xf1, 0x68, 0x0e, 0x4a, 0xa3, 0x1d, 0x4d, 0x81, 0x9e, 0x29, |
3332 | 0xca, 0x1e, 0xb4, 0xa8, 0xe3, 0xa1, 0xf0, 0x31, 0xe8, 0x32, 0xab, 0x74, | 3354 | 0x27, 0xab, 0xa5, 0x6a, 0x9f, 0xd3, 0x92, 0x4b, 0x87, 0xb4, 0xfd, 0x4b, |
3333 | 0xdc, 0x83, 0xf1, 0x03, 0x9e, 0xed, 0xf4, 0x48, 0xbe, 0x7a, 0xc3, 0x93, | 3355 | 0xe8, 0x53, 0xfb, 0x1f, 0xbe, 0x0d, 0x44, 0x41, 0x9b, 0x8e, 0x67, 0xd9, |
3334 | 0x43, 0x8f, 0xcc, 0x57, 0xbb, 0xa5, 0x00, 0x1d, 0x16, 0xc4, 0x92, 0xc2, | 3356 | 0x0e, 0x9a, 0x15, 0xed, 0x68, 0x83, 0x2e, 0x57, 0xc6, 0x22, 0x1d, 0x49, |
3335 | 0xf9, 0x3f, 0xf7, 0xda, 0x2d, 0x99, 0x3b, 0xff, 0x32, 0xec, 0xe1, 0xb0, | 3357 | 0xa5, 0x4b, 0xd2, 0xa6, 0x4b, 0x6e, 0x54, 0x93, 0x4e, 0xdb, 0x95, 0xf0, |
3336 | 0xb6, 0xbf, 0xfe, 0x0b, 0xcd, 0xb3, 0x1f, 0xd8, 0x5f, 0x50, 0xec, 0x89, | 3358 | 0xaf, 0x41, 0x9f, 0xf3, 0xd0, 0xe5, 0x7c, 0x4c, 0x4e, 0x94, 0x24, 0xa2, |
3337 | 0xa0, 0x9c, 0xab, 0xbb, 0xf6, 0x57, 0xc1, 0x1a, 0xb3, 0x4d, 0x1b, 0xb6, | 3359 | 0x0b, 0xe7, 0xca, 0xea, 0x95, 0x2a, 0xed, 0x01, 0xba, 0x85, 0xee, 0x0b, |
3338 | 0xf4, 0xc6, 0x6a, 0x9f, 0x73, 0xf5, 0x3e, 0x3c, 0x1b, 0x94, 0x23, 0x75, | 3360 | 0x55, 0x3e, 0x0b, 0x1d, 0x96, 0xd2, 0x90, 0x4f, 0x06, 0x73, 0x1f, 0xd4, |
3339 | 0xf6, 0xcf, 0xc3, 0xc6, 0x82, 0xb2, 0xf4, 0x68, 0xb7, 0x64, 0xd1, 0x5e, | 3361 | 0x1e, 0xac, 0x8c, 0x69, 0x19, 0xd8, 0x49, 0x61, 0xb6, 0x0f, 0xba, 0xb3, |
3340 | 0x58, 0x14, 0x3b, 0x19, 0xd7, 0xf1, 0x4c, 0x0f, 0xe6, 0xb2, 0x15, 0x9f, | 3362 | 0x62, 0x6b, 0xb2, 0x4d, 0x0a, 0xb6, 0x1d, 0xfb, 0xac, 0xb4, 0xcb, 0xa9, |
3341 | 0x2e, 0x99, 0xaa, 0x76, 0xd8, 0x86, 0x15, 0x92, 0xa9, 0x3a, 0xf5, 0x8f, | 3363 | 0x79, 0x5b, 0x4e, 0xcc, 0xc3, 0x1e, 0x4d, 0xcb, 0x5c, 0x94, 0xae, 0xec, |
3342 | 0xef, 0x92, 0x6f, 0x03, 0x94, 0x2f, 0xdb, 0xf9, 0x1c, 0xdb, 0x4d, 0xb4, | 3364 | 0x96, 0x44, 0x87, 0x3c, 0x3d, 0x6b, 0x65, 0xca, 0xd2, 0xed, 0xbe, 0x81, |
3343 | 0xb7, 0xb6, 0xd1, 0xb6, 0x37, 0x53, 0xa6, 0x83, 0x82, 0xb6, 0x5c, 0x29, | 3365 | 0xfb, 0xb9, 0x33, 0xd4, 0xa9, 0xe4, 0x53, 0x8e, 0x21, 0x59, 0x93, 0x76, |
3344 | 0x66, 0xee, 0xe7, 0x77, 0x9d, 0xf6, 0xd0, 0x6a, 0x0b, 0x01, 0xf4, 0x87, | 3366 | 0x7d, 0x9b, 0x26, 0x6d, 0xf5, 0x27, 0x93, 0x8e, 0x15, 0xa5, 0xcd, 0xa6, |
3345 | 0x1e, 0xab, 0x18, 0xeb, 0xf4, 0x9d, 0x66, 0xdb, 0x08, 0xae, 0x2d, 0x2c, | 3367 | 0x3e, 0xdd, 0x6d, 0x1e, 0x10, 0xcb, 0xcc, 0x50, 0xfe, 0x4e, 0x1f, 0xf4, |
3346 | 0xaa, 0x2e, 0x8e, 0x1d, 0x00, 0x5f, 0xba, 0x64, 0xab, 0x8a, 0xb7, 0x08, | 3368 | 0xf0, 0xbf, 0x29, 0x7b, 0x8c, 0x45, 0x1d, 0xf7, 0x45, 0x4f, 0x41, 0x97, |
3347 | 0x6d, 0xc0, 0x9d, 0x47, 0x9f, 0xcc, 0x2e, 0x76, 0xf7, 0xa4, 0x17, 0xd9, | 3369 | 0x59, 0xa5, 0xe3, 0x0e, 0xcc, 0x1f, 0xf2, 0x6d, 0x87, 0x6b, 0xe2, 0x6e, |
3348 | 0x9e, 0x0c, 0x1b, 0x98, 0xe7, 0x54, 0x5c, 0x1a, 0x73, 0x71, 0xbd, 0x3f, | 3370 | 0xcd, 0x93, 0x43, 0x87, 0xcc, 0x54, 0xda, 0xa5, 0x00, 0x1d, 0x16, 0xc4, |
3349 | 0x00, 0xbe, 0xa6, 0xb1, 0xe0, 0x30, 0x0f, 0x8f, 0xc7, 0x06, 0xee, 0xf7, | 3371 | 0x96, 0xc2, 0xd2, 0x5e, 0xbf, 0xdd, 0xc6, 0x7a, 0xf9, 0x53, 0x5d, 0xda, |
3350 | 0xca, 0xd4, 0x79, 0xf6, 0xe5, 0x18, 0x85, 0x2d, 0xba, 0x24, 0xc0, 0x1b, | 3372 | 0x8e, 0x6b, 0x87, 0x6a, 0x3f, 0xd7, 0x7c, 0xfb, 0x81, 0xfd, 0x85, 0xc5, |
3351 | 0x3e, 0x56, 0x14, 0xf7, 0x3b, 0x31, 0x4e, 0x37, 0x6c, 0x27, 0x83, 0x31, | 3373 | 0x1d, 0x0d, 0xcb, 0xf9, 0x9a, 0x67, 0x7f, 0x0b, 0xf0, 0x3d, 0xae, 0xe9, |
3352 | 0x9b, 0x8f, 0x27, 0xe3, 0xbd, 0x92, 0x5d, 0xed, 0x2b, 0xb0, 0x3b, 0xf6, | 3374 | 0xc2, 0x96, 0xde, 0x5c, 0xef, 0x73, 0xbe, 0xd6, 0x85, 0x67, 0xc3, 0x72, |
3353 | 0x1f, 0x5c, 0xd7, 0x17, 0xf2, 0x3d, 0x0f, 0x9a, 0x8b, 0x9d, 0x90, 0x21, | 3375 | 0xa2, 0xc6, 0xfe, 0x79, 0xd8, 0x58, 0x58, 0x96, 0xef, 0x6a, 0x97, 0x2c, |
3354 | 0xdb, 0x75, 0xf0, 0xdc, 0x01, 0x1e, 0x82, 0x98, 0x4f, 0x3f, 0xd6, 0x43, | 3376 | 0xda, 0x0b, 0xf3, 0xe2, 0x26, 0x1d, 0x1d, 0xcf, 0x74, 0x80, 0x97, 0x9d, |
3355 | 0x07, 0xe8, 0x6f, 0xc2, 0x9c, 0x3a, 0x65, 0xfa, 0x74, 0x2f, 0x74, 0x61, | 3377 | 0xf8, 0xb4, 0xc9, 0x78, 0xa5, 0xc5, 0xe5, 0x7a, 0x1d, 0xaf, 0x51, 0xff, |
3356 | 0xa2, 0x6f, 0x50, 0x9e, 0x2f, 0x45, 0x61, 0x03, 0xec, 0x0f, 0x1d, 0x2c, | 3378 | 0xf8, 0x2e, 0x05, 0x36, 0x40, 0xf9, 0xb2, 0x9d, 0xcf, 0xb1, 0xdd, 0x44, |
3357 | 0x46, 0xc3, 0x55, 0xb1, 0x65, 0x2e, 0xde, 0x01, 0xfb, 0x6a, 0x36, 0x67, | 3379 | 0x7b, 0x63, 0x1b, 0x6d, 0x7b, 0x1b, 0x65, 0xda, 0xcb, 0x35, 0x9a, 0x2b, |
3358 | 0x60, 0x1f, 0xdf, 0x51, 0xfe, 0x62, 0xc8, 0x1c, 0xd3, 0x24, 0xdf, 0x91, | 3380 | 0xc5, 0xcd, 0x43, 0xfc, 0xae, 0xd1, 0x1e, 0x1a, 0x6d, 0x21, 0x84, 0xfe, |
3359 | 0x38, 0x0c, 0x7e, 0xa2, 0x4f, 0x89, 0xf0, 0x7a, 0x87, 0xc6, 0x35, 0x0b, | 3381 | 0xd0, 0x63, 0x05, 0x73, 0xcd, 0x5e, 0xab, 0x37, 0x0d, 0xe0, 0xda, 0xfe, |
3360 | 0x39, 0x72, 0x6c, 0xf8, 0xa4, 0xad, 0x90, 0x21, 0xfd, 0x56, 0x1f, 0xec, | 3382 | 0x1d, 0xf0, 0xc9, 0xb9, 0x43, 0xa0, 0x4b, 0x97, 0x6c, 0x45, 0xd1, 0x16, |
3361 | 0x39, 0xac, 0xfc, 0xc9, 0xd8, 0x86, 0xfe, 0x24, 0x3a, 0x51, 0xc6, 0x58, | 3383 | 0xa3, 0x0d, 0x78, 0x7c, 0x74, 0xc9, 0xe4, 0x7c, 0x7b, 0x47, 0x7a, 0x9e, |
3362 | 0x85, 0xf3, 0x01, 0xfa, 0xb0, 0x51, 0x2c, 0x57, 0x79, 0x00, 0x6b, 0x6f, | 3384 | 0xed, 0xc9, 0xa8, 0x01, 0x3e, 0xc7, 0x1d, 0x59, 0x99, 0x72, 0xf4, 0xee, |
3363 | 0x56, 0xd9, 0xc7, 0x09, 0xce, 0xb7, 0xf9, 0xf9, 0x38, 0xf9, 0xe2, 0x7c, | 3385 | 0x10, 0xe8, 0x9a, 0xc0, 0x82, 0x03, 0x1f, 0x3e, 0x8d, 0x2b, 0xb8, 0xdf, |
3364 | 0x6d, 0x3c, 0x4b, 0x1b, 0x8c, 0x1e, 0xb6, 0xd5, 0xf8, 0x27, 0xbc, 0xf1, | 3386 | 0x29, 0xe3, 0x4b, 0xec, 0xcb, 0x39, 0x0a, 0xdb, 0x75, 0x49, 0x80, 0x36, |
3365 | 0x5d, 0xde, 0x0b, 0xa5, 0x1e, 0x2d, 0xa5, 0x78, 0xf0, 0xe9, 0x88, 0x2c, | 3387 | 0x7c, 0x6c, 0x0b, 0xf7, 0x5b, 0x31, 0x4f, 0x3b, 0x6c, 0x67, 0x9a, 0xba, |
3366 | 0x9f, 0xec, 0x37, 0xf7, 0xc0, 0x86, 0xe9, 0xa7, 0x96, 0x2f, 0x50, 0xc7, | 3388 | 0xfb, 0x44, 0xd2, 0xe9, 0x94, 0xec, 0x7a, 0x5f, 0x81, 0xdd, 0xb1, 0x7f, |
3367 | 0xa0, 0x31, 0x42, 0x1d, 0x9b, 0x8a, 0xbf, 0xe4, 0x22, 0xd7, 0x9e, 0xf4, | 3389 | 0xef, 0xa6, 0xbe, 0x90, 0xef, 0x12, 0xc6, 0x9c, 0x6f, 0x85, 0x0c, 0xd9, |
3368 | 0x19, 0x42, 0x1f, 0x01, 0x9f, 0x8b, 0xb5, 0x38, 0xeb, 0xad, 0xc5, 0x9c, | 3390 | 0xae, 0x83, 0xe6, 0x16, 0xd0, 0x00, 0x1f, 0x6c, 0x77, 0x63, 0x3d, 0xb4, |
3369 | 0x43, 0xfb, 0x7b, 0x06, 0xcf, 0xea, 0x32, 0x16, 0xa3, 0x7f, 0x78, 0x5e, | 3391 | 0x60, 0xfc, 0x2d, 0xe0, 0xa9, 0x55, 0x26, 0x66, 0x3b, 0xa1, 0x0b, 0x13, |
3370 | 0x52, 0xf0, 0x91, 0xd0, 0xa3, 0x54, 0x31, 0x97, 0x4a, 0xa9, 0xd5, 0x6f, | 3392 | 0x7d, 0xc3, 0xf2, 0x74, 0xc9, 0x82, 0x0d, 0xb0, 0x3f, 0x74, 0x30, 0x6f, |
3371 | 0xc1, 0xb6, 0x86, 0xff, 0xae, 0xe9, 0xfa, 0x43, 0xfa, 0x06, 0xfa, 0x9a, | 3393 | 0x45, 0x2b, 0xe2, 0xca, 0x94, 0xd3, 0x02, 0xfb, 0xaa, 0xd7, 0x8f, 0xc0, |
3372 | 0x82, 0xa9, 0x43, 0x72, 0x3a, 0x9c, 0x21, 0x74, 0x13, 0x4f, 0x1a, 0xd1, | 3394 | 0x3e, 0xbe, 0xae, 0xfc, 0x45, 0x9f, 0x39, 0xa4, 0x49, 0xbe, 0x25, 0xf1, |
3373 | 0x4c, 0x16, 0x7c, 0x4d, 0x59, 0x4d, 0xb1, 0x1e, 0x13, 0x44, 0x0c, 0xf4, | 3395 | 0x7d, 0xd0, 0x63, 0x3d, 0x2a, 0xc2, 0xeb, 0xbd, 0x1a, 0xd7, 0x2c, 0xe4, |
3374 | 0xa9, 0xcb, 0x4e, 0xdf, 0x3f, 0x2d, 0x3b, 0xbe, 0x2e, 0xa8, 0x57, 0xea, | 3396 | 0xc8, 0xb9, 0xe1, 0x93, 0x76, 0x42, 0x86, 0xf4, 0x5b, 0x5d, 0xb0, 0xe7, |
3375 | 0xc1, 0xf7, 0x11, 0x01, 0xb9, 0x0c, 0xdf, 0x35, 0x57, 0xea, 0x96, 0x06, | 3397 | 0xa8, 0xf2, 0x27, 0x43, 0x37, 0xf4, 0x27, 0xd6, 0x68, 0x19, 0x73, 0x15, |
3376 | 0x78, 0xba, 0xe2, 0xf8, 0xb6, 0x66, 0x78, 0xb6, 0xc6, 0x67, 0xba, 0xf1, | 3398 | 0x96, 0x42, 0xf4, 0x61, 0x83, 0x58, 0xae, 0xb2, 0x15, 0x6b, 0x6f, 0x52, |
3377 | 0x7c, 0x00, 0x7e, 0x4d, 0xf2, 0x46, 0x02, 0xbf, 0x8b, 0xa4, 0xc9, 0x36, | 3399 | 0xd9, 0xc7, 0x4f, 0xc8, 0x6f, 0xfd, 0x53, 0x0e, 0xe9, 0x22, 0xbf, 0x2e, |
3378 | 0xdf, 0xce, 0xb9, 0x66, 0xa2, 0x76, 0x59, 0xda, 0x25, 0x13, 0x43, 0xfc, | 3400 | 0x9e, 0xa5, 0x0d, 0x5a, 0xc7, 0x5d, 0x35, 0xff, 0x4f, 0xfc, 0xf9, 0x3d, |
3379 | 0x58, 0xd4, 0x31, 0x56, 0x1f, 0x7c, 0x79, 0x40, 0x0e, 0x96, 0x42, 0xf2, | 3401 | 0xda, 0x0b, 0xa5, 0x0e, 0x2d, 0xa5, 0x68, 0x08, 0xc6, 0x11, 0x59, 0x3d, |
3380 | 0xd5, 0x12, 0xe7, 0x95, 0xd6, 0x52, 0xd0, 0x5b, 0x72, 0xb1, 0x09, 0x9d, | 3402 | 0xd3, 0x6d, 0x3e, 0x08, 0x1b, 0xa6, 0x9f, 0x5a, 0xbd, 0x40, 0x1d, 0x63, |
3381 | 0x8f, 0xc3, 0xe7, 0x65, 0xb4, 0x31, 0xf8, 0x9f, 0xdd, 0xd5, 0xaf, 0x68, | 3403 | 0x8c, 0x01, 0xea, 0xd8, 0x54, 0xf4, 0x25, 0xe7, 0xb9, 0xf6, 0xa4, 0xcb, |
3382 | 0xe9, 0xf3, 0x59, 0x6d, 0xbc, 0xbe, 0x5f, 0xcb, 0x9c, 0x9f, 0xd4, 0x76, | 3404 | 0x10, 0xfa, 0x08, 0xf8, 0x5c, 0xac, 0xc5, 0x49, 0x7f, 0x2d, 0xe6, 0xaa, |
3383 | 0xb5, 0xf8, 0x22, 0xd1, 0xde, 0xdd, 0x17, 0x9d, 0x38, 0xcd, 0x31, 0xfb, | 3405 | 0xb4, 0xbf, 0xc7, 0xf1, 0xac, 0x2e, 0x43, 0x71, 0xfa, 0x87, 0xa7, 0x25, |
3384 | 0xe3, 0x1b, 0xfb, 0xa2, 0x5f, 0x6a, 0xad, 0xbe, 0xa8, 0x1f, 0xbe, 0x28, | 3406 | 0x05, 0x1f, 0x09, 0x3d, 0x4a, 0x05, 0xbc, 0x2c, 0x94, 0x1a, 0xfd, 0x16, |
3385 | 0x03, 0x5f, 0x34, 0x7e, 0xdf, 0xbe, 0xa8, 0x5d, 0xdf, 0xd8, 0x17, 0x75, | 3407 | 0x6c, 0xab, 0xff, 0xaf, 0xeb, 0x9e, 0x3f, 0xa4, 0x6f, 0xa0, 0xaf, 0x29, |
3386 | 0xeb, 0x77, 0x7d, 0x11, 0x63, 0xcf, 0xbf, 0xc6, 0xb5, 0x29, 0xdb, 0x76, | 3408 | 0x98, 0x3a, 0x24, 0x87, 0xc8, 0xe0, 0x42, 0x37, 0x4e, 0xd2, 0xb0, 0x32, |
3387 | 0xfa, 0x72, 0x0e, 0xc3, 0x0f, 0x6f, 0x82, 0xac, 0xbb, 0xb8, 0x76, 0x22, | 3409 | 0x59, 0xc6, 0x1c, 0xbb, 0x2e, 0xf6, 0x7d, 0x82, 0x48, 0xda, 0xcb, 0xf8, |
3388 | 0x05, 0xd8, 0xfd, 0x34, 0xc6, 0xfa, 0x4d, 0xd8, 0xfb, 0xb6, 0x98, 0x65, | 3410 | 0xb7, 0x2f, 0xf0, 0x4f, 0xab, 0xd5, 0x40, 0x17, 0xd4, 0x2b, 0xf5, 0x10, |
3389 | 0x3e, 0xa1, 0xc6, 0x7d, 0xa7, 0xce, 0xc7, 0x56, 0x75, 0x4e, 0x1e, 0xdf, | 3411 | 0xf8, 0x88, 0x90, 0x5c, 0x84, 0xef, 0x9a, 0x2a, 0xb5, 0xcb, 0x0a, 0x68, |
3390 | 0x53, 0xe7, 0xb6, 0xab, 0x73, 0xea, 0xba, 0x53, 0x66, 0xd4, 0xb8, 0x4d, | 3412 | 0xba, 0x54, 0x0d, 0x6c, 0xcd, 0xf0, 0x6d, 0x8d, 0xcf, 0xb4, 0xe3, 0xf9, |
3391 | 0x09, 0x3c, 0x26, 0xf0, 0x2a, 0xf2, 0x59, 0x23, 0x11, 0x05, 0x3d, 0x1d, | 3413 | 0x10, 0xfc, 0x9a, 0xe4, 0x8d, 0x04, 0x7e, 0x17, 0x39, 0x26, 0xdb, 0x02, |
3392 | 0xe3, 0x53, 0x5f, 0x31, 0xf0, 0x20, 0xd0, 0x6f, 0xb7, 0xf2, 0x45, 0xbb, | 3414 | 0x3b, 0xe7, 0x9a, 0xb1, 0xdc, 0xb2, 0x34, 0x4b, 0x26, 0x8e, 0xf8, 0x31, |
3393 | 0xa0, 0xf7, 0x65, 0xe7, 0xfe, 0x74, 0x95, 0x69, 0xd1, 0xd5, 0x9e, 0x35, | 3415 | 0xaf, 0x63, 0xae, 0x2e, 0xf8, 0xf2, 0x90, 0x1c, 0x2d, 0x45, 0xe4, 0xf3, |
3394 | 0xba, 0xea, 0x90, 0xe1, 0x98, 0xaf, 0xa3, 0xcd, 0x92, 0x8c, 0x51, 0x67, | 3416 | 0x25, 0xf2, 0x95, 0xd6, 0x52, 0xd0, 0x5b, 0x72, 0xbe, 0x0e, 0x9d, 0x0f, |
3395 | 0xf7, 0xa3, 0xab, 0x7f, 0xaa, 0xff, 0xfd, 0xe8, 0xea, 0xb7, 0xee, 0xa1, | 3417 | 0xc3, 0xe7, 0x65, 0xb4, 0x21, 0xf8, 0x9f, 0x03, 0x95, 0xcf, 0x69, 0xe9, |
3396 | 0xab, 0x7f, 0xb5, 0x4e, 0x57, 0x96, 0xf9, 0x82, 0x46, 0xda, 0x8c, 0x1f, | 3418 | 0xa5, 0xac, 0x36, 0x5c, 0x3b, 0xa4, 0x65, 0x96, 0xc6, 0xb4, 0xfd, 0x0d, |
3397 | 0xf4, 0x47, 0xcd, 0x8f, 0x4e, 0x31, 0x7f, 0xa8, 0x73, 0x4d, 0xfb, 0x79, | 3419 | 0xbe, 0x48, 0xb4, 0xf7, 0xf7, 0x45, 0x4f, 0xcd, 0x72, 0xce, 0x6e, 0xe7, |
3398 | 0x07, 0xd7, 0xf3, 0xa5, 0xa6, 0x61, 0x59, 0x90, 0x1d, 0xd7, 0x34, 0xe5, | 3420 | 0xc6, 0xbe, 0xe8, 0xd7, 0xf5, 0x46, 0x5f, 0xd4, 0x0d, 0x5f, 0x94, 0x81, |
3399 | 0x16, 0x35, 0x3f, 0x4f, 0xfe, 0x11, 0x3b, 0xa6, 0x10, 0x6b, 0x5c, 0x1e, | 3421 | 0x2f, 0x1a, 0xbe, 0x65, 0x5f, 0x34, 0xa2, 0xdf, 0xd8, 0x17, 0x1d, 0xd4, |
3400 | 0xda, 0xa5, 0xbc, 0xc5, 0xed, 0x3f, 0x55, 0x6a, 0xfe, 0x42, 0x4f, 0xbc, | 3422 | 0xaf, 0xfb, 0x22, 0xc6, 0x9e, 0x15, 0x5c, 0x9b, 0xb2, 0x67, 0x5f, 0x20, |
3401 | 0xdd, 0x4c, 0x8e, 0x58, 0x5e, 0x1c, 0x08, 0xca, 0xd7, 0xaa, 0xd1, 0xac, | 3423 | 0xe7, 0x28, 0xfc, 0xf0, 0x16, 0xc8, 0xba, 0x8d, 0x6b, 0x27, 0x56, 0x80, |
3402 | 0xad, 0x75, 0x4b, 0xfe, 0x41, 0xc4, 0x9e, 0x12, 0xfd, 0xd7, 0xd6, 0x7b, | 3424 | 0xdd, 0x4f, 0x60, 0xae, 0xdf, 0x86, 0xbd, 0xef, 0x89, 0xdb, 0xe6, 0x43, |
3403 | 0xc4, 0xe8, 0x3e, 0x2f, 0x46, 0x57, 0xc1, 0x2b, 0xf3, 0xab, 0xef, 0xbe, | 3425 | 0x6a, 0xde, 0xf7, 0xea, 0x7c, 0x68, 0x5d, 0xe7, 0xa4, 0xf1, 0x97, 0xea, |
3404 | 0xd5, 0x08, 0xf1, 0x3b, 0x66, 0xee, 0x93, 0x2f, 0x73, 0x8e, 0x88, 0xf7, | 3426 | 0xdc, 0xf5, 0x74, 0x4e, 0x5d, 0xb7, 0xca, 0x11, 0x35, 0x6f, 0x5d, 0x42, |
3405 | 0x8c, 0xfb, 0x16, 0x73, 0x9e, 0x7c, 0x20, 0xd1, 0x25, 0xf9, 0x2d, 0x5c, | 3427 | 0xf7, 0x09, 0xbc, 0x8a, 0x3c, 0x60, 0x24, 0x2c, 0x8c, 0xa7, 0x63, 0x7e, |
3406 | 0x8f, 0xf4, 0x73, 0xf4, 0x5d, 0xed, 0x1e, 0xdf, 0x7e, 0x8e, 0xa4, 0x78, | 3428 | 0xea, 0x2b, 0x0e, 0x1a, 0x04, 0xfa, 0x6d, 0x57, 0xbe, 0x68, 0x3f, 0xf4, |
3407 | 0x33, 0x30, 0x65, 0xf4, 0x41, 0x3e, 0x54, 0xe2, 0x3c, 0xde, 0xf2, 0xec, | 3429 | 0xbe, 0x5a, 0xbd, 0x35, 0x5d, 0x65, 0x1a, 0x74, 0xf5, 0xe0, 0x06, 0x5d, |
3408 | 0x89, 0xb9, 0x82, 0xb4, 0xb9, 0xbe, 0x61, 0x2f, 0x72, 0x01, 0xda, 0x81, | 3430 | 0xb5, 0x48, 0x7f, 0x3c, 0xd0, 0xd1, 0x36, 0x49, 0xc6, 0xa9, 0xb3, 0x5b, |
3409 | 0xaf, 0x73, 0xea, 0x9b, 0x39, 0x82, 0x44, 0x74, 0x8b, 0x39, 0x82, 0x98, | 3431 | 0xd1, 0xd5, 0xb9, 0xbf, 0x25, 0x5d, 0x7d, 0xf7, 0x26, 0xba, 0xfa, 0xde, |
3410 | 0x46, 0x62, 0x9f, 0x66, 0x43, 0xf7, 0x36, 0x74, 0x6f, 0x43, 0xf7, 0x36, | 3432 | 0x26, 0x5d, 0xd9, 0xe6, 0x33, 0x1a, 0xc7, 0x66, 0xfc, 0xa0, 0x3f, 0xaa, |
3411 | 0x74, 0x9f, 0xac, 0x1f, 0xc6, 0x3d, 0x95, 0x87, 0x80, 0x17, 0x97, 0x7e, | 3433 | 0xdf, 0x39, 0xce, 0xfc, 0xa1, 0xc6, 0x35, 0x1d, 0xe4, 0x1d, 0x5c, 0xcf, |
3412 | 0xda, 0xa5, 0x0f, 0x3e, 0xb7, 0x4a, 0x4e, 0xe9, 0x84, 0xf3, 0x45, 0xae, | 3434 | 0x2f, 0xd7, 0x0d, 0xdb, 0x86, 0xec, 0xb8, 0xa6, 0x29, 0x37, 0xcb, 0xfc, |
3413 | 0xa1, 0xfc, 0xf5, 0xb8, 0xe6, 0xfa, 0x6b, 0xd2, 0xcb, 0xe0, 0xf9, 0xdb, | 3435 | 0x14, 0xe9, 0x47, 0xec, 0x18, 0x47, 0xac, 0xf1, 0x68, 0x68, 0x96, 0xf2, |
3414 | 0x98, 0xa7, 0xad, 0xeb, 0xd6, 0x5d, 0x99, 0xcc, 0xb5, 0xc8, 0x64, 0xd6, | 3436 | 0x76, 0xaf, 0xff, 0x78, 0xa9, 0xfe, 0x73, 0x3d, 0xf1, 0x0b, 0xe4, 0x95, |
3415 | 0xa1, 0x8c, 0xd8, 0x9f, 0x3e, 0x77, 0x5a, 0xaf, 0xac, 0xca, 0x65, 0x2f, | 3437 | 0xb6, 0x1f, 0x07, 0xc2, 0xf2, 0x85, 0x8a, 0x95, 0x75, 0xb5, 0x76, 0xc9, |
3416 | 0x78, 0xe8, 0xe0, 0xdc, 0xbd, 0x79, 0x90, 0x7e, 0xaf, 0x47, 0xff, 0x6f, | 3438 | 0xef, 0x40, 0xec, 0x29, 0xd1, 0x7f, 0xed, 0xbc, 0x49, 0x8c, 0xee, 0xf2, |
3417 | 0xd1, 0x87, 0xfe, 0x75, 0xa3, 0x71, 0x39, 0x26, 0x73, 0xc6, 0x77, 0x9b, | 3439 | 0x63, 0xf4, 0x9f, 0x81, 0x56, 0xe6, 0x57, 0xff, 0xe6, 0xdd, 0x95, 0x08, |
3418 | 0x0f, 0x72, 0x66, 0xac, 0x81, 0xef, 0x21, 0x96, 0x5f, 0x44, 0x2c, 0x59, | 3440 | 0xbf, 0xe3, 0xe6, 0x41, 0xf9, 0x2c, 0x79, 0x44, 0xbc, 0x67, 0xdc, 0xb7, |
3419 | 0x31, 0x22, 0xf2, 0x93, 0x47, 0xaf, 0x21, 0x97, 0x96, 0xfc, 0xc3, 0x89, | 3441 | 0x99, 0xf3, 0xe4, 0x43, 0x89, 0x36, 0xc9, 0x6f, 0xe7, 0x7a, 0xa4, 0x9f, |
3420 | 0x66, 0x24, 0x90, 0x78, 0xab, 0x39, 0x37, 0x82, 0x18, 0x97, 0x88, 0x86, | 3442 | 0xa3, 0xef, 0x6a, 0xf6, 0xe9, 0x0e, 0x72, 0x24, 0xfe, 0xb5, 0x18, 0x60, |
3421 | 0x93, 0xc6, 0xb0, 0x5c, 0xaa, 0x0f, 0xca, 0x8f, 0xea, 0x96, 0xfc, 0xb0, | 3443 | 0x19, 0x7d, 0x90, 0x0f, 0x95, 0xc8, 0xc7, 0xbb, 0xbe, 0x3d, 0x31, 0x57, |
3422 | 0x1e, 0x91, 0x1f, 0x20, 0xe6, 0x7f, 0xbf, 0xde, 0x9a, 0x73, 0x47, 0x68, | 3444 | 0x90, 0x26, 0xcf, 0x37, 0x8c, 0x20, 0x17, 0xa0, 0x1d, 0x04, 0x3a, 0xa7, |
3423 | 0x4f, 0x3d, 0xe9, 0xfa, 0x46, 0xb9, 0x7f, 0x13, 0x34, 0xde, 0x82, 0x9d, | 3445 | 0xbe, 0x99, 0x23, 0x48, 0x4c, 0xb7, 0x99, 0x23, 0x88, 0x69, 0x24, 0x0e, |
3424 | 0x04, 0xb2, 0xc8, 0xf5, 0x19, 0xbf, 0x26, 0x0e, 0x15, 0x9f, 0x6b, 0x82, | 3446 | 0x6a, 0x2e, 0x74, 0xef, 0x42, 0xf7, 0x2e, 0x74, 0xef, 0x42, 0xf7, 0xc9, |
3425 | 0xb7, 0x6c, 0x5b, 0xc2, 0xca, 0xeb, 0x7a, 0xf7, 0xa8, 0xf9, 0x29, 0xb4, | 3447 | 0xda, 0x71, 0xdc, 0x53, 0x79, 0x08, 0x68, 0xf1, 0xc6, 0x4f, 0x7b, 0xe3, |
3426 | 0x39, 0xa3, 0x81, 0x6a, 0xb1, 0x53, 0xe5, 0x8b, 0xd0, 0x91, 0xd8, 0xf5, | 3448 | 0x83, 0xce, 0x9d, 0x92, 0x53, 0x3a, 0x21, 0xbf, 0xc8, 0x35, 0x94, 0xbf, |
3427 | 0x60, 0xb0, 0x56, 0xbc, 0x85, 0x7e, 0xcd, 0xe6, 0xa1, 0xf8, 0x6f, 0xed, | 3449 | 0x1e, 0xd6, 0x3c, 0x7f, 0xcd, 0xf1, 0x32, 0x78, 0xfe, 0x7e, 0xe4, 0x73, |
3428 | 0x30, 0xff, 0x81, 0x85, 0x35, 0xdd, 0xf9, 0x25, 0x23, 0xb1, 0x49, 0x66, | 3450 | 0xae, 0xae, 0xdb, 0xd7, 0x65, 0x32, 0xd5, 0x20, 0x93, 0xc9, 0x2a, 0x65, |
3429 | 0x43, 0xdf, 0x6f, 0x98, 0x03, 0x7d, 0x59, 0x3d, 0x11, 0x94, 0x74, 0x91, | 3451 | 0xc4, 0xfe, 0xf4, 0xb9, 0x13, 0xfa, 0xc2, 0xba, 0x5c, 0x46, 0x40, 0x43, |
3430 | 0x6b, 0x2a, 0x24, 0xb3, 0x55, 0x28, 0xff, 0x3c, 0xd7, 0x85, 0x3c, 0x3b, | 3452 | 0x0b, 0x79, 0xf7, 0xf9, 0xe0, 0xf8, 0x9d, 0xfe, 0xf8, 0xbf, 0x81, 0x31, |
3431 | 0x17, 0xef, 0x86, 0xed, 0xff, 0x9a, 0xe1, 0xae, 0x03, 0x18, 0x50, 0x75, | 3453 | 0xe9, 0x5f, 0x6f, 0x34, 0x2f, 0xe7, 0x64, 0xce, 0xf8, 0x7e, 0xfc, 0x20, |
3432 | 0x50, 0xf2, 0xe0, 0x37, 0x5f, 0x7f, 0xcb, 0xc3, 0x0e, 0xf0, 0x2a, 0x5b, | 3454 | 0x67, 0xc6, 0x1a, 0x78, 0x69, 0x3d, 0x9f, 0x8e, 0x21, 0x9f, 0x7e, 0x07, |
3433 | 0x21, 0xf8, 0xc4, 0x70, 0xda, 0x76, 0xfe, 0x30, 0x88, 0xb6, 0xe0, 0x56, | 3455 | 0xb9, 0x74, 0xbd, 0xce, 0x38, 0x55, 0x40, 0x9e, 0x9b, 0x76, 0xb8, 0xae, |
3434 | 0xeb, 0xce, 0x26, 0x7c, 0x3f, 0x10, 0xb2, 0x88, 0x4d, 0x24, 0xf3, 0x05, | 3456 | 0x6f, 0x65, 0xdd, 0x6e, 0x58, 0xb3, 0x66, 0xd2, 0xe0, 0xb8, 0x61, 0xf1, |
3435 | 0x7c, 0xff, 0x4a, 0x42, 0x36, 0xf7, 0xe2, 0x7b, 0x4b, 0x02, 0x26, 0x99, | 3457 | 0xc6, 0xe4, 0xfd, 0x16, 0xe4, 0x82, 0xef, 0xe0, 0x37, 0x7d, 0x72, 0x90, |
3436 | 0x60, 0xcc, 0xd5, 0x5a, 0x62, 0xae, 0x68, 0x69, 0xc8, 0x6e, 0x0e, 0x73, | 3458 | 0xe7, 0xb1, 0x0f, 0x9f, 0x7f, 0x15, 0x73, 0xf7, 0x03, 0xcf, 0xf4, 0xca, |
3437 | 0x4f, 0x43, 0x9e, 0x5f, 0xac, 0x07, 0xb5, 0xd4, 0xe9, 0x47, 0xc0, 0x87, | 3459 | 0x77, 0x6a, 0xb6, 0x7c, 0x1b, 0x98, 0xe6, 0x5b, 0xc8, 0x2d, 0xbe, 0x59, |
3438 | 0x9f, 0x3b, 0x23, 0x3f, 0x33, 0x97, 0xb7, 0x04, 0xe4, 0x16, 0x7c, 0x5c, | 3460 | 0x0b, 0x72, 0xfb, 0xbd, 0x30, 0x75, 0xe6, 0xf7, 0x12, 0xde, 0x69, 0x13, |
3439 | 0x12, 0x7e, 0xcc, 0x46, 0x6e, 0xb1, 0x03, 0xcb, 0x35, 0xfa, 0x5f, 0xbf, | 3461 | 0x57, 0xe5, 0xf7, 0x7f, 0xda, 0x96, 0xad, 0x11, 0xfc, 0xfe, 0x95, 0x84, |
3440 | 0x20, 0x5f, 0xf3, 0x78, 0x6b, 0x93, 0x05, 0x65, 0xa3, 0x6c, 0xcf, 0x67, | 3462 | 0x6c, 0xeb, 0xc4, 0xf7, 0xf6, 0x04, 0x4c, 0x27, 0xc1, 0xd8, 0xa8, 0x35, |
3441 | 0xfe, 0xcd, 0xc0, 0xdd, 0xf6, 0x17, 0x57, 0xdb, 0xcb, 0x99, 0x7f, 0xb8, | 3463 | 0xc4, 0x46, 0xd1, 0xd2, 0xe0, 0x71, 0x0a, 0xe3, 0xa5, 0xc1, 0xf7, 0x67, |
3442 | 0xda, 0xde, 0xdb, 0xe6, 0xf2, 0x3f, 0xaa, 0x4d, 0xd4, 0xf7, 0x78, 0x6d, | 3464 | 0x6a, 0x61, 0x2d, 0x35, 0xbb, 0x1b, 0x98, 0x24, 0xc8, 0x71, 0x91, 0x47, |
3443 | 0xb7, 0xa1, 0xb3, 0x66, 0x93, 0xb9, 0x45, 0x01, 0xd8, 0x24, 0x1d, 0xa7, | 3465 | 0x99, 0xab, 0xdb, 0x43, 0xf2, 0x36, 0x78, 0x4a, 0x82, 0x76, 0x17, 0x39, |
3444 | 0x2f, 0xbe, 0x1f, 0x5f, 0xbb, 0xc6, 0xcf, 0x9a, 0x49, 0x83, 0xb6, 0x10, | 3466 | 0xc0, 0x3f, 0xc5, 0x5c, 0xd6, 0x4f, 0x3f, 0x2d, 0xff, 0xda, 0xcf, 0xc3, |
3445 | 0x14, 0x97, 0x26, 0xef, 0x77, 0x20, 0x7f, 0xbf, 0x8d, 0xdf, 0x8c, 0xa3, | 3467 | 0x9b, 0x64, 0x4e, 0xf1, 0xc8, 0x76, 0xc9, 0xfc, 0xcb, 0x9e, 0xeb, 0xed, |
3446 | 0x7e, 0x6e, 0xce, 0x3e, 0x7c, 0xfe, 0xcd, 0x7b, 0xd8, 0x4b, 0x08, 0xf6, | 3468 | 0xcf, 0xae, 0xb7, 0xc7, 0x32, 0xbf, 0xb1, 0xde, 0x7e, 0x35, 0xe4, 0xe1, |
3447 | 0xf2, 0xff, 0xab, 0x5d, 0x5c, 0xba, 0x1f, 0xbb, 0xc0, 0x9f, 0xb2, 0x0b, | 3469 | 0x95, 0x41, 0x6d, 0xb4, 0xf6, 0x2f, 0x8c, 0x00, 0xeb, 0x14, 0x66, 0x7b, |
3448 | 0xd5, 0xff, 0xd2, 0xea, 0x5a, 0x09, 0x43, 0x3e, 0x8c, 0x07, 0x83, 0xd0, | 3470 | 0x31, 0xd7, 0x36, 0x99, 0xb4, 0xdf, 0x06, 0xf6, 0xb2, 0x63, 0x39, 0xac, |
3449 | 0xf1, 0x66, 0x99, 0xb5, 0xc8, 0x8f, 0x15, 0xc9, 0xc1, 0x5f, 0x9e, 0x58, | 3471 | 0xaf, 0xa7, 0x36, 0xf9, 0xfa, 0x36, 0xf8, 0x8f, 0xd3, 0xb3, 0xd6, 0x20, |
3450 | 0x17, 0xbb, 0xbb, 0x10, 0x0f, 0x8e, 0x9f, 0x8e, 0x8e, 0x32, 0x1e, 0xc4, | 3472 | 0xfd, 0x47, 0x1c, 0x6b, 0x29, 0xf9, 0x1e, 0xff, 0xf1, 0x6d, 0xa3, 0xd1, |
3451 | 0xe0, 0x1b, 0x93, 0xef, 0x88, 0x07, 0x37, 0x8c, 0xd6, 0x78, 0x60, 0x20, | 3473 | 0x7f, 0x18, 0xf0, 0x1f, 0xfb, 0xdf, 0xc7, 0x7f, 0x3c, 0xf5, 0x1e, 0xff, |
3452 | 0x1e, 0xec, 0x7a, 0x97, 0x78, 0x70, 0xe2, 0x1d, 0xf1, 0x40, 0x83, 0x6c, | 3474 | 0xa1, 0xc1, 0x2e, 0xe8, 0x3f, 0x7e, 0x68, 0x04, 0xfe, 0xa3, 0xb0, 0xc1, |
3453 | 0x38, 0xbf, 0xbf, 0x35, 0xfc, 0x78, 0x50, 0x58, 0x13, 0x0f, 0x7c, 0x5d, | 3475 | 0x7f, 0x04, 0xfa, 0xb0, 0x55, 0xee, 0xe8, 0xfd, 0x26, 0xfe, 0x6c, 0xf3, |
3454 | 0x59, 0x0a, 0x0b, 0xdc, 0xd5, 0x5b, 0x97, 0xa7, 0x2b, 0x09, 0x06, 0x12, | 3476 | 0x31, 0xa7, 0x84, 0x43, 0x09, 0x37, 0x33, 0x65, 0xef, 0x92, 0x26, 0xac, |
3455 | 0x8d, 0xcc, 0x9c, 0xf5, 0xb0, 0xb4, 0xc1, 0xe7, 0x5e, 0xaa, 0x8f, 0x40, | 3477 | 0xd1, 0x97, 0x6b, 0x03, 0xf0, 0x25, 0xbf, 0x0f, 0x9c, 0x66, 0x39, 0x4c, |
3456 | 0x67, 0x97, 0x30, 0xf7, 0x68, 0x9c, 0x89, 0x65, 0x5b, 0x82, 0xeb, 0xe1, | 3478 | 0x44, 0x9a, 0x12, 0xd4, 0xcd, 0x48, 0x2c, 0x69, 0xbf, 0x90, 0x59, 0xa8, |
3457 | 0xcd, 0x08, 0x30, 0xe2, 0x6e, 0xe0, 0xbe, 0xdd, 0x67, 0xd5, 0xfa, 0x78, | 3479 | 0xbe, 0x90, 0x39, 0xa7, 0x74, 0x35, 0x61, 0x79, 0x18, 0xf8, 0x09, 0x0b, |
3458 | 0x33, 0xea, 0x61, 0xf7, 0x6d, 0xc0, 0xee, 0x78, 0x3e, 0x00, 0x4c, 0xc8, | 3480 | 0x18, 0x18, 0xcf, 0x87, 0x80, 0x21, 0xd8, 0xde, 0x6e, 0x26, 0x91, 0xa3, |
3459 | 0xf6, 0x2b, 0x66, 0x12, 0x7a, 0xaa, 0x3a, 0xf6, 0xee, 0x02, 0x3e, 0x73, | 3481 | 0x54, 0xaa, 0x2b, 0x99, 0x02, 0x3e, 0x53, 0xaa, 0xef, 0x58, 0x8c, 0x7d, |
3460 | 0xaa, 0xef, 0xad, 0x08, 0xfb, 0x76, 0x24, 0x12, 0xd1, 0x3f, 0xc3, 0x77, | 3482 | 0x5b, 0x12, 0xe5, 0xd8, 0x9f, 0xe2, 0xbb, 0x39, 0x31, 0x67, 0x5d, 0xb6, |
3461 | 0x7b, 0x22, 0xbc, 0xed, 0xaa, 0x45, 0xba, 0x87, 0xa2, 0x67, 0x15, 0x8d, | 3483 | 0x39, 0xee, 0x6b, 0xb1, 0x73, 0x6a, 0x8c, 0x90, 0x14, 0xd4, 0xb3, 0x5f, |
3462 | 0x80, 0x14, 0xd4, 0xb3, 0x91, 0x6d, 0x7c, 0xf6, 0x18, 0x62, 0xf6, 0x51, | 3484 | 0xb5, 0xf8, 0xec, 0x29, 0xf8, 0xf8, 0x93, 0x55, 0x53, 0x4e, 0x54, 0xd7, |
3463 | 0xc7, 0x94, 0x23, 0x4e, 0x76, 0x77, 0x0e, 0x1f, 0x62, 0xd5, 0x4b, 0x25, | 3485 | 0x32, 0x39, 0x7c, 0x88, 0x6d, 0x5e, 0x2e, 0xf1, 0xfe, 0xb7, 0x70, 0x3f, |
3464 | 0xde, 0x1f, 0xc5, 0xfd, 0x80, 0x30, 0x97, 0xfc, 0x2a, 0xfa, 0x1c, 0x44, | 3486 | 0x24, 0xcc, 0x3d, 0x3e, 0x8f, 0x3e, 0x47, 0xd1, 0xe7, 0x48, 0x35, 0xc0, |
3465 | 0x9f, 0x19, 0xc7, 0xd7, 0x05, 0xef, 0x37, 0x32, 0x29, 0xdc, 0x9f, 0x29, | 3487 | 0x8d, 0xbc, 0xef, 0x66, 0x52, 0xb8, 0x7f, 0xa4, 0xe8, 0x66, 0xd2, 0x45, |
3466 | 0x36, 0x32, 0xe9, 0x22, 0xf3, 0xd6, 0xa1, 0xf0, 0x11, 0xc8, 0x33, 0x8b, | 3488 | 0xe6, 0x39, 0x7d, 0xd1, 0x13, 0x90, 0x67, 0x16, 0xb1, 0xdd, 0x15, 0xab, |
3467 | 0x5c, 0xcd, 0x96, 0xe8, 0x60, 0x5e, 0x9e, 0xee, 0x1c, 0x07, 0x4e, 0x3a, | 3489 | 0x37, 0x2f, 0x8f, 0xb5, 0x0e, 0x23, 0xaf, 0x3e, 0x8f, 0x98, 0xe3, 0x8e, |
3468 | 0x87, 0x1c, 0xc2, 0x9e, 0x8c, 0xc6, 0xcb, 0xf2, 0xe1, 0xce, 0xe4, 0x69, | 3490 | 0x59, 0x4e, 0x19, 0xcc, 0x4d, 0x95, 0xee, 0x90, 0xc2, 0x0c, 0x62, 0x8c, |
3469 | 0xe4, 0x0b, 0xf1, 0xed, 0x90, 0x61, 0x23, 0xa3, 0xc7, 0x04, 0xb6, 0x1e, | 3491 | 0x73, 0x0f, 0x73, 0xed, 0x8c, 0x1e, 0x77, 0xe0, 0x13, 0x06, 0x80, 0x27, |
3470 | 0x87, 0x5f, 0x1e, 0xd1, 0x53, 0xc5, 0x7e, 0x73, 0x56, 0x1e, 0x95, 0x86, | 3492 | 0xbb, 0x81, 0x85, 0xef, 0x92, 0x15, 0xd3, 0x8a, 0x0e, 0x03, 0x03, 0xa7, |
3471 | 0x19, 0x0d, 0x8f, 0xcb, 0x26, 0x49, 0x05, 0xd0, 0x6f, 0xf0, 0x43, 0x92, | 3493 | 0x42, 0xe8, 0xd3, 0x7b, 0x9b, 0x64, 0xa3, 0x94, 0xf5, 0x0e, 0xf8, 0x07, |
3472 | 0x0d, 0x53, 0xd6, 0x0f, 0xc2, 0xdf, 0x6b, 0xd2, 0x61, 0xb5, 0xc6, 0x9e, | 3494 | 0x4d, 0x5a, 0xec, 0x46, 0x5f, 0xf5, 0x17, 0x10, 0x2f, 0x92, 0xdf, 0x36, |
3473 | 0x5b, 0x10, 0x6f, 0x2e, 0x40, 0x9f, 0xdd, 0x61, 0x75, 0x7a, 0x3a, 0xd9, | 3495 | 0xb6, 0xb7, 0xfa, 0x3a, 0xd9, 0x22, 0xab, 0xef, 0xe9, 0xf7, 0x37, 0x0d, |
3474 | 0x24, 0xcb, 0xef, 0xe8, 0x77, 0xbb, 0xa5, 0x5f, 0x6b, 0xfb, 0xdb, 0x68, | 3496 | 0xfd, 0x1a, 0xdb, 0x35, 0x4d, 0xd0, 0x7f, 0x0d, 0x34, 0x84, 0xe2, 0x90, |
3475 | 0xdf, 0x84, 0x9c, 0xb3, 0x91, 0x09, 0xc4, 0x20, 0x7f, 0xcc, 0xa1, 0x0d, | 3497 | 0x3f, 0x78, 0x68, 0x82, 0x9d, 0x5c, 0x06, 0x3f, 0xf4, 0x9b, 0x85, 0x32, |
3476 | 0x76, 0x72, 0x15, 0xf3, 0x61, 0x1c, 0x2c, 0x94, 0x99, 0xf7, 0x18, 0x52, | 3498 | 0xe3, 0xa4, 0x21, 0x65, 0x13, 0xf7, 0xaa, 0xf5, 0xfa, 0x82, 0x0d, 0x5a, |
3477 | 0x36, 0x71, 0xcf, 0x69, 0x36, 0x2b, 0x16, 0xf8, 0xbd, 0x40, 0x9e, 0x83, | 3499 | 0x2f, 0x90, 0xde, 0xb0, 0x0c, 0x57, 0x7b, 0xc4, 0x5d, 0xa4, 0x1c, 0x2c, |
3478 | 0x32, 0xee, 0x0c, 0x88, 0x5d, 0xa3, 0x1c, 0xa2, 0xf0, 0x4a, 0x0f, 0x77, | 3500 | 0xac, 0x8e, 0x5d, 0x6d, 0xa9, 0x79, 0xcb, 0xcd, 0x63, 0x44, 0xe3, 0x42, |
3479 | 0xa5, 0x16, 0xa3, 0x76, 0x1e, 0x14, 0x8d, 0x0b, 0x7d, 0x5d, 0x49, 0xe4, | 3501 | 0x57, 0x5b, 0x12, 0x71, 0x51, 0xbf, 0x10, 0x6b, 0x4b, 0xc1, 0x1f, 0x18, |
3480 | 0x39, 0xfa, 0x85, 0x48, 0x57, 0x0a, 0x36, 0x6b, 0x5c, 0x78, 0xa8, 0x2b, | 3502 | 0x17, 0x6e, 0x6f, 0x4b, 0xcf, 0x92, 0x2e, 0x03, 0x71, 0xf1, 0x4e, 0xe0, |
3481 | 0x7d, 0x9a, 0x7c, 0x19, 0xc8, 0x73, 0x3e, 0x0a, 0x9c, 0xdf, 0x94, 0xdf, | 3503 | 0xc2, 0xba, 0x7c, 0x0d, 0xb9, 0x4f, 0xa1, 0x17, 0x31, 0x03, 0xab, 0x44, |
3482 | 0x45, 0x2e, 0x5b, 0x18, 0x44, 0x0e, 0x80, 0xd5, 0xaf, 0x83, 0xef, 0xbc, | 3504 | 0x07, 0xdd, 0x79, 0x53, 0xc2, 0x6d, 0x89, 0x79, 0xd0, 0xd7, 0xdf, 0x9a, |
3483 | 0x29, 0xc1, 0xae, 0xc4, 0xab, 0xe0, 0x6f, 0x18, 0xb2, 0xd9, 0x84, 0x3e, | 3505 | 0x9c, 0xdd, 0x82, 0x3e, 0x06, 0xda, 0x7b, 0x88, 0x21, 0x1b, 0xda, 0xed, |
3484 | 0x06, 0xda, 0x07, 0x58, 0x13, 0x68, 0x69, 0xb7, 0xba, 0x10, 0x4f, 0x11, | 3506 | 0x36, 0xf8, 0x5f, 0xf8, 0x3a, 0x09, 0x27, 0x07, 0xda, 0x31, 0xfe, 0xd9, |
3485 | 0xbb, 0x24, 0x98, 0x1c, 0xe9, 0x06, 0xfd, 0x2b, 0x01, 0xe6, 0x82, 0xc1, | 3507 | 0x10, 0x73, 0x87, 0x70, 0x7c, 0xbd, 0xfd, 0xcb, 0x5e, 0x7b, 0x2f, 0x68, |
3486 | 0xd8, 0x6a, 0xfb, 0x37, 0xdd, 0xf6, 0x41, 0xf0, 0xc2, 0xe7, 0x88, 0x09, | 3508 | 0xe1, 0x73, 0xcc, 0x21, 0x25, 0x3c, 0x3e, 0x60, 0x82, 0x06, 0xf6, 0x8d, |
3487 | 0x24, 0x38, 0x35, 0x62, 0x82, 0x07, 0xf6, 0x0d, 0xa9, 0xbe, 0xe9, 0x45, | 3509 | 0xa8, 0xbe, 0xe9, 0x79, 0xda, 0x80, 0x9b, 0x59, 0xb0, 0x77, 0x4b, 0x6a, |
3488 | 0xda, 0x40, 0x23, 0x53, 0xb1, 0x1e, 0x91, 0xd4, 0xc2, 0x56, 0x19, 0x5f, | 3510 | 0x6e, 0xa7, 0x0c, 0xcf, 0x75, 0xca, 0xfe, 0x39, 0xe6, 0xbc, 0xc4, 0xc0, |
3489 | 0xe8, 0x95, 0x5d, 0x0b, 0xc4, 0x30, 0xac, 0x69, 0x60, 0x2a, 0xc0, 0x18, | 3511 | 0x60, 0x05, 0x39, 0xa9, 0x7e, 0x81, 0xb9, 0x80, 0x15, 0x3d, 0x2a, 0xdd, |
3490 | 0xfa, 0x05, 0xe6, 0x76, 0xd1, 0xf0, 0x41, 0xe9, 0x0f, 0x7f, 0x15, 0xeb, | 3512 | 0xd1, 0xcf, 0x63, 0x1d, 0x8c, 0xdb, 0xf1, 0xd8, 0x24, 0xd6, 0x58, 0x48, |
3491 | 0x60, 0xca, 0x8a, 0x45, 0x66, 0xb1, 0xc6, 0x02, 0x8a, 0x4e, 0xd8, 0x1f, | 3513 | 0x8d, 0x13, 0x0d, 0xe6, 0xa4, 0x8d, 0x6e, 0x98, 0x37, 0x3d, 0x7f, 0xb3, |
3492 | 0x93, 0x36, 0xba, 0x66, 0xdc, 0xf4, 0xe2, 0xbd, 0xe8, 0x62, 0xe1, 0x5c, | 3514 | 0x71, 0xb1, 0x70, 0x2e, 0x44, 0x37, 0x8d, 0xfb, 0x3f, 0xfd, 0x71, 0x4d, |
3493 | 0x08, 0xaf, 0xa3, 0xfb, 0x57, 0x1e, 0x5d, 0x13, 0x74, 0xfb, 0x40, 0x93, | 3515 | 0x8c, 0xdb, 0x85, 0x31, 0xc9, 0xe3, 0xed, 0xad, 0x43, 0xb3, 0xe2, 0xb6, |
3494 | 0x73, 0x7c, 0xa8, 0x73, 0xec, 0xb4, 0xd8, 0x1d, 0xe0, 0x2f, 0x1d, 0x7b, | 3516 | 0x80, 0xbe, 0x74, 0x7c, 0x97, 0x4c, 0x62, 0x9c, 0x93, 0x73, 0xf4, 0x85, |
3495 | 0x58, 0x66, 0x41, 0xe7, 0xe8, 0x02, 0xfd, 0xa4, 0x6c, 0xc5, 0x67, 0xb8, | 3517 | 0xb2, 0x13, 0x9f, 0xfe, 0x26, 0x89, 0xf7, 0x2e, 0x21, 0x2f, 0x1e, 0x52, |
3496 | 0x4d, 0x62, 0x83, 0xe7, 0x81, 0x73, 0xc6, 0x14, 0x0d, 0x17, 0x73, 0xe8, | 3518 | 0x63, 0x78, 0x39, 0xaa, 0x7e, 0x21, 0x01, 0x5c, 0xf3, 0x51, 0xd0, 0xc3, |
3497 | 0x17, 0x12, 0xc0, 0xa9, 0x1f, 0x07, 0x3f, 0xcc, 0xb1, 0x38, 0xe7, 0x00, | 3519 | 0x98, 0x4c, 0x9e, 0x43, 0xe0, 0x37, 0x81, 0x75, 0x48, 0x3c, 0xce, 0xf5, |
3498 | 0xe6, 0x9b, 0xc0, 0x3a, 0x64, 0x7d, 0x85, 0xeb, 0x1b, 0xbf, 0xcf, 0x87, | 3520 | 0x8d, 0xdf, 0x4b, 0xd1, 0xd6, 0xd4, 0x6c, 0x33, 0xd6, 0x9d, 0xec, 0x36, |
3499 | 0x3b, 0x53, 0xa7, 0xdb, 0xb1, 0xee, 0xe4, 0x11, 0x43, 0xc5, 0x7e, 0xea, | 3521 | 0x54, 0xac, 0xa0, 0x5e, 0xec, 0xd6, 0x64, 0x49, 0xd1, 0xdd, 0x9a, 0x2a, |
3500 | 0xc5, 0xea, 0x4c, 0x96, 0x14, 0xdf, 0x9d, 0xa9, 0x12, 0x65, 0x14, 0xef, | 3522 | 0x51, 0x46, 0x4e, 0x6b, 0xba, 0x44, 0x19, 0x09, 0xe8, 0x71, 0xe0, 0x63, |
3501 | 0x4c, 0x97, 0x28, 0x23, 0x01, 0x3f, 0x71, 0xd8, 0x64, 0x40, 0x22, 0x5b, | 3523 | 0x43, 0x12, 0xdb, 0x4e, 0x3d, 0x1e, 0x43, 0xbf, 0x95, 0x10, 0xf3, 0xfe, |
3502 | 0xa8, 0xc7, 0x43, 0xe8, 0xf7, 0x57, 0x01, 0xe2, 0xb8, 0xa4, 0xc5, 0xdf, | 3524 | 0xa4, 0xcd, 0xdf, 0xc0, 0x2b, 0x17, 0x8e, 0xa3, 0x2f, 0x7f, 0xdf, 0x8b, |
3503 | 0xf0, 0xb5, 0x17, 0x0e, 0xa3, 0x2f, 0x7f, 0x6f, 0x07, 0xdd, 0xfe, 0xc1, | 3525 | 0x71, 0xbb, 0x7b, 0x0b, 0xd2, 0xdc, 0x7b, 0x04, 0x7e, 0x42, 0x1f, 0x00, |
3504 | 0x82, 0xb4, 0x0f, 0xce, 0xc0, 0x4f, 0xe8, 0x23, 0xc0, 0x91, 0xca, 0xce, | 3526 | 0xee, 0x50, 0x76, 0x5e, 0x07, 0x26, 0xdb, 0x0b, 0x7e, 0xb0, 0x36, 0xe2, |
3505 | 0x9b, 0xc0, 0xd8, 0x3b, 0x30, 0x1f, 0xac, 0x8d, 0x98, 0x25, 0xd3, 0xf3, | 3527 | 0xb6, 0x4c, 0xcc, 0x50, 0xae, 0x72, 0x1b, 0x78, 0x00, 0xff, 0x71, 0xf8, |
3506 | 0x94, 0xab, 0x7c, 0x08, 0x73, 0xc0, 0xfc, 0x63, 0xf0, 0x2d, 0x9c, 0x03, | 3528 | 0x16, 0xf2, 0xc0, 0xb9, 0x05, 0x76, 0xbf, 0x2c, 0xb9, 0x99, 0xb0, 0xc2, |
3507 | 0xc7, 0x16, 0xe4, 0x36, 0x4b, 0x92, 0x9b, 0x0f, 0x2a, 0x2c, 0x6b, 0x9b, | 3529 | 0x3e, 0xae, 0xc9, 0xf9, 0x35, 0x4d, 0x4f, 0xb4, 0x41, 0xc7, 0xe4, 0x6d, |
3508 | 0x1c, 0x5f, 0xd3, 0xf4, 0x44, 0x17, 0x74, 0xcc, 0xb9, 0xcd, 0x81, 0xb7, | 3530 | 0x0a, 0xb4, 0x3d, 0x0e, 0x3f, 0x6c, 0xa9, 0x9c, 0xdb, 0x40, 0xff, 0x42, |
3509 | 0x67, 0x10, 0xff, 0xa2, 0x0a, 0x43, 0x19, 0x17, 0xb8, 0x56, 0x46, 0xb1, | 3531 | 0x69, 0x50, 0x4f, 0x15, 0x49, 0xbf, 0x6f, 0x7b, 0xda, 0x0a, 0x7c, 0x8a, |
3510 | 0x4e, 0xc8, 0xbf, 0x67, 0x7b, 0x5a, 0x03, 0x3e, 0x45, 0xf9, 0x7f, 0xe4, | 3532 | 0xaa, 0x63, 0x21, 0xb7, 0x4b, 0xc0, 0x8f, 0x0c, 0xca, 0xf7, 0xe1, 0x4b, |
3511 | 0xea, 0x09, 0xf8, 0x91, 0x51, 0xf9, 0x7d, 0xf8, 0x92, 0x1f, 0xd7, 0xe3, | 3533 | 0xbe, 0x5b, 0x73, 0xe0, 0xff, 0xfb, 0xe1, 0xff, 0x7b, 0xe1, 0xff, 0x6d, |
3512 | 0xc8, 0x1b, 0x86, 0x91, 0x37, 0x0c, 0x22, 0x6f, 0xb0, 0x90, 0x37, 0x44, | 3534 | 0xf8, 0xff, 0x18, 0xfc, 0x7f, 0x17, 0xfc, 0x7f, 0x94, 0xbe, 0x5f, 0x4e, |
3513 | 0x90, 0x37, 0xf4, 0x21, 0x6f, 0x08, 0x23, 0x3e, 0x88, 0x1c, 0xad, 0xe7, | 3535 | 0xd6, 0xf2, 0xb0, 0xb1, 0x15, 0xf8, 0x41, 0x33, 0xec, 0xd6, 0x22, 0xe1, |
3514 | 0x61, 0x63, 0x0d, 0xf8, 0x41, 0x33, 0x68, 0xd7, 0x43, 0xc1, 0x64, 0x3d, | 3536 | 0x64, 0x2d, 0x1a, 0x4e, 0xd5, 0x42, 0xe0, 0xe9, 0x30, 0xe7, 0x04, 0x7f, |
3515 | 0x1c, 0x4c, 0xd5, 0x03, 0x98, 0xd3, 0x01, 0x8e, 0x89, 0xf9, 0xe5, 0x3b, | 3537 | 0xf9, 0xd6, 0xa1, 0x52, 0x3f, 0xe2, 0x8a, 0x0b, 0xbf, 0x94, 0x86, 0xdf, |
3516 | 0xc7, 0x4a, 0xc3, 0x88, 0x39, 0x36, 0xfc, 0x52, 0x1a, 0xf1, 0x36, 0x2e, | 3538 | 0x77, 0x80, 0x7f, 0xf3, 0xb2, 0x3a, 0x13, 0xc3, 0x33, 0x75, 0x49, 0x3b, |
3517 | 0x47, 0xf0, 0xcc, 0xf2, 0x7c, 0x04, 0xcf, 0x34, 0x25, 0x1d, 0x6f, 0x93, | 3539 | 0x4d, 0x32, 0x69, 0x3a, 0x18, 0x63, 0xbb, 0xb2, 0x53, 0x23, 0xb1, 0xab, |
3518 | 0x59, 0x33, 0x0e, 0x1a, 0x5b, 0x94, 0x9d, 0x22, 0xdf, 0x6a, 0x83, 0x9d, | 3540 | 0x09, 0x76, 0x2a, 0xb9, 0x22, 0xe3, 0x73, 0x17, 0xc6, 0x6b, 0x45, 0x7c, |
3519 | 0x4a, 0xae, 0xc8, 0x7c, 0xab, 0x0f, 0xf4, 0x3a, 0x11, 0x97, 0xe9, 0x1f, | 3541 | 0xa0, 0x7f, 0xa0, 0x2f, 0x58, 0xc9, 0x3c, 0x6c, 0x73, 0xcd, 0xb5, 0x69, |
3520 | 0xe8, 0x0b, 0xec, 0xdd, 0x5f, 0xb2, 0xb8, 0xe6, 0xba, 0xb4, 0xe4, 0xe9, | 3542 | 0x49, 0xe0, 0x67, 0x62, 0x13, 0xc4, 0x3a, 0xd8, 0x05, 0xdb, 0xf6, 0xe0, |
3521 | 0xbc, 0x10, 0x6b, 0x22, 0x0e, 0xc2, 0x2e, 0xd8, 0x36, 0x81, 0xe7, 0xf8, | 3543 | 0x39, 0xfe, 0xfe, 0x6f, 0x7e, 0x8d, 0xea, 0xaf, 0x5a, 0x04, 0xc6, 0xfb, |
3522 | 0xfb, 0x6d, 0xcf, 0xef, 0x7f, 0x24, 0x28, 0x30, 0xde, 0x4b, 0x8c, 0xf9, | 3544 | 0x32, 0x63, 0x8f, 0x8d, 0xf1, 0xaa, 0x8d, 0xeb, 0x75, 0x49, 0x17, 0x3b, |
3523 | 0x16, 0xe8, 0x39, 0xad, 0xeb, 0xb5, 0xa6, 0x8b, 0xe5, 0xdf, 0x67, 0xfd, | 3545 | 0xb8, 0xcf, 0x7a, 0x0d, 0x6b, 0x54, 0xaf, 0x80, 0xde, 0x7a, 0x7d, 0x55, |
3524 | 0x8d, 0x35, 0xc7, 0xd7, 0xc0, 0x73, 0xbf, 0xb9, 0x8c, 0x1c, 0xd9, 0xde, | 3546 | 0x61, 0x48, 0xe4, 0x33, 0x87, 0xd6, 0xc0, 0x43, 0xe3, 0x33, 0xdf, 0xc0, |
3525 | 0xbf, 0x82, 0xdf, 0xad, 0xfd, 0xeb, 0xe8, 0xaf, 0xda, 0x82, 0x66, 0x22, | 3547 | 0x33, 0xaa, 0x2d, 0x6c, 0x26, 0x1c, 0xe6, 0x50, 0xf0, 0x9b, 0x2f, 0xc0, |
3526 | 0xce, 0x7c, 0x18, 0x3e, 0x73, 0x10, 0xfe, 0xf1, 0x56, 0x46, 0x5f, 0xba, | 3548 | 0x47, 0x1e, 0xcb, 0xe8, 0xcb, 0x57, 0xf1, 0x2c, 0x64, 0x5a, 0x3c, 0x96, |
3527 | 0x89, 0x79, 0x42, 0x9e, 0xc5, 0x5b, 0x99, 0xc0, 0xc0, 0xb5, 0xe6, 0x8b, | 3549 | 0x09, 0xf5, 0xbc, 0x5a, 0x7f, 0x16, 0x39, 0xf1, 0xd0, 0xf2, 0x80, 0xa4, |
3528 | 0xc0, 0x37, 0x63, 0x4b, 0x23, 0x92, 0x5a, 0xea, 0x0f, 0x5f, 0x96, 0xce, | 3550 | 0x96, 0xbb, 0xa3, 0x17, 0xa5, 0xf5, 0x1d, 0x17, 0xb1, 0x74, 0xb2, 0x6a, |
3529 | 0xdb, 0xb6, 0x5c, 0x6b, 0xce, 0x3a, 0xd1, 0xe3, 0xb6, 0x10, 0x6f, 0x99, | 3551 | 0x9d, 0x76, 0x85, 0x39, 0xba, 0x29, 0x0b, 0xc0, 0xd5, 0x7b, 0xf6, 0x3d, |
3530 | 0x52, 0x01, 0xa9, 0x6d, 0x3b, 0x3b, 0x88, 0x19, 0x2f, 0x8a, 0x1e, 0x91, | 3552 | 0x0f, 0xda, 0xad, 0x17, 0x45, 0x8f, 0xe1, 0x37, 0x31, 0x0c, 0x79, 0x5c, |
3531 | 0xe4, 0x29, 0x5b, 0x46, 0x76, 0xfa, 0xb9, 0xfb, 0x9d, 0x0e, 0xe9, 0x42, | 3553 | 0x03, 0x7f, 0x1a, 0xae, 0x5b, 0xd6, 0x6b, 0x57, 0x85, 0x12, 0xf8, 0xac, |
3532 | 0xdb, 0x52, 0x04, 0x7d, 0x88, 0x53, 0x39, 0xef, 0x2c, 0xe6, 0xac, 0xb9, | 3554 | 0x1d, 0xcb, 0x5c, 0x9c, 0x06, 0xae, 0x83, 0x3e, 0x92, 0xd3, 0xc4, 0x9c, |
3533 | 0xcf, 0x78, 0xf5, 0xc9, 0x42, 0x09, 0x73, 0xaf, 0xdf, 0xca, 0x5c, 0x3e, | 3555 | 0x5b, 0x20, 0x93, 0x21, 0xd8, 0x05, 0xf5, 0x1d, 0xc7, 0xb3, 0x75, 0xf9, |
3534 | 0x05, 0xec, 0x0e, 0x1d, 0x25, 0x4f, 0xb1, 0xae, 0xb0, 0x09, 0x72, 0x1a, | 3556 | 0x92, 0x43, 0x1b, 0x78, 0x0e, 0x72, 0xc3, 0x58, 0xa1, 0x80, 0x6e, 0x60, |
3535 | 0x83, 0xad, 0xd0, 0x06, 0xfa, 0xf1, 0x6c, 0x53, 0xbe, 0x11, 0xa7, 0x5d, | 3557 | 0x80, 0x19, 0xca, 0x6a, 0x17, 0xf2, 0x36, 0x57, 0x06, 0xf6, 0x49, 0x78, |
3536 | 0xbc, 0x04, 0x59, 0x82, 0x56, 0xc0, 0x9f, 0x0f, 0x70, 0xde, 0x3c, 0xe5, | 3558 | 0x47, 0x62, 0x73, 0x4e, 0x76, 0x2c, 0xb3, 0x3a, 0x8d, 0xf1, 0x7b, 0x80, |
3537 | 0x17, 0x46, 0x6e, 0xce, 0xb1, 0x25, 0xd8, 0x99, 0x58, 0x9f, 0x77, 0xdf, | 3559 | 0x79, 0x84, 0xb5, 0x19, 0xfa, 0x60, 0x81, 0xed, 0xec, 0x87, 0x7e, 0x98, |
3538 | 0xca, 0x2c, 0x9f, 0x02, 0xfd, 0x01, 0xd6, 0xde, 0xe0, 0xb3, 0x8b, 0xac, | 3560 | 0x7b, 0x33, 0x47, 0xa3, 0x6f, 0x3a, 0xa8, 0xa5, 0x2a, 0x65, 0x43, 0x3a, |
3539 | 0x1d, 0x32, 0x27, 0xdd, 0x05, 0x3d, 0xed, 0x55, 0xb5, 0xb8, 0x64, 0x35, | 3561 | 0x0e, 0x21, 0xb7, 0x71, 0x64, 0x71, 0x9a, 0x39, 0x1a, 0xf3, 0x99, 0x20, |
3540 | 0x2e, 0xd6, 0x49, 0xfa, 0x2c, 0x89, 0x18, 0xd6, 0x7e, 0xe4, 0xaf, 0x62, | 3562 | 0x7f, 0xd1, 0x90, 0x4b, 0xa0, 0x7d, 0xf9, 0x25, 0xa5, 0x07, 0x03, 0xfa, |
3541 | 0xea, 0x89, 0x49, 0xdc, 0xa3, 0x3c, 0x35, 0xe4, 0x1c, 0xb8, 0x7f, 0x61, | 3563 | 0xca, 0xed, 0xbb, 0x9f, 0x7c, 0xcd, 0x18, 0x09, 0xf8, 0xbf, 0x01, 0xf2, |
3542 | 0x45, 0xe9, 0xc4, 0x80, 0xee, 0x72, 0x3b, 0x99, 0x84, 0xc9, 0xbc, 0x91, | 3564 | 0xa2, 0x68, 0x40, 0xce, 0xc6, 0x35, 0x17, 0x03, 0x5f, 0xf8, 0x5c, 0xcf, |
3543 | 0x80, 0x2f, 0x1c, 0xe1, 0x1c, 0xd4, 0xd8, 0xc8, 0xc7, 0xb9, 0xfe, 0x30, | 3565 | 0xdd, 0xd4, 0xdf, 0x64, 0xe9, 0x04, 0xec, 0x58, 0xf2, 0x4d, 0x09, 0xf0, |
3544 | 0x67, 0xd8, 0x55, 0x4b, 0x5e, 0xae, 0xfe, 0x66, 0x4b, 0x47, 0x60, 0xd3, | 3566 | 0x36, 0x80, 0xdf, 0x58, 0xf8, 0x27, 0xa1, 0xc3, 0x73, 0x03, 0xac, 0x91, |
3545 | 0x92, 0x6f, 0x43, 0x3e, 0x90, 0x1c, 0xc1, 0x6f, 0x38, 0x81, 0xa3, 0xd0, | 3567 | 0x3d, 0x07, 0xfc, 0x47, 0xfa, 0xe3, 0xb1, 0x13, 0x6a, 0xdd, 0xe2, 0xba, |
3546 | 0xe7, 0xd9, 0x11, 0xd6, 0x3f, 0x5f, 0x02, 0xb6, 0x27, 0xdf, 0xb1, 0xc8, | 3568 | 0xca, 0x3c, 0x62, 0x8b, 0x5c, 0x54, 0x7c, 0xde, 0xc1, 0xfc, 0x14, 0x7a, |
3547 | 0x11, 0xb5, 0x86, 0x71, 0xed, 0x30, 0x97, 0xdb, 0x24, 0x97, 0xd5, 0xfc, | 3569 | 0xb9, 0x15, 0x3e, 0x87, 0x3f, 0x24, 0x9f, 0xde, 0x3c, 0x8c, 0x5b, 0x49, |
3548 | 0x1e, 0x22, 0xf6, 0x80, 0x9e, 0xee, 0x67, 0x7e, 0xe3, 0xf7, 0x39, 0x3f, | 3570 | 0x3b, 0x26, 0xa9, 0xe2, 0xcb, 0x75, 0xaf, 0x0e, 0xfb, 0x47, 0xb0, 0x2b, |
3549 | 0x97, 0x3e, 0x63, 0x57, 0xd2, 0x8a, 0x48, 0xaa, 0x78, 0xa9, 0x19, 0xb0, | 3571 | 0x5c, 0x57, 0xc3, 0xa0, 0x87, 0x75, 0x99, 0x01, 0xa5, 0x5b, 0xd0, 0x43, |
3550 | 0x2c, 0x60, 0x67, 0x57, 0x8f, 0x29, 0x27, 0x08, 0x3e, 0x58, 0x6b, 0xdb, | 3572 | 0x9b, 0xc9, 0x87, 0x13, 0xdb, 0xe4, 0xfc, 0x4c, 0x87, 0x2c, 0xcc, 0xbc, |
3551 | 0xa9, 0x74, 0x09, 0x3e, 0x68, 0x3b, 0xf9, 0x60, 0x62, 0xb3, 0x9c, 0x9b, | 3573 | 0x26, 0x95, 0x99, 0x36, 0x59, 0x9a, 0xa9, 0xcb, 0x65, 0x47, 0xf9, 0x25, |
3552 | 0xef, 0x91, 0xca, 0xfc, 0xcf, 0xa5, 0x3a, 0xdf, 0x25, 0xe7, 0xe7, 0x9b, | 3574 | 0xbb, 0x59, 0xad, 0x69, 0xd9, 0xe5, 0x61, 0xf6, 0xf8, 0xe0, 0x15, 0x79, |
3553 | 0x72, 0x35, 0xae, 0x7c, 0x93, 0xd5, 0xae, 0xd6, 0xb5, 0x3c, 0xec, 0xd6, | 3575 | 0x5a, 0xce, 0x97, 0x3d, 0x1e, 0x32, 0x0d, 0x3c, 0xbc, 0x0a, 0x1b, 0xeb, |
3554 | 0x61, 0x62, 0xa3, 0xd7, 0xe5, 0x79, 0x39, 0x57, 0x76, 0x79, 0xcf, 0xb4, | 3576 | 0xec, 0x21, 0x0f, 0xb4, 0x07, 0xf2, 0xc3, 0xdc, 0x83, 0x39, 0xe6, 0x41, |
3555 | 0xf0, 0x7e, 0x15, 0xb6, 0xf6, 0xaa, 0x45, 0xfe, 0x47, 0xa4, 0x52, 0x24, | 3577 | 0xac, 0xa3, 0x11, 0x60, 0xa3, 0x83, 0x5a, 0xd2, 0xe7, 0x21, 0xe5, 0xf1, |
3556 | 0xef, 0xfb, 0x14, 0xef, 0xbb, 0x56, 0x79, 0x97, 0xac, 0x61, 0x91, 0xff, | 3578 | 0x90, 0x7d, 0x2f, 0x0f, 0x2d, 0x92, 0xdd, 0x49, 0x3e, 0xa0, 0x83, 0x69, |
3557 | 0x8d, 0x78, 0xef, 0x90, 0xec, 0x56, 0xf2, 0x1f, 0xc1, 0xb3, 0xef, 0xb4, | 3579 | 0xea, 0x25, 0xc0, 0x1b, 0x1e, 0xfd, 0xc9, 0xe5, 0x57, 0xeb, 0xfa, 0x74, |
3558 | 0xbf, 0x8a, 0x73, 0xad, 0xb9, 0x5c, 0x6c, 0x53, 0x3c, 0x1b, 0x89, 0x11, | 3580 | 0x93, 0xa2, 0xdd, 0x48, 0x0c, 0xc0, 0xae, 0x5e, 0xad, 0xcb, 0x32, 0xd7, |
3559 | 0xc8, 0xe7, 0x5a, 0xb3, 0xe1, 0x70, 0x1d, 0xe1, 0xb7, 0xf3, 0x2f, 0xe0, | 3581 | 0x12, 0x7e, 0x57, 0xff, 0x31, 0xfc, 0x55, 0xa7, 0xca, 0x5b, 0x72, 0x63, |
3560 | 0xab, 0x7a, 0x55, 0xce, 0x92, 0x9b, 0xec, 0xee, 0x4c, 0x2e, 0x8e, 0x42, | 3582 | 0xed, 0xad, 0xc9, 0xf9, 0x41, 0xe8, 0xba, 0x55, 0xad, 0x45, 0xb8, 0x0e, |
3561 | 0xb7, 0x9d, 0x6a, 0x1d, 0xc2, 0x6d, 0x40, 0x67, 0xff, 0x1e, 0xfd, 0xbf, | 3583 | 0xe8, 0xf0, 0x0f, 0xd1, 0xff, 0xab, 0x5c, 0x73, 0x4a, 0x3e, 0x69, 0xc8, |
3562 | 0xcd, 0xf5, 0xa6, 0xe4, 0x92, 0x86, 0x5c, 0x0a, 0xc5, 0xf1, 0x76, 0xe0, | 3584 | 0xa7, 0x50, 0xbc, 0xbd, 0x19, 0x39, 0x37, 0xe6, 0x71, 0x33, 0xd9, 0x2a, |
3563 | 0x27, 0x8c, 0xd3, 0xc8, 0x64, 0x1d, 0x3e, 0xd3, 0x07, 0xdf, 0xc6, 0xef, | 3585 | 0x9f, 0xe9, 0x82, 0x7f, 0xe3, 0xf7, 0x07, 0xb6, 0x8f, 0x3c, 0xfc, 0x2e, |
3564 | 0xf7, 0x6d, 0x0f, 0x79, 0xf8, 0x5c, 0xe8, 0x1c, 0x79, 0x05, 0xd7, 0xf3, | 3586 | 0x6c, 0x00, 0xb9, 0x05, 0xd7, 0xf4, 0xc0, 0x0a, 0xe2, 0x6c, 0xbc, 0x77, |
3565 | 0x48, 0x03, 0x31, 0x36, 0x36, 0x58, 0x51, 0xfb, 0x10, 0x71, 0x85, 0x85, | 3587 | 0x41, 0xd5, 0xf4, 0x1d, 0x85, 0x9f, 0x26, 0xab, 0x5f, 0xc5, 0xc7, 0x9b, |
3566 | 0x67, 0x9d, 0x6f, 0xe3, 0xe3, 0x8e, 0x37, 0x56, 0xe7, 0x98, 0x6b, 0xe7, | 3588 | 0x6f, 0xa8, 0xc6, 0x39, 0x37, 0xf2, 0x84, 0x9c, 0x06, 0xb9, 0xa4, 0x8d, |
3567 | 0x54, 0x70, 0x1a, 0xc8, 0xdf, 0x2d, 0xd0, 0xe5, 0xb8, 0x79, 0x31, 0x12, | 3589 | 0x71, 0x39, 0x6f, 0x5e, 0x8c, 0x84, 0x81, 0x79, 0xd9, 0xd6, 0x0e, 0x3f, |
3568 | 0x06, 0xc6, 0x65, 0x5b, 0x37, 0x7c, 0x4c, 0x04, 0x3e, 0x6b, 0x18, 0xbe, | 3590 | 0x13, 0x83, 0xdf, 0xea, 0x87, 0xff, 0xe7, 0x5a, 0xa6, 0xaf, 0x0f, 0x68, |
3569 | 0x9f, 0x6b, 0x99, 0x7e, 0xde, 0xe7, 0x7d, 0x18, 0x34, 0xe9, 0x7f, 0x87, | 3591 | 0xef, 0xc7, 0x98, 0xf4, 0xc1, 0xfd, 0xe0, 0x99, 0xb9, 0x34, 0x7d, 0x28, |
3570 | 0x31, 0x67, 0xe6, 0xd8, 0xf4, 0x9f, 0x88, 0x27, 0xb5, 0x70, 0x57, 0xf2, | 3592 | 0x62, 0xca, 0x62, 0xb4, 0x2d, 0x39, 0xeb, 0xd5, 0x93, 0xbc, 0xdf, 0xbc, |
3571 | 0xb4, 0x5b, 0x1b, 0x74, 0x7f, 0xf3, 0xbe, 0x04, 0x1f, 0x49, 0x44, 0xcb, | 3593 | 0x2f, 0xe1, 0xdd, 0x09, 0xab, 0x9c, 0x47, 0xfe, 0x97, 0xc2, 0xda, 0x4d, |
3572 | 0x79, 0xe4, 0x7e, 0x29, 0xac, 0xd1, 0xa4, 0x85, 0x3c, 0xbb, 0x16, 0x7d, | 3594 | 0xda, 0xc8, 0xa7, 0x17, 0xad, 0x17, 0x88, 0xd3, 0x74, 0xca, 0x60, 0x99, |
3573 | 0x85, 0x98, 0x5b, 0xa7, 0x0c, 0x96, 0x28, 0x27, 0xd6, 0xa9, 0x4c, 0xc9, | 3595 | 0x72, 0x62, 0x6d, 0xc3, 0x94, 0xfc, 0xc2, 0xef, 0x42, 0x1e, 0x61, 0xd9, |
3574 | 0x57, 0xbe, 0x0b, 0x79, 0x04, 0x65, 0x8b, 0x95, 0x85, 0x4f, 0x01, 0xff, | 3596 | 0x6e, 0x67, 0xe1, 0x53, 0x98, 0xb7, 0xb8, 0xe0, 0x8d, 0xbe, 0xa7, 0x1b, |
3575 | 0x98, 0xfb, 0x5c, 0x89, 0xb5, 0xc8, 0x7e, 0xc4, 0x31, 0x03, 0x42, 0x40, | 3597 | 0xb1, 0xcc, 0x80, 0x10, 0x90, 0x57, 0x2d, 0x1b, 0xf2, 0x40, 0xa8, 0x0f, |
3576 | 0x4e, 0xb5, 0x64, 0xc8, 0x67, 0x03, 0x43, 0xc8, 0x01, 0x9f, 0x45, 0xdf, | 3598 | 0x79, 0xe0, 0xa7, 0xd0, 0x37, 0x24, 0xf9, 0x65, 0xc6, 0x84, 0x90, 0x4c, |
3577 | 0x80, 0xe4, 0x97, 0x18, 0x0f, 0x02, 0x32, 0xb7, 0x24, 0x72, 0xfd, 0x14, | 3599 | 0x2d, 0x8b, 0x5c, 0x99, 0xa6, 0x5f, 0x51, 0x7f, 0x90, 0xb9, 0x9b, 0x99, |
3578 | 0xfd, 0x8a, 0xfa, 0x83, 0xcc, 0x1b, 0x99, 0x69, 0x62, 0xed, 0x79, 0xfa, | 3600 | 0x20, 0x3e, 0x9b, 0xa1, 0x8f, 0xa1, 0xff, 0xd8, 0x01, 0x5d, 0xc4, 0x9f, |
3579 | 0x18, 0xfa, 0x89, 0x07, 0xa1, 0x8b, 0xd8, 0x4b, 0xdf, 0x40, 0x6c, 0x9a, | 3601 | 0xfb, 0x12, 0xe2, 0xd3, 0x64, 0xb1, 0x1b, 0x7e, 0x53, 0x56, 0x74, 0xc8, |
3580 | 0x2d, 0xf6, 0xc3, 0x67, 0x4a, 0x43, 0x87, 0x4c, 0x11, 0xd3, 0x98, 0xa3, | 3602 | 0x14, 0x71, 0x8d, 0xf5, 0xaa, 0x1b, 0xd4, 0xaa, 0x82, 0x3a, 0x55, 0x58, |
3581 | 0x6f, 0x50, 0x77, 0xf4, 0x6b, 0x8e, 0x41, 0x29, 0x9c, 0x62, 0xbd, 0x31, | 3603 | 0x0a, 0xd3, 0xac, 0x51, 0x85, 0x41, 0x0b, 0x73, 0x57, 0x43, 0xe5, 0x42, |
3582 | 0x08, 0x5e, 0x98, 0xb7, 0x1a, 0x2a, 0x0f, 0x7a, 0x50, 0xf9, 0x56, 0x7e, | 3604 | 0x3b, 0x94, 0x7f, 0xe5, 0x77, 0xa8, 0x61, 0xde, 0xf8, 0xe9, 0x3d, 0x3a, |
3583 | 0x07, 0x5a, 0xc6, 0x8d, 0x1d, 0xdf, 0xa6, 0xd3, 0x8f, 0x3d, 0x22, 0xf6, | 3605 | 0xfd, 0xd8, 0x6e, 0x71, 0x47, 0x8f, 0xb5, 0xee, 0x2f, 0x01, 0x8b, 0x76, |
3584 | 0xc4, 0xa1, 0xce, 0x5d, 0xa5, 0x76, 0x29, 0xf7, 0xd2, 0x2e, 0xa9, 0xff, | 3606 | 0xd2, 0x3e, 0xa9, 0xff, 0xac, 0x4e, 0x7f, 0x3b, 0x55, 0x1a, 0xc0, 0x78, |
3585 | 0xac, 0x4e, 0x5f, 0x8b, 0x3c, 0x0c, 0xf4, 0x58, 0x23, 0x08, 0xa0, 0x5f, | 3607 | 0xc4, 0x95, 0x21, 0xf4, 0x8b, 0xf8, 0xfd, 0x28, 0xd7, 0x7f, 0x25, 0xe3, |
3586 | 0xc8, 0xeb, 0x47, 0xb9, 0xfe, 0xb6, 0x4c, 0xed, 0xfc, 0x3b, 0xf0, 0xe5, | 3608 | 0xfb, 0xfe, 0x1a, 0x74, 0x79, 0xfe, 0x8e, 0x75, 0xee, 0xdc, 0x67, 0x74, |
3587 | 0xfa, 0xb5, 0xdc, 0x4e, 0xf8, 0xdb, 0x09, 0x5d, 0x1e, 0xfb, 0x54, 0x1a, | 3609 | 0xb9, 0xef, 0x63, 0x69, 0x3c, 0xcb, 0x78, 0xf8, 0xb6, 0x8f, 0xe1, 0xd8, |
3588 | 0xcf, 0x32, 0x16, 0xde, 0xf2, 0xf0, 0x38, 0xdb, 0x58, 0xa3, 0x45, 0x9e, | 3610 | 0xc6, 0xba, 0x1e, 0x72, 0xf5, 0xf3, 0x26, 0xbe, 0x3b, 0x25, 0x7f, 0x3e, |
3589 | 0x7e, 0xce, 0xc4, 0x77, 0xaf, 0xe4, 0xcf, 0x05, 0x21, 0x07, 0xe4, 0xc4, | 3611 | 0x0c, 0x39, 0x20, 0x2f, 0x5e, 0xf0, 0xc6, 0x62, 0xee, 0x7b, 0x1a, 0x3a, |
3590 | 0x15, 0x97, 0x16, 0xf3, 0xde, 0xe3, 0xd0, 0x91, 0x7e, 0x32, 0x28, 0x6d, | 3612 | 0xd2, 0xcf, 0x84, 0xa5, 0xe9, 0x4c, 0xa7, 0x84, 0xbe, 0xd2, 0x26, 0xcd, |
3591 | 0x27, 0x7b, 0x25, 0xf0, 0xad, 0x2e, 0x69, 0xff, 0xd6, 0x80, 0x18, 0xdf, | 3613 | 0x5f, 0xe9, 0x11, 0xe3, 0x2b, 0xac, 0x3f, 0x58, 0xb1, 0x93, 0xaa, 0xf6, |
3592 | 0x62, 0x2d, 0x29, 0x1a, 0x39, 0xaa, 0xea, 0x58, 0x69, 0x39, 0x86, 0xf8, | 3614 | 0x91, 0x96, 0x53, 0x88, 0x61, 0x3a, 0xe2, 0xb1, 0xb2, 0x53, 0x73, 0xa7, |
3593 | 0xa5, 0x23, 0x16, 0x2b, 0x3b, 0x35, 0xb7, 0x8a, 0x81, 0xc4, 0x55, 0x7f, | 3615 | 0x18, 0x48, 0x5e, 0xf5, 0x67, 0x5c, 0xf9, 0xe2, 0xbe, 0x9f, 0xab, 0xda, |
3594 | 0xc1, 0x96, 0xaf, 0xef, 0xfc, 0x85, 0xaa, 0xa3, 0x26, 0x47, 0x70, 0xfd, | 3616 | 0x1b, 0x70, 0xb3, 0xe8, 0xcf, 0x67, 0xc4, 0xad, 0xbd, 0x46, 0x3b, 0xcd, |
3595 | 0x72, 0x06, 0xd8, 0x44, 0x83, 0xad, 0x34, 0x32, 0xd7, 0x1e, 0xf5, 0x73, | 3617 | 0xbc, 0x7a, 0xd7, 0x1d, 0xd0, 0x39, 0x73, 0xcb, 0x5e, 0x55, 0xc7, 0xfd, |
3596 | 0xcb, 0x41, 0x55, 0x93, 0xff, 0xfa, 0x4e, 0x37, 0xb7, 0x9c, 0x45, 0x6e, | 3618 | 0xe2, 0x3e, 0xc6, 0x4c, 0x2f, 0xbf, 0x4c, 0x23, 0xbf, 0x9c, 0x94, 0x6e, |
3597 | 0x99, 0x56, 0xb9, 0x25, 0xfc, 0x6b, 0x80, 0xfd, 0xb6, 0x8a, 0x8e, 0xb1, | 3619 | 0xf8, 0x59, 0xf6, 0xdb, 0x29, 0x3a, 0xe6, 0xca, 0x09, 0xf3, 0xf5, 0x3b, |
3598 | 0x72, 0xc2, 0x5c, 0xfd, 0xa3, 0x62, 0x1f, 0xc0, 0xba, 0x38, 0x23, 0xf3, | 3620 | 0xc5, 0x3d, 0x8c, 0x75, 0x71, 0x56, 0x66, 0xf4, 0x84, 0xa6, 0xc6, 0x34, |
3599 | 0x7a, 0x42, 0x53, 0x34, 0x8d, 0x17, 0xe8, 0xa7, 0xe8, 0xbf, 0x68, 0xe3, | 3621 | 0x9e, 0xa1, 0xdf, 0xa2, 0x3f, 0xa3, 0x8d, 0xb3, 0x0e, 0x82, 0xb6, 0xe7, |
3600 | 0xac, 0x69, 0xa1, 0xed, 0x65, 0xfa, 0x28, 0xd7, 0xb6, 0xc7, 0x5a, 0x7c, | 3622 | 0xe9, 0xb3, 0x3c, 0xdb, 0x1e, 0x6a, 0xf0, 0x7d, 0x53, 0xa5, 0x1a, 0x74, |
3601 | 0xdd, 0x5c, 0xa9, 0x0e, 0x1d, 0x22, 0xa7, 0xb7, 0xda, 0x30, 0x7f, 0xc4, | 3623 | 0x88, 0xbc, 0xde, 0x6e, 0x02, 0xff, 0x88, 0xeb, 0x36, 0xaf, 0xc9, 0x3f, |
3602 | 0x74, 0x8b, 0xd7, 0x9c, 0x3f, 0x7c, 0x67, 0x28, 0xa4, 0xae, 0x0b, 0x65, | 3624 | 0x7c, 0x69, 0x24, 0xa2, 0xae, 0x0b, 0x65, 0x0f, 0xf7, 0x7a, 0xe3, 0x33, |
3603 | 0xb7, 0x86, 0xe1, 0xd2, 0x67, 0xfe, 0x01, 0x1f, 0x53, 0x27, 0x1f, 0x1c, | 3625 | 0x07, 0x81, 0xaf, 0xa9, 0x91, 0x0e, 0xce, 0xdb, 0x25, 0xc6, 0xd9, 0x88, |
3604 | 0xb7, 0x4f, 0x8c, 0x33, 0x21, 0x09, 0x9c, 0xa1, 0xfd, 0x45, 0x23, 0x69, | 3626 | 0x84, 0xce, 0xd2, 0xfe, 0xac, 0x58, 0x1a, 0xf2, 0x9b, 0xb2, 0x89, 0xf5, |
3605 | 0xc8, 0x6f, 0xce, 0x22, 0x06, 0x3c, 0x04, 0x6c, 0xf4, 0x88, 0xe8, 0xe7, | 3627 | 0x0e, 0xc0, 0x17, 0xec, 0x16, 0xfd, 0x7c, 0x2f, 0xd6, 0x8e, 0x15, 0x2d, |
3606 | 0x06, 0xb1, 0x76, 0xa2, 0xe1, 0xb2, 0xc4, 0xc4, 0xa8, 0x04, 0xe5, 0x8d, | 3628 | 0x4b, 0x5c, 0x8c, 0x85, 0xb0, 0xbc, 0x09, 0xdf, 0x41, 0x7b, 0x39, 0x87, |
3607 | 0x53, 0xd1, 0x08, 0xed, 0xe5, 0x2c, 0xe2, 0xd5, 0x91, 0x7a, 0xe7, 0xed, | 3629 | 0x78, 0x75, 0xa2, 0xd6, 0xfa, 0xce, 0x8a, 0xa2, 0x82, 0x6d, 0x43, 0xc0, |
3608 | 0x86, 0xe2, 0x82, 0x6d, 0xdf, 0x08, 0x00, 0x3b, 0x0c, 0xda, 0x7a, 0xb7, | 3630 | 0x4b, 0x56, 0xaf, 0xab, 0xb7, 0xcb, 0xeb, 0xd0, 0x77, 0x56, 0xb5, 0xed, |
3609 | 0xdc, 0x80, 0xbe, 0xb3, 0xaa, 0xed, 0x11, 0xd0, 0x05, 0x0f, 0x67, 0x58, | 3631 | 0xc6, 0xb8, 0xa0, 0xe1, 0x2c, 0xeb, 0x49, 0x1c, 0xf7, 0x1f, 0x60, 0x4c, |
3610 | 0x1b, 0x24, 0xdd, 0xa3, 0xa0, 0x49, 0xda, 0x8d, 0xcc, 0x32, 0x73, 0xd3, | 3632 | 0x8e, 0xed, 0x66, 0x56, 0x99, 0x9f, 0x4e, 0xd3, 0x76, 0x3b, 0x61, 0x77, |
3611 | 0x53, 0xb4, 0xdd, 0x5e, 0xd8, 0x1d, 0xae, 0xeb, 0xed, 0x92, 0x9d, 0x8c, | 3633 | 0xb8, 0xae, 0x35, 0x4b, 0x76, 0x2c, 0x26, 0xfa, 0xf4, 0x83, 0xd2, 0xbd, |
3612 | 0x88, 0x7e, 0x6a, 0x8f, 0xf4, 0xef, 0xd4, 0xdd, 0xf9, 0xa8, 0x39, 0xb2, | 3634 | 0x4f, 0xf7, 0xf8, 0x51, 0x3c, 0xb2, 0x8d, 0x75, 0xca, 0x16, 0xb5, 0x1e, |
3613 | 0x8d, 0x35, 0xe7, 0x11, 0xb5, 0x1e, 0xf5, 0x25, 0xd8, 0xcc, 0x3e, 0xea, | 3635 | 0xf5, 0x65, 0xd8, 0xcc, 0x41, 0xea, 0x18, 0xf1, 0x1f, 0xf1, 0x8d, 0xfe, |
3614 | 0x18, 0xb1, 0x1f, 0x71, 0x8c, 0x7e, 0xcc, 0x40, 0x1c, 0x4b, 0xd5, 0x5d, | 3636 | 0xcc, 0x40, 0x7c, 0x4b, 0xd5, 0x3c, 0xbd, 0x97, 0x0f, 0xee, 0x94, 0x53, |
3615 | 0xbd, 0x97, 0xf7, 0x6d, 0x95, 0x63, 0x67, 0x68, 0x4f, 0xb8, 0xb7, 0x6a, | 3637 | 0x67, 0x69, 0x4f, 0xb8, 0xb7, 0x6e, 0x53, 0xc1, 0x7e, 0x02, 0xef, 0xd9, |
3616 | 0x53, 0xfe, 0xde, 0x10, 0xef, 0x59, 0x72, 0xfc, 0x45, 0xe6, 0x1e, 0xcc, | 3638 | 0x72, 0xfa, 0x59, 0xe6, 0x1f, 0xcc, 0x3b, 0x98, 0x6b, 0x59, 0xd1, 0xfd, |
3617 | 0x39, 0x98, 0x67, 0x45, 0xc3, 0xbb, 0x30, 0x1f, 0xfd, 0x31, 0xfa, 0x03, | 3639 | 0xe0, 0x47, 0xbf, 0x8f, 0xfe, 0x40, 0x57, 0xb6, 0x9b, 0x83, 0xaf, 0x2e, |
3618 | 0x5d, 0xd9, 0x6e, 0x0e, 0x3e, 0xba, 0x50, 0xa7, 0xde, 0x86, 0xb9, 0x7f, | 3640 | 0xd4, 0xa8, 0xb7, 0x7e, 0xee, 0xb9, 0x98, 0xcc, 0xd9, 0xdc, 0xa8, 0x27, |
3619 | 0x66, 0x32, 0x5f, 0xb3, 0xc3, 0xae, 0xbc, 0x0b, 0x68, 0x9b, 0x85, 0xef, | 3641 | 0xef, 0x02, 0xda, 0x26, 0x11, 0x07, 0x52, 0xd5, 0x26, 0x59, 0x1b, 0x73, |
3620 | 0x4f, 0x39, 0x6d, 0xb2, 0x32, 0x69, 0x43, 0xf7, 0x5f, 0x02, 0x5f, 0x07, | 3642 | 0xa1, 0xfb, 0x8f, 0x82, 0xae, 0xc3, 0xad, 0xc4, 0xab, 0x6b, 0x63, 0x69, |
3621 | 0x3a, 0x59, 0x23, 0x58, 0x99, 0x4c, 0xe3, 0xfa, 0x80, 0xca, 0xd1, 0x8c, | 3643 | 0x5c, 0x1f, 0x56, 0x79, 0x9a, 0x71, 0x9f, 0x8b, 0x31, 0x76, 0x72, 0x1d, |
3622 | 0xc7, 0x6c, 0xd0, 0xd8, 0xca, 0x75, 0xe4, 0xe9, 0x29, 0xae, 0x17, 0xe6, | 3644 | 0xf9, 0x7a, 0x72, 0xf4, 0xc2, 0xcc, 0x7d, 0xfa, 0x24, 0x7c, 0xf7, 0xb0, |
3623 | 0x1f, 0xd3, 0x67, 0xe1, 0xb3, 0xc7, 0xe3, 0x8c, 0xf1, 0xdc, 0x4b, 0xe8, | 3645 | 0xc3, 0x18, 0xcf, 0xfa, 0x73, 0x0b, 0xe8, 0x68, 0x57, 0xd8, 0x42, 0xb7, |
3624 | 0x00, 0x1f, 0xdd, 0x0a, 0x57, 0xe8, 0xd6, 0x4e, 0xbd, 0x50, 0xa6, 0x9f, | 3646 | 0xf7, 0xe9, 0x85, 0x32, 0xfd, 0x7d, 0x3e, 0xda, 0x2c, 0x0e, 0x7d, 0x96, |
3625 | 0xcf, 0x87, 0xdb, 0x85, 0x78, 0xc4, 0xd4, 0x2b, 0x16, 0x75, 0xa2, 0xc9, | 3647 | 0xbe, 0x60, 0x53, 0x27, 0x9a, 0x5c, 0x54, 0xb5, 0x6a, 0x44, 0xa0, 0x6a, |
3626 | 0x65, 0xb5, 0xef, 0x20, 0x92, 0x76, 0x0e, 0x61, 0xac, 0xb8, 0x5e, 0x2d, | 3648 | 0x0a, 0x73, 0x39, 0x7a, 0xa5, 0xbc, 0x4f, 0xcf, 0xc3, 0x55, 0xaf, 0x45, |
3627 | 0xef, 0xd4, 0xf3, 0x65, 0x43, 0x56, 0x42, 0xe4, 0x3b, 0xa2, 0xf2, 0xf8, | 3649 | 0x48, 0x77, 0x4c, 0xe5, 0xf2, 0xfb, 0x94, 0xad, 0x15, 0x11, 0x53, 0x60, |
3628 | 0x9d, 0xca, 0xd6, 0x8a, 0x88, 0x25, 0xb0, 0x99, 0xf8, 0x87, 0x31, 0xae, | 3650 | 0x33, 0xce, 0x1d, 0x98, 0x57, 0xb5, 0xc1, 0xa6, 0xa8, 0x7b, 0xea, 0x5d, |
3629 | 0x6a, 0x83, 0x4d, 0x51, 0xf7, 0xd4, 0xbb, 0xf2, 0x91, 0x9e, 0xee, 0x37, | 3651 | 0xf9, 0x48, 0x5f, 0xf7, 0x37, 0x8a, 0xa1, 0x45, 0xf8, 0x5f, 0x62, 0xe9, |
3630 | 0x8a, 0x99, 0x45, 0xf8, 0x5f, 0xd6, 0x2f, 0x3a, 0xbc, 0x5a, 0xe3, 0x4b, | 3652 | 0x16, 0xbf, 0x3e, 0xf5, 0xcf, 0xfd, 0x9c, 0xe8, 0x71, 0x61, 0x9e, 0x32, |
3631 | 0x5e, 0x3e, 0xf4, 0x8c, 0x30, 0x4f, 0x99, 0x2b, 0x91, 0x97, 0x22, 0xfc, | 3653 | 0x55, 0x22, 0x2d, 0x45, 0xf8, 0xc3, 0x1b, 0xd9, 0x12, 0xe5, 0xe8, 0xf9, |
3632 | 0xe1, 0x46, 0xb6, 0x44, 0x39, 0xba, 0x3e, 0xe5, 0x10, 0xec, 0x42, 0x5f, | 3654 | 0x94, 0x63, 0xb0, 0x0b, 0x7d, 0xd9, 0xf4, 0x6d, 0x40, 0xe1, 0x67, 0xdc, |
3633 | 0x32, 0x3d, 0x1b, 0xe0, 0xdf, 0x28, 0xee, 0x31, 0x06, 0xe0, 0xbb, 0xde, | 3655 | 0x63, 0x0c, 0xc0, 0x77, 0xad, 0x09, 0xeb, 0x7d, 0x04, 0x32, 0xa2, 0x6e, |
3634 | 0x86, 0xf5, 0xbe, 0x17, 0x32, 0xa2, 0x6e, 0xa0, 0xbf, 0x25, 0xee, 0xbb, | 3656 | 0xa0, 0xbf, 0x65, 0xee, 0xd5, 0x41, 0x7f, 0xcb, 0x97, 0x7e, 0xe1, 0x76, |
3635 | 0x42, 0x7f, 0x4b, 0x57, 0xde, 0xb6, 0x7b, 0xe9, 0xf3, 0x46, 0xe4, 0x18, | 3657 | 0xd2, 0xe7, 0x0d, 0xc8, 0x29, 0xf8, 0xd1, 0x93, 0xf3, 0xa4, 0x27, 0xad, |
3636 | 0xfc, 0xe8, 0xd1, 0x45, 0xf2, 0x93, 0xf6, 0x70, 0xd9, 0x30, 0x64, 0x42, | 3658 | 0xd6, 0xce, 0x14, 0xe4, 0x7d, 0x42, 0xf9, 0xf8, 0x7e, 0x79, 0x73, 0xf1, |
3637 | 0x1f, 0x3f, 0x2c, 0x6f, 0xd4, 0x7e, 0xa0, 0x70, 0xe0, 0xb6, 0x9d, 0x0d, | 3659 | 0x5b, 0x0a, 0x0b, 0xee, 0xd9, 0xb7, 0x22, 0x13, 0xf0, 0x0f, 0x47, 0xaa, |
3638 | 0x99, 0x86, 0x7f, 0x98, 0x71, 0x20, 0x7f, 0x33, 0x82, 0xf5, 0x19, 0x56, | 3660 | 0x90, 0xb7, 0x19, 0xc3, 0xfa, 0xdc, 0xa5, 0xfc, 0xe3, 0x17, 0x3f, 0x78, |
3639 | 0xfe, 0x71, 0xe6, 0xfd, 0xe5, 0x24, 0x01, 0x37, 0x66, 0x7f, 0xf6, 0x3e, | 3661 | 0xae, 0x12, 0xd2, 0x13, 0x0f, 0x7c, 0xc8, 0x18, 0xbe, 0x55, 0xdc, 0xce, |
3640 | 0x63, 0xf6, 0x03, 0xc0, 0x61, 0xef, 0x8b, 0xbe, 0xe1, 0xd2, 0xff, 0x33, | 3662 | 0x0f, 0x3c, 0x8f, 0xa1, 0x27, 0xfe, 0x10, 0x3a, 0xfb, 0x4d, 0xcc, 0x15, |
3641 | 0xe8, 0xea, 0xd7, 0x55, 0xfd, 0x22, 0xb7, 0x73, 0x2b, 0x65, 0xfa, 0x5e, | 3663 | 0x06, 0x9d, 0x6a, 0x3f, 0xe4, 0x83, 0x3c, 0xa7, 0xeb, 0x89, 0x4f, 0x7e, |
3642 | 0xcf, 0xe9, 0xee, 0x73, 0x9f, 0xbb, 0x4f, 0xbe, 0x4c, 0xa9, 0x01, 0x2b, | 3664 | 0x48, 0xfa, 0x4c, 0x59, 0x04, 0x7e, 0xc8, 0xab, 0xb8, 0xca, 0xdc, 0xb1, |
3643 | 0xe4, 0x55, 0x1c, 0x65, 0xae, 0xd8, 0xe6, 0xe9, 0x6f, 0x10, 0x18, 0x9a, | 3665 | 0xc9, 0xd7, 0xe7, 0x0b, 0xc0, 0xd5, 0xc0, 0xd2, 0xc5, 0xc0, 0x17, 0xb7, |
3644 | 0x74, 0x7d, 0xdf, 0xdb, 0x21, 0xf9, 0x5e, 0x3f, 0xff, 0x84, 0xcf, 0x5e, | 3666 | 0x48, 0xbe, 0x33, 0xc8, 0x47, 0xe1, 0xc3, 0xd7, 0xdb, 0x83, 0x1c, 0x97, |
3645 | 0x6d, 0xf7, 0xf3, 0x59, 0x3e, 0xbf, 0x92, 0x41, 0xfe, 0x0c, 0x1b, 0x60, | 3667 | 0xcf, 0x67, 0x33, 0xc8, 0xa9, 0x61, 0x13, 0xb7, 0x61, 0x8d, 0xb2, 0x4d, |
3646 | 0x2c, 0x60, 0x5b, 0x5c, 0xf9, 0xa1, 0x77, 0xe7, 0x9b, 0xf5, 0x0b, 0xf2, | 3668 | 0xe5, 0xb0, 0x37, 0xa1, 0xdf, 0xa3, 0x3d, 0x57, 0x6c, 0xcc, 0x2d, 0x0e, |
3647 | 0xbd, 0x5b, 0xf1, 0x9d, 0x56, 0x7c, 0xb3, 0x06, 0xb9, 0x5f, 0x4b, 0x9d, | 3669 | 0xa8, 0xdc, 0x62, 0x68, 0x43, 0x6e, 0x11, 0xd4, 0xb4, 0x02, 0xba, 0x39, |
3648 | 0x67, 0x1d, 0xd2, 0xaf, 0x3b, 0x92, 0x1e, 0xb0, 0x01, 0xf4, 0xfd, 0x63, | 3670 | 0x2e, 0x70, 0x03, 0xec, 0xe0, 0xbb, 0x18, 0xff, 0x3b, 0xd0, 0xf7, 0xb7, |
3649 | 0xd0, 0xfd, 0x11, 0xf4, 0xfa, 0xc3, 0x12, 0xb0, 0x41, 0x09, 0xd8, 0xa0, | 3671 | 0x4b, 0xc0, 0x0d, 0x25, 0xe0, 0x86, 0x12, 0x70, 0x43, 0x09, 0xb8, 0xa1, |
3650 | 0x04, 0x6c, 0x50, 0x02, 0x36, 0x28, 0x85, 0xbd, 0x3a, 0x8b, 0x4d, 0x6c, | 3672 | 0x14, 0xf5, 0xeb, 0x5b, 0x2e, 0x71, 0xff, 0x07, 0xb4, 0xe9, 0xa0, 0xee, |
3651 | 0xff, 0x3e, 0x6d, 0xd7, 0xaf, 0x6d, 0xac, 0xb7, 0x4b, 0xb7, 0xb6, 0x99, | 3673 | 0xb1, 0xd9, 0x5e, 0xbd, 0x3a, 0x59, 0xaa, 0x16, 0xe0, 0xe7, 0x30, 0xeb, |
3652 | 0xaa, 0xfb, 0x18, 0x39, 0xc8, 0x5a, 0x2b, 0xb0, 0x9a, 0x5f, 0xf7, 0xf0, | 3674 | 0x76, 0xc0, 0x71, 0x41, 0x4d, 0xc4, 0x8f, 0x1d, 0x8b, 0xdc, 0x43, 0x41, |
3653 | 0x62, 0x44, 0x8d, 0xfb, 0x5e, 0x88, 0x11, 0x35, 0x1b, 0xeb, 0x66, 0x28, | 3675 | 0xec, 0x58, 0x74, 0xb1, 0x9e, 0xfa, 0xa2, 0x06, 0x70, 0xa3, 0x21, 0x51, |
3654 | 0x6c, 0x00, 0x1b, 0x1a, 0x12, 0xc6, 0x6f, 0x13, 0xbe, 0x17, 0xb4, 0x86, | 3676 | 0xfc, 0x36, 0xe1, 0x93, 0xb9, 0x67, 0xde, 0x8d, 0x15, 0xd6, 0xac, 0x6a, |
3655 | 0xfb, 0xb1, 0x92, 0xda, 0x55, 0x5d, 0xef, 0x88, 0xaa, 0x3b, 0x58, 0x32, | 3677 | 0x4f, 0x27, 0x54, 0x4d, 0xc2, 0x96, 0xc9, 0x72, 0x90, 0xdb, 0xc5, 0x65, |
3656 | 0x5b, 0xf6, 0x73, 0xb7, 0x98, 0x8c, 0xcd, 0x13, 0x6f, 0xca, 0x16, 0x3d, | 3678 | 0x68, 0x86, 0x58, 0x54, 0xb6, 0xeb, 0x09, 0xe8, 0xa2, 0x4a, 0xfc, 0xc8, |
3657 | 0x01, 0x1d, 0x38, 0xc4, 0x88, 0xdc, 0x27, 0xe4, 0xf8, 0xb1, 0xc1, 0x2a, | 3679 | 0x3d, 0x27, 0xce, 0x1f, 0xef, 0xad, 0x60, 0xce, 0x82, 0xed, 0xd1, 0x77, |
3658 | 0xc6, 0x2c, 0x58, 0x2e, 0x7f, 0x47, 0x9c, 0xbb, 0xcf, 0xec, 0x82, 0x7f, | 3680 | 0xa2, 0xaa, 0xce, 0x05, 0xf8, 0xcf, 0x05, 0x67, 0x01, 0xe2, 0xb2, 0x7f, |
3659 | 0xce, 0x14, 0x23, 0x32, 0x5e, 0x74, 0x31, 0x01, 0xf2, 0x9f, 0x75, 0xf5, | 3681 | 0x86, 0x7b, 0xef, 0x31, 0x19, 0x2d, 0x3a, 0xc8, 0x65, 0x55, 0x8e, 0x84, |
3660 | 0xe5, 0x5b, 0xd0, 0xc3, 0xad, 0xcc, 0x94, 0xb5, 0x6a, 0x1b, 0x91, 0xcb, | 3682 | 0x78, 0xe0, 0xc9, 0x7d, 0xc8, 0x97, 0x7b, 0x0e, 0xd8, 0x61, 0xdc, 0x0e, |
3661 | 0x71, 0xca, 0x98, 0xfa, 0xdf, 0xab, 0xf6, 0x29, 0x76, 0x55, 0xdd, 0xbd, | 3683 | 0xe4, 0x4e, 0x79, 0x8f, 0x68, 0xc3, 0x90, 0xf5, 0x7e, 0x5f, 0xd6, 0xe9, |
3662 | 0xa4, 0x71, 0x65, 0x0b, 0x01, 0xfa, 0x19, 0xd0, 0x89, 0xbb, 0x6b, 0x18, | 3684 | 0x25, 0x31, 0x91, 0xff, 0xc4, 0x8c, 0x7d, 0x63, 0xda, 0x68, 0x4d, 0x61, |
3663 | 0x76, 0x91, 0x73, 0x7c, 0xb9, 0xb4, 0xe2, 0x91, 0x2f, 0x6a, 0x62, 0x6d, | 3685 | 0x16, 0xfa, 0x23, 0x8c, 0xe5, 0x78, 0x6b, 0x1d, 0xf6, 0x92, 0xab, 0x6e, |
3664 | 0xd4, 0xfe, 0x1b, 0x2d, 0xed, 0xab, 0xf7, 0x3d, 0x7e, 0xe1, 0xfb, 0x56, | 3686 | 0xde, 0x8f, 0x6f, 0xc4, 0x2f, 0x9f, 0xd5, 0xc4, 0x0e, 0xe4, 0xd8, 0xd8, |
3665 | 0x6b, 0x0d, 0xf4, 0x53, 0x77, 0xdb, 0x81, 0xdd, 0x24, 0xa0, 0xee, 0xc3, | 3687 | 0x3e, 0xd1, 0xd0, 0xbe, 0x7e, 0xdf, 0xe7, 0x01, 0xbe, 0x72, 0xbd, 0x3e, |
3666 | 0x87, 0xd7, 0x42, 0x92, 0xaa, 0x59, 0x92, 0x2e, 0xb3, 0x1f, 0xeb, 0x17, | 3688 | 0x41, 0xbf, 0x76, 0xbd, 0x1d, 0x78, 0x4f, 0x42, 0xea, 0x3e, 0x7c, 0xfe, |
3667 | 0xf4, 0x47, 0x7f, 0x22, 0x29, 0xe4, 0xab, 0xd9, 0x50, 0x34, 0x6e, 0xcb, | 3689 | 0x62, 0x44, 0x52, 0x8b, 0xb6, 0xa4, 0xcb, 0xec, 0xc7, 0x9a, 0x07, 0xfd, |
3668 | 0x7f, 0x96, 0xe5, 0x85, 0x7c, 0x84, 0xe7, 0x0a, 0xf2, 0x13, 0x1a, 0x9e, | 3690 | 0xd7, 0x1f, 0x4b, 0x0a, 0x79, 0x6e, 0x36, 0x62, 0x39, 0xae, 0xfc, 0x47, |
3669 | 0xfb, 0x19, 0xae, 0xc9, 0xb3, 0x25, 0x33, 0x45, 0xc6, 0x9d, 0xa1, 0x70, | 3691 | 0x59, 0x9d, 0xcb, 0xc7, 0xb8, 0x77, 0x9d, 0x1f, 0xd5, 0xf0, 0xdc, 0x8f, |
3670 | 0x0d, 0xf7, 0xb2, 0x93, 0xac, 0xd9, 0x7c, 0x07, 0x36, 0x19, 0x8d, 0x94, | 3692 | 0x71, 0x4d, 0xda, 0x6d, 0xac, 0x0f, 0xc6, 0xa9, 0xbe, 0xe8, 0x22, 0xee, |
3671 | 0xa1, 0xef, 0x2b, 0x45, 0x8e, 0x07, 0x6c, 0x54, 0x64, 0x5d, 0xc7, 0xbf, | 3693 | 0x65, 0xc7, 0x58, 0xe7, 0x79, 0x2a, 0x2c, 0x6d, 0x56, 0xac, 0x0c, 0x3b, |
3672 | 0xff, 0x27, 0xc0, 0x81, 0xf0, 0xd5, 0x21, 0xaf, 0x8f, 0x9a, 0xab, 0x6d, | 3694 | 0xb8, 0x54, 0xe4, 0x7c, 0xc0, 0x52, 0x45, 0xd6, 0x82, 0x82, 0xfb, 0x7f, |
3673 | 0x06, 0x60, 0xe3, 0x0d, 0xcf, 0xdf, 0x56, 0x8a, 0x6e, 0x1d, 0xe5, 0x2c, | 3695 | 0x0c, 0xec, 0xa8, 0x13, 0x3b, 0x79, 0x7d, 0x94, 0xbe, 0x5c, 0x33, 0x84, |
3674 | 0xf9, 0x70, 0xfe, 0x77, 0xb3, 0x11, 0x42, 0x0e, 0xb4, 0x3a, 0xc7, 0xab, | 3696 | 0x35, 0xb0, 0xe2, 0xfb, 0xe7, 0x85, 0xa2, 0x57, 0x7b, 0x39, 0x47, 0x3a, |
3675 | 0xa4, 0x6f, 0xc2, 0xdd, 0xca, 0x51, 0xc7, 0x97, 0x05, 0xef, 0xb3, 0x8d, | 3697 | 0xaa, 0x7f, 0x53, 0x5f, 0x89, 0x20, 0x67, 0x5a, 0xe7, 0xf1, 0x1c, 0xc7, |
3676 | 0x67, 0x27, 0x9a, 0xcd, 0xb3, 0xd6, 0x07, 0xad, 0x99, 0xf5, 0x6d, 0x4f, | 3698 | 0x37, 0xe1, 0x9e, 0xe5, 0x64, 0x35, 0x90, 0x05, 0xef, 0xb3, 0x8d, 0xfb, |
3677 | 0x5a, 0xf9, 0xdd, 0x15, 0x27, 0xef, 0xd5, 0xcc, 0xbe, 0xbd, 0xc3, 0xad, | 3699 | 0xf3, 0xf5, 0xfa, 0x39, 0xfb, 0xc3, 0xd6, 0xd9, 0x9e, 0xbb, 0x27, 0x69, |
3678 | 0x99, 0xd5, 0x76, 0xac, 0xad, 0x99, 0x59, 0xdb, 0xdd, 0x9a, 0xd9, 0xfc, | 3700 | 0xcb, 0x81, 0x85, 0xaa, 0x1c, 0xf0, 0xea, 0x6c, 0xd1, 0xbd, 0x5e, 0x9d, |
3679 | 0xee, 0x02, 0x3e, 0x6e, 0xcd, 0x2c, 0xbb, 0xdd, 0xad, 0x99, 0x95, 0xb7, | 3701 | 0x2d, 0xb6, 0x77, 0x63, 0x9d, 0xad, 0x7c, 0x8f, 0x57, 0x67, 0x33, 0x0f, |
3680 | 0xbb, 0x35, 0x33, 0x67, 0x87, 0x5b, 0x33, 0xfb, 0xf9, 0xf6, 0xb5, 0x35, | 3702 | 0xc0, 0x07, 0x1f, 0xf0, 0xea, 0x6c, 0xff, 0xf5, 0x1e, 0xaf, 0xce, 0xd6, |
3681 | 0xb3, 0x1f, 0xec, 0x58, 0x5b, 0x33, 0xbb, 0xb8, 0x3b, 0x87, 0xcf, 0xdd, | 3703 | 0x75, 0xaf, 0x57, 0x67, 0xeb, 0xdd, 0xeb, 0xd5, 0xd9, 0x46, 0xef, 0xdd, |
3682 | 0x9a, 0xd9, 0xcf, 0x76, 0xdc, 0xbb, 0x66, 0xf6, 0x9a, 0x8f, 0xd7, 0x31, | 3704 | 0x58, 0x67, 0x73, 0xf6, 0x6e, 0xac, 0xb3, 0x39, 0x07, 0x72, 0xf8, 0x5c, |
3683 | 0x9f, 0x11, 0xcc, 0x21, 0x0e, 0xbc, 0x3e, 0x0c, 0xbc, 0xfe, 0x6e, 0x75, | 3705 | 0xaf, 0xb3, 0x65, 0xf6, 0xde, 0xbc, 0xce, 0xf6, 0x4a, 0x80, 0xf1, 0xc1, |
3684 | 0xfe, 0x00, 0xe6, 0x39, 0xe8, 0xc5, 0x83, 0x0f, 0x82, 0xdb, 0x47, 0xbc, | 3706 | 0xcf, 0x00, 0x78, 0x70, 0x80, 0xf1, 0xfb, 0x81, 0xf1, 0x6f, 0x56, 0xe3, |
3685 | 0x67, 0x6d, 0xe4, 0xbb, 0x11, 0x2f, 0x57, 0x21, 0x76, 0xdf, 0xec, 0xe5, | 3707 | 0x55, 0xe7, 0x37, 0xc0, 0xa7, 0xe6, 0xc7, 0x8f, 0x0f, 0x83, 0xf5, 0xb7, |
3686 | 0x6c, 0xff, 0xa8, 0xf3, 0xee, 0xb9, 0x97, 0xd6, 0xef, 0x0f, 0x21, 0xf5, | 3708 | 0xfa, 0xcf, 0xba, 0xc8, 0x8f, 0x63, 0x7e, 0x6e, 0x43, 0xbc, 0xbf, 0xcd, |
3687 | 0xf6, 0xf1, 0x3c, 0xe7, 0x95, 0x47, 0xee, 0x47, 0x39, 0xd8, 0xe8, 0x3f, | 3709 | 0xcf, 0xf1, 0xba, 0x5a, 0xaf, 0x9f, 0xad, 0x68, 0xfc, 0xbe, 0x0d, 0xa9, |
3688 | 0xbf, 0xfb, 0x1b, 0x16, 0x31, 0xfe, 0x73, 0x58, 0xab, 0xf6, 0x16, 0x43, | 3710 | 0x7a, 0x50, 0x03, 0x20, 0x5f, 0x72, 0xe0, 0x61, 0x25, 0x87, 0x3b, 0xd1, |
3689 | 0x9d, 0x01, 0x60, 0x8c, 0x3a, 0x2e, 0x29, 0xf4, 0x4f, 0xa9, 0xfe, 0xd7, | 3711 | 0xdf, 0x3c, 0xf0, 0x25, 0x9b, 0x75, 0x81, 0x27, 0xb1, 0x86, 0xdd, 0xed, |
3690 | 0x5a, 0xfa, 0xaf, 0xa0, 0x3f, 0xe9, 0x46, 0xff, 0x1d, 0x3e, 0x2f, 0x29, | 3712 | 0x86, 0xda, 0x67, 0x66, 0x4c, 0x3b, 0x2d, 0x29, 0xf4, 0x4f, 0xa9, 0xfe, |
3691 | 0xfb, 0xb6, 0x5c, 0x0c, 0x9f, 0x2e, 0xf9, 0x78, 0x2b, 0xe0, 0x61, 0xe7, | 3713 | 0xa3, 0x0d, 0xfd, 0xb3, 0xe8, 0xcf, 0x71, 0xad, 0x7f, 0x8b, 0xcf, 0x73, |
3692 | 0x46, 0xc6, 0x76, 0x3e, 0x8f, 0x67, 0xa2, 0x17, 0x6d, 0xb9, 0xa9, 0xf0, | 3714 | 0xca, 0xbe, 0x6d, 0x0f, 0xf7, 0xa7, 0x4b, 0x01, 0x4e, 0x0b, 0xf9, 0x18, |
3693 | 0xbb, 0x91, 0x88, 0x5e, 0xcc, 0xaa, 0x7c, 0xad, 0x91, 0xc9, 0x39, 0x7e, | 3715 | 0xdc, 0xcd, 0xb8, 0xd5, 0x7b, 0xf1, 0x8c, 0xf5, 0xa2, 0x2b, 0x57, 0x15, |
3694 | 0xfe, 0x8d, 0x1c, 0x6a, 0x80, 0x39, 0x0c, 0xec, 0x7d, 0x69, 0x10, 0x71, | 3716 | 0xde, 0x37, 0x12, 0xd6, 0x8b, 0x59, 0x95, 0xdf, 0xb9, 0x99, 0x5c, 0x75, |
3695 | 0xac, 0x35, 0xc7, 0x66, 0x5e, 0xad, 0x7b, 0x79, 0xb5, 0x29, 0x9f, 0xd9, | 3717 | 0x3d, 0x5f, 0x07, 0x0e, 0x63, 0xce, 0x03, 0x7b, 0x5f, 0xee, 0x45, 0xdc, |
3696 | 0xd9, 0x8a, 0xcd, 0x2f, 0xee, 0xfe, 0xc7, 0x0a, 0x9b, 0x6f, 0x42, 0x6e, | 3718 | 0x6b, 0xcc, 0xc9, 0x99, 0x87, 0xeb, 0x7e, 0x1e, 0x6e, 0xca, 0xfd, 0xfb, |
3697 | 0x4e, 0xec, 0x4d, 0x1c, 0x43, 0x0c, 0x41, 0x7c, 0xce, 0x7a, 0x01, 0xf3, | 3719 | 0x1a, 0x31, 0xbe, 0x73, 0xe0, 0xef, 0x2b, 0x8c, 0xbf, 0x05, 0xb9, 0x3c, |
3698 | 0x19, 0xc6, 0x46, 0xe6, 0x37, 0x21, 0x7c, 0x78, 0x26, 0xc9, 0xc7, 0xe8, | 3720 | 0x31, 0x3c, 0x71, 0x0f, 0x31, 0x07, 0x71, 0x3e, 0xeb, 0x0b, 0xcc, 0x7f, |
3699 | 0xed, 0x9e, 0x7f, 0x67, 0x5e, 0xe4, 0x63, 0x95, 0xe4, 0x26, 0x37, 0x37, | 3721 | 0x18, 0x4b, 0x99, 0x0f, 0x45, 0xf0, 0xe1, 0xb9, 0x97, 0x00, 0xeb, 0x37, |
3700 | 0xda, 0xa4, 0xb9, 0xf9, 0x67, 0xc4, 0xeb, 0x13, 0x58, 0xc5, 0xc2, 0x81, | 3722 | 0xfb, 0xfe, 0x9f, 0x79, 0x54, 0x80, 0x6d, 0xac, 0x2d, 0x5e, 0x2e, 0xb5, |
3701 | 0x55, 0x2c, 0xbc, 0x66, 0x1f, 0x4b, 0xd4, 0xf9, 0x27, 0xb5, 0x1f, 0xc6, | 3723 | 0x45, 0xf3, 0xf2, 0xd5, 0x98, 0xdf, 0x27, 0xb4, 0x8e, 0xa5, 0x43, 0xeb, |
3702 | 0xfd, 0xb1, 0x46, 0xe6, 0xca, 0x80, 0x68, 0x7a, 0x82, 0xfb, 0x64, 0xc0, | 3724 | 0x58, 0x7a, 0xc3, 0x5e, 0x89, 0xa8, 0x33, 0x36, 0x6a, 0xcf, 0x85, 0x7b, |
3703 | 0x3a, 0x16, 0xf7, 0xcd, 0xe8, 0x3b, 0xf7, 0x69, 0xa9, 0x2a, 0xe3, 0x0f, | 3725 | 0x30, 0x6e, 0xe6, 0x52, 0x0f, 0xf1, 0x30, 0xf7, 0x62, 0x80, 0x8d, 0xec, |
3704 | 0xf1, 0x91, 0xbf, 0x17, 0xee, 0xeb, 0x89, 0xb2, 0x63, 0xdb, 0x1f, 0x6b, | 3726 | 0xc6, 0x58, 0xc5, 0x38, 0x45, 0x3c, 0x15, 0xec, 0xb7, 0x06, 0x7a, 0xa2, |
3705 | 0xc8, 0x79, 0xe3, 0xed, 0xd6, 0x53, 0xe0, 0x25, 0x83, 0x6f, 0x5f, 0xa6, | 3727 | 0xec, 0xd8, 0xf6, 0x47, 0x1a, 0x72, 0x64, 0xa7, 0xd9, 0xde, 0x0f, 0x5a, |
3706 | 0x9f, 0x55, 0xb1, 0xaf, 0x03, 0xb6, 0x7b, 0xa4, 0x44, 0xec, 0xba, 0x59, | 3728 | 0x32, 0xf8, 0x0e, 0x64, 0xfa, 0x80, 0x8a, 0x91, 0x2d, 0xb0, 0xdd, 0x13, |
3707 | 0x6a, 0x1e, 0x7e, 0x3d, 0x37, 0xef, 0x62, 0xd7, 0xc0, 0x5a, 0xec, 0x1a, | 3729 | 0x25, 0x62, 0xde, 0x6d, 0xb2, 0xe8, 0xe3, 0xde, 0xf3, 0x33, 0x1e, 0xe6, |
3708 | 0x5f, 0x16, 0x97, 0xc7, 0x5d, 0x1b, 0xf2, 0x48, 0xbc, 0x4a, 0xfe, 0x18, | 3730 | 0x0d, 0x6d, 0xc4, 0xbc, 0xce, 0xaa, 0x78, 0x34, 0xee, 0xbf, 0x21, 0x8d, |
3709 | 0x77, 0xf6, 0xc2, 0xff, 0x35, 0x80, 0x69, 0x19, 0x73, 0x18, 0x6f, 0x22, | 3731 | 0xc4, 0xb7, 0xa4, 0x8f, 0x31, 0x89, 0xfe, 0xd1, 0xcd, 0x5c, 0xee, 0x61, |
3710 | 0xc0, 0xf6, 0xf7, 0xe2, 0x4f, 0xb5, 0x1d, 0xea, 0xb0, 0x82, 0xf8, 0x4c, | 3732 | 0x3c, 0x62, 0x2c, 0x8a, 0xc9, 0xea, 0x4d, 0xe9, 0x53, 0x6d, 0xc7, 0x5a, |
3711 | 0xc3, 0x7f, 0x4c, 0xe0, 0x99, 0x8c, 0xcc, 0x9e, 0xfe, 0x1a, 0xe6, 0x36, | 3733 | 0xec, 0x30, 0x3e, 0x13, 0xf0, 0x1f, 0xa3, 0x78, 0x26, 0x23, 0x93, 0xb3, |
3712 | 0x2d, 0x57, 0xe6, 0x27, 0xc1, 0xdf, 0x73, 0x32, 0x17, 0xcf, 0xc3, 0x8f, | 3734 | 0x5f, 0x00, 0x6f, 0x13, 0x72, 0x69, 0x66, 0x0c, 0xf4, 0x3d, 0x29, 0x53, |
3713 | 0x70, 0xcf, 0x83, 0xb8, 0xad, 0xdf, 0xfb, 0x9e, 0xd6, 0xcf, 0x5a, 0x51, | 3735 | 0x4e, 0x1e, 0x7e, 0x84, 0x7b, 0x21, 0xc4, 0x79, 0xdd, 0xfe, 0xf7, 0x84, |
3714 | 0xe2, 0x46, 0xa9, 0x16, 0xe9, 0x83, 0xb9, 0x67, 0xc8, 0xbd, 0x61, 0xda, | 3736 | 0x7e, 0xce, 0xb6, 0x88, 0x33, 0xa5, 0x52, 0xa4, 0x0f, 0xe6, 0xbe, 0x14, |
3715 | 0x0f, 0xeb, 0x27, 0xc8, 0x5d, 0x99, 0xc3, 0x9e, 0xe2, 0xf8, 0x6b, 0x75, | 3737 | 0xf7, 0x1f, 0x69, 0x3f, 0xac, 0xc3, 0x20, 0xd7, 0x65, 0xce, 0x3b, 0xcd, |
3716 | 0xb2, 0xec, 0x10, 0x7f, 0x35, 0x32, 0x8d, 0x25, 0xe2, 0xc7, 0xf7, 0x8b, | 3738 | 0xf9, 0x37, 0xea, 0x64, 0xb5, 0x4a, 0xbc, 0xe6, 0x66, 0x56, 0x96, 0x89, |
3717 | 0x25, 0xa9, 0x07, 0xe2, 0xc9, 0xfb, 0xc1, 0x91, 0xd1, 0x79, 0x60, 0xc8, | 3739 | 0x37, 0x3f, 0x28, 0xf6, 0xa4, 0x1e, 0x88, 0x3f, 0x6f, 0x05, 0x77, 0x5a, |
3718 | 0x57, 0x1a, 0x7a, 0x2b, 0x8e, 0x74, 0x31, 0x64, 0x72, 0x29, 0x0b, 0x9a, | 3740 | 0x33, 0xc0, 0x9c, 0x2f, 0xac, 0xe8, 0x8d, 0xb8, 0xd3, 0xc3, 0x9c, 0xc9, |
3719 | 0x71, 0x85, 0x95, 0x91, 0xc7, 0xc1, 0xed, 0xf5, 0xe3, 0xd9, 0x7e, 0xe4, | 3741 | 0xe5, 0x2c, 0xc6, 0x74, 0x14, 0xb6, 0x46, 0xde, 0x07, 0xb7, 0xd7, 0x8d, |
3720 | 0xe4, 0x2e, 0x66, 0x4c, 0x01, 0x33, 0xfe, 0x06, 0x30, 0xe3, 0xac, 0x74, | 3742 | 0x67, 0xbb, 0x91, 0xc3, 0x7b, 0x18, 0x33, 0x05, 0x8c, 0xf9, 0x0f, 0x81, |
3721 | 0x76, 0x11, 0x33, 0xda, 0x1e, 0x66, 0x4c, 0xc3, 0x9e, 0x73, 0x6b, 0xec, | 3743 | 0x31, 0x27, 0xe5, 0xad, 0x56, 0x62, 0x4c, 0xd7, 0xc7, 0x98, 0x69, 0xd8, |
3722 | 0x59, 0x53, 0xb5, 0x28, 0xde, 0xcb, 0x01, 0xf3, 0xa5, 0x4e, 0x45, 0xef, | 3744 | 0x73, 0x6e, 0x83, 0x3d, 0x6b, 0xaa, 0x76, 0xc5, 0x7b, 0x39, 0x60, 0xc4, |
3723 | 0x03, 0x27, 0x6a, 0x12, 0x52, 0xe7, 0x52, 0x02, 0x2d, 0x34, 0x7d, 0x3c, | 3745 | 0xd4, 0xb4, 0x75, 0x0b, 0xb8, 0x52, 0x93, 0x88, 0x3a, 0xfb, 0x10, 0x6a, |
3724 | 0xb8, 0x4d, 0xe1, 0xbc, 0xdd, 0xa5, 0x4d, 0xc8, 0x51, 0x14, 0xee, 0xf3, | 3746 | 0x18, 0x33, 0xc0, 0x8f, 0x7b, 0x14, 0x2e, 0x3c, 0x50, 0xda, 0x82, 0x1c, |
3725 | 0xf6, 0x4b, 0x03, 0xeb, 0xf6, 0x90, 0x03, 0x2d, 0x7b, 0xc8, 0x77, 0xf1, | 3747 | 0x46, 0xe1, 0x44, 0x7f, 0x4f, 0x2e, 0xb4, 0x69, 0x9f, 0x32, 0xd4, 0xb0, |
3726 | 0x21, 0x9e, 0xf3, 0x6a, 0x7d, 0x6d, 0xf0, 0x05, 0xff, 0x13, 0x3c, 0x71, | 3748 | 0x4f, 0x79, 0x1d, 0x4f, 0xe2, 0x39, 0xbf, 0x3e, 0xd8, 0x04, 0x5f, 0xf0, |
3727 | 0x7d, 0x71, 0x2d, 0x68, 0xee, 0x7a, 0x59, 0x83, 0x13, 0xff, 0x7a, 0x1d, | 3749 | 0x7f, 0x40, 0x13, 0xd7, 0x17, 0xd7, 0x82, 0xe6, 0xad, 0x97, 0xd1, 0x46, |
3728 | 0x4e, 0x44, 0xec, 0x3a, 0x17, 0x92, 0x24, 0x30, 0xa2, 0xbd, 0x44, 0x5a, | 3750 | 0x5c, 0xf9, 0xbf, 0x36, 0xe1, 0x4a, 0xc4, 0xae, 0xf3, 0x11, 0x49, 0x02, |
3729 | 0x5c, 0xd3, 0xc3, 0xd2, 0x8e, 0xf9, 0x75, 0x9c, 0xea, 0x05, 0x36, 0xea, | 3751 | 0x53, 0xba, 0xcb, 0x1c, 0x8b, 0x6b, 0xba, 0x5f, 0x9a, 0xc1, 0x5f, 0xcb, |
3730 | 0x92, 0x20, 0x30, 0x52, 0x9b, 0xc2, 0x48, 0x03, 0xc4, 0x32, 0x83, 0x33, | 3752 | 0x74, 0x27, 0xb0, 0x54, 0x9b, 0x84, 0x81, 0xa9, 0x9a, 0x14, 0xa6, 0xea, |
3731 | 0xc0, 0x36, 0xb5, 0x55, 0x9c, 0x14, 0x8d, 0xff, 0x01, 0xf4, 0xf2, 0x94, | 3753 | 0x21, 0xf6, 0xe9, 0x3d, 0x02, 0x2c, 0xb4, 0xb8, 0x8e, 0xab, 0x2c, 0xe7, |
3732 | 0xf2, 0x3d, 0x69, 0x39, 0x01, 0x5f, 0xda, 0xbe, 0x04, 0x7c, 0x77, 0xce, | 3754 | 0x87, 0xd0, 0xcb, 0xa3, 0xca, 0xf7, 0xa4, 0xe5, 0x29, 0xf8, 0xd2, 0xe6, |
3733 | 0xc5, 0x4f, 0x6d, 0xeb, 0xf0, 0xd3, 0xc1, 0x0d, 0xf1, 0x93, 0xaa, 0xdf, | 3755 | 0x65, 0xe0, 0xc1, 0xf3, 0x1e, 0xde, 0x6a, 0xda, 0x84, 0xb7, 0x8e, 0xde, |
3734 | 0x8f, 0x52, 0x26, 0x37, 0x1c, 0xb7, 0x7e, 0x7f, 0xdd, 0x71, 0xeb, 0xf7, | 3756 | 0x10, 0x6f, 0xa9, 0x9a, 0xff, 0x20, 0x65, 0xf2, 0x7a, 0xd5, 0xab, 0xf9, |
3735 | 0x37, 0x9c, 0xd6, 0xfa, 0xfd, 0x47, 0xa4, 0x60, 0x46, 0xed, 0x15, 0x59, | 3757 | 0x5f, 0xa9, 0x7a, 0x35, 0xff, 0xd7, 0xab, 0x8d, 0x35, 0xff, 0x8f, 0x48, |
3736 | 0x57, 0xbf, 0x9f, 0x60, 0x3d, 0xdc, 0xe9, 0x72, 0xeb, 0xf4, 0x5d, 0x5e, | 3758 | 0xc1, 0xb4, 0xdc, 0x35, 0xd9, 0x54, 0xf3, 0x1f, 0x65, 0x0d, 0xfd, 0xf7, |
3737 | 0xfd, 0x3e, 0x2a, 0x85, 0x35, 0xed, 0xa6, 0xbc, 0x69, 0xf9, 0xf5, 0xfb, | 3759 | 0xda, 0xbc, 0xda, 0x7e, 0x9b, 0x5f, 0xf3, 0xb7, 0xa4, 0xb0, 0xa1, 0xdd, |
3738 | 0xef, 0xa2, 0xad, 0x1b, 0x63, 0xac, 0xad, 0xdd, 0x5f, 0x77, 0x58, 0xbb, | 3760 | 0x94, 0xb7, 0xec, 0xa0, 0xe6, 0xff, 0x34, 0xda, 0xda, 0x31, 0xc7, 0xc6, |
3739 | 0x0f, 0xb1, 0x9f, 0x57, 0xbb, 0x67, 0x3f, 0xe4, 0xf2, 0x0e, 0xeb, 0xf6, | 3761 | 0x7a, 0xff, 0x95, 0x2a, 0xeb, 0xfd, 0x11, 0xf6, 0xf3, 0xeb, 0xfd, 0xec, |
3740 | 0x8f, 0x40, 0x16, 0x5b, 0x21, 0x87, 0x5e, 0x69, 0x3f, 0x13, 0x66, 0x1f, | 3762 | 0x87, 0xdc, 0xbf, 0xca, 0x5a, 0xff, 0x6e, 0xc8, 0x62, 0x27, 0xe4, 0xd0, |
3741 | 0x55, 0xaf, 0x5f, 0x71, 0x42, 0x78, 0xce, 0xad, 0xab, 0xcf, 0xc0, 0xae, | 3763 | 0x29, 0xcd, 0x67, 0xa3, 0xec, 0xa3, 0x6a, 0xfc, 0x6b, 0xc8, 0x37, 0xae, |
3742 | 0x0e, 0xae, 0xd6, 0xeb, 0xdd, 0x31, 0x6e, 0x3a, 0x6b, 0xe9, 0xaf, 0xa5, | 3764 | 0x54, 0xbd, 0x5a, 0xfc, 0x11, 0xd8, 0xd5, 0xd1, 0xf5, 0x1a, 0xbf, 0x37, |
3743 | 0xd3, 0xe7, 0xd1, 0x09, 0x81, 0x4e, 0x78, 0x1d, 0x9d, 0xbb, 0xf5, 0xf9, | 3765 | 0xc7, 0xd5, 0xea, 0xc6, 0xf1, 0x37, 0x8e, 0xd3, 0xe5, 0x8f, 0x13, 0xc1, |
3744 | 0x9b, 0x8e, 0x5b, 0x9b, 0x4f, 0x9f, 0x16, 0xbb, 0x1d, 0xbe, 0xf9, 0xe2, | 3766 | 0x38, 0xd1, 0x4d, 0xe3, 0x5c, 0xaf, 0xe9, 0x5f, 0xad, 0x7a, 0xf5, 0xfc, |
3745 | 0xc0, 0xc3, 0x1e, 0x8d, 0xd5, 0xda, 0x3c, 0x7d, 0x08, 0x70, 0x7b, 0x4c, | 3767 | 0xf4, 0xac, 0xb8, 0xcd, 0xf0, 0xcd, 0x2f, 0xf6, 0xec, 0xf2, 0xc7, 0x58, |
3746 | 0x9d, 0xbd, 0x9a, 0xf9, 0x7f, 0x50, 0x9b, 0x67, 0x5d, 0xde, 0xdd, 0x5f, | 3768 | 0xaf, 0xe7, 0xd3, 0x87, 0x00, 0xe7, 0xc7, 0xd5, 0xf9, 0x9e, 0x23, 0xff, |
3747 | 0xe1, 0xfa, 0x04, 0x3e, 0x7f, 0xd1, 0xad, 0xc9, 0x8f, 0x95, 0xfc, 0x5a, | 3769 | 0x1f, 0xea, 0xf9, 0xac, 0xe5, 0x7b, 0x7b, 0x32, 0x5c, 0x9f, 0xc0, 0xf3, |
3748 | 0x3b, 0xf3, 0x47, 0xff, 0x5c, 0x54, 0x7f, 0xe4, 0x88, 0xd0, 0x56, 0xc8, | 3770 | 0xcf, 0x7a, 0x75, 0xfc, 0xa1, 0x52, 0x50, 0x9f, 0x67, 0x5e, 0x19, 0x9c, |
3749 | 0x1f, 0xe9, 0x76, 0xcb, 0x94, 0xc2, 0x47, 0xb0, 0xa9, 0xd8, 0xbd, 0x31, | 3771 | 0xbd, 0xe9, 0x8e, 0x9d, 0x10, 0xda, 0x0a, 0xe9, 0xe3, 0xb8, 0xed, 0x32, |
3750 | 0x72, 0xe5, 0x94, 0x8f, 0x91, 0x43, 0x0a, 0x23, 0x57, 0x96, 0x7c, 0x8c, | 3772 | 0xae, 0xf0, 0x14, 0x6c, 0x2a, 0x7e, 0x73, 0x4c, 0xbd, 0x30, 0x1d, 0x60, |
3751 | 0x9c, 0xbc, 0x07, 0x46, 0x6e, 0x76, 0xb9, 0x71, 0x20, 0x28, 0x79, 0x85, | 3773 | 0xea, 0x88, 0xc2, 0xd4, 0x0b, 0xcb, 0x01, 0xa6, 0x4e, 0xde, 0x04, 0x53, |
3752 | 0x91, 0xef, 0x75, 0x96, 0x8c, 0xf7, 0xba, 0x88, 0x07, 0xc4, 0x3d, 0x5f, | 3774 | 0xff, 0xf7, 0x36, 0x2f, 0x0e, 0x84, 0x25, 0xaf, 0x30, 0xf5, 0xcd, 0xce, |
3753 | 0xd0, 0x7b, 0x8f, 0xb5, 0xe6, 0xe3, 0x66, 0xc6, 0xfe, 0xad, 0x32, 0x71, | 3775 | 0x2b, 0xf1, 0x5e, 0x1b, 0xf1, 0x82, 0x78, 0x7b, 0xd8, 0x9d, 0x37, 0x59, |
3754 | 0xe6, 0x2e, 0x6e, 0x76, 0xb1, 0x71, 0x34, 0x72, 0x48, 0xc5, 0x44, 0xe0, | 3776 | 0x6b, 0x01, 0xce, 0x66, 0xec, 0xdf, 0x29, 0xa3, 0x67, 0xaf, 0xe3, 0x6c, |
3755 | 0x84, 0x3a, 0xeb, 0xdf, 0xc4, 0xbe, 0x8c, 0x39, 0x01, 0x85, 0xcf, 0x72, | 3777 | 0x0f, 0x4b, 0x5b, 0xb1, 0x63, 0x2a, 0x26, 0x02, 0xd7, 0xd5, 0x58, 0x2f, |
3756 | 0x45, 0xe6, 0x01, 0x6c, 0x23, 0x16, 0xee, 0xe4, 0x31, 0x2b, 0x2f, 0x26, | 3778 | 0x27, 0x56, 0x66, 0xcc, 0x09, 0x29, 0x3c, 0x97, 0x2b, 0x32, 0x0f, 0x60, |
3757 | 0xf9, 0x58, 0xd3, 0x3f, 0xd7, 0xc2, 0x3d, 0x86, 0x37, 0x8d, 0xa4, 0x85, | 3779 | 0x1b, 0xb1, 0x73, 0x2b, 0x8f, 0xf2, 0xf8, 0x31, 0x29, 0xc0, 0xa6, 0xc1, |
3758 | 0x76, 0xc7, 0xcf, 0x15, 0xe2, 0xea, 0x3c, 0x50, 0x12, 0x58, 0x72, 0x6a, | 3780 | 0xd9, 0x09, 0xee, 0x4b, 0xbc, 0x65, 0x24, 0x6d, 0xb4, 0x57, 0x83, 0x5c, |
3759 | 0x15, 0x4b, 0xd2, 0x57, 0xfc, 0xf4, 0x6d, 0xdb, 0xa4, 0x5f, 0xf3, 0xb1, | 3781 | 0xc1, 0x51, 0x67, 0x4e, 0x92, 0xc0, 0x3f, 0xe3, 0xeb, 0xd8, 0x93, 0xbe, |
3760 | 0x22, 0x72, 0xa2, 0x12, 0xd7, 0xb6, 0x8f, 0x15, 0x5d, 0x9c, 0x98, 0x72, | 3782 | 0xe2, 0x47, 0xbf, 0x70, 0x4d, 0xfa, 0xb5, 0x00, 0x5b, 0x22, 0x27, 0x2a, |
3761 | 0x1a, 0xc0, 0xcb, 0x01, 0x19, 0x03, 0x4e, 0x6f, 0x7c, 0x89, 0x35, 0x28, | 3783 | 0x71, 0x6d, 0x07, 0xd8, 0xd2, 0xc3, 0x95, 0xa9, 0xea, 0x0a, 0xf0, 0x75, |
3762 | 0x1f, 0x1b, 0xd9, 0xf8, 0x6e, 0xad, 0x49, 0xf1, 0xba, 0x5d, 0xed, 0x05, | 3784 | 0x48, 0x86, 0x80, 0xeb, 0x57, 0x1e, 0x66, 0xcd, 0x2a, 0xc0, 0x4e, 0x2e, |
3763 | 0x5e, 0x1e, 0x08, 0xb6, 0xb4, 0x3f, 0x0b, 0xff, 0x8d, 0xfc, 0x08, 0xd8, | 3785 | 0xbe, 0x1b, 0x6b, 0x58, 0xbc, 0x6e, 0x56, 0x7b, 0x87, 0x17, 0x7b, 0xc2, |
3764 | 0xc4, 0xc5, 0x44, 0x3b, 0xa0, 0x83, 0x91, 0x7b, 0x60, 0xa2, 0xf5, 0x31, | 3786 | 0x0d, 0xed, 0xbf, 0x05, 0xff, 0x8d, 0xfc, 0x08, 0x98, 0xc5, 0xc3, 0x4c, |
3765 | 0x8a, 0x31, 0xf3, 0x6e, 0x8c, 0x4a, 0xd7, 0xe9, 0xcf, 0xef, 0xc6, 0xa8, | 3787 | 0x7b, 0xa1, 0x83, 0x01, 0x85, 0x99, 0xa6, 0xde, 0x83, 0x99, 0x36, 0xc7, |
3766 | 0x7b, 0xc7, 0x50, 0xb6, 0x61, 0x76, 0x56, 0x06, 0x9f, 0x69, 0x29, 0xac, | 3788 | 0x28, 0xc6, 0xcc, 0xeb, 0x31, 0x2a, 0x5d, 0xa3, 0x3f, 0xbf, 0x1e, 0xa3, |
3767 | 0x8b, 0x51, 0x73, 0x1f, 0x20, 0x46, 0xb9, 0xf8, 0xc0, 0xe5, 0xfb, 0xf7, | 3789 | 0x6e, 0x1e, 0x43, 0xd9, 0x06, 0xee, 0xec, 0x0c, 0x3e, 0x13, 0x52, 0xd8, |
3768 | 0x21, 0x9b, 0x1f, 0x43, 0xa6, 0x3f, 0x02, 0xe6, 0xfa, 0x21, 0xe6, 0xf5, | 3790 | 0x14, 0xa3, 0xa6, 0x3e, 0x44, 0x8c, 0x1a, 0x56, 0x31, 0xca, 0xa3, 0xfb, |
3769 | 0x03, 0xe0, 0xa1, 0xef, 0x97, 0xd6, 0x9f, 0x07, 0x19, 0x15, 0xe6, 0x87, | 3791 | 0xfb, 0x90, 0xcd, 0x77, 0x21, 0xd3, 0xef, 0x00, 0x8b, 0x7d, 0x1b, 0x7c, |
3770 | 0x2e, 0x66, 0x72, 0x31, 0xfd, 0x0c, 0x56, 0x57, 0xad, 0xd8, 0xc8, 0x4c, | 3792 | 0x7d, 0x0b, 0x38, 0xe9, 0x9b, 0xa5, 0xcd, 0x67, 0x0e, 0x06, 0x85, 0xf9, |
3771 | 0x15, 0x87, 0xcc, 0x69, 0x77, 0x1f, 0x35, 0x92, 0x95, 0xa7, 0x3b, 0x53, | 3793 | 0xa1, 0x87, 0xa5, 0xbc, 0x1a, 0xc0, 0x11, 0xac, 0xae, 0xc5, 0xa2, 0x9b, |
3772 | 0x8b, 0x8c, 0x19, 0xea, 0x3a, 0xcc, 0xfa, 0x25, 0xb1, 0x43, 0x55, 0xe5, | 3794 | 0x19, 0x2f, 0xf6, 0x99, 0x13, 0xde, 0xde, 0x6b, 0x2c, 0x2b, 0x8f, 0xb5, |
3773 | 0x99, 0x03, 0x52, 0xae, 0xb9, 0x78, 0x6b, 0x6e, 0xd1, 0xa5, 0x31, 0xe5, | 3795 | 0xa6, 0xe6, 0x19, 0x33, 0xd4, 0x75, 0x94, 0xf5, 0x4e, 0x62, 0x87, 0x8a, |
3774 | 0xe1, 0xad, 0x9c, 0x87, 0xb7, 0xb2, 0xb5, 0xe5, 0x48, 0x00, 0xfd, 0xe7, | 3796 | 0xca, 0x33, 0x7b, 0xa4, 0xbc, 0xe8, 0xe1, 0xb0, 0xa9, 0x79, 0x6f, 0x8c, |
3775 | 0xe2, 0x6b, 0x31, 0xd6, 0x8c, 0x87, 0xb1, 0xa6, 0x3f, 0x20, 0xc6, 0xe2, | 3797 | 0x71, 0x1f, 0x87, 0xe5, 0x7c, 0x1c, 0x96, 0x5d, 0x5c, 0x8d, 0x85, 0xd0, |
3776 | 0x58, 0x39, 0x3c, 0x33, 0x3e, 0x1f, 0x91, 0x5d, 0x90, 0xf3, 0x58, 0x91, | 3798 | 0x7f, 0xca, 0xd9, 0x88, 0xbd, 0x8e, 0xf8, 0xd8, 0x6b, 0xe2, 0x43, 0x61, |
3777 | 0xfa, 0xe2, 0x19, 0xb2, 0xf7, 0xd2, 0x19, 0xf5, 0xe5, 0xea, 0x2a, 0x10, | 3799 | 0x2f, 0x6f, 0xae, 0x1c, 0x9e, 0x19, 0x9e, 0x89, 0xc9, 0x7e, 0xc8, 0x79, |
3778 | 0xdb, 0xa7, 0x8d, 0x43, 0x57, 0x63, 0xef, 0xa9, 0x2b, 0x31, 0xdf, 0x18, | 3800 | 0xa8, 0x48, 0x7d, 0xf1, 0x9c, 0xd2, 0x2f, 0xd3, 0x19, 0xf5, 0xe5, 0xe9, |
3779 | 0x09, 0xe2, 0xf3, 0xf7, 0xa5, 0x2b, 0xce, 0x83, 0xfa, 0x5a, 0x8f, 0xc5, | 3801 | 0x2a, 0x14, 0x3f, 0xa8, 0x0d, 0x43, 0x57, 0x43, 0xbf, 0x54, 0x57, 0x62, |
3780 | 0xee, 0x07, 0x93, 0xad, 0xc5, 0x63, 0xb6, 0xc2, 0x63, 0xed, 0x5e, 0x1f, | 3802 | 0xbe, 0x39, 0x10, 0xc6, 0xe7, 0x6f, 0x4b, 0x57, 0xe4, 0x83, 0xfa, 0xda, |
3781 | 0xd9, 0x33, 0x0e, 0x5d, 0xfe, 0x27, 0xf4, 0xf9, 0x99, 0xd5, 0x2d, 0x3f, | 3803 | 0x8c, 0xc5, 0x6e, 0x05, 0x93, 0x6d, 0xc4, 0x63, 0xae, 0xc2, 0x63, 0xcd, |
3782 | 0x85, 0xff, 0xfe, 0x43, 0xe8, 0xe4, 0x3f, 0x22, 0x57, 0x78, 0xcd, 0xea, | 3804 | 0x7e, 0x9f, 0xfc, 0x81, 0x61, 0xe8, 0xf2, 0x3f, 0xa0, 0xcf, 0x8f, 0xed, |
3783 | 0x93, 0x3f, 0x40, 0xdb, 0x5d, 0x9c, 0xc3, 0xfe, 0xc1, 0xc7, 0x92, 0xd6, | 3805 | 0x76, 0xf9, 0x11, 0xfc, 0xf7, 0xbf, 0x87, 0x4e, 0xfe, 0x1d, 0x72, 0x85, |
3784 | 0x35, 0xe0, 0x93, 0x6b, 0x1e, 0x3e, 0x79, 0x3a, 0x99, 0xb4, 0x26, 0x59, | 3806 | 0x57, 0xec, 0x2e, 0xf9, 0x21, 0xda, 0xae, 0xe3, 0x1c, 0xf6, 0x9f, 0x72, |
3785 | 0x37, 0x87, 0x9c, 0x0f, 0xa4, 0xa6, 0x14, 0x36, 0xf1, 0x31, 0xc9, 0xed, | 3807 | 0x92, 0xf6, 0x28, 0xf0, 0xc9, 0xa8, 0x8f, 0x4f, 0xde, 0x7a, 0x20, 0x69, |
3786 | 0x34, 0xc7, 0x9f, 0x75, 0x56, 0x80, 0x7d, 0x56, 0x3c, 0xec, 0x73, 0x60, | 3808 | 0x8f, 0xb1, 0xce, 0x0e, 0x39, 0xff, 0x34, 0x39, 0xae, 0xb0, 0x49, 0x80, |
3787 | 0xcc, 0xc5, 0x3e, 0xc1, 0xcf, 0x50, 0xff, 0x2e, 0xee, 0x59, 0xb1, 0x93, | 3809 | 0x49, 0x1e, 0x4f, 0x73, 0xfe, 0xc9, 0x6a, 0x16, 0xd8, 0x27, 0xeb, 0x63, |
3788 | 0x18, 0xa7, 0x0a, 0x4c, 0x52, 0x71, 0x0e, 0x48, 0xbe, 0xbe, 0x57, 0x7d, | 3810 | 0x9f, 0x9f, 0xa6, 0x3d, 0xec, 0x33, 0xf5, 0xf7, 0xa8, 0x7f, 0x0f, 0xf7, |
3789 | 0x8e, 0x94, 0xec, 0x68, 0x1b, 0xe4, 0xc4, 0xda, 0xeb, 0x49, 0xae, 0x4a, | 3811 | 0x1c, 0x76, 0x93, 0x98, 0x07, 0xb8, 0x07, 0xd7, 0x87, 0x25, 0x5f, 0x1b, |
3790 | 0x27, 0x6a, 0x16, 0xf1, 0x9d, 0x75, 0xa2, 0xe1, 0xdf, 0xf1, 0xae, 0x9f, | 3812 | 0x51, 0x9f, 0x13, 0x25, 0xd7, 0x6a, 0x82, 0x9c, 0x58, 0xab, 0x3d, 0xc3, |
3791 | 0xf7, 0xae, 0x4f, 0x78, 0xd7, 0xc7, 0x11, 0x87, 0x8f, 0xa9, 0x58, 0xca, | 3813 | 0x55, 0x59, 0xb5, 0xcc, 0x22, 0xbe, 0xb3, 0x55, 0x2b, 0xfa, 0x7b, 0xfe, |
3792 | 0x76, 0xb6, 0x41, 0xc9, 0x0e, 0x68, 0x01, 0x7b, 0x9c, 0x1d, 0xfe, 0x8b, | 3814 | 0xf5, 0xd3, 0xfe, 0xf5, 0x53, 0xfe, 0xf5, 0x69, 0xc4, 0xe1, 0x53, 0x2a, |
3793 | 0x66, 0x59, 0xe9, 0x98, 0xf4, 0x27, 0xf0, 0x39, 0x8e, 0xcf, 0x34, 0x3e, | 3815 | 0x96, 0xb2, 0x9d, 0x6d, 0x50, 0x72, 0x15, 0x63, 0x01, 0x7b, 0x9c, 0xeb, |
3794 | 0xfb, 0xf1, 0xc9, 0xe3, 0xb3, 0x2a, 0x53, 0x2d, 0x55, 0x9a, 0x84, 0x8d, | 3816 | 0xff, 0xf3, 0x7a, 0x59, 0xe9, 0x98, 0xe3, 0x8f, 0xe2, 0x73, 0x1a, 0x9f, |
3795 | 0x0c, 0x4a, 0xaa, 0xfe, 0x12, 0xf4, 0xf8, 0x1c, 0x74, 0x7b, 0x58, 0x0a, | 3817 | 0x09, 0x7c, 0x0e, 0xe1, 0x93, 0xc7, 0x67, 0x5d, 0xa6, 0x5a, 0xaa, 0x34, |
3796 | 0xd5, 0x3f, 0x95, 0xd9, 0x79, 0x4d, 0xba, 0x2c, 0xe8, 0xb4, 0x0a, 0x5b, | 3818 | 0x06, 0x1b, 0xe9, 0x95, 0x54, 0xed, 0x39, 0xe8, 0xf1, 0x49, 0xe8, 0xf6, |
3797 | 0x9e, 0x77, 0xf7, 0x13, 0x3b, 0x13, 0x7b, 0xd1, 0xb7, 0x29, 0x4f, 0xc5, | 3819 | 0xb8, 0x14, 0x2a, 0x7f, 0x22, 0x93, 0x33, 0x9a, 0xb4, 0xd9, 0xd0, 0x69, |
3798 | 0x9f, 0x13, 0xfd, 0xb1, 0x39, 0xf4, 0x13, 0xbd, 0x30, 0xfc, 0x31, 0xb5, | 3820 | 0x05, 0xb6, 0x3c, 0xe3, 0xed, 0x41, 0xb6, 0x26, 0x46, 0xd0, 0xb7, 0x2e, |
3799 | 0x6f, 0x56, 0x8d, 0xbb, 0x32, 0xde, 0x65, 0xd9, 0x51, 0xe8, 0x7c, 0xf0, | 3821 | 0x8f, 0x3a, 0x4f, 0x8a, 0x7e, 0xdf, 0x14, 0xfa, 0x89, 0x5e, 0xe8, 0xbf, |
3800 | 0x18, 0x68, 0x27, 0xd5, 0xd9, 0xd8, 0x8c, 0x1c, 0x3d, 0xbd, 0xbc, 0xc5, | 3822 | 0x5b, 0xed, 0xbf, 0x55, 0x1c, 0x4f, 0xc6, 0xfb, 0x6d, 0xd7, 0x82, 0xce, |
3801 | 0xf5, 0xad, 0x51, 0xf3, 0x26, 0xf5, 0x8e, 0x79, 0xd8, 0xf0, 0x85, 0x19, | 3823 | 0x7b, 0x4f, 0x61, 0xec, 0xa4, 0x3a, 0x7f, 0x99, 0x91, 0x93, 0xb3, 0xab, |
3802 | 0xd8, 0xfb, 0x41, 0x27, 0xa0, 0x8d, 0x21, 0xde, 0x8c, 0x39, 0x37, 0x55, | 3824 | 0xdb, 0x3d, 0xdf, 0x6a, 0x99, 0x57, 0xa9, 0x77, 0xf0, 0xe1, 0xc2, 0x17, |
3803 | 0xbc, 0x81, 0xef, 0xca, 0xc4, 0x4e, 0x86, 0x70, 0xcd, 0xb3, 0x45, 0x88, | 3825 | 0x66, 0x60, 0xef, 0x47, 0xab, 0x21, 0x6d, 0x08, 0xf1, 0x66, 0xa8, 0x7a, |
3804 | 0x8b, 0xea, 0x6c, 0xe5, 0x32, 0xf0, 0x8d, 0xa6, 0xea, 0x80, 0xb3, 0xab, | 3826 | 0x55, 0xc5, 0x9b, 0x54, 0xd5, 0xcd, 0xc4, 0xcf, 0x44, 0x70, 0xcd, 0x73, |
3805 | 0xfb, 0x43, 0x86, 0xf2, 0x5b, 0xb1, 0x98, 0x2e, 0xb9, 0x11, 0xe2, 0xdc, | 3827 | 0x31, 0x88, 0x8b, 0xea, 0xfc, 0xde, 0x2a, 0xf0, 0x8d, 0xa6, 0xea, 0x86, |
3806 | 0xbd, 0x2a, 0x36, 0xd5, 0x8a, 0xf6, 0x43, 0xcc, 0x15, 0x6f, 0x08, 0xe3, | 3828 | 0x93, 0xeb, 0xfb, 0x4a, 0xea, 0x7c, 0x71, 0x26, 0x1e, 0xd7, 0x25, 0x37, |
3807 | 0xdc, 0xe3, 0xe8, 0xd7, 0x07, 0x7f, 0x8c, 0x7b, 0x75, 0xda, 0x27, 0xe7, | 3829 | 0x40, 0x9c, 0x3b, 0xa2, 0x62, 0x13, 0xd6, 0xea, 0xed, 0xcc, 0x15, 0x5f, |
3808 | 0xca, 0x67, 0xa6, 0xa5, 0x5a, 0x1e, 0xc5, 0x7c, 0xbd, 0x1c, 0x49, 0xe5, | 3830 | 0xe7, 0xbb, 0x00, 0xf6, 0x27, 0xd0, 0xaf, 0x0b, 0xfe, 0x18, 0xf7, 0x6a, |
3809 | 0x12, 0x11, 0xd8, 0xa3, 0xbf, 0x17, 0xe5, 0xd6, 0x4f, 0xaa, 0x8e, 0x8f, | 3831 | 0xb4, 0x4f, 0xf2, 0xca, 0x67, 0x26, 0xa4, 0x52, 0x1e, 0x04, 0xbf, 0x7e, |
3810 | 0x29, 0xba, 0xd1, 0x87, 0x79, 0x05, 0x64, 0xe4, 0xee, 0x9f, 0xa9, 0xbd, | 3832 | 0x8e, 0xa4, 0x72, 0x89, 0x18, 0xec, 0x31, 0xd8, 0xc3, 0xf2, 0xea, 0x2a, |
3811 | 0xb3, 0x82, 0x33, 0x0a, 0x39, 0x25, 0xd1, 0xce, 0x5a, 0x35, 0x7e, 0x97, | 3833 | 0x95, 0x6a, 0x80, 0x29, 0xda, 0xd1, 0x87, 0x79, 0x05, 0x64, 0xe4, 0xed, |
3812 | 0x75, 0x55, 0x13, 0x58, 0x31, 0x66, 0xa4, 0x56, 0x6e, 0x82, 0x5f, 0xc4, | 3834 | 0xbf, 0xa9, 0xbd, 0xb7, 0x42, 0x75, 0x10, 0x72, 0x4a, 0xa2, 0x9d, 0xb5, |
3813 | 0xdc, 0x2d, 0x33, 0x52, 0x29, 0x4f, 0xcb, 0x2b, 0xe5, 0x9f, 0x77, 0x03, | 3835 | 0x6d, 0xfc, 0x2e, 0xeb, 0xaa, 0x26, 0xb0, 0x66, 0x1c, 0x91, 0xc5, 0x72, |
3814 | 0x53, 0x41, 0xa6, 0xe4, 0xbf, 0x5b, 0xee, 0x9e, 0xbf, 0xf5, 0xdb, 0x21, | 3836 | 0x1d, 0xf4, 0x22, 0xe6, 0x6e, 0x3f, 0x22, 0x0b, 0xe5, 0x09, 0x79, 0xa1, |
3815 | 0xcf, 0xd3, 0xf9, 0xb0, 0x9b, 0xe7, 0xe6, 0x55, 0x2d, 0xc6, 0xfd, 0xb6, | 3837 | 0xfc, 0xcd, 0x76, 0x60, 0x2a, 0xc8, 0x94, 0xf4, 0xb7, 0xcb, 0xf5, 0x33, |
3816 | 0xf5, 0x29, 0x2b, 0x1a, 0x9e, 0x45, 0xcf, 0x83, 0x0b, 0xb4, 0xcd, 0xfc, | 3838 | 0x9e, 0x41, 0x3b, 0xe4, 0x39, 0x9b, 0x8f, 0x7a, 0x79, 0x6e, 0x5e, 0xd5, |
3817 | 0xf8, 0x9c, 0xb5, 0x43, 0xae, 0xc6, 0x37, 0xcb, 0x72, 0x5c, 0xe5, 0xc5, | 3839 | 0x68, 0xbc, 0x6f, 0x57, 0x1f, 0xb7, 0xad, 0xe8, 0x24, 0x7a, 0x1e, 0x9d, |
3818 | 0xc4, 0x0f, 0x58, 0xeb, 0x51, 0xb3, 0x21, 0x7b, 0xe4, 0x28, 0xd6, 0xed, | 3840 | 0x53, 0xb6, 0x39, 0x3c, 0x65, 0xef, 0x95, 0xcb, 0xce, 0x36, 0x59, 0x75, |
3819 | 0xd5, 0xf8, 0xd3, 0xb0, 0xd3, 0x67, 0x61, 0x0b, 0xac, 0x01, 0x1c, 0x62, | 3841 | 0x54, 0x5e, 0x4c, 0xfc, 0x80, 0xb5, 0x6e, 0x99, 0x2b, 0xf2, 0xa0, 0x9c, |
3820 | 0xae, 0x25, 0x0d, 0x55, 0x23, 0x6b, 0x36, 0xc7, 0xd5, 0x19, 0xee, 0x76, | 3842 | 0xc4, 0xba, 0xbd, 0xec, 0x3c, 0x06, 0x3b, 0x7d, 0x02, 0xb6, 0xc0, 0x1a, |
3821 | 0x59, 0x56, 0x58, 0xcc, 0xad, 0x9d, 0x2f, 0x4f, 0xba, 0x6b, 0xc4, 0x50, | 3843 | 0xc0, 0x31, 0xe6, 0x5a, 0xb2, 0xa2, 0x6a, 0x68, 0xf5, 0xfa, 0xb0, 0x3a, |
3822 | 0x76, 0xff, 0xc7, 0xe0, 0xc7, 0x84, 0xed, 0xb6, 0xa9, 0x3e, 0x46, 0xa2, | 3844 | 0x27, 0xdc, 0x2c, 0xab, 0x0a, 0x8b, 0x79, 0xb5, 0xf6, 0xd5, 0x31, 0x6f, |
3823 | 0xc3, 0xeb, 0xa3, 0xf4, 0xdb, 0xd2, 0xe7, 0x95, 0x44, 0xd2, 0xda, 0xff, | 3845 | 0x8d, 0x18, 0xca, 0xee, 0xbf, 0x01, 0x7a, 0x8a, 0xb0, 0xdd, 0x26, 0xd5, |
3824 | 0x89, 0xa4, 0x75, 0x73, 0xb7, 0x5b, 0x6f, 0x89, 0x9a, 0xb6, 0xc6, 0xf7, | 3846 | 0xc7, 0x48, 0xb4, 0xf8, 0x7d, 0x14, 0x06, 0x6d, 0xe8, 0x63, 0x27, 0x92, |
3825 | 0x52, 0xdc, 0xf5, 0x98, 0xc1, 0xba, 0xba, 0xb4, 0x8a, 0xa1, 0x61, 0xa4, | 3847 | 0xf6, 0x6b, 0xfb, 0x92, 0xf6, 0xc4, 0x81, 0x5c, 0xd5, 0xf3, 0x99, 0xae, |
3826 | 0x2f, 0x5f, 0x81, 0x7e, 0x03, 0xd2, 0x7e, 0xb2, 0xf9, 0xf8, 0x54, 0x7c, | 3848 | 0xb6, 0xb6, 0x5e, 0xff, 0xc9, 0x60, 0x5d, 0xbd, 0xbc, 0x8e, 0xa1, 0x61, |
3827 | 0x28, 0x72, 0x50, 0x78, 0x02, 0x8b, 0x79, 0x75, 0x34, 0x9e, 0x95, 0x2b, | 3849 | 0xa4, 0xcf, 0x5f, 0x82, 0x7e, 0x43, 0xd2, 0x7c, 0xa6, 0xfe, 0x89, 0x71, |
3828 | 0x88, 0x93, 0x77, 0x88, 0x1d, 0x06, 0x2f, 0xcb, 0x9d, 0xc7, 0x93, 0xf1, | 3850 | 0xa7, 0x2f, 0x76, 0x54, 0x78, 0x32, 0x8b, 0x79, 0xb5, 0xe5, 0x64, 0xe5, |
3829 | 0x51, 0xad, 0x32, 0x89, 0xac, 0xe5, 0xe5, 0x49, 0xc6, 0xd9, 0x43, 0x22, | 3851 | 0x12, 0xe2, 0xe4, 0x35, 0x62, 0x87, 0xde, 0x8b, 0x72, 0xed, 0x13, 0x49, |
3830 | 0xc0, 0x97, 0x27, 0x47, 0x24, 0x5d, 0x54, 0xef, 0xa9, 0xf0, 0x9c, 0xad, | 3852 | 0x67, 0x50, 0x5b, 0x18, 0x43, 0xd6, 0xf2, 0xfc, 0x18, 0xe3, 0xec, 0x31, |
3831 | 0x36, 0x0d, 0xf9, 0xe1, 0xf9, 0x09, 0x06, 0x46, 0xdd, 0xea, 0x8f, 0xa4, | 3853 | 0x11, 0xe0, 0xcb, 0x33, 0x03, 0x92, 0x2e, 0xaa, 0x77, 0x21, 0x78, 0x96, |
3832 | 0xe5, 0x69, 0xd6, 0xc0, 0x24, 0xb7, 0x20, 0xdb, 0x92, 0xf0, 0xab, 0xf6, | 3854 | 0x53, 0x9b, 0x80, 0xfc, 0xf0, 0xfc, 0x28, 0x03, 0xa3, 0x6e, 0x77, 0xc7, |
3833 | 0x44, 0xbb, 0x4c, 0xd7, 0x1a, 0x99, 0xfe, 0x53, 0xcf, 0x82, 0xc6, 0x14, | 3855 | 0xd2, 0xf2, 0x18, 0x6b, 0x63, 0x92, 0x9b, 0x93, 0x3d, 0x49, 0xf8, 0x55, |
3834 | 0x68, 0xed, 0x45, 0x6e, 0x92, 0x45, 0xac, 0xa6, 0x7c, 0xe9, 0xbb, 0x9f, | 3856 | 0x77, 0xb4, 0x59, 0x26, 0x16, 0xdd, 0x4c, 0xf7, 0xf4, 0x13, 0x18, 0x63, |
3835 | 0x81, 0x8c, 0x3e, 0xc2, 0x3d, 0xe5, 0xd1, 0xac, 0x44, 0x27, 0xf2, 0x8a, | 3857 | 0x1c, 0x63, 0x8d, 0x20, 0x37, 0xc9, 0x22, 0x56, 0x53, 0xbe, 0xf4, 0xdd, |
3836 | 0xee, 0x5b, 0x5a, 0x6e, 0xf8, 0x57, 0x10, 0xeb, 0x02, 0xb2, 0x2b, 0x26, | 3858 | 0x8f, 0x43, 0x46, 0x1f, 0xe1, 0x59, 0xd7, 0xc1, 0xac, 0x58, 0xa3, 0x79, |
3837 | 0xfa, 0xde, 0x58, 0xe0, 0xed, 0x29, 0x8b, 0x6d, 0x41, 0xb6, 0xe9, 0x68, | 3859 | 0x35, 0xee, 0xbb, 0x5a, 0xae, 0xff, 0x57, 0x10, 0xeb, 0x42, 0xb2, 0x3f, |
3838 | 0x0b, 0xfc, 0x7a, 0x2c, 0xa8, 0x27, 0x63, 0xd1, 0x51, 0x9e, 0x8f, 0x36, | 3860 | 0x2e, 0xfa, 0x48, 0x3c, 0xf4, 0x8b, 0x71, 0x9b, 0x6d, 0x61, 0xb6, 0xe9, |
3839 | 0xac, 0x29, 0xee, 0x4d, 0x3c, 0x20, 0x5d, 0x7b, 0xa5, 0xe7, 0x42, 0x74, | 3861 | 0x68, 0x0b, 0xfd, 0x66, 0x3c, 0xac, 0x27, 0xe3, 0xd6, 0x20, 0xcf, 0xe0, |
3840 | 0xf4, 0x06, 0x78, 0x09, 0x28, 0x5f, 0x3f, 0x25, 0xba, 0xd7, 0xde, 0xbd, | 3862 | 0x1a, 0xf6, 0xb8, 0x18, 0xcf, 0xd7, 0x21, 0x8b, 0x11, 0xe9, 0xb8, 0x60, |
3841 | 0xda, 0x1e, 0xf0, 0xda, 0xf7, 0x4a, 0xd7, 0x85, 0x21, 0xf3, 0x75, 0x99, | 3863 | 0x0d, 0xbe, 0x0e, 0x5a, 0x42, 0xca, 0xd7, 0x8f, 0x8b, 0xee, 0xb7, 0xb7, |
3842 | 0x01, 0x4d, 0x43, 0xae, 0x23, 0xd7, 0xb1, 0x06, 0xa6, 0x60, 0x8b, 0x4f, | 3864 | 0xaf, 0xb7, 0x87, 0xfc, 0xf6, 0x11, 0x69, 0xbb, 0xd0, 0x67, 0xbe, 0x21, |
3843 | 0x92, 0x97, 0xfd, 0xc0, 0x1a, 0x58, 0x1b, 0xc8, 0xbf, 0xad, 0x0f, 0xcb, | 3865 | 0x47, 0x30, 0xa6, 0x21, 0x57, 0x90, 0xeb, 0xd8, 0x3d, 0xe3, 0xb0, 0xc5, |
3844 | 0x57, 0xcd, 0x4e, 0xc9, 0xa9, 0x5c, 0x37, 0xe0, 0xd6, 0x52, 0x61, 0xef, | 3866 | 0x47, 0x48, 0xcb, 0x21, 0xd6, 0x1b, 0x5d, 0xd8, 0x5f, 0x8b, 0x7d, 0x87, |
3845 | 0x8f, 0x0e, 0x1c, 0xec, 0x71, 0xeb, 0x05, 0xdc, 0xef, 0x18, 0x46, 0xdb, | 3867 | 0x7c, 0xde, 0x6c, 0x95, 0x9c, 0xca, 0x75, 0x43, 0xea, 0xbd, 0x85, 0x1c, |
3846 | 0x9d, 0xe6, 0x39, 0x8b, 0x6d, 0xbc, 0x77, 0xa7, 0x59, 0xb5, 0x86, 0xcc, | 3868 | 0xec, 0xfd, 0xae, 0x9e, 0xa1, 0x0e, 0xaf, 0x5e, 0xc0, 0xfd, 0x91, 0x7e, |
3847 | 0x94, 0x16, 0xf4, 0xf6, 0xbd, 0x0f, 0xa9, 0xb9, 0xe7, 0xcb, 0xfd, 0x66, | 3869 | 0xb4, 0x5d, 0xab, 0x9f, 0xb7, 0xd9, 0xc6, 0x7b, 0xd7, 0xea, 0x15, 0xbb, |
3848 | 0x45, 0x1e, 0xd5, 0x52, 0x0f, 0x22, 0x5e, 0x38, 0xd3, 0xe8, 0x7b, 0x87, | 3870 | 0xcf, 0x4c, 0x69, 0x61, 0x7f, 0xff, 0xfc, 0x98, 0xe2, 0x3d, 0x5f, 0xee, |
3849 | 0xe7, 0x29, 0x54, 0x7d, 0xbf, 0x22, 0xfe, 0x35, 0xe9, 0x0c, 0x99, 0xe3, | 3871 | 0x36, 0x17, 0xe4, 0x2e, 0x2d, 0xb5, 0x03, 0xf1, 0xa2, 0x9a, 0x42, 0xdf, |
3850 | 0xea, 0xd9, 0x21, 0xf3, 0xa8, 0xd6, 0xfa, 0x6c, 0x58, 0x1b, 0x5f, 0xf3, | 3872 | 0x6b, 0x3c, 0x83, 0xa1, 0xf6, 0x03, 0x16, 0x24, 0xb8, 0xe6, 0x38, 0x7d, |
3851 | 0x6c, 0x97, 0x92, 0x91, 0x61, 0xb9, 0x7d, 0x66, 0xcb, 0x7b, 0xe5, 0x79, | 3873 | 0xe6, 0xb0, 0x7a, 0xb6, 0xcf, 0x3c, 0xa9, 0x35, 0x3e, 0x1b, 0xd5, 0x86, |
3852 | 0x87, 0xfd, 0xee, 0x34, 0x53, 0xd6, 0x03, 0xda, 0xd1, 0x07, 0xe9, 0x0b, | 3874 | 0x37, 0x3c, 0xdb, 0xa6, 0x64, 0x64, 0xd8, 0x5e, 0x9f, 0xc9, 0xf2, 0x88, |
3853 | 0xd9, 0xf7, 0xf6, 0xba, 0x71, 0x78, 0x7d, 0xaf, 0x31, 0x9a, 0xb2, 0x76, | 3875 | 0x3c, 0x5d, 0x65, 0xbf, 0x6b, 0xf5, 0x94, 0xbd, 0x55, 0x3b, 0xb9, 0x83, |
3854 | 0x8c, 0x4d, 0xaa, 0xcf, 0x55, 0xd5, 0x27, 0xa0, 0x64, 0xbd, 0x76, 0x9c, | 3876 | 0xbe, 0x90, 0x7d, 0xdf, 0xd9, 0x34, 0x0f, 0xaf, 0x6f, 0x36, 0x47, 0x5d, |
3855 | 0xbf, 0x91, 0xb5, 0xe3, 0x74, 0xad, 0xce, 0x79, 0x16, 0x34, 0x8f, 0xa1, | 3877 | 0x36, 0xce, 0xb1, 0x45, 0xf5, 0xb9, 0xac, 0xfa, 0x84, 0x94, 0xac, 0x37, |
3856 | 0x6f, 0xd1, 0xe9, 0x0f, 0x57, 0xe5, 0x76, 0x33, 0x67, 0xbd, 0x29, 0x57, | 3878 | 0xce, 0xf3, 0x17, 0xb2, 0x71, 0x9e, 0xb6, 0x75, 0x9e, 0x27, 0x31, 0xe6, |
3857 | 0x57, 0x69, 0xff, 0x12, 0xd7, 0xad, 0x3c, 0xfd, 0xd2, 0xe3, 0x91, 0xbf, | 3879 | 0x29, 0xf4, 0x2d, 0x56, 0xbb, 0xa3, 0x15, 0x79, 0xa7, 0x9e, 0xb3, 0xdf, |
3858 | 0xd9, 0xf6, 0x2f, 0x95, 0xbc, 0x1f, 0xb0, 0xfa, 0xf7, 0x57, 0xb4, 0xe8, | 3880 | 0x92, 0xcb, 0xeb, 0x63, 0xff, 0x25, 0xae, 0x1b, 0x69, 0xfa, 0x4b, 0x9f, |
3859 | 0xe8, 0x5f, 0x0a, 0x75, 0xf5, 0xcf, 0x94, 0xaf, 0xf9, 0x18, 0xf4, 0xb4, | 3881 | 0x46, 0xfe, 0x66, 0xdb, 0x3f, 0x53, 0xf2, 0xde, 0x6a, 0x77, 0x1f, 0x5a, |
3860 | 0xed, 0x05, 0xac, 0xdd, 0xe1, 0xa4, 0xea, 0x73, 0xdd, 0xda, 0x2b, 0xdb, | 3882 | 0xd0, 0xac, 0xc1, 0x9f, 0x09, 0x75, 0xf5, 0x3b, 0xca, 0xd7, 0xdc, 0x0d, |
3861 | 0x4e, 0xf6, 0x9b, 0xd7, 0xe5, 0x33, 0x92, 0x0e, 0xf1, 0x1a, 0x39, 0x94, | 3883 | 0x3d, 0xed, 0x79, 0x06, 0x6b, 0xb7, 0x3f, 0xa9, 0xfa, 0x5c, 0xb1, 0x47, |
3862 | 0xc5, 0xf7, 0x52, 0x3e, 0xc1, 0xbc, 0x00, 0xba, 0xec, 0x1f, 0xfc, 0x4b, | 3884 | 0x64, 0xcf, 0x99, 0x6e, 0xf3, 0x8a, 0xdc, 0x2f, 0xe9, 0x08, 0xaf, 0x91, |
3863 | 0x79, 0x56, 0x8e, 0x96, 0xe6, 0xe0, 0x7b, 0xa6, 0x64, 0xf0, 0x05, 0xfa, | 3885 | 0x43, 0xd9, 0x7c, 0xf7, 0xe1, 0x57, 0x99, 0x17, 0x40, 0x97, 0xdd, 0xbd, |
3864 | 0x9f, 0xbc, 0xe9, 0xd6, 0x6a, 0xdc, 0x98, 0x98, 0xf2, 0x62, 0xe2, 0x9c, | 3886 | 0x3f, 0x93, 0x27, 0xe4, 0x64, 0x69, 0x0a, 0xbe, 0x67, 0x5c, 0x7a, 0x9f, |
3865 | 0xf2, 0x73, 0xaf, 0x79, 0xe7, 0x22, 0xfa, 0x07, 0xcf, 0xe1, 0xd9, 0x57, | 3887 | 0xa1, 0xff, 0xc9, 0x9b, 0x5e, 0xad, 0xc6, 0x8b, 0x89, 0x29, 0x3f, 0x26, |
3866 | 0x94, 0x0f, 0xf8, 0x3d, 0xa9, 0x62, 0x2d, 0x44, 0x5e, 0xde, 0x2c, 0x0f, | 3888 | 0x4e, 0x29, 0x3f, 0xf7, 0x8a, 0x7f, 0x8e, 0xa2, 0xbb, 0xf7, 0x3c, 0x9e, |
3867 | 0x3c, 0x41, 0x9b, 0x44, 0x06, 0xf0, 0xb1, 0x36, 0xf5, 0x1e, 0x8c, 0x6e, | 3889 | 0x7d, 0x41, 0xf9, 0x80, 0x6f, 0x48, 0x05, 0x6b, 0x21, 0xf6, 0xfc, 0x36, |
3868 | 0x75, 0x88, 0x6c, 0xa1, 0xfd, 0x5c, 0x86, 0xad, 0x4d, 0xb9, 0x7b, 0x5f, | 3890 | 0xd9, 0xfa, 0x10, 0x6d, 0x12, 0x19, 0xc0, 0xdd, 0x4d, 0xea, 0x5d, 0x0b, |
3869 | 0x6b, 0xae, 0xa3, 0x13, 0x2b, 0xf2, 0x1f, 0x94, 0x1d, 0x7e, 0xfc, 0x82, | 3891 | 0xdd, 0x6e, 0x11, 0xd9, 0x4e, 0xfb, 0x59, 0xd8, 0x2a, 0x6d, 0xe3, 0xde, |
3870 | 0xfb, 0x3d, 0x7c, 0x01, 0xe9, 0x72, 0x6c, 0xaf, 0x6c, 0xbf, 0xe0, 0xda, | 3892 | 0x5e, 0xd9, 0x86, 0x6b, 0x6b, 0x74, 0x4d, 0xca, 0x5b, 0x69, 0x87, 0x1f, |
3871 | 0xdd, 0xec, 0xfc, 0xb3, 0x4a, 0xbe, 0x53, 0x4a, 0xbe, 0x4d, 0x99, 0x89, | 3893 | 0xbd, 0xe0, 0x7d, 0xf7, 0x5f, 0x40, 0xba, 0x1c, 0x1f, 0x91, 0x7b, 0x2f, |
3872 | 0x53, 0xf6, 0x9c, 0x13, 0xcf, 0x4f, 0xba, 0x32, 0xf9, 0x9c, 0x67, 0x47, | 3894 | 0x78, 0x76, 0x37, 0x39, 0xf3, 0x84, 0x92, 0xef, 0xb8, 0x92, 0x6f, 0x5d, |
3873 | 0xfd, 0x2f, 0xf0, 0x3d, 0x35, 0xca, 0x88, 0x7c, 0xcf, 0xf4, 0x70, 0x3f, | 3895 | 0x8e, 0x38, 0x94, 0x3d, 0x79, 0xe2, 0xb9, 0x4a, 0x4f, 0x26, 0x9f, 0xf4, |
3874 | 0x76, 0xdb, 0x05, 0xce, 0xb7, 0x6f, 0xcd, 0x7c, 0x4f, 0xc0, 0xc7, 0x0e, | 3896 | 0xed, 0xa8, 0xfb, 0x19, 0xbe, 0x23, 0x46, 0x19, 0x91, 0xee, 0x74, 0x07, |
3875 | 0x0c, 0xb8, 0x73, 0x7e, 0x6d, 0xfe, 0xfd, 0xcf, 0xf9, 0x77, 0x57, 0xe7, | 3897 | 0xf7, 0x6f, 0xf7, 0x5c, 0x20, 0xbf, 0x5d, 0x1b, 0xf8, 0x7d, 0x0a, 0x3e, |
3876 | 0x6c, 0x48, 0x55, 0xe5, 0xb9, 0xb1, 0xcd, 0xd2, 0x95, 0x93, 0x06, 0xec, | 3898 | 0xb6, 0xa7, 0xc7, 0xe3, 0xf9, 0x95, 0x99, 0x0f, 0xce, 0xf3, 0xd7, 0xd6, |
3877 | 0xe3, 0xcf, 0x85, 0x67, 0xc6, 0xc9, 0x8b, 0x3b, 0xee, 0xb2, 0x43, 0x9e, | 3899 | 0x79, 0x36, 0xa4, 0xa2, 0xf2, 0xdc, 0xd0, 0x36, 0x69, 0xcb, 0xc9, 0x0a, |
3878 | 0xfc, 0x39, 0x90, 0xaf, 0x29, 0x4f, 0x7f, 0xe4, 0xe3, 0xd9, 0x0d, 0xef, | 3900 | 0xec, 0xe3, 0xcf, 0x84, 0xe7, 0x92, 0x49, 0x8b, 0x37, 0xef, 0x6a, 0x95, |
3879 | 0x5d, 0x97, 0x46, 0x66, 0x10, 0x6d, 0xba, 0xd2, 0xe1, 0x98, 0xb7, 0xde, | 3901 | 0x34, 0x05, 0x3c, 0x90, 0xae, 0xa4, 0xaf, 0x3f, 0xd2, 0xf1, 0xc4, 0x0d, |
3880 | 0xf6, 0x8a, 0xae, 0x74, 0x98, 0x5c, 0xd5, 0xe1, 0x0d, 0xe8, 0xb0, 0x2a, | 3902 | 0xef, 0x5d, 0x11, 0x37, 0xd3, 0x8b, 0x36, 0x5d, 0xe9, 0x70, 0xc8, 0x5f, |
3881 | 0x9f, 0xc6, 0x9c, 0xb0, 0xbe, 0x5f, 0x18, 0x32, 0x67, 0x64, 0xab, 0xd2, | 3903 | 0x6f, 0x23, 0xa2, 0x2b, 0x1d, 0x26, 0xd7, 0x75, 0xf8, 0x3a, 0x74, 0x58, |
3882 | 0xbf, 0x35, 0x00, 0x9f, 0xea, 0xe9, 0xb2, 0xfd, 0x3e, 0x74, 0xf9, 0xba, | 3904 | 0x91, 0x8f, 0x83, 0x27, 0xac, 0xef, 0x67, 0xfa, 0xcc, 0x23, 0xb2, 0x53, |
3883 | 0x28, 0x7d, 0xaa, 0x73, 0x44, 0x55, 0x45, 0x87, 0xbe, 0x8d, 0x73, 0x6b, | 3905 | 0xe9, 0xdf, 0xee, 0x81, 0x4f, 0xf5, 0x75, 0xd9, 0x7c, 0x0b, 0xba, 0x7c, |
3884 | 0x57, 0x3e, 0x81, 0x3c, 0xaa, 0xb3, 0x01, 0x13, 0xae, 0x7e, 0xd5, 0x9a, | 3906 | 0x43, 0x94, 0x3e, 0xd5, 0xd9, 0xa3, 0x8a, 0x1a, 0x87, 0xbe, 0x8d, 0xbc, |
3885 | 0xf7, 0xf4, 0x9b, 0x9d, 0xa0, 0x0e, 0x7f, 0xad, 0xc7, 0xd5, 0x67, 0x87, | 3907 | 0x35, 0x2b, 0x9f, 0x40, 0x1a, 0xd5, 0x59, 0x82, 0x51, 0x4f, 0xbf, 0x6a, |
3886 | 0xea, 0x73, 0x2a, 0x36, 0xaa, 0xd6, 0xbb, 0x35, 0xf0, 0xe9, 0x1e, 0xea, | 3908 | 0xcd, 0xfb, 0xfa, 0xcd, 0x8e, 0x52, 0x87, 0xd1, 0x0e, 0x4f, 0x9f, 0x2d, |
3887 | 0xf4, 0x79, 0xc7, 0xfd, 0x2e, 0x22, 0xce, 0x9d, 0x72, 0xde, 0x4b, 0xaf, | 3909 | 0xaa, 0xcf, 0x74, 0xfc, 0x36, 0xb5, 0xde, 0xed, 0x9e, 0x9d, 0x1d, 0xd4, |
3888 | 0xae, 0x4e, 0xc7, 0xc4, 0x5d, 0x57, 0xeb, 0xf5, 0xa9, 0x5f, 0x08, 0x28, | 3910 | 0xe9, 0xd3, 0x55, 0xef, 0xbb, 0x88, 0x38, 0x37, 0x5d, 0xfd, 0x65, 0x7a, |
3889 | 0x1b, 0x1e, 0x83, 0x0c, 0x8f, 0x97, 0x1e, 0xf4, 0xec, 0xde, 0x9d, 0xf3, | 3911 | 0xf5, 0x74, 0x3a, 0x24, 0xde, 0xba, 0xda, 0xac, 0x4f, 0xfd, 0x42, 0x48, |
3890 | 0xc0, 0xfb, 0x9c, 0xf3, 0x91, 0x62, 0xbf, 0xf9, 0x26, 0xee, 0x8d, 0x63, | 3912 | 0xd9, 0xf0, 0x10, 0x64, 0x78, 0xba, 0xb4, 0xc3, 0xb7, 0x7b, 0x8f, 0xe7, |
3891 | 0xce, 0x33, 0xd2, 0x26, 0x29, 0x6f, 0xce, 0x91, 0xd5, 0x39, 0xfb, 0x3c, | 3913 | 0x9e, 0x0f, 0xc8, 0xf3, 0x89, 0x62, 0xb7, 0xf9, 0x16, 0xee, 0x0d, 0x83, |
3892 | 0xba, 0xfd, 0x52, 0xcc, 0x63, 0x1d, 0xfa, 0xaf, 0x7f, 0xab, 0xde, 0x37, | 3914 | 0xe7, 0x23, 0xd2, 0x24, 0x29, 0x9f, 0xe7, 0xd8, 0x3a, 0xcf, 0x01, 0x8d, |
3893 | 0xb9, 0x59, 0xa4, 0xdf, 0x06, 0x56, 0x0a, 0xf5, 0xca, 0xf5, 0x5a, 0x44, | 3915 | 0x5e, 0xbf, 0x14, 0xf3, 0xd8, 0x2a, 0xfd, 0xd7, 0xef, 0xaa, 0x77, 0x1a, |
3894 | 0xae, 0x13, 0x83, 0x8c, 0xe0, 0xdb, 0x99, 0xf3, 0x62, 0x78, 0x50, 0x5e, | 3916 | 0xae, 0x16, 0xe9, 0xb7, 0x81, 0x95, 0x22, 0x9d, 0x72, 0x65, 0x31, 0x26, |
3895 | 0x2f, 0x6e, 0xc4, 0xc7, 0xb0, 0xdc, 0x28, 0xfa, 0xbc, 0x10, 0x0b, 0x33, | 3917 | 0x57, 0x88, 0x41, 0x06, 0xf0, 0x5d, 0x9d, 0xf2, 0x63, 0x78, 0x58, 0xde, |
3896 | 0x5f, 0x98, 0x92, 0x37, 0xe6, 0xfb, 0xa5, 0x31, 0x81, 0xb8, 0x3f, 0x40, | 3918 | 0x28, 0xde, 0x88, 0x8e, 0x7e, 0x79, 0xbd, 0x18, 0xd0, 0x42, 0x2c, 0xcc, |
3897 | 0x99, 0x0c, 0x99, 0x7b, 0xd4, 0x7b, 0x48, 0x77, 0x9a, 0x97, 0x2d, 0xd0, | 3919 | 0x7c, 0x61, 0x5c, 0xde, 0x9c, 0xe9, 0x96, 0x95, 0x51, 0xc4, 0xfd, 0x1e, |
3898 | 0x5f, 0x68, 0xca, 0x41, 0xee, 0x67, 0xf3, 0x77, 0xed, 0x21, 0x69, 0x30, | 3920 | 0xca, 0xa4, 0xcf, 0x7c, 0x50, 0xbd, 0xeb, 0x72, 0xad, 0x7e, 0xd1, 0xc6, |
3899 | 0xa7, 0x18, 0xe8, 0x95, 0xca, 0x02, 0xf2, 0xf9, 0x22, 0xe9, 0x53, 0x6e, | 3921 | 0xf8, 0x73, 0x75, 0x39, 0xca, 0xfd, 0x6f, 0xfe, 0x5e, 0xbc, 0x5d, 0x56, |
3900 | 0x7b, 0xd5, 0xef, 0x71, 0x8c, 0xf7, 0x39, 0xbe, 0x1f, 0x10, 0xa2, 0x6e, | 3922 | 0x98, 0x53, 0xf4, 0x74, 0xca, 0xc2, 0x1c, 0xf2, 0xf9, 0x22, 0xc7, 0xa7, |
3901 | 0xee, 0x34, 0x97, 0x2d, 0xee, 0x67, 0x4e, 0x49, 0x0d, 0xfa, 0xfb, 0xe7, | 3923 | 0xdc, 0x46, 0xd4, 0xef, 0x61, 0xcc, 0xf7, 0x49, 0x9e, 0x41, 0x8f, 0x50, |
3902 | 0x31, 0xee, 0xb7, 0xe7, 0xd4, 0xf9, 0xdb, 0x4a, 0x6d, 0x02, 0xb9, 0xc3, | 3924 | 0x37, 0xd7, 0xea, 0xab, 0x36, 0xf7, 0x3f, 0xc7, 0x65, 0x11, 0xfa, 0xfb, |
3903 | 0x9d, 0xe6, 0x9c, 0x75, 0x56, 0xe9, 0xad, 0x56, 0x7e, 0xc2, 0x6b, 0xe7, | 3925 | 0x47, 0x71, 0xee, 0xcf, 0xe7, 0xd4, 0xfb, 0x85, 0x0b, 0x8b, 0xa3, 0xc8, |
3904 | 0x35, 0xef, 0x35, 0x32, 0xdb, 0x06, 0x98, 0xaf, 0x3e, 0x81, 0x7c, 0x81, | 3926 | 0x1d, 0xae, 0xd5, 0xa7, 0xec, 0x29, 0xa5, 0xb7, 0xc5, 0xf2, 0x43, 0x7e, |
3905 | 0xb9, 0xea, 0x04, 0xf0, 0x1a, 0x65, 0x12, 0x91, 0xd9, 0x22, 0x69, 0x49, | 3927 | 0x3b, 0xaf, 0x79, 0xcf, 0xcd, 0xec, 0xe9, 0x61, 0xbe, 0xfa, 0x10, 0xf2, |
3906 | 0x68, 0x13, 0xf2, 0xfb, 0x9c, 0x8c, 0x83, 0x9f, 0x08, 0x72, 0x7b, 0xc6, | 3928 | 0x05, 0xe6, 0xaa, 0xa3, 0xc0, 0x6b, 0x94, 0x49, 0x4c, 0x26, 0x8b, 0x1c, |
3907 | 0x87, 0x47, 0x65, 0x39, 0xe4, 0xc6, 0x01, 0x9e, 0xfb, 0x5a, 0x46, 0x6c, | 3929 | 0x4b, 0x22, 0x5b, 0x90, 0xdf, 0xe7, 0x64, 0x18, 0xf4, 0xc4, 0x90, 0xdb, |
3908 | 0x58, 0x5e, 0x8d, 0x0d, 0x5b, 0x71, 0xdd, 0xc8, 0xc4, 0x07, 0xfe, 0x06, | 3930 | 0x33, 0x3e, 0xdc, 0x25, 0xab, 0x11, 0x2f, 0x0e, 0xf0, 0xac, 0xd8, 0x2a, |
3909 | 0xf4, 0x59, 0xb7, 0x61, 0x6c, 0x18, 0x45, 0x7f, 0xb6, 0xf5, 0xca, 0xec, | 3931 | 0x62, 0xc3, 0xea, 0x7a, 0x6c, 0xd8, 0x89, 0x6b, 0x37, 0xe3, 0xf4, 0xfc, |
3910 | 0x02, 0x92, 0x08, 0xe4, 0x2c, 0x15, 0xe1, 0x99, 0x8e, 0xac, 0x9c, 0xaa, | 3932 | 0x67, 0x8c, 0xcf, 0xba, 0x0d, 0x63, 0xc3, 0x20, 0xfa, 0xb3, 0xad, 0x53, |
3911 | 0xf5, 0x87, 0x2f, 0x6b, 0x69, 0x75, 0xf6, 0x23, 0x36, 0xc0, 0xf3, 0x2c, | 3933 | 0x26, 0xe7, 0x90, 0x44, 0x20, 0x67, 0x59, 0x10, 0x9e, 0x01, 0xc9, 0xca, |
3912 | 0xbd, 0x52, 0x5b, 0x90, 0x88, 0x91, 0x78, 0x52, 0x9c, 0x9a, 0x8b, 0xd9, | 3934 | 0xf4, 0x62, 0x77, 0xf4, 0xa2, 0x96, 0x56, 0x67, 0x45, 0xe2, 0x98, 0x73, |
3913 | 0xe7, 0x34, 0x9e, 0x69, 0xb1, 0xa5, 0xb6, 0xb6, 0x8f, 0x89, 0xdc, 0x57, | 3935 | 0xa1, 0xd8, 0x29, 0x8b, 0x73, 0x12, 0x33, 0x12, 0x8f, 0x48, 0x75, 0xd1, |
3914 | 0xbe, 0xe3, 0xf5, 0x49, 0xab, 0x3e, 0x7f, 0xdd, 0xc3, 0x3d, 0xb4, 0x9a, | 3936 | 0xc3, 0xec, 0x53, 0x1a, 0xda, 0xab, 0xae, 0x2c, 0x6e, 0xec, 0x63, 0x1a, |
3915 | 0xd3, 0x03, 0x1e, 0xc8, 0xdb, 0xc3, 0xad, 0xe3, 0x46, 0xee, 0x8e, 0xcb, | 3937 | 0x89, 0xc3, 0xf2, 0x75, 0xbf, 0x4f, 0x5a, 0xf5, 0x79, 0xb5, 0x83, 0x7b, |
3916 | 0x31, 0x91, 0xcd, 0x6c, 0xb1, 0x31, 0xee, 0x4d, 0x3c, 0xf3, 0x24, 0xf8, | 3938 | 0x6c, 0x8b, 0xd5, 0x0e, 0xd0, 0x40, 0xda, 0x76, 0x35, 0xce, 0x1b, 0xbb, |
3917 | 0xb8, 0x63, 0xe8, 0xd6, 0x93, 0x52, 0xa8, 0xad, 0x1f, 0xa3, 0x95, 0x07, | 3939 | 0x3e, 0x2f, 0xe7, 0x44, 0x36, 0xb3, 0xdd, 0xc5, 0xbc, 0x17, 0xf1, 0xcc, |
3918 | 0x3e, 0x43, 0xfa, 0x1c, 0xe7, 0x00, 0xf8, 0xbb, 0xa3, 0xe9, 0xd6, 0x01, | 3940 | 0x23, 0xa0, 0xe3, 0x9a, 0xa1, 0xdb, 0x8f, 0x48, 0x61, 0x71, 0xf3, 0x1c, |
3919 | 0xc8, 0xd2, 0x1d, 0xc3, 0x38, 0x13, 0x35, 0x7f, 0x2a, 0x03, 0xa2, 0x9f, | 3941 | 0x8d, 0x34, 0xf0, 0x19, 0x8e, 0xcf, 0x79, 0x0e, 0x83, 0xbe, 0x6b, 0x9a, |
3920 | 0xd3, 0x94, 0xfc, 0xf5, 0xca, 0x30, 0x16, 0x48, 0x46, 0xba, 0x96, 0x26, | 3942 | 0x6e, 0x1f, 0x86, 0x2c, 0xbd, 0x39, 0x8c, 0xb3, 0x96, 0xf9, 0x23, 0xe9, |
3921 | 0xc5, 0x58, 0x62, 0x0d, 0xe1, 0xb5, 0xce, 0xb4, 0xda, 0xbf, 0xdd, 0x84, | 3943 | 0x11, 0xfd, 0xbc, 0xa6, 0xe4, 0xaf, 0x2f, 0xf4, 0x63, 0x81, 0x64, 0xa4, |
3922 | 0xf5, 0x2d, 0x76, 0xc0, 0x62, 0xbd, 0x80, 0xf5, 0xe0, 0x9f, 0x6e, 0x96, | 3944 | 0x6d, 0x79, 0x4c, 0x8c, 0x65, 0xd6, 0x10, 0x5e, 0x69, 0x4d, 0xab, 0xfd, |
3923 | 0x1e, 0xd6, 0x0b, 0x98, 0x37, 0xec, 0xc7, 0x37, 0x73, 0x87, 0x4b, 0x4d, | 3945 | 0xde, 0x2d, 0x58, 0xdf, 0xe2, 0x86, 0x6c, 0xd6, 0x0b, 0x58, 0x0f, 0xfe, |
3924 | 0xe4, 0x7a, 0x9b, 0x19, 0x5f, 0x73, 0x35, 0xde, 0x8f, 0x46, 0x44, 0x78, | 3946 | 0xfa, 0x36, 0xe9, 0x60, 0xbd, 0x80, 0x79, 0xc3, 0x21, 0x7c, 0x33, 0x77, |
3925 | 0x8f, 0x7e, 0xa3, 0x57, 0xda, 0xbe, 0x35, 0x08, 0x5f, 0xf1, 0x34, 0xb0, | 3947 | 0x78, 0xb9, 0x9e, 0x74, 0x7e, 0xa6, 0xe2, 0x6b, 0x6e, 0x91, 0xf7, 0xad, |
3926 | 0x37, 0xe8, 0x9e, 0x1c, 0x90, 0x80, 0x7b, 0x66, 0x42, 0xd5, 0x5b, 0xde, | 3948 | 0x98, 0x08, 0xef, 0xd1, 0x6f, 0x74, 0x4a, 0xd3, 0x57, 0x7a, 0xe1, 0x2b, |
3927 | 0x58, 0x88, 0x7a, 0xef, 0x73, 0xc9, 0xb6, 0xcb, 0x71, 0xd6, 0x44, 0xfb, | 3949 | 0x1e, 0x03, 0xf6, 0xc6, 0xb8, 0x67, 0x7a, 0x24, 0xe4, 0x9d, 0xb1, 0x50, |
3928 | 0x58, 0xf3, 0x41, 0x3f, 0xd1, 0x97, 0x91, 0x9f, 0x5e, 0xaf, 0x59, 0x9b, | 3950 | 0xf5, 0x96, 0x37, 0xe7, 0x2c, 0xff, 0x9d, 0x21, 0xd9, 0x73, 0xd1, 0x61, |
3929 | 0x79, 0x7e, 0xf3, 0x86, 0x83, 0x6b, 0x62, 0xff, 0x90, 0xc2, 0x98, 0xde, | 3951 | 0x4d, 0xb4, 0x8b, 0x35, 0x1f, 0xf4, 0x13, 0x7d, 0x15, 0xf9, 0xe9, 0x95, |
3930 | 0x3d, 0xfe, 0x46, 0xbe, 0xf4, 0x8e, 0x77, 0x13, 0x98, 0x4f, 0x4d, 0x7a, | 3952 | 0x45, 0x63, 0x1b, 0xcf, 0x7c, 0xbe, 0x5e, 0xc5, 0x35, 0xb1, 0x7f, 0x44, |
3931 | 0x67, 0xe7, 0x1a, 0x99, 0xa3, 0x6b, 0x72, 0xaa, 0x41, 0x55, 0xef, 0x6d, | 3953 | 0x61, 0x4c, 0xff, 0x1e, 0x7f, 0x23, 0x5f, 0x7a, 0xcf, 0xf9, 0x77, 0xe6, |
3932 | 0x38, 0x16, 0xfc, 0xe3, 0x08, 0xec, 0x93, 0x6b, 0xa0, 0xa9, 0x3d, 0x01, | 3954 | 0x53, 0x63, 0xfe, 0x59, 0x3b, 0x37, 0x73, 0x72, 0x43, 0x4e, 0xd5, 0xab, |
3933 | 0x6c, 0x16, 0xe9, 0x55, 0x39, 0xd1, 0xf1, 0x27, 0xc4, 0xb5, 0x77, 0x58, | 3955 | 0xea, 0xbd, 0x2b, 0x55, 0x1b, 0xfe, 0x71, 0x00, 0xf6, 0xc9, 0x35, 0x50, |
3934 | 0x99, 0xf2, 0x65, 0x8d, 0xb2, 0x9b, 0x83, 0x2c, 0x97, 0x33, 0xf2, 0x47, | 3956 | 0xd7, 0x1e, 0x02, 0x36, 0x8b, 0x75, 0xaa, 0x9c, 0xe8, 0xf4, 0x43, 0xe2, |
3935 | 0xce, 0x15, 0x55, 0x6b, 0x9d, 0x47, 0x5e, 0x12, 0x38, 0xa5, 0x72, 0xb2, | 3957 | 0xd9, 0x3b, 0xac, 0x4c, 0xf9, 0xb2, 0x95, 0xb2, 0x97, 0x83, 0xac, 0x96, |
3936 | 0x16, 0x7c, 0x0b, 0xbf, 0xf7, 0xe2, 0xd7, 0xb1, 0x16, 0xa3, 0xea, 0x8c, | 3958 | 0x33, 0xf2, 0x9f, 0xaa, 0x97, 0x54, 0xad, 0x75, 0x06, 0x79, 0x49, 0x68, |
3937 | 0x82, 0x7e, 0xae, 0xd9, 0x4c, 0xc1, 0x7f, 0xe8, 0x96, 0x65, 0x16, 0x10, | 3959 | 0x5a, 0xe5, 0x64, 0x0d, 0xf8, 0x16, 0x7e, 0xef, 0xd9, 0x2f, 0x62, 0x2d, |
3938 | 0x0f, 0x53, 0xea, 0x9c, 0x0b, 0xd7, 0xf1, 0x6f, 0x2b, 0xff, 0x2c, 0x15, | 3960 | 0x5a, 0xea, 0x4c, 0x83, 0x7e, 0xbe, 0x5e, 0x4f, 0xc1, 0x7f, 0xe8, 0xb6, |
3939 | 0xc8, 0xe6, 0x4c, 0x04, 0x74, 0x34, 0x65, 0x9f, 0x86, 0xd2, 0xc3, 0x13, | 3961 | 0x6d, 0x16, 0x10, 0x0f, 0x53, 0xea, 0x5c, 0x0c, 0xd7, 0xf1, 0x61, 0xe5, |
3940 | 0x0a, 0xf3, 0x1a, 0xe7, 0xe0, 0xb0, 0x96, 0x06, 0x44, 0xce, 0x65, 0x64, | 3962 | 0x9f, 0x65, 0x01, 0xb2, 0x39, 0x1b, 0xc3, 0x38, 0x9a, 0xb2, 0x4f, 0x43, |
3941 | 0x0e, 0x6b, 0x38, 0xb0, 0x44, 0x1d, 0x50, 0xb6, 0x93, 0xd2, 0x06, 0xd9, | 3963 | 0xe9, 0xe1, 0x21, 0x85, 0x79, 0x8d, 0xf3, 0x70, 0x58, 0xcb, 0x3d, 0x22, |
3942 | 0x1f, 0x01, 0xf6, 0x30, 0x4e, 0x51, 0xc6, 0x61, 0xac, 0x8b, 0x5e, 0x09, | 3964 | 0xe7, 0x33, 0x32, 0x85, 0x35, 0x1c, 0x5a, 0xa6, 0x0e, 0x28, 0xdb, 0x31, |
3943 | 0x9c, 0x81, 0x8c, 0x4f, 0x01, 0x23, 0x2c, 0xb4, 0xcb, 0xf7, 0x6a, 0xbe, | 3965 | 0x69, 0x82, 0xec, 0x4f, 0x00, 0x7b, 0x18, 0xd3, 0x94, 0x71, 0x14, 0xeb, |
3944 | 0x4c, 0x2f, 0xf1, 0x5c, 0xbf, 0x3e, 0x35, 0xd2, 0x47, 0x1c, 0x25, 0xd5, | 3966 | 0xa2, 0x53, 0x42, 0x67, 0x21, 0xe3, 0x69, 0x60, 0x84, 0xb9, 0x66, 0x79, |
3945 | 0xda, 0x9c, 0xcc, 0x9d, 0x66, 0xce, 0x3e, 0xa9, 0xce, 0x0c, 0x04, 0xd4, | 3967 | 0x69, 0x31, 0x90, 0xe9, 0xcb, 0x3c, 0xef, 0xaf, 0x8f, 0x0f, 0x74, 0x11, |
3946 | 0x99, 0x15, 0x37, 0x67, 0x76, 0xbf, 0x5d, 0x8c, 0x59, 0x15, 0xee, 0xb5, | 3968 | 0x47, 0x49, 0x65, 0x71, 0x4a, 0xa6, 0x66, 0x99, 0xb3, 0x8f, 0xa9, 0x33, |
3947 | 0x09, 0x6c, 0x67, 0x18, 0xe3, 0x6e, 0x24, 0x5f, 0x37, 0x57, 0x1d, 0x07, | 3969 | 0x06, 0x21, 0x75, 0xc6, 0xc5, 0xcb, 0x99, 0xbd, 0x6f, 0x0f, 0x63, 0x56, |
3948 | 0xbf, 0x97, 0xe7, 0xa3, 0x99, 0xbc, 0xc4, 0x79, 0x76, 0x7a, 0xc2, 0xc6, | 3970 | 0x84, 0x7b, 0x6d, 0x02, 0xdb, 0xe9, 0xc7, 0xbc, 0x37, 0x92, 0xaf, 0x97, |
3949 | 0xfc, 0x97, 0xe1, 0x3f, 0xe7, 0x4a, 0x3c, 0x27, 0x5d, 0xc0, 0x0a, 0xcb, | 3971 | 0xab, 0x0e, 0x83, 0xde, 0x8b, 0x33, 0x56, 0x26, 0x2f, 0x0e, 0xcf, 0x5b, |
3950 | 0xc8, 0xe5, 0x22, 0x73, 0xc6, 0x8f, 0x43, 0x6f, 0xbc, 0x2e, 0x8c, 0x1a, | 3972 | 0x8f, 0xba, 0xe0, 0x7f, 0x15, 0xfe, 0x73, 0xaa, 0x74, 0x2f, 0xf8, 0x2c, |
3951 | 0xf0, 0x03, 0x2b, 0xea, 0xdd, 0xcf, 0xa8, 0xdd, 0x40, 0x0e, 0x1b, 0xd1, | 3973 | 0x60, 0x85, 0x65, 0xe4, 0x62, 0x91, 0x39, 0xe3, 0x47, 0xa1, 0x37, 0x5e, |
3952 | 0xf6, 0x43, 0xd7, 0x79, 0xb3, 0xcd, 0xb3, 0x07, 0x9e, 0xc5, 0x3f, 0x0b, | 3974 | 0x17, 0x06, 0x0d, 0xf8, 0x81, 0x35, 0xf5, 0x7e, 0xa1, 0xe5, 0xae, 0x20, |
3953 | 0x3f, 0x7a, 0x5e, 0xf8, 0x4e, 0xd6, 0xed, 0x26, 0xf3, 0xa5, 0xab, 0xf0, | 3975 | 0x87, 0x8d, 0x69, 0x87, 0xa0, 0xeb, 0xbc, 0xd9, 0xe4, 0xdb, 0x03, 0xdf, |
3954 | 0x7b, 0x99, 0x58, 0x06, 0x36, 0x94, 0x0f, 0x77, 0x80, 0xe7, 0xdf, 0xc4, | 3976 | 0x35, 0x3e, 0x07, 0x3f, 0xba, 0x24, 0x7c, 0xef, 0xe7, 0x9d, 0x3a, 0xf3, |
3955 | 0xbd, 0x9c, 0xc3, 0x71, 0xa2, 0xf1, 0x15, 0x29, 0x44, 0x02, 0x32, 0x14, | 3977 | 0xa5, 0xcb, 0xf0, 0x7b, 0x99, 0x78, 0x06, 0x36, 0x94, 0x8f, 0xb6, 0x80, |
3956 | 0xb9, 0x22, 0x9b, 0xe1, 0xc9, 0x34, 0x79, 0xdd, 0x8a, 0x8e, 0x8a, 0xa6, | 3978 | 0xe6, 0xdf, 0xc6, 0xbd, 0x5c, 0x95, 0xf3, 0x58, 0xce, 0x9a, 0x14, 0x62, |
3957 | 0xe8, 0x0d, 0xee, 0x86, 0x0d, 0xde, 0x84, 0xbf, 0x6b, 0xf7, 0x72, 0xfd, | 3979 | 0x21, 0xe9, 0x8b, 0x5d, 0x92, 0x6d, 0xf0, 0x64, 0x9a, 0xbc, 0x61, 0x5b, |
3958 | 0x54, 0x91, 0x18, 0xea, 0x59, 0x75, 0xb6, 0xe0, 0xaa, 0xc5, 0x3a, 0x20, | 3980 | 0x83, 0xa2, 0xa9, 0xf1, 0x7a, 0x0f, 0xc0, 0x06, 0xaf, 0xc2, 0xdf, 0x35, |
3959 | 0xdf, 0xc5, 0xfe, 0x1f, 0x6a, 0x8c, 0xbb, 0x7b, 0x77, 0xac, 0x43, 0x93, | 3981 | 0xfb, 0xb9, 0x7e, 0xaa, 0x48, 0x0c, 0xf5, 0x84, 0x3a, 0x8b, 0x70, 0xd9, |
3960 | 0x3f, 0x77, 0x8e, 0xbb, 0x2c, 0x97, 0x47, 0xd2, 0x69, 0x6b, 0xa1, 0x73, | 3982 | 0x66, 0x1d, 0x90, 0xef, 0xfb, 0xfe, 0x95, 0x9a, 0xe3, 0xfa, 0xde, 0x1d, |
3961 | 0xd9, 0xa3, 0x73, 0xd6, 0xa3, 0x53, 0xf1, 0xe8, 0x5c, 0x5d, 0xa5, 0xb3, | 3983 | 0xeb, 0xd0, 0xa4, 0xcf, 0xe3, 0x71, 0xbf, 0xed, 0xd1, 0xc8, 0x71, 0x9a, |
3962 | 0x07, 0x76, 0xd0, 0x6c, 0x9e, 0x00, 0xde, 0x48, 0xc6, 0x9b, 0xcd, 0x34, | 3984 | 0x1a, 0xc6, 0xb9, 0xe8, 0x8f, 0x73, 0xce, 0x1f, 0x67, 0xc1, 0x1f, 0xe7, |
3963 | 0xf2, 0xb2, 0xd9, 0xe1, 0x69, 0xb5, 0xe7, 0xaa, 0x27, 0x46, 0xc7, 0x93, | 3985 | 0xf2, 0xfa, 0x38, 0x0f, 0xc2, 0x0e, 0xea, 0xf5, 0xa7, 0x80, 0x37, 0x92, |
3964 | 0x96, 0x2b, 0x7f, 0x58, 0x81, 0x4c, 0xc3, 0x1e, 0xf3, 0xe2, 0x62, 0x75, | 3986 | 0x4e, 0xbd, 0x9e, 0x46, 0x5e, 0x36, 0xd9, 0x3f, 0xa1, 0xf6, 0x5e, 0xf5, |
3965 | 0xee, 0x07, 0xba, 0xfb, 0x85, 0x5d, 0xf0, 0x03, 0x4f, 0x23, 0x96, 0x5c, | 3987 | 0xc4, 0x8b, 0x43, 0x49, 0xdb, 0x93, 0x3f, 0xac, 0x40, 0x26, 0x60, 0x8f, |
3966 | 0x1c, 0x3f, 0x6f, 0x49, 0x7e, 0xdb, 0x27, 0x75, 0xd8, 0x7b, 0x0f, 0xdf, | 3988 | 0x79, 0xf1, 0xb0, 0x3a, 0xf7, 0x03, 0xbd, 0xfd, 0xc2, 0x36, 0xf8, 0x81, |
3967 | 0x27, 0x35, 0xa5, 0xeb, 0xe2, 0x78, 0xb5, 0xf6, 0x34, 0xf2, 0x23, 0xf6, | 3989 | 0xc7, 0x10, 0x4b, 0x9c, 0xe1, 0x25, 0x5b, 0xf2, 0x7b, 0x7e, 0x4d, 0x87, |
3968 | 0xdf, 0x4e, 0x0c, 0xb6, 0xab, 0x52, 0x8b, 0xec, 0x3a, 0xcb, 0xfd, 0x21, | 3990 | 0xbd, 0x77, 0x20, 0x2e, 0xbd, 0x09, 0xdb, 0x71, 0x86, 0x2b, 0x8b, 0x8f, |
3969 | 0xf4, 0xab, 0xd4, 0xba, 0x21, 0xf7, 0x6e, 0x55, 0x57, 0xb9, 0x52, 0x0c, | 3991 | 0xa9, 0x3d, 0xe1, 0xa6, 0xc4, 0xbd, 0xd0, 0x67, 0x79, 0x78, 0x61, 0xb1, |
3970 | 0x41, 0x8f, 0x26, 0x6c, 0x3e, 0x84, 0xb6, 0x30, 0xec, 0xa0, 0x0f, 0xed, | 3992 | 0x3c, 0x7c, 0x8e, 0xfb, 0x43, 0xe8, 0xb7, 0xb0, 0xd8, 0x0e, 0xb9, 0xb7, |
3971 | 0x3f, 0xc7, 0xda, 0x8e, 0xa0, 0x7d, 0xa5, 0x73, 0x5c, 0xe1, 0x58, 0x4b, | 3993 | 0xab, 0xba, 0xca, 0xa5, 0x62, 0x04, 0x7a, 0x34, 0x61, 0xf3, 0x11, 0xb4, |
3972 | 0xce, 0x39, 0x37, 0x11, 0x73, 0xdf, 0x84, 0x1f, 0x1d, 0x44, 0x9f, 0x61, | 3994 | 0x45, 0x61, 0x07, 0x5d, 0x68, 0x7f, 0x0d, 0x6b, 0x3b, 0x86, 0xf6, 0xb5, |
3973 | 0xf4, 0xf9, 0x14, 0xc6, 0xe1, 0x3b, 0xcd, 0x1b, 0xf1, 0xd4, 0x00, 0x4f, | 3995 | 0xd6, 0x61, 0x85, 0x63, 0x6d, 0x39, 0x5f, 0xbd, 0x8a, 0x98, 0xfb, 0x16, |
3974 | 0x7a, 0x0b, 0x4f, 0x0d, 0xf0, 0x03, 0xdf, 0x79, 0x92, 0x35, 0xe8, 0x61, | 3996 | 0xfc, 0x68, 0x2f, 0xfa, 0xf4, 0xa3, 0xcf, 0x0e, 0x13, 0xf8, 0x2a, 0x53, |
3975 | 0x39, 0x5a, 0xe4, 0x19, 0x29, 0xbe, 0x17, 0x6f, 0x4a, 0x00, 0x98, 0xb4, | 3997 | 0xbe, 0x21, 0x4d, 0x2e, 0x68, 0xd2, 0x1b, 0x68, 0x72, 0x41, 0x0f, 0x7c, |
3976 | 0xed, 0x64, 0x34, 0xdc, 0x50, 0xb5, 0x1e, 0xda, 0xd6, 0x50, 0xbc, 0x2a, | 3998 | 0xe7, 0x19, 0xd6, 0xa0, 0xfb, 0xe5, 0x64, 0x91, 0x67, 0xaa, 0xf8, 0xee, |
3977 | 0x2a, 0xce, 0x44, 0x8e, 0x22, 0x7e, 0xdd, 0x74, 0xba, 0xe5, 0x75, 0x6f, | 3999 | 0xb5, 0x29, 0x21, 0x60, 0xd2, 0xa6, 0x33, 0x56, 0x74, 0x45, 0xd5, 0x7a, |
3978 | 0xac, 0x15, 0xe1, 0xfe, 0xe5, 0xda, 0xb1, 0x8e, 0x95, 0xae, 0x8d, 0xbf, | 4000 | 0x68, 0x5b, 0x7d, 0x4e, 0x45, 0x54, 0x9c, 0x89, 0x9d, 0x44, 0xfc, 0xba, |
3979 | 0x6a, 0x19, 0xde, 0xbc, 0x7a, 0x31, 0xd6, 0xaf, 0xa2, 0xef, 0xb5, 0xf1, | 4001 | 0x5a, 0x6d, 0x97, 0x37, 0xfc, 0xb9, 0xd6, 0x84, 0xfb, 0x97, 0x1b, 0xe7, |
3980 | 0xcb, 0xb5, 0x8d, 0xfa, 0xde, 0x44, 0xdf, 0xb6, 0x96, 0xbe, 0x37, 0xd1, | 4002 | 0x3a, 0x55, 0x1a, 0x1d, 0xfe, 0x81, 0x6d, 0xf8, 0x7c, 0x75, 0x62, 0xae, |
3981 | 0xaf, 0x1b, 0x71, 0xb0, 0x5b, 0xcd, 0x69, 0x16, 0x7c, 0x5d, 0x2f, 0xaa, | 4003 | 0x76, 0xf4, 0x1d, 0x1d, 0xbe, 0xb8, 0x78, 0xa3, 0xbe, 0x13, 0xe8, 0xdb, |
3982 | 0xf7, 0xb4, 0x21, 0x77, 0x8e, 0x69, 0x12, 0x53, 0x67, 0xdc, 0x5a, 0x49, | 4004 | 0xd4, 0xd0, 0x77, 0x02, 0xfd, 0xda, 0x11, 0x07, 0xdb, 0x15, 0x4f, 0x93, |
3983 | 0xd4, 0x8c, 0x68, 0xef, 0xa8, 0xf7, 0x28, 0x1b, 0x18, 0xb3, 0x80, 0x7b, | 4005 | 0xa0, 0xeb, 0x4a, 0x51, 0xbd, 0x0b, 0x0c, 0xb9, 0x73, 0x4e, 0x93, 0x98, |
3984 | 0xe7, 0x27, 0xb4, 0x54, 0x35, 0x87, 0x98, 0xf5, 0x30, 0xf1, 0x53, 0xdc, | 4006 | 0x3a, 0xe3, 0xd5, 0x4a, 0x2c, 0x33, 0xa6, 0xbd, 0xa7, 0xde, 0xa3, 0x6c, |
3985 | 0x46, 0xcc, 0xac, 0x80, 0x5e, 0xad, 0xd8, 0xe0, 0x79, 0x6a, 0xd8, 0xc5, | 4007 | 0x60, 0xc8, 0x06, 0xee, 0x9d, 0x19, 0xd5, 0x52, 0x95, 0x1c, 0x62, 0xd6, |
3986 | 0x2d, 0xe2, 0xec, 0x87, 0x0d, 0x75, 0xae, 0x21, 0xad, 0x6a, 0x76, 0x95, | 4008 | 0x2e, 0xe2, 0x27, 0xc7, 0x45, 0xcc, 0x5c, 0xc0, 0x78, 0x8b, 0xc5, 0x15, |
3987 | 0xa2, 0x98, 0xc9, 0x11, 0x9e, 0x65, 0xf8, 0x0c, 0xd6, 0xe5, 0x57, 0xd0, | 4009 | 0x9e, 0xc1, 0x86, 0x5d, 0xbc, 0x4d, 0x9c, 0xbd, 0xcb, 0x50, 0x67, 0x1e, |
3988 | 0x96, 0x44, 0x7c, 0x3c, 0xa0, 0x25, 0xcf, 0x8f, 0xe3, 0xfa, 0x49, 0x5c, | 4010 | 0xd2, 0xaa, 0x66, 0xb7, 0x50, 0x14, 0x33, 0x39, 0xc0, 0x33, 0x0e, 0xf7, |
3989 | 0xc3, 0x1f, 0x2f, 0x64, 0x71, 0xff, 0x49, 0x5c, 0x4f, 0x6b, 0xa9, 0x7a, | 4011 | 0x63, 0x5d, 0x7e, 0x0e, 0x6d, 0x49, 0xc4, 0xc7, 0xc3, 0x5a, 0x72, 0x69, |
3990 | 0x16, 0xd7, 0x4f, 0xe1, 0x7a, 0xca, 0x64, 0x9e, 0xf2, 0xaa, 0x95, 0xd1, | 4012 | 0x18, 0xd7, 0x8f, 0xe0, 0x1a, 0xfe, 0x78, 0x2e, 0x8b, 0xfb, 0x8f, 0xe0, |
3991 | 0x6c, 0xd0, 0xb2, 0xcf, 0x8f, 0xe3, 0xd3, 0x4a, 0x8f, 0xf7, 0xa0, 0xa7, | 4013 | 0x7a, 0x42, 0x4b, 0xd5, 0xb2, 0xb8, 0x7e, 0x14, 0xd7, 0x49, 0x93, 0x79, |
3992 | 0x22, 0xf7, 0xda, 0x62, 0xe0, 0x69, 0x9f, 0x96, 0xae, 0x76, 0x81, 0xc6, | 4014 | 0xca, 0x0f, 0xec, 0x8c, 0xe6, 0x62, 0x2c, 0x77, 0x69, 0x18, 0x9f, 0xc6, |
3993 | 0x00, 0x9e, 0xa7, 0x4d, 0xed, 0xf7, 0xc6, 0x67, 0xcd, 0xe9, 0x63, 0xaa, | 4015 | 0xf1, 0x78, 0x0f, 0x7a, 0x2a, 0x72, 0xaf, 0x2d, 0x0e, 0x9a, 0x0e, 0x6a, |
3994 | 0xe6, 0x64, 0x24, 0x32, 0xc0, 0xc9, 0x87, 0x91, 0x07, 0x68, 0x92, 0xb6, | 4016 | 0xe9, 0x4a, 0x1b, 0xc6, 0xe8, 0xc1, 0xf3, 0xb4, 0xa9, 0x43, 0xfe, 0xfc, |
3995 | 0x9e, 0x93, 0x42, 0x1c, 0x7e, 0xa5, 0x6a, 0x48, 0x2a, 0x94, 0xc7, 0xef, | 4017 | 0xac, 0x39, 0xdd, 0xad, 0x6a, 0x4e, 0x46, 0x22, 0x03, 0x9c, 0x7c, 0x1c, |
3996 | 0xbc, 0x24, 0x47, 0x71, 0xbf, 0x4a, 0x5b, 0x60, 0xbf, 0x3f, 0x95, 0x42, | 4018 | 0x79, 0x80, 0x26, 0x69, 0xfb, 0x49, 0x29, 0x38, 0xf0, 0x2b, 0x15, 0x43, |
3997 | 0x99, 0xb8, 0x9f, 0x75, 0x26, 0xd6, 0xa6, 0x58, 0x5f, 0xca, 0x41, 0x06, | 4019 | 0x52, 0x91, 0x3c, 0x7e, 0xe7, 0x25, 0x39, 0x88, 0xfb, 0x15, 0xda, 0x02, |
3998 | 0x21, 0xda, 0xef, 0x06, 0x35, 0x31, 0xf7, 0x8c, 0x34, 0xe2, 0xb2, 0x96, | 4020 | 0xfb, 0xfd, 0x89, 0x14, 0xca, 0xc4, 0xfd, 0xac, 0x33, 0xb1, 0x36, 0xc5, |
3999 | 0xac, 0x72, 0xdf, 0xaf, 0x91, 0xb9, 0x6c, 0xf1, 0xfd, 0xb1, 0x69, 0xee, | 4021 | 0xfa, 0x52, 0x0e, 0x32, 0x88, 0xd0, 0x7e, 0x6f, 0x50, 0x13, 0xf3, 0xce, |
4000 | 0x23, 0x16, 0x8c, 0x04, 0xeb, 0x23, 0xaa, 0xbe, 0x1e, 0x77, 0xf7, 0x07, | 4022 | 0x55, 0x23, 0x2e, 0x6b, 0xc9, 0x0a, 0xf7, 0xfd, 0xdc, 0xcc, 0x45, 0x9b, |
4001 | 0x5b, 0xcf, 0xa4, 0xf8, 0xeb, 0x85, 0xe3, 0x7e, 0x0d, 0xcf, 0xbb, 0xf5, | 4023 | 0xef, 0x28, 0x4d, 0x70, 0x1f, 0xb1, 0x60, 0x24, 0x58, 0x1f, 0x51, 0xf5, |
4002 | 0xac, 0x54, 0xfd, 0x9d, 0xba, 0xe0, 0x3b, 0x00, 0xe7, 0xa0, 0x8b, 0xcb, | 4024 | 0x75, 0xc7, 0xdb, 0x1f, 0xe4, 0xb8, 0x63, 0xe0, 0xb7, 0xb1, 0x6e, 0xc5, |
4003 | 0x2a, 0x37, 0xe6, 0x1e, 0xee, 0xbb, 0xe5, 0x54, 0xc8, 0x61, 0x8a, 0xac, | 4025 | 0x79, 0xbf, 0x80, 0xe7, 0xbd, 0x7a, 0x56, 0xaa, 0xf6, 0x5e, 0x5d, 0xf0, |
4004 | 0x91, 0xf9, 0xfb, 0x76, 0xbe, 0x1c, 0xd7, 0xf3, 0x4a, 0x3e, 0x67, 0x40, | 4026 | 0xbd, 0x81, 0xf3, 0xd0, 0xc5, 0x45, 0x95, 0x1b, 0x73, 0x0f, 0xf7, 0xfd, |
4005 | 0x53, 0xe2, 0xf4, 0xbb, 0xd9, 0x10, 0xf7, 0xdf, 0xf8, 0x8c, 0x7c, 0xf3, | 4027 | 0x72, 0x2a, 0xe4, 0x30, 0x45, 0xd6, 0xc8, 0x82, 0x7d, 0xbb, 0x40, 0x8e, |
4006 | 0x2e, 0xdf, 0xe4, 0x99, 0xf2, 0x38, 0x0c, 0xff, 0xc9, 0xf7, 0x2b, 0x9e, | 4028 | 0x9b, 0x69, 0x25, 0x9d, 0x47, 0x30, 0xa6, 0x38, 0xf4, 0xbb, 0xd9, 0x08, |
4007 | 0x93, 0x5c, 0x9c, 0x35, 0x1e, 0x03, 0xb1, 0x31, 0x8f, 0xdf, 0x77, 0xe5, | 4029 | 0xf7, 0xdf, 0xf8, 0x8c, 0x7c, 0xf9, 0x3a, 0xdd, 0xa4, 0x99, 0xf2, 0x38, |
4008 | 0x37, 0xeb, 0xc9, 0x2f, 0x57, 0xfe, 0x2f, 0x4a, 0x87, 0x15, 0x8b, 0xe3, | 4030 | 0x0e, 0xff, 0xc9, 0x77, 0x32, 0x9e, 0x94, 0x9c, 0xc3, 0x1a, 0x8f, 0x81, |
4009 | 0xf9, 0xb5, 0x8f, 0xbd, 0x4a, 0x77, 0x15, 0x75, 0x7e, 0xd7, 0x97, 0x81, | 4031 | 0xd8, 0x98, 0xc7, 0xef, 0xeb, 0xf2, 0x9b, 0xf4, 0xe5, 0x97, 0x2b, 0xbf, |
4010 | 0x5f, 0xbf, 0xdb, 0xd8, 0xf6, 0xc6, 0x2d, 0xf2, 0xf6, 0x10, 0xcf, 0x43, | 4032 | 0xa4, 0x74, 0xb8, 0x60, 0x73, 0xbe, 0xa0, 0xf6, 0x31, 0xa2, 0x74, 0xb7, |
4011 | 0x0c, 0xda, 0x42, 0xfe, 0x39, 0x0f, 0xc6, 0x30, 0x7f, 0xaf, 0xd5, 0x9f, | 4033 | 0xa0, 0xce, 0xfd, 0x06, 0x32, 0x08, 0xea, 0x77, 0x37, 0xb6, 0xbd, 0x61, |
4012 | 0x83, 0x3f, 0xcf, 0xfb, 0x95, 0x0f, 0xf9, 0xfd, 0xe4, 0x16, 0xe9, 0xca, | 4034 | 0x9b, 0xb4, 0xdd, 0xce, 0xf3, 0x10, 0xbd, 0xae, 0x90, 0x7e, 0xf2, 0xc1, |
4013 | 0x98, 0x86, 0xc5, 0xd8, 0xf0, 0xb8, 0xb7, 0x3f, 0xf0, 0x7f, 0x43, 0xce, | 4035 | 0x18, 0x16, 0xec, 0xb5, 0x06, 0x3c, 0x04, 0x7c, 0xde, 0xaa, 0x7c, 0x48, |
4014 | 0xae, 0x2c, 0x02, 0x09, 0x99, 0xf5, 0xde, 0xbf, 0xde, 0xc0, 0x1e, 0xd6, | 4036 | 0x6f, 0x64, 0xbb, 0xb4, 0x65, 0x4c, 0xc3, 0x66, 0x6c, 0xf8, 0x84, 0xbf, |
4015 | 0xef, 0x35, 0x37, 0x32, 0x67, 0xad, 0xbb, 0xf3, 0xae, 0x6c, 0x30, 0xef, | 4037 | 0x3f, 0xf0, 0x77, 0x21, 0x67, 0x4f, 0x16, 0xa1, 0x84, 0x4c, 0xfa, 0xef, |
4016 | 0x8a, 0x37, 0xef, 0xea, 0x7d, 0xf2, 0x5b, 0x99, 0xb7, 0x31, 0x67, 0xda, | 4038 | 0xf8, 0xde, 0xc0, 0x1e, 0x36, 0xef, 0x35, 0xbb, 0x99, 0x73, 0xf6, 0x75, |
4017 | 0xdc, 0x46, 0xf6, 0x28, 0xea, 0xdd, 0xb0, 0x15, 0x23, 0x18, 0xb4, 0x9d, | 4039 | 0xbe, 0x17, 0x6e, 0xc0, 0xf7, 0x82, 0xcf, 0x77, 0xe5, 0x16, 0xe9, 0x5d, |
4018 | 0x7b, 0xd5, 0x50, 0x99, 0x57, 0xbb, 0x76, 0x79, 0x16, 0xb1, 0xb0, 0x5c, | 4040 | 0x98, 0x71, 0xc1, 0x33, 0x6d, 0xee, 0x46, 0xf6, 0x28, 0xea, 0x7f, 0x5f, |
4019 | 0x76, 0x73, 0xec, 0xb2, 0xc3, 0x5a, 0xf6, 0xbb, 0xf1, 0xc0, 0x77, 0xb9, | 4041 | 0xac, 0x19, 0xe1, 0xb0, 0x5b, 0xbd, 0x59, 0x0d, 0x95, 0x79, 0xb5, 0x67, |
4020 | 0xbe, 0xa8, 0xce, 0xbb, 0xcc, 0x3a, 0x6e, 0xdd, 0xab, 0x5c, 0x6e, 0x8d, | 4042 | 0x97, 0xe7, 0x10, 0x0b, 0xcb, 0x65, 0x2f, 0xc7, 0x2e, 0x57, 0x59, 0xcb, |
4021 | 0xa9, 0x0f, 0x32, 0x9e, 0x0e, 0xe6, 0x65, 0x82, 0xef, 0x94, 0xe3, 0xfa, | 4043 | 0x7e, 0x3f, 0x1a, 0xf8, 0xfe, 0xd7, 0x67, 0xd4, 0x79, 0x97, 0xc9, 0xaa, |
4022 | 0x11, 0xb9, 0xb2, 0xa0, 0xf6, 0xac, 0xbc, 0xbd, 0x21, 0xee, 0xf9, 0xa8, | 4044 | 0x57, 0xf7, 0x2a, 0x97, 0x1b, 0x63, 0xea, 0x0e, 0xc6, 0xd3, 0xde, 0xbc, |
4023 | 0xfd, 0x6f, 0xf8, 0xb5, 0x49, 0xe5, 0xd7, 0x97, 0x17, 0xd4, 0x3d, 0x17, | 4045 | 0x8c, 0xf2, 0xbd, 0x65, 0x5c, 0xef, 0x96, 0x4b, 0x73, 0x6a, 0xcf, 0xca, |
4024 | 0x2b, 0x39, 0x13, 0xf0, 0xfb, 0xc8, 0x25, 0xac, 0x07, 0xa4, 0x80, 0x9c, | 4046 | 0xdf, 0x1b, 0xe2, 0x9e, 0x8f, 0xda, 0xff, 0x86, 0x5f, 0x1b, 0x53, 0x7e, |
4025 | 0xfb, 0xac, 0x75, 0x78, 0x0b, 0x71, 0x0e, 0x69, 0x2d, 0x83, 0xd6, 0xe5, | 4047 | 0x7d, 0x75, 0x4e, 0xdd, 0xf3, 0xb0, 0x52, 0x75, 0x14, 0x7e, 0x1f, 0xb9, |
4026 | 0x05, 0xd9, 0xc2, 0x33, 0x25, 0x65, 0xb5, 0xcf, 0xe6, 0xd6, 0xc5, 0xa7, | 4048 | 0x84, 0xbd, 0x55, 0x0a, 0xc8, 0xb9, 0xcf, 0xd9, 0x0f, 0x6f, 0x27, 0xce, |
4027 | 0xc5, 0xff, 0x7f, 0x1d, 0x41, 0x2f, 0x16, 0xf2, 0x5c, 0x0b, 0xdf, 0x73, | 4049 | 0xe1, 0x58, 0xab, 0x18, 0xeb, 0xe2, 0x9c, 0x6c, 0xe7, 0x99, 0x92, 0xb2, |
4028 | 0xa6, 0xaf, 0x40, 0x1e, 0x34, 0xc1, 0x7d, 0x9c, 0x66, 0xd3, 0xad, 0x9b, | 4050 | 0xda, 0x67, 0xf3, 0xea, 0xe2, 0x13, 0x12, 0xfc, 0x4f, 0x88, 0xb0, 0x1f, |
4029 | 0x37, 0xb1, 0x2e, 0xda, 0xf8, 0x0e, 0x05, 0xfe, 0x0e, 0xc3, 0x7e, 0xb0, | 4051 | 0x0b, 0x79, 0xae, 0x85, 0xef, 0xd2, 0xd2, 0x57, 0x20, 0x0f, 0x1a, 0xe5, |
4030 | 0x4e, 0x56, 0xdb, 0x79, 0xcd, 0xdc, 0xc3, 0xbf, 0x66, 0x60, 0xfb, 0x3f, | 4052 | 0x3e, 0x4e, 0xbd, 0xee, 0xd5, 0xcd, 0xeb, 0x58, 0x17, 0x4d, 0x7c, 0xef, |
4031 | 0xe8, 0xf3, 0x49, 0x14, 0x38, 0x46, 0x00, 0x00, 0x00 }; | 4053 | 0x02, 0x7f, 0xc7, 0x61, 0x3f, 0x58, 0x27, 0xeb, 0xed, 0xbc, 0x66, 0xee, |
4054 | 0x11, 0x5c, 0x33, 0xb0, 0xfd, 0x3f, 0xd4, 0x46, 0x90, 0x7c, 0xb4, 0x45, | ||
4055 | 0x00, 0x00, 0x00 }; | ||
4032 | 4056 | ||
4033 | static const u32 bnx2_TXP_b09FwData[(0xd0/4) + 1] = { | 4057 | static const u32 bnx2_TXP_b09FwData[(0xd0/4) + 1] = { |
4034 | 0x00000000, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000010, | 4058 | 0x00000000, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000010, |
@@ -4041,37 +4065,38 @@ static const u32 bnx2_TXP_b09FwData[(0xd0/4) + 1] = { | |||
4041 | 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, | 4065 | 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
4042 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; | 4066 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; |
4043 | static const u32 bnx2_TXP_b09FwRodata[(0x30/4) + 1] = { | 4067 | static const u32 bnx2_TXP_b09FwRodata[(0x30/4) + 1] = { |
4044 | 0x08004060, 0x0800408c, 0x080040d4, 0x080040d4, 0x08003f60, 0x08003f8c, | 4068 | 0x08003fdc, 0x08004008, 0x08004050, 0x08004050, 0x08003edc, 0x08003f08, |
4045 | 0x08003f8c, 0x080040d4, 0x080040d4, 0x080040d4, 0x08003ff4, 0x00000000, | 4069 | 0x08003f08, 0x08004050, 0x08004050, 0x08004050, 0x08003f70, 0x00000000, |
4046 | 0x00000000 }; | 4070 | 0x00000000 }; |
4047 | 4071 | ||
4048 | static struct fw_info bnx2_txp_fw_09 = { | 4072 | static struct fw_info bnx2_txp_fw_09 = { |
4073 | /* Firmware version: 3.7.1 */ | ||
4049 | .ver_major = 0x3, | 4074 | .ver_major = 0x3, |
4050 | .ver_minor = 0x4, | 4075 | .ver_minor = 0x7, |
4051 | .ver_fix = 0x3, | 4076 | .ver_fix = 0x1, |
4052 | 4077 | ||
4053 | .start_addr = 0x08000060, | 4078 | .start_addr = 0x08000060, |
4054 | 4079 | ||
4055 | .text_addr = 0x08000000, | 4080 | .text_addr = 0x08000000, |
4056 | .text_len = 0x4634, | 4081 | .text_len = 0x45b0, |
4057 | .text_index = 0x0, | 4082 | .text_index = 0x0, |
4058 | .gz_text = bnx2_TXP_b09FwText, | 4083 | .gz_text = bnx2_TXP_b09FwText, |
4059 | .gz_text_len = sizeof(bnx2_TXP_b09FwText), | 4084 | .gz_text_len = sizeof(bnx2_TXP_b09FwText), |
4060 | 4085 | ||
4061 | .data_addr = 0x08004680, | 4086 | .data_addr = 0x08004600, |
4062 | .data_len = 0xd0, | 4087 | .data_len = 0xd0, |
4063 | .data_index = 0x0, | 4088 | .data_index = 0x0, |
4064 | .data = bnx2_TXP_b09FwData, | 4089 | .data = bnx2_TXP_b09FwData, |
4065 | 4090 | ||
4066 | .sbss_addr = 0x08004750, | 4091 | .sbss_addr = 0x080046d0, |
4067 | .sbss_len = 0x8c, | 4092 | .sbss_len = 0x8c, |
4068 | .sbss_index = 0x0, | 4093 | .sbss_index = 0x0, |
4069 | 4094 | ||
4070 | .bss_addr = 0x080047e0, | 4095 | .bss_addr = 0x08004760, |
4071 | .bss_len = 0xa20, | 4096 | .bss_len = 0xa20, |
4072 | .bss_index = 0x0, | 4097 | .bss_index = 0x0, |
4073 | 4098 | ||
4074 | .rodata_addr = 0x08004638, | 4099 | .rodata_addr = 0x080045b0, |
4075 | .rodata_len = 0x30, | 4100 | .rodata_len = 0x30, |
4076 | .rodata_index = 0x0, | 4101 | .rodata_index = 0x0, |
4077 | .rodata = bnx2_TXP_b09FwRodata, | 4102 | .rodata = bnx2_TXP_b09FwRodata, |
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c index 7a045a37056..084f0292ea6 100644 --- a/drivers/net/bonding/bond_3ad.c +++ b/drivers/net/bonding/bond_3ad.c | |||
@@ -126,7 +126,7 @@ static struct aggregator *__get_active_agg(struct aggregator *aggregator); | |||
126 | 126 | ||
127 | // ================= main 802.3ad protocol functions ================== | 127 | // ================= main 802.3ad protocol functions ================== |
128 | static int ad_lacpdu_send(struct port *port); | 128 | static int ad_lacpdu_send(struct port *port); |
129 | static int ad_marker_send(struct port *port, struct marker *marker); | 129 | static int ad_marker_send(struct port *port, struct bond_marker *marker); |
130 | static void ad_mux_machine(struct port *port); | 130 | static void ad_mux_machine(struct port *port); |
131 | static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port); | 131 | static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port); |
132 | static void ad_tx_machine(struct port *port); | 132 | static void ad_tx_machine(struct port *port); |
@@ -139,8 +139,8 @@ static void ad_initialize_port(struct port *port, int lacp_fast); | |||
139 | static void ad_initialize_lacpdu(struct lacpdu *Lacpdu); | 139 | static void ad_initialize_lacpdu(struct lacpdu *Lacpdu); |
140 | static void ad_enable_collecting_distributing(struct port *port); | 140 | static void ad_enable_collecting_distributing(struct port *port); |
141 | static void ad_disable_collecting_distributing(struct port *port); | 141 | static void ad_disable_collecting_distributing(struct port *port); |
142 | static void ad_marker_info_received(struct marker *marker_info, struct port *port); | 142 | static void ad_marker_info_received(struct bond_marker *marker_info, struct port *port); |
143 | static void ad_marker_response_received(struct marker *marker, struct port *port); | 143 | static void ad_marker_response_received(struct bond_marker *marker, struct port *port); |
144 | 144 | ||
145 | 145 | ||
146 | ///////////////////////////////////////////////////////////////////////////////// | 146 | ///////////////////////////////////////////////////////////////////////////////// |
@@ -889,12 +889,12 @@ static int ad_lacpdu_send(struct port *port) | |||
889 | * Returns: 0 on success | 889 | * Returns: 0 on success |
890 | * < 0 on error | 890 | * < 0 on error |
891 | */ | 891 | */ |
892 | static int ad_marker_send(struct port *port, struct marker *marker) | 892 | static int ad_marker_send(struct port *port, struct bond_marker *marker) |
893 | { | 893 | { |
894 | struct slave *slave = port->slave; | 894 | struct slave *slave = port->slave; |
895 | struct sk_buff *skb; | 895 | struct sk_buff *skb; |
896 | struct marker_header *marker_header; | 896 | struct bond_marker_header *marker_header; |
897 | int length = sizeof(struct marker_header); | 897 | int length = sizeof(struct bond_marker_header); |
898 | struct mac_addr lacpdu_multicast_address = AD_MULTICAST_LACPDU_ADDR; | 898 | struct mac_addr lacpdu_multicast_address = AD_MULTICAST_LACPDU_ADDR; |
899 | 899 | ||
900 | skb = dev_alloc_skb(length + 16); | 900 | skb = dev_alloc_skb(length + 16); |
@@ -909,7 +909,7 @@ static int ad_marker_send(struct port *port, struct marker *marker) | |||
909 | skb->network_header = skb->mac_header + ETH_HLEN; | 909 | skb->network_header = skb->mac_header + ETH_HLEN; |
910 | skb->protocol = PKT_TYPE_LACPDU; | 910 | skb->protocol = PKT_TYPE_LACPDU; |
911 | 911 | ||
912 | marker_header = (struct marker_header *)skb_put(skb, length); | 912 | marker_header = (struct bond_marker_header *)skb_put(skb, length); |
913 | 913 | ||
914 | marker_header->ad_header.destination_address = lacpdu_multicast_address; | 914 | marker_header->ad_header.destination_address = lacpdu_multicast_address; |
915 | /* Note: source addres is set to be the member's PERMANENT address, because we use it | 915 | /* Note: source addres is set to be the member's PERMANENT address, because we use it |
@@ -1709,7 +1709,7 @@ static void ad_disable_collecting_distributing(struct port *port) | |||
1709 | */ | 1709 | */ |
1710 | static void ad_marker_info_send(struct port *port) | 1710 | static void ad_marker_info_send(struct port *port) |
1711 | { | 1711 | { |
1712 | struct marker marker; | 1712 | struct bond_marker marker; |
1713 | u16 index; | 1713 | u16 index; |
1714 | 1714 | ||
1715 | // fill the marker PDU with the appropriate values | 1715 | // fill the marker PDU with the appropriate values |
@@ -1742,13 +1742,14 @@ static void ad_marker_info_send(struct port *port) | |||
1742 | * @port: the port we're looking at | 1742 | * @port: the port we're looking at |
1743 | * | 1743 | * |
1744 | */ | 1744 | */ |
1745 | static void ad_marker_info_received(struct marker *marker_info,struct port *port) | 1745 | static void ad_marker_info_received(struct bond_marker *marker_info, |
1746 | struct port *port) | ||
1746 | { | 1747 | { |
1747 | struct marker marker; | 1748 | struct bond_marker marker; |
1748 | 1749 | ||
1749 | // copy the received marker data to the response marker | 1750 | // copy the received marker data to the response marker |
1750 | //marker = *marker_info; | 1751 | //marker = *marker_info; |
1751 | memcpy(&marker, marker_info, sizeof(struct marker)); | 1752 | memcpy(&marker, marker_info, sizeof(struct bond_marker)); |
1752 | // change the marker subtype to marker response | 1753 | // change the marker subtype to marker response |
1753 | marker.tlv_type=AD_MARKER_RESPONSE_SUBTYPE; | 1754 | marker.tlv_type=AD_MARKER_RESPONSE_SUBTYPE; |
1754 | // send the marker response | 1755 | // send the marker response |
@@ -1767,7 +1768,8 @@ static void ad_marker_info_received(struct marker *marker_info,struct port *port | |||
1767 | * response for marker PDU's, in this stage, but only to respond to marker | 1768 | * response for marker PDU's, in this stage, but only to respond to marker |
1768 | * information. | 1769 | * information. |
1769 | */ | 1770 | */ |
1770 | static void ad_marker_response_received(struct marker *marker, struct port *port) | 1771 | static void ad_marker_response_received(struct bond_marker *marker, |
1772 | struct port *port) | ||
1771 | { | 1773 | { |
1772 | marker=NULL; // just to satisfy the compiler | 1774 | marker=NULL; // just to satisfy the compiler |
1773 | port=NULL; // just to satisfy the compiler | 1775 | port=NULL; // just to satisfy the compiler |
@@ -2164,15 +2166,15 @@ static void bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave, u | |||
2164 | case AD_TYPE_MARKER: | 2166 | case AD_TYPE_MARKER: |
2165 | // No need to convert fields to Little Endian since we don't use the marker's fields. | 2167 | // No need to convert fields to Little Endian since we don't use the marker's fields. |
2166 | 2168 | ||
2167 | switch (((struct marker *)lacpdu)->tlv_type) { | 2169 | switch (((struct bond_marker *)lacpdu)->tlv_type) { |
2168 | case AD_MARKER_INFORMATION_SUBTYPE: | 2170 | case AD_MARKER_INFORMATION_SUBTYPE: |
2169 | dprintk("Received Marker Information on port %d\n", port->actor_port_number); | 2171 | dprintk("Received Marker Information on port %d\n", port->actor_port_number); |
2170 | ad_marker_info_received((struct marker *)lacpdu, port); | 2172 | ad_marker_info_received((struct bond_marker *)lacpdu, port); |
2171 | break; | 2173 | break; |
2172 | 2174 | ||
2173 | case AD_MARKER_RESPONSE_SUBTYPE: | 2175 | case AD_MARKER_RESPONSE_SUBTYPE: |
2174 | dprintk("Received Marker Response on port %d\n", port->actor_port_number); | 2176 | dprintk("Received Marker Response on port %d\n", port->actor_port_number); |
2175 | ad_marker_response_received((struct marker *)lacpdu, port); | 2177 | ad_marker_response_received((struct bond_marker *)lacpdu, port); |
2176 | break; | 2178 | break; |
2177 | 2179 | ||
2178 | default: | 2180 | default: |
diff --git a/drivers/net/bonding/bond_3ad.h b/drivers/net/bonding/bond_3ad.h index 862952fa6fd..f1655726494 100644 --- a/drivers/net/bonding/bond_3ad.h +++ b/drivers/net/bonding/bond_3ad.h | |||
@@ -92,7 +92,7 @@ typedef enum { | |||
92 | typedef enum { | 92 | typedef enum { |
93 | AD_MARKER_INFORMATION_SUBTYPE = 1, // marker imformation subtype | 93 | AD_MARKER_INFORMATION_SUBTYPE = 1, // marker imformation subtype |
94 | AD_MARKER_RESPONSE_SUBTYPE // marker response subtype | 94 | AD_MARKER_RESPONSE_SUBTYPE // marker response subtype |
95 | } marker_subtype_t; | 95 | } bond_marker_subtype_t; |
96 | 96 | ||
97 | // timers types(43.4.9 in the 802.3ad standard) | 97 | // timers types(43.4.9 in the 802.3ad standard) |
98 | typedef enum { | 98 | typedef enum { |
@@ -148,7 +148,7 @@ typedef struct lacpdu_header { | |||
148 | } lacpdu_header_t; | 148 | } lacpdu_header_t; |
149 | 149 | ||
150 | // Marker Protocol Data Unit(PDU) structure(43.5.3.2 in the 802.3ad standard) | 150 | // Marker Protocol Data Unit(PDU) structure(43.5.3.2 in the 802.3ad standard) |
151 | typedef struct marker { | 151 | typedef struct bond_marker { |
152 | u8 subtype; // = 0x02 (marker PDU) | 152 | u8 subtype; // = 0x02 (marker PDU) |
153 | u8 version_number; // = 0x01 | 153 | u8 version_number; // = 0x01 |
154 | u8 tlv_type; // = 0x01 (marker information) | 154 | u8 tlv_type; // = 0x01 (marker information) |
@@ -161,12 +161,12 @@ typedef struct marker { | |||
161 | u8 tlv_type_terminator; // = 0x00 | 161 | u8 tlv_type_terminator; // = 0x00 |
162 | u8 terminator_length; // = 0x00 | 162 | u8 terminator_length; // = 0x00 |
163 | u8 reserved_90[90]; // = 0 | 163 | u8 reserved_90[90]; // = 0 |
164 | } marker_t; | 164 | } bond_marker_t; |
165 | 165 | ||
166 | typedef struct marker_header { | 166 | typedef struct bond_marker_header { |
167 | struct ad_header ad_header; | 167 | struct ad_header ad_header; |
168 | struct marker marker; | 168 | struct bond_marker marker; |
169 | } marker_header_t; | 169 | } bond_marker_header_t; |
170 | 170 | ||
171 | #pragma pack() | 171 | #pragma pack() |
172 | 172 | ||
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c index 80c0c8c415e..855dc10ffa1 100644 --- a/drivers/net/bonding/bond_sysfs.c +++ b/drivers/net/bonding/bond_sysfs.c | |||
@@ -55,7 +55,7 @@ static int expected_refcount = -1; | |||
55 | static struct class *netdev_class; | 55 | static struct class *netdev_class; |
56 | /*--------------------------- Data Structures -----------------------------*/ | 56 | /*--------------------------- Data Structures -----------------------------*/ |
57 | 57 | ||
58 | /* Bonding sysfs lock. Why can't we just use the subsytem lock? | 58 | /* Bonding sysfs lock. Why can't we just use the subsystem lock? |
59 | * Because kobject_register tries to acquire the subsystem lock. If | 59 | * Because kobject_register tries to acquire the subsystem lock. If |
60 | * we already hold the lock (which we would if the user was creating | 60 | * we already hold the lock (which we would if the user was creating |
61 | * a new bond through the sysfs interface), we deadlock. | 61 | * a new bond through the sysfs interface), we deadlock. |
diff --git a/drivers/net/cris/eth_v10.c b/drivers/net/cris/eth_v10.c index 314b2f68f78..edd6828f0a7 100644 --- a/drivers/net/cris/eth_v10.c +++ b/drivers/net/cris/eth_v10.c | |||
@@ -234,6 +234,7 @@ | |||
234 | #include <linux/spinlock.h> | 234 | #include <linux/spinlock.h> |
235 | #include <linux/errno.h> | 235 | #include <linux/errno.h> |
236 | #include <linux/init.h> | 236 | #include <linux/init.h> |
237 | #include <linux/bitops.h> | ||
237 | 238 | ||
238 | #include <linux/if.h> | 239 | #include <linux/if.h> |
239 | #include <linux/mii.h> | 240 | #include <linux/mii.h> |
@@ -247,7 +248,6 @@ | |||
247 | #include <asm/irq.h> | 248 | #include <asm/irq.h> |
248 | #include <asm/dma.h> | 249 | #include <asm/dma.h> |
249 | #include <asm/system.h> | 250 | #include <asm/system.h> |
250 | #include <asm/bitops.h> | ||
251 | #include <asm/ethernet.h> | 251 | #include <asm/ethernet.h> |
252 | #include <asm/cache.h> | 252 | #include <asm/cache.h> |
253 | 253 | ||
diff --git a/drivers/net/cxgb3/adapter.h b/drivers/net/cxgb3/adapter.h index 04426170338..2a3df145850 100644 --- a/drivers/net/cxgb3/adapter.h +++ b/drivers/net/cxgb3/adapter.h | |||
@@ -41,9 +41,9 @@ | |||
41 | #include <linux/timer.h> | 41 | #include <linux/timer.h> |
42 | #include <linux/cache.h> | 42 | #include <linux/cache.h> |
43 | #include <linux/mutex.h> | 43 | #include <linux/mutex.h> |
44 | #include <linux/bitops.h> | ||
44 | #include "t3cdev.h" | 45 | #include "t3cdev.h" |
45 | #include <asm/semaphore.h> | 46 | #include <asm/semaphore.h> |
46 | #include <asm/bitops.h> | ||
47 | #include <asm/io.h> | 47 | #include <asm/io.h> |
48 | 48 | ||
49 | typedef irqreturn_t(*intr_handler_t) (int, void *); | 49 | typedef irqreturn_t(*intr_handler_t) (int, void *); |
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index 27ac010900a..3286d2a0a87 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c | |||
@@ -542,7 +542,8 @@ dm9000_probe(struct platform_device *pdev) | |||
542 | 542 | ||
543 | if (id_val != DM9000_ID) { | 543 | if (id_val != DM9000_ID) { |
544 | printk("%s: wrong id: 0x%08x\n", CARDNAME, id_val); | 544 | printk("%s: wrong id: 0x%08x\n", CARDNAME, id_val); |
545 | goto release; | 545 | ret = -ENODEV; |
546 | goto out; | ||
546 | } | 547 | } |
547 | 548 | ||
548 | /* from this point we assume that we have found a DM9000 */ | 549 | /* from this point we assume that we have found a DM9000 */ |
@@ -602,8 +603,7 @@ dm9000_probe(struct platform_device *pdev) | |||
602 | } | 603 | } |
603 | return 0; | 604 | return 0; |
604 | 605 | ||
605 | release: | 606 | out: |
606 | out: | ||
607 | printk("%s: not found (%d).\n", CARDNAME, ret); | 607 | printk("%s: not found (%d).\n", CARDNAME, ret); |
608 | 608 | ||
609 | dm9000_release_board(pdev, db); | 609 | dm9000_release_board(pdev, db); |
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index 64f35e20fd4..3dbaec680b4 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c | |||
@@ -1324,7 +1324,7 @@ static inline int e100_exec_cb_wait(struct nic *nic, struct sk_buff *skb, | |||
1324 | if (!--counter) break; | 1324 | if (!--counter) break; |
1325 | } | 1325 | } |
1326 | 1326 | ||
1327 | /* ack any interupts, something could have been set */ | 1327 | /* ack any interrupts, something could have been set */ |
1328 | iowrite8(~0, &nic->csr->scb.stat_ack); | 1328 | iowrite8(~0, &nic->csr->scb.stat_ack); |
1329 | 1329 | ||
1330 | /* if the command failed, or is not OK, notify and return */ | 1330 | /* if the command failed, or is not OK, notify and return */ |
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 047263830e6..f1ce348470c 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -3590,7 +3590,7 @@ e1000_update_stats(struct e1000_adapter *adapter) | |||
3590 | 3590 | ||
3591 | spin_lock_irqsave(&adapter->stats_lock, flags); | 3591 | spin_lock_irqsave(&adapter->stats_lock, flags); |
3592 | 3592 | ||
3593 | /* these counters are modified from e1000_adjust_tbi_stats, | 3593 | /* these counters are modified from e1000_tbi_adjust_stats, |
3594 | * called from the interrupt context, so they must only | 3594 | * called from the interrupt context, so they must only |
3595 | * be written while holding adapter->stats_lock | 3595 | * be written while holding adapter->stats_lock |
3596 | */ | 3596 | */ |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index fe5ffac7ac5..2809c99906e 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
@@ -3218,7 +3218,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev, | |||
3218 | /* get adapter properties */ | 3218 | /* get adapter properties */ |
3219 | ret = ehea_sense_adapter_attr(adapter); | 3219 | ret = ehea_sense_adapter_attr(adapter); |
3220 | if (ret) { | 3220 | if (ret) { |
3221 | dev_err(&dev->dev, "sense_adapter_attr failed: %d", ret); | 3221 | dev_err(&dev->dev, "sense_adapter_attr failed: %d\n", ret); |
3222 | goto out_free_ad; | 3222 | goto out_free_ad; |
3223 | } | 3223 | } |
3224 | 3224 | ||
@@ -3226,7 +3226,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev, | |||
3226 | EHEA_NEQ, EHEA_MAX_ENTRIES_EQ, 1); | 3226 | EHEA_NEQ, EHEA_MAX_ENTRIES_EQ, 1); |
3227 | if (!adapter->neq) { | 3227 | if (!adapter->neq) { |
3228 | ret = -EIO; | 3228 | ret = -EIO; |
3229 | dev_err(&dev->dev, "NEQ creation failed"); | 3229 | dev_err(&dev->dev, "NEQ creation failed\n"); |
3230 | goto out_free_ad; | 3230 | goto out_free_ad; |
3231 | } | 3231 | } |
3232 | 3232 | ||
@@ -3237,7 +3237,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev, | |||
3237 | ehea_interrupt_neq, IRQF_DISABLED, | 3237 | ehea_interrupt_neq, IRQF_DISABLED, |
3238 | "ehea_neq", adapter); | 3238 | "ehea_neq", adapter); |
3239 | if (ret) { | 3239 | if (ret) { |
3240 | dev_err(&dev->dev, "requesting NEQ IRQ failed"); | 3240 | dev_err(&dev->dev, "requesting NEQ IRQ failed\n"); |
3241 | goto out_kill_eq; | 3241 | goto out_kill_eq; |
3242 | } | 3242 | } |
3243 | 3243 | ||
@@ -3247,7 +3247,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev, | |||
3247 | 3247 | ||
3248 | ret = ehea_setup_ports(adapter); | 3248 | ret = ehea_setup_ports(adapter); |
3249 | if (ret) { | 3249 | if (ret) { |
3250 | dev_err(&dev->dev, "setup_ports failed"); | 3250 | dev_err(&dev->dev, "setup_ports failed\n"); |
3251 | goto out_rem_dev_sysfs; | 3251 | goto out_rem_dev_sysfs; |
3252 | } | 3252 | } |
3253 | 3253 | ||
diff --git a/drivers/net/eth16i.c b/drivers/net/eth16i.c index 243fc6b354b..e3dd8b13690 100644 --- a/drivers/net/eth16i.c +++ b/drivers/net/eth16i.c | |||
@@ -170,7 +170,6 @@ static char *version = | |||
170 | 170 | ||
171 | 171 | ||
172 | /* Few macros */ | 172 | /* Few macros */ |
173 | #define BIT(a) ( (1 << (a)) ) | ||
174 | #define BITSET(ioaddr, bnum) ((outb(((inb(ioaddr)) | (bnum)), ioaddr))) | 173 | #define BITSET(ioaddr, bnum) ((outb(((inb(ioaddr)) | (bnum)), ioaddr))) |
175 | #define BITCLR(ioaddr, bnum) ((outb(((inb(ioaddr)) & (~(bnum))), ioaddr))) | 174 | #define BITCLR(ioaddr, bnum) ((outb(((inb(ioaddr)) & (~(bnum))), ioaddr))) |
176 | 175 | ||
diff --git a/drivers/net/fealnx.c b/drivers/net/fealnx.c index 43f7647ff24..7bb9c728a1d 100644 --- a/drivers/net/fealnx.c +++ b/drivers/net/fealnx.c | |||
@@ -111,7 +111,6 @@ MODULE_AUTHOR("Myson or whoever"); | |||
111 | MODULE_DESCRIPTION("Myson MTD-8xx 100/10M Ethernet PCI Adapter Driver"); | 111 | MODULE_DESCRIPTION("Myson MTD-8xx 100/10M Ethernet PCI Adapter Driver"); |
112 | MODULE_LICENSE("GPL"); | 112 | MODULE_LICENSE("GPL"); |
113 | module_param(max_interrupt_work, int, 0); | 113 | module_param(max_interrupt_work, int, 0); |
114 | //MODULE_PARM(min_pci_latency, "i"); | ||
115 | module_param(debug, int, 0); | 114 | module_param(debug, int, 0); |
116 | module_param(rx_copybreak, int, 0); | 115 | module_param(rx_copybreak, int, 0); |
117 | module_param(multicast_filter_limit, int, 0); | 116 | module_param(multicast_filter_limit, int, 0); |
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index cfbb7aacfe9..70ddf1acfd8 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
@@ -992,7 +992,7 @@ static void nv_enable_irq(struct net_device *dev) | |||
992 | if (np->msi_flags & NV_MSI_X_ENABLED) | 992 | if (np->msi_flags & NV_MSI_X_ENABLED) |
993 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); | 993 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); |
994 | else | 994 | else |
995 | enable_irq(dev->irq); | 995 | enable_irq(np->pci_dev->irq); |
996 | } else { | 996 | } else { |
997 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); | 997 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); |
998 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); | 998 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); |
@@ -1008,7 +1008,7 @@ static void nv_disable_irq(struct net_device *dev) | |||
1008 | if (np->msi_flags & NV_MSI_X_ENABLED) | 1008 | if (np->msi_flags & NV_MSI_X_ENABLED) |
1009 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); | 1009 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); |
1010 | else | 1010 | else |
1011 | disable_irq(dev->irq); | 1011 | disable_irq(np->pci_dev->irq); |
1012 | } else { | 1012 | } else { |
1013 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); | 1013 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); |
1014 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); | 1014 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); |
@@ -1607,7 +1607,7 @@ static void nv_do_rx_refill(unsigned long data) | |||
1607 | if (np->msi_flags & NV_MSI_X_ENABLED) | 1607 | if (np->msi_flags & NV_MSI_X_ENABLED) |
1608 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); | 1608 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); |
1609 | else | 1609 | else |
1610 | disable_irq(dev->irq); | 1610 | disable_irq(np->pci_dev->irq); |
1611 | } else { | 1611 | } else { |
1612 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); | 1612 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); |
1613 | } | 1613 | } |
@@ -1625,7 +1625,7 @@ static void nv_do_rx_refill(unsigned long data) | |||
1625 | if (np->msi_flags & NV_MSI_X_ENABLED) | 1625 | if (np->msi_flags & NV_MSI_X_ENABLED) |
1626 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); | 1626 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); |
1627 | else | 1627 | else |
1628 | enable_irq(dev->irq); | 1628 | enable_irq(np->pci_dev->irq); |
1629 | } else { | 1629 | } else { |
1630 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); | 1630 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); |
1631 | } | 1631 | } |
@@ -2408,13 +2408,13 @@ static int nv_rx_process_optimized(struct net_device *dev, int limit) | |||
2408 | struct fe_priv *np = netdev_priv(dev); | 2408 | struct fe_priv *np = netdev_priv(dev); |
2409 | u32 flags; | 2409 | u32 flags; |
2410 | u32 vlanflags = 0; | 2410 | u32 vlanflags = 0; |
2411 | u32 rx_processed_cnt = 0; | 2411 | int rx_work = 0; |
2412 | struct sk_buff *skb; | 2412 | struct sk_buff *skb; |
2413 | int len; | 2413 | int len; |
2414 | 2414 | ||
2415 | while((np->get_rx.ex != np->put_rx.ex) && | 2415 | while((np->get_rx.ex != np->put_rx.ex) && |
2416 | !((flags = le32_to_cpu(np->get_rx.ex->flaglen)) & NV_RX2_AVAIL) && | 2416 | !((flags = le32_to_cpu(np->get_rx.ex->flaglen)) & NV_RX2_AVAIL) && |
2417 | (rx_processed_cnt++ < limit)) { | 2417 | (rx_work < limit)) { |
2418 | 2418 | ||
2419 | dprintk(KERN_DEBUG "%s: nv_rx_process_optimized: flags 0x%x.\n", | 2419 | dprintk(KERN_DEBUG "%s: nv_rx_process_optimized: flags 0x%x.\n", |
2420 | dev->name, flags); | 2420 | dev->name, flags); |
@@ -2517,9 +2517,11 @@ next_pkt: | |||
2517 | np->get_rx.ex = np->first_rx.ex; | 2517 | np->get_rx.ex = np->first_rx.ex; |
2518 | if (unlikely(np->get_rx_ctx++ == np->last_rx_ctx)) | 2518 | if (unlikely(np->get_rx_ctx++ == np->last_rx_ctx)) |
2519 | np->get_rx_ctx = np->first_rx_ctx; | 2519 | np->get_rx_ctx = np->first_rx_ctx; |
2520 | |||
2521 | rx_work++; | ||
2520 | } | 2522 | } |
2521 | 2523 | ||
2522 | return rx_processed_cnt; | 2524 | return rx_work; |
2523 | } | 2525 | } |
2524 | 2526 | ||
2525 | static void set_bufsize(struct net_device *dev) | 2527 | static void set_bufsize(struct net_device *dev) |
@@ -3558,10 +3560,12 @@ static int nv_request_irq(struct net_device *dev, int intr_test) | |||
3558 | if (ret != 0 && np->msi_flags & NV_MSI_CAPABLE) { | 3560 | if (ret != 0 && np->msi_flags & NV_MSI_CAPABLE) { |
3559 | if ((ret = pci_enable_msi(np->pci_dev)) == 0) { | 3561 | if ((ret = pci_enable_msi(np->pci_dev)) == 0) { |
3560 | np->msi_flags |= NV_MSI_ENABLED; | 3562 | np->msi_flags |= NV_MSI_ENABLED; |
3563 | dev->irq = np->pci_dev->irq; | ||
3561 | if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0) { | 3564 | if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0) { |
3562 | printk(KERN_INFO "forcedeth: request_irq failed %d\n", ret); | 3565 | printk(KERN_INFO "forcedeth: request_irq failed %d\n", ret); |
3563 | pci_disable_msi(np->pci_dev); | 3566 | pci_disable_msi(np->pci_dev); |
3564 | np->msi_flags &= ~NV_MSI_ENABLED; | 3567 | np->msi_flags &= ~NV_MSI_ENABLED; |
3568 | dev->irq = np->pci_dev->irq; | ||
3565 | goto out_err; | 3569 | goto out_err; |
3566 | } | 3570 | } |
3567 | 3571 | ||
@@ -3624,7 +3628,7 @@ static void nv_do_nic_poll(unsigned long data) | |||
3624 | if (np->msi_flags & NV_MSI_X_ENABLED) | 3628 | if (np->msi_flags & NV_MSI_X_ENABLED) |
3625 | disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); | 3629 | disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); |
3626 | else | 3630 | else |
3627 | disable_irq_lockdep(dev->irq); | 3631 | disable_irq_lockdep(np->pci_dev->irq); |
3628 | mask = np->irqmask; | 3632 | mask = np->irqmask; |
3629 | } else { | 3633 | } else { |
3630 | if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { | 3634 | if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { |
@@ -3642,6 +3646,8 @@ static void nv_do_nic_poll(unsigned long data) | |||
3642 | } | 3646 | } |
3643 | np->nic_poll_irq = 0; | 3647 | np->nic_poll_irq = 0; |
3644 | 3648 | ||
3649 | /* disable_irq() contains synchronize_irq, thus no irq handler can run now */ | ||
3650 | |||
3645 | if (np->recover_error) { | 3651 | if (np->recover_error) { |
3646 | np->recover_error = 0; | 3652 | np->recover_error = 0; |
3647 | printk(KERN_INFO "forcedeth: MAC in recoverable error state\n"); | 3653 | printk(KERN_INFO "forcedeth: MAC in recoverable error state\n"); |
@@ -3678,7 +3684,6 @@ static void nv_do_nic_poll(unsigned long data) | |||
3678 | } | 3684 | } |
3679 | } | 3685 | } |
3680 | 3686 | ||
3681 | /* FIXME: Do we need synchronize_irq(dev->irq) here? */ | ||
3682 | 3687 | ||
3683 | writel(mask, base + NvRegIrqMask); | 3688 | writel(mask, base + NvRegIrqMask); |
3684 | pci_push(base); | 3689 | pci_push(base); |
@@ -3691,7 +3696,7 @@ static void nv_do_nic_poll(unsigned long data) | |||
3691 | if (np->msi_flags & NV_MSI_X_ENABLED) | 3696 | if (np->msi_flags & NV_MSI_X_ENABLED) |
3692 | enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); | 3697 | enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); |
3693 | else | 3698 | else |
3694 | enable_irq_lockdep(dev->irq); | 3699 | enable_irq_lockdep(np->pci_dev->irq); |
3695 | } else { | 3700 | } else { |
3696 | if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { | 3701 | if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { |
3697 | nv_nic_irq_rx(0, dev); | 3702 | nv_nic_irq_rx(0, dev); |
@@ -4948,7 +4953,7 @@ static int nv_close(struct net_device *dev) | |||
4948 | #ifdef CONFIG_FORCEDETH_NAPI | 4953 | #ifdef CONFIG_FORCEDETH_NAPI |
4949 | napi_disable(&np->napi); | 4954 | napi_disable(&np->napi); |
4950 | #endif | 4955 | #endif |
4951 | synchronize_irq(dev->irq); | 4956 | synchronize_irq(np->pci_dev->irq); |
4952 | 4957 | ||
4953 | del_timer_sync(&np->oom_kick); | 4958 | del_timer_sync(&np->oom_kick); |
4954 | del_timer_sync(&np->nic_poll); | 4959 | del_timer_sync(&np->nic_poll); |
diff --git a/drivers/net/fs_enet/fs_enet-main.c b/drivers/net/fs_enet/fs_enet-main.c index 04c6faec88d..f2a4d399a6e 100644 --- a/drivers/net/fs_enet/fs_enet-main.c +++ b/drivers/net/fs_enet/fs_enet-main.c | |||
@@ -88,7 +88,7 @@ static void skb_align(struct sk_buff *skb, int align) | |||
88 | static int fs_enet_rx_napi(struct napi_struct *napi, int budget) | 88 | static int fs_enet_rx_napi(struct napi_struct *napi, int budget) |
89 | { | 89 | { |
90 | struct fs_enet_private *fep = container_of(napi, struct fs_enet_private, napi); | 90 | struct fs_enet_private *fep = container_of(napi, struct fs_enet_private, napi); |
91 | struct net_device *dev = to_net_dev(fep->dev); | 91 | struct net_device *dev = fep->ndev; |
92 | const struct fs_platform_info *fpi = fep->fpi; | 92 | const struct fs_platform_info *fpi = fep->fpi; |
93 | cbd_t __iomem *bdp; | 93 | cbd_t __iomem *bdp; |
94 | struct sk_buff *skb, *skbn, *skbt; | 94 | struct sk_buff *skb, *skbn, *skbt; |
@@ -217,7 +217,7 @@ static int fs_enet_rx_napi(struct napi_struct *napi, int budget) | |||
217 | 217 | ||
218 | fep->cur_rx = bdp; | 218 | fep->cur_rx = bdp; |
219 | 219 | ||
220 | if (received >= budget) { | 220 | if (received < budget) { |
221 | /* done */ | 221 | /* done */ |
222 | netif_rx_complete(dev, napi); | 222 | netif_rx_complete(dev, napi); |
223 | (*fep->ops->napi_enable_rx)(dev); | 223 | (*fep->ops->napi_enable_rx)(dev); |
@@ -807,20 +807,23 @@ static int fs_enet_open(struct net_device *dev) | |||
807 | int r; | 807 | int r; |
808 | int err; | 808 | int err; |
809 | 809 | ||
810 | napi_enable(&fep->napi); | 810 | if (fep->fpi->use_napi) |
811 | napi_enable(&fep->napi); | ||
811 | 812 | ||
812 | /* Install our interrupt handler. */ | 813 | /* Install our interrupt handler. */ |
813 | r = fs_request_irq(dev, fep->interrupt, "fs_enet-mac", fs_enet_interrupt); | 814 | r = fs_request_irq(dev, fep->interrupt, "fs_enet-mac", fs_enet_interrupt); |
814 | if (r != 0) { | 815 | if (r != 0) { |
815 | printk(KERN_ERR DRV_MODULE_NAME | 816 | printk(KERN_ERR DRV_MODULE_NAME |
816 | ": %s Could not allocate FS_ENET IRQ!", dev->name); | 817 | ": %s Could not allocate FS_ENET IRQ!", dev->name); |
817 | napi_disable(&fep->napi); | 818 | if (fep->fpi->use_napi) |
819 | napi_disable(&fep->napi); | ||
818 | return -EINVAL; | 820 | return -EINVAL; |
819 | } | 821 | } |
820 | 822 | ||
821 | err = fs_init_phy(dev); | 823 | err = fs_init_phy(dev); |
822 | if(err) { | 824 | if (err) { |
823 | napi_disable(&fep->napi); | 825 | if (fep->fpi->use_napi) |
826 | napi_disable(&fep->napi); | ||
824 | return err; | 827 | return err; |
825 | } | 828 | } |
826 | phy_start(fep->phydev); | 829 | phy_start(fep->phydev); |
@@ -1232,7 +1235,7 @@ static int __devinit fs_enet_probe(struct of_device *ofdev, | |||
1232 | fpi->rx_ring = 32; | 1235 | fpi->rx_ring = 32; |
1233 | fpi->tx_ring = 32; | 1236 | fpi->tx_ring = 32; |
1234 | fpi->rx_copybreak = 240; | 1237 | fpi->rx_copybreak = 240; |
1235 | fpi->use_napi = 0; | 1238 | fpi->use_napi = 1; |
1236 | fpi->napi_weight = 17; | 1239 | fpi->napi_weight = 17; |
1237 | 1240 | ||
1238 | ret = find_phy(ofdev->node, fpi); | 1241 | ret = find_phy(ofdev->node, fpi); |
@@ -1249,11 +1252,11 @@ static int __devinit fs_enet_probe(struct of_device *ofdev, | |||
1249 | goto out_free_fpi; | 1252 | goto out_free_fpi; |
1250 | } | 1253 | } |
1251 | 1254 | ||
1252 | SET_MODULE_OWNER(ndev); | ||
1253 | dev_set_drvdata(&ofdev->dev, ndev); | 1255 | dev_set_drvdata(&ofdev->dev, ndev); |
1254 | 1256 | ||
1255 | fep = netdev_priv(ndev); | 1257 | fep = netdev_priv(ndev); |
1256 | fep->dev = &ofdev->dev; | 1258 | fep->dev = &ofdev->dev; |
1259 | fep->ndev = ndev; | ||
1257 | fep->fpi = fpi; | 1260 | fep->fpi = fpi; |
1258 | fep->ops = match->data; | 1261 | fep->ops = match->data; |
1259 | 1262 | ||
@@ -1288,10 +1291,11 @@ static int __devinit fs_enet_probe(struct of_device *ofdev, | |||
1288 | ndev->stop = fs_enet_close; | 1291 | ndev->stop = fs_enet_close; |
1289 | ndev->get_stats = fs_enet_get_stats; | 1292 | ndev->get_stats = fs_enet_get_stats; |
1290 | ndev->set_multicast_list = fs_set_multicast_list; | 1293 | ndev->set_multicast_list = fs_set_multicast_list; |
1291 | if (fpi->use_napi) { | 1294 | |
1292 | ndev->poll = fs_enet_rx_napi; | 1295 | if (fpi->use_napi) |
1293 | ndev->weight = fpi->napi_weight; | 1296 | netif_napi_add(ndev, &fep->napi, fs_enet_rx_napi, |
1294 | } | 1297 | fpi->napi_weight); |
1298 | |||
1295 | ndev->ethtool_ops = &fs_ethtool_ops; | 1299 | ndev->ethtool_ops = &fs_ethtool_ops; |
1296 | ndev->do_ioctl = fs_ioctl; | 1300 | ndev->do_ioctl = fs_ioctl; |
1297 | 1301 | ||
diff --git a/drivers/net/fs_enet/fs_enet.h b/drivers/net/fs_enet/fs_enet.h index baf6477165a..c675e29aadc 100644 --- a/drivers/net/fs_enet/fs_enet.h +++ b/drivers/net/fs_enet/fs_enet.h | |||
@@ -75,6 +75,7 @@ struct phy_info { | |||
75 | struct fs_enet_private { | 75 | struct fs_enet_private { |
76 | struct napi_struct napi; | 76 | struct napi_struct napi; |
77 | struct device *dev; /* pointer back to the device (must be initialized first) */ | 77 | struct device *dev; /* pointer back to the device (must be initialized first) */ |
78 | struct net_device *ndev; | ||
78 | spinlock_t lock; /* during all ops except TX pckt processing */ | 79 | spinlock_t lock; /* during all ops except TX pckt processing */ |
79 | spinlock_t tx_lock; /* during fs_start_xmit and fs_tx */ | 80 | spinlock_t tx_lock; /* during fs_start_xmit and fs_tx */ |
80 | struct fs_platform_info *fpi; | 81 | struct fs_platform_info *fpi; |
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index cc288d8f6a5..38268d7335a 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
@@ -956,10 +956,12 @@ static int gfar_enet_open(struct net_device *dev) | |||
956 | } | 956 | } |
957 | 957 | ||
958 | err = startup_gfar(dev); | 958 | err = startup_gfar(dev); |
959 | if (err) | 959 | if (err) { |
960 | #ifdef CONFIG_GFAR_NAPI | 960 | #ifdef CONFIG_GFAR_NAPI |
961 | napi_disable(&priv->napi); | 961 | napi_disable(&priv->napi); |
962 | #endif | 962 | #endif |
963 | return err; | ||
964 | } | ||
963 | 965 | ||
964 | netif_start_queue(dev); | 966 | netif_start_queue(dev); |
965 | 967 | ||
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h index c16cc8b946a..46cd7735e6f 100644 --- a/drivers/net/gianfar.h +++ b/drivers/net/gianfar.h | |||
@@ -749,7 +749,6 @@ struct gfar_private { | |||
749 | uint32_t msg_enable; | 749 | uint32_t msg_enable; |
750 | 750 | ||
751 | /* Network Statistics */ | 751 | /* Network Statistics */ |
752 | struct net_device_stats stats; | ||
753 | struct gfar_extra_stats extra_stats; | 752 | struct gfar_extra_stats extra_stats; |
754 | }; | 753 | }; |
755 | 754 | ||
diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c index ad9e327c3b0..e0119f6a331 100644 --- a/drivers/net/hamradio/6pack.c +++ b/drivers/net/hamradio/6pack.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * devices like TTY. It interfaces between a raw TTY and the | 3 | * devices like TTY. It interfaces between a raw TTY and the |
4 | * kernel's AX.25 protocol layers. | 4 | * kernel's AX.25 protocol layers. |
5 | * | 5 | * |
6 | * Authors: Andreas Könsgen <ajk@iehk.rwth-aachen.de> | 6 | * Authors: Andreas Könsgen <ajk@iehk.rwth-aachen.de> |
7 | * Ralf Baechle DL5RB <ralf@linux-mips.org> | 7 | * Ralf Baechle DL5RB <ralf@linux-mips.org> |
8 | * | 8 | * |
9 | * Quite a lot of stuff "stolen" by Joerg Reuter from slip.c, written by | 9 | * Quite a lot of stuff "stolen" by Joerg Reuter from slip.c, written by |
diff --git a/drivers/net/hamradio/Kconfig b/drivers/net/hamradio/Kconfig index 36d2c7d4f4d..62d5d5cfd6a 100644 --- a/drivers/net/hamradio/Kconfig +++ b/drivers/net/hamradio/Kconfig | |||
@@ -64,7 +64,7 @@ config DMASCC | |||
64 | dmascc. If you don't pass any parameter to the driver, all | 64 | dmascc. If you don't pass any parameter to the driver, all |
65 | possible I/O addresses are probed. This could irritate other devices | 65 | possible I/O addresses are probed. This could irritate other devices |
66 | that are currently not in use. You may specify the list of addresses | 66 | that are currently not in use. You may specify the list of addresses |
67 | to be probed by "dmascc=addr1,addr2,..." (when compiled into the | 67 | to be probed by "dmascc.io=addr1,addr2,..." (when compiled into the |
68 | kernel image) or "io=addr1,addr2,..." (when loaded as a module). The | 68 | kernel image) or "io=addr1,addr2,..." (when loaded as a module). The |
69 | network interfaces will be called dmascc0 and dmascc1 for the board | 69 | network interfaces will be called dmascc0 and dmascc1 for the board |
70 | detected first, dmascc2 and dmascc3 for the second one, and so on. | 70 | detected first, dmascc2 and dmascc3 for the second one, and so on. |
diff --git a/drivers/net/hamradio/dmascc.c b/drivers/net/hamradio/dmascc.c index bc02e469480..11b83dae00a 100644 --- a/drivers/net/hamradio/dmascc.c +++ b/drivers/net/hamradio/dmascc.c | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | 22 | ||
23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
24 | #include <linux/bitops.h> | ||
24 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
25 | #include <linux/errno.h> | 26 | #include <linux/errno.h> |
26 | #include <linux/if_arp.h> | 27 | #include <linux/if_arp.h> |
@@ -35,7 +36,6 @@ | |||
35 | #include <linux/sockios.h> | 36 | #include <linux/sockios.h> |
36 | #include <linux/workqueue.h> | 37 | #include <linux/workqueue.h> |
37 | #include <asm/atomic.h> | 38 | #include <asm/atomic.h> |
38 | #include <asm/bitops.h> | ||
39 | #include <asm/dma.h> | 39 | #include <asm/dma.h> |
40 | #include <asm/io.h> | 40 | #include <asm/io.h> |
41 | #include <asm/irq.h> | 41 | #include <asm/irq.h> |
diff --git a/drivers/net/ibm_newemac/mal.c b/drivers/net/ibm_newemac/mal.c index a680eb05ba6..9a88f71db00 100644 --- a/drivers/net/ibm_newemac/mal.c +++ b/drivers/net/ibm_newemac/mal.c | |||
@@ -322,7 +322,7 @@ void mal_poll_disable(struct mal_instance *mal, struct mal_commac *commac) | |||
322 | msleep(1); | 322 | msleep(1); |
323 | 323 | ||
324 | /* Synchronize with the MAL NAPI poller */ | 324 | /* Synchronize with the MAL NAPI poller */ |
325 | __napi_synchronize(&mal->napi); | 325 | napi_synchronize(&mal->napi); |
326 | } | 326 | } |
327 | 327 | ||
328 | void mal_poll_enable(struct mal_instance *mal, struct mal_commac *commac) | 328 | void mal_poll_enable(struct mal_instance *mal, struct mal_commac *commac) |
diff --git a/drivers/net/irda/actisys-sir.c b/drivers/net/irda/actisys-sir.c index ccf6ec548a6..736d2473b7e 100644 --- a/drivers/net/irda/actisys-sir.c +++ b/drivers/net/irda/actisys-sir.c | |||
@@ -21,7 +21,7 @@ | |||
21 | * published by the Free Software Foundation; either version 2 of | 21 | * published by the Free Software Foundation; either version 2 of |
22 | * the License, or (at your option) any later version. | 22 | * the License, or (at your option) any later version. |
23 | * | 23 | * |
24 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 24 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
25 | * provide warranty for any of this software. This material is | 25 | * provide warranty for any of this software. This material is |
26 | * provided "AS-IS" and at no charge. | 26 | * provided "AS-IS" and at no charge. |
27 | * | 27 | * |
diff --git a/drivers/net/irda/actisys.c b/drivers/net/irda/actisys.c index b2e31f4a384..ae0b80a5680 100644 --- a/drivers/net/irda/actisys.c +++ b/drivers/net/irda/actisys.c | |||
@@ -19,7 +19,7 @@ | |||
19 | * published by the Free Software Foundation; either version 2 of | 19 | * published by the Free Software Foundation; either version 2 of |
20 | * the License, or (at your option) any later version. | 20 | * the License, or (at your option) any later version. |
21 | * | 21 | * |
22 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 22 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
23 | * provide warranty for any of this software. This material is | 23 | * provide warranty for any of this software. This material is |
24 | * provided "AS-IS" and at no charge. | 24 | * provided "AS-IS" and at no charge. |
25 | * | 25 | * |
diff --git a/drivers/net/irda/donauboe.c b/drivers/net/irda/donauboe.c index a82d8f98383..1257e1a7e81 100644 --- a/drivers/net/irda/donauboe.c +++ b/drivers/net/irda/donauboe.c | |||
@@ -595,7 +595,7 @@ toshoboe_startchip (struct toshoboe_cb *self) | |||
595 | OUTB ((physaddr >> 18) & 0xff, OBOE_RING_BASE1); | 595 | OUTB ((physaddr >> 18) & 0xff, OBOE_RING_BASE1); |
596 | OUTB ((physaddr >> 26) & 0x3f, OBOE_RING_BASE2); | 596 | OUTB ((physaddr >> 26) & 0x3f, OBOE_RING_BASE2); |
597 | 597 | ||
598 | /*Enable DMA controler in byte mode and RX */ | 598 | /*Enable DMA controller in byte mode and RX */ |
599 | OUTB (CONFIG0H_DMA_ON, OBOE_CONFIG0H); | 599 | OUTB (CONFIG0H_DMA_ON, OBOE_CONFIG0H); |
600 | 600 | ||
601 | /* Start up the clocks */ | 601 | /* Start up the clocks */ |
diff --git a/drivers/net/irda/girbil-sir.c b/drivers/net/irda/girbil-sir.c index 0d2fe87fb9b..738531b16bd 100644 --- a/drivers/net/irda/girbil-sir.c +++ b/drivers/net/irda/girbil-sir.c | |||
@@ -16,7 +16,7 @@ | |||
16 | * published by the Free Software Foundation; either version 2 of | 16 | * published by the Free Software Foundation; either version 2 of |
17 | * the License, or (at your option) any later version. | 17 | * the License, or (at your option) any later version. |
18 | * | 18 | * |
19 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 19 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
20 | * provide warranty for any of this software. This material is | 20 | * provide warranty for any of this software. This material is |
21 | * provided "AS-IS" and at no charge. | 21 | * provided "AS-IS" and at no charge. |
22 | * | 22 | * |
diff --git a/drivers/net/irda/girbil.c b/drivers/net/irda/girbil.c index 248aeb0c726..1f57391a618 100644 --- a/drivers/net/irda/girbil.c +++ b/drivers/net/irda/girbil.c | |||
@@ -16,7 +16,7 @@ | |||
16 | * published by the Free Software Foundation; either version 2 of | 16 | * published by the Free Software Foundation; either version 2 of |
17 | * the License, or (at your option) any later version. | 17 | * the License, or (at your option) any later version. |
18 | * | 18 | * |
19 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 19 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
20 | * provide warranty for any of this software. This material is | 20 | * provide warranty for any of this software. This material is |
21 | * provided "AS-IS" and at no charge. | 21 | * provided "AS-IS" and at no charge. |
22 | * | 22 | * |
diff --git a/drivers/net/irda/irport.h b/drivers/net/irda/irport.h index 3f46b84c6c8..66fc2433e97 100644 --- a/drivers/net/irda/irport.h +++ b/drivers/net/irda/irport.h | |||
@@ -17,7 +17,7 @@ | |||
17 | * published by the Free Software Foundation; either version 2 of | 17 | * published by the Free Software Foundation; either version 2 of |
18 | * the License, or (at your option) any later version. | 18 | * the License, or (at your option) any later version. |
19 | * | 19 | * |
20 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 20 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
21 | * provide warranty for any of this software. This material is | 21 | * provide warranty for any of this software. This material is |
22 | * provided "AS-IS" and at no charge. | 22 | * provided "AS-IS" and at no charge. |
23 | * | 23 | * |
diff --git a/drivers/net/irda/irtty-sir.c b/drivers/net/irda/irtty-sir.c index 6f5f697ec9f..2c6f7be36e8 100644 --- a/drivers/net/irda/irtty-sir.c +++ b/drivers/net/irda/irtty-sir.c | |||
@@ -20,7 +20,7 @@ | |||
20 | * published by the Free Software Foundation; either version 2 of | 20 | * published by the Free Software Foundation; either version 2 of |
21 | * the License, or (at your option) any later version. | 21 | * the License, or (at your option) any later version. |
22 | * | 22 | * |
23 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 23 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
24 | * provide warranty for any of this software. This material is | 24 | * provide warranty for any of this software. This material is |
25 | * provided "AS-IS" and at no charge. | 25 | * provided "AS-IS" and at no charge. |
26 | * | 26 | * |
diff --git a/drivers/net/irda/nsc-ircc.c b/drivers/net/irda/nsc-ircc.c index 12b9378c587..a873d2b315c 100644 --- a/drivers/net/irda/nsc-ircc.c +++ b/drivers/net/irda/nsc-ircc.c | |||
@@ -20,7 +20,7 @@ | |||
20 | * published by the Free Software Foundation; either version 2 of | 20 | * published by the Free Software Foundation; either version 2 of |
21 | * the License, or (at your option) any later version. | 21 | * the License, or (at your option) any later version. |
22 | * | 22 | * |
23 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 23 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
24 | * provide warranty for any of this software. This material is | 24 | * provide warranty for any of this software. This material is |
25 | * provided "AS-IS" and at no charge. | 25 | * provided "AS-IS" and at no charge. |
26 | * | 26 | * |
diff --git a/drivers/net/irda/nsc-ircc.h b/drivers/net/irda/nsc-ircc.h index dacf671abcd..bbdc97ff83c 100644 --- a/drivers/net/irda/nsc-ircc.h +++ b/drivers/net/irda/nsc-ircc.h | |||
@@ -19,7 +19,7 @@ | |||
19 | * published by the Free Software Foundation; either version 2 of | 19 | * published by the Free Software Foundation; either version 2 of |
20 | * the License, or (at your option) any later version. | 20 | * the License, or (at your option) any later version. |
21 | * | 21 | * |
22 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 22 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
23 | * provide warranty for any of this software. This material is | 23 | * provide warranty for any of this software. This material is |
24 | * provided "AS-IS" and at no charge. | 24 | * provided "AS-IS" and at no charge. |
25 | * | 25 | * |
diff --git a/drivers/net/irda/tekram-sir.c b/drivers/net/irda/tekram-sir.c index 0dd6bc7af3f..d1ce5ae6a17 100644 --- a/drivers/net/irda/tekram-sir.c +++ b/drivers/net/irda/tekram-sir.c | |||
@@ -18,7 +18,7 @@ | |||
18 | * published by the Free Software Foundation; either version 2 of | 18 | * published by the Free Software Foundation; either version 2 of |
19 | * the License, or (at your option) any later version. | 19 | * the License, or (at your option) any later version. |
20 | * | 20 | * |
21 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 21 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
22 | * provide warranty for any of this software. This material is | 22 | * provide warranty for any of this software. This material is |
23 | * provided "AS-IS" and at no charge. | 23 | * provided "AS-IS" and at no charge. |
24 | * | 24 | * |
diff --git a/drivers/net/irda/tekram.c b/drivers/net/irda/tekram.c index 8f6258221cb..9bfd2441adb 100644 --- a/drivers/net/irda/tekram.c +++ b/drivers/net/irda/tekram.c | |||
@@ -16,7 +16,7 @@ | |||
16 | * published by the Free Software Foundation; either version 2 of | 16 | * published by the Free Software Foundation; either version 2 of |
17 | * the License, or (at your option) any later version. | 17 | * the License, or (at your option) any later version. |
18 | * | 18 | * |
19 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 19 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
20 | * provide warranty for any of this software. This material is | 20 | * provide warranty for any of this software. This material is |
21 | * provided "AS-IS" and at no charge. | 21 | * provided "AS-IS" and at no charge. |
22 | * | 22 | * |
diff --git a/drivers/net/irda/w83977af_ir.h b/drivers/net/irda/w83977af_ir.h index 0b7661deafe..87c3975baf6 100644 --- a/drivers/net/irda/w83977af_ir.h +++ b/drivers/net/irda/w83977af_ir.h | |||
@@ -16,7 +16,7 @@ | |||
16 | * published by the Free Software Foundation; either version 2 of | 16 | * published by the Free Software Foundation; either version 2 of |
17 | * the License, or (at your option) any later version. | 17 | * the License, or (at your option) any later version. |
18 | * | 18 | * |
19 | * Neither Dag Brattli nor University of Tromsø admit liability nor | 19 | * Neither Dag Brattli nor University of Tromsø admit liability nor |
20 | * provide warranty for any of this software. This material is | 20 | * provide warranty for any of this software. This material is |
21 | * provided "AS-IS" and at no charge. | 21 | * provided "AS-IS" and at no charge. |
22 | * | 22 | * |
diff --git a/drivers/net/mac89x0.c b/drivers/net/mac89x0.c index 30854f09496..a19b5958cee 100644 --- a/drivers/net/mac89x0.c +++ b/drivers/net/mac89x0.c | |||
@@ -99,9 +99,9 @@ static char *version = | |||
99 | #include <linux/etherdevice.h> | 99 | #include <linux/etherdevice.h> |
100 | #include <linux/skbuff.h> | 100 | #include <linux/skbuff.h> |
101 | #include <linux/delay.h> | 101 | #include <linux/delay.h> |
102 | #include <linux/bitops.h> | ||
102 | 103 | ||
103 | #include <asm/system.h> | 104 | #include <asm/system.h> |
104 | #include <asm/bitops.h> | ||
105 | #include <asm/io.h> | 105 | #include <asm/io.h> |
106 | #include <asm/hwtest.h> | 106 | #include <asm/hwtest.h> |
107 | #include <asm/macints.h> | 107 | #include <asm/macints.h> |
diff --git a/drivers/net/meth.h b/drivers/net/meth.h index ea3b8fc86d1..a78dc1ca8c2 100644 --- a/drivers/net/meth.h +++ b/drivers/net/meth.h | |||
@@ -28,9 +28,6 @@ | |||
28 | #define RX_BUFFER_OFFSET (sizeof(rx_status_vector)+2) /* staus vector + 2 bytes of padding */ | 28 | #define RX_BUFFER_OFFSET (sizeof(rx_status_vector)+2) /* staus vector + 2 bytes of padding */ |
29 | #define RX_BUCKET_SIZE 256 | 29 | #define RX_BUCKET_SIZE 256 |
30 | 30 | ||
31 | #undef BIT | ||
32 | #define BIT(x) (1UL << (x)) | ||
33 | |||
34 | /* For more detailed explanations of what each field menas, | 31 | /* For more detailed explanations of what each field menas, |
35 | see Nick's great comments to #defines below (or docs, if | 32 | see Nick's great comments to #defines below (or docs, if |
36 | you are lucky enough toget hold of them :)*/ | 33 | you are lucky enough toget hold of them :)*/ |
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index 64c8151f200..366e62a2b1e 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
@@ -3058,7 +3058,8 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
3058 | if (status != 0) { | 3058 | if (status != 0) { |
3059 | dac_enabled = 0; | 3059 | dac_enabled = 0; |
3060 | dev_err(&pdev->dev, | 3060 | dev_err(&pdev->dev, |
3061 | "64-bit pci address mask was refused, trying 32-bit"); | 3061 | "64-bit pci address mask was refused, " |
3062 | "trying 32-bit\n"); | ||
3062 | status = pci_set_dma_mask(pdev, DMA_32BIT_MASK); | 3063 | status = pci_set_dma_mask(pdev, DMA_32BIT_MASK); |
3063 | } | 3064 | } |
3064 | if (status != 0) { | 3065 | if (status != 0) { |
diff --git a/drivers/net/natsemi.c b/drivers/net/natsemi.c index 50e1ec67ef9..953117152bb 100644 --- a/drivers/net/natsemi.c +++ b/drivers/net/natsemi.c | |||
@@ -996,7 +996,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev, | |||
996 | a delay. Note that pre-2.0.34 kernels had a cache-alignment bug that | 996 | a delay. Note that pre-2.0.34 kernels had a cache-alignment bug that |
997 | made udelay() unreliable. | 997 | made udelay() unreliable. |
998 | The old method of using an ISA access as a delay, __SLOW_DOWN_IO__, is | 998 | The old method of using an ISA access as a delay, __SLOW_DOWN_IO__, is |
999 | depricated. | 999 | deprecated. |
1000 | */ | 1000 | */ |
1001 | #define eeprom_delay(ee_addr) readl(ee_addr) | 1001 | #define eeprom_delay(ee_addr) readl(ee_addr) |
1002 | 1002 | ||
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 2a1d6d7ec35..601051c584e 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c | |||
@@ -53,9 +53,6 @@ static char netxen_nic_driver_string[] = "NetXen Network Driver version " | |||
53 | #define NETXEN_ADAPTER_UP_MAGIC 777 | 53 | #define NETXEN_ADAPTER_UP_MAGIC 777 |
54 | #define NETXEN_NIC_PEG_TUNE 0 | 54 | #define NETXEN_NIC_PEG_TUNE 0 |
55 | 55 | ||
56 | #define DMA_32BIT_MASK 0x00000000ffffffffULL | ||
57 | #define DMA_35BIT_MASK 0x00000007ffffffffULL | ||
58 | |||
59 | /* Local functions to NetXen NIC driver */ | 56 | /* Local functions to NetXen NIC driver */ |
60 | static int __devinit netxen_nic_probe(struct pci_dev *pdev, | 57 | static int __devinit netxen_nic_probe(struct pci_dev *pdev, |
61 | const struct pci_device_id *ent); | 58 | const struct pci_device_id *ent); |
diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index 5f994b5beda..ff92aca0a7b 100644 --- a/drivers/net/pcnet32.c +++ b/drivers/net/pcnet32.c | |||
@@ -282,7 +282,6 @@ struct pcnet32_private { | |||
282 | 282 | ||
283 | struct net_device *dev; | 283 | struct net_device *dev; |
284 | struct napi_struct napi; | 284 | struct napi_struct napi; |
285 | struct net_device_stats stats; | ||
286 | char tx_full; | 285 | char tx_full; |
287 | char phycount; /* number of phys found */ | 286 | char phycount; /* number of phys found */ |
288 | int options; | 287 | int options; |
@@ -442,7 +441,9 @@ static struct pcnet32_access pcnet32_dwio = { | |||
442 | 441 | ||
443 | static void pcnet32_netif_stop(struct net_device *dev) | 442 | static void pcnet32_netif_stop(struct net_device *dev) |
444 | { | 443 | { |
444 | #ifdef CONFIG_PCNET32_NAPI | ||
445 | struct pcnet32_private *lp = netdev_priv(dev); | 445 | struct pcnet32_private *lp = netdev_priv(dev); |
446 | #endif | ||
446 | dev->trans_start = jiffies; | 447 | dev->trans_start = jiffies; |
447 | #ifdef CONFIG_PCNET32_NAPI | 448 | #ifdef CONFIG_PCNET32_NAPI |
448 | napi_disable(&lp->napi); | 449 | napi_disable(&lp->napi); |
@@ -452,7 +453,9 @@ static void pcnet32_netif_stop(struct net_device *dev) | |||
452 | 453 | ||
453 | static void pcnet32_netif_start(struct net_device *dev) | 454 | static void pcnet32_netif_start(struct net_device *dev) |
454 | { | 455 | { |
456 | #ifdef CONFIG_PCNET32_NAPI | ||
455 | struct pcnet32_private *lp = netdev_priv(dev); | 457 | struct pcnet32_private *lp = netdev_priv(dev); |
458 | #endif | ||
456 | netif_wake_queue(dev); | 459 | netif_wake_queue(dev); |
457 | #ifdef CONFIG_PCNET32_NAPI | 460 | #ifdef CONFIG_PCNET32_NAPI |
458 | napi_enable(&lp->napi); | 461 | napi_enable(&lp->napi); |
@@ -1178,15 +1181,15 @@ static void pcnet32_rx_entry(struct net_device *dev, | |||
1178 | * buffers, with only the last correctly noting the error. | 1181 | * buffers, with only the last correctly noting the error. |
1179 | */ | 1182 | */ |
1180 | if (status & 0x01) /* Only count a general error at the */ | 1183 | if (status & 0x01) /* Only count a general error at the */ |
1181 | lp->stats.rx_errors++; /* end of a packet. */ | 1184 | dev->stats.rx_errors++; /* end of a packet. */ |
1182 | if (status & 0x20) | 1185 | if (status & 0x20) |
1183 | lp->stats.rx_frame_errors++; | 1186 | dev->stats.rx_frame_errors++; |
1184 | if (status & 0x10) | 1187 | if (status & 0x10) |
1185 | lp->stats.rx_over_errors++; | 1188 | dev->stats.rx_over_errors++; |
1186 | if (status & 0x08) | 1189 | if (status & 0x08) |
1187 | lp->stats.rx_crc_errors++; | 1190 | dev->stats.rx_crc_errors++; |
1188 | if (status & 0x04) | 1191 | if (status & 0x04) |
1189 | lp->stats.rx_fifo_errors++; | 1192 | dev->stats.rx_fifo_errors++; |
1190 | return; | 1193 | return; |
1191 | } | 1194 | } |
1192 | 1195 | ||
@@ -1197,13 +1200,13 @@ static void pcnet32_rx_entry(struct net_device *dev, | |||
1197 | if (netif_msg_drv(lp)) | 1200 | if (netif_msg_drv(lp)) |
1198 | printk(KERN_ERR "%s: Impossible packet size %d!\n", | 1201 | printk(KERN_ERR "%s: Impossible packet size %d!\n", |
1199 | dev->name, pkt_len); | 1202 | dev->name, pkt_len); |
1200 | lp->stats.rx_errors++; | 1203 | dev->stats.rx_errors++; |
1201 | return; | 1204 | return; |
1202 | } | 1205 | } |
1203 | if (pkt_len < 60) { | 1206 | if (pkt_len < 60) { |
1204 | if (netif_msg_rx_err(lp)) | 1207 | if (netif_msg_rx_err(lp)) |
1205 | printk(KERN_ERR "%s: Runt packet!\n", dev->name); | 1208 | printk(KERN_ERR "%s: Runt packet!\n", dev->name); |
1206 | lp->stats.rx_errors++; | 1209 | dev->stats.rx_errors++; |
1207 | return; | 1210 | return; |
1208 | } | 1211 | } |
1209 | 1212 | ||
@@ -1237,7 +1240,7 @@ static void pcnet32_rx_entry(struct net_device *dev, | |||
1237 | printk(KERN_ERR | 1240 | printk(KERN_ERR |
1238 | "%s: Memory squeeze, dropping packet.\n", | 1241 | "%s: Memory squeeze, dropping packet.\n", |
1239 | dev->name); | 1242 | dev->name); |
1240 | lp->stats.rx_dropped++; | 1243 | dev->stats.rx_dropped++; |
1241 | return; | 1244 | return; |
1242 | } | 1245 | } |
1243 | skb->dev = dev; | 1246 | skb->dev = dev; |
@@ -1256,7 +1259,7 @@ static void pcnet32_rx_entry(struct net_device *dev, | |||
1256 | pkt_len, | 1259 | pkt_len, |
1257 | PCI_DMA_FROMDEVICE); | 1260 | PCI_DMA_FROMDEVICE); |
1258 | } | 1261 | } |
1259 | lp->stats.rx_bytes += skb->len; | 1262 | dev->stats.rx_bytes += skb->len; |
1260 | skb->protocol = eth_type_trans(skb, dev); | 1263 | skb->protocol = eth_type_trans(skb, dev); |
1261 | #ifdef CONFIG_PCNET32_NAPI | 1264 | #ifdef CONFIG_PCNET32_NAPI |
1262 | netif_receive_skb(skb); | 1265 | netif_receive_skb(skb); |
@@ -1264,7 +1267,7 @@ static void pcnet32_rx_entry(struct net_device *dev, | |||
1264 | netif_rx(skb); | 1267 | netif_rx(skb); |
1265 | #endif | 1268 | #endif |
1266 | dev->last_rx = jiffies; | 1269 | dev->last_rx = jiffies; |
1267 | lp->stats.rx_packets++; | 1270 | dev->stats.rx_packets++; |
1268 | return; | 1271 | return; |
1269 | } | 1272 | } |
1270 | 1273 | ||
@@ -1312,21 +1315,21 @@ static int pcnet32_tx(struct net_device *dev) | |||
1312 | if (status & 0x4000) { | 1315 | if (status & 0x4000) { |
1313 | /* There was a major error, log it. */ | 1316 | /* There was a major error, log it. */ |
1314 | int err_status = le32_to_cpu(lp->tx_ring[entry].misc); | 1317 | int err_status = le32_to_cpu(lp->tx_ring[entry].misc); |
1315 | lp->stats.tx_errors++; | 1318 | dev->stats.tx_errors++; |
1316 | if (netif_msg_tx_err(lp)) | 1319 | if (netif_msg_tx_err(lp)) |
1317 | printk(KERN_ERR | 1320 | printk(KERN_ERR |
1318 | "%s: Tx error status=%04x err_status=%08x\n", | 1321 | "%s: Tx error status=%04x err_status=%08x\n", |
1319 | dev->name, status, | 1322 | dev->name, status, |
1320 | err_status); | 1323 | err_status); |
1321 | if (err_status & 0x04000000) | 1324 | if (err_status & 0x04000000) |
1322 | lp->stats.tx_aborted_errors++; | 1325 | dev->stats.tx_aborted_errors++; |
1323 | if (err_status & 0x08000000) | 1326 | if (err_status & 0x08000000) |
1324 | lp->stats.tx_carrier_errors++; | 1327 | dev->stats.tx_carrier_errors++; |
1325 | if (err_status & 0x10000000) | 1328 | if (err_status & 0x10000000) |
1326 | lp->stats.tx_window_errors++; | 1329 | dev->stats.tx_window_errors++; |
1327 | #ifndef DO_DXSUFLO | 1330 | #ifndef DO_DXSUFLO |
1328 | if (err_status & 0x40000000) { | 1331 | if (err_status & 0x40000000) { |
1329 | lp->stats.tx_fifo_errors++; | 1332 | dev->stats.tx_fifo_errors++; |
1330 | /* Ackk! On FIFO errors the Tx unit is turned off! */ | 1333 | /* Ackk! On FIFO errors the Tx unit is turned off! */ |
1331 | /* Remove this verbosity later! */ | 1334 | /* Remove this verbosity later! */ |
1332 | if (netif_msg_tx_err(lp)) | 1335 | if (netif_msg_tx_err(lp)) |
@@ -1337,7 +1340,7 @@ static int pcnet32_tx(struct net_device *dev) | |||
1337 | } | 1340 | } |
1338 | #else | 1341 | #else |
1339 | if (err_status & 0x40000000) { | 1342 | if (err_status & 0x40000000) { |
1340 | lp->stats.tx_fifo_errors++; | 1343 | dev->stats.tx_fifo_errors++; |
1341 | if (!lp->dxsuflo) { /* If controller doesn't recover ... */ | 1344 | if (!lp->dxsuflo) { /* If controller doesn't recover ... */ |
1342 | /* Ackk! On FIFO errors the Tx unit is turned off! */ | 1345 | /* Ackk! On FIFO errors the Tx unit is turned off! */ |
1343 | /* Remove this verbosity later! */ | 1346 | /* Remove this verbosity later! */ |
@@ -1351,8 +1354,8 @@ static int pcnet32_tx(struct net_device *dev) | |||
1351 | #endif | 1354 | #endif |
1352 | } else { | 1355 | } else { |
1353 | if (status & 0x1800) | 1356 | if (status & 0x1800) |
1354 | lp->stats.collisions++; | 1357 | dev->stats.collisions++; |
1355 | lp->stats.tx_packets++; | 1358 | dev->stats.tx_packets++; |
1356 | } | 1359 | } |
1357 | 1360 | ||
1358 | /* We must free the original skb */ | 1361 | /* We must free the original skb */ |
@@ -1849,6 +1852,9 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev) | |||
1849 | lp->mii_if.mdio_read = mdio_read; | 1852 | lp->mii_if.mdio_read = mdio_read; |
1850 | lp->mii_if.mdio_write = mdio_write; | 1853 | lp->mii_if.mdio_write = mdio_write; |
1851 | 1854 | ||
1855 | /* napi.weight is used in both the napi and non-napi cases */ | ||
1856 | lp->napi.weight = lp->rx_ring_size / 2; | ||
1857 | |||
1852 | #ifdef CONFIG_PCNET32_NAPI | 1858 | #ifdef CONFIG_PCNET32_NAPI |
1853 | netif_napi_add(dev, &lp->napi, pcnet32_poll, lp->rx_ring_size / 2); | 1859 | netif_napi_add(dev, &lp->napi, pcnet32_poll, lp->rx_ring_size / 2); |
1854 | #endif | 1860 | #endif |
@@ -2471,7 +2477,7 @@ static void pcnet32_tx_timeout(struct net_device *dev) | |||
2471 | "%s: transmit timed out, status %4.4x, resetting.\n", | 2477 | "%s: transmit timed out, status %4.4x, resetting.\n", |
2472 | dev->name, lp->a.read_csr(ioaddr, CSR0)); | 2478 | dev->name, lp->a.read_csr(ioaddr, CSR0)); |
2473 | lp->a.write_csr(ioaddr, CSR0, CSR0_STOP); | 2479 | lp->a.write_csr(ioaddr, CSR0, CSR0_STOP); |
2474 | lp->stats.tx_errors++; | 2480 | dev->stats.tx_errors++; |
2475 | if (netif_msg_tx_err(lp)) { | 2481 | if (netif_msg_tx_err(lp)) { |
2476 | int i; | 2482 | int i; |
2477 | printk(KERN_DEBUG | 2483 | printk(KERN_DEBUG |
@@ -2541,7 +2547,7 @@ static int pcnet32_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
2541 | lp->tx_ring[entry].status = cpu_to_le16(status); | 2547 | lp->tx_ring[entry].status = cpu_to_le16(status); |
2542 | 2548 | ||
2543 | lp->cur_tx++; | 2549 | lp->cur_tx++; |
2544 | lp->stats.tx_bytes += skb->len; | 2550 | dev->stats.tx_bytes += skb->len; |
2545 | 2551 | ||
2546 | /* Trigger an immediate send poll. */ | 2552 | /* Trigger an immediate send poll. */ |
2547 | lp->a.write_csr(ioaddr, CSR0, CSR0_INTEN | CSR0_TXPOLL); | 2553 | lp->a.write_csr(ioaddr, CSR0, CSR0_INTEN | CSR0_TXPOLL); |
@@ -2586,7 +2592,7 @@ pcnet32_interrupt(int irq, void *dev_id) | |||
2586 | 2592 | ||
2587 | /* Log misc errors. */ | 2593 | /* Log misc errors. */ |
2588 | if (csr0 & 0x4000) | 2594 | if (csr0 & 0x4000) |
2589 | lp->stats.tx_errors++; /* Tx babble. */ | 2595 | dev->stats.tx_errors++; /* Tx babble. */ |
2590 | if (csr0 & 0x1000) { | 2596 | if (csr0 & 0x1000) { |
2591 | /* | 2597 | /* |
2592 | * This happens when our receive ring is full. This | 2598 | * This happens when our receive ring is full. This |
@@ -2599,7 +2605,7 @@ pcnet32_interrupt(int irq, void *dev_id) | |||
2599 | * don't get a rx interrupt, but a missed frame | 2605 | * don't get a rx interrupt, but a missed frame |
2600 | * interrupt sooner or later. | 2606 | * interrupt sooner or later. |
2601 | */ | 2607 | */ |
2602 | lp->stats.rx_errors++; /* Missed a Rx frame. */ | 2608 | dev->stats.rx_errors++; /* Missed a Rx frame. */ |
2603 | } | 2609 | } |
2604 | if (csr0 & 0x0800) { | 2610 | if (csr0 & 0x0800) { |
2605 | if (netif_msg_drv(lp)) | 2611 | if (netif_msg_drv(lp)) |
@@ -2661,7 +2667,7 @@ static int pcnet32_close(struct net_device *dev) | |||
2661 | 2667 | ||
2662 | spin_lock_irqsave(&lp->lock, flags); | 2668 | spin_lock_irqsave(&lp->lock, flags); |
2663 | 2669 | ||
2664 | lp->stats.rx_missed_errors = lp->a.read_csr(ioaddr, 112); | 2670 | dev->stats.rx_missed_errors = lp->a.read_csr(ioaddr, 112); |
2665 | 2671 | ||
2666 | if (netif_msg_ifdown(lp)) | 2672 | if (netif_msg_ifdown(lp)) |
2667 | printk(KERN_DEBUG | 2673 | printk(KERN_DEBUG |
@@ -2698,10 +2704,10 @@ static struct net_device_stats *pcnet32_get_stats(struct net_device *dev) | |||
2698 | unsigned long flags; | 2704 | unsigned long flags; |
2699 | 2705 | ||
2700 | spin_lock_irqsave(&lp->lock, flags); | 2706 | spin_lock_irqsave(&lp->lock, flags); |
2701 | lp->stats.rx_missed_errors = lp->a.read_csr(ioaddr, 112); | 2707 | dev->stats.rx_missed_errors = lp->a.read_csr(ioaddr, 112); |
2702 | spin_unlock_irqrestore(&lp->lock, flags); | 2708 | spin_unlock_irqrestore(&lp->lock, flags); |
2703 | 2709 | ||
2704 | return &lp->stats; | 2710 | return &dev->stats; |
2705 | } | 2711 | } |
2706 | 2712 | ||
2707 | /* taken from the sunlance driver, which it took from the depca driver */ | 2713 | /* taken from the sunlance driver, which it took from the depca driver */ |
diff --git a/drivers/net/phy/mdio-bitbang.c b/drivers/net/phy/mdio-bitbang.c index 8cd243d92af..2747b1f89ff 100644 --- a/drivers/net/phy/mdio-bitbang.c +++ b/drivers/net/phy/mdio-bitbang.c | |||
@@ -185,3 +185,5 @@ void free_mdio_bitbang(struct mii_bus *bus) | |||
185 | module_put(ctrl->ops->owner); | 185 | module_put(ctrl->ops->owner); |
186 | kfree(bus); | 186 | kfree(bus); |
187 | } | 187 | } |
188 | |||
189 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/net/s2io-regs.h b/drivers/net/s2io-regs.h index aef66e2d98d..01f08d726ac 100644 --- a/drivers/net/s2io-regs.h +++ b/drivers/net/s2io-regs.h | |||
@@ -20,17 +20,17 @@ struct XENA_dev_config { | |||
20 | 20 | ||
21 | /* General Control-Status Registers */ | 21 | /* General Control-Status Registers */ |
22 | u64 general_int_status; | 22 | u64 general_int_status; |
23 | #define GEN_INTR_TXPIC BIT(0) | 23 | #define GEN_INTR_TXPIC s2BIT(0) |
24 | #define GEN_INTR_TXDMA BIT(1) | 24 | #define GEN_INTR_TXDMA s2BIT(1) |
25 | #define GEN_INTR_TXMAC BIT(2) | 25 | #define GEN_INTR_TXMAC s2BIT(2) |
26 | #define GEN_INTR_TXXGXS BIT(3) | 26 | #define GEN_INTR_TXXGXS s2BIT(3) |
27 | #define GEN_INTR_TXTRAFFIC BIT(8) | 27 | #define GEN_INTR_TXTRAFFIC s2BIT(8) |
28 | #define GEN_INTR_RXPIC BIT(32) | 28 | #define GEN_INTR_RXPIC s2BIT(32) |
29 | #define GEN_INTR_RXDMA BIT(33) | 29 | #define GEN_INTR_RXDMA s2BIT(33) |
30 | #define GEN_INTR_RXMAC BIT(34) | 30 | #define GEN_INTR_RXMAC s2BIT(34) |
31 | #define GEN_INTR_MC BIT(35) | 31 | #define GEN_INTR_MC s2BIT(35) |
32 | #define GEN_INTR_RXXGXS BIT(36) | 32 | #define GEN_INTR_RXXGXS s2BIT(36) |
33 | #define GEN_INTR_RXTRAFFIC BIT(40) | 33 | #define GEN_INTR_RXTRAFFIC s2BIT(40) |
34 | #define GEN_ERROR_INTR GEN_INTR_TXPIC | GEN_INTR_RXPIC | \ | 34 | #define GEN_ERROR_INTR GEN_INTR_TXPIC | GEN_INTR_RXPIC | \ |
35 | GEN_INTR_TXDMA | GEN_INTR_RXDMA | \ | 35 | GEN_INTR_TXDMA | GEN_INTR_RXDMA | \ |
36 | GEN_INTR_TXMAC | GEN_INTR_RXMAC | \ | 36 | GEN_INTR_TXMAC | GEN_INTR_RXMAC | \ |
@@ -54,36 +54,36 @@ struct XENA_dev_config { | |||
54 | 54 | ||
55 | 55 | ||
56 | u64 adapter_status; | 56 | u64 adapter_status; |
57 | #define ADAPTER_STATUS_TDMA_READY BIT(0) | 57 | #define ADAPTER_STATUS_TDMA_READY s2BIT(0) |
58 | #define ADAPTER_STATUS_RDMA_READY BIT(1) | 58 | #define ADAPTER_STATUS_RDMA_READY s2BIT(1) |
59 | #define ADAPTER_STATUS_PFC_READY BIT(2) | 59 | #define ADAPTER_STATUS_PFC_READY s2BIT(2) |
60 | #define ADAPTER_STATUS_TMAC_BUF_EMPTY BIT(3) | 60 | #define ADAPTER_STATUS_TMAC_BUF_EMPTY s2BIT(3) |
61 | #define ADAPTER_STATUS_PIC_QUIESCENT BIT(5) | 61 | #define ADAPTER_STATUS_PIC_QUIESCENT s2BIT(5) |
62 | #define ADAPTER_STATUS_RMAC_REMOTE_FAULT BIT(6) | 62 | #define ADAPTER_STATUS_RMAC_REMOTE_FAULT s2BIT(6) |
63 | #define ADAPTER_STATUS_RMAC_LOCAL_FAULT BIT(7) | 63 | #define ADAPTER_STATUS_RMAC_LOCAL_FAULT s2BIT(7) |
64 | #define ADAPTER_STATUS_RMAC_PCC_IDLE vBIT(0xFF,8,8) | 64 | #define ADAPTER_STATUS_RMAC_PCC_IDLE vBIT(0xFF,8,8) |
65 | #define ADAPTER_STATUS_RMAC_PCC_FOUR_IDLE vBIT(0x0F,8,8) | 65 | #define ADAPTER_STATUS_RMAC_PCC_FOUR_IDLE vBIT(0x0F,8,8) |
66 | #define ADAPTER_STATUS_RC_PRC_QUIESCENT vBIT(0xFF,16,8) | 66 | #define ADAPTER_STATUS_RC_PRC_QUIESCENT vBIT(0xFF,16,8) |
67 | #define ADAPTER_STATUS_MC_DRAM_READY BIT(24) | 67 | #define ADAPTER_STATUS_MC_DRAM_READY s2BIT(24) |
68 | #define ADAPTER_STATUS_MC_QUEUES_READY BIT(25) | 68 | #define ADAPTER_STATUS_MC_QUEUES_READY s2BIT(25) |
69 | #define ADAPTER_STATUS_M_PLL_LOCK BIT(30) | 69 | #define ADAPTER_STATUS_M_PLL_LOCK s2BIT(30) |
70 | #define ADAPTER_STATUS_P_PLL_LOCK BIT(31) | 70 | #define ADAPTER_STATUS_P_PLL_LOCK s2BIT(31) |
71 | 71 | ||
72 | u64 adapter_control; | 72 | u64 adapter_control; |
73 | #define ADAPTER_CNTL_EN BIT(7) | 73 | #define ADAPTER_CNTL_EN s2BIT(7) |
74 | #define ADAPTER_EOI_TX_ON BIT(15) | 74 | #define ADAPTER_EOI_TX_ON s2BIT(15) |
75 | #define ADAPTER_LED_ON BIT(23) | 75 | #define ADAPTER_LED_ON s2BIT(23) |
76 | #define ADAPTER_UDPI(val) vBIT(val,36,4) | 76 | #define ADAPTER_UDPI(val) vBIT(val,36,4) |
77 | #define ADAPTER_WAIT_INT BIT(48) | 77 | #define ADAPTER_WAIT_INT s2BIT(48) |
78 | #define ADAPTER_ECC_EN BIT(55) | 78 | #define ADAPTER_ECC_EN s2BIT(55) |
79 | 79 | ||
80 | u64 serr_source; | 80 | u64 serr_source; |
81 | #define SERR_SOURCE_PIC BIT(0) | 81 | #define SERR_SOURCE_PIC s2BIT(0) |
82 | #define SERR_SOURCE_TXDMA BIT(1) | 82 | #define SERR_SOURCE_TXDMA s2BIT(1) |
83 | #define SERR_SOURCE_RXDMA BIT(2) | 83 | #define SERR_SOURCE_RXDMA s2BIT(2) |
84 | #define SERR_SOURCE_MAC BIT(3) | 84 | #define SERR_SOURCE_MAC s2BIT(3) |
85 | #define SERR_SOURCE_MC BIT(4) | 85 | #define SERR_SOURCE_MC s2BIT(4) |
86 | #define SERR_SOURCE_XGXS BIT(5) | 86 | #define SERR_SOURCE_XGXS s2BIT(5) |
87 | #define SERR_SOURCE_ANY (SERR_SOURCE_PIC | \ | 87 | #define SERR_SOURCE_ANY (SERR_SOURCE_PIC | \ |
88 | SERR_SOURCE_TXDMA | \ | 88 | SERR_SOURCE_TXDMA | \ |
89 | SERR_SOURCE_RXDMA | \ | 89 | SERR_SOURCE_RXDMA | \ |
@@ -101,41 +101,41 @@ struct XENA_dev_config { | |||
101 | #define PCI_MODE_PCIX_M2_66 0x5 | 101 | #define PCI_MODE_PCIX_M2_66 0x5 |
102 | #define PCI_MODE_PCIX_M2_100 0x6 | 102 | #define PCI_MODE_PCIX_M2_100 0x6 |
103 | #define PCI_MODE_PCIX_M2_133 0x7 | 103 | #define PCI_MODE_PCIX_M2_133 0x7 |
104 | #define PCI_MODE_UNSUPPORTED BIT(0) | 104 | #define PCI_MODE_UNSUPPORTED s2BIT(0) |
105 | #define PCI_MODE_32_BITS BIT(8) | 105 | #define PCI_MODE_32_BITS s2BIT(8) |
106 | #define PCI_MODE_UNKNOWN_MODE BIT(9) | 106 | #define PCI_MODE_UNKNOWN_MODE s2BIT(9) |
107 | 107 | ||
108 | u8 unused_0[0x800 - 0x128]; | 108 | u8 unused_0[0x800 - 0x128]; |
109 | 109 | ||
110 | /* PCI-X Controller registers */ | 110 | /* PCI-X Controller registers */ |
111 | u64 pic_int_status; | 111 | u64 pic_int_status; |
112 | u64 pic_int_mask; | 112 | u64 pic_int_mask; |
113 | #define PIC_INT_TX BIT(0) | 113 | #define PIC_INT_TX s2BIT(0) |
114 | #define PIC_INT_FLSH BIT(1) | 114 | #define PIC_INT_FLSH s2BIT(1) |
115 | #define PIC_INT_MDIO BIT(2) | 115 | #define PIC_INT_MDIO s2BIT(2) |
116 | #define PIC_INT_IIC BIT(3) | 116 | #define PIC_INT_IIC s2BIT(3) |
117 | #define PIC_INT_GPIO BIT(4) | 117 | #define PIC_INT_GPIO s2BIT(4) |
118 | #define PIC_INT_RX BIT(32) | 118 | #define PIC_INT_RX s2BIT(32) |
119 | 119 | ||
120 | u64 txpic_int_reg; | 120 | u64 txpic_int_reg; |
121 | u64 txpic_int_mask; | 121 | u64 txpic_int_mask; |
122 | #define PCIX_INT_REG_ECC_SG_ERR BIT(0) | 122 | #define PCIX_INT_REG_ECC_SG_ERR s2BIT(0) |
123 | #define PCIX_INT_REG_ECC_DB_ERR BIT(1) | 123 | #define PCIX_INT_REG_ECC_DB_ERR s2BIT(1) |
124 | #define PCIX_INT_REG_FLASHR_R_FSM_ERR BIT(8) | 124 | #define PCIX_INT_REG_FLASHR_R_FSM_ERR s2BIT(8) |
125 | #define PCIX_INT_REG_FLASHR_W_FSM_ERR BIT(9) | 125 | #define PCIX_INT_REG_FLASHR_W_FSM_ERR s2BIT(9) |
126 | #define PCIX_INT_REG_INI_TX_FSM_SERR BIT(10) | 126 | #define PCIX_INT_REG_INI_TX_FSM_SERR s2BIT(10) |
127 | #define PCIX_INT_REG_INI_TXO_FSM_ERR BIT(11) | 127 | #define PCIX_INT_REG_INI_TXO_FSM_ERR s2BIT(11) |
128 | #define PCIX_INT_REG_TRT_FSM_SERR BIT(13) | 128 | #define PCIX_INT_REG_TRT_FSM_SERR s2BIT(13) |
129 | #define PCIX_INT_REG_SRT_FSM_SERR BIT(14) | 129 | #define PCIX_INT_REG_SRT_FSM_SERR s2BIT(14) |
130 | #define PCIX_INT_REG_PIFR_FSM_SERR BIT(15) | 130 | #define PCIX_INT_REG_PIFR_FSM_SERR s2BIT(15) |
131 | #define PCIX_INT_REG_WRC_TX_SEND_FSM_SERR BIT(21) | 131 | #define PCIX_INT_REG_WRC_TX_SEND_FSM_SERR s2BIT(21) |
132 | #define PCIX_INT_REG_RRC_TX_REQ_FSM_SERR BIT(23) | 132 | #define PCIX_INT_REG_RRC_TX_REQ_FSM_SERR s2BIT(23) |
133 | #define PCIX_INT_REG_INI_RX_FSM_SERR BIT(48) | 133 | #define PCIX_INT_REG_INI_RX_FSM_SERR s2BIT(48) |
134 | #define PCIX_INT_REG_RA_RX_FSM_SERR BIT(50) | 134 | #define PCIX_INT_REG_RA_RX_FSM_SERR s2BIT(50) |
135 | /* | 135 | /* |
136 | #define PCIX_INT_REG_WRC_RX_SEND_FSM_SERR BIT(52) | 136 | #define PCIX_INT_REG_WRC_RX_SEND_FSM_SERR s2BIT(52) |
137 | #define PCIX_INT_REG_RRC_RX_REQ_FSM_SERR BIT(54) | 137 | #define PCIX_INT_REG_RRC_RX_REQ_FSM_SERR s2BIT(54) |
138 | #define PCIX_INT_REG_RRC_RX_SPLIT_FSM_SERR BIT(58) | 138 | #define PCIX_INT_REG_RRC_RX_SPLIT_FSM_SERR s2BIT(58) |
139 | */ | 139 | */ |
140 | u64 txpic_alarms; | 140 | u64 txpic_alarms; |
141 | u64 rxpic_int_reg; | 141 | u64 rxpic_int_reg; |
@@ -144,92 +144,92 @@ struct XENA_dev_config { | |||
144 | 144 | ||
145 | u64 flsh_int_reg; | 145 | u64 flsh_int_reg; |
146 | u64 flsh_int_mask; | 146 | u64 flsh_int_mask; |
147 | #define PIC_FLSH_INT_REG_CYCLE_FSM_ERR BIT(63) | 147 | #define PIC_FLSH_INT_REG_CYCLE_FSM_ERR s2BIT(63) |
148 | #define PIC_FLSH_INT_REG_ERR BIT(62) | 148 | #define PIC_FLSH_INT_REG_ERR s2BIT(62) |
149 | u64 flash_alarms; | 149 | u64 flash_alarms; |
150 | 150 | ||
151 | u64 mdio_int_reg; | 151 | u64 mdio_int_reg; |
152 | u64 mdio_int_mask; | 152 | u64 mdio_int_mask; |
153 | #define MDIO_INT_REG_MDIO_BUS_ERR BIT(0) | 153 | #define MDIO_INT_REG_MDIO_BUS_ERR s2BIT(0) |
154 | #define MDIO_INT_REG_DTX_BUS_ERR BIT(8) | 154 | #define MDIO_INT_REG_DTX_BUS_ERR s2BIT(8) |
155 | #define MDIO_INT_REG_LASI BIT(39) | 155 | #define MDIO_INT_REG_LASI s2BIT(39) |
156 | u64 mdio_alarms; | 156 | u64 mdio_alarms; |
157 | 157 | ||
158 | u64 iic_int_reg; | 158 | u64 iic_int_reg; |
159 | u64 iic_int_mask; | 159 | u64 iic_int_mask; |
160 | #define IIC_INT_REG_BUS_FSM_ERR BIT(4) | 160 | #define IIC_INT_REG_BUS_FSM_ERR s2BIT(4) |
161 | #define IIC_INT_REG_BIT_FSM_ERR BIT(5) | 161 | #define IIC_INT_REG_BIT_FSM_ERR s2BIT(5) |
162 | #define IIC_INT_REG_CYCLE_FSM_ERR BIT(6) | 162 | #define IIC_INT_REG_CYCLE_FSM_ERR s2BIT(6) |
163 | #define IIC_INT_REG_REQ_FSM_ERR BIT(7) | 163 | #define IIC_INT_REG_REQ_FSM_ERR s2BIT(7) |
164 | #define IIC_INT_REG_ACK_ERR BIT(8) | 164 | #define IIC_INT_REG_ACK_ERR s2BIT(8) |
165 | u64 iic_alarms; | 165 | u64 iic_alarms; |
166 | 166 | ||
167 | u8 unused4[0x08]; | 167 | u8 unused4[0x08]; |
168 | 168 | ||
169 | u64 gpio_int_reg; | 169 | u64 gpio_int_reg; |
170 | #define GPIO_INT_REG_DP_ERR_INT BIT(0) | 170 | #define GPIO_INT_REG_DP_ERR_INT s2BIT(0) |
171 | #define GPIO_INT_REG_LINK_DOWN BIT(1) | 171 | #define GPIO_INT_REG_LINK_DOWN s2BIT(1) |
172 | #define GPIO_INT_REG_LINK_UP BIT(2) | 172 | #define GPIO_INT_REG_LINK_UP s2BIT(2) |
173 | u64 gpio_int_mask; | 173 | u64 gpio_int_mask; |
174 | #define GPIO_INT_MASK_LINK_DOWN BIT(1) | 174 | #define GPIO_INT_MASK_LINK_DOWN s2BIT(1) |
175 | #define GPIO_INT_MASK_LINK_UP BIT(2) | 175 | #define GPIO_INT_MASK_LINK_UP s2BIT(2) |
176 | u64 gpio_alarms; | 176 | u64 gpio_alarms; |
177 | 177 | ||
178 | u8 unused5[0x38]; | 178 | u8 unused5[0x38]; |
179 | 179 | ||
180 | u64 tx_traffic_int; | 180 | u64 tx_traffic_int; |
181 | #define TX_TRAFFIC_INT_n(n) BIT(n) | 181 | #define TX_TRAFFIC_INT_n(n) s2BIT(n) |
182 | u64 tx_traffic_mask; | 182 | u64 tx_traffic_mask; |
183 | 183 | ||
184 | u64 rx_traffic_int; | 184 | u64 rx_traffic_int; |
185 | #define RX_TRAFFIC_INT_n(n) BIT(n) | 185 | #define RX_TRAFFIC_INT_n(n) s2BIT(n) |
186 | u64 rx_traffic_mask; | 186 | u64 rx_traffic_mask; |
187 | 187 | ||
188 | /* PIC Control registers */ | 188 | /* PIC Control registers */ |
189 | u64 pic_control; | 189 | u64 pic_control; |
190 | #define PIC_CNTL_RX_ALARM_MAP_1 BIT(0) | 190 | #define PIC_CNTL_RX_ALARM_MAP_1 s2BIT(0) |
191 | #define PIC_CNTL_SHARED_SPLITS(n) vBIT(n,11,5) | 191 | #define PIC_CNTL_SHARED_SPLITS(n) vBIT(n,11,5) |
192 | 192 | ||
193 | u64 swapper_ctrl; | 193 | u64 swapper_ctrl; |
194 | #define SWAPPER_CTRL_PIF_R_FE BIT(0) | 194 | #define SWAPPER_CTRL_PIF_R_FE s2BIT(0) |
195 | #define SWAPPER_CTRL_PIF_R_SE BIT(1) | 195 | #define SWAPPER_CTRL_PIF_R_SE s2BIT(1) |
196 | #define SWAPPER_CTRL_PIF_W_FE BIT(8) | 196 | #define SWAPPER_CTRL_PIF_W_FE s2BIT(8) |
197 | #define SWAPPER_CTRL_PIF_W_SE BIT(9) | 197 | #define SWAPPER_CTRL_PIF_W_SE s2BIT(9) |
198 | #define SWAPPER_CTRL_TXP_FE BIT(16) | 198 | #define SWAPPER_CTRL_TXP_FE s2BIT(16) |
199 | #define SWAPPER_CTRL_TXP_SE BIT(17) | 199 | #define SWAPPER_CTRL_TXP_SE s2BIT(17) |
200 | #define SWAPPER_CTRL_TXD_R_FE BIT(18) | 200 | #define SWAPPER_CTRL_TXD_R_FE s2BIT(18) |
201 | #define SWAPPER_CTRL_TXD_R_SE BIT(19) | 201 | #define SWAPPER_CTRL_TXD_R_SE s2BIT(19) |
202 | #define SWAPPER_CTRL_TXD_W_FE BIT(20) | 202 | #define SWAPPER_CTRL_TXD_W_FE s2BIT(20) |
203 | #define SWAPPER_CTRL_TXD_W_SE BIT(21) | 203 | #define SWAPPER_CTRL_TXD_W_SE s2BIT(21) |
204 | #define SWAPPER_CTRL_TXF_R_FE BIT(22) | 204 | #define SWAPPER_CTRL_TXF_R_FE s2BIT(22) |
205 | #define SWAPPER_CTRL_TXF_R_SE BIT(23) | 205 | #define SWAPPER_CTRL_TXF_R_SE s2BIT(23) |
206 | #define SWAPPER_CTRL_RXD_R_FE BIT(32) | 206 | #define SWAPPER_CTRL_RXD_R_FE s2BIT(32) |
207 | #define SWAPPER_CTRL_RXD_R_SE BIT(33) | 207 | #define SWAPPER_CTRL_RXD_R_SE s2BIT(33) |
208 | #define SWAPPER_CTRL_RXD_W_FE BIT(34) | 208 | #define SWAPPER_CTRL_RXD_W_FE s2BIT(34) |
209 | #define SWAPPER_CTRL_RXD_W_SE BIT(35) | 209 | #define SWAPPER_CTRL_RXD_W_SE s2BIT(35) |
210 | #define SWAPPER_CTRL_RXF_W_FE BIT(36) | 210 | #define SWAPPER_CTRL_RXF_W_FE s2BIT(36) |
211 | #define SWAPPER_CTRL_RXF_W_SE BIT(37) | 211 | #define SWAPPER_CTRL_RXF_W_SE s2BIT(37) |
212 | #define SWAPPER_CTRL_XMSI_FE BIT(40) | 212 | #define SWAPPER_CTRL_XMSI_FE s2BIT(40) |
213 | #define SWAPPER_CTRL_XMSI_SE BIT(41) | 213 | #define SWAPPER_CTRL_XMSI_SE s2BIT(41) |
214 | #define SWAPPER_CTRL_STATS_FE BIT(48) | 214 | #define SWAPPER_CTRL_STATS_FE s2BIT(48) |
215 | #define SWAPPER_CTRL_STATS_SE BIT(49) | 215 | #define SWAPPER_CTRL_STATS_SE s2BIT(49) |
216 | 216 | ||
217 | u64 pif_rd_swapper_fb; | 217 | u64 pif_rd_swapper_fb; |
218 | #define IF_RD_SWAPPER_FB 0x0123456789ABCDEF | 218 | #define IF_RD_SWAPPER_FB 0x0123456789ABCDEF |
219 | 219 | ||
220 | u64 scheduled_int_ctrl; | 220 | u64 scheduled_int_ctrl; |
221 | #define SCHED_INT_CTRL_TIMER_EN BIT(0) | 221 | #define SCHED_INT_CTRL_TIMER_EN s2BIT(0) |
222 | #define SCHED_INT_CTRL_ONE_SHOT BIT(1) | 222 | #define SCHED_INT_CTRL_ONE_SHOT s2BIT(1) |
223 | #define SCHED_INT_CTRL_INT2MSI(val) vBIT(val,10,6) | 223 | #define SCHED_INT_CTRL_INT2MSI(val) vBIT(val,10,6) |
224 | #define SCHED_INT_PERIOD TBD | 224 | #define SCHED_INT_PERIOD TBD |
225 | 225 | ||
226 | u64 txreqtimeout; | 226 | u64 txreqtimeout; |
227 | #define TXREQTO_VAL(val) vBIT(val,0,32) | 227 | #define TXREQTO_VAL(val) vBIT(val,0,32) |
228 | #define TXREQTO_EN BIT(63) | 228 | #define TXREQTO_EN s2BIT(63) |
229 | 229 | ||
230 | u64 statsreqtimeout; | 230 | u64 statsreqtimeout; |
231 | #define STATREQTO_VAL(n) TBD | 231 | #define STATREQTO_VAL(n) TBD |
232 | #define STATREQTO_EN BIT(63) | 232 | #define STATREQTO_EN s2BIT(63) |
233 | 233 | ||
234 | u64 read_retry_delay; | 234 | u64 read_retry_delay; |
235 | u64 read_retry_acceleration; | 235 | u64 read_retry_acceleration; |
@@ -255,10 +255,10 @@ struct XENA_dev_config { | |||
255 | 255 | ||
256 | /* Automated statistics collection */ | 256 | /* Automated statistics collection */ |
257 | u64 stat_cfg; | 257 | u64 stat_cfg; |
258 | #define STAT_CFG_STAT_EN BIT(0) | 258 | #define STAT_CFG_STAT_EN s2BIT(0) |
259 | #define STAT_CFG_ONE_SHOT_EN BIT(1) | 259 | #define STAT_CFG_ONE_SHOT_EN s2BIT(1) |
260 | #define STAT_CFG_STAT_NS_EN BIT(8) | 260 | #define STAT_CFG_STAT_NS_EN s2BIT(8) |
261 | #define STAT_CFG_STAT_RO BIT(9) | 261 | #define STAT_CFG_STAT_RO s2BIT(9) |
262 | #define STAT_TRSF_PER(n) TBD | 262 | #define STAT_TRSF_PER(n) TBD |
263 | #define PER_SEC 0x208d5 | 263 | #define PER_SEC 0x208d5 |
264 | #define SET_UPDT_PERIOD(n) vBIT((PER_SEC*n),32,32) | 264 | #define SET_UPDT_PERIOD(n) vBIT((PER_SEC*n),32,32) |
@@ -290,18 +290,18 @@ struct XENA_dev_config { | |||
290 | #define I2C_CONTROL_DEV_ID(id) vBIT(id,1,3) | 290 | #define I2C_CONTROL_DEV_ID(id) vBIT(id,1,3) |
291 | #define I2C_CONTROL_ADDR(addr) vBIT(addr,5,11) | 291 | #define I2C_CONTROL_ADDR(addr) vBIT(addr,5,11) |
292 | #define I2C_CONTROL_BYTE_CNT(cnt) vBIT(cnt,22,2) | 292 | #define I2C_CONTROL_BYTE_CNT(cnt) vBIT(cnt,22,2) |
293 | #define I2C_CONTROL_READ BIT(24) | 293 | #define I2C_CONTROL_READ s2BIT(24) |
294 | #define I2C_CONTROL_NACK BIT(25) | 294 | #define I2C_CONTROL_NACK s2BIT(25) |
295 | #define I2C_CONTROL_CNTL_START vBIT(0xE,28,4) | 295 | #define I2C_CONTROL_CNTL_START vBIT(0xE,28,4) |
296 | #define I2C_CONTROL_CNTL_END(val) (val & vBIT(0x1,28,4)) | 296 | #define I2C_CONTROL_CNTL_END(val) (val & vBIT(0x1,28,4)) |
297 | #define I2C_CONTROL_GET_DATA(val) (u32)(val & 0xFFFFFFFF) | 297 | #define I2C_CONTROL_GET_DATA(val) (u32)(val & 0xFFFFFFFF) |
298 | #define I2C_CONTROL_SET_DATA(val) vBIT(val,32,32) | 298 | #define I2C_CONTROL_SET_DATA(val) vBIT(val,32,32) |
299 | 299 | ||
300 | u64 gpio_control; | 300 | u64 gpio_control; |
301 | #define GPIO_CTRL_GPIO_0 BIT(8) | 301 | #define GPIO_CTRL_GPIO_0 s2BIT(8) |
302 | u64 misc_control; | 302 | u64 misc_control; |
303 | #define FAULT_BEHAVIOUR BIT(0) | 303 | #define FAULT_BEHAVIOUR s2BIT(0) |
304 | #define EXT_REQ_EN BIT(1) | 304 | #define EXT_REQ_EN s2BIT(1) |
305 | #define MISC_LINK_STABILITY_PRD(val) vBIT(val,29,3) | 305 | #define MISC_LINK_STABILITY_PRD(val) vBIT(val,29,3) |
306 | 306 | ||
307 | u8 unused7_1[0x230 - 0x208]; | 307 | u8 unused7_1[0x230 - 0x208]; |
@@ -317,29 +317,29 @@ struct XENA_dev_config { | |||
317 | /* TxDMA registers */ | 317 | /* TxDMA registers */ |
318 | u64 txdma_int_status; | 318 | u64 txdma_int_status; |
319 | u64 txdma_int_mask; | 319 | u64 txdma_int_mask; |
320 | #define TXDMA_PFC_INT BIT(0) | 320 | #define TXDMA_PFC_INT s2BIT(0) |
321 | #define TXDMA_TDA_INT BIT(1) | 321 | #define TXDMA_TDA_INT s2BIT(1) |
322 | #define TXDMA_PCC_INT BIT(2) | 322 | #define TXDMA_PCC_INT s2BIT(2) |
323 | #define TXDMA_TTI_INT BIT(3) | 323 | #define TXDMA_TTI_INT s2BIT(3) |
324 | #define TXDMA_LSO_INT BIT(4) | 324 | #define TXDMA_LSO_INT s2BIT(4) |
325 | #define TXDMA_TPA_INT BIT(5) | 325 | #define TXDMA_TPA_INT s2BIT(5) |
326 | #define TXDMA_SM_INT BIT(6) | 326 | #define TXDMA_SM_INT s2BIT(6) |
327 | u64 pfc_err_reg; | 327 | u64 pfc_err_reg; |
328 | #define PFC_ECC_SG_ERR BIT(7) | 328 | #define PFC_ECC_SG_ERR s2BIT(7) |
329 | #define PFC_ECC_DB_ERR BIT(15) | 329 | #define PFC_ECC_DB_ERR s2BIT(15) |
330 | #define PFC_SM_ERR_ALARM BIT(23) | 330 | #define PFC_SM_ERR_ALARM s2BIT(23) |
331 | #define PFC_MISC_0_ERR BIT(31) | 331 | #define PFC_MISC_0_ERR s2BIT(31) |
332 | #define PFC_MISC_1_ERR BIT(32) | 332 | #define PFC_MISC_1_ERR s2BIT(32) |
333 | #define PFC_PCIX_ERR BIT(39) | 333 | #define PFC_PCIX_ERR s2BIT(39) |
334 | u64 pfc_err_mask; | 334 | u64 pfc_err_mask; |
335 | u64 pfc_err_alarm; | 335 | u64 pfc_err_alarm; |
336 | 336 | ||
337 | u64 tda_err_reg; | 337 | u64 tda_err_reg; |
338 | #define TDA_Fn_ECC_SG_ERR vBIT(0xff,0,8) | 338 | #define TDA_Fn_ECC_SG_ERR vBIT(0xff,0,8) |
339 | #define TDA_Fn_ECC_DB_ERR vBIT(0xff,8,8) | 339 | #define TDA_Fn_ECC_DB_ERR vBIT(0xff,8,8) |
340 | #define TDA_SM0_ERR_ALARM BIT(22) | 340 | #define TDA_SM0_ERR_ALARM s2BIT(22) |
341 | #define TDA_SM1_ERR_ALARM BIT(23) | 341 | #define TDA_SM1_ERR_ALARM s2BIT(23) |
342 | #define TDA_PCIX_ERR BIT(39) | 342 | #define TDA_PCIX_ERR s2BIT(39) |
343 | u64 tda_err_mask; | 343 | u64 tda_err_mask; |
344 | u64 tda_err_alarm; | 344 | u64 tda_err_alarm; |
345 | 345 | ||
@@ -351,40 +351,40 @@ struct XENA_dev_config { | |||
351 | #define PCC_SM_ERR_ALARM vBIT(0xff,32,8) | 351 | #define PCC_SM_ERR_ALARM vBIT(0xff,32,8) |
352 | #define PCC_WR_ERR_ALARM vBIT(0xff,40,8) | 352 | #define PCC_WR_ERR_ALARM vBIT(0xff,40,8) |
353 | #define PCC_N_SERR vBIT(0xff,48,8) | 353 | #define PCC_N_SERR vBIT(0xff,48,8) |
354 | #define PCC_6_COF_OV_ERR BIT(56) | 354 | #define PCC_6_COF_OV_ERR s2BIT(56) |
355 | #define PCC_7_COF_OV_ERR BIT(57) | 355 | #define PCC_7_COF_OV_ERR s2BIT(57) |
356 | #define PCC_6_LSO_OV_ERR BIT(58) | 356 | #define PCC_6_LSO_OV_ERR s2BIT(58) |
357 | #define PCC_7_LSO_OV_ERR BIT(59) | 357 | #define PCC_7_LSO_OV_ERR s2BIT(59) |
358 | #define PCC_ENABLE_FOUR vBIT(0x0F,0,8) | 358 | #define PCC_ENABLE_FOUR vBIT(0x0F,0,8) |
359 | u64 pcc_err_mask; | 359 | u64 pcc_err_mask; |
360 | u64 pcc_err_alarm; | 360 | u64 pcc_err_alarm; |
361 | 361 | ||
362 | u64 tti_err_reg; | 362 | u64 tti_err_reg; |
363 | #define TTI_ECC_SG_ERR BIT(7) | 363 | #define TTI_ECC_SG_ERR s2BIT(7) |
364 | #define TTI_ECC_DB_ERR BIT(15) | 364 | #define TTI_ECC_DB_ERR s2BIT(15) |
365 | #define TTI_SM_ERR_ALARM BIT(23) | 365 | #define TTI_SM_ERR_ALARM s2BIT(23) |
366 | u64 tti_err_mask; | 366 | u64 tti_err_mask; |
367 | u64 tti_err_alarm; | 367 | u64 tti_err_alarm; |
368 | 368 | ||
369 | u64 lso_err_reg; | 369 | u64 lso_err_reg; |
370 | #define LSO6_SEND_OFLOW BIT(12) | 370 | #define LSO6_SEND_OFLOW s2BIT(12) |
371 | #define LSO7_SEND_OFLOW BIT(13) | 371 | #define LSO7_SEND_OFLOW s2BIT(13) |
372 | #define LSO6_ABORT BIT(14) | 372 | #define LSO6_ABORT s2BIT(14) |
373 | #define LSO7_ABORT BIT(15) | 373 | #define LSO7_ABORT s2BIT(15) |
374 | #define LSO6_SM_ERR_ALARM BIT(22) | 374 | #define LSO6_SM_ERR_ALARM s2BIT(22) |
375 | #define LSO7_SM_ERR_ALARM BIT(23) | 375 | #define LSO7_SM_ERR_ALARM s2BIT(23) |
376 | u64 lso_err_mask; | 376 | u64 lso_err_mask; |
377 | u64 lso_err_alarm; | 377 | u64 lso_err_alarm; |
378 | 378 | ||
379 | u64 tpa_err_reg; | 379 | u64 tpa_err_reg; |
380 | #define TPA_TX_FRM_DROP BIT(7) | 380 | #define TPA_TX_FRM_DROP s2BIT(7) |
381 | #define TPA_SM_ERR_ALARM BIT(23) | 381 | #define TPA_SM_ERR_ALARM s2BIT(23) |
382 | 382 | ||
383 | u64 tpa_err_mask; | 383 | u64 tpa_err_mask; |
384 | u64 tpa_err_alarm; | 384 | u64 tpa_err_alarm; |
385 | 385 | ||
386 | u64 sm_err_reg; | 386 | u64 sm_err_reg; |
387 | #define SM_SM_ERR_ALARM BIT(15) | 387 | #define SM_SM_ERR_ALARM s2BIT(15) |
388 | u64 sm_err_mask; | 388 | u64 sm_err_mask; |
389 | u64 sm_err_alarm; | 389 | u64 sm_err_alarm; |
390 | 390 | ||
@@ -397,7 +397,7 @@ struct XENA_dev_config { | |||
397 | #define X_MAX_FIFOS 8 | 397 | #define X_MAX_FIFOS 8 |
398 | #define X_FIFO_MAX_LEN 0x1FFF /*8191 */ | 398 | #define X_FIFO_MAX_LEN 0x1FFF /*8191 */ |
399 | u64 tx_fifo_partition_0; | 399 | u64 tx_fifo_partition_0; |
400 | #define TX_FIFO_PARTITION_EN BIT(0) | 400 | #define TX_FIFO_PARTITION_EN s2BIT(0) |
401 | #define TX_FIFO_PARTITION_0_PRI(val) vBIT(val,5,3) | 401 | #define TX_FIFO_PARTITION_0_PRI(val) vBIT(val,5,3) |
402 | #define TX_FIFO_PARTITION_0_LEN(val) vBIT(val,19,13) | 402 | #define TX_FIFO_PARTITION_0_LEN(val) vBIT(val,19,13) |
403 | #define TX_FIFO_PARTITION_1_PRI(val) vBIT(val,37,3) | 403 | #define TX_FIFO_PARTITION_1_PRI(val) vBIT(val,37,3) |
@@ -437,16 +437,16 @@ struct XENA_dev_config { | |||
437 | u64 tx_w_round_robin_4; | 437 | u64 tx_w_round_robin_4; |
438 | 438 | ||
439 | u64 tti_command_mem; | 439 | u64 tti_command_mem; |
440 | #define TTI_CMD_MEM_WE BIT(7) | 440 | #define TTI_CMD_MEM_WE s2BIT(7) |
441 | #define TTI_CMD_MEM_STROBE_NEW_CMD BIT(15) | 441 | #define TTI_CMD_MEM_STROBE_NEW_CMD s2BIT(15) |
442 | #define TTI_CMD_MEM_STROBE_BEING_EXECUTED BIT(15) | 442 | #define TTI_CMD_MEM_STROBE_BEING_EXECUTED s2BIT(15) |
443 | #define TTI_CMD_MEM_OFFSET(n) vBIT(n,26,6) | 443 | #define TTI_CMD_MEM_OFFSET(n) vBIT(n,26,6) |
444 | 444 | ||
445 | u64 tti_data1_mem; | 445 | u64 tti_data1_mem; |
446 | #define TTI_DATA1_MEM_TX_TIMER_VAL(n) vBIT(n,6,26) | 446 | #define TTI_DATA1_MEM_TX_TIMER_VAL(n) vBIT(n,6,26) |
447 | #define TTI_DATA1_MEM_TX_TIMER_AC_CI(n) vBIT(n,38,2) | 447 | #define TTI_DATA1_MEM_TX_TIMER_AC_CI(n) vBIT(n,38,2) |
448 | #define TTI_DATA1_MEM_TX_TIMER_AC_EN BIT(38) | 448 | #define TTI_DATA1_MEM_TX_TIMER_AC_EN s2BIT(38) |
449 | #define TTI_DATA1_MEM_TX_TIMER_CI_EN BIT(39) | 449 | #define TTI_DATA1_MEM_TX_TIMER_CI_EN s2BIT(39) |
450 | #define TTI_DATA1_MEM_TX_URNG_A(n) vBIT(n,41,7) | 450 | #define TTI_DATA1_MEM_TX_URNG_A(n) vBIT(n,41,7) |
451 | #define TTI_DATA1_MEM_TX_URNG_B(n) vBIT(n,49,7) | 451 | #define TTI_DATA1_MEM_TX_URNG_B(n) vBIT(n,49,7) |
452 | #define TTI_DATA1_MEM_TX_URNG_C(n) vBIT(n,57,7) | 452 | #define TTI_DATA1_MEM_TX_URNG_C(n) vBIT(n,57,7) |
@@ -459,11 +459,11 @@ struct XENA_dev_config { | |||
459 | 459 | ||
460 | /* Tx Protocol assist */ | 460 | /* Tx Protocol assist */ |
461 | u64 tx_pa_cfg; | 461 | u64 tx_pa_cfg; |
462 | #define TX_PA_CFG_IGNORE_FRM_ERR BIT(1) | 462 | #define TX_PA_CFG_IGNORE_FRM_ERR s2BIT(1) |
463 | #define TX_PA_CFG_IGNORE_SNAP_OUI BIT(2) | 463 | #define TX_PA_CFG_IGNORE_SNAP_OUI s2BIT(2) |
464 | #define TX_PA_CFG_IGNORE_LLC_CTRL BIT(3) | 464 | #define TX_PA_CFG_IGNORE_LLC_CTRL s2BIT(3) |
465 | #define TX_PA_CFG_IGNORE_L2_ERR BIT(6) | 465 | #define TX_PA_CFG_IGNORE_L2_ERR s2BIT(6) |
466 | #define RX_PA_CFG_STRIP_VLAN_TAG BIT(15) | 466 | #define RX_PA_CFG_STRIP_VLAN_TAG s2BIT(15) |
467 | 467 | ||
468 | /* Recent add, used only debug purposes. */ | 468 | /* Recent add, used only debug purposes. */ |
469 | u64 pcc_enable; | 469 | u64 pcc_enable; |
@@ -477,31 +477,31 @@ struct XENA_dev_config { | |||
477 | /* RxDMA Registers */ | 477 | /* RxDMA Registers */ |
478 | u64 rxdma_int_status; | 478 | u64 rxdma_int_status; |
479 | u64 rxdma_int_mask; | 479 | u64 rxdma_int_mask; |
480 | #define RXDMA_INT_RC_INT_M BIT(0) | 480 | #define RXDMA_INT_RC_INT_M s2BIT(0) |
481 | #define RXDMA_INT_RPA_INT_M BIT(1) | 481 | #define RXDMA_INT_RPA_INT_M s2BIT(1) |
482 | #define RXDMA_INT_RDA_INT_M BIT(2) | 482 | #define RXDMA_INT_RDA_INT_M s2BIT(2) |
483 | #define RXDMA_INT_RTI_INT_M BIT(3) | 483 | #define RXDMA_INT_RTI_INT_M s2BIT(3) |
484 | 484 | ||
485 | u64 rda_err_reg; | 485 | u64 rda_err_reg; |
486 | #define RDA_RXDn_ECC_SG_ERR vBIT(0xFF,0,8) | 486 | #define RDA_RXDn_ECC_SG_ERR vBIT(0xFF,0,8) |
487 | #define RDA_RXDn_ECC_DB_ERR vBIT(0xFF,8,8) | 487 | #define RDA_RXDn_ECC_DB_ERR vBIT(0xFF,8,8) |
488 | #define RDA_FRM_ECC_SG_ERR BIT(23) | 488 | #define RDA_FRM_ECC_SG_ERR s2BIT(23) |
489 | #define RDA_FRM_ECC_DB_N_AERR BIT(31) | 489 | #define RDA_FRM_ECC_DB_N_AERR s2BIT(31) |
490 | #define RDA_SM1_ERR_ALARM BIT(38) | 490 | #define RDA_SM1_ERR_ALARM s2BIT(38) |
491 | #define RDA_SM0_ERR_ALARM BIT(39) | 491 | #define RDA_SM0_ERR_ALARM s2BIT(39) |
492 | #define RDA_MISC_ERR BIT(47) | 492 | #define RDA_MISC_ERR s2BIT(47) |
493 | #define RDA_PCIX_ERR BIT(55) | 493 | #define RDA_PCIX_ERR s2BIT(55) |
494 | #define RDA_RXD_ECC_DB_SERR BIT(63) | 494 | #define RDA_RXD_ECC_DB_SERR s2BIT(63) |
495 | u64 rda_err_mask; | 495 | u64 rda_err_mask; |
496 | u64 rda_err_alarm; | 496 | u64 rda_err_alarm; |
497 | 497 | ||
498 | u64 rc_err_reg; | 498 | u64 rc_err_reg; |
499 | #define RC_PRCn_ECC_SG_ERR vBIT(0xFF,0,8) | 499 | #define RC_PRCn_ECC_SG_ERR vBIT(0xFF,0,8) |
500 | #define RC_PRCn_ECC_DB_ERR vBIT(0xFF,8,8) | 500 | #define RC_PRCn_ECC_DB_ERR vBIT(0xFF,8,8) |
501 | #define RC_FTC_ECC_SG_ERR BIT(23) | 501 | #define RC_FTC_ECC_SG_ERR s2BIT(23) |
502 | #define RC_FTC_ECC_DB_ERR BIT(31) | 502 | #define RC_FTC_ECC_DB_ERR s2BIT(31) |
503 | #define RC_PRCn_SM_ERR_ALARM vBIT(0xFF,32,8) | 503 | #define RC_PRCn_SM_ERR_ALARM vBIT(0xFF,32,8) |
504 | #define RC_FTC_SM_ERR_ALARM BIT(47) | 504 | #define RC_FTC_SM_ERR_ALARM s2BIT(47) |
505 | #define RC_RDA_FAIL_WR_Rn vBIT(0xFF,48,8) | 505 | #define RC_RDA_FAIL_WR_Rn vBIT(0xFF,48,8) |
506 | u64 rc_err_mask; | 506 | u64 rc_err_mask; |
507 | u64 rc_err_alarm; | 507 | u64 rc_err_alarm; |
@@ -517,18 +517,18 @@ struct XENA_dev_config { | |||
517 | u64 prc_pcix_err_alarm; | 517 | u64 prc_pcix_err_alarm; |
518 | 518 | ||
519 | u64 rpa_err_reg; | 519 | u64 rpa_err_reg; |
520 | #define RPA_ECC_SG_ERR BIT(7) | 520 | #define RPA_ECC_SG_ERR s2BIT(7) |
521 | #define RPA_ECC_DB_ERR BIT(15) | 521 | #define RPA_ECC_DB_ERR s2BIT(15) |
522 | #define RPA_FLUSH_REQUEST BIT(22) | 522 | #define RPA_FLUSH_REQUEST s2BIT(22) |
523 | #define RPA_SM_ERR_ALARM BIT(23) | 523 | #define RPA_SM_ERR_ALARM s2BIT(23) |
524 | #define RPA_CREDIT_ERR BIT(31) | 524 | #define RPA_CREDIT_ERR s2BIT(31) |
525 | u64 rpa_err_mask; | 525 | u64 rpa_err_mask; |
526 | u64 rpa_err_alarm; | 526 | u64 rpa_err_alarm; |
527 | 527 | ||
528 | u64 rti_err_reg; | 528 | u64 rti_err_reg; |
529 | #define RTI_ECC_SG_ERR BIT(7) | 529 | #define RTI_ECC_SG_ERR s2BIT(7) |
530 | #define RTI_ECC_DB_ERR BIT(15) | 530 | #define RTI_ECC_DB_ERR s2BIT(15) |
531 | #define RTI_SM_ERR_ALARM BIT(23) | 531 | #define RTI_SM_ERR_ALARM s2BIT(23) |
532 | u64 rti_err_mask; | 532 | u64 rti_err_mask; |
533 | u64 rti_err_alarm; | 533 | u64 rti_err_alarm; |
534 | 534 | ||
@@ -568,49 +568,49 @@ struct XENA_dev_config { | |||
568 | #endif | 568 | #endif |
569 | u64 prc_rxd0_n[RX_MAX_RINGS]; | 569 | u64 prc_rxd0_n[RX_MAX_RINGS]; |
570 | u64 prc_ctrl_n[RX_MAX_RINGS]; | 570 | u64 prc_ctrl_n[RX_MAX_RINGS]; |
571 | #define PRC_CTRL_RC_ENABLED BIT(7) | 571 | #define PRC_CTRL_RC_ENABLED s2BIT(7) |
572 | #define PRC_CTRL_RING_MODE (BIT(14)|BIT(15)) | 572 | #define PRC_CTRL_RING_MODE (s2BIT(14)|s2BIT(15)) |
573 | #define PRC_CTRL_RING_MODE_1 vBIT(0,14,2) | 573 | #define PRC_CTRL_RING_MODE_1 vBIT(0,14,2) |
574 | #define PRC_CTRL_RING_MODE_3 vBIT(1,14,2) | 574 | #define PRC_CTRL_RING_MODE_3 vBIT(1,14,2) |
575 | #define PRC_CTRL_RING_MODE_5 vBIT(2,14,2) | 575 | #define PRC_CTRL_RING_MODE_5 vBIT(2,14,2) |
576 | #define PRC_CTRL_RING_MODE_x vBIT(3,14,2) | 576 | #define PRC_CTRL_RING_MODE_x vBIT(3,14,2) |
577 | #define PRC_CTRL_NO_SNOOP (BIT(22)|BIT(23)) | 577 | #define PRC_CTRL_NO_SNOOP (s2BIT(22)|s2BIT(23)) |
578 | #define PRC_CTRL_NO_SNOOP_DESC BIT(22) | 578 | #define PRC_CTRL_NO_SNOOP_DESC s2BIT(22) |
579 | #define PRC_CTRL_NO_SNOOP_BUFF BIT(23) | 579 | #define PRC_CTRL_NO_SNOOP_BUFF s2BIT(23) |
580 | #define PRC_CTRL_BIMODAL_INTERRUPT BIT(37) | 580 | #define PRC_CTRL_BIMODAL_INTERRUPT s2BIT(37) |
581 | #define PRC_CTRL_GROUP_READS BIT(38) | 581 | #define PRC_CTRL_GROUP_READS s2BIT(38) |
582 | #define PRC_CTRL_RXD_BACKOFF_INTERVAL(val) vBIT(val,40,24) | 582 | #define PRC_CTRL_RXD_BACKOFF_INTERVAL(val) vBIT(val,40,24) |
583 | 583 | ||
584 | u64 prc_alarm_action; | 584 | u64 prc_alarm_action; |
585 | #define PRC_ALARM_ACTION_RR_R0_STOP BIT(3) | 585 | #define PRC_ALARM_ACTION_RR_R0_STOP s2BIT(3) |
586 | #define PRC_ALARM_ACTION_RW_R0_STOP BIT(7) | 586 | #define PRC_ALARM_ACTION_RW_R0_STOP s2BIT(7) |
587 | #define PRC_ALARM_ACTION_RR_R1_STOP BIT(11) | 587 | #define PRC_ALARM_ACTION_RR_R1_STOP s2BIT(11) |
588 | #define PRC_ALARM_ACTION_RW_R1_STOP BIT(15) | 588 | #define PRC_ALARM_ACTION_RW_R1_STOP s2BIT(15) |
589 | #define PRC_ALARM_ACTION_RR_R2_STOP BIT(19) | 589 | #define PRC_ALARM_ACTION_RR_R2_STOP s2BIT(19) |
590 | #define PRC_ALARM_ACTION_RW_R2_STOP BIT(23) | 590 | #define PRC_ALARM_ACTION_RW_R2_STOP s2BIT(23) |
591 | #define PRC_ALARM_ACTION_RR_R3_STOP BIT(27) | 591 | #define PRC_ALARM_ACTION_RR_R3_STOP s2BIT(27) |
592 | #define PRC_ALARM_ACTION_RW_R3_STOP BIT(31) | 592 | #define PRC_ALARM_ACTION_RW_R3_STOP s2BIT(31) |
593 | #define PRC_ALARM_ACTION_RR_R4_STOP BIT(35) | 593 | #define PRC_ALARM_ACTION_RR_R4_STOP s2BIT(35) |
594 | #define PRC_ALARM_ACTION_RW_R4_STOP BIT(39) | 594 | #define PRC_ALARM_ACTION_RW_R4_STOP s2BIT(39) |
595 | #define PRC_ALARM_ACTION_RR_R5_STOP BIT(43) | 595 | #define PRC_ALARM_ACTION_RR_R5_STOP s2BIT(43) |
596 | #define PRC_ALARM_ACTION_RW_R5_STOP BIT(47) | 596 | #define PRC_ALARM_ACTION_RW_R5_STOP s2BIT(47) |
597 | #define PRC_ALARM_ACTION_RR_R6_STOP BIT(51) | 597 | #define PRC_ALARM_ACTION_RR_R6_STOP s2BIT(51) |
598 | #define PRC_ALARM_ACTION_RW_R6_STOP BIT(55) | 598 | #define PRC_ALARM_ACTION_RW_R6_STOP s2BIT(55) |
599 | #define PRC_ALARM_ACTION_RR_R7_STOP BIT(59) | 599 | #define PRC_ALARM_ACTION_RR_R7_STOP s2BIT(59) |
600 | #define PRC_ALARM_ACTION_RW_R7_STOP BIT(63) | 600 | #define PRC_ALARM_ACTION_RW_R7_STOP s2BIT(63) |
601 | 601 | ||
602 | /* Receive traffic interrupts */ | 602 | /* Receive traffic interrupts */ |
603 | u64 rti_command_mem; | 603 | u64 rti_command_mem; |
604 | #define RTI_CMD_MEM_WE BIT(7) | 604 | #define RTI_CMD_MEM_WE s2BIT(7) |
605 | #define RTI_CMD_MEM_STROBE BIT(15) | 605 | #define RTI_CMD_MEM_STROBE s2BIT(15) |
606 | #define RTI_CMD_MEM_STROBE_NEW_CMD BIT(15) | 606 | #define RTI_CMD_MEM_STROBE_NEW_CMD s2BIT(15) |
607 | #define RTI_CMD_MEM_STROBE_CMD_BEING_EXECUTED BIT(15) | 607 | #define RTI_CMD_MEM_STROBE_CMD_BEING_EXECUTED s2BIT(15) |
608 | #define RTI_CMD_MEM_OFFSET(n) vBIT(n,29,3) | 608 | #define RTI_CMD_MEM_OFFSET(n) vBIT(n,29,3) |
609 | 609 | ||
610 | u64 rti_data1_mem; | 610 | u64 rti_data1_mem; |
611 | #define RTI_DATA1_MEM_RX_TIMER_VAL(n) vBIT(n,3,29) | 611 | #define RTI_DATA1_MEM_RX_TIMER_VAL(n) vBIT(n,3,29) |
612 | #define RTI_DATA1_MEM_RX_TIMER_AC_EN BIT(38) | 612 | #define RTI_DATA1_MEM_RX_TIMER_AC_EN s2BIT(38) |
613 | #define RTI_DATA1_MEM_RX_TIMER_CI_EN BIT(39) | 613 | #define RTI_DATA1_MEM_RX_TIMER_CI_EN s2BIT(39) |
614 | #define RTI_DATA1_MEM_RX_URNG_A(n) vBIT(n,41,7) | 614 | #define RTI_DATA1_MEM_RX_URNG_A(n) vBIT(n,41,7) |
615 | #define RTI_DATA1_MEM_RX_URNG_B(n) vBIT(n,49,7) | 615 | #define RTI_DATA1_MEM_RX_URNG_B(n) vBIT(n,49,7) |
616 | #define RTI_DATA1_MEM_RX_URNG_C(n) vBIT(n,57,7) | 616 | #define RTI_DATA1_MEM_RX_URNG_C(n) vBIT(n,57,7) |
@@ -622,10 +622,10 @@ struct XENA_dev_config { | |||
622 | #define RTI_DATA2_MEM_RX_UFC_D(n) vBIT(n,48,16) | 622 | #define RTI_DATA2_MEM_RX_UFC_D(n) vBIT(n,48,16) |
623 | 623 | ||
624 | u64 rx_pa_cfg; | 624 | u64 rx_pa_cfg; |
625 | #define RX_PA_CFG_IGNORE_FRM_ERR BIT(1) | 625 | #define RX_PA_CFG_IGNORE_FRM_ERR s2BIT(1) |
626 | #define RX_PA_CFG_IGNORE_SNAP_OUI BIT(2) | 626 | #define RX_PA_CFG_IGNORE_SNAP_OUI s2BIT(2) |
627 | #define RX_PA_CFG_IGNORE_LLC_CTRL BIT(3) | 627 | #define RX_PA_CFG_IGNORE_LLC_CTRL s2BIT(3) |
628 | #define RX_PA_CFG_IGNORE_L2_ERR BIT(6) | 628 | #define RX_PA_CFG_IGNORE_L2_ERR s2BIT(6) |
629 | 629 | ||
630 | u64 unused_11_1; | 630 | u64 unused_11_1; |
631 | 631 | ||
@@ -641,64 +641,64 @@ struct XENA_dev_config { | |||
641 | /* Media Access Controller Register */ | 641 | /* Media Access Controller Register */ |
642 | u64 mac_int_status; | 642 | u64 mac_int_status; |
643 | u64 mac_int_mask; | 643 | u64 mac_int_mask; |
644 | #define MAC_INT_STATUS_TMAC_INT BIT(0) | 644 | #define MAC_INT_STATUS_TMAC_INT s2BIT(0) |
645 | #define MAC_INT_STATUS_RMAC_INT BIT(1) | 645 | #define MAC_INT_STATUS_RMAC_INT s2BIT(1) |
646 | 646 | ||
647 | u64 mac_tmac_err_reg; | 647 | u64 mac_tmac_err_reg; |
648 | #define TMAC_ECC_SG_ERR BIT(7) | 648 | #define TMAC_ECC_SG_ERR s2BIT(7) |
649 | #define TMAC_ECC_DB_ERR BIT(15) | 649 | #define TMAC_ECC_DB_ERR s2BIT(15) |
650 | #define TMAC_TX_BUF_OVRN BIT(23) | 650 | #define TMAC_TX_BUF_OVRN s2BIT(23) |
651 | #define TMAC_TX_CRI_ERR BIT(31) | 651 | #define TMAC_TX_CRI_ERR s2BIT(31) |
652 | #define TMAC_TX_SM_ERR BIT(39) | 652 | #define TMAC_TX_SM_ERR s2BIT(39) |
653 | #define TMAC_DESC_ECC_SG_ERR BIT(47) | 653 | #define TMAC_DESC_ECC_SG_ERR s2BIT(47) |
654 | #define TMAC_DESC_ECC_DB_ERR BIT(55) | 654 | #define TMAC_DESC_ECC_DB_ERR s2BIT(55) |
655 | 655 | ||
656 | u64 mac_tmac_err_mask; | 656 | u64 mac_tmac_err_mask; |
657 | u64 mac_tmac_err_alarm; | 657 | u64 mac_tmac_err_alarm; |
658 | 658 | ||
659 | u64 mac_rmac_err_reg; | 659 | u64 mac_rmac_err_reg; |
660 | #define RMAC_RX_BUFF_OVRN BIT(0) | 660 | #define RMAC_RX_BUFF_OVRN s2BIT(0) |
661 | #define RMAC_FRM_RCVD_INT BIT(1) | 661 | #define RMAC_FRM_RCVD_INT s2BIT(1) |
662 | #define RMAC_UNUSED_INT BIT(2) | 662 | #define RMAC_UNUSED_INT s2BIT(2) |
663 | #define RMAC_RTS_PNUM_ECC_SG_ERR BIT(5) | 663 | #define RMAC_RTS_PNUM_ECC_SG_ERR s2BIT(5) |
664 | #define RMAC_RTS_DS_ECC_SG_ERR BIT(6) | 664 | #define RMAC_RTS_DS_ECC_SG_ERR s2BIT(6) |
665 | #define RMAC_RD_BUF_ECC_SG_ERR BIT(7) | 665 | #define RMAC_RD_BUF_ECC_SG_ERR s2BIT(7) |
666 | #define RMAC_RTH_MAP_ECC_SG_ERR BIT(8) | 666 | #define RMAC_RTH_MAP_ECC_SG_ERR s2BIT(8) |
667 | #define RMAC_RTH_SPDM_ECC_SG_ERR BIT(9) | 667 | #define RMAC_RTH_SPDM_ECC_SG_ERR s2BIT(9) |
668 | #define RMAC_RTS_VID_ECC_SG_ERR BIT(10) | 668 | #define RMAC_RTS_VID_ECC_SG_ERR s2BIT(10) |
669 | #define RMAC_DA_SHADOW_ECC_SG_ERR BIT(11) | 669 | #define RMAC_DA_SHADOW_ECC_SG_ERR s2BIT(11) |
670 | #define RMAC_RTS_PNUM_ECC_DB_ERR BIT(13) | 670 | #define RMAC_RTS_PNUM_ECC_DB_ERR s2BIT(13) |
671 | #define RMAC_RTS_DS_ECC_DB_ERR BIT(14) | 671 | #define RMAC_RTS_DS_ECC_DB_ERR s2BIT(14) |
672 | #define RMAC_RD_BUF_ECC_DB_ERR BIT(15) | 672 | #define RMAC_RD_BUF_ECC_DB_ERR s2BIT(15) |
673 | #define RMAC_RTH_MAP_ECC_DB_ERR BIT(16) | 673 | #define RMAC_RTH_MAP_ECC_DB_ERR s2BIT(16) |
674 | #define RMAC_RTH_SPDM_ECC_DB_ERR BIT(17) | 674 | #define RMAC_RTH_SPDM_ECC_DB_ERR s2BIT(17) |
675 | #define RMAC_RTS_VID_ECC_DB_ERR BIT(18) | 675 | #define RMAC_RTS_VID_ECC_DB_ERR s2BIT(18) |
676 | #define RMAC_DA_SHADOW_ECC_DB_ERR BIT(19) | 676 | #define RMAC_DA_SHADOW_ECC_DB_ERR s2BIT(19) |
677 | #define RMAC_LINK_STATE_CHANGE_INT BIT(31) | 677 | #define RMAC_LINK_STATE_CHANGE_INT s2BIT(31) |
678 | #define RMAC_RX_SM_ERR BIT(39) | 678 | #define RMAC_RX_SM_ERR s2BIT(39) |
679 | #define RMAC_SINGLE_ECC_ERR (BIT(5) | BIT(6) | BIT(7) |\ | 679 | #define RMAC_SINGLE_ECC_ERR (s2BIT(5) | s2BIT(6) | s2BIT(7) |\ |
680 | BIT(8) | BIT(9) | BIT(10)|\ | 680 | s2BIT(8) | s2BIT(9) | s2BIT(10)|\ |
681 | BIT(11)) | 681 | s2BIT(11)) |
682 | #define RMAC_DOUBLE_ECC_ERR (BIT(13) | BIT(14) | BIT(15) |\ | 682 | #define RMAC_DOUBLE_ECC_ERR (s2BIT(13) | s2BIT(14) | s2BIT(15) |\ |
683 | BIT(16) | BIT(17) | BIT(18)|\ | 683 | s2BIT(16) | s2BIT(17) | s2BIT(18)|\ |
684 | BIT(19)) | 684 | s2BIT(19)) |
685 | u64 mac_rmac_err_mask; | 685 | u64 mac_rmac_err_mask; |
686 | u64 mac_rmac_err_alarm; | 686 | u64 mac_rmac_err_alarm; |
687 | 687 | ||
688 | u8 unused14[0x100 - 0x40]; | 688 | u8 unused14[0x100 - 0x40]; |
689 | 689 | ||
690 | u64 mac_cfg; | 690 | u64 mac_cfg; |
691 | #define MAC_CFG_TMAC_ENABLE BIT(0) | 691 | #define MAC_CFG_TMAC_ENABLE s2BIT(0) |
692 | #define MAC_CFG_RMAC_ENABLE BIT(1) | 692 | #define MAC_CFG_RMAC_ENABLE s2BIT(1) |
693 | #define MAC_CFG_LAN_NOT_WAN BIT(2) | 693 | #define MAC_CFG_LAN_NOT_WAN s2BIT(2) |
694 | #define MAC_CFG_TMAC_LOOPBACK BIT(3) | 694 | #define MAC_CFG_TMAC_LOOPBACK s2BIT(3) |
695 | #define MAC_CFG_TMAC_APPEND_PAD BIT(4) | 695 | #define MAC_CFG_TMAC_APPEND_PAD s2BIT(4) |
696 | #define MAC_CFG_RMAC_STRIP_FCS BIT(5) | 696 | #define MAC_CFG_RMAC_STRIP_FCS s2BIT(5) |
697 | #define MAC_CFG_RMAC_STRIP_PAD BIT(6) | 697 | #define MAC_CFG_RMAC_STRIP_PAD s2BIT(6) |
698 | #define MAC_CFG_RMAC_PROM_ENABLE BIT(7) | 698 | #define MAC_CFG_RMAC_PROM_ENABLE s2BIT(7) |
699 | #define MAC_RMAC_DISCARD_PFRM BIT(8) | 699 | #define MAC_RMAC_DISCARD_PFRM s2BIT(8) |
700 | #define MAC_RMAC_BCAST_ENABLE BIT(9) | 700 | #define MAC_RMAC_BCAST_ENABLE s2BIT(9) |
701 | #define MAC_RMAC_ALL_ADDR_ENABLE BIT(10) | 701 | #define MAC_RMAC_ALL_ADDR_ENABLE s2BIT(10) |
702 | #define MAC_RMAC_INVLD_IPG_THR(val) vBIT(val,16,8) | 702 | #define MAC_RMAC_INVLD_IPG_THR(val) vBIT(val,16,8) |
703 | 703 | ||
704 | u64 tmac_avg_ipg; | 704 | u64 tmac_avg_ipg; |
@@ -710,14 +710,14 @@ struct XENA_dev_config { | |||
710 | #define RMAC_MAX_PYLD_LEN_JUMBO_DEF vBIT(9600,2,14) | 710 | #define RMAC_MAX_PYLD_LEN_JUMBO_DEF vBIT(9600,2,14) |
711 | 711 | ||
712 | u64 rmac_err_cfg; | 712 | u64 rmac_err_cfg; |
713 | #define RMAC_ERR_FCS BIT(0) | 713 | #define RMAC_ERR_FCS s2BIT(0) |
714 | #define RMAC_ERR_FCS_ACCEPT BIT(1) | 714 | #define RMAC_ERR_FCS_ACCEPT s2BIT(1) |
715 | #define RMAC_ERR_TOO_LONG BIT(1) | 715 | #define RMAC_ERR_TOO_LONG s2BIT(1) |
716 | #define RMAC_ERR_TOO_LONG_ACCEPT BIT(1) | 716 | #define RMAC_ERR_TOO_LONG_ACCEPT s2BIT(1) |
717 | #define RMAC_ERR_RUNT BIT(2) | 717 | #define RMAC_ERR_RUNT s2BIT(2) |
718 | #define RMAC_ERR_RUNT_ACCEPT BIT(2) | 718 | #define RMAC_ERR_RUNT_ACCEPT s2BIT(2) |
719 | #define RMAC_ERR_LEN_MISMATCH BIT(3) | 719 | #define RMAC_ERR_LEN_MISMATCH s2BIT(3) |
720 | #define RMAC_ERR_LEN_MISMATCH_ACCEPT BIT(3) | 720 | #define RMAC_ERR_LEN_MISMATCH_ACCEPT s2BIT(3) |
721 | 721 | ||
722 | u64 rmac_cfg_key; | 722 | u64 rmac_cfg_key; |
723 | #define RMAC_CFG_KEY(val) vBIT(val,0,16) | 723 | #define RMAC_CFG_KEY(val) vBIT(val,0,16) |
@@ -728,15 +728,15 @@ struct XENA_dev_config { | |||
728 | #define MAC_MC_ADDR_START_OFFSET 16 | 728 | #define MAC_MC_ADDR_START_OFFSET 16 |
729 | #define MAC_MC_ALL_MC_ADDR_OFFSET 63 /* enables all multicast pkts */ | 729 | #define MAC_MC_ALL_MC_ADDR_OFFSET 63 /* enables all multicast pkts */ |
730 | u64 rmac_addr_cmd_mem; | 730 | u64 rmac_addr_cmd_mem; |
731 | #define RMAC_ADDR_CMD_MEM_WE BIT(7) | 731 | #define RMAC_ADDR_CMD_MEM_WE s2BIT(7) |
732 | #define RMAC_ADDR_CMD_MEM_RD 0 | 732 | #define RMAC_ADDR_CMD_MEM_RD 0 |
733 | #define RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD BIT(15) | 733 | #define RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD s2BIT(15) |
734 | #define RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING BIT(15) | 734 | #define RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING s2BIT(15) |
735 | #define RMAC_ADDR_CMD_MEM_OFFSET(n) vBIT(n,26,6) | 735 | #define RMAC_ADDR_CMD_MEM_OFFSET(n) vBIT(n,26,6) |
736 | 736 | ||
737 | u64 rmac_addr_data0_mem; | 737 | u64 rmac_addr_data0_mem; |
738 | #define RMAC_ADDR_DATA0_MEM_ADDR(n) vBIT(n,0,48) | 738 | #define RMAC_ADDR_DATA0_MEM_ADDR(n) vBIT(n,0,48) |
739 | #define RMAC_ADDR_DATA0_MEM_USER BIT(48) | 739 | #define RMAC_ADDR_DATA0_MEM_USER s2BIT(48) |
740 | 740 | ||
741 | u64 rmac_addr_data1_mem; | 741 | u64 rmac_addr_data1_mem; |
742 | #define RMAC_ADDR_DATA1_MEM_MASK(n) vBIT(n,0,48) | 742 | #define RMAC_ADDR_DATA1_MEM_MASK(n) vBIT(n,0,48) |
@@ -753,10 +753,10 @@ struct XENA_dev_config { | |||
753 | u64 tmac_ipg_cfg; | 753 | u64 tmac_ipg_cfg; |
754 | 754 | ||
755 | u64 rmac_pause_cfg; | 755 | u64 rmac_pause_cfg; |
756 | #define RMAC_PAUSE_GEN BIT(0) | 756 | #define RMAC_PAUSE_GEN s2BIT(0) |
757 | #define RMAC_PAUSE_GEN_ENABLE BIT(0) | 757 | #define RMAC_PAUSE_GEN_ENABLE s2BIT(0) |
758 | #define RMAC_PAUSE_RX BIT(1) | 758 | #define RMAC_PAUSE_RX s2BIT(1) |
759 | #define RMAC_PAUSE_RX_ENABLE BIT(1) | 759 | #define RMAC_PAUSE_RX_ENABLE s2BIT(1) |
760 | #define RMAC_PAUSE_HG_PTIME_DEF vBIT(0xFFFF,16,16) | 760 | #define RMAC_PAUSE_HG_PTIME_DEF vBIT(0xFFFF,16,16) |
761 | #define RMAC_PAUSE_HG_PTIME(val) vBIT(val,16,16) | 761 | #define RMAC_PAUSE_HG_PTIME(val) vBIT(val,16,16) |
762 | 762 | ||
@@ -787,29 +787,29 @@ struct XENA_dev_config { | |||
787 | #define MAX_DIX_MAP 4 | 787 | #define MAX_DIX_MAP 4 |
788 | u64 rts_dix_map_n[MAX_DIX_MAP]; | 788 | u64 rts_dix_map_n[MAX_DIX_MAP]; |
789 | #define RTS_DIX_MAP_ETYPE(val) vBIT(val,0,16) | 789 | #define RTS_DIX_MAP_ETYPE(val) vBIT(val,0,16) |
790 | #define RTS_DIX_MAP_SCW(val) BIT(val,21) | 790 | #define RTS_DIX_MAP_SCW(val) s2BIT(val,21) |
791 | 791 | ||
792 | u64 rts_q_alternates; | 792 | u64 rts_q_alternates; |
793 | u64 rts_default_q; | 793 | u64 rts_default_q; |
794 | 794 | ||
795 | u64 rts_ctrl; | 795 | u64 rts_ctrl; |
796 | #define RTS_CTRL_IGNORE_SNAP_OUI BIT(2) | 796 | #define RTS_CTRL_IGNORE_SNAP_OUI s2BIT(2) |
797 | #define RTS_CTRL_IGNORE_LLC_CTRL BIT(3) | 797 | #define RTS_CTRL_IGNORE_LLC_CTRL s2BIT(3) |
798 | 798 | ||
799 | u64 rts_pn_cam_ctrl; | 799 | u64 rts_pn_cam_ctrl; |
800 | #define RTS_PN_CAM_CTRL_WE BIT(7) | 800 | #define RTS_PN_CAM_CTRL_WE s2BIT(7) |
801 | #define RTS_PN_CAM_CTRL_STROBE_NEW_CMD BIT(15) | 801 | #define RTS_PN_CAM_CTRL_STROBE_NEW_CMD s2BIT(15) |
802 | #define RTS_PN_CAM_CTRL_STROBE_BEING_EXECUTED BIT(15) | 802 | #define RTS_PN_CAM_CTRL_STROBE_BEING_EXECUTED s2BIT(15) |
803 | #define RTS_PN_CAM_CTRL_OFFSET(n) vBIT(n,24,8) | 803 | #define RTS_PN_CAM_CTRL_OFFSET(n) vBIT(n,24,8) |
804 | u64 rts_pn_cam_data; | 804 | u64 rts_pn_cam_data; |
805 | #define RTS_PN_CAM_DATA_TCP_SELECT BIT(7) | 805 | #define RTS_PN_CAM_DATA_TCP_SELECT s2BIT(7) |
806 | #define RTS_PN_CAM_DATA_PORT(val) vBIT(val,8,16) | 806 | #define RTS_PN_CAM_DATA_PORT(val) vBIT(val,8,16) |
807 | #define RTS_PN_CAM_DATA_SCW(val) vBIT(val,24,8) | 807 | #define RTS_PN_CAM_DATA_SCW(val) vBIT(val,24,8) |
808 | 808 | ||
809 | u64 rts_ds_mem_ctrl; | 809 | u64 rts_ds_mem_ctrl; |
810 | #define RTS_DS_MEM_CTRL_WE BIT(7) | 810 | #define RTS_DS_MEM_CTRL_WE s2BIT(7) |
811 | #define RTS_DS_MEM_CTRL_STROBE_NEW_CMD BIT(15) | 811 | #define RTS_DS_MEM_CTRL_STROBE_NEW_CMD s2BIT(15) |
812 | #define RTS_DS_MEM_CTRL_STROBE_CMD_BEING_EXECUTED BIT(15) | 812 | #define RTS_DS_MEM_CTRL_STROBE_CMD_BEING_EXECUTED s2BIT(15) |
813 | #define RTS_DS_MEM_CTRL_OFFSET(n) vBIT(n,26,6) | 813 | #define RTS_DS_MEM_CTRL_OFFSET(n) vBIT(n,26,6) |
814 | u64 rts_ds_mem_data; | 814 | u64 rts_ds_mem_data; |
815 | #define RTS_DS_MEM_DATA(n) vBIT(n,0,8) | 815 | #define RTS_DS_MEM_DATA(n) vBIT(n,0,8) |
@@ -823,23 +823,23 @@ struct XENA_dev_config { | |||
823 | 823 | ||
824 | /* memory controller registers */ | 824 | /* memory controller registers */ |
825 | u64 mc_int_status; | 825 | u64 mc_int_status; |
826 | #define MC_INT_STATUS_MC_INT BIT(0) | 826 | #define MC_INT_STATUS_MC_INT s2BIT(0) |
827 | u64 mc_int_mask; | 827 | u64 mc_int_mask; |
828 | #define MC_INT_MASK_MC_INT BIT(0) | 828 | #define MC_INT_MASK_MC_INT s2BIT(0) |
829 | 829 | ||
830 | u64 mc_err_reg; | 830 | u64 mc_err_reg; |
831 | #define MC_ERR_REG_ECC_DB_ERR_L BIT(14) | 831 | #define MC_ERR_REG_ECC_DB_ERR_L s2BIT(14) |
832 | #define MC_ERR_REG_ECC_DB_ERR_U BIT(15) | 832 | #define MC_ERR_REG_ECC_DB_ERR_U s2BIT(15) |
833 | #define MC_ERR_REG_MIRI_ECC_DB_ERR_0 BIT(18) | 833 | #define MC_ERR_REG_MIRI_ECC_DB_ERR_0 s2BIT(18) |
834 | #define MC_ERR_REG_MIRI_ECC_DB_ERR_1 BIT(20) | 834 | #define MC_ERR_REG_MIRI_ECC_DB_ERR_1 s2BIT(20) |
835 | #define MC_ERR_REG_MIRI_CRI_ERR_0 BIT(22) | 835 | #define MC_ERR_REG_MIRI_CRI_ERR_0 s2BIT(22) |
836 | #define MC_ERR_REG_MIRI_CRI_ERR_1 BIT(23) | 836 | #define MC_ERR_REG_MIRI_CRI_ERR_1 s2BIT(23) |
837 | #define MC_ERR_REG_SM_ERR BIT(31) | 837 | #define MC_ERR_REG_SM_ERR s2BIT(31) |
838 | #define MC_ERR_REG_ECC_ALL_SNG (BIT(2) | BIT(3) | BIT(4) | BIT(5) |\ | 838 | #define MC_ERR_REG_ECC_ALL_SNG (s2BIT(2) | s2BIT(3) | s2BIT(4) | s2BIT(5) |\ |
839 | BIT(17) | BIT(19)) | 839 | s2BIT(17) | s2BIT(19)) |
840 | #define MC_ERR_REG_ECC_ALL_DBL (BIT(10) | BIT(11) | BIT(12) |\ | 840 | #define MC_ERR_REG_ECC_ALL_DBL (s2BIT(10) | s2BIT(11) | s2BIT(12) |\ |
841 | BIT(13) | BIT(18) | BIT(20)) | 841 | s2BIT(13) | s2BIT(18) | s2BIT(20)) |
842 | #define PLL_LOCK_N BIT(39) | 842 | #define PLL_LOCK_N s2BIT(39) |
843 | u64 mc_err_mask; | 843 | u64 mc_err_mask; |
844 | u64 mc_err_alarm; | 844 | u64 mc_err_alarm; |
845 | 845 | ||
@@ -857,8 +857,8 @@ struct XENA_dev_config { | |||
857 | #define RX_QUEUE_CFG_Q7_SZ(n) vBIT(n,56,8) | 857 | #define RX_QUEUE_CFG_Q7_SZ(n) vBIT(n,56,8) |
858 | 858 | ||
859 | u64 mc_rldram_mrs; | 859 | u64 mc_rldram_mrs; |
860 | #define MC_RLDRAM_QUEUE_SIZE_ENABLE BIT(39) | 860 | #define MC_RLDRAM_QUEUE_SIZE_ENABLE s2BIT(39) |
861 | #define MC_RLDRAM_MRS_ENABLE BIT(47) | 861 | #define MC_RLDRAM_MRS_ENABLE s2BIT(47) |
862 | 862 | ||
863 | u64 mc_rldram_interleave; | 863 | u64 mc_rldram_interleave; |
864 | 864 | ||
@@ -871,11 +871,11 @@ struct XENA_dev_config { | |||
871 | u64 mc_rldram_ref_per; | 871 | u64 mc_rldram_ref_per; |
872 | u8 unused20[0x220 - 0x208]; | 872 | u8 unused20[0x220 - 0x208]; |
873 | u64 mc_rldram_test_ctrl; | 873 | u64 mc_rldram_test_ctrl; |
874 | #define MC_RLDRAM_TEST_MODE BIT(47) | 874 | #define MC_RLDRAM_TEST_MODE s2BIT(47) |
875 | #define MC_RLDRAM_TEST_WRITE BIT(7) | 875 | #define MC_RLDRAM_TEST_WRITE s2BIT(7) |
876 | #define MC_RLDRAM_TEST_GO BIT(15) | 876 | #define MC_RLDRAM_TEST_GO s2BIT(15) |
877 | #define MC_RLDRAM_TEST_DONE BIT(23) | 877 | #define MC_RLDRAM_TEST_DONE s2BIT(23) |
878 | #define MC_RLDRAM_TEST_PASS BIT(31) | 878 | #define MC_RLDRAM_TEST_PASS s2BIT(31) |
879 | 879 | ||
880 | u8 unused21[0x240 - 0x228]; | 880 | u8 unused21[0x240 - 0x228]; |
881 | u64 mc_rldram_test_add; | 881 | u64 mc_rldram_test_add; |
@@ -888,7 +888,7 @@ struct XENA_dev_config { | |||
888 | 888 | ||
889 | u8 unused24_1[0x360 - 0x308]; | 889 | u8 unused24_1[0x360 - 0x308]; |
890 | u64 mc_rldram_ctrl; | 890 | u64 mc_rldram_ctrl; |
891 | #define MC_RLDRAM_ENABLE_ODT BIT(7) | 891 | #define MC_RLDRAM_ENABLE_ODT s2BIT(7) |
892 | 892 | ||
893 | u8 unused24_2[0x640 - 0x368]; | 893 | u8 unused24_2[0x640 - 0x368]; |
894 | u64 mc_rldram_ref_per_herc; | 894 | u64 mc_rldram_ref_per_herc; |
@@ -906,24 +906,24 @@ struct XENA_dev_config { | |||
906 | /* XGXS control registers */ | 906 | /* XGXS control registers */ |
907 | 907 | ||
908 | u64 xgxs_int_status; | 908 | u64 xgxs_int_status; |
909 | #define XGXS_INT_STATUS_TXGXS BIT(0) | 909 | #define XGXS_INT_STATUS_TXGXS s2BIT(0) |
910 | #define XGXS_INT_STATUS_RXGXS BIT(1) | 910 | #define XGXS_INT_STATUS_RXGXS s2BIT(1) |
911 | u64 xgxs_int_mask; | 911 | u64 xgxs_int_mask; |
912 | #define XGXS_INT_MASK_TXGXS BIT(0) | 912 | #define XGXS_INT_MASK_TXGXS s2BIT(0) |
913 | #define XGXS_INT_MASK_RXGXS BIT(1) | 913 | #define XGXS_INT_MASK_RXGXS s2BIT(1) |
914 | 914 | ||
915 | u64 xgxs_txgxs_err_reg; | 915 | u64 xgxs_txgxs_err_reg; |
916 | #define TXGXS_ECC_SG_ERR BIT(7) | 916 | #define TXGXS_ECC_SG_ERR s2BIT(7) |
917 | #define TXGXS_ECC_DB_ERR BIT(15) | 917 | #define TXGXS_ECC_DB_ERR s2BIT(15) |
918 | #define TXGXS_ESTORE_UFLOW BIT(31) | 918 | #define TXGXS_ESTORE_UFLOW s2BIT(31) |
919 | #define TXGXS_TX_SM_ERR BIT(39) | 919 | #define TXGXS_TX_SM_ERR s2BIT(39) |
920 | 920 | ||
921 | u64 xgxs_txgxs_err_mask; | 921 | u64 xgxs_txgxs_err_mask; |
922 | u64 xgxs_txgxs_err_alarm; | 922 | u64 xgxs_txgxs_err_alarm; |
923 | 923 | ||
924 | u64 xgxs_rxgxs_err_reg; | 924 | u64 xgxs_rxgxs_err_reg; |
925 | #define RXGXS_ESTORE_OFLOW BIT(7) | 925 | #define RXGXS_ESTORE_OFLOW s2BIT(7) |
926 | #define RXGXS_RX_SM_ERR BIT(39) | 926 | #define RXGXS_RX_SM_ERR s2BIT(39) |
927 | u64 xgxs_rxgxs_err_mask; | 927 | u64 xgxs_rxgxs_err_mask; |
928 | u64 xgxs_rxgxs_err_alarm; | 928 | u64 xgxs_rxgxs_err_alarm; |
929 | 929 | ||
@@ -942,10 +942,10 @@ struct XENA_dev_config { | |||
942 | #define SPI_CONTROL_BYTECNT(cnt) vBIT(cnt,29,3) | 942 | #define SPI_CONTROL_BYTECNT(cnt) vBIT(cnt,29,3) |
943 | #define SPI_CONTROL_CMD(cmd) vBIT(cmd,32,8) | 943 | #define SPI_CONTROL_CMD(cmd) vBIT(cmd,32,8) |
944 | #define SPI_CONTROL_ADDR(addr) vBIT(addr,40,24) | 944 | #define SPI_CONTROL_ADDR(addr) vBIT(addr,40,24) |
945 | #define SPI_CONTROL_SEL1 BIT(4) | 945 | #define SPI_CONTROL_SEL1 s2BIT(4) |
946 | #define SPI_CONTROL_REQ BIT(7) | 946 | #define SPI_CONTROL_REQ s2BIT(7) |
947 | #define SPI_CONTROL_NACK BIT(5) | 947 | #define SPI_CONTROL_NACK s2BIT(5) |
948 | #define SPI_CONTROL_DONE BIT(6) | 948 | #define SPI_CONTROL_DONE s2BIT(6) |
949 | u64 spi_data; | 949 | u64 spi_data; |
950 | #define SPI_DATA_WRITE(data,len) vBIT(data,0,len) | 950 | #define SPI_DATA_WRITE(data,len) vBIT(data,0,len) |
951 | }; | 951 | }; |
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 22e4054d4fc..b8c0e7b4ca1 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -1716,7 +1716,7 @@ static int init_nic(struct s2io_nic *nic) | |||
1716 | MISC_LINK_STABILITY_PRD(3); | 1716 | MISC_LINK_STABILITY_PRD(3); |
1717 | writeq(val64, &bar0->misc_control); | 1717 | writeq(val64, &bar0->misc_control); |
1718 | val64 = readq(&bar0->pic_control2); | 1718 | val64 = readq(&bar0->pic_control2); |
1719 | val64 &= ~(BIT(13)|BIT(14)|BIT(15)); | 1719 | val64 &= ~(s2BIT(13)|s2BIT(14)|s2BIT(15)); |
1720 | writeq(val64, &bar0->pic_control2); | 1720 | writeq(val64, &bar0->pic_control2); |
1721 | } | 1721 | } |
1722 | if (strstr(nic->product_name, "CX4")) { | 1722 | if (strstr(nic->product_name, "CX4")) { |
@@ -2427,7 +2427,7 @@ static int fill_rx_buffers(struct s2io_nic *nic, int ring_no) | |||
2427 | } | 2427 | } |
2428 | if ((rxdp->Control_1 & RXD_OWN_XENA) && | 2428 | if ((rxdp->Control_1 & RXD_OWN_XENA) && |
2429 | ((nic->rxd_mode == RXD_MODE_3B) && | 2429 | ((nic->rxd_mode == RXD_MODE_3B) && |
2430 | (rxdp->Control_2 & BIT(0)))) { | 2430 | (rxdp->Control_2 & s2BIT(0)))) { |
2431 | mac_control->rings[ring_no].rx_curr_put_info. | 2431 | mac_control->rings[ring_no].rx_curr_put_info. |
2432 | offset = off; | 2432 | offset = off; |
2433 | goto end; | 2433 | goto end; |
@@ -2540,7 +2540,7 @@ static int fill_rx_buffers(struct s2io_nic *nic, int ring_no) | |||
2540 | rxdp->Control_2 |= SET_BUFFER2_SIZE_3 | 2540 | rxdp->Control_2 |= SET_BUFFER2_SIZE_3 |
2541 | (dev->mtu + 4); | 2541 | (dev->mtu + 4); |
2542 | } | 2542 | } |
2543 | rxdp->Control_2 |= BIT(0); | 2543 | rxdp->Control_2 |= s2BIT(0); |
2544 | } | 2544 | } |
2545 | rxdp->Host_Control = (unsigned long) (skb); | 2545 | rxdp->Host_Control = (unsigned long) (skb); |
2546 | if (alloc_tab & ((1 << rxsync_frequency) - 1)) | 2546 | if (alloc_tab & ((1 << rxsync_frequency) - 1)) |
@@ -3377,7 +3377,7 @@ static void s2io_reset(struct s2io_nic * sp) | |||
3377 | pci_write_config_dword(sp->pdev, 0x68, 0x7C); | 3377 | pci_write_config_dword(sp->pdev, 0x68, 0x7C); |
3378 | 3378 | ||
3379 | /* Clearing PCI_STATUS error reflected here */ | 3379 | /* Clearing PCI_STATUS error reflected here */ |
3380 | writeq(BIT(62), &bar0->txpic_int_reg); | 3380 | writeq(s2BIT(62), &bar0->txpic_int_reg); |
3381 | } | 3381 | } |
3382 | 3382 | ||
3383 | /* Reset device statistics maintained by OS */ | 3383 | /* Reset device statistics maintained by OS */ |
@@ -3575,7 +3575,7 @@ static int wait_for_msix_trans(struct s2io_nic *nic, int i) | |||
3575 | 3575 | ||
3576 | do { | 3576 | do { |
3577 | val64 = readq(&bar0->xmsi_access); | 3577 | val64 = readq(&bar0->xmsi_access); |
3578 | if (!(val64 & BIT(15))) | 3578 | if (!(val64 & s2BIT(15))) |
3579 | break; | 3579 | break; |
3580 | mdelay(1); | 3580 | mdelay(1); |
3581 | cnt++; | 3581 | cnt++; |
@@ -3597,7 +3597,7 @@ static void restore_xmsi_data(struct s2io_nic *nic) | |||
3597 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { | 3597 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { |
3598 | writeq(nic->msix_info[i].addr, &bar0->xmsi_address); | 3598 | writeq(nic->msix_info[i].addr, &bar0->xmsi_address); |
3599 | writeq(nic->msix_info[i].data, &bar0->xmsi_data); | 3599 | writeq(nic->msix_info[i].data, &bar0->xmsi_data); |
3600 | val64 = (BIT(7) | BIT(15) | vBIT(i, 26, 6)); | 3600 | val64 = (s2BIT(7) | s2BIT(15) | vBIT(i, 26, 6)); |
3601 | writeq(val64, &bar0->xmsi_access); | 3601 | writeq(val64, &bar0->xmsi_access); |
3602 | if (wait_for_msix_trans(nic, i)) { | 3602 | if (wait_for_msix_trans(nic, i)) { |
3603 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); | 3603 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); |
@@ -3614,7 +3614,7 @@ static void store_xmsi_data(struct s2io_nic *nic) | |||
3614 | 3614 | ||
3615 | /* Store and display */ | 3615 | /* Store and display */ |
3616 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { | 3616 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { |
3617 | val64 = (BIT(15) | vBIT(i, 26, 6)); | 3617 | val64 = (s2BIT(15) | vBIT(i, 26, 6)); |
3618 | writeq(val64, &bar0->xmsi_access); | 3618 | writeq(val64, &bar0->xmsi_access); |
3619 | if (wait_for_msix_trans(nic, i)) { | 3619 | if (wait_for_msix_trans(nic, i)) { |
3620 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); | 3620 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); |
@@ -4634,7 +4634,7 @@ static void s2io_updt_stats(struct s2io_nic *sp) | |||
4634 | do { | 4634 | do { |
4635 | udelay(100); | 4635 | udelay(100); |
4636 | val64 = readq(&bar0->stat_cfg); | 4636 | val64 = readq(&bar0->stat_cfg); |
4637 | if (!(val64 & BIT(0))) | 4637 | if (!(val64 & s2BIT(0))) |
4638 | break; | 4638 | break; |
4639 | cnt++; | 4639 | cnt++; |
4640 | if (cnt == 5) | 4640 | if (cnt == 5) |
diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h index f6b45565304..cc1797a071a 100644 --- a/drivers/net/s2io.h +++ b/drivers/net/s2io.h | |||
@@ -14,7 +14,7 @@ | |||
14 | #define _S2IO_H | 14 | #define _S2IO_H |
15 | 15 | ||
16 | #define TBD 0 | 16 | #define TBD 0 |
17 | #define BIT(loc) (0x8000000000000000ULL >> (loc)) | 17 | #define s2BIT(loc) (0x8000000000000000ULL >> (loc)) |
18 | #define vBIT(val, loc, sz) (((u64)val) << (64-loc-sz)) | 18 | #define vBIT(val, loc, sz) (((u64)val) << (64-loc-sz)) |
19 | #define INV(d) ((d&0xff)<<24) | (((d>>8)&0xff)<<16) | (((d>>16)&0xff)<<8)| ((d>>24)&0xff) | 19 | #define INV(d) ((d&0xff)<<24) | (((d>>8)&0xff)<<16) | (((d>>16)&0xff)<<8)| ((d>>24)&0xff) |
20 | 20 | ||
@@ -473,42 +473,42 @@ struct TxFIFO_element { | |||
473 | 473 | ||
474 | u64 List_Control; | 474 | u64 List_Control; |
475 | #define TX_FIFO_LAST_TXD_NUM( val) vBIT(val,0,8) | 475 | #define TX_FIFO_LAST_TXD_NUM( val) vBIT(val,0,8) |
476 | #define TX_FIFO_FIRST_LIST BIT(14) | 476 | #define TX_FIFO_FIRST_LIST s2BIT(14) |
477 | #define TX_FIFO_LAST_LIST BIT(15) | 477 | #define TX_FIFO_LAST_LIST s2BIT(15) |
478 | #define TX_FIFO_FIRSTNLAST_LIST vBIT(3,14,2) | 478 | #define TX_FIFO_FIRSTNLAST_LIST vBIT(3,14,2) |
479 | #define TX_FIFO_SPECIAL_FUNC BIT(23) | 479 | #define TX_FIFO_SPECIAL_FUNC s2BIT(23) |
480 | #define TX_FIFO_DS_NO_SNOOP BIT(31) | 480 | #define TX_FIFO_DS_NO_SNOOP s2BIT(31) |
481 | #define TX_FIFO_BUFF_NO_SNOOP BIT(30) | 481 | #define TX_FIFO_BUFF_NO_SNOOP s2BIT(30) |
482 | }; | 482 | }; |
483 | 483 | ||
484 | /* Tx descriptor structure */ | 484 | /* Tx descriptor structure */ |
485 | struct TxD { | 485 | struct TxD { |
486 | u64 Control_1; | 486 | u64 Control_1; |
487 | /* bit mask */ | 487 | /* bit mask */ |
488 | #define TXD_LIST_OWN_XENA BIT(7) | 488 | #define TXD_LIST_OWN_XENA s2BIT(7) |
489 | #define TXD_T_CODE (BIT(12)|BIT(13)|BIT(14)|BIT(15)) | 489 | #define TXD_T_CODE (s2BIT(12)|s2BIT(13)|s2BIT(14)|s2BIT(15)) |
490 | #define TXD_T_CODE_OK(val) (|(val & TXD_T_CODE)) | 490 | #define TXD_T_CODE_OK(val) (|(val & TXD_T_CODE)) |
491 | #define GET_TXD_T_CODE(val) ((val & TXD_T_CODE)<<12) | 491 | #define GET_TXD_T_CODE(val) ((val & TXD_T_CODE)<<12) |
492 | #define TXD_GATHER_CODE (BIT(22) | BIT(23)) | 492 | #define TXD_GATHER_CODE (s2BIT(22) | s2BIT(23)) |
493 | #define TXD_GATHER_CODE_FIRST BIT(22) | 493 | #define TXD_GATHER_CODE_FIRST s2BIT(22) |
494 | #define TXD_GATHER_CODE_LAST BIT(23) | 494 | #define TXD_GATHER_CODE_LAST s2BIT(23) |
495 | #define TXD_TCP_LSO_EN BIT(30) | 495 | #define TXD_TCP_LSO_EN s2BIT(30) |
496 | #define TXD_UDP_COF_EN BIT(31) | 496 | #define TXD_UDP_COF_EN s2BIT(31) |
497 | #define TXD_UFO_EN BIT(31) | BIT(30) | 497 | #define TXD_UFO_EN s2BIT(31) | s2BIT(30) |
498 | #define TXD_TCP_LSO_MSS(val) vBIT(val,34,14) | 498 | #define TXD_TCP_LSO_MSS(val) vBIT(val,34,14) |
499 | #define TXD_UFO_MSS(val) vBIT(val,34,14) | 499 | #define TXD_UFO_MSS(val) vBIT(val,34,14) |
500 | #define TXD_BUFFER0_SIZE(val) vBIT(val,48,16) | 500 | #define TXD_BUFFER0_SIZE(val) vBIT(val,48,16) |
501 | 501 | ||
502 | u64 Control_2; | 502 | u64 Control_2; |
503 | #define TXD_TX_CKO_CONTROL (BIT(5)|BIT(6)|BIT(7)) | 503 | #define TXD_TX_CKO_CONTROL (s2BIT(5)|s2BIT(6)|s2BIT(7)) |
504 | #define TXD_TX_CKO_IPV4_EN BIT(5) | 504 | #define TXD_TX_CKO_IPV4_EN s2BIT(5) |
505 | #define TXD_TX_CKO_TCP_EN BIT(6) | 505 | #define TXD_TX_CKO_TCP_EN s2BIT(6) |
506 | #define TXD_TX_CKO_UDP_EN BIT(7) | 506 | #define TXD_TX_CKO_UDP_EN s2BIT(7) |
507 | #define TXD_VLAN_ENABLE BIT(15) | 507 | #define TXD_VLAN_ENABLE s2BIT(15) |
508 | #define TXD_VLAN_TAG(val) vBIT(val,16,16) | 508 | #define TXD_VLAN_TAG(val) vBIT(val,16,16) |
509 | #define TXD_INT_NUMBER(val) vBIT(val,34,6) | 509 | #define TXD_INT_NUMBER(val) vBIT(val,34,6) |
510 | #define TXD_INT_TYPE_PER_LIST BIT(47) | 510 | #define TXD_INT_TYPE_PER_LIST s2BIT(47) |
511 | #define TXD_INT_TYPE_UTILZ BIT(46) | 511 | #define TXD_INT_TYPE_UTILZ s2BIT(46) |
512 | #define TXD_SET_MARKER vBIT(0x6,0,4) | 512 | #define TXD_SET_MARKER vBIT(0x6,0,4) |
513 | 513 | ||
514 | u64 Buffer_Pointer; | 514 | u64 Buffer_Pointer; |
@@ -525,14 +525,14 @@ struct list_info_hold { | |||
525 | struct RxD_t { | 525 | struct RxD_t { |
526 | u64 Host_Control; /* reserved for host */ | 526 | u64 Host_Control; /* reserved for host */ |
527 | u64 Control_1; | 527 | u64 Control_1; |
528 | #define RXD_OWN_XENA BIT(7) | 528 | #define RXD_OWN_XENA s2BIT(7) |
529 | #define RXD_T_CODE (BIT(12)|BIT(13)|BIT(14)|BIT(15)) | 529 | #define RXD_T_CODE (s2BIT(12)|s2BIT(13)|s2BIT(14)|s2BIT(15)) |
530 | #define RXD_FRAME_PROTO vBIT(0xFFFF,24,8) | 530 | #define RXD_FRAME_PROTO vBIT(0xFFFF,24,8) |
531 | #define RXD_FRAME_PROTO_IPV4 BIT(27) | 531 | #define RXD_FRAME_PROTO_IPV4 s2BIT(27) |
532 | #define RXD_FRAME_PROTO_IPV6 BIT(28) | 532 | #define RXD_FRAME_PROTO_IPV6 s2BIT(28) |
533 | #define RXD_FRAME_IP_FRAG BIT(29) | 533 | #define RXD_FRAME_IP_FRAG s2BIT(29) |
534 | #define RXD_FRAME_PROTO_TCP BIT(30) | 534 | #define RXD_FRAME_PROTO_TCP s2BIT(30) |
535 | #define RXD_FRAME_PROTO_UDP BIT(31) | 535 | #define RXD_FRAME_PROTO_UDP s2BIT(31) |
536 | #define TCP_OR_UDP_FRAME (RXD_FRAME_PROTO_TCP | RXD_FRAME_PROTO_UDP) | 536 | #define TCP_OR_UDP_FRAME (RXD_FRAME_PROTO_TCP | RXD_FRAME_PROTO_UDP) |
537 | #define RXD_GET_L3_CKSUM(val) ((u16)(val>> 16) & 0xFFFF) | 537 | #define RXD_GET_L3_CKSUM(val) ((u16)(val>> 16) & 0xFFFF) |
538 | #define RXD_GET_L4_CKSUM(val) ((u16)(val) & 0xFFFF) | 538 | #define RXD_GET_L4_CKSUM(val) ((u16)(val) & 0xFFFF) |
@@ -998,26 +998,26 @@ static inline void SPECIAL_REG_WRITE(u64 val, void __iomem *addr, int order) | |||
998 | /* Interrupt masks for the general interrupt mask register */ | 998 | /* Interrupt masks for the general interrupt mask register */ |
999 | #define DISABLE_ALL_INTRS 0xFFFFFFFFFFFFFFFFULL | 999 | #define DISABLE_ALL_INTRS 0xFFFFFFFFFFFFFFFFULL |
1000 | 1000 | ||
1001 | #define TXPIC_INT_M BIT(0) | 1001 | #define TXPIC_INT_M s2BIT(0) |
1002 | #define TXDMA_INT_M BIT(1) | 1002 | #define TXDMA_INT_M s2BIT(1) |
1003 | #define TXMAC_INT_M BIT(2) | 1003 | #define TXMAC_INT_M s2BIT(2) |
1004 | #define TXXGXS_INT_M BIT(3) | 1004 | #define TXXGXS_INT_M s2BIT(3) |
1005 | #define TXTRAFFIC_INT_M BIT(8) | 1005 | #define TXTRAFFIC_INT_M s2BIT(8) |
1006 | #define PIC_RX_INT_M BIT(32) | 1006 | #define PIC_RX_INT_M s2BIT(32) |
1007 | #define RXDMA_INT_M BIT(33) | 1007 | #define RXDMA_INT_M s2BIT(33) |
1008 | #define RXMAC_INT_M BIT(34) | 1008 | #define RXMAC_INT_M s2BIT(34) |
1009 | #define MC_INT_M BIT(35) | 1009 | #define MC_INT_M s2BIT(35) |
1010 | #define RXXGXS_INT_M BIT(36) | 1010 | #define RXXGXS_INT_M s2BIT(36) |
1011 | #define RXTRAFFIC_INT_M BIT(40) | 1011 | #define RXTRAFFIC_INT_M s2BIT(40) |
1012 | 1012 | ||
1013 | /* PIC level Interrupts TODO*/ | 1013 | /* PIC level Interrupts TODO*/ |
1014 | 1014 | ||
1015 | /* DMA level Inressupts */ | 1015 | /* DMA level Inressupts */ |
1016 | #define TXDMA_PFC_INT_M BIT(0) | 1016 | #define TXDMA_PFC_INT_M s2BIT(0) |
1017 | #define TXDMA_PCC_INT_M BIT(2) | 1017 | #define TXDMA_PCC_INT_M s2BIT(2) |
1018 | 1018 | ||
1019 | /* PFC block interrupts */ | 1019 | /* PFC block interrupts */ |
1020 | #define PFC_MISC_ERR_1 BIT(0) /* Interrupt to indicate FIFO full */ | 1020 | #define PFC_MISC_ERR_1 s2BIT(0) /* Interrupt to indicate FIFO full */ |
1021 | 1021 | ||
1022 | /* PCC block interrupts. */ | 1022 | /* PCC block interrupts. */ |
1023 | #define PCC_FB_ECC_ERR vBIT(0xff, 16, 8) /* Interrupt to indicate | 1023 | #define PCC_FB_ECC_ERR vBIT(0xff, 16, 8) /* Interrupt to indicate |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 7967240534d..24cfb6275d9 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
@@ -1384,13 +1384,9 @@ static int sky2_up(struct net_device *dev) | |||
1384 | sky2_prefetch_init(hw, txqaddr[port], sky2->tx_le_map, | 1384 | sky2_prefetch_init(hw, txqaddr[port], sky2->tx_le_map, |
1385 | TX_RING_SIZE - 1); | 1385 | TX_RING_SIZE - 1); |
1386 | 1386 | ||
1387 | napi_enable(&hw->napi); | ||
1388 | |||
1389 | err = sky2_rx_start(sky2); | 1387 | err = sky2_rx_start(sky2); |
1390 | if (err) { | 1388 | if (err) |
1391 | napi_disable(&hw->napi); | ||
1392 | goto err_out; | 1389 | goto err_out; |
1393 | } | ||
1394 | 1390 | ||
1395 | /* Enable interrupts from phy/mac for port */ | 1391 | /* Enable interrupts from phy/mac for port */ |
1396 | imask = sky2_read32(hw, B0_IMSK); | 1392 | imask = sky2_read32(hw, B0_IMSK); |
@@ -1679,13 +1675,13 @@ static int sky2_down(struct net_device *dev) | |||
1679 | /* Stop more packets from being queued */ | 1675 | /* Stop more packets from being queued */ |
1680 | netif_stop_queue(dev); | 1676 | netif_stop_queue(dev); |
1681 | 1677 | ||
1682 | napi_disable(&hw->napi); | ||
1683 | |||
1684 | /* Disable port IRQ */ | 1678 | /* Disable port IRQ */ |
1685 | imask = sky2_read32(hw, B0_IMSK); | 1679 | imask = sky2_read32(hw, B0_IMSK); |
1686 | imask &= ~portirq_msk[port]; | 1680 | imask &= ~portirq_msk[port]; |
1687 | sky2_write32(hw, B0_IMSK, imask); | 1681 | sky2_write32(hw, B0_IMSK, imask); |
1688 | 1682 | ||
1683 | synchronize_irq(hw->pdev->irq); | ||
1684 | |||
1689 | sky2_gmac_reset(hw, port); | 1685 | sky2_gmac_reset(hw, port); |
1690 | 1686 | ||
1691 | /* Stop transmitter */ | 1687 | /* Stop transmitter */ |
@@ -1699,6 +1695,9 @@ static int sky2_down(struct net_device *dev) | |||
1699 | ctrl &= ~(GM_GPCR_TX_ENA | GM_GPCR_RX_ENA); | 1695 | ctrl &= ~(GM_GPCR_TX_ENA | GM_GPCR_RX_ENA); |
1700 | gma_write16(hw, port, GM_GP_CTRL, ctrl); | 1696 | gma_write16(hw, port, GM_GP_CTRL, ctrl); |
1701 | 1697 | ||
1698 | /* Make sure no packets are pending */ | ||
1699 | napi_synchronize(&hw->napi); | ||
1700 | |||
1702 | sky2_write8(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET); | 1701 | sky2_write8(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET); |
1703 | 1702 | ||
1704 | /* Workaround shared GMAC reset */ | 1703 | /* Workaround shared GMAC reset */ |
@@ -1736,8 +1735,6 @@ static int sky2_down(struct net_device *dev) | |||
1736 | /* turn off LED's */ | 1735 | /* turn off LED's */ |
1737 | sky2_write16(hw, B0_Y2LED, LED_STAT_OFF); | 1736 | sky2_write16(hw, B0_Y2LED, LED_STAT_OFF); |
1738 | 1737 | ||
1739 | synchronize_irq(hw->pdev->irq); | ||
1740 | |||
1741 | sky2_tx_clean(dev); | 1738 | sky2_tx_clean(dev); |
1742 | sky2_rx_clean(sky2); | 1739 | sky2_rx_clean(sky2); |
1743 | 1740 | ||
@@ -2048,9 +2045,6 @@ static int sky2_change_mtu(struct net_device *dev, int new_mtu) | |||
2048 | err = sky2_rx_start(sky2); | 2045 | err = sky2_rx_start(sky2); |
2049 | sky2_write32(hw, B0_IMSK, imask); | 2046 | sky2_write32(hw, B0_IMSK, imask); |
2050 | 2047 | ||
2051 | /* Unconditionally re-enable NAPI because even if we | ||
2052 | * call dev_close() that will do a napi_disable(). | ||
2053 | */ | ||
2054 | napi_enable(&hw->napi); | 2048 | napi_enable(&hw->napi); |
2055 | 2049 | ||
2056 | if (err) | 2050 | if (err) |
@@ -2915,6 +2909,7 @@ static void sky2_restart(struct work_struct *work) | |||
2915 | rtnl_lock(); | 2909 | rtnl_lock(); |
2916 | sky2_write32(hw, B0_IMSK, 0); | 2910 | sky2_write32(hw, B0_IMSK, 0); |
2917 | sky2_read32(hw, B0_IMSK); | 2911 | sky2_read32(hw, B0_IMSK); |
2912 | napi_disable(&hw->napi); | ||
2918 | 2913 | ||
2919 | for (i = 0; i < hw->ports; i++) { | 2914 | for (i = 0; i < hw->ports; i++) { |
2920 | dev = hw->dev[i]; | 2915 | dev = hw->dev[i]; |
@@ -2924,6 +2919,7 @@ static void sky2_restart(struct work_struct *work) | |||
2924 | 2919 | ||
2925 | sky2_reset(hw); | 2920 | sky2_reset(hw); |
2926 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); | 2921 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); |
2922 | napi_enable(&hw->napi); | ||
2927 | 2923 | ||
2928 | for (i = 0; i < hw->ports; i++) { | 2924 | for (i = 0; i < hw->ports; i++) { |
2929 | dev = hw->dev[i]; | 2925 | dev = hw->dev[i]; |
@@ -3961,7 +3957,7 @@ static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw, | |||
3961 | struct net_device *dev = alloc_etherdev(sizeof(*sky2)); | 3957 | struct net_device *dev = alloc_etherdev(sizeof(*sky2)); |
3962 | 3958 | ||
3963 | if (!dev) { | 3959 | if (!dev) { |
3964 | dev_err(&hw->pdev->dev, "etherdev alloc failed"); | 3960 | dev_err(&hw->pdev->dev, "etherdev alloc failed\n"); |
3965 | return NULL; | 3961 | return NULL; |
3966 | } | 3962 | } |
3967 | 3963 | ||
@@ -4191,7 +4187,6 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
4191 | err = -ENOMEM; | 4187 | err = -ENOMEM; |
4192 | goto err_out_free_pci; | 4188 | goto err_out_free_pci; |
4193 | } | 4189 | } |
4194 | netif_napi_add(dev, &hw->napi, sky2_poll, NAPI_WEIGHT); | ||
4195 | 4190 | ||
4196 | if (!disable_msi && pci_enable_msi(pdev) == 0) { | 4191 | if (!disable_msi && pci_enable_msi(pdev) == 0) { |
4197 | err = sky2_test_msi(hw); | 4192 | err = sky2_test_msi(hw); |
@@ -4207,6 +4202,8 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
4207 | goto err_out_free_netdev; | 4202 | goto err_out_free_netdev; |
4208 | } | 4203 | } |
4209 | 4204 | ||
4205 | netif_napi_add(dev, &hw->napi, sky2_poll, NAPI_WEIGHT); | ||
4206 | |||
4210 | err = request_irq(pdev->irq, sky2_intr, | 4207 | err = request_irq(pdev->irq, sky2_intr, |
4211 | (hw->flags & SKY2_HW_USE_MSI) ? 0 : IRQF_SHARED, | 4208 | (hw->flags & SKY2_HW_USE_MSI) ? 0 : IRQF_SHARED, |
4212 | dev->name, hw); | 4209 | dev->name, hw); |
@@ -4215,6 +4212,7 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
4215 | goto err_out_unregister; | 4212 | goto err_out_unregister; |
4216 | } | 4213 | } |
4217 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); | 4214 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); |
4215 | napi_enable(&hw->napi); | ||
4218 | 4216 | ||
4219 | sky2_show_addr(dev); | 4217 | sky2_show_addr(dev); |
4220 | 4218 | ||
@@ -4265,23 +4263,18 @@ err_out: | |||
4265 | static void __devexit sky2_remove(struct pci_dev *pdev) | 4263 | static void __devexit sky2_remove(struct pci_dev *pdev) |
4266 | { | 4264 | { |
4267 | struct sky2_hw *hw = pci_get_drvdata(pdev); | 4265 | struct sky2_hw *hw = pci_get_drvdata(pdev); |
4268 | struct net_device *dev0, *dev1; | 4266 | int i; |
4269 | 4267 | ||
4270 | if (!hw) | 4268 | if (!hw) |
4271 | return; | 4269 | return; |
4272 | 4270 | ||
4273 | del_timer_sync(&hw->watchdog_timer); | 4271 | del_timer_sync(&hw->watchdog_timer); |
4272 | cancel_work_sync(&hw->restart_work); | ||
4274 | 4273 | ||
4275 | flush_scheduled_work(); | 4274 | for (i = hw->ports; i >= 0; --i) |
4275 | unregister_netdev(hw->dev[i]); | ||
4276 | 4276 | ||
4277 | sky2_write32(hw, B0_IMSK, 0); | 4277 | sky2_write32(hw, B0_IMSK, 0); |
4278 | synchronize_irq(hw->pdev->irq); | ||
4279 | |||
4280 | dev0 = hw->dev[0]; | ||
4281 | dev1 = hw->dev[1]; | ||
4282 | if (dev1) | ||
4283 | unregister_netdev(dev1); | ||
4284 | unregister_netdev(dev0); | ||
4285 | 4278 | ||
4286 | sky2_power_aux(hw); | 4279 | sky2_power_aux(hw); |
4287 | 4280 | ||
@@ -4296,9 +4289,9 @@ static void __devexit sky2_remove(struct pci_dev *pdev) | |||
4296 | pci_release_regions(pdev); | 4289 | pci_release_regions(pdev); |
4297 | pci_disable_device(pdev); | 4290 | pci_disable_device(pdev); |
4298 | 4291 | ||
4299 | if (dev1) | 4292 | for (i = hw->ports; i >= 0; --i) |
4300 | free_netdev(dev1); | 4293 | free_netdev(hw->dev[i]); |
4301 | free_netdev(dev0); | 4294 | |
4302 | iounmap(hw->regs); | 4295 | iounmap(hw->regs); |
4303 | kfree(hw); | 4296 | kfree(hw); |
4304 | 4297 | ||
@@ -4328,6 +4321,7 @@ static int sky2_suspend(struct pci_dev *pdev, pm_message_t state) | |||
4328 | } | 4321 | } |
4329 | 4322 | ||
4330 | sky2_write32(hw, B0_IMSK, 0); | 4323 | sky2_write32(hw, B0_IMSK, 0); |
4324 | napi_disable(&hw->napi); | ||
4331 | sky2_power_aux(hw); | 4325 | sky2_power_aux(hw); |
4332 | 4326 | ||
4333 | pci_save_state(pdev); | 4327 | pci_save_state(pdev); |
@@ -4362,8 +4356,8 @@ static int sky2_resume(struct pci_dev *pdev) | |||
4362 | pci_write_config_dword(pdev, PCI_DEV_REG3, 0); | 4356 | pci_write_config_dword(pdev, PCI_DEV_REG3, 0); |
4363 | 4357 | ||
4364 | sky2_reset(hw); | 4358 | sky2_reset(hw); |
4365 | |||
4366 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); | 4359 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); |
4360 | napi_enable(&hw->napi); | ||
4367 | 4361 | ||
4368 | for (i = 0; i < hw->ports; i++) { | 4362 | for (i = 0; i < hw->ports; i++) { |
4369 | struct net_device *dev = hw->dev[i]; | 4363 | struct net_device *dev = hw->dev[i]; |
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c index 7c60df46fc6..dd18af0ce67 100644 --- a/drivers/net/smc911x.c +++ b/drivers/net/smc911x.c | |||
@@ -1223,7 +1223,7 @@ static irqreturn_t smc911x_interrupt(int irq, void *dev_id) | |||
1223 | } | 1223 | } |
1224 | #endif | 1224 | #endif |
1225 | 1225 | ||
1226 | /* Handle PHY interupt condition */ | 1226 | /* Handle PHY interrupt condition */ |
1227 | if (status & INT_STS_PHY_INT_) { | 1227 | if (status & INT_STS_PHY_INT_) { |
1228 | DBG(SMC_DEBUG_MISC, "%s: PHY irq\n", dev->name); | 1228 | DBG(SMC_DEBUG_MISC, "%s: PHY irq\n", dev->name); |
1229 | smc911x_phy_interrupt(dev); | 1229 | smc911x_phy_interrupt(dev); |
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c index fab055ffcc9..bccae7e5c6a 100644 --- a/drivers/net/spider_net.c +++ b/drivers/net/spider_net.c | |||
@@ -46,7 +46,7 @@ | |||
46 | #include <linux/vmalloc.h> | 46 | #include <linux/vmalloc.h> |
47 | #include <linux/wait.h> | 47 | #include <linux/wait.h> |
48 | #include <linux/workqueue.h> | 48 | #include <linux/workqueue.h> |
49 | #include <asm/bitops.h> | 49 | #include <linux/bitops.h> |
50 | #include <asm/pci-bridge.h> | 50 | #include <asm/pci-bridge.h> |
51 | #include <net/checksum.h> | 51 | #include <net/checksum.h> |
52 | 52 | ||
@@ -1639,7 +1639,7 @@ spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg) | |||
1639 | 1639 | ||
1640 | /** | 1640 | /** |
1641 | * spider_net_interrupt - interrupt handler for spider_net | 1641 | * spider_net_interrupt - interrupt handler for spider_net |
1642 | * @irq: interupt number | 1642 | * @irq: interrupt number |
1643 | * @ptr: pointer to net_device | 1643 | * @ptr: pointer to net_device |
1644 | * @regs: PU registers | 1644 | * @regs: PU registers |
1645 | * | 1645 | * |
diff --git a/drivers/net/tc35815.c b/drivers/net/tc35815.c index 8038f2882c9..d887c05588d 100644 --- a/drivers/net/tc35815.c +++ b/drivers/net/tc35815.c | |||
@@ -1654,7 +1654,7 @@ tc35815_rx(struct net_device *dev) | |||
1654 | panic_queues(dev); | 1654 | panic_queues(dev); |
1655 | } | 1655 | } |
1656 | #endif | 1656 | #endif |
1657 | /* pass BD to controler */ | 1657 | /* pass BD to controller */ |
1658 | #ifndef TC35815_USE_PACKEDBUFFER | 1658 | #ifndef TC35815_USE_PACKEDBUFFER |
1659 | if (!lp->rx_skbs[curid].skb) { | 1659 | if (!lp->rx_skbs[curid].skb) { |
1660 | lp->rx_skbs[curid].skb = | 1660 | lp->rx_skbs[curid].skb = |
@@ -1694,7 +1694,7 @@ tc35815_rx(struct net_device *dev) | |||
1694 | } | 1694 | } |
1695 | #endif | 1695 | #endif |
1696 | for (i = 0; i < (bd_count + 1) / 2 + 1; i++) { | 1696 | for (i = 0; i < (bd_count + 1) / 2 + 1; i++) { |
1697 | /* pass FD to controler */ | 1697 | /* pass FD to controller */ |
1698 | #ifdef DEBUG | 1698 | #ifdef DEBUG |
1699 | lp->rfd_cur->fd.FDNext = cpu_to_le32(0xdeaddead); | 1699 | lp->rfd_cur->fd.FDNext = cpu_to_le32(0xdeaddead); |
1700 | #else | 1700 | #else |
diff --git a/drivers/net/tsi108_eth.c b/drivers/net/tsi108_eth.c index df10af7df7b..35d15e85007 100644 --- a/drivers/net/tsi108_eth.c +++ b/drivers/net/tsi108_eth.c | |||
@@ -1629,7 +1629,7 @@ tsi108_init_one(struct platform_device *pdev) | |||
1629 | goto register_fail; | 1629 | goto register_fail; |
1630 | } | 1630 | } |
1631 | 1631 | ||
1632 | printk(KERN_INFO "%s: Tsi108 Gigabit Ethernet, MAC: %s\n" | 1632 | printk(KERN_INFO "%s: Tsi108 Gigabit Ethernet, MAC: %s\n", |
1633 | dev->name, print_mac(mac, dev->dev_addr)); | 1633 | dev->name, print_mac(mac, dev->dev_addr)); |
1634 | #ifdef DEBUG | 1634 | #ifdef DEBUG |
1635 | data->msg_enable = DEBUG; | 1635 | data->msg_enable = DEBUG; |
diff --git a/drivers/net/tulip/Kconfig b/drivers/net/tulip/Kconfig index 1c537d5a306..49d7a290dbb 100644 --- a/drivers/net/tulip/Kconfig +++ b/drivers/net/tulip/Kconfig | |||
@@ -67,7 +67,7 @@ config TULIP_MMIO | |||
67 | If in doubt, say N. | 67 | If in doubt, say N. |
68 | 68 | ||
69 | config TULIP_NAPI | 69 | config TULIP_NAPI |
70 | bool "Use NAPI RX polling " | 70 | bool "Use RX polling (NAPI)" |
71 | depends on TULIP | 71 | depends on TULIP |
72 | help | 72 | help |
73 | NAPI is a new driver API designed to reduce CPU and interrupt load | 73 | NAPI is a new driver API designed to reduce CPU and interrupt load |
@@ -78,18 +78,16 @@ config TULIP_NAPI | |||
78 | deployed on potentially unfriendly networks (e.g. in a firewall), | 78 | deployed on potentially unfriendly networks (e.g. in a firewall), |
79 | then say Y here. | 79 | then say Y here. |
80 | 80 | ||
81 | See <file:Documentation/networking/NAPI_HOWTO.txt> for more | ||
82 | information. | ||
83 | |||
84 | If in doubt, say N. | 81 | If in doubt, say N. |
85 | 82 | ||
86 | config TULIP_NAPI_HW_MITIGATION | 83 | config TULIP_NAPI_HW_MITIGATION |
87 | bool "Use Interrupt Mitigation " | 84 | bool "Use Interrupt Mitigation" |
88 | depends on TULIP_NAPI | 85 | depends on TULIP_NAPI |
89 | ---help--- | 86 | ---help--- |
90 | Use HW to reduce RX interrupts. Not strict necessary since NAPI reduces | 87 | Use HW to reduce RX interrupts. Not strictly necessary since NAPI |
91 | RX interrupts but itself. Although this reduces RX interrupts even at | 88 | reduces RX interrupts by itself. Interrupt mitigation reduces RX |
92 | low levels traffic at the cost of a small latency. | 89 | interrupts even at low levels of traffic at the cost of a small |
90 | latency. | ||
93 | 91 | ||
94 | If in doubt, say Y. | 92 | If in doubt, say Y. |
95 | 93 | ||
diff --git a/drivers/net/tulip/uli526x.c b/drivers/net/tulip/uli526x.c index 76e55612430..a7afeea156b 100644 --- a/drivers/net/tulip/uli526x.c +++ b/drivers/net/tulip/uli526x.c | |||
@@ -34,9 +34,9 @@ | |||
34 | #include <linux/delay.h> | 34 | #include <linux/delay.h> |
35 | #include <linux/spinlock.h> | 35 | #include <linux/spinlock.h> |
36 | #include <linux/dma-mapping.h> | 36 | #include <linux/dma-mapping.h> |
37 | #include <linux/bitops.h> | ||
37 | 38 | ||
38 | #include <asm/processor.h> | 39 | #include <asm/processor.h> |
39 | #include <asm/bitops.h> | ||
40 | #include <asm/io.h> | 40 | #include <asm/io.h> |
41 | #include <asm/dma.h> | 41 | #include <asm/dma.h> |
42 | #include <asm/uaccess.h> | 42 | #include <asm/uaccess.h> |
diff --git a/drivers/net/tulip/winbond-840.c b/drivers/net/tulip/winbond-840.c index 3c8e3b63be0..35d0cfcf8c4 100644 --- a/drivers/net/tulip/winbond-840.c +++ b/drivers/net/tulip/winbond-840.c | |||
@@ -483,7 +483,7 @@ err_out_netdev: | |||
483 | a delay. Note that pre-2.0.34 kernels had a cache-alignment bug that | 483 | a delay. Note that pre-2.0.34 kernels had a cache-alignment bug that |
484 | made udelay() unreliable. | 484 | made udelay() unreliable. |
485 | The old method of using an ISA access as a delay, __SLOW_DOWN_IO__, is | 485 | The old method of using an ISA access as a delay, __SLOW_DOWN_IO__, is |
486 | depricated. | 486 | deprecated. |
487 | */ | 487 | */ |
488 | #define eeprom_delay(ee_addr) ioread32(ee_addr) | 488 | #define eeprom_delay(ee_addr) ioread32(ee_addr) |
489 | 489 | ||
diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig index 8dc09a3790c..5a96d74e4ce 100644 --- a/drivers/net/usb/Kconfig +++ b/drivers/net/usb/Kconfig | |||
@@ -71,7 +71,7 @@ config USB_PEGASUS | |||
71 | select MII | 71 | select MII |
72 | ---help--- | 72 | ---help--- |
73 | Say Y here if you know you have Pegasus or Pegasus-II based adapter. | 73 | Say Y here if you know you have Pegasus or Pegasus-II based adapter. |
74 | If in doubt then look at <file:drivers/usb/net/pegasus.h> for the | 74 | If in doubt then look at <file:drivers/net/usb/pegasus.h> for the |
75 | complete list of supported devices. | 75 | complete list of supported devices. |
76 | 76 | ||
77 | If your particular adapter is not in the list and you are _sure_ it | 77 | If your particular adapter is not in the list and you are _sure_ it |
diff --git a/drivers/net/usb/mcs7830.c b/drivers/net/usb/mcs7830.c index 6240b978fe3..f55a5951733 100644 --- a/drivers/net/usb/mcs7830.c +++ b/drivers/net/usb/mcs7830.c | |||
@@ -114,8 +114,8 @@ static void mcs7830_async_cmd_callback(struct urb *urb) | |||
114 | struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context; | 114 | struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context; |
115 | 115 | ||
116 | if (urb->status < 0) | 116 | if (urb->status < 0) |
117 | printk(KERN_DEBUG "mcs7830_async_cmd_callback() failed with %d", | 117 | printk(KERN_DEBUG "%s() failed with %d\n", |
118 | urb->status); | 118 | __FUNCTION__, urb->status); |
119 | 119 | ||
120 | kfree(req); | 120 | kfree(req); |
121 | usb_free_urb(urb); | 121 | usb_free_urb(urb); |
@@ -129,15 +129,15 @@ static void mcs7830_set_reg_async(struct usbnet *dev, u16 index, u16 size, void | |||
129 | 129 | ||
130 | urb = usb_alloc_urb(0, GFP_ATOMIC); | 130 | urb = usb_alloc_urb(0, GFP_ATOMIC); |
131 | if (!urb) { | 131 | if (!urb) { |
132 | dev_dbg(&dev->udev->dev, "Error allocating URB " | 132 | dev_dbg(&dev->udev->dev, |
133 | "in write_cmd_async!"); | 133 | "Error allocating URB in write_cmd_async!\n"); |
134 | return; | 134 | return; |
135 | } | 135 | } |
136 | 136 | ||
137 | req = kmalloc(sizeof *req, GFP_ATOMIC); | 137 | req = kmalloc(sizeof *req, GFP_ATOMIC); |
138 | if (!req) { | 138 | if (!req) { |
139 | dev_err(&dev->udev->dev, "Failed to allocate memory for " | 139 | dev_err(&dev->udev->dev, |
140 | "control request"); | 140 | "Failed to allocate memory for control request\n"); |
141 | goto out; | 141 | goto out; |
142 | } | 142 | } |
143 | req->bRequestType = MCS7830_WR_BMREQ; | 143 | req->bRequestType = MCS7830_WR_BMREQ; |
@@ -153,8 +153,8 @@ static void mcs7830_set_reg_async(struct usbnet *dev, u16 index, u16 size, void | |||
153 | 153 | ||
154 | ret = usb_submit_urb(urb, GFP_ATOMIC); | 154 | ret = usb_submit_urb(urb, GFP_ATOMIC); |
155 | if (ret < 0) { | 155 | if (ret < 0) { |
156 | dev_err(&dev->udev->dev, "Error submitting the control " | 156 | dev_err(&dev->udev->dev, |
157 | "message: ret=%d", ret); | 157 | "Error submitting the control message: ret=%d\n", ret); |
158 | goto out; | 158 | goto out; |
159 | } | 159 | } |
160 | return; | 160 | return; |
diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c index 4ae05799ac4..5c4a92de9a0 100644 --- a/drivers/net/via-velocity.c +++ b/drivers/net/via-velocity.c | |||
@@ -1648,7 +1648,7 @@ static int velocity_alloc_rx_buf(struct velocity_info *vptr, int idx) | |||
1648 | * | 1648 | * |
1649 | * Scan the queues looking for transmitted packets that | 1649 | * Scan the queues looking for transmitted packets that |
1650 | * we can complete and clean up. Update any statistics as | 1650 | * we can complete and clean up. Update any statistics as |
1651 | * neccessary/ | 1651 | * necessary/ |
1652 | */ | 1652 | */ |
1653 | 1653 | ||
1654 | static int velocity_tx_srv(struct velocity_info *vptr, u32 status) | 1654 | static int velocity_tx_srv(struct velocity_info *vptr, u32 status) |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index c141a264ac4..9d9ff76a9bc 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -49,7 +49,6 @@ | |||
49 | #include "pio.h" | 49 | #include "pio.h" |
50 | #include "sysfs.h" | 50 | #include "sysfs.h" |
51 | #include "xmit.h" | 51 | #include "xmit.h" |
52 | #include "sysfs.h" | ||
53 | #include "lo.h" | 52 | #include "lo.h" |
54 | #include "pcmcia.h" | 53 | #include "pcmcia.h" |
55 | 54 | ||
@@ -3495,7 +3494,7 @@ static int b43_start(struct ieee80211_hw *hw) | |||
3495 | struct b43_wl *wl = hw_to_b43_wl(hw); | 3494 | struct b43_wl *wl = hw_to_b43_wl(hw); |
3496 | struct b43_wldev *dev = wl->current_dev; | 3495 | struct b43_wldev *dev = wl->current_dev; |
3497 | int did_init = 0; | 3496 | int did_init = 0; |
3498 | int err; | 3497 | int err = 0; |
3499 | 3498 | ||
3500 | mutex_lock(&wl->mutex); | 3499 | mutex_lock(&wl->mutex); |
3501 | 3500 | ||
@@ -3521,7 +3520,7 @@ static int b43_start(struct ieee80211_hw *hw) | |||
3521 | return err; | 3520 | return err; |
3522 | } | 3521 | } |
3523 | 3522 | ||
3524 | void b43_stop(struct ieee80211_hw *hw) | 3523 | static void b43_stop(struct ieee80211_hw *hw) |
3525 | { | 3524 | { |
3526 | struct b43_wl *wl = hw_to_b43_wl(hw); | 3525 | struct b43_wl *wl = hw_to_b43_wl(hw); |
3527 | struct b43_wldev *dev = wl->current_dev; | 3526 | struct b43_wldev *dev = wl->current_dev; |
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index f0749510bcd..d09479e816c 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c | |||
@@ -3306,7 +3306,7 @@ static int b43legacy_start(struct ieee80211_hw *hw) | |||
3306 | struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw); | 3306 | struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw); |
3307 | struct b43legacy_wldev *dev = wl->current_dev; | 3307 | struct b43legacy_wldev *dev = wl->current_dev; |
3308 | int did_init = 0; | 3308 | int did_init = 0; |
3309 | int err; | 3309 | int err = 0; |
3310 | 3310 | ||
3311 | mutex_lock(&wl->mutex); | 3311 | mutex_lock(&wl->mutex); |
3312 | 3312 | ||
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_leds.c b/drivers/net/wireless/bcm43xx/bcm43xx_leds.c index 8f198befba3..cb51dc51cce 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_leds.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_leds.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include "bcm43xx_radio.h" | 29 | #include "bcm43xx_radio.h" |
30 | #include "bcm43xx.h" | 30 | #include "bcm43xx.h" |
31 | 31 | ||
32 | #include <asm/bitops.h> | 32 | #include <linux/bitops.h> |
33 | 33 | ||
34 | 34 | ||
35 | static void bcm43xx_led_changestate(struct bcm43xx_led *led) | 35 | static void bcm43xx_led_changestate(struct bcm43xx_led *led) |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h b/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h index 9ecf2bf0d25..47c135a7f4d 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h +++ b/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h | |||
@@ -87,7 +87,7 @@ void bcm43xx_generate_txhdr(struct bcm43xx_private *bcm, | |||
87 | 87 | ||
88 | /* RX header as received from the hardware. */ | 88 | /* RX header as received from the hardware. */ |
89 | struct bcm43xx_rxhdr { | 89 | struct bcm43xx_rxhdr { |
90 | /* Frame Length. Must be generated explicitely in PIO mode. */ | 90 | /* Frame Length. Must be generated explicitly in PIO mode. */ |
91 | __le16 frame_length; | 91 | __le16 frame_length; |
92 | PAD_BYTES(2); | 92 | PAD_BYTES(2); |
93 | /* Flags field 1 */ | 93 | /* Flags field 1 */ |
diff --git a/drivers/net/wireless/hostap/hostap_common.h b/drivers/net/wireless/hostap/hostap_common.h index ceb7f1e5e9e..517f8984514 100644 --- a/drivers/net/wireless/hostap/hostap_common.h +++ b/drivers/net/wireless/hostap/hostap_common.h | |||
@@ -4,9 +4,6 @@ | |||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/if_ether.h> | 5 | #include <linux/if_ether.h> |
6 | 6 | ||
7 | #define BIT(x) (1 << (x)) | ||
8 | |||
9 | |||
10 | /* IEEE 802.11 defines */ | 7 | /* IEEE 802.11 defines */ |
11 | 8 | ||
12 | /* Information Element IDs */ | 9 | /* Information Element IDs */ |
diff --git a/drivers/net/wireless/hostap/hostap_ioctl.c b/drivers/net/wireless/hostap/hostap_ioctl.c index 40f516d42c5..d8f5efcfcab 100644 --- a/drivers/net/wireless/hostap/hostap_ioctl.c +++ b/drivers/net/wireless/hostap/hostap_ioctl.c | |||
@@ -2920,7 +2920,7 @@ static int prism2_ioctl_priv_monitor(struct net_device *dev, int *i) | |||
2920 | 2920 | ||
2921 | printk(KERN_DEBUG "%s: process %d (%s) used deprecated iwpriv monitor " | 2921 | printk(KERN_DEBUG "%s: process %d (%s) used deprecated iwpriv monitor " |
2922 | "- update software to use iwconfig mode monitor\n", | 2922 | "- update software to use iwconfig mode monitor\n", |
2923 | dev->name, current->pid, current->comm); | 2923 | dev->name, task_pid_nr(current), current->comm); |
2924 | 2924 | ||
2925 | /* Backward compatibility code - this can be removed at some point */ | 2925 | /* Backward compatibility code - this can be removed at some point */ |
2926 | 2926 | ||
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c index 2d46a16c094..a6c7904de28 100644 --- a/drivers/net/wireless/ipw2100.c +++ b/drivers/net/wireless/ipw2100.c | |||
@@ -1858,14 +1858,6 @@ static void ipw2100_down(struct ipw2100_priv *priv) | |||
1858 | 1858 | ||
1859 | modify_acceptable_latency("ipw2100", INFINITE_LATENCY); | 1859 | modify_acceptable_latency("ipw2100", INFINITE_LATENCY); |
1860 | 1860 | ||
1861 | #ifdef ACPI_CSTATE_LIMIT_DEFINED | ||
1862 | if (priv->config & CFG_C3_DISABLED) { | ||
1863 | IPW_DEBUG_INFO(": Resetting C3 transitions.\n"); | ||
1864 | acpi_set_cstate_limit(priv->cstate_limit); | ||
1865 | priv->config &= ~CFG_C3_DISABLED; | ||
1866 | } | ||
1867 | #endif | ||
1868 | |||
1869 | /* We have to signal any supplicant if we are disassociating */ | 1861 | /* We have to signal any supplicant if we are disassociating */ |
1870 | if (associated) | 1862 | if (associated) |
1871 | wireless_send_event(priv->net_dev, SIOCGIWAP, &wrqu, NULL); | 1863 | wireless_send_event(priv->net_dev, SIOCGIWAP, &wrqu, NULL); |
@@ -2091,26 +2083,52 @@ static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status) | |||
2091 | /* RF_KILL is now enabled (else we wouldn't be here) */ | 2083 | /* RF_KILL is now enabled (else we wouldn't be here) */ |
2092 | priv->status |= STATUS_RF_KILL_HW; | 2084 | priv->status |= STATUS_RF_KILL_HW; |
2093 | 2085 | ||
2094 | #ifdef ACPI_CSTATE_LIMIT_DEFINED | ||
2095 | if (priv->config & CFG_C3_DISABLED) { | ||
2096 | IPW_DEBUG_INFO(": Resetting C3 transitions.\n"); | ||
2097 | acpi_set_cstate_limit(priv->cstate_limit); | ||
2098 | priv->config &= ~CFG_C3_DISABLED; | ||
2099 | } | ||
2100 | #endif | ||
2101 | |||
2102 | /* Make sure the RF Kill check timer is running */ | 2086 | /* Make sure the RF Kill check timer is running */ |
2103 | priv->stop_rf_kill = 0; | 2087 | priv->stop_rf_kill = 0; |
2104 | cancel_delayed_work(&priv->rf_kill); | 2088 | cancel_delayed_work(&priv->rf_kill); |
2105 | queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ)); | 2089 | queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ)); |
2106 | } | 2090 | } |
2107 | 2091 | ||
2092 | static void send_scan_event(void *data) | ||
2093 | { | ||
2094 | struct ipw2100_priv *priv = data; | ||
2095 | union iwreq_data wrqu; | ||
2096 | |||
2097 | wrqu.data.length = 0; | ||
2098 | wrqu.data.flags = 0; | ||
2099 | wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL); | ||
2100 | } | ||
2101 | |||
2102 | static void ipw2100_scan_event_later(struct work_struct *work) | ||
2103 | { | ||
2104 | send_scan_event(container_of(work, struct ipw2100_priv, | ||
2105 | scan_event_later.work)); | ||
2106 | } | ||
2107 | |||
2108 | static void ipw2100_scan_event_now(struct work_struct *work) | ||
2109 | { | ||
2110 | send_scan_event(container_of(work, struct ipw2100_priv, | ||
2111 | scan_event_now)); | ||
2112 | } | ||
2113 | |||
2108 | static void isr_scan_complete(struct ipw2100_priv *priv, u32 status) | 2114 | static void isr_scan_complete(struct ipw2100_priv *priv, u32 status) |
2109 | { | 2115 | { |
2110 | IPW_DEBUG_SCAN("scan complete\n"); | 2116 | IPW_DEBUG_SCAN("scan complete\n"); |
2111 | /* Age the scan results... */ | 2117 | /* Age the scan results... */ |
2112 | priv->ieee->scans++; | 2118 | priv->ieee->scans++; |
2113 | priv->status &= ~STATUS_SCANNING; | 2119 | priv->status &= ~STATUS_SCANNING; |
2120 | |||
2121 | /* Only userspace-requested scan completion events go out immediately */ | ||
2122 | if (!priv->user_requested_scan) { | ||
2123 | if (!delayed_work_pending(&priv->scan_event_later)) | ||
2124 | queue_delayed_work(priv->workqueue, | ||
2125 | &priv->scan_event_later, | ||
2126 | round_jiffies(msecs_to_jiffies(4000))); | ||
2127 | } else { | ||
2128 | priv->user_requested_scan = 0; | ||
2129 | cancel_delayed_work(&priv->scan_event_later); | ||
2130 | queue_work(priv->workqueue, &priv->scan_event_now); | ||
2131 | } | ||
2114 | } | 2132 | } |
2115 | 2133 | ||
2116 | #ifdef CONFIG_IPW2100_DEBUG | 2134 | #ifdef CONFIG_IPW2100_DEBUG |
@@ -2329,23 +2347,10 @@ static void ipw2100_corruption_detected(struct ipw2100_priv *priv, int i) | |||
2329 | u32 match, reg; | 2347 | u32 match, reg; |
2330 | int j; | 2348 | int j; |
2331 | #endif | 2349 | #endif |
2332 | #ifdef ACPI_CSTATE_LIMIT_DEFINED | ||
2333 | int limit; | ||
2334 | #endif | ||
2335 | 2350 | ||
2336 | IPW_DEBUG_INFO(": PCI latency error detected at 0x%04zX.\n", | 2351 | IPW_DEBUG_INFO(": PCI latency error detected at 0x%04zX.\n", |
2337 | i * sizeof(struct ipw2100_status)); | 2352 | i * sizeof(struct ipw2100_status)); |
2338 | 2353 | ||
2339 | #ifdef ACPI_CSTATE_LIMIT_DEFINED | ||
2340 | IPW_DEBUG_INFO(": Disabling C3 transitions.\n"); | ||
2341 | limit = acpi_get_cstate_limit(); | ||
2342 | if (limit > 2) { | ||
2343 | priv->cstate_limit = limit; | ||
2344 | acpi_set_cstate_limit(2); | ||
2345 | priv->config |= CFG_C3_DISABLED; | ||
2346 | } | ||
2347 | #endif | ||
2348 | |||
2349 | #ifdef IPW2100_DEBUG_C3 | 2354 | #ifdef IPW2100_DEBUG_C3 |
2350 | /* Halt the fimrware so we can get a good image */ | 2355 | /* Halt the fimrware so we can get a good image */ |
2351 | write_register(priv->net_dev, IPW_REG_RESET_REG, | 2356 | write_register(priv->net_dev, IPW_REG_RESET_REG, |
@@ -4378,6 +4383,7 @@ static void ipw2100_kill_workqueue(struct ipw2100_priv *priv) | |||
4378 | cancel_delayed_work(&priv->wx_event_work); | 4383 | cancel_delayed_work(&priv->wx_event_work); |
4379 | cancel_delayed_work(&priv->hang_check); | 4384 | cancel_delayed_work(&priv->hang_check); |
4380 | cancel_delayed_work(&priv->rf_kill); | 4385 | cancel_delayed_work(&priv->rf_kill); |
4386 | cancel_delayed_work(&priv->scan_event_later); | ||
4381 | destroy_workqueue(priv->workqueue); | 4387 | destroy_workqueue(priv->workqueue); |
4382 | priv->workqueue = NULL; | 4388 | priv->workqueue = NULL; |
4383 | } | 4389 | } |
@@ -6041,7 +6047,7 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev, | |||
6041 | * ends up causing problems. So, we just handle | 6047 | * ends up causing problems. So, we just handle |
6042 | * the WX extensions through the ipw2100_ioctl interface */ | 6048 | * the WX extensions through the ipw2100_ioctl interface */ |
6043 | 6049 | ||
6044 | /* memset() puts everything to 0, so we only have explicitely set | 6050 | /* memset() puts everything to 0, so we only have explicitly set |
6045 | * those values that need to be something else */ | 6051 | * those values that need to be something else */ |
6046 | 6052 | ||
6047 | /* If power management is turned on, default to AUTO mode */ | 6053 | /* If power management is turned on, default to AUTO mode */ |
@@ -6121,6 +6127,8 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev, | |||
6121 | INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work); | 6127 | INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work); |
6122 | INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check); | 6128 | INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check); |
6123 | INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill); | 6129 | INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill); |
6130 | INIT_WORK(&priv->scan_event_now, ipw2100_scan_event_now); | ||
6131 | INIT_DELAYED_WORK(&priv->scan_event_later, ipw2100_scan_event_later); | ||
6124 | 6132 | ||
6125 | tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long)) | 6133 | tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long)) |
6126 | ipw2100_irq_tasklet, (unsigned long)priv); | 6134 | ipw2100_irq_tasklet, (unsigned long)priv); |
@@ -7425,6 +7433,8 @@ static int ipw2100_wx_set_scan(struct net_device *dev, | |||
7425 | } | 7433 | } |
7426 | 7434 | ||
7427 | IPW_DEBUG_WX("Initiating scan...\n"); | 7435 | IPW_DEBUG_WX("Initiating scan...\n"); |
7436 | |||
7437 | priv->user_requested_scan = 1; | ||
7428 | if (ipw2100_set_scan_options(priv) || ipw2100_start_scan(priv)) { | 7438 | if (ipw2100_set_scan_options(priv) || ipw2100_start_scan(priv)) { |
7429 | IPW_DEBUG_WX("Start scan failed.\n"); | 7439 | IPW_DEBUG_WX("Start scan failed.\n"); |
7430 | 7440 | ||
@@ -7499,7 +7509,7 @@ static int ipw2100_wx_set_power(struct net_device *dev, | |||
7499 | switch (wrqu->power.flags & IW_POWER_MODE) { | 7509 | switch (wrqu->power.flags & IW_POWER_MODE) { |
7500 | case IW_POWER_ON: /* If not specified */ | 7510 | case IW_POWER_ON: /* If not specified */ |
7501 | case IW_POWER_MODE: /* If set all mask */ | 7511 | case IW_POWER_MODE: /* If set all mask */ |
7502 | case IW_POWER_ALL_R: /* If explicitely state all */ | 7512 | case IW_POWER_ALL_R: /* If explicitly state all */ |
7503 | break; | 7513 | break; |
7504 | default: /* Otherwise we don't support it */ | 7514 | default: /* Otherwise we don't support it */ |
7505 | IPW_DEBUG_WX("SET PM Mode: %X not supported.\n", | 7515 | IPW_DEBUG_WX("SET PM Mode: %X not supported.\n", |
diff --git a/drivers/net/wireless/ipw2100.h b/drivers/net/wireless/ipw2100.h index de7d384d38a..bbf1ddcafba 100644 --- a/drivers/net/wireless/ipw2100.h +++ b/drivers/net/wireless/ipw2100.h | |||
@@ -479,7 +479,6 @@ enum { | |||
479 | #define CFG_ASSOCIATE (1<<6) | 479 | #define CFG_ASSOCIATE (1<<6) |
480 | #define CFG_FIXED_RATE (1<<7) | 480 | #define CFG_FIXED_RATE (1<<7) |
481 | #define CFG_ADHOC_CREATE (1<<8) | 481 | #define CFG_ADHOC_CREATE (1<<8) |
482 | #define CFG_C3_DISABLED (1<<9) | ||
483 | #define CFG_PASSIVE_SCAN (1<<10) | 482 | #define CFG_PASSIVE_SCAN (1<<10) |
484 | #ifdef CONFIG_IPW2100_MONITOR | 483 | #ifdef CONFIG_IPW2100_MONITOR |
485 | #define CFG_CRC_CHECK (1<<11) | 484 | #define CFG_CRC_CHECK (1<<11) |
@@ -508,7 +507,6 @@ struct ipw2100_priv { | |||
508 | u8 bssid[ETH_ALEN]; | 507 | u8 bssid[ETH_ALEN]; |
509 | u8 channel; | 508 | u8 channel; |
510 | int last_mode; | 509 | int last_mode; |
511 | int cstate_limit; | ||
512 | 510 | ||
513 | unsigned long connect_start; | 511 | unsigned long connect_start; |
514 | unsigned long last_reset; | 512 | unsigned long last_reset; |
@@ -588,6 +586,10 @@ struct ipw2100_priv { | |||
588 | struct delayed_work wx_event_work; | 586 | struct delayed_work wx_event_work; |
589 | struct delayed_work hang_check; | 587 | struct delayed_work hang_check; |
590 | struct delayed_work rf_kill; | 588 | struct delayed_work rf_kill; |
589 | struct work_struct scan_event_now; | ||
590 | struct delayed_work scan_event_later; | ||
591 | |||
592 | int user_requested_scan; | ||
591 | 593 | ||
592 | u32 interrupts; | 594 | u32 interrupts; |
593 | int tx_interrupts; | 595 | int tx_interrupts; |
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index feb8fcbab2d..e3c828401b9 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
@@ -9603,7 +9603,7 @@ static int ipw_wx_set_power(struct net_device *dev, | |||
9603 | switch (wrqu->power.flags & IW_POWER_MODE) { | 9603 | switch (wrqu->power.flags & IW_POWER_MODE) { |
9604 | case IW_POWER_ON: /* If not specified */ | 9604 | case IW_POWER_ON: /* If not specified */ |
9605 | case IW_POWER_MODE: /* If set all mask */ | 9605 | case IW_POWER_MODE: /* If set all mask */ |
9606 | case IW_POWER_ALL_R: /* If explicitely state all */ | 9606 | case IW_POWER_ALL_R: /* If explicitly state all */ |
9607 | break; | 9607 | break; |
9608 | default: /* Otherwise we don't support it */ | 9608 | default: /* Otherwise we don't support it */ |
9609 | IPW_DEBUG_WX("SET PM Mode: %X not supported.\n", | 9609 | IPW_DEBUG_WX("SET PM Mode: %X not supported.\n", |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-rs.c b/drivers/net/wireless/iwlwifi/iwl-3945-rs.c index f4aabcf480e..262ab0b5582 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945-rs.c | |||
@@ -37,9 +37,6 @@ | |||
37 | 37 | ||
38 | #include <linux/workqueue.h> | 38 | #include <linux/workqueue.h> |
39 | 39 | ||
40 | #include <net/mac80211.h> | ||
41 | #include <linux/wireless.h> | ||
42 | |||
43 | #define IWL 3945 | 40 | #define IWL 3945 |
44 | 41 | ||
45 | #include "../net/mac80211/ieee80211_rate.h" | 42 | #include "../net/mac80211/ieee80211_rate.h" |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c index acb38750535..19bcb01e278 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c | |||
@@ -38,7 +38,6 @@ | |||
38 | #include <net/mac80211.h> | 38 | #include <net/mac80211.h> |
39 | 39 | ||
40 | #include <linux/etherdevice.h> | 40 | #include <linux/etherdevice.h> |
41 | #include <linux/delay.h> | ||
42 | 41 | ||
43 | #define IWL 3945 | 42 | #define IWL 3945 |
44 | 43 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c index 287c75705c4..8dc78c0bf1f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c | |||
@@ -36,9 +36,6 @@ | |||
36 | 36 | ||
37 | #include <linux/workqueue.h> | 37 | #include <linux/workqueue.h> |
38 | 38 | ||
39 | #include <net/mac80211.h> | ||
40 | #include <linux/wireless.h> | ||
41 | |||
42 | #define IWL 4965 | 39 | #define IWL 4965 |
43 | 40 | ||
44 | #include "../net/mac80211/ieee80211_rate.h" | 41 | #include "../net/mac80211/ieee80211_rate.h" |
@@ -2024,12 +2021,18 @@ static int open_file_generic(struct inode *inode, struct file *file) | |||
2024 | static void rs_dbgfs_set_mcs(struct iwl_rate_scale_priv *rs_priv, | 2021 | static void rs_dbgfs_set_mcs(struct iwl_rate_scale_priv *rs_priv, |
2025 | struct iwl_rate *mcs, int index) | 2022 | struct iwl_rate *mcs, int index) |
2026 | { | 2023 | { |
2027 | const u32 cck_rate = 0x820A; | 2024 | u32 base_rate; |
2025 | |||
2026 | if (rs_priv->phymode == (u8) MODE_IEEE80211A) | ||
2027 | base_rate = 0x800D; | ||
2028 | else | ||
2029 | base_rate = 0x820A; | ||
2030 | |||
2028 | if (rs_priv->dbg_fixed.rate_n_flags) { | 2031 | if (rs_priv->dbg_fixed.rate_n_flags) { |
2029 | if (index < 12) | 2032 | if (index < 12) |
2030 | mcs->rate_n_flags = rs_priv->dbg_fixed.rate_n_flags; | 2033 | mcs->rate_n_flags = rs_priv->dbg_fixed.rate_n_flags; |
2031 | else | 2034 | else |
2032 | mcs->rate_n_flags = cck_rate; | 2035 | mcs->rate_n_flags = base_rate; |
2033 | IWL_DEBUG_RATE("Fixed rate ON\n"); | 2036 | IWL_DEBUG_RATE("Fixed rate ON\n"); |
2034 | return; | 2037 | return; |
2035 | } | 2038 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index b50d20267c8..557deebca1b 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c | |||
@@ -35,9 +35,7 @@ | |||
35 | #include <linux/netdevice.h> | 35 | #include <linux/netdevice.h> |
36 | #include <linux/wireless.h> | 36 | #include <linux/wireless.h> |
37 | #include <net/mac80211.h> | 37 | #include <net/mac80211.h> |
38 | #include <linux/netdevice.h> | ||
39 | #include <linux/etherdevice.h> | 38 | #include <linux/etherdevice.h> |
40 | #include <linux/delay.h> | ||
41 | 39 | ||
42 | #define IWL 4965 | 40 | #define IWL 4965 |
43 | 41 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 75e3b5c3f15..83019d1d7cc 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -48,8 +48,6 @@ | |||
48 | #include <linux/netdevice.h> | 48 | #include <linux/netdevice.h> |
49 | #include <linux/wireless.h> | 49 | #include <linux/wireless.h> |
50 | #include <linux/firmware.h> | 50 | #include <linux/firmware.h> |
51 | #include <linux/skbuff.h> | ||
52 | #include <linux/netdevice.h> | ||
53 | #include <linux/etherdevice.h> | 51 | #include <linux/etherdevice.h> |
54 | #include <linux/if_arp.h> | 52 | #include <linux/if_arp.h> |
55 | 53 | ||
@@ -1749,21 +1747,22 @@ static void iwl_unset_hw_setting(struct iwl_priv *priv) | |||
1749 | * return : set the bit for each supported rate insert in ie | 1747 | * return : set the bit for each supported rate insert in ie |
1750 | */ | 1748 | */ |
1751 | static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate, | 1749 | static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate, |
1752 | u16 basic_rate, int max_count) | 1750 | u16 basic_rate, int *left) |
1753 | { | 1751 | { |
1754 | u16 ret_rates = 0, bit; | 1752 | u16 ret_rates = 0, bit; |
1755 | int i; | 1753 | int i; |
1756 | u8 *rates; | 1754 | u8 *cnt = ie; |
1757 | 1755 | u8 *rates = ie + 1; | |
1758 | rates = &(ie[1]); | ||
1759 | 1756 | ||
1760 | for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) { | 1757 | for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) { |
1761 | if (bit & supported_rate) { | 1758 | if (bit & supported_rate) { |
1762 | ret_rates |= bit; | 1759 | ret_rates |= bit; |
1763 | rates[*ie] = iwl_rates[i].ieee | | 1760 | rates[*cnt] = iwl_rates[i].ieee | |
1764 | ((bit & basic_rate) ? 0x80 : 0x00); | 1761 | ((bit & basic_rate) ? 0x80 : 0x00); |
1765 | *ie = *ie + 1; | 1762 | (*cnt)++; |
1766 | if (*ie >= max_count) | 1763 | (*left)--; |
1764 | if ((*left <= 0) || | ||
1765 | (*cnt >= IWL_SUPPORTED_RATES_IE_LEN)) | ||
1767 | break; | 1766 | break; |
1768 | } | 1767 | } |
1769 | } | 1768 | } |
@@ -1780,7 +1779,7 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv, | |||
1780 | { | 1779 | { |
1781 | int len = 0; | 1780 | int len = 0; |
1782 | u8 *pos = NULL; | 1781 | u8 *pos = NULL; |
1783 | u16 ret_rates; | 1782 | u16 active_rates, ret_rates, cck_rates; |
1784 | 1783 | ||
1785 | /* Make sure there is enough space for the probe request, | 1784 | /* Make sure there is enough space for the probe request, |
1786 | * two mandatory IEs and the data */ | 1785 | * two mandatory IEs and the data */ |
@@ -1825,19 +1824,27 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv, | |||
1825 | left -= 2; | 1824 | left -= 2; |
1826 | if (left < 0) | 1825 | if (left < 0) |
1827 | return 0; | 1826 | return 0; |
1827 | |||
1828 | /* ... fill it in... */ | 1828 | /* ... fill it in... */ |
1829 | *pos++ = WLAN_EID_SUPP_RATES; | 1829 | *pos++ = WLAN_EID_SUPP_RATES; |
1830 | *pos = 0; | 1830 | *pos = 0; |
1831 | ret_rates = priv->active_rate = priv->rates_mask; | 1831 | |
1832 | priv->active_rate = priv->rates_mask; | ||
1833 | active_rates = priv->active_rate; | ||
1832 | priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK; | 1834 | priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK; |
1833 | 1835 | ||
1834 | iwl_supported_rate_to_ie(pos, priv->active_rate, | 1836 | cck_rates = IWL_CCK_RATES_MASK & active_rates; |
1835 | priv->active_rate_basic, left); | 1837 | ret_rates = iwl_supported_rate_to_ie(pos, cck_rates, |
1838 | priv->active_rate_basic, &left); | ||
1839 | active_rates &= ~ret_rates; | ||
1840 | |||
1841 | ret_rates = iwl_supported_rate_to_ie(pos, active_rates, | ||
1842 | priv->active_rate_basic, &left); | ||
1843 | active_rates &= ~ret_rates; | ||
1844 | |||
1836 | len += 2 + *pos; | 1845 | len += 2 + *pos; |
1837 | pos += (*pos) + 1; | 1846 | pos += (*pos) + 1; |
1838 | ret_rates = ~ret_rates & priv->active_rate; | 1847 | if (active_rates == 0) |
1839 | |||
1840 | if (ret_rates == 0) | ||
1841 | goto fill_end; | 1848 | goto fill_end; |
1842 | 1849 | ||
1843 | /* fill in supported extended rate */ | 1850 | /* fill in supported extended rate */ |
@@ -1848,7 +1855,8 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv, | |||
1848 | /* ... fill it in... */ | 1855 | /* ... fill it in... */ |
1849 | *pos++ = WLAN_EID_EXT_SUPP_RATES; | 1856 | *pos++ = WLAN_EID_EXT_SUPP_RATES; |
1850 | *pos = 0; | 1857 | *pos = 0; |
1851 | iwl_supported_rate_to_ie(pos, ret_rates, priv->active_rate_basic, left); | 1858 | iwl_supported_rate_to_ie(pos, active_rates, |
1859 | priv->active_rate_basic, &left); | ||
1852 | if (*pos > 0) | 1860 | if (*pos > 0) |
1853 | len += 2 + *pos; | 1861 | len += 2 + *pos; |
1854 | 1862 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c index b1a6e39f782..5e1279263b2 100644 --- a/drivers/net/wireless/iwlwifi/iwl4965-base.c +++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c | |||
@@ -48,8 +48,6 @@ | |||
48 | #include <linux/netdevice.h> | 48 | #include <linux/netdevice.h> |
49 | #include <linux/wireless.h> | 49 | #include <linux/wireless.h> |
50 | #include <linux/firmware.h> | 50 | #include <linux/firmware.h> |
51 | #include <linux/skbuff.h> | ||
52 | #include <linux/netdevice.h> | ||
53 | #include <linux/etherdevice.h> | 51 | #include <linux/etherdevice.h> |
54 | #include <linux/if_arp.h> | 52 | #include <linux/if_arp.h> |
55 | 53 | ||
@@ -1802,21 +1800,22 @@ static void iwl_unset_hw_setting(struct iwl_priv *priv) | |||
1802 | * return : set the bit for each supported rate insert in ie | 1800 | * return : set the bit for each supported rate insert in ie |
1803 | */ | 1801 | */ |
1804 | static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate, | 1802 | static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate, |
1805 | u16 basic_rate, int max_count) | 1803 | u16 basic_rate, int *left) |
1806 | { | 1804 | { |
1807 | u16 ret_rates = 0, bit; | 1805 | u16 ret_rates = 0, bit; |
1808 | int i; | 1806 | int i; |
1809 | u8 *rates; | 1807 | u8 *cnt = ie; |
1810 | 1808 | u8 *rates = ie + 1; | |
1811 | rates = &(ie[1]); | ||
1812 | 1809 | ||
1813 | for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) { | 1810 | for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) { |
1814 | if (bit & supported_rate) { | 1811 | if (bit & supported_rate) { |
1815 | ret_rates |= bit; | 1812 | ret_rates |= bit; |
1816 | rates[*ie] = iwl_rates[i].ieee | | 1813 | rates[*cnt] = iwl_rates[i].ieee | |
1817 | ((bit & basic_rate) ? 0x80 : 0x00); | 1814 | ((bit & basic_rate) ? 0x80 : 0x00); |
1818 | *ie = *ie + 1; | 1815 | (*cnt)++; |
1819 | if (*ie >= max_count) | 1816 | (*left)--; |
1817 | if ((*left <= 0) || | ||
1818 | (*cnt >= IWL_SUPPORTED_RATES_IE_LEN)) | ||
1820 | break; | 1819 | break; |
1821 | } | 1820 | } |
1822 | } | 1821 | } |
@@ -1839,7 +1838,7 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv, | |||
1839 | { | 1838 | { |
1840 | int len = 0; | 1839 | int len = 0; |
1841 | u8 *pos = NULL; | 1840 | u8 *pos = NULL; |
1842 | u16 ret_rates; | 1841 | u16 active_rates, ret_rates, cck_rates; |
1843 | 1842 | ||
1844 | /* Make sure there is enough space for the probe request, | 1843 | /* Make sure there is enough space for the probe request, |
1845 | * two mandatory IEs and the data */ | 1844 | * two mandatory IEs and the data */ |
@@ -1884,19 +1883,27 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv, | |||
1884 | left -= 2; | 1883 | left -= 2; |
1885 | if (left < 0) | 1884 | if (left < 0) |
1886 | return 0; | 1885 | return 0; |
1886 | |||
1887 | /* ... fill it in... */ | 1887 | /* ... fill it in... */ |
1888 | *pos++ = WLAN_EID_SUPP_RATES; | 1888 | *pos++ = WLAN_EID_SUPP_RATES; |
1889 | *pos = 0; | 1889 | *pos = 0; |
1890 | ret_rates = priv->active_rate = priv->rates_mask; | 1890 | |
1891 | priv->active_rate = priv->rates_mask; | ||
1892 | active_rates = priv->active_rate; | ||
1891 | priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK; | 1893 | priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK; |
1892 | 1894 | ||
1893 | iwl_supported_rate_to_ie(pos, priv->active_rate, | 1895 | cck_rates = IWL_CCK_RATES_MASK & active_rates; |
1894 | priv->active_rate_basic, left); | 1896 | ret_rates = iwl_supported_rate_to_ie(pos, cck_rates, |
1897 | priv->active_rate_basic, &left); | ||
1898 | active_rates &= ~ret_rates; | ||
1899 | |||
1900 | ret_rates = iwl_supported_rate_to_ie(pos, active_rates, | ||
1901 | priv->active_rate_basic, &left); | ||
1902 | active_rates &= ~ret_rates; | ||
1903 | |||
1895 | len += 2 + *pos; | 1904 | len += 2 + *pos; |
1896 | pos += (*pos) + 1; | 1905 | pos += (*pos) + 1; |
1897 | ret_rates = ~ret_rates & priv->active_rate; | 1906 | if (active_rates == 0) |
1898 | |||
1899 | if (ret_rates == 0) | ||
1900 | goto fill_end; | 1907 | goto fill_end; |
1901 | 1908 | ||
1902 | /* fill in supported extended rate */ | 1909 | /* fill in supported extended rate */ |
@@ -1907,7 +1914,8 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv, | |||
1907 | /* ... fill it in... */ | 1914 | /* ... fill it in... */ |
1908 | *pos++ = WLAN_EID_EXT_SUPP_RATES; | 1915 | *pos++ = WLAN_EID_EXT_SUPP_RATES; |
1909 | *pos = 0; | 1916 | *pos = 0; |
1910 | iwl_supported_rate_to_ie(pos, ret_rates, priv->active_rate_basic, left); | 1917 | iwl_supported_rate_to_ie(pos, active_rates, |
1918 | priv->active_rate_basic, &left); | ||
1911 | if (*pos > 0) | 1919 | if (*pos > 0) |
1912 | len += 2 + *pos; | 1920 | len += 2 + *pos; |
1913 | 1921 | ||
@@ -4494,13 +4502,13 @@ static u8 ratio2dB[100] = { | |||
4494 | * Conversion assumes that levels are voltages (20*log), not powers (10*log). */ | 4502 | * Conversion assumes that levels are voltages (20*log), not powers (10*log). */ |
4495 | int iwl_calc_db_from_ratio(int sig_ratio) | 4503 | int iwl_calc_db_from_ratio(int sig_ratio) |
4496 | { | 4504 | { |
4497 | /* Anything above 1000:1 just report as 60 dB */ | 4505 | /* 1000:1 or higher just report as 60 dB */ |
4498 | if (sig_ratio > 1000) | 4506 | if (sig_ratio >= 1000) |
4499 | return 60; | 4507 | return 60; |
4500 | 4508 | ||
4501 | /* Above 100:1, divide by 10 and use table, | 4509 | /* 100:1 or higher, divide by 10 and use table, |
4502 | * add 20 dB to make up for divide by 10 */ | 4510 | * add 20 dB to make up for divide by 10 */ |
4503 | if (sig_ratio > 100) | 4511 | if (sig_ratio >= 100) |
4504 | return (20 + (int)ratio2dB[sig_ratio/10]); | 4512 | return (20 + (int)ratio2dB[sig_ratio/10]); |
4505 | 4513 | ||
4506 | /* We shouldn't see this */ | 4514 | /* We shouldn't see this */ |
diff --git a/drivers/net/wireless/iwlwifi/iwlwifi.h b/drivers/net/wireless/iwlwifi/iwlwifi.h index e0b97c34121..432ce887807 100644 --- a/drivers/net/wireless/iwlwifi/iwlwifi.h +++ b/drivers/net/wireless/iwlwifi/iwlwifi.h | |||
@@ -39,18 +39,13 @@ struct iwl_priv; | |||
39 | /* Hardware specific file defines the PCI IDs table for that hardware module */ | 39 | /* Hardware specific file defines the PCI IDs table for that hardware module */ |
40 | extern struct pci_device_id iwl_hw_card_ids[]; | 40 | extern struct pci_device_id iwl_hw_card_ids[]; |
41 | 41 | ||
42 | #include "iwl-hw.h" | ||
42 | #if IWL == 3945 | 43 | #if IWL == 3945 |
43 | |||
44 | #define DRV_NAME "iwl3945" | 44 | #define DRV_NAME "iwl3945" |
45 | #include "iwl-hw.h" | ||
46 | #include "iwl-3945-hw.h" | 45 | #include "iwl-3945-hw.h" |
47 | |||
48 | #elif IWL == 4965 | 46 | #elif IWL == 4965 |
49 | |||
50 | #define DRV_NAME "iwl4965" | 47 | #define DRV_NAME "iwl4965" |
51 | #include "iwl-hw.h" | ||
52 | #include "iwl-4965-hw.h" | 48 | #include "iwl-4965-hw.h" |
53 | |||
54 | #endif | 49 | #endif |
55 | 50 | ||
56 | #include "iwl-prph.h" | 51 | #include "iwl-prph.h" |
diff --git a/drivers/net/wireless/netwave_cs.c b/drivers/net/wireless/netwave_cs.c index c2d71afd57e..2402cb8dd32 100644 --- a/drivers/net/wireless/netwave_cs.c +++ b/drivers/net/wireless/netwave_cs.c | |||
@@ -4,18 +4,18 @@ | |||
4 | * Version: 0.4.1 | 4 | * Version: 0.4.1 |
5 | * Description: Netwave AirSurfer Wireless LAN PC Card driver | 5 | * Description: Netwave AirSurfer Wireless LAN PC Card driver |
6 | * Status: Experimental. | 6 | * Status: Experimental. |
7 | * Authors: John Markus Bjørndalen <johnm@cs.uit.no> | 7 | * Authors: John Markus Bjørndalen <johnm@cs.uit.no> |
8 | * Dag Brattli <dagb@cs.uit.no> | 8 | * Dag Brattli <dagb@cs.uit.no> |
9 | * David Hinds <dahinds@users.sourceforge.net> | 9 | * David Hinds <dahinds@users.sourceforge.net> |
10 | * Created at: A long time ago! | 10 | * Created at: A long time ago! |
11 | * Modified at: Mon Nov 10 11:54:37 1997 | 11 | * Modified at: Mon Nov 10 11:54:37 1997 |
12 | * Modified by: Dag Brattli <dagb@cs.uit.no> | 12 | * Modified by: Dag Brattli <dagb@cs.uit.no> |
13 | * | 13 | * |
14 | * Copyright (c) 1997 University of Tromsø, Norway | 14 | * Copyright (c) 1997 University of Tromsø, Norway |
15 | * | 15 | * |
16 | * Revision History: | 16 | * Revision History: |
17 | * | 17 | * |
18 | * 08-Nov-97 15:14:47 John Markus Bjørndalen <johnm@cs.uit.no> | 18 | * 08-Nov-97 15:14:47 John Markus Bjørndalen <johnm@cs.uit.no> |
19 | * - Fixed some bugs in netwave_rx and cleaned it up a bit. | 19 | * - Fixed some bugs in netwave_rx and cleaned it up a bit. |
20 | * (One of the bugs would have destroyed packets when receiving | 20 | * (One of the bugs would have destroyed packets when receiving |
21 | * multiple packets per interrupt). | 21 | * multiple packets per interrupt). |
@@ -158,7 +158,7 @@ static int pc_debug = PCMCIA_DEBUG; | |||
158 | module_param(pc_debug, int, 0); | 158 | module_param(pc_debug, int, 0); |
159 | #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args) | 159 | #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args) |
160 | static char *version = | 160 | static char *version = |
161 | "netwave_cs.c 0.3.0 Thu Jul 17 14:36:02 1997 (John Markus Bjørndalen)\n"; | 161 | "netwave_cs.c 0.3.0 Thu Jul 17 14:36:02 1997 (John Markus Bjørndalen)\n"; |
162 | #else | 162 | #else |
163 | #define DEBUG(n, args...) | 163 | #define DEBUG(n, args...) |
164 | #endif | 164 | #endif |
diff --git a/drivers/net/wireless/p54common.c b/drivers/net/wireless/p54common.c index 2c63cf0ad2c..1437db0cf4b 100644 --- a/drivers/net/wireless/p54common.c +++ b/drivers/net/wireless/p54common.c | |||
@@ -577,7 +577,7 @@ static int p54_set_filter(struct ieee80211_hw *dev, u16 filter_type, | |||
577 | struct p54_tx_control_filter *filter; | 577 | struct p54_tx_control_filter *filter; |
578 | 578 | ||
579 | hdr = kzalloc(sizeof(*hdr) + sizeof(*filter) + | 579 | hdr = kzalloc(sizeof(*hdr) + sizeof(*filter) + |
580 | priv->tx_hdr_len, GFP_KERNEL); | 580 | priv->tx_hdr_len, GFP_ATOMIC); |
581 | if (!hdr) | 581 | if (!hdr) |
582 | return -ENOMEM; | 582 | return -ENOMEM; |
583 | 583 | ||
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index bb6f46cfbb9..ff399f8083e 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
@@ -550,7 +550,7 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev, | |||
550 | /* | 550 | /* |
551 | * Check if we need to set the Length Extension | 551 | * Check if we need to set the Length Extension |
552 | */ | 552 | */ |
553 | if (bitrate == 110 && residual <= 3) | 553 | if (bitrate == 110 && residual <= 30) |
554 | desc.service |= 0x80; | 554 | desc.service |= 0x80; |
555 | } | 555 | } |
556 | 556 | ||
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c index 3e42759473c..46c8c0840a6 100644 --- a/drivers/net/wireless/rt2x00/rt73usb.c +++ b/drivers/net/wireless/rt2x00/rt73usb.c | |||
@@ -2029,6 +2029,7 @@ static struct usb_device_id rt73usb_device_table[] = { | |||
2029 | { USB_DEVICE(0x050d, 0x7050), USB_DEVICE_DATA(&rt73usb_ops) }, | 2029 | { USB_DEVICE(0x050d, 0x7050), USB_DEVICE_DATA(&rt73usb_ops) }, |
2030 | { USB_DEVICE(0x050d, 0x705a), USB_DEVICE_DATA(&rt73usb_ops) }, | 2030 | { USB_DEVICE(0x050d, 0x705a), USB_DEVICE_DATA(&rt73usb_ops) }, |
2031 | { USB_DEVICE(0x050d, 0x905b), USB_DEVICE_DATA(&rt73usb_ops) }, | 2031 | { USB_DEVICE(0x050d, 0x905b), USB_DEVICE_DATA(&rt73usb_ops) }, |
2032 | { USB_DEVICE(0x050d, 0x905c), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
2032 | /* Billionton */ | 2033 | /* Billionton */ |
2033 | { USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) }, | 2034 | { USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) }, |
2034 | /* Buffalo */ | 2035 | /* Buffalo */ |
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c index 0ef887dd286..de61c8fe649 100644 --- a/drivers/net/wireless/rtl8187_dev.c +++ b/drivers/net/wireless/rtl8187_dev.c | |||
@@ -131,7 +131,8 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
131 | struct rtl8187_tx_hdr *hdr; | 131 | struct rtl8187_tx_hdr *hdr; |
132 | struct rtl8187_tx_info *info; | 132 | struct rtl8187_tx_info *info; |
133 | struct urb *urb; | 133 | struct urb *urb; |
134 | u32 tmp; | 134 | __le16 rts_dur = 0; |
135 | u32 flags; | ||
135 | 136 | ||
136 | urb = usb_alloc_urb(0, GFP_ATOMIC); | 137 | urb = usb_alloc_urb(0, GFP_ATOMIC); |
137 | if (!urb) { | 138 | if (!urb) { |
@@ -139,24 +140,24 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
139 | return 0; | 140 | return 0; |
140 | } | 141 | } |
141 | 142 | ||
142 | hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr)); | 143 | flags = skb->len; |
143 | tmp = skb->len - sizeof(*hdr); | 144 | flags |= RTL8187_TX_FLAG_NO_ENCRYPT; |
144 | tmp |= RTL8187_TX_FLAG_NO_ENCRYPT; | 145 | flags |= control->rts_cts_rate << 19; |
145 | tmp |= control->rts_cts_rate << 19; | 146 | flags |= control->tx_rate << 24; |
146 | tmp |= control->tx_rate << 24; | 147 | if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb->data)) |
147 | if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb)) | 148 | flags |= RTL8187_TX_FLAG_MORE_FRAG; |
148 | tmp |= RTL8187_TX_FLAG_MORE_FRAG; | ||
149 | if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) { | 149 | if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) { |
150 | tmp |= RTL8187_TX_FLAG_RTS; | 150 | flags |= RTL8187_TX_FLAG_RTS; |
151 | hdr->rts_duration = | 151 | rts_dur = ieee80211_rts_duration(dev, priv->if_id, skb->len, control); |
152 | ieee80211_rts_duration(dev, priv->if_id, skb->len, control); | ||
153 | } | 152 | } |
154 | if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) | 153 | if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) |
155 | tmp |= RTL8187_TX_FLAG_CTS; | 154 | flags |= RTL8187_TX_FLAG_CTS; |
156 | hdr->flags = cpu_to_le32(tmp); | 155 | |
156 | hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr)); | ||
157 | hdr->flags = cpu_to_le32(flags); | ||
157 | hdr->len = 0; | 158 | hdr->len = 0; |
158 | tmp = control->retry_limit << 8; | 159 | hdr->rts_duration = rts_dur; |
159 | hdr->retry = cpu_to_le32(tmp); | 160 | hdr->retry = cpu_to_le32(control->retry_limit << 8); |
160 | 161 | ||
161 | info = (struct rtl8187_tx_info *)skb->cb; | 162 | info = (struct rtl8187_tx_info *)skb->cb; |
162 | info->control = kmemdup(control, sizeof(*control), GFP_ATOMIC); | 163 | info->control = kmemdup(control, sizeof(*control), GFP_ATOMIC); |
@@ -587,8 +588,6 @@ static void rtl8187_configure_filter(struct ieee80211_hw *dev, | |||
587 | 588 | ||
588 | *total_flags = 0; | 589 | *total_flags = 0; |
589 | 590 | ||
590 | if (changed_flags & FIF_PROMISC_IN_BSS) | ||
591 | priv->rx_conf ^= RTL818X_RX_CONF_NICMAC; | ||
592 | if (changed_flags & FIF_ALLMULTI) | 591 | if (changed_flags & FIF_ALLMULTI) |
593 | priv->rx_conf ^= RTL818X_RX_CONF_MULTICAST; | 592 | priv->rx_conf ^= RTL818X_RX_CONF_MULTICAST; |
594 | if (changed_flags & FIF_FCSFAIL) | 593 | if (changed_flags & FIF_FCSFAIL) |
@@ -601,8 +600,6 @@ static void rtl8187_configure_filter(struct ieee80211_hw *dev, | |||
601 | if (mc_count > 0) | 600 | if (mc_count > 0) |
602 | priv->rx_conf |= RTL818X_RX_CONF_MULTICAST; | 601 | priv->rx_conf |= RTL818X_RX_CONF_MULTICAST; |
603 | 602 | ||
604 | if (priv->rx_conf & RTL818X_RX_CONF_NICMAC) | ||
605 | *total_flags |= FIF_PROMISC_IN_BSS; | ||
606 | if (priv->rx_conf & RTL818X_RX_CONF_MULTICAST) | 603 | if (priv->rx_conf & RTL818X_RX_CONF_MULTICAST) |
607 | *total_flags |= FIF_ALLMULTI; | 604 | *total_flags |= FIF_ALLMULTI; |
608 | if (priv->rx_conf & RTL818X_RX_CONF_FCS) | 605 | if (priv->rx_conf & RTL818X_RX_CONF_FCS) |
diff --git a/drivers/net/wireless/zd1201.c b/drivers/net/wireless/zd1201.c index 935b144d9b5..d5c0c66188c 100644 --- a/drivers/net/wireless/zd1201.c +++ b/drivers/net/wireless/zd1201.c | |||
@@ -327,8 +327,8 @@ static void zd1201_usbrx(struct urb *urb) | |||
327 | memcpy(skb_put(skb, 6), &data[datalen-8], 6); | 327 | memcpy(skb_put(skb, 6), &data[datalen-8], 6); |
328 | memcpy(skb_put(skb, 2), &data[datalen-24], 2); | 328 | memcpy(skb_put(skb, 2), &data[datalen-24], 2); |
329 | memcpy(skb_put(skb, len), data, len); | 329 | memcpy(skb_put(skb, len), data, len); |
330 | skb->dev->last_rx = jiffies; | ||
331 | skb->protocol = eth_type_trans(skb, zd->dev); | 330 | skb->protocol = eth_type_trans(skb, zd->dev); |
331 | skb->dev->last_rx = jiffies; | ||
332 | zd->stats.rx_packets++; | 332 | zd->stats.rx_packets++; |
333 | zd->stats.rx_bytes += skb->len; | 333 | zd->stats.rx_bytes += skb->len; |
334 | netif_rx(skb); | 334 | netif_rx(skb); |
@@ -384,8 +384,8 @@ static void zd1201_usbrx(struct urb *urb) | |||
384 | memcpy(skb_put(skb, 2), &data[6], 2); | 384 | memcpy(skb_put(skb, 2), &data[6], 2); |
385 | memcpy(skb_put(skb, len), data+8, len); | 385 | memcpy(skb_put(skb, len), data+8, len); |
386 | } | 386 | } |
387 | skb->dev->last_rx = jiffies; | ||
388 | skb->protocol = eth_type_trans(skb, zd->dev); | 387 | skb->protocol = eth_type_trans(skb, zd->dev); |
388 | skb->dev->last_rx = jiffies; | ||
389 | zd->stats.rx_packets++; | 389 | zd->stats.rx_packets++; |
390 | zd->stats.rx_bytes += skb->len; | 390 | zd->stats.rx_bytes += skb->len; |
391 | netif_rx(skb); | 391 | netif_rx(skb); |
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index b0684f96576..c755b692381 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
@@ -1044,14 +1044,17 @@ error: | |||
1044 | static void disconnect(struct usb_interface *intf) | 1044 | static void disconnect(struct usb_interface *intf) |
1045 | { | 1045 | { |
1046 | struct net_device *netdev = zd_intf_to_netdev(intf); | 1046 | struct net_device *netdev = zd_intf_to_netdev(intf); |
1047 | struct zd_mac *mac = zd_netdev_mac(netdev); | 1047 | struct zd_mac *mac; |
1048 | struct zd_usb *usb = &mac->chip.usb; | 1048 | struct zd_usb *usb; |
1049 | 1049 | ||
1050 | /* Either something really bad happened, or we're just dealing with | 1050 | /* Either something really bad happened, or we're just dealing with |
1051 | * a DEVICE_INSTALLER. */ | 1051 | * a DEVICE_INSTALLER. */ |
1052 | if (netdev == NULL) | 1052 | if (netdev == NULL) |
1053 | return; | 1053 | return; |
1054 | 1054 | ||
1055 | mac = zd_netdev_mac(netdev); | ||
1056 | usb = &mac->chip.usb; | ||
1057 | |||
1055 | dev_dbg_f(zd_usb_dev(usb), "\n"); | 1058 | dev_dbg_f(zd_usb_dev(usb), "\n"); |
1056 | 1059 | ||
1057 | zd_netdev_disconnect(netdev); | 1060 | zd_netdev_disconnect(netdev); |
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 7fd505cc4f7..2a8fc431099 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c | |||
@@ -1526,7 +1526,7 @@ static int xennet_connect(struct net_device *dev) | |||
1526 | 1526 | ||
1527 | if (!feature_rx_copy) { | 1527 | if (!feature_rx_copy) { |
1528 | dev_info(&dev->dev, | 1528 | dev_info(&dev->dev, |
1529 | "backend does not support copying recieve path"); | 1529 | "backend does not support copying receive path\n"); |
1530 | return -ENODEV; | 1530 | return -ENODEV; |
1531 | } | 1531 | } |
1532 | 1532 | ||
diff --git a/drivers/of/platform.c b/drivers/of/platform.c index 864f09fd9f8..b47bb2d7476 100644 --- a/drivers/of/platform.c +++ b/drivers/of/platform.c | |||
@@ -12,6 +12,7 @@ | |||
12 | * | 12 | * |
13 | */ | 13 | */ |
14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
15 | #include <linux/module.h> | ||
15 | #include <linux/device.h> | 16 | #include <linux/device.h> |
16 | #include <linux/of_device.h> | 17 | #include <linux/of_device.h> |
17 | #include <linux/of_platform.h> | 18 | #include <linux/of_platform.h> |
@@ -94,3 +95,23 @@ int of_bus_type_init(struct bus_type *bus, const char *name) | |||
94 | bus->resume = of_platform_device_resume; | 95 | bus->resume = of_platform_device_resume; |
95 | return bus_register(bus); | 96 | return bus_register(bus); |
96 | } | 97 | } |
98 | |||
99 | int of_register_driver(struct of_platform_driver *drv, struct bus_type *bus) | ||
100 | { | ||
101 | /* initialize common driver fields */ | ||
102 | if (!drv->driver.name) | ||
103 | drv->driver.name = drv->name; | ||
104 | if (!drv->driver.owner) | ||
105 | drv->driver.owner = drv->owner; | ||
106 | drv->driver.bus = bus; | ||
107 | |||
108 | /* register with core */ | ||
109 | return driver_register(&drv->driver); | ||
110 | } | ||
111 | EXPORT_SYMBOL(of_register_driver); | ||
112 | |||
113 | void of_unregister_driver(struct of_platform_driver *drv) | ||
114 | { | ||
115 | driver_unregister(&drv->driver); | ||
116 | } | ||
117 | EXPORT_SYMBOL(of_unregister_driver); | ||
diff --git a/drivers/parport/daisy.c b/drivers/parport/daisy.c index ff9f3445353..5bbff2028f8 100644 --- a/drivers/parport/daisy.c +++ b/drivers/parport/daisy.c | |||
@@ -275,35 +275,6 @@ void parport_close(struct pardevice *dev) | |||
275 | parport_unregister_device(dev); | 275 | parport_unregister_device(dev); |
276 | } | 276 | } |
277 | 277 | ||
278 | /** | ||
279 | * parport_device_num - convert device coordinates | ||
280 | * @parport: parallel port number | ||
281 | * @mux: multiplexor port number (-1 for no multiplexor) | ||
282 | * @daisy: daisy chain address (-1 for no daisy chain address) | ||
283 | * | ||
284 | * This tries to locate a device on the given parallel port, | ||
285 | * multiplexor port and daisy chain address, and returns its | ||
286 | * device number or %-ENXIO if no device with those coordinates | ||
287 | * exists. | ||
288 | **/ | ||
289 | |||
290 | int parport_device_num(int parport, int mux, int daisy) | ||
291 | { | ||
292 | int res = -ENXIO; | ||
293 | struct daisydev *dev; | ||
294 | |||
295 | spin_lock(&topology_lock); | ||
296 | dev = topology; | ||
297 | while (dev && dev->port->portnum != parport && | ||
298 | dev->port->muxport != mux && dev->daisy != daisy) | ||
299 | dev = dev->next; | ||
300 | if (dev) | ||
301 | res = dev->devnum; | ||
302 | spin_unlock(&topology_lock); | ||
303 | |||
304 | return res; | ||
305 | } | ||
306 | |||
307 | /* Send a daisy-chain-style CPP command packet. */ | 278 | /* Send a daisy-chain-style CPP command packet. */ |
308 | static int cpp_daisy(struct parport *port, int cmd) | 279 | static int cpp_daisy(struct parport *port, int cmd) |
309 | { | 280 | { |
diff --git a/drivers/parport/procfs.c b/drivers/parport/procfs.c index bdbdab9285c..ed82e41210d 100644 --- a/drivers/parport/procfs.c +++ b/drivers/parport/procfs.c | |||
@@ -237,7 +237,7 @@ static int do_hardware_modes (ctl_table *table, int write, | |||
237 | #define PARPORT_PARPORT_DIR(CHILD) { .ctl_name = DEV_PARPORT, .procname = "parport", \ | 237 | #define PARPORT_PARPORT_DIR(CHILD) { .ctl_name = DEV_PARPORT, .procname = "parport", \ |
238 | .mode = 0555, .child = CHILD } | 238 | .mode = 0555, .child = CHILD } |
239 | #define PARPORT_DEV_DIR(CHILD) { .ctl_name = CTL_DEV, .procname = "dev", .mode = 0555, .child = CHILD } | 239 | #define PARPORT_DEV_DIR(CHILD) { .ctl_name = CTL_DEV, .procname = "dev", .mode = 0555, .child = CHILD } |
240 | #define PARPORT_DEVICES_ROOT_DIR { .ctl_name = DEV_PARPORT_DEVICES, .procname = "devices", \ | 240 | #define PARPORT_DEVICES_ROOT_DIR { .procname = "devices", \ |
241 | .mode = 0555, .child = NULL } | 241 | .mode = 0555, .child = NULL } |
242 | 242 | ||
243 | static const unsigned long parport_min_timeslice_value = | 243 | static const unsigned long parport_min_timeslice_value = |
@@ -266,7 +266,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
266 | .sysctl_header = NULL, | 266 | .sysctl_header = NULL, |
267 | { | 267 | { |
268 | { | 268 | { |
269 | .ctl_name = DEV_PARPORT_SPINTIME, | ||
270 | .procname = "spintime", | 269 | .procname = "spintime", |
271 | .data = NULL, | 270 | .data = NULL, |
272 | .maxlen = sizeof(int), | 271 | .maxlen = sizeof(int), |
@@ -276,7 +275,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
276 | .extra2 = (void*) &parport_max_spintime_value | 275 | .extra2 = (void*) &parport_max_spintime_value |
277 | }, | 276 | }, |
278 | { | 277 | { |
279 | .ctl_name = DEV_PARPORT_BASE_ADDR, | ||
280 | .procname = "base-addr", | 278 | .procname = "base-addr", |
281 | .data = NULL, | 279 | .data = NULL, |
282 | .maxlen = 0, | 280 | .maxlen = 0, |
@@ -284,7 +282,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
284 | .proc_handler = &do_hardware_base_addr | 282 | .proc_handler = &do_hardware_base_addr |
285 | }, | 283 | }, |
286 | { | 284 | { |
287 | .ctl_name = DEV_PARPORT_IRQ, | ||
288 | .procname = "irq", | 285 | .procname = "irq", |
289 | .data = NULL, | 286 | .data = NULL, |
290 | .maxlen = 0, | 287 | .maxlen = 0, |
@@ -292,7 +289,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
292 | .proc_handler = &do_hardware_irq | 289 | .proc_handler = &do_hardware_irq |
293 | }, | 290 | }, |
294 | { | 291 | { |
295 | .ctl_name = DEV_PARPORT_DMA, | ||
296 | .procname = "dma", | 292 | .procname = "dma", |
297 | .data = NULL, | 293 | .data = NULL, |
298 | .maxlen = 0, | 294 | .maxlen = 0, |
@@ -300,7 +296,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
300 | .proc_handler = &do_hardware_dma | 296 | .proc_handler = &do_hardware_dma |
301 | }, | 297 | }, |
302 | { | 298 | { |
303 | .ctl_name = DEV_PARPORT_MODES, | ||
304 | .procname = "modes", | 299 | .procname = "modes", |
305 | .data = NULL, | 300 | .data = NULL, |
306 | .maxlen = 0, | 301 | .maxlen = 0, |
@@ -310,7 +305,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
310 | PARPORT_DEVICES_ROOT_DIR, | 305 | PARPORT_DEVICES_ROOT_DIR, |
311 | #ifdef CONFIG_PARPORT_1284 | 306 | #ifdef CONFIG_PARPORT_1284 |
312 | { | 307 | { |
313 | .ctl_name = DEV_PARPORT_AUTOPROBE, | ||
314 | .procname = "autoprobe", | 308 | .procname = "autoprobe", |
315 | .data = NULL, | 309 | .data = NULL, |
316 | .maxlen = 0, | 310 | .maxlen = 0, |
@@ -318,7 +312,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
318 | .proc_handler = &do_autoprobe | 312 | .proc_handler = &do_autoprobe |
319 | }, | 313 | }, |
320 | { | 314 | { |
321 | .ctl_name = DEV_PARPORT_AUTOPROBE + 1, | ||
322 | .procname = "autoprobe0", | 315 | .procname = "autoprobe0", |
323 | .data = NULL, | 316 | .data = NULL, |
324 | .maxlen = 0, | 317 | .maxlen = 0, |
@@ -326,7 +319,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
326 | .proc_handler = &do_autoprobe | 319 | .proc_handler = &do_autoprobe |
327 | }, | 320 | }, |
328 | { | 321 | { |
329 | .ctl_name = DEV_PARPORT_AUTOPROBE + 2, | ||
330 | .procname = "autoprobe1", | 322 | .procname = "autoprobe1", |
331 | .data = NULL, | 323 | .data = NULL, |
332 | .maxlen = 0, | 324 | .maxlen = 0, |
@@ -334,7 +326,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
334 | .proc_handler = &do_autoprobe | 326 | .proc_handler = &do_autoprobe |
335 | }, | 327 | }, |
336 | { | 328 | { |
337 | .ctl_name = DEV_PARPORT_AUTOPROBE + 3, | ||
338 | .procname = "autoprobe2", | 329 | .procname = "autoprobe2", |
339 | .data = NULL, | 330 | .data = NULL, |
340 | .maxlen = 0, | 331 | .maxlen = 0, |
@@ -342,7 +333,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
342 | .proc_handler = &do_autoprobe | 333 | .proc_handler = &do_autoprobe |
343 | }, | 334 | }, |
344 | { | 335 | { |
345 | .ctl_name = DEV_PARPORT_AUTOPROBE + 4, | ||
346 | .procname = "autoprobe3", | 336 | .procname = "autoprobe3", |
347 | .data = NULL, | 337 | .data = NULL, |
348 | .maxlen = 0, | 338 | .maxlen = 0, |
@@ -354,7 +344,6 @@ static const struct parport_sysctl_table parport_sysctl_template = { | |||
354 | }, | 344 | }, |
355 | { | 345 | { |
356 | { | 346 | { |
357 | .ctl_name = DEV_PARPORT_DEVICES_ACTIVE, | ||
358 | .procname = "active", | 347 | .procname = "active", |
359 | .data = NULL, | 348 | .data = NULL, |
360 | .maxlen = 0, | 349 | .maxlen = 0, |
@@ -393,7 +382,6 @@ parport_device_sysctl_template = { | |||
393 | .sysctl_header = NULL, | 382 | .sysctl_header = NULL, |
394 | { | 383 | { |
395 | { | 384 | { |
396 | .ctl_name = DEV_PARPORT_DEVICE_TIMESLICE, | ||
397 | .procname = "timeslice", | 385 | .procname = "timeslice", |
398 | .data = NULL, | 386 | .data = NULL, |
399 | .maxlen = sizeof(int), | 387 | .maxlen = sizeof(int), |
@@ -449,7 +437,6 @@ parport_default_sysctl_table = { | |||
449 | .sysctl_header = NULL, | 437 | .sysctl_header = NULL, |
450 | { | 438 | { |
451 | { | 439 | { |
452 | .ctl_name = DEV_PARPORT_DEFAULT_TIMESLICE, | ||
453 | .procname = "timeslice", | 440 | .procname = "timeslice", |
454 | .data = &parport_default_timeslice, | 441 | .data = &parport_default_timeslice, |
455 | .maxlen = sizeof(parport_default_timeslice), | 442 | .maxlen = sizeof(parport_default_timeslice), |
@@ -459,7 +446,6 @@ parport_default_sysctl_table = { | |||
459 | .extra2 = (void*) &parport_max_timeslice_value | 446 | .extra2 = (void*) &parport_max_timeslice_value |
460 | }, | 447 | }, |
461 | { | 448 | { |
462 | .ctl_name = DEV_PARPORT_DEFAULT_SPINTIME, | ||
463 | .procname = "spintime", | 449 | .procname = "spintime", |
464 | .data = &parport_default_spintime, | 450 | .data = &parport_default_spintime, |
465 | .maxlen = sizeof(parport_default_spintime), | 451 | .maxlen = sizeof(parport_default_spintime), |
@@ -502,7 +488,7 @@ int parport_proc_register(struct parport *port) | |||
502 | 488 | ||
503 | t->device_dir[0].extra1 = port; | 489 | t->device_dir[0].extra1 = port; |
504 | 490 | ||
505 | for (i = 0; i < 8; i++) | 491 | for (i = 0; i < 5; i++) |
506 | t->vars[i].extra1 = port; | 492 | t->vars[i].extra1 = port; |
507 | 493 | ||
508 | t->vars[0].data = &port->spintime; | 494 | t->vars[0].data = &port->spintime; |
@@ -512,7 +498,7 @@ int parport_proc_register(struct parport *port) | |||
512 | t->vars[6 + i].extra2 = &port->probe_info[i]; | 498 | t->vars[6 + i].extra2 = &port->probe_info[i]; |
513 | 499 | ||
514 | t->port_dir[0].procname = port->name; | 500 | t->port_dir[0].procname = port->name; |
515 | t->port_dir[0].ctl_name = port->number + 1; /* nb 0 isn't legal here */ | 501 | t->port_dir[0].ctl_name = 0; |
516 | 502 | ||
517 | t->port_dir[0].child = t->vars; | 503 | t->port_dir[0].child = t->vars; |
518 | t->parport_dir[0].child = t->port_dir; | 504 | t->parport_dir[0].child = t->port_dir; |
@@ -551,26 +537,12 @@ int parport_device_proc_register(struct pardevice *device) | |||
551 | t->dev_dir[0].child = t->parport_dir; | 537 | t->dev_dir[0].child = t->parport_dir; |
552 | t->parport_dir[0].child = t->port_dir; | 538 | t->parport_dir[0].child = t->port_dir; |
553 | t->port_dir[0].procname = port->name; | 539 | t->port_dir[0].procname = port->name; |
554 | t->port_dir[0].ctl_name = port->number + 1; /* nb 0 isn't legal here */ | 540 | t->port_dir[0].ctl_name = 0; |
555 | t->port_dir[0].child = t->devices_root_dir; | 541 | t->port_dir[0].child = t->devices_root_dir; |
556 | t->devices_root_dir[0].child = t->device_dir; | 542 | t->devices_root_dir[0].child = t->device_dir; |
557 | 543 | ||
558 | #ifdef CONFIG_PARPORT_1284 | 544 | t->device_dir[0].ctl_name = 0; |
559 | |||
560 | t->device_dir[0].ctl_name = | ||
561 | parport_device_num(port->number, port->muxport, | ||
562 | device->daisy) | ||
563 | + 1; /* nb 0 isn't legal here */ | ||
564 | |||
565 | #else /* No IEEE 1284 support */ | ||
566 | |||
567 | /* parport_device_num isn't available. */ | ||
568 | t->device_dir[0].ctl_name = 1; | ||
569 | |||
570 | #endif /* IEEE 1284 support or not */ | ||
571 | |||
572 | t->device_dir[0].procname = device->name; | 545 | t->device_dir[0].procname = device->name; |
573 | t->device_dir[0].extra1 = device; | ||
574 | t->device_dir[0].child = t->vars; | 546 | t->device_dir[0].child = t->vars; |
575 | t->vars[0].data = &device->timeslice; | 547 | t->vars[0].data = &device->timeslice; |
576 | 548 | ||
diff --git a/drivers/pcmcia/m32r_pcc.c b/drivers/pcmcia/m32r_pcc.c index 67d28ee80f2..c5e0d89c3ec 100644 --- a/drivers/pcmcia/m32r_pcc.c +++ b/drivers/pcmcia/m32r_pcc.c | |||
@@ -22,9 +22,9 @@ | |||
22 | #include <linux/workqueue.h> | 22 | #include <linux/workqueue.h> |
23 | #include <linux/interrupt.h> | 23 | #include <linux/interrupt.h> |
24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
25 | #include <linux/bitops.h> | ||
25 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
26 | #include <asm/io.h> | 27 | #include <asm/io.h> |
27 | #include <asm/bitops.h> | ||
28 | #include <asm/system.h> | 28 | #include <asm/system.h> |
29 | #include <asm/addrspace.h> | 29 | #include <asm/addrspace.h> |
30 | 30 | ||
diff --git a/drivers/pcmcia/m8xx_pcmcia.c b/drivers/pcmcia/m8xx_pcmcia.c index b0198549846..d182760f035 100644 --- a/drivers/pcmcia/m8xx_pcmcia.c +++ b/drivers/pcmcia/m8xx_pcmcia.c | |||
@@ -48,9 +48,9 @@ | |||
48 | #include <linux/delay.h> | 48 | #include <linux/delay.h> |
49 | #include <linux/interrupt.h> | 49 | #include <linux/interrupt.h> |
50 | #include <linux/fsl_devices.h> | 50 | #include <linux/fsl_devices.h> |
51 | #include <linux/bitops.h> | ||
51 | 52 | ||
52 | #include <asm/io.h> | 53 | #include <asm/io.h> |
53 | #include <asm/bitops.h> | ||
54 | #include <asm/system.h> | 54 | #include <asm/system.h> |
55 | #include <asm/time.h> | 55 | #include <asm/time.h> |
56 | #include <asm/mpc8xx.h> | 56 | #include <asm/mpc8xx.h> |
diff --git a/drivers/power/ds2760_battery.c b/drivers/power/ds2760_battery.c index be7021ee361..bdb9b7285b3 100644 --- a/drivers/power/ds2760_battery.c +++ b/drivers/power/ds2760_battery.c | |||
@@ -366,7 +366,7 @@ static int ds2760_battery_probe(struct platform_device *pdev) | |||
366 | 366 | ||
367 | retval = power_supply_register(&pdev->dev, &di->bat); | 367 | retval = power_supply_register(&pdev->dev, &di->bat); |
368 | if (retval) { | 368 | if (retval) { |
369 | dev_err(di->dev, "failed to register battery"); | 369 | dev_err(di->dev, "failed to register battery\n"); |
370 | goto batt_failed; | 370 | goto batt_failed; |
371 | } | 371 | } |
372 | 372 | ||
diff --git a/drivers/ps3/ps3av.c b/drivers/ps3/ps3av.c index 397f4ce849d..87b3493d88e 100644 --- a/drivers/ps3/ps3av.c +++ b/drivers/ps3/ps3av.c | |||
@@ -729,7 +729,7 @@ static void ps3av_monitor_info_dump(const struct ps3av_pkt_av_get_monitor_info * | |||
729 | 729 | ||
730 | static const struct ps3av_monitor_quirk { | 730 | static const struct ps3av_monitor_quirk { |
731 | const char *monitor_name; | 731 | const char *monitor_name; |
732 | u32 clear_60, clear_50, clear_vesa; | 732 | u32 clear_60; |
733 | } ps3av_monitor_quirks[] = { | 733 | } ps3av_monitor_quirks[] = { |
734 | { | 734 | { |
735 | .monitor_name = "DELL 2007WFP", | 735 | .monitor_name = "DELL 2007WFP", |
@@ -757,10 +757,6 @@ static void ps3av_fixup_monitor_info(struct ps3av_info_monitor *info) | |||
757 | quirk->monitor_name); | 757 | quirk->monitor_name); |
758 | info->res_60.res_bits &= ~quirk->clear_60; | 758 | info->res_60.res_bits &= ~quirk->clear_60; |
759 | info->res_60.native &= ~quirk->clear_60; | 759 | info->res_60.native &= ~quirk->clear_60; |
760 | info->res_50.res_bits &= ~quirk->clear_50; | ||
761 | info->res_50.native &= ~quirk->clear_50; | ||
762 | info->res_vesa.res_bits &= ~quirk->clear_vesa; | ||
763 | info->res_vesa.native &= ~quirk->clear_vesa; | ||
764 | break; | 760 | break; |
765 | } | 761 | } |
766 | } | 762 | } |
diff --git a/drivers/ps3/ps3stor_lib.c b/drivers/ps3/ps3stor_lib.c index 3a9824e3b25..55955f16ad9 100644 --- a/drivers/ps3/ps3stor_lib.c +++ b/drivers/ps3/ps3stor_lib.c | |||
@@ -66,7 +66,7 @@ static int ps3stor_probe_access(struct ps3_storage_device *dev) | |||
66 | if (n > 1) | 66 | if (n > 1) |
67 | dev_info(&dev->sbd.core, | 67 | dev_info(&dev->sbd.core, |
68 | "%s:%u: %lu accessible regions found. Only the first " | 68 | "%s:%u: %lu accessible regions found. Only the first " |
69 | "one will be used", | 69 | "one will be used\n", |
70 | __func__, __LINE__, n); | 70 | __func__, __LINE__, n); |
71 | dev->region_idx = __ffs(dev->accessible_regions); | 71 | dev->region_idx = __ffs(dev->accessible_regions); |
72 | dev_info(&dev->sbd.core, | 72 | dev_info(&dev->sbd.core, |
diff --git a/drivers/ps3/vuart.c b/drivers/ps3/vuart.c index bea25a1391e..9dea585ef80 100644 --- a/drivers/ps3/vuart.c +++ b/drivers/ps3/vuart.c | |||
@@ -22,11 +22,11 @@ | |||
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | #include <linux/interrupt.h> | 23 | #include <linux/interrupt.h> |
24 | #include <linux/workqueue.h> | 24 | #include <linux/workqueue.h> |
25 | #include <linux/bitops.h> | ||
25 | #include <asm/ps3.h> | 26 | #include <asm/ps3.h> |
26 | 27 | ||
27 | #include <asm/firmware.h> | 28 | #include <asm/firmware.h> |
28 | #include <asm/lv1call.h> | 29 | #include <asm/lv1call.h> |
29 | #include <asm/bitops.h> | ||
30 | 30 | ||
31 | #include "vuart.h" | 31 | #include "vuart.h" |
32 | 32 | ||
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 6420a90a4a9..cbde770eb12 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig | |||
@@ -240,7 +240,7 @@ config RTC_DRV_TWL92330 | |||
240 | depends on MENELAUS | 240 | depends on MENELAUS |
241 | help | 241 | help |
242 | If you say yes here you get support for the RTC on the | 242 | If you say yes here you get support for the RTC on the |
243 | TWL92330 "Menelaus" power mangement chip, used with OMAP2 | 243 | TWL92330 "Menelaus" power management chip, used with OMAP2 |
244 | platforms. The support is integrated with the rest of | 244 | platforms. The support is integrated with the rest of |
245 | the Menelaus driver; it's not separate module. | 245 | the Menelaus driver; it's not separate module. |
246 | 246 | ||
diff --git a/drivers/rtc/rtc-pl031.c b/drivers/rtc/rtc-pl031.c index e4bf68ca96f..2fd49edcc71 100644 --- a/drivers/rtc/rtc-pl031.c +++ b/drivers/rtc/rtc-pl031.c | |||
@@ -21,11 +21,11 @@ | |||
21 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
22 | #include <linux/string.h> | 22 | #include <linux/string.h> |
23 | #include <linux/pm.h> | 23 | #include <linux/pm.h> |
24 | #include <linux/bitops.h> | ||
24 | 25 | ||
25 | #include <linux/amba/bus.h> | 26 | #include <linux/amba/bus.h> |
26 | 27 | ||
27 | #include <asm/io.h> | 28 | #include <asm/io.h> |
28 | #include <asm/bitops.h> | ||
29 | #include <asm/hardware.h> | 29 | #include <asm/hardware.h> |
30 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
31 | #include <asm/rtc.h> | 31 | #include <asm/rtc.h> |
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c index 0918b787c4d..6f1e9a9804b 100644 --- a/drivers/rtc/rtc-sa1100.c +++ b/drivers/rtc/rtc-sa1100.c | |||
@@ -29,8 +29,8 @@ | |||
29 | #include <linux/interrupt.h> | 29 | #include <linux/interrupt.h> |
30 | #include <linux/string.h> | 30 | #include <linux/string.h> |
31 | #include <linux/pm.h> | 31 | #include <linux/pm.h> |
32 | #include <linux/bitops.h> | ||
32 | 33 | ||
33 | #include <asm/bitops.h> | ||
34 | #include <asm/hardware.h> | 34 | #include <asm/hardware.h> |
35 | #include <asm/irq.h> | 35 | #include <asm/irq.h> |
36 | #include <asm/rtc.h> | 36 | #include <asm/rtc.h> |
diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c index 6cad0841f3c..2ae0e8304d3 100644 --- a/drivers/rtc/rtc-sysfs.c +++ b/drivers/rtc/rtc-sysfs.c | |||
@@ -200,9 +200,8 @@ void rtc_sysfs_add_device(struct rtc_device *rtc) | |||
200 | 200 | ||
201 | err = device_create_file(&rtc->dev, &dev_attr_wakealarm); | 201 | err = device_create_file(&rtc->dev, &dev_attr_wakealarm); |
202 | if (err) | 202 | if (err) |
203 | dev_err(rtc->dev.parent, "failed to create " | 203 | dev_err(rtc->dev.parent, |
204 | "alarm attribute, %d", | 204 | "failed to create alarm attribute, %d\n", err); |
205 | err); | ||
206 | } | 205 | } |
207 | 206 | ||
208 | void rtc_sysfs_del_device(struct rtc_device *rtc) | 207 | void rtc_sysfs_del_device(struct rtc_device *rtc) |
diff --git a/drivers/s390/block/dasd_3990_erp.c b/drivers/s390/block/dasd_3990_erp.c index 8b9d68f6e01..5b7385e430e 100644 --- a/drivers/s390/block/dasd_3990_erp.c +++ b/drivers/s390/block/dasd_3990_erp.c | |||
@@ -40,7 +40,7 @@ struct DCTL_data { | |||
40 | * | 40 | * |
41 | * Each bit configuration leading to an action code 2 (Exit with | 41 | * Each bit configuration leading to an action code 2 (Exit with |
42 | * programming error or unusual condition indication) | 42 | * programming error or unusual condition indication) |
43 | * are handled as fatal error´s. | 43 | * are handled as fatal errors. |
44 | * | 44 | * |
45 | * All other configurations are handled as recoverable errors. | 45 | * All other configurations are handled as recoverable errors. |
46 | * | 46 | * |
@@ -2001,7 +2001,7 @@ dasd_3990_erp_compound_code(struct dasd_ccw_req * erp, char *sense) | |||
2001 | switch (sense[28]) { | 2001 | switch (sense[28]) { |
2002 | case 0x17: | 2002 | case 0x17: |
2003 | /* issue a Diagnostic Control command with an | 2003 | /* issue a Diagnostic Control command with an |
2004 | * Inhibit Write subcommand and controler modifier */ | 2004 | * Inhibit Write subcommand and controller modifier */ |
2005 | erp = dasd_3990_erp_DCTL(erp, 0x20); | 2005 | erp = dasd_3990_erp_DCTL(erp, 0x20); |
2006 | break; | 2006 | break; |
2007 | 2007 | ||
diff --git a/drivers/s390/char/sclp_cpi.c b/drivers/s390/char/sclp_cpi.c index 29fe2a5ec2f..82a13d9fdfe 100644 --- a/drivers/s390/char/sclp_cpi.c +++ b/drivers/s390/char/sclp_cpi.c | |||
@@ -157,7 +157,7 @@ cpi_prepare_req(void) | |||
157 | sclp_ascebc_str(evb->system_name, CPI_LENGTH_SYSTEM_NAME); | 157 | sclp_ascebc_str(evb->system_name, CPI_LENGTH_SYSTEM_NAME); |
158 | EBC_TOUPPER(evb->system_name, CPI_LENGTH_SYSTEM_NAME); | 158 | EBC_TOUPPER(evb->system_name, CPI_LENGTH_SYSTEM_NAME); |
159 | 159 | ||
160 | /* set sytem level */ | 160 | /* set system level */ |
161 | evb->system_level = LINUX_VERSION_CODE; | 161 | evb->system_level = LINUX_VERSION_CODE; |
162 | 162 | ||
163 | /* set sysplex name */ | 163 | /* set sysplex name */ |
diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c index b960f66843e..725b0dd1426 100644 --- a/drivers/s390/cio/cmf.c +++ b/drivers/s390/cio/cmf.c | |||
@@ -158,7 +158,7 @@ static inline u64 time_to_avg_nsec(u32 value, u32 count) | |||
158 | if (count == 0) | 158 | if (count == 0) |
159 | return 0; | 159 | return 0; |
160 | 160 | ||
161 | /* value comes in units of 128 µsec */ | 161 | /* value comes in units of 128 µsec */ |
162 | ret = time_to_nsec(value); | 162 | ret = time_to_nsec(value); |
163 | do_div(ret, count); | 163 | do_div(ret, count); |
164 | 164 | ||
diff --git a/drivers/s390/cio/idset.c b/drivers/s390/cio/idset.c index 16ea828e99f..ef7bc0a125e 100644 --- a/drivers/s390/cio/idset.c +++ b/drivers/s390/cio/idset.c | |||
@@ -6,7 +6,7 @@ | |||
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <linux/slab.h> | 8 | #include <linux/slab.h> |
9 | #include <asm/bitops.h> | 9 | #include <linux/bitops.h> |
10 | #include "idset.h" | 10 | #include "idset.h" |
11 | #include "css.h" | 11 | #include "css.h" |
12 | 12 | ||
diff --git a/drivers/s390/net/claw.c b/drivers/s390/net/claw.c index 399695f7b1a..3561982749e 100644 --- a/drivers/s390/net/claw.c +++ b/drivers/s390/net/claw.c | |||
@@ -59,13 +59,13 @@ | |||
59 | * 1.15 Changed for 2.6 Kernel No longer compiles on 2.4 or lower | 59 | * 1.15 Changed for 2.6 Kernel No longer compiles on 2.4 or lower |
60 | * 1.25 Added Packing support | 60 | * 1.25 Added Packing support |
61 | */ | 61 | */ |
62 | #include <asm/bitops.h> | ||
63 | #include <asm/ccwdev.h> | 62 | #include <asm/ccwdev.h> |
64 | #include <asm/ccwgroup.h> | 63 | #include <asm/ccwgroup.h> |
65 | #include <asm/debug.h> | 64 | #include <asm/debug.h> |
66 | #include <asm/idals.h> | 65 | #include <asm/idals.h> |
67 | #include <asm/io.h> | 66 | #include <asm/io.h> |
68 | 67 | ||
68 | #include <linux/bitops.h> | ||
69 | #include <linux/ctype.h> | 69 | #include <linux/ctype.h> |
70 | #include <linux/delay.h> | 70 | #include <linux/delay.h> |
71 | #include <linux/errno.h> | 71 | #include <linux/errno.h> |
diff --git a/drivers/s390/net/ctcmain.c b/drivers/s390/net/ctcmain.c index 44993723373..6bf3ebbe985 100644 --- a/drivers/s390/net/ctcmain.c +++ b/drivers/s390/net/ctcmain.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation | 4 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation |
5 | * Author(s): Fritz Elfert (elfert@de.ibm.com, felfert@millenux.com) | 5 | * Author(s): Fritz Elfert (elfert@de.ibm.com, felfert@millenux.com) |
6 | * Fixes by : Jochen Röhrig (roehrig@de.ibm.com) | 6 | * Fixes by : Jochen Röhrig (roehrig@de.ibm.com) |
7 | * Arnaldo Carvalho de Melo <acme@conectiva.com.br> | 7 | * Arnaldo Carvalho de Melo <acme@conectiva.com.br> |
8 | Peter Tiedemann (ptiedem@de.ibm.com) | 8 | Peter Tiedemann (ptiedem@de.ibm.com) |
9 | * Driver Model stuff by : Cornelia Huck <cornelia.huck@de.ibm.com> | 9 | * Driver Model stuff by : Cornelia Huck <cornelia.huck@de.ibm.com> |
@@ -19,7 +19,7 @@ | |||
19 | * Dieter Wellerdiek (wel@de.ibm.com) | 19 | * Dieter Wellerdiek (wel@de.ibm.com) |
20 | * Martin Schwidefsky (schwidefsky@de.ibm.com) | 20 | * Martin Schwidefsky (schwidefsky@de.ibm.com) |
21 | * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) | 21 | * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) |
22 | * Jochen Röhrig (roehrig@de.ibm.com) | 22 | * Jochen Röhrig (roehrig@de.ibm.com) |
23 | * | 23 | * |
24 | * This program is free software; you can redistribute it and/or modify | 24 | * This program is free software; you can redistribute it and/or modify |
25 | * it under the terms of the GNU General Public License as published by | 25 | * it under the terms of the GNU General Public License as published by |
@@ -885,7 +885,7 @@ ch_action_firstio(fsm_instance * fi, int event, void *arg) | |||
885 | } | 885 | } |
886 | 886 | ||
887 | /** | 887 | /** |
888 | * Don´t setup a timer for receiving the initial RX frame | 888 | * Don't setup a timer for receiving the initial RX frame |
889 | * if in compatibility mode, since VM TCP delays the initial | 889 | * if in compatibility mode, since VM TCP delays the initial |
890 | * frame until it has some data to send. | 890 | * frame until it has some data to send. |
891 | */ | 891 | */ |
@@ -905,10 +905,10 @@ ch_action_firstio(fsm_instance * fi, int event, void *arg) | |||
905 | ccw_check_return_code(ch, rc, "init IO"); | 905 | ccw_check_return_code(ch, rc, "init IO"); |
906 | } | 906 | } |
907 | /** | 907 | /** |
908 | * If in compatibility mode since we don´t setup a timer, we | 908 | * If in compatibility mode since we don't setup a timer, we |
909 | * also signal RX channel up immediately. This enables us | 909 | * also signal RX channel up immediately. This enables us |
910 | * to send packets early which in turn usually triggers some | 910 | * to send packets early which in turn usually triggers some |
911 | * reply from VM TCP which brings up the RX channel to it´s | 911 | * reply from VM TCP which brings up the RX channel to it's |
912 | * final state. | 912 | * final state. |
913 | */ | 913 | */ |
914 | if ((CHANNEL_DIRECTION(ch->flags) == READ) && | 914 | if ((CHANNEL_DIRECTION(ch->flags) == READ) && |
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index a2d08c9ba3c..ff999ff0b62 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c | |||
@@ -6643,7 +6643,8 @@ qeth_netdev_init(struct net_device *dev) | |||
6643 | dev->vlan_rx_kill_vid = qeth_vlan_rx_kill_vid; | 6643 | dev->vlan_rx_kill_vid = qeth_vlan_rx_kill_vid; |
6644 | dev->vlan_rx_add_vid = qeth_vlan_rx_add_vid; | 6644 | dev->vlan_rx_add_vid = qeth_vlan_rx_add_vid; |
6645 | #endif | 6645 | #endif |
6646 | dev->header_ops = &qeth_null_ops; | 6646 | if (qeth_get_netdev_flags(card) & IFF_NOARP) |
6647 | dev->header_ops = &qeth_null_ops; | ||
6647 | 6648 | ||
6648 | #ifdef CONFIG_QETH_IPV6 | 6649 | #ifdef CONFIG_QETH_IPV6 |
6649 | /*IPv6 address autoconfiguration stuff*/ | 6650 | /*IPv6 address autoconfiguration stuff*/ |
diff --git a/drivers/sbus/char/vfc.h b/drivers/sbus/char/vfc.h index 63941a259b9..f1aa1389ea4 100644 --- a/drivers/sbus/char/vfc.h +++ b/drivers/sbus/char/vfc.h | |||
@@ -126,7 +126,7 @@ struct vfc_dev { | |||
126 | volatile struct vfc_regs __iomem *regs; | 126 | volatile struct vfc_regs __iomem *regs; |
127 | struct vfc_regs *phys_regs; | 127 | struct vfc_regs *phys_regs; |
128 | unsigned int control_reg; | 128 | unsigned int control_reg; |
129 | struct semaphore device_lock_sem; | 129 | struct mutex device_lock_mtx; |
130 | int instance; | 130 | int instance; |
131 | int busy; | 131 | int busy; |
132 | unsigned long which_io; | 132 | unsigned long which_io; |
diff --git a/drivers/sbus/char/vfc_dev.c b/drivers/sbus/char/vfc_dev.c index 9269f7fbd36..d4f8fcded51 100644 --- a/drivers/sbus/char/vfc_dev.c +++ b/drivers/sbus/char/vfc_dev.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/fs.h> | 22 | #include <linux/fs.h> |
23 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
24 | #include <linux/spinlock.h> | 24 | #include <linux/spinlock.h> |
25 | #include <linux/mutex.h> | ||
25 | #include <linux/mm.h> | 26 | #include <linux/mm.h> |
26 | 27 | ||
27 | #include <asm/openprom.h> | 28 | #include <asm/openprom.h> |
@@ -54,12 +55,12 @@ static unsigned char saa9051_init_array[VFC_SAA9051_NR] = { | |||
54 | 55 | ||
55 | void vfc_lock_device(struct vfc_dev *dev) | 56 | void vfc_lock_device(struct vfc_dev *dev) |
56 | { | 57 | { |
57 | down(&dev->device_lock_sem); | 58 | mutex_lock(&dev->device_lock_mtx); |
58 | } | 59 | } |
59 | 60 | ||
60 | void vfc_unlock_device(struct vfc_dev *dev) | 61 | void vfc_unlock_device(struct vfc_dev *dev) |
61 | { | 62 | { |
62 | up(&dev->device_lock_sem); | 63 | mutex_unlock(&dev->device_lock_mtx); |
63 | } | 64 | } |
64 | 65 | ||
65 | 66 | ||
@@ -133,7 +134,7 @@ int init_vfc_hw(struct vfc_dev *dev) | |||
133 | int init_vfc_devstruct(struct vfc_dev *dev, int instance) | 134 | int init_vfc_devstruct(struct vfc_dev *dev, int instance) |
134 | { | 135 | { |
135 | dev->instance=instance; | 136 | dev->instance=instance; |
136 | init_MUTEX(&dev->device_lock_sem); | 137 | mutex_init(&dev->device_lock_mtx); |
137 | dev->control_reg=0; | 138 | dev->control_reg=0; |
138 | dev->busy=0; | 139 | dev->busy=0; |
139 | return 0; | 140 | return 0; |
diff --git a/drivers/scsi/FlashPoint.c b/drivers/scsi/FlashPoint.c index a7f916c0c9c..1c9078191d9 100644 --- a/drivers/scsi/FlashPoint.c +++ b/drivers/scsi/FlashPoint.c | |||
@@ -25,9 +25,6 @@ | |||
25 | 25 | ||
26 | #define FAILURE 0xFFFFFFFFL | 26 | #define FAILURE 0xFFFFFFFFL |
27 | 27 | ||
28 | #define BIT(x) ((unsigned char)(1<<(x))) /* single-bit mask in bit position x */ | ||
29 | #define BITW(x) ((unsigned short)(1<<(x))) /* single-bit mask in bit position x */ | ||
30 | |||
31 | struct sccb; | 28 | struct sccb; |
32 | typedef void (*CALL_BK_FN) (struct sccb *); | 29 | typedef void (*CALL_BK_FN) (struct sccb *); |
33 | 30 | ||
@@ -374,9 +371,9 @@ typedef struct SCCBscam_info { | |||
374 | #define SCAM_ENABLED BIT(2) | 371 | #define SCAM_ENABLED BIT(2) |
375 | #define SCAM_LEVEL2 BIT(3) | 372 | #define SCAM_LEVEL2 BIT(3) |
376 | 373 | ||
377 | #define RENEGO_ENA BITW(10) | 374 | #define RENEGO_ENA BIT(10) |
378 | #define CONNIO_ENA BITW(11) | 375 | #define CONNIO_ENA BIT(11) |
379 | #define GREEN_PC_ENA BITW(12) | 376 | #define GREEN_PC_ENA BIT(12) |
380 | 377 | ||
381 | #define AUTO_RATE_00 00 | 378 | #define AUTO_RATE_00 00 |
382 | #define AUTO_RATE_05 01 | 379 | #define AUTO_RATE_05 01 |
@@ -511,23 +508,23 @@ typedef struct SCCBscam_info { | |||
511 | 508 | ||
512 | #define hp_intena 0x40 | 509 | #define hp_intena 0x40 |
513 | 510 | ||
514 | #define RESET BITW(7) | 511 | #define RESET BIT(7) |
515 | #define PROG_HLT BITW(6) | 512 | #define PROG_HLT BIT(6) |
516 | #define PARITY BITW(5) | 513 | #define PARITY BIT(5) |
517 | #define FIFO BITW(4) | 514 | #define FIFO BIT(4) |
518 | #define SEL BITW(3) | 515 | #define SEL BIT(3) |
519 | #define SCAM_SEL BITW(2) | 516 | #define SCAM_SEL BIT(2) |
520 | #define RSEL BITW(1) | 517 | #define RSEL BIT(1) |
521 | #define TIMEOUT BITW(0) | 518 | #define TIMEOUT BIT(0) |
522 | #define BUS_FREE BITW(15) | 519 | #define BUS_FREE BIT(15) |
523 | #define XFER_CNT_0 BITW(14) | 520 | #define XFER_CNT_0 BIT(14) |
524 | #define PHASE BITW(13) | 521 | #define PHASE BIT(13) |
525 | #define IUNKWN BITW(12) | 522 | #define IUNKWN BIT(12) |
526 | #define ICMD_COMP BITW(11) | 523 | #define ICMD_COMP BIT(11) |
527 | #define ITICKLE BITW(10) | 524 | #define ITICKLE BIT(10) |
528 | #define IDO_STRT BITW(9) | 525 | #define IDO_STRT BIT(9) |
529 | #define ITAR_DISC BITW(8) | 526 | #define ITAR_DISC BIT(8) |
530 | #define AUTO_INT (BITW(12)+BITW(11)+BITW(10)+BITW(9)+BITW(8)) | 527 | #define AUTO_INT (BIT(12)+BIT(11)+BIT(10)+BIT(9)+BIT(8)) |
531 | #define CLR_ALL_INT 0xFFFF | 528 | #define CLR_ALL_INT 0xFFFF |
532 | #define CLR_ALL_INT_1 0xFF00 | 529 | #define CLR_ALL_INT_1 0xFF00 |
533 | 530 | ||
@@ -674,37 +671,37 @@ typedef struct SCCBscam_info { | |||
674 | #define BIOS_DATA_OFFSET 0x60 | 671 | #define BIOS_DATA_OFFSET 0x60 |
675 | #define BIOS_RELATIVE_CARD 0x64 | 672 | #define BIOS_RELATIVE_CARD 0x64 |
676 | 673 | ||
677 | #define AR3 (BITW(9) + BITW(8)) | 674 | #define AR3 (BIT(9) + BIT(8)) |
678 | #define SDATA BITW(10) | 675 | #define SDATA BIT(10) |
679 | 676 | ||
680 | #define CRD_OP BITW(11) /* Cmp Reg. w/ Data */ | 677 | #define CRD_OP BIT(11) /* Cmp Reg. w/ Data */ |
681 | 678 | ||
682 | #define CRR_OP BITW(12) /* Cmp Reg. w. Reg. */ | 679 | #define CRR_OP BIT(12) /* Cmp Reg. w. Reg. */ |
683 | 680 | ||
684 | #define CPE_OP (BITW(14)+BITW(11)) /* Cmp SCSI phs & Branch EQ */ | 681 | #define CPE_OP (BIT(14)+BIT(11)) /* Cmp SCSI phs & Branch EQ */ |
685 | 682 | ||
686 | #define CPN_OP (BITW(14)+BITW(12)) /* Cmp SCSI phs & Branch NOT EQ */ | 683 | #define CPN_OP (BIT(14)+BIT(12)) /* Cmp SCSI phs & Branch NOT EQ */ |
687 | 684 | ||
688 | #define ADATA_OUT 0x00 | 685 | #define ADATA_OUT 0x00 |
689 | #define ADATA_IN BITW(8) | 686 | #define ADATA_IN BIT(8) |
690 | #define ACOMMAND BITW(10) | 687 | #define ACOMMAND BIT(10) |
691 | #define ASTATUS (BITW(10)+BITW(8)) | 688 | #define ASTATUS (BIT(10)+BIT(8)) |
692 | #define AMSG_OUT (BITW(10)+BITW(9)) | 689 | #define AMSG_OUT (BIT(10)+BIT(9)) |
693 | #define AMSG_IN (BITW(10)+BITW(9)+BITW(8)) | 690 | #define AMSG_IN (BIT(10)+BIT(9)+BIT(8)) |
694 | 691 | ||
695 | #define BRH_OP BITW(13) /* Branch */ | 692 | #define BRH_OP BIT(13) /* Branch */ |
696 | 693 | ||
697 | #define ALWAYS 0x00 | 694 | #define ALWAYS 0x00 |
698 | #define EQUAL BITW(8) | 695 | #define EQUAL BIT(8) |
699 | #define NOT_EQ BITW(9) | 696 | #define NOT_EQ BIT(9) |
700 | 697 | ||
701 | #define TCB_OP (BITW(13)+BITW(11)) /* Test condition & branch */ | 698 | #define TCB_OP (BIT(13)+BIT(11)) /* Test condition & branch */ |
702 | 699 | ||
703 | #define FIFO_0 BITW(10) | 700 | #define FIFO_0 BIT(10) |
704 | 701 | ||
705 | #define MPM_OP BITW(15) /* Match phase and move data */ | 702 | #define MPM_OP BIT(15) /* Match phase and move data */ |
706 | 703 | ||
707 | #define MRR_OP BITW(14) /* Move DReg. to Reg. */ | 704 | #define MRR_OP BIT(14) /* Move DReg. to Reg. */ |
708 | 705 | ||
709 | #define S_IDREG (BIT(2)+BIT(1)+BIT(0)) | 706 | #define S_IDREG (BIT(2)+BIT(1)+BIT(0)) |
710 | 707 | ||
@@ -712,9 +709,9 @@ typedef struct SCCBscam_info { | |||
712 | #define D_AR1 BIT(0) | 709 | #define D_AR1 BIT(0) |
713 | #define D_BUCKET (BIT(2) + BIT(1) + BIT(0)) | 710 | #define D_BUCKET (BIT(2) + BIT(1) + BIT(0)) |
714 | 711 | ||
715 | #define RAT_OP (BITW(14)+BITW(13)+BITW(11)) | 712 | #define RAT_OP (BIT(14)+BIT(13)+BIT(11)) |
716 | 713 | ||
717 | #define SSI_OP (BITW(15)+BITW(11)) | 714 | #define SSI_OP (BIT(15)+BIT(11)) |
718 | 715 | ||
719 | #define SSI_ITAR_DISC (ITAR_DISC >> 8) | 716 | #define SSI_ITAR_DISC (ITAR_DISC >> 8) |
720 | #define SSI_IDO_STRT (IDO_STRT >> 8) | 717 | #define SSI_IDO_STRT (IDO_STRT >> 8) |
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index 30905cebefb..a5763c6e936 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig | |||
@@ -521,7 +521,7 @@ config SCSI_DPT_I2O | |||
521 | 521 | ||
522 | config SCSI_ADVANSYS | 522 | config SCSI_ADVANSYS |
523 | tristate "AdvanSys SCSI support" | 523 | tristate "AdvanSys SCSI support" |
524 | depends on SCSI | 524 | depends on SCSI && VIRT_TO_BUS |
525 | depends on ISA || EISA || PCI | 525 | depends on ISA || EISA || PCI |
526 | help | 526 | help |
527 | This is a driver for all SCSI host adapters manufactured by | 527 | This is a driver for all SCSI host adapters manufactured by |
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index 03b51025a8f..9abba8b90f7 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h | |||
@@ -1526,7 +1526,7 @@ struct aac_mntent { | |||
1526 | __le32 capacityhigh; | 1526 | __le32 capacityhigh; |
1527 | }; | 1527 | }; |
1528 | 1528 | ||
1529 | #define FSCS_NOTCLEAN 0x0001 /* fsck is neccessary before mounting */ | 1529 | #define FSCS_NOTCLEAN 0x0001 /* fsck is necessary before mounting */ |
1530 | #define FSCS_READONLY 0x0002 /* possible result of broken mirror */ | 1530 | #define FSCS_READONLY 0x0002 /* possible result of broken mirror */ |
1531 | #define FSCS_HIDDEN 0x0004 /* should be ignored - set during a clear */ | 1531 | #define FSCS_HIDDEN 0x0004 /* should be ignored - set during a clear */ |
1532 | 1532 | ||
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c index f08e71e0205..a58c265dc8a 100644 --- a/drivers/scsi/aha152x.c +++ b/drivers/scsi/aha152x.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* aha152x.c -- Adaptec AHA-152x driver | 1 | /* aha152x.c -- Adaptec AHA-152x driver |
2 | * Author: Jürgen E. Fischer, fischer@norbit.de | 2 | * Author: Jürgen E. Fischer, fischer@norbit.de |
3 | * Copyright 1993-2004 Jürgen E. Fischer | 3 | * Copyright 1993-2004 Jürgen E. Fischer |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms of the GNU General Public License as published by the | 6 | * under the terms of the GNU General Public License as published by the |
@@ -357,7 +357,7 @@ enum { | |||
357 | check_condition = 0x0800, /* requesting sense after CHECK CONDITION */ | 357 | check_condition = 0x0800, /* requesting sense after CHECK CONDITION */ |
358 | }; | 358 | }; |
359 | 359 | ||
360 | MODULE_AUTHOR("Jürgen Fischer"); | 360 | MODULE_AUTHOR("Jürgen Fischer"); |
361 | MODULE_DESCRIPTION(AHA152X_REVID); | 361 | MODULE_DESCRIPTION(AHA152X_REVID); |
362 | MODULE_LICENSE("GPL"); | 362 | MODULE_LICENSE("GPL"); |
363 | 363 | ||
diff --git a/drivers/scsi/aic7xxx/cam.h b/drivers/scsi/aic7xxx/cam.h index 26f17e3fc45..687aef6ef18 100644 --- a/drivers/scsi/aic7xxx/cam.h +++ b/drivers/scsi/aic7xxx/cam.h | |||
@@ -48,7 +48,7 @@ typedef enum { | |||
48 | CAM_REQ_ABORTED, /* CCB request aborted by the host */ | 48 | CAM_REQ_ABORTED, /* CCB request aborted by the host */ |
49 | CAM_UA_ABORT, /* Unable to abort CCB request */ | 49 | CAM_UA_ABORT, /* Unable to abort CCB request */ |
50 | CAM_REQ_CMP_ERR, /* CCB request completed with an error */ | 50 | CAM_REQ_CMP_ERR, /* CCB request completed with an error */ |
51 | CAM_BUSY, /* CAM subsytem is busy */ | 51 | CAM_BUSY, /* CAM subsystem is busy */ |
52 | CAM_REQ_INVALID, /* CCB request was invalid */ | 52 | CAM_REQ_INVALID, /* CCB request was invalid */ |
53 | CAM_PATH_INVALID, /* Supplied Path ID is invalid */ | 53 | CAM_PATH_INVALID, /* Supplied Path ID is invalid */ |
54 | CAM_SEL_TIMEOUT, /* Target Selection Timeout */ | 54 | CAM_SEL_TIMEOUT, /* Target Selection Timeout */ |
diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c index fd42d478920..a9def6e1d30 100644 --- a/drivers/scsi/dc395x.c +++ b/drivers/scsi/dc395x.c | |||
@@ -1808,12 +1808,12 @@ static irqreturn_t dc395x_interrupt(int irq, void *dev_id) | |||
1808 | irqreturn_t handled = IRQ_NONE; | 1808 | irqreturn_t handled = IRQ_NONE; |
1809 | 1809 | ||
1810 | /* | 1810 | /* |
1811 | * Check for pending interupt | 1811 | * Check for pending interrupt |
1812 | */ | 1812 | */ |
1813 | scsi_status = DC395x_read16(acb, TRM_S1040_SCSI_STATUS); | 1813 | scsi_status = DC395x_read16(acb, TRM_S1040_SCSI_STATUS); |
1814 | dma_status = DC395x_read8(acb, TRM_S1040_DMA_STATUS); | 1814 | dma_status = DC395x_read8(acb, TRM_S1040_DMA_STATUS); |
1815 | if (scsi_status & SCSIINTERRUPT) { | 1815 | if (scsi_status & SCSIINTERRUPT) { |
1816 | /* interupt pending - let's process it! */ | 1816 | /* interrupt pending - let's process it! */ |
1817 | dc395x_handle_interrupt(acb, scsi_status); | 1817 | dc395x_handle_interrupt(acb, scsi_status); |
1818 | handled = IRQ_HANDLED; | 1818 | handled = IRQ_HANDLED; |
1819 | } | 1819 | } |
@@ -4579,7 +4579,7 @@ static void adapter_uninit_chip(struct AdapterCtlBlk *acb) | |||
4579 | if (acb->config & HCC_SCSI_RESET) | 4579 | if (acb->config & HCC_SCSI_RESET) |
4580 | reset_scsi_bus(acb); | 4580 | reset_scsi_bus(acb); |
4581 | 4581 | ||
4582 | /* clear any pending interupt state */ | 4582 | /* clear any pending interrupt state */ |
4583 | DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS); | 4583 | DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS); |
4584 | } | 4584 | } |
4585 | 4585 | ||
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c index fa7ba64483f..252d1806467 100644 --- a/drivers/scsi/ide-scsi.c +++ b/drivers/scsi/ide-scsi.c | |||
@@ -47,9 +47,9 @@ | |||
47 | #include <linux/scatterlist.h> | 47 | #include <linux/scatterlist.h> |
48 | #include <linux/delay.h> | 48 | #include <linux/delay.h> |
49 | #include <linux/mutex.h> | 49 | #include <linux/mutex.h> |
50 | #include <linux/bitops.h> | ||
50 | 51 | ||
51 | #include <asm/io.h> | 52 | #include <asm/io.h> |
52 | #include <asm/bitops.h> | ||
53 | #include <asm/uaccess.h> | 53 | #include <asm/uaccess.h> |
54 | 54 | ||
55 | #include <scsi/scsi.h> | 55 | #include <scsi/scsi.h> |
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index b41dfb53902..c316a0bcae6 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
@@ -5134,6 +5134,7 @@ static void ipr_build_ata_ioadl(struct ipr_cmnd *ipr_cmd, | |||
5134 | u32 ioadl_flags = 0; | 5134 | u32 ioadl_flags = 0; |
5135 | struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; | 5135 | struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; |
5136 | struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; | 5136 | struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; |
5137 | struct ipr_ioadl_desc *last_ioadl = NULL; | ||
5137 | int len = qc->nbytes + qc->pad_len; | 5138 | int len = qc->nbytes + qc->pad_len; |
5138 | struct scatterlist *sg; | 5139 | struct scatterlist *sg; |
5139 | 5140 | ||
@@ -5156,11 +5157,13 @@ static void ipr_build_ata_ioadl(struct ipr_cmnd *ipr_cmd, | |||
5156 | ata_for_each_sg(sg, qc) { | 5157 | ata_for_each_sg(sg, qc) { |
5157 | ioadl->flags_and_data_len = cpu_to_be32(ioadl_flags | sg_dma_len(sg)); | 5158 | ioadl->flags_and_data_len = cpu_to_be32(ioadl_flags | sg_dma_len(sg)); |
5158 | ioadl->address = cpu_to_be32(sg_dma_address(sg)); | 5159 | ioadl->address = cpu_to_be32(sg_dma_address(sg)); |
5159 | if (ata_sg_is_last(sg, qc)) | 5160 | |
5160 | ioadl->flags_and_data_len |= cpu_to_be32(IPR_IOADL_FLAGS_LAST); | 5161 | last_ioadl = ioadl; |
5161 | else | 5162 | ioadl++; |
5162 | ioadl++; | ||
5163 | } | 5163 | } |
5164 | |||
5165 | if (likely(last_ioadl)) | ||
5166 | last_ioadl->flags_and_data_len |= cpu_to_be32(IPR_IOADL_FLAGS_LAST); | ||
5164 | } | 5167 | } |
5165 | 5168 | ||
5166 | /** | 5169 | /** |
diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c index 7ef0afc3cd6..5f3a0d7b18d 100644 --- a/drivers/scsi/libsas/sas_discover.c +++ b/drivers/scsi/libsas/sas_discover.c | |||
@@ -285,7 +285,7 @@ static void sas_discover_domain(struct work_struct *work) | |||
285 | dev = port->port_dev; | 285 | dev = port->port_dev; |
286 | 286 | ||
287 | SAS_DPRINTK("DOING DISCOVERY on port %d, pid:%d\n", port->id, | 287 | SAS_DPRINTK("DOING DISCOVERY on port %d, pid:%d\n", port->id, |
288 | current->pid); | 288 | task_pid_nr(current)); |
289 | 289 | ||
290 | switch (dev->dev_type) { | 290 | switch (dev->dev_type) { |
291 | case SAS_END_DEV: | 291 | case SAS_END_DEV: |
@@ -320,7 +320,7 @@ static void sas_discover_domain(struct work_struct *work) | |||
320 | } | 320 | } |
321 | 321 | ||
322 | SAS_DPRINTK("DONE DISCOVERY on port %d, pid:%d, result:%d\n", port->id, | 322 | SAS_DPRINTK("DONE DISCOVERY on port %d, pid:%d, result:%d\n", port->id, |
323 | current->pid, error); | 323 | task_pid_nr(current), error); |
324 | } | 324 | } |
325 | 325 | ||
326 | static void sas_revalidate_domain(struct work_struct *work) | 326 | static void sas_revalidate_domain(struct work_struct *work) |
@@ -334,12 +334,12 @@ static void sas_revalidate_domain(struct work_struct *work) | |||
334 | &port->disc.pending); | 334 | &port->disc.pending); |
335 | 335 | ||
336 | SAS_DPRINTK("REVALIDATING DOMAIN on port %d, pid:%d\n", port->id, | 336 | SAS_DPRINTK("REVALIDATING DOMAIN on port %d, pid:%d\n", port->id, |
337 | current->pid); | 337 | task_pid_nr(current)); |
338 | if (port->port_dev) | 338 | if (port->port_dev) |
339 | res = sas_ex_revalidate_domain(port->port_dev); | 339 | res = sas_ex_revalidate_domain(port->port_dev); |
340 | 340 | ||
341 | SAS_DPRINTK("done REVALIDATING DOMAIN on port %d, pid:%d, res 0x%x\n", | 341 | SAS_DPRINTK("done REVALIDATING DOMAIN on port %d, pid:%d, res 0x%x\n", |
342 | port->id, current->pid, res); | 342 | port->id, task_pid_nr(current), res); |
343 | } | 343 | } |
344 | 344 | ||
345 | /* ---------- Events ---------- */ | 345 | /* ---------- Events ---------- */ |
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c index e5337ad4121..ce348c5c706 100644 --- a/drivers/scsi/lpfc/lpfc_sli.c +++ b/drivers/scsi/lpfc/lpfc_sli.c | |||
@@ -1243,7 +1243,8 @@ void lpfc_sli_poll_fcp_ring(struct lpfc_hba *phba) | |||
1243 | memset(adaptermsg, 0, LPFC_MAX_ADPTMSG); | 1243 | memset(adaptermsg, 0, LPFC_MAX_ADPTMSG); |
1244 | memcpy(&adaptermsg[0], (uint8_t *) irsp, | 1244 | memcpy(&adaptermsg[0], (uint8_t *) irsp, |
1245 | MAX_MSG_DATA); | 1245 | MAX_MSG_DATA); |
1246 | dev_warn(&((phba->pcidev)->dev), "lpfc%d: %s", | 1246 | dev_warn(&((phba->pcidev)->dev), |
1247 | "lpfc%d: %s\n", | ||
1247 | phba->brd_no, adaptermsg); | 1248 | phba->brd_no, adaptermsg); |
1248 | } else { | 1249 | } else { |
1249 | /* Unknown IOCB command */ | 1250 | /* Unknown IOCB command */ |
@@ -1430,7 +1431,8 @@ lpfc_sli_handle_fast_ring_event(struct lpfc_hba *phba, | |||
1430 | memset(adaptermsg, 0, LPFC_MAX_ADPTMSG); | 1431 | memset(adaptermsg, 0, LPFC_MAX_ADPTMSG); |
1431 | memcpy(&adaptermsg[0], (uint8_t *) irsp, | 1432 | memcpy(&adaptermsg[0], (uint8_t *) irsp, |
1432 | MAX_MSG_DATA); | 1433 | MAX_MSG_DATA); |
1433 | dev_warn(&((phba->pcidev)->dev), "lpfc%d: %s", | 1434 | dev_warn(&((phba->pcidev)->dev), |
1435 | "lpfc%d: %s\n", | ||
1434 | phba->brd_no, adaptermsg); | 1436 | phba->brd_no, adaptermsg); |
1435 | } else { | 1437 | } else { |
1436 | /* Unknown IOCB command */ | 1438 | /* Unknown IOCB command */ |
@@ -1681,7 +1683,7 @@ lpfc_sli_handle_slow_ring_event(struct lpfc_hba *phba, | |||
1681 | memcpy(&adaptermsg[0], (uint8_t *) irsp, | 1683 | memcpy(&adaptermsg[0], (uint8_t *) irsp, |
1682 | MAX_MSG_DATA); | 1684 | MAX_MSG_DATA); |
1683 | dev_warn(&((phba->pcidev)->dev), | 1685 | dev_warn(&((phba->pcidev)->dev), |
1684 | "lpfc%d: %s", | 1686 | "lpfc%d: %s\n", |
1685 | phba->brd_no, adaptermsg); | 1687 | phba->brd_no, adaptermsg); |
1686 | } else { | 1688 | } else { |
1687 | /* Unknown IOCB command */ | 1689 | /* Unknown IOCB command */ |
diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/megaraid_mbox.c index e4e4c6a39ed..78779209ac8 100644 --- a/drivers/scsi/megaraid/megaraid_mbox.c +++ b/drivers/scsi/megaraid/megaraid_mbox.c | |||
@@ -427,7 +427,7 @@ megaraid_exit(void) | |||
427 | * @id : pci device id of the class of controllers | 427 | * @id : pci device id of the class of controllers |
428 | * | 428 | * |
429 | * This routine should be called whenever a new adapter is detected by the | 429 | * This routine should be called whenever a new adapter is detected by the |
430 | * PCI hotplug susbsytem. | 430 | * PCI hotplug susbsystem. |
431 | */ | 431 | */ |
432 | static int __devinit | 432 | static int __devinit |
433 | megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | 433 | megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) |
diff --git a/drivers/scsi/nsp32.h b/drivers/scsi/nsp32.h index a976e8193d1..6715ecb3bfc 100644 --- a/drivers/scsi/nsp32.h +++ b/drivers/scsi/nsp32.h | |||
@@ -69,11 +69,6 @@ typedef u32 u32_le; | |||
69 | typedef u16 u16_le; | 69 | typedef u16 u16_le; |
70 | 70 | ||
71 | /* | 71 | /* |
72 | * MACRO | ||
73 | */ | ||
74 | #define BIT(x) (1UL << (x)) | ||
75 | |||
76 | /* | ||
77 | * BASIC Definitions | 72 | * BASIC Definitions |
78 | */ | 73 | */ |
79 | #ifndef TRUE | 74 | #ifndef TRUE |
diff --git a/drivers/scsi/pcmcia/nsp_cs.h b/drivers/scsi/pcmcia/nsp_cs.h index b7f0fa24641..98397559c53 100644 --- a/drivers/scsi/pcmcia/nsp_cs.h +++ b/drivers/scsi/pcmcia/nsp_cs.h | |||
@@ -24,7 +24,6 @@ | |||
24 | /************************************ | 24 | /************************************ |
25 | * Some useful macros... | 25 | * Some useful macros... |
26 | */ | 26 | */ |
27 | #define BIT(x) (1L << (x)) | ||
28 | 27 | ||
29 | /* SCSI initiator must be ID 7 */ | 28 | /* SCSI initiator must be ID 7 */ |
30 | #define NSP_INITIATOR_ID 7 | 29 | #define NSP_INITIATOR_ID 7 |
diff --git a/drivers/scsi/qla4xxx/ql4_fw.h b/drivers/scsi/qla4xxx/ql4_fw.h index 9bb3d1d2a92..fe415ec8565 100644 --- a/drivers/scsi/qla4xxx/ql4_fw.h +++ b/drivers/scsi/qla4xxx/ql4_fw.h | |||
@@ -671,7 +671,7 @@ struct continuation_t1_entry { | |||
671 | #define ET_CONTINUE ET_CONT_T1 | 671 | #define ET_CONTINUE ET_CONT_T1 |
672 | 672 | ||
673 | /* Marker entry structure*/ | 673 | /* Marker entry structure*/ |
674 | struct marker_entry { | 674 | struct qla4_marker_entry { |
675 | struct qla4_header hdr; /* 00-03 */ | 675 | struct qla4_header hdr; /* 00-03 */ |
676 | 676 | ||
677 | uint32_t system_defined; /* 04-07 */ | 677 | uint32_t system_defined; /* 04-07 */ |
diff --git a/drivers/scsi/qla4xxx/ql4_init.c b/drivers/scsi/qla4xxx/ql4_init.c index 1e29f51d596..d692c713416 100644 --- a/drivers/scsi/qla4xxx/ql4_init.c +++ b/drivers/scsi/qla4xxx/ql4_init.c | |||
@@ -1006,7 +1006,7 @@ int ql4xxx_lock_drvr_wait(struct scsi_qla_host *a) | |||
1006 | * qla4xxx_start_firmware - starts qla4xxx firmware | 1006 | * qla4xxx_start_firmware - starts qla4xxx firmware |
1007 | * @ha: Pointer to host adapter structure. | 1007 | * @ha: Pointer to host adapter structure. |
1008 | * | 1008 | * |
1009 | * This routine performs the neccessary steps to start the firmware for | 1009 | * This routine performs the necessary steps to start the firmware for |
1010 | * the QLA4010 adapter. | 1010 | * the QLA4010 adapter. |
1011 | **/ | 1011 | **/ |
1012 | static int qla4xxx_start_firmware(struct scsi_qla_host *ha) | 1012 | static int qla4xxx_start_firmware(struct scsi_qla_host *ha) |
diff --git a/drivers/scsi/qla4xxx/ql4_iocb.c b/drivers/scsi/qla4xxx/ql4_iocb.c index 5006ecb3ef5..e4461b5d767 100644 --- a/drivers/scsi/qla4xxx/ql4_iocb.c +++ b/drivers/scsi/qla4xxx/ql4_iocb.c | |||
@@ -69,7 +69,7 @@ static int qla4xxx_get_req_pkt(struct scsi_qla_host *ha, | |||
69 | static int qla4xxx_send_marker_iocb(struct scsi_qla_host *ha, | 69 | static int qla4xxx_send_marker_iocb(struct scsi_qla_host *ha, |
70 | struct ddb_entry *ddb_entry, int lun) | 70 | struct ddb_entry *ddb_entry, int lun) |
71 | { | 71 | { |
72 | struct marker_entry *marker_entry; | 72 | struct qla4_marker_entry *marker_entry; |
73 | unsigned long flags = 0; | 73 | unsigned long flags = 0; |
74 | uint8_t status = QLA_SUCCESS; | 74 | uint8_t status = QLA_SUCCESS; |
75 | 75 | ||
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 03b68d4f3bd..89460d27c68 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c | |||
@@ -1286,7 +1286,7 @@ static int __devinit qla4xxx_probe_adapter(struct pci_dev *pdev, | |||
1286 | 1286 | ||
1287 | ret = scsi_init_shared_tag_map(host, MAX_SRBS); | 1287 | ret = scsi_init_shared_tag_map(host, MAX_SRBS); |
1288 | if (ret) { | 1288 | if (ret) { |
1289 | dev_warn(&ha->pdev->dev, "scsi_init_shared_tag_map failed"); | 1289 | dev_warn(&ha->pdev->dev, "scsi_init_shared_tag_map failed\n"); |
1290 | goto probe_failed; | 1290 | goto probe_failed; |
1291 | } | 1291 | } |
1292 | 1292 | ||
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 69f542c4923..a69b155f39a 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
@@ -676,7 +676,7 @@ static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo) | |||
676 | * success as well). Returns a negated errno value in case of error. | 676 | * success as well). Returns a negated errno value in case of error. |
677 | * | 677 | * |
678 | * Note: most ioctls are forward onto the block subsystem or further | 678 | * Note: most ioctls are forward onto the block subsystem or further |
679 | * down in the scsi subsytem. | 679 | * down in the scsi subsystem. |
680 | **/ | 680 | **/ |
681 | static int sd_ioctl(struct inode * inode, struct file * filp, | 681 | static int sd_ioctl(struct inode * inode, struct file * filp, |
682 | unsigned int cmd, unsigned long arg) | 682 | unsigned int cmd, unsigned long arg) |
diff --git a/drivers/scsi/sun3_NCR5380.c b/drivers/scsi/sun3_NCR5380.c index dc15a22105f..4aafe89b557 100644 --- a/drivers/scsi/sun3_NCR5380.c +++ b/drivers/scsi/sun3_NCR5380.c | |||
@@ -1596,7 +1596,7 @@ static int NCR5380_select(struct Scsi_Host *instance, struct scsi_cmnd *cmd, | |||
1596 | * IO while SEL is true. But again, there are some disks out the in the | 1596 | * IO while SEL is true. But again, there are some disks out the in the |
1597 | * world that do that nevertheless. (Somebody claimed that this announces | 1597 | * world that do that nevertheless. (Somebody claimed that this announces |
1598 | * reselection capability of the target.) So we better skip that test and | 1598 | * reselection capability of the target.) So we better skip that test and |
1599 | * only wait for BSY... (Famous german words: Der Klügere gibt nach :-) | 1599 | * only wait for BSY... (Famous german words: Der Klügere gibt nach :-) |
1600 | */ | 1600 | */ |
1601 | 1601 | ||
1602 | while (time_before(jiffies, timeout) && !(NCR5380_read(STATUS_REG) & | 1602 | while (time_before(jiffies, timeout) && !(NCR5380_read(STATUS_REG) & |
diff --git a/drivers/scsi/sym53c8xx_2/sym_fw2.h b/drivers/scsi/sym53c8xx_2/sym_fw2.h index 6e5b952312e..ae1fb179b88 100644 --- a/drivers/scsi/sym53c8xx_2/sym_fw2.h +++ b/drivers/scsi/sym53c8xx_2/sym_fw2.h | |||
@@ -1781,7 +1781,7 @@ static struct SYM_FWB_SCR SYM_FWB_SCR = { | |||
1781 | * While testing with bogus QUANTUM drives, the C1010 | 1781 | * While testing with bogus QUANTUM drives, the C1010 |
1782 | * sometimes raised a spurious phase mismatch with | 1782 | * sometimes raised a spurious phase mismatch with |
1783 | * WSR and the CHMOV(1) triggered another PM. | 1783 | * WSR and the CHMOV(1) triggered another PM. |
1784 | * Waiting explicitely for the PHASE seemed to avoid | 1784 | * Waiting explicitly for the PHASE seemed to avoid |
1785 | * the nested phase mismatch. Btw, this didn't happen | 1785 | * the nested phase mismatch. Btw, this didn't happen |
1786 | * using my IBM drives. | 1786 | * using my IBM drives. |
1787 | */ | 1787 | */ |
diff --git a/drivers/scsi/wd33c93.h b/drivers/scsi/wd33c93.h index 61ffb860dac..00123f2383d 100644 --- a/drivers/scsi/wd33c93.h +++ b/drivers/scsi/wd33c93.h | |||
@@ -155,7 +155,7 @@ | |||
155 | #define WD33C93_FS_12_15 OWNID_FS_12 | 155 | #define WD33C93_FS_12_15 OWNID_FS_12 |
156 | #define WD33C93_FS_16_20 OWNID_FS_16 | 156 | #define WD33C93_FS_16_20 OWNID_FS_16 |
157 | 157 | ||
158 | /* pass input-clock explicitely. accepted mhz values are 8-10,12-20 */ | 158 | /* pass input-clock explicitly. accepted mhz values are 8-10,12-20 */ |
159 | #define WD33C93_FS_MHZ(mhz) (mhz) | 159 | #define WD33C93_FS_MHZ(mhz) (mhz) |
160 | 160 | ||
161 | /* Control register */ | 161 | /* Control register */ |
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index d6ae38e55d0..87665d7df6f 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig | |||
@@ -62,11 +62,11 @@ config SERIAL_8250_CONSOLE | |||
62 | kernel will automatically use the first serial line, /dev/ttyS0, as | 62 | kernel will automatically use the first serial line, /dev/ttyS0, as |
63 | system console. | 63 | system console. |
64 | 64 | ||
65 | you can set that using a kernel command line option such as | 65 | You can set that using a kernel command line option such as |
66 | "console=uart8250,io,0x3f8,9600n8" | 66 | "console=uart8250,io,0x3f8,9600n8" |
67 | "console=uart8250,mmio,0xff5e0000,115200n8". | 67 | "console=uart8250,mmio,0xff5e0000,115200n8". |
68 | and it will switch to normal serial console when correponding port is | 68 | and it will switch to normal serial console when the corresponding |
69 | ready. | 69 | port is ready. |
70 | "earlycon=uart8250,io,0x3f8,9600n8" | 70 | "earlycon=uart8250,io,0x3f8,9600n8" |
71 | "earlycon=uart8250,mmio,0xff5e0000,115200n8". | 71 | "earlycon=uart8250,mmio,0xff5e0000,115200n8". |
72 | it will not only setup early console. | 72 | it will not only setup early console. |
diff --git a/drivers/serial/amba-pl011.c b/drivers/serial/amba-pl011.c index 72229df9dc1..40604a09292 100644 --- a/drivers/serial/amba-pl011.c +++ b/drivers/serial/amba-pl011.c | |||
@@ -263,15 +263,15 @@ static unsigned int pl01x_get_mctrl(struct uart_port *port) | |||
263 | unsigned int result = 0; | 263 | unsigned int result = 0; |
264 | unsigned int status = readw(uap->port.membase + UART01x_FR); | 264 | unsigned int status = readw(uap->port.membase + UART01x_FR); |
265 | 265 | ||
266 | #define BIT(uartbit, tiocmbit) \ | 266 | #define TIOCMBIT(uartbit, tiocmbit) \ |
267 | if (status & uartbit) \ | 267 | if (status & uartbit) \ |
268 | result |= tiocmbit | 268 | result |= tiocmbit |
269 | 269 | ||
270 | BIT(UART01x_FR_DCD, TIOCM_CAR); | 270 | TIOCMBIT(UART01x_FR_DCD, TIOCM_CAR); |
271 | BIT(UART01x_FR_DSR, TIOCM_DSR); | 271 | TIOCMBIT(UART01x_FR_DSR, TIOCM_DSR); |
272 | BIT(UART01x_FR_CTS, TIOCM_CTS); | 272 | TIOCMBIT(UART01x_FR_CTS, TIOCM_CTS); |
273 | BIT(UART011_FR_RI, TIOCM_RNG); | 273 | TIOCMBIT(UART011_FR_RI, TIOCM_RNG); |
274 | #undef BIT | 274 | #undef TIOCMBIT |
275 | return result; | 275 | return result; |
276 | } | 276 | } |
277 | 277 | ||
@@ -282,18 +282,18 @@ static void pl011_set_mctrl(struct uart_port *port, unsigned int mctrl) | |||
282 | 282 | ||
283 | cr = readw(uap->port.membase + UART011_CR); | 283 | cr = readw(uap->port.membase + UART011_CR); |
284 | 284 | ||
285 | #define BIT(tiocmbit, uartbit) \ | 285 | #define TIOCMBIT(tiocmbit, uartbit) \ |
286 | if (mctrl & tiocmbit) \ | 286 | if (mctrl & tiocmbit) \ |
287 | cr |= uartbit; \ | 287 | cr |= uartbit; \ |
288 | else \ | 288 | else \ |
289 | cr &= ~uartbit | 289 | cr &= ~uartbit |
290 | 290 | ||
291 | BIT(TIOCM_RTS, UART011_CR_RTS); | 291 | TIOCMBIT(TIOCM_RTS, UART011_CR_RTS); |
292 | BIT(TIOCM_DTR, UART011_CR_DTR); | 292 | TIOCMBIT(TIOCM_DTR, UART011_CR_DTR); |
293 | BIT(TIOCM_OUT1, UART011_CR_OUT1); | 293 | TIOCMBIT(TIOCM_OUT1, UART011_CR_OUT1); |
294 | BIT(TIOCM_OUT2, UART011_CR_OUT2); | 294 | TIOCMBIT(TIOCM_OUT2, UART011_CR_OUT2); |
295 | BIT(TIOCM_LOOP, UART011_CR_LBE); | 295 | TIOCMBIT(TIOCM_LOOP, UART011_CR_LBE); |
296 | #undef BIT | 296 | #undef TIOCMBIT |
297 | 297 | ||
298 | writew(cr, uap->port.membase + UART011_CR); | 298 | writew(cr, uap->port.membase + UART011_CR); |
299 | } | 299 | } |
diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c index 7e8724d3571..f523cdf4b02 100644 --- a/drivers/serial/crisv10.c +++ b/drivers/serial/crisv10.c | |||
@@ -442,11 +442,11 @@ static char *serial_version = "$Revision: 1.25 $"; | |||
442 | #include <asm/uaccess.h> | 442 | #include <asm/uaccess.h> |
443 | #include <linux/kernel.h> | 443 | #include <linux/kernel.h> |
444 | #include <linux/mutex.h> | 444 | #include <linux/mutex.h> |
445 | #include <linux/bitops.h> | ||
445 | 446 | ||
446 | #include <asm/io.h> | 447 | #include <asm/io.h> |
447 | #include <asm/irq.h> | 448 | #include <asm/irq.h> |
448 | #include <asm/system.h> | 449 | #include <asm/system.h> |
449 | #include <asm/bitops.h> | ||
450 | #include <linux/delay.h> | 450 | #include <linux/delay.h> |
451 | 451 | ||
452 | #include <asm/arch/svinto.h> | 452 | #include <asm/arch/svinto.h> |
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c index 3f26c4b2f32..e773c8e1496 100644 --- a/drivers/serial/s3c2410.c +++ b/drivers/serial/s3c2410.c | |||
@@ -20,8 +20,8 @@ | |||
20 | * - S3C2410 and S3C2440 serial support | 20 | * - S3C2410 and S3C2440 serial support |
21 | * - Power Management support | 21 | * - Power Management support |
22 | * - Fix console via IrDA devices | 22 | * - Fix console via IrDA devices |
23 | * - SysReq (Herbert Pötzl) | 23 | * - SysReq (Herbert Pötzl) |
24 | * - Break character handling (Herbert Pötzl) | 24 | * - Break character handling (Herbert Pötzl) |
25 | * - spin-lock initialisation (Dimitry Andric) | 25 | * - spin-lock initialisation (Dimitry Andric) |
26 | * - added clock control | 26 | * - added clock control |
27 | * - updated init code to use platform_device info | 27 | * - updated init code to use platform_device info |
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c index 68aa4da0186..103189095c8 100644 --- a/drivers/serial/serial_core.c +++ b/drivers/serial/serial_core.c | |||
@@ -1959,12 +1959,11 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *port) | |||
1959 | 1959 | ||
1960 | mutex_lock(&state->mutex); | 1960 | mutex_lock(&state->mutex); |
1961 | 1961 | ||
1962 | #ifdef CONFIG_DISABLE_CONSOLE_SUSPEND | 1962 | if (!console_suspend_enabled && uart_console(port)) { |
1963 | if (uart_console(port)) { | 1963 | /* we're going to avoid suspending serial console */ |
1964 | mutex_unlock(&state->mutex); | 1964 | mutex_unlock(&state->mutex); |
1965 | return 0; | 1965 | return 0; |
1966 | } | 1966 | } |
1967 | #endif | ||
1968 | 1967 | ||
1969 | tty_dev = device_find_child(port->dev, &match, serial_match_port); | 1968 | tty_dev = device_find_child(port->dev, &match, serial_match_port); |
1970 | if (device_may_wakeup(tty_dev)) { | 1969 | if (device_may_wakeup(tty_dev)) { |
@@ -2016,12 +2015,11 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *port) | |||
2016 | 2015 | ||
2017 | mutex_lock(&state->mutex); | 2016 | mutex_lock(&state->mutex); |
2018 | 2017 | ||
2019 | #ifdef CONFIG_DISABLE_CONSOLE_SUSPEND | 2018 | if (!console_suspend_enabled && uart_console(port)) { |
2020 | if (uart_console(port)) { | 2019 | /* no need to resume serial console, it wasn't suspended */ |
2021 | mutex_unlock(&state->mutex); | 2020 | mutex_unlock(&state->mutex); |
2022 | return 0; | 2021 | return 0; |
2023 | } | 2022 | } |
2024 | #endif | ||
2025 | 2023 | ||
2026 | if (!port->suspended) { | 2024 | if (!port->suspended) { |
2027 | disable_irq_wake(port->irq); | 2025 | disable_irq_wake(port->irq); |
diff --git a/drivers/spi/mpc52xx_psc_spi.c b/drivers/spi/mpc52xx_psc_spi.c index e9aba932f21..7051e6c5edc 100644 --- a/drivers/spi/mpc52xx_psc_spi.c +++ b/drivers/spi/mpc52xx_psc_spi.c | |||
@@ -181,7 +181,7 @@ static int mpc52xx_psc_spi_transfer_rxtx(struct spi_device *spi, | |||
181 | } | 181 | } |
182 | 182 | ||
183 | 183 | ||
184 | /* enable interupts and wait for wake up | 184 | /* enable interrupts and wait for wake up |
185 | * if just one byte is expected the Rx FIFO genererates no | 185 | * if just one byte is expected the Rx FIFO genererates no |
186 | * FFULL interrupt, so activate the RxRDY interrupt | 186 | * FFULL interrupt, so activate the RxRDY interrupt |
187 | */ | 187 | */ |
diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c index 6cb71d74738..2ef11bb70b2 100644 --- a/drivers/spi/spi_bfin5xx.c +++ b/drivers/spi/spi_bfin5xx.c | |||
@@ -1070,7 +1070,7 @@ static int setup(struct spi_device *spi) | |||
1070 | return -ENODEV; | 1070 | return -ENODEV; |
1071 | } | 1071 | } |
1072 | 1072 | ||
1073 | dev_dbg(&spi->dev, "setup spi chip %s, width is %d, dma is %d,", | 1073 | dev_dbg(&spi->dev, "setup spi chip %s, width is %d, dma is %d\n", |
1074 | spi->modalias, chip->width, chip->enable_dma); | 1074 | spi->modalias, chip->width, chip->enable_dma); |
1075 | dev_dbg(&spi->dev, "ctl_reg is 0x%x, flag_reg is 0x%x\n", | 1075 | dev_dbg(&spi->dev, "ctl_reg is 0x%x, flag_reg is 0x%x\n", |
1076 | chip->ctl_reg, chip->flag); | 1076 | chip->ctl_reg, chip->flag); |
diff --git a/drivers/spi/spi_imx.c b/drivers/spi/spi_imx.c index 3b4650ae6f1..7686ba34430 100644 --- a/drivers/spi/spi_imx.c +++ b/drivers/spi/spi_imx.c | |||
@@ -1194,7 +1194,7 @@ static int setup(struct spi_device *spi) | |||
1194 | chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL); | 1194 | chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL); |
1195 | if (!chip) { | 1195 | if (!chip) { |
1196 | dev_err(&spi->dev, | 1196 | dev_err(&spi->dev, |
1197 | "setup - cannot allocate controller state"); | 1197 | "setup - cannot allocate controller state\n"); |
1198 | return -ENOMEM; | 1198 | return -ENOMEM; |
1199 | } | 1199 | } |
1200 | chip->control = SPI_DEFAULT_CONTROL; | 1200 | chip->control = SPI_DEFAULT_CONTROL; |
@@ -1206,7 +1206,7 @@ static int setup(struct spi_device *spi) | |||
1206 | if (!chip_info) { | 1206 | if (!chip_info) { |
1207 | dev_err(&spi->dev, | 1207 | dev_err(&spi->dev, |
1208 | "setup - " | 1208 | "setup - " |
1209 | "cannot allocate controller data"); | 1209 | "cannot allocate controller data\n"); |
1210 | status = -ENOMEM; | 1210 | status = -ENOMEM; |
1211 | goto err_first_setup; | 1211 | goto err_first_setup; |
1212 | } | 1212 | } |
diff --git a/drivers/ssb/Kconfig b/drivers/ssb/Kconfig index b4a5e5e9d9f..d976660cb7f 100644 --- a/drivers/ssb/Kconfig +++ b/drivers/ssb/Kconfig | |||
@@ -22,7 +22,7 @@ config SSB | |||
22 | 22 | ||
23 | config SSB_PCIHOST_POSSIBLE | 23 | config SSB_PCIHOST_POSSIBLE |
24 | bool | 24 | bool |
25 | depends on SSB && PCI | 25 | depends on SSB && (PCI = y || PCI = SSB) |
26 | default y | 26 | default y |
27 | 27 | ||
28 | config SSB_PCIHOST | 28 | config SSB_PCIHOST |
@@ -37,7 +37,7 @@ config SSB_PCIHOST | |||
37 | 37 | ||
38 | config SSB_PCMCIAHOST_POSSIBLE | 38 | config SSB_PCMCIAHOST_POSSIBLE |
39 | bool | 39 | bool |
40 | depends on SSB && PCMCIA && EXPERIMENTAL | 40 | depends on SSB && (PCMCIA = y || PCMCIA = SSB) && EXPERIMENTAL |
41 | default y | 41 | default y |
42 | 42 | ||
43 | config SSB_PCMCIAHOST | 43 | config SSB_PCMCIAHOST |
diff --git a/drivers/ssb/driver_mipscore.c b/drivers/ssb/driver_mipscore.c index ab8691a3258..3d3dd32bf3a 100644 --- a/drivers/ssb/driver_mipscore.c +++ b/drivers/ssb/driver_mipscore.c | |||
@@ -173,7 +173,7 @@ u32 ssb_cpu_clock(struct ssb_mipscore *mcore) | |||
173 | 173 | ||
174 | void ssb_mipscore_init(struct ssb_mipscore *mcore) | 174 | void ssb_mipscore_init(struct ssb_mipscore *mcore) |
175 | { | 175 | { |
176 | struct ssb_bus *bus = mcore->dev->bus; | 176 | struct ssb_bus *bus; |
177 | struct ssb_device *dev; | 177 | struct ssb_device *dev; |
178 | unsigned long hz, ns; | 178 | unsigned long hz, ns; |
179 | unsigned int irq, i; | 179 | unsigned int irq, i; |
@@ -183,6 +183,7 @@ void ssb_mipscore_init(struct ssb_mipscore *mcore) | |||
183 | 183 | ||
184 | ssb_dprintk(KERN_INFO PFX "Initializing MIPS core...\n"); | 184 | ssb_dprintk(KERN_INFO PFX "Initializing MIPS core...\n"); |
185 | 185 | ||
186 | bus = mcore->dev->bus; | ||
186 | hz = ssb_clockspeed(bus); | 187 | hz = ssb_clockspeed(bus); |
187 | if (!hz) | 188 | if (!hz) |
188 | hz = 100000000; | 189 | hz = 100000000; |
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index f51e22490ed..912d97aaf9b 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
@@ -332,7 +332,7 @@ static void acm_read_bulk(struct urb *urb) | |||
332 | return; | 332 | return; |
333 | 333 | ||
334 | if (status) | 334 | if (status) |
335 | dev_dbg(&acm->data->dev, "bulk rx status %d", status); | 335 | dev_dbg(&acm->data->dev, "bulk rx status %d\n", status); |
336 | 336 | ||
337 | buf = rcv->buffer; | 337 | buf = rcv->buffer; |
338 | buf->size = urb->actual_length; | 338 | buf->size = urb->actual_length; |
@@ -831,13 +831,13 @@ static int acm_probe (struct usb_interface *intf, | |||
831 | 831 | ||
832 | /* normal probing*/ | 832 | /* normal probing*/ |
833 | if (!buffer) { | 833 | if (!buffer) { |
834 | err("Wierd descriptor references\n"); | 834 | err("Weird descriptor references\n"); |
835 | return -EINVAL; | 835 | return -EINVAL; |
836 | } | 836 | } |
837 | 837 | ||
838 | if (!buflen) { | 838 | if (!buflen) { |
839 | if (intf->cur_altsetting->endpoint->extralen && intf->cur_altsetting->endpoint->extra) { | 839 | if (intf->cur_altsetting->endpoint->extralen && intf->cur_altsetting->endpoint->extra) { |
840 | dev_dbg(&intf->dev,"Seeking extra descriptors on endpoint"); | 840 | dev_dbg(&intf->dev,"Seeking extra descriptors on endpoint\n"); |
841 | buflen = intf->cur_altsetting->endpoint->extralen; | 841 | buflen = intf->cur_altsetting->endpoint->extralen; |
842 | buffer = intf->cur_altsetting->endpoint->extra; | 842 | buffer = intf->cur_altsetting->endpoint->extra; |
843 | } else { | 843 | } else { |
@@ -887,24 +887,24 @@ next_desc: | |||
887 | 887 | ||
888 | if (!union_header) { | 888 | if (!union_header) { |
889 | if (call_interface_num > 0) { | 889 | if (call_interface_num > 0) { |
890 | dev_dbg(&intf->dev,"No union descriptor, using call management descriptor"); | 890 | dev_dbg(&intf->dev,"No union descriptor, using call management descriptor\n"); |
891 | data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num)); | 891 | data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num)); |
892 | control_interface = intf; | 892 | control_interface = intf; |
893 | } else { | 893 | } else { |
894 | dev_dbg(&intf->dev,"No union descriptor, giving up"); | 894 | dev_dbg(&intf->dev,"No union descriptor, giving up\n"); |
895 | return -ENODEV; | 895 | return -ENODEV; |
896 | } | 896 | } |
897 | } else { | 897 | } else { |
898 | control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0); | 898 | control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0); |
899 | data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0)); | 899 | data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0)); |
900 | if (!control_interface || !data_interface) { | 900 | if (!control_interface || !data_interface) { |
901 | dev_dbg(&intf->dev,"no interfaces"); | 901 | dev_dbg(&intf->dev,"no interfaces\n"); |
902 | return -ENODEV; | 902 | return -ENODEV; |
903 | } | 903 | } |
904 | } | 904 | } |
905 | 905 | ||
906 | if (data_interface_num != call_interface_num) | 906 | if (data_interface_num != call_interface_num) |
907 | dev_dbg(&intf->dev,"Seperate call control interface. That is not fully supported."); | 907 | dev_dbg(&intf->dev,"Seperate call control interface. That is not fully supported.\n"); |
908 | 908 | ||
909 | skip_normal_probe: | 909 | skip_normal_probe: |
910 | 910 | ||
@@ -912,7 +912,7 @@ skip_normal_probe: | |||
912 | if (data_interface->cur_altsetting->desc.bInterfaceClass != CDC_DATA_INTERFACE_TYPE) { | 912 | if (data_interface->cur_altsetting->desc.bInterfaceClass != CDC_DATA_INTERFACE_TYPE) { |
913 | if (control_interface->cur_altsetting->desc.bInterfaceClass == CDC_DATA_INTERFACE_TYPE) { | 913 | if (control_interface->cur_altsetting->desc.bInterfaceClass == CDC_DATA_INTERFACE_TYPE) { |
914 | struct usb_interface *t; | 914 | struct usb_interface *t; |
915 | dev_dbg(&intf->dev,"Your device has switched interfaces."); | 915 | dev_dbg(&intf->dev,"Your device has switched interfaces.\n"); |
916 | 916 | ||
917 | t = control_interface; | 917 | t = control_interface; |
918 | control_interface = data_interface; | 918 | control_interface = data_interface; |
@@ -927,7 +927,7 @@ skip_normal_probe: | |||
927 | return -ENODEV; | 927 | return -ENODEV; |
928 | 928 | ||
929 | if (usb_interface_claimed(data_interface)) { /* valid in this context */ | 929 | if (usb_interface_claimed(data_interface)) { /* valid in this context */ |
930 | dev_dbg(&intf->dev,"The data interface isn't available"); | 930 | dev_dbg(&intf->dev,"The data interface isn't available\n"); |
931 | return -EBUSY; | 931 | return -EBUSY; |
932 | } | 932 | } |
933 | 933 | ||
@@ -944,7 +944,7 @@ skip_normal_probe: | |||
944 | if (!usb_endpoint_dir_in(epread)) { | 944 | if (!usb_endpoint_dir_in(epread)) { |
945 | /* descriptors are swapped */ | 945 | /* descriptors are swapped */ |
946 | struct usb_endpoint_descriptor *t; | 946 | struct usb_endpoint_descriptor *t; |
947 | dev_dbg(&intf->dev,"The data interface has switched endpoints"); | 947 | dev_dbg(&intf->dev,"The data interface has switched endpoints\n"); |
948 | 948 | ||
949 | t = epread; | 949 | t = epread; |
950 | epread = epwrite; | 950 | epread = epwrite; |
@@ -959,7 +959,7 @@ skip_normal_probe: | |||
959 | } | 959 | } |
960 | 960 | ||
961 | if (!(acm = kzalloc(sizeof(struct acm), GFP_KERNEL))) { | 961 | if (!(acm = kzalloc(sizeof(struct acm), GFP_KERNEL))) { |
962 | dev_dbg(&intf->dev, "out of memory (acm kzalloc)"); | 962 | dev_dbg(&intf->dev, "out of memory (acm kzalloc)\n"); |
963 | goto alloc_fail; | 963 | goto alloc_fail; |
964 | } | 964 | } |
965 | 965 | ||
@@ -985,26 +985,26 @@ skip_normal_probe: | |||
985 | 985 | ||
986 | buf = usb_buffer_alloc(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma); | 986 | buf = usb_buffer_alloc(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma); |
987 | if (!buf) { | 987 | if (!buf) { |
988 | dev_dbg(&intf->dev, "out of memory (ctrl buffer alloc)"); | 988 | dev_dbg(&intf->dev, "out of memory (ctrl buffer alloc)\n"); |
989 | goto alloc_fail2; | 989 | goto alloc_fail2; |
990 | } | 990 | } |
991 | acm->ctrl_buffer = buf; | 991 | acm->ctrl_buffer = buf; |
992 | 992 | ||
993 | if (acm_write_buffers_alloc(acm) < 0) { | 993 | if (acm_write_buffers_alloc(acm) < 0) { |
994 | dev_dbg(&intf->dev, "out of memory (write buffer alloc)"); | 994 | dev_dbg(&intf->dev, "out of memory (write buffer alloc)\n"); |
995 | goto alloc_fail4; | 995 | goto alloc_fail4; |
996 | } | 996 | } |
997 | 997 | ||
998 | acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL); | 998 | acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL); |
999 | if (!acm->ctrlurb) { | 999 | if (!acm->ctrlurb) { |
1000 | dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)"); | 1000 | dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n"); |
1001 | goto alloc_fail5; | 1001 | goto alloc_fail5; |
1002 | } | 1002 | } |
1003 | for (i = 0; i < num_rx_buf; i++) { | 1003 | for (i = 0; i < num_rx_buf; i++) { |
1004 | struct acm_ru *rcv = &(acm->ru[i]); | 1004 | struct acm_ru *rcv = &(acm->ru[i]); |
1005 | 1005 | ||
1006 | if (!(rcv->urb = usb_alloc_urb(0, GFP_KERNEL))) { | 1006 | if (!(rcv->urb = usb_alloc_urb(0, GFP_KERNEL))) { |
1007 | dev_dbg(&intf->dev, "out of memory (read urbs usb_alloc_urb)"); | 1007 | dev_dbg(&intf->dev, "out of memory (read urbs usb_alloc_urb)\n"); |
1008 | goto alloc_fail7; | 1008 | goto alloc_fail7; |
1009 | } | 1009 | } |
1010 | 1010 | ||
@@ -1015,13 +1015,13 @@ skip_normal_probe: | |||
1015 | struct acm_rb *buf = &(acm->rb[i]); | 1015 | struct acm_rb *buf = &(acm->rb[i]); |
1016 | 1016 | ||
1017 | if (!(buf->base = usb_buffer_alloc(acm->dev, readsize, GFP_KERNEL, &buf->dma))) { | 1017 | if (!(buf->base = usb_buffer_alloc(acm->dev, readsize, GFP_KERNEL, &buf->dma))) { |
1018 | dev_dbg(&intf->dev, "out of memory (read bufs usb_buffer_alloc)"); | 1018 | dev_dbg(&intf->dev, "out of memory (read bufs usb_buffer_alloc)\n"); |
1019 | goto alloc_fail7; | 1019 | goto alloc_fail7; |
1020 | } | 1020 | } |
1021 | } | 1021 | } |
1022 | acm->writeurb = usb_alloc_urb(0, GFP_KERNEL); | 1022 | acm->writeurb = usb_alloc_urb(0, GFP_KERNEL); |
1023 | if (!acm->writeurb) { | 1023 | if (!acm->writeurb) { |
1024 | dev_dbg(&intf->dev, "out of memory (writeurb kmalloc)"); | 1024 | dev_dbg(&intf->dev, "out of memory (writeurb kmalloc)\n"); |
1025 | goto alloc_fail7; | 1025 | goto alloc_fail7; |
1026 | } | 1026 | } |
1027 | 1027 | ||
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index f013b4012c9..1f4f6d02fe2 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c | |||
@@ -460,7 +460,7 @@ static int checkintf(struct dev_state *ps, unsigned int ifnum) | |||
460 | return 0; | 460 | return 0; |
461 | /* if not yet claimed, claim it for the driver */ | 461 | /* if not yet claimed, claim it for the driver */ |
462 | dev_warn(&ps->dev->dev, "usbfs: process %d (%s) did not claim interface %u before use\n", | 462 | dev_warn(&ps->dev->dev, "usbfs: process %d (%s) did not claim interface %u before use\n", |
463 | current->pid, current->comm, ifnum); | 463 | task_pid_nr(current), current->comm, ifnum); |
464 | return claimintf(ps, ifnum); | 464 | return claimintf(ps, ifnum); |
465 | } | 465 | } |
466 | 466 | ||
diff --git a/drivers/usb/core/endpoint.c b/drivers/usb/core/endpoint.c index 7dc123d6b2d..99e5a68a3f1 100644 --- a/drivers/usb/core/endpoint.c +++ b/drivers/usb/core/endpoint.c | |||
@@ -291,7 +291,7 @@ int usb_create_ep_files(struct device *parent, | |||
291 | 291 | ||
292 | retval = endpoint_get_minor(ep_dev); | 292 | retval = endpoint_get_minor(ep_dev); |
293 | if (retval) { | 293 | if (retval) { |
294 | dev_err(parent, "can not allocate minor number for %s", | 294 | dev_err(parent, "can not allocate minor number for %s\n", |
295 | ep_dev->dev.bus_id); | 295 | ep_dev->dev.bus_id); |
296 | goto error_register; | 296 | goto error_register; |
297 | } | 297 | } |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 60a8f55a0cc..036c3dea855 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -2870,10 +2870,9 @@ static int hub_thread(void *__unused) | |||
2870 | set_freezable(); | 2870 | set_freezable(); |
2871 | do { | 2871 | do { |
2872 | hub_events(); | 2872 | hub_events(); |
2873 | wait_event_interruptible(khubd_wait, | 2873 | wait_event_freezable(khubd_wait, |
2874 | !list_empty(&hub_event_list) || | 2874 | !list_empty(&hub_event_list) || |
2875 | kthread_should_stop()); | 2875 | kthread_should_stop()); |
2876 | try_to_freeze(); | ||
2877 | } while (!kthread_should_stop() || !list_empty(&hub_event_list)); | 2876 | } while (!kthread_should_stop() || !list_empty(&hub_event_list)); |
2878 | 2877 | ||
2879 | pr_debug("%s: khubd exiting\n", usbcore_name); | 2878 | pr_debug("%s: khubd exiting\n", usbcore_name); |
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index c021af39037..8dd5a6afd51 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c | |||
@@ -1526,7 +1526,7 @@ int usb_set_configuration(struct usb_device *dev, int configuration) | |||
1526 | new_interfaces = kmalloc(nintf * sizeof(*new_interfaces), | 1526 | new_interfaces = kmalloc(nintf * sizeof(*new_interfaces), |
1527 | GFP_KERNEL); | 1527 | GFP_KERNEL); |
1528 | if (!new_interfaces) { | 1528 | if (!new_interfaces) { |
1529 | dev_err(&dev->dev, "Out of memory"); | 1529 | dev_err(&dev->dev, "Out of memory\n"); |
1530 | return -ENOMEM; | 1530 | return -ENOMEM; |
1531 | } | 1531 | } |
1532 | 1532 | ||
@@ -1535,7 +1535,7 @@ int usb_set_configuration(struct usb_device *dev, int configuration) | |||
1535 | sizeof(struct usb_interface), | 1535 | sizeof(struct usb_interface), |
1536 | GFP_KERNEL); | 1536 | GFP_KERNEL); |
1537 | if (!new_interfaces[n]) { | 1537 | if (!new_interfaces[n]) { |
1538 | dev_err(&dev->dev, "Out of memory"); | 1538 | dev_err(&dev->dev, "Out of memory\n"); |
1539 | ret = -ENOMEM; | 1539 | ret = -ENOMEM; |
1540 | free_interfaces: | 1540 | free_interfaces: |
1541 | while (--n >= 0) | 1541 | while (--n >= 0) |
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c index 73726c570a6..1d174dcb3ac 100644 --- a/drivers/usb/gadget/file_storage.c +++ b/drivers/usb/gadget/file_storage.c | |||
@@ -4006,7 +4006,7 @@ static int __init fsg_bind(struct usb_gadget *gadget) | |||
4006 | DBG(fsg, "removable=%d, stall=%d, buflen=%u\n", | 4006 | DBG(fsg, "removable=%d, stall=%d, buflen=%u\n", |
4007 | mod_data.removable, mod_data.can_stall, | 4007 | mod_data.removable, mod_data.can_stall, |
4008 | mod_data.buflen); | 4008 | mod_data.buflen); |
4009 | DBG(fsg, "I/O thread pid: %d\n", fsg->thread_task->pid); | 4009 | DBG(fsg, "I/O thread pid: %d\n", task_pid_nr(fsg->thread_task)); |
4010 | 4010 | ||
4011 | set_bit(REGISTERED, &fsg->atomic_bitflags); | 4011 | set_bit(REGISTERED, &fsg->atomic_bitflags); |
4012 | 4012 | ||
diff --git a/drivers/usb/gadget/lh7a40x_udc.c b/drivers/usb/gadget/lh7a40x_udc.c index e78c2ddc1f8..367b75c0b25 100644 --- a/drivers/usb/gadget/lh7a40x_udc.c +++ b/drivers/usb/gadget/lh7a40x_udc.c | |||
@@ -1272,7 +1272,7 @@ static int lh7a40x_set_halt(struct usb_ep *_ep, int value) | |||
1272 | /* | 1272 | /* |
1273 | * Attempts to halt IN endpoints will fail (returning -EAGAIN) | 1273 | * Attempts to halt IN endpoints will fail (returning -EAGAIN) |
1274 | * if any transfer requests are still queued, or if the controller | 1274 | * if any transfer requests are still queued, or if the controller |
1275 | * FIFO still holds bytes that the host hasn’t collected. | 1275 | * FIFO still holds bytes that the host hasn't collected. |
1276 | */ | 1276 | */ |
1277 | spin_unlock_irqrestore(&ep->dev->lock, flags); | 1277 | spin_unlock_irqrestore(&ep->dev->lock, flags); |
1278 | DEBUG | 1278 | DEBUG |
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index 0dcb4164dc8..735db4aec83 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c | |||
@@ -451,7 +451,7 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf) | |||
451 | 451 | ||
452 | /* Some boards (mostly VIA?) report bogus overcurrent indications, | 452 | /* Some boards (mostly VIA?) report bogus overcurrent indications, |
453 | * causing massive log spam unless we completely ignore them. It | 453 | * causing massive log spam unless we completely ignore them. It |
454 | * may be relevant that VIA VT8235 controlers, where PORT_POWER is | 454 | * may be relevant that VIA VT8235 controllers, where PORT_POWER is |
455 | * always set, seem to clear PORT_OCC and PORT_CSC when writing to | 455 | * always set, seem to clear PORT_OCC and PORT_CSC when writing to |
456 | * PORT_POWER; that's surprising, but maybe within-spec. | 456 | * PORT_POWER; that's surprising, but maybe within-spec. |
457 | */ | 457 | */ |
diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c index 6829814b7aa..44b79e8a6e2 100644 --- a/drivers/usb/host/ohci-s3c2410.c +++ b/drivers/usb/host/ohci-s3c2410.c | |||
@@ -358,7 +358,7 @@ static int usb_hcd_s3c2410_probe (const struct hc_driver *driver, | |||
358 | hcd->rsrc_len = dev->resource[0].end - dev->resource[0].start + 1; | 358 | hcd->rsrc_len = dev->resource[0].end - dev->resource[0].start + 1; |
359 | 359 | ||
360 | if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { | 360 | if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { |
361 | dev_err(&dev->dev, "request_mem_region failed"); | 361 | dev_err(&dev->dev, "request_mem_region failed\n"); |
362 | retval = -EBUSY; | 362 | retval = -EBUSY; |
363 | goto err_put; | 363 | goto err_put; |
364 | } | 364 | } |
diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c index 94d859aa73f..ba370c56172 100644 --- a/drivers/usb/host/sl811-hcd.c +++ b/drivers/usb/host/sl811-hcd.c | |||
@@ -1556,7 +1556,7 @@ sl811h_start(struct usb_hcd *hcd) | |||
1556 | hcd->power_budget = sl811->board->power * 2; | 1556 | hcd->power_budget = sl811->board->power * 2; |
1557 | } | 1557 | } |
1558 | 1558 | ||
1559 | /* enable power and interupts */ | 1559 | /* enable power and interrupts */ |
1560 | port_power(sl811, 1); | 1560 | port_power(sl811, 1); |
1561 | 1561 | ||
1562 | return 0; | 1562 | return 0; |
diff --git a/drivers/usb/image/Kconfig b/drivers/usb/image/Kconfig index 95ce703110d..7595dfb38e3 100644 --- a/drivers/usb/image/Kconfig +++ b/drivers/usb/image/Kconfig | |||
@@ -1,5 +1,5 @@ | |||
1 | # | 1 | # |
2 | # USB Imageing devices configuration | 2 | # USB Imaging devices configuration |
3 | # | 3 | # |
4 | comment "USB Imaging devices" | 4 | comment "USB Imaging devices" |
5 | depends on USB | 5 | depends on USB |
diff --git a/drivers/usb/misc/adutux.c b/drivers/usb/misc/adutux.c index 5131cbfb2f5..c567aa7a41e 100644 --- a/drivers/usb/misc/adutux.c +++ b/drivers/usb/misc/adutux.c | |||
@@ -805,7 +805,7 @@ static int adu_probe(struct usb_interface *interface, | |||
805 | dev->minor = interface->minor; | 805 | dev->minor = interface->minor; |
806 | 806 | ||
807 | /* let the user know what node this device is now attached to */ | 807 | /* let the user know what node this device is now attached to */ |
808 | dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d", | 808 | dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d\n", |
809 | udev->descriptor.idProduct, dev->serial_number, | 809 | udev->descriptor.idProduct, dev->serial_number, |
810 | (dev->minor - ADU_MINOR_BASE)); | 810 | (dev->minor - ADU_MINOR_BASE)); |
811 | exit: | 811 | exit: |
@@ -851,7 +851,7 @@ static void adu_disconnect(struct usb_interface *interface) | |||
851 | mutex_unlock(&dev->mtx); | 851 | mutex_unlock(&dev->mtx); |
852 | } | 852 | } |
853 | 853 | ||
854 | dev_info(&interface->dev, "ADU device adutux%d now disconnected", | 854 | dev_info(&interface->dev, "ADU device adutux%d now disconnected\n", |
855 | (minor - ADU_MINOR_BASE)); | 855 | (minor - ADU_MINOR_BASE)); |
856 | 856 | ||
857 | dbg(2," %s : leave", __FUNCTION__); | 857 | dbg(2," %s : leave", __FUNCTION__); |
diff --git a/drivers/usb/misc/cytherm.c b/drivers/usb/misc/cytherm.c index 04e87acd6e4..2677fea147d 100644 --- a/drivers/usb/misc/cytherm.c +++ b/drivers/usb/misc/cytherm.c | |||
@@ -118,7 +118,7 @@ static ssize_t set_brightness(struct device *dev, struct device_attribute *attr, | |||
118 | cytherm->brightness, buffer, 8); | 118 | cytherm->brightness, buffer, 8); |
119 | if (retval) | 119 | if (retval) |
120 | dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); | 120 | dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); |
121 | /* Inform µC that we have changed the brightness setting */ | 121 | /* Inform µC that we have changed the brightness setting */ |
122 | retval = vendor_command(cytherm->udev, WRITE_RAM, BRIGHTNESS_SEM, | 122 | retval = vendor_command(cytherm->udev, WRITE_RAM, BRIGHTNESS_SEM, |
123 | 0x01, buffer, 8); | 123 | 0x01, buffer, 8); |
124 | if (retval) | 124 | if (retval) |
diff --git a/drivers/usb/misc/emi26.c b/drivers/usb/misc/emi26.c index 5c0a26cbd12..cd137577bb2 100644 --- a/drivers/usb/misc/emi26.c +++ b/drivers/usb/misc/emi26.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Emagic EMI 2|6 usb audio interface firmware loader. | 2 | * Emagic EMI 2|6 usb audio interface firmware loader. |
3 | * Copyright (C) 2002 | 3 | * Copyright (C) 2002 |
4 | * Tapio Laxström (tapio.laxstrom@iptime.fi) | 4 | * Tapio Laxström (tapio.laxstrom@iptime.fi) |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License, as published by | 7 | * it under the terms of the GNU General Public License, as published by |
@@ -249,7 +249,7 @@ static void __exit emi26_exit (void) | |||
249 | module_init(emi26_init); | 249 | module_init(emi26_init); |
250 | module_exit(emi26_exit); | 250 | module_exit(emi26_exit); |
251 | 251 | ||
252 | MODULE_AUTHOR("tapio laxström"); | 252 | MODULE_AUTHOR("Tapio Laxström"); |
253 | MODULE_DESCRIPTION("Emagic EMI 2|6 firmware loader."); | 253 | MODULE_DESCRIPTION("Emagic EMI 2|6 firmware loader."); |
254 | MODULE_LICENSE("GPL"); | 254 | MODULE_LICENSE("GPL"); |
255 | 255 | ||
diff --git a/drivers/usb/misc/emi62.c b/drivers/usb/misc/emi62.c index 23153eac0df..4758cc5cceb 100644 --- a/drivers/usb/misc/emi62.c +++ b/drivers/usb/misc/emi62.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Emagic EMI 2|6 usb audio interface firmware loader. | 2 | * Emagic EMI 2|6 usb audio interface firmware loader. |
3 | * Copyright (C) 2002 | 3 | * Copyright (C) 2002 |
4 | * Tapio Laxström (tapio.laxstrom@iptime.fi) | 4 | * Tapio Laxström (tapio.laxstrom@iptime.fi) |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License, as published by | 7 | * it under the terms of the GNU General Public License, as published by |
@@ -292,7 +292,7 @@ static void __exit emi62_exit (void) | |||
292 | module_init(emi62_init); | 292 | module_init(emi62_init); |
293 | module_exit(emi62_exit); | 293 | module_exit(emi62_exit); |
294 | 294 | ||
295 | MODULE_AUTHOR("tapio laxström"); | 295 | MODULE_AUTHOR("Tapio Laxström"); |
296 | MODULE_DESCRIPTION("Emagic EMI 6|2m firmware loader."); | 296 | MODULE_DESCRIPTION("Emagic EMI 6|2m firmware loader."); |
297 | MODULE_LICENSE("GPL"); | 297 | MODULE_LICENSE("GPL"); |
298 | 298 | ||
diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c index 46d9f27ec17..d372fbc4eff 100644 --- a/drivers/usb/misc/iowarrior.c +++ b/drivers/usb/misc/iowarrior.c | |||
@@ -216,7 +216,7 @@ static void iowarrior_callback(struct urb *urb) | |||
216 | exit: | 216 | exit: |
217 | retval = usb_submit_urb(urb, GFP_ATOMIC); | 217 | retval = usb_submit_urb(urb, GFP_ATOMIC); |
218 | if (retval) | 218 | if (retval) |
219 | dev_err(&dev->interface->dev, "%s - usb_submit_urb failed with result %d", | 219 | dev_err(&dev->interface->dev, "%s - usb_submit_urb failed with result %d\n", |
220 | __FUNCTION__, retval); | 220 | __FUNCTION__, retval); |
221 | 221 | ||
222 | } | 222 | } |
@@ -451,7 +451,7 @@ static ssize_t iowarrior_write(struct file *file, | |||
451 | break; | 451 | break; |
452 | default: | 452 | default: |
453 | /* what do we have here ? An unsupported Product-ID ? */ | 453 | /* what do we have here ? An unsupported Product-ID ? */ |
454 | dev_err(&dev->interface->dev, "%s - not supported for product=0x%x", | 454 | dev_err(&dev->interface->dev, "%s - not supported for product=0x%x\n", |
455 | __FUNCTION__, dev->product_id); | 455 | __FUNCTION__, dev->product_id); |
456 | retval = -EFAULT; | 456 | retval = -EFAULT; |
457 | goto exit; | 457 | goto exit; |
@@ -526,7 +526,7 @@ static int iowarrior_ioctl(struct inode *inode, struct file *file, | |||
526 | } else { | 526 | } else { |
527 | retval = -EINVAL; | 527 | retval = -EINVAL; |
528 | dev_err(&dev->interface->dev, | 528 | dev_err(&dev->interface->dev, |
529 | "ioctl 'IOW_WRITE' is not supported for product=0x%x.", | 529 | "ioctl 'IOW_WRITE' is not supported for product=0x%x.\n", |
530 | dev->product_id); | 530 | dev->product_id); |
531 | } | 531 | } |
532 | break; | 532 | break; |
@@ -752,7 +752,7 @@ static int iowarrior_probe(struct usb_interface *interface, | |||
752 | /* allocate memory for our device state and intialize it */ | 752 | /* allocate memory for our device state and intialize it */ |
753 | dev = kzalloc(sizeof(struct iowarrior), GFP_KERNEL); | 753 | dev = kzalloc(sizeof(struct iowarrior), GFP_KERNEL); |
754 | if (dev == NULL) { | 754 | if (dev == NULL) { |
755 | dev_err(&interface->dev, "Out of memory"); | 755 | dev_err(&interface->dev, "Out of memory\n"); |
756 | return retval; | 756 | return retval; |
757 | } | 757 | } |
758 | 758 | ||
diff --git a/drivers/usb/misc/phidgetmotorcontrol.c b/drivers/usb/misc/phidgetmotorcontrol.c index df0ebcdb9d6..2ad09b1f484 100644 --- a/drivers/usb/misc/phidgetmotorcontrol.c +++ b/drivers/usb/misc/phidgetmotorcontrol.c | |||
@@ -155,7 +155,7 @@ resubmit: | |||
155 | retval = usb_submit_urb(urb, GFP_ATOMIC); | 155 | retval = usb_submit_urb(urb, GFP_ATOMIC); |
156 | if (retval) | 156 | if (retval) |
157 | dev_err(&mc->intf->dev, | 157 | dev_err(&mc->intf->dev, |
158 | "can't resubmit intr, %s-%s/motorcontrol0, retval %d", | 158 | "can't resubmit intr, %s-%s/motorcontrol0, retval %d\n", |
159 | mc->udev->bus->bus_name, | 159 | mc->udev->bus->bus_name, |
160 | mc->udev->devpath, retval); | 160 | mc->udev->devpath, retval); |
161 | } | 161 | } |
diff --git a/drivers/usb/serial/ChangeLog.history b/drivers/usb/serial/ChangeLog.history index 52c4f7bd7a8..c1b279939bb 100644 --- a/drivers/usb/serial/ChangeLog.history +++ b/drivers/usb/serial/ChangeLog.history | |||
@@ -400,7 +400,7 @@ visor.c Change Log comments: | |||
400 | 400 | ||
401 | (11/11/2001) gkh | 401 | (11/11/2001) gkh |
402 | Added support for the m125 devices, and added check to prevent oopses | 402 | Added support for the m125 devices, and added check to prevent oopses |
403 | for Clié devices that lie about the number of ports they have. | 403 | for Clié devices that lie about the number of ports they have. |
404 | 404 | ||
405 | (08/30/2001) gkh | 405 | (08/30/2001) gkh |
406 | Added support for the Clie devices, both the 3.5 and 4.0 os versions. | 406 | Added support for the Clie devices, both the 3.5 and 4.0 os versions. |
diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig index 99fefed7791..4a86696e6c7 100644 --- a/drivers/usb/serial/Kconfig +++ b/drivers/usb/serial/Kconfig | |||
@@ -527,7 +527,7 @@ config USB_SERIAL_CYBERJACK | |||
527 | depends on USB_SERIAL && EXPERIMENTAL | 527 | depends on USB_SERIAL && EXPERIMENTAL |
528 | ---help--- | 528 | ---help--- |
529 | Say Y here if you want to use a cyberJack pinpad/e-com USB chipcard | 529 | Say Y here if you want to use a cyberJack pinpad/e-com USB chipcard |
530 | reader. This is an interface to ISO 7816 compatible contactbased | 530 | reader. This is an interface to ISO 7816 compatible contact-based |
531 | chipcards, e.g. GSM SIMs. | 531 | chipcards, e.g. GSM SIMs. |
532 | 532 | ||
533 | To compile this driver as a module, choose M here: the | 533 | To compile this driver as a module, choose M here: the |
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index e4c248c98e8..8a8a6b9fb05 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -83,7 +83,7 @@ | |||
83 | * | 83 | * |
84 | * (18/Jun/2003) Ian Abbott | 84 | * (18/Jun/2003) Ian Abbott |
85 | * Added Device ID of the USB relais from Rudolf Gugler (backported from | 85 | * Added Device ID of the USB relais from Rudolf Gugler (backported from |
86 | * Philipp Gühring's patch for 2.5.x kernel). | 86 | * Philipp Gühring's patch for 2.5.x kernel). |
87 | * Moved read transfer buffer reallocation into startup function. | 87 | * Moved read transfer buffer reallocation into startup function. |
88 | * Free existing write urb and transfer buffer in startup function. | 88 | * Free existing write urb and transfer buffer in startup function. |
89 | * Only use urbs in write urb pool that were successfully allocated. | 89 | * Only use urbs in write urb pool that were successfully allocated. |
@@ -1071,7 +1071,7 @@ static ssize_t show_latency_timer(struct device *dev, struct device_attribute *a | |||
1071 | (char*) &latency, 1, WDR_TIMEOUT); | 1071 | (char*) &latency, 1, WDR_TIMEOUT); |
1072 | 1072 | ||
1073 | if (rv < 0) { | 1073 | if (rv < 0) { |
1074 | dev_err(dev, "Unable to read latency timer: %i", rv); | 1074 | dev_err(dev, "Unable to read latency timer: %i\n", rv); |
1075 | return -EIO; | 1075 | return -EIO; |
1076 | } | 1076 | } |
1077 | return sprintf(buf, "%i\n", latency); | 1077 | return sprintf(buf, "%i\n", latency); |
@@ -1098,7 +1098,7 @@ static ssize_t store_latency_timer(struct device *dev, struct device_attribute * | |||
1098 | buf, 0, WDR_TIMEOUT); | 1098 | buf, 0, WDR_TIMEOUT); |
1099 | 1099 | ||
1100 | if (rv < 0) { | 1100 | if (rv < 0) { |
1101 | dev_err(dev, "Unable to write latency timer: %i", rv); | 1101 | dev_err(dev, "Unable to write latency timer: %i\n", rv); |
1102 | return -EIO; | 1102 | return -EIO; |
1103 | } | 1103 | } |
1104 | 1104 | ||
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index b57b90ae9f9..b51cbb0eaa0 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
@@ -17,7 +17,7 @@ | |||
17 | * Bill Ryder - bryder@sgi.com formerly of Silicon Graphics, Inc.- wrote the | 17 | * Bill Ryder - bryder@sgi.com formerly of Silicon Graphics, Inc.- wrote the |
18 | * FTDI_SIO implementation. | 18 | * FTDI_SIO implementation. |
19 | * | 19 | * |
20 | * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais | 20 | * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais |
21 | * from Rudolf Gugler | 21 | * from Rudolf Gugler |
22 | * | 22 | * |
23 | */ | 23 | */ |
@@ -44,7 +44,7 @@ | |||
44 | #define FTDI_ACTZWAVE_PID 0xF2D0 | 44 | #define FTDI_ACTZWAVE_PID 0xF2D0 |
45 | 45 | ||
46 | 46 | ||
47 | /* www.starting-point-systems.com µChameleon device */ | 47 | /* www.starting-point-systems.com µChameleon device */ |
48 | #define FTDI_MICRO_CHAMELEON_PID 0xCAA0 /* Product Id */ | 48 | #define FTDI_MICRO_CHAMELEON_PID 0xCAA0 /* Product Id */ |
49 | 49 | ||
50 | /* www.irtrans.de device */ | 50 | /* www.irtrans.de device */ |
@@ -419,7 +419,7 @@ | |||
419 | 419 | ||
420 | /* | 420 | /* |
421 | * Teratronik product ids. | 421 | * Teratronik product ids. |
422 | * Submitted by O. Wölfelschneider. | 422 | * Submitted by O. Wölfelschneider. |
423 | */ | 423 | */ |
424 | #define FTDI_TERATRONIK_VCP_PID 0xEC88 /* Teratronik device (preferring VCP driver on windows) */ | 424 | #define FTDI_TERATRONIK_VCP_PID 0xEC88 /* Teratronik device (preferring VCP driver on windows) */ |
425 | #define FTDI_TERATRONIK_D2XX_PID 0xEC89 /* Teratronik device (preferring D2XX driver on windows) */ | 425 | #define FTDI_TERATRONIK_D2XX_PID 0xEC89 /* Teratronik device (preferring D2XX driver on windows) */ |
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c index 2ecb1d2a034..8dd3abc99d6 100644 --- a/drivers/usb/serial/io_edgeport.c +++ b/drivers/usb/serial/io_edgeport.c | |||
@@ -2882,7 +2882,7 @@ static int edge_startup (struct usb_serial *serial) | |||
2882 | (edge_serial->product_info.NumPorts != serial->num_ports)) { | 2882 | (edge_serial->product_info.NumPorts != serial->num_ports)) { |
2883 | dev_warn(&serial->dev->dev, "Device Reported %d serial ports " | 2883 | dev_warn(&serial->dev->dev, "Device Reported %d serial ports " |
2884 | "vs. core thinking we have %d ports, email " | 2884 | "vs. core thinking we have %d ports, email " |
2885 | "greg@kroah.com this information.", | 2885 | "greg@kroah.com this information.\n", |
2886 | edge_serial->product_info.NumPorts, | 2886 | edge_serial->product_info.NumPorts, |
2887 | serial->num_ports); | 2887 | serial->num_ports); |
2888 | } | 2888 | } |
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c index e836ad07fdb..9b38a08ac83 100644 --- a/drivers/usb/serial/ipaq.c +++ b/drivers/usb/serial/ipaq.c | |||
@@ -306,7 +306,7 @@ static struct usb_device_id ipaq_id_table [] = { | |||
306 | { USB_DEVICE(0x0930, 0x0705) }, /* TOSHIBA Pocket PC e310 */ | 306 | { USB_DEVICE(0x0930, 0x0705) }, /* TOSHIBA Pocket PC e310 */ |
307 | { USB_DEVICE(0x0930, 0x0706) }, /* TOSHIBA Pocket PC e740 */ | 307 | { USB_DEVICE(0x0930, 0x0706) }, /* TOSHIBA Pocket PC e740 */ |
308 | { USB_DEVICE(0x0930, 0x0707) }, /* TOSHIBA Pocket PC e330 Series */ | 308 | { USB_DEVICE(0x0930, 0x0707) }, /* TOSHIBA Pocket PC e330 Series */ |
309 | { USB_DEVICE(0x0930, 0x0708) }, /* TOSHIBA Pocket PC e350 Series */ | 309 | { USB_DEVICE(0x0930, 0x0708) }, /* TOSHIBA Pocket PC e350 Series */ |
310 | { USB_DEVICE(0x0930, 0x0709) }, /* TOSHIBA Pocket PC e750 Series */ | 310 | { USB_DEVICE(0x0930, 0x0709) }, /* TOSHIBA Pocket PC e750 Series */ |
311 | { USB_DEVICE(0x0930, 0x070A) }, /* TOSHIBA Pocket PC e400 Series */ | 311 | { USB_DEVICE(0x0930, 0x070A) }, /* TOSHIBA Pocket PC e400 Series */ |
312 | { USB_DEVICE(0x0930, 0x070B) }, /* TOSHIBA Pocket PC e800 Series */ | 312 | { USB_DEVICE(0x0930, 0x070B) }, /* TOSHIBA Pocket PC e800 Series */ |
@@ -488,7 +488,7 @@ static struct usb_device_id ipaq_id_table [] = { | |||
488 | { USB_DEVICE(0x0BF8, 0x1001) }, /* Fujitsu Siemens Computers USB Sync */ | 488 | { USB_DEVICE(0x0BF8, 0x1001) }, /* Fujitsu Siemens Computers USB Sync */ |
489 | { USB_DEVICE(0x0C44, 0x03A2) }, /* Motorola iDEN Smartphone */ | 489 | { USB_DEVICE(0x0C44, 0x03A2) }, /* Motorola iDEN Smartphone */ |
490 | { USB_DEVICE(0x0C8E, 0x6000) }, /* Cesscom Luxian Series */ | 490 | { USB_DEVICE(0x0C8E, 0x6000) }, /* Cesscom Luxian Series */ |
491 | { USB_DEVICE(0x0CAD, 0x9001) }, /* Motorola PowerPad Pocket PC Device */ | 491 | { USB_DEVICE(0x0CAD, 0x9001) }, /* Motorola PowerPad Pocket PC Device */ |
492 | { USB_DEVICE(0x0F4E, 0x0200) }, /* Freedom Scientific USB Sync */ | 492 | { USB_DEVICE(0x0F4E, 0x0200) }, /* Freedom Scientific USB Sync */ |
493 | { USB_DEVICE(0x0F98, 0x0201) }, /* Cyberbank USB Sync */ | 493 | { USB_DEVICE(0x0F98, 0x0201) }, /* Cyberbank USB Sync */ |
494 | { USB_DEVICE(0x0FB8, 0x3001) }, /* Wistron USB Sync */ | 494 | { USB_DEVICE(0x0FB8, 0x3001) }, /* Wistron USB Sync */ |
diff --git a/drivers/usb/serial/ipw.c b/drivers/usb/serial/ipw.c index 1b94daa6158..cbe5530f3db 100644 --- a/drivers/usb/serial/ipw.c +++ b/drivers/usb/serial/ipw.c | |||
@@ -227,7 +227,7 @@ static int ipw_open(struct usb_serial_port *port, struct file *filp) | |||
227 | 0, | 227 | 0, |
228 | 100000); | 228 | 100000); |
229 | if (result < 0) | 229 | if (result < 0) |
230 | dev_err(&port->dev, "Init of modem failed (error = %d)", result); | 230 | dev_err(&port->dev, "Init of modem failed (error = %d)\n", result); |
231 | 231 | ||
232 | /* reset the bulk pipes */ | 232 | /* reset the bulk pipes */ |
233 | usb_clear_halt(dev, usb_rcvbulkpipe(dev, port->bulk_in_endpointAddress)); | 233 | usb_clear_halt(dev, usb_rcvbulkpipe(dev, port->bulk_in_endpointAddress)); |
@@ -255,7 +255,7 @@ static int ipw_open(struct usb_serial_port *port, struct file *filp) | |||
255 | 0, | 255 | 0, |
256 | 100000); | 256 | 100000); |
257 | if (result < 0) | 257 | if (result < 0) |
258 | dev_err(&port->dev, "Enabling bulk RxRead failed (error = %d)", result); | 258 | dev_err(&port->dev, "Enabling bulk RxRead failed (error = %d)\n", result); |
259 | 259 | ||
260 | /*--4: setup the initial flowcontrol */ | 260 | /*--4: setup the initial flowcontrol */ |
261 | dbg("%s:setting init flowcontrol (%s)",__FUNCTION__,buf_flow_init); | 261 | dbg("%s:setting init flowcontrol (%s)",__FUNCTION__,buf_flow_init); |
@@ -268,7 +268,7 @@ static int ipw_open(struct usb_serial_port *port, struct file *filp) | |||
268 | 0x10, | 268 | 0x10, |
269 | 200000); | 269 | 200000); |
270 | if (result < 0) | 270 | if (result < 0) |
271 | dev_err(&port->dev, "initial flowcontrol failed (error = %d)", result); | 271 | dev_err(&port->dev, "initial flowcontrol failed (error = %d)\n", result); |
272 | 272 | ||
273 | 273 | ||
274 | /*--5: raise the dtr */ | 274 | /*--5: raise the dtr */ |
@@ -282,7 +282,7 @@ static int ipw_open(struct usb_serial_port *port, struct file *filp) | |||
282 | 0, | 282 | 0, |
283 | 200000); | 283 | 200000); |
284 | if (result < 0) | 284 | if (result < 0) |
285 | dev_err(&port->dev, "setting dtr failed (error = %d)", result); | 285 | dev_err(&port->dev, "setting dtr failed (error = %d)\n", result); |
286 | 286 | ||
287 | /*--6: raise the rts */ | 287 | /*--6: raise the rts */ |
288 | dbg("%s:raising rts",__FUNCTION__); | 288 | dbg("%s:raising rts",__FUNCTION__); |
@@ -295,7 +295,7 @@ static int ipw_open(struct usb_serial_port *port, struct file *filp) | |||
295 | 0, | 295 | 0, |
296 | 200000); | 296 | 200000); |
297 | if (result < 0) | 297 | if (result < 0) |
298 | dev_err(&port->dev, "setting dtr failed (error = %d)", result); | 298 | dev_err(&port->dev, "setting dtr failed (error = %d)\n", result); |
299 | 299 | ||
300 | kfree(buf_flow_init); | 300 | kfree(buf_flow_init); |
301 | return 0; | 301 | return 0; |
@@ -322,7 +322,7 @@ static void ipw_close(struct usb_serial_port *port, struct file * filp) | |||
322 | 0, | 322 | 0, |
323 | 200000); | 323 | 200000); |
324 | if (result < 0) | 324 | if (result < 0) |
325 | dev_err(&port->dev, "dropping dtr failed (error = %d)", result); | 325 | dev_err(&port->dev, "dropping dtr failed (error = %d)\n", result); |
326 | 326 | ||
327 | /*--2: drop the rts */ | 327 | /*--2: drop the rts */ |
328 | dbg("%s:dropping rts",__FUNCTION__); | 328 | dbg("%s:dropping rts",__FUNCTION__); |
@@ -334,7 +334,7 @@ static void ipw_close(struct usb_serial_port *port, struct file * filp) | |||
334 | 0, | 334 | 0, |
335 | 200000); | 335 | 200000); |
336 | if (result < 0) | 336 | if (result < 0) |
337 | dev_err(&port->dev, "dropping rts failed (error = %d)", result); | 337 | dev_err(&port->dev, "dropping rts failed (error = %d)\n", result); |
338 | 338 | ||
339 | 339 | ||
340 | /*--3: purge */ | 340 | /*--3: purge */ |
@@ -347,7 +347,7 @@ static void ipw_close(struct usb_serial_port *port, struct file * filp) | |||
347 | 0, | 347 | 0, |
348 | 200000); | 348 | 200000); |
349 | if (result < 0) | 349 | if (result < 0) |
350 | dev_err(&port->dev, "purge failed (error = %d)", result); | 350 | dev_err(&port->dev, "purge failed (error = %d)\n", result); |
351 | 351 | ||
352 | 352 | ||
353 | /* send RXBULK_off (tell modem to stop transmitting bulk data on rx chan) */ | 353 | /* send RXBULK_off (tell modem to stop transmitting bulk data on rx chan) */ |
@@ -361,7 +361,7 @@ static void ipw_close(struct usb_serial_port *port, struct file * filp) | |||
361 | 100000); | 361 | 100000); |
362 | 362 | ||
363 | if (result < 0) | 363 | if (result < 0) |
364 | dev_err(&port->dev, "Disabling bulk RxRead failed (error = %d)", result); | 364 | dev_err(&port->dev, "Disabling bulk RxRead failed (error = %d)\n", result); |
365 | 365 | ||
366 | /* shutdown any in-flight urbs that we know about */ | 366 | /* shutdown any in-flight urbs that we know about */ |
367 | usb_kill_urb(port->read_urb); | 367 | usb_kill_urb(port->read_urb); |
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c index 01e811becec..e02c198016b 100644 --- a/drivers/usb/serial/mos7720.c +++ b/drivers/usb/serial/mos7720.c | |||
@@ -478,7 +478,7 @@ static int mos7720_open(struct usb_serial_port *port, struct file * filp) | |||
478 | response = usb_submit_urb(port0->interrupt_in_urb, GFP_KERNEL); | 478 | response = usb_submit_urb(port0->interrupt_in_urb, GFP_KERNEL); |
479 | if (response) | 479 | if (response) |
480 | dev_err(&port->dev, | 480 | dev_err(&port->dev, |
481 | "%s - Error %d submitting control urb", | 481 | "%s - Error %d submitting control urb\n", |
482 | __FUNCTION__, response); | 482 | __FUNCTION__, response); |
483 | } | 483 | } |
484 | 484 | ||
@@ -492,7 +492,7 @@ static int mos7720_open(struct usb_serial_port *port, struct file * filp) | |||
492 | response = usb_submit_urb(port->read_urb, GFP_KERNEL); | 492 | response = usb_submit_urb(port->read_urb, GFP_KERNEL); |
493 | if (response) | 493 | if (response) |
494 | dev_err(&port->dev, | 494 | dev_err(&port->dev, |
495 | "%s - Error %d submitting read urb", __FUNCTION__, response); | 495 | "%s - Error %d submitting read urb\n", __FUNCTION__, response); |
496 | 496 | ||
497 | /* initialize our icount structure */ | 497 | /* initialize our icount structure */ |
498 | memset(&(mos7720_port->icount), 0x00, sizeof(mos7720_port->icount)); | 498 | memset(&(mos7720_port->icount), 0x00, sizeof(mos7720_port->icount)); |
diff --git a/drivers/usb/serial/oti6858.c b/drivers/usb/serial/oti6858.c index d19861166b5..eea226ae37b 100644 --- a/drivers/usb/serial/oti6858.c +++ b/drivers/usb/serial/oti6858.c | |||
@@ -256,7 +256,7 @@ static void setup_line(struct work_struct *work) | |||
256 | 100); | 256 | 100); |
257 | 257 | ||
258 | if (result != OTI6858_CTRL_PKT_SIZE) { | 258 | if (result != OTI6858_CTRL_PKT_SIZE) { |
259 | dev_err(&port->dev, "%s(): error reading status", __FUNCTION__); | 259 | dev_err(&port->dev, "%s(): error reading status\n", __FUNCTION__); |
260 | kfree(new_setup); | 260 | kfree(new_setup); |
261 | /* we will try again */ | 261 | /* we will try again */ |
262 | schedule_delayed_work(&priv->delayed_setup_work, msecs_to_jiffies(2)); | 262 | schedule_delayed_work(&priv->delayed_setup_work, msecs_to_jiffies(2)); |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index 0bb8de4cc52..959b3e4e907 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
@@ -48,7 +48,7 @@ enum devicetype { | |||
48 | static int sierra_set_power_state(struct usb_device *udev, __u16 swiState) | 48 | static int sierra_set_power_state(struct usb_device *udev, __u16 swiState) |
49 | { | 49 | { |
50 | int result; | 50 | int result; |
51 | dev_dbg(&udev->dev, "%s", "SET POWER STATE"); | 51 | dev_dbg(&udev->dev, "%s", "SET POWER STATE\n"); |
52 | result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), | 52 | result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), |
53 | 0x00, /* __u8 request */ | 53 | 0x00, /* __u8 request */ |
54 | 0x40, /* __u8 request type */ | 54 | 0x40, /* __u8 request type */ |
@@ -63,7 +63,7 @@ static int sierra_set_power_state(struct usb_device *udev, __u16 swiState) | |||
63 | static int sierra_set_ms_mode(struct usb_device *udev, __u16 eSocMode) | 63 | static int sierra_set_ms_mode(struct usb_device *udev, __u16 eSocMode) |
64 | { | 64 | { |
65 | int result; | 65 | int result; |
66 | dev_dbg(&udev->dev, "%s", "DEVICE MODE SWITCH"); | 66 | dev_dbg(&udev->dev, "%s", "DEVICE MODE SWITCH\n"); |
67 | result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), | 67 | result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), |
68 | SWIMS_USB_REQUEST_SetMode, /* __u8 request */ | 68 | SWIMS_USB_REQUEST_SetMode, /* __u8 request */ |
69 | SWIMS_USB_REQUEST_TYPE_SetMode, /* __u8 request type */ | 69 | SWIMS_USB_REQUEST_TYPE_SetMode, /* __u8 request type */ |
@@ -397,7 +397,7 @@ static void sierra_indat_callback(struct urb *urb) | |||
397 | err = usb_submit_urb(urb, GFP_ATOMIC); | 397 | err = usb_submit_urb(urb, GFP_ATOMIC); |
398 | if (err) | 398 | if (err) |
399 | dev_err(&port->dev, "resubmit read urb failed." | 399 | dev_err(&port->dev, "resubmit read urb failed." |
400 | "(%d)", err); | 400 | "(%d)\n", err); |
401 | } | 401 | } |
402 | } | 402 | } |
403 | return; | 403 | return; |
@@ -525,7 +525,7 @@ static int sierra_open(struct usb_serial_port *port, struct file *filp) | |||
525 | 525 | ||
526 | result = usb_submit_urb(urb, GFP_KERNEL); | 526 | result = usb_submit_urb(urb, GFP_KERNEL); |
527 | if (result) { | 527 | if (result) { |
528 | dev_err(&port->dev, "submit urb %d failed (%d) %d", | 528 | dev_err(&port->dev, "submit urb %d failed (%d) %d\n", |
529 | i, result, urb->transfer_buffer_length); | 529 | i, result, urb->transfer_buffer_length); |
530 | } | 530 | } |
531 | } | 531 | } |
@@ -538,7 +538,7 @@ static int sierra_open(struct usb_serial_port *port, struct file *filp) | |||
538 | if (port->interrupt_in_urb) { | 538 | if (port->interrupt_in_urb) { |
539 | result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); | 539 | result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); |
540 | if (result) | 540 | if (result) |
541 | dev_err(&port->dev, "submit irq_in urb failed %d", | 541 | dev_err(&port->dev, "submit irq_in urb failed %d\n", |
542 | result); | 542 | result); |
543 | } | 543 | } |
544 | return 0; | 544 | return 0; |
diff --git a/drivers/usb/storage/isd200.c b/drivers/usb/storage/isd200.c index 6831dca93c1..93a7724e167 100644 --- a/drivers/usb/storage/isd200.c +++ b/drivers/usb/storage/isd200.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * $Id: isd200.c,v 1.16 2002/04/22 03:39:43 mdharm Exp $ | 3 | * $Id: isd200.c,v 1.16 2002/04/22 03:39:43 mdharm Exp $ |
4 | * | 4 | * |
5 | * Current development and maintenance: | 5 | * Current development and maintenance: |
6 | * (C) 2001-2002 Björn Stenberg (bjorn@haxx.se) | 6 | * (C) 2001-2002 Björn Stenberg (bjorn@haxx.se) |
7 | * | 7 | * |
8 | * Developed with the assistance of: | 8 | * Developed with the assistance of: |
9 | * (C) 2002 Alan Stern <stern@rowland.org> | 9 | * (C) 2002 Alan Stern <stern@rowland.org> |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 9b656ec427d..22ab2380367 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -407,7 +407,7 @@ UNUSUAL_DEV( 0x04cb, 0x0100, 0x0000, 0x2210, | |||
407 | "FinePix 1400Zoom", | 407 | "FinePix 1400Zoom", |
408 | US_SC_UFI, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY | US_FL_SINGLE_LUN), | 408 | US_SC_UFI, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY | US_FL_SINGLE_LUN), |
409 | 409 | ||
410 | /* Reported by Peter Wächtler <pwaechtler@loewe-komp.de> | 410 | /* Reported by Peter Wächtler <pwaechtler@loewe-komp.de> |
411 | * The device needs the flags only. | 411 | * The device needs the flags only. |
412 | */ | 412 | */ |
413 | UNUSUAL_DEV( 0x04ce, 0x0002, 0x0074, 0x0074, | 413 | UNUSUAL_DEV( 0x04ce, 0x0002, 0x0074, 0x0074, |
@@ -1551,7 +1551,7 @@ UNUSUAL_DEV( 0x2735, 0x100b, 0x0000, 0x9999, | |||
1551 | US_FL_GO_SLOW ), | 1551 | US_FL_GO_SLOW ), |
1552 | 1552 | ||
1553 | /* | 1553 | /* |
1554 | * David Härdeman <david@2gen.com> | 1554 | * David Härdeman <david@2gen.com> |
1555 | * The key makes the SCSI stack print confusing (but harmless) messages | 1555 | * The key makes the SCSI stack print confusing (but harmless) messages |
1556 | */ | 1556 | */ |
1557 | UNUSUAL_DEV( 0x4146, 0xba01, 0x0100, 0x0100, | 1557 | UNUSUAL_DEV( 0x4146, 0xba01, 0x0100, 0x0100, |
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index 3451e8d03ab..ac6114eea0c 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c | |||
@@ -907,12 +907,9 @@ static int usb_stor_scan_thread(void * __us) | |||
907 | if (delay_use > 0) { | 907 | if (delay_use > 0) { |
908 | printk(KERN_DEBUG "usb-storage: waiting for device " | 908 | printk(KERN_DEBUG "usb-storage: waiting for device " |
909 | "to settle before scanning\n"); | 909 | "to settle before scanning\n"); |
910 | retry: | 910 | wait_event_freezable_timeout(us->delay_wait, |
911 | wait_event_interruptible_timeout(us->delay_wait, | ||
912 | test_bit(US_FLIDX_DISCONNECTING, &us->flags), | 911 | test_bit(US_FLIDX_DISCONNECTING, &us->flags), |
913 | delay_use * HZ); | 912 | delay_use * HZ); |
914 | if (try_to_freeze()) | ||
915 | goto retry; | ||
916 | } | 913 | } |
917 | 914 | ||
918 | /* If the device is still connected, perform the scanning */ | 915 | /* If the device is still connected, perform the scanning */ |
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index b3bf4ecc983..fb9d8d0b2c0 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
@@ -661,7 +661,7 @@ config FB_HECUBA | |||
661 | help | 661 | help |
662 | This enables support for the Hecuba board. This driver was tested | 662 | This enables support for the Hecuba board. This driver was tested |
663 | with an E-Ink 800x600 display and x86 SBCs through a 16 bit GPIO | 663 | with an E-Ink 800x600 display and x86 SBCs through a 16 bit GPIO |
664 | interface (8 bit data, 4 bit control). If you anticpate using | 664 | interface (8 bit data, 4 bit control). If you anticipate using |
665 | this driver, say Y or M; otherwise say N. You must specify the | 665 | this driver, say Y or M; otherwise say N. You must specify the |
666 | GPIO IO address to be used for setting control and data. | 666 | GPIO IO address to be used for setting control and data. |
667 | 667 | ||
@@ -815,7 +815,7 @@ config FB_XVR500 | |||
815 | help | 815 | help |
816 | This is the framebuffer device for the Sun XVR-500 and similar | 816 | This is the framebuffer device for the Sun XVR-500 and similar |
817 | graphics cards based upon the 3DLABS Wildcat chipset. The driver | 817 | graphics cards based upon the 3DLABS Wildcat chipset. The driver |
818 | only works on sparc64 systems where the system firwmare has | 818 | only works on sparc64 systems where the system firmware has |
819 | mostly initialized the card already. It is treated as a | 819 | mostly initialized the card already. It is treated as a |
820 | completely dumb framebuffer device. | 820 | completely dumb framebuffer device. |
821 | 821 | ||
@@ -828,7 +828,7 @@ config FB_XVR2500 | |||
828 | help | 828 | help |
829 | This is the framebuffer device for the Sun XVR-2500 and similar | 829 | This is the framebuffer device for the Sun XVR-2500 and similar |
830 | graphics cards based upon the 3DLABS Wildcat chipset. The driver | 830 | graphics cards based upon the 3DLABS Wildcat chipset. The driver |
831 | only works on sparc64 systems where the system firwmare has | 831 | only works on sparc64 systems where the system firmware has |
832 | mostly initialized the card already. It is treated as a | 832 | mostly initialized the card already. It is treated as a |
833 | completely dumb framebuffer device. | 833 | completely dumb framebuffer device. |
834 | 834 | ||
diff --git a/drivers/video/amifb.c b/drivers/video/amifb.c index f2e243c353f..4c9ec3f58c5 100644 --- a/drivers/video/amifb.c +++ b/drivers/video/amifb.c | |||
@@ -112,7 +112,7 @@ | |||
112 | +----------+---------------------------------------------+----------+-------+ | 112 | +----------+---------------------------------------------+----------+-------+ |
113 | | | ^ | | | | 113 | | | ^ | | | |
114 | | | |upper_margin | | | | 114 | | | |upper_margin | | | |
115 | | | ¥ | | | | 115 | | | v | | | |
116 | +----------###############################################----------+-------+ | 116 | +----------###############################################----------+-------+ |
117 | | # ^ # | | | 117 | | # ^ # | | |
118 | | # | # | | | 118 | | # | # | | |
@@ -133,15 +133,15 @@ | |||
133 | | # | # | | | 133 | | # | # | | |
134 | | # | # | | | 134 | | # | # | | |
135 | | # | # | | | 135 | | # | # | | |
136 | | # ¥ # | | | 136 | | # v # | | |
137 | +----------###############################################----------+-------+ | 137 | +----------###############################################----------+-------+ |
138 | | | ^ | | | | 138 | | | ^ | | | |
139 | | | |lower_margin | | | | 139 | | | |lower_margin | | | |
140 | | | ¥ | | | | 140 | | | v | | | |
141 | +----------+---------------------------------------------+----------+-------+ | 141 | +----------+---------------------------------------------+----------+-------+ |
142 | | | ^ | | | | 142 | | | ^ | | | |
143 | | | |vsync_len | | | | 143 | | | |vsync_len | | | |
144 | | | ¥ | | | | 144 | | | v | | | |
145 | +----------+---------------------------------------------+----------+-------+ | 145 | +----------+---------------------------------------------+----------+-------+ |
146 | 146 | ||
147 | 147 | ||
@@ -325,7 +325,7 @@ | |||
325 | CCIR -> PAL | 325 | CCIR -> PAL |
326 | ----------- | 326 | ----------- |
327 | 327 | ||
328 | - a scanline is 64 µs long, of which 52.48 µs are visible. This is about | 328 | - a scanline is 64 µs long, of which 52.48 µs are visible. This is about |
329 | 736 visible 70 ns pixels per line. | 329 | 736 visible 70 ns pixels per line. |
330 | - we have 625 scanlines, of which 575 are visible (interlaced); after | 330 | - we have 625 scanlines, of which 575 are visible (interlaced); after |
331 | rounding this becomes 576. | 331 | rounding this becomes 576. |
@@ -333,7 +333,7 @@ | |||
333 | RETMA -> NTSC | 333 | RETMA -> NTSC |
334 | ------------- | 334 | ------------- |
335 | 335 | ||
336 | - a scanline is 63.5 µs long, of which 53.5 µs are visible. This is about | 336 | - a scanline is 63.5 µs long, of which 53.5 µs are visible. This is about |
337 | 736 visible 70 ns pixels per line. | 337 | 736 visible 70 ns pixels per line. |
338 | - we have 525 scanlines, of which 485 are visible (interlaced); after | 338 | - we have 525 scanlines, of which 485 are visible (interlaced); after |
339 | rounding this becomes 484. | 339 | rounding this becomes 484. |
@@ -802,7 +802,7 @@ static u_short ecs_palette[32]; | |||
802 | 802 | ||
803 | static u_short do_vmode_full = 0; /* Change the Video Mode */ | 803 | static u_short do_vmode_full = 0; /* Change the Video Mode */ |
804 | static u_short do_vmode_pan = 0; /* Update the Video Mode */ | 804 | static u_short do_vmode_pan = 0; /* Update the Video Mode */ |
805 | static short do_blank = 0; /* (Un)Blank the Screen (±1) */ | 805 | static short do_blank = 0; /* (Un)Blank the Screen (±1) */ |
806 | static u_short do_cursor = 0; /* Move the Cursor */ | 806 | static u_short do_cursor = 0; /* Move the Cursor */ |
807 | 807 | ||
808 | 808 | ||
diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c index abe0c435a66..d775eb6590b 100644 --- a/drivers/video/aty/atyfb_base.c +++ b/drivers/video/aty/atyfb_base.c | |||
@@ -26,7 +26,7 @@ | |||
26 | * Anthony Tong <atong@uiuc.edu> | 26 | * Anthony Tong <atong@uiuc.edu> |
27 | * | 27 | * |
28 | * Generic LCD support written by Daniel Mantione, ported from 2.4.20 by Alex Kern | 28 | * Generic LCD support written by Daniel Mantione, ported from 2.4.20 by Alex Kern |
29 | * Many Thanks to Ville Syrjälä for patches and fixing nasting 16 bit color bug. | 29 | * Many Thanks to Ville Syrjälä for patches and fixing nasting 16 bit color bug. |
30 | * | 30 | * |
31 | * This file is subject to the terms and conditions of the GNU General Public | 31 | * This file is subject to the terms and conditions of the GNU General Public |
32 | * License. See the file COPYING in the main directory of this archive for | 32 | * License. See the file COPYING in the main directory of this archive for |
diff --git a/drivers/video/au1100fb.c b/drivers/video/au1100fb.c index 832e4613673..62bd4441b5e 100644 --- a/drivers/video/au1100fb.c +++ b/drivers/video/au1100fb.c | |||
@@ -457,7 +457,7 @@ static struct fb_ops au1100fb_ops = | |||
457 | 457 | ||
458 | /* AU1100 LCD controller device driver */ | 458 | /* AU1100 LCD controller device driver */ |
459 | 459 | ||
460 | int au1100fb_drv_probe(struct device *dev) | 460 | static int __init au1100fb_drv_probe(struct device *dev) |
461 | { | 461 | { |
462 | struct au1100fb_device *fbdev = NULL; | 462 | struct au1100fb_device *fbdev = NULL; |
463 | struct resource *regs_res; | 463 | struct resource *regs_res; |
diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig index a22ccf9485a..267422f6625 100644 --- a/drivers/video/console/Kconfig +++ b/drivers/video/console/Kconfig | |||
@@ -27,7 +27,7 @@ config VGACON_SOFT_SCROLLBACK | |||
27 | The scrollback buffer of the standard VGA console is located in | 27 | The scrollback buffer of the standard VGA console is located in |
28 | the VGA RAM. The size of this RAM is fixed and is quite small. | 28 | the VGA RAM. The size of this RAM is fixed and is quite small. |
29 | If you require a larger scrollback buffer, this can be placed in | 29 | If you require a larger scrollback buffer, this can be placed in |
30 | System RAM which is dynamically allocated during intialization. | 30 | System RAM which is dynamically allocated during initialization. |
31 | Placing the scrollback buffer in System RAM will slightly slow | 31 | Placing the scrollback buffer in System RAM will slightly slow |
32 | down the console. | 32 | down the console. |
33 | 33 | ||
diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c index f57d7b2758b..d31b203bf65 100644 --- a/drivers/video/console/newport_con.c +++ b/drivers/video/console/newport_con.c | |||
@@ -98,7 +98,7 @@ static inline void newport_init_cmap(void) | |||
98 | } | 98 | } |
99 | } | 99 | } |
100 | 100 | ||
101 | static struct linux_logo *newport_show_logo(void) | 101 | static const struct linux_logo *newport_show_logo(void) |
102 | { | 102 | { |
103 | #ifdef CONFIG_LOGO_SGI_CLUT224 | 103 | #ifdef CONFIG_LOGO_SGI_CLUT224 |
104 | const struct linux_logo *logo = fb_find_logo(8); | 104 | const struct linux_logo *logo = fb_find_logo(8); |
@@ -108,8 +108,8 @@ static struct linux_logo *newport_show_logo(void) | |||
108 | 108 | ||
109 | if (!logo) | 109 | if (!logo) |
110 | return NULL; | 110 | return NULL; |
111 | *clut = logo->clut; | 111 | clut = logo->clut; |
112 | *data = logo->data; | 112 | data = logo->data; |
113 | 113 | ||
114 | for (i = 0; i < logo->clutsize; i++) { | 114 | for (i = 0; i < logo->clutsize; i++) { |
115 | newport_bfwait(npregs); | 115 | newport_bfwait(npregs); |
diff --git a/drivers/video/cyber2000fb.c b/drivers/video/cyber2000fb.c index 9bb2cbfe4a3..5fb8675e0d6 100644 --- a/drivers/video/cyber2000fb.c +++ b/drivers/video/cyber2000fb.c | |||
@@ -62,7 +62,7 @@ struct cfb_info { | |||
62 | struct display_switch *dispsw; | 62 | struct display_switch *dispsw; |
63 | struct display *display; | 63 | struct display *display; |
64 | struct pci_dev *dev; | 64 | struct pci_dev *dev; |
65 | unsigned char __iomem *region; | 65 | unsigned char __iomem *region; |
66 | unsigned char __iomem *regs; | 66 | unsigned char __iomem *regs; |
67 | u_int id; | 67 | u_int id; |
68 | int func_use_count; | 68 | int func_use_count; |
@@ -97,11 +97,11 @@ MODULE_PARM_DESC(default_font, "Default font name"); | |||
97 | /* | 97 | /* |
98 | * Our access methods. | 98 | * Our access methods. |
99 | */ | 99 | */ |
100 | #define cyber2000fb_writel(val,reg,cfb) writel(val, (cfb)->regs + (reg)) | 100 | #define cyber2000fb_writel(val, reg, cfb) writel(val, (cfb)->regs + (reg)) |
101 | #define cyber2000fb_writew(val,reg,cfb) writew(val, (cfb)->regs + (reg)) | 101 | #define cyber2000fb_writew(val, reg, cfb) writew(val, (cfb)->regs + (reg)) |
102 | #define cyber2000fb_writeb(val,reg,cfb) writeb(val, (cfb)->regs + (reg)) | 102 | #define cyber2000fb_writeb(val, reg, cfb) writeb(val, (cfb)->regs + (reg)) |
103 | 103 | ||
104 | #define cyber2000fb_readb(reg,cfb) readb((cfb)->regs + (reg)) | 104 | #define cyber2000fb_readb(reg, cfb) readb((cfb)->regs + (reg)) |
105 | 105 | ||
106 | static inline void | 106 | static inline void |
107 | cyber2000_crtcw(unsigned int reg, unsigned int val, struct cfb_info *cfb) | 107 | cyber2000_crtcw(unsigned int reg, unsigned int val, struct cfb_info *cfb) |
@@ -221,12 +221,8 @@ cyber2000fb_copyarea(struct fb_info *info, const struct fb_copyarea *region) | |||
221 | static void | 221 | static void |
222 | cyber2000fb_imageblit(struct fb_info *info, const struct fb_image *image) | 222 | cyber2000fb_imageblit(struct fb_info *info, const struct fb_image *image) |
223 | { | 223 | { |
224 | // struct cfb_info *cfb = (struct cfb_info *)info; | 224 | cfb_imageblit(info, image); |
225 | 225 | return; | |
226 | // if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) { | ||
227 | cfb_imageblit(info, image); | ||
228 | return; | ||
229 | // } | ||
230 | } | 226 | } |
231 | 227 | ||
232 | static int cyber2000fb_sync(struct fb_info *info) | 228 | static int cyber2000fb_sync(struct fb_info *info) |
@@ -277,12 +273,12 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
277 | 273 | ||
278 | /* | 274 | /* |
279 | * Pseudocolour: | 275 | * Pseudocolour: |
280 | * 8 8 | 276 | * 8 8 |
281 | * pixel --/--+--/--> red lut --> red dac | 277 | * pixel --/--+--/--> red lut --> red dac |
282 | * | 8 | 278 | * | 8 |
283 | * +--/--> green lut --> green dac | 279 | * +--/--> green lut --> green dac |
284 | * | 8 | 280 | * | 8 |
285 | * +--/--> blue lut --> blue dac | 281 | * +--/--> blue lut --> blue dac |
286 | */ | 282 | */ |
287 | case FB_VISUAL_PSEUDOCOLOR: | 283 | case FB_VISUAL_PSEUDOCOLOR: |
288 | if (regno >= NR_PALETTE) | 284 | if (regno >= NR_PALETTE) |
@@ -292,9 +288,9 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
292 | green >>= 8; | 288 | green >>= 8; |
293 | blue >>= 8; | 289 | blue >>= 8; |
294 | 290 | ||
295 | cfb->palette[regno].red = red; | 291 | cfb->palette[regno].red = red; |
296 | cfb->palette[regno].green = green; | 292 | cfb->palette[regno].green = green; |
297 | cfb->palette[regno].blue = blue; | 293 | cfb->palette[regno].blue = blue; |
298 | 294 | ||
299 | cyber2000fb_writeb(regno, 0x3c8, cfb); | 295 | cyber2000fb_writeb(regno, 0x3c8, cfb); |
300 | cyber2000fb_writeb(red, 0x3c9, cfb); | 296 | cyber2000fb_writeb(red, 0x3c9, cfb); |
@@ -304,12 +300,12 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
304 | 300 | ||
305 | /* | 301 | /* |
306 | * Direct colour: | 302 | * Direct colour: |
307 | * n rl | 303 | * n rl |
308 | * pixel --/--+--/--> red lut --> red dac | 304 | * pixel --/--+--/--> red lut --> red dac |
309 | * | gl | 305 | * | gl |
310 | * +--/--> green lut --> green dac | 306 | * +--/--> green lut --> green dac |
311 | * | bl | 307 | * | bl |
312 | * +--/--> blue lut --> blue dac | 308 | * +--/--> blue lut --> blue dac |
313 | * n = bpp, rl = red length, gl = green length, bl = blue length | 309 | * n = bpp, rl = red length, gl = green length, bl = blue length |
314 | */ | 310 | */ |
315 | case FB_VISUAL_DIRECTCOLOR: | 311 | case FB_VISUAL_DIRECTCOLOR: |
@@ -325,9 +321,11 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
325 | * to the high 6 bits of the LUT. | 321 | * to the high 6 bits of the LUT. |
326 | */ | 322 | */ |
327 | cyber2000fb_writeb(regno << 2, 0x3c8, cfb); | 323 | cyber2000fb_writeb(regno << 2, 0x3c8, cfb); |
328 | cyber2000fb_writeb(cfb->palette[regno >> 1].red, 0x3c9, cfb); | 324 | cyber2000fb_writeb(cfb->palette[regno >> 1].red, |
325 | 0x3c9, cfb); | ||
329 | cyber2000fb_writeb(green, 0x3c9, cfb); | 326 | cyber2000fb_writeb(green, 0x3c9, cfb); |
330 | cyber2000fb_writeb(cfb->palette[regno >> 1].blue, 0x3c9, cfb); | 327 | cyber2000fb_writeb(cfb->palette[regno >> 1].blue, |
328 | 0x3c9, cfb); | ||
331 | 329 | ||
332 | green = cfb->palette[regno << 3].green; | 330 | green = cfb->palette[regno << 3].green; |
333 | 331 | ||
@@ -335,9 +333,9 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
335 | } | 333 | } |
336 | 334 | ||
337 | if (var->green.length >= 5 && regno < 32) { | 335 | if (var->green.length >= 5 && regno < 32) { |
338 | cfb->palette[regno << 3].red = red; | 336 | cfb->palette[regno << 3].red = red; |
339 | cfb->palette[regno << 3].green = green; | 337 | cfb->palette[regno << 3].green = green; |
340 | cfb->palette[regno << 3].blue = blue; | 338 | cfb->palette[regno << 3].blue = blue; |
341 | 339 | ||
342 | /* | 340 | /* |
343 | * The 5 bits of each colour component are | 341 | * The 5 bits of each colour component are |
@@ -351,9 +349,9 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
351 | } | 349 | } |
352 | 350 | ||
353 | if (var->green.length == 4 && regno < 16) { | 351 | if (var->green.length == 4 && regno < 16) { |
354 | cfb->palette[regno << 4].red = red; | 352 | cfb->palette[regno << 4].red = red; |
355 | cfb->palette[regno << 4].green = green; | 353 | cfb->palette[regno << 4].green = green; |
356 | cfb->palette[regno << 4].blue = blue; | 354 | cfb->palette[regno << 4].blue = blue; |
357 | 355 | ||
358 | /* | 356 | /* |
359 | * The 5 bits of each colour component are | 357 | * The 5 bits of each colour component are |
@@ -377,12 +375,12 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
377 | 375 | ||
378 | /* | 376 | /* |
379 | * True colour: | 377 | * True colour: |
380 | * n rl | 378 | * n rl |
381 | * pixel --/--+--/--> red dac | 379 | * pixel --/--+--/--> red dac |
382 | * | gl | 380 | * | gl |
383 | * +--/--> green dac | 381 | * +--/--> green dac |
384 | * | bl | 382 | * | bl |
385 | * +--/--> blue dac | 383 | * +--/--> blue dac |
386 | * n = bpp, rl = red length, gl = green length, bl = blue length | 384 | * n = bpp, rl = red length, gl = green length, bl = blue length |
387 | */ | 385 | */ |
388 | case FB_VISUAL_TRUECOLOR: | 386 | case FB_VISUAL_TRUECOLOR: |
@@ -494,9 +492,9 @@ static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw) | |||
494 | 492 | ||
495 | /* PLL registers */ | 493 | /* PLL registers */ |
496 | cyber2000_grphw(EXT_DCLK_MULT, hw->clock_mult, cfb); | 494 | cyber2000_grphw(EXT_DCLK_MULT, hw->clock_mult, cfb); |
497 | cyber2000_grphw(EXT_DCLK_DIV, hw->clock_div, cfb); | 495 | cyber2000_grphw(EXT_DCLK_DIV, hw->clock_div, cfb); |
498 | cyber2000_grphw(EXT_MCLK_MULT, cfb->mclk_mult, cfb); | 496 | cyber2000_grphw(EXT_MCLK_MULT, cfb->mclk_mult, cfb); |
499 | cyber2000_grphw(EXT_MCLK_DIV, cfb->mclk_div, cfb); | 497 | cyber2000_grphw(EXT_MCLK_DIV, cfb->mclk_div, cfb); |
500 | cyber2000_grphw(0x90, 0x01, cfb); | 498 | cyber2000_grphw(0x90, 0x01, cfb); |
501 | cyber2000_grphw(0xb9, 0x80, cfb); | 499 | cyber2000_grphw(0xb9, 0x80, cfb); |
502 | cyber2000_grphw(0xb9, 0x00, cfb); | 500 | cyber2000_grphw(0xb9, 0x00, cfb); |
@@ -515,8 +513,8 @@ static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw) | |||
515 | /* | 513 | /* |
516 | * Set up accelerator registers | 514 | * Set up accelerator registers |
517 | */ | 515 | */ |
518 | cyber2000fb_writew(hw->width, CO_REG_SRC_WIDTH, cfb); | 516 | cyber2000fb_writew(hw->width, CO_REG_SRC_WIDTH, cfb); |
519 | cyber2000fb_writew(hw->width, CO_REG_DEST_WIDTH, cfb); | 517 | cyber2000fb_writew(hw->width, CO_REG_DEST_WIDTH, cfb); |
520 | cyber2000fb_writeb(hw->co_pixfmt, CO_REG_PIXFMT, cfb); | 518 | cyber2000fb_writeb(hw->co_pixfmt, CO_REG_PIXFMT, cfb); |
521 | } | 519 | } |
522 | 520 | ||
@@ -549,15 +547,15 @@ cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb, | |||
549 | { | 547 | { |
550 | u_int Htotal, Hblankend, Hsyncend; | 548 | u_int Htotal, Hblankend, Hsyncend; |
551 | u_int Vtotal, Vdispend, Vblankstart, Vblankend, Vsyncstart, Vsyncend; | 549 | u_int Vtotal, Vdispend, Vblankstart, Vblankend, Vsyncstart, Vsyncend; |
552 | #define BIT(v,b1,m,b2) (((v >> b1) & m) << b2) | 550 | #define ENCODE_BIT(v, b1, m, b2) ((((v) >> (b1)) & (m)) << (b2)) |
553 | 551 | ||
554 | hw->crtc[13] = hw->pitch; | 552 | hw->crtc[13] = hw->pitch; |
555 | hw->crtc[17] = 0xe3; | 553 | hw->crtc[17] = 0xe3; |
556 | hw->crtc[14] = 0; | 554 | hw->crtc[14] = 0; |
557 | hw->crtc[8] = 0; | 555 | hw->crtc[8] = 0; |
558 | 556 | ||
559 | Htotal = var->xres + var->right_margin + | 557 | Htotal = var->xres + var->right_margin + |
560 | var->hsync_len + var->left_margin; | 558 | var->hsync_len + var->left_margin; |
561 | 559 | ||
562 | if (Htotal > 2080) | 560 | if (Htotal > 2080) |
563 | return -EINVAL; | 561 | return -EINVAL; |
@@ -567,15 +565,15 @@ cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb, | |||
567 | hw->crtc[2] = var->xres >> 3; | 565 | hw->crtc[2] = var->xres >> 3; |
568 | hw->crtc[4] = (var->xres + var->right_margin) >> 3; | 566 | hw->crtc[4] = (var->xres + var->right_margin) >> 3; |
569 | 567 | ||
570 | Hblankend = (Htotal - 4*8) >> 3; | 568 | Hblankend = (Htotal - 4 * 8) >> 3; |
571 | 569 | ||
572 | hw->crtc[3] = BIT(Hblankend, 0, 0x1f, 0) | | 570 | hw->crtc[3] = ENCODE_BIT(Hblankend, 0, 0x1f, 0) | |
573 | BIT(1, 0, 0x01, 7); | 571 | ENCODE_BIT(1, 0, 0x01, 7); |
574 | 572 | ||
575 | Hsyncend = (var->xres + var->right_margin + var->hsync_len) >> 3; | 573 | Hsyncend = (var->xres + var->right_margin + var->hsync_len) >> 3; |
576 | 574 | ||
577 | hw->crtc[5] = BIT(Hsyncend, 0, 0x1f, 0) | | 575 | hw->crtc[5] = ENCODE_BIT(Hsyncend, 0, 0x1f, 0) | |
578 | BIT(Hblankend, 5, 0x01, 7); | 576 | ENCODE_BIT(Hblankend, 5, 0x01, 7); |
579 | 577 | ||
580 | Vdispend = var->yres - 1; | 578 | Vdispend = var->yres - 1; |
581 | Vsyncstart = var->yres + var->lower_margin; | 579 | Vsyncstart = var->yres + var->lower_margin; |
@@ -590,20 +588,20 @@ cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb, | |||
590 | Vblankend = Vtotal - 10; | 588 | Vblankend = Vtotal - 10; |
591 | 589 | ||
592 | hw->crtc[6] = Vtotal; | 590 | hw->crtc[6] = Vtotal; |
593 | hw->crtc[7] = BIT(Vtotal, 8, 0x01, 0) | | 591 | hw->crtc[7] = ENCODE_BIT(Vtotal, 8, 0x01, 0) | |
594 | BIT(Vdispend, 8, 0x01, 1) | | 592 | ENCODE_BIT(Vdispend, 8, 0x01, 1) | |
595 | BIT(Vsyncstart, 8, 0x01, 2) | | 593 | ENCODE_BIT(Vsyncstart, 8, 0x01, 2) | |
596 | BIT(Vblankstart,8, 0x01, 3) | | 594 | ENCODE_BIT(Vblankstart, 8, 0x01, 3) | |
597 | BIT(1, 0, 0x01, 4) | | 595 | ENCODE_BIT(1, 0, 0x01, 4) | |
598 | BIT(Vtotal, 9, 0x01, 5) | | 596 | ENCODE_BIT(Vtotal, 9, 0x01, 5) | |
599 | BIT(Vdispend, 9, 0x01, 6) | | 597 | ENCODE_BIT(Vdispend, 9, 0x01, 6) | |
600 | BIT(Vsyncstart, 9, 0x01, 7); | 598 | ENCODE_BIT(Vsyncstart, 9, 0x01, 7); |
601 | hw->crtc[9] = BIT(0, 0, 0x1f, 0) | | 599 | hw->crtc[9] = ENCODE_BIT(0, 0, 0x1f, 0) | |
602 | BIT(Vblankstart,9, 0x01, 5) | | 600 | ENCODE_BIT(Vblankstart, 9, 0x01, 5) | |
603 | BIT(1, 0, 0x01, 6); | 601 | ENCODE_BIT(1, 0, 0x01, 6); |
604 | hw->crtc[10] = Vsyncstart; | 602 | hw->crtc[10] = Vsyncstart; |
605 | hw->crtc[11] = BIT(Vsyncend, 0, 0x0f, 0) | | 603 | hw->crtc[11] = ENCODE_BIT(Vsyncend, 0, 0x0f, 0) | |
606 | BIT(1, 0, 0x01, 7); | 604 | ENCODE_BIT(1, 0, 0x01, 7); |
607 | hw->crtc[12] = Vdispend; | 605 | hw->crtc[12] = Vdispend; |
608 | hw->crtc[15] = Vblankstart; | 606 | hw->crtc[15] = Vblankstart; |
609 | hw->crtc[16] = Vblankend; | 607 | hw->crtc[16] = Vblankend; |
@@ -615,10 +613,10 @@ cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb, | |||
615 | * 4=LINECOMP:10 5-IVIDEO 6=FIXCNT | 613 | * 4=LINECOMP:10 5-IVIDEO 6=FIXCNT |
616 | */ | 614 | */ |
617 | hw->crtc_ofl = | 615 | hw->crtc_ofl = |
618 | BIT(Vtotal, 10, 0x01, 0) | | 616 | ENCODE_BIT(Vtotal, 10, 0x01, 0) | |
619 | BIT(Vdispend, 10, 0x01, 1) | | 617 | ENCODE_BIT(Vdispend, 10, 0x01, 1) | |
620 | BIT(Vsyncstart, 10, 0x01, 2) | | 618 | ENCODE_BIT(Vsyncstart, 10, 0x01, 2) | |
621 | BIT(Vblankstart,10, 0x01, 3) | | 619 | ENCODE_BIT(Vblankstart, 10, 0x01, 3) | |
622 | EXT_CRT_VRTOFL_LINECOMP10; | 620 | EXT_CRT_VRTOFL_LINECOMP10; |
623 | 621 | ||
624 | /* woody: set the interlaced bit... */ | 622 | /* woody: set the interlaced bit... */ |
@@ -750,11 +748,11 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
750 | var->red.msb_right = 0; | 748 | var->red.msb_right = 0; |
751 | var->green.msb_right = 0; | 749 | var->green.msb_right = 0; |
752 | var->blue.msb_right = 0; | 750 | var->blue.msb_right = 0; |
751 | var->transp.offset = 0; | ||
752 | var->transp.length = 0; | ||
753 | 753 | ||
754 | switch (var->bits_per_pixel) { | 754 | switch (var->bits_per_pixel) { |
755 | case 8: /* PSEUDOCOLOUR, 256 */ | 755 | case 8: /* PSEUDOCOLOUR, 256 */ |
756 | var->transp.offset = 0; | ||
757 | var->transp.length = 0; | ||
758 | var->red.offset = 0; | 756 | var->red.offset = 0; |
759 | var->red.length = 8; | 757 | var->red.length = 8; |
760 | var->green.offset = 0; | 758 | var->green.offset = 0; |
@@ -766,8 +764,6 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
766 | case 16:/* DIRECTCOLOUR, 64k or 32k */ | 764 | case 16:/* DIRECTCOLOUR, 64k or 32k */ |
767 | switch (var->green.length) { | 765 | switch (var->green.length) { |
768 | case 6: /* RGB565, 64k */ | 766 | case 6: /* RGB565, 64k */ |
769 | var->transp.offset = 0; | ||
770 | var->transp.length = 0; | ||
771 | var->red.offset = 11; | 767 | var->red.offset = 11; |
772 | var->red.length = 5; | 768 | var->red.length = 5; |
773 | var->green.offset = 5; | 769 | var->green.offset = 5; |
@@ -778,8 +774,6 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
778 | 774 | ||
779 | default: | 775 | default: |
780 | case 5: /* RGB555, 32k */ | 776 | case 5: /* RGB555, 32k */ |
781 | var->transp.offset = 0; | ||
782 | var->transp.length = 0; | ||
783 | var->red.offset = 10; | 777 | var->red.offset = 10; |
784 | var->red.length = 5; | 778 | var->red.length = 5; |
785 | var->green.offset = 5; | 779 | var->green.offset = 5; |
@@ -802,8 +796,6 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
802 | break; | 796 | break; |
803 | 797 | ||
804 | case 24:/* TRUECOLOUR, 16m */ | 798 | case 24:/* TRUECOLOUR, 16m */ |
805 | var->transp.offset = 0; | ||
806 | var->transp.length = 0; | ||
807 | var->red.offset = 16; | 799 | var->red.offset = 16; |
808 | var->red.length = 8; | 800 | var->red.length = 8; |
809 | var->green.offset = 8; | 801 | var->green.offset = 8; |
@@ -830,7 +822,7 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
830 | mem = var->xres_virtual * var->yres_virtual * (var->bits_per_pixel / 8); | 822 | mem = var->xres_virtual * var->yres_virtual * (var->bits_per_pixel / 8); |
831 | if (mem > cfb->fb.fix.smem_len) | 823 | if (mem > cfb->fb.fix.smem_len) |
832 | var->yres_virtual = cfb->fb.fix.smem_len * 8 / | 824 | var->yres_virtual = cfb->fb.fix.smem_len * 8 / |
833 | (var->bits_per_pixel * var->xres_virtual); | 825 | (var->bits_per_pixel * var->xres_virtual); |
834 | 826 | ||
835 | if (var->yres > var->yres_virtual) | 827 | if (var->yres > var->yres_virtual) |
836 | var->yres = var->yres_virtual; | 828 | var->yres = var->yres_virtual; |
@@ -921,7 +913,7 @@ static int cyber2000fb_set_par(struct fb_info *info) | |||
921 | hw.fetch <<= 1; | 913 | hw.fetch <<= 1; |
922 | hw.fetch += 1; | 914 | hw.fetch += 1; |
923 | 915 | ||
924 | cfb->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8; | 916 | cfb->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8; |
925 | 917 | ||
926 | /* | 918 | /* |
927 | * Same here - if the size of the video mode exceeds the | 919 | * Same here - if the size of the video mode exceeds the |
@@ -952,7 +944,6 @@ static int cyber2000fb_set_par(struct fb_info *info) | |||
952 | return 0; | 944 | return 0; |
953 | } | 945 | } |
954 | 946 | ||
955 | |||
956 | /* | 947 | /* |
957 | * Pan or Wrap the Display | 948 | * Pan or Wrap the Display |
958 | */ | 949 | */ |
@@ -1002,15 +993,15 @@ static int cyber2000fb_blank(int blank, struct fb_info *info) | |||
1002 | switch (blank) { | 993 | switch (blank) { |
1003 | case FB_BLANK_POWERDOWN: /* powerdown - both sync lines down */ | 994 | case FB_BLANK_POWERDOWN: /* powerdown - both sync lines down */ |
1004 | sync = EXT_SYNC_CTL_VS_0 | EXT_SYNC_CTL_HS_0; | 995 | sync = EXT_SYNC_CTL_VS_0 | EXT_SYNC_CTL_HS_0; |
1005 | break; | 996 | break; |
1006 | case FB_BLANK_HSYNC_SUSPEND: /* hsync off */ | 997 | case FB_BLANK_HSYNC_SUSPEND: /* hsync off */ |
1007 | sync = EXT_SYNC_CTL_VS_NORMAL | EXT_SYNC_CTL_HS_0; | 998 | sync = EXT_SYNC_CTL_VS_NORMAL | EXT_SYNC_CTL_HS_0; |
1008 | break; | 999 | break; |
1009 | case FB_BLANK_VSYNC_SUSPEND: /* vsync off */ | 1000 | case FB_BLANK_VSYNC_SUSPEND: /* vsync off */ |
1010 | sync = EXT_SYNC_CTL_VS_0 | EXT_SYNC_CTL_HS_NORMAL; | 1001 | sync = EXT_SYNC_CTL_VS_0 | EXT_SYNC_CTL_HS_NORMAL; |
1011 | break; | 1002 | break; |
1012 | case FB_BLANK_NORMAL: /* soft blank */ | 1003 | case FB_BLANK_NORMAL: /* soft blank */ |
1013 | default: /* unblank */ | 1004 | default: /* unblank */ |
1014 | break; | 1005 | break; |
1015 | } | 1006 | } |
1016 | 1007 | ||
@@ -1018,7 +1009,8 @@ static int cyber2000fb_blank(int blank, struct fb_info *info) | |||
1018 | 1009 | ||
1019 | if (blank <= 1) { | 1010 | if (blank <= 1) { |
1020 | /* turn on ramdacs */ | 1011 | /* turn on ramdacs */ |
1021 | cfb->ramdac_powerdown &= ~(RAMDAC_DACPWRDN | RAMDAC_BYPASS | RAMDAC_RAMPWRDN); | 1012 | cfb->ramdac_powerdown &= ~(RAMDAC_DACPWRDN | RAMDAC_BYPASS | |
1013 | RAMDAC_RAMPWRDN); | ||
1022 | cyber2000fb_write_ramdac_ctrl(cfb); | 1014 | cyber2000fb_write_ramdac_ctrl(cfb); |
1023 | } | 1015 | } |
1024 | 1016 | ||
@@ -1043,7 +1035,8 @@ static int cyber2000fb_blank(int blank, struct fb_info *info) | |||
1043 | 1035 | ||
1044 | if (blank >= 2) { | 1036 | if (blank >= 2) { |
1045 | /* turn off ramdacs */ | 1037 | /* turn off ramdacs */ |
1046 | cfb->ramdac_powerdown |= RAMDAC_DACPWRDN | RAMDAC_BYPASS | RAMDAC_RAMPWRDN; | 1038 | cfb->ramdac_powerdown |= RAMDAC_DACPWRDN | RAMDAC_BYPASS | |
1039 | RAMDAC_RAMPWRDN; | ||
1047 | cyber2000fb_write_ramdac_ctrl(cfb); | 1040 | cyber2000fb_write_ramdac_ctrl(cfb); |
1048 | } | 1041 | } |
1049 | 1042 | ||
@@ -1068,7 +1061,7 @@ static struct fb_ops cyber2000fb_ops = { | |||
1068 | * of this driver. It is here solely at the moment to support the other | 1061 | * of this driver. It is here solely at the moment to support the other |
1069 | * CyberPro modules external to this driver. | 1062 | * CyberPro modules external to this driver. |
1070 | */ | 1063 | */ |
1071 | static struct cfb_info *int_cfb_info; | 1064 | static struct cfb_info *int_cfb_info; |
1072 | 1065 | ||
1073 | /* | 1066 | /* |
1074 | * Enable access to the extended registers | 1067 | * Enable access to the extended registers |
@@ -1085,6 +1078,7 @@ void cyber2000fb_enable_extregs(struct cfb_info *cfb) | |||
1085 | cyber2000_grphw(EXT_FUNC_CTL, old, cfb); | 1078 | cyber2000_grphw(EXT_FUNC_CTL, old, cfb); |
1086 | } | 1079 | } |
1087 | } | 1080 | } |
1081 | EXPORT_SYMBOL(cyber2000fb_enable_extregs); | ||
1088 | 1082 | ||
1089 | /* | 1083 | /* |
1090 | * Disable access to the extended registers | 1084 | * Disable access to the extended registers |
@@ -1104,11 +1098,13 @@ void cyber2000fb_disable_extregs(struct cfb_info *cfb) | |||
1104 | else | 1098 | else |
1105 | cfb->func_use_count -= 1; | 1099 | cfb->func_use_count -= 1; |
1106 | } | 1100 | } |
1101 | EXPORT_SYMBOL(cyber2000fb_disable_extregs); | ||
1107 | 1102 | ||
1108 | void cyber2000fb_get_fb_var(struct cfb_info *cfb, struct fb_var_screeninfo *var) | 1103 | void cyber2000fb_get_fb_var(struct cfb_info *cfb, struct fb_var_screeninfo *var) |
1109 | { | 1104 | { |
1110 | memcpy(var, &cfb->fb.var, sizeof(struct fb_var_screeninfo)); | 1105 | memcpy(var, &cfb->fb.var, sizeof(struct fb_var_screeninfo)); |
1111 | } | 1106 | } |
1107 | EXPORT_SYMBOL(cyber2000fb_get_fb_var); | ||
1112 | 1108 | ||
1113 | /* | 1109 | /* |
1114 | * Attach a capture/tv driver to the core CyberX0X0 driver. | 1110 | * Attach a capture/tv driver to the core CyberX0X0 driver. |
@@ -1122,13 +1118,15 @@ int cyber2000fb_attach(struct cyberpro_info *info, int idx) | |||
1122 | info->fb_size = int_cfb_info->fb.fix.smem_len; | 1118 | info->fb_size = int_cfb_info->fb.fix.smem_len; |
1123 | info->enable_extregs = cyber2000fb_enable_extregs; | 1119 | info->enable_extregs = cyber2000fb_enable_extregs; |
1124 | info->disable_extregs = cyber2000fb_disable_extregs; | 1120 | info->disable_extregs = cyber2000fb_disable_extregs; |
1125 | info->info = int_cfb_info; | 1121 | info->info = int_cfb_info; |
1126 | 1122 | ||
1127 | strlcpy(info->dev_name, int_cfb_info->fb.fix.id, sizeof(info->dev_name)); | 1123 | strlcpy(info->dev_name, int_cfb_info->fb.fix.id, |
1124 | sizeof(info->dev_name)); | ||
1128 | } | 1125 | } |
1129 | 1126 | ||
1130 | return int_cfb_info != NULL; | 1127 | return int_cfb_info != NULL; |
1131 | } | 1128 | } |
1129 | EXPORT_SYMBOL(cyber2000fb_attach); | ||
1132 | 1130 | ||
1133 | /* | 1131 | /* |
1134 | * Detach a capture/tv driver from the core CyberX0X0 driver. | 1132 | * Detach a capture/tv driver from the core CyberX0X0 driver. |
@@ -1136,12 +1134,7 @@ int cyber2000fb_attach(struct cyberpro_info *info, int idx) | |||
1136 | void cyber2000fb_detach(int idx) | 1134 | void cyber2000fb_detach(int idx) |
1137 | { | 1135 | { |
1138 | } | 1136 | } |
1139 | |||
1140 | EXPORT_SYMBOL(cyber2000fb_attach); | ||
1141 | EXPORT_SYMBOL(cyber2000fb_detach); | 1137 | EXPORT_SYMBOL(cyber2000fb_detach); |
1142 | EXPORT_SYMBOL(cyber2000fb_enable_extregs); | ||
1143 | EXPORT_SYMBOL(cyber2000fb_disable_extregs); | ||
1144 | EXPORT_SYMBOL(cyber2000fb_get_fb_var); | ||
1145 | 1138 | ||
1146 | /* | 1139 | /* |
1147 | * These parameters give | 1140 | * These parameters give |
@@ -1205,7 +1198,7 @@ static void cyberpro_init_hw(struct cfb_info *cfb) | |||
1205 | int i; | 1198 | int i; |
1206 | 1199 | ||
1207 | for (i = 0; i < sizeof(igs_regs); i += 2) | 1200 | for (i = 0; i < sizeof(igs_regs); i += 2) |
1208 | cyber2000_grphw(igs_regs[i], igs_regs[i+1], cfb); | 1201 | cyber2000_grphw(igs_regs[i], igs_regs[i + 1], cfb); |
1209 | 1202 | ||
1210 | if (cfb->id == ID_CYBERPRO_5000) { | 1203 | if (cfb->id == ID_CYBERPRO_5000) { |
1211 | unsigned char val; | 1204 | unsigned char val; |
@@ -1215,8 +1208,8 @@ static void cyberpro_init_hw(struct cfb_info *cfb) | |||
1215 | } | 1208 | } |
1216 | } | 1209 | } |
1217 | 1210 | ||
1218 | static struct cfb_info * __devinit | 1211 | static struct cfb_info __devinit *cyberpro_alloc_fb_info(unsigned int id, |
1219 | cyberpro_alloc_fb_info(unsigned int id, char *name) | 1212 | char *name) |
1220 | { | 1213 | { |
1221 | struct cfb_info *cfb; | 1214 | struct cfb_info *cfb; |
1222 | 1215 | ||
@@ -1228,9 +1221,9 @@ cyberpro_alloc_fb_info(unsigned int id, char *name) | |||
1228 | cfb->id = id; | 1221 | cfb->id = id; |
1229 | 1222 | ||
1230 | if (id == ID_CYBERPRO_5000) | 1223 | if (id == ID_CYBERPRO_5000) |
1231 | cfb->ref_ps = 40690; // 24.576 MHz | 1224 | cfb->ref_ps = 40690; /* 24.576 MHz */ |
1232 | else | 1225 | else |
1233 | cfb->ref_ps = 69842; // 14.31818 MHz (69841?) | 1226 | cfb->ref_ps = 69842; /* 14.31818 MHz (69841?) */ |
1234 | 1227 | ||
1235 | cfb->divisors[0] = 1; | 1228 | cfb->divisors[0] = 1; |
1236 | cfb->divisors[1] = 2; | 1229 | cfb->divisors[1] = 2; |
@@ -1282,8 +1275,7 @@ cyberpro_alloc_fb_info(unsigned int id, char *name) | |||
1282 | return cfb; | 1275 | return cfb; |
1283 | } | 1276 | } |
1284 | 1277 | ||
1285 | static void | 1278 | static void cyberpro_free_fb_info(struct cfb_info *cfb) |
1286 | cyberpro_free_fb_info(struct cfb_info *cfb) | ||
1287 | { | 1279 | { |
1288 | if (cfb) { | 1280 | if (cfb) { |
1289 | /* | 1281 | /* |
@@ -1300,8 +1292,7 @@ cyberpro_free_fb_info(struct cfb_info *cfb) | |||
1300 | * video=cyber2000:font:fontname | 1292 | * video=cyber2000:font:fontname |
1301 | */ | 1293 | */ |
1302 | #ifndef MODULE | 1294 | #ifndef MODULE |
1303 | static int | 1295 | static int cyber2000fb_setup(char *options) |
1304 | cyber2000fb_setup(char *options) | ||
1305 | { | 1296 | { |
1306 | char *opt; | 1297 | char *opt; |
1307 | 1298 | ||
@@ -1315,7 +1306,8 @@ cyber2000fb_setup(char *options) | |||
1315 | if (strncmp(opt, "font:", 5) == 0) { | 1306 | if (strncmp(opt, "font:", 5) == 0) { |
1316 | static char default_font_storage[40]; | 1307 | static char default_font_storage[40]; |
1317 | 1308 | ||
1318 | strlcpy(default_font_storage, opt + 5, sizeof(default_font_storage)); | 1309 | strlcpy(default_font_storage, opt + 5, |
1310 | sizeof(default_font_storage)); | ||
1319 | default_font = default_font_storage; | 1311 | default_font = default_font_storage; |
1320 | continue; | 1312 | continue; |
1321 | } | 1313 | } |
@@ -1354,10 +1346,18 @@ static int __devinit cyberpro_common_probe(struct cfb_info *cfb) | |||
1354 | * Determine the size of the memory. | 1346 | * Determine the size of the memory. |
1355 | */ | 1347 | */ |
1356 | switch (cfb->mem_ctl2 & MEM_CTL2_SIZE_MASK) { | 1348 | switch (cfb->mem_ctl2 & MEM_CTL2_SIZE_MASK) { |
1357 | case MEM_CTL2_SIZE_4MB: smem_size = 0x00400000; break; | 1349 | case MEM_CTL2_SIZE_4MB: |
1358 | case MEM_CTL2_SIZE_2MB: smem_size = 0x00200000; break; | 1350 | smem_size = 0x00400000; |
1359 | case MEM_CTL2_SIZE_1MB: smem_size = 0x00100000; break; | 1351 | break; |
1360 | default: smem_size = 0x00100000; break; | 1352 | case MEM_CTL2_SIZE_2MB: |
1353 | smem_size = 0x00200000; | ||
1354 | break; | ||
1355 | case MEM_CTL2_SIZE_1MB: | ||
1356 | smem_size = 0x00100000; | ||
1357 | break; | ||
1358 | default: | ||
1359 | smem_size = 0x00100000; | ||
1360 | break; | ||
1361 | } | 1361 | } |
1362 | 1362 | ||
1363 | cfb->fb.fix.smem_len = smem_size; | 1363 | cfb->fb.fix.smem_len = smem_size; |
@@ -1366,8 +1366,8 @@ static int __devinit cyberpro_common_probe(struct cfb_info *cfb) | |||
1366 | 1366 | ||
1367 | err = -EINVAL; | 1367 | err = -EINVAL; |
1368 | if (!fb_find_mode(&cfb->fb.var, &cfb->fb, NULL, NULL, 0, | 1368 | if (!fb_find_mode(&cfb->fb.var, &cfb->fb, NULL, NULL, 0, |
1369 | &cyber2000fb_default_mode, 8)) { | 1369 | &cyber2000fb_default_mode, 8)) { |
1370 | printk("%s: no valid mode found\n", cfb->fb.fix.id); | 1370 | printk(KERN_ERR "%s: no valid mode found\n", cfb->fb.fix.id); |
1371 | goto failed; | 1371 | goto failed; |
1372 | } | 1372 | } |
1373 | 1373 | ||
@@ -1377,7 +1377,7 @@ static int __devinit cyberpro_common_probe(struct cfb_info *cfb) | |||
1377 | if (cfb->fb.var.yres_virtual < cfb->fb.var.yres) | 1377 | if (cfb->fb.var.yres_virtual < cfb->fb.var.yres) |
1378 | cfb->fb.var.yres_virtual = cfb->fb.var.yres; | 1378 | cfb->fb.var.yres_virtual = cfb->fb.var.yres; |
1379 | 1379 | ||
1380 | // fb_set_var(&cfb->fb.var, -1, &cfb->fb); | 1380 | /* fb_set_var(&cfb->fb.var, -1, &cfb->fb); */ |
1381 | 1381 | ||
1382 | /* | 1382 | /* |
1383 | * Calculate the hsync and vsync frequencies. Note that | 1383 | * Calculate the hsync and vsync frequencies. Note that |
@@ -1425,20 +1425,20 @@ static void cyberpro_common_resume(struct cfb_info *cfb) | |||
1425 | 1425 | ||
1426 | #include <asm/arch/hardware.h> | 1426 | #include <asm/arch/hardware.h> |
1427 | 1427 | ||
1428 | static int __devinit | 1428 | static int __devinit cyberpro_vl_probe(void) |
1429 | cyberpro_vl_probe(void) | ||
1430 | { | 1429 | { |
1431 | struct cfb_info *cfb; | 1430 | struct cfb_info *cfb; |
1432 | int err = -ENOMEM; | 1431 | int err = -ENOMEM; |
1433 | 1432 | ||
1434 | if (!request_mem_region(FB_START,FB_SIZE,"CyberPro2010")) return err; | 1433 | if (!request_mem_region(FB_START, FB_SIZE, "CyberPro2010")) |
1434 | return err; | ||
1435 | 1435 | ||
1436 | cfb = cyberpro_alloc_fb_info(ID_CYBERPRO_2010, "CyberPro2010"); | 1436 | cfb = cyberpro_alloc_fb_info(ID_CYBERPRO_2010, "CyberPro2010"); |
1437 | if (!cfb) | 1437 | if (!cfb) |
1438 | goto failed_release; | 1438 | goto failed_release; |
1439 | 1439 | ||
1440 | cfb->dev = NULL; | 1440 | cfb->dev = NULL; |
1441 | cfb->region = ioremap(FB_START,FB_SIZE); | 1441 | cfb->region = ioremap(FB_START, FB_SIZE); |
1442 | if (!cfb->region) | 1442 | if (!cfb->region) |
1443 | goto failed_ioremap; | 1443 | goto failed_ioremap; |
1444 | 1444 | ||
@@ -1475,7 +1475,7 @@ failed: | |||
1475 | failed_ioremap: | 1475 | failed_ioremap: |
1476 | cyberpro_free_fb_info(cfb); | 1476 | cyberpro_free_fb_info(cfb); |
1477 | failed_release: | 1477 | failed_release: |
1478 | release_mem_region(FB_START,FB_SIZE); | 1478 | release_mem_region(FB_START, FB_SIZE); |
1479 | 1479 | ||
1480 | return err; | 1480 | return err; |
1481 | } | 1481 | } |
@@ -1538,7 +1538,8 @@ static int cyberpro_pci_enable_mmio(struct cfb_info *cfb) | |||
1538 | * Allow the CyberPro to accept PCI burst accesses | 1538 | * Allow the CyberPro to accept PCI burst accesses |
1539 | */ | 1539 | */ |
1540 | if (cfb->id == ID_CYBERPRO_2010) { | 1540 | if (cfb->id == ID_CYBERPRO_2010) { |
1541 | printk(KERN_INFO "%s: NOT enabling PCI bursts\n", cfb->fb.fix.id); | 1541 | printk(KERN_INFO "%s: NOT enabling PCI bursts\n", |
1542 | cfb->fb.fix.id); | ||
1542 | } else { | 1543 | } else { |
1543 | val = cyber2000_grphr(EXT_BUS_CTL, cfb); | 1544 | val = cyber2000_grphr(EXT_BUS_CTL, cfb); |
1544 | if (!(val & EXT_BUS_CTL_PCIBURST_WRITE)) { | 1545 | if (!(val & EXT_BUS_CTL_PCIBURST_WRITE)) { |
@@ -1688,9 +1689,10 @@ static int cyberpro_pci_resume(struct pci_dev *dev) | |||
1688 | } | 1689 | } |
1689 | 1690 | ||
1690 | static struct pci_device_id cyberpro_pci_table[] = { | 1691 | static struct pci_device_id cyberpro_pci_table[] = { |
1691 | // Not yet | 1692 | /* Not yet |
1692 | // { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_1682, | 1693 | * { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_1682, |
1693 | // PCI_ANY_ID, PCI_ANY_ID, 0, 0, ID_IGA_1682 }, | 1694 | * PCI_ANY_ID, PCI_ANY_ID, 0, 0, ID_IGA_1682 }, |
1695 | */ | ||
1694 | { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_2000, | 1696 | { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_2000, |
1695 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, ID_CYBERPRO_2000 }, | 1697 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, ID_CYBERPRO_2000 }, |
1696 | { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_2010, | 1698 | { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_2010, |
@@ -1700,7 +1702,7 @@ static struct pci_device_id cyberpro_pci_table[] = { | |||
1700 | { 0, } | 1702 | { 0, } |
1701 | }; | 1703 | }; |
1702 | 1704 | ||
1703 | MODULE_DEVICE_TABLE(pci,cyberpro_pci_table); | 1705 | MODULE_DEVICE_TABLE(pci, cyberpro_pci_table); |
1704 | 1706 | ||
1705 | static struct pci_driver cyberpro_driver = { | 1707 | static struct pci_driver cyberpro_driver = { |
1706 | .name = "CyberPro", | 1708 | .name = "CyberPro", |
diff --git a/drivers/video/geode/video_gx.c b/drivers/video/geode/video_gx.c index 7f3f18d0671..febf09c6349 100644 --- a/drivers/video/geode/video_gx.c +++ b/drivers/video/geode/video_gx.c | |||
@@ -127,7 +127,7 @@ static void gx_set_dclk_frequency(struct fb_info *info) | |||
127 | int timeout = 1000; | 127 | int timeout = 1000; |
128 | 128 | ||
129 | /* Rev. 1 Geode GXs use a 14 MHz reference clock instead of 48 MHz. */ | 129 | /* Rev. 1 Geode GXs use a 14 MHz reference clock instead of 48 MHz. */ |
130 | if (cpu_data->x86_mask == 1) { | 130 | if (cpu_data(0).x86_mask == 1) { |
131 | pll_table = gx_pll_table_14MHz; | 131 | pll_table = gx_pll_table_14MHz; |
132 | pll_table_len = ARRAY_SIZE(gx_pll_table_14MHz); | 132 | pll_table_len = ARRAY_SIZE(gx_pll_table_14MHz); |
133 | } else { | 133 | } else { |
diff --git a/drivers/video/gxt4500.c b/drivers/video/gxt4500.c index 23a6bcc3e3c..e92337bef50 100644 --- a/drivers/video/gxt4500.c +++ b/drivers/video/gxt4500.c | |||
@@ -636,7 +636,7 @@ static int __devinit gxt4500_probe(struct pci_dev *pdev, | |||
636 | 636 | ||
637 | info = framebuffer_alloc(sizeof(struct gxt4500_par), &pdev->dev); | 637 | info = framebuffer_alloc(sizeof(struct gxt4500_par), &pdev->dev); |
638 | if (!info) { | 638 | if (!info) { |
639 | dev_err(&pdev->dev, "gxt4500: cannot alloc FB info record"); | 639 | dev_err(&pdev->dev, "gxt4500: cannot alloc FB info record\n"); |
640 | goto err_free_fb; | 640 | goto err_free_fb; |
641 | } | 641 | } |
642 | par = info->par; | 642 | par = info->par; |
diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/intelfb/intelfbdrv.c index e8e38edb9b5..481d58f7535 100644 --- a/drivers/video/intelfb/intelfbdrv.c +++ b/drivers/video/intelfb/intelfbdrv.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * Linux framebuffer driver for Intel(R) 830M/845G/852GM/855GM/865G/915G/915GM/ | 4 | * Linux framebuffer driver for Intel(R) 830M/845G/852GM/855GM/865G/915G/915GM/ |
5 | * 945G/945GM integrated graphics chips. | 5 | * 945G/945GM integrated graphics chips. |
6 | * | 6 | * |
7 | * Copyright © 2002, 2003 David Dawes <dawes@xfree86.org> | 7 | * Copyright © 2002, 2003 David Dawes <dawes@xfree86.org> |
8 | * 2004 Sylvain Meyer | 8 | * 2004 Sylvain Meyer |
9 | * 2006 David Airlie | 9 | * 2006 David Airlie |
10 | * | 10 | * |
diff --git a/drivers/video/intelfb/intelfbhw.c b/drivers/video/intelfb/intelfbhw.c index 2a0e32074f7..5f6fb7d2c40 100644 --- a/drivers/video/intelfb/intelfbhw.c +++ b/drivers/video/intelfb/intelfbhw.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Linux framebuffer driver for Intel(R) 865G integrated graphics chips. | 4 | * Linux framebuffer driver for Intel(R) 865G integrated graphics chips. |
5 | * | 5 | * |
6 | * Copyright © 2002, 2003 David Dawes <dawes@xfree86.org> | 6 | * Copyright © 2002, 2003 David Dawes <dawes@xfree86.org> |
7 | * 2004 Sylvain Meyer | 7 | * 2004 Sylvain Meyer |
8 | * | 8 | * |
9 | * This driver consists of two parts. The first part (intelfbdrv.c) provides | 9 | * This driver consists of two parts. The first part (intelfbdrv.c) provides |
diff --git a/drivers/video/logo/logo.c b/drivers/video/logo/logo.c index a9283bae779..fc72684aae5 100644 --- a/drivers/video/logo/logo.c +++ b/drivers/video/logo/logo.c | |||
@@ -78,10 +78,7 @@ const struct linux_logo * __init_refok fb_find_logo(int depth) | |||
78 | #endif | 78 | #endif |
79 | #ifdef CONFIG_LOGO_DEC_CLUT224 | 79 | #ifdef CONFIG_LOGO_DEC_CLUT224 |
80 | /* DEC Linux logo on MIPS/MIPS64 or ALPHA */ | 80 | /* DEC Linux logo on MIPS/MIPS64 or ALPHA */ |
81 | #ifndef CONFIG_ALPHA | 81 | logo = &logo_dec_clut224; |
82 | if (mips_machgroup == MACH_GROUP_DEC) | ||
83 | #endif | ||
84 | logo = &logo_dec_clut224; | ||
85 | #endif | 82 | #endif |
86 | #ifdef CONFIG_LOGO_MAC_CLUT224 | 83 | #ifdef CONFIG_LOGO_MAC_CLUT224 |
87 | /* Macintosh Linux logo on m68k */ | 84 | /* Macintosh Linux logo on m68k */ |
@@ -94,10 +91,7 @@ const struct linux_logo * __init_refok fb_find_logo(int depth) | |||
94 | #endif | 91 | #endif |
95 | #ifdef CONFIG_LOGO_SGI_CLUT224 | 92 | #ifdef CONFIG_LOGO_SGI_CLUT224 |
96 | /* SGI Linux logo on MIPS/MIPS64 and VISWS */ | 93 | /* SGI Linux logo on MIPS/MIPS64 and VISWS */ |
97 | #ifndef CONFIG_X86_VISWS | 94 | logo = &logo_sgi_clut224; |
98 | if (mips_machgroup == MACH_GROUP_SGI) | ||
99 | #endif | ||
100 | logo = &logo_sgi_clut224; | ||
101 | #endif | 95 | #endif |
102 | #ifdef CONFIG_LOGO_SUN_CLUT224 | 96 | #ifdef CONFIG_LOGO_SUN_CLUT224 |
103 | /* Sun Linux logo */ | 97 | /* Sun Linux logo */ |
diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c index 42f5d76a877..8d81ef019c6 100644 --- a/drivers/video/modedb.c +++ b/drivers/video/modedb.c | |||
@@ -510,7 +510,9 @@ int fb_find_mode(struct fb_var_screeninfo *var, | |||
510 | default_bpp = 8; | 510 | default_bpp = 8; |
511 | 511 | ||
512 | /* Did the user specify a video mode? */ | 512 | /* Did the user specify a video mode? */ |
513 | if (mode_option || (mode_option = fb_mode_option)) { | 513 | if (!mode_option) |
514 | mode_option = fb_mode_option; | ||
515 | if (mode_option) { | ||
514 | const char *name = mode_option; | 516 | const char *name = mode_option; |
515 | unsigned int namelen = strlen(name); | 517 | unsigned int namelen = strlen(name); |
516 | int res_specified = 0, bpp_specified = 0, refresh_specified = 0; | 518 | int res_specified = 0, bpp_specified = 0, refresh_specified = 0; |
diff --git a/drivers/video/omap/Kconfig b/drivers/video/omap/Kconfig index 7f4d25b8a18..f4fcf11b290 100644 --- a/drivers/video/omap/Kconfig +++ b/drivers/video/omap/Kconfig | |||
@@ -8,7 +8,7 @@ config FB_OMAP | |||
8 | Frame buffer driver for OMAP based boards. | 8 | Frame buffer driver for OMAP based boards. |
9 | 9 | ||
10 | config FB_OMAP_BOOTLOADER_INIT | 10 | config FB_OMAP_BOOTLOADER_INIT |
11 | bool "Check bootloader initializaion" | 11 | bool "Check bootloader initialization" |
12 | depends on FB_OMAP | 12 | depends on FB_OMAP |
13 | help | 13 | help |
14 | Say Y here if you want to enable checking if the bootloader has | 14 | Say Y here if you want to enable checking if the bootloader has |
diff --git a/drivers/video/omap/blizzard.c b/drivers/video/omap/blizzard.c index e682940a97a..4d8ad9cd0e1 100644 --- a/drivers/video/omap/blizzard.c +++ b/drivers/video/omap/blizzard.c | |||
@@ -225,7 +225,7 @@ static void blizzard_restart_sdram(void) | |||
225 | while (!(blizzard_read_reg(BLIZZARD_MEM_BANK0_STATUS) & 0x01)) { | 225 | while (!(blizzard_read_reg(BLIZZARD_MEM_BANK0_STATUS) & 0x01)) { |
226 | if (time_after(jiffies, tmo)) { | 226 | if (time_after(jiffies, tmo)) { |
227 | dev_err(blizzard.fbdev->dev, | 227 | dev_err(blizzard.fbdev->dev, |
228 | "s1d1374x: SDRAM not ready"); | 228 | "s1d1374x: SDRAM not ready\n"); |
229 | break; | 229 | break; |
230 | } | 230 | } |
231 | msleep(1); | 231 | msleep(1); |
diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c index f4c23434de6..ab32ceb0617 100644 --- a/drivers/video/omap/dispc.c +++ b/drivers/video/omap/dispc.c | |||
@@ -880,19 +880,19 @@ static irqreturn_t omap_dispc_irq_handler(int irq, void *dev) | |||
880 | static int get_dss_clocks(void) | 880 | static int get_dss_clocks(void) |
881 | { | 881 | { |
882 | if (IS_ERR((dispc.dss_ick = clk_get(dispc.fbdev->dev, "dss_ick")))) { | 882 | if (IS_ERR((dispc.dss_ick = clk_get(dispc.fbdev->dev, "dss_ick")))) { |
883 | dev_err(dispc.fbdev->dev, "can't get dss_ick"); | 883 | dev_err(dispc.fbdev->dev, "can't get dss_ick\n"); |
884 | return PTR_ERR(dispc.dss_ick); | 884 | return PTR_ERR(dispc.dss_ick); |
885 | } | 885 | } |
886 | 886 | ||
887 | if (IS_ERR((dispc.dss1_fck = clk_get(dispc.fbdev->dev, "dss1_fck")))) { | 887 | if (IS_ERR((dispc.dss1_fck = clk_get(dispc.fbdev->dev, "dss1_fck")))) { |
888 | dev_err(dispc.fbdev->dev, "can't get dss1_fck"); | 888 | dev_err(dispc.fbdev->dev, "can't get dss1_fck\n"); |
889 | clk_put(dispc.dss_ick); | 889 | clk_put(dispc.dss_ick); |
890 | return PTR_ERR(dispc.dss1_fck); | 890 | return PTR_ERR(dispc.dss1_fck); |
891 | } | 891 | } |
892 | 892 | ||
893 | if (IS_ERR((dispc.dss_54m_fck = | 893 | if (IS_ERR((dispc.dss_54m_fck = |
894 | clk_get(dispc.fbdev->dev, "dss_54m_fck")))) { | 894 | clk_get(dispc.fbdev->dev, "dss_54m_fck")))) { |
895 | dev_err(dispc.fbdev->dev, "can't get dss_54m_fck"); | 895 | dev_err(dispc.fbdev->dev, "can't get dss_54m_fck\n"); |
896 | clk_put(dispc.dss_ick); | 896 | clk_put(dispc.dss_ick); |
897 | clk_put(dispc.dss1_fck); | 897 | clk_put(dispc.dss1_fck); |
898 | return PTR_ERR(dispc.dss_54m_fck); | 898 | return PTR_ERR(dispc.dss_54m_fck); |
diff --git a/drivers/video/omap/hwa742.c b/drivers/video/omap/hwa742.c index dc48e02f215..1e642b7a20f 100644 --- a/drivers/video/omap/hwa742.c +++ b/drivers/video/omap/hwa742.c | |||
@@ -508,7 +508,7 @@ int hwa742_update_window_async(struct fb_info *fbi, | |||
508 | if (unlikely(win->format & | 508 | if (unlikely(win->format & |
509 | ~(0x03 | OMAPFB_FORMAT_FLAG_DOUBLE | | 509 | ~(0x03 | OMAPFB_FORMAT_FLAG_DOUBLE | |
510 | OMAPFB_FORMAT_FLAG_TEARSYNC | OMAPFB_FORMAT_FLAG_FORCE_VSYNC))) { | 510 | OMAPFB_FORMAT_FLAG_TEARSYNC | OMAPFB_FORMAT_FLAG_FORCE_VSYNC))) { |
511 | dev_dbg(hwa742.fbdev->dev, "invalid window flag"); | 511 | dev_dbg(hwa742.fbdev->dev, "invalid window flag\n"); |
512 | r = -EINVAL; | 512 | r = -EINVAL; |
513 | goto out; | 513 | goto out; |
514 | } | 514 | } |
diff --git a/drivers/video/omap/rfbi.c b/drivers/video/omap/rfbi.c index 2b4269813b2..789cfd23c36 100644 --- a/drivers/video/omap/rfbi.c +++ b/drivers/video/omap/rfbi.c | |||
@@ -84,12 +84,12 @@ static inline u32 rfbi_read_reg(int idx) | |||
84 | static int rfbi_get_clocks(void) | 84 | static int rfbi_get_clocks(void) |
85 | { | 85 | { |
86 | if (IS_ERR((rfbi.dss_ick = clk_get(rfbi.fbdev->dev, "dss_ick")))) { | 86 | if (IS_ERR((rfbi.dss_ick = clk_get(rfbi.fbdev->dev, "dss_ick")))) { |
87 | dev_err(rfbi.fbdev->dev, "can't get dss_ick"); | 87 | dev_err(rfbi.fbdev->dev, "can't get dss_ick\n"); |
88 | return PTR_ERR(rfbi.dss_ick); | 88 | return PTR_ERR(rfbi.dss_ick); |
89 | } | 89 | } |
90 | 90 | ||
91 | if (IS_ERR((rfbi.dss1_fck = clk_get(rfbi.fbdev->dev, "dss1_fck")))) { | 91 | if (IS_ERR((rfbi.dss1_fck = clk_get(rfbi.fbdev->dev, "dss1_fck")))) { |
92 | dev_err(rfbi.fbdev->dev, "can't get dss1_fck"); | 92 | dev_err(rfbi.fbdev->dev, "can't get dss1_fck\n"); |
93 | clk_put(rfbi.dss_ick); | 93 | clk_put(rfbi.dss_ick); |
94 | return PTR_ERR(rfbi.dss1_fck); | 94 | return PTR_ERR(rfbi.dss1_fck); |
95 | } | 95 | } |
diff --git a/drivers/video/pnx4008/sdum.h b/drivers/video/pnx4008/sdum.h index e8c5dcdd881..189c3d64138 100644 --- a/drivers/video/pnx4008/sdum.h +++ b/drivers/video/pnx4008/sdum.h | |||
@@ -77,9 +77,6 @@ | |||
77 | #define CONF_DIRTYDETECTION_OFF (0x600) | 77 | #define CONF_DIRTYDETECTION_OFF (0x600) |
78 | #define CONF_DIRTYDETECTION_ON (0x601) | 78 | #define CONF_DIRTYDETECTION_ON (0x601) |
79 | 79 | ||
80 | /* Set the corresponding bit. */ | ||
81 | #define BIT(n) (0x1U << (n)) | ||
82 | |||
83 | struct dumchannel_uf { | 80 | struct dumchannel_uf { |
84 | int channelnr; | 81 | int channelnr; |
85 | u32 *dirty; | 82 | u32 *dirty; |
diff --git a/drivers/video/s3c2410fb.c b/drivers/video/s3c2410fb.c index ae08d458709..5857ccf5f6b 100644 --- a/drivers/video/s3c2410fb.c +++ b/drivers/video/s3c2410fb.c | |||
@@ -56,7 +56,7 @@ | |||
56 | * - Add support for different devices | 56 | * - Add support for different devices |
57 | * - Backlight support | 57 | * - Backlight support |
58 | * | 58 | * |
59 | * 2004-09-05: Herbert Pötzl <herbert@13thfloor.at> | 59 | * 2004-09-05: Herbert Pötzl <herbert@13thfloor.at> |
60 | * - added clock (de-)allocation code | 60 | * - added clock (de-)allocation code |
61 | * - added fixem fbmem option | 61 | * - added fixem fbmem option |
62 | * | 62 | * |
@@ -64,7 +64,7 @@ | |||
64 | * - code cleanup | 64 | * - code cleanup |
65 | * - added a forgotten return in h1940fb_init | 65 | * - added a forgotten return in h1940fb_init |
66 | * | 66 | * |
67 | * 2004-07-19: Herbert Pötzl <herbert@13thfloor.at> | 67 | * 2004-07-19: Herbert Pötzl <herbert@13thfloor.at> |
68 | * - code cleanup and extended debugging | 68 | * - code cleanup and extended debugging |
69 | * | 69 | * |
70 | * 2004-07-15: Arnaud Patard <arnaud.patard@rtp-net.org> | 70 | * 2004-07-15: Arnaud Patard <arnaud.patard@rtp-net.org> |
diff --git a/drivers/video/vermilion/vermilion.c b/drivers/video/vermilion/vermilion.c index ff9e805c43b..c31f549ebea 100644 --- a/drivers/video/vermilion/vermilion.c +++ b/drivers/video/vermilion/vermilion.c | |||
@@ -23,8 +23,8 @@ | |||
23 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 23 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
24 | * | 24 | * |
25 | * Authors: | 25 | * Authors: |
26 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 26 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
27 | * Michel Dänzer <michel-at-tungstengraphics-dot-com> | 27 | * Michel Dänzer <michel-at-tungstengraphics-dot-com> |
28 | * Alan Hourihane <alanh-at-tungstengraphics-dot-com> | 28 | * Alan Hourihane <alanh-at-tungstengraphics-dot-com> |
29 | */ | 29 | */ |
30 | 30 | ||
diff --git a/drivers/video/vermilion/vermilion.h b/drivers/video/vermilion/vermilion.h index 1fc6695a49d..c4aba59d480 100644 --- a/drivers/video/vermilion/vermilion.h +++ b/drivers/video/vermilion/vermilion.h | |||
@@ -23,7 +23,7 @@ | |||
23 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 23 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
24 | * | 24 | * |
25 | * Authors: | 25 | * Authors: |
26 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 26 | * Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
27 | */ | 27 | */ |
28 | 28 | ||
29 | #ifndef _VERMILION_H_ | 29 | #ifndef _VERMILION_H_ |
diff --git a/drivers/w1/masters/ds1wm.c b/drivers/w1/masters/ds1wm.c index 4b696641ce3..5747997f8d7 100644 --- a/drivers/w1/masters/ds1wm.c +++ b/drivers/w1/masters/ds1wm.c | |||
@@ -307,7 +307,7 @@ static void ds1wm_search(void *data, u8 search_type, | |||
307 | rom_id |= (unsigned long long) r << (i * 4); | 307 | rom_id |= (unsigned long long) r << (i * 4); |
308 | 308 | ||
309 | } | 309 | } |
310 | dev_dbg(&ds1wm_data->pdev->dev, "found 0x%08llX", rom_id); | 310 | dev_dbg(&ds1wm_data->pdev->dev, "found 0x%08llX\n", rom_id); |
311 | 311 | ||
312 | ds1wm_write_register(ds1wm_data, DS1WM_CMD, ~DS1WM_CMD_SRA); | 312 | ds1wm_write_register(ds1wm_data, DS1WM_CMD, ~DS1WM_CMD_SRA); |
313 | ds1wm_reset(ds1wm_data); | 313 | ds1wm_reset(ds1wm_data); |
diff --git a/drivers/char/watchdog/Kconfig b/drivers/watchdog/Kconfig index 37bddc1802d..37bddc1802d 100644 --- a/drivers/char/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig | |||
diff --git a/drivers/char/watchdog/Makefile b/drivers/watchdog/Makefile index 389f8b14ccc..389f8b14ccc 100644 --- a/drivers/char/watchdog/Makefile +++ b/drivers/watchdog/Makefile | |||
diff --git a/drivers/char/watchdog/acquirewdt.c b/drivers/watchdog/acquirewdt.c index 85269c365a1..85269c365a1 100644 --- a/drivers/char/watchdog/acquirewdt.c +++ b/drivers/watchdog/acquirewdt.c | |||
diff --git a/drivers/char/watchdog/advantechwdt.c b/drivers/watchdog/advantechwdt.c index 8121cc24734..8121cc24734 100644 --- a/drivers/char/watchdog/advantechwdt.c +++ b/drivers/watchdog/advantechwdt.c | |||
diff --git a/drivers/char/watchdog/alim1535_wdt.c b/drivers/watchdog/alim1535_wdt.c index c404fc69e7e..c404fc69e7e 100644 --- a/drivers/char/watchdog/alim1535_wdt.c +++ b/drivers/watchdog/alim1535_wdt.c | |||
diff --git a/drivers/char/watchdog/alim7101_wdt.c b/drivers/watchdog/alim7101_wdt.c index 67aed9f8c36..67aed9f8c36 100644 --- a/drivers/char/watchdog/alim7101_wdt.c +++ b/drivers/watchdog/alim7101_wdt.c | |||
diff --git a/drivers/char/watchdog/at32ap700x_wdt.c b/drivers/watchdog/at32ap700x_wdt.c index 54a516169d0..54a516169d0 100644 --- a/drivers/char/watchdog/at32ap700x_wdt.c +++ b/drivers/watchdog/at32ap700x_wdt.c | |||
diff --git a/drivers/char/watchdog/at91rm9200_wdt.c b/drivers/watchdog/at91rm9200_wdt.c index 38bd3737259..a684b1e8737 100644 --- a/drivers/char/watchdog/at91rm9200_wdt.c +++ b/drivers/watchdog/at91rm9200_wdt.c | |||
@@ -9,6 +9,7 @@ | |||
9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/bitops.h> | ||
12 | #include <linux/errno.h> | 13 | #include <linux/errno.h> |
13 | #include <linux/fs.h> | 14 | #include <linux/fs.h> |
14 | #include <linux/init.h> | 15 | #include <linux/init.h> |
@@ -19,7 +20,6 @@ | |||
19 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
20 | #include <linux/types.h> | 21 | #include <linux/types.h> |
21 | #include <linux/watchdog.h> | 22 | #include <linux/watchdog.h> |
22 | #include <asm/bitops.h> | ||
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | #include <asm/arch/at91_st.h> | 24 | #include <asm/arch/at91_st.h> |
25 | 25 | ||
diff --git a/drivers/char/watchdog/bfin_wdt.c b/drivers/watchdog/bfin_wdt.c index 309d27913fc..309d27913fc 100644 --- a/drivers/char/watchdog/bfin_wdt.c +++ b/drivers/watchdog/bfin_wdt.c | |||
diff --git a/drivers/char/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c index d362f5bf658..d362f5bf658 100644 --- a/drivers/char/watchdog/booke_wdt.c +++ b/drivers/watchdog/booke_wdt.c | |||
diff --git a/drivers/char/watchdog/cpu5wdt.c b/drivers/watchdog/cpu5wdt.c index 5941ca601a3..5941ca601a3 100644 --- a/drivers/char/watchdog/cpu5wdt.c +++ b/drivers/watchdog/cpu5wdt.c | |||
diff --git a/drivers/char/watchdog/davinci_wdt.c b/drivers/watchdog/davinci_wdt.c index 19db5302ba6..19db5302ba6 100644 --- a/drivers/char/watchdog/davinci_wdt.c +++ b/drivers/watchdog/davinci_wdt.c | |||
diff --git a/drivers/char/watchdog/ep93xx_wdt.c b/drivers/watchdog/ep93xx_wdt.c index 0e4787a0bb8..0e4787a0bb8 100644 --- a/drivers/char/watchdog/ep93xx_wdt.c +++ b/drivers/watchdog/ep93xx_wdt.c | |||
diff --git a/drivers/char/watchdog/eurotechwdt.c b/drivers/watchdog/eurotechwdt.c index b14e9d1f164..b14e9d1f164 100644 --- a/drivers/char/watchdog/eurotechwdt.c +++ b/drivers/watchdog/eurotechwdt.c | |||
diff --git a/drivers/char/watchdog/i6300esb.c b/drivers/watchdog/i6300esb.c index c5982502c03..f236954d253 100644 --- a/drivers/char/watchdog/i6300esb.c +++ b/drivers/watchdog/i6300esb.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * i6300esb: Watchdog timer driver for Intel 6300ESB chipset | 2 | * i6300esb: Watchdog timer driver for Intel 6300ESB chipset |
3 | * | 3 | * |
4 | * (c) Copyright 2004 Google Inc. | 4 | * (c) Copyright 2004 Google Inc. |
5 | * (c) Copyright 2005 David Härdeman <david@2gen.com> | 5 | * (c) Copyright 2005 David Härdeman <david@2gen.com> |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or | 7 | * This program is free software; you can redistribute it and/or |
8 | * modify it under the terms of the GNU General Public License | 8 | * modify it under the terms of the GNU General Public License |
@@ -19,7 +19,7 @@ | |||
19 | * Initial version 0.01 | 19 | * Initial version 0.01 |
20 | * 2004YYZZ Ross Biro | 20 | * 2004YYZZ Ross Biro |
21 | * Version 0.02 | 21 | * Version 0.02 |
22 | * 20050210 David Härdeman <david@2gen.com> | 22 | * 20050210 David Härdeman <david@2gen.com> |
23 | * Ported driver to kernel 2.6 | 23 | * Ported driver to kernel 2.6 |
24 | */ | 24 | */ |
25 | 25 | ||
@@ -521,7 +521,7 @@ static void __exit watchdog_cleanup (void) | |||
521 | module_init(watchdog_init); | 521 | module_init(watchdog_init); |
522 | module_exit(watchdog_cleanup); | 522 | module_exit(watchdog_cleanup); |
523 | 523 | ||
524 | MODULE_AUTHOR("Ross Biro and David Härdeman"); | 524 | MODULE_AUTHOR("Ross Biro and David Härdeman"); |
525 | MODULE_DESCRIPTION("Watchdog driver for Intel 6300ESB chipsets"); | 525 | MODULE_DESCRIPTION("Watchdog driver for Intel 6300ESB chipsets"); |
526 | MODULE_LICENSE("GPL"); | 526 | MODULE_LICENSE("GPL"); |
527 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | 527 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); |
diff --git a/drivers/char/watchdog/iTCO_vendor_support.c b/drivers/watchdog/iTCO_vendor_support.c index 41508399009..cafc465f2ae 100644 --- a/drivers/char/watchdog/iTCO_vendor_support.c +++ b/drivers/watchdog/iTCO_vendor_support.c | |||
@@ -115,7 +115,7 @@ static void supermicro_old_pre_keepalive(unsigned long acpibase) | |||
115 | * For P4DPx: | 115 | * For P4DPx: |
116 | * BIOS setup -> Advanced -> I/O Device Configuration -> Watch Dog | 116 | * BIOS setup -> Advanced -> I/O Device Configuration -> Watch Dog |
117 | * This setting enables or disables Watchdog function. When enabled, the | 117 | * This setting enables or disables Watchdog function. When enabled, the |
118 | * default watchdog timer is set to be 5 minutes (about 4’35â€). It is | 118 | * default watchdog timer is set to be 5 minutes (about 4m35s). It is |
119 | * enough to load and run the OS. The application (service or driver) has | 119 | * enough to load and run the OS. The application (service or driver) has |
120 | * to take over the control once OS is running up and before watchdog | 120 | * to take over the control once OS is running up and before watchdog |
121 | * expires. | 121 | * expires. |
diff --git a/drivers/char/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index cd5a565bc3a..cd5a565bc3a 100644 --- a/drivers/char/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c | |||
diff --git a/drivers/char/watchdog/ib700wdt.c b/drivers/watchdog/ib700wdt.c index c3a60f52ccb..c3a60f52ccb 100644 --- a/drivers/char/watchdog/ib700wdt.c +++ b/drivers/watchdog/ib700wdt.c | |||
diff --git a/drivers/char/watchdog/ibmasr.c b/drivers/watchdog/ibmasr.c index 94155f6136c..94155f6136c 100644 --- a/drivers/char/watchdog/ibmasr.c +++ b/drivers/watchdog/ibmasr.c | |||
diff --git a/drivers/char/watchdog/indydog.c b/drivers/watchdog/indydog.c index 788245bdaa7..788245bdaa7 100644 --- a/drivers/char/watchdog/indydog.c +++ b/drivers/watchdog/indydog.c | |||
diff --git a/drivers/char/watchdog/iop_wdt.c b/drivers/watchdog/iop_wdt.c index bbbd91af754..bbbd91af754 100644 --- a/drivers/char/watchdog/iop_wdt.c +++ b/drivers/watchdog/iop_wdt.c | |||
diff --git a/drivers/char/watchdog/ixp2000_wdt.c b/drivers/watchdog/ixp2000_wdt.c index dc7548dcaf3..dc7548dcaf3 100644 --- a/drivers/char/watchdog/ixp2000_wdt.c +++ b/drivers/watchdog/ixp2000_wdt.c | |||
diff --git a/drivers/char/watchdog/ixp4xx_wdt.c b/drivers/watchdog/ixp4xx_wdt.c index 5864bb865cf..5864bb865cf 100644 --- a/drivers/char/watchdog/ixp4xx_wdt.c +++ b/drivers/watchdog/ixp4xx_wdt.c | |||
diff --git a/drivers/char/watchdog/ks8695_wdt.c b/drivers/watchdog/ks8695_wdt.c index 7150fb945ea..e3a29c30230 100644 --- a/drivers/char/watchdog/ks8695_wdt.c +++ b/drivers/watchdog/ks8695_wdt.c | |||
@@ -8,6 +8,7 @@ | |||
8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/bitops.h> | ||
11 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
12 | #include <linux/fs.h> | 13 | #include <linux/fs.h> |
13 | #include <linux/init.h> | 14 | #include <linux/init.h> |
@@ -18,7 +19,6 @@ | |||
18 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
19 | #include <linux/types.h> | 20 | #include <linux/types.h> |
20 | #include <linux/watchdog.h> | 21 | #include <linux/watchdog.h> |
21 | #include <asm/bitops.h> | ||
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | #include <asm/arch/regs-timer.h> | 24 | #include <asm/arch/regs-timer.h> |
diff --git a/drivers/char/watchdog/machzwd.c b/drivers/watchdog/machzwd.c index 6d35bb112a5..6d35bb112a5 100644 --- a/drivers/char/watchdog/machzwd.c +++ b/drivers/watchdog/machzwd.c | |||
diff --git a/drivers/char/watchdog/mixcomwd.c b/drivers/watchdog/mixcomwd.c index 1adf1d56027..1adf1d56027 100644 --- a/drivers/char/watchdog/mixcomwd.c +++ b/drivers/watchdog/mixcomwd.c | |||
diff --git a/drivers/char/watchdog/mpc5200_wdt.c b/drivers/watchdog/mpc5200_wdt.c index 9cfb9757662..9cfb9757662 100644 --- a/drivers/char/watchdog/mpc5200_wdt.c +++ b/drivers/watchdog/mpc5200_wdt.c | |||
diff --git a/drivers/char/watchdog/mpc83xx_wdt.c b/drivers/watchdog/mpc83xx_wdt.c index a0bf95fb976..a0bf95fb976 100644 --- a/drivers/char/watchdog/mpc83xx_wdt.c +++ b/drivers/watchdog/mpc83xx_wdt.c | |||
diff --git a/drivers/char/watchdog/mpc8xx_wdt.c b/drivers/watchdog/mpc8xx_wdt.c index 85b5734403a..85b5734403a 100644 --- a/drivers/char/watchdog/mpc8xx_wdt.c +++ b/drivers/watchdog/mpc8xx_wdt.c | |||
diff --git a/drivers/char/watchdog/mpcore_wdt.c b/drivers/watchdog/mpcore_wdt.c index 0d2b2773541..0d2b2773541 100644 --- a/drivers/char/watchdog/mpcore_wdt.c +++ b/drivers/watchdog/mpcore_wdt.c | |||
diff --git a/drivers/char/watchdog/mtx-1_wdt.c b/drivers/watchdog/mtx-1_wdt.c index dcfd401a7ad..dcfd401a7ad 100644 --- a/drivers/char/watchdog/mtx-1_wdt.c +++ b/drivers/watchdog/mtx-1_wdt.c | |||
diff --git a/drivers/char/watchdog/mv64x60_wdt.c b/drivers/watchdog/mv64x60_wdt.c index 0365c317f7e..0365c317f7e 100644 --- a/drivers/char/watchdog/mv64x60_wdt.c +++ b/drivers/watchdog/mv64x60_wdt.c | |||
diff --git a/drivers/char/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c index 719b066f73c..635ca454f56 100644 --- a/drivers/char/watchdog/omap_wdt.c +++ b/drivers/watchdog/omap_wdt.c | |||
@@ -39,11 +39,11 @@ | |||
39 | #include <linux/platform_device.h> | 39 | #include <linux/platform_device.h> |
40 | #include <linux/moduleparam.h> | 40 | #include <linux/moduleparam.h> |
41 | #include <linux/clk.h> | 41 | #include <linux/clk.h> |
42 | #include <linux/bitops.h> | ||
42 | 43 | ||
43 | #include <asm/io.h> | 44 | #include <asm/io.h> |
44 | #include <asm/uaccess.h> | 45 | #include <asm/uaccess.h> |
45 | #include <asm/hardware.h> | 46 | #include <asm/hardware.h> |
46 | #include <asm/bitops.h> | ||
47 | 47 | ||
48 | #include <asm/arch/prcm.h> | 48 | #include <asm/arch/prcm.h> |
49 | 49 | ||
diff --git a/drivers/char/watchdog/omap_wdt.h b/drivers/watchdog/omap_wdt.h index 52a532a5114..52a532a5114 100644 --- a/drivers/char/watchdog/omap_wdt.h +++ b/drivers/watchdog/omap_wdt.h | |||
diff --git a/drivers/char/watchdog/pc87413_wdt.c b/drivers/watchdog/pc87413_wdt.c index 3d3deae0d64..3d3deae0d64 100644 --- a/drivers/char/watchdog/pc87413_wdt.c +++ b/drivers/watchdog/pc87413_wdt.c | |||
diff --git a/drivers/char/watchdog/pcwd.c b/drivers/watchdog/pcwd.c index 7b41434fac8..7b41434fac8 100644 --- a/drivers/char/watchdog/pcwd.c +++ b/drivers/watchdog/pcwd.c | |||
diff --git a/drivers/char/watchdog/pcwd_pci.c b/drivers/watchdog/pcwd_pci.c index 61a89e95964..61a89e95964 100644 --- a/drivers/char/watchdog/pcwd_pci.c +++ b/drivers/watchdog/pcwd_pci.c | |||
diff --git a/drivers/char/watchdog/pcwd_usb.c b/drivers/watchdog/pcwd_usb.c index 0f3fd6c9c35..0f3fd6c9c35 100644 --- a/drivers/char/watchdog/pcwd_usb.c +++ b/drivers/watchdog/pcwd_usb.c | |||
diff --git a/drivers/char/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c index 22f8873dd09..22f8873dd09 100644 --- a/drivers/char/watchdog/pnx4008_wdt.c +++ b/drivers/watchdog/pnx4008_wdt.c | |||
diff --git a/drivers/char/watchdog/rm9k_wdt.c b/drivers/watchdog/rm9k_wdt.c index 5c921e47156..5c921e47156 100644 --- a/drivers/char/watchdog/rm9k_wdt.c +++ b/drivers/watchdog/rm9k_wdt.c | |||
diff --git a/drivers/char/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c index 5d1c15f83d2..5d1c15f83d2 100644 --- a/drivers/char/watchdog/s3c2410_wdt.c +++ b/drivers/watchdog/s3c2410_wdt.c | |||
diff --git a/drivers/char/watchdog/sa1100_wdt.c b/drivers/watchdog/sa1100_wdt.c index 3475f47aaa4..34a2b3b8180 100644 --- a/drivers/char/watchdog/sa1100_wdt.c +++ b/drivers/watchdog/sa1100_wdt.c | |||
@@ -25,13 +25,13 @@ | |||
25 | #include <linux/miscdevice.h> | 25 | #include <linux/miscdevice.h> |
26 | #include <linux/watchdog.h> | 26 | #include <linux/watchdog.h> |
27 | #include <linux/init.h> | 27 | #include <linux/init.h> |
28 | #include <linux/bitops.h> | ||
28 | 29 | ||
29 | #ifdef CONFIG_ARCH_PXA | 30 | #ifdef CONFIG_ARCH_PXA |
30 | #include <asm/arch/pxa-regs.h> | 31 | #include <asm/arch/pxa-regs.h> |
31 | #endif | 32 | #endif |
32 | 33 | ||
33 | #include <asm/hardware.h> | 34 | #include <asm/hardware.h> |
34 | #include <asm/bitops.h> | ||
35 | #include <asm/uaccess.h> | 35 | #include <asm/uaccess.h> |
36 | 36 | ||
37 | #define OSCR_FREQ CLOCK_TICK_RATE | 37 | #define OSCR_FREQ CLOCK_TICK_RATE |
diff --git a/drivers/char/watchdog/sbc60xxwdt.c b/drivers/watchdog/sbc60xxwdt.c index e4f3cb6090b..e4f3cb6090b 100644 --- a/drivers/char/watchdog/sbc60xxwdt.c +++ b/drivers/watchdog/sbc60xxwdt.c | |||
diff --git a/drivers/char/watchdog/sbc8360.c b/drivers/watchdog/sbc8360.c index 285d8528953..285d8528953 100644 --- a/drivers/char/watchdog/sbc8360.c +++ b/drivers/watchdog/sbc8360.c | |||
diff --git a/drivers/char/watchdog/sbc_epx_c3.c b/drivers/watchdog/sbc_epx_c3.c index 82cbd8809a6..82cbd8809a6 100644 --- a/drivers/char/watchdog/sbc_epx_c3.c +++ b/drivers/watchdog/sbc_epx_c3.c | |||
diff --git a/drivers/char/watchdog/sc1200wdt.c b/drivers/watchdog/sc1200wdt.c index 9670d47190d..9670d47190d 100644 --- a/drivers/char/watchdog/sc1200wdt.c +++ b/drivers/watchdog/sc1200wdt.c | |||
diff --git a/drivers/char/watchdog/sc520_wdt.c b/drivers/watchdog/sc520_wdt.c index e8594c64d1e..e8594c64d1e 100644 --- a/drivers/char/watchdog/sc520_wdt.c +++ b/drivers/watchdog/sc520_wdt.c | |||
diff --git a/drivers/char/watchdog/scx200_wdt.c b/drivers/watchdog/scx200_wdt.c index d4fd0fa2f17..d4fd0fa2f17 100644 --- a/drivers/char/watchdog/scx200_wdt.c +++ b/drivers/watchdog/scx200_wdt.c | |||
diff --git a/drivers/char/watchdog/shwdt.c b/drivers/watchdog/shwdt.c index cecbedd473a..cecbedd473a 100644 --- a/drivers/char/watchdog/shwdt.c +++ b/drivers/watchdog/shwdt.c | |||
diff --git a/drivers/char/watchdog/smsc37b787_wdt.c b/drivers/watchdog/smsc37b787_wdt.c index d3cb0a76602..d3cb0a76602 100644 --- a/drivers/char/watchdog/smsc37b787_wdt.c +++ b/drivers/watchdog/smsc37b787_wdt.c | |||
diff --git a/drivers/char/watchdog/softdog.c b/drivers/watchdog/softdog.c index 9c369490924..9c369490924 100644 --- a/drivers/char/watchdog/softdog.c +++ b/drivers/watchdog/softdog.c | |||
diff --git a/drivers/char/watchdog/w83627hf_wdt.c b/drivers/watchdog/w83627hf_wdt.c index df33b3b5a53..df33b3b5a53 100644 --- a/drivers/char/watchdog/w83627hf_wdt.c +++ b/drivers/watchdog/w83627hf_wdt.c | |||
diff --git a/drivers/char/watchdog/w83697hf_wdt.c b/drivers/watchdog/w83697hf_wdt.c index d9e821d08de..51826c216d6 100644 --- a/drivers/char/watchdog/w83697hf_wdt.c +++ b/drivers/watchdog/w83697hf_wdt.c | |||
@@ -8,7 +8,7 @@ | |||
8 | * which is based on wdt.c. | 8 | * which is based on wdt.c. |
9 | * Original copyright messages: | 9 | * Original copyright messages: |
10 | * | 10 | * |
11 | * (c) Copyright 2003 Pádraig Brady <P@draigBrady.com> | 11 | * (c) Copyright 2003 Pádraig Brady <P@draigBrady.com> |
12 | * | 12 | * |
13 | * (c) Copyright 2000-2001 Marek Michalkiewicz <marekm@linux.org.pl> | 13 | * (c) Copyright 2000-2001 Marek Michalkiewicz <marekm@linux.org.pl> |
14 | * | 14 | * |
diff --git a/drivers/char/watchdog/w83877f_wdt.c b/drivers/watchdog/w83877f_wdt.c index 3c88fe18f4f..3c88fe18f4f 100644 --- a/drivers/char/watchdog/w83877f_wdt.c +++ b/drivers/watchdog/w83877f_wdt.c | |||
diff --git a/drivers/char/watchdog/w83977f_wdt.c b/drivers/watchdog/w83977f_wdt.c index 15796844289..15796844289 100644 --- a/drivers/char/watchdog/w83977f_wdt.c +++ b/drivers/watchdog/w83977f_wdt.c | |||
diff --git a/drivers/char/watchdog/wafer5823wdt.c b/drivers/watchdog/wafer5823wdt.c index 950905d3c39..950905d3c39 100644 --- a/drivers/char/watchdog/wafer5823wdt.c +++ b/drivers/watchdog/wafer5823wdt.c | |||
diff --git a/drivers/char/watchdog/wd501p.h b/drivers/watchdog/wd501p.h index a4504f40394..a4504f40394 100644 --- a/drivers/char/watchdog/wd501p.h +++ b/drivers/watchdog/wd501p.h | |||
diff --git a/drivers/char/watchdog/wdrtas.c b/drivers/watchdog/wdrtas.c index 1d64e277567..1d64e277567 100644 --- a/drivers/char/watchdog/wdrtas.c +++ b/drivers/watchdog/wdrtas.c | |||
diff --git a/drivers/char/watchdog/wdt.c b/drivers/watchdog/wdt.c index 0a3de6a0244..0a3de6a0244 100644 --- a/drivers/char/watchdog/wdt.c +++ b/drivers/watchdog/wdt.c | |||
diff --git a/drivers/char/watchdog/wdt285.c b/drivers/watchdog/wdt285.c index e4cf661dc89..e4cf661dc89 100644 --- a/drivers/char/watchdog/wdt285.c +++ b/drivers/watchdog/wdt285.c | |||
diff --git a/drivers/char/watchdog/wdt977.c b/drivers/watchdog/wdt977.c index 7d300ff7ab0..7d300ff7ab0 100644 --- a/drivers/char/watchdog/wdt977.c +++ b/drivers/watchdog/wdt977.c | |||
diff --git a/drivers/char/watchdog/wdt_pci.c b/drivers/watchdog/wdt_pci.c index 6baf4ae42c9..6baf4ae42c9 100644 --- a/drivers/char/watchdog/wdt_pci.c +++ b/drivers/watchdog/wdt_pci.c | |||
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c index 0b769f7c4a4..4750de316ad 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c | |||
@@ -185,13 +185,14 @@ static void otherend_changed(struct xenbus_watch *watch, | |||
185 | if (!dev->otherend || | 185 | if (!dev->otherend || |
186 | strncmp(dev->otherend, vec[XS_WATCH_PATH], | 186 | strncmp(dev->otherend, vec[XS_WATCH_PATH], |
187 | strlen(dev->otherend))) { | 187 | strlen(dev->otherend))) { |
188 | dev_dbg(&dev->dev, "Ignoring watch at %s", vec[XS_WATCH_PATH]); | 188 | dev_dbg(&dev->dev, "Ignoring watch at %s\n", |
189 | vec[XS_WATCH_PATH]); | ||
189 | return; | 190 | return; |
190 | } | 191 | } |
191 | 192 | ||
192 | state = xenbus_read_driver_state(dev->otherend); | 193 | state = xenbus_read_driver_state(dev->otherend); |
193 | 194 | ||
194 | dev_dbg(&dev->dev, "state is %d, (%s), %s, %s", | 195 | dev_dbg(&dev->dev, "state is %d, (%s), %s, %s\n", |
195 | state, xenbus_strstate(state), dev->otherend_watch.node, | 196 | state, xenbus_strstate(state), dev->otherend_watch.node, |
196 | vec[XS_WATCH_PATH]); | 197 | vec[XS_WATCH_PATH]); |
197 | 198 | ||
diff --git a/drivers/zorro/zorro.ids b/drivers/zorro/zorro.ids index 5bd4b05d4c4..560fef2a7b1 100644 --- a/drivers/zorro/zorro.ids +++ b/drivers/zorro/zorro.ids | |||
@@ -295,7 +295,7 @@ | |||
295 | 0100 RH 800C [HD Controller] | 295 | 0100 RH 800C [HD Controller] |
296 | 0200 RH 800C [RAM Expansion] | 296 | 0200 RH 800C [RAM Expansion] |
297 | 0861 Kato | 297 | 0861 Kato |
298 | # The Rainbow II and III are actually made by Ingenieurbüro Helfrich | 298 | # The Rainbow II and III are actually made by Ingenieurbüro Helfrich |
299 | 2000 Rainbow II [Graphics Card] | 299 | 2000 Rainbow II [Graphics Card] |
300 | 2100 Rainbow III [Graphics Card] | 300 | 2100 Rainbow III [Graphics Card] |
301 | 8000 Melody MPEG [Audio Card] | 301 | 8000 Melody MPEG [Audio Card] |