diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-04-07 06:05:21 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-04-07 06:05:25 -0400 |
commit | 6c009ecef8cca28c7c09eb16d0802e37915a76e1 (patch) | |
tree | 11c773f780186fdb9fbc9c80a73fb7c8426b1fba /drivers | |
parent | 98c2aaf8be5baf7193be37fb28bce8e7327158bc (diff) | |
parent | d508afb437daee7cf07da085b635c44a4ebf9b38 (diff) |
Merge branch 'linus' into perfcounters/core
Merge reason: need the upstream facility added by:
7f1e2ca: hrtimer: fix rq->lock inversion (again)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers')
175 files changed, 10961 insertions, 12936 deletions
diff --git a/drivers/char/applicom.c b/drivers/char/applicom.c index 05674febb0c6..73a0765344b6 100644 --- a/drivers/char/applicom.c +++ b/drivers/char/applicom.c | |||
@@ -75,6 +75,7 @@ MODULE_DEVICE_TABLE(pci, applicom_pci_tbl); | |||
75 | MODULE_AUTHOR("David Woodhouse & Applicom International"); | 75 | MODULE_AUTHOR("David Woodhouse & Applicom International"); |
76 | MODULE_DESCRIPTION("Driver for Applicom Profibus card"); | 76 | MODULE_DESCRIPTION("Driver for Applicom Profibus card"); |
77 | MODULE_LICENSE("GPL"); | 77 | MODULE_LICENSE("GPL"); |
78 | MODULE_ALIAS_MISCDEV(AC_MINOR); | ||
78 | 79 | ||
79 | MODULE_SUPPORTED_DEVICE("ac"); | 80 | MODULE_SUPPORTED_DEVICE("ac"); |
80 | 81 | ||
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c index 272db0e2b491..1fdb9f657d8f 100644 --- a/drivers/char/cyclades.c +++ b/drivers/char/cyclades.c | |||
@@ -646,6 +646,7 @@ | |||
646 | #include <linux/spinlock.h> | 646 | #include <linux/spinlock.h> |
647 | #include <linux/bitops.h> | 647 | #include <linux/bitops.h> |
648 | #include <linux/firmware.h> | 648 | #include <linux/firmware.h> |
649 | #include <linux/device.h> | ||
649 | 650 | ||
650 | #include <asm/system.h> | 651 | #include <asm/system.h> |
651 | #include <linux/io.h> | 652 | #include <linux/io.h> |
@@ -5408,3 +5409,4 @@ module_exit(cy_cleanup_module); | |||
5408 | 5409 | ||
5409 | MODULE_LICENSE("GPL"); | 5410 | MODULE_LICENSE("GPL"); |
5410 | MODULE_VERSION(CY_VERSION); | 5411 | MODULE_VERSION(CY_VERSION); |
5412 | MODULE_ALIAS_CHARDEV_MAJOR(CYCLADES_MAJOR); | ||
diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c index 24aa6e88e223..a59eac584d16 100644 --- a/drivers/char/isicom.c +++ b/drivers/char/isicom.c | |||
@@ -925,6 +925,7 @@ static void isicom_shutdown_port(struct isi_port *port) | |||
925 | if (!card->count) | 925 | if (!card->count) |
926 | isicom_shutdown_board(card); | 926 | isicom_shutdown_board(card); |
927 | } | 927 | } |
928 | tty_kref_put(tty); | ||
928 | } | 929 | } |
929 | 930 | ||
930 | static void isicom_flush_buffer(struct tty_struct *tty) | 931 | static void isicom_flush_buffer(struct tty_struct *tty) |
diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c index 8b0da97d5293..4a4cab73d0be 100644 --- a/drivers/char/moxa.c +++ b/drivers/char/moxa.c | |||
@@ -1486,11 +1486,11 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle, | |||
1486 | } | 1486 | } |
1487 | 1487 | ||
1488 | if (!handle) /* nothing else to do */ | 1488 | if (!handle) /* nothing else to do */ |
1489 | return 0; | 1489 | goto put; |
1490 | 1490 | ||
1491 | intr = readw(ip); /* port irq status */ | 1491 | intr = readw(ip); /* port irq status */ |
1492 | if (intr == 0) | 1492 | if (intr == 0) |
1493 | return 0; | 1493 | goto put; |
1494 | 1494 | ||
1495 | writew(0, ip); /* ACK port */ | 1495 | writew(0, ip); /* ACK port */ |
1496 | ofsAddr = p->tableAddr; | 1496 | ofsAddr = p->tableAddr; |
@@ -1499,16 +1499,17 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle, | |||
1499 | ofsAddr + HostStat); | 1499 | ofsAddr + HostStat); |
1500 | 1500 | ||
1501 | if (!inited) | 1501 | if (!inited) |
1502 | return 0; | 1502 | goto put; |
1503 | 1503 | ||
1504 | if (tty && (intr & IntrBreak) && !I_IGNBRK(tty)) { /* BREAK */ | 1504 | if (tty && (intr & IntrBreak) && !I_IGNBRK(tty)) { /* BREAK */ |
1505 | tty_insert_flip_char(tty, 0, TTY_BREAK); | 1505 | tty_insert_flip_char(tty, 0, TTY_BREAK); |
1506 | tty_schedule_flip(tty); | 1506 | tty_schedule_flip(tty); |
1507 | } | 1507 | } |
1508 | tty_kref_put(tty); | ||
1509 | 1508 | ||
1510 | if (intr & IntrLine) | 1509 | if (intr & IntrLine) |
1511 | moxa_new_dcdstate(p, readb(ofsAddr + FlagStat) & DCD_state); | 1510 | moxa_new_dcdstate(p, readb(ofsAddr + FlagStat) & DCD_state); |
1511 | put: | ||
1512 | tty_kref_put(tty); | ||
1512 | 1513 | ||
1513 | return 0; | 1514 | return 0; |
1514 | } | 1515 | } |
diff --git a/drivers/char/mxser.c b/drivers/char/mxser.c index 402c9f217f83..a420e8d437dd 100644 --- a/drivers/char/mxser.c +++ b/drivers/char/mxser.c | |||
@@ -820,7 +820,6 @@ static void mxser_check_modem_status(struct tty_struct *tty, | |||
820 | wake_up_interruptible(&port->port.open_wait); | 820 | wake_up_interruptible(&port->port.open_wait); |
821 | } | 821 | } |
822 | 822 | ||
823 | tty = tty_port_tty_get(&port->port); | ||
824 | if (port->port.flags & ASYNC_CTS_FLOW) { | 823 | if (port->port.flags & ASYNC_CTS_FLOW) { |
825 | if (tty->hw_stopped) { | 824 | if (tty->hw_stopped) { |
826 | if (status & UART_MSR_CTS) { | 825 | if (status & UART_MSR_CTS) { |
diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c index 2e8a6eed34be..ce81da5b2da9 100644 --- a/drivers/char/rio/rio_linux.c +++ b/drivers/char/rio/rio_linux.c | |||
@@ -333,7 +333,7 @@ void rio_copy_to_card(void *from, void __iomem *to, int len) | |||
333 | 333 | ||
334 | int rio_minor(struct tty_struct *tty) | 334 | int rio_minor(struct tty_struct *tty) |
335 | { | 335 | { |
336 | return tty->index + (tty->driver == rio_driver) ? 0 : 256; | 336 | return tty->index + ((tty->driver == rio_driver) ? 0 : 256); |
337 | } | 337 | } |
338 | 338 | ||
339 | static int rio_set_real_termios(void *ptr) | 339 | static int rio_set_real_termios(void *ptr) |
diff --git a/drivers/char/riscom8.c b/drivers/char/riscom8.c index 9af8d74875bc..217660451237 100644 --- a/drivers/char/riscom8.c +++ b/drivers/char/riscom8.c | |||
@@ -48,6 +48,7 @@ | |||
48 | #include <linux/delay.h> | 48 | #include <linux/delay.h> |
49 | #include <linux/tty_flip.h> | 49 | #include <linux/tty_flip.h> |
50 | #include <linux/spinlock.h> | 50 | #include <linux/spinlock.h> |
51 | #include <linux/device.h> | ||
51 | 52 | ||
52 | #include <linux/uaccess.h> | 53 | #include <linux/uaccess.h> |
53 | 54 | ||
@@ -1524,6 +1525,7 @@ module_param(iobase2, int, 0); | |||
1524 | module_param(iobase3, int, 0); | 1525 | module_param(iobase3, int, 0); |
1525 | 1526 | ||
1526 | MODULE_LICENSE("GPL"); | 1527 | MODULE_LICENSE("GPL"); |
1528 | MODULE_ALIAS_CHARDEV_MAJOR(RISCOM8_NORMAL_MAJOR); | ||
1527 | #endif /* MODULE */ | 1529 | #endif /* MODULE */ |
1528 | 1530 | ||
1529 | /* | 1531 | /* |
diff --git a/drivers/char/specialix.c b/drivers/char/specialix.c index 3c67c3d83de9..e72be4190a44 100644 --- a/drivers/char/specialix.c +++ b/drivers/char/specialix.c | |||
@@ -2365,3 +2365,4 @@ module_init(specialix_init_module); | |||
2365 | module_exit(specialix_exit_module); | 2365 | module_exit(specialix_exit_module); |
2366 | 2366 | ||
2367 | MODULE_LICENSE("GPL"); | 2367 | MODULE_LICENSE("GPL"); |
2368 | MODULE_ALIAS_CHARDEV_MAJOR(SPECIALIX_NORMAL_MAJOR); | ||
diff --git a/drivers/i2c/algos/Kconfig b/drivers/i2c/algos/Kconfig index b788579b8227..7b2ce4a08524 100644 --- a/drivers/i2c/algos/Kconfig +++ b/drivers/i2c/algos/Kconfig | |||
@@ -14,8 +14,4 @@ config I2C_ALGOPCF | |||
14 | config I2C_ALGOPCA | 14 | config I2C_ALGOPCA |
15 | tristate "I2C PCA 9564 interfaces" | 15 | tristate "I2C PCA 9564 interfaces" |
16 | 16 | ||
17 | config I2C_ALGO_SGI | ||
18 | tristate | ||
19 | depends on SGI_IP22 || SGI_IP32 || X86_VISWS | ||
20 | |||
21 | endmenu | 17 | endmenu |
diff --git a/drivers/i2c/algos/Makefile b/drivers/i2c/algos/Makefile index cac1051bd4f1..18b3e962ec09 100644 --- a/drivers/i2c/algos/Makefile +++ b/drivers/i2c/algos/Makefile | |||
@@ -5,7 +5,6 @@ | |||
5 | obj-$(CONFIG_I2C_ALGOBIT) += i2c-algo-bit.o | 5 | obj-$(CONFIG_I2C_ALGOBIT) += i2c-algo-bit.o |
6 | obj-$(CONFIG_I2C_ALGOPCF) += i2c-algo-pcf.o | 6 | obj-$(CONFIG_I2C_ALGOPCF) += i2c-algo-pcf.o |
7 | obj-$(CONFIG_I2C_ALGOPCA) += i2c-algo-pca.o | 7 | obj-$(CONFIG_I2C_ALGOPCA) += i2c-algo-pca.o |
8 | obj-$(CONFIG_I2C_ALGO_SGI) += i2c-algo-sgi.o | ||
9 | 8 | ||
10 | ifeq ($(CONFIG_I2C_DEBUG_ALGO),y) | 9 | ifeq ($(CONFIG_I2C_DEBUG_ALGO),y) |
11 | EXTRA_CFLAGS += -DDEBUG | 10 | EXTRA_CFLAGS += -DDEBUG |
diff --git a/drivers/i2c/algos/i2c-algo-sgi.c b/drivers/i2c/algos/i2c-algo-sgi.c deleted file mode 100644 index 6eaf145e1ada..000000000000 --- a/drivers/i2c/algos/i2c-algo-sgi.c +++ /dev/null | |||
@@ -1,179 +0,0 @@ | |||
1 | /* | ||
2 | * i2c-algo-sgi.c: i2c driver algorithm used by the VINO (SGI Indy) and | ||
3 | * MACE (SGI O2) chips. | ||
4 | * | ||
5 | * This file is subject to the terms and conditions of the GNU General Public | ||
6 | * License version 2 as published by the Free Software Foundation. | ||
7 | * | ||
8 | * Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org> | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/module.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/errno.h> | ||
15 | #include <linux/delay.h> | ||
16 | |||
17 | #include <linux/i2c.h> | ||
18 | #include <linux/i2c-algo-sgi.h> | ||
19 | |||
20 | |||
21 | #define SGI_I2C_FORCE_IDLE (0 << 0) | ||
22 | #define SGI_I2C_NOT_IDLE (1 << 0) | ||
23 | #define SGI_I2C_WRITE (0 << 1) | ||
24 | #define SGI_I2C_READ (1 << 1) | ||
25 | #define SGI_I2C_RELEASE_BUS (0 << 2) | ||
26 | #define SGI_I2C_HOLD_BUS (1 << 2) | ||
27 | #define SGI_I2C_XFER_DONE (0 << 4) | ||
28 | #define SGI_I2C_XFER_BUSY (1 << 4) | ||
29 | #define SGI_I2C_ACK (0 << 5) | ||
30 | #define SGI_I2C_NACK (1 << 5) | ||
31 | #define SGI_I2C_BUS_OK (0 << 7) | ||
32 | #define SGI_I2C_BUS_ERR (1 << 7) | ||
33 | |||
34 | #define get_control() adap->getctrl(adap->data) | ||
35 | #define set_control(val) adap->setctrl(adap->data, val) | ||
36 | #define read_data() adap->rdata(adap->data) | ||
37 | #define write_data(val) adap->wdata(adap->data, val) | ||
38 | |||
39 | |||
40 | static int wait_xfer_done(struct i2c_algo_sgi_data *adap) | ||
41 | { | ||
42 | int i; | ||
43 | |||
44 | for (i = 0; i < adap->xfer_timeout; i++) { | ||
45 | if ((get_control() & SGI_I2C_XFER_BUSY) == 0) | ||
46 | return 0; | ||
47 | udelay(1); | ||
48 | } | ||
49 | |||
50 | return -ETIMEDOUT; | ||
51 | } | ||
52 | |||
53 | static int wait_ack(struct i2c_algo_sgi_data *adap) | ||
54 | { | ||
55 | int i; | ||
56 | |||
57 | if (wait_xfer_done(adap)) | ||
58 | return -ETIMEDOUT; | ||
59 | for (i = 0; i < adap->ack_timeout; i++) { | ||
60 | if ((get_control() & SGI_I2C_NACK) == 0) | ||
61 | return 0; | ||
62 | udelay(1); | ||
63 | } | ||
64 | |||
65 | return -ETIMEDOUT; | ||
66 | } | ||
67 | |||
68 | static int force_idle(struct i2c_algo_sgi_data *adap) | ||
69 | { | ||
70 | int i; | ||
71 | |||
72 | set_control(SGI_I2C_FORCE_IDLE); | ||
73 | for (i = 0; i < adap->xfer_timeout; i++) { | ||
74 | if ((get_control() & SGI_I2C_NOT_IDLE) == 0) | ||
75 | goto out; | ||
76 | udelay(1); | ||
77 | } | ||
78 | return -ETIMEDOUT; | ||
79 | out: | ||
80 | if (get_control() & SGI_I2C_BUS_ERR) | ||
81 | return -EIO; | ||
82 | return 0; | ||
83 | } | ||
84 | |||
85 | static int do_address(struct i2c_algo_sgi_data *adap, unsigned int addr, | ||
86 | int rd) | ||
87 | { | ||
88 | if (rd) | ||
89 | set_control(SGI_I2C_NOT_IDLE); | ||
90 | /* Check if bus is idle, eventually force it to do so */ | ||
91 | if (get_control() & SGI_I2C_NOT_IDLE) | ||
92 | if (force_idle(adap)) | ||
93 | return -EIO; | ||
94 | /* Write out the i2c chip address and specify operation */ | ||
95 | set_control(SGI_I2C_HOLD_BUS | SGI_I2C_WRITE | SGI_I2C_NOT_IDLE); | ||
96 | if (rd) | ||
97 | addr |= 1; | ||
98 | write_data(addr); | ||
99 | if (wait_ack(adap)) | ||
100 | return -EIO; | ||
101 | return 0; | ||
102 | } | ||
103 | |||
104 | static int i2c_read(struct i2c_algo_sgi_data *adap, unsigned char *buf, | ||
105 | unsigned int len) | ||
106 | { | ||
107 | int i; | ||
108 | |||
109 | set_control(SGI_I2C_HOLD_BUS | SGI_I2C_READ | SGI_I2C_NOT_IDLE); | ||
110 | for (i = 0; i < len; i++) { | ||
111 | if (wait_xfer_done(adap)) | ||
112 | return -EIO; | ||
113 | buf[i] = read_data(); | ||
114 | } | ||
115 | set_control(SGI_I2C_RELEASE_BUS | SGI_I2C_FORCE_IDLE); | ||
116 | |||
117 | return 0; | ||
118 | |||
119 | } | ||
120 | |||
121 | static int i2c_write(struct i2c_algo_sgi_data *adap, unsigned char *buf, | ||
122 | unsigned int len) | ||
123 | { | ||
124 | int i; | ||
125 | |||
126 | /* We are already in write state */ | ||
127 | for (i = 0; i < len; i++) { | ||
128 | write_data(buf[i]); | ||
129 | if (wait_ack(adap)) | ||
130 | return -EIO; | ||
131 | } | ||
132 | return 0; | ||
133 | } | ||
134 | |||
135 | static int sgi_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, | ||
136 | int num) | ||
137 | { | ||
138 | struct i2c_algo_sgi_data *adap = i2c_adap->algo_data; | ||
139 | struct i2c_msg *p; | ||
140 | int i, err = 0; | ||
141 | |||
142 | for (i = 0; !err && i < num; i++) { | ||
143 | p = &msgs[i]; | ||
144 | err = do_address(adap, p->addr, p->flags & I2C_M_RD); | ||
145 | if (err || !p->len) | ||
146 | continue; | ||
147 | if (p->flags & I2C_M_RD) | ||
148 | err = i2c_read(adap, p->buf, p->len); | ||
149 | else | ||
150 | err = i2c_write(adap, p->buf, p->len); | ||
151 | } | ||
152 | |||
153 | return (err < 0) ? err : i; | ||
154 | } | ||
155 | |||
156 | static u32 sgi_func(struct i2c_adapter *adap) | ||
157 | { | ||
158 | return I2C_FUNC_SMBUS_EMUL; | ||
159 | } | ||
160 | |||
161 | static const struct i2c_algorithm sgi_algo = { | ||
162 | .master_xfer = sgi_xfer, | ||
163 | .functionality = sgi_func, | ||
164 | }; | ||
165 | |||
166 | /* | ||
167 | * registering functions to load algorithms at runtime | ||
168 | */ | ||
169 | int i2c_sgi_add_bus(struct i2c_adapter *adap) | ||
170 | { | ||
171 | adap->algo = &sgi_algo; | ||
172 | |||
173 | return i2c_add_adapter(adap); | ||
174 | } | ||
175 | EXPORT_SYMBOL(i2c_sgi_add_bus); | ||
176 | |||
177 | MODULE_AUTHOR("Ladislav Michl <ladis@linux-mips.org>"); | ||
178 | MODULE_DESCRIPTION("I2C-Bus SGI algorithm"); | ||
179 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index d9db17624f12..9b60b6b684d9 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig | |||
@@ -31,6 +31,13 @@ config LEDS_LOCOMO | |||
31 | This option enables support for the LEDs on Sharp Locomo. | 31 | This option enables support for the LEDs on Sharp Locomo. |
32 | Zaurus models SL-5500 and SL-5600. | 32 | Zaurus models SL-5500 and SL-5600. |
33 | 33 | ||
34 | config LEDS_MIKROTIK_RB532 | ||
35 | tristate "LED Support for Mikrotik Routerboard 532" | ||
36 | depends on LEDS_CLASS && MIKROTIK_RB532 | ||
37 | help | ||
38 | This option enables support for the so called "User LED" of | ||
39 | Mikrotik's Routerboard 532. | ||
40 | |||
34 | config LEDS_S3C24XX | 41 | config LEDS_S3C24XX |
35 | tristate "LED Support for Samsung S3C24XX GPIO LEDs" | 42 | tristate "LED Support for Samsung S3C24XX GPIO LEDs" |
36 | depends on LEDS_CLASS && ARCH_S3C2410 | 43 | depends on LEDS_CLASS && ARCH_S3C2410 |
@@ -117,11 +124,40 @@ config LEDS_GPIO | |||
117 | help | 124 | help |
118 | This option enables support for the LEDs connected to GPIO | 125 | This option enables support for the LEDs connected to GPIO |
119 | outputs. To be useful the particular board must have LEDs | 126 | outputs. To be useful the particular board must have LEDs |
120 | and they must be connected to the GPIO lines. | 127 | and they must be connected to the GPIO lines. The LEDs must be |
128 | defined as platform devices and/or OpenFirmware platform devices. | ||
129 | The code to use these bindings can be selected below. | ||
130 | |||
131 | config LEDS_GPIO_PLATFORM | ||
132 | bool "Platform device bindings for GPIO LEDs" | ||
133 | depends on LEDS_GPIO | ||
134 | default y | ||
135 | help | ||
136 | Let the leds-gpio driver drive LEDs which have been defined as | ||
137 | platform devices. If you don't know what this means, say yes. | ||
138 | |||
139 | config LEDS_GPIO_OF | ||
140 | bool "OpenFirmware platform device bindings for GPIO LEDs" | ||
141 | depends on LEDS_GPIO && OF_DEVICE | ||
142 | default y | ||
143 | help | ||
144 | Let the leds-gpio driver drive LEDs which have been defined as | ||
145 | of_platform devices. For instance, LEDs which are listed in a "dts" | ||
146 | file. | ||
147 | |||
148 | config LEDS_LP5521 | ||
149 | tristate "LED Support for the LP5521 LEDs" | ||
150 | depends on LEDS_CLASS && I2C | ||
151 | help | ||
152 | If you say 'Y' here you get support for the National Semiconductor | ||
153 | LP5521 LED driver used in n8x0 boards. | ||
154 | |||
155 | This driver can be built as a module by choosing 'M'. The module | ||
156 | will be called leds-lp5521. | ||
121 | 157 | ||
122 | config LEDS_CLEVO_MAIL | 158 | config LEDS_CLEVO_MAIL |
123 | tristate "Mail LED on Clevo notebook (EXPERIMENTAL)" | 159 | tristate "Mail LED on Clevo notebook" |
124 | depends on LEDS_CLASS && X86 && SERIO_I8042 && DMI && EXPERIMENTAL | 160 | depends on LEDS_CLASS && X86 && SERIO_I8042 && DMI |
125 | help | 161 | help |
126 | This driver makes the mail LED accessible from userspace | 162 | This driver makes the mail LED accessible from userspace |
127 | programs through the leds subsystem. This LED have three | 163 | programs through the leds subsystem. This LED have three |
@@ -171,6 +207,26 @@ config LEDS_DA903X | |||
171 | This option enables support for on-chip LED drivers found | 207 | This option enables support for on-chip LED drivers found |
172 | on Dialog Semiconductor DA9030/DA9034 PMICs. | 208 | on Dialog Semiconductor DA9030/DA9034 PMICs. |
173 | 209 | ||
210 | config LEDS_DAC124S085 | ||
211 | tristate "LED Support for DAC124S085 SPI DAC" | ||
212 | depends on LEDS_CLASS && SPI | ||
213 | help | ||
214 | This option enables support for DAC124S085 SPI DAC from NatSemi, | ||
215 | which can be used to control up to four LEDs. | ||
216 | |||
217 | config LEDS_PWM | ||
218 | tristate "PWM driven LED Support" | ||
219 | depends on LEDS_CLASS && HAVE_PWM | ||
220 | help | ||
221 | This option enables support for pwm driven LEDs | ||
222 | |||
223 | config LEDS_BD2802 | ||
224 | tristate "LED driver for BD2802 RGB LED" | ||
225 | depends on LEDS_CLASS && I2C | ||
226 | help | ||
227 | This option enables support for BD2802GU RGB LED driver chips | ||
228 | accessed via the I2C bus. | ||
229 | |||
174 | comment "LED Triggers" | 230 | comment "LED Triggers" |
175 | 231 | ||
176 | config LEDS_TRIGGERS | 232 | config LEDS_TRIGGERS |
@@ -216,6 +272,19 @@ config LEDS_TRIGGER_BACKLIGHT | |||
216 | 272 | ||
217 | If unsure, say N. | 273 | If unsure, say N. |
218 | 274 | ||
275 | config LEDS_TRIGGER_GPIO | ||
276 | tristate "LED GPIO Trigger" | ||
277 | depends on LEDS_TRIGGERS | ||
278 | depends on GPIOLIB | ||
279 | help | ||
280 | This allows LEDs to be controlled by gpio events. It's good | ||
281 | when using gpios as switches and triggering the needed LEDs | ||
282 | from there. One use case is n810's keypad LEDs that could | ||
283 | be triggered by this trigger when user slides up to show | ||
284 | keypad. | ||
285 | |||
286 | If unsure, say N. | ||
287 | |||
219 | config LEDS_TRIGGER_DEFAULT_ON | 288 | config LEDS_TRIGGER_DEFAULT_ON |
220 | tristate "LED Default ON Trigger" | 289 | tristate "LED Default ON Trigger" |
221 | depends on LEDS_TRIGGERS | 290 | depends on LEDS_TRIGGERS |
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile index 9d76f0f160a4..2d41c4dcf92f 100644 --- a/drivers/leds/Makefile +++ b/drivers/leds/Makefile | |||
@@ -6,7 +6,9 @@ obj-$(CONFIG_LEDS_TRIGGERS) += led-triggers.o | |||
6 | 6 | ||
7 | # LED Platform Drivers | 7 | # LED Platform Drivers |
8 | obj-$(CONFIG_LEDS_ATMEL_PWM) += leds-atmel-pwm.o | 8 | obj-$(CONFIG_LEDS_ATMEL_PWM) += leds-atmel-pwm.o |
9 | obj-$(CONFIG_LEDS_BD2802) += leds-bd2802.o | ||
9 | obj-$(CONFIG_LEDS_LOCOMO) += leds-locomo.o | 10 | obj-$(CONFIG_LEDS_LOCOMO) += leds-locomo.o |
11 | obj-$(CONFIG_LEDS_MIKROTIK_RB532) += leds-rb532.o | ||
10 | obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o | 12 | obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o |
11 | obj-$(CONFIG_LEDS_AMS_DELTA) += leds-ams-delta.o | 13 | obj-$(CONFIG_LEDS_AMS_DELTA) += leds-ams-delta.o |
12 | obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o | 14 | obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o |
@@ -24,10 +26,15 @@ obj-$(CONFIG_LEDS_FSG) += leds-fsg.o | |||
24 | obj-$(CONFIG_LEDS_PCA955X) += leds-pca955x.o | 26 | obj-$(CONFIG_LEDS_PCA955X) += leds-pca955x.o |
25 | obj-$(CONFIG_LEDS_DA903X) += leds-da903x.o | 27 | obj-$(CONFIG_LEDS_DA903X) += leds-da903x.o |
26 | obj-$(CONFIG_LEDS_WM8350) += leds-wm8350.o | 28 | obj-$(CONFIG_LEDS_WM8350) += leds-wm8350.o |
29 | obj-$(CONFIG_LEDS_PWM) += leds-pwm.o | ||
30 | |||
31 | # LED SPI Drivers | ||
32 | obj-$(CONFIG_LEDS_DAC124S085) += leds-dac124s085.o | ||
27 | 33 | ||
28 | # LED Triggers | 34 | # LED Triggers |
29 | obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o | 35 | obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o |
30 | obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o | 36 | obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o |
31 | obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o | 37 | obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o |
32 | obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o | 38 | obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o |
39 | obj-$(CONFIG_LEDS_TRIGGER_GPIO) += ledtrig-gpio.o | ||
33 | obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o | 40 | obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o |
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index 52f82e3ea13a..f2cc13d76810 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c | |||
@@ -64,7 +64,16 @@ static ssize_t led_brightness_store(struct device *dev, | |||
64 | return ret; | 64 | return ret; |
65 | } | 65 | } |
66 | 66 | ||
67 | static ssize_t led_max_brightness_show(struct device *dev, | ||
68 | struct device_attribute *attr, char *buf) | ||
69 | { | ||
70 | struct led_classdev *led_cdev = dev_get_drvdata(dev); | ||
71 | |||
72 | return sprintf(buf, "%u\n", led_cdev->max_brightness); | ||
73 | } | ||
74 | |||
67 | static DEVICE_ATTR(brightness, 0644, led_brightness_show, led_brightness_store); | 75 | static DEVICE_ATTR(brightness, 0644, led_brightness_show, led_brightness_store); |
76 | static DEVICE_ATTR(max_brightness, 0444, led_max_brightness_show, NULL); | ||
68 | #ifdef CONFIG_LEDS_TRIGGERS | 77 | #ifdef CONFIG_LEDS_TRIGGERS |
69 | static DEVICE_ATTR(trigger, 0644, led_trigger_show, led_trigger_store); | 78 | static DEVICE_ATTR(trigger, 0644, led_trigger_show, led_trigger_store); |
70 | #endif | 79 | #endif |
@@ -138,6 +147,13 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev) | |||
138 | list_add_tail(&led_cdev->node, &leds_list); | 147 | list_add_tail(&led_cdev->node, &leds_list); |
139 | up_write(&leds_list_lock); | 148 | up_write(&leds_list_lock); |
140 | 149 | ||
150 | if (!led_cdev->max_brightness) | ||
151 | led_cdev->max_brightness = LED_FULL; | ||
152 | |||
153 | rc = device_create_file(led_cdev->dev, &dev_attr_max_brightness); | ||
154 | if (rc) | ||
155 | goto err_out_attr_max; | ||
156 | |||
141 | led_update_brightness(led_cdev); | 157 | led_update_brightness(led_cdev); |
142 | 158 | ||
143 | #ifdef CONFIG_LEDS_TRIGGERS | 159 | #ifdef CONFIG_LEDS_TRIGGERS |
@@ -155,9 +171,11 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev) | |||
155 | 171 | ||
156 | #ifdef CONFIG_LEDS_TRIGGERS | 172 | #ifdef CONFIG_LEDS_TRIGGERS |
157 | err_out_led_list: | 173 | err_out_led_list: |
174 | device_remove_file(led_cdev->dev, &dev_attr_max_brightness); | ||
175 | #endif | ||
176 | err_out_attr_max: | ||
158 | device_remove_file(led_cdev->dev, &dev_attr_brightness); | 177 | device_remove_file(led_cdev->dev, &dev_attr_brightness); |
159 | list_del(&led_cdev->node); | 178 | list_del(&led_cdev->node); |
160 | #endif | ||
161 | err_out: | 179 | err_out: |
162 | device_unregister(led_cdev->dev); | 180 | device_unregister(led_cdev->dev); |
163 | return rc; | 181 | return rc; |
@@ -172,6 +190,7 @@ EXPORT_SYMBOL_GPL(led_classdev_register); | |||
172 | */ | 190 | */ |
173 | void led_classdev_unregister(struct led_classdev *led_cdev) | 191 | void led_classdev_unregister(struct led_classdev *led_cdev) |
174 | { | 192 | { |
193 | device_remove_file(led_cdev->dev, &dev_attr_max_brightness); | ||
175 | device_remove_file(led_cdev->dev, &dev_attr_brightness); | 194 | device_remove_file(led_cdev->dev, &dev_attr_brightness); |
176 | #ifdef CONFIG_LEDS_TRIGGERS | 195 | #ifdef CONFIG_LEDS_TRIGGERS |
177 | device_remove_file(led_cdev->dev, &dev_attr_trigger); | 196 | device_remove_file(led_cdev->dev, &dev_attr_trigger); |
diff --git a/drivers/leds/led-triggers.c b/drivers/leds/led-triggers.c index f910eaffe3a6..d8ddd9ef8994 100644 --- a/drivers/leds/led-triggers.c +++ b/drivers/leds/led-triggers.c | |||
@@ -156,12 +156,20 @@ EXPORT_SYMBOL_GPL(led_trigger_set_default); | |||
156 | int led_trigger_register(struct led_trigger *trigger) | 156 | int led_trigger_register(struct led_trigger *trigger) |
157 | { | 157 | { |
158 | struct led_classdev *led_cdev; | 158 | struct led_classdev *led_cdev; |
159 | struct led_trigger *trig; | ||
159 | 160 | ||
160 | rwlock_init(&trigger->leddev_list_lock); | 161 | rwlock_init(&trigger->leddev_list_lock); |
161 | INIT_LIST_HEAD(&trigger->led_cdevs); | 162 | INIT_LIST_HEAD(&trigger->led_cdevs); |
162 | 163 | ||
163 | /* Add to the list of led triggers */ | ||
164 | down_write(&triggers_list_lock); | 164 | down_write(&triggers_list_lock); |
165 | /* Make sure the trigger's name isn't already in use */ | ||
166 | list_for_each_entry(trig, &trigger_list, next_trig) { | ||
167 | if (!strcmp(trig->name, trigger->name)) { | ||
168 | up_write(&triggers_list_lock); | ||
169 | return -EEXIST; | ||
170 | } | ||
171 | } | ||
172 | /* Add to the list of led triggers */ | ||
165 | list_add_tail(&trigger->next_trig, &trigger_list); | 173 | list_add_tail(&trigger->next_trig, &trigger_list); |
166 | up_write(&triggers_list_lock); | 174 | up_write(&triggers_list_lock); |
167 | 175 | ||
diff --git a/drivers/leds/leds-bd2802.c b/drivers/leds/leds-bd2802.c new file mode 100644 index 000000000000..4149ecb3a9b2 --- /dev/null +++ b/drivers/leds/leds-bd2802.c | |||
@@ -0,0 +1,765 @@ | |||
1 | /* | ||
2 | * leds-bd2802.c - RGB LED Driver | ||
3 | * | ||
4 | * Copyright (C) 2009 Samsung Electronics | ||
5 | * Kim Kyuwon <q1.kim@samsung.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * Datasheet: http://www.rohm.com/products/databook/driver/pdf/bd2802gu-e.pdf | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <linux/module.h> | ||
16 | #include <linux/i2c.h> | ||
17 | #include <linux/gpio.h> | ||
18 | #include <linux/delay.h> | ||
19 | #include <linux/leds.h> | ||
20 | #include <linux/leds-bd2802.h> | ||
21 | |||
22 | |||
23 | #define LED_CTL(rgb2en, rgb1en) ((rgb2en) << 4 | ((rgb1en) << 0)) | ||
24 | |||
25 | #define BD2802_LED_OFFSET 0xa | ||
26 | #define BD2802_COLOR_OFFSET 0x3 | ||
27 | |||
28 | #define BD2802_REG_CLKSETUP 0x00 | ||
29 | #define BD2802_REG_CONTROL 0x01 | ||
30 | #define BD2802_REG_HOURSETUP 0x02 | ||
31 | #define BD2802_REG_CURRENT1SETUP 0x03 | ||
32 | #define BD2802_REG_CURRENT2SETUP 0x04 | ||
33 | #define BD2802_REG_WAVEPATTERN 0x05 | ||
34 | |||
35 | #define BD2802_CURRENT_032 0x10 /* 3.2mA */ | ||
36 | #define BD2802_CURRENT_000 0x00 /* 0.0mA */ | ||
37 | |||
38 | #define BD2802_PATTERN_FULL 0x07 | ||
39 | #define BD2802_PATTERN_HALF 0x03 | ||
40 | |||
41 | enum led_ids { | ||
42 | LED1, | ||
43 | LED2, | ||
44 | LED_NUM, | ||
45 | }; | ||
46 | |||
47 | enum led_colors { | ||
48 | RED, | ||
49 | GREEN, | ||
50 | BLUE, | ||
51 | }; | ||
52 | |||
53 | enum led_bits { | ||
54 | BD2802_OFF, | ||
55 | BD2802_BLINK, | ||
56 | BD2802_ON, | ||
57 | }; | ||
58 | |||
59 | /* | ||
60 | * State '0' : 'off' | ||
61 | * State '1' : 'blink' | ||
62 | * State '2' : 'on'. | ||
63 | */ | ||
64 | struct led_state { | ||
65 | unsigned r:2; | ||
66 | unsigned g:2; | ||
67 | unsigned b:2; | ||
68 | }; | ||
69 | |||
70 | struct bd2802_led { | ||
71 | struct bd2802_led_platform_data *pdata; | ||
72 | struct i2c_client *client; | ||
73 | struct rw_semaphore rwsem; | ||
74 | struct work_struct work; | ||
75 | |||
76 | struct led_state led[2]; | ||
77 | |||
78 | /* | ||
79 | * Making led_classdev as array is not recommended, because array | ||
80 | * members prevent using 'container_of' macro. So repetitive works | ||
81 | * are needed. | ||
82 | */ | ||
83 | struct led_classdev cdev_led1r; | ||
84 | struct led_classdev cdev_led1g; | ||
85 | struct led_classdev cdev_led1b; | ||
86 | struct led_classdev cdev_led2r; | ||
87 | struct led_classdev cdev_led2g; | ||
88 | struct led_classdev cdev_led2b; | ||
89 | |||
90 | /* | ||
91 | * Advanced Configuration Function(ADF) mode: | ||
92 | * In ADF mode, user can set registers of BD2802GU directly, | ||
93 | * therefore BD2802GU doesn't enter reset state. | ||
94 | */ | ||
95 | int adf_on; | ||
96 | |||
97 | enum led_ids led_id; | ||
98 | enum led_colors color; | ||
99 | enum led_bits state; | ||
100 | }; | ||
101 | |||
102 | |||
103 | /*--------------------------------------------------------------*/ | ||
104 | /* BD2802GU helper functions */ | ||
105 | /*--------------------------------------------------------------*/ | ||
106 | |||
107 | static inline int bd2802_is_rgb_off(struct bd2802_led *led, enum led_ids id, | ||
108 | enum led_colors color) | ||
109 | { | ||
110 | switch (color) { | ||
111 | case RED: | ||
112 | return !led->led[id].r; | ||
113 | case GREEN: | ||
114 | return !led->led[id].g; | ||
115 | case BLUE: | ||
116 | return !led->led[id].b; | ||
117 | default: | ||
118 | dev_err(&led->client->dev, "%s: Invalid color\n", __func__); | ||
119 | return -EINVAL; | ||
120 | } | ||
121 | } | ||
122 | |||
123 | static inline int bd2802_is_led_off(struct bd2802_led *led, enum led_ids id) | ||
124 | { | ||
125 | if (led->led[id].r || led->led[id].g || led->led[id].b) | ||
126 | return 0; | ||
127 | |||
128 | return 1; | ||
129 | } | ||
130 | |||
131 | static inline int bd2802_is_all_off(struct bd2802_led *led) | ||
132 | { | ||
133 | int i; | ||
134 | |||
135 | for (i = 0; i < LED_NUM; i++) | ||
136 | if (!bd2802_is_led_off(led, i)) | ||
137 | return 0; | ||
138 | |||
139 | return 1; | ||
140 | } | ||
141 | |||
142 | static inline u8 bd2802_get_base_offset(enum led_ids id, enum led_colors color) | ||
143 | { | ||
144 | return id * BD2802_LED_OFFSET + color * BD2802_COLOR_OFFSET; | ||
145 | } | ||
146 | |||
147 | static inline u8 bd2802_get_reg_addr(enum led_ids id, enum led_colors color, | ||
148 | u8 reg_offset) | ||
149 | { | ||
150 | return reg_offset + bd2802_get_base_offset(id, color); | ||
151 | } | ||
152 | |||
153 | |||
154 | /*--------------------------------------------------------------*/ | ||
155 | /* BD2802GU core functions */ | ||
156 | /*--------------------------------------------------------------*/ | ||
157 | |||
158 | static int bd2802_write_byte(struct i2c_client *client, u8 reg, u8 val) | ||
159 | { | ||
160 | int ret = i2c_smbus_write_byte_data(client, reg, val); | ||
161 | if (ret >= 0) | ||
162 | return 0; | ||
163 | |||
164 | dev_err(&client->dev, "%s: reg 0x%x, val 0x%x, err %d\n", | ||
165 | __func__, reg, val, ret); | ||
166 | |||
167 | return ret; | ||
168 | } | ||
169 | |||
170 | static void bd2802_update_state(struct bd2802_led *led, enum led_ids id, | ||
171 | enum led_colors color, enum led_bits led_bit) | ||
172 | { | ||
173 | int i; | ||
174 | u8 value; | ||
175 | |||
176 | for (i = 0; i < LED_NUM; i++) { | ||
177 | if (i == id) { | ||
178 | switch (color) { | ||
179 | case RED: | ||
180 | led->led[i].r = led_bit; | ||
181 | break; | ||
182 | case GREEN: | ||
183 | led->led[i].g = led_bit; | ||
184 | break; | ||
185 | case BLUE: | ||
186 | led->led[i].b = led_bit; | ||
187 | break; | ||
188 | default: | ||
189 | dev_err(&led->client->dev, | ||
190 | "%s: Invalid color\n", __func__); | ||
191 | return; | ||
192 | } | ||
193 | } | ||
194 | } | ||
195 | |||
196 | if (led_bit == BD2802_BLINK || led_bit == BD2802_ON) | ||
197 | return; | ||
198 | |||
199 | if (!bd2802_is_led_off(led, id)) | ||
200 | return; | ||
201 | |||
202 | if (bd2802_is_all_off(led) && !led->adf_on) { | ||
203 | gpio_set_value(led->pdata->reset_gpio, 0); | ||
204 | return; | ||
205 | } | ||
206 | |||
207 | /* | ||
208 | * In this case, other led is turned on, and current led is turned | ||
209 | * off. So set RGB LED Control register to stop the current RGB LED | ||
210 | */ | ||
211 | value = (id == LED1) ? LED_CTL(1, 0) : LED_CTL(0, 1); | ||
212 | bd2802_write_byte(led->client, BD2802_REG_CONTROL, value); | ||
213 | } | ||
214 | |||
215 | static void bd2802_configure(struct bd2802_led *led) | ||
216 | { | ||
217 | struct bd2802_led_platform_data *pdata = led->pdata; | ||
218 | u8 reg; | ||
219 | |||
220 | reg = bd2802_get_reg_addr(LED1, RED, BD2802_REG_HOURSETUP); | ||
221 | bd2802_write_byte(led->client, reg, pdata->rgb_time); | ||
222 | |||
223 | reg = bd2802_get_reg_addr(LED2, RED, BD2802_REG_HOURSETUP); | ||
224 | bd2802_write_byte(led->client, reg, pdata->rgb_time); | ||
225 | } | ||
226 | |||
227 | static void bd2802_reset_cancel(struct bd2802_led *led) | ||
228 | { | ||
229 | gpio_set_value(led->pdata->reset_gpio, 1); | ||
230 | udelay(100); | ||
231 | bd2802_configure(led); | ||
232 | } | ||
233 | |||
234 | static void bd2802_enable(struct bd2802_led *led, enum led_ids id) | ||
235 | { | ||
236 | enum led_ids other_led = (id == LED1) ? LED2 : LED1; | ||
237 | u8 value, other_led_on; | ||
238 | |||
239 | other_led_on = !bd2802_is_led_off(led, other_led); | ||
240 | if (id == LED1) | ||
241 | value = LED_CTL(other_led_on, 1); | ||
242 | else | ||
243 | value = LED_CTL(1 , other_led_on); | ||
244 | |||
245 | bd2802_write_byte(led->client, BD2802_REG_CONTROL, value); | ||
246 | } | ||
247 | |||
248 | static void bd2802_set_on(struct bd2802_led *led, enum led_ids id, | ||
249 | enum led_colors color) | ||
250 | { | ||
251 | u8 reg; | ||
252 | |||
253 | if (bd2802_is_all_off(led) && !led->adf_on) | ||
254 | bd2802_reset_cancel(led); | ||
255 | |||
256 | reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT1SETUP); | ||
257 | bd2802_write_byte(led->client, reg, BD2802_CURRENT_032); | ||
258 | reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT2SETUP); | ||
259 | bd2802_write_byte(led->client, reg, BD2802_CURRENT_000); | ||
260 | reg = bd2802_get_reg_addr(id, color, BD2802_REG_WAVEPATTERN); | ||
261 | bd2802_write_byte(led->client, reg, BD2802_PATTERN_FULL); | ||
262 | |||
263 | bd2802_enable(led, id); | ||
264 | bd2802_update_state(led, id, color, BD2802_ON); | ||
265 | } | ||
266 | |||
267 | static void bd2802_set_blink(struct bd2802_led *led, enum led_ids id, | ||
268 | enum led_colors color) | ||
269 | { | ||
270 | u8 reg; | ||
271 | |||
272 | if (bd2802_is_all_off(led) && !led->adf_on) | ||
273 | bd2802_reset_cancel(led); | ||
274 | |||
275 | reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT1SETUP); | ||
276 | bd2802_write_byte(led->client, reg, BD2802_CURRENT_000); | ||
277 | reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT2SETUP); | ||
278 | bd2802_write_byte(led->client, reg, BD2802_CURRENT_032); | ||
279 | reg = bd2802_get_reg_addr(id, color, BD2802_REG_WAVEPATTERN); | ||
280 | bd2802_write_byte(led->client, reg, BD2802_PATTERN_HALF); | ||
281 | |||
282 | bd2802_enable(led, id); | ||
283 | bd2802_update_state(led, id, color, BD2802_BLINK); | ||
284 | } | ||
285 | |||
286 | static void bd2802_turn_on(struct bd2802_led *led, enum led_ids id, | ||
287 | enum led_colors color, enum led_bits led_bit) | ||
288 | { | ||
289 | if (led_bit == BD2802_OFF) { | ||
290 | dev_err(&led->client->dev, | ||
291 | "Only 'blink' and 'on' are allowed\n"); | ||
292 | return; | ||
293 | } | ||
294 | |||
295 | if (led_bit == BD2802_BLINK) | ||
296 | bd2802_set_blink(led, id, color); | ||
297 | else | ||
298 | bd2802_set_on(led, id, color); | ||
299 | } | ||
300 | |||
301 | static void bd2802_turn_off(struct bd2802_led *led, enum led_ids id, | ||
302 | enum led_colors color) | ||
303 | { | ||
304 | u8 reg; | ||
305 | |||
306 | if (bd2802_is_rgb_off(led, id, color)) | ||
307 | return; | ||
308 | |||
309 | reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT1SETUP); | ||
310 | bd2802_write_byte(led->client, reg, BD2802_CURRENT_000); | ||
311 | reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT2SETUP); | ||
312 | bd2802_write_byte(led->client, reg, BD2802_CURRENT_000); | ||
313 | |||
314 | bd2802_update_state(led, id, color, BD2802_OFF); | ||
315 | } | ||
316 | |||
317 | static void bd2802_restore_state(struct bd2802_led *led) | ||
318 | { | ||
319 | int i; | ||
320 | |||
321 | for (i = 0; i < LED_NUM; i++) { | ||
322 | if (led->led[i].r) | ||
323 | bd2802_turn_on(led, i, RED, led->led[i].r); | ||
324 | if (led->led[i].g) | ||
325 | bd2802_turn_on(led, i, GREEN, led->led[i].g); | ||
326 | if (led->led[i].b) | ||
327 | bd2802_turn_on(led, i, BLUE, led->led[i].b); | ||
328 | } | ||
329 | } | ||
330 | |||
331 | #define BD2802_SET_REGISTER(reg_addr, reg_name) \ | ||
332 | static ssize_t bd2802_store_reg##reg_addr(struct device *dev, \ | ||
333 | struct device_attribute *attr, const char *buf, size_t count) \ | ||
334 | { \ | ||
335 | struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));\ | ||
336 | unsigned long val; \ | ||
337 | int ret; \ | ||
338 | if (!count) \ | ||
339 | return -EINVAL; \ | ||
340 | ret = strict_strtoul(buf, 16, &val); \ | ||
341 | if (ret) \ | ||
342 | return ret; \ | ||
343 | down_write(&led->rwsem); \ | ||
344 | bd2802_write_byte(led->client, reg_addr, (u8) val); \ | ||
345 | up_write(&led->rwsem); \ | ||
346 | return count; \ | ||
347 | } \ | ||
348 | static struct device_attribute bd2802_reg##reg_addr##_attr = { \ | ||
349 | .attr = {.name = reg_name, .mode = 0644, .owner = THIS_MODULE}, \ | ||
350 | .store = bd2802_store_reg##reg_addr, \ | ||
351 | }; | ||
352 | |||
353 | BD2802_SET_REGISTER(0x00, "0x00"); | ||
354 | BD2802_SET_REGISTER(0x01, "0x01"); | ||
355 | BD2802_SET_REGISTER(0x02, "0x02"); | ||
356 | BD2802_SET_REGISTER(0x03, "0x03"); | ||
357 | BD2802_SET_REGISTER(0x04, "0x04"); | ||
358 | BD2802_SET_REGISTER(0x05, "0x05"); | ||
359 | BD2802_SET_REGISTER(0x06, "0x06"); | ||
360 | BD2802_SET_REGISTER(0x07, "0x07"); | ||
361 | BD2802_SET_REGISTER(0x08, "0x08"); | ||
362 | BD2802_SET_REGISTER(0x09, "0x09"); | ||
363 | BD2802_SET_REGISTER(0x0a, "0x0a"); | ||
364 | BD2802_SET_REGISTER(0x0b, "0x0b"); | ||
365 | BD2802_SET_REGISTER(0x0c, "0x0c"); | ||
366 | BD2802_SET_REGISTER(0x0d, "0x0d"); | ||
367 | BD2802_SET_REGISTER(0x0e, "0x0e"); | ||
368 | BD2802_SET_REGISTER(0x0f, "0x0f"); | ||
369 | BD2802_SET_REGISTER(0x10, "0x10"); | ||
370 | BD2802_SET_REGISTER(0x11, "0x11"); | ||
371 | BD2802_SET_REGISTER(0x12, "0x12"); | ||
372 | BD2802_SET_REGISTER(0x13, "0x13"); | ||
373 | BD2802_SET_REGISTER(0x14, "0x14"); | ||
374 | BD2802_SET_REGISTER(0x15, "0x15"); | ||
375 | |||
376 | static struct device_attribute *bd2802_addr_attributes[] = { | ||
377 | &bd2802_reg0x00_attr, | ||
378 | &bd2802_reg0x01_attr, | ||
379 | &bd2802_reg0x02_attr, | ||
380 | &bd2802_reg0x03_attr, | ||
381 | &bd2802_reg0x04_attr, | ||
382 | &bd2802_reg0x05_attr, | ||
383 | &bd2802_reg0x06_attr, | ||
384 | &bd2802_reg0x07_attr, | ||
385 | &bd2802_reg0x08_attr, | ||
386 | &bd2802_reg0x09_attr, | ||
387 | &bd2802_reg0x0a_attr, | ||
388 | &bd2802_reg0x0b_attr, | ||
389 | &bd2802_reg0x0c_attr, | ||
390 | &bd2802_reg0x0d_attr, | ||
391 | &bd2802_reg0x0e_attr, | ||
392 | &bd2802_reg0x0f_attr, | ||
393 | &bd2802_reg0x10_attr, | ||
394 | &bd2802_reg0x11_attr, | ||
395 | &bd2802_reg0x12_attr, | ||
396 | &bd2802_reg0x13_attr, | ||
397 | &bd2802_reg0x14_attr, | ||
398 | &bd2802_reg0x15_attr, | ||
399 | }; | ||
400 | |||
401 | static void bd2802_enable_adv_conf(struct bd2802_led *led) | ||
402 | { | ||
403 | int i, ret; | ||
404 | |||
405 | for (i = 0; i < ARRAY_SIZE(bd2802_addr_attributes); i++) { | ||
406 | ret = device_create_file(&led->client->dev, | ||
407 | bd2802_addr_attributes[i]); | ||
408 | if (ret) { | ||
409 | dev_err(&led->client->dev, "failed to sysfs file %s\n", | ||
410 | bd2802_addr_attributes[i]->attr.name); | ||
411 | goto failed_remove_files; | ||
412 | } | ||
413 | } | ||
414 | |||
415 | if (bd2802_is_all_off(led)) | ||
416 | bd2802_reset_cancel(led); | ||
417 | |||
418 | led->adf_on = 1; | ||
419 | |||
420 | return; | ||
421 | |||
422 | failed_remove_files: | ||
423 | for (i--; i >= 0; i--) | ||
424 | device_remove_file(&led->client->dev, | ||
425 | bd2802_addr_attributes[i]); | ||
426 | } | ||
427 | |||
428 | static void bd2802_disable_adv_conf(struct bd2802_led *led) | ||
429 | { | ||
430 | int i; | ||
431 | |||
432 | for (i = 0; i < ARRAY_SIZE(bd2802_addr_attributes); i++) | ||
433 | device_remove_file(&led->client->dev, | ||
434 | bd2802_addr_attributes[i]); | ||
435 | |||
436 | if (bd2802_is_all_off(led)) | ||
437 | gpio_set_value(led->pdata->reset_gpio, 0); | ||
438 | |||
439 | led->adf_on = 0; | ||
440 | } | ||
441 | |||
442 | static ssize_t bd2802_show_adv_conf(struct device *dev, | ||
443 | struct device_attribute *attr, char *buf) | ||
444 | { | ||
445 | struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev)); | ||
446 | ssize_t ret; | ||
447 | |||
448 | down_read(&led->rwsem); | ||
449 | if (led->adf_on) | ||
450 | ret = sprintf(buf, "on\n"); | ||
451 | else | ||
452 | ret = sprintf(buf, "off\n"); | ||
453 | up_read(&led->rwsem); | ||
454 | |||
455 | return ret; | ||
456 | } | ||
457 | |||
458 | static ssize_t bd2802_store_adv_conf(struct device *dev, | ||
459 | struct device_attribute *attr, const char *buf, size_t count) | ||
460 | { | ||
461 | struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev)); | ||
462 | |||
463 | if (!count) | ||
464 | return -EINVAL; | ||
465 | |||
466 | down_write(&led->rwsem); | ||
467 | if (!led->adf_on && !strncmp(buf, "on", 2)) | ||
468 | bd2802_enable_adv_conf(led); | ||
469 | else if (led->adf_on && !strncmp(buf, "off", 3)) | ||
470 | bd2802_disable_adv_conf(led); | ||
471 | up_write(&led->rwsem); | ||
472 | |||
473 | return count; | ||
474 | } | ||
475 | |||
476 | static struct device_attribute bd2802_adv_conf_attr = { | ||
477 | .attr = { | ||
478 | .name = "advanced_configuration", | ||
479 | .mode = 0644, | ||
480 | .owner = THIS_MODULE | ||
481 | }, | ||
482 | .show = bd2802_show_adv_conf, | ||
483 | .store = bd2802_store_adv_conf, | ||
484 | }; | ||
485 | |||
486 | static void bd2802_led_work(struct work_struct *work) | ||
487 | { | ||
488 | struct bd2802_led *led = container_of(work, struct bd2802_led, work); | ||
489 | |||
490 | if (led->state) | ||
491 | bd2802_turn_on(led, led->led_id, led->color, led->state); | ||
492 | else | ||
493 | bd2802_turn_off(led, led->led_id, led->color); | ||
494 | } | ||
495 | |||
496 | #define BD2802_CONTROL_RGBS(name, id, clr) \ | ||
497 | static void bd2802_set_##name##_brightness(struct led_classdev *led_cdev,\ | ||
498 | enum led_brightness value) \ | ||
499 | { \ | ||
500 | struct bd2802_led *led = \ | ||
501 | container_of(led_cdev, struct bd2802_led, cdev_##name); \ | ||
502 | led->led_id = id; \ | ||
503 | led->color = clr; \ | ||
504 | if (value == LED_OFF) \ | ||
505 | led->state = BD2802_OFF; \ | ||
506 | else \ | ||
507 | led->state = BD2802_ON; \ | ||
508 | schedule_work(&led->work); \ | ||
509 | } \ | ||
510 | static int bd2802_set_##name##_blink(struct led_classdev *led_cdev, \ | ||
511 | unsigned long *delay_on, unsigned long *delay_off) \ | ||
512 | { \ | ||
513 | struct bd2802_led *led = \ | ||
514 | container_of(led_cdev, struct bd2802_led, cdev_##name); \ | ||
515 | if (*delay_on == 0 || *delay_off == 0) \ | ||
516 | return -EINVAL; \ | ||
517 | led->led_id = id; \ | ||
518 | led->color = clr; \ | ||
519 | led->state = BD2802_BLINK; \ | ||
520 | schedule_work(&led->work); \ | ||
521 | return 0; \ | ||
522 | } | ||
523 | |||
524 | BD2802_CONTROL_RGBS(led1r, LED1, RED); | ||
525 | BD2802_CONTROL_RGBS(led1g, LED1, GREEN); | ||
526 | BD2802_CONTROL_RGBS(led1b, LED1, BLUE); | ||
527 | BD2802_CONTROL_RGBS(led2r, LED2, RED); | ||
528 | BD2802_CONTROL_RGBS(led2g, LED2, GREEN); | ||
529 | BD2802_CONTROL_RGBS(led2b, LED2, BLUE); | ||
530 | |||
531 | static int bd2802_register_led_classdev(struct bd2802_led *led) | ||
532 | { | ||
533 | int ret; | ||
534 | |||
535 | INIT_WORK(&led->work, bd2802_led_work); | ||
536 | |||
537 | led->cdev_led1r.name = "led1_R"; | ||
538 | led->cdev_led1r.brightness = LED_OFF; | ||
539 | led->cdev_led1r.brightness_set = bd2802_set_led1r_brightness; | ||
540 | led->cdev_led1r.blink_set = bd2802_set_led1r_blink; | ||
541 | led->cdev_led1r.flags |= LED_CORE_SUSPENDRESUME; | ||
542 | |||
543 | ret = led_classdev_register(&led->client->dev, &led->cdev_led1r); | ||
544 | if (ret < 0) { | ||
545 | dev_err(&led->client->dev, "couldn't register LED %s\n", | ||
546 | led->cdev_led1r.name); | ||
547 | goto failed_unregister_led1_R; | ||
548 | } | ||
549 | |||
550 | led->cdev_led1g.name = "led1_G"; | ||
551 | led->cdev_led1g.brightness = LED_OFF; | ||
552 | led->cdev_led1g.brightness_set = bd2802_set_led1g_brightness; | ||
553 | led->cdev_led1g.blink_set = bd2802_set_led1g_blink; | ||
554 | led->cdev_led1g.flags |= LED_CORE_SUSPENDRESUME; | ||
555 | |||
556 | ret = led_classdev_register(&led->client->dev, &led->cdev_led1g); | ||
557 | if (ret < 0) { | ||
558 | dev_err(&led->client->dev, "couldn't register LED %s\n", | ||
559 | led->cdev_led1g.name); | ||
560 | goto failed_unregister_led1_G; | ||
561 | } | ||
562 | |||
563 | led->cdev_led1b.name = "led1_B"; | ||
564 | led->cdev_led1b.brightness = LED_OFF; | ||
565 | led->cdev_led1b.brightness_set = bd2802_set_led1b_brightness; | ||
566 | led->cdev_led1b.blink_set = bd2802_set_led1b_blink; | ||
567 | led->cdev_led1b.flags |= LED_CORE_SUSPENDRESUME; | ||
568 | |||
569 | ret = led_classdev_register(&led->client->dev, &led->cdev_led1b); | ||
570 | if (ret < 0) { | ||
571 | dev_err(&led->client->dev, "couldn't register LED %s\n", | ||
572 | led->cdev_led1b.name); | ||
573 | goto failed_unregister_led1_B; | ||
574 | } | ||
575 | |||
576 | led->cdev_led2r.name = "led2_R"; | ||
577 | led->cdev_led2r.brightness = LED_OFF; | ||
578 | led->cdev_led2r.brightness_set = bd2802_set_led2r_brightness; | ||
579 | led->cdev_led2r.blink_set = bd2802_set_led2r_blink; | ||
580 | led->cdev_led2r.flags |= LED_CORE_SUSPENDRESUME; | ||
581 | |||
582 | ret = led_classdev_register(&led->client->dev, &led->cdev_led2r); | ||
583 | if (ret < 0) { | ||
584 | dev_err(&led->client->dev, "couldn't register LED %s\n", | ||
585 | led->cdev_led2r.name); | ||
586 | goto failed_unregister_led2_R; | ||
587 | } | ||
588 | |||
589 | led->cdev_led2g.name = "led2_G"; | ||
590 | led->cdev_led2g.brightness = LED_OFF; | ||
591 | led->cdev_led2g.brightness_set = bd2802_set_led2g_brightness; | ||
592 | led->cdev_led2g.blink_set = bd2802_set_led2g_blink; | ||
593 | led->cdev_led2g.flags |= LED_CORE_SUSPENDRESUME; | ||
594 | |||
595 | ret = led_classdev_register(&led->client->dev, &led->cdev_led2g); | ||
596 | if (ret < 0) { | ||
597 | dev_err(&led->client->dev, "couldn't register LED %s\n", | ||
598 | led->cdev_led2g.name); | ||
599 | goto failed_unregister_led2_G; | ||
600 | } | ||
601 | |||
602 | led->cdev_led2b.name = "led2_B"; | ||
603 | led->cdev_led2b.brightness = LED_OFF; | ||
604 | led->cdev_led2b.brightness_set = bd2802_set_led2b_brightness; | ||
605 | led->cdev_led2b.blink_set = bd2802_set_led2b_blink; | ||
606 | led->cdev_led2b.flags |= LED_CORE_SUSPENDRESUME; | ||
607 | |||
608 | ret = led_classdev_register(&led->client->dev, &led->cdev_led2b); | ||
609 | if (ret < 0) { | ||
610 | dev_err(&led->client->dev, "couldn't register LED %s\n", | ||
611 | led->cdev_led2b.name); | ||
612 | goto failed_unregister_led2_B; | ||
613 | } | ||
614 | |||
615 | return 0; | ||
616 | |||
617 | failed_unregister_led2_B: | ||
618 | led_classdev_unregister(&led->cdev_led2g); | ||
619 | failed_unregister_led2_G: | ||
620 | led_classdev_unregister(&led->cdev_led2r); | ||
621 | failed_unregister_led2_R: | ||
622 | led_classdev_unregister(&led->cdev_led1b); | ||
623 | failed_unregister_led1_B: | ||
624 | led_classdev_unregister(&led->cdev_led1g); | ||
625 | failed_unregister_led1_G: | ||
626 | led_classdev_unregister(&led->cdev_led1r); | ||
627 | failed_unregister_led1_R: | ||
628 | |||
629 | return ret; | ||
630 | } | ||
631 | |||
632 | static void bd2802_unregister_led_classdev(struct bd2802_led *led) | ||
633 | { | ||
634 | cancel_work_sync(&led->work); | ||
635 | led_classdev_unregister(&led->cdev_led1r); | ||
636 | } | ||
637 | |||
638 | static int __devinit bd2802_probe(struct i2c_client *client, | ||
639 | const struct i2c_device_id *id) | ||
640 | { | ||
641 | struct bd2802_led *led; | ||
642 | struct bd2802_led_platform_data *pdata; | ||
643 | int ret; | ||
644 | |||
645 | led = kzalloc(sizeof(struct bd2802_led), GFP_KERNEL); | ||
646 | if (!led) { | ||
647 | dev_err(&client->dev, "failed to allocate driver data\n"); | ||
648 | return -ENOMEM; | ||
649 | } | ||
650 | |||
651 | led->client = client; | ||
652 | pdata = led->pdata = client->dev.platform_data; | ||
653 | i2c_set_clientdata(client, led); | ||
654 | |||
655 | /* Configure RESET GPIO (L: RESET, H: RESET cancel) */ | ||
656 | gpio_request(pdata->reset_gpio, "RGB_RESETB"); | ||
657 | gpio_direction_output(pdata->reset_gpio, 1); | ||
658 | |||
659 | /* Tacss = min 0.1ms */ | ||
660 | udelay(100); | ||
661 | |||
662 | /* Detect BD2802GU */ | ||
663 | ret = bd2802_write_byte(client, BD2802_REG_CLKSETUP, 0x00); | ||
664 | if (ret < 0) { | ||
665 | dev_err(&client->dev, "failed to detect device\n"); | ||
666 | goto failed_free; | ||
667 | } else | ||
668 | dev_info(&client->dev, "return 0x%02x\n", ret); | ||
669 | |||
670 | /* To save the power, reset BD2802 after detecting */ | ||
671 | gpio_set_value(led->pdata->reset_gpio, 0); | ||
672 | |||
673 | init_rwsem(&led->rwsem); | ||
674 | |||
675 | ret = device_create_file(&client->dev, &bd2802_adv_conf_attr); | ||
676 | if (ret) { | ||
677 | dev_err(&client->dev, "failed to create sysfs file %s\n", | ||
678 | bd2802_adv_conf_attr.attr.name); | ||
679 | goto failed_free; | ||
680 | } | ||
681 | |||
682 | ret = bd2802_register_led_classdev(led); | ||
683 | if (ret < 0) | ||
684 | goto failed_unregister_dev_file; | ||
685 | |||
686 | return 0; | ||
687 | |||
688 | failed_unregister_dev_file: | ||
689 | device_remove_file(&client->dev, &bd2802_adv_conf_attr); | ||
690 | failed_free: | ||
691 | i2c_set_clientdata(client, NULL); | ||
692 | kfree(led); | ||
693 | |||
694 | return ret; | ||
695 | } | ||
696 | |||
697 | static int __exit bd2802_remove(struct i2c_client *client) | ||
698 | { | ||
699 | struct bd2802_led *led = i2c_get_clientdata(client); | ||
700 | |||
701 | bd2802_unregister_led_classdev(led); | ||
702 | gpio_set_value(led->pdata->reset_gpio, 0); | ||
703 | if (led->adf_on) | ||
704 | bd2802_disable_adv_conf(led); | ||
705 | device_remove_file(&client->dev, &bd2802_adv_conf_attr); | ||
706 | i2c_set_clientdata(client, NULL); | ||
707 | kfree(led); | ||
708 | |||
709 | return 0; | ||
710 | } | ||
711 | |||
712 | static int bd2802_suspend(struct i2c_client *client, pm_message_t mesg) | ||
713 | { | ||
714 | struct bd2802_led *led = i2c_get_clientdata(client); | ||
715 | |||
716 | gpio_set_value(led->pdata->reset_gpio, 0); | ||
717 | |||
718 | return 0; | ||
719 | } | ||
720 | |||
721 | static int bd2802_resume(struct i2c_client *client) | ||
722 | { | ||
723 | struct bd2802_led *led = i2c_get_clientdata(client); | ||
724 | |||
725 | if (!bd2802_is_all_off(led) || led->adf_on) { | ||
726 | gpio_set_value(led->pdata->reset_gpio, 1); | ||
727 | udelay(100); | ||
728 | bd2802_restore_state(led); | ||
729 | } | ||
730 | |||
731 | return 0; | ||
732 | } | ||
733 | |||
734 | static const struct i2c_device_id bd2802_id[] = { | ||
735 | { "BD2802", 0 }, | ||
736 | { } | ||
737 | }; | ||
738 | MODULE_DEVICE_TABLE(i2c, bd2802_id); | ||
739 | |||
740 | static struct i2c_driver bd2802_i2c_driver = { | ||
741 | .driver = { | ||
742 | .name = "BD2802", | ||
743 | }, | ||
744 | .probe = bd2802_probe, | ||
745 | .remove = __exit_p(bd2802_remove), | ||
746 | .suspend = bd2802_suspend, | ||
747 | .resume = bd2802_resume, | ||
748 | .id_table = bd2802_id, | ||
749 | }; | ||
750 | |||
751 | static int __init bd2802_init(void) | ||
752 | { | ||
753 | return i2c_add_driver(&bd2802_i2c_driver); | ||
754 | } | ||
755 | module_init(bd2802_init); | ||
756 | |||
757 | static void __exit bd2802_exit(void) | ||
758 | { | ||
759 | i2c_del_driver(&bd2802_i2c_driver); | ||
760 | } | ||
761 | module_exit(bd2802_exit); | ||
762 | |||
763 | MODULE_AUTHOR("Kim Kyuwon <q1.kim@samsung.com>"); | ||
764 | MODULE_DESCRIPTION("BD2802 LED driver"); | ||
765 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/leds/leds-dac124s085.c b/drivers/leds/leds-dac124s085.c new file mode 100644 index 000000000000..098d9aae7259 --- /dev/null +++ b/drivers/leds/leds-dac124s085.c | |||
@@ -0,0 +1,150 @@ | |||
1 | /* | ||
2 | * Copyright 2008 | ||
3 | * Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de> | ||
4 | * | ||
5 | * This file is subject to the terms and conditions of version 2 of | ||
6 | * the GNU General Public License. See the file COPYING in the main | ||
7 | * directory of this archive for more details. | ||
8 | * | ||
9 | * LED driver for the DAC124S085 SPI DAC | ||
10 | */ | ||
11 | |||
12 | #include <linux/gfp.h> | ||
13 | #include <linux/leds.h> | ||
14 | #include <linux/module.h> | ||
15 | #include <linux/mutex.h> | ||
16 | #include <linux/slab.h> | ||
17 | #include <linux/spinlock.h> | ||
18 | #include <linux/workqueue.h> | ||
19 | #include <linux/spi/spi.h> | ||
20 | |||
21 | struct dac124s085_led { | ||
22 | struct led_classdev ldev; | ||
23 | struct spi_device *spi; | ||
24 | int id; | ||
25 | int brightness; | ||
26 | char name[sizeof("dac124s085-3")]; | ||
27 | |||
28 | struct mutex mutex; | ||
29 | struct work_struct work; | ||
30 | spinlock_t lock; | ||
31 | }; | ||
32 | |||
33 | struct dac124s085 { | ||
34 | struct dac124s085_led leds[4]; | ||
35 | }; | ||
36 | |||
37 | #define REG_WRITE (0 << 12) | ||
38 | #define REG_WRITE_UPDATE (1 << 12) | ||
39 | #define ALL_WRITE_UPDATE (2 << 12) | ||
40 | #define POWER_DOWN_OUTPUT (3 << 12) | ||
41 | |||
42 | static void dac124s085_led_work(struct work_struct *work) | ||
43 | { | ||
44 | struct dac124s085_led *led = container_of(work, struct dac124s085_led, | ||
45 | work); | ||
46 | u16 word; | ||
47 | |||
48 | mutex_lock(&led->mutex); | ||
49 | word = cpu_to_le16(((led->id) << 14) | REG_WRITE_UPDATE | | ||
50 | (led->brightness & 0xfff)); | ||
51 | spi_write(led->spi, (const u8 *)&word, sizeof(word)); | ||
52 | mutex_unlock(&led->mutex); | ||
53 | } | ||
54 | |||
55 | static void dac124s085_set_brightness(struct led_classdev *ldev, | ||
56 | enum led_brightness brightness) | ||
57 | { | ||
58 | struct dac124s085_led *led = container_of(ldev, struct dac124s085_led, | ||
59 | ldev); | ||
60 | |||
61 | spin_lock(&led->lock); | ||
62 | led->brightness = brightness; | ||
63 | schedule_work(&led->work); | ||
64 | spin_unlock(&led->lock); | ||
65 | } | ||
66 | |||
67 | static int dac124s085_probe(struct spi_device *spi) | ||
68 | { | ||
69 | struct dac124s085 *dac; | ||
70 | struct dac124s085_led *led; | ||
71 | int i, ret; | ||
72 | |||
73 | dac = kzalloc(sizeof(*dac), GFP_KERNEL); | ||
74 | if (!dac) | ||
75 | return -ENOMEM; | ||
76 | |||
77 | spi->bits_per_word = 16; | ||
78 | |||
79 | for (i = 0; i < ARRAY_SIZE(dac->leds); i++) { | ||
80 | led = dac->leds + i; | ||
81 | led->id = i; | ||
82 | led->brightness = LED_OFF; | ||
83 | led->spi = spi; | ||
84 | snprintf(led->name, sizeof(led->name), "dac124s085-%d", i); | ||
85 | spin_lock_init(&led->lock); | ||
86 | INIT_WORK(&led->work, dac124s085_led_work); | ||
87 | mutex_init(&led->mutex); | ||
88 | led->ldev.name = led->name; | ||
89 | led->ldev.brightness = LED_OFF; | ||
90 | led->ldev.max_brightness = 0xfff; | ||
91 | led->ldev.brightness_set = dac124s085_set_brightness; | ||
92 | ret = led_classdev_register(&spi->dev, &led->ldev); | ||
93 | if (ret < 0) | ||
94 | goto eledcr; | ||
95 | } | ||
96 | |||
97 | spi_set_drvdata(spi, dac); | ||
98 | |||
99 | return 0; | ||
100 | |||
101 | eledcr: | ||
102 | while (i--) | ||
103 | led_classdev_unregister(&dac->leds[i].ldev); | ||
104 | |||
105 | spi_set_drvdata(spi, NULL); | ||
106 | kfree(dac); | ||
107 | return ret; | ||
108 | } | ||
109 | |||
110 | static int dac124s085_remove(struct spi_device *spi) | ||
111 | { | ||
112 | struct dac124s085 *dac = spi_get_drvdata(spi); | ||
113 | int i; | ||
114 | |||
115 | for (i = 0; i < ARRAY_SIZE(dac->leds); i++) { | ||
116 | led_classdev_unregister(&dac->leds[i].ldev); | ||
117 | cancel_work_sync(&dac->leds[i].work); | ||
118 | } | ||
119 | |||
120 | spi_set_drvdata(spi, NULL); | ||
121 | kfree(dac); | ||
122 | |||
123 | return 0; | ||
124 | } | ||
125 | |||
126 | static struct spi_driver dac124s085_driver = { | ||
127 | .probe = dac124s085_probe, | ||
128 | .remove = dac124s085_remove, | ||
129 | .driver = { | ||
130 | .name = "dac124s085", | ||
131 | .owner = THIS_MODULE, | ||
132 | }, | ||
133 | }; | ||
134 | |||
135 | static int __init dac124s085_leds_init(void) | ||
136 | { | ||
137 | return spi_register_driver(&dac124s085_driver); | ||
138 | } | ||
139 | |||
140 | static void __exit dac124s085_leds_exit(void) | ||
141 | { | ||
142 | spi_unregister_driver(&dac124s085_driver); | ||
143 | } | ||
144 | |||
145 | module_init(dac124s085_leds_init); | ||
146 | module_exit(dac124s085_leds_exit); | ||
147 | |||
148 | MODULE_AUTHOR("Guennadi Liakhovetski <lg@denx.de>"); | ||
149 | MODULE_DESCRIPTION("DAC124S085 LED driver"); | ||
150 | MODULE_LICENSE("GPL v2"); | ||
diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c index 2e3df08b649b..102ef4a14c5f 100644 --- a/drivers/leds/leds-gpio.c +++ b/drivers/leds/leds-gpio.c | |||
@@ -3,6 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2007 8D Technologies inc. | 4 | * Copyright (C) 2007 8D Technologies inc. |
5 | * Raphael Assenat <raph@8d.com> | 5 | * Raphael Assenat <raph@8d.com> |
6 | * Copyright (C) 2008 Freescale Semiconductor, Inc. | ||
6 | * | 7 | * |
7 | * 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 |
8 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
@@ -71,11 +72,67 @@ static int gpio_blink_set(struct led_classdev *led_cdev, | |||
71 | return led_dat->platform_gpio_blink_set(led_dat->gpio, delay_on, delay_off); | 72 | return led_dat->platform_gpio_blink_set(led_dat->gpio, delay_on, delay_off); |
72 | } | 73 | } |
73 | 74 | ||
75 | static int __devinit create_gpio_led(const struct gpio_led *template, | ||
76 | struct gpio_led_data *led_dat, struct device *parent, | ||
77 | int (*blink_set)(unsigned, unsigned long *, unsigned long *)) | ||
78 | { | ||
79 | int ret; | ||
80 | |||
81 | /* skip leds that aren't available */ | ||
82 | if (!gpio_is_valid(template->gpio)) { | ||
83 | printk(KERN_INFO "Skipping unavilable LED gpio %d (%s)\n", | ||
84 | template->gpio, template->name); | ||
85 | return; | ||
86 | } | ||
87 | |||
88 | ret = gpio_request(template->gpio, template->name); | ||
89 | if (ret < 0) | ||
90 | return ret; | ||
91 | |||
92 | led_dat->cdev.name = template->name; | ||
93 | led_dat->cdev.default_trigger = template->default_trigger; | ||
94 | led_dat->gpio = template->gpio; | ||
95 | led_dat->can_sleep = gpio_cansleep(template->gpio); | ||
96 | led_dat->active_low = template->active_low; | ||
97 | if (blink_set) { | ||
98 | led_dat->platform_gpio_blink_set = blink_set; | ||
99 | led_dat->cdev.blink_set = gpio_blink_set; | ||
100 | } | ||
101 | led_dat->cdev.brightness_set = gpio_led_set; | ||
102 | led_dat->cdev.brightness = LED_OFF; | ||
103 | if (!template->retain_state_suspended) | ||
104 | led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME; | ||
105 | |||
106 | ret = gpio_direction_output(led_dat->gpio, led_dat->active_low); | ||
107 | if (ret < 0) | ||
108 | goto err; | ||
109 | |||
110 | INIT_WORK(&led_dat->work, gpio_led_work); | ||
111 | |||
112 | ret = led_classdev_register(parent, &led_dat->cdev); | ||
113 | if (ret < 0) | ||
114 | goto err; | ||
115 | |||
116 | return 0; | ||
117 | err: | ||
118 | gpio_free(led_dat->gpio); | ||
119 | return ret; | ||
120 | } | ||
121 | |||
122 | static void delete_gpio_led(struct gpio_led_data *led) | ||
123 | { | ||
124 | if (!gpio_is_valid(led->gpio)) | ||
125 | return; | ||
126 | led_classdev_unregister(&led->cdev); | ||
127 | cancel_work_sync(&led->work); | ||
128 | gpio_free(led->gpio); | ||
129 | } | ||
130 | |||
131 | #ifdef CONFIG_LEDS_GPIO_PLATFORM | ||
74 | static int gpio_led_probe(struct platform_device *pdev) | 132 | static int gpio_led_probe(struct platform_device *pdev) |
75 | { | 133 | { |
76 | struct gpio_led_platform_data *pdata = pdev->dev.platform_data; | 134 | struct gpio_led_platform_data *pdata = pdev->dev.platform_data; |
77 | struct gpio_led *cur_led; | 135 | struct gpio_led_data *leds_data; |
78 | struct gpio_led_data *leds_data, *led_dat; | ||
79 | int i, ret = 0; | 136 | int i, ret = 0; |
80 | 137 | ||
81 | if (!pdata) | 138 | if (!pdata) |
@@ -87,35 +144,10 @@ static int gpio_led_probe(struct platform_device *pdev) | |||
87 | return -ENOMEM; | 144 | return -ENOMEM; |
88 | 145 | ||
89 | for (i = 0; i < pdata->num_leds; i++) { | 146 | for (i = 0; i < pdata->num_leds; i++) { |
90 | cur_led = &pdata->leds[i]; | 147 | ret = create_gpio_led(&pdata->leds[i], &leds_data[i], |
91 | led_dat = &leds_data[i]; | 148 | &pdev->dev, pdata->gpio_blink_set); |
92 | |||
93 | ret = gpio_request(cur_led->gpio, cur_led->name); | ||
94 | if (ret < 0) | 149 | if (ret < 0) |
95 | goto err; | 150 | goto err; |
96 | |||
97 | led_dat->cdev.name = cur_led->name; | ||
98 | led_dat->cdev.default_trigger = cur_led->default_trigger; | ||
99 | led_dat->gpio = cur_led->gpio; | ||
100 | led_dat->can_sleep = gpio_cansleep(cur_led->gpio); | ||
101 | led_dat->active_low = cur_led->active_low; | ||
102 | if (pdata->gpio_blink_set) { | ||
103 | led_dat->platform_gpio_blink_set = pdata->gpio_blink_set; | ||
104 | led_dat->cdev.blink_set = gpio_blink_set; | ||
105 | } | ||
106 | led_dat->cdev.brightness_set = gpio_led_set; | ||
107 | led_dat->cdev.brightness = LED_OFF; | ||
108 | led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME; | ||
109 | |||
110 | gpio_direction_output(led_dat->gpio, led_dat->active_low); | ||
111 | |||
112 | INIT_WORK(&led_dat->work, gpio_led_work); | ||
113 | |||
114 | ret = led_classdev_register(&pdev->dev, &led_dat->cdev); | ||
115 | if (ret < 0) { | ||
116 | gpio_free(led_dat->gpio); | ||
117 | goto err; | ||
118 | } | ||
119 | } | 151 | } |
120 | 152 | ||
121 | platform_set_drvdata(pdev, leds_data); | 153 | platform_set_drvdata(pdev, leds_data); |
@@ -123,13 +155,8 @@ static int gpio_led_probe(struct platform_device *pdev) | |||
123 | return 0; | 155 | return 0; |
124 | 156 | ||
125 | err: | 157 | err: |
126 | if (i > 0) { | 158 | for (i = i - 1; i >= 0; i--) |
127 | for (i = i - 1; i >= 0; i--) { | 159 | delete_gpio_led(&leds_data[i]); |
128 | led_classdev_unregister(&leds_data[i].cdev); | ||
129 | cancel_work_sync(&leds_data[i].work); | ||
130 | gpio_free(leds_data[i].gpio); | ||
131 | } | ||
132 | } | ||
133 | 160 | ||
134 | kfree(leds_data); | 161 | kfree(leds_data); |
135 | 162 | ||
@@ -144,11 +171,8 @@ static int __devexit gpio_led_remove(struct platform_device *pdev) | |||
144 | 171 | ||
145 | leds_data = platform_get_drvdata(pdev); | 172 | leds_data = platform_get_drvdata(pdev); |
146 | 173 | ||
147 | for (i = 0; i < pdata->num_leds; i++) { | 174 | for (i = 0; i < pdata->num_leds; i++) |
148 | led_classdev_unregister(&leds_data[i].cdev); | 175 | delete_gpio_led(&leds_data[i]); |
149 | cancel_work_sync(&leds_data[i].work); | ||
150 | gpio_free(leds_data[i].gpio); | ||
151 | } | ||
152 | 176 | ||
153 | kfree(leds_data); | 177 | kfree(leds_data); |
154 | 178 | ||
@@ -164,20 +188,133 @@ static struct platform_driver gpio_led_driver = { | |||
164 | }, | 188 | }, |
165 | }; | 189 | }; |
166 | 190 | ||
191 | MODULE_ALIAS("platform:leds-gpio"); | ||
192 | #endif /* CONFIG_LEDS_GPIO_PLATFORM */ | ||
193 | |||
194 | /* Code to create from OpenFirmware platform devices */ | ||
195 | #ifdef CONFIG_LEDS_GPIO_OF | ||
196 | #include <linux/of_platform.h> | ||
197 | #include <linux/of_gpio.h> | ||
198 | |||
199 | struct gpio_led_of_platform_data { | ||
200 | int num_leds; | ||
201 | struct gpio_led_data led_data[]; | ||
202 | }; | ||
203 | |||
204 | static int __devinit of_gpio_leds_probe(struct of_device *ofdev, | ||
205 | const struct of_device_id *match) | ||
206 | { | ||
207 | struct device_node *np = ofdev->node, *child; | ||
208 | struct gpio_led led; | ||
209 | struct gpio_led_of_platform_data *pdata; | ||
210 | int count = 0, ret; | ||
211 | |||
212 | /* count LEDs defined by this device, so we know how much to allocate */ | ||
213 | for_each_child_of_node(np, child) | ||
214 | count++; | ||
215 | if (!count) | ||
216 | return 0; /* or ENODEV? */ | ||
217 | |||
218 | pdata = kzalloc(sizeof(*pdata) + sizeof(struct gpio_led_data) * count, | ||
219 | GFP_KERNEL); | ||
220 | if (!pdata) | ||
221 | return -ENOMEM; | ||
222 | |||
223 | memset(&led, 0, sizeof(led)); | ||
224 | for_each_child_of_node(np, child) { | ||
225 | enum of_gpio_flags flags; | ||
226 | |||
227 | led.gpio = of_get_gpio_flags(child, 0, &flags); | ||
228 | led.active_low = flags & OF_GPIO_ACTIVE_LOW; | ||
229 | led.name = of_get_property(child, "label", NULL) ? : child->name; | ||
230 | led.default_trigger = | ||
231 | of_get_property(child, "linux,default-trigger", NULL); | ||
232 | |||
233 | ret = create_gpio_led(&led, &pdata->led_data[pdata->num_leds++], | ||
234 | &ofdev->dev, NULL); | ||
235 | if (ret < 0) { | ||
236 | of_node_put(child); | ||
237 | goto err; | ||
238 | } | ||
239 | } | ||
240 | |||
241 | dev_set_drvdata(&ofdev->dev, pdata); | ||
242 | |||
243 | return 0; | ||
244 | |||
245 | err: | ||
246 | for (count = pdata->num_leds - 2; count >= 0; count--) | ||
247 | delete_gpio_led(&pdata->led_data[count]); | ||
248 | |||
249 | kfree(pdata); | ||
250 | |||
251 | return ret; | ||
252 | } | ||
253 | |||
254 | static int __devexit of_gpio_leds_remove(struct of_device *ofdev) | ||
255 | { | ||
256 | struct gpio_led_of_platform_data *pdata = dev_get_drvdata(&ofdev->dev); | ||
257 | int i; | ||
258 | |||
259 | for (i = 0; i < pdata->num_leds; i++) | ||
260 | delete_gpio_led(&pdata->led_data[i]); | ||
261 | |||
262 | kfree(pdata); | ||
263 | |||
264 | dev_set_drvdata(&ofdev->dev, NULL); | ||
265 | |||
266 | return 0; | ||
267 | } | ||
268 | |||
269 | static const struct of_device_id of_gpio_leds_match[] = { | ||
270 | { .compatible = "gpio-leds", }, | ||
271 | {}, | ||
272 | }; | ||
273 | |||
274 | static struct of_platform_driver of_gpio_leds_driver = { | ||
275 | .driver = { | ||
276 | .name = "of_gpio_leds", | ||
277 | .owner = THIS_MODULE, | ||
278 | }, | ||
279 | .match_table = of_gpio_leds_match, | ||
280 | .probe = of_gpio_leds_probe, | ||
281 | .remove = __devexit_p(of_gpio_leds_remove), | ||
282 | }; | ||
283 | #endif | ||
284 | |||
167 | static int __init gpio_led_init(void) | 285 | static int __init gpio_led_init(void) |
168 | { | 286 | { |
169 | return platform_driver_register(&gpio_led_driver); | 287 | int ret; |
288 | |||
289 | #ifdef CONFIG_LEDS_GPIO_PLATFORM | ||
290 | ret = platform_driver_register(&gpio_led_driver); | ||
291 | if (ret) | ||
292 | return ret; | ||
293 | #endif | ||
294 | #ifdef CONFIG_LEDS_GPIO_OF | ||
295 | ret = of_register_platform_driver(&of_gpio_leds_driver); | ||
296 | #endif | ||
297 | #ifdef CONFIG_LEDS_GPIO_PLATFORM | ||
298 | if (ret) | ||
299 | platform_driver_unregister(&gpio_led_driver); | ||
300 | #endif | ||
301 | |||
302 | return ret; | ||
170 | } | 303 | } |
171 | 304 | ||
172 | static void __exit gpio_led_exit(void) | 305 | static void __exit gpio_led_exit(void) |
173 | { | 306 | { |
307 | #ifdef CONFIG_LEDS_GPIO_PLATFORM | ||
174 | platform_driver_unregister(&gpio_led_driver); | 308 | platform_driver_unregister(&gpio_led_driver); |
309 | #endif | ||
310 | #ifdef CONFIG_LEDS_GPIO_OF | ||
311 | of_unregister_platform_driver(&of_gpio_leds_driver); | ||
312 | #endif | ||
175 | } | 313 | } |
176 | 314 | ||
177 | module_init(gpio_led_init); | 315 | module_init(gpio_led_init); |
178 | module_exit(gpio_led_exit); | 316 | module_exit(gpio_led_exit); |
179 | 317 | ||
180 | MODULE_AUTHOR("Raphael Assenat <raph@8d.com>"); | 318 | MODULE_AUTHOR("Raphael Assenat <raph@8d.com>, Trent Piepho <tpiepho@freescale.com>"); |
181 | MODULE_DESCRIPTION("GPIO LED driver"); | 319 | MODULE_DESCRIPTION("GPIO LED driver"); |
182 | MODULE_LICENSE("GPL"); | 320 | MODULE_LICENSE("GPL"); |
183 | MODULE_ALIAS("platform:leds-gpio"); | ||
diff --git a/drivers/leds/leds-h1940.c b/drivers/leds/leds-h1940.c index 11b77a70bbcb..1aa46a390a0d 100644 --- a/drivers/leds/leds-h1940.c +++ b/drivers/leds/leds-h1940.c | |||
@@ -104,7 +104,7 @@ static struct led_classdev h1940_blueled = { | |||
104 | .default_trigger = "h1940-bluetooth", | 104 | .default_trigger = "h1940-bluetooth", |
105 | }; | 105 | }; |
106 | 106 | ||
107 | static int __init h1940leds_probe(struct platform_device *pdev) | 107 | static int __devinit h1940leds_probe(struct platform_device *pdev) |
108 | { | 108 | { |
109 | int ret; | 109 | int ret; |
110 | 110 | ||
diff --git a/drivers/leds/leds-pca9532.c b/drivers/leds/leds-pca9532.c index bd3b431c9710..3937244fdcab 100644 --- a/drivers/leds/leds-pca9532.c +++ b/drivers/leds/leds-pca9532.c | |||
@@ -169,7 +169,7 @@ static int pca9532_event(struct input_dev *dev, unsigned int type, | |||
169 | { | 169 | { |
170 | struct pca9532_data *data = input_get_drvdata(dev); | 170 | struct pca9532_data *data = input_get_drvdata(dev); |
171 | 171 | ||
172 | if (type != EV_SND && (code != SND_BELL || code != SND_TONE)) | 172 | if (!(type == EV_SND && (code == SND_BELL || code == SND_TONE))) |
173 | return -1; | 173 | return -1; |
174 | 174 | ||
175 | /* XXX: allow different kind of beeps with psc/pwm modifications */ | 175 | /* XXX: allow different kind of beeps with psc/pwm modifications */ |
diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c new file mode 100644 index 000000000000..cdfdc8714e10 --- /dev/null +++ b/drivers/leds/leds-pwm.c | |||
@@ -0,0 +1,153 @@ | |||
1 | /* | ||
2 | * linux/drivers/leds-pwm.c | ||
3 | * | ||
4 | * simple PWM based LED control | ||
5 | * | ||
6 | * Copyright 2009 Luotao Fu @ Pengutronix (l.fu@pengutronix.de) | ||
7 | * | ||
8 | * based on leds-gpio.c by Raphael Assenat <raph@8d.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <linux/module.h> | ||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/platform_device.h> | ||
19 | #include <linux/fb.h> | ||
20 | #include <linux/leds.h> | ||
21 | #include <linux/err.h> | ||
22 | #include <linux/pwm.h> | ||
23 | #include <linux/leds_pwm.h> | ||
24 | |||
25 | struct led_pwm_data { | ||
26 | struct led_classdev cdev; | ||
27 | struct pwm_device *pwm; | ||
28 | unsigned int active_low; | ||
29 | unsigned int period; | ||
30 | unsigned int max_brightness; | ||
31 | }; | ||
32 | |||
33 | static void led_pwm_set(struct led_classdev *led_cdev, | ||
34 | enum led_brightness brightness) | ||
35 | { | ||
36 | struct led_pwm_data *led_dat = | ||
37 | container_of(led_cdev, struct led_pwm_data, cdev); | ||
38 | unsigned int max = led_dat->max_brightness; | ||
39 | unsigned int period = led_dat->period; | ||
40 | |||
41 | if (brightness == 0) { | ||
42 | pwm_config(led_dat->pwm, 0, period); | ||
43 | pwm_disable(led_dat->pwm); | ||
44 | } else { | ||
45 | pwm_config(led_dat->pwm, brightness * period / max, period); | ||
46 | pwm_enable(led_dat->pwm); | ||
47 | } | ||
48 | } | ||
49 | |||
50 | static int led_pwm_probe(struct platform_device *pdev) | ||
51 | { | ||
52 | struct led_pwm_platform_data *pdata = pdev->dev.platform_data; | ||
53 | struct led_pwm *cur_led; | ||
54 | struct led_pwm_data *leds_data, *led_dat; | ||
55 | int i, ret = 0; | ||
56 | |||
57 | if (!pdata) | ||
58 | return -EBUSY; | ||
59 | |||
60 | leds_data = kzalloc(sizeof(struct led_pwm_data) * pdata->num_leds, | ||
61 | GFP_KERNEL); | ||
62 | if (!leds_data) | ||
63 | return -ENOMEM; | ||
64 | |||
65 | for (i = 0; i < pdata->num_leds; i++) { | ||
66 | cur_led = &pdata->leds[i]; | ||
67 | led_dat = &leds_data[i]; | ||
68 | |||
69 | led_dat->pwm = pwm_request(cur_led->pwm_id, | ||
70 | cur_led->name); | ||
71 | if (IS_ERR(led_dat->pwm)) { | ||
72 | dev_err(&pdev->dev, "unable to request PWM %d\n", | ||
73 | cur_led->pwm_id); | ||
74 | goto err; | ||
75 | } | ||
76 | |||
77 | led_dat->cdev.name = cur_led->name; | ||
78 | led_dat->cdev.default_trigger = cur_led->default_trigger; | ||
79 | led_dat->active_low = cur_led->active_low; | ||
80 | led_dat->max_brightness = cur_led->max_brightness; | ||
81 | led_dat->period = cur_led->pwm_period_ns; | ||
82 | led_dat->cdev.brightness_set = led_pwm_set; | ||
83 | led_dat->cdev.brightness = LED_OFF; | ||
84 | led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME; | ||
85 | |||
86 | ret = led_classdev_register(&pdev->dev, &led_dat->cdev); | ||
87 | if (ret < 0) { | ||
88 | pwm_free(led_dat->pwm); | ||
89 | goto err; | ||
90 | } | ||
91 | } | ||
92 | |||
93 | platform_set_drvdata(pdev, leds_data); | ||
94 | |||
95 | return 0; | ||
96 | |||
97 | err: | ||
98 | if (i > 0) { | ||
99 | for (i = i - 1; i >= 0; i--) { | ||
100 | led_classdev_unregister(&leds_data[i].cdev); | ||
101 | pwm_free(leds_data[i].pwm); | ||
102 | } | ||
103 | } | ||
104 | |||
105 | kfree(leds_data); | ||
106 | |||
107 | return ret; | ||
108 | } | ||
109 | |||
110 | static int __devexit led_pwm_remove(struct platform_device *pdev) | ||
111 | { | ||
112 | int i; | ||
113 | struct led_pwm_platform_data *pdata = pdev->dev.platform_data; | ||
114 | struct led_pwm_data *leds_data; | ||
115 | |||
116 | leds_data = platform_get_drvdata(pdev); | ||
117 | |||
118 | for (i = 0; i < pdata->num_leds; i++) { | ||
119 | led_classdev_unregister(&leds_data[i].cdev); | ||
120 | pwm_free(leds_data[i].pwm); | ||
121 | } | ||
122 | |||
123 | kfree(leds_data); | ||
124 | |||
125 | return 0; | ||
126 | } | ||
127 | |||
128 | static struct platform_driver led_pwm_driver = { | ||
129 | .probe = led_pwm_probe, | ||
130 | .remove = __devexit_p(led_pwm_remove), | ||
131 | .driver = { | ||
132 | .name = "leds_pwm", | ||
133 | .owner = THIS_MODULE, | ||
134 | }, | ||
135 | }; | ||
136 | |||
137 | static int __init led_pwm_init(void) | ||
138 | { | ||
139 | return platform_driver_register(&led_pwm_driver); | ||
140 | } | ||
141 | |||
142 | static void __exit led_pwm_exit(void) | ||
143 | { | ||
144 | platform_driver_unregister(&led_pwm_driver); | ||
145 | } | ||
146 | |||
147 | module_init(led_pwm_init); | ||
148 | module_exit(led_pwm_exit); | ||
149 | |||
150 | MODULE_AUTHOR("Luotao Fu <l.fu@pengutronix.de>"); | ||
151 | MODULE_DESCRIPTION("PWM LED driver for PXA"); | ||
152 | MODULE_LICENSE("GPL"); | ||
153 | MODULE_ALIAS("platform:leds-pwm"); | ||
diff --git a/drivers/leds/leds-rb532.c b/drivers/leds/leds-rb532.c new file mode 100644 index 000000000000..c3525f37f73d --- /dev/null +++ b/drivers/leds/leds-rb532.c | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | * LEDs driver for the "User LED" on Routerboard532 | ||
3 | * | ||
4 | * Copyright (C) 2009 Phil Sutter <n0-1@freewrt.org> | ||
5 | * | ||
6 | * Based on leds-cobalt-qube.c by Florian Fainelly and | ||
7 | * rb-diag.c (my own standalone driver for both LED and | ||
8 | * button of Routerboard532). | ||
9 | */ | ||
10 | |||
11 | #include <linux/leds.h> | ||
12 | #include <linux/module.h> | ||
13 | #include <linux/platform_device.h> | ||
14 | |||
15 | #include <asm/mach-rc32434/gpio.h> | ||
16 | #include <asm/mach-rc32434/rb.h> | ||
17 | |||
18 | static void rb532_led_set(struct led_classdev *cdev, | ||
19 | enum led_brightness brightness) | ||
20 | { | ||
21 | if (brightness) | ||
22 | set_latch_u5(LO_ULED, 0); | ||
23 | |||
24 | else | ||
25 | set_latch_u5(0, LO_ULED); | ||
26 | } | ||
27 | |||
28 | static enum led_brightness rb532_led_get(struct led_classdev *cdev) | ||
29 | { | ||
30 | return (get_latch_u5() & LO_ULED) ? LED_FULL : LED_OFF; | ||
31 | } | ||
32 | |||
33 | static struct led_classdev rb532_uled = { | ||
34 | .name = "uled", | ||
35 | .brightness_set = rb532_led_set, | ||
36 | .brightness_get = rb532_led_get, | ||
37 | .default_trigger = "nand-disk", | ||
38 | }; | ||
39 | |||
40 | static int __devinit rb532_led_probe(struct platform_device *pdev) | ||
41 | { | ||
42 | return led_classdev_register(&pdev->dev, &rb532_uled); | ||
43 | } | ||
44 | |||
45 | static int __devexit rb532_led_remove(struct platform_device *pdev) | ||
46 | { | ||
47 | led_classdev_unregister(&rb532_uled); | ||
48 | return 0; | ||
49 | } | ||
50 | |||
51 | static struct platform_driver rb532_led_driver = { | ||
52 | .probe = rb532_led_probe, | ||
53 | .remove = __devexit_p(rb532_led_remove), | ||
54 | .driver = { | ||
55 | .name = "rb532-led", | ||
56 | .owner = THIS_MODULE, | ||
57 | }, | ||
58 | }; | ||
59 | |||
60 | static int __init rb532_led_init(void) | ||
61 | { | ||
62 | return platform_driver_register(&rb532_led_driver); | ||
63 | } | ||
64 | |||
65 | static void __exit rb532_led_exit(void) | ||
66 | { | ||
67 | platform_driver_unregister(&rb532_led_driver); | ||
68 | } | ||
69 | |||
70 | module_init(rb532_led_init); | ||
71 | module_exit(rb532_led_exit); | ||
72 | |||
73 | MODULE_ALIAS("platform:rb532-led"); | ||
74 | |||
75 | MODULE_LICENSE("GPL"); | ||
76 | MODULE_DESCRIPTION("User LED support for Routerboard532"); | ||
77 | MODULE_AUTHOR("Phil Sutter <n0-1@freewrt.org>"); | ||
diff --git a/drivers/leds/leds-s3c24xx.c b/drivers/leds/leds-s3c24xx.c index 4d81131542ae..aa2e7ae0cdae 100644 --- a/drivers/leds/leds-s3c24xx.c +++ b/drivers/leds/leds-s3c24xx.c | |||
@@ -102,14 +102,11 @@ static int s3c24xx_led_probe(struct platform_device *dev) | |||
102 | ret = led_classdev_register(&dev->dev, &led->cdev); | 102 | ret = led_classdev_register(&dev->dev, &led->cdev); |
103 | if (ret < 0) { | 103 | if (ret < 0) { |
104 | dev_err(&dev->dev, "led_classdev_register failed\n"); | 104 | dev_err(&dev->dev, "led_classdev_register failed\n"); |
105 | goto exit_err1; | 105 | kfree(led); |
106 | return ret; | ||
106 | } | 107 | } |
107 | 108 | ||
108 | return 0; | 109 | return 0; |
109 | |||
110 | exit_err1: | ||
111 | kfree(led); | ||
112 | return ret; | ||
113 | } | 110 | } |
114 | 111 | ||
115 | static struct platform_driver s3c24xx_led_driver = { | 112 | static struct platform_driver s3c24xx_led_driver = { |
diff --git a/drivers/leds/leds.h b/drivers/leds/leds.h index 5edbf52c4fa7..2dd8ecbfdc31 100644 --- a/drivers/leds/leds.h +++ b/drivers/leds/leds.h | |||
@@ -20,8 +20,8 @@ | |||
20 | static inline void led_set_brightness(struct led_classdev *led_cdev, | 20 | static inline void led_set_brightness(struct led_classdev *led_cdev, |
21 | enum led_brightness value) | 21 | enum led_brightness value) |
22 | { | 22 | { |
23 | if (value > LED_FULL) | 23 | if (value > led_cdev->max_brightness) |
24 | value = LED_FULL; | 24 | value = led_cdev->max_brightness; |
25 | led_cdev->brightness = value; | 25 | led_cdev->brightness = value; |
26 | if (!(led_cdev->flags & LED_SUSPENDED)) | 26 | if (!(led_cdev->flags & LED_SUSPENDED)) |
27 | led_cdev->brightness_set(led_cdev, value); | 27 | led_cdev->brightness_set(led_cdev, value); |
diff --git a/drivers/leds/ledtrig-default-on.c b/drivers/leds/ledtrig-default-on.c index 92995e40cfa4..a4ef54b9d508 100644 --- a/drivers/leds/ledtrig-default-on.c +++ b/drivers/leds/ledtrig-default-on.c | |||
@@ -19,7 +19,7 @@ | |||
19 | 19 | ||
20 | static void defon_trig_activate(struct led_classdev *led_cdev) | 20 | static void defon_trig_activate(struct led_classdev *led_cdev) |
21 | { | 21 | { |
22 | led_set_brightness(led_cdev, LED_FULL); | 22 | led_set_brightness(led_cdev, led_cdev->max_brightness); |
23 | } | 23 | } |
24 | 24 | ||
25 | static struct led_trigger defon_led_trigger = { | 25 | static struct led_trigger defon_led_trigger = { |
diff --git a/drivers/leds/ledtrig-gpio.c b/drivers/leds/ledtrig-gpio.c new file mode 100644 index 000000000000..a247ae63374f --- /dev/null +++ b/drivers/leds/ledtrig-gpio.c | |||
@@ -0,0 +1,239 @@ | |||
1 | /* | ||
2 | * ledtrig-gio.c - LED Trigger Based on GPIO events | ||
3 | * | ||
4 | * Copyright 2009 Felipe Balbi <me@felipebalbi.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/module.h> | ||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/init.h> | ||
15 | #include <linux/gpio.h> | ||
16 | #include <linux/interrupt.h> | ||
17 | #include <linux/workqueue.h> | ||
18 | #include <linux/leds.h> | ||
19 | #include "leds.h" | ||
20 | |||
21 | struct gpio_trig_data { | ||
22 | struct led_classdev *led; | ||
23 | struct work_struct work; | ||
24 | |||
25 | unsigned desired_brightness; /* desired brightness when led is on */ | ||
26 | unsigned inverted; /* true when gpio is inverted */ | ||
27 | unsigned gpio; /* gpio that triggers the leds */ | ||
28 | }; | ||
29 | |||
30 | static irqreturn_t gpio_trig_irq(int irq, void *_led) | ||
31 | { | ||
32 | struct led_classdev *led = _led; | ||
33 | struct gpio_trig_data *gpio_data = led->trigger_data; | ||
34 | |||
35 | /* just schedule_work since gpio_get_value can sleep */ | ||
36 | schedule_work(&gpio_data->work); | ||
37 | |||
38 | return IRQ_HANDLED; | ||
39 | }; | ||
40 | |||
41 | static void gpio_trig_work(struct work_struct *work) | ||
42 | { | ||
43 | struct gpio_trig_data *gpio_data = container_of(work, | ||
44 | struct gpio_trig_data, work); | ||
45 | int tmp; | ||
46 | |||
47 | if (!gpio_data->gpio) | ||
48 | return; | ||
49 | |||
50 | tmp = gpio_get_value(gpio_data->gpio); | ||
51 | if (gpio_data->inverted) | ||
52 | tmp = !tmp; | ||
53 | |||
54 | if (tmp) { | ||
55 | if (gpio_data->desired_brightness) | ||
56 | led_set_brightness(gpio_data->led, | ||
57 | gpio_data->desired_brightness); | ||
58 | else | ||
59 | led_set_brightness(gpio_data->led, LED_FULL); | ||
60 | } else { | ||
61 | led_set_brightness(gpio_data->led, LED_OFF); | ||
62 | } | ||
63 | } | ||
64 | |||
65 | static ssize_t gpio_trig_brightness_show(struct device *dev, | ||
66 | struct device_attribute *attr, char *buf) | ||
67 | { | ||
68 | struct led_classdev *led = dev_get_drvdata(dev); | ||
69 | struct gpio_trig_data *gpio_data = led->trigger_data; | ||
70 | |||
71 | return sprintf(buf, "%u\n", gpio_data->desired_brightness); | ||
72 | } | ||
73 | |||
74 | static ssize_t gpio_trig_brightness_store(struct device *dev, | ||
75 | struct device_attribute *attr, const char *buf, size_t n) | ||
76 | { | ||
77 | struct led_classdev *led = dev_get_drvdata(dev); | ||
78 | struct gpio_trig_data *gpio_data = led->trigger_data; | ||
79 | unsigned desired_brightness; | ||
80 | int ret; | ||
81 | |||
82 | ret = sscanf(buf, "%u", &desired_brightness); | ||
83 | if (ret < 1 || desired_brightness > 255) { | ||
84 | dev_err(dev, "invalid value\n"); | ||
85 | return -EINVAL; | ||
86 | } | ||
87 | |||
88 | gpio_data->desired_brightness = desired_brightness; | ||
89 | |||
90 | return n; | ||
91 | } | ||
92 | static DEVICE_ATTR(desired_brightness, 0644, gpio_trig_brightness_show, | ||
93 | gpio_trig_brightness_store); | ||
94 | |||
95 | static ssize_t gpio_trig_inverted_show(struct device *dev, | ||
96 | struct device_attribute *attr, char *buf) | ||
97 | { | ||
98 | struct led_classdev *led = dev_get_drvdata(dev); | ||
99 | struct gpio_trig_data *gpio_data = led->trigger_data; | ||
100 | |||
101 | return sprintf(buf, "%s\n", gpio_data->inverted ? "yes" : "no"); | ||
102 | } | ||
103 | |||
104 | static ssize_t gpio_trig_inverted_store(struct device *dev, | ||
105 | struct device_attribute *attr, const char *buf, size_t n) | ||
106 | { | ||
107 | struct led_classdev *led = dev_get_drvdata(dev); | ||
108 | struct gpio_trig_data *gpio_data = led->trigger_data; | ||
109 | unsigned inverted; | ||
110 | int ret; | ||
111 | |||
112 | ret = sscanf(buf, "%u", &inverted); | ||
113 | if (ret < 1) { | ||
114 | dev_err(dev, "invalid value\n"); | ||
115 | return -EINVAL; | ||
116 | } | ||
117 | |||
118 | gpio_data->inverted = !!inverted; | ||
119 | |||
120 | return n; | ||
121 | } | ||
122 | static DEVICE_ATTR(inverted, 0644, gpio_trig_inverted_show, | ||
123 | gpio_trig_inverted_store); | ||
124 | |||
125 | static ssize_t gpio_trig_gpio_show(struct device *dev, | ||
126 | struct device_attribute *attr, char *buf) | ||
127 | { | ||
128 | struct led_classdev *led = dev_get_drvdata(dev); | ||
129 | struct gpio_trig_data *gpio_data = led->trigger_data; | ||
130 | |||
131 | return sprintf(buf, "%u\n", gpio_data->gpio); | ||
132 | } | ||
133 | |||
134 | static ssize_t gpio_trig_gpio_store(struct device *dev, | ||
135 | struct device_attribute *attr, const char *buf, size_t n) | ||
136 | { | ||
137 | struct led_classdev *led = dev_get_drvdata(dev); | ||
138 | struct gpio_trig_data *gpio_data = led->trigger_data; | ||
139 | unsigned gpio; | ||
140 | int ret; | ||
141 | |||
142 | ret = sscanf(buf, "%u", &gpio); | ||
143 | if (ret < 1) { | ||
144 | dev_err(dev, "couldn't read gpio number\n"); | ||
145 | flush_work(&gpio_data->work); | ||
146 | return -EINVAL; | ||
147 | } | ||
148 | |||
149 | if (!gpio) { | ||
150 | free_irq(gpio_to_irq(gpio_data->gpio), led); | ||
151 | return n; | ||
152 | } | ||
153 | |||
154 | if (gpio_data->gpio > 0 && gpio_data->gpio != gpio) | ||
155 | free_irq(gpio_to_irq(gpio_data->gpio), led); | ||
156 | |||
157 | gpio_data->gpio = gpio; | ||
158 | ret = request_irq(gpio_to_irq(gpio), gpio_trig_irq, | ||
159 | IRQF_SHARED | IRQF_TRIGGER_RISING | ||
160 | | IRQF_TRIGGER_FALLING, "ledtrig-gpio", led); | ||
161 | if (ret) | ||
162 | dev_err(dev, "request_irq failed with error %d\n", ret); | ||
163 | |||
164 | return ret ? ret : n; | ||
165 | } | ||
166 | static DEVICE_ATTR(gpio, 0644, gpio_trig_gpio_show, gpio_trig_gpio_store); | ||
167 | |||
168 | static void gpio_trig_activate(struct led_classdev *led) | ||
169 | { | ||
170 | struct gpio_trig_data *gpio_data; | ||
171 | int ret; | ||
172 | |||
173 | gpio_data = kzalloc(sizeof(*gpio_data), GFP_KERNEL); | ||
174 | if (!gpio_data) | ||
175 | return; | ||
176 | |||
177 | ret = device_create_file(led->dev, &dev_attr_gpio); | ||
178 | if (ret) | ||
179 | goto err_gpio; | ||
180 | |||
181 | ret = device_create_file(led->dev, &dev_attr_inverted); | ||
182 | if (ret) | ||
183 | goto err_inverted; | ||
184 | |||
185 | ret = device_create_file(led->dev, &dev_attr_desired_brightness); | ||
186 | if (ret) | ||
187 | goto err_brightness; | ||
188 | |||
189 | gpio_data->led = led; | ||
190 | led->trigger_data = gpio_data; | ||
191 | INIT_WORK(&gpio_data->work, gpio_trig_work); | ||
192 | |||
193 | return; | ||
194 | |||
195 | err_brightness: | ||
196 | device_remove_file(led->dev, &dev_attr_inverted); | ||
197 | |||
198 | err_inverted: | ||
199 | device_remove_file(led->dev, &dev_attr_gpio); | ||
200 | |||
201 | err_gpio: | ||
202 | kfree(gpio_data); | ||
203 | } | ||
204 | |||
205 | static void gpio_trig_deactivate(struct led_classdev *led) | ||
206 | { | ||
207 | struct gpio_trig_data *gpio_data = led->trigger_data; | ||
208 | |||
209 | if (gpio_data) { | ||
210 | device_remove_file(led->dev, &dev_attr_gpio); | ||
211 | device_remove_file(led->dev, &dev_attr_inverted); | ||
212 | device_remove_file(led->dev, &dev_attr_desired_brightness); | ||
213 | flush_work(&gpio_data->work); | ||
214 | free_irq(gpio_to_irq(gpio_data->gpio),led); | ||
215 | kfree(gpio_data); | ||
216 | } | ||
217 | } | ||
218 | |||
219 | static struct led_trigger gpio_led_trigger = { | ||
220 | .name = "gpio", | ||
221 | .activate = gpio_trig_activate, | ||
222 | .deactivate = gpio_trig_deactivate, | ||
223 | }; | ||
224 | |||
225 | static int __init gpio_trig_init(void) | ||
226 | { | ||
227 | return led_trigger_register(&gpio_led_trigger); | ||
228 | } | ||
229 | module_init(gpio_trig_init); | ||
230 | |||
231 | static void __exit gpio_trig_exit(void) | ||
232 | { | ||
233 | led_trigger_unregister(&gpio_led_trigger); | ||
234 | } | ||
235 | module_exit(gpio_trig_exit); | ||
236 | |||
237 | MODULE_AUTHOR("Felipe Balbi <me@felipebalbi.com>"); | ||
238 | MODULE_DESCRIPTION("GPIO LED trigger"); | ||
239 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/leds/ledtrig-heartbeat.c b/drivers/leds/ledtrig-heartbeat.c index 4bf8cec8b8c1..c1c1ea6f817b 100644 --- a/drivers/leds/ledtrig-heartbeat.c +++ b/drivers/leds/ledtrig-heartbeat.c | |||
@@ -47,7 +47,7 @@ static void led_heartbeat_function(unsigned long data) | |||
47 | msecs_to_jiffies(heartbeat_data->period); | 47 | msecs_to_jiffies(heartbeat_data->period); |
48 | delay = msecs_to_jiffies(70); | 48 | delay = msecs_to_jiffies(70); |
49 | heartbeat_data->phase++; | 49 | heartbeat_data->phase++; |
50 | brightness = LED_FULL; | 50 | brightness = led_cdev->max_brightness; |
51 | break; | 51 | break; |
52 | case 1: | 52 | case 1: |
53 | delay = heartbeat_data->period / 4 - msecs_to_jiffies(70); | 53 | delay = heartbeat_data->period / 4 - msecs_to_jiffies(70); |
@@ -56,7 +56,7 @@ static void led_heartbeat_function(unsigned long data) | |||
56 | case 2: | 56 | case 2: |
57 | delay = msecs_to_jiffies(70); | 57 | delay = msecs_to_jiffies(70); |
58 | heartbeat_data->phase++; | 58 | heartbeat_data->phase++; |
59 | brightness = LED_FULL; | 59 | brightness = led_cdev->max_brightness; |
60 | break; | 60 | break; |
61 | default: | 61 | default: |
62 | delay = heartbeat_data->period - heartbeat_data->period / 4 - | 62 | delay = heartbeat_data->period - heartbeat_data->period / 4 - |
diff --git a/drivers/leds/ledtrig-ide-disk.c b/drivers/leds/ledtrig-ide-disk.c index 883a577b1b97..ec099fcbcb00 100644 --- a/drivers/leds/ledtrig-ide-disk.c +++ b/drivers/leds/ledtrig-ide-disk.c | |||
@@ -37,7 +37,8 @@ static void ledtrig_ide_timerfunc(unsigned long data) | |||
37 | { | 37 | { |
38 | if (ide_lastactivity != ide_activity) { | 38 | if (ide_lastactivity != ide_activity) { |
39 | ide_lastactivity = ide_activity; | 39 | ide_lastactivity = ide_activity; |
40 | led_trigger_event(ledtrig_ide, LED_FULL); | 40 | /* INT_MAX will set each LED to its maximum brightness */ |
41 | led_trigger_event(ledtrig_ide, INT_MAX); | ||
41 | mod_timer(&ledtrig_ide_timer, jiffies + msecs_to_jiffies(10)); | 42 | mod_timer(&ledtrig_ide_timer, jiffies + msecs_to_jiffies(10)); |
42 | } else { | 43 | } else { |
43 | led_trigger_event(ledtrig_ide, LED_OFF); | 44 | led_trigger_event(ledtrig_ide, LED_OFF); |
diff --git a/drivers/leds/ledtrig-timer.c b/drivers/leds/ledtrig-timer.c index 3d6531396dda..3b83406de752 100644 --- a/drivers/leds/ledtrig-timer.c +++ b/drivers/leds/ledtrig-timer.c | |||
@@ -166,7 +166,7 @@ static void timer_trig_activate(struct led_classdev *led_cdev) | |||
166 | 166 | ||
167 | timer_data->brightness_on = led_get_brightness(led_cdev); | 167 | timer_data->brightness_on = led_get_brightness(led_cdev); |
168 | if (timer_data->brightness_on == LED_OFF) | 168 | if (timer_data->brightness_on == LED_OFF) |
169 | timer_data->brightness_on = LED_FULL; | 169 | timer_data->brightness_on = led_cdev->max_brightness; |
170 | led_cdev->trigger_data = timer_data; | 170 | led_cdev->trigger_data = timer_data; |
171 | 171 | ||
172 | init_timer(&timer_data->timer); | 172 | init_timer(&timer_data->timer); |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index b4f4badc0068..274b491a11c1 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -123,6 +123,7 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data) | |||
123 | goto out_free_pages; | 123 | goto out_free_pages; |
124 | 124 | ||
125 | bio->bi_io_vec[i].bv_page = page; | 125 | bio->bi_io_vec[i].bv_page = page; |
126 | bio->bi_vcnt = i+1; | ||
126 | } | 127 | } |
127 | } | 128 | } |
128 | /* If not user-requests, copy the page pointers to all bios */ | 129 | /* If not user-requests, copy the page pointers to all bios */ |
@@ -138,9 +139,9 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data) | |||
138 | return r1_bio; | 139 | return r1_bio; |
139 | 140 | ||
140 | out_free_pages: | 141 | out_free_pages: |
141 | for (i=0; i < RESYNC_PAGES ; i++) | 142 | for (j=0 ; j < pi->raid_disks; j++) |
142 | for (j=0 ; j < pi->raid_disks; j++) | 143 | for (i=0; i < r1_bio->bios[j]->bi_vcnt ; i++) |
143 | safe_put_page(r1_bio->bios[j]->bi_io_vec[i].bv_page); | 144 | put_page(r1_bio->bios[j]->bi_io_vec[i].bv_page); |
144 | j = -1; | 145 | j = -1; |
145 | out_free_bio: | 146 | out_free_bio: |
146 | while ( ++j < pi->raid_disks ) | 147 | while ( ++j < pi->raid_disks ) |
@@ -585,7 +586,7 @@ static int raid1_congested(void *data, int bits) | |||
585 | /* Note the '|| 1' - when read_balance prefers | 586 | /* Note the '|| 1' - when read_balance prefers |
586 | * non-congested targets, it can be removed | 587 | * non-congested targets, it can be removed |
587 | */ | 588 | */ |
588 | if ((bits & (1<<BDI_write_congested)) || 1) | 589 | if ((bits & (1<<BDI_async_congested)) || 1) |
589 | ret |= bdi_congested(&q->backing_dev_info, bits); | 590 | ret |= bdi_congested(&q->backing_dev_info, bits); |
590 | else | 591 | else |
591 | ret &= bdi_congested(&q->backing_dev_info, bits); | 592 | ret &= bdi_congested(&q->backing_dev_info, bits); |
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index 12b732512e57..a9019f081b97 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
@@ -2279,9 +2279,8 @@ mptsas_delete_expander_phys(MPT_ADAPTER *ioc) | |||
2279 | mutex_lock(&ioc->sas_topology_mutex); | 2279 | mutex_lock(&ioc->sas_topology_mutex); |
2280 | list_for_each_entry_safe(port_info, n, &ioc->sas_topology, list) { | 2280 | list_for_each_entry_safe(port_info, n, &ioc->sas_topology, list) { |
2281 | 2281 | ||
2282 | if (port_info->phy_info && | 2282 | if (!(port_info->phy_info[0].identify.device_info & |
2283 | (!(port_info->phy_info[0].identify.device_info & | 2283 | MPI_SAS_DEVICE_INFO_SMP_TARGET)) |
2284 | MPI_SAS_DEVICE_INFO_SMP_TARGET))) | ||
2285 | continue; | 2284 | continue; |
2286 | 2285 | ||
2287 | if (mptsas_sas_expander_pg0(ioc, &buffer, | 2286 | if (mptsas_sas_expander_pg0(ioc, &buffer, |
diff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile index 4521b1ecce45..82d1e4de475b 100644 --- a/drivers/mtd/Makefile +++ b/drivers/mtd/Makefile | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | # Core functionality. | 5 | # Core functionality. |
6 | obj-$(CONFIG_MTD) += mtd.o | 6 | obj-$(CONFIG_MTD) += mtd.o |
7 | mtd-y := mtdcore.o mtdsuper.o | 7 | mtd-y := mtdcore.o mtdsuper.o mtdbdi.o |
8 | mtd-$(CONFIG_MTD_PARTITIONS) += mtdpart.o | 8 | mtd-$(CONFIG_MTD_PARTITIONS) += mtdpart.o |
9 | 9 | ||
10 | obj-$(CONFIG_MTD_CONCAT) += mtdconcat.o | 10 | obj-$(CONFIG_MTD_CONCAT) += mtdconcat.o |
diff --git a/drivers/mtd/ar7part.c b/drivers/mtd/ar7part.c index ecf170b55c32..6697a1ec72d0 100644 --- a/drivers/mtd/ar7part.c +++ b/drivers/mtd/ar7part.c | |||
@@ -44,8 +44,6 @@ struct ar7_bin_rec { | |||
44 | unsigned int address; | 44 | unsigned int address; |
45 | }; | 45 | }; |
46 | 46 | ||
47 | static struct mtd_partition ar7_parts[AR7_PARTS]; | ||
48 | |||
49 | static int create_mtd_partitions(struct mtd_info *master, | 47 | static int create_mtd_partitions(struct mtd_info *master, |
50 | struct mtd_partition **pparts, | 48 | struct mtd_partition **pparts, |
51 | unsigned long origin) | 49 | unsigned long origin) |
@@ -57,7 +55,11 @@ static int create_mtd_partitions(struct mtd_info *master, | |||
57 | unsigned int root_offset = ROOT_OFFSET; | 55 | unsigned int root_offset = ROOT_OFFSET; |
58 | 56 | ||
59 | int retries = 10; | 57 | int retries = 10; |
58 | struct mtd_partition *ar7_parts; | ||
60 | 59 | ||
60 | ar7_parts = kzalloc(sizeof(*ar7_parts) * AR7_PARTS, GFP_KERNEL); | ||
61 | if (!ar7_parts) | ||
62 | return -ENOMEM; | ||
61 | ar7_parts[0].name = "loader"; | 63 | ar7_parts[0].name = "loader"; |
62 | ar7_parts[0].offset = 0; | 64 | ar7_parts[0].offset = 0; |
63 | ar7_parts[0].size = master->erasesize; | 65 | ar7_parts[0].size = master->erasesize; |
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c index f5ab6fa1057b..c240454fd113 100644 --- a/drivers/mtd/chips/cfi_cmdset_0001.c +++ b/drivers/mtd/chips/cfi_cmdset_0001.c | |||
@@ -1236,10 +1236,14 @@ static int inval_cache_and_wait_for_operation( | |||
1236 | remove_wait_queue(&chip->wq, &wait); | 1236 | remove_wait_queue(&chip->wq, &wait); |
1237 | spin_lock(chip->mutex); | 1237 | spin_lock(chip->mutex); |
1238 | } | 1238 | } |
1239 | if (chip->erase_suspended || chip->write_suspended) { | 1239 | if (chip->erase_suspended && chip_state == FL_ERASING) { |
1240 | /* Suspend has occured while sleep: reset timeout */ | 1240 | /* Erase suspend occured while sleep: reset timeout */ |
1241 | timeo = reset_timeo; | 1241 | timeo = reset_timeo; |
1242 | chip->erase_suspended = 0; | 1242 | chip->erase_suspended = 0; |
1243 | } | ||
1244 | if (chip->write_suspended && chip_state == FL_WRITING) { | ||
1245 | /* Write suspend occured while sleep: reset timeout */ | ||
1246 | timeo = reset_timeo; | ||
1243 | chip->write_suspended = 0; | 1247 | chip->write_suspended = 0; |
1244 | } | 1248 | } |
1245 | } | 1249 | } |
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c index 94bb61e19047..61ea833e0908 100644 --- a/drivers/mtd/chips/cfi_cmdset_0002.c +++ b/drivers/mtd/chips/cfi_cmdset_0002.c | |||
@@ -282,6 +282,16 @@ static void fixup_s29gl032n_sectors(struct mtd_info *mtd, void *param) | |||
282 | } | 282 | } |
283 | } | 283 | } |
284 | 284 | ||
285 | static void fixup_M29W128G_write_buffer(struct mtd_info *mtd, void *param) | ||
286 | { | ||
287 | struct map_info *map = mtd->priv; | ||
288 | struct cfi_private *cfi = map->fldrv_priv; | ||
289 | if (cfi->cfiq->BufWriteTimeoutTyp) { | ||
290 | pr_warning("Don't use write buffer on ST flash M29W128G\n"); | ||
291 | cfi->cfiq->BufWriteTimeoutTyp = 0; | ||
292 | } | ||
293 | } | ||
294 | |||
285 | static struct cfi_fixup cfi_fixup_table[] = { | 295 | static struct cfi_fixup cfi_fixup_table[] = { |
286 | { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL }, | 296 | { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL }, |
287 | #ifdef AMD_BOOTLOC_BUG | 297 | #ifdef AMD_BOOTLOC_BUG |
@@ -298,6 +308,7 @@ static struct cfi_fixup cfi_fixup_table[] = { | |||
298 | { CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, }, | 308 | { CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, }, |
299 | { CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, }, | 309 | { CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, }, |
300 | { CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, }, | 310 | { CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, }, |
311 | { CFI_MFR_ST, 0x227E, fixup_M29W128G_write_buffer, NULL, }, | ||
301 | #if !FORCE_WORD_WRITE | 312 | #if !FORCE_WORD_WRITE |
302 | { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, }, | 313 | { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, }, |
303 | #endif | 314 | #endif |
diff --git a/drivers/mtd/chips/jedec_probe.c b/drivers/mtd/chips/jedec_probe.c index 2f3f2f719ba4..e824b9b9b056 100644 --- a/drivers/mtd/chips/jedec_probe.c +++ b/drivers/mtd/chips/jedec_probe.c | |||
@@ -159,6 +159,7 @@ | |||
159 | #define SST39LF800 0x2781 | 159 | #define SST39LF800 0x2781 |
160 | #define SST39LF160 0x2782 | 160 | #define SST39LF160 0x2782 |
161 | #define SST39VF1601 0x234b | 161 | #define SST39VF1601 0x234b |
162 | #define SST39VF3201 0x235b | ||
162 | #define SST39LF512 0x00D4 | 163 | #define SST39LF512 0x00D4 |
163 | #define SST39LF010 0x00D5 | 164 | #define SST39LF010 0x00D5 |
164 | #define SST39LF020 0x00D6 | 165 | #define SST39LF020 0x00D6 |
@@ -1490,6 +1491,21 @@ static const struct amd_flash_info jedec_table[] = { | |||
1490 | ERASEINFO(0x1000,256) | 1491 | ERASEINFO(0x1000,256) |
1491 | } | 1492 | } |
1492 | }, { | 1493 | }, { |
1494 | .mfr_id = MANUFACTURER_SST, /* should be CFI */ | ||
1495 | .dev_id = SST39VF3201, | ||
1496 | .name = "SST 39VF3201", | ||
1497 | .devtypes = CFI_DEVICETYPE_X16, | ||
1498 | .uaddr = MTD_UADDR_0xAAAA_0x5555, | ||
1499 | .dev_size = SIZE_4MiB, | ||
1500 | .cmd_set = P_ID_AMD_STD, | ||
1501 | .nr_regions = 4, | ||
1502 | .regions = { | ||
1503 | ERASEINFO(0x1000,256), | ||
1504 | ERASEINFO(0x1000,256), | ||
1505 | ERASEINFO(0x1000,256), | ||
1506 | ERASEINFO(0x1000,256) | ||
1507 | } | ||
1508 | }, { | ||
1493 | .mfr_id = MANUFACTURER_SST, | 1509 | .mfr_id = MANUFACTURER_SST, |
1494 | .dev_id = SST36VF3203, | 1510 | .dev_id = SST36VF3203, |
1495 | .name = "SST 36VF3203", | 1511 | .name = "SST 36VF3203", |
diff --git a/drivers/mtd/chips/map_ram.c b/drivers/mtd/chips/map_ram.c index 072dd8abf33a..6bdc50c727e7 100644 --- a/drivers/mtd/chips/map_ram.c +++ b/drivers/mtd/chips/map_ram.c | |||
@@ -21,6 +21,8 @@ static int mapram_write (struct mtd_info *, loff_t, size_t, size_t *, const u_ch | |||
21 | static int mapram_erase (struct mtd_info *, struct erase_info *); | 21 | static int mapram_erase (struct mtd_info *, struct erase_info *); |
22 | static void mapram_nop (struct mtd_info *); | 22 | static void mapram_nop (struct mtd_info *); |
23 | static struct mtd_info *map_ram_probe(struct map_info *map); | 23 | static struct mtd_info *map_ram_probe(struct map_info *map); |
24 | static unsigned long mapram_unmapped_area(struct mtd_info *, unsigned long, | ||
25 | unsigned long, unsigned long); | ||
24 | 26 | ||
25 | 27 | ||
26 | static struct mtd_chip_driver mapram_chipdrv = { | 28 | static struct mtd_chip_driver mapram_chipdrv = { |
@@ -64,6 +66,7 @@ static struct mtd_info *map_ram_probe(struct map_info *map) | |||
64 | mtd->type = MTD_RAM; | 66 | mtd->type = MTD_RAM; |
65 | mtd->size = map->size; | 67 | mtd->size = map->size; |
66 | mtd->erase = mapram_erase; | 68 | mtd->erase = mapram_erase; |
69 | mtd->get_unmapped_area = mapram_unmapped_area; | ||
67 | mtd->read = mapram_read; | 70 | mtd->read = mapram_read; |
68 | mtd->write = mapram_write; | 71 | mtd->write = mapram_write; |
69 | mtd->sync = mapram_nop; | 72 | mtd->sync = mapram_nop; |
@@ -79,6 +82,20 @@ static struct mtd_info *map_ram_probe(struct map_info *map) | |||
79 | } | 82 | } |
80 | 83 | ||
81 | 84 | ||
85 | /* | ||
86 | * Allow NOMMU mmap() to directly map the device (if not NULL) | ||
87 | * - return the address to which the offset maps | ||
88 | * - return -ENOSYS to indicate refusal to do the mapping | ||
89 | */ | ||
90 | static unsigned long mapram_unmapped_area(struct mtd_info *mtd, | ||
91 | unsigned long len, | ||
92 | unsigned long offset, | ||
93 | unsigned long flags) | ||
94 | { | ||
95 | struct map_info *map = mtd->priv; | ||
96 | return (unsigned long) map->virt + offset; | ||
97 | } | ||
98 | |||
82 | static int mapram_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf) | 99 | static int mapram_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf) |
83 | { | 100 | { |
84 | struct map_info *map = mtd->priv; | 101 | struct map_info *map = mtd->priv; |
diff --git a/drivers/mtd/chips/map_rom.c b/drivers/mtd/chips/map_rom.c index c76d6e5f47ee..076090a67b90 100644 --- a/drivers/mtd/chips/map_rom.c +++ b/drivers/mtd/chips/map_rom.c | |||
@@ -20,6 +20,8 @@ static int maprom_write (struct mtd_info *, loff_t, size_t, size_t *, const u_ch | |||
20 | static void maprom_nop (struct mtd_info *); | 20 | static void maprom_nop (struct mtd_info *); |
21 | static struct mtd_info *map_rom_probe(struct map_info *map); | 21 | static struct mtd_info *map_rom_probe(struct map_info *map); |
22 | static int maprom_erase (struct mtd_info *mtd, struct erase_info *info); | 22 | static int maprom_erase (struct mtd_info *mtd, struct erase_info *info); |
23 | static unsigned long maprom_unmapped_area(struct mtd_info *, unsigned long, | ||
24 | unsigned long, unsigned long); | ||
23 | 25 | ||
24 | static struct mtd_chip_driver maprom_chipdrv = { | 26 | static struct mtd_chip_driver maprom_chipdrv = { |
25 | .probe = map_rom_probe, | 27 | .probe = map_rom_probe, |
@@ -40,6 +42,7 @@ static struct mtd_info *map_rom_probe(struct map_info *map) | |||
40 | mtd->name = map->name; | 42 | mtd->name = map->name; |
41 | mtd->type = MTD_ROM; | 43 | mtd->type = MTD_ROM; |
42 | mtd->size = map->size; | 44 | mtd->size = map->size; |
45 | mtd->get_unmapped_area = maprom_unmapped_area; | ||
43 | mtd->read = maprom_read; | 46 | mtd->read = maprom_read; |
44 | mtd->write = maprom_write; | 47 | mtd->write = maprom_write; |
45 | mtd->sync = maprom_nop; | 48 | mtd->sync = maprom_nop; |
@@ -53,6 +56,20 @@ static struct mtd_info *map_rom_probe(struct map_info *map) | |||
53 | } | 56 | } |
54 | 57 | ||
55 | 58 | ||
59 | /* | ||
60 | * Allow NOMMU mmap() to directly map the device (if not NULL) | ||
61 | * - return the address to which the offset maps | ||
62 | * - return -ENOSYS to indicate refusal to do the mapping | ||
63 | */ | ||
64 | static unsigned long maprom_unmapped_area(struct mtd_info *mtd, | ||
65 | unsigned long len, | ||
66 | unsigned long offset, | ||
67 | unsigned long flags) | ||
68 | { | ||
69 | struct map_info *map = mtd->priv; | ||
70 | return (unsigned long) map->virt + offset; | ||
71 | } | ||
72 | |||
56 | static int maprom_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf) | 73 | static int maprom_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf) |
57 | { | 74 | { |
58 | struct map_info *map = mtd->priv; | 75 | struct map_info *map = mtd->priv; |
diff --git a/drivers/mtd/cmdlinepart.c b/drivers/mtd/cmdlinepart.c index 50a340388e74..5011fa73f918 100644 --- a/drivers/mtd/cmdlinepart.c +++ b/drivers/mtd/cmdlinepart.c | |||
@@ -335,7 +335,11 @@ static int parse_cmdline_partitions(struct mtd_info *master, | |||
335 | } | 335 | } |
336 | offset += part->parts[i].size; | 336 | offset += part->parts[i].size; |
337 | } | 337 | } |
338 | *pparts = part->parts; | 338 | *pparts = kmemdup(part->parts, |
339 | sizeof(*part->parts) * part->num_parts, | ||
340 | GFP_KERNEL); | ||
341 | if (!*pparts) | ||
342 | return -ENOMEM; | ||
339 | return part->num_parts; | 343 | return part->num_parts; |
340 | } | 344 | } |
341 | } | 345 | } |
diff --git a/drivers/mtd/devices/doc2000.c b/drivers/mtd/devices/doc2000.c index 50de839c77a9..5bf5f460e132 100644 --- a/drivers/mtd/devices/doc2000.c +++ b/drivers/mtd/devices/doc2000.c | |||
@@ -10,7 +10,6 @@ | |||
10 | #include <asm/errno.h> | 10 | #include <asm/errno.h> |
11 | #include <asm/io.h> | 11 | #include <asm/io.h> |
12 | #include <asm/uaccess.h> | 12 | #include <asm/uaccess.h> |
13 | #include <linux/miscdevice.h> | ||
14 | #include <linux/delay.h> | 13 | #include <linux/delay.h> |
15 | #include <linux/slab.h> | 14 | #include <linux/slab.h> |
16 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
diff --git a/drivers/mtd/devices/doc2001.c b/drivers/mtd/devices/doc2001.c index e32c568c1145..0990f7803628 100644 --- a/drivers/mtd/devices/doc2001.c +++ b/drivers/mtd/devices/doc2001.c | |||
@@ -10,7 +10,6 @@ | |||
10 | #include <asm/errno.h> | 10 | #include <asm/errno.h> |
11 | #include <asm/io.h> | 11 | #include <asm/io.h> |
12 | #include <asm/uaccess.h> | 12 | #include <asm/uaccess.h> |
13 | #include <linux/miscdevice.h> | ||
14 | #include <linux/delay.h> | 13 | #include <linux/delay.h> |
15 | #include <linux/slab.h> | 14 | #include <linux/slab.h> |
16 | #include <linux/init.h> | 15 | #include <linux/init.h> |
diff --git a/drivers/mtd/devices/doc2001plus.c b/drivers/mtd/devices/doc2001plus.c index d853f891b586..719b2915dc3a 100644 --- a/drivers/mtd/devices/doc2001plus.c +++ b/drivers/mtd/devices/doc2001plus.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <asm/errno.h> | 14 | #include <asm/errno.h> |
15 | #include <asm/io.h> | 15 | #include <asm/io.h> |
16 | #include <asm/uaccess.h> | 16 | #include <asm/uaccess.h> |
17 | #include <linux/miscdevice.h> | ||
18 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
19 | #include <linux/slab.h> | 18 | #include <linux/slab.h> |
20 | #include <linux/init.h> | 19 | #include <linux/init.h> |
diff --git a/drivers/mtd/devices/docecc.c b/drivers/mtd/devices/docecc.c index 874e51b110a2..a19cda52da5c 100644 --- a/drivers/mtd/devices/docecc.c +++ b/drivers/mtd/devices/docecc.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <asm/errno.h> | 26 | #include <asm/errno.h> |
27 | #include <asm/io.h> | 27 | #include <asm/io.h> |
28 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
29 | #include <linux/miscdevice.h> | ||
30 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
31 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
32 | #include <linux/init.h> | 31 | #include <linux/init.h> |
diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c index 7c3fc766dcf1..8185b1f3e5e6 100644 --- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c | |||
@@ -65,12 +65,6 @@ | |||
65 | #define FAST_READ_DUMMY_BYTE 0 | 65 | #define FAST_READ_DUMMY_BYTE 0 |
66 | #endif | 66 | #endif |
67 | 67 | ||
68 | #ifdef CONFIG_MTD_PARTITIONS | ||
69 | #define mtd_has_partitions() (1) | ||
70 | #else | ||
71 | #define mtd_has_partitions() (0) | ||
72 | #endif | ||
73 | |||
74 | /****************************************************************************/ | 68 | /****************************************************************************/ |
75 | 69 | ||
76 | struct m25p { | 70 | struct m25p { |
@@ -678,6 +672,8 @@ static int __devinit m25p_probe(struct spi_device *spi) | |||
678 | flash->mtd.erasesize = info->sector_size; | 672 | flash->mtd.erasesize = info->sector_size; |
679 | } | 673 | } |
680 | 674 | ||
675 | flash->mtd.dev.parent = &spi->dev; | ||
676 | |||
681 | dev_info(&spi->dev, "%s (%lld Kbytes)\n", info->name, | 677 | dev_info(&spi->dev, "%s (%lld Kbytes)\n", info->name, |
682 | (long long)flash->mtd.size >> 10); | 678 | (long long)flash->mtd.size >> 10); |
683 | 679 | ||
@@ -708,12 +704,13 @@ static int __devinit m25p_probe(struct spi_device *spi) | |||
708 | struct mtd_partition *parts = NULL; | 704 | struct mtd_partition *parts = NULL; |
709 | int nr_parts = 0; | 705 | int nr_parts = 0; |
710 | 706 | ||
711 | #ifdef CONFIG_MTD_CMDLINE_PARTS | 707 | if (mtd_has_cmdlinepart()) { |
712 | static const char *part_probes[] = { "cmdlinepart", NULL, }; | 708 | static const char *part_probes[] |
709 | = { "cmdlinepart", NULL, }; | ||
713 | 710 | ||
714 | nr_parts = parse_mtd_partitions(&flash->mtd, | 711 | nr_parts = parse_mtd_partitions(&flash->mtd, |
715 | part_probes, &parts, 0); | 712 | part_probes, &parts, 0); |
716 | #endif | 713 | } |
717 | 714 | ||
718 | if (nr_parts <= 0 && data && data->parts) { | 715 | if (nr_parts <= 0 && data && data->parts) { |
719 | parts = data->parts; | 716 | parts = data->parts; |
diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index 6d9f810565c8..62dee54af0a5 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c | |||
@@ -98,12 +98,6 @@ struct dataflash { | |||
98 | struct mtd_info mtd; | 98 | struct mtd_info mtd; |
99 | }; | 99 | }; |
100 | 100 | ||
101 | #ifdef CONFIG_MTD_PARTITIONS | ||
102 | #define mtd_has_partitions() (1) | ||
103 | #else | ||
104 | #define mtd_has_partitions() (0) | ||
105 | #endif | ||
106 | |||
107 | /* ......................................................................... */ | 101 | /* ......................................................................... */ |
108 | 102 | ||
109 | /* | 103 | /* |
@@ -670,6 +664,8 @@ add_dataflash_otp(struct spi_device *spi, char *name, | |||
670 | device->write = dataflash_write; | 664 | device->write = dataflash_write; |
671 | device->priv = priv; | 665 | device->priv = priv; |
672 | 666 | ||
667 | device->dev.parent = &spi->dev; | ||
668 | |||
673 | if (revision >= 'c') | 669 | if (revision >= 'c') |
674 | otp_tag = otp_setup(device, revision); | 670 | otp_tag = otp_setup(device, revision); |
675 | 671 | ||
@@ -682,11 +678,13 @@ add_dataflash_otp(struct spi_device *spi, char *name, | |||
682 | struct mtd_partition *parts; | 678 | struct mtd_partition *parts; |
683 | int nr_parts = 0; | 679 | int nr_parts = 0; |
684 | 680 | ||
685 | #ifdef CONFIG_MTD_CMDLINE_PARTS | 681 | if (mtd_has_cmdlinepart()) { |
686 | static const char *part_probes[] = { "cmdlinepart", NULL, }; | 682 | static const char *part_probes[] |
683 | = { "cmdlinepart", NULL, }; | ||
687 | 684 | ||
688 | nr_parts = parse_mtd_partitions(device, part_probes, &parts, 0); | 685 | nr_parts = parse_mtd_partitions(device, |
689 | #endif | 686 | part_probes, &parts, 0); |
687 | } | ||
690 | 688 | ||
691 | if (nr_parts <= 0 && pdata && pdata->parts) { | 689 | if (nr_parts <= 0 && pdata && pdata->parts) { |
692 | parts = pdata->parts; | 690 | parts = pdata->parts; |
diff --git a/drivers/mtd/devices/mtdram.c b/drivers/mtd/devices/mtdram.c index 3aaca88847d3..fce5ff7589aa 100644 --- a/drivers/mtd/devices/mtdram.c +++ b/drivers/mtd/devices/mtdram.c | |||
@@ -65,6 +65,19 @@ static void ram_unpoint(struct mtd_info *mtd, loff_t from, size_t len) | |||
65 | { | 65 | { |
66 | } | 66 | } |
67 | 67 | ||
68 | /* | ||
69 | * Allow NOMMU mmap() to directly map the device (if not NULL) | ||
70 | * - return the address to which the offset maps | ||
71 | * - return -ENOSYS to indicate refusal to do the mapping | ||
72 | */ | ||
73 | static unsigned long ram_get_unmapped_area(struct mtd_info *mtd, | ||
74 | unsigned long len, | ||
75 | unsigned long offset, | ||
76 | unsigned long flags) | ||
77 | { | ||
78 | return (unsigned long) mtd->priv + offset; | ||
79 | } | ||
80 | |||
68 | static int ram_read(struct mtd_info *mtd, loff_t from, size_t len, | 81 | static int ram_read(struct mtd_info *mtd, loff_t from, size_t len, |
69 | size_t *retlen, u_char *buf) | 82 | size_t *retlen, u_char *buf) |
70 | { | 83 | { |
@@ -116,6 +129,7 @@ int mtdram_init_device(struct mtd_info *mtd, void *mapped_address, | |||
116 | mtd->erase = ram_erase; | 129 | mtd->erase = ram_erase; |
117 | mtd->point = ram_point; | 130 | mtd->point = ram_point; |
118 | mtd->unpoint = ram_unpoint; | 131 | mtd->unpoint = ram_unpoint; |
132 | mtd->get_unmapped_area = ram_get_unmapped_area; | ||
119 | mtd->read = ram_read; | 133 | mtd->read = ram_read; |
120 | mtd->write = ram_write; | 134 | mtd->write = ram_write; |
121 | 135 | ||
diff --git a/drivers/mtd/inftlmount.c b/drivers/mtd/inftlmount.c index f751dd97c549..32e82aef3e53 100644 --- a/drivers/mtd/inftlmount.c +++ b/drivers/mtd/inftlmount.c | |||
@@ -28,7 +28,6 @@ | |||
28 | #include <asm/errno.h> | 28 | #include <asm/errno.h> |
29 | #include <asm/io.h> | 29 | #include <asm/io.h> |
30 | #include <asm/uaccess.h> | 30 | #include <asm/uaccess.h> |
31 | #include <linux/miscdevice.h> | ||
32 | #include <linux/delay.h> | 31 | #include <linux/delay.h> |
33 | #include <linux/slab.h> | 32 | #include <linux/slab.h> |
34 | #include <linux/init.h> | 33 | #include <linux/init.h> |
diff --git a/drivers/mtd/internal.h b/drivers/mtd/internal.h new file mode 100644 index 000000000000..c658fe7216b5 --- /dev/null +++ b/drivers/mtd/internal.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* Internal MTD definitions | ||
2 | * | ||
3 | * Copyright © 2006 Red Hat, Inc. All Rights Reserved. | ||
4 | * Written by David Howells (dhowells@redhat.com) | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the License, or (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | /* | ||
13 | * mtdbdi.c | ||
14 | */ | ||
15 | extern struct backing_dev_info mtd_bdi_unmappable; | ||
16 | extern struct backing_dev_info mtd_bdi_ro_mappable; | ||
17 | extern struct backing_dev_info mtd_bdi_rw_mappable; | ||
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig index 729f899a5cd5..82923bd2d9c5 100644 --- a/drivers/mtd/maps/Kconfig +++ b/drivers/mtd/maps/Kconfig | |||
@@ -529,12 +529,6 @@ config MTD_DMV182 | |||
529 | help | 529 | help |
530 | Map driver for Dy-4 SVME/DMV-182 board. | 530 | Map driver for Dy-4 SVME/DMV-182 board. |
531 | 531 | ||
532 | config MTD_SHARP_SL | ||
533 | tristate "ROM mapped on Sharp SL Series" | ||
534 | depends on ARCH_PXA | ||
535 | help | ||
536 | This enables access to the flash chip on the Sharp SL Series of PDAs. | ||
537 | |||
538 | config MTD_INTEL_VR_NOR | 532 | config MTD_INTEL_VR_NOR |
539 | tristate "NOR flash on Intel Vermilion Range Expansion Bus CS0" | 533 | tristate "NOR flash on Intel Vermilion Range Expansion Bus CS0" |
540 | depends on PCI | 534 | depends on PCI |
@@ -542,6 +536,12 @@ config MTD_INTEL_VR_NOR | |||
542 | Map driver for a NOR flash bank located on the Expansion Bus of the | 536 | Map driver for a NOR flash bank located on the Expansion Bus of the |
543 | Intel Vermilion Range chipset. | 537 | Intel Vermilion Range chipset. |
544 | 538 | ||
539 | config MTD_RBTX4939 | ||
540 | tristate "Map driver for RBTX4939 board" | ||
541 | depends on TOSHIBA_RBTX4939 && MTD_CFI && MTD_COMPLEX_MAPPINGS | ||
542 | help | ||
543 | Map driver for NOR flash chips on RBTX4939 board. | ||
544 | |||
545 | config MTD_PLATRAM | 545 | config MTD_PLATRAM |
546 | tristate "Map driver for platform device RAM (mtd-ram)" | 546 | tristate "Map driver for platform device RAM (mtd-ram)" |
547 | select MTD_RAM | 547 | select MTD_RAM |
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile index 26b28a7a90b5..2dbc1bec8488 100644 --- a/drivers/mtd/maps/Makefile +++ b/drivers/mtd/maps/Makefile | |||
@@ -56,9 +56,9 @@ obj-$(CONFIG_MTD_IXP4XX) += ixp4xx.o | |||
56 | obj-$(CONFIG_MTD_IXP2000) += ixp2000.o | 56 | obj-$(CONFIG_MTD_IXP2000) += ixp2000.o |
57 | obj-$(CONFIG_MTD_WRSBC8260) += wr_sbc82xx_flash.o | 57 | obj-$(CONFIG_MTD_WRSBC8260) += wr_sbc82xx_flash.o |
58 | obj-$(CONFIG_MTD_DMV182) += dmv182.o | 58 | obj-$(CONFIG_MTD_DMV182) += dmv182.o |
59 | obj-$(CONFIG_MTD_SHARP_SL) += sharpsl-flash.o | ||
60 | obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o | 59 | obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o |
61 | obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o | 60 | obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o |
62 | obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o | 61 | obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o |
63 | obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o | 62 | obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o |
63 | obj-$(CONFIG_MTD_RBTX4939) += rbtx4939-flash.o | ||
64 | obj-$(CONFIG_MTD_VMU) += vmu-flash.o | 64 | obj-$(CONFIG_MTD_VMU) += vmu-flash.o |
diff --git a/drivers/mtd/maps/omap_nor.c b/drivers/mtd/maps/omap_nor.c index 7e50e9b1b781..a24478102b11 100644 --- a/drivers/mtd/maps/omap_nor.c +++ b/drivers/mtd/maps/omap_nor.c | |||
@@ -115,6 +115,8 @@ static int __init omapflash_probe(struct platform_device *pdev) | |||
115 | } | 115 | } |
116 | info->mtd->owner = THIS_MODULE; | 116 | info->mtd->owner = THIS_MODULE; |
117 | 117 | ||
118 | info->mtd->dev.parent = &pdev->dev; | ||
119 | |||
118 | #ifdef CONFIG_MTD_PARTITIONS | 120 | #ifdef CONFIG_MTD_PARTITIONS |
119 | err = parse_mtd_partitions(info->mtd, part_probes, &info->parts, 0); | 121 | err = parse_mtd_partitions(info->mtd, part_probes, &info->parts, 0); |
120 | if (err > 0) | 122 | if (err > 0) |
diff --git a/drivers/mtd/maps/physmap.c b/drivers/mtd/maps/physmap.c index 229718222db7..29a901157352 100644 --- a/drivers/mtd/maps/physmap.c +++ b/drivers/mtd/maps/physmap.c | |||
@@ -147,6 +147,7 @@ static int physmap_flash_probe(struct platform_device *dev) | |||
147 | devices_found++; | 147 | devices_found++; |
148 | } | 148 | } |
149 | info->mtd[i]->owner = THIS_MODULE; | 149 | info->mtd[i]->owner = THIS_MODULE; |
150 | info->mtd[i]->dev.parent = &dev->dev; | ||
150 | } | 151 | } |
151 | 152 | ||
152 | if (devices_found == 1) { | 153 | if (devices_found == 1) { |
diff --git a/drivers/mtd/maps/physmap_of.c b/drivers/mtd/maps/physmap_of.c index fbf0ca939d72..c83a60fada53 100644 --- a/drivers/mtd/maps/physmap_of.c +++ b/drivers/mtd/maps/physmap_of.c | |||
@@ -219,6 +219,7 @@ static int __devinit of_flash_probe(struct of_device *dev, | |||
219 | goto err_out; | 219 | goto err_out; |
220 | } | 220 | } |
221 | info->mtd->owner = THIS_MODULE; | 221 | info->mtd->owner = THIS_MODULE; |
222 | info->mtd->dev.parent = &dev->dev; | ||
222 | 223 | ||
223 | #ifdef CONFIG_MTD_PARTITIONS | 224 | #ifdef CONFIG_MTD_PARTITIONS |
224 | /* First look for RedBoot table or partitions on the command | 225 | /* First look for RedBoot table or partitions on the command |
diff --git a/drivers/mtd/maps/plat-ram.c b/drivers/mtd/maps/plat-ram.c index e7dd9c8a965e..49c9ece76477 100644 --- a/drivers/mtd/maps/plat-ram.c +++ b/drivers/mtd/maps/plat-ram.c | |||
@@ -224,6 +224,7 @@ static int platram_probe(struct platform_device *pdev) | |||
224 | } | 224 | } |
225 | 225 | ||
226 | info->mtd->owner = THIS_MODULE; | 226 | info->mtd->owner = THIS_MODULE; |
227 | info->mtd->dev.parent = &pdev->dev; | ||
227 | 228 | ||
228 | platram_setrw(info, PLATRAM_RW); | 229 | platram_setrw(info, PLATRAM_RW); |
229 | 230 | ||
diff --git a/drivers/mtd/maps/rbtx4939-flash.c b/drivers/mtd/maps/rbtx4939-flash.c new file mode 100644 index 000000000000..d39f0adac846 --- /dev/null +++ b/drivers/mtd/maps/rbtx4939-flash.c | |||
@@ -0,0 +1,208 @@ | |||
1 | /* | ||
2 | * rbtx4939-flash (based on physmap.c) | ||
3 | * | ||
4 | * This is a simplified physmap driver with map_init callback function. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Copyright (C) 2009 Atsushi Nemoto <anemo@mba.ocn.ne.jp> | ||
11 | */ | ||
12 | |||
13 | #include <linux/module.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/slab.h> | ||
18 | #include <linux/device.h> | ||
19 | #include <linux/platform_device.h> | ||
20 | #include <linux/mtd/mtd.h> | ||
21 | #include <linux/mtd/map.h> | ||
22 | #include <linux/mtd/partitions.h> | ||
23 | #include <asm/txx9/rbtx4939.h> | ||
24 | |||
25 | struct rbtx4939_flash_info { | ||
26 | struct mtd_info *mtd; | ||
27 | struct map_info map; | ||
28 | #ifdef CONFIG_MTD_PARTITIONS | ||
29 | int nr_parts; | ||
30 | struct mtd_partition *parts; | ||
31 | #endif | ||
32 | }; | ||
33 | |||
34 | static int rbtx4939_flash_remove(struct platform_device *dev) | ||
35 | { | ||
36 | struct rbtx4939_flash_info *info; | ||
37 | |||
38 | info = platform_get_drvdata(dev); | ||
39 | if (!info) | ||
40 | return 0; | ||
41 | platform_set_drvdata(dev, NULL); | ||
42 | |||
43 | if (info->mtd) { | ||
44 | #ifdef CONFIG_MTD_PARTITIONS | ||
45 | struct rbtx4939_flash_data *pdata = dev->dev.platform_data; | ||
46 | |||
47 | if (info->nr_parts) { | ||
48 | del_mtd_partitions(info->mtd); | ||
49 | kfree(info->parts); | ||
50 | } else if (pdata->nr_parts) | ||
51 | del_mtd_partitions(info->mtd); | ||
52 | else | ||
53 | del_mtd_device(info->mtd); | ||
54 | #else | ||
55 | del_mtd_device(info->mtd); | ||
56 | #endif | ||
57 | map_destroy(info->mtd); | ||
58 | } | ||
59 | return 0; | ||
60 | } | ||
61 | |||
62 | static const char *rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL }; | ||
63 | #ifdef CONFIG_MTD_PARTITIONS | ||
64 | static const char *part_probe_types[] = { "cmdlinepart", NULL }; | ||
65 | #endif | ||
66 | |||
67 | static int rbtx4939_flash_probe(struct platform_device *dev) | ||
68 | { | ||
69 | struct rbtx4939_flash_data *pdata; | ||
70 | struct rbtx4939_flash_info *info; | ||
71 | struct resource *res; | ||
72 | const char **probe_type; | ||
73 | int err = 0; | ||
74 | unsigned long size; | ||
75 | |||
76 | pdata = dev->dev.platform_data; | ||
77 | if (!pdata) | ||
78 | return -ENODEV; | ||
79 | |||
80 | res = platform_get_resource(dev, IORESOURCE_MEM, 0); | ||
81 | if (!res) | ||
82 | return -ENODEV; | ||
83 | info = devm_kzalloc(&dev->dev, sizeof(struct rbtx4939_flash_info), | ||
84 | GFP_KERNEL); | ||
85 | if (!info) | ||
86 | return -ENOMEM; | ||
87 | |||
88 | platform_set_drvdata(dev, info); | ||
89 | |||
90 | size = resource_size(res); | ||
91 | pr_notice("rbtx4939 platform flash device: %pR\n", res); | ||
92 | |||
93 | if (!devm_request_mem_region(&dev->dev, res->start, size, | ||
94 | dev_name(&dev->dev))) | ||
95 | return -EBUSY; | ||
96 | |||
97 | info->map.name = dev_name(&dev->dev); | ||
98 | info->map.phys = res->start; | ||
99 | info->map.size = size; | ||
100 | info->map.bankwidth = pdata->width; | ||
101 | |||
102 | info->map.virt = devm_ioremap(&dev->dev, info->map.phys, size); | ||
103 | if (!info->map.virt) | ||
104 | return -EBUSY; | ||
105 | |||
106 | if (pdata->map_init) | ||
107 | (*pdata->map_init)(&info->map); | ||
108 | else | ||
109 | simple_map_init(&info->map); | ||
110 | |||
111 | probe_type = rom_probe_types; | ||
112 | for (; !info->mtd && *probe_type; probe_type++) | ||
113 | info->mtd = do_map_probe(*probe_type, &info->map); | ||
114 | if (!info->mtd) { | ||
115 | dev_err(&dev->dev, "map_probe failed\n"); | ||
116 | err = -ENXIO; | ||
117 | goto err_out; | ||
118 | } | ||
119 | info->mtd->owner = THIS_MODULE; | ||
120 | if (err) | ||
121 | goto err_out; | ||
122 | |||
123 | #ifdef CONFIG_MTD_PARTITIONS | ||
124 | err = parse_mtd_partitions(info->mtd, part_probe_types, | ||
125 | &info->parts, 0); | ||
126 | if (err > 0) { | ||
127 | add_mtd_partitions(info->mtd, info->parts, err); | ||
128 | info->nr_parts = err; | ||
129 | return 0; | ||
130 | } | ||
131 | |||
132 | if (pdata->nr_parts) { | ||
133 | pr_notice("Using rbtx4939 partition information\n"); | ||
134 | add_mtd_partitions(info->mtd, pdata->parts, pdata->nr_parts); | ||
135 | return 0; | ||
136 | } | ||
137 | #endif | ||
138 | |||
139 | add_mtd_device(info->mtd); | ||
140 | return 0; | ||
141 | |||
142 | err_out: | ||
143 | rbtx4939_flash_remove(dev); | ||
144 | return err; | ||
145 | } | ||
146 | |||
147 | #ifdef CONFIG_PM | ||
148 | static int rbtx4939_flash_suspend(struct platform_device *dev, | ||
149 | pm_message_t state) | ||
150 | { | ||
151 | struct rbtx4939_flash_info *info = platform_get_drvdata(dev); | ||
152 | |||
153 | if (info->mtd->suspend) | ||
154 | return info->mtd->suspend(info->mtd); | ||
155 | return 0; | ||
156 | } | ||
157 | |||
158 | static int rbtx4939_flash_resume(struct platform_device *dev) | ||
159 | { | ||
160 | struct rbtx4939_flash_info *info = platform_get_drvdata(dev); | ||
161 | |||
162 | if (info->mtd->resume) | ||
163 | info->mtd->resume(info->mtd); | ||
164 | return 0; | ||
165 | } | ||
166 | |||
167 | static void rbtx4939_flash_shutdown(struct platform_device *dev) | ||
168 | { | ||
169 | struct rbtx4939_flash_info *info = platform_get_drvdata(dev); | ||
170 | |||
171 | if (info->mtd->suspend && info->mtd->resume) | ||
172 | if (info->mtd->suspend(info->mtd) == 0) | ||
173 | info->mtd->resume(info->mtd); | ||
174 | } | ||
175 | #else | ||
176 | #define rbtx4939_flash_suspend NULL | ||
177 | #define rbtx4939_flash_resume NULL | ||
178 | #define rbtx4939_flash_shutdown NULL | ||
179 | #endif | ||
180 | |||
181 | static struct platform_driver rbtx4939_flash_driver = { | ||
182 | .probe = rbtx4939_flash_probe, | ||
183 | .remove = rbtx4939_flash_remove, | ||
184 | .suspend = rbtx4939_flash_suspend, | ||
185 | .resume = rbtx4939_flash_resume, | ||
186 | .shutdown = rbtx4939_flash_shutdown, | ||
187 | .driver = { | ||
188 | .name = "rbtx4939-flash", | ||
189 | .owner = THIS_MODULE, | ||
190 | }, | ||
191 | }; | ||
192 | |||
193 | static int __init rbtx4939_flash_init(void) | ||
194 | { | ||
195 | return platform_driver_register(&rbtx4939_flash_driver); | ||
196 | } | ||
197 | |||
198 | static void __exit rbtx4939_flash_exit(void) | ||
199 | { | ||
200 | platform_driver_unregister(&rbtx4939_flash_driver); | ||
201 | } | ||
202 | |||
203 | module_init(rbtx4939_flash_init); | ||
204 | module_exit(rbtx4939_flash_exit); | ||
205 | |||
206 | MODULE_LICENSE("GPL"); | ||
207 | MODULE_DESCRIPTION("RBTX4939 MTD map driver"); | ||
208 | MODULE_ALIAS("platform:rbtx4939-flash"); | ||
diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c index 8f57b6f40aa2..05e9362dc7f0 100644 --- a/drivers/mtd/maps/sa1100-flash.c +++ b/drivers/mtd/maps/sa1100-flash.c | |||
@@ -351,7 +351,7 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *plat) | |||
351 | 351 | ||
352 | static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; | 352 | static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; |
353 | 353 | ||
354 | static int __init sa1100_mtd_probe(struct platform_device *pdev) | 354 | static int __devinit sa1100_mtd_probe(struct platform_device *pdev) |
355 | { | 355 | { |
356 | struct flash_platform_data *plat = pdev->dev.platform_data; | 356 | struct flash_platform_data *plat = pdev->dev.platform_data; |
357 | struct mtd_partition *parts; | 357 | struct mtd_partition *parts; |
diff --git a/drivers/mtd/maps/sharpsl-flash.c b/drivers/mtd/maps/sharpsl-flash.c deleted file mode 100644 index b392f096c706..000000000000 --- a/drivers/mtd/maps/sharpsl-flash.c +++ /dev/null | |||
@@ -1,116 +0,0 @@ | |||
1 | /* | ||
2 | * sharpsl-flash.c | ||
3 | * | ||
4 | * Copyright (C) 2001 Lineo Japan, Inc. | ||
5 | * Copyright (C) 2002 SHARP | ||
6 | * | ||
7 | * based on rpxlite.c,v 1.15 2001/10/02 15:05:14 dwmw2 Exp | ||
8 | * Handle mapping of the flash on the RPX Lite and CLLF boards | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or | ||
13 | * (at your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | */ | ||
21 | |||
22 | #include <linux/module.h> | ||
23 | #include <linux/types.h> | ||
24 | #include <linux/kernel.h> | ||
25 | #include <linux/mtd/mtd.h> | ||
26 | #include <linux/mtd/map.h> | ||
27 | #include <linux/mtd/partitions.h> | ||
28 | #include <asm/io.h> | ||
29 | #include <asm/mach-types.h> | ||
30 | |||
31 | #define WINDOW_ADDR 0x00000000 | ||
32 | #define WINDOW_SIZE 0x00800000 | ||
33 | #define BANK_WIDTH 2 | ||
34 | |||
35 | static struct mtd_info *mymtd; | ||
36 | |||
37 | struct map_info sharpsl_map = { | ||
38 | .name = "sharpsl-flash", | ||
39 | .size = WINDOW_SIZE, | ||
40 | .bankwidth = BANK_WIDTH, | ||
41 | .phys = WINDOW_ADDR | ||
42 | }; | ||
43 | |||
44 | static struct mtd_partition sharpsl_partitions[1] = { | ||
45 | { | ||
46 | name: "Boot PROM Filesystem", | ||
47 | } | ||
48 | }; | ||
49 | |||
50 | static int __init init_sharpsl(void) | ||
51 | { | ||
52 | struct mtd_partition *parts; | ||
53 | int nb_parts = 0; | ||
54 | char *part_type = "static"; | ||
55 | |||
56 | printk(KERN_NOTICE "Sharp SL series flash device: %x at %x\n", | ||
57 | WINDOW_SIZE, WINDOW_ADDR); | ||
58 | sharpsl_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE); | ||
59 | if (!sharpsl_map.virt) { | ||
60 | printk("Failed to ioremap\n"); | ||
61 | return -EIO; | ||
62 | } | ||
63 | |||
64 | simple_map_init(&sharpsl_map); | ||
65 | |||
66 | mymtd = do_map_probe("map_rom", &sharpsl_map); | ||
67 | if (!mymtd) { | ||
68 | iounmap(sharpsl_map.virt); | ||
69 | return -ENXIO; | ||
70 | } | ||
71 | |||
72 | mymtd->owner = THIS_MODULE; | ||
73 | |||
74 | if (machine_is_corgi() || machine_is_shepherd() || machine_is_husky() | ||
75 | || machine_is_poodle()) { | ||
76 | sharpsl_partitions[0].size=0x006d0000; | ||
77 | sharpsl_partitions[0].offset=0x00120000; | ||
78 | } else if (machine_is_tosa()) { | ||
79 | sharpsl_partitions[0].size=0x006a0000; | ||
80 | sharpsl_partitions[0].offset=0x00160000; | ||
81 | } else if (machine_is_spitz() || machine_is_akita() || machine_is_borzoi()) { | ||
82 | sharpsl_partitions[0].size=0x006b0000; | ||
83 | sharpsl_partitions[0].offset=0x00140000; | ||
84 | } else { | ||
85 | map_destroy(mymtd); | ||
86 | iounmap(sharpsl_map.virt); | ||
87 | return -ENODEV; | ||
88 | } | ||
89 | |||
90 | parts = sharpsl_partitions; | ||
91 | nb_parts = ARRAY_SIZE(sharpsl_partitions); | ||
92 | |||
93 | printk(KERN_NOTICE "Using %s partition definition\n", part_type); | ||
94 | add_mtd_partitions(mymtd, parts, nb_parts); | ||
95 | |||
96 | return 0; | ||
97 | } | ||
98 | |||
99 | static void __exit cleanup_sharpsl(void) | ||
100 | { | ||
101 | if (mymtd) { | ||
102 | del_mtd_partitions(mymtd); | ||
103 | map_destroy(mymtd); | ||
104 | } | ||
105 | if (sharpsl_map.virt) { | ||
106 | iounmap(sharpsl_map.virt); | ||
107 | sharpsl_map.virt = 0; | ||
108 | } | ||
109 | } | ||
110 | |||
111 | module_init(init_sharpsl); | ||
112 | module_exit(cleanup_sharpsl); | ||
113 | |||
114 | MODULE_LICENSE("GPL"); | ||
115 | MODULE_AUTHOR("SHARP (Original: Arnold Christensen <AKC@pel.dk>)"); | ||
116 | MODULE_DESCRIPTION("MTD map driver for SHARP SL series"); | ||
diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c index 1409f01406f6..a49a9c8f2cb1 100644 --- a/drivers/mtd/mtd_blkdevs.c +++ b/drivers/mtd/mtd_blkdevs.c | |||
@@ -286,6 +286,7 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new) | |||
286 | gd->private_data = new; | 286 | gd->private_data = new; |
287 | new->blkcore_priv = gd; | 287 | new->blkcore_priv = gd; |
288 | gd->queue = tr->blkcore_priv->rq; | 288 | gd->queue = tr->blkcore_priv->rq; |
289 | gd->driverfs_dev = new->mtd->dev.parent; | ||
289 | 290 | ||
290 | if (new->readonly) | 291 | if (new->readonly) |
291 | set_disk_ro(gd, 1); | 292 | set_disk_ro(gd, 1); |
@@ -382,11 +383,12 @@ int register_mtd_blktrans(struct mtd_blktrans_ops *tr) | |||
382 | tr->blkcore_priv->thread = kthread_run(mtd_blktrans_thread, tr, | 383 | tr->blkcore_priv->thread = kthread_run(mtd_blktrans_thread, tr, |
383 | "%sd", tr->name); | 384 | "%sd", tr->name); |
384 | if (IS_ERR(tr->blkcore_priv->thread)) { | 385 | if (IS_ERR(tr->blkcore_priv->thread)) { |
386 | int ret = PTR_ERR(tr->blkcore_priv->thread); | ||
385 | blk_cleanup_queue(tr->blkcore_priv->rq); | 387 | blk_cleanup_queue(tr->blkcore_priv->rq); |
386 | unregister_blkdev(tr->major, tr->name); | 388 | unregister_blkdev(tr->major, tr->name); |
387 | kfree(tr->blkcore_priv); | 389 | kfree(tr->blkcore_priv); |
388 | mutex_unlock(&mtd_table_mutex); | 390 | mutex_unlock(&mtd_table_mutex); |
389 | return PTR_ERR(tr->blkcore_priv->thread); | 391 | return ret; |
390 | } | 392 | } |
391 | 393 | ||
392 | INIT_LIST_HEAD(&tr->devs); | 394 | INIT_LIST_HEAD(&tr->devs); |
diff --git a/drivers/mtd/mtdbdi.c b/drivers/mtd/mtdbdi.c new file mode 100644 index 000000000000..5ca5aed0b225 --- /dev/null +++ b/drivers/mtd/mtdbdi.c | |||
@@ -0,0 +1,43 @@ | |||
1 | /* MTD backing device capabilities | ||
2 | * | ||
3 | * Copyright © 2006 Red Hat, Inc. All Rights Reserved. | ||
4 | * Written by David Howells (dhowells@redhat.com) | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the License, or (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #include <linux/backing-dev.h> | ||
13 | #include <linux/mtd/mtd.h> | ||
14 | #include "internal.h" | ||
15 | |||
16 | /* | ||
17 | * backing device capabilities for non-mappable devices (such as NAND flash) | ||
18 | * - permits private mappings, copies are taken of the data | ||
19 | */ | ||
20 | struct backing_dev_info mtd_bdi_unmappable = { | ||
21 | .capabilities = BDI_CAP_MAP_COPY, | ||
22 | }; | ||
23 | |||
24 | /* | ||
25 | * backing device capabilities for R/O mappable devices (such as ROM) | ||
26 | * - permits private mappings, copies are taken of the data | ||
27 | * - permits non-writable shared mappings | ||
28 | */ | ||
29 | struct backing_dev_info mtd_bdi_ro_mappable = { | ||
30 | .capabilities = (BDI_CAP_MAP_COPY | BDI_CAP_MAP_DIRECT | | ||
31 | BDI_CAP_EXEC_MAP | BDI_CAP_READ_MAP), | ||
32 | }; | ||
33 | |||
34 | /* | ||
35 | * backing device capabilities for writable mappable devices (such as RAM) | ||
36 | * - permits private mappings, copies are taken of the data | ||
37 | * - permits non-writable shared mappings | ||
38 | */ | ||
39 | struct backing_dev_info mtd_bdi_rw_mappable = { | ||
40 | .capabilities = (BDI_CAP_MAP_COPY | BDI_CAP_MAP_DIRECT | | ||
41 | BDI_CAP_EXEC_MAP | BDI_CAP_READ_MAP | | ||
42 | BDI_CAP_WRITE_MAP), | ||
43 | }; | ||
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index e9ec59e9a566..763d3f0a1f42 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c | |||
@@ -13,39 +13,13 @@ | |||
13 | #include <linux/slab.h> | 13 | #include <linux/slab.h> |
14 | #include <linux/sched.h> | 14 | #include <linux/sched.h> |
15 | #include <linux/smp_lock.h> | 15 | #include <linux/smp_lock.h> |
16 | #include <linux/backing-dev.h> | ||
16 | 17 | ||
17 | #include <linux/mtd/mtd.h> | 18 | #include <linux/mtd/mtd.h> |
18 | #include <linux/mtd/compatmac.h> | 19 | #include <linux/mtd/compatmac.h> |
19 | 20 | ||
20 | #include <asm/uaccess.h> | 21 | #include <asm/uaccess.h> |
21 | 22 | ||
22 | static struct class *mtd_class; | ||
23 | |||
24 | static void mtd_notify_add(struct mtd_info* mtd) | ||
25 | { | ||
26 | if (!mtd) | ||
27 | return; | ||
28 | |||
29 | device_create(mtd_class, NULL, MKDEV(MTD_CHAR_MAJOR, mtd->index*2), | ||
30 | NULL, "mtd%d", mtd->index); | ||
31 | |||
32 | device_create(mtd_class, NULL, MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1), | ||
33 | NULL, "mtd%dro", mtd->index); | ||
34 | } | ||
35 | |||
36 | static void mtd_notify_remove(struct mtd_info* mtd) | ||
37 | { | ||
38 | if (!mtd) | ||
39 | return; | ||
40 | |||
41 | device_destroy(mtd_class, MKDEV(MTD_CHAR_MAJOR, mtd->index*2)); | ||
42 | device_destroy(mtd_class, MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1)); | ||
43 | } | ||
44 | |||
45 | static struct mtd_notifier notifier = { | ||
46 | .add = mtd_notify_add, | ||
47 | .remove = mtd_notify_remove, | ||
48 | }; | ||
49 | 23 | ||
50 | /* | 24 | /* |
51 | * Data structure to hold the pointer to the mtd device as well | 25 | * Data structure to hold the pointer to the mtd device as well |
@@ -107,12 +81,15 @@ static int mtd_open(struct inode *inode, struct file *file) | |||
107 | goto out; | 81 | goto out; |
108 | } | 82 | } |
109 | 83 | ||
110 | if (MTD_ABSENT == mtd->type) { | 84 | if (mtd->type == MTD_ABSENT) { |
111 | put_mtd_device(mtd); | 85 | put_mtd_device(mtd); |
112 | ret = -ENODEV; | 86 | ret = -ENODEV; |
113 | goto out; | 87 | goto out; |
114 | } | 88 | } |
115 | 89 | ||
90 | if (mtd->backing_dev_info) | ||
91 | file->f_mapping->backing_dev_info = mtd->backing_dev_info; | ||
92 | |||
116 | /* You can't open it RW if it's not a writeable device */ | 93 | /* You can't open it RW if it's not a writeable device */ |
117 | if ((file->f_mode & FMODE_WRITE) && !(mtd->flags & MTD_WRITEABLE)) { | 94 | if ((file->f_mode & FMODE_WRITE) && !(mtd->flags & MTD_WRITEABLE)) { |
118 | put_mtd_device(mtd); | 95 | put_mtd_device(mtd); |
@@ -781,6 +758,59 @@ static int mtd_ioctl(struct inode *inode, struct file *file, | |||
781 | return ret; | 758 | return ret; |
782 | } /* memory_ioctl */ | 759 | } /* memory_ioctl */ |
783 | 760 | ||
761 | /* | ||
762 | * try to determine where a shared mapping can be made | ||
763 | * - only supported for NOMMU at the moment (MMU can't doesn't copy private | ||
764 | * mappings) | ||
765 | */ | ||
766 | #ifndef CONFIG_MMU | ||
767 | static unsigned long mtd_get_unmapped_area(struct file *file, | ||
768 | unsigned long addr, | ||
769 | unsigned long len, | ||
770 | unsigned long pgoff, | ||
771 | unsigned long flags) | ||
772 | { | ||
773 | struct mtd_file_info *mfi = file->private_data; | ||
774 | struct mtd_info *mtd = mfi->mtd; | ||
775 | |||
776 | if (mtd->get_unmapped_area) { | ||
777 | unsigned long offset; | ||
778 | |||
779 | if (addr != 0) | ||
780 | return (unsigned long) -EINVAL; | ||
781 | |||
782 | if (len > mtd->size || pgoff >= (mtd->size >> PAGE_SHIFT)) | ||
783 | return (unsigned long) -EINVAL; | ||
784 | |||
785 | offset = pgoff << PAGE_SHIFT; | ||
786 | if (offset > mtd->size - len) | ||
787 | return (unsigned long) -EINVAL; | ||
788 | |||
789 | return mtd->get_unmapped_area(mtd, len, offset, flags); | ||
790 | } | ||
791 | |||
792 | /* can't map directly */ | ||
793 | return (unsigned long) -ENOSYS; | ||
794 | } | ||
795 | #endif | ||
796 | |||
797 | /* | ||
798 | * set up a mapping for shared memory segments | ||
799 | */ | ||
800 | static int mtd_mmap(struct file *file, struct vm_area_struct *vma) | ||
801 | { | ||
802 | #ifdef CONFIG_MMU | ||
803 | struct mtd_file_info *mfi = file->private_data; | ||
804 | struct mtd_info *mtd = mfi->mtd; | ||
805 | |||
806 | if (mtd->type == MTD_RAM || mtd->type == MTD_ROM) | ||
807 | return 0; | ||
808 | return -ENOSYS; | ||
809 | #else | ||
810 | return vma->vm_flags & VM_SHARED ? 0 : -ENOSYS; | ||
811 | #endif | ||
812 | } | ||
813 | |||
784 | static const struct file_operations mtd_fops = { | 814 | static const struct file_operations mtd_fops = { |
785 | .owner = THIS_MODULE, | 815 | .owner = THIS_MODULE, |
786 | .llseek = mtd_lseek, | 816 | .llseek = mtd_lseek, |
@@ -789,39 +819,36 @@ static const struct file_operations mtd_fops = { | |||
789 | .ioctl = mtd_ioctl, | 819 | .ioctl = mtd_ioctl, |
790 | .open = mtd_open, | 820 | .open = mtd_open, |
791 | .release = mtd_close, | 821 | .release = mtd_close, |
822 | .mmap = mtd_mmap, | ||
823 | #ifndef CONFIG_MMU | ||
824 | .get_unmapped_area = mtd_get_unmapped_area, | ||
825 | #endif | ||
792 | }; | 826 | }; |
793 | 827 | ||
794 | static int __init init_mtdchar(void) | 828 | static int __init init_mtdchar(void) |
795 | { | 829 | { |
796 | if (register_chrdev(MTD_CHAR_MAJOR, "mtd", &mtd_fops)) { | 830 | int status; |
831 | |||
832 | status = register_chrdev(MTD_CHAR_MAJOR, "mtd", &mtd_fops); | ||
833 | if (status < 0) { | ||
797 | printk(KERN_NOTICE "Can't allocate major number %d for Memory Technology Devices.\n", | 834 | printk(KERN_NOTICE "Can't allocate major number %d for Memory Technology Devices.\n", |
798 | MTD_CHAR_MAJOR); | 835 | MTD_CHAR_MAJOR); |
799 | return -EAGAIN; | ||
800 | } | 836 | } |
801 | 837 | ||
802 | mtd_class = class_create(THIS_MODULE, "mtd"); | 838 | return status; |
803 | |||
804 | if (IS_ERR(mtd_class)) { | ||
805 | printk(KERN_ERR "Error creating mtd class.\n"); | ||
806 | unregister_chrdev(MTD_CHAR_MAJOR, "mtd"); | ||
807 | return PTR_ERR(mtd_class); | ||
808 | } | ||
809 | |||
810 | register_mtd_user(¬ifier); | ||
811 | return 0; | ||
812 | } | 839 | } |
813 | 840 | ||
814 | static void __exit cleanup_mtdchar(void) | 841 | static void __exit cleanup_mtdchar(void) |
815 | { | 842 | { |
816 | unregister_mtd_user(¬ifier); | ||
817 | class_destroy(mtd_class); | ||
818 | unregister_chrdev(MTD_CHAR_MAJOR, "mtd"); | 843 | unregister_chrdev(MTD_CHAR_MAJOR, "mtd"); |
819 | } | 844 | } |
820 | 845 | ||
821 | module_init(init_mtdchar); | 846 | module_init(init_mtdchar); |
822 | module_exit(cleanup_mtdchar); | 847 | module_exit(cleanup_mtdchar); |
823 | 848 | ||
849 | MODULE_ALIAS_CHARDEV_MAJOR(MTD_CHAR_MAJOR); | ||
824 | 850 | ||
825 | MODULE_LICENSE("GPL"); | 851 | MODULE_LICENSE("GPL"); |
826 | MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); | 852 | MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); |
827 | MODULE_DESCRIPTION("Direct character-device access to MTD devices"); | 853 | MODULE_DESCRIPTION("Direct character-device access to MTD devices"); |
854 | MODULE_ALIAS_CHARDEV_MAJOR(MTD_CHAR_MAJOR); | ||
diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c index 3dbb1b38db66..792b547786b8 100644 --- a/drivers/mtd/mtdconcat.c +++ b/drivers/mtd/mtdconcat.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/slab.h> | 13 | #include <linux/slab.h> |
14 | #include <linux/sched.h> | 14 | #include <linux/sched.h> |
15 | #include <linux/types.h> | 15 | #include <linux/types.h> |
16 | #include <linux/backing-dev.h> | ||
16 | 17 | ||
17 | #include <linux/mtd/mtd.h> | 18 | #include <linux/mtd/mtd.h> |
18 | #include <linux/mtd/concat.h> | 19 | #include <linux/mtd/concat.h> |
@@ -684,6 +685,40 @@ static int concat_block_markbad(struct mtd_info *mtd, loff_t ofs) | |||
684 | } | 685 | } |
685 | 686 | ||
686 | /* | 687 | /* |
688 | * try to support NOMMU mmaps on concatenated devices | ||
689 | * - we don't support subdev spanning as we can't guarantee it'll work | ||
690 | */ | ||
691 | static unsigned long concat_get_unmapped_area(struct mtd_info *mtd, | ||
692 | unsigned long len, | ||
693 | unsigned long offset, | ||
694 | unsigned long flags) | ||
695 | { | ||
696 | struct mtd_concat *concat = CONCAT(mtd); | ||
697 | int i; | ||
698 | |||
699 | for (i = 0; i < concat->num_subdev; i++) { | ||
700 | struct mtd_info *subdev = concat->subdev[i]; | ||
701 | |||
702 | if (offset >= subdev->size) { | ||
703 | offset -= subdev->size; | ||
704 | continue; | ||
705 | } | ||
706 | |||
707 | /* we've found the subdev over which the mapping will reside */ | ||
708 | if (offset + len > subdev->size) | ||
709 | return (unsigned long) -EINVAL; | ||
710 | |||
711 | if (subdev->get_unmapped_area) | ||
712 | return subdev->get_unmapped_area(subdev, len, offset, | ||
713 | flags); | ||
714 | |||
715 | break; | ||
716 | } | ||
717 | |||
718 | return (unsigned long) -ENOSYS; | ||
719 | } | ||
720 | |||
721 | /* | ||
687 | * This function constructs a virtual MTD device by concatenating | 722 | * This function constructs a virtual MTD device by concatenating |
688 | * num_devs MTD devices. A pointer to the new device object is | 723 | * num_devs MTD devices. A pointer to the new device object is |
689 | * stored to *new_dev upon success. This function does _not_ | 724 | * stored to *new_dev upon success. This function does _not_ |
@@ -740,6 +775,8 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c | |||
740 | 775 | ||
741 | concat->mtd.ecc_stats.badblocks = subdev[0]->ecc_stats.badblocks; | 776 | concat->mtd.ecc_stats.badblocks = subdev[0]->ecc_stats.badblocks; |
742 | 777 | ||
778 | concat->mtd.backing_dev_info = subdev[0]->backing_dev_info; | ||
779 | |||
743 | concat->subdev[0] = subdev[0]; | 780 | concat->subdev[0] = subdev[0]; |
744 | 781 | ||
745 | for (i = 1; i < num_devs; i++) { | 782 | for (i = 1; i < num_devs; i++) { |
@@ -766,6 +803,15 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c | |||
766 | concat->mtd.flags |= | 803 | concat->mtd.flags |= |
767 | subdev[i]->flags & MTD_WRITEABLE; | 804 | subdev[i]->flags & MTD_WRITEABLE; |
768 | } | 805 | } |
806 | |||
807 | /* only permit direct mapping if the BDIs are all the same | ||
808 | * - copy-mapping is still permitted | ||
809 | */ | ||
810 | if (concat->mtd.backing_dev_info != | ||
811 | subdev[i]->backing_dev_info) | ||
812 | concat->mtd.backing_dev_info = | ||
813 | &default_backing_dev_info; | ||
814 | |||
769 | concat->mtd.size += subdev[i]->size; | 815 | concat->mtd.size += subdev[i]->size; |
770 | concat->mtd.ecc_stats.badblocks += | 816 | concat->mtd.ecc_stats.badblocks += |
771 | subdev[i]->ecc_stats.badblocks; | 817 | subdev[i]->ecc_stats.badblocks; |
@@ -796,6 +842,7 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c | |||
796 | concat->mtd.unlock = concat_unlock; | 842 | concat->mtd.unlock = concat_unlock; |
797 | concat->mtd.suspend = concat_suspend; | 843 | concat->mtd.suspend = concat_suspend; |
798 | concat->mtd.resume = concat_resume; | 844 | concat->mtd.resume = concat_resume; |
845 | concat->mtd.get_unmapped_area = concat_get_unmapped_area; | ||
799 | 846 | ||
800 | /* | 847 | /* |
801 | * Combine the erase block size info of the subdevices: | 848 | * Combine the erase block size info of the subdevices: |
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index 76fe0a1e7a5e..fdd6ae859397 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c | |||
@@ -19,9 +19,13 @@ | |||
19 | #include <linux/proc_fs.h> | 19 | #include <linux/proc_fs.h> |
20 | 20 | ||
21 | #include <linux/mtd/mtd.h> | 21 | #include <linux/mtd/mtd.h> |
22 | #include "internal.h" | ||
22 | 23 | ||
23 | #include "mtdcore.h" | 24 | #include "mtdcore.h" |
24 | 25 | ||
26 | |||
27 | static struct class *mtd_class; | ||
28 | |||
25 | /* These are exported solely for the purpose of mtd_blkdevs.c. You | 29 | /* These are exported solely for the purpose of mtd_blkdevs.c. You |
26 | should not use them for _anything_ else */ | 30 | should not use them for _anything_ else */ |
27 | DEFINE_MUTEX(mtd_table_mutex); | 31 | DEFINE_MUTEX(mtd_table_mutex); |
@@ -32,6 +36,160 @@ EXPORT_SYMBOL_GPL(mtd_table); | |||
32 | 36 | ||
33 | static LIST_HEAD(mtd_notifiers); | 37 | static LIST_HEAD(mtd_notifiers); |
34 | 38 | ||
39 | |||
40 | #if defined(CONFIG_MTD_CHAR) || defined(CONFIG_MTD_CHAR_MODULE) | ||
41 | #define MTD_DEVT(index) MKDEV(MTD_CHAR_MAJOR, (index)*2) | ||
42 | #else | ||
43 | #define MTD_DEVT(index) 0 | ||
44 | #endif | ||
45 | |||
46 | /* REVISIT once MTD uses the driver model better, whoever allocates | ||
47 | * the mtd_info will probably want to use the release() hook... | ||
48 | */ | ||
49 | static void mtd_release(struct device *dev) | ||
50 | { | ||
51 | struct mtd_info *mtd = dev_to_mtd(dev); | ||
52 | |||
53 | /* remove /dev/mtdXro node if needed */ | ||
54 | if (MTD_DEVT(mtd->index)) | ||
55 | device_destroy(mtd_class, MTD_DEVT(mtd->index) + 1); | ||
56 | } | ||
57 | |||
58 | static ssize_t mtd_type_show(struct device *dev, | ||
59 | struct device_attribute *attr, char *buf) | ||
60 | { | ||
61 | struct mtd_info *mtd = dev_to_mtd(dev); | ||
62 | char *type; | ||
63 | |||
64 | switch (mtd->type) { | ||
65 | case MTD_ABSENT: | ||
66 | type = "absent"; | ||
67 | break; | ||
68 | case MTD_RAM: | ||
69 | type = "ram"; | ||
70 | break; | ||
71 | case MTD_ROM: | ||
72 | type = "rom"; | ||
73 | break; | ||
74 | case MTD_NORFLASH: | ||
75 | type = "nor"; | ||
76 | break; | ||
77 | case MTD_NANDFLASH: | ||
78 | type = "nand"; | ||
79 | break; | ||
80 | case MTD_DATAFLASH: | ||
81 | type = "dataflash"; | ||
82 | break; | ||
83 | case MTD_UBIVOLUME: | ||
84 | type = "ubi"; | ||
85 | break; | ||
86 | default: | ||
87 | type = "unknown"; | ||
88 | } | ||
89 | |||
90 | return snprintf(buf, PAGE_SIZE, "%s\n", type); | ||
91 | } | ||
92 | static DEVICE_ATTR(type, S_IRUGO, mtd_type_show, NULL); | ||
93 | |||
94 | static ssize_t mtd_flags_show(struct device *dev, | ||
95 | struct device_attribute *attr, char *buf) | ||
96 | { | ||
97 | struct mtd_info *mtd = dev_to_mtd(dev); | ||
98 | |||
99 | return snprintf(buf, PAGE_SIZE, "0x%lx\n", (unsigned long)mtd->flags); | ||
100 | |||
101 | } | ||
102 | static DEVICE_ATTR(flags, S_IRUGO, mtd_flags_show, NULL); | ||
103 | |||
104 | static ssize_t mtd_size_show(struct device *dev, | ||
105 | struct device_attribute *attr, char *buf) | ||
106 | { | ||
107 | struct mtd_info *mtd = dev_to_mtd(dev); | ||
108 | |||
109 | return snprintf(buf, PAGE_SIZE, "%llu\n", | ||
110 | (unsigned long long)mtd->size); | ||
111 | |||
112 | } | ||
113 | static DEVICE_ATTR(size, S_IRUGO, mtd_size_show, NULL); | ||
114 | |||
115 | static ssize_t mtd_erasesize_show(struct device *dev, | ||
116 | struct device_attribute *attr, char *buf) | ||
117 | { | ||
118 | struct mtd_info *mtd = dev_to_mtd(dev); | ||
119 | |||
120 | return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->erasesize); | ||
121 | |||
122 | } | ||
123 | static DEVICE_ATTR(erasesize, S_IRUGO, mtd_erasesize_show, NULL); | ||
124 | |||
125 | static ssize_t mtd_writesize_show(struct device *dev, | ||
126 | struct device_attribute *attr, char *buf) | ||
127 | { | ||
128 | struct mtd_info *mtd = dev_to_mtd(dev); | ||
129 | |||
130 | return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->writesize); | ||
131 | |||
132 | } | ||
133 | static DEVICE_ATTR(writesize, S_IRUGO, mtd_writesize_show, NULL); | ||
134 | |||
135 | static ssize_t mtd_oobsize_show(struct device *dev, | ||
136 | struct device_attribute *attr, char *buf) | ||
137 | { | ||
138 | struct mtd_info *mtd = dev_to_mtd(dev); | ||
139 | |||
140 | return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->oobsize); | ||
141 | |||
142 | } | ||
143 | static DEVICE_ATTR(oobsize, S_IRUGO, mtd_oobsize_show, NULL); | ||
144 | |||
145 | static ssize_t mtd_numeraseregions_show(struct device *dev, | ||
146 | struct device_attribute *attr, char *buf) | ||
147 | { | ||
148 | struct mtd_info *mtd = dev_to_mtd(dev); | ||
149 | |||
150 | return snprintf(buf, PAGE_SIZE, "%u\n", mtd->numeraseregions); | ||
151 | |||
152 | } | ||
153 | static DEVICE_ATTR(numeraseregions, S_IRUGO, mtd_numeraseregions_show, | ||
154 | NULL); | ||
155 | |||
156 | static ssize_t mtd_name_show(struct device *dev, | ||
157 | struct device_attribute *attr, char *buf) | ||
158 | { | ||
159 | struct mtd_info *mtd = dev_to_mtd(dev); | ||
160 | |||
161 | return snprintf(buf, PAGE_SIZE, "%s\n", mtd->name); | ||
162 | |||
163 | } | ||
164 | static DEVICE_ATTR(name, S_IRUGO, mtd_name_show, NULL); | ||
165 | |||
166 | static struct attribute *mtd_attrs[] = { | ||
167 | &dev_attr_type.attr, | ||
168 | &dev_attr_flags.attr, | ||
169 | &dev_attr_size.attr, | ||
170 | &dev_attr_erasesize.attr, | ||
171 | &dev_attr_writesize.attr, | ||
172 | &dev_attr_oobsize.attr, | ||
173 | &dev_attr_numeraseregions.attr, | ||
174 | &dev_attr_name.attr, | ||
175 | NULL, | ||
176 | }; | ||
177 | |||
178 | struct attribute_group mtd_group = { | ||
179 | .attrs = mtd_attrs, | ||
180 | }; | ||
181 | |||
182 | struct attribute_group *mtd_groups[] = { | ||
183 | &mtd_group, | ||
184 | NULL, | ||
185 | }; | ||
186 | |||
187 | static struct device_type mtd_devtype = { | ||
188 | .name = "mtd", | ||
189 | .groups = mtd_groups, | ||
190 | .release = mtd_release, | ||
191 | }; | ||
192 | |||
35 | /** | 193 | /** |
36 | * add_mtd_device - register an MTD device | 194 | * add_mtd_device - register an MTD device |
37 | * @mtd: pointer to new MTD device info structure | 195 | * @mtd: pointer to new MTD device info structure |
@@ -40,12 +198,27 @@ static LIST_HEAD(mtd_notifiers); | |||
40 | * notify each currently active MTD 'user' of its arrival. Returns | 198 | * notify each currently active MTD 'user' of its arrival. Returns |
41 | * zero on success or 1 on failure, which currently will only happen | 199 | * zero on success or 1 on failure, which currently will only happen |
42 | * if the number of present devices exceeds MAX_MTD_DEVICES (i.e. 16) | 200 | * if the number of present devices exceeds MAX_MTD_DEVICES (i.e. 16) |
201 | * or there's a sysfs error. | ||
43 | */ | 202 | */ |
44 | 203 | ||
45 | int add_mtd_device(struct mtd_info *mtd) | 204 | int add_mtd_device(struct mtd_info *mtd) |
46 | { | 205 | { |
47 | int i; | 206 | int i; |
48 | 207 | ||
208 | if (!mtd->backing_dev_info) { | ||
209 | switch (mtd->type) { | ||
210 | case MTD_RAM: | ||
211 | mtd->backing_dev_info = &mtd_bdi_rw_mappable; | ||
212 | break; | ||
213 | case MTD_ROM: | ||
214 | mtd->backing_dev_info = &mtd_bdi_ro_mappable; | ||
215 | break; | ||
216 | default: | ||
217 | mtd->backing_dev_info = &mtd_bdi_unmappable; | ||
218 | break; | ||
219 | } | ||
220 | } | ||
221 | |||
49 | BUG_ON(mtd->writesize == 0); | 222 | BUG_ON(mtd->writesize == 0); |
50 | mutex_lock(&mtd_table_mutex); | 223 | mutex_lock(&mtd_table_mutex); |
51 | 224 | ||
@@ -80,6 +253,23 @@ int add_mtd_device(struct mtd_info *mtd) | |||
80 | mtd->name); | 253 | mtd->name); |
81 | } | 254 | } |
82 | 255 | ||
256 | /* Caller should have set dev.parent to match the | ||
257 | * physical device. | ||
258 | */ | ||
259 | mtd->dev.type = &mtd_devtype; | ||
260 | mtd->dev.class = mtd_class; | ||
261 | mtd->dev.devt = MTD_DEVT(i); | ||
262 | dev_set_name(&mtd->dev, "mtd%d", i); | ||
263 | if (device_register(&mtd->dev) != 0) { | ||
264 | mtd_table[i] = NULL; | ||
265 | break; | ||
266 | } | ||
267 | |||
268 | if (MTD_DEVT(i)) | ||
269 | device_create(mtd_class, mtd->dev.parent, | ||
270 | MTD_DEVT(i) + 1, | ||
271 | NULL, "mtd%dro", i); | ||
272 | |||
83 | DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name); | 273 | DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name); |
84 | /* No need to get a refcount on the module containing | 274 | /* No need to get a refcount on the module containing |
85 | the notifier, since we hold the mtd_table_mutex */ | 275 | the notifier, since we hold the mtd_table_mutex */ |
@@ -124,6 +314,8 @@ int del_mtd_device (struct mtd_info *mtd) | |||
124 | } else { | 314 | } else { |
125 | struct mtd_notifier *not; | 315 | struct mtd_notifier *not; |
126 | 316 | ||
317 | device_unregister(&mtd->dev); | ||
318 | |||
127 | /* No need to get a refcount on the module containing | 319 | /* No need to get a refcount on the module containing |
128 | the notifier, since we hold the mtd_table_mutex */ | 320 | the notifier, since we hold the mtd_table_mutex */ |
129 | list_for_each_entry(not, &mtd_notifiers, list) | 321 | list_for_each_entry(not, &mtd_notifiers, list) |
@@ -393,28 +585,38 @@ done: | |||
393 | return ((count < begin+len-off) ? count : begin+len-off); | 585 | return ((count < begin+len-off) ? count : begin+len-off); |
394 | } | 586 | } |
395 | 587 | ||
588 | #endif /* CONFIG_PROC_FS */ | ||
589 | |||
396 | /*====================================================================*/ | 590 | /*====================================================================*/ |
397 | /* Init code */ | 591 | /* Init code */ |
398 | 592 | ||
399 | static int __init init_mtd(void) | 593 | static int __init init_mtd(void) |
400 | { | 594 | { |
595 | mtd_class = class_create(THIS_MODULE, "mtd"); | ||
596 | |||
597 | if (IS_ERR(mtd_class)) { | ||
598 | pr_err("Error creating mtd class.\n"); | ||
599 | return PTR_ERR(mtd_class); | ||
600 | } | ||
601 | #ifdef CONFIG_PROC_FS | ||
401 | if ((proc_mtd = create_proc_entry( "mtd", 0, NULL ))) | 602 | if ((proc_mtd = create_proc_entry( "mtd", 0, NULL ))) |
402 | proc_mtd->read_proc = mtd_read_proc; | 603 | proc_mtd->read_proc = mtd_read_proc; |
604 | #endif /* CONFIG_PROC_FS */ | ||
403 | return 0; | 605 | return 0; |
404 | } | 606 | } |
405 | 607 | ||
406 | static void __exit cleanup_mtd(void) | 608 | static void __exit cleanup_mtd(void) |
407 | { | 609 | { |
610 | #ifdef CONFIG_PROC_FS | ||
408 | if (proc_mtd) | 611 | if (proc_mtd) |
409 | remove_proc_entry( "mtd", NULL); | 612 | remove_proc_entry( "mtd", NULL); |
613 | #endif /* CONFIG_PROC_FS */ | ||
614 | class_destroy(mtd_class); | ||
410 | } | 615 | } |
411 | 616 | ||
412 | module_init(init_mtd); | 617 | module_init(init_mtd); |
413 | module_exit(cleanup_mtd); | 618 | module_exit(cleanup_mtd); |
414 | 619 | ||
415 | #endif /* CONFIG_PROC_FS */ | ||
416 | |||
417 | |||
418 | MODULE_LICENSE("GPL"); | 620 | MODULE_LICENSE("GPL"); |
419 | MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); | 621 | MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); |
420 | MODULE_DESCRIPTION("Core MTD registration and access routines"); | 622 | MODULE_DESCRIPTION("Core MTD registration and access routines"); |
diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c index 1a6b3beabe8d..1060337c06df 100644 --- a/drivers/mtd/mtdoops.c +++ b/drivers/mtd/mtdoops.c | |||
@@ -44,6 +44,7 @@ static struct mtdoops_context { | |||
44 | int oops_pages; | 44 | int oops_pages; |
45 | int nextpage; | 45 | int nextpage; |
46 | int nextcount; | 46 | int nextcount; |
47 | char *name; | ||
47 | 48 | ||
48 | void *oops_buf; | 49 | void *oops_buf; |
49 | 50 | ||
@@ -273,6 +274,9 @@ static void mtdoops_notify_add(struct mtd_info *mtd) | |||
273 | { | 274 | { |
274 | struct mtdoops_context *cxt = &oops_cxt; | 275 | struct mtdoops_context *cxt = &oops_cxt; |
275 | 276 | ||
277 | if (cxt->name && !strcmp(mtd->name, cxt->name)) | ||
278 | cxt->mtd_index = mtd->index; | ||
279 | |||
276 | if ((mtd->index != cxt->mtd_index) || cxt->mtd_index < 0) | 280 | if ((mtd->index != cxt->mtd_index) || cxt->mtd_index < 0) |
277 | return; | 281 | return; |
278 | 282 | ||
@@ -357,8 +361,10 @@ mtdoops_console_write(struct console *co, const char *s, unsigned int count) | |||
357 | spin_lock_irqsave(&cxt->writecount_lock, flags); | 361 | spin_lock_irqsave(&cxt->writecount_lock, flags); |
358 | 362 | ||
359 | /* Check ready status didn't change whilst waiting for the lock */ | 363 | /* Check ready status didn't change whilst waiting for the lock */ |
360 | if (!cxt->ready) | 364 | if (!cxt->ready) { |
365 | spin_unlock_irqrestore(&cxt->writecount_lock, flags); | ||
361 | return; | 366 | return; |
367 | } | ||
362 | 368 | ||
363 | if (cxt->writecount == 0) { | 369 | if (cxt->writecount == 0) { |
364 | u32 *stamp = cxt->oops_buf; | 370 | u32 *stamp = cxt->oops_buf; |
@@ -383,8 +389,12 @@ static int __init mtdoops_console_setup(struct console *co, char *options) | |||
383 | { | 389 | { |
384 | struct mtdoops_context *cxt = co->data; | 390 | struct mtdoops_context *cxt = co->data; |
385 | 391 | ||
386 | if (cxt->mtd_index != -1) | 392 | if (cxt->mtd_index != -1 || cxt->name) |
387 | return -EBUSY; | 393 | return -EBUSY; |
394 | if (options) { | ||
395 | cxt->name = kstrdup(options, GFP_KERNEL); | ||
396 | return 0; | ||
397 | } | ||
388 | if (co->index == -1) | 398 | if (co->index == -1) |
389 | return -EINVAL; | 399 | return -EINVAL; |
390 | 400 | ||
@@ -412,6 +422,7 @@ static int __init mtdoops_console_init(void) | |||
412 | 422 | ||
413 | cxt->mtd_index = -1; | 423 | cxt->mtd_index = -1; |
414 | cxt->oops_buf = vmalloc(OOPS_PAGE_SIZE); | 424 | cxt->oops_buf = vmalloc(OOPS_PAGE_SIZE); |
425 | spin_lock_init(&cxt->writecount_lock); | ||
415 | 426 | ||
416 | if (!cxt->oops_buf) { | 427 | if (!cxt->oops_buf) { |
417 | printk(KERN_ERR "Failed to allocate mtdoops buffer workspace\n"); | 428 | printk(KERN_ERR "Failed to allocate mtdoops buffer workspace\n"); |
@@ -432,6 +443,7 @@ static void __exit mtdoops_console_exit(void) | |||
432 | 443 | ||
433 | unregister_mtd_user(&mtdoops_notifier); | 444 | unregister_mtd_user(&mtdoops_notifier); |
434 | unregister_console(&mtdoops_console); | 445 | unregister_console(&mtdoops_console); |
446 | kfree(cxt->name); | ||
435 | vfree(cxt->oops_buf); | 447 | vfree(cxt->oops_buf); |
436 | } | 448 | } |
437 | 449 | ||
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index 144e6b613a77..29675edb44b4 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c | |||
@@ -48,8 +48,11 @@ static int part_read(struct mtd_info *mtd, loff_t from, size_t len, | |||
48 | size_t *retlen, u_char *buf) | 48 | size_t *retlen, u_char *buf) |
49 | { | 49 | { |
50 | struct mtd_part *part = PART(mtd); | 50 | struct mtd_part *part = PART(mtd); |
51 | struct mtd_ecc_stats stats; | ||
51 | int res; | 52 | int res; |
52 | 53 | ||
54 | stats = part->master->ecc_stats; | ||
55 | |||
53 | if (from >= mtd->size) | 56 | if (from >= mtd->size) |
54 | len = 0; | 57 | len = 0; |
55 | else if (from + len > mtd->size) | 58 | else if (from + len > mtd->size) |
@@ -58,9 +61,9 @@ static int part_read(struct mtd_info *mtd, loff_t from, size_t len, | |||
58 | len, retlen, buf); | 61 | len, retlen, buf); |
59 | if (unlikely(res)) { | 62 | if (unlikely(res)) { |
60 | if (res == -EUCLEAN) | 63 | if (res == -EUCLEAN) |
61 | mtd->ecc_stats.corrected++; | 64 | mtd->ecc_stats.corrected += part->master->ecc_stats.corrected - stats.corrected; |
62 | if (res == -EBADMSG) | 65 | if (res == -EBADMSG) |
63 | mtd->ecc_stats.failed++; | 66 | mtd->ecc_stats.failed += part->master->ecc_stats.failed - stats.failed; |
64 | } | 67 | } |
65 | return res; | 68 | return res; |
66 | } | 69 | } |
@@ -84,6 +87,18 @@ static void part_unpoint(struct mtd_info *mtd, loff_t from, size_t len) | |||
84 | part->master->unpoint(part->master, from + part->offset, len); | 87 | part->master->unpoint(part->master, from + part->offset, len); |
85 | } | 88 | } |
86 | 89 | ||
90 | static unsigned long part_get_unmapped_area(struct mtd_info *mtd, | ||
91 | unsigned long len, | ||
92 | unsigned long offset, | ||
93 | unsigned long flags) | ||
94 | { | ||
95 | struct mtd_part *part = PART(mtd); | ||
96 | |||
97 | offset += part->offset; | ||
98 | return part->master->get_unmapped_area(part->master, len, offset, | ||
99 | flags); | ||
100 | } | ||
101 | |||
87 | static int part_read_oob(struct mtd_info *mtd, loff_t from, | 102 | static int part_read_oob(struct mtd_info *mtd, loff_t from, |
88 | struct mtd_oob_ops *ops) | 103 | struct mtd_oob_ops *ops) |
89 | { | 104 | { |
@@ -342,6 +357,12 @@ static struct mtd_part *add_one_partition(struct mtd_info *master, | |||
342 | 357 | ||
343 | slave->mtd.name = part->name; | 358 | slave->mtd.name = part->name; |
344 | slave->mtd.owner = master->owner; | 359 | slave->mtd.owner = master->owner; |
360 | slave->mtd.backing_dev_info = master->backing_dev_info; | ||
361 | |||
362 | /* NOTE: we don't arrange MTDs as a tree; it'd be error-prone | ||
363 | * to have the same data be in two different partitions. | ||
364 | */ | ||
365 | slave->mtd.dev.parent = master->dev.parent; | ||
345 | 366 | ||
346 | slave->mtd.read = part_read; | 367 | slave->mtd.read = part_read; |
347 | slave->mtd.write = part_write; | 368 | slave->mtd.write = part_write; |
@@ -354,6 +375,8 @@ static struct mtd_part *add_one_partition(struct mtd_info *master, | |||
354 | slave->mtd.unpoint = part_unpoint; | 375 | slave->mtd.unpoint = part_unpoint; |
355 | } | 376 | } |
356 | 377 | ||
378 | if (master->get_unmapped_area) | ||
379 | slave->mtd.get_unmapped_area = part_get_unmapped_area; | ||
357 | if (master->read_oob) | 380 | if (master->read_oob) |
358 | slave->mtd.read_oob = part_read_oob; | 381 | slave->mtd.read_oob = part_read_oob; |
359 | if (master->write_oob) | 382 | if (master->write_oob) |
@@ -493,7 +516,9 @@ out_register: | |||
493 | * This function, given a master MTD object and a partition table, creates | 516 | * This function, given a master MTD object and a partition table, creates |
494 | * and registers slave MTD objects which are bound to the master according to | 517 | * and registers slave MTD objects which are bound to the master according to |
495 | * the partition definitions. | 518 | * the partition definitions. |
496 | * (Q: should we register the master MTD object as well?) | 519 | * |
520 | * We don't register the master, or expect the caller to have done so, | ||
521 | * for reasons of data integrity. | ||
497 | */ | 522 | */ |
498 | 523 | ||
499 | int add_mtd_partitions(struct mtd_info *master, | 524 | int add_mtd_partitions(struct mtd_info *master, |
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig index 2ff88791cebc..890936d0275e 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig | |||
@@ -334,7 +334,7 @@ config MTD_NAND_ATMEL_ECC_NONE | |||
334 | endchoice | 334 | endchoice |
335 | 335 | ||
336 | config MTD_NAND_PXA3xx | 336 | config MTD_NAND_PXA3xx |
337 | bool "Support for NAND flash devices on PXA3xx" | 337 | tristate "Support for NAND flash devices on PXA3xx" |
338 | depends on MTD_NAND && PXA3xx | 338 | depends on MTD_NAND && PXA3xx |
339 | help | 339 | help |
340 | This enables the driver for the NAND flash device found on | 340 | This enables the driver for the NAND flash device found on |
@@ -427,4 +427,23 @@ config MTD_NAND_SH_FLCTL | |||
427 | Several Renesas SuperH CPU has FLCTL. This option enables support | 427 | Several Renesas SuperH CPU has FLCTL. This option enables support |
428 | for NAND Flash using FLCTL. This driver support SH7723. | 428 | for NAND Flash using FLCTL. This driver support SH7723. |
429 | 429 | ||
430 | config MTD_NAND_DAVINCI | ||
431 | tristate "Support NAND on DaVinci SoC" | ||
432 | depends on ARCH_DAVINCI | ||
433 | help | ||
434 | Enable the driver for NAND flash chips on Texas Instruments | ||
435 | DaVinci processors. | ||
436 | |||
437 | config MTD_NAND_TXX9NDFMC | ||
438 | tristate "NAND Flash support for TXx9 SoC" | ||
439 | depends on SOC_TX4938 || SOC_TX4939 | ||
440 | help | ||
441 | This enables the NAND flash controller on the TXx9 SoCs. | ||
442 | |||
443 | config MTD_NAND_SOCRATES | ||
444 | tristate "Support for NAND on Socrates board" | ||
445 | depends on MTD_NAND && SOCRATES | ||
446 | help | ||
447 | Enables support for NAND Flash chips wired onto Socrates board. | ||
448 | |||
430 | endif # MTD_NAND | 449 | endif # MTD_NAND |
diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile index b661586afbfc..d33860ac42c3 100644 --- a/drivers/mtd/nand/Makefile +++ b/drivers/mtd/nand/Makefile | |||
@@ -14,6 +14,7 @@ obj-$(CONFIG_MTD_NAND_AU1550) += au1550nd.o | |||
14 | obj-$(CONFIG_MTD_NAND_BF5XX) += bf5xx_nand.o | 14 | obj-$(CONFIG_MTD_NAND_BF5XX) += bf5xx_nand.o |
15 | obj-$(CONFIG_MTD_NAND_PPCHAMELEONEVB) += ppchameleonevb.o | 15 | obj-$(CONFIG_MTD_NAND_PPCHAMELEONEVB) += ppchameleonevb.o |
16 | obj-$(CONFIG_MTD_NAND_S3C2410) += s3c2410.o | 16 | obj-$(CONFIG_MTD_NAND_S3C2410) += s3c2410.o |
17 | obj-$(CONFIG_MTD_NAND_DAVINCI) += davinci_nand.o | ||
17 | obj-$(CONFIG_MTD_NAND_DISKONCHIP) += diskonchip.o | 18 | obj-$(CONFIG_MTD_NAND_DISKONCHIP) += diskonchip.o |
18 | obj-$(CONFIG_MTD_NAND_H1900) += h1910.o | 19 | obj-$(CONFIG_MTD_NAND_H1900) += h1910.o |
19 | obj-$(CONFIG_MTD_NAND_RTC_FROM4) += rtc_from4.o | 20 | obj-$(CONFIG_MTD_NAND_RTC_FROM4) += rtc_from4.o |
@@ -36,5 +37,7 @@ obj-$(CONFIG_MTD_NAND_FSL_ELBC) += fsl_elbc_nand.o | |||
36 | obj-$(CONFIG_MTD_NAND_FSL_UPM) += fsl_upm.o | 37 | obj-$(CONFIG_MTD_NAND_FSL_UPM) += fsl_upm.o |
37 | obj-$(CONFIG_MTD_NAND_SH_FLCTL) += sh_flctl.o | 38 | obj-$(CONFIG_MTD_NAND_SH_FLCTL) += sh_flctl.o |
38 | obj-$(CONFIG_MTD_NAND_MXC) += mxc_nand.o | 39 | obj-$(CONFIG_MTD_NAND_MXC) += mxc_nand.o |
40 | obj-$(CONFIG_MTD_NAND_SOCRATES) += socrates_nand.o | ||
41 | obj-$(CONFIG_MTD_NAND_TXX9NDFMC) += txx9ndfmc.o | ||
39 | 42 | ||
40 | nand-objs := nand_base.o nand_bbt.o | 43 | nand-objs := nand_base.o nand_bbt.o |
diff --git a/drivers/mtd/nand/bf5xx_nand.c b/drivers/mtd/nand/bf5xx_nand.c index 9af2a2cc1153..4c2a67ca801e 100644 --- a/drivers/mtd/nand/bf5xx_nand.c +++ b/drivers/mtd/nand/bf5xx_nand.c | |||
@@ -552,7 +552,6 @@ static void bf5xx_nand_dma_write_buf(struct mtd_info *mtd, | |||
552 | static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info) | 552 | static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info) |
553 | { | 553 | { |
554 | int ret; | 554 | int ret; |
555 | unsigned short val; | ||
556 | 555 | ||
557 | /* Do not use dma */ | 556 | /* Do not use dma */ |
558 | if (!hardware_ecc) | 557 | if (!hardware_ecc) |
@@ -560,13 +559,6 @@ static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info) | |||
560 | 559 | ||
561 | init_completion(&info->dma_completion); | 560 | init_completion(&info->dma_completion); |
562 | 561 | ||
563 | #ifdef CONFIG_BF54x | ||
564 | /* Setup DMAC1 channel mux for NFC which shared with SDH */ | ||
565 | val = bfin_read_DMAC1_PERIMUX(); | ||
566 | val &= 0xFFFE; | ||
567 | bfin_write_DMAC1_PERIMUX(val); | ||
568 | SSYNC(); | ||
569 | #endif | ||
570 | /* Request NFC DMA channel */ | 562 | /* Request NFC DMA channel */ |
571 | ret = request_dma(CH_NFC, "BF5XX NFC driver"); | 563 | ret = request_dma(CH_NFC, "BF5XX NFC driver"); |
572 | if (ret < 0) { | 564 | if (ret < 0) { |
@@ -574,7 +566,13 @@ static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info) | |||
574 | return ret; | 566 | return ret; |
575 | } | 567 | } |
576 | 568 | ||
577 | set_dma_callback(CH_NFC, (void *) bf5xx_nand_dma_irq, (void *) info); | 569 | #ifdef CONFIG_BF54x |
570 | /* Setup DMAC1 channel mux for NFC which shared with SDH */ | ||
571 | bfin_write_DMAC1_PERIMUX(bfin_read_DMAC1_PERIMUX() & ~1); | ||
572 | SSYNC(); | ||
573 | #endif | ||
574 | |||
575 | set_dma_callback(CH_NFC, bf5xx_nand_dma_irq, info); | ||
578 | 576 | ||
579 | /* Turn off the DMA channel first */ | 577 | /* Turn off the DMA channel first */ |
580 | disable_dma(CH_NFC); | 578 | disable_dma(CH_NFC); |
@@ -632,7 +630,7 @@ static int bf5xx_nand_hw_init(struct bf5xx_nand_info *info) | |||
632 | /* | 630 | /* |
633 | * Device management interface | 631 | * Device management interface |
634 | */ | 632 | */ |
635 | static int bf5xx_nand_add_partition(struct bf5xx_nand_info *info) | 633 | static int __devinit bf5xx_nand_add_partition(struct bf5xx_nand_info *info) |
636 | { | 634 | { |
637 | struct mtd_info *mtd = &info->mtd; | 635 | struct mtd_info *mtd = &info->mtd; |
638 | 636 | ||
diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c index 22a6b2e50e91..7c5b257ce8e4 100644 --- a/drivers/mtd/nand/cafe_nand.c +++ b/drivers/mtd/nand/cafe_nand.c | |||
@@ -654,6 +654,7 @@ static int __devinit cafe_nand_probe(struct pci_dev *pdev, | |||
654 | } | 654 | } |
655 | cafe = (void *)(&mtd[1]); | 655 | cafe = (void *)(&mtd[1]); |
656 | 656 | ||
657 | mtd->dev.parent = &pdev->dev; | ||
657 | mtd->priv = cafe; | 658 | mtd->priv = cafe; |
658 | mtd->owner = THIS_MODULE; | 659 | mtd->owner = THIS_MODULE; |
659 | 660 | ||
diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c new file mode 100644 index 000000000000..0119220de7d0 --- /dev/null +++ b/drivers/mtd/nand/davinci_nand.c | |||
@@ -0,0 +1,570 @@ | |||
1 | /* | ||
2 | * davinci_nand.c - NAND Flash Driver for DaVinci family chips | ||
3 | * | ||
4 | * Copyright © 2006 Texas Instruments. | ||
5 | * | ||
6 | * Port to 2.6.23 Copyright © 2008 by: | ||
7 | * Sander Huijsen <Shuijsen@optelecom-nkf.com> | ||
8 | * Troy Kisky <troy.kisky@boundarydevices.com> | ||
9 | * Dirk Behme <Dirk.Behme@gmail.com> | ||
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, | ||
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
19 | * GNU 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., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
24 | */ | ||
25 | |||
26 | #include <linux/kernel.h> | ||
27 | #include <linux/init.h> | ||
28 | #include <linux/module.h> | ||
29 | #include <linux/platform_device.h> | ||
30 | #include <linux/err.h> | ||
31 | #include <linux/clk.h> | ||
32 | #include <linux/io.h> | ||
33 | #include <linux/mtd/nand.h> | ||
34 | #include <linux/mtd/partitions.h> | ||
35 | |||
36 | #include <mach/nand.h> | ||
37 | |||
38 | #include <asm/mach-types.h> | ||
39 | |||
40 | |||
41 | /* | ||
42 | * This is a device driver for the NAND flash controller found on the | ||
43 | * various DaVinci family chips. It handles up to four SoC chipselects, | ||
44 | * and some flavors of secondary chipselect (e.g. based on A12) as used | ||
45 | * with multichip packages. | ||
46 | * | ||
47 | * The 1-bit ECC hardware is supported, but not yet the newer 4-bit ECC | ||
48 | * available on chips like the DM355 and OMAP-L137 and needed with the | ||
49 | * more error-prone MLC NAND chips. | ||
50 | * | ||
51 | * This driver assumes EM_WAIT connects all the NAND devices' RDY/nBUSY | ||
52 | * outputs in a "wire-AND" configuration, with no per-chip signals. | ||
53 | */ | ||
54 | struct davinci_nand_info { | ||
55 | struct mtd_info mtd; | ||
56 | struct nand_chip chip; | ||
57 | |||
58 | struct device *dev; | ||
59 | struct clk *clk; | ||
60 | bool partitioned; | ||
61 | |||
62 | void __iomem *base; | ||
63 | void __iomem *vaddr; | ||
64 | |||
65 | uint32_t ioaddr; | ||
66 | uint32_t current_cs; | ||
67 | |||
68 | uint32_t mask_chipsel; | ||
69 | uint32_t mask_ale; | ||
70 | uint32_t mask_cle; | ||
71 | |||
72 | uint32_t core_chipsel; | ||
73 | }; | ||
74 | |||
75 | static DEFINE_SPINLOCK(davinci_nand_lock); | ||
76 | |||
77 | #define to_davinci_nand(m) container_of(m, struct davinci_nand_info, mtd) | ||
78 | |||
79 | |||
80 | static inline unsigned int davinci_nand_readl(struct davinci_nand_info *info, | ||
81 | int offset) | ||
82 | { | ||
83 | return __raw_readl(info->base + offset); | ||
84 | } | ||
85 | |||
86 | static inline void davinci_nand_writel(struct davinci_nand_info *info, | ||
87 | int offset, unsigned long value) | ||
88 | { | ||
89 | __raw_writel(value, info->base + offset); | ||
90 | } | ||
91 | |||
92 | /*----------------------------------------------------------------------*/ | ||
93 | |||
94 | /* | ||
95 | * Access to hardware control lines: ALE, CLE, secondary chipselect. | ||
96 | */ | ||
97 | |||
98 | static void nand_davinci_hwcontrol(struct mtd_info *mtd, int cmd, | ||
99 | unsigned int ctrl) | ||
100 | { | ||
101 | struct davinci_nand_info *info = to_davinci_nand(mtd); | ||
102 | uint32_t addr = info->current_cs; | ||
103 | struct nand_chip *nand = mtd->priv; | ||
104 | |||
105 | /* Did the control lines change? */ | ||
106 | if (ctrl & NAND_CTRL_CHANGE) { | ||
107 | if ((ctrl & NAND_CTRL_CLE) == NAND_CTRL_CLE) | ||
108 | addr |= info->mask_cle; | ||
109 | else if ((ctrl & NAND_CTRL_ALE) == NAND_CTRL_ALE) | ||
110 | addr |= info->mask_ale; | ||
111 | |||
112 | nand->IO_ADDR_W = (void __iomem __force *)addr; | ||
113 | } | ||
114 | |||
115 | if (cmd != NAND_CMD_NONE) | ||
116 | iowrite8(cmd, nand->IO_ADDR_W); | ||
117 | } | ||
118 | |||
119 | static void nand_davinci_select_chip(struct mtd_info *mtd, int chip) | ||
120 | { | ||
121 | struct davinci_nand_info *info = to_davinci_nand(mtd); | ||
122 | uint32_t addr = info->ioaddr; | ||
123 | |||
124 | /* maybe kick in a second chipselect */ | ||
125 | if (chip > 0) | ||
126 | addr |= info->mask_chipsel; | ||
127 | info->current_cs = addr; | ||
128 | |||
129 | info->chip.IO_ADDR_W = (void __iomem __force *)addr; | ||
130 | info->chip.IO_ADDR_R = info->chip.IO_ADDR_W; | ||
131 | } | ||
132 | |||
133 | /*----------------------------------------------------------------------*/ | ||
134 | |||
135 | /* | ||
136 | * 1-bit hardware ECC ... context maintained for each core chipselect | ||
137 | */ | ||
138 | |||
139 | static inline uint32_t nand_davinci_readecc_1bit(struct mtd_info *mtd) | ||
140 | { | ||
141 | struct davinci_nand_info *info = to_davinci_nand(mtd); | ||
142 | |||
143 | return davinci_nand_readl(info, NANDF1ECC_OFFSET | ||
144 | + 4 * info->core_chipsel); | ||
145 | } | ||
146 | |||
147 | static void nand_davinci_hwctl_1bit(struct mtd_info *mtd, int mode) | ||
148 | { | ||
149 | struct davinci_nand_info *info; | ||
150 | uint32_t nandcfr; | ||
151 | unsigned long flags; | ||
152 | |||
153 | info = to_davinci_nand(mtd); | ||
154 | |||
155 | /* Reset ECC hardware */ | ||
156 | nand_davinci_readecc_1bit(mtd); | ||
157 | |||
158 | spin_lock_irqsave(&davinci_nand_lock, flags); | ||
159 | |||
160 | /* Restart ECC hardware */ | ||
161 | nandcfr = davinci_nand_readl(info, NANDFCR_OFFSET); | ||
162 | nandcfr |= BIT(8 + info->core_chipsel); | ||
163 | davinci_nand_writel(info, NANDFCR_OFFSET, nandcfr); | ||
164 | |||
165 | spin_unlock_irqrestore(&davinci_nand_lock, flags); | ||
166 | } | ||
167 | |||
168 | /* | ||
169 | * Read hardware ECC value and pack into three bytes | ||
170 | */ | ||
171 | static int nand_davinci_calculate_1bit(struct mtd_info *mtd, | ||
172 | const u_char *dat, u_char *ecc_code) | ||
173 | { | ||
174 | unsigned int ecc_val = nand_davinci_readecc_1bit(mtd); | ||
175 | unsigned int ecc24 = (ecc_val & 0x0fff) | ((ecc_val & 0x0fff0000) >> 4); | ||
176 | |||
177 | /* invert so that erased block ecc is correct */ | ||
178 | ecc24 = ~ecc24; | ||
179 | ecc_code[0] = (u_char)(ecc24); | ||
180 | ecc_code[1] = (u_char)(ecc24 >> 8); | ||
181 | ecc_code[2] = (u_char)(ecc24 >> 16); | ||
182 | |||
183 | return 0; | ||
184 | } | ||
185 | |||
186 | static int nand_davinci_correct_1bit(struct mtd_info *mtd, u_char *dat, | ||
187 | u_char *read_ecc, u_char *calc_ecc) | ||
188 | { | ||
189 | struct nand_chip *chip = mtd->priv; | ||
190 | uint32_t eccNand = read_ecc[0] | (read_ecc[1] << 8) | | ||
191 | (read_ecc[2] << 16); | ||
192 | uint32_t eccCalc = calc_ecc[0] | (calc_ecc[1] << 8) | | ||
193 | (calc_ecc[2] << 16); | ||
194 | uint32_t diff = eccCalc ^ eccNand; | ||
195 | |||
196 | if (diff) { | ||
197 | if ((((diff >> 12) ^ diff) & 0xfff) == 0xfff) { | ||
198 | /* Correctable error */ | ||
199 | if ((diff >> (12 + 3)) < chip->ecc.size) { | ||
200 | dat[diff >> (12 + 3)] ^= BIT((diff >> 12) & 7); | ||
201 | return 1; | ||
202 | } else { | ||
203 | return -1; | ||
204 | } | ||
205 | } else if (!(diff & (diff - 1))) { | ||
206 | /* Single bit ECC error in the ECC itself, | ||
207 | * nothing to fix */ | ||
208 | return 1; | ||
209 | } else { | ||
210 | /* Uncorrectable error */ | ||
211 | return -1; | ||
212 | } | ||
213 | |||
214 | } | ||
215 | return 0; | ||
216 | } | ||
217 | |||
218 | /*----------------------------------------------------------------------*/ | ||
219 | |||
220 | /* | ||
221 | * NOTE: NAND boot requires ALE == EM_A[1], CLE == EM_A[2], so that's | ||
222 | * how these chips are normally wired. This translates to both 8 and 16 | ||
223 | * bit busses using ALE == BIT(3) in byte addresses, and CLE == BIT(4). | ||
224 | * | ||
225 | * For now we assume that configuration, or any other one which ignores | ||
226 | * the two LSBs for NAND access ... so we can issue 32-bit reads/writes | ||
227 | * and have that transparently morphed into multiple NAND operations. | ||
228 | */ | ||
229 | static void nand_davinci_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) | ||
230 | { | ||
231 | struct nand_chip *chip = mtd->priv; | ||
232 | |||
233 | if ((0x03 & ((unsigned)buf)) == 0 && (0x03 & len) == 0) | ||
234 | ioread32_rep(chip->IO_ADDR_R, buf, len >> 2); | ||
235 | else if ((0x01 & ((unsigned)buf)) == 0 && (0x01 & len) == 0) | ||
236 | ioread16_rep(chip->IO_ADDR_R, buf, len >> 1); | ||
237 | else | ||
238 | ioread8_rep(chip->IO_ADDR_R, buf, len); | ||
239 | } | ||
240 | |||
241 | static void nand_davinci_write_buf(struct mtd_info *mtd, | ||
242 | const uint8_t *buf, int len) | ||
243 | { | ||
244 | struct nand_chip *chip = mtd->priv; | ||
245 | |||
246 | if ((0x03 & ((unsigned)buf)) == 0 && (0x03 & len) == 0) | ||
247 | iowrite32_rep(chip->IO_ADDR_R, buf, len >> 2); | ||
248 | else if ((0x01 & ((unsigned)buf)) == 0 && (0x01 & len) == 0) | ||
249 | iowrite16_rep(chip->IO_ADDR_R, buf, len >> 1); | ||
250 | else | ||
251 | iowrite8_rep(chip->IO_ADDR_R, buf, len); | ||
252 | } | ||
253 | |||
254 | /* | ||
255 | * Check hardware register for wait status. Returns 1 if device is ready, | ||
256 | * 0 if it is still busy. | ||
257 | */ | ||
258 | static int nand_davinci_dev_ready(struct mtd_info *mtd) | ||
259 | { | ||
260 | struct davinci_nand_info *info = to_davinci_nand(mtd); | ||
261 | |||
262 | return davinci_nand_readl(info, NANDFSR_OFFSET) & BIT(0); | ||
263 | } | ||
264 | |||
265 | static void __init nand_dm6446evm_flash_init(struct davinci_nand_info *info) | ||
266 | { | ||
267 | uint32_t regval, a1cr; | ||
268 | |||
269 | /* | ||
270 | * NAND FLASH timings @ PLL1 == 459 MHz | ||
271 | * - AEMIF.CLK freq = PLL1/6 = 459/6 = 76.5 MHz | ||
272 | * - AEMIF.CLK period = 1/76.5 MHz = 13.1 ns | ||
273 | */ | ||
274 | regval = 0 | ||
275 | | (0 << 31) /* selectStrobe */ | ||
276 | | (0 << 30) /* extWait (never with NAND) */ | ||
277 | | (1 << 26) /* writeSetup 10 ns */ | ||
278 | | (3 << 20) /* writeStrobe 40 ns */ | ||
279 | | (1 << 17) /* writeHold 10 ns */ | ||
280 | | (0 << 13) /* readSetup 10 ns */ | ||
281 | | (3 << 7) /* readStrobe 60 ns */ | ||
282 | | (0 << 4) /* readHold 10 ns */ | ||
283 | | (3 << 2) /* turnAround ?? ns */ | ||
284 | | (0 << 0) /* asyncSize 8-bit bus */ | ||
285 | ; | ||
286 | a1cr = davinci_nand_readl(info, A1CR_OFFSET); | ||
287 | if (a1cr != regval) { | ||
288 | dev_dbg(info->dev, "Warning: NAND config: Set A1CR " \ | ||
289 | "reg to 0x%08x, was 0x%08x, should be done by " \ | ||
290 | "bootloader.\n", regval, a1cr); | ||
291 | davinci_nand_writel(info, A1CR_OFFSET, regval); | ||
292 | } | ||
293 | } | ||
294 | |||
295 | /*----------------------------------------------------------------------*/ | ||
296 | |||
297 | static int __init nand_davinci_probe(struct platform_device *pdev) | ||
298 | { | ||
299 | struct davinci_nand_pdata *pdata = pdev->dev.platform_data; | ||
300 | struct davinci_nand_info *info; | ||
301 | struct resource *res1; | ||
302 | struct resource *res2; | ||
303 | void __iomem *vaddr; | ||
304 | void __iomem *base; | ||
305 | int ret; | ||
306 | uint32_t val; | ||
307 | nand_ecc_modes_t ecc_mode; | ||
308 | |||
309 | /* which external chipselect will we be managing? */ | ||
310 | if (pdev->id < 0 || pdev->id > 3) | ||
311 | return -ENODEV; | ||
312 | |||
313 | info = kzalloc(sizeof(*info), GFP_KERNEL); | ||
314 | if (!info) { | ||
315 | dev_err(&pdev->dev, "unable to allocate memory\n"); | ||
316 | ret = -ENOMEM; | ||
317 | goto err_nomem; | ||
318 | } | ||
319 | |||
320 | platform_set_drvdata(pdev, info); | ||
321 | |||
322 | res1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
323 | res2 = platform_get_resource(pdev, IORESOURCE_MEM, 1); | ||
324 | if (!res1 || !res2) { | ||
325 | dev_err(&pdev->dev, "resource missing\n"); | ||
326 | ret = -EINVAL; | ||
327 | goto err_nomem; | ||
328 | } | ||
329 | |||
330 | vaddr = ioremap(res1->start, res1->end - res1->start); | ||
331 | base = ioremap(res2->start, res2->end - res2->start); | ||
332 | if (!vaddr || !base) { | ||
333 | dev_err(&pdev->dev, "ioremap failed\n"); | ||
334 | ret = -EINVAL; | ||
335 | goto err_ioremap; | ||
336 | } | ||
337 | |||
338 | info->dev = &pdev->dev; | ||
339 | info->base = base; | ||
340 | info->vaddr = vaddr; | ||
341 | |||
342 | info->mtd.priv = &info->chip; | ||
343 | info->mtd.name = dev_name(&pdev->dev); | ||
344 | info->mtd.owner = THIS_MODULE; | ||
345 | |||
346 | info->mtd.dev.parent = &pdev->dev; | ||
347 | |||
348 | info->chip.IO_ADDR_R = vaddr; | ||
349 | info->chip.IO_ADDR_W = vaddr; | ||
350 | info->chip.chip_delay = 0; | ||
351 | info->chip.select_chip = nand_davinci_select_chip; | ||
352 | |||
353 | /* options such as NAND_USE_FLASH_BBT or 16-bit widths */ | ||
354 | info->chip.options = pdata ? pdata->options : 0; | ||
355 | |||
356 | info->ioaddr = (uint32_t __force) vaddr; | ||
357 | |||
358 | info->current_cs = info->ioaddr; | ||
359 | info->core_chipsel = pdev->id; | ||
360 | info->mask_chipsel = pdata->mask_chipsel; | ||
361 | |||
362 | /* use nandboot-capable ALE/CLE masks by default */ | ||
363 | if (pdata && pdata->mask_ale) | ||
364 | info->mask_ale = pdata->mask_cle; | ||
365 | else | ||
366 | info->mask_ale = MASK_ALE; | ||
367 | if (pdata && pdata->mask_cle) | ||
368 | info->mask_cle = pdata->mask_cle; | ||
369 | else | ||
370 | info->mask_cle = MASK_CLE; | ||
371 | |||
372 | /* Set address of hardware control function */ | ||
373 | info->chip.cmd_ctrl = nand_davinci_hwcontrol; | ||
374 | info->chip.dev_ready = nand_davinci_dev_ready; | ||
375 | |||
376 | /* Speed up buffer I/O */ | ||
377 | info->chip.read_buf = nand_davinci_read_buf; | ||
378 | info->chip.write_buf = nand_davinci_write_buf; | ||
379 | |||
380 | /* use board-specific ECC config; else, the best available */ | ||
381 | if (pdata) | ||
382 | ecc_mode = pdata->ecc_mode; | ||
383 | else | ||
384 | ecc_mode = NAND_ECC_HW; | ||
385 | |||
386 | switch (ecc_mode) { | ||
387 | case NAND_ECC_NONE: | ||
388 | case NAND_ECC_SOFT: | ||
389 | break; | ||
390 | case NAND_ECC_HW: | ||
391 | info->chip.ecc.calculate = nand_davinci_calculate_1bit; | ||
392 | info->chip.ecc.correct = nand_davinci_correct_1bit; | ||
393 | info->chip.ecc.hwctl = nand_davinci_hwctl_1bit; | ||
394 | info->chip.ecc.size = 512; | ||
395 | info->chip.ecc.bytes = 3; | ||
396 | break; | ||
397 | case NAND_ECC_HW_SYNDROME: | ||
398 | /* FIXME implement */ | ||
399 | info->chip.ecc.size = 512; | ||
400 | info->chip.ecc.bytes = 10; | ||
401 | |||
402 | dev_warn(&pdev->dev, "4-bit ECC nyet supported\n"); | ||
403 | /* FALL THROUGH */ | ||
404 | default: | ||
405 | ret = -EINVAL; | ||
406 | goto err_ecc; | ||
407 | } | ||
408 | info->chip.ecc.mode = ecc_mode; | ||
409 | |||
410 | info->clk = clk_get(&pdev->dev, "AEMIFCLK"); | ||
411 | if (IS_ERR(info->clk)) { | ||
412 | ret = PTR_ERR(info->clk); | ||
413 | dev_dbg(&pdev->dev, "unable to get AEMIFCLK, err %d\n", ret); | ||
414 | goto err_clk; | ||
415 | } | ||
416 | |||
417 | ret = clk_enable(info->clk); | ||
418 | if (ret < 0) { | ||
419 | dev_dbg(&pdev->dev, "unable to enable AEMIFCLK, err %d\n", ret); | ||
420 | goto err_clk_enable; | ||
421 | } | ||
422 | |||
423 | /* EMIF timings should normally be set by the boot loader, | ||
424 | * especially after boot-from-NAND. The *only* reason to | ||
425 | * have this special casing for the DM6446 EVM is to work | ||
426 | * with boot-from-NOR ... with CS0 manually re-jumpered | ||
427 | * (after startup) so it addresses the NAND flash, not NOR. | ||
428 | * Even for dev boards, that's unusually rude... | ||
429 | */ | ||
430 | if (machine_is_davinci_evm()) | ||
431 | nand_dm6446evm_flash_init(info); | ||
432 | |||
433 | spin_lock_irq(&davinci_nand_lock); | ||
434 | |||
435 | /* put CSxNAND into NAND mode */ | ||
436 | val = davinci_nand_readl(info, NANDFCR_OFFSET); | ||
437 | val |= BIT(info->core_chipsel); | ||
438 | davinci_nand_writel(info, NANDFCR_OFFSET, val); | ||
439 | |||
440 | spin_unlock_irq(&davinci_nand_lock); | ||
441 | |||
442 | /* Scan to find existence of the device(s) */ | ||
443 | ret = nand_scan(&info->mtd, pdata->mask_chipsel ? 2 : 1); | ||
444 | if (ret < 0) { | ||
445 | dev_dbg(&pdev->dev, "no NAND chip(s) found\n"); | ||
446 | goto err_scan; | ||
447 | } | ||
448 | |||
449 | if (mtd_has_partitions()) { | ||
450 | struct mtd_partition *mtd_parts = NULL; | ||
451 | int mtd_parts_nb = 0; | ||
452 | |||
453 | if (mtd_has_cmdlinepart()) { | ||
454 | static const char *probes[] __initconst = | ||
455 | { "cmdlinepart", NULL }; | ||
456 | |||
457 | const char *master_name; | ||
458 | |||
459 | /* Set info->mtd.name = 0 temporarily */ | ||
460 | master_name = info->mtd.name; | ||
461 | info->mtd.name = (char *)0; | ||
462 | |||
463 | /* info->mtd.name == 0, means: don't bother checking | ||
464 | <mtd-id> */ | ||
465 | mtd_parts_nb = parse_mtd_partitions(&info->mtd, probes, | ||
466 | &mtd_parts, 0); | ||
467 | |||
468 | /* Restore info->mtd.name */ | ||
469 | info->mtd.name = master_name; | ||
470 | } | ||
471 | |||
472 | if (mtd_parts_nb <= 0 && pdata) { | ||
473 | mtd_parts = pdata->parts; | ||
474 | mtd_parts_nb = pdata->nr_parts; | ||
475 | } | ||
476 | |||
477 | /* Register any partitions */ | ||
478 | if (mtd_parts_nb > 0) { | ||
479 | ret = add_mtd_partitions(&info->mtd, | ||
480 | mtd_parts, mtd_parts_nb); | ||
481 | if (ret == 0) | ||
482 | info->partitioned = true; | ||
483 | } | ||
484 | |||
485 | } else if (pdata && pdata->nr_parts) { | ||
486 | dev_warn(&pdev->dev, "ignoring %d default partitions on %s\n", | ||
487 | pdata->nr_parts, info->mtd.name); | ||
488 | } | ||
489 | |||
490 | /* If there's no partition info, just package the whole chip | ||
491 | * as a single MTD device. | ||
492 | */ | ||
493 | if (!info->partitioned) | ||
494 | ret = add_mtd_device(&info->mtd) ? -ENODEV : 0; | ||
495 | |||
496 | if (ret < 0) | ||
497 | goto err_scan; | ||
498 | |||
499 | val = davinci_nand_readl(info, NRCSR_OFFSET); | ||
500 | dev_info(&pdev->dev, "controller rev. %d.%d\n", | ||
501 | (val >> 8) & 0xff, val & 0xff); | ||
502 | |||
503 | return 0; | ||
504 | |||
505 | err_scan: | ||
506 | clk_disable(info->clk); | ||
507 | |||
508 | err_clk_enable: | ||
509 | clk_put(info->clk); | ||
510 | |||
511 | err_ecc: | ||
512 | err_clk: | ||
513 | err_ioremap: | ||
514 | if (base) | ||
515 | iounmap(base); | ||
516 | if (vaddr) | ||
517 | iounmap(vaddr); | ||
518 | |||
519 | err_nomem: | ||
520 | kfree(info); | ||
521 | return ret; | ||
522 | } | ||
523 | |||
524 | static int __exit nand_davinci_remove(struct platform_device *pdev) | ||
525 | { | ||
526 | struct davinci_nand_info *info = platform_get_drvdata(pdev); | ||
527 | int status; | ||
528 | |||
529 | if (mtd_has_partitions() && info->partitioned) | ||
530 | status = del_mtd_partitions(&info->mtd); | ||
531 | else | ||
532 | status = del_mtd_device(&info->mtd); | ||
533 | |||
534 | iounmap(info->base); | ||
535 | iounmap(info->vaddr); | ||
536 | |||
537 | nand_release(&info->mtd); | ||
538 | |||
539 | clk_disable(info->clk); | ||
540 | clk_put(info->clk); | ||
541 | |||
542 | kfree(info); | ||
543 | |||
544 | return 0; | ||
545 | } | ||
546 | |||
547 | static struct platform_driver nand_davinci_driver = { | ||
548 | .remove = __exit_p(nand_davinci_remove), | ||
549 | .driver = { | ||
550 | .name = "davinci_nand", | ||
551 | }, | ||
552 | }; | ||
553 | MODULE_ALIAS("platform:davinci_nand"); | ||
554 | |||
555 | static int __init nand_davinci_init(void) | ||
556 | { | ||
557 | return platform_driver_probe(&nand_davinci_driver, nand_davinci_probe); | ||
558 | } | ||
559 | module_init(nand_davinci_init); | ||
560 | |||
561 | static void __exit nand_davinci_exit(void) | ||
562 | { | ||
563 | platform_driver_unregister(&nand_davinci_driver); | ||
564 | } | ||
565 | module_exit(nand_davinci_exit); | ||
566 | |||
567 | MODULE_LICENSE("GPL"); | ||
568 | MODULE_AUTHOR("Texas Instruments"); | ||
569 | MODULE_DESCRIPTION("Davinci NAND flash driver"); | ||
570 | |||
diff --git a/drivers/mtd/nand/fsl_upm.c b/drivers/mtd/nand/fsl_upm.c index 7815a404a632..d120cd8d7267 100644 --- a/drivers/mtd/nand/fsl_upm.c +++ b/drivers/mtd/nand/fsl_upm.c | |||
@@ -23,6 +23,10 @@ | |||
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <asm/fsl_lbc.h> | 24 | #include <asm/fsl_lbc.h> |
25 | 25 | ||
26 | #define FSL_UPM_WAIT_RUN_PATTERN 0x1 | ||
27 | #define FSL_UPM_WAIT_WRITE_BYTE 0x2 | ||
28 | #define FSL_UPM_WAIT_WRITE_BUFFER 0x4 | ||
29 | |||
26 | struct fsl_upm_nand { | 30 | struct fsl_upm_nand { |
27 | struct device *dev; | 31 | struct device *dev; |
28 | struct mtd_info mtd; | 32 | struct mtd_info mtd; |
@@ -36,8 +40,12 @@ struct fsl_upm_nand { | |||
36 | uint8_t upm_addr_offset; | 40 | uint8_t upm_addr_offset; |
37 | uint8_t upm_cmd_offset; | 41 | uint8_t upm_cmd_offset; |
38 | void __iomem *io_base; | 42 | void __iomem *io_base; |
39 | int rnb_gpio; | 43 | int rnb_gpio[NAND_MAX_CHIPS]; |
44 | uint32_t mchip_offsets[NAND_MAX_CHIPS]; | ||
45 | uint32_t mchip_count; | ||
46 | uint32_t mchip_number; | ||
40 | int chip_delay; | 47 | int chip_delay; |
48 | uint32_t wait_flags; | ||
41 | }; | 49 | }; |
42 | 50 | ||
43 | #define to_fsl_upm_nand(mtd) container_of(mtd, struct fsl_upm_nand, mtd) | 51 | #define to_fsl_upm_nand(mtd) container_of(mtd, struct fsl_upm_nand, mtd) |
@@ -46,7 +54,7 @@ static int fun_chip_ready(struct mtd_info *mtd) | |||
46 | { | 54 | { |
47 | struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); | 55 | struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); |
48 | 56 | ||
49 | if (gpio_get_value(fun->rnb_gpio)) | 57 | if (gpio_get_value(fun->rnb_gpio[fun->mchip_number])) |
50 | return 1; | 58 | return 1; |
51 | 59 | ||
52 | dev_vdbg(fun->dev, "busy\n"); | 60 | dev_vdbg(fun->dev, "busy\n"); |
@@ -55,9 +63,9 @@ static int fun_chip_ready(struct mtd_info *mtd) | |||
55 | 63 | ||
56 | static void fun_wait_rnb(struct fsl_upm_nand *fun) | 64 | static void fun_wait_rnb(struct fsl_upm_nand *fun) |
57 | { | 65 | { |
58 | int cnt = 1000000; | 66 | if (fun->rnb_gpio[fun->mchip_number] >= 0) { |
67 | int cnt = 1000000; | ||
59 | 68 | ||
60 | if (fun->rnb_gpio >= 0) { | ||
61 | while (--cnt && !fun_chip_ready(&fun->mtd)) | 69 | while (--cnt && !fun_chip_ready(&fun->mtd)) |
62 | cpu_relax(); | 70 | cpu_relax(); |
63 | if (!cnt) | 71 | if (!cnt) |
@@ -69,7 +77,9 @@ static void fun_wait_rnb(struct fsl_upm_nand *fun) | |||
69 | 77 | ||
70 | static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) | 78 | static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) |
71 | { | 79 | { |
80 | struct nand_chip *chip = mtd->priv; | ||
72 | struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); | 81 | struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); |
82 | u32 mar; | ||
73 | 83 | ||
74 | if (!(ctrl & fun->last_ctrl)) { | 84 | if (!(ctrl & fun->last_ctrl)) { |
75 | fsl_upm_end_pattern(&fun->upm); | 85 | fsl_upm_end_pattern(&fun->upm); |
@@ -87,9 +97,28 @@ static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) | |||
87 | fsl_upm_start_pattern(&fun->upm, fun->upm_cmd_offset); | 97 | fsl_upm_start_pattern(&fun->upm, fun->upm_cmd_offset); |
88 | } | 98 | } |
89 | 99 | ||
90 | fsl_upm_run_pattern(&fun->upm, fun->io_base, cmd); | 100 | mar = (cmd << (32 - fun->upm.width)) | |
101 | fun->mchip_offsets[fun->mchip_number]; | ||
102 | fsl_upm_run_pattern(&fun->upm, chip->IO_ADDR_R, mar); | ||
103 | |||
104 | if (fun->wait_flags & FSL_UPM_WAIT_RUN_PATTERN) | ||
105 | fun_wait_rnb(fun); | ||
106 | } | ||
107 | |||
108 | static void fun_select_chip(struct mtd_info *mtd, int mchip_nr) | ||
109 | { | ||
110 | struct nand_chip *chip = mtd->priv; | ||
111 | struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); | ||
91 | 112 | ||
92 | fun_wait_rnb(fun); | 113 | if (mchip_nr == -1) { |
114 | chip->cmd_ctrl(mtd, NAND_CMD_NONE, 0 | NAND_CTRL_CHANGE); | ||
115 | } else if (mchip_nr >= 0) { | ||
116 | fun->mchip_number = mchip_nr; | ||
117 | chip->IO_ADDR_R = fun->io_base + fun->mchip_offsets[mchip_nr]; | ||
118 | chip->IO_ADDR_W = chip->IO_ADDR_R; | ||
119 | } else { | ||
120 | BUG(); | ||
121 | } | ||
93 | } | 122 | } |
94 | 123 | ||
95 | static uint8_t fun_read_byte(struct mtd_info *mtd) | 124 | static uint8_t fun_read_byte(struct mtd_info *mtd) |
@@ -115,8 +144,11 @@ static void fun_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len) | |||
115 | 144 | ||
116 | for (i = 0; i < len; i++) { | 145 | for (i = 0; i < len; i++) { |
117 | out_8(fun->chip.IO_ADDR_W, buf[i]); | 146 | out_8(fun->chip.IO_ADDR_W, buf[i]); |
118 | fun_wait_rnb(fun); | 147 | if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BYTE) |
148 | fun_wait_rnb(fun); | ||
119 | } | 149 | } |
150 | if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BUFFER) | ||
151 | fun_wait_rnb(fun); | ||
120 | } | 152 | } |
121 | 153 | ||
122 | static int __devinit fun_chip_init(struct fsl_upm_nand *fun, | 154 | static int __devinit fun_chip_init(struct fsl_upm_nand *fun, |
@@ -137,8 +169,10 @@ static int __devinit fun_chip_init(struct fsl_upm_nand *fun, | |||
137 | fun->chip.read_buf = fun_read_buf; | 169 | fun->chip.read_buf = fun_read_buf; |
138 | fun->chip.write_buf = fun_write_buf; | 170 | fun->chip.write_buf = fun_write_buf; |
139 | fun->chip.ecc.mode = NAND_ECC_SOFT; | 171 | fun->chip.ecc.mode = NAND_ECC_SOFT; |
172 | if (fun->mchip_count > 1) | ||
173 | fun->chip.select_chip = fun_select_chip; | ||
140 | 174 | ||
141 | if (fun->rnb_gpio >= 0) | 175 | if (fun->rnb_gpio[0] >= 0) |
142 | fun->chip.dev_ready = fun_chip_ready; | 176 | fun->chip.dev_ready = fun_chip_ready; |
143 | 177 | ||
144 | fun->mtd.priv = &fun->chip; | 178 | fun->mtd.priv = &fun->chip; |
@@ -155,7 +189,7 @@ static int __devinit fun_chip_init(struct fsl_upm_nand *fun, | |||
155 | goto err; | 189 | goto err; |
156 | } | 190 | } |
157 | 191 | ||
158 | ret = nand_scan(&fun->mtd, 1); | 192 | ret = nand_scan(&fun->mtd, fun->mchip_count); |
159 | if (ret) | 193 | if (ret) |
160 | goto err; | 194 | goto err; |
161 | 195 | ||
@@ -185,8 +219,10 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
185 | struct fsl_upm_nand *fun; | 219 | struct fsl_upm_nand *fun; |
186 | struct resource io_res; | 220 | struct resource io_res; |
187 | const uint32_t *prop; | 221 | const uint32_t *prop; |
222 | int rnb_gpio; | ||
188 | int ret; | 223 | int ret; |
189 | int size; | 224 | int size; |
225 | int i; | ||
190 | 226 | ||
191 | fun = kzalloc(sizeof(*fun), GFP_KERNEL); | 227 | fun = kzalloc(sizeof(*fun), GFP_KERNEL); |
192 | if (!fun) | 228 | if (!fun) |
@@ -208,7 +244,7 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
208 | if (!prop || size != sizeof(uint32_t)) { | 244 | if (!prop || size != sizeof(uint32_t)) { |
209 | dev_err(&ofdev->dev, "can't get UPM address offset\n"); | 245 | dev_err(&ofdev->dev, "can't get UPM address offset\n"); |
210 | ret = -EINVAL; | 246 | ret = -EINVAL; |
211 | goto err2; | 247 | goto err1; |
212 | } | 248 | } |
213 | fun->upm_addr_offset = *prop; | 249 | fun->upm_addr_offset = *prop; |
214 | 250 | ||
@@ -216,21 +252,40 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
216 | if (!prop || size != sizeof(uint32_t)) { | 252 | if (!prop || size != sizeof(uint32_t)) { |
217 | dev_err(&ofdev->dev, "can't get UPM command offset\n"); | 253 | dev_err(&ofdev->dev, "can't get UPM command offset\n"); |
218 | ret = -EINVAL; | 254 | ret = -EINVAL; |
219 | goto err2; | 255 | goto err1; |
220 | } | 256 | } |
221 | fun->upm_cmd_offset = *prop; | 257 | fun->upm_cmd_offset = *prop; |
222 | 258 | ||
223 | fun->rnb_gpio = of_get_gpio(ofdev->node, 0); | 259 | prop = of_get_property(ofdev->node, |
224 | if (fun->rnb_gpio >= 0) { | 260 | "fsl,upm-addr-line-cs-offsets", &size); |
225 | ret = gpio_request(fun->rnb_gpio, dev_name(&ofdev->dev)); | 261 | if (prop && (size / sizeof(uint32_t)) > 0) { |
226 | if (ret) { | 262 | fun->mchip_count = size / sizeof(uint32_t); |
227 | dev_err(&ofdev->dev, "can't request RNB gpio\n"); | 263 | if (fun->mchip_count >= NAND_MAX_CHIPS) { |
264 | dev_err(&ofdev->dev, "too much multiple chips\n"); | ||
265 | goto err1; | ||
266 | } | ||
267 | for (i = 0; i < fun->mchip_count; i++) | ||
268 | fun->mchip_offsets[i] = prop[i]; | ||
269 | } else { | ||
270 | fun->mchip_count = 1; | ||
271 | } | ||
272 | |||
273 | for (i = 0; i < fun->mchip_count; i++) { | ||
274 | fun->rnb_gpio[i] = -1; | ||
275 | rnb_gpio = of_get_gpio(ofdev->node, i); | ||
276 | if (rnb_gpio >= 0) { | ||
277 | ret = gpio_request(rnb_gpio, dev_name(&ofdev->dev)); | ||
278 | if (ret) { | ||
279 | dev_err(&ofdev->dev, | ||
280 | "can't request RNB gpio #%d\n", i); | ||
281 | goto err2; | ||
282 | } | ||
283 | gpio_direction_input(rnb_gpio); | ||
284 | fun->rnb_gpio[i] = rnb_gpio; | ||
285 | } else if (rnb_gpio == -EINVAL) { | ||
286 | dev_err(&ofdev->dev, "RNB gpio #%d is invalid\n", i); | ||
228 | goto err2; | 287 | goto err2; |
229 | } | 288 | } |
230 | gpio_direction_input(fun->rnb_gpio); | ||
231 | } else if (fun->rnb_gpio == -EINVAL) { | ||
232 | dev_err(&ofdev->dev, "specified RNB gpio is invalid\n"); | ||
233 | goto err2; | ||
234 | } | 289 | } |
235 | 290 | ||
236 | prop = of_get_property(ofdev->node, "chip-delay", NULL); | 291 | prop = of_get_property(ofdev->node, "chip-delay", NULL); |
@@ -239,8 +294,15 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
239 | else | 294 | else |
240 | fun->chip_delay = 50; | 295 | fun->chip_delay = 50; |
241 | 296 | ||
297 | prop = of_get_property(ofdev->node, "fsl,upm-wait-flags", &size); | ||
298 | if (prop && size == sizeof(uint32_t)) | ||
299 | fun->wait_flags = *prop; | ||
300 | else | ||
301 | fun->wait_flags = FSL_UPM_WAIT_RUN_PATTERN | | ||
302 | FSL_UPM_WAIT_WRITE_BYTE; | ||
303 | |||
242 | fun->io_base = devm_ioremap_nocache(&ofdev->dev, io_res.start, | 304 | fun->io_base = devm_ioremap_nocache(&ofdev->dev, io_res.start, |
243 | io_res.end - io_res.start + 1); | 305 | io_res.end - io_res.start + 1); |
244 | if (!fun->io_base) { | 306 | if (!fun->io_base) { |
245 | ret = -ENOMEM; | 307 | ret = -ENOMEM; |
246 | goto err2; | 308 | goto err2; |
@@ -257,8 +319,11 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
257 | 319 | ||
258 | return 0; | 320 | return 0; |
259 | err2: | 321 | err2: |
260 | if (fun->rnb_gpio >= 0) | 322 | for (i = 0; i < fun->mchip_count; i++) { |
261 | gpio_free(fun->rnb_gpio); | 323 | if (fun->rnb_gpio[i] < 0) |
324 | break; | ||
325 | gpio_free(fun->rnb_gpio[i]); | ||
326 | } | ||
262 | err1: | 327 | err1: |
263 | kfree(fun); | 328 | kfree(fun); |
264 | 329 | ||
@@ -268,12 +333,16 @@ err1: | |||
268 | static int __devexit fun_remove(struct of_device *ofdev) | 333 | static int __devexit fun_remove(struct of_device *ofdev) |
269 | { | 334 | { |
270 | struct fsl_upm_nand *fun = dev_get_drvdata(&ofdev->dev); | 335 | struct fsl_upm_nand *fun = dev_get_drvdata(&ofdev->dev); |
336 | int i; | ||
271 | 337 | ||
272 | nand_release(&fun->mtd); | 338 | nand_release(&fun->mtd); |
273 | kfree(fun->mtd.name); | 339 | kfree(fun->mtd.name); |
274 | 340 | ||
275 | if (fun->rnb_gpio >= 0) | 341 | for (i = 0; i < fun->mchip_count; i++) { |
276 | gpio_free(fun->rnb_gpio); | 342 | if (fun->rnb_gpio[i] < 0) |
343 | break; | ||
344 | gpio_free(fun->rnb_gpio[i]); | ||
345 | } | ||
277 | 346 | ||
278 | kfree(fun); | 347 | kfree(fun); |
279 | 348 | ||
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c index bad048aca89a..f3548d048014 100644 --- a/drivers/mtd/nand/mxc_nand.c +++ b/drivers/mtd/nand/mxc_nand.c | |||
@@ -866,6 +866,7 @@ static int __init mxcnd_probe(struct platform_device *pdev) | |||
866 | mtd = &host->mtd; | 866 | mtd = &host->mtd; |
867 | mtd->priv = this; | 867 | mtd->priv = this; |
868 | mtd->owner = THIS_MODULE; | 868 | mtd->owner = THIS_MODULE; |
869 | mtd->dev.parent = &pdev->dev; | ||
869 | 870 | ||
870 | /* 50 us command delay time */ | 871 | /* 50 us command delay time */ |
871 | this->chip_delay = 5; | 872 | this->chip_delay = 5; |
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 5f71371eb1b0..3d7ed432fa41 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c | |||
@@ -82,6 +82,20 @@ static struct nand_ecclayout nand_oob_64 = { | |||
82 | .length = 38}} | 82 | .length = 38}} |
83 | }; | 83 | }; |
84 | 84 | ||
85 | static struct nand_ecclayout nand_oob_128 = { | ||
86 | .eccbytes = 48, | ||
87 | .eccpos = { | ||
88 | 80, 81, 82, 83, 84, 85, 86, 87, | ||
89 | 88, 89, 90, 91, 92, 93, 94, 95, | ||
90 | 96, 97, 98, 99, 100, 101, 102, 103, | ||
91 | 104, 105, 106, 107, 108, 109, 110, 111, | ||
92 | 112, 113, 114, 115, 116, 117, 118, 119, | ||
93 | 120, 121, 122, 123, 124, 125, 126, 127}, | ||
94 | .oobfree = { | ||
95 | {.offset = 2, | ||
96 | .length = 78}} | ||
97 | }; | ||
98 | |||
85 | static int nand_get_device(struct nand_chip *chip, struct mtd_info *mtd, | 99 | static int nand_get_device(struct nand_chip *chip, struct mtd_info *mtd, |
86 | int new_state); | 100 | int new_state); |
87 | 101 | ||
@@ -748,6 +762,8 @@ static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip) | |||
748 | * @mtd: mtd info structure | 762 | * @mtd: mtd info structure |
749 | * @chip: nand chip info structure | 763 | * @chip: nand chip info structure |
750 | * @buf: buffer to store read data | 764 | * @buf: buffer to store read data |
765 | * | ||
766 | * Not for syndrome calculating ecc controllers, which use a special oob layout | ||
751 | */ | 767 | */ |
752 | static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, | 768 | static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, |
753 | uint8_t *buf) | 769 | uint8_t *buf) |
@@ -758,6 +774,47 @@ static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, | |||
758 | } | 774 | } |
759 | 775 | ||
760 | /** | 776 | /** |
777 | * nand_read_page_raw_syndrome - [Intern] read raw page data without ecc | ||
778 | * @mtd: mtd info structure | ||
779 | * @chip: nand chip info structure | ||
780 | * @buf: buffer to store read data | ||
781 | * | ||
782 | * We need a special oob layout and handling even when OOB isn't used. | ||
783 | */ | ||
784 | static int nand_read_page_raw_syndrome(struct mtd_info *mtd, struct nand_chip *chip, | ||
785 | uint8_t *buf) | ||
786 | { | ||
787 | int eccsize = chip->ecc.size; | ||
788 | int eccbytes = chip->ecc.bytes; | ||
789 | uint8_t *oob = chip->oob_poi; | ||
790 | int steps, size; | ||
791 | |||
792 | for (steps = chip->ecc.steps; steps > 0; steps--) { | ||
793 | chip->read_buf(mtd, buf, eccsize); | ||
794 | buf += eccsize; | ||
795 | |||
796 | if (chip->ecc.prepad) { | ||
797 | chip->read_buf(mtd, oob, chip->ecc.prepad); | ||
798 | oob += chip->ecc.prepad; | ||
799 | } | ||
800 | |||
801 | chip->read_buf(mtd, oob, eccbytes); | ||
802 | oob += eccbytes; | ||
803 | |||
804 | if (chip->ecc.postpad) { | ||
805 | chip->read_buf(mtd, oob, chip->ecc.postpad); | ||
806 | oob += chip->ecc.postpad; | ||
807 | } | ||
808 | } | ||
809 | |||
810 | size = mtd->oobsize - (oob - chip->oob_poi); | ||
811 | if (size) | ||
812 | chip->read_buf(mtd, oob, size); | ||
813 | |||
814 | return 0; | ||
815 | } | ||
816 | |||
817 | /** | ||
761 | * nand_read_page_swecc - [REPLACABLE] software ecc based page read function | 818 | * nand_read_page_swecc - [REPLACABLE] software ecc based page read function |
762 | * @mtd: mtd info structure | 819 | * @mtd: mtd info structure |
763 | * @chip: nand chip info structure | 820 | * @chip: nand chip info structure |
@@ -1482,6 +1539,8 @@ static int nand_read_oob(struct mtd_info *mtd, loff_t from, | |||
1482 | * @mtd: mtd info structure | 1539 | * @mtd: mtd info structure |
1483 | * @chip: nand chip info structure | 1540 | * @chip: nand chip info structure |
1484 | * @buf: data buffer | 1541 | * @buf: data buffer |
1542 | * | ||
1543 | * Not for syndrome calculating ecc controllers, which use a special oob layout | ||
1485 | */ | 1544 | */ |
1486 | static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip, | 1545 | static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip, |
1487 | const uint8_t *buf) | 1546 | const uint8_t *buf) |
@@ -1491,6 +1550,44 @@ static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip, | |||
1491 | } | 1550 | } |
1492 | 1551 | ||
1493 | /** | 1552 | /** |
1553 | * nand_write_page_raw_syndrome - [Intern] raw page write function | ||
1554 | * @mtd: mtd info structure | ||
1555 | * @chip: nand chip info structure | ||
1556 | * @buf: data buffer | ||
1557 | * | ||
1558 | * We need a special oob layout and handling even when ECC isn't checked. | ||
1559 | */ | ||
1560 | static void nand_write_page_raw_syndrome(struct mtd_info *mtd, struct nand_chip *chip, | ||
1561 | const uint8_t *buf) | ||
1562 | { | ||
1563 | int eccsize = chip->ecc.size; | ||
1564 | int eccbytes = chip->ecc.bytes; | ||
1565 | uint8_t *oob = chip->oob_poi; | ||
1566 | int steps, size; | ||
1567 | |||
1568 | for (steps = chip->ecc.steps; steps > 0; steps--) { | ||
1569 | chip->write_buf(mtd, buf, eccsize); | ||
1570 | buf += eccsize; | ||
1571 | |||
1572 | if (chip->ecc.prepad) { | ||
1573 | chip->write_buf(mtd, oob, chip->ecc.prepad); | ||
1574 | oob += chip->ecc.prepad; | ||
1575 | } | ||
1576 | |||
1577 | chip->read_buf(mtd, oob, eccbytes); | ||
1578 | oob += eccbytes; | ||
1579 | |||
1580 | if (chip->ecc.postpad) { | ||
1581 | chip->write_buf(mtd, oob, chip->ecc.postpad); | ||
1582 | oob += chip->ecc.postpad; | ||
1583 | } | ||
1584 | } | ||
1585 | |||
1586 | size = mtd->oobsize - (oob - chip->oob_poi); | ||
1587 | if (size) | ||
1588 | chip->write_buf(mtd, oob, size); | ||
1589 | } | ||
1590 | /** | ||
1494 | * nand_write_page_swecc - [REPLACABLE] software ecc based page write function | 1591 | * nand_write_page_swecc - [REPLACABLE] software ecc based page write function |
1495 | * @mtd: mtd info structure | 1592 | * @mtd: mtd info structure |
1496 | * @chip: nand chip info structure | 1593 | * @chip: nand chip info structure |
@@ -1863,7 +1960,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to, | |||
1863 | } | 1960 | } |
1864 | 1961 | ||
1865 | if (unlikely(ops->ooboffs >= len)) { | 1962 | if (unlikely(ops->ooboffs >= len)) { |
1866 | DEBUG(MTD_DEBUG_LEVEL0, "nand_read_oob: " | 1963 | DEBUG(MTD_DEBUG_LEVEL0, "nand_do_write_oob: " |
1867 | "Attempt to start write outside oob\n"); | 1964 | "Attempt to start write outside oob\n"); |
1868 | return -EINVAL; | 1965 | return -EINVAL; |
1869 | } | 1966 | } |
@@ -1873,7 +1970,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to, | |||
1873 | ops->ooboffs + ops->ooblen > | 1970 | ops->ooboffs + ops->ooblen > |
1874 | ((mtd->size >> chip->page_shift) - | 1971 | ((mtd->size >> chip->page_shift) - |
1875 | (to >> chip->page_shift)) * len)) { | 1972 | (to >> chip->page_shift)) * len)) { |
1876 | DEBUG(MTD_DEBUG_LEVEL0, "nand_read_oob: " | 1973 | DEBUG(MTD_DEBUG_LEVEL0, "nand_do_write_oob: " |
1877 | "Attempt write beyond end of device\n"); | 1974 | "Attempt write beyond end of device\n"); |
1878 | return -EINVAL; | 1975 | return -EINVAL; |
1879 | } | 1976 | } |
@@ -1929,8 +2026,8 @@ static int nand_write_oob(struct mtd_info *mtd, loff_t to, | |||
1929 | 2026 | ||
1930 | /* Do not allow writes past end of device */ | 2027 | /* Do not allow writes past end of device */ |
1931 | if (ops->datbuf && (to + ops->len) > mtd->size) { | 2028 | if (ops->datbuf && (to + ops->len) > mtd->size) { |
1932 | DEBUG(MTD_DEBUG_LEVEL0, "nand_read_oob: " | 2029 | DEBUG(MTD_DEBUG_LEVEL0, "nand_write_oob: " |
1933 | "Attempt read beyond end of device\n"); | 2030 | "Attempt write beyond end of device\n"); |
1934 | return -EINVAL; | 2031 | return -EINVAL; |
1935 | } | 2032 | } |
1936 | 2033 | ||
@@ -2555,6 +2652,9 @@ int nand_scan_tail(struct mtd_info *mtd) | |||
2555 | case 64: | 2652 | case 64: |
2556 | chip->ecc.layout = &nand_oob_64; | 2653 | chip->ecc.layout = &nand_oob_64; |
2557 | break; | 2654 | break; |
2655 | case 128: | ||
2656 | chip->ecc.layout = &nand_oob_128; | ||
2657 | break; | ||
2558 | default: | 2658 | default: |
2559 | printk(KERN_WARNING "No oob scheme defined for " | 2659 | printk(KERN_WARNING "No oob scheme defined for " |
2560 | "oobsize %d\n", mtd->oobsize); | 2660 | "oobsize %d\n", mtd->oobsize); |
@@ -2569,10 +2669,6 @@ int nand_scan_tail(struct mtd_info *mtd) | |||
2569 | * check ECC mode, default to software if 3byte/512byte hardware ECC is | 2669 | * check ECC mode, default to software if 3byte/512byte hardware ECC is |
2570 | * selected and we have 256 byte pagesize fallback to software ECC | 2670 | * selected and we have 256 byte pagesize fallback to software ECC |
2571 | */ | 2671 | */ |
2572 | if (!chip->ecc.read_page_raw) | ||
2573 | chip->ecc.read_page_raw = nand_read_page_raw; | ||
2574 | if (!chip->ecc.write_page_raw) | ||
2575 | chip->ecc.write_page_raw = nand_write_page_raw; | ||
2576 | 2672 | ||
2577 | switch (chip->ecc.mode) { | 2673 | switch (chip->ecc.mode) { |
2578 | case NAND_ECC_HW: | 2674 | case NAND_ECC_HW: |
@@ -2581,6 +2677,10 @@ int nand_scan_tail(struct mtd_info *mtd) | |||
2581 | chip->ecc.read_page = nand_read_page_hwecc; | 2677 | chip->ecc.read_page = nand_read_page_hwecc; |
2582 | if (!chip->ecc.write_page) | 2678 | if (!chip->ecc.write_page) |
2583 | chip->ecc.write_page = nand_write_page_hwecc; | 2679 | chip->ecc.write_page = nand_write_page_hwecc; |
2680 | if (!chip->ecc.read_page_raw) | ||
2681 | chip->ecc.read_page_raw = nand_read_page_raw; | ||
2682 | if (!chip->ecc.write_page_raw) | ||
2683 | chip->ecc.write_page_raw = nand_write_page_raw; | ||
2584 | if (!chip->ecc.read_oob) | 2684 | if (!chip->ecc.read_oob) |
2585 | chip->ecc.read_oob = nand_read_oob_std; | 2685 | chip->ecc.read_oob = nand_read_oob_std; |
2586 | if (!chip->ecc.write_oob) | 2686 | if (!chip->ecc.write_oob) |
@@ -2602,6 +2702,10 @@ int nand_scan_tail(struct mtd_info *mtd) | |||
2602 | chip->ecc.read_page = nand_read_page_syndrome; | 2702 | chip->ecc.read_page = nand_read_page_syndrome; |
2603 | if (!chip->ecc.write_page) | 2703 | if (!chip->ecc.write_page) |
2604 | chip->ecc.write_page = nand_write_page_syndrome; | 2704 | chip->ecc.write_page = nand_write_page_syndrome; |
2705 | if (!chip->ecc.read_page_raw) | ||
2706 | chip->ecc.read_page_raw = nand_read_page_raw_syndrome; | ||
2707 | if (!chip->ecc.write_page_raw) | ||
2708 | chip->ecc.write_page_raw = nand_write_page_raw_syndrome; | ||
2605 | if (!chip->ecc.read_oob) | 2709 | if (!chip->ecc.read_oob) |
2606 | chip->ecc.read_oob = nand_read_oob_syndrome; | 2710 | chip->ecc.read_oob = nand_read_oob_syndrome; |
2607 | if (!chip->ecc.write_oob) | 2711 | if (!chip->ecc.write_oob) |
@@ -2620,6 +2724,8 @@ int nand_scan_tail(struct mtd_info *mtd) | |||
2620 | chip->ecc.read_page = nand_read_page_swecc; | 2724 | chip->ecc.read_page = nand_read_page_swecc; |
2621 | chip->ecc.read_subpage = nand_read_subpage; | 2725 | chip->ecc.read_subpage = nand_read_subpage; |
2622 | chip->ecc.write_page = nand_write_page_swecc; | 2726 | chip->ecc.write_page = nand_write_page_swecc; |
2727 | chip->ecc.read_page_raw = nand_read_page_raw; | ||
2728 | chip->ecc.write_page_raw = nand_write_page_raw; | ||
2623 | chip->ecc.read_oob = nand_read_oob_std; | 2729 | chip->ecc.read_oob = nand_read_oob_std; |
2624 | chip->ecc.write_oob = nand_write_oob_std; | 2730 | chip->ecc.write_oob = nand_write_oob_std; |
2625 | chip->ecc.size = 256; | 2731 | chip->ecc.size = 256; |
@@ -2632,6 +2738,8 @@ int nand_scan_tail(struct mtd_info *mtd) | |||
2632 | chip->ecc.read_page = nand_read_page_raw; | 2738 | chip->ecc.read_page = nand_read_page_raw; |
2633 | chip->ecc.write_page = nand_write_page_raw; | 2739 | chip->ecc.write_page = nand_write_page_raw; |
2634 | chip->ecc.read_oob = nand_read_oob_std; | 2740 | chip->ecc.read_oob = nand_read_oob_std; |
2741 | chip->ecc.read_page_raw = nand_read_page_raw; | ||
2742 | chip->ecc.write_page_raw = nand_write_page_raw; | ||
2635 | chip->ecc.write_oob = nand_write_oob_std; | 2743 | chip->ecc.write_oob = nand_write_oob_std; |
2636 | chip->ecc.size = mtd->writesize; | 2744 | chip->ecc.size = mtd->writesize; |
2637 | chip->ecc.bytes = 0; | 2745 | chip->ecc.bytes = 0; |
@@ -2676,6 +2784,7 @@ int nand_scan_tail(struct mtd_info *mtd) | |||
2676 | break; | 2784 | break; |
2677 | case 4: | 2785 | case 4: |
2678 | case 8: | 2786 | case 8: |
2787 | case 16: | ||
2679 | mtd->subpage_sft = 2; | 2788 | mtd->subpage_sft = 2; |
2680 | break; | 2789 | break; |
2681 | } | 2790 | } |
diff --git a/drivers/mtd/nand/plat_nand.c b/drivers/mtd/nand/plat_nand.c index 75f9f4874ecf..86e1d08eee00 100644 --- a/drivers/mtd/nand/plat_nand.c +++ b/drivers/mtd/nand/plat_nand.c | |||
@@ -30,7 +30,7 @@ struct plat_nand_data { | |||
30 | /* | 30 | /* |
31 | * Probe for the NAND device. | 31 | * Probe for the NAND device. |
32 | */ | 32 | */ |
33 | static int __init plat_nand_probe(struct platform_device *pdev) | 33 | static int __devinit plat_nand_probe(struct platform_device *pdev) |
34 | { | 34 | { |
35 | struct platform_nand_data *pdata = pdev->dev.platform_data; | 35 | struct platform_nand_data *pdata = pdev->dev.platform_data; |
36 | struct plat_nand_data *data; | 36 | struct plat_nand_data *data; |
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c index 61b69cc40009..30a8ce6d3e69 100644 --- a/drivers/mtd/nand/pxa3xx_nand.c +++ b/drivers/mtd/nand/pxa3xx_nand.c | |||
@@ -170,7 +170,13 @@ static int use_dma = 1; | |||
170 | module_param(use_dma, bool, 0444); | 170 | module_param(use_dma, bool, 0444); |
171 | MODULE_PARM_DESC(use_dma, "enable DMA for data transfering to/from NAND HW"); | 171 | MODULE_PARM_DESC(use_dma, "enable DMA for data transfering to/from NAND HW"); |
172 | 172 | ||
173 | #ifdef CONFIG_MTD_NAND_PXA3xx_BUILTIN | 173 | /* |
174 | * Default NAND flash controller configuration setup by the | ||
175 | * bootloader. This configuration is used only when pdata->keep_config is set | ||
176 | */ | ||
177 | static struct pxa3xx_nand_timing default_timing; | ||
178 | static struct pxa3xx_nand_flash default_flash; | ||
179 | |||
174 | static struct pxa3xx_nand_cmdset smallpage_cmdset = { | 180 | static struct pxa3xx_nand_cmdset smallpage_cmdset = { |
175 | .read1 = 0x0000, | 181 | .read1 = 0x0000, |
176 | .read2 = 0x0050, | 182 | .read2 = 0x0050, |
@@ -197,6 +203,7 @@ static struct pxa3xx_nand_cmdset largepage_cmdset = { | |||
197 | .lock_status = 0x007A, | 203 | .lock_status = 0x007A, |
198 | }; | 204 | }; |
199 | 205 | ||
206 | #ifdef CONFIG_MTD_NAND_PXA3xx_BUILTIN | ||
200 | static struct pxa3xx_nand_timing samsung512MbX16_timing = { | 207 | static struct pxa3xx_nand_timing samsung512MbX16_timing = { |
201 | .tCH = 10, | 208 | .tCH = 10, |
202 | .tCS = 0, | 209 | .tCS = 0, |
@@ -296,9 +303,23 @@ static struct pxa3xx_nand_flash *builtin_flash_types[] = { | |||
296 | #define NDTR1_tWHR(c) (min((c), 15) << 4) | 303 | #define NDTR1_tWHR(c) (min((c), 15) << 4) |
297 | #define NDTR1_tAR(c) (min((c), 15) << 0) | 304 | #define NDTR1_tAR(c) (min((c), 15) << 0) |
298 | 305 | ||
306 | #define tCH_NDTR0(r) (((r) >> 19) & 0x7) | ||
307 | #define tCS_NDTR0(r) (((r) >> 16) & 0x7) | ||
308 | #define tWH_NDTR0(r) (((r) >> 11) & 0x7) | ||
309 | #define tWP_NDTR0(r) (((r) >> 8) & 0x7) | ||
310 | #define tRH_NDTR0(r) (((r) >> 3) & 0x7) | ||
311 | #define tRP_NDTR0(r) (((r) >> 0) & 0x7) | ||
312 | |||
313 | #define tR_NDTR1(r) (((r) >> 16) & 0xffff) | ||
314 | #define tWHR_NDTR1(r) (((r) >> 4) & 0xf) | ||
315 | #define tAR_NDTR1(r) (((r) >> 0) & 0xf) | ||
316 | |||
299 | /* convert nano-seconds to nand flash controller clock cycles */ | 317 | /* convert nano-seconds to nand flash controller clock cycles */ |
300 | #define ns2cycle(ns, clk) (int)(((ns) * (clk / 1000000) / 1000) - 1) | 318 | #define ns2cycle(ns, clk) (int)(((ns) * (clk / 1000000) / 1000) - 1) |
301 | 319 | ||
320 | /* convert nand flash controller clock cycles to nano-seconds */ | ||
321 | #define cycle2ns(c, clk) ((((c) + 1) * 1000000 + clk / 500) / (clk / 1000)) | ||
322 | |||
302 | static void pxa3xx_nand_set_timing(struct pxa3xx_nand_info *info, | 323 | static void pxa3xx_nand_set_timing(struct pxa3xx_nand_info *info, |
303 | const struct pxa3xx_nand_timing *t) | 324 | const struct pxa3xx_nand_timing *t) |
304 | { | 325 | { |
@@ -920,6 +941,82 @@ static int pxa3xx_nand_config_flash(struct pxa3xx_nand_info *info, | |||
920 | return 0; | 941 | return 0; |
921 | } | 942 | } |
922 | 943 | ||
944 | static void pxa3xx_nand_detect_timing(struct pxa3xx_nand_info *info, | ||
945 | struct pxa3xx_nand_timing *t) | ||
946 | { | ||
947 | unsigned long nand_clk = clk_get_rate(info->clk); | ||
948 | uint32_t ndtr0 = nand_readl(info, NDTR0CS0); | ||
949 | uint32_t ndtr1 = nand_readl(info, NDTR1CS0); | ||
950 | |||
951 | t->tCH = cycle2ns(tCH_NDTR0(ndtr0), nand_clk); | ||
952 | t->tCS = cycle2ns(tCS_NDTR0(ndtr0), nand_clk); | ||
953 | t->tWH = cycle2ns(tWH_NDTR0(ndtr0), nand_clk); | ||
954 | t->tWP = cycle2ns(tWP_NDTR0(ndtr0), nand_clk); | ||
955 | t->tRH = cycle2ns(tRH_NDTR0(ndtr0), nand_clk); | ||
956 | t->tRP = cycle2ns(tRP_NDTR0(ndtr0), nand_clk); | ||
957 | |||
958 | t->tR = cycle2ns(tR_NDTR1(ndtr1), nand_clk); | ||
959 | t->tWHR = cycle2ns(tWHR_NDTR1(ndtr1), nand_clk); | ||
960 | t->tAR = cycle2ns(tAR_NDTR1(ndtr1), nand_clk); | ||
961 | } | ||
962 | |||
963 | static int pxa3xx_nand_detect_config(struct pxa3xx_nand_info *info) | ||
964 | { | ||
965 | uint32_t ndcr = nand_readl(info, NDCR); | ||
966 | struct nand_flash_dev *type = NULL; | ||
967 | uint32_t id = -1; | ||
968 | int i; | ||
969 | |||
970 | default_flash.page_per_block = ndcr & NDCR_PG_PER_BLK ? 64 : 32; | ||
971 | default_flash.page_size = ndcr & NDCR_PAGE_SZ ? 2048 : 512; | ||
972 | default_flash.flash_width = ndcr & NDCR_DWIDTH_M ? 16 : 8; | ||
973 | default_flash.dfc_width = ndcr & NDCR_DWIDTH_C ? 16 : 8; | ||
974 | |||
975 | if (default_flash.page_size == 2048) | ||
976 | default_flash.cmdset = &largepage_cmdset; | ||
977 | else | ||
978 | default_flash.cmdset = &smallpage_cmdset; | ||
979 | |||
980 | /* set info fields needed to __readid */ | ||
981 | info->flash_info = &default_flash; | ||
982 | info->read_id_bytes = (default_flash.page_size == 2048) ? 4 : 2; | ||
983 | info->reg_ndcr = ndcr; | ||
984 | |||
985 | if (__readid(info, &id)) | ||
986 | return -ENODEV; | ||
987 | |||
988 | /* Lookup the flash id */ | ||
989 | id = (id >> 8) & 0xff; /* device id is byte 2 */ | ||
990 | for (i = 0; nand_flash_ids[i].name != NULL; i++) { | ||
991 | if (id == nand_flash_ids[i].id) { | ||
992 | type = &nand_flash_ids[i]; | ||
993 | break; | ||
994 | } | ||
995 | } | ||
996 | |||
997 | if (!type) | ||
998 | return -ENODEV; | ||
999 | |||
1000 | /* fill the missing flash information */ | ||
1001 | i = __ffs(default_flash.page_per_block * default_flash.page_size); | ||
1002 | default_flash.num_blocks = type->chipsize << (20 - i); | ||
1003 | |||
1004 | info->oob_size = (default_flash.page_size == 2048) ? 64 : 16; | ||
1005 | |||
1006 | /* calculate addressing information */ | ||
1007 | info->col_addr_cycles = (default_flash.page_size == 2048) ? 2 : 1; | ||
1008 | |||
1009 | if (default_flash.num_blocks * default_flash.page_per_block > 65536) | ||
1010 | info->row_addr_cycles = 3; | ||
1011 | else | ||
1012 | info->row_addr_cycles = 2; | ||
1013 | |||
1014 | pxa3xx_nand_detect_timing(info, &default_timing); | ||
1015 | default_flash.timing = &default_timing; | ||
1016 | |||
1017 | return 0; | ||
1018 | } | ||
1019 | |||
923 | static int pxa3xx_nand_detect_flash(struct pxa3xx_nand_info *info, | 1020 | static int pxa3xx_nand_detect_flash(struct pxa3xx_nand_info *info, |
924 | const struct pxa3xx_nand_platform_data *pdata) | 1021 | const struct pxa3xx_nand_platform_data *pdata) |
925 | { | 1022 | { |
@@ -927,6 +1024,10 @@ static int pxa3xx_nand_detect_flash(struct pxa3xx_nand_info *info, | |||
927 | uint32_t id = -1; | 1024 | uint32_t id = -1; |
928 | int i; | 1025 | int i; |
929 | 1026 | ||
1027 | if (pdata->keep_config) | ||
1028 | if (pxa3xx_nand_detect_config(info) == 0) | ||
1029 | return 0; | ||
1030 | |||
930 | for (i = 0; i<pdata->num_flash; ++i) { | 1031 | for (i = 0; i<pdata->num_flash; ++i) { |
931 | f = pdata->flash + i; | 1032 | f = pdata->flash + i; |
932 | 1033 | ||
@@ -1078,6 +1179,7 @@ static int pxa3xx_nand_probe(struct platform_device *pdev) | |||
1078 | 1179 | ||
1079 | this = &info->nand_chip; | 1180 | this = &info->nand_chip; |
1080 | mtd->priv = info; | 1181 | mtd->priv = info; |
1182 | mtd->owner = THIS_MODULE; | ||
1081 | 1183 | ||
1082 | info->clk = clk_get(&pdev->dev, NULL); | 1184 | info->clk = clk_get(&pdev->dev, NULL); |
1083 | if (IS_ERR(info->clk)) { | 1185 | if (IS_ERR(info->clk)) { |
@@ -1117,14 +1219,14 @@ static int pxa3xx_nand_probe(struct platform_device *pdev) | |||
1117 | goto fail_put_clk; | 1219 | goto fail_put_clk; |
1118 | } | 1220 | } |
1119 | 1221 | ||
1120 | r = request_mem_region(r->start, r->end - r->start + 1, pdev->name); | 1222 | r = request_mem_region(r->start, resource_size(r), pdev->name); |
1121 | if (r == NULL) { | 1223 | if (r == NULL) { |
1122 | dev_err(&pdev->dev, "failed to request memory resource\n"); | 1224 | dev_err(&pdev->dev, "failed to request memory resource\n"); |
1123 | ret = -EBUSY; | 1225 | ret = -EBUSY; |
1124 | goto fail_put_clk; | 1226 | goto fail_put_clk; |
1125 | } | 1227 | } |
1126 | 1228 | ||
1127 | info->mmio_base = ioremap(r->start, r->end - r->start + 1); | 1229 | info->mmio_base = ioremap(r->start, resource_size(r)); |
1128 | if (info->mmio_base == NULL) { | 1230 | if (info->mmio_base == NULL) { |
1129 | dev_err(&pdev->dev, "ioremap() failed\n"); | 1231 | dev_err(&pdev->dev, "ioremap() failed\n"); |
1130 | ret = -ENODEV; | 1232 | ret = -ENODEV; |
@@ -1173,7 +1275,7 @@ fail_free_buf: | |||
1173 | fail_free_io: | 1275 | fail_free_io: |
1174 | iounmap(info->mmio_base); | 1276 | iounmap(info->mmio_base); |
1175 | fail_free_res: | 1277 | fail_free_res: |
1176 | release_mem_region(r->start, r->end - r->start + 1); | 1278 | release_mem_region(r->start, resource_size(r)); |
1177 | fail_put_clk: | 1279 | fail_put_clk: |
1178 | clk_disable(info->clk); | 1280 | clk_disable(info->clk); |
1179 | clk_put(info->clk); | 1281 | clk_put(info->clk); |
@@ -1186,6 +1288,7 @@ static int pxa3xx_nand_remove(struct platform_device *pdev) | |||
1186 | { | 1288 | { |
1187 | struct mtd_info *mtd = platform_get_drvdata(pdev); | 1289 | struct mtd_info *mtd = platform_get_drvdata(pdev); |
1188 | struct pxa3xx_nand_info *info = mtd->priv; | 1290 | struct pxa3xx_nand_info *info = mtd->priv; |
1291 | struct resource *r; | ||
1189 | 1292 | ||
1190 | platform_set_drvdata(pdev, NULL); | 1293 | platform_set_drvdata(pdev, NULL); |
1191 | 1294 | ||
@@ -1198,6 +1301,14 @@ static int pxa3xx_nand_remove(struct platform_device *pdev) | |||
1198 | info->data_buff, info->data_buff_phys); | 1301 | info->data_buff, info->data_buff_phys); |
1199 | } else | 1302 | } else |
1200 | kfree(info->data_buff); | 1303 | kfree(info->data_buff); |
1304 | |||
1305 | iounmap(info->mmio_base); | ||
1306 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
1307 | release_mem_region(r->start, resource_size(r)); | ||
1308 | |||
1309 | clk_disable(info->clk); | ||
1310 | clk_put(info->clk); | ||
1311 | |||
1201 | kfree(mtd); | 1312 | kfree(mtd); |
1202 | return 0; | 1313 | return 0; |
1203 | } | 1314 | } |
diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c index 821acb08ff1c..2bc896623e2d 100644 --- a/drivers/mtd/nand/sh_flctl.c +++ b/drivers/mtd/nand/sh_flctl.c | |||
@@ -58,7 +58,7 @@ static struct nand_bbt_descr flctl_4secc_smallpage = { | |||
58 | }; | 58 | }; |
59 | 59 | ||
60 | static struct nand_bbt_descr flctl_4secc_largepage = { | 60 | static struct nand_bbt_descr flctl_4secc_largepage = { |
61 | .options = 0, | 61 | .options = NAND_BBT_SCAN2NDPAGE, |
62 | .offs = 58, | 62 | .offs = 58, |
63 | .len = 2, | 63 | .len = 2, |
64 | .pattern = scan_ff_pattern, | 64 | .pattern = scan_ff_pattern, |
@@ -149,7 +149,7 @@ static void wait_wfifo_ready(struct sh_flctl *flctl) | |||
149 | printk(KERN_ERR "wait_wfifo_ready(): Timeout occured \n"); | 149 | printk(KERN_ERR "wait_wfifo_ready(): Timeout occured \n"); |
150 | } | 150 | } |
151 | 151 | ||
152 | static int wait_recfifo_ready(struct sh_flctl *flctl) | 152 | static int wait_recfifo_ready(struct sh_flctl *flctl, int sector_number) |
153 | { | 153 | { |
154 | uint32_t timeout = LOOP_TIMEOUT_MAX; | 154 | uint32_t timeout = LOOP_TIMEOUT_MAX; |
155 | int checked[4]; | 155 | int checked[4]; |
@@ -183,7 +183,12 @@ static int wait_recfifo_ready(struct sh_flctl *flctl) | |||
183 | uint8_t org; | 183 | uint8_t org; |
184 | int index; | 184 | int index; |
185 | 185 | ||
186 | index = data >> 16; | 186 | if (flctl->page_size) |
187 | index = (512 * sector_number) + | ||
188 | (data >> 16); | ||
189 | else | ||
190 | index = data >> 16; | ||
191 | |||
187 | org = flctl->done_buff[index]; | 192 | org = flctl->done_buff[index]; |
188 | flctl->done_buff[index] = org ^ (data & 0xFF); | 193 | flctl->done_buff[index] = org ^ (data & 0xFF); |
189 | checked[i] = 1; | 194 | checked[i] = 1; |
@@ -238,14 +243,14 @@ static void read_fiforeg(struct sh_flctl *flctl, int rlen, int offset) | |||
238 | } | 243 | } |
239 | } | 244 | } |
240 | 245 | ||
241 | static int read_ecfiforeg(struct sh_flctl *flctl, uint8_t *buff) | 246 | static int read_ecfiforeg(struct sh_flctl *flctl, uint8_t *buff, int sector) |
242 | { | 247 | { |
243 | int i; | 248 | int i; |
244 | unsigned long *ecc_buf = (unsigned long *)buff; | 249 | unsigned long *ecc_buf = (unsigned long *)buff; |
245 | void *fifo_addr = (void *)FLECFIFO(flctl); | 250 | void *fifo_addr = (void *)FLECFIFO(flctl); |
246 | 251 | ||
247 | for (i = 0; i < 4; i++) { | 252 | for (i = 0; i < 4; i++) { |
248 | if (wait_recfifo_ready(flctl)) | 253 | if (wait_recfifo_ready(flctl , sector)) |
249 | return 1; | 254 | return 1; |
250 | ecc_buf[i] = readl(fifo_addr); | 255 | ecc_buf[i] = readl(fifo_addr); |
251 | ecc_buf[i] = be32_to_cpu(ecc_buf[i]); | 256 | ecc_buf[i] = be32_to_cpu(ecc_buf[i]); |
@@ -384,7 +389,8 @@ static void execmd_read_page_sector(struct mtd_info *mtd, int page_addr) | |||
384 | read_fiforeg(flctl, 512, 512 * sector); | 389 | read_fiforeg(flctl, 512, 512 * sector); |
385 | 390 | ||
386 | ret = read_ecfiforeg(flctl, | 391 | ret = read_ecfiforeg(flctl, |
387 | &flctl->done_buff[mtd->writesize + 16 * sector]); | 392 | &flctl->done_buff[mtd->writesize + 16 * sector], |
393 | sector); | ||
388 | 394 | ||
389 | if (ret) | 395 | if (ret) |
390 | flctl->hwecc_cant_correct[sector] = 1; | 396 | flctl->hwecc_cant_correct[sector] = 1; |
diff --git a/drivers/mtd/nand/socrates_nand.c b/drivers/mtd/nand/socrates_nand.c new file mode 100644 index 000000000000..a4519a7bd683 --- /dev/null +++ b/drivers/mtd/nand/socrates_nand.c | |||
@@ -0,0 +1,325 @@ | |||
1 | /* | ||
2 | * drivers/mtd/nand/socrates_nand.c | ||
3 | * | ||
4 | * Copyright © 2008 Ilya Yanok, Emcraft Systems | ||
5 | * | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #include <linux/slab.h> | ||
14 | #include <linux/module.h> | ||
15 | #include <linux/mtd/mtd.h> | ||
16 | #include <linux/mtd/nand.h> | ||
17 | #include <linux/mtd/partitions.h> | ||
18 | #include <linux/of_platform.h> | ||
19 | #include <linux/io.h> | ||
20 | |||
21 | #define FPGA_NAND_CMD_MASK (0x7 << 28) | ||
22 | #define FPGA_NAND_CMD_COMMAND (0x0 << 28) | ||
23 | #define FPGA_NAND_CMD_ADDR (0x1 << 28) | ||
24 | #define FPGA_NAND_CMD_READ (0x2 << 28) | ||
25 | #define FPGA_NAND_CMD_WRITE (0x3 << 28) | ||
26 | #define FPGA_NAND_BUSY (0x1 << 15) | ||
27 | #define FPGA_NAND_ENABLE (0x1 << 31) | ||
28 | #define FPGA_NAND_DATA_SHIFT 16 | ||
29 | |||
30 | struct socrates_nand_host { | ||
31 | struct nand_chip nand_chip; | ||
32 | struct mtd_info mtd; | ||
33 | void __iomem *io_base; | ||
34 | struct device *dev; | ||
35 | }; | ||
36 | |||
37 | /** | ||
38 | * socrates_nand_write_buf - write buffer to chip | ||
39 | * @mtd: MTD device structure | ||
40 | * @buf: data buffer | ||
41 | * @len: number of bytes to write | ||
42 | */ | ||
43 | static void socrates_nand_write_buf(struct mtd_info *mtd, | ||
44 | const uint8_t *buf, int len) | ||
45 | { | ||
46 | int i; | ||
47 | struct nand_chip *this = mtd->priv; | ||
48 | struct socrates_nand_host *host = this->priv; | ||
49 | |||
50 | for (i = 0; i < len; i++) { | ||
51 | out_be32(host->io_base, FPGA_NAND_ENABLE | | ||
52 | FPGA_NAND_CMD_WRITE | | ||
53 | (buf[i] << FPGA_NAND_DATA_SHIFT)); | ||
54 | } | ||
55 | } | ||
56 | |||
57 | /** | ||
58 | * socrates_nand_read_buf - read chip data into buffer | ||
59 | * @mtd: MTD device structure | ||
60 | * @buf: buffer to store date | ||
61 | * @len: number of bytes to read | ||
62 | */ | ||
63 | static void socrates_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) | ||
64 | { | ||
65 | int i; | ||
66 | struct nand_chip *this = mtd->priv; | ||
67 | struct socrates_nand_host *host = this->priv; | ||
68 | uint32_t val; | ||
69 | |||
70 | val = FPGA_NAND_ENABLE | FPGA_NAND_CMD_READ; | ||
71 | |||
72 | out_be32(host->io_base, val); | ||
73 | for (i = 0; i < len; i++) { | ||
74 | buf[i] = (in_be32(host->io_base) >> | ||
75 | FPGA_NAND_DATA_SHIFT) & 0xff; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | /** | ||
80 | * socrates_nand_read_byte - read one byte from the chip | ||
81 | * @mtd: MTD device structure | ||
82 | */ | ||
83 | static uint8_t socrates_nand_read_byte(struct mtd_info *mtd) | ||
84 | { | ||
85 | uint8_t byte; | ||
86 | socrates_nand_read_buf(mtd, &byte, sizeof(byte)); | ||
87 | return byte; | ||
88 | } | ||
89 | |||
90 | /** | ||
91 | * socrates_nand_read_word - read one word from the chip | ||
92 | * @mtd: MTD device structure | ||
93 | */ | ||
94 | static uint16_t socrates_nand_read_word(struct mtd_info *mtd) | ||
95 | { | ||
96 | uint16_t word; | ||
97 | socrates_nand_read_buf(mtd, (uint8_t *)&word, sizeof(word)); | ||
98 | return word; | ||
99 | } | ||
100 | |||
101 | /** | ||
102 | * socrates_nand_verify_buf - Verify chip data against buffer | ||
103 | * @mtd: MTD device structure | ||
104 | * @buf: buffer containing the data to compare | ||
105 | * @len: number of bytes to compare | ||
106 | */ | ||
107 | static int socrates_nand_verify_buf(struct mtd_info *mtd, const u8 *buf, | ||
108 | int len) | ||
109 | { | ||
110 | int i; | ||
111 | |||
112 | for (i = 0; i < len; i++) { | ||
113 | if (buf[i] != socrates_nand_read_byte(mtd)) | ||
114 | return -EFAULT; | ||
115 | } | ||
116 | return 0; | ||
117 | } | ||
118 | |||
119 | /* | ||
120 | * Hardware specific access to control-lines | ||
121 | */ | ||
122 | static void socrates_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, | ||
123 | unsigned int ctrl) | ||
124 | { | ||
125 | struct nand_chip *nand_chip = mtd->priv; | ||
126 | struct socrates_nand_host *host = nand_chip->priv; | ||
127 | uint32_t val; | ||
128 | |||
129 | if (cmd == NAND_CMD_NONE) | ||
130 | return; | ||
131 | |||
132 | if (ctrl & NAND_CLE) | ||
133 | val = FPGA_NAND_CMD_COMMAND; | ||
134 | else | ||
135 | val = FPGA_NAND_CMD_ADDR; | ||
136 | |||
137 | if (ctrl & NAND_NCE) | ||
138 | val |= FPGA_NAND_ENABLE; | ||
139 | |||
140 | val |= (cmd & 0xff) << FPGA_NAND_DATA_SHIFT; | ||
141 | |||
142 | out_be32(host->io_base, val); | ||
143 | } | ||
144 | |||
145 | /* | ||
146 | * Read the Device Ready pin. | ||
147 | */ | ||
148 | static int socrates_nand_device_ready(struct mtd_info *mtd) | ||
149 | { | ||
150 | struct nand_chip *nand_chip = mtd->priv; | ||
151 | struct socrates_nand_host *host = nand_chip->priv; | ||
152 | |||
153 | if (in_be32(host->io_base) & FPGA_NAND_BUSY) | ||
154 | return 0; /* busy */ | ||
155 | return 1; | ||
156 | } | ||
157 | |||
158 | #ifdef CONFIG_MTD_PARTITIONS | ||
159 | static const char *part_probes[] = { "cmdlinepart", NULL }; | ||
160 | #endif | ||
161 | |||
162 | /* | ||
163 | * Probe for the NAND device. | ||
164 | */ | ||
165 | static int __devinit socrates_nand_probe(struct of_device *ofdev, | ||
166 | const struct of_device_id *ofid) | ||
167 | { | ||
168 | struct socrates_nand_host *host; | ||
169 | struct mtd_info *mtd; | ||
170 | struct nand_chip *nand_chip; | ||
171 | int res; | ||
172 | |||
173 | #ifdef CONFIG_MTD_PARTITIONS | ||
174 | struct mtd_partition *partitions = NULL; | ||
175 | int num_partitions = 0; | ||
176 | #endif | ||
177 | |||
178 | /* Allocate memory for the device structure (and zero it) */ | ||
179 | host = kzalloc(sizeof(struct socrates_nand_host), GFP_KERNEL); | ||
180 | if (!host) { | ||
181 | printk(KERN_ERR | ||
182 | "socrates_nand: failed to allocate device structure.\n"); | ||
183 | return -ENOMEM; | ||
184 | } | ||
185 | |||
186 | host->io_base = of_iomap(ofdev->node, 0); | ||
187 | if (host->io_base == NULL) { | ||
188 | printk(KERN_ERR "socrates_nand: ioremap failed\n"); | ||
189 | kfree(host); | ||
190 | return -EIO; | ||
191 | } | ||
192 | |||
193 | mtd = &host->mtd; | ||
194 | nand_chip = &host->nand_chip; | ||
195 | host->dev = &ofdev->dev; | ||
196 | |||
197 | nand_chip->priv = host; /* link the private data structures */ | ||
198 | mtd->priv = nand_chip; | ||
199 | mtd->name = "socrates_nand"; | ||
200 | mtd->owner = THIS_MODULE; | ||
201 | mtd->dev.parent = &ofdev->dev; | ||
202 | |||
203 | /*should never be accessed directly */ | ||
204 | nand_chip->IO_ADDR_R = (void *)0xdeadbeef; | ||
205 | nand_chip->IO_ADDR_W = (void *)0xdeadbeef; | ||
206 | |||
207 | nand_chip->cmd_ctrl = socrates_nand_cmd_ctrl; | ||
208 | nand_chip->read_byte = socrates_nand_read_byte; | ||
209 | nand_chip->read_word = socrates_nand_read_word; | ||
210 | nand_chip->write_buf = socrates_nand_write_buf; | ||
211 | nand_chip->read_buf = socrates_nand_read_buf; | ||
212 | nand_chip->verify_buf = socrates_nand_verify_buf; | ||
213 | nand_chip->dev_ready = socrates_nand_device_ready; | ||
214 | |||
215 | nand_chip->ecc.mode = NAND_ECC_SOFT; /* enable ECC */ | ||
216 | |||
217 | /* TODO: I have no idea what real delay is. */ | ||
218 | nand_chip->chip_delay = 20; /* 20us command delay time */ | ||
219 | |||
220 | dev_set_drvdata(&ofdev->dev, host); | ||
221 | |||
222 | /* first scan to find the device and get the page size */ | ||
223 | if (nand_scan_ident(mtd, 1)) { | ||
224 | res = -ENXIO; | ||
225 | goto out; | ||
226 | } | ||
227 | |||
228 | /* second phase scan */ | ||
229 | if (nand_scan_tail(mtd)) { | ||
230 | res = -ENXIO; | ||
231 | goto out; | ||
232 | } | ||
233 | |||
234 | #ifdef CONFIG_MTD_PARTITIONS | ||
235 | #ifdef CONFIG_MTD_CMDLINE_PARTS | ||
236 | num_partitions = parse_mtd_partitions(mtd, part_probes, | ||
237 | &partitions, 0); | ||
238 | if (num_partitions < 0) { | ||
239 | res = num_partitions; | ||
240 | goto release; | ||
241 | } | ||
242 | #endif | ||
243 | |||
244 | #ifdef CONFIG_MTD_OF_PARTS | ||
245 | if (num_partitions == 0) { | ||
246 | num_partitions = of_mtd_parse_partitions(&ofdev->dev, | ||
247 | ofdev->node, | ||
248 | &partitions); | ||
249 | if (num_partitions < 0) { | ||
250 | res = num_partitions; | ||
251 | goto release; | ||
252 | } | ||
253 | } | ||
254 | #endif | ||
255 | if (partitions && (num_partitions > 0)) | ||
256 | res = add_mtd_partitions(mtd, partitions, num_partitions); | ||
257 | else | ||
258 | #endif | ||
259 | res = add_mtd_device(mtd); | ||
260 | |||
261 | if (!res) | ||
262 | return res; | ||
263 | |||
264 | #ifdef CONFIG_MTD_PARTITIONS | ||
265 | release: | ||
266 | #endif | ||
267 | nand_release(mtd); | ||
268 | |||
269 | out: | ||
270 | dev_set_drvdata(&ofdev->dev, NULL); | ||
271 | iounmap(host->io_base); | ||
272 | kfree(host); | ||
273 | return res; | ||
274 | } | ||
275 | |||
276 | /* | ||
277 | * Remove a NAND device. | ||
278 | */ | ||
279 | static int __devexit socrates_nand_remove(struct of_device *ofdev) | ||
280 | { | ||
281 | struct socrates_nand_host *host = dev_get_drvdata(&ofdev->dev); | ||
282 | struct mtd_info *mtd = &host->mtd; | ||
283 | |||
284 | nand_release(mtd); | ||
285 | |||
286 | dev_set_drvdata(&ofdev->dev, NULL); | ||
287 | iounmap(host->io_base); | ||
288 | kfree(host); | ||
289 | |||
290 | return 0; | ||
291 | } | ||
292 | |||
293 | static struct of_device_id socrates_nand_match[] = | ||
294 | { | ||
295 | { | ||
296 | .compatible = "abb,socrates-nand", | ||
297 | }, | ||
298 | {}, | ||
299 | }; | ||
300 | |||
301 | MODULE_DEVICE_TABLE(of, socrates_nand_match); | ||
302 | |||
303 | static struct of_platform_driver socrates_nand_driver = { | ||
304 | .name = "socrates_nand", | ||
305 | .match_table = socrates_nand_match, | ||
306 | .probe = socrates_nand_probe, | ||
307 | .remove = __devexit_p(socrates_nand_remove), | ||
308 | }; | ||
309 | |||
310 | static int __init socrates_nand_init(void) | ||
311 | { | ||
312 | return of_register_platform_driver(&socrates_nand_driver); | ||
313 | } | ||
314 | |||
315 | static void __exit socrates_nand_exit(void) | ||
316 | { | ||
317 | of_unregister_platform_driver(&socrates_nand_driver); | ||
318 | } | ||
319 | |||
320 | module_init(socrates_nand_init); | ||
321 | module_exit(socrates_nand_exit); | ||
322 | |||
323 | MODULE_LICENSE("GPL"); | ||
324 | MODULE_AUTHOR("Ilya Yanok"); | ||
325 | MODULE_DESCRIPTION("NAND driver for Socrates board"); | ||
diff --git a/drivers/mtd/nand/txx9ndfmc.c b/drivers/mtd/nand/txx9ndfmc.c new file mode 100644 index 000000000000..812479264896 --- /dev/null +++ b/drivers/mtd/nand/txx9ndfmc.c | |||
@@ -0,0 +1,428 @@ | |||
1 | /* | ||
2 | * TXx9 NAND flash memory controller driver | ||
3 | * Based on RBTX49xx patch from CELF patch archive. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * (C) Copyright TOSHIBA CORPORATION 2004-2007 | ||
10 | * All Rights Reserved. | ||
11 | */ | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/slab.h> | ||
14 | #include <linux/module.h> | ||
15 | #include <linux/platform_device.h> | ||
16 | #include <linux/delay.h> | ||
17 | #include <linux/mtd/mtd.h> | ||
18 | #include <linux/mtd/nand.h> | ||
19 | #include <linux/mtd/nand_ecc.h> | ||
20 | #include <linux/mtd/partitions.h> | ||
21 | #include <linux/io.h> | ||
22 | #include <asm/txx9/ndfmc.h> | ||
23 | |||
24 | /* TXX9 NDFMC Registers */ | ||
25 | #define TXX9_NDFDTR 0x00 | ||
26 | #define TXX9_NDFMCR 0x04 | ||
27 | #define TXX9_NDFSR 0x08 | ||
28 | #define TXX9_NDFISR 0x0c | ||
29 | #define TXX9_NDFIMR 0x10 | ||
30 | #define TXX9_NDFSPR 0x14 | ||
31 | #define TXX9_NDFRSTR 0x18 /* not TX4939 */ | ||
32 | |||
33 | /* NDFMCR : NDFMC Mode Control */ | ||
34 | #define TXX9_NDFMCR_WE 0x80 | ||
35 | #define TXX9_NDFMCR_ECC_ALL 0x60 | ||
36 | #define TXX9_NDFMCR_ECC_RESET 0x60 | ||
37 | #define TXX9_NDFMCR_ECC_READ 0x40 | ||
38 | #define TXX9_NDFMCR_ECC_ON 0x20 | ||
39 | #define TXX9_NDFMCR_ECC_OFF 0x00 | ||
40 | #define TXX9_NDFMCR_CE 0x10 | ||
41 | #define TXX9_NDFMCR_BSPRT 0x04 /* TX4925/TX4926 only */ | ||
42 | #define TXX9_NDFMCR_ALE 0x02 | ||
43 | #define TXX9_NDFMCR_CLE 0x01 | ||
44 | /* TX4939 only */ | ||
45 | #define TXX9_NDFMCR_X16 0x0400 | ||
46 | #define TXX9_NDFMCR_DMAREQ_MASK 0x0300 | ||
47 | #define TXX9_NDFMCR_DMAREQ_NODMA 0x0000 | ||
48 | #define TXX9_NDFMCR_DMAREQ_128 0x0100 | ||
49 | #define TXX9_NDFMCR_DMAREQ_256 0x0200 | ||
50 | #define TXX9_NDFMCR_DMAREQ_512 0x0300 | ||
51 | #define TXX9_NDFMCR_CS_MASK 0x0c | ||
52 | #define TXX9_NDFMCR_CS(ch) ((ch) << 2) | ||
53 | |||
54 | /* NDFMCR : NDFMC Status */ | ||
55 | #define TXX9_NDFSR_BUSY 0x80 | ||
56 | /* TX4939 only */ | ||
57 | #define TXX9_NDFSR_DMARUN 0x40 | ||
58 | |||
59 | /* NDFMCR : NDFMC Reset */ | ||
60 | #define TXX9_NDFRSTR_RST 0x01 | ||
61 | |||
62 | struct txx9ndfmc_priv { | ||
63 | struct platform_device *dev; | ||
64 | struct nand_chip chip; | ||
65 | struct mtd_info mtd; | ||
66 | int cs; | ||
67 | char mtdname[BUS_ID_SIZE + 2]; | ||
68 | }; | ||
69 | |||
70 | #define MAX_TXX9NDFMC_DEV 4 | ||
71 | struct txx9ndfmc_drvdata { | ||
72 | struct mtd_info *mtds[MAX_TXX9NDFMC_DEV]; | ||
73 | void __iomem *base; | ||
74 | unsigned char hold; /* in gbusclock */ | ||
75 | unsigned char spw; /* in gbusclock */ | ||
76 | struct nand_hw_control hw_control; | ||
77 | #ifdef CONFIG_MTD_PARTITIONS | ||
78 | struct mtd_partition *parts[MAX_TXX9NDFMC_DEV]; | ||
79 | #endif | ||
80 | }; | ||
81 | |||
82 | static struct platform_device *mtd_to_platdev(struct mtd_info *mtd) | ||
83 | { | ||
84 | struct nand_chip *chip = mtd->priv; | ||
85 | struct txx9ndfmc_priv *txx9_priv = chip->priv; | ||
86 | return txx9_priv->dev; | ||
87 | } | ||
88 | |||
89 | static void __iomem *ndregaddr(struct platform_device *dev, unsigned int reg) | ||
90 | { | ||
91 | struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev); | ||
92 | struct txx9ndfmc_platform_data *plat = dev->dev.platform_data; | ||
93 | |||
94 | return drvdata->base + (reg << plat->shift); | ||
95 | } | ||
96 | |||
97 | static u32 txx9ndfmc_read(struct platform_device *dev, unsigned int reg) | ||
98 | { | ||
99 | return __raw_readl(ndregaddr(dev, reg)); | ||
100 | } | ||
101 | |||
102 | static void txx9ndfmc_write(struct platform_device *dev, | ||
103 | u32 val, unsigned int reg) | ||
104 | { | ||
105 | __raw_writel(val, ndregaddr(dev, reg)); | ||
106 | } | ||
107 | |||
108 | static uint8_t txx9ndfmc_read_byte(struct mtd_info *mtd) | ||
109 | { | ||
110 | struct platform_device *dev = mtd_to_platdev(mtd); | ||
111 | |||
112 | return txx9ndfmc_read(dev, TXX9_NDFDTR); | ||
113 | } | ||
114 | |||
115 | static void txx9ndfmc_write_buf(struct mtd_info *mtd, const uint8_t *buf, | ||
116 | int len) | ||
117 | { | ||
118 | struct platform_device *dev = mtd_to_platdev(mtd); | ||
119 | void __iomem *ndfdtr = ndregaddr(dev, TXX9_NDFDTR); | ||
120 | u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR); | ||
121 | |||
122 | txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_WE, TXX9_NDFMCR); | ||
123 | while (len--) | ||
124 | __raw_writel(*buf++, ndfdtr); | ||
125 | txx9ndfmc_write(dev, mcr, TXX9_NDFMCR); | ||
126 | } | ||
127 | |||
128 | static void txx9ndfmc_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) | ||
129 | { | ||
130 | struct platform_device *dev = mtd_to_platdev(mtd); | ||
131 | void __iomem *ndfdtr = ndregaddr(dev, TXX9_NDFDTR); | ||
132 | |||
133 | while (len--) | ||
134 | *buf++ = __raw_readl(ndfdtr); | ||
135 | } | ||
136 | |||
137 | static int txx9ndfmc_verify_buf(struct mtd_info *mtd, const uint8_t *buf, | ||
138 | int len) | ||
139 | { | ||
140 | struct platform_device *dev = mtd_to_platdev(mtd); | ||
141 | void __iomem *ndfdtr = ndregaddr(dev, TXX9_NDFDTR); | ||
142 | |||
143 | while (len--) | ||
144 | if (*buf++ != (uint8_t)__raw_readl(ndfdtr)) | ||
145 | return -EFAULT; | ||
146 | return 0; | ||
147 | } | ||
148 | |||
149 | static void txx9ndfmc_cmd_ctrl(struct mtd_info *mtd, int cmd, | ||
150 | unsigned int ctrl) | ||
151 | { | ||
152 | struct nand_chip *chip = mtd->priv; | ||
153 | struct txx9ndfmc_priv *txx9_priv = chip->priv; | ||
154 | struct platform_device *dev = txx9_priv->dev; | ||
155 | struct txx9ndfmc_platform_data *plat = dev->dev.platform_data; | ||
156 | |||
157 | if (ctrl & NAND_CTRL_CHANGE) { | ||
158 | u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR); | ||
159 | |||
160 | mcr &= ~(TXX9_NDFMCR_CLE | TXX9_NDFMCR_ALE | TXX9_NDFMCR_CE); | ||
161 | mcr |= ctrl & NAND_CLE ? TXX9_NDFMCR_CLE : 0; | ||
162 | mcr |= ctrl & NAND_ALE ? TXX9_NDFMCR_ALE : 0; | ||
163 | /* TXX9_NDFMCR_CE bit is 0:high 1:low */ | ||
164 | mcr |= ctrl & NAND_NCE ? TXX9_NDFMCR_CE : 0; | ||
165 | if (txx9_priv->cs >= 0 && (ctrl & NAND_NCE)) { | ||
166 | mcr &= ~TXX9_NDFMCR_CS_MASK; | ||
167 | mcr |= TXX9_NDFMCR_CS(txx9_priv->cs); | ||
168 | } | ||
169 | txx9ndfmc_write(dev, mcr, TXX9_NDFMCR); | ||
170 | } | ||
171 | if (cmd != NAND_CMD_NONE) | ||
172 | txx9ndfmc_write(dev, cmd & 0xff, TXX9_NDFDTR); | ||
173 | if (plat->flags & NDFMC_PLAT_FLAG_DUMMYWRITE) { | ||
174 | /* dummy write to update external latch */ | ||
175 | if ((ctrl & NAND_CTRL_CHANGE) && cmd == NAND_CMD_NONE) | ||
176 | txx9ndfmc_write(dev, 0, TXX9_NDFDTR); | ||
177 | } | ||
178 | mmiowb(); | ||
179 | } | ||
180 | |||
181 | static int txx9ndfmc_dev_ready(struct mtd_info *mtd) | ||
182 | { | ||
183 | struct platform_device *dev = mtd_to_platdev(mtd); | ||
184 | |||
185 | return !(txx9ndfmc_read(dev, TXX9_NDFSR) & TXX9_NDFSR_BUSY); | ||
186 | } | ||
187 | |||
188 | static int txx9ndfmc_calculate_ecc(struct mtd_info *mtd, const uint8_t *dat, | ||
189 | uint8_t *ecc_code) | ||
190 | { | ||
191 | struct platform_device *dev = mtd_to_platdev(mtd); | ||
192 | u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR); | ||
193 | |||
194 | mcr &= ~TXX9_NDFMCR_ECC_ALL; | ||
195 | txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_OFF, TXX9_NDFMCR); | ||
196 | txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_READ, TXX9_NDFMCR); | ||
197 | ecc_code[1] = txx9ndfmc_read(dev, TXX9_NDFDTR); | ||
198 | ecc_code[0] = txx9ndfmc_read(dev, TXX9_NDFDTR); | ||
199 | ecc_code[2] = txx9ndfmc_read(dev, TXX9_NDFDTR); | ||
200 | txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_OFF, TXX9_NDFMCR); | ||
201 | return 0; | ||
202 | } | ||
203 | |||
204 | static void txx9ndfmc_enable_hwecc(struct mtd_info *mtd, int mode) | ||
205 | { | ||
206 | struct platform_device *dev = mtd_to_platdev(mtd); | ||
207 | u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR); | ||
208 | |||
209 | mcr &= ~TXX9_NDFMCR_ECC_ALL; | ||
210 | txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_RESET, TXX9_NDFMCR); | ||
211 | txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_OFF, TXX9_NDFMCR); | ||
212 | txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_ON, TXX9_NDFMCR); | ||
213 | } | ||
214 | |||
215 | static void txx9ndfmc_initialize(struct platform_device *dev) | ||
216 | { | ||
217 | struct txx9ndfmc_platform_data *plat = dev->dev.platform_data; | ||
218 | struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev); | ||
219 | int tmout = 100; | ||
220 | |||
221 | if (plat->flags & NDFMC_PLAT_FLAG_NO_RSTR) | ||
222 | ; /* no NDFRSTR. Write to NDFSPR resets the NDFMC. */ | ||
223 | else { | ||
224 | /* reset NDFMC */ | ||
225 | txx9ndfmc_write(dev, | ||
226 | txx9ndfmc_read(dev, TXX9_NDFRSTR) | | ||
227 | TXX9_NDFRSTR_RST, | ||
228 | TXX9_NDFRSTR); | ||
229 | while (txx9ndfmc_read(dev, TXX9_NDFRSTR) & TXX9_NDFRSTR_RST) { | ||
230 | if (--tmout == 0) { | ||
231 | dev_err(&dev->dev, "reset failed.\n"); | ||
232 | break; | ||
233 | } | ||
234 | udelay(1); | ||
235 | } | ||
236 | } | ||
237 | /* setup Hold Time, Strobe Pulse Width */ | ||
238 | txx9ndfmc_write(dev, (drvdata->hold << 4) | drvdata->spw, TXX9_NDFSPR); | ||
239 | txx9ndfmc_write(dev, | ||
240 | (plat->flags & NDFMC_PLAT_FLAG_USE_BSPRT) ? | ||
241 | TXX9_NDFMCR_BSPRT : 0, TXX9_NDFMCR); | ||
242 | } | ||
243 | |||
244 | #define TXX9NDFMC_NS_TO_CYC(gbusclk, ns) \ | ||
245 | DIV_ROUND_UP((ns) * DIV_ROUND_UP(gbusclk, 1000), 1000000) | ||
246 | |||
247 | static int __init txx9ndfmc_probe(struct platform_device *dev) | ||
248 | { | ||
249 | struct txx9ndfmc_platform_data *plat = dev->dev.platform_data; | ||
250 | #ifdef CONFIG_MTD_PARTITIONS | ||
251 | static const char *probes[] = { "cmdlinepart", NULL }; | ||
252 | #endif | ||
253 | int hold, spw; | ||
254 | int i; | ||
255 | struct txx9ndfmc_drvdata *drvdata; | ||
256 | unsigned long gbusclk = plat->gbus_clock; | ||
257 | struct resource *res; | ||
258 | |||
259 | res = platform_get_resource(dev, IORESOURCE_MEM, 0); | ||
260 | if (!res) | ||
261 | return -ENODEV; | ||
262 | drvdata = devm_kzalloc(&dev->dev, sizeof(*drvdata), GFP_KERNEL); | ||
263 | if (!drvdata) | ||
264 | return -ENOMEM; | ||
265 | if (!devm_request_mem_region(&dev->dev, res->start, | ||
266 | resource_size(res), dev_name(&dev->dev))) | ||
267 | return -EBUSY; | ||
268 | drvdata->base = devm_ioremap(&dev->dev, res->start, | ||
269 | resource_size(res)); | ||
270 | if (!drvdata->base) | ||
271 | return -EBUSY; | ||
272 | |||
273 | hold = plat->hold ?: 20; /* tDH */ | ||
274 | spw = plat->spw ?: 90; /* max(tREADID, tWP, tRP) */ | ||
275 | |||
276 | hold = TXX9NDFMC_NS_TO_CYC(gbusclk, hold); | ||
277 | spw = TXX9NDFMC_NS_TO_CYC(gbusclk, spw); | ||
278 | if (plat->flags & NDFMC_PLAT_FLAG_HOLDADD) | ||
279 | hold -= 2; /* actual hold time : (HOLD + 2) BUSCLK */ | ||
280 | spw -= 1; /* actual wait time : (SPW + 1) BUSCLK */ | ||
281 | hold = clamp(hold, 1, 15); | ||
282 | drvdata->hold = hold; | ||
283 | spw = clamp(spw, 1, 15); | ||
284 | drvdata->spw = spw; | ||
285 | dev_info(&dev->dev, "CLK:%ldMHz HOLD:%d SPW:%d\n", | ||
286 | (gbusclk + 500000) / 1000000, hold, spw); | ||
287 | |||
288 | spin_lock_init(&drvdata->hw_control.lock); | ||
289 | init_waitqueue_head(&drvdata->hw_control.wq); | ||
290 | |||
291 | platform_set_drvdata(dev, drvdata); | ||
292 | txx9ndfmc_initialize(dev); | ||
293 | |||
294 | for (i = 0; i < MAX_TXX9NDFMC_DEV; i++) { | ||
295 | struct txx9ndfmc_priv *txx9_priv; | ||
296 | struct nand_chip *chip; | ||
297 | struct mtd_info *mtd; | ||
298 | #ifdef CONFIG_MTD_PARTITIONS | ||
299 | int nr_parts; | ||
300 | #endif | ||
301 | |||
302 | if (!(plat->ch_mask & (1 << i))) | ||
303 | continue; | ||
304 | txx9_priv = kzalloc(sizeof(struct txx9ndfmc_priv), | ||
305 | GFP_KERNEL); | ||
306 | if (!txx9_priv) { | ||
307 | dev_err(&dev->dev, "Unable to allocate " | ||
308 | "TXx9 NDFMC MTD device structure.\n"); | ||
309 | continue; | ||
310 | } | ||
311 | chip = &txx9_priv->chip; | ||
312 | mtd = &txx9_priv->mtd; | ||
313 | mtd->owner = THIS_MODULE; | ||
314 | |||
315 | mtd->priv = chip; | ||
316 | |||
317 | chip->read_byte = txx9ndfmc_read_byte; | ||
318 | chip->read_buf = txx9ndfmc_read_buf; | ||
319 | chip->write_buf = txx9ndfmc_write_buf; | ||
320 | chip->verify_buf = txx9ndfmc_verify_buf; | ||
321 | chip->cmd_ctrl = txx9ndfmc_cmd_ctrl; | ||
322 | chip->dev_ready = txx9ndfmc_dev_ready; | ||
323 | chip->ecc.calculate = txx9ndfmc_calculate_ecc; | ||
324 | chip->ecc.correct = nand_correct_data; | ||
325 | chip->ecc.hwctl = txx9ndfmc_enable_hwecc; | ||
326 | chip->ecc.mode = NAND_ECC_HW; | ||
327 | chip->ecc.size = 256; | ||
328 | chip->ecc.bytes = 3; | ||
329 | chip->chip_delay = 100; | ||
330 | chip->controller = &drvdata->hw_control; | ||
331 | |||
332 | chip->priv = txx9_priv; | ||
333 | txx9_priv->dev = dev; | ||
334 | |||
335 | if (plat->ch_mask != 1) { | ||
336 | txx9_priv->cs = i; | ||
337 | sprintf(txx9_priv->mtdname, "%s.%u", | ||
338 | dev_name(&dev->dev), i); | ||
339 | } else { | ||
340 | txx9_priv->cs = -1; | ||
341 | strcpy(txx9_priv->mtdname, dev_name(&dev->dev)); | ||
342 | } | ||
343 | if (plat->wide_mask & (1 << i)) | ||
344 | chip->options |= NAND_BUSWIDTH_16; | ||
345 | |||
346 | if (nand_scan(mtd, 1)) { | ||
347 | kfree(txx9_priv); | ||
348 | continue; | ||
349 | } | ||
350 | mtd->name = txx9_priv->mtdname; | ||
351 | |||
352 | #ifdef CONFIG_MTD_PARTITIONS | ||
353 | nr_parts = parse_mtd_partitions(mtd, probes, | ||
354 | &drvdata->parts[i], 0); | ||
355 | if (nr_parts > 0) | ||
356 | add_mtd_partitions(mtd, drvdata->parts[i], nr_parts); | ||
357 | #endif | ||
358 | add_mtd_device(mtd); | ||
359 | drvdata->mtds[i] = mtd; | ||
360 | } | ||
361 | |||
362 | return 0; | ||
363 | } | ||
364 | |||
365 | static int __exit txx9ndfmc_remove(struct platform_device *dev) | ||
366 | { | ||
367 | struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev); | ||
368 | int i; | ||
369 | |||
370 | platform_set_drvdata(dev, NULL); | ||
371 | if (!drvdata) | ||
372 | return 0; | ||
373 | for (i = 0; i < MAX_TXX9NDFMC_DEV; i++) { | ||
374 | struct mtd_info *mtd = drvdata->mtds[i]; | ||
375 | struct nand_chip *chip; | ||
376 | struct txx9ndfmc_priv *txx9_priv; | ||
377 | |||
378 | if (!mtd) | ||
379 | continue; | ||
380 | chip = mtd->priv; | ||
381 | txx9_priv = chip->priv; | ||
382 | |||
383 | #ifdef CONFIG_MTD_PARTITIONS | ||
384 | del_mtd_partitions(mtd); | ||
385 | kfree(drvdata->parts[i]); | ||
386 | #endif | ||
387 | del_mtd_device(mtd); | ||
388 | kfree(txx9_priv); | ||
389 | } | ||
390 | return 0; | ||
391 | } | ||
392 | |||
393 | #ifdef CONFIG_PM | ||
394 | static int txx9ndfmc_resume(struct platform_device *dev) | ||
395 | { | ||
396 | if (platform_get_drvdata(dev)) | ||
397 | txx9ndfmc_initialize(dev); | ||
398 | return 0; | ||
399 | } | ||
400 | #else | ||
401 | #define txx9ndfmc_resume NULL | ||
402 | #endif | ||
403 | |||
404 | static struct platform_driver txx9ndfmc_driver = { | ||
405 | .remove = __exit_p(txx9ndfmc_remove), | ||
406 | .resume = txx9ndfmc_resume, | ||
407 | .driver = { | ||
408 | .name = "txx9ndfmc", | ||
409 | .owner = THIS_MODULE, | ||
410 | }, | ||
411 | }; | ||
412 | |||
413 | static int __init txx9ndfmc_init(void) | ||
414 | { | ||
415 | return platform_driver_probe(&txx9ndfmc_driver, txx9ndfmc_probe); | ||
416 | } | ||
417 | |||
418 | static void __exit txx9ndfmc_exit(void) | ||
419 | { | ||
420 | platform_driver_unregister(&txx9ndfmc_driver); | ||
421 | } | ||
422 | |||
423 | module_init(txx9ndfmc_init); | ||
424 | module_exit(txx9ndfmc_exit); | ||
425 | |||
426 | MODULE_LICENSE("GPL"); | ||
427 | MODULE_DESCRIPTION("TXx9 SoC NAND flash controller driver"); | ||
428 | MODULE_ALIAS("platform:txx9ndfmc"); | ||
diff --git a/drivers/mtd/nftlcore.c b/drivers/mtd/nftlcore.c index d1c4546513f7..e3f8495a94c2 100644 --- a/drivers/mtd/nftlcore.c +++ b/drivers/mtd/nftlcore.c | |||
@@ -15,11 +15,11 @@ | |||
15 | #include <asm/errno.h> | 15 | #include <asm/errno.h> |
16 | #include <asm/io.h> | 16 | #include <asm/io.h> |
17 | #include <asm/uaccess.h> | 17 | #include <asm/uaccess.h> |
18 | #include <linux/miscdevice.h> | ||
19 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
20 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
21 | #include <linux/init.h> | 20 | #include <linux/init.h> |
22 | #include <linux/hdreg.h> | 21 | #include <linux/hdreg.h> |
22 | #include <linux/blkdev.h> | ||
23 | 23 | ||
24 | #include <linux/kmod.h> | 24 | #include <linux/kmod.h> |
25 | #include <linux/mtd/mtd.h> | 25 | #include <linux/mtd/mtd.h> |
@@ -818,3 +818,4 @@ module_exit(cleanup_nftl); | |||
818 | MODULE_LICENSE("GPL"); | 818 | MODULE_LICENSE("GPL"); |
819 | MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>, Fabrice Bellard <fabrice.bellard@netgem.com> et al."); | 819 | MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>, Fabrice Bellard <fabrice.bellard@netgem.com> et al."); |
820 | MODULE_DESCRIPTION("Support code for NAND Flash Translation Layer, used on M-Systems DiskOnChip 2000 and Millennium"); | 820 | MODULE_DESCRIPTION("Support code for NAND Flash Translation Layer, used on M-Systems DiskOnChip 2000 and Millennium"); |
821 | MODULE_ALIAS_BLOCKDEV_MAJOR(NFTL_MAJOR); | ||
diff --git a/drivers/mtd/ofpart.c b/drivers/mtd/ofpart.c index 9e45b3f39c0e..3e164f0c9295 100644 --- a/drivers/mtd/ofpart.c +++ b/drivers/mtd/ofpart.c | |||
@@ -46,6 +46,13 @@ int __devinit of_mtd_parse_partitions(struct device *dev, | |||
46 | const u32 *reg; | 46 | const u32 *reg; |
47 | int len; | 47 | int len; |
48 | 48 | ||
49 | /* check if this is a partition node */ | ||
50 | partname = of_get_property(pp, "name", &len); | ||
51 | if (strcmp(partname, "partition") != 0) { | ||
52 | nr_parts--; | ||
53 | continue; | ||
54 | } | ||
55 | |||
49 | reg = of_get_property(pp, "reg", &len); | 56 | reg = of_get_property(pp, "reg", &len); |
50 | if (!reg || (len != 2 * sizeof(u32))) { | 57 | if (!reg || (len != 2 * sizeof(u32))) { |
51 | of_node_put(pp); | 58 | of_node_put(pp); |
diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c index 77a4f1446156..f2e9de1414df 100644 --- a/drivers/mtd/onenand/omap2.c +++ b/drivers/mtd/onenand/omap2.c | |||
@@ -294,6 +294,10 @@ static int omap3_onenand_read_bufferram(struct mtd_info *mtd, int area, | |||
294 | if (bram_offset & 3 || (size_t)buf & 3 || count < 384) | 294 | if (bram_offset & 3 || (size_t)buf & 3 || count < 384) |
295 | goto out_copy; | 295 | goto out_copy; |
296 | 296 | ||
297 | /* panic_write() may be in an interrupt context */ | ||
298 | if (in_interrupt()) | ||
299 | goto out_copy; | ||
300 | |||
297 | if (buf >= high_memory) { | 301 | if (buf >= high_memory) { |
298 | struct page *p1; | 302 | struct page *p1; |
299 | 303 | ||
@@ -672,6 +676,8 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev) | |||
672 | c->mtd.priv = &c->onenand; | 676 | c->mtd.priv = &c->onenand; |
673 | c->mtd.owner = THIS_MODULE; | 677 | c->mtd.owner = THIS_MODULE; |
674 | 678 | ||
679 | c->mtd.dev.parent = &pdev->dev; | ||
680 | |||
675 | if (c->dma_channel >= 0) { | 681 | if (c->dma_channel >= 0) { |
676 | struct onenand_chip *this = &c->onenand; | 682 | struct onenand_chip *this = &c->onenand; |
677 | 683 | ||
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index 529af271db17..30d6999e5f9f 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c | |||
@@ -1455,7 +1455,8 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to, | |||
1455 | struct mtd_oob_ops *ops) | 1455 | struct mtd_oob_ops *ops) |
1456 | { | 1456 | { |
1457 | struct onenand_chip *this = mtd->priv; | 1457 | struct onenand_chip *this = mtd->priv; |
1458 | int written = 0, column, thislen, subpage; | 1458 | int written = 0, column, thislen = 0, subpage = 0; |
1459 | int prev = 0, prevlen = 0, prev_subpage = 0, first = 1; | ||
1459 | int oobwritten = 0, oobcolumn, thisooblen, oobsize; | 1460 | int oobwritten = 0, oobcolumn, thisooblen, oobsize; |
1460 | size_t len = ops->len; | 1461 | size_t len = ops->len; |
1461 | size_t ooblen = ops->ooblen; | 1462 | size_t ooblen = ops->ooblen; |
@@ -1482,6 +1483,10 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to, | |||
1482 | return -EINVAL; | 1483 | return -EINVAL; |
1483 | } | 1484 | } |
1484 | 1485 | ||
1486 | /* Check zero length */ | ||
1487 | if (!len) | ||
1488 | return 0; | ||
1489 | |||
1485 | if (ops->mode == MTD_OOB_AUTO) | 1490 | if (ops->mode == MTD_OOB_AUTO) |
1486 | oobsize = this->ecclayout->oobavail; | 1491 | oobsize = this->ecclayout->oobavail; |
1487 | else | 1492 | else |
@@ -1492,79 +1497,121 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to, | |||
1492 | column = to & (mtd->writesize - 1); | 1497 | column = to & (mtd->writesize - 1); |
1493 | 1498 | ||
1494 | /* Loop until all data write */ | 1499 | /* Loop until all data write */ |
1495 | while (written < len) { | 1500 | while (1) { |
1496 | u_char *wbuf = (u_char *) buf; | 1501 | if (written < len) { |
1502 | u_char *wbuf = (u_char *) buf; | ||
1497 | 1503 | ||
1498 | thislen = min_t(int, mtd->writesize - column, len - written); | 1504 | thislen = min_t(int, mtd->writesize - column, len - written); |
1499 | thisooblen = min_t(int, oobsize - oobcolumn, ooblen - oobwritten); | 1505 | thisooblen = min_t(int, oobsize - oobcolumn, ooblen - oobwritten); |
1500 | 1506 | ||
1501 | cond_resched(); | 1507 | cond_resched(); |
1502 | 1508 | ||
1503 | this->command(mtd, ONENAND_CMD_BUFFERRAM, to, thislen); | 1509 | this->command(mtd, ONENAND_CMD_BUFFERRAM, to, thislen); |
1504 | 1510 | ||
1505 | /* Partial page write */ | 1511 | /* Partial page write */ |
1506 | subpage = thislen < mtd->writesize; | 1512 | subpage = thislen < mtd->writesize; |
1507 | if (subpage) { | 1513 | if (subpage) { |
1508 | memset(this->page_buf, 0xff, mtd->writesize); | 1514 | memset(this->page_buf, 0xff, mtd->writesize); |
1509 | memcpy(this->page_buf + column, buf, thislen); | 1515 | memcpy(this->page_buf + column, buf, thislen); |
1510 | wbuf = this->page_buf; | 1516 | wbuf = this->page_buf; |
1511 | } | 1517 | } |
1512 | 1518 | ||
1513 | this->write_bufferram(mtd, ONENAND_DATARAM, wbuf, 0, mtd->writesize); | 1519 | this->write_bufferram(mtd, ONENAND_DATARAM, wbuf, 0, mtd->writesize); |
1514 | 1520 | ||
1515 | if (oob) { | 1521 | if (oob) { |
1516 | oobbuf = this->oob_buf; | 1522 | oobbuf = this->oob_buf; |
1517 | 1523 | ||
1518 | /* We send data to spare ram with oobsize | 1524 | /* We send data to spare ram with oobsize |
1519 | * to prevent byte access */ | 1525 | * to prevent byte access */ |
1520 | memset(oobbuf, 0xff, mtd->oobsize); | 1526 | memset(oobbuf, 0xff, mtd->oobsize); |
1521 | if (ops->mode == MTD_OOB_AUTO) | 1527 | if (ops->mode == MTD_OOB_AUTO) |
1522 | onenand_fill_auto_oob(mtd, oobbuf, oob, oobcolumn, thisooblen); | 1528 | onenand_fill_auto_oob(mtd, oobbuf, oob, oobcolumn, thisooblen); |
1523 | else | 1529 | else |
1524 | memcpy(oobbuf + oobcolumn, oob, thisooblen); | 1530 | memcpy(oobbuf + oobcolumn, oob, thisooblen); |
1525 | 1531 | ||
1526 | oobwritten += thisooblen; | 1532 | oobwritten += thisooblen; |
1527 | oob += thisooblen; | 1533 | oob += thisooblen; |
1528 | oobcolumn = 0; | 1534 | oobcolumn = 0; |
1535 | } else | ||
1536 | oobbuf = (u_char *) ffchars; | ||
1537 | |||
1538 | this->write_bufferram(mtd, ONENAND_SPARERAM, oobbuf, 0, mtd->oobsize); | ||
1529 | } else | 1539 | } else |
1530 | oobbuf = (u_char *) ffchars; | 1540 | ONENAND_SET_NEXT_BUFFERRAM(this); |
1531 | 1541 | ||
1532 | this->write_bufferram(mtd, ONENAND_SPARERAM, oobbuf, 0, mtd->oobsize); | 1542 | /* |
1543 | * 2 PLANE, MLC, and Flex-OneNAND doesn't support | ||
1544 | * write-while-programe feature. | ||
1545 | */ | ||
1546 | if (!ONENAND_IS_2PLANE(this) && !first) { | ||
1547 | ONENAND_SET_PREV_BUFFERRAM(this); | ||
1533 | 1548 | ||
1534 | this->command(mtd, ONENAND_CMD_PROG, to, mtd->writesize); | 1549 | ret = this->wait(mtd, FL_WRITING); |
1535 | 1550 | ||
1536 | ret = this->wait(mtd, FL_WRITING); | 1551 | /* In partial page write we don't update bufferram */ |
1552 | onenand_update_bufferram(mtd, prev, !ret && !prev_subpage); | ||
1553 | if (ret) { | ||
1554 | written -= prevlen; | ||
1555 | printk(KERN_ERR "onenand_write_ops_nolock: write filaed %d\n", ret); | ||
1556 | break; | ||
1557 | } | ||
1537 | 1558 | ||
1538 | /* In partial page write we don't update bufferram */ | 1559 | if (written == len) { |
1539 | onenand_update_bufferram(mtd, to, !ret && !subpage); | 1560 | /* Only check verify write turn on */ |
1540 | if (ONENAND_IS_2PLANE(this)) { | 1561 | ret = onenand_verify(mtd, buf - len, to - len, len); |
1541 | ONENAND_SET_BUFFERRAM1(this); | 1562 | if (ret) |
1542 | onenand_update_bufferram(mtd, to + this->writesize, !ret && !subpage); | 1563 | printk(KERN_ERR "onenand_write_ops_nolock: verify failed %d\n", ret); |
1543 | } | 1564 | break; |
1565 | } | ||
1544 | 1566 | ||
1545 | if (ret) { | 1567 | ONENAND_SET_NEXT_BUFFERRAM(this); |
1546 | printk(KERN_ERR "onenand_write_ops_nolock: write filaed %d\n", ret); | ||
1547 | break; | ||
1548 | } | 1568 | } |
1549 | 1569 | ||
1550 | /* Only check verify write turn on */ | 1570 | this->command(mtd, ONENAND_CMD_PROG, to, mtd->writesize); |
1551 | ret = onenand_verify(mtd, buf, to, thislen); | ||
1552 | if (ret) { | ||
1553 | printk(KERN_ERR "onenand_write_ops_nolock: verify failed %d\n", ret); | ||
1554 | break; | ||
1555 | } | ||
1556 | 1571 | ||
1557 | written += thislen; | 1572 | /* |
1573 | * 2 PLANE, MLC, and Flex-OneNAND wait here | ||
1574 | */ | ||
1575 | if (ONENAND_IS_2PLANE(this)) { | ||
1576 | ret = this->wait(mtd, FL_WRITING); | ||
1558 | 1577 | ||
1559 | if (written == len) | 1578 | /* In partial page write we don't update bufferram */ |
1560 | break; | 1579 | onenand_update_bufferram(mtd, to, !ret && !subpage); |
1580 | if (ret) { | ||
1581 | printk(KERN_ERR "onenand_write_ops_nolock: write filaed %d\n", ret); | ||
1582 | break; | ||
1583 | } | ||
1584 | |||
1585 | /* Only check verify write turn on */ | ||
1586 | ret = onenand_verify(mtd, buf, to, thislen); | ||
1587 | if (ret) { | ||
1588 | printk(KERN_ERR "onenand_write_ops_nolock: verify failed %d\n", ret); | ||
1589 | break; | ||
1590 | } | ||
1591 | |||
1592 | written += thislen; | ||
1593 | |||
1594 | if (written == len) | ||
1595 | break; | ||
1596 | |||
1597 | } else | ||
1598 | written += thislen; | ||
1561 | 1599 | ||
1562 | column = 0; | 1600 | column = 0; |
1601 | prev_subpage = subpage; | ||
1602 | prev = to; | ||
1603 | prevlen = thislen; | ||
1563 | to += thislen; | 1604 | to += thislen; |
1564 | buf += thislen; | 1605 | buf += thislen; |
1606 | first = 0; | ||
1565 | } | 1607 | } |
1566 | 1608 | ||
1609 | /* In error case, clear all bufferrams */ | ||
1610 | if (written != len) | ||
1611 | onenand_invalidate_bufferram(mtd, 0, -1); | ||
1612 | |||
1567 | ops->retlen = written; | 1613 | ops->retlen = written; |
1614 | ops->oobretlen = oobwritten; | ||
1568 | 1615 | ||
1569 | return ret; | 1616 | return ret; |
1570 | } | 1617 | } |
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c index e63c8fc3df3a..f8e0f68f2186 100644 --- a/drivers/mtd/ubi/cdev.c +++ b/drivers/mtd/ubi/cdev.c | |||
@@ -186,6 +186,16 @@ static loff_t vol_cdev_llseek(struct file *file, loff_t offset, int origin) | |||
186 | return new_offset; | 186 | return new_offset; |
187 | } | 187 | } |
188 | 188 | ||
189 | static int vol_cdev_fsync(struct file *file, struct dentry *dentry, | ||
190 | int datasync) | ||
191 | { | ||
192 | struct ubi_volume_desc *desc = file->private_data; | ||
193 | struct ubi_device *ubi = desc->vol->ubi; | ||
194 | |||
195 | return ubi_sync(ubi->ubi_num); | ||
196 | } | ||
197 | |||
198 | |||
189 | static ssize_t vol_cdev_read(struct file *file, __user char *buf, size_t count, | 199 | static ssize_t vol_cdev_read(struct file *file, __user char *buf, size_t count, |
190 | loff_t *offp) | 200 | loff_t *offp) |
191 | { | 201 | { |
@@ -1073,6 +1083,7 @@ const struct file_operations ubi_vol_cdev_operations = { | |||
1073 | .llseek = vol_cdev_llseek, | 1083 | .llseek = vol_cdev_llseek, |
1074 | .read = vol_cdev_read, | 1084 | .read = vol_cdev_read, |
1075 | .write = vol_cdev_write, | 1085 | .write = vol_cdev_write, |
1086 | .fsync = vol_cdev_fsync, | ||
1076 | .unlocked_ioctl = vol_cdev_ioctl, | 1087 | .unlocked_ioctl = vol_cdev_ioctl, |
1077 | .compat_ioctl = vol_cdev_compat_ioctl, | 1088 | .compat_ioctl = vol_cdev_compat_ioctl, |
1078 | }; | 1089 | }; |
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c index d313039e2fdf..25a00ce4f24d 100644 --- a/drivers/pci/dmar.c +++ b/drivers/pci/dmar.c | |||
@@ -180,6 +180,7 @@ dmar_parse_one_drhd(struct acpi_dmar_header *header) | |||
180 | dmaru->hdr = header; | 180 | dmaru->hdr = header; |
181 | drhd = (struct acpi_dmar_hardware_unit *)header; | 181 | drhd = (struct acpi_dmar_hardware_unit *)header; |
182 | dmaru->reg_base_addr = drhd->address; | 182 | dmaru->reg_base_addr = drhd->address; |
183 | dmaru->segment = drhd->segment; | ||
183 | dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */ | 184 | dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */ |
184 | 185 | ||
185 | ret = alloc_iommu(dmaru); | 186 | ret = alloc_iommu(dmaru); |
@@ -790,14 +791,41 @@ end: | |||
790 | } | 791 | } |
791 | 792 | ||
792 | /* | 793 | /* |
794 | * Enable queued invalidation. | ||
795 | */ | ||
796 | static void __dmar_enable_qi(struct intel_iommu *iommu) | ||
797 | { | ||
798 | u32 cmd, sts; | ||
799 | unsigned long flags; | ||
800 | struct q_inval *qi = iommu->qi; | ||
801 | |||
802 | qi->free_head = qi->free_tail = 0; | ||
803 | qi->free_cnt = QI_LENGTH; | ||
804 | |||
805 | spin_lock_irqsave(&iommu->register_lock, flags); | ||
806 | |||
807 | /* write zero to the tail reg */ | ||
808 | writel(0, iommu->reg + DMAR_IQT_REG); | ||
809 | |||
810 | dmar_writeq(iommu->reg + DMAR_IQA_REG, virt_to_phys(qi->desc)); | ||
811 | |||
812 | cmd = iommu->gcmd | DMA_GCMD_QIE; | ||
813 | iommu->gcmd |= DMA_GCMD_QIE; | ||
814 | writel(cmd, iommu->reg + DMAR_GCMD_REG); | ||
815 | |||
816 | /* Make sure hardware complete it */ | ||
817 | IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl, (sts & DMA_GSTS_QIES), sts); | ||
818 | |||
819 | spin_unlock_irqrestore(&iommu->register_lock, flags); | ||
820 | } | ||
821 | |||
822 | /* | ||
793 | * Enable Queued Invalidation interface. This is a must to support | 823 | * Enable Queued Invalidation interface. This is a must to support |
794 | * interrupt-remapping. Also used by DMA-remapping, which replaces | 824 | * interrupt-remapping. Also used by DMA-remapping, which replaces |
795 | * register based IOTLB invalidation. | 825 | * register based IOTLB invalidation. |
796 | */ | 826 | */ |
797 | int dmar_enable_qi(struct intel_iommu *iommu) | 827 | int dmar_enable_qi(struct intel_iommu *iommu) |
798 | { | 828 | { |
799 | u32 cmd, sts; | ||
800 | unsigned long flags; | ||
801 | struct q_inval *qi; | 829 | struct q_inval *qi; |
802 | 830 | ||
803 | if (!ecap_qis(iommu->ecap)) | 831 | if (!ecap_qis(iommu->ecap)) |
@@ -835,19 +863,7 @@ int dmar_enable_qi(struct intel_iommu *iommu) | |||
835 | 863 | ||
836 | spin_lock_init(&qi->q_lock); | 864 | spin_lock_init(&qi->q_lock); |
837 | 865 | ||
838 | spin_lock_irqsave(&iommu->register_lock, flags); | 866 | __dmar_enable_qi(iommu); |
839 | /* write zero to the tail reg */ | ||
840 | writel(0, iommu->reg + DMAR_IQT_REG); | ||
841 | |||
842 | dmar_writeq(iommu->reg + DMAR_IQA_REG, virt_to_phys(qi->desc)); | ||
843 | |||
844 | cmd = iommu->gcmd | DMA_GCMD_QIE; | ||
845 | iommu->gcmd |= DMA_GCMD_QIE; | ||
846 | writel(cmd, iommu->reg + DMAR_GCMD_REG); | ||
847 | |||
848 | /* Make sure hardware complete it */ | ||
849 | IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl, (sts & DMA_GSTS_QIES), sts); | ||
850 | spin_unlock_irqrestore(&iommu->register_lock, flags); | ||
851 | 867 | ||
852 | return 0; | 868 | return 0; |
853 | } | 869 | } |
@@ -1102,3 +1118,28 @@ int __init enable_drhd_fault_handling(void) | |||
1102 | 1118 | ||
1103 | return 0; | 1119 | return 0; |
1104 | } | 1120 | } |
1121 | |||
1122 | /* | ||
1123 | * Re-enable Queued Invalidation interface. | ||
1124 | */ | ||
1125 | int dmar_reenable_qi(struct intel_iommu *iommu) | ||
1126 | { | ||
1127 | if (!ecap_qis(iommu->ecap)) | ||
1128 | return -ENOENT; | ||
1129 | |||
1130 | if (!iommu->qi) | ||
1131 | return -ENOENT; | ||
1132 | |||
1133 | /* | ||
1134 | * First disable queued invalidation. | ||
1135 | */ | ||
1136 | dmar_disable_qi(iommu); | ||
1137 | /* | ||
1138 | * Then enable queued invalidation again. Since there is no pending | ||
1139 | * invalidation requests now, it's safe to re-enable queued | ||
1140 | * invalidation. | ||
1141 | */ | ||
1142 | __dmar_enable_qi(iommu); | ||
1143 | |||
1144 | return 0; | ||
1145 | } | ||
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index 23e56a564e05..dcda5212f3bb 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/iova.h> | 36 | #include <linux/iova.h> |
37 | #include <linux/iommu.h> | 37 | #include <linux/iommu.h> |
38 | #include <linux/intel-iommu.h> | 38 | #include <linux/intel-iommu.h> |
39 | #include <linux/sysdev.h> | ||
39 | #include <asm/cacheflush.h> | 40 | #include <asm/cacheflush.h> |
40 | #include <asm/iommu.h> | 41 | #include <asm/iommu.h> |
41 | #include "pci.h" | 42 | #include "pci.h" |
@@ -247,7 +248,8 @@ struct dmar_domain { | |||
247 | struct device_domain_info { | 248 | struct device_domain_info { |
248 | struct list_head link; /* link to domain siblings */ | 249 | struct list_head link; /* link to domain siblings */ |
249 | struct list_head global; /* link to global list */ | 250 | struct list_head global; /* link to global list */ |
250 | u8 bus; /* PCI bus numer */ | 251 | int segment; /* PCI domain */ |
252 | u8 bus; /* PCI bus number */ | ||
251 | u8 devfn; /* PCI devfn number */ | 253 | u8 devfn; /* PCI devfn number */ |
252 | struct pci_dev *dev; /* it's NULL for PCIE-to-PCI bridge */ | 254 | struct pci_dev *dev; /* it's NULL for PCIE-to-PCI bridge */ |
253 | struct dmar_domain *domain; /* pointer to domain */ | 255 | struct dmar_domain *domain; /* pointer to domain */ |
@@ -467,7 +469,7 @@ static void domain_update_iommu_cap(struct dmar_domain *domain) | |||
467 | domain_update_iommu_snooping(domain); | 469 | domain_update_iommu_snooping(domain); |
468 | } | 470 | } |
469 | 471 | ||
470 | static struct intel_iommu *device_to_iommu(u8 bus, u8 devfn) | 472 | static struct intel_iommu *device_to_iommu(int segment, u8 bus, u8 devfn) |
471 | { | 473 | { |
472 | struct dmar_drhd_unit *drhd = NULL; | 474 | struct dmar_drhd_unit *drhd = NULL; |
473 | int i; | 475 | int i; |
@@ -475,12 +477,20 @@ static struct intel_iommu *device_to_iommu(u8 bus, u8 devfn) | |||
475 | for_each_drhd_unit(drhd) { | 477 | for_each_drhd_unit(drhd) { |
476 | if (drhd->ignored) | 478 | if (drhd->ignored) |
477 | continue; | 479 | continue; |
480 | if (segment != drhd->segment) | ||
481 | continue; | ||
478 | 482 | ||
479 | for (i = 0; i < drhd->devices_cnt; i++) | 483 | for (i = 0; i < drhd->devices_cnt; i++) { |
480 | if (drhd->devices[i] && | 484 | if (drhd->devices[i] && |
481 | drhd->devices[i]->bus->number == bus && | 485 | drhd->devices[i]->bus->number == bus && |
482 | drhd->devices[i]->devfn == devfn) | 486 | drhd->devices[i]->devfn == devfn) |
483 | return drhd->iommu; | 487 | return drhd->iommu; |
488 | if (drhd->devices[i] && | ||
489 | drhd->devices[i]->subordinate && | ||
490 | drhd->devices[i]->subordinate->number <= bus && | ||
491 | drhd->devices[i]->subordinate->subordinate >= bus) | ||
492 | return drhd->iommu; | ||
493 | } | ||
484 | 494 | ||
485 | if (drhd->include_all) | 495 | if (drhd->include_all) |
486 | return drhd->iommu; | 496 | return drhd->iommu; |
@@ -1312,7 +1322,7 @@ static void domain_exit(struct dmar_domain *domain) | |||
1312 | } | 1322 | } |
1313 | 1323 | ||
1314 | static int domain_context_mapping_one(struct dmar_domain *domain, | 1324 | static int domain_context_mapping_one(struct dmar_domain *domain, |
1315 | u8 bus, u8 devfn) | 1325 | int segment, u8 bus, u8 devfn) |
1316 | { | 1326 | { |
1317 | struct context_entry *context; | 1327 | struct context_entry *context; |
1318 | unsigned long flags; | 1328 | unsigned long flags; |
@@ -1327,7 +1337,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain, | |||
1327 | bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); | 1337 | bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); |
1328 | BUG_ON(!domain->pgd); | 1338 | BUG_ON(!domain->pgd); |
1329 | 1339 | ||
1330 | iommu = device_to_iommu(bus, devfn); | 1340 | iommu = device_to_iommu(segment, bus, devfn); |
1331 | if (!iommu) | 1341 | if (!iommu) |
1332 | return -ENODEV; | 1342 | return -ENODEV; |
1333 | 1343 | ||
@@ -1417,8 +1427,8 @@ domain_context_mapping(struct dmar_domain *domain, struct pci_dev *pdev) | |||
1417 | int ret; | 1427 | int ret; |
1418 | struct pci_dev *tmp, *parent; | 1428 | struct pci_dev *tmp, *parent; |
1419 | 1429 | ||
1420 | ret = domain_context_mapping_one(domain, pdev->bus->number, | 1430 | ret = domain_context_mapping_one(domain, pci_domain_nr(pdev->bus), |
1421 | pdev->devfn); | 1431 | pdev->bus->number, pdev->devfn); |
1422 | if (ret) | 1432 | if (ret) |
1423 | return ret; | 1433 | return ret; |
1424 | 1434 | ||
@@ -1429,18 +1439,23 @@ domain_context_mapping(struct dmar_domain *domain, struct pci_dev *pdev) | |||
1429 | /* Secondary interface's bus number and devfn 0 */ | 1439 | /* Secondary interface's bus number and devfn 0 */ |
1430 | parent = pdev->bus->self; | 1440 | parent = pdev->bus->self; |
1431 | while (parent != tmp) { | 1441 | while (parent != tmp) { |
1432 | ret = domain_context_mapping_one(domain, parent->bus->number, | 1442 | ret = domain_context_mapping_one(domain, |
1433 | parent->devfn); | 1443 | pci_domain_nr(parent->bus), |
1444 | parent->bus->number, | ||
1445 | parent->devfn); | ||
1434 | if (ret) | 1446 | if (ret) |
1435 | return ret; | 1447 | return ret; |
1436 | parent = parent->bus->self; | 1448 | parent = parent->bus->self; |
1437 | } | 1449 | } |
1438 | if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */ | 1450 | if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */ |
1439 | return domain_context_mapping_one(domain, | 1451 | return domain_context_mapping_one(domain, |
1440 | tmp->subordinate->number, 0); | 1452 | pci_domain_nr(tmp->subordinate), |
1453 | tmp->subordinate->number, 0); | ||
1441 | else /* this is a legacy PCI bridge */ | 1454 | else /* this is a legacy PCI bridge */ |
1442 | return domain_context_mapping_one(domain, | 1455 | return domain_context_mapping_one(domain, |
1443 | tmp->bus->number, tmp->devfn); | 1456 | pci_domain_nr(tmp->bus), |
1457 | tmp->bus->number, | ||
1458 | tmp->devfn); | ||
1444 | } | 1459 | } |
1445 | 1460 | ||
1446 | static int domain_context_mapped(struct pci_dev *pdev) | 1461 | static int domain_context_mapped(struct pci_dev *pdev) |
@@ -1449,12 +1464,12 @@ static int domain_context_mapped(struct pci_dev *pdev) | |||
1449 | struct pci_dev *tmp, *parent; | 1464 | struct pci_dev *tmp, *parent; |
1450 | struct intel_iommu *iommu; | 1465 | struct intel_iommu *iommu; |
1451 | 1466 | ||
1452 | iommu = device_to_iommu(pdev->bus->number, pdev->devfn); | 1467 | iommu = device_to_iommu(pci_domain_nr(pdev->bus), pdev->bus->number, |
1468 | pdev->devfn); | ||
1453 | if (!iommu) | 1469 | if (!iommu) |
1454 | return -ENODEV; | 1470 | return -ENODEV; |
1455 | 1471 | ||
1456 | ret = device_context_mapped(iommu, | 1472 | ret = device_context_mapped(iommu, pdev->bus->number, pdev->devfn); |
1457 | pdev->bus->number, pdev->devfn); | ||
1458 | if (!ret) | 1473 | if (!ret) |
1459 | return ret; | 1474 | return ret; |
1460 | /* dependent device mapping */ | 1475 | /* dependent device mapping */ |
@@ -1465,17 +1480,17 @@ static int domain_context_mapped(struct pci_dev *pdev) | |||
1465 | parent = pdev->bus->self; | 1480 | parent = pdev->bus->self; |
1466 | while (parent != tmp) { | 1481 | while (parent != tmp) { |
1467 | ret = device_context_mapped(iommu, parent->bus->number, | 1482 | ret = device_context_mapped(iommu, parent->bus->number, |
1468 | parent->devfn); | 1483 | parent->devfn); |
1469 | if (!ret) | 1484 | if (!ret) |
1470 | return ret; | 1485 | return ret; |
1471 | parent = parent->bus->self; | 1486 | parent = parent->bus->self; |
1472 | } | 1487 | } |
1473 | if (tmp->is_pcie) | 1488 | if (tmp->is_pcie) |
1474 | return device_context_mapped(iommu, | 1489 | return device_context_mapped(iommu, tmp->subordinate->number, |
1475 | tmp->subordinate->number, 0); | 1490 | 0); |
1476 | else | 1491 | else |
1477 | return device_context_mapped(iommu, | 1492 | return device_context_mapped(iommu, tmp->bus->number, |
1478 | tmp->bus->number, tmp->devfn); | 1493 | tmp->devfn); |
1479 | } | 1494 | } |
1480 | 1495 | ||
1481 | static int | 1496 | static int |
@@ -1542,7 +1557,7 @@ static void domain_remove_dev_info(struct dmar_domain *domain) | |||
1542 | info->dev->dev.archdata.iommu = NULL; | 1557 | info->dev->dev.archdata.iommu = NULL; |
1543 | spin_unlock_irqrestore(&device_domain_lock, flags); | 1558 | spin_unlock_irqrestore(&device_domain_lock, flags); |
1544 | 1559 | ||
1545 | iommu = device_to_iommu(info->bus, info->devfn); | 1560 | iommu = device_to_iommu(info->segment, info->bus, info->devfn); |
1546 | iommu_detach_dev(iommu, info->bus, info->devfn); | 1561 | iommu_detach_dev(iommu, info->bus, info->devfn); |
1547 | free_devinfo_mem(info); | 1562 | free_devinfo_mem(info); |
1548 | 1563 | ||
@@ -1577,11 +1592,14 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw) | |||
1577 | struct pci_dev *dev_tmp; | 1592 | struct pci_dev *dev_tmp; |
1578 | unsigned long flags; | 1593 | unsigned long flags; |
1579 | int bus = 0, devfn = 0; | 1594 | int bus = 0, devfn = 0; |
1595 | int segment; | ||
1580 | 1596 | ||
1581 | domain = find_domain(pdev); | 1597 | domain = find_domain(pdev); |
1582 | if (domain) | 1598 | if (domain) |
1583 | return domain; | 1599 | return domain; |
1584 | 1600 | ||
1601 | segment = pci_domain_nr(pdev->bus); | ||
1602 | |||
1585 | dev_tmp = pci_find_upstream_pcie_bridge(pdev); | 1603 | dev_tmp = pci_find_upstream_pcie_bridge(pdev); |
1586 | if (dev_tmp) { | 1604 | if (dev_tmp) { |
1587 | if (dev_tmp->is_pcie) { | 1605 | if (dev_tmp->is_pcie) { |
@@ -1593,7 +1611,8 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw) | |||
1593 | } | 1611 | } |
1594 | spin_lock_irqsave(&device_domain_lock, flags); | 1612 | spin_lock_irqsave(&device_domain_lock, flags); |
1595 | list_for_each_entry(info, &device_domain_list, global) { | 1613 | list_for_each_entry(info, &device_domain_list, global) { |
1596 | if (info->bus == bus && info->devfn == devfn) { | 1614 | if (info->segment == segment && |
1615 | info->bus == bus && info->devfn == devfn) { | ||
1597 | found = info->domain; | 1616 | found = info->domain; |
1598 | break; | 1617 | break; |
1599 | } | 1618 | } |
@@ -1631,6 +1650,7 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw) | |||
1631 | domain_exit(domain); | 1650 | domain_exit(domain); |
1632 | goto error; | 1651 | goto error; |
1633 | } | 1652 | } |
1653 | info->segment = segment; | ||
1634 | info->bus = bus; | 1654 | info->bus = bus; |
1635 | info->devfn = devfn; | 1655 | info->devfn = devfn; |
1636 | info->dev = NULL; | 1656 | info->dev = NULL; |
@@ -1642,7 +1662,8 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw) | |||
1642 | found = NULL; | 1662 | found = NULL; |
1643 | spin_lock_irqsave(&device_domain_lock, flags); | 1663 | spin_lock_irqsave(&device_domain_lock, flags); |
1644 | list_for_each_entry(tmp, &device_domain_list, global) { | 1664 | list_for_each_entry(tmp, &device_domain_list, global) { |
1645 | if (tmp->bus == bus && tmp->devfn == devfn) { | 1665 | if (tmp->segment == segment && |
1666 | tmp->bus == bus && tmp->devfn == devfn) { | ||
1646 | found = tmp->domain; | 1667 | found = tmp->domain; |
1647 | break; | 1668 | break; |
1648 | } | 1669 | } |
@@ -1662,6 +1683,7 @@ found_domain: | |||
1662 | info = alloc_devinfo_mem(); | 1683 | info = alloc_devinfo_mem(); |
1663 | if (!info) | 1684 | if (!info) |
1664 | goto error; | 1685 | goto error; |
1686 | info->segment = segment; | ||
1665 | info->bus = pdev->bus->number; | 1687 | info->bus = pdev->bus->number; |
1666 | info->devfn = pdev->devfn; | 1688 | info->devfn = pdev->devfn; |
1667 | info->dev = pdev; | 1689 | info->dev = pdev; |
@@ -1946,6 +1968,15 @@ static int __init init_dmars(void) | |||
1946 | } | 1968 | } |
1947 | } | 1969 | } |
1948 | 1970 | ||
1971 | #ifdef CONFIG_INTR_REMAP | ||
1972 | if (!intr_remapping_enabled) { | ||
1973 | ret = enable_intr_remapping(0); | ||
1974 | if (ret) | ||
1975 | printk(KERN_ERR | ||
1976 | "IOMMU: enable interrupt remapping failed\n"); | ||
1977 | } | ||
1978 | #endif | ||
1979 | |||
1949 | /* | 1980 | /* |
1950 | * For each rmrr | 1981 | * For each rmrr |
1951 | * for each dev attached to rmrr | 1982 | * for each dev attached to rmrr |
@@ -2597,6 +2628,150 @@ static void __init init_no_remapping_devices(void) | |||
2597 | } | 2628 | } |
2598 | } | 2629 | } |
2599 | 2630 | ||
2631 | #ifdef CONFIG_SUSPEND | ||
2632 | static int init_iommu_hw(void) | ||
2633 | { | ||
2634 | struct dmar_drhd_unit *drhd; | ||
2635 | struct intel_iommu *iommu = NULL; | ||
2636 | |||
2637 | for_each_active_iommu(iommu, drhd) | ||
2638 | if (iommu->qi) | ||
2639 | dmar_reenable_qi(iommu); | ||
2640 | |||
2641 | for_each_active_iommu(iommu, drhd) { | ||
2642 | iommu_flush_write_buffer(iommu); | ||
2643 | |||
2644 | iommu_set_root_entry(iommu); | ||
2645 | |||
2646 | iommu->flush.flush_context(iommu, 0, 0, 0, | ||
2647 | DMA_CCMD_GLOBAL_INVL, 0); | ||
2648 | iommu->flush.flush_iotlb(iommu, 0, 0, 0, | ||
2649 | DMA_TLB_GLOBAL_FLUSH, 0); | ||
2650 | iommu_disable_protect_mem_regions(iommu); | ||
2651 | iommu_enable_translation(iommu); | ||
2652 | } | ||
2653 | |||
2654 | return 0; | ||
2655 | } | ||
2656 | |||
2657 | static void iommu_flush_all(void) | ||
2658 | { | ||
2659 | struct dmar_drhd_unit *drhd; | ||
2660 | struct intel_iommu *iommu; | ||
2661 | |||
2662 | for_each_active_iommu(iommu, drhd) { | ||
2663 | iommu->flush.flush_context(iommu, 0, 0, 0, | ||
2664 | DMA_CCMD_GLOBAL_INVL, 0); | ||
2665 | iommu->flush.flush_iotlb(iommu, 0, 0, 0, | ||
2666 | DMA_TLB_GLOBAL_FLUSH, 0); | ||
2667 | } | ||
2668 | } | ||
2669 | |||
2670 | static int iommu_suspend(struct sys_device *dev, pm_message_t state) | ||
2671 | { | ||
2672 | struct dmar_drhd_unit *drhd; | ||
2673 | struct intel_iommu *iommu = NULL; | ||
2674 | unsigned long flag; | ||
2675 | |||
2676 | for_each_active_iommu(iommu, drhd) { | ||
2677 | iommu->iommu_state = kzalloc(sizeof(u32) * MAX_SR_DMAR_REGS, | ||
2678 | GFP_ATOMIC); | ||
2679 | if (!iommu->iommu_state) | ||
2680 | goto nomem; | ||
2681 | } | ||
2682 | |||
2683 | iommu_flush_all(); | ||
2684 | |||
2685 | for_each_active_iommu(iommu, drhd) { | ||
2686 | iommu_disable_translation(iommu); | ||
2687 | |||
2688 | spin_lock_irqsave(&iommu->register_lock, flag); | ||
2689 | |||
2690 | iommu->iommu_state[SR_DMAR_FECTL_REG] = | ||
2691 | readl(iommu->reg + DMAR_FECTL_REG); | ||
2692 | iommu->iommu_state[SR_DMAR_FEDATA_REG] = | ||
2693 | readl(iommu->reg + DMAR_FEDATA_REG); | ||
2694 | iommu->iommu_state[SR_DMAR_FEADDR_REG] = | ||
2695 | readl(iommu->reg + DMAR_FEADDR_REG); | ||
2696 | iommu->iommu_state[SR_DMAR_FEUADDR_REG] = | ||
2697 | readl(iommu->reg + DMAR_FEUADDR_REG); | ||
2698 | |||
2699 | spin_unlock_irqrestore(&iommu->register_lock, flag); | ||
2700 | } | ||
2701 | return 0; | ||
2702 | |||
2703 | nomem: | ||
2704 | for_each_active_iommu(iommu, drhd) | ||
2705 | kfree(iommu->iommu_state); | ||
2706 | |||
2707 | return -ENOMEM; | ||
2708 | } | ||
2709 | |||
2710 | static int iommu_resume(struct sys_device *dev) | ||
2711 | { | ||
2712 | struct dmar_drhd_unit *drhd; | ||
2713 | struct intel_iommu *iommu = NULL; | ||
2714 | unsigned long flag; | ||
2715 | |||
2716 | if (init_iommu_hw()) { | ||
2717 | WARN(1, "IOMMU setup failed, DMAR can not resume!\n"); | ||
2718 | return -EIO; | ||
2719 | } | ||
2720 | |||
2721 | for_each_active_iommu(iommu, drhd) { | ||
2722 | |||
2723 | spin_lock_irqsave(&iommu->register_lock, flag); | ||
2724 | |||
2725 | writel(iommu->iommu_state[SR_DMAR_FECTL_REG], | ||
2726 | iommu->reg + DMAR_FECTL_REG); | ||
2727 | writel(iommu->iommu_state[SR_DMAR_FEDATA_REG], | ||
2728 | iommu->reg + DMAR_FEDATA_REG); | ||
2729 | writel(iommu->iommu_state[SR_DMAR_FEADDR_REG], | ||
2730 | iommu->reg + DMAR_FEADDR_REG); | ||
2731 | writel(iommu->iommu_state[SR_DMAR_FEUADDR_REG], | ||
2732 | iommu->reg + DMAR_FEUADDR_REG); | ||
2733 | |||
2734 | spin_unlock_irqrestore(&iommu->register_lock, flag); | ||
2735 | } | ||
2736 | |||
2737 | for_each_active_iommu(iommu, drhd) | ||
2738 | kfree(iommu->iommu_state); | ||
2739 | |||
2740 | return 0; | ||
2741 | } | ||
2742 | |||
2743 | static struct sysdev_class iommu_sysclass = { | ||
2744 | .name = "iommu", | ||
2745 | .resume = iommu_resume, | ||
2746 | .suspend = iommu_suspend, | ||
2747 | }; | ||
2748 | |||
2749 | static struct sys_device device_iommu = { | ||
2750 | .cls = &iommu_sysclass, | ||
2751 | }; | ||
2752 | |||
2753 | static int __init init_iommu_sysfs(void) | ||
2754 | { | ||
2755 | int error; | ||
2756 | |||
2757 | error = sysdev_class_register(&iommu_sysclass); | ||
2758 | if (error) | ||
2759 | return error; | ||
2760 | |||
2761 | error = sysdev_register(&device_iommu); | ||
2762 | if (error) | ||
2763 | sysdev_class_unregister(&iommu_sysclass); | ||
2764 | |||
2765 | return error; | ||
2766 | } | ||
2767 | |||
2768 | #else | ||
2769 | static int __init init_iommu_sysfs(void) | ||
2770 | { | ||
2771 | return 0; | ||
2772 | } | ||
2773 | #endif /* CONFIG_PM */ | ||
2774 | |||
2600 | int __init intel_iommu_init(void) | 2775 | int __init intel_iommu_init(void) |
2601 | { | 2776 | { |
2602 | int ret = 0; | 2777 | int ret = 0; |
@@ -2632,6 +2807,7 @@ int __init intel_iommu_init(void) | |||
2632 | init_timer(&unmap_timer); | 2807 | init_timer(&unmap_timer); |
2633 | force_iommu = 1; | 2808 | force_iommu = 1; |
2634 | dma_ops = &intel_dma_ops; | 2809 | dma_ops = &intel_dma_ops; |
2810 | init_iommu_sysfs(); | ||
2635 | 2811 | ||
2636 | register_iommu(&intel_iommu_ops); | 2812 | register_iommu(&intel_iommu_ops); |
2637 | 2813 | ||
@@ -2648,6 +2824,7 @@ static int vm_domain_add_dev_info(struct dmar_domain *domain, | |||
2648 | if (!info) | 2824 | if (!info) |
2649 | return -ENOMEM; | 2825 | return -ENOMEM; |
2650 | 2826 | ||
2827 | info->segment = pci_domain_nr(pdev->bus); | ||
2651 | info->bus = pdev->bus->number; | 2828 | info->bus = pdev->bus->number; |
2652 | info->devfn = pdev->devfn; | 2829 | info->devfn = pdev->devfn; |
2653 | info->dev = pdev; | 2830 | info->dev = pdev; |
@@ -2677,15 +2854,15 @@ static void iommu_detach_dependent_devices(struct intel_iommu *iommu, | |||
2677 | parent = pdev->bus->self; | 2854 | parent = pdev->bus->self; |
2678 | while (parent != tmp) { | 2855 | while (parent != tmp) { |
2679 | iommu_detach_dev(iommu, parent->bus->number, | 2856 | iommu_detach_dev(iommu, parent->bus->number, |
2680 | parent->devfn); | 2857 | parent->devfn); |
2681 | parent = parent->bus->self; | 2858 | parent = parent->bus->self; |
2682 | } | 2859 | } |
2683 | if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */ | 2860 | if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */ |
2684 | iommu_detach_dev(iommu, | 2861 | iommu_detach_dev(iommu, |
2685 | tmp->subordinate->number, 0); | 2862 | tmp->subordinate->number, 0); |
2686 | else /* this is a legacy PCI bridge */ | 2863 | else /* this is a legacy PCI bridge */ |
2687 | iommu_detach_dev(iommu, | 2864 | iommu_detach_dev(iommu, tmp->bus->number, |
2688 | tmp->bus->number, tmp->devfn); | 2865 | tmp->devfn); |
2689 | } | 2866 | } |
2690 | } | 2867 | } |
2691 | 2868 | ||
@@ -2698,13 +2875,15 @@ static void vm_domain_remove_one_dev_info(struct dmar_domain *domain, | |||
2698 | int found = 0; | 2875 | int found = 0; |
2699 | struct list_head *entry, *tmp; | 2876 | struct list_head *entry, *tmp; |
2700 | 2877 | ||
2701 | iommu = device_to_iommu(pdev->bus->number, pdev->devfn); | 2878 | iommu = device_to_iommu(pci_domain_nr(pdev->bus), pdev->bus->number, |
2879 | pdev->devfn); | ||
2702 | if (!iommu) | 2880 | if (!iommu) |
2703 | return; | 2881 | return; |
2704 | 2882 | ||
2705 | spin_lock_irqsave(&device_domain_lock, flags); | 2883 | spin_lock_irqsave(&device_domain_lock, flags); |
2706 | list_for_each_safe(entry, tmp, &domain->devices) { | 2884 | list_for_each_safe(entry, tmp, &domain->devices) { |
2707 | info = list_entry(entry, struct device_domain_info, link); | 2885 | info = list_entry(entry, struct device_domain_info, link); |
2886 | /* No need to compare PCI domain; it has to be the same */ | ||
2708 | if (info->bus == pdev->bus->number && | 2887 | if (info->bus == pdev->bus->number && |
2709 | info->devfn == pdev->devfn) { | 2888 | info->devfn == pdev->devfn) { |
2710 | list_del(&info->link); | 2889 | list_del(&info->link); |
@@ -2729,7 +2908,8 @@ static void vm_domain_remove_one_dev_info(struct dmar_domain *domain, | |||
2729 | * owned by this domain, clear this iommu in iommu_bmp | 2908 | * owned by this domain, clear this iommu in iommu_bmp |
2730 | * update iommu count and coherency | 2909 | * update iommu count and coherency |
2731 | */ | 2910 | */ |
2732 | if (device_to_iommu(info->bus, info->devfn) == iommu) | 2911 | if (iommu == device_to_iommu(info->segment, info->bus, |
2912 | info->devfn)) | ||
2733 | found = 1; | 2913 | found = 1; |
2734 | } | 2914 | } |
2735 | 2915 | ||
@@ -2762,7 +2942,7 @@ static void vm_domain_remove_all_dev_info(struct dmar_domain *domain) | |||
2762 | 2942 | ||
2763 | spin_unlock_irqrestore(&device_domain_lock, flags1); | 2943 | spin_unlock_irqrestore(&device_domain_lock, flags1); |
2764 | 2944 | ||
2765 | iommu = device_to_iommu(info->bus, info->devfn); | 2945 | iommu = device_to_iommu(info->segment, info->bus, info->devfn); |
2766 | iommu_detach_dev(iommu, info->bus, info->devfn); | 2946 | iommu_detach_dev(iommu, info->bus, info->devfn); |
2767 | iommu_detach_dependent_devices(iommu, info->dev); | 2947 | iommu_detach_dependent_devices(iommu, info->dev); |
2768 | 2948 | ||
@@ -2950,7 +3130,8 @@ static int intel_iommu_attach_device(struct iommu_domain *domain, | |||
2950 | } | 3130 | } |
2951 | } | 3131 | } |
2952 | 3132 | ||
2953 | iommu = device_to_iommu(pdev->bus->number, pdev->devfn); | 3133 | iommu = device_to_iommu(pci_domain_nr(pdev->bus), pdev->bus->number, |
3134 | pdev->devfn); | ||
2954 | if (!iommu) | 3135 | if (!iommu) |
2955 | return -ENODEV; | 3136 | return -ENODEV; |
2956 | 3137 | ||
diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c index b041a409f4a7..f5e0ea724a6f 100644 --- a/drivers/pci/intr_remapping.c +++ b/drivers/pci/intr_remapping.c | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <asm/cpu.h> | 9 | #include <asm/cpu.h> |
10 | #include <linux/intel-iommu.h> | 10 | #include <linux/intel-iommu.h> |
11 | #include "intr_remapping.h" | 11 | #include "intr_remapping.h" |
12 | #include <acpi/acpi.h> | ||
12 | 13 | ||
13 | static struct ioapic_scope ir_ioapic[MAX_IO_APICS]; | 14 | static struct ioapic_scope ir_ioapic[MAX_IO_APICS]; |
14 | static int ir_ioapic_num; | 15 | static int ir_ioapic_num; |
@@ -415,12 +416,27 @@ static void iommu_set_intr_remapping(struct intel_iommu *iommu, int mode) | |||
415 | 416 | ||
416 | /* Set interrupt-remapping table pointer */ | 417 | /* Set interrupt-remapping table pointer */ |
417 | cmd = iommu->gcmd | DMA_GCMD_SIRTP; | 418 | cmd = iommu->gcmd | DMA_GCMD_SIRTP; |
419 | iommu->gcmd |= DMA_GCMD_SIRTP; | ||
418 | writel(cmd, iommu->reg + DMAR_GCMD_REG); | 420 | writel(cmd, iommu->reg + DMAR_GCMD_REG); |
419 | 421 | ||
420 | IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, | 422 | IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, |
421 | readl, (sts & DMA_GSTS_IRTPS), sts); | 423 | readl, (sts & DMA_GSTS_IRTPS), sts); |
422 | spin_unlock_irqrestore(&iommu->register_lock, flags); | 424 | spin_unlock_irqrestore(&iommu->register_lock, flags); |
423 | 425 | ||
426 | if (mode == 0) { | ||
427 | spin_lock_irqsave(&iommu->register_lock, flags); | ||
428 | |||
429 | /* enable comaptiblity format interrupt pass through */ | ||
430 | cmd = iommu->gcmd | DMA_GCMD_CFI; | ||
431 | iommu->gcmd |= DMA_GCMD_CFI; | ||
432 | writel(cmd, iommu->reg + DMAR_GCMD_REG); | ||
433 | |||
434 | IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, | ||
435 | readl, (sts & DMA_GSTS_CFIS), sts); | ||
436 | |||
437 | spin_unlock_irqrestore(&iommu->register_lock, flags); | ||
438 | } | ||
439 | |||
424 | /* | 440 | /* |
425 | * global invalidation of interrupt entry cache before enabling | 441 | * global invalidation of interrupt entry cache before enabling |
426 | * interrupt-remapping. | 442 | * interrupt-remapping. |
@@ -470,7 +486,7 @@ static int setup_intr_remapping(struct intel_iommu *iommu, int mode) | |||
470 | /* | 486 | /* |
471 | * Disable Interrupt Remapping. | 487 | * Disable Interrupt Remapping. |
472 | */ | 488 | */ |
473 | static void disable_intr_remapping(struct intel_iommu *iommu) | 489 | static void iommu_disable_intr_remapping(struct intel_iommu *iommu) |
474 | { | 490 | { |
475 | unsigned long flags; | 491 | unsigned long flags; |
476 | u32 sts; | 492 | u32 sts; |
@@ -478,6 +494,12 @@ static void disable_intr_remapping(struct intel_iommu *iommu) | |||
478 | if (!ecap_ir_support(iommu->ecap)) | 494 | if (!ecap_ir_support(iommu->ecap)) |
479 | return; | 495 | return; |
480 | 496 | ||
497 | /* | ||
498 | * global invalidation of interrupt entry cache before disabling | ||
499 | * interrupt-remapping. | ||
500 | */ | ||
501 | qi_global_iec(iommu); | ||
502 | |||
481 | spin_lock_irqsave(&iommu->register_lock, flags); | 503 | spin_lock_irqsave(&iommu->register_lock, flags); |
482 | 504 | ||
483 | sts = dmar_readq(iommu->reg + DMAR_GSTS_REG); | 505 | sts = dmar_readq(iommu->reg + DMAR_GSTS_REG); |
@@ -503,6 +525,13 @@ int __init enable_intr_remapping(int eim) | |||
503 | struct intel_iommu *iommu = drhd->iommu; | 525 | struct intel_iommu *iommu = drhd->iommu; |
504 | 526 | ||
505 | /* | 527 | /* |
528 | * If the queued invalidation is already initialized, | ||
529 | * shouldn't disable it. | ||
530 | */ | ||
531 | if (iommu->qi) | ||
532 | continue; | ||
533 | |||
534 | /* | ||
506 | * Clear previous faults. | 535 | * Clear previous faults. |
507 | */ | 536 | */ |
508 | dmar_fault(-1, iommu); | 537 | dmar_fault(-1, iommu); |
@@ -511,7 +540,7 @@ int __init enable_intr_remapping(int eim) | |||
511 | * Disable intr remapping and queued invalidation, if already | 540 | * Disable intr remapping and queued invalidation, if already |
512 | * enabled prior to OS handover. | 541 | * enabled prior to OS handover. |
513 | */ | 542 | */ |
514 | disable_intr_remapping(iommu); | 543 | iommu_disable_intr_remapping(iommu); |
515 | 544 | ||
516 | dmar_disable_qi(iommu); | 545 | dmar_disable_qi(iommu); |
517 | } | 546 | } |
@@ -639,3 +668,54 @@ int __init parse_ioapics_under_ir(void) | |||
639 | 668 | ||
640 | return ir_supported; | 669 | return ir_supported; |
641 | } | 670 | } |
671 | |||
672 | void disable_intr_remapping(void) | ||
673 | { | ||
674 | struct dmar_drhd_unit *drhd; | ||
675 | struct intel_iommu *iommu = NULL; | ||
676 | |||
677 | /* | ||
678 | * Disable Interrupt-remapping for all the DRHD's now. | ||
679 | */ | ||
680 | for_each_iommu(iommu, drhd) { | ||
681 | if (!ecap_ir_support(iommu->ecap)) | ||
682 | continue; | ||
683 | |||
684 | iommu_disable_intr_remapping(iommu); | ||
685 | } | ||
686 | } | ||
687 | |||
688 | int reenable_intr_remapping(int eim) | ||
689 | { | ||
690 | struct dmar_drhd_unit *drhd; | ||
691 | int setup = 0; | ||
692 | struct intel_iommu *iommu = NULL; | ||
693 | |||
694 | for_each_iommu(iommu, drhd) | ||
695 | if (iommu->qi) | ||
696 | dmar_reenable_qi(iommu); | ||
697 | |||
698 | /* | ||
699 | * Setup Interrupt-remapping for all the DRHD's now. | ||
700 | */ | ||
701 | for_each_iommu(iommu, drhd) { | ||
702 | if (!ecap_ir_support(iommu->ecap)) | ||
703 | continue; | ||
704 | |||
705 | /* Set up interrupt remapping for iommu.*/ | ||
706 | iommu_set_intr_remapping(iommu, eim); | ||
707 | setup = 1; | ||
708 | } | ||
709 | |||
710 | if (!setup) | ||
711 | goto error; | ||
712 | |||
713 | return 0; | ||
714 | |||
715 | error: | ||
716 | /* | ||
717 | * handle error condition gracefully here! | ||
718 | */ | ||
719 | return -1; | ||
720 | } | ||
721 | |||
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index 20297c521e50..8ed2990c826e 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig | |||
@@ -121,10 +121,11 @@ config BLK_DEV_SR | |||
121 | tristate "SCSI CDROM support" | 121 | tristate "SCSI CDROM support" |
122 | depends on SCSI | 122 | depends on SCSI |
123 | ---help--- | 123 | ---help--- |
124 | If you want to use a SCSI or FireWire CD-ROM under Linux, | 124 | If you want to use a CD or DVD drive attached to your computer |
125 | say Y and read the SCSI-HOWTO and the CDROM-HOWTO at | 125 | by SCSI, FireWire, USB or ATAPI, say Y and read the SCSI-HOWTO |
126 | <http://www.tldp.org/docs.html#howto>. Also make sure to say | 126 | and the CDROM-HOWTO at <http://www.tldp.org/docs.html#howto>. |
127 | Y or M to "ISO 9660 CD-ROM file system support" later. | 127 | |
128 | Make sure to say Y or M to "ISO 9660 CD-ROM file system support". | ||
128 | 129 | ||
129 | To compile this driver as a module, choose M here and read | 130 | To compile this driver as a module, choose M here and read |
130 | <file:Documentation/scsi/scsi.txt>. | 131 | <file:Documentation/scsi/scsi.txt>. |
@@ -614,10 +615,16 @@ config LIBFC | |||
614 | ---help--- | 615 | ---help--- |
615 | Fibre Channel library module | 616 | Fibre Channel library module |
616 | 617 | ||
618 | config LIBFCOE | ||
619 | tristate "LibFCoE module" | ||
620 | select LIBFC | ||
621 | ---help--- | ||
622 | Library for Fibre Channel over Ethernet module | ||
623 | |||
617 | config FCOE | 624 | config FCOE |
618 | tristate "FCoE module" | 625 | tristate "FCoE module" |
619 | depends on PCI | 626 | depends on PCI |
620 | select LIBFC | 627 | select LIBFCOE |
621 | ---help--- | 628 | ---help--- |
622 | Fibre Channel over Ethernet module | 629 | Fibre Channel over Ethernet module |
623 | 630 | ||
diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile index cf7929634668..e7c861ac417d 100644 --- a/drivers/scsi/Makefile +++ b/drivers/scsi/Makefile | |||
@@ -37,6 +37,7 @@ obj-$(CONFIG_SCSI_SRP_ATTRS) += scsi_transport_srp.o | |||
37 | obj-$(CONFIG_SCSI_DH) += device_handler/ | 37 | obj-$(CONFIG_SCSI_DH) += device_handler/ |
38 | 38 | ||
39 | obj-$(CONFIG_LIBFC) += libfc/ | 39 | obj-$(CONFIG_LIBFC) += libfc/ |
40 | obj-$(CONFIG_LIBFCOE) += fcoe/ | ||
40 | obj-$(CONFIG_FCOE) += fcoe/ | 41 | obj-$(CONFIG_FCOE) += fcoe/ |
41 | obj-$(CONFIG_ISCSI_TCP) += libiscsi.o libiscsi_tcp.o iscsi_tcp.o | 42 | obj-$(CONFIG_ISCSI_TCP) += libiscsi.o libiscsi_tcp.o iscsi_tcp.o |
42 | obj-$(CONFIG_INFINIBAND_ISER) += libiscsi.o | 43 | obj-$(CONFIG_INFINIBAND_ISER) += libiscsi.o |
diff --git a/drivers/scsi/a2091.c b/drivers/scsi/a2091.c index 37dd47136fb1..4b38c4750f77 100644 --- a/drivers/scsi/a2091.c +++ b/drivers/scsi/a2091.c | |||
@@ -23,6 +23,8 @@ | |||
23 | #define DMA(ptr) ((a2091_scsiregs *)((ptr)->base)) | 23 | #define DMA(ptr) ((a2091_scsiregs *)((ptr)->base)) |
24 | #define HDATA(ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) | 24 | #define HDATA(ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) |
25 | 25 | ||
26 | static int a2091_release(struct Scsi_Host *instance); | ||
27 | |||
26 | static irqreturn_t a2091_intr (int irq, void *_instance) | 28 | static irqreturn_t a2091_intr (int irq, void *_instance) |
27 | { | 29 | { |
28 | unsigned long flags; | 30 | unsigned long flags; |
@@ -144,7 +146,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, | |||
144 | } | 146 | } |
145 | } | 147 | } |
146 | 148 | ||
147 | int __init a2091_detect(struct scsi_host_template *tpnt) | 149 | static int __init a2091_detect(struct scsi_host_template *tpnt) |
148 | { | 150 | { |
149 | static unsigned char called = 0; | 151 | static unsigned char called = 0; |
150 | struct Scsi_Host *instance; | 152 | struct Scsi_Host *instance; |
@@ -233,7 +235,7 @@ static struct scsi_host_template driver_template = { | |||
233 | 235 | ||
234 | #include "scsi_module.c" | 236 | #include "scsi_module.c" |
235 | 237 | ||
236 | int a2091_release(struct Scsi_Host *instance) | 238 | static int a2091_release(struct Scsi_Host *instance) |
237 | { | 239 | { |
238 | #ifdef MODULE | 240 | #ifdef MODULE |
239 | DMA(instance)->CNTR = 0; | 241 | DMA(instance)->CNTR = 0; |
diff --git a/drivers/scsi/a2091.h b/drivers/scsi/a2091.h index fe809bc88d73..252528f2672e 100644 --- a/drivers/scsi/a2091.h +++ b/drivers/scsi/a2091.h | |||
@@ -11,9 +11,6 @@ | |||
11 | 11 | ||
12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
13 | 13 | ||
14 | int a2091_detect(struct scsi_host_template *); | ||
15 | int a2091_release(struct Scsi_Host *); | ||
16 | |||
17 | #ifndef CMD_PER_LUN | 14 | #ifndef CMD_PER_LUN |
18 | #define CMD_PER_LUN 2 | 15 | #define CMD_PER_LUN 2 |
19 | #endif | 16 | #endif |
diff --git a/drivers/scsi/a3000.c b/drivers/scsi/a3000.c index 8b449d8acacd..6970ce82c4ac 100644 --- a/drivers/scsi/a3000.c +++ b/drivers/scsi/a3000.c | |||
@@ -25,6 +25,8 @@ | |||
25 | 25 | ||
26 | static struct Scsi_Host *a3000_host = NULL; | 26 | static struct Scsi_Host *a3000_host = NULL; |
27 | 27 | ||
28 | static int a3000_release(struct Scsi_Host *instance); | ||
29 | |||
28 | static irqreturn_t a3000_intr (int irq, void *dummy) | 30 | static irqreturn_t a3000_intr (int irq, void *dummy) |
29 | { | 31 | { |
30 | unsigned long flags; | 32 | unsigned long flags; |
@@ -157,7 +159,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, | |||
157 | } | 159 | } |
158 | } | 160 | } |
159 | 161 | ||
160 | int __init a3000_detect(struct scsi_host_template *tpnt) | 162 | static int __init a3000_detect(struct scsi_host_template *tpnt) |
161 | { | 163 | { |
162 | wd33c93_regs regs; | 164 | wd33c93_regs regs; |
163 | 165 | ||
@@ -232,7 +234,7 @@ static struct scsi_host_template driver_template = { | |||
232 | 234 | ||
233 | #include "scsi_module.c" | 235 | #include "scsi_module.c" |
234 | 236 | ||
235 | int a3000_release(struct Scsi_Host *instance) | 237 | static int a3000_release(struct Scsi_Host *instance) |
236 | { | 238 | { |
237 | wd33c93_release(); | 239 | wd33c93_release(); |
238 | DMA(instance)->CNTR = 0; | 240 | DMA(instance)->CNTR = 0; |
diff --git a/drivers/scsi/a3000.h b/drivers/scsi/a3000.h index 44a4ec7b4650..c7afe16fd6e4 100644 --- a/drivers/scsi/a3000.h +++ b/drivers/scsi/a3000.h | |||
@@ -11,9 +11,6 @@ | |||
11 | 11 | ||
12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
13 | 13 | ||
14 | int a3000_detect(struct scsi_host_template *); | ||
15 | int a3000_release(struct Scsi_Host *); | ||
16 | |||
17 | #ifndef CMD_PER_LUN | 14 | #ifndef CMD_PER_LUN |
18 | #define CMD_PER_LUN 2 | 15 | #define CMD_PER_LUN 2 |
19 | #endif | 16 | #endif |
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index 90d1d0878cb8..21964aaebca5 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c | |||
@@ -143,7 +143,7 @@ static char *aac_get_status_string(u32 status); | |||
143 | */ | 143 | */ |
144 | 144 | ||
145 | static int nondasd = -1; | 145 | static int nondasd = -1; |
146 | static int aac_cache; | 146 | static int aac_cache = 2; /* WCE=0 to avoid performance problems */ |
147 | static int dacmode = -1; | 147 | static int dacmode = -1; |
148 | int aac_msi; | 148 | int aac_msi; |
149 | int aac_commit = -1; | 149 | int aac_commit = -1; |
@@ -157,7 +157,7 @@ module_param_named(cache, aac_cache, int, S_IRUGO|S_IWUSR); | |||
157 | MODULE_PARM_DESC(cache, "Disable Queue Flush commands:\n" | 157 | MODULE_PARM_DESC(cache, "Disable Queue Flush commands:\n" |
158 | "\tbit 0 - Disable FUA in WRITE SCSI commands\n" | 158 | "\tbit 0 - Disable FUA in WRITE SCSI commands\n" |
159 | "\tbit 1 - Disable SYNCHRONIZE_CACHE SCSI command\n" | 159 | "\tbit 1 - Disable SYNCHRONIZE_CACHE SCSI command\n" |
160 | "\tbit 2 - Disable only if Battery not protecting Cache"); | 160 | "\tbit 2 - Disable only if Battery is protecting Cache"); |
161 | module_param(dacmode, int, S_IRUGO|S_IWUSR); | 161 | module_param(dacmode, int, S_IRUGO|S_IWUSR); |
162 | MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC." | 162 | MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC." |
163 | " 0=off, 1=on"); | 163 | " 0=off, 1=on"); |
@@ -217,6 +217,14 @@ int aac_reset_devices; | |||
217 | module_param_named(reset_devices, aac_reset_devices, int, S_IRUGO|S_IWUSR); | 217 | module_param_named(reset_devices, aac_reset_devices, int, S_IRUGO|S_IWUSR); |
218 | MODULE_PARM_DESC(reset_devices, "Force an adapter reset at initialization."); | 218 | MODULE_PARM_DESC(reset_devices, "Force an adapter reset at initialization."); |
219 | 219 | ||
220 | int aac_wwn = 1; | ||
221 | module_param_named(wwn, aac_wwn, int, S_IRUGO|S_IWUSR); | ||
222 | MODULE_PARM_DESC(wwn, "Select a WWN type for the arrays:\n" | ||
223 | "\t0 - Disable\n" | ||
224 | "\t1 - Array Meta Data Signature (default)\n" | ||
225 | "\t2 - Adapter Serial Number"); | ||
226 | |||
227 | |||
220 | static inline int aac_valid_context(struct scsi_cmnd *scsicmd, | 228 | static inline int aac_valid_context(struct scsi_cmnd *scsicmd, |
221 | struct fib *fibptr) { | 229 | struct fib *fibptr) { |
222 | struct scsi_device *device; | 230 | struct scsi_device *device; |
@@ -1206,9 +1214,8 @@ static int aac_scsi_32(struct fib * fib, struct scsi_cmnd * cmd) | |||
1206 | 1214 | ||
1207 | static int aac_scsi_32_64(struct fib * fib, struct scsi_cmnd * cmd) | 1215 | static int aac_scsi_32_64(struct fib * fib, struct scsi_cmnd * cmd) |
1208 | { | 1216 | { |
1209 | if ((sizeof(dma_addr_t) > 4) && | 1217 | if ((sizeof(dma_addr_t) > 4) && fib->dev->needs_dac && |
1210 | (num_physpages > (0xFFFFFFFFULL >> PAGE_SHIFT)) && | 1218 | (fib->dev->adapter_info.options & AAC_OPT_SGMAP_HOST64)) |
1211 | (fib->dev->adapter_info.options & AAC_OPT_SGMAP_HOST64)) | ||
1212 | return FAILED; | 1219 | return FAILED; |
1213 | return aac_scsi_32(fib, cmd); | 1220 | return aac_scsi_32(fib, cmd); |
1214 | } | 1221 | } |
@@ -1371,8 +1378,11 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
1371 | if (dev->nondasd_support && !dev->in_reset) | 1378 | if (dev->nondasd_support && !dev->in_reset) |
1372 | printk(KERN_INFO "%s%d: Non-DASD support enabled.\n",dev->name, dev->id); | 1379 | printk(KERN_INFO "%s%d: Non-DASD support enabled.\n",dev->name, dev->id); |
1373 | 1380 | ||
1381 | if (dma_get_required_mask(&dev->pdev->dev) > DMA_32BIT_MASK) | ||
1382 | dev->needs_dac = 1; | ||
1374 | dev->dac_support = 0; | 1383 | dev->dac_support = 0; |
1375 | if( (sizeof(dma_addr_t) > 4) && (dev->adapter_info.options & AAC_OPT_SGMAP_HOST64)){ | 1384 | if ((sizeof(dma_addr_t) > 4) && dev->needs_dac && |
1385 | (dev->adapter_info.options & AAC_OPT_SGMAP_HOST64)) { | ||
1376 | if (!dev->in_reset) | 1386 | if (!dev->in_reset) |
1377 | printk(KERN_INFO "%s%d: 64bit support enabled.\n", | 1387 | printk(KERN_INFO "%s%d: 64bit support enabled.\n", |
1378 | dev->name, dev->id); | 1388 | dev->name, dev->id); |
@@ -1382,6 +1392,15 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
1382 | if(dacmode != -1) { | 1392 | if(dacmode != -1) { |
1383 | dev->dac_support = (dacmode!=0); | 1393 | dev->dac_support = (dacmode!=0); |
1384 | } | 1394 | } |
1395 | |||
1396 | /* avoid problems with AAC_QUIRK_SCSI_32 controllers */ | ||
1397 | if (dev->dac_support && (aac_get_driver_ident(dev->cardtype)->quirks | ||
1398 | & AAC_QUIRK_SCSI_32)) { | ||
1399 | dev->nondasd_support = 0; | ||
1400 | dev->jbod = 0; | ||
1401 | expose_physicals = 0; | ||
1402 | } | ||
1403 | |||
1385 | if(dev->dac_support != 0) { | 1404 | if(dev->dac_support != 0) { |
1386 | if (!pci_set_dma_mask(dev->pdev, DMA_64BIT_MASK) && | 1405 | if (!pci_set_dma_mask(dev->pdev, DMA_64BIT_MASK) && |
1387 | !pci_set_consistent_dma_mask(dev->pdev, DMA_64BIT_MASK)) { | 1406 | !pci_set_consistent_dma_mask(dev->pdev, DMA_64BIT_MASK)) { |
@@ -2058,7 +2077,7 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | |||
2058 | dprintk((KERN_DEBUG "INQUIRY command, ID: %d.\n", cid)); | 2077 | dprintk((KERN_DEBUG "INQUIRY command, ID: %d.\n", cid)); |
2059 | memset(&inq_data, 0, sizeof (struct inquiry_data)); | 2078 | memset(&inq_data, 0, sizeof (struct inquiry_data)); |
2060 | 2079 | ||
2061 | if (scsicmd->cmnd[1] & 0x1) { | 2080 | if ((scsicmd->cmnd[1] & 0x1) && aac_wwn) { |
2062 | char *arr = (char *)&inq_data; | 2081 | char *arr = (char *)&inq_data; |
2063 | 2082 | ||
2064 | /* EVPD bit set */ | 2083 | /* EVPD bit set */ |
@@ -2081,7 +2100,12 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | |||
2081 | arr[1] = scsicmd->cmnd[2]; | 2100 | arr[1] = scsicmd->cmnd[2]; |
2082 | scsi_sg_copy_from_buffer(scsicmd, &inq_data, | 2101 | scsi_sg_copy_from_buffer(scsicmd, &inq_data, |
2083 | sizeof(inq_data)); | 2102 | sizeof(inq_data)); |
2084 | return aac_get_container_serial(scsicmd); | 2103 | if (aac_wwn != 2) |
2104 | return aac_get_container_serial( | ||
2105 | scsicmd); | ||
2106 | /* SLES 10 SP1 special */ | ||
2107 | scsicmd->result = DID_OK << 16 | | ||
2108 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; | ||
2085 | } else { | 2109 | } else { |
2086 | /* vpd page not implemented */ | 2110 | /* vpd page not implemented */ |
2087 | scsicmd->result = DID_OK << 16 | | 2111 | scsicmd->result = DID_OK << 16 | |
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index 73916adb8f80..cdbdec9f4fb2 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h | |||
@@ -12,7 +12,7 @@ | |||
12 | *----------------------------------------------------------------------------*/ | 12 | *----------------------------------------------------------------------------*/ |
13 | 13 | ||
14 | #ifndef AAC_DRIVER_BUILD | 14 | #ifndef AAC_DRIVER_BUILD |
15 | # define AAC_DRIVER_BUILD 2456 | 15 | # define AAC_DRIVER_BUILD 2461 |
16 | # define AAC_DRIVER_BRANCH "-ms" | 16 | # define AAC_DRIVER_BRANCH "-ms" |
17 | #endif | 17 | #endif |
18 | #define MAXIMUM_NUM_CONTAINERS 32 | 18 | #define MAXIMUM_NUM_CONTAINERS 32 |
@@ -865,7 +865,11 @@ struct aac_supplement_adapter_info | |||
865 | u8 MfgPcbaSerialNo[12]; | 865 | u8 MfgPcbaSerialNo[12]; |
866 | u8 MfgWWNName[8]; | 866 | u8 MfgWWNName[8]; |
867 | __le32 SupportedOptions2; | 867 | __le32 SupportedOptions2; |
868 | __le32 ReservedGrowth[1]; | 868 | __le32 StructExpansion; |
869 | /* StructExpansion == 1 */ | ||
870 | __le32 FeatureBits3; | ||
871 | __le32 SupportedPerformanceModes; | ||
872 | __le32 ReservedForFutureGrowth[80]; | ||
869 | }; | 873 | }; |
870 | #define AAC_FEATURE_FALCON cpu_to_le32(0x00000010) | 874 | #define AAC_FEATURE_FALCON cpu_to_le32(0x00000010) |
871 | #define AAC_FEATURE_JBOD cpu_to_le32(0x08000000) | 875 | #define AAC_FEATURE_JBOD cpu_to_le32(0x08000000) |
@@ -1020,6 +1024,7 @@ struct aac_dev | |||
1020 | u8 jbod; | 1024 | u8 jbod; |
1021 | u8 cache_protected; | 1025 | u8 cache_protected; |
1022 | u8 dac_support; | 1026 | u8 dac_support; |
1027 | u8 needs_dac; | ||
1023 | u8 raid_scsi_mode; | 1028 | u8 raid_scsi_mode; |
1024 | u8 comm_interface; | 1029 | u8 comm_interface; |
1025 | # define AAC_COMM_PRODUCER 0 | 1030 | # define AAC_COMM_PRODUCER 0 |
diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c index 16310443b55a..d598eba630d0 100644 --- a/drivers/scsi/aacraid/comminit.c +++ b/drivers/scsi/aacraid/comminit.c | |||
@@ -54,6 +54,7 @@ static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long co | |||
54 | const unsigned long printfbufsiz = 256; | 54 | const unsigned long printfbufsiz = 256; |
55 | struct aac_init *init; | 55 | struct aac_init *init; |
56 | dma_addr_t phys; | 56 | dma_addr_t phys; |
57 | unsigned long aac_max_hostphysmempages; | ||
57 | 58 | ||
58 | size = fibsize + sizeof(struct aac_init) + commsize + commalign + printfbufsiz; | 59 | size = fibsize + sizeof(struct aac_init) + commsize + commalign + printfbufsiz; |
59 | 60 | ||
@@ -90,7 +91,18 @@ static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long co | |||
90 | init->AdapterFibsPhysicalAddress = cpu_to_le32((u32)phys); | 91 | init->AdapterFibsPhysicalAddress = cpu_to_le32((u32)phys); |
91 | init->AdapterFibsSize = cpu_to_le32(fibsize); | 92 | init->AdapterFibsSize = cpu_to_le32(fibsize); |
92 | init->AdapterFibAlign = cpu_to_le32(sizeof(struct hw_fib)); | 93 | init->AdapterFibAlign = cpu_to_le32(sizeof(struct hw_fib)); |
93 | init->HostPhysMemPages = cpu_to_le32(AAC_MAX_HOSTPHYSMEMPAGES); | 94 | /* |
95 | * number of 4k pages of host physical memory. The aacraid fw needs | ||
96 | * this number to be less than 4gb worth of pages. New firmware doesn't | ||
97 | * have any issues with the mapping system, but older Firmware did, and | ||
98 | * had *troubles* dealing with the math overloading past 32 bits, thus | ||
99 | * we must limit this field. | ||
100 | */ | ||
101 | aac_max_hostphysmempages = dma_get_required_mask(&dev->pdev->dev) >> 12; | ||
102 | if (aac_max_hostphysmempages < AAC_MAX_HOSTPHYSMEMPAGES) | ||
103 | init->HostPhysMemPages = cpu_to_le32(aac_max_hostphysmempages); | ||
104 | else | ||
105 | init->HostPhysMemPages = cpu_to_le32(AAC_MAX_HOSTPHYSMEMPAGES); | ||
94 | 106 | ||
95 | init->InitFlags = 0; | 107 | init->InitFlags = 0; |
96 | if (dev->comm_interface == AAC_COMM_MESSAGE) { | 108 | if (dev->comm_interface == AAC_COMM_MESSAGE) { |
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 36d8aab97efe..c507719c0d44 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
@@ -86,7 +86,13 @@ char aac_driver_version[] = AAC_DRIVER_FULL_VERSION; | |||
86 | * | 86 | * |
87 | * Note: The last field is used to index into aac_drivers below. | 87 | * Note: The last field is used to index into aac_drivers below. |
88 | */ | 88 | */ |
89 | static struct pci_device_id aac_pci_tbl[] = { | 89 | #ifdef DECLARE_PCI_DEVICE_TABLE |
90 | static DECLARE_PCI_DEVICE_TABLE(aac_pci_tbl) = { | ||
91 | #elif defined(__devinitconst) | ||
92 | static const struct pci_device_id aac_pci_tbl[] __devinitconst = { | ||
93 | #else | ||
94 | static const struct pci_device_id aac_pci_tbl[] __devinitdata = { | ||
95 | #endif | ||
90 | { 0x1028, 0x0001, 0x1028, 0x0001, 0, 0, 0 }, /* PERC 2/Si (Iguana/PERC2Si) */ | 96 | { 0x1028, 0x0001, 0x1028, 0x0001, 0, 0, 0 }, /* PERC 2/Si (Iguana/PERC2Si) */ |
91 | { 0x1028, 0x0002, 0x1028, 0x0002, 0, 0, 1 }, /* PERC 3/Di (Opal/PERC3Di) */ | 97 | { 0x1028, 0x0002, 0x1028, 0x0002, 0, 0, 1 }, /* PERC 3/Di (Opal/PERC3Di) */ |
92 | { 0x1028, 0x0003, 0x1028, 0x0003, 0, 0, 2 }, /* PERC 3/Si (SlimFast/PERC3Si */ | 98 | { 0x1028, 0x0003, 0x1028, 0x0003, 0, 0, 2 }, /* PERC 3/Si (SlimFast/PERC3Si */ |
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c index 7507d8bc57a1..b756041f0b26 100644 --- a/drivers/scsi/advansys.c +++ b/drivers/scsi/advansys.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <linux/pci.h> | 38 | #include <linux/pci.h> |
39 | #include <linux/spinlock.h> | 39 | #include <linux/spinlock.h> |
40 | #include <linux/dma-mapping.h> | 40 | #include <linux/dma-mapping.h> |
41 | #include <linux/firmware.h> | ||
41 | 42 | ||
42 | #include <asm/io.h> | 43 | #include <asm/io.h> |
43 | #include <asm/system.h> | 44 | #include <asm/system.h> |
@@ -4519,8 +4520,8 @@ static void AscWriteLramByte(PortAddr iop_base, ushort addr, uchar byte_val) | |||
4519 | * and is maintained in little-endian order when written to LRAM. | 4520 | * and is maintained in little-endian order when written to LRAM. |
4520 | */ | 4521 | */ |
4521 | static void | 4522 | static void |
4522 | AscMemWordCopyPtrToLram(PortAddr iop_base, | 4523 | AscMemWordCopyPtrToLram(PortAddr iop_base, ushort s_addr, |
4523 | ushort s_addr, uchar *s_buffer, int words) | 4524 | const uchar *s_buffer, int words) |
4524 | { | 4525 | { |
4525 | int i; | 4526 | int i; |
4526 | 4527 | ||
@@ -4642,8 +4643,8 @@ static ushort AscInitLram(ASC_DVC_VAR *asc_dvc) | |||
4642 | } | 4643 | } |
4643 | 4644 | ||
4644 | static ASC_DCNT | 4645 | static ASC_DCNT |
4645 | AscLoadMicroCode(PortAddr iop_base, | 4646 | AscLoadMicroCode(PortAddr iop_base, ushort s_addr, |
4646 | ushort s_addr, uchar *mcode_buf, ushort mcode_size) | 4647 | const uchar *mcode_buf, ushort mcode_size) |
4647 | { | 4648 | { |
4648 | ASC_DCNT chksum; | 4649 | ASC_DCNT chksum; |
4649 | ushort mcode_word_size; | 4650 | ushort mcode_word_size; |
@@ -4668,1618 +4669,6 @@ AscLoadMicroCode(PortAddr iop_base, | |||
4668 | return chksum; | 4669 | return chksum; |
4669 | } | 4670 | } |
4670 | 4671 | ||
4671 | /* Microcode buffer is kept after initialization for error recovery. */ | ||
4672 | static uchar _asc_mcode_buf[] = { | ||
4673 | 0x01, 0x03, 0x01, 0x19, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
4674 | 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, | ||
4675 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
4676 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
4677 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
4678 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x12, 0x0D, 0x05, | ||
4679 | 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
4680 | 0xFF, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
4681 | 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xFF, | ||
4682 | 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
4683 | 0x00, 0x00, 0xE4, 0x88, 0x00, 0x00, 0x00, 0x00, 0x80, 0x73, 0x48, 0x04, | ||
4684 | 0x36, 0x00, 0x00, 0xA2, 0xC2, 0x00, 0x80, 0x73, 0x03, 0x23, 0x36, 0x40, | ||
4685 | 0xB6, 0x00, 0x36, 0x00, 0x05, 0xD6, 0x0C, 0xD2, 0x12, 0xDA, 0x00, 0xA2, | ||
4686 | 0xC2, 0x00, 0x92, 0x80, 0x1E, 0x98, 0x50, 0x00, 0xF5, 0x00, 0x48, 0x98, | ||
4687 | 0xDF, 0x23, 0x36, 0x60, 0xB6, 0x00, 0x92, 0x80, 0x4F, 0x00, 0xF5, 0x00, | ||
4688 | 0x48, 0x98, 0xEF, 0x23, 0x36, 0x60, 0xB6, 0x00, 0x92, 0x80, 0x80, 0x62, | ||
4689 | 0x92, 0x80, 0x00, 0x46, 0x15, 0xEE, 0x13, 0xEA, 0x02, 0x01, 0x09, 0xD8, | ||
4690 | 0xCD, 0x04, 0x4D, 0x00, 0x00, 0xA3, 0xD6, 0x00, 0xA6, 0x97, 0x7F, 0x23, | ||
4691 | 0x04, 0x61, 0x84, 0x01, 0xE6, 0x84, 0xD2, 0xC1, 0x80, 0x73, 0xCD, 0x04, | ||
4692 | 0x4D, 0x00, 0x00, 0xA3, 0xDA, 0x01, 0xA6, 0x97, 0xC6, 0x81, 0xC2, 0x88, | ||
4693 | 0x80, 0x73, 0x80, 0x77, 0x00, 0x01, 0x01, 0xA1, 0xFE, 0x00, 0x4F, 0x00, | ||
4694 | 0x84, 0x97, 0x07, 0xA6, 0x08, 0x01, 0x00, 0x33, 0x03, 0x00, 0xC2, 0x88, | ||
4695 | 0x03, 0x03, 0x01, 0xDE, 0xC2, 0x88, 0xCE, 0x00, 0x69, 0x60, 0xCE, 0x00, | ||
4696 | 0x02, 0x03, 0x4A, 0x60, 0x00, 0xA2, 0x78, 0x01, 0x80, 0x63, 0x07, 0xA6, | ||
4697 | 0x24, 0x01, 0x78, 0x81, 0x03, 0x03, 0x80, 0x63, 0xE2, 0x00, 0x07, 0xA6, | ||
4698 | 0x34, 0x01, 0x00, 0x33, 0x04, 0x00, 0xC2, 0x88, 0x03, 0x07, 0x02, 0x01, | ||
4699 | 0x04, 0xCA, 0x0D, 0x23, 0x68, 0x98, 0x4D, 0x04, 0x04, 0x85, 0x05, 0xD8, | ||
4700 | 0x0D, 0x23, 0x68, 0x98, 0xCD, 0x04, 0x15, 0x23, 0xF8, 0x88, 0xFB, 0x23, | ||
4701 | 0x02, 0x61, 0x82, 0x01, 0x80, 0x63, 0x02, 0x03, 0x06, 0xA3, 0x62, 0x01, | ||
4702 | 0x00, 0x33, 0x0A, 0x00, 0xC2, 0x88, 0x4E, 0x00, 0x07, 0xA3, 0x6E, 0x01, | ||
4703 | 0x00, 0x33, 0x0B, 0x00, 0xC2, 0x88, 0xCD, 0x04, 0x36, 0x2D, 0x00, 0x33, | ||
4704 | 0x1A, 0x00, 0xC2, 0x88, 0x50, 0x04, 0x88, 0x81, 0x06, 0xAB, 0x82, 0x01, | ||
4705 | 0x88, 0x81, 0x4E, 0x00, 0x07, 0xA3, 0x92, 0x01, 0x50, 0x00, 0x00, 0xA3, | ||
4706 | 0x3C, 0x01, 0x00, 0x05, 0x7C, 0x81, 0x46, 0x97, 0x02, 0x01, 0x05, 0xC6, | ||
4707 | 0x04, 0x23, 0xA0, 0x01, 0x15, 0x23, 0xA1, 0x01, 0xBE, 0x81, 0xFD, 0x23, | ||
4708 | 0x02, 0x61, 0x82, 0x01, 0x0A, 0xDA, 0x4A, 0x00, 0x06, 0x61, 0x00, 0xA0, | ||
4709 | 0xB4, 0x01, 0x80, 0x63, 0xCD, 0x04, 0x36, 0x2D, 0x00, 0x33, 0x1B, 0x00, | ||
4710 | 0xC2, 0x88, 0x06, 0x23, 0x68, 0x98, 0xCD, 0x04, 0xE6, 0x84, 0x06, 0x01, | ||
4711 | 0x00, 0xA2, 0xD4, 0x01, 0x57, 0x60, 0x00, 0xA0, 0xDA, 0x01, 0xE6, 0x84, | ||
4712 | 0x80, 0x23, 0xA0, 0x01, 0xE6, 0x84, 0x80, 0x73, 0x4B, 0x00, 0x06, 0x61, | ||
4713 | 0x00, 0xA2, 0x00, 0x02, 0x04, 0x01, 0x0C, 0xDE, 0x02, 0x01, 0x03, 0xCC, | ||
4714 | 0x4F, 0x00, 0x84, 0x97, 0xFC, 0x81, 0x08, 0x23, 0x02, 0x41, 0x82, 0x01, | ||
4715 | 0x4F, 0x00, 0x62, 0x97, 0x48, 0x04, 0x84, 0x80, 0xF0, 0x97, 0x00, 0x46, | ||
4716 | 0x56, 0x00, 0x03, 0xC0, 0x01, 0x23, 0xE8, 0x00, 0x81, 0x73, 0x06, 0x29, | ||
4717 | 0x03, 0x42, 0x06, 0xE2, 0x03, 0xEE, 0x6B, 0xEB, 0x11, 0x23, 0xF8, 0x88, | ||
4718 | 0x04, 0x98, 0xF0, 0x80, 0x80, 0x73, 0x80, 0x77, 0x07, 0xA4, 0x2A, 0x02, | ||
4719 | 0x7C, 0x95, 0x06, 0xA6, 0x34, 0x02, 0x03, 0xA6, 0x4C, 0x04, 0x46, 0x82, | ||
4720 | 0x04, 0x01, 0x03, 0xD8, 0xB4, 0x98, 0x6A, 0x96, 0x46, 0x82, 0xFE, 0x95, | ||
4721 | 0x80, 0x67, 0x83, 0x03, 0x80, 0x63, 0xB6, 0x2D, 0x02, 0xA6, 0x6C, 0x02, | ||
4722 | 0x07, 0xA6, 0x5A, 0x02, 0x06, 0xA6, 0x5E, 0x02, 0x03, 0xA6, 0x62, 0x02, | ||
4723 | 0xC2, 0x88, 0x7C, 0x95, 0x48, 0x82, 0x60, 0x96, 0x48, 0x82, 0x04, 0x23, | ||
4724 | 0xA0, 0x01, 0x14, 0x23, 0xA1, 0x01, 0x3C, 0x84, 0x04, 0x01, 0x0C, 0xDC, | ||
4725 | 0xE0, 0x23, 0x25, 0x61, 0xEF, 0x00, 0x14, 0x01, 0x4F, 0x04, 0xA8, 0x01, | ||
4726 | 0x6F, 0x00, 0xA5, 0x01, 0x03, 0x23, 0xA4, 0x01, 0x06, 0x23, 0x9C, 0x01, | ||
4727 | 0x24, 0x2B, 0x1C, 0x01, 0x02, 0xA6, 0xAA, 0x02, 0x07, 0xA6, 0x5A, 0x02, | ||
4728 | 0x06, 0xA6, 0x5E, 0x02, 0x03, 0xA6, 0x20, 0x04, 0x01, 0xA6, 0xB4, 0x02, | ||
4729 | 0x00, 0xA6, 0xB4, 0x02, 0x00, 0x33, 0x12, 0x00, 0xC2, 0x88, 0x00, 0x0E, | ||
4730 | 0x80, 0x63, 0x00, 0x43, 0x00, 0xA0, 0x8C, 0x02, 0x4D, 0x04, 0x04, 0x01, | ||
4731 | 0x0B, 0xDC, 0xE7, 0x23, 0x04, 0x61, 0x84, 0x01, 0x10, 0x31, 0x12, 0x35, | ||
4732 | 0x14, 0x01, 0xEC, 0x00, 0x6C, 0x38, 0x00, 0x3F, 0x00, 0x00, 0xEA, 0x82, | ||
4733 | 0x18, 0x23, 0x04, 0x61, 0x18, 0xA0, 0xE2, 0x02, 0x04, 0x01, 0xA2, 0xC8, | ||
4734 | 0x00, 0x33, 0x1F, 0x00, 0xC2, 0x88, 0x08, 0x31, 0x0A, 0x35, 0x0C, 0x39, | ||
4735 | 0x0E, 0x3D, 0x7E, 0x98, 0xB6, 0x2D, 0x01, 0xA6, 0x14, 0x03, 0x00, 0xA6, | ||
4736 | 0x14, 0x03, 0x07, 0xA6, 0x0C, 0x03, 0x06, 0xA6, 0x10, 0x03, 0x03, 0xA6, | ||
4737 | 0x20, 0x04, 0x02, 0xA6, 0x6C, 0x02, 0x00, 0x33, 0x33, 0x00, 0xC2, 0x88, | ||
4738 | 0x7C, 0x95, 0xEE, 0x82, 0x60, 0x96, 0xEE, 0x82, 0x82, 0x98, 0x80, 0x42, | ||
4739 | 0x7E, 0x98, 0x64, 0xE4, 0x04, 0x01, 0x2D, 0xC8, 0x31, 0x05, 0x07, 0x01, | ||
4740 | 0x00, 0xA2, 0x54, 0x03, 0x00, 0x43, 0x87, 0x01, 0x05, 0x05, 0x86, 0x98, | ||
4741 | 0x7E, 0x98, 0x00, 0xA6, 0x16, 0x03, 0x07, 0xA6, 0x4C, 0x03, 0x03, 0xA6, | ||
4742 | 0x3C, 0x04, 0x06, 0xA6, 0x50, 0x03, 0x01, 0xA6, 0x16, 0x03, 0x00, 0x33, | ||
4743 | 0x25, 0x00, 0xC2, 0x88, 0x7C, 0x95, 0x32, 0x83, 0x60, 0x96, 0x32, 0x83, | ||
4744 | 0x04, 0x01, 0x10, 0xCE, 0x07, 0xC8, 0x05, 0x05, 0xEB, 0x04, 0x00, 0x33, | ||
4745 | 0x00, 0x20, 0xC0, 0x20, 0x81, 0x62, 0x72, 0x83, 0x00, 0x01, 0x05, 0x05, | ||
4746 | 0xFF, 0xA2, 0x7A, 0x03, 0xB1, 0x01, 0x08, 0x23, 0xB2, 0x01, 0x2E, 0x83, | ||
4747 | 0x05, 0x05, 0x15, 0x01, 0x00, 0xA2, 0x9A, 0x03, 0xEC, 0x00, 0x6E, 0x00, | ||
4748 | 0x95, 0x01, 0x6C, 0x38, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xA6, 0x96, 0x03, | ||
4749 | 0x00, 0xA6, 0x96, 0x03, 0x10, 0x84, 0x80, 0x42, 0x7E, 0x98, 0x01, 0xA6, | ||
4750 | 0xA4, 0x03, 0x00, 0xA6, 0xBC, 0x03, 0x10, 0x84, 0xA8, 0x98, 0x80, 0x42, | ||
4751 | 0x01, 0xA6, 0xA4, 0x03, 0x07, 0xA6, 0xB2, 0x03, 0xD4, 0x83, 0x7C, 0x95, | ||
4752 | 0xA8, 0x83, 0x00, 0x33, 0x2F, 0x00, 0xC2, 0x88, 0xA8, 0x98, 0x80, 0x42, | ||
4753 | 0x00, 0xA6, 0xBC, 0x03, 0x07, 0xA6, 0xCA, 0x03, 0xD4, 0x83, 0x7C, 0x95, | ||
4754 | 0xC0, 0x83, 0x00, 0x33, 0x26, 0x00, 0xC2, 0x88, 0x38, 0x2B, 0x80, 0x32, | ||
4755 | 0x80, 0x36, 0x04, 0x23, 0xA0, 0x01, 0x12, 0x23, 0xA1, 0x01, 0x10, 0x84, | ||
4756 | 0x07, 0xF0, 0x06, 0xA4, 0xF4, 0x03, 0x80, 0x6B, 0x80, 0x67, 0x05, 0x23, | ||
4757 | 0x83, 0x03, 0x80, 0x63, 0x03, 0xA6, 0x0E, 0x04, 0x07, 0xA6, 0x06, 0x04, | ||
4758 | 0x06, 0xA6, 0x0A, 0x04, 0x00, 0x33, 0x17, 0x00, 0xC2, 0x88, 0x7C, 0x95, | ||
4759 | 0xF4, 0x83, 0x60, 0x96, 0xF4, 0x83, 0x20, 0x84, 0x07, 0xF0, 0x06, 0xA4, | ||
4760 | 0x20, 0x04, 0x80, 0x6B, 0x80, 0x67, 0x05, 0x23, 0x83, 0x03, 0x80, 0x63, | ||
4761 | 0xB6, 0x2D, 0x03, 0xA6, 0x3C, 0x04, 0x07, 0xA6, 0x34, 0x04, 0x06, 0xA6, | ||
4762 | 0x38, 0x04, 0x00, 0x33, 0x30, 0x00, 0xC2, 0x88, 0x7C, 0x95, 0x20, 0x84, | ||
4763 | 0x60, 0x96, 0x20, 0x84, 0x1D, 0x01, 0x06, 0xCC, 0x00, 0x33, 0x00, 0x84, | ||
4764 | 0xC0, 0x20, 0x00, 0x23, 0xEA, 0x00, 0x81, 0x62, 0xA2, 0x0D, 0x80, 0x63, | ||
4765 | 0x07, 0xA6, 0x5A, 0x04, 0x00, 0x33, 0x18, 0x00, 0xC2, 0x88, 0x03, 0x03, | ||
4766 | 0x80, 0x63, 0xA3, 0x01, 0x07, 0xA4, 0x64, 0x04, 0x23, 0x01, 0x00, 0xA2, | ||
4767 | 0x86, 0x04, 0x0A, 0xA0, 0x76, 0x04, 0xE0, 0x00, 0x00, 0x33, 0x1D, 0x00, | ||
4768 | 0xC2, 0x88, 0x0B, 0xA0, 0x82, 0x04, 0xE0, 0x00, 0x00, 0x33, 0x1E, 0x00, | ||
4769 | 0xC2, 0x88, 0x42, 0x23, 0xF8, 0x88, 0x00, 0x23, 0x22, 0xA3, 0xE6, 0x04, | ||
4770 | 0x08, 0x23, 0x22, 0xA3, 0xA2, 0x04, 0x28, 0x23, 0x22, 0xA3, 0xAE, 0x04, | ||
4771 | 0x02, 0x23, 0x22, 0xA3, 0xC4, 0x04, 0x42, 0x23, 0xF8, 0x88, 0x4A, 0x00, | ||
4772 | 0x06, 0x61, 0x00, 0xA0, 0xAE, 0x04, 0x45, 0x23, 0xF8, 0x88, 0x04, 0x98, | ||
4773 | 0x00, 0xA2, 0xC0, 0x04, 0xB4, 0x98, 0x00, 0x33, 0x00, 0x82, 0xC0, 0x20, | ||
4774 | 0x81, 0x62, 0xE8, 0x81, 0x47, 0x23, 0xF8, 0x88, 0x04, 0x01, 0x0B, 0xDE, | ||
4775 | 0x04, 0x98, 0xB4, 0x98, 0x00, 0x33, 0x00, 0x81, 0xC0, 0x20, 0x81, 0x62, | ||
4776 | 0x14, 0x01, 0x00, 0xA0, 0x00, 0x02, 0x43, 0x23, 0xF8, 0x88, 0x04, 0x23, | ||
4777 | 0xA0, 0x01, 0x44, 0x23, 0xA1, 0x01, 0x80, 0x73, 0x4D, 0x00, 0x03, 0xA3, | ||
4778 | 0xF4, 0x04, 0x00, 0x33, 0x27, 0x00, 0xC2, 0x88, 0x04, 0x01, 0x04, 0xDC, | ||
4779 | 0x02, 0x23, 0xA2, 0x01, 0x04, 0x23, 0xA0, 0x01, 0x04, 0x98, 0x26, 0x95, | ||
4780 | 0x4B, 0x00, 0xF6, 0x00, 0x4F, 0x04, 0x4F, 0x00, 0x00, 0xA3, 0x22, 0x05, | ||
4781 | 0x00, 0x05, 0x76, 0x00, 0x06, 0x61, 0x00, 0xA2, 0x1C, 0x05, 0x0A, 0x85, | ||
4782 | 0x46, 0x97, 0xCD, 0x04, 0x24, 0x85, 0x48, 0x04, 0x84, 0x80, 0x02, 0x01, | ||
4783 | 0x03, 0xDA, 0x80, 0x23, 0x82, 0x01, 0x34, 0x85, 0x02, 0x23, 0xA0, 0x01, | ||
4784 | 0x4A, 0x00, 0x06, 0x61, 0x00, 0xA2, 0x40, 0x05, 0x1D, 0x01, 0x04, 0xD6, | ||
4785 | 0xFF, 0x23, 0x86, 0x41, 0x4B, 0x60, 0xCB, 0x00, 0xFF, 0x23, 0x80, 0x01, | ||
4786 | 0x49, 0x00, 0x81, 0x01, 0x04, 0x01, 0x02, 0xC8, 0x30, 0x01, 0x80, 0x01, | ||
4787 | 0xF7, 0x04, 0x03, 0x01, 0x49, 0x04, 0x80, 0x01, 0xC9, 0x00, 0x00, 0x05, | ||
4788 | 0x00, 0x01, 0xFF, 0xA0, 0x60, 0x05, 0x77, 0x04, 0x01, 0x23, 0xEA, 0x00, | ||
4789 | 0x5D, 0x00, 0xFE, 0xC7, 0x00, 0x62, 0x00, 0x23, 0xEA, 0x00, 0x00, 0x63, | ||
4790 | 0x07, 0xA4, 0xF8, 0x05, 0x03, 0x03, 0x02, 0xA0, 0x8E, 0x05, 0xF4, 0x85, | ||
4791 | 0x00, 0x33, 0x2D, 0x00, 0xC2, 0x88, 0x04, 0xA0, 0xB8, 0x05, 0x80, 0x63, | ||
4792 | 0x00, 0x23, 0xDF, 0x00, 0x4A, 0x00, 0x06, 0x61, 0x00, 0xA2, 0xA4, 0x05, | ||
4793 | 0x1D, 0x01, 0x06, 0xD6, 0x02, 0x23, 0x02, 0x41, 0x82, 0x01, 0x50, 0x00, | ||
4794 | 0x62, 0x97, 0x04, 0x85, 0x04, 0x23, 0x02, 0x41, 0x82, 0x01, 0x04, 0x85, | ||
4795 | 0x08, 0xA0, 0xBE, 0x05, 0xF4, 0x85, 0x03, 0xA0, 0xC4, 0x05, 0xF4, 0x85, | ||
4796 | 0x01, 0xA0, 0xCE, 0x05, 0x88, 0x00, 0x80, 0x63, 0xCC, 0x86, 0x07, 0xA0, | ||
4797 | 0xEE, 0x05, 0x5F, 0x00, 0x00, 0x2B, 0xDF, 0x08, 0x00, 0xA2, 0xE6, 0x05, | ||
4798 | 0x80, 0x67, 0x80, 0x63, 0x01, 0xA2, 0x7A, 0x06, 0x7C, 0x85, 0x06, 0x23, | ||
4799 | 0x68, 0x98, 0x48, 0x23, 0xF8, 0x88, 0x07, 0x23, 0x80, 0x00, 0x06, 0x87, | ||
4800 | 0x80, 0x63, 0x7C, 0x85, 0x00, 0x23, 0xDF, 0x00, 0x00, 0x63, 0x4A, 0x00, | ||
4801 | 0x06, 0x61, 0x00, 0xA2, 0x36, 0x06, 0x1D, 0x01, 0x16, 0xD4, 0xC0, 0x23, | ||
4802 | 0x07, 0x41, 0x83, 0x03, 0x80, 0x63, 0x06, 0xA6, 0x1C, 0x06, 0x00, 0x33, | ||
4803 | 0x37, 0x00, 0xC2, 0x88, 0x1D, 0x01, 0x01, 0xD6, 0x20, 0x23, 0x63, 0x60, | ||
4804 | 0x83, 0x03, 0x80, 0x63, 0x02, 0x23, 0xDF, 0x00, 0x07, 0xA6, 0x7C, 0x05, | ||
4805 | 0xEF, 0x04, 0x6F, 0x00, 0x00, 0x63, 0x4B, 0x00, 0x06, 0x41, 0xCB, 0x00, | ||
4806 | 0x52, 0x00, 0x06, 0x61, 0x00, 0xA2, 0x4E, 0x06, 0x1D, 0x01, 0x03, 0xCA, | ||
4807 | 0xC0, 0x23, 0x07, 0x41, 0x00, 0x63, 0x1D, 0x01, 0x04, 0xCC, 0x00, 0x33, | ||
4808 | 0x00, 0x83, 0xC0, 0x20, 0x81, 0x62, 0x80, 0x23, 0x07, 0x41, 0x00, 0x63, | ||
4809 | 0x80, 0x67, 0x08, 0x23, 0x83, 0x03, 0x80, 0x63, 0x00, 0x63, 0x01, 0x23, | ||
4810 | 0xDF, 0x00, 0x06, 0xA6, 0x84, 0x06, 0x07, 0xA6, 0x7C, 0x05, 0x80, 0x67, | ||
4811 | 0x80, 0x63, 0x00, 0x33, 0x00, 0x40, 0xC0, 0x20, 0x81, 0x62, 0x00, 0x63, | ||
4812 | 0x00, 0x00, 0xFE, 0x95, 0x83, 0x03, 0x80, 0x63, 0x06, 0xA6, 0x94, 0x06, | ||
4813 | 0x07, 0xA6, 0x7C, 0x05, 0x00, 0x00, 0x01, 0xA0, 0x14, 0x07, 0x00, 0x2B, | ||
4814 | 0x40, 0x0E, 0x80, 0x63, 0x01, 0x00, 0x06, 0xA6, 0xAA, 0x06, 0x07, 0xA6, | ||
4815 | 0x7C, 0x05, 0x40, 0x0E, 0x80, 0x63, 0x00, 0x43, 0x00, 0xA0, 0xA2, 0x06, | ||
4816 | 0x06, 0xA6, 0xBC, 0x06, 0x07, 0xA6, 0x7C, 0x05, 0x80, 0x67, 0x40, 0x0E, | ||
4817 | 0x80, 0x63, 0x07, 0xA6, 0x7C, 0x05, 0x00, 0x23, 0xDF, 0x00, 0x00, 0x63, | ||
4818 | 0x07, 0xA6, 0xD6, 0x06, 0x00, 0x33, 0x2A, 0x00, 0xC2, 0x88, 0x03, 0x03, | ||
4819 | 0x80, 0x63, 0x89, 0x00, 0x0A, 0x2B, 0x07, 0xA6, 0xE8, 0x06, 0x00, 0x33, | ||
4820 | 0x29, 0x00, 0xC2, 0x88, 0x00, 0x43, 0x00, 0xA2, 0xF4, 0x06, 0xC0, 0x0E, | ||
4821 | 0x80, 0x63, 0xDE, 0x86, 0xC0, 0x0E, 0x00, 0x33, 0x00, 0x80, 0xC0, 0x20, | ||
4822 | 0x81, 0x62, 0x04, 0x01, 0x02, 0xDA, 0x80, 0x63, 0x7C, 0x85, 0x80, 0x7B, | ||
4823 | 0x80, 0x63, 0x06, 0xA6, 0x8C, 0x06, 0x00, 0x33, 0x2C, 0x00, 0xC2, 0x88, | ||
4824 | 0x0C, 0xA2, 0x2E, 0x07, 0xFE, 0x95, 0x83, 0x03, 0x80, 0x63, 0x06, 0xA6, | ||
4825 | 0x2C, 0x07, 0x07, 0xA6, 0x7C, 0x05, 0x00, 0x33, 0x3D, 0x00, 0xC2, 0x88, | ||
4826 | 0x00, 0x00, 0x80, 0x67, 0x83, 0x03, 0x80, 0x63, 0x0C, 0xA0, 0x44, 0x07, | ||
4827 | 0x07, 0xA6, 0x7C, 0x05, 0xBF, 0x23, 0x04, 0x61, 0x84, 0x01, 0xE6, 0x84, | ||
4828 | 0x00, 0x63, 0xF0, 0x04, 0x01, 0x01, 0xF1, 0x00, 0x00, 0x01, 0xF2, 0x00, | ||
4829 | 0x01, 0x05, 0x80, 0x01, 0x72, 0x04, 0x71, 0x00, 0x81, 0x01, 0x70, 0x04, | ||
4830 | 0x80, 0x05, 0x81, 0x05, 0x00, 0x63, 0xF0, 0x04, 0xF2, 0x00, 0x72, 0x04, | ||
4831 | 0x01, 0x01, 0xF1, 0x00, 0x70, 0x00, 0x81, 0x01, 0x70, 0x04, 0x71, 0x00, | ||
4832 | 0x81, 0x01, 0x72, 0x00, 0x80, 0x01, 0x71, 0x04, 0x70, 0x00, 0x80, 0x01, | ||
4833 | 0x70, 0x04, 0x00, 0x63, 0xF0, 0x04, 0xF2, 0x00, 0x72, 0x04, 0x00, 0x01, | ||
4834 | 0xF1, 0x00, 0x70, 0x00, 0x80, 0x01, 0x70, 0x04, 0x71, 0x00, 0x80, 0x01, | ||
4835 | 0x72, 0x00, 0x81, 0x01, 0x71, 0x04, 0x70, 0x00, 0x81, 0x01, 0x70, 0x04, | ||
4836 | 0x00, 0x63, 0x00, 0x23, 0xB3, 0x01, 0x83, 0x05, 0xA3, 0x01, 0xA2, 0x01, | ||
4837 | 0xA1, 0x01, 0x01, 0x23, 0xA0, 0x01, 0x00, 0x01, 0xC8, 0x00, 0x03, 0xA1, | ||
4838 | 0xC4, 0x07, 0x00, 0x33, 0x07, 0x00, 0xC2, 0x88, 0x80, 0x05, 0x81, 0x05, | ||
4839 | 0x04, 0x01, 0x11, 0xC8, 0x48, 0x00, 0xB0, 0x01, 0xB1, 0x01, 0x08, 0x23, | ||
4840 | 0xB2, 0x01, 0x05, 0x01, 0x48, 0x04, 0x00, 0x43, 0x00, 0xA2, 0xE4, 0x07, | ||
4841 | 0x00, 0x05, 0xDA, 0x87, 0x00, 0x01, 0xC8, 0x00, 0xFF, 0x23, 0x80, 0x01, | ||
4842 | 0x05, 0x05, 0x00, 0x63, 0xF7, 0x04, 0x1A, 0x09, 0xF6, 0x08, 0x6E, 0x04, | ||
4843 | 0x00, 0x02, 0x80, 0x43, 0x76, 0x08, 0x80, 0x02, 0x77, 0x04, 0x00, 0x63, | ||
4844 | 0xF7, 0x04, 0x1A, 0x09, 0xF6, 0x08, 0x6E, 0x04, 0x00, 0x02, 0x00, 0xA0, | ||
4845 | 0x14, 0x08, 0x16, 0x88, 0x00, 0x43, 0x76, 0x08, 0x80, 0x02, 0x77, 0x04, | ||
4846 | 0x00, 0x63, 0xF3, 0x04, 0x00, 0x23, 0xF4, 0x00, 0x74, 0x00, 0x80, 0x43, | ||
4847 | 0xF4, 0x00, 0xCF, 0x40, 0x00, 0xA2, 0x44, 0x08, 0x74, 0x04, 0x02, 0x01, | ||
4848 | 0xF7, 0xC9, 0xF6, 0xD9, 0x00, 0x01, 0x01, 0xA1, 0x24, 0x08, 0x04, 0x98, | ||
4849 | 0x26, 0x95, 0x24, 0x88, 0x73, 0x04, 0x00, 0x63, 0xF3, 0x04, 0x75, 0x04, | ||
4850 | 0x5A, 0x88, 0x02, 0x01, 0x04, 0xD8, 0x46, 0x97, 0x04, 0x98, 0x26, 0x95, | ||
4851 | 0x4A, 0x88, 0x75, 0x00, 0x00, 0xA3, 0x64, 0x08, 0x00, 0x05, 0x4E, 0x88, | ||
4852 | 0x73, 0x04, 0x00, 0x63, 0x80, 0x7B, 0x80, 0x63, 0x06, 0xA6, 0x76, 0x08, | ||
4853 | 0x00, 0x33, 0x3E, 0x00, 0xC2, 0x88, 0x80, 0x67, 0x83, 0x03, 0x80, 0x63, | ||
4854 | 0x00, 0x63, 0x38, 0x2B, 0x9C, 0x88, 0x38, 0x2B, 0x92, 0x88, 0x32, 0x09, | ||
4855 | 0x31, 0x05, 0x92, 0x98, 0x05, 0x05, 0xB2, 0x09, 0x00, 0x63, 0x00, 0x32, | ||
4856 | 0x00, 0x36, 0x00, 0x3A, 0x00, 0x3E, 0x00, 0x63, 0x80, 0x32, 0x80, 0x36, | ||
4857 | 0x80, 0x3A, 0x80, 0x3E, 0xB4, 0x3D, 0x00, 0x63, 0x38, 0x2B, 0x40, 0x32, | ||
4858 | 0x40, 0x36, 0x40, 0x3A, 0x40, 0x3E, 0x00, 0x63, 0x5A, 0x20, 0xC9, 0x40, | ||
4859 | 0x00, 0xA0, 0xB4, 0x08, 0x5D, 0x00, 0xFE, 0xC3, 0x00, 0x63, 0x80, 0x73, | ||
4860 | 0xE6, 0x20, 0x02, 0x23, 0xE8, 0x00, 0x82, 0x73, 0xFF, 0xFD, 0x80, 0x73, | ||
4861 | 0x13, 0x23, 0xF8, 0x88, 0x66, 0x20, 0xC0, 0x20, 0x04, 0x23, 0xA0, 0x01, | ||
4862 | 0xA1, 0x23, 0xA1, 0x01, 0x81, 0x62, 0xE2, 0x88, 0x80, 0x73, 0x80, 0x77, | ||
4863 | 0x68, 0x00, 0x00, 0xA2, 0x80, 0x00, 0x03, 0xC2, 0xF1, 0xC7, 0x41, 0x23, | ||
4864 | 0xF8, 0x88, 0x11, 0x23, 0xA1, 0x01, 0x04, 0x23, 0xA0, 0x01, 0xE6, 0x84, | ||
4865 | }; | ||
4866 | |||
4867 | static unsigned short _asc_mcode_size = sizeof(_asc_mcode_buf); | ||
4868 | static ADV_DCNT _asc_mcode_chksum = 0x012C453FUL; | ||
4869 | |||
4870 | /* Microcode buffer is kept after initialization for error recovery. */ | ||
4871 | static unsigned char _adv_asc3550_buf[] = { | ||
4872 | 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf0, 0x00, 0x16, 0x18, 0xe4, 0x00, 0xfc, | ||
4873 | 0x01, 0x00, 0x48, 0xe4, 0xbe, 0x18, 0x18, 0x80, 0x03, 0xf6, 0x02, 0x00, | ||
4874 | 0x00, 0xfa, 0xff, 0xff, 0x28, 0x0e, 0x9e, 0xe7, 0xff, 0x00, 0x82, 0xe7, | ||
4875 | 0x00, 0xea, 0x00, 0xf6, 0x01, 0xe6, 0x09, 0xe7, 0x55, 0xf0, 0x01, 0xf6, | ||
4876 | 0x01, 0xfa, 0x08, 0x00, 0x03, 0x00, 0x04, 0x00, 0x18, 0xf4, 0x10, 0x00, | ||
4877 | 0x00, 0xec, 0x85, 0xf0, 0xbc, 0x00, 0xd5, 0xf0, 0x8e, 0x0c, 0x38, 0x54, | ||
4878 | 0x00, 0xe6, 0x1e, 0xf0, 0x86, 0xf0, 0xb4, 0x00, 0x98, 0x57, 0xd0, 0x01, | ||
4879 | 0x0c, 0x1c, 0x3e, 0x1c, 0x0c, 0x00, 0xbb, 0x00, 0xaa, 0x18, 0x02, 0x80, | ||
4880 | 0x32, 0xf0, 0x01, 0xfc, 0x88, 0x0c, 0xc6, 0x12, 0x02, 0x13, 0x18, 0x40, | ||
4881 | 0x00, 0x57, 0x01, 0xea, 0x3c, 0x00, 0x6c, 0x01, 0x6e, 0x01, 0x04, 0x12, | ||
4882 | 0x3e, 0x57, 0x00, 0x80, 0x03, 0xe6, 0xb6, 0x00, 0xc0, 0x00, 0x01, 0x01, | ||
4883 | 0x3e, 0x01, 0xda, 0x0f, 0x22, 0x10, 0x08, 0x12, 0x02, 0x4a, 0xb9, 0x54, | ||
4884 | 0x03, 0x58, 0x1b, 0x80, 0x30, 0xe4, 0x4b, 0xe4, 0x20, 0x00, 0x32, 0x00, | ||
4885 | 0x3e, 0x00, 0x80, 0x00, 0x24, 0x01, 0x3c, 0x01, 0x68, 0x01, 0x6a, 0x01, | ||
4886 | 0x70, 0x01, 0x72, 0x01, 0x74, 0x01, 0x76, 0x01, 0x78, 0x01, 0x62, 0x0a, | ||
4887 | 0x92, 0x0c, 0x2c, 0x10, 0x2e, 0x10, 0x06, 0x13, 0x4c, 0x1c, 0xbb, 0x55, | ||
4888 | 0x3c, 0x56, 0x04, 0x80, 0x4a, 0xe4, 0x02, 0xee, 0x5b, 0xf0, 0xb1, 0xf0, | ||
4889 | 0x03, 0xf7, 0x06, 0xf7, 0x03, 0xfc, 0x0f, 0x00, 0x40, 0x00, 0xbe, 0x00, | ||
4890 | 0x00, 0x01, 0xb0, 0x08, 0x30, 0x13, 0x64, 0x15, 0x32, 0x1c, 0x38, 0x1c, | ||
4891 | 0x4e, 0x1c, 0x10, 0x44, 0x02, 0x48, 0x00, 0x4c, 0x04, 0xea, 0x5d, 0xf0, | ||
4892 | 0x04, 0xf6, 0x02, 0xfc, 0x05, 0x00, 0x34, 0x00, 0x36, 0x00, 0x98, 0x00, | ||
4893 | 0xcc, 0x00, 0x20, 0x01, 0x4e, 0x01, 0x4e, 0x0b, 0x1e, 0x0e, 0x0c, 0x10, | ||
4894 | 0x0a, 0x12, 0x04, 0x13, 0x40, 0x13, 0x30, 0x1c, 0x00, 0x4e, 0xbd, 0x56, | ||
4895 | 0x06, 0x83, 0x00, 0xdc, 0x05, 0xf0, 0x09, 0xf0, 0x59, 0xf0, 0xa7, 0xf0, | ||
4896 | 0xb8, 0xf0, 0x0e, 0xf7, 0x06, 0x00, 0x19, 0x00, 0x33, 0x00, 0x9b, 0x00, | ||
4897 | 0xa4, 0x00, 0xb5, 0x00, 0xba, 0x00, 0xd0, 0x00, 0xe1, 0x00, 0xe7, 0x00, | ||
4898 | 0xde, 0x03, 0x56, 0x0a, 0x14, 0x0e, 0x02, 0x10, 0x04, 0x10, 0x0a, 0x10, | ||
4899 | 0x36, 0x10, 0x0a, 0x13, 0x12, 0x13, 0x52, 0x13, 0x10, 0x15, 0x14, 0x15, | ||
4900 | 0xac, 0x16, 0x20, 0x1c, 0x34, 0x1c, 0x36, 0x1c, 0x08, 0x44, 0x38, 0x44, | ||
4901 | 0x91, 0x44, 0x0a, 0x45, 0x48, 0x46, 0x01, 0x48, 0x68, 0x54, 0x83, 0x55, | ||
4902 | 0xb0, 0x57, 0x01, 0x58, 0x83, 0x59, 0x05, 0xe6, 0x0b, 0xf0, 0x0c, 0xf0, | ||
4903 | 0x5c, 0xf0, 0x4b, 0xf4, 0x04, 0xf8, 0x05, 0xf8, 0x02, 0xfa, 0x03, 0xfa, | ||
4904 | 0x04, 0xfc, 0x05, 0xfc, 0x07, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0x1c, 0x00, | ||
4905 | 0x9e, 0x00, 0xa8, 0x00, 0xaa, 0x00, 0xb9, 0x00, 0xe0, 0x00, 0x22, 0x01, | ||
4906 | 0x26, 0x01, 0x79, 0x01, 0x7a, 0x01, 0xc0, 0x01, 0xc2, 0x01, 0x7c, 0x02, | ||
4907 | 0x5a, 0x03, 0xea, 0x04, 0xe8, 0x07, 0x68, 0x08, 0x69, 0x08, 0xba, 0x08, | ||
4908 | 0xe9, 0x09, 0x06, 0x0b, 0x3a, 0x0e, 0x00, 0x10, 0x1a, 0x10, 0xed, 0x10, | ||
4909 | 0xf1, 0x10, 0x06, 0x12, 0x0c, 0x13, 0x16, 0x13, 0x1e, 0x13, 0x82, 0x13, | ||
4910 | 0x42, 0x14, 0xd6, 0x14, 0x8a, 0x15, 0xc6, 0x17, 0xd2, 0x17, 0x6b, 0x18, | ||
4911 | 0x12, 0x1c, 0x46, 0x1c, 0x9c, 0x32, 0x00, 0x40, 0x0e, 0x47, 0x48, 0x47, | ||
4912 | 0x41, 0x48, 0x89, 0x48, 0x80, 0x4c, 0x00, 0x54, 0x44, 0x55, 0xe5, 0x55, | ||
4913 | 0x14, 0x56, 0x77, 0x57, 0xbf, 0x57, 0x40, 0x5c, 0x06, 0x80, 0x08, 0x90, | ||
4914 | 0x03, 0xa1, 0xfe, 0x9c, 0xf0, 0x29, 0x02, 0xfe, 0xb8, 0x0c, 0xff, 0x10, | ||
4915 | 0x00, 0x00, 0xd0, 0xfe, 0xcc, 0x18, 0x00, 0xcf, 0xfe, 0x80, 0x01, 0xff, | ||
4916 | 0x03, 0x00, 0x00, 0xfe, 0x93, 0x15, 0xfe, 0x0f, 0x05, 0xff, 0x38, 0x00, | ||
4917 | 0x00, 0xfe, 0x57, 0x24, 0x00, 0xfe, 0x48, 0x00, 0x4f, 0xff, 0x04, 0x00, | ||
4918 | 0x00, 0x10, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08, 0x01, 0x01, 0xff, 0x08, | ||
4919 | 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x0f, | ||
4920 | 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21, 0x00, 0x00, | ||
4921 | 0xfe, 0x04, 0xf7, 0xcf, 0x2a, 0x67, 0x0b, 0x01, 0xfe, 0xce, 0x0e, 0xfe, | ||
4922 | 0x04, 0xf7, 0xcf, 0x67, 0x0b, 0x3c, 0x2a, 0xfe, 0x3d, 0xf0, 0xfe, 0x02, | ||
4923 | 0x02, 0xfe, 0x20, 0xf0, 0x9c, 0xfe, 0x91, 0xf0, 0xfe, 0xf0, 0x01, 0xfe, | ||
4924 | 0x90, 0xf0, 0xfe, 0xf0, 0x01, 0xfe, 0x8f, 0xf0, 0x9c, 0x05, 0x51, 0x3b, | ||
4925 | 0x02, 0xfe, 0xd4, 0x0c, 0x01, 0xfe, 0x44, 0x0d, 0xfe, 0xdd, 0x12, 0xfe, | ||
4926 | 0xfc, 0x10, 0xfe, 0x28, 0x1c, 0x05, 0xfe, 0xa6, 0x00, 0xfe, 0xd3, 0x12, | ||
4927 | 0x47, 0x18, 0xfe, 0xa6, 0x00, 0xb5, 0xfe, 0x48, 0xf0, 0xfe, 0x86, 0x02, | ||
4928 | 0xfe, 0x49, 0xf0, 0xfe, 0xa0, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xbe, 0x02, | ||
4929 | 0xfe, 0x46, 0xf0, 0xfe, 0x50, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x56, 0x02, | ||
4930 | 0xfe, 0x43, 0xf0, 0xfe, 0x44, 0x02, 0xfe, 0x44, 0xf0, 0xfe, 0x48, 0x02, | ||
4931 | 0xfe, 0x45, 0xf0, 0xfe, 0x4c, 0x02, 0x17, 0x0b, 0xa0, 0x17, 0x06, 0x18, | ||
4932 | 0x96, 0x02, 0x29, 0xfe, 0x00, 0x1c, 0xde, 0xfe, 0x02, 0x1c, 0xdd, 0xfe, | ||
4933 | 0x1e, 0x1c, 0xfe, 0xe9, 0x10, 0x01, 0xfe, 0x20, 0x17, 0xfe, 0xe7, 0x10, | ||
4934 | 0xfe, 0x06, 0xfc, 0xc7, 0x0a, 0x6b, 0x01, 0x9e, 0x02, 0x29, 0x14, 0x4d, | ||
4935 | 0x37, 0x97, 0x01, 0xfe, 0x64, 0x0f, 0x0a, 0x6b, 0x01, 0x82, 0xfe, 0xbd, | ||
4936 | 0x10, 0x0a, 0x6b, 0x01, 0x82, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, 0xfe, | ||
4937 | 0x58, 0x1c, 0x17, 0x06, 0x18, 0x96, 0x2a, 0x25, 0x29, 0xfe, 0x3d, 0xf0, | ||
4938 | 0xfe, 0x02, 0x02, 0x21, 0xfe, 0x94, 0x02, 0xfe, 0x5a, 0x1c, 0xea, 0xfe, | ||
4939 | 0x14, 0x1c, 0x14, 0xfe, 0x30, 0x00, 0x37, 0x97, 0x01, 0xfe, 0x54, 0x0f, | ||
4940 | 0x17, 0x06, 0x18, 0x96, 0x02, 0xd0, 0x1e, 0x20, 0x07, 0x10, 0x34, 0xfe, | ||
4941 | 0x69, 0x10, 0x17, 0x06, 0x18, 0x96, 0xfe, 0x04, 0xec, 0x20, 0x46, 0x3d, | ||
4942 | 0x12, 0x20, 0xfe, 0x05, 0xf6, 0xc7, 0x01, 0xfe, 0x52, 0x16, 0x09, 0x4a, | ||
4943 | 0x4c, 0x35, 0x11, 0x2d, 0x3c, 0x8a, 0x01, 0xe6, 0x02, 0x29, 0x0a, 0x40, | ||
4944 | 0x01, 0x0e, 0x07, 0x00, 0x5d, 0x01, 0x6f, 0xfe, 0x18, 0x10, 0xfe, 0x41, | ||
4945 | 0x58, 0x0a, 0x99, 0x01, 0x0e, 0xfe, 0xc8, 0x54, 0x64, 0xfe, 0x0c, 0x03, | ||
4946 | 0x01, 0xe6, 0x02, 0x29, 0x2a, 0x46, 0xfe, 0x02, 0xe8, 0x27, 0xf8, 0xfe, | ||
4947 | 0x9e, 0x43, 0xf7, 0xfe, 0x27, 0xf0, 0xfe, 0xdc, 0x01, 0xfe, 0x07, 0x4b, | ||
4948 | 0xfe, 0x20, 0xf0, 0x9c, 0xfe, 0x40, 0x1c, 0x25, 0xd2, 0xfe, 0x26, 0xf0, | ||
4949 | 0xfe, 0x56, 0x03, 0xfe, 0xa0, 0xf0, 0xfe, 0x44, 0x03, 0xfe, 0x11, 0xf0, | ||
4950 | 0x9c, 0xfe, 0xef, 0x10, 0xfe, 0x9f, 0xf0, 0xfe, 0x64, 0x03, 0xeb, 0x0f, | ||
4951 | 0xfe, 0x11, 0x00, 0x02, 0x5a, 0x2a, 0xfe, 0x48, 0x1c, 0xeb, 0x09, 0x04, | ||
4952 | 0x1d, 0xfe, 0x18, 0x13, 0x23, 0x1e, 0x98, 0xac, 0x12, 0x98, 0x0a, 0x40, | ||
4953 | 0x01, 0x0e, 0xac, 0x75, 0x01, 0xfe, 0xbc, 0x15, 0x11, 0xca, 0x25, 0xd2, | ||
4954 | 0xfe, 0x01, 0xf0, 0xd2, 0xfe, 0x82, 0xf0, 0xfe, 0x92, 0x03, 0xec, 0x11, | ||
4955 | 0xfe, 0xe4, 0x00, 0x65, 0xfe, 0xa4, 0x03, 0x25, 0x32, 0x1f, 0xfe, 0xb4, | ||
4956 | 0x03, 0x01, 0x43, 0xfe, 0x06, 0xf0, 0xfe, 0xc4, 0x03, 0x8d, 0x81, 0xfe, | ||
4957 | 0x0a, 0xf0, 0xfe, 0x7a, 0x06, 0x02, 0x22, 0x05, 0x6b, 0x28, 0x16, 0xfe, | ||
4958 | 0xf6, 0x04, 0x14, 0x2c, 0x01, 0x33, 0x8f, 0xfe, 0x66, 0x02, 0x02, 0xd1, | ||
4959 | 0xeb, 0x2a, 0x67, 0x1a, 0xfe, 0x67, 0x1b, 0xf8, 0xf7, 0xfe, 0x48, 0x1c, | ||
4960 | 0x70, 0x01, 0x6e, 0x87, 0x0a, 0x40, 0x01, 0x0e, 0x07, 0x00, 0x16, 0xd3, | ||
4961 | 0x0a, 0xca, 0x01, 0x0e, 0x74, 0x60, 0x59, 0x76, 0x27, 0x05, 0x6b, 0x28, | ||
4962 | 0xfe, 0x10, 0x12, 0x14, 0x2c, 0x01, 0x33, 0x8f, 0xfe, 0x66, 0x02, 0x02, | ||
4963 | 0xd1, 0xbc, 0x7d, 0xbd, 0x7f, 0x25, 0x22, 0x65, 0xfe, 0x3c, 0x04, 0x1f, | ||
4964 | 0xfe, 0x38, 0x04, 0x68, 0xfe, 0xa0, 0x00, 0xfe, 0x9b, 0x57, 0xfe, 0x4e, | ||
4965 | 0x12, 0x2b, 0xff, 0x02, 0x00, 0x10, 0x01, 0x08, 0x1f, 0xfe, 0xe0, 0x04, | ||
4966 | 0x2b, 0x01, 0x08, 0x1f, 0x22, 0x30, 0x2e, 0xd5, 0xfe, 0x4c, 0x44, 0xfe, | ||
4967 | 0x4c, 0x12, 0x60, 0xfe, 0x44, 0x48, 0x13, 0x2c, 0xfe, 0x4c, 0x54, 0x64, | ||
4968 | 0xd3, 0x46, 0x76, 0x27, 0xfa, 0xef, 0xfe, 0x62, 0x13, 0x09, 0x04, 0x1d, | ||
4969 | 0xfe, 0x2a, 0x13, 0x2f, 0x07, 0x7e, 0xa5, 0xfe, 0x20, 0x10, 0x13, 0x2c, | ||
4970 | 0xfe, 0x4c, 0x54, 0x64, 0xd3, 0xfa, 0xef, 0x86, 0x09, 0x04, 0x1d, 0xfe, | ||
4971 | 0x08, 0x13, 0x2f, 0x07, 0x7e, 0x6e, 0x09, 0x04, 0x1d, 0xfe, 0x1c, 0x12, | ||
4972 | 0x14, 0x92, 0x09, 0x04, 0x06, 0x3b, 0x14, 0xc4, 0x01, 0x33, 0x8f, 0xfe, | ||
4973 | 0x70, 0x0c, 0x02, 0x22, 0x2b, 0x11, 0xfe, 0xe6, 0x00, 0xfe, 0x1c, 0x90, | ||
4974 | 0xf9, 0x03, 0x14, 0x92, 0x01, 0x33, 0x02, 0x29, 0xfe, 0x42, 0x5b, 0x67, | ||
4975 | 0x1a, 0xfe, 0x46, 0x59, 0xf8, 0xf7, 0xfe, 0x87, 0x80, 0xfe, 0x31, 0xe4, | ||
4976 | 0x4f, 0x09, 0x04, 0x0b, 0xfe, 0x78, 0x13, 0xfe, 0x20, 0x80, 0x07, 0x1a, | ||
4977 | 0xfe, 0x70, 0x12, 0x49, 0x04, 0x06, 0xfe, 0x60, 0x13, 0x05, 0xfe, 0xa2, | ||
4978 | 0x00, 0x28, 0x16, 0xfe, 0x80, 0x05, 0xfe, 0x31, 0xe4, 0x6a, 0x49, 0x04, | ||
4979 | 0x0b, 0xfe, 0x4a, 0x13, 0x05, 0xfe, 0xa0, 0x00, 0x28, 0xfe, 0x42, 0x12, | ||
4980 | 0x5e, 0x01, 0x08, 0x25, 0x32, 0xf1, 0x01, 0x08, 0x26, 0xfe, 0x98, 0x05, | ||
4981 | 0x11, 0xfe, 0xe3, 0x00, 0x23, 0x49, 0xfe, 0x4a, 0xf0, 0xfe, 0x6a, 0x05, | ||
4982 | 0xfe, 0x49, 0xf0, 0xfe, 0x64, 0x05, 0x83, 0x24, 0xfe, 0x21, 0x00, 0xa1, | ||
4983 | 0x24, 0xfe, 0x22, 0x00, 0xa0, 0x24, 0x4c, 0xfe, 0x09, 0x48, 0x01, 0x08, | ||
4984 | 0x26, 0xfe, 0x98, 0x05, 0xfe, 0xe2, 0x08, 0x49, 0x04, 0xc5, 0x3b, 0x01, | ||
4985 | 0x86, 0x24, 0x06, 0x12, 0xcc, 0x37, 0xfe, 0x27, 0x01, 0x09, 0x04, 0x1d, | ||
4986 | 0xfe, 0x22, 0x12, 0x47, 0x01, 0xa7, 0x14, 0x92, 0x09, 0x04, 0x06, 0x3b, | ||
4987 | 0x14, 0xc4, 0x01, 0x33, 0x8f, 0xfe, 0x70, 0x0c, 0x02, 0x22, 0x05, 0xfe, | ||
4988 | 0x9c, 0x00, 0x28, 0xfe, 0x3e, 0x12, 0x05, 0x50, 0x28, 0xfe, 0x36, 0x13, | ||
4989 | 0x47, 0x01, 0xa7, 0x26, 0xfe, 0x08, 0x06, 0x0a, 0x06, 0x49, 0x04, 0x19, | ||
4990 | 0xfe, 0x02, 0x12, 0x5f, 0x01, 0xfe, 0xaa, 0x14, 0x1f, 0xfe, 0xfe, 0x05, | ||
4991 | 0x11, 0x9a, 0x01, 0x43, 0x11, 0xfe, 0xe5, 0x00, 0x05, 0x50, 0xb4, 0x0c, | ||
4992 | 0x50, 0x05, 0xc6, 0x28, 0xfe, 0x62, 0x12, 0x05, 0x3f, 0x28, 0xfe, 0x5a, | ||
4993 | 0x13, 0x01, 0xfe, 0x14, 0x18, 0x01, 0xfe, 0x66, 0x18, 0xfe, 0x43, 0x48, | ||
4994 | 0xb7, 0x19, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b, 0x1c, 0x3d, | ||
4995 | 0x85, 0xb7, 0x69, 0x47, 0x01, 0xa7, 0x26, 0xfe, 0x72, 0x06, 0x49, 0x04, | ||
4996 | 0x1b, 0xdf, 0x89, 0x0a, 0x4d, 0x01, 0xfe, 0xd8, 0x14, 0x1f, 0xfe, 0x68, | ||
4997 | 0x06, 0x11, 0x9a, 0x01, 0x43, 0x11, 0xfe, 0xe5, 0x00, 0x05, 0x3f, 0xb4, | ||
4998 | 0x0c, 0x3f, 0x17, 0x06, 0x01, 0xa7, 0xec, 0x72, 0x70, 0x01, 0x6e, 0x87, | ||
4999 | 0x11, 0xfe, 0xe2, 0x00, 0x01, 0x08, 0x25, 0x32, 0xfe, 0x0a, 0xf0, 0xfe, | ||
5000 | 0xa6, 0x06, 0x8c, 0xfe, 0x5c, 0x07, 0xfe, 0x06, 0xf0, 0xfe, 0x64, 0x07, | ||
5001 | 0x8d, 0x81, 0x02, 0x22, 0x09, 0x04, 0x0b, 0xfe, 0x2e, 0x12, 0x15, 0x1a, | ||
5002 | 0x01, 0x08, 0x15, 0x00, 0x01, 0x08, 0x15, 0x00, 0x01, 0x08, 0x15, 0x00, | ||
5003 | 0x01, 0x08, 0xfe, 0x99, 0xa4, 0x01, 0x08, 0x15, 0x00, 0x02, 0xfe, 0x32, | ||
5004 | 0x08, 0x61, 0x04, 0x1b, 0xfe, 0x38, 0x12, 0x09, 0x04, 0x1b, 0x6e, 0x15, | ||
5005 | 0xfe, 0x1b, 0x00, 0x01, 0x08, 0x15, 0x00, 0x01, 0x08, 0x15, 0x00, 0x01, | ||
5006 | 0x08, 0x15, 0x00, 0x01, 0x08, 0x15, 0x06, 0x01, 0x08, 0x15, 0x00, 0x02, | ||
5007 | 0xd9, 0x66, 0x4c, 0xfe, 0x3a, 0x55, 0x5f, 0xfe, 0x9a, 0x81, 0x4b, 0x1d, | ||
5008 | 0xba, 0xfe, 0x32, 0x07, 0x0a, 0x1d, 0xfe, 0x09, 0x6f, 0xaf, 0xfe, 0xca, | ||
5009 | 0x45, 0xfe, 0x32, 0x12, 0x62, 0x2c, 0x85, 0x66, 0x7b, 0x01, 0x08, 0x25, | ||
5010 | 0x32, 0xfe, 0x0a, 0xf0, 0xfe, 0x32, 0x07, 0x8d, 0x81, 0x8c, 0xfe, 0x5c, | ||
5011 | 0x07, 0x02, 0x22, 0x01, 0x43, 0x02, 0xfe, 0x8a, 0x06, 0x15, 0x19, 0x02, | ||
5012 | 0xfe, 0x8a, 0x06, 0xfe, 0x9c, 0xf7, 0xd4, 0xfe, 0x2c, 0x90, 0xfe, 0xae, | ||
5013 | 0x90, 0x77, 0xfe, 0xca, 0x07, 0x0c, 0x54, 0x18, 0x55, 0x09, 0x4a, 0x6a, | ||
5014 | 0x35, 0x1e, 0x20, 0x07, 0x10, 0xfe, 0x0e, 0x12, 0x74, 0xfe, 0x80, 0x80, | ||
5015 | 0x37, 0x20, 0x63, 0x27, 0xfe, 0x06, 0x10, 0xfe, 0x83, 0xe7, 0xc4, 0xa1, | ||
5016 | 0xfe, 0x03, 0x40, 0x09, 0x4a, 0x4f, 0x35, 0x01, 0xa8, 0xad, 0xfe, 0x1f, | ||
5017 | 0x40, 0x12, 0x58, 0x01, 0xa5, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe, | ||
5018 | 0x44, 0x51, 0xfe, 0xc6, 0x51, 0x83, 0xfb, 0xfe, 0x8a, 0x90, 0x0c, 0x52, | ||
5019 | 0x18, 0x53, 0xfe, 0x0c, 0x90, 0xfe, 0x8e, 0x90, 0xfe, 0x40, 0x50, 0xfe, | ||
5020 | 0xc2, 0x50, 0x0c, 0x39, 0x18, 0x3a, 0xfe, 0x4a, 0x10, 0x09, 0x04, 0x6a, | ||
5021 | 0xfe, 0x2a, 0x12, 0xfe, 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x0c, 0x54, 0x18, | ||
5022 | 0x55, 0x09, 0x04, 0x4f, 0x85, 0x01, 0xa8, 0xfe, 0x1f, 0x80, 0x12, 0x58, | ||
5023 | 0xfe, 0x44, 0x90, 0xfe, 0xc6, 0x90, 0x0c, 0x56, 0x18, 0x57, 0xfb, 0xfe, | ||
5024 | 0x8a, 0x90, 0x0c, 0x52, 0x18, 0x53, 0xfe, 0x40, 0x90, 0xfe, 0xc2, 0x90, | ||
5025 | 0x0c, 0x39, 0x18, 0x3a, 0x0c, 0x38, 0x18, 0x4e, 0x09, 0x4a, 0x19, 0x35, | ||
5026 | 0x2a, 0x13, 0xfe, 0x4e, 0x11, 0x65, 0xfe, 0x48, 0x08, 0xfe, 0x9e, 0xf0, | ||
5027 | 0xfe, 0x5c, 0x08, 0xb1, 0x16, 0x32, 0x2a, 0x73, 0xdd, 0xb8, 0xfe, 0x80, | ||
5028 | 0x08, 0xb9, 0xfe, 0x9e, 0x08, 0x8c, 0xfe, 0x74, 0x08, 0xfe, 0x06, 0xf0, | ||
5029 | 0xfe, 0x7a, 0x08, 0x8d, 0x81, 0x02, 0x22, 0x01, 0x43, 0xfe, 0xc9, 0x10, | ||
5030 | 0x15, 0x19, 0xfe, 0xc9, 0x10, 0x61, 0x04, 0x06, 0xfe, 0x10, 0x12, 0x61, | ||
5031 | 0x04, 0x0b, 0x45, 0x09, 0x04, 0x0b, 0xfe, 0x68, 0x12, 0xfe, 0x2e, 0x1c, | ||
5032 | 0x02, 0xfe, 0x24, 0x0a, 0x61, 0x04, 0x06, 0x45, 0x61, 0x04, 0x0b, 0xfe, | ||
5033 | 0x52, 0x12, 0xfe, 0x2c, 0x1c, 0xfe, 0xaa, 0xf0, 0xfe, 0x1e, 0x09, 0xfe, | ||
5034 | 0xac, 0xf0, 0xfe, 0xbe, 0x08, 0xfe, 0x8a, 0x10, 0xaa, 0xfe, 0xf3, 0x10, | ||
5035 | 0xfe, 0xad, 0xf0, 0xfe, 0xca, 0x08, 0x02, 0xfe, 0x24, 0x0a, 0xab, 0xfe, | ||
5036 | 0xe7, 0x10, 0xfe, 0x2b, 0xf0, 0x9d, 0xe9, 0x1c, 0xfe, 0x00, 0xfe, 0xfe, | ||
5037 | 0x1c, 0x12, 0xb5, 0xfe, 0xd2, 0xf0, 0x9d, 0xfe, 0x76, 0x18, 0x1c, 0x1a, | ||
5038 | 0x16, 0x9d, 0x05, 0xcb, 0x1c, 0x06, 0x16, 0x9d, 0xb8, 0x6d, 0xb9, 0x6d, | ||
5039 | 0xaa, 0xab, 0xfe, 0xb1, 0x10, 0x70, 0x5e, 0x2b, 0x14, 0x92, 0x01, 0x33, | ||
5040 | 0x0f, 0xfe, 0x35, 0x00, 0xfe, 0x01, 0xf0, 0x5a, 0x0f, 0x7c, 0x02, 0x5a, | ||
5041 | 0xfe, 0x74, 0x18, 0x1c, 0xfe, 0x00, 0xf8, 0x16, 0x6d, 0x67, 0x1b, 0x01, | ||
5042 | 0xfe, 0x44, 0x0d, 0x3b, 0x01, 0xe6, 0x1e, 0x27, 0x74, 0x67, 0x1a, 0x02, | ||
5043 | 0x6d, 0x09, 0x04, 0x0b, 0x21, 0xfe, 0x06, 0x0a, 0x09, 0x04, 0x6a, 0xfe, | ||
5044 | 0x82, 0x12, 0x09, 0x04, 0x19, 0xfe, 0x66, 0x13, 0x1e, 0x58, 0xac, 0xfc, | ||
5045 | 0xfe, 0x83, 0x80, 0xfe, 0xc8, 0x44, 0xfe, 0x2e, 0x13, 0xfe, 0x04, 0x91, | ||
5046 | 0xfe, 0x86, 0x91, 0x63, 0x27, 0xfe, 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x77, | ||
5047 | 0xd7, 0x05, 0x54, 0x31, 0x55, 0x0c, 0x7b, 0x18, 0x7c, 0xbe, 0x54, 0xbf, | ||
5048 | 0x55, 0x01, 0xa8, 0xad, 0x63, 0x27, 0x12, 0x58, 0xc0, 0x38, 0xc1, 0x4e, | ||
5049 | 0x79, 0x56, 0x68, 0x57, 0xf4, 0xf5, 0xfe, 0x04, 0xfa, 0x38, 0xfe, 0x05, | ||
5050 | 0xfa, 0x4e, 0x01, 0xa5, 0xa2, 0x23, 0x0c, 0x7b, 0x0c, 0x7c, 0x79, 0x56, | ||
5051 | 0x68, 0x57, 0xfe, 0x12, 0x10, 0x09, 0x04, 0x19, 0x16, 0xd7, 0x79, 0x39, | ||
5052 | 0x68, 0x3a, 0x09, 0x04, 0xfe, 0xf7, 0x00, 0x35, 0x05, 0x52, 0x31, 0x53, | ||
5053 | 0xfe, 0x10, 0x58, 0xfe, 0x91, 0x58, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, | ||
5054 | 0x02, 0x6d, 0x09, 0x04, 0x19, 0x16, 0xd7, 0x09, 0x04, 0xfe, 0xf7, 0x00, | ||
5055 | 0x35, 0xfe, 0x3a, 0x55, 0xfe, 0x19, 0x81, 0x5f, 0xfe, 0x10, 0x90, 0xfe, | ||
5056 | 0x92, 0x90, 0xfe, 0xd7, 0x10, 0x2f, 0x07, 0x9b, 0x16, 0xfe, 0xc6, 0x08, | ||
5057 | 0x11, 0x9b, 0x09, 0x04, 0x0b, 0xfe, 0x14, 0x13, 0x05, 0x39, 0x31, 0x3a, | ||
5058 | 0x77, 0xfe, 0xc6, 0x08, 0xfe, 0x0c, 0x58, 0xfe, 0x8d, 0x58, 0x02, 0x6d, | ||
5059 | 0x23, 0x47, 0xfe, 0x19, 0x80, 0xde, 0x09, 0x04, 0x0b, 0xfe, 0x1a, 0x12, | ||
5060 | 0xfe, 0x6c, 0x19, 0xfe, 0x19, 0x41, 0xe9, 0xb5, 0xfe, 0xd1, 0xf0, 0xd9, | ||
5061 | 0x14, 0x7a, 0x01, 0x33, 0x0f, 0xfe, 0x44, 0x00, 0xfe, 0x8e, 0x10, 0xfe, | ||
5062 | 0x6c, 0x19, 0xbe, 0x39, 0xfe, 0xed, 0x19, 0xbf, 0x3a, 0xfe, 0x0c, 0x51, | ||
5063 | 0xfe, 0x8e, 0x51, 0xe9, 0x1c, 0xfe, 0x00, 0xff, 0x34, 0xfe, 0x74, 0x10, | ||
5064 | 0xb5, 0xfe, 0xd2, 0xf0, 0xfe, 0xb2, 0x0a, 0xfe, 0x76, 0x18, 0x1c, 0x1a, | ||
5065 | 0x84, 0x05, 0xcb, 0x1c, 0x06, 0xfe, 0x08, 0x13, 0x0f, 0xfe, 0x16, 0x00, | ||
5066 | 0x02, 0x5a, 0xfe, 0xd1, 0xf0, 0xfe, 0xc4, 0x0a, 0x14, 0x7a, 0x01, 0x33, | ||
5067 | 0x0f, 0xfe, 0x17, 0x00, 0xfe, 0x42, 0x10, 0xfe, 0xce, 0xf0, 0xfe, 0xca, | ||
5068 | 0x0a, 0xfe, 0x3c, 0x10, 0xfe, 0xcd, 0xf0, 0xfe, 0xd6, 0x0a, 0x0f, 0xfe, | ||
5069 | 0x22, 0x00, 0x02, 0x5a, 0xfe, 0xcb, 0xf0, 0xfe, 0xe2, 0x0a, 0x0f, 0xfe, | ||
5070 | 0x24, 0x00, 0x02, 0x5a, 0xfe, 0xd0, 0xf0, 0xfe, 0xec, 0x0a, 0x0f, 0x93, | ||
5071 | 0xdc, 0xfe, 0xcf, 0xf0, 0xfe, 0xf6, 0x0a, 0x0f, 0x4c, 0xfe, 0x10, 0x10, | ||
5072 | 0xfe, 0xcc, 0xf0, 0xd9, 0x61, 0x04, 0x19, 0x3b, 0x0f, 0xfe, 0x12, 0x00, | ||
5073 | 0x2a, 0x13, 0xfe, 0x4e, 0x11, 0x65, 0xfe, 0x0c, 0x0b, 0xfe, 0x9e, 0xf0, | ||
5074 | 0xfe, 0x20, 0x0b, 0xb1, 0x16, 0x32, 0x2a, 0x73, 0xdd, 0xb8, 0x22, 0xb9, | ||
5075 | 0x22, 0x2a, 0xec, 0x65, 0xfe, 0x2c, 0x0b, 0x25, 0x32, 0x8c, 0xfe, 0x48, | ||
5076 | 0x0b, 0x8d, 0x81, 0xb8, 0xd4, 0xb9, 0xd4, 0x02, 0x22, 0x01, 0x43, 0xfe, | ||
5077 | 0xdb, 0x10, 0x11, 0xfe, 0xe8, 0x00, 0xaa, 0xab, 0x70, 0xbc, 0x7d, 0xbd, | ||
5078 | 0x7f, 0xfe, 0x89, 0xf0, 0x22, 0x30, 0x2e, 0xd8, 0xbc, 0x7d, 0xbd, 0x7f, | ||
5079 | 0x01, 0x08, 0x1f, 0x22, 0x30, 0x2e, 0xd6, 0xb1, 0x45, 0x0f, 0xfe, 0x42, | ||
5080 | 0x00, 0x02, 0x5a, 0x78, 0x06, 0xfe, 0x81, 0x49, 0x16, 0xfe, 0x38, 0x0c, | ||
5081 | 0x09, 0x04, 0x0b, 0xfe, 0x44, 0x13, 0x0f, 0x00, 0x4b, 0x0b, 0xfe, 0x54, | ||
5082 | 0x12, 0x4b, 0xfe, 0x28, 0x00, 0x21, 0xfe, 0xa6, 0x0c, 0x0a, 0x40, 0x01, | ||
5083 | 0x0e, 0x07, 0x00, 0x5d, 0x3e, 0xfe, 0x28, 0x00, 0xfe, 0xe2, 0x10, 0x01, | ||
5084 | 0xe7, 0x01, 0xe8, 0x0a, 0x99, 0x01, 0xfe, 0x32, 0x0e, 0x59, 0x11, 0x2d, | ||
5085 | 0x01, 0x6f, 0x02, 0x29, 0x0f, 0xfe, 0x44, 0x00, 0x4b, 0x0b, 0xdf, 0x3e, | ||
5086 | 0x0b, 0xfe, 0xb4, 0x10, 0x01, 0x86, 0x3e, 0x0b, 0xfe, 0xaa, 0x10, 0x01, | ||
5087 | 0x86, 0xfe, 0x19, 0x82, 0xfe, 0x34, 0x46, 0xa3, 0x3e, 0x0b, 0x0f, 0xfe, | ||
5088 | 0x43, 0x00, 0xfe, 0x96, 0x10, 0x09, 0x4a, 0x0b, 0x35, 0x01, 0xe7, 0x01, | ||
5089 | 0xe8, 0x59, 0x11, 0x2d, 0x01, 0x6f, 0x67, 0x0b, 0x59, 0x3c, 0x8a, 0x02, | ||
5090 | 0xfe, 0x2a, 0x03, 0x09, 0x04, 0x0b, 0x84, 0x3e, 0x0b, 0x0f, 0x00, 0xfe, | ||
5091 | 0x5c, 0x10, 0x61, 0x04, 0x1b, 0xfe, 0x58, 0x12, 0x09, 0x04, 0x1b, 0xfe, | ||
5092 | 0x50, 0x13, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x5c, 0x0c, 0xfe, | ||
5093 | 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x62, 0x0c, 0x09, 0x4a, 0x1b, 0x35, | ||
5094 | 0xfe, 0xa9, 0x10, 0x0f, 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0b, 0x5f, | ||
5095 | 0x5c, 0x0f, 0xfe, 0x13, 0x00, 0xfe, 0x10, 0x10, 0x0f, 0xfe, 0x47, 0x00, | ||
5096 | 0xa1, 0x0f, 0xfe, 0x41, 0x00, 0xa0, 0x0f, 0xfe, 0x24, 0x00, 0x87, 0xaa, | ||
5097 | 0xab, 0x70, 0x05, 0x6b, 0x28, 0x21, 0xd1, 0x5f, 0xfe, 0x04, 0xe6, 0x1b, | ||
5098 | 0xfe, 0x9d, 0x41, 0xfe, 0x1c, 0x42, 0x59, 0x01, 0xda, 0x02, 0x29, 0xea, | ||
5099 | 0x14, 0x0b, 0x37, 0x95, 0xa9, 0x14, 0xfe, 0x31, 0x00, 0x37, 0x97, 0x01, | ||
5100 | 0xfe, 0x54, 0x0f, 0x02, 0xd0, 0x3c, 0xfe, 0x06, 0xec, 0xc9, 0xee, 0x3e, | ||
5101 | 0x1d, 0xfe, 0xce, 0x45, 0x34, 0x3c, 0xfe, 0x06, 0xea, 0xc9, 0xfe, 0x47, | ||
5102 | 0x4b, 0x89, 0xfe, 0x75, 0x57, 0x05, 0x51, 0xfe, 0x98, 0x56, 0xfe, 0x38, | ||
5103 | 0x12, 0x0a, 0x42, 0x01, 0x0e, 0xfe, 0x44, 0x48, 0x46, 0x09, 0x04, 0x1d, | ||
5104 | 0xfe, 0x1a, 0x13, 0x0a, 0x40, 0x01, 0x0e, 0x47, 0xfe, 0x41, 0x58, 0x0a, | ||
5105 | 0x99, 0x01, 0x0e, 0xfe, 0x49, 0x54, 0x8e, 0xfe, 0x2a, 0x0d, 0x02, 0xfe, | ||
5106 | 0x2a, 0x03, 0x0a, 0x51, 0xfe, 0xee, 0x14, 0xee, 0x3e, 0x1d, 0xfe, 0xce, | ||
5107 | 0x45, 0x34, 0x3c, 0xfe, 0xce, 0x47, 0xfe, 0xad, 0x13, 0x02, 0x29, 0x1e, | ||
5108 | 0x20, 0x07, 0x10, 0xfe, 0x9e, 0x12, 0x23, 0x12, 0x4d, 0x12, 0x94, 0x12, | ||
5109 | 0xce, 0x1e, 0x2d, 0x47, 0x37, 0x2d, 0xb1, 0xe0, 0xfe, 0xbc, 0xf0, 0xfe, | ||
5110 | 0xec, 0x0d, 0x13, 0x06, 0x12, 0x4d, 0x01, 0xfe, 0xe2, 0x15, 0x05, 0xfe, | ||
5111 | 0x38, 0x01, 0x31, 0xfe, 0x3a, 0x01, 0x77, 0xfe, 0xf0, 0x0d, 0xfe, 0x02, | ||
5112 | 0xec, 0xce, 0x62, 0x00, 0x5d, 0xfe, 0x04, 0xec, 0x20, 0x46, 0xfe, 0x05, | ||
5113 | 0xf6, 0xfe, 0x34, 0x01, 0x01, 0xfe, 0x52, 0x16, 0xfb, 0xfe, 0x48, 0xf4, | ||
5114 | 0x0d, 0xfe, 0x18, 0x13, 0xaf, 0xfe, 0x02, 0xea, 0xce, 0x62, 0x7a, 0xfe, | ||
5115 | 0xc5, 0x13, 0x14, 0x1b, 0x37, 0x95, 0xa9, 0x5c, 0x05, 0xfe, 0x38, 0x01, | ||
5116 | 0x1c, 0xfe, 0xf0, 0xff, 0x0c, 0xfe, 0x60, 0x01, 0x05, 0xfe, 0x3a, 0x01, | ||
5117 | 0x0c, 0xfe, 0x62, 0x01, 0x3d, 0x12, 0x20, 0x24, 0x06, 0x12, 0x2d, 0x11, | ||
5118 | 0x2d, 0x8a, 0x13, 0x06, 0x03, 0x23, 0x03, 0x1e, 0x4d, 0xfe, 0xf7, 0x12, | ||
5119 | 0x1e, 0x94, 0xac, 0x12, 0x94, 0x07, 0x7a, 0xfe, 0x71, 0x13, 0xfe, 0x24, | ||
5120 | 0x1c, 0x14, 0x1a, 0x37, 0x95, 0xa9, 0xfe, 0xd9, 0x10, 0xb6, 0xfe, 0x03, | ||
5121 | 0xdc, 0xfe, 0x73, 0x57, 0xfe, 0x80, 0x5d, 0x03, 0xb6, 0xfe, 0x03, 0xdc, | ||
5122 | 0xfe, 0x5b, 0x57, 0xfe, 0x80, 0x5d, 0x03, 0xfe, 0x03, 0x57, 0xb6, 0x23, | ||
5123 | 0xfe, 0x00, 0xcc, 0x03, 0xfe, 0x03, 0x57, 0xb6, 0x75, 0x03, 0x09, 0x04, | ||
5124 | 0x4c, 0xfe, 0x22, 0x13, 0xfe, 0x1c, 0x80, 0x07, 0x06, 0xfe, 0x1a, 0x13, | ||
5125 | 0xfe, 0x1e, 0x80, 0xe1, 0xfe, 0x1d, 0x80, 0xa4, 0xfe, 0x0c, 0x90, 0xfe, | ||
5126 | 0x0e, 0x13, 0xfe, 0x0e, 0x90, 0xa3, 0xfe, 0x3c, 0x90, 0xfe, 0x30, 0xf4, | ||
5127 | 0x0b, 0xfe, 0x3c, 0x50, 0xa0, 0x01, 0xfe, 0x82, 0x16, 0x2f, 0x07, 0x2d, | ||
5128 | 0xe0, 0x01, 0xfe, 0xbc, 0x15, 0x09, 0x04, 0x1d, 0x45, 0x01, 0xe7, 0x01, | ||
5129 | 0xe8, 0x11, 0xfe, 0xe9, 0x00, 0x09, 0x04, 0x4c, 0xfe, 0x2c, 0x13, 0x01, | ||
5130 | 0xfe, 0x14, 0x16, 0xfe, 0x1e, 0x1c, 0xfe, 0x14, 0x90, 0xfe, 0x96, 0x90, | ||
5131 | 0x0c, 0xfe, 0x64, 0x01, 0x18, 0xfe, 0x66, 0x01, 0x09, 0x04, 0x4f, 0xfe, | ||
5132 | 0x12, 0x12, 0xfe, 0x03, 0x80, 0x74, 0xfe, 0x01, 0xec, 0x20, 0xfe, 0x80, | ||
5133 | 0x40, 0x12, 0x20, 0x63, 0x27, 0x11, 0xc8, 0x59, 0x1e, 0x20, 0xed, 0x76, | ||
5134 | 0x20, 0x03, 0xfe, 0x08, 0x1c, 0x05, 0xfe, 0xac, 0x00, 0xfe, 0x06, 0x58, | ||
5135 | 0x05, 0xfe, 0xae, 0x00, 0xfe, 0x07, 0x58, 0x05, 0xfe, 0xb0, 0x00, 0xfe, | ||
5136 | 0x08, 0x58, 0x05, 0xfe, 0xb2, 0x00, 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c, | ||
5137 | 0x24, 0x69, 0x12, 0xc9, 0x23, 0x0c, 0x50, 0x0c, 0x3f, 0x13, 0x40, 0x48, | ||
5138 | 0x5f, 0x17, 0x1d, 0xfe, 0x90, 0x4d, 0xfe, 0x91, 0x54, 0x21, 0xfe, 0x08, | ||
5139 | 0x0f, 0x3e, 0x10, 0x13, 0x42, 0x48, 0x17, 0x4c, 0xfe, 0x90, 0x4d, 0xfe, | ||
5140 | 0x91, 0x54, 0x21, 0xfe, 0x1e, 0x0f, 0x24, 0x10, 0x12, 0x20, 0x78, 0x2c, | ||
5141 | 0x46, 0x1e, 0x20, 0xed, 0x76, 0x20, 0x11, 0xc8, 0xf6, 0xfe, 0xd6, 0xf0, | ||
5142 | 0xfe, 0x32, 0x0f, 0xea, 0x70, 0xfe, 0x14, 0x1c, 0xfe, 0x10, 0x1c, 0xfe, | ||
5143 | 0x18, 0x1c, 0x03, 0x3c, 0xfe, 0x0c, 0x14, 0xee, 0xfe, 0x07, 0xe6, 0x1d, | ||
5144 | 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x03, 0x01, 0x86, 0x78, 0x2c, 0x46, | ||
5145 | 0xfa, 0xef, 0xfe, 0x42, 0x13, 0x2f, 0x07, 0x2d, 0xfe, 0x34, 0x13, 0x0a, | ||
5146 | 0x42, 0x01, 0x0e, 0xb0, 0xfe, 0x36, 0x12, 0xf0, 0xfe, 0x45, 0x48, 0x01, | ||
5147 | 0xe3, 0xfe, 0x00, 0xcc, 0xb0, 0xfe, 0xf3, 0x13, 0x3d, 0x75, 0x07, 0x10, | ||
5148 | 0xa3, 0x0a, 0x80, 0x01, 0x0e, 0xfe, 0x80, 0x5c, 0x01, 0x6f, 0xfe, 0x0e, | ||
5149 | 0x10, 0x07, 0x7e, 0x45, 0xf6, 0xfe, 0xd6, 0xf0, 0xfe, 0x6c, 0x0f, 0x03, | ||
5150 | 0xfe, 0x44, 0x58, 0x74, 0xfe, 0x01, 0xec, 0x97, 0xfe, 0x9e, 0x40, 0xfe, | ||
5151 | 0x9d, 0xe7, 0x00, 0xfe, 0x9c, 0xe7, 0x1b, 0x76, 0x27, 0x01, 0xda, 0xfe, | ||
5152 | 0xdd, 0x10, 0x2a, 0xbc, 0x7d, 0xbd, 0x7f, 0x30, 0x2e, 0xd5, 0x07, 0x1b, | ||
5153 | 0xfe, 0x48, 0x12, 0x07, 0x0b, 0xfe, 0x56, 0x12, 0x07, 0x1a, 0xfe, 0x30, | ||
5154 | 0x12, 0x07, 0xc2, 0x16, 0xfe, 0x3e, 0x11, 0x07, 0xfe, 0x23, 0x00, 0x16, | ||
5155 | 0xfe, 0x4a, 0x11, 0x07, 0x06, 0x16, 0xfe, 0xa8, 0x11, 0x07, 0x19, 0xfe, | ||
5156 | 0x12, 0x12, 0x07, 0x00, 0x16, 0x22, 0x14, 0xc2, 0x01, 0x33, 0x9f, 0x2b, | ||
5157 | 0x01, 0x08, 0x8c, 0x43, 0x03, 0x2b, 0xfe, 0x62, 0x08, 0x0a, 0xca, 0x01, | ||
5158 | 0xfe, 0x32, 0x0e, 0x11, 0x7e, 0x02, 0x29, 0x2b, 0x2f, 0x07, 0x9b, 0xfe, | ||
5159 | 0xd9, 0x13, 0x79, 0x39, 0x68, 0x3a, 0x77, 0xfe, 0xfc, 0x10, 0x09, 0x04, | ||
5160 | 0x6a, 0xfe, 0x72, 0x12, 0xc0, 0x38, 0xc1, 0x4e, 0xf4, 0xf5, 0x8e, 0xfe, | ||
5161 | 0xc6, 0x10, 0x1e, 0x58, 0xfe, 0x26, 0x13, 0x05, 0x7b, 0x31, 0x7c, 0x77, | ||
5162 | 0xfe, 0x82, 0x0c, 0x0c, 0x54, 0x18, 0x55, 0x23, 0x0c, 0x7b, 0x0c, 0x7c, | ||
5163 | 0x01, 0xa8, 0x24, 0x69, 0x73, 0x12, 0x58, 0x01, 0xa5, 0xc0, 0x38, 0xc1, | ||
5164 | 0x4e, 0xfe, 0x04, 0x55, 0xfe, 0xa5, 0x55, 0xfe, 0x04, 0xfa, 0x38, 0xfe, | ||
5165 | 0x05, 0xfa, 0x4e, 0xfe, 0x91, 0x10, 0x05, 0x56, 0x31, 0x57, 0xfe, 0x40, | ||
5166 | 0x56, 0xfe, 0xe1, 0x56, 0x0c, 0x56, 0x18, 0x57, 0x83, 0xc0, 0x38, 0xc1, | ||
5167 | 0x4e, 0xf4, 0xf5, 0x05, 0x52, 0x31, 0x53, 0xfe, 0x00, 0x56, 0xfe, 0xa1, | ||
5168 | 0x56, 0x0c, 0x52, 0x18, 0x53, 0x09, 0x04, 0x6a, 0xfe, 0x1e, 0x12, 0x1e, | ||
5169 | 0x58, 0xfe, 0x1f, 0x40, 0x05, 0x54, 0x31, 0x55, 0xfe, 0x2c, 0x50, 0xfe, | ||
5170 | 0xae, 0x50, 0x05, 0x56, 0x31, 0x57, 0xfe, 0x44, 0x50, 0xfe, 0xc6, 0x50, | ||
5171 | 0x05, 0x52, 0x31, 0x53, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0x05, 0x39, | ||
5172 | 0x31, 0x3a, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x02, 0x5c, 0x24, 0x06, | ||
5173 | 0x12, 0xcd, 0x02, 0x5b, 0x2b, 0x01, 0x08, 0x1f, 0x44, 0x30, 0x2e, 0xd5, | ||
5174 | 0x07, 0x06, 0x21, 0x44, 0x2f, 0x07, 0x9b, 0x21, 0x5b, 0x01, 0x6e, 0x1c, | ||
5175 | 0x3d, 0x16, 0x44, 0x09, 0x04, 0x0b, 0xe2, 0x79, 0x39, 0x68, 0x3a, 0xfe, | ||
5176 | 0x0a, 0x55, 0x34, 0xfe, 0x8b, 0x55, 0xbe, 0x39, 0xbf, 0x3a, 0xfe, 0x0c, | ||
5177 | 0x51, 0xfe, 0x8e, 0x51, 0x02, 0x5b, 0xfe, 0x19, 0x81, 0xaf, 0xfe, 0x19, | ||
5178 | 0x41, 0x02, 0x5b, 0x2b, 0x01, 0x08, 0x25, 0x32, 0x1f, 0xa2, 0x30, 0x2e, | ||
5179 | 0xd8, 0x4b, 0x1a, 0xfe, 0xa6, 0x12, 0x4b, 0x0b, 0x3b, 0x02, 0x44, 0x01, | ||
5180 | 0x08, 0x25, 0x32, 0x1f, 0xa2, 0x30, 0x2e, 0xd6, 0x07, 0x1a, 0x21, 0x44, | ||
5181 | 0x01, 0x08, 0x1f, 0xa2, 0x30, 0x2e, 0xfe, 0xe8, 0x09, 0xfe, 0xc2, 0x49, | ||
5182 | 0x60, 0x05, 0xfe, 0x9c, 0x00, 0x28, 0x84, 0x49, 0x04, 0x19, 0x34, 0x9f, | ||
5183 | 0xfe, 0xbb, 0x45, 0x4b, 0x00, 0x45, 0x3e, 0x06, 0x78, 0x3d, 0xfe, 0xda, | ||
5184 | 0x14, 0x01, 0x6e, 0x87, 0xfe, 0x4b, 0x45, 0xe2, 0x2f, 0x07, 0x9a, 0xe1, | ||
5185 | 0x05, 0xc6, 0x28, 0x84, 0x05, 0x3f, 0x28, 0x34, 0x5e, 0x02, 0x5b, 0xfe, | ||
5186 | 0xc0, 0x5d, 0xfe, 0xf8, 0x14, 0xfe, 0x03, 0x17, 0x05, 0x50, 0xb4, 0x0c, | ||
5187 | 0x50, 0x5e, 0x2b, 0x01, 0x08, 0x26, 0x5c, 0x01, 0xfe, 0xaa, 0x14, 0x02, | ||
5188 | 0x5c, 0x01, 0x08, 0x25, 0x32, 0x1f, 0x44, 0x30, 0x2e, 0xd6, 0x07, 0x06, | ||
5189 | 0x21, 0x44, 0x01, 0xfe, 0x8e, 0x13, 0xfe, 0x42, 0x58, 0xfe, 0x82, 0x14, | ||
5190 | 0xfe, 0xa4, 0x14, 0x87, 0xfe, 0x4a, 0xf4, 0x0b, 0x16, 0x44, 0xfe, 0x4a, | ||
5191 | 0xf4, 0x06, 0xfe, 0x0c, 0x12, 0x2f, 0x07, 0x9a, 0x85, 0x02, 0x5b, 0x05, | ||
5192 | 0x3f, 0xb4, 0x0c, 0x3f, 0x5e, 0x2b, 0x01, 0x08, 0x26, 0x5c, 0x01, 0xfe, | ||
5193 | 0xd8, 0x14, 0x02, 0x5c, 0x13, 0x06, 0x65, 0xfe, 0xca, 0x12, 0x26, 0xfe, | ||
5194 | 0xe0, 0x12, 0x72, 0xf1, 0x01, 0x08, 0x23, 0x72, 0x03, 0x8f, 0xfe, 0xdc, | ||
5195 | 0x12, 0x25, 0xfe, 0xdc, 0x12, 0x1f, 0xfe, 0xca, 0x12, 0x5e, 0x2b, 0x01, | ||
5196 | 0x08, 0xfe, 0xd5, 0x10, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b, | ||
5197 | 0x1c, 0xfe, 0xff, 0x7f, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x03, 0x13, | ||
5198 | 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b, 0x1c, 0x3d, 0xfe, 0x30, 0x56, | ||
5199 | 0xfe, 0x00, 0x5c, 0x03, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b, | ||
5200 | 0x03, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b, 0xfe, 0x0b, 0x58, | ||
5201 | 0x03, 0x0a, 0x50, 0x01, 0x82, 0x0a, 0x3f, 0x01, 0x82, 0x03, 0xfc, 0x1c, | ||
5202 | 0x10, 0xff, 0x03, 0x00, 0x54, 0xfe, 0x00, 0xf4, 0x19, 0x48, 0xfe, 0x00, | ||
5203 | 0x7d, 0xfe, 0x01, 0x7d, 0xfe, 0x02, 0x7d, 0xfe, 0x03, 0x7c, 0x63, 0x27, | ||
5204 | 0x0c, 0x52, 0x18, 0x53, 0xbe, 0x56, 0xbf, 0x57, 0x03, 0xfe, 0x62, 0x08, | ||
5205 | 0xfe, 0x82, 0x4a, 0xfe, 0xe1, 0x1a, 0xfe, 0x83, 0x5a, 0x74, 0x03, 0x01, | ||
5206 | 0xfe, 0x14, 0x18, 0xfe, 0x42, 0x48, 0x5f, 0x60, 0x89, 0x01, 0x08, 0x1f, | ||
5207 | 0xfe, 0xa2, 0x14, 0x30, 0x2e, 0xd8, 0x01, 0x08, 0x1f, 0xfe, 0xa2, 0x14, | ||
5208 | 0x30, 0x2e, 0xfe, 0xe8, 0x0a, 0xfe, 0xc1, 0x59, 0x05, 0xc6, 0x28, 0xfe, | ||
5209 | 0xcc, 0x12, 0x49, 0x04, 0x1b, 0xfe, 0xc4, 0x13, 0x23, 0x62, 0x1b, 0xe2, | ||
5210 | 0x4b, 0xc3, 0x64, 0xfe, 0xe8, 0x13, 0x3b, 0x13, 0x06, 0x17, 0xc3, 0x78, | ||
5211 | 0xdb, 0xfe, 0x78, 0x10, 0xff, 0x02, 0x83, 0x55, 0xa1, 0xff, 0x02, 0x83, | ||
5212 | 0x55, 0x62, 0x1a, 0xa4, 0xbb, 0xfe, 0x30, 0x00, 0x8e, 0xe4, 0x17, 0x2c, | ||
5213 | 0x13, 0x06, 0xfe, 0x56, 0x10, 0x62, 0x0b, 0xe1, 0xbb, 0xfe, 0x64, 0x00, | ||
5214 | 0x8e, 0xe4, 0x0a, 0xfe, 0x64, 0x00, 0x17, 0x93, 0x13, 0x06, 0xfe, 0x28, | ||
5215 | 0x10, 0x62, 0x06, 0xfe, 0x60, 0x13, 0xbb, 0xfe, 0xc8, 0x00, 0x8e, 0xe4, | ||
5216 | 0x0a, 0xfe, 0xc8, 0x00, 0x17, 0x4d, 0x13, 0x06, 0x83, 0xbb, 0xfe, 0x90, | ||
5217 | 0x01, 0xba, 0xfe, 0x4e, 0x14, 0x89, 0xfe, 0x12, 0x10, 0xfe, 0x43, 0xf4, | ||
5218 | 0x94, 0xfe, 0x56, 0xf0, 0xfe, 0x60, 0x14, 0xfe, 0x04, 0xf4, 0x6c, 0xfe, | ||
5219 | 0x43, 0xf4, 0x93, 0xfe, 0xf3, 0x10, 0xf9, 0x01, 0xfe, 0x22, 0x13, 0x1c, | ||
5220 | 0x3d, 0xfe, 0x10, 0x13, 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4, 0x69, 0xba, | ||
5221 | 0xfe, 0x9c, 0x14, 0xb7, 0x69, 0xfe, 0x1c, 0x10, 0xfe, 0x00, 0x17, 0xfe, | ||
5222 | 0x4d, 0xe4, 0x19, 0xba, 0xfe, 0x9c, 0x14, 0xb7, 0x19, 0x83, 0x60, 0x23, | ||
5223 | 0xfe, 0x4d, 0xf4, 0x00, 0xdf, 0x89, 0x13, 0x06, 0xfe, 0xb4, 0x56, 0xfe, | ||
5224 | 0xc3, 0x58, 0x03, 0x60, 0x13, 0x0b, 0x03, 0x15, 0x06, 0x01, 0x08, 0x26, | ||
5225 | 0xe5, 0x15, 0x0b, 0x01, 0x08, 0x26, 0xe5, 0x15, 0x1a, 0x01, 0x08, 0x26, | ||
5226 | 0xe5, 0x72, 0xfe, 0x89, 0x49, 0x01, 0x08, 0x03, 0x15, 0x06, 0x01, 0x08, | ||
5227 | 0x26, 0xa6, 0x15, 0x1a, 0x01, 0x08, 0x26, 0xa6, 0x15, 0x06, 0x01, 0x08, | ||
5228 | 0x26, 0xa6, 0xfe, 0x89, 0x49, 0x01, 0x08, 0x26, 0xa6, 0x72, 0xfe, 0x89, | ||
5229 | 0x4a, 0x01, 0x08, 0x03, 0x60, 0x03, 0x1e, 0xcc, 0x07, 0x06, 0xfe, 0x44, | ||
5230 | 0x13, 0xad, 0x12, 0xcc, 0xfe, 0x49, 0xf4, 0x00, 0x3b, 0x72, 0x9f, 0x5e, | ||
5231 | 0xfe, 0x01, 0xec, 0xfe, 0x27, 0x01, 0xf1, 0x01, 0x08, 0x2f, 0x07, 0xfe, | ||
5232 | 0xe3, 0x00, 0xfe, 0x20, 0x13, 0x1f, 0xfe, 0x5a, 0x15, 0x23, 0x12, 0xcd, | ||
5233 | 0x01, 0x43, 0x1e, 0xcd, 0x07, 0x06, 0x45, 0x09, 0x4a, 0x06, 0x35, 0x03, | ||
5234 | 0x0a, 0x42, 0x01, 0x0e, 0xed, 0x88, 0x07, 0x10, 0xa4, 0x0a, 0x80, 0x01, | ||
5235 | 0x0e, 0x88, 0x0a, 0x51, 0x01, 0x9e, 0x03, 0x0a, 0x80, 0x01, 0x0e, 0x88, | ||
5236 | 0xfe, 0x80, 0xe7, 0x10, 0x07, 0x10, 0x84, 0xfe, 0x45, 0x58, 0x01, 0xe3, | ||
5237 | 0x88, 0x03, 0x0a, 0x42, 0x01, 0x0e, 0x88, 0x0a, 0x51, 0x01, 0x9e, 0x03, | ||
5238 | 0x0a, 0x42, 0x01, 0x0e, 0xfe, 0x80, 0x80, 0xf2, 0xfe, 0x49, 0xe4, 0x10, | ||
5239 | 0xa4, 0x0a, 0x80, 0x01, 0x0e, 0xf2, 0x0a, 0x51, 0x01, 0x82, 0x03, 0x17, | ||
5240 | 0x10, 0x71, 0x66, 0xfe, 0x60, 0x01, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, | ||
5241 | 0xfe, 0x24, 0x1c, 0xfe, 0x1d, 0xf7, 0x1d, 0x90, 0xfe, 0xf6, 0x15, 0x01, | ||
5242 | 0xfe, 0xfc, 0x16, 0xe0, 0x91, 0x1d, 0x66, 0xfe, 0x2c, 0x01, 0xfe, 0x2f, | ||
5243 | 0x19, 0x03, 0xae, 0x21, 0xfe, 0xe6, 0x15, 0xfe, 0xda, 0x10, 0x17, 0x10, | ||
5244 | 0x71, 0x05, 0xfe, 0x64, 0x01, 0xfe, 0x00, 0xf4, 0x19, 0xfe, 0x18, 0x58, | ||
5245 | 0x05, 0xfe, 0x66, 0x01, 0xfe, 0x19, 0x58, 0x91, 0x19, 0xfe, 0x3c, 0x90, | ||
5246 | 0xfe, 0x30, 0xf4, 0x06, 0xfe, 0x3c, 0x50, 0x66, 0xfe, 0x38, 0x00, 0xfe, | ||
5247 | 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0x19, 0x90, 0xfe, 0x40, 0x16, 0xfe, 0xb6, | ||
5248 | 0x14, 0x34, 0x03, 0xae, 0x21, 0xfe, 0x18, 0x16, 0xfe, 0x9c, 0x10, 0x17, | ||
5249 | 0x10, 0x71, 0xfe, 0x83, 0x5a, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, | ||
5250 | 0x1d, 0xf7, 0x38, 0x90, 0xfe, 0x62, 0x16, 0xfe, 0x94, 0x14, 0xfe, 0x10, | ||
5251 | 0x13, 0x91, 0x38, 0x66, 0x1b, 0xfe, 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00, | ||
5252 | 0x03, 0xae, 0x21, 0xfe, 0x56, 0x16, 0xfe, 0x6c, 0x10, 0x17, 0x10, 0x71, | ||
5253 | 0xfe, 0x30, 0xbc, 0xfe, 0xb2, 0xbc, 0x91, 0xc5, 0x66, 0x1b, 0xfe, 0x0f, | ||
5254 | 0x79, 0xfe, 0x1c, 0xf7, 0xc5, 0x90, 0xfe, 0x9a, 0x16, 0xfe, 0x5c, 0x14, | ||
5255 | 0x34, 0x03, 0xae, 0x21, 0xfe, 0x86, 0x16, 0xfe, 0x42, 0x10, 0xfe, 0x02, | ||
5256 | 0xf6, 0x10, 0x71, 0xfe, 0x18, 0xfe, 0x54, 0xfe, 0x19, 0xfe, 0x55, 0xfc, | ||
5257 | 0xfe, 0x1d, 0xf7, 0x4f, 0x90, 0xfe, 0xc0, 0x16, 0xfe, 0x36, 0x14, 0xfe, | ||
5258 | 0x1c, 0x13, 0x91, 0x4f, 0x47, 0xfe, 0x83, 0x58, 0xfe, 0xaf, 0x19, 0xfe, | ||
5259 | 0x80, 0xe7, 0x10, 0xfe, 0x81, 0xe7, 0x10, 0x11, 0xfe, 0xdd, 0x00, 0x63, | ||
5260 | 0x27, 0x03, 0x63, 0x27, 0xfe, 0x12, 0x45, 0x21, 0xfe, 0xb0, 0x16, 0x14, | ||
5261 | 0x06, 0x37, 0x95, 0xa9, 0x02, 0x29, 0xfe, 0x39, 0xf0, 0xfe, 0x04, 0x17, | ||
5262 | 0x23, 0x03, 0xfe, 0x7e, 0x18, 0x1c, 0x1a, 0x5d, 0x13, 0x0d, 0x03, 0x71, | ||
5263 | 0x05, 0xcb, 0x1c, 0x06, 0xfe, 0xef, 0x12, 0xfe, 0xe1, 0x10, 0x78, 0x2c, | ||
5264 | 0x46, 0x2f, 0x07, 0x2d, 0xfe, 0x3c, 0x13, 0xfe, 0x82, 0x14, 0xfe, 0x42, | ||
5265 | 0x13, 0x3c, 0x8a, 0x0a, 0x42, 0x01, 0x0e, 0xb0, 0xfe, 0x3e, 0x12, 0xf0, | ||
5266 | 0xfe, 0x45, 0x48, 0x01, 0xe3, 0xfe, 0x00, 0xcc, 0xb0, 0xfe, 0xf3, 0x13, | ||
5267 | 0x3d, 0x75, 0x07, 0x10, 0xa3, 0x0a, 0x80, 0x01, 0x0e, 0xf2, 0x01, 0x6f, | ||
5268 | 0xfe, 0x16, 0x10, 0x07, 0x7e, 0x85, 0xfe, 0x40, 0x14, 0xfe, 0x24, 0x12, | ||
5269 | 0xf6, 0xfe, 0xd6, 0xf0, 0xfe, 0x24, 0x17, 0x17, 0x0b, 0x03, 0xfe, 0x9c, | ||
5270 | 0xe7, 0x0b, 0x0f, 0xfe, 0x15, 0x00, 0x59, 0x76, 0x27, 0x01, 0xda, 0x17, | ||
5271 | 0x06, 0x03, 0x3c, 0x8a, 0x09, 0x4a, 0x1d, 0x35, 0x11, 0x2d, 0x01, 0x6f, | ||
5272 | 0x17, 0x06, 0x03, 0xfe, 0x38, 0x90, 0xfe, 0xba, 0x90, 0x79, 0xc7, 0x68, | ||
5273 | 0xc8, 0xfe, 0x48, 0x55, 0x34, 0xfe, 0xc9, 0x55, 0x03, 0x1e, 0x98, 0x73, | ||
5274 | 0x12, 0x98, 0x03, 0x0a, 0x99, 0x01, 0x0e, 0xf0, 0x0a, 0x40, 0x01, 0x0e, | ||
5275 | 0xfe, 0x49, 0x44, 0x16, 0xfe, 0xf0, 0x17, 0x73, 0x75, 0x03, 0x0a, 0x42, | ||
5276 | 0x01, 0x0e, 0x07, 0x10, 0x45, 0x0a, 0x51, 0x01, 0x9e, 0x0a, 0x40, 0x01, | ||
5277 | 0x0e, 0x73, 0x75, 0x03, 0xfe, 0x4e, 0xe4, 0x1a, 0x64, 0xfe, 0x24, 0x18, | ||
5278 | 0x05, 0xfe, 0x90, 0x00, 0xfe, 0x3a, 0x45, 0x5b, 0xfe, 0x4e, 0xe4, 0xc2, | ||
5279 | 0x64, 0xfe, 0x36, 0x18, 0x05, 0xfe, 0x92, 0x00, 0xfe, 0x02, 0xe6, 0x1b, | ||
5280 | 0xdc, 0xfe, 0x4e, 0xe4, 0xfe, 0x0b, 0x00, 0x64, 0xfe, 0x48, 0x18, 0x05, | ||
5281 | 0xfe, 0x94, 0x00, 0xfe, 0x02, 0xe6, 0x19, 0xfe, 0x08, 0x10, 0x05, 0xfe, | ||
5282 | 0x96, 0x00, 0xfe, 0x02, 0xe6, 0x2c, 0xfe, 0x4e, 0x45, 0xfe, 0x0c, 0x12, | ||
5283 | 0xaf, 0xff, 0x04, 0x68, 0x54, 0xde, 0x1c, 0x69, 0x03, 0x07, 0x7a, 0xfe, | ||
5284 | 0x5a, 0xf0, 0xfe, 0x74, 0x18, 0x24, 0xfe, 0x09, 0x00, 0xfe, 0x34, 0x10, | ||
5285 | 0x07, 0x1b, 0xfe, 0x5a, 0xf0, 0xfe, 0x82, 0x18, 0x24, 0xc3, 0xfe, 0x26, | ||
5286 | 0x10, 0x07, 0x1a, 0x5d, 0x24, 0x2c, 0xdc, 0x07, 0x0b, 0x5d, 0x24, 0x93, | ||
5287 | 0xfe, 0x0e, 0x10, 0x07, 0x06, 0x5d, 0x24, 0x4d, 0x9f, 0xad, 0x03, 0x14, | ||
5288 | 0xfe, 0x09, 0x00, 0x01, 0x33, 0xfe, 0x04, 0xfe, 0x7d, 0x05, 0x7f, 0xf9, | ||
5289 | 0x03, 0x25, 0xfe, 0xca, 0x18, 0xfe, 0x14, 0xf0, 0x08, 0x65, 0xfe, 0xc6, | ||
5290 | 0x18, 0x03, 0xff, 0x1a, 0x00, 0x00, | ||
5291 | }; | ||
5292 | |||
5293 | static unsigned short _adv_asc3550_size = sizeof(_adv_asc3550_buf); /* 0x13AD */ | ||
5294 | static ADV_DCNT _adv_asc3550_chksum = 0x04D52DDDUL; /* Expanded little-endian checksum. */ | ||
5295 | |||
5296 | /* Microcode buffer is kept after initialization for error recovery. */ | ||
5297 | static unsigned char _adv_asc38C0800_buf[] = { | ||
5298 | 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x16, 0x18, 0xe4, | ||
5299 | 0x01, 0x00, 0x48, 0xe4, 0x18, 0x80, 0x03, 0xf6, 0x02, 0x00, 0xce, 0x19, | ||
5300 | 0x00, 0xfa, 0xff, 0xff, 0x1c, 0x0f, 0x00, 0xf6, 0x9e, 0xe7, 0xff, 0x00, | ||
5301 | 0x82, 0xe7, 0x00, 0xea, 0x01, 0xfa, 0x01, 0xe6, 0x09, 0xe7, 0x55, 0xf0, | ||
5302 | 0x01, 0xf6, 0x03, 0x00, 0x04, 0x00, 0x10, 0x00, 0x1e, 0xf0, 0x85, 0xf0, | ||
5303 | 0x18, 0xf4, 0x08, 0x00, 0xbc, 0x00, 0x38, 0x54, 0x00, 0xec, 0xd5, 0xf0, | ||
5304 | 0x82, 0x0d, 0x00, 0xe6, 0x86, 0xf0, 0xb1, 0xf0, 0x98, 0x57, 0x01, 0xfc, | ||
5305 | 0xb4, 0x00, 0xd4, 0x01, 0x0c, 0x1c, 0x3e, 0x1c, 0x3c, 0x00, 0xbb, 0x00, | ||
5306 | 0x00, 0x10, 0xba, 0x19, 0x02, 0x80, 0x32, 0xf0, 0x7c, 0x0d, 0x02, 0x13, | ||
5307 | 0xba, 0x13, 0x18, 0x40, 0x00, 0x57, 0x01, 0xea, 0x02, 0xfc, 0x03, 0xfc, | ||
5308 | 0x3e, 0x00, 0x6c, 0x01, 0x6e, 0x01, 0x74, 0x01, 0x76, 0x01, 0xb9, 0x54, | ||
5309 | 0x3e, 0x57, 0x00, 0x80, 0x03, 0xe6, 0xb6, 0x00, 0xc0, 0x00, 0x01, 0x01, | ||
5310 | 0x3e, 0x01, 0x7a, 0x01, 0xca, 0x08, 0xce, 0x10, 0x16, 0x11, 0x04, 0x12, | ||
5311 | 0x08, 0x12, 0x02, 0x4a, 0xbb, 0x55, 0x3c, 0x56, 0x03, 0x58, 0x1b, 0x80, | ||
5312 | 0x30, 0xe4, 0x4b, 0xe4, 0x5d, 0xf0, 0x02, 0xfa, 0x20, 0x00, 0x32, 0x00, | ||
5313 | 0x40, 0x00, 0x80, 0x00, 0x24, 0x01, 0x3c, 0x01, 0x68, 0x01, 0x6a, 0x01, | ||
5314 | 0x70, 0x01, 0x72, 0x01, 0x78, 0x01, 0x7c, 0x01, 0x62, 0x0a, 0x86, 0x0d, | ||
5315 | 0x06, 0x13, 0x4c, 0x1c, 0x04, 0x80, 0x4a, 0xe4, 0x02, 0xee, 0x5b, 0xf0, | ||
5316 | 0x03, 0xf7, 0x0c, 0x00, 0x0f, 0x00, 0x47, 0x00, 0xbe, 0x00, 0x00, 0x01, | ||
5317 | 0x20, 0x11, 0x5c, 0x16, 0x32, 0x1c, 0x38, 0x1c, 0x4e, 0x1c, 0x10, 0x44, | ||
5318 | 0x00, 0x4c, 0x04, 0xea, 0x5c, 0xf0, 0xa7, 0xf0, 0x04, 0xf6, 0x03, 0xfa, | ||
5319 | 0x05, 0x00, 0x34, 0x00, 0x36, 0x00, 0x98, 0x00, 0xcc, 0x00, 0x20, 0x01, | ||
5320 | 0x4e, 0x01, 0x4a, 0x0b, 0x42, 0x0c, 0x12, 0x0f, 0x0c, 0x10, 0x22, 0x11, | ||
5321 | 0x0a, 0x12, 0x04, 0x13, 0x30, 0x1c, 0x02, 0x48, 0x00, 0x4e, 0x42, 0x54, | ||
5322 | 0x44, 0x55, 0xbd, 0x56, 0x06, 0x83, 0x00, 0xdc, 0x05, 0xf0, 0x09, 0xf0, | ||
5323 | 0x59, 0xf0, 0xb8, 0xf0, 0x4b, 0xf4, 0x06, 0xf7, 0x0e, 0xf7, 0x04, 0xfc, | ||
5324 | 0x05, 0xfc, 0x06, 0x00, 0x19, 0x00, 0x33, 0x00, 0x9b, 0x00, 0xa4, 0x00, | ||
5325 | 0xb5, 0x00, 0xba, 0x00, 0xd0, 0x00, 0xe1, 0x00, 0xe7, 0x00, 0xe2, 0x03, | ||
5326 | 0x08, 0x0f, 0x02, 0x10, 0x04, 0x10, 0x0a, 0x10, 0x0a, 0x13, 0x0c, 0x13, | ||
5327 | 0x12, 0x13, 0x24, 0x14, 0x34, 0x14, 0x04, 0x16, 0x08, 0x16, 0xa4, 0x17, | ||
5328 | 0x20, 0x1c, 0x34, 0x1c, 0x36, 0x1c, 0x08, 0x44, 0x38, 0x44, 0x91, 0x44, | ||
5329 | 0x0a, 0x45, 0x48, 0x46, 0x01, 0x48, 0x68, 0x54, 0x3a, 0x55, 0x83, 0x55, | ||
5330 | 0xe5, 0x55, 0xb0, 0x57, 0x01, 0x58, 0x83, 0x59, 0x05, 0xe6, 0x0b, 0xf0, | ||
5331 | 0x0c, 0xf0, 0x04, 0xf8, 0x05, 0xf8, 0x07, 0x00, 0x0a, 0x00, 0x1c, 0x00, | ||
5332 | 0x1e, 0x00, 0x9e, 0x00, 0xa8, 0x00, 0xaa, 0x00, 0xb9, 0x00, 0xe0, 0x00, | ||
5333 | 0x22, 0x01, 0x26, 0x01, 0x79, 0x01, 0x7e, 0x01, 0xc4, 0x01, 0xc6, 0x01, | ||
5334 | 0x80, 0x02, 0x5e, 0x03, 0xee, 0x04, 0x9a, 0x06, 0xf8, 0x07, 0x62, 0x08, | ||
5335 | 0x68, 0x08, 0x69, 0x08, 0xd6, 0x08, 0xe9, 0x09, 0xfa, 0x0b, 0x2e, 0x0f, | ||
5336 | 0x12, 0x10, 0x1a, 0x10, 0xed, 0x10, 0xf1, 0x10, 0x2a, 0x11, 0x06, 0x12, | ||
5337 | 0x0c, 0x12, 0x3e, 0x12, 0x10, 0x13, 0x16, 0x13, 0x1e, 0x13, 0x46, 0x14, | ||
5338 | 0x76, 0x14, 0x82, 0x14, 0x36, 0x15, 0xca, 0x15, 0x6b, 0x18, 0xbe, 0x18, | ||
5339 | 0xca, 0x18, 0xe6, 0x19, 0x12, 0x1c, 0x46, 0x1c, 0x9c, 0x32, 0x00, 0x40, | ||
5340 | 0x0e, 0x47, 0xfe, 0x9c, 0xf0, 0x2b, 0x02, 0xfe, 0xac, 0x0d, 0xff, 0x10, | ||
5341 | 0x00, 0x00, 0xd7, 0xfe, 0xe8, 0x19, 0x00, 0xd6, 0xfe, 0x84, 0x01, 0xff, | ||
5342 | 0x03, 0x00, 0x00, 0xfe, 0x93, 0x15, 0xfe, 0x0f, 0x05, 0xff, 0x38, 0x00, | ||
5343 | 0x00, 0xfe, 0x57, 0x24, 0x00, 0xfe, 0x4c, 0x00, 0x5b, 0xff, 0x04, 0x00, | ||
5344 | 0x00, 0x11, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08, 0x01, 0x01, 0xff, 0x08, | ||
5345 | 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x11, | ||
5346 | 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21, 0x00, 0x00, | ||
5347 | 0xfe, 0x04, 0xf7, 0xd6, 0x2c, 0x99, 0x0a, 0x01, 0xfe, 0xc2, 0x0f, 0xfe, | ||
5348 | 0x04, 0xf7, 0xd6, 0x99, 0x0a, 0x42, 0x2c, 0xfe, 0x3d, 0xf0, 0xfe, 0x06, | ||
5349 | 0x02, 0xfe, 0x20, 0xf0, 0xa7, 0xfe, 0x91, 0xf0, 0xfe, 0xf4, 0x01, 0xfe, | ||
5350 | 0x90, 0xf0, 0xfe, 0xf4, 0x01, 0xfe, 0x8f, 0xf0, 0xa7, 0x03, 0x5d, 0x4d, | ||
5351 | 0x02, 0xfe, 0xc8, 0x0d, 0x01, 0xfe, 0x38, 0x0e, 0xfe, 0xdd, 0x12, 0xfe, | ||
5352 | 0xfc, 0x10, 0xfe, 0x28, 0x1c, 0x03, 0xfe, 0xa6, 0x00, 0xfe, 0xd3, 0x12, | ||
5353 | 0x41, 0x14, 0xfe, 0xa6, 0x00, 0xc2, 0xfe, 0x48, 0xf0, 0xfe, 0x8a, 0x02, | ||
5354 | 0xfe, 0x49, 0xf0, 0xfe, 0xa4, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xc2, 0x02, | ||
5355 | 0xfe, 0x46, 0xf0, 0xfe, 0x54, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x5a, 0x02, | ||
5356 | 0xfe, 0x43, 0xf0, 0xfe, 0x48, 0x02, 0xfe, 0x44, 0xf0, 0xfe, 0x4c, 0x02, | ||
5357 | 0xfe, 0x45, 0xf0, 0xfe, 0x50, 0x02, 0x18, 0x0a, 0xaa, 0x18, 0x06, 0x14, | ||
5358 | 0xa1, 0x02, 0x2b, 0xfe, 0x00, 0x1c, 0xe7, 0xfe, 0x02, 0x1c, 0xe6, 0xfe, | ||
5359 | 0x1e, 0x1c, 0xfe, 0xe9, 0x10, 0x01, 0xfe, 0x18, 0x18, 0xfe, 0xe7, 0x10, | ||
5360 | 0xfe, 0x06, 0xfc, 0xce, 0x09, 0x70, 0x01, 0xa8, 0x02, 0x2b, 0x15, 0x59, | ||
5361 | 0x39, 0xa2, 0x01, 0xfe, 0x58, 0x10, 0x09, 0x70, 0x01, 0x87, 0xfe, 0xbd, | ||
5362 | 0x10, 0x09, 0x70, 0x01, 0x87, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, 0xfe, | ||
5363 | 0x58, 0x1c, 0x18, 0x06, 0x14, 0xa1, 0x2c, 0x1c, 0x2b, 0xfe, 0x3d, 0xf0, | ||
5364 | 0xfe, 0x06, 0x02, 0x23, 0xfe, 0x98, 0x02, 0xfe, 0x5a, 0x1c, 0xf8, 0xfe, | ||
5365 | 0x14, 0x1c, 0x15, 0xfe, 0x30, 0x00, 0x39, 0xa2, 0x01, 0xfe, 0x48, 0x10, | ||
5366 | 0x18, 0x06, 0x14, 0xa1, 0x02, 0xd7, 0x22, 0x20, 0x07, 0x11, 0x35, 0xfe, | ||
5367 | 0x69, 0x10, 0x18, 0x06, 0x14, 0xa1, 0xfe, 0x04, 0xec, 0x20, 0x4f, 0x43, | ||
5368 | 0x13, 0x20, 0xfe, 0x05, 0xf6, 0xce, 0x01, 0xfe, 0x4a, 0x17, 0x08, 0x54, | ||
5369 | 0x58, 0x37, 0x12, 0x2f, 0x42, 0x92, 0x01, 0xfe, 0x82, 0x16, 0x02, 0x2b, | ||
5370 | 0x09, 0x46, 0x01, 0x0e, 0x07, 0x00, 0x66, 0x01, 0x73, 0xfe, 0x18, 0x10, | ||
5371 | 0xfe, 0x41, 0x58, 0x09, 0xa4, 0x01, 0x0e, 0xfe, 0xc8, 0x54, 0x6b, 0xfe, | ||
5372 | 0x10, 0x03, 0x01, 0xfe, 0x82, 0x16, 0x02, 0x2b, 0x2c, 0x4f, 0xfe, 0x02, | ||
5373 | 0xe8, 0x2a, 0xfe, 0xbf, 0x57, 0xfe, 0x9e, 0x43, 0xfe, 0x77, 0x57, 0xfe, | ||
5374 | 0x27, 0xf0, 0xfe, 0xe0, 0x01, 0xfe, 0x07, 0x4b, 0xfe, 0x20, 0xf0, 0xa7, | ||
5375 | 0xfe, 0x40, 0x1c, 0x1c, 0xd9, 0xfe, 0x26, 0xf0, 0xfe, 0x5a, 0x03, 0xfe, | ||
5376 | 0xa0, 0xf0, 0xfe, 0x48, 0x03, 0xfe, 0x11, 0xf0, 0xa7, 0xfe, 0xef, 0x10, | ||
5377 | 0xfe, 0x9f, 0xf0, 0xfe, 0x68, 0x03, 0xf9, 0x10, 0xfe, 0x11, 0x00, 0x02, | ||
5378 | 0x65, 0x2c, 0xfe, 0x48, 0x1c, 0xf9, 0x08, 0x05, 0x1b, 0xfe, 0x18, 0x13, | ||
5379 | 0x21, 0x22, 0xa3, 0xb7, 0x13, 0xa3, 0x09, 0x46, 0x01, 0x0e, 0xb7, 0x78, | ||
5380 | 0x01, 0xfe, 0xb4, 0x16, 0x12, 0xd1, 0x1c, 0xd9, 0xfe, 0x01, 0xf0, 0xd9, | ||
5381 | 0xfe, 0x82, 0xf0, 0xfe, 0x96, 0x03, 0xfa, 0x12, 0xfe, 0xe4, 0x00, 0x27, | ||
5382 | 0xfe, 0xa8, 0x03, 0x1c, 0x34, 0x1d, 0xfe, 0xb8, 0x03, 0x01, 0x4b, 0xfe, | ||
5383 | 0x06, 0xf0, 0xfe, 0xc8, 0x03, 0x95, 0x86, 0xfe, 0x0a, 0xf0, 0xfe, 0x8a, | ||
5384 | 0x06, 0x02, 0x24, 0x03, 0x70, 0x28, 0x17, 0xfe, 0xfa, 0x04, 0x15, 0x6d, | ||
5385 | 0x01, 0x36, 0x7b, 0xfe, 0x6a, 0x02, 0x02, 0xd8, 0xf9, 0x2c, 0x99, 0x19, | ||
5386 | 0xfe, 0x67, 0x1b, 0xfe, 0xbf, 0x57, 0xfe, 0x77, 0x57, 0xfe, 0x48, 0x1c, | ||
5387 | 0x74, 0x01, 0xaf, 0x8c, 0x09, 0x46, 0x01, 0x0e, 0x07, 0x00, 0x17, 0xda, | ||
5388 | 0x09, 0xd1, 0x01, 0x0e, 0x8d, 0x51, 0x64, 0x79, 0x2a, 0x03, 0x70, 0x28, | ||
5389 | 0xfe, 0x10, 0x12, 0x15, 0x6d, 0x01, 0x36, 0x7b, 0xfe, 0x6a, 0x02, 0x02, | ||
5390 | 0xd8, 0xc7, 0x81, 0xc8, 0x83, 0x1c, 0x24, 0x27, 0xfe, 0x40, 0x04, 0x1d, | ||
5391 | 0xfe, 0x3c, 0x04, 0x3b, 0xfe, 0xa0, 0x00, 0xfe, 0x9b, 0x57, 0xfe, 0x4e, | ||
5392 | 0x12, 0x2d, 0xff, 0x02, 0x00, 0x10, 0x01, 0x0b, 0x1d, 0xfe, 0xe4, 0x04, | ||
5393 | 0x2d, 0x01, 0x0b, 0x1d, 0x24, 0x33, 0x31, 0xde, 0xfe, 0x4c, 0x44, 0xfe, | ||
5394 | 0x4c, 0x12, 0x51, 0xfe, 0x44, 0x48, 0x0f, 0x6f, 0xfe, 0x4c, 0x54, 0x6b, | ||
5395 | 0xda, 0x4f, 0x79, 0x2a, 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x62, | ||
5396 | 0x13, 0x08, 0x05, 0x1b, 0xfe, 0x2a, 0x13, 0x32, 0x07, 0x82, 0xfe, 0x52, | ||
5397 | 0x13, 0xfe, 0x20, 0x10, 0x0f, 0x6f, 0xfe, 0x4c, 0x54, 0x6b, 0xda, 0xfe, | ||
5398 | 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x40, 0x13, 0x08, 0x05, 0x1b, 0xfe, | ||
5399 | 0x08, 0x13, 0x32, 0x07, 0x82, 0xfe, 0x30, 0x13, 0x08, 0x05, 0x1b, 0xfe, | ||
5400 | 0x1c, 0x12, 0x15, 0x9d, 0x08, 0x05, 0x06, 0x4d, 0x15, 0xfe, 0x0d, 0x00, | ||
5401 | 0x01, 0x36, 0x7b, 0xfe, 0x64, 0x0d, 0x02, 0x24, 0x2d, 0x12, 0xfe, 0xe6, | ||
5402 | 0x00, 0xfe, 0x1c, 0x90, 0xfe, 0x40, 0x5c, 0x04, 0x15, 0x9d, 0x01, 0x36, | ||
5403 | 0x02, 0x2b, 0xfe, 0x42, 0x5b, 0x99, 0x19, 0xfe, 0x46, 0x59, 0xfe, 0xbf, | ||
5404 | 0x57, 0xfe, 0x77, 0x57, 0xfe, 0x87, 0x80, 0xfe, 0x31, 0xe4, 0x5b, 0x08, | ||
5405 | 0x05, 0x0a, 0xfe, 0x84, 0x13, 0xfe, 0x20, 0x80, 0x07, 0x19, 0xfe, 0x7c, | ||
5406 | 0x12, 0x53, 0x05, 0x06, 0xfe, 0x6c, 0x13, 0x03, 0xfe, 0xa2, 0x00, 0x28, | ||
5407 | 0x17, 0xfe, 0x90, 0x05, 0xfe, 0x31, 0xe4, 0x5a, 0x53, 0x05, 0x0a, 0xfe, | ||
5408 | 0x56, 0x13, 0x03, 0xfe, 0xa0, 0x00, 0x28, 0xfe, 0x4e, 0x12, 0x67, 0xff, | ||
5409 | 0x02, 0x00, 0x10, 0x27, 0xfe, 0x48, 0x05, 0x1c, 0x34, 0xfe, 0x89, 0x48, | ||
5410 | 0xff, 0x02, 0x00, 0x10, 0x27, 0xfe, 0x56, 0x05, 0x26, 0xfe, 0xa8, 0x05, | ||
5411 | 0x12, 0xfe, 0xe3, 0x00, 0x21, 0x53, 0xfe, 0x4a, 0xf0, 0xfe, 0x76, 0x05, | ||
5412 | 0xfe, 0x49, 0xf0, 0xfe, 0x70, 0x05, 0x88, 0x25, 0xfe, 0x21, 0x00, 0xab, | ||
5413 | 0x25, 0xfe, 0x22, 0x00, 0xaa, 0x25, 0x58, 0xfe, 0x09, 0x48, 0xff, 0x02, | ||
5414 | 0x00, 0x10, 0x27, 0xfe, 0x86, 0x05, 0x26, 0xfe, 0xa8, 0x05, 0xfe, 0xe2, | ||
5415 | 0x08, 0x53, 0x05, 0xcb, 0x4d, 0x01, 0xb0, 0x25, 0x06, 0x13, 0xd3, 0x39, | ||
5416 | 0xfe, 0x27, 0x01, 0x08, 0x05, 0x1b, 0xfe, 0x22, 0x12, 0x41, 0x01, 0xb2, | ||
5417 | 0x15, 0x9d, 0x08, 0x05, 0x06, 0x4d, 0x15, 0xfe, 0x0d, 0x00, 0x01, 0x36, | ||
5418 | 0x7b, 0xfe, 0x64, 0x0d, 0x02, 0x24, 0x03, 0xfe, 0x9c, 0x00, 0x28, 0xeb, | ||
5419 | 0x03, 0x5c, 0x28, 0xfe, 0x36, 0x13, 0x41, 0x01, 0xb2, 0x26, 0xfe, 0x18, | ||
5420 | 0x06, 0x09, 0x06, 0x53, 0x05, 0x1f, 0xfe, 0x02, 0x12, 0x50, 0x01, 0xfe, | ||
5421 | 0x9e, 0x15, 0x1d, 0xfe, 0x0e, 0x06, 0x12, 0xa5, 0x01, 0x4b, 0x12, 0xfe, | ||
5422 | 0xe5, 0x00, 0x03, 0x5c, 0xc1, 0x0c, 0x5c, 0x03, 0xcd, 0x28, 0xfe, 0x62, | ||
5423 | 0x12, 0x03, 0x45, 0x28, 0xfe, 0x5a, 0x13, 0x01, 0xfe, 0x0c, 0x19, 0x01, | ||
5424 | 0xfe, 0x76, 0x19, 0xfe, 0x43, 0x48, 0xc4, 0xcc, 0x0f, 0x71, 0xff, 0x02, | ||
5425 | 0x00, 0x57, 0x52, 0x93, 0x1e, 0x43, 0x8b, 0xc4, 0x6e, 0x41, 0x01, 0xb2, | ||
5426 | 0x26, 0xfe, 0x82, 0x06, 0x53, 0x05, 0x1a, 0xe9, 0x91, 0x09, 0x59, 0x01, | ||
5427 | 0xfe, 0xcc, 0x15, 0x1d, 0xfe, 0x78, 0x06, 0x12, 0xa5, 0x01, 0x4b, 0x12, | ||
5428 | 0xfe, 0xe5, 0x00, 0x03, 0x45, 0xc1, 0x0c, 0x45, 0x18, 0x06, 0x01, 0xb2, | ||
5429 | 0xfa, 0x76, 0x74, 0x01, 0xaf, 0x8c, 0x12, 0xfe, 0xe2, 0x00, 0x27, 0xdb, | ||
5430 | 0x1c, 0x34, 0xfe, 0x0a, 0xf0, 0xfe, 0xb6, 0x06, 0x94, 0xfe, 0x6c, 0x07, | ||
5431 | 0xfe, 0x06, 0xf0, 0xfe, 0x74, 0x07, 0x95, 0x86, 0x02, 0x24, 0x08, 0x05, | ||
5432 | 0x0a, 0xfe, 0x2e, 0x12, 0x16, 0x19, 0x01, 0x0b, 0x16, 0x00, 0x01, 0x0b, | ||
5433 | 0x16, 0x00, 0x01, 0x0b, 0x16, 0x00, 0x01, 0x0b, 0xfe, 0x99, 0xa4, 0x01, | ||
5434 | 0x0b, 0x16, 0x00, 0x02, 0xfe, 0x42, 0x08, 0x68, 0x05, 0x1a, 0xfe, 0x38, | ||
5435 | 0x12, 0x08, 0x05, 0x1a, 0xfe, 0x30, 0x13, 0x16, 0xfe, 0x1b, 0x00, 0x01, | ||
5436 | 0x0b, 0x16, 0x00, 0x01, 0x0b, 0x16, 0x00, 0x01, 0x0b, 0x16, 0x00, 0x01, | ||
5437 | 0x0b, 0x16, 0x06, 0x01, 0x0b, 0x16, 0x00, 0x02, 0xe2, 0x6c, 0x58, 0xbe, | ||
5438 | 0x50, 0xfe, 0x9a, 0x81, 0x55, 0x1b, 0x7a, 0xfe, 0x42, 0x07, 0x09, 0x1b, | ||
5439 | 0xfe, 0x09, 0x6f, 0xba, 0xfe, 0xca, 0x45, 0xfe, 0x32, 0x12, 0x69, 0x6d, | ||
5440 | 0x8b, 0x6c, 0x7f, 0x27, 0xfe, 0x54, 0x07, 0x1c, 0x34, 0xfe, 0x0a, 0xf0, | ||
5441 | 0xfe, 0x42, 0x07, 0x95, 0x86, 0x94, 0xfe, 0x6c, 0x07, 0x02, 0x24, 0x01, | ||
5442 | 0x4b, 0x02, 0xdb, 0x16, 0x1f, 0x02, 0xdb, 0xfe, 0x9c, 0xf7, 0xdc, 0xfe, | ||
5443 | 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x56, 0xfe, 0xda, 0x07, 0x0c, 0x60, 0x14, | ||
5444 | 0x61, 0x08, 0x54, 0x5a, 0x37, 0x22, 0x20, 0x07, 0x11, 0xfe, 0x0e, 0x12, | ||
5445 | 0x8d, 0xfe, 0x80, 0x80, 0x39, 0x20, 0x6a, 0x2a, 0xfe, 0x06, 0x10, 0xfe, | ||
5446 | 0x83, 0xe7, 0xfe, 0x48, 0x00, 0xab, 0xfe, 0x03, 0x40, 0x08, 0x54, 0x5b, | ||
5447 | 0x37, 0x01, 0xb3, 0xb8, 0xfe, 0x1f, 0x40, 0x13, 0x62, 0x01, 0xef, 0xfe, | ||
5448 | 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe, 0x44, 0x51, 0xfe, 0xc6, 0x51, 0x88, | ||
5449 | 0xfe, 0x08, 0x90, 0xfe, 0x8a, 0x90, 0x0c, 0x5e, 0x14, 0x5f, 0xfe, 0x0c, | ||
5450 | 0x90, 0xfe, 0x8e, 0x90, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x0c, 0x3d, | ||
5451 | 0x14, 0x3e, 0xfe, 0x4a, 0x10, 0x08, 0x05, 0x5a, 0xfe, 0x2a, 0x12, 0xfe, | ||
5452 | 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x0c, 0x60, 0x14, 0x61, 0x08, 0x05, 0x5b, | ||
5453 | 0x8b, 0x01, 0xb3, 0xfe, 0x1f, 0x80, 0x13, 0x62, 0xfe, 0x44, 0x90, 0xfe, | ||
5454 | 0xc6, 0x90, 0x0c, 0x3f, 0x14, 0x40, 0xfe, 0x08, 0x90, 0xfe, 0x8a, 0x90, | ||
5455 | 0x0c, 0x5e, 0x14, 0x5f, 0xfe, 0x40, 0x90, 0xfe, 0xc2, 0x90, 0x0c, 0x3d, | ||
5456 | 0x14, 0x3e, 0x0c, 0x2e, 0x14, 0x3c, 0x21, 0x0c, 0x49, 0x0c, 0x63, 0x08, | ||
5457 | 0x54, 0x1f, 0x37, 0x2c, 0x0f, 0xfe, 0x4e, 0x11, 0x27, 0xdd, 0xfe, 0x9e, | ||
5458 | 0xf0, 0xfe, 0x76, 0x08, 0xbc, 0x17, 0x34, 0x2c, 0x77, 0xe6, 0xc5, 0xfe, | ||
5459 | 0x9a, 0x08, 0xc6, 0xfe, 0xb8, 0x08, 0x94, 0xfe, 0x8e, 0x08, 0xfe, 0x06, | ||
5460 | 0xf0, 0xfe, 0x94, 0x08, 0x95, 0x86, 0x02, 0x24, 0x01, 0x4b, 0xfe, 0xc9, | ||
5461 | 0x10, 0x16, 0x1f, 0xfe, 0xc9, 0x10, 0x68, 0x05, 0x06, 0xfe, 0x10, 0x12, | ||
5462 | 0x68, 0x05, 0x0a, 0x4e, 0x08, 0x05, 0x0a, 0xfe, 0x90, 0x12, 0xfe, 0x2e, | ||
5463 | 0x1c, 0x02, 0xfe, 0x18, 0x0b, 0x68, 0x05, 0x06, 0x4e, 0x68, 0x05, 0x0a, | ||
5464 | 0xfe, 0x7a, 0x12, 0xfe, 0x2c, 0x1c, 0xfe, 0xaa, 0xf0, 0xfe, 0xd2, 0x09, | ||
5465 | 0xfe, 0xac, 0xf0, 0xfe, 0x00, 0x09, 0x02, 0xfe, 0xde, 0x09, 0xfe, 0xb7, | ||
5466 | 0xf0, 0xfe, 0xfc, 0x08, 0xfe, 0x02, 0xf6, 0x1a, 0x50, 0xfe, 0x70, 0x18, | ||
5467 | 0xfe, 0xf1, 0x18, 0xfe, 0x40, 0x55, 0xfe, 0xe1, 0x55, 0xfe, 0x10, 0x58, | ||
5468 | 0xfe, 0x91, 0x58, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0x1c, 0x85, 0xfe, | ||
5469 | 0x8c, 0xf0, 0xfe, 0xfc, 0x08, 0xfe, 0xac, 0xf0, 0xfe, 0xf0, 0x08, 0xb5, | ||
5470 | 0xfe, 0xcb, 0x10, 0xfe, 0xad, 0xf0, 0xfe, 0x0c, 0x09, 0x02, 0xfe, 0x18, | ||
5471 | 0x0b, 0xb6, 0xfe, 0xbf, 0x10, 0xfe, 0x2b, 0xf0, 0x85, 0xf4, 0x1e, 0xfe, | ||
5472 | 0x00, 0xfe, 0xfe, 0x1c, 0x12, 0xc2, 0xfe, 0xd2, 0xf0, 0x85, 0xfe, 0x76, | ||
5473 | 0x18, 0x1e, 0x19, 0x17, 0x85, 0x03, 0xd2, 0x1e, 0x06, 0x17, 0x85, 0xc5, | ||
5474 | 0x4a, 0xc6, 0x4a, 0xb5, 0xb6, 0xfe, 0x89, 0x10, 0x74, 0x67, 0x2d, 0x15, | ||
5475 | 0x9d, 0x01, 0x36, 0x10, 0xfe, 0x35, 0x00, 0xfe, 0x01, 0xf0, 0x65, 0x10, | ||
5476 | 0x80, 0x02, 0x65, 0xfe, 0x98, 0x80, 0xfe, 0x19, 0xe4, 0x0a, 0xfe, 0x1a, | ||
5477 | 0x12, 0x51, 0xfe, 0x19, 0x82, 0xfe, 0x6c, 0x18, 0xfe, 0x44, 0x54, 0xbe, | ||
5478 | 0xfe, 0x19, 0x81, 0xfe, 0x74, 0x18, 0x8f, 0x90, 0x17, 0xfe, 0xce, 0x08, | ||
5479 | 0x02, 0x4a, 0x08, 0x05, 0x5a, 0xec, 0x03, 0x2e, 0x29, 0x3c, 0x0c, 0x3f, | ||
5480 | 0x14, 0x40, 0x9b, 0x2e, 0x9c, 0x3c, 0xfe, 0x6c, 0x18, 0xfe, 0xed, 0x18, | ||
5481 | 0xfe, 0x44, 0x54, 0xfe, 0xe5, 0x54, 0x3a, 0x3f, 0x3b, 0x40, 0x03, 0x49, | ||
5482 | 0x29, 0x63, 0x8f, 0xfe, 0xe3, 0x54, 0xfe, 0x74, 0x18, 0xfe, 0xf5, 0x18, | ||
5483 | 0x8f, 0xfe, 0xe3, 0x54, 0x90, 0xc0, 0x56, 0xfe, 0xce, 0x08, 0x02, 0x4a, | ||
5484 | 0xfe, 0x37, 0xf0, 0xfe, 0xda, 0x09, 0xfe, 0x8b, 0xf0, 0xfe, 0x60, 0x09, | ||
5485 | 0x02, 0x4a, 0x08, 0x05, 0x0a, 0x23, 0xfe, 0xfa, 0x0a, 0x3a, 0x49, 0x3b, | ||
5486 | 0x63, 0x56, 0xfe, 0x3e, 0x0a, 0x0f, 0xfe, 0xc0, 0x07, 0x41, 0x98, 0x00, | ||
5487 | 0xad, 0xfe, 0x01, 0x59, 0xfe, 0x52, 0xf0, 0xfe, 0x0c, 0x0a, 0x8f, 0x7a, | ||
5488 | 0xfe, 0x24, 0x0a, 0x3a, 0x49, 0x8f, 0xfe, 0xe3, 0x54, 0x57, 0x49, 0x7d, | ||
5489 | 0x63, 0xfe, 0x14, 0x58, 0xfe, 0x95, 0x58, 0x02, 0x4a, 0x3a, 0x49, 0x3b, | ||
5490 | 0x63, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0xbe, 0x57, 0x49, 0x57, 0x63, | ||
5491 | 0x02, 0x4a, 0x08, 0x05, 0x5a, 0xfe, 0x82, 0x12, 0x08, 0x05, 0x1f, 0xfe, | ||
5492 | 0x66, 0x13, 0x22, 0x62, 0xb7, 0xfe, 0x03, 0xa1, 0xfe, 0x83, 0x80, 0xfe, | ||
5493 | 0xc8, 0x44, 0xfe, 0x2e, 0x13, 0xfe, 0x04, 0x91, 0xfe, 0x86, 0x91, 0x6a, | ||
5494 | 0x2a, 0xfe, 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x56, 0xe0, 0x03, 0x60, 0x29, | ||
5495 | 0x61, 0x0c, 0x7f, 0x14, 0x80, 0x57, 0x60, 0x7d, 0x61, 0x01, 0xb3, 0xb8, | ||
5496 | 0x6a, 0x2a, 0x13, 0x62, 0x9b, 0x2e, 0x9c, 0x3c, 0x3a, 0x3f, 0x3b, 0x40, | ||
5497 | 0x90, 0xc0, 0xfe, 0x04, 0xfa, 0x2e, 0xfe, 0x05, 0xfa, 0x3c, 0x01, 0xef, | ||
5498 | 0xfe, 0x36, 0x10, 0x21, 0x0c, 0x7f, 0x0c, 0x80, 0x3a, 0x3f, 0x3b, 0x40, | ||
5499 | 0xe4, 0x08, 0x05, 0x1f, 0x17, 0xe0, 0x3a, 0x3d, 0x3b, 0x3e, 0x08, 0x05, | ||
5500 | 0xfe, 0xf7, 0x00, 0x37, 0x03, 0x5e, 0x29, 0x5f, 0xfe, 0x10, 0x58, 0xfe, | ||
5501 | 0x91, 0x58, 0x57, 0x49, 0x7d, 0x63, 0x02, 0xfe, 0xf4, 0x09, 0x08, 0x05, | ||
5502 | 0x1f, 0x17, 0xe0, 0x08, 0x05, 0xfe, 0xf7, 0x00, 0x37, 0xbe, 0xfe, 0x19, | ||
5503 | 0x81, 0x50, 0xfe, 0x10, 0x90, 0xfe, 0x92, 0x90, 0xfe, 0xd3, 0x10, 0x32, | ||
5504 | 0x07, 0xa6, 0x17, 0xfe, 0x08, 0x09, 0x12, 0xa6, 0x08, 0x05, 0x0a, 0xfe, | ||
5505 | 0x14, 0x13, 0x03, 0x3d, 0x29, 0x3e, 0x56, 0xfe, 0x08, 0x09, 0xfe, 0x0c, | ||
5506 | 0x58, 0xfe, 0x8d, 0x58, 0x02, 0x4a, 0x21, 0x41, 0xfe, 0x19, 0x80, 0xe7, | ||
5507 | 0x08, 0x05, 0x0a, 0xfe, 0x1a, 0x12, 0xfe, 0x6c, 0x19, 0xfe, 0x19, 0x41, | ||
5508 | 0xf4, 0xc2, 0xfe, 0xd1, 0xf0, 0xe2, 0x15, 0x7e, 0x01, 0x36, 0x10, 0xfe, | ||
5509 | 0x44, 0x00, 0xfe, 0x8e, 0x10, 0xfe, 0x6c, 0x19, 0x57, 0x3d, 0xfe, 0xed, | ||
5510 | 0x19, 0x7d, 0x3e, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0xf4, 0x1e, 0xfe, | ||
5511 | 0x00, 0xff, 0x35, 0xfe, 0x74, 0x10, 0xc2, 0xfe, 0xd2, 0xf0, 0xfe, 0xa6, | ||
5512 | 0x0b, 0xfe, 0x76, 0x18, 0x1e, 0x19, 0x8a, 0x03, 0xd2, 0x1e, 0x06, 0xfe, | ||
5513 | 0x08, 0x13, 0x10, 0xfe, 0x16, 0x00, 0x02, 0x65, 0xfe, 0xd1, 0xf0, 0xfe, | ||
5514 | 0xb8, 0x0b, 0x15, 0x7e, 0x01, 0x36, 0x10, 0xfe, 0x17, 0x00, 0xfe, 0x42, | ||
5515 | 0x10, 0xfe, 0xce, 0xf0, 0xfe, 0xbe, 0x0b, 0xfe, 0x3c, 0x10, 0xfe, 0xcd, | ||
5516 | 0xf0, 0xfe, 0xca, 0x0b, 0x10, 0xfe, 0x22, 0x00, 0x02, 0x65, 0xfe, 0xcb, | ||
5517 | 0xf0, 0xfe, 0xd6, 0x0b, 0x10, 0xfe, 0x24, 0x00, 0x02, 0x65, 0xfe, 0xd0, | ||
5518 | 0xf0, 0xfe, 0xe0, 0x0b, 0x10, 0x9e, 0xe5, 0xfe, 0xcf, 0xf0, 0xfe, 0xea, | ||
5519 | 0x0b, 0x10, 0x58, 0xfe, 0x10, 0x10, 0xfe, 0xcc, 0xf0, 0xe2, 0x68, 0x05, | ||
5520 | 0x1f, 0x4d, 0x10, 0xfe, 0x12, 0x00, 0x2c, 0x0f, 0xfe, 0x4e, 0x11, 0x27, | ||
5521 | 0xfe, 0x00, 0x0c, 0xfe, 0x9e, 0xf0, 0xfe, 0x14, 0x0c, 0xbc, 0x17, 0x34, | ||
5522 | 0x2c, 0x77, 0xe6, 0xc5, 0x24, 0xc6, 0x24, 0x2c, 0xfa, 0x27, 0xfe, 0x20, | ||
5523 | 0x0c, 0x1c, 0x34, 0x94, 0xfe, 0x3c, 0x0c, 0x95, 0x86, 0xc5, 0xdc, 0xc6, | ||
5524 | 0xdc, 0x02, 0x24, 0x01, 0x4b, 0xfe, 0xdb, 0x10, 0x12, 0xfe, 0xe8, 0x00, | ||
5525 | 0xb5, 0xb6, 0x74, 0xc7, 0x81, 0xc8, 0x83, 0xfe, 0x89, 0xf0, 0x24, 0x33, | ||
5526 | 0x31, 0xe1, 0xc7, 0x81, 0xc8, 0x83, 0x27, 0xfe, 0x66, 0x0c, 0x1d, 0x24, | ||
5527 | 0x33, 0x31, 0xdf, 0xbc, 0x4e, 0x10, 0xfe, 0x42, 0x00, 0x02, 0x65, 0x7c, | ||
5528 | 0x06, 0xfe, 0x81, 0x49, 0x17, 0xfe, 0x2c, 0x0d, 0x08, 0x05, 0x0a, 0xfe, | ||
5529 | 0x44, 0x13, 0x10, 0x00, 0x55, 0x0a, 0xfe, 0x54, 0x12, 0x55, 0xfe, 0x28, | ||
5530 | 0x00, 0x23, 0xfe, 0x9a, 0x0d, 0x09, 0x46, 0x01, 0x0e, 0x07, 0x00, 0x66, | ||
5531 | 0x44, 0xfe, 0x28, 0x00, 0xfe, 0xe2, 0x10, 0x01, 0xf5, 0x01, 0xf6, 0x09, | ||
5532 | 0xa4, 0x01, 0xfe, 0x26, 0x0f, 0x64, 0x12, 0x2f, 0x01, 0x73, 0x02, 0x2b, | ||
5533 | 0x10, 0xfe, 0x44, 0x00, 0x55, 0x0a, 0xe9, 0x44, 0x0a, 0xfe, 0xb4, 0x10, | ||
5534 | 0x01, 0xb0, 0x44, 0x0a, 0xfe, 0xaa, 0x10, 0x01, 0xb0, 0xfe, 0x19, 0x82, | ||
5535 | 0xfe, 0x34, 0x46, 0xac, 0x44, 0x0a, 0x10, 0xfe, 0x43, 0x00, 0xfe, 0x96, | ||
5536 | 0x10, 0x08, 0x54, 0x0a, 0x37, 0x01, 0xf5, 0x01, 0xf6, 0x64, 0x12, 0x2f, | ||
5537 | 0x01, 0x73, 0x99, 0x0a, 0x64, 0x42, 0x92, 0x02, 0xfe, 0x2e, 0x03, 0x08, | ||
5538 | 0x05, 0x0a, 0x8a, 0x44, 0x0a, 0x10, 0x00, 0xfe, 0x5c, 0x10, 0x68, 0x05, | ||
5539 | 0x1a, 0xfe, 0x58, 0x12, 0x08, 0x05, 0x1a, 0xfe, 0x50, 0x13, 0xfe, 0x1c, | ||
5540 | 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x50, 0x0d, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, | ||
5541 | 0xf0, 0xfe, 0x56, 0x0d, 0x08, 0x54, 0x1a, 0x37, 0xfe, 0xa9, 0x10, 0x10, | ||
5542 | 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0a, 0x50, 0xfe, 0x2e, 0x10, 0x10, | ||
5543 | 0xfe, 0x13, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x6f, 0xab, 0x10, 0xfe, 0x41, | ||
5544 | 0x00, 0xaa, 0x10, 0xfe, 0x24, 0x00, 0x8c, 0xb5, 0xb6, 0x74, 0x03, 0x70, | ||
5545 | 0x28, 0x23, 0xd8, 0x50, 0xfe, 0x04, 0xe6, 0x1a, 0xfe, 0x9d, 0x41, 0xfe, | ||
5546 | 0x1c, 0x42, 0x64, 0x01, 0xe3, 0x02, 0x2b, 0xf8, 0x15, 0x0a, 0x39, 0xa0, | ||
5547 | 0xb4, 0x15, 0xfe, 0x31, 0x00, 0x39, 0xa2, 0x01, 0xfe, 0x48, 0x10, 0x02, | ||
5548 | 0xd7, 0x42, 0xfe, 0x06, 0xec, 0xd0, 0xfc, 0x44, 0x1b, 0xfe, 0xce, 0x45, | ||
5549 | 0x35, 0x42, 0xfe, 0x06, 0xea, 0xd0, 0xfe, 0x47, 0x4b, 0x91, 0xfe, 0x75, | ||
5550 | 0x57, 0x03, 0x5d, 0xfe, 0x98, 0x56, 0xfe, 0x38, 0x12, 0x09, 0x48, 0x01, | ||
5551 | 0x0e, 0xfe, 0x44, 0x48, 0x4f, 0x08, 0x05, 0x1b, 0xfe, 0x1a, 0x13, 0x09, | ||
5552 | 0x46, 0x01, 0x0e, 0x41, 0xfe, 0x41, 0x58, 0x09, 0xa4, 0x01, 0x0e, 0xfe, | ||
5553 | 0x49, 0x54, 0x96, 0xfe, 0x1e, 0x0e, 0x02, 0xfe, 0x2e, 0x03, 0x09, 0x5d, | ||
5554 | 0xfe, 0xee, 0x14, 0xfc, 0x44, 0x1b, 0xfe, 0xce, 0x45, 0x35, 0x42, 0xfe, | ||
5555 | 0xce, 0x47, 0xfe, 0xad, 0x13, 0x02, 0x2b, 0x22, 0x20, 0x07, 0x11, 0xfe, | ||
5556 | 0x9e, 0x12, 0x21, 0x13, 0x59, 0x13, 0x9f, 0x13, 0xd5, 0x22, 0x2f, 0x41, | ||
5557 | 0x39, 0x2f, 0xbc, 0xad, 0xfe, 0xbc, 0xf0, 0xfe, 0xe0, 0x0e, 0x0f, 0x06, | ||
5558 | 0x13, 0x59, 0x01, 0xfe, 0xda, 0x16, 0x03, 0xfe, 0x38, 0x01, 0x29, 0xfe, | ||
5559 | 0x3a, 0x01, 0x56, 0xfe, 0xe4, 0x0e, 0xfe, 0x02, 0xec, 0xd5, 0x69, 0x00, | ||
5560 | 0x66, 0xfe, 0x04, 0xec, 0x20, 0x4f, 0xfe, 0x05, 0xf6, 0xfe, 0x34, 0x01, | ||
5561 | 0x01, 0xfe, 0x4a, 0x17, 0xfe, 0x08, 0x90, 0xfe, 0x48, 0xf4, 0x0d, 0xfe, | ||
5562 | 0x18, 0x13, 0xba, 0xfe, 0x02, 0xea, 0xd5, 0x69, 0x7e, 0xfe, 0xc5, 0x13, | ||
5563 | 0x15, 0x1a, 0x39, 0xa0, 0xb4, 0xfe, 0x2e, 0x10, 0x03, 0xfe, 0x38, 0x01, | ||
5564 | 0x1e, 0xfe, 0xf0, 0xff, 0x0c, 0xfe, 0x60, 0x01, 0x03, 0xfe, 0x3a, 0x01, | ||
5565 | 0x0c, 0xfe, 0x62, 0x01, 0x43, 0x13, 0x20, 0x25, 0x06, 0x13, 0x2f, 0x12, | ||
5566 | 0x2f, 0x92, 0x0f, 0x06, 0x04, 0x21, 0x04, 0x22, 0x59, 0xfe, 0xf7, 0x12, | ||
5567 | 0x22, 0x9f, 0xb7, 0x13, 0x9f, 0x07, 0x7e, 0xfe, 0x71, 0x13, 0xfe, 0x24, | ||
5568 | 0x1c, 0x15, 0x19, 0x39, 0xa0, 0xb4, 0xfe, 0xd9, 0x10, 0xc3, 0xfe, 0x03, | ||
5569 | 0xdc, 0xfe, 0x73, 0x57, 0xfe, 0x80, 0x5d, 0x04, 0xc3, 0xfe, 0x03, 0xdc, | ||
5570 | 0xfe, 0x5b, 0x57, 0xfe, 0x80, 0x5d, 0x04, 0xfe, 0x03, 0x57, 0xc3, 0x21, | ||
5571 | 0xfe, 0x00, 0xcc, 0x04, 0xfe, 0x03, 0x57, 0xc3, 0x78, 0x04, 0x08, 0x05, | ||
5572 | 0x58, 0xfe, 0x22, 0x13, 0xfe, 0x1c, 0x80, 0x07, 0x06, 0xfe, 0x1a, 0x13, | ||
5573 | 0xfe, 0x1e, 0x80, 0xed, 0xfe, 0x1d, 0x80, 0xae, 0xfe, 0x0c, 0x90, 0xfe, | ||
5574 | 0x0e, 0x13, 0xfe, 0x0e, 0x90, 0xac, 0xfe, 0x3c, 0x90, 0xfe, 0x30, 0xf4, | ||
5575 | 0x0a, 0xfe, 0x3c, 0x50, 0xaa, 0x01, 0xfe, 0x7a, 0x17, 0x32, 0x07, 0x2f, | ||
5576 | 0xad, 0x01, 0xfe, 0xb4, 0x16, 0x08, 0x05, 0x1b, 0x4e, 0x01, 0xf5, 0x01, | ||
5577 | 0xf6, 0x12, 0xfe, 0xe9, 0x00, 0x08, 0x05, 0x58, 0xfe, 0x2c, 0x13, 0x01, | ||
5578 | 0xfe, 0x0c, 0x17, 0xfe, 0x1e, 0x1c, 0xfe, 0x14, 0x90, 0xfe, 0x96, 0x90, | ||
5579 | 0x0c, 0xfe, 0x64, 0x01, 0x14, 0xfe, 0x66, 0x01, 0x08, 0x05, 0x5b, 0xfe, | ||
5580 | 0x12, 0x12, 0xfe, 0x03, 0x80, 0x8d, 0xfe, 0x01, 0xec, 0x20, 0xfe, 0x80, | ||
5581 | 0x40, 0x13, 0x20, 0x6a, 0x2a, 0x12, 0xcf, 0x64, 0x22, 0x20, 0xfb, 0x79, | ||
5582 | 0x20, 0x04, 0xfe, 0x08, 0x1c, 0x03, 0xfe, 0xac, 0x00, 0xfe, 0x06, 0x58, | ||
5583 | 0x03, 0xfe, 0xae, 0x00, 0xfe, 0x07, 0x58, 0x03, 0xfe, 0xb0, 0x00, 0xfe, | ||
5584 | 0x08, 0x58, 0x03, 0xfe, 0xb2, 0x00, 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c, | ||
5585 | 0x25, 0x6e, 0x13, 0xd0, 0x21, 0x0c, 0x5c, 0x0c, 0x45, 0x0f, 0x46, 0x52, | ||
5586 | 0x50, 0x18, 0x1b, 0xfe, 0x90, 0x4d, 0xfe, 0x91, 0x54, 0x23, 0xfe, 0xfc, | ||
5587 | 0x0f, 0x44, 0x11, 0x0f, 0x48, 0x52, 0x18, 0x58, 0xfe, 0x90, 0x4d, 0xfe, | ||
5588 | 0x91, 0x54, 0x23, 0xe4, 0x25, 0x11, 0x13, 0x20, 0x7c, 0x6f, 0x4f, 0x22, | ||
5589 | 0x20, 0xfb, 0x79, 0x20, 0x12, 0xcf, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, | ||
5590 | 0xfe, 0x26, 0x10, 0xf8, 0x74, 0xfe, 0x14, 0x1c, 0xfe, 0x10, 0x1c, 0xfe, | ||
5591 | 0x18, 0x1c, 0x04, 0x42, 0xfe, 0x0c, 0x14, 0xfc, 0xfe, 0x07, 0xe6, 0x1b, | ||
5592 | 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x04, 0x01, 0xb0, 0x7c, 0x6f, 0x4f, | ||
5593 | 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x42, 0x13, 0x32, 0x07, 0x2f, | ||
5594 | 0xfe, 0x34, 0x13, 0x09, 0x48, 0x01, 0x0e, 0xbb, 0xfe, 0x36, 0x12, 0xfe, | ||
5595 | 0x41, 0x48, 0xfe, 0x45, 0x48, 0x01, 0xf0, 0xfe, 0x00, 0xcc, 0xbb, 0xfe, | ||
5596 | 0xf3, 0x13, 0x43, 0x78, 0x07, 0x11, 0xac, 0x09, 0x84, 0x01, 0x0e, 0xfe, | ||
5597 | 0x80, 0x5c, 0x01, 0x73, 0xfe, 0x0e, 0x10, 0x07, 0x82, 0x4e, 0xfe, 0x14, | ||
5598 | 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0x60, 0x10, 0x04, 0xfe, 0x44, 0x58, 0x8d, | ||
5599 | 0xfe, 0x01, 0xec, 0xa2, 0xfe, 0x9e, 0x40, 0xfe, 0x9d, 0xe7, 0x00, 0xfe, | ||
5600 | 0x9c, 0xe7, 0x1a, 0x79, 0x2a, 0x01, 0xe3, 0xfe, 0xdd, 0x10, 0x2c, 0xc7, | ||
5601 | 0x81, 0xc8, 0x83, 0x33, 0x31, 0xde, 0x07, 0x1a, 0xfe, 0x48, 0x12, 0x07, | ||
5602 | 0x0a, 0xfe, 0x56, 0x12, 0x07, 0x19, 0xfe, 0x30, 0x12, 0x07, 0xc9, 0x17, | ||
5603 | 0xfe, 0x32, 0x12, 0x07, 0xfe, 0x23, 0x00, 0x17, 0xeb, 0x07, 0x06, 0x17, | ||
5604 | 0xfe, 0x9c, 0x12, 0x07, 0x1f, 0xfe, 0x12, 0x12, 0x07, 0x00, 0x17, 0x24, | ||
5605 | 0x15, 0xc9, 0x01, 0x36, 0xa9, 0x2d, 0x01, 0x0b, 0x94, 0x4b, 0x04, 0x2d, | ||
5606 | 0xdd, 0x09, 0xd1, 0x01, 0xfe, 0x26, 0x0f, 0x12, 0x82, 0x02, 0x2b, 0x2d, | ||
5607 | 0x32, 0x07, 0xa6, 0xfe, 0xd9, 0x13, 0x3a, 0x3d, 0x3b, 0x3e, 0x56, 0xfe, | ||
5608 | 0xf0, 0x11, 0x08, 0x05, 0x5a, 0xfe, 0x72, 0x12, 0x9b, 0x2e, 0x9c, 0x3c, | ||
5609 | 0x90, 0xc0, 0x96, 0xfe, 0xba, 0x11, 0x22, 0x62, 0xfe, 0x26, 0x13, 0x03, | ||
5610 | 0x7f, 0x29, 0x80, 0x56, 0xfe, 0x76, 0x0d, 0x0c, 0x60, 0x14, 0x61, 0x21, | ||
5611 | 0x0c, 0x7f, 0x0c, 0x80, 0x01, 0xb3, 0x25, 0x6e, 0x77, 0x13, 0x62, 0x01, | ||
5612 | 0xef, 0x9b, 0x2e, 0x9c, 0x3c, 0xfe, 0x04, 0x55, 0xfe, 0xa5, 0x55, 0xfe, | ||
5613 | 0x04, 0xfa, 0x2e, 0xfe, 0x05, 0xfa, 0x3c, 0xfe, 0x91, 0x10, 0x03, 0x3f, | ||
5614 | 0x29, 0x40, 0xfe, 0x40, 0x56, 0xfe, 0xe1, 0x56, 0x0c, 0x3f, 0x14, 0x40, | ||
5615 | 0x88, 0x9b, 0x2e, 0x9c, 0x3c, 0x90, 0xc0, 0x03, 0x5e, 0x29, 0x5f, 0xfe, | ||
5616 | 0x00, 0x56, 0xfe, 0xa1, 0x56, 0x0c, 0x5e, 0x14, 0x5f, 0x08, 0x05, 0x5a, | ||
5617 | 0xfe, 0x1e, 0x12, 0x22, 0x62, 0xfe, 0x1f, 0x40, 0x03, 0x60, 0x29, 0x61, | ||
5618 | 0xfe, 0x2c, 0x50, 0xfe, 0xae, 0x50, 0x03, 0x3f, 0x29, 0x40, 0xfe, 0x44, | ||
5619 | 0x50, 0xfe, 0xc6, 0x50, 0x03, 0x5e, 0x29, 0x5f, 0xfe, 0x08, 0x50, 0xfe, | ||
5620 | 0x8a, 0x50, 0x03, 0x3d, 0x29, 0x3e, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, | ||
5621 | 0x02, 0x89, 0x25, 0x06, 0x13, 0xd4, 0x02, 0x72, 0x2d, 0x01, 0x0b, 0x1d, | ||
5622 | 0x4c, 0x33, 0x31, 0xde, 0x07, 0x06, 0x23, 0x4c, 0x32, 0x07, 0xa6, 0x23, | ||
5623 | 0x72, 0x01, 0xaf, 0x1e, 0x43, 0x17, 0x4c, 0x08, 0x05, 0x0a, 0xee, 0x3a, | ||
5624 | 0x3d, 0x3b, 0x3e, 0xfe, 0x0a, 0x55, 0x35, 0xfe, 0x8b, 0x55, 0x57, 0x3d, | ||
5625 | 0x7d, 0x3e, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0x02, 0x72, 0xfe, 0x19, | ||
5626 | 0x81, 0xba, 0xfe, 0x19, 0x41, 0x02, 0x72, 0x2d, 0x01, 0x0b, 0x1c, 0x34, | ||
5627 | 0x1d, 0xe8, 0x33, 0x31, 0xe1, 0x55, 0x19, 0xfe, 0xa6, 0x12, 0x55, 0x0a, | ||
5628 | 0x4d, 0x02, 0x4c, 0x01, 0x0b, 0x1c, 0x34, 0x1d, 0xe8, 0x33, 0x31, 0xdf, | ||
5629 | 0x07, 0x19, 0x23, 0x4c, 0x01, 0x0b, 0x1d, 0xe8, 0x33, 0x31, 0xfe, 0xe8, | ||
5630 | 0x09, 0xfe, 0xc2, 0x49, 0x51, 0x03, 0xfe, 0x9c, 0x00, 0x28, 0x8a, 0x53, | ||
5631 | 0x05, 0x1f, 0x35, 0xa9, 0xfe, 0xbb, 0x45, 0x55, 0x00, 0x4e, 0x44, 0x06, | ||
5632 | 0x7c, 0x43, 0xfe, 0xda, 0x14, 0x01, 0xaf, 0x8c, 0xfe, 0x4b, 0x45, 0xee, | ||
5633 | 0x32, 0x07, 0xa5, 0xed, 0x03, 0xcd, 0x28, 0x8a, 0x03, 0x45, 0x28, 0x35, | ||
5634 | 0x67, 0x02, 0x72, 0xfe, 0xc0, 0x5d, 0xfe, 0xf8, 0x14, 0xfe, 0x03, 0x17, | ||
5635 | 0x03, 0x5c, 0xc1, 0x0c, 0x5c, 0x67, 0x2d, 0x01, 0x0b, 0x26, 0x89, 0x01, | ||
5636 | 0xfe, 0x9e, 0x15, 0x02, 0x89, 0x01, 0x0b, 0x1c, 0x34, 0x1d, 0x4c, 0x33, | ||
5637 | 0x31, 0xdf, 0x07, 0x06, 0x23, 0x4c, 0x01, 0xf1, 0xfe, 0x42, 0x58, 0xf1, | ||
5638 | 0xfe, 0xa4, 0x14, 0x8c, 0xfe, 0x4a, 0xf4, 0x0a, 0x17, 0x4c, 0xfe, 0x4a, | ||
5639 | 0xf4, 0x06, 0xea, 0x32, 0x07, 0xa5, 0x8b, 0x02, 0x72, 0x03, 0x45, 0xc1, | ||
5640 | 0x0c, 0x45, 0x67, 0x2d, 0x01, 0x0b, 0x26, 0x89, 0x01, 0xfe, 0xcc, 0x15, | ||
5641 | 0x02, 0x89, 0x0f, 0x06, 0x27, 0xfe, 0xbe, 0x13, 0x26, 0xfe, 0xd4, 0x13, | ||
5642 | 0x76, 0xfe, 0x89, 0x48, 0x01, 0x0b, 0x21, 0x76, 0x04, 0x7b, 0xfe, 0xd0, | ||
5643 | 0x13, 0x1c, 0xfe, 0xd0, 0x13, 0x1d, 0xfe, 0xbe, 0x13, 0x67, 0x2d, 0x01, | ||
5644 | 0x0b, 0xfe, 0xd5, 0x10, 0x0f, 0x71, 0xff, 0x02, 0x00, 0x57, 0x52, 0x93, | ||
5645 | 0x1e, 0xfe, 0xff, 0x7f, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x04, 0x0f, | ||
5646 | 0x71, 0xff, 0x02, 0x00, 0x57, 0x52, 0x93, 0x1e, 0x43, 0xfe, 0x30, 0x56, | ||
5647 | 0xfe, 0x00, 0x5c, 0x04, 0x0f, 0x71, 0xff, 0x02, 0x00, 0x57, 0x52, 0x93, | ||
5648 | 0x04, 0x0f, 0x71, 0xff, 0x02, 0x00, 0x57, 0x52, 0x93, 0xfe, 0x0b, 0x58, | ||
5649 | 0x04, 0x09, 0x5c, 0x01, 0x87, 0x09, 0x45, 0x01, 0x87, 0x04, 0xfe, 0x03, | ||
5650 | 0xa1, 0x1e, 0x11, 0xff, 0x03, 0x00, 0x54, 0xfe, 0x00, 0xf4, 0x1f, 0x52, | ||
5651 | 0xfe, 0x00, 0x7d, 0xfe, 0x01, 0x7d, 0xfe, 0x02, 0x7d, 0xfe, 0x03, 0x7c, | ||
5652 | 0x6a, 0x2a, 0x0c, 0x5e, 0x14, 0x5f, 0x57, 0x3f, 0x7d, 0x40, 0x04, 0xdd, | ||
5653 | 0xfe, 0x82, 0x4a, 0xfe, 0xe1, 0x1a, 0xfe, 0x83, 0x5a, 0x8d, 0x04, 0x01, | ||
5654 | 0xfe, 0x0c, 0x19, 0xfe, 0x42, 0x48, 0x50, 0x51, 0x91, 0x01, 0x0b, 0x1d, | ||
5655 | 0xfe, 0x96, 0x15, 0x33, 0x31, 0xe1, 0x01, 0x0b, 0x1d, 0xfe, 0x96, 0x15, | ||
5656 | 0x33, 0x31, 0xfe, 0xe8, 0x0a, 0xfe, 0xc1, 0x59, 0x03, 0xcd, 0x28, 0xfe, | ||
5657 | 0xcc, 0x12, 0x53, 0x05, 0x1a, 0xfe, 0xc4, 0x13, 0x21, 0x69, 0x1a, 0xee, | ||
5658 | 0x55, 0xca, 0x6b, 0xfe, 0xdc, 0x14, 0x4d, 0x0f, 0x06, 0x18, 0xca, 0x7c, | ||
5659 | 0x30, 0xfe, 0x78, 0x10, 0xff, 0x02, 0x83, 0x55, 0xab, 0xff, 0x02, 0x83, | ||
5660 | 0x55, 0x69, 0x19, 0xae, 0x98, 0xfe, 0x30, 0x00, 0x96, 0xf2, 0x18, 0x6d, | ||
5661 | 0x0f, 0x06, 0xfe, 0x56, 0x10, 0x69, 0x0a, 0xed, 0x98, 0xfe, 0x64, 0x00, | ||
5662 | 0x96, 0xf2, 0x09, 0xfe, 0x64, 0x00, 0x18, 0x9e, 0x0f, 0x06, 0xfe, 0x28, | ||
5663 | 0x10, 0x69, 0x06, 0xfe, 0x60, 0x13, 0x98, 0xfe, 0xc8, 0x00, 0x96, 0xf2, | ||
5664 | 0x09, 0xfe, 0xc8, 0x00, 0x18, 0x59, 0x0f, 0x06, 0x88, 0x98, 0xfe, 0x90, | ||
5665 | 0x01, 0x7a, 0xfe, 0x42, 0x15, 0x91, 0xe4, 0xfe, 0x43, 0xf4, 0x9f, 0xfe, | ||
5666 | 0x56, 0xf0, 0xfe, 0x54, 0x15, 0xfe, 0x04, 0xf4, 0x71, 0xfe, 0x43, 0xf4, | ||
5667 | 0x9e, 0xfe, 0xf3, 0x10, 0xfe, 0x40, 0x5c, 0x01, 0xfe, 0x16, 0x14, 0x1e, | ||
5668 | 0x43, 0xec, 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4, 0x6e, 0x7a, 0xfe, 0x90, | ||
5669 | 0x15, 0xc4, 0x6e, 0xfe, 0x1c, 0x10, 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4, | ||
5670 | 0xcc, 0x7a, 0xfe, 0x90, 0x15, 0xc4, 0xcc, 0x88, 0x51, 0x21, 0xfe, 0x4d, | ||
5671 | 0xf4, 0x00, 0xe9, 0x91, 0x0f, 0x06, 0xfe, 0xb4, 0x56, 0xfe, 0xc3, 0x58, | ||
5672 | 0x04, 0x51, 0x0f, 0x0a, 0x04, 0x16, 0x06, 0x01, 0x0b, 0x26, 0xf3, 0x16, | ||
5673 | 0x0a, 0x01, 0x0b, 0x26, 0xf3, 0x16, 0x19, 0x01, 0x0b, 0x26, 0xf3, 0x76, | ||
5674 | 0xfe, 0x89, 0x49, 0x01, 0x0b, 0x04, 0x16, 0x06, 0x01, 0x0b, 0x26, 0xb1, | ||
5675 | 0x16, 0x19, 0x01, 0x0b, 0x26, 0xb1, 0x16, 0x06, 0x01, 0x0b, 0x26, 0xb1, | ||
5676 | 0xfe, 0x89, 0x49, 0x01, 0x0b, 0x26, 0xb1, 0x76, 0xfe, 0x89, 0x4a, 0x01, | ||
5677 | 0x0b, 0x04, 0x51, 0x04, 0x22, 0xd3, 0x07, 0x06, 0xfe, 0x48, 0x13, 0xb8, | ||
5678 | 0x13, 0xd3, 0xfe, 0x49, 0xf4, 0x00, 0x4d, 0x76, 0xa9, 0x67, 0xfe, 0x01, | ||
5679 | 0xec, 0xfe, 0x27, 0x01, 0xfe, 0x89, 0x48, 0xff, 0x02, 0x00, 0x10, 0x27, | ||
5680 | 0xfe, 0x2e, 0x16, 0x32, 0x07, 0xfe, 0xe3, 0x00, 0xfe, 0x20, 0x13, 0x1d, | ||
5681 | 0xfe, 0x52, 0x16, 0x21, 0x13, 0xd4, 0x01, 0x4b, 0x22, 0xd4, 0x07, 0x06, | ||
5682 | 0x4e, 0x08, 0x54, 0x06, 0x37, 0x04, 0x09, 0x48, 0x01, 0x0e, 0xfb, 0x8e, | ||
5683 | 0x07, 0x11, 0xae, 0x09, 0x84, 0x01, 0x0e, 0x8e, 0x09, 0x5d, 0x01, 0xa8, | ||
5684 | 0x04, 0x09, 0x84, 0x01, 0x0e, 0x8e, 0xfe, 0x80, 0xe7, 0x11, 0x07, 0x11, | ||
5685 | 0x8a, 0xfe, 0x45, 0x58, 0x01, 0xf0, 0x8e, 0x04, 0x09, 0x48, 0x01, 0x0e, | ||
5686 | 0x8e, 0x09, 0x5d, 0x01, 0xa8, 0x04, 0x09, 0x48, 0x01, 0x0e, 0xfe, 0x80, | ||
5687 | 0x80, 0xfe, 0x80, 0x4c, 0xfe, 0x49, 0xe4, 0x11, 0xae, 0x09, 0x84, 0x01, | ||
5688 | 0x0e, 0xfe, 0x80, 0x4c, 0x09, 0x5d, 0x01, 0x87, 0x04, 0x18, 0x11, 0x75, | ||
5689 | 0x6c, 0xfe, 0x60, 0x01, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x24, | ||
5690 | 0x1c, 0xfe, 0x1d, 0xf7, 0x1b, 0x97, 0xfe, 0xee, 0x16, 0x01, 0xfe, 0xf4, | ||
5691 | 0x17, 0xad, 0x9a, 0x1b, 0x6c, 0xfe, 0x2c, 0x01, 0xfe, 0x2f, 0x19, 0x04, | ||
5692 | 0xb9, 0x23, 0xfe, 0xde, 0x16, 0xfe, 0xda, 0x10, 0x18, 0x11, 0x75, 0x03, | ||
5693 | 0xfe, 0x64, 0x01, 0xfe, 0x00, 0xf4, 0x1f, 0xfe, 0x18, 0x58, 0x03, 0xfe, | ||
5694 | 0x66, 0x01, 0xfe, 0x19, 0x58, 0x9a, 0x1f, 0xfe, 0x3c, 0x90, 0xfe, 0x30, | ||
5695 | 0xf4, 0x06, 0xfe, 0x3c, 0x50, 0x6c, 0xfe, 0x38, 0x00, 0xfe, 0x0f, 0x79, | ||
5696 | 0xfe, 0x1c, 0xf7, 0x1f, 0x97, 0xfe, 0x38, 0x17, 0xfe, 0xb6, 0x14, 0x35, | ||
5697 | 0x04, 0xb9, 0x23, 0xfe, 0x10, 0x17, 0xfe, 0x9c, 0x10, 0x18, 0x11, 0x75, | ||
5698 | 0xfe, 0x83, 0x5a, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x1d, 0xf7, | ||
5699 | 0x2e, 0x97, 0xfe, 0x5a, 0x17, 0xfe, 0x94, 0x14, 0xec, 0x9a, 0x2e, 0x6c, | ||
5700 | 0x1a, 0xfe, 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00, 0x04, 0xb9, 0x23, 0xfe, | ||
5701 | 0x4e, 0x17, 0xfe, 0x6c, 0x10, 0x18, 0x11, 0x75, 0xfe, 0x30, 0xbc, 0xfe, | ||
5702 | 0xb2, 0xbc, 0x9a, 0xcb, 0x6c, 0x1a, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7, | ||
5703 | 0xcb, 0x97, 0xfe, 0x92, 0x17, 0xfe, 0x5c, 0x14, 0x35, 0x04, 0xb9, 0x23, | ||
5704 | 0xfe, 0x7e, 0x17, 0xfe, 0x42, 0x10, 0xfe, 0x02, 0xf6, 0x11, 0x75, 0xfe, | ||
5705 | 0x18, 0xfe, 0x60, 0xfe, 0x19, 0xfe, 0x61, 0xfe, 0x03, 0xa1, 0xfe, 0x1d, | ||
5706 | 0xf7, 0x5b, 0x97, 0xfe, 0xb8, 0x17, 0xfe, 0x36, 0x14, 0xfe, 0x1c, 0x13, | ||
5707 | 0x9a, 0x5b, 0x41, 0xfe, 0x83, 0x58, 0xfe, 0xaf, 0x19, 0xfe, 0x80, 0xe7, | ||
5708 | 0x11, 0xfe, 0x81, 0xe7, 0x11, 0x12, 0xfe, 0xdd, 0x00, 0x6a, 0x2a, 0x04, | ||
5709 | 0x6a, 0x2a, 0xfe, 0x12, 0x45, 0x23, 0xfe, 0xa8, 0x17, 0x15, 0x06, 0x39, | ||
5710 | 0xa0, 0xb4, 0x02, 0x2b, 0xfe, 0x39, 0xf0, 0xfe, 0xfc, 0x17, 0x21, 0x04, | ||
5711 | 0xfe, 0x7e, 0x18, 0x1e, 0x19, 0x66, 0x0f, 0x0d, 0x04, 0x75, 0x03, 0xd2, | ||
5712 | 0x1e, 0x06, 0xfe, 0xef, 0x12, 0xfe, 0xe1, 0x10, 0x7c, 0x6f, 0x4f, 0x32, | ||
5713 | 0x07, 0x2f, 0xfe, 0x3c, 0x13, 0xf1, 0xfe, 0x42, 0x13, 0x42, 0x92, 0x09, | ||
5714 | 0x48, 0x01, 0x0e, 0xbb, 0xeb, 0xfe, 0x41, 0x48, 0xfe, 0x45, 0x48, 0x01, | ||
5715 | 0xf0, 0xfe, 0x00, 0xcc, 0xbb, 0xfe, 0xf3, 0x13, 0x43, 0x78, 0x07, 0x11, | ||
5716 | 0xac, 0x09, 0x84, 0x01, 0x0e, 0xfe, 0x80, 0x4c, 0x01, 0x73, 0xfe, 0x16, | ||
5717 | 0x10, 0x07, 0x82, 0x8b, 0xfe, 0x40, 0x14, 0xfe, 0x24, 0x12, 0xfe, 0x14, | ||
5718 | 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0x1c, 0x18, 0x18, 0x0a, 0x04, 0xfe, 0x9c, | ||
5719 | 0xe7, 0x0a, 0x10, 0xfe, 0x15, 0x00, 0x64, 0x79, 0x2a, 0x01, 0xe3, 0x18, | ||
5720 | 0x06, 0x04, 0x42, 0x92, 0x08, 0x54, 0x1b, 0x37, 0x12, 0x2f, 0x01, 0x73, | ||
5721 | 0x18, 0x06, 0x04, 0xfe, 0x38, 0x90, 0xfe, 0xba, 0x90, 0x3a, 0xce, 0x3b, | ||
5722 | 0xcf, 0xfe, 0x48, 0x55, 0x35, 0xfe, 0xc9, 0x55, 0x04, 0x22, 0xa3, 0x77, | ||
5723 | 0x13, 0xa3, 0x04, 0x09, 0xa4, 0x01, 0x0e, 0xfe, 0x41, 0x48, 0x09, 0x46, | ||
5724 | 0x01, 0x0e, 0xfe, 0x49, 0x44, 0x17, 0xfe, 0xe8, 0x18, 0x77, 0x78, 0x04, | ||
5725 | 0x09, 0x48, 0x01, 0x0e, 0x07, 0x11, 0x4e, 0x09, 0x5d, 0x01, 0xa8, 0x09, | ||
5726 | 0x46, 0x01, 0x0e, 0x77, 0x78, 0x04, 0xfe, 0x4e, 0xe4, 0x19, 0x6b, 0xfe, | ||
5727 | 0x1c, 0x19, 0x03, 0xfe, 0x90, 0x00, 0xfe, 0x3a, 0x45, 0xfe, 0x2c, 0x10, | ||
5728 | 0xfe, 0x4e, 0xe4, 0xc9, 0x6b, 0xfe, 0x2e, 0x19, 0x03, 0xfe, 0x92, 0x00, | ||
5729 | 0xfe, 0x02, 0xe6, 0x1a, 0xe5, 0xfe, 0x4e, 0xe4, 0xfe, 0x0b, 0x00, 0x6b, | ||
5730 | 0xfe, 0x40, 0x19, 0x03, 0xfe, 0x94, 0x00, 0xfe, 0x02, 0xe6, 0x1f, 0xfe, | ||
5731 | 0x08, 0x10, 0x03, 0xfe, 0x96, 0x00, 0xfe, 0x02, 0xe6, 0x6d, 0xfe, 0x4e, | ||
5732 | 0x45, 0xea, 0xba, 0xff, 0x04, 0x68, 0x54, 0xe7, 0x1e, 0x6e, 0xfe, 0x08, | ||
5733 | 0x1c, 0xfe, 0x67, 0x19, 0xfe, 0x0a, 0x1c, 0xfe, 0x1a, 0xf4, 0xfe, 0x00, | ||
5734 | 0x04, 0xea, 0xfe, 0x48, 0xf4, 0x19, 0x7a, 0xfe, 0x74, 0x19, 0x0f, 0x19, | ||
5735 | 0x04, 0x07, 0x7e, 0xfe, 0x5a, 0xf0, 0xfe, 0x84, 0x19, 0x25, 0xfe, 0x09, | ||
5736 | 0x00, 0xfe, 0x34, 0x10, 0x07, 0x1a, 0xfe, 0x5a, 0xf0, 0xfe, 0x92, 0x19, | ||
5737 | 0x25, 0xca, 0xfe, 0x26, 0x10, 0x07, 0x19, 0x66, 0x25, 0x6d, 0xe5, 0x07, | ||
5738 | 0x0a, 0x66, 0x25, 0x9e, 0xfe, 0x0e, 0x10, 0x07, 0x06, 0x66, 0x25, 0x59, | ||
5739 | 0xa9, 0xb8, 0x04, 0x15, 0xfe, 0x09, 0x00, 0x01, 0x36, 0xfe, 0x04, 0xfe, | ||
5740 | 0x81, 0x03, 0x83, 0xfe, 0x40, 0x5c, 0x04, 0x1c, 0xf7, 0xfe, 0x14, 0xf0, | ||
5741 | 0x0b, 0x27, 0xfe, 0xd6, 0x19, 0x1c, 0xf7, 0x7b, 0xf7, 0xfe, 0x82, 0xf0, | ||
5742 | 0xfe, 0xda, 0x19, 0x04, 0xff, 0xcc, 0x00, 0x00, | ||
5743 | }; | ||
5744 | |||
5745 | static unsigned short _adv_asc38C0800_size = sizeof(_adv_asc38C0800_buf); /* 0x14E1 */ | ||
5746 | static ADV_DCNT _adv_asc38C0800_chksum = 0x050D3FD8UL; /* Expanded little-endian checksum. */ | ||
5747 | |||
5748 | /* Microcode buffer is kept after initialization for error recovery. */ | ||
5749 | static unsigned char _adv_asc38C1600_buf[] = { | ||
5750 | 0x00, 0x00, 0x00, 0xf2, 0x00, 0x16, 0x00, 0xfc, 0x00, 0x10, 0x00, 0xf0, | ||
5751 | 0x18, 0xe4, 0x01, 0x00, 0x04, 0x1e, 0x48, 0xe4, 0x03, 0xf6, 0xf7, 0x13, | ||
5752 | 0x2e, 0x1e, 0x02, 0x00, 0x07, 0x17, 0xc0, 0x5f, 0x00, 0xfa, 0xff, 0xff, | ||
5753 | 0x04, 0x00, 0x00, 0xf6, 0x09, 0xe7, 0x82, 0xe7, 0x85, 0xf0, 0x86, 0xf0, | ||
5754 | 0x4e, 0x10, 0x9e, 0xe7, 0xff, 0x00, 0x55, 0xf0, 0x01, 0xf6, 0x03, 0x00, | ||
5755 | 0x98, 0x57, 0x01, 0xe6, 0x00, 0xea, 0x00, 0xec, 0x01, 0xfa, 0x18, 0xf4, | ||
5756 | 0x08, 0x00, 0xf0, 0x1d, 0x38, 0x54, 0x32, 0xf0, 0x10, 0x00, 0xc2, 0x0e, | ||
5757 | 0x1e, 0xf0, 0xd5, 0xf0, 0xbc, 0x00, 0x4b, 0xe4, 0x00, 0xe6, 0xb1, 0xf0, | ||
5758 | 0xb4, 0x00, 0x02, 0x13, 0x3e, 0x1c, 0xc8, 0x47, 0x3e, 0x00, 0xd8, 0x01, | ||
5759 | 0x06, 0x13, 0x0c, 0x1c, 0x5e, 0x1e, 0x00, 0x57, 0xc8, 0x57, 0x01, 0xfc, | ||
5760 | 0xbc, 0x0e, 0xa2, 0x12, 0xb9, 0x54, 0x00, 0x80, 0x62, 0x0a, 0x5a, 0x12, | ||
5761 | 0xc8, 0x15, 0x3e, 0x1e, 0x18, 0x40, 0xbd, 0x56, 0x03, 0xe6, 0x01, 0xea, | ||
5762 | 0x5c, 0xf0, 0x0f, 0x00, 0x20, 0x00, 0x6c, 0x01, 0x6e, 0x01, 0x04, 0x12, | ||
5763 | 0x04, 0x13, 0xbb, 0x55, 0x3c, 0x56, 0x3e, 0x57, 0x03, 0x58, 0x4a, 0xe4, | ||
5764 | 0x40, 0x00, 0xb6, 0x00, 0xbb, 0x00, 0xc0, 0x00, 0x00, 0x01, 0x01, 0x01, | ||
5765 | 0x3e, 0x01, 0x58, 0x0a, 0x44, 0x10, 0x0a, 0x12, 0x4c, 0x1c, 0x4e, 0x1c, | ||
5766 | 0x02, 0x4a, 0x30, 0xe4, 0x05, 0xe6, 0x0c, 0x00, 0x3c, 0x00, 0x80, 0x00, | ||
5767 | 0x24, 0x01, 0x3c, 0x01, 0x68, 0x01, 0x6a, 0x01, 0x70, 0x01, 0x72, 0x01, | ||
5768 | 0x74, 0x01, 0x76, 0x01, 0x78, 0x01, 0x7c, 0x01, 0xc6, 0x0e, 0x0c, 0x10, | ||
5769 | 0xac, 0x12, 0xae, 0x12, 0x16, 0x1a, 0x32, 0x1c, 0x6e, 0x1e, 0x02, 0x48, | ||
5770 | 0x3a, 0x55, 0xc9, 0x57, 0x02, 0xee, 0x5b, 0xf0, 0x03, 0xf7, 0x06, 0xf7, | ||
5771 | 0x03, 0xfc, 0x06, 0x00, 0x1e, 0x00, 0xbe, 0x00, 0xe1, 0x00, 0x0c, 0x12, | ||
5772 | 0x18, 0x1a, 0x70, 0x1a, 0x30, 0x1c, 0x38, 0x1c, 0x10, 0x44, 0x00, 0x4c, | ||
5773 | 0xb0, 0x57, 0x40, 0x5c, 0x4d, 0xe4, 0x04, 0xea, 0x5d, 0xf0, 0xa7, 0xf0, | ||
5774 | 0x04, 0xf6, 0x02, 0xfc, 0x05, 0x00, 0x09, 0x00, 0x19, 0x00, 0x32, 0x00, | ||
5775 | 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x98, 0x00, 0x9e, 0x00, 0xcc, 0x00, | ||
5776 | 0x20, 0x01, 0x4e, 0x01, 0x79, 0x01, 0x3c, 0x09, 0x68, 0x0d, 0x02, 0x10, | ||
5777 | 0x04, 0x10, 0x3a, 0x10, 0x08, 0x12, 0x0a, 0x13, 0x40, 0x16, 0x50, 0x16, | ||
5778 | 0x00, 0x17, 0x4a, 0x19, 0x00, 0x4e, 0x00, 0x54, 0x01, 0x58, 0x00, 0xdc, | ||
5779 | 0x05, 0xf0, 0x09, 0xf0, 0x59, 0xf0, 0xb8, 0xf0, 0x48, 0xf4, 0x0e, 0xf7, | ||
5780 | 0x0a, 0x00, 0x9b, 0x00, 0x9c, 0x00, 0xa4, 0x00, 0xb5, 0x00, 0xba, 0x00, | ||
5781 | 0xd0, 0x00, 0xe7, 0x00, 0xf0, 0x03, 0x69, 0x08, 0xe9, 0x09, 0x5c, 0x0c, | ||
5782 | 0xb6, 0x12, 0xbc, 0x19, 0xd8, 0x1b, 0x20, 0x1c, 0x34, 0x1c, 0x36, 0x1c, | ||
5783 | 0x42, 0x1d, 0x08, 0x44, 0x38, 0x44, 0x91, 0x44, 0x0a, 0x45, 0x48, 0x46, | ||
5784 | 0x89, 0x48, 0x68, 0x54, 0x83, 0x55, 0x83, 0x59, 0x31, 0xe4, 0x02, 0xe6, | ||
5785 | 0x07, 0xf0, 0x08, 0xf0, 0x0b, 0xf0, 0x0c, 0xf0, 0x4b, 0xf4, 0x04, 0xf8, | ||
5786 | 0x05, 0xf8, 0x02, 0xfa, 0x03, 0xfa, 0x04, 0xfc, 0x05, 0xfc, 0x07, 0x00, | ||
5787 | 0xa8, 0x00, 0xaa, 0x00, 0xb9, 0x00, 0xe0, 0x00, 0xe5, 0x00, 0x22, 0x01, | ||
5788 | 0x26, 0x01, 0x60, 0x01, 0x7a, 0x01, 0x82, 0x01, 0xc8, 0x01, 0xca, 0x01, | ||
5789 | 0x86, 0x02, 0x6a, 0x03, 0x18, 0x05, 0xb2, 0x07, 0x68, 0x08, 0x10, 0x0d, | ||
5790 | 0x06, 0x10, 0x0a, 0x10, 0x0e, 0x10, 0x12, 0x10, 0x60, 0x10, 0xed, 0x10, | ||
5791 | 0xf3, 0x10, 0x06, 0x12, 0x10, 0x12, 0x1e, 0x12, 0x0c, 0x13, 0x0e, 0x13, | ||
5792 | 0x10, 0x13, 0xfe, 0x9c, 0xf0, 0x35, 0x05, 0xfe, 0xec, 0x0e, 0xff, 0x10, | ||
5793 | 0x00, 0x00, 0xe9, 0xfe, 0x34, 0x1f, 0x00, 0xe8, 0xfe, 0x88, 0x01, 0xff, | ||
5794 | 0x03, 0x00, 0x00, 0xfe, 0x93, 0x15, 0xfe, 0x0f, 0x05, 0xff, 0x38, 0x00, | ||
5795 | 0x00, 0xfe, 0x57, 0x24, 0x00, 0xfe, 0x4c, 0x00, 0x65, 0xff, 0x04, 0x00, | ||
5796 | 0x00, 0x1a, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08, 0x01, 0x01, 0xff, 0x08, | ||
5797 | 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x13, | ||
5798 | 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21, 0x00, 0x00, | ||
5799 | 0xfe, 0x04, 0xf7, 0xe8, 0x37, 0x7d, 0x0d, 0x01, 0xfe, 0x4a, 0x11, 0xfe, | ||
5800 | 0x04, 0xf7, 0xe8, 0x7d, 0x0d, 0x51, 0x37, 0xfe, 0x3d, 0xf0, 0xfe, 0x0c, | ||
5801 | 0x02, 0xfe, 0x20, 0xf0, 0xbc, 0xfe, 0x91, 0xf0, 0xfe, 0xf8, 0x01, 0xfe, | ||
5802 | 0x90, 0xf0, 0xfe, 0xf8, 0x01, 0xfe, 0x8f, 0xf0, 0xbc, 0x03, 0x67, 0x4d, | ||
5803 | 0x05, 0xfe, 0x08, 0x0f, 0x01, 0xfe, 0x78, 0x0f, 0xfe, 0xdd, 0x12, 0x05, | ||
5804 | 0xfe, 0x0e, 0x03, 0xfe, 0x28, 0x1c, 0x03, 0xfe, 0xa6, 0x00, 0xfe, 0xd1, | ||
5805 | 0x12, 0x3e, 0x22, 0xfe, 0xa6, 0x00, 0xac, 0xfe, 0x48, 0xf0, 0xfe, 0x90, | ||
5806 | 0x02, 0xfe, 0x49, 0xf0, 0xfe, 0xaa, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xc8, | ||
5807 | 0x02, 0xfe, 0x46, 0xf0, 0xfe, 0x5a, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x60, | ||
5808 | 0x02, 0xfe, 0x43, 0xf0, 0xfe, 0x4e, 0x02, 0xfe, 0x44, 0xf0, 0xfe, 0x52, | ||
5809 | 0x02, 0xfe, 0x45, 0xf0, 0xfe, 0x56, 0x02, 0x1c, 0x0d, 0xa2, 0x1c, 0x07, | ||
5810 | 0x22, 0xb7, 0x05, 0x35, 0xfe, 0x00, 0x1c, 0xfe, 0xf1, 0x10, 0xfe, 0x02, | ||
5811 | 0x1c, 0xf5, 0xfe, 0x1e, 0x1c, 0xfe, 0xe9, 0x10, 0x01, 0x5f, 0xfe, 0xe7, | ||
5812 | 0x10, 0xfe, 0x06, 0xfc, 0xde, 0x0a, 0x81, 0x01, 0xa3, 0x05, 0x35, 0x1f, | ||
5813 | 0x95, 0x47, 0xb8, 0x01, 0xfe, 0xe4, 0x11, 0x0a, 0x81, 0x01, 0x5c, 0xfe, | ||
5814 | 0xbd, 0x10, 0x0a, 0x81, 0x01, 0x5c, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, | ||
5815 | 0xfe, 0x58, 0x1c, 0x1c, 0x07, 0x22, 0xb7, 0x37, 0x2a, 0x35, 0xfe, 0x3d, | ||
5816 | 0xf0, 0xfe, 0x0c, 0x02, 0x2b, 0xfe, 0x9e, 0x02, 0xfe, 0x5a, 0x1c, 0xfe, | ||
5817 | 0x12, 0x1c, 0xfe, 0x14, 0x1c, 0x1f, 0xfe, 0x30, 0x00, 0x47, 0xb8, 0x01, | ||
5818 | 0xfe, 0xd4, 0x11, 0x1c, 0x07, 0x22, 0xb7, 0x05, 0xe9, 0x21, 0x2c, 0x09, | ||
5819 | 0x1a, 0x31, 0xfe, 0x69, 0x10, 0x1c, 0x07, 0x22, 0xb7, 0xfe, 0x04, 0xec, | ||
5820 | 0x2c, 0x60, 0x01, 0xfe, 0x1e, 0x1e, 0x20, 0x2c, 0xfe, 0x05, 0xf6, 0xde, | ||
5821 | 0x01, 0xfe, 0x62, 0x1b, 0x01, 0x0c, 0x61, 0x4a, 0x44, 0x15, 0x56, 0x51, | ||
5822 | 0x01, 0xfe, 0x9e, 0x1e, 0x01, 0xfe, 0x96, 0x1a, 0x05, 0x35, 0x0a, 0x57, | ||
5823 | 0x01, 0x18, 0x09, 0x00, 0x36, 0x01, 0x85, 0xfe, 0x18, 0x10, 0xfe, 0x41, | ||
5824 | 0x58, 0x0a, 0xba, 0x01, 0x18, 0xfe, 0xc8, 0x54, 0x7b, 0xfe, 0x1c, 0x03, | ||
5825 | 0x01, 0xfe, 0x96, 0x1a, 0x05, 0x35, 0x37, 0x60, 0xfe, 0x02, 0xe8, 0x30, | ||
5826 | 0xfe, 0xbf, 0x57, 0xfe, 0x9e, 0x43, 0xfe, 0x77, 0x57, 0xfe, 0x27, 0xf0, | ||
5827 | 0xfe, 0xe4, 0x01, 0xfe, 0x07, 0x4b, 0xfe, 0x20, 0xf0, 0xbc, 0xfe, 0x40, | ||
5828 | 0x1c, 0x2a, 0xeb, 0xfe, 0x26, 0xf0, 0xfe, 0x66, 0x03, 0xfe, 0xa0, 0xf0, | ||
5829 | 0xfe, 0x54, 0x03, 0xfe, 0x11, 0xf0, 0xbc, 0xfe, 0xef, 0x10, 0xfe, 0x9f, | ||
5830 | 0xf0, 0xfe, 0x74, 0x03, 0xfe, 0x46, 0x1c, 0x19, 0xfe, 0x11, 0x00, 0x05, | ||
5831 | 0x70, 0x37, 0xfe, 0x48, 0x1c, 0xfe, 0x46, 0x1c, 0x01, 0x0c, 0x06, 0x28, | ||
5832 | 0xfe, 0x18, 0x13, 0x26, 0x21, 0xb9, 0xc7, 0x20, 0xb9, 0x0a, 0x57, 0x01, | ||
5833 | 0x18, 0xc7, 0x89, 0x01, 0xfe, 0xc8, 0x1a, 0x15, 0xe1, 0x2a, 0xeb, 0xfe, | ||
5834 | 0x01, 0xf0, 0xeb, 0xfe, 0x82, 0xf0, 0xfe, 0xa4, 0x03, 0xfe, 0x9c, 0x32, | ||
5835 | 0x15, 0xfe, 0xe4, 0x00, 0x2f, 0xfe, 0xb6, 0x03, 0x2a, 0x3c, 0x16, 0xfe, | ||
5836 | 0xc6, 0x03, 0x01, 0x41, 0xfe, 0x06, 0xf0, 0xfe, 0xd6, 0x03, 0xaf, 0xa0, | ||
5837 | 0xfe, 0x0a, 0xf0, 0xfe, 0xa2, 0x07, 0x05, 0x29, 0x03, 0x81, 0x1e, 0x1b, | ||
5838 | 0xfe, 0x24, 0x05, 0x1f, 0x63, 0x01, 0x42, 0x8f, 0xfe, 0x70, 0x02, 0x05, | ||
5839 | 0xea, 0xfe, 0x46, 0x1c, 0x37, 0x7d, 0x1d, 0xfe, 0x67, 0x1b, 0xfe, 0xbf, | ||
5840 | 0x57, 0xfe, 0x77, 0x57, 0xfe, 0x48, 0x1c, 0x75, 0x01, 0xa6, 0x86, 0x0a, | ||
5841 | 0x57, 0x01, 0x18, 0x09, 0x00, 0x1b, 0xec, 0x0a, 0xe1, 0x01, 0x18, 0x77, | ||
5842 | 0x50, 0x40, 0x8d, 0x30, 0x03, 0x81, 0x1e, 0xf8, 0x1f, 0x63, 0x01, 0x42, | ||
5843 | 0x8f, 0xfe, 0x70, 0x02, 0x05, 0xea, 0xd7, 0x99, 0xd8, 0x9c, 0x2a, 0x29, | ||
5844 | 0x2f, 0xfe, 0x4e, 0x04, 0x16, 0xfe, 0x4a, 0x04, 0x7e, 0xfe, 0xa0, 0x00, | ||
5845 | 0xfe, 0x9b, 0x57, 0xfe, 0x54, 0x12, 0x32, 0xff, 0x02, 0x00, 0x10, 0x01, | ||
5846 | 0x08, 0x16, 0xfe, 0x02, 0x05, 0x32, 0x01, 0x08, 0x16, 0x29, 0x27, 0x25, | ||
5847 | 0xee, 0xfe, 0x4c, 0x44, 0xfe, 0x58, 0x12, 0x50, 0xfe, 0x44, 0x48, 0x13, | ||
5848 | 0x34, 0xfe, 0x4c, 0x54, 0x7b, 0xec, 0x60, 0x8d, 0x30, 0x01, 0xfe, 0x4e, | ||
5849 | 0x1e, 0xfe, 0x48, 0x47, 0xfe, 0x7c, 0x13, 0x01, 0x0c, 0x06, 0x28, 0xfe, | ||
5850 | 0x32, 0x13, 0x01, 0x43, 0x09, 0x9b, 0xfe, 0x68, 0x13, 0xfe, 0x26, 0x10, | ||
5851 | 0x13, 0x34, 0xfe, 0x4c, 0x54, 0x7b, 0xec, 0x01, 0xfe, 0x4e, 0x1e, 0xfe, | ||
5852 | 0x48, 0x47, 0xfe, 0x54, 0x13, 0x01, 0x0c, 0x06, 0x28, 0xa5, 0x01, 0x43, | ||
5853 | 0x09, 0x9b, 0xfe, 0x40, 0x13, 0x01, 0x0c, 0x06, 0x28, 0xf9, 0x1f, 0x7f, | ||
5854 | 0x01, 0x0c, 0x06, 0x07, 0x4d, 0x1f, 0xfe, 0x0d, 0x00, 0x01, 0x42, 0x8f, | ||
5855 | 0xfe, 0xa4, 0x0e, 0x05, 0x29, 0x32, 0x15, 0xfe, 0xe6, 0x00, 0x0f, 0xfe, | ||
5856 | 0x1c, 0x90, 0x04, 0xfe, 0x9c, 0x93, 0x3a, 0x0b, 0x0e, 0x8b, 0x02, 0x1f, | ||
5857 | 0x7f, 0x01, 0x42, 0x05, 0x35, 0xfe, 0x42, 0x5b, 0x7d, 0x1d, 0xfe, 0x46, | ||
5858 | 0x59, 0xfe, 0xbf, 0x57, 0xfe, 0x77, 0x57, 0x0f, 0xfe, 0x87, 0x80, 0x04, | ||
5859 | 0xfe, 0x87, 0x83, 0xfe, 0xc9, 0x47, 0x0b, 0x0e, 0xd0, 0x65, 0x01, 0x0c, | ||
5860 | 0x06, 0x0d, 0xfe, 0x98, 0x13, 0x0f, 0xfe, 0x20, 0x80, 0x04, 0xfe, 0xa0, | ||
5861 | 0x83, 0x33, 0x0b, 0x0e, 0x09, 0x1d, 0xfe, 0x84, 0x12, 0x01, 0x38, 0x06, | ||
5862 | 0x07, 0xfe, 0x70, 0x13, 0x03, 0xfe, 0xa2, 0x00, 0x1e, 0x1b, 0xfe, 0xda, | ||
5863 | 0x05, 0xd0, 0x54, 0x01, 0x38, 0x06, 0x0d, 0xfe, 0x58, 0x13, 0x03, 0xfe, | ||
5864 | 0xa0, 0x00, 0x1e, 0xfe, 0x50, 0x12, 0x5e, 0xff, 0x02, 0x00, 0x10, 0x2f, | ||
5865 | 0xfe, 0x90, 0x05, 0x2a, 0x3c, 0xcc, 0xff, 0x02, 0x00, 0x10, 0x2f, 0xfe, | ||
5866 | 0x9e, 0x05, 0x17, 0xfe, 0xf4, 0x05, 0x15, 0xfe, 0xe3, 0x00, 0x26, 0x01, | ||
5867 | 0x38, 0xfe, 0x4a, 0xf0, 0xfe, 0xc0, 0x05, 0xfe, 0x49, 0xf0, 0xfe, 0xba, | ||
5868 | 0x05, 0x71, 0x2e, 0xfe, 0x21, 0x00, 0xf1, 0x2e, 0xfe, 0x22, 0x00, 0xa2, | ||
5869 | 0x2e, 0x4a, 0xfe, 0x09, 0x48, 0xff, 0x02, 0x00, 0x10, 0x2f, 0xfe, 0xd0, | ||
5870 | 0x05, 0x17, 0xfe, 0xf4, 0x05, 0xfe, 0xe2, 0x08, 0x01, 0x38, 0x06, 0xfe, | ||
5871 | 0x1c, 0x00, 0x4d, 0x01, 0xa7, 0x2e, 0x07, 0x20, 0xe4, 0x47, 0xfe, 0x27, | ||
5872 | 0x01, 0x01, 0x0c, 0x06, 0x28, 0xfe, 0x24, 0x12, 0x3e, 0x01, 0x84, 0x1f, | ||
5873 | 0x7f, 0x01, 0x0c, 0x06, 0x07, 0x4d, 0x1f, 0xfe, 0x0d, 0x00, 0x01, 0x42, | ||
5874 | 0x8f, 0xfe, 0xa4, 0x0e, 0x05, 0x29, 0x03, 0xe6, 0x1e, 0xfe, 0xca, 0x13, | ||
5875 | 0x03, 0xb6, 0x1e, 0xfe, 0x40, 0x12, 0x03, 0x66, 0x1e, 0xfe, 0x38, 0x13, | ||
5876 | 0x3e, 0x01, 0x84, 0x17, 0xfe, 0x72, 0x06, 0x0a, 0x07, 0x01, 0x38, 0x06, | ||
5877 | 0x24, 0xfe, 0x02, 0x12, 0x4f, 0x01, 0xfe, 0x56, 0x19, 0x16, 0xfe, 0x68, | ||
5878 | 0x06, 0x15, 0x82, 0x01, 0x41, 0x15, 0xe2, 0x03, 0x66, 0x8a, 0x10, 0x66, | ||
5879 | 0x03, 0x9a, 0x1e, 0xfe, 0x70, 0x12, 0x03, 0x55, 0x1e, 0xfe, 0x68, 0x13, | ||
5880 | 0x01, 0xc6, 0x09, 0x12, 0x48, 0xfe, 0x92, 0x06, 0x2e, 0x12, 0x01, 0xfe, | ||
5881 | 0xac, 0x1d, 0xfe, 0x43, 0x48, 0x62, 0x80, 0x13, 0x58, 0xff, 0x02, 0x00, | ||
5882 | 0x57, 0x52, 0xad, 0x23, 0x3f, 0x4e, 0x62, 0x49, 0x3e, 0x01, 0x84, 0x17, | ||
5883 | 0xfe, 0xea, 0x06, 0x01, 0x38, 0x06, 0x12, 0xf7, 0x45, 0x0a, 0x95, 0x01, | ||
5884 | 0xfe, 0x84, 0x19, 0x16, 0xfe, 0xe0, 0x06, 0x15, 0x82, 0x01, 0x41, 0x15, | ||
5885 | 0xe2, 0x03, 0x55, 0x8a, 0x10, 0x55, 0x1c, 0x07, 0x01, 0x84, 0xfe, 0xae, | ||
5886 | 0x10, 0x03, 0x6f, 0x1e, 0xfe, 0x9e, 0x13, 0x3e, 0x01, 0x84, 0x03, 0x9a, | ||
5887 | 0x1e, 0xfe, 0x1a, 0x12, 0x01, 0x38, 0x06, 0x12, 0xfc, 0x01, 0xc6, 0x01, | ||
5888 | 0xfe, 0xac, 0x1d, 0xfe, 0x43, 0x48, 0x62, 0x80, 0xf0, 0x45, 0x0a, 0x95, | ||
5889 | 0x03, 0xb6, 0x1e, 0xf8, 0x01, 0x38, 0x06, 0x24, 0x36, 0xfe, 0x02, 0xf6, | ||
5890 | 0x07, 0x71, 0x78, 0x8c, 0x00, 0x4d, 0x62, 0x49, 0x3e, 0x2d, 0x93, 0x4e, | ||
5891 | 0xd0, 0x0d, 0x17, 0xfe, 0x9a, 0x07, 0x01, 0xfe, 0xc0, 0x19, 0x16, 0xfe, | ||
5892 | 0x90, 0x07, 0x26, 0x20, 0x9e, 0x15, 0x82, 0x01, 0x41, 0x15, 0xe2, 0x21, | ||
5893 | 0x9e, 0x09, 0x07, 0xfb, 0x03, 0xe6, 0xfe, 0x58, 0x57, 0x10, 0xe6, 0x05, | ||
5894 | 0xfe, 0x2a, 0x06, 0x03, 0x6f, 0x8a, 0x10, 0x6f, 0x1c, 0x07, 0x01, 0x84, | ||
5895 | 0xfe, 0x9c, 0x32, 0x5f, 0x75, 0x01, 0xa6, 0x86, 0x15, 0xfe, 0xe2, 0x00, | ||
5896 | 0x2f, 0xed, 0x2a, 0x3c, 0xfe, 0x0a, 0xf0, 0xfe, 0xce, 0x07, 0xae, 0xfe, | ||
5897 | 0x96, 0x08, 0xfe, 0x06, 0xf0, 0xfe, 0x9e, 0x08, 0xaf, 0xa0, 0x05, 0x29, | ||
5898 | 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x2e, 0x12, 0x14, 0x1d, 0x01, 0x08, 0x14, | ||
5899 | 0x00, 0x01, 0x08, 0x14, 0x00, 0x01, 0x08, 0x14, 0x00, 0x01, 0x08, 0xfe, | ||
5900 | 0x99, 0xa4, 0x01, 0x08, 0x14, 0x00, 0x05, 0xfe, 0xc6, 0x09, 0x01, 0x76, | ||
5901 | 0x06, 0x12, 0xfe, 0x3a, 0x12, 0x01, 0x0c, 0x06, 0x12, 0xfe, 0x30, 0x13, | ||
5902 | 0x14, 0xfe, 0x1b, 0x00, 0x01, 0x08, 0x14, 0x00, 0x01, 0x08, 0x14, 0x00, | ||
5903 | 0x01, 0x08, 0x14, 0x00, 0x01, 0x08, 0x14, 0x07, 0x01, 0x08, 0x14, 0x00, | ||
5904 | 0x05, 0xef, 0x7c, 0x4a, 0x78, 0x4f, 0x0f, 0xfe, 0x9a, 0x81, 0x04, 0xfe, | ||
5905 | 0x9a, 0x83, 0xfe, 0xcb, 0x47, 0x0b, 0x0e, 0x2d, 0x28, 0x48, 0xfe, 0x6c, | ||
5906 | 0x08, 0x0a, 0x28, 0xfe, 0x09, 0x6f, 0xca, 0xfe, 0xca, 0x45, 0xfe, 0x32, | ||
5907 | 0x12, 0x53, 0x63, 0x4e, 0x7c, 0x97, 0x2f, 0xfe, 0x7e, 0x08, 0x2a, 0x3c, | ||
5908 | 0xfe, 0x0a, 0xf0, 0xfe, 0x6c, 0x08, 0xaf, 0xa0, 0xae, 0xfe, 0x96, 0x08, | ||
5909 | 0x05, 0x29, 0x01, 0x41, 0x05, 0xed, 0x14, 0x24, 0x05, 0xed, 0xfe, 0x9c, | ||
5910 | 0xf7, 0x9f, 0x01, 0xfe, 0xae, 0x1e, 0xfe, 0x18, 0x58, 0x01, 0xfe, 0xbe, | ||
5911 | 0x1e, 0xfe, 0x99, 0x58, 0xfe, 0x78, 0x18, 0xfe, 0xf9, 0x18, 0x8e, 0xfe, | ||
5912 | 0x16, 0x09, 0x10, 0x6a, 0x22, 0x6b, 0x01, 0x0c, 0x61, 0x54, 0x44, 0x21, | ||
5913 | 0x2c, 0x09, 0x1a, 0xf8, 0x77, 0x01, 0xfe, 0x7e, 0x1e, 0x47, 0x2c, 0x7a, | ||
5914 | 0x30, 0xf0, 0xfe, 0x83, 0xe7, 0xfe, 0x3f, 0x00, 0x71, 0xfe, 0x03, 0x40, | ||
5915 | 0x01, 0x0c, 0x61, 0x65, 0x44, 0x01, 0xc2, 0xc8, 0xfe, 0x1f, 0x40, 0x20, | ||
5916 | 0x6e, 0x01, 0xfe, 0x6a, 0x16, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe, | ||
5917 | 0x44, 0x51, 0xfe, 0xc6, 0x51, 0xfe, 0x10, 0x10, 0x01, 0xfe, 0xce, 0x1e, | ||
5918 | 0x01, 0xfe, 0xde, 0x1e, 0x10, 0x68, 0x22, 0x69, 0x01, 0xfe, 0xee, 0x1e, | ||
5919 | 0x01, 0xfe, 0xfe, 0x1e, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x10, 0x4b, | ||
5920 | 0x22, 0x4c, 0xfe, 0x8a, 0x10, 0x01, 0x0c, 0x06, 0x54, 0xfe, 0x50, 0x12, | ||
5921 | 0x01, 0xfe, 0xae, 0x1e, 0x01, 0xfe, 0xbe, 0x1e, 0x10, 0x6a, 0x22, 0x6b, | ||
5922 | 0x01, 0x0c, 0x06, 0x65, 0x4e, 0x01, 0xc2, 0x0f, 0xfe, 0x1f, 0x80, 0x04, | ||
5923 | 0xfe, 0x9f, 0x83, 0x33, 0x0b, 0x0e, 0x20, 0x6e, 0x0f, 0xfe, 0x44, 0x90, | ||
5924 | 0x04, 0xfe, 0xc4, 0x93, 0x3a, 0x0b, 0xfe, 0xc6, 0x90, 0x04, 0xfe, 0xc6, | ||
5925 | 0x93, 0x79, 0x0b, 0x0e, 0x10, 0x6c, 0x22, 0x6d, 0x01, 0xfe, 0xce, 0x1e, | ||
5926 | 0x01, 0xfe, 0xde, 0x1e, 0x10, 0x68, 0x22, 0x69, 0x0f, 0xfe, 0x40, 0x90, | ||
5927 | 0x04, 0xfe, 0xc0, 0x93, 0x3a, 0x0b, 0xfe, 0xc2, 0x90, 0x04, 0xfe, 0xc2, | ||
5928 | 0x93, 0x79, 0x0b, 0x0e, 0x10, 0x4b, 0x22, 0x4c, 0x10, 0x64, 0x22, 0x34, | ||
5929 | 0x01, 0x0c, 0x61, 0x24, 0x44, 0x37, 0x13, 0xfe, 0x4e, 0x11, 0x2f, 0xfe, | ||
5930 | 0xde, 0x09, 0xfe, 0x9e, 0xf0, 0xfe, 0xf2, 0x09, 0xfe, 0x01, 0x48, 0x1b, | ||
5931 | 0x3c, 0x37, 0x88, 0xf5, 0xd4, 0xfe, 0x1e, 0x0a, 0xd5, 0xfe, 0x42, 0x0a, | ||
5932 | 0xd2, 0xfe, 0x1e, 0x0a, 0xd3, 0xfe, 0x42, 0x0a, 0xae, 0xfe, 0x12, 0x0a, | ||
5933 | 0xfe, 0x06, 0xf0, 0xfe, 0x18, 0x0a, 0xaf, 0xa0, 0x05, 0x29, 0x01, 0x41, | ||
5934 | 0xfe, 0xc1, 0x10, 0x14, 0x24, 0xfe, 0xc1, 0x10, 0x01, 0x76, 0x06, 0x07, | ||
5935 | 0xfe, 0x14, 0x12, 0x01, 0x76, 0x06, 0x0d, 0x5d, 0x01, 0x0c, 0x06, 0x0d, | ||
5936 | 0xfe, 0x74, 0x12, 0xfe, 0x2e, 0x1c, 0x05, 0xfe, 0x1a, 0x0c, 0x01, 0x76, | ||
5937 | 0x06, 0x07, 0x5d, 0x01, 0x76, 0x06, 0x0d, 0x41, 0xfe, 0x2c, 0x1c, 0xfe, | ||
5938 | 0xaa, 0xf0, 0xfe, 0xce, 0x0a, 0xfe, 0xac, 0xf0, 0xfe, 0x66, 0x0a, 0xfe, | ||
5939 | 0x92, 0x10, 0xc4, 0xf6, 0xfe, 0xad, 0xf0, 0xfe, 0x72, 0x0a, 0x05, 0xfe, | ||
5940 | 0x1a, 0x0c, 0xc5, 0xfe, 0xe7, 0x10, 0xfe, 0x2b, 0xf0, 0xbf, 0xfe, 0x6b, | ||
5941 | 0x18, 0x23, 0xfe, 0x00, 0xfe, 0xfe, 0x1c, 0x12, 0xac, 0xfe, 0xd2, 0xf0, | ||
5942 | 0xbf, 0xfe, 0x76, 0x18, 0x23, 0x1d, 0x1b, 0xbf, 0x03, 0xe3, 0x23, 0x07, | ||
5943 | 0x1b, 0xbf, 0xd4, 0x5b, 0xd5, 0x5b, 0xd2, 0x5b, 0xd3, 0x5b, 0xc4, 0xc5, | ||
5944 | 0xfe, 0xa9, 0x10, 0x75, 0x5e, 0x32, 0x1f, 0x7f, 0x01, 0x42, 0x19, 0xfe, | ||
5945 | 0x35, 0x00, 0xfe, 0x01, 0xf0, 0x70, 0x19, 0x98, 0x05, 0x70, 0xfe, 0x74, | ||
5946 | 0x18, 0x23, 0xfe, 0x00, 0xf8, 0x1b, 0x5b, 0x7d, 0x12, 0x01, 0xfe, 0x78, | ||
5947 | 0x0f, 0x4d, 0x01, 0xfe, 0x96, 0x1a, 0x21, 0x30, 0x77, 0x7d, 0x1d, 0x05, | ||
5948 | 0x5b, 0x01, 0x0c, 0x06, 0x0d, 0x2b, 0xfe, 0xe2, 0x0b, 0x01, 0x0c, 0x06, | ||
5949 | 0x54, 0xfe, 0xa6, 0x12, 0x01, 0x0c, 0x06, 0x24, 0xfe, 0x88, 0x13, 0x21, | ||
5950 | 0x6e, 0xc7, 0x01, 0xfe, 0x1e, 0x1f, 0x0f, 0xfe, 0x83, 0x80, 0x04, 0xfe, | ||
5951 | 0x83, 0x83, 0xfe, 0xc9, 0x47, 0x0b, 0x0e, 0xfe, 0xc8, 0x44, 0xfe, 0x42, | ||
5952 | 0x13, 0x0f, 0xfe, 0x04, 0x91, 0x04, 0xfe, 0x84, 0x93, 0xfe, 0xca, 0x57, | ||
5953 | 0x0b, 0xfe, 0x86, 0x91, 0x04, 0xfe, 0x86, 0x93, 0xfe, 0xcb, 0x57, 0x0b, | ||
5954 | 0x0e, 0x7a, 0x30, 0xfe, 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x8e, 0x40, 0x03, | ||
5955 | 0x6a, 0x3b, 0x6b, 0x10, 0x97, 0x22, 0x98, 0xd9, 0x6a, 0xda, 0x6b, 0x01, | ||
5956 | 0xc2, 0xc8, 0x7a, 0x30, 0x20, 0x6e, 0xdb, 0x64, 0xdc, 0x34, 0x91, 0x6c, | ||
5957 | 0x7e, 0x6d, 0xfe, 0x44, 0x55, 0xfe, 0xe5, 0x55, 0xfe, 0x04, 0xfa, 0x64, | ||
5958 | 0xfe, 0x05, 0xfa, 0x34, 0x01, 0xfe, 0x6a, 0x16, 0xa3, 0x26, 0x10, 0x97, | ||
5959 | 0x10, 0x98, 0x91, 0x6c, 0x7e, 0x6d, 0xfe, 0x14, 0x10, 0x01, 0x0c, 0x06, | ||
5960 | 0x24, 0x1b, 0x40, 0x91, 0x4b, 0x7e, 0x4c, 0x01, 0x0c, 0x06, 0xfe, 0xf7, | ||
5961 | 0x00, 0x44, 0x03, 0x68, 0x3b, 0x69, 0xfe, 0x10, 0x58, 0xfe, 0x91, 0x58, | ||
5962 | 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0x05, 0x5b, 0x01, 0x0c, 0x06, 0x24, | ||
5963 | 0x1b, 0x40, 0x01, 0x0c, 0x06, 0xfe, 0xf7, 0x00, 0x44, 0x78, 0x01, 0xfe, | ||
5964 | 0x8e, 0x1e, 0x4f, 0x0f, 0xfe, 0x10, 0x90, 0x04, 0xfe, 0x90, 0x93, 0x3a, | ||
5965 | 0x0b, 0xfe, 0x92, 0x90, 0x04, 0xfe, 0x92, 0x93, 0x79, 0x0b, 0x0e, 0xfe, | ||
5966 | 0xbd, 0x10, 0x01, 0x43, 0x09, 0xbb, 0x1b, 0xfe, 0x6e, 0x0a, 0x15, 0xbb, | ||
5967 | 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x14, 0x13, 0x03, 0x4b, 0x3b, 0x4c, 0x8e, | ||
5968 | 0xfe, 0x6e, 0x0a, 0xfe, 0x0c, 0x58, 0xfe, 0x8d, 0x58, 0x05, 0x5b, 0x26, | ||
5969 | 0x3e, 0x0f, 0xfe, 0x19, 0x80, 0x04, 0xfe, 0x99, 0x83, 0x33, 0x0b, 0x0e, | ||
5970 | 0xfe, 0xe5, 0x10, 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x1a, 0x12, 0xfe, 0x6c, | ||
5971 | 0x19, 0xfe, 0x19, 0x41, 0xfe, 0x6b, 0x18, 0xac, 0xfe, 0xd1, 0xf0, 0xef, | ||
5972 | 0x1f, 0x92, 0x01, 0x42, 0x19, 0xfe, 0x44, 0x00, 0xfe, 0x90, 0x10, 0xfe, | ||
5973 | 0x6c, 0x19, 0xd9, 0x4b, 0xfe, 0xed, 0x19, 0xda, 0x4c, 0xfe, 0x0c, 0x51, | ||
5974 | 0xfe, 0x8e, 0x51, 0xfe, 0x6b, 0x18, 0x23, 0xfe, 0x00, 0xff, 0x31, 0xfe, | ||
5975 | 0x76, 0x10, 0xac, 0xfe, 0xd2, 0xf0, 0xfe, 0xba, 0x0c, 0xfe, 0x76, 0x18, | ||
5976 | 0x23, 0x1d, 0x5d, 0x03, 0xe3, 0x23, 0x07, 0xfe, 0x08, 0x13, 0x19, 0xfe, | ||
5977 | 0x16, 0x00, 0x05, 0x70, 0xfe, 0xd1, 0xf0, 0xfe, 0xcc, 0x0c, 0x1f, 0x92, | ||
5978 | 0x01, 0x42, 0x19, 0xfe, 0x17, 0x00, 0x5c, 0xfe, 0xce, 0xf0, 0xfe, 0xd2, | ||
5979 | 0x0c, 0xfe, 0x3e, 0x10, 0xfe, 0xcd, 0xf0, 0xfe, 0xde, 0x0c, 0x19, 0xfe, | ||
5980 | 0x22, 0x00, 0x05, 0x70, 0xfe, 0xcb, 0xf0, 0xfe, 0xea, 0x0c, 0x19, 0xfe, | ||
5981 | 0x24, 0x00, 0x05, 0x70, 0xfe, 0xd0, 0xf0, 0xfe, 0xf4, 0x0c, 0x19, 0x94, | ||
5982 | 0xfe, 0x1c, 0x10, 0xfe, 0xcf, 0xf0, 0xfe, 0xfe, 0x0c, 0x19, 0x4a, 0xf3, | ||
5983 | 0xfe, 0xcc, 0xf0, 0xef, 0x01, 0x76, 0x06, 0x24, 0x4d, 0x19, 0xfe, 0x12, | ||
5984 | 0x00, 0x37, 0x13, 0xfe, 0x4e, 0x11, 0x2f, 0xfe, 0x16, 0x0d, 0xfe, 0x9e, | ||
5985 | 0xf0, 0xfe, 0x2a, 0x0d, 0xfe, 0x01, 0x48, 0x1b, 0x3c, 0x37, 0x88, 0xf5, | ||
5986 | 0xd4, 0x29, 0xd5, 0x29, 0xd2, 0x29, 0xd3, 0x29, 0x37, 0xfe, 0x9c, 0x32, | ||
5987 | 0x2f, 0xfe, 0x3e, 0x0d, 0x2a, 0x3c, 0xae, 0xfe, 0x62, 0x0d, 0xaf, 0xa0, | ||
5988 | 0xd4, 0x9f, 0xd5, 0x9f, 0xd2, 0x9f, 0xd3, 0x9f, 0x05, 0x29, 0x01, 0x41, | ||
5989 | 0xfe, 0xd3, 0x10, 0x15, 0xfe, 0xe8, 0x00, 0xc4, 0xc5, 0x75, 0xd7, 0x99, | ||
5990 | 0xd8, 0x9c, 0xfe, 0x89, 0xf0, 0x29, 0x27, 0x25, 0xbe, 0xd7, 0x99, 0xd8, | ||
5991 | 0x9c, 0x2f, 0xfe, 0x8c, 0x0d, 0x16, 0x29, 0x27, 0x25, 0xbd, 0xfe, 0x01, | ||
5992 | 0x48, 0xa4, 0x19, 0xfe, 0x42, 0x00, 0x05, 0x70, 0x90, 0x07, 0xfe, 0x81, | ||
5993 | 0x49, 0x1b, 0xfe, 0x64, 0x0e, 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x44, 0x13, | ||
5994 | 0x19, 0x00, 0x2d, 0x0d, 0xfe, 0x54, 0x12, 0x2d, 0xfe, 0x28, 0x00, 0x2b, | ||
5995 | 0xfe, 0xda, 0x0e, 0x0a, 0x57, 0x01, 0x18, 0x09, 0x00, 0x36, 0x46, 0xfe, | ||
5996 | 0x28, 0x00, 0xfe, 0xfa, 0x10, 0x01, 0xfe, 0xf4, 0x1c, 0x01, 0xfe, 0x00, | ||
5997 | 0x1d, 0x0a, 0xba, 0x01, 0xfe, 0x58, 0x10, 0x40, 0x15, 0x56, 0x01, 0x85, | ||
5998 | 0x05, 0x35, 0x19, 0xfe, 0x44, 0x00, 0x2d, 0x0d, 0xf7, 0x46, 0x0d, 0xfe, | ||
5999 | 0xcc, 0x10, 0x01, 0xa7, 0x46, 0x0d, 0xfe, 0xc2, 0x10, 0x01, 0xa7, 0x0f, | ||
6000 | 0xfe, 0x19, 0x82, 0x04, 0xfe, 0x99, 0x83, 0xfe, 0xcc, 0x47, 0x0b, 0x0e, | ||
6001 | 0xfe, 0x34, 0x46, 0xa5, 0x46, 0x0d, 0x19, 0xfe, 0x43, 0x00, 0xfe, 0xa2, | ||
6002 | 0x10, 0x01, 0x0c, 0x61, 0x0d, 0x44, 0x01, 0xfe, 0xf4, 0x1c, 0x01, 0xfe, | ||
6003 | 0x00, 0x1d, 0x40, 0x15, 0x56, 0x01, 0x85, 0x7d, 0x0d, 0x40, 0x51, 0x01, | ||
6004 | 0xfe, 0x9e, 0x1e, 0x05, 0xfe, 0x3a, 0x03, 0x01, 0x0c, 0x06, 0x0d, 0x5d, | ||
6005 | 0x46, 0x0d, 0x19, 0x00, 0xfe, 0x62, 0x10, 0x01, 0x76, 0x06, 0x12, 0xfe, | ||
6006 | 0x5c, 0x12, 0x01, 0x0c, 0x06, 0x12, 0xfe, 0x52, 0x13, 0xfe, 0x1c, 0x1c, | ||
6007 | 0xfe, 0x9d, 0xf0, 0xfe, 0x8e, 0x0e, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, | ||
6008 | 0xfe, 0x94, 0x0e, 0x01, 0x0c, 0x61, 0x12, 0x44, 0xfe, 0x9f, 0x10, 0x19, | ||
6009 | 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0d, 0x4f, 0xfe, 0x2e, 0x10, 0x19, | ||
6010 | 0xfe, 0x13, 0x00, 0xfe, 0x10, 0x10, 0x19, 0xfe, 0x47, 0x00, 0xf1, 0x19, | ||
6011 | 0xfe, 0x41, 0x00, 0xa2, 0x19, 0xfe, 0x24, 0x00, 0x86, 0xc4, 0xc5, 0x75, | ||
6012 | 0x03, 0x81, 0x1e, 0x2b, 0xea, 0x4f, 0xfe, 0x04, 0xe6, 0x12, 0xfe, 0x9d, | ||
6013 | 0x41, 0xfe, 0x1c, 0x42, 0x40, 0x01, 0xf4, 0x05, 0x35, 0xfe, 0x12, 0x1c, | ||
6014 | 0x1f, 0x0d, 0x47, 0xb5, 0xc3, 0x1f, 0xfe, 0x31, 0x00, 0x47, 0xb8, 0x01, | ||
6015 | 0xfe, 0xd4, 0x11, 0x05, 0xe9, 0x51, 0xfe, 0x06, 0xec, 0xe0, 0xfe, 0x0e, | ||
6016 | 0x47, 0x46, 0x28, 0xfe, 0xce, 0x45, 0x31, 0x51, 0xfe, 0x06, 0xea, 0xe0, | ||
6017 | 0xfe, 0x47, 0x4b, 0x45, 0xfe, 0x75, 0x57, 0x03, 0x67, 0xfe, 0x98, 0x56, | ||
6018 | 0xfe, 0x38, 0x12, 0x0a, 0x5a, 0x01, 0x18, 0xfe, 0x44, 0x48, 0x60, 0x01, | ||
6019 | 0x0c, 0x06, 0x28, 0xfe, 0x18, 0x13, 0x0a, 0x57, 0x01, 0x18, 0x3e, 0xfe, | ||
6020 | 0x41, 0x58, 0x0a, 0xba, 0xfe, 0xfa, 0x14, 0xfe, 0x49, 0x54, 0xb0, 0xfe, | ||
6021 | 0x5e, 0x0f, 0x05, 0xfe, 0x3a, 0x03, 0x0a, 0x67, 0xfe, 0xe0, 0x14, 0xfe, | ||
6022 | 0x0e, 0x47, 0x46, 0x28, 0xfe, 0xce, 0x45, 0x31, 0x51, 0xfe, 0xce, 0x47, | ||
6023 | 0xfe, 0xad, 0x13, 0x05, 0x35, 0x21, 0x2c, 0x09, 0x1a, 0xfe, 0x98, 0x12, | ||
6024 | 0x26, 0x20, 0x96, 0x20, 0xe7, 0xfe, 0x08, 0x1c, 0xfe, 0x7c, 0x19, 0xfe, | ||
6025 | 0xfd, 0x19, 0xfe, 0x0a, 0x1c, 0x03, 0xe5, 0xfe, 0x48, 0x55, 0xa5, 0x3b, | ||
6026 | 0xfe, 0x62, 0x01, 0xfe, 0xc9, 0x55, 0x31, 0xfe, 0x74, 0x10, 0x01, 0xfe, | ||
6027 | 0xf0, 0x1a, 0x03, 0xfe, 0x38, 0x01, 0x3b, 0xfe, 0x3a, 0x01, 0x8e, 0xfe, | ||
6028 | 0x1e, 0x10, 0xfe, 0x02, 0xec, 0xe7, 0x53, 0x00, 0x36, 0xfe, 0x04, 0xec, | ||
6029 | 0x2c, 0x60, 0xfe, 0x05, 0xf6, 0xfe, 0x34, 0x01, 0x01, 0xfe, 0x62, 0x1b, | ||
6030 | 0x01, 0xfe, 0xce, 0x1e, 0xb2, 0x11, 0xfe, 0x18, 0x13, 0xca, 0xfe, 0x02, | ||
6031 | 0xea, 0xe7, 0x53, 0x92, 0xfe, 0xc3, 0x13, 0x1f, 0x12, 0x47, 0xb5, 0xc3, | ||
6032 | 0xfe, 0x2a, 0x10, 0x03, 0xfe, 0x38, 0x01, 0x23, 0xfe, 0xf0, 0xff, 0x10, | ||
6033 | 0xe5, 0x03, 0xfe, 0x3a, 0x01, 0x10, 0xfe, 0x62, 0x01, 0x01, 0xfe, 0x1e, | ||
6034 | 0x1e, 0x20, 0x2c, 0x15, 0x56, 0x01, 0xfe, 0x9e, 0x1e, 0x13, 0x07, 0x02, | ||
6035 | 0x26, 0x02, 0x21, 0x96, 0xc7, 0x20, 0x96, 0x09, 0x92, 0xfe, 0x79, 0x13, | ||
6036 | 0x1f, 0x1d, 0x47, 0xb5, 0xc3, 0xfe, 0xe1, 0x10, 0xcf, 0xfe, 0x03, 0xdc, | ||
6037 | 0xfe, 0x73, 0x57, 0xfe, 0x80, 0x5d, 0x02, 0xcf, 0xfe, 0x03, 0xdc, 0xfe, | ||
6038 | 0x5b, 0x57, 0xfe, 0x80, 0x5d, 0x02, 0xfe, 0x03, 0x57, 0xcf, 0x26, 0xfe, | ||
6039 | 0x00, 0xcc, 0x02, 0xfe, 0x03, 0x57, 0xcf, 0x89, 0x02, 0x01, 0x0c, 0x06, | ||
6040 | 0x4a, 0xfe, 0x4e, 0x13, 0x0f, 0xfe, 0x1c, 0x80, 0x04, 0xfe, 0x9c, 0x83, | ||
6041 | 0x33, 0x0b, 0x0e, 0x09, 0x07, 0xfe, 0x3a, 0x13, 0x0f, 0xfe, 0x1e, 0x80, | ||
6042 | 0x04, 0xfe, 0x9e, 0x83, 0x33, 0x0b, 0x0e, 0xfe, 0x2a, 0x13, 0x0f, 0xfe, | ||
6043 | 0x1d, 0x80, 0x04, 0xfe, 0x9d, 0x83, 0xfe, 0xf9, 0x13, 0x0e, 0xfe, 0x1c, | ||
6044 | 0x13, 0x01, 0xfe, 0xee, 0x1e, 0xac, 0xfe, 0x14, 0x13, 0x01, 0xfe, 0xfe, | ||
6045 | 0x1e, 0xfe, 0x81, 0x58, 0xfa, 0x01, 0xfe, 0x0e, 0x1f, 0xfe, 0x30, 0xf4, | ||
6046 | 0x0d, 0xfe, 0x3c, 0x50, 0xa2, 0x01, 0xfe, 0x92, 0x1b, 0x01, 0x43, 0x09, | ||
6047 | 0x56, 0xfb, 0x01, 0xfe, 0xc8, 0x1a, 0x01, 0x0c, 0x06, 0x28, 0xa4, 0x01, | ||
6048 | 0xfe, 0xf4, 0x1c, 0x01, 0xfe, 0x00, 0x1d, 0x15, 0xfe, 0xe9, 0x00, 0x01, | ||
6049 | 0x0c, 0x06, 0x4a, 0xfe, 0x4e, 0x13, 0x01, 0xfe, 0x22, 0x1b, 0xfe, 0x1e, | ||
6050 | 0x1c, 0x0f, 0xfe, 0x14, 0x90, 0x04, 0xfe, 0x94, 0x93, 0x3a, 0x0b, 0xfe, | ||
6051 | 0x96, 0x90, 0x04, 0xfe, 0x96, 0x93, 0x79, 0x0b, 0x0e, 0x10, 0xfe, 0x64, | ||
6052 | 0x01, 0x22, 0xfe, 0x66, 0x01, 0x01, 0x0c, 0x06, 0x65, 0xf9, 0x0f, 0xfe, | ||
6053 | 0x03, 0x80, 0x04, 0xfe, 0x83, 0x83, 0x33, 0x0b, 0x0e, 0x77, 0xfe, 0x01, | ||
6054 | 0xec, 0x2c, 0xfe, 0x80, 0x40, 0x20, 0x2c, 0x7a, 0x30, 0x15, 0xdf, 0x40, | ||
6055 | 0x21, 0x2c, 0xfe, 0x00, 0x40, 0x8d, 0x2c, 0x02, 0xfe, 0x08, 0x1c, 0x03, | ||
6056 | 0xfe, 0xac, 0x00, 0xfe, 0x06, 0x58, 0x03, 0xfe, 0xae, 0x00, 0xfe, 0x07, | ||
6057 | 0x58, 0x03, 0xfe, 0xb0, 0x00, 0xfe, 0x08, 0x58, 0x03, 0xfe, 0xb2, 0x00, | ||
6058 | 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c, 0x2e, 0x49, 0x20, 0xe0, 0x26, 0x10, | ||
6059 | 0x66, 0x10, 0x55, 0x10, 0x6f, 0x13, 0x57, 0x52, 0x4f, 0x1c, 0x28, 0xfe, | ||
6060 | 0x90, 0x4d, 0xfe, 0x91, 0x54, 0x2b, 0xfe, 0x88, 0x11, 0x46, 0x1a, 0x13, | ||
6061 | 0x5a, 0x52, 0x1c, 0x4a, 0xfe, 0x90, 0x4d, 0xfe, 0x91, 0x54, 0x2b, 0xfe, | ||
6062 | 0x9e, 0x11, 0x2e, 0x1a, 0x20, 0x2c, 0x90, 0x34, 0x60, 0x21, 0x2c, 0xfe, | ||
6063 | 0x00, 0x40, 0x8d, 0x2c, 0x15, 0xdf, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, | ||
6064 | 0xfe, 0xb2, 0x11, 0xfe, 0x12, 0x1c, 0x75, 0xfe, 0x14, 0x1c, 0xfe, 0x10, | ||
6065 | 0x1c, 0xfe, 0x18, 0x1c, 0x02, 0x51, 0xfe, 0x0c, 0x14, 0xfe, 0x0e, 0x47, | ||
6066 | 0xfe, 0x07, 0xe6, 0x28, 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x02, 0x01, | ||
6067 | 0xa7, 0x90, 0x34, 0x60, 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x42, | ||
6068 | 0x13, 0xfe, 0x02, 0x80, 0x09, 0x56, 0xfe, 0x34, 0x13, 0x0a, 0x5a, 0x01, | ||
6069 | 0x18, 0xcb, 0xfe, 0x36, 0x12, 0xfe, 0x41, 0x48, 0xfe, 0x45, 0x48, 0x01, | ||
6070 | 0xfe, 0xb2, 0x16, 0xfe, 0x00, 0xcc, 0xcb, 0xfe, 0xf3, 0x13, 0x3f, 0x89, | ||
6071 | 0x09, 0x1a, 0xa5, 0x0a, 0x9d, 0x01, 0x18, 0xfe, 0x80, 0x5c, 0x01, 0x85, | ||
6072 | 0xf2, 0x09, 0x9b, 0xa4, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0xec, | ||
6073 | 0x11, 0x02, 0xfe, 0x44, 0x58, 0x77, 0xfe, 0x01, 0xec, 0xb8, 0xfe, 0x9e, | ||
6074 | 0x40, 0xfe, 0x9d, 0xe7, 0x00, 0xfe, 0x9c, 0xe7, 0x12, 0x8d, 0x30, 0x01, | ||
6075 | 0xf4, 0xfe, 0xdd, 0x10, 0x37, 0xd7, 0x99, 0xd8, 0x9c, 0x27, 0x25, 0xee, | ||
6076 | 0x09, 0x12, 0xfe, 0x48, 0x12, 0x09, 0x0d, 0xfe, 0x56, 0x12, 0x09, 0x1d, | ||
6077 | 0xfe, 0x30, 0x12, 0x09, 0xdd, 0x1b, 0xfe, 0xc4, 0x13, 0x09, 0xfe, 0x23, | ||
6078 | 0x00, 0x1b, 0xfe, 0xd0, 0x13, 0x09, 0x07, 0x1b, 0xfe, 0x34, 0x14, 0x09, | ||
6079 | 0x24, 0xfe, 0x12, 0x12, 0x09, 0x00, 0x1b, 0x29, 0x1f, 0xdd, 0x01, 0x42, | ||
6080 | 0xa1, 0x32, 0x01, 0x08, 0xae, 0x41, 0x02, 0x32, 0xfe, 0x62, 0x08, 0x0a, | ||
6081 | 0xe1, 0x01, 0xfe, 0x58, 0x10, 0x15, 0x9b, 0x05, 0x35, 0x32, 0x01, 0x43, | ||
6082 | 0x09, 0xbb, 0xfe, 0xd7, 0x13, 0x91, 0x4b, 0x7e, 0x4c, 0x8e, 0xfe, 0x80, | ||
6083 | 0x13, 0x01, 0x0c, 0x06, 0x54, 0xfe, 0x72, 0x12, 0xdb, 0x64, 0xdc, 0x34, | ||
6084 | 0xfe, 0x44, 0x55, 0xfe, 0xe5, 0x55, 0xb0, 0xfe, 0x4a, 0x13, 0x21, 0x6e, | ||
6085 | 0xfe, 0x26, 0x13, 0x03, 0x97, 0x3b, 0x98, 0x8e, 0xfe, 0xb6, 0x0e, 0x10, | ||
6086 | 0x6a, 0x22, 0x6b, 0x26, 0x10, 0x97, 0x10, 0x98, 0x01, 0xc2, 0x2e, 0x49, | ||
6087 | 0x88, 0x20, 0x6e, 0x01, 0xfe, 0x6a, 0x16, 0xdb, 0x64, 0xdc, 0x34, 0xfe, | ||
6088 | 0x04, 0x55, 0xfe, 0xa5, 0x55, 0xfe, 0x04, 0xfa, 0x64, 0xfe, 0x05, 0xfa, | ||
6089 | 0x34, 0xfe, 0x8f, 0x10, 0x03, 0x6c, 0x3b, 0x6d, 0xfe, 0x40, 0x56, 0xfe, | ||
6090 | 0xe1, 0x56, 0x10, 0x6c, 0x22, 0x6d, 0x71, 0xdb, 0x64, 0xdc, 0x34, 0xfe, | ||
6091 | 0x44, 0x55, 0xfe, 0xe5, 0x55, 0x03, 0x68, 0x3b, 0x69, 0xfe, 0x00, 0x56, | ||
6092 | 0xfe, 0xa1, 0x56, 0x10, 0x68, 0x22, 0x69, 0x01, 0x0c, 0x06, 0x54, 0xf9, | ||
6093 | 0x21, 0x6e, 0xfe, 0x1f, 0x40, 0x03, 0x6a, 0x3b, 0x6b, 0xfe, 0x2c, 0x50, | ||
6094 | 0xfe, 0xae, 0x50, 0x03, 0x6c, 0x3b, 0x6d, 0xfe, 0x44, 0x50, 0xfe, 0xc6, | ||
6095 | 0x50, 0x03, 0x68, 0x3b, 0x69, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0x03, | ||
6096 | 0x4b, 0x3b, 0x4c, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x05, 0x73, 0x2e, | ||
6097 | 0x07, 0x20, 0x9e, 0x05, 0x72, 0x32, 0x01, 0x08, 0x16, 0x3d, 0x27, 0x25, | ||
6098 | 0xee, 0x09, 0x07, 0x2b, 0x3d, 0x01, 0x43, 0x09, 0xbb, 0x2b, 0x72, 0x01, | ||
6099 | 0xa6, 0x23, 0x3f, 0x1b, 0x3d, 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x1e, 0x13, | ||
6100 | 0x91, 0x4b, 0x7e, 0x4c, 0xfe, 0x0a, 0x55, 0x31, 0xfe, 0x8b, 0x55, 0xd9, | ||
6101 | 0x4b, 0xda, 0x4c, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0x05, 0x72, 0x01, | ||
6102 | 0xfe, 0x8e, 0x1e, 0xca, 0xfe, 0x19, 0x41, 0x05, 0x72, 0x32, 0x01, 0x08, | ||
6103 | 0x2a, 0x3c, 0x16, 0xc0, 0x27, 0x25, 0xbe, 0x2d, 0x1d, 0xc0, 0x2d, 0x0d, | ||
6104 | 0x83, 0x2d, 0x7f, 0x1b, 0xfe, 0x66, 0x15, 0x05, 0x3d, 0x01, 0x08, 0x2a, | ||
6105 | 0x3c, 0x16, 0xc0, 0x27, 0x25, 0xbd, 0x09, 0x1d, 0x2b, 0x3d, 0x01, 0x08, | ||
6106 | 0x16, 0xc0, 0x27, 0x25, 0xfe, 0xe8, 0x09, 0xfe, 0xc2, 0x49, 0x50, 0x03, | ||
6107 | 0xb6, 0x1e, 0x83, 0x01, 0x38, 0x06, 0x24, 0x31, 0xa1, 0xfe, 0xbb, 0x45, | ||
6108 | 0x2d, 0x00, 0xa4, 0x46, 0x07, 0x90, 0x3f, 0x01, 0xfe, 0xf8, 0x15, 0x01, | ||
6109 | 0xa6, 0x86, 0xfe, 0x4b, 0x45, 0xfe, 0x20, 0x13, 0x01, 0x43, 0x09, 0x82, | ||
6110 | 0xfe, 0x16, 0x13, 0x03, 0x9a, 0x1e, 0x5d, 0x03, 0x55, 0x1e, 0x31, 0x5e, | ||
6111 | 0x05, 0x72, 0xfe, 0xc0, 0x5d, 0x01, 0xa7, 0xfe, 0x03, 0x17, 0x03, 0x66, | ||
6112 | 0x8a, 0x10, 0x66, 0x5e, 0x32, 0x01, 0x08, 0x17, 0x73, 0x01, 0xfe, 0x56, | ||
6113 | 0x19, 0x05, 0x73, 0x01, 0x08, 0x2a, 0x3c, 0x16, 0x3d, 0x27, 0x25, 0xbd, | ||
6114 | 0x09, 0x07, 0x2b, 0x3d, 0x01, 0xfe, 0xbe, 0x16, 0xfe, 0x42, 0x58, 0xfe, | ||
6115 | 0xe8, 0x14, 0x01, 0xa6, 0x86, 0xfe, 0x4a, 0xf4, 0x0d, 0x1b, 0x3d, 0xfe, | ||
6116 | 0x4a, 0xf4, 0x07, 0xfe, 0x0e, 0x12, 0x01, 0x43, 0x09, 0x82, 0x4e, 0x05, | ||
6117 | 0x72, 0x03, 0x55, 0x8a, 0x10, 0x55, 0x5e, 0x32, 0x01, 0x08, 0x17, 0x73, | ||
6118 | 0x01, 0xfe, 0x84, 0x19, 0x05, 0x73, 0x01, 0x08, 0x2a, 0x3c, 0x16, 0x3d, | ||
6119 | 0x27, 0x25, 0xbd, 0x09, 0x12, 0x2b, 0x3d, 0x01, 0xfe, 0xe8, 0x17, 0x8b, | ||
6120 | 0xfe, 0xaa, 0x14, 0xfe, 0xb6, 0x14, 0x86, 0xa8, 0xb2, 0x0d, 0x1b, 0x3d, | ||
6121 | 0xb2, 0x07, 0xfe, 0x0e, 0x12, 0x01, 0x43, 0x09, 0x82, 0x4e, 0x05, 0x72, | ||
6122 | 0x03, 0x6f, 0x8a, 0x10, 0x6f, 0x5e, 0x32, 0x01, 0x08, 0x17, 0x73, 0x01, | ||
6123 | 0xfe, 0xc0, 0x19, 0x05, 0x73, 0x13, 0x07, 0x2f, 0xfe, 0xcc, 0x15, 0x17, | ||
6124 | 0xfe, 0xe2, 0x15, 0x5f, 0xcc, 0x01, 0x08, 0x26, 0x5f, 0x02, 0x8f, 0xfe, | ||
6125 | 0xde, 0x15, 0x2a, 0xfe, 0xde, 0x15, 0x16, 0xfe, 0xcc, 0x15, 0x5e, 0x32, | ||
6126 | 0x01, 0x08, 0xfe, 0xd5, 0x10, 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52, | ||
6127 | 0xad, 0x23, 0xfe, 0xff, 0x7f, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x02, | ||
6128 | 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52, 0xad, 0x23, 0x3f, 0xfe, 0x30, | ||
6129 | 0x56, 0xfe, 0x00, 0x5c, 0x02, 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52, | ||
6130 | 0xad, 0x02, 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52, 0xfe, 0x00, 0x5e, | ||
6131 | 0x02, 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52, 0xad, 0xfe, 0x0b, 0x58, | ||
6132 | 0x02, 0x0a, 0x66, 0x01, 0x5c, 0x0a, 0x55, 0x01, 0x5c, 0x0a, 0x6f, 0x01, | ||
6133 | 0x5c, 0x02, 0x01, 0xfe, 0x1e, 0x1f, 0x23, 0x1a, 0xff, 0x03, 0x00, 0x54, | ||
6134 | 0xfe, 0x00, 0xf4, 0x24, 0x52, 0x0f, 0xfe, 0x00, 0x7c, 0x04, 0xfe, 0x07, | ||
6135 | 0x7c, 0x3a, 0x0b, 0x0e, 0xfe, 0x00, 0x71, 0xfe, 0xf9, 0x18, 0xfe, 0x7a, | ||
6136 | 0x19, 0xfe, 0xfb, 0x19, 0xfe, 0x1a, 0xf7, 0x00, 0xfe, 0x1b, 0xf7, 0x00, | ||
6137 | 0x7a, 0x30, 0x10, 0x68, 0x22, 0x69, 0xd9, 0x6c, 0xda, 0x6d, 0x02, 0xfe, | ||
6138 | 0x62, 0x08, 0xfe, 0x82, 0x4a, 0xfe, 0xe1, 0x1a, 0xfe, 0x83, 0x5a, 0x77, | ||
6139 | 0x02, 0x01, 0xc6, 0xfe, 0x42, 0x48, 0x4f, 0x50, 0x45, 0x01, 0x08, 0x16, | ||
6140 | 0xfe, 0xe0, 0x17, 0x27, 0x25, 0xbe, 0x01, 0x08, 0x16, 0xfe, 0xe0, 0x17, | ||
6141 | 0x27, 0x25, 0xfe, 0xe8, 0x0a, 0xfe, 0xc1, 0x59, 0x03, 0x9a, 0x1e, 0xfe, | ||
6142 | 0xda, 0x12, 0x01, 0x38, 0x06, 0x12, 0xfe, 0xd0, 0x13, 0x26, 0x53, 0x12, | ||
6143 | 0x48, 0xfe, 0x08, 0x17, 0xd1, 0x12, 0x53, 0x12, 0xfe, 0x1e, 0x13, 0x2d, | ||
6144 | 0xb4, 0x7b, 0xfe, 0x26, 0x17, 0x4d, 0x13, 0x07, 0x1c, 0xb4, 0x90, 0x04, | ||
6145 | 0xfe, 0x78, 0x10, 0xff, 0x02, 0x83, 0x55, 0xf1, 0xff, 0x02, 0x83, 0x55, | ||
6146 | 0x53, 0x1d, 0xfe, 0x12, 0x13, 0xd6, 0xfe, 0x30, 0x00, 0xb0, 0xfe, 0x80, | ||
6147 | 0x17, 0x1c, 0x63, 0x13, 0x07, 0xfe, 0x56, 0x10, 0x53, 0x0d, 0xfe, 0x16, | ||
6148 | 0x13, 0xd6, 0xfe, 0x64, 0x00, 0xb0, 0xfe, 0x80, 0x17, 0x0a, 0xfe, 0x64, | ||
6149 | 0x00, 0x1c, 0x94, 0x13, 0x07, 0xfe, 0x28, 0x10, 0x53, 0x07, 0xfe, 0x60, | ||
6150 | 0x13, 0xd6, 0xfe, 0xc8, 0x00, 0xb0, 0xfe, 0x80, 0x17, 0x0a, 0xfe, 0xc8, | ||
6151 | 0x00, 0x1c, 0x95, 0x13, 0x07, 0x71, 0xd6, 0xfe, 0x90, 0x01, 0x48, 0xfe, | ||
6152 | 0x8c, 0x17, 0x45, 0xf3, 0xfe, 0x43, 0xf4, 0x96, 0xfe, 0x56, 0xf0, 0xfe, | ||
6153 | 0x9e, 0x17, 0xfe, 0x04, 0xf4, 0x58, 0xfe, 0x43, 0xf4, 0x94, 0xf6, 0x8b, | ||
6154 | 0x01, 0xfe, 0x24, 0x16, 0x23, 0x3f, 0xfc, 0xa8, 0x8c, 0x49, 0x48, 0xfe, | ||
6155 | 0xda, 0x17, 0x62, 0x49, 0xfe, 0x1c, 0x10, 0xa8, 0x8c, 0x80, 0x48, 0xfe, | ||
6156 | 0xda, 0x17, 0x62, 0x80, 0x71, 0x50, 0x26, 0xfe, 0x4d, 0xf4, 0x00, 0xf7, | ||
6157 | 0x45, 0x13, 0x07, 0xfe, 0xb4, 0x56, 0xfe, 0xc3, 0x58, 0x02, 0x50, 0x13, | ||
6158 | 0x0d, 0x02, 0x50, 0x3e, 0x78, 0x4f, 0x45, 0x01, 0x08, 0x16, 0xa9, 0x27, | ||
6159 | 0x25, 0xbe, 0xfe, 0x03, 0xea, 0xfe, 0x7e, 0x01, 0x01, 0x08, 0x16, 0xa9, | ||
6160 | 0x27, 0x25, 0xfe, 0xe9, 0x0a, 0x01, 0x08, 0x16, 0xa9, 0x27, 0x25, 0xfe, | ||
6161 | 0xe9, 0x0a, 0xfe, 0x05, 0xea, 0xfe, 0x7f, 0x01, 0x01, 0x08, 0x16, 0xa9, | ||
6162 | 0x27, 0x25, 0xfe, 0x69, 0x09, 0xfe, 0x02, 0xea, 0xfe, 0x80, 0x01, 0x01, | ||
6163 | 0x08, 0x16, 0xa9, 0x27, 0x25, 0xfe, 0xe8, 0x08, 0x47, 0xfe, 0x81, 0x01, | ||
6164 | 0x03, 0xb6, 0x1e, 0x83, 0x01, 0x38, 0x06, 0x24, 0x31, 0xa2, 0x78, 0xf2, | ||
6165 | 0x53, 0x07, 0x36, 0xfe, 0x34, 0xf4, 0x3f, 0xa1, 0x78, 0x03, 0x9a, 0x1e, | ||
6166 | 0x83, 0x01, 0x38, 0x06, 0x12, 0x31, 0xf0, 0x4f, 0x45, 0xfe, 0x90, 0x10, | ||
6167 | 0xfe, 0x40, 0x5a, 0x23, 0x3f, 0xfb, 0x8c, 0x49, 0x48, 0xfe, 0xaa, 0x18, | ||
6168 | 0x62, 0x49, 0x71, 0x8c, 0x80, 0x48, 0xfe, 0xaa, 0x18, 0x62, 0x80, 0xfe, | ||
6169 | 0xb4, 0x56, 0xfe, 0x40, 0x5d, 0x01, 0xc6, 0x01, 0xfe, 0xac, 0x1d, 0xfe, | ||
6170 | 0x02, 0x17, 0xfe, 0xc8, 0x45, 0xfe, 0x5a, 0xf0, 0xfe, 0xc0, 0x18, 0xfe, | ||
6171 | 0x43, 0x48, 0x2d, 0x93, 0x36, 0xfe, 0x34, 0xf4, 0xfe, 0x00, 0x11, 0xfe, | ||
6172 | 0x40, 0x10, 0x2d, 0xb4, 0x36, 0xfe, 0x34, 0xf4, 0x04, 0xfe, 0x34, 0x10, | ||
6173 | 0x2d, 0xfe, 0x0b, 0x00, 0x36, 0x46, 0x63, 0xfe, 0x28, 0x10, 0xfe, 0xc0, | ||
6174 | 0x49, 0xff, 0x02, 0x00, 0x54, 0xb2, 0xfe, 0x90, 0x01, 0x48, 0xfe, 0xfa, | ||
6175 | 0x18, 0x45, 0xfe, 0x1c, 0xf4, 0x3f, 0xf3, 0xfe, 0x40, 0xf4, 0x96, 0xfe, | ||
6176 | 0x56, 0xf0, 0xfe, 0x0c, 0x19, 0xfe, 0x04, 0xf4, 0x58, 0xfe, 0x40, 0xf4, | ||
6177 | 0x94, 0xf6, 0x3e, 0x2d, 0x93, 0x4e, 0xd0, 0x0d, 0x21, 0xfe, 0x7f, 0x01, | ||
6178 | 0xfe, 0xc8, 0x46, 0xfe, 0x24, 0x13, 0x8c, 0x00, 0x5d, 0x26, 0x21, 0xfe, | ||
6179 | 0x7e, 0x01, 0xfe, 0xc8, 0x45, 0xfe, 0x14, 0x13, 0x21, 0xfe, 0x80, 0x01, | ||
6180 | 0xfe, 0x48, 0x45, 0xfa, 0x21, 0xfe, 0x81, 0x01, 0xfe, 0xc8, 0x44, 0x4e, | ||
6181 | 0x26, 0x02, 0x13, 0x07, 0x02, 0x78, 0x45, 0x50, 0x13, 0x0d, 0x02, 0x14, | ||
6182 | 0x07, 0x01, 0x08, 0x17, 0xfe, 0x82, 0x19, 0x14, 0x0d, 0x01, 0x08, 0x17, | ||
6183 | 0xfe, 0x82, 0x19, 0x14, 0x1d, 0x01, 0x08, 0x17, 0xfe, 0x82, 0x19, 0x5f, | ||
6184 | 0xfe, 0x89, 0x49, 0x01, 0x08, 0x02, 0x14, 0x07, 0x01, 0x08, 0x17, 0xc1, | ||
6185 | 0x14, 0x1d, 0x01, 0x08, 0x17, 0xc1, 0x14, 0x07, 0x01, 0x08, 0x17, 0xc1, | ||
6186 | 0xfe, 0x89, 0x49, 0x01, 0x08, 0x17, 0xc1, 0x5f, 0xfe, 0x89, 0x4a, 0x01, | ||
6187 | 0x08, 0x02, 0x50, 0x02, 0x14, 0x07, 0x01, 0x08, 0x17, 0x74, 0x14, 0x7f, | ||
6188 | 0x01, 0x08, 0x17, 0x74, 0x14, 0x12, 0x01, 0x08, 0x17, 0x74, 0xfe, 0x89, | ||
6189 | 0x49, 0x01, 0x08, 0x17, 0x74, 0x14, 0x00, 0x01, 0x08, 0x17, 0x74, 0xfe, | ||
6190 | 0x89, 0x4a, 0x01, 0x08, 0x17, 0x74, 0xfe, 0x09, 0x49, 0x01, 0x08, 0x17, | ||
6191 | 0x74, 0x5f, 0xcc, 0x01, 0x08, 0x02, 0x21, 0xe4, 0x09, 0x07, 0xfe, 0x4c, | ||
6192 | 0x13, 0xc8, 0x20, 0xe4, 0xfe, 0x49, 0xf4, 0x00, 0x4d, 0x5f, 0xa1, 0x5e, | ||
6193 | 0xfe, 0x01, 0xec, 0xfe, 0x27, 0x01, 0xcc, 0xff, 0x02, 0x00, 0x10, 0x2f, | ||
6194 | 0xfe, 0x3e, 0x1a, 0x01, 0x43, 0x09, 0xfe, 0xe3, 0x00, 0xfe, 0x22, 0x13, | ||
6195 | 0x16, 0xfe, 0x64, 0x1a, 0x26, 0x20, 0x9e, 0x01, 0x41, 0x21, 0x9e, 0x09, | ||
6196 | 0x07, 0x5d, 0x01, 0x0c, 0x61, 0x07, 0x44, 0x02, 0x0a, 0x5a, 0x01, 0x18, | ||
6197 | 0xfe, 0x00, 0x40, 0xaa, 0x09, 0x1a, 0xfe, 0x12, 0x13, 0x0a, 0x9d, 0x01, | ||
6198 | 0x18, 0xaa, 0x0a, 0x67, 0x01, 0xa3, 0x02, 0x0a, 0x9d, 0x01, 0x18, 0xaa, | ||
6199 | 0xfe, 0x80, 0xe7, 0x1a, 0x09, 0x1a, 0x5d, 0xfe, 0x45, 0x58, 0x01, 0xfe, | ||
6200 | 0xb2, 0x16, 0xaa, 0x02, 0x0a, 0x5a, 0x01, 0x18, 0xaa, 0x0a, 0x67, 0x01, | ||
6201 | 0xa3, 0x02, 0x0a, 0x5a, 0x01, 0x18, 0x01, 0xfe, 0x7e, 0x1e, 0xfe, 0x80, | ||
6202 | 0x4c, 0xfe, 0x49, 0xe4, 0x1a, 0xfe, 0x12, 0x13, 0x0a, 0x9d, 0x01, 0x18, | ||
6203 | 0xfe, 0x80, 0x4c, 0x0a, 0x67, 0x01, 0x5c, 0x02, 0x1c, 0x1a, 0x87, 0x7c, | ||
6204 | 0xe5, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x24, 0x1c, 0xfe, 0x1d, | ||
6205 | 0xf7, 0x28, 0xb1, 0xfe, 0x04, 0x1b, 0x01, 0xfe, 0x2a, 0x1c, 0xfa, 0xb3, | ||
6206 | 0x28, 0x7c, 0xfe, 0x2c, 0x01, 0xfe, 0x2f, 0x19, 0x02, 0xc9, 0x2b, 0xfe, | ||
6207 | 0xf4, 0x1a, 0xfe, 0xfa, 0x10, 0x1c, 0x1a, 0x87, 0x03, 0xfe, 0x64, 0x01, | ||
6208 | 0xfe, 0x00, 0xf4, 0x24, 0xfe, 0x18, 0x58, 0x03, 0xfe, 0x66, 0x01, 0xfe, | ||
6209 | 0x19, 0x58, 0xb3, 0x24, 0x01, 0xfe, 0x0e, 0x1f, 0xfe, 0x30, 0xf4, 0x07, | ||
6210 | 0xfe, 0x3c, 0x50, 0x7c, 0xfe, 0x38, 0x00, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, | ||
6211 | 0xf7, 0x24, 0xb1, 0xfe, 0x50, 0x1b, 0xfe, 0xd4, 0x14, 0x31, 0x02, 0xc9, | ||
6212 | 0x2b, 0xfe, 0x26, 0x1b, 0xfe, 0xba, 0x10, 0x1c, 0x1a, 0x87, 0xfe, 0x83, | ||
6213 | 0x5a, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x1d, 0xf7, 0x54, 0xb1, | ||
6214 | 0xfe, 0x72, 0x1b, 0xfe, 0xb2, 0x14, 0xfc, 0xb3, 0x54, 0x7c, 0x12, 0xfe, | ||
6215 | 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00, 0x02, 0xc9, 0x2b, 0xfe, 0x66, 0x1b, | ||
6216 | 0xfe, 0x8a, 0x10, 0x1c, 0x1a, 0x87, 0x8b, 0x0f, 0xfe, 0x30, 0x90, 0x04, | ||
6217 | 0xfe, 0xb0, 0x93, 0x3a, 0x0b, 0xfe, 0x18, 0x58, 0xfe, 0x32, 0x90, 0x04, | ||
6218 | 0xfe, 0xb2, 0x93, 0x3a, 0x0b, 0xfe, 0x19, 0x58, 0x0e, 0xa8, 0xb3, 0x4a, | ||
6219 | 0x7c, 0x12, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0x4a, 0xb1, 0xfe, 0xc6, | ||
6220 | 0x1b, 0xfe, 0x5e, 0x14, 0x31, 0x02, 0xc9, 0x2b, 0xfe, 0x96, 0x1b, 0x5c, | ||
6221 | 0xfe, 0x02, 0xf6, 0x1a, 0x87, 0xfe, 0x18, 0xfe, 0x6a, 0xfe, 0x19, 0xfe, | ||
6222 | 0x6b, 0x01, 0xfe, 0x1e, 0x1f, 0xfe, 0x1d, 0xf7, 0x65, 0xb1, 0xfe, 0xee, | ||
6223 | 0x1b, 0xfe, 0x36, 0x14, 0xfe, 0x1c, 0x13, 0xb3, 0x65, 0x3e, 0xfe, 0x83, | ||
6224 | 0x58, 0xfe, 0xaf, 0x19, 0xfe, 0x80, 0xe7, 0x1a, 0xfe, 0x81, 0xe7, 0x1a, | ||
6225 | 0x15, 0xfe, 0xdd, 0x00, 0x7a, 0x30, 0x02, 0x7a, 0x30, 0xfe, 0x12, 0x45, | ||
6226 | 0x2b, 0xfe, 0xdc, 0x1b, 0x1f, 0x07, 0x47, 0xb5, 0xc3, 0x05, 0x35, 0xfe, | ||
6227 | 0x39, 0xf0, 0x75, 0x26, 0x02, 0xfe, 0x7e, 0x18, 0x23, 0x1d, 0x36, 0x13, | ||
6228 | 0x11, 0x02, 0x87, 0x03, 0xe3, 0x23, 0x07, 0xfe, 0xef, 0x12, 0xfe, 0xe1, | ||
6229 | 0x10, 0x90, 0x34, 0x60, 0xfe, 0x02, 0x80, 0x09, 0x56, 0xfe, 0x3c, 0x13, | ||
6230 | 0xfe, 0x82, 0x14, 0xfe, 0x42, 0x13, 0x51, 0xfe, 0x06, 0x83, 0x0a, 0x5a, | ||
6231 | 0x01, 0x18, 0xcb, 0xfe, 0x3e, 0x12, 0xfe, 0x41, 0x48, 0xfe, 0x45, 0x48, | ||
6232 | 0x01, 0xfe, 0xb2, 0x16, 0xfe, 0x00, 0xcc, 0xcb, 0xfe, 0xf3, 0x13, 0x3f, | ||
6233 | 0x89, 0x09, 0x1a, 0xa5, 0x0a, 0x9d, 0x01, 0x18, 0xfe, 0x80, 0x4c, 0x01, | ||
6234 | 0x85, 0xfe, 0x16, 0x10, 0x09, 0x9b, 0x4e, 0xfe, 0x40, 0x14, 0xfe, 0x24, | ||
6235 | 0x12, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0x52, 0x1c, 0x1c, 0x0d, | ||
6236 | 0x02, 0xfe, 0x9c, 0xe7, 0x0d, 0x19, 0xfe, 0x15, 0x00, 0x40, 0x8d, 0x30, | ||
6237 | 0x01, 0xf4, 0x1c, 0x07, 0x02, 0x51, 0xfe, 0x06, 0x83, 0xfe, 0x18, 0x80, | ||
6238 | 0x61, 0x28, 0x44, 0x15, 0x56, 0x01, 0x85, 0x1c, 0x07, 0x02, 0xfe, 0x38, | ||
6239 | 0x90, 0xfe, 0xba, 0x90, 0x91, 0xde, 0x7e, 0xdf, 0xfe, 0x48, 0x55, 0x31, | ||
6240 | 0xfe, 0xc9, 0x55, 0x02, 0x21, 0xb9, 0x88, 0x20, 0xb9, 0x02, 0x0a, 0xba, | ||
6241 | 0x01, 0x18, 0xfe, 0x41, 0x48, 0x0a, 0x57, 0x01, 0x18, 0xfe, 0x49, 0x44, | ||
6242 | 0x1b, 0xfe, 0x1e, 0x1d, 0x88, 0x89, 0x02, 0x0a, 0x5a, 0x01, 0x18, 0x09, | ||
6243 | 0x1a, 0xa4, 0x0a, 0x67, 0x01, 0xa3, 0x0a, 0x57, 0x01, 0x18, 0x88, 0x89, | ||
6244 | 0x02, 0xfe, 0x4e, 0xe4, 0x1d, 0x7b, 0xfe, 0x52, 0x1d, 0x03, 0xfe, 0x90, | ||
6245 | 0x00, 0xfe, 0x3a, 0x45, 0xfe, 0x2c, 0x10, 0xfe, 0x4e, 0xe4, 0xdd, 0x7b, | ||
6246 | 0xfe, 0x64, 0x1d, 0x03, 0xfe, 0x92, 0x00, 0xd1, 0x12, 0xfe, 0x1a, 0x10, | ||
6247 | 0xfe, 0x4e, 0xe4, 0xfe, 0x0b, 0x00, 0x7b, 0xfe, 0x76, 0x1d, 0x03, 0xfe, | ||
6248 | 0x94, 0x00, 0xd1, 0x24, 0xfe, 0x08, 0x10, 0x03, 0xfe, 0x96, 0x00, 0xd1, | ||
6249 | 0x63, 0xfe, 0x4e, 0x45, 0x83, 0xca, 0xff, 0x04, 0x68, 0x54, 0xfe, 0xf1, | ||
6250 | 0x10, 0x23, 0x49, 0xfe, 0x08, 0x1c, 0xfe, 0x67, 0x19, 0xfe, 0x0a, 0x1c, | ||
6251 | 0xfe, 0x1a, 0xf4, 0xfe, 0x00, 0x04, 0x83, 0xb2, 0x1d, 0x48, 0xfe, 0xaa, | ||
6252 | 0x1d, 0x13, 0x1d, 0x02, 0x09, 0x92, 0xfe, 0x5a, 0xf0, 0xfe, 0xba, 0x1d, | ||
6253 | 0x2e, 0x93, 0xfe, 0x34, 0x10, 0x09, 0x12, 0xfe, 0x5a, 0xf0, 0xfe, 0xc8, | ||
6254 | 0x1d, 0x2e, 0xb4, 0xfe, 0x26, 0x10, 0x09, 0x1d, 0x36, 0x2e, 0x63, 0xfe, | ||
6255 | 0x1a, 0x10, 0x09, 0x0d, 0x36, 0x2e, 0x94, 0xf2, 0x09, 0x07, 0x36, 0x2e, | ||
6256 | 0x95, 0xa1, 0xc8, 0x02, 0x1f, 0x93, 0x01, 0x42, 0xfe, 0x04, 0xfe, 0x99, | ||
6257 | 0x03, 0x9c, 0x8b, 0x02, 0x2a, 0xfe, 0x1c, 0x1e, 0xfe, 0x14, 0xf0, 0x08, | ||
6258 | 0x2f, 0xfe, 0x0c, 0x1e, 0x2a, 0xfe, 0x1c, 0x1e, 0x8f, 0xfe, 0x1c, 0x1e, | ||
6259 | 0xfe, 0x82, 0xf0, 0xfe, 0x10, 0x1e, 0x02, 0x0f, 0x3f, 0x04, 0xfe, 0x80, | ||
6260 | 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x18, 0x80, 0x04, 0xfe, 0x98, | ||
6261 | 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x02, 0x80, 0x04, 0xfe, 0x82, | ||
6262 | 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x06, 0x80, 0x04, 0xfe, 0x86, | ||
6263 | 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x1b, 0x80, 0x04, 0xfe, 0x9b, | ||
6264 | 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x04, 0x80, 0x04, 0xfe, 0x84, | ||
6265 | 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x80, 0x80, 0x04, 0xfe, 0x80, | ||
6266 | 0x83, 0xfe, 0xc9, 0x47, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x19, 0x81, 0x04, | ||
6267 | 0xfe, 0x99, 0x83, 0xfe, 0xca, 0x47, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x06, | ||
6268 | 0x83, 0x04, 0xfe, 0x86, 0x83, 0xfe, 0xce, 0x47, 0x0b, 0x0e, 0x02, 0x0f, | ||
6269 | 0xfe, 0x2c, 0x90, 0x04, 0xfe, 0xac, 0x93, 0x3a, 0x0b, 0x0e, 0x02, 0x0f, | ||
6270 | 0xfe, 0xae, 0x90, 0x04, 0xfe, 0xae, 0x93, 0x79, 0x0b, 0x0e, 0x02, 0x0f, | ||
6271 | 0xfe, 0x08, 0x90, 0x04, 0xfe, 0x88, 0x93, 0x3a, 0x0b, 0x0e, 0x02, 0x0f, | ||
6272 | 0xfe, 0x8a, 0x90, 0x04, 0xfe, 0x8a, 0x93, 0x79, 0x0b, 0x0e, 0x02, 0x0f, | ||
6273 | 0xfe, 0x0c, 0x90, 0x04, 0xfe, 0x8c, 0x93, 0x3a, 0x0b, 0x0e, 0x02, 0x0f, | ||
6274 | 0xfe, 0x8e, 0x90, 0x04, 0xfe, 0x8e, 0x93, 0x79, 0x0b, 0x0e, 0x02, 0x0f, | ||
6275 | 0xfe, 0x3c, 0x90, 0x04, 0xfe, 0xbc, 0x93, 0x3a, 0x0b, 0x0e, 0x02, 0x8b, | ||
6276 | 0x0f, 0xfe, 0x03, 0x80, 0x04, 0xfe, 0x83, 0x83, 0x33, 0x0b, 0x77, 0x0e, | ||
6277 | 0xa8, 0x02, 0xff, 0x66, 0x00, 0x00, | ||
6278 | }; | ||
6279 | |||
6280 | static unsigned short _adv_asc38C1600_size = sizeof(_adv_asc38C1600_buf); /* 0x1673 */ | ||
6281 | static ADV_DCNT _adv_asc38C1600_chksum = 0x0604EF77UL; /* Expanded little-endian checksum. */ | ||
6282 | |||
6283 | static void AscInitQLinkVar(ASC_DVC_VAR *asc_dvc) | 4672 | static void AscInitQLinkVar(ASC_DVC_VAR *asc_dvc) |
6284 | { | 4673 | { |
6285 | PortAddr iop_base; | 4674 | PortAddr iop_base; |
@@ -6362,6 +4751,10 @@ static ushort AscInitMicroCodeVar(ASC_DVC_VAR *asc_dvc) | |||
6362 | 4751 | ||
6363 | static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc) | 4752 | static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc) |
6364 | { | 4753 | { |
4754 | const struct firmware *fw; | ||
4755 | const char fwname[] = "advansys/mcode.bin"; | ||
4756 | int err; | ||
4757 | unsigned long chksum; | ||
6365 | ushort warn_code; | 4758 | ushort warn_code; |
6366 | PortAddr iop_base; | 4759 | PortAddr iop_base; |
6367 | 4760 | ||
@@ -6383,12 +4776,29 @@ static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc) | |||
6383 | warn_code |= AscInitLram(asc_dvc); | 4776 | warn_code |= AscInitLram(asc_dvc); |
6384 | if (asc_dvc->err_code != 0) | 4777 | if (asc_dvc->err_code != 0) |
6385 | return UW_ERR; | 4778 | return UW_ERR; |
6386 | ASC_DBG(1, "_asc_mcode_chksum 0x%lx\n", (ulong)_asc_mcode_chksum); | 4779 | |
6387 | if (AscLoadMicroCode(iop_base, 0, _asc_mcode_buf, | 4780 | err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev); |
6388 | _asc_mcode_size) != _asc_mcode_chksum) { | 4781 | if (err) { |
4782 | printk(KERN_ERR "Failed to load image \"%s\" err %d\n", | ||
4783 | fwname, err); | ||
4784 | return err; | ||
4785 | } | ||
4786 | if (fw->size < 4) { | ||
4787 | printk(KERN_ERR "Bogus length %zu in image \"%s\"\n", | ||
4788 | fw->size, fwname); | ||
4789 | release_firmware(fw); | ||
4790 | return -EINVAL; | ||
4791 | } | ||
4792 | chksum = (fw->data[3] << 24) | (fw->data[2] << 16) | | ||
4793 | (fw->data[1] << 8) | fw->data[0]; | ||
4794 | ASC_DBG(1, "_asc_mcode_chksum 0x%lx\n", (ulong)chksum); | ||
4795 | if (AscLoadMicroCode(iop_base, 0, &fw->data[4], | ||
4796 | fw->size - 4) != chksum) { | ||
6389 | asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM; | 4797 | asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM; |
4798 | release_firmware(fw); | ||
6390 | return warn_code; | 4799 | return warn_code; |
6391 | } | 4800 | } |
4801 | release_firmware(fw); | ||
6392 | warn_code |= AscInitMicroCodeVar(asc_dvc); | 4802 | warn_code |= AscInitMicroCodeVar(asc_dvc); |
6393 | asc_dvc->init_state |= ASC_INIT_STATE_END_LOAD_MC; | 4803 | asc_dvc->init_state |= ASC_INIT_STATE_END_LOAD_MC; |
6394 | AscEnableInterrupt(iop_base); | 4804 | AscEnableInterrupt(iop_base); |
@@ -6417,8 +4827,8 @@ static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc) | |||
6417 | * | 4827 | * |
6418 | * Returns 0 or an error if the checksum doesn't match | 4828 | * Returns 0 or an error if the checksum doesn't match |
6419 | */ | 4829 | */ |
6420 | static int AdvLoadMicrocode(AdvPortAddr iop_base, unsigned char *buf, int size, | 4830 | static int AdvLoadMicrocode(AdvPortAddr iop_base, const unsigned char *buf, |
6421 | int memsize, int chksum) | 4831 | int size, int memsize, int chksum) |
6422 | { | 4832 | { |
6423 | int i, j, end, len = 0; | 4833 | int i, j, end, len = 0; |
6424 | ADV_DCNT sum; | 4834 | ADV_DCNT sum; |
@@ -6627,6 +5037,8 @@ static int AdvResetSB(ADV_DVC_VAR *asc_dvc) | |||
6627 | */ | 5037 | */ |
6628 | static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc) | 5038 | static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc) |
6629 | { | 5039 | { |
5040 | const struct firmware *fw; | ||
5041 | const char fwname[] = "advansys/3550.bin"; | ||
6630 | AdvPortAddr iop_base; | 5042 | AdvPortAddr iop_base; |
6631 | ushort warn_code; | 5043 | ushort warn_code; |
6632 | int begin_addr; | 5044 | int begin_addr; |
@@ -6634,6 +5046,8 @@ static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc) | |||
6634 | ushort code_sum; | 5046 | ushort code_sum; |
6635 | int word; | 5047 | int word; |
6636 | int i; | 5048 | int i; |
5049 | int err; | ||
5050 | unsigned long chksum; | ||
6637 | ushort scsi_cfg1; | 5051 | ushort scsi_cfg1; |
6638 | uchar tid; | 5052 | uchar tid; |
6639 | ushort bios_mem[ASC_MC_BIOSLEN / 2]; /* BIOS RISC Memory 0x40-0x8F. */ | 5053 | ushort bios_mem[ASC_MC_BIOSLEN / 2]; /* BIOS RISC Memory 0x40-0x8F. */ |
@@ -6692,9 +5106,24 @@ static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc) | |||
6692 | max_cmd[tid]); | 5106 | max_cmd[tid]); |
6693 | } | 5107 | } |
6694 | 5108 | ||
6695 | asc_dvc->err_code = AdvLoadMicrocode(iop_base, _adv_asc3550_buf, | 5109 | err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev); |
6696 | _adv_asc3550_size, ADV_3550_MEMSIZE, | 5110 | if (err) { |
6697 | _adv_asc3550_chksum); | 5111 | printk(KERN_ERR "Failed to load image \"%s\" err %d\n", |
5112 | fwname, err); | ||
5113 | return err; | ||
5114 | } | ||
5115 | if (fw->size < 4) { | ||
5116 | printk(KERN_ERR "Bogus length %zu in image \"%s\"\n", | ||
5117 | fw->size, fwname); | ||
5118 | release_firmware(fw); | ||
5119 | return -EINVAL; | ||
5120 | } | ||
5121 | chksum = (fw->data[3] << 24) | (fw->data[2] << 16) | | ||
5122 | (fw->data[1] << 8) | fw->data[0]; | ||
5123 | asc_dvc->err_code = AdvLoadMicrocode(iop_base, &fw->data[4], | ||
5124 | fw->size - 4, ADV_3550_MEMSIZE, | ||
5125 | chksum); | ||
5126 | release_firmware(fw); | ||
6698 | if (asc_dvc->err_code) | 5127 | if (asc_dvc->err_code) |
6699 | return ADV_ERROR; | 5128 | return ADV_ERROR; |
6700 | 5129 | ||
@@ -7065,6 +5494,8 @@ static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc) | |||
7065 | */ | 5494 | */ |
7066 | static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc) | 5495 | static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc) |
7067 | { | 5496 | { |
5497 | const struct firmware *fw; | ||
5498 | const char fwname[] = "advansys/38C0800.bin"; | ||
7068 | AdvPortAddr iop_base; | 5499 | AdvPortAddr iop_base; |
7069 | ushort warn_code; | 5500 | ushort warn_code; |
7070 | int begin_addr; | 5501 | int begin_addr; |
@@ -7072,6 +5503,8 @@ static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc) | |||
7072 | ushort code_sum; | 5503 | ushort code_sum; |
7073 | int word; | 5504 | int word; |
7074 | int i; | 5505 | int i; |
5506 | int err; | ||
5507 | unsigned long chksum; | ||
7075 | ushort scsi_cfg1; | 5508 | ushort scsi_cfg1; |
7076 | uchar byte; | 5509 | uchar byte; |
7077 | uchar tid; | 5510 | uchar tid; |
@@ -7187,9 +5620,24 @@ static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc) | |||
7187 | /* We need to reset back to normal mode after LRAM test passes. */ | 5620 | /* We need to reset back to normal mode after LRAM test passes. */ |
7188 | AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE); | 5621 | AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE); |
7189 | 5622 | ||
7190 | asc_dvc->err_code = AdvLoadMicrocode(iop_base, _adv_asc38C0800_buf, | 5623 | err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev); |
7191 | _adv_asc38C0800_size, ADV_38C0800_MEMSIZE, | 5624 | if (err) { |
7192 | _adv_asc38C0800_chksum); | 5625 | printk(KERN_ERR "Failed to load image \"%s\" err %d\n", |
5626 | fwname, err); | ||
5627 | return err; | ||
5628 | } | ||
5629 | if (fw->size < 4) { | ||
5630 | printk(KERN_ERR "Bogus length %zu in image \"%s\"\n", | ||
5631 | fw->size, fwname); | ||
5632 | release_firmware(fw); | ||
5633 | return -EINVAL; | ||
5634 | } | ||
5635 | chksum = (fw->data[3] << 24) | (fw->data[2] << 16) | | ||
5636 | (fw->data[1] << 8) | fw->data[0]; | ||
5637 | asc_dvc->err_code = AdvLoadMicrocode(iop_base, &fw->data[4], | ||
5638 | fw->size - 4, ADV_38C0800_MEMSIZE, | ||
5639 | chksum); | ||
5640 | release_firmware(fw); | ||
7193 | if (asc_dvc->err_code) | 5641 | if (asc_dvc->err_code) |
7194 | return ADV_ERROR; | 5642 | return ADV_ERROR; |
7195 | 5643 | ||
@@ -7544,6 +5992,8 @@ static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc) | |||
7544 | */ | 5992 | */ |
7545 | static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc) | 5993 | static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc) |
7546 | { | 5994 | { |
5995 | const struct firmware *fw; | ||
5996 | const char fwname[] = "advansys/38C1600.bin"; | ||
7547 | AdvPortAddr iop_base; | 5997 | AdvPortAddr iop_base; |
7548 | ushort warn_code; | 5998 | ushort warn_code; |
7549 | int begin_addr; | 5999 | int begin_addr; |
@@ -7551,6 +6001,8 @@ static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc) | |||
7551 | ushort code_sum; | 6001 | ushort code_sum; |
7552 | long word; | 6002 | long word; |
7553 | int i; | 6003 | int i; |
6004 | int err; | ||
6005 | unsigned long chksum; | ||
7554 | ushort scsi_cfg1; | 6006 | ushort scsi_cfg1; |
7555 | uchar byte; | 6007 | uchar byte; |
7556 | uchar tid; | 6008 | uchar tid; |
@@ -7668,9 +6120,24 @@ static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc) | |||
7668 | /* We need to reset back to normal mode after LRAM test passes. */ | 6120 | /* We need to reset back to normal mode after LRAM test passes. */ |
7669 | AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE); | 6121 | AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE); |
7670 | 6122 | ||
7671 | asc_dvc->err_code = AdvLoadMicrocode(iop_base, _adv_asc38C1600_buf, | 6123 | err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev); |
7672 | _adv_asc38C1600_size, ADV_38C1600_MEMSIZE, | 6124 | if (err) { |
7673 | _adv_asc38C1600_chksum); | 6125 | printk(KERN_ERR "Failed to load image \"%s\" err %d\n", |
6126 | fwname, err); | ||
6127 | return err; | ||
6128 | } | ||
6129 | if (fw->size < 4) { | ||
6130 | printk(KERN_ERR "Bogus length %zu in image \"%s\"\n", | ||
6131 | fw->size, fwname); | ||
6132 | release_firmware(fw); | ||
6133 | return -EINVAL; | ||
6134 | } | ||
6135 | chksum = (fw->data[3] << 24) | (fw->data[2] << 16) | | ||
6136 | (fw->data[1] << 8) | fw->data[0]; | ||
6137 | asc_dvc->err_code = AdvLoadMicrocode(iop_base, &fw->data[4], | ||
6138 | fw->size - 4, ADV_38C1600_MEMSIZE, | ||
6139 | chksum); | ||
6140 | release_firmware(fw); | ||
7674 | if (asc_dvc->err_code) | 6141 | if (asc_dvc->err_code) |
7675 | return ADV_ERROR; | 6142 | return ADV_ERROR; |
7676 | 6143 | ||
@@ -14353,3 +12820,7 @@ module_init(advansys_init); | |||
14353 | module_exit(advansys_exit); | 12820 | module_exit(advansys_exit); |
14354 | 12821 | ||
14355 | MODULE_LICENSE("GPL"); | 12822 | MODULE_LICENSE("GPL"); |
12823 | MODULE_FIRMWARE("advansys/mcode.bin"); | ||
12824 | MODULE_FIRMWARE("advansys/3550.bin"); | ||
12825 | MODULE_FIRMWARE("advansys/38C0800.bin"); | ||
12826 | MODULE_FIRMWARE("advansys/38C1600.bin"); | ||
diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c index bdad54ec088c..63b521d615f2 100644 --- a/drivers/scsi/aic7xxx/aic79xx_core.c +++ b/drivers/scsi/aic7xxx/aic79xx_core.c | |||
@@ -1034,7 +1034,7 @@ ahd_intr(struct ahd_softc *ahd) | |||
1034 | } | 1034 | } |
1035 | 1035 | ||
1036 | /******************************** Private Inlines *****************************/ | 1036 | /******************************** Private Inlines *****************************/ |
1037 | static __inline void | 1037 | static inline void |
1038 | ahd_assert_atn(struct ahd_softc *ahd) | 1038 | ahd_assert_atn(struct ahd_softc *ahd) |
1039 | { | 1039 | { |
1040 | ahd_outb(ahd, SCSISIGO, ATNO); | 1040 | ahd_outb(ahd, SCSISIGO, ATNO); |
@@ -1069,7 +1069,7 @@ ahd_currently_packetized(struct ahd_softc *ahd) | |||
1069 | return (packetized); | 1069 | return (packetized); |
1070 | } | 1070 | } |
1071 | 1071 | ||
1072 | static __inline int | 1072 | static inline int |
1073 | ahd_set_active_fifo(struct ahd_softc *ahd) | 1073 | ahd_set_active_fifo(struct ahd_softc *ahd) |
1074 | { | 1074 | { |
1075 | u_int active_fifo; | 1075 | u_int active_fifo; |
@@ -1086,7 +1086,7 @@ ahd_set_active_fifo(struct ahd_softc *ahd) | |||
1086 | } | 1086 | } |
1087 | } | 1087 | } |
1088 | 1088 | ||
1089 | static __inline void | 1089 | static inline void |
1090 | ahd_unbusy_tcl(struct ahd_softc *ahd, u_int tcl) | 1090 | ahd_unbusy_tcl(struct ahd_softc *ahd, u_int tcl) |
1091 | { | 1091 | { |
1092 | ahd_busy_tcl(ahd, tcl, SCB_LIST_NULL); | 1092 | ahd_busy_tcl(ahd, tcl, SCB_LIST_NULL); |
@@ -1096,7 +1096,7 @@ ahd_unbusy_tcl(struct ahd_softc *ahd, u_int tcl) | |||
1096 | * Determine whether the sequencer reported a residual | 1096 | * Determine whether the sequencer reported a residual |
1097 | * for this SCB/transaction. | 1097 | * for this SCB/transaction. |
1098 | */ | 1098 | */ |
1099 | static __inline void | 1099 | static inline void |
1100 | ahd_update_residual(struct ahd_softc *ahd, struct scb *scb) | 1100 | ahd_update_residual(struct ahd_softc *ahd, struct scb *scb) |
1101 | { | 1101 | { |
1102 | uint32_t sgptr; | 1102 | uint32_t sgptr; |
@@ -1106,7 +1106,7 @@ ahd_update_residual(struct ahd_softc *ahd, struct scb *scb) | |||
1106 | ahd_calc_residual(ahd, scb); | 1106 | ahd_calc_residual(ahd, scb); |
1107 | } | 1107 | } |
1108 | 1108 | ||
1109 | static __inline void | 1109 | static inline void |
1110 | ahd_complete_scb(struct ahd_softc *ahd, struct scb *scb) | 1110 | ahd_complete_scb(struct ahd_softc *ahd, struct scb *scb) |
1111 | { | 1111 | { |
1112 | uint32_t sgptr; | 1112 | uint32_t sgptr; |
@@ -7987,7 +7987,7 @@ ahd_resume(struct ahd_softc *ahd) | |||
7987 | * scbid that should be restored once manipualtion | 7987 | * scbid that should be restored once manipualtion |
7988 | * of the TCL entry is complete. | 7988 | * of the TCL entry is complete. |
7989 | */ | 7989 | */ |
7990 | static __inline u_int | 7990 | static inline u_int |
7991 | ahd_index_busy_tcl(struct ahd_softc *ahd, u_int *saved_scbid, u_int tcl) | 7991 | ahd_index_busy_tcl(struct ahd_softc *ahd, u_int *saved_scbid, u_int tcl) |
7992 | { | 7992 | { |
7993 | /* | 7993 | /* |
diff --git a/drivers/scsi/aic7xxx/aic79xx_inline.h b/drivers/scsi/aic7xxx/aic79xx_inline.h index 5f12cf9d99d0..09335a3c8691 100644 --- a/drivers/scsi/aic7xxx/aic79xx_inline.h +++ b/drivers/scsi/aic7xxx/aic79xx_inline.h | |||
@@ -46,21 +46,20 @@ | |||
46 | #define _AIC79XX_INLINE_H_ | 46 | #define _AIC79XX_INLINE_H_ |
47 | 47 | ||
48 | /******************************** Debugging ***********************************/ | 48 | /******************************** Debugging ***********************************/ |
49 | static __inline char *ahd_name(struct ahd_softc *ahd); | 49 | static inline char *ahd_name(struct ahd_softc *ahd); |
50 | 50 | ||
51 | static __inline char * | 51 | static inline char *ahd_name(struct ahd_softc *ahd) |
52 | ahd_name(struct ahd_softc *ahd) | ||
53 | { | 52 | { |
54 | return (ahd->name); | 53 | return (ahd->name); |
55 | } | 54 | } |
56 | 55 | ||
57 | /************************ Sequencer Execution Control *************************/ | 56 | /************************ Sequencer Execution Control *************************/ |
58 | static __inline void ahd_known_modes(struct ahd_softc *ahd, | 57 | static inline void ahd_known_modes(struct ahd_softc *ahd, |
59 | ahd_mode src, ahd_mode dst); | 58 | ahd_mode src, ahd_mode dst); |
60 | static __inline ahd_mode_state ahd_build_mode_state(struct ahd_softc *ahd, | 59 | static inline ahd_mode_state ahd_build_mode_state(struct ahd_softc *ahd, |
61 | ahd_mode src, | 60 | ahd_mode src, |
62 | ahd_mode dst); | 61 | ahd_mode dst); |
63 | static __inline void ahd_extract_mode_state(struct ahd_softc *ahd, | 62 | static inline void ahd_extract_mode_state(struct ahd_softc *ahd, |
64 | ahd_mode_state state, | 63 | ahd_mode_state state, |
65 | ahd_mode *src, ahd_mode *dst); | 64 | ahd_mode *src, ahd_mode *dst); |
66 | 65 | ||
@@ -73,7 +72,7 @@ int ahd_is_paused(struct ahd_softc *ahd); | |||
73 | void ahd_pause(struct ahd_softc *ahd); | 72 | void ahd_pause(struct ahd_softc *ahd); |
74 | void ahd_unpause(struct ahd_softc *ahd); | 73 | void ahd_unpause(struct ahd_softc *ahd); |
75 | 74 | ||
76 | static __inline void | 75 | static inline void |
77 | ahd_known_modes(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst) | 76 | ahd_known_modes(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst) |
78 | { | 77 | { |
79 | ahd->src_mode = src; | 78 | ahd->src_mode = src; |
@@ -82,13 +81,13 @@ ahd_known_modes(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst) | |||
82 | ahd->saved_dst_mode = dst; | 81 | ahd->saved_dst_mode = dst; |
83 | } | 82 | } |
84 | 83 | ||
85 | static __inline ahd_mode_state | 84 | static inline ahd_mode_state |
86 | ahd_build_mode_state(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst) | 85 | ahd_build_mode_state(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst) |
87 | { | 86 | { |
88 | return ((src << SRC_MODE_SHIFT) | (dst << DST_MODE_SHIFT)); | 87 | return ((src << SRC_MODE_SHIFT) | (dst << DST_MODE_SHIFT)); |
89 | } | 88 | } |
90 | 89 | ||
91 | static __inline void | 90 | static inline void |
92 | ahd_extract_mode_state(struct ahd_softc *ahd, ahd_mode_state state, | 91 | ahd_extract_mode_state(struct ahd_softc *ahd, ahd_mode_state state, |
93 | ahd_mode *src, ahd_mode *dst) | 92 | ahd_mode *src, ahd_mode *dst) |
94 | { | 93 | { |
@@ -102,13 +101,12 @@ void *ahd_sg_setup(struct ahd_softc *ahd, struct scb *scb, | |||
102 | bus_size_t len, int last); | 101 | bus_size_t len, int last); |
103 | 102 | ||
104 | /************************** Memory mapping routines ***************************/ | 103 | /************************** Memory mapping routines ***************************/ |
105 | static __inline size_t ahd_sg_size(struct ahd_softc *ahd); | 104 | static inline size_t ahd_sg_size(struct ahd_softc *ahd); |
106 | 105 | ||
107 | void ahd_sync_sglist(struct ahd_softc *ahd, | 106 | void ahd_sync_sglist(struct ahd_softc *ahd, |
108 | struct scb *scb, int op); | 107 | struct scb *scb, int op); |
109 | 108 | ||
110 | static __inline size_t | 109 | static inline size_t ahd_sg_size(struct ahd_softc *ahd) |
111 | ahd_sg_size(struct ahd_softc *ahd) | ||
112 | { | 110 | { |
113 | if ((ahd->flags & AHD_64BIT_ADDRESSING) != 0) | 111 | if ((ahd->flags & AHD_64BIT_ADDRESSING) != 0) |
114 | return (sizeof(struct ahd_dma64_seg)); | 112 | return (sizeof(struct ahd_dma64_seg)); |
@@ -141,11 +139,9 @@ struct scb * | |||
141 | ahd_lookup_scb(struct ahd_softc *ahd, u_int tag); | 139 | ahd_lookup_scb(struct ahd_softc *ahd, u_int tag); |
142 | void ahd_queue_scb(struct ahd_softc *ahd, struct scb *scb); | 140 | void ahd_queue_scb(struct ahd_softc *ahd, struct scb *scb); |
143 | 141 | ||
144 | static __inline uint8_t * | 142 | static inline uint8_t *ahd_get_sense_buf(struct ahd_softc *ahd, |
145 | ahd_get_sense_buf(struct ahd_softc *ahd, | ||
146 | struct scb *scb); | 143 | struct scb *scb); |
147 | static __inline uint32_t | 144 | static inline uint32_t ahd_get_sense_bufaddr(struct ahd_softc *ahd, |
148 | ahd_get_sense_bufaddr(struct ahd_softc *ahd, | ||
149 | struct scb *scb); | 145 | struct scb *scb); |
150 | 146 | ||
151 | #if 0 /* unused */ | 147 | #if 0 /* unused */ |
@@ -158,13 +154,13 @@ do { \ | |||
158 | 154 | ||
159 | #endif | 155 | #endif |
160 | 156 | ||
161 | static __inline uint8_t * | 157 | static inline uint8_t * |
162 | ahd_get_sense_buf(struct ahd_softc *ahd, struct scb *scb) | 158 | ahd_get_sense_buf(struct ahd_softc *ahd, struct scb *scb) |
163 | { | 159 | { |
164 | return (scb->sense_data); | 160 | return (scb->sense_data); |
165 | } | 161 | } |
166 | 162 | ||
167 | static __inline uint32_t | 163 | static inline uint32_t |
168 | ahd_get_sense_bufaddr(struct ahd_softc *ahd, struct scb *scb) | 164 | ahd_get_sense_bufaddr(struct ahd_softc *ahd, struct scb *scb) |
169 | { | 165 | { |
170 | return (scb->sense_busaddr); | 166 | return (scb->sense_busaddr); |
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.h b/drivers/scsi/aic7xxx/aic79xx_osm.h index 8d6612c19922..55c1fe07969f 100644 --- a/drivers/scsi/aic7xxx/aic79xx_osm.h +++ b/drivers/scsi/aic7xxx/aic79xx_osm.h | |||
@@ -395,19 +395,19 @@ struct info_str { | |||
395 | }; | 395 | }; |
396 | 396 | ||
397 | /******************************** Locking *************************************/ | 397 | /******************************** Locking *************************************/ |
398 | static __inline void | 398 | static inline void |
399 | ahd_lockinit(struct ahd_softc *ahd) | 399 | ahd_lockinit(struct ahd_softc *ahd) |
400 | { | 400 | { |
401 | spin_lock_init(&ahd->platform_data->spin_lock); | 401 | spin_lock_init(&ahd->platform_data->spin_lock); |
402 | } | 402 | } |
403 | 403 | ||
404 | static __inline void | 404 | static inline void |
405 | ahd_lock(struct ahd_softc *ahd, unsigned long *flags) | 405 | ahd_lock(struct ahd_softc *ahd, unsigned long *flags) |
406 | { | 406 | { |
407 | spin_lock_irqsave(&ahd->platform_data->spin_lock, *flags); | 407 | spin_lock_irqsave(&ahd->platform_data->spin_lock, *flags); |
408 | } | 408 | } |
409 | 409 | ||
410 | static __inline void | 410 | static inline void |
411 | ahd_unlock(struct ahd_softc *ahd, unsigned long *flags) | 411 | ahd_unlock(struct ahd_softc *ahd, unsigned long *flags) |
412 | { | 412 | { |
413 | spin_unlock_irqrestore(&ahd->platform_data->spin_lock, *flags); | 413 | spin_unlock_irqrestore(&ahd->platform_data->spin_lock, *flags); |
@@ -490,29 +490,29 @@ void ahd_pci_write_config(ahd_dev_softc_t pci, | |||
490 | int reg, uint32_t value, | 490 | int reg, uint32_t value, |
491 | int width); | 491 | int width); |
492 | 492 | ||
493 | static __inline int ahd_get_pci_function(ahd_dev_softc_t); | 493 | static inline int ahd_get_pci_function(ahd_dev_softc_t); |
494 | static __inline int | 494 | static inline int |
495 | ahd_get_pci_function(ahd_dev_softc_t pci) | 495 | ahd_get_pci_function(ahd_dev_softc_t pci) |
496 | { | 496 | { |
497 | return (PCI_FUNC(pci->devfn)); | 497 | return (PCI_FUNC(pci->devfn)); |
498 | } | 498 | } |
499 | 499 | ||
500 | static __inline int ahd_get_pci_slot(ahd_dev_softc_t); | 500 | static inline int ahd_get_pci_slot(ahd_dev_softc_t); |
501 | static __inline int | 501 | static inline int |
502 | ahd_get_pci_slot(ahd_dev_softc_t pci) | 502 | ahd_get_pci_slot(ahd_dev_softc_t pci) |
503 | { | 503 | { |
504 | return (PCI_SLOT(pci->devfn)); | 504 | return (PCI_SLOT(pci->devfn)); |
505 | } | 505 | } |
506 | 506 | ||
507 | static __inline int ahd_get_pci_bus(ahd_dev_softc_t); | 507 | static inline int ahd_get_pci_bus(ahd_dev_softc_t); |
508 | static __inline int | 508 | static inline int |
509 | ahd_get_pci_bus(ahd_dev_softc_t pci) | 509 | ahd_get_pci_bus(ahd_dev_softc_t pci) |
510 | { | 510 | { |
511 | return (pci->bus->number); | 511 | return (pci->bus->number); |
512 | } | 512 | } |
513 | 513 | ||
514 | static __inline void ahd_flush_device_writes(struct ahd_softc *); | 514 | static inline void ahd_flush_device_writes(struct ahd_softc *); |
515 | static __inline void | 515 | static inline void |
516 | ahd_flush_device_writes(struct ahd_softc *ahd) | 516 | ahd_flush_device_writes(struct ahd_softc *ahd) |
517 | { | 517 | { |
518 | /* XXX Is this sufficient for all architectures??? */ | 518 | /* XXX Is this sufficient for all architectures??? */ |
@@ -524,81 +524,81 @@ int ahd_linux_proc_info(struct Scsi_Host *, char *, char **, | |||
524 | off_t, int, int); | 524 | off_t, int, int); |
525 | 525 | ||
526 | /*********************** Transaction Access Wrappers **************************/ | 526 | /*********************** Transaction Access Wrappers **************************/ |
527 | static __inline void ahd_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t); | 527 | static inline void ahd_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t); |
528 | static __inline void ahd_set_transaction_status(struct scb *, uint32_t); | 528 | static inline void ahd_set_transaction_status(struct scb *, uint32_t); |
529 | static __inline void ahd_cmd_set_scsi_status(struct scsi_cmnd *, uint32_t); | 529 | static inline void ahd_cmd_set_scsi_status(struct scsi_cmnd *, uint32_t); |
530 | static __inline void ahd_set_scsi_status(struct scb *, uint32_t); | 530 | static inline void ahd_set_scsi_status(struct scb *, uint32_t); |
531 | static __inline uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd); | 531 | static inline uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd); |
532 | static __inline uint32_t ahd_get_transaction_status(struct scb *); | 532 | static inline uint32_t ahd_get_transaction_status(struct scb *); |
533 | static __inline uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd); | 533 | static inline uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd); |
534 | static __inline uint32_t ahd_get_scsi_status(struct scb *); | 534 | static inline uint32_t ahd_get_scsi_status(struct scb *); |
535 | static __inline void ahd_set_transaction_tag(struct scb *, int, u_int); | 535 | static inline void ahd_set_transaction_tag(struct scb *, int, u_int); |
536 | static __inline u_long ahd_get_transfer_length(struct scb *); | 536 | static inline u_long ahd_get_transfer_length(struct scb *); |
537 | static __inline int ahd_get_transfer_dir(struct scb *); | 537 | static inline int ahd_get_transfer_dir(struct scb *); |
538 | static __inline void ahd_set_residual(struct scb *, u_long); | 538 | static inline void ahd_set_residual(struct scb *, u_long); |
539 | static __inline void ahd_set_sense_residual(struct scb *scb, u_long resid); | 539 | static inline void ahd_set_sense_residual(struct scb *scb, u_long resid); |
540 | static __inline u_long ahd_get_residual(struct scb *); | 540 | static inline u_long ahd_get_residual(struct scb *); |
541 | static __inline u_long ahd_get_sense_residual(struct scb *); | 541 | static inline u_long ahd_get_sense_residual(struct scb *); |
542 | static __inline int ahd_perform_autosense(struct scb *); | 542 | static inline int ahd_perform_autosense(struct scb *); |
543 | static __inline uint32_t ahd_get_sense_bufsize(struct ahd_softc *, | 543 | static inline uint32_t ahd_get_sense_bufsize(struct ahd_softc *, |
544 | struct scb *); | 544 | struct scb *); |
545 | static __inline void ahd_notify_xfer_settings_change(struct ahd_softc *, | 545 | static inline void ahd_notify_xfer_settings_change(struct ahd_softc *, |
546 | struct ahd_devinfo *); | 546 | struct ahd_devinfo *); |
547 | static __inline void ahd_platform_scb_free(struct ahd_softc *ahd, | 547 | static inline void ahd_platform_scb_free(struct ahd_softc *ahd, |
548 | struct scb *scb); | 548 | struct scb *scb); |
549 | static __inline void ahd_freeze_scb(struct scb *scb); | 549 | static inline void ahd_freeze_scb(struct scb *scb); |
550 | 550 | ||
551 | static __inline | 551 | static inline |
552 | void ahd_cmd_set_transaction_status(struct scsi_cmnd *cmd, uint32_t status) | 552 | void ahd_cmd_set_transaction_status(struct scsi_cmnd *cmd, uint32_t status) |
553 | { | 553 | { |
554 | cmd->result &= ~(CAM_STATUS_MASK << 16); | 554 | cmd->result &= ~(CAM_STATUS_MASK << 16); |
555 | cmd->result |= status << 16; | 555 | cmd->result |= status << 16; |
556 | } | 556 | } |
557 | 557 | ||
558 | static __inline | 558 | static inline |
559 | void ahd_set_transaction_status(struct scb *scb, uint32_t status) | 559 | void ahd_set_transaction_status(struct scb *scb, uint32_t status) |
560 | { | 560 | { |
561 | ahd_cmd_set_transaction_status(scb->io_ctx,status); | 561 | ahd_cmd_set_transaction_status(scb->io_ctx,status); |
562 | } | 562 | } |
563 | 563 | ||
564 | static __inline | 564 | static inline |
565 | void ahd_cmd_set_scsi_status(struct scsi_cmnd *cmd, uint32_t status) | 565 | void ahd_cmd_set_scsi_status(struct scsi_cmnd *cmd, uint32_t status) |
566 | { | 566 | { |
567 | cmd->result &= ~0xFFFF; | 567 | cmd->result &= ~0xFFFF; |
568 | cmd->result |= status; | 568 | cmd->result |= status; |
569 | } | 569 | } |
570 | 570 | ||
571 | static __inline | 571 | static inline |
572 | void ahd_set_scsi_status(struct scb *scb, uint32_t status) | 572 | void ahd_set_scsi_status(struct scb *scb, uint32_t status) |
573 | { | 573 | { |
574 | ahd_cmd_set_scsi_status(scb->io_ctx, status); | 574 | ahd_cmd_set_scsi_status(scb->io_ctx, status); |
575 | } | 575 | } |
576 | 576 | ||
577 | static __inline | 577 | static inline |
578 | uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd) | 578 | uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd) |
579 | { | 579 | { |
580 | return ((cmd->result >> 16) & CAM_STATUS_MASK); | 580 | return ((cmd->result >> 16) & CAM_STATUS_MASK); |
581 | } | 581 | } |
582 | 582 | ||
583 | static __inline | 583 | static inline |
584 | uint32_t ahd_get_transaction_status(struct scb *scb) | 584 | uint32_t ahd_get_transaction_status(struct scb *scb) |
585 | { | 585 | { |
586 | return (ahd_cmd_get_transaction_status(scb->io_ctx)); | 586 | return (ahd_cmd_get_transaction_status(scb->io_ctx)); |
587 | } | 587 | } |
588 | 588 | ||
589 | static __inline | 589 | static inline |
590 | uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd) | 590 | uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd) |
591 | { | 591 | { |
592 | return (cmd->result & 0xFFFF); | 592 | return (cmd->result & 0xFFFF); |
593 | } | 593 | } |
594 | 594 | ||
595 | static __inline | 595 | static inline |
596 | uint32_t ahd_get_scsi_status(struct scb *scb) | 596 | uint32_t ahd_get_scsi_status(struct scb *scb) |
597 | { | 597 | { |
598 | return (ahd_cmd_get_scsi_status(scb->io_ctx)); | 598 | return (ahd_cmd_get_scsi_status(scb->io_ctx)); |
599 | } | 599 | } |
600 | 600 | ||
601 | static __inline | 601 | static inline |
602 | void ahd_set_transaction_tag(struct scb *scb, int enabled, u_int type) | 602 | void ahd_set_transaction_tag(struct scb *scb, int enabled, u_int type) |
603 | { | 603 | { |
604 | /* | 604 | /* |
@@ -607,43 +607,43 @@ void ahd_set_transaction_tag(struct scb *scb, int enabled, u_int type) | |||
607 | */ | 607 | */ |
608 | } | 608 | } |
609 | 609 | ||
610 | static __inline | 610 | static inline |
611 | u_long ahd_get_transfer_length(struct scb *scb) | 611 | u_long ahd_get_transfer_length(struct scb *scb) |
612 | { | 612 | { |
613 | return (scb->platform_data->xfer_len); | 613 | return (scb->platform_data->xfer_len); |
614 | } | 614 | } |
615 | 615 | ||
616 | static __inline | 616 | static inline |
617 | int ahd_get_transfer_dir(struct scb *scb) | 617 | int ahd_get_transfer_dir(struct scb *scb) |
618 | { | 618 | { |
619 | return (scb->io_ctx->sc_data_direction); | 619 | return (scb->io_ctx->sc_data_direction); |
620 | } | 620 | } |
621 | 621 | ||
622 | static __inline | 622 | static inline |
623 | void ahd_set_residual(struct scb *scb, u_long resid) | 623 | void ahd_set_residual(struct scb *scb, u_long resid) |
624 | { | 624 | { |
625 | scsi_set_resid(scb->io_ctx, resid); | 625 | scsi_set_resid(scb->io_ctx, resid); |
626 | } | 626 | } |
627 | 627 | ||
628 | static __inline | 628 | static inline |
629 | void ahd_set_sense_residual(struct scb *scb, u_long resid) | 629 | void ahd_set_sense_residual(struct scb *scb, u_long resid) |
630 | { | 630 | { |
631 | scb->platform_data->sense_resid = resid; | 631 | scb->platform_data->sense_resid = resid; |
632 | } | 632 | } |
633 | 633 | ||
634 | static __inline | 634 | static inline |
635 | u_long ahd_get_residual(struct scb *scb) | 635 | u_long ahd_get_residual(struct scb *scb) |
636 | { | 636 | { |
637 | return scsi_get_resid(scb->io_ctx); | 637 | return scsi_get_resid(scb->io_ctx); |
638 | } | 638 | } |
639 | 639 | ||
640 | static __inline | 640 | static inline |
641 | u_long ahd_get_sense_residual(struct scb *scb) | 641 | u_long ahd_get_sense_residual(struct scb *scb) |
642 | { | 642 | { |
643 | return (scb->platform_data->sense_resid); | 643 | return (scb->platform_data->sense_resid); |
644 | } | 644 | } |
645 | 645 | ||
646 | static __inline | 646 | static inline |
647 | int ahd_perform_autosense(struct scb *scb) | 647 | int ahd_perform_autosense(struct scb *scb) |
648 | { | 648 | { |
649 | /* | 649 | /* |
@@ -654,20 +654,20 @@ int ahd_perform_autosense(struct scb *scb) | |||
654 | return (1); | 654 | return (1); |
655 | } | 655 | } |
656 | 656 | ||
657 | static __inline uint32_t | 657 | static inline uint32_t |
658 | ahd_get_sense_bufsize(struct ahd_softc *ahd, struct scb *scb) | 658 | ahd_get_sense_bufsize(struct ahd_softc *ahd, struct scb *scb) |
659 | { | 659 | { |
660 | return (sizeof(struct scsi_sense_data)); | 660 | return (sizeof(struct scsi_sense_data)); |
661 | } | 661 | } |
662 | 662 | ||
663 | static __inline void | 663 | static inline void |
664 | ahd_notify_xfer_settings_change(struct ahd_softc *ahd, | 664 | ahd_notify_xfer_settings_change(struct ahd_softc *ahd, |
665 | struct ahd_devinfo *devinfo) | 665 | struct ahd_devinfo *devinfo) |
666 | { | 666 | { |
667 | /* Nothing to do here for linux */ | 667 | /* Nothing to do here for linux */ |
668 | } | 668 | } |
669 | 669 | ||
670 | static __inline void | 670 | static inline void |
671 | ahd_platform_scb_free(struct ahd_softc *ahd, struct scb *scb) | 671 | ahd_platform_scb_free(struct ahd_softc *ahd, struct scb *scb) |
672 | { | 672 | { |
673 | ahd->flags &= ~AHD_RESOURCE_SHORTAGE; | 673 | ahd->flags &= ~AHD_RESOURCE_SHORTAGE; |
@@ -678,7 +678,7 @@ void ahd_platform_free(struct ahd_softc *ahd); | |||
678 | void ahd_platform_init(struct ahd_softc *ahd); | 678 | void ahd_platform_init(struct ahd_softc *ahd); |
679 | void ahd_platform_freeze_devq(struct ahd_softc *ahd, struct scb *scb); | 679 | void ahd_platform_freeze_devq(struct ahd_softc *ahd, struct scb *scb); |
680 | 680 | ||
681 | static __inline void | 681 | static inline void |
682 | ahd_freeze_scb(struct scb *scb) | 682 | ahd_freeze_scb(struct scb *scb) |
683 | { | 683 | { |
684 | if ((scb->io_ctx->result & (CAM_DEV_QFRZN << 16)) == 0) { | 684 | if ((scb->io_ctx->result & (CAM_DEV_QFRZN << 16)) == 0) { |
diff --git a/drivers/scsi/aic7xxx/aic79xx_pci.c b/drivers/scsi/aic7xxx/aic79xx_pci.c index a734d77e880e..90a04a37b4f7 100644 --- a/drivers/scsi/aic7xxx/aic79xx_pci.c +++ b/drivers/scsi/aic7xxx/aic79xx_pci.c | |||
@@ -51,7 +51,7 @@ | |||
51 | 51 | ||
52 | #include "aic79xx_pci.h" | 52 | #include "aic79xx_pci.h" |
53 | 53 | ||
54 | static __inline uint64_t | 54 | static inline uint64_t |
55 | ahd_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor) | 55 | ahd_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor) |
56 | { | 56 | { |
57 | uint64_t id; | 57 | uint64_t id; |
@@ -377,14 +377,12 @@ ahd_pci_config(struct ahd_softc *ahd, const struct ahd_pci_identity *entry) | |||
377 | error = ahd_init(ahd); | 377 | error = ahd_init(ahd); |
378 | if (error != 0) | 378 | if (error != 0) |
379 | return (error); | 379 | return (error); |
380 | ahd->init_level++; | ||
380 | 381 | ||
381 | /* | 382 | /* |
382 | * Allow interrupts now that we are completely setup. | 383 | * Allow interrupts now that we are completely setup. |
383 | */ | 384 | */ |
384 | error = ahd_pci_map_int(ahd); | 385 | return ahd_pci_map_int(ahd); |
385 | if (!error) | ||
386 | ahd->init_level++; | ||
387 | return error; | ||
388 | } | 386 | } |
389 | 387 | ||
390 | #ifdef CONFIG_PM | 388 | #ifdef CONFIG_PM |
diff --git a/drivers/scsi/aic7xxx/aic7xxx_inline.h b/drivers/scsi/aic7xxx/aic7xxx_inline.h index 09bf2f4d78d5..0b57b783ef41 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_inline.h +++ b/drivers/scsi/aic7xxx/aic7xxx_inline.h | |||
@@ -55,10 +55,9 @@ void ahc_sync_sglist(struct ahc_softc *ahc, | |||
55 | struct scb *scb, int op); | 55 | struct scb *scb, int op); |
56 | 56 | ||
57 | /******************************** Debugging ***********************************/ | 57 | /******************************** Debugging ***********************************/ |
58 | static __inline char *ahc_name(struct ahc_softc *ahc); | 58 | static inline char *ahc_name(struct ahc_softc *ahc); |
59 | 59 | ||
60 | static __inline char * | 60 | static inline char *ahc_name(struct ahc_softc *ahc) |
61 | ahc_name(struct ahc_softc *ahc) | ||
62 | { | 61 | { |
63 | return (ahc->name); | 62 | return (ahc->name); |
64 | } | 63 | } |
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.h b/drivers/scsi/aic7xxx/aic7xxx_osm.h index 3f7238db35e5..56f07e527b48 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_osm.h +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.h | |||
@@ -230,7 +230,7 @@ int ahc_dmamap_unload(struct ahc_softc *, bus_dma_tag_t, bus_dmamap_t); | |||
230 | #include "aic7xxx.h" | 230 | #include "aic7xxx.h" |
231 | 231 | ||
232 | /***************************** Timer Facilities *******************************/ | 232 | /***************************** Timer Facilities *******************************/ |
233 | static __inline void | 233 | static inline void |
234 | ahc_scb_timer_reset(struct scb *scb, u_int usec) | 234 | ahc_scb_timer_reset(struct scb *scb, u_int usec) |
235 | { | 235 | { |
236 | } | 236 | } |
@@ -401,19 +401,19 @@ struct info_str { | |||
401 | /******************************** Locking *************************************/ | 401 | /******************************** Locking *************************************/ |
402 | /* Lock protecting internal data structures */ | 402 | /* Lock protecting internal data structures */ |
403 | 403 | ||
404 | static __inline void | 404 | static inline void |
405 | ahc_lockinit(struct ahc_softc *ahc) | 405 | ahc_lockinit(struct ahc_softc *ahc) |
406 | { | 406 | { |
407 | spin_lock_init(&ahc->platform_data->spin_lock); | 407 | spin_lock_init(&ahc->platform_data->spin_lock); |
408 | } | 408 | } |
409 | 409 | ||
410 | static __inline void | 410 | static inline void |
411 | ahc_lock(struct ahc_softc *ahc, unsigned long *flags) | 411 | ahc_lock(struct ahc_softc *ahc, unsigned long *flags) |
412 | { | 412 | { |
413 | spin_lock_irqsave(&ahc->platform_data->spin_lock, *flags); | 413 | spin_lock_irqsave(&ahc->platform_data->spin_lock, *flags); |
414 | } | 414 | } |
415 | 415 | ||
416 | static __inline void | 416 | static inline void |
417 | ahc_unlock(struct ahc_softc *ahc, unsigned long *flags) | 417 | ahc_unlock(struct ahc_softc *ahc, unsigned long *flags) |
418 | { | 418 | { |
419 | spin_unlock_irqrestore(&ahc->platform_data->spin_lock, *flags); | 419 | spin_unlock_irqrestore(&ahc->platform_data->spin_lock, *flags); |
@@ -493,22 +493,22 @@ void ahc_pci_write_config(ahc_dev_softc_t pci, | |||
493 | int reg, uint32_t value, | 493 | int reg, uint32_t value, |
494 | int width); | 494 | int width); |
495 | 495 | ||
496 | static __inline int ahc_get_pci_function(ahc_dev_softc_t); | 496 | static inline int ahc_get_pci_function(ahc_dev_softc_t); |
497 | static __inline int | 497 | static inline int |
498 | ahc_get_pci_function(ahc_dev_softc_t pci) | 498 | ahc_get_pci_function(ahc_dev_softc_t pci) |
499 | { | 499 | { |
500 | return (PCI_FUNC(pci->devfn)); | 500 | return (PCI_FUNC(pci->devfn)); |
501 | } | 501 | } |
502 | 502 | ||
503 | static __inline int ahc_get_pci_slot(ahc_dev_softc_t); | 503 | static inline int ahc_get_pci_slot(ahc_dev_softc_t); |
504 | static __inline int | 504 | static inline int |
505 | ahc_get_pci_slot(ahc_dev_softc_t pci) | 505 | ahc_get_pci_slot(ahc_dev_softc_t pci) |
506 | { | 506 | { |
507 | return (PCI_SLOT(pci->devfn)); | 507 | return (PCI_SLOT(pci->devfn)); |
508 | } | 508 | } |
509 | 509 | ||
510 | static __inline int ahc_get_pci_bus(ahc_dev_softc_t); | 510 | static inline int ahc_get_pci_bus(ahc_dev_softc_t); |
511 | static __inline int | 511 | static inline int |
512 | ahc_get_pci_bus(ahc_dev_softc_t pci) | 512 | ahc_get_pci_bus(ahc_dev_softc_t pci) |
513 | { | 513 | { |
514 | return (pci->bus->number); | 514 | return (pci->bus->number); |
@@ -521,8 +521,8 @@ static inline void ahc_linux_pci_exit(void) { | |||
521 | } | 521 | } |
522 | #endif | 522 | #endif |
523 | 523 | ||
524 | static __inline void ahc_flush_device_writes(struct ahc_softc *); | 524 | static inline void ahc_flush_device_writes(struct ahc_softc *); |
525 | static __inline void | 525 | static inline void |
526 | ahc_flush_device_writes(struct ahc_softc *ahc) | 526 | ahc_flush_device_writes(struct ahc_softc *ahc) |
527 | { | 527 | { |
528 | /* XXX Is this sufficient for all architectures??? */ | 528 | /* XXX Is this sufficient for all architectures??? */ |
@@ -535,81 +535,81 @@ int ahc_linux_proc_info(struct Scsi_Host *, char *, char **, | |||
535 | 535 | ||
536 | /*************************** Domain Validation ********************************/ | 536 | /*************************** Domain Validation ********************************/ |
537 | /*********************** Transaction Access Wrappers *************************/ | 537 | /*********************** Transaction Access Wrappers *************************/ |
538 | static __inline void ahc_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t); | 538 | static inline void ahc_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t); |
539 | static __inline void ahc_set_transaction_status(struct scb *, uint32_t); | 539 | static inline void ahc_set_transaction_status(struct scb *, uint32_t); |
540 | static __inline void ahc_cmd_set_scsi_status(struct scsi_cmnd *, uint32_t); | 540 | static inline void ahc_cmd_set_scsi_status(struct scsi_cmnd *, uint32_t); |
541 | static __inline void ahc_set_scsi_status(struct scb *, uint32_t); | 541 | static inline void ahc_set_scsi_status(struct scb *, uint32_t); |
542 | static __inline uint32_t ahc_cmd_get_transaction_status(struct scsi_cmnd *cmd); | 542 | static inline uint32_t ahc_cmd_get_transaction_status(struct scsi_cmnd *cmd); |
543 | static __inline uint32_t ahc_get_transaction_status(struct scb *); | 543 | static inline uint32_t ahc_get_transaction_status(struct scb *); |
544 | static __inline uint32_t ahc_cmd_get_scsi_status(struct scsi_cmnd *cmd); | 544 | static inline uint32_t ahc_cmd_get_scsi_status(struct scsi_cmnd *cmd); |
545 | static __inline uint32_t ahc_get_scsi_status(struct scb *); | 545 | static inline uint32_t ahc_get_scsi_status(struct scb *); |
546 | static __inline void ahc_set_transaction_tag(struct scb *, int, u_int); | 546 | static inline void ahc_set_transaction_tag(struct scb *, int, u_int); |
547 | static __inline u_long ahc_get_transfer_length(struct scb *); | 547 | static inline u_long ahc_get_transfer_length(struct scb *); |
548 | static __inline int ahc_get_transfer_dir(struct scb *); | 548 | static inline int ahc_get_transfer_dir(struct scb *); |
549 | static __inline void ahc_set_residual(struct scb *, u_long); | 549 | static inline void ahc_set_residual(struct scb *, u_long); |
550 | static __inline void ahc_set_sense_residual(struct scb *scb, u_long resid); | 550 | static inline void ahc_set_sense_residual(struct scb *scb, u_long resid); |
551 | static __inline u_long ahc_get_residual(struct scb *); | 551 | static inline u_long ahc_get_residual(struct scb *); |
552 | static __inline u_long ahc_get_sense_residual(struct scb *); | 552 | static inline u_long ahc_get_sense_residual(struct scb *); |
553 | static __inline int ahc_perform_autosense(struct scb *); | 553 | static inline int ahc_perform_autosense(struct scb *); |
554 | static __inline uint32_t ahc_get_sense_bufsize(struct ahc_softc *, | 554 | static inline uint32_t ahc_get_sense_bufsize(struct ahc_softc *, |
555 | struct scb *); | 555 | struct scb *); |
556 | static __inline void ahc_notify_xfer_settings_change(struct ahc_softc *, | 556 | static inline void ahc_notify_xfer_settings_change(struct ahc_softc *, |
557 | struct ahc_devinfo *); | 557 | struct ahc_devinfo *); |
558 | static __inline void ahc_platform_scb_free(struct ahc_softc *ahc, | 558 | static inline void ahc_platform_scb_free(struct ahc_softc *ahc, |
559 | struct scb *scb); | 559 | struct scb *scb); |
560 | static __inline void ahc_freeze_scb(struct scb *scb); | 560 | static inline void ahc_freeze_scb(struct scb *scb); |
561 | 561 | ||
562 | static __inline | 562 | static inline |
563 | void ahc_cmd_set_transaction_status(struct scsi_cmnd *cmd, uint32_t status) | 563 | void ahc_cmd_set_transaction_status(struct scsi_cmnd *cmd, uint32_t status) |
564 | { | 564 | { |
565 | cmd->result &= ~(CAM_STATUS_MASK << 16); | 565 | cmd->result &= ~(CAM_STATUS_MASK << 16); |
566 | cmd->result |= status << 16; | 566 | cmd->result |= status << 16; |
567 | } | 567 | } |
568 | 568 | ||
569 | static __inline | 569 | static inline |
570 | void ahc_set_transaction_status(struct scb *scb, uint32_t status) | 570 | void ahc_set_transaction_status(struct scb *scb, uint32_t status) |
571 | { | 571 | { |
572 | ahc_cmd_set_transaction_status(scb->io_ctx,status); | 572 | ahc_cmd_set_transaction_status(scb->io_ctx,status); |
573 | } | 573 | } |
574 | 574 | ||
575 | static __inline | 575 | static inline |
576 | void ahc_cmd_set_scsi_status(struct scsi_cmnd *cmd, uint32_t status) | 576 | void ahc_cmd_set_scsi_status(struct scsi_cmnd *cmd, uint32_t status) |
577 | { | 577 | { |
578 | cmd->result &= ~0xFFFF; | 578 | cmd->result &= ~0xFFFF; |
579 | cmd->result |= status; | 579 | cmd->result |= status; |
580 | } | 580 | } |
581 | 581 | ||
582 | static __inline | 582 | static inline |
583 | void ahc_set_scsi_status(struct scb *scb, uint32_t status) | 583 | void ahc_set_scsi_status(struct scb *scb, uint32_t status) |
584 | { | 584 | { |
585 | ahc_cmd_set_scsi_status(scb->io_ctx, status); | 585 | ahc_cmd_set_scsi_status(scb->io_ctx, status); |
586 | } | 586 | } |
587 | 587 | ||
588 | static __inline | 588 | static inline |
589 | uint32_t ahc_cmd_get_transaction_status(struct scsi_cmnd *cmd) | 589 | uint32_t ahc_cmd_get_transaction_status(struct scsi_cmnd *cmd) |
590 | { | 590 | { |
591 | return ((cmd->result >> 16) & CAM_STATUS_MASK); | 591 | return ((cmd->result >> 16) & CAM_STATUS_MASK); |
592 | } | 592 | } |
593 | 593 | ||
594 | static __inline | 594 | static inline |
595 | uint32_t ahc_get_transaction_status(struct scb *scb) | 595 | uint32_t ahc_get_transaction_status(struct scb *scb) |
596 | { | 596 | { |
597 | return (ahc_cmd_get_transaction_status(scb->io_ctx)); | 597 | return (ahc_cmd_get_transaction_status(scb->io_ctx)); |
598 | } | 598 | } |
599 | 599 | ||
600 | static __inline | 600 | static inline |
601 | uint32_t ahc_cmd_get_scsi_status(struct scsi_cmnd *cmd) | 601 | uint32_t ahc_cmd_get_scsi_status(struct scsi_cmnd *cmd) |
602 | { | 602 | { |
603 | return (cmd->result & 0xFFFF); | 603 | return (cmd->result & 0xFFFF); |
604 | } | 604 | } |
605 | 605 | ||
606 | static __inline | 606 | static inline |
607 | uint32_t ahc_get_scsi_status(struct scb *scb) | 607 | uint32_t ahc_get_scsi_status(struct scb *scb) |
608 | { | 608 | { |
609 | return (ahc_cmd_get_scsi_status(scb->io_ctx)); | 609 | return (ahc_cmd_get_scsi_status(scb->io_ctx)); |
610 | } | 610 | } |
611 | 611 | ||
612 | static __inline | 612 | static inline |
613 | void ahc_set_transaction_tag(struct scb *scb, int enabled, u_int type) | 613 | void ahc_set_transaction_tag(struct scb *scb, int enabled, u_int type) |
614 | { | 614 | { |
615 | /* | 615 | /* |
@@ -618,43 +618,43 @@ void ahc_set_transaction_tag(struct scb *scb, int enabled, u_int type) | |||
618 | */ | 618 | */ |
619 | } | 619 | } |
620 | 620 | ||
621 | static __inline | 621 | static inline |
622 | u_long ahc_get_transfer_length(struct scb *scb) | 622 | u_long ahc_get_transfer_length(struct scb *scb) |
623 | { | 623 | { |
624 | return (scb->platform_data->xfer_len); | 624 | return (scb->platform_data->xfer_len); |
625 | } | 625 | } |
626 | 626 | ||
627 | static __inline | 627 | static inline |
628 | int ahc_get_transfer_dir(struct scb *scb) | 628 | int ahc_get_transfer_dir(struct scb *scb) |
629 | { | 629 | { |
630 | return (scb->io_ctx->sc_data_direction); | 630 | return (scb->io_ctx->sc_data_direction); |
631 | } | 631 | } |
632 | 632 | ||
633 | static __inline | 633 | static inline |
634 | void ahc_set_residual(struct scb *scb, u_long resid) | 634 | void ahc_set_residual(struct scb *scb, u_long resid) |
635 | { | 635 | { |
636 | scsi_set_resid(scb->io_ctx, resid); | 636 | scsi_set_resid(scb->io_ctx, resid); |
637 | } | 637 | } |
638 | 638 | ||
639 | static __inline | 639 | static inline |
640 | void ahc_set_sense_residual(struct scb *scb, u_long resid) | 640 | void ahc_set_sense_residual(struct scb *scb, u_long resid) |
641 | { | 641 | { |
642 | scb->platform_data->sense_resid = resid; | 642 | scb->platform_data->sense_resid = resid; |
643 | } | 643 | } |
644 | 644 | ||
645 | static __inline | 645 | static inline |
646 | u_long ahc_get_residual(struct scb *scb) | 646 | u_long ahc_get_residual(struct scb *scb) |
647 | { | 647 | { |
648 | return scsi_get_resid(scb->io_ctx); | 648 | return scsi_get_resid(scb->io_ctx); |
649 | } | 649 | } |
650 | 650 | ||
651 | static __inline | 651 | static inline |
652 | u_long ahc_get_sense_residual(struct scb *scb) | 652 | u_long ahc_get_sense_residual(struct scb *scb) |
653 | { | 653 | { |
654 | return (scb->platform_data->sense_resid); | 654 | return (scb->platform_data->sense_resid); |
655 | } | 655 | } |
656 | 656 | ||
657 | static __inline | 657 | static inline |
658 | int ahc_perform_autosense(struct scb *scb) | 658 | int ahc_perform_autosense(struct scb *scb) |
659 | { | 659 | { |
660 | /* | 660 | /* |
@@ -665,20 +665,20 @@ int ahc_perform_autosense(struct scb *scb) | |||
665 | return (1); | 665 | return (1); |
666 | } | 666 | } |
667 | 667 | ||
668 | static __inline uint32_t | 668 | static inline uint32_t |
669 | ahc_get_sense_bufsize(struct ahc_softc *ahc, struct scb *scb) | 669 | ahc_get_sense_bufsize(struct ahc_softc *ahc, struct scb *scb) |
670 | { | 670 | { |
671 | return (sizeof(struct scsi_sense_data)); | 671 | return (sizeof(struct scsi_sense_data)); |
672 | } | 672 | } |
673 | 673 | ||
674 | static __inline void | 674 | static inline void |
675 | ahc_notify_xfer_settings_change(struct ahc_softc *ahc, | 675 | ahc_notify_xfer_settings_change(struct ahc_softc *ahc, |
676 | struct ahc_devinfo *devinfo) | 676 | struct ahc_devinfo *devinfo) |
677 | { | 677 | { |
678 | /* Nothing to do here for linux */ | 678 | /* Nothing to do here for linux */ |
679 | } | 679 | } |
680 | 680 | ||
681 | static __inline void | 681 | static inline void |
682 | ahc_platform_scb_free(struct ahc_softc *ahc, struct scb *scb) | 682 | ahc_platform_scb_free(struct ahc_softc *ahc, struct scb *scb) |
683 | { | 683 | { |
684 | } | 684 | } |
@@ -687,7 +687,7 @@ int ahc_platform_alloc(struct ahc_softc *ahc, void *platform_arg); | |||
687 | void ahc_platform_free(struct ahc_softc *ahc); | 687 | void ahc_platform_free(struct ahc_softc *ahc); |
688 | void ahc_platform_freeze_devq(struct ahc_softc *ahc, struct scb *scb); | 688 | void ahc_platform_freeze_devq(struct ahc_softc *ahc, struct scb *scb); |
689 | 689 | ||
690 | static __inline void | 690 | static inline void |
691 | ahc_freeze_scb(struct scb *scb) | 691 | ahc_freeze_scb(struct scb *scb) |
692 | { | 692 | { |
693 | if ((scb->io_ctx->result & (CAM_DEV_QFRZN << 16)) == 0) { | 693 | if ((scb->io_ctx->result & (CAM_DEV_QFRZN << 16)) == 0) { |
diff --git a/drivers/scsi/aic7xxx/aic7xxx_pci.c b/drivers/scsi/aic7xxx/aic7xxx_pci.c index c07cb6eebb02..27014b9de126 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_pci.c +++ b/drivers/scsi/aic7xxx/aic7xxx_pci.c | |||
@@ -54,7 +54,7 @@ | |||
54 | 54 | ||
55 | #include "aic7xxx_pci.h" | 55 | #include "aic7xxx_pci.h" |
56 | 56 | ||
57 | static __inline uint64_t | 57 | static inline uint64_t |
58 | ahc_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor) | 58 | ahc_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor) |
59 | { | 59 | { |
60 | uint64_t id; | 60 | uint64_t id; |
@@ -960,16 +960,12 @@ ahc_pci_config(struct ahc_softc *ahc, const struct ahc_pci_identity *entry) | |||
960 | error = ahc_init(ahc); | 960 | error = ahc_init(ahc); |
961 | if (error != 0) | 961 | if (error != 0) |
962 | return (error); | 962 | return (error); |
963 | ahc->init_level++; | ||
963 | 964 | ||
964 | /* | 965 | /* |
965 | * Allow interrupts now that we are completely setup. | 966 | * Allow interrupts now that we are completely setup. |
966 | */ | 967 | */ |
967 | error = ahc_pci_map_int(ahc); | 968 | return ahc_pci_map_int(ahc); |
968 | if (error != 0) | ||
969 | return (error); | ||
970 | |||
971 | ahc->init_level++; | ||
972 | return (0); | ||
973 | } | 969 | } |
974 | 970 | ||
975 | /* | 971 | /* |
diff --git a/drivers/scsi/aic7xxx/aiclib.h b/drivers/scsi/aic7xxx/aiclib.h index 3bfbf0fe1ec2..f8fd198aafbc 100644 --- a/drivers/scsi/aic7xxx/aiclib.h +++ b/drivers/scsi/aic7xxx/aiclib.h | |||
@@ -133,7 +133,7 @@ struct scsi_sense_data | |||
133 | #define SCSI_STATUS_TASK_ABORTED 0x40 | 133 | #define SCSI_STATUS_TASK_ABORTED 0x40 |
134 | 134 | ||
135 | /************************* Large Disk Handling ********************************/ | 135 | /************************* Large Disk Handling ********************************/ |
136 | static __inline int | 136 | static inline int |
137 | aic_sector_div(sector_t capacity, int heads, int sectors) | 137 | aic_sector_div(sector_t capacity, int heads, int sectors) |
138 | { | 138 | { |
139 | /* ugly, ugly sector_div calling convention.. */ | 139 | /* ugly, ugly sector_div calling convention.. */ |
@@ -141,7 +141,7 @@ aic_sector_div(sector_t capacity, int heads, int sectors) | |||
141 | return (int)capacity; | 141 | return (int)capacity; |
142 | } | 142 | } |
143 | 143 | ||
144 | static __inline uint32_t | 144 | static inline uint32_t |
145 | scsi_4btoul(uint8_t *bytes) | 145 | scsi_4btoul(uint8_t *bytes) |
146 | { | 146 | { |
147 | uint32_t rv; | 147 | uint32_t rv; |
diff --git a/drivers/scsi/cxgb3i/Kbuild b/drivers/scsi/cxgb3i/Kbuild index ee7d6d2f9c3b..25a2032bfa26 100644 --- a/drivers/scsi/cxgb3i/Kbuild +++ b/drivers/scsi/cxgb3i/Kbuild | |||
@@ -1,4 +1,4 @@ | |||
1 | EXTRA_CFLAGS += -I$(TOPDIR)/drivers/net/cxgb3 | 1 | EXTRA_CFLAGS += -I$(TOPDIR)/drivers/net/cxgb3 |
2 | 2 | ||
3 | cxgb3i-y := cxgb3i_init.o cxgb3i_iscsi.o cxgb3i_pdu.o cxgb3i_offload.o | 3 | cxgb3i-y := cxgb3i_init.o cxgb3i_iscsi.o cxgb3i_pdu.o cxgb3i_offload.o cxgb3i_ddp.o |
4 | obj-$(CONFIG_SCSI_CXGB3_ISCSI) += cxgb3i_ddp.o cxgb3i.o | 4 | obj-$(CONFIG_SCSI_CXGB3_ISCSI) += cxgb3i.o |
diff --git a/drivers/scsi/cxgb3i/cxgb3i.h b/drivers/scsi/cxgb3i/cxgb3i.h index a7cf550b9cca..d362860e7504 100644 --- a/drivers/scsi/cxgb3i/cxgb3i.h +++ b/drivers/scsi/cxgb3i/cxgb3i.h | |||
@@ -66,10 +66,12 @@ struct cxgb3i_hba { | |||
66 | * @pdev: pointer to pci dev | 66 | * @pdev: pointer to pci dev |
67 | * @hba_cnt: # of hbas (the same as # of ports) | 67 | * @hba_cnt: # of hbas (the same as # of ports) |
68 | * @hba: all the hbas on this adapter | 68 | * @hba: all the hbas on this adapter |
69 | * @flags: bit flag for adapter event/status | ||
69 | * @tx_max_size: max. tx packet size supported | 70 | * @tx_max_size: max. tx packet size supported |
70 | * @rx_max_size: max. rx packet size supported | 71 | * @rx_max_size: max. rx packet size supported |
71 | * @tag_format: ddp tag format settings | 72 | * @tag_format: ddp tag format settings |
72 | */ | 73 | */ |
74 | #define CXGB3I_ADAPTER_FLAG_RESET 0x1 | ||
73 | struct cxgb3i_adapter { | 75 | struct cxgb3i_adapter { |
74 | struct list_head list_head; | 76 | struct list_head list_head; |
75 | spinlock_t lock; | 77 | spinlock_t lock; |
@@ -78,6 +80,7 @@ struct cxgb3i_adapter { | |||
78 | unsigned char hba_cnt; | 80 | unsigned char hba_cnt; |
79 | struct cxgb3i_hba *hba[MAX_NPORTS]; | 81 | struct cxgb3i_hba *hba[MAX_NPORTS]; |
80 | 82 | ||
83 | unsigned int flags; | ||
81 | unsigned int tx_max_size; | 84 | unsigned int tx_max_size; |
82 | unsigned int rx_max_size; | 85 | unsigned int rx_max_size; |
83 | 86 | ||
@@ -137,10 +140,9 @@ struct cxgb3i_task_data { | |||
137 | int cxgb3i_iscsi_init(void); | 140 | int cxgb3i_iscsi_init(void); |
138 | void cxgb3i_iscsi_cleanup(void); | 141 | void cxgb3i_iscsi_cleanup(void); |
139 | 142 | ||
140 | struct cxgb3i_adapter *cxgb3i_adapter_add(struct t3cdev *); | 143 | struct cxgb3i_adapter *cxgb3i_adapter_find_by_tdev(struct t3cdev *); |
141 | void cxgb3i_adapter_remove(struct t3cdev *); | 144 | void cxgb3i_adapter_open(struct t3cdev *); |
142 | int cxgb3i_adapter_ulp_init(struct cxgb3i_adapter *); | 145 | void cxgb3i_adapter_close(struct t3cdev *); |
143 | void cxgb3i_adapter_ulp_cleanup(struct cxgb3i_adapter *); | ||
144 | 146 | ||
145 | struct cxgb3i_hba *cxgb3i_hba_find_by_netdev(struct net_device *); | 147 | struct cxgb3i_hba *cxgb3i_hba_find_by_netdev(struct net_device *); |
146 | struct cxgb3i_hba *cxgb3i_hba_host_add(struct cxgb3i_adapter *, | 148 | struct cxgb3i_hba *cxgb3i_hba_host_add(struct cxgb3i_adapter *, |
diff --git a/drivers/scsi/cxgb3i/cxgb3i_ddp.c b/drivers/scsi/cxgb3i/cxgb3i_ddp.c index 4eb6f5593b3e..d06a661c209f 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_ddp.c +++ b/drivers/scsi/cxgb3i/cxgb3i_ddp.c | |||
@@ -23,19 +23,6 @@ | |||
23 | 23 | ||
24 | #include "cxgb3i_ddp.h" | 24 | #include "cxgb3i_ddp.h" |
25 | 25 | ||
26 | #define DRV_MODULE_NAME "cxgb3i_ddp" | ||
27 | #define DRV_MODULE_VERSION "1.0.0" | ||
28 | #define DRV_MODULE_RELDATE "Dec. 1, 2008" | ||
29 | |||
30 | static char version[] = | ||
31 | "Chelsio S3xx iSCSI DDP " DRV_MODULE_NAME | ||
32 | " v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; | ||
33 | |||
34 | MODULE_AUTHOR("Karen Xie <kxie@chelsio.com>"); | ||
35 | MODULE_DESCRIPTION("cxgb3i ddp pagepod manager"); | ||
36 | MODULE_LICENSE("GPL"); | ||
37 | MODULE_VERSION(DRV_MODULE_VERSION); | ||
38 | |||
39 | #define ddp_log_error(fmt...) printk(KERN_ERR "cxgb3i_ddp: ERR! " fmt) | 26 | #define ddp_log_error(fmt...) printk(KERN_ERR "cxgb3i_ddp: ERR! " fmt) |
40 | #define ddp_log_warn(fmt...) printk(KERN_WARNING "cxgb3i_ddp: WARN! " fmt) | 27 | #define ddp_log_warn(fmt...) printk(KERN_WARNING "cxgb3i_ddp: WARN! " fmt) |
41 | #define ddp_log_info(fmt...) printk(KERN_INFO "cxgb3i_ddp: " fmt) | 28 | #define ddp_log_info(fmt...) printk(KERN_INFO "cxgb3i_ddp: " fmt) |
@@ -66,9 +53,6 @@ static unsigned char ddp_page_order[DDP_PGIDX_MAX] = {0, 1, 2, 4}; | |||
66 | static unsigned char ddp_page_shift[DDP_PGIDX_MAX] = {12, 13, 14, 16}; | 53 | static unsigned char ddp_page_shift[DDP_PGIDX_MAX] = {12, 13, 14, 16}; |
67 | static unsigned char page_idx = DDP_PGIDX_MAX; | 54 | static unsigned char page_idx = DDP_PGIDX_MAX; |
68 | 55 | ||
69 | static LIST_HEAD(cxgb3i_ddp_list); | ||
70 | static DEFINE_RWLOCK(cxgb3i_ddp_rwlock); | ||
71 | |||
72 | /* | 56 | /* |
73 | * functions to program the pagepod in h/w | 57 | * functions to program the pagepod in h/w |
74 | */ | 58 | */ |
@@ -113,8 +97,8 @@ static int set_ddp_map(struct cxgb3i_ddp_info *ddp, struct pagepod_hdr *hdr, | |||
113 | return 0; | 97 | return 0; |
114 | } | 98 | } |
115 | 99 | ||
116 | static int clear_ddp_map(struct cxgb3i_ddp_info *ddp, unsigned int idx, | 100 | static void clear_ddp_map(struct cxgb3i_ddp_info *ddp, unsigned int tag, |
117 | unsigned int npods) | 101 | unsigned int idx, unsigned int npods) |
118 | { | 102 | { |
119 | unsigned int pm_addr = (idx << PPOD_SIZE_SHIFT) + ddp->llimit; | 103 | unsigned int pm_addr = (idx << PPOD_SIZE_SHIFT) + ddp->llimit; |
120 | int i; | 104 | int i; |
@@ -122,13 +106,17 @@ static int clear_ddp_map(struct cxgb3i_ddp_info *ddp, unsigned int idx, | |||
122 | for (i = 0; i < npods; i++, idx++, pm_addr += PPOD_SIZE) { | 106 | for (i = 0; i < npods; i++, idx++, pm_addr += PPOD_SIZE) { |
123 | struct sk_buff *skb = ddp->gl_skb[idx]; | 107 | struct sk_buff *skb = ddp->gl_skb[idx]; |
124 | 108 | ||
109 | if (!skb) { | ||
110 | ddp_log_error("ddp tag 0x%x, 0x%x, %d/%u, skb NULL.\n", | ||
111 | tag, idx, i, npods); | ||
112 | continue; | ||
113 | } | ||
125 | ddp->gl_skb[idx] = NULL; | 114 | ddp->gl_skb[idx] = NULL; |
126 | memset((skb->head + sizeof(struct ulp_mem_io)), 0, PPOD_SIZE); | 115 | memset((skb->head + sizeof(struct ulp_mem_io)), 0, PPOD_SIZE); |
127 | ulp_mem_io_set_hdr(skb, pm_addr); | 116 | ulp_mem_io_set_hdr(skb, pm_addr); |
128 | skb->priority = CPL_PRIORITY_CONTROL; | 117 | skb->priority = CPL_PRIORITY_CONTROL; |
129 | cxgb3_ofld_send(ddp->tdev, skb); | 118 | cxgb3_ofld_send(ddp->tdev, skb); |
130 | } | 119 | } |
131 | return 0; | ||
132 | } | 120 | } |
133 | 121 | ||
134 | static inline int ddp_find_unused_entries(struct cxgb3i_ddp_info *ddp, | 122 | static inline int ddp_find_unused_entries(struct cxgb3i_ddp_info *ddp, |
@@ -211,7 +199,6 @@ int cxgb3i_ddp_find_page_index(unsigned long pgsz) | |||
211 | ddp_log_debug("ddp page size 0x%lx not supported.\n", pgsz); | 199 | ddp_log_debug("ddp page size 0x%lx not supported.\n", pgsz); |
212 | return DDP_PGIDX_MAX; | 200 | return DDP_PGIDX_MAX; |
213 | } | 201 | } |
214 | EXPORT_SYMBOL_GPL(cxgb3i_ddp_find_page_index); | ||
215 | 202 | ||
216 | static inline void ddp_gl_unmap(struct pci_dev *pdev, | 203 | static inline void ddp_gl_unmap(struct pci_dev *pdev, |
217 | struct cxgb3i_gather_list *gl) | 204 | struct cxgb3i_gather_list *gl) |
@@ -334,7 +321,6 @@ error_out: | |||
334 | kfree(gl); | 321 | kfree(gl); |
335 | return NULL; | 322 | return NULL; |
336 | } | 323 | } |
337 | EXPORT_SYMBOL_GPL(cxgb3i_ddp_make_gl); | ||
338 | 324 | ||
339 | /** | 325 | /** |
340 | * cxgb3i_ddp_release_gl - release a page buffer list | 326 | * cxgb3i_ddp_release_gl - release a page buffer list |
@@ -348,7 +334,6 @@ void cxgb3i_ddp_release_gl(struct cxgb3i_gather_list *gl, | |||
348 | ddp_gl_unmap(pdev, gl); | 334 | ddp_gl_unmap(pdev, gl); |
349 | kfree(gl); | 335 | kfree(gl); |
350 | } | 336 | } |
351 | EXPORT_SYMBOL_GPL(cxgb3i_ddp_release_gl); | ||
352 | 337 | ||
353 | /** | 338 | /** |
354 | * cxgb3i_ddp_tag_reserve - set up ddp for a data transfer | 339 | * cxgb3i_ddp_tag_reserve - set up ddp for a data transfer |
@@ -430,7 +415,6 @@ unmark_entries: | |||
430 | ddp_unmark_entries(ddp, idx, npods); | 415 | ddp_unmark_entries(ddp, idx, npods); |
431 | return err; | 416 | return err; |
432 | } | 417 | } |
433 | EXPORT_SYMBOL_GPL(cxgb3i_ddp_tag_reserve); | ||
434 | 418 | ||
435 | /** | 419 | /** |
436 | * cxgb3i_ddp_tag_release - release a ddp tag | 420 | * cxgb3i_ddp_tag_release - release a ddp tag |
@@ -453,22 +437,21 @@ void cxgb3i_ddp_tag_release(struct t3cdev *tdev, u32 tag) | |||
453 | struct cxgb3i_gather_list *gl = ddp->gl_map[idx]; | 437 | struct cxgb3i_gather_list *gl = ddp->gl_map[idx]; |
454 | unsigned int npods; | 438 | unsigned int npods; |
455 | 439 | ||
456 | if (!gl) { | 440 | if (!gl || !gl->nelem) { |
457 | ddp_log_error("release ddp 0x%x, idx 0x%x, gl NULL.\n", | 441 | ddp_log_error("release 0x%x, idx 0x%x, gl 0x%p, %u.\n", |
458 | tag, idx); | 442 | tag, idx, gl, gl ? gl->nelem : 0); |
459 | return; | 443 | return; |
460 | } | 444 | } |
461 | npods = (gl->nelem + PPOD_PAGES_MAX - 1) >> PPOD_PAGES_SHIFT; | 445 | npods = (gl->nelem + PPOD_PAGES_MAX - 1) >> PPOD_PAGES_SHIFT; |
462 | ddp_log_debug("ddp tag 0x%x, release idx 0x%x, npods %u.\n", | 446 | ddp_log_debug("ddp tag 0x%x, release idx 0x%x, npods %u.\n", |
463 | tag, idx, npods); | 447 | tag, idx, npods); |
464 | clear_ddp_map(ddp, idx, npods); | 448 | clear_ddp_map(ddp, tag, idx, npods); |
465 | ddp_unmark_entries(ddp, idx, npods); | 449 | ddp_unmark_entries(ddp, idx, npods); |
466 | cxgb3i_ddp_release_gl(gl, ddp->pdev); | 450 | cxgb3i_ddp_release_gl(gl, ddp->pdev); |
467 | } else | 451 | } else |
468 | ddp_log_error("ddp tag 0x%x, idx 0x%x > max 0x%x.\n", | 452 | ddp_log_error("ddp tag 0x%x, idx 0x%x > max 0x%x.\n", |
469 | tag, idx, ddp->nppods); | 453 | tag, idx, ddp->nppods); |
470 | } | 454 | } |
471 | EXPORT_SYMBOL_GPL(cxgb3i_ddp_tag_release); | ||
472 | 455 | ||
473 | static int setup_conn_pgidx(struct t3cdev *tdev, unsigned int tid, int pg_idx, | 456 | static int setup_conn_pgidx(struct t3cdev *tdev, unsigned int tid, int pg_idx, |
474 | int reply) | 457 | int reply) |
@@ -509,7 +492,6 @@ int cxgb3i_setup_conn_host_pagesize(struct t3cdev *tdev, unsigned int tid, | |||
509 | { | 492 | { |
510 | return setup_conn_pgidx(tdev, tid, page_idx, reply); | 493 | return setup_conn_pgidx(tdev, tid, page_idx, reply); |
511 | } | 494 | } |
512 | EXPORT_SYMBOL_GPL(cxgb3i_setup_conn_host_pagesize); | ||
513 | 495 | ||
514 | /** | 496 | /** |
515 | * cxgb3i_setup_conn_pagesize - setup the conn.'s ddp page size | 497 | * cxgb3i_setup_conn_pagesize - setup the conn.'s ddp page size |
@@ -526,7 +508,6 @@ int cxgb3i_setup_conn_pagesize(struct t3cdev *tdev, unsigned int tid, | |||
526 | 508 | ||
527 | return setup_conn_pgidx(tdev, tid, pgidx, reply); | 509 | return setup_conn_pgidx(tdev, tid, pgidx, reply); |
528 | } | 510 | } |
529 | EXPORT_SYMBOL_GPL(cxgb3i_setup_conn_pagesize); | ||
530 | 511 | ||
531 | /** | 512 | /** |
532 | * cxgb3i_setup_conn_digest - setup conn. digest setting | 513 | * cxgb3i_setup_conn_digest - setup conn. digest setting |
@@ -562,26 +543,104 @@ int cxgb3i_setup_conn_digest(struct t3cdev *tdev, unsigned int tid, | |||
562 | cxgb3_ofld_send(tdev, skb); | 543 | cxgb3_ofld_send(tdev, skb); |
563 | return 0; | 544 | return 0; |
564 | } | 545 | } |
565 | EXPORT_SYMBOL_GPL(cxgb3i_setup_conn_digest); | ||
566 | 546 | ||
567 | static int ddp_init(struct t3cdev *tdev) | 547 | |
548 | /** | ||
549 | * cxgb3i_adapter_ddp_info - read the adapter's ddp information | ||
550 | * @tdev: t3cdev adapter | ||
551 | * @tformat: tag format | ||
552 | * @txsz: max tx pdu payload size, filled in by this func. | ||
553 | * @rxsz: max rx pdu payload size, filled in by this func. | ||
554 | * setup the tag format for a given iscsi entity | ||
555 | */ | ||
556 | int cxgb3i_adapter_ddp_info(struct t3cdev *tdev, | ||
557 | struct cxgb3i_tag_format *tformat, | ||
558 | unsigned int *txsz, unsigned int *rxsz) | ||
559 | { | ||
560 | struct cxgb3i_ddp_info *ddp; | ||
561 | unsigned char idx_bits; | ||
562 | |||
563 | if (!tformat) | ||
564 | return -EINVAL; | ||
565 | |||
566 | if (!tdev->ulp_iscsi) | ||
567 | return -EINVAL; | ||
568 | |||
569 | ddp = (struct cxgb3i_ddp_info *)tdev->ulp_iscsi; | ||
570 | |||
571 | idx_bits = 32 - tformat->sw_bits; | ||
572 | tformat->rsvd_bits = ddp->idx_bits; | ||
573 | tformat->rsvd_shift = PPOD_IDX_SHIFT; | ||
574 | tformat->rsvd_mask = (1 << tformat->rsvd_bits) - 1; | ||
575 | |||
576 | ddp_log_info("tag format: sw %u, rsvd %u,%u, mask 0x%x.\n", | ||
577 | tformat->sw_bits, tformat->rsvd_bits, | ||
578 | tformat->rsvd_shift, tformat->rsvd_mask); | ||
579 | |||
580 | *txsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD, | ||
581 | ddp->max_txsz - ISCSI_PDU_NONPAYLOAD_LEN); | ||
582 | *rxsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD, | ||
583 | ddp->max_rxsz - ISCSI_PDU_NONPAYLOAD_LEN); | ||
584 | ddp_log_info("max payload size: %u/%u, %u/%u.\n", | ||
585 | *txsz, ddp->max_txsz, *rxsz, ddp->max_rxsz); | ||
586 | return 0; | ||
587 | } | ||
588 | |||
589 | /** | ||
590 | * cxgb3i_ddp_cleanup - release the cxgb3 adapter's ddp resource | ||
591 | * @tdev: t3cdev adapter | ||
592 | * release all the resource held by the ddp pagepod manager for a given | ||
593 | * adapter if needed | ||
594 | */ | ||
595 | void cxgb3i_ddp_cleanup(struct t3cdev *tdev) | ||
596 | { | ||
597 | int i = 0; | ||
598 | struct cxgb3i_ddp_info *ddp = (struct cxgb3i_ddp_info *)tdev->ulp_iscsi; | ||
599 | |||
600 | ddp_log_info("t3dev 0x%p, release ddp 0x%p.\n", tdev, ddp); | ||
601 | |||
602 | if (ddp) { | ||
603 | tdev->ulp_iscsi = NULL; | ||
604 | while (i < ddp->nppods) { | ||
605 | struct cxgb3i_gather_list *gl = ddp->gl_map[i]; | ||
606 | if (gl) { | ||
607 | int npods = (gl->nelem + PPOD_PAGES_MAX - 1) | ||
608 | >> PPOD_PAGES_SHIFT; | ||
609 | ddp_log_info("t3dev 0x%p, ddp %d + %d.\n", | ||
610 | tdev, i, npods); | ||
611 | kfree(gl); | ||
612 | ddp_free_gl_skb(ddp, i, npods); | ||
613 | i += npods; | ||
614 | } else | ||
615 | i++; | ||
616 | } | ||
617 | cxgb3i_free_big_mem(ddp); | ||
618 | } | ||
619 | } | ||
620 | |||
621 | /** | ||
622 | * ddp_init - initialize the cxgb3 adapter's ddp resource | ||
623 | * @tdev: t3cdev adapter | ||
624 | * initialize the ddp pagepod manager for a given adapter | ||
625 | */ | ||
626 | static void ddp_init(struct t3cdev *tdev) | ||
568 | { | 627 | { |
569 | struct cxgb3i_ddp_info *ddp; | 628 | struct cxgb3i_ddp_info *ddp; |
570 | struct ulp_iscsi_info uinfo; | 629 | struct ulp_iscsi_info uinfo; |
571 | unsigned int ppmax, bits; | 630 | unsigned int ppmax, bits; |
572 | int i, err; | 631 | int i, err; |
573 | static int vers_printed; | ||
574 | 632 | ||
575 | if (!vers_printed) { | 633 | if (tdev->ulp_iscsi) { |
576 | printk(KERN_INFO "%s", version); | 634 | ddp_log_warn("t3dev 0x%p, ddp 0x%p already set up.\n", |
577 | vers_printed = 1; | 635 | tdev, tdev->ulp_iscsi); |
636 | return; | ||
578 | } | 637 | } |
579 | 638 | ||
580 | err = tdev->ctl(tdev, ULP_ISCSI_GET_PARAMS, &uinfo); | 639 | err = tdev->ctl(tdev, ULP_ISCSI_GET_PARAMS, &uinfo); |
581 | if (err < 0) { | 640 | if (err < 0) { |
582 | ddp_log_error("%s, failed to get iscsi param err=%d.\n", | 641 | ddp_log_error("%s, failed to get iscsi param err=%d.\n", |
583 | tdev->name, err); | 642 | tdev->name, err); |
584 | return err; | 643 | return; |
585 | } | 644 | } |
586 | 645 | ||
587 | ppmax = (uinfo.ulimit - uinfo.llimit + 1) >> PPOD_SIZE_SHIFT; | 646 | ppmax = (uinfo.ulimit - uinfo.llimit + 1) >> PPOD_SIZE_SHIFT; |
@@ -598,7 +657,7 @@ static int ddp_init(struct t3cdev *tdev) | |||
598 | if (!ddp) { | 657 | if (!ddp) { |
599 | ddp_log_warn("%s unable to alloc ddp 0x%d, ddp disabled.\n", | 658 | ddp_log_warn("%s unable to alloc ddp 0x%d, ddp disabled.\n", |
600 | tdev->name, ppmax); | 659 | tdev->name, ppmax); |
601 | return 0; | 660 | return; |
602 | } | 661 | } |
603 | ddp->gl_map = (struct cxgb3i_gather_list **)(ddp + 1); | 662 | ddp->gl_map = (struct cxgb3i_gather_list **)(ddp + 1); |
604 | ddp->gl_skb = (struct sk_buff **)(((char *)ddp->gl_map) + | 663 | ddp->gl_skb = (struct sk_buff **)(((char *)ddp->gl_map) + |
@@ -632,142 +691,26 @@ static int ddp_init(struct t3cdev *tdev) | |||
632 | 691 | ||
633 | tdev->ulp_iscsi = ddp; | 692 | tdev->ulp_iscsi = ddp; |
634 | 693 | ||
635 | /* add to the list */ | 694 | ddp_log_info("tdev 0x%p, nppods %u, bits %u, mask 0x%x,0x%x pkt %u/%u," |
636 | write_lock(&cxgb3i_ddp_rwlock); | 695 | " %u/%u.\n", |
637 | list_add_tail(&ddp->list, &cxgb3i_ddp_list); | 696 | tdev, ppmax, ddp->idx_bits, ddp->idx_mask, |
638 | write_unlock(&cxgb3i_ddp_rwlock); | 697 | ddp->rsvd_tag_mask, ddp->max_txsz, uinfo.max_txsz, |
639 | |||
640 | ddp_log_info("nppods %u (0x%x ~ 0x%x), bits %u, mask 0x%x,0x%x " | ||
641 | "pkt %u/%u, %u/%u.\n", | ||
642 | ppmax, ddp->llimit, ddp->ulimit, ddp->idx_bits, | ||
643 | ddp->idx_mask, ddp->rsvd_tag_mask, | ||
644 | ddp->max_txsz, uinfo.max_txsz, | ||
645 | ddp->max_rxsz, uinfo.max_rxsz); | 698 | ddp->max_rxsz, uinfo.max_rxsz); |
646 | return 0; | 699 | return; |
647 | 700 | ||
648 | free_ddp_map: | 701 | free_ddp_map: |
649 | cxgb3i_free_big_mem(ddp); | 702 | cxgb3i_free_big_mem(ddp); |
650 | return err; | ||
651 | } | ||
652 | |||
653 | /** | ||
654 | * cxgb3i_adapter_ddp_init - initialize the adapter's ddp resource | ||
655 | * @tdev: t3cdev adapter | ||
656 | * @tformat: tag format | ||
657 | * @txsz: max tx pdu payload size, filled in by this func. | ||
658 | * @rxsz: max rx pdu payload size, filled in by this func. | ||
659 | * initialize the ddp pagepod manager for a given adapter if needed and | ||
660 | * setup the tag format for a given iscsi entity | ||
661 | */ | ||
662 | int cxgb3i_adapter_ddp_init(struct t3cdev *tdev, | ||
663 | struct cxgb3i_tag_format *tformat, | ||
664 | unsigned int *txsz, unsigned int *rxsz) | ||
665 | { | ||
666 | struct cxgb3i_ddp_info *ddp; | ||
667 | unsigned char idx_bits; | ||
668 | |||
669 | if (!tformat) | ||
670 | return -EINVAL; | ||
671 | |||
672 | if (!tdev->ulp_iscsi) { | ||
673 | int err = ddp_init(tdev); | ||
674 | if (err < 0) | ||
675 | return err; | ||
676 | } | ||
677 | ddp = (struct cxgb3i_ddp_info *)tdev->ulp_iscsi; | ||
678 | |||
679 | idx_bits = 32 - tformat->sw_bits; | ||
680 | tformat->rsvd_bits = ddp->idx_bits; | ||
681 | tformat->rsvd_shift = PPOD_IDX_SHIFT; | ||
682 | tformat->rsvd_mask = (1 << tformat->rsvd_bits) - 1; | ||
683 | |||
684 | ddp_log_info("tag format: sw %u, rsvd %u,%u, mask 0x%x.\n", | ||
685 | tformat->sw_bits, tformat->rsvd_bits, | ||
686 | tformat->rsvd_shift, tformat->rsvd_mask); | ||
687 | |||
688 | *txsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD, | ||
689 | ddp->max_txsz - ISCSI_PDU_NONPAYLOAD_LEN); | ||
690 | *rxsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD, | ||
691 | ddp->max_rxsz - ISCSI_PDU_NONPAYLOAD_LEN); | ||
692 | ddp_log_info("max payload size: %u/%u, %u/%u.\n", | ||
693 | *txsz, ddp->max_txsz, *rxsz, ddp->max_rxsz); | ||
694 | return 0; | ||
695 | } | ||
696 | EXPORT_SYMBOL_GPL(cxgb3i_adapter_ddp_init); | ||
697 | |||
698 | static void ddp_release(struct cxgb3i_ddp_info *ddp) | ||
699 | { | ||
700 | int i = 0; | ||
701 | struct t3cdev *tdev = ddp->tdev; | ||
702 | |||
703 | tdev->ulp_iscsi = NULL; | ||
704 | while (i < ddp->nppods) { | ||
705 | struct cxgb3i_gather_list *gl = ddp->gl_map[i]; | ||
706 | if (gl) { | ||
707 | int npods = (gl->nelem + PPOD_PAGES_MAX - 1) | ||
708 | >> PPOD_PAGES_SHIFT; | ||
709 | |||
710 | kfree(gl); | ||
711 | ddp_free_gl_skb(ddp, i, npods); | ||
712 | } else | ||
713 | i++; | ||
714 | } | ||
715 | cxgb3i_free_big_mem(ddp); | ||
716 | } | ||
717 | |||
718 | /** | ||
719 | * cxgb3i_adapter_ddp_cleanup - release the adapter's ddp resource | ||
720 | * @tdev: t3cdev adapter | ||
721 | * release all the resource held by the ddp pagepod manager for a given | ||
722 | * adapter if needed | ||
723 | */ | ||
724 | void cxgb3i_adapter_ddp_cleanup(struct t3cdev *tdev) | ||
725 | { | ||
726 | struct cxgb3i_ddp_info *ddp; | ||
727 | |||
728 | /* remove from the list */ | ||
729 | write_lock(&cxgb3i_ddp_rwlock); | ||
730 | list_for_each_entry(ddp, &cxgb3i_ddp_list, list) { | ||
731 | if (ddp->tdev == tdev) { | ||
732 | list_del(&ddp->list); | ||
733 | break; | ||
734 | } | ||
735 | } | ||
736 | write_unlock(&cxgb3i_ddp_rwlock); | ||
737 | |||
738 | if (ddp) | ||
739 | ddp_release(ddp); | ||
740 | } | ||
741 | EXPORT_SYMBOL_GPL(cxgb3i_adapter_ddp_cleanup); | ||
742 | |||
743 | /** | ||
744 | * cxgb3i_ddp_init_module - module init entry point | ||
745 | * initialize any driver wide global data structures | ||
746 | */ | ||
747 | static int __init cxgb3i_ddp_init_module(void) | ||
748 | { | ||
749 | page_idx = cxgb3i_ddp_find_page_index(PAGE_SIZE); | ||
750 | ddp_log_info("system PAGE_SIZE %lu, ddp idx %u.\n", | ||
751 | PAGE_SIZE, page_idx); | ||
752 | return 0; | ||
753 | } | 703 | } |
754 | 704 | ||
755 | /** | 705 | /** |
756 | * cxgb3i_ddp_exit_module - module cleanup/exit entry point | 706 | * cxgb3i_ddp_init - initialize ddp functions |
757 | * go through the ddp list and release any resource held. | ||
758 | */ | 707 | */ |
759 | static void __exit cxgb3i_ddp_exit_module(void) | 708 | void cxgb3i_ddp_init(struct t3cdev *tdev) |
760 | { | 709 | { |
761 | struct cxgb3i_ddp_info *ddp; | 710 | if (page_idx == DDP_PGIDX_MAX) { |
762 | 711 | page_idx = cxgb3i_ddp_find_page_index(PAGE_SIZE); | |
763 | /* release all ddp manager if there is any */ | 712 | ddp_log_info("system PAGE_SIZE %lu, ddp idx %u.\n", |
764 | write_lock(&cxgb3i_ddp_rwlock); | 713 | PAGE_SIZE, page_idx); |
765 | list_for_each_entry(ddp, &cxgb3i_ddp_list, list) { | ||
766 | list_del(&ddp->list); | ||
767 | ddp_release(ddp); | ||
768 | } | 714 | } |
769 | write_unlock(&cxgb3i_ddp_rwlock); | 715 | ddp_init(tdev); |
770 | } | 716 | } |
771 | |||
772 | module_init(cxgb3i_ddp_init_module); | ||
773 | module_exit(cxgb3i_ddp_exit_module); | ||
diff --git a/drivers/scsi/cxgb3i/cxgb3i_ddp.h b/drivers/scsi/cxgb3i/cxgb3i_ddp.h index 75a63a81e873..0d296de7cf32 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_ddp.h +++ b/drivers/scsi/cxgb3i/cxgb3i_ddp.h | |||
@@ -301,7 +301,9 @@ int cxgb3i_setup_conn_pagesize(struct t3cdev *, unsigned int tid, int reply, | |||
301 | int cxgb3i_setup_conn_digest(struct t3cdev *, unsigned int tid, | 301 | int cxgb3i_setup_conn_digest(struct t3cdev *, unsigned int tid, |
302 | int hcrc, int dcrc, int reply); | 302 | int hcrc, int dcrc, int reply); |
303 | int cxgb3i_ddp_find_page_index(unsigned long pgsz); | 303 | int cxgb3i_ddp_find_page_index(unsigned long pgsz); |
304 | int cxgb3i_adapter_ddp_init(struct t3cdev *, struct cxgb3i_tag_format *, | 304 | int cxgb3i_adapter_ddp_info(struct t3cdev *, struct cxgb3i_tag_format *, |
305 | unsigned int *txsz, unsigned int *rxsz); | 305 | unsigned int *txsz, unsigned int *rxsz); |
306 | void cxgb3i_adapter_ddp_cleanup(struct t3cdev *); | 306 | |
307 | void cxgb3i_ddp_init(struct t3cdev *); | ||
308 | void cxgb3i_ddp_cleanup(struct t3cdev *); | ||
307 | #endif | 309 | #endif |
diff --git a/drivers/scsi/cxgb3i/cxgb3i_init.c b/drivers/scsi/cxgb3i/cxgb3i_init.c index 1ce9f244e46c..042d9bce9914 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_init.c +++ b/drivers/scsi/cxgb3i/cxgb3i_init.c | |||
@@ -12,8 +12,8 @@ | |||
12 | #include "cxgb3i.h" | 12 | #include "cxgb3i.h" |
13 | 13 | ||
14 | #define DRV_MODULE_NAME "cxgb3i" | 14 | #define DRV_MODULE_NAME "cxgb3i" |
15 | #define DRV_MODULE_VERSION "1.0.1" | 15 | #define DRV_MODULE_VERSION "1.0.2" |
16 | #define DRV_MODULE_RELDATE "Jan. 2009" | 16 | #define DRV_MODULE_RELDATE "Mar. 2009" |
17 | 17 | ||
18 | static char version[] = | 18 | static char version[] = |
19 | "Chelsio S3xx iSCSI Driver " DRV_MODULE_NAME | 19 | "Chelsio S3xx iSCSI Driver " DRV_MODULE_NAME |
@@ -26,6 +26,7 @@ MODULE_VERSION(DRV_MODULE_VERSION); | |||
26 | 26 | ||
27 | static void open_s3_dev(struct t3cdev *); | 27 | static void open_s3_dev(struct t3cdev *); |
28 | static void close_s3_dev(struct t3cdev *); | 28 | static void close_s3_dev(struct t3cdev *); |
29 | static void s3_err_handler(struct t3cdev *tdev, u32 status, u32 error); | ||
29 | 30 | ||
30 | static cxgb3_cpl_handler_func cxgb3i_cpl_handlers[NUM_CPL_CMDS]; | 31 | static cxgb3_cpl_handler_func cxgb3i_cpl_handlers[NUM_CPL_CMDS]; |
31 | static struct cxgb3_client t3c_client = { | 32 | static struct cxgb3_client t3c_client = { |
@@ -33,6 +34,7 @@ static struct cxgb3_client t3c_client = { | |||
33 | .handlers = cxgb3i_cpl_handlers, | 34 | .handlers = cxgb3i_cpl_handlers, |
34 | .add = open_s3_dev, | 35 | .add = open_s3_dev, |
35 | .remove = close_s3_dev, | 36 | .remove = close_s3_dev, |
37 | .err_handler = s3_err_handler, | ||
36 | }; | 38 | }; |
37 | 39 | ||
38 | /** | 40 | /** |
@@ -48,8 +50,9 @@ static void open_s3_dev(struct t3cdev *t3dev) | |||
48 | vers_printed = 1; | 50 | vers_printed = 1; |
49 | } | 51 | } |
50 | 52 | ||
53 | cxgb3i_ddp_init(t3dev); | ||
51 | cxgb3i_sdev_add(t3dev, &t3c_client); | 54 | cxgb3i_sdev_add(t3dev, &t3c_client); |
52 | cxgb3i_adapter_add(t3dev); | 55 | cxgb3i_adapter_open(t3dev); |
53 | } | 56 | } |
54 | 57 | ||
55 | /** | 58 | /** |
@@ -58,8 +61,28 @@ static void open_s3_dev(struct t3cdev *t3dev) | |||
58 | */ | 61 | */ |
59 | static void close_s3_dev(struct t3cdev *t3dev) | 62 | static void close_s3_dev(struct t3cdev *t3dev) |
60 | { | 63 | { |
61 | cxgb3i_adapter_remove(t3dev); | 64 | cxgb3i_adapter_close(t3dev); |
62 | cxgb3i_sdev_remove(t3dev); | 65 | cxgb3i_sdev_remove(t3dev); |
66 | cxgb3i_ddp_cleanup(t3dev); | ||
67 | } | ||
68 | |||
69 | static void s3_err_handler(struct t3cdev *tdev, u32 status, u32 error) | ||
70 | { | ||
71 | struct cxgb3i_adapter *snic = cxgb3i_adapter_find_by_tdev(tdev); | ||
72 | |||
73 | cxgb3i_log_info("snic 0x%p, tdev 0x%p, status 0x%x, err 0x%x.\n", | ||
74 | snic, tdev, status, error); | ||
75 | if (!snic) | ||
76 | return; | ||
77 | |||
78 | switch (status) { | ||
79 | case OFFLOAD_STATUS_DOWN: | ||
80 | snic->flags |= CXGB3I_ADAPTER_FLAG_RESET; | ||
81 | break; | ||
82 | case OFFLOAD_STATUS_UP: | ||
83 | snic->flags &= ~CXGB3I_ADAPTER_FLAG_RESET; | ||
84 | break; | ||
85 | } | ||
63 | } | 86 | } |
64 | 87 | ||
65 | /** | 88 | /** |
diff --git a/drivers/scsi/cxgb3i/cxgb3i_iscsi.c b/drivers/scsi/cxgb3i/cxgb3i_iscsi.c index e185dedc4c1f..fff8e4327644 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_iscsi.c +++ b/drivers/scsi/cxgb3i/cxgb3i_iscsi.c | |||
@@ -53,36 +53,52 @@ static LIST_HEAD(cxgb3i_snic_list); | |||
53 | static DEFINE_RWLOCK(cxgb3i_snic_rwlock); | 53 | static DEFINE_RWLOCK(cxgb3i_snic_rwlock); |
54 | 54 | ||
55 | /** | 55 | /** |
56 | * cxgb3i_adapter_add - init a s3 adapter structure and any h/w settings | 56 | * cxgb3i_adpater_find_by_tdev - find the cxgb3i_adapter structure via t3cdev |
57 | * @t3dev: t3cdev adapter | 57 | * @tdev: t3cdev pointer |
58 | * return the resulting cxgb3i_adapter struct | ||
59 | */ | 58 | */ |
60 | struct cxgb3i_adapter *cxgb3i_adapter_add(struct t3cdev *t3dev) | 59 | struct cxgb3i_adapter *cxgb3i_adapter_find_by_tdev(struct t3cdev *tdev) |
61 | { | 60 | { |
62 | struct cxgb3i_adapter *snic; | 61 | struct cxgb3i_adapter *snic; |
63 | struct adapter *adapter = tdev2adap(t3dev); | ||
64 | int i; | ||
65 | 62 | ||
66 | snic = kzalloc(sizeof(*snic), GFP_KERNEL); | 63 | read_lock(&cxgb3i_snic_rwlock); |
67 | if (!snic) { | 64 | list_for_each_entry(snic, &cxgb3i_snic_list, list_head) { |
68 | cxgb3i_api_debug("cxgb3 %s, OOM.\n", t3dev->name); | 65 | if (snic->tdev == tdev) { |
69 | return NULL; | 66 | read_unlock(&cxgb3i_snic_rwlock); |
67 | return snic; | ||
68 | } | ||
70 | } | 69 | } |
71 | spin_lock_init(&snic->lock); | 70 | read_unlock(&cxgb3i_snic_rwlock); |
71 | return NULL; | ||
72 | } | ||
73 | |||
74 | static inline int adapter_update(struct cxgb3i_adapter *snic) | ||
75 | { | ||
76 | cxgb3i_log_info("snic 0x%p, t3dev 0x%p, updating.\n", | ||
77 | snic, snic->tdev); | ||
78 | return cxgb3i_adapter_ddp_info(snic->tdev, &snic->tag_format, | ||
79 | &snic->tx_max_size, | ||
80 | &snic->rx_max_size); | ||
81 | } | ||
82 | |||
83 | static int adapter_add(struct cxgb3i_adapter *snic) | ||
84 | { | ||
85 | struct t3cdev *t3dev = snic->tdev; | ||
86 | struct adapter *adapter = tdev2adap(t3dev); | ||
87 | int i, err; | ||
72 | 88 | ||
73 | snic->tdev = t3dev; | ||
74 | snic->pdev = adapter->pdev; | 89 | snic->pdev = adapter->pdev; |
75 | snic->tag_format.sw_bits = sw_tag_idx_bits + sw_tag_age_bits; | 90 | snic->tag_format.sw_bits = sw_tag_idx_bits + sw_tag_age_bits; |
76 | 91 | ||
77 | if (cxgb3i_adapter_ddp_init(t3dev, &snic->tag_format, | 92 | err = cxgb3i_adapter_ddp_info(t3dev, &snic->tag_format, |
78 | &snic->tx_max_size, | 93 | &snic->tx_max_size, |
79 | &snic->rx_max_size) < 0) | 94 | &snic->rx_max_size); |
80 | goto free_snic; | 95 | if (err < 0) |
96 | return err; | ||
81 | 97 | ||
82 | for_each_port(adapter, i) { | 98 | for_each_port(adapter, i) { |
83 | snic->hba[i] = cxgb3i_hba_host_add(snic, adapter->port[i]); | 99 | snic->hba[i] = cxgb3i_hba_host_add(snic, adapter->port[i]); |
84 | if (!snic->hba[i]) | 100 | if (!snic->hba[i]) |
85 | goto ulp_cleanup; | 101 | return -EINVAL; |
86 | } | 102 | } |
87 | snic->hba_cnt = adapter->params.nports; | 103 | snic->hba_cnt = adapter->params.nports; |
88 | 104 | ||
@@ -91,46 +107,71 @@ struct cxgb3i_adapter *cxgb3i_adapter_add(struct t3cdev *t3dev) | |||
91 | list_add_tail(&snic->list_head, &cxgb3i_snic_list); | 107 | list_add_tail(&snic->list_head, &cxgb3i_snic_list); |
92 | write_unlock(&cxgb3i_snic_rwlock); | 108 | write_unlock(&cxgb3i_snic_rwlock); |
93 | 109 | ||
94 | return snic; | 110 | cxgb3i_log_info("t3dev 0x%p open, snic 0x%p, %u scsi hosts added.\n", |
111 | t3dev, snic, snic->hba_cnt); | ||
112 | return 0; | ||
113 | } | ||
95 | 114 | ||
96 | ulp_cleanup: | 115 | /** |
97 | cxgb3i_adapter_ddp_cleanup(t3dev); | 116 | * cxgb3i_adapter_open - init a s3 adapter structure and any h/w settings |
98 | free_snic: | 117 | * @t3dev: t3cdev adapter |
99 | kfree(snic); | 118 | */ |
100 | return NULL; | 119 | void cxgb3i_adapter_open(struct t3cdev *t3dev) |
120 | { | ||
121 | struct cxgb3i_adapter *snic = cxgb3i_adapter_find_by_tdev(t3dev); | ||
122 | int err; | ||
123 | |||
124 | if (snic) | ||
125 | err = adapter_update(snic); | ||
126 | else { | ||
127 | snic = kzalloc(sizeof(*snic), GFP_KERNEL); | ||
128 | if (snic) { | ||
129 | spin_lock_init(&snic->lock); | ||
130 | snic->tdev = t3dev; | ||
131 | err = adapter_add(snic); | ||
132 | } else | ||
133 | err = -ENOMEM; | ||
134 | } | ||
135 | |||
136 | if (err < 0) { | ||
137 | cxgb3i_log_info("snic 0x%p, f 0x%x, t3dev 0x%p open, err %d.\n", | ||
138 | snic, snic ? snic->flags : 0, t3dev, err); | ||
139 | if (snic) { | ||
140 | snic->flags &= ~CXGB3I_ADAPTER_FLAG_RESET; | ||
141 | cxgb3i_adapter_close(t3dev); | ||
142 | } | ||
143 | } | ||
101 | } | 144 | } |
102 | 145 | ||
103 | /** | 146 | /** |
104 | * cxgb3i_adapter_remove - release the resources held and cleanup h/w settings | 147 | * cxgb3i_adapter_close - release the resources held and cleanup h/w settings |
105 | * @t3dev: t3cdev adapter | 148 | * @t3dev: t3cdev adapter |
106 | */ | 149 | */ |
107 | void cxgb3i_adapter_remove(struct t3cdev *t3dev) | 150 | void cxgb3i_adapter_close(struct t3cdev *t3dev) |
108 | { | 151 | { |
152 | struct cxgb3i_adapter *snic = cxgb3i_adapter_find_by_tdev(t3dev); | ||
109 | int i; | 153 | int i; |
110 | struct cxgb3i_adapter *snic; | 154 | |
155 | if (!snic || snic->flags & CXGB3I_ADAPTER_FLAG_RESET) { | ||
156 | cxgb3i_log_info("t3dev 0x%p close, snic 0x%p, f 0x%x.\n", | ||
157 | t3dev, snic, snic ? snic->flags : 0); | ||
158 | return; | ||
159 | } | ||
111 | 160 | ||
112 | /* remove from the list */ | 161 | /* remove from the list */ |
113 | write_lock(&cxgb3i_snic_rwlock); | 162 | write_lock(&cxgb3i_snic_rwlock); |
114 | list_for_each_entry(snic, &cxgb3i_snic_list, list_head) { | 163 | list_del(&snic->list_head); |
115 | if (snic->tdev == t3dev) { | ||
116 | list_del(&snic->list_head); | ||
117 | break; | ||
118 | } | ||
119 | } | ||
120 | write_unlock(&cxgb3i_snic_rwlock); | 164 | write_unlock(&cxgb3i_snic_rwlock); |
121 | 165 | ||
122 | if (snic) { | 166 | for (i = 0; i < snic->hba_cnt; i++) { |
123 | for (i = 0; i < snic->hba_cnt; i++) { | 167 | if (snic->hba[i]) { |
124 | if (snic->hba[i]) { | 168 | cxgb3i_hba_host_remove(snic->hba[i]); |
125 | cxgb3i_hba_host_remove(snic->hba[i]); | 169 | snic->hba[i] = NULL; |
126 | snic->hba[i] = NULL; | ||
127 | } | ||
128 | } | 170 | } |
129 | |||
130 | /* release ddp resources */ | ||
131 | cxgb3i_adapter_ddp_cleanup(snic->tdev); | ||
132 | kfree(snic); | ||
133 | } | 171 | } |
172 | cxgb3i_log_info("t3dev 0x%p close, snic 0x%p, %u scsi hosts removed.\n", | ||
173 | t3dev, snic, snic->hba_cnt); | ||
174 | kfree(snic); | ||
134 | } | 175 | } |
135 | 176 | ||
136 | /** | 177 | /** |
@@ -170,7 +211,8 @@ struct cxgb3i_hba *cxgb3i_hba_host_add(struct cxgb3i_adapter *snic, | |||
170 | shost = iscsi_host_alloc(&cxgb3i_host_template, | 211 | shost = iscsi_host_alloc(&cxgb3i_host_template, |
171 | sizeof(struct cxgb3i_hba), 1); | 212 | sizeof(struct cxgb3i_hba), 1); |
172 | if (!shost) { | 213 | if (!shost) { |
173 | cxgb3i_log_info("iscsi_host_alloc failed.\n"); | 214 | cxgb3i_log_info("snic 0x%p, ndev 0x%p, host_alloc failed.\n", |
215 | snic, ndev); | ||
174 | return NULL; | 216 | return NULL; |
175 | } | 217 | } |
176 | 218 | ||
@@ -188,7 +230,8 @@ struct cxgb3i_hba *cxgb3i_hba_host_add(struct cxgb3i_adapter *snic, | |||
188 | pci_dev_get(snic->pdev); | 230 | pci_dev_get(snic->pdev); |
189 | err = iscsi_host_add(shost, &snic->pdev->dev); | 231 | err = iscsi_host_add(shost, &snic->pdev->dev); |
190 | if (err) { | 232 | if (err) { |
191 | cxgb3i_log_info("iscsi_host_add failed.\n"); | 233 | cxgb3i_log_info("snic 0x%p, ndev 0x%p, host_add failed.\n", |
234 | snic, ndev); | ||
192 | goto pci_dev_put; | 235 | goto pci_dev_put; |
193 | } | 236 | } |
194 | 237 | ||
diff --git a/drivers/scsi/cxgb3i/cxgb3i_offload.c b/drivers/scsi/cxgb3i/cxgb3i_offload.c index c2e434e54e28..4d8654cdbdae 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_offload.c +++ b/drivers/scsi/cxgb3i/cxgb3i_offload.c | |||
@@ -94,29 +94,30 @@ static int c3cn_get_port(struct s3_conn *c3cn, struct cxgb3i_sdev_data *cdata) | |||
94 | if (!cdata) | 94 | if (!cdata) |
95 | goto error_out; | 95 | goto error_out; |
96 | 96 | ||
97 | if (c3cn->saddr.sin_port != 0) { | 97 | if (c3cn->saddr.sin_port) { |
98 | idx = ntohs(c3cn->saddr.sin_port) - cxgb3_sport_base; | 98 | cxgb3i_log_error("connect, sin_port NON-ZERO %u.\n", |
99 | if (idx < 0 || idx >= cxgb3_max_connect) | 99 | c3cn->saddr.sin_port); |
100 | return 0; | 100 | return -EADDRINUSE; |
101 | if (!test_and_set_bit(idx, cdata->sport_map)) | ||
102 | return -EADDRINUSE; | ||
103 | } | 101 | } |
104 | 102 | ||
105 | /* the sport_map_next may not be accurate but that is okay, sport_map | 103 | spin_lock_bh(&cdata->lock); |
106 | should be */ | 104 | start = idx = cdata->sport_next; |
107 | start = idx = cdata->sport_map_next; | ||
108 | do { | 105 | do { |
109 | if (++idx >= cxgb3_max_connect) | 106 | if (++idx >= cxgb3_max_connect) |
110 | idx = 0; | 107 | idx = 0; |
111 | if (!(test_and_set_bit(idx, cdata->sport_map))) { | 108 | if (!cdata->sport_conn[idx]) { |
112 | c3cn->saddr.sin_port = htons(cxgb3_sport_base + idx); | 109 | c3cn->saddr.sin_port = htons(cxgb3_sport_base + idx); |
113 | cdata->sport_map_next = idx; | 110 | cdata->sport_next = idx; |
111 | cdata->sport_conn[idx] = c3cn; | ||
112 | spin_unlock_bh(&cdata->lock); | ||
113 | |||
114 | c3cn_conn_debug("%s reserve port %u.\n", | 114 | c3cn_conn_debug("%s reserve port %u.\n", |
115 | cdata->cdev->name, | 115 | cdata->cdev->name, |
116 | cxgb3_sport_base + idx); | 116 | cxgb3_sport_base + idx); |
117 | return 0; | 117 | return 0; |
118 | } | 118 | } |
119 | } while (idx != start); | 119 | } while (idx != start); |
120 | spin_unlock_bh(&cdata->lock); | ||
120 | 121 | ||
121 | error_out: | 122 | error_out: |
122 | return -EADDRNOTAVAIL; | 123 | return -EADDRNOTAVAIL; |
@@ -124,15 +125,19 @@ error_out: | |||
124 | 125 | ||
125 | static void c3cn_put_port(struct s3_conn *c3cn) | 126 | static void c3cn_put_port(struct s3_conn *c3cn) |
126 | { | 127 | { |
127 | struct cxgb3i_sdev_data *cdata = CXGB3_SDEV_DATA(c3cn->cdev); | 128 | if (!c3cn->cdev) |
129 | return; | ||
128 | 130 | ||
129 | if (c3cn->saddr.sin_port) { | 131 | if (c3cn->saddr.sin_port) { |
132 | struct cxgb3i_sdev_data *cdata = CXGB3_SDEV_DATA(c3cn->cdev); | ||
130 | int idx = ntohs(c3cn->saddr.sin_port) - cxgb3_sport_base; | 133 | int idx = ntohs(c3cn->saddr.sin_port) - cxgb3_sport_base; |
131 | 134 | ||
132 | c3cn->saddr.sin_port = 0; | 135 | c3cn->saddr.sin_port = 0; |
133 | if (idx < 0 || idx >= cxgb3_max_connect) | 136 | if (idx < 0 || idx >= cxgb3_max_connect) |
134 | return; | 137 | return; |
135 | clear_bit(idx, cdata->sport_map); | 138 | spin_lock_bh(&cdata->lock); |
139 | cdata->sport_conn[idx] = NULL; | ||
140 | spin_unlock_bh(&cdata->lock); | ||
136 | c3cn_conn_debug("%s, release port %u.\n", | 141 | c3cn_conn_debug("%s, release port %u.\n", |
137 | cdata->cdev->name, cxgb3_sport_base + idx); | 142 | cdata->cdev->name, cxgb3_sport_base + idx); |
138 | } | 143 | } |
@@ -1305,11 +1310,7 @@ static void c3cn_release_offload_resources(struct s3_conn *c3cn) | |||
1305 | struct t3cdev *cdev = c3cn->cdev; | 1310 | struct t3cdev *cdev = c3cn->cdev; |
1306 | unsigned int tid = c3cn->tid; | 1311 | unsigned int tid = c3cn->tid; |
1307 | 1312 | ||
1308 | if (!cdev) | ||
1309 | return; | ||
1310 | |||
1311 | c3cn->qset = 0; | 1313 | c3cn->qset = 0; |
1312 | |||
1313 | c3cn_free_cpl_skbs(c3cn); | 1314 | c3cn_free_cpl_skbs(c3cn); |
1314 | 1315 | ||
1315 | if (c3cn->wr_avail != c3cn->wr_max) { | 1316 | if (c3cn->wr_avail != c3cn->wr_max) { |
@@ -1317,18 +1318,22 @@ static void c3cn_release_offload_resources(struct s3_conn *c3cn) | |||
1317 | reset_wr_list(c3cn); | 1318 | reset_wr_list(c3cn); |
1318 | } | 1319 | } |
1319 | 1320 | ||
1320 | if (c3cn->l2t) { | 1321 | if (cdev) { |
1321 | l2t_release(L2DATA(cdev), c3cn->l2t); | 1322 | if (c3cn->l2t) { |
1322 | c3cn->l2t = NULL; | 1323 | l2t_release(L2DATA(cdev), c3cn->l2t); |
1323 | } | 1324 | c3cn->l2t = NULL; |
1324 | 1325 | } | |
1325 | if (c3cn->state == C3CN_STATE_CONNECTING) /* we have ATID */ | 1326 | if (c3cn->state == C3CN_STATE_CONNECTING) |
1326 | s3_free_atid(cdev, tid); | 1327 | /* we have ATID */ |
1327 | else { /* we have TID */ | 1328 | s3_free_atid(cdev, tid); |
1328 | cxgb3_remove_tid(cdev, (void *)c3cn, tid); | 1329 | else { |
1329 | c3cn_put(c3cn); | 1330 | /* we have TID */ |
1331 | cxgb3_remove_tid(cdev, (void *)c3cn, tid); | ||
1332 | c3cn_put(c3cn); | ||
1333 | } | ||
1330 | } | 1334 | } |
1331 | 1335 | ||
1336 | c3cn->dst_cache = NULL; | ||
1332 | c3cn->cdev = NULL; | 1337 | c3cn->cdev = NULL; |
1333 | } | 1338 | } |
1334 | 1339 | ||
@@ -1417,17 +1422,18 @@ static void c3cn_active_close(struct s3_conn *c3cn) | |||
1417 | } | 1422 | } |
1418 | 1423 | ||
1419 | /** | 1424 | /** |
1420 | * cxgb3i_c3cn_release - close and release an iscsi tcp connection | 1425 | * cxgb3i_c3cn_release - close and release an iscsi tcp connection and any |
1426 | * resource held | ||
1421 | * @c3cn: the iscsi tcp connection | 1427 | * @c3cn: the iscsi tcp connection |
1422 | */ | 1428 | */ |
1423 | void cxgb3i_c3cn_release(struct s3_conn *c3cn) | 1429 | void cxgb3i_c3cn_release(struct s3_conn *c3cn) |
1424 | { | 1430 | { |
1425 | c3cn_conn_debug("c3cn 0x%p, s %u, f 0x%lx.\n", | 1431 | c3cn_conn_debug("c3cn 0x%p, s %u, f 0x%lx.\n", |
1426 | c3cn, c3cn->state, c3cn->flags); | 1432 | c3cn, c3cn->state, c3cn->flags); |
1427 | if (likely(c3cn->state != C3CN_STATE_CONNECTING)) | 1433 | if (unlikely(c3cn->state == C3CN_STATE_CONNECTING)) |
1428 | c3cn_active_close(c3cn); | ||
1429 | else | ||
1430 | c3cn_set_flag(c3cn, C3CN_ACTIVE_CLOSE_NEEDED); | 1434 | c3cn_set_flag(c3cn, C3CN_ACTIVE_CLOSE_NEEDED); |
1435 | else if (likely(c3cn->state != C3CN_STATE_CLOSED)) | ||
1436 | c3cn_active_close(c3cn); | ||
1431 | c3cn_put(c3cn); | 1437 | c3cn_put(c3cn); |
1432 | } | 1438 | } |
1433 | 1439 | ||
@@ -1656,7 +1662,6 @@ int cxgb3i_c3cn_connect(struct s3_conn *c3cn, struct sockaddr_in *usin) | |||
1656 | c3cn_set_state(c3cn, C3CN_STATE_CLOSED); | 1662 | c3cn_set_state(c3cn, C3CN_STATE_CLOSED); |
1657 | ip_rt_put(rt); | 1663 | ip_rt_put(rt); |
1658 | c3cn_put_port(c3cn); | 1664 | c3cn_put_port(c3cn); |
1659 | c3cn->daddr.sin_port = 0; | ||
1660 | return err; | 1665 | return err; |
1661 | } | 1666 | } |
1662 | 1667 | ||
@@ -1776,10 +1781,25 @@ out_err: | |||
1776 | static void sdev_data_cleanup(struct cxgb3i_sdev_data *cdata) | 1781 | static void sdev_data_cleanup(struct cxgb3i_sdev_data *cdata) |
1777 | { | 1782 | { |
1778 | struct adap_ports *ports = &cdata->ports; | 1783 | struct adap_ports *ports = &cdata->ports; |
1784 | struct s3_conn *c3cn; | ||
1779 | int i; | 1785 | int i; |
1780 | 1786 | ||
1787 | for (i = 0; i < cxgb3_max_connect; i++) { | ||
1788 | if (cdata->sport_conn[i]) { | ||
1789 | c3cn = cdata->sport_conn[i]; | ||
1790 | cdata->sport_conn[i] = NULL; | ||
1791 | |||
1792 | spin_lock_bh(&c3cn->lock); | ||
1793 | c3cn->cdev = NULL; | ||
1794 | c3cn_set_flag(c3cn, C3CN_OFFLOAD_DOWN); | ||
1795 | c3cn_closed(c3cn); | ||
1796 | spin_unlock_bh(&c3cn->lock); | ||
1797 | } | ||
1798 | } | ||
1799 | |||
1781 | for (i = 0; i < ports->nports; i++) | 1800 | for (i = 0; i < ports->nports; i++) |
1782 | NDEV2CDATA(ports->lldevs[i]) = NULL; | 1801 | NDEV2CDATA(ports->lldevs[i]) = NULL; |
1802 | |||
1783 | cxgb3i_free_big_mem(cdata); | 1803 | cxgb3i_free_big_mem(cdata); |
1784 | } | 1804 | } |
1785 | 1805 | ||
@@ -1821,21 +1841,27 @@ void cxgb3i_sdev_add(struct t3cdev *cdev, struct cxgb3_client *client) | |||
1821 | struct cxgb3i_sdev_data *cdata; | 1841 | struct cxgb3i_sdev_data *cdata; |
1822 | struct ofld_page_info rx_page_info; | 1842 | struct ofld_page_info rx_page_info; |
1823 | unsigned int wr_len; | 1843 | unsigned int wr_len; |
1824 | int mapsize = DIV_ROUND_UP(cxgb3_max_connect, | 1844 | int mapsize = cxgb3_max_connect * sizeof(struct s3_conn *); |
1825 | 8 * sizeof(unsigned long)); | ||
1826 | int i; | 1845 | int i; |
1827 | 1846 | ||
1828 | cdata = cxgb3i_alloc_big_mem(sizeof(*cdata) + mapsize, GFP_KERNEL); | 1847 | cdata = cxgb3i_alloc_big_mem(sizeof(*cdata) + mapsize, GFP_KERNEL); |
1829 | if (!cdata) | 1848 | if (!cdata) { |
1849 | cxgb3i_log_warn("t3dev 0x%p, offload up, OOM %d.\n", | ||
1850 | cdev, mapsize); | ||
1830 | return; | 1851 | return; |
1852 | } | ||
1831 | 1853 | ||
1832 | if (cdev->ctl(cdev, GET_WR_LEN, &wr_len) < 0 || | 1854 | if (cdev->ctl(cdev, GET_WR_LEN, &wr_len) < 0 || |
1833 | cdev->ctl(cdev, GET_PORTS, &cdata->ports) < 0 || | 1855 | cdev->ctl(cdev, GET_PORTS, &cdata->ports) < 0 || |
1834 | cdev->ctl(cdev, GET_RX_PAGE_INFO, &rx_page_info) < 0) | 1856 | cdev->ctl(cdev, GET_RX_PAGE_INFO, &rx_page_info) < 0) { |
1857 | cxgb3i_log_warn("t3dev 0x%p, offload up, ioctl failed.\n", | ||
1858 | cdev); | ||
1835 | goto free_cdata; | 1859 | goto free_cdata; |
1860 | } | ||
1836 | 1861 | ||
1837 | s3_init_wr_tab(wr_len); | 1862 | s3_init_wr_tab(wr_len); |
1838 | 1863 | ||
1864 | spin_lock_init(&cdata->lock); | ||
1839 | INIT_LIST_HEAD(&cdata->list); | 1865 | INIT_LIST_HEAD(&cdata->list); |
1840 | cdata->cdev = cdev; | 1866 | cdata->cdev = cdev; |
1841 | cdata->client = client; | 1867 | cdata->client = client; |
@@ -1847,6 +1873,7 @@ void cxgb3i_sdev_add(struct t3cdev *cdev, struct cxgb3_client *client) | |||
1847 | list_add_tail(&cdata->list, &cdata_list); | 1873 | list_add_tail(&cdata->list, &cdata_list); |
1848 | write_unlock(&cdata_rwlock); | 1874 | write_unlock(&cdata_rwlock); |
1849 | 1875 | ||
1876 | cxgb3i_log_info("t3dev 0x%p, offload up, added.\n", cdev); | ||
1850 | return; | 1877 | return; |
1851 | 1878 | ||
1852 | free_cdata: | 1879 | free_cdata: |
@@ -1861,6 +1888,8 @@ void cxgb3i_sdev_remove(struct t3cdev *cdev) | |||
1861 | { | 1888 | { |
1862 | struct cxgb3i_sdev_data *cdata = CXGB3_SDEV_DATA(cdev); | 1889 | struct cxgb3i_sdev_data *cdata = CXGB3_SDEV_DATA(cdev); |
1863 | 1890 | ||
1891 | cxgb3i_log_info("t3dev 0x%p, offload down, remove.\n", cdev); | ||
1892 | |||
1864 | write_lock(&cdata_rwlock); | 1893 | write_lock(&cdata_rwlock); |
1865 | list_del(&cdata->list); | 1894 | list_del(&cdata->list); |
1866 | write_unlock(&cdata_rwlock); | 1895 | write_unlock(&cdata_rwlock); |
diff --git a/drivers/scsi/cxgb3i/cxgb3i_offload.h b/drivers/scsi/cxgb3i/cxgb3i_offload.h index 275f23f16eb7..ebfca960c0a9 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_offload.h +++ b/drivers/scsi/cxgb3i/cxgb3i_offload.h | |||
@@ -16,7 +16,7 @@ | |||
16 | #define _CXGB3I_OFFLOAD_H | 16 | #define _CXGB3I_OFFLOAD_H |
17 | 17 | ||
18 | #include <linux/skbuff.h> | 18 | #include <linux/skbuff.h> |
19 | #include <net/tcp.h> | 19 | #include <linux/in.h> |
20 | 20 | ||
21 | #include "common.h" | 21 | #include "common.h" |
22 | #include "adapter.h" | 22 | #include "adapter.h" |
@@ -135,11 +135,11 @@ enum c3cn_flags { | |||
135 | C3CN_ABORT_RPL_PENDING, /* expecting an abort reply */ | 135 | C3CN_ABORT_RPL_PENDING, /* expecting an abort reply */ |
136 | C3CN_TX_DATA_SENT, /* already sent a TX_DATA WR */ | 136 | C3CN_TX_DATA_SENT, /* already sent a TX_DATA WR */ |
137 | C3CN_ACTIVE_CLOSE_NEEDED, /* need to be closed */ | 137 | C3CN_ACTIVE_CLOSE_NEEDED, /* need to be closed */ |
138 | C3CN_OFFLOAD_DOWN /* offload function off */ | ||
138 | }; | 139 | }; |
139 | 140 | ||
140 | /** | 141 | /** |
141 | * cxgb3i_sdev_data - Per adapter data. | 142 | * cxgb3i_sdev_data - Per adapter data. |
142 | * | ||
143 | * Linked off of each Ethernet device port on the adapter. | 143 | * Linked off of each Ethernet device port on the adapter. |
144 | * Also available via the t3cdev structure since we have pointers to our port | 144 | * Also available via the t3cdev structure since we have pointers to our port |
145 | * net_device's there ... | 145 | * net_device's there ... |
@@ -148,16 +148,17 @@ enum c3cn_flags { | |||
148 | * @cdev: t3cdev adapter | 148 | * @cdev: t3cdev adapter |
149 | * @client: CPL client pointer | 149 | * @client: CPL client pointer |
150 | * @ports: array of adapter ports | 150 | * @ports: array of adapter ports |
151 | * @sport_map_next: next index into the port map | 151 | * @sport_next: next port |
152 | * @sport_map: source port map | 152 | * @sport_conn: source port connection |
153 | */ | 153 | */ |
154 | struct cxgb3i_sdev_data { | 154 | struct cxgb3i_sdev_data { |
155 | struct list_head list; | 155 | struct list_head list; |
156 | struct t3cdev *cdev; | 156 | struct t3cdev *cdev; |
157 | struct cxgb3_client *client; | 157 | struct cxgb3_client *client; |
158 | struct adap_ports ports; | 158 | struct adap_ports ports; |
159 | unsigned int sport_map_next; | 159 | spinlock_t lock; |
160 | unsigned long sport_map[0]; | 160 | unsigned int sport_next; |
161 | struct s3_conn *sport_conn[0]; | ||
161 | }; | 162 | }; |
162 | #define NDEV2CDATA(ndev) (*(struct cxgb3i_sdev_data **)&(ndev)->ec_ptr) | 163 | #define NDEV2CDATA(ndev) (*(struct cxgb3i_sdev_data **)&(ndev)->ec_ptr) |
163 | #define CXGB3_SDEV_DATA(cdev) NDEV2CDATA((cdev)->lldev) | 164 | #define CXGB3_SDEV_DATA(cdev) NDEV2CDATA((cdev)->lldev) |
diff --git a/drivers/scsi/fcoe/Makefile b/drivers/scsi/fcoe/Makefile index b78da06d7c0e..950f27615c76 100644 --- a/drivers/scsi/fcoe/Makefile +++ b/drivers/scsi/fcoe/Makefile | |||
@@ -1,8 +1,2 @@ | |||
1 | # $Id: Makefile | ||
2 | |||
3 | obj-$(CONFIG_FCOE) += fcoe.o | 1 | obj-$(CONFIG_FCOE) += fcoe.o |
4 | 2 | obj-$(CONFIG_LIBFCOE) += libfcoe.o | |
5 | fcoe-y := \ | ||
6 | libfcoe.o \ | ||
7 | fcoe_sw.o \ | ||
8 | fc_transport_fcoe.o | ||
diff --git a/drivers/scsi/fcoe/fc_transport_fcoe.c b/drivers/scsi/fcoe/fc_transport_fcoe.c deleted file mode 100644 index 8862758006c0..000000000000 --- a/drivers/scsi/fcoe/fc_transport_fcoe.c +++ /dev/null | |||
@@ -1,443 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright(c) 2007 - 2008 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License along with | ||
14 | * this program; if not, write to the Free Software Foundation, Inc., | ||
15 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
16 | * | ||
17 | * Maintained at www.Open-FCoE.org | ||
18 | */ | ||
19 | |||
20 | #include <linux/pci.h> | ||
21 | #include <scsi/libfcoe.h> | ||
22 | #include <scsi/fc_transport_fcoe.h> | ||
23 | |||
24 | /* internal fcoe transport */ | ||
25 | struct fcoe_transport_internal { | ||
26 | struct fcoe_transport *t; | ||
27 | struct net_device *netdev; | ||
28 | struct list_head list; | ||
29 | }; | ||
30 | |||
31 | /* fcoe transports list and its lock */ | ||
32 | static LIST_HEAD(fcoe_transports); | ||
33 | static DEFINE_MUTEX(fcoe_transports_lock); | ||
34 | |||
35 | /** | ||
36 | * fcoe_transport_default() - Returns ptr to the default transport fcoe_sw | ||
37 | */ | ||
38 | struct fcoe_transport *fcoe_transport_default(void) | ||
39 | { | ||
40 | return &fcoe_sw_transport; | ||
41 | } | ||
42 | |||
43 | /** | ||
44 | * fcoe_transport_to_pcidev() - get the pci dev from a netdev | ||
45 | * @netdev: the netdev that pci dev will be retrived from | ||
46 | * | ||
47 | * Returns: NULL or the corrsponding pci_dev | ||
48 | */ | ||
49 | struct pci_dev *fcoe_transport_pcidev(const struct net_device *netdev) | ||
50 | { | ||
51 | if (!netdev->dev.parent) | ||
52 | return NULL; | ||
53 | return to_pci_dev(netdev->dev.parent); | ||
54 | } | ||
55 | |||
56 | /** | ||
57 | * fcoe_transport_device_lookup() - Lookup a transport | ||
58 | * @netdev: the netdev the transport to be attached to | ||
59 | * | ||
60 | * This will look for existing offload driver, if not found, it falls back to | ||
61 | * the default sw hba (fcoe_sw) as its fcoe transport. | ||
62 | * | ||
63 | * Returns: 0 for success | ||
64 | */ | ||
65 | static struct fcoe_transport_internal * | ||
66 | fcoe_transport_device_lookup(struct fcoe_transport *t, | ||
67 | struct net_device *netdev) | ||
68 | { | ||
69 | struct fcoe_transport_internal *ti; | ||
70 | |||
71 | /* assign the transpor to this device */ | ||
72 | mutex_lock(&t->devlock); | ||
73 | list_for_each_entry(ti, &t->devlist, list) { | ||
74 | if (ti->netdev == netdev) { | ||
75 | mutex_unlock(&t->devlock); | ||
76 | return ti; | ||
77 | } | ||
78 | } | ||
79 | mutex_unlock(&t->devlock); | ||
80 | return NULL; | ||
81 | } | ||
82 | /** | ||
83 | * fcoe_transport_device_add() - Assign a transport to a device | ||
84 | * @netdev: the netdev the transport to be attached to | ||
85 | * | ||
86 | * This will look for existing offload driver, if not found, it falls back to | ||
87 | * the default sw hba (fcoe_sw) as its fcoe transport. | ||
88 | * | ||
89 | * Returns: 0 for success | ||
90 | */ | ||
91 | static int fcoe_transport_device_add(struct fcoe_transport *t, | ||
92 | struct net_device *netdev) | ||
93 | { | ||
94 | struct fcoe_transport_internal *ti; | ||
95 | |||
96 | ti = fcoe_transport_device_lookup(t, netdev); | ||
97 | if (ti) { | ||
98 | printk(KERN_DEBUG "fcoe_transport_device_add:" | ||
99 | "device %s is already added to transport %s\n", | ||
100 | netdev->name, t->name); | ||
101 | return -EEXIST; | ||
102 | } | ||
103 | /* allocate an internal struct to host the netdev and the list */ | ||
104 | ti = kzalloc(sizeof(*ti), GFP_KERNEL); | ||
105 | if (!ti) | ||
106 | return -ENOMEM; | ||
107 | |||
108 | ti->t = t; | ||
109 | ti->netdev = netdev; | ||
110 | INIT_LIST_HEAD(&ti->list); | ||
111 | dev_hold(ti->netdev); | ||
112 | |||
113 | mutex_lock(&t->devlock); | ||
114 | list_add(&ti->list, &t->devlist); | ||
115 | mutex_unlock(&t->devlock); | ||
116 | |||
117 | printk(KERN_DEBUG "fcoe_transport_device_add:" | ||
118 | "device %s added to transport %s\n", | ||
119 | netdev->name, t->name); | ||
120 | |||
121 | return 0; | ||
122 | } | ||
123 | |||
124 | /** | ||
125 | * fcoe_transport_device_remove() - Remove a device from its transport | ||
126 | * @netdev: the netdev the transport to be attached to | ||
127 | * | ||
128 | * This removes the device from the transport so the given transport will | ||
129 | * not manage this device any more | ||
130 | * | ||
131 | * Returns: 0 for success | ||
132 | */ | ||
133 | static int fcoe_transport_device_remove(struct fcoe_transport *t, | ||
134 | struct net_device *netdev) | ||
135 | { | ||
136 | struct fcoe_transport_internal *ti; | ||
137 | |||
138 | ti = fcoe_transport_device_lookup(t, netdev); | ||
139 | if (!ti) { | ||
140 | printk(KERN_DEBUG "fcoe_transport_device_remove:" | ||
141 | "device %s is not managed by transport %s\n", | ||
142 | netdev->name, t->name); | ||
143 | return -ENODEV; | ||
144 | } | ||
145 | mutex_lock(&t->devlock); | ||
146 | list_del(&ti->list); | ||
147 | mutex_unlock(&t->devlock); | ||
148 | printk(KERN_DEBUG "fcoe_transport_device_remove:" | ||
149 | "device %s removed from transport %s\n", | ||
150 | netdev->name, t->name); | ||
151 | dev_put(ti->netdev); | ||
152 | kfree(ti); | ||
153 | return 0; | ||
154 | } | ||
155 | |||
156 | /** | ||
157 | * fcoe_transport_device_remove_all() - Remove all from transport devlist | ||
158 | * | ||
159 | * This removes the device from the transport so the given transport will | ||
160 | * not manage this device any more | ||
161 | * | ||
162 | * Returns: 0 for success | ||
163 | */ | ||
164 | static void fcoe_transport_device_remove_all(struct fcoe_transport *t) | ||
165 | { | ||
166 | struct fcoe_transport_internal *ti, *tmp; | ||
167 | |||
168 | mutex_lock(&t->devlock); | ||
169 | list_for_each_entry_safe(ti, tmp, &t->devlist, list) { | ||
170 | list_del(&ti->list); | ||
171 | kfree(ti); | ||
172 | } | ||
173 | mutex_unlock(&t->devlock); | ||
174 | } | ||
175 | |||
176 | /** | ||
177 | * fcoe_transport_match() - Use the bus device match function to match the hw | ||
178 | * @t: The fcoe transport to check | ||
179 | * @netdev: The netdev to match against | ||
180 | * | ||
181 | * This function is used to check if the given transport wants to manage the | ||
182 | * input netdev. if the transports implements the match function, it will be | ||
183 | * called, o.w. we just compare the pci vendor and device id. | ||
184 | * | ||
185 | * Returns: true for match up | ||
186 | */ | ||
187 | static bool fcoe_transport_match(struct fcoe_transport *t, | ||
188 | struct net_device *netdev) | ||
189 | { | ||
190 | /* match transport by vendor and device id */ | ||
191 | struct pci_dev *pci; | ||
192 | |||
193 | pci = fcoe_transport_pcidev(netdev); | ||
194 | |||
195 | if (pci) { | ||
196 | printk(KERN_DEBUG "fcoe_transport_match:" | ||
197 | "%s:%x:%x -- %s:%x:%x\n", | ||
198 | t->name, t->vendor, t->device, | ||
199 | netdev->name, pci->vendor, pci->device); | ||
200 | |||
201 | /* if transport supports match */ | ||
202 | if (t->match) | ||
203 | return t->match(netdev); | ||
204 | |||
205 | /* else just compare the vendor and device id: pci only */ | ||
206 | return (t->vendor == pci->vendor) && (t->device == pci->device); | ||
207 | } | ||
208 | return false; | ||
209 | } | ||
210 | |||
211 | /** | ||
212 | * fcoe_transport_lookup() - Check if the transport is already registered | ||
213 | * @t: the transport to be looked up | ||
214 | * | ||
215 | * This compares the parent device (pci) vendor and device id | ||
216 | * | ||
217 | * Returns: NULL if not found | ||
218 | * | ||
219 | * TODO: return default sw transport if no other transport is found | ||
220 | */ | ||
221 | static struct fcoe_transport * | ||
222 | fcoe_transport_lookup(struct net_device *netdev) | ||
223 | { | ||
224 | struct fcoe_transport *t; | ||
225 | |||
226 | mutex_lock(&fcoe_transports_lock); | ||
227 | list_for_each_entry(t, &fcoe_transports, list) { | ||
228 | if (fcoe_transport_match(t, netdev)) { | ||
229 | mutex_unlock(&fcoe_transports_lock); | ||
230 | return t; | ||
231 | } | ||
232 | } | ||
233 | mutex_unlock(&fcoe_transports_lock); | ||
234 | |||
235 | printk(KERN_DEBUG "fcoe_transport_lookup:" | ||
236 | "use default transport for %s\n", netdev->name); | ||
237 | return fcoe_transport_default(); | ||
238 | } | ||
239 | |||
240 | /** | ||
241 | * fcoe_transport_register() - Adds a fcoe transport to the fcoe transports list | ||
242 | * @t: ptr to the fcoe transport to be added | ||
243 | * | ||
244 | * Returns: 0 for success | ||
245 | */ | ||
246 | int fcoe_transport_register(struct fcoe_transport *t) | ||
247 | { | ||
248 | struct fcoe_transport *tt; | ||
249 | |||
250 | /* TODO - add fcoe_transport specific initialization here */ | ||
251 | mutex_lock(&fcoe_transports_lock); | ||
252 | list_for_each_entry(tt, &fcoe_transports, list) { | ||
253 | if (tt == t) { | ||
254 | mutex_unlock(&fcoe_transports_lock); | ||
255 | return -EEXIST; | ||
256 | } | ||
257 | } | ||
258 | list_add_tail(&t->list, &fcoe_transports); | ||
259 | mutex_unlock(&fcoe_transports_lock); | ||
260 | |||
261 | printk(KERN_DEBUG "fcoe_transport_register:%s\n", t->name); | ||
262 | |||
263 | return 0; | ||
264 | } | ||
265 | EXPORT_SYMBOL_GPL(fcoe_transport_register); | ||
266 | |||
267 | /** | ||
268 | * fcoe_transport_unregister() - Remove the tranport fro the fcoe transports list | ||
269 | * @t: ptr to the fcoe transport to be removed | ||
270 | * | ||
271 | * Returns: 0 for success | ||
272 | */ | ||
273 | int fcoe_transport_unregister(struct fcoe_transport *t) | ||
274 | { | ||
275 | struct fcoe_transport *tt, *tmp; | ||
276 | |||
277 | mutex_lock(&fcoe_transports_lock); | ||
278 | list_for_each_entry_safe(tt, tmp, &fcoe_transports, list) { | ||
279 | if (tt == t) { | ||
280 | list_del(&t->list); | ||
281 | mutex_unlock(&fcoe_transports_lock); | ||
282 | fcoe_transport_device_remove_all(t); | ||
283 | printk(KERN_DEBUG "fcoe_transport_unregister:%s\n", | ||
284 | t->name); | ||
285 | return 0; | ||
286 | } | ||
287 | } | ||
288 | mutex_unlock(&fcoe_transports_lock); | ||
289 | return -ENODEV; | ||
290 | } | ||
291 | EXPORT_SYMBOL_GPL(fcoe_transport_unregister); | ||
292 | |||
293 | /** | ||
294 | * fcoe_load_transport_driver() - Load an offload driver by alias name | ||
295 | * @netdev: the target net device | ||
296 | * | ||
297 | * Requests for an offload driver module as the fcoe transport, if fails, it | ||
298 | * falls back to use the SW HBA (fcoe_sw) as its transport | ||
299 | * | ||
300 | * TODO - | ||
301 | * 1. supports only PCI device | ||
302 | * 2. needs fix for VLAn and bonding | ||
303 | * 3. pure hw fcoe hba may not have netdev | ||
304 | * | ||
305 | * Returns: 0 for success | ||
306 | */ | ||
307 | int fcoe_load_transport_driver(struct net_device *netdev) | ||
308 | { | ||
309 | struct pci_dev *pci; | ||
310 | struct device *dev = netdev->dev.parent; | ||
311 | |||
312 | if (fcoe_transport_lookup(netdev)) { | ||
313 | /* load default transport */ | ||
314 | printk(KERN_DEBUG "fcoe: already loaded transport for %s\n", | ||
315 | netdev->name); | ||
316 | return -EEXIST; | ||
317 | } | ||
318 | |||
319 | pci = to_pci_dev(dev); | ||
320 | if (dev->bus != &pci_bus_type) { | ||
321 | printk(KERN_DEBUG "fcoe: support noly PCI device\n"); | ||
322 | return -ENODEV; | ||
323 | } | ||
324 | printk(KERN_DEBUG "fcoe: loading driver fcoe-pci-0x%04x-0x%04x\n", | ||
325 | pci->vendor, pci->device); | ||
326 | |||
327 | return request_module("fcoe-pci-0x%04x-0x%04x", | ||
328 | pci->vendor, pci->device); | ||
329 | |||
330 | } | ||
331 | EXPORT_SYMBOL_GPL(fcoe_load_transport_driver); | ||
332 | |||
333 | /** | ||
334 | * fcoe_transport_attach() - Load transport to fcoe | ||
335 | * @netdev: the netdev the transport to be attached to | ||
336 | * | ||
337 | * This will look for existing offload driver, if not found, it falls back to | ||
338 | * the default sw hba (fcoe_sw) as its fcoe transport. | ||
339 | * | ||
340 | * Returns: 0 for success | ||
341 | */ | ||
342 | int fcoe_transport_attach(struct net_device *netdev) | ||
343 | { | ||
344 | struct fcoe_transport *t; | ||
345 | |||
346 | /* find the corresponding transport */ | ||
347 | t = fcoe_transport_lookup(netdev); | ||
348 | if (!t) { | ||
349 | printk(KERN_DEBUG "fcoe_transport_attach" | ||
350 | ":no transport for %s:use %s\n", | ||
351 | netdev->name, t->name); | ||
352 | return -ENODEV; | ||
353 | } | ||
354 | /* add to the transport */ | ||
355 | if (fcoe_transport_device_add(t, netdev)) { | ||
356 | printk(KERN_DEBUG "fcoe_transport_attach" | ||
357 | ":failed to add %s to tramsport %s\n", | ||
358 | netdev->name, t->name); | ||
359 | return -EIO; | ||
360 | } | ||
361 | /* transport create function */ | ||
362 | if (t->create) | ||
363 | t->create(netdev); | ||
364 | |||
365 | printk(KERN_DEBUG "fcoe_transport_attach:transport %s for %s\n", | ||
366 | t->name, netdev->name); | ||
367 | return 0; | ||
368 | } | ||
369 | EXPORT_SYMBOL_GPL(fcoe_transport_attach); | ||
370 | |||
371 | /** | ||
372 | * fcoe_transport_release() - Unload transport from fcoe | ||
373 | * @netdev: the net device on which fcoe is to be released | ||
374 | * | ||
375 | * Returns: 0 for success | ||
376 | */ | ||
377 | int fcoe_transport_release(struct net_device *netdev) | ||
378 | { | ||
379 | struct fcoe_transport *t; | ||
380 | |||
381 | /* find the corresponding transport */ | ||
382 | t = fcoe_transport_lookup(netdev); | ||
383 | if (!t) { | ||
384 | printk(KERN_DEBUG "fcoe_transport_release:" | ||
385 | "no transport for %s:use %s\n", | ||
386 | netdev->name, t->name); | ||
387 | return -ENODEV; | ||
388 | } | ||
389 | /* remove the device from the transport */ | ||
390 | if (fcoe_transport_device_remove(t, netdev)) { | ||
391 | printk(KERN_DEBUG "fcoe_transport_release:" | ||
392 | "failed to add %s to tramsport %s\n", | ||
393 | netdev->name, t->name); | ||
394 | return -EIO; | ||
395 | } | ||
396 | /* transport destroy function */ | ||
397 | if (t->destroy) | ||
398 | t->destroy(netdev); | ||
399 | |||
400 | printk(KERN_DEBUG "fcoe_transport_release:" | ||
401 | "device %s dettached from transport %s\n", | ||
402 | netdev->name, t->name); | ||
403 | |||
404 | return 0; | ||
405 | } | ||
406 | EXPORT_SYMBOL_GPL(fcoe_transport_release); | ||
407 | |||
408 | /** | ||
409 | * fcoe_transport_init() - Initializes fcoe transport layer | ||
410 | * | ||
411 | * This prepares for the fcoe transport layer | ||
412 | * | ||
413 | * Returns: none | ||
414 | */ | ||
415 | int __init fcoe_transport_init(void) | ||
416 | { | ||
417 | INIT_LIST_HEAD(&fcoe_transports); | ||
418 | mutex_init(&fcoe_transports_lock); | ||
419 | return 0; | ||
420 | } | ||
421 | |||
422 | /** | ||
423 | * fcoe_transport_exit() - Cleans up the fcoe transport layer | ||
424 | * | ||
425 | * This cleans up the fcoe transport layer. removing any transport on the list, | ||
426 | * note that the transport destroy func is not called here. | ||
427 | * | ||
428 | * Returns: none | ||
429 | */ | ||
430 | int __exit fcoe_transport_exit(void) | ||
431 | { | ||
432 | struct fcoe_transport *t, *tmp; | ||
433 | |||
434 | mutex_lock(&fcoe_transports_lock); | ||
435 | list_for_each_entry_safe(t, tmp, &fcoe_transports, list) { | ||
436 | list_del(&t->list); | ||
437 | mutex_unlock(&fcoe_transports_lock); | ||
438 | fcoe_transport_device_remove_all(t); | ||
439 | mutex_lock(&fcoe_transports_lock); | ||
440 | } | ||
441 | mutex_unlock(&fcoe_transports_lock); | ||
442 | return 0; | ||
443 | } | ||
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c new file mode 100644 index 000000000000..94e1e3189773 --- /dev/null +++ b/drivers/scsi/fcoe/fcoe.c | |||
@@ -0,0 +1,1878 @@ | |||
1 | /* | ||
2 | * Copyright(c) 2007 - 2008 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License along with | ||
14 | * this program; if not, write to the Free Software Foundation, Inc., | ||
15 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
16 | * | ||
17 | * Maintained at www.Open-FCoE.org | ||
18 | */ | ||
19 | |||
20 | #include <linux/module.h> | ||
21 | #include <linux/version.h> | ||
22 | #include <linux/spinlock.h> | ||
23 | #include <linux/netdevice.h> | ||
24 | #include <linux/etherdevice.h> | ||
25 | #include <linux/ethtool.h> | ||
26 | #include <linux/if_ether.h> | ||
27 | #include <linux/if_vlan.h> | ||
28 | #include <linux/crc32.h> | ||
29 | #include <linux/cpu.h> | ||
30 | #include <linux/fs.h> | ||
31 | #include <linux/sysfs.h> | ||
32 | #include <linux/ctype.h> | ||
33 | #include <scsi/scsi_tcq.h> | ||
34 | #include <scsi/scsicam.h> | ||
35 | #include <scsi/scsi_transport.h> | ||
36 | #include <scsi/scsi_transport_fc.h> | ||
37 | #include <net/rtnetlink.h> | ||
38 | |||
39 | #include <scsi/fc/fc_encaps.h> | ||
40 | #include <scsi/fc/fc_fip.h> | ||
41 | |||
42 | #include <scsi/libfc.h> | ||
43 | #include <scsi/fc_frame.h> | ||
44 | #include <scsi/libfcoe.h> | ||
45 | |||
46 | #include "fcoe.h" | ||
47 | |||
48 | static int debug_fcoe; | ||
49 | |||
50 | MODULE_AUTHOR("Open-FCoE.org"); | ||
51 | MODULE_DESCRIPTION("FCoE"); | ||
52 | MODULE_LICENSE("GPL v2"); | ||
53 | |||
54 | /* fcoe host list */ | ||
55 | LIST_HEAD(fcoe_hostlist); | ||
56 | DEFINE_RWLOCK(fcoe_hostlist_lock); | ||
57 | DEFINE_TIMER(fcoe_timer, NULL, 0, 0); | ||
58 | DEFINE_PER_CPU(struct fcoe_percpu_s, fcoe_percpu); | ||
59 | |||
60 | /* Function Prototyes */ | ||
61 | static int fcoe_reset(struct Scsi_Host *shost); | ||
62 | static int fcoe_xmit(struct fc_lport *, struct fc_frame *); | ||
63 | static int fcoe_rcv(struct sk_buff *, struct net_device *, | ||
64 | struct packet_type *, struct net_device *); | ||
65 | static int fcoe_percpu_receive_thread(void *arg); | ||
66 | static void fcoe_clean_pending_queue(struct fc_lport *lp); | ||
67 | static void fcoe_percpu_clean(struct fc_lport *lp); | ||
68 | static int fcoe_link_ok(struct fc_lport *lp); | ||
69 | |||
70 | static struct fc_lport *fcoe_hostlist_lookup(const struct net_device *); | ||
71 | static int fcoe_hostlist_add(const struct fc_lport *); | ||
72 | static int fcoe_hostlist_remove(const struct fc_lport *); | ||
73 | |||
74 | static int fcoe_check_wait_queue(struct fc_lport *); | ||
75 | static int fcoe_device_notification(struct notifier_block *, ulong, void *); | ||
76 | static void fcoe_dev_setup(void); | ||
77 | static void fcoe_dev_cleanup(void); | ||
78 | |||
79 | /* notification function from net device */ | ||
80 | static struct notifier_block fcoe_notifier = { | ||
81 | .notifier_call = fcoe_device_notification, | ||
82 | }; | ||
83 | |||
84 | static struct scsi_transport_template *scsi_transport_fcoe_sw; | ||
85 | |||
86 | struct fc_function_template fcoe_transport_function = { | ||
87 | .show_host_node_name = 1, | ||
88 | .show_host_port_name = 1, | ||
89 | .show_host_supported_classes = 1, | ||
90 | .show_host_supported_fc4s = 1, | ||
91 | .show_host_active_fc4s = 1, | ||
92 | .show_host_maxframe_size = 1, | ||
93 | |||
94 | .show_host_port_id = 1, | ||
95 | .show_host_supported_speeds = 1, | ||
96 | .get_host_speed = fc_get_host_speed, | ||
97 | .show_host_speed = 1, | ||
98 | .show_host_port_type = 1, | ||
99 | .get_host_port_state = fc_get_host_port_state, | ||
100 | .show_host_port_state = 1, | ||
101 | .show_host_symbolic_name = 1, | ||
102 | |||
103 | .dd_fcrport_size = sizeof(struct fc_rport_libfc_priv), | ||
104 | .show_rport_maxframe_size = 1, | ||
105 | .show_rport_supported_classes = 1, | ||
106 | |||
107 | .show_host_fabric_name = 1, | ||
108 | .show_starget_node_name = 1, | ||
109 | .show_starget_port_name = 1, | ||
110 | .show_starget_port_id = 1, | ||
111 | .set_rport_dev_loss_tmo = fc_set_rport_loss_tmo, | ||
112 | .show_rport_dev_loss_tmo = 1, | ||
113 | .get_fc_host_stats = fc_get_host_stats, | ||
114 | .issue_fc_host_lip = fcoe_reset, | ||
115 | |||
116 | .terminate_rport_io = fc_rport_terminate_io, | ||
117 | }; | ||
118 | |||
119 | static struct scsi_host_template fcoe_shost_template = { | ||
120 | .module = THIS_MODULE, | ||
121 | .name = "FCoE Driver", | ||
122 | .proc_name = FCOE_NAME, | ||
123 | .queuecommand = fc_queuecommand, | ||
124 | .eh_abort_handler = fc_eh_abort, | ||
125 | .eh_device_reset_handler = fc_eh_device_reset, | ||
126 | .eh_host_reset_handler = fc_eh_host_reset, | ||
127 | .slave_alloc = fc_slave_alloc, | ||
128 | .change_queue_depth = fc_change_queue_depth, | ||
129 | .change_queue_type = fc_change_queue_type, | ||
130 | .this_id = -1, | ||
131 | .cmd_per_lun = 32, | ||
132 | .can_queue = FCOE_MAX_OUTSTANDING_COMMANDS, | ||
133 | .use_clustering = ENABLE_CLUSTERING, | ||
134 | .sg_tablesize = SG_ALL, | ||
135 | .max_sectors = 0xffff, | ||
136 | }; | ||
137 | |||
138 | /** | ||
139 | * fcoe_lport_config() - sets up the fc_lport | ||
140 | * @lp: ptr to the fc_lport | ||
141 | * @shost: ptr to the parent scsi host | ||
142 | * | ||
143 | * Returns: 0 for success | ||
144 | */ | ||
145 | static int fcoe_lport_config(struct fc_lport *lp) | ||
146 | { | ||
147 | lp->link_up = 0; | ||
148 | lp->qfull = 0; | ||
149 | lp->max_retry_count = 3; | ||
150 | lp->e_d_tov = 2 * 1000; /* FC-FS default */ | ||
151 | lp->r_a_tov = 2 * 2 * 1000; | ||
152 | lp->service_params = (FCP_SPPF_INIT_FCN | FCP_SPPF_RD_XRDY_DIS | | ||
153 | FCP_SPPF_RETRY | FCP_SPPF_CONF_COMPL); | ||
154 | |||
155 | fc_lport_init_stats(lp); | ||
156 | |||
157 | /* lport fc_lport related configuration */ | ||
158 | fc_lport_config(lp); | ||
159 | |||
160 | /* offload related configuration */ | ||
161 | lp->crc_offload = 0; | ||
162 | lp->seq_offload = 0; | ||
163 | lp->lro_enabled = 0; | ||
164 | lp->lro_xid = 0; | ||
165 | lp->lso_max = 0; | ||
166 | |||
167 | return 0; | ||
168 | } | ||
169 | |||
170 | /** | ||
171 | * fcoe_netdev_config() - Set up netdev for SW FCoE | ||
172 | * @lp : ptr to the fc_lport | ||
173 | * @netdev : ptr to the associated netdevice struct | ||
174 | * | ||
175 | * Must be called after fcoe_lport_config() as it will use lport mutex | ||
176 | * | ||
177 | * Returns : 0 for success | ||
178 | */ | ||
179 | static int fcoe_netdev_config(struct fc_lport *lp, struct net_device *netdev) | ||
180 | { | ||
181 | u32 mfs; | ||
182 | u64 wwnn, wwpn; | ||
183 | struct fcoe_softc *fc; | ||
184 | u8 flogi_maddr[ETH_ALEN]; | ||
185 | |||
186 | /* Setup lport private data to point to fcoe softc */ | ||
187 | fc = lport_priv(lp); | ||
188 | fc->ctlr.lp = lp; | ||
189 | fc->real_dev = netdev; | ||
190 | fc->phys_dev = netdev; | ||
191 | |||
192 | /* Require support for get_pauseparam ethtool op. */ | ||
193 | if (netdev->priv_flags & IFF_802_1Q_VLAN) | ||
194 | fc->phys_dev = vlan_dev_real_dev(netdev); | ||
195 | |||
196 | /* Do not support for bonding device */ | ||
197 | if ((fc->real_dev->priv_flags & IFF_MASTER_ALB) || | ||
198 | (fc->real_dev->priv_flags & IFF_SLAVE_INACTIVE) || | ||
199 | (fc->real_dev->priv_flags & IFF_MASTER_8023AD)) { | ||
200 | return -EOPNOTSUPP; | ||
201 | } | ||
202 | |||
203 | /* | ||
204 | * Determine max frame size based on underlying device and optional | ||
205 | * user-configured limit. If the MFS is too low, fcoe_link_ok() | ||
206 | * will return 0, so do this first. | ||
207 | */ | ||
208 | mfs = fc->real_dev->mtu - (sizeof(struct fcoe_hdr) + | ||
209 | sizeof(struct fcoe_crc_eof)); | ||
210 | if (fc_set_mfs(lp, mfs)) | ||
211 | return -EINVAL; | ||
212 | |||
213 | /* offload features support */ | ||
214 | if (fc->real_dev->features & NETIF_F_SG) | ||
215 | lp->sg_supp = 1; | ||
216 | |||
217 | #ifdef NETIF_F_FCOE_CRC | ||
218 | if (netdev->features & NETIF_F_FCOE_CRC) { | ||
219 | lp->crc_offload = 1; | ||
220 | printk(KERN_DEBUG "fcoe:%s supports FCCRC offload\n", | ||
221 | netdev->name); | ||
222 | } | ||
223 | #endif | ||
224 | #ifdef NETIF_F_FSO | ||
225 | if (netdev->features & NETIF_F_FSO) { | ||
226 | lp->seq_offload = 1; | ||
227 | lp->lso_max = netdev->gso_max_size; | ||
228 | printk(KERN_DEBUG "fcoe:%s supports LSO for max len 0x%x\n", | ||
229 | netdev->name, lp->lso_max); | ||
230 | } | ||
231 | #endif | ||
232 | if (netdev->fcoe_ddp_xid) { | ||
233 | lp->lro_enabled = 1; | ||
234 | lp->lro_xid = netdev->fcoe_ddp_xid; | ||
235 | printk(KERN_DEBUG "fcoe:%s supports LRO for max xid 0x%x\n", | ||
236 | netdev->name, lp->lro_xid); | ||
237 | } | ||
238 | skb_queue_head_init(&fc->fcoe_pending_queue); | ||
239 | fc->fcoe_pending_queue_active = 0; | ||
240 | |||
241 | /* setup Source Mac Address */ | ||
242 | memcpy(fc->ctlr.ctl_src_addr, fc->real_dev->dev_addr, | ||
243 | fc->real_dev->addr_len); | ||
244 | |||
245 | wwnn = fcoe_wwn_from_mac(fc->real_dev->dev_addr, 1, 0); | ||
246 | fc_set_wwnn(lp, wwnn); | ||
247 | /* XXX - 3rd arg needs to be vlan id */ | ||
248 | wwpn = fcoe_wwn_from_mac(fc->real_dev->dev_addr, 2, 0); | ||
249 | fc_set_wwpn(lp, wwpn); | ||
250 | |||
251 | /* | ||
252 | * Add FCoE MAC address as second unicast MAC address | ||
253 | * or enter promiscuous mode if not capable of listening | ||
254 | * for multiple unicast MACs. | ||
255 | */ | ||
256 | rtnl_lock(); | ||
257 | memcpy(flogi_maddr, (u8[6]) FC_FCOE_FLOGI_MAC, ETH_ALEN); | ||
258 | dev_unicast_add(fc->real_dev, flogi_maddr, ETH_ALEN); | ||
259 | rtnl_unlock(); | ||
260 | |||
261 | /* | ||
262 | * setup the receive function from ethernet driver | ||
263 | * on the ethertype for the given device | ||
264 | */ | ||
265 | fc->fcoe_packet_type.func = fcoe_rcv; | ||
266 | fc->fcoe_packet_type.type = __constant_htons(ETH_P_FCOE); | ||
267 | fc->fcoe_packet_type.dev = fc->real_dev; | ||
268 | dev_add_pack(&fc->fcoe_packet_type); | ||
269 | |||
270 | return 0; | ||
271 | } | ||
272 | |||
273 | /** | ||
274 | * fcoe_shost_config() - Sets up fc_lport->host | ||
275 | * @lp : ptr to the fc_lport | ||
276 | * @shost : ptr to the associated scsi host | ||
277 | * @dev : device associated to scsi host | ||
278 | * | ||
279 | * Must be called after fcoe_lport_config() and fcoe_netdev_config() | ||
280 | * | ||
281 | * Returns : 0 for success | ||
282 | */ | ||
283 | static int fcoe_shost_config(struct fc_lport *lp, struct Scsi_Host *shost, | ||
284 | struct device *dev) | ||
285 | { | ||
286 | int rc = 0; | ||
287 | |||
288 | /* lport scsi host config */ | ||
289 | lp->host = shost; | ||
290 | |||
291 | lp->host->max_lun = FCOE_MAX_LUN; | ||
292 | lp->host->max_id = FCOE_MAX_FCP_TARGET; | ||
293 | lp->host->max_channel = 0; | ||
294 | lp->host->transportt = scsi_transport_fcoe_sw; | ||
295 | |||
296 | /* add the new host to the SCSI-ml */ | ||
297 | rc = scsi_add_host(lp->host, dev); | ||
298 | if (rc) { | ||
299 | FC_DBG("fcoe_shost_config:error on scsi_add_host\n"); | ||
300 | return rc; | ||
301 | } | ||
302 | sprintf(fc_host_symbolic_name(lp->host), "%s v%s over %s", | ||
303 | FCOE_NAME, FCOE_VERSION, | ||
304 | fcoe_netdev(lp)->name); | ||
305 | |||
306 | return 0; | ||
307 | } | ||
308 | |||
309 | /** | ||
310 | * fcoe_em_config() - allocates em for this lport | ||
311 | * @lp: the port that em is to allocated for | ||
312 | * | ||
313 | * Returns : 0 on success | ||
314 | */ | ||
315 | static inline int fcoe_em_config(struct fc_lport *lp) | ||
316 | { | ||
317 | BUG_ON(lp->emp); | ||
318 | |||
319 | lp->emp = fc_exch_mgr_alloc(lp, FC_CLASS_3, | ||
320 | FCOE_MIN_XID, FCOE_MAX_XID); | ||
321 | if (!lp->emp) | ||
322 | return -ENOMEM; | ||
323 | |||
324 | return 0; | ||
325 | } | ||
326 | |||
327 | /** | ||
328 | * fcoe_if_destroy() - FCoE software HBA tear-down function | ||
329 | * @netdev: ptr to the associated net_device | ||
330 | * | ||
331 | * Returns: 0 if link is OK for use by FCoE. | ||
332 | */ | ||
333 | static int fcoe_if_destroy(struct net_device *netdev) | ||
334 | { | ||
335 | struct fc_lport *lp = NULL; | ||
336 | struct fcoe_softc *fc; | ||
337 | u8 flogi_maddr[ETH_ALEN]; | ||
338 | |||
339 | BUG_ON(!netdev); | ||
340 | |||
341 | printk(KERN_DEBUG "fcoe_if_destroy:interface on %s\n", | ||
342 | netdev->name); | ||
343 | |||
344 | lp = fcoe_hostlist_lookup(netdev); | ||
345 | if (!lp) | ||
346 | return -ENODEV; | ||
347 | |||
348 | fc = lport_priv(lp); | ||
349 | |||
350 | /* Logout of the fabric */ | ||
351 | fc_fabric_logoff(lp); | ||
352 | |||
353 | /* Remove the instance from fcoe's list */ | ||
354 | fcoe_hostlist_remove(lp); | ||
355 | |||
356 | /* Don't listen for Ethernet packets anymore */ | ||
357 | dev_remove_pack(&fc->fcoe_packet_type); | ||
358 | dev_remove_pack(&fc->fip_packet_type); | ||
359 | fcoe_ctlr_destroy(&fc->ctlr); | ||
360 | |||
361 | /* Cleanup the fc_lport */ | ||
362 | fc_lport_destroy(lp); | ||
363 | fc_fcp_destroy(lp); | ||
364 | |||
365 | /* Detach from the scsi-ml */ | ||
366 | fc_remove_host(lp->host); | ||
367 | scsi_remove_host(lp->host); | ||
368 | |||
369 | /* There are no more rports or I/O, free the EM */ | ||
370 | if (lp->emp) | ||
371 | fc_exch_mgr_free(lp->emp); | ||
372 | |||
373 | /* Delete secondary MAC addresses */ | ||
374 | rtnl_lock(); | ||
375 | memcpy(flogi_maddr, (u8[6]) FC_FCOE_FLOGI_MAC, ETH_ALEN); | ||
376 | dev_unicast_delete(fc->real_dev, flogi_maddr, ETH_ALEN); | ||
377 | if (!is_zero_ether_addr(fc->ctlr.data_src_addr)) | ||
378 | dev_unicast_delete(fc->real_dev, | ||
379 | fc->ctlr.data_src_addr, ETH_ALEN); | ||
380 | dev_mc_delete(fc->real_dev, FIP_ALL_ENODE_MACS, ETH_ALEN, 0); | ||
381 | rtnl_unlock(); | ||
382 | |||
383 | /* Free the per-CPU revieve threads */ | ||
384 | fcoe_percpu_clean(lp); | ||
385 | |||
386 | /* Free existing skbs */ | ||
387 | fcoe_clean_pending_queue(lp); | ||
388 | |||
389 | /* Free memory used by statistical counters */ | ||
390 | fc_lport_free_stats(lp); | ||
391 | |||
392 | /* Release the net_device and Scsi_Host */ | ||
393 | dev_put(fc->real_dev); | ||
394 | scsi_host_put(lp->host); | ||
395 | |||
396 | return 0; | ||
397 | } | ||
398 | |||
399 | /* | ||
400 | * fcoe_ddp_setup - calls LLD's ddp_setup through net_device | ||
401 | * @lp: the corresponding fc_lport | ||
402 | * @xid: the exchange id for this ddp transfer | ||
403 | * @sgl: the scatterlist describing this transfer | ||
404 | * @sgc: number of sg items | ||
405 | * | ||
406 | * Returns : 0 no ddp | ||
407 | */ | ||
408 | static int fcoe_ddp_setup(struct fc_lport *lp, u16 xid, | ||
409 | struct scatterlist *sgl, unsigned int sgc) | ||
410 | { | ||
411 | struct net_device *n = fcoe_netdev(lp); | ||
412 | |||
413 | if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_setup) | ||
414 | return n->netdev_ops->ndo_fcoe_ddp_setup(n, xid, sgl, sgc); | ||
415 | |||
416 | return 0; | ||
417 | } | ||
418 | |||
419 | /* | ||
420 | * fcoe_ddp_done - calls LLD's ddp_done through net_device | ||
421 | * @lp: the corresponding fc_lport | ||
422 | * @xid: the exchange id for this ddp transfer | ||
423 | * | ||
424 | * Returns : the length of data that have been completed by ddp | ||
425 | */ | ||
426 | static int fcoe_ddp_done(struct fc_lport *lp, u16 xid) | ||
427 | { | ||
428 | struct net_device *n = fcoe_netdev(lp); | ||
429 | |||
430 | if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_done) | ||
431 | return n->netdev_ops->ndo_fcoe_ddp_done(n, xid); | ||
432 | return 0; | ||
433 | } | ||
434 | |||
435 | static struct libfc_function_template fcoe_libfc_fcn_templ = { | ||
436 | .frame_send = fcoe_xmit, | ||
437 | .ddp_setup = fcoe_ddp_setup, | ||
438 | .ddp_done = fcoe_ddp_done, | ||
439 | }; | ||
440 | |||
441 | /** | ||
442 | * fcoe_fip_recv - handle a received FIP frame. | ||
443 | * @skb: the receive skb | ||
444 | * @dev: associated &net_device | ||
445 | * @ptype: the &packet_type structure which was used to register this handler. | ||
446 | * @orig_dev: original receive &net_device, in case @dev is a bond. | ||
447 | * | ||
448 | * Returns: 0 for success | ||
449 | */ | ||
450 | static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *dev, | ||
451 | struct packet_type *ptype, | ||
452 | struct net_device *orig_dev) | ||
453 | { | ||
454 | struct fcoe_softc *fc; | ||
455 | |||
456 | fc = container_of(ptype, struct fcoe_softc, fip_packet_type); | ||
457 | fcoe_ctlr_recv(&fc->ctlr, skb); | ||
458 | return 0; | ||
459 | } | ||
460 | |||
461 | /** | ||
462 | * fcoe_fip_send() - send an Ethernet-encapsulated FIP frame. | ||
463 | * @fip: FCoE controller. | ||
464 | * @skb: FIP Packet. | ||
465 | */ | ||
466 | static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb) | ||
467 | { | ||
468 | skb->dev = fcoe_from_ctlr(fip)->real_dev; | ||
469 | dev_queue_xmit(skb); | ||
470 | } | ||
471 | |||
472 | /** | ||
473 | * fcoe_update_src_mac() - Update Ethernet MAC filters. | ||
474 | * @fip: FCoE controller. | ||
475 | * @old: Unicast MAC address to delete if the MAC is non-zero. | ||
476 | * @new: Unicast MAC address to add. | ||
477 | * | ||
478 | * Remove any previously-set unicast MAC filter. | ||
479 | * Add secondary FCoE MAC address filter for our OUI. | ||
480 | */ | ||
481 | static void fcoe_update_src_mac(struct fcoe_ctlr *fip, u8 *old, u8 *new) | ||
482 | { | ||
483 | struct fcoe_softc *fc; | ||
484 | |||
485 | fc = fcoe_from_ctlr(fip); | ||
486 | rtnl_lock(); | ||
487 | if (!is_zero_ether_addr(old)) | ||
488 | dev_unicast_delete(fc->real_dev, old, ETH_ALEN); | ||
489 | dev_unicast_add(fc->real_dev, new, ETH_ALEN); | ||
490 | rtnl_unlock(); | ||
491 | } | ||
492 | |||
493 | /** | ||
494 | * fcoe_if_create() - this function creates the fcoe interface | ||
495 | * @netdev: pointer the associated netdevice | ||
496 | * | ||
497 | * Creates fc_lport struct and scsi_host for lport, configures lport | ||
498 | * and starts fabric login. | ||
499 | * | ||
500 | * Returns : 0 on success | ||
501 | */ | ||
502 | static int fcoe_if_create(struct net_device *netdev) | ||
503 | { | ||
504 | int rc; | ||
505 | struct fc_lport *lp = NULL; | ||
506 | struct fcoe_softc *fc; | ||
507 | struct Scsi_Host *shost; | ||
508 | |||
509 | BUG_ON(!netdev); | ||
510 | |||
511 | printk(KERN_DEBUG "fcoe_if_create:interface on %s\n", | ||
512 | netdev->name); | ||
513 | |||
514 | lp = fcoe_hostlist_lookup(netdev); | ||
515 | if (lp) | ||
516 | return -EEXIST; | ||
517 | |||
518 | shost = libfc_host_alloc(&fcoe_shost_template, | ||
519 | sizeof(struct fcoe_softc)); | ||
520 | if (!shost) { | ||
521 | FC_DBG("Could not allocate host structure\n"); | ||
522 | return -ENOMEM; | ||
523 | } | ||
524 | lp = shost_priv(shost); | ||
525 | fc = lport_priv(lp); | ||
526 | |||
527 | /* configure fc_lport, e.g., em */ | ||
528 | rc = fcoe_lport_config(lp); | ||
529 | if (rc) { | ||
530 | FC_DBG("Could not configure lport\n"); | ||
531 | goto out_host_put; | ||
532 | } | ||
533 | |||
534 | /* configure lport network properties */ | ||
535 | rc = fcoe_netdev_config(lp, netdev); | ||
536 | if (rc) { | ||
537 | FC_DBG("Could not configure netdev for lport\n"); | ||
538 | goto out_host_put; | ||
539 | } | ||
540 | |||
541 | /* | ||
542 | * Initialize FIP. | ||
543 | */ | ||
544 | fcoe_ctlr_init(&fc->ctlr); | ||
545 | fc->ctlr.send = fcoe_fip_send; | ||
546 | fc->ctlr.update_mac = fcoe_update_src_mac; | ||
547 | |||
548 | fc->fip_packet_type.func = fcoe_fip_recv; | ||
549 | fc->fip_packet_type.type = htons(ETH_P_FIP); | ||
550 | fc->fip_packet_type.dev = fc->real_dev; | ||
551 | dev_add_pack(&fc->fip_packet_type); | ||
552 | |||
553 | /* configure lport scsi host properties */ | ||
554 | rc = fcoe_shost_config(lp, shost, &netdev->dev); | ||
555 | if (rc) { | ||
556 | FC_DBG("Could not configure shost for lport\n"); | ||
557 | goto out_host_put; | ||
558 | } | ||
559 | |||
560 | /* lport exch manager allocation */ | ||
561 | rc = fcoe_em_config(lp); | ||
562 | if (rc) { | ||
563 | FC_DBG("Could not configure em for lport\n"); | ||
564 | goto out_host_put; | ||
565 | } | ||
566 | |||
567 | /* Initialize the library */ | ||
568 | rc = fcoe_libfc_config(lp, &fcoe_libfc_fcn_templ); | ||
569 | if (rc) { | ||
570 | FC_DBG("Could not configure libfc for lport!\n"); | ||
571 | goto out_lp_destroy; | ||
572 | } | ||
573 | |||
574 | /* add to lports list */ | ||
575 | fcoe_hostlist_add(lp); | ||
576 | |||
577 | lp->boot_time = jiffies; | ||
578 | |||
579 | fc_fabric_login(lp); | ||
580 | |||
581 | if (!fcoe_link_ok(lp)) | ||
582 | fcoe_ctlr_link_up(&fc->ctlr); | ||
583 | |||
584 | dev_hold(netdev); | ||
585 | |||
586 | return rc; | ||
587 | |||
588 | out_lp_destroy: | ||
589 | fc_exch_mgr_free(lp->emp); /* Free the EM */ | ||
590 | out_host_put: | ||
591 | scsi_host_put(lp->host); | ||
592 | return rc; | ||
593 | } | ||
594 | |||
595 | /** | ||
596 | * fcoe_if_init() - attach to scsi transport | ||
597 | * | ||
598 | * Returns : 0 on success | ||
599 | */ | ||
600 | static int __init fcoe_if_init(void) | ||
601 | { | ||
602 | /* attach to scsi transport */ | ||
603 | scsi_transport_fcoe_sw = | ||
604 | fc_attach_transport(&fcoe_transport_function); | ||
605 | |||
606 | if (!scsi_transport_fcoe_sw) { | ||
607 | printk(KERN_ERR "fcoe_init:fc_attach_transport() failed\n"); | ||
608 | return -ENODEV; | ||
609 | } | ||
610 | |||
611 | return 0; | ||
612 | } | ||
613 | |||
614 | /** | ||
615 | * fcoe_if_exit() - detach from scsi transport | ||
616 | * | ||
617 | * Returns : 0 on success | ||
618 | */ | ||
619 | int __exit fcoe_if_exit(void) | ||
620 | { | ||
621 | fc_release_transport(scsi_transport_fcoe_sw); | ||
622 | return 0; | ||
623 | } | ||
624 | |||
625 | /** | ||
626 | * fcoe_percpu_thread_create() - Create a receive thread for an online cpu | ||
627 | * @cpu: cpu index for the online cpu | ||
628 | */ | ||
629 | static void fcoe_percpu_thread_create(unsigned int cpu) | ||
630 | { | ||
631 | struct fcoe_percpu_s *p; | ||
632 | struct task_struct *thread; | ||
633 | |||
634 | p = &per_cpu(fcoe_percpu, cpu); | ||
635 | |||
636 | thread = kthread_create(fcoe_percpu_receive_thread, | ||
637 | (void *)p, "fcoethread/%d", cpu); | ||
638 | |||
639 | if (likely(!IS_ERR(p->thread))) { | ||
640 | kthread_bind(thread, cpu); | ||
641 | wake_up_process(thread); | ||
642 | |||
643 | spin_lock_bh(&p->fcoe_rx_list.lock); | ||
644 | p->thread = thread; | ||
645 | spin_unlock_bh(&p->fcoe_rx_list.lock); | ||
646 | } | ||
647 | } | ||
648 | |||
649 | /** | ||
650 | * fcoe_percpu_thread_destroy() - removes the rx thread for the given cpu | ||
651 | * @cpu: cpu index the rx thread is to be removed | ||
652 | * | ||
653 | * Destroys a per-CPU Rx thread. Any pending skbs are moved to the | ||
654 | * current CPU's Rx thread. If the thread being destroyed is bound to | ||
655 | * the CPU processing this context the skbs will be freed. | ||
656 | */ | ||
657 | static void fcoe_percpu_thread_destroy(unsigned int cpu) | ||
658 | { | ||
659 | struct fcoe_percpu_s *p; | ||
660 | struct task_struct *thread; | ||
661 | struct page *crc_eof; | ||
662 | struct sk_buff *skb; | ||
663 | #ifdef CONFIG_SMP | ||
664 | struct fcoe_percpu_s *p0; | ||
665 | unsigned targ_cpu = smp_processor_id(); | ||
666 | #endif /* CONFIG_SMP */ | ||
667 | |||
668 | printk(KERN_DEBUG "fcoe: Destroying receive thread for CPU %d\n", cpu); | ||
669 | |||
670 | /* Prevent any new skbs from being queued for this CPU. */ | ||
671 | p = &per_cpu(fcoe_percpu, cpu); | ||
672 | spin_lock_bh(&p->fcoe_rx_list.lock); | ||
673 | thread = p->thread; | ||
674 | p->thread = NULL; | ||
675 | crc_eof = p->crc_eof_page; | ||
676 | p->crc_eof_page = NULL; | ||
677 | p->crc_eof_offset = 0; | ||
678 | spin_unlock_bh(&p->fcoe_rx_list.lock); | ||
679 | |||
680 | #ifdef CONFIG_SMP | ||
681 | /* | ||
682 | * Don't bother moving the skb's if this context is running | ||
683 | * on the same CPU that is having its thread destroyed. This | ||
684 | * can easily happen when the module is removed. | ||
685 | */ | ||
686 | if (cpu != targ_cpu) { | ||
687 | p0 = &per_cpu(fcoe_percpu, targ_cpu); | ||
688 | spin_lock_bh(&p0->fcoe_rx_list.lock); | ||
689 | if (p0->thread) { | ||
690 | FC_DBG("Moving frames from CPU %d to CPU %d\n", | ||
691 | cpu, targ_cpu); | ||
692 | |||
693 | while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL) | ||
694 | __skb_queue_tail(&p0->fcoe_rx_list, skb); | ||
695 | spin_unlock_bh(&p0->fcoe_rx_list.lock); | ||
696 | } else { | ||
697 | /* | ||
698 | * The targeted CPU is not initialized and cannot accept | ||
699 | * new skbs. Unlock the targeted CPU and drop the skbs | ||
700 | * on the CPU that is going offline. | ||
701 | */ | ||
702 | while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL) | ||
703 | kfree_skb(skb); | ||
704 | spin_unlock_bh(&p0->fcoe_rx_list.lock); | ||
705 | } | ||
706 | } else { | ||
707 | /* | ||
708 | * This scenario occurs when the module is being removed | ||
709 | * and all threads are being destroyed. skbs will continue | ||
710 | * to be shifted from the CPU thread that is being removed | ||
711 | * to the CPU thread associated with the CPU that is processing | ||
712 | * the module removal. Once there is only one CPU Rx thread it | ||
713 | * will reach this case and we will drop all skbs and later | ||
714 | * stop the thread. | ||
715 | */ | ||
716 | spin_lock_bh(&p->fcoe_rx_list.lock); | ||
717 | while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL) | ||
718 | kfree_skb(skb); | ||
719 | spin_unlock_bh(&p->fcoe_rx_list.lock); | ||
720 | } | ||
721 | #else | ||
722 | /* | ||
723 | * This a non-SMP scenario where the singluar Rx thread is | ||
724 | * being removed. Free all skbs and stop the thread. | ||
725 | */ | ||
726 | spin_lock_bh(&p->fcoe_rx_list.lock); | ||
727 | while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL) | ||
728 | kfree_skb(skb); | ||
729 | spin_unlock_bh(&p->fcoe_rx_list.lock); | ||
730 | #endif | ||
731 | |||
732 | if (thread) | ||
733 | kthread_stop(thread); | ||
734 | |||
735 | if (crc_eof) | ||
736 | put_page(crc_eof); | ||
737 | } | ||
738 | |||
739 | /** | ||
740 | * fcoe_cpu_callback() - fcoe cpu hotplug event callback | ||
741 | * @nfb: callback data block | ||
742 | * @action: event triggering the callback | ||
743 | * @hcpu: index for the cpu of this event | ||
744 | * | ||
745 | * This creates or destroys per cpu data for fcoe | ||
746 | * | ||
747 | * Returns NOTIFY_OK always. | ||
748 | */ | ||
749 | static int fcoe_cpu_callback(struct notifier_block *nfb, | ||
750 | unsigned long action, void *hcpu) | ||
751 | { | ||
752 | unsigned cpu = (unsigned long)hcpu; | ||
753 | |||
754 | switch (action) { | ||
755 | case CPU_ONLINE: | ||
756 | case CPU_ONLINE_FROZEN: | ||
757 | FC_DBG("CPU %x online: Create Rx thread\n", cpu); | ||
758 | fcoe_percpu_thread_create(cpu); | ||
759 | break; | ||
760 | case CPU_DEAD: | ||
761 | case CPU_DEAD_FROZEN: | ||
762 | FC_DBG("CPU %x offline: Remove Rx thread\n", cpu); | ||
763 | fcoe_percpu_thread_destroy(cpu); | ||
764 | break; | ||
765 | default: | ||
766 | break; | ||
767 | } | ||
768 | return NOTIFY_OK; | ||
769 | } | ||
770 | |||
771 | static struct notifier_block fcoe_cpu_notifier = { | ||
772 | .notifier_call = fcoe_cpu_callback, | ||
773 | }; | ||
774 | |||
775 | /** | ||
776 | * fcoe_rcv() - this is the fcoe receive function called by NET_RX_SOFTIRQ | ||
777 | * @skb: the receive skb | ||
778 | * @dev: associated net device | ||
779 | * @ptype: context | ||
780 | * @odldev: last device | ||
781 | * | ||
782 | * this function will receive the packet and build fc frame and pass it up | ||
783 | * | ||
784 | * Returns: 0 for success | ||
785 | */ | ||
786 | int fcoe_rcv(struct sk_buff *skb, struct net_device *dev, | ||
787 | struct packet_type *ptype, struct net_device *olddev) | ||
788 | { | ||
789 | struct fc_lport *lp; | ||
790 | struct fcoe_rcv_info *fr; | ||
791 | struct fcoe_softc *fc; | ||
792 | struct fc_frame_header *fh; | ||
793 | struct fcoe_percpu_s *fps; | ||
794 | unsigned short oxid; | ||
795 | unsigned int cpu = 0; | ||
796 | |||
797 | fc = container_of(ptype, struct fcoe_softc, fcoe_packet_type); | ||
798 | lp = fc->ctlr.lp; | ||
799 | if (unlikely(lp == NULL)) { | ||
800 | FC_DBG("cannot find hba structure"); | ||
801 | goto err2; | ||
802 | } | ||
803 | if (!lp->link_up) | ||
804 | goto err2; | ||
805 | |||
806 | if (unlikely(debug_fcoe)) { | ||
807 | FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p tail:%p " | ||
808 | "end:%p sum:%d dev:%s", skb->len, skb->data_len, | ||
809 | skb->head, skb->data, skb_tail_pointer(skb), | ||
810 | skb_end_pointer(skb), skb->csum, | ||
811 | skb->dev ? skb->dev->name : "<NULL>"); | ||
812 | |||
813 | } | ||
814 | |||
815 | /* check for FCOE packet type */ | ||
816 | if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) { | ||
817 | FC_DBG("wrong FC type frame"); | ||
818 | goto err; | ||
819 | } | ||
820 | |||
821 | /* | ||
822 | * Check for minimum frame length, and make sure required FCoE | ||
823 | * and FC headers are pulled into the linear data area. | ||
824 | */ | ||
825 | if (unlikely((skb->len < FCOE_MIN_FRAME) || | ||
826 | !pskb_may_pull(skb, FCOE_HEADER_LEN))) | ||
827 | goto err; | ||
828 | |||
829 | skb_set_transport_header(skb, sizeof(struct fcoe_hdr)); | ||
830 | fh = (struct fc_frame_header *) skb_transport_header(skb); | ||
831 | |||
832 | oxid = ntohs(fh->fh_ox_id); | ||
833 | |||
834 | fr = fcoe_dev_from_skb(skb); | ||
835 | fr->fr_dev = lp; | ||
836 | fr->ptype = ptype; | ||
837 | |||
838 | #ifdef CONFIG_SMP | ||
839 | /* | ||
840 | * The incoming frame exchange id(oxid) is ANDed with num of online | ||
841 | * cpu bits to get cpu and then this cpu is used for selecting | ||
842 | * a per cpu kernel thread from fcoe_percpu. | ||
843 | */ | ||
844 | cpu = oxid & (num_online_cpus() - 1); | ||
845 | #endif | ||
846 | |||
847 | fps = &per_cpu(fcoe_percpu, cpu); | ||
848 | spin_lock_bh(&fps->fcoe_rx_list.lock); | ||
849 | if (unlikely(!fps->thread)) { | ||
850 | /* | ||
851 | * The targeted CPU is not ready, let's target | ||
852 | * the first CPU now. For non-SMP systems this | ||
853 | * will check the same CPU twice. | ||
854 | */ | ||
855 | FC_DBG("CPU is online, but no receive thread ready " | ||
856 | "for incoming skb- using first online CPU.\n"); | ||
857 | |||
858 | spin_unlock_bh(&fps->fcoe_rx_list.lock); | ||
859 | cpu = first_cpu(cpu_online_map); | ||
860 | fps = &per_cpu(fcoe_percpu, cpu); | ||
861 | spin_lock_bh(&fps->fcoe_rx_list.lock); | ||
862 | if (!fps->thread) { | ||
863 | spin_unlock_bh(&fps->fcoe_rx_list.lock); | ||
864 | goto err; | ||
865 | } | ||
866 | } | ||
867 | |||
868 | /* | ||
869 | * We now have a valid CPU that we're targeting for | ||
870 | * this skb. We also have this receive thread locked, | ||
871 | * so we're free to queue skbs into it's queue. | ||
872 | */ | ||
873 | __skb_queue_tail(&fps->fcoe_rx_list, skb); | ||
874 | if (fps->fcoe_rx_list.qlen == 1) | ||
875 | wake_up_process(fps->thread); | ||
876 | |||
877 | spin_unlock_bh(&fps->fcoe_rx_list.lock); | ||
878 | |||
879 | return 0; | ||
880 | err: | ||
881 | fc_lport_get_stats(lp)->ErrorFrames++; | ||
882 | |||
883 | err2: | ||
884 | kfree_skb(skb); | ||
885 | return -1; | ||
886 | } | ||
887 | EXPORT_SYMBOL_GPL(fcoe_rcv); | ||
888 | |||
889 | /** | ||
890 | * fcoe_start_io() - pass to netdev to start xmit for fcoe | ||
891 | * @skb: the skb to be xmitted | ||
892 | * | ||
893 | * Returns: 0 for success | ||
894 | */ | ||
895 | static inline int fcoe_start_io(struct sk_buff *skb) | ||
896 | { | ||
897 | int rc; | ||
898 | |||
899 | skb_get(skb); | ||
900 | rc = dev_queue_xmit(skb); | ||
901 | if (rc != 0) | ||
902 | return rc; | ||
903 | kfree_skb(skb); | ||
904 | return 0; | ||
905 | } | ||
906 | |||
907 | /** | ||
908 | * fcoe_get_paged_crc_eof() - in case we need alloc a page for crc_eof | ||
909 | * @skb: the skb to be xmitted | ||
910 | * @tlen: total len | ||
911 | * | ||
912 | * Returns: 0 for success | ||
913 | */ | ||
914 | static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen) | ||
915 | { | ||
916 | struct fcoe_percpu_s *fps; | ||
917 | struct page *page; | ||
918 | |||
919 | fps = &get_cpu_var(fcoe_percpu); | ||
920 | page = fps->crc_eof_page; | ||
921 | if (!page) { | ||
922 | page = alloc_page(GFP_ATOMIC); | ||
923 | if (!page) { | ||
924 | put_cpu_var(fcoe_percpu); | ||
925 | return -ENOMEM; | ||
926 | } | ||
927 | fps->crc_eof_page = page; | ||
928 | fps->crc_eof_offset = 0; | ||
929 | } | ||
930 | |||
931 | get_page(page); | ||
932 | skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags, page, | ||
933 | fps->crc_eof_offset, tlen); | ||
934 | skb->len += tlen; | ||
935 | skb->data_len += tlen; | ||
936 | skb->truesize += tlen; | ||
937 | fps->crc_eof_offset += sizeof(struct fcoe_crc_eof); | ||
938 | |||
939 | if (fps->crc_eof_offset >= PAGE_SIZE) { | ||
940 | fps->crc_eof_page = NULL; | ||
941 | fps->crc_eof_offset = 0; | ||
942 | put_page(page); | ||
943 | } | ||
944 | put_cpu_var(fcoe_percpu); | ||
945 | return 0; | ||
946 | } | ||
947 | |||
948 | /** | ||
949 | * fcoe_fc_crc() - calculates FC CRC in this fcoe skb | ||
950 | * @fp: the fc_frame containg data to be checksummed | ||
951 | * | ||
952 | * This uses crc32() to calculate the crc for fc frame | ||
953 | * Return : 32 bit crc | ||
954 | */ | ||
955 | u32 fcoe_fc_crc(struct fc_frame *fp) | ||
956 | { | ||
957 | struct sk_buff *skb = fp_skb(fp); | ||
958 | struct skb_frag_struct *frag; | ||
959 | unsigned char *data; | ||
960 | unsigned long off, len, clen; | ||
961 | u32 crc; | ||
962 | unsigned i; | ||
963 | |||
964 | crc = crc32(~0, skb->data, skb_headlen(skb)); | ||
965 | |||
966 | for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { | ||
967 | frag = &skb_shinfo(skb)->frags[i]; | ||
968 | off = frag->page_offset; | ||
969 | len = frag->size; | ||
970 | while (len > 0) { | ||
971 | clen = min(len, PAGE_SIZE - (off & ~PAGE_MASK)); | ||
972 | data = kmap_atomic(frag->page + (off >> PAGE_SHIFT), | ||
973 | KM_SKB_DATA_SOFTIRQ); | ||
974 | crc = crc32(crc, data + (off & ~PAGE_MASK), clen); | ||
975 | kunmap_atomic(data, KM_SKB_DATA_SOFTIRQ); | ||
976 | off += clen; | ||
977 | len -= clen; | ||
978 | } | ||
979 | } | ||
980 | return crc; | ||
981 | } | ||
982 | |||
983 | /** | ||
984 | * fcoe_xmit() - FCoE frame transmit function | ||
985 | * @lp: the associated local port | ||
986 | * @fp: the fc_frame to be transmitted | ||
987 | * | ||
988 | * Return : 0 for success | ||
989 | */ | ||
990 | int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp) | ||
991 | { | ||
992 | int wlen, rc = 0; | ||
993 | u32 crc; | ||
994 | struct ethhdr *eh; | ||
995 | struct fcoe_crc_eof *cp; | ||
996 | struct sk_buff *skb; | ||
997 | struct fcoe_dev_stats *stats; | ||
998 | struct fc_frame_header *fh; | ||
999 | unsigned int hlen; /* header length implies the version */ | ||
1000 | unsigned int tlen; /* trailer length */ | ||
1001 | unsigned int elen; /* eth header, may include vlan */ | ||
1002 | struct fcoe_softc *fc; | ||
1003 | u8 sof, eof; | ||
1004 | struct fcoe_hdr *hp; | ||
1005 | |||
1006 | WARN_ON((fr_len(fp) % sizeof(u32)) != 0); | ||
1007 | |||
1008 | fc = lport_priv(lp); | ||
1009 | fh = fc_frame_header_get(fp); | ||
1010 | skb = fp_skb(fp); | ||
1011 | wlen = skb->len / FCOE_WORD_TO_BYTE; | ||
1012 | |||
1013 | if (!lp->link_up) { | ||
1014 | kfree(skb); | ||
1015 | return 0; | ||
1016 | } | ||
1017 | |||
1018 | if (unlikely(fh->fh_r_ctl == FC_RCTL_ELS_REQ) && | ||
1019 | fcoe_ctlr_els_send(&fc->ctlr, skb)) | ||
1020 | return 0; | ||
1021 | |||
1022 | sof = fr_sof(fp); | ||
1023 | eof = fr_eof(fp); | ||
1024 | |||
1025 | elen = (fc->real_dev->priv_flags & IFF_802_1Q_VLAN) ? | ||
1026 | sizeof(struct vlan_ethhdr) : sizeof(struct ethhdr); | ||
1027 | hlen = sizeof(struct fcoe_hdr); | ||
1028 | tlen = sizeof(struct fcoe_crc_eof); | ||
1029 | wlen = (skb->len - tlen + sizeof(crc)) / FCOE_WORD_TO_BYTE; | ||
1030 | |||
1031 | /* crc offload */ | ||
1032 | if (likely(lp->crc_offload)) { | ||
1033 | skb->ip_summed = CHECKSUM_PARTIAL; | ||
1034 | skb->csum_start = skb_headroom(skb); | ||
1035 | skb->csum_offset = skb->len; | ||
1036 | crc = 0; | ||
1037 | } else { | ||
1038 | skb->ip_summed = CHECKSUM_NONE; | ||
1039 | crc = fcoe_fc_crc(fp); | ||
1040 | } | ||
1041 | |||
1042 | /* copy fc crc and eof to the skb buff */ | ||
1043 | if (skb_is_nonlinear(skb)) { | ||
1044 | skb_frag_t *frag; | ||
1045 | if (fcoe_get_paged_crc_eof(skb, tlen)) { | ||
1046 | kfree_skb(skb); | ||
1047 | return -ENOMEM; | ||
1048 | } | ||
1049 | frag = &skb_shinfo(skb)->frags[skb_shinfo(skb)->nr_frags - 1]; | ||
1050 | cp = kmap_atomic(frag->page, KM_SKB_DATA_SOFTIRQ) | ||
1051 | + frag->page_offset; | ||
1052 | } else { | ||
1053 | cp = (struct fcoe_crc_eof *)skb_put(skb, tlen); | ||
1054 | } | ||
1055 | |||
1056 | memset(cp, 0, sizeof(*cp)); | ||
1057 | cp->fcoe_eof = eof; | ||
1058 | cp->fcoe_crc32 = cpu_to_le32(~crc); | ||
1059 | |||
1060 | if (skb_is_nonlinear(skb)) { | ||
1061 | kunmap_atomic(cp, KM_SKB_DATA_SOFTIRQ); | ||
1062 | cp = NULL; | ||
1063 | } | ||
1064 | |||
1065 | /* adjust skb netowrk/transport offsets to match mac/fcoe/fc */ | ||
1066 | skb_push(skb, elen + hlen); | ||
1067 | skb_reset_mac_header(skb); | ||
1068 | skb_reset_network_header(skb); | ||
1069 | skb->mac_len = elen; | ||
1070 | skb->protocol = htons(ETH_P_FCOE); | ||
1071 | skb->dev = fc->real_dev; | ||
1072 | |||
1073 | /* fill up mac and fcoe headers */ | ||
1074 | eh = eth_hdr(skb); | ||
1075 | eh->h_proto = htons(ETH_P_FCOE); | ||
1076 | if (fc->ctlr.map_dest) | ||
1077 | fc_fcoe_set_mac(eh->h_dest, fh->fh_d_id); | ||
1078 | else | ||
1079 | /* insert GW address */ | ||
1080 | memcpy(eh->h_dest, fc->ctlr.dest_addr, ETH_ALEN); | ||
1081 | |||
1082 | if (unlikely(fc->ctlr.flogi_oxid != FC_XID_UNKNOWN)) | ||
1083 | memcpy(eh->h_source, fc->ctlr.ctl_src_addr, ETH_ALEN); | ||
1084 | else | ||
1085 | memcpy(eh->h_source, fc->ctlr.data_src_addr, ETH_ALEN); | ||
1086 | |||
1087 | hp = (struct fcoe_hdr *)(eh + 1); | ||
1088 | memset(hp, 0, sizeof(*hp)); | ||
1089 | if (FC_FCOE_VER) | ||
1090 | FC_FCOE_ENCAPS_VER(hp, FC_FCOE_VER); | ||
1091 | hp->fcoe_sof = sof; | ||
1092 | |||
1093 | #ifdef NETIF_F_FSO | ||
1094 | /* fcoe lso, mss is in max_payload which is non-zero for FCP data */ | ||
1095 | if (lp->seq_offload && fr_max_payload(fp)) { | ||
1096 | skb_shinfo(skb)->gso_type = SKB_GSO_FCOE; | ||
1097 | skb_shinfo(skb)->gso_size = fr_max_payload(fp); | ||
1098 | } else { | ||
1099 | skb_shinfo(skb)->gso_type = 0; | ||
1100 | skb_shinfo(skb)->gso_size = 0; | ||
1101 | } | ||
1102 | #endif | ||
1103 | /* update tx stats: regardless if LLD fails */ | ||
1104 | stats = fc_lport_get_stats(lp); | ||
1105 | stats->TxFrames++; | ||
1106 | stats->TxWords += wlen; | ||
1107 | |||
1108 | /* send down to lld */ | ||
1109 | fr_dev(fp) = lp; | ||
1110 | if (fc->fcoe_pending_queue.qlen) | ||
1111 | rc = fcoe_check_wait_queue(lp); | ||
1112 | |||
1113 | if (rc == 0) | ||
1114 | rc = fcoe_start_io(skb); | ||
1115 | |||
1116 | if (rc) { | ||
1117 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | ||
1118 | __skb_queue_tail(&fc->fcoe_pending_queue, skb); | ||
1119 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | ||
1120 | if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH) | ||
1121 | lp->qfull = 1; | ||
1122 | } | ||
1123 | |||
1124 | return 0; | ||
1125 | } | ||
1126 | EXPORT_SYMBOL_GPL(fcoe_xmit); | ||
1127 | |||
1128 | /** | ||
1129 | * fcoe_percpu_receive_thread() - recv thread per cpu | ||
1130 | * @arg: ptr to the fcoe per cpu struct | ||
1131 | * | ||
1132 | * Return: 0 for success | ||
1133 | */ | ||
1134 | int fcoe_percpu_receive_thread(void *arg) | ||
1135 | { | ||
1136 | struct fcoe_percpu_s *p = arg; | ||
1137 | u32 fr_len; | ||
1138 | struct fc_lport *lp; | ||
1139 | struct fcoe_rcv_info *fr; | ||
1140 | struct fcoe_dev_stats *stats; | ||
1141 | struct fc_frame_header *fh; | ||
1142 | struct sk_buff *skb; | ||
1143 | struct fcoe_crc_eof crc_eof; | ||
1144 | struct fc_frame *fp; | ||
1145 | u8 *mac = NULL; | ||
1146 | struct fcoe_softc *fc; | ||
1147 | struct fcoe_hdr *hp; | ||
1148 | |||
1149 | set_user_nice(current, -20); | ||
1150 | |||
1151 | while (!kthread_should_stop()) { | ||
1152 | |||
1153 | spin_lock_bh(&p->fcoe_rx_list.lock); | ||
1154 | while ((skb = __skb_dequeue(&p->fcoe_rx_list)) == NULL) { | ||
1155 | set_current_state(TASK_INTERRUPTIBLE); | ||
1156 | spin_unlock_bh(&p->fcoe_rx_list.lock); | ||
1157 | schedule(); | ||
1158 | set_current_state(TASK_RUNNING); | ||
1159 | if (kthread_should_stop()) | ||
1160 | return 0; | ||
1161 | spin_lock_bh(&p->fcoe_rx_list.lock); | ||
1162 | } | ||
1163 | spin_unlock_bh(&p->fcoe_rx_list.lock); | ||
1164 | fr = fcoe_dev_from_skb(skb); | ||
1165 | lp = fr->fr_dev; | ||
1166 | if (unlikely(lp == NULL)) { | ||
1167 | FC_DBG("invalid HBA Structure"); | ||
1168 | kfree_skb(skb); | ||
1169 | continue; | ||
1170 | } | ||
1171 | |||
1172 | if (unlikely(debug_fcoe)) { | ||
1173 | FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p " | ||
1174 | "tail:%p end:%p sum:%d dev:%s", | ||
1175 | skb->len, skb->data_len, | ||
1176 | skb->head, skb->data, skb_tail_pointer(skb), | ||
1177 | skb_end_pointer(skb), skb->csum, | ||
1178 | skb->dev ? skb->dev->name : "<NULL>"); | ||
1179 | } | ||
1180 | |||
1181 | /* | ||
1182 | * Save source MAC address before discarding header. | ||
1183 | */ | ||
1184 | fc = lport_priv(lp); | ||
1185 | if (skb_is_nonlinear(skb)) | ||
1186 | skb_linearize(skb); /* not ideal */ | ||
1187 | mac = eth_hdr(skb)->h_source; | ||
1188 | |||
1189 | /* | ||
1190 | * Frame length checks and setting up the header pointers | ||
1191 | * was done in fcoe_rcv already. | ||
1192 | */ | ||
1193 | hp = (struct fcoe_hdr *) skb_network_header(skb); | ||
1194 | fh = (struct fc_frame_header *) skb_transport_header(skb); | ||
1195 | |||
1196 | stats = fc_lport_get_stats(lp); | ||
1197 | if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) { | ||
1198 | if (stats->ErrorFrames < 5) | ||
1199 | printk(KERN_WARNING "FCoE version " | ||
1200 | "mismatch: The frame has " | ||
1201 | "version %x, but the " | ||
1202 | "initiator supports version " | ||
1203 | "%x\n", FC_FCOE_DECAPS_VER(hp), | ||
1204 | FC_FCOE_VER); | ||
1205 | stats->ErrorFrames++; | ||
1206 | kfree_skb(skb); | ||
1207 | continue; | ||
1208 | } | ||
1209 | |||
1210 | skb_pull(skb, sizeof(struct fcoe_hdr)); | ||
1211 | fr_len = skb->len - sizeof(struct fcoe_crc_eof); | ||
1212 | |||
1213 | stats->RxFrames++; | ||
1214 | stats->RxWords += fr_len / FCOE_WORD_TO_BYTE; | ||
1215 | |||
1216 | fp = (struct fc_frame *)skb; | ||
1217 | fc_frame_init(fp); | ||
1218 | fr_dev(fp) = lp; | ||
1219 | fr_sof(fp) = hp->fcoe_sof; | ||
1220 | |||
1221 | /* Copy out the CRC and EOF trailer for access */ | ||
1222 | if (skb_copy_bits(skb, fr_len, &crc_eof, sizeof(crc_eof))) { | ||
1223 | kfree_skb(skb); | ||
1224 | continue; | ||
1225 | } | ||
1226 | fr_eof(fp) = crc_eof.fcoe_eof; | ||
1227 | fr_crc(fp) = crc_eof.fcoe_crc32; | ||
1228 | if (pskb_trim(skb, fr_len)) { | ||
1229 | kfree_skb(skb); | ||
1230 | continue; | ||
1231 | } | ||
1232 | |||
1233 | /* | ||
1234 | * We only check CRC if no offload is available and if it is | ||
1235 | * it's solicited data, in which case, the FCP layer would | ||
1236 | * check it during the copy. | ||
1237 | */ | ||
1238 | if (lp->crc_offload && skb->ip_summed == CHECKSUM_UNNECESSARY) | ||
1239 | fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED; | ||
1240 | else | ||
1241 | fr_flags(fp) |= FCPHF_CRC_UNCHECKED; | ||
1242 | |||
1243 | fh = fc_frame_header_get(fp); | ||
1244 | if (fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA && | ||
1245 | fh->fh_type == FC_TYPE_FCP) { | ||
1246 | fc_exch_recv(lp, lp->emp, fp); | ||
1247 | continue; | ||
1248 | } | ||
1249 | if (fr_flags(fp) & FCPHF_CRC_UNCHECKED) { | ||
1250 | if (le32_to_cpu(fr_crc(fp)) != | ||
1251 | ~crc32(~0, skb->data, fr_len)) { | ||
1252 | if (debug_fcoe || stats->InvalidCRCCount < 5) | ||
1253 | printk(KERN_WARNING "fcoe: dropping " | ||
1254 | "frame with CRC error\n"); | ||
1255 | stats->InvalidCRCCount++; | ||
1256 | stats->ErrorFrames++; | ||
1257 | fc_frame_free(fp); | ||
1258 | continue; | ||
1259 | } | ||
1260 | fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED; | ||
1261 | } | ||
1262 | if (unlikely(fc->ctlr.flogi_oxid != FC_XID_UNKNOWN) && | ||
1263 | fcoe_ctlr_recv_flogi(&fc->ctlr, fp, mac)) { | ||
1264 | fc_frame_free(fp); | ||
1265 | continue; | ||
1266 | } | ||
1267 | fc_exch_recv(lp, lp->emp, fp); | ||
1268 | } | ||
1269 | return 0; | ||
1270 | } | ||
1271 | |||
1272 | /** | ||
1273 | * fcoe_watchdog() - fcoe timer callback | ||
1274 | * @vp: | ||
1275 | * | ||
1276 | * This checks the pending queue length for fcoe and set lport qfull | ||
1277 | * if the FCOE_MAX_QUEUE_DEPTH is reached. This is done for all fc_lport on the | ||
1278 | * fcoe_hostlist. | ||
1279 | * | ||
1280 | * Returns: 0 for success | ||
1281 | */ | ||
1282 | void fcoe_watchdog(ulong vp) | ||
1283 | { | ||
1284 | struct fcoe_softc *fc; | ||
1285 | |||
1286 | read_lock(&fcoe_hostlist_lock); | ||
1287 | list_for_each_entry(fc, &fcoe_hostlist, list) { | ||
1288 | if (fc->ctlr.lp) | ||
1289 | fcoe_check_wait_queue(fc->ctlr.lp); | ||
1290 | } | ||
1291 | read_unlock(&fcoe_hostlist_lock); | ||
1292 | |||
1293 | fcoe_timer.expires = jiffies + (1 * HZ); | ||
1294 | add_timer(&fcoe_timer); | ||
1295 | } | ||
1296 | |||
1297 | |||
1298 | /** | ||
1299 | * fcoe_check_wait_queue() - put the skb into fcoe pending xmit queue | ||
1300 | * @lp: the fc_port for this skb | ||
1301 | * @skb: the associated skb to be xmitted | ||
1302 | * | ||
1303 | * This empties the wait_queue, dequeue the head of the wait_queue queue | ||
1304 | * and calls fcoe_start_io() for each packet, if all skb have been | ||
1305 | * transmitted, return qlen or -1 if a error occurs, then restore | ||
1306 | * wait_queue and try again later. | ||
1307 | * | ||
1308 | * The wait_queue is used when the skb transmit fails. skb will go | ||
1309 | * in the wait_queue which will be emptied by the time function OR | ||
1310 | * by the next skb transmit. | ||
1311 | * | ||
1312 | * Returns: 0 for success | ||
1313 | */ | ||
1314 | static int fcoe_check_wait_queue(struct fc_lport *lp) | ||
1315 | { | ||
1316 | struct fcoe_softc *fc = lport_priv(lp); | ||
1317 | struct sk_buff *skb; | ||
1318 | int rc = -1; | ||
1319 | |||
1320 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | ||
1321 | if (fc->fcoe_pending_queue_active) | ||
1322 | goto out; | ||
1323 | fc->fcoe_pending_queue_active = 1; | ||
1324 | |||
1325 | while (fc->fcoe_pending_queue.qlen) { | ||
1326 | /* keep qlen > 0 until fcoe_start_io succeeds */ | ||
1327 | fc->fcoe_pending_queue.qlen++; | ||
1328 | skb = __skb_dequeue(&fc->fcoe_pending_queue); | ||
1329 | |||
1330 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | ||
1331 | rc = fcoe_start_io(skb); | ||
1332 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | ||
1333 | |||
1334 | if (rc) { | ||
1335 | __skb_queue_head(&fc->fcoe_pending_queue, skb); | ||
1336 | /* undo temporary increment above */ | ||
1337 | fc->fcoe_pending_queue.qlen--; | ||
1338 | break; | ||
1339 | } | ||
1340 | /* undo temporary increment above */ | ||
1341 | fc->fcoe_pending_queue.qlen--; | ||
1342 | } | ||
1343 | |||
1344 | if (fc->fcoe_pending_queue.qlen < FCOE_LOW_QUEUE_DEPTH) | ||
1345 | lp->qfull = 0; | ||
1346 | fc->fcoe_pending_queue_active = 0; | ||
1347 | rc = fc->fcoe_pending_queue.qlen; | ||
1348 | out: | ||
1349 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | ||
1350 | return rc; | ||
1351 | } | ||
1352 | |||
1353 | /** | ||
1354 | * fcoe_dev_setup() - setup link change notification interface | ||
1355 | */ | ||
1356 | static void fcoe_dev_setup() | ||
1357 | { | ||
1358 | /* | ||
1359 | * here setup a interface specific wd time to | ||
1360 | * monitor the link state | ||
1361 | */ | ||
1362 | register_netdevice_notifier(&fcoe_notifier); | ||
1363 | } | ||
1364 | |||
1365 | /** | ||
1366 | * fcoe_dev_setup() - cleanup link change notification interface | ||
1367 | */ | ||
1368 | static void fcoe_dev_cleanup(void) | ||
1369 | { | ||
1370 | unregister_netdevice_notifier(&fcoe_notifier); | ||
1371 | } | ||
1372 | |||
1373 | /** | ||
1374 | * fcoe_device_notification() - netdev event notification callback | ||
1375 | * @notifier: context of the notification | ||
1376 | * @event: type of event | ||
1377 | * @ptr: fixed array for output parsed ifname | ||
1378 | * | ||
1379 | * This function is called by the ethernet driver in case of link change event | ||
1380 | * | ||
1381 | * Returns: 0 for success | ||
1382 | */ | ||
1383 | static int fcoe_device_notification(struct notifier_block *notifier, | ||
1384 | ulong event, void *ptr) | ||
1385 | { | ||
1386 | struct fc_lport *lp = NULL; | ||
1387 | struct net_device *real_dev = ptr; | ||
1388 | struct fcoe_softc *fc; | ||
1389 | struct fcoe_dev_stats *stats; | ||
1390 | u32 link_possible = 1; | ||
1391 | u32 mfs; | ||
1392 | int rc = NOTIFY_OK; | ||
1393 | |||
1394 | read_lock(&fcoe_hostlist_lock); | ||
1395 | list_for_each_entry(fc, &fcoe_hostlist, list) { | ||
1396 | if (fc->real_dev == real_dev) { | ||
1397 | lp = fc->ctlr.lp; | ||
1398 | break; | ||
1399 | } | ||
1400 | } | ||
1401 | read_unlock(&fcoe_hostlist_lock); | ||
1402 | if (lp == NULL) { | ||
1403 | rc = NOTIFY_DONE; | ||
1404 | goto out; | ||
1405 | } | ||
1406 | |||
1407 | switch (event) { | ||
1408 | case NETDEV_DOWN: | ||
1409 | case NETDEV_GOING_DOWN: | ||
1410 | link_possible = 0; | ||
1411 | break; | ||
1412 | case NETDEV_UP: | ||
1413 | case NETDEV_CHANGE: | ||
1414 | break; | ||
1415 | case NETDEV_CHANGEMTU: | ||
1416 | mfs = fc->real_dev->mtu - | ||
1417 | (sizeof(struct fcoe_hdr) + | ||
1418 | sizeof(struct fcoe_crc_eof)); | ||
1419 | if (mfs >= FC_MIN_MAX_FRAME) | ||
1420 | fc_set_mfs(lp, mfs); | ||
1421 | break; | ||
1422 | case NETDEV_REGISTER: | ||
1423 | break; | ||
1424 | default: | ||
1425 | FC_DBG("Unknown event %ld from netdev netlink\n", event); | ||
1426 | } | ||
1427 | if (link_possible && !fcoe_link_ok(lp)) | ||
1428 | fcoe_ctlr_link_up(&fc->ctlr); | ||
1429 | else if (fcoe_ctlr_link_down(&fc->ctlr)) { | ||
1430 | stats = fc_lport_get_stats(lp); | ||
1431 | stats->LinkFailureCount++; | ||
1432 | fcoe_clean_pending_queue(lp); | ||
1433 | } | ||
1434 | out: | ||
1435 | return rc; | ||
1436 | } | ||
1437 | |||
1438 | /** | ||
1439 | * fcoe_if_to_netdev() - parse a name buffer to get netdev | ||
1440 | * @ifname: fixed array for output parsed ifname | ||
1441 | * @buffer: incoming buffer to be copied | ||
1442 | * | ||
1443 | * Returns: NULL or ptr to netdeive | ||
1444 | */ | ||
1445 | static struct net_device *fcoe_if_to_netdev(const char *buffer) | ||
1446 | { | ||
1447 | char *cp; | ||
1448 | char ifname[IFNAMSIZ + 2]; | ||
1449 | |||
1450 | if (buffer) { | ||
1451 | strlcpy(ifname, buffer, IFNAMSIZ); | ||
1452 | cp = ifname + strlen(ifname); | ||
1453 | while (--cp >= ifname && *cp == '\n') | ||
1454 | *cp = '\0'; | ||
1455 | return dev_get_by_name(&init_net, ifname); | ||
1456 | } | ||
1457 | return NULL; | ||
1458 | } | ||
1459 | |||
1460 | /** | ||
1461 | * fcoe_netdev_to_module_owner() - finds out the nic drive moddule of the netdev | ||
1462 | * @netdev: the target netdev | ||
1463 | * | ||
1464 | * Returns: ptr to the struct module, NULL for failure | ||
1465 | */ | ||
1466 | static struct module * | ||
1467 | fcoe_netdev_to_module_owner(const struct net_device *netdev) | ||
1468 | { | ||
1469 | struct device *dev; | ||
1470 | |||
1471 | if (!netdev) | ||
1472 | return NULL; | ||
1473 | |||
1474 | dev = netdev->dev.parent; | ||
1475 | if (!dev) | ||
1476 | return NULL; | ||
1477 | |||
1478 | if (!dev->driver) | ||
1479 | return NULL; | ||
1480 | |||
1481 | return dev->driver->owner; | ||
1482 | } | ||
1483 | |||
1484 | /** | ||
1485 | * fcoe_ethdrv_get() - Hold the Ethernet driver | ||
1486 | * @netdev: the target netdev | ||
1487 | * | ||
1488 | * Holds the Ethernet driver module by try_module_get() for | ||
1489 | * the corresponding netdev. | ||
1490 | * | ||
1491 | * Returns: 0 for succsss | ||
1492 | */ | ||
1493 | static int fcoe_ethdrv_get(const struct net_device *netdev) | ||
1494 | { | ||
1495 | struct module *owner; | ||
1496 | |||
1497 | owner = fcoe_netdev_to_module_owner(netdev); | ||
1498 | if (owner) { | ||
1499 | printk(KERN_DEBUG "fcoe:hold driver module %s for %s\n", | ||
1500 | module_name(owner), netdev->name); | ||
1501 | return try_module_get(owner); | ||
1502 | } | ||
1503 | return -ENODEV; | ||
1504 | } | ||
1505 | |||
1506 | /** | ||
1507 | * fcoe_ethdrv_put() - Release the Ethernet driver | ||
1508 | * @netdev: the target netdev | ||
1509 | * | ||
1510 | * Releases the Ethernet driver module by module_put for | ||
1511 | * the corresponding netdev. | ||
1512 | * | ||
1513 | * Returns: 0 for succsss | ||
1514 | */ | ||
1515 | static int fcoe_ethdrv_put(const struct net_device *netdev) | ||
1516 | { | ||
1517 | struct module *owner; | ||
1518 | |||
1519 | owner = fcoe_netdev_to_module_owner(netdev); | ||
1520 | if (owner) { | ||
1521 | printk(KERN_DEBUG "fcoe:release driver module %s for %s\n", | ||
1522 | module_name(owner), netdev->name); | ||
1523 | module_put(owner); | ||
1524 | return 0; | ||
1525 | } | ||
1526 | return -ENODEV; | ||
1527 | } | ||
1528 | |||
1529 | /** | ||
1530 | * fcoe_destroy() - handles the destroy from sysfs | ||
1531 | * @buffer: expcted to be a eth if name | ||
1532 | * @kp: associated kernel param | ||
1533 | * | ||
1534 | * Returns: 0 for success | ||
1535 | */ | ||
1536 | static int fcoe_destroy(const char *buffer, struct kernel_param *kp) | ||
1537 | { | ||
1538 | int rc; | ||
1539 | struct net_device *netdev; | ||
1540 | |||
1541 | netdev = fcoe_if_to_netdev(buffer); | ||
1542 | if (!netdev) { | ||
1543 | rc = -ENODEV; | ||
1544 | goto out_nodev; | ||
1545 | } | ||
1546 | /* look for existing lport */ | ||
1547 | if (!fcoe_hostlist_lookup(netdev)) { | ||
1548 | rc = -ENODEV; | ||
1549 | goto out_putdev; | ||
1550 | } | ||
1551 | rc = fcoe_if_destroy(netdev); | ||
1552 | if (rc) { | ||
1553 | printk(KERN_ERR "fcoe: fcoe_if_destroy(%s) failed\n", | ||
1554 | netdev->name); | ||
1555 | rc = -EIO; | ||
1556 | goto out_putdev; | ||
1557 | } | ||
1558 | fcoe_ethdrv_put(netdev); | ||
1559 | rc = 0; | ||
1560 | out_putdev: | ||
1561 | dev_put(netdev); | ||
1562 | out_nodev: | ||
1563 | return rc; | ||
1564 | } | ||
1565 | |||
1566 | /** | ||
1567 | * fcoe_create() - Handles the create call from sysfs | ||
1568 | * @buffer: expcted to be a eth if name | ||
1569 | * @kp: associated kernel param | ||
1570 | * | ||
1571 | * Returns: 0 for success | ||
1572 | */ | ||
1573 | static int fcoe_create(const char *buffer, struct kernel_param *kp) | ||
1574 | { | ||
1575 | int rc; | ||
1576 | struct net_device *netdev; | ||
1577 | |||
1578 | netdev = fcoe_if_to_netdev(buffer); | ||
1579 | if (!netdev) { | ||
1580 | rc = -ENODEV; | ||
1581 | goto out_nodev; | ||
1582 | } | ||
1583 | /* look for existing lport */ | ||
1584 | if (fcoe_hostlist_lookup(netdev)) { | ||
1585 | rc = -EEXIST; | ||
1586 | goto out_putdev; | ||
1587 | } | ||
1588 | fcoe_ethdrv_get(netdev); | ||
1589 | |||
1590 | rc = fcoe_if_create(netdev); | ||
1591 | if (rc) { | ||
1592 | printk(KERN_ERR "fcoe: fcoe_if_create(%s) failed\n", | ||
1593 | netdev->name); | ||
1594 | fcoe_ethdrv_put(netdev); | ||
1595 | rc = -EIO; | ||
1596 | goto out_putdev; | ||
1597 | } | ||
1598 | rc = 0; | ||
1599 | out_putdev: | ||
1600 | dev_put(netdev); | ||
1601 | out_nodev: | ||
1602 | return rc; | ||
1603 | } | ||
1604 | |||
1605 | module_param_call(create, fcoe_create, NULL, NULL, S_IWUSR); | ||
1606 | __MODULE_PARM_TYPE(create, "string"); | ||
1607 | MODULE_PARM_DESC(create, "Create fcoe port using net device passed in."); | ||
1608 | module_param_call(destroy, fcoe_destroy, NULL, NULL, S_IWUSR); | ||
1609 | __MODULE_PARM_TYPE(destroy, "string"); | ||
1610 | MODULE_PARM_DESC(destroy, "Destroy fcoe port"); | ||
1611 | |||
1612 | /** | ||
1613 | * fcoe_link_ok() - Check if link is ok for the fc_lport | ||
1614 | * @lp: ptr to the fc_lport | ||
1615 | * | ||
1616 | * Any permanently-disqualifying conditions have been previously checked. | ||
1617 | * This also updates the speed setting, which may change with link for 100/1000. | ||
1618 | * | ||
1619 | * This function should probably be checking for PAUSE support at some point | ||
1620 | * in the future. Currently Per-priority-pause is not determinable using | ||
1621 | * ethtool, so we shouldn't be restrictive until that problem is resolved. | ||
1622 | * | ||
1623 | * Returns: 0 if link is OK for use by FCoE. | ||
1624 | * | ||
1625 | */ | ||
1626 | int fcoe_link_ok(struct fc_lport *lp) | ||
1627 | { | ||
1628 | struct fcoe_softc *fc = lport_priv(lp); | ||
1629 | struct net_device *dev = fc->real_dev; | ||
1630 | struct ethtool_cmd ecmd = { ETHTOOL_GSET }; | ||
1631 | int rc = 0; | ||
1632 | |||
1633 | if ((dev->flags & IFF_UP) && netif_carrier_ok(dev)) { | ||
1634 | dev = fc->phys_dev; | ||
1635 | if (dev->ethtool_ops->get_settings) { | ||
1636 | dev->ethtool_ops->get_settings(dev, &ecmd); | ||
1637 | lp->link_supported_speeds &= | ||
1638 | ~(FC_PORTSPEED_1GBIT | FC_PORTSPEED_10GBIT); | ||
1639 | if (ecmd.supported & (SUPPORTED_1000baseT_Half | | ||
1640 | SUPPORTED_1000baseT_Full)) | ||
1641 | lp->link_supported_speeds |= FC_PORTSPEED_1GBIT; | ||
1642 | if (ecmd.supported & SUPPORTED_10000baseT_Full) | ||
1643 | lp->link_supported_speeds |= | ||
1644 | FC_PORTSPEED_10GBIT; | ||
1645 | if (ecmd.speed == SPEED_1000) | ||
1646 | lp->link_speed = FC_PORTSPEED_1GBIT; | ||
1647 | if (ecmd.speed == SPEED_10000) | ||
1648 | lp->link_speed = FC_PORTSPEED_10GBIT; | ||
1649 | } | ||
1650 | } else | ||
1651 | rc = -1; | ||
1652 | |||
1653 | return rc; | ||
1654 | } | ||
1655 | EXPORT_SYMBOL_GPL(fcoe_link_ok); | ||
1656 | |||
1657 | /** | ||
1658 | * fcoe_percpu_clean() - Clear the pending skbs for an lport | ||
1659 | * @lp: the fc_lport | ||
1660 | */ | ||
1661 | void fcoe_percpu_clean(struct fc_lport *lp) | ||
1662 | { | ||
1663 | struct fcoe_percpu_s *pp; | ||
1664 | struct fcoe_rcv_info *fr; | ||
1665 | struct sk_buff_head *list; | ||
1666 | struct sk_buff *skb, *next; | ||
1667 | struct sk_buff *head; | ||
1668 | unsigned int cpu; | ||
1669 | |||
1670 | for_each_possible_cpu(cpu) { | ||
1671 | pp = &per_cpu(fcoe_percpu, cpu); | ||
1672 | spin_lock_bh(&pp->fcoe_rx_list.lock); | ||
1673 | list = &pp->fcoe_rx_list; | ||
1674 | head = list->next; | ||
1675 | for (skb = head; skb != (struct sk_buff *)list; | ||
1676 | skb = next) { | ||
1677 | next = skb->next; | ||
1678 | fr = fcoe_dev_from_skb(skb); | ||
1679 | if (fr->fr_dev == lp) { | ||
1680 | __skb_unlink(skb, list); | ||
1681 | kfree_skb(skb); | ||
1682 | } | ||
1683 | } | ||
1684 | spin_unlock_bh(&pp->fcoe_rx_list.lock); | ||
1685 | } | ||
1686 | } | ||
1687 | EXPORT_SYMBOL_GPL(fcoe_percpu_clean); | ||
1688 | |||
1689 | /** | ||
1690 | * fcoe_clean_pending_queue() - Dequeue a skb and free it | ||
1691 | * @lp: the corresponding fc_lport | ||
1692 | * | ||
1693 | * Returns: none | ||
1694 | */ | ||
1695 | void fcoe_clean_pending_queue(struct fc_lport *lp) | ||
1696 | { | ||
1697 | struct fcoe_softc *fc = lport_priv(lp); | ||
1698 | struct sk_buff *skb; | ||
1699 | |||
1700 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | ||
1701 | while ((skb = __skb_dequeue(&fc->fcoe_pending_queue)) != NULL) { | ||
1702 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | ||
1703 | kfree_skb(skb); | ||
1704 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | ||
1705 | } | ||
1706 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | ||
1707 | } | ||
1708 | EXPORT_SYMBOL_GPL(fcoe_clean_pending_queue); | ||
1709 | |||
1710 | /** | ||
1711 | * fcoe_reset() - Resets the fcoe | ||
1712 | * @shost: shost the reset is from | ||
1713 | * | ||
1714 | * Returns: always 0 | ||
1715 | */ | ||
1716 | int fcoe_reset(struct Scsi_Host *shost) | ||
1717 | { | ||
1718 | struct fc_lport *lport = shost_priv(shost); | ||
1719 | fc_lport_reset(lport); | ||
1720 | return 0; | ||
1721 | } | ||
1722 | EXPORT_SYMBOL_GPL(fcoe_reset); | ||
1723 | |||
1724 | /** | ||
1725 | * fcoe_hostlist_lookup_softc() - find the corresponding lport by a given device | ||
1726 | * @device: this is currently ptr to net_device | ||
1727 | * | ||
1728 | * Returns: NULL or the located fcoe_softc | ||
1729 | */ | ||
1730 | static struct fcoe_softc * | ||
1731 | fcoe_hostlist_lookup_softc(const struct net_device *dev) | ||
1732 | { | ||
1733 | struct fcoe_softc *fc; | ||
1734 | |||
1735 | read_lock(&fcoe_hostlist_lock); | ||
1736 | list_for_each_entry(fc, &fcoe_hostlist, list) { | ||
1737 | if (fc->real_dev == dev) { | ||
1738 | read_unlock(&fcoe_hostlist_lock); | ||
1739 | return fc; | ||
1740 | } | ||
1741 | } | ||
1742 | read_unlock(&fcoe_hostlist_lock); | ||
1743 | return NULL; | ||
1744 | } | ||
1745 | |||
1746 | /** | ||
1747 | * fcoe_hostlist_lookup() - Find the corresponding lport by netdev | ||
1748 | * @netdev: ptr to net_device | ||
1749 | * | ||
1750 | * Returns: 0 for success | ||
1751 | */ | ||
1752 | struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev) | ||
1753 | { | ||
1754 | struct fcoe_softc *fc; | ||
1755 | |||
1756 | fc = fcoe_hostlist_lookup_softc(netdev); | ||
1757 | |||
1758 | return (fc) ? fc->ctlr.lp : NULL; | ||
1759 | } | ||
1760 | EXPORT_SYMBOL_GPL(fcoe_hostlist_lookup); | ||
1761 | |||
1762 | /** | ||
1763 | * fcoe_hostlist_add() - Add a lport to lports list | ||
1764 | * @lp: ptr to the fc_lport to badded | ||
1765 | * | ||
1766 | * Returns: 0 for success | ||
1767 | */ | ||
1768 | int fcoe_hostlist_add(const struct fc_lport *lp) | ||
1769 | { | ||
1770 | struct fcoe_softc *fc; | ||
1771 | |||
1772 | fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp)); | ||
1773 | if (!fc) { | ||
1774 | fc = lport_priv(lp); | ||
1775 | write_lock_bh(&fcoe_hostlist_lock); | ||
1776 | list_add_tail(&fc->list, &fcoe_hostlist); | ||
1777 | write_unlock_bh(&fcoe_hostlist_lock); | ||
1778 | } | ||
1779 | return 0; | ||
1780 | } | ||
1781 | EXPORT_SYMBOL_GPL(fcoe_hostlist_add); | ||
1782 | |||
1783 | /** | ||
1784 | * fcoe_hostlist_remove() - remove a lport from lports list | ||
1785 | * @lp: ptr to the fc_lport to badded | ||
1786 | * | ||
1787 | * Returns: 0 for success | ||
1788 | */ | ||
1789 | int fcoe_hostlist_remove(const struct fc_lport *lp) | ||
1790 | { | ||
1791 | struct fcoe_softc *fc; | ||
1792 | |||
1793 | fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp)); | ||
1794 | BUG_ON(!fc); | ||
1795 | write_lock_bh(&fcoe_hostlist_lock); | ||
1796 | list_del(&fc->list); | ||
1797 | write_unlock_bh(&fcoe_hostlist_lock); | ||
1798 | |||
1799 | return 0; | ||
1800 | } | ||
1801 | EXPORT_SYMBOL_GPL(fcoe_hostlist_remove); | ||
1802 | |||
1803 | /** | ||
1804 | * fcoe_init() - fcoe module loading initialization | ||
1805 | * | ||
1806 | * Returns 0 on success, negative on failure | ||
1807 | */ | ||
1808 | static int __init fcoe_init(void) | ||
1809 | { | ||
1810 | unsigned int cpu; | ||
1811 | int rc = 0; | ||
1812 | struct fcoe_percpu_s *p; | ||
1813 | |||
1814 | INIT_LIST_HEAD(&fcoe_hostlist); | ||
1815 | rwlock_init(&fcoe_hostlist_lock); | ||
1816 | |||
1817 | for_each_possible_cpu(cpu) { | ||
1818 | p = &per_cpu(fcoe_percpu, cpu); | ||
1819 | skb_queue_head_init(&p->fcoe_rx_list); | ||
1820 | } | ||
1821 | |||
1822 | for_each_online_cpu(cpu) | ||
1823 | fcoe_percpu_thread_create(cpu); | ||
1824 | |||
1825 | /* Initialize per CPU interrupt thread */ | ||
1826 | rc = register_hotcpu_notifier(&fcoe_cpu_notifier); | ||
1827 | if (rc) | ||
1828 | goto out_free; | ||
1829 | |||
1830 | /* Setup link change notification */ | ||
1831 | fcoe_dev_setup(); | ||
1832 | |||
1833 | setup_timer(&fcoe_timer, fcoe_watchdog, 0); | ||
1834 | |||
1835 | mod_timer(&fcoe_timer, jiffies + (10 * HZ)); | ||
1836 | |||
1837 | fcoe_if_init(); | ||
1838 | |||
1839 | return 0; | ||
1840 | |||
1841 | out_free: | ||
1842 | for_each_online_cpu(cpu) { | ||
1843 | fcoe_percpu_thread_destroy(cpu); | ||
1844 | } | ||
1845 | |||
1846 | return rc; | ||
1847 | } | ||
1848 | module_init(fcoe_init); | ||
1849 | |||
1850 | /** | ||
1851 | * fcoe_exit() - fcoe module unloading cleanup | ||
1852 | * | ||
1853 | * Returns 0 on success, negative on failure | ||
1854 | */ | ||
1855 | static void __exit fcoe_exit(void) | ||
1856 | { | ||
1857 | unsigned int cpu; | ||
1858 | struct fcoe_softc *fc, *tmp; | ||
1859 | |||
1860 | fcoe_dev_cleanup(); | ||
1861 | |||
1862 | /* Stop the timer */ | ||
1863 | del_timer_sync(&fcoe_timer); | ||
1864 | |||
1865 | /* releases the associated fcoe hosts */ | ||
1866 | list_for_each_entry_safe(fc, tmp, &fcoe_hostlist, list) | ||
1867 | fcoe_if_destroy(fc->real_dev); | ||
1868 | |||
1869 | unregister_hotcpu_notifier(&fcoe_cpu_notifier); | ||
1870 | |||
1871 | for_each_online_cpu(cpu) { | ||
1872 | fcoe_percpu_thread_destroy(cpu); | ||
1873 | } | ||
1874 | |||
1875 | /* detach from scsi transport */ | ||
1876 | fcoe_if_exit(); | ||
1877 | } | ||
1878 | module_exit(fcoe_exit); | ||
diff --git a/drivers/scsi/fcoe/fcoe.h b/drivers/scsi/fcoe/fcoe.h new file mode 100644 index 000000000000..917aae886897 --- /dev/null +++ b/drivers/scsi/fcoe/fcoe.h | |||
@@ -0,0 +1,75 @@ | |||
1 | /* | ||
2 | * Copyright(c) 2009 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License along with | ||
14 | * this program; if not, write to the Free Software Foundation, Inc., | ||
15 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
16 | * | ||
17 | * Maintained at www.Open-FCoE.org | ||
18 | */ | ||
19 | |||
20 | #ifndef _FCOE_H_ | ||
21 | #define _FCOE_H_ | ||
22 | |||
23 | #include <linux/skbuff.h> | ||
24 | #include <linux/kthread.h> | ||
25 | |||
26 | #define FCOE_MAX_QUEUE_DEPTH 256 | ||
27 | #define FCOE_LOW_QUEUE_DEPTH 32 | ||
28 | |||
29 | #define FCOE_WORD_TO_BYTE 4 | ||
30 | |||
31 | #define FCOE_VERSION "0.1" | ||
32 | #define FCOE_NAME "fcoe" | ||
33 | #define FCOE_VENDOR "Open-FCoE.org" | ||
34 | |||
35 | #define FCOE_MAX_LUN 255 | ||
36 | #define FCOE_MAX_FCP_TARGET 256 | ||
37 | |||
38 | #define FCOE_MAX_OUTSTANDING_COMMANDS 1024 | ||
39 | |||
40 | #define FCOE_MIN_XID 0x0001 /* the min xid supported by fcoe_sw */ | ||
41 | #define FCOE_MAX_XID 0x07ef /* the max xid supported by fcoe_sw */ | ||
42 | |||
43 | /* | ||
44 | * this percpu struct for fcoe | ||
45 | */ | ||
46 | struct fcoe_percpu_s { | ||
47 | struct task_struct *thread; | ||
48 | struct sk_buff_head fcoe_rx_list; | ||
49 | struct page *crc_eof_page; | ||
50 | int crc_eof_offset; | ||
51 | }; | ||
52 | |||
53 | /* | ||
54 | * the fcoe sw transport private data | ||
55 | */ | ||
56 | struct fcoe_softc { | ||
57 | struct list_head list; | ||
58 | struct net_device *real_dev; | ||
59 | struct net_device *phys_dev; /* device with ethtool_ops */ | ||
60 | struct packet_type fcoe_packet_type; | ||
61 | struct packet_type fip_packet_type; | ||
62 | struct sk_buff_head fcoe_pending_queue; | ||
63 | u8 fcoe_pending_queue_active; | ||
64 | struct fcoe_ctlr ctlr; | ||
65 | }; | ||
66 | |||
67 | #define fcoe_from_ctlr(fc) container_of(fc, struct fcoe_softc, ctlr) | ||
68 | |||
69 | static inline struct net_device *fcoe_netdev( | ||
70 | const struct fc_lport *lp) | ||
71 | { | ||
72 | return ((struct fcoe_softc *)lport_priv(lp))->real_dev; | ||
73 | } | ||
74 | |||
75 | #endif /* _FCOE_H_ */ | ||
diff --git a/drivers/scsi/fcoe/fcoe_sw.c b/drivers/scsi/fcoe/fcoe_sw.c deleted file mode 100644 index 2bbbe3c0cc7b..000000000000 --- a/drivers/scsi/fcoe/fcoe_sw.c +++ /dev/null | |||
@@ -1,561 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright(c) 2007 - 2008 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License along with | ||
14 | * this program; if not, write to the Free Software Foundation, Inc., | ||
15 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
16 | * | ||
17 | * Maintained at www.Open-FCoE.org | ||
18 | */ | ||
19 | |||
20 | #include <linux/module.h> | ||
21 | #include <linux/version.h> | ||
22 | #include <linux/kernel.h> | ||
23 | #include <linux/pci.h> | ||
24 | #include <linux/init.h> | ||
25 | #include <linux/spinlock.h> | ||
26 | #include <linux/netdevice.h> | ||
27 | #include <linux/etherdevice.h> | ||
28 | #include <linux/if_vlan.h> | ||
29 | #include <net/rtnetlink.h> | ||
30 | |||
31 | #include <scsi/fc/fc_els.h> | ||
32 | #include <scsi/fc/fc_encaps.h> | ||
33 | #include <scsi/fc/fc_fs.h> | ||
34 | #include <scsi/scsi_transport.h> | ||
35 | #include <scsi/scsi_transport_fc.h> | ||
36 | |||
37 | #include <scsi/libfc.h> | ||
38 | #include <scsi/libfcoe.h> | ||
39 | #include <scsi/fc_transport_fcoe.h> | ||
40 | |||
41 | #define FCOE_SW_VERSION "0.1" | ||
42 | #define FCOE_SW_NAME "fcoesw" | ||
43 | #define FCOE_SW_VENDOR "Open-FCoE.org" | ||
44 | |||
45 | #define FCOE_MAX_LUN 255 | ||
46 | #define FCOE_MAX_FCP_TARGET 256 | ||
47 | |||
48 | #define FCOE_MAX_OUTSTANDING_COMMANDS 1024 | ||
49 | |||
50 | #define FCOE_MIN_XID 0x0001 /* the min xid supported by fcoe_sw */ | ||
51 | #define FCOE_MAX_XID 0x07ef /* the max xid supported by fcoe_sw */ | ||
52 | |||
53 | static struct scsi_transport_template *scsi_transport_fcoe_sw; | ||
54 | |||
55 | struct fc_function_template fcoe_sw_transport_function = { | ||
56 | .show_host_node_name = 1, | ||
57 | .show_host_port_name = 1, | ||
58 | .show_host_supported_classes = 1, | ||
59 | .show_host_supported_fc4s = 1, | ||
60 | .show_host_active_fc4s = 1, | ||
61 | .show_host_maxframe_size = 1, | ||
62 | |||
63 | .show_host_port_id = 1, | ||
64 | .show_host_supported_speeds = 1, | ||
65 | .get_host_speed = fc_get_host_speed, | ||
66 | .show_host_speed = 1, | ||
67 | .show_host_port_type = 1, | ||
68 | .get_host_port_state = fc_get_host_port_state, | ||
69 | .show_host_port_state = 1, | ||
70 | .show_host_symbolic_name = 1, | ||
71 | |||
72 | .dd_fcrport_size = sizeof(struct fc_rport_libfc_priv), | ||
73 | .show_rport_maxframe_size = 1, | ||
74 | .show_rport_supported_classes = 1, | ||
75 | |||
76 | .show_host_fabric_name = 1, | ||
77 | .show_starget_node_name = 1, | ||
78 | .show_starget_port_name = 1, | ||
79 | .show_starget_port_id = 1, | ||
80 | .set_rport_dev_loss_tmo = fc_set_rport_loss_tmo, | ||
81 | .show_rport_dev_loss_tmo = 1, | ||
82 | .get_fc_host_stats = fc_get_host_stats, | ||
83 | .issue_fc_host_lip = fcoe_reset, | ||
84 | |||
85 | .terminate_rport_io = fc_rport_terminate_io, | ||
86 | }; | ||
87 | |||
88 | static struct scsi_host_template fcoe_sw_shost_template = { | ||
89 | .module = THIS_MODULE, | ||
90 | .name = "FCoE Driver", | ||
91 | .proc_name = FCOE_SW_NAME, | ||
92 | .queuecommand = fc_queuecommand, | ||
93 | .eh_abort_handler = fc_eh_abort, | ||
94 | .eh_device_reset_handler = fc_eh_device_reset, | ||
95 | .eh_host_reset_handler = fc_eh_host_reset, | ||
96 | .slave_alloc = fc_slave_alloc, | ||
97 | .change_queue_depth = fc_change_queue_depth, | ||
98 | .change_queue_type = fc_change_queue_type, | ||
99 | .this_id = -1, | ||
100 | .cmd_per_lun = 32, | ||
101 | .can_queue = FCOE_MAX_OUTSTANDING_COMMANDS, | ||
102 | .use_clustering = ENABLE_CLUSTERING, | ||
103 | .sg_tablesize = SG_ALL, | ||
104 | .max_sectors = 0xffff, | ||
105 | }; | ||
106 | |||
107 | /** | ||
108 | * fcoe_sw_lport_config() - sets up the fc_lport | ||
109 | * @lp: ptr to the fc_lport | ||
110 | * @shost: ptr to the parent scsi host | ||
111 | * | ||
112 | * Returns: 0 for success | ||
113 | */ | ||
114 | static int fcoe_sw_lport_config(struct fc_lport *lp) | ||
115 | { | ||
116 | int i = 0; | ||
117 | |||
118 | lp->link_up = 0; | ||
119 | lp->qfull = 0; | ||
120 | lp->max_retry_count = 3; | ||
121 | lp->e_d_tov = 2 * 1000; /* FC-FS default */ | ||
122 | lp->r_a_tov = 2 * 2 * 1000; | ||
123 | lp->service_params = (FCP_SPPF_INIT_FCN | FCP_SPPF_RD_XRDY_DIS | | ||
124 | FCP_SPPF_RETRY | FCP_SPPF_CONF_COMPL); | ||
125 | |||
126 | /* | ||
127 | * allocate per cpu stats block | ||
128 | */ | ||
129 | for_each_online_cpu(i) | ||
130 | lp->dev_stats[i] = kzalloc(sizeof(struct fcoe_dev_stats), | ||
131 | GFP_KERNEL); | ||
132 | |||
133 | /* lport fc_lport related configuration */ | ||
134 | fc_lport_config(lp); | ||
135 | |||
136 | /* offload related configuration */ | ||
137 | lp->crc_offload = 0; | ||
138 | lp->seq_offload = 0; | ||
139 | lp->lro_enabled = 0; | ||
140 | lp->lro_xid = 0; | ||
141 | lp->lso_max = 0; | ||
142 | |||
143 | return 0; | ||
144 | } | ||
145 | |||
146 | /** | ||
147 | * fcoe_sw_netdev_config() - Set up netdev for SW FCoE | ||
148 | * @lp : ptr to the fc_lport | ||
149 | * @netdev : ptr to the associated netdevice struct | ||
150 | * | ||
151 | * Must be called after fcoe_sw_lport_config() as it will use lport mutex | ||
152 | * | ||
153 | * Returns : 0 for success | ||
154 | */ | ||
155 | static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev) | ||
156 | { | ||
157 | u32 mfs; | ||
158 | u64 wwnn, wwpn; | ||
159 | struct fcoe_softc *fc; | ||
160 | u8 flogi_maddr[ETH_ALEN]; | ||
161 | |||
162 | /* Setup lport private data to point to fcoe softc */ | ||
163 | fc = lport_priv(lp); | ||
164 | fc->lp = lp; | ||
165 | fc->real_dev = netdev; | ||
166 | fc->phys_dev = netdev; | ||
167 | |||
168 | /* Require support for get_pauseparam ethtool op. */ | ||
169 | if (netdev->priv_flags & IFF_802_1Q_VLAN) | ||
170 | fc->phys_dev = vlan_dev_real_dev(netdev); | ||
171 | |||
172 | /* Do not support for bonding device */ | ||
173 | if ((fc->real_dev->priv_flags & IFF_MASTER_ALB) || | ||
174 | (fc->real_dev->priv_flags & IFF_SLAVE_INACTIVE) || | ||
175 | (fc->real_dev->priv_flags & IFF_MASTER_8023AD)) { | ||
176 | return -EOPNOTSUPP; | ||
177 | } | ||
178 | |||
179 | /* | ||
180 | * Determine max frame size based on underlying device and optional | ||
181 | * user-configured limit. If the MFS is too low, fcoe_link_ok() | ||
182 | * will return 0, so do this first. | ||
183 | */ | ||
184 | mfs = fc->real_dev->mtu - (sizeof(struct fcoe_hdr) + | ||
185 | sizeof(struct fcoe_crc_eof)); | ||
186 | if (fc_set_mfs(lp, mfs)) | ||
187 | return -EINVAL; | ||
188 | |||
189 | if (!fcoe_link_ok(lp)) | ||
190 | lp->link_up = 1; | ||
191 | |||
192 | /* offload features support */ | ||
193 | if (fc->real_dev->features & NETIF_F_SG) | ||
194 | lp->sg_supp = 1; | ||
195 | |||
196 | #ifdef NETIF_F_FCOE_CRC | ||
197 | if (netdev->features & NETIF_F_FCOE_CRC) { | ||
198 | lp->crc_offload = 1; | ||
199 | printk(KERN_DEBUG "fcoe:%s supports FCCRC offload\n", | ||
200 | netdev->name); | ||
201 | } | ||
202 | #endif | ||
203 | #ifdef NETIF_F_FSO | ||
204 | if (netdev->features & NETIF_F_FSO) { | ||
205 | lp->seq_offload = 1; | ||
206 | lp->lso_max = netdev->gso_max_size; | ||
207 | printk(KERN_DEBUG "fcoe:%s supports LSO for max len 0x%x\n", | ||
208 | netdev->name, lp->lso_max); | ||
209 | } | ||
210 | #endif | ||
211 | if (netdev->fcoe_ddp_xid) { | ||
212 | lp->lro_enabled = 1; | ||
213 | lp->lro_xid = netdev->fcoe_ddp_xid; | ||
214 | printk(KERN_DEBUG "fcoe:%s supports LRO for max xid 0x%x\n", | ||
215 | netdev->name, lp->lro_xid); | ||
216 | } | ||
217 | skb_queue_head_init(&fc->fcoe_pending_queue); | ||
218 | fc->fcoe_pending_queue_active = 0; | ||
219 | |||
220 | /* setup Source Mac Address */ | ||
221 | memcpy(fc->ctl_src_addr, fc->real_dev->dev_addr, | ||
222 | fc->real_dev->addr_len); | ||
223 | |||
224 | wwnn = fcoe_wwn_from_mac(fc->real_dev->dev_addr, 1, 0); | ||
225 | fc_set_wwnn(lp, wwnn); | ||
226 | /* XXX - 3rd arg needs to be vlan id */ | ||
227 | wwpn = fcoe_wwn_from_mac(fc->real_dev->dev_addr, 2, 0); | ||
228 | fc_set_wwpn(lp, wwpn); | ||
229 | |||
230 | /* | ||
231 | * Add FCoE MAC address as second unicast MAC address | ||
232 | * or enter promiscuous mode if not capable of listening | ||
233 | * for multiple unicast MACs. | ||
234 | */ | ||
235 | rtnl_lock(); | ||
236 | memcpy(flogi_maddr, (u8[6]) FC_FCOE_FLOGI_MAC, ETH_ALEN); | ||
237 | dev_unicast_add(fc->real_dev, flogi_maddr, ETH_ALEN); | ||
238 | rtnl_unlock(); | ||
239 | |||
240 | /* | ||
241 | * setup the receive function from ethernet driver | ||
242 | * on the ethertype for the given device | ||
243 | */ | ||
244 | fc->fcoe_packet_type.func = fcoe_rcv; | ||
245 | fc->fcoe_packet_type.type = __constant_htons(ETH_P_FCOE); | ||
246 | fc->fcoe_packet_type.dev = fc->real_dev; | ||
247 | dev_add_pack(&fc->fcoe_packet_type); | ||
248 | |||
249 | return 0; | ||
250 | } | ||
251 | |||
252 | /** | ||
253 | * fcoe_sw_shost_config() - Sets up fc_lport->host | ||
254 | * @lp : ptr to the fc_lport | ||
255 | * @shost : ptr to the associated scsi host | ||
256 | * @dev : device associated to scsi host | ||
257 | * | ||
258 | * Must be called after fcoe_sw_lport_config() and fcoe_sw_netdev_config() | ||
259 | * | ||
260 | * Returns : 0 for success | ||
261 | */ | ||
262 | static int fcoe_sw_shost_config(struct fc_lport *lp, struct Scsi_Host *shost, | ||
263 | struct device *dev) | ||
264 | { | ||
265 | int rc = 0; | ||
266 | |||
267 | /* lport scsi host config */ | ||
268 | lp->host = shost; | ||
269 | |||
270 | lp->host->max_lun = FCOE_MAX_LUN; | ||
271 | lp->host->max_id = FCOE_MAX_FCP_TARGET; | ||
272 | lp->host->max_channel = 0; | ||
273 | lp->host->transportt = scsi_transport_fcoe_sw; | ||
274 | |||
275 | /* add the new host to the SCSI-ml */ | ||
276 | rc = scsi_add_host(lp->host, dev); | ||
277 | if (rc) { | ||
278 | FC_DBG("fcoe_sw_shost_config:error on scsi_add_host\n"); | ||
279 | return rc; | ||
280 | } | ||
281 | sprintf(fc_host_symbolic_name(lp->host), "%s v%s over %s", | ||
282 | FCOE_SW_NAME, FCOE_SW_VERSION, | ||
283 | fcoe_netdev(lp)->name); | ||
284 | |||
285 | return 0; | ||
286 | } | ||
287 | |||
288 | /** | ||
289 | * fcoe_sw_em_config() - allocates em for this lport | ||
290 | * @lp: the port that em is to allocated for | ||
291 | * | ||
292 | * Returns : 0 on success | ||
293 | */ | ||
294 | static inline int fcoe_sw_em_config(struct fc_lport *lp) | ||
295 | { | ||
296 | BUG_ON(lp->emp); | ||
297 | |||
298 | lp->emp = fc_exch_mgr_alloc(lp, FC_CLASS_3, | ||
299 | FCOE_MIN_XID, FCOE_MAX_XID); | ||
300 | if (!lp->emp) | ||
301 | return -ENOMEM; | ||
302 | |||
303 | return 0; | ||
304 | } | ||
305 | |||
306 | /** | ||
307 | * fcoe_sw_destroy() - FCoE software HBA tear-down function | ||
308 | * @netdev: ptr to the associated net_device | ||
309 | * | ||
310 | * Returns: 0 if link is OK for use by FCoE. | ||
311 | */ | ||
312 | static int fcoe_sw_destroy(struct net_device *netdev) | ||
313 | { | ||
314 | int cpu; | ||
315 | struct fc_lport *lp = NULL; | ||
316 | struct fcoe_softc *fc; | ||
317 | u8 flogi_maddr[ETH_ALEN]; | ||
318 | |||
319 | BUG_ON(!netdev); | ||
320 | |||
321 | printk(KERN_DEBUG "fcoe_sw_destroy:interface on %s\n", | ||
322 | netdev->name); | ||
323 | |||
324 | lp = fcoe_hostlist_lookup(netdev); | ||
325 | if (!lp) | ||
326 | return -ENODEV; | ||
327 | |||
328 | fc = lport_priv(lp); | ||
329 | |||
330 | /* Logout of the fabric */ | ||
331 | fc_fabric_logoff(lp); | ||
332 | |||
333 | /* Remove the instance from fcoe's list */ | ||
334 | fcoe_hostlist_remove(lp); | ||
335 | |||
336 | /* Don't listen for Ethernet packets anymore */ | ||
337 | dev_remove_pack(&fc->fcoe_packet_type); | ||
338 | |||
339 | /* Cleanup the fc_lport */ | ||
340 | fc_lport_destroy(lp); | ||
341 | fc_fcp_destroy(lp); | ||
342 | |||
343 | /* Detach from the scsi-ml */ | ||
344 | fc_remove_host(lp->host); | ||
345 | scsi_remove_host(lp->host); | ||
346 | |||
347 | /* There are no more rports or I/O, free the EM */ | ||
348 | if (lp->emp) | ||
349 | fc_exch_mgr_free(lp->emp); | ||
350 | |||
351 | /* Delete secondary MAC addresses */ | ||
352 | rtnl_lock(); | ||
353 | memcpy(flogi_maddr, (u8[6]) FC_FCOE_FLOGI_MAC, ETH_ALEN); | ||
354 | dev_unicast_delete(fc->real_dev, flogi_maddr, ETH_ALEN); | ||
355 | if (compare_ether_addr(fc->data_src_addr, (u8[6]) { 0 })) | ||
356 | dev_unicast_delete(fc->real_dev, fc->data_src_addr, ETH_ALEN); | ||
357 | rtnl_unlock(); | ||
358 | |||
359 | /* Free the per-CPU revieve threads */ | ||
360 | fcoe_percpu_clean(lp); | ||
361 | |||
362 | /* Free existing skbs */ | ||
363 | fcoe_clean_pending_queue(lp); | ||
364 | |||
365 | /* Free memory used by statistical counters */ | ||
366 | for_each_online_cpu(cpu) | ||
367 | kfree(lp->dev_stats[cpu]); | ||
368 | |||
369 | /* Release the net_device and Scsi_Host */ | ||
370 | dev_put(fc->real_dev); | ||
371 | scsi_host_put(lp->host); | ||
372 | |||
373 | return 0; | ||
374 | } | ||
375 | |||
376 | /* | ||
377 | * fcoe_sw_ddp_setup - calls LLD's ddp_setup through net_device | ||
378 | * @lp: the corresponding fc_lport | ||
379 | * @xid: the exchange id for this ddp transfer | ||
380 | * @sgl: the scatterlist describing this transfer | ||
381 | * @sgc: number of sg items | ||
382 | * | ||
383 | * Returns : 0 no ddp | ||
384 | */ | ||
385 | static int fcoe_sw_ddp_setup(struct fc_lport *lp, u16 xid, | ||
386 | struct scatterlist *sgl, unsigned int sgc) | ||
387 | { | ||
388 | struct net_device *n = fcoe_netdev(lp); | ||
389 | |||
390 | if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_setup) | ||
391 | return n->netdev_ops->ndo_fcoe_ddp_setup(n, xid, sgl, sgc); | ||
392 | |||
393 | return 0; | ||
394 | } | ||
395 | |||
396 | /* | ||
397 | * fcoe_sw_ddp_done - calls LLD's ddp_done through net_device | ||
398 | * @lp: the corresponding fc_lport | ||
399 | * @xid: the exchange id for this ddp transfer | ||
400 | * | ||
401 | * Returns : the length of data that have been completed by ddp | ||
402 | */ | ||
403 | static int fcoe_sw_ddp_done(struct fc_lport *lp, u16 xid) | ||
404 | { | ||
405 | struct net_device *n = fcoe_netdev(lp); | ||
406 | |||
407 | if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_done) | ||
408 | return n->netdev_ops->ndo_fcoe_ddp_done(n, xid); | ||
409 | return 0; | ||
410 | } | ||
411 | |||
412 | static struct libfc_function_template fcoe_sw_libfc_fcn_templ = { | ||
413 | .frame_send = fcoe_xmit, | ||
414 | .ddp_setup = fcoe_sw_ddp_setup, | ||
415 | .ddp_done = fcoe_sw_ddp_done, | ||
416 | }; | ||
417 | |||
418 | /** | ||
419 | * fcoe_sw_create() - this function creates the fcoe interface | ||
420 | * @netdev: pointer the associated netdevice | ||
421 | * | ||
422 | * Creates fc_lport struct and scsi_host for lport, configures lport | ||
423 | * and starts fabric login. | ||
424 | * | ||
425 | * Returns : 0 on success | ||
426 | */ | ||
427 | static int fcoe_sw_create(struct net_device *netdev) | ||
428 | { | ||
429 | int rc; | ||
430 | struct fc_lport *lp = NULL; | ||
431 | struct fcoe_softc *fc; | ||
432 | struct Scsi_Host *shost; | ||
433 | |||
434 | BUG_ON(!netdev); | ||
435 | |||
436 | printk(KERN_DEBUG "fcoe_sw_create:interface on %s\n", | ||
437 | netdev->name); | ||
438 | |||
439 | lp = fcoe_hostlist_lookup(netdev); | ||
440 | if (lp) | ||
441 | return -EEXIST; | ||
442 | |||
443 | shost = fcoe_host_alloc(&fcoe_sw_shost_template, | ||
444 | sizeof(struct fcoe_softc)); | ||
445 | if (!shost) { | ||
446 | FC_DBG("Could not allocate host structure\n"); | ||
447 | return -ENOMEM; | ||
448 | } | ||
449 | lp = shost_priv(shost); | ||
450 | fc = lport_priv(lp); | ||
451 | |||
452 | /* configure fc_lport, e.g., em */ | ||
453 | rc = fcoe_sw_lport_config(lp); | ||
454 | if (rc) { | ||
455 | FC_DBG("Could not configure lport\n"); | ||
456 | goto out_host_put; | ||
457 | } | ||
458 | |||
459 | /* configure lport network properties */ | ||
460 | rc = fcoe_sw_netdev_config(lp, netdev); | ||
461 | if (rc) { | ||
462 | FC_DBG("Could not configure netdev for lport\n"); | ||
463 | goto out_host_put; | ||
464 | } | ||
465 | |||
466 | /* configure lport scsi host properties */ | ||
467 | rc = fcoe_sw_shost_config(lp, shost, &netdev->dev); | ||
468 | if (rc) { | ||
469 | FC_DBG("Could not configure shost for lport\n"); | ||
470 | goto out_host_put; | ||
471 | } | ||
472 | |||
473 | /* lport exch manager allocation */ | ||
474 | rc = fcoe_sw_em_config(lp); | ||
475 | if (rc) { | ||
476 | FC_DBG("Could not configure em for lport\n"); | ||
477 | goto out_host_put; | ||
478 | } | ||
479 | |||
480 | /* Initialize the library */ | ||
481 | rc = fcoe_libfc_config(lp, &fcoe_sw_libfc_fcn_templ); | ||
482 | if (rc) { | ||
483 | FC_DBG("Could not configure libfc for lport!\n"); | ||
484 | goto out_lp_destroy; | ||
485 | } | ||
486 | |||
487 | /* add to lports list */ | ||
488 | fcoe_hostlist_add(lp); | ||
489 | |||
490 | lp->boot_time = jiffies; | ||
491 | |||
492 | fc_fabric_login(lp); | ||
493 | |||
494 | dev_hold(netdev); | ||
495 | |||
496 | return rc; | ||
497 | |||
498 | out_lp_destroy: | ||
499 | fc_exch_mgr_free(lp->emp); /* Free the EM */ | ||
500 | out_host_put: | ||
501 | scsi_host_put(lp->host); | ||
502 | return rc; | ||
503 | } | ||
504 | |||
505 | /** | ||
506 | * fcoe_sw_match() - The FCoE SW transport match function | ||
507 | * | ||
508 | * Returns : false always | ||
509 | */ | ||
510 | static bool fcoe_sw_match(struct net_device *netdev) | ||
511 | { | ||
512 | /* FIXME - for sw transport, always return false */ | ||
513 | return false; | ||
514 | } | ||
515 | |||
516 | /* the sw hba fcoe transport */ | ||
517 | struct fcoe_transport fcoe_sw_transport = { | ||
518 | .name = "fcoesw", | ||
519 | .create = fcoe_sw_create, | ||
520 | .destroy = fcoe_sw_destroy, | ||
521 | .match = fcoe_sw_match, | ||
522 | .vendor = 0x0, | ||
523 | .device = 0xffff, | ||
524 | }; | ||
525 | |||
526 | /** | ||
527 | * fcoe_sw_init() - Registers fcoe_sw_transport | ||
528 | * | ||
529 | * Returns : 0 on success | ||
530 | */ | ||
531 | int __init fcoe_sw_init(void) | ||
532 | { | ||
533 | /* attach to scsi transport */ | ||
534 | scsi_transport_fcoe_sw = | ||
535 | fc_attach_transport(&fcoe_sw_transport_function); | ||
536 | |||
537 | if (!scsi_transport_fcoe_sw) { | ||
538 | printk(KERN_ERR "fcoe_sw_init:fc_attach_transport() failed\n"); | ||
539 | return -ENODEV; | ||
540 | } | ||
541 | |||
542 | mutex_init(&fcoe_sw_transport.devlock); | ||
543 | INIT_LIST_HEAD(&fcoe_sw_transport.devlist); | ||
544 | |||
545 | /* register sw transport */ | ||
546 | fcoe_transport_register(&fcoe_sw_transport); | ||
547 | return 0; | ||
548 | } | ||
549 | |||
550 | /** | ||
551 | * fcoe_sw_exit() - Unregisters fcoe_sw_transport | ||
552 | * | ||
553 | * Returns : 0 on success | ||
554 | */ | ||
555 | int __exit fcoe_sw_exit(void) | ||
556 | { | ||
557 | /* dettach the transport */ | ||
558 | fc_release_transport(scsi_transport_fcoe_sw); | ||
559 | fcoe_transport_unregister(&fcoe_sw_transport); | ||
560 | return 0; | ||
561 | } | ||
diff --git a/drivers/scsi/fcoe/libfcoe.c b/drivers/scsi/fcoe/libfcoe.c index 0d6f5beb7f9e..f410f4abb548 100644 --- a/drivers/scsi/fcoe/libfcoe.c +++ b/drivers/scsi/fcoe/libfcoe.c | |||
@@ -1,5 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright(c) 2007 - 2008 Intel Corporation. All rights reserved. | 2 | * Copyright (c) 2008-2009 Cisco Systems, Inc. All rights reserved. |
3 | * Copyright (c) 2009 Intel Corporation. All rights reserved. | ||
3 | * | 4 | * |
4 | * 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 |
5 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
@@ -17,1200 +18,1260 @@ | |||
17 | * Maintained at www.Open-FCoE.org | 18 | * Maintained at www.Open-FCoE.org |
18 | */ | 19 | */ |
19 | 20 | ||
21 | #include <linux/types.h> | ||
20 | #include <linux/module.h> | 22 | #include <linux/module.h> |
21 | #include <linux/version.h> | ||
22 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
24 | #include <linux/list.h> | ||
23 | #include <linux/spinlock.h> | 25 | #include <linux/spinlock.h> |
24 | #include <linux/skbuff.h> | 26 | #include <linux/timer.h> |
25 | #include <linux/netdevice.h> | 27 | #include <linux/netdevice.h> |
26 | #include <linux/etherdevice.h> | 28 | #include <linux/etherdevice.h> |
27 | #include <linux/ethtool.h> | 29 | #include <linux/ethtool.h> |
28 | #include <linux/if_ether.h> | 30 | #include <linux/if_ether.h> |
29 | #include <linux/if_vlan.h> | 31 | #include <linux/if_vlan.h> |
30 | #include <linux/kthread.h> | 32 | #include <linux/netdevice.h> |
31 | #include <linux/crc32.h> | 33 | #include <linux/errno.h> |
32 | #include <linux/cpu.h> | 34 | #include <linux/bitops.h> |
33 | #include <linux/fs.h> | ||
34 | #include <linux/sysfs.h> | ||
35 | #include <linux/ctype.h> | ||
36 | #include <scsi/scsi_tcq.h> | ||
37 | #include <scsi/scsicam.h> | ||
38 | #include <scsi/scsi_transport.h> | ||
39 | #include <scsi/scsi_transport_fc.h> | ||
40 | #include <net/rtnetlink.h> | 35 | #include <net/rtnetlink.h> |
41 | 36 | ||
37 | #include <scsi/fc/fc_els.h> | ||
38 | #include <scsi/fc/fc_fs.h> | ||
39 | #include <scsi/fc/fc_fip.h> | ||
42 | #include <scsi/fc/fc_encaps.h> | 40 | #include <scsi/fc/fc_encaps.h> |
41 | #include <scsi/fc/fc_fcoe.h> | ||
43 | 42 | ||
44 | #include <scsi/libfc.h> | 43 | #include <scsi/libfc.h> |
45 | #include <scsi/fc_frame.h> | ||
46 | #include <scsi/libfcoe.h> | 44 | #include <scsi/libfcoe.h> |
47 | #include <scsi/fc_transport_fcoe.h> | ||
48 | |||
49 | static int debug_fcoe; | ||
50 | 45 | ||
51 | #define FCOE_MAX_QUEUE_DEPTH 256 | 46 | MODULE_AUTHOR("Open-FCoE.org"); |
52 | #define FCOE_LOW_QUEUE_DEPTH 32 | 47 | MODULE_DESCRIPTION("FIP discovery protocol support for FCoE HBAs"); |
48 | MODULE_LICENSE("GPL v2"); | ||
53 | 49 | ||
54 | /* destination address mode */ | 50 | #define FCOE_CTLR_MIN_FKA 500 /* min keep alive (mS) */ |
55 | #define FCOE_GW_ADDR_MODE 0x00 | 51 | #define FCOE_CTLR_DEF_FKA FIP_DEF_FKA /* default keep alive (mS) */ |
56 | #define FCOE_FCOUI_ADDR_MODE 0x01 | ||
57 | 52 | ||
58 | #define FCOE_WORD_TO_BYTE 4 | 53 | static void fcoe_ctlr_timeout(unsigned long); |
54 | static void fcoe_ctlr_link_work(struct work_struct *); | ||
55 | static void fcoe_ctlr_recv_work(struct work_struct *); | ||
59 | 56 | ||
60 | MODULE_AUTHOR("Open-FCoE.org"); | 57 | static u8 fcoe_all_fcfs[ETH_ALEN] = FIP_ALL_FCF_MACS; |
61 | MODULE_DESCRIPTION("FCoE"); | ||
62 | MODULE_LICENSE("GPL"); | ||
63 | 58 | ||
64 | /* fcoe host list */ | 59 | static u32 fcoe_ctlr_debug; /* 1 for basic, 2 for noisy debug */ |
65 | LIST_HEAD(fcoe_hostlist); | ||
66 | DEFINE_RWLOCK(fcoe_hostlist_lock); | ||
67 | DEFINE_TIMER(fcoe_timer, NULL, 0, 0); | ||
68 | struct fcoe_percpu_s *fcoe_percpu[NR_CPUS]; | ||
69 | 60 | ||
61 | #define FIP_DBG_LVL(level, fmt, args...) \ | ||
62 | do { \ | ||
63 | if (fcoe_ctlr_debug >= (level)) \ | ||
64 | FC_DBG(fmt, ##args); \ | ||
65 | } while (0) | ||
70 | 66 | ||
71 | /* Function Prototyes */ | 67 | #define FIP_DBG(fmt, args...) FIP_DBG_LVL(1, fmt, ##args) |
72 | static int fcoe_check_wait_queue(struct fc_lport *); | ||
73 | static void fcoe_recv_flogi(struct fcoe_softc *, struct fc_frame *, u8 *); | ||
74 | #ifdef CONFIG_HOTPLUG_CPU | ||
75 | static int fcoe_cpu_callback(struct notifier_block *, ulong, void *); | ||
76 | #endif /* CONFIG_HOTPLUG_CPU */ | ||
77 | static int fcoe_device_notification(struct notifier_block *, ulong, void *); | ||
78 | static void fcoe_dev_setup(void); | ||
79 | static void fcoe_dev_cleanup(void); | ||
80 | 68 | ||
81 | /* notification function from net device */ | 69 | /* |
82 | static struct notifier_block fcoe_notifier = { | 70 | * Return non-zero if FCF fcoe_size has been validated. |
83 | .notifier_call = fcoe_device_notification, | 71 | */ |
84 | }; | 72 | static inline int fcoe_ctlr_mtu_valid(const struct fcoe_fcf *fcf) |
73 | { | ||
74 | return (fcf->flags & FIP_FL_SOL) != 0; | ||
75 | } | ||
85 | 76 | ||
77 | /* | ||
78 | * Return non-zero if the FCF is usable. | ||
79 | */ | ||
80 | static inline int fcoe_ctlr_fcf_usable(struct fcoe_fcf *fcf) | ||
81 | { | ||
82 | u16 flags = FIP_FL_SOL | FIP_FL_AVAIL; | ||
86 | 83 | ||
87 | #ifdef CONFIG_HOTPLUG_CPU | 84 | return (fcf->flags & flags) == flags; |
88 | static struct notifier_block fcoe_cpu_notifier = { | 85 | } |
89 | .notifier_call = fcoe_cpu_callback, | ||
90 | }; | ||
91 | 86 | ||
92 | /** | 87 | /** |
93 | * fcoe_create_percpu_data() - creates the associated cpu data | 88 | * fcoe_ctlr_init() - Initialize the FCoE Controller instance. |
94 | * @cpu: index for the cpu where fcoe cpu data will be created | 89 | * @fip: FCoE controller. |
95 | * | ||
96 | * create percpu stats block, from cpu add notifier | ||
97 | * | ||
98 | * Returns: none | ||
99 | */ | 90 | */ |
100 | static void fcoe_create_percpu_data(int cpu) | 91 | void fcoe_ctlr_init(struct fcoe_ctlr *fip) |
101 | { | 92 | { |
102 | struct fc_lport *lp; | 93 | fip->state = FIP_ST_LINK_WAIT; |
103 | struct fcoe_softc *fc; | 94 | INIT_LIST_HEAD(&fip->fcfs); |
104 | 95 | spin_lock_init(&fip->lock); | |
105 | write_lock_bh(&fcoe_hostlist_lock); | 96 | fip->flogi_oxid = FC_XID_UNKNOWN; |
106 | list_for_each_entry(fc, &fcoe_hostlist, list) { | 97 | setup_timer(&fip->timer, fcoe_ctlr_timeout, (unsigned long)fip); |
107 | lp = fc->lp; | 98 | INIT_WORK(&fip->link_work, fcoe_ctlr_link_work); |
108 | if (lp->dev_stats[cpu] == NULL) | 99 | INIT_WORK(&fip->recv_work, fcoe_ctlr_recv_work); |
109 | lp->dev_stats[cpu] = | 100 | skb_queue_head_init(&fip->fip_recv_list); |
110 | kzalloc(sizeof(struct fcoe_dev_stats), | ||
111 | GFP_KERNEL); | ||
112 | } | ||
113 | write_unlock_bh(&fcoe_hostlist_lock); | ||
114 | } | 101 | } |
102 | EXPORT_SYMBOL(fcoe_ctlr_init); | ||
115 | 103 | ||
116 | /** | 104 | /** |
117 | * fcoe_destroy_percpu_data() - destroys the associated cpu data | 105 | * fcoe_ctlr_reset_fcfs() - Reset and free all FCFs for a controller. |
118 | * @cpu: index for the cpu where fcoe cpu data will destroyed | 106 | * @fip: FCoE controller. |
119 | * | ||
120 | * destroy percpu stats block called by cpu add/remove notifier | ||
121 | * | 107 | * |
122 | * Retuns: none | 108 | * Called with &fcoe_ctlr lock held. |
123 | */ | 109 | */ |
124 | static void fcoe_destroy_percpu_data(int cpu) | 110 | static void fcoe_ctlr_reset_fcfs(struct fcoe_ctlr *fip) |
125 | { | 111 | { |
126 | struct fc_lport *lp; | 112 | struct fcoe_fcf *fcf; |
127 | struct fcoe_softc *fc; | 113 | struct fcoe_fcf *next; |
128 | 114 | ||
129 | write_lock_bh(&fcoe_hostlist_lock); | 115 | fip->sel_fcf = NULL; |
130 | list_for_each_entry(fc, &fcoe_hostlist, list) { | 116 | list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { |
131 | lp = fc->lp; | 117 | list_del(&fcf->list); |
132 | kfree(lp->dev_stats[cpu]); | 118 | kfree(fcf); |
133 | lp->dev_stats[cpu] = NULL; | ||
134 | } | 119 | } |
135 | write_unlock_bh(&fcoe_hostlist_lock); | 120 | fip->fcf_count = 0; |
121 | fip->sel_time = 0; | ||
136 | } | 122 | } |
137 | 123 | ||
138 | /** | 124 | /** |
139 | * fcoe_cpu_callback() - fcoe cpu hotplug event callback | 125 | * fcoe_ctrl_destroy() - Disable and tear-down the FCoE controller. |
140 | * @nfb: callback data block | 126 | * @fip: FCoE controller. |
141 | * @action: event triggering the callback | 127 | * |
142 | * @hcpu: index for the cpu of this event | 128 | * This is called by FCoE drivers before freeing the &fcoe_ctlr. |
143 | * | 129 | * |
144 | * this creates or destroys per cpu data for fcoe | 130 | * The receive handler will have been deleted before this to guarantee |
131 | * that no more recv_work will be scheduled. | ||
145 | * | 132 | * |
146 | * Returns NOTIFY_OK always. | 133 | * The timer routine will simply return once we set FIP_ST_DISABLED. |
134 | * This guarantees that no further timeouts or work will be scheduled. | ||
147 | */ | 135 | */ |
148 | static int fcoe_cpu_callback(struct notifier_block *nfb, unsigned long action, | 136 | void fcoe_ctlr_destroy(struct fcoe_ctlr *fip) |
149 | void *hcpu) | ||
150 | { | 137 | { |
151 | unsigned int cpu = (unsigned long)hcpu; | 138 | flush_work(&fip->recv_work); |
152 | 139 | spin_lock_bh(&fip->lock); | |
153 | switch (action) { | 140 | fip->state = FIP_ST_DISABLED; |
154 | case CPU_ONLINE: | 141 | fcoe_ctlr_reset_fcfs(fip); |
155 | fcoe_create_percpu_data(cpu); | 142 | spin_unlock_bh(&fip->lock); |
156 | break; | 143 | del_timer_sync(&fip->timer); |
157 | case CPU_DEAD: | 144 | flush_work(&fip->link_work); |
158 | fcoe_destroy_percpu_data(cpu); | ||
159 | break; | ||
160 | default: | ||
161 | break; | ||
162 | } | ||
163 | return NOTIFY_OK; | ||
164 | } | 145 | } |
165 | #endif /* CONFIG_HOTPLUG_CPU */ | 146 | EXPORT_SYMBOL(fcoe_ctlr_destroy); |
166 | 147 | ||
167 | /** | 148 | /** |
168 | * fcoe_rcv() - this is the fcoe receive function called by NET_RX_SOFTIRQ | 149 | * fcoe_ctlr_fcoe_size() - Return the maximum FCoE size required for VN_Port. |
169 | * @skb: the receive skb | 150 | * @fip: FCoE controller. |
170 | * @dev: associated net device | ||
171 | * @ptype: context | ||
172 | * @odldev: last device | ||
173 | * | ||
174 | * this function will receive the packet and build fc frame and pass it up | ||
175 | * | 151 | * |
176 | * Returns: 0 for success | 152 | * Returns the maximum packet size including the FCoE header and trailer, |
153 | * but not including any Ethernet or VLAN headers. | ||
177 | */ | 154 | */ |
178 | int fcoe_rcv(struct sk_buff *skb, struct net_device *dev, | 155 | static inline u32 fcoe_ctlr_fcoe_size(struct fcoe_ctlr *fip) |
179 | struct packet_type *ptype, struct net_device *olddev) | ||
180 | { | 156 | { |
181 | struct fc_lport *lp; | 157 | /* |
182 | struct fcoe_rcv_info *fr; | 158 | * Determine the max FCoE frame size allowed, including |
183 | struct fcoe_softc *fc; | 159 | * FCoE header and trailer. |
184 | struct fcoe_dev_stats *stats; | 160 | * Note: lp->mfs is currently the payload size, not the frame size. |
185 | struct fc_frame_header *fh; | 161 | */ |
186 | unsigned short oxid; | 162 | return fip->lp->mfs + sizeof(struct fc_frame_header) + |
187 | int cpu_idx; | 163 | sizeof(struct fcoe_hdr) + sizeof(struct fcoe_crc_eof); |
188 | struct fcoe_percpu_s *fps; | 164 | } |
189 | |||
190 | fc = container_of(ptype, struct fcoe_softc, fcoe_packet_type); | ||
191 | lp = fc->lp; | ||
192 | if (unlikely(lp == NULL)) { | ||
193 | FC_DBG("cannot find hba structure"); | ||
194 | goto err2; | ||
195 | } | ||
196 | |||
197 | if (unlikely(debug_fcoe)) { | ||
198 | FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p tail:%p " | ||
199 | "end:%p sum:%d dev:%s", skb->len, skb->data_len, | ||
200 | skb->head, skb->data, skb_tail_pointer(skb), | ||
201 | skb_end_pointer(skb), skb->csum, | ||
202 | skb->dev ? skb->dev->name : "<NULL>"); | ||
203 | 165 | ||
204 | } | 166 | /** |
167 | * fcoe_ctlr_solicit() - Send a solicitation. | ||
168 | * @fip: FCoE controller. | ||
169 | * @fcf: Destination FCF. If NULL, a multicast solicitation is sent. | ||
170 | */ | ||
171 | static void fcoe_ctlr_solicit(struct fcoe_ctlr *fip, struct fcoe_fcf *fcf) | ||
172 | { | ||
173 | struct sk_buff *skb; | ||
174 | struct fip_sol { | ||
175 | struct ethhdr eth; | ||
176 | struct fip_header fip; | ||
177 | struct { | ||
178 | struct fip_mac_desc mac; | ||
179 | struct fip_wwn_desc wwnn; | ||
180 | struct fip_size_desc size; | ||
181 | } __attribute__((packed)) desc; | ||
182 | } __attribute__((packed)) *sol; | ||
183 | u32 fcoe_size; | ||
184 | |||
185 | skb = dev_alloc_skb(sizeof(*sol)); | ||
186 | if (!skb) | ||
187 | return; | ||
205 | 188 | ||
206 | /* check for FCOE packet type */ | 189 | sol = (struct fip_sol *)skb->data; |
207 | if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) { | ||
208 | FC_DBG("wrong FC type frame"); | ||
209 | goto err; | ||
210 | } | ||
211 | 190 | ||
212 | /* | 191 | memset(sol, 0, sizeof(*sol)); |
213 | * Check for minimum frame length, and make sure required FCoE | 192 | memcpy(sol->eth.h_dest, fcf ? fcf->fcf_mac : fcoe_all_fcfs, ETH_ALEN); |
214 | * and FC headers are pulled into the linear data area. | 193 | memcpy(sol->eth.h_source, fip->ctl_src_addr, ETH_ALEN); |
215 | */ | 194 | sol->eth.h_proto = htons(ETH_P_FIP); |
216 | if (unlikely((skb->len < FCOE_MIN_FRAME) || | ||
217 | !pskb_may_pull(skb, FCOE_HEADER_LEN))) | ||
218 | goto err; | ||
219 | 195 | ||
220 | skb_set_transport_header(skb, sizeof(struct fcoe_hdr)); | 196 | sol->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER); |
221 | fh = (struct fc_frame_header *) skb_transport_header(skb); | 197 | sol->fip.fip_op = htons(FIP_OP_DISC); |
198 | sol->fip.fip_subcode = FIP_SC_SOL; | ||
199 | sol->fip.fip_dl_len = htons(sizeof(sol->desc) / FIP_BPW); | ||
200 | sol->fip.fip_flags = htons(FIP_FL_FPMA); | ||
222 | 201 | ||
223 | oxid = ntohs(fh->fh_ox_id); | 202 | sol->desc.mac.fd_desc.fip_dtype = FIP_DT_MAC; |
203 | sol->desc.mac.fd_desc.fip_dlen = sizeof(sol->desc.mac) / FIP_BPW; | ||
204 | memcpy(sol->desc.mac.fd_mac, fip->ctl_src_addr, ETH_ALEN); | ||
224 | 205 | ||
225 | fr = fcoe_dev_from_skb(skb); | 206 | sol->desc.wwnn.fd_desc.fip_dtype = FIP_DT_NAME; |
226 | fr->fr_dev = lp; | 207 | sol->desc.wwnn.fd_desc.fip_dlen = sizeof(sol->desc.wwnn) / FIP_BPW; |
227 | fr->ptype = ptype; | 208 | put_unaligned_be64(fip->lp->wwnn, &sol->desc.wwnn.fd_wwn); |
228 | cpu_idx = 0; | ||
229 | #ifdef CONFIG_SMP | ||
230 | /* | ||
231 | * The incoming frame exchange id(oxid) is ANDed with num of online | ||
232 | * cpu bits to get cpu_idx and then this cpu_idx is used for selecting | ||
233 | * a per cpu kernel thread from fcoe_percpu. In case the cpu is | ||
234 | * offline or no kernel thread for derived cpu_idx then cpu_idx is | ||
235 | * initialize to first online cpu index. | ||
236 | */ | ||
237 | cpu_idx = oxid & (num_online_cpus() - 1); | ||
238 | if (!fcoe_percpu[cpu_idx] || !cpu_online(cpu_idx)) | ||
239 | cpu_idx = first_cpu(cpu_online_map); | ||
240 | #endif | ||
241 | fps = fcoe_percpu[cpu_idx]; | ||
242 | 209 | ||
243 | spin_lock_bh(&fps->fcoe_rx_list.lock); | 210 | fcoe_size = fcoe_ctlr_fcoe_size(fip); |
244 | __skb_queue_tail(&fps->fcoe_rx_list, skb); | 211 | sol->desc.size.fd_desc.fip_dtype = FIP_DT_FCOE_SIZE; |
245 | if (fps->fcoe_rx_list.qlen == 1) | 212 | sol->desc.size.fd_desc.fip_dlen = sizeof(sol->desc.size) / FIP_BPW; |
246 | wake_up_process(fps->thread); | 213 | sol->desc.size.fd_size = htons(fcoe_size); |
247 | 214 | ||
248 | spin_unlock_bh(&fps->fcoe_rx_list.lock); | 215 | skb_put(skb, sizeof(*sol)); |
216 | skb->protocol = htons(ETH_P_802_3); | ||
217 | skb_reset_mac_header(skb); | ||
218 | skb_reset_network_header(skb); | ||
219 | fip->send(fip, skb); | ||
249 | 220 | ||
250 | return 0; | 221 | if (!fcf) |
251 | err: | 222 | fip->sol_time = jiffies; |
252 | #ifdef CONFIG_SMP | ||
253 | stats = lp->dev_stats[smp_processor_id()]; | ||
254 | #else | ||
255 | stats = lp->dev_stats[0]; | ||
256 | #endif | ||
257 | if (stats) | ||
258 | stats->ErrorFrames++; | ||
259 | |||
260 | err2: | ||
261 | kfree_skb(skb); | ||
262 | return -1; | ||
263 | } | 223 | } |
264 | EXPORT_SYMBOL_GPL(fcoe_rcv); | ||
265 | 224 | ||
266 | /** | 225 | /** |
267 | * fcoe_start_io() - pass to netdev to start xmit for fcoe | 226 | * fcoe_ctlr_link_up() - Start FCoE controller. |
268 | * @skb: the skb to be xmitted | 227 | * @fip: FCoE controller. |
269 | * | 228 | * |
270 | * Returns: 0 for success | 229 | * Called from the LLD when the network link is ready. |
271 | */ | 230 | */ |
272 | static inline int fcoe_start_io(struct sk_buff *skb) | 231 | void fcoe_ctlr_link_up(struct fcoe_ctlr *fip) |
273 | { | 232 | { |
274 | int rc; | 233 | spin_lock_bh(&fip->lock); |
275 | 234 | if (fip->state == FIP_ST_NON_FIP || fip->state == FIP_ST_AUTO) { | |
276 | skb_get(skb); | 235 | fip->last_link = 1; |
277 | rc = dev_queue_xmit(skb); | 236 | fip->link = 1; |
278 | if (rc != 0) | 237 | spin_unlock_bh(&fip->lock); |
279 | return rc; | 238 | fc_linkup(fip->lp); |
280 | kfree_skb(skb); | 239 | } else if (fip->state == FIP_ST_LINK_WAIT) { |
281 | return 0; | 240 | fip->state = FIP_ST_AUTO; |
241 | fip->last_link = 1; | ||
242 | fip->link = 1; | ||
243 | spin_unlock_bh(&fip->lock); | ||
244 | FIP_DBG("%s", "setting AUTO mode.\n"); | ||
245 | fc_linkup(fip->lp); | ||
246 | fcoe_ctlr_solicit(fip, NULL); | ||
247 | } else | ||
248 | spin_unlock_bh(&fip->lock); | ||
282 | } | 249 | } |
250 | EXPORT_SYMBOL(fcoe_ctlr_link_up); | ||
283 | 251 | ||
284 | /** | 252 | /** |
285 | * fcoe_get_paged_crc_eof() - in case we need alloc a page for crc_eof | 253 | * fcoe_ctlr_reset() - Reset FIP. |
286 | * @skb: the skb to be xmitted | 254 | * @fip: FCoE controller. |
287 | * @tlen: total len | 255 | * @new_state: FIP state to be entered. |
288 | * | 256 | * |
289 | * Returns: 0 for success | 257 | * Returns non-zero if the link was up and now isn't. |
290 | */ | 258 | */ |
291 | static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen) | 259 | static int fcoe_ctlr_reset(struct fcoe_ctlr *fip, enum fip_state new_state) |
292 | { | 260 | { |
293 | struct fcoe_percpu_s *fps; | 261 | struct fc_lport *lp = fip->lp; |
294 | struct page *page; | 262 | int link_dropped; |
295 | int cpu_idx; | 263 | |
296 | 264 | spin_lock_bh(&fip->lock); | |
297 | cpu_idx = get_cpu(); | 265 | fcoe_ctlr_reset_fcfs(fip); |
298 | fps = fcoe_percpu[cpu_idx]; | 266 | del_timer(&fip->timer); |
299 | page = fps->crc_eof_page; | 267 | fip->state = new_state; |
300 | if (!page) { | 268 | fip->ctlr_ka_time = 0; |
301 | page = alloc_page(GFP_ATOMIC); | 269 | fip->port_ka_time = 0; |
302 | if (!page) { | 270 | fip->sol_time = 0; |
303 | put_cpu(); | 271 | fip->flogi_oxid = FC_XID_UNKNOWN; |
304 | return -ENOMEM; | 272 | fip->map_dest = 0; |
305 | } | 273 | fip->last_link = 0; |
306 | fps->crc_eof_page = page; | 274 | link_dropped = fip->link; |
307 | WARN_ON(fps->crc_eof_offset != 0); | 275 | fip->link = 0; |
276 | spin_unlock_bh(&fip->lock); | ||
277 | |||
278 | if (link_dropped) | ||
279 | fc_linkdown(lp); | ||
280 | |||
281 | if (new_state == FIP_ST_ENABLED) { | ||
282 | fcoe_ctlr_solicit(fip, NULL); | ||
283 | fc_linkup(lp); | ||
284 | link_dropped = 0; | ||
308 | } | 285 | } |
309 | 286 | return link_dropped; | |
310 | get_page(page); | ||
311 | skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags, page, | ||
312 | fps->crc_eof_offset, tlen); | ||
313 | skb->len += tlen; | ||
314 | skb->data_len += tlen; | ||
315 | skb->truesize += tlen; | ||
316 | fps->crc_eof_offset += sizeof(struct fcoe_crc_eof); | ||
317 | |||
318 | if (fps->crc_eof_offset >= PAGE_SIZE) { | ||
319 | fps->crc_eof_page = NULL; | ||
320 | fps->crc_eof_offset = 0; | ||
321 | put_page(page); | ||
322 | } | ||
323 | put_cpu(); | ||
324 | return 0; | ||
325 | } | 287 | } |
326 | 288 | ||
327 | /** | 289 | /** |
328 | * fcoe_fc_crc() - calculates FC CRC in this fcoe skb | 290 | * fcoe_ctlr_link_down() - Stop FCoE controller. |
329 | * @fp: the fc_frame containg data to be checksummed | 291 | * @fip: FCoE controller. |
330 | * | 292 | * |
331 | * This uses crc32() to calculate the crc for fc frame | 293 | * Returns non-zero if the link was up and now isn't. |
332 | * Return : 32 bit crc | 294 | * |
295 | * Called from the LLD when the network link is not ready. | ||
296 | * There may be multiple calls while the link is down. | ||
333 | */ | 297 | */ |
334 | u32 fcoe_fc_crc(struct fc_frame *fp) | 298 | int fcoe_ctlr_link_down(struct fcoe_ctlr *fip) |
335 | { | 299 | { |
336 | struct sk_buff *skb = fp_skb(fp); | 300 | return fcoe_ctlr_reset(fip, FIP_ST_LINK_WAIT); |
337 | struct skb_frag_struct *frag; | ||
338 | unsigned char *data; | ||
339 | unsigned long off, len, clen; | ||
340 | u32 crc; | ||
341 | unsigned i; | ||
342 | |||
343 | crc = crc32(~0, skb->data, skb_headlen(skb)); | ||
344 | |||
345 | for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { | ||
346 | frag = &skb_shinfo(skb)->frags[i]; | ||
347 | off = frag->page_offset; | ||
348 | len = frag->size; | ||
349 | while (len > 0) { | ||
350 | clen = min(len, PAGE_SIZE - (off & ~PAGE_MASK)); | ||
351 | data = kmap_atomic(frag->page + (off >> PAGE_SHIFT), | ||
352 | KM_SKB_DATA_SOFTIRQ); | ||
353 | crc = crc32(crc, data + (off & ~PAGE_MASK), clen); | ||
354 | kunmap_atomic(data, KM_SKB_DATA_SOFTIRQ); | ||
355 | off += clen; | ||
356 | len -= clen; | ||
357 | } | ||
358 | } | ||
359 | return crc; | ||
360 | } | 301 | } |
361 | EXPORT_SYMBOL_GPL(fcoe_fc_crc); | 302 | EXPORT_SYMBOL(fcoe_ctlr_link_down); |
362 | 303 | ||
363 | /** | 304 | /** |
364 | * fcoe_xmit() - FCoE frame transmit function | 305 | * fcoe_ctlr_send_keep_alive() - Send a keep-alive to the selected FCF. |
365 | * @lp: the associated local port | 306 | * @fip: FCoE controller. |
366 | * @fp: the fc_frame to be transmitted | 307 | * @ports: 0 for controller keep-alive, 1 for port keep-alive. |
308 | * @sa: source MAC address. | ||
367 | * | 309 | * |
368 | * Return : 0 for success | 310 | * A controller keep-alive is sent every fka_period (typically 8 seconds). |
311 | * The source MAC is the native MAC address. | ||
312 | * | ||
313 | * A port keep-alive is sent every 90 seconds while logged in. | ||
314 | * The source MAC is the assigned mapped source address. | ||
315 | * The destination is the FCF's F-port. | ||
369 | */ | 316 | */ |
370 | int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp) | 317 | static void fcoe_ctlr_send_keep_alive(struct fcoe_ctlr *fip, int ports, u8 *sa) |
371 | { | 318 | { |
372 | int wlen, rc = 0; | ||
373 | u32 crc; | ||
374 | struct ethhdr *eh; | ||
375 | struct fcoe_crc_eof *cp; | ||
376 | struct sk_buff *skb; | 319 | struct sk_buff *skb; |
377 | struct fcoe_dev_stats *stats; | 320 | struct fip_kal { |
378 | struct fc_frame_header *fh; | 321 | struct ethhdr eth; |
379 | unsigned int hlen; /* header length implies the version */ | 322 | struct fip_header fip; |
380 | unsigned int tlen; /* trailer length */ | 323 | struct fip_mac_desc mac; |
381 | unsigned int elen; /* eth header, may include vlan */ | 324 | } __attribute__((packed)) *kal; |
382 | int flogi_in_progress = 0; | 325 | struct fip_vn_desc *vn; |
383 | struct fcoe_softc *fc; | 326 | u32 len; |
384 | u8 sof, eof; | 327 | struct fc_lport *lp; |
385 | struct fcoe_hdr *hp; | 328 | struct fcoe_fcf *fcf; |
386 | |||
387 | WARN_ON((fr_len(fp) % sizeof(u32)) != 0); | ||
388 | |||
389 | fc = lport_priv(lp); | ||
390 | /* | ||
391 | * if it is a flogi then we need to learn gw-addr | ||
392 | * and my own fcid | ||
393 | */ | ||
394 | fh = fc_frame_header_get(fp); | ||
395 | if (unlikely(fh->fh_r_ctl == FC_RCTL_ELS_REQ)) { | ||
396 | if (fc_frame_payload_op(fp) == ELS_FLOGI) { | ||
397 | fc->flogi_oxid = ntohs(fh->fh_ox_id); | ||
398 | fc->address_mode = FCOE_FCOUI_ADDR_MODE; | ||
399 | fc->flogi_progress = 1; | ||
400 | flogi_in_progress = 1; | ||
401 | } else if (fc->flogi_progress && ntoh24(fh->fh_s_id) != 0) { | ||
402 | /* | ||
403 | * Here we must've gotten an SID by accepting an FLOGI | ||
404 | * from a point-to-point connection. Switch to using | ||
405 | * the source mac based on the SID. The destination | ||
406 | * MAC in this case would have been set by receving the | ||
407 | * FLOGI. | ||
408 | */ | ||
409 | fc_fcoe_set_mac(fc->data_src_addr, fh->fh_s_id); | ||
410 | fc->flogi_progress = 0; | ||
411 | } | ||
412 | } | ||
413 | |||
414 | skb = fp_skb(fp); | ||
415 | sof = fr_sof(fp); | ||
416 | eof = fr_eof(fp); | ||
417 | |||
418 | elen = (fc->real_dev->priv_flags & IFF_802_1Q_VLAN) ? | ||
419 | sizeof(struct vlan_ethhdr) : sizeof(struct ethhdr); | ||
420 | hlen = sizeof(struct fcoe_hdr); | ||
421 | tlen = sizeof(struct fcoe_crc_eof); | ||
422 | wlen = (skb->len - tlen + sizeof(crc)) / FCOE_WORD_TO_BYTE; | ||
423 | |||
424 | /* crc offload */ | ||
425 | if (likely(lp->crc_offload)) { | ||
426 | skb->ip_summed = CHECKSUM_PARTIAL; | ||
427 | skb->csum_start = skb_headroom(skb); | ||
428 | skb->csum_offset = skb->len; | ||
429 | crc = 0; | ||
430 | } else { | ||
431 | skb->ip_summed = CHECKSUM_NONE; | ||
432 | crc = fcoe_fc_crc(fp); | ||
433 | } | ||
434 | 329 | ||
435 | /* copy fc crc and eof to the skb buff */ | 330 | fcf = fip->sel_fcf; |
436 | if (skb_is_nonlinear(skb)) { | 331 | lp = fip->lp; |
437 | skb_frag_t *frag; | 332 | if (!fcf || !fc_host_port_id(lp->host)) |
438 | if (fcoe_get_paged_crc_eof(skb, tlen)) { | 333 | return; |
439 | kfree_skb(skb); | ||
440 | return -ENOMEM; | ||
441 | } | ||
442 | frag = &skb_shinfo(skb)->frags[skb_shinfo(skb)->nr_frags - 1]; | ||
443 | cp = kmap_atomic(frag->page, KM_SKB_DATA_SOFTIRQ) | ||
444 | + frag->page_offset; | ||
445 | } else { | ||
446 | cp = (struct fcoe_crc_eof *)skb_put(skb, tlen); | ||
447 | } | ||
448 | 334 | ||
449 | memset(cp, 0, sizeof(*cp)); | 335 | len = fcoe_ctlr_fcoe_size(fip) + sizeof(struct ethhdr); |
450 | cp->fcoe_eof = eof; | 336 | BUG_ON(len < sizeof(*kal) + sizeof(*vn)); |
451 | cp->fcoe_crc32 = cpu_to_le32(~crc); | 337 | skb = dev_alloc_skb(len); |
338 | if (!skb) | ||
339 | return; | ||
452 | 340 | ||
453 | if (skb_is_nonlinear(skb)) { | 341 | kal = (struct fip_kal *)skb->data; |
454 | kunmap_atomic(cp, KM_SKB_DATA_SOFTIRQ); | 342 | memset(kal, 0, len); |
455 | cp = NULL; | 343 | memcpy(kal->eth.h_dest, fcf->fcf_mac, ETH_ALEN); |
344 | memcpy(kal->eth.h_source, sa, ETH_ALEN); | ||
345 | kal->eth.h_proto = htons(ETH_P_FIP); | ||
346 | |||
347 | kal->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER); | ||
348 | kal->fip.fip_op = htons(FIP_OP_CTRL); | ||
349 | kal->fip.fip_subcode = FIP_SC_KEEP_ALIVE; | ||
350 | kal->fip.fip_dl_len = htons((sizeof(kal->mac) + | ||
351 | ports * sizeof(*vn)) / FIP_BPW); | ||
352 | kal->fip.fip_flags = htons(FIP_FL_FPMA); | ||
353 | |||
354 | kal->mac.fd_desc.fip_dtype = FIP_DT_MAC; | ||
355 | kal->mac.fd_desc.fip_dlen = sizeof(kal->mac) / FIP_BPW; | ||
356 | memcpy(kal->mac.fd_mac, fip->ctl_src_addr, ETH_ALEN); | ||
357 | |||
358 | if (ports) { | ||
359 | vn = (struct fip_vn_desc *)(kal + 1); | ||
360 | vn->fd_desc.fip_dtype = FIP_DT_VN_ID; | ||
361 | vn->fd_desc.fip_dlen = sizeof(*vn) / FIP_BPW; | ||
362 | memcpy(vn->fd_mac, fip->data_src_addr, ETH_ALEN); | ||
363 | hton24(vn->fd_fc_id, fc_host_port_id(lp->host)); | ||
364 | put_unaligned_be64(lp->wwpn, &vn->fd_wwpn); | ||
456 | } | 365 | } |
457 | 366 | ||
458 | /* adjust skb netowrk/transport offsets to match mac/fcoe/fc */ | 367 | skb_put(skb, len); |
459 | skb_push(skb, elen + hlen); | 368 | skb->protocol = htons(ETH_P_802_3); |
460 | skb_reset_mac_header(skb); | 369 | skb_reset_mac_header(skb); |
461 | skb_reset_network_header(skb); | 370 | skb_reset_network_header(skb); |
462 | skb->mac_len = elen; | 371 | fip->send(fip, skb); |
463 | skb->protocol = htons(ETH_P_FCOE); | ||
464 | skb->dev = fc->real_dev; | ||
465 | |||
466 | /* fill up mac and fcoe headers */ | ||
467 | eh = eth_hdr(skb); | ||
468 | eh->h_proto = htons(ETH_P_FCOE); | ||
469 | if (fc->address_mode == FCOE_FCOUI_ADDR_MODE) | ||
470 | fc_fcoe_set_mac(eh->h_dest, fh->fh_d_id); | ||
471 | else | ||
472 | /* insert GW address */ | ||
473 | memcpy(eh->h_dest, fc->dest_addr, ETH_ALEN); | ||
474 | |||
475 | if (unlikely(flogi_in_progress)) | ||
476 | memcpy(eh->h_source, fc->ctl_src_addr, ETH_ALEN); | ||
477 | else | ||
478 | memcpy(eh->h_source, fc->data_src_addr, ETH_ALEN); | ||
479 | |||
480 | hp = (struct fcoe_hdr *)(eh + 1); | ||
481 | memset(hp, 0, sizeof(*hp)); | ||
482 | if (FC_FCOE_VER) | ||
483 | FC_FCOE_ENCAPS_VER(hp, FC_FCOE_VER); | ||
484 | hp->fcoe_sof = sof; | ||
485 | |||
486 | #ifdef NETIF_F_FSO | ||
487 | /* fcoe lso, mss is in max_payload which is non-zero for FCP data */ | ||
488 | if (lp->seq_offload && fr_max_payload(fp)) { | ||
489 | skb_shinfo(skb)->gso_type = SKB_GSO_FCOE; | ||
490 | skb_shinfo(skb)->gso_size = fr_max_payload(fp); | ||
491 | } else { | ||
492 | skb_shinfo(skb)->gso_type = 0; | ||
493 | skb_shinfo(skb)->gso_size = 0; | ||
494 | } | ||
495 | #endif | ||
496 | /* update tx stats: regardless if LLD fails */ | ||
497 | stats = lp->dev_stats[smp_processor_id()]; | ||
498 | if (stats) { | ||
499 | stats->TxFrames++; | ||
500 | stats->TxWords += wlen; | ||
501 | } | ||
502 | |||
503 | /* send down to lld */ | ||
504 | fr_dev(fp) = lp; | ||
505 | if (fc->fcoe_pending_queue.qlen) | ||
506 | rc = fcoe_check_wait_queue(lp); | ||
507 | |||
508 | if (rc == 0) | ||
509 | rc = fcoe_start_io(skb); | ||
510 | |||
511 | if (rc) { | ||
512 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | ||
513 | __skb_queue_tail(&fc->fcoe_pending_queue, skb); | ||
514 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | ||
515 | if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH) | ||
516 | lp->qfull = 1; | ||
517 | } | ||
518 | |||
519 | return 0; | ||
520 | } | 372 | } |
521 | EXPORT_SYMBOL_GPL(fcoe_xmit); | ||
522 | 373 | ||
523 | /** | 374 | /** |
524 | * fcoe_percpu_receive_thread() - recv thread per cpu | 375 | * fcoe_ctlr_encaps() - Encapsulate an ELS frame for FIP, without sending it. |
525 | * @arg: ptr to the fcoe per cpu struct | 376 | * @fip: FCoE controller. |
377 | * @dtype: FIP descriptor type for the frame. | ||
378 | * @skb: FCoE ELS frame including FC header but no FCoE headers. | ||
379 | * | ||
380 | * Returns non-zero error code on failure. | ||
381 | * | ||
382 | * The caller must check that the length is a multiple of 4. | ||
526 | * | 383 | * |
527 | * Return: 0 for success | 384 | * The @skb must have enough headroom (28 bytes) and tailroom (8 bytes). |
385 | * Headroom includes the FIP encapsulation description, FIP header, and | ||
386 | * Ethernet header. The tailroom is for the FIP MAC descriptor. | ||
528 | */ | 387 | */ |
529 | int fcoe_percpu_receive_thread(void *arg) | 388 | static int fcoe_ctlr_encaps(struct fcoe_ctlr *fip, |
389 | u8 dtype, struct sk_buff *skb) | ||
530 | { | 390 | { |
531 | struct fcoe_percpu_s *p = arg; | 391 | struct fip_encaps_head { |
532 | u32 fr_len; | 392 | struct ethhdr eth; |
533 | struct fc_lport *lp; | 393 | struct fip_header fip; |
534 | struct fcoe_rcv_info *fr; | 394 | struct fip_encaps encaps; |
535 | struct fcoe_dev_stats *stats; | 395 | } __attribute__((packed)) *cap; |
536 | struct fc_frame_header *fh; | 396 | struct fip_mac_desc *mac; |
537 | struct sk_buff *skb; | 397 | struct fcoe_fcf *fcf; |
538 | struct fcoe_crc_eof crc_eof; | 398 | size_t dlen; |
539 | struct fc_frame *fp; | 399 | |
540 | u8 *mac = NULL; | 400 | fcf = fip->sel_fcf; |
541 | struct fcoe_softc *fc; | 401 | if (!fcf) |
542 | struct fcoe_hdr *hp; | 402 | return -ENODEV; |
543 | 403 | dlen = sizeof(struct fip_encaps) + skb->len; /* len before push */ | |
544 | set_user_nice(current, -20); | 404 | cap = (struct fip_encaps_head *)skb_push(skb, sizeof(*cap)); |
545 | 405 | ||
546 | while (!kthread_should_stop()) { | 406 | memset(cap, 0, sizeof(*cap)); |
547 | 407 | memcpy(cap->eth.h_dest, fcf->fcf_mac, ETH_ALEN); | |
548 | spin_lock_bh(&p->fcoe_rx_list.lock); | 408 | memcpy(cap->eth.h_source, fip->ctl_src_addr, ETH_ALEN); |
549 | while ((skb = __skb_dequeue(&p->fcoe_rx_list)) == NULL) { | 409 | cap->eth.h_proto = htons(ETH_P_FIP); |
550 | set_current_state(TASK_INTERRUPTIBLE); | 410 | |
551 | spin_unlock_bh(&p->fcoe_rx_list.lock); | 411 | cap->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER); |
552 | schedule(); | 412 | cap->fip.fip_op = htons(FIP_OP_LS); |
553 | set_current_state(TASK_RUNNING); | 413 | cap->fip.fip_subcode = FIP_SC_REQ; |
554 | if (kthread_should_stop()) | 414 | cap->fip.fip_dl_len = htons((dlen + sizeof(*mac)) / FIP_BPW); |
555 | return 0; | 415 | cap->fip.fip_flags = htons(FIP_FL_FPMA); |
556 | spin_lock_bh(&p->fcoe_rx_list.lock); | 416 | |
557 | } | 417 | cap->encaps.fd_desc.fip_dtype = dtype; |
558 | spin_unlock_bh(&p->fcoe_rx_list.lock); | 418 | cap->encaps.fd_desc.fip_dlen = dlen / FIP_BPW; |
559 | fr = fcoe_dev_from_skb(skb); | 419 | |
560 | lp = fr->fr_dev; | 420 | mac = (struct fip_mac_desc *)skb_put(skb, sizeof(*mac)); |
561 | if (unlikely(lp == NULL)) { | 421 | memset(mac, 0, sizeof(mac)); |
562 | FC_DBG("invalid HBA Structure"); | 422 | mac->fd_desc.fip_dtype = FIP_DT_MAC; |
563 | kfree_skb(skb); | 423 | mac->fd_desc.fip_dlen = sizeof(*mac) / FIP_BPW; |
564 | continue; | 424 | if (dtype != ELS_FLOGI) |
565 | } | 425 | memcpy(mac->fd_mac, fip->data_src_addr, ETH_ALEN); |
566 | 426 | ||
567 | stats = lp->dev_stats[smp_processor_id()]; | 427 | skb->protocol = htons(ETH_P_802_3); |
568 | 428 | skb_reset_mac_header(skb); | |
569 | if (unlikely(debug_fcoe)) { | 429 | skb_reset_network_header(skb); |
570 | FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p " | ||
571 | "tail:%p end:%p sum:%d dev:%s", | ||
572 | skb->len, skb->data_len, | ||
573 | skb->head, skb->data, skb_tail_pointer(skb), | ||
574 | skb_end_pointer(skb), skb->csum, | ||
575 | skb->dev ? skb->dev->name : "<NULL>"); | ||
576 | } | ||
577 | |||
578 | /* | ||
579 | * Save source MAC address before discarding header. | ||
580 | */ | ||
581 | fc = lport_priv(lp); | ||
582 | if (unlikely(fc->flogi_progress)) | ||
583 | mac = eth_hdr(skb)->h_source; | ||
584 | |||
585 | if (skb_is_nonlinear(skb)) | ||
586 | skb_linearize(skb); /* not ideal */ | ||
587 | |||
588 | /* | ||
589 | * Frame length checks and setting up the header pointers | ||
590 | * was done in fcoe_rcv already. | ||
591 | */ | ||
592 | hp = (struct fcoe_hdr *) skb_network_header(skb); | ||
593 | fh = (struct fc_frame_header *) skb_transport_header(skb); | ||
594 | |||
595 | if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) { | ||
596 | if (stats) { | ||
597 | if (stats->ErrorFrames < 5) | ||
598 | FC_DBG("unknown FCoE version %x", | ||
599 | FC_FCOE_DECAPS_VER(hp)); | ||
600 | stats->ErrorFrames++; | ||
601 | } | ||
602 | kfree_skb(skb); | ||
603 | continue; | ||
604 | } | ||
605 | |||
606 | skb_pull(skb, sizeof(struct fcoe_hdr)); | ||
607 | fr_len = skb->len - sizeof(struct fcoe_crc_eof); | ||
608 | |||
609 | if (stats) { | ||
610 | stats->RxFrames++; | ||
611 | stats->RxWords += fr_len / FCOE_WORD_TO_BYTE; | ||
612 | } | ||
613 | |||
614 | fp = (struct fc_frame *)skb; | ||
615 | fc_frame_init(fp); | ||
616 | fr_dev(fp) = lp; | ||
617 | fr_sof(fp) = hp->fcoe_sof; | ||
618 | |||
619 | /* Copy out the CRC and EOF trailer for access */ | ||
620 | if (skb_copy_bits(skb, fr_len, &crc_eof, sizeof(crc_eof))) { | ||
621 | kfree_skb(skb); | ||
622 | continue; | ||
623 | } | ||
624 | fr_eof(fp) = crc_eof.fcoe_eof; | ||
625 | fr_crc(fp) = crc_eof.fcoe_crc32; | ||
626 | if (pskb_trim(skb, fr_len)) { | ||
627 | kfree_skb(skb); | ||
628 | continue; | ||
629 | } | ||
630 | |||
631 | /* | ||
632 | * We only check CRC if no offload is available and if it is | ||
633 | * it's solicited data, in which case, the FCP layer would | ||
634 | * check it during the copy. | ||
635 | */ | ||
636 | if (lp->crc_offload && skb->ip_summed == CHECKSUM_UNNECESSARY) | ||
637 | fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED; | ||
638 | else | ||
639 | fr_flags(fp) |= FCPHF_CRC_UNCHECKED; | ||
640 | |||
641 | fh = fc_frame_header_get(fp); | ||
642 | if (fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA && | ||
643 | fh->fh_type == FC_TYPE_FCP) { | ||
644 | fc_exch_recv(lp, lp->emp, fp); | ||
645 | continue; | ||
646 | } | ||
647 | if (fr_flags(fp) & FCPHF_CRC_UNCHECKED) { | ||
648 | if (le32_to_cpu(fr_crc(fp)) != | ||
649 | ~crc32(~0, skb->data, fr_len)) { | ||
650 | if (debug_fcoe || stats->InvalidCRCCount < 5) | ||
651 | printk(KERN_WARNING "fcoe: dropping " | ||
652 | "frame with CRC error\n"); | ||
653 | stats->InvalidCRCCount++; | ||
654 | stats->ErrorFrames++; | ||
655 | fc_frame_free(fp); | ||
656 | continue; | ||
657 | } | ||
658 | fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED; | ||
659 | } | ||
660 | /* non flogi and non data exchanges are handled here */ | ||
661 | if (unlikely(fc->flogi_progress)) | ||
662 | fcoe_recv_flogi(fc, fp, mac); | ||
663 | fc_exch_recv(lp, lp->emp, fp); | ||
664 | } | ||
665 | return 0; | 430 | return 0; |
666 | } | 431 | } |
667 | 432 | ||
668 | /** | 433 | /** |
669 | * fcoe_recv_flogi() - flogi receive function | 434 | * fcoe_ctlr_els_send() - Send an ELS frame encapsulated by FIP if appropriate. |
670 | * @fc: associated fcoe_softc | 435 | * @fip: FCoE controller. |
671 | * @fp: the recieved frame | 436 | * @skb: FCoE ELS frame including FC header but no FCoE headers. |
672 | * @sa: the source address of this flogi | ||
673 | * | 437 | * |
674 | * This is responsible to parse the flogi response and sets the corresponding | 438 | * Returns a non-zero error code if the frame should not be sent. |
675 | * mac address for the initiator, eitehr OUI based or GW based. | 439 | * Returns zero if the caller should send the frame with FCoE encapsulation. |
676 | * | 440 | * |
677 | * Returns: none | 441 | * The caller must check that the length is a multiple of 4. |
442 | * The SKB must have enough headroom (28 bytes) and tailroom (8 bytes). | ||
678 | */ | 443 | */ |
679 | static void fcoe_recv_flogi(struct fcoe_softc *fc, struct fc_frame *fp, u8 *sa) | 444 | int fcoe_ctlr_els_send(struct fcoe_ctlr *fip, struct sk_buff *skb) |
680 | { | 445 | { |
681 | struct fc_frame_header *fh; | 446 | struct fc_frame_header *fh; |
447 | u16 old_xid; | ||
682 | u8 op; | 448 | u8 op; |
683 | 449 | ||
684 | fh = fc_frame_header_get(fp); | 450 | if (fip->state == FIP_ST_NON_FIP) |
685 | if (fh->fh_type != FC_TYPE_ELS) | 451 | return 0; |
686 | return; | ||
687 | op = fc_frame_payload_op(fp); | ||
688 | if (op == ELS_LS_ACC && fh->fh_r_ctl == FC_RCTL_ELS_REP && | ||
689 | fc->flogi_oxid == ntohs(fh->fh_ox_id)) { | ||
690 | /* | ||
691 | * FLOGI accepted. | ||
692 | * If the src mac addr is FC_OUI-based, then we mark the | ||
693 | * address_mode flag to use FC_OUI-based Ethernet DA. | ||
694 | * Otherwise we use the FCoE gateway addr | ||
695 | */ | ||
696 | if (!compare_ether_addr(sa, (u8[6]) FC_FCOE_FLOGI_MAC)) { | ||
697 | fc->address_mode = FCOE_FCOUI_ADDR_MODE; | ||
698 | } else { | ||
699 | memcpy(fc->dest_addr, sa, ETH_ALEN); | ||
700 | fc->address_mode = FCOE_GW_ADDR_MODE; | ||
701 | } | ||
702 | 452 | ||
453 | fh = (struct fc_frame_header *)skb->data; | ||
454 | op = *(u8 *)(fh + 1); | ||
455 | |||
456 | switch (op) { | ||
457 | case ELS_FLOGI: | ||
458 | old_xid = fip->flogi_oxid; | ||
459 | fip->flogi_oxid = ntohs(fh->fh_ox_id); | ||
460 | if (fip->state == FIP_ST_AUTO) { | ||
461 | if (old_xid == FC_XID_UNKNOWN) | ||
462 | fip->flogi_count = 0; | ||
463 | fip->flogi_count++; | ||
464 | if (fip->flogi_count < 3) | ||
465 | goto drop; | ||
466 | fip->map_dest = 1; | ||
467 | return 0; | ||
468 | } | ||
469 | op = FIP_DT_FLOGI; | ||
470 | break; | ||
471 | case ELS_FDISC: | ||
472 | if (ntoh24(fh->fh_s_id)) | ||
473 | return 0; | ||
474 | op = FIP_DT_FDISC; | ||
475 | break; | ||
476 | case ELS_LOGO: | ||
477 | if (fip->state != FIP_ST_ENABLED) | ||
478 | return 0; | ||
479 | if (ntoh24(fh->fh_d_id) != FC_FID_FLOGI) | ||
480 | return 0; | ||
481 | op = FIP_DT_LOGO; | ||
482 | break; | ||
483 | case ELS_LS_ACC: | ||
484 | if (fip->flogi_oxid == FC_XID_UNKNOWN) | ||
485 | return 0; | ||
486 | if (!ntoh24(fh->fh_s_id)) | ||
487 | return 0; | ||
488 | if (fip->state == FIP_ST_AUTO) | ||
489 | return 0; | ||
703 | /* | 490 | /* |
704 | * Remove any previously-set unicast MAC filter. | 491 | * Here we must've gotten an SID by accepting an FLOGI |
705 | * Add secondary FCoE MAC address filter for our OUI. | 492 | * from a point-to-point connection. Switch to using |
706 | */ | 493 | * the source mac based on the SID. The destination |
707 | rtnl_lock(); | 494 | * MAC in this case would have been set by receving the |
708 | if (compare_ether_addr(fc->data_src_addr, (u8[6]) { 0 })) | 495 | * FLOGI. |
709 | dev_unicast_delete(fc->real_dev, fc->data_src_addr, | ||
710 | ETH_ALEN); | ||
711 | fc_fcoe_set_mac(fc->data_src_addr, fh->fh_d_id); | ||
712 | dev_unicast_add(fc->real_dev, fc->data_src_addr, ETH_ALEN); | ||
713 | rtnl_unlock(); | ||
714 | |||
715 | fc->flogi_progress = 0; | ||
716 | } else if (op == ELS_FLOGI && fh->fh_r_ctl == FC_RCTL_ELS_REQ && sa) { | ||
717 | /* | ||
718 | * Save source MAC for point-to-point responses. | ||
719 | */ | 496 | */ |
720 | memcpy(fc->dest_addr, sa, ETH_ALEN); | 497 | fip->flogi_oxid = FC_XID_UNKNOWN; |
721 | fc->address_mode = FCOE_GW_ADDR_MODE; | 498 | fc_fcoe_set_mac(fip->data_src_addr, fh->fh_s_id); |
499 | return 0; | ||
500 | default: | ||
501 | if (fip->state != FIP_ST_ENABLED) | ||
502 | goto drop; | ||
503 | return 0; | ||
722 | } | 504 | } |
505 | if (fcoe_ctlr_encaps(fip, op, skb)) | ||
506 | goto drop; | ||
507 | fip->send(fip, skb); | ||
508 | return -EINPROGRESS; | ||
509 | drop: | ||
510 | kfree_skb(skb); | ||
511 | return -EINVAL; | ||
723 | } | 512 | } |
513 | EXPORT_SYMBOL(fcoe_ctlr_els_send); | ||
724 | 514 | ||
725 | /** | 515 | /* |
726 | * fcoe_watchdog() - fcoe timer callback | 516 | * fcoe_ctlr_age_fcfs() - Reset and free all old FCFs for a controller. |
727 | * @vp: | 517 | * @fip: FCoE controller. |
728 | * | 518 | * |
729 | * This checks the pending queue length for fcoe and set lport qfull | 519 | * Called with lock held. |
730 | * if the FCOE_MAX_QUEUE_DEPTH is reached. This is done for all fc_lport on the | ||
731 | * fcoe_hostlist. | ||
732 | * | 520 | * |
733 | * Returns: 0 for success | 521 | * An FCF is considered old if we have missed three advertisements. |
522 | * That is, there have been no valid advertisement from it for three | ||
523 | * times its keep-alive period including fuzz. | ||
524 | * | ||
525 | * In addition, determine the time when an FCF selection can occur. | ||
734 | */ | 526 | */ |
735 | void fcoe_watchdog(ulong vp) | 527 | static void fcoe_ctlr_age_fcfs(struct fcoe_ctlr *fip) |
736 | { | 528 | { |
737 | struct fcoe_softc *fc; | 529 | struct fcoe_fcf *fcf; |
738 | 530 | struct fcoe_fcf *next; | |
739 | read_lock(&fcoe_hostlist_lock); | 531 | unsigned long sel_time = 0; |
740 | list_for_each_entry(fc, &fcoe_hostlist, list) { | 532 | |
741 | if (fc->lp) | 533 | list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { |
742 | fcoe_check_wait_queue(fc->lp); | 534 | if (time_after(jiffies, fcf->time + fcf->fka_period * 3 + |
535 | msecs_to_jiffies(FIP_FCF_FUZZ * 3))) { | ||
536 | if (fip->sel_fcf == fcf) | ||
537 | fip->sel_fcf = NULL; | ||
538 | list_del(&fcf->list); | ||
539 | WARN_ON(!fip->fcf_count); | ||
540 | fip->fcf_count--; | ||
541 | kfree(fcf); | ||
542 | } else if (fcoe_ctlr_mtu_valid(fcf) && | ||
543 | (!sel_time || time_before(sel_time, fcf->time))) { | ||
544 | sel_time = fcf->time; | ||
545 | } | ||
546 | } | ||
547 | if (sel_time) { | ||
548 | sel_time += msecs_to_jiffies(FCOE_CTLR_START_DELAY); | ||
549 | fip->sel_time = sel_time; | ||
550 | if (time_before(sel_time, fip->timer.expires)) | ||
551 | mod_timer(&fip->timer, sel_time); | ||
552 | } else { | ||
553 | fip->sel_time = 0; | ||
743 | } | 554 | } |
744 | read_unlock(&fcoe_hostlist_lock); | ||
745 | |||
746 | fcoe_timer.expires = jiffies + (1 * HZ); | ||
747 | add_timer(&fcoe_timer); | ||
748 | } | 555 | } |
749 | 556 | ||
750 | |||
751 | /** | 557 | /** |
752 | * fcoe_check_wait_queue() - put the skb into fcoe pending xmit queue | 558 | * fcoe_ctlr_parse_adv() - Decode a FIP advertisement into a new FCF entry. |
753 | * @lp: the fc_port for this skb | 559 | * @skb: received FIP advertisement frame |
754 | * @skb: the associated skb to be xmitted | 560 | * @fcf: resulting FCF entry. |
755 | * | 561 | * |
756 | * This empties the wait_queue, dequeue the head of the wait_queue queue | 562 | * Returns zero on a valid parsed advertisement, |
757 | * and calls fcoe_start_io() for each packet, if all skb have been | 563 | * otherwise returns non zero value. |
758 | * transmitted, return qlen or -1 if a error occurs, then restore | ||
759 | * wait_queue and try again later. | ||
760 | * | ||
761 | * The wait_queue is used when the skb transmit fails. skb will go | ||
762 | * in the wait_queue which will be emptied by the time function OR | ||
763 | * by the next skb transmit. | ||
764 | * | ||
765 | * Returns: 0 for success | ||
766 | */ | 564 | */ |
767 | static int fcoe_check_wait_queue(struct fc_lport *lp) | 565 | static int fcoe_ctlr_parse_adv(struct sk_buff *skb, struct fcoe_fcf *fcf) |
768 | { | 566 | { |
769 | struct fcoe_softc *fc = lport_priv(lp); | 567 | struct fip_header *fiph; |
770 | struct sk_buff *skb; | 568 | struct fip_desc *desc = NULL; |
771 | int rc = -1; | 569 | struct fip_wwn_desc *wwn; |
772 | 570 | struct fip_fab_desc *fab; | |
773 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | 571 | struct fip_fka_desc *fka; |
774 | if (fc->fcoe_pending_queue_active) | 572 | unsigned long t; |
775 | goto out; | 573 | size_t rlen; |
776 | fc->fcoe_pending_queue_active = 1; | 574 | size_t dlen; |
777 | 575 | ||
778 | while (fc->fcoe_pending_queue.qlen) { | 576 | memset(fcf, 0, sizeof(*fcf)); |
779 | /* keep qlen > 0 until fcoe_start_io succeeds */ | 577 | fcf->fka_period = msecs_to_jiffies(FCOE_CTLR_DEF_FKA); |
780 | fc->fcoe_pending_queue.qlen++; | 578 | |
781 | skb = __skb_dequeue(&fc->fcoe_pending_queue); | 579 | fiph = (struct fip_header *)skb->data; |
782 | 580 | fcf->flags = ntohs(fiph->fip_flags); | |
783 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | 581 | |
784 | rc = fcoe_start_io(skb); | 582 | rlen = ntohs(fiph->fip_dl_len) * 4; |
785 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | 583 | if (rlen + sizeof(*fiph) > skb->len) |
786 | 584 | return -EINVAL; | |
787 | if (rc) { | 585 | |
788 | __skb_queue_head(&fc->fcoe_pending_queue, skb); | 586 | desc = (struct fip_desc *)(fiph + 1); |
789 | /* undo temporary increment above */ | 587 | while (rlen > 0) { |
790 | fc->fcoe_pending_queue.qlen--; | 588 | dlen = desc->fip_dlen * FIP_BPW; |
589 | if (dlen < sizeof(*desc) || dlen > rlen) | ||
590 | return -EINVAL; | ||
591 | switch (desc->fip_dtype) { | ||
592 | case FIP_DT_PRI: | ||
593 | if (dlen != sizeof(struct fip_pri_desc)) | ||
594 | goto len_err; | ||
595 | fcf->pri = ((struct fip_pri_desc *)desc)->fd_pri; | ||
791 | break; | 596 | break; |
597 | case FIP_DT_MAC: | ||
598 | if (dlen != sizeof(struct fip_mac_desc)) | ||
599 | goto len_err; | ||
600 | memcpy(fcf->fcf_mac, | ||
601 | ((struct fip_mac_desc *)desc)->fd_mac, | ||
602 | ETH_ALEN); | ||
603 | if (!is_valid_ether_addr(fcf->fcf_mac)) { | ||
604 | FIP_DBG("invalid MAC addr in FIP adv\n"); | ||
605 | return -EINVAL; | ||
606 | } | ||
607 | break; | ||
608 | case FIP_DT_NAME: | ||
609 | if (dlen != sizeof(struct fip_wwn_desc)) | ||
610 | goto len_err; | ||
611 | wwn = (struct fip_wwn_desc *)desc; | ||
612 | fcf->switch_name = get_unaligned_be64(&wwn->fd_wwn); | ||
613 | break; | ||
614 | case FIP_DT_FAB: | ||
615 | if (dlen != sizeof(struct fip_fab_desc)) | ||
616 | goto len_err; | ||
617 | fab = (struct fip_fab_desc *)desc; | ||
618 | fcf->fabric_name = get_unaligned_be64(&fab->fd_wwn); | ||
619 | fcf->vfid = ntohs(fab->fd_vfid); | ||
620 | fcf->fc_map = ntoh24(fab->fd_map); | ||
621 | break; | ||
622 | case FIP_DT_FKA: | ||
623 | if (dlen != sizeof(struct fip_fka_desc)) | ||
624 | goto len_err; | ||
625 | fka = (struct fip_fka_desc *)desc; | ||
626 | t = ntohl(fka->fd_fka_period); | ||
627 | if (t >= FCOE_CTLR_MIN_FKA) | ||
628 | fcf->fka_period = msecs_to_jiffies(t); | ||
629 | break; | ||
630 | case FIP_DT_MAP_OUI: | ||
631 | case FIP_DT_FCOE_SIZE: | ||
632 | case FIP_DT_FLOGI: | ||
633 | case FIP_DT_FDISC: | ||
634 | case FIP_DT_LOGO: | ||
635 | case FIP_DT_ELP: | ||
636 | default: | ||
637 | FIP_DBG("unexpected descriptor type %x in FIP adv\n", | ||
638 | desc->fip_dtype); | ||
639 | /* standard says ignore unknown descriptors >= 128 */ | ||
640 | if (desc->fip_dtype < FIP_DT_VENDOR_BASE) | ||
641 | return -EINVAL; | ||
642 | continue; | ||
792 | } | 643 | } |
793 | /* undo temporary increment above */ | 644 | desc = (struct fip_desc *)((char *)desc + dlen); |
794 | fc->fcoe_pending_queue.qlen--; | 645 | rlen -= dlen; |
795 | } | 646 | } |
647 | if (!fcf->fc_map || (fcf->fc_map & 0x10000)) | ||
648 | return -EINVAL; | ||
649 | if (!fcf->switch_name || !fcf->fabric_name) | ||
650 | return -EINVAL; | ||
651 | return 0; | ||
796 | 652 | ||
797 | if (fc->fcoe_pending_queue.qlen < FCOE_LOW_QUEUE_DEPTH) | 653 | len_err: |
798 | lp->qfull = 0; | 654 | FIP_DBG("FIP length error in descriptor type %x len %zu\n", |
799 | fc->fcoe_pending_queue_active = 0; | 655 | desc->fip_dtype, dlen); |
800 | rc = fc->fcoe_pending_queue.qlen; | 656 | return -EINVAL; |
801 | out: | ||
802 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | ||
803 | return rc; | ||
804 | } | 657 | } |
805 | 658 | ||
806 | /** | 659 | /** |
807 | * fcoe_dev_setup() - setup link change notification interface | 660 | * fcoe_ctlr_recv_adv() - Handle an incoming advertisement. |
661 | * @fip: FCoE controller. | ||
662 | * @skb: Received FIP packet. | ||
808 | */ | 663 | */ |
809 | static void fcoe_dev_setup() | 664 | static void fcoe_ctlr_recv_adv(struct fcoe_ctlr *fip, struct sk_buff *skb) |
810 | { | 665 | { |
666 | struct fcoe_fcf *fcf; | ||
667 | struct fcoe_fcf new; | ||
668 | struct fcoe_fcf *found; | ||
669 | unsigned long sol_tov = msecs_to_jiffies(FCOE_CTRL_SOL_TOV); | ||
670 | int first = 0; | ||
671 | int mtu_valid; | ||
672 | |||
673 | if (fcoe_ctlr_parse_adv(skb, &new)) | ||
674 | return; | ||
675 | |||
676 | spin_lock_bh(&fip->lock); | ||
677 | first = list_empty(&fip->fcfs); | ||
678 | found = NULL; | ||
679 | list_for_each_entry(fcf, &fip->fcfs, list) { | ||
680 | if (fcf->switch_name == new.switch_name && | ||
681 | fcf->fabric_name == new.fabric_name && | ||
682 | fcf->fc_map == new.fc_map && | ||
683 | compare_ether_addr(fcf->fcf_mac, new.fcf_mac) == 0) { | ||
684 | found = fcf; | ||
685 | break; | ||
686 | } | ||
687 | } | ||
688 | if (!found) { | ||
689 | if (fip->fcf_count >= FCOE_CTLR_FCF_LIMIT) | ||
690 | goto out; | ||
691 | |||
692 | fcf = kmalloc(sizeof(*fcf), GFP_ATOMIC); | ||
693 | if (!fcf) | ||
694 | goto out; | ||
695 | |||
696 | fip->fcf_count++; | ||
697 | memcpy(fcf, &new, sizeof(new)); | ||
698 | list_add(&fcf->list, &fip->fcfs); | ||
699 | } else { | ||
700 | /* | ||
701 | * Flags in advertisements are ignored once the FCF is | ||
702 | * selected. Flags in unsolicited advertisements are | ||
703 | * ignored after a usable solicited advertisement | ||
704 | * has been received. | ||
705 | */ | ||
706 | if (fcf == fip->sel_fcf) { | ||
707 | fip->ctlr_ka_time -= fcf->fka_period; | ||
708 | fip->ctlr_ka_time += new.fka_period; | ||
709 | if (time_before(fip->ctlr_ka_time, fip->timer.expires)) | ||
710 | mod_timer(&fip->timer, fip->ctlr_ka_time); | ||
711 | } else if (!fcoe_ctlr_fcf_usable(fcf)) | ||
712 | fcf->flags = new.flags; | ||
713 | fcf->fka_period = new.fka_period; | ||
714 | memcpy(fcf->fcf_mac, new.fcf_mac, ETH_ALEN); | ||
715 | } | ||
716 | mtu_valid = fcoe_ctlr_mtu_valid(fcf); | ||
717 | fcf->time = jiffies; | ||
718 | FIP_DBG_LVL(found ? 2 : 1, "%s FCF for fab %llx map %x val %d\n", | ||
719 | found ? "old" : "new", | ||
720 | fcf->fabric_name, fcf->fc_map, mtu_valid); | ||
721 | |||
811 | /* | 722 | /* |
812 | * here setup a interface specific wd time to | 723 | * If this advertisement is not solicited and our max receive size |
813 | * monitor the link state | 724 | * hasn't been verified, send a solicited advertisement. |
814 | */ | 725 | */ |
815 | register_netdevice_notifier(&fcoe_notifier); | 726 | if (!mtu_valid) |
816 | } | 727 | fcoe_ctlr_solicit(fip, fcf); |
817 | 728 | ||
818 | /** | 729 | /* |
819 | * fcoe_dev_setup() - cleanup link change notification interface | 730 | * If its been a while since we did a solicit, and this is |
820 | */ | 731 | * the first advertisement we've received, do a multicast |
821 | static void fcoe_dev_cleanup(void) | 732 | * solicitation to gather as many advertisements as we can |
822 | { | 733 | * before selection occurs. |
823 | unregister_netdevice_notifier(&fcoe_notifier); | 734 | */ |
735 | if (first && time_after(jiffies, fip->sol_time + sol_tov)) | ||
736 | fcoe_ctlr_solicit(fip, NULL); | ||
737 | |||
738 | /* | ||
739 | * If this is the first validated FCF, note the time and | ||
740 | * set a timer to trigger selection. | ||
741 | */ | ||
742 | if (mtu_valid && !fip->sel_time && fcoe_ctlr_fcf_usable(fcf)) { | ||
743 | fip->sel_time = jiffies + | ||
744 | msecs_to_jiffies(FCOE_CTLR_START_DELAY); | ||
745 | if (!timer_pending(&fip->timer) || | ||
746 | time_before(fip->sel_time, fip->timer.expires)) | ||
747 | mod_timer(&fip->timer, fip->sel_time); | ||
748 | } | ||
749 | out: | ||
750 | spin_unlock_bh(&fip->lock); | ||
824 | } | 751 | } |
825 | 752 | ||
826 | /** | 753 | /** |
827 | * fcoe_device_notification() - netdev event notification callback | 754 | * fcoe_ctlr_recv_els() - Handle an incoming FIP-encapsulated ELS frame. |
828 | * @notifier: context of the notification | 755 | * @fip: FCoE controller. |
829 | * @event: type of event | 756 | * @skb: Received FIP packet. |
830 | * @ptr: fixed array for output parsed ifname | ||
831 | * | ||
832 | * This function is called by the ethernet driver in case of link change event | ||
833 | * | ||
834 | * Returns: 0 for success | ||
835 | */ | 757 | */ |
836 | static int fcoe_device_notification(struct notifier_block *notifier, | 758 | static void fcoe_ctlr_recv_els(struct fcoe_ctlr *fip, struct sk_buff *skb) |
837 | ulong event, void *ptr) | ||
838 | { | 759 | { |
839 | struct fc_lport *lp = NULL; | 760 | struct fc_lport *lp = fip->lp; |
840 | struct net_device *real_dev = ptr; | 761 | struct fip_header *fiph; |
841 | struct fcoe_softc *fc; | 762 | struct fc_frame *fp; |
763 | struct fc_frame_header *fh = NULL; | ||
764 | struct fip_desc *desc; | ||
765 | struct fip_encaps *els; | ||
842 | struct fcoe_dev_stats *stats; | 766 | struct fcoe_dev_stats *stats; |
843 | u32 new_link_up; | 767 | enum fip_desc_type els_dtype = 0; |
844 | u32 mfs; | 768 | u8 els_op; |
845 | int rc = NOTIFY_OK; | 769 | u8 sub; |
846 | 770 | u8 granted_mac[ETH_ALEN] = { 0 }; | |
847 | read_lock(&fcoe_hostlist_lock); | 771 | size_t els_len = 0; |
848 | list_for_each_entry(fc, &fcoe_hostlist, list) { | 772 | size_t rlen; |
849 | if (fc->real_dev == real_dev) { | 773 | size_t dlen; |
850 | lp = fc->lp; | 774 | |
775 | fiph = (struct fip_header *)skb->data; | ||
776 | sub = fiph->fip_subcode; | ||
777 | if (sub != FIP_SC_REQ && sub != FIP_SC_REP) | ||
778 | goto drop; | ||
779 | |||
780 | rlen = ntohs(fiph->fip_dl_len) * 4; | ||
781 | if (rlen + sizeof(*fiph) > skb->len) | ||
782 | goto drop; | ||
783 | |||
784 | desc = (struct fip_desc *)(fiph + 1); | ||
785 | while (rlen > 0) { | ||
786 | dlen = desc->fip_dlen * FIP_BPW; | ||
787 | if (dlen < sizeof(*desc) || dlen > rlen) | ||
788 | goto drop; | ||
789 | switch (desc->fip_dtype) { | ||
790 | case FIP_DT_MAC: | ||
791 | if (dlen != sizeof(struct fip_mac_desc)) | ||
792 | goto len_err; | ||
793 | memcpy(granted_mac, | ||
794 | ((struct fip_mac_desc *)desc)->fd_mac, | ||
795 | ETH_ALEN); | ||
796 | if (!is_valid_ether_addr(granted_mac)) { | ||
797 | FIP_DBG("invalid MAC addrs in FIP ELS\n"); | ||
798 | goto drop; | ||
799 | } | ||
851 | break; | 800 | break; |
801 | case FIP_DT_FLOGI: | ||
802 | case FIP_DT_FDISC: | ||
803 | case FIP_DT_LOGO: | ||
804 | case FIP_DT_ELP: | ||
805 | if (fh) | ||
806 | goto drop; | ||
807 | if (dlen < sizeof(*els) + sizeof(*fh) + 1) | ||
808 | goto len_err; | ||
809 | els_len = dlen - sizeof(*els); | ||
810 | els = (struct fip_encaps *)desc; | ||
811 | fh = (struct fc_frame_header *)(els + 1); | ||
812 | els_dtype = desc->fip_dtype; | ||
813 | break; | ||
814 | default: | ||
815 | FIP_DBG("unexpected descriptor type %x " | ||
816 | "in FIP adv\n", desc->fip_dtype); | ||
817 | /* standard says ignore unknown descriptors >= 128 */ | ||
818 | if (desc->fip_dtype < FIP_DT_VENDOR_BASE) | ||
819 | goto drop; | ||
820 | continue; | ||
852 | } | 821 | } |
853 | } | 822 | desc = (struct fip_desc *)((char *)desc + dlen); |
854 | read_unlock(&fcoe_hostlist_lock); | 823 | rlen -= dlen; |
855 | if (lp == NULL) { | ||
856 | rc = NOTIFY_DONE; | ||
857 | goto out; | ||
858 | } | 824 | } |
859 | 825 | ||
860 | new_link_up = lp->link_up; | 826 | if (!fh) |
861 | switch (event) { | 827 | goto drop; |
862 | case NETDEV_DOWN: | 828 | els_op = *(u8 *)(fh + 1); |
863 | case NETDEV_GOING_DOWN: | ||
864 | new_link_up = 0; | ||
865 | break; | ||
866 | case NETDEV_UP: | ||
867 | case NETDEV_CHANGE: | ||
868 | new_link_up = !fcoe_link_ok(lp); | ||
869 | break; | ||
870 | case NETDEV_CHANGEMTU: | ||
871 | mfs = fc->real_dev->mtu - | ||
872 | (sizeof(struct fcoe_hdr) + | ||
873 | sizeof(struct fcoe_crc_eof)); | ||
874 | if (mfs >= FC_MIN_MAX_FRAME) | ||
875 | fc_set_mfs(lp, mfs); | ||
876 | new_link_up = !fcoe_link_ok(lp); | ||
877 | break; | ||
878 | case NETDEV_REGISTER: | ||
879 | break; | ||
880 | default: | ||
881 | FC_DBG("unknown event %ld call", event); | ||
882 | } | ||
883 | if (lp->link_up != new_link_up) { | ||
884 | if (new_link_up) | ||
885 | fc_linkup(lp); | ||
886 | else { | ||
887 | stats = lp->dev_stats[smp_processor_id()]; | ||
888 | if (stats) | ||
889 | stats->LinkFailureCount++; | ||
890 | fc_linkdown(lp); | ||
891 | fcoe_clean_pending_queue(lp); | ||
892 | } | ||
893 | } | ||
894 | out: | ||
895 | return rc; | ||
896 | } | ||
897 | 829 | ||
898 | /** | 830 | if (els_dtype == FIP_DT_FLOGI && sub == FIP_SC_REP && |
899 | * fcoe_if_to_netdev() - parse a name buffer to get netdev | 831 | fip->flogi_oxid == ntohs(fh->fh_ox_id) && |
900 | * @ifname: fixed array for output parsed ifname | 832 | els_op == ELS_LS_ACC && is_valid_ether_addr(granted_mac)) { |
901 | * @buffer: incoming buffer to be copied | 833 | fip->flogi_oxid = FC_XID_UNKNOWN; |
902 | * | 834 | fip->update_mac(fip, fip->data_src_addr, granted_mac); |
903 | * Returns: NULL or ptr to netdeive | 835 | memcpy(fip->data_src_addr, granted_mac, ETH_ALEN); |
904 | */ | ||
905 | static struct net_device *fcoe_if_to_netdev(const char *buffer) | ||
906 | { | ||
907 | char *cp; | ||
908 | char ifname[IFNAMSIZ + 2]; | ||
909 | |||
910 | if (buffer) { | ||
911 | strlcpy(ifname, buffer, IFNAMSIZ); | ||
912 | cp = ifname + strlen(ifname); | ||
913 | while (--cp >= ifname && *cp == '\n') | ||
914 | *cp = '\0'; | ||
915 | return dev_get_by_name(&init_net, ifname); | ||
916 | } | 836 | } |
917 | return NULL; | 837 | |
838 | /* | ||
839 | * Convert skb into an fc_frame containing only the ELS. | ||
840 | */ | ||
841 | skb_pull(skb, (u8 *)fh - skb->data); | ||
842 | skb_trim(skb, els_len); | ||
843 | fp = (struct fc_frame *)skb; | ||
844 | fc_frame_init(fp); | ||
845 | fr_sof(fp) = FC_SOF_I3; | ||
846 | fr_eof(fp) = FC_EOF_T; | ||
847 | fr_dev(fp) = lp; | ||
848 | |||
849 | stats = fc_lport_get_stats(lp); | ||
850 | stats->RxFrames++; | ||
851 | stats->RxWords += skb->len / FIP_BPW; | ||
852 | |||
853 | fc_exch_recv(lp, lp->emp, fp); | ||
854 | return; | ||
855 | |||
856 | len_err: | ||
857 | FIP_DBG("FIP length error in descriptor type %x len %zu\n", | ||
858 | desc->fip_dtype, dlen); | ||
859 | drop: | ||
860 | kfree_skb(skb); | ||
918 | } | 861 | } |
919 | 862 | ||
920 | /** | 863 | /** |
921 | * fcoe_netdev_to_module_owner() - finds out the nic drive moddule of the netdev | 864 | * fcoe_ctlr_recv_els() - Handle an incoming link reset frame. |
922 | * @netdev: the target netdev | 865 | * @fip: FCoE controller. |
866 | * @fh: Received FIP header. | ||
923 | * | 867 | * |
924 | * Returns: ptr to the struct module, NULL for failure | 868 | * There may be multiple VN_Port descriptors. |
869 | * The overall length has already been checked. | ||
925 | */ | 870 | */ |
926 | static struct module * | 871 | static void fcoe_ctlr_recv_clr_vlink(struct fcoe_ctlr *fip, |
927 | fcoe_netdev_to_module_owner(const struct net_device *netdev) | 872 | struct fip_header *fh) |
928 | { | 873 | { |
929 | struct device *dev; | 874 | struct fip_desc *desc; |
930 | 875 | struct fip_mac_desc *mp; | |
931 | if (!netdev) | 876 | struct fip_wwn_desc *wp; |
932 | return NULL; | 877 | struct fip_vn_desc *vp; |
933 | 878 | size_t rlen; | |
934 | dev = netdev->dev.parent; | 879 | size_t dlen; |
935 | if (!dev) | 880 | struct fcoe_fcf *fcf = fip->sel_fcf; |
936 | return NULL; | 881 | struct fc_lport *lp = fip->lp; |
882 | u32 desc_mask; | ||
883 | |||
884 | FIP_DBG("Clear Virtual Link received\n"); | ||
885 | if (!fcf) | ||
886 | return; | ||
887 | if (!fcf || !fc_host_port_id(lp->host)) | ||
888 | return; | ||
937 | 889 | ||
938 | if (!dev->driver) | 890 | /* |
939 | return NULL; | 891 | * mask of required descriptors. Validating each one clears its bit. |
892 | */ | ||
893 | desc_mask = BIT(FIP_DT_MAC) | BIT(FIP_DT_NAME) | BIT(FIP_DT_VN_ID); | ||
894 | |||
895 | rlen = ntohs(fh->fip_dl_len) * FIP_BPW; | ||
896 | desc = (struct fip_desc *)(fh + 1); | ||
897 | while (rlen >= sizeof(*desc)) { | ||
898 | dlen = desc->fip_dlen * FIP_BPW; | ||
899 | if (dlen > rlen) | ||
900 | return; | ||
901 | switch (desc->fip_dtype) { | ||
902 | case FIP_DT_MAC: | ||
903 | mp = (struct fip_mac_desc *)desc; | ||
904 | if (dlen < sizeof(*mp)) | ||
905 | return; | ||
906 | if (compare_ether_addr(mp->fd_mac, fcf->fcf_mac)) | ||
907 | return; | ||
908 | desc_mask &= ~BIT(FIP_DT_MAC); | ||
909 | break; | ||
910 | case FIP_DT_NAME: | ||
911 | wp = (struct fip_wwn_desc *)desc; | ||
912 | if (dlen < sizeof(*wp)) | ||
913 | return; | ||
914 | if (get_unaligned_be64(&wp->fd_wwn) != fcf->switch_name) | ||
915 | return; | ||
916 | desc_mask &= ~BIT(FIP_DT_NAME); | ||
917 | break; | ||
918 | case FIP_DT_VN_ID: | ||
919 | vp = (struct fip_vn_desc *)desc; | ||
920 | if (dlen < sizeof(*vp)) | ||
921 | return; | ||
922 | if (compare_ether_addr(vp->fd_mac, | ||
923 | fip->data_src_addr) == 0 && | ||
924 | get_unaligned_be64(&vp->fd_wwpn) == lp->wwpn && | ||
925 | ntoh24(vp->fd_fc_id) == fc_host_port_id(lp->host)) | ||
926 | desc_mask &= ~BIT(FIP_DT_VN_ID); | ||
927 | break; | ||
928 | default: | ||
929 | /* standard says ignore unknown descriptors >= 128 */ | ||
930 | if (desc->fip_dtype < FIP_DT_VENDOR_BASE) | ||
931 | return; | ||
932 | break; | ||
933 | } | ||
934 | desc = (struct fip_desc *)((char *)desc + dlen); | ||
935 | rlen -= dlen; | ||
936 | } | ||
940 | 937 | ||
941 | return dev->driver->owner; | 938 | /* |
939 | * reset only if all required descriptors were present and valid. | ||
940 | */ | ||
941 | if (desc_mask) { | ||
942 | FIP_DBG("missing descriptors mask %x\n", desc_mask); | ||
943 | } else { | ||
944 | FIP_DBG("performing Clear Virtual Link\n"); | ||
945 | fcoe_ctlr_reset(fip, FIP_ST_ENABLED); | ||
946 | } | ||
942 | } | 947 | } |
943 | 948 | ||
944 | /** | 949 | /** |
945 | * fcoe_ethdrv_get() - Hold the Ethernet driver | 950 | * fcoe_ctlr_recv() - Receive a FIP frame. |
946 | * @netdev: the target netdev | 951 | * @fip: FCoE controller. |
952 | * @skb: Received FIP packet. | ||
947 | * | 953 | * |
948 | * Holds the Ethernet driver module by try_module_get() for | 954 | * This is called from NET_RX_SOFTIRQ. |
949 | * the corresponding netdev. | ||
950 | * | ||
951 | * Returns: 0 for succsss | ||
952 | */ | 955 | */ |
953 | static int fcoe_ethdrv_get(const struct net_device *netdev) | 956 | void fcoe_ctlr_recv(struct fcoe_ctlr *fip, struct sk_buff *skb) |
954 | { | 957 | { |
955 | struct module *owner; | 958 | spin_lock_bh(&fip->fip_recv_list.lock); |
956 | 959 | __skb_queue_tail(&fip->fip_recv_list, skb); | |
957 | owner = fcoe_netdev_to_module_owner(netdev); | 960 | spin_unlock_bh(&fip->fip_recv_list.lock); |
958 | if (owner) { | 961 | schedule_work(&fip->recv_work); |
959 | printk(KERN_DEBUG "fcoe:hold driver module %s for %s\n", | ||
960 | module_name(owner), netdev->name); | ||
961 | return try_module_get(owner); | ||
962 | } | ||
963 | return -ENODEV; | ||
964 | } | 962 | } |
963 | EXPORT_SYMBOL(fcoe_ctlr_recv); | ||
965 | 964 | ||
966 | /** | 965 | /** |
967 | * fcoe_ethdrv_put() - Release the Ethernet driver | 966 | * fcoe_ctlr_recv_handler() - Receive a FIP frame. |
968 | * @netdev: the target netdev | 967 | * @fip: FCoE controller. |
968 | * @skb: Received FIP packet. | ||
969 | * | 969 | * |
970 | * Releases the Ethernet driver module by module_put for | 970 | * Returns non-zero if the frame is dropped. |
971 | * the corresponding netdev. | ||
972 | * | ||
973 | * Returns: 0 for succsss | ||
974 | */ | 971 | */ |
975 | static int fcoe_ethdrv_put(const struct net_device *netdev) | 972 | static int fcoe_ctlr_recv_handler(struct fcoe_ctlr *fip, struct sk_buff *skb) |
976 | { | 973 | { |
977 | struct module *owner; | 974 | struct fip_header *fiph; |
975 | struct ethhdr *eh; | ||
976 | enum fip_state state; | ||
977 | u16 op; | ||
978 | u8 sub; | ||
979 | |||
980 | if (skb_linearize(skb)) | ||
981 | goto drop; | ||
982 | if (skb->len < sizeof(*fiph)) | ||
983 | goto drop; | ||
984 | eh = eth_hdr(skb); | ||
985 | if (compare_ether_addr(eh->h_dest, fip->ctl_src_addr) && | ||
986 | compare_ether_addr(eh->h_dest, FIP_ALL_ENODE_MACS)) | ||
987 | goto drop; | ||
988 | fiph = (struct fip_header *)skb->data; | ||
989 | op = ntohs(fiph->fip_op); | ||
990 | sub = fiph->fip_subcode; | ||
991 | |||
992 | FIP_DBG_LVL(2, "ver %x op %x/%x dl %x fl %x\n", | ||
993 | FIP_VER_DECAPS(fiph->fip_ver), op, sub, | ||
994 | ntohs(fiph->fip_dl_len), ntohs(fiph->fip_flags)); | ||
995 | |||
996 | if (FIP_VER_DECAPS(fiph->fip_ver) != FIP_VER) | ||
997 | goto drop; | ||
998 | if (ntohs(fiph->fip_dl_len) * FIP_BPW + sizeof(*fiph) > skb->len) | ||
999 | goto drop; | ||
1000 | |||
1001 | spin_lock_bh(&fip->lock); | ||
1002 | state = fip->state; | ||
1003 | if (state == FIP_ST_AUTO) { | ||
1004 | fip->map_dest = 0; | ||
1005 | fip->state = FIP_ST_ENABLED; | ||
1006 | state = FIP_ST_ENABLED; | ||
1007 | FIP_DBG("using FIP mode\n"); | ||
1008 | } | ||
1009 | spin_unlock_bh(&fip->lock); | ||
1010 | if (state != FIP_ST_ENABLED) | ||
1011 | goto drop; | ||
978 | 1012 | ||
979 | owner = fcoe_netdev_to_module_owner(netdev); | 1013 | if (op == FIP_OP_LS) { |
980 | if (owner) { | 1014 | fcoe_ctlr_recv_els(fip, skb); /* consumes skb */ |
981 | printk(KERN_DEBUG "fcoe:release driver module %s for %s\n", | ||
982 | module_name(owner), netdev->name); | ||
983 | module_put(owner); | ||
984 | return 0; | 1015 | return 0; |
985 | } | 1016 | } |
986 | return -ENODEV; | 1017 | if (op == FIP_OP_DISC && sub == FIP_SC_ADV) |
1018 | fcoe_ctlr_recv_adv(fip, skb); | ||
1019 | else if (op == FIP_OP_CTRL && sub == FIP_SC_CLR_VLINK) | ||
1020 | fcoe_ctlr_recv_clr_vlink(fip, fiph); | ||
1021 | kfree_skb(skb); | ||
1022 | return 0; | ||
1023 | drop: | ||
1024 | kfree_skb(skb); | ||
1025 | return -1; | ||
987 | } | 1026 | } |
988 | 1027 | ||
989 | /** | 1028 | /** |
990 | * fcoe_destroy() - handles the destroy from sysfs | 1029 | * fcoe_ctlr_select() - Select the best FCF, if possible. |
991 | * @buffer: expcted to be a eth if name | 1030 | * @fip: FCoE controller. |
992 | * @kp: associated kernel param | 1031 | * |
1032 | * If there are conflicting advertisements, no FCF can be chosen. | ||
993 | * | 1033 | * |
994 | * Returns: 0 for success | 1034 | * Called with lock held. |
995 | */ | 1035 | */ |
996 | static int fcoe_destroy(const char *buffer, struct kernel_param *kp) | 1036 | static void fcoe_ctlr_select(struct fcoe_ctlr *fip) |
997 | { | 1037 | { |
998 | int rc; | 1038 | struct fcoe_fcf *fcf; |
999 | struct net_device *netdev; | 1039 | struct fcoe_fcf *best = NULL; |
1000 | 1040 | ||
1001 | netdev = fcoe_if_to_netdev(buffer); | 1041 | list_for_each_entry(fcf, &fip->fcfs, list) { |
1002 | if (!netdev) { | 1042 | FIP_DBG("consider FCF for fab %llx VFID %d map %x val %d\n", |
1003 | rc = -ENODEV; | 1043 | fcf->fabric_name, fcf->vfid, |
1004 | goto out_nodev; | 1044 | fcf->fc_map, fcoe_ctlr_mtu_valid(fcf)); |
1005 | } | 1045 | if (!fcoe_ctlr_fcf_usable(fcf)) { |
1006 | /* look for existing lport */ | 1046 | FIP_DBG("FCF for fab %llx map %x %svalid %savailable\n", |
1007 | if (!fcoe_hostlist_lookup(netdev)) { | 1047 | fcf->fabric_name, fcf->fc_map, |
1008 | rc = -ENODEV; | 1048 | (fcf->flags & FIP_FL_SOL) ? "" : "in", |
1009 | goto out_putdev; | 1049 | (fcf->flags & FIP_FL_AVAIL) ? "" : "un"); |
1010 | } | 1050 | continue; |
1011 | /* pass to transport */ | 1051 | } |
1012 | rc = fcoe_transport_release(netdev); | 1052 | if (!best) { |
1013 | if (rc) { | 1053 | best = fcf; |
1014 | printk(KERN_ERR "fcoe: fcoe_transport_release(%s) failed\n", | 1054 | continue; |
1015 | netdev->name); | 1055 | } |
1016 | rc = -EIO; | 1056 | if (fcf->fabric_name != best->fabric_name || |
1017 | goto out_putdev; | 1057 | fcf->vfid != best->vfid || |
1058 | fcf->fc_map != best->fc_map) { | ||
1059 | FIP_DBG("conflicting fabric, VFID, or FC-MAP\n"); | ||
1060 | return; | ||
1061 | } | ||
1062 | if (fcf->pri < best->pri) | ||
1063 | best = fcf; | ||
1018 | } | 1064 | } |
1019 | fcoe_ethdrv_put(netdev); | 1065 | fip->sel_fcf = best; |
1020 | rc = 0; | ||
1021 | out_putdev: | ||
1022 | dev_put(netdev); | ||
1023 | out_nodev: | ||
1024 | return rc; | ||
1025 | } | 1066 | } |
1026 | 1067 | ||
1027 | /** | 1068 | /** |
1028 | * fcoe_create() - Handles the create call from sysfs | 1069 | * fcoe_ctlr_timeout() - FIP timer function. |
1029 | * @buffer: expcted to be a eth if name | 1070 | * @arg: &fcoe_ctlr pointer. |
1030 | * @kp: associated kernel param | ||
1031 | * | 1071 | * |
1032 | * Returns: 0 for success | 1072 | * Ages FCFs. Triggers FCF selection if possible. Sends keep-alives. |
1033 | */ | 1073 | */ |
1034 | static int fcoe_create(const char *buffer, struct kernel_param *kp) | 1074 | static void fcoe_ctlr_timeout(unsigned long arg) |
1035 | { | 1075 | { |
1036 | int rc; | 1076 | struct fcoe_ctlr *fip = (struct fcoe_ctlr *)arg; |
1037 | struct net_device *netdev; | 1077 | struct fcoe_fcf *sel; |
1038 | 1078 | struct fcoe_fcf *fcf; | |
1039 | netdev = fcoe_if_to_netdev(buffer); | 1079 | unsigned long next_timer = jiffies + msecs_to_jiffies(FIP_VN_KA_PERIOD); |
1040 | if (!netdev) { | 1080 | DECLARE_MAC_BUF(buf); |
1041 | rc = -ENODEV; | 1081 | u8 send_ctlr_ka; |
1042 | goto out_nodev; | 1082 | u8 send_port_ka; |
1083 | |||
1084 | spin_lock_bh(&fip->lock); | ||
1085 | if (fip->state == FIP_ST_DISABLED) { | ||
1086 | spin_unlock_bh(&fip->lock); | ||
1087 | return; | ||
1043 | } | 1088 | } |
1044 | /* look for existing lport */ | 1089 | |
1045 | if (fcoe_hostlist_lookup(netdev)) { | 1090 | fcf = fip->sel_fcf; |
1046 | rc = -EEXIST; | 1091 | fcoe_ctlr_age_fcfs(fip); |
1047 | goto out_putdev; | 1092 | |
1093 | sel = fip->sel_fcf; | ||
1094 | if (!sel && fip->sel_time && time_after_eq(jiffies, fip->sel_time)) { | ||
1095 | fcoe_ctlr_select(fip); | ||
1096 | sel = fip->sel_fcf; | ||
1097 | fip->sel_time = 0; | ||
1048 | } | 1098 | } |
1049 | fcoe_ethdrv_get(netdev); | 1099 | |
1050 | 1100 | if (sel != fcf) { | |
1051 | /* pass to transport */ | 1101 | fcf = sel; /* the old FCF may have been freed */ |
1052 | rc = fcoe_transport_attach(netdev); | 1102 | if (sel) { |
1053 | if (rc) { | 1103 | printk(KERN_INFO "host%d: FIP selected " |
1054 | printk(KERN_ERR "fcoe: fcoe_transport_attach(%s) failed\n", | 1104 | "Fibre-Channel Forwarder MAC %s\n", |
1055 | netdev->name); | 1105 | fip->lp->host->host_no, |
1056 | fcoe_ethdrv_put(netdev); | 1106 | print_mac(buf, sel->fcf_mac)); |
1057 | rc = -EIO; | 1107 | memcpy(fip->dest_addr, sel->fcf_mac, ETH_ALEN); |
1058 | goto out_putdev; | 1108 | fip->port_ka_time = jiffies + |
1109 | msecs_to_jiffies(FIP_VN_KA_PERIOD); | ||
1110 | fip->ctlr_ka_time = jiffies + sel->fka_period; | ||
1111 | fip->link = 1; | ||
1112 | } else { | ||
1113 | printk(KERN_NOTICE "host%d: " | ||
1114 | "FIP Fibre-Channel Forwarder timed out. " | ||
1115 | "Starting FCF discovery.\n", | ||
1116 | fip->lp->host->host_no); | ||
1117 | fip->link = 0; | ||
1118 | } | ||
1119 | schedule_work(&fip->link_work); | ||
1059 | } | 1120 | } |
1060 | rc = 0; | ||
1061 | out_putdev: | ||
1062 | dev_put(netdev); | ||
1063 | out_nodev: | ||
1064 | return rc; | ||
1065 | } | ||
1066 | 1121 | ||
1067 | module_param_call(create, fcoe_create, NULL, NULL, S_IWUSR); | 1122 | send_ctlr_ka = 0; |
1068 | __MODULE_PARM_TYPE(create, "string"); | 1123 | send_port_ka = 0; |
1069 | MODULE_PARM_DESC(create, "Create fcoe port using net device passed in."); | 1124 | if (sel) { |
1070 | module_param_call(destroy, fcoe_destroy, NULL, NULL, S_IWUSR); | 1125 | if (time_after_eq(jiffies, fip->ctlr_ka_time)) { |
1071 | __MODULE_PARM_TYPE(destroy, "string"); | 1126 | fip->ctlr_ka_time = jiffies + sel->fka_period; |
1072 | MODULE_PARM_DESC(destroy, "Destroy fcoe port"); | 1127 | send_ctlr_ka = 1; |
1128 | } | ||
1129 | if (time_after(next_timer, fip->ctlr_ka_time)) | ||
1130 | next_timer = fip->ctlr_ka_time; | ||
1073 | 1131 | ||
1074 | /** | 1132 | if (time_after_eq(jiffies, fip->port_ka_time)) { |
1075 | * fcoe_link_ok() - Check if link is ok for the fc_lport | 1133 | fip->port_ka_time += jiffies + |
1076 | * @lp: ptr to the fc_lport | 1134 | msecs_to_jiffies(FIP_VN_KA_PERIOD); |
1077 | * | 1135 | send_port_ka = 1; |
1078 | * Any permanently-disqualifying conditions have been previously checked. | ||
1079 | * This also updates the speed setting, which may change with link for 100/1000. | ||
1080 | * | ||
1081 | * This function should probably be checking for PAUSE support at some point | ||
1082 | * in the future. Currently Per-priority-pause is not determinable using | ||
1083 | * ethtool, so we shouldn't be restrictive until that problem is resolved. | ||
1084 | * | ||
1085 | * Returns: 0 if link is OK for use by FCoE. | ||
1086 | * | ||
1087 | */ | ||
1088 | int fcoe_link_ok(struct fc_lport *lp) | ||
1089 | { | ||
1090 | struct fcoe_softc *fc = lport_priv(lp); | ||
1091 | struct net_device *dev = fc->real_dev; | ||
1092 | struct ethtool_cmd ecmd = { ETHTOOL_GSET }; | ||
1093 | int rc = 0; | ||
1094 | |||
1095 | if ((dev->flags & IFF_UP) && netif_carrier_ok(dev)) { | ||
1096 | dev = fc->phys_dev; | ||
1097 | if (dev->ethtool_ops->get_settings) { | ||
1098 | dev->ethtool_ops->get_settings(dev, &ecmd); | ||
1099 | lp->link_supported_speeds &= | ||
1100 | ~(FC_PORTSPEED_1GBIT | FC_PORTSPEED_10GBIT); | ||
1101 | if (ecmd.supported & (SUPPORTED_1000baseT_Half | | ||
1102 | SUPPORTED_1000baseT_Full)) | ||
1103 | lp->link_supported_speeds |= FC_PORTSPEED_1GBIT; | ||
1104 | if (ecmd.supported & SUPPORTED_10000baseT_Full) | ||
1105 | lp->link_supported_speeds |= | ||
1106 | FC_PORTSPEED_10GBIT; | ||
1107 | if (ecmd.speed == SPEED_1000) | ||
1108 | lp->link_speed = FC_PORTSPEED_1GBIT; | ||
1109 | if (ecmd.speed == SPEED_10000) | ||
1110 | lp->link_speed = FC_PORTSPEED_10GBIT; | ||
1111 | } | 1136 | } |
1112 | } else | 1137 | if (time_after(next_timer, fip->port_ka_time)) |
1113 | rc = -1; | 1138 | next_timer = fip->port_ka_time; |
1139 | mod_timer(&fip->timer, next_timer); | ||
1140 | } else if (fip->sel_time) { | ||
1141 | next_timer = fip->sel_time + | ||
1142 | msecs_to_jiffies(FCOE_CTLR_START_DELAY); | ||
1143 | mod_timer(&fip->timer, next_timer); | ||
1144 | } | ||
1145 | spin_unlock_bh(&fip->lock); | ||
1114 | 1146 | ||
1115 | return rc; | 1147 | if (send_ctlr_ka) |
1148 | fcoe_ctlr_send_keep_alive(fip, 0, fip->ctl_src_addr); | ||
1149 | if (send_port_ka) | ||
1150 | fcoe_ctlr_send_keep_alive(fip, 1, fip->data_src_addr); | ||
1116 | } | 1151 | } |
1117 | EXPORT_SYMBOL_GPL(fcoe_link_ok); | ||
1118 | 1152 | ||
1119 | /** | 1153 | /** |
1120 | * fcoe_percpu_clean() - Clear the pending skbs for an lport | 1154 | * fcoe_ctlr_link_work() - worker thread function for link changes. |
1121 | * @lp: the fc_lport | 1155 | * @work: pointer to link_work member inside &fcoe_ctlr. |
1156 | * | ||
1157 | * See if the link status has changed and if so, report it. | ||
1158 | * | ||
1159 | * This is here because fc_linkup() and fc_linkdown() must not | ||
1160 | * be called from the timer directly, since they use a mutex. | ||
1122 | */ | 1161 | */ |
1123 | void fcoe_percpu_clean(struct fc_lport *lp) | 1162 | static void fcoe_ctlr_link_work(struct work_struct *work) |
1124 | { | 1163 | { |
1125 | int idx; | 1164 | struct fcoe_ctlr *fip; |
1126 | struct fcoe_percpu_s *pp; | 1165 | int link; |
1127 | struct fcoe_rcv_info *fr; | 1166 | int last_link; |
1128 | struct sk_buff_head *list; | 1167 | |
1129 | struct sk_buff *skb, *next; | 1168 | fip = container_of(work, struct fcoe_ctlr, link_work); |
1130 | struct sk_buff *head; | 1169 | spin_lock_bh(&fip->lock); |
1131 | 1170 | last_link = fip->last_link; | |
1132 | for (idx = 0; idx < NR_CPUS; idx++) { | 1171 | link = fip->link; |
1133 | if (fcoe_percpu[idx]) { | 1172 | fip->last_link = link; |
1134 | pp = fcoe_percpu[idx]; | 1173 | spin_unlock_bh(&fip->lock); |
1135 | spin_lock_bh(&pp->fcoe_rx_list.lock); | 1174 | |
1136 | list = &pp->fcoe_rx_list; | 1175 | if (last_link != link) { |
1137 | head = list->next; | 1176 | if (link) |
1138 | for (skb = head; skb != (struct sk_buff *)list; | 1177 | fc_linkup(fip->lp); |
1139 | skb = next) { | 1178 | else |
1140 | next = skb->next; | 1179 | fcoe_ctlr_reset(fip, FIP_ST_LINK_WAIT); |
1141 | fr = fcoe_dev_from_skb(skb); | ||
1142 | if (fr->fr_dev == lp) { | ||
1143 | __skb_unlink(skb, list); | ||
1144 | kfree_skb(skb); | ||
1145 | } | ||
1146 | } | ||
1147 | spin_unlock_bh(&pp->fcoe_rx_list.lock); | ||
1148 | } | ||
1149 | } | 1180 | } |
1150 | } | 1181 | } |
1151 | EXPORT_SYMBOL_GPL(fcoe_percpu_clean); | ||
1152 | 1182 | ||
1153 | /** | 1183 | /** |
1154 | * fcoe_clean_pending_queue() - Dequeue a skb and free it | 1184 | * fcoe_ctlr_recv_work() - Worker thread function for receiving FIP frames. |
1155 | * @lp: the corresponding fc_lport | 1185 | * @recv_work: pointer to recv_work member inside &fcoe_ctlr. |
1156 | * | ||
1157 | * Returns: none | ||
1158 | */ | 1186 | */ |
1159 | void fcoe_clean_pending_queue(struct fc_lport *lp) | 1187 | static void fcoe_ctlr_recv_work(struct work_struct *recv_work) |
1160 | { | 1188 | { |
1161 | struct fcoe_softc *fc = lport_priv(lp); | 1189 | struct fcoe_ctlr *fip; |
1162 | struct sk_buff *skb; | 1190 | struct sk_buff *skb; |
1163 | 1191 | ||
1164 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | 1192 | fip = container_of(recv_work, struct fcoe_ctlr, recv_work); |
1165 | while ((skb = __skb_dequeue(&fc->fcoe_pending_queue)) != NULL) { | 1193 | spin_lock_bh(&fip->fip_recv_list.lock); |
1166 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | 1194 | while ((skb = __skb_dequeue(&fip->fip_recv_list))) { |
1167 | kfree_skb(skb); | 1195 | spin_unlock_bh(&fip->fip_recv_list.lock); |
1168 | spin_lock_bh(&fc->fcoe_pending_queue.lock); | 1196 | fcoe_ctlr_recv_handler(fip, skb); |
1197 | spin_lock_bh(&fip->fip_recv_list.lock); | ||
1169 | } | 1198 | } |
1170 | spin_unlock_bh(&fc->fcoe_pending_queue.lock); | 1199 | spin_unlock_bh(&fip->fip_recv_list.lock); |
1171 | } | 1200 | } |
1172 | EXPORT_SYMBOL_GPL(fcoe_clean_pending_queue); | ||
1173 | 1201 | ||
1174 | /** | 1202 | /** |
1175 | * libfc_host_alloc() - Allocate a Scsi_Host with room for the fc_lport | 1203 | * fcoe_ctlr_recv_flogi() - snoop Pre-FIP receipt of FLOGI response or request. |
1176 | * @sht: ptr to the scsi host templ | 1204 | * @fip: FCoE controller. |
1177 | * @priv_size: size of private data after fc_lport | 1205 | * @fp: FC frame. |
1206 | * @sa: Ethernet source MAC address from received FCoE frame. | ||
1178 | * | 1207 | * |
1179 | * Returns: ptr to Scsi_Host | 1208 | * Snoop potential response to FLOGI or even incoming FLOGI. |
1180 | * TODO: to libfc? | ||
1181 | */ | ||
1182 | static inline struct Scsi_Host * | ||
1183 | libfc_host_alloc(struct scsi_host_template *sht, int priv_size) | ||
1184 | { | ||
1185 | return scsi_host_alloc(sht, sizeof(struct fc_lport) + priv_size); | ||
1186 | } | ||
1187 | |||
1188 | /** | ||
1189 | * fcoe_host_alloc() - Allocate a Scsi_Host with room for the fcoe_softc | ||
1190 | * @sht: ptr to the scsi host templ | ||
1191 | * @priv_size: size of private data after fc_lport | ||
1192 | * | 1209 | * |
1193 | * Returns: ptr to Scsi_Host | 1210 | * The caller has checked that we are waiting for login as indicated |
1194 | */ | 1211 | * by fip->flogi_oxid != FC_XID_UNKNOWN. |
1195 | struct Scsi_Host *fcoe_host_alloc(struct scsi_host_template *sht, int priv_size) | 1212 | * |
1196 | { | 1213 | * The caller is responsible for freeing the frame. |
1197 | return libfc_host_alloc(sht, sizeof(struct fcoe_softc) + priv_size); | ||
1198 | } | ||
1199 | EXPORT_SYMBOL_GPL(fcoe_host_alloc); | ||
1200 | |||
1201 | /** | ||
1202 | * fcoe_reset() - Resets the fcoe | ||
1203 | * @shost: shost the reset is from | ||
1204 | * | 1214 | * |
1205 | * Returns: always 0 | 1215 | * Return non-zero if the frame should not be delivered to libfc. |
1206 | */ | 1216 | */ |
1207 | int fcoe_reset(struct Scsi_Host *shost) | 1217 | int fcoe_ctlr_recv_flogi(struct fcoe_ctlr *fip, struct fc_frame *fp, u8 *sa) |
1208 | { | 1218 | { |
1209 | struct fc_lport *lport = shost_priv(shost); | 1219 | struct fc_frame_header *fh; |
1210 | fc_lport_reset(lport); | 1220 | u8 op; |
1221 | u8 mac[ETH_ALEN]; | ||
1222 | |||
1223 | fh = fc_frame_header_get(fp); | ||
1224 | if (fh->fh_type != FC_TYPE_ELS) | ||
1225 | return 0; | ||
1226 | |||
1227 | op = fc_frame_payload_op(fp); | ||
1228 | if (op == ELS_LS_ACC && fh->fh_r_ctl == FC_RCTL_ELS_REP && | ||
1229 | fip->flogi_oxid == ntohs(fh->fh_ox_id)) { | ||
1230 | |||
1231 | spin_lock_bh(&fip->lock); | ||
1232 | if (fip->state != FIP_ST_AUTO && fip->state != FIP_ST_NON_FIP) { | ||
1233 | spin_unlock_bh(&fip->lock); | ||
1234 | return -EINVAL; | ||
1235 | } | ||
1236 | fip->state = FIP_ST_NON_FIP; | ||
1237 | FIP_DBG("received FLOGI LS_ACC using non-FIP mode\n"); | ||
1238 | |||
1239 | /* | ||
1240 | * FLOGI accepted. | ||
1241 | * If the src mac addr is FC_OUI-based, then we mark the | ||
1242 | * address_mode flag to use FC_OUI-based Ethernet DA. | ||
1243 | * Otherwise we use the FCoE gateway addr | ||
1244 | */ | ||
1245 | if (!compare_ether_addr(sa, (u8[6])FC_FCOE_FLOGI_MAC)) { | ||
1246 | fip->map_dest = 1; | ||
1247 | } else { | ||
1248 | memcpy(fip->dest_addr, sa, ETH_ALEN); | ||
1249 | fip->map_dest = 0; | ||
1250 | } | ||
1251 | fip->flogi_oxid = FC_XID_UNKNOWN; | ||
1252 | memcpy(mac, fip->data_src_addr, ETH_ALEN); | ||
1253 | fc_fcoe_set_mac(fip->data_src_addr, fh->fh_d_id); | ||
1254 | spin_unlock_bh(&fip->lock); | ||
1255 | |||
1256 | fip->update_mac(fip, mac, fip->data_src_addr); | ||
1257 | } else if (op == ELS_FLOGI && fh->fh_r_ctl == FC_RCTL_ELS_REQ && sa) { | ||
1258 | /* | ||
1259 | * Save source MAC for point-to-point responses. | ||
1260 | */ | ||
1261 | spin_lock_bh(&fip->lock); | ||
1262 | if (fip->state == FIP_ST_AUTO || fip->state == FIP_ST_NON_FIP) { | ||
1263 | memcpy(fip->dest_addr, sa, ETH_ALEN); | ||
1264 | fip->map_dest = 0; | ||
1265 | if (fip->state == FIP_ST_NON_FIP) | ||
1266 | FIP_DBG("received FLOGI REQ, " | ||
1267 | "using non-FIP mode\n"); | ||
1268 | fip->state = FIP_ST_NON_FIP; | ||
1269 | } | ||
1270 | spin_unlock_bh(&fip->lock); | ||
1271 | } | ||
1211 | return 0; | 1272 | return 0; |
1212 | } | 1273 | } |
1213 | EXPORT_SYMBOL_GPL(fcoe_reset); | 1274 | EXPORT_SYMBOL(fcoe_ctlr_recv_flogi); |
1214 | 1275 | ||
1215 | /** | 1276 | /** |
1216 | * fcoe_wwn_from_mac() - Converts 48-bit IEEE MAC address to 64-bit FC WWN. | 1277 | * fcoe_wwn_from_mac() - Converts 48-bit IEEE MAC address to 64-bit FC WWN. |
@@ -1254,85 +1315,6 @@ u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], | |||
1254 | EXPORT_SYMBOL_GPL(fcoe_wwn_from_mac); | 1315 | EXPORT_SYMBOL_GPL(fcoe_wwn_from_mac); |
1255 | 1316 | ||
1256 | /** | 1317 | /** |
1257 | * fcoe_hostlist_lookup_softc() - find the corresponding lport by a given device | ||
1258 | * @device: this is currently ptr to net_device | ||
1259 | * | ||
1260 | * Returns: NULL or the located fcoe_softc | ||
1261 | */ | ||
1262 | static struct fcoe_softc * | ||
1263 | fcoe_hostlist_lookup_softc(const struct net_device *dev) | ||
1264 | { | ||
1265 | struct fcoe_softc *fc; | ||
1266 | |||
1267 | read_lock(&fcoe_hostlist_lock); | ||
1268 | list_for_each_entry(fc, &fcoe_hostlist, list) { | ||
1269 | if (fc->real_dev == dev) { | ||
1270 | read_unlock(&fcoe_hostlist_lock); | ||
1271 | return fc; | ||
1272 | } | ||
1273 | } | ||
1274 | read_unlock(&fcoe_hostlist_lock); | ||
1275 | return NULL; | ||
1276 | } | ||
1277 | |||
1278 | /** | ||
1279 | * fcoe_hostlist_lookup() - Find the corresponding lport by netdev | ||
1280 | * @netdev: ptr to net_device | ||
1281 | * | ||
1282 | * Returns: 0 for success | ||
1283 | */ | ||
1284 | struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev) | ||
1285 | { | ||
1286 | struct fcoe_softc *fc; | ||
1287 | |||
1288 | fc = fcoe_hostlist_lookup_softc(netdev); | ||
1289 | |||
1290 | return (fc) ? fc->lp : NULL; | ||
1291 | } | ||
1292 | EXPORT_SYMBOL_GPL(fcoe_hostlist_lookup); | ||
1293 | |||
1294 | /** | ||
1295 | * fcoe_hostlist_add() - Add a lport to lports list | ||
1296 | * @lp: ptr to the fc_lport to badded | ||
1297 | * | ||
1298 | * Returns: 0 for success | ||
1299 | */ | ||
1300 | int fcoe_hostlist_add(const struct fc_lport *lp) | ||
1301 | { | ||
1302 | struct fcoe_softc *fc; | ||
1303 | |||
1304 | fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp)); | ||
1305 | if (!fc) { | ||
1306 | fc = lport_priv(lp); | ||
1307 | write_lock_bh(&fcoe_hostlist_lock); | ||
1308 | list_add_tail(&fc->list, &fcoe_hostlist); | ||
1309 | write_unlock_bh(&fcoe_hostlist_lock); | ||
1310 | } | ||
1311 | return 0; | ||
1312 | } | ||
1313 | EXPORT_SYMBOL_GPL(fcoe_hostlist_add); | ||
1314 | |||
1315 | /** | ||
1316 | * fcoe_hostlist_remove() - remove a lport from lports list | ||
1317 | * @lp: ptr to the fc_lport to badded | ||
1318 | * | ||
1319 | * Returns: 0 for success | ||
1320 | */ | ||
1321 | int fcoe_hostlist_remove(const struct fc_lport *lp) | ||
1322 | { | ||
1323 | struct fcoe_softc *fc; | ||
1324 | |||
1325 | fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp)); | ||
1326 | BUG_ON(!fc); | ||
1327 | write_lock_bh(&fcoe_hostlist_lock); | ||
1328 | list_del(&fc->list); | ||
1329 | write_unlock_bh(&fcoe_hostlist_lock); | ||
1330 | |||
1331 | return 0; | ||
1332 | } | ||
1333 | EXPORT_SYMBOL_GPL(fcoe_hostlist_remove); | ||
1334 | |||
1335 | /** | ||
1336 | * fcoe_libfc_config() - sets up libfc related properties for lport | 1318 | * fcoe_libfc_config() - sets up libfc related properties for lport |
1337 | * @lp: ptr to the fc_lport | 1319 | * @lp: ptr to the fc_lport |
1338 | * @tt: libfc function template | 1320 | * @tt: libfc function template |
@@ -1354,121 +1336,3 @@ int fcoe_libfc_config(struct fc_lport *lp, struct libfc_function_template *tt) | |||
1354 | return 0; | 1336 | return 0; |
1355 | } | 1337 | } |
1356 | EXPORT_SYMBOL_GPL(fcoe_libfc_config); | 1338 | EXPORT_SYMBOL_GPL(fcoe_libfc_config); |
1357 | |||
1358 | /** | ||
1359 | * fcoe_init() - fcoe module loading initialization | ||
1360 | * | ||
1361 | * Initialization routine | ||
1362 | * 1. Will create fc transport software structure | ||
1363 | * 2. initialize the link list of port information structure | ||
1364 | * | ||
1365 | * Returns 0 on success, negative on failure | ||
1366 | */ | ||
1367 | static int __init fcoe_init(void) | ||
1368 | { | ||
1369 | int cpu; | ||
1370 | struct fcoe_percpu_s *p; | ||
1371 | |||
1372 | |||
1373 | INIT_LIST_HEAD(&fcoe_hostlist); | ||
1374 | rwlock_init(&fcoe_hostlist_lock); | ||
1375 | |||
1376 | #ifdef CONFIG_HOTPLUG_CPU | ||
1377 | register_cpu_notifier(&fcoe_cpu_notifier); | ||
1378 | #endif /* CONFIG_HOTPLUG_CPU */ | ||
1379 | |||
1380 | /* | ||
1381 | * initialize per CPU interrupt thread | ||
1382 | */ | ||
1383 | for_each_online_cpu(cpu) { | ||
1384 | p = kzalloc(sizeof(struct fcoe_percpu_s), GFP_KERNEL); | ||
1385 | if (p) { | ||
1386 | p->thread = kthread_create(fcoe_percpu_receive_thread, | ||
1387 | (void *)p, | ||
1388 | "fcoethread/%d", cpu); | ||
1389 | |||
1390 | /* | ||
1391 | * if there is no error then bind the thread to the cpu | ||
1392 | * initialize the semaphore and skb queue head | ||
1393 | */ | ||
1394 | if (likely(!IS_ERR(p->thread))) { | ||
1395 | p->cpu = cpu; | ||
1396 | fcoe_percpu[cpu] = p; | ||
1397 | skb_queue_head_init(&p->fcoe_rx_list); | ||
1398 | kthread_bind(p->thread, cpu); | ||
1399 | wake_up_process(p->thread); | ||
1400 | } else { | ||
1401 | fcoe_percpu[cpu] = NULL; | ||
1402 | kfree(p); | ||
1403 | } | ||
1404 | } | ||
1405 | } | ||
1406 | |||
1407 | /* | ||
1408 | * setup link change notification | ||
1409 | */ | ||
1410 | fcoe_dev_setup(); | ||
1411 | |||
1412 | setup_timer(&fcoe_timer, fcoe_watchdog, 0); | ||
1413 | |||
1414 | mod_timer(&fcoe_timer, jiffies + (10 * HZ)); | ||
1415 | |||
1416 | /* initiatlize the fcoe transport */ | ||
1417 | fcoe_transport_init(); | ||
1418 | |||
1419 | fcoe_sw_init(); | ||
1420 | |||
1421 | return 0; | ||
1422 | } | ||
1423 | module_init(fcoe_init); | ||
1424 | |||
1425 | /** | ||
1426 | * fcoe_exit() - fcoe module unloading cleanup | ||
1427 | * | ||
1428 | * Returns 0 on success, negative on failure | ||
1429 | */ | ||
1430 | static void __exit fcoe_exit(void) | ||
1431 | { | ||
1432 | u32 idx; | ||
1433 | struct fcoe_softc *fc, *tmp; | ||
1434 | struct fcoe_percpu_s *p; | ||
1435 | struct sk_buff *skb; | ||
1436 | |||
1437 | /* | ||
1438 | * Stop all call back interfaces | ||
1439 | */ | ||
1440 | #ifdef CONFIG_HOTPLUG_CPU | ||
1441 | unregister_cpu_notifier(&fcoe_cpu_notifier); | ||
1442 | #endif /* CONFIG_HOTPLUG_CPU */ | ||
1443 | fcoe_dev_cleanup(); | ||
1444 | |||
1445 | /* | ||
1446 | * stop timer | ||
1447 | */ | ||
1448 | del_timer_sync(&fcoe_timer); | ||
1449 | |||
1450 | /* releases the associated fcoe transport for each lport */ | ||
1451 | list_for_each_entry_safe(fc, tmp, &fcoe_hostlist, list) | ||
1452 | fcoe_transport_release(fc->real_dev); | ||
1453 | |||
1454 | for (idx = 0; idx < NR_CPUS; idx++) { | ||
1455 | if (fcoe_percpu[idx]) { | ||
1456 | kthread_stop(fcoe_percpu[idx]->thread); | ||
1457 | p = fcoe_percpu[idx]; | ||
1458 | spin_lock_bh(&p->fcoe_rx_list.lock); | ||
1459 | while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL) | ||
1460 | kfree_skb(skb); | ||
1461 | spin_unlock_bh(&p->fcoe_rx_list.lock); | ||
1462 | if (fcoe_percpu[idx]->crc_eof_page) | ||
1463 | put_page(fcoe_percpu[idx]->crc_eof_page); | ||
1464 | kfree(fcoe_percpu[idx]); | ||
1465 | } | ||
1466 | } | ||
1467 | |||
1468 | /* remove sw trasnport */ | ||
1469 | fcoe_sw_exit(); | ||
1470 | |||
1471 | /* detach the transport */ | ||
1472 | fcoe_transport_exit(); | ||
1473 | } | ||
1474 | module_exit(fcoe_exit); | ||
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c index 93d1fbe4ee5d..ea4abee7a2a9 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c | |||
@@ -75,7 +75,7 @@ MODULE_PARM_DESC(max_lun, "Maximum allowed LUN. " | |||
75 | module_param_named(max_targets, max_targets, uint, S_IRUGO); | 75 | module_param_named(max_targets, max_targets, uint, S_IRUGO); |
76 | MODULE_PARM_DESC(max_targets, "Maximum allowed targets. " | 76 | MODULE_PARM_DESC(max_targets, "Maximum allowed targets. " |
77 | "[Default=" __stringify(IBMVFC_MAX_TARGETS) "]"); | 77 | "[Default=" __stringify(IBMVFC_MAX_TARGETS) "]"); |
78 | module_param_named(disc_threads, disc_threads, uint, S_IRUGO | S_IWUSR); | 78 | module_param_named(disc_threads, disc_threads, uint, S_IRUGO); |
79 | MODULE_PARM_DESC(disc_threads, "Number of device discovery threads to use. " | 79 | MODULE_PARM_DESC(disc_threads, "Number of device discovery threads to use. " |
80 | "[Default=" __stringify(IBMVFC_MAX_DISC_THREADS) "]"); | 80 | "[Default=" __stringify(IBMVFC_MAX_DISC_THREADS) "]"); |
81 | module_param_named(debug, ibmvfc_debug, uint, S_IRUGO | S_IWUSR); | 81 | module_param_named(debug, ibmvfc_debug, uint, S_IRUGO | S_IWUSR); |
@@ -640,6 +640,7 @@ static void ibmvfc_release_crq_queue(struct ibmvfc_host *vhost) | |||
640 | 640 | ||
641 | ibmvfc_dbg(vhost, "Releasing CRQ\n"); | 641 | ibmvfc_dbg(vhost, "Releasing CRQ\n"); |
642 | free_irq(vdev->irq, vhost); | 642 | free_irq(vdev->irq, vhost); |
643 | tasklet_kill(&vhost->tasklet); | ||
643 | do { | 644 | do { |
644 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); | 645 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); |
645 | } while (rc == H_BUSY || H_IS_LONG_BUSY(rc)); | 646 | } while (rc == H_BUSY || H_IS_LONG_BUSY(rc)); |
@@ -2699,6 +2700,25 @@ static struct ibmvfc_crq *ibmvfc_next_crq(struct ibmvfc_host *vhost) | |||
2699 | static irqreturn_t ibmvfc_interrupt(int irq, void *dev_instance) | 2700 | static irqreturn_t ibmvfc_interrupt(int irq, void *dev_instance) |
2700 | { | 2701 | { |
2701 | struct ibmvfc_host *vhost = (struct ibmvfc_host *)dev_instance; | 2702 | struct ibmvfc_host *vhost = (struct ibmvfc_host *)dev_instance; |
2703 | unsigned long flags; | ||
2704 | |||
2705 | spin_lock_irqsave(vhost->host->host_lock, flags); | ||
2706 | vio_disable_interrupts(to_vio_dev(vhost->dev)); | ||
2707 | tasklet_schedule(&vhost->tasklet); | ||
2708 | spin_unlock_irqrestore(vhost->host->host_lock, flags); | ||
2709 | return IRQ_HANDLED; | ||
2710 | } | ||
2711 | |||
2712 | /** | ||
2713 | * ibmvfc_tasklet - Interrupt handler tasklet | ||
2714 | * @data: ibmvfc host struct | ||
2715 | * | ||
2716 | * Returns: | ||
2717 | * Nothing | ||
2718 | **/ | ||
2719 | static void ibmvfc_tasklet(void *data) | ||
2720 | { | ||
2721 | struct ibmvfc_host *vhost = data; | ||
2702 | struct vio_dev *vdev = to_vio_dev(vhost->dev); | 2722 | struct vio_dev *vdev = to_vio_dev(vhost->dev); |
2703 | struct ibmvfc_crq *crq; | 2723 | struct ibmvfc_crq *crq; |
2704 | struct ibmvfc_async_crq *async; | 2724 | struct ibmvfc_async_crq *async; |
@@ -2706,7 +2726,6 @@ static irqreturn_t ibmvfc_interrupt(int irq, void *dev_instance) | |||
2706 | int done = 0; | 2726 | int done = 0; |
2707 | 2727 | ||
2708 | spin_lock_irqsave(vhost->host->host_lock, flags); | 2728 | spin_lock_irqsave(vhost->host->host_lock, flags); |
2709 | vio_disable_interrupts(to_vio_dev(vhost->dev)); | ||
2710 | while (!done) { | 2729 | while (!done) { |
2711 | /* Pull all the valid messages off the CRQ */ | 2730 | /* Pull all the valid messages off the CRQ */ |
2712 | while ((crq = ibmvfc_next_crq(vhost)) != NULL) { | 2731 | while ((crq = ibmvfc_next_crq(vhost)) != NULL) { |
@@ -2734,7 +2753,6 @@ static irqreturn_t ibmvfc_interrupt(int irq, void *dev_instance) | |||
2734 | } | 2753 | } |
2735 | 2754 | ||
2736 | spin_unlock_irqrestore(vhost->host->host_lock, flags); | 2755 | spin_unlock_irqrestore(vhost->host->host_lock, flags); |
2737 | return IRQ_HANDLED; | ||
2738 | } | 2756 | } |
2739 | 2757 | ||
2740 | /** | 2758 | /** |
@@ -3105,6 +3123,7 @@ static void ibmvfc_tgt_adisc_done(struct ibmvfc_event *evt) | |||
3105 | 3123 | ||
3106 | vhost->discovery_threads--; | 3124 | vhost->discovery_threads--; |
3107 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); | 3125 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); |
3126 | del_timer(&tgt->timer); | ||
3108 | 3127 | ||
3109 | switch (status) { | 3128 | switch (status) { |
3110 | case IBMVFC_MAD_SUCCESS: | 3129 | case IBMVFC_MAD_SUCCESS: |
@@ -3161,9 +3180,89 @@ static void ibmvfc_init_passthru(struct ibmvfc_event *evt) | |||
3161 | } | 3180 | } |
3162 | 3181 | ||
3163 | /** | 3182 | /** |
3183 | * ibmvfc_tgt_adisc_cancel_done - Completion handler when cancelling an ADISC | ||
3184 | * @evt: ibmvfc event struct | ||
3185 | * | ||
3186 | * Just cleanup this event struct. Everything else is handled by | ||
3187 | * the ADISC completion handler. If the ADISC never actually comes | ||
3188 | * back, we still have the timer running on the ADISC event struct | ||
3189 | * which will fire and cause the CRQ to get reset. | ||
3190 | * | ||
3191 | **/ | ||
3192 | static void ibmvfc_tgt_adisc_cancel_done(struct ibmvfc_event *evt) | ||
3193 | { | ||
3194 | struct ibmvfc_host *vhost = evt->vhost; | ||
3195 | struct ibmvfc_target *tgt = evt->tgt; | ||
3196 | |||
3197 | tgt_dbg(tgt, "ADISC cancel complete\n"); | ||
3198 | vhost->abort_threads--; | ||
3199 | ibmvfc_free_event(evt); | ||
3200 | kref_put(&tgt->kref, ibmvfc_release_tgt); | ||
3201 | wake_up(&vhost->work_wait_q); | ||
3202 | } | ||
3203 | |||
3204 | /** | ||
3205 | * ibmvfc_adisc_timeout - Handle an ADISC timeout | ||
3206 | * @tgt: ibmvfc target struct | ||
3207 | * | ||
3208 | * If an ADISC times out, send a cancel. If the cancel times | ||
3209 | * out, reset the CRQ. When the ADISC comes back as cancelled, | ||
3210 | * log back into the target. | ||
3211 | **/ | ||
3212 | static void ibmvfc_adisc_timeout(struct ibmvfc_target *tgt) | ||
3213 | { | ||
3214 | struct ibmvfc_host *vhost = tgt->vhost; | ||
3215 | struct ibmvfc_event *evt; | ||
3216 | struct ibmvfc_tmf *tmf; | ||
3217 | unsigned long flags; | ||
3218 | int rc; | ||
3219 | |||
3220 | tgt_dbg(tgt, "ADISC timeout\n"); | ||
3221 | spin_lock_irqsave(vhost->host->host_lock, flags); | ||
3222 | if (vhost->abort_threads >= disc_threads || | ||
3223 | tgt->action != IBMVFC_TGT_ACTION_INIT_WAIT || | ||
3224 | vhost->state != IBMVFC_INITIALIZING || | ||
3225 | vhost->action != IBMVFC_HOST_ACTION_QUERY_TGTS) { | ||
3226 | spin_unlock_irqrestore(vhost->host->host_lock, flags); | ||
3227 | return; | ||
3228 | } | ||
3229 | |||
3230 | vhost->abort_threads++; | ||
3231 | kref_get(&tgt->kref); | ||
3232 | evt = ibmvfc_get_event(vhost); | ||
3233 | ibmvfc_init_event(evt, ibmvfc_tgt_adisc_cancel_done, IBMVFC_MAD_FORMAT); | ||
3234 | |||
3235 | evt->tgt = tgt; | ||
3236 | tmf = &evt->iu.tmf; | ||
3237 | memset(tmf, 0, sizeof(*tmf)); | ||
3238 | tmf->common.version = 1; | ||
3239 | tmf->common.opcode = IBMVFC_TMF_MAD; | ||
3240 | tmf->common.length = sizeof(*tmf); | ||
3241 | tmf->scsi_id = tgt->scsi_id; | ||
3242 | tmf->cancel_key = tgt->cancel_key; | ||
3243 | |||
3244 | rc = ibmvfc_send_event(evt, vhost, default_timeout); | ||
3245 | |||
3246 | if (rc) { | ||
3247 | tgt_err(tgt, "Failed to send cancel event for ADISC. rc=%d\n", rc); | ||
3248 | vhost->abort_threads--; | ||
3249 | kref_put(&tgt->kref, ibmvfc_release_tgt); | ||
3250 | __ibmvfc_reset_host(vhost); | ||
3251 | } else | ||
3252 | tgt_dbg(tgt, "Attempting to cancel ADISC\n"); | ||
3253 | spin_unlock_irqrestore(vhost->host->host_lock, flags); | ||
3254 | } | ||
3255 | |||
3256 | /** | ||
3164 | * ibmvfc_tgt_adisc - Initiate an ADISC for specified target | 3257 | * ibmvfc_tgt_adisc - Initiate an ADISC for specified target |
3165 | * @tgt: ibmvfc target struct | 3258 | * @tgt: ibmvfc target struct |
3166 | * | 3259 | * |
3260 | * When sending an ADISC we end up with two timers running. The | ||
3261 | * first timer is the timer in the ibmvfc target struct. If this | ||
3262 | * fires, we send a cancel to the target. The second timer is the | ||
3263 | * timer on the ibmvfc event for the ADISC, which is longer. If that | ||
3264 | * fires, it means the ADISC timed out and our attempt to cancel it | ||
3265 | * also failed, so we need to reset the CRQ. | ||
3167 | **/ | 3266 | **/ |
3168 | static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt) | 3267 | static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt) |
3169 | { | 3268 | { |
@@ -3184,6 +3283,7 @@ static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt) | |||
3184 | mad = &evt->iu.passthru; | 3283 | mad = &evt->iu.passthru; |
3185 | mad->iu.flags = IBMVFC_FC_ELS; | 3284 | mad->iu.flags = IBMVFC_FC_ELS; |
3186 | mad->iu.scsi_id = tgt->scsi_id; | 3285 | mad->iu.scsi_id = tgt->scsi_id; |
3286 | mad->iu.cancel_key = tgt->cancel_key; | ||
3187 | 3287 | ||
3188 | mad->fc_iu.payload[0] = IBMVFC_ADISC; | 3288 | mad->fc_iu.payload[0] = IBMVFC_ADISC; |
3189 | memcpy(&mad->fc_iu.payload[2], &vhost->login_buf->resp.port_name, | 3289 | memcpy(&mad->fc_iu.payload[2], &vhost->login_buf->resp.port_name, |
@@ -3192,9 +3292,19 @@ static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt) | |||
3192 | sizeof(vhost->login_buf->resp.node_name)); | 3292 | sizeof(vhost->login_buf->resp.node_name)); |
3193 | mad->fc_iu.payload[6] = vhost->login_buf->resp.scsi_id & 0x00ffffff; | 3293 | mad->fc_iu.payload[6] = vhost->login_buf->resp.scsi_id & 0x00ffffff; |
3194 | 3294 | ||
3295 | if (timer_pending(&tgt->timer)) | ||
3296 | mod_timer(&tgt->timer, jiffies + (IBMVFC_ADISC_TIMEOUT * HZ)); | ||
3297 | else { | ||
3298 | tgt->timer.data = (unsigned long) tgt; | ||
3299 | tgt->timer.expires = jiffies + (IBMVFC_ADISC_TIMEOUT * HZ); | ||
3300 | tgt->timer.function = (void (*)(unsigned long))ibmvfc_adisc_timeout; | ||
3301 | add_timer(&tgt->timer); | ||
3302 | } | ||
3303 | |||
3195 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); | 3304 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); |
3196 | if (ibmvfc_send_event(evt, vhost, default_timeout)) { | 3305 | if (ibmvfc_send_event(evt, vhost, IBMVFC_ADISC_PLUS_CANCEL_TIMEOUT)) { |
3197 | vhost->discovery_threads--; | 3306 | vhost->discovery_threads--; |
3307 | del_timer(&tgt->timer); | ||
3198 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); | 3308 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); |
3199 | kref_put(&tgt->kref, ibmvfc_release_tgt); | 3309 | kref_put(&tgt->kref, ibmvfc_release_tgt); |
3200 | } else | 3310 | } else |
@@ -3322,6 +3432,8 @@ static int ibmvfc_alloc_target(struct ibmvfc_host *vhost, u64 scsi_id) | |||
3322 | tgt->new_scsi_id = scsi_id; | 3432 | tgt->new_scsi_id = scsi_id; |
3323 | tgt->vhost = vhost; | 3433 | tgt->vhost = vhost; |
3324 | tgt->need_login = 1; | 3434 | tgt->need_login = 1; |
3435 | tgt->cancel_key = vhost->task_set++; | ||
3436 | init_timer(&tgt->timer); | ||
3325 | kref_init(&tgt->kref); | 3437 | kref_init(&tgt->kref); |
3326 | ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout); | 3438 | ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout); |
3327 | spin_lock_irqsave(vhost->host->host_lock, flags); | 3439 | spin_lock_irqsave(vhost->host->host_lock, flags); |
@@ -3716,6 +3828,7 @@ static void ibmvfc_do_work(struct ibmvfc_host *vhost) | |||
3716 | spin_unlock_irqrestore(vhost->host->host_lock, flags); | 3828 | spin_unlock_irqrestore(vhost->host->host_lock, flags); |
3717 | if (rport) | 3829 | if (rport) |
3718 | fc_remote_port_delete(rport); | 3830 | fc_remote_port_delete(rport); |
3831 | del_timer_sync(&tgt->timer); | ||
3719 | kref_put(&tgt->kref, ibmvfc_release_tgt); | 3832 | kref_put(&tgt->kref, ibmvfc_release_tgt); |
3720 | return; | 3833 | return; |
3721 | } | 3834 | } |
@@ -3859,6 +3972,8 @@ static int ibmvfc_init_crq(struct ibmvfc_host *vhost) | |||
3859 | 3972 | ||
3860 | retrc = 0; | 3973 | retrc = 0; |
3861 | 3974 | ||
3975 | tasklet_init(&vhost->tasklet, (void *)ibmvfc_tasklet, (unsigned long)vhost); | ||
3976 | |||
3862 | if ((rc = request_irq(vdev->irq, ibmvfc_interrupt, 0, IBMVFC_NAME, vhost))) { | 3977 | if ((rc = request_irq(vdev->irq, ibmvfc_interrupt, 0, IBMVFC_NAME, vhost))) { |
3863 | dev_err(dev, "Couldn't register irq 0x%x. rc=%d\n", vdev->irq, rc); | 3978 | dev_err(dev, "Couldn't register irq 0x%x. rc=%d\n", vdev->irq, rc); |
3864 | goto req_irq_failed; | 3979 | goto req_irq_failed; |
@@ -3874,6 +3989,7 @@ static int ibmvfc_init_crq(struct ibmvfc_host *vhost) | |||
3874 | return retrc; | 3989 | return retrc; |
3875 | 3990 | ||
3876 | req_irq_failed: | 3991 | req_irq_failed: |
3992 | tasklet_kill(&vhost->tasklet); | ||
3877 | do { | 3993 | do { |
3878 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); | 3994 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); |
3879 | } while (rc == H_BUSY || H_IS_LONG_BUSY(rc)); | 3995 | } while (rc == H_BUSY || H_IS_LONG_BUSY(rc)); |
@@ -4040,6 +4156,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id) | |||
4040 | vhost->dev = dev; | 4156 | vhost->dev = dev; |
4041 | vhost->partition_number = -1; | 4157 | vhost->partition_number = -1; |
4042 | vhost->log_level = log_level; | 4158 | vhost->log_level = log_level; |
4159 | vhost->task_set = 1; | ||
4043 | strcpy(vhost->partition_name, "UNKNOWN"); | 4160 | strcpy(vhost->partition_name, "UNKNOWN"); |
4044 | init_waitqueue_head(&vhost->work_wait_q); | 4161 | init_waitqueue_head(&vhost->work_wait_q); |
4045 | init_waitqueue_head(&vhost->init_wait_q); | 4162 | init_waitqueue_head(&vhost->init_wait_q); |
@@ -4174,6 +4291,7 @@ static struct fc_function_template ibmvfc_transport_functions = { | |||
4174 | .show_host_supported_classes = 1, | 4291 | .show_host_supported_classes = 1, |
4175 | .show_host_port_type = 1, | 4292 | .show_host_port_type = 1, |
4176 | .show_host_port_id = 1, | 4293 | .show_host_port_id = 1, |
4294 | .show_host_maxframe_size = 1, | ||
4177 | 4295 | ||
4178 | .get_host_port_state = ibmvfc_get_host_port_state, | 4296 | .get_host_port_state = ibmvfc_get_host_port_state, |
4179 | .show_host_port_state = 1, | 4297 | .show_host_port_state = 1, |
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h index b21e071b9862..ca1dcf7a7568 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.h +++ b/drivers/scsi/ibmvscsi/ibmvfc.h | |||
@@ -29,10 +29,14 @@ | |||
29 | #include "viosrp.h" | 29 | #include "viosrp.h" |
30 | 30 | ||
31 | #define IBMVFC_NAME "ibmvfc" | 31 | #define IBMVFC_NAME "ibmvfc" |
32 | #define IBMVFC_DRIVER_VERSION "1.0.4" | 32 | #define IBMVFC_DRIVER_VERSION "1.0.5" |
33 | #define IBMVFC_DRIVER_DATE "(November 14, 2008)" | 33 | #define IBMVFC_DRIVER_DATE "(March 19, 2009)" |
34 | 34 | ||
35 | #define IBMVFC_DEFAULT_TIMEOUT 60 | 35 | #define IBMVFC_DEFAULT_TIMEOUT 60 |
36 | #define IBMVFC_ADISC_CANCEL_TIMEOUT 45 | ||
37 | #define IBMVFC_ADISC_TIMEOUT 15 | ||
38 | #define IBMVFC_ADISC_PLUS_CANCEL_TIMEOUT \ | ||
39 | (IBMVFC_ADISC_TIMEOUT + IBMVFC_ADISC_CANCEL_TIMEOUT) | ||
36 | #define IBMVFC_INIT_TIMEOUT 120 | 40 | #define IBMVFC_INIT_TIMEOUT 120 |
37 | #define IBMVFC_MAX_REQUESTS_DEFAULT 100 | 41 | #define IBMVFC_MAX_REQUESTS_DEFAULT 100 |
38 | 42 | ||
@@ -53,9 +57,9 @@ | |||
53 | * Ensure we have resources for ERP and initialization: | 57 | * Ensure we have resources for ERP and initialization: |
54 | * 1 for ERP | 58 | * 1 for ERP |
55 | * 1 for initialization | 59 | * 1 for initialization |
56 | * 1 for each discovery thread | 60 | * 2 for each discovery thread |
57 | */ | 61 | */ |
58 | #define IBMVFC_NUM_INTERNAL_REQ (1 + 1 + disc_threads) | 62 | #define IBMVFC_NUM_INTERNAL_REQ (1 + 1 + (disc_threads * 2)) |
59 | 63 | ||
60 | #define IBMVFC_MAD_SUCCESS 0x00 | 64 | #define IBMVFC_MAD_SUCCESS 0x00 |
61 | #define IBMVFC_MAD_NOT_SUPPORTED 0xF1 | 65 | #define IBMVFC_MAD_NOT_SUPPORTED 0xF1 |
@@ -585,10 +589,12 @@ struct ibmvfc_target { | |||
585 | enum ibmvfc_target_action action; | 589 | enum ibmvfc_target_action action; |
586 | int need_login; | 590 | int need_login; |
587 | int init_retries; | 591 | int init_retries; |
592 | u32 cancel_key; | ||
588 | struct ibmvfc_service_parms service_parms; | 593 | struct ibmvfc_service_parms service_parms; |
589 | struct ibmvfc_service_parms service_parms_change; | 594 | struct ibmvfc_service_parms service_parms_change; |
590 | struct fc_rport_identifiers ids; | 595 | struct fc_rport_identifiers ids; |
591 | void (*job_step) (struct ibmvfc_target *); | 596 | void (*job_step) (struct ibmvfc_target *); |
597 | struct timer_list timer; | ||
592 | struct kref kref; | 598 | struct kref kref; |
593 | }; | 599 | }; |
594 | 600 | ||
@@ -672,6 +678,7 @@ struct ibmvfc_host { | |||
672 | int task_set; | 678 | int task_set; |
673 | int init_retries; | 679 | int init_retries; |
674 | int discovery_threads; | 680 | int discovery_threads; |
681 | int abort_threads; | ||
675 | int client_migrated; | 682 | int client_migrated; |
676 | int reinit; | 683 | int reinit; |
677 | int delay_init; | 684 | int delay_init; |
@@ -684,6 +691,7 @@ struct ibmvfc_host { | |||
684 | char partition_name[97]; | 691 | char partition_name[97]; |
685 | void (*job_step) (struct ibmvfc_host *); | 692 | void (*job_step) (struct ibmvfc_host *); |
686 | struct task_struct *work_thread; | 693 | struct task_struct *work_thread; |
694 | struct tasklet_struct tasklet; | ||
687 | wait_queue_head_t init_wait_q; | 695 | wait_queue_head_t init_wait_q; |
688 | wait_queue_head_t work_wait_q; | 696 | wait_queue_head_t work_wait_q; |
689 | }; | 697 | }; |
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c index a5725f3b7ce1..f555ae99ad40 100644 --- a/drivers/scsi/libfc/fc_fcp.c +++ b/drivers/scsi/libfc/fc_fcp.c | |||
@@ -41,7 +41,7 @@ | |||
41 | 41 | ||
42 | MODULE_AUTHOR("Open-FCoE.org"); | 42 | MODULE_AUTHOR("Open-FCoE.org"); |
43 | MODULE_DESCRIPTION("libfc"); | 43 | MODULE_DESCRIPTION("libfc"); |
44 | MODULE_LICENSE("GPL"); | 44 | MODULE_LICENSE("GPL v2"); |
45 | 45 | ||
46 | static int fc_fcp_debug; | 46 | static int fc_fcp_debug; |
47 | 47 | ||
@@ -407,10 +407,12 @@ static void fc_fcp_recv_data(struct fc_fcp_pkt *fsp, struct fc_frame *fp) | |||
407 | 407 | ||
408 | if (~crc != le32_to_cpu(fr_crc(fp))) { | 408 | if (~crc != le32_to_cpu(fr_crc(fp))) { |
409 | crc_err: | 409 | crc_err: |
410 | stats = lp->dev_stats[smp_processor_id()]; | 410 | stats = fc_lport_get_stats(lp); |
411 | stats->ErrorFrames++; | 411 | stats->ErrorFrames++; |
412 | /* FIXME - per cpu count, not total count! */ | ||
412 | if (stats->InvalidCRCCount++ < 5) | 413 | if (stats->InvalidCRCCount++ < 5) |
413 | FC_DBG("CRC error on data frame\n"); | 414 | printk(KERN_WARNING "CRC error on data frame for port (%6x)\n", |
415 | fc_host_port_id(lp->host)); | ||
414 | /* | 416 | /* |
415 | * Assume the frame is total garbage. | 417 | * Assume the frame is total garbage. |
416 | * We may have copied it over the good part | 418 | * We may have copied it over the good part |
@@ -1752,7 +1754,7 @@ int fc_queuecommand(struct scsi_cmnd *sc_cmd, void (*done)(struct scsi_cmnd *)) | |||
1752 | /* | 1754 | /* |
1753 | * setup the data direction | 1755 | * setup the data direction |
1754 | */ | 1756 | */ |
1755 | stats = lp->dev_stats[smp_processor_id()]; | 1757 | stats = fc_lport_get_stats(lp); |
1756 | if (sc_cmd->sc_data_direction == DMA_FROM_DEVICE) { | 1758 | if (sc_cmd->sc_data_direction == DMA_FROM_DEVICE) { |
1757 | fsp->req_flags = FC_SRB_READ; | 1759 | fsp->req_flags = FC_SRB_READ; |
1758 | stats->InputRequests++; | 1760 | stats->InputRequests++; |
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c index 7ef44501ecc6..b8178ef398d7 100644 --- a/drivers/scsi/libfc/fc_lport.c +++ b/drivers/scsi/libfc/fc_lport.c | |||
@@ -267,10 +267,10 @@ EXPORT_SYMBOL(fc_get_host_speed); | |||
267 | 267 | ||
268 | struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost) | 268 | struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost) |
269 | { | 269 | { |
270 | int i; | ||
271 | struct fc_host_statistics *fcoe_stats; | 270 | struct fc_host_statistics *fcoe_stats; |
272 | struct fc_lport *lp = shost_priv(shost); | 271 | struct fc_lport *lp = shost_priv(shost); |
273 | struct timespec v0, v1; | 272 | struct timespec v0, v1; |
273 | unsigned int cpu; | ||
274 | 274 | ||
275 | fcoe_stats = &lp->host_stats; | 275 | fcoe_stats = &lp->host_stats; |
276 | memset(fcoe_stats, 0, sizeof(struct fc_host_statistics)); | 276 | memset(fcoe_stats, 0, sizeof(struct fc_host_statistics)); |
@@ -279,10 +279,11 @@ struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost) | |||
279 | jiffies_to_timespec(lp->boot_time, &v1); | 279 | jiffies_to_timespec(lp->boot_time, &v1); |
280 | fcoe_stats->seconds_since_last_reset = (v0.tv_sec - v1.tv_sec); | 280 | fcoe_stats->seconds_since_last_reset = (v0.tv_sec - v1.tv_sec); |
281 | 281 | ||
282 | for_each_online_cpu(i) { | 282 | for_each_possible_cpu(cpu) { |
283 | struct fcoe_dev_stats *stats = lp->dev_stats[i]; | 283 | struct fcoe_dev_stats *stats; |
284 | if (stats == NULL) | 284 | |
285 | continue; | 285 | stats = per_cpu_ptr(lp->dev_stats, cpu); |
286 | |||
286 | fcoe_stats->tx_frames += stats->TxFrames; | 287 | fcoe_stats->tx_frames += stats->TxFrames; |
287 | fcoe_stats->tx_words += stats->TxWords; | 288 | fcoe_stats->tx_words += stats->TxWords; |
288 | fcoe_stats->rx_frames += stats->RxFrames; | 289 | fcoe_stats->rx_frames += stats->RxFrames; |
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index dfaa8adf099e..689628359169 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c | |||
@@ -1999,8 +1999,10 @@ iscsi_pool_init(struct iscsi_pool *q, int max, void ***items, int item_size) | |||
1999 | 1999 | ||
2000 | q->queue = kfifo_init((void*)q->pool, max * sizeof(void*), | 2000 | q->queue = kfifo_init((void*)q->pool, max * sizeof(void*), |
2001 | GFP_KERNEL, NULL); | 2001 | GFP_KERNEL, NULL); |
2002 | if (q->queue == ERR_PTR(-ENOMEM)) | 2002 | if (IS_ERR(q->queue)) { |
2003 | q->queue = NULL; | ||
2003 | goto enomem; | 2004 | goto enomem; |
2005 | } | ||
2004 | 2006 | ||
2005 | for (i = 0; i < max; i++) { | 2007 | for (i = 0; i < max; i++) { |
2006 | q->pool[i] = kzalloc(item_size, GFP_KERNEL); | 2008 | q->pool[i] = kzalloc(item_size, GFP_KERNEL); |
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c index 552f58b655d1..2a5f0777148d 100644 --- a/drivers/scsi/osd/osd_initiator.c +++ b/drivers/scsi/osd/osd_initiator.c | |||
@@ -338,20 +338,6 @@ struct osd_request *osd_start_request(struct osd_dev *dev, gfp_t gfp) | |||
338 | } | 338 | } |
339 | EXPORT_SYMBOL(osd_start_request); | 339 | EXPORT_SYMBOL(osd_start_request); |
340 | 340 | ||
341 | /* | ||
342 | * If osd_finalize_request() was called but the request was not executed through | ||
343 | * the block layer, then we must release BIOs. | ||
344 | */ | ||
345 | static void _abort_unexecuted_bios(struct request *rq) | ||
346 | { | ||
347 | struct bio *bio; | ||
348 | |||
349 | while ((bio = rq->bio) != NULL) { | ||
350 | rq->bio = bio->bi_next; | ||
351 | bio_endio(bio, 0); | ||
352 | } | ||
353 | } | ||
354 | |||
355 | static void _osd_free_seg(struct osd_request *or __unused, | 341 | static void _osd_free_seg(struct osd_request *or __unused, |
356 | struct _osd_req_data_segment *seg) | 342 | struct _osd_req_data_segment *seg) |
357 | { | 343 | { |
@@ -363,9 +349,30 @@ static void _osd_free_seg(struct osd_request *or __unused, | |||
363 | seg->alloc_size = 0; | 349 | seg->alloc_size = 0; |
364 | } | 350 | } |
365 | 351 | ||
352 | static void _put_request(struct request *rq , bool is_async) | ||
353 | { | ||
354 | if (is_async) { | ||
355 | WARN_ON(rq->bio); | ||
356 | __blk_put_request(rq->q, rq); | ||
357 | } else { | ||
358 | /* | ||
359 | * If osd_finalize_request() was called but the request was not | ||
360 | * executed through the block layer, then we must release BIOs. | ||
361 | * TODO: Keep error code in or->async_error. Need to audit all | ||
362 | * code paths. | ||
363 | */ | ||
364 | if (unlikely(rq->bio)) | ||
365 | blk_end_request(rq, -ENOMEM, blk_rq_bytes(rq)); | ||
366 | else | ||
367 | blk_put_request(rq); | ||
368 | } | ||
369 | } | ||
370 | |||
366 | void osd_end_request(struct osd_request *or) | 371 | void osd_end_request(struct osd_request *or) |
367 | { | 372 | { |
368 | struct request *rq = or->request; | 373 | struct request *rq = or->request; |
374 | /* IMPORTANT: make sure this agrees with osd_execute_request_async */ | ||
375 | bool is_async = (or->request->end_io_data == or); | ||
369 | 376 | ||
370 | _osd_free_seg(or, &or->set_attr); | 377 | _osd_free_seg(or, &or->set_attr); |
371 | _osd_free_seg(or, &or->enc_get_attr); | 378 | _osd_free_seg(or, &or->enc_get_attr); |
@@ -373,12 +380,11 @@ void osd_end_request(struct osd_request *or) | |||
373 | 380 | ||
374 | if (rq) { | 381 | if (rq) { |
375 | if (rq->next_rq) { | 382 | if (rq->next_rq) { |
376 | _abort_unexecuted_bios(rq->next_rq); | 383 | _put_request(rq->next_rq, is_async); |
377 | blk_put_request(rq->next_rq); | 384 | rq->next_rq = NULL; |
378 | } | 385 | } |
379 | 386 | ||
380 | _abort_unexecuted_bios(rq); | 387 | _put_request(rq, is_async); |
381 | blk_put_request(rq); | ||
382 | } | 388 | } |
383 | _osd_request_free(or); | 389 | _osd_request_free(or); |
384 | } | 390 | } |
diff --git a/drivers/scsi/osd/osd_uld.c b/drivers/scsi/osd/osd_uld.c index f8b1a749958b..f644c9571eab 100644 --- a/drivers/scsi/osd/osd_uld.c +++ b/drivers/scsi/osd/osd_uld.c | |||
@@ -345,10 +345,6 @@ static int osd_probe(struct device *dev) | |||
345 | } | 345 | } |
346 | 346 | ||
347 | dev_set_drvdata(oud->class_member, oud); | 347 | dev_set_drvdata(oud->class_member, oud); |
348 | error = sysfs_create_link(&scsi_device->sdev_gendev.kobj, | ||
349 | &oud->class_member->kobj, osd_symlink); | ||
350 | if (error) | ||
351 | OSD_ERR("warning: unable to make symlink\n"); | ||
352 | 348 | ||
353 | OSD_INFO("osd_probe %s\n", disk->disk_name); | 349 | OSD_INFO("osd_probe %s\n", disk->disk_name); |
354 | return 0; | 350 | return 0; |
@@ -377,8 +373,6 @@ static int osd_remove(struct device *dev) | |||
377 | scsi_device); | 373 | scsi_device); |
378 | } | 374 | } |
379 | 375 | ||
380 | sysfs_remove_link(&oud->od.scsi_device->sdev_gendev.kobj, osd_symlink); | ||
381 | |||
382 | if (oud->class_member) | 376 | if (oud->class_member) |
383 | device_destroy(osd_sysfs_class, | 377 | device_destroy(osd_sysfs_class, |
384 | MKDEV(SCSI_OSD_MAJOR, oud->minor)); | 378 | MKDEV(SCSI_OSD_MAJOR, oud->minor)); |
diff --git a/drivers/scsi/ql1040_fw.h b/drivers/scsi/ql1040_fw.h deleted file mode 100644 index aaf9284a8b7d..000000000000 --- a/drivers/scsi/ql1040_fw.h +++ /dev/null | |||
@@ -1,2130 +0,0 @@ | |||
1 | /************************************************************************** | ||
2 | * QLOGIC LINUX SOFTWARE | ||
3 | * | ||
4 | * Copyright (C) 2004 QLogic Corporation | ||
5 | * (www.qlogic.com) | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2, or (at your option) any | ||
10 | * later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License for more details. | ||
16 | * | ||
17 | *************************************************************************/ | ||
18 | |||
19 | /************************************************************************ | ||
20 | * * | ||
21 | * --- ISP1040 Initiator/Target Firmware --- * | ||
22 | * 32 LUN Support * | ||
23 | * * | ||
24 | ************************************************************************ | ||
25 | */ | ||
26 | |||
27 | /* | ||
28 | * Firmware Version 7.65.06 (14:38 Jan 07, 2002) | ||
29 | */ | ||
30 | |||
31 | static unsigned char firmware_version[] = {7,65,6}; | ||
32 | |||
33 | #define FW_VERSION_STRING "7.65.06" | ||
34 | |||
35 | static unsigned short risc_code_addr01 = 0x1000 ; | ||
36 | |||
37 | static unsigned short risc_code01[] = { | ||
38 | 0x0078, 0x103a, 0x0000, 0x4158, 0x0000, 0x2043, 0x4f50, 0x5952, | ||
39 | 0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943, | ||
40 | 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, | ||
41 | 0x3130, 0x3230, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172, | ||
42 | 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x372e, 0x3635, | ||
43 | 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, | ||
44 | 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, | ||
45 | 0x3031, 0x2024, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, | ||
46 | 0x1045, 0x0038, 0x104b, 0x0078, 0x1047, 0x0028, 0x104b, 0x20b9, | ||
47 | 0x1212, 0x0078, 0x104d, 0x20b9, 0x2222, 0x20c1, 0x0008, 0x2071, | ||
48 | 0x0010, 0x70c3, 0x0004, 0x20c9, 0x78ff, 0x2089, 0x1186, 0x70c7, | ||
49 | 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0007, 0x3f00, | ||
50 | 0x70d6, 0x20c1, 0x0008, 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100, | ||
51 | 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc, | ||
52 | 0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040, | ||
53 | 0x10bf, 0xa386, 0x000f, 0x0040, 0x1085, 0x2c6a, 0x2a5a, 0x20c1, | ||
54 | 0x0000, 0x2019, 0x000f, 0x0078, 0x1065, 0x2c6a, 0x2a5a, 0x20c1, | ||
55 | 0x0008, 0x2009, 0x7fff, 0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc, | ||
56 | 0x3fff, 0x2734, 0x203b, 0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040, | ||
57 | 0x10a9, 0x284a, 0x263a, 0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134, | ||
58 | 0x200b, 0x5050, 0x2114, 0xa286, 0x5050, 0x0040, 0x10aa, 0x0078, | ||
59 | 0x118e, 0x284a, 0x263a, 0x98c0, 0xa188, 0x1000, 0x212c, 0x200b, | ||
60 | 0xa5a5, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10bc, 0x250a, 0xa18a, | ||
61 | 0x1000, 0x98c1, 0x0078, 0x10c1, 0x250a, 0x0078, 0x10c1, 0x2c6a, | ||
62 | 0x2a5a, 0x2130, 0xa18a, 0x0040, 0x2128, 0xa1a2, 0x5200, 0x8424, | ||
63 | 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0xa192, 0x7900, 0x2009, | ||
64 | 0x0000, 0x2001, 0x0031, 0x1078, 0x1d26, 0x2218, 0x2079, 0x5200, | ||
65 | 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, | ||
66 | 0x00c0, 0x10dc, 0x7ef2, 0x8528, 0x7de6, 0x7cea, 0x7bee, 0x7883, | ||
67 | 0x0000, 0x2031, 0x0030, 0x78cf, 0x0101, 0x780b, 0x0002, 0x780f, | ||
68 | 0x0002, 0x784f, 0x0003, 0x2069, 0x5240, 0x2001, 0x04fd, 0x2004, | ||
69 | 0xa082, 0x0005, 0x0048, 0x1104, 0x0038, 0x1100, 0x0078, 0x1108, | ||
70 | 0x681b, 0x003c, 0x0078, 0x110a, 0x00a8, 0x1108, 0x681b, 0x003c, | ||
71 | 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, 0x680f, 0x0008, | ||
72 | 0x6813, 0x0005, 0x6823, 0x0000, 0x6827, 0x0006, 0x6817, 0x0008, | ||
73 | 0x682b, 0x0000, 0x681f, 0x0019, 0x2069, 0x5480, 0x2011, 0x0020, | ||
74 | 0x2009, 0x0010, 0x680b, 0x080c, 0x680f, 0x0019, 0x6803, 0xfd00, | ||
75 | 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, | ||
76 | 0x8109, 0x00c0, 0x1122, 0x2069, 0x5500, 0x2009, 0x0002, 0x20a9, | ||
77 | 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bf0, 0xa386, 0xfeff, | ||
78 | 0x00c0, 0x1148, 0x6817, 0x0100, 0x681f, 0x0064, 0x0078, 0x114c, | ||
79 | 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x0070, 0x1152, | ||
80 | 0x0078, 0x1139, 0x8109, 0x00c0, 0x1137, 0x1078, 0x22a7, 0x1078, | ||
81 | 0x493d, 0x1078, 0x19b5, 0x1078, 0x4e33, 0x3200, 0xa085, 0x000d, | ||
82 | 0x2090, 0x70c3, 0x0000, 0x0090, 0x116c, 0x70c0, 0xa086, 0x0002, | ||
83 | 0x00c0, 0x116c, 0x1078, 0x1284, 0x1078, 0x1196, 0x78cc, 0xa005, | ||
84 | 0x00c0, 0x117a, 0x1078, 0x1d4f, 0x0010, 0x1180, 0x0068, 0x1180, | ||
85 | 0x1078, 0x2186, 0x0010, 0x1180, 0x0068, 0x1180, 0x1078, 0x1ab9, | ||
86 | 0x00e0, 0x116c, 0x1078, 0x4cba, 0x0078, 0x116c, 0x118e, 0x1190, | ||
87 | 0x24ac, 0x24ac, 0x49be, 0x49be, 0x24ac, 0x24ac, 0x0078, 0x118e, | ||
88 | 0x0078, 0x1190, 0x0078, 0x1192, 0x0078, 0x1194, 0x0068, 0x1201, | ||
89 | 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1201, 0x7814, | ||
90 | 0xa005, 0x00c0, 0x11a7, 0x0010, 0x1202, 0x0078, 0x1201, 0x2009, | ||
91 | 0x525b, 0x2104, 0xa005, 0x00c0, 0x1201, 0x2009, 0x5264, 0x200b, | ||
92 | 0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11cc, 0x7816, 0x2009, | ||
93 | 0x5262, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca, | ||
94 | 0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce, | ||
95 | 0x1078, 0x199a, 0x0078, 0x11ff, 0x7814, 0xa086, 0x0018, 0x00c0, | ||
96 | 0x11d3, 0x1078, 0x1678, 0x7817, 0x0000, 0x2009, 0x5262, 0x2104, | ||
97 | 0xa065, 0x0040, 0x11ef, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a17, | ||
98 | 0x0c7f, 0x609f, 0x0000, 0x1078, 0x174e, 0x2009, 0x000c, 0x6007, | ||
99 | 0x0103, 0x1078, 0x1976, 0x00c0, 0x11fb, 0x1078, 0x199a, 0x2009, | ||
100 | 0x5262, 0x200b, 0x0000, 0x2009, 0x525c, 0x2104, 0x200b, 0x0000, | ||
101 | 0xa005, 0x0040, 0x11ff, 0x2001, 0x4005, 0x0078, 0x1286, 0x0078, | ||
102 | 0x1284, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000, | ||
103 | 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1252, 0x2038, | ||
104 | 0x0079, 0x1212, 0x1284, 0x12e5, 0x12a9, 0x12fe, 0x130d, 0x1313, | ||
105 | 0x12a0, 0x1766, 0x1317, 0x1298, 0x12ad, 0x12af, 0x12b1, 0x12b3, | ||
106 | 0x176b, 0x1298, 0x1329, 0x1365, 0x1690, 0x1760, 0x12b5, 0x15af, | ||
107 | 0x15cb, 0x15e7, 0x1612, 0x1568, 0x1576, 0x158a, 0x159e, 0x13e9, | ||
108 | 0x1298, 0x1397, 0x139d, 0x13a2, 0x13a7, 0x13ad, 0x13b2, 0x13b7, | ||
109 | 0x13bc, 0x13c1, 0x13c5, 0x13da, 0x13e6, 0x1298, 0x1298, 0x1298, | ||
110 | 0x1298, 0x13f5, 0x13fe, 0x140d, 0x1451, 0x145b, 0x1462, 0x14a8, | ||
111 | 0x14b7, 0x14c6, 0x14d8, 0x1548, 0x1558, 0x1298, 0x1298, 0x1298, | ||
112 | 0x1298, 0x155d, 0xa0bc, 0xffa0, 0x00c0, 0x1298, 0x2038, 0xa084, | ||
113 | 0x001f, 0x0079, 0x125b, 0x17a4, 0x17a7, 0x17b7, 0x1298, 0x1298, | ||
114 | 0x1931, 0x194e, 0x1298, 0x1298, 0x1298, 0x1952, 0x195a, 0x1298, | ||
115 | 0x1298, 0x1298, 0x1298, 0x12db, 0x12f4, 0x131f, 0x135b, 0x1686, | ||
116 | 0x1782, 0x1796, 0x1298, 0x1847, 0x1960, 0x190d, 0x1917, 0x191b, | ||
117 | 0x1929, 0x1298, 0x1298, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, | ||
118 | 0x1286, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, | ||
119 | 0x1287, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x00e0, | ||
120 | 0x128f, 0x00e0, 0x1291, 0x0068, 0x1291, 0x2091, 0x4080, 0x007c, | ||
121 | 0x70c3, 0x4001, 0x0078, 0x1287, 0x70c3, 0x4006, 0x0078, 0x1287, | ||
122 | 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078, | ||
123 | 0x1284, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x1284, 0x0078, | ||
124 | 0x1284, 0x0078, 0x1284, 0x0078, 0x1284, 0x2091, 0x8000, 0x70c3, | ||
125 | 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, | ||
126 | 0x0007, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031, | ||
127 | 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, 0x0470, 0x2061, | ||
128 | 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, 0x5000, 0x2091, | ||
129 | 0x4080, 0x0078, 0x0455, 0x1078, 0x1bc4, 0x00c0, 0x129c, 0x75d8, | ||
130 | 0x74dc, 0x75da, 0x74de, 0x0078, 0x12e8, 0x2029, 0x0000, 0x2520, | ||
131 | 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1afe, 0x0040, 0x1284, | ||
132 | 0x70c3, 0x4002, 0x0078, 0x1284, 0x1078, 0x1bc4, 0x00c0, 0x129c, | ||
133 | 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1301, 0x2029, 0x0000, | ||
134 | 0x2520, 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1b5e, 0x0040, | ||
135 | 0x1284, 0x70c3, 0x4002, 0x0078, 0x1284, 0x71c4, 0x70c8, 0x2114, | ||
136 | 0x200a, 0x0078, 0x1282, 0x71c4, 0x2114, 0x0078, 0x1282, 0x70c7, | ||
137 | 0x0007, 0x70cb, 0x0041, 0x70cf, 0x0006, 0x0078, 0x1284, 0x1078, | ||
138 | 0x1bc4, 0x00c0, 0x129c, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, | ||
139 | 0x132c, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, | ||
140 | 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x1355, 0xa40a, | ||
141 | 0x0040, 0x133c, 0x00c8, 0x1346, 0x8001, 0x7892, 0xa084, 0xfc00, | ||
142 | 0x0040, 0x134a, 0x78cc, 0xa085, 0x0001, 0x78ce, 0x2001, 0x4005, | ||
143 | 0x0078, 0x1286, 0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x7c96, 0x78cc, | ||
144 | 0xa084, 0xfffc, 0x78ce, 0x0078, 0x1359, 0x78cc, 0xa085, 0x0001, | ||
145 | 0x78ce, 0x0078, 0x1284, 0x1078, 0x1bc4, 0x00c0, 0x129c, 0x75d8, | ||
146 | 0x76dc, 0x75da, 0x76de, 0x0078, 0x1368, 0x2029, 0x0000, 0x2530, | ||
147 | 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, | ||
148 | 0xa005, 0x0040, 0x1391, 0xa40a, 0x0040, 0x1378, 0x00c8, 0x1382, | ||
149 | 0x8001, 0x78ae, 0xa084, 0xfc00, 0x0040, 0x1386, 0x78cc, 0xa085, | ||
150 | 0x0100, 0x78ce, 0x2001, 0x4005, 0x0078, 0x1286, 0x7ab6, 0x7bba, | ||
151 | 0x7dbe, 0x7ec2, 0x7cb2, 0x78cc, 0xa084, 0xfcff, 0x78ce, 0x0078, | ||
152 | 0x1395, 0x78cc, 0xa085, 0x0100, 0x78ce, 0x0078, 0x1284, 0x2009, | ||
153 | 0x5261, 0x210c, 0x7aec, 0x0078, 0x1282, 0x2009, 0x5241, 0x210c, | ||
154 | 0x0078, 0x1283, 0x2009, 0x5242, 0x210c, 0x0078, 0x1283, 0x2061, | ||
155 | 0x5240, 0x610c, 0x6210, 0x0078, 0x1282, 0x2009, 0x5245, 0x210c, | ||
156 | 0x0078, 0x1283, 0x2009, 0x5246, 0x210c, 0x0078, 0x1283, 0x2009, | ||
157 | 0x5248, 0x210c, 0x0078, 0x1283, 0x2009, 0x5249, 0x210c, 0x0078, | ||
158 | 0x1283, 0x7908, 0x7a0c, 0x0078, 0x1282, 0x71c4, 0x8107, 0xa084, | ||
159 | 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x5480, 0x6a00, 0x6804, | ||
160 | 0xa084, 0x0008, 0x0040, 0x13d7, 0x6b08, 0x0078, 0x13d8, 0x6b0c, | ||
161 | 0x0078, 0x1281, 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6b1c, | ||
162 | 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x1281, 0x794c, 0x0078, | ||
163 | 0x1283, 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6908, 0x6a18, | ||
164 | 0x6b10, 0x2091, 0x8001, 0x0078, 0x1281, 0x71c4, 0xa182, 0x0010, | ||
165 | 0x00c8, 0x127c, 0x1078, 0x237f, 0x0078, 0x1281, 0x71c4, 0xa182, | ||
166 | 0x0010, 0x00c8, 0x127c, 0x2011, 0x5241, 0x2204, 0x007e, 0x2112, | ||
167 | 0x1078, 0x2338, 0x017f, 0x0078, 0x1283, 0x71c4, 0x2019, 0x0100, | ||
168 | 0x2304, 0xa082, 0x0006, 0x0048, 0x141b, 0x2011, 0x1449, 0x20a9, | ||
169 | 0x0008, 0x0078, 0x141f, 0x2011, 0x1441, 0x20a9, 0x0008, 0x2204, | ||
170 | 0xa106, 0x0040, 0x142a, 0x8210, 0x0070, 0x1428, 0x0078, 0x141f, | ||
171 | 0x0078, 0x127c, 0x2304, 0xa082, 0x0006, 0x0048, 0x1433, 0xa292, | ||
172 | 0x1449, 0x0078, 0x1435, 0xa292, 0x1441, 0x027e, 0x2011, 0x5242, | ||
173 | 0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x2344, 0x017f, 0x0078, | ||
174 | 0x1283, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032, | ||
175 | 0x004b, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0004, 0x0001, 0x0002, | ||
176 | 0x0003, 0x2061, 0x5240, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8, | ||
177 | 0x6012, 0x0078, 0x1282, 0x2061, 0x5240, 0x6114, 0x70c4, 0x6016, | ||
178 | 0x0078, 0x1283, 0x2061, 0x5240, 0x71c4, 0x2011, 0x0004, 0x601f, | ||
179 | 0x0019, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040, 0x1483, 0x2011, | ||
180 | 0x0005, 0x601f, 0x0019, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040, | ||
181 | 0x1483, 0x2011, 0x0006, 0x601f, 0x000c, 0x2019, 0x2222, 0xa186, | ||
182 | 0x003c, 0x00c0, 0x127c, 0x6018, 0x007e, 0x611a, 0x7800, 0xa084, | ||
183 | 0x0001, 0x00c0, 0x149e, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, | ||
184 | 0x0048, 0x1496, 0x0038, 0x149a, 0x0078, 0x149e, 0x0028, 0x149a, | ||
185 | 0x0078, 0x149e, 0x2019, 0x2222, 0x0078, 0x14a0, 0x2019, 0x1212, | ||
186 | 0x23b8, 0x1078, 0x2355, 0x1078, 0x4e33, 0x017f, 0x0078, 0x1283, | ||
187 | 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x127c, 0x2011, 0x5248, 0x2204, | ||
188 | 0x2112, 0x007e, 0x1078, 0x2377, 0x017f, 0x0078, 0x1283, 0x71c4, | ||
189 | 0xa182, 0x0010, 0x00c8, 0x127c, 0x2011, 0x5249, 0x2204, 0x007e, | ||
190 | 0x2112, 0x1078, 0x2366, 0x017f, 0x0078, 0x1283, 0x71c4, 0x72c8, | ||
191 | 0xa184, 0xfffd, 0x00c0, 0x127b, 0xa284, 0xfffd, 0x00c0, 0x127b, | ||
192 | 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x1282, | ||
193 | 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, | ||
194 | 0x5480, 0x2019, 0x0000, 0x72c8, 0xd2bc, 0x0040, 0x14e9, 0xa39d, | ||
195 | 0x0010, 0xd2b4, 0x0040, 0x14ee, 0xa39d, 0x0008, 0x6800, 0x007e, | ||
196 | 0xa226, 0x0040, 0x1511, 0x6a02, 0xa484, 0x2000, 0x0040, 0x14fa, | ||
197 | 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x1500, 0xa39d, 0x0008, | ||
198 | 0xa484, 0x4000, 0x0040, 0x1511, 0x810f, 0xa284, 0x4000, 0x0040, | ||
199 | 0x150d, 0x1078, 0x2399, 0x0078, 0x1511, 0x1078, 0x238b, 0x0078, | ||
200 | 0x1511, 0x72cc, 0x6808, 0xa206, 0x0040, 0x1540, 0xa2a4, 0x00ff, | ||
201 | 0x2061, 0x5240, 0x6118, 0xa186, 0x0028, 0x0040, 0x1527, 0xa186, | ||
202 | 0x0032, 0x0040, 0x152d, 0xa186, 0x003c, 0x0040, 0x1533, 0xa482, | ||
203 | 0x0064, 0x0048, 0x153d, 0x0078, 0x1537, 0xa482, 0x0050, 0x0048, | ||
204 | 0x153d, 0x0078, 0x1537, 0xa482, 0x0043, 0x0048, 0x153d, 0x71c4, | ||
205 | 0x71c6, 0x027f, 0x72ca, 0x0078, 0x127d, 0x6a0a, 0xa39d, 0x000a, | ||
206 | 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x0078, 0x1281, | ||
207 | 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, | ||
208 | 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, 0x1281, | ||
209 | 0x70c4, 0x794c, 0x784e, 0x0078, 0x1283, 0x71c4, 0x72c8, 0x73cc, | ||
210 | 0xa182, 0x0010, 0x00c8, 0x127c, 0x1078, 0x23a7, 0x0078, 0x1281, | ||
211 | 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002, | ||
212 | 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282, 0x77c4, 0x1078, | ||
213 | 0x19c5, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, | ||
214 | 0xa005, 0x0040, 0x1585, 0x1078, 0x226f, 0x2091, 0x8001, 0x2708, | ||
215 | 0x0078, 0x1282, 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6a08, | ||
216 | 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1599, 0x1078, | ||
217 | 0x226f, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282, 0x77c4, 0x2041, | ||
218 | 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, | ||
219 | 0x19d2, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, 0x1282, 0x77c4, | ||
220 | 0x72c8, 0x73cc, 0x77c6, 0x72ca, 0x73ce, 0x1078, 0x1a52, 0x00c0, | ||
221 | 0x15c7, 0x6818, 0xa005, 0x0040, 0x15c7, 0x2708, 0x1078, 0x23b7, | ||
222 | 0x00c0, 0x15c7, 0x7817, 0x0015, 0x2091, 0x8001, 0x007c, 0x2091, | ||
223 | 0x8001, 0x0078, 0x1284, 0x77c4, 0x77c6, 0x2041, 0x0021, 0x2049, | ||
224 | 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x19d2, 0x2061, | ||
225 | 0x5240, 0x606f, 0x0003, 0x6782, 0x6093, 0x000f, 0x6073, 0x0000, | ||
226 | 0x7817, 0x0016, 0x1078, 0x226f, 0x2091, 0x8001, 0x007c, 0x77c8, | ||
227 | 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2061, | ||
228 | 0x5240, 0x606f, 0x0002, 0x6073, 0x0000, 0x6782, 0x6093, 0x000f, | ||
229 | 0x7817, 0x0017, 0x1078, 0x226f, 0x2091, 0x8001, 0x2041, 0x0021, | ||
230 | 0x2049, 0x0004, 0x2051, 0x0010, 0x2091, 0x8000, 0x1078, 0x19d2, | ||
231 | 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1606, 0x2091, | ||
232 | 0x8001, 0x007c, 0x78cc, 0xa084, 0x0003, 0x00c0, 0x1636, 0x2039, | ||
233 | 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, | ||
234 | 0x19c5, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001, | ||
235 | 0x8738, 0xa784, 0x001f, 0x00c0, 0x161f, 0xa7bc, 0xff00, 0x873f, | ||
236 | 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x161f, 0x2091, 0x8000, | ||
237 | 0x2069, 0x0100, 0x6830, 0xa084, 0x0040, 0x0040, 0x165f, 0x684b, | ||
238 | 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x164c, | ||
239 | 0x0070, 0x164c, 0x0078, 0x1643, 0x684b, 0x0009, 0x20a9, 0x0014, | ||
240 | 0x6848, 0xa084, 0x0001, 0x0040, 0x1659, 0x0070, 0x1659, 0x0078, | ||
241 | 0x1650, 0x20a9, 0x00fa, 0x0070, 0x165f, 0x0078, 0x165b, 0x2079, | ||
242 | 0x5200, 0x7817, 0x0018, 0x2061, 0x5240, 0x606f, 0x0001, 0x6073, | ||
243 | 0x0000, 0x6093, 0x000f, 0x78cc, 0xa085, 0x0002, 0x78ce, 0x6808, | ||
244 | 0xa084, 0xfffd, 0x680a, 0x681b, 0x0048, 0x2091, 0x8001, 0x007c, | ||
245 | 0x78cc, 0xa084, 0xfffd, 0x78ce, 0xa084, 0x0001, 0x00c0, 0x1682, | ||
246 | 0x1078, 0x1a9c, 0x71c4, 0x71c6, 0x794a, 0x007c, 0x1078, 0x1bc4, | ||
247 | 0x00c0, 0x129c, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1693, | ||
248 | 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, | ||
249 | 0x72ce, 0x2079, 0x5200, 0x2091, 0x8000, 0x1078, 0x1980, 0x2091, | ||
250 | 0x8001, 0x0040, 0x174a, 0x20a9, 0x0005, 0x20a1, 0x5218, 0x2091, | ||
251 | 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0020, 0x1078, 0x197b, | ||
252 | 0x0040, 0x16b6, 0x1078, 0x199a, 0x0078, 0x174a, 0x6004, 0xa084, | ||
253 | 0xff00, 0x8007, 0x8009, 0x0040, 0x1719, 0x0c7e, 0x2c68, 0x2091, | ||
254 | 0x8000, 0x1078, 0x1980, 0x2091, 0x8001, 0x0040, 0x16ea, 0x2c00, | ||
255 | 0x689e, 0x8109, 0x00c0, 0x16be, 0x609f, 0x0000, 0x0c7f, 0x0c7e, | ||
256 | 0x7218, 0x731c, 0x7420, 0x7524, 0x2c68, 0x689c, 0xa065, 0x0040, | ||
257 | 0x1718, 0x2009, 0x0020, 0x1078, 0x197b, 0x00c0, 0x1701, 0x6004, | ||
258 | 0xa084, 0x00ff, 0xa086, 0x0002, 0x00c0, 0x16ea, 0x2d00, 0x6002, | ||
259 | 0x0078, 0x16d0, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a17, | ||
260 | 0x0c7f, 0x609f, 0x0000, 0x1078, 0x174e, 0x2009, 0x000c, 0x6008, | ||
261 | 0xa085, 0x0200, 0x600a, 0x1078, 0x1976, 0x1078, 0x199a, 0x0078, | ||
262 | 0x174a, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a17, 0x0c7f, | ||
263 | 0x609f, 0x0000, 0x1078, 0x174e, 0x2009, 0x000c, 0x6007, 0x0103, | ||
264 | 0x601b, 0x0003, 0x1078, 0x1976, 0x1078, 0x199a, 0x0078, 0x174a, | ||
265 | 0x0c7f, 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x2091, 0x8000, 0x7817, | ||
266 | 0x0012, 0x0e7e, 0x2071, 0x5240, 0x706f, 0x0005, 0x7073, 0x0000, | ||
267 | 0x7376, 0x727a, 0x747e, 0x7082, 0x7087, 0x0000, 0x2c00, 0x708a, | ||
268 | 0x708f, 0x0000, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0x0060, | ||
269 | 0x0040, 0x173c, 0x1078, 0x48d3, 0x0e7f, 0x6596, 0x65a6, 0x669a, | ||
270 | 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x1078, 0x226f, 0x2091, | ||
271 | 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1287, 0x20a9, 0x0005, | ||
272 | 0x2099, 0x5218, 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, | ||
273 | 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, | ||
274 | 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x1284, 0x71c4, 0x71c6, | ||
275 | 0x2168, 0x0078, 0x176d, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, | ||
276 | 0xa210, 0x8d68, 0x8109, 0x00c0, 0x176f, 0xa285, 0x0000, 0x00c0, | ||
277 | 0x177d, 0x70c3, 0x4000, 0x0078, 0x177f, 0x70c3, 0x4003, 0x70ca, | ||
278 | 0x0078, 0x1287, 0x2011, 0x5267, 0x220c, 0x70c4, 0x8003, 0x0048, | ||
279 | 0x178f, 0x1078, 0x3c51, 0xa184, 0x7fff, 0x0078, 0x1793, 0x1078, | ||
280 | 0x3c44, 0xa185, 0x8000, 0x2012, 0x0078, 0x1283, 0x71c4, 0x1078, | ||
281 | 0x3c3b, 0x6100, 0x2001, 0x5267, 0x2004, 0xa084, 0x8000, 0xa10d, | ||
282 | 0x6204, 0x6308, 0x0078, 0x1281, 0x79e4, 0x0078, 0x1283, 0x71c4, | ||
283 | 0x71c6, 0x2198, 0x20a1, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x21a0, | ||
284 | 0x2099, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x0078, 0x1284, 0x70c4, | ||
285 | 0x2068, 0x2079, 0x5200, 0x2091, 0x8000, 0x1078, 0x1980, 0x2091, | ||
286 | 0x8001, 0x0040, 0x1843, 0x6007, 0x0001, 0x600b, 0x0000, 0x602b, | ||
287 | 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x000f, 0xa284, 0x00f0, | ||
288 | 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016, 0xa284, 0x0800, | ||
289 | 0x0040, 0x17de, 0x601b, 0x000a, 0x0078, 0x17e4, 0xa284, 0x1000, | ||
290 | 0x0040, 0x17e4, 0x601b, 0x000c, 0xa284, 0x0300, 0x0040, 0x17ed, | ||
291 | 0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085, 0x0001, 0x601e, | ||
292 | 0x6023, 0x0000, 0x6027, 0x0000, 0xa284, 0x0400, 0x0040, 0x17fa, | ||
293 | 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b, 0x20a0, 0xad80, | ||
294 | 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0, 0x180f, 0x6046, | ||
295 | 0x604a, 0x604e, 0x6052, 0x6096, 0x609a, 0x0078, 0x1819, 0x6800, | ||
296 | 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e, 0x6d0c, 0x6552, 0x6596, | ||
297 | 0x669a, 0x6014, 0x2091, 0x8000, 0x7817, 0x0042, 0x2c08, 0x2061, | ||
298 | 0x5240, 0x606f, 0x0005, 0x6073, 0x0000, 0x6077, 0x0000, 0x607b, | ||
299 | 0x0000, 0x607f, 0x0000, 0x6082, 0x618a, 0xa284, 0x0400, 0x608e, | ||
300 | 0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, | ||
301 | 0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091, 0x8000, 0x1078, 0x226f, | ||
302 | 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1287, 0x0c7e, | ||
303 | 0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000, 0x2071, 0x5240, 0x2079, | ||
304 | 0x0100, 0x2061, 0x0010, 0x70a0, 0xa06d, 0x0040, 0x1903, 0x6a04, | ||
305 | 0xa294, 0x00ff, 0xa286, 0x0007, 0x0040, 0x1862, 0xa286, 0x000f, | ||
306 | 0x00c0, 0x1903, 0x691c, 0xa184, 0x00c0, 0x0040, 0x1903, 0xa184, | ||
307 | 0x0080, 0x00c0, 0x18d3, 0x6824, 0xa084, 0xff00, 0xa085, 0x0019, | ||
308 | 0x6826, 0x71b0, 0x81ff, 0x0040, 0x1889, 0x0d7e, 0x2069, 0x0020, | ||
309 | 0x6807, 0x0010, 0x6908, 0x6808, 0xa106, 0x00c0, 0x187a, 0x690c, | ||
310 | 0x680c, 0xa106, 0x00c0, 0x187f, 0xa184, 0x00ff, 0x00c0, 0x187f, | ||
311 | 0x0d7f, 0x78b8, 0xa084, 0x801f, 0x00c0, 0x1889, 0x7848, 0xa085, | ||
312 | 0x000c, 0x784a, 0x71b0, 0x81ff, 0x0040, 0x18ac, 0x70b3, 0x0000, | ||
313 | 0x0d7e, 0x2069, 0x0020, 0x6807, 0x0018, 0x6804, 0xa084, 0x0008, | ||
314 | 0x00c0, 0x189d, 0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, | ||
315 | 0x18a4, 0x6807, 0x0002, 0x0d7f, 0x61c4, 0x62c8, 0x63cc, 0x61c6, | ||
316 | 0x62ca, 0x63ce, 0x0e7e, 0x2071, 0x5200, 0x7266, 0x736a, 0xae80, | ||
317 | 0x0019, 0x0e7f, 0x7848, 0xa084, 0x000c, 0x00c0, 0x18ba, 0x1078, | ||
318 | 0x47e1, 0x78a3, 0x0000, 0x7858, 0xa084, 0xedff, 0x785a, 0x70b4, | ||
319 | 0xa080, 0x00da, 0x781a, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, | ||
320 | 0x8001, 0x0078, 0x1284, 0x6824, 0xa084, 0xff00, 0xa085, 0x0019, | ||
321 | 0x6826, 0x78b8, 0xa084, 0x801f, 0x00c0, 0x18d9, 0x7848, 0xa085, | ||
322 | 0x000c, 0x784a, 0x7848, 0xa084, 0x000c, 0x00c0, 0x18e2, 0x71b0, | ||
323 | 0x81ff, 0x0040, 0x1901, 0x70b3, 0x0000, 0x0d7e, 0x2069, 0x0020, | ||
324 | 0x6807, 0x0018, 0x6804, 0xa084, 0x0008, 0x00c0, 0x18f2, 0x6807, | ||
325 | 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, 0x18f9, 0x6807, 0x0002, | ||
326 | 0x0d7f, 0x0078, 0x18cb, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, | ||
327 | 0x8001, 0x2001, 0x4005, 0x0078, 0x1286, 0x7980, 0x71c6, 0x71c4, | ||
328 | 0xa182, 0x0003, 0x00c8, 0x127c, 0x7982, 0x0078, 0x1284, 0x7980, | ||
329 | 0x71c6, 0x0078, 0x1284, 0x7974, 0x71c6, 0x71c4, 0x7976, 0x7978, | ||
330 | 0x71ca, 0x71c8, 0x797a, 0x797c, 0x71ce, 0x71cc, 0x797e, 0x0078, | ||
331 | 0x1284, 0x7974, 0x71c6, 0x7978, 0x71ca, 0x797c, 0x71ce, 0x0078, | ||
332 | 0x1284, 0x7900, 0x71c6, 0x71c4, 0x7902, 0x2001, 0x04fd, 0x2004, | ||
333 | 0xa082, 0x0005, 0x0048, 0x1940, 0x0038, 0x1942, 0x0078, 0x194c, | ||
334 | 0x00a8, 0x194c, 0xa18c, 0x0001, 0x00c0, 0x194a, 0x20b9, 0x2222, | ||
335 | 0x0078, 0x194c, 0x20b9, 0x1212, 0x0078, 0x1284, 0x7900, 0x71c6, | ||
336 | 0x0078, 0x1284, 0x2009, 0x5274, 0x2104, 0x70c6, 0x70c4, 0x200a, | ||
337 | 0x0078, 0x1284, 0x2009, 0x5274, 0x2104, 0x70c6, 0x0078, 0x1284, | ||
338 | 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, | ||
339 | 0x5480, 0x6a14, 0xd2b4, 0x0040, 0x1971, 0x2011, 0x0001, 0x0078, | ||
340 | 0x1973, 0x2011, 0x0000, 0x6b0c, 0x0078, 0x1281, 0xac80, 0x0001, | ||
341 | 0x1078, 0x1b80, 0x007c, 0xac80, 0x0001, 0x1078, 0x1b20, 0x007c, | ||
342 | 0x7850, 0xa065, 0x0040, 0x1988, 0x2c04, 0x7852, 0x2063, 0x0000, | ||
343 | 0x007c, 0x0f7e, 0x2079, 0x5200, 0x7850, 0xa06d, 0x0040, 0x1998, | ||
344 | 0x2d04, 0x7852, 0x6803, 0x0000, 0x6807, 0x0000, 0x680b, 0x0000, | ||
345 | 0x0f7f, 0x007c, 0x2091, 0x8000, 0x0f7e, 0x2079, 0x5200, 0x7850, | ||
346 | 0x2062, 0x2c00, 0xa005, 0x00c0, 0x19a7, 0x1078, 0x248c, 0x7852, | ||
347 | 0x0f7f, 0x2091, 0x8001, 0x007c, 0x0f7e, 0x2079, 0x5200, 0x7850, | ||
348 | 0x206a, 0x2d00, 0x7852, 0x0f7f, 0x007c, 0x2011, 0x7900, 0x7a52, | ||
349 | 0x7bec, 0x8319, 0x0040, 0x19c2, 0xa280, 0x0031, 0x2012, 0x2010, | ||
350 | 0x0078, 0x19b9, 0x2013, 0x0000, 0x007c, 0xa784, 0x0f00, 0x800b, | ||
351 | 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, | ||
352 | 0x5500, 0x007c, 0x1078, 0x19c5, 0x2900, 0x682a, 0x2a00, 0x682e, | ||
353 | 0x6808, 0xa084, 0xffef, 0xa80d, 0x690a, 0x2009, 0x5252, 0x210c, | ||
354 | 0x6804, 0xa005, 0x0040, 0x1a04, 0xa116, 0x00c0, 0x19ef, 0x2060, | ||
355 | 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, 0x19f2, 0x2009, | ||
356 | 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1a01, 0x6000, 0x6806, | ||
357 | 0x1078, 0x1a31, 0x1078, 0x1ccb, 0x6810, 0x8001, 0x6812, 0x00c0, | ||
358 | 0x19f2, 0x017f, 0x6902, 0x6906, 0x007c, 0xa065, 0x0040, 0x1a16, | ||
359 | 0x2008, 0x609c, 0xa005, 0x0040, 0x1a13, 0x2062, 0x609f, 0x0000, | ||
360 | 0xa065, 0x0078, 0x1a09, 0x7850, 0x7952, 0x2062, 0x007c, 0xa065, | ||
361 | 0x0040, 0x1a30, 0x2008, 0x609c, 0xa005, 0x0040, 0x1a25, 0x2062, | ||
362 | 0x609f, 0x0000, 0xa065, 0x0078, 0x1a1b, 0x0f7e, 0x2079, 0x5200, | ||
363 | 0x2091, 0x8000, 0x7850, 0x7952, 0x0f7f, 0x2062, 0x2091, 0x8001, | ||
364 | 0x007c, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, 0xac80, | ||
365 | 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, | ||
366 | 0x6022, 0x007c, 0x0e7e, 0x2071, 0x5240, 0x704c, 0xa08c, 0x0200, | ||
367 | 0x00c0, 0x1a50, 0xa088, 0x5280, 0x2d0a, 0x8000, 0x704e, 0xa006, | ||
368 | 0x0e7f, 0x007c, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6804, 0x781e, | ||
369 | 0xa065, 0x0040, 0x1a9b, 0x0078, 0x1a63, 0x2c00, 0x781e, 0x6000, | ||
370 | 0xa065, 0x0040, 0x1a9b, 0x600c, 0xa306, 0x00c0, 0x1a5d, 0x6010, | ||
371 | 0xa206, 0x00c0, 0x1a5d, 0x2c28, 0x2001, 0x5252, 0x2004, 0xac06, | ||
372 | 0x00c0, 0x1a74, 0x0078, 0x1a99, 0x6804, 0xac06, 0x00c0, 0x1a81, | ||
373 | 0x6000, 0xa065, 0x6806, 0x00c0, 0x1a8b, 0x6803, 0x0000, 0x0078, | ||
374 | 0x1a8b, 0x6400, 0x781c, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, | ||
375 | 0x1a8b, 0x2c00, 0x6802, 0x2560, 0x1078, 0x1a31, 0x601b, 0x0005, | ||
376 | 0x6023, 0x0020, 0x1078, 0x1ccb, 0x6810, 0x8001, 0x1050, 0x248c, | ||
377 | 0x6812, 0xa085, 0xffff, 0x007c, 0x2039, 0x0000, 0x2041, 0x0021, | ||
378 | 0x2049, 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x19d2, | ||
379 | 0x8738, 0xa784, 0x001f, 0x00c0, 0x1aa6, 0xa7bc, 0xff00, 0x873f, | ||
380 | 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1aa6, 0x2091, 0x8001, | ||
381 | 0x007c, 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1aca, | ||
382 | 0x2091, 0x8000, 0x78e0, 0x78e3, 0x0000, 0x2091, 0x8001, 0xa005, | ||
383 | 0x00c0, 0x1acb, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1ad1, 0x1078, | ||
384 | 0x248c, 0x0079, 0x1ad3, 0x1ae3, 0x1ae6, 0x1aec, 0x1af0, 0x1ae4, | ||
385 | 0x1af4, 0x1afa, 0x1ae4, 0x1ae4, 0x1c95, 0x1cb9, 0x1cbd, 0x1ae4, | ||
386 | 0x1ae4, 0x1ae4, 0x1ae4, 0x007c, 0x1078, 0x248c, 0x1078, 0x1a9c, | ||
387 | 0x2001, 0x8001, 0x0078, 0x1cc3, 0x2001, 0x8003, 0x0078, 0x1cc3, | ||
388 | 0x2001, 0x8004, 0x0078, 0x1cc3, 0x1078, 0x1a9c, 0x2001, 0x8006, | ||
389 | 0x0078, 0x1cc3, 0x2001, 0x8007, 0x0078, 0x1cc3, 0x2030, 0x2138, | ||
390 | 0xa782, 0x0021, 0x0048, 0x1b06, 0x2009, 0x0020, 0x2600, 0x1078, | ||
391 | 0x1b20, 0x00c0, 0x1b1f, 0xa7ba, 0x0020, 0x0048, 0x1b1e, 0x0040, | ||
392 | 0x1b1e, 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, | ||
393 | 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1b00, 0xa006, 0x007c, | ||
394 | 0x81ff, 0x0040, 0x1b5b, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, | ||
395 | 0x00ff, 0x0040, 0x1b32, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, | ||
396 | 0x00c0, 0x1b2d, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a, | ||
397 | 0x731e, 0x7422, 0x7526, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, | ||
398 | 0x0001, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x1b4f, | ||
399 | 0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1b41, 0x7008, | ||
400 | 0x800b, 0x00c8, 0x1b41, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, | ||
401 | 0x1b5b, 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x2030, 0x2138, | ||
402 | 0xa782, 0x0021, 0x0048, 0x1b66, 0x2009, 0x0020, 0x2600, 0x1078, | ||
403 | 0x1b80, 0x00c0, 0x1b7f, 0xa7ba, 0x0020, 0x0048, 0x1b7e, 0x0040, | ||
404 | 0x1b7e, 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, | ||
405 | 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1b60, 0xa006, 0x007c, | ||
406 | 0x81ff, 0x0040, 0x1bc1, 0x2098, 0x20a1, 0x0030, 0x700c, 0xa084, | ||
407 | 0x00ff, 0x0040, 0x1b92, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, | ||
408 | 0x00c0, 0x1b8d, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a, | ||
409 | 0x731e, 0x7422, 0x7526, 0x780c, 0xa085, 0x0000, 0x7002, 0x53a6, | ||
410 | 0x7007, 0x0001, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, | ||
411 | 0x1bb0, 0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1ba2, | ||
412 | 0x7010, 0xa084, 0xf000, 0x0040, 0x1bb9, 0x7007, 0x0008, 0x0078, | ||
413 | 0x1bbd, 0x7108, 0x8103, 0x00c8, 0x1ba2, 0x7007, 0x0002, 0xa184, | ||
414 | 0x01e0, 0x7003, 0x0000, 0x007c, 0x2001, 0x04fd, 0x2004, 0xa082, | ||
415 | 0x0004, 0x00c8, 0x1bcd, 0x0078, 0x1bd0, 0xa006, 0x0078, 0x1bd2, | ||
416 | 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2071, 0x5200, 0x2d08, 0x7058, | ||
417 | 0x6802, 0xa005, 0x00c0, 0x1bdd, 0x715e, 0x715a, 0x0e7f, 0x007c, | ||
418 | 0x2c08, 0x7858, 0x6002, 0xa005, 0x00c0, 0x1be7, 0x795e, 0x795a, | ||
419 | 0x007c, 0x2091, 0x8000, 0x6114, 0x1078, 0x2180, 0x6900, 0xa184, | ||
420 | 0x0100, 0x00c0, 0x2035, 0xa184, 0x0200, 0x00c0, 0x2031, 0x681c, | ||
421 | 0xa005, 0x00c0, 0x203d, 0x6003, 0x0000, 0x2c08, 0x785c, 0xa065, | ||
422 | 0x00c0, 0x1c05, 0x795a, 0x0078, 0x1c06, 0x6102, 0x795e, 0x2091, | ||
423 | 0x8001, 0x1078, 0x228c, 0x007c, 0x0e7e, 0x2071, 0x5200, 0x7058, | ||
424 | 0xa06d, 0x0040, 0x1c1a, 0x6800, 0x705a, 0xa005, 0x00c0, 0x1c19, | ||
425 | 0x705e, 0x8dff, 0x0e7f, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, | ||
426 | 0x5200, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa005, 0x0040, 0x1c43, | ||
427 | 0x2068, 0x6814, 0xa306, 0x00c0, 0x1c33, 0x6828, 0xa084, 0x00ff, | ||
428 | 0xa406, 0x0040, 0x1c36, 0x2d60, 0x0078, 0x1c24, 0x6800, 0xa005, | ||
429 | 0x6002, 0x00c0, 0x1c42, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1c41, | ||
430 | 0x2c00, 0x785e, 0x2d00, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, | ||
431 | 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x5200, 0xaf80, 0x0016, 0x2060, | ||
432 | 0x6000, 0xa005, 0x0040, 0x1c6b, 0x2068, 0x6814, 0xa084, 0x00ff, | ||
433 | 0xa306, 0x0040, 0x1c5e, 0x2d60, 0x0078, 0x1c50, 0x6800, 0xa005, | ||
434 | 0x6002, 0x00c0, 0x1c6a, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1c69, | ||
435 | 0x2c00, 0x785e, 0x2d00, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, | ||
436 | 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x5200, 0xaf80, 0x0016, 0x2060, | ||
437 | 0x6000, 0xa06d, 0x0040, 0x1c90, 0x6814, 0xa306, 0x0040, 0x1c83, | ||
438 | 0x2d60, 0x0078, 0x1c78, 0x6800, 0xa005, 0x6002, 0x00c0, 0x1c8f, | ||
439 | 0xaf80, 0x0016, 0xac06, 0x0040, 0x1c8e, 0x2c00, 0x785e, 0x2d00, | ||
440 | 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x2091, 0x8000, 0x2069, | ||
441 | 0x5240, 0x6800, 0xa086, 0x0000, 0x0040, 0x1ca3, 0x2091, 0x8001, | ||
442 | 0x78e3, 0x0009, 0x007c, 0x6880, 0xa0bc, 0xff00, 0x2041, 0x0021, | ||
443 | 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, 0x19d2, 0x8738, 0xa784, | ||
444 | 0x001f, 0x00c0, 0x1cac, 0x2091, 0x8001, 0x2001, 0x800a, 0x0078, | ||
445 | 0x1cc3, 0x2001, 0x800c, 0x0078, 0x1cc3, 0x1078, 0x1a9c, 0x2001, | ||
446 | 0x800d, 0x0078, 0x1cc3, 0x70c2, 0x2061, 0x0000, 0x601b, 0x0001, | ||
447 | 0x2091, 0x4080, 0x007c, 0x6004, 0x2c08, 0x2063, 0x0000, 0x7884, | ||
448 | 0x8000, 0x7886, 0x7888, 0xa005, 0x798a, 0x0040, 0x1cda, 0x2c02, | ||
449 | 0x0078, 0x1cdb, 0x798e, 0x007c, 0x6807, 0x0103, 0x0c7e, 0x2061, | ||
450 | 0x5200, 0x2d08, 0x206b, 0x0000, 0x6084, 0x8000, 0x6086, 0x6088, | ||
451 | 0xa005, 0x618a, 0x0040, 0x1cef, 0x2d02, 0x0078, 0x1cf0, 0x618e, | ||
452 | 0x0c7f, 0x007c, 0x1078, 0x1d03, 0x0040, 0x1d02, 0x0c7e, 0x609c, | ||
453 | 0xa065, 0x0040, 0x1cfd, 0x1078, 0x1a17, 0x0c7f, 0x609f, 0x0000, | ||
454 | 0x1078, 0x199a, 0x007c, 0x788c, 0xa065, 0x0040, 0x1d15, 0x2091, | ||
455 | 0x8000, 0x7884, 0x8001, 0x7886, 0x2c04, 0x788e, 0xa005, 0x00c0, | ||
456 | 0x1d13, 0x788a, 0x8000, 0x2091, 0x8001, 0x007c, 0x20a9, 0x0010, | ||
457 | 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x1d1f, 0xa200, 0x0070, | ||
458 | 0x1d23, 0x0078, 0x1d1a, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9, | ||
459 | 0x0010, 0xa005, 0x0040, 0x1d49, 0xa11a, 0x00c8, 0x1d49, 0x8213, | ||
460 | 0x818d, 0x0048, 0x1d3a, 0xa11a, 0x00c8, 0x1d3b, 0x0070, 0x1d41, | ||
461 | 0x0078, 0x1d2f, 0xa11a, 0x2308, 0x8210, 0x0070, 0x1d41, 0x0078, | ||
462 | 0x1d2f, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f, | ||
463 | 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x1d45, 0x7994, | ||
464 | 0x70d0, 0xa106, 0x0040, 0x1dbd, 0x2091, 0x8000, 0x2071, 0x0020, | ||
465 | 0x7004, 0xa005, 0x00c0, 0x1dbd, 0x7008, 0x7208, 0xa206, 0x00c0, | ||
466 | 0x1dbd, 0xa286, 0x0008, 0x00c0, 0x1dbd, 0x2071, 0x0010, 0x1078, | ||
467 | 0x1980, 0x0040, 0x1dbd, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0, 0xa184, | ||
468 | 0xff00, 0x0040, 0x1d8b, 0x2031, 0x0000, 0x810b, 0x86b5, 0x810b, | ||
469 | 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, | ||
470 | 0x86b5, 0x2100, 0xa210, 0x2600, 0xa319, 0xa4a1, 0x0000, 0xa5a9, | ||
471 | 0x0000, 0x0078, 0x1d95, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, | ||
472 | 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x2009, 0x0020, 0x1078, | ||
473 | 0x197b, 0x2091, 0x8001, 0x0040, 0x1db4, 0x1078, 0x199a, 0x78a8, | ||
474 | 0x8000, 0x78aa, 0xa086, 0x0002, 0x00c0, 0x1dbd, 0x2091, 0x8000, | ||
475 | 0x78e3, 0x0002, 0x78ab, 0x0000, 0x78cc, 0xa085, 0x0003, 0x78ce, | ||
476 | 0x2091, 0x8001, 0x0078, 0x1dbd, 0x78ab, 0x0000, 0x1078, 0x2149, | ||
477 | 0x6004, 0xa084, 0x000f, 0x0079, 0x1dc2, 0x2071, 0x0010, 0x2091, | ||
478 | 0x8001, 0x007c, 0x1dd2, 0x1df4, 0x1e1a, 0x1dd2, 0x1e37, 0x1de1, | ||
479 | 0x1fc9, 0x1fe4, 0x1dd2, 0x1dee, 0x1e14, 0x1e7f, 0x1eee, 0x1f57, | ||
480 | 0x1f69, 0x1fe0, 0x2039, 0x0400, 0x78dc, 0xa705, 0x78de, 0x6008, | ||
481 | 0xa705, 0x600a, 0x1078, 0x2064, 0x609c, 0x78da, 0x1078, 0x2131, | ||
482 | 0x007c, 0x78dc, 0xa084, 0x0100, 0x0040, 0x1de8, 0x0078, 0x1dd2, | ||
483 | 0x601c, 0xa085, 0x0080, 0x601e, 0x0078, 0x1dfb, 0x1078, 0x1bc4, | ||
484 | 0x00c0, 0x1dd2, 0x1078, 0x2163, 0x78dc, 0xa084, 0x0100, 0x0040, | ||
485 | 0x1dfb, 0x0078, 0x1dd2, 0x78df, 0x0000, 0x6004, 0x8007, 0xa084, | ||
486 | 0x00ff, 0x78d2, 0x8001, 0x609f, 0x0000, 0x0040, 0x1e11, 0x1078, | ||
487 | 0x2064, 0x0040, 0x1e11, 0x78dc, 0xa085, 0x0100, 0x78de, 0x0078, | ||
488 | 0x1e13, 0x1078, 0x2088, 0x007c, 0x1078, 0x1bc4, 0x00c0, 0x1dd2, | ||
489 | 0x1078, 0x215f, 0x78dc, 0xa08c, 0x0e00, 0x00c0, 0x1e23, 0xa084, | ||
490 | 0x0100, 0x00c0, 0x1e25, 0x0078, 0x1dd2, 0x1078, 0x2064, 0x00c0, | ||
491 | 0x1e36, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x2021, | ||
492 | 0xa186, 0x000f, 0x0040, 0x2021, 0x1078, 0x2088, 0x007c, 0x78dc, | ||
493 | 0xa084, 0x0100, 0x0040, 0x1e3e, 0x0078, 0x1dd2, 0x78df, 0x0000, | ||
494 | 0x6714, 0x2011, 0x0001, 0x20a9, 0x0001, 0x6018, 0xa084, 0x00ff, | ||
495 | 0xa005, 0x0040, 0x1e61, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9, | ||
496 | 0x0020, 0xa08e, 0x0001, 0x0040, 0x1e61, 0x2039, 0x0000, 0x2011, | ||
497 | 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0040, 0x1e61, 0x0078, | ||
498 | 0x1e7c, 0x1078, 0x19c5, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, | ||
499 | 0x0000, 0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, | ||
500 | 0x8001, 0x0070, 0x1e75, 0x0078, 0x1e63, 0x8211, 0x0040, 0x1e7c, | ||
501 | 0x20a9, 0x0100, 0x0078, 0x1e63, 0x1078, 0x199a, 0x007c, 0x2001, | ||
502 | 0x5267, 0x2004, 0xa084, 0x8000, 0x0040, 0x2049, 0x6114, 0x1078, | ||
503 | 0x2180, 0x6900, 0xa184, 0x0001, 0x0040, 0x1ea0, 0x6028, 0xa084, | ||
504 | 0x00ff, 0x00c0, 0x2041, 0x6800, 0xa084, 0x0001, 0x0040, 0x2049, | ||
505 | 0x6803, 0x0000, 0x680b, 0x0000, 0x6807, 0x0000, 0x0078, 0x2051, | ||
506 | 0x2011, 0x0001, 0x6020, 0xd0f4, 0x0040, 0x1ea8, 0xa295, 0x0002, | ||
507 | 0xd0c4, 0x0040, 0x1ead, 0xa295, 0x0008, 0xd0cc, 0x0040, 0x1eb2, | ||
508 | 0xa295, 0x0400, 0x601c, 0xa084, 0x0002, 0x0040, 0x1eb9, 0xa295, | ||
509 | 0x0004, 0x602c, 0xa08c, 0x00ff, 0xa182, 0x0002, 0x0048, 0x204d, | ||
510 | 0xa182, 0x001b, 0x00c8, 0x204d, 0x0040, 0x204d, 0x690e, 0x602c, | ||
511 | 0x8007, 0xa08c, 0x00ff, 0xa182, 0x0002, 0x0048, 0x204d, 0xa182, | ||
512 | 0x001b, 0x00c8, 0x204d, 0x0040, 0x204d, 0x6912, 0x6030, 0xa005, | ||
513 | 0x00c0, 0x1edc, 0x2001, 0x001e, 0x8000, 0x6816, 0x6028, 0xa084, | ||
514 | 0x00ff, 0x0040, 0x2049, 0x6806, 0x6028, 0x8007, 0xa084, 0x00ff, | ||
515 | 0x0040, 0x2049, 0x680a, 0x6a02, 0x0078, 0x2051, 0x2001, 0x5240, | ||
516 | 0x2004, 0xa086, 0x0007, 0x00c0, 0x1f53, 0x2001, 0x5267, 0x2004, | ||
517 | 0xa084, 0x8000, 0x0040, 0x2049, 0x6114, 0x1078, 0x2180, 0x2001, | ||
518 | 0x5252, 0x2004, 0x2010, 0x82ff, 0x0040, 0x1f0e, 0xa080, 0x0005, | ||
519 | 0x2004, 0xa084, 0x00ff, 0xa106, 0x00c0, 0x1f53, 0x2091, 0x8000, | ||
520 | 0x6a04, 0x6b08, 0x6418, 0xa484, 0x0003, 0x0040, 0x1f2d, 0x6128, | ||
521 | 0xa18c, 0x00ff, 0x8001, 0x00c0, 0x1f23, 0x2100, 0xa210, 0x0048, | ||
522 | 0x1f53, 0x0078, 0x1f2d, 0x8001, 0x00c0, 0x1f53, 0x2100, 0xa212, | ||
523 | 0x0048, 0x1f53, 0x82ff, 0x0040, 0x1f53, 0xa484, 0x000c, 0x0040, | ||
524 | 0x1f47, 0x6128, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, 0x00c0, | ||
525 | 0x1f3f, 0x2100, 0xa318, 0x0048, 0x1f53, 0x0078, 0x1f47, 0xa082, | ||
526 | 0x0004, 0x00c0, 0x1f53, 0x2100, 0xa31a, 0x0048, 0x1f53, 0x6030, | ||
527 | 0xa005, 0x0040, 0x1f4d, 0x8000, 0x6816, 0x6a06, 0x6b0a, 0x2091, | ||
528 | 0x8001, 0x0078, 0x2051, 0x2091, 0x8001, 0x0078, 0x204d, 0x6114, | ||
529 | 0x1078, 0x2180, 0x2091, 0x8000, 0x6b08, 0x8318, 0x0048, 0x1f65, | ||
530 | 0x6b0a, 0x2091, 0x8001, 0x0078, 0x2060, 0x2091, 0x8001, 0x0078, | ||
531 | 0x204d, 0x6024, 0x8007, 0xa084, 0x00ff, 0x0040, 0x1f87, 0xa086, | ||
532 | 0x0080, 0x00c0, 0x1fc7, 0x20a9, 0x0008, 0x2069, 0x7610, 0x2091, | ||
533 | 0x8000, 0x6800, 0xa084, 0xfcff, 0x6802, 0xade8, 0x0008, 0x0070, | ||
534 | 0x1f83, 0x0078, 0x1f79, 0x2091, 0x8001, 0x0078, 0x2051, 0x6028, | ||
535 | 0xa015, 0x0040, 0x1fc7, 0x6114, 0x1078, 0x2180, 0x0c7e, 0x0d7e, | ||
536 | 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d, 0x0040, 0x1fc3, | ||
537 | 0xa206, 0x0040, 0x1f9e, 0x2168, 0x0078, 0x1f94, 0x2160, 0x6000, | ||
538 | 0x6802, 0x2c68, 0x1078, 0x19ac, 0x0d7f, 0x6818, 0xa00d, 0x0040, | ||
539 | 0x1fbb, 0x2060, 0x6200, 0x6a1a, 0x6a1c, 0x6202, 0x681e, 0x1078, | ||
540 | 0x1989, 0x2da0, 0x2198, 0x20a9, 0x0031, 0x53a3, 0x2d60, 0x1078, | ||
541 | 0x1ccb, 0x0078, 0x1fbe, 0x6808, 0x8000, 0x680a, 0x2091, 0x8001, | ||
542 | 0x0c7f, 0x0078, 0x2060, 0x2091, 0x8001, 0x0d7f, 0x0c7f, 0x0078, | ||
543 | 0x2049, 0x6114, 0x1078, 0x2180, 0x6800, 0xa084, 0x0001, 0x0040, | ||
544 | 0x2039, 0x2091, 0x8000, 0x6a04, 0x8210, 0x0048, 0x1fdc, 0x6a06, | ||
545 | 0x2091, 0x8001, 0x0078, 0x2060, 0x2091, 0x8001, 0x0078, 0x204d, | ||
546 | 0x1078, 0x1bc4, 0x00c0, 0x1dd2, 0x6114, 0x1078, 0x2180, 0x60be, | ||
547 | 0x60bb, 0x0000, 0x6900, 0xa184, 0x0008, 0x0040, 0x1ff3, 0x6020, | ||
548 | 0xa085, 0x0100, 0x6022, 0xa184, 0x0001, 0x0040, 0x2049, 0xa184, | ||
549 | 0x0100, 0x00c0, 0x2035, 0xa184, 0x0200, 0x00c0, 0x2031, 0x681c, | ||
550 | 0xa005, 0x00c0, 0x203d, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000f, | ||
551 | 0x00c0, 0x200c, 0x1078, 0x2163, 0x78df, 0x0000, 0x6004, 0x8007, | ||
552 | 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f, 0x0000, 0x0040, 0x2021, | ||
553 | 0x1078, 0x2064, 0x0040, 0x2021, 0x78dc, 0xa085, 0x0100, 0x78de, | ||
554 | 0x007c, 0x78d7, 0x0000, 0x78db, 0x0000, 0x6024, 0xa084, 0xff00, | ||
555 | 0x6026, 0x1078, 0x3aac, 0x0040, 0x1d4f, 0x1078, 0x1be9, 0x0078, | ||
556 | 0x1d4f, 0x2009, 0x0017, 0x0078, 0x2053, 0x2009, 0x000e, 0x0078, | ||
557 | 0x2053, 0x2009, 0x0007, 0x0078, 0x2053, 0x2009, 0x0035, 0x0078, | ||
558 | 0x2053, 0x2009, 0x003e, 0x0078, 0x2053, 0x2009, 0x0004, 0x0078, | ||
559 | 0x2053, 0x2009, 0x0006, 0x0078, 0x2053, 0x2009, 0x0016, 0x0078, | ||
560 | 0x2053, 0x2009, 0x0001, 0x6024, 0xa084, 0xff00, 0xa105, 0x6026, | ||
561 | 0x2091, 0x8000, 0x1078, 0x1ccb, 0x2091, 0x8001, 0x0078, 0x1d4f, | ||
562 | 0x1078, 0x199a, 0x0078, 0x1d4f, 0x78d4, 0xa06d, 0x00c0, 0x206f, | ||
563 | 0x2c00, 0x78d6, 0x78da, 0x609f, 0x0000, 0x0078, 0x207b, 0x2c00, | ||
564 | 0x689e, 0x609f, 0x0000, 0x78d6, 0x2d00, 0x6002, 0x78d8, 0xad06, | ||
565 | 0x00c0, 0x207b, 0x6002, 0x78d0, 0x8001, 0x78d2, 0x00c0, 0x2087, | ||
566 | 0x78dc, 0xa084, 0xfeff, 0x78de, 0x78d8, 0x2060, 0xa006, 0x007c, | ||
567 | 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0xe1ff, 0x601e, 0xa184, | ||
568 | 0x0060, 0x0040, 0x2097, 0x0e7e, 0x1078, 0x48d3, 0x0e7f, 0x6596, | ||
569 | 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, | ||
570 | 0x1078, 0x19c5, 0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x00c0, | ||
571 | 0x20be, 0x6808, 0xa084, 0x0001, 0x0040, 0x20be, 0x2091, 0x8001, | ||
572 | 0x1078, 0x1a31, 0x2091, 0x8000, 0x1078, 0x1ccb, 0x2091, 0x8001, | ||
573 | 0x78d7, 0x0000, 0x78db, 0x0000, 0x0078, 0x2130, 0x6024, 0xa096, | ||
574 | 0x0001, 0x00c0, 0x20c5, 0x8000, 0x6026, 0x6a10, 0x6814, 0x2091, | ||
575 | 0x8001, 0xa202, 0x0048, 0x20d4, 0x0040, 0x20d4, 0x2039, 0x0200, | ||
576 | 0x1078, 0x2131, 0x0078, 0x2130, 0x2c08, 0x2091, 0x8000, 0x60a0, | ||
577 | 0xa084, 0x8000, 0x0040, 0x2101, 0x6800, 0xa065, 0x0040, 0x2106, | ||
578 | 0x6a04, 0x0e7e, 0x2071, 0x5240, 0x7000, 0xa084, 0x0001, 0x0040, | ||
579 | 0x20fb, 0x7048, 0xa206, 0x00c0, 0x20fb, 0x6b04, 0x231c, 0x2160, | ||
580 | 0x6302, 0x2300, 0xa005, 0x00c0, 0x20f6, 0x6902, 0x2260, 0x6102, | ||
581 | 0x0e7f, 0x0078, 0x210d, 0x2160, 0x6202, 0x6906, 0x0e7f, 0x0078, | ||
582 | 0x210d, 0x6800, 0xa065, 0x0040, 0x2106, 0x6102, 0x6902, 0x00c0, | ||
583 | 0x210a, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160, 0x60a0, 0xa084, | ||
584 | 0x8000, 0x0040, 0x2117, 0x6808, 0xa084, 0xfffc, 0x680a, 0x6810, | ||
585 | 0x8000, 0x6812, 0x2091, 0x8001, 0x6808, 0xa08c, 0x0040, 0x0040, | ||
586 | 0x2126, 0xa086, 0x0040, 0x680a, 0x1078, 0x1a42, 0x2091, 0x8000, | ||
587 | 0x1078, 0x226f, 0x2091, 0x8001, 0x78db, 0x0000, 0x78d7, 0x0000, | ||
588 | 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x1ccb, | ||
589 | 0x2091, 0x8001, 0x78d8, 0xa065, 0x0040, 0x2144, 0x609c, 0x78da, | ||
590 | 0x609f, 0x0000, 0x0078, 0x2134, 0x78d7, 0x0000, 0x78db, 0x0000, | ||
591 | 0x007c, 0x7990, 0x7894, 0x8000, 0xa10a, 0x00c8, 0x2150, 0xa006, | ||
592 | 0x7896, 0x70d2, 0x7804, 0xa005, 0x0040, 0x215e, 0x8001, 0x7806, | ||
593 | 0x00c0, 0x215e, 0x0068, 0x215e, 0x2091, 0x4080, 0x007c, 0x2039, | ||
594 | 0x2177, 0x0078, 0x2165, 0x2039, 0x217d, 0x2704, 0xa005, 0x0040, | ||
595 | 0x2176, 0xac00, 0x2068, 0x6b08, 0x6c0c, 0x6910, 0x6a14, 0x690a, | ||
596 | 0x6a0e, 0x6b12, 0x6c16, 0x8738, 0x0078, 0x2165, 0x007c, 0x0003, | ||
597 | 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, | ||
598 | 0x0c7e, 0x1078, 0x3c3b, 0x2c68, 0x0c7f, 0x007c, 0x0010, 0x21f7, | ||
599 | 0x0068, 0x21f7, 0x2029, 0x0000, 0x78cb, 0x0000, 0x788c, 0xa065, | ||
600 | 0x0040, 0x21f0, 0x2009, 0x5274, 0x2104, 0xa084, 0x0001, 0x0040, | ||
601 | 0x21be, 0x6004, 0xa086, 0x0103, 0x00c0, 0x21be, 0x6018, 0xa005, | ||
602 | 0x00c0, 0x21be, 0x6014, 0xa005, 0x00c0, 0x21be, 0x0d7e, 0x2069, | ||
603 | 0x0000, 0x6818, 0xa084, 0x0001, 0x00c0, 0x21bd, 0x600c, 0x70c6, | ||
604 | 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, 0x4080, | ||
605 | 0x0d7f, 0x1078, 0x1cf2, 0x0078, 0x21f5, 0x0d7f, 0x1078, 0x21f8, | ||
606 | 0x0040, 0x21f0, 0x6204, 0xa294, 0x00ff, 0xa296, 0x0003, 0x0040, | ||
607 | 0x21d0, 0x6204, 0xa296, 0x0110, 0x00c0, 0x21de, 0x78cb, 0x0001, | ||
608 | 0x6204, 0xa294, 0xff00, 0x8217, 0x8211, 0x0040, 0x21de, 0x85ff, | ||
609 | 0x00c0, 0x21f0, 0x8210, 0xa202, 0x00c8, 0x21f0, 0x057e, 0x1078, | ||
610 | 0x2207, 0x057f, 0x0040, 0x21eb, 0x78e0, 0xa086, 0x0003, 0x0040, | ||
611 | 0x21f0, 0x0078, 0x21de, 0x8528, 0x78c8, 0xa005, 0x0040, 0x218e, | ||
612 | 0x85ff, 0x0040, 0x21f7, 0x2091, 0x4080, 0x78b0, 0x70d6, 0x007c, | ||
613 | 0x7bac, 0x79b0, 0x70d4, 0xa102, 0x00c0, 0x2201, 0x2300, 0xa005, | ||
614 | 0x007c, 0x0048, 0x2205, 0xa302, 0x007c, 0x8002, 0x007c, 0x2001, | ||
615 | 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x2221, 0x2091, 0x8000, | ||
616 | 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x2256, 0x7008, 0x7208, | ||
617 | 0xa206, 0x00c0, 0x2256, 0xa286, 0x0008, 0x00c0, 0x2256, 0x2071, | ||
618 | 0x0010, 0x1078, 0x225b, 0x2009, 0x0020, 0x6004, 0xa086, 0x0103, | ||
619 | 0x00c0, 0x2230, 0x6028, 0xa005, 0x00c0, 0x2230, 0x2009, 0x000c, | ||
620 | 0x1078, 0x1976, 0x0040, 0x2249, 0x78c4, 0x8000, 0x78c6, 0xa086, | ||
621 | 0x0002, 0x00c0, 0x2256, 0x2091, 0x8000, 0x78e3, 0x0003, 0x78c7, | ||
622 | 0x0000, 0x78cc, 0xa085, 0x0300, 0x78ce, 0x2091, 0x8001, 0x0078, | ||
623 | 0x2256, 0x78c7, 0x0000, 0x1078, 0x1cf2, 0x79ac, 0x78b0, 0x8000, | ||
624 | 0xa10a, 0x00c8, 0x2254, 0xa006, 0x78b2, 0xa006, 0x2071, 0x0010, | ||
625 | 0x2091, 0x8001, 0x007c, 0x8107, 0x8004, 0x8004, 0x7ab8, 0x7bb4, | ||
626 | 0x7cc0, 0x7dbc, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, | ||
627 | 0x0000, 0x007c, 0x2009, 0x525b, 0x2091, 0x8000, 0x200a, 0x0f7e, | ||
628 | 0x0e7e, 0x2071, 0x5240, 0x7000, 0xa086, 0x0000, 0x00c0, 0x2289, | ||
629 | 0x2009, 0x5212, 0x2104, 0xa005, 0x00c0, 0x2289, 0x2079, 0x0100, | ||
630 | 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2289, 0x0018, 0x2289, 0x781b, | ||
631 | 0x004b, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x5240, | ||
632 | 0x2091, 0x8000, 0x7000, 0xa086, 0x0000, 0x00c0, 0x22a2, 0x2079, | ||
633 | 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x22a2, 0x0018, 0x22a2, | ||
634 | 0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f, 0x0f7f, 0x007c, 0x127e, | ||
635 | 0x2091, 0x2300, 0x2071, 0x5240, 0x2079, 0x0100, 0x784b, 0x000f, | ||
636 | 0x0098, 0x22b5, 0x7838, 0x0078, 0x22ae, 0x20a9, 0x0040, 0x7800, | ||
637 | 0xa082, 0x0004, 0x0048, 0x22be, 0x20a9, 0x0060, 0x789b, 0x0000, | ||
638 | 0x78af, 0x0000, 0x78af, 0x0000, 0x0070, 0x22c8, 0x0078, 0x22c0, | ||
639 | 0x7800, 0xa082, 0x0004, 0x0048, 0x22d7, 0x70b7, 0x0093, 0x2019, | ||
640 | 0x4ff0, 0x1078, 0x2313, 0x702f, 0x8001, 0x0078, 0x22e3, 0x70b7, | ||
641 | 0x0000, 0x2019, 0x4e70, 0x1078, 0x2313, 0x2019, 0x4eaf, 0x1078, | ||
642 | 0x2313, 0x702f, 0x8000, 0x7003, 0x0000, 0x1078, 0x2420, 0x7004, | ||
643 | 0xa084, 0x000f, 0x017e, 0x2009, 0x04fd, 0x210c, 0xa18a, 0x0005, | ||
644 | 0x0048, 0x22f8, 0x0038, 0x22fe, 0xa085, 0x6280, 0x0078, 0x2300, | ||
645 | 0x0028, 0x22fe, 0xa085, 0x6280, 0x0078, 0x2300, 0xa085, 0x62c0, | ||
646 | 0x017f, 0x7806, 0x780f, 0xb204, 0x7843, 0x00d8, 0x7853, 0x0080, | ||
647 | 0x780b, 0x0008, 0x7047, 0x0008, 0x7053, 0x527f, 0x704f, 0x0000, | ||
648 | 0x127f, 0x2000, 0x007c, 0x137e, 0x147e, 0x157e, 0x047e, 0x20a1, | ||
649 | 0x012b, 0x2304, 0xa005, 0x789a, 0x0040, 0x2333, 0x8318, 0x2324, | ||
650 | 0x8318, 0x2398, 0x24a8, 0xa484, 0xff00, 0x0040, 0x232b, 0xa482, | ||
651 | 0x0100, 0x20a9, 0x0100, 0x2020, 0x53a6, 0xa005, 0x00c0, 0x2322, | ||
652 | 0x3318, 0x0078, 0x2319, 0x047f, 0x157f, 0x147f, 0x137f, 0x007c, | ||
653 | 0xa18c, 0x000f, 0x2011, 0x0101, 0x2204, 0xa084, 0xfff0, 0xa105, | ||
654 | 0x2012, 0x1078, 0x2420, 0x007c, 0x2011, 0x0101, 0x20a9, 0x0009, | ||
655 | 0x810b, 0x0070, 0x234d, 0x0078, 0x2348, 0xa18c, 0x0e00, 0x2204, | ||
656 | 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2009, 0x0101, 0x20a9, | ||
657 | 0x0005, 0x8213, 0x0070, 0x235e, 0x0078, 0x2359, 0xa294, 0x00e0, | ||
658 | 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x007c, 0x2011, 0x0101, | ||
659 | 0x20a9, 0x000c, 0x810b, 0x0070, 0x236f, 0x0078, 0x236a, 0xa18c, | ||
660 | 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c, 0x2011, | ||
661 | 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x8103, | ||
662 | 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x62ac, | ||
663 | 0x63ac, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, | ||
664 | 0x2061, 0x0100, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f, | ||
665 | 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, | ||
666 | 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x8103, | ||
667 | 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, | ||
668 | 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c, 0x2091, | ||
669 | 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x23fe, 0x2061, | ||
670 | 0x7600, 0x1078, 0x2406, 0x0040, 0x23e8, 0x20a9, 0x0000, 0x2061, | ||
671 | 0x7500, 0x0c7e, 0x1078, 0x2406, 0x0040, 0x23d6, 0x0c7f, 0x8c60, | ||
672 | 0x0070, 0x23d4, 0x0078, 0x23c9, 0x0078, 0x23fe, 0x007f, 0xa082, | ||
673 | 0x7500, 0x2071, 0x5240, 0x7086, 0x7182, 0x2001, 0x0004, 0x706e, | ||
674 | 0x7093, 0x000f, 0x7073, 0x0000, 0x1078, 0x226a, 0x0078, 0x23fa, | ||
675 | 0x60c0, 0xa005, 0x00c0, 0x23fe, 0x2071, 0x5240, 0x7182, 0x2c00, | ||
676 | 0x708a, 0x2001, 0x0006, 0x706e, 0x7093, 0x000f, 0x7073, 0x0000, | ||
677 | 0x1078, 0x226a, 0x2001, 0x0000, 0x0078, 0x2400, 0x2001, 0x0001, | ||
678 | 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005, | ||
679 | 0x0040, 0x241d, 0x2060, 0x600c, 0xa306, 0x00c0, 0x241a, 0x6010, | ||
680 | 0xa206, 0x00c0, 0x241a, 0x6014, 0xa106, 0x00c0, 0x241a, 0xa006, | ||
681 | 0x0078, 0x241f, 0x6000, 0x0078, 0x2407, 0xa085, 0x0001, 0x007c, | ||
682 | 0x2011, 0x5241, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, | ||
683 | 0xa084, 0x0100, 0x0040, 0x2436, 0x2021, 0xff04, 0x2122, 0x810b, | ||
684 | 0x810b, 0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e, | ||
685 | 0x68e4, 0xa08c, 0x0020, 0x0040, 0x248a, 0xa084, 0x0006, 0x00c0, | ||
686 | 0x248a, 0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, | ||
687 | 0xa0f0, 0x5480, 0x7004, 0xa084, 0x000a, 0x00c0, 0x248a, 0x7108, | ||
688 | 0xa194, 0xff00, 0x0040, 0x248a, 0xa18c, 0x00ff, 0x2001, 0x000c, | ||
689 | 0xa106, 0x0040, 0x2471, 0x2001, 0x0012, 0xa106, 0x0040, 0x2475, | ||
690 | 0x2001, 0x0014, 0xa106, 0x0040, 0x2479, 0x2001, 0x0019, 0xa106, | ||
691 | 0x0040, 0x247d, 0x2001, 0x0032, 0xa106, 0x0040, 0x2481, 0x0078, | ||
692 | 0x2485, 0x2009, 0x0012, 0x0078, 0x2487, 0x2009, 0x0014, 0x0078, | ||
693 | 0x2487, 0x2009, 0x0019, 0x0078, 0x2487, 0x2009, 0x0020, 0x0078, | ||
694 | 0x2487, 0x2009, 0x003f, 0x0078, 0x2487, 0x2011, 0x0000, 0x2100, | ||
695 | 0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068, 0x248c, 0x2091, 0x8000, | ||
696 | 0x2071, 0x0000, 0x007e, 0x7018, 0xa084, 0x0001, 0x00c0, 0x2493, | ||
697 | 0x007f, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, | ||
698 | 0x70db, 0x0741, 0x70df, 0x0006, 0x2071, 0x0000, 0x701b, 0x0001, | ||
699 | 0x2091, 0x4080, 0x0078, 0x24aa, 0x107e, 0x007e, 0x127e, 0x2091, | ||
700 | 0x2300, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x77c2, 0x74c6, 0x76ca, | ||
701 | 0x75ce, 0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, 0x0079, | ||
702 | 0x24c1, 0x24d3, 0x24d3, 0x24d3, 0x280d, 0x3a09, 0x24d1, 0x2502, | ||
703 | 0x250c, 0x24d1, 0x24d1, 0x24d1, 0x24d1, 0x24d1, 0x24d1, 0x24d1, | ||
704 | 0x24d1, 0x1078, 0x248c, 0x8507, 0xa084, 0x001f, 0x0079, 0x24d8, | ||
705 | 0x2516, 0x280d, 0x29c7, 0x2ac4, 0x2aec, 0x2d8c, 0x3037, 0x309a, | ||
706 | 0x30fb, 0x3180, 0x3238, 0x32d6, 0x2502, 0x28e9, 0x300c, 0x24f8, | ||
707 | 0x3dac, 0x3dcc, 0x3f8f, 0x3f9b, 0x4074, 0x24f8, 0x24f8, 0x4149, | ||
708 | 0x414d, 0x3daa, 0x24f8, 0x3efa, 0x24f8, 0x3c5e, 0x250c, 0x24f8, | ||
709 | 0x1078, 0x248c, 0x0018, 0x24b1, 0x127f, 0x2091, 0x8001, 0x007f, | ||
710 | 0x107f, 0x007c, 0x2019, 0x4f49, 0x1078, 0x2313, 0x702f, 0x0001, | ||
711 | 0x781b, 0x004f, 0x0078, 0x24fa, 0x2019, 0x4eaf, 0x1078, 0x2313, | ||
712 | 0x702f, 0x8000, 0x781b, 0x00cd, 0x0078, 0x24fa, 0x7242, 0x2009, | ||
713 | 0x520f, 0x200b, 0x0000, 0xa584, 0x0001, 0x00c0, 0x3c72, 0x0040, | ||
714 | 0x2533, 0x1078, 0x248c, 0x7003, 0x0000, 0x704b, 0x0000, 0x7043, | ||
715 | 0x0000, 0x7037, 0x0000, 0x1078, 0x39e0, 0x0018, 0x24b1, 0x2009, | ||
716 | 0x520f, 0x200b, 0x0000, 0x7068, 0xa005, 0x00c0, 0x25fe, 0x706c, | ||
717 | 0xa084, 0x0007, 0x0079, 0x253c, 0x2635, 0x2544, 0x2550, 0x256d, | ||
718 | 0x258f, 0x25dc, 0x25b5, 0x2544, 0x1078, 0x39c8, 0x2009, 0x0048, | ||
719 | 0x1078, 0x2ed8, 0x00c0, 0x254e, 0x7003, 0x0004, 0x0078, 0x24fa, | ||
720 | 0x1078, 0x39c8, 0x00c0, 0x256b, 0x7080, 0x8007, 0x7882, 0x789b, | ||
721 | 0x0010, 0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab, 0x0001, 0x785b, | ||
722 | 0x0004, 0x2009, 0x00dd, 0x1078, 0x2ecc, 0x00c0, 0x256b, 0x7003, | ||
723 | 0x0004, 0x7093, 0x000f, 0x0078, 0x24fa, 0x1078, 0x39c8, 0x00c0, | ||
724 | 0x258d, 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, | ||
725 | 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, | ||
726 | 0x0002, 0x785b, 0x0004, 0x2009, 0x00dd, 0x1078, 0x2ecc, 0x00c0, | ||
727 | 0x258d, 0x7003, 0x0004, 0x7093, 0x000f, 0x0078, 0x24fa, 0x1078, | ||
728 | 0x39c8, 0x00c0, 0x25b3, 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, | ||
729 | 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x7184, | ||
730 | 0x79aa, 0x78ab, 0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, | ||
731 | 0x0004, 0x2009, 0x00dd, 0x1078, 0x2ecc, 0x00c0, 0x25b3, 0x7003, | ||
732 | 0x0004, 0x7093, 0x000f, 0x0078, 0x24fa, 0x1078, 0x39c8, 0x00c0, | ||
733 | 0x25da, 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, | ||
734 | 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, | ||
735 | 0x0002, 0x785b, 0x0004, 0x2009, 0x00dd, 0x1078, 0x2ecc, 0x00c0, | ||
736 | 0x25da, 0x7088, 0x708b, 0x0000, 0x2068, 0x704a, 0x7003, 0x0002, | ||
737 | 0x7093, 0x000f, 0x0078, 0x24fa, 0x1078, 0x39c8, 0x00c0, 0x24fa, | ||
738 | 0x7088, 0x2068, 0x6f14, 0x1078, 0x38bd, 0x2c50, 0x1078, 0x3a7a, | ||
739 | 0x789b, 0x0010, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, | ||
740 | 0x6e1c, 0x2041, 0x0001, 0x708c, 0xa084, 0x0400, 0x2001, 0x0004, | ||
741 | 0x0040, 0x25fc, 0x2001, 0x0006, 0x0078, 0x271d, 0x1078, 0x39c8, | ||
742 | 0x00c0, 0x24fa, 0x789b, 0x0010, 0x7068, 0x2068, 0x6f14, 0x1078, | ||
743 | 0x38bd, 0x2c50, 0x1078, 0x3a7a, 0x6008, 0xa085, 0x0010, 0x600a, | ||
744 | 0x6824, 0xa005, 0x0040, 0x261c, 0xa082, 0x0006, 0x0048, 0x261a, | ||
745 | 0x0078, 0x261c, 0x6827, 0x0005, 0x6b14, 0xa39c, 0x001f, 0xa39d, | ||
746 | 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040, 0x262a, 0xa684, 0x0001, | ||
747 | 0x0040, 0x262c, 0xa39c, 0xffbf, 0x7baa, 0x2031, 0x0020, 0x2041, | ||
748 | 0x0001, 0x2001, 0x0003, 0x0078, 0x271d, 0x0018, 0x24b1, 0x744c, | ||
749 | 0xa485, 0x0000, 0x0040, 0x264f, 0xa080, 0x5280, 0x2030, 0x7150, | ||
750 | 0x8108, 0xa12a, 0x0048, 0x2646, 0x2009, 0x5280, 0x2164, 0x6504, | ||
751 | 0x85ff, 0x00c0, 0x2660, 0x8421, 0x00c0, 0x2640, 0x7152, 0x7003, | ||
752 | 0x0000, 0x704b, 0x0000, 0x7040, 0xa005, 0x0040, 0x3c72, 0x0078, | ||
753 | 0x24fa, 0x764c, 0xa6b0, 0x5280, 0x7150, 0x2600, 0x0078, 0x264b, | ||
754 | 0x7152, 0x2568, 0x2558, 0x754a, 0x2c50, 0x6034, 0xa085, 0x0000, | ||
755 | 0x00c0, 0x265d, 0x6708, 0x773a, 0xa784, 0x033f, 0x0040, 0x2696, | ||
756 | 0xa784, 0x0021, 0x00c0, 0x265d, 0xa784, 0x0002, 0x0040, 0x267f, | ||
757 | 0xa784, 0x0004, 0x0040, 0x265d, 0xa7bc, 0xfffb, 0x670a, 0xa784, | ||
758 | 0x0008, 0x00c0, 0x265d, 0xa784, 0x0010, 0x00c0, 0x265d, 0xa784, | ||
759 | 0x0200, 0x00c0, 0x265d, 0xa784, 0x0100, 0x0040, 0x2696, 0x6018, | ||
760 | 0xa005, 0x00c0, 0x265d, 0xa7bc, 0xfeff, 0x670a, 0x6823, 0x0000, | ||
761 | 0x6e1c, 0xa684, 0x000e, 0x6118, 0x0040, 0x26a6, 0x601c, 0xa102, | ||
762 | 0x0048, 0x26a9, 0x0040, 0x26a9, 0x0078, 0x2659, 0x81ff, 0x00c0, | ||
763 | 0x2659, 0x68c3, 0x0000, 0xa784, 0x0080, 0x00c0, 0x26b1, 0x700c, | ||
764 | 0x6022, 0xa7bc, 0xff7f, 0x670a, 0x1078, 0x3a7a, 0x0018, 0x24b1, | ||
765 | 0x789b, 0x0010, 0xa046, 0x1078, 0x39c8, 0x00c0, 0x24fa, 0x6b14, | ||
766 | 0xa39c, 0x001f, 0xa39d, 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040, | ||
767 | 0x26cd, 0xa684, 0x0001, 0x0040, 0x26cf, 0xa39c, 0xffbf, 0xa684, | ||
768 | 0x0010, 0x0040, 0x26d5, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, | ||
769 | 0x000e, 0x00c0, 0x26e0, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x271b, | ||
770 | 0x7158, 0xa18c, 0x0800, 0x0040, 0x34cb, 0x2011, 0x0020, 0xa684, | ||
771 | 0x0008, 0x00c0, 0x26f1, 0x8210, 0xa684, 0x0002, 0x00c0, 0x26f1, | ||
772 | 0x8210, 0x7aaa, 0x8840, 0x1078, 0x39e0, 0x6a14, 0x610c, 0x8108, | ||
773 | 0xa18c, 0x00ff, 0xa1e0, 0x7500, 0x2c64, 0x8cff, 0x0040, 0x2712, | ||
774 | 0x6014, 0xa206, 0x00c0, 0x26fc, 0x60b8, 0x8001, 0x60ba, 0x00c0, | ||
775 | 0x26f7, 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, | ||
776 | 0x0078, 0x2635, 0x1078, 0x39c8, 0x00c0, 0x24fa, 0x2a60, 0x610e, | ||
777 | 0x79aa, 0x8840, 0x7132, 0x2001, 0x0001, 0x007e, 0x715c, 0xa184, | ||
778 | 0x0018, 0x0040, 0x2738, 0xa184, 0x0010, 0x0040, 0x272b, 0x1078, | ||
779 | 0x36d0, 0x00c0, 0x275b, 0xa184, 0x0008, 0x0040, 0x2738, 0x69a0, | ||
780 | 0xa184, 0x0600, 0x00c0, 0x2738, 0x1078, 0x35bb, 0x0078, 0x275b, | ||
781 | 0x69a0, 0xa184, 0x0800, 0x0040, 0x274f, 0x0c7e, 0x027e, 0x2960, | ||
782 | 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106, | ||
783 | 0x027f, 0x0c7f, 0x1078, 0x36d0, 0x00c0, 0x275b, 0x69a0, 0xa184, | ||
784 | 0x0200, 0x0040, 0x2757, 0x1078, 0x360c, 0x0078, 0x275b, 0xa184, | ||
785 | 0x0400, 0x00c0, 0x2734, 0x69a0, 0xa184, 0x1000, 0x0040, 0x2766, | ||
786 | 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x238b, 0x007f, 0x7002, | ||
787 | 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x2774, 0xa086, 0x0060, | ||
788 | 0x00c0, 0x2774, 0xa18d, 0x4000, 0x88ff, 0x0040, 0x2779, 0xa18d, | ||
789 | 0x0004, 0x795a, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b, | ||
790 | 0x0061, 0x6818, 0xa08d, 0x8000, 0xa084, 0x7fff, 0x691a, 0xa68c, | ||
791 | 0x0080, 0x0040, 0x2798, 0x7097, 0x0000, 0xa08a, 0x000d, 0x0050, | ||
792 | 0x2796, 0xa08a, 0x000c, 0x7196, 0x2001, 0x000c, 0x800c, 0x719a, | ||
793 | 0x78aa, 0x8008, 0x810c, 0x0040, 0x34d1, 0xa18c, 0x00f8, 0x00c0, | ||
794 | 0x34d1, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, | ||
795 | 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, | ||
796 | 0x157f, 0x6814, 0x8007, 0x7882, 0x6d94, 0x7dd6, 0x7dde, 0x6e98, | ||
797 | 0x7ed2, 0x7eda, 0x1078, 0x39c8, 0x00c0, 0x27cf, 0x702c, 0x8003, | ||
798 | 0x0048, 0x27c8, 0x2019, 0x4eaf, 0x1078, 0x2313, 0x702f, 0x8000, | ||
799 | 0x7830, 0xa084, 0x00c0, 0x00c0, 0x27cf, 0x0098, 0x27d7, 0x6008, | ||
800 | 0xa084, 0xffef, 0x600a, 0x1078, 0x39e0, 0x0078, 0x2523, 0x7200, | ||
801 | 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x27e4, 0x781b, 0x004f, | ||
802 | 0x1078, 0x39e0, 0x0078, 0x27f5, 0x6ab4, 0xa295, 0x2000, 0x7a5a, | ||
803 | 0x781b, 0x004f, 0x1078, 0x39e0, 0x7200, 0x2500, 0xa605, 0x0040, | ||
804 | 0x27f5, 0xa284, 0x0007, 0x1079, 0x2803, 0xad80, 0x0009, 0x7036, | ||
805 | 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x24fa, 0x6018, 0x8000, | ||
806 | 0x601a, 0x0078, 0x24fa, 0x280b, 0x4b4b, 0x4b4b, 0x4b3a, 0x4b4b, | ||
807 | 0x280b, 0x4b3a, 0x280b, 0x1078, 0x248c, 0x1078, 0x39c8, 0x0f7e, | ||
808 | 0x2079, 0x5200, 0x78cc, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x2831, | ||
809 | 0x706c, 0xa086, 0x0001, 0x00c0, 0x2820, 0x706e, 0x0078, 0x28c4, | ||
810 | 0x706c, 0xa086, 0x0005, 0x00c0, 0x282f, 0x7088, 0x2068, 0x681b, | ||
811 | 0x0004, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x706f, | ||
812 | 0x0000, 0x2011, 0x0004, 0x716c, 0xa186, 0x0001, 0x0040, 0x2852, | ||
813 | 0xa186, 0x0007, 0x00c0, 0x2842, 0x2009, 0x5238, 0x200b, 0x0005, | ||
814 | 0x0078, 0x2852, 0x2009, 0x5213, 0x2104, 0x2009, 0x5212, 0x200a, | ||
815 | 0x2009, 0x5238, 0x200b, 0x0001, 0x706f, 0x0000, 0x7073, 0x0001, | ||
816 | 0x0078, 0x2854, 0x706f, 0x0000, 0x1078, 0x4887, 0x157e, 0x20a9, | ||
817 | 0x0010, 0x2039, 0x0000, 0x1078, 0x37b0, 0xa7b8, 0x0100, 0x0070, | ||
818 | 0x2863, 0x0078, 0x285b, 0x157f, 0x7000, 0x0079, 0x2867, 0x2895, | ||
819 | 0x287c, 0x287c, 0x286f, 0x2895, 0x2895, 0x2895, 0x2895, 0x2021, | ||
820 | 0x525a, 0x2404, 0xa005, 0x0040, 0x2895, 0xad06, 0x00c0, 0x287c, | ||
821 | 0x6800, 0x2022, 0x0078, 0x288c, 0x6820, 0xa084, 0x0001, 0x00c0, | ||
822 | 0x2888, 0x6f14, 0x1078, 0x38bd, 0x1078, 0x34a2, 0x0078, 0x288c, | ||
823 | 0x7060, 0x2060, 0x6800, 0x6002, 0x6a1a, 0x6817, 0x0000, 0x6820, | ||
824 | 0xa085, 0x0008, 0x6822, 0x1078, 0x1cdc, 0x2021, 0x7600, 0x1078, | ||
825 | 0x28d1, 0x2021, 0x525a, 0x1078, 0x28d1, 0x157e, 0x20a9, 0x0000, | ||
826 | 0x2021, 0x7500, 0x1078, 0x28d1, 0x8420, 0x0070, 0x28a9, 0x0078, | ||
827 | 0x28a2, 0x2061, 0x5500, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, | ||
828 | 0x6110, 0x81ff, 0x0040, 0x28b8, 0xa102, 0x0050, 0x28b8, 0x6012, | ||
829 | 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, 0x28c0, 0x0078, 0x28af, | ||
830 | 0x8421, 0x00c0, 0x28ad, 0x157f, 0x709c, 0xa084, 0x8000, 0x0040, | ||
831 | 0x28cb, 0x1078, 0x3ace, 0x7003, 0x0000, 0x704b, 0x0000, 0x0078, | ||
832 | 0x24fa, 0x047e, 0x2404, 0xa005, 0x0040, 0x28e5, 0x2068, 0x6800, | ||
833 | 0x007e, 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, | ||
834 | 0x1078, 0x1cdc, 0x007f, 0x0078, 0x28d3, 0x047f, 0x2023, 0x0000, | ||
835 | 0x007c, 0xa282, 0x0003, 0x0050, 0x28ef, 0x1078, 0x248c, 0x2300, | ||
836 | 0x0079, 0x28f2, 0x28f5, 0x2968, 0x2985, 0xa282, 0x0002, 0x0040, | ||
837 | 0x28fb, 0x1078, 0x248c, 0x706c, 0x706f, 0x0000, 0x7093, 0x0000, | ||
838 | 0x0079, 0x2902, 0x290a, 0x290a, 0x290c, 0x2940, 0x34d7, 0x290a, | ||
839 | 0x2940, 0x290a, 0x1078, 0x248c, 0x7780, 0x1078, 0x37b0, 0x7780, | ||
840 | 0xa7bc, 0x0f00, 0x1078, 0x38bd, 0x6018, 0xa005, 0x0040, 0x2937, | ||
841 | 0x2021, 0x7600, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x29a0, | ||
842 | 0x0040, 0x2937, 0x157e, 0x20a9, 0x0000, 0x2021, 0x7500, 0x047e, | ||
843 | 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x29a0, 0x047f, 0x0040, | ||
844 | 0x2936, 0x8420, 0x0070, 0x2936, 0x0078, 0x2927, 0x157f, 0x8738, | ||
845 | 0xa784, 0x001f, 0x00c0, 0x2912, 0x0078, 0x2523, 0x0078, 0x2523, | ||
846 | 0x7780, 0x1078, 0x38bd, 0x6018, 0xa005, 0x0040, 0x2966, 0x2021, | ||
847 | 0x7600, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x29a0, 0x0040, | ||
848 | 0x2966, 0x157e, 0x20a9, 0x0000, 0x2021, 0x7500, 0x047e, 0x2009, | ||
849 | 0x0005, 0x2011, 0x0020, 0x1078, 0x29a0, 0x047f, 0x0040, 0x2965, | ||
850 | 0x8420, 0x0070, 0x2965, 0x0078, 0x2956, 0x157f, 0x0078, 0x2523, | ||
851 | 0x2200, 0x0079, 0x296b, 0x296e, 0x2970, 0x2970, 0x1078, 0x248c, | ||
852 | 0x2009, 0x0012, 0x706c, 0xa086, 0x0002, 0x0040, 0x2979, 0x2009, | ||
853 | 0x000e, 0x6818, 0xa084, 0x8000, 0x0040, 0x297f, 0x691a, 0x706f, | ||
854 | 0x0000, 0x7073, 0x0001, 0x0078, 0x3956, 0x2200, 0x0079, 0x2988, | ||
855 | 0x298d, 0x2970, 0x298b, 0x1078, 0x248c, 0x1078, 0x4887, 0x7000, | ||
856 | 0xa086, 0x0001, 0x00c0, 0x3467, 0x1078, 0x34b8, 0x6008, 0xa084, | ||
857 | 0xffef, 0x600a, 0x1078, 0x345a, 0x0040, 0x3467, 0x0078, 0x2635, | ||
858 | 0x2404, 0xa005, 0x0040, 0x29c3, 0x2068, 0x2d04, 0x007e, 0x6814, | ||
859 | 0xa706, 0x0040, 0x29af, 0x2d20, 0x007f, 0x0078, 0x29a1, 0x007f, | ||
860 | 0x2022, 0x691a, 0x6817, 0x0000, 0x6820, 0xa205, 0x6822, 0x1078, | ||
861 | 0x1cdc, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, | ||
862 | 0x1078, 0x34b8, 0x007c, 0xa085, 0x0001, 0x0078, 0x29c2, 0x2300, | ||
863 | 0x0079, 0x29ca, 0x29cf, 0x29cd, 0x2a68, 0x1078, 0x248c, 0x78ec, | ||
864 | 0xa084, 0x0001, 0x00c0, 0x29e3, 0x7000, 0xa086, 0x0004, 0x00c0, | ||
865 | 0x29db, 0x0078, 0x2a06, 0x1078, 0x34b8, 0x6008, 0xa084, 0xffef, | ||
866 | 0x600a, 0x0078, 0x3467, 0x78e4, 0xa005, 0x00d0, 0x2a06, 0x0018, | ||
867 | 0x24fa, 0x2008, 0xa084, 0x0030, 0x00c0, 0x29f2, 0x781b, 0x004f, | ||
868 | 0x0078, 0x24fa, 0x78ec, 0xa084, 0x0003, 0x0040, 0x29ee, 0x2100, | ||
869 | 0xa084, 0x0007, 0x0079, 0x29fc, 0x2a3f, 0x2a4a, 0x2a30, 0x2a04, | ||
870 | 0x39bb, 0x39bb, 0x2a04, 0x2a59, 0x1078, 0x248c, 0x7000, 0xa086, | ||
871 | 0x0004, 0x00c0, 0x2a20, 0x706c, 0xa086, 0x0002, 0x00c0, 0x2a16, | ||
872 | 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, 0x28e9, 0x706c, 0xa086, | ||
873 | 0x0006, 0x0040, 0x2a10, 0x706c, 0xa086, 0x0004, 0x0040, 0x2a10, | ||
874 | 0x79e4, 0xa184, 0x0030, 0x0040, 0x2a2a, 0x78ec, 0xa084, 0x0003, | ||
875 | 0x00c0, 0x2a2c, 0x0078, 0x300c, 0x2001, 0x0003, 0x0078, 0x2da0, | ||
876 | 0x6818, 0xa084, 0x8000, 0x0040, 0x2a37, 0x681b, 0x001d, 0x1078, | ||
877 | 0x378f, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x24fa, 0x6818, | ||
878 | 0xa084, 0x8000, 0x0040, 0x2a46, 0x681b, 0x001d, 0x1078, 0x378f, | ||
879 | 0x0078, 0x3986, 0x6818, 0xa084, 0x8000, 0x0040, 0x2a51, 0x681b, | ||
880 | 0x001d, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b, 0x00ca, 0x0078, | ||
881 | 0x24fa, 0x6818, 0xa084, 0x8000, 0x0040, 0x2a60, 0x681b, 0x001d, | ||
882 | 0x1078, 0x378f, 0x782b, 0x3008, 0x781b, 0x008f, 0x0078, 0x24fa, | ||
883 | 0xa584, 0x000f, 0x00c0, 0x2a85, 0x7000, 0x0079, 0x2a6f, 0x2523, | ||
884 | 0x2a79, 0x2a77, 0x3467, 0x3467, 0x3467, 0x3467, 0x2a77, 0x1078, | ||
885 | 0x248c, 0x1078, 0x34b8, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, | ||
886 | 0x345a, 0x0040, 0x3467, 0x0078, 0x2635, 0x78e4, 0xa005, 0x00d0, | ||
887 | 0x2a06, 0x0018, 0x2a06, 0x2008, 0xa084, 0x0030, 0x00c0, 0x2a94, | ||
888 | 0x781b, 0x004f, 0x0078, 0x24fa, 0x78ec, 0xa084, 0x0003, 0x0040, | ||
889 | 0x2a90, 0x2100, 0xa184, 0x0007, 0x0079, 0x2a9e, 0x2ab0, 0x2ab4, | ||
890 | 0x2aa8, 0x2aa6, 0x39bb, 0x39bb, 0x2aa6, 0x39b1, 0x1078, 0x248c, | ||
891 | 0x1078, 0x3797, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x24fa, | ||
892 | 0x1078, 0x3797, 0x0078, 0x3986, 0x1078, 0x3797, 0x782b, 0x3008, | ||
893 | 0x781b, 0x00ca, 0x0078, 0x24fa, 0x1078, 0x3797, 0x782b, 0x3008, | ||
894 | 0x781b, 0x008f, 0x0078, 0x24fa, 0x2300, 0x0079, 0x2ac7, 0x2acc, | ||
895 | 0x2aca, 0x2ace, 0x1078, 0x248c, 0x0078, 0x3180, 0x681b, 0x0008, | ||
896 | 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x3180, 0x78ec, | ||
897 | 0xa084, 0x0003, 0x0040, 0x3180, 0xa184, 0x0007, 0x0079, 0x2ae0, | ||
898 | 0x2ae8, 0x2ab4, 0x2a30, 0x3956, 0x39bb, 0x39bb, 0x2ae8, 0x39b1, | ||
899 | 0x1078, 0x396a, 0x0078, 0x24fa, 0xa282, 0x0005, 0x0050, 0x2af2, | ||
900 | 0x1078, 0x248c, 0x2300, 0x0079, 0x2af5, 0x2af8, 0x2d4d, 0x2d5b, | ||
901 | 0x2200, 0x0079, 0x2afb, 0x2b15, 0x2b02, 0x2b15, 0x2b00, 0x2d32, | ||
902 | 0x1078, 0x248c, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082, | ||
903 | 0x0020, 0x0048, 0x376b, 0xa08a, 0x0004, 0x00c8, 0x376b, 0x0079, | ||
904 | 0x2b11, 0x376b, 0x376b, 0x376b, 0x3719, 0x789b, 0x0018, 0x79a8, | ||
905 | 0xa184, 0x0080, 0x0040, 0x2b26, 0x0078, 0x376b, 0x7000, 0xa005, | ||
906 | 0x00c0, 0x2b1c, 0x2011, 0x0004, 0x0078, 0x32e9, 0xa184, 0x00ff, | ||
907 | 0xa08a, 0x0010, 0x00c8, 0x376b, 0x0079, 0x2b2e, 0x2b40, 0x2b3e, | ||
908 | 0x2b58, 0x2b5c, 0x2c17, 0x376b, 0x376b, 0x2c19, 0x376b, 0x376b, | ||
909 | 0x2d2e, 0x2d2e, 0x376b, 0x376b, 0x376b, 0x2d30, 0x1078, 0x248c, | ||
910 | 0xa684, 0x1000, 0x0040, 0x2b4d, 0x2001, 0x0500, 0x8000, 0x8000, | ||
911 | 0x783a, 0x781b, 0x008d, 0x0078, 0x24fa, 0x6818, 0xa084, 0x8000, | ||
912 | 0x0040, 0x2b56, 0x681b, 0x001d, 0x0078, 0x2b44, 0x0078, 0x3956, | ||
913 | 0x681b, 0x001d, 0x0078, 0x377b, 0x6920, 0x6922, 0xa684, 0x1800, | ||
914 | 0x00c0, 0x2b9d, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2ba5, 0x6818, | ||
915 | 0xa086, 0x0008, 0x00c0, 0x2b6e, 0x681b, 0x0000, 0xa684, 0x0400, | ||
916 | 0x0040, 0x2c13, 0xa684, 0x0080, 0x0040, 0x2b99, 0x7097, 0x0000, | ||
917 | 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, 0x0050, 0x2b99, 0xa08a, | ||
918 | 0x000c, 0x7196, 0x2001, 0x000c, 0x800c, 0x719a, 0x789b, 0x0061, | ||
919 | 0x78aa, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, | ||
920 | 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, | ||
921 | 0x157f, 0x781b, 0x0058, 0x0078, 0x24fa, 0xa684, 0x1000, 0x0040, | ||
922 | 0x2ba5, 0x781b, 0x0065, 0x0078, 0x24fa, 0xa684, 0x0060, 0x0040, | ||
923 | 0x2c0f, 0xa684, 0x0800, 0x0040, 0x2c0f, 0xa684, 0x8000, 0x00c0, | ||
924 | 0x2bb3, 0x0078, 0x2bcb, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x7adc, | ||
925 | 0x79d8, 0x78d0, 0x801b, 0x00c8, 0x2bbe, 0x8000, 0xa084, 0x003f, | ||
926 | 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, | ||
927 | 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040, 0x2bd3, 0xa6b4, | ||
928 | 0xbfff, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003, 0x00c0, 0x2be0, | ||
929 | 0x1078, 0x493d, 0x1078, 0x4b3a, 0x781b, 0x0064, 0x0078, 0x24fa, | ||
930 | 0xa006, 0x1078, 0x4c41, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, | ||
931 | 0xa105, 0x0040, 0x2bef, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, | ||
932 | 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0, | ||
933 | 0x2c01, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x0064, 0x0078, | ||
934 | 0x24fa, 0x781b, 0x0064, 0x2200, 0xa115, 0x00c0, 0x2c0b, 0x1078, | ||
935 | 0x4b4b, 0x0078, 0x24fa, 0x1078, 0x4b96, 0x0078, 0x24fa, 0x781b, | ||
936 | 0x0065, 0x0078, 0x24fa, 0x781b, 0x0058, 0x0078, 0x24fa, 0x1078, | ||
937 | 0x248c, 0x0078, 0x2c7a, 0x6920, 0xa184, 0x0100, 0x0040, 0x2c31, | ||
938 | 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, | ||
939 | 0xefff, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, | ||
940 | 0x2c69, 0xa184, 0x0200, 0x0040, 0x2c69, 0xa18c, 0xfdff, 0x6922, | ||
941 | 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002, 0x6004, | ||
942 | 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, | ||
943 | 0x0040, 0x2c69, 0x1078, 0x38b9, 0x1078, 0x35bb, 0x88ff, 0x0040, | ||
944 | 0x2c69, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004, | ||
945 | 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2c63, 0x782b, 0x3008, 0x781b, | ||
946 | 0x0056, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, | ||
947 | 0x24fa, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2c72, 0x781b, 0x0058, | ||
948 | 0x0078, 0x24fa, 0x781b, 0x0065, 0x0078, 0x24fa, 0x0078, 0x3773, | ||
949 | 0x0078, 0x3773, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x00c0, | ||
950 | 0x2c88, 0x6820, 0xa084, 0x0100, 0x0040, 0x2c78, 0x2009, 0x0008, | ||
951 | 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0, | ||
952 | 0x2cbf, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x2cb7, | ||
953 | 0x0048, 0x2c9c, 0x0078, 0x2cb9, 0xa380, 0x0002, 0xa102, 0x00c8, | ||
954 | 0x2cb7, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x7054, 0x2060, | ||
955 | 0x6000, 0xa084, 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5, 0x6006, | ||
956 | 0x0c7f, 0x7e58, 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x2c6a, 0x0078, | ||
957 | 0x2c1b, 0x24a8, 0x7aa8, 0x00f0, 0x2cb9, 0x0078, 0x2c8a, 0xa284, | ||
958 | 0x00f0, 0xa086, 0x0020, 0x00c0, 0x2d1f, 0x8318, 0x8318, 0x2300, | ||
959 | 0xa102, 0x0040, 0x2ccf, 0x0048, 0x2ccf, 0x0078, 0x2d1c, 0xa286, | ||
960 | 0x0023, 0x0040, 0x2c78, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, | ||
961 | 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008, 0xa085, | ||
962 | 0x0010, 0x600a, 0x0c7e, 0x7054, 0x2060, 0x6004, 0x2008, 0x2c48, | ||
963 | 0x0c7f, 0xa184, 0x0010, 0x0040, 0x2cf3, 0x1078, 0x38b9, 0x1078, | ||
964 | 0x36d0, 0x0078, 0x2d02, 0x0c7e, 0x7054, 0x2060, 0x6004, 0x2008, | ||
965 | 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2c69, 0x1078, 0x38b9, | ||
966 | 0x1078, 0x35bb, 0x88ff, 0x0040, 0x2c69, 0x789b, 0x0060, 0x2800, | ||
967 | 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2d16, | ||
968 | 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x24fa, 0x782b, 0x3008, | ||
969 | 0x781b, 0x0065, 0x0078, 0x24fa, 0x7aa8, 0x0078, 0x2c8a, 0x8318, | ||
970 | 0x2300, 0xa102, 0x0040, 0x2d28, 0x0048, 0x2d28, 0x0078, 0x2c8a, | ||
971 | 0xa284, 0x0080, 0x00c0, 0x377b, 0x0078, 0x3773, 0x0078, 0x377b, | ||
972 | 0x0078, 0x376b, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, | ||
973 | 0x0001, 0x0040, 0x2d3d, 0x1078, 0x248c, 0x7aa8, 0xa294, 0x00ff, | ||
974 | 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x376b, 0x0079, | ||
975 | 0x2d49, 0x376b, 0x3508, 0x376b, 0x3665, 0xa282, 0x0000, 0x00c0, | ||
976 | 0x2d53, 0x1078, 0x248c, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b, | ||
977 | 0x0065, 0x0078, 0x24fa, 0xa282, 0x0003, 0x00c0, 0x2d61, 0x1078, | ||
978 | 0x248c, 0xa484, 0x8000, 0x00c0, 0x2d84, 0x706c, 0xa005, 0x0040, | ||
979 | 0x2d6b, 0x1078, 0x248c, 0x6f14, 0x7782, 0xa7bc, 0x0f00, 0x1078, | ||
980 | 0x38bd, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, | ||
981 | 0x00c0, 0x2d6f, 0x1078, 0x3793, 0x706f, 0x0002, 0x2009, 0x5238, | ||
982 | 0x200b, 0x0009, 0x0078, 0x2d86, 0x1078, 0x379f, 0x782b, 0x3008, | ||
983 | 0x781b, 0x0065, 0x0078, 0x24fa, 0xa282, 0x0004, 0x0050, 0x2d92, | ||
984 | 0x1078, 0x248c, 0x2300, 0x0079, 0x2d95, 0x2d98, 0x2e81, 0x2eb4, | ||
985 | 0xa286, 0x0003, 0x0040, 0x2d9e, 0x1078, 0x248c, 0x2001, 0x0000, | ||
986 | 0x007e, 0x68c0, 0xa005, 0x0040, 0x2da7, 0x7003, 0x0003, 0x68a0, | ||
987 | 0xa084, 0x2000, 0x0040, 0x2db0, 0x6008, 0xa085, 0x0002, 0x600a, | ||
988 | 0x007f, 0x703e, 0x7000, 0xa084, 0x0007, 0x0079, 0x2db7, 0x2523, | ||
989 | 0x2dc1, 0x2dc1, 0x2fb6, 0x2ff2, 0x2523, 0x2ff2, 0x2dbf, 0x1078, | ||
990 | 0x248c, 0xa684, 0x1000, 0x00c0, 0x2dc9, 0x1078, 0x4887, 0x0040, | ||
991 | 0x2e5b, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2e11, 0xa186, 0x0008, | ||
992 | 0x00c0, 0x2de0, 0x1078, 0x34b8, 0x6008, 0xa084, 0xffef, 0x600a, | ||
993 | 0x1078, 0x345a, 0x0040, 0x2e11, 0x1078, 0x4887, 0x0078, 0x2df8, | ||
994 | 0xa186, 0x0028, 0x00c0, 0x2e11, 0x1078, 0x4887, 0x6008, 0xa084, | ||
995 | 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2df8, 0x8001, 0x601a, | ||
996 | 0xa005, 0x0040, 0x2df8, 0x8001, 0xa005, 0x0040, 0x2df8, 0x601e, | ||
997 | 0x6820, 0xa084, 0x0001, 0x0040, 0x2523, 0x6820, 0xa084, 0xfffe, | ||
998 | 0x6822, 0x7060, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, | ||
999 | 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2e0e, 0x6002, 0x6006, 0x0078, | ||
1000 | 0x2523, 0x017e, 0x1078, 0x2ee5, 0x017f, 0xa684, 0xdf00, 0x681e, | ||
1001 | 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x2e5b, 0xa186, 0x0002, | ||
1002 | 0x00c0, 0x2e5b, 0xa684, 0x0800, 0x00c0, 0x2e2e, 0xa684, 0x0060, | ||
1003 | 0x0040, 0x2e2e, 0x78d8, 0x7adc, 0x682e, 0x6a32, 0x6820, 0xa084, | ||
1004 | 0x0800, 0x00c0, 0x2e5b, 0x8717, 0xa294, 0x000f, 0x8213, 0x8213, | ||
1005 | 0x8213, 0xa290, 0x5480, 0xa290, 0x0000, 0x221c, 0xa384, 0x0100, | ||
1006 | 0x00c0, 0x2e44, 0x0078, 0x2e4a, 0x8210, 0x2204, 0xa085, 0x0018, | ||
1007 | 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2e57, 0x68a0, 0xa084, | ||
1008 | 0x0100, 0x00c0, 0x2e57, 0x1078, 0x2f69, 0x0078, 0x2523, 0x6008, | ||
1009 | 0xa085, 0x0002, 0x600a, 0x6916, 0x6818, 0xa084, 0x8000, 0x0040, | ||
1010 | 0x2e63, 0x703c, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x1078, 0x34a9, | ||
1011 | 0x1078, 0x34b8, 0x00c0, 0x2e70, 0x6008, 0xa084, 0xffef, 0x600a, | ||
1012 | 0x6820, 0xa084, 0x0001, 0x00c0, 0x2e79, 0x1078, 0x34a2, 0x0078, | ||
1013 | 0x2e7d, 0x7060, 0x2060, 0x6800, 0x6002, 0x1078, 0x1cdc, 0x0078, | ||
1014 | 0x2523, 0xa282, 0x0004, 0x0048, 0x2e87, 0x1078, 0x248c, 0x2200, | ||
1015 | 0x0079, 0x2e8a, 0x2e85, 0x2e8e, 0x2e9b, 0x2e8e, 0x7000, 0xa086, | ||
1016 | 0x0005, 0x0040, 0x2e97, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b, | ||
1017 | 0x0065, 0x0078, 0x24fa, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, | ||
1018 | 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, | ||
1019 | 0x0040, 0x2eb0, 0xa186, 0x0000, 0x0040, 0x2eb0, 0x0078, 0x376b, | ||
1020 | 0x781b, 0x0065, 0x0078, 0x24fa, 0x6820, 0xa085, 0x0004, 0x6822, | ||
1021 | 0x82ff, 0x00c0, 0x2ebf, 0x1078, 0x378f, 0x0078, 0x2ec6, 0x8211, | ||
1022 | 0x0040, 0x2ec4, 0x1078, 0x248c, 0x1078, 0x379f, 0x782b, 0x3008, | ||
1023 | 0x781b, 0x0065, 0x0078, 0x24fa, 0x702c, 0x8003, 0x0048, 0x2ed6, | ||
1024 | 0x2019, 0x4eaf, 0x1078, 0x2313, 0x702f, 0x8000, 0x1078, 0x39e0, | ||
1025 | 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2ee2, 0x0018, 0x2ee2, 0x791a, | ||
1026 | 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060, 0x00c0, | ||
1027 | 0x2eef, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2f68, 0xa684, | ||
1028 | 0x0800, 0x00c0, 0x2f11, 0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, | ||
1029 | 0x0800, 0x00c0, 0x2f11, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x703c, | ||
1030 | 0xa005, 0x00c0, 0x2f09, 0x2200, 0xa105, 0x0040, 0x2f10, 0x703f, | ||
1031 | 0x0015, 0x7000, 0xa086, 0x0006, 0x0040, 0x2f10, 0x1078, 0x4887, | ||
1032 | 0x007c, 0xa684, 0x0020, 0x0040, 0x2f33, 0xa684, 0x4000, 0x0040, | ||
1033 | 0x2f1f, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2f09, 0x68b4, | ||
1034 | 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2f19, 0x703c, | ||
1035 | 0xa005, 0x00c0, 0x2f2d, 0x703f, 0x0015, 0x79d8, 0x7adc, 0x692e, | ||
1036 | 0x6a32, 0x0078, 0x2f09, 0xa684, 0x4000, 0x0040, 0x2f3d, 0x682f, | ||
1037 | 0x0000, 0x6833, 0x0000, 0x0078, 0x2f09, 0x68b4, 0xa084, 0x4800, | ||
1038 | 0xa635, 0xa684, 0x4000, 0x00c0, 0x2f37, 0x703c, 0xa005, 0x00c0, | ||
1039 | 0x2f4b, 0x703f, 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb, 0x00c8, | ||
1040 | 0x2f52, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, | ||
1041 | 0x6a32, 0x2100, 0xa205, 0x00c0, 0x2f5f, 0x0078, 0x2f09, 0x7000, | ||
1042 | 0xa086, 0x0006, 0x0040, 0x2f68, 0x1078, 0x4c41, 0x0078, 0x2f09, | ||
1043 | 0x007c, 0x6008, 0xa085, 0x0200, 0x600a, 0xa384, 0x0200, 0x0040, | ||
1044 | 0x2f75, 0x6008, 0xa085, 0x0002, 0x600a, 0x681b, 0x0006, 0x688f, | ||
1045 | 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, | ||
1046 | 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, | ||
1047 | 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0079, 0x2f90, | ||
1048 | 0x2523, 0x2f9a, 0x2fa3, 0x2f98, 0x2f98, 0x2f98, 0x2f98, 0x2f98, | ||
1049 | 0x1078, 0x248c, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2fa3, 0x1078, | ||
1050 | 0x34a2, 0x0078, 0x2fa9, 0x7060, 0x2c50, 0x2060, 0x6800, 0x6002, | ||
1051 | 0x2a60, 0x2021, 0x525a, 0x2404, 0xa005, 0x0040, 0x2fb2, 0x2020, | ||
1052 | 0x0078, 0x2fab, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078, 0x34a9, | ||
1053 | 0x1078, 0x34b8, 0x6008, 0xa084, 0xfdff, 0x600a, 0x682b, 0x0000, | ||
1054 | 0x789b, 0x000e, 0x6f14, 0x6817, 0x0002, 0x1078, 0x4c89, 0xa684, | ||
1055 | 0x0800, 0x0040, 0x2fcf, 0x691c, 0xa18d, 0x2000, 0x691e, 0x6818, | ||
1056 | 0xa084, 0x8000, 0x0040, 0x2fdf, 0x7868, 0xa08c, 0x00ff, 0x0040, | ||
1057 | 0x2fdd, 0x681b, 0x001e, 0x0078, 0x2fdf, 0x681b, 0x0000, 0x2021, | ||
1058 | 0x525a, 0x2404, 0xad06, 0x0040, 0x2fe6, 0x7460, 0x6800, 0x2022, | ||
1059 | 0x68c3, 0x0000, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078, 0x1cdc, | ||
1060 | 0x0078, 0x2523, 0x1078, 0x2ee5, 0x682b, 0x0000, 0x2001, 0x000e, | ||
1061 | 0x6f14, 0x1078, 0x39e6, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xa084, | ||
1062 | 0x8000, 0x0040, 0x3005, 0x703c, 0x681a, 0xa68c, 0xdf00, 0x691e, | ||
1063 | 0x706f, 0x0000, 0x0078, 0x2523, 0x7000, 0xa005, 0x00c0, 0x3012, | ||
1064 | 0x0078, 0x2523, 0xa006, 0x1078, 0x4887, 0x6817, 0x0000, 0x681b, | ||
1065 | 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa085, | ||
1066 | 0x00ff, 0x6822, 0x7000, 0x0079, 0x3025, 0x2523, 0x302f, 0x302f, | ||
1067 | 0x3031, 0x3031, 0x3031, 0x3031, 0x302d, 0x1078, 0x248c, 0x1078, | ||
1068 | 0x34b8, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x3472, 0x2300, | ||
1069 | 0x0079, 0x303a, 0x303d, 0x303f, 0x3098, 0x1078, 0x248c, 0xa684, | ||
1070 | 0x8000, 0x00c0, 0x307d, 0x7000, 0x0079, 0x3046, 0x2523, 0x3050, | ||
1071 | 0x3050, 0x306c, 0x3050, 0x3079, 0x306c, 0x304e, 0x1078, 0x248c, | ||
1072 | 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x3068, 0xa6b4, 0xffdf, | ||
1073 | 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x6eb6, 0x681c, 0xa084, | ||
1074 | 0xffdf, 0x681e, 0x1078, 0x4887, 0x1078, 0x4b4b, 0x0078, 0x3956, | ||
1075 | 0xa684, 0x2000, 0x0040, 0x305a, 0x6818, 0xa084, 0x8000, 0x0040, | ||
1076 | 0x3079, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x3079, 0x681b, | ||
1077 | 0x0007, 0x1078, 0x396a, 0x0078, 0x24fa, 0xa6b4, 0x7fff, 0x7e5a, | ||
1078 | 0x7adc, 0x79d8, 0x78d0, 0x79d2, 0x801b, 0x00c8, 0x3088, 0x8000, | ||
1079 | 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, | ||
1080 | 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x0065, 0x007c, | ||
1081 | 0x1078, 0x248c, 0x2300, 0x0079, 0x309d, 0x30a0, 0x30a2, 0x30eb, | ||
1082 | 0x1078, 0x248c, 0xa684, 0x8000, 0x00c0, 0x30da, 0x7000, 0x0079, | ||
1083 | 0x30a9, 0x2523, 0x30b3, 0x30b3, 0x30cf, 0x30b3, 0x30d6, 0x30cf, | ||
1084 | 0x30b1, 0x1078, 0x248c, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, | ||
1085 | 0x30cb, 0xa6b4, 0xffbf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, | ||
1086 | 0x6eb6, 0x681c, 0xa084, 0xffbf, 0x681e, 0x1078, 0x4887, 0x1078, | ||
1087 | 0x4b4b, 0x0078, 0x3956, 0xa684, 0x2000, 0x0040, 0x30bd, 0x6818, | ||
1088 | 0xa084, 0x8000, 0x0040, 0x30d6, 0x681b, 0x0007, 0x781b, 0x00ca, | ||
1089 | 0x0078, 0x24fa, 0xa6b4, 0x7fff, 0x7e5a, 0x7adc, 0x79d8, 0x6b98, | ||
1090 | 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2, | ||
1091 | 0x781b, 0x0065, 0x007c, 0x6820, 0xa085, 0x0004, 0x6822, 0x1078, | ||
1092 | 0x3921, 0xa6b5, 0x0800, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b, | ||
1093 | 0x0065, 0x0078, 0x24fa, 0x2300, 0x0079, 0x30fe, 0x3101, 0x3103, | ||
1094 | 0x3105, 0x1078, 0x248c, 0x0078, 0x377b, 0xa684, 0x0400, 0x00c0, | ||
1095 | 0x312e, 0x79e4, 0xa184, 0x0020, 0x0040, 0x3115, 0x78ec, 0xa084, | ||
1096 | 0x0003, 0x0040, 0x3115, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, | ||
1097 | 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, 0xa184, 0x0020, 0x0040, | ||
1098 | 0x3126, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x312a, 0x2001, 0x0014, | ||
1099 | 0x0078, 0x2da0, 0xa184, 0x0007, 0x0079, 0x3166, 0x7a90, 0xa294, | ||
1100 | 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, 0x0040, 0x3164, 0x789b, | ||
1101 | 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0, 0x3155, 0x7ba8, 0x7ba8, | ||
1102 | 0xa386, 0x0001, 0x00c0, 0x3148, 0x2009, 0xfff7, 0x0078, 0x314e, | ||
1103 | 0xa386, 0x0003, 0x00c0, 0x3155, 0x2009, 0xffef, 0x0c7e, 0x7054, | ||
1104 | 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, | ||
1105 | 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, | ||
1106 | 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x3956, 0x2a3f, 0x2a4a, | ||
1107 | 0x3170, 0x3178, 0x316e, 0x316e, 0x3956, 0x3956, 0x1078, 0x248c, | ||
1108 | 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x3960, | ||
1109 | 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x3956, | ||
1110 | 0x79e4, 0xa184, 0x0030, 0x0040, 0x318a, 0x78ec, 0xa084, 0x0003, | ||
1111 | 0x00c0, 0x31b1, 0x7000, 0xa086, 0x0004, 0x00c0, 0x31a4, 0x706c, | ||
1112 | 0xa086, 0x0002, 0x00c0, 0x319a, 0x2011, 0x0002, 0x2019, 0x0000, | ||
1113 | 0x0078, 0x28e9, 0x706c, 0xa086, 0x0006, 0x0040, 0x3194, 0x706c, | ||
1114 | 0xa086, 0x0004, 0x0040, 0x3194, 0x7000, 0xa086, 0x0000, 0x0040, | ||
1115 | 0x24fa, 0x6818, 0xa085, 0x8000, 0x681a, 0x2001, 0x0014, 0x0078, | ||
1116 | 0x2da0, 0xa184, 0x0007, 0x0079, 0x31b5, 0x3956, 0x3956, 0x31bd, | ||
1117 | 0x3956, 0x39bb, 0x39bb, 0x3956, 0x3956, 0xa684, 0x0080, 0x0040, | ||
1118 | 0x31ec, 0x7194, 0x81ff, 0x0040, 0x31ec, 0xa182, 0x000d, 0x00d0, | ||
1119 | 0x31cd, 0x7097, 0x0000, 0x0078, 0x31d2, 0xa182, 0x000c, 0x7096, | ||
1120 | 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa, 0x157e, 0x137e, 0x147e, | ||
1121 | 0x7098, 0x8114, 0xa210, 0x729a, 0xa080, 0x000b, 0xad00, 0x2098, | ||
1122 | 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, | ||
1123 | 0x137f, 0x157f, 0x0078, 0x3960, 0xa684, 0x0400, 0x00c0, 0x322d, | ||
1124 | 0x6820, 0xa084, 0x0001, 0x0040, 0x3960, 0xa68c, 0x0060, 0xa684, | ||
1125 | 0x0060, 0x0040, 0x3201, 0xa086, 0x0060, 0x00c0, 0x3201, 0xa18d, | ||
1126 | 0x4000, 0xa18c, 0xfffb, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, | ||
1127 | 0x0000, 0x789b, 0x0061, 0x6818, 0xa085, 0x8000, 0x681a, 0x78aa, | ||
1128 | 0x8008, 0x810c, 0x0040, 0x34d1, 0xa18c, 0x00f8, 0x00c0, 0x34d1, | ||
1129 | 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, | ||
1130 | 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, | ||
1131 | 0x6814, 0x8007, 0x7882, 0x0078, 0x3960, 0x6818, 0xa084, 0x8000, | ||
1132 | 0x0040, 0x3234, 0x681b, 0x0008, 0x781b, 0x00c0, 0x0078, 0x24fa, | ||
1133 | 0x2300, 0x0079, 0x323b, 0x3240, 0x32d4, 0x323e, 0x1078, 0x248c, | ||
1134 | 0x7000, 0xa084, 0x0007, 0x0079, 0x3245, 0x2523, 0x324f, 0x3284, | ||
1135 | 0x325a, 0x324d, 0x2523, 0x324d, 0x324d, 0x1078, 0x248c, 0x681c, | ||
1136 | 0xa084, 0x2000, 0x0040, 0x3268, 0x6008, 0xa085, 0x0002, 0x600a, | ||
1137 | 0x0078, 0x3268, 0x68c0, 0xa005, 0x00c0, 0x3284, 0x6920, 0xa18d, | ||
1138 | 0x0001, 0x6922, 0x68c3, 0x0001, 0x6800, 0x706a, 0x0078, 0x327e, | ||
1139 | 0x6920, 0xa18d, 0x0001, 0x6922, 0x6800, 0x6006, 0xa005, 0x00c0, | ||
1140 | 0x3272, 0x6002, 0x681c, 0xa084, 0x000e, 0x0040, 0x327e, 0x7014, | ||
1141 | 0x68ba, 0x7130, 0xa188, 0x7500, 0x0078, 0x3280, 0x2009, 0x7600, | ||
1142 | 0x2104, 0x6802, 0x2d0a, 0x7162, 0x6eb6, 0xa684, 0x0060, 0x0040, | ||
1143 | 0x32d2, 0xa684, 0x0800, 0x00c0, 0x3298, 0xa684, 0x7fff, 0x68b6, | ||
1144 | 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, 0x4887, 0x0078, 0x32d2, | ||
1145 | 0xa684, 0x0020, 0x0040, 0x32ad, 0x68c0, 0xa005, 0x0040, 0x32a4, | ||
1146 | 0x1078, 0x4c89, 0x0078, 0x32a7, 0xa006, 0x1078, 0x4c41, 0x79d8, | ||
1147 | 0x7adc, 0x69aa, 0x6aa6, 0x0078, 0x32b3, 0x1078, 0x38ca, 0x69aa, | ||
1148 | 0x6aa6, 0x1078, 0x4c41, 0xa684, 0x8000, 0x0040, 0x32d2, 0xa684, | ||
1149 | 0x7fff, 0x68b6, 0x7adc, 0x79d8, 0xa684, 0x0020, 0x00c0, 0x32ca, | ||
1150 | 0x78d0, 0x801b, 0x00c8, 0x32c5, 0x8000, 0xa084, 0x003f, 0xa108, | ||
1151 | 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, | ||
1152 | 0xa303, 0x68ae, 0x0078, 0x2523, 0x0078, 0x377b, 0x7037, 0x0000, | ||
1153 | 0xa282, 0x0006, 0x0050, 0x32de, 0x1078, 0x248c, 0x7000, 0xa084, | ||
1154 | 0x0007, 0x10c0, 0x3a8c, 0x2300, 0x0079, 0x32e6, 0x32e9, 0x3312, | ||
1155 | 0x3326, 0x2200, 0x0079, 0x32ec, 0x3310, 0x377b, 0x32f2, 0x3310, | ||
1156 | 0x3342, 0x3384, 0x7003, 0x0005, 0x2001, 0x7710, 0x2068, 0x704a, | ||
1157 | 0x157e, 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x3302, | ||
1158 | 0x0078, 0x32fb, 0x157f, 0xad80, 0x0009, 0x7036, 0x6817, 0x0000, | ||
1159 | 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x0078, 0x376b, | ||
1160 | 0x1078, 0x248c, 0x7003, 0x0005, 0x2001, 0x7710, 0x2068, 0x704a, | ||
1161 | 0xad80, 0x0009, 0x7036, 0x2200, 0x0079, 0x331e, 0x377b, 0x3324, | ||
1162 | 0x3324, 0x3342, 0x3324, 0x377b, 0x1078, 0x248c, 0x7003, 0x0005, | ||
1163 | 0x2001, 0x7710, 0x2068, 0x704a, 0xad80, 0x0009, 0x7036, 0x2200, | ||
1164 | 0x0079, 0x3332, 0x333a, 0x3338, 0x3338, 0x333a, 0x3338, 0x333a, | ||
1165 | 0x1078, 0x248c, 0x1078, 0x379f, 0x782b, 0x3008, 0x781b, 0x0065, | ||
1166 | 0x0078, 0x24fa, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, | ||
1167 | 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x7600, 0x2d04, | ||
1168 | 0x2d08, 0x7162, 0x2068, 0xa005, 0x0040, 0x335d, 0x6814, 0xa206, | ||
1169 | 0x0040, 0x3379, 0x6800, 0x0078, 0x3350, 0x7003, 0x0005, 0x2001, | ||
1170 | 0x7710, 0x2068, 0x704a, 0x7036, 0x157e, 0x20a9, 0x0031, 0x2003, | ||
1171 | 0x0000, 0x8000, 0x0070, 0x336e, 0x0078, 0x3367, 0x157f, 0xad80, | ||
1172 | 0x0009, 0x7036, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, | ||
1173 | 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x33d3, | ||
1174 | 0x1078, 0x3797, 0x0078, 0x33d3, 0x7003, 0x0002, 0x7a80, 0xa294, | ||
1175 | 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, | ||
1176 | 0x79a8, 0xa18c, 0x00ff, 0xa1e8, 0x7500, 0x2d04, 0x2d08, 0x7162, | ||
1177 | 0x2068, 0xa005, 0x0040, 0x33a3, 0x6814, 0xa206, 0x0040, 0x33be, | ||
1178 | 0x6800, 0x0078, 0x3396, 0x7003, 0x0005, 0x2001, 0x7710, 0x2068, | ||
1179 | 0x704a, 0x157e, 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, | ||
1180 | 0x33b3, 0x0078, 0x33ac, 0x157f, 0xad80, 0x0009, 0x7036, 0x6a16, | ||
1181 | 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, | ||
1182 | 0x6820, 0xa084, 0x0c00, 0x0040, 0x33d3, 0xa084, 0x0800, 0x0040, | ||
1183 | 0x33cd, 0x1078, 0x379b, 0x0078, 0x33d3, 0x1078, 0x3797, 0x708b, | ||
1184 | 0x0000, 0x0078, 0x33d3, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003, | ||
1185 | 0x8003, 0x8003, 0xa080, 0x5480, 0x2060, 0x7056, 0x6000, 0x705a, | ||
1186 | 0x6004, 0x705e, 0xa684, 0x0060, 0x0040, 0x342b, 0x6b98, 0x6c94, | ||
1187 | 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x340d, 0x7bd2, 0x7bda, 0x7cd6, | ||
1188 | 0x7cde, 0xa6b4, 0xb7ff, 0x7e5a, 0xa684, 0x0060, 0xa086, 0x0060, | ||
1189 | 0x0040, 0x342b, 0x68c0, 0xa005, 0x0040, 0x3406, 0x7003, 0x0003, | ||
1190 | 0x682b, 0x0000, 0x1078, 0x4b3a, 0x0078, 0x3408, 0x1078, 0x4b4b, | ||
1191 | 0xa6b5, 0x2000, 0x7e5a, 0x0078, 0x342b, 0x68b0, 0xa31a, 0x2100, | ||
1192 | 0xa423, 0x2400, 0xa305, 0x0040, 0x342b, 0x7bd2, 0x7bda, 0x7cd6, | ||
1193 | 0x7cde, 0x68b0, 0xa6b4, 0xbfff, 0x7e5a, 0x007e, 0x68c0, 0xa005, | ||
1194 | 0x007f, 0x0040, 0x3429, 0x7003, 0x0003, 0x1078, 0x4b3a, 0x0078, | ||
1195 | 0x342b, 0x1078, 0x4b96, 0x077f, 0x1078, 0x38bd, 0x2009, 0x0065, | ||
1196 | 0xa684, 0x0004, 0x0040, 0x344c, 0x78e4, 0xa084, 0x0030, 0x0040, | ||
1197 | 0x3444, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3444, 0x782b, 0x3008, | ||
1198 | 0x2009, 0x0065, 0x0078, 0x344c, 0x0f7e, 0x2079, 0x5200, 0x1078, | ||
1199 | 0x4887, 0x0f7f, 0x0040, 0x2523, 0x791a, 0x2d00, 0x704a, 0x8207, | ||
1200 | 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x5480, 0x2048, | ||
1201 | 0x0078, 0x24fa, 0x6020, 0xa005, 0x0040, 0x3466, 0x8001, 0x6022, | ||
1202 | 0x6008, 0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, | ||
1203 | 0x1078, 0x4887, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, | ||
1204 | 0x681f, 0x0100, 0x7000, 0xa084, 0x0007, 0x0079, 0x3477, 0x2523, | ||
1205 | 0x3481, 0x3481, 0x349e, 0x3489, 0x3487, 0x3489, 0x347f, 0x1078, | ||
1206 | 0x248c, 0x1078, 0x34a9, 0x1078, 0x34a2, 0x1078, 0x1cdc, 0x0078, | ||
1207 | 0x2523, 0x706c, 0x706f, 0x0000, 0x7093, 0x0000, 0x0079, 0x3490, | ||
1208 | 0x349a, 0x349a, 0x3498, 0x3498, 0x3498, 0x349a, 0x3498, 0x349a, | ||
1209 | 0x0079, 0x2902, 0x706f, 0x0000, 0x0078, 0x2523, 0x681b, 0x0000, | ||
1210 | 0x0078, 0x2fb6, 0x6800, 0xa005, 0x00c0, 0x34a7, 0x6002, 0x6006, | ||
1211 | 0x007c, 0x6010, 0xa005, 0x0040, 0x34b2, 0x8001, 0x00d0, 0x34b2, | ||
1212 | 0x1078, 0x248c, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, | ||
1213 | 0x6018, 0xa005, 0x0040, 0x34be, 0x8001, 0x601a, 0x007c, 0x1078, | ||
1214 | 0x39e0, 0x681b, 0x0018, 0x0078, 0x34f5, 0x1078, 0x39e0, 0x681b, | ||
1215 | 0x0019, 0x0078, 0x34f5, 0x1078, 0x39e0, 0x681b, 0x001a, 0x0078, | ||
1216 | 0x34f5, 0x1078, 0x39e0, 0x681b, 0x0003, 0x0078, 0x34f5, 0x7780, | ||
1217 | 0x1078, 0x38bd, 0x7184, 0xa18c, 0x00ff, 0xa1e8, 0x7500, 0x2d04, | ||
1218 | 0x2d08, 0x2068, 0xa005, 0x00c0, 0x34e7, 0x0078, 0x2523, 0x6814, | ||
1219 | 0x7280, 0xa206, 0x0040, 0x34ef, 0x6800, 0x0078, 0x34e0, 0x6800, | ||
1220 | 0x200a, 0x681b, 0x0005, 0x708b, 0x0000, 0x1078, 0x34a9, 0x6820, | ||
1221 | 0xa084, 0x0001, 0x00c0, 0x34fe, 0x1078, 0x34a2, 0x1078, 0x34b8, | ||
1222 | 0x681f, 0x0000, 0x6823, 0x0020, 0x1078, 0x1cdc, 0x0078, 0x2523, | ||
1223 | 0xa282, 0x0003, 0x00c0, 0x376b, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, | ||
1224 | 0xa4a4, 0x00ff, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0100, | ||
1225 | 0x0040, 0x356c, 0xa18c, 0xfeff, 0x6922, 0xa4a4, 0x00ff, 0x0040, | ||
1226 | 0x3556, 0xa482, 0x000c, 0x0048, 0x3529, 0x0040, 0x3529, 0x2021, | ||
1227 | 0x000c, 0x852b, 0x852b, 0x1078, 0x382e, 0x0040, 0x3533, 0x1078, | ||
1228 | 0x3627, 0x0078, 0x355f, 0x1078, 0x37e9, 0x0c7e, 0x2960, 0x6004, | ||
1229 | 0xa084, 0xfff5, 0x6006, 0x1078, 0x3652, 0x0c7f, 0x6920, 0xa18d, | ||
1230 | 0x0100, 0x6922, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, | ||
1231 | 0x00c0, 0x3550, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x24fa, | ||
1232 | 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x24fa, 0x0c7e, 0x2960, | ||
1233 | 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3652, 0x0c7f, 0x7e58, | ||
1234 | 0xa684, 0x0400, 0x00c0, 0x3568, 0x781b, 0x0058, 0x0078, 0x24fa, | ||
1235 | 0x781b, 0x0065, 0x0078, 0x24fa, 0x0c7e, 0x7054, 0x2060, 0x6100, | ||
1236 | 0xa18c, 0x1000, 0x0040, 0x35ac, 0x6208, 0x8217, 0xa294, 0x00ff, | ||
1237 | 0xa282, 0x000c, 0x0048, 0x3580, 0x0040, 0x3580, 0x2011, 0x000c, | ||
1238 | 0x2400, 0xa202, 0x00c8, 0x3585, 0x2220, 0x6208, 0xa294, 0x00ff, | ||
1239 | 0x7018, 0xa086, 0x0028, 0x00c0, 0x3595, 0xa282, 0x0019, 0x00c8, | ||
1240 | 0x359b, 0x2011, 0x0019, 0x0078, 0x359b, 0xa282, 0x000c, 0x00c8, | ||
1241 | 0x359b, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x35a0, 0x2228, | ||
1242 | 0x1078, 0x37ed, 0x852b, 0x852b, 0x1078, 0x382e, 0x0040, 0x35ac, | ||
1243 | 0x1078, 0x3627, 0x0078, 0x35b0, 0x1078, 0x37e9, 0x1078, 0x3652, | ||
1244 | 0x7858, 0xa085, 0x0004, 0x785a, 0x0c7f, 0x782b, 0x3008, 0x781b, | ||
1245 | 0x0065, 0x0078, 0x24fa, 0x0c7e, 0x2960, 0x6000, 0xd0e4, 0x00c0, | ||
1246 | 0x35d5, 0xd0b4, 0x00c0, 0x35cf, 0x6010, 0xa084, 0x000f, 0x00c0, | ||
1247 | 0x35cf, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, | ||
1248 | 0x0032, 0x2019, 0x0000, 0x0078, 0x35fc, 0x68a0, 0xa084, 0x0200, | ||
1249 | 0x00c0, 0x35cf, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, 0x0028, | ||
1250 | 0x00c0, 0x35ea, 0xa282, 0x0019, 0x00c8, 0x35f0, 0x2011, 0x0019, | ||
1251 | 0x0078, 0x35f0, 0xa282, 0x000c, 0x00c8, 0x35f0, 0x2011, 0x000c, | ||
1252 | 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c, 0x0048, 0x35fc, | ||
1253 | 0x0040, 0x35fc, 0x2019, 0x000c, 0x78ab, 0x0001, 0x78ab, 0x0003, | ||
1254 | 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, | ||
1255 | 0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0xa18c, 0xfff5, | ||
1256 | 0x6106, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x3617, 0x78ab, | ||
1257 | 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, | ||
1258 | 0x0005, 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e, | ||
1259 | 0x7154, 0x2160, 0x1078, 0x362e, 0x0c7f, 0x007c, 0x2008, 0xa084, | ||
1260 | 0xfff0, 0xa425, 0x7c86, 0x6018, 0x789a, 0x7cae, 0x6412, 0x78a4, | ||
1261 | 0xa084, 0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016, 0x788a, | ||
1262 | 0xa4a4, 0x000f, 0x8427, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa405, | ||
1263 | 0x600e, 0x78ec, 0xd08c, 0x00c0, 0x3651, 0x6004, 0xa084, 0xfff5, | ||
1264 | 0x6006, 0x007c, 0x0c7e, 0x7054, 0x2060, 0x1078, 0x3659, 0x0c7f, | ||
1265 | 0x007c, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, 0x6012, | ||
1266 | 0x7884, 0xa084, 0xfff0, 0x7886, 0x007c, 0xa282, 0x0002, 0x00c0, | ||
1267 | 0x376b, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0200, | ||
1268 | 0x0040, 0x36ae, 0xa18c, 0xfdff, 0x6922, 0xa294, 0x00ff, 0xa282, | ||
1269 | 0x0002, 0x00c8, 0x376b, 0x1078, 0x36f9, 0x1078, 0x3652, 0xa980, | ||
1270 | 0x0001, 0x200c, 0x1078, 0x38b9, 0x1078, 0x35bb, 0x88ff, 0x0040, | ||
1271 | 0x36a1, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004, | ||
1272 | 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x369b, 0x782b, 0x3008, 0x781b, | ||
1273 | 0x0056, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, | ||
1274 | 0x24fa, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x36aa, 0x781b, 0x0058, | ||
1275 | 0x0078, 0x24fa, 0x781b, 0x0065, 0x0078, 0x24fa, 0xa282, 0x0002, | ||
1276 | 0x00c8, 0x36b6, 0xa284, 0x0001, 0x0040, 0x36c0, 0x7154, 0xa188, | ||
1277 | 0x0000, 0x210c, 0xa18c, 0x2000, 0x00c0, 0x36c0, 0x2011, 0x0000, | ||
1278 | 0x1078, 0x37db, 0x1078, 0x36f9, 0x1078, 0x3652, 0x7858, 0xa085, | ||
1279 | 0x0004, 0x785a, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x24fa, | ||
1280 | 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x00c0, | ||
1281 | 0x36e9, 0xd0bc, 0x00c0, 0x36e7, 0x6014, 0xa084, 0x0040, 0x00c0, | ||
1282 | 0x36e7, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, 0x36f6, 0x2011, | ||
1283 | 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, | ||
1284 | 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822, 0x027f, 0x0c7f, | ||
1285 | 0x007c, 0x0c7e, 0x7054, 0x2060, 0x1078, 0x3700, 0x0c7f, 0x007c, | ||
1286 | 0x82ff, 0x0040, 0x3705, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, | ||
1287 | 0x789a, 0x78a4, 0xa084, 0xffbf, 0xa205, 0x78a6, 0x788a, 0x6016, | ||
1288 | 0x78ec, 0xd08c, 0x00c0, 0x3718, 0x6004, 0xa084, 0xffef, 0x6006, | ||
1289 | 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, 0x3722, 0x007f, | ||
1290 | 0x0078, 0x3725, 0x007f, 0x0078, 0x3767, 0xa684, 0x0020, 0x0040, | ||
1291 | 0x3767, 0x7888, 0xa084, 0x0040, 0x0040, 0x3767, 0x7bb8, 0xa384, | ||
1292 | 0x003f, 0x831b, 0x00c8, 0x3735, 0x8000, 0xa005, 0x0040, 0x374b, | ||
1293 | 0x831b, 0x00c8, 0x373e, 0x8001, 0x0040, 0x3763, 0xa684, 0x4000, | ||
1294 | 0x0040, 0x374b, 0x78b8, 0x801b, 0x00c8, 0x3747, 0x8000, 0xa084, | ||
1295 | 0x003f, 0x00c0, 0x3763, 0xa6b4, 0xbfff, 0x7e5a, 0x79d8, 0x7adc, | ||
1296 | 0x2001, 0x0001, 0xa108, 0x00c8, 0x3757, 0xa291, 0x0000, 0x79d2, | ||
1297 | 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x4c41, 0x781b, 0x0064, 0x1078, | ||
1298 | 0x4ac6, 0x0078, 0x24fa, 0x781b, 0x0064, 0x0078, 0x24fa, 0x781b, | ||
1299 | 0x0065, 0x0078, 0x24fa, 0x1078, 0x37a3, 0x782b, 0x3008, 0x781b, | ||
1300 | 0x0065, 0x0078, 0x24fa, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b, | ||
1301 | 0x0065, 0x0078, 0x24fa, 0x6827, 0x0002, 0x1078, 0x3797, 0x78e4, | ||
1302 | 0xa084, 0x0030, 0x0040, 0x2523, 0x78ec, 0xa084, 0x0003, 0x0040, | ||
1303 | 0x2523, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x24fa, 0x2001, | ||
1304 | 0x0005, 0x0078, 0x37a5, 0x2001, 0x000c, 0x0078, 0x37a5, 0x2001, | ||
1305 | 0x0006, 0x0078, 0x37a5, 0x2001, 0x000d, 0x0078, 0x37a5, 0x2001, | ||
1306 | 0x0009, 0x0078, 0x37a5, 0x2001, 0x0007, 0x789b, 0x0010, 0x78aa, | ||
1307 | 0x789b, 0x0060, 0x78ab, 0x0001, 0xa6b5, 0x0004, 0x7e5a, 0x007c, | ||
1308 | 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0, | ||
1309 | 0x5480, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040, | ||
1310 | 0x37c9, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, 0x0008, | ||
1311 | 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040, | ||
1312 | 0x37d9, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0010, | ||
1313 | 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, | ||
1314 | 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, | ||
1315 | 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab, | ||
1316 | 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa, 0x789b, | ||
1317 | 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff, | ||
1318 | 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0, | ||
1319 | 0x2001, 0x5246, 0x2004, 0xa082, 0x0028, 0x0040, 0x3817, 0x2021, | ||
1320 | 0x38a0, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, 0x381d, 0x2021, | ||
1321 | 0x38ac, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, 0x2404, | ||
1322 | 0xa084, 0xfff0, 0xa106, 0x0040, 0x382c, 0x8420, 0x2300, 0xa210, | ||
1323 | 0x0070, 0x382c, 0x0078, 0x381f, 0x157f, 0x007c, 0x157e, 0x2009, | ||
1324 | 0x5246, 0x210c, 0xa182, 0x0032, 0x0048, 0x3842, 0x0040, 0x3846, | ||
1325 | 0x2009, 0x3892, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, | ||
1326 | 0x0078, 0x3858, 0xa182, 0x0028, 0x0040, 0x3850, 0x2009, 0x38a0, | ||
1327 | 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064, 0x0078, 0x3858, | ||
1328 | 0x2009, 0x38ac, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, | ||
1329 | 0x2200, 0xa502, 0x0040, 0x3868, 0x0048, 0x3868, 0x8108, 0x2300, | ||
1330 | 0xa210, 0x0070, 0x3865, 0x0078, 0x3858, 0x157f, 0xa006, 0x007c, | ||
1331 | 0x157f, 0xa582, 0x0064, 0x00c8, 0x3877, 0x7808, 0xa085, 0x0070, | ||
1332 | 0x780a, 0x7044, 0xa085, 0x0070, 0x7046, 0x0078, 0x3877, 0x78ec, | ||
1333 | 0xa084, 0x0300, 0x0040, 0x387f, 0x2104, 0x0078, 0x3890, 0x2104, | ||
1334 | 0xa09e, 0x1102, 0x00c0, 0x3890, 0x2001, 0x04fd, 0x2004, 0xa082, | ||
1335 | 0x0005, 0x0048, 0x388f, 0x2001, 0x1201, 0x0078, 0x3890, 0x2104, | ||
1336 | 0xa005, 0x007c, 0x1102, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, | ||
1337 | 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07, | ||
1338 | 0x3202, 0x4202, 0x5202, 0x6202, 0x7202, 0x6605, 0x7605, 0x7805, | ||
1339 | 0x7a05, 0x7c05, 0x7e05, 0x7f05, 0x2202, 0x3202, 0x4202, 0x5202, | ||
1340 | 0x5404, 0x6404, 0x7404, 0x7604, 0x7804, 0x7a04, 0x7c04, 0x7e04, | ||
1341 | 0x7f04, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00, 0x800b, | ||
1342 | 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e0, | ||
1343 | 0x5500, 0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b, 0x00c8, 0x38d1, | ||
1344 | 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x007c, 0x0f7e, | ||
1345 | 0x2079, 0x0100, 0x2009, 0x5240, 0x2091, 0x8000, 0x2104, 0x0079, | ||
1346 | 0x38e1, 0x3917, 0x38eb, 0x38eb, 0x38eb, 0x38eb, 0x38eb, 0x38eb, | ||
1347 | 0x391b, 0x1078, 0x248c, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, | ||
1348 | 0x00c0, 0x38ed, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0, | ||
1349 | 0x38f4, 0x68b4, 0xa085, 0x4000, 0x68b6, 0x7858, 0xa085, 0x4000, | ||
1350 | 0x785a, 0x7830, 0xa084, 0x0080, 0x00c0, 0x3917, 0x0018, 0x3917, | ||
1351 | 0x681c, 0xa084, 0x0020, 0x00c0, 0x3915, 0x0e7e, 0x2071, 0x5240, | ||
1352 | 0x1078, 0x396a, 0x0e7f, 0x0078, 0x3917, 0x781b, 0x00ca, 0x2091, | ||
1353 | 0x8001, 0x0f7f, 0x007c, 0x70b3, 0x0000, 0x1078, 0x3b44, 0x0078, | ||
1354 | 0x3917, 0x0c7e, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, | ||
1355 | 0x8003, 0xa0e0, 0x5480, 0x6004, 0xa084, 0x000a, 0x00c0, 0x3954, | ||
1356 | 0x6108, 0xa194, 0xff00, 0x0040, 0x3954, 0xa18c, 0x00ff, 0x2001, | ||
1357 | 0x0019, 0xa106, 0x0040, 0x3943, 0x2001, 0x0032, 0xa106, 0x0040, | ||
1358 | 0x3947, 0x0078, 0x394b, 0x2009, 0x0020, 0x0078, 0x394d, 0x2009, | ||
1359 | 0x003f, 0x0078, 0x394d, 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, | ||
1360 | 0x6004, 0xa085, 0x0002, 0x6006, 0x0c7f, 0x007c, 0x781b, 0x0065, | ||
1361 | 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x24fa, | ||
1362 | 0x781b, 0x0058, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x0056, | ||
1363 | 0x0078, 0x24fa, 0x2009, 0x5220, 0x210c, 0xa186, 0x0000, 0x0040, | ||
1364 | 0x397e, 0xa186, 0x0001, 0x0040, 0x3981, 0x2009, 0x5238, 0x200b, | ||
1365 | 0x000b, 0x706f, 0x0001, 0x781b, 0x0048, 0x007c, 0x781b, 0x00c4, | ||
1366 | 0x007c, 0x2009, 0x5238, 0x200b, 0x000a, 0x007c, 0x2009, 0x5220, | ||
1367 | 0x210c, 0xa186, 0x0000, 0x0040, 0x39a1, 0xa186, 0x0001, 0x0040, | ||
1368 | 0x399b, 0x2009, 0x5238, 0x200b, 0x000b, 0x706f, 0x0001, 0x781b, | ||
1369 | 0x0048, 0x0078, 0x24fa, 0x2009, 0x5238, 0x200b, 0x000a, 0x0078, | ||
1370 | 0x24fa, 0x782b, 0x3008, 0x781b, 0x00c4, 0x0078, 0x24fa, 0x781b, | ||
1371 | 0x00ca, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x00ca, 0x0078, | ||
1372 | 0x24fa, 0x781b, 0x008f, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, | ||
1373 | 0x008f, 0x0078, 0x24fa, 0x6818, 0xa084, 0x8000, 0x0040, 0x39c2, | ||
1374 | 0x681b, 0x001d, 0x706f, 0x0001, 0x781b, 0x0048, 0x0078, 0x24fa, | ||
1375 | 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x39de, 0x7808, 0xa084, | ||
1376 | 0xfffc, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, | ||
1377 | 0x0021, 0x0040, 0x39de, 0x7044, 0x780a, 0xa005, 0x007f, 0x007c, | ||
1378 | 0x7044, 0xa085, 0x0002, 0x7046, 0x780a, 0x007c, 0x007e, 0x7830, | ||
1379 | 0xa084, 0x0040, 0x00c0, 0x39e7, 0x0098, 0x39f2, 0x007f, 0x789a, | ||
1380 | 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, | ||
1381 | 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x3a01, 0x0098, | ||
1382 | 0x39ff, 0x007f, 0x789a, 0x78ac, 0x007e, 0x7044, 0x780a, 0x007f, | ||
1383 | 0x007c, 0x78ec, 0xa084, 0x0002, 0x00c0, 0x4871, 0xa784, 0x007d, | ||
1384 | 0x00c0, 0x3a15, 0x2700, 0x1078, 0x248c, 0xa784, 0x0001, 0x00c0, | ||
1385 | 0x300c, 0xa784, 0x0070, 0x0040, 0x3a25, 0x0c7e, 0x2d60, 0x2f68, | ||
1386 | 0x1078, 0x2437, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040, | ||
1387 | 0x3a32, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2523, | ||
1388 | 0x0078, 0x3956, 0xa784, 0x0004, 0x0040, 0x3a65, 0x78b8, 0xa084, | ||
1389 | 0x4001, 0x0040, 0x3a65, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, | ||
1390 | 0x0040, 0x2523, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0, | ||
1391 | 0x3a65, 0x78c0, 0xa085, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00ca, | ||
1392 | 0x0078, 0x24fa, 0x784b, 0x0008, 0x6818, 0xa084, 0x8000, 0x0040, | ||
1393 | 0x3a61, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x3a61, 0x681b, | ||
1394 | 0x0007, 0x1078, 0x396a, 0x0078, 0x24fa, 0x681b, 0x0003, 0x7858, | ||
1395 | 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, 0x784b, | ||
1396 | 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2a06, 0x0018, 0x24fa, | ||
1397 | 0x0078, 0x3773, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003, | ||
1398 | 0x8003, 0xa080, 0x5480, 0x2060, 0x2048, 0x7056, 0x6000, 0x705a, | ||
1399 | 0x6004, 0x705e, 0x2a60, 0x007c, 0x0079, 0x3a8e, 0x3a96, 0x3a97, | ||
1400 | 0x3a96, 0x3a99, 0x3a96, 0x3a96, 0x3a96, 0x3a9e, 0x007c, 0x1078, | ||
1401 | 0x34b8, 0x1078, 0x4887, 0x7038, 0x600a, 0x007c, 0x70a0, 0xa005, | ||
1402 | 0x0040, 0x3aab, 0x2068, 0x1078, 0x1bd3, 0x1078, 0x47fe, 0x1078, | ||
1403 | 0x4805, 0x70a3, 0x0000, 0x007c, 0x0e7e, 0x2091, 0x8000, 0x2071, | ||
1404 | 0x5240, 0x7000, 0xa086, 0x0007, 0x00c0, 0x3ac2, 0x6110, 0x70bc, | ||
1405 | 0xa106, 0x00c0, 0x3ac2, 0x0e7f, 0x1078, 0x1be0, 0x1078, 0x3ac8, | ||
1406 | 0xa006, 0x007c, 0x2091, 0x8001, 0x0e7f, 0xa085, 0x0001, 0x007c, | ||
1407 | 0x0f7e, 0x0e7e, 0x2071, 0x5240, 0x0078, 0x2297, 0x785b, 0x0000, | ||
1408 | 0x70af, 0x000e, 0x2009, 0x0100, 0x017e, 0x70a0, 0xa06d, 0x0040, | ||
1409 | 0x3add, 0x70a3, 0x0000, 0x0078, 0x3ae3, 0x70b3, 0x0000, 0x1078, | ||
1410 | 0x1c0c, 0x0040, 0x3ae9, 0x70ac, 0x6826, 0x1078, 0x3bc6, 0x0078, | ||
1411 | 0x3add, 0x017f, 0x157e, 0x0c7e, 0x0d7e, 0x20a9, 0x0008, 0x2061, | ||
1412 | 0x7610, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d, 0x0040, 0x3b01, | ||
1413 | 0x6800, 0x601e, 0x1078, 0x19ac, 0x6008, 0x8000, 0x600a, 0x0078, | ||
1414 | 0x3af4, 0x6018, 0xa06d, 0x0040, 0x3b0b, 0x6800, 0x601a, 0x1078, | ||
1415 | 0x19ac, 0x0078, 0x3b01, 0xace0, 0x0008, 0x0070, 0x3b11, 0x0078, | ||
1416 | 0x3af1, 0x709c, 0xa084, 0x8000, 0x0040, 0x3b18, 0x1078, 0x3c44, | ||
1417 | 0x0d7f, 0x0c7f, 0x157f, 0x007c, 0x127e, 0x2091, 0x2300, 0x6804, | ||
1418 | 0xa084, 0x000f, 0x0079, 0x3b24, 0x3b34, 0x3b34, 0x3b34, 0x3b34, | ||
1419 | 0x3b34, 0x3b34, 0x3b36, 0x3b3c, 0x3b34, 0x3b34, 0x3b34, 0x3b34, | ||
1420 | 0x3b34, 0x3b3e, 0x3b34, 0x3b36, 0x1078, 0x248c, 0x1078, 0x45d3, | ||
1421 | 0x1078, 0x19ac, 0x0078, 0x3b42, 0x6827, 0x000b, 0x1078, 0x45d3, | ||
1422 | 0x1078, 0x3bc6, 0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x0098, | ||
1423 | 0x3b60, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3b60, 0x0d7e, 0x1078, | ||
1424 | 0x4812, 0x2d00, 0x682e, 0x2009, 0x0004, 0x2001, 0x0000, 0x6827, | ||
1425 | 0x0084, 0x1078, 0x47c7, 0x1078, 0x3bc6, 0x0d7f, 0x0078, 0x3b94, | ||
1426 | 0x7948, 0xa185, 0x4000, 0x784a, 0x0098, 0x3b69, 0x794a, 0x0078, | ||
1427 | 0x3b4e, 0x7828, 0xa086, 0x1834, 0x00c0, 0x3b72, 0xa185, 0x0004, | ||
1428 | 0x0078, 0x3b79, 0x7828, 0xa086, 0x1814, 0x00c0, 0x3b66, 0xa185, | ||
1429 | 0x000c, 0x784a, 0x789b, 0x000e, 0x78ab, 0x0002, 0x7858, 0xa084, | ||
1430 | 0x00ff, 0xa085, 0x0400, 0x785a, 0x70b4, 0xa080, 0x0091, 0x781a, | ||
1431 | 0x6827, 0x0284, 0x682c, 0x6836, 0x6830, 0x683a, 0x2009, 0x0004, | ||
1432 | 0x2001, 0x0000, 0x1078, 0x47c7, 0x127f, 0x007c, 0x0d7e, 0x6b14, | ||
1433 | 0x1078, 0x1c70, 0x0040, 0x3ba3, 0x2068, 0x6827, 0x0002, 0x1078, | ||
1434 | 0x3bc6, 0x0078, 0x3b98, 0x0d7f, 0x007c, 0x0d7e, 0x6b14, 0x6c28, | ||
1435 | 0xa4a4, 0x00ff, 0x1078, 0x1c1c, 0x0040, 0x3bb3, 0x2068, 0x6827, | ||
1436 | 0x0002, 0x1078, 0x3bc6, 0x0d7f, 0x007c, 0x0d7e, 0x6b14, 0xa39c, | ||
1437 | 0x00ff, 0x1078, 0x1c48, 0x0040, 0x3bc4, 0x2068, 0x6827, 0x0002, | ||
1438 | 0x1078, 0x3bc6, 0x0078, 0x3bb9, 0x0d7f, 0x007c, 0x0c7e, 0x6914, | ||
1439 | 0x1078, 0x3c3b, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0006, 0x0040, | ||
1440 | 0x3be1, 0xa186, 0x000d, 0x0040, 0x3c00, 0xa186, 0x0017, 0x00c0, | ||
1441 | 0x3bdd, 0x1078, 0x19ac, 0x0078, 0x3bdf, 0x1078, 0x1cde, 0x0c7f, | ||
1442 | 0x007c, 0x6004, 0x8001, 0x0048, 0x3bfe, 0x6006, 0x2009, 0x0000, | ||
1443 | 0xa684, 0x0001, 0x00c0, 0x3bee, 0xa18d, 0x8000, 0xa684, 0x0004, | ||
1444 | 0x0040, 0x3bf4, 0xa18d, 0x0002, 0x691e, 0x6823, 0x0000, 0x7104, | ||
1445 | 0x810f, 0x6818, 0xa105, 0x681a, 0x0078, 0x3bdd, 0x1078, 0x248c, | ||
1446 | 0x6018, 0xa005, 0x00c0, 0x3c0f, 0x6008, 0x8001, 0x0048, 0x3c0f, | ||
1447 | 0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x0078, 0x3c25, 0xac88, | ||
1448 | 0x0006, 0x2104, 0xa005, 0x0040, 0x3c18, 0x2008, 0x0078, 0x3c11, | ||
1449 | 0x6802, 0x2d0a, 0x6008, 0x8001, 0x0048, 0x3bdf, 0x600a, 0x6018, | ||
1450 | 0x2068, 0x6800, 0x601a, 0x0078, 0x3c09, 0x157e, 0x137e, 0x147e, | ||
1451 | 0x0c7e, 0x0d7e, 0x1078, 0x1989, 0x00c0, 0x3c30, 0x1078, 0x248c, | ||
1452 | 0x2da0, 0x137f, 0x20a9, 0x0031, 0x53a3, 0x0c7f, 0x147f, 0x137f, | ||
1453 | 0x157f, 0x0078, 0x3bdd, 0xa184, 0x001f, 0x8003, 0x8003, 0x8003, | ||
1454 | 0xa080, 0x7610, 0x2060, 0x007c, 0x2019, 0x5251, 0x2304, 0xa085, | ||
1455 | 0x0001, 0x201a, 0x2019, 0x0102, 0x2304, 0xa085, 0x0001, 0x201a, | ||
1456 | 0x007c, 0x2019, 0x5251, 0x2304, 0xa084, 0xfffe, 0x201a, 0x2019, | ||
1457 | 0x0102, 0x2304, 0xa084, 0xfffe, 0x201a, 0x007c, 0x7990, 0xa18c, | ||
1458 | 0xfff8, 0x7992, 0x70b4, 0xa080, 0x00d8, 0x781a, 0x0078, 0x24fa, | ||
1459 | 0x70a3, 0x0000, 0x7003, 0x0000, 0x7043, 0x0001, 0x7037, 0x0000, | ||
1460 | 0x0018, 0x24b1, 0x1078, 0x1c0c, 0x0040, 0x3c99, 0x2009, 0x520f, | ||
1461 | 0x200b, 0x0000, 0x68bc, 0x2060, 0x6100, 0xa184, 0x0300, 0x0040, | ||
1462 | 0x3c8d, 0x6827, 0x000e, 0xa084, 0x0200, 0x0040, 0x3c89, 0x6827, | ||
1463 | 0x0017, 0x1078, 0x3bc6, 0x0078, 0x3c68, 0x7000, 0xa086, 0x0007, | ||
1464 | 0x00c0, 0x3d0d, 0x2d00, 0x70a2, 0xad80, 0x000f, 0x7036, 0x0078, | ||
1465 | 0x3ca0, 0x7040, 0xa086, 0x0001, 0x0040, 0x2533, 0x0078, 0x24fa, | ||
1466 | 0x2031, 0x0000, 0x691c, 0xa184, 0x0002, 0x0040, 0x3ca9, 0xa6b5, | ||
1467 | 0x0004, 0xa184, 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x3da6, | ||
1468 | 0x2004, 0xa635, 0x6820, 0xa084, 0x0400, 0x0040, 0x3cc1, 0x789b, | ||
1469 | 0x0018, 0x78ab, 0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, | ||
1470 | 0x5000, 0x6820, 0xa084, 0x8000, 0x0040, 0x3ccf, 0xa6b5, 0x0400, | ||
1471 | 0x789b, 0x000e, 0x6824, 0x8007, 0x78aa, 0x0078, 0x3cef, 0x681c, | ||
1472 | 0xd0fc, 0x00c0, 0x3cdd, 0xa6b5, 0x0800, 0x6820, 0xd0c4, 0x0040, | ||
1473 | 0x3cef, 0xa6b5, 0x4000, 0x0078, 0x3cef, 0x6820, 0xd0c4, 0x0040, | ||
1474 | 0x3ce5, 0xa6b5, 0x4000, 0x0078, 0x3cef, 0x789b, 0x0018, 0x78ab, | ||
1475 | 0x0002, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0xa684, | ||
1476 | 0x0200, 0x0040, 0x3d09, 0x682c, 0x78d2, 0x6830, 0x78d6, 0xa684, | ||
1477 | 0x0100, 0x0040, 0x3d07, 0x682c, 0xa084, 0x0001, 0x0040, 0x3d07, | ||
1478 | 0x7888, 0xa084, 0x0040, 0x0040, 0x3d07, 0xa6b5, 0x8000, 0x1078, | ||
1479 | 0x47f6, 0x7e5a, 0x6eb6, 0x0078, 0x4835, 0x1078, 0x39c8, 0x00c0, | ||
1480 | 0x3da0, 0x702c, 0x8004, 0x0048, 0x3d1b, 0x2019, 0x4f49, 0x1078, | ||
1481 | 0x2313, 0x702f, 0x0001, 0x2041, 0x0001, 0x2031, 0x1000, 0x789b, | ||
1482 | 0x0018, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x691c, | ||
1483 | 0xa184, 0x0002, 0x0040, 0x3d34, 0xa6b5, 0x0004, 0x78ab, 0x0020, | ||
1484 | 0x6828, 0x78aa, 0xa8c0, 0x0002, 0x681c, 0xd0f4, 0x0040, 0x3d3d, | ||
1485 | 0x2c50, 0x1078, 0x3a7a, 0x1078, 0x4702, 0x6820, 0xa084, 0x8000, | ||
1486 | 0x0040, 0x3d4b, 0xa6b5, 0x0400, 0x789b, 0x000e, 0x6824, 0x8007, | ||
1487 | 0x78aa, 0x0078, 0x3d52, 0x681c, 0xa084, 0x8000, 0x00c0, 0x3d52, | ||
1488 | 0xa6b5, 0x0800, 0x6820, 0xa084, 0x0100, 0x0040, 0x3d59, 0xa6b5, | ||
1489 | 0x4000, 0x681c, 0xa084, 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, | ||
1490 | 0x3da6, 0x2004, 0xa635, 0xa684, 0x0100, 0x0040, 0x3d73, 0x682c, | ||
1491 | 0xa084, 0x0001, 0x0040, 0x3d73, 0x7888, 0xa084, 0x0040, 0x0040, | ||
1492 | 0x3d73, 0xa6b5, 0x8000, 0x789b, 0x007e, 0x7eae, 0x6eb6, 0x6814, | ||
1493 | 0x8007, 0x78aa, 0x7882, 0x2810, 0x7aaa, 0x7830, 0xa084, 0x00c0, | ||
1494 | 0x00c0, 0x3da0, 0x0018, 0x3da0, 0x70b4, 0xa080, 0x00dd, 0x781a, | ||
1495 | 0x1078, 0x39e0, 0xa684, 0x0200, 0x0040, 0x3d94, 0x682c, 0x78d2, | ||
1496 | 0x6830, 0x78d6, 0x1078, 0x47f6, 0x2d00, 0x70a2, 0x704a, 0x6810, | ||
1497 | 0x70be, 0x7003, 0x0007, 0xad80, 0x000f, 0x7036, 0x0078, 0x24fa, | ||
1498 | 0x1078, 0x1bd3, 0x1078, 0x39e0, 0x0078, 0x24fa, 0x0000, 0x0300, | ||
1499 | 0x0200, 0x0000, 0x1078, 0x248c, 0x2300, 0x0079, 0x3daf, 0x3db2, | ||
1500 | 0x3db2, 0x3db4, 0x1078, 0x248c, 0x1078, 0x4805, 0x6924, 0xa184, | ||
1501 | 0x00ff, 0xa086, 0x000a, 0x0040, 0x3dc6, 0xa184, 0xff00, 0xa085, | ||
1502 | 0x000a, 0x6826, 0x1078, 0x1bd3, 0x0078, 0x3c68, 0x2001, 0x000a, | ||
1503 | 0x1078, 0x4797, 0x0078, 0x3c68, 0xa282, 0x0005, 0x0050, 0x3dd2, | ||
1504 | 0x1078, 0x248c, 0x7000, 0xa084, 0x0007, 0x10c0, 0x3a8c, 0x1078, | ||
1505 | 0x1989, 0x00c0, 0x3df4, 0x2069, 0xffff, 0xa684, 0x0004, 0x0040, | ||
1506 | 0x3de5, 0x2001, 0x2800, 0x0078, 0x3de7, 0x2001, 0x0800, 0x71b4, | ||
1507 | 0xa188, 0x0091, 0x789b, 0x000e, 0x8007, 0x78aa, 0x2031, 0x0400, | ||
1508 | 0x7e5a, 0x791a, 0x0078, 0x24fa, 0x6807, 0x0106, 0x680b, 0x0000, | ||
1509 | 0x689f, 0x0000, 0x6827, 0x0000, 0xa386, 0x0002, 0x00c0, 0x3e15, | ||
1510 | 0xa286, 0x0002, 0x00c0, 0x3e15, 0x78a0, 0xa005, 0x00c0, 0x3e15, | ||
1511 | 0xa484, 0x8000, 0x00c0, 0x3e15, 0x78e4, 0xa084, 0x0008, 0x0040, | ||
1512 | 0x3e15, 0xa6b5, 0x0008, 0x2019, 0x0000, 0x1078, 0x4217, 0x2d00, | ||
1513 | 0x70a2, 0x704a, 0x7003, 0x0007, 0x7037, 0x0000, 0x6824, 0xa084, | ||
1514 | 0x0080, 0x0040, 0x3e27, 0x1078, 0x42cd, 0x0078, 0x24fa, 0x2300, | ||
1515 | 0x0079, 0x3e2a, 0x3e2d, 0x3eae, 0x3ec7, 0x2200, 0x0079, 0x3e30, | ||
1516 | 0x3e35, 0x3e45, 0x3e6b, 0x3e77, 0x3e9a, 0x2029, 0x0001, 0xa026, | ||
1517 | 0x2011, 0x0000, 0x1078, 0x43f3, 0x0079, 0x3e3e, 0x3e43, 0x24fa, | ||
1518 | 0x3c68, 0x3e43, 0x3e43, 0x1078, 0x248c, 0x7990, 0xa18c, 0x0007, | ||
1519 | 0x00c0, 0x3e4c, 0x2009, 0x0008, 0x2011, 0x0001, 0xa684, 0x0004, | ||
1520 | 0x0040, 0x3e54, 0x2011, 0x0003, 0x2220, 0xa12a, 0x2011, 0x0001, | ||
1521 | 0x1078, 0x43f3, 0x0079, 0x3e5c, 0x3e61, 0x24fa, 0x3c68, 0x3e69, | ||
1522 | 0x3e63, 0x0078, 0x483b, 0x70ab, 0x3e67, 0x0078, 0x24fa, 0x0078, | ||
1523 | 0x3e61, 0x1078, 0x248c, 0xa684, 0x0010, 0x0040, 0x3e75, 0x1078, | ||
1524 | 0x429c, 0x0040, 0x3e75, 0x0078, 0x24fa, 0x0078, 0x430d, 0x6000, | ||
1525 | 0xa084, 0x0002, 0x0040, 0x3e94, 0x70b4, 0xa080, 0x00cd, 0x781a, | ||
1526 | 0x0d7e, 0x1078, 0x4812, 0x2d00, 0x682e, 0x6827, 0x0000, 0x1078, | ||
1527 | 0x3bc6, 0x0d7f, 0x1078, 0x19ac, 0x7003, 0x0000, 0x7037, 0x0000, | ||
1528 | 0x704b, 0x0000, 0x0078, 0x3c68, 0xa684, 0x0004, 0x00c0, 0x3e9a, | ||
1529 | 0x0078, 0x483b, 0x6000, 0xa084, 0x0004, 0x00c0, 0x3eac, 0x6000, | ||
1530 | 0xa084, 0x0001, 0x0040, 0x3eac, 0x70ab, 0x3eac, 0x2001, 0x0007, | ||
1531 | 0x1078, 0x478f, 0x0078, 0x4841, 0x0078, 0x483b, 0x2200, 0x0079, | ||
1532 | 0x3eb1, 0x3eb6, 0x3eb8, 0x3eb6, 0x3eb6, 0x3eb6, 0x1078, 0x248c, | ||
1533 | 0x70a7, 0x3ebc, 0x0078, 0x4847, 0x78e4, 0xa084, 0x0008, 0x00c0, | ||
1534 | 0x3eb8, 0x1078, 0x4781, 0x70ab, 0x3ec5, 0x0078, 0x483b, 0x2200, | ||
1535 | 0x0079, 0x3eca, 0x3ecf, 0x3ed1, 0x3ed1, 0x3ecf, 0x3ecf, 0x1078, | ||
1536 | 0x248c, 0x78e4, 0xa084, 0x0008, 0x0040, 0x3ee6, 0x70a7, 0x3eda, | ||
1537 | 0x0078, 0x4847, 0x2011, 0x0004, 0x1078, 0x43ed, 0x0079, 0x3ee0, | ||
1538 | 0x3ee6, 0x24fa, 0x3c68, 0x3ee6, 0x3ef0, 0x3ef4, 0x70ab, 0x3eee, | ||
1539 | 0x2001, 0x0003, 0x1078, 0x478f, 0x0078, 0x4841, 0x0078, 0x483b, | ||
1540 | 0x70ab, 0x3ee6, 0x0078, 0x24fa, 0x70ab, 0x3ef8, 0x0078, 0x24fa, | ||
1541 | 0x0078, 0x3eee, 0xa282, 0x0003, 0x0050, 0x3f00, 0x1078, 0x248c, | ||
1542 | 0xa386, 0x0002, 0x00c0, 0x3f19, 0xa286, 0x0002, 0x00c0, 0x3f1f, | ||
1543 | 0x78a0, 0xa005, 0x00c0, 0x3f1f, 0xa484, 0x8000, 0x00c0, 0x3f1f, | ||
1544 | 0x78e4, 0xa084, 0x0008, 0x0040, 0x3f19, 0xa6b5, 0x0008, 0x2019, | ||
1545 | 0x0000, 0xa684, 0x0008, 0x0040, 0x3f1f, 0x1078, 0x4279, 0x6810, | ||
1546 | 0x70be, 0x7003, 0x0007, 0x2300, 0x0079, 0x3f26, 0x3f29, 0x3f56, | ||
1547 | 0x3f5e, 0x2200, 0x0079, 0x3f2c, 0x3f31, 0x3f2f, 0x3f4a, 0x1078, | ||
1548 | 0x248c, 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001, 0x1078, | ||
1549 | 0x43f3, 0x0079, 0x3f3b, 0x3f40, 0x24fa, 0x3c68, 0x3f48, 0x3f42, | ||
1550 | 0x0078, 0x483b, 0x70ab, 0x3f46, 0x0078, 0x24fa, 0x0078, 0x3f40, | ||
1551 | 0x1078, 0x248c, 0xa684, 0x0010, 0x0040, 0x3f54, 0x1078, 0x429c, | ||
1552 | 0x0040, 0x3f54, 0x0078, 0x24fa, 0x0078, 0x430d, 0x2200, 0x0079, | ||
1553 | 0x3f59, 0x3f5c, 0x3f5c, 0x3f5c, 0x1078, 0x248c, 0x2200, 0x0079, | ||
1554 | 0x3f61, 0x3f64, 0x3f66, 0x3f66, 0x1078, 0x248c, 0x78e4, 0xa084, | ||
1555 | 0x0008, 0x0040, 0x3f7b, 0x70a7, 0x3f6f, 0x0078, 0x4847, 0x2011, | ||
1556 | 0x0004, 0x1078, 0x43ed, 0x0079, 0x3f75, 0x3f7b, 0x24fa, 0x3c68, | ||
1557 | 0x3f7b, 0x3f85, 0x3f89, 0x70ab, 0x3f83, 0x2001, 0x0003, 0x1078, | ||
1558 | 0x478f, 0x0078, 0x4841, 0x0078, 0x483b, 0x70ab, 0x3f7b, 0x0078, | ||
1559 | 0x24fa, 0x70ab, 0x3f8d, 0x0078, 0x24fa, 0x0078, 0x3f83, 0x2300, | ||
1560 | 0x0079, 0x3f92, 0x3f97, 0x3f99, 0x3f95, 0x1078, 0x248c, 0x70a4, | ||
1561 | 0x007a, 0x70a4, 0x007a, 0xa282, 0x0002, 0x0050, 0x3fa1, 0x1078, | ||
1562 | 0x248c, 0xa684, 0x0200, 0x0040, 0x3fab, 0x1078, 0x47fe, 0x1078, | ||
1563 | 0x43d5, 0x1078, 0x4805, 0x2300, 0x0079, 0x3fae, 0x3fb1, 0x3fd9, | ||
1564 | 0x403f, 0xad86, 0xffff, 0x0040, 0x3c68, 0xa286, 0x0001, 0x0040, | ||
1565 | 0x3fbb, 0x1078, 0x248c, 0xa684, 0x0200, 0x0040, 0x3fc3, 0x1078, | ||
1566 | 0x47fe, 0x1078, 0x4805, 0x2001, 0x0001, 0x1078, 0x4797, 0x78b8, | ||
1567 | 0xa084, 0xc001, 0x0040, 0x3fd5, 0x7848, 0xa085, 0x0008, 0x784a, | ||
1568 | 0x7848, 0xa084, 0x0008, 0x00c0, 0x3fd0, 0x7003, 0x0000, 0x0078, | ||
1569 | 0x3c68, 0x2200, 0x0079, 0x3fdc, 0x3fde, 0x400f, 0x70a7, 0x3fe2, | ||
1570 | 0x0078, 0x4847, 0x2011, 0x000d, 0x1078, 0x43ed, 0x0079, 0x3fe8, | ||
1571 | 0x3fef, 0x24fa, 0x3c68, 0x3ff7, 0x3fff, 0x4005, 0x4007, 0xa6b4, | ||
1572 | 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0xa6b4, | ||
1573 | 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0x70ab, | ||
1574 | 0x4003, 0x0078, 0x24fa, 0x0078, 0x3fef, 0x1078, 0x248c, 0x70ab, | ||
1575 | 0x400b, 0x0078, 0x24fa, 0x1078, 0x484d, 0x0078, 0x24fa, 0x70a7, | ||
1576 | 0x4013, 0x0078, 0x4847, 0x2011, 0x0012, 0x1078, 0x43ed, 0x0079, | ||
1577 | 0x4019, 0x401f, 0x24fa, 0x3c68, 0x402b, 0x4033, 0x4039, 0xa6b4, | ||
1578 | 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x70b4, 0xa080, 0x00aa, | ||
1579 | 0x781a, 0x0078, 0x24fa, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, | ||
1580 | 0x7e5a, 0x0078, 0x4835, 0x70ab, 0x4037, 0x0078, 0x24fa, 0x0078, | ||
1581 | 0x401f, 0x70ab, 0x403d, 0x0078, 0x24fa, 0x0078, 0x402b, 0xa286, | ||
1582 | 0x0001, 0x0040, 0x4045, 0x1078, 0x248c, 0x70a7, 0x4049, 0x0078, | ||
1583 | 0x4847, 0x2011, 0x0015, 0x1078, 0x43ed, 0x0079, 0x404f, 0x4054, | ||
1584 | 0x24fa, 0x3c68, 0x4062, 0x406e, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, | ||
1585 | 0x6eb6, 0x7e5a, 0x783b, 0x1301, 0x70b4, 0xa080, 0x00b5, 0x781a, | ||
1586 | 0x0078, 0x24fa, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, | ||
1587 | 0x70b4, 0xa080, 0x00aa, 0x781a, 0x0078, 0x24fa, 0x70ab, 0x4072, | ||
1588 | 0x0078, 0x24fa, 0x0078, 0x4054, 0xa282, 0x0003, 0x0050, 0x407a, | ||
1589 | 0x1078, 0x248c, 0x2300, 0x0079, 0x407d, 0x4080, 0x40b7, 0x4114, | ||
1590 | 0xa286, 0x0001, 0x0040, 0x4086, 0x1078, 0x248c, 0x6804, 0xa084, | ||
1591 | 0x00ff, 0xa086, 0x0006, 0x00c0, 0x4093, 0x1078, 0x3bc6, 0x7003, | ||
1592 | 0x0000, 0x0078, 0x3c68, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684, | ||
1593 | 0x0200, 0x0040, 0x40a1, 0x1078, 0x47fe, 0x1078, 0x43d5, 0x1078, | ||
1594 | 0x4805, 0x2001, 0x0001, 0x1078, 0x4797, 0x78b8, 0xa084, 0xc001, | ||
1595 | 0x0040, 0x40b3, 0x7848, 0xa085, 0x0008, 0x784a, 0x7848, 0xa084, | ||
1596 | 0x0008, 0x00c0, 0x40ae, 0x7003, 0x0000, 0x0078, 0x3c68, 0x2200, | ||
1597 | 0x0079, 0x40ba, 0x40bc, 0x40ef, 0x70a7, 0x40c0, 0x0078, 0x4847, | ||
1598 | 0x2011, 0x000d, 0x1078, 0x43ed, 0x0079, 0x40c6, 0x40cd, 0x24fa, | ||
1599 | 0x3c68, 0x40d5, 0x40dd, 0x40e3, 0x40e5, 0xa6b4, 0x00ff, 0xa6b5, | ||
1600 | 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0xa6b4, 0x00ff, 0xa6b5, | ||
1601 | 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0x70ab, 0x40e1, 0x0078, | ||
1602 | 0x24fa, 0x0078, 0x40cd, 0x1078, 0x248c, 0x70ab, 0x40eb, 0x1078, | ||
1603 | 0x4805, 0x0078, 0x24fa, 0x1078, 0x484d, 0x0078, 0x24fa, 0x70a7, | ||
1604 | 0x40f3, 0x0078, 0x4847, 0x2011, 0x0005, 0x1078, 0x43ed, 0x0079, | ||
1605 | 0x40f9, 0x40fe, 0x24fa, 0x3c68, 0x4106, 0x410e, 0xa6b4, 0x00ff, | ||
1606 | 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0xa6b4, 0x00ff, | ||
1607 | 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0x70ab, 0x4112, | ||
1608 | 0x0078, 0x24fa, 0x0078, 0x40fe, 0xa286, 0x0001, 0x0040, 0x411a, | ||
1609 | 0x1078, 0x248c, 0x70a7, 0x411e, 0x0078, 0x4847, 0x2011, 0x0006, | ||
1610 | 0x1078, 0x43ed, 0x0079, 0x4124, 0x4129, 0x24fa, 0x3c68, 0x412f, | ||
1611 | 0x4139, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0xa6b4, | ||
1612 | 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0xa6b5, 0x4000, 0x7e5a, 0x0078, | ||
1613 | 0x4835, 0x70ab, 0x413d, 0x0078, 0x24fa, 0x0078, 0x4129, 0x2300, | ||
1614 | 0x0079, 0x4142, 0x4147, 0x4145, 0x4145, 0x1078, 0x248c, 0x1078, | ||
1615 | 0x248c, 0x2300, 0x71a8, 0xa005, 0x017a, 0x6810, 0x70be, 0xa282, | ||
1616 | 0x0003, 0x0050, 0x4155, 0x1078, 0x248c, 0x2300, 0x0079, 0x4158, | ||
1617 | 0x415b, 0x4169, 0x418b, 0xa684, 0x0200, 0x0040, 0x4163, 0x1078, | ||
1618 | 0x47fe, 0x1078, 0x4805, 0x2001, 0x0001, 0x1078, 0x4797, 0x0078, | ||
1619 | 0x24fa, 0xa296, 0x0002, 0x0040, 0x4172, 0x82ff, 0x0040, 0x4172, | ||
1620 | 0x1078, 0x248c, 0x70a7, 0x4176, 0x0078, 0x4847, 0x2011, 0x0018, | ||
1621 | 0x1078, 0x43ed, 0x0079, 0x417c, 0x4181, 0x24fa, 0x3c68, 0x4183, | ||
1622 | 0x4185, 0x0078, 0x4835, 0x0078, 0x4835, 0x70ab, 0x4189, 0x0078, | ||
1623 | 0x24fa, 0x0078, 0x4181, 0x2200, 0x0079, 0x418e, 0x4190, 0x41a9, | ||
1624 | 0x70a7, 0x4194, 0x0078, 0x4847, 0x2011, 0x0017, 0x1078, 0x43ed, | ||
1625 | 0x0079, 0x419a, 0x419f, 0x24fa, 0x3c68, 0x41a1, 0x41a3, 0x0078, | ||
1626 | 0x4835, 0x0078, 0x4835, 0x70ab, 0x41a7, 0x0078, 0x24fa, 0x0078, | ||
1627 | 0x419f, 0xa484, 0x8000, 0x00c0, 0x4205, 0xa684, 0x0100, 0x0040, | ||
1628 | 0x41b5, 0x1078, 0x47fe, 0x1078, 0x43d5, 0x78d8, 0x78d2, 0x78dc, | ||
1629 | 0x78d6, 0xa6b4, 0xefff, 0x7e5a, 0x70a7, 0x41c0, 0x0078, 0x4847, | ||
1630 | 0x2011, 0x000d, 0x1078, 0x43ed, 0x0079, 0x41c6, 0x41cd, 0x24fa, | ||
1631 | 0x3c68, 0x41cd, 0x41f3, 0x41f9, 0x41fb, 0x78d8, 0x79dc, 0xa105, | ||
1632 | 0x00c0, 0x41df, 0x78b8, 0xa084, 0x001f, 0x00c0, 0x41df, 0x70b3, | ||
1633 | 0x0000, 0x7858, 0xa084, 0xfdff, 0x785a, 0x0078, 0x4835, 0xa684, | ||
1634 | 0x0100, 0x0040, 0x41f1, 0x7848, 0xa085, 0x0008, 0x784a, 0x1078, | ||
1635 | 0x47bc, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x70b3, 0x0000, 0x1078, | ||
1636 | 0x47f6, 0x0078, 0x4835, 0x70ab, 0x41f7, 0x0078, 0x24fa, 0x0078, | ||
1637 | 0x41cd, 0x1078, 0x248c, 0x70ab, 0x4201, 0x1078, 0x4805, 0x0078, | ||
1638 | 0x24fa, 0x1078, 0x484d, 0x0078, 0x24fa, 0x1078, 0x4805, 0x70ab, | ||
1639 | 0x420f, 0x2001, 0x0003, 0x1078, 0x478f, 0x0078, 0x4841, 0x1078, | ||
1640 | 0x47f6, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x0078, 0x4835, 0x70b8, | ||
1641 | 0x6812, 0x70be, 0x8000, 0x70ba, 0x681b, 0x0000, 0xa684, 0x0008, | ||
1642 | 0x0040, 0x423a, 0x157e, 0x137e, 0x147e, 0x7890, 0x8004, 0x8004, | ||
1643 | 0x8004, 0x8004, 0xa084, 0x000f, 0x681a, 0x80ac, 0x789b, 0x0000, | ||
1644 | 0xaf80, 0x002b, 0x2098, 0xad80, 0x000b, 0x20a0, 0x53a5, 0x147f, | ||
1645 | 0x137f, 0x157f, 0xa6c4, 0x0f00, 0xa684, 0x0002, 0x00c0, 0x4249, | ||
1646 | 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007, 0x2008, 0x0078, | ||
1647 | 0x425c, 0x789b, 0x0010, 0x79ac, 0xa184, 0x0020, 0x0040, 0x425c, | ||
1648 | 0x017e, 0x2009, 0x0005, 0x2001, 0x3d00, 0x1078, 0x47c7, 0x6824, | ||
1649 | 0xa085, 0x003b, 0x6826, 0x017f, 0xa184, 0x001f, 0xa805, 0x6816, | ||
1650 | 0x1078, 0x3c3b, 0x68be, 0xa684, 0x0004, 0x0040, 0x426d, 0xa18c, | ||
1651 | 0xff00, 0x78a8, 0xa084, 0x00ff, 0xa105, 0x682a, 0xa6b4, 0x00ff, | ||
1652 | 0x6000, 0xa084, 0x0008, 0x0040, 0x4277, 0xa6b5, 0x4000, 0x6eb6, | ||
1653 | 0x007c, 0x157e, 0x137e, 0x147e, 0x6918, 0x7890, 0x8004, 0x8004, | ||
1654 | 0x8004, 0x8004, 0xa084, 0x000f, 0x007e, 0xa100, 0x681a, 0x007f, | ||
1655 | 0x8000, 0x8004, 0x0040, 0x4298, 0x20a8, 0x8104, 0xa080, 0x000b, | ||
1656 | 0xad00, 0x20a0, 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0x53a5, | ||
1657 | 0x147f, 0x137f, 0x157f, 0x007c, 0x682c, 0xa084, 0x0020, 0x00c0, | ||
1658 | 0x42a4, 0x620c, 0x0078, 0x42a5, 0x6210, 0x6b18, 0x2300, 0xa202, | ||
1659 | 0x0040, 0x42c5, 0x2018, 0xa382, 0x000e, 0x0048, 0x42b5, 0x0040, | ||
1660 | 0x42b5, 0x2019, 0x000e, 0x0078, 0x42b9, 0x7858, 0xa084, 0xffef, | ||
1661 | 0x785a, 0x783b, 0x1b01, 0x7893, 0x0000, 0x7ba2, 0x70b4, 0xa080, | ||
1662 | 0x008e, 0x781a, 0xa085, 0x0001, 0x007c, 0x7858, 0xa084, 0xffef, | ||
1663 | 0x785a, 0x7893, 0x0000, 0xa006, 0x007c, 0x6904, 0xa18c, 0x00ff, | ||
1664 | 0xa196, 0x0007, 0x0040, 0x42da, 0xa196, 0x000f, 0x0040, 0x42da, | ||
1665 | 0x6807, 0x0117, 0x6914, 0x1078, 0x3c3b, 0x6100, 0x8104, 0x00c8, | ||
1666 | 0x42f5, 0x601c, 0xa005, 0x0040, 0x42e9, 0x2001, 0x0800, 0x0078, | ||
1667 | 0x42f7, 0x0d7e, 0x6824, 0x007e, 0x1078, 0x4812, 0x007f, 0x6826, | ||
1668 | 0x2d00, 0x682e, 0x1078, 0x3bc6, 0x0d7f, 0x2001, 0x0200, 0x6924, | ||
1669 | 0xa18c, 0x00ff, 0xa10d, 0x6926, 0x8007, 0x789b, 0x000e, 0x78aa, | ||
1670 | 0x6820, 0xa085, 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a, | ||
1671 | 0x71b4, 0xa188, 0x0091, 0x791a, 0x007c, 0xa6c4, 0x0f00, 0xa684, | ||
1672 | 0x0002, 0x00c0, 0x4321, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, | ||
1673 | 0x0007, 0x2008, 0xa805, 0x6816, 0x1078, 0x3c3b, 0x68be, 0x0078, | ||
1674 | 0x4324, 0x6914, 0x1078, 0x3c3b, 0x6100, 0x8104, 0x00c8, 0x4382, | ||
1675 | 0xa184, 0x0300, 0x0040, 0x4330, 0x6807, 0x0117, 0x0078, 0x434e, | ||
1676 | 0x6004, 0xa005, 0x00c0, 0x4357, 0x6807, 0x0117, 0x601c, 0xa005, | ||
1677 | 0x00c0, 0x4344, 0x0d7e, 0x1078, 0x4812, 0x6827, 0x0034, 0x2d00, | ||
1678 | 0x682e, 0x1078, 0x3bc6, 0x0d7f, 0xa684, 0x0004, 0x0040, 0x434e, | ||
1679 | 0x2031, 0x0400, 0x2001, 0x2800, 0x0078, 0x4352, 0x2031, 0x0400, | ||
1680 | 0x2001, 0x0800, 0x71b4, 0xa188, 0x0091, 0x0078, 0x43b0, 0x6018, | ||
1681 | 0xa005, 0x00c0, 0x4344, 0x601c, 0xa005, 0x00c0, 0x4344, 0x689f, | ||
1682 | 0x0000, 0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x43be, 0xd694, | ||
1683 | 0x00c0, 0x437b, 0x6100, 0xd1d4, 0x0040, 0x437b, 0x692c, 0xa18c, | ||
1684 | 0x00ff, 0x0040, 0x43be, 0xa186, 0x0003, 0x0040, 0x43be, 0xa186, | ||
1685 | 0x0012, 0x0040, 0x43be, 0xa6b5, 0x0800, 0x71b4, 0xa188, 0x00ae, | ||
1686 | 0x0078, 0x43b9, 0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c, | ||
1687 | 0x00ff, 0xa186, 0x0012, 0x00c0, 0x4393, 0x2001, 0x43cb, 0x2009, | ||
1688 | 0x0001, 0x0078, 0x43a4, 0xa186, 0x0003, 0x00c0, 0x439d, 0x2001, | ||
1689 | 0x43cc, 0x2009, 0x0012, 0x0078, 0x43a4, 0x2001, 0x0200, 0x71b4, | ||
1690 | 0xa188, 0x0091, 0x0078, 0x43b0, 0x1078, 0x47e1, 0x78a3, 0x0000, | ||
1691 | 0x681c, 0xa085, 0x0040, 0x681e, 0x71b4, 0xa188, 0x00da, 0xa006, | ||
1692 | 0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, | ||
1693 | 0x6822, 0x6eb6, 0x7e5a, 0x791a, 0x0078, 0x24fa, 0x6eb6, 0x1078, | ||
1694 | 0x3bc6, 0x6810, 0x70be, 0x7003, 0x0007, 0x70a3, 0x0000, 0x704b, | ||
1695 | 0x0000, 0x0078, 0x24fa, 0x0023, 0x0070, 0x0005, 0x0000, 0x0a00, | ||
1696 | 0x0000, 0x0000, 0x0025, 0x0000, 0x0000, 0x683b, 0x0000, 0x6837, | ||
1697 | 0x0000, 0xa684, 0x0200, 0x0040, 0x43ec, 0x78b8, 0xa08c, 0x001f, | ||
1698 | 0xa084, 0x8000, 0x0040, 0x43e5, 0x8108, 0x78d8, 0xa100, 0x6836, | ||
1699 | 0x78dc, 0xa081, 0x0000, 0x683a, 0x007c, 0x7990, 0x810f, 0xa5ac, | ||
1700 | 0x0007, 0x2021, 0x0000, 0xa480, 0x0010, 0x789a, 0x79a8, 0xa18c, | ||
1701 | 0x00ff, 0xa184, 0x0080, 0x00c0, 0x441b, 0xa182, 0x0020, 0x00c8, | ||
1702 | 0x4439, 0xa182, 0x0012, 0x00c8, 0x4781, 0x2100, 0x1079, 0x4409, | ||
1703 | 0x007c, 0x4781, 0x45eb, 0x4781, 0x4781, 0x4446, 0x4449, 0x4483, | ||
1704 | 0x44b9, 0x44ed, 0x44f0, 0x4781, 0x4781, 0x44a4, 0x4514, 0x454e, | ||
1705 | 0x4781, 0x4781, 0x4574, 0xa184, 0x0020, 0x00c0, 0x45a8, 0xa18c, | ||
1706 | 0x001f, 0x6814, 0xa084, 0x001f, 0xa106, 0x0040, 0x4436, 0x70b4, | ||
1707 | 0xa080, 0x00cd, 0x781a, 0x2001, 0x0014, 0x1078, 0x4797, 0x1078, | ||
1708 | 0x4805, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000, | ||
1709 | 0x007c, 0xa182, 0x0024, 0x00c8, 0x4781, 0xa184, 0x0003, 0x1079, | ||
1710 | 0x4409, 0x007c, 0x4781, 0x4781, 0x4781, 0x4781, 0x1078, 0x4781, | ||
1711 | 0x007c, 0x2200, 0x0079, 0x444c, 0x4577, 0x4577, 0x4470, 0x4470, | ||
1712 | 0x4470, 0x4470, 0x4470, 0x4470, 0x4470, 0x4470, 0x446e, 0x4470, | ||
1713 | 0x4465, 0x4470, 0x4470, 0x4470, 0x4470, 0x4470, 0x4478, 0x447b, | ||
1714 | 0x4577, 0x447b, 0x4470, 0x4470, 0x4470, 0x0c7e, 0x077e, 0x6f14, | ||
1715 | 0x1078, 0x37b0, 0x077f, 0x0c7f, 0x0078, 0x4470, 0x1078, 0x468e, | ||
1716 | 0x6827, 0x02b3, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x45ab, | ||
1717 | 0x1078, 0x4773, 0x007c, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, | ||
1718 | 0x4800, 0x0078, 0x4593, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, | ||
1719 | 0x0006, 0x00c0, 0x448d, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078, | ||
1720 | 0x4812, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, | ||
1721 | 0x3b96, 0x1078, 0x45d3, 0x2b68, 0x1078, 0x3bc6, 0x0d7f, 0x1078, | ||
1722 | 0x3bc6, 0x2001, 0x0002, 0x007c, 0x1078, 0x45d3, 0x2001, 0x0017, | ||
1723 | 0x1078, 0x4797, 0x70a3, 0x0000, 0x2009, 0x5238, 0x200b, 0x0006, | ||
1724 | 0x70af, 0x0017, 0x2009, 0x0200, 0x1078, 0x3ad4, 0x2001, 0x0001, | ||
1725 | 0x007c, 0x2200, 0x0079, 0x44bc, 0x4577, 0x45a8, 0x45a8, 0x45a8, | ||
1726 | 0x44dd, 0x45ba, 0x44e5, 0x45ba, 0x45ba, 0x45bd, 0x45bd, 0x45c2, | ||
1727 | 0x45c2, 0x44d5, 0x44d5, 0x45a8, 0x45a8, 0x45ba, 0x45a8, 0x44e5, | ||
1728 | 0x4577, 0x44e5, 0x44e5, 0x44e5, 0x44e5, 0x6827, 0x0084, 0x2009, | ||
1729 | 0x000b, 0x2001, 0x4300, 0x0078, 0x45cc, 0x6827, 0x000d, 0x2009, | ||
1730 | 0x000b, 0x2001, 0x4300, 0x0078, 0x45ab, 0x6827, 0x0093, 0x2009, | ||
1731 | 0x000b, 0x2001, 0x4300, 0x0078, 0x4593, 0x2001, 0x0000, 0x007c, | ||
1732 | 0x2200, 0x0079, 0x44f3, 0x4577, 0x450c, 0x450c, 0x450c, 0x450c, | ||
1733 | 0x45ba, 0x45ba, 0x45ba, 0x45ba, 0x45ba, 0x45ba, 0x45ba, 0x45ba, | ||
1734 | 0x450c, 0x450c, 0x450c, 0x450c, 0x45ba, 0x450c, 0x450c, 0x45ba, | ||
1735 | 0x45ba, 0x45ba, 0x45ba, 0x4577, 0x6827, 0x0093, 0x2009, 0x000b, | ||
1736 | 0x2001, 0x4300, 0x0078, 0x4593, 0xa684, 0x0004, 0x00c0, 0x4528, | ||
1737 | 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x4781, 0x1078, | ||
1738 | 0x45d3, 0x6807, 0x0117, 0x1078, 0x3bc6, 0x2001, 0x0002, 0x007c, | ||
1739 | 0x6000, 0xa084, 0x0004, 0x0040, 0x4781, 0x2d58, 0x6804, 0xa084, | ||
1740 | 0x00ff, 0xa086, 0x0006, 0x00c0, 0x4537, 0x6807, 0x0117, 0x6827, | ||
1741 | 0x0002, 0x1078, 0x4812, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, | ||
1742 | 0x0d7e, 0x1078, 0x3ba5, 0x1078, 0x45d3, 0x2b68, 0x1078, 0x3bc6, | ||
1743 | 0x0d7f, 0x1078, 0x3bc6, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, | ||
1744 | 0x0004, 0x0040, 0x4781, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006, | ||
1745 | 0x00c0, 0x455c, 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078, | ||
1746 | 0x4812, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, | ||
1747 | 0x3bb5, 0x1078, 0x45d3, 0x2b68, 0x1078, 0x3bc6, 0x0d7f, 0x1078, | ||
1748 | 0x3bc6, 0x2001, 0x0002, 0x007c, 0x1078, 0x4781, 0x007c, 0x70b4, | ||
1749 | 0xa080, 0x00cd, 0x781a, 0x2001, 0x0001, 0x1078, 0x4797, 0x1078, | ||
1750 | 0x4805, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x47c7, | ||
1751 | 0x1078, 0x47fe, 0x1078, 0x43d5, 0x1078, 0x42cd, 0x1078, 0x4805, | ||
1752 | 0x2001, 0x0001, 0x007c, 0x1078, 0x47c7, 0x1078, 0x47fe, 0x1078, | ||
1753 | 0x43d5, 0x70b4, 0xa080, 0x00cd, 0x781a, 0x2001, 0x0013, 0x1078, | ||
1754 | 0x4797, 0x1078, 0x4805, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, | ||
1755 | 0x1078, 0x4781, 0x007c, 0x1078, 0x47c7, 0x1078, 0x47fe, 0x1078, | ||
1756 | 0x43d5, 0x1078, 0x42cd, 0x1078, 0x4805, 0x1078, 0x484d, 0x2001, | ||
1757 | 0x0001, 0x007c, 0x2001, 0x0003, 0x007c, 0x1078, 0x468e, 0x2001, | ||
1758 | 0x0000, 0x007c, 0x0c7e, 0x077e, 0x6f14, 0x1078, 0x37b0, 0x077f, | ||
1759 | 0x0c7f, 0x2001, 0x0000, 0x007c, 0x1078, 0x47c7, 0x1078, 0x4781, | ||
1760 | 0x2001, 0x0006, 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, | ||
1761 | 0x0040, 0x45de, 0xa186, 0x000f, 0x00c0, 0x45e2, 0x1078, 0x47fe, | ||
1762 | 0x1078, 0x43d5, 0x70b4, 0xa080, 0x00cd, 0x781a, 0x1078, 0x4805, | ||
1763 | 0x7003, 0x0000, 0x007c, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, | ||
1764 | 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x4781, 0x1079, 0x45f8, 0x007c, | ||
1765 | 0x4781, 0x45fc, 0x4781, 0x4695, 0xa282, 0x0003, 0x0040, 0x4603, | ||
1766 | 0x1078, 0x4781, 0x007c, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, | ||
1767 | 0x00ff, 0x69b8, 0xa184, 0x0100, 0x0040, 0x4642, 0xa18c, 0xfeff, | ||
1768 | 0x69ba, 0x78a0, 0xa005, 0x00c0, 0x4642, 0xa4a4, 0x00ff, 0x0040, | ||
1769 | 0x4636, 0xa482, 0x000c, 0x0040, 0x461f, 0x00c8, 0x4629, 0x852b, | ||
1770 | 0x852b, 0x1078, 0x382e, 0x0040, 0x4629, 0x1078, 0x3627, 0x0078, | ||
1771 | 0x4638, 0x1078, 0x4760, 0x1078, 0x3652, 0x69b8, 0xa18d, 0x0100, | ||
1772 | 0x69ba, 0xa6b5, 0x1000, 0x7e5a, 0x0078, 0x463b, 0x1078, 0x3652, | ||
1773 | 0xa6b4, 0xefff, 0x7e5a, 0x70b4, 0xa080, 0x0091, 0x781a, 0x2001, | ||
1774 | 0x0001, 0x007c, 0x0c7e, 0x1078, 0x4682, 0x6200, 0xd2e4, 0x0040, | ||
1775 | 0x4673, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, | ||
1776 | 0x4655, 0x0040, 0x4655, 0x2011, 0x000c, 0x2400, 0xa202, 0x00c8, | ||
1777 | 0x465a, 0x2220, 0x6208, 0xa294, 0x00ff, 0x701c, 0xa202, 0x00c8, | ||
1778 | 0x4662, 0x721c, 0x2200, 0xa502, 0x00c8, 0x4667, 0x2228, 0x1078, | ||
1779 | 0x4764, 0x852b, 0x852b, 0x1078, 0x382e, 0x0040, 0x4673, 0x1078, | ||
1780 | 0x362e, 0x0078, 0x4677, 0x1078, 0x4760, 0x1078, 0x3659, 0xa6b5, | ||
1781 | 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0004, | ||
1782 | 0x0c7f, 0x007c, 0x007e, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, | ||
1783 | 0x8003, 0x8003, 0xa0e0, 0x5480, 0x007f, 0x007c, 0x0c7e, 0x1078, | ||
1784 | 0x4682, 0x1078, 0x3659, 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0, | ||
1785 | 0x4781, 0x7aa8, 0xa294, 0x00ff, 0x69b8, 0xa184, 0x0200, 0x0040, | ||
1786 | 0x46cc, 0xa18c, 0xfdff, 0x69ba, 0x78a0, 0xa005, 0x00c0, 0x46cc, | ||
1787 | 0xa282, 0x0002, 0x00c8, 0x376b, 0x1078, 0x472a, 0x1078, 0x36f9, | ||
1788 | 0x1078, 0x3652, 0xa684, 0x0100, 0x0040, 0x46c2, 0x682c, 0xa084, | ||
1789 | 0x0001, 0x0040, 0x46c2, 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040, | ||
1790 | 0x46c2, 0xc6fd, 0xa6b5, 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x0091, | ||
1791 | 0x781a, 0x2001, 0x0001, 0x007c, 0x0c7e, 0x1078, 0x4682, 0xa284, | ||
1792 | 0xfffe, 0x0040, 0x46d7, 0x2011, 0x0001, 0x0078, 0x46db, 0xa284, | ||
1793 | 0x0001, 0x0040, 0x46e1, 0x6100, 0xd1ec, 0x00c0, 0x46e1, 0x2011, | ||
1794 | 0x0000, 0x1078, 0x471c, 0x1078, 0x3700, 0x1078, 0x3659, 0xa684, | ||
1795 | 0x0100, 0x0040, 0x46f7, 0x682c, 0xa084, 0x0001, 0x0040, 0x46f7, | ||
1796 | 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040, 0x46f7, 0xc6fd, 0xa6b5, | ||
1797 | 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0004, | ||
1798 | 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0x6000, 0x2011, 0x0001, 0xa084, | ||
1799 | 0x2000, 0x00c0, 0x470d, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, | ||
1800 | 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x68b8, 0xa085, | ||
1801 | 0x0200, 0x68ba, 0x0c7f, 0x007c, 0x789b, 0x0018, 0x78ab, 0x0001, | ||
1802 | 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0081, 0x78ab, | ||
1803 | 0x0004, 0x007c, 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, 0x1000, | ||
1804 | 0x00c0, 0x4738, 0x2029, 0x0032, 0x2021, 0x0000, 0x0078, 0x4758, | ||
1805 | 0x6508, 0xa5ac, 0x00ff, 0x7018, 0xa086, 0x0028, 0x00c0, 0x4748, | ||
1806 | 0xa582, 0x0019, 0x00c8, 0x474e, 0x2029, 0x0019, 0x0078, 0x474e, | ||
1807 | 0xa582, 0x000c, 0x00c8, 0x474e, 0x2029, 0x000c, 0x6408, 0x8427, | ||
1808 | 0xa4a4, 0x00ff, 0xa482, 0x000c, 0x0048, 0x4758, 0x2021, 0x000c, | ||
1809 | 0x1078, 0x4764, 0x68b8, 0xa085, 0x0100, 0x68ba, 0x0c7f, 0x007c, | ||
1810 | 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0018, 0x78ab, 0x0001, | ||
1811 | 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0081, | ||
1812 | 0x78ab, 0x0005, 0x007c, 0x2001, 0x0003, 0x1078, 0x478f, 0xa6b5, | ||
1813 | 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0005, | ||
1814 | 0x007c, 0x2001, 0x0007, 0x1078, 0x478f, 0xa6b5, 0x1000, 0x7e5a, | ||
1815 | 0x70b4, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0004, 0x007c, 0x789b, | ||
1816 | 0x0018, 0x78aa, 0x789b, 0x0081, 0x78ab, 0x0001, 0x007c, 0x6904, | ||
1817 | 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x47a5, 0xa196, 0x000f, | ||
1818 | 0x0040, 0x47a5, 0x1078, 0x19ac, 0x007c, 0x6924, 0xa194, 0x003f, | ||
1819 | 0x00c0, 0x47ae, 0xa18c, 0xffc0, 0xa105, 0x6826, 0x1078, 0x3bc6, | ||
1820 | 0x691c, 0xa184, 0x0100, 0x0040, 0x47bb, 0x6914, 0x1078, 0x3c3b, | ||
1821 | 0x6204, 0x8210, 0x6206, 0x007c, 0x692c, 0x6834, 0x682e, 0xa112, | ||
1822 | 0x6930, 0x6838, 0x6832, 0xa11b, 0xa200, 0xa301, 0x007c, 0x0c7e, | ||
1823 | 0xade0, 0x0018, 0x6003, 0x0070, 0x6106, 0x600b, 0x0000, 0x600f, | ||
1824 | 0x0a00, 0x6013, 0x0000, 0x6017, 0x0000, 0x8007, 0x601a, 0x601f, | ||
1825 | 0x0000, 0x6023, 0x0000, 0x0c7f, 0x6824, 0xa085, 0x0080, 0x6826, | ||
1826 | 0x007c, 0x157e, 0x137e, 0x147e, 0x2098, 0xaf80, 0x002d, 0x20a0, | ||
1827 | 0x81ac, 0x0040, 0x47ec, 0x53a6, 0xa184, 0x0001, 0x0040, 0x47f2, | ||
1828 | 0x3304, 0x78be, 0x147f, 0x137f, 0x157f, 0x007c, 0x70b0, 0xa005, | ||
1829 | 0x10c0, 0x248c, 0x70b3, 0x8000, 0x0078, 0x4b4b, 0x71b0, 0x81ff, | ||
1830 | 0x0040, 0x4804, 0x1078, 0x4c41, 0x007c, 0x71b0, 0x81ff, 0x0040, | ||
1831 | 0x4811, 0x7848, 0xa085, 0x0008, 0x784a, 0x70b3, 0x0000, 0x1078, | ||
1832 | 0x4887, 0x007c, 0x0c7e, 0x0d7e, 0x1078, 0x1989, 0x00c0, 0x481a, | ||
1833 | 0x1078, 0x248c, 0x0c7f, 0x157e, 0x137e, 0x147e, 0x2da0, 0x2c98, | ||
1834 | 0x20a9, 0x0031, 0x53a3, 0x147f, 0x137f, 0x157f, 0x6807, 0x010d, | ||
1835 | 0x680b, 0x0000, 0x7004, 0x8007, 0x681a, 0x6823, 0x0000, 0x681f, | ||
1836 | 0x0000, 0x689f, 0x0000, 0x0c7f, 0x007c, 0x70b4, 0xa080, 0x0091, | ||
1837 | 0x781a, 0x0078, 0x24fa, 0x70b4, 0xa080, 0x0081, 0x781a, 0x0078, | ||
1838 | 0x24fa, 0x70b4, 0xa080, 0x00b9, 0x781a, 0x0078, 0x24fa, 0x70b4, | ||
1839 | 0xa080, 0x00c3, 0x781a, 0x0078, 0x24fa, 0x6904, 0xa18c, 0x00ff, | ||
1840 | 0xa196, 0x0007, 0x0040, 0x485a, 0xa196, 0x000f, 0x0040, 0x485a, | ||
1841 | 0x6807, 0x0117, 0x6824, 0xa084, 0x00ff, 0xa085, 0x0200, 0x6826, | ||
1842 | 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, | ||
1843 | 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71b4, 0xa188, 0x0091, 0x791a, | ||
1844 | 0x007c, 0x1078, 0x4805, 0x7848, 0xa085, 0x000c, 0x784a, 0x70b4, | ||
1845 | 0xa080, 0x00cd, 0x781a, 0x2009, 0x000b, 0x2001, 0x4400, 0x1078, | ||
1846 | 0x47c7, 0x2001, 0x0013, 0x1078, 0x4797, 0x0078, 0x3c68, 0x127e, | ||
1847 | 0x2091, 0x2200, 0x2049, 0x4887, 0x7000, 0x7204, 0xa205, 0x720c, | ||
1848 | 0xa215, 0x7008, 0xa084, 0xfff7, 0xa205, 0x0040, 0x4899, 0x0078, | ||
1849 | 0x489e, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084, | ||
1850 | 0x0001, 0x00c0, 0x48cc, 0x7108, 0x8103, 0x00c8, 0x48ab, 0x1078, | ||
1851 | 0x49ce, 0x0078, 0x48a3, 0x700c, 0xa08c, 0x00ff, 0x0040, 0x48cc, | ||
1852 | 0x7004, 0x8004, 0x00c8, 0x48c3, 0x7014, 0xa005, 0x00c0, 0x48bf, | ||
1853 | 0x7010, 0xa005, 0x0040, 0x48c3, 0xa102, 0x00c8, 0x48a3, 0x7007, | ||
1854 | 0x0010, 0x0078, 0x48cc, 0x8aff, 0x0040, 0x48cc, 0x1078, 0x4c18, | ||
1855 | 0x00c0, 0x48c6, 0x0040, 0x48a3, 0x1078, 0x4957, 0x7003, 0x0000, | ||
1856 | 0x127f, 0x2000, 0x007c, 0x017e, 0x6104, 0xa18c, 0x00ff, 0xa186, | ||
1857 | 0x0007, 0x0040, 0x48df, 0xa18e, 0x000f, 0x00c0, 0x48e2, 0x6040, | ||
1858 | 0x0078, 0x48e3, 0x6428, 0x017f, 0x84ff, 0x0040, 0x490d, 0x2c70, | ||
1859 | 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x491d, 0x273c, 0x87fb, 0x00c0, | ||
1860 | 0x48fb, 0x0048, 0x48f5, 0x1078, 0x248c, 0x609c, 0xa075, 0x0040, | ||
1861 | 0x490d, 0x0078, 0x48e8, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, | ||
1862 | 0xa529, 0x8421, 0x0040, 0x490d, 0x8738, 0x2704, 0xa005, 0x00c0, | ||
1863 | 0x48fc, 0x709c, 0xa075, 0x00c0, 0x48e8, 0x007c, 0x0000, 0x0005, | ||
1864 | 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, | ||
1865 | 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x4912, 0x490f, | ||
1866 | 0x0000, 0x0000, 0x8000, 0x0000, 0x4912, 0x0000, 0x491a, 0x4917, | ||
1867 | 0x0000, 0x0000, 0x0000, 0x0000, 0x491a, 0x0000, 0x4915, 0x4915, | ||
1868 | 0x0000, 0x0000, 0x8000, 0x0000, 0x4915, 0x0000, 0x491b, 0x491b, | ||
1869 | 0x0000, 0x0000, 0x0000, 0x0000, 0x491b, 0x127e, 0x2091, 0x2200, | ||
1870 | 0x2079, 0x5200, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, | ||
1871 | 0x7003, 0x0000, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, 0x0002, | ||
1872 | 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x2049, | ||
1873 | 0x4957, 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x49aa, 0x7007, | ||
1874 | 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4961, 0xa184, 0x01e0, | ||
1875 | 0x0040, 0x496c, 0x1078, 0x248c, 0x2001, 0x04fd, 0x2004, 0xa082, | ||
1876 | 0x0005, 0x00c8, 0x4977, 0xa184, 0x4000, 0x00c0, 0x4961, 0xa19c, | ||
1877 | 0x300c, 0xa386, 0x2004, 0x0040, 0x4985, 0xa386, 0x0008, 0x0040, | ||
1878 | 0x4990, 0xa386, 0x200c, 0x00c0, 0x4961, 0x7200, 0x8204, 0x0048, | ||
1879 | 0x4990, 0x730c, 0xa384, 0x00ff, 0x0040, 0x4990, 0x1078, 0x248c, | ||
1880 | 0x7007, 0x0012, 0x7000, 0xa084, 0x0001, 0x00c0, 0x49aa, 0x7008, | ||
1881 | 0xa084, 0x01e0, 0x00c0, 0x49aa, 0x7310, 0x7014, 0xa305, 0x0040, | ||
1882 | 0x49aa, 0x710c, 0xa184, 0x0300, 0x00c0, 0x49aa, 0xa184, 0x00ff, | ||
1883 | 0x00c0, 0x4957, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, | ||
1884 | 0x0008, 0x00c0, 0x49ae, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048, | ||
1885 | 0x49b3, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e, | ||
1886 | 0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x49ce, 0x157f, | ||
1887 | 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x7500, | ||
1888 | 0x730c, 0xa384, 0x0300, 0x00c0, 0x49f5, 0xa184, 0x01e0, 0x00c0, | ||
1889 | 0x4a19, 0x7108, 0xa184, 0x01e0, 0x00c0, 0x4a19, 0x2001, 0x04fd, | ||
1890 | 0x2004, 0xa082, 0x0005, 0x00c8, 0x49e9, 0xa184, 0x4000, 0x00c0, | ||
1891 | 0x49d9, 0xa184, 0x0007, 0x0079, 0x49ed, 0x49f7, 0x4a09, 0x49f5, | ||
1892 | 0x4a09, 0x49f5, 0x4a55, 0x49f5, 0x4a53, 0x1078, 0x248c, 0x7004, | ||
1893 | 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0, 0x4a04, | ||
1894 | 0x2049, 0x0000, 0x0078, 0x4a08, 0x1078, 0x4c18, 0x00c0, 0x4a04, | ||
1895 | 0x007c, 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, | ||
1896 | 0x00c0, 0x4a14, 0x0078, 0x4a18, 0x1078, 0x4c18, 0x00c0, 0x4a14, | ||
1897 | 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0, 0x4a1c, 0x2091, 0x6000, | ||
1898 | 0x00e0, 0x4a20, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, | ||
1899 | 0x7004, 0xa084, 0x0008, 0x00c0, 0x4a28, 0x7007, 0x0012, 0x7108, | ||
1900 | 0x8103, 0x0048, 0x4a2d, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0, | ||
1901 | 0x4a41, 0x7004, 0xa005, 0x00c0, 0x4a41, 0x700c, 0xa005, 0x0040, | ||
1902 | 0x4a43, 0x0078, 0x4a24, 0x2049, 0x0000, 0x1078, 0x38d7, 0x6818, | ||
1903 | 0xa084, 0x8000, 0x0040, 0x4a4e, 0x681b, 0x0002, 0x007c, 0x1078, | ||
1904 | 0x248c, 0x1078, 0x248c, 0x1078, 0x4ab1, 0x7210, 0x7114, 0x700c, | ||
1905 | 0xa09c, 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x1078, | ||
1906 | 0x4ab1, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, | ||
1907 | 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x4a78, 0x00c8, 0x4a78, | ||
1908 | 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x4a5f, | ||
1909 | 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040, 0x4a84, | ||
1910 | 0xa7ba, 0x4917, 0x0078, 0x4a86, 0xa7ba, 0x490f, 0x007f, 0xa73d, | ||
1911 | 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7007, 0x0012, 0x1078, | ||
1912 | 0x4957, 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x4aa5, 0x609c, | ||
1913 | 0xa005, 0x0040, 0x4aae, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, | ||
1914 | 0x491d, 0x203c, 0x87fb, 0x1040, 0x248c, 0x8a51, 0x0040, 0x4aad, | ||
1915 | 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c, 0x2051, 0x0000, | ||
1916 | 0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x4ac5, 0x6000, | ||
1917 | 0xa064, 0x00c0, 0x4abc, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, | ||
1918 | 0x492d, 0x203c, 0x87fb, 0x1040, 0x248c, 0x007c, 0x127e, 0x0d7e, | ||
1919 | 0x2091, 0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, | ||
1920 | 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084, | ||
1921 | 0x0008, 0x007f, 0x0040, 0x4ae0, 0xa0b8, 0x4917, 0x0078, 0x4ae2, | ||
1922 | 0xa0b8, 0x490f, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, | ||
1923 | 0xa186, 0x0007, 0x0040, 0x4af0, 0xa18e, 0x000f, 0x00c0, 0x4af9, | ||
1924 | 0x681c, 0xa084, 0x0040, 0x0040, 0x4b00, 0xa6b5, 0x0001, 0x0078, | ||
1925 | 0x4b00, 0x681c, 0xa084, 0x0040, 0x0040, 0x4b00, 0xa6b5, 0x0001, | ||
1926 | 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4b02, 0x2400, | ||
1927 | 0xa305, 0x00c0, 0x4b0d, 0x0078, 0x4b33, 0x2c58, 0x2704, 0x6104, | ||
1928 | 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, | ||
1929 | 0x0008, 0x0040, 0x4b23, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, | ||
1930 | 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, | ||
1931 | 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, | ||
1932 | 0x4a92, 0x0078, 0x4b35, 0x1078, 0x4c18, 0x00c0, 0x4b33, 0x127f, | ||
1933 | 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, | ||
1934 | 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4b41, 0x7003, 0x0008, | ||
1935 | 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, | ||
1936 | 0x2049, 0x4b4b, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, | ||
1937 | 0x4b54, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, | ||
1938 | 0x0007, 0x0040, 0x4b67, 0xa18e, 0x000f, 0x00c0, 0x4b72, 0x681c, | ||
1939 | 0xa084, 0x0040, 0x0040, 0x4b6e, 0xa6b5, 0x0001, 0x6840, 0x2050, | ||
1940 | 0x0078, 0x4b7b, 0x681c, 0xa084, 0x0020, 0x00c0, 0x4b79, 0xa6b5, | ||
1941 | 0x0001, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, | ||
1942 | 0x491d, 0x273c, 0x87fb, 0x00c0, 0x4b8f, 0x0048, 0x4b89, 0x1078, | ||
1943 | 0x248c, 0x689c, 0xa065, 0x0040, 0x4b93, 0x0078, 0x4b7c, 0x1078, | ||
1944 | 0x4c18, 0x00c0, 0x4b8f, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, | ||
1945 | 0x017e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, | ||
1946 | 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, | ||
1947 | 0x4bad, 0xa18e, 0x000f, 0x00c0, 0x4bb6, 0x681c, 0xa084, 0x0040, | ||
1948 | 0x0040, 0x4bbd, 0xa6b5, 0x0001, 0x0078, 0x4bbd, 0x681c, 0xa084, | ||
1949 | 0x0040, 0x0040, 0x4bbd, 0xa6b5, 0x0001, 0x2049, 0x4b96, 0x017e, | ||
1950 | 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4bcb, 0xa18e, | ||
1951 | 0x000f, 0x00c0, 0x4bce, 0x6840, 0x0078, 0x4bcf, 0x6828, 0x017f, | ||
1952 | 0xa055, 0x0040, 0x4c15, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, | ||
1953 | 0xa7b8, 0x491d, 0x273c, 0x87fb, 0x00c0, 0x4be9, 0x0048, 0x4be2, | ||
1954 | 0x1078, 0x248c, 0x709c, 0xa075, 0x2060, 0x0040, 0x4c15, 0x0078, | ||
1955 | 0x4bd5, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048, | ||
1956 | 0x4c02, 0x8a51, 0x00c0, 0x4bf6, 0x1078, 0x248c, 0x8738, 0x2704, | ||
1957 | 0xa005, 0x00c0, 0x4bea, 0x709c, 0xa075, 0x2060, 0x0040, 0x4c15, | ||
1958 | 0x0078, 0x4bd5, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, | ||
1959 | 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x4c11, 0x1078, | ||
1960 | 0x248c, 0x2071, 0x0020, 0x0078, 0x4b00, 0x127f, 0x2000, 0x007c, | ||
1961 | 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, 0x0040, 0x4c40, 0x2704, | ||
1962 | 0xac08, 0x2104, 0x701a, 0x8108, 0x2104, 0x701e, 0x8108, 0x2104, | ||
1963 | 0x7012, 0x8108, 0x2104, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, | ||
1964 | 0x4c37, 0x8108, 0x2104, 0x7022, 0x8108, 0x2104, 0x7026, 0x7602, | ||
1965 | 0x7004, 0xa084, 0x0010, 0xa085, 0x0001, 0x7006, 0x1078, 0x4a92, | ||
1966 | 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x4c41, | ||
1967 | 0x0d7f, 0x087f, 0x7108, 0xa184, 0x0003, 0x00c0, 0x4c6b, 0x017e, | ||
1968 | 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4c5b, 0xa18e, | ||
1969 | 0x000f, 0x00c0, 0x4c5e, 0x6840, 0x0078, 0x4c5f, 0x6828, 0x017f, | ||
1970 | 0xa005, 0x0040, 0x4c79, 0x0078, 0x489e, 0x0020, 0x4c6b, 0x1078, | ||
1971 | 0x4a55, 0x0078, 0x4c79, 0x00a0, 0x4c72, 0x7108, 0x1078, 0x49ce, | ||
1972 | 0x0078, 0x4c4a, 0x7007, 0x0010, 0x00a0, 0x4c74, 0x7108, 0x1078, | ||
1973 | 0x49ce, 0x7008, 0xa086, 0x0008, 0x00c0, 0x4c4a, 0x7000, 0xa005, | ||
1974 | 0x00c0, 0x4c4a, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, | ||
1975 | 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x2091, | ||
1976 | 0x2200, 0x0d7f, 0x2049, 0x4c89, 0xad80, 0x0011, 0x20a0, 0x2099, | ||
1977 | 0x0031, 0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, 0x7007, | ||
1978 | 0x0002, 0x7003, 0x0001, 0x0040, 0x4ca8, 0x8000, 0x80ac, 0x53a5, | ||
1979 | 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4caa, 0x0c7f, | ||
1980 | 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, | ||
1981 | 0x2000, 0x007c, 0x2091, 0x6000, 0x2091, 0x8000, 0x78cc, 0xa005, | ||
1982 | 0x0040, 0x4cd1, 0x7994, 0x70d0, 0xa106, 0x00c0, 0x4cd1, 0x7804, | ||
1983 | 0xa005, 0x0040, 0x4cd1, 0x7807, 0x0000, 0x0068, 0x4cd1, 0x2091, | ||
1984 | 0x4080, 0x7820, 0x8001, 0x7822, 0x00c0, 0x4d2c, 0x7824, 0x7822, | ||
1985 | 0x2069, 0x5240, 0x6800, 0xa084, 0x0007, 0x0040, 0x4cef, 0xa086, | ||
1986 | 0x0002, 0x0040, 0x4cef, 0x6834, 0xa00d, 0x0040, 0x4cef, 0x2104, | ||
1987 | 0xa005, 0x0040, 0x4cef, 0x8001, 0x200a, 0x0040, 0x4dd4, 0x7848, | ||
1988 | 0xa005, 0x0040, 0x4cfd, 0x8001, 0x784a, 0x00c0, 0x4cfd, 0x2009, | ||
1989 | 0x0102, 0x6844, 0x200a, 0x1078, 0x226f, 0x6890, 0xa005, 0x0040, | ||
1990 | 0x4d09, 0x8001, 0x6892, 0x00c0, 0x4d09, 0x686f, 0x0000, 0x6873, | ||
1991 | 0x0001, 0x2061, 0x5500, 0x20a9, 0x0100, 0x2009, 0x0002, 0x6034, | ||
1992 | 0xa005, 0x0040, 0x4d1f, 0x8001, 0x6036, 0x00c0, 0x4d1f, 0x6010, | ||
1993 | 0xa005, 0x0040, 0x4d1f, 0x017e, 0x1078, 0x226f, 0x017f, 0xace0, | ||
1994 | 0x0010, 0x0070, 0x4d25, 0x0078, 0x4d0f, 0x8109, 0x0040, 0x4d2c, | ||
1995 | 0x20a9, 0x0100, 0x0078, 0x4d0f, 0x1078, 0x4d39, 0x1078, 0x4d5e, | ||
1996 | 0x2009, 0x5251, 0x2104, 0x2009, 0x0102, 0x200a, 0x2091, 0x8001, | ||
1997 | 0x007c, 0x7834, 0x8001, 0x7836, 0x00c0, 0x4d5d, 0x7838, 0x7836, | ||
1998 | 0x2091, 0x8000, 0x7844, 0xa005, 0x00c0, 0x4d48, 0x2001, 0x0101, | ||
1999 | 0x8001, 0x7846, 0xa080, 0x7500, 0x2040, 0x2004, 0xa065, 0x0040, | ||
2000 | 0x4d5d, 0x6024, 0xa005, 0x0040, 0x4d59, 0x8001, 0x6026, 0x0040, | ||
2001 | 0x4d8d, 0x6000, 0x2c40, 0x0078, 0x4d4e, 0x007c, 0x7828, 0x8001, | ||
2002 | 0x782a, 0x00c0, 0x4d8c, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, | ||
2003 | 0x4d6b, 0x2001, 0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, | ||
2004 | 0x8003, 0xa090, 0x5500, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, | ||
2005 | 0x0040, 0x4d8c, 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x4d84, | ||
2006 | 0x8001, 0x2012, 0x00c0, 0x4d8c, 0x2304, 0xa084, 0xfff7, 0xa085, | ||
2007 | 0x0080, 0x201a, 0x1078, 0x226f, 0x007c, 0x2069, 0x5240, 0x6800, | ||
2008 | 0xa005, 0x0040, 0x4d97, 0x6848, 0xac06, 0x0040, 0x4dd4, 0x601b, | ||
2009 | 0x0006, 0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, | ||
2010 | 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x6714, 0x6f82, 0x1078, | ||
2011 | 0x19c5, 0x6818, 0xa005, 0x0040, 0x4daf, 0x8001, 0x681a, 0x6808, | ||
2012 | 0xa084, 0xffef, 0x680a, 0x6810, 0x8001, 0x00d0, 0x4db9, 0x1078, | ||
2013 | 0x248c, 0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, | ||
2014 | 0x1cdc, 0x2069, 0x5240, 0x7944, 0xa184, 0x0100, 0x2001, 0x0006, | ||
2015 | 0x686e, 0x00c0, 0x4dcf, 0x6986, 0x2001, 0x0004, 0x686e, 0x1078, | ||
2016 | 0x226a, 0x2091, 0x8001, 0x007c, 0x2069, 0x0100, 0x2009, 0x5240, | ||
2017 | 0x2104, 0xa084, 0x0007, 0x0040, 0x4e30, 0xa086, 0x0007, 0x00c0, | ||
2018 | 0x4dea, 0x0d7e, 0x2009, 0x5252, 0x216c, 0x1078, 0x3b1c, 0x0d7f, | ||
2019 | 0x0078, 0x4e30, 0x2009, 0x5252, 0x2164, 0x1078, 0x2437, 0x601b, | ||
2020 | 0x0006, 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, | ||
2021 | 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, 0x6830, | ||
2022 | 0xa084, 0x0040, 0x0040, 0x4e24, 0x684b, 0x0004, 0x20a9, 0x0014, | ||
2023 | 0x6848, 0xa084, 0x0004, 0x0040, 0x4e11, 0x0070, 0x4e11, 0x0078, | ||
2024 | 0x4e08, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, | ||
2025 | 0x0040, 0x4e1e, 0x0070, 0x4e1e, 0x0078, 0x4e15, 0x20a9, 0x00fa, | ||
2026 | 0x0070, 0x4e24, 0x0078, 0x4e20, 0x6808, 0xa084, 0xfffd, 0x680a, | ||
2027 | 0x681b, 0x0048, 0x2009, 0x525b, 0x200b, 0x0007, 0x784c, 0x784a, | ||
2028 | 0x2091, 0x8001, 0x007c, 0x2079, 0x5200, 0x1078, 0x4e5e, 0x1078, | ||
2029 | 0x4e42, 0x1078, 0x4e50, 0x7833, 0x0000, 0x7847, 0x0000, 0x784b, | ||
2030 | 0x0000, 0x007c, 0x2019, 0x0003, 0x2011, 0x5246, 0x2204, 0xa086, | ||
2031 | 0x003c, 0x0040, 0x4e4d, 0x2019, 0x0002, 0x7b2a, 0x7b2e, 0x007c, | ||
2032 | 0x2019, 0x0039, 0x2011, 0x5246, 0x2204, 0xa086, 0x003c, 0x0040, | ||
2033 | 0x4e5b, 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x3971, | ||
2034 | 0x2011, 0x5246, 0x2204, 0xa086, 0x003c, 0x0040, 0x4e69, 0x2019, | ||
2035 | 0x2626, 0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, 0x007c, | ||
2036 | 0x0020, 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
2037 | 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
2038 | 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
2039 | 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
2040 | 0x0000, 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, | ||
2041 | 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0080, 0x000f, 0x0000, | ||
2042 | 0x0201, 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, | ||
2043 | 0xa201, 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0x0000, 0x006c, | ||
2044 | 0x0002, 0x0014, 0x98cd, 0x009e, 0x0093, 0xa202, 0x8838, 0x3806, | ||
2045 | 0x8839, 0x20c3, 0x0864, 0x9885, 0x28c1, 0x9cae, 0xa203, 0x300c, | ||
2046 | 0x2846, 0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0x9865, 0x28f2, | ||
2047 | 0x9c91, 0x9858, 0x300c, 0x28e1, 0x9c91, 0x2802, 0xa206, 0x64c3, | ||
2048 | 0x282e, 0xa207, 0x64a0, 0x6de0, 0x67a0, 0x6fc0, 0x1814, 0x883b, | ||
2049 | 0x7824, 0x68c1, 0x7864, 0x883e, 0x9879, 0x8576, 0x8677, 0x206b, | ||
2050 | 0x28c1, 0x9cae, 0x2044, 0x2103, 0x20a2, 0x2081, 0x9865, 0xa209, | ||
2051 | 0x2901, 0x988d, 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, 0x883c, | ||
2052 | 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c91, 0x0014, 0xa204, | ||
2053 | 0xa300, 0x3009, 0x19e2, 0xf864, 0x856e, 0x883f, 0x08e6, 0x9891, | ||
2054 | 0xf881, 0x988c, 0xc801, 0x0014, 0xf8c1, 0x0016, 0x85b2, 0x80f0, | ||
2055 | 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241, 0x0014, 0x1de2, | ||
2056 | 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008, 0x1dc1, | ||
2057 | 0x0016, 0x8300, 0x8160, 0x842a, 0xf041, 0x3008, 0x84a8, 0x11d6, | ||
2058 | 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x8000, 0x2847, | ||
2059 | 0x1011, 0x98c0, 0x8000, 0xa000, 0x2802, 0x1011, 0x98c6, 0x9865, | ||
2060 | 0x283e, 0x1011, 0x98ca, 0xa20b, 0x0017, 0x300c, 0xa300, 0x1de2, | ||
2061 | 0xdb81, 0x0014, 0x0210, 0x98d7, 0x0014, 0x26e0, 0x873a, 0xfb02, | ||
2062 | 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9cb3, 0x0704, | ||
2063 | 0x0000, 0x006c, 0x0002, 0x984f, 0x0014, 0x009e, 0x00a0, 0x0017, | ||
2064 | 0x60ff, 0x300c, 0x8720, 0xa211, 0x9cd0, 0x8772, 0x8837, 0x2101, | ||
2065 | 0x987a, 0x10d2, 0x78e2, 0x9cd3, 0x9859, 0xd984, 0xf0e2, 0xf0a1, | ||
2066 | 0x98cd, 0x0014, 0x8831, 0xd166, 0x8830, 0x800f, 0x9401, 0xb520, | ||
2067 | 0xc802, 0x8820, 0x987a, 0x2301, 0x987a, 0x10d2, 0x78e4, 0x9cd3, | ||
2068 | 0x8821, 0x8820, 0x9859, 0xf123, 0xf142, 0xf101, 0x98c6, 0x10d2, | ||
2069 | 0x70f6, 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001, 0x0014, 0x6845, | ||
2070 | 0x0214, 0xa21b, 0x9cd0, 0x2001, 0x98c5, 0x8201, 0x1852, 0xd184, | ||
2071 | 0xd163, 0x8834, 0x8001, 0x988d, 0x3027, 0x84a8, 0x1a56, 0x8833, | ||
2072 | 0x0014, 0xa218, 0x6981, 0x9cbc, 0x6926, 0x6902, 0x1a34, 0x9899, | ||
2073 | 0x1a14, 0x7021, 0x0014, 0xa300, 0x6141, 0x6964, 0x8010, 0x8592, | ||
2074 | 0x8026, 0x84b9, 0x69e4, 0x8023, 0x16e1, 0x8001, 0x10f1, 0x6946, | ||
2075 | 0xa213, 0x1462, 0xa213, 0x8000, 0x16e1, 0x98b5, 0x6969, 0xa214, | ||
2076 | 0x61c2, 0x8002, 0x14e1, 0x8004, 0x16e1, 0x0101, 0x300a, 0x8827, | ||
2077 | 0x0014, 0xa217, 0x9cbc, 0x0014, 0xa300, 0x8181, 0x842a, 0x84a8, | ||
2078 | 0x1ce6, 0x882c, 0x0016, 0xa212, 0x9cd0, 0x10d2, 0x70e4, 0x0004, | ||
2079 | 0x8007, 0x9424, 0xcc1a, 0x9cd3, 0x98c5, 0x8827, 0x300a, 0x0013, | ||
2080 | 0x8000, 0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e, 0xa21d, 0x0014, | ||
2081 | 0x878e, 0x0016, 0xa21c, 0x1035, 0x9891, 0xa210, 0xa000, 0x8010, | ||
2082 | 0x8592, 0x853b, 0xd044, 0x8022, 0x3807, 0x84bb, 0x98ea, 0x8021, | ||
2083 | 0x3807, 0x84b9, 0x300c, 0x817e, 0x872b, 0x8772, 0x9891, 0x0000, | ||
2084 | 0x0020, 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
2085 | 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
2086 | 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
2087 | 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
2088 | 0x0000, 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, | ||
2089 | 0x98e2, 0x98cd, 0x0014, 0x0014, 0x0014, 0x0080, 0x0137, 0x0000, | ||
2090 | 0x0201, 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, | ||
2091 | 0xa201, 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0xa202, 0x8838, | ||
2092 | 0x3806, 0x8839, 0x20c3, 0x0864, 0xa82f, 0x28c1, 0x9cae, 0xa203, | ||
2093 | 0x300c, 0x2846, 0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0xa804, | ||
2094 | 0x28f2, 0x9c91, 0xa8f4, 0x300c, 0x28e1, 0x9c91, 0x2802, 0xa206, | ||
2095 | 0x64c3, 0x282e, 0xa207, 0x64a0, 0x6de0, 0x67a0, 0x6fc0, 0x1814, | ||
2096 | 0x883b, 0x7824, 0x68c1, 0x7864, 0x883e, 0xa802, 0x8576, 0x8677, | ||
2097 | 0x206b, 0x28c1, 0x9cae, 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8e4, | ||
2098 | 0xa209, 0x2901, 0xa809, 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, | ||
2099 | 0x883c, 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c91, 0x0014, | ||
2100 | 0xa204, 0xa300, 0x3009, 0x19e2, 0xf864, 0x856e, 0x883f, 0x08e6, | ||
2101 | 0xa8f7, 0xf881, 0xa8f0, 0xc801, 0x0014, 0xf8c1, 0x0016, 0x85b2, | ||
2102 | 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241, 0x0014, | ||
2103 | 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008, | ||
2104 | 0x1dc1, 0x0016, 0x8300, 0x8160, 0x842a, 0xf041, 0x3008, 0x84a8, | ||
2105 | 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x8000, | ||
2106 | 0x2847, 0x1011, 0xa8fc, 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, | ||
2107 | 0xa89b, 0x283e, 0x1011, 0xa8fd, 0xa20b, 0x0017, 0x300c, 0xa300, | ||
2108 | 0x1de2, 0xdb81, 0x0014, 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, | ||
2109 | 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9cb3, | ||
2110 | 0x0704, 0x0017, 0x60ff, 0x300c, 0x8720, 0xa211, 0x9d63, 0x8772, | ||
2111 | 0x8837, 0x2101, 0xa821, 0x10d2, 0x78e2, 0x9d66, 0xa8fc, 0xd984, | ||
2112 | 0xf0e2, 0xf0a1, 0xa86c, 0x0014, 0x8831, 0xd166, 0x8830, 0x800f, | ||
2113 | 0x9401, 0xb520, 0xc802, 0x8820, 0xa80f, 0x2301, 0xa80d, 0x10d2, | ||
2114 | 0x78e4, 0x9d66, 0x8821, 0x8820, 0xa8e6, 0xf123, 0xf142, 0xf101, | ||
2115 | 0xa84f, 0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001, | ||
2116 | 0x0014, 0x6845, 0x0214, 0xa21b, 0x9d63, 0x2001, 0xa840, 0x8201, | ||
2117 | 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0xa801, 0x3027, 0x84a8, | ||
2118 | 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9d4f, 0x6926, 0x6902, | ||
2119 | 0x1a34, 0xa801, 0x1a14, 0x7021, 0x0014, 0xa300, 0x6141, 0x6964, | ||
2120 | 0x8010, 0x8592, 0x8026, 0x84b9, 0x69e4, 0x8023, 0x16e1, 0x8001, | ||
2121 | 0x10f1, 0x6946, 0xa213, 0x1462, 0xa213, 0x8000, 0x16e1, 0xa807, | ||
2122 | 0x6969, 0xa214, 0x61c2, 0x8002, 0x14e1, 0x8004, 0x16e1, 0x0101, | ||
2123 | 0x300a, 0x8827, 0x0014, 0xa217, 0x9d4f, 0x0014, 0xa300, 0x8181, | ||
2124 | 0x842a, 0x84a8, 0x1ce6, 0x882c, 0x0016, 0xa212, 0x9d63, 0x10d2, | ||
2125 | 0x70e4, 0x0004, 0x8007, 0x9424, 0xcc1a, 0x9d66, 0xa8f8, 0x8827, | ||
2126 | 0x300a, 0x0013, 0x8000, 0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e, | ||
2127 | 0xa21d, 0x0014, 0x878e, 0x0016, 0xa21c, 0x1035, 0xa8b4, 0xa210, | ||
2128 | 0x3807, 0x300c, 0x817e, 0x872b, 0x8772, 0xa8ad, 0x0000, 0x0d0c | ||
2129 | }; | ||
2130 | static unsigned short risc_code_length01 = 0x4158; | ||
diff --git a/drivers/scsi/ql12160_fw.h b/drivers/scsi/ql12160_fw.h deleted file mode 100644 index d89dac0cc9d4..000000000000 --- a/drivers/scsi/ql12160_fw.h +++ /dev/null | |||
@@ -1,1811 +0,0 @@ | |||
1 | /***************************************************************************** | ||
2 | * QLOGIC LINUX SOFTWARE | ||
3 | * | ||
4 | * QLogic ISP12160 device driver for Linux 2.2.x and 2.4.x | ||
5 | * Copyright (C) 2002 Qlogic Corporation (www.qlogic.com) | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2, or (at your option) any | ||
10 | * later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License for more details. | ||
16 | * | ||
17 | *****************************************************************************/ | ||
18 | |||
19 | /************************************************************************ | ||
20 | * --- ISP12160A Initiator Firmware --- * | ||
21 | * 32 LUN Support * | ||
22 | ************************************************************************/ | ||
23 | |||
24 | /* | ||
25 | * Firmware Version 10.04.42 (15:44 Apr 18, 2003) | ||
26 | */ | ||
27 | |||
28 | #ifdef UNIQUE_FW_NAME | ||
29 | static unsigned char fw12160i_version_str[] = {10,4,42}; | ||
30 | #else | ||
31 | static unsigned char firmware_version[] = {10,4,42}; | ||
32 | #endif | ||
33 | |||
34 | #ifdef UNIQUE_FW_NAME | ||
35 | #define fw12160i_VERSION_STRING "10.04.42" | ||
36 | #else | ||
37 | #define FW_VERSION_STRING "10.04.42" | ||
38 | #endif | ||
39 | |||
40 | #ifdef UNIQUE_FW_NAME | ||
41 | static unsigned short fw12160i_addr01 = 0x1000; | ||
42 | #else | ||
43 | static unsigned short risc_code_addr01 = 0x1000; | ||
44 | #endif | ||
45 | |||
46 | #ifdef UNIQUE_FW_NAME | ||
47 | static unsigned short fw12160i_code01[] = { | ||
48 | #else | ||
49 | static unsigned short risc_code01[] = { | ||
50 | #endif | ||
51 | 0x0804, 0x1041, 0x0000, 0x36c9, 0x0000, 0x2043, 0x4f50, 0x5952, | ||
52 | 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31, | ||
53 | 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320, | ||
54 | 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350, | ||
55 | 0x3132, 0x3136, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, | ||
56 | 0x6572, 0x7369, 0x6f6e, 0x2031, 0x302e, 0x3034, 0x2020, 0x2043, | ||
57 | 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050, | ||
58 | 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020, | ||
59 | 0x2400, 0x20c9, 0x90ff, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2001, | ||
60 | 0x01ff, 0x2004, 0xd0fc, 0x1120, 0x2071, 0x0100, 0x70a0, 0x70a2, | ||
61 | 0x20c1, 0x0020, 0x2089, 0x1221, 0x2071, 0x0010, 0x70c3, 0x0004, | ||
62 | 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x000a, | ||
63 | 0x2001, 0x04fd, 0x2004, 0x70d6, 0x2009, 0xfeff, 0x2130, 0x2128, | ||
64 | 0xa1a2, 0x4700, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, | ||
65 | 0xa192, 0x9100, 0x2009, 0x0000, 0x2001, 0x0032, 0x080c, 0x1e05, | ||
66 | 0x2218, 0x2079, 0x4700, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, | ||
67 | 0x0040, 0x42a4, 0x8109, 0x1dd8, 0x2009, 0xff00, 0x3400, 0xa102, | ||
68 | 0x0218, 0x0110, 0x20a8, 0x42a4, 0x781b, 0x0064, 0x7814, 0xc0cd, | ||
69 | 0xc0d5, 0x7816, 0x2071, 0x0200, 0x00d6, 0x2069, 0x4740, 0x080c, | ||
70 | 0x465c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1130, 0x2069, 0x4780, | ||
71 | 0x2071, 0x0100, 0x080c, 0x465c, 0x7814, 0xc0d4, 0x7816, 0x00de, | ||
72 | 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800, 0xc08d, 0x7802, | ||
73 | 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002, 0x7827, 0x0002, | ||
74 | 0x2009, 0x0002, 0x2069, 0x4740, 0x681b, 0x0003, 0x6823, 0x0007, | ||
75 | 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, 0x6837, 0x0006, | ||
76 | 0x6833, 0x0008, 0x683b, 0x0000, 0x8109, 0x0500, 0x68cf, 0x000a, | ||
77 | 0x68bf, 0x47c0, 0x2079, 0x4700, 0x68d3, 0x762d, 0x68c3, 0x4cc0, | ||
78 | 0x68c7, 0x4bc0, 0x68cb, 0x8cc0, 0x68a7, 0x8f44, 0x68ab, 0x8f49, | ||
79 | 0x68af, 0x8f44, 0x68b3, 0x8f44, 0x68a3, 0x0001, 0x2001, 0x01ff, | ||
80 | 0x2004, 0xd0fc, 0x11c8, 0x2069, 0x4780, 0x0870, 0x68cf, 0x000a, | ||
81 | 0x68bf, 0x49c0, 0x68d3, 0x7839, 0x68c3, 0x6cc0, 0x68c7, 0x4c40, | ||
82 | 0x68cb, 0x8dd0, 0x68a7, 0x8f49, 0x68ab, 0x8f4e, 0x68af, 0x8f49, | ||
83 | 0x68b3, 0x8f49, 0x68a3, 0x0001, 0x00e6, 0x2069, 0x4bc0, 0x2071, | ||
84 | 0x0200, 0x70ec, 0xd0e4, 0x2019, 0x1809, 0x2021, 0x0009, 0x1120, | ||
85 | 0x2019, 0x180c, 0x2021, 0x000c, 0x080c, 0x1d75, 0x2001, 0x01ff, | ||
86 | 0x2004, 0xd0fc, 0x1188, 0x2069, 0x4c40, 0x2071, 0x0100, 0x70ec, | ||
87 | 0xd0e4, 0x2019, 0x1809, 0x2021, 0x0009, 0x1120, 0x2019, 0x180c, | ||
88 | 0x2021, 0x000c, 0x080c, 0x1d75, 0x00ee, 0x2011, 0x0002, 0x2069, | ||
89 | 0x4cc0, 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, | ||
90 | 0x0040, 0x7bc8, 0xa386, 0xfeff, 0x1128, 0x6817, 0x0100, 0x681f, | ||
91 | 0x0064, 0x0020, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, | ||
92 | 0x1f04, 0x1135, 0x8109, 0x1d38, 0x2001, 0x01ff, 0x2004, 0xd0fc, | ||
93 | 0x1128, 0x8211, 0x0118, 0x2069, 0x6cc0, 0x08d8, 0x080c, 0x22f6, | ||
94 | 0x080c, 0x403d, 0x080c, 0x1b8c, 0x080c, 0x4615, 0x2091, 0x2200, | ||
95 | 0x2079, 0x4700, 0x2071, 0x0050, 0x2091, 0x2400, 0x2079, 0x4700, | ||
96 | 0x2071, 0x0020, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x4740, | ||
97 | 0x2091, 0x2800, 0x2079, 0x0100, 0x2071, 0x4780, 0x2091, 0x2000, | ||
98 | 0x2079, 0x4700, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090, | ||
99 | 0x2071, 0x0010, 0x70c3, 0x0000, 0x1004, 0x118c, 0x70c0, 0xa086, | ||
100 | 0x0002, 0x1110, 0x080c, 0x13ba, 0x2039, 0x0000, 0x080c, 0x12ab, | ||
101 | 0x78ac, 0xa005, 0x1180, 0x0e04, 0x119a, 0x786c, 0xa065, 0x0110, | ||
102 | 0x080c, 0x20a1, 0x080c, 0x1e26, 0x0e04, 0x11af, 0x786c, 0xa065, | ||
103 | 0x0110, 0x080c, 0x20a1, 0x0e04, 0x11af, 0x2009, 0x4747, 0x2011, | ||
104 | 0x4787, 0x2104, 0x220c, 0xa105, 0x0110, 0x080c, 0x1c9b, 0x2071, | ||
105 | 0x4740, 0x70a0, 0xa005, 0x01e8, 0x744c, 0xa485, 0x0000, 0x01c8, | ||
106 | 0x2079, 0x0200, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d, 0x2190, | ||
107 | 0x080c, 0x274c, 0x2091, 0x8000, 0x2091, 0x303d, 0x0e04, 0x11d1, | ||
108 | 0x2079, 0x4700, 0x786c, 0xa065, 0x0120, 0x2071, 0x0010, 0x080c, | ||
109 | 0x20a1, 0x1d04, 0x11d9, 0x2079, 0x4700, 0x2071, 0x0010, 0x080c, | ||
110 | 0x4429, 0x2071, 0x4780, 0x70a0, 0xa005, 0x0188, 0x704c, 0xa025, | ||
111 | 0x0170, 0x2079, 0x0100, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d, | ||
112 | 0x2190, 0x080c, 0x274c, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079, | ||
113 | 0x4700, 0x2071, 0x0010, 0x0e04, 0x11fa, 0x786c, 0xa065, 0x0110, | ||
114 | 0x080c, 0x20a1, 0x1d04, 0x118e, 0x080c, 0x4429, 0x0804, 0x118e, | ||
115 | 0x3c00, 0xa084, 0x0007, 0x0002, 0x120c, 0x120c, 0x120e, 0x120e, | ||
116 | 0x1213, 0x1213, 0x1218, 0x1218, 0x080c, 0x2575, 0x2091, 0x2400, | ||
117 | 0x080c, 0x40d5, 0x0005, 0x2091, 0x2200, 0x080c, 0x40d5, 0x0005, | ||
118 | 0x2091, 0x2200, 0x080c, 0x40d5, 0x2091, 0x2400, 0x080c, 0x40d5, | ||
119 | 0x0005, 0x1241, 0x1241, 0x1242, 0x1242, 0x124d, 0x124d, 0x124d, | ||
120 | 0x124d, 0x1256, 0x1256, 0x1261, 0x1261, 0x124d, 0x124d, 0x124d, | ||
121 | 0x124d, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, | ||
122 | 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, | ||
123 | 0x1270, 0x0cf8, 0x0006, 0x0106, 0x0126, 0x2091, 0x2800, 0x080c, | ||
124 | 0x2592, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126, | ||
125 | 0x080c, 0x1200, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, | ||
126 | 0x0126, 0x2091, 0x2600, 0x080c, 0x2592, 0x012e, 0x010e, 0x000e, | ||
127 | 0x000d, 0x0006, 0x0106, 0x0126, 0x2091, 0x2600, 0x080c, 0x2592, | ||
128 | 0x2091, 0x2800, 0x080c, 0x2592, 0x012e, 0x010e, 0x000e, 0x000d, | ||
129 | 0x0006, 0x0106, 0x0126, 0x00d6, 0x00e6, 0x00f6, 0x2079, 0x4700, | ||
130 | 0x2071, 0x0200, 0x2069, 0x4740, 0x3d00, 0xd08c, 0x0130, 0x70ec, | ||
131 | 0xa084, 0x1c00, 0x78e2, 0x080c, 0x465c, 0x3d00, 0xd084, 0x0150, | ||
132 | 0x2069, 0x4780, 0x2071, 0x0100, 0x70ec, 0xa084, 0x1c00, 0x78e6, | ||
133 | 0x080c, 0x465c, 0x080c, 0x2526, 0x00fe, 0x00ee, 0x00de, 0x012e, | ||
134 | 0x010e, 0x000e, 0x000d, 0x7008, 0x800b, 0x1240, 0x7007, 0x0002, | ||
135 | 0xa08c, 0x01e0, 0x1120, 0xd09c, 0x0108, 0x0887, 0x0897, 0x70c3, | ||
136 | 0x4002, 0x0804, 0x13bd, 0x0e04, 0x131e, 0x2061, 0x0000, 0x6018, | ||
137 | 0xd084, 0x1904, 0x131e, 0x7828, 0xa005, 0x1120, 0x0004, 0x131f, | ||
138 | 0x0804, 0x131e, 0xd0fc, 0x0130, 0x0006, 0x080c, 0x1b29, 0x000e, | ||
139 | 0x0150, 0x0028, 0x0006, 0x080c, 0x1b1e, 0x000e, 0x0120, 0x2001, | ||
140 | 0x4007, 0x0804, 0x13bc, 0x7910, 0xd0fc, 0x1128, 0x2061, 0x4740, | ||
141 | 0xc19c, 0xc7fc, 0x0020, 0x2061, 0x4780, 0xc19d, 0xc7fd, 0x6060, | ||
142 | 0xa005, 0x1904, 0x131e, 0x7912, 0x607e, 0x7828, 0xc0fc, 0xa086, | ||
143 | 0x0018, 0x1120, 0x00c6, 0x080c, 0x1926, 0x00ce, 0x782b, 0x0000, | ||
144 | 0x6078, 0xa065, 0x01e0, 0x00c6, 0x609c, 0x080c, 0x1bf3, 0x00ce, | ||
145 | 0x609f, 0x0000, 0x080c, 0x1a60, 0x2009, 0x0018, 0x6087, 0x0103, | ||
146 | 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812, | ||
147 | 0x080c, 0x1b34, 0x000e, 0x7812, 0x1198, 0x080c, 0x1b7f, 0x7810, | ||
148 | 0xd09c, 0x1118, 0x2061, 0x4740, 0x0020, 0x2061, 0x4780, 0xc09c, | ||
149 | 0x7812, 0x607b, 0x0000, 0x60d0, 0xd0c4, 0x0130, 0xc0c4, 0x60d2, | ||
150 | 0x2001, 0x4005, 0x0804, 0x13bc, 0x0804, 0x13ba, 0x0005, 0xa006, | ||
151 | 0x70c2, 0x70c6, 0x70ca, 0x70ce, 0x70da, 0x70c0, 0xa03d, 0xa08a, | ||
152 | 0x0040, 0x1a04, 0x136c, 0x0002, 0x13ba, 0x1408, 0x13d6, 0x143c, | ||
153 | 0x1470, 0x1470, 0x13ce, 0x1a78, 0x147a, 0x13c8, 0x13da, 0x13db, | ||
154 | 0x13dc, 0x13dd, 0x1a7c, 0x13c8, 0x1487, 0x14db, 0x1941, 0x1a72, | ||
155 | 0x13de, 0x17c8, 0x17fe, 0x1830, 0x1876, 0x1785, 0x1792, 0x17a5, | ||
156 | 0x17b7, 0x15bf, 0x13c8, 0x150d, 0x1518, 0x1526, 0x1534, 0x154b, | ||
157 | 0x1559, 0x155c, 0x156e, 0x157c, 0x1586, 0x15a5, 0x15b1, 0x13c8, | ||
158 | 0x13c8, 0x13c8, 0x13c8, 0x15cc, 0x15dd, 0x15f7, 0x162b, 0x1654, | ||
159 | 0x1666, 0x1669, 0x1693, 0x16cc, 0x16de, 0x1753, 0x1763, 0x13c8, | ||
160 | 0x13c8, 0x13c8, 0x13c8, 0x1775, 0x2100, 0xa08a, 0x0040, 0x1a04, | ||
161 | 0x13c8, 0x0002, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x1a9e, | ||
162 | 0x1aa4, 0x13c8, 0x13c8, 0x13c8, 0x1aa8, 0x1ae8, 0x13c8, 0x13c8, | ||
163 | 0x13c8, 0x13c8, 0x1403, 0x146b, 0x1482, 0x14d6, 0x193c, 0x13c8, | ||
164 | 0x13c8, 0x190b, 0x13c8, 0x1aec, 0x1a90, 0x1a9a, 0x13c8, 0x13c8, | ||
165 | 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, | ||
166 | 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, | ||
167 | 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, | ||
168 | 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, | ||
169 | 0x13c8, 0x13c8, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0028, 0x73ce, | ||
170 | 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0e04, 0x13bd, 0x2061, | ||
171 | 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x0005, | ||
172 | 0x70c3, 0x4001, 0x0c90, 0x70c3, 0x4006, 0x0c78, 0x2099, 0x0041, | ||
173 | 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0c20, 0x70c4, 0x70c3, | ||
174 | 0x0004, 0x0807, 0x08f8, 0x08f0, 0x08e8, 0x08e0, 0x2091, 0x8000, | ||
175 | 0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, | ||
176 | 0x70d3, 0x000a, 0x2001, 0x0004, 0x70d6, 0x2079, 0x0000, 0x781b, | ||
177 | 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051, | ||
178 | 0x0445, 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091, | ||
179 | 0x4080, 0x0804, 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018, | ||
180 | 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, | ||
181 | 0x2099, 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e, | ||
182 | 0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0904, 0x13ba, 0xa182, | ||
183 | 0x0040, 0x1210, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x7007, | ||
184 | 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002, | ||
185 | 0xa084, 0x01e0, 0x0120, 0x70c3, 0x4002, 0x0804, 0x13bd, 0x24a8, | ||
186 | 0x53a5, 0x0c10, 0x0804, 0x13ba, 0x2029, 0x0000, 0x2520, 0x71d0, | ||
187 | 0x72c8, 0x73cc, 0x70c4, 0x2098, 0x20a1, 0x0030, 0x7003, 0x0000, | ||
188 | 0x7007, 0x0006, 0x731a, 0x721e, 0x7422, 0x7526, 0x2021, 0x0040, | ||
189 | 0x7007, 0x0006, 0x81ff, 0x0904, 0x13ba, 0xa182, 0x0040, 0x1210, | ||
190 | 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007, | ||
191 | 0x0001, 0x7008, 0xd0fc, 0x0de8, 0xa084, 0x01e0, 0x0d48, 0x70c3, | ||
192 | 0x4002, 0x0804, 0x13bd, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0878, | ||
193 | 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x1108, 0x200a, 0x72ca, | ||
194 | 0x0804, 0x13b9, 0x70c7, 0x000a, 0x70cb, 0x0004, 0x70cf, 0x002a, | ||
195 | 0x0804, 0x13ba, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0018, 0x2029, | ||
196 | 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, | ||
197 | 0x73ce, 0x74d2, 0xa005, 0x05e8, 0xa40a, 0x0108, 0x1240, 0x8001, | ||
198 | 0x7872, 0xa084, 0xfc00, 0x0138, 0x78ac, 0xc085, 0x78ae, 0x2001, | ||
199 | 0x4005, 0x0804, 0x13bc, 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76, | ||
200 | 0xa48c, 0xff00, 0x0170, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, | ||
201 | 0x810f, 0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, | ||
202 | 0x0050, 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1, | ||
203 | 0x0000, 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605, | ||
204 | 0x0118, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc, 0x78ae, | ||
205 | 0x0018, 0x78ac, 0xc085, 0x78ae, 0x0804, 0x13ba, 0x75d8, 0x76dc, | ||
206 | 0x75da, 0x76de, 0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, | ||
207 | 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0500, | ||
208 | 0xa40a, 0x0110, 0x1a04, 0x13bc, 0x8001, 0x7892, 0xa084, 0xfc00, | ||
209 | 0x0138, 0x78ac, 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0804, 0x13bc, | ||
210 | 0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0118, 0x7a10, | ||
211 | 0xc2c5, 0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0018, | ||
212 | 0x78ac, 0xc0c5, 0x78ae, 0x0804, 0x13ba, 0x2009, 0x0000, 0x786c, | ||
213 | 0xa065, 0x0118, 0x8108, 0x6000, 0x0cd8, 0x7ac4, 0x0804, 0x13b8, | ||
214 | 0x2009, 0x4748, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, | ||
215 | 0x13b9, 0x2011, 0x4788, 0x2214, 0x0804, 0x13b8, 0x2009, 0x4749, | ||
216 | 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011, | ||
217 | 0x4789, 0x2214, 0x0804, 0x13b8, 0x2061, 0x4740, 0x6128, 0x622c, | ||
218 | 0x8214, 0x8214, 0x8214, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1148, | ||
219 | 0x2061, 0x4780, 0x6328, 0x73da, 0x632c, 0x831c, 0x831c, 0x831c, | ||
220 | 0x73de, 0x0804, 0x13b8, 0x2009, 0x474c, 0x210c, 0x2001, 0x01ff, | ||
221 | 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011, 0x478c, 0x2214, 0x0804, | ||
222 | 0x13b8, 0x7918, 0x0804, 0x13b9, 0x2009, 0x0202, 0x210c, 0xa18c, | ||
223 | 0x0f30, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011, | ||
224 | 0x0102, 0x2214, 0xa294, 0x0f30, 0x0804, 0x13b8, 0x2009, 0x474d, | ||
225 | 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011, | ||
226 | 0x478d, 0x2214, 0x0804, 0x13b8, 0x7920, 0x2001, 0x01ff, 0x2004, | ||
227 | 0xd0fc, 0x1904, 0x13b9, 0x7a24, 0x0804, 0x13b8, 0x2011, 0x4c40, | ||
228 | 0x71c4, 0xd1fc, 0x1110, 0x2011, 0x4bc0, 0x8107, 0xa084, 0x000f, | ||
229 | 0x8003, 0x8003, 0x8003, 0xa268, 0x6a00, 0x6b08, 0x6c1c, 0x74da, | ||
230 | 0xd1fc, 0x1118, 0x2021, 0x023b, 0x0010, 0x2021, 0x013b, 0x2424, | ||
231 | 0xa4a4, 0x1c00, 0x74de, 0x0804, 0x13b7, 0x77c4, 0x080c, 0x1b9a, | ||
232 | 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0804, | ||
233 | 0x13b7, 0x2061, 0x4740, 0x6118, 0x2001, 0x01ff, 0x2004, 0xd0fc, | ||
234 | 0x1904, 0x13b9, 0x2061, 0x4780, 0x6218, 0x0804, 0x13b8, 0x77c4, | ||
235 | 0x080c, 0x1b9a, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x77da, | ||
236 | 0x2091, 0x8001, 0x0804, 0x13b7, 0x71c4, 0x2110, 0xa294, 0x000f, | ||
237 | 0xa282, 0x0010, 0x1a04, 0x13b3, 0x080c, 0x23b4, 0xa384, 0x4000, | ||
238 | 0x0110, 0xa295, 0x0020, 0x0804, 0x13b7, 0x71c4, 0x2100, 0xc0bc, | ||
239 | 0xa082, 0x0010, 0x1a04, 0x13b3, 0xd1bc, 0x1120, 0x2011, 0x4748, | ||
240 | 0x2204, 0x0020, 0x2011, 0x4788, 0x2204, 0xc0bd, 0x0006, 0x2100, | ||
241 | 0xc0bc, 0x2012, 0x080c, 0x2358, 0x001e, 0x0804, 0x13b9, 0x71c4, | ||
242 | 0x2021, 0x4749, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0030, 0x71c8, | ||
243 | 0x2021, 0x4789, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1623, 0x20a9, | ||
244 | 0x0008, 0x2204, 0xa106, 0x0138, 0x8210, 0x1f04, 0x1609, 0x71c4, | ||
245 | 0x72c8, 0x0804, 0x13b2, 0xa292, 0x1623, 0x0026, 0x2122, 0x001e, | ||
246 | 0x080c, 0x236a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1110, 0xd3fc, | ||
247 | 0x09f0, 0x0804, 0x13ba, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0004, | ||
248 | 0x0001, 0x0002, 0x0003, 0x2061, 0x4740, 0x6128, 0x622c, 0x8214, | ||
249 | 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003, 0x8003, | ||
250 | 0x602e, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x11a0, 0x0026, 0x0016, | ||
251 | 0x2061, 0x4780, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70d8, | ||
252 | 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da, 0x72de, | ||
253 | 0x001e, 0x002e, 0x0804, 0x13b8, 0x2061, 0x4740, 0x6130, 0x70c4, | ||
254 | 0x6032, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2061, | ||
255 | 0x4780, 0x6230, 0x70c8, 0x6032, 0x0804, 0x13b8, 0x7918, 0x0804, | ||
256 | 0x13b9, 0x71c4, 0xa184, 0xf0cf, 0x0148, 0x2001, 0x01ff, 0x2004, | ||
257 | 0xd0fc, 0x1904, 0x13b3, 0x72c8, 0x0804, 0x13b2, 0x2019, 0x0000, | ||
258 | 0x080c, 0x23a6, 0x0036, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x0118, | ||
259 | 0x001e, 0x0804, 0x13b9, 0x71c8, 0xa184, 0xf0cf, 0x0128, 0x000e, | ||
260 | 0x2110, 0x71c4, 0x0804, 0x13b2, 0xc3fd, 0x080c, 0x23a6, 0x2310, | ||
261 | 0x001e, 0x0804, 0x13b8, 0x71c4, 0xa182, 0x0010, 0x0248, 0x2001, | ||
262 | 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b3, 0x72c8, 0x0804, 0x13b2, | ||
263 | 0x2011, 0x474d, 0x2204, 0x0006, 0x8104, 0x1208, 0x8108, 0x2112, | ||
264 | 0x2019, 0x0000, 0x080c, 0x2393, 0x2001, 0x01ff, 0x2004, 0xd0fc, | ||
265 | 0x0118, 0x001e, 0x0804, 0x13b9, 0x71c8, 0xa182, 0x0010, 0x0228, | ||
266 | 0x0006, 0x2110, 0x71c4, 0x0804, 0x13b2, 0x2011, 0x478d, 0x2204, | ||
267 | 0x0006, 0x8104, 0x1208, 0x8108, 0x2112, 0xc3fd, 0x080c, 0x2393, | ||
268 | 0x002e, 0x001e, 0x0804, 0x13b8, 0x71c4, 0x72c8, 0xa184, 0xfffd, | ||
269 | 0x1904, 0x13b2, 0xa284, 0xfffd, 0x1904, 0x13b2, 0x2100, 0x7920, | ||
270 | 0x7822, 0x2200, 0x7a24, 0x7826, 0x0804, 0x13b8, 0x2011, 0x4c40, | ||
271 | 0x71c4, 0xd1fc, 0x1110, 0x2011, 0x4bc0, 0x8107, 0xa084, 0x000f, | ||
272 | 0x8003, 0x8003, 0x8003, 0xa268, 0x72c8, 0x73cc, 0x74d8, 0x71c6, | ||
273 | 0x6800, 0x70ca, 0x73ce, 0x74da, 0x2091, 0x8000, 0x6a02, 0xd2ac, | ||
274 | 0x1118, 0x2021, 0x0000, 0x0090, 0xa484, 0x00ff, 0xa082, 0x0002, | ||
275 | 0x1a04, 0x174f, 0x843f, 0xa7bc, 0x00ff, 0x0140, 0xa786, 0x0002, | ||
276 | 0x1904, 0x174f, 0xa484, 0x00ff, 0x0904, 0x174f, 0x2061, 0x0200, | ||
277 | 0xd1fc, 0x0110, 0x2061, 0x0100, 0x2029, 0x0009, 0x2031, 0x0062, | ||
278 | 0x843f, 0xa7bc, 0x00ff, 0x0130, 0x8307, 0xa084, 0x00ff, 0x1110, | ||
279 | 0xa73d, 0x1138, 0x2041, 0x0019, 0xa384, 0x00ff, 0xa082, 0x001a, | ||
280 | 0x0210, 0xa4a4, 0x00ff, 0x8307, 0xa084, 0x00ff, 0x0188, 0xa842, | ||
281 | 0x02f0, 0xa086, 0x0010, 0x1120, 0xa39c, 0x00ff, 0xa39d, 0x0f00, | ||
282 | 0xa3bc, 0x00ff, 0x2500, 0xa702, 0x0290, 0x2600, 0xa702, 0x1278, | ||
283 | 0x2039, 0x003a, 0x6804, 0xa705, 0x6806, 0x6b0a, 0x6b0c, 0x73ce, | ||
284 | 0x681c, 0x70da, 0x6c1e, 0x2091, 0x8001, 0x0804, 0x13ba, 0x2091, | ||
285 | 0x8001, 0x0804, 0x13b4, 0x77c4, 0x080c, 0x1b9a, 0x2091, 0x8000, | ||
286 | 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, | ||
287 | 0x2708, 0x0804, 0x13b7, 0x70c4, 0x2061, 0x4740, 0x6118, 0x601a, | ||
288 | 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x70c8, 0x2061, | ||
289 | 0x4780, 0x6218, 0x601a, 0x0804, 0x13b8, 0x71c4, 0x72c8, 0x73cc, | ||
290 | 0xa182, 0x0010, 0x1a04, 0x13b3, 0x080c, 0x23d8, 0xa384, 0x4000, | ||
291 | 0x0110, 0xa295, 0x0020, 0x0804, 0x13b7, 0x77c4, 0x080c, 0x1b9a, | ||
292 | 0x2091, 0x8000, 0x6a08, 0xc28d, 0x6a0a, 0x2091, 0x8001, 0x2708, | ||
293 | 0x0804, 0x13b8, 0x77c4, 0x080c, 0x1b9a, 0x2091, 0x8000, 0x6a08, | ||
294 | 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0110, 0x080c, 0x22d5, | ||
295 | 0x2091, 0x8001, 0x2708, 0x0804, 0x13b8, 0x77c4, 0x080c, 0x1b9a, | ||
296 | 0x2091, 0x8000, 0x6a08, 0xc295, 0x6a0a, 0x6804, 0xa005, 0x0110, | ||
297 | 0x080c, 0x22d5, 0x2091, 0x8001, 0x2708, 0x0804, 0x13b8, 0x77c4, | ||
298 | 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, | ||
299 | 0x080c, 0x1bb2, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0804, 0x13b8, | ||
300 | 0x77c4, 0xd7fc, 0x0128, 0x080c, 0x1b29, 0x0138, 0x0804, 0x13bc, | ||
301 | 0x080c, 0x1b1e, 0x0110, 0x0804, 0x13bc, 0x73c8, 0x72cc, 0x77c6, | ||
302 | 0x73ca, 0x72ce, 0x080c, 0x1c2a, 0x11e8, 0x6818, 0xa005, 0x01a0, | ||
303 | 0x2708, 0x0076, 0x080c, 0x23f7, 0x007e, 0x1170, 0x2001, 0x0015, | ||
304 | 0xd7fc, 0x1118, 0x2061, 0x4740, 0x0018, 0xc0fd, 0x2061, 0x4780, | ||
305 | 0x782a, 0x2091, 0x8001, 0x0005, 0x2091, 0x8001, 0x2001, 0x4005, | ||
306 | 0x0804, 0x13bc, 0x2091, 0x8001, 0x0804, 0x13ba, 0x77c4, 0xd7fc, | ||
307 | 0x0128, 0x080c, 0x1b29, 0x0138, 0x0804, 0x13bc, 0x080c, 0x1b1e, | ||
308 | 0x0110, 0x0804, 0x13bc, 0x77c6, 0x2041, 0x0021, 0x2049, 0x0005, | ||
309 | 0x2051, 0x0020, 0x2091, 0x8000, 0x080c, 0x1bb2, 0x2009, 0x0016, | ||
310 | 0xd7fc, 0x1118, 0x2061, 0x4740, 0x0018, 0x2061, 0x4780, 0xc1fd, | ||
311 | 0x6063, 0x0003, 0x607b, 0x0000, 0x6772, 0x607f, 0x000f, 0x792a, | ||
312 | 0x61d0, 0xc1c4, 0x61d2, 0x080c, 0x22d5, 0x2091, 0x8001, 0x0005, | ||
313 | 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xd7fc, 0x0128, 0x080c, 0x1b29, | ||
314 | 0x0138, 0x0804, 0x13bc, 0x080c, 0x1b1e, 0x0110, 0x0804, 0x13bc, | ||
315 | 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2009, 0x0017, 0xd7fc, 0x1118, | ||
316 | 0x2061, 0x4740, 0x0018, 0x2061, 0x4780, 0xc1fd, 0x607b, 0x0000, | ||
317 | 0x6063, 0x0002, 0x6772, 0x607f, 0x000f, 0x792a, 0x61d0, 0xc1c4, | ||
318 | 0x61d2, 0x080c, 0x22d5, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, | ||
319 | 0x0005, 0x2051, 0x0010, 0x2091, 0x8000, 0x70c8, 0xa005, 0x0118, | ||
320 | 0x60d0, 0xc0fd, 0x60d2, 0x080c, 0x1bb2, 0x70c8, 0x6836, 0x8738, | ||
321 | 0xa784, 0x001f, 0x1dc0, 0x2091, 0x8001, 0x0005, 0x2019, 0x0000, | ||
322 | 0x72c8, 0xd284, 0x0128, 0x080c, 0x1b29, 0x0138, 0x0804, 0x13bc, | ||
323 | 0x080c, 0x1b1e, 0x0110, 0x0804, 0x13bc, 0x72c8, 0x72ca, 0x78ac, | ||
324 | 0xa084, 0x0003, 0x1518, 0x2039, 0x0000, 0xd284, 0x0108, 0xc7fd, | ||
325 | 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x080c, 0x1b9a, | ||
326 | 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, 0x690a, 0x6837, 0x0000, | ||
327 | 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x1d80, 0xa7bc, 0xff00, | ||
328 | 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d40, 0x2091, 0x8000, | ||
329 | 0x72c8, 0x2069, 0x0100, 0xd284, 0x1110, 0x2069, 0x0200, 0x6808, | ||
330 | 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x01b0, 0x684b, 0x0004, | ||
331 | 0x20a9, 0x0014, 0x6848, 0xd094, 0x0110, 0x1f04, 0x18c2, 0x684b, | ||
332 | 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0110, 0x1f04, 0x18cb, | ||
333 | 0x20a9, 0x00fa, 0x1f04, 0x18d2, 0x2079, 0x4700, 0x2009, 0x0018, | ||
334 | 0x72c8, 0xd284, 0x1118, 0x2061, 0x4740, 0x0018, 0x2061, 0x4780, | ||
335 | 0xc1fd, 0x607b, 0x0000, 0x792a, 0x6063, 0x0001, 0x607f, 0x000f, | ||
336 | 0x60a3, 0x0000, 0x60a4, 0x60ae, 0x60b2, 0x60d0, 0xd0b4, 0x0160, | ||
337 | 0xc0b4, 0x60d2, 0x00c6, 0x60b4, 0xa065, 0x6008, 0xc0d4, 0x600a, | ||
338 | 0x6018, 0x8001, 0x601a, 0x00ce, 0x60d0, 0xa084, 0x7eff, 0x60d2, | ||
339 | 0x78ac, 0xc08d, 0x78ae, 0x83ff, 0x0108, 0x0005, 0x681b, 0x0054, | ||
340 | 0x2091, 0x8001, 0x0005, 0x73cc, 0x080c, 0x1878, 0x69ec, 0x6a48, | ||
341 | 0xa185, 0x1800, 0x684a, 0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021, | ||
342 | 0x0004, 0x20a9, 0x09ff, 0x1f04, 0x191b, 0x8421, 0x1dd0, 0x8319, | ||
343 | 0x1db0, 0x69ee, 0x6a4a, 0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118, | ||
344 | 0x2069, 0x4740, 0x0010, 0x2069, 0x4780, 0x71c4, 0x71c6, 0x6916, | ||
345 | 0x81ff, 0x1110, 0x68a3, 0x0001, 0x78ac, 0xc08c, 0x78ae, 0xd084, | ||
346 | 0x1110, 0x080c, 0x1c7a, 0x0005, 0x75d8, 0x74dc, 0x75da, 0x74de, | ||
347 | 0x0010, 0xa02e, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, | ||
348 | 0x72ce, 0x2079, 0x4700, 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x080c, | ||
349 | 0x1b77, 0x0904, 0x1a5c, 0x20a9, 0x0005, 0x20a1, 0x4714, 0x2091, | ||
350 | 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x080c, 0x1d41, | ||
351 | 0x0120, 0x080c, 0x1b7f, 0x0804, 0x1a5c, 0x6004, 0xa08c, 0x00ff, | ||
352 | 0xa18e, 0x0009, 0x1120, 0x0006, 0x080c, 0x2086, 0x000e, 0xa084, | ||
353 | 0xff00, 0x8007, 0x8009, 0x0904, 0x19f1, 0x00c6, 0x2c68, 0x080c, | ||
354 | 0x1b77, 0x05a8, 0x2c00, 0x689e, 0x8109, 0x1dc0, 0x609f, 0x0000, | ||
355 | 0x00ce, 0x00c6, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040, | ||
356 | 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda, | ||
357 | 0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0904, 0x19f0, 0x2009, | ||
358 | 0x0040, 0x080c, 0x1d41, 0x15a0, 0x6004, 0xa084, 0x00ff, 0xa086, | ||
359 | 0x0002, 0x0150, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a, 0x1138, | ||
360 | 0x0016, 0x080c, 0x2083, 0x001e, 0x2d00, 0x6002, 0x0898, 0x00ce, | ||
361 | 0x00c6, 0x609c, 0x080c, 0x1bf3, 0x00ce, 0x609f, 0x0000, 0x080c, | ||
362 | 0x1a60, 0x2009, 0x0018, 0x6008, 0xc0cd, 0x600a, 0x6004, 0x6086, | ||
363 | 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812, | ||
364 | 0x080c, 0x1b34, 0x000e, 0x7812, 0x080c, 0x1b7f, 0x0804, 0x1a5c, | ||
365 | 0x00ce, 0x00c6, 0x609c, 0x080c, 0x1bf3, 0x00ce, 0x609f, 0x0000, | ||
366 | 0x080c, 0x1a60, 0x2009, 0x0018, 0x6087, 0x0103, 0x601b, 0x0003, | ||
367 | 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812, | ||
368 | 0x080c, 0x1b34, 0x000e, 0x7812, 0x080c, 0x1b7f, 0x0804, 0x1a5c, | ||
369 | 0x00ce, 0x6114, 0xd1fc, 0x0120, 0x080c, 0x1b29, 0x01f0, 0x0018, | ||
370 | 0x080c, 0x1b1e, 0x01d0, 0x080c, 0x1a60, 0x2009, 0x0018, 0x6087, | ||
371 | 0x0103, 0x601b, 0x0021, 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, | ||
372 | 0x0110, 0xc0c5, 0x7812, 0x080c, 0x1b34, 0x000e, 0x7812, 0x080c, | ||
373 | 0x1b7f, 0x2001, 0x4007, 0x0804, 0x13bc, 0x6104, 0xa18c, 0x00ff, | ||
374 | 0xa186, 0x0005, 0x1118, 0x601c, 0xc0bd, 0x601e, 0x74c4, 0x73c8, | ||
375 | 0x72cc, 0x6014, 0x2091, 0x8000, 0x00e6, 0x2009, 0x0012, 0xd0fc, | ||
376 | 0x1118, 0x2071, 0x4740, 0x0018, 0x2071, 0x4780, 0xc1fd, 0x792a, | ||
377 | 0x7063, 0x0005, 0x71d0, 0xc1c4, 0x71d2, 0x7366, 0x726a, 0x746e, | ||
378 | 0x7072, 0x7077, 0x0000, 0x2c00, 0x707a, 0xa02e, 0x2530, 0x611c, | ||
379 | 0xa184, 0x0060, 0x0110, 0x080c, 0x3fe9, 0x00ee, 0x6596, 0x65a6, | ||
380 | 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, 0x6023, | ||
381 | 0x0000, 0x6024, 0xa096, 0x0001, 0x1110, 0x8000, 0x6026, 0x080c, | ||
382 | 0x22d5, 0x2091, 0x8001, 0x0005, 0x70c3, 0x4005, 0x0804, 0x13bd, | ||
383 | 0x20a9, 0x0005, 0x2099, 0x4714, 0x2091, 0x8000, 0x530a, 0x2091, | ||
384 | 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, | ||
385 | 0x0000, 0x0005, 0x71c4, 0x70c7, 0x0000, 0x791e, 0x0804, 0x13ba, | ||
386 | 0x71c4, 0x71c6, 0x2168, 0x0010, 0x2069, 0x1000, 0x690c, 0xa016, | ||
387 | 0x2d04, 0xa210, 0x8d68, 0x8109, 0x1dd8, 0xa285, 0x0000, 0x1118, | ||
388 | 0x70c3, 0x4000, 0x0010, 0x70c3, 0x4003, 0x70ca, 0x0804, 0x13bd, | ||
389 | 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x1a04, 0x13b3, 0x7966, | ||
390 | 0x0804, 0x13ba, 0x7964, 0x71c6, 0x0804, 0x13ba, 0x7900, 0x71c6, | ||
391 | 0x71c4, 0x7902, 0x0804, 0x13ba, 0x7900, 0x71c6, 0x0804, 0x13ba, | ||
392 | 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0160, 0x810c, 0x0230, | ||
393 | 0x8210, 0x810c, 0x810c, 0x0210, 0x8210, 0x810c, 0x81ff, 0x1904, | ||
394 | 0x13b4, 0x8210, 0x7a0e, 0xd28c, 0x0538, 0x7910, 0xc1cd, 0x7912, | ||
395 | 0x2009, 0x0021, 0x2019, 0x0003, 0xd284, 0x01c0, 0x8108, 0x2019, | ||
396 | 0x0041, 0x2011, 0x8f4e, 0x2312, 0x2019, 0x0042, 0x8210, 0x2312, | ||
397 | 0x2019, 0x0043, 0x8210, 0x2312, 0x2019, 0x0046, 0x8210, 0x2312, | ||
398 | 0x2019, 0x0047, 0x8210, 0x2312, 0x2019, 0x0006, 0x2011, 0x8f53, | ||
399 | 0x2112, 0x2011, 0x8f73, 0x2312, 0x7904, 0x7806, 0x0804, 0x13b9, | ||
400 | 0x7804, 0x70c6, 0x0804, 0x13ba, 0x71c4, 0xd1fc, 0x1118, 0x2011, | ||
401 | 0x4bc0, 0x0010, 0x2011, 0x4c40, 0x8107, 0xa084, 0x000f, 0x8003, | ||
402 | 0x8003, 0x8003, 0xa268, 0x2011, 0x0000, 0x6814, 0xd0fc, 0x0110, | ||
403 | 0xa295, 0x0200, 0xd0b4, 0x0110, 0xa295, 0x0001, 0x6b0c, 0x6800, | ||
404 | 0x70da, 0x0804, 0x13b7, 0x7814, 0xd0f4, 0x0130, 0x2001, 0x4007, | ||
405 | 0x70db, 0x0000, 0xa005, 0x0048, 0xd0fc, 0x0130, 0x2001, 0x4007, | ||
406 | 0x70db, 0x0001, 0xa005, 0x0008, 0xa006, 0x0005, 0x7814, 0xd0f4, | ||
407 | 0x0130, 0x2001, 0x4007, 0x70db, 0x0000, 0xa005, 0x0008, 0xa006, | ||
408 | 0x0005, 0x7814, 0xd0fc, 0x0130, 0x2001, 0x4007, 0x70db, 0x0001, | ||
409 | 0xa005, 0x0008, 0xa006, 0x0005, 0x7112, 0x721a, 0x731e, 0x7810, | ||
410 | 0xd0c4, 0x0110, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c, | ||
411 | 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084, 0x20a2, | ||
412 | 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0140, 0x810f, | ||
413 | 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, | ||
414 | 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211, 0x7d10, | ||
415 | 0xd5c4, 0x0120, 0x7b84, 0xa319, 0x7c80, 0xa421, 0x7008, 0xd0fc, | ||
416 | 0x0de8, 0x7003, 0x0001, 0x7007, 0x0006, 0x711a, 0x721e, 0x7d10, | ||
417 | 0xd5c4, 0x0110, 0x7322, 0x7426, 0xa084, 0x01e0, 0x0005, 0x7848, | ||
418 | 0xa065, 0x0120, 0x2c04, 0x784a, 0x2063, 0x0000, 0x0005, 0x00f6, | ||
419 | 0x2079, 0x4700, 0x7848, 0x2062, 0x2c00, 0xa005, 0x1110, 0x080c, | ||
420 | 0x2575, 0x784a, 0x00fe, 0x0005, 0x2011, 0x9100, 0x7a4a, 0x7bc4, | ||
421 | 0x8319, 0x0128, 0xa280, 0x0032, 0x2012, 0x2010, 0x0cc8, 0x2013, | ||
422 | 0x0000, 0x0005, 0x0016, 0x0026, 0xd7fc, 0x1118, 0x2011, 0x4cc0, | ||
423 | 0x0010, 0x2011, 0x6cc0, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, | ||
424 | 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa268, 0x002e, | ||
425 | 0x001e, 0x0005, 0x0c39, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, | ||
426 | 0xa084, 0xf9ef, 0xa80d, 0x690a, 0x00e6, 0xd7fc, 0x1128, 0x2009, | ||
427 | 0x4752, 0x2071, 0x4740, 0x0020, 0x2009, 0x4792, 0x2071, 0x4780, | ||
428 | 0x210c, 0x6804, 0xa005, 0x0148, 0xa116, 0x1138, 0x2060, 0x6000, | ||
429 | 0x6806, 0x0016, 0x200b, 0x0000, 0x0018, 0x2009, 0x0000, 0x0016, | ||
430 | 0x6804, 0xa065, 0x0178, 0x6000, 0x6806, 0x0421, 0x080c, 0x1db2, | ||
431 | 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x6812, 0x1d88, 0x7910, | ||
432 | 0xc1a5, 0x7912, 0x001e, 0x6902, 0x6906, 0x2d00, 0x2060, 0x080c, | ||
433 | 0x26bf, 0x00ee, 0x0005, 0xa065, 0x0160, 0x2008, 0x609c, 0xa005, | ||
434 | 0x0128, 0x2062, 0x609f, 0x0000, 0xa065, 0x0cc0, 0x7848, 0x794a, | ||
435 | 0x2062, 0x0005, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, | ||
436 | 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, | ||
437 | 0x682c, 0x6022, 0x0005, 0x00e6, 0xd7fc, 0x1128, 0x2071, 0x4740, | ||
438 | 0x2031, 0x47c0, 0x0020, 0x2071, 0x4780, 0x2031, 0x49c0, 0x704c, | ||
439 | 0xa08c, 0x0200, 0x1128, 0xa608, 0x2d0a, 0x8000, 0x704e, 0xa006, | ||
440 | 0x00ee, 0x0005, 0x00f6, 0xd7fc, 0x1118, 0x2079, 0x4740, 0x0010, | ||
441 | 0x2079, 0x4780, 0x080c, 0x1b9a, 0x2091, 0x8000, 0x6804, 0x780a, | ||
442 | 0xa065, 0x05f0, 0x0030, 0x2c00, 0x780a, 0x2060, 0x6000, 0xa065, | ||
443 | 0x05b8, 0x6010, 0xa306, 0x1db8, 0x600c, 0xa206, 0x1da0, 0x2c28, | ||
444 | 0x7848, 0xac06, 0x1108, 0x0448, 0x6804, 0xac06, 0x1140, 0x6000, | ||
445 | 0x2060, 0x6806, 0xa005, 0x1118, 0x6803, 0x0000, 0x0048, 0x6400, | ||
446 | 0x7808, 0x2060, 0x6402, 0xa486, 0x0000, 0x1110, 0x2c00, 0x6802, | ||
447 | 0x2560, 0x080c, 0x1c02, 0x601b, 0x0005, 0x6023, 0x0020, 0x00fe, | ||
448 | 0x080c, 0x1db2, 0x00f6, 0x7908, 0x8109, 0x790a, 0x6810, 0x8001, | ||
449 | 0x6812, 0x1118, 0x7810, 0xc0a5, 0x7812, 0x2001, 0xffff, 0xa005, | ||
450 | 0x00fe, 0x0005, 0x0076, 0x2700, 0x2039, 0x0000, 0xd0fc, 0x0108, | ||
451 | 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x2091, | ||
452 | 0x8000, 0x080c, 0x1bb2, 0x8738, 0xa784, 0x001f, 0x1dd0, 0xa7bc, | ||
453 | 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d90, 0x2091, | ||
454 | 0x8001, 0x007e, 0x0005, 0x786c, 0x2009, 0x8f74, 0x210c, 0xa10d, | ||
455 | 0x0118, 0xa065, 0x0804, 0x20a1, 0x2061, 0x0000, 0x6018, 0xd084, | ||
456 | 0x11b8, 0x7810, 0xd08c, 0x0130, 0xc08c, 0x7812, 0xc7fc, 0x2069, | ||
457 | 0x4740, 0x0028, 0xc08d, 0x7812, 0x2069, 0x4780, 0xc7fd, 0x2091, | ||
458 | 0x8000, 0x681c, 0x681f, 0x0000, 0x2091, 0x8001, 0xa005, 0x1108, | ||
459 | 0x0005, 0xa08c, 0xfff0, 0x0110, 0x080c, 0x2575, 0x0002, 0x1cd7, | ||
460 | 0x1cda, 0x1ce0, 0x1ce4, 0x1cd8, 0x1ce8, 0x1cd8, 0x1cd8, 0x1cd8, | ||
461 | 0x1cee, 0x1d18, 0x1d1b, 0x1d20, 0x1d29, 0x1cd8, 0x1cd8, 0x0005, | ||
462 | 0x080c, 0x2575, 0x080c, 0x1c7a, 0x2001, 0x8001, 0x0804, 0x1d32, | ||
463 | 0x2001, 0x8003, 0x0804, 0x1d32, 0x2001, 0x8004, 0x0804, 0x1d32, | ||
464 | 0x080c, 0x1c7a, 0x2001, 0x8006, 0x0804, 0x1d32, 0x2011, 0x800a, | ||
465 | 0x2091, 0x8000, 0xd7fc, 0x1118, 0x2069, 0x4740, 0x0010, 0x2069, | ||
466 | 0x4780, 0x2038, 0x6800, 0xa086, 0x0000, 0x0120, 0x6f1e, 0x2091, | ||
467 | 0x8001, 0x0005, 0x0026, 0x6870, 0xa0bc, 0xff00, 0x2041, 0x0021, | ||
468 | 0x2049, 0x0004, 0x2051, 0x0010, 0x080c, 0x1bb2, 0x8738, 0xa784, | ||
469 | 0x001f, 0x1dd0, 0x2091, 0x8001, 0x000e, 0x6970, 0x71c6, 0x00d0, | ||
470 | 0x2001, 0x800c, 0x00b8, 0x080c, 0x1c7a, 0x2001, 0x800d, 0x0090, | ||
471 | 0xd7fc, 0x0110, 0x78e4, 0x0008, 0x78e0, 0x70c6, 0x2001, 0x800e, | ||
472 | 0x0048, 0xd7fc, 0x0110, 0x78ec, 0x0008, 0x78e8, 0x70c6, 0x2001, | ||
473 | 0x800f, 0x0000, 0x70c2, 0xd7fc, 0x1118, 0x70db, 0x0000, 0x0010, | ||
474 | 0x70db, 0x0001, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, | ||
475 | 0x0005, 0xac80, 0x0001, 0x81ff, 0x0518, 0x2099, 0x0030, 0x20a0, | ||
476 | 0x700c, 0xa084, 0x07ff, 0x0100, 0x7018, 0x0006, 0x701c, 0x0006, | ||
477 | 0x7020, 0x0006, 0x7024, 0x0006, 0x7112, 0x81ac, 0x721a, 0x731e, | ||
478 | 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, 0x800b, | ||
479 | 0x1ee8, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x1110, 0x53a5, 0xa006, | ||
480 | 0x7003, 0x0000, 0x7007, 0x0004, 0x000e, 0x7026, 0x000e, 0x7022, | ||
481 | 0x000e, 0x701e, 0x000e, 0x701a, 0x0005, 0x2011, 0x0020, 0x2009, | ||
482 | 0x0010, 0x6b0a, 0x6c0e, 0x681f, 0x0201, 0x6803, 0xfd20, 0x6807, | ||
483 | 0x0038, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, 0x8109, | ||
484 | 0x1d80, 0x0005, 0x70ec, 0xd0dc, 0x1520, 0x2029, 0x0001, 0x7814, | ||
485 | 0xd0cc, 0x1160, 0x70ec, 0xd0e4, 0x2019, 0x0c0a, 0x2021, 0x000a, | ||
486 | 0x1120, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x0070, 0x70ec, 0xd0e4, | ||
487 | 0x1128, 0x2019, 0x180c, 0x2021, 0x000c, 0x0030, 0x2019, 0x1809, | ||
488 | 0x2021, 0x0009, 0xa5ad, 0x0200, 0x6b0a, 0x6c0e, 0x6d1e, 0x6807, | ||
489 | 0x0038, 0x0005, 0x6004, 0x6086, 0x2c08, 0x2063, 0x0000, 0x7868, | ||
490 | 0xa005, 0x796a, 0x0110, 0x2c02, 0x0008, 0x796e, 0x0005, 0x00c6, | ||
491 | 0x2061, 0x4700, 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6068, | ||
492 | 0xa005, 0x616a, 0x0110, 0x2d02, 0x0008, 0x616e, 0x00ce, 0x0005, | ||
493 | 0x2091, 0x8000, 0x2c04, 0x786e, 0xa005, 0x1108, 0x786a, 0x2091, | ||
494 | 0x8001, 0x609c, 0xa005, 0x0188, 0x00c6, 0x2060, 0x2008, 0x609c, | ||
495 | 0xa005, 0x0138, 0x2062, 0x609f, 0x0000, 0xa065, 0x609c, 0xa005, | ||
496 | 0x1dc8, 0x7848, 0x794a, 0x2062, 0x00ce, 0x7848, 0x2062, 0x609f, | ||
497 | 0x0000, 0xac85, 0x0000, 0x1110, 0x080c, 0x2575, 0x784a, 0x0005, | ||
498 | 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x1208, 0xa200, | ||
499 | 0x1f04, 0x1dfc, 0x8086, 0x818e, 0x0005, 0x0156, 0x20a9, 0x0010, | ||
500 | 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213, 0x818d, 0x0228, 0xa11a, | ||
501 | 0x1220, 0x1f04, 0x1e0c, 0x0028, 0xa11a, 0x2308, 0x8210, 0x1f04, | ||
502 | 0x1e0c, 0x0006, 0x3200, 0xa084, 0xefff, 0x2080, 0x000e, 0x015e, | ||
503 | 0x0005, 0x0006, 0x3200, 0xa085, 0x1000, 0x0cb8, 0x7d74, 0x70d0, | ||
504 | 0xa506, 0x0904, 0x1eda, 0x7810, 0x2050, 0x080c, 0x1b77, 0x0904, | ||
505 | 0x1eda, 0xa046, 0x7970, 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, | ||
506 | 0x1208, 0x0030, 0x72d0, 0xa206, 0x0118, 0x8840, 0x2009, 0x0080, | ||
507 | 0x00c6, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, | ||
508 | 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0110, 0x080c, | ||
509 | 0x1b77, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002, 0x2091, 0x8001, | ||
510 | 0xa08c, 0x01e0, 0x1538, 0x53a5, 0x8cff, 0x1120, 0x88ff, 0x0904, | ||
511 | 0x1ec7, 0x0050, 0x2c00, 0x788e, 0x20a9, 0x0020, 0xac80, 0x0001, | ||
512 | 0x20a0, 0x53a5, 0x0804, 0x1ec7, 0xa046, 0x7218, 0x731c, 0xdac4, | ||
513 | 0x0110, 0x7420, 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3, | ||
514 | 0x0000, 0xa5ab, 0x0000, 0x721a, 0x731e, 0xdac4, 0x0118, 0x7422, | ||
515 | 0x7526, 0xa006, 0x7007, 0x0004, 0x0904, 0x1ec7, 0x8cff, 0x0110, | ||
516 | 0x080c, 0x1b7f, 0x00ce, 0x080c, 0x1b7f, 0xa046, 0x7888, 0x8000, | ||
517 | 0x788a, 0xa086, 0x0002, 0x01c0, 0x7a7c, 0x7b78, 0xdac4, 0x0110, | ||
518 | 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, | ||
519 | 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x721a, 0x731e, 0xdac4, | ||
520 | 0x0588, 0x7422, 0x7526, 0x0470, 0x6014, 0xd0fc, 0x1118, 0x2069, | ||
521 | 0x4740, 0x0010, 0x2069, 0x4780, 0x2091, 0x8000, 0x681f, 0x0002, | ||
522 | 0x88ff, 0x0120, 0xa046, 0x788c, 0x2060, 0x0c70, 0x788b, 0x0000, | ||
523 | 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0098, 0x00ce, | ||
524 | 0x788b, 0x0000, 0x080c, 0x205c, 0x6004, 0xa084, 0x000f, 0x0059, | ||
525 | 0x88ff, 0x0130, 0x788c, 0x2060, 0x6004, 0xa084, 0x000f, 0x0019, | ||
526 | 0x0804, 0x1e26, 0x0005, 0x0002, 0x1eec, 0x1f07, 0x1f20, 0x1eec, | ||
527 | 0x1f2d, 0x1efd, 0x1eec, 0x1eec, 0x1eec, 0x1f05, 0x1f1e, 0x1eec, | ||
528 | 0x1eec, 0x1eec, 0x1eec, 0x1eec, 0x2039, 0x0400, 0x78bc, 0xa705, | ||
529 | 0x78be, 0x6008, 0xa705, 0x600a, 0x080c, 0x1f69, 0x609c, 0x78ba, | ||
530 | 0x609f, 0x0000, 0x080c, 0x2048, 0x0005, 0x78bc, 0xd0c4, 0x0108, | ||
531 | 0x0c58, 0x601c, 0xc0bd, 0x601e, 0x0030, 0x080c, 0x2086, 0x78bc, | ||
532 | 0xd0c4, 0x0108, 0x0c08, 0x78bf, 0x0000, 0x6004, 0x8007, 0xa084, | ||
533 | 0x00ff, 0x78b2, 0x8001, 0x0138, 0x080c, 0x1f69, 0x0120, 0x78bc, | ||
534 | 0xc0c5, 0x78be, 0x0010, 0x0804, 0x1f84, 0x0005, 0x080c, 0x2083, | ||
535 | 0x78bc, 0xa08c, 0x0e00, 0x1110, 0xd0c4, 0x1108, 0x0828, 0x080c, | ||
536 | 0x1f69, 0x1110, 0x0804, 0x1f84, 0x0005, 0x78bc, 0xd0c4, 0x0110, | ||
537 | 0x0804, 0x1eec, 0x78bf, 0x0000, 0x6714, 0x2011, 0x0001, 0x22a8, | ||
538 | 0x6018, 0xa084, 0x00ff, 0xa005, 0x0188, 0xa7bc, 0xff00, 0x20a9, | ||
539 | 0x0020, 0xa08e, 0x0001, 0x0150, 0xa7bc, 0x8000, 0x2011, 0x0002, | ||
540 | 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0108, 0x00c0, 0x080c, 0x1b9a, | ||
541 | 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, | ||
542 | 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x1f04, | ||
543 | 0x1f51, 0x8211, 0x0118, 0x20a9, 0x0100, 0x0c58, 0x080c, 0x1b7f, | ||
544 | 0x0005, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6, 0x1110, | ||
545 | 0x78ba, 0x0038, 0x689e, 0x2d00, 0x6002, 0x78b8, 0xad06, 0x1108, | ||
546 | 0x6002, 0x78b0, 0x8001, 0x78b2, 0x1130, 0x78bc, 0xc0c4, 0x78be, | ||
547 | 0x78b8, 0x2060, 0xa006, 0x0005, 0x00e6, 0xa02e, 0x2530, 0x7dba, | ||
548 | 0x7db6, 0x65ae, 0x65b2, 0x601c, 0x60a2, 0x2048, 0xa984, 0xe1ff, | ||
549 | 0x601e, 0xa984, 0x0060, 0x0160, 0x080c, 0x3fe9, 0x86ff, 0x1140, | ||
550 | 0x85ff, 0x1130, 0x2039, 0x0800, 0x080c, 0x2048, 0x0804, 0x2046, | ||
551 | 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, 0x2071, 0x4780, 0xd7fc, | ||
552 | 0x1110, 0x2071, 0x4740, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, | ||
553 | 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x71c0, 0xa168, | ||
554 | 0x2700, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x71c4, | ||
555 | 0xa100, 0x60c2, 0x2091, 0x8000, 0x7814, 0xd0c4, 0x0138, 0xd7fc, | ||
556 | 0x1118, 0xd0f4, 0x1140, 0x0010, 0xd0fc, 0x1128, 0x6e08, 0xd684, | ||
557 | 0x01f0, 0xd9fc, 0x11e0, 0x2091, 0x8001, 0x080c, 0x1c02, 0x2091, | ||
558 | 0x8000, 0x080c, 0x1db2, 0x2091, 0x8001, 0x7814, 0xd0c4, 0x0904, | ||
559 | 0x2046, 0xd7fc, 0x1120, 0xd0f4, 0x1130, 0x0804, 0x2046, 0xd0fc, | ||
560 | 0x1110, 0x0804, 0x2046, 0x601b, 0x0021, 0x0804, 0x2046, 0x6024, | ||
561 | 0xa096, 0x0001, 0x1110, 0x8000, 0x6026, 0x6a10, 0x6814, 0xa202, | ||
562 | 0x0268, 0x0160, 0x2091, 0x8001, 0x2039, 0x0200, 0x609c, 0x78ba, | ||
563 | 0x609f, 0x0000, 0x080c, 0x2048, 0x0804, 0x2046, 0x2c08, 0xd9fc, | ||
564 | 0x01f0, 0x6800, 0xa065, 0x01d8, 0x6a04, 0x7000, 0xa084, 0x0002, | ||
565 | 0x0168, 0x7048, 0xa206, 0x1150, 0x6b04, 0x2160, 0x2304, 0x6002, | ||
566 | 0xa005, 0x1108, 0x6902, 0x2260, 0x6102, 0x0098, 0x2d00, 0x2060, | ||
567 | 0x080c, 0x26bf, 0x6e08, 0x2160, 0x6202, 0x6906, 0x0050, 0x6800, | ||
568 | 0x6902, 0xa065, 0x0110, 0x6102, 0x0008, 0x6906, 0x2160, 0x6003, | ||
569 | 0x0000, 0x2160, 0xd9fc, 0x0118, 0xa6b4, 0xfffc, 0x6e0a, 0x6810, | ||
570 | 0x7d08, 0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, | ||
571 | 0x0128, 0xa6b6, 0x0040, 0x6e0a, 0x080c, 0x1c13, 0x00ee, 0x0005, | ||
572 | 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x080c, 0x1db2, 0x2091, | ||
573 | 0x8001, 0x78b8, 0xa065, 0x0128, 0x609c, 0x78ba, 0x609f, 0x0000, | ||
574 | 0x0c78, 0x78b6, 0x78ba, 0x0005, 0x7970, 0x7874, 0x2818, 0xd384, | ||
575 | 0x0118, 0x8000, 0xa112, 0x0220, 0x8000, 0xa112, 0x1278, 0xc384, | ||
576 | 0x7a7c, 0x721a, 0x7a78, 0x721e, 0xdac4, 0x0120, 0x7a84, 0x7222, | ||
577 | 0x7a80, 0x7226, 0xa006, 0xd384, 0x0108, 0x8000, 0x7876, 0x70d2, | ||
578 | 0x781c, 0xa005, 0x0138, 0x8001, 0x781e, 0x1120, 0x0e04, 0x2082, | ||
579 | 0x2091, 0x4080, 0x0005, 0x2039, 0x2098, 0x0010, 0x2039, 0x209e, | ||
580 | 0x2704, 0xa005, 0x0160, 0xac00, 0x2068, 0x6908, 0x6810, 0x6912, | ||
581 | 0x680a, 0x690c, 0x6814, 0x6916, 0x680e, 0x8738, 0x0c88, 0x0005, | ||
582 | 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, | ||
583 | 0x0000, 0x2041, 0x0000, 0x780c, 0x0002, 0x224a, 0x2225, 0x20a9, | ||
584 | 0x2119, 0x2039, 0x8f74, 0x2734, 0x7d10, 0x00c0, 0x6084, 0xa086, | ||
585 | 0x0103, 0x1904, 0x2103, 0x6114, 0x6018, 0xa105, 0x0120, 0x86ff, | ||
586 | 0x11d8, 0x0804, 0x2103, 0x8603, 0xa080, 0x8f55, 0x620c, 0x2202, | ||
587 | 0x8000, 0x6210, 0x2202, 0x080c, 0x1dd0, 0x8630, 0xa68e, 0x000f, | ||
588 | 0x0904, 0x2184, 0x786c, 0xa065, 0x1d08, 0x7808, 0xa602, 0x1220, | ||
589 | 0xd5ac, 0x1110, 0x263a, 0x0005, 0xa682, 0x0003, 0x1a04, 0x2184, | ||
590 | 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x11f8, 0x2011, | ||
591 | 0x8f55, 0x2204, 0x70c6, 0x8210, 0x2204, 0x70ca, 0xd684, 0x1130, | ||
592 | 0x8210, 0x2204, 0x70da, 0x8210, 0x2204, 0x70de, 0xa685, 0x8020, | ||
593 | 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, | ||
594 | 0x7812, 0x2091, 0x8001, 0x203b, 0x0000, 0x0005, 0x7810, 0xc0ad, | ||
595 | 0x7812, 0x0804, 0x2184, 0x263a, 0x080c, 0x2250, 0x1904, 0x226c, | ||
596 | 0x786c, 0xa065, 0x1904, 0x20ae, 0x2091, 0x8000, 0x7810, 0xa084, | ||
597 | 0xffcf, 0x86ff, 0x0108, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0804, | ||
598 | 0x226c, 0x2039, 0x8f74, 0x2734, 0x7d10, 0x00a0, 0x6084, 0xa086, | ||
599 | 0x0103, 0x1904, 0x216e, 0x6114, 0x6018, 0xa105, 0x0120, 0x86ff, | ||
600 | 0x11b8, 0x0804, 0x216e, 0xa680, 0x8f55, 0x620c, 0x2202, 0x080c, | ||
601 | 0x1dd0, 0x8630, 0xa68e, 0x001e, 0x0904, 0x2184, 0x786c, 0xa065, | ||
602 | 0x1d28, 0x7808, 0xa602, 0x1220, 0xd5ac, 0x1110, 0x263a, 0x0005, | ||
603 | 0xa682, 0x0006, 0x1a04, 0x2184, 0x2091, 0x8000, 0x2069, 0x0000, | ||
604 | 0x6818, 0xd084, 0x11f8, 0x2011, 0x8f55, 0x2009, 0x8f4e, 0x26a8, | ||
605 | 0x211c, 0x2204, 0x201a, 0x8108, 0x8210, 0x1f04, 0x2150, 0xa685, | ||
606 | 0x8030, 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, | ||
607 | 0xffcf, 0x7812, 0x2091, 0x8001, 0xa006, 0x2009, 0x8f75, 0x200a, | ||
608 | 0x203a, 0x0005, 0x7810, 0xc0ad, 0x7812, 0x00b0, 0x263a, 0x080c, | ||
609 | 0x2250, 0x1904, 0x226c, 0x786c, 0xa065, 0x1904, 0x211e, 0x2091, | ||
610 | 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0108, 0xc0ad, 0x7812, | ||
611 | 0x2091, 0x8001, 0x0804, 0x226c, 0x2091, 0x8000, 0x7007, 0x0004, | ||
612 | 0x7994, 0x70d4, 0xa102, 0x0228, 0x0168, 0x7b90, 0xa302, 0x1150, | ||
613 | 0x0010, 0x8002, 0x1138, 0x263a, 0x7810, 0xc0ad, 0x7812, 0x2091, | ||
614 | 0x8001, 0x0005, 0xa184, 0xff00, 0x0140, 0x810f, 0x810c, 0x810c, | ||
615 | 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, 0x8004, 0x8004, | ||
616 | 0x7a9c, 0xa210, 0x721a, 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4, | ||
617 | 0x0130, 0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, | ||
618 | 0x0030, 0x7003, 0x0000, 0x2009, 0x8f54, 0x260a, 0x8109, 0x2198, | ||
619 | 0x2104, 0xd084, 0x0108, 0x8633, 0xa6b0, 0x0002, 0x26a8, 0x53a6, | ||
620 | 0x8603, 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000, 0xa10a, | ||
621 | 0x1208, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, 0x0140, 0x810f, | ||
622 | 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, | ||
623 | 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211, 0xd4c4, | ||
624 | 0x0120, 0x7b84, 0xa319, 0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0de8, | ||
625 | 0xa084, 0x01e0, 0x01d0, 0x7d10, 0x2031, 0x8f54, 0x2634, 0x78a8, | ||
626 | 0x8000, 0x78aa, 0xd08c, 0x1138, 0x7007, 0x0006, 0x7004, 0xd094, | ||
627 | 0x1de8, 0x0804, 0x2186, 0x2069, 0x4747, 0x206b, 0x0003, 0x78ac, | ||
628 | 0xa085, 0x0300, 0x78ae, 0xa006, 0x0048, 0x2030, 0x75d6, 0x2091, | ||
629 | 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091, 0x8001, | ||
630 | 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, 0x711a, 0x721e, | ||
631 | 0xd5c4, 0x0110, 0x7322, 0x7426, 0x0005, 0x6084, 0xa086, 0x0103, | ||
632 | 0x11d8, 0x6114, 0x6018, 0xa105, 0x11b8, 0x2069, 0x0000, 0x6818, | ||
633 | 0xd084, 0x1190, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, | ||
634 | 0x681b, 0x0001, 0x2091, 0x4080, 0x080c, 0x1dd0, 0x0e04, 0x2243, | ||
635 | 0x786c, 0xa065, 0x1d10, 0x0005, 0x0059, 0x1530, 0x786c, 0xa065, | ||
636 | 0x19e0, 0x0410, 0x0029, 0x1500, 0x786c, 0xa065, 0x1dd8, 0x00e0, | ||
637 | 0x6084, 0xa086, 0x0103, 0x1168, 0x6018, 0xc0fc, 0x601a, 0xa086, | ||
638 | 0x0004, 0x1138, 0x7804, 0xd0a4, 0x0120, 0x080c, 0x1dd0, 0xa006, | ||
639 | 0x0005, 0x0079, 0x1118, 0xa085, 0x0001, 0x0005, 0x00b9, 0x1110, | ||
640 | 0x2041, 0x0001, 0x7d10, 0x0005, 0x88ff, 0x0110, 0x2091, 0x4080, | ||
641 | 0x0005, 0x7b90, 0x7994, 0x70d4, 0xa102, 0x1118, 0xa385, 0x0000, | ||
642 | 0x0005, 0x0210, 0xa302, 0x0005, 0x8002, 0x0005, 0xa184, 0xff00, | ||
643 | 0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, | ||
644 | 0x0018, 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0, | ||
645 | 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0018, 0x6028, | ||
646 | 0xa005, 0x0110, 0x2009, 0x0040, 0x080c, 0x1b34, 0x01d0, 0x78a8, | ||
647 | 0x8000, 0x78aa, 0xd08c, 0x1510, 0x6014, 0xd0fc, 0x1118, 0x2069, | ||
648 | 0x4740, 0x0010, 0x2069, 0x4780, 0x2091, 0x8000, 0x681f, 0x0003, | ||
649 | 0x78ab, 0x0000, 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, | ||
650 | 0x0068, 0x78ab, 0x0000, 0x080c, 0x1dd0, 0x7990, 0x7894, 0x8000, | ||
651 | 0xa10a, 0x1208, 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071, 0x0010, | ||
652 | 0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118, 0x2009, 0x4758, 0x0010, | ||
653 | 0x2009, 0x4798, 0x2091, 0x8000, 0x200a, 0x00f6, 0x2009, 0x4780, | ||
654 | 0x2079, 0x0100, 0xd7fc, 0x1120, 0x2009, 0x4740, 0x2079, 0x0200, | ||
655 | 0x2104, 0xa086, 0x0000, 0x1180, 0xd7fc, 0x1118, 0x2009, 0x4745, | ||
656 | 0x0010, 0x2009, 0x4785, 0x2104, 0xa005, 0x1130, 0x7830, 0xa084, | ||
657 | 0x00c0, 0x1110, 0x781b, 0x0052, 0x00fe, 0x0005, 0x2009, 0x0002, | ||
658 | 0x2069, 0x4700, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x234b, | ||
659 | 0x2071, 0x4780, 0x2079, 0x0100, 0x2021, 0x49bf, 0x784b, 0x000f, | ||
660 | 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x0118, 0x2019, 0x3e37, 0x0030, | ||
661 | 0x20a1, 0x012b, 0x2019, 0x3e37, 0xd184, 0x0110, 0x20a1, 0x022b, | ||
662 | 0x2304, 0xa005, 0x0140, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, | ||
663 | 0x53a6, 0x3318, 0x0ca8, 0x789b, 0x0000, 0x789b, 0x0020, 0x20a9, | ||
664 | 0x0010, 0x78af, 0x0000, 0x78af, 0x2020, 0x1f04, 0x2329, 0x7003, | ||
665 | 0x0000, 0x0016, 0xd18c, 0x2009, 0x0000, 0x0108, 0xc1bd, 0x080c, | ||
666 | 0x246c, 0x001e, 0x7020, 0xa084, 0x000f, 0xa085, 0x6300, 0x7806, | ||
667 | 0x780f, 0x9000, 0x7843, 0x00d8, 0x7853, 0x0090, 0x780b, 0x2f08, | ||
668 | 0x7452, 0x704f, 0x0000, 0x8109, 0x0140, 0x2071, 0x4740, 0x2079, | ||
669 | 0x0200, 0x2021, 0x47bf, 0x0804, 0x2306, 0x080c, 0x2526, 0x0005, | ||
670 | 0x0016, 0x2011, 0x0101, 0xd1bc, 0x1110, 0x2011, 0x0201, 0xa18c, | ||
671 | 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x001e, 0x080c, | ||
672 | 0x246c, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110, 0x2011, 0x0201, | ||
673 | 0x20a9, 0x0009, 0x810b, 0x1f04, 0x2372, 0xa18c, 0x0e00, 0x2204, | ||
674 | 0xa084, 0xf1ff, 0xa105, 0x2012, 0x0005, 0x2019, 0x0002, 0x2009, | ||
675 | 0x0101, 0x20a9, 0x0005, 0x8213, 0x1f04, 0x2383, 0xa294, 0x00e0, | ||
676 | 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x8319, 0x0118, 0x2009, | ||
677 | 0x0201, 0x0c78, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110, 0x2011, | ||
678 | 0x0201, 0x20a9, 0x000c, 0x810b, 0x1f04, 0x239b, 0xa18c, 0xf000, | ||
679 | 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x0005, 0x2011, 0x0102, | ||
680 | 0xd3fc, 0x1110, 0x2011, 0x0202, 0x2204, 0xa09c, 0x0f30, 0xa084, | ||
681 | 0xf0cf, 0xa105, 0x2012, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc, | ||
682 | 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, | ||
683 | 0x609a, 0x62ac, 0x63ac, 0x00ce, 0x0005, 0x00c6, 0x2061, 0x0100, | ||
684 | 0xd1bc, 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, | ||
685 | 0x0022, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x00ce, 0x0005, | ||
686 | 0x00c6, 0x2061, 0x0100, 0xd1bc, 0x1110, 0x2061, 0x0200, 0xc1bc, | ||
687 | 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0xa28c, 0x0020, | ||
688 | 0x0118, 0xc2ac, 0xa39d, 0x4000, 0xc3ec, 0xd3b4, 0x1108, 0xc3ed, | ||
689 | 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x00ce, 0x0005, 0x2091, | ||
690 | 0x8000, 0x00c6, 0x00e6, 0x6818, 0xa005, 0x0904, 0x2450, 0xd1fc, | ||
691 | 0x0118, 0x2061, 0x8ed0, 0x0010, 0x2061, 0x8dc0, 0x080c, 0x2458, | ||
692 | 0x0560, 0x20a9, 0x0101, 0xd1fc, 0x0118, 0x2061, 0x8dd0, 0x0010, | ||
693 | 0x2061, 0x8cc0, 0x00c6, 0x080c, 0x2458, 0x0128, 0x00ce, 0x8c60, | ||
694 | 0x1f04, 0x2412, 0x04a8, 0x000e, 0xd1fc, 0x0128, 0xa082, 0x8dd0, | ||
695 | 0x2071, 0x4780, 0x0020, 0xa082, 0x8cc0, 0x2071, 0x4740, 0x7076, | ||
696 | 0x7172, 0x2138, 0x2001, 0x0004, 0x7062, 0x707f, 0x000f, 0x71d0, | ||
697 | 0xc1c4, 0x71d2, 0x080c, 0x22cb, 0x00c0, 0xd1fc, 0x1118, 0x2071, | ||
698 | 0x4740, 0x0010, 0x2071, 0x4780, 0x6020, 0xc0dd, 0x6022, 0x7172, | ||
699 | 0x2138, 0x2c00, 0x707a, 0x2001, 0x0006, 0x7062, 0x707f, 0x000f, | ||
700 | 0x71d0, 0xc1c4, 0x71d2, 0x080c, 0x22cb, 0x2001, 0x0000, 0x0010, | ||
701 | 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x00ee, 0x00ce, 0x0005, | ||
702 | 0x2c04, 0xa005, 0x0170, 0x2060, 0x6010, 0xa306, 0x1140, 0x600c, | ||
703 | 0xa206, 0x1128, 0x6014, 0xa106, 0x1110, 0xa006, 0x0020, 0x6000, | ||
704 | 0x0c80, 0xa085, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x0016, 0x2079, | ||
705 | 0x4780, 0x2071, 0x0100, 0xd1bc, 0x1120, 0x2079, 0x4740, 0x2071, | ||
706 | 0x0200, 0x7920, 0xa18c, 0x000f, 0x70ec, 0xd0c4, 0x1110, 0x001e, | ||
707 | 0x0060, 0x810b, 0x810b, 0x810b, 0x810b, 0x000e, 0xa18d, 0x0800, | ||
708 | 0xd0bc, 0x1110, 0xa18d, 0x0f00, 0x2104, 0x00ee, 0x00fe, 0x0005, | ||
709 | 0x2001, 0x4701, 0x2004, 0xd0ac, 0x1138, 0x68e4, 0xd0ac, 0x0120, | ||
710 | 0xa084, 0x0006, 0x1108, 0x0009, 0x0005, 0x6014, 0x00e6, 0x0036, | ||
711 | 0x2018, 0x2071, 0x4c40, 0xd0fc, 0x1110, 0x2071, 0x4bc0, 0x8007, | ||
712 | 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084, | ||
713 | 0x000a, 0x1904, 0x2523, 0x7108, 0xa194, 0xff00, 0x0904, 0x2523, | ||
714 | 0xa18c, 0x00ff, 0x701c, 0xa084, 0xff00, 0x01c0, 0x7004, 0xa085, | ||
715 | 0x003a, 0x7006, 0x2001, 0x0009, 0xa102, 0x16d8, 0x2001, 0x000a, | ||
716 | 0xa102, 0x16d0, 0x2001, 0x000c, 0xa102, 0x16c8, 0x701c, 0xa084, | ||
717 | 0x00ff, 0x701e, 0x7004, 0xa084, 0xffdf, 0x7006, 0x2001, 0x000a, | ||
718 | 0xa106, 0x01a8, 0x2001, 0x000c, 0xa106, 0x01a0, 0x2001, 0x0012, | ||
719 | 0xa106, 0x0198, 0x2001, 0x0014, 0xa106, 0x0190, 0x2001, 0x0019, | ||
720 | 0xa106, 0x0188, 0x2001, 0x0032, 0xa106, 0x0180, 0x00d8, 0x2009, | ||
721 | 0x000c, 0x00d0, 0x2009, 0x0012, 0x00b8, 0x2009, 0x0014, 0x00a0, | ||
722 | 0x2009, 0x0019, 0x0088, 0x2009, 0x0020, 0x0070, 0x2009, 0x003f, | ||
723 | 0x0058, 0x2009, 0x000a, 0x0040, 0x2009, 0x000c, 0x0028, 0x2009, | ||
724 | 0x0019, 0x0010, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x7004, | ||
725 | 0xa085, 0x000a, 0x7006, 0x2071, 0x4700, 0x7004, 0xd0bc, 0x0158, | ||
726 | 0xd3fc, 0x1120, 0x73ea, 0x2071, 0x4740, 0x0018, 0x73ee, 0x2071, | ||
727 | 0x4780, 0x701f, 0x000d, 0x003e, 0x00ee, 0x0005, 0x2001, 0x01ff, | ||
728 | 0x2004, 0xd0fc, 0x11d0, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, | ||
729 | 0x12a0, 0x2071, 0x0200, 0x71ec, 0xa18c, 0x1c00, 0x810f, 0x810c, | ||
730 | 0x810c, 0x2079, 0x0100, 0x78ec, 0xa084, 0x1c00, 0x8007, 0x8004, | ||
731 | 0x8004, 0xa105, 0xa08a, 0x0007, 0x0208, 0x0005, 0x0002, 0x2574, | ||
732 | 0x255b, 0x2574, 0x255b, 0x254e, 0x2568, 0x254e, 0x7008, 0xa084, | ||
733 | 0xc3ff, 0xa085, 0x3000, 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085, | ||
734 | 0x3000, 0x780a, 0x0005, 0x7008, 0xa084, 0xc3ff, 0xa085, 0x2000, | ||
735 | 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085, 0x2000, 0x780a, 0x0005, | ||
736 | 0x7008, 0xa084, 0xc3ff, 0xa085, 0x0c00, 0x700a, 0x7808, 0xa084, | ||
737 | 0xc3ff, 0xa085, 0x0c00, 0x780a, 0x0005, 0x0e04, 0x2575, 0x2091, | ||
738 | 0x8000, 0x2071, 0x0000, 0x0006, 0x7018, 0xd084, 0x1de8, 0x000e, | ||
739 | 0x2071, 0x0010, 0x70ca, 0x000e, 0x70c6, 0x70c3, 0x8002, 0x70db, | ||
740 | 0x0a04, 0x70df, 0x002a, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, | ||
741 | 0x4080, 0x0cf8, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708a, | ||
742 | 0x758e, 0x7492, 0x7696, 0x779a, 0xa594, 0x003f, 0xd4f4, 0x0138, | ||
743 | 0xd7bc, 0x1128, 0xa784, 0x007d, 0x1904, 0x3c9c, 0x0871, 0xa49c, | ||
744 | 0x000f, 0xa382, 0x0004, 0x0320, 0xa3a6, 0x0007, 0x1930, 0x2418, | ||
745 | 0x8507, 0xa084, 0x000f, 0x0002, 0x2b6c, 0x2c57, 0x2c95, 0x2efb, | ||
746 | 0x3279, 0x32d0, 0x3376, 0x3405, 0x34d9, 0x35ab, 0x25c7, 0x25c4, | ||
747 | 0x299e, 0x2a85, 0x324d, 0x25c4, 0x080c, 0x2575, 0x0005, 0xa006, | ||
748 | 0x0038, 0x7808, 0xc08d, 0x780a, 0xa006, 0x7002, 0x704a, 0x7042, | ||
749 | 0x70ce, 0x705c, 0xa005, 0x1904, 0x2718, 0x7060, 0xa084, 0x0007, | ||
750 | 0x0002, 0x25e1, 0x2652, 0x265a, 0x2663, 0x266c, 0x26fe, 0x2675, | ||
751 | 0x2652, 0x7830, 0xd0bc, 0x1d10, 0x71d0, 0xd1bc, 0x19f8, 0xd1b4, | ||
752 | 0x1904, 0x262f, 0x70a0, 0xa086, 0x0001, 0x09c0, 0x7014, 0xa005, | ||
753 | 0x19a8, 0x70b0, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0080, | ||
754 | 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, | ||
755 | 0xa886, 0x0001, 0x0118, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, | ||
756 | 0x6e1c, 0x2001, 0x0010, 0x0804, 0x284b, 0x705c, 0xa005, 0x1904, | ||
757 | 0x25c6, 0x00c6, 0x00d6, 0x70b0, 0xa06d, 0x6800, 0xa065, 0xa055, | ||
758 | 0x789b, 0x0080, 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, | ||
759 | 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0118, 0x69bc, 0x7daa, 0x79aa, | ||
760 | 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0804, 0x284b, 0x080c, | ||
761 | 0x3c5b, 0x1904, 0x25c6, 0x781b, 0x0068, 0x70b8, 0xa06d, 0x68b4, | ||
762 | 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, | ||
763 | 0xc08d, 0x780a, 0x68bc, 0x703e, 0xc1b4, 0x71d2, 0x70b4, 0xa065, | ||
764 | 0x68c0, 0x7056, 0x7003, 0x0002, 0x2d00, 0x704a, 0xad80, 0x0009, | ||
765 | 0x7042, 0x0005, 0x080c, 0x3c5b, 0x1120, 0x781b, 0x0054, 0x7003, | ||
766 | 0x0004, 0x0005, 0x080c, 0x3c5b, 0x1128, 0x2011, 0x000c, 0x0419, | ||
767 | 0x7003, 0x0004, 0x0005, 0x080c, 0x3c5b, 0x1128, 0x2011, 0x0006, | ||
768 | 0x00d1, 0x7003, 0x0004, 0x0005, 0x080c, 0x3c5b, 0x1128, 0x2011, | ||
769 | 0x000d, 0x0089, 0x7003, 0x0004, 0x0005, 0x080c, 0x3c5b, 0x1150, | ||
770 | 0x2011, 0x0006, 0x0041, 0x7078, 0x707b, 0x0000, 0x2068, 0x704a, | ||
771 | 0x7003, 0x0004, 0x0005, 0x7170, 0xc1fc, 0x8107, 0x7882, 0x789b, | ||
772 | 0x0080, 0xa286, 0x000c, 0x1120, 0x7aaa, 0x2001, 0x0001, 0x0098, | ||
773 | 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286, 0x000d, 0x0120, | ||
774 | 0x7aaa, 0x2001, 0x0002, 0x0038, 0x78ab, 0x0020, 0x7174, 0x79aa, | ||
775 | 0x7aaa, 0x2001, 0x0004, 0x789b, 0x0060, 0x78aa, 0x785b, 0x0004, | ||
776 | 0x781b, 0x0113, 0x080c, 0x3c6e, 0x707f, 0x000f, 0x70d0, 0xd0b4, | ||
777 | 0x0168, 0xc0b4, 0x70d2, 0x00c6, 0x70b4, 0xa065, 0x6008, 0xa084, | ||
778 | 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, 0x0005, 0x7014, | ||
779 | 0xa005, 0x1138, 0x70d0, 0xd0b4, 0x0128, 0x70b4, 0xac06, 0x1110, | ||
780 | 0x0c29, 0x0005, 0x0016, 0x71a0, 0xa186, 0x0001, 0x0528, 0x00d6, | ||
781 | 0x0026, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b0, 0x2068, 0x6800, | ||
782 | 0xac06, 0x0120, 0x8211, 0x01b0, 0x00c9, 0x0cc8, 0x00c6, 0x2100, | ||
783 | 0x2011, 0x0001, 0xa212, 0x70b0, 0x2068, 0x6800, 0x2060, 0x6008, | ||
784 | 0xa084, 0xfbef, 0x600a, 0x8211, 0x0110, 0x0041, 0x0cb0, 0x70a3, | ||
785 | 0x0001, 0x00ce, 0x002e, 0x00de, 0x001e, 0x0005, 0xade8, 0x0005, | ||
786 | 0x70a8, 0xad06, 0x1110, 0x70a4, 0x2068, 0x0005, 0x080c, 0x3c5b, | ||
787 | 0x1904, 0x25c6, 0x7078, 0x2068, 0x7770, 0x080c, 0x3b95, 0x2c50, | ||
788 | 0x080c, 0x3cf6, 0x789b, 0x0080, 0x6814, 0xa084, 0x001f, 0xc0bd, | ||
789 | 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, 0x0004, 0x0804, 0x2850, | ||
790 | 0x080c, 0x3c5b, 0x1904, 0x25c6, 0x789b, 0x0080, 0x705c, 0x2068, | ||
791 | 0x6f14, 0x70d0, 0xd0b4, 0x0168, 0xc0b4, 0x70d2, 0x00c6, 0x70b4, | ||
792 | 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, | ||
793 | 0x00ce, 0x080c, 0x3b95, 0x2c50, 0x080c, 0x3cf6, 0x6824, 0xa005, | ||
794 | 0x0130, 0xa082, 0x0006, 0x0208, 0x0010, 0x6827, 0x0005, 0x6814, | ||
795 | 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, | ||
796 | 0x2001, 0x0003, 0x0804, 0x2850, 0xc28d, 0x72d2, 0x72bc, 0xa200, | ||
797 | 0xa015, 0x7150, 0x8108, 0xa12a, 0x0208, 0x71bc, 0x2164, 0x6504, | ||
798 | 0x85ff, 0x1170, 0x7152, 0x8421, 0x1da8, 0x70d0, 0xd08c, 0x0128, | ||
799 | 0x70cc, 0xa005, 0x1110, 0x70cf, 0x000a, 0x0005, 0x2200, 0x0c90, | ||
800 | 0x70d0, 0xc08c, 0x70d2, 0x70cf, 0x0000, 0x6034, 0xa005, 0x1db0, | ||
801 | 0x6708, 0xa784, 0x073f, 0x01d0, 0xd7d4, 0x1d80, 0xa784, 0x0021, | ||
802 | 0x1d68, 0xa784, 0x0002, 0x0130, 0xa784, 0x0004, 0x0d38, 0xa7bc, | ||
803 | 0xfffb, 0x670a, 0xa784, 0x0218, 0x1d08, 0xa784, 0x0100, 0x0130, | ||
804 | 0x6018, 0xa005, 0x19d8, 0xa7bc, 0xfeff, 0x670a, 0x2568, 0x6823, | ||
805 | 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6318, 0x0128, 0x601c, 0xa302, | ||
806 | 0x0220, 0x0118, 0x0858, 0x83ff, 0x1948, 0x2d58, 0x2c50, 0x7152, | ||
807 | 0xd7bc, 0x1120, 0x7028, 0x6022, 0x603a, 0x0010, 0xc7bc, 0x670a, | ||
808 | 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, 0x0001, 0x6b14, | ||
809 | 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0110, 0xd684, 0x0110, | ||
810 | 0xa39c, 0xffbf, 0xd6a4, 0x0110, 0xa39d, 0x0020, 0xa684, 0x000e, | ||
811 | 0x1904, 0x2802, 0xc7a5, 0x670a, 0x2c00, 0x68c6, 0x77a0, 0xa786, | ||
812 | 0x0001, 0x1178, 0x70d0, 0xd0b4, 0x1160, 0x7000, 0xa082, 0x0002, | ||
813 | 0x1240, 0x7830, 0xd0bc, 0x1128, 0x789b, 0x0080, 0x7baa, 0x0804, | ||
814 | 0x2849, 0x8739, 0x77a2, 0x2750, 0x77ac, 0xa7b0, 0x0005, 0x70a8, | ||
815 | 0xa606, 0x1108, 0x76a4, 0x76ae, 0x2c3a, 0x8738, 0x2d3a, 0x8738, | ||
816 | 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc, 0x0150, | ||
817 | 0x2091, 0x8000, 0x2091, 0x303d, 0x70d0, 0xa084, 0x303d, 0x2091, | ||
818 | 0x8000, 0x2090, 0xaad5, 0x0000, 0x0120, 0x8421, 0x2200, 0x1904, | ||
819 | 0x2751, 0x0005, 0xd1dc, 0x0904, 0x37f1, 0x2029, 0x0020, 0xd69c, | ||
820 | 0x1120, 0x8528, 0xd68c, 0x1108, 0x8528, 0x8840, 0x6f14, 0x610c, | ||
821 | 0x8108, 0xa18c, 0x00ff, 0x70c8, 0xa160, 0x2c64, 0x8cff, 0x0188, | ||
822 | 0x6014, 0xa706, 0x1dd0, 0x60b8, 0x8001, 0x60ba, 0x1d88, 0x2a60, | ||
823 | 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x1904, 0x2751, | ||
824 | 0x0005, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840, 0x6008, | ||
825 | 0xc0d5, 0x600a, 0x77a0, 0xa786, 0x0001, 0x1904, 0x27d9, 0x70d0, | ||
826 | 0xd0b4, 0x1904, 0x27d9, 0x7000, 0xa082, 0x0002, 0x1a04, 0x27d9, | ||
827 | 0x7830, 0xd0bc, 0x1904, 0x27d9, 0x789b, 0x0080, 0x7baa, 0x7daa, | ||
828 | 0x79aa, 0x2001, 0x0002, 0x0006, 0x6018, 0x8000, 0x601a, 0x0008, | ||
829 | 0x0006, 0x2960, 0x6104, 0x2a60, 0x080c, 0x3d09, 0x1590, 0xa184, | ||
830 | 0x0018, 0x0180, 0xa184, 0x0010, 0x0118, 0x080c, 0x399a, 0x1548, | ||
831 | 0xa184, 0x0008, 0x0138, 0x69a0, 0xa184, 0x0600, 0x1118, 0x080c, | ||
832 | 0x38b8, 0x00f8, 0x69a0, 0xa184, 0x1e00, 0x0528, 0xa184, 0x0800, | ||
833 | 0x0178, 0x00c6, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, | ||
834 | 0xa18d, 0x0010, 0x6106, 0x00ce, 0x080c, 0x399a, 0x1150, 0x69a0, | ||
835 | 0xa184, 0x0200, 0x0118, 0x080c, 0x38fd, 0x0018, 0xa184, 0x0400, | ||
836 | 0x19f0, 0x69a0, 0xa184, 0x1000, 0x0130, 0x6914, 0xa18c, 0xff00, | ||
837 | 0x810f, 0x080c, 0x23c5, 0x002e, 0xa68c, 0x00e0, 0xa684, 0x0060, | ||
838 | 0x0128, 0xa086, 0x0060, 0x1110, 0xa18d, 0x4000, 0xa18d, 0x0104, | ||
839 | 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, | ||
840 | 0xd6bc, 0x0168, 0xc0fc, 0x7083, 0x0000, 0xa08a, 0x000d, 0x0328, | ||
841 | 0xa08a, 0x000c, 0x7182, 0x2001, 0x000c, 0x800c, 0x7186, 0x78aa, | ||
842 | 0x3518, 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, 0x20a0, | ||
843 | 0x789b, 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898, | ||
844 | 0x25a0, 0xa286, 0x0020, 0x1508, 0x70d0, 0xc0b5, 0x70d2, 0x2c00, | ||
845 | 0x70b6, 0x2d00, 0x70ba, 0x6814, 0xc0fc, 0x8007, 0x7882, 0xa286, | ||
846 | 0x0002, 0x0904, 0x2921, 0x70a0, 0x8000, 0x70a2, 0x74b0, 0xa498, | ||
847 | 0x0005, 0x70a8, 0xa306, 0x1108, 0x73a4, 0x73b2, 0xa286, 0x0010, | ||
848 | 0x0904, 0x25c6, 0x00de, 0x00ce, 0x0005, 0x7000, 0xa005, 0x19e0, | ||
849 | 0xa286, 0x0002, 0x1904, 0x2938, 0x080c, 0x3c5b, 0x19a8, 0x6814, | ||
850 | 0xc0fc, 0x8007, 0x7882, 0x2091, 0x8000, 0x781b, 0x0068, 0x68b4, | ||
851 | 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x2091, | ||
852 | 0x8001, 0x7808, 0xc08d, 0x780a, 0x0126, 0x00d6, 0x00c6, 0x70d0, | ||
853 | 0xa084, 0x2e00, 0x2090, 0x00ce, 0x00de, 0x012e, 0x2900, 0x7056, | ||
854 | 0x68bc, 0x703e, 0x7003, 0x0002, 0x2d00, 0x704a, 0xad80, 0x0009, | ||
855 | 0x7042, 0x7830, 0xd0bc, 0x0140, 0x2091, 0x303d, 0x70d0, 0xa084, | ||
856 | 0x303d, 0x2091, 0x8000, 0x2090, 0x70a0, 0xa005, 0x1108, 0x0005, | ||
857 | 0x8421, 0x0de8, 0x724c, 0x70bc, 0xa200, 0xa015, 0x0804, 0x2751, | ||
858 | 0xa286, 0x0010, 0x1560, 0x080c, 0x3c5b, 0x1904, 0x28cc, 0x6814, | ||
859 | 0xc0fc, 0x8007, 0x7882, 0x781b, 0x0068, 0x68b4, 0x785a, 0x6894, | ||
860 | 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, | ||
861 | 0x70a0, 0x8000, 0x70a2, 0x74b0, 0xa490, 0x0005, 0x70a8, 0xa206, | ||
862 | 0x1108, 0x72a4, 0x72b2, 0x2900, 0x7056, 0x68bc, 0x703e, 0x7003, | ||
863 | 0x0002, 0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x0005, 0x6bb4, | ||
864 | 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x6b94, | ||
865 | 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x0068, 0x2900, | ||
866 | 0x7056, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605, 0x0170, | ||
867 | 0x70d0, 0xa084, 0x2e00, 0xa086, 0x2600, 0x1118, 0x2009, 0x0000, | ||
868 | 0x0010, 0x2009, 0x0001, 0xa284, 0x000f, 0x0033, 0xad80, 0x0009, | ||
869 | 0x7042, 0x2d00, 0x704a, 0x0005, 0x299c, 0x4208, 0x4208, 0x41f6, | ||
870 | 0x4208, 0x299c, 0x299c, 0x299c, 0x080c, 0x2575, 0x7808, 0xa084, | ||
871 | 0xfffd, 0x780a, 0x00f6, 0x2079, 0x4700, 0x78ac, 0x00fe, 0xd084, | ||
872 | 0x01c0, 0x7160, 0xa186, 0x0001, 0x0904, 0x2a61, 0xa186, 0x0007, | ||
873 | 0x0170, 0xa186, 0x0005, 0x1158, 0x7078, 0x2068, 0x681b, 0x0004, | ||
874 | 0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7063, | ||
875 | 0x0000, 0x70a3, 0x0000, 0x70a4, 0x70ae, 0x70b2, 0x080c, 0x26ae, | ||
876 | 0x0156, 0x2011, 0x0004, 0x7160, 0xa186, 0x0001, 0x0158, 0xa186, | ||
877 | 0x0007, 0x1118, 0x701f, 0x0005, 0x0010, 0x701f, 0x0001, 0x70d0, | ||
878 | 0xc0c5, 0x70d2, 0x2001, 0x470a, 0x2004, 0xa084, 0x00ff, 0xa086, | ||
879 | 0x0018, 0x0130, 0x7018, 0x7016, 0xa005, 0x1110, 0x70a3, 0x0001, | ||
880 | 0x0066, 0x080c, 0x3f4e, 0x20a9, 0x0010, 0x2039, 0x0000, 0x080c, | ||
881 | 0x3a8b, 0xa7b8, 0x0100, 0x1f04, 0x29ef, 0x006e, 0x7000, 0x0002, | ||
882 | 0x2a2c, 0x2a0a, 0x2a0a, 0x2a02, 0x2a2c, 0x2a2c, 0x2a2c, 0x2a00, | ||
883 | 0x080c, 0x2575, 0x705c, 0xa005, 0x0538, 0xad06, 0x1118, 0x6800, | ||
884 | 0x705e, 0x0080, 0x6820, 0xd084, 0x1148, 0x6f14, 0x080c, 0x3b95, | ||
885 | 0x6008, 0xc0d4, 0x600a, 0x080c, 0x37c7, 0x0020, 0x7058, 0x2060, | ||
886 | 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, 0xd0fc, 0x0108, | ||
887 | 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, | ||
888 | 0xc09d, 0x6822, 0x080c, 0x1dbf, 0x2011, 0x0004, 0x74c8, 0xa4a0, | ||
889 | 0x0100, 0x04b1, 0xaea0, 0x0017, 0x0499, 0x20a9, 0x0101, 0x74c8, | ||
890 | 0x0479, 0x8420, 0x1f04, 0x2a38, 0x70c0, 0x2060, 0x2021, 0x0002, | ||
891 | 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0198, 0x6018, 0x0016, 0x0006, | ||
892 | 0x2011, 0x4702, 0x220c, 0xa102, 0x2012, 0x000e, 0x001e, 0xa102, | ||
893 | 0x0338, 0x6012, 0x1128, 0x2011, 0x4704, 0x2204, 0xc0a5, 0x2012, | ||
894 | 0x601b, 0x0000, 0xace0, 0x0010, 0x1f04, 0x2a42, 0x8421, 0x1d00, | ||
895 | 0x015e, 0x7063, 0x0000, 0x7003, 0x0000, 0x704b, 0x0000, 0x0005, | ||
896 | 0x0046, 0x2404, 0xa005, 0x01a8, 0x2068, 0x6800, 0x0006, 0x6a1a, | ||
897 | 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, | ||
898 | 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x080c, 0x1dbf, 0x000e, | ||
899 | 0x0c48, 0x004e, 0x2023, 0x0000, 0x0005, 0xa282, 0x0003, 0x0310, | ||
900 | 0x080c, 0x2575, 0x2300, 0x0002, 0x2a8f, 0x2b0c, 0x2b1a, 0xa282, | ||
901 | 0x0002, 0x0110, 0x080c, 0x2575, 0x7060, 0x7063, 0x0000, 0x707f, | ||
902 | 0x0000, 0x0022, 0x77d0, 0xc7c5, 0x77d2, 0x0002, 0x2aa6, 0x2aa6, | ||
903 | 0x2aa8, 0x2ae0, 0x37fb, 0x2aa6, 0x2ae0, 0x2aa6, 0x080c, 0x2575, | ||
904 | 0x7770, 0x080c, 0x3a8b, 0x7770, 0xa7bc, 0x8f00, 0x080c, 0x3b95, | ||
905 | 0x6018, 0xa005, 0x0528, 0xd7fc, 0x1118, 0x2021, 0x8dc0, 0x0010, | ||
906 | 0x2021, 0x8ed0, 0x2009, 0x0005, 0x2011, 0x0010, 0x080c, 0x2b34, | ||
907 | 0x01b8, 0x0156, 0x20a9, 0x0101, 0xd7fc, 0x1118, 0x2021, 0x8cc0, | ||
908 | 0x0010, 0x2021, 0x8dd0, 0x0046, 0x2009, 0x0005, 0x2011, 0x0010, | ||
909 | 0x080c, 0x2b34, 0x004e, 0x0118, 0x8420, 0x1f04, 0x2acb, 0x015e, | ||
910 | 0x8738, 0xa784, 0x001f, 0x1990, 0x0804, 0x25c9, 0x0804, 0x25c9, | ||
911 | 0x7770, 0x080c, 0x3b95, 0x6018, 0xa005, 0x0520, 0xd7fc, 0x1118, | ||
912 | 0x2021, 0x8dc0, 0x0010, 0x2021, 0x8ed0, 0x2009, 0x0005, 0x2011, | ||
913 | 0x0020, 0x080c, 0x2b34, 0x01b0, 0x0156, 0x20a9, 0x0101, 0xd7fc, | ||
914 | 0x1118, 0x2021, 0x8cc0, 0x0010, 0x2021, 0x8dd0, 0x0046, 0x2009, | ||
915 | 0x0005, 0x2011, 0x0020, 0x0481, 0x004e, 0x0118, 0x8420, 0x1f04, | ||
916 | 0x2afe, 0x015e, 0x0804, 0x25c9, 0x2200, 0x0002, 0x2b11, 0x2b13, | ||
917 | 0x2b13, 0x080c, 0x2575, 0x7063, 0x0000, 0x70d0, 0xc0c5, 0x70d2, | ||
918 | 0x0804, 0x25c9, 0x2200, 0x0002, 0x2b21, 0x2b13, 0x2b1f, 0x080c, | ||
919 | 0x2575, 0x080c, 0x3f4e, 0x7000, 0xa086, 0x0002, 0x1904, 0x3780, | ||
920 | 0x080c, 0x37e1, 0x6008, 0xa084, 0xfbef, 0x600a, 0x080c, 0x3772, | ||
921 | 0x0904, 0x3780, 0x0804, 0x25c9, 0x2404, 0xa005, 0x0590, 0x2068, | ||
922 | 0x2d04, 0x0006, 0x6814, 0xa706, 0x0118, 0x2d20, 0x000e, 0x0ca8, | ||
923 | 0x000e, 0x2022, 0x691a, 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, | ||
924 | 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff, 0xa205, 0x6822, | ||
925 | 0x080c, 0x1dbf, 0x2021, 0x4702, 0x241c, 0x8319, 0x2322, 0x6010, | ||
926 | 0x8001, 0x6012, 0x1128, 0x2021, 0x4704, 0x2404, 0xc0a5, 0x2022, | ||
927 | 0x6008, 0xa084, 0xf9ef, 0x600a, 0x080c, 0x26ca, 0x080c, 0x37e1, | ||
928 | 0x0005, 0xa085, 0x0001, 0x0ce0, 0x2300, 0x0002, 0x2b73, 0x2b71, | ||
929 | 0x2bee, 0x080c, 0x2575, 0x78e4, 0xa005, 0x17b0, 0x3208, 0xa18c, | ||
930 | 0x0800, 0x0118, 0x0104, 0x25c6, 0x0010, 0x0304, 0x25c6, 0x2008, | ||
931 | 0xa084, 0x0030, 0x1110, 0x0804, 0x324d, 0x78ec, 0xa084, 0x0003, | ||
932 | 0x0dd0, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, | ||
933 | 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, | ||
934 | 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, | ||
935 | 0x0001, 0x0002, 0x2bd1, 0x2bda, 0x2bc7, 0x2baa, 0x3c4f, 0x3c4f, | ||
936 | 0x2baa, 0x2be4, 0x080c, 0x2575, 0x7000, 0xa086, 0x0004, 0x1190, | ||
937 | 0x7060, 0xa086, 0x0002, 0x1130, 0x2011, 0x0002, 0x2019, 0x0000, | ||
938 | 0x0804, 0x2a85, 0x7060, 0xa086, 0x0006, 0x0db0, 0x7060, 0xa086, | ||
939 | 0x0004, 0x0d90, 0x79e4, 0x2001, 0x0003, 0x0804, 0x2f3b, 0x6818, | ||
940 | 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3a61, 0x781b, 0x006e, | ||
941 | 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3a61, | ||
942 | 0x0804, 0x3c2d, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, | ||
943 | 0x3a61, 0x781b, 0x00fa, 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, | ||
944 | 0x001d, 0x080c, 0x3a61, 0x781b, 0x00cb, 0x0005, 0xa584, 0x000f, | ||
945 | 0x11c0, 0x7000, 0x0002, 0x25c9, 0x2bfb, 0x2bfd, 0x3780, 0x3780, | ||
946 | 0x3780, 0x2bfb, 0x2bfb, 0x080c, 0x2575, 0x080c, 0x37e1, 0x6008, | ||
947 | 0xa084, 0xfbef, 0x600a, 0x080c, 0x3772, 0x0904, 0x3780, 0x0804, | ||
948 | 0x25c9, 0x78e4, 0xa005, 0x1b04, 0x2bac, 0x3208, 0xa18c, 0x0800, | ||
949 | 0x0118, 0x0104, 0x2bac, 0x0010, 0x0304, 0x2bac, 0x2008, 0xa084, | ||
950 | 0x0030, 0x1118, 0x781b, 0x0068, 0x0005, 0x78ec, 0xa084, 0x0003, | ||
951 | 0x0dc8, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, | ||
952 | 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, | ||
953 | 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, | ||
954 | 0x0001, 0x0002, 0x2c49, 0x2c4d, 0x2c44, 0x2c42, 0x3c4f, 0x3c4f, | ||
955 | 0x2c42, 0x3c49, 0x080c, 0x2575, 0x080c, 0x3a67, 0x781b, 0x006e, | ||
956 | 0x0005, 0x080c, 0x3a67, 0x0804, 0x3c2d, 0x080c, 0x3a67, 0x781b, | ||
957 | 0x00fa, 0x0005, 0x080c, 0x3a67, 0x781b, 0x00cb, 0x0005, 0x2300, | ||
958 | 0x0002, 0x2c5e, 0x2c5c, 0x2c60, 0x080c, 0x2575, 0x0804, 0x3405, | ||
959 | 0x681b, 0x0016, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0904, | ||
960 | 0x3405, 0x78ec, 0xa084, 0x0003, 0x0904, 0x3405, 0xa184, 0x0100, | ||
961 | 0x0d98, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, | ||
962 | 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, | ||
963 | 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, | ||
964 | 0x0001, 0x0002, 0x2c92, 0x2c4d, 0x2bc7, 0x3c0b, 0x3c4f, 0x3c4f, | ||
965 | 0x3c0b, 0x3c49, 0x080c, 0x3c17, 0x0005, 0xa282, 0x0005, 0x0310, | ||
966 | 0x080c, 0x2575, 0x7898, 0x2040, 0x2300, 0x0002, 0x2ca1, 0x2ecb, | ||
967 | 0x2ed5, 0x2200, 0x0002, 0x2cbd, 0x2caa, 0x2cbd, 0x2ca8, 0x2ead, | ||
968 | 0x080c, 0x2575, 0x789b, 0x0018, 0x78a8, 0x2010, 0xa084, 0x00ff, | ||
969 | 0xa082, 0x0020, 0x0a04, 0x3a30, 0xa08a, 0x0004, 0x1a04, 0x3a30, | ||
970 | 0x0002, 0x3a30, 0x3a30, 0x3a30, 0x39e4, 0x789b, 0x0018, 0x79a8, | ||
971 | 0xa184, 0x0080, 0x0148, 0x0804, 0x3a30, 0x7000, 0xa005, 0x1dd8, | ||
972 | 0x2011, 0x0004, 0x0804, 0x35b7, 0xa184, 0x00ff, 0xa08a, 0x0010, | ||
973 | 0x1a04, 0x3a30, 0x0002, 0x2ce5, 0x2ce3, 0x2cf7, 0x2cfb, 0x2da9, | ||
974 | 0x3a30, 0x3a30, 0x2dab, 0x3a30, 0x3a30, 0x2ea9, 0x2ea9, 0x3a30, | ||
975 | 0x3a30, 0x3a30, 0x2eab, 0x080c, 0x2575, 0xd6e4, 0x0140, 0x2001, | ||
976 | 0x0300, 0x8000, 0x8000, 0x783a, 0x781b, 0x00c7, 0x0005, 0x6818, | ||
977 | 0xd0fc, 0x0118, 0x681b, 0x001d, 0x0c90, 0x0804, 0x3c0b, 0x681b, | ||
978 | 0x001d, 0x0804, 0x3a5b, 0x6920, 0x6922, 0xa684, 0x1800, 0x1904, | ||
979 | 0x2d4c, 0x6820, 0xd084, 0x1904, 0x2d54, 0x6818, 0xa086, 0x0008, | ||
980 | 0x1110, 0x681b, 0x0000, 0xd6d4, 0x0568, 0xd6bc, 0x0558, 0x7083, | ||
981 | 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, 0x0718, 0xa08a, | ||
982 | 0x000c, 0x7182, 0x2001, 0x000c, 0x800c, 0x7186, 0x789b, 0x0061, | ||
983 | 0x78aa, 0x0156, 0x0136, 0x0146, 0x0016, 0x3208, 0xa18c, 0x0600, | ||
984 | 0x0118, 0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, 0x001e, 0x789b, | ||
985 | 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, | ||
986 | 0x013e, 0x015e, 0x6038, 0xa005, 0x1150, 0x681c, 0xa084, 0x000e, | ||
987 | 0x0904, 0x3a5b, 0x080c, 0x3a6d, 0x782b, 0x3008, 0x0010, 0x8001, | ||
988 | 0x603a, 0x781b, 0x0071, 0x0005, 0xd6e4, 0x0130, 0x781b, 0x0083, | ||
989 | 0x0005, 0x781b, 0x0083, 0x0005, 0xa684, 0x0060, 0x0dd0, 0xd6dc, | ||
990 | 0x0dc0, 0xd6fc, 0x01a0, 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, | ||
991 | 0x78d0, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, | ||
992 | 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0xd6f4, | ||
993 | 0x0118, 0xc6f4, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003, 0x1148, | ||
994 | 0x0006, 0x080c, 0x3f4e, 0x080c, 0x4208, 0x000e, 0x781b, 0x0080, | ||
995 | 0x0005, 0xa006, 0x080c, 0x42e8, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, | ||
996 | 0x2200, 0xa105, 0x0120, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, | ||
997 | 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x1130, | ||
998 | 0xc6f5, 0x7e5a, 0x6eb6, 0x781b, 0x0080, 0x0005, 0x781b, 0x0080, | ||
999 | 0x2200, 0xa115, 0x1118, 0x080c, 0x4208, 0x0005, 0x080c, 0x4235, | ||
1000 | 0x0005, 0x080c, 0x2575, 0x0804, 0x2e3f, 0x00c6, 0x7054, 0x2060, | ||
1001 | 0x6920, 0xa18c, 0xecff, 0x6922, 0x6000, 0xa084, 0xcfdf, 0x6002, | ||
1002 | 0x080c, 0x3917, 0xa006, 0x2040, 0x2038, 0x080c, 0x39bf, 0x0804, | ||
1003 | 0x2e33, 0x00c6, 0x7054, 0x2060, 0x2c48, 0x7aa8, 0xa294, 0x00ff, | ||
1004 | 0xa286, 0x0004, 0x11d8, 0x6920, 0xd1e4, 0x1170, 0x2039, 0x0000, | ||
1005 | 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x391a, | ||
1006 | 0x080c, 0x39bf, 0x0804, 0x2e33, 0xa18c, 0xecff, 0x6922, 0x6104, | ||
1007 | 0xa18c, 0xffdd, 0x6106, 0x6000, 0xc0ac, 0x6002, 0xa286, 0x0003, | ||
1008 | 0x01d0, 0x6104, 0xa184, 0x0010, 0x0548, 0x080c, 0x3b91, 0x080c, | ||
1009 | 0x399a, 0x88ff, 0x0518, 0x00ce, 0x789b, 0x0060, 0x2800, 0x78aa, | ||
1010 | 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, | ||
1011 | 0x781b, 0x0082, 0x0005, 0x6920, 0xd1cc, 0x0130, 0xa18c, 0xfdff, | ||
1012 | 0x6922, 0x6000, 0xc0ec, 0x6002, 0x2039, 0x0000, 0x2041, 0x0000, | ||
1013 | 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x39bf, 0xa286, 0x0001, | ||
1014 | 0x0158, 0x6104, 0xa184, 0x0008, 0x01b0, 0x080c, 0x3b91, 0x080c, | ||
1015 | 0x38b8, 0x88ff, 0x1980, 0x0078, 0x6920, 0xd1c4, 0x0130, 0xa18c, | ||
1016 | 0xfeff, 0x6922, 0x6000, 0xc0e4, 0x6002, 0x2031, 0x0000, 0xa006, | ||
1017 | 0x2010, 0x080c, 0x391a, 0x00ce, 0x7e58, 0xd6d4, 0x1118, 0x781b, | ||
1018 | 0x0071, 0x0005, 0x781b, 0x0083, 0x0005, 0x0804, 0x3a57, 0x2808, | ||
1019 | 0x789b, 0x0080, 0x2019, 0x0080, 0x78a8, 0xa094, 0x00ff, 0xa286, | ||
1020 | 0x0001, 0x11b8, 0x2300, 0xa102, 0xa086, 0x0001, 0x0904, 0x2dad, | ||
1021 | 0x7ca8, 0xa4a4, 0x00ff, 0xa480, 0x0002, 0xa300, 0x2018, 0xa102, | ||
1022 | 0x0a04, 0x2dc1, 0x0904, 0x2dc1, 0x24a8, 0x7aa8, 0x1f04, 0x2e5d, | ||
1023 | 0x0c18, 0xa284, 0x00f0, 0xa082, 0x0020, 0x06b8, 0x2200, 0xa082, | ||
1024 | 0x0021, 0x1698, 0x7aa8, 0x8318, 0x8318, 0x2100, 0xa302, 0x0aa0, | ||
1025 | 0xa286, 0x0023, 0x0950, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, | ||
1026 | 0xa684, 0xfff1, 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, | ||
1027 | 0x78a0, 0xa005, 0x0904, 0x2e34, 0x20a8, 0x7998, 0x789b, 0x0060, | ||
1028 | 0x78aa, 0x2011, 0x0080, 0x799a, 0x78a8, 0x7998, 0x7a9a, 0x78aa, | ||
1029 | 0x7a98, 0x1f04, 0x2e8b, 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b, | ||
1030 | 0x006e, 0x0005, 0x781b, 0x0082, 0x0005, 0x8318, 0x2100, 0xa302, | ||
1031 | 0x0a04, 0x2e44, 0xa284, 0x0080, 0x1904, 0x3a5b, 0x78a0, 0xa005, | ||
1032 | 0x08c8, 0x0804, 0x3a5b, 0x0804, 0x3a30, 0x7054, 0xa04d, 0x789b, | ||
1033 | 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0110, 0x080c, | ||
1034 | 0x2575, 0x7aa8, 0xa294, 0x00ff, 0x784b, 0x0008, 0x78a8, 0xa084, | ||
1035 | 0x00ff, 0xa08a, 0x0005, 0x1a04, 0x3a30, 0x0002, 0x3a30, 0x382f, | ||
1036 | 0x3a30, 0x394a, 0x3d59, 0xa282, 0x0000, 0x1110, 0x080c, 0x2575, | ||
1037 | 0x080c, 0x3a61, 0x781b, 0x0082, 0x0005, 0xa282, 0x0003, 0x1110, | ||
1038 | 0x080c, 0x2575, 0xd4fc, 0x11d0, 0x7060, 0xa005, 0x0110, 0x080c, | ||
1039 | 0x2575, 0x6f14, 0x7772, 0xa7bc, 0x8f00, 0x080c, 0x3b95, 0x6008, | ||
1040 | 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, 0x1db0, 0x080c, | ||
1041 | 0x3a64, 0x7063, 0x0002, 0x701f, 0x0009, 0x0010, 0x080c, 0x3a70, | ||
1042 | 0x781b, 0x0082, 0x0005, 0xa282, 0x0004, 0x0310, 0x080c, 0x2575, | ||
1043 | 0x2300, 0x0002, 0x2f05, 0x309b, 0x30d7, 0xa286, 0x0003, 0x0598, | ||
1044 | 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x71d0, 0xd1b4, 0x0528, 0xd1bc, | ||
1045 | 0x1518, 0x2001, 0x4701, 0x2004, 0xd0c4, 0x11f0, 0x7868, 0xa084, | ||
1046 | 0x00ff, 0x11d0, 0xa282, 0x0002, 0x12b8, 0x00d6, 0x783b, 0x8300, | ||
1047 | 0x781b, 0x0059, 0x70b8, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, | ||
1048 | 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030, | ||
1049 | 0x00de, 0x2001, 0x0000, 0x0058, 0x783b, 0x1300, 0x781b, 0x0057, | ||
1050 | 0x2001, 0x0000, 0x0020, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x7046, | ||
1051 | 0x68a0, 0xd0ec, 0x0118, 0x6008, 0xc08d, 0x600a, 0xa284, 0x000f, | ||
1052 | 0x0002, 0x307c, 0x2f56, 0x2f53, 0x31a7, 0x3232, 0x25c9, 0x2f51, | ||
1053 | 0x2f51, 0x080c, 0x2575, 0x6008, 0xc0d4, 0x600a, 0xd6e4, 0x0120, | ||
1054 | 0x7044, 0xa086, 0x0014, 0x11e8, 0x080c, 0x3f4e, 0x2009, 0x0000, | ||
1055 | 0x6818, 0xd0fc, 0x0108, 0x7044, 0xa086, 0x0014, 0x0168, 0x6818, | ||
1056 | 0xa086, 0x0008, 0x1904, 0x303e, 0x7858, 0xd09c, 0x0904, 0x303e, | ||
1057 | 0x6820, 0xd0ac, 0x0904, 0x303e, 0x681b, 0x0014, 0x2009, 0x0002, | ||
1058 | 0x04a8, 0x7868, 0xa08c, 0x00ff, 0x0588, 0xa186, 0x0008, 0x1158, | ||
1059 | 0x6008, 0xc0a4, 0x600a, 0x080c, 0x3772, 0x0540, 0x080c, 0x37e1, | ||
1060 | 0x080c, 0x3f4e, 0x0060, 0xa186, 0x0028, 0x1500, 0x6018, 0xa005, | ||
1061 | 0x0d78, 0x8001, 0x0d68, 0x8001, 0x0d58, 0x601e, 0x0c48, 0x6820, | ||
1062 | 0xd084, 0x0904, 0x25c9, 0xc084, 0x6822, 0x080c, 0x26bf, 0x7058, | ||
1063 | 0x00c6, 0x2060, 0x6800, 0x6002, 0x00ce, 0x6004, 0x6802, 0xa005, | ||
1064 | 0x2d00, 0x1108, 0x6002, 0x6006, 0x0804, 0x25c9, 0x0016, 0x81ff, | ||
1065 | 0x15f0, 0x7000, 0xa086, 0x0030, 0x05d0, 0x71d0, 0xd1bc, 0x15b8, | ||
1066 | 0xd1b4, 0x11e8, 0x705c, 0xa005, 0x1590, 0x70a0, 0xa086, 0x0001, | ||
1067 | 0x0570, 0x7003, 0x0000, 0x0046, 0x0056, 0x0076, 0x0066, 0x00c6, | ||
1068 | 0x00d6, 0x080c, 0x25f1, 0x00de, 0x00ce, 0x006e, 0x007e, 0x005e, | ||
1069 | 0x004e, 0x71d0, 0xd1b4, 0x11d8, 0x7003, 0x0040, 0x00c0, 0x080c, | ||
1070 | 0x3c5b, 0x11a8, 0x781b, 0x0068, 0x00d6, 0x70b8, 0xa06d, 0x68b4, | ||
1071 | 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, | ||
1072 | 0x71d2, 0x7003, 0x0030, 0x7808, 0xc08d, 0x780a, 0x00de, 0x080c, | ||
1073 | 0x30ff, 0x001e, 0x81ff, 0x0904, 0x303e, 0xa684, 0xdf00, 0x681e, | ||
1074 | 0x682b, 0x0000, 0x6f14, 0xa186, 0x0002, 0x1904, 0x303f, 0x6818, | ||
1075 | 0xa086, 0x0014, 0x1130, 0x2008, 0xd6e4, 0x0118, 0x7868, 0xa08c, | ||
1076 | 0x00ff, 0x080c, 0x3a7a, 0x080c, 0x26ca, 0x6820, 0xd0dc, 0x1578, | ||
1077 | 0x8717, 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xb284, 0x0600, | ||
1078 | 0x0118, 0xa290, 0x4bc0, 0x0010, 0xa290, 0x4c40, 0xa290, 0x0000, | ||
1079 | 0x221c, 0xd3c4, 0x0170, 0x6820, 0xd0e4, 0x0128, 0xa084, 0xefff, | ||
1080 | 0x6822, 0xc3ac, 0x2312, 0x8210, 0x2204, 0xa085, 0x0038, 0x2012, | ||
1081 | 0x8211, 0xd3d4, 0x0138, 0x68a0, 0xd0c4, 0x1120, 0x080c, 0x3167, | ||
1082 | 0x0804, 0x25c9, 0x6008, 0xc08d, 0x600a, 0x0008, 0x692a, 0x6916, | ||
1083 | 0x6818, 0xd0fc, 0x0110, 0x7044, 0x681a, 0xa68c, 0xdf00, 0x691e, | ||
1084 | 0x6410, 0x84ff, 0x0168, 0x2009, 0x4702, 0x2104, 0x8001, 0x200a, | ||
1085 | 0x8421, 0x6412, 0x1128, 0x2021, 0x4704, 0x2404, 0xc0a5, 0x2022, | ||
1086 | 0x6018, 0xa005, 0x0118, 0x8001, 0x601a, 0x1118, 0x6008, 0xc0a4, | ||
1087 | 0x600a, 0x6820, 0xd084, 0x1130, 0x6800, 0xa005, 0x1108, 0x6002, | ||
1088 | 0x6006, 0x0020, 0x7058, 0x2060, 0x6800, 0x6002, 0x2061, 0x4700, | ||
1089 | 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, | ||
1090 | 0x0110, 0x2d02, 0x0008, 0x616e, 0x7200, 0xa286, 0x0030, 0x0158, | ||
1091 | 0xa286, 0x0040, 0x1904, 0x25c9, 0x7003, 0x0002, 0x7048, 0x2068, | ||
1092 | 0x68c4, 0x2060, 0x0005, 0x7003, 0x0002, 0x70b8, 0xa06d, 0x68bc, | ||
1093 | 0x703e, 0x70b4, 0xa065, 0x68c0, 0x7056, 0x2d00, 0x704a, 0xad80, | ||
1094 | 0x0009, 0x7042, 0x0005, 0xa282, 0x0004, 0x0210, 0x080c, 0x2575, | ||
1095 | 0x2200, 0x0002, 0x30a6, 0x30b5, 0x30c1, 0x30b5, 0xa586, 0x1300, | ||
1096 | 0x0160, 0xa586, 0x8300, 0x1d90, 0x7003, 0x0000, 0x6018, 0x8001, | ||
1097 | 0x601a, 0x6008, 0xa084, 0xfbef, 0x600a, 0x7000, 0xa086, 0x0005, | ||
1098 | 0x0128, 0x080c, 0x3a61, 0x781b, 0x0082, 0x0005, 0x781b, 0x0083, | ||
1099 | 0x0005, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, | ||
1100 | 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0128, 0xa186, | ||
1101 | 0x0000, 0x0110, 0x0804, 0x3a30, 0x781b, 0x0083, 0x0005, 0x6820, | ||
1102 | 0xc095, 0x6822, 0x82ff, 0x1118, 0x080c, 0x3a61, 0x0030, 0x8211, | ||
1103 | 0x0110, 0x080c, 0x2575, 0x080c, 0x3a70, 0x781b, 0x0082, 0x0005, | ||
1104 | 0x080c, 0x3c6e, 0x7830, 0xa084, 0x00c0, 0x1170, 0x0016, 0x3208, | ||
1105 | 0xa18c, 0x0800, 0x001e, 0x0118, 0x0104, 0x30fc, 0x0010, 0x0304, | ||
1106 | 0x30fc, 0x791a, 0xa006, 0x0005, 0xa085, 0x0001, 0x0005, 0xa684, | ||
1107 | 0x0060, 0x1130, 0x682f, 0x0000, 0x6833, 0x0000, 0x0804, 0x3166, | ||
1108 | 0xd6dc, 0x1198, 0x68b4, 0xd0dc, 0x1180, 0x6998, 0x6a94, 0x692e, | ||
1109 | 0x6a32, 0x7044, 0xa005, 0x1130, 0x2200, 0xa105, 0x0904, 0x3f4e, | ||
1110 | 0x7047, 0x0015, 0x0804, 0x3f4e, 0x0005, 0xd6ac, 0x01f0, 0xd6f4, | ||
1111 | 0x0130, 0x682f, 0x0000, 0x6833, 0x0000, 0x0804, 0x3f4e, 0x68b4, | ||
1112 | 0xa084, 0x4000, 0xa635, 0xd6f4, 0x1da0, 0x7044, 0xa005, 0x1110, | ||
1113 | 0x7047, 0x0015, 0xd6dc, 0x1128, 0x68b4, 0xd0dc, 0x0110, 0x6ca8, | ||
1114 | 0x6da4, 0x6c2e, 0x6d32, 0x0804, 0x3f4e, 0xd6f4, 0x0130, 0x682f, | ||
1115 | 0x0000, 0x6833, 0x0000, 0x0804, 0x3f4e, 0x68b4, 0xa084, 0x4800, | ||
1116 | 0xa635, 0xd6f4, 0x1da0, 0x7044, 0xa005, 0x1110, 0x7047, 0x0015, | ||
1117 | 0x2408, 0x2510, 0x2700, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, | ||
1118 | 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x1110, 0x0804, 0x3f4e, | ||
1119 | 0x7000, 0xa086, 0x0006, 0x0110, 0x0804, 0x3f4e, 0x0005, 0x6946, | ||
1120 | 0x6008, 0xc0cd, 0xd3cc, 0x0108, 0xc08d, 0x600a, 0x6818, 0x683a, | ||
1121 | 0x681b, 0x0006, 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, | ||
1122 | 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, | ||
1123 | 0x6897, 0x0000, 0x689b, 0x0020, 0x7000, 0x0002, 0x25c9, 0x3196, | ||
1124 | 0x3190, 0x318e, 0x318e, 0x318e, 0x318e, 0x318e, 0x080c, 0x2575, | ||
1125 | 0x6820, 0xd084, 0x1118, 0x080c, 0x37c7, 0x0030, 0x7058, 0x2c50, | ||
1126 | 0x2060, 0x6800, 0x6002, 0x2a60, 0xaea0, 0x0017, 0x2404, 0xa005, | ||
1127 | 0x0110, 0x2020, 0x0cd8, 0x2d22, 0x206b, 0x0000, 0x0005, 0x080c, | ||
1128 | 0x37cd, 0x080c, 0x37e1, 0x6008, 0xc0cc, 0x600a, 0x682b, 0x0000, | ||
1129 | 0x789b, 0x000e, 0x6f14, 0x6938, 0x691a, 0x6944, 0x6916, 0x2009, | ||
1130 | 0x0000, 0xae86, 0x4740, 0x0110, 0x2009, 0x0001, 0x080c, 0x431f, | ||
1131 | 0xd6dc, 0x01c8, 0x691c, 0xc1ed, 0x691e, 0x6828, 0xa082, 0x000e, | ||
1132 | 0x0290, 0x6848, 0xa084, 0x000f, 0xa086, 0x000b, 0x1160, 0x685c, | ||
1133 | 0xa086, 0x0047, 0x1140, 0x2001, 0x4701, 0x2004, 0xd0ac, 0x1118, | ||
1134 | 0x2700, 0x080c, 0x249e, 0x6818, 0xd0fc, 0x0140, 0x681b, 0x0000, | ||
1135 | 0x7868, 0xa08c, 0x00ff, 0x0110, 0x681b, 0x001e, 0xaea0, 0x0017, | ||
1136 | 0x6800, 0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060, | ||
1137 | 0x6000, 0xd0a4, 0x0580, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, | ||
1138 | 0x0020, 0x00d6, 0x00f6, 0x0156, 0x0146, 0x2079, 0x4700, 0x080c, | ||
1139 | 0x1bb2, 0x014e, 0x015e, 0x00fe, 0x70c8, 0x2010, 0x2009, 0x0101, | ||
1140 | 0x0026, 0x2204, 0xa06d, 0x0140, 0x6814, 0xa706, 0x0110, 0x6800, | ||
1141 | 0x0cc8, 0x6820, 0xc0d5, 0x6822, 0x002e, 0x8210, 0x8109, 0x1d80, | ||
1142 | 0x00de, 0x7063, 0x0003, 0x707b, 0x0000, 0x7772, 0x707f, 0x000f, | ||
1143 | 0x71d0, 0xc1c4, 0x71d2, 0x6818, 0xa086, 0x0002, 0x1138, 0x6817, | ||
1144 | 0x0000, 0x682b, 0x0000, 0x681c, 0xc0ec, 0x681e, 0x080c, 0x1dbf, | ||
1145 | 0x0804, 0x25c9, 0x7cd8, 0x7ddc, 0x7fd0, 0x080c, 0x30ff, 0x682b, | ||
1146 | 0x0000, 0x789b, 0x000e, 0x6f14, 0x080c, 0x3c72, 0xa08c, 0x00ff, | ||
1147 | 0x6916, 0x6818, 0xd0fc, 0x0110, 0x7044, 0x681a, 0xa68c, 0xdf00, | ||
1148 | 0x691e, 0x7063, 0x0000, 0x0804, 0x25c9, 0x7000, 0xa005, 0x1110, | ||
1149 | 0x0804, 0x25c9, 0xa006, 0x080c, 0x3f4e, 0x6920, 0xd1ac, 0x1110, | ||
1150 | 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, | ||
1151 | 0xa084, 0x00ff, 0x6822, 0x7000, 0x0002, 0x25c9, 0x326f, 0x326f, | ||
1152 | 0x3272, 0x3272, 0x3272, 0x326d, 0x326d, 0x080c, 0x2575, 0x6818, | ||
1153 | 0x0804, 0x2f3b, 0x6008, 0xc0a4, 0x600a, 0x6817, 0x0000, 0x0804, | ||
1154 | 0x3795, 0x2300, 0x0002, 0x327e, 0x3280, 0x32ce, 0x080c, 0x2575, | ||
1155 | 0xd6fc, 0x1904, 0x2d5b, 0x7000, 0xa00d, 0x0002, 0x25c9, 0x3290, | ||
1156 | 0x3290, 0x32ba, 0x3290, 0x32cb, 0x328e, 0x328e, 0x080c, 0x2575, | ||
1157 | 0xa684, 0x0060, 0x0538, 0xa086, 0x0060, 0x1510, 0xc6ac, 0xc6f4, | ||
1158 | 0xc6ed, 0x7e5a, 0x6eb6, 0x681c, 0xc0ac, 0x681e, 0xa186, 0x0002, | ||
1159 | 0x0148, 0x080c, 0x3f4e, 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, | ||
1160 | 0x4235, 0x0010, 0x080c, 0x4208, 0x781b, 0x0083, 0x71d0, 0xd1b4, | ||
1161 | 0x1904, 0x25c6, 0x70a0, 0xa086, 0x0001, 0x1904, 0x260d, 0x0005, | ||
1162 | 0xd6ec, 0x09f0, 0x6818, 0xd0fc, 0x0170, 0xd6f4, 0x1130, 0x681b, | ||
1163 | 0x0015, 0x781b, 0x0083, 0x0804, 0x25c6, 0x681b, 0x0007, 0x682f, | ||
1164 | 0x0000, 0x6833, 0x0000, 0x080c, 0x3c17, 0x0005, 0x080c, 0x2575, | ||
1165 | 0x2300, 0x0002, 0x32d7, 0x32f9, 0x3351, 0x080c, 0x2575, 0x7000, | ||
1166 | 0x0002, 0x32e1, 0x32e3, 0x32ea, 0x32e1, 0x32e1, 0x32e1, 0x32e1, | ||
1167 | 0x32e1, 0x080c, 0x2575, 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, | ||
1168 | 0x4235, 0x0010, 0x080c, 0x4208, 0x681c, 0xc0b4, 0x681e, 0x70d0, | ||
1169 | 0xd0b4, 0x1904, 0x25c6, 0x70a0, 0xa086, 0x0001, 0x1904, 0x260d, | ||
1170 | 0x0005, 0xd6fc, 0x1904, 0x3341, 0x7000, 0xa00d, 0x0002, 0x25c9, | ||
1171 | 0x330f, 0x3309, 0x3339, 0x330f, 0x333e, 0x3307, 0x3307, 0x080c, | ||
1172 | 0x2575, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, | ||
1173 | 0x0060, 0x0538, 0xa086, 0x0060, 0x1510, 0xa6b4, 0xbfbf, 0xc6ed, | ||
1174 | 0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0148, 0x080c, 0x3f4e, 0x69ac, | ||
1175 | 0x68b0, 0xa115, 0x0118, 0x080c, 0x4235, 0x0010, 0x080c, 0x4208, | ||
1176 | 0x781b, 0x0083, 0x681c, 0xc0b4, 0x681e, 0x71d0, 0xd1b4, 0x1904, | ||
1177 | 0x25c6, 0x70a0, 0xa086, 0x0001, 0x1904, 0x260d, 0x0005, 0xd6ec, | ||
1178 | 0x09f0, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x0007, 0x781b, 0x00fb, | ||
1179 | 0x0005, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, | ||
1180 | 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b, 0x0083, | ||
1181 | 0x0005, 0xd6dc, 0x0130, 0x782b, 0x3009, 0x781b, 0x0083, 0x0804, | ||
1182 | 0x25c6, 0x7884, 0xc0ac, 0x7886, 0x78e4, 0xa084, 0x0008, 0x1150, | ||
1183 | 0xa484, 0x0200, 0x0108, 0xc6f5, 0xc6dd, 0x7e5a, 0x781b, 0x0083, | ||
1184 | 0x0804, 0x25c6, 0x6820, 0xc095, 0x6822, 0x080c, 0x3c02, 0xc6dd, | ||
1185 | 0x080c, 0x3a61, 0x781b, 0x0082, 0x0804, 0x25c6, 0x2300, 0x0002, | ||
1186 | 0x337b, 0x337d, 0x337f, 0x080c, 0x2575, 0x0804, 0x3a5b, 0x7d98, | ||
1187 | 0xd6d4, 0x15a8, 0x79e4, 0xd1ac, 0x0130, 0x78ec, 0xa084, 0x0003, | ||
1188 | 0x0110, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, | ||
1189 | 0xfffb, 0x785a, 0x7d9a, 0x79e4, 0xd1ac, 0x0120, 0x78ec, 0xa084, | ||
1190 | 0x0003, 0x1120, 0x2001, 0x0014, 0x0804, 0x2f3b, 0x7884, 0xd0fc, | ||
1191 | 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, | ||
1192 | 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, | ||
1193 | 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x04c2, 0x7a90, | ||
1194 | 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, 0x0568, 0x789b, | ||
1195 | 0x0080, 0x7ba8, 0xa384, 0x0001, 0x11d0, 0x7ba8, 0x7ba8, 0xa386, | ||
1196 | 0x0004, 0x1118, 0x2009, 0xffdf, 0x0058, 0xa386, 0x0001, 0x1118, | ||
1197 | 0x2009, 0xfff7, 0x0028, 0xa386, 0x0003, 0x1148, 0x2009, 0xffef, | ||
1198 | 0x00c6, 0x7054, 0x2060, 0x6004, 0xa104, 0x6006, 0x00ce, 0x789b, | ||
1199 | 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, | ||
1200 | 0x6920, 0xa18c, 0xecff, 0x6922, 0x7d9a, 0x0804, 0x3c0b, 0x2bd1, | ||
1201 | 0x2bda, 0x33f9, 0x33ff, 0x33f7, 0x33f7, 0x3c0b, 0x3c0b, 0x080c, | ||
1202 | 0x2575, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0804, 0x3c11, 0x6920, | ||
1203 | 0xa18c, 0xfcff, 0x6922, 0x0804, 0x3c0b, 0x79e4, 0xa184, 0x0030, | ||
1204 | 0x0120, 0x78ec, 0xa084, 0x0003, 0x1570, 0x7000, 0xa086, 0x0004, | ||
1205 | 0x1190, 0x7060, 0xa086, 0x0002, 0x1130, 0x2011, 0x0002, 0x2019, | ||
1206 | 0x0000, 0x0804, 0x2a85, 0x7060, 0xa086, 0x0006, 0x0db0, 0x7060, | ||
1207 | 0xa086, 0x0004, 0x0d90, 0x7000, 0xa086, 0x0000, 0x0904, 0x25c6, | ||
1208 | 0x6920, 0xa184, 0x0420, 0x0128, 0xc1d4, 0x6922, 0x6818, 0x0804, | ||
1209 | 0x2f3b, 0x6818, 0xa08e, 0x0002, 0x0120, 0xc0fd, 0x681a, 0x2001, | ||
1210 | 0x0014, 0x0804, 0x2f3b, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, | ||
1211 | 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, | ||
1212 | 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, | ||
1213 | 0x0010, 0x2001, 0x0001, 0x0002, 0x3c0b, 0x3c0b, 0x345c, 0x3c0b, | ||
1214 | 0x3c4f, 0x3c4f, 0x3c0b, 0x3c0b, 0xd6bc, 0x0570, 0x7180, 0x81ff, | ||
1215 | 0x0558, 0xa182, 0x000d, 0x1318, 0x7083, 0x0000, 0x0028, 0xa182, | ||
1216 | 0x000c, 0x7082, 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa, 0x0156, | ||
1217 | 0x0136, 0x0146, 0x7084, 0x8114, 0xa210, 0x7286, 0xa080, 0x000b, | ||
1218 | 0xad00, 0x2098, 0xb284, 0x0600, 0x0118, 0x20a1, 0x022b, 0x0010, | ||
1219 | 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x014e, | ||
1220 | 0x013e, 0x015e, 0x0804, 0x3c11, 0xd6d4, 0x1904, 0x34cf, 0x6820, | ||
1221 | 0xd084, 0x0904, 0x3c11, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0120, | ||
1222 | 0xa086, 0x0060, 0x1108, 0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b, | ||
1223 | 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a, | ||
1224 | 0x78aa, 0x8008, 0x810c, 0x0904, 0x37f6, 0xa18c, 0x00f8, 0x1904, | ||
1225 | 0x37f6, 0x0156, 0x0136, 0x0146, 0x0016, 0x20a1, 0x012b, 0x3208, | ||
1226 | 0xa18c, 0x0600, 0x0110, 0x20a1, 0x022b, 0x001e, 0x789b, 0x0000, | ||
1227 | 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e, | ||
1228 | 0x015e, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0804, 0x3c11, 0x6818, | ||
1229 | 0xd0fc, 0x0110, 0x681b, 0x0008, 0x080c, 0x3a61, 0x781b, 0x00ed, | ||
1230 | 0x0005, 0x2300, 0x0002, 0x34e0, 0x359d, 0x34de, 0x080c, 0x2575, | ||
1231 | 0x7cd8, 0x7ddc, 0x7fd0, 0x82ff, 0x1528, 0x7200, 0xa286, 0x0003, | ||
1232 | 0x0904, 0x2f09, 0x71d0, 0xd1bc, 0x11f8, 0xd1b4, 0x01e8, 0x2001, | ||
1233 | 0x4701, 0x2004, 0xd0c4, 0x11c0, 0x00d6, 0x783b, 0x8800, 0x781b, | ||
1234 | 0x0059, 0x70b8, 0xa06d, 0x68b4, 0xc0a5, 0x785a, 0x6894, 0x78d6, | ||
1235 | 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030, | ||
1236 | 0x00de, 0x0030, 0x7200, 0x0020, 0x783b, 0x1800, 0x781b, 0x0057, | ||
1237 | 0xa284, 0x000f, 0x0002, 0x3588, 0x3545, 0x351d, 0x2f38, 0x351b, | ||
1238 | 0x3588, 0x351b, 0x351b, 0x080c, 0x2575, 0x681c, 0xd0ec, 0x0118, | ||
1239 | 0x6008, 0xc08d, 0x600a, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, | ||
1240 | 0xa005, 0x1108, 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084, | ||
1241 | 0x000e, 0x1120, 0x71c8, 0xa188, 0x0100, 0x0028, 0x7030, 0x68ba, | ||
1242 | 0x713c, 0x70c8, 0xa108, 0x2104, 0x6802, 0x2d0a, 0x715a, 0xd6dc, | ||
1243 | 0x1120, 0xc6fc, 0x6eb6, 0x0804, 0x3588, 0x6eb6, 0xa684, 0x0060, | ||
1244 | 0x1120, 0xa684, 0x7fff, 0x68b6, 0x04d8, 0xd6dc, 0x1150, 0xa684, | ||
1245 | 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x080c, 0x3f4e, | ||
1246 | 0x0478, 0xd6ac, 0x0140, 0xa006, 0x080c, 0x3f4e, 0x2408, 0x2510, | ||
1247 | 0x69aa, 0x6aa6, 0x0068, 0x2408, 0x2510, 0x2700, 0x8007, 0xa084, | ||
1248 | 0x007f, 0xa108, 0xa291, 0x0000, 0x69aa, 0x6aa6, 0x080c, 0x3f4e, | ||
1249 | 0xd6fc, 0x01b0, 0xa684, 0x7fff, 0x68b6, 0x2510, 0x2408, 0xd6ac, | ||
1250 | 0x1138, 0x2700, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, | ||
1251 | 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, | ||
1252 | 0x7000, 0xa086, 0x0030, 0x1904, 0x25c9, 0x7003, 0x0002, 0x70b8, | ||
1253 | 0xa06d, 0x68bc, 0x703e, 0x70b4, 0xa065, 0x68c0, 0x7056, 0x2d00, | ||
1254 | 0x704a, 0xad80, 0x0009, 0x7042, 0x0005, 0xa586, 0x8800, 0x1148, | ||
1255 | 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, | ||
1256 | 0x600a, 0x0804, 0x3a5b, 0x7043, 0x0000, 0xa282, 0x0006, 0x0310, | ||
1257 | 0x080c, 0x2575, 0x2300, 0x0002, 0x35b7, 0x35c8, 0x35d2, 0x2200, | ||
1258 | 0x0002, 0x35bf, 0x3a5b, 0x35c1, 0x35bf, 0x3603, 0x3651, 0x080c, | ||
1259 | 0x2575, 0x7a80, 0xa294, 0x0f00, 0x080c, 0x36a5, 0x0804, 0x3a30, | ||
1260 | 0x00c1, 0x0002, 0x3a5b, 0x35d0, 0x35d0, 0x3603, 0x35d0, 0x3a5b, | ||
1261 | 0x080c, 0x2575, 0x0071, 0x0002, 0x35dc, 0x35da, 0x35da, 0x35dc, | ||
1262 | 0x35da, 0x35dc, 0x080c, 0x2575, 0x080c, 0x3a70, 0x781b, 0x0082, | ||
1263 | 0x0005, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c, 0x37e1, 0x0010, | ||
1264 | 0x080c, 0x3f4e, 0x6008, 0xa084, 0xfbef, 0x600a, 0x0020, 0x7000, | ||
1265 | 0xa086, 0x0003, 0x0da8, 0x7003, 0x0005, 0x2001, 0x8ee0, 0xae8e, | ||
1266 | 0x4740, 0x0110, 0x2001, 0x8f12, 0x2068, 0x704a, 0xad80, 0x0009, | ||
1267 | 0x7042, 0x2200, 0x0005, 0x7000, 0xa086, 0x0002, 0x1158, 0x70d0, | ||
1268 | 0xc0b5, 0x70d2, 0x2c00, 0x70b6, 0x2d00, 0x70ba, 0x0038, 0x080c, | ||
1269 | 0x3f4e, 0x0020, 0x7000, 0xa086, 0x0003, 0x0dc8, 0x7003, 0x0001, | ||
1270 | 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, | ||
1271 | 0xa215, 0x2069, 0x8dc0, 0xb284, 0x0600, 0x1118, 0xc2fd, 0x2069, | ||
1272 | 0x8ed0, 0x2d04, 0x2d08, 0x715a, 0xa06d, 0x0128, 0x6814, 0xa206, | ||
1273 | 0x0120, 0x6800, 0x0cb8, 0x080c, 0x36a5, 0x6eb4, 0x7e5a, 0x6920, | ||
1274 | 0xa184, 0x0c00, 0x0904, 0x36cb, 0x7060, 0xa086, 0x0006, 0x1128, | ||
1275 | 0x7070, 0xa206, 0x1110, 0x7062, 0x707a, 0x681b, 0x0005, 0xc1ad, | ||
1276 | 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x080c, 0x3a67, 0x0804, | ||
1277 | 0x36cb, 0x7200, 0xa286, 0x0002, 0x1158, 0x70d0, 0xc0b5, 0x70d2, | ||
1278 | 0x2c00, 0x70b6, 0x2d00, 0x70ba, 0x0030, 0x080c, 0x3f4e, 0x0018, | ||
1279 | 0xa286, 0x0003, 0x0dd0, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, | ||
1280 | 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0xae86, 0x4740, | ||
1281 | 0x0108, 0xc2fd, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0x2118, 0x70c8, | ||
1282 | 0xa168, 0x2d04, 0x2d08, 0x715a, 0xa06d, 0x0128, 0x6814, 0xa206, | ||
1283 | 0x0118, 0x6800, 0x0cb8, 0x0409, 0x6eb4, 0x6920, 0xa184, 0x0c00, | ||
1284 | 0x0904, 0x36cb, 0xd0dc, 0x0178, 0x7060, 0xa086, 0x0004, 0x1140, | ||
1285 | 0x7070, 0xa206, 0x1128, 0x7074, 0xa306, 0x1110, 0x7062, 0x707a, | ||
1286 | 0x080c, 0x3a6d, 0x0480, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, | ||
1287 | 0x080c, 0x3a67, 0x707b, 0x0000, 0x0430, 0x7003, 0x0005, 0xb284, | ||
1288 | 0x0600, 0x0118, 0x2001, 0x8ee0, 0x0010, 0x2001, 0x8f12, 0x2068, | ||
1289 | 0x704a, 0x0156, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x1f04, | ||
1290 | 0x36b4, 0x015e, 0xb284, 0x0600, 0x0110, 0xc2fc, 0x0008, 0xc2fd, | ||
1291 | 0x6a16, 0xad80, 0x0009, 0x7042, 0x68b7, 0x0700, 0x6823, 0x0800, | ||
1292 | 0x6827, 0x0003, 0x0005, 0xc6ec, 0xa6ac, 0x0060, 0x0904, 0x3712, | ||
1293 | 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x11e0, 0x7bd2, 0x7bda, | ||
1294 | 0x7cd6, 0x7cde, 0xa586, 0x0060, 0x05c8, 0xd6f4, 0x1108, 0xc6ed, | ||
1295 | 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0083, 0xd69c, 0x0128, 0x2009, | ||
1296 | 0x0082, 0x2019, 0x0000, 0x2320, 0x791a, 0xd6ec, 0x0588, 0x080c, | ||
1297 | 0x4208, 0x0470, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, | ||
1298 | 0x01f8, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x1108, | ||
1299 | 0xc6ed, 0xc6f4, 0x7e5a, 0x2011, 0x0083, 0xd69c, 0x0128, 0x2011, | ||
1300 | 0x0082, 0x2019, 0x0000, 0x2320, 0x7a1a, 0xd6ec, 0x0188, 0x080c, | ||
1301 | 0x4235, 0x0070, 0x2019, 0x0000, 0x2320, 0x0010, 0xa6b4, 0xb7ff, | ||
1302 | 0x7e5a, 0x2009, 0x0083, 0xd69c, 0x0110, 0x2009, 0x0082, 0x791a, | ||
1303 | 0x68c0, 0x7056, 0x2d00, 0x704a, 0x68c4, 0x2060, 0x71d0, 0x2001, | ||
1304 | 0x4701, 0x2004, 0xd0c4, 0x15c8, 0x70d4, 0xa02d, 0x01b8, 0xd1bc, | ||
1305 | 0x0548, 0x7a80, 0xa294, 0x0f00, 0x70d8, 0xa206, 0x0118, 0x78e0, | ||
1306 | 0xa504, 0x1558, 0x70d6, 0xc1bc, 0x71d2, 0x0438, 0x2031, 0x0001, | ||
1307 | 0x852c, 0x0218, 0x8633, 0x8210, 0x0cd8, 0x0005, 0x7de0, 0xa594, | ||
1308 | 0xff00, 0x0130, 0x2011, 0x0008, 0x852f, 0x0c81, 0x8637, 0x0008, | ||
1309 | 0x0c69, 0x8217, 0x7880, 0xa084, 0x0f00, 0xa206, 0x0170, 0x72da, | ||
1310 | 0x76d6, 0x0058, 0x7a80, 0xa294, 0x0f00, 0x70d8, 0xa236, 0x0dc0, | ||
1311 | 0x78e0, 0xa534, 0x0da8, 0xc1bd, 0x71d2, 0xd1b4, 0x1904, 0x25c6, | ||
1312 | 0x2300, 0xa405, 0x0904, 0x25c6, 0x70a0, 0xa086, 0x0001, 0x1904, | ||
1313 | 0x260d, 0x0005, 0x6020, 0xa005, 0x0150, 0x8001, 0x6022, 0x6008, | ||
1314 | 0xa085, 0x0008, 0x600a, 0x700f, 0x0100, 0x702c, 0x6026, 0x0005, | ||
1315 | 0xa006, 0x080c, 0x3f4e, 0x7000, 0xa086, 0x0002, 0x0120, 0x7060, | ||
1316 | 0xa086, 0x0005, 0x1150, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b, | ||
1317 | 0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, | ||
1318 | 0x0002, 0x25c9, 0x37a6, 0x37a3, 0x37c3, 0x37af, 0x25c9, 0x37a1, | ||
1319 | 0x37a1, 0x080c, 0x2575, 0x0449, 0x0411, 0x0028, 0x0431, 0x7058, | ||
1320 | 0x2060, 0x6800, 0x6002, 0x080c, 0x1dbf, 0x0804, 0x25c9, 0x7060, | ||
1321 | 0x7063, 0x0000, 0x707f, 0x0000, 0x0002, 0x37bf, 0x37bf, 0x37bd, | ||
1322 | 0x37bd, 0x37bd, 0x37bf, 0x37bd, 0x37bf, 0x0804, 0x2a9a, 0x7063, | ||
1323 | 0x0000, 0x0804, 0x25c9, 0x681b, 0x0000, 0x0804, 0x31a7, 0x6800, | ||
1324 | 0xa005, 0x1108, 0x6002, 0x6006, 0x0005, 0x6410, 0x84ff, 0x0168, | ||
1325 | 0x2009, 0x4702, 0x2104, 0x8001, 0x200a, 0x8421, 0x6412, 0x1128, | ||
1326 | 0x2021, 0x4704, 0x2404, 0xc0a5, 0x2022, 0x6008, 0xc0a4, 0x600a, | ||
1327 | 0x0005, 0x6018, 0xa005, 0x0110, 0x8001, 0x601a, 0x0005, 0x080c, | ||
1328 | 0x3c6e, 0x681b, 0x0018, 0x0490, 0x080c, 0x3c6e, 0x681b, 0x0019, | ||
1329 | 0x0468, 0x080c, 0x3c6e, 0x681b, 0x001a, 0x0440, 0x080c, 0x3c6e, | ||
1330 | 0x681b, 0x0003, 0x0418, 0x7770, 0x080c, 0x3b95, 0x7174, 0xa18c, | ||
1331 | 0x00ff, 0x3210, 0xa294, 0x0600, 0x0118, 0xa1e8, 0x8cc0, 0x0010, | ||
1332 | 0xa1e8, 0x8dd0, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x1118, 0x707a, | ||
1333 | 0x0804, 0x25c9, 0x6814, 0x7270, 0xa206, 0x0110, 0x6800, 0x0c98, | ||
1334 | 0x6800, 0x200a, 0x681b, 0x0005, 0x707b, 0x0000, 0x080c, 0x37cd, | ||
1335 | 0x6820, 0xd084, 0x1110, 0x080c, 0x37c7, 0x080c, 0x37e1, 0x681f, | ||
1336 | 0x0000, 0x6823, 0x0020, 0x080c, 0x1dbf, 0x0804, 0x25c9, 0xa282, | ||
1337 | 0x0003, 0x1904, 0x3a35, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, | ||
1338 | 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x05b0, 0xc1c4, 0x6922, | ||
1339 | 0xa6b4, 0x00ff, 0x0530, 0xa682, 0x0018, 0x0218, 0x0110, 0x2031, | ||
1340 | 0x0018, 0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b, 0x2041, | ||
1341 | 0x0000, 0x080c, 0x3aee, 0x0118, 0x080c, 0x391a, 0x00a0, 0x080c, | ||
1342 | 0x3aba, 0x080c, 0x3917, 0x6920, 0xc1c5, 0x6922, 0x7e58, 0xc695, | ||
1343 | 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b, 0x0082, | ||
1344 | 0x0005, 0x080c, 0x3917, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, | ||
1345 | 0x0005, 0x781b, 0x0083, 0x0005, 0x00c6, 0x7054, 0x2060, 0x6100, | ||
1346 | 0xd1e4, 0x0598, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x0018, | ||
1347 | 0x0218, 0x0110, 0x2011, 0x0018, 0x2600, 0xa202, 0x1208, 0x2230, | ||
1348 | 0xa686, 0x0010, 0x1108, 0x8630, 0x6208, 0xa294, 0x00ff, 0x78ec, | ||
1349 | 0xd0e4, 0x0130, 0xa282, 0x000a, 0x1240, 0x2011, 0x000a, 0x0028, | ||
1350 | 0xa282, 0x000c, 0x1210, 0x2011, 0x000c, 0x2200, 0xa502, 0x1208, | ||
1351 | 0x2228, 0x080c, 0x3abe, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, | ||
1352 | 0x3aee, 0x0118, 0x080c, 0x391a, 0x0020, 0x080c, 0x3aba, 0x080c, | ||
1353 | 0x3917, 0x7858, 0xc095, 0x785a, 0x00ce, 0x781b, 0x0082, 0x0005, | ||
1354 | 0x00c6, 0x2960, 0x6000, 0xd0e4, 0x1188, 0xd0b4, 0x1150, 0x6010, | ||
1355 | 0xa084, 0x000f, 0x1130, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x00ce, | ||
1356 | 0x0005, 0x2011, 0x0032, 0x2019, 0x0000, 0x00f0, 0x68a0, 0xd0cc, | ||
1357 | 0x1dc0, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4, 0x0130, 0xa282, | ||
1358 | 0x000b, 0x1218, 0x2011, 0x000a, 0x0028, 0xa282, 0x000c, 0x1210, | ||
1359 | 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x0018, | ||
1360 | 0x0218, 0x0110, 0x2019, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, | ||
1361 | 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, | ||
1362 | 0x6822, 0x080c, 0x3a7a, 0x00ce, 0x0005, 0x00c6, 0x2960, 0x6104, | ||
1363 | 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, 0x0000, 0x0000, | ||
1364 | 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, | ||
1365 | 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, 0x00ce, 0x0005, 0xa006, | ||
1366 | 0x2030, 0x2010, 0x00c6, 0x7154, 0x2160, 0x2018, 0x2008, 0xa084, | ||
1367 | 0xffe0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, | ||
1368 | 0xa084, 0x7770, 0xa18c, 0x000f, 0xa105, 0x2029, 0x4705, 0x252c, | ||
1369 | 0xd5cc, 0x0140, 0xd3a4, 0x0110, 0xa085, 0x0800, 0xd3fc, 0x0110, | ||
1370 | 0xa085, 0x8080, 0x78a6, 0x6016, 0x788a, 0xa6b4, 0x001f, 0x8637, | ||
1371 | 0x8204, 0x8004, 0xa605, 0x600e, 0x6004, 0xa084, 0xffd5, 0x6006, | ||
1372 | 0x00ce, 0x0005, 0xa282, 0x0002, 0x1904, 0x3a3f, 0x7aa8, 0x6920, | ||
1373 | 0xc1bd, 0x6922, 0xd1cc, 0x0568, 0xc1cc, 0x6922, 0xa294, 0x00ff, | ||
1374 | 0xa282, 0x0002, 0x1a04, 0x3a30, 0x080c, 0x39c1, 0x080c, 0x3917, | ||
1375 | 0xa980, 0x0001, 0x200c, 0x080c, 0x3b91, 0x080c, 0x38b8, 0x88ff, | ||
1376 | 0x0178, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, | ||
1377 | 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b, 0x0082, 0x0005, | ||
1378 | 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, | ||
1379 | 0x0005, 0xa282, 0x0002, 0x1218, 0xa284, 0x0001, 0x0140, 0x7154, | ||
1380 | 0xa188, 0x0000, 0x210c, 0xd1ec, 0x1110, 0x2011, 0x0000, 0x080c, | ||
1381 | 0x3aac, 0x0479, 0x080c, 0x3917, 0x7858, 0xc095, 0x785a, 0x781b, | ||
1382 | 0x0082, 0x0005, 0x00c6, 0x0026, 0x2960, 0x6000, 0x2011, 0x0001, | ||
1383 | 0xd0ec, 0x1158, 0xd0bc, 0x1138, 0x6014, 0xd0b4, 0x1120, 0xc1a4, | ||
1384 | 0x6106, 0xa006, 0x0088, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, | ||
1385 | 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x080c, 0x3a7a, | ||
1386 | 0x6820, 0xa085, 0x0200, 0x6822, 0x002e, 0x00ce, 0x0005, 0x8807, | ||
1387 | 0xa715, 0x00c6, 0x2009, 0x0000, 0x7054, 0x2060, 0x82ff, 0x0110, | ||
1388 | 0x2009, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, | ||
1389 | 0xff9f, 0xa105, 0xc0ec, 0xd0b4, 0x1108, 0xc0ed, 0x6100, 0xd1f4, | ||
1390 | 0x0110, 0xa085, 0x0020, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084, | ||
1391 | 0xffef, 0x6006, 0x00ce, 0x0005, 0x0006, 0x7000, 0xa086, 0x0003, | ||
1392 | 0x0110, 0x000e, 0x0010, 0x000e, 0x0498, 0xd6ac, 0x0588, 0x7888, | ||
1393 | 0xa084, 0x0040, 0x0568, 0x7bb8, 0x8307, 0xa084, 0x007f, 0x1518, | ||
1394 | 0x8207, 0xa084, 0x00ff, 0x0904, 0x3a57, 0xa09a, 0x0004, 0x1a04, | ||
1395 | 0x3a57, 0xd6f4, 0x11d0, 0x79d8, 0x7adc, 0xa108, 0xa291, 0x0000, | ||
1396 | 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x080c, 0x42e8, 0x781b, 0x0080, | ||
1397 | 0xb284, 0x0600, 0x0118, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001, | ||
1398 | 0x080c, 0x419a, 0x0005, 0x080c, 0x2575, 0x781b, 0x0080, 0x0005, | ||
1399 | 0x781b, 0x0083, 0x0005, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, | ||
1400 | 0x0000, 0xa006, 0x2010, 0x080c, 0x391a, 0x080c, 0x39bf, 0x7e58, | ||
1401 | 0x080c, 0x3a73, 0x781b, 0x0082, 0x0005, 0x0cd1, 0x6820, 0xc0c4, | ||
1402 | 0x6822, 0x00c6, 0x7054, 0x2060, 0x080c, 0x3944, 0x00b0, 0x0c81, | ||
1403 | 0x6820, 0xc0cc, 0x6822, 0x00c6, 0x7054, 0x2060, 0x080c, 0x39de, | ||
1404 | 0x0060, 0x0c31, 0x6820, 0xa084, 0xecff, 0x6822, 0x00c6, 0x7054, | ||
1405 | 0x2060, 0x6004, 0xa084, 0xffc5, 0x6006, 0x00ce, 0x0005, 0x0049, | ||
1406 | 0x781b, 0x0082, 0x0005, 0x6827, 0x0002, 0x0049, 0x781b, 0x0082, | ||
1407 | 0x0005, 0x2001, 0x0005, 0x0088, 0x2001, 0x000c, 0x0070, 0x6820, | ||
1408 | 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0040, 0x2001, 0x000d, 0x0028, | ||
1409 | 0x2001, 0x0009, 0x0010, 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa, | ||
1410 | 0xc69d, 0x7e5a, 0x70d0, 0xd0b4, 0x0168, 0xc0b4, 0x70d2, 0x00c6, | ||
1411 | 0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, | ||
1412 | 0x601a, 0x00ce, 0x0005, 0x0076, 0x873f, 0xa7bc, 0x000f, 0x873b, | ||
1413 | 0x873b, 0x8703, 0xa0e0, 0x4bc0, 0xae8e, 0x4740, 0x0110, 0xa0e0, | ||
1414 | 0x4c40, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x7fe0, 0x78ae, | ||
1415 | 0x6012, 0x79a4, 0xa184, 0x773f, 0x78a6, 0x6016, 0x6004, 0xa085, | ||
1416 | 0x0038, 0x6006, 0x007e, 0x0005, 0x789b, 0x0080, 0x78ab, 0x0001, | ||
1417 | 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, | ||
1418 | 0x0004, 0x0800, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, 0x0080, | ||
1419 | 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, | ||
1420 | 0x789b, 0x0060, 0x78ab, 0x0005, 0x0804, 0x3a7a, 0x0156, 0x8007, | ||
1421 | 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, | ||
1422 | 0xa18c, 0xffe0, 0x2021, 0x3b7a, 0x2019, 0x0011, 0x20a9, 0x000e, | ||
1423 | 0x2011, 0x0032, 0x2404, 0xa084, 0xffe0, 0xa106, 0x0128, 0x8420, | ||
1424 | 0x2300, 0xa210, 0x1f04, 0x3ae2, 0x015e, 0x0005, 0x0156, 0x0804, | ||
1425 | 0x3b30, 0x2021, 0x3b88, 0x20a9, 0x0009, 0x2011, 0x0029, 0xa582, | ||
1426 | 0x0028, 0x0550, 0x8420, 0x95a9, 0x2011, 0x0033, 0xa582, 0x0033, | ||
1427 | 0x0618, 0x8420, 0x95a9, 0x2019, 0x000a, 0x2011, 0x0065, 0x2200, | ||
1428 | 0xa502, 0x02d0, 0x8420, 0x2300, 0xa210, 0x1f04, 0x3b07, 0x015e, | ||
1429 | 0x0088, 0x2021, 0x3b7a, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, | ||
1430 | 0x0033, 0x2200, 0xa502, 0x0240, 0x8420, 0x2300, 0xa210, 0x1f04, | ||
1431 | 0x3b19, 0x015e, 0xa006, 0x0005, 0x8211, 0x015e, 0xa582, 0x0064, | ||
1432 | 0x1220, 0x7808, 0xa085, 0x0070, 0x780a, 0x2404, 0xa005, 0x0005, | ||
1433 | 0xa886, 0x0002, 0x01e8, 0x2021, 0x3b66, 0x20a9, 0x000d, 0x2011, | ||
1434 | 0x0028, 0xa582, 0x0028, 0x0d48, 0x8420, 0x2019, 0x0019, 0x2011, | ||
1435 | 0x0033, 0x2200, 0xa502, 0x0e00, 0x8420, 0x2300, 0xa210, 0x1f04, | ||
1436 | 0x3b41, 0x015e, 0x2011, 0x0184, 0xa582, 0x0185, 0x0ab0, 0x0890, | ||
1437 | 0x2021, 0x3b75, 0x20a9, 0x0003, 0x2011, 0x0024, 0xa586, 0x0024, | ||
1438 | 0x0960, 0x8420, 0x2011, 0x0028, 0xa586, 0x0028, 0x0930, 0x8420, | ||
1439 | 0x2019, 0x0019, 0x2011, 0x0033, 0x0804, 0x3b19, 0x1021, 0x2202, | ||
1440 | 0x3403, 0x4604, 0x5805, 0x6a06, 0x7c07, 0x4610, 0x4612, 0x5812, | ||
1441 | 0x5a12, 0x6a14, 0x6c14, 0x6e14, 0x7e17, 0x9021, 0xb002, 0xe204, | ||
1442 | 0xe210, 0xe210, 0x1209, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, | ||
1443 | 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07, | ||
1444 | 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07, 0x7e07, | ||
1445 | 0x0e00, 0x789b, 0x0080, 0xa046, 0x0005, 0xa784, 0x0f00, 0x800b, | ||
1446 | 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xd7fc, | ||
1447 | 0x0118, 0xa0e0, 0x6cc0, 0x0010, 0xa0e0, 0x4cc0, 0x0005, 0x00e6, | ||
1448 | 0x00f6, 0xd084, 0x0138, 0x2079, 0x0100, 0x2009, 0x4780, 0x2071, | ||
1449 | 0x4780, 0x0030, 0x2009, 0x4740, 0x2079, 0x0200, 0x2071, 0x4740, | ||
1450 | 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0002, 0x3bc8, 0x3bc8, | ||
1451 | 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc6, 0x3bc6, 0x080c, 0x2575, | ||
1452 | 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0580, 0x7858, | ||
1453 | 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086, 0x1814, | ||
1454 | 0x1530, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x1de0, 0x784b, | ||
1455 | 0x0008, 0x7848, 0xa084, 0x0008, 0x1de0, 0x7830, 0xd0bc, 0x11b8, | ||
1456 | 0xb284, 0x0800, 0x0118, 0x0104, 0x3bff, 0x0010, 0x0304, 0x3bff, | ||
1457 | 0x79e4, 0xa184, 0x0030, 0x0158, 0x78ec, 0xa084, 0x0003, 0x0138, | ||
1458 | 0x681c, 0xd0ac, 0x1110, 0x00d9, 0x0010, 0x781b, 0x00fb, 0x00fe, | ||
1459 | 0x00ee, 0x0005, 0x2001, 0x4701, 0x2004, 0xd0ac, 0x1118, 0x6814, | ||
1460 | 0x080c, 0x249e, 0x0005, 0x781b, 0x0083, 0x0005, 0x781b, 0x0082, | ||
1461 | 0x0005, 0x781b, 0x0071, 0x0005, 0x781b, 0x006e, 0x0005, 0x2009, | ||
1462 | 0x4719, 0x210c, 0xa186, 0x0000, 0x0150, 0xa186, 0x0001, 0x0150, | ||
1463 | 0x701f, 0x000b, 0x7063, 0x0001, 0x781b, 0x0054, 0x0005, 0x781b, | ||
1464 | 0x00f3, 0x0005, 0x701f, 0x000a, 0x0005, 0x2009, 0x4719, 0x210c, | ||
1465 | 0xa186, 0x0000, 0x0168, 0xa186, 0x0001, 0x0138, 0x701f, 0x000b, | ||
1466 | 0x7063, 0x0001, 0x781b, 0x0054, 0x0005, 0x701f, 0x000a, 0x0005, | ||
1467 | 0x781b, 0x00f2, 0x0005, 0x781b, 0x00fb, 0x0005, 0x781b, 0x00fa, | ||
1468 | 0x0005, 0x781b, 0x00cc, 0x0005, 0x781b, 0x00cb, 0x0005, 0x6818, | ||
1469 | 0xd0fc, 0x0110, 0x681b, 0x001d, 0x701f, 0x000b, 0x7063, 0x0001, | ||
1470 | 0x781b, 0x0054, 0x0005, 0x7830, 0xa084, 0x00c0, 0x1170, 0x7808, | ||
1471 | 0xc08c, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084, | ||
1472 | 0x0021, 0x0118, 0x7808, 0xc08d, 0x780a, 0x0005, 0x7808, 0xc08d, | ||
1473 | 0x780a, 0x0005, 0x7830, 0xa084, 0x0040, 0x1de0, 0xb284, 0x0800, | ||
1474 | 0x0118, 0x1104, 0x3c80, 0x0010, 0x1304, 0x3c80, 0x78ac, 0x0005, | ||
1475 | 0x7808, 0xa084, 0xfffd, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000, | ||
1476 | 0x78ec, 0xa084, 0x0021, 0x0140, 0xb284, 0x0800, 0x0118, 0x1104, | ||
1477 | 0x3c8f, 0x0010, 0x1304, 0x3c92, 0x78ac, 0x0006, 0x7808, 0xa085, | ||
1478 | 0x0002, 0x780a, 0x000e, 0x0005, 0xa784, 0x0001, 0x1904, 0x324d, | ||
1479 | 0xa784, 0x0070, 0x0140, 0x00c6, 0x2d60, 0x2f68, 0x080c, 0x2490, | ||
1480 | 0x2d78, 0x2c68, 0x00ce, 0xa784, 0x0008, 0x0148, 0x784b, 0x0008, | ||
1481 | 0x78ec, 0xa084, 0x0003, 0x0904, 0x324d, 0x0804, 0x3c0b, 0xa784, | ||
1482 | 0x0004, 0x01c8, 0x78b8, 0xa084, 0x8000, 0x01a8, 0x784b, 0x0008, | ||
1483 | 0x78ec, 0xa084, 0x0003, 0x0904, 0x324d, 0x78e4, 0xa084, 0x0007, | ||
1484 | 0xa086, 0x0001, 0x1140, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a, | ||
1485 | 0x781b, 0x00fb, 0x0005, 0xa784, 0x0080, 0x0140, 0x7884, 0xd0fc, | ||
1486 | 0x0128, 0x080c, 0x3a57, 0x681b, 0x0022, 0x0005, 0x681b, 0x0003, | ||
1487 | 0x7858, 0xa084, 0x5f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, | ||
1488 | 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0904, 0x2bac, 0xb284, | ||
1489 | 0x0800, 0x0110, 0x0104, 0x25c6, 0x0304, 0x25c6, 0x6b14, 0x8307, | ||
1490 | 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xd3fc, 0x0118, 0xa080, | ||
1491 | 0x4c40, 0x0010, 0xa080, 0x4bc0, 0x2060, 0x2048, 0x7056, 0x2a60, | ||
1492 | 0x0005, 0x00c6, 0x2960, 0x6000, 0xd0ac, 0x0904, 0x3d57, 0x68a0, | ||
1493 | 0xd1ac, 0x1120, 0xa084, 0x0e00, 0x0904, 0x3d55, 0x6108, 0x8117, | ||
1494 | 0xa18c, 0x00ff, 0x631c, 0x832f, 0xd0dc, 0x0110, 0xa39d, 0x0001, | ||
1495 | 0xd0cc, 0x11c8, 0xa584, 0x00ff, 0x0138, 0x78ec, 0xd0e4, 0x0110, | ||
1496 | 0x8213, 0x00b8, 0x2029, 0x0000, 0xa182, 0x000c, 0x1290, 0x78ec, | ||
1497 | 0xd0e4, 0x1118, 0x2009, 0x000c, 0x0060, 0xa182, 0x000b, 0x1248, | ||
1498 | 0x2009, 0x000a, 0x0030, 0x2009, 0x0032, 0x2011, 0x0000, 0x2029, | ||
1499 | 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x79aa, | ||
1500 | 0x78ab, 0x0000, 0x7aaa, 0x7baa, 0x7daa, 0xa8c0, 0x0008, 0x6820, | ||
1501 | 0xa085, 0x1000, 0x6822, 0x080c, 0x3a7a, 0xa085, 0x0001, 0x00ce, | ||
1502 | 0x0005, 0xa282, 0x0006, 0x1904, 0x3a49, 0x7da8, 0x7eac, 0x8637, | ||
1503 | 0xa5ac, 0x00ff, 0xa6b4, 0x00ff, 0x7fac, 0x8747, 0xa7bc, 0x00ff, | ||
1504 | 0xa8c4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1e4, 0x0904, 0x3dcb, | ||
1505 | 0xa18c, 0xecff, 0x6922, 0xa782, 0x0002, 0x1a04, 0x3a23, 0xa6b4, | ||
1506 | 0x00ff, 0x0904, 0x3dc8, 0xa682, 0x0031, 0x1a04, 0x3a23, 0xa582, | ||
1507 | 0x0009, 0x0a04, 0x3a23, 0xa882, 0x0003, 0x1a04, 0x3a23, 0xa886, | ||
1508 | 0x0002, 0x01d0, 0xa886, 0x0000, 0x1904, 0x3a23, 0x2001, 0x000c, | ||
1509 | 0x79ec, 0xd1e4, 0x0110, 0x2001, 0x000a, 0xa502, 0x1290, 0x080c, | ||
1510 | 0x3a23, 0x00c6, 0x2960, 0x6004, 0xa085, 0x001a, 0x6006, 0x6000, | ||
1511 | 0xc0ac, 0x6002, 0x00ce, 0x0005, 0xa786, 0x0000, 0x0904, 0x3a23, | ||
1512 | 0x8634, 0xa682, 0x0018, 0x0228, 0x0120, 0x2031, 0x0018, 0x0804, | ||
1513 | 0x3e19, 0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b, 0x080c, | ||
1514 | 0x3aee, 0x0904, 0x3a23, 0x080c, 0x391a, 0x080c, 0x39bf, 0x7e58, | ||
1515 | 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, 0x0005, | ||
1516 | 0x080c, 0x3917, 0x0c90, 0xa886, 0x0002, 0x1108, 0x8634, 0x7154, | ||
1517 | 0xa188, 0x0000, 0x210c, 0xd1ac, 0x0904, 0x3a23, 0xd1ec, 0x1120, | ||
1518 | 0x2039, 0x0000, 0x2041, 0x0000, 0xd1e4, 0x1120, 0x2031, 0x0000, | ||
1519 | 0x2041, 0x0000, 0xa782, 0x0002, 0x12c8, 0x621c, 0xa284, 0x00ff, | ||
1520 | 0xa706, 0x0110, 0x2039, 0x0000, 0xa605, 0x0190, 0x6108, 0x811f, | ||
1521 | 0xa39c, 0x00ff, 0x0168, 0xa302, 0x1208, 0x2330, 0x8807, 0xa705, | ||
1522 | 0xa086, 0x0201, 0x0160, 0xa886, 0x0000, 0x0168, 0x2039, 0x0000, | ||
1523 | 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x0070, 0xa284, | ||
1524 | 0xff00, 0x1108, 0x2040, 0xa184, 0x00ff, 0xa502, 0x0108, 0x2128, | ||
1525 | 0x852b, 0x852b, 0x080c, 0x3aee, 0x0d58, 0x080c, 0x391a, 0x080c, | ||
1526 | 0x39bf, 0x789b, 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, | ||
1527 | 0x0004, 0x7daa, 0x78ab, 0x0000, 0x7eaa, 0x7faa, 0x2800, 0x78aa, | ||
1528 | 0x789b, 0x0060, 0x78ab, 0x0008, 0x6820, 0xc0e5, 0x6822, 0x080c, | ||
1529 | 0x3a7a, 0x7858, 0xc095, 0x785a, 0x781b, 0x0082, 0x0005, 0x0020, | ||
1530 | 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, | ||
1531 | 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, | ||
1532 | 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, | ||
1533 | 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, | ||
1534 | 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9855, 0x984d, 0x0014, | ||
1535 | 0x9911, 0x98ff, 0x0014, 0x0014, 0x0090, 0x00e7, 0x0100, 0x0402, | ||
1536 | 0x2008, 0xf880, 0x0018, 0x0017, 0x840f, 0xd8c1, 0x0014, 0x0016, | ||
1537 | 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0x2500, 0x0013, 0x2500, | ||
1538 | 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, | ||
1539 | 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0xa200, 0x3806, | ||
1540 | 0x8839, 0x20c4, 0x0864, 0xa850, 0x3008, 0x28c1, 0x9d18, 0xa201, | ||
1541 | 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, | ||
1542 | 0xa808, 0x28e2, 0x9cce, 0xa8f3, 0x0864, 0xa83e, 0x300c, 0xa801, | ||
1543 | 0x3008, 0x28e1, 0x9cce, 0x28a2, 0x7163, 0xa831, 0x2021, 0xa818, | ||
1544 | 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0, 0x6fc0, 0x67a4, 0x6c80, | ||
1545 | 0x0212, 0xa205, 0x883d, 0x882b, 0x1814, 0x883b, 0x7027, 0x85f2, | ||
1546 | 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa813, 0x883e, 0xa811, | ||
1547 | 0x2882, 0x7162, 0xa814, 0x280a, 0xa204, 0x64c0, 0x6de0, 0x67a0, | ||
1548 | 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa802, 0x7861, | ||
1549 | 0x883e, 0x206a, 0x28c1, 0x9d18, 0x2042, 0x2101, 0xa8ca, 0x2902, | ||
1550 | 0xa20e, 0xa80b, 0xa207, 0x0014, 0xa203, 0x8000, 0x85a4, 0x1872, | ||
1551 | 0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e, 0x7121, 0x0014, | ||
1552 | 0x0704, 0x3008, 0x9cce, 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, | ||
1553 | 0x84a8, 0x19e2, 0xf844, 0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861, | ||
1554 | 0xa8eb, 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, | ||
1555 | 0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, | ||
1556 | 0xd6e0, 0x1fe6, 0x0014, 0x3008, 0x8000, 0x2849, 0x1011, 0xa8fc, | ||
1557 | 0x3008, 0x8000, 0xa000, 0x2081, 0x2802, 0x1011, 0xa8fc, 0xa889, | ||
1558 | 0x3008, 0x20a1, 0x283c, 0x1011, 0xa8fc, 0xa209, 0x0017, 0x300c, | ||
1559 | 0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, 0x0210, 0xa801, 0x0014, | ||
1560 | 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0, 0x18f2, 0x0014, 0xa20b, | ||
1561 | 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d22, 0x0704, 0xa206, 0x6865, | ||
1562 | 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, 0xa8fa, | ||
1563 | 0x8160, 0x842a, 0x8180, 0xf021, 0x3008, 0x84a8, 0x11d7, 0x7042, | ||
1564 | 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x0000, 0x0126, 0x70d0, | ||
1565 | 0xa084, 0x4c00, 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205, | ||
1566 | 0x11a0, 0x720c, 0x82ff, 0x0128, 0x8aff, 0x1178, 0x7200, 0xd284, | ||
1567 | 0x1160, 0x7804, 0xd0cc, 0x0110, 0x080c, 0x435b, 0x7007, 0x0008, | ||
1568 | 0x7003, 0x0008, 0x012e, 0x2000, 0x0005, 0x7000, 0xa084, 0x0003, | ||
1569 | 0x7002, 0xc69c, 0xd084, 0x0588, 0x7108, 0xe000, 0x7008, 0xa106, | ||
1570 | 0x1dd8, 0xa184, 0x0003, 0x0904, 0x3fca, 0xa184, 0x01e0, 0x1904, | ||
1571 | 0x3fca, 0xd1f4, 0x1d88, 0xa184, 0x3000, 0xa086, 0x1000, 0x0d60, | ||
1572 | 0x2011, 0x0180, 0x710c, 0x8211, 0x0130, 0x7008, 0xd0f4, 0x1d20, | ||
1573 | 0x700c, 0xa106, 0x0dc0, 0x7007, 0x0012, 0x7108, 0xe000, 0x7008, | ||
1574 | 0xa106, 0x1dd8, 0xa184, 0x0003, 0x0568, 0xd194, 0x0db0, 0xd1f4, | ||
1575 | 0x0548, 0x7007, 0x0002, 0x0880, 0x0428, 0x7108, 0xd1fc, 0x0130, | ||
1576 | 0x080c, 0x40d6, 0x8aff, 0x0904, 0x3f54, 0x0cb8, 0x700c, 0xa08c, | ||
1577 | 0x07ff, 0x01e8, 0x7004, 0xd084, 0x0178, 0x7014, 0xa005, 0x1148, | ||
1578 | 0x7010, 0x7310, 0xa306, 0x1de0, 0x2300, 0xa005, 0x0128, 0xa102, | ||
1579 | 0x1e20, 0x7007, 0x0010, 0x0030, 0x8aff, 0x0148, 0x080c, 0x429a, | ||
1580 | 0x1de8, 0x09d8, 0x080c, 0x405c, 0x012e, 0x2000, 0x0005, 0x7204, | ||
1581 | 0x7108, 0xc19c, 0x8103, 0x1218, 0x7007, 0x0002, 0x0cc0, 0xa205, | ||
1582 | 0x1d88, 0x7007, 0x0008, 0x7003, 0x0008, 0x0006, 0x2001, 0x4701, | ||
1583 | 0x2004, 0xd0cc, 0x0110, 0x080c, 0x435b, 0x000e, 0x012e, 0x2000, | ||
1584 | 0x0005, 0x6428, 0x84ff, 0x0508, 0x2c70, 0x7004, 0xa0bc, 0x000f, | ||
1585 | 0xa7b8, 0x401d, 0x273c, 0x87fb, 0x1148, 0x0210, 0x080c, 0x2575, | ||
1586 | 0x609c, 0xa075, 0x0190, 0x0c88, 0x2039, 0x4012, 0x2704, 0xae68, | ||
1587 | 0x6808, 0xa630, 0x680c, 0xa529, 0x8421, 0x0138, 0x8738, 0x2704, | ||
1588 | 0xa005, 0x1da8, 0x709c, 0xa075, 0x1d00, 0x0005, 0x0000, 0x0005, | ||
1589 | 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, | ||
1590 | 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x4012, 0x400f, | ||
1591 | 0x0000, 0x0000, 0x8000, 0x0000, 0x4012, 0x0000, 0x401a, 0x4017, | ||
1592 | 0x0000, 0x0000, 0x0000, 0x0000, 0x401a, 0x0000, 0x4015, 0x4015, | ||
1593 | 0x0000, 0x0000, 0x8000, 0x0000, 0x4015, 0x0000, 0x401b, 0x401b, | ||
1594 | 0x0000, 0x0000, 0x0000, 0x0000, 0x401b, 0x2079, 0x4700, 0x2071, | ||
1595 | 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0001, 0x2009, | ||
1596 | 0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, | ||
1597 | 0x0000, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1128, 0x8109, 0x0118, | ||
1598 | 0x2071, 0x0020, 0x0c80, 0x0005, 0x7004, 0x8004, 0x1a04, 0x40b2, | ||
1599 | 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0120, 0x080c, | ||
1600 | 0x410e, 0x0804, 0x40d2, 0x7007, 0x0012, 0x2019, 0x0000, 0x7108, | ||
1601 | 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0120, 0x080c, 0x410e, | ||
1602 | 0x0804, 0x40d2, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0190, 0xa386, | ||
1603 | 0x0008, 0x01c0, 0x7004, 0xd084, 0x1148, 0x7108, 0x7008, 0xa106, | ||
1604 | 0x1de0, 0xa184, 0x0003, 0x0110, 0x0804, 0x410e, 0xa386, 0x200c, | ||
1605 | 0x19f0, 0x7200, 0x8204, 0x0230, 0x730c, 0xa384, 0x07ff, 0x0110, | ||
1606 | 0x080c, 0x2575, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, | ||
1607 | 0x0118, 0x080c, 0x410e, 0x0470, 0x7007, 0x0012, 0x7000, 0xd084, | ||
1608 | 0x1148, 0x7310, 0x7014, 0xa305, 0x0128, 0x710c, 0xa184, 0x07ff, | ||
1609 | 0x1904, 0x405c, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, | ||
1610 | 0x0118, 0x080c, 0x410e, 0x00b0, 0x7007, 0x0012, 0x7007, 0x0008, | ||
1611 | 0x7004, 0xd09c, 0x1de8, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, | ||
1612 | 0x01e0, 0x0118, 0x080c, 0x410e, 0x0028, 0x7007, 0x0012, 0x7108, | ||
1613 | 0x8103, 0x0e88, 0x7003, 0x0008, 0x0005, 0x7108, 0xa184, 0x01e0, | ||
1614 | 0x15a8, 0x7108, 0xa184, 0x01e0, 0x1588, 0xa184, 0x0007, 0x0002, | ||
1615 | 0x40ea, 0x40f8, 0x40e8, 0x40f8, 0x40e8, 0x4148, 0x40e8, 0x4146, | ||
1616 | 0x080c, 0x2575, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, | ||
1617 | 0x1118, 0x2049, 0x0000, 0x0005, 0x080c, 0x429a, 0x1de8, 0x0005, | ||
1618 | 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x1140, | ||
1619 | 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x0003, 0x0108, 0x0030, | ||
1620 | 0x8aff, 0x0118, 0x080c, 0x429a, 0x1de8, 0x0005, 0x7007, 0x0012, | ||
1621 | 0x7108, 0x1d04, 0x4111, 0x2091, 0x6000, 0x1d04, 0x4115, 0x2091, | ||
1622 | 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8, | ||
1623 | 0x7007, 0x0012, 0x7108, 0xd1fc, 0x1dd8, 0x7003, 0x0000, 0x7000, | ||
1624 | 0xa005, 0x1130, 0x7004, 0xa005, 0x1118, 0x700c, 0xa005, 0x0108, | ||
1625 | 0x0c40, 0x2049, 0x0000, 0xb284, 0x0200, 0x0118, 0x2001, 0x0000, | ||
1626 | 0x0010, 0x2001, 0x0001, 0x080c, 0x3ba7, 0x681b, 0x0002, 0x2051, | ||
1627 | 0x0000, 0x0005, 0x080c, 0x2575, 0x080c, 0x2575, 0x080c, 0x4187, | ||
1628 | 0x7210, 0x7114, 0x700c, 0xa09c, 0x07ff, 0x2800, 0xa300, 0xa211, | ||
1629 | 0xa189, 0x0000, 0x04a1, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, | ||
1630 | 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0140, 0x1238, | ||
1631 | 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0c58, 0x2b60, | ||
1632 | 0x8a07, 0x0006, 0x6004, 0xd09c, 0x0118, 0xa7ba, 0x4017, 0x0010, | ||
1633 | 0xa7ba, 0x400f, 0x000e, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, | ||
1634 | 0x6b8e, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0110, | ||
1635 | 0x080c, 0x410e, 0x7007, 0x0012, 0x080c, 0x405c, 0x0005, 0x8a50, | ||
1636 | 0x8739, 0x2704, 0xa004, 0x1168, 0x6000, 0xa064, 0x1108, 0x2d60, | ||
1637 | 0x6004, 0xa084, 0x000f, 0xa080, 0x402d, 0x203c, 0x87fb, 0x090c, | ||
1638 | 0x2575, 0x0005, 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, | ||
1639 | 0x2090, 0x00de, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057, | ||
1640 | 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x0006, 0x6804, 0xa084, 0x0008, | ||
1641 | 0x000e, 0x0118, 0xa0b8, 0x4017, 0x0010, 0xa0b8, 0x400f, 0xb284, | ||
1642 | 0x0200, 0x0110, 0x7e20, 0x0008, 0x7e24, 0xa6b5, 0x000c, 0x681c, | ||
1643 | 0xd0b4, 0x0108, 0xc685, 0x2400, 0xa305, 0x0550, 0x2c58, 0x2704, | ||
1644 | 0x6104, 0xac60, 0x6000, 0xa400, 0x2048, 0xa9cc, 0x0004, 0x0118, | ||
1645 | 0x080c, 0x43a3, 0x0400, 0x701a, 0x6004, 0xa301, 0x701e, 0xd19c, | ||
1646 | 0x0140, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081, 0x0000, | ||
1647 | 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, 0xa203, | ||
1648 | 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x080c, 0x42c5, 0x0010, | ||
1649 | 0x080c, 0x429a, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x00d6, | ||
1650 | 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x7007, 0x0004, | ||
1651 | 0x7004, 0xd094, 0x1de8, 0x7003, 0x0008, 0x012e, 0x2000, 0x0005, | ||
1652 | 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, | ||
1653 | 0x7e20, 0xb284, 0x0200, 0x1108, 0x7e24, 0xa6b5, 0x000c, 0x681c, | ||
1654 | 0xd0ac, 0x1118, 0xc685, 0x7003, 0x0000, 0x6828, 0x2050, 0x2d60, | ||
1655 | 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x401d, 0x273c, 0x87fb, 0x1138, | ||
1656 | 0x0210, 0x080c, 0x2575, 0x689c, 0xa065, 0x0120, 0x0c88, 0x080c, | ||
1657 | 0x429a, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x0006, 0x0016, | ||
1658 | 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x7e20, 0xb284, | ||
1659 | 0x0200, 0x1108, 0x7e24, 0x00de, 0x003e, 0x004e, 0xa6b5, 0x000c, | ||
1660 | 0x681c, 0xd0b4, 0x0128, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004, | ||
1661 | 0x2049, 0x4235, 0x6828, 0xa055, 0x00d6, 0x0904, 0x4296, 0x2d70, | ||
1662 | 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x401d, 0x273c, 0x87fb, | ||
1663 | 0x1140, 0x0210, 0x080c, 0x2575, 0x709c, 0xa075, 0x2060, 0x0570, | ||
1664 | 0x0c80, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0268, | ||
1665 | 0x8a51, 0x1110, 0x080c, 0x2575, 0x8738, 0x2704, 0xa005, 0x1d90, | ||
1666 | 0x709c, 0xa075, 0x2060, 0x01d0, 0x08e0, 0x8422, 0x8420, 0x831a, | ||
1667 | 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, | ||
1668 | 0x1210, 0x080c, 0x2575, 0xb284, 0x0200, 0x0118, 0x2071, 0x0050, | ||
1669 | 0x0010, 0x2071, 0x0020, 0x00de, 0x0804, 0x41c3, 0x00de, 0x012e, | ||
1670 | 0x2000, 0x0005, 0x7008, 0x0006, 0xa084, 0x01e0, 0x000e, 0x0110, | ||
1671 | 0xa006, 0x0005, 0xa084, 0x0003, 0xa086, 0x0003, 0x1108, 0x0005, | ||
1672 | 0x2704, 0xac78, 0x7800, 0x2f08, 0xd094, 0x1904, 0x43a6, 0x701a, | ||
1673 | 0x7804, 0x701e, 0x7808, 0x7012, 0x780c, 0x7016, 0x6004, 0xd09c, | ||
1674 | 0x0120, 0x7810, 0x7022, 0x7814, 0x7026, 0x7602, 0x7004, 0xa084, | ||
1675 | 0x0010, 0xc085, 0x7006, 0x2079, 0x4700, 0x8a51, 0x01e8, 0x8738, | ||
1676 | 0x2704, 0xa005, 0x1168, 0x609c, 0xa005, 0x01b8, 0x2060, 0x6004, | ||
1677 | 0xa084, 0x000f, 0xa080, 0x401d, 0x203c, 0x87fb, 0x090c, 0x2575, | ||
1678 | 0x7008, 0x0006, 0xa084, 0x01e0, 0x000e, 0x0110, 0xa006, 0x0028, | ||
1679 | 0xa084, 0x0003, 0xa086, 0x0003, 0x0005, 0x2051, 0x0000, 0x0005, | ||
1680 | 0x0126, 0x0006, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, | ||
1681 | 0x00de, 0x008e, 0x7108, 0xa184, 0x0003, 0x1128, 0x6828, 0xa005, | ||
1682 | 0x0178, 0x0804, 0x3f6d, 0x7108, 0xd1fc, 0x0118, 0x080c, 0x40d6, | ||
1683 | 0x0c88, 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0de8, 0x080c, 0x40d6, | ||
1684 | 0x7008, 0xa086, 0x0008, 0x1d30, 0x7000, 0xa005, 0x1d18, 0x7003, | ||
1685 | 0x0000, 0x2049, 0x0000, 0x0006, 0x2001, 0x4701, 0x2004, 0xd0cc, | ||
1686 | 0x0110, 0x080c, 0x435b, 0x000e, 0x012e, 0x2000, 0x0005, 0x0126, | ||
1687 | 0x0146, 0x0136, 0x0156, 0x00c6, 0x00d6, 0x70d0, 0xa084, 0x4c00, | ||
1688 | 0x8004, 0x2090, 0x00de, 0x2049, 0x431f, 0xad80, 0x0011, 0x20a0, | ||
1689 | 0xb284, 0x0200, 0x0118, 0x2099, 0x0032, 0x0010, 0x2099, 0x0031, | ||
1690 | 0x700c, 0xa084, 0x07ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, | ||
1691 | 0x7003, 0x0001, 0x0118, 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, | ||
1692 | 0x07ff, 0x0130, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x1de0, | ||
1693 | 0x00ce, 0x2049, 0x0000, 0x7003, 0x0000, 0x015e, 0x013e, 0x014e, | ||
1694 | 0x012e, 0x2000, 0x0005, 0x6814, 0xd0fc, 0x0904, 0x439e, 0x7000, | ||
1695 | 0xd084, 0x05e0, 0x7e24, 0xa6b5, 0x0004, 0x7007, 0x0004, 0x7004, | ||
1696 | 0xa084, 0x0004, 0x1de0, 0x7118, 0x0016, 0x711c, 0x0016, 0x7120, | ||
1697 | 0x0016, 0x7124, 0x0016, 0x701b, 0x0000, 0x701f, 0x3fff, 0x7023, | ||
1698 | 0x0000, 0x7027, 0x0000, 0x7013, 0x0004, 0x7017, 0x0000, 0x7602, | ||
1699 | 0x7007, 0x0001, 0x2001, 0xffff, 0x2009, 0x0031, 0x200a, 0x200a, | ||
1700 | 0x7108, 0x7008, 0xa106, 0x1de0, 0xd1fc, 0x0dd0, 0x002e, 0x7226, | ||
1701 | 0x002e, 0x7222, 0x002e, 0x721e, 0x002e, 0x721a, 0x7007, 0x0002, | ||
1702 | 0x7008, 0xa086, 0x0008, 0x0110, 0x0804, 0x410e, 0x7007, 0x0004, | ||
1703 | 0x7003, 0x0000, 0x0005, 0x2049, 0x41c3, 0x0068, 0x7008, 0xa084, | ||
1704 | 0x0003, 0x0110, 0xa006, 0x0005, 0xa006, 0x2020, 0x2018, 0x2c58, | ||
1705 | 0x2160, 0x2049, 0x0000, 0x8b58, 0x6100, 0x2100, 0xa408, 0x711a, | ||
1706 | 0x6004, 0xa301, 0x701e, 0x0006, 0x2b04, 0xa084, 0x0008, 0x0150, | ||
1707 | 0x6010, 0xa081, 0x0000, 0x7022, 0x0006, 0x6014, 0xa081, 0x0000, | ||
1708 | 0x7026, 0x0006, 0xa184, 0x0007, 0x2011, 0x0008, 0xa22a, 0x6208, | ||
1709 | 0x2400, 0xa212, 0x0026, 0x620c, 0x2240, 0x2300, 0xa843, 0x002e, | ||
1710 | 0x88ff, 0x1170, 0x2500, 0xa202, 0x0108, 0x1250, 0x2220, 0x2041, | ||
1711 | 0x0000, 0x2b04, 0xd09c, 0x0110, 0x000e, 0x000e, 0x000e, 0x0450, | ||
1712 | 0x7512, 0x7017, 0x0000, 0x7602, 0xa986, 0x41c3, 0x1118, 0x7007, | ||
1713 | 0x0001, 0x0028, 0x7004, 0xa084, 0x0010, 0xc085, 0x7006, 0x2500, | ||
1714 | 0xa100, 0x701a, 0x2b04, 0xa084, 0x0008, 0x0110, 0x000e, 0x004e, | ||
1715 | 0x001e, 0xa189, 0x0000, 0x711e, 0x2b0c, 0xa18c, 0x0008, 0x0130, | ||
1716 | 0xa4a1, 0x0000, 0x7422, 0xa081, 0x0000, 0x7026, 0x2500, 0xa222, | ||
1717 | 0xa8c3, 0x0000, 0x7412, 0x2820, 0x7416, 0x7602, 0xa986, 0x41c3, | ||
1718 | 0x1118, 0x7007, 0x0001, 0x0028, 0x7004, 0xa084, 0x0010, 0xc085, | ||
1719 | 0x7006, 0x8b59, 0x2b60, 0x2079, 0x4700, 0x080c, 0x42c5, 0xa006, | ||
1720 | 0x0005, 0x2091, 0x8000, 0x2091, 0x6000, 0x78ac, 0xa005, 0x1168, | ||
1721 | 0x7974, 0x70d0, 0xa106, 0x1148, 0x781c, 0xa005, 0x0130, 0x781f, | ||
1722 | 0x0000, 0x0e04, 0x443d, 0x2091, 0x4080, 0x2069, 0x4780, 0xc7fd, | ||
1723 | 0x6800, 0xa084, 0x000f, 0x1198, 0x68d0, 0xd0b4, 0x0180, 0xd0bc, | ||
1724 | 0x1170, 0x00f6, 0x2079, 0x0100, 0xd7fc, 0x1110, 0x2079, 0x0200, | ||
1725 | 0x7830, 0xa084, 0x00c0, 0x1110, 0x080c, 0x22d5, 0x00fe, 0xd7fc, | ||
1726 | 0x0120, 0x2069, 0x4740, 0xc7fc, 0x0c18, 0x7830, 0x8001, 0x7832, | ||
1727 | 0x1904, 0x44c7, 0x7834, 0x7832, 0x2061, 0x6cc0, 0x2069, 0x4780, | ||
1728 | 0xc7fd, 0x68cc, 0xa005, 0x0128, 0x8001, 0x68ce, 0x1110, 0x080c, | ||
1729 | 0x4639, 0x6800, 0xa084, 0x000f, 0x0168, 0xa086, 0x0001, 0x0150, | ||
1730 | 0x6840, 0xa00d, 0x0138, 0x2104, 0xa005, 0x0120, 0x8001, 0x200a, | ||
1731 | 0x0904, 0x45d6, 0x6814, 0xa005, 0x01a8, 0x8001, 0x6816, 0x1190, | ||
1732 | 0x68a3, 0x0001, 0x00f6, 0xd7fc, 0x1118, 0x2079, 0x0200, 0x0010, | ||
1733 | 0x2079, 0x0100, 0x080c, 0x3c6e, 0x00fe, 0x6860, 0xa005, 0x0110, | ||
1734 | 0x080c, 0x22d5, 0x687c, 0xa005, 0x0140, 0x8001, 0x687e, 0x1128, | ||
1735 | 0x6863, 0x0000, 0x68d0, 0xc0c5, 0x68d2, 0x68d0, 0xd0fc, 0x01b0, | ||
1736 | 0xc0fc, 0x68d2, 0x20a9, 0x0200, 0x6034, 0xa005, 0x0158, 0x8001, | ||
1737 | 0x6036, 0x68d0, 0xc0fd, 0x68d2, 0x1128, 0x6010, 0xa005, 0x0110, | ||
1738 | 0x080c, 0x22d5, 0xace0, 0x0010, 0x1f04, 0x44ac, 0xd7fc, 0x0138, | ||
1739 | 0x2061, 0x4cc0, 0x2069, 0x4740, 0xc7fc, 0x0804, 0x4469, 0x0459, | ||
1740 | 0x7838, 0x8001, 0x783a, 0x11a0, 0x783c, 0x783a, 0x2061, 0x4cc0, | ||
1741 | 0x2069, 0x4740, 0xc7fc, 0x680c, 0xa005, 0x0110, 0x080c, 0x4543, | ||
1742 | 0xd7fc, 0x1130, 0x2061, 0x6cc0, 0x2069, 0x4780, 0xc7fd, 0x0c98, | ||
1743 | 0x7810, 0xd0cc, 0x0168, 0xd0ac, 0x1120, 0xd0a4, 0x0148, 0xc0ad, | ||
1744 | 0x7812, 0x2091, 0x8001, 0x0e04, 0x44ef, 0x080c, 0x20a1, 0x0005, | ||
1745 | 0x2091, 0x8001, 0x0005, 0x7840, 0x8001, 0x7842, 0x1904, 0x4542, | ||
1746 | 0x7844, 0x7842, 0x2069, 0x4740, 0xc7fc, 0x2079, 0x0200, 0x68d4, | ||
1747 | 0xa005, 0x0138, 0x7de0, 0xa504, 0x1120, 0x68d6, 0x68d0, 0xc0bc, | ||
1748 | 0x68d2, 0x2079, 0x4700, 0x6810, 0xa005, 0x1110, 0x2001, 0x0101, | ||
1749 | 0x8001, 0x6812, 0xd7fc, 0x0118, 0xa080, 0x8dd0, 0x0010, 0xa080, | ||
1750 | 0x8cc0, 0x2040, 0x2004, 0xa065, 0x01e0, 0x6024, 0xa005, 0x01b0, | ||
1751 | 0x8001, 0x6026, 0x1198, 0x6800, 0xa005, 0x0130, 0x6848, 0xac06, | ||
1752 | 0x1118, 0x080c, 0x45d6, 0x0068, 0x6860, 0xa005, 0x0118, 0x6027, | ||
1753 | 0x0001, 0x0020, 0x080c, 0x4584, 0x2804, 0x0c28, 0x6000, 0x2c40, | ||
1754 | 0x0c10, 0xd7fc, 0x1138, 0x2069, 0x4780, 0xc7fd, 0x2079, 0x0100, | ||
1755 | 0x0804, 0x44ff, 0x0005, 0x2009, 0x0000, 0x20a9, 0x0200, 0x6008, | ||
1756 | 0xd09c, 0x0558, 0x6024, 0xa005, 0x0118, 0x8001, 0x6026, 0x0418, | ||
1757 | 0x6008, 0xc09c, 0xd084, 0x1110, 0xd0ac, 0x01c0, 0x600a, 0x6004, | ||
1758 | 0xa005, 0x01d8, 0x00d6, 0x00c6, 0x0016, 0x2068, 0x6010, 0x8001, | ||
1759 | 0x6012, 0x080c, 0x37c7, 0x2d00, 0x2c68, 0x2060, 0x080c, 0x1c02, | ||
1760 | 0x080c, 0x1db2, 0x001e, 0x00ce, 0x00de, 0x0038, 0xc0bd, 0x600a, | ||
1761 | 0xa18d, 0x0001, 0x0010, 0xa18d, 0x0100, 0xace0, 0x0010, 0x1f04, | ||
1762 | 0x4547, 0xa184, 0x0001, 0x0130, 0xa18c, 0xfffe, 0x690e, 0x080c, | ||
1763 | 0x22d5, 0x0008, 0x690e, 0x0005, 0x2c00, 0x687a, 0x6714, 0x6f72, | ||
1764 | 0x6017, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x60b4, 0xa084, | ||
1765 | 0x5f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022, | ||
1766 | 0x6000, 0x2042, 0x2069, 0x4780, 0xd7fc, 0x1110, 0x2069, 0x4740, | ||
1767 | 0x6858, 0xac06, 0x1110, 0x2800, 0x685a, 0x080c, 0x1b9a, 0x6818, | ||
1768 | 0xa005, 0x0110, 0x8001, 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810, | ||
1769 | 0x7908, 0x8109, 0x790a, 0x8001, 0x1310, 0x080c, 0x2575, 0x6812, | ||
1770 | 0x1118, 0x7910, 0xc1a5, 0x7912, 0x602f, 0x0000, 0x6033, 0x0000, | ||
1771 | 0x2c68, 0x080c, 0x1dbf, 0xd7fc, 0x1118, 0x2069, 0x4740, 0x0010, | ||
1772 | 0x2069, 0x4780, 0x6910, 0xa184, 0x0100, 0x2001, 0x0006, 0x1118, | ||
1773 | 0x6976, 0x2001, 0x0004, 0x080c, 0x22cb, 0x0005, 0x00d6, 0x6948, | ||
1774 | 0x2160, 0xd7fc, 0x1118, 0x2069, 0x0200, 0x0010, 0x2069, 0x0100, | ||
1775 | 0x080c, 0x2490, 0x601b, 0x0006, 0x6858, 0xa084, 0x5f00, 0x601e, | ||
1776 | 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, | ||
1777 | 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, | ||
1778 | 0x01b0, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, 0x0110, | ||
1779 | 0x1f04, 0x45fd, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, | ||
1780 | 0x0110, 0x1f04, 0x4606, 0x20a9, 0x00fa, 0x1f04, 0x460d, 0x681b, | ||
1781 | 0x0054, 0x00de, 0x6863, 0x0007, 0x0005, 0x2079, 0x4700, 0x00e1, | ||
1782 | 0x0089, 0x00a9, 0x2009, 0x0002, 0x2069, 0x4780, 0x680f, 0x0000, | ||
1783 | 0x6813, 0x0000, 0x6817, 0x0000, 0x8109, 0x0118, 0x2069, 0x4740, | ||
1784 | 0x0ca8, 0x0005, 0x2019, 0x00a3, 0x7b3a, 0x7b3e, 0x0005, 0x2019, | ||
1785 | 0x0033, 0x7b42, 0x7b46, 0x0005, 0x2019, 0x32dd, 0x7b32, 0x7b36, | ||
1786 | 0x0005, 0x6a4c, 0xa285, 0x0000, 0x01f0, 0x6950, 0x6bbc, 0xa300, | ||
1787 | 0x00c6, 0x2164, 0x6304, 0x83ff, 0x1138, 0x8211, 0x0148, 0x8108, | ||
1788 | 0xa11a, 0x0eb8, 0x69bc, 0x0ca8, 0x68cf, 0x000a, 0x00ce, 0x0005, | ||
1789 | 0x694c, 0x6abc, 0x2264, 0x6008, 0xc0b5, 0x600a, 0x8210, 0x8109, | ||
1790 | 0x1dc8, 0x694e, 0x00ce, 0x0005, 0x0016, 0x1d04, 0x465d, 0x2091, | ||
1791 | 0x6000, 0x1d04, 0x4661, 0x2091, 0x6000, 0x70ec, 0xd0dc, 0x1118, | ||
1792 | 0xd0d4, 0x0190, 0x00a0, 0xae8e, 0x0100, 0x0138, 0x7814, 0xc0f5, | ||
1793 | 0xc0c5, 0x7816, 0xd0d4, 0x1580, 0x0460, 0x7814, 0xc0fd, 0xc0c5, | ||
1794 | 0x7816, 0xd0d4, 0x1548, 0x0428, 0xd0e4, 0x0904, 0x46c4, 0x1d04, | ||
1795 | 0x467f, 0x2091, 0x6000, 0x2009, 0x000c, 0x1d04, 0x4685, 0x2091, | ||
1796 | 0x6000, 0x8109, 0x1dd0, 0x70e4, 0xa084, 0x01ff, 0xa086, 0x01ff, | ||
1797 | 0x1110, 0x70ec, 0x08c0, 0xae8e, 0x0100, 0x0128, 0x7814, 0xc0f4, | ||
1798 | 0xd0fc, 0x1130, 0x0020, 0x7814, 0xc0fc, 0xd0f4, 0x1108, 0xc0c4, | ||
1799 | 0x7816, 0x7804, 0xd08c, 0x0500, 0x00c6, 0x2061, 0x0000, 0x6018, | ||
1800 | 0xd084, 0x11b8, 0xae86, 0x0200, 0x00e6, 0x2071, 0x0010, 0x0120, | ||
1801 | 0x70db, 0x0001, 0x78e4, 0x0018, 0x70db, 0x0000, 0x78e0, 0x70c6, | ||
1802 | 0x70c3, 0x800e, 0x601b, 0x0001, 0x2091, 0x4080, 0x00ee, 0x00ce, | ||
1803 | 0x0018, 0x00ce, 0x681f, 0x000c, 0x001e, 0x70a0, 0x70a2, 0x0005, | ||
1804 | 0x0c26 | ||
1805 | }; | ||
1806 | #ifdef UNIQUE_FW_NAME | ||
1807 | static unsigned short fw12160i_length01 = 0x36c9; | ||
1808 | #else | ||
1809 | static unsigned short risc_code_length01 = 0x36c9; | ||
1810 | #endif | ||
1811 | |||
diff --git a/drivers/scsi/ql1280_fw.h b/drivers/scsi/ql1280_fw.h deleted file mode 100644 index 784f2a04bf28..000000000000 --- a/drivers/scsi/ql1280_fw.h +++ /dev/null | |||
@@ -1,2048 +0,0 @@ | |||
1 | /***************************************************************************** | ||
2 | * QLOGIC LINUX SOFTWARE | ||
3 | * | ||
4 | * QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x | ||
5 | * Copyright (C) 2001 Qlogic Corporation (www.qlogic.com) | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2, or (at your option) any | ||
10 | * later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License for more details. | ||
16 | * | ||
17 | *****************************************************************************/ | ||
18 | |||
19 | /************************************************************************ | ||
20 | * --- ISP1240/1080/1280 Initiator Firmware --- * | ||
21 | * 32 LUN Support * | ||
22 | ************************************************************************/ | ||
23 | |||
24 | |||
25 | /* | ||
26 | * Firmware Version 8.15.11 (10:20 Jan 02, 2002) | ||
27 | */ | ||
28 | |||
29 | #ifdef UNIQUE_FW_NAME | ||
30 | static unsigned char fw1280ei_version_str[] = {8,15,11}; | ||
31 | #else | ||
32 | static unsigned char firmware_version[] = {8,15,11}; | ||
33 | #endif | ||
34 | |||
35 | #ifdef UNIQUE_FW_NAME | ||
36 | #define fw1280ei_VERSION_STRING "8.15.11" | ||
37 | #else | ||
38 | #define FW_VERSION_STRING "8.15.11" | ||
39 | #endif | ||
40 | |||
41 | #ifdef UNIQUE_FW_NAME | ||
42 | static unsigned short fw1280ei_addr01 = 0x1000 ; | ||
43 | #else | ||
44 | static unsigned short risc_code_addr01 = 0x1000 ; | ||
45 | #endif | ||
46 | |||
47 | #ifdef UNIQUE_FW_NAME | ||
48 | static unsigned short fw1280ei_code01[] = { | ||
49 | #else | ||
50 | static unsigned short risc_code01[] = { | ||
51 | #endif | ||
52 | 0x0078, 0x1041, 0x0000, 0x3e2e, 0x0000, 0x2043, 0x4f50, 0x5952, | ||
53 | 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31, | ||
54 | 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320, | ||
55 | 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350, | ||
56 | 0x3132, 0x3430, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, | ||
57 | 0x6572, 0x7369, 0x6f6e, 0x2030, 0x382e, 0x3135, 0x2020, 0x2043, | ||
58 | 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050, | ||
59 | 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020, | ||
60 | 0x2400, 0x20c9, 0x98ff, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1080, | ||
61 | 0x00c0, 0x1054, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, | ||
62 | 0x2089, 0x1374, 0x0078, 0x106d, 0x2001, 0x04fc, 0x2004, 0xa086, | ||
63 | 0x1280, 0x00c0, 0x1069, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2071, | ||
64 | 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13f8, 0x0078, | ||
65 | 0x106d, 0x20c1, 0x0020, 0x2089, 0x131c, 0x2071, 0x0010, 0x70c3, | ||
66 | 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, | ||
67 | 0x0008, 0x2001, 0x04fe, 0x70d6, 0x20c1, 0x0021, 0x2019, 0x0000, | ||
68 | 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64, | ||
69 | 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114, | ||
70 | 0xa286, 0xa5a5, 0x0040, 0x10a4, 0xa386, 0x000f, 0x0040, 0x10a0, | ||
71 | 0x2c6a, 0x2a5a, 0x20c1, 0x0020, 0x2019, 0x000f, 0x0078, 0x1080, | ||
72 | 0x2c6a, 0x2a5a, 0x0078, 0x10a2, 0x2c6a, 0x2a5a, 0x2130, 0x2128, | ||
73 | 0xa1a2, 0x4f00, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, | ||
74 | 0xa192, 0x9900, 0x2009, 0x0000, 0x2001, 0x0032, 0x1078, 0x20c1, | ||
75 | 0x2218, 0x2079, 0x4f00, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, | ||
76 | 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10bf, 0x2009, 0xff00, 0x3400, | ||
77 | 0xa102, 0x0048, 0x10cf, 0x0040, 0x10cf, 0x20a8, 0x42a4, 0x2001, | ||
78 | 0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x10e5, 0x2071, 0x0100, | ||
79 | 0x0d7e, 0x2069, 0x4f40, 0x1078, 0x4db0, 0x0d7f, 0x7810, 0xc0ed, | ||
80 | 0x7812, 0x781b, 0x0064, 0x0078, 0x110a, 0x2001, 0x04fc, 0x2004, | ||
81 | 0xa086, 0x1280, 0x00c0, 0x1105, 0x7814, 0xc0ed, 0xc0d5, 0x7816, | ||
82 | 0x781b, 0x0064, 0x2071, 0x0200, 0x0d7e, 0x2069, 0x4f40, 0x1078, | ||
83 | 0x4db0, 0x2069, 0x4f80, 0x2071, 0x0100, 0x1078, 0x4db0, 0x7814, | ||
84 | 0xc0d4, 0x7816, 0x0d7f, 0x0078, 0x110a, 0x7814, 0xc0e5, 0x7816, | ||
85 | 0x781b, 0x003c, 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800, | ||
86 | 0xc08d, 0x7802, 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002, | ||
87 | 0x7827, 0x0002, 0x2009, 0x0002, 0x2069, 0x4f40, 0x681b, 0x0003, | ||
88 | 0x6823, 0x0007, 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, | ||
89 | 0x6837, 0x0000, 0x683b, 0x0006, 0x6833, 0x0008, 0x683f, 0x0000, | ||
90 | 0x8109, 0x0040, 0x115e, 0x68d3, 0x000a, 0x68c3, 0x4fc0, 0x2079, | ||
91 | 0x4f00, 0x7814, 0xd0e4, 0x00c0, 0x1144, 0xd0ec, 0x00c0, 0x1148, | ||
92 | 0x68d7, 0x7329, 0x0078, 0x114a, 0x68d7, 0x730d, 0x0078, 0x114a, | ||
93 | 0x68d7, 0x732d, 0x68c7, 0x54c0, 0x68cb, 0x53c0, 0x68cf, 0x94c0, | ||
94 | 0x68ab, 0x9744, 0x68af, 0x9749, 0x68b3, 0x9744, 0x68b7, 0x9744, | ||
95 | 0x68a7, 0x0001, 0x2069, 0x4f80, 0x0078, 0x111e, 0x68d3, 0x000a, | ||
96 | 0x68c3, 0x51c0, 0x7814, 0xd0e4, 0x00c0, 0x116a, 0x68d7, 0x7439, | ||
97 | 0x0078, 0x116c, 0x68d7, 0x7419, 0x68c7, 0x74c0, 0x68cb, 0x5440, | ||
98 | 0x68cf, 0x95d0, 0x68ab, 0x9749, 0x68af, 0x974e, 0x68b3, 0x9749, | ||
99 | 0x68b7, 0x9749, 0x68a7, 0x0001, 0x7810, 0xd0ec, 0x00c0, 0x11c2, | ||
100 | 0x7814, 0xd0e4, 0x00c0, 0x11b4, 0x0e7e, 0x2069, 0x53c0, 0x2071, | ||
101 | 0x0200, 0x70ec, 0xd0e4, 0x00c0, 0x1195, 0x2019, 0x0c0c, 0x2021, | ||
102 | 0x000c, 0x1078, 0x2050, 0x0078, 0x119b, 0x2019, 0x0c0a, 0x2021, | ||
103 | 0x000a, 0x1078, 0x2050, 0x2069, 0x5440, 0x2071, 0x0100, 0x70ec, | ||
104 | 0xd0e4, 0x00c0, 0x11ab, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078, | ||
105 | 0x2050, 0x0078, 0x11b1, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1078, | ||
106 | 0x2050, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0c, 0x2021, 0x000c, | ||
107 | 0x2069, 0x53c0, 0x1078, 0x2050, 0x2069, 0x5440, 0x1078, 0x2050, | ||
108 | 0x0078, 0x11db, 0x2069, 0x53c0, 0x0e7e, 0x2071, 0x0100, 0x70ec, | ||
109 | 0xd0e4, 0x00c0, 0x11d4, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078, | ||
110 | 0x2050, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0a, 0x2021, 0x000a, | ||
111 | 0x1078, 0x2050, 0x0e7f, 0x2011, 0x0002, 0x2069, 0x54c0, 0x2009, | ||
112 | 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bc8, | ||
113 | 0xa386, 0xfeff, 0x00c0, 0x11f2, 0x6817, 0x0100, 0x681f, 0x0064, | ||
114 | 0x0078, 0x11f6, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, | ||
115 | 0x00f0, 0x11e3, 0x8109, 0x00c0, 0x11e1, 0x8211, 0x0040, 0x1204, | ||
116 | 0x2069, 0x74c0, 0x0078, 0x11df, 0x1078, 0x26a2, 0x1078, 0x4712, | ||
117 | 0x1078, 0x1e1b, 0x1078, 0x4d42, 0x2091, 0x2100, 0x2079, 0x4f00, | ||
118 | 0x7810, 0xd0ec, 0x0040, 0x1218, 0x2071, 0x0020, 0x0078, 0x121a, | ||
119 | 0x2071, 0x0050, 0x2091, 0x2200, 0x2079, 0x4f00, 0x2071, 0x0020, | ||
120 | 0x2091, 0x2300, 0x2079, 0x4f00, 0x7810, 0xd0ec, 0x0040, 0x122c, | ||
121 | 0x2079, 0x0100, 0x0078, 0x122e, 0x2079, 0x0200, 0x2071, 0x4f40, | ||
122 | 0x2091, 0x2400, 0x2079, 0x0100, 0x2071, 0x4f80, 0x2091, 0x2000, | ||
123 | 0x2079, 0x4f00, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090, | ||
124 | 0x2071, 0x0010, 0x70c3, 0x0000, 0x0090, 0x124d, 0x70c0, 0xa086, | ||
125 | 0x0002, 0x00c0, 0x124d, 0x1078, 0x15c1, 0x2039, 0x0000, 0x7810, | ||
126 | 0xd0ec, 0x00c0, 0x12cf, 0x1078, 0x148e, 0x78ac, 0xa005, 0x00c0, | ||
127 | 0x126b, 0x0068, 0x1261, 0x786c, 0xa065, 0x0040, 0x1261, 0x1078, | ||
128 | 0x23dc, 0x1078, 0x20e8, 0x0068, 0x1278, 0x786c, 0xa065, 0x0040, | ||
129 | 0x126b, 0x1078, 0x23dc, 0x0068, 0x1278, 0x2009, 0x4f47, 0x2011, | ||
130 | 0x4f87, 0x2104, 0x220c, 0xa105, 0x0040, 0x1278, 0x1078, 0x1f51, | ||
131 | 0x2071, 0x4f40, 0x70a4, 0xa005, 0x0040, 0x129d, 0x7450, 0xa485, | ||
132 | 0x0000, 0x0040, 0x129d, 0x2079, 0x0200, 0x2091, 0x8000, 0x72d4, | ||
133 | 0xa28c, 0x303d, 0x2190, 0x1078, 0x2bb1, 0x2091, 0x8000, 0x2091, | ||
134 | 0x303d, 0x0068, 0x129d, 0x2079, 0x4f00, 0x786c, 0xa065, 0x0040, | ||
135 | 0x129d, 0x2071, 0x0010, 0x1078, 0x23dc, 0x00e0, 0x12a5, 0x2079, | ||
136 | 0x4f00, 0x2071, 0x0010, 0x1078, 0x4b16, 0x2071, 0x4f80, 0x70a4, | ||
137 | 0xa005, 0x0040, 0x12bd, 0x7050, 0xa025, 0x0040, 0x12bd, 0x2079, | ||
138 | 0x0100, 0x2091, 0x8000, 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, | ||
139 | 0x2bb1, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079, 0x4f00, 0x2071, | ||
140 | 0x0010, 0x0068, 0x12c9, 0x786c, 0xa065, 0x0040, 0x12c9, 0x1078, | ||
141 | 0x23dc, 0x00e0, 0x1253, 0x1078, 0x4b16, 0x0078, 0x1253, 0x1078, | ||
142 | 0x148e, 0x78ac, 0xa005, 0x00c0, 0x12e7, 0x0068, 0x12dd, 0x786c, | ||
143 | 0xa065, 0x0040, 0x12dd, 0x1078, 0x23dc, 0x1078, 0x20e8, 0x0068, | ||
144 | 0x12f1, 0x786c, 0xa065, 0x0040, 0x12e7, 0x1078, 0x23dc, 0x0068, | ||
145 | 0x12f1, 0x2009, 0x4f47, 0x2104, 0xa005, 0x0040, 0x12f1, 0x1078, | ||
146 | 0x1f51, 0x2071, 0x4f40, 0x70a4, 0xa005, 0x0040, 0x130c, 0x7450, | ||
147 | 0xa485, 0x0000, 0x0040, 0x130c, 0x2079, 0x0100, 0x2091, 0x8000, | ||
148 | 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, 0x2bb1, 0x2091, 0x8000, | ||
149 | 0x2091, 0x303d, 0x2079, 0x4f00, 0x2071, 0x0010, 0x0068, 0x1316, | ||
150 | 0x786c, 0xa065, 0x0040, 0x1316, 0x1078, 0x23dc, 0x00e0, 0x12cf, | ||
151 | 0x1078, 0x4b16, 0x0078, 0x12cf, 0x133c, 0x133c, 0x133e, 0x133e, | ||
152 | 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363, | ||
153 | 0x134b, 0x134b, 0x134b, 0x134b, 0x133c, 0x133c, 0x133e, 0x133e, | ||
154 | 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363, | ||
155 | 0x134b, 0x134b, 0x134b, 0x134b, 0x0078, 0x133c, 0x007e, 0x107e, | ||
156 | 0x127e, 0x2091, 0x2400, 0x1078, 0x29d1, 0x127f, 0x107f, 0x007f, | ||
157 | 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c8, | ||
158 | 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, | ||
159 | 0x127e, 0x2091, 0x2300, 0x1078, 0x29d1, 0x127f, 0x107f, 0x007f, | ||
160 | 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, | ||
161 | 0x1078, 0x29d1, 0x2091, 0x2400, 0x1078, 0x29d1, 0x127f, 0x107f, | ||
162 | 0x007f, 0x2091, 0x8001, 0x007c, 0x1394, 0x1394, 0x1396, 0x1396, | ||
163 | 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13ae, 0x13ae, 0x1396, 0x1396, | ||
164 | 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13af, 0x13af, 0x13af, 0x13af, | ||
165 | 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, | ||
166 | 0x13af, 0x13af, 0x13af, 0x13af, 0x0078, 0x1394, 0x007e, 0x107e, | ||
167 | 0x127e, 0x2091, 0x2300, 0x1078, 0x29d1, 0x127f, 0x107f, 0x007f, | ||
168 | 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13d5, | ||
169 | 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007c, 0x107e, | ||
170 | 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x007e, 0x2071, 0x0100, 0x2069, | ||
171 | 0x4f40, 0x2079, 0x4f00, 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078, | ||
172 | 0x4db0, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007c, | ||
173 | 0x3c00, 0xa084, 0x0007, 0x0079, 0x13cd, 0x13de, 0x13de, 0x13e0, | ||
174 | 0x13e0, 0x13e5, 0x13e5, 0x13ea, 0x13ea, 0x3c00, 0xa084, 0x0003, | ||
175 | 0x0079, 0x13da, 0x13de, 0x13de, 0x13f3, 0x13f3, 0x1078, 0x29b2, | ||
176 | 0x2091, 0x2200, 0x1078, 0x47ec, 0x007c, 0x2091, 0x2100, 0x1078, | ||
177 | 0x47ec, 0x007c, 0x2091, 0x2100, 0x1078, 0x47ec, 0x2091, 0x2200, | ||
178 | 0x1078, 0x47ec, 0x007c, 0x2091, 0x2100, 0x1078, 0x47ec, 0x007c, | ||
179 | 0x1418, 0x1418, 0x141a, 0x141a, 0x1427, 0x1427, 0x1427, 0x1427, | ||
180 | 0x1432, 0x1432, 0x143f, 0x143f, 0x1427, 0x1427, 0x1427, 0x1427, | ||
181 | 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, | ||
182 | 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, | ||
183 | 0x0078, 0x1418, 0x007e, 0x107e, 0x127e, 0x2091, 0x2400, 0x1078, | ||
184 | 0x29d1, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, | ||
185 | 0x107e, 0x127e, 0x1078, 0x13c8, 0x127f, 0x107f, 0x007f, 0x2091, | ||
186 | 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, | ||
187 | 0x29d1, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, | ||
188 | 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x29d1, 0x2091, 0x2400, | ||
189 | 0x1078, 0x29d1, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, | ||
190 | 0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2079, 0x4f00, | ||
191 | 0x2071, 0x0200, 0x2069, 0x4f40, 0x3d00, 0xd08c, 0x0040, 0x1466, | ||
192 | 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078, 0x4db0, 0x3d00, 0xd084, | ||
193 | 0x0040, 0x1474, 0x2069, 0x4f80, 0x2071, 0x0100, 0x70ec, 0xa084, | ||
194 | 0x1c00, 0x78e6, 0x1078, 0x4db0, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, | ||
195 | 0x107f, 0x007f, 0x007c, 0x7008, 0x800b, 0x00c8, 0x1489, 0x7007, | ||
196 | 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x148a, 0xd09c, 0x0040, 0x1489, | ||
197 | 0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x15c4, 0x0068, 0x151a, | ||
198 | 0x2061, 0x0000, 0x6018, 0xd084, 0x00c0, 0x151a, 0x7828, 0xa005, | ||
199 | 0x00c0, 0x149e, 0x0010, 0x151b, 0x0078, 0x151a, 0x7910, 0xd1f4, | ||
200 | 0x0040, 0x14a4, 0x0078, 0x14b9, 0x7914, 0xd1ec, 0x0040, 0x14bd, | ||
201 | 0xd0fc, 0x0040, 0x14b3, 0x007e, 0x1078, 0x1dae, 0x007f, 0x0040, | ||
202 | 0x14bd, 0x0078, 0x14b9, 0x007e, 0x1078, 0x1da1, 0x007f, 0x0040, | ||
203 | 0x14bd, 0x2001, 0x4007, 0x0078, 0x15c3, 0x7910, 0xd0fc, 0x00c0, | ||
204 | 0x14c7, 0x2061, 0x4f40, 0xc19c, 0xc7fc, 0x0078, 0x14cb, 0x2061, | ||
205 | 0x4f80, 0xc19d, 0xc7fd, 0x6064, 0xa005, 0x00c0, 0x151a, 0x7912, | ||
206 | 0x6082, 0x7828, 0xc0fc, 0xa086, 0x0018, 0x00c0, 0x14db, 0x0c7e, | ||
207 | 0x1078, 0x1b85, 0x0c7f, 0x782b, 0x0000, 0x607c, 0xa065, 0x0040, | ||
208 | 0x1500, 0x0c7e, 0x609c, 0x1078, 0x1e90, 0x0c7f, 0x609f, 0x0000, | ||
209 | 0x1078, 0x1cd5, 0x2009, 0x0018, 0x6087, 0x0103, 0x7810, 0x007e, | ||
210 | 0x84ff, 0x00c0, 0x14f6, 0x85ff, 0x0040, 0x14f8, 0xc0c5, 0x7812, | ||
211 | 0x1078, 0x1dbb, 0x007f, 0x7812, 0x00c0, 0x1514, 0x1078, 0x1e0d, | ||
212 | 0x7810, 0xd09c, 0x00c0, 0x1508, 0x2061, 0x4f40, 0x0078, 0x150c, | ||
213 | 0x2061, 0x4f80, 0xc09c, 0x7812, 0x607f, 0x0000, 0x60d4, 0xd0dc, | ||
214 | 0x0040, 0x1518, 0xc0dc, 0x60d6, 0x2001, 0x4005, 0x0078, 0x15c3, | ||
215 | 0x0078, 0x15c1, 0x007c, 0x7810, 0xd0f4, 0x0040, 0x1523, 0x2001, | ||
216 | 0x4007, 0x0078, 0x15c3, 0xa006, 0x70c2, 0x70c6, 0x70ca, 0x70ce, | ||
217 | 0x70da, 0x70c0, 0xa03d, 0xa08a, 0x0040, 0x00c8, 0x1531, 0x0079, | ||
218 | 0x1538, 0x2100, 0xa08a, 0x0040, 0x00c8, 0x15cf, 0x0079, 0x1578, | ||
219 | 0x15c1, 0x1617, 0x15e0, 0x164f, 0x1687, 0x1687, 0x15d7, 0x1ced, | ||
220 | 0x1692, 0x15cf, 0x15e4, 0x15e6, 0x15e8, 0x15ea, 0x1cf2, 0x15cf, | ||
221 | 0x16a0, 0x16fd, 0x1ba5, 0x1ce7, 0x15ec, 0x19ea, 0x1a2c, 0x1a67, | ||
222 | 0x1ab8, 0x19a5, 0x19b2, 0x19c6, 0x19d9, 0x17eb, 0x15cf, 0x1734, | ||
223 | 0x1741, 0x174d, 0x1759, 0x176f, 0x177b, 0x177e, 0x178a, 0x1796, | ||
224 | 0x179e, 0x17d3, 0x17df, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x17f8, | ||
225 | 0x180a, 0x1826, 0x185c, 0x1884, 0x1894, 0x1897, 0x18c8, 0x18f9, | ||
226 | 0x190b, 0x1974, 0x1984, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x1994, | ||
227 | 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x1d17, 0x1d1d, 0x15cf, | ||
228 | 0x15cf, 0x15cf, 0x1d21, 0x1d66, 0x15cf, 0x15cf, 0x15cf, 0x15cf, | ||
229 | 0x1611, 0x1681, 0x169a, 0x16f7, 0x1b9f, 0x15cf, 0x15cf, 0x1b68, | ||
230 | 0x15cf, 0x1d6a, 0x1d09, 0x1d13, 0x15cf, 0x15cf, 0x15cf, 0x15cf, | ||
231 | 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, | ||
232 | 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, | ||
233 | 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, | ||
234 | 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, | ||
235 | 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, 0x15c3, 0x73ce, 0x72ca, | ||
236 | 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, 0x15c4, 0x2061, 0x0000, | ||
237 | 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x007c, 0x70c3, | ||
238 | 0x4001, 0x0078, 0x15c4, 0x70c3, 0x4006, 0x0078, 0x15c4, 0x2099, | ||
239 | 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078, 0x15c1, | ||
240 | 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x15c1, 0x0078, 0x15c1, | ||
241 | 0x0078, 0x15c1, 0x0078, 0x15c1, 0x2091, 0x8000, 0x70c3, 0x0004, | ||
242 | 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0008, | ||
243 | 0x2001, 0x000f, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031, | ||
244 | 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051, 0x0445, 0x2061, | ||
245 | 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091, 0x4080, 0x0078, | ||
246 | 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x161a, 0x2029, | ||
247 | 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2099, | ||
248 | 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e, 0x7422, | ||
249 | 0x7526, 0x2021, 0x0040, 0x81ff, 0x0040, 0x15c1, 0xa182, 0x0040, | ||
250 | 0x00c8, 0x1634, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x7007, | ||
251 | 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0040, 0x163b, 0x7007, | ||
252 | 0x0002, 0xa084, 0x01e0, 0x0040, 0x1649, 0x70c3, 0x4002, 0x0078, | ||
253 | 0x15c4, 0x24a8, 0x53a5, 0x0078, 0x162b, 0x0078, 0x15c1, 0x2029, | ||
254 | 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x2098, 0x20a1, | ||
255 | 0x0030, 0x7003, 0x0000, 0x7007, 0x0006, 0x731a, 0x721e, 0x7422, | ||
256 | 0x7526, 0x2021, 0x0040, 0x7007, 0x0006, 0x81ff, 0x0040, 0x15c1, | ||
257 | 0xa182, 0x0040, 0x00c8, 0x166e, 0x2120, 0xa006, 0x2008, 0x8403, | ||
258 | 0x7012, 0x24a8, 0x53a6, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0040, | ||
259 | 0x1675, 0xa084, 0x01e0, 0x0040, 0x1663, 0x70c3, 0x4002, 0x0078, | ||
260 | 0x15c4, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1652, 0x71c4, | ||
261 | 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x168f, 0x200a, 0x72ca, | ||
262 | 0x0078, 0x15c0, 0x70c7, 0x0008, 0x70cb, 0x000f, 0x70cf, 0x000b, | ||
263 | 0x0078, 0x15c1, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x16a3, | ||
264 | 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, | ||
265 | 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x16f2, 0xa40a, 0x0040, | ||
266 | 0x16b3, 0x00c8, 0x16bc, 0x8001, 0x7872, 0xa084, 0xfc00, 0x0040, | ||
267 | 0x16c0, 0x78ac, 0xc085, 0x78ae, 0x2001, 0x4005, 0x0078, 0x15c3, | ||
268 | 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76, 0xa48c, 0xff00, 0x0040, | ||
269 | 0x16d8, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f, 0xa118, | ||
270 | 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, 0x0078, 0x16e2, | ||
271 | 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1, 0x0000, | ||
272 | 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605, 0x0040, | ||
273 | 0x16ec, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc, 0x78ae, | ||
274 | 0x0078, 0x16f5, 0x78ac, 0xc085, 0x78ae, 0x0078, 0x15c1, 0x75d8, | ||
275 | 0x76dc, 0x75da, 0x76de, 0x0078, 0x1700, 0x2029, 0x0000, 0x2530, | ||
276 | 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, | ||
277 | 0xa005, 0x0040, 0x172f, 0xa40a, 0x0040, 0x1710, 0x00c8, 0x1719, | ||
278 | 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040, 0x171d, 0x78ac, 0xc0c5, | ||
279 | 0x78ae, 0x2001, 0x4005, 0x0078, 0x15c3, 0x7a9a, 0x7b9e, 0x7da2, | ||
280 | 0x7ea6, 0x2600, 0xa505, 0x0040, 0x1728, 0x7a10, 0xc2c5, 0x7a12, | ||
281 | 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0078, 0x1732, 0x78ac, | ||
282 | 0xc0c5, 0x78ae, 0x0078, 0x15c1, 0x2009, 0x0000, 0x786c, 0xa065, | ||
283 | 0x0040, 0x173e, 0x8108, 0x6000, 0x0078, 0x1737, 0x7ac4, 0x0078, | ||
284 | 0x15bf, 0x2009, 0x4f48, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15c0, | ||
285 | 0x2011, 0x4f88, 0x2214, 0x0078, 0x15bf, 0x2009, 0x4f49, 0x210c, | ||
286 | 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2011, 0x4f89, 0x2214, 0x0078, | ||
287 | 0x15bf, 0x2061, 0x4f40, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, | ||
288 | 0x7810, 0xd0ec, 0x00c0, 0x176d, 0x2061, 0x4f80, 0x6328, 0x73da, | ||
289 | 0x632c, 0x831c, 0x831c, 0x831c, 0x73de, 0x0078, 0x15bf, 0x2009, | ||
290 | 0x4f4c, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2011, 0x4f8c, | ||
291 | 0x2214, 0x0078, 0x15bf, 0x7918, 0x0078, 0x15c0, 0x2009, 0x4f4d, | ||
292 | 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2011, 0x4f8d, 0x2214, | ||
293 | 0x0078, 0x15bf, 0x2009, 0x4f4e, 0x210c, 0x7810, 0xd0ec, 0x00c0, | ||
294 | 0x15c0, 0x2011, 0x4f8e, 0x2214, 0x0078, 0x15bf, 0x7920, 0x7810, | ||
295 | 0xd0ec, 0x00c0, 0x15c0, 0x7a24, 0x0078, 0x15bf, 0x71c4, 0xd1fc, | ||
296 | 0x00c0, 0x17a6, 0x2011, 0x53c0, 0x0078, 0x17a8, 0x2011, 0x5440, | ||
297 | 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, 0x6a00, | ||
298 | 0x6804, 0xd09c, 0x0040, 0x17b7, 0x6b08, 0x0078, 0x17b8, 0x6b0c, | ||
299 | 0xd1fc, 0x00c0, 0x17bf, 0x2021, 0x023b, 0x0078, 0x17c1, 0x2021, | ||
300 | 0x013b, 0x2424, 0x7914, 0xd1e4, 0x0040, 0x17cd, 0xd4c4, 0x00c0, | ||
301 | 0x17cc, 0xc4d5, 0x0078, 0x17cd, 0xc4dd, 0xa4a4, 0x1c00, 0x74de, | ||
302 | 0x71c4, 0x0078, 0x15be, 0x77c4, 0x1078, 0x1e2b, 0x2091, 0x8000, | ||
303 | 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x15be, 0x2061, | ||
304 | 0x4f40, 0x6118, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2061, 0x4f80, | ||
305 | 0x6218, 0x0078, 0x15bf, 0x77c4, 0x1078, 0x1e2b, 0x2091, 0x8000, | ||
306 | 0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, 0x0078, 0x15be, | ||
307 | 0x71c4, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x00c8, 0x15b9, | ||
308 | 0x1078, 0x27c6, 0xa384, 0x4000, 0x0040, 0x1808, 0xa295, 0x0020, | ||
309 | 0x0078, 0x15be, 0x71c4, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x00c8, | ||
310 | 0x15b9, 0xd1bc, 0x00c0, 0x1819, 0x2011, 0x4f48, 0x2204, 0x0078, | ||
311 | 0x181d, 0x2011, 0x4f88, 0x2204, 0xc0bd, 0x007e, 0x2100, 0xc0bc, | ||
312 | 0x2012, 0x1078, 0x2723, 0x017f, 0x0078, 0x15c0, 0x71c4, 0x2021, | ||
313 | 0x4f49, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0078, 0x1835, 0x71c8, | ||
314 | 0x2021, 0x4f89, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1854, 0x20a9, | ||
315 | 0x0008, 0x2204, 0xa106, 0x0040, 0x1844, 0x8210, 0x00f0, 0x1839, | ||
316 | 0x71c4, 0x72c8, 0x0078, 0x15b8, 0xa292, 0x1854, 0x027e, 0x2122, | ||
317 | 0x017f, 0x1078, 0x2744, 0x7810, 0xd0ec, 0x00c0, 0x1852, 0xd3fc, | ||
318 | 0x0040, 0x182f, 0x0078, 0x15c1, 0x03e8, 0x00fa, 0x01f4, 0x02ee, | ||
319 | 0x0004, 0x0001, 0x0002, 0x0003, 0x2061, 0x4f40, 0x6128, 0x622c, | ||
320 | 0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003, | ||
321 | 0x8003, 0x602e, 0x7810, 0xd0ec, 0x00c0, 0x1882, 0x027e, 0x017e, | ||
322 | 0x2061, 0x4f80, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70d8, | ||
323 | 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da, 0x72de, | ||
324 | 0x017f, 0x027f, 0x0078, 0x15bf, 0x2061, 0x4f40, 0x6130, 0x70c4, | ||
325 | 0x6032, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2061, 0x4f80, 0x6230, | ||
326 | 0x70c8, 0x6032, 0x0078, 0x15bf, 0x7918, 0x0078, 0x15c0, 0x71c4, | ||
327 | 0xa184, 0xffcf, 0x0040, 0x18a3, 0x7810, 0xd0ec, 0x00c0, 0x15b9, | ||
328 | 0x72c8, 0x0078, 0x15b8, 0x2011, 0x4f4d, 0x2204, 0x2112, 0x007e, | ||
329 | 0x2019, 0x0000, 0x1078, 0x27ab, 0x7810, 0xd0ec, 0x0040, 0x18b3, | ||
330 | 0x017f, 0x0078, 0x15c0, 0x71c8, 0xa184, 0xffcf, 0x0040, 0x18bc, | ||
331 | 0x2110, 0x71c4, 0x0078, 0x15b8, 0x2011, 0x4f8d, 0x2204, 0x2112, | ||
332 | 0x007e, 0xc3fd, 0x1078, 0x27ab, 0x027f, 0x017f, 0x0078, 0x15bf, | ||
333 | 0x71c4, 0xa182, 0x0010, 0x0048, 0x18d4, 0x7810, 0xd0ec, 0x00c0, | ||
334 | 0x15b9, 0x72c8, 0x0078, 0x15b8, 0x2011, 0x4f4e, 0x2204, 0x007e, | ||
335 | 0x2112, 0x2019, 0x0000, 0x1078, 0x2789, 0x7810, 0xd0ec, 0x0040, | ||
336 | 0x18e4, 0x017f, 0x0078, 0x15c0, 0x71c8, 0xa182, 0x0010, 0x0048, | ||
337 | 0x18ed, 0x2110, 0x71c4, 0x0078, 0x15b8, 0x2011, 0x4f8e, 0x2204, | ||
338 | 0x007e, 0x2112, 0xc3fd, 0x1078, 0x2789, 0x027f, 0x017f, 0x0078, | ||
339 | 0x15bf, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x15b8, 0xa284, | ||
340 | 0xfffd, 0x00c0, 0x15b8, 0x2100, 0x7920, 0x7822, 0x2200, 0x7a24, | ||
341 | 0x7826, 0x0078, 0x15bf, 0x71c4, 0xd1fc, 0x00c0, 0x1913, 0x2011, | ||
342 | 0x53c0, 0x0078, 0x1915, 0x2011, 0x5440, 0x8107, 0xa084, 0x000f, | ||
343 | 0x8003, 0x8003, 0x8003, 0xa268, 0x2019, 0x0000, 0x72c8, 0xd2bc, | ||
344 | 0x0040, 0x1924, 0xa39d, 0x0010, 0xd2b4, 0x0040, 0x1929, 0xa39d, | ||
345 | 0x0008, 0x2091, 0x8000, 0x6800, 0x007e, 0xa226, 0x0040, 0x1948, | ||
346 | 0x6a02, 0xd4ec, 0x0040, 0x1935, 0xc3a5, 0xd4e4, 0x0040, 0x1939, | ||
347 | 0xc39d, 0xd4f4, 0x0040, 0x1948, 0x810f, 0xd2f4, 0x0040, 0x1944, | ||
348 | 0x1078, 0x2808, 0x0078, 0x1948, 0x1078, 0x27e6, 0x0078, 0x1948, | ||
349 | 0x72cc, 0x6808, 0xa206, 0x0040, 0x196a, 0xa2a4, 0x00ff, 0x7814, | ||
350 | 0xd0e4, 0x00c0, 0x195b, 0xa482, 0x0028, 0x0048, 0x1967, 0x0040, | ||
351 | 0x1967, 0x0078, 0x195f, 0xa482, 0x0043, 0x0048, 0x1967, 0x71c4, | ||
352 | 0x71c6, 0x027f, 0x72ca, 0x2091, 0x8001, 0x0078, 0x15ba, 0x6a0a, | ||
353 | 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, | ||
354 | 0x2091, 0x8001, 0x0078, 0x15be, 0x77c4, 0x1078, 0x1e2b, 0x2091, | ||
355 | 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, | ||
356 | 0x681e, 0x2708, 0x0078, 0x15be, 0x70c4, 0x2061, 0x4f40, 0x6118, | ||
357 | 0x601a, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x70c8, 0x2061, 0x4f80, | ||
358 | 0x6218, 0x601a, 0x0078, 0x15bf, 0x71c4, 0x72c8, 0x73cc, 0xa182, | ||
359 | 0x0010, 0x00c8, 0x15b9, 0x1078, 0x282a, 0xa384, 0x4000, 0x0040, | ||
360 | 0x19a3, 0xa295, 0x0020, 0x0078, 0x15be, 0x77c4, 0x1078, 0x1e2b, | ||
361 | 0x2091, 0x8000, 0x6a08, 0xc28d, 0x6a0a, 0x2091, 0x8001, 0x2708, | ||
362 | 0x0078, 0x15bf, 0x77c4, 0x1078, 0x1e2b, 0x2091, 0x8000, 0x6a08, | ||
363 | 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x19c1, 0x1078, | ||
364 | 0x266f, 0x2091, 0x8001, 0x2708, 0x0078, 0x15bf, 0x77c4, 0x1078, | ||
365 | 0x1e2b, 0x2091, 0x8000, 0x6a08, 0xc295, 0x6a0a, 0x6804, 0xa005, | ||
366 | 0x0040, 0x19d4, 0x1078, 0x266f, 0x2091, 0x8001, 0x2708, 0x0078, | ||
367 | 0x15bf, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, | ||
368 | 0x2091, 0x8000, 0x1078, 0x1e46, 0x2091, 0x8001, 0x2708, 0x6a08, | ||
369 | 0x0078, 0x15bf, 0x77c4, 0x7814, 0xd0e4, 0x00c0, 0x19fe, 0xd7fc, | ||
370 | 0x0040, 0x19f8, 0x1078, 0x1dae, 0x0040, 0x19fe, 0x0078, 0x15c3, | ||
371 | 0x1078, 0x1da1, 0x0040, 0x19fe, 0x0078, 0x15c3, 0x73c8, 0x72cc, | ||
372 | 0x77c6, 0x73ca, 0x72ce, 0x1078, 0x1ecd, 0x00c0, 0x1a28, 0x6818, | ||
373 | 0xa005, 0x0040, 0x1a22, 0x2708, 0x077e, 0x1078, 0x285a, 0x077f, | ||
374 | 0x00c0, 0x1a22, 0x2001, 0x0015, 0xd7fc, 0x00c0, 0x1a1b, 0x2061, | ||
375 | 0x4f40, 0x0078, 0x1a1e, 0xc0fd, 0x2061, 0x4f80, 0x782a, 0x2091, | ||
376 | 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x15c3, | ||
377 | 0x2091, 0x8001, 0x0078, 0x15c1, 0x77c4, 0x7814, 0xd0e4, 0x00c0, | ||
378 | 0x1a40, 0xd7fc, 0x0040, 0x1a3a, 0x1078, 0x1dae, 0x0040, 0x1a40, | ||
379 | 0x0078, 0x15c3, 0x1078, 0x1da1, 0x0040, 0x1a40, 0x0078, 0x15c3, | ||
380 | 0x77c6, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, | ||
381 | 0x8000, 0x1078, 0x1e46, 0x2009, 0x0016, 0xd7fc, 0x00c0, 0x1a54, | ||
382 | 0x2061, 0x4f40, 0x0078, 0x1a57, 0x2061, 0x4f80, 0xc1fd, 0x6067, | ||
383 | 0x0003, 0x607f, 0x0000, 0x6776, 0x6083, 0x000f, 0x792a, 0x61d4, | ||
384 | 0xc1dc, 0x61d6, 0x1078, 0x266f, 0x2091, 0x8001, 0x007c, 0x77c8, | ||
385 | 0x77ca, 0x77c4, 0x77c6, 0x7814, 0xd0e4, 0x00c0, 0x1a7e, 0xd7fc, | ||
386 | 0x0040, 0x1a78, 0x1078, 0x1dae, 0x0040, 0x1a7e, 0x0078, 0x15c3, | ||
387 | 0x1078, 0x1da1, 0x0040, 0x1a7e, 0x0078, 0x15c3, 0xa7bc, 0xff00, | ||
388 | 0x2091, 0x8000, 0x2009, 0x0017, 0xd7fc, 0x00c0, 0x1a8b, 0x2061, | ||
389 | 0x4f40, 0x0078, 0x1a8e, 0x2061, 0x4f80, 0xc1fd, 0x607f, 0x0000, | ||
390 | 0x6067, 0x0002, 0x6776, 0x6083, 0x000f, 0x792a, 0x61d4, 0xc1dc, | ||
391 | 0x61d6, 0x1078, 0x266f, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, | ||
392 | 0x0005, 0x2051, 0x0010, 0x2091, 0x8000, 0x70c8, 0xa005, 0x0040, | ||
393 | 0x1aac, 0x60d4, 0xc0fd, 0x60d6, 0x1078, 0x1e46, 0x70c8, 0x6836, | ||
394 | 0x8738, 0xa784, 0x001f, 0x00c0, 0x1aac, 0x2091, 0x8001, 0x007c, | ||
395 | 0x2019, 0x0000, 0x7814, 0xd0e4, 0x00c0, 0x1ace, 0x72c8, 0xd284, | ||
396 | 0x0040, 0x1ac8, 0x1078, 0x1dae, 0x0040, 0x1ace, 0x0078, 0x15c3, | ||
397 | 0x1078, 0x1da1, 0x0040, 0x1ace, 0x0078, 0x15c3, 0x72c8, 0x72ca, | ||
398 | 0x78ac, 0xa084, 0x0003, 0x00c0, 0x1af9, 0x2039, 0x0000, 0xd284, | ||
399 | 0x0040, 0x1adb, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, | ||
400 | 0x0008, 0x1078, 0x1e2b, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, | ||
401 | 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1ae1, | ||
402 | 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, | ||
403 | 0x1ae1, 0x2091, 0x8000, 0x72c8, 0xd284, 0x00c0, 0x1b0b, 0x7810, | ||
404 | 0xd0ec, 0x0040, 0x1b07, 0x2069, 0x0100, 0x0078, 0x1b0d, 0x2069, | ||
405 | 0x0200, 0x0078, 0x1b0d, 0x2069, 0x0100, 0x6808, 0xa084, 0xfffd, | ||
406 | 0x680a, 0x6830, 0xd0b4, 0x0040, 0x1b2d, 0x684b, 0x0004, 0x20a9, | ||
407 | 0x0014, 0x6848, 0xd094, 0x0040, 0x1b1f, 0x00f0, 0x1b19, 0x684b, | ||
408 | 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0040, 0x1b29, 0x00f0, | ||
409 | 0x1b23, 0x20a9, 0x00fa, 0x00f0, 0x1b2b, 0x2079, 0x4f00, 0x2009, | ||
410 | 0x0018, 0x72c8, 0xd284, 0x00c0, 0x1b39, 0x2061, 0x4f40, 0x0078, | ||
411 | 0x1b3c, 0x2061, 0x4f80, 0xc1fd, 0x607f, 0x0000, 0x792a, 0x6067, | ||
412 | 0x0001, 0x6083, 0x000f, 0x60a7, 0x0000, 0x60a8, 0x60b2, 0x60b6, | ||
413 | 0x60d4, 0xd0b4, 0x0040, 0x1b58, 0xc0b4, 0x60d6, 0x0c7e, 0x60b8, | ||
414 | 0xa065, 0x6008, 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, | ||
415 | 0x60d4, 0xa084, 0x77ff, 0x60d6, 0x78ac, 0xc08d, 0x78ae, 0x83ff, | ||
416 | 0x0040, 0x1b63, 0x007c, 0x681b, 0x0047, 0x2091, 0x8001, 0x007c, | ||
417 | 0x73cc, 0x1078, 0x1aba, 0x69ec, 0x6a48, 0xa185, 0x1800, 0x684a, | ||
418 | 0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021, 0x0004, 0x20a9, 0x09ff, | ||
419 | 0x00f0, 0x1b78, 0x8421, 0x00c0, 0x1b76, 0x8319, 0x00c0, 0x1b74, | ||
420 | 0x69ee, 0x6a4a, 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x1b8c, | ||
421 | 0x2069, 0x4f40, 0x0078, 0x1b8e, 0x2069, 0x4f80, 0x71c4, 0x71c6, | ||
422 | 0x6916, 0x81ff, 0x00c0, 0x1b96, 0x68a7, 0x0001, 0x78ac, 0xc08c, | ||
423 | 0x78ae, 0xd084, 0x00c0, 0x1b9e, 0x1078, 0x1f2d, 0x007c, 0x75d8, | ||
424 | 0x74dc, 0x75da, 0x74de, 0x0078, 0x1ba7, 0xa02e, 0x2520, 0x71c4, | ||
425 | 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x4f00, 0x7dde, | ||
426 | 0x7cda, 0x7bd6, 0x7ad2, 0x1078, 0x1e04, 0x0040, 0x1cd1, 0x20a9, | ||
427 | 0x0005, 0x20a1, 0x4f14, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, | ||
428 | 0x2009, 0x0040, 0x1078, 0x2018, 0x0040, 0x1bca, 0x1078, 0x1e0d, | ||
429 | 0x0078, 0x1cd1, 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x00c0, | ||
430 | 0x1bd5, 0x007e, 0x1078, 0x23bf, 0x007f, 0xa084, 0xff00, 0x8007, | ||
431 | 0x8009, 0x0040, 0x1c61, 0x0c7e, 0x2c68, 0x1078, 0x1e04, 0x0040, | ||
432 | 0x1c1b, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x1bdc, 0x609f, 0x0000, | ||
433 | 0x0c7f, 0x0c7e, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040, | ||
434 | 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda, | ||
435 | 0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0040, 0x1c60, 0x2009, | ||
436 | 0x0040, 0x1078, 0x2018, 0x00c0, 0x1c3e, 0x6004, 0xa084, 0x00ff, | ||
437 | 0xa086, 0x0002, 0x00c0, 0x1c1b, 0x6004, 0xa084, 0x00ff, 0xa086, | ||
438 | 0x000a, 0x00c0, 0x1c17, 0x017e, 0x1078, 0x23bb, 0x017f, 0x2d00, | ||
439 | 0x6002, 0x0078, 0x1bea, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e90, | ||
440 | 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1cd5, 0x2009, 0x0018, 0x6008, | ||
441 | 0xc0cd, 0x600a, 0x6004, 0x6086, 0x7810, 0x007e, 0x84ff, 0x00c0, | ||
442 | 0x1c34, 0x85ff, 0x0040, 0x1c36, 0xc0c5, 0x7812, 0x1078, 0x1dbb, | ||
443 | 0x007f, 0x7812, 0x1078, 0x1e0d, 0x0078, 0x1cd1, 0x0c7f, 0x0c7e, | ||
444 | 0x609c, 0x1078, 0x1e90, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1cd5, | ||
445 | 0x2009, 0x0018, 0x6087, 0x0103, 0x601b, 0x0003, 0x7810, 0x007e, | ||
446 | 0x84ff, 0x00c0, 0x1c56, 0x85ff, 0x0040, 0x1c58, 0xc0c5, 0x7812, | ||
447 | 0x1078, 0x1dbb, 0x007f, 0x7812, 0x1078, 0x1e0d, 0x0078, 0x1cd1, | ||
448 | 0x0c7f, 0x7814, 0xd0e4, 0x00c0, 0x1c8f, 0x6114, 0xd1fc, 0x0040, | ||
449 | 0x1c6f, 0x1078, 0x1dae, 0x0040, 0x1c8f, 0x0078, 0x1c73, 0x1078, | ||
450 | 0x1da1, 0x0040, 0x1c8f, 0x1078, 0x1cd5, 0x2009, 0x0018, 0x6087, | ||
451 | 0x0103, 0x601b, 0x0021, 0x7810, 0x007e, 0x84ff, 0x00c0, 0x1c83, | ||
452 | 0x85ff, 0x0040, 0x1c85, 0xc0c5, 0x7812, 0x1078, 0x1dbb, 0x007f, | ||
453 | 0x7812, 0x1078, 0x1e0d, 0x2001, 0x4007, 0x0078, 0x15c3, 0x74c4, | ||
454 | 0x73c8, 0x72cc, 0x6014, 0x2091, 0x8000, 0x0e7e, 0x2009, 0x0012, | ||
455 | 0xd0fc, 0x00c0, 0x1c9f, 0x2071, 0x4f40, 0x0078, 0x1ca2, 0x2071, | ||
456 | 0x4f80, 0xc1fd, 0x792a, 0x7067, 0x0005, 0x71d4, 0xc1dc, 0x71d6, | ||
457 | 0x736a, 0x726e, 0x7472, 0x7076, 0x707b, 0x0000, 0x2c00, 0x707e, | ||
458 | 0xa02e, 0x2530, 0x611c, 0xa184, 0x0060, 0x0040, 0x1cb9, 0x1078, | ||
459 | 0x46b6, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, | ||
460 | 0x60b3, 0x0000, 0x6714, 0x6023, 0x0000, 0x6024, 0xa096, 0x0001, | ||
461 | 0x00c0, 0x1ccc, 0x8000, 0x6026, 0x1078, 0x266f, 0x2091, 0x8001, | ||
462 | 0x007c, 0x70c3, 0x4005, 0x0078, 0x15c4, 0x20a9, 0x0005, 0x2099, | ||
463 | 0x4f14, 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, | ||
464 | 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, | ||
465 | 0x70c7, 0x0000, 0x791e, 0x0078, 0x15c1, 0x71c4, 0x71c6, 0x2168, | ||
466 | 0x0078, 0x1cf4, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, | ||
467 | 0x8d68, 0x8109, 0x00c0, 0x1cf6, 0xa285, 0x0000, 0x00c0, 0x1d04, | ||
468 | 0x70c3, 0x4000, 0x0078, 0x1d06, 0x70c3, 0x4003, 0x70ca, 0x0078, | ||
469 | 0x15c4, 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x15b9, | ||
470 | 0x7966, 0x0078, 0x15c1, 0x7964, 0x71c6, 0x0078, 0x15c1, 0x7900, | ||
471 | 0x71c6, 0x71c4, 0x7902, 0x0078, 0x15c1, 0x7900, 0x71c6, 0x0078, | ||
472 | 0x15c1, 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0040, 0x1d36, | ||
473 | 0x810c, 0x0048, 0x1d32, 0x8210, 0x810c, 0x810c, 0x0048, 0x1d32, | ||
474 | 0x8210, 0x810c, 0x81ff, 0x00c0, 0x15ba, 0x8210, 0x7a0e, 0xd28c, | ||
475 | 0x0040, 0x1d62, 0x7910, 0xc1cd, 0x7912, 0x2009, 0x0021, 0x2019, | ||
476 | 0x0003, 0xd284, 0x0040, 0x1d5c, 0x8108, 0x2019, 0x0041, 0x2011, | ||
477 | 0x974e, 0x2312, 0x2019, 0x0042, 0x8210, 0x2312, 0x2019, 0x0043, | ||
478 | 0x8210, 0x2312, 0x2019, 0x0046, 0x8210, 0x2312, 0x2019, 0x0047, | ||
479 | 0x8210, 0x2312, 0x2019, 0x0006, 0x2011, 0x9753, 0x2112, 0x2011, | ||
480 | 0x9773, 0x2312, 0x7904, 0x7806, 0x0078, 0x15c0, 0x7804, 0x70c6, | ||
481 | 0x0078, 0x15c1, 0x71c4, 0xd1fc, 0x00c0, 0x1d72, 0x2011, 0x53c0, | ||
482 | 0x0078, 0x1d74, 0x2011, 0x5440, 0x8107, 0xa084, 0x000f, 0x8003, | ||
483 | 0x8003, 0x8003, 0xa268, 0x6a14, 0xd2b4, 0x0040, 0x1d83, 0x2011, | ||
484 | 0x0001, 0x0078, 0x1d85, 0x2011, 0x0000, 0x6b0c, 0x6800, 0x70da, | ||
485 | 0x0078, 0x15be, 0x7814, 0xd0f4, 0x0040, 0x1d95, 0x2001, 0x4007, | ||
486 | 0x70db, 0x0000, 0xa005, 0x0078, 0x1da0, 0xd0fc, 0x0040, 0x1d9f, | ||
487 | 0x2001, 0x4007, 0x70db, 0x0001, 0xa005, 0x0078, 0x1da0, 0xa006, | ||
488 | 0x007c, 0x7814, 0xd0f4, 0x0040, 0x1dac, 0x2001, 0x4007, 0x70db, | ||
489 | 0x0000, 0xa005, 0x0078, 0x1dad, 0xa006, 0x007c, 0x7814, 0xd0fc, | ||
490 | 0x0040, 0x1db9, 0x2001, 0x4007, 0x70db, 0x0001, 0xa005, 0x0078, | ||
491 | 0x1dba, 0xa006, 0x007c, 0x7112, 0x721a, 0x731e, 0x7810, 0xd0c4, | ||
492 | 0x0040, 0x1dc4, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c, | ||
493 | 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084, 0x20a2, | ||
494 | 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0040, 0x1de1, | ||
495 | 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, | ||
496 | 0x1de4, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, | ||
497 | 0xa211, 0x7d10, 0xd5c4, 0x0040, 0x1df1, 0x7b84, 0xa319, 0x7c80, | ||
498 | 0xa421, 0x7008, 0xd0fc, 0x0040, 0x1df1, 0x7003, 0x0001, 0x7007, | ||
499 | 0x0006, 0x711a, 0x721e, 0x7d10, 0xd5c4, 0x0040, 0x1e01, 0x7322, | ||
500 | 0x7426, 0xa084, 0x01e0, 0x007c, 0x7848, 0xa065, 0x0040, 0x1e0c, | ||
501 | 0x2c04, 0x784a, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x4f00, | ||
502 | 0x7848, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1e18, 0x1078, 0x29b2, | ||
503 | 0x784a, 0x0f7f, 0x007c, 0x2011, 0x9900, 0x7a4a, 0x7bc4, 0x8319, | ||
504 | 0x0040, 0x1e28, 0xa280, 0x0032, 0x2012, 0x2010, 0x0078, 0x1e1f, | ||
505 | 0x2013, 0x0000, 0x007c, 0x017e, 0x027e, 0xd7fc, 0x00c0, 0x1e34, | ||
506 | 0x2011, 0x54c0, 0x0078, 0x1e36, 0x2011, 0x74c0, 0xa784, 0x0f00, | ||
507 | 0x800b, 0xa784, 0x001f, 0x0040, 0x1e41, 0x8003, 0x8003, 0x8003, | ||
508 | 0x8003, 0xa105, 0xa268, 0x027f, 0x017f, 0x007c, 0x1078, 0x1e2b, | ||
509 | 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef, 0xa80d, | ||
510 | 0x690a, 0x0e7e, 0xd7fc, 0x00c0, 0x1e5b, 0x2009, 0x4f53, 0x2071, | ||
511 | 0x4f40, 0x0078, 0x1e5f, 0x2009, 0x4f93, 0x2071, 0x4f80, 0x210c, | ||
512 | 0x6804, 0xa005, 0x0040, 0x1e6f, 0xa116, 0x00c0, 0x1e6f, 0x2060, | ||
513 | 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, 0x1e72, 0x2009, | ||
514 | 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1e87, 0x6000, 0x6806, | ||
515 | 0x1078, 0x1ea2, 0x1078, 0x2064, 0x6810, 0x7908, 0x8109, 0x790a, | ||
516 | 0x8001, 0x6812, 0x00c0, 0x1e72, 0x7910, 0xc1a5, 0x7912, 0x017f, | ||
517 | 0x6902, 0x6906, 0x2d00, 0x2060, 0x1078, 0x2b13, 0x0e7f, 0x007c, | ||
518 | 0xa065, 0x0040, 0x1ea1, 0x2008, 0x609c, 0xa005, 0x0040, 0x1e9e, | ||
519 | 0x2062, 0x609f, 0x0000, 0xa065, 0x0078, 0x1e94, 0x7848, 0x794a, | ||
520 | 0x2062, 0x007c, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, | ||
521 | 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, | ||
522 | 0x682c, 0x6022, 0x007c, 0x0e7e, 0xd7fc, 0x00c0, 0x1ebd, 0x2071, | ||
523 | 0x4f40, 0x2031, 0x4fc0, 0x0078, 0x1ec1, 0x2071, 0x4f80, 0x2031, | ||
524 | 0x51c0, 0x7050, 0xa08c, 0x0200, 0x00c0, 0x1ecb, 0xa608, 0x2d0a, | ||
525 | 0x8000, 0x7052, 0xa006, 0x0e7f, 0x007c, 0x0f7e, 0xd7fc, 0x00c0, | ||
526 | 0x1ed5, 0x2079, 0x4f40, 0x0078, 0x1ed7, 0x2079, 0x4f80, 0x1078, | ||
527 | 0x1e2b, 0x2091, 0x8000, 0x6804, 0x780a, 0xa065, 0x0040, 0x1f2b, | ||
528 | 0x0078, 0x1ee9, 0x2c00, 0x780a, 0x2060, 0x6000, 0xa065, 0x0040, | ||
529 | 0x1f2b, 0x6010, 0xa306, 0x00c0, 0x1ee2, 0x600c, 0xa206, 0x00c0, | ||
530 | 0x1ee2, 0x2c28, 0x784c, 0xac06, 0x00c0, 0x1ef8, 0x0078, 0x1f28, | ||
531 | 0x6804, 0xac06, 0x00c0, 0x1f06, 0x6000, 0x2060, 0x6806, 0xa005, | ||
532 | 0x00c0, 0x1f06, 0x6803, 0x0000, 0x0078, 0x1f10, 0x6400, 0x7808, | ||
533 | 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1f10, 0x2c00, 0x6802, | ||
534 | 0x2560, 0x0f7f, 0x1078, 0x1ea2, 0x0f7e, 0x601b, 0x0005, 0x6023, | ||
535 | 0x0020, 0x0f7f, 0x1078, 0x2064, 0x0f7e, 0x7908, 0x8109, 0x790a, | ||
536 | 0x6810, 0x8001, 0x6812, 0x00c0, 0x1f28, 0x7810, 0xc0a5, 0x7812, | ||
537 | 0x2001, 0xffff, 0xa005, 0x0f7f, 0x007c, 0x077e, 0x2700, 0x2039, | ||
538 | 0x0000, 0xd0fc, 0x0040, 0x1f35, 0xc7fd, 0x2041, 0x0021, 0x2049, | ||
539 | 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x1e46, 0x8738, | ||
540 | 0xa784, 0x001f, 0x00c0, 0x1f3d, 0xa7bc, 0xff00, 0x873f, 0x8738, | ||
541 | 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1f3d, 0x2091, 0x8001, 0x077f, | ||
542 | 0x007c, 0x786c, 0x2009, 0x9774, 0x210c, 0xa10d, 0x0040, 0x1f5b, | ||
543 | 0xa065, 0x0078, 0x23dc, 0x2061, 0x0000, 0x6018, 0xd084, 0x00c0, | ||
544 | 0x1f7b, 0x7810, 0xd08c, 0x0040, 0x1f6c, 0xc08c, 0x7812, 0xc7fc, | ||
545 | 0x2069, 0x4f40, 0x0078, 0x1f71, 0xc08d, 0x7812, 0x2069, 0x4f80, | ||
546 | 0xc7fd, 0x2091, 0x8000, 0x681c, 0x681f, 0x0000, 0x2091, 0x8001, | ||
547 | 0xa005, 0x00c0, 0x1f7c, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1f82, | ||
548 | 0x1078, 0x29b2, 0x0079, 0x1f84, 0x1f94, 0x1f97, 0x1f9d, 0x1fa1, | ||
549 | 0x1f95, 0x1fa5, 0x1f95, 0x1f95, 0x1f95, 0x1fab, 0x1fdc, 0x1fe0, | ||
550 | 0x1fe6, 0x1ffb, 0x1f95, 0x1f95, 0x007c, 0x1078, 0x29b2, 0x1078, | ||
551 | 0x1f2d, 0x2001, 0x8001, 0x0078, 0x2007, 0x2001, 0x8003, 0x0078, | ||
552 | 0x2007, 0x2001, 0x8004, 0x0078, 0x2007, 0x1078, 0x1f2d, 0x2001, | ||
553 | 0x8006, 0x0078, 0x2007, 0x2091, 0x8000, 0x077e, 0xd7fc, 0x00c0, | ||
554 | 0x1fb7, 0x2069, 0x4f40, 0x2039, 0x0009, 0x0078, 0x1fbb, 0x2069, | ||
555 | 0x4f80, 0x2039, 0x0009, 0x6800, 0xa086, 0x0000, 0x0040, 0x1fc5, | ||
556 | 0x007f, 0x6f1e, 0x2091, 0x8001, 0x007c, 0x6874, 0x077f, 0xa0bc, | ||
557 | 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, | ||
558 | 0x1e46, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1fcf, 0x2091, 0x8001, | ||
559 | 0x2001, 0x800a, 0x0078, 0x2007, 0x2001, 0x800c, 0x0078, 0x2007, | ||
560 | 0x1078, 0x1f2d, 0x2001, 0x800d, 0x0078, 0x2007, 0x7814, 0xd0e4, | ||
561 | 0x00c0, 0x1ff9, 0xd0ec, 0x0040, 0x1ff3, 0xd7fc, 0x0040, 0x1ff3, | ||
562 | 0x78e4, 0x0078, 0x1ff4, 0x78e0, 0x70c6, 0x2001, 0x800e, 0x0078, | ||
563 | 0x2007, 0x0078, 0x1f95, 0xd7fc, 0x0040, 0x2001, 0x78ec, 0x0078, | ||
564 | 0x2002, 0x78e8, 0x70c6, 0x2001, 0x800f, 0x0078, 0x2007, 0x70c2, | ||
565 | 0xd7fc, 0x00c0, 0x200f, 0x70db, 0x0000, 0x0078, 0x2011, 0x70db, | ||
566 | 0x0001, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, | ||
567 | 0xac80, 0x0001, 0x81ff, 0x0040, 0x2043, 0x2099, 0x0030, 0x20a0, | ||
568 | 0x700c, 0xa084, 0x03ff, 0x0040, 0x2025, 0x7018, 0x007e, 0x701c, | ||
569 | 0x007e, 0x7020, 0x007e, 0x7024, 0x007e, 0x7112, 0x81ac, 0x721a, | ||
570 | 0x731e, 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, | ||
571 | 0x800b, 0x00c8, 0x2037, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, | ||
572 | 0x2043, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004, 0x007f, | ||
573 | 0x7026, 0x007f, 0x7022, 0x007f, 0x701e, 0x007f, 0x701a, 0x007c, | ||
574 | 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x6803, 0xfd00, | ||
575 | 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, | ||
576 | 0x8109, 0x00c0, 0x2054, 0x007c, 0x6004, 0x6086, 0x2c08, 0x2063, | ||
577 | 0x0000, 0x7868, 0xa005, 0x796a, 0x0040, 0x2071, 0x2c02, 0x0078, | ||
578 | 0x2072, 0x796e, 0x007c, 0x0c7e, 0x2061, 0x4f00, 0x6887, 0x0103, | ||
579 | 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x2083, | ||
580 | 0x2d02, 0x0078, 0x2084, 0x616e, 0x0c7f, 0x007c, 0x2091, 0x8000, | ||
581 | 0x2c04, 0x786e, 0xa005, 0x00c0, 0x208e, 0x786a, 0x2091, 0x8001, | ||
582 | 0x609c, 0xa005, 0x0040, 0x20a7, 0x0c7e, 0x2060, 0x2008, 0x609c, | ||
583 | 0xa005, 0x0040, 0x20a3, 0x2062, 0x609f, 0x0000, 0xa065, 0x609c, | ||
584 | 0xa005, 0x00c0, 0x209b, 0x7848, 0x794a, 0x2062, 0x0c7f, 0x7848, | ||
585 | 0x2062, 0x609f, 0x0000, 0xac85, 0x0000, 0x00c0, 0x20b1, 0x1078, | ||
586 | 0x29b2, 0x784a, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, | ||
587 | 0x818e, 0x00c8, 0x20bc, 0xa200, 0x00f0, 0x20b7, 0x8086, 0x818e, | ||
588 | 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x20e2, 0xa11a, | ||
589 | 0x00c8, 0x20e2, 0x8213, 0x818d, 0x0048, 0x20d5, 0xa11a, 0x00c8, | ||
590 | 0x20d6, 0x00f0, 0x20ca, 0x0078, 0x20da, 0xa11a, 0x2308, 0x8210, | ||
591 | 0x00f0, 0x20ca, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, | ||
592 | 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x20de, | ||
593 | 0x7d74, 0x70d0, 0xa506, 0x0040, 0x21ce, 0x7810, 0x2050, 0x7800, | ||
594 | 0xd08c, 0x0040, 0x210a, 0xdaec, 0x0040, 0x210a, 0x0e7e, 0x2091, | ||
595 | 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x2107, 0x7008, | ||
596 | 0x0e7f, 0xa086, 0x0008, 0x0040, 0x210a, 0x0078, 0x21ce, 0x0e7f, | ||
597 | 0x0078, 0x21ce, 0x1078, 0x1e04, 0x0040, 0x21ce, 0xa046, 0x7970, | ||
598 | 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, 0x2119, 0x0078, | ||
599 | 0x2120, 0x72d0, 0xa206, 0x0040, 0x2120, 0x8840, 0x2009, 0x0080, | ||
600 | 0x0c7e, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, | ||
601 | 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0040, 0x2132, | ||
602 | 0x1078, 0x1e04, 0x7008, 0xd0fc, 0x0040, 0x2132, 0x7007, 0x0002, | ||
603 | 0x2091, 0x8001, 0xa08c, 0x01e0, 0x00c0, 0x2169, 0x53a5, 0x8cff, | ||
604 | 0x00c0, 0x2147, 0x88ff, 0x0040, 0x21b8, 0x0078, 0x2151, 0x2c00, | ||
605 | 0x788e, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5, 0x0078, | ||
606 | 0x21b8, 0xa046, 0x7218, 0x731c, 0xdac4, 0x0040, 0x2159, 0x7420, | ||
607 | 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3, 0x0000, 0xa5ab, | ||
608 | 0x0000, 0x721a, 0x731e, 0xdac4, 0x0040, 0x2169, 0x7422, 0x7526, | ||
609 | 0xa006, 0x7007, 0x0004, 0x0040, 0x21b8, 0x8cff, 0x0040, 0x2172, | ||
610 | 0x1078, 0x1e0d, 0x0c7f, 0x1078, 0x1e0d, 0xa046, 0x7888, 0x8000, | ||
611 | 0x788a, 0xa086, 0x0002, 0x0040, 0x2198, 0x7a7c, 0x7b78, 0xdac4, | ||
612 | 0x0040, 0x2184, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004, 0x8004, | ||
613 | 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x721a, | ||
614 | 0x731e, 0xdac4, 0x0040, 0x21ce, 0x7422, 0x7526, 0x0078, 0x21ce, | ||
615 | 0x6014, 0xd0fc, 0x00c0, 0x21a0, 0x2069, 0x4f40, 0x0078, 0x21a2, | ||
616 | 0x2069, 0x4f80, 0x2091, 0x8000, 0x681f, 0x0002, 0x88ff, 0x0040, | ||
617 | 0x21ae, 0xa046, 0x788c, 0x2060, 0x0078, 0x2198, 0x788b, 0x0000, | ||
618 | 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0078, 0x21ce, | ||
619 | 0x0c7f, 0x788b, 0x0000, 0x1078, 0x238d, 0x6004, 0xa084, 0x000f, | ||
620 | 0x1078, 0x21cf, 0x88ff, 0x0040, 0x21cc, 0x788c, 0x2060, 0x6004, | ||
621 | 0xa084, 0x000f, 0x1078, 0x21cf, 0x0078, 0x20e8, 0x007c, 0x0079, | ||
622 | 0x21d1, 0x21e1, 0x21ff, 0x221d, 0x21e1, 0x222e, 0x21f2, 0x21e1, | ||
623 | 0x21e1, 0x21e1, 0x21fd, 0x221b, 0x21e1, 0x21e1, 0x21e1, 0x21e1, | ||
624 | 0x21e1, 0x2039, 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705, | ||
625 | 0x600a, 0x1078, 0x2271, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078, | ||
626 | 0x2377, 0x007c, 0x78bc, 0xd0c4, 0x0040, 0x21f8, 0x0078, 0x21e1, | ||
627 | 0x601c, 0xc0bd, 0x601e, 0x0078, 0x2205, 0x1078, 0x23bf, 0x78bc, | ||
628 | 0xd0c4, 0x0040, 0x2205, 0x0078, 0x21e1, 0x78bf, 0x0000, 0x6004, | ||
629 | 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0040, 0x2218, 0x1078, | ||
630 | 0x2271, 0x0040, 0x2218, 0x78bc, 0xc0c5, 0x78be, 0x0078, 0x221a, | ||
631 | 0x0078, 0x2290, 0x007c, 0x1078, 0x23bb, 0x78bc, 0xa08c, 0x0e00, | ||
632 | 0x00c0, 0x2225, 0xd0c4, 0x00c0, 0x2227, 0x0078, 0x21e1, 0x1078, | ||
633 | 0x2271, 0x00c0, 0x222d, 0x0078, 0x2290, 0x007c, 0x78bc, 0xd0c4, | ||
634 | 0x0040, 0x2234, 0x0078, 0x21e1, 0x78bf, 0x0000, 0x6714, 0x2011, | ||
635 | 0x0001, 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x2254, | ||
636 | 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040, 0x2254, | ||
637 | 0xa7bc, 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, | ||
638 | 0x0040, 0x2254, 0x0078, 0x226e, 0x1078, 0x1e2b, 0x2d00, 0x2091, | ||
639 | 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde, | ||
640 | 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x00f0, 0x2257, 0x8211, | ||
641 | 0x0040, 0x226e, 0x20a9, 0x0100, 0x0078, 0x2257, 0x1078, 0x1e0d, | ||
642 | 0x007c, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6, 0x00c0, | ||
643 | 0x227c, 0x78ba, 0x0078, 0x2284, 0x689e, 0x2d00, 0x6002, 0x78b8, | ||
644 | 0xad06, 0x00c0, 0x2284, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x00c0, | ||
645 | 0x228f, 0x78bc, 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006, 0x007c, | ||
646 | 0x0e7e, 0xa02e, 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2, 0x601c, | ||
647 | 0x60a2, 0x2048, 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0040, | ||
648 | 0x22a3, 0x1078, 0x46b6, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, | ||
649 | 0x2071, 0x4f80, 0xd7fc, 0x00c0, 0x22af, 0x2071, 0x4f40, 0xa784, | ||
650 | 0x0f00, 0x800b, 0xa784, 0x001f, 0x0040, 0x22ba, 0x8003, 0x8003, | ||
651 | 0x8003, 0x8003, 0xa105, 0x71c4, 0xa168, 0x2700, 0x8007, 0xa084, | ||
652 | 0x000f, 0x8003, 0x8003, 0x8003, 0x71c8, 0xa100, 0x60c2, 0x2091, | ||
653 | 0x8000, 0x7814, 0xd0c4, 0x0040, 0x22df, 0xd0ec, 0x0040, 0x22db, | ||
654 | 0xd7fc, 0x00c0, 0x22d8, 0xd0f4, 0x00c0, 0x22e6, 0x0078, 0x22df, | ||
655 | 0xd0fc, 0x00c0, 0x22e6, 0x7810, 0xd0f4, 0x00c0, 0x22e6, 0x6e08, | ||
656 | 0xd684, 0x0040, 0x2310, 0xd9fc, 0x00c0, 0x2310, 0x2091, 0x8001, | ||
657 | 0x1078, 0x1ea2, 0x2091, 0x8000, 0x1078, 0x2064, 0x2091, 0x8001, | ||
658 | 0x7814, 0xd0e4, 0x00c0, 0x2375, 0x7814, 0xd0c4, 0x0040, 0x2375, | ||
659 | 0xd0ec, 0x0040, 0x2308, 0xd7fc, 0x00c0, 0x2303, 0xd0f4, 0x00c0, | ||
660 | 0x230c, 0x0078, 0x2375, 0xd0fc, 0x00c0, 0x230c, 0x0078, 0x2375, | ||
661 | 0x7810, 0xd0f4, 0x0040, 0x2375, 0x601b, 0x0021, 0x0078, 0x2375, | ||
662 | 0x6024, 0xa096, 0x0001, 0x00c0, 0x2317, 0x8000, 0x6026, 0x6a10, | ||
663 | 0x6814, 0xa202, 0x0048, 0x232a, 0x0040, 0x232a, 0x2091, 0x8001, | ||
664 | 0x2039, 0x0200, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078, 0x2377, | ||
665 | 0x0078, 0x2375, 0x2c08, 0xd9fc, 0x0040, 0x2352, 0x6800, 0xa065, | ||
666 | 0x0040, 0x2352, 0x6a04, 0x7000, 0xa084, 0x0002, 0x0040, 0x2348, | ||
667 | 0x704c, 0xa206, 0x00c0, 0x2348, 0x6b04, 0x2160, 0x2304, 0x6002, | ||
668 | 0xa005, 0x00c0, 0x2344, 0x6902, 0x2260, 0x6102, 0x0078, 0x235e, | ||
669 | 0x2d00, 0x2060, 0x1078, 0x2b13, 0x6e08, 0x2160, 0x6202, 0x6906, | ||
670 | 0x0078, 0x235e, 0x6800, 0x6902, 0xa065, 0x0040, 0x235a, 0x6102, | ||
671 | 0x0078, 0x235b, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160, 0xd9fc, | ||
672 | 0x0040, 0x2365, 0xa6b4, 0xfffc, 0x6e0a, 0x6810, 0x7d08, 0x8528, | ||
673 | 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, 0x0040, 0x2375, | ||
674 | 0xa6b6, 0x0040, 0x6e0a, 0x1078, 0x1eb3, 0x0e7f, 0x007c, 0x6008, | ||
675 | 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x2064, 0x2091, 0x8001, | ||
676 | 0x78b8, 0xa065, 0x0040, 0x238a, 0x609c, 0x78ba, 0x609f, 0x0000, | ||
677 | 0x0078, 0x2377, 0x78b6, 0x78ba, 0x007c, 0x7970, 0x7874, 0x2818, | ||
678 | 0xd384, 0x0040, 0x2397, 0x8000, 0xa112, 0x0048, 0x239c, 0x8000, | ||
679 | 0xa112, 0x00c8, 0x23ac, 0xc384, 0x7a7c, 0x721a, 0x7a78, 0x721e, | ||
680 | 0xdac4, 0x0040, 0x23a7, 0x7a84, 0x7222, 0x7a80, 0x7226, 0xa006, | ||
681 | 0xd384, 0x0040, 0x23ac, 0x8000, 0x7876, 0x70d2, 0x781c, 0xa005, | ||
682 | 0x0040, 0x23ba, 0x8001, 0x781e, 0x00c0, 0x23ba, 0x0068, 0x23ba, | ||
683 | 0x2091, 0x4080, 0x007c, 0x2039, 0x23d3, 0x0078, 0x23c1, 0x2039, | ||
684 | 0x23d9, 0x2704, 0xa005, 0x0040, 0x23d2, 0xac00, 0x2068, 0x6908, | ||
685 | 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, 0x680e, 0x8738, | ||
686 | 0x0078, 0x23c1, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, | ||
687 | 0x0000, 0x0015, 0x001b, 0x0000, 0x2041, 0x0000, 0x780c, 0x0079, | ||
688 | 0x23e1, 0x25b3, 0x2586, 0x23e5, 0x245e, 0x2039, 0x9774, 0x2734, | ||
689 | 0x7d10, 0x0078, 0x2405, 0x6084, 0xa086, 0x0103, 0x00c0, 0x2447, | ||
690 | 0x6114, 0x6018, 0xa105, 0x0040, 0x23fa, 0x86ff, 0x00c0, 0x2416, | ||
691 | 0x0078, 0x2447, 0x8603, 0xa080, 0x9755, 0x620c, 0x2202, 0x8000, | ||
692 | 0x6210, 0x2202, 0x1078, 0x2086, 0x8630, 0xa68e, 0x000f, 0x0040, | ||
693 | 0x24d2, 0x786c, 0xa065, 0x00c0, 0x23eb, 0x7808, 0xa602, 0x00c8, | ||
694 | 0x2416, 0xd5ac, 0x00c0, 0x2416, 0x263a, 0x007c, 0xa682, 0x0003, | ||
695 | 0x00c8, 0x24d2, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, | ||
696 | 0x00c0, 0x2442, 0x2011, 0x9755, 0x2204, 0x70c6, 0x8210, 0x2204, | ||
697 | 0x70ca, 0xd684, 0x00c0, 0x2432, 0x8210, 0x2204, 0x70da, 0x8210, | ||
698 | 0x2204, 0x70de, 0xa685, 0x8020, 0x70c2, 0x681b, 0x0001, 0x2091, | ||
699 | 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, 0x8001, 0x203b, | ||
700 | 0x0000, 0x007c, 0x7810, 0xc0ad, 0x7812, 0x0078, 0x24d2, 0x263a, | ||
701 | 0x1078, 0x25bd, 0x00c0, 0x25e0, 0x786c, 0xa065, 0x00c0, 0x23eb, | ||
702 | 0x2091, 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0040, 0x2459, | ||
703 | 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0078, 0x25e0, 0x2039, 0x9774, | ||
704 | 0x2734, 0x7d10, 0x0078, 0x247a, 0x6084, 0xa086, 0x0103, 0x00c0, | ||
705 | 0x24bb, 0x6114, 0x6018, 0xa105, 0x0040, 0x2473, 0x86ff, 0x00c0, | ||
706 | 0x248b, 0x0078, 0x24bb, 0xa680, 0x9755, 0x620c, 0x2202, 0x1078, | ||
707 | 0x2086, 0x8630, 0xa68e, 0x001e, 0x0040, 0x24d2, 0x786c, 0xa065, | ||
708 | 0x00c0, 0x2464, 0x7808, 0xa602, 0x00c8, 0x248b, 0xd5ac, 0x00c0, | ||
709 | 0x248b, 0x263a, 0x007c, 0xa682, 0x0006, 0x00c8, 0x24d2, 0x2091, | ||
710 | 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x24b6, 0x2011, | ||
711 | 0x9755, 0x2009, 0x974e, 0x26a8, 0x211c, 0x2204, 0x201a, 0x8108, | ||
712 | 0x8210, 0x00f0, 0x249c, 0xa685, 0x8030, 0x70c2, 0x681b, 0x0001, | ||
713 | 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, 0x8001, | ||
714 | 0xa006, 0x2009, 0x9775, 0x200a, 0x203a, 0x007c, 0x7810, 0xc0ad, | ||
715 | 0x7812, 0x0078, 0x24d2, 0x263a, 0x1078, 0x25bd, 0x00c0, 0x25e0, | ||
716 | 0x786c, 0xa065, 0x00c0, 0x2464, 0x2091, 0x8000, 0x7810, 0xa084, | ||
717 | 0xffcf, 0x86ff, 0x0040, 0x24cd, 0xc0ad, 0x7812, 0x2091, 0x8001, | ||
718 | 0x0078, 0x25e0, 0x2091, 0x8000, 0x7007, 0x0004, 0x7994, 0x70d4, | ||
719 | 0xa102, 0x0048, 0x24e3, 0x0040, 0x24ed, 0x7b90, 0xa302, 0x00c0, | ||
720 | 0x24ed, 0x0078, 0x24e6, 0x8002, 0x00c0, 0x24ed, 0x263a, 0x7810, | ||
721 | 0xc0ad, 0x7812, 0x2091, 0x8001, 0x007c, 0xa184, 0xff00, 0x0040, | ||
722 | 0x24fa, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, | ||
723 | 0x0078, 0x24fd, 0x8107, 0x8004, 0x8004, 0x7a9c, 0xa210, 0x721a, | ||
724 | 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4, 0x0040, 0x250d, 0x7aa4, | ||
725 | 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, 0x0030, 0x7003, | ||
726 | 0x0000, 0x2009, 0x9754, 0x260a, 0x8109, 0x2198, 0x2104, 0xd084, | ||
727 | 0x0040, 0x251b, 0x8633, 0xa6b0, 0x0002, 0x26a8, 0x53a6, 0x8603, | ||
728 | 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000, 0xa10a, 0x00c8, | ||
729 | 0x252a, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, 0x0040, 0x2539, | ||
730 | 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, | ||
731 | 0x253c, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, | ||
732 | 0xa211, 0xd4c4, 0x0040, 0x2548, 0x7b84, 0xa319, 0x7c80, 0xa421, | ||
733 | 0x7008, 0xd0fc, 0x0040, 0x2548, 0xa084, 0x01e0, 0x0040, 0x256d, | ||
734 | 0x7d10, 0x2031, 0x9754, 0x2634, 0x78a8, 0x8000, 0x78aa, 0xd08c, | ||
735 | 0x00c0, 0x2562, 0x7007, 0x0006, 0x7004, 0xd094, 0x00c0, 0x255c, | ||
736 | 0x0078, 0x24d4, 0x2069, 0x4f47, 0x206b, 0x0003, 0x78ac, 0xa085, | ||
737 | 0x0300, 0x78ae, 0xa006, 0x0078, 0x2576, 0x2030, 0x75d6, 0x2091, | ||
738 | 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091, 0x8001, | ||
739 | 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, 0x711a, 0x721e, | ||
740 | 0xd5c4, 0x0040, 0x2585, 0x7322, 0x7426, 0x007c, 0x6084, 0xa086, | ||
741 | 0x0103, 0x00c0, 0x25a9, 0x6114, 0x6018, 0xa105, 0x00c0, 0x25a9, | ||
742 | 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x25a9, 0x600c, 0x70c6, | ||
743 | 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, 0x4080, | ||
744 | 0x1078, 0x2086, 0x0068, 0x25a8, 0x786c, 0xa065, 0x00c0, 0x2586, | ||
745 | 0x007c, 0x1078, 0x25bd, 0x00c0, 0x25e0, 0x786c, 0xa065, 0x00c0, | ||
746 | 0x2586, 0x0078, 0x25e0, 0x1078, 0x25bd, 0x00c0, 0x25e0, 0x786c, | ||
747 | 0xa065, 0x00c0, 0x25b3, 0x0078, 0x25e0, 0x6084, 0xa086, 0x0103, | ||
748 | 0x00c0, 0x25d1, 0x6018, 0xc0fc, 0x601a, 0xa086, 0x0004, 0x00c0, | ||
749 | 0x25d1, 0x7804, 0xd0a4, 0x0040, 0x25d1, 0x1078, 0x2086, 0xa006, | ||
750 | 0x007c, 0x1078, 0x25e6, 0x00c0, 0x25d8, 0xa085, 0x0001, 0x007c, | ||
751 | 0x1078, 0x25f5, 0x00c0, 0x25de, 0x2041, 0x0001, 0x7d10, 0x007c, | ||
752 | 0x88ff, 0x0040, 0x25e5, 0x2091, 0x4080, 0x007c, 0x7b90, 0x7994, | ||
753 | 0x70d4, 0xa102, 0x00c0, 0x25ef, 0xa385, 0x0000, 0x007c, 0x0048, | ||
754 | 0x25f3, 0xa302, 0x007c, 0x8002, 0x007c, 0x7810, 0xd0ec, 0x0040, | ||
755 | 0x260d, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, | ||
756 | 0x00c0, 0x260a, 0x7008, 0x0e7f, 0xa086, 0x0008, 0x0040, 0x260d, | ||
757 | 0x0078, 0x265e, 0x0e7f, 0x0078, 0x265e, 0xa184, 0xff00, 0x0040, | ||
758 | 0x261a, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, | ||
759 | 0x0078, 0x261d, 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98, 0x7ca4, | ||
760 | 0x7da0, 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0018, | ||
761 | 0x6028, 0xa005, 0x0040, 0x262e, 0x2009, 0x0040, 0x1078, 0x1dbb, | ||
762 | 0x0040, 0x2650, 0x78a8, 0x8000, 0x78aa, 0xd08c, 0x00c0, 0x265e, | ||
763 | 0x6014, 0xd0fc, 0x00c0, 0x2640, 0x2069, 0x4f40, 0x0078, 0x2642, | ||
764 | 0x2069, 0x4f80, 0x2091, 0x8000, 0x681f, 0x0003, 0x78ab, 0x0000, | ||
765 | 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, 0x0078, 0x265e, | ||
766 | 0x78ab, 0x0000, 0x1078, 0x2086, 0x7990, 0x7894, 0x8000, 0xa10a, | ||
767 | 0x00c8, 0x265b, 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071, 0x0010, | ||
768 | 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x266a, 0x2009, 0x4f59, | ||
769 | 0x0078, 0x266c, 0x2009, 0x4f99, 0x2091, 0x8000, 0x200a, 0x0f7e, | ||
770 | 0xd7fc, 0x00c0, 0x2683, 0x2009, 0x4f40, 0x2001, 0x4f04, 0x2004, | ||
771 | 0xd0ec, 0x0040, 0x267f, 0x2079, 0x0100, 0x0078, 0x2687, 0x2079, | ||
772 | 0x0200, 0x0078, 0x2687, 0x2009, 0x4f80, 0x2079, 0x0100, 0x2104, | ||
773 | 0xa086, 0x0000, 0x00c0, 0x26a0, 0xd7fc, 0x00c0, 0x2693, 0x2009, | ||
774 | 0x4f45, 0x0078, 0x2695, 0x2009, 0x4f85, 0x2104, 0xa005, 0x00c0, | ||
775 | 0x26a0, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x26a0, 0x781b, 0x0045, | ||
776 | 0x0f7f, 0x007c, 0x2009, 0x0002, 0x2069, 0x4f00, 0x6810, 0xd0ec, | ||
777 | 0x00c0, 0x270f, 0x2071, 0x4f80, 0x2079, 0x0100, 0x2021, 0x51bf, | ||
778 | 0x784b, 0x000f, 0x2019, 0x44a7, 0xd184, 0x0040, 0x26c3, 0x6810, | ||
779 | 0xd0ec, 0x0040, 0x26bf, 0x20a1, 0x012b, 0x0078, 0x26c5, 0x20a1, | ||
780 | 0x022b, 0x0078, 0x26c5, 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040, | ||
781 | 0x26d2, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318, | ||
782 | 0x0078, 0x26c5, 0x789b, 0x0020, 0x20a9, 0x0010, 0x6814, 0xd0e4, | ||
783 | 0x0040, 0x26e2, 0x78af, 0x0000, 0x78af, 0x9020, 0x00f0, 0x26da, | ||
784 | 0x0078, 0x26e8, 0x78af, 0x0000, 0x78af, 0x8020, 0x00f0, 0x26e2, | ||
785 | 0x7003, 0x0000, 0x017e, 0xd18c, 0x2009, 0x0000, 0x0040, 0x26f1, | ||
786 | 0xc1bd, 0x1078, 0x28e2, 0x017f, 0x7020, 0xa084, 0x000f, 0x007e, | ||
787 | 0x6814, 0xd0e4, 0x007f, 0x00c0, 0x2701, 0xa085, 0x6340, 0x0078, | ||
788 | 0x2703, 0xa085, 0x62c0, 0x7806, 0x780f, 0x9200, 0x7843, 0x00d8, | ||
789 | 0x7853, 0x0080, 0x780b, 0x0008, 0x7456, 0x7053, 0x0000, 0x8109, | ||
790 | 0x0040, 0x2722, 0x2071, 0x4f40, 0x6810, 0xd0ec, 0x0040, 0x271c, | ||
791 | 0x2079, 0x0100, 0x0078, 0x271e, 0x2079, 0x0200, 0x2021, 0x4fbf, | ||
792 | 0x0078, 0x26b0, 0x007c, 0x017e, 0xd1bc, 0x00c0, 0x2737, 0x007e, | ||
793 | 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2733, 0x2011, | ||
794 | 0x0101, 0x0078, 0x2739, 0x2011, 0x0201, 0x0078, 0x2739, 0x2011, | ||
795 | 0x0101, 0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, | ||
796 | 0x017f, 0x1078, 0x28e2, 0x007c, 0xd3fc, 0x00c0, 0x2757, 0x007e, | ||
797 | 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2753, 0x2011, | ||
798 | 0x0101, 0x0078, 0x2759, 0x2011, 0x0201, 0x0078, 0x2759, 0x2011, | ||
799 | 0x0101, 0x20a9, 0x0009, 0x810b, 0x00f0, 0x275b, 0xa18c, 0x0e00, | ||
800 | 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2019, 0x0002, | ||
801 | 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x0040, 0x2773, 0x8319, 0x2009, | ||
802 | 0x0101, 0x0078, 0x2775, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, | ||
803 | 0x00f0, 0x2777, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, | ||
804 | 0x200a, 0x8319, 0x0040, 0x2788, 0x2009, 0x0201, 0x0078, 0x2775, | ||
805 | 0x007c, 0xd3fc, 0x00c0, 0x279c, 0x007e, 0x2001, 0x4f04, 0x2004, | ||
806 | 0xd0ec, 0x007f, 0x0040, 0x2798, 0x2011, 0x0101, 0x0078, 0x279e, | ||
807 | 0x2011, 0x0201, 0x0078, 0x279e, 0x2011, 0x0101, 0x20a9, 0x000c, | ||
808 | 0x810b, 0x00f0, 0x27a0, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, | ||
809 | 0xa105, 0x2012, 0x007c, 0xd3fc, 0x00c0, 0x27be, 0x007e, 0x2001, | ||
810 | 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x27ba, 0x2011, 0x0102, | ||
811 | 0x0078, 0x27c0, 0x2011, 0x0202, 0x0078, 0x27c0, 0x2011, 0x0102, | ||
812 | 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x0c7e, 0xd1bc, | ||
813 | 0x00c0, 0x27da, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, | ||
814 | 0x0040, 0x27d6, 0x2061, 0x0100, 0x0078, 0x27dc, 0x2061, 0x0200, | ||
815 | 0x0078, 0x27dc, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, | ||
816 | 0x0020, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, | ||
817 | 0x00c0, 0x27fa, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, | ||
818 | 0x0040, 0x27f6, 0x2061, 0x0100, 0x0078, 0x27fc, 0x2061, 0x0200, | ||
819 | 0x0078, 0x27fc, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, | ||
820 | 0x0022, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, | ||
821 | 0x0c7e, 0xd1bc, 0x00c0, 0x281c, 0x007e, 0x2001, 0x4f04, 0x2004, | ||
822 | 0xd0ec, 0x007f, 0x0040, 0x2818, 0x2061, 0x0100, 0x0078, 0x281e, | ||
823 | 0x2061, 0x0200, 0x0078, 0x281e, 0x2061, 0x0100, 0xc1bc, 0x8103, | ||
824 | 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, | ||
825 | 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x283e, 0x007e, 0x2001, | ||
826 | 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x283a, 0x2061, 0x0100, | ||
827 | 0x0078, 0x2840, 0x2061, 0x0200, 0x0078, 0x2840, 0x2061, 0x0100, | ||
828 | 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0xa28c, | ||
829 | 0x0020, 0x0040, 0x284e, 0xc2ac, 0xa39d, 0x4000, 0xc3fc, 0xd3b4, | ||
830 | 0x00c0, 0x2853, 0xc3fd, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, | ||
831 | 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, | ||
832 | 0x0040, 0x28c0, 0xd1fc, 0x0040, 0x2869, 0x2061, 0x96d0, 0x0078, | ||
833 | 0x286b, 0x2061, 0x95c0, 0x1078, 0x28c8, 0x0040, 0x28a2, 0x20a9, | ||
834 | 0x0101, 0xd1fc, 0x0040, 0x2878, 0x2061, 0x95d0, 0x0078, 0x287a, | ||
835 | 0x2061, 0x94c0, 0x0c7e, 0x1078, 0x28c8, 0x0040, 0x2885, 0x0c7f, | ||
836 | 0x8c60, 0x00f0, 0x287a, 0x0078, 0x28c0, 0x007f, 0xd1fc, 0x0040, | ||
837 | 0x288f, 0xa082, 0x95d0, 0x2071, 0x4f80, 0x0078, 0x2893, 0xa082, | ||
838 | 0x94c0, 0x2071, 0x4f40, 0x707a, 0x7176, 0x2138, 0x2001, 0x0004, | ||
839 | 0x7066, 0x7083, 0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x1078, 0x2663, | ||
840 | 0x0078, 0x28bc, 0xd1fc, 0x00c0, 0x28a9, 0x2071, 0x4f40, 0x0078, | ||
841 | 0x28ab, 0x2071, 0x4f80, 0x6020, 0xc0dd, 0x6022, 0x7176, 0x2138, | ||
842 | 0x2c00, 0x707e, 0x2001, 0x0006, 0x7066, 0x7083, 0x000f, 0x71d4, | ||
843 | 0xc1dc, 0x71d6, 0x1078, 0x2663, 0x2001, 0x0000, 0x0078, 0x28c2, | ||
844 | 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, | ||
845 | 0x2c04, 0xa005, 0x0040, 0x28df, 0x2060, 0x6010, 0xa306, 0x00c0, | ||
846 | 0x28dc, 0x600c, 0xa206, 0x00c0, 0x28dc, 0x6014, 0xa106, 0x00c0, | ||
847 | 0x28dc, 0xa006, 0x0078, 0x28e1, 0x6000, 0x0078, 0x28c9, 0xa085, | ||
848 | 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0xd1bc, 0x00c0, 0x28fa, | ||
849 | 0x2079, 0x4f40, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, | ||
850 | 0x0040, 0x28f6, 0x2071, 0x0100, 0x0078, 0x28fe, 0x2071, 0x0200, | ||
851 | 0x0078, 0x28fe, 0x2079, 0x4f80, 0x2071, 0x0100, 0x7920, 0xa18c, | ||
852 | 0x000f, 0x70ec, 0xd0c4, 0x00c0, 0x2908, 0x017f, 0x0078, 0x2923, | ||
853 | 0x810b, 0x810b, 0x810b, 0x810b, 0x007f, 0xd0bc, 0x00c0, 0x2920, | ||
854 | 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x291c, | ||
855 | 0xa18d, 0x0f00, 0x0078, 0x2922, 0xa18d, 0x0f00, 0x0078, 0x2922, | ||
856 | 0xa18d, 0x0800, 0x2104, 0x0e7f, 0x0f7f, 0x007c, 0x0e7e, 0x2001, | ||
857 | 0x4f01, 0x2004, 0xd0ac, 0x00c0, 0x29a3, 0x68e4, 0xd0ac, 0x0040, | ||
858 | 0x29a3, 0xa084, 0x0006, 0x00c0, 0x29a3, 0x6014, 0xd0fc, 0x00c0, | ||
859 | 0x293d, 0x2071, 0x53c0, 0x0078, 0x293f, 0x2071, 0x5440, 0x8007, | ||
860 | 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084, | ||
861 | 0x000a, 0x00c0, 0x29a3, 0x7108, 0xa194, 0xff00, 0x0040, 0x29a3, | ||
862 | 0xa18c, 0x00ff, 0x2001, 0x000a, 0xa106, 0x0040, 0x2972, 0x2001, | ||
863 | 0x000c, 0xa106, 0x0040, 0x2976, 0x2001, 0x0012, 0xa106, 0x0040, | ||
864 | 0x297a, 0x2001, 0x0014, 0xa106, 0x0040, 0x297e, 0x2001, 0x0019, | ||
865 | 0xa106, 0x0040, 0x2982, 0x2001, 0x0032, 0xa106, 0x0040, 0x2986, | ||
866 | 0x0078, 0x298a, 0x2009, 0x000c, 0x0078, 0x298c, 0x2009, 0x0012, | ||
867 | 0x0078, 0x298c, 0x2009, 0x0014, 0x0078, 0x298c, 0x2009, 0x0019, | ||
868 | 0x0078, 0x298c, 0x2009, 0x0020, 0x0078, 0x298c, 0x2009, 0x003f, | ||
869 | 0x0078, 0x298c, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x2071, | ||
870 | 0x4f00, 0x7004, 0xd0bc, 0x0040, 0x29a3, 0x6014, 0xd0fc, 0x00c0, | ||
871 | 0x299e, 0x70ea, 0x2071, 0x4f40, 0x0078, 0x29a1, 0x70ee, 0x2071, | ||
872 | 0x4f80, 0x701f, 0x000d, 0x0e7f, 0x007c, 0x2001, 0x4f05, 0x2004, | ||
873 | 0xd0e4, 0x00c0, 0x29b1, 0x7804, 0xa084, 0xff1f, 0xa085, 0x6340, | ||
874 | 0x7806, 0x007c, 0x0068, 0x29b2, 0x2091, 0x8000, 0x2071, 0x0000, | ||
875 | 0x007e, 0x7018, 0xd084, 0x00c0, 0x29b9, 0x007f, 0x2071, 0x0010, | ||
876 | 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x080f, 0x70df, | ||
877 | 0x000b, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, | ||
878 | 0x29cf, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708e, 0x7592, | ||
879 | 0x7496, 0x769a, 0x779e, 0xa594, 0x003f, 0xd4f4, 0x0040, 0x29e6, | ||
880 | 0xa784, 0x007d, 0x00c0, 0x441d, 0x1078, 0x29b2, 0xa49c, 0x000f, | ||
881 | 0xa382, 0x0004, 0x0050, 0x29f1, 0xa3a6, 0x0007, 0x00c0, 0x29b2, | ||
882 | 0x2418, 0x8507, 0xa084, 0x000f, 0x0079, 0x29f6, 0x3071, 0x3162, | ||
883 | 0x318d, 0x33ff, 0x37e8, 0x3862, 0x3917, 0x39a8, 0x3a96, 0x3b85, | ||
884 | 0x2a09, 0x2a06, 0x2e42, 0x2f65, 0x37b9, 0x2a06, 0x1078, 0x29b2, | ||
885 | 0x007c, 0xa006, 0x0078, 0x2a13, 0x7808, 0xc08d, 0x780a, 0xa006, | ||
886 | 0x7002, 0x704e, 0x7046, 0x70d2, 0x7060, 0xa005, 0x00c0, 0x2b79, | ||
887 | 0x7064, 0xa084, 0x0007, 0x0079, 0x2a1d, 0x2a25, 0x2a98, 0x2aa1, | ||
888 | 0x2aac, 0x2ab7, 0x2b5f, 0x2ac2, 0x2a98, 0x7830, 0xd0bc, 0x00c0, | ||
889 | 0x2a08, 0x71d4, 0xd1bc, 0x00c0, 0x2a08, 0xd1b4, 0x00c0, 0x2a75, | ||
890 | 0x70a4, 0xa086, 0x0001, 0x0040, 0x2a08, 0x70b4, 0xa06d, 0x6800, | ||
891 | 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, 0x7baa, 0x6808, 0xa045, | ||
892 | 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0040, 0x2a4b, | ||
893 | 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0010, | ||
894 | 0x0078, 0x2cd3, 0x7060, 0xa005, 0x00c0, 0x2a08, 0x0c7e, 0x0d7e, | ||
895 | 0x70b4, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, | ||
896 | 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, | ||
897 | 0x0001, 0x0040, 0x2a6e, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, | ||
898 | 0x6e1c, 0x2001, 0x0020, 0x0078, 0x2cd3, 0x1078, 0x43b0, 0x00c0, | ||
899 | 0x2a08, 0x781b, 0x005b, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, | ||
900 | 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, | ||
901 | 0x68bc, 0x7042, 0xc1b4, 0x71d6, 0x70b8, 0xa065, 0x68c0, 0x705a, | ||
902 | 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, | ||
903 | 0x1078, 0x43b0, 0x00c0, 0x2aa0, 0x781b, 0x0047, 0x7003, 0x0004, | ||
904 | 0x007c, 0x1078, 0x43b0, 0x00c0, 0x2aab, 0x2011, 0x000c, 0x1078, | ||
905 | 0x2ad2, 0x7003, 0x0004, 0x007c, 0x1078, 0x43b0, 0x00c0, 0x2ab6, | ||
906 | 0x2011, 0x0006, 0x1078, 0x2ad2, 0x7003, 0x0004, 0x007c, 0x1078, | ||
907 | 0x43b0, 0x00c0, 0x2ac1, 0x2011, 0x000d, 0x1078, 0x2ad2, 0x7003, | ||
908 | 0x0004, 0x007c, 0x1078, 0x43b0, 0x00c0, 0x2ad1, 0x2011, 0x0006, | ||
909 | 0x1078, 0x2ad2, 0x707c, 0x707f, 0x0000, 0x2068, 0x704e, 0x7003, | ||
910 | 0x0001, 0x007c, 0x7174, 0xc1fc, 0x8107, 0x7882, 0x789b, 0x0010, | ||
911 | 0xa286, 0x000c, 0x00c0, 0x2ae1, 0x7aaa, 0x2001, 0x0001, 0x0078, | ||
912 | 0x2af6, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286, 0x000d, | ||
913 | 0x0040, 0x2aef, 0x7aaa, 0x2001, 0x0002, 0x0078, 0x2af6, 0x78ab, | ||
914 | 0x0020, 0x7178, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b, 0x0060, | ||
915 | 0x78aa, 0x785b, 0x0004, 0x781b, 0x0116, 0x1078, 0x43d3, 0x7083, | ||
916 | 0x000f, 0x70d4, 0xd0b4, 0x0040, 0x2b12, 0xc0b4, 0x70d6, 0x0c7e, | ||
917 | 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, | ||
918 | 0x601a, 0x0c7f, 0x007c, 0x7014, 0xa005, 0x00c0, 0x2b21, 0x70d4, | ||
919 | 0xd0b4, 0x0040, 0x2b22, 0x70b8, 0xac06, 0x00c0, 0x2b22, 0x1078, | ||
920 | 0x2b01, 0x007c, 0x017e, 0x71a4, 0xa186, 0x0001, 0x0040, 0x2b54, | ||
921 | 0x0d7e, 0x027e, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b4, 0x2068, | ||
922 | 0x6800, 0xac06, 0x0040, 0x2b3b, 0x8211, 0x0040, 0x2b52, 0x1078, | ||
923 | 0x2b56, 0x0078, 0x2b30, 0x0c7e, 0x2100, 0x2011, 0x0001, 0xa212, | ||
924 | 0x70b4, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef, 0x600a, | ||
925 | 0x8211, 0x0040, 0x2b4f, 0x1078, 0x2b56, 0x0078, 0x2b42, 0x70a7, | ||
926 | 0x0001, 0x0c7f, 0x027f, 0x0d7f, 0x017f, 0x007c, 0xade8, 0x0005, | ||
927 | 0x70ac, 0xad06, 0x00c0, 0x2b5e, 0x70a8, 0x2068, 0x007c, 0x1078, | ||
928 | 0x43b0, 0x00c0, 0x2a08, 0x707c, 0x2068, 0x7774, 0x1078, 0x424e, | ||
929 | 0x2c50, 0x1078, 0x4492, 0x789b, 0x0010, 0x6814, 0xa084, 0x001f, | ||
930 | 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, 0x0004, 0x0078, | ||
931 | 0x2cd9, 0x1078, 0x43b0, 0x00c0, 0x2a08, 0x789b, 0x0010, 0x7060, | ||
932 | 0x2068, 0x6f14, 0x70d4, 0xd0b4, 0x0040, 0x2b93, 0xc0b4, 0x70d6, | ||
933 | 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, | ||
934 | 0x8001, 0x601a, 0x0c7f, 0x1078, 0x424e, 0x2c50, 0x1078, 0x4492, | ||
935 | 0x6824, 0xa005, 0x0040, 0x2ba4, 0xa082, 0x0006, 0x0048, 0x2ba2, | ||
936 | 0x0078, 0x2ba4, 0x6827, 0x0005, 0x6814, 0xa084, 0x001f, 0xc0bd, | ||
937 | 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003, 0x0078, | ||
938 | 0x2cd9, 0xc28d, 0x72d6, 0x72c0, 0xa200, 0xa015, 0x7154, 0x8108, | ||
939 | 0xa12a, 0x0048, 0x2bbc, 0x71c0, 0x2164, 0x6504, 0x85ff, 0x00c0, | ||
940 | 0x2bd3, 0x7156, 0x8421, 0x00c0, 0x2bb7, 0x70d4, 0xd08c, 0x0040, | ||
941 | 0x2bcf, 0x70d0, 0xa005, 0x00c0, 0x2bcf, 0x70d3, 0x000a, 0x007c, | ||
942 | 0x2200, 0x0078, 0x2bc1, 0x70d4, 0xc08c, 0x70d6, 0x70d3, 0x0000, | ||
943 | 0x6034, 0xa005, 0x00c0, 0x2bd0, 0x6708, 0xa784, 0x073f, 0x0040, | ||
944 | 0x2c02, 0xd7d4, 0x00c0, 0x2bd0, 0xa784, 0x0021, 0x00c0, 0x2bd0, | ||
945 | 0xa784, 0x0002, 0x0040, 0x2bf3, 0xa784, 0x0004, 0x0040, 0x2bd0, | ||
946 | 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218, 0x00c0, 0x2bd0, 0xa784, | ||
947 | 0x0100, 0x0040, 0x2c02, 0x6018, 0xa005, 0x00c0, 0x2bd0, 0xa7bc, | ||
948 | 0xfeff, 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, | ||
949 | 0x6318, 0x0040, 0x2c13, 0x601c, 0xa302, 0x0048, 0x2c16, 0x0040, | ||
950 | 0x2c16, 0x0078, 0x2bd0, 0x83ff, 0x00c0, 0x2bd0, 0x2d58, 0x2c50, | ||
951 | 0x7156, 0xd7bc, 0x00c0, 0x2c1f, 0x7028, 0x6022, 0x603a, 0xc7bc, | ||
952 | 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, 0x0001, | ||
953 | 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0040, 0x2c33, | ||
954 | 0xd684, 0x0040, 0x2c35, 0xa39c, 0xffbf, 0xd6a4, 0x0040, 0x2c3a, | ||
955 | 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2c85, 0xc7a5, 0x670a, | ||
956 | 0x2c00, 0x68c6, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2c59, 0x70d4, | ||
957 | 0xd0b4, 0x00c0, 0x2c59, 0x7000, 0xa082, 0x0002, 0x00c8, 0x2c59, | ||
958 | 0x7830, 0xd0bc, 0x00c0, 0x2c59, 0x789b, 0x0010, 0x7baa, 0x0078, | ||
959 | 0x2cd1, 0x8739, 0x77a6, 0x2750, 0x77b0, 0xa7b0, 0x0005, 0x70ac, | ||
960 | 0xa606, 0x00c0, 0x2c64, 0x76a8, 0x76b2, 0x2c3a, 0x8738, 0x2d3a, | ||
961 | 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc, | ||
962 | 0x0040, 0x2c7c, 0x2091, 0x8000, 0x2091, 0x303d, 0x70d4, 0xa084, | ||
963 | 0x303d, 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000, 0x0040, 0x2c84, | ||
964 | 0x8421, 0x2200, 0x00c0, 0x2bb6, 0x007c, 0xd1dc, 0x0040, 0x3e49, | ||
965 | 0x2029, 0x0020, 0xd69c, 0x00c0, 0x2c92, 0x8528, 0xd68c, 0x00c0, | ||
966 | 0x2c92, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c, 0x00ff, | ||
967 | 0x70cc, 0xa160, 0x2c64, 0x8cff, 0x0040, 0x2cb1, 0x6014, 0xa706, | ||
968 | 0x00c0, 0x2c9a, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2c95, 0x2a60, | ||
969 | 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x00c0, 0x2bb6, | ||
970 | 0x007c, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840, 0x6008, | ||
971 | 0xc0d5, 0x600a, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2c59, 0x70d4, | ||
972 | 0xd0b4, 0x00c0, 0x2c59, 0x7000, 0xa082, 0x0002, 0x00c8, 0x2c59, | ||
973 | 0x7830, 0xd0bc, 0x00c0, 0x2c59, 0x789b, 0x0010, 0x7baa, 0x7daa, | ||
974 | 0x79aa, 0x2001, 0x0002, 0x007e, 0x6018, 0x8000, 0x601a, 0x0078, | ||
975 | 0x2cda, 0x007e, 0x2960, 0x6104, 0x2a60, 0xa184, 0x0018, 0x0040, | ||
976 | 0x2cf6, 0xa184, 0x0010, 0x0040, 0x2ce9, 0x1078, 0x405e, 0x00c0, | ||
977 | 0x2d1b, 0xa184, 0x0008, 0x0040, 0x2cf6, 0x69a0, 0xa184, 0x0600, | ||
978 | 0x00c0, 0x2cf6, 0x1078, 0x3f3e, 0x0078, 0x2d1b, 0x69a0, 0xa184, | ||
979 | 0x1e00, 0x0040, 0x2d26, 0xa184, 0x0800, 0x0040, 0x2d0f, 0x0c7e, | ||
980 | 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, | ||
981 | 0x6106, 0x0c7f, 0x1078, 0x405e, 0x00c0, 0x2d1b, 0x69a0, 0xa184, | ||
982 | 0x0200, 0x0040, 0x2d17, 0x1078, 0x3fa1, 0x0078, 0x2d1b, 0xa184, | ||
983 | 0x0400, 0x00c0, 0x2cf2, 0x69a0, 0xa184, 0x1000, 0x0040, 0x2d26, | ||
984 | 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x27e6, 0x027f, 0xa68c, | ||
985 | 0x00e0, 0xa684, 0x0060, 0x0040, 0x2d33, 0xa086, 0x0060, 0x00c0, | ||
986 | 0x2d33, 0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, 0x789b, 0x0060, | ||
987 | 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0040, 0x2d4e, | ||
988 | 0xc0fc, 0x7087, 0x0000, 0xa08a, 0x000d, 0x0050, 0x2d4c, 0xa08a, | ||
989 | 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, 0x78aa, 0x3518, | ||
990 | 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, 0x20a0, 0x789b, | ||
991 | 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898, 0x25a0, | ||
992 | 0xa286, 0x0020, 0x00c0, 0x2d86, 0x70d4, 0xc0b5, 0x70d6, 0x2c00, | ||
993 | 0x70ba, 0x2d00, 0x70be, 0x6814, 0xc0fc, 0x8007, 0x7882, 0xa286, | ||
994 | 0x0002, 0x0040, 0x2dbc, 0x70a4, 0x8000, 0x70a6, 0x74b4, 0xa498, | ||
995 | 0x0005, 0x70ac, 0xa306, 0x00c0, 0x2d7e, 0x73a8, 0x73b6, 0xa286, | ||
996 | 0x0010, 0x0040, 0x2a08, 0x0d7f, 0x0c7f, 0x007c, 0x7000, 0xa005, | ||
997 | 0x00c0, 0x2d64, 0xa286, 0x0002, 0x00c0, 0x2dd6, 0x1078, 0x43b0, | ||
998 | 0x00c0, 0x2d64, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x2091, 0x8000, | ||
999 | 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, | ||
1000 | 0x78d2, 0x78da, 0x2091, 0x8001, 0x7808, 0xc08d, 0x780a, 0x127e, | ||
1001 | 0x0d7e, 0x0c7e, 0x70d4, 0xa084, 0x2700, 0x2090, 0x0c7f, 0x0d7f, | ||
1002 | 0x127f, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003, 0x0002, 0x2d00, | ||
1003 | 0x704e, 0xad80, 0x0009, 0x7046, 0x7830, 0xd0bc, 0x0040, 0x2dc8, | ||
1004 | 0x2091, 0x303d, 0x70d4, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, | ||
1005 | 0x70a4, 0xa005, 0x00c0, 0x2dcd, 0x007c, 0x8421, 0x0040, 0x2dcc, | ||
1006 | 0x7250, 0x70c0, 0xa200, 0xa015, 0x0078, 0x2bb6, 0xa286, 0x0010, | ||
1007 | 0x00c0, 0x2e07, 0x1078, 0x43b0, 0x00c0, 0x2d64, 0x6814, 0xc0fc, | ||
1008 | 0x8007, 0x7882, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, 0x78d6, | ||
1009 | 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, 0x70a4, | ||
1010 | 0x8000, 0x70a6, 0x74b4, 0xa490, 0x0005, 0x70ac, 0xa206, 0x00c0, | ||
1011 | 0x2dfa, 0x72a8, 0x72b6, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003, | ||
1012 | 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0x6bb4, | ||
1013 | 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x6b94, | ||
1014 | 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x005b, 0x2900, | ||
1015 | 0x705a, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605, 0x0040, | ||
1016 | 0x2e32, 0x70d4, 0xa084, 0x2700, 0xa086, 0x2300, 0x00c0, 0x2e2c, | ||
1017 | 0x2009, 0x0000, 0x0078, 0x2e2e, 0x2009, 0x0001, 0xa284, 0x000f, | ||
1018 | 0x1079, 0x2e38, 0xad80, 0x0009, 0x7046, 0x2d00, 0x704e, 0x007c, | ||
1019 | 0x2e40, 0x493f, 0x493f, 0x492c, 0x493f, 0x2e40, 0x2e40, 0x2e40, | ||
1020 | 0x1078, 0x29b2, 0x7808, 0xa084, 0xfffd, 0x780a, 0x1078, 0x29a5, | ||
1021 | 0x0f7e, 0x2079, 0x4f00, 0x78ac, 0x0f7f, 0xd084, 0x0040, 0x2e6a, | ||
1022 | 0x7064, 0xa086, 0x0001, 0x00c0, 0x2e58, 0x7066, 0x0078, 0x2f41, | ||
1023 | 0x7064, 0xa086, 0x0005, 0x00c0, 0x2e68, 0x707c, 0x2068, 0x681b, | ||
1024 | 0x0004, 0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, | ||
1025 | 0x7067, 0x0000, 0x70a7, 0x0000, 0x70a8, 0x70b2, 0x70b6, 0x1078, | ||
1026 | 0x2b01, 0x157e, 0x2011, 0x0004, 0x7164, 0xa186, 0x0001, 0x0040, | ||
1027 | 0x2e8a, 0xa186, 0x0007, 0x00c0, 0x2e81, 0x701f, 0x0005, 0x0078, | ||
1028 | 0x2e8a, 0x701f, 0x0001, 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, | ||
1029 | 0x0078, 0x2e8c, 0x7067, 0x0000, 0x2001, 0x4f0a, 0x2004, 0xa084, | ||
1030 | 0x00ff, 0xa086, 0x0018, 0x0040, 0x2e9c, 0x7018, 0x7016, 0xa005, | ||
1031 | 0x00c0, 0x2e9c, 0x70a7, 0x0001, 0x067e, 0x1078, 0x45d6, 0x20a9, | ||
1032 | 0x0010, 0x2039, 0x0000, 0x1078, 0x4148, 0xa7b8, 0x0100, 0x00f0, | ||
1033 | 0x2ea3, 0x067f, 0x7000, 0x0079, 0x2ead, 0x2ee7, 0x2ec2, 0x2ec2, | ||
1034 | 0x2eb7, 0x2ee7, 0x2ee7, 0x2ee7, 0x2eb5, 0x1078, 0x29b2, 0x7060, | ||
1035 | 0xa005, 0x0040, 0x2ee7, 0xad06, 0x00c0, 0x2ec2, 0x6800, 0x7062, | ||
1036 | 0x0078, 0x2ed4, 0x6820, 0xd084, 0x00c0, 0x2ed0, 0x6f14, 0x1078, | ||
1037 | 0x424e, 0x6008, 0xc0d4, 0x600a, 0x1078, 0x3e19, 0x0078, 0x2ed4, | ||
1038 | 0x705c, 0x2060, 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, | ||
1039 | 0xd0fc, 0x0040, 0x2edc, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, | ||
1040 | 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x1078, 0x2073, 0xb284, | ||
1041 | 0x0400, 0x0040, 0x2eef, 0x2021, 0x96d0, 0x0078, 0x2ef1, 0x2021, | ||
1042 | 0x95c0, 0x1078, 0x2f46, 0xb284, 0x0400, 0x0040, 0x2efb, 0x2021, | ||
1043 | 0x4f98, 0x0078, 0x2efd, 0x2021, 0x4f58, 0x1078, 0x2f46, 0x20a9, | ||
1044 | 0x0101, 0xb284, 0x0400, 0x0040, 0x2f09, 0x2021, 0x95d0, 0x0078, | ||
1045 | 0x2f0b, 0x2021, 0x94c0, 0x1078, 0x2f46, 0x8420, 0x00f0, 0x2f0b, | ||
1046 | 0xb284, 0x0300, 0x0040, 0x2f18, 0x2061, 0x54c0, 0x0078, 0x2f1a, | ||
1047 | 0x2061, 0x74c0, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff, | ||
1048 | 0x0040, 0x2f37, 0x6018, 0x017e, 0x007e, 0x2011, 0x4f02, 0x220c, | ||
1049 | 0xa102, 0x2012, 0x007f, 0x017f, 0xa102, 0x0050, 0x2f37, 0x6012, | ||
1050 | 0x00c0, 0x2f37, 0x2011, 0x4f04, 0x2204, 0xc0a5, 0x2012, 0x601b, | ||
1051 | 0x0000, 0xace0, 0x0010, 0x00f0, 0x2f1e, 0x8421, 0x00c0, 0x2f1c, | ||
1052 | 0x157f, 0x7003, 0x0000, 0x704f, 0x0000, 0x007c, 0x047e, 0x2404, | ||
1053 | 0xa005, 0x0040, 0x2f61, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817, | ||
1054 | 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, | ||
1055 | 0xa084, 0x00ff, 0xc09d, 0x6822, 0x1078, 0x2073, 0x007f, 0x0078, | ||
1056 | 0x2f48, 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, | ||
1057 | 0x2f6b, 0x1078, 0x29b2, 0x2300, 0x0079, 0x2f6e, 0x2f71, 0x2ffc, | ||
1058 | 0x3019, 0xa282, 0x0002, 0x0040, 0x2f77, 0x1078, 0x29b2, 0x7064, | ||
1059 | 0x7067, 0x0000, 0x7083, 0x0000, 0x0079, 0x2f7e, 0x2f86, 0x2f86, | ||
1060 | 0x2f88, 0x2fc8, 0x3e55, 0x2f86, 0x2fc8, 0x2f86, 0x1078, 0x29b2, | ||
1061 | 0x7774, 0x1078, 0x4148, 0x7774, 0xa7bc, 0x8f00, 0x1078, 0x424e, | ||
1062 | 0x6018, 0xa005, 0x0040, 0x2fbf, 0xd7fc, 0x00c0, 0x2f9b, 0x2021, | ||
1063 | 0x95c0, 0x0078, 0x2f9d, 0x2021, 0x96d0, 0x2009, 0x0005, 0x2011, | ||
1064 | 0x0010, 0x1078, 0x3034, 0x0040, 0x2fbf, 0x157e, 0x20a9, 0x0101, | ||
1065 | 0xd7fc, 0x00c0, 0x2faf, 0x2021, 0x94c0, 0x0078, 0x2fb1, 0x2021, | ||
1066 | 0x95d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078, 0x3034, | ||
1067 | 0x047f, 0x0040, 0x2fbe, 0x8420, 0x00f0, 0x2fb1, 0x157f, 0x8738, | ||
1068 | 0xa784, 0x001f, 0x00c0, 0x2f8e, 0x0078, 0x2a0c, 0x0078, 0x2a0c, | ||
1069 | 0x7774, 0x1078, 0x424e, 0x6018, 0xa005, 0x0040, 0x2ffa, 0xd7fc, | ||
1070 | 0x00c0, 0x2fd6, 0x2021, 0x95c0, 0x0078, 0x2fd8, 0x2021, 0x96d0, | ||
1071 | 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x3034, 0x0040, 0x2ffa, | ||
1072 | 0x157e, 0x20a9, 0x0101, 0xd7fc, 0x00c0, 0x2fea, 0x2021, 0x94c0, | ||
1073 | 0x0078, 0x2fec, 0x2021, 0x95d0, 0x047e, 0x2009, 0x0005, 0x2011, | ||
1074 | 0x0020, 0x1078, 0x3034, 0x047f, 0x0040, 0x2ff9, 0x8420, 0x00f0, | ||
1075 | 0x2fec, 0x157f, 0x0078, 0x2a0c, 0x2200, 0x0079, 0x2fff, 0x3002, | ||
1076 | 0x3004, 0x3004, 0x1078, 0x29b2, 0x2009, 0x0012, 0x7064, 0xa086, | ||
1077 | 0x0002, 0x0040, 0x300d, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0040, | ||
1078 | 0x3012, 0x691a, 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078, | ||
1079 | 0x435d, 0x2200, 0x0079, 0x301c, 0x3021, 0x3004, 0x301f, 0x1078, | ||
1080 | 0x29b2, 0x1078, 0x45d6, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3dc7, | ||
1081 | 0x1078, 0x3e36, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3db8, | ||
1082 | 0x0040, 0x3dc7, 0x0078, 0x2a0c, 0x2404, 0xa005, 0x0040, 0x306d, | ||
1083 | 0x2068, 0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x3043, 0x2d20, | ||
1084 | 0x007f, 0x0078, 0x3035, 0x007f, 0x2022, 0x691a, 0x6817, 0x0000, | ||
1085 | 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, | ||
1086 | 0x00ff, 0xa205, 0x6822, 0x1078, 0x2073, 0x2021, 0x4f02, 0x241c, | ||
1087 | 0x8319, 0x2322, 0x6010, 0x8001, 0x6012, 0x00c0, 0x3064, 0x2021, | ||
1088 | 0x4f04, 0x2404, 0xc0a5, 0x2022, 0x6008, 0xa084, 0xf9ef, 0x600a, | ||
1089 | 0x1078, 0x2b22, 0x1078, 0x3e36, 0x007c, 0xa085, 0x0001, 0x0078, | ||
1090 | 0x306c, 0x2300, 0x0079, 0x3074, 0x3079, 0x3077, 0x30f9, 0x1078, | ||
1091 | 0x29b2, 0x78e4, 0xa005, 0x00d0, 0x30af, 0x3208, 0x007e, 0x2001, | ||
1092 | 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x308a, 0xa18c, 0x0300, | ||
1093 | 0x0078, 0x308c, 0xa18c, 0x0400, 0x0040, 0x3092, 0x0018, 0x2a08, | ||
1094 | 0x0078, 0x3094, 0x0028, 0x2a08, 0x2008, 0xa084, 0x0030, 0x00c0, | ||
1095 | 0x309b, 0x0078, 0x37b9, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3099, | ||
1096 | 0x2100, 0xa084, 0x0007, 0x0079, 0x30a5, 0x30d9, 0x30e3, 0x30ce, | ||
1097 | 0x30ad, 0x43a5, 0x43a5, 0x30ad, 0x30ee, 0x1078, 0x29b2, 0x7000, | ||
1098 | 0xa086, 0x0004, 0x00c0, 0x30c9, 0x7064, 0xa086, 0x0002, 0x00c0, | ||
1099 | 0x30bf, 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, 0x2f65, 0x7064, | ||
1100 | 0xa086, 0x0006, 0x0040, 0x30b9, 0x7064, 0xa086, 0x0004, 0x0040, | ||
1101 | 0x30b9, 0x79e4, 0x2001, 0x0003, 0x0078, 0x3443, 0x6818, 0xd0fc, | ||
1102 | 0x0040, 0x30d4, 0x681b, 0x001d, 0x1078, 0x4118, 0x781b, 0x0064, | ||
1103 | 0x007c, 0x6818, 0xd0fc, 0x0040, 0x30df, 0x681b, 0x001d, 0x1078, | ||
1104 | 0x4118, 0x0078, 0x4381, 0x6818, 0xd0fc, 0x0040, 0x30e9, 0x681b, | ||
1105 | 0x001d, 0x1078, 0x4118, 0x781b, 0x00f8, 0x007c, 0x6818, 0xd0fc, | ||
1106 | 0x0040, 0x30f4, 0x681b, 0x001d, 0x1078, 0x4118, 0x781b, 0x00c8, | ||
1107 | 0x007c, 0xa584, 0x000f, 0x00c0, 0x3118, 0x1078, 0x29a5, 0x7000, | ||
1108 | 0x0079, 0x3102, 0x2a0c, 0x310a, 0x310c, 0x3dc7, 0x3dc7, 0x3dc7, | ||
1109 | 0x310a, 0x310a, 0x1078, 0x29b2, 0x1078, 0x3e36, 0x6008, 0xa084, | ||
1110 | 0xfbef, 0x600a, 0x1078, 0x3db8, 0x0040, 0x3dc7, 0x0078, 0x2a0c, | ||
1111 | 0x78e4, 0xa005, 0x00d0, 0x30af, 0x3208, 0x007e, 0x2001, 0x4f04, | ||
1112 | 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3129, 0xa18c, 0x0300, 0x0078, | ||
1113 | 0x312b, 0xa18c, 0x0400, 0x0040, 0x3131, 0x0018, 0x30af, 0x0078, | ||
1114 | 0x3133, 0x0028, 0x30af, 0x2008, 0xa084, 0x0030, 0x00c0, 0x313b, | ||
1115 | 0x781b, 0x005b, 0x007c, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3138, | ||
1116 | 0x2100, 0xa184, 0x0007, 0x0079, 0x3145, 0x3154, 0x3158, 0x314f, | ||
1117 | 0x314d, 0x43a5, 0x43a5, 0x314d, 0x439f, 0x1078, 0x29b2, 0x1078, | ||
1118 | 0x4120, 0x781b, 0x0064, 0x007c, 0x1078, 0x4120, 0x0078, 0x4381, | ||
1119 | 0x1078, 0x4120, 0x781b, 0x00f8, 0x007c, 0x1078, 0x4120, 0x781b, | ||
1120 | 0x00c8, 0x007c, 0x2300, 0x0079, 0x3165, 0x316a, 0x3168, 0x316c, | ||
1121 | 0x1078, 0x29b2, 0x0078, 0x39a8, 0x681b, 0x0016, 0x78a3, 0x0000, | ||
1122 | 0x79e4, 0xa184, 0x0030, 0x0040, 0x39a8, 0x78ec, 0xa084, 0x0003, | ||
1123 | 0x0040, 0x39a8, 0xa184, 0x0100, 0x0040, 0x3170, 0xa184, 0x0007, | ||
1124 | 0x0079, 0x3182, 0x318a, 0x3158, 0x30ce, 0x435d, 0x43a5, 0x43a5, | ||
1125 | 0x435d, 0x439f, 0x1078, 0x4369, 0x007c, 0xa282, 0x0005, 0x0050, | ||
1126 | 0x3193, 0x1078, 0x29b2, 0x2300, 0x0079, 0x3196, 0x3199, 0x33c9, | ||
1127 | 0x33d4, 0x2200, 0x0079, 0x319c, 0x31b6, 0x31a3, 0x31b6, 0x31a1, | ||
1128 | 0x33ac, 0x1078, 0x29b2, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, | ||
1129 | 0xa082, 0x0020, 0x0048, 0x4107, 0xa08a, 0x0004, 0x00c8, 0x4107, | ||
1130 | 0x0079, 0x31b2, 0x4107, 0x4107, 0x4107, 0x40b1, 0x789b, 0x0018, | ||
1131 | 0x79a8, 0xa184, 0x0080, 0x0040, 0x31c7, 0x0078, 0x4107, 0x7000, | ||
1132 | 0xa005, 0x00c0, 0x31bd, 0x2011, 0x0004, 0x0078, 0x3b93, 0xa184, | ||
1133 | 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x4107, 0x0079, 0x31cf, 0x31e1, | ||
1134 | 0x31df, 0x31f6, 0x31fa, 0x32cd, 0x4107, 0x4107, 0x32cf, 0x4107, | ||
1135 | 0x4107, 0x33a8, 0x33a8, 0x4107, 0x4107, 0x4107, 0x33aa, 0x1078, | ||
1136 | 0x29b2, 0xd6e4, 0x0040, 0x31ec, 0x2001, 0x0300, 0x8000, 0x8000, | ||
1137 | 0x783a, 0x781b, 0x00c3, 0x007c, 0x6818, 0xd0fc, 0x0040, 0x31f4, | ||
1138 | 0x681b, 0x001d, 0x0078, 0x31e4, 0x0078, 0x435d, 0x681b, 0x001d, | ||
1139 | 0x0078, 0x4111, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0, 0x325f, | ||
1140 | 0x6820, 0xd084, 0x00c0, 0x3265, 0x6818, 0xa086, 0x0008, 0x00c0, | ||
1141 | 0x320b, 0x681b, 0x0000, 0xd6d4, 0x0040, 0x32ca, 0xd6bc, 0x0040, | ||
1142 | 0x324b, 0x7087, 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, | ||
1143 | 0x0050, 0x324b, 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, | ||
1144 | 0x718a, 0x789b, 0x0061, 0x78aa, 0x157e, 0x137e, 0x147e, 0x017e, | ||
1145 | 0x3208, 0xa18c, 0x0300, 0x0040, 0x323d, 0x007e, 0x2001, 0x4f04, | ||
1146 | 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3239, 0x20a1, 0x012b, 0x0078, | ||
1147 | 0x323f, 0x20a1, 0x022b, 0x0078, 0x323f, 0x20a1, 0x012b, 0x017f, | ||
1148 | 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, | ||
1149 | 0x147f, 0x137f, 0x157f, 0x6038, 0xa005, 0x00c0, 0x325a, 0x681c, | ||
1150 | 0xa084, 0x000e, 0x0040, 0x4111, 0x1078, 0x4127, 0x782b, 0x3008, | ||
1151 | 0x0078, 0x325c, 0x8001, 0x603a, 0x781b, 0x0067, 0x007c, 0xd6e4, | ||
1152 | 0x0040, 0x3265, 0x781b, 0x0079, 0x007c, 0xa684, 0x0060, 0x0040, | ||
1153 | 0x32c7, 0xd6dc, 0x0040, 0x32c7, 0xd6fc, 0x00c0, 0x3271, 0x0078, | ||
1154 | 0x3288, 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x801b, | ||
1155 | 0x00c8, 0x327b, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, | ||
1156 | 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, | ||
1157 | 0xd6f4, 0x0040, 0x328e, 0xc6f4, 0x7e5a, 0x6eb6, 0x7000, 0xa086, | ||
1158 | 0x0003, 0x00c0, 0x329c, 0x007e, 0x1078, 0x45d6, 0x1078, 0x493f, | ||
1159 | 0x007f, 0x781b, 0x0076, 0x007c, 0xa006, 0x1078, 0x4a44, 0x6ab0, | ||
1160 | 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, 0x32ab, 0x2200, | ||
1161 | 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, | ||
1162 | 0x7bde, 0x2300, 0xa405, 0x00c0, 0x32bb, 0xc6f5, 0x7e5a, 0x6eb6, | ||
1163 | 0x781b, 0x0076, 0x007c, 0x781b, 0x0076, 0x2200, 0xa115, 0x00c0, | ||
1164 | 0x32c4, 0x1078, 0x493f, 0x007c, 0x1078, 0x4977, 0x007c, 0x781b, | ||
1165 | 0x0079, 0x007c, 0x781b, 0x0067, 0x007c, 0x1078, 0x29b2, 0x0078, | ||
1166 | 0x331b, 0x6920, 0xd1c4, 0x0040, 0x32e4, 0xc1c4, 0x6922, 0x0c7e, | ||
1167 | 0x7058, 0x2060, 0x6000, 0xc0e4, 0x6002, 0x6004, 0xa084, 0xfff5, | ||
1168 | 0x6006, 0x0c7f, 0x0078, 0x330f, 0xd1cc, 0x0040, 0x330f, 0xc1cc, | ||
1169 | 0x6922, 0x0c7e, 0x7058, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x6004, | ||
1170 | 0xc0a4, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x330f, | ||
1171 | 0x1078, 0x424a, 0x1078, 0x3f3e, 0x88ff, 0x0040, 0x330f, 0x789b, | ||
1172 | 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, | ||
1173 | 0x330c, 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7e58, | ||
1174 | 0xd6d4, 0x00c0, 0x3316, 0x781b, 0x0067, 0x007c, 0x781b, 0x0079, | ||
1175 | 0x007c, 0x0078, 0x410c, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, | ||
1176 | 0x00c0, 0x3329, 0x6820, 0xa084, 0x0100, 0x0040, 0x3319, 0x2009, | ||
1177 | 0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, | ||
1178 | 0x00c0, 0x3345, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, | ||
1179 | 0x333d, 0x0048, 0x333d, 0x0078, 0x333f, 0x0078, 0x32d1, 0x24a8, | ||
1180 | 0x7aa8, 0x00f0, 0x333f, 0x0078, 0x332b, 0xa284, 0x00f0, 0xa086, | ||
1181 | 0x0020, 0x00c0, 0x3399, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040, | ||
1182 | 0x3355, 0x0048, 0x3355, 0x0078, 0x3396, 0xa286, 0x0023, 0x0040, | ||
1183 | 0x3319, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, | ||
1184 | 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x0c7e, 0x7058, | ||
1185 | 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd1a4, 0x0040, 0x3376, | ||
1186 | 0x1078, 0x424a, 0x1078, 0x405e, 0x0078, 0x3384, 0x0c7e, 0x7058, | ||
1187 | 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x330f, | ||
1188 | 0x1078, 0x424a, 0x1078, 0x3f3e, 0x88ff, 0x0040, 0x330f, 0x789b, | ||
1189 | 0x0060, 0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3393, | ||
1190 | 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7aa8, 0x0078, | ||
1191 | 0x332b, 0x8318, 0x2300, 0xa102, 0x0040, 0x33a2, 0x0048, 0x33a2, | ||
1192 | 0x0078, 0x332b, 0xa284, 0x0080, 0x00c0, 0x4111, 0x0078, 0x410c, | ||
1193 | 0x0078, 0x4111, 0x0078, 0x4107, 0x7058, 0xa04d, 0x789b, 0x0018, | ||
1194 | 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0040, 0x33b9, 0x1078, | ||
1195 | 0x29b2, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, | ||
1196 | 0x0004, 0x00c8, 0x4107, 0x0079, 0x33c5, 0x4107, 0x3e8f, 0x4107, | ||
1197 | 0x4006, 0xa282, 0x0000, 0x00c0, 0x33cf, 0x1078, 0x29b2, 0x1078, | ||
1198 | 0x4118, 0x781b, 0x0078, 0x007c, 0xa282, 0x0003, 0x00c0, 0x33da, | ||
1199 | 0x1078, 0x29b2, 0xd4fc, 0x00c0, 0x33fa, 0x7064, 0xa005, 0x0040, | ||
1200 | 0x33e3, 0x1078, 0x29b2, 0x6f14, 0x7776, 0xa7bc, 0x8f00, 0x1078, | ||
1201 | 0x424e, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, | ||
1202 | 0x00c0, 0x33e7, 0x1078, 0x411c, 0x7067, 0x0002, 0x701f, 0x0009, | ||
1203 | 0x0078, 0x33fc, 0x1078, 0x412b, 0x781b, 0x0078, 0x007c, 0xa282, | ||
1204 | 0x0004, 0x0050, 0x3405, 0x1078, 0x29b2, 0x2300, 0x0079, 0x3408, | ||
1205 | 0x340b, 0x35cb, 0x360e, 0xa286, 0x0003, 0x0040, 0x3443, 0x7200, | ||
1206 | 0x7cd8, 0x7ddc, 0x7fd0, 0x71d4, 0xd1bc, 0x00c0, 0x343b, 0xd1b4, | ||
1207 | 0x0040, 0x343b, 0x7868, 0xa084, 0x00ff, 0x00c0, 0x343b, 0xa282, | ||
1208 | 0x0002, 0x00c8, 0x343b, 0x0d7e, 0x783b, 0x8300, 0x781b, 0x004c, | ||
1209 | 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, | ||
1210 | 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x2001, | ||
1211 | 0x0000, 0x0078, 0x3447, 0x783b, 0x1300, 0x781b, 0x004a, 0x2001, | ||
1212 | 0x0000, 0x0078, 0x3447, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x704a, | ||
1213 | 0x68a0, 0xd0ec, 0x0040, 0x344f, 0x6008, 0xc08d, 0x600a, 0xa284, | ||
1214 | 0x000f, 0x0079, 0x3453, 0x35ab, 0x3460, 0x345d, 0x3711, 0x379d, | ||
1215 | 0x2a0c, 0x345b, 0x345b, 0x1078, 0x29b2, 0x6008, 0xc0d4, 0x600a, | ||
1216 | 0xd6e4, 0x0040, 0x3468, 0x7048, 0xa086, 0x0014, 0x00c0, 0x3488, | ||
1217 | 0x1078, 0x45d6, 0x2009, 0x0000, 0x6818, 0xd0fc, 0x0040, 0x3471, | ||
1218 | 0x7048, 0xa086, 0x0014, 0x0040, 0x3482, 0x6818, 0xa086, 0x0008, | ||
1219 | 0x00c0, 0x3563, 0x7858, 0xd09c, 0x0040, 0x3563, 0x6820, 0xd0ac, | ||
1220 | 0x0040, 0x3563, 0x681b, 0x0014, 0x2009, 0x0002, 0x0078, 0x34c7, | ||
1221 | 0x7868, 0xa08c, 0x00ff, 0x0040, 0x34c7, 0xa186, 0x0008, 0x00c0, | ||
1222 | 0x349e, 0x6008, 0xc0a4, 0x600a, 0x1078, 0x3db8, 0x0040, 0x34c7, | ||
1223 | 0x1078, 0x3e36, 0x1078, 0x45d6, 0x0078, 0x34af, 0xa186, 0x0028, | ||
1224 | 0x00c0, 0x34c7, 0x6018, 0xa005, 0x0040, 0x3491, 0x8001, 0x0040, | ||
1225 | 0x3491, 0x8001, 0x0040, 0x3491, 0x601e, 0x0078, 0x3491, 0x6820, | ||
1226 | 0xd084, 0x0040, 0x2a0c, 0xc084, 0x6822, 0x1078, 0x2b13, 0x705c, | ||
1227 | 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005, | ||
1228 | 0x2d00, 0x00c0, 0x34c4, 0x6002, 0x6006, 0x0078, 0x2a0c, 0x017e, | ||
1229 | 0x81ff, 0x00c0, 0x3511, 0x7000, 0xa086, 0x0030, 0x0040, 0x3511, | ||
1230 | 0x71d4, 0xd1bc, 0x00c0, 0x3511, 0xd1b4, 0x00c0, 0x34f8, 0x7060, | ||
1231 | 0xa005, 0x00c0, 0x3511, 0x70a4, 0xa086, 0x0001, 0x0040, 0x3511, | ||
1232 | 0x7003, 0x0000, 0x047e, 0x057e, 0x077e, 0x067e, 0x0c7e, 0x0d7e, | ||
1233 | 0x1078, 0x2a35, 0x0d7f, 0x0c7f, 0x067f, 0x077f, 0x057f, 0x047f, | ||
1234 | 0x71d4, 0xd1b4, 0x00c0, 0x3511, 0x7003, 0x0040, 0x0078, 0x3511, | ||
1235 | 0x1078, 0x43b0, 0x00c0, 0x3511, 0x781b, 0x005b, 0x0d7e, 0x70bc, | ||
1236 | 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, | ||
1237 | 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x7808, 0xc08d, 0x780a, | ||
1238 | 0x0d7f, 0x1078, 0x3648, 0x017f, 0x81ff, 0x0040, 0x3563, 0xa684, | ||
1239 | 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186, 0x0002, 0x00c0, | ||
1240 | 0x3564, 0x6818, 0xa086, 0x0014, 0x00c0, 0x352d, 0x2008, 0xd6e4, | ||
1241 | 0x0040, 0x352d, 0x7868, 0xa08c, 0x00ff, 0x1078, 0x2b01, 0x1078, | ||
1242 | 0x2b22, 0x6820, 0xd0dc, 0x00c0, 0x3564, 0x8717, 0xa294, 0x000f, | ||
1243 | 0x8213, 0x8213, 0x8213, 0xb284, 0x0300, 0x0040, 0x3543, 0xa290, | ||
1244 | 0x53c0, 0x0078, 0x3545, 0xa290, 0x5440, 0xa290, 0x0000, 0x221c, | ||
1245 | 0xd3c4, 0x00c0, 0x354d, 0x0078, 0x3553, 0x8210, 0x2204, 0xa085, | ||
1246 | 0x0018, 0x2012, 0x8211, 0xd3d4, 0x0040, 0x355e, 0x68a0, 0xd0c4, | ||
1247 | 0x00c0, 0x355e, 0x1078, 0x36c2, 0x0078, 0x2a0c, 0x6008, 0xc08d, | ||
1248 | 0x600a, 0x0078, 0x3564, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0040, | ||
1249 | 0x356b, 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x6410, 0x84ff, | ||
1250 | 0x0040, 0x3580, 0x2009, 0x4f02, 0x2104, 0x8001, 0x200a, 0x8421, | ||
1251 | 0x6412, 0x00c0, 0x3580, 0x2021, 0x4f04, 0x2404, 0xc0a5, 0x2022, | ||
1252 | 0x6018, 0xa005, 0x0040, 0x3588, 0x8001, 0x601a, 0x00c0, 0x358b, | ||
1253 | 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x00c0, 0x3597, 0x6800, | ||
1254 | 0xa005, 0x00c0, 0x3594, 0x6002, 0x6006, 0x0078, 0x359b, 0x705c, | ||
1255 | 0x2060, 0x6800, 0x6002, 0x2061, 0x4f00, 0x6887, 0x0103, 0x2d08, | ||
1256 | 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x35aa, 0x2d02, | ||
1257 | 0x0078, 0x35ab, 0x616e, 0x7200, 0xa286, 0x0030, 0x0040, 0x35bb, | ||
1258 | 0xa286, 0x0040, 0x00c0, 0x2a0c, 0x7003, 0x0002, 0x704c, 0x2068, | ||
1259 | 0x68c4, 0x2060, 0x007c, 0x7003, 0x0002, 0x70bc, 0xa06d, 0x68bc, | ||
1260 | 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00, 0x704e, 0xad80, | ||
1261 | 0x0009, 0x7046, 0x007c, 0xa282, 0x0004, 0x0048, 0x35d1, 0x1078, | ||
1262 | 0x29b2, 0x2200, 0x0079, 0x35d4, 0x35d8, 0x35e9, 0x35f6, 0x35e9, | ||
1263 | 0xa586, 0x1300, 0x0040, 0x35e9, 0xa586, 0x8300, 0x00c0, 0x35cf, | ||
1264 | 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, | ||
1265 | 0x600a, 0x7000, 0xa086, 0x0005, 0x0040, 0x35f3, 0x1078, 0x4118, | ||
1266 | 0x781b, 0x0078, 0x007c, 0x781b, 0x0079, 0x007c, 0x7890, 0x8007, | ||
1267 | 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, | ||
1268 | 0x00ff, 0xa186, 0x0003, 0x0040, 0x360b, 0xa186, 0x0000, 0x0040, | ||
1269 | 0x360b, 0x0078, 0x4107, 0x781b, 0x0079, 0x007c, 0x6820, 0xc095, | ||
1270 | 0x6822, 0x82ff, 0x00c0, 0x3618, 0x1078, 0x4118, 0x0078, 0x361f, | ||
1271 | 0x8211, 0x0040, 0x361d, 0x1078, 0x29b2, 0x1078, 0x412b, 0x781b, | ||
1272 | 0x0078, 0x007c, 0x1078, 0x43d3, 0x7830, 0xa084, 0x00c0, 0x00c0, | ||
1273 | 0x3645, 0x017e, 0x3208, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, | ||
1274 | 0x007f, 0x0040, 0x3637, 0xa18c, 0x0300, 0x0078, 0x3639, 0xa18c, | ||
1275 | 0x0400, 0x017f, 0x0040, 0x3640, 0x0018, 0x3645, 0x0078, 0x3642, | ||
1276 | 0x0028, 0x3645, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, | ||
1277 | 0xa684, 0x0060, 0x00c0, 0x3652, 0x682f, 0x0000, 0x6833, 0x0000, | ||
1278 | 0x0078, 0x36c1, 0xd6dc, 0x00c0, 0x366a, 0x68b4, 0xd0dc, 0x00c0, | ||
1279 | 0x366a, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7048, 0xa005, 0x00c0, | ||
1280 | 0x3667, 0x2200, 0xa105, 0x0040, 0x45d6, 0x704b, 0x0015, 0x0078, | ||
1281 | 0x45d6, 0x007c, 0xd6ac, 0x0040, 0x3690, 0xd6f4, 0x0040, 0x3676, | ||
1282 | 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x45d6, 0x68b4, 0xa084, | ||
1283 | 0x4000, 0xa635, 0xd6f4, 0x00c0, 0x3670, 0x7048, 0xa005, 0x00c0, | ||
1284 | 0x3683, 0x704b, 0x0015, 0xd6dc, 0x00c0, 0x368c, 0x68b4, 0xd0dc, | ||
1285 | 0x0040, 0x368c, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32, 0x0078, 0x45d6, | ||
1286 | 0xd6f4, 0x0040, 0x3699, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, | ||
1287 | 0x45d6, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, 0x00c0, 0x3693, | ||
1288 | 0x7048, 0xa005, 0x00c0, 0x36a6, 0x704b, 0x0015, 0x2408, 0x2510, | ||
1289 | 0x2700, 0x80fb, 0x00c8, 0x36ad, 0x8000, 0xa084, 0x003f, 0xa108, | ||
1290 | 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x36ba, | ||
1291 | 0x0078, 0x45d6, 0x7000, 0xa086, 0x0006, 0x0040, 0x36c1, 0x0078, | ||
1292 | 0x45d6, 0x007c, 0x6946, 0x6008, 0xc0cd, 0xd3cc, 0x0040, 0x36c9, | ||
1293 | 0xc08d, 0x600a, 0x6818, 0x683a, 0x681b, 0x0006, 0x688f, 0x0000, | ||
1294 | 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, | ||
1295 | 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, | ||
1296 | 0x7000, 0x0079, 0x36e3, 0x2a0c, 0x36f5, 0x36ed, 0x36eb, 0x36eb, | ||
1297 | 0x36eb, 0x36eb, 0x36eb, 0x1078, 0x29b2, 0x6820, 0xd084, 0x00c0, | ||
1298 | 0x36f5, 0x1078, 0x3e19, 0x0078, 0x36fb, 0x705c, 0x2c50, 0x2060, | ||
1299 | 0x6800, 0x6002, 0x2a60, 0x3208, 0xa18c, 0x0300, 0x0040, 0x3704, | ||
1300 | 0x2021, 0x4f58, 0x0078, 0x3706, 0x2021, 0x4f98, 0x2404, 0xa005, | ||
1301 | 0x0040, 0x370d, 0x2020, 0x0078, 0x3706, 0x2d22, 0x206b, 0x0000, | ||
1302 | 0x007c, 0x1078, 0x3e20, 0x1078, 0x3e36, 0x6008, 0xc0cc, 0x600a, | ||
1303 | 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x6938, 0x691a, 0x6944, | ||
1304 | 0x6916, 0x3208, 0xa18c, 0x0300, 0x0040, 0x372a, 0x2009, 0x0000, | ||
1305 | 0x0078, 0x372c, 0x2009, 0x0001, 0x1078, 0x4a81, 0xd6dc, 0x0040, | ||
1306 | 0x3734, 0x691c, 0xc1ed, 0x691e, 0x6818, 0xd0fc, 0x0040, 0x3743, | ||
1307 | 0x7868, 0xa08c, 0x00ff, 0x0040, 0x3741, 0x681b, 0x001e, 0x0078, | ||
1308 | 0x3743, 0x681b, 0x0000, 0xb284, 0x0300, 0x00c0, 0x374b, 0x2021, | ||
1309 | 0x4f98, 0x0078, 0x374d, 0x2021, 0x4f58, 0x6800, 0x2022, 0x6a3c, | ||
1310 | 0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060, 0x6000, 0xd0a4, 0x0040, | ||
1311 | 0x378d, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x0d7e, | ||
1312 | 0x0f7e, 0x157e, 0x147e, 0x2079, 0x4f00, 0x1078, 0x1e46, 0x147f, | ||
1313 | 0x157f, 0x0f7f, 0x70cc, 0x2010, 0x2009, 0x0101, 0x027e, 0x2204, | ||
1314 | 0xa06d, 0x0040, 0x377d, 0x6814, 0xa706, 0x0040, 0x377a, 0x6800, | ||
1315 | 0x0078, 0x3770, 0x6820, 0xc0d5, 0x6822, 0x027f, 0x8210, 0x8109, | ||
1316 | 0x00c0, 0x376e, 0x0d7f, 0x7067, 0x0003, 0x707f, 0x0000, 0x7776, | ||
1317 | 0x7083, 0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x6818, 0xa086, 0x0002, | ||
1318 | 0x00c0, 0x3799, 0x6817, 0x0000, 0x682b, 0x0000, 0x681c, 0xc0ec, | ||
1319 | 0x681e, 0x1078, 0x2073, 0x0078, 0x2a0c, 0x7cd8, 0x7ddc, 0x7fd0, | ||
1320 | 0x1078, 0x3648, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078, | ||
1321 | 0x43d7, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x37b2, | ||
1322 | 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x7067, 0x0000, 0x0078, | ||
1323 | 0x2a0c, 0x7000, 0xa005, 0x00c0, 0x37bf, 0x0078, 0x2a0c, 0xa006, | ||
1324 | 0x1078, 0x45d6, 0x6920, 0xd1ac, 0x00c0, 0x37c8, 0x681b, 0x0014, | ||
1325 | 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, | ||
1326 | 0x6822, 0x7000, 0x0079, 0x37d4, 0x2a0c, 0x37de, 0x37de, 0x37e1, | ||
1327 | 0x37e1, 0x37e1, 0x37dc, 0x37dc, 0x1078, 0x29b2, 0x6818, 0x0078, | ||
1328 | 0x3443, 0x6008, 0xc0a4, 0x600a, 0x6817, 0x0000, 0x0078, 0x3dde, | ||
1329 | 0x2300, 0x0079, 0x37eb, 0x37ee, 0x37f0, 0x3860, 0x1078, 0x29b2, | ||
1330 | 0xd6fc, 0x00c0, 0x3847, 0x7000, 0xa00d, 0x0079, 0x37f7, 0x2a0c, | ||
1331 | 0x3801, 0x3801, 0x3831, 0x3801, 0x3844, 0x37ff, 0x37ff, 0x1078, | ||
1332 | 0x29b2, 0xa684, 0x0060, 0x0040, 0x3831, 0xa086, 0x0060, 0x00c0, | ||
1333 | 0x382e, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x6eb6, 0x681c, 0xc0ac, | ||
1334 | 0x681e, 0xa186, 0x0002, 0x0040, 0x3820, 0x1078, 0x45d6, 0x69ac, | ||
1335 | 0x68b0, 0xa115, 0x0040, 0x3820, 0x1078, 0x4977, 0x0078, 0x3822, | ||
1336 | 0x1078, 0x493f, 0x781b, 0x0079, 0x71d4, 0xd1b4, 0x00c0, 0x2a08, | ||
1337 | 0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a52, 0x007c, 0xd6ec, 0x0040, | ||
1338 | 0x380b, 0x6818, 0xd0fc, 0x0040, 0x3844, 0xd6f4, 0x00c0, 0x383e, | ||
1339 | 0x681b, 0x0015, 0x781b, 0x0079, 0x0078, 0x2a08, 0x681b, 0x0007, | ||
1340 | 0x682f, 0x0000, 0x6833, 0x0000, 0x1078, 0x4369, 0x007c, 0xc6fc, | ||
1341 | 0x7e5a, 0x7adc, 0x79d8, 0x78d0, 0x801b, 0x00c8, 0x3850, 0x8000, | ||
1342 | 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, | ||
1343 | 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x0079, 0x007c, | ||
1344 | 0x1078, 0x29b2, 0x2300, 0x0079, 0x3865, 0x386a, 0x388f, 0x38ef, | ||
1345 | 0x1078, 0x29b2, 0x7000, 0x0079, 0x386d, 0x3875, 0x3877, 0x3880, | ||
1346 | 0x3875, 0x3875, 0x3875, 0x3875, 0x3875, 0x1078, 0x29b2, 0x69ac, | ||
1347 | 0x68b0, 0xa115, 0x0040, 0x3880, 0x1078, 0x4977, 0x0078, 0x3882, | ||
1348 | 0x1078, 0x493f, 0x681c, 0xc0b4, 0x681e, 0x70d4, 0xd0b4, 0x00c0, | ||
1349 | 0x2a08, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a52, 0x007c, 0xd6fc, | ||
1350 | 0x00c0, 0x38df, 0x7000, 0xa00d, 0x0079, 0x3896, 0x2a0c, 0x38a6, | ||
1351 | 0x38a0, 0x38d6, 0x38a6, 0x38dc, 0x389e, 0x389e, 0x1078, 0x29b2, | ||
1352 | 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060, | ||
1353 | 0x0040, 0x38d6, 0xa086, 0x0060, 0x00c0, 0x38d3, 0xa6b4, 0xbfbf, | ||
1354 | 0xc6ed, 0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0040, 0x38c2, 0x1078, | ||
1355 | 0x45d6, 0x69ac, 0x68b0, 0xa115, 0x0040, 0x38c2, 0x1078, 0x4977, | ||
1356 | 0x0078, 0x38c4, 0x1078, 0x493f, 0x781b, 0x0079, 0x681c, 0xc0b4, | ||
1357 | 0x681e, 0x71d4, 0xd1b4, 0x00c0, 0x2a08, 0x70a4, 0xa086, 0x0001, | ||
1358 | 0x00c0, 0x2a52, 0x007c, 0xd6ec, 0x0040, 0x38b0, 0x6818, 0xd0fc, | ||
1359 | 0x0040, 0x38dc, 0x681b, 0x0007, 0x781b, 0x00f9, 0x007c, 0xc6fc, | ||
1360 | 0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, | ||
1361 | 0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b, 0x0079, 0x007c, 0xd6dc, | ||
1362 | 0x0040, 0x38f8, 0x782b, 0x3009, 0x781b, 0x0079, 0x0078, 0x2a08, | ||
1363 | 0x7884, 0xc0ac, 0x7886, 0x78e4, 0xa084, 0x0008, 0x00c0, 0x390b, | ||
1364 | 0xa484, 0x0200, 0x0040, 0x3905, 0xc6f5, 0xc6dd, 0x7e5a, 0x781b, | ||
1365 | 0x0079, 0x0078, 0x2a08, 0x6820, 0xc095, 0x6822, 0x1078, 0x42e2, | ||
1366 | 0xc6dd, 0x1078, 0x4118, 0x781b, 0x0078, 0x0078, 0x2a08, 0x2300, | ||
1367 | 0x0079, 0x391a, 0x391d, 0x391f, 0x3921, 0x1078, 0x29b2, 0x0078, | ||
1368 | 0x4111, 0xd6d4, 0x00c0, 0x395c, 0x79e4, 0xd1ac, 0x0040, 0x392f, | ||
1369 | 0x78ec, 0xa084, 0x0003, 0x0040, 0x392f, 0x782b, 0x3009, 0x789b, | ||
1370 | 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, 0xd1ac, | ||
1371 | 0x0040, 0x393f, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x3958, 0x2001, | ||
1372 | 0x4f04, 0x2004, 0xd0e4, 0x00c0, 0x3954, 0x6820, 0xd0c4, 0x0040, | ||
1373 | 0x3954, 0x0c7e, 0x7058, 0x2060, 0x6004, 0xc09d, 0x6006, 0x6008, | ||
1374 | 0xa084, 0x00ff, 0x600a, 0x0c7f, 0x2001, 0x0014, 0x0078, 0x3443, | ||
1375 | 0xa184, 0x0007, 0x0079, 0x3992, 0x7a90, 0xa294, 0x0007, 0x789b, | ||
1376 | 0x0060, 0x79a8, 0x81ff, 0x0040, 0x3990, 0x789b, 0x0010, 0x7ba8, | ||
1377 | 0xa384, 0x0001, 0x00c0, 0x3983, 0x7ba8, 0x7ba8, 0xa386, 0x0001, | ||
1378 | 0x00c0, 0x3976, 0x2009, 0xfff7, 0x0078, 0x397c, 0xa386, 0x0003, | ||
1379 | 0x00c0, 0x3983, 0x2009, 0xffef, 0x0c7e, 0x7058, 0x2060, 0x6004, | ||
1380 | 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, | ||
1381 | 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfcff, 0x6922, | ||
1382 | 0x0078, 0x435d, 0x30d9, 0x30e3, 0x399c, 0x39a2, 0x399a, 0x399a, | ||
1383 | 0x435d, 0x435d, 0x1078, 0x29b2, 0x6920, 0xa18c, 0xfcff, 0x6922, | ||
1384 | 0x0078, 0x4363, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, 0x435d, | ||
1385 | 0x79e4, 0xa184, 0x0030, 0x0040, 0x39b2, 0x78ec, 0xa084, 0x0003, | ||
1386 | 0x00c0, 0x39e6, 0x7000, 0xa086, 0x0004, 0x00c0, 0x39cc, 0x7064, | ||
1387 | 0xa086, 0x0002, 0x00c0, 0x39c2, 0x2011, 0x0002, 0x2019, 0x0000, | ||
1388 | 0x0078, 0x2f65, 0x7064, 0xa086, 0x0006, 0x0040, 0x39bc, 0x7064, | ||
1389 | 0xa086, 0x0004, 0x0040, 0x39bc, 0x7000, 0xa086, 0x0000, 0x0040, | ||
1390 | 0x2a08, 0x6920, 0xa184, 0x0420, 0x0040, 0x39db, 0xc1d4, 0x6922, | ||
1391 | 0x6818, 0x0078, 0x3443, 0x6818, 0xa08e, 0x0002, 0x0040, 0x39e4, | ||
1392 | 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0078, 0x3443, 0xa184, 0x0007, | ||
1393 | 0x0079, 0x39ea, 0x435d, 0x435d, 0x39f2, 0x435d, 0x43a5, 0x43a5, | ||
1394 | 0x435d, 0x435d, 0xd6bc, 0x0040, 0x3a34, 0x7184, 0x81ff, 0x0040, | ||
1395 | 0x3a34, 0xa182, 0x000d, 0x00d0, 0x3a01, 0x7087, 0x0000, 0x0078, | ||
1396 | 0x3a06, 0xa182, 0x000c, 0x7086, 0x2009, 0x000c, 0x789b, 0x0061, | ||
1397 | 0x79aa, 0x157e, 0x137e, 0x147e, 0x7088, 0x8114, 0xa210, 0x728a, | ||
1398 | 0xa080, 0x000b, 0xad00, 0x2098, 0xb284, 0x0300, 0x0040, 0x3a28, | ||
1399 | 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3a24, | ||
1400 | 0x20a1, 0x012b, 0x0078, 0x3a2a, 0x20a1, 0x022b, 0x0078, 0x3a2a, | ||
1401 | 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, | ||
1402 | 0x137f, 0x157f, 0x0078, 0x4363, 0xd6d4, 0x00c0, 0x3a88, 0x6820, | ||
1403 | 0xd084, 0x0040, 0x4363, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, | ||
1404 | 0x3a46, 0xa086, 0x0060, 0x00c0, 0x3a46, 0xc1f5, 0xc194, 0x795a, | ||
1405 | 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, | ||
1406 | 0xc0fd, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3e4f, 0xa18c, | ||
1407 | 0x00f8, 0x00c0, 0x3e4f, 0x157e, 0x137e, 0x147e, 0x017e, 0x3208, | ||
1408 | 0xa18c, 0x0300, 0x0040, 0x3a74, 0x007e, 0x2001, 0x4f04, 0x2004, | ||
1409 | 0xd0ec, 0x007f, 0x0040, 0x3a70, 0x20a1, 0x012b, 0x0078, 0x3a76, | ||
1410 | 0x20a1, 0x022b, 0x0078, 0x3a76, 0x20a1, 0x012b, 0x017f, 0x789b, | ||
1411 | 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, | ||
1412 | 0x137f, 0x157f, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0078, 0x4363, | ||
1413 | 0x6818, 0xd0fc, 0x0040, 0x3a8e, 0x681b, 0x0008, 0x6820, 0xc0ad, | ||
1414 | 0x6822, 0x1078, 0x4120, 0x781b, 0x00ea, 0x007c, 0x2300, 0x0079, | ||
1415 | 0x3a99, 0x3a9e, 0x3b76, 0x3a9c, 0x1078, 0x29b2, 0x7cd8, 0x7ddc, | ||
1416 | 0x7fd0, 0x82ff, 0x00c0, 0x3ac7, 0x7200, 0xa286, 0x0003, 0x0040, | ||
1417 | 0x3410, 0x71d4, 0xd1bc, 0x00c0, 0x3aca, 0xd1b4, 0x0040, 0x3aca, | ||
1418 | 0x0d7e, 0x783b, 0x8800, 0x781b, 0x004c, 0x70bc, 0xa06d, 0x68b4, | ||
1419 | 0xc0a5, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, | ||
1420 | 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x0078, 0x3ace, 0x7200, | ||
1421 | 0x0078, 0x3ace, 0x783b, 0x1800, 0x781b, 0x004a, 0xa284, 0x000f, | ||
1422 | 0x0079, 0x3ad2, 0x3b61, 0x3b10, 0x3adc, 0x343f, 0x3ada, 0x3b61, | ||
1423 | 0x3ada, 0x3ada, 0x1078, 0x29b2, 0x681c, 0xd0ec, 0x0040, 0x3ae3, | ||
1424 | 0x6008, 0xc08d, 0x600a, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, | ||
1425 | 0xa005, 0x00c0, 0x3aec, 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, | ||
1426 | 0xa084, 0x000e, 0x00c0, 0x3b00, 0xb284, 0x0300, 0x0040, 0x3afc, | ||
1427 | 0x2009, 0x95c0, 0x0078, 0x3b05, 0x2009, 0x96d0, 0x0078, 0x3b05, | ||
1428 | 0x7030, 0x68ba, 0x7140, 0x70cc, 0xa108, 0x2104, 0x6802, 0x2d0a, | ||
1429 | 0x715e, 0xd6dc, 0x00c0, 0x3b10, 0xc6fc, 0x6eb6, 0x0078, 0x3b61, | ||
1430 | 0x6eb6, 0xa684, 0x0060, 0x00c0, 0x3b1a, 0xa684, 0x7fff, 0x68b6, | ||
1431 | 0x0078, 0x3b61, 0xd6dc, 0x00c0, 0x3b28, 0xa684, 0x7fff, 0x68b6, | ||
1432 | 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, 0x45d6, 0x0078, 0x3b61, | ||
1433 | 0xd6ac, 0x0040, 0x3b34, 0xa006, 0x1078, 0x45d6, 0x2408, 0x2510, | ||
1434 | 0x69aa, 0x6aa6, 0x0078, 0x3b44, 0x2408, 0x2510, 0x2700, 0x801b, | ||
1435 | 0x00c8, 0x3b3b, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, | ||
1436 | 0x69aa, 0x6aa6, 0x1078, 0x45d6, 0xd6fc, 0x0040, 0x3b61, 0xa684, | ||
1437 | 0x7fff, 0x68b6, 0x2510, 0x2408, 0xd6ac, 0x00c0, 0x3b59, 0x2700, | ||
1438 | 0x801b, 0x00c8, 0x3b54, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, | ||
1439 | 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, | ||
1440 | 0x68ae, 0x7000, 0xa086, 0x0030, 0x00c0, 0x2a0c, 0x7003, 0x0002, | ||
1441 | 0x70bc, 0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, | ||
1442 | 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0xa586, 0x8800, | ||
1443 | 0x00c0, 0x3b83, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, | ||
1444 | 0xa084, 0xfbef, 0x600a, 0x0078, 0x4111, 0x7047, 0x0000, 0xa282, | ||
1445 | 0x0006, 0x0050, 0x3b8d, 0x1078, 0x29b2, 0x2300, 0x0079, 0x3b90, | ||
1446 | 0x3b93, 0x3ba5, 0x3bb1, 0x2200, 0x0079, 0x3b96, 0x3b9c, 0x4111, | ||
1447 | 0x3b9e, 0x3b9c, 0x3beb, 0x3c40, 0x1078, 0x29b2, 0x7a80, 0xa294, | ||
1448 | 0x0f00, 0x1078, 0x3cca, 0x0078, 0x4107, 0x1078, 0x3bc2, 0x0079, | ||
1449 | 0x3ba9, 0x4111, 0x3baf, 0x3baf, 0x3beb, 0x3baf, 0x4111, 0x1078, | ||
1450 | 0x29b2, 0x1078, 0x3bc2, 0x0079, 0x3bb5, 0x3bbd, 0x3bbb, 0x3bbb, | ||
1451 | 0x3bbd, 0x3bbb, 0x3bbd, 0x1078, 0x29b2, 0x1078, 0x412b, 0x781b, | ||
1452 | 0x0078, 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3bd3, 0x1078, | ||
1453 | 0x3e36, 0x0078, 0x3bcd, 0x1078, 0x45d6, 0x6008, 0xa084, 0xfbef, | ||
1454 | 0x600a, 0x0078, 0x3bd8, 0x7000, 0xa086, 0x0003, 0x0040, 0x3bcb, | ||
1455 | 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3be2, 0x2001, 0x96e0, | ||
1456 | 0x0078, 0x3be4, 0x2001, 0x9712, 0x2068, 0x704e, 0xad80, 0x0009, | ||
1457 | 0x7046, 0x2200, 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3bfd, | ||
1458 | 0x70d4, 0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, | ||
1459 | 0x3c02, 0x1078, 0x45d6, 0x0078, 0x3c02, 0x7000, 0xa086, 0x0003, | ||
1460 | 0x0040, 0x3bf9, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, | ||
1461 | 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x95c0, 0xb284, | ||
1462 | 0x0300, 0x00c0, 0x3c16, 0xc2fd, 0x2069, 0x96d0, 0x2d04, 0x2d08, | ||
1463 | 0x715e, 0xa06d, 0x0040, 0x3c23, 0x6814, 0xa206, 0x0040, 0x3c25, | ||
1464 | 0x6800, 0x0078, 0x3c17, 0x1078, 0x3cca, 0x6eb4, 0x7e5a, 0x6920, | ||
1465 | 0xa184, 0x0c00, 0x0040, 0x3cf4, 0x7064, 0xa086, 0x0006, 0x00c0, | ||
1466 | 0x3c37, 0x7074, 0xa206, 0x00c0, 0x3c37, 0x7066, 0x707e, 0x681b, | ||
1467 | 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x4120, 0x0078, 0x3cf4, | ||
1468 | 0x7200, 0xa286, 0x0002, 0x00c0, 0x3c52, 0x70d4, 0xc0b5, 0x70d6, | ||
1469 | 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, 0x3c56, 0x1078, 0x45d6, | ||
1470 | 0x0078, 0x3c56, 0xa286, 0x0003, 0x0040, 0x3c4e, 0x7003, 0x0001, | ||
1471 | 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, | ||
1472 | 0xa215, 0xb284, 0x0300, 0x00c0, 0x3c66, 0xc2fd, 0x79a8, 0x79a8, | ||
1473 | 0xa18c, 0x00ff, 0x2118, 0x70cc, 0xa168, 0x2d04, 0x2d08, 0x715e, | ||
1474 | 0xa06d, 0x0040, 0x3c7a, 0x6814, 0xa206, 0x0040, 0x3ca3, 0x6800, | ||
1475 | 0x0078, 0x3c6e, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3c84, | ||
1476 | 0x2001, 0x96e0, 0x0078, 0x3c86, 0x2001, 0x9712, 0x2068, 0x704e, | ||
1477 | 0x157e, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3c8b, | ||
1478 | 0x157f, 0xb284, 0x0300, 0x0040, 0x3c98, 0xc2fc, 0x0078, 0x3c99, | ||
1479 | 0xc2fd, 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823, | ||
1480 | 0x0800, 0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, 0x0c00, 0x0040, | ||
1481 | 0x3cf4, 0xd0dc, 0x0040, 0x3cbf, 0x7064, 0xa086, 0x0004, 0x00c0, | ||
1482 | 0x3cbb, 0x7074, 0xa206, 0x00c0, 0x3cbb, 0x7078, 0xa306, 0x00c0, | ||
1483 | 0x3cbb, 0x7066, 0x707e, 0x1078, 0x4127, 0x0078, 0x3cf4, 0x681b, | ||
1484 | 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x4120, 0x707f, 0x0000, | ||
1485 | 0x0078, 0x3cf4, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3cd4, | ||
1486 | 0x2001, 0x96e0, 0x0078, 0x3cd6, 0x2001, 0x9712, 0x2068, 0x704e, | ||
1487 | 0x157e, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3cdb, | ||
1488 | 0x157f, 0xb284, 0x0300, 0x0040, 0x3ce8, 0xc2fc, 0x0078, 0x3ce9, | ||
1489 | 0xc2fd, 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823, | ||
1490 | 0x0800, 0x6827, 0x0003, 0x007c, 0xc6ec, 0xa6ac, 0x0060, 0x0040, | ||
1491 | 0x3d46, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x3d21, | ||
1492 | 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa586, 0x0060, 0x0040, 0x3d4b, | ||
1493 | 0xd6f4, 0x00c0, 0x3d0c, 0xc6ed, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, | ||
1494 | 0x0079, 0xd69c, 0x0040, 0x3d19, 0x2009, 0x0078, 0x2019, 0x0000, | ||
1495 | 0x2320, 0x791a, 0xd6ec, 0x0040, 0x3d56, 0x1078, 0x493f, 0x0078, | ||
1496 | 0x3d56, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x0040, | ||
1497 | 0x3d4d, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x00c0, | ||
1498 | 0x3d32, 0xc6ed, 0xc6f4, 0x7e5a, 0x2011, 0x0079, 0xd69c, 0x0040, | ||
1499 | 0x3d3e, 0x2011, 0x0078, 0x2019, 0x0000, 0x2320, 0x7a1a, 0xd6ec, | ||
1500 | 0x0040, 0x3d56, 0x1078, 0x4977, 0x0078, 0x3d56, 0x2019, 0x0000, | ||
1501 | 0x2320, 0x0078, 0x3d4d, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0079, | ||
1502 | 0xd69c, 0x0040, 0x3d55, 0x2009, 0x0078, 0x791a, 0x68c0, 0x705a, | ||
1503 | 0x2d00, 0x704e, 0x68c4, 0x2060, 0x71d4, 0x2001, 0x4f01, 0x2004, | ||
1504 | 0xd0c4, 0x00c0, 0x3dab, 0x70d8, 0xa02d, 0x0040, 0x3d84, 0xd1bc, | ||
1505 | 0x0040, 0x3d9e, 0x7a80, 0xa294, 0x0f00, 0x70dc, 0xa206, 0x0040, | ||
1506 | 0x3d75, 0x78e0, 0xa504, 0x00c0, 0x3dab, 0x70da, 0xc1bc, 0x71d6, | ||
1507 | 0x0078, 0x3dab, 0x2031, 0x0001, 0x852c, 0x0048, 0x3d83, 0x8633, | ||
1508 | 0x8210, 0x0078, 0x3d7c, 0x007c, 0x7de0, 0xa594, 0xff00, 0x0040, | ||
1509 | 0x3d91, 0x2011, 0x0008, 0x852f, 0x1078, 0x3d7a, 0x8637, 0x0078, | ||
1510 | 0x3d93, 0x1078, 0x3d7a, 0x8217, 0x7880, 0xa084, 0x0f00, 0xa206, | ||
1511 | 0x0040, 0x3dab, 0x72de, 0x76da, 0x0078, 0x3dab, 0x7a80, 0xa294, | ||
1512 | 0x0f00, 0x70dc, 0xa236, 0x0040, 0x3d9b, 0x78e0, 0xa534, 0x0040, | ||
1513 | 0x3d9b, 0xc1bd, 0x71d6, 0xd1b4, 0x00c0, 0x2a08, 0x2300, 0xa405, | ||
1514 | 0x0040, 0x2a08, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a52, 0x007c, | ||
1515 | 0x6020, 0xa005, 0x0040, 0x3dc6, 0x8001, 0x6022, 0x6008, 0xa085, | ||
1516 | 0x0008, 0x600a, 0x700f, 0x0100, 0x702c, 0x6026, 0x007c, 0xa006, | ||
1517 | 0x1078, 0x45d6, 0x7000, 0xa086, 0x0002, 0x0040, 0x3dd4, 0x7064, | ||
1518 | 0xa086, 0x0005, 0x00c0, 0x3dde, 0x682b, 0x0000, 0x6817, 0x0000, | ||
1519 | 0x681b, 0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, | ||
1520 | 0x000f, 0x0079, 0x3de3, 0x2a0c, 0x3df3, 0x3ded, 0x3e15, 0x3dfd, | ||
1521 | 0x2a0c, 0x3deb, 0x3deb, 0x1078, 0x29b2, 0x1078, 0x3e20, 0x1078, | ||
1522 | 0x3e19, 0x0078, 0x3df9, 0x1078, 0x3e20, 0x705c, 0x2060, 0x6800, | ||
1523 | 0x6002, 0x1078, 0x2073, 0x0078, 0x2a0c, 0x7064, 0x7067, 0x0000, | ||
1524 | 0x7083, 0x0000, 0x0079, 0x3e04, 0x3e11, 0x3e11, 0x3e0c, 0x3e0c, | ||
1525 | 0x3e0c, 0x3e11, 0x3e0c, 0x3e11, 0x77d4, 0xc7dd, 0x77d6, 0x0079, | ||
1526 | 0x2f7e, 0x7067, 0x0000, 0x0078, 0x2a0c, 0x681b, 0x0000, 0x0078, | ||
1527 | 0x3711, 0x6800, 0xa005, 0x00c0, 0x3e1e, 0x6002, 0x6006, 0x007c, | ||
1528 | 0x6410, 0x84ff, 0x0040, 0x3e32, 0x2009, 0x4f02, 0x2104, 0x8001, | ||
1529 | 0x200a, 0x8421, 0x6412, 0x00c0, 0x3e32, 0x2021, 0x4f04, 0x2404, | ||
1530 | 0xc0a5, 0x2022, 0x6008, 0xc0a4, 0x600a, 0x007c, 0x6018, 0xa005, | ||
1531 | 0x0040, 0x3e3c, 0x8001, 0x601a, 0x007c, 0x1078, 0x43d3, 0x681b, | ||
1532 | 0x0018, 0x0078, 0x3e7d, 0x1078, 0x43d3, 0x681b, 0x0019, 0x0078, | ||
1533 | 0x3e7d, 0x1078, 0x43d3, 0x681b, 0x001a, 0x0078, 0x3e7d, 0x1078, | ||
1534 | 0x43d3, 0x681b, 0x0003, 0x0078, 0x3e7d, 0x7774, 0x1078, 0x424e, | ||
1535 | 0x7178, 0xa18c, 0x00ff, 0x3210, 0xa294, 0x0300, 0x0040, 0x3e64, | ||
1536 | 0xa1e8, 0x94c0, 0x0078, 0x3e66, 0xa1e8, 0x95d0, 0x2d04, 0x2d08, | ||
1537 | 0x2068, 0xa005, 0x00c0, 0x3e6f, 0x707e, 0x0078, 0x2a0c, 0x6814, | ||
1538 | 0x7274, 0xa206, 0x0040, 0x3e77, 0x6800, 0x0078, 0x3e67, 0x6800, | ||
1539 | 0x200a, 0x681b, 0x0005, 0x707f, 0x0000, 0x1078, 0x3e20, 0x6820, | ||
1540 | 0xd084, 0x00c0, 0x3e85, 0x1078, 0x3e19, 0x1078, 0x3e36, 0x681f, | ||
1541 | 0x0000, 0x6823, 0x0020, 0x1078, 0x2073, 0x0078, 0x2a0c, 0xa282, | ||
1542 | 0x0003, 0x00c0, 0x4107, 0x7da8, 0xa5ac, 0x00ff, 0x7e5a, 0x7ea8, | ||
1543 | 0xa6b4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x0040, 0x3eea, | ||
1544 | 0xc1c4, 0x6922, 0xa6b4, 0x00ff, 0x0040, 0x3ed7, 0xa682, 0x000c, | ||
1545 | 0x0048, 0x3eae, 0x0040, 0x3eae, 0x2031, 0x000c, 0x2500, 0xa086, | ||
1546 | 0x000a, 0x0040, 0x3eb5, 0x852b, 0x852b, 0x1078, 0x41e0, 0x0040, | ||
1547 | 0x3ebd, 0x1078, 0x3fbc, 0x0078, 0x3ee0, 0x1078, 0x419b, 0x0c7e, | ||
1548 | 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3ff2, 0x0c7f, | ||
1549 | 0x6920, 0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, | ||
1550 | 0x3ed4, 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x0c7e, | ||
1551 | 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3ff2, 0x0c7f, | ||
1552 | 0x7e58, 0xd6d4, 0x00c0, 0x3ee7, 0x781b, 0x0067, 0x007c, 0x781b, | ||
1553 | 0x0079, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x6100, 0xd1e4, 0x0040, | ||
1554 | 0x3f33, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, | ||
1555 | 0x3efd, 0x0040, 0x3efd, 0x2011, 0x000c, 0x2600, 0xa202, 0x00c8, | ||
1556 | 0x3f02, 0x2230, 0x6208, 0xa294, 0x00ff, 0x2001, 0x4f05, 0x2004, | ||
1557 | 0xd0e4, 0x00c0, 0x3f17, 0x78ec, 0xd0e4, 0x0040, 0x3f17, 0xa282, | ||
1558 | 0x000a, 0x00c8, 0x3f1d, 0x2011, 0x000a, 0x0078, 0x3f1d, 0xa282, | ||
1559 | 0x000c, 0x00c8, 0x3f1d, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, | ||
1560 | 0x3f22, 0x2228, 0x1078, 0x419f, 0x2500, 0xa086, 0x000a, 0x0040, | ||
1561 | 0x3f2b, 0x852b, 0x852b, 0x1078, 0x41e0, 0x0040, 0x3f33, 0x1078, | ||
1562 | 0x3fbc, 0x0078, 0x3f37, 0x1078, 0x419b, 0x1078, 0x3ff2, 0x7858, | ||
1563 | 0xc095, 0x785a, 0x0c7f, 0x781b, 0x0078, 0x007c, 0x0c7e, 0x2960, | ||
1564 | 0x6000, 0xd0e4, 0x00c0, 0x3f58, 0xd0b4, 0x00c0, 0x3f52, 0x6010, | ||
1565 | 0xa084, 0x000f, 0x00c0, 0x3f52, 0x6104, 0xa18c, 0xfff5, 0x6106, | ||
1566 | 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x3f83, | ||
1567 | 0x68a0, 0xd0cc, 0x00c0, 0x3f52, 0x6208, 0xa294, 0x00ff, 0x2001, | ||
1568 | 0x4f05, 0x2004, 0xd0e4, 0x00c0, 0x3f71, 0x78ec, 0xd0e4, 0x0040, | ||
1569 | 0x3f71, 0xa282, 0x000b, 0x00c8, 0x3f71, 0x2011, 0x000a, 0x0078, | ||
1570 | 0x3f77, 0xa282, 0x000c, 0x00c8, 0x3f77, 0x2011, 0x000c, 0x6308, | ||
1571 | 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c, 0x0048, 0x3f83, 0x0040, | ||
1572 | 0x3f83, 0x2019, 0x000c, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, | ||
1573 | 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, | ||
1574 | 0x70d4, 0xd0b4, 0x0040, 0x3f9f, 0xc0b4, 0x70d6, 0x70b8, 0xa065, | ||
1575 | 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, | ||
1576 | 0x007c, 0x0c7e, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, | ||
1577 | 0x0032, 0x2019, 0x0000, 0x0078, 0x3fad, 0x78ab, 0x0001, 0x78ab, | ||
1578 | 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, | ||
1579 | 0xc0c5, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7158, 0x2160, 0x2018, | ||
1580 | 0xa08c, 0x0020, 0x0040, 0x3fc5, 0xc0ac, 0x2008, 0xa084, 0xfff0, | ||
1581 | 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, 0xa084, | ||
1582 | 0xfff0, 0xa18c, 0x000f, 0xa105, 0xc0f4, 0xa39c, 0x0020, 0x0040, | ||
1583 | 0x3fdb, 0xa085, 0x4000, 0xc0fc, 0xd0b4, 0x00c0, 0x3fe0, 0xc0fd, | ||
1584 | 0x78a6, 0x6016, 0x788a, 0xa6b4, 0x000f, 0x8637, 0x8204, 0x8004, | ||
1585 | 0xa084, 0x00ff, 0xa605, 0x600e, 0x6004, 0xa084, 0xfff5, 0x6006, | ||
1586 | 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x6018, 0x789a, 0x78a4, | ||
1587 | 0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, | ||
1588 | 0x600c, 0xa084, 0x00ff, 0x600e, 0x0c7f, 0x007c, 0xa282, 0x0002, | ||
1589 | 0x00c0, 0x4107, 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc, 0x0040, | ||
1590 | 0x4041, 0xc1cc, 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, | ||
1591 | 0x4107, 0x1078, 0x4094, 0x1078, 0x3ff2, 0xa980, 0x0001, 0x200c, | ||
1592 | 0x1078, 0x424a, 0x1078, 0x3f3e, 0x88ff, 0x0040, 0x4037, 0x789b, | ||
1593 | 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, | ||
1594 | 0x4034, 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7e58, | ||
1595 | 0xd6d4, 0x00c0, 0x403e, 0x781b, 0x0067, 0x007c, 0x781b, 0x0079, | ||
1596 | 0x007c, 0xa282, 0x0002, 0x00c8, 0x4049, 0xa284, 0x0001, 0x0040, | ||
1597 | 0x4052, 0x7158, 0xa188, 0x0000, 0x210c, 0xd1ec, 0x00c0, 0x4052, | ||
1598 | 0x2011, 0x0000, 0x1078, 0x417c, 0x1078, 0x4094, 0x1078, 0x3ff2, | ||
1599 | 0x7858, 0xc095, 0x785a, 0x781b, 0x0078, 0x007c, 0x0c7e, 0x027e, | ||
1600 | 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x00c0, 0x4075, 0xd0bc, | ||
1601 | 0x00c0, 0x4073, 0x6014, 0xd0b4, 0x00c0, 0x4073, 0xc1a4, 0x6106, | ||
1602 | 0xa006, 0x0078, 0x4091, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, | ||
1603 | 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x70d4, 0xd0b4, | ||
1604 | 0x0040, 0x408d, 0xc0b4, 0x70d6, 0x70b8, 0xa065, 0x6008, 0xa084, | ||
1605 | 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x6820, 0xa085, 0x0200, | ||
1606 | 0x6822, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x82ff, | ||
1607 | 0x0040, 0x409c, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, | ||
1608 | 0x78a4, 0xa084, 0xffbf, 0xa205, 0xc0fc, 0xd0b4, 0x00c0, 0x40a9, | ||
1609 | 0xc0fd, 0x78a6, 0x6016, 0x788a, 0x6004, 0xc0a4, 0x6006, 0x0c7f, | ||
1610 | 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, 0x40ba, 0x007f, | ||
1611 | 0x0078, 0x40bd, 0x007f, 0x0078, 0x4104, 0xd6ac, 0x0040, 0x4104, | ||
1612 | 0x7888, 0xa084, 0x0040, 0x0040, 0x4104, 0x7bb8, 0xa384, 0x003f, | ||
1613 | 0x831b, 0x00c8, 0x40cc, 0x8000, 0xa005, 0x0040, 0x40e1, 0x831b, | ||
1614 | 0x00c8, 0x40d5, 0x8001, 0x0040, 0x4101, 0xd6f4, 0x0040, 0x40e1, | ||
1615 | 0x78b8, 0x801b, 0x00c8, 0x40dd, 0x8000, 0xa084, 0x003f, 0x00c0, | ||
1616 | 0x4101, 0xc6f4, 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, | ||
1617 | 0x00c8, 0x40ec, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, | ||
1618 | 0x1078, 0x4a44, 0x781b, 0x0076, 0xb284, 0x0300, 0x0040, 0x40fc, | ||
1619 | 0x2001, 0x0000, 0x0078, 0x40fe, 0x2001, 0x0001, 0x1078, 0x48ce, | ||
1620 | 0x007c, 0x781b, 0x0076, 0x007c, 0x781b, 0x0079, 0x007c, 0x1078, | ||
1621 | 0x412f, 0x781b, 0x0078, 0x007c, 0x1078, 0x4118, 0x781b, 0x0078, | ||
1622 | 0x007c, 0x6827, 0x0002, 0x1078, 0x4120, 0x781b, 0x0078, 0x007c, | ||
1623 | 0x2001, 0x0005, 0x0078, 0x4131, 0x2001, 0x000c, 0x0078, 0x4131, | ||
1624 | 0x6820, 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0078, 0x4131, 0x2001, | ||
1625 | 0x000d, 0x0078, 0x4131, 0x2001, 0x0009, 0x0078, 0x4131, 0x2001, | ||
1626 | 0x0007, 0x789b, 0x007e, 0x78aa, 0xc69d, 0x7e5a, 0x70d4, 0xd0b4, | ||
1627 | 0x0040, 0x4147, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, | ||
1628 | 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, | ||
1629 | 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0x017e, | ||
1630 | 0xb28c, 0x0300, 0x0040, 0x4158, 0xa0e0, 0x53c0, 0x0078, 0x415a, | ||
1631 | 0xa0e0, 0x5440, 0x017f, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, | ||
1632 | 0x000f, 0x0040, 0x416a, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, | ||
1633 | 0xc09d, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, | ||
1634 | 0x0040, 0x417a, 0xa184, 0xffbf, 0xc0fd, 0x78a6, 0x6016, 0x6004, | ||
1635 | 0xc0a5, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, | ||
1636 | 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, | ||
1637 | 0x0004, 0x70d4, 0xd0b4, 0x0040, 0x419a, 0xc0b4, 0x70d6, 0x0c7e, | ||
1638 | 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, | ||
1639 | 0x601a, 0x0c7f, 0x007c, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, | ||
1640 | 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, | ||
1641 | 0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x70d4, 0xd0b4, 0x0040, | ||
1642 | 0x41be, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, | ||
1643 | 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x157e, | ||
1644 | 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, | ||
1645 | 0x79a4, 0xa18c, 0xfff0, 0x2021, 0x4233, 0x2019, 0x0011, 0x20a9, | ||
1646 | 0x000e, 0x2011, 0x0032, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, | ||
1647 | 0x41de, 0x8420, 0x2300, 0xa210, 0x00f0, 0x41d3, 0x157f, 0x007c, | ||
1648 | 0x157e, 0x2001, 0x4f05, 0x2004, 0xd0e4, 0x00c0, 0x4211, 0x2021, | ||
1649 | 0x4241, 0x20a9, 0x0009, 0x2011, 0x0028, 0xa582, 0x0019, 0x0040, | ||
1650 | 0x4227, 0x0048, 0x4227, 0x8420, 0x95a9, 0x2011, 0x0032, 0xa582, | ||
1651 | 0x0032, 0x0040, 0x4227, 0x0048, 0x4227, 0x8420, 0x95a9, 0x2019, | ||
1652 | 0x000a, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x4227, 0x0048, | ||
1653 | 0x4227, 0x8420, 0x2300, 0xa210, 0x00f0, 0x4203, 0x157f, 0x0078, | ||
1654 | 0x4225, 0x2021, 0x4233, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, | ||
1655 | 0x0032, 0x2200, 0xa502, 0x0040, 0x4227, 0x0048, 0x4227, 0x8420, | ||
1656 | 0x2300, 0xa210, 0x00f0, 0x4219, 0x157f, 0xa006, 0x007c, 0x157f, | ||
1657 | 0xa582, 0x0064, 0x00c8, 0x4230, 0x7808, 0xa085, 0x0070, 0x780a, | ||
1658 | 0x2404, 0xa005, 0x007c, 0x1209, 0x3002, 0x3202, 0x4203, 0x4403, | ||
1659 | 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, | ||
1660 | 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07, | ||
1661 | 0x7e07, 0x0e00, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00, | ||
1662 | 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, | ||
1663 | 0xd7fc, 0x0040, 0x425f, 0xa0e0, 0x74c0, 0x0078, 0x4261, 0xa0e0, | ||
1664 | 0x54c0, 0x007c, 0x0e7e, 0x0f7e, 0xd084, 0x0040, 0x426f, 0x2079, | ||
1665 | 0x0100, 0x2009, 0x4f80, 0x2071, 0x4f80, 0x0078, 0x427f, 0x2009, | ||
1666 | 0x4f40, 0x2071, 0x4f40, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x0040, | ||
1667 | 0x427d, 0x2079, 0x0100, 0x0078, 0x427f, 0x2079, 0x0200, 0x2091, | ||
1668 | 0x8000, 0x2104, 0xa084, 0x000f, 0x0079, 0x4286, 0x4290, 0x4290, | ||
1669 | 0x4290, 0x4290, 0x4290, 0x4290, 0x428e, 0x428e, 0x1078, 0x29b2, | ||
1670 | 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0040, 0x42df, | ||
1671 | 0x7858, 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086, | ||
1672 | 0x1814, 0x00c0, 0x42df, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, | ||
1673 | 0x00c0, 0x42a5, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0, | ||
1674 | 0x42ac, 0x7830, 0xd0bc, 0x00c0, 0x42df, 0x007e, 0x2001, 0x4f04, | ||
1675 | 0x2004, 0xd0ec, 0x007f, 0x0040, 0x42c1, 0xb284, 0x0300, 0x0078, | ||
1676 | 0x42c3, 0xb284, 0x0400, 0x0040, 0x42c9, 0x0018, 0x42df, 0x0078, | ||
1677 | 0x42cb, 0x0028, 0x42df, 0x79e4, 0xa184, 0x0030, 0x0040, 0x42df, | ||
1678 | 0x78ec, 0xa084, 0x0003, 0x0040, 0x42df, 0x681c, 0xd0ac, 0x00c0, | ||
1679 | 0x42dd, 0x1078, 0x4369, 0x0078, 0x42df, 0x781b, 0x00f9, 0x0f7f, | ||
1680 | 0x0e7f, 0x007c, 0x0c7e, 0x2001, 0x4f01, 0x2004, 0xd0ac, 0x00c0, | ||
1681 | 0x435b, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, | ||
1682 | 0xb28c, 0x0300, 0x0040, 0x42f8, 0xa0e0, 0x53c0, 0x0078, 0x42fa, | ||
1683 | 0xa0e0, 0x5440, 0x6004, 0xa084, 0x000a, 0x00c0, 0x435b, 0x6108, | ||
1684 | 0xa194, 0xff00, 0x0040, 0x435b, 0xa18c, 0x00ff, 0x2001, 0x000a, | ||
1685 | 0xa106, 0x0040, 0x4326, 0x2001, 0x000c, 0xa106, 0x0040, 0x432a, | ||
1686 | 0x2001, 0x0012, 0xa106, 0x0040, 0x432e, 0x2001, 0x0014, 0xa106, | ||
1687 | 0x0040, 0x4332, 0x2001, 0x0019, 0xa106, 0x0040, 0x4336, 0x2001, | ||
1688 | 0x0032, 0xa106, 0x0040, 0x433a, 0x0078, 0x433e, 0x2009, 0x000c, | ||
1689 | 0x0078, 0x4340, 0x2009, 0x0012, 0x0078, 0x4340, 0x2009, 0x0014, | ||
1690 | 0x0078, 0x4340, 0x2009, 0x0019, 0x0078, 0x4340, 0x2009, 0x0020, | ||
1691 | 0x0078, 0x4340, 0x2009, 0x003f, 0x0078, 0x4340, 0x2011, 0x0000, | ||
1692 | 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x2061, | ||
1693 | 0x4f00, 0x6004, 0xd0bc, 0x0040, 0x435b, 0x6814, 0xd0fc, 0x00c0, | ||
1694 | 0x4356, 0x60ea, 0x2061, 0x4f40, 0x0078, 0x4359, 0x60ee, 0x2061, | ||
1695 | 0x4f80, 0x601f, 0x800f, 0x0c7f, 0x007c, 0x781b, 0x0079, 0x007c, | ||
1696 | 0x781b, 0x0078, 0x007c, 0x781b, 0x0067, 0x007c, 0x781b, 0x0064, | ||
1697 | 0x007c, 0x2009, 0x4f19, 0x210c, 0xa186, 0x0000, 0x0040, 0x437b, | ||
1698 | 0xa186, 0x0001, 0x0040, 0x437e, 0x701f, 0x000b, 0x7067, 0x0001, | ||
1699 | 0x781b, 0x0047, 0x007c, 0x781b, 0x00f0, 0x007c, 0x701f, 0x000a, | ||
1700 | 0x007c, 0x2009, 0x4f19, 0x210c, 0xa186, 0x0000, 0x0040, 0x4396, | ||
1701 | 0xa186, 0x0001, 0x0040, 0x4393, 0x701f, 0x000b, 0x7067, 0x0001, | ||
1702 | 0x781b, 0x0047, 0x007c, 0x701f, 0x000a, 0x007c, 0x781b, 0x00ef, | ||
1703 | 0x007c, 0x781b, 0x00f9, 0x007c, 0x781b, 0x00f8, 0x007c, 0x781b, | ||
1704 | 0x00c9, 0x007c, 0x781b, 0x00c8, 0x007c, 0x6818, 0xd0fc, 0x0040, | ||
1705 | 0x43ab, 0x681b, 0x001d, 0x7067, 0x0001, 0x781b, 0x0047, 0x007c, | ||
1706 | 0x7830, 0xa084, 0x00c0, 0x00c0, 0x43d2, 0x7808, 0xc08c, 0x780a, | ||
1707 | 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x00c0, | ||
1708 | 0x43cf, 0x2001, 0x4f05, 0x2004, 0xd0e4, 0x00c0, 0x43cd, 0x7804, | ||
1709 | 0xa084, 0xff1f, 0xa085, 0x00e0, 0x7806, 0xa006, 0x007c, 0x7808, | ||
1710 | 0xc08d, 0x780a, 0x007c, 0x7808, 0xc08d, 0x780a, 0x007c, 0x7830, | ||
1711 | 0xa084, 0x0040, 0x00c0, 0x43d7, 0x2001, 0x4f04, 0x2004, 0xd0ec, | ||
1712 | 0x0040, 0x43e6, 0xb284, 0x0300, 0x0078, 0x43e8, 0xb284, 0x0400, | ||
1713 | 0x0040, 0x43ee, 0x0098, 0x43f2, 0x0078, 0x43f0, 0x00a8, 0x43f2, | ||
1714 | 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, | ||
1715 | 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x4415, 0x007e, | ||
1716 | 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x440b, 0xb284, | ||
1717 | 0x0300, 0x0078, 0x440d, 0xb284, 0x0400, 0x0040, 0x4413, 0x0098, | ||
1718 | 0x440f, 0x0078, 0x4415, 0x00a8, 0x4413, 0x78ac, 0x007e, 0x7808, | ||
1719 | 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, 0x0001, 0x00c0, | ||
1720 | 0x37b9, 0xa784, 0x0070, 0x0040, 0x442d, 0x0c7e, 0x2d60, 0x2f68, | ||
1721 | 0x1078, 0x2926, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040, | ||
1722 | 0x443a, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x37b9, | ||
1723 | 0x0078, 0x435d, 0xa784, 0x0004, 0x0040, 0x4469, 0x78b8, 0xa084, | ||
1724 | 0x4001, 0x0040, 0x4469, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, | ||
1725 | 0x0040, 0x37b9, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0, | ||
1726 | 0x4469, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00f9, | ||
1727 | 0x007c, 0x784b, 0x0008, 0x6818, 0xd0fc, 0x0040, 0x4466, 0x681b, | ||
1728 | 0x0015, 0xd6f4, 0x0040, 0x4466, 0x681b, 0x0007, 0x1078, 0x4369, | ||
1729 | 0x007c, 0x681b, 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f, | ||
1730 | 0x0000, 0x6833, 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, | ||
1731 | 0x0040, 0x30af, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, | ||
1732 | 0x0040, 0x4486, 0xb284, 0x0300, 0x0078, 0x4488, 0xb284, 0x0400, | ||
1733 | 0x0040, 0x448e, 0x0018, 0x2a08, 0x0078, 0x4490, 0x0028, 0x2a08, | ||
1734 | 0x0078, 0x410c, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003, | ||
1735 | 0x8003, 0xd3fc, 0x0040, 0x44a0, 0xa080, 0x5440, 0x0078, 0x44a2, | ||
1736 | 0xa080, 0x53c0, 0x2060, 0x2048, 0x705a, 0x2a60, 0x007c, 0x0020, | ||
1737 | 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, | ||
1738 | 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, | ||
1739 | 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, | ||
1740 | 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, | ||
1741 | 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9848, 0x0014, 0x0014, | ||
1742 | 0x9914, 0x98fd, 0x0014, 0x0014, 0x0080, 0x00ff, 0x0100, 0x0402, | ||
1743 | 0x2008, 0xf880, 0x0018, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, | ||
1744 | 0x2500, 0x0013, 0x2500, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, | ||
1745 | 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, | ||
1746 | 0x0010, 0xa200, 0x3806, 0x7102, 0x805f, 0x9481, 0x8839, 0x20c4, | ||
1747 | 0x0864, 0xa856, 0x3008, 0x28c1, 0x9d1b, 0xa201, 0x300c, 0x2847, | ||
1748 | 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2, | ||
1749 | 0x9ccb, 0xa8f3, 0x0864, 0xa844, 0x300c, 0xa801, 0x3008, 0x28e1, | ||
1750 | 0x9ccb, 0x2021, 0xa81d, 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0, | ||
1751 | 0x6fc0, 0x63a4, 0x6c80, 0x0212, 0xa205, 0x883d, 0x7942, 0x8020, | ||
1752 | 0xa4a1, 0x882b, 0x1814, 0x883b, 0x80df, 0x94a1, 0x7027, 0x85f2, | ||
1753 | 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa816, 0x883e, 0xa814, | ||
1754 | 0x2001, 0xa812, 0xa204, 0x64c0, 0x6de0, 0x67a0, 0x6fc0, 0x7942, | ||
1755 | 0x8020, 0xa4a1, 0x1814, 0x80df, 0x94a1, 0x883b, 0x7023, 0x8576, | ||
1756 | 0x8677, 0xa802, 0x7861, 0x883e, 0x206b, 0x28c1, 0x9d1b, 0x2044, | ||
1757 | 0x2103, 0x20a2, 0x2081, 0xa8c3, 0xa207, 0x0904, 0xa20e, 0xa809, | ||
1758 | 0xa203, 0x8000, 0x85a4, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601, | ||
1759 | 0xa208, 0x856e, 0x866f, 0x7161, 0x0014, 0x0704, 0x3008, 0x9ccb, | ||
1760 | 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf844, | ||
1761 | 0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861, 0xa8ea, 0xf801, 0x0014, | ||
1762 | 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014, | ||
1763 | 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014, | ||
1764 | 0x3008, 0x8000, 0x284a, 0x1011, 0xa8fc, 0x3008, 0x9d33, 0x8000, | ||
1765 | 0xa000, 0x2802, 0x1011, 0xa8fd, 0x9d39, 0xa8bd, 0x3008, 0x9d33, | ||
1766 | 0x283b, 0x1011, 0xa8fd, 0xa209, 0x7102, 0x805f, 0x9481, 0x0017, | ||
1767 | 0x300c, 0xa209, 0x8000, 0x85a4, 0x1de2, 0xa209, 0xdac1, 0x0014, | ||
1768 | 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0, | ||
1769 | 0x18f2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d25, | ||
1770 | 0x0704, 0xa206, 0x6865, 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, | ||
1771 | 0x6042, 0x8008, 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021, | ||
1772 | 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822, | ||
1773 | 0x0016, 0x7944, 0x8421, 0xa020, 0xa532, 0x84a1, 0x0016, 0x7944, | ||
1774 | 0x8421, 0xa0df, 0x9532, 0x84a1, 0x0016, 0x0000, 0x127e, 0x70d4, | ||
1775 | 0xa084, 0x4600, 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205, | ||
1776 | 0x00c0, 0x4602, 0x720c, 0x82ff, 0x0040, 0x45ed, 0x8aff, 0x00c0, | ||
1777 | 0x4602, 0x7200, 0xd284, 0x00c0, 0x4602, 0x7804, 0xd0cc, 0x0040, | ||
1778 | 0x45f3, 0x1078, 0x4acc, 0x7023, 0x0000, 0x7027, 0x0000, 0x7000, | ||
1779 | 0xd084, 0x0040, 0x45fd, 0x7007, 0x0004, 0x7003, 0x0008, 0x127f, | ||
1780 | 0x2000, 0x007c, 0x7000, 0xa084, 0x0003, 0x7002, 0xc69c, 0xd084, | ||
1781 | 0x0040, 0x465b, 0x7108, 0x0005, 0x7008, 0xa106, 0x00c0, 0x460a, | ||
1782 | 0xa184, 0x0003, 0x0040, 0x468c, 0xa184, 0x01e0, 0x00c0, 0x468c, | ||
1783 | 0xd1f4, 0x00c0, 0x460a, 0xa184, 0x3000, 0xa086, 0x1000, 0x0040, | ||
1784 | 0x460a, 0x2001, 0x4f05, 0x2004, 0xd0e4, 0x0040, 0x4637, 0x2011, | ||
1785 | 0x0180, 0x710c, 0x8211, 0x0040, 0x4645, 0x7008, 0xd0f4, 0x00c0, | ||
1786 | 0x460a, 0x700c, 0xa106, 0x0040, 0x462a, 0x0078, 0x4627, 0x2011, | ||
1787 | 0x0180, 0x710c, 0x8211, 0x0040, 0x4645, 0x7008, 0xd0f4, 0x00c0, | ||
1788 | 0x460a, 0x700c, 0xa106, 0x0040, 0x463a, 0x7007, 0x0012, 0x7108, | ||
1789 | 0x0005, 0x7008, 0xa106, 0x00c0, 0x4647, 0xa184, 0x0003, 0x0040, | ||
1790 | 0x468c, 0xd194, 0x0040, 0x4647, 0xd1f4, 0x0040, 0x468c, 0x7007, | ||
1791 | 0x0002, 0x0078, 0x460a, 0x7108, 0xd1fc, 0x0040, 0x4666, 0x1078, | ||
1792 | 0x47ed, 0x8aff, 0x0040, 0x45dc, 0x0078, 0x465b, 0x700c, 0xa08c, | ||
1793 | 0x03ff, 0x0040, 0x4691, 0x7004, 0xd084, 0x0040, 0x4683, 0x7014, | ||
1794 | 0xa005, 0x00c0, 0x467f, 0x7010, 0x7310, 0xa306, 0x00c0, 0x4673, | ||
1795 | 0x2300, 0xa005, 0x0040, 0x4683, 0xa102, 0x00c8, 0x465b, 0x7007, | ||
1796 | 0x0010, 0x0078, 0x468c, 0x8aff, 0x0040, 0x4691, 0x1078, 0x49f2, | ||
1797 | 0x00c0, 0x4686, 0x0040, 0x465b, 0x1078, 0x4738, 0x127f, 0x2000, | ||
1798 | 0x007c, 0x7204, 0x7108, 0xc19c, 0x8103, 0x00c8, 0x46a0, 0x7007, | ||
1799 | 0x0002, 0x0078, 0x4691, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, | ||
1800 | 0xa205, 0x00c0, 0x468c, 0x7023, 0x0000, 0x7027, 0x0000, 0x7003, | ||
1801 | 0x0008, 0x007e, 0x2001, 0x4f01, 0x2004, 0xd0cc, 0x0040, 0x46b2, | ||
1802 | 0x1078, 0x4acc, 0x007f, 0x127f, 0x2000, 0x007c, 0x6428, 0x84ff, | ||
1803 | 0x0040, 0x46e2, 0x2c70, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x46f2, | ||
1804 | 0x273c, 0x87fb, 0x00c0, 0x46d0, 0x0048, 0x46c8, 0x1078, 0x29b2, | ||
1805 | 0x609c, 0xa075, 0x0040, 0x46e2, 0x0078, 0x46bb, 0x2039, 0x46e7, | ||
1806 | 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529, 0x8421, 0x0040, | ||
1807 | 0x46e2, 0x8738, 0x2704, 0xa005, 0x00c0, 0x46d1, 0x709c, 0xa075, | ||
1808 | 0x00c0, 0x46bb, 0x007c, 0x0000, 0x0005, 0x0009, 0x000d, 0x0011, | ||
1809 | 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, 0x000f, 0x0015, | ||
1810 | 0x001b, 0x0000, 0x0000, 0x46e7, 0x46e4, 0x0000, 0x0000, 0x8000, | ||
1811 | 0x0000, 0x46e7, 0x0000, 0x46ef, 0x46ec, 0x0000, 0x0000, 0x0000, | ||
1812 | 0x0000, 0x46ef, 0x0000, 0x46ea, 0x46ea, 0x0000, 0x0000, 0x8000, | ||
1813 | 0x0000, 0x46ea, 0x0000, 0x46f0, 0x46f0, 0x0000, 0x0000, 0x0000, | ||
1814 | 0x0000, 0x46f0, 0x2079, 0x4f00, 0x2071, 0x0010, 0x7007, 0x000a, | ||
1815 | 0x7007, 0x0002, 0x7003, 0x0001, 0x7810, 0xd0ec, 0x0040, 0x4726, | ||
1816 | 0x2009, 0x0001, 0x2071, 0x0020, 0x0078, 0x472a, 0x2009, 0x0002, | ||
1817 | 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, | ||
1818 | 0x8109, 0x0040, 0x4737, 0x2071, 0x0020, 0x0078, 0x472a, 0x007c, | ||
1819 | 0x7004, 0x8004, 0x00c8, 0x47c1, 0x7108, 0x7008, 0xa106, 0x00c0, | ||
1820 | 0x473c, 0xa184, 0x01e0, 0x0040, 0x4749, 0x1078, 0x4830, 0x0078, | ||
1821 | 0x47e9, 0x7007, 0x0012, 0x2019, 0x0000, 0x7108, 0x7008, 0xa106, | ||
1822 | 0x00c0, 0x474d, 0xa184, 0x01e0, 0x0040, 0x475a, 0x1078, 0x4830, | ||
1823 | 0x0078, 0x47e9, 0x7810, 0xd0ec, 0x0040, 0x4774, 0x2001, 0x04fd, | ||
1824 | 0x2004, 0xa086, 0x0003, 0x00c0, 0x4778, 0xa184, 0x4000, 0x0040, | ||
1825 | 0x477c, 0xa382, 0x0003, 0x00c8, 0x477c, 0xa184, 0x0004, 0x0040, | ||
1826 | 0x474d, 0x8318, 0x0078, 0x474d, 0x7814, 0xd0ec, 0x00c0, 0x477c, | ||
1827 | 0xa184, 0x4000, 0x00c0, 0x474d, 0xa19c, 0x300c, 0xa386, 0x2004, | ||
1828 | 0x0040, 0x4799, 0xa386, 0x0008, 0x0040, 0x47a4, 0x7004, 0xd084, | ||
1829 | 0x00c0, 0x4795, 0x7108, 0x7008, 0xa106, 0x00c0, 0x478a, 0xa184, | ||
1830 | 0x0003, 0x0040, 0x4795, 0x0078, 0x4830, 0xa386, 0x200c, 0x00c0, | ||
1831 | 0x474d, 0x7200, 0x8204, 0x0048, 0x47a4, 0x730c, 0xa384, 0x03ff, | ||
1832 | 0x0040, 0x47a4, 0x1078, 0x29b2, 0x7108, 0x7008, 0xa106, 0x00c0, | ||
1833 | 0x47a4, 0xa184, 0x01e0, 0x0040, 0x47b1, 0x1078, 0x4830, 0x0078, | ||
1834 | 0x47e9, 0x7007, 0x0012, 0x7000, 0xd084, 0x00c0, 0x47c1, 0x7310, | ||
1835 | 0x7014, 0xa305, 0x0040, 0x47c1, 0x710c, 0xa184, 0x03ff, 0x00c0, | ||
1836 | 0x4738, 0x7108, 0x7008, 0xa106, 0x00c0, 0x47c1, 0xa184, 0x01e0, | ||
1837 | 0x0040, 0x47ce, 0x1078, 0x4830, 0x0078, 0x47e9, 0x7007, 0x0012, | ||
1838 | 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x47d2, 0x7108, 0x7008, | ||
1839 | 0xa106, 0x00c0, 0x47d6, 0xa184, 0x01e0, 0x0040, 0x47e3, 0x1078, | ||
1840 | 0x4830, 0x0078, 0x47e9, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048, | ||
1841 | 0x47d6, 0x7003, 0x0008, 0x007c, 0x7108, 0xa184, 0x01e0, 0x00c0, | ||
1842 | 0x4830, 0x7108, 0xa184, 0x01e0, 0x00c0, 0x4830, 0xa184, 0x0007, | ||
1843 | 0x0079, 0x47fa, 0x4804, 0x4814, 0x4802, 0x4814, 0x4802, 0x4872, | ||
1844 | 0x4802, 0x4870, 0x1078, 0x29b2, 0x7004, 0xa084, 0x0010, 0xc08d, | ||
1845 | 0x7006, 0x8aff, 0x00c0, 0x480f, 0x2049, 0x0000, 0x007c, 0x1078, | ||
1846 | 0x49f2, 0x00c0, 0x480f, 0x007c, 0x7004, 0xa084, 0x0010, 0xc08d, | ||
1847 | 0x7006, 0x7004, 0xd084, 0x00c0, 0x4828, 0x7108, 0x7008, 0xa106, | ||
1848 | 0x00c0, 0x481d, 0xa184, 0x0003, 0x0040, 0x4828, 0x0078, 0x4830, | ||
1849 | 0x8aff, 0x0040, 0x482f, 0x1078, 0x49f2, 0x00c0, 0x482b, 0x007c, | ||
1850 | 0x7007, 0x0012, 0x7108, 0x00e0, 0x4833, 0x2091, 0x6000, 0x00e0, | ||
1851 | 0x4837, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, | ||
1852 | 0xd09c, 0x00c0, 0x483f, 0x7007, 0x0012, 0x7108, 0xd1fc, 0x00c0, | ||
1853 | 0x4843, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0, 0x4857, 0x7004, | ||
1854 | 0xa005, 0x00c0, 0x4857, 0x700c, 0xa005, 0x0040, 0x4859, 0x0078, | ||
1855 | 0x483b, 0x2049, 0x0000, 0xb284, 0x0100, 0x0040, 0x4863, 0x2001, | ||
1856 | 0x0000, 0x0078, 0x4865, 0x2001, 0x0001, 0x1078, 0x4262, 0x681b, | ||
1857 | 0x0002, 0x2051, 0x0000, 0x007c, 0x1078, 0x29b2, 0x1078, 0x29b2, | ||
1858 | 0x1078, 0x48b9, 0x7210, 0x7114, 0x700c, 0xa09c, 0x03ff, 0x2800, | ||
1859 | 0xa300, 0xa211, 0xa189, 0x0000, 0x1078, 0x48b9, 0x2704, 0x2c58, | ||
1860 | 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, | ||
1861 | 0xa305, 0x0040, 0x4895, 0x00c8, 0x4895, 0x8412, 0x8210, 0x830a, | ||
1862 | 0xa189, 0x0000, 0x2b60, 0x0078, 0x487c, 0x2b60, 0x8a07, 0x007e, | ||
1863 | 0x6004, 0xd09c, 0x0040, 0x48a0, 0xa7ba, 0x46ec, 0x0078, 0x48a2, | ||
1864 | 0xa7ba, 0x46e4, 0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, | ||
1865 | 0x6b8e, 0x7108, 0x7008, 0xa106, 0x00c0, 0x48a9, 0xa184, 0x01e0, | ||
1866 | 0x0040, 0x48b4, 0x1078, 0x4830, 0x7007, 0x0012, 0x1078, 0x4738, | ||
1867 | 0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x48cd, 0x6000, | ||
1868 | 0xa064, 0x00c0, 0x48c4, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, | ||
1869 | 0x4702, 0x203c, 0x87fb, 0x1040, 0x29b2, 0x007c, 0x127e, 0x0d7e, | ||
1870 | 0x70d4, 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x6884, 0x2060, | ||
1871 | 0x6888, 0x6b8c, 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, | ||
1872 | 0x007e, 0x6804, 0xa084, 0x0008, 0x007f, 0x0040, 0x48eb, 0xa0b8, | ||
1873 | 0x46ec, 0x0078, 0x48ed, 0xa0b8, 0x46e4, 0xb284, 0x0100, 0x0040, | ||
1874 | 0x48f4, 0x7e20, 0x0078, 0x48f5, 0x7e24, 0xa6b5, 0x000c, 0x681c, | ||
1875 | 0xd0b4, 0x0040, 0x48fc, 0xc685, 0x2400, 0xa305, 0x0040, 0x4925, | ||
1876 | 0x2c58, 0x2704, 0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, | ||
1877 | 0xa301, 0x701e, 0xd19c, 0x0040, 0x4915, 0x6010, 0xa081, 0x0000, | ||
1878 | 0x7022, 0x6014, 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, | ||
1879 | 0x7012, 0x620c, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, | ||
1880 | 0x2b60, 0x1078, 0x4a1c, 0x0078, 0x4927, 0x1078, 0x49f2, 0x00c0, | ||
1881 | 0x4925, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, | ||
1882 | 0x4600, 0x8004, 0x2090, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094, | ||
1883 | 0x00c0, 0x4936, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, | ||
1884 | 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x007e, 0x2090, 0x007f, | ||
1885 | 0x0d7f, 0x7e20, 0xb284, 0x0100, 0x00c0, 0x494f, 0x7e24, 0xa6b5, | ||
1886 | 0x000c, 0x681c, 0xd0ac, 0x00c0, 0x495a, 0xc685, 0x7003, 0x0000, | ||
1887 | 0x7007, 0x0004, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, | ||
1888 | 0xa7b8, 0x46f2, 0x273c, 0x87fb, 0x00c0, 0x4970, 0x0048, 0x496a, | ||
1889 | 0x1078, 0x29b2, 0x689c, 0xa065, 0x0040, 0x4974, 0x0078, 0x495d, | ||
1890 | 0x1078, 0x49f2, 0x00c0, 0x4970, 0x127f, 0x2000, 0x007c, 0x127e, | ||
1891 | 0x007e, 0x017e, 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x007e, | ||
1892 | 0x2090, 0x007f, 0x7e20, 0xb284, 0x0100, 0x00c0, 0x4988, 0x7e24, | ||
1893 | 0x0d7f, 0x037f, 0x047f, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040, | ||
1894 | 0x4996, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004, 0x2049, 0x4977, | ||
1895 | 0x6828, 0xa055, 0x0d7e, 0x0040, 0x49ee, 0x2d70, 0x2e60, 0x7004, | ||
1896 | 0xa0bc, 0x000f, 0xa7b8, 0x46f2, 0x273c, 0x87fb, 0x00c0, 0x49b3, | ||
1897 | 0x0048, 0x49ac, 0x1078, 0x29b2, 0x709c, 0xa075, 0x2060, 0x0040, | ||
1898 | 0x49ee, 0x0078, 0x499f, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, | ||
1899 | 0xa31b, 0x0048, 0x49cc, 0x8a51, 0x00c0, 0x49c0, 0x1078, 0x29b2, | ||
1900 | 0x8738, 0x2704, 0xa005, 0x00c0, 0x49b4, 0x709c, 0xa075, 0x2060, | ||
1901 | 0x0040, 0x49ee, 0x0078, 0x499f, 0x8422, 0x8420, 0x831a, 0xa399, | ||
1902 | 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, | ||
1903 | 0x49db, 0x1078, 0x29b2, 0xb284, 0x0100, 0x0040, 0x49e9, 0x2001, | ||
1904 | 0x4f04, 0x2004, 0xd0ec, 0x00c0, 0x49e9, 0x2071, 0x0050, 0x0078, | ||
1905 | 0x49eb, 0x2071, 0x0020, 0x0d7f, 0x0078, 0x48fc, 0x0d7f, 0x127f, | ||
1906 | 0x2000, 0x007c, 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, | ||
1907 | 0x49fb, 0xa006, 0x007c, 0xa084, 0x0003, 0xa086, 0x0003, 0x00c0, | ||
1908 | 0x4a02, 0x007c, 0x2704, 0xac78, 0x7800, 0x701a, 0x7804, 0x701e, | ||
1909 | 0x7808, 0x7012, 0x780c, 0x7016, 0x6004, 0xd09c, 0x0040, 0x4a14, | ||
1910 | 0x7810, 0x7022, 0x7814, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, | ||
1911 | 0xc085, 0x7006, 0x2079, 0x4f00, 0x8738, 0x8a51, 0x0040, 0x4a40, | ||
1912 | 0x2704, 0xa005, 0x00c0, 0x4a32, 0x609c, 0xa005, 0x0040, 0x4a41, | ||
1913 | 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, 0x46f2, 0x203c, 0x87fb, | ||
1914 | 0x1040, 0x29b2, 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, | ||
1915 | 0x4a3c, 0xa006, 0x0078, 0x4a41, 0xa084, 0x0003, 0xa086, 0x0003, | ||
1916 | 0x007c, 0x2051, 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x70d4, | ||
1917 | 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, 0xa184, | ||
1918 | 0x0003, 0x00c0, 0x4a59, 0x6828, 0xa005, 0x0040, 0x4a69, 0x0078, | ||
1919 | 0x4602, 0x7108, 0xd1fc, 0x0040, 0x4a61, 0x1078, 0x47ed, 0x0078, | ||
1920 | 0x4a4e, 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0040, 0x4a63, 0x1078, | ||
1921 | 0x47ed, 0x7008, 0xa086, 0x0008, 0x00c0, 0x4a4e, 0x7000, 0xa005, | ||
1922 | 0x00c0, 0x4a4e, 0x7003, 0x0000, 0x2049, 0x0000, 0x007e, 0x7804, | ||
1923 | 0xd0cc, 0x0040, 0x4a7d, 0x1078, 0x4acc, 0x007f, 0x127f, 0x2000, | ||
1924 | 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x70d4, | ||
1925 | 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x2049, 0x4a81, 0xad80, | ||
1926 | 0x0011, 0x20a0, 0xb284, 0x0100, 0x0040, 0x4aa4, 0x2001, 0x4f04, | ||
1927 | 0x2004, 0xd0ec, 0x0040, 0x4aa0, 0x2099, 0x0031, 0x0078, 0x4aa6, | ||
1928 | 0x2099, 0x0032, 0x0078, 0x4aa6, 0x2099, 0x0031, 0x700c, 0xa084, | ||
1929 | 0x03ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, | ||
1930 | 0x0040, 0x4ab5, 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, 0x03ff, | ||
1931 | 0x0040, 0x4ac1, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, | ||
1932 | 0x4abc, 0x0c7f, 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, | ||
1933 | 0x147f, 0x127f, 0x2000, 0x007c, 0x6814, 0xd0fc, 0x0040, 0x4b11, | ||
1934 | 0x7000, 0xd084, 0x0040, 0x4b11, 0x7e24, 0xa6b5, 0x0004, 0x7007, | ||
1935 | 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4ad9, 0x7118, 0x017e, | ||
1936 | 0x711c, 0x017e, 0x7120, 0x017e, 0x7124, 0x017e, 0xa00e, 0x711a, | ||
1937 | 0x701f, 0x3fff, 0x7122, 0x7126, 0x7013, 0x0004, 0x7116, 0x7602, | ||
1938 | 0x7007, 0x0001, 0x2001, 0xffff, 0x2009, 0x0031, 0x200a, 0x200a, | ||
1939 | 0x7108, 0x7008, 0xa106, 0x00c0, 0x4af8, 0xd1fc, 0x0040, 0x4af8, | ||
1940 | 0x027f, 0x7226, 0x027f, 0x7222, 0x027f, 0x721e, 0x027f, 0x721a, | ||
1941 | 0x7007, 0x0002, 0x7008, 0xa086, 0x0008, 0x0040, 0x4b11, 0x0078, | ||
1942 | 0x4830, 0x7007, 0x0004, 0x7003, 0x0000, 0x007c, 0x2091, 0x8000, | ||
1943 | 0x2091, 0x6000, 0x78ac, 0xa005, 0x00c0, 0x4b2d, 0x7974, 0x70d0, | ||
1944 | 0xa106, 0x00c0, 0x4b2d, 0x781c, 0xa005, 0x0040, 0x4b2d, 0x781f, | ||
1945 | 0x0000, 0x0068, 0x4b2d, 0x2091, 0x4080, 0x7830, 0x8001, 0x7832, | ||
1946 | 0x00c0, 0x4bb5, 0x7834, 0x7832, 0x7810, 0xd0ec, 0x00c0, 0x4bae, | ||
1947 | 0x2061, 0x74c0, 0x2069, 0x4f80, 0xc7fd, 0x68d0, 0xa005, 0x0040, | ||
1948 | 0x4b47, 0x8001, 0x68d2, 0x00c0, 0x4b47, 0x1078, 0x4d83, 0x6800, | ||
1949 | 0xa084, 0x000f, 0x0040, 0x4b5c, 0xa086, 0x0001, 0x0040, 0x4b5c, | ||
1950 | 0x6844, 0xa00d, 0x0040, 0x4b5c, 0x2104, 0xa005, 0x0040, 0x4b5c, | ||
1951 | 0x8001, 0x200a, 0x0040, 0x4cf6, 0x6814, 0xa005, 0x0040, 0x4b81, | ||
1952 | 0x8001, 0x6816, 0x00c0, 0x4b81, 0x68a7, 0x0001, 0x0f7e, 0xd7fc, | ||
1953 | 0x00c0, 0x4b76, 0x7810, 0xd0ec, 0x0040, 0x4b72, 0x2079, 0x0100, | ||
1954 | 0x0078, 0x4b78, 0x2079, 0x0200, 0x0078, 0x4b78, 0x2079, 0x0100, | ||
1955 | 0x1078, 0x43d3, 0x0f7f, 0x6864, 0xa005, 0x0040, 0x4b81, 0x1078, | ||
1956 | 0x266f, 0x6880, 0xa005, 0x0040, 0x4b8e, 0x8001, 0x6882, 0x00c0, | ||
1957 | 0x4b8e, 0x6867, 0x0000, 0x68d4, 0xc0dd, 0x68d6, 0x68d4, 0xd0fc, | ||
1958 | 0x0040, 0x4bab, 0xc0fc, 0x68d6, 0x20a9, 0x0200, 0x6034, 0xa005, | ||
1959 | 0x0040, 0x4ba7, 0x8001, 0x6036, 0x68d4, 0xc0fd, 0x68d6, 0x00c0, | ||
1960 | 0x4ba7, 0x6010, 0xa005, 0x0040, 0x4ba7, 0x1078, 0x266f, 0xace0, | ||
1961 | 0x0010, 0x00f0, 0x4b96, 0xd7fc, 0x0040, 0x4bb5, 0x2061, 0x54c0, | ||
1962 | 0x2069, 0x4f40, 0xc7fc, 0x0078, 0x4b3d, 0x1078, 0x4bf1, 0x7838, | ||
1963 | 0x8001, 0x783a, 0x00c0, 0x4bd7, 0x783c, 0x783a, 0x2061, 0x54c0, | ||
1964 | 0x2069, 0x4f40, 0xc7fc, 0x680c, 0xa005, 0x0040, 0x4bc9, 0x1078, | ||
1965 | 0x4c5b, 0xd7fc, 0x00c0, 0x4bd7, 0x7810, 0xd0ec, 0x00c0, 0x4bd7, | ||
1966 | 0x2061, 0x74c0, 0x2069, 0x4f80, 0xc7fd, 0x0078, 0x4bc3, 0x7814, | ||
1967 | 0xd0e4, 0x00c0, 0x4bdb, 0x7810, 0xd0cc, 0x0040, 0x4bee, 0xd0ac, | ||
1968 | 0x00c0, 0x4be7, 0xd0a4, 0x0040, 0x4bee, 0xc0ad, 0x7812, 0x2091, | ||
1969 | 0x8001, 0x0068, 0x4bed, 0x1078, 0x23dc, 0x007c, 0x2091, 0x8001, | ||
1970 | 0x007c, 0x7840, 0x8001, 0x7842, 0x00c0, 0x4c5a, 0x7844, 0x7842, | ||
1971 | 0x2069, 0x4f40, 0xc7fc, 0x7810, 0x2079, 0x0200, 0xd0ec, 0x0040, | ||
1972 | 0x4c03, 0x2079, 0x0100, 0x68d8, 0xa005, 0x0040, 0x4c0f, 0x7de0, | ||
1973 | 0xa504, 0x00c0, 0x4c0f, 0x68da, 0x68d4, 0xc0bc, 0x68d6, 0x2079, | ||
1974 | 0x4f00, 0x6810, 0xa005, 0x00c0, 0x4c17, 0x2001, 0x0101, 0x8001, | ||
1975 | 0x6812, 0xd7fc, 0x0040, 0x4c20, 0xa080, 0x95d0, 0x0078, 0x4c22, | ||
1976 | 0xa080, 0x94c0, 0x2040, 0x2004, 0xa065, 0x0040, 0x4c4c, 0x6024, | ||
1977 | 0xa005, 0x0040, 0x4c48, 0x8001, 0x6026, 0x00c0, 0x4c48, 0x6800, | ||
1978 | 0xa005, 0x0040, 0x4c3b, 0x684c, 0xac06, 0x00c0, 0x4c3b, 0x1078, | ||
1979 | 0x4cf6, 0x0078, 0x4c4c, 0x6864, 0xa005, 0x0040, 0x4c43, 0x6027, | ||
1980 | 0x0001, 0x0078, 0x4c48, 0x1078, 0x4ca9, 0x2804, 0x0078, 0x4c24, | ||
1981 | 0x6000, 0x2c40, 0x0078, 0x4c24, 0xd7fc, 0x00c0, 0x4c5a, 0x7810, | ||
1982 | 0xd0ec, 0x00c0, 0x4c5a, 0x2069, 0x4f80, 0xc7fd, 0x2079, 0x0100, | ||
1983 | 0x0078, 0x4c03, 0x007c, 0x2009, 0x0000, 0x20a9, 0x0200, 0x6008, | ||
1984 | 0xd09c, 0x0040, 0x4c95, 0x6024, 0xa005, 0x0040, 0x4c6b, 0x8001, | ||
1985 | 0x6026, 0x0078, 0x4c93, 0x6008, 0xc09c, 0xd084, 0x00c0, 0x4c73, | ||
1986 | 0xd0ac, 0x0040, 0x4c8d, 0x600a, 0x6004, 0xa005, 0x0040, 0x4c95, | ||
1987 | 0x0d7e, 0x0c7e, 0x017e, 0x2068, 0x6010, 0x8001, 0x6012, 0x1078, | ||
1988 | 0x3e19, 0x2d00, 0x2c68, 0x2060, 0x1078, 0x1ea2, 0x1078, 0x2064, | ||
1989 | 0x017f, 0x0c7f, 0x0d7f, 0x0078, 0x4c95, 0xc0bd, 0x600a, 0xa18d, | ||
1990 | 0x0001, 0x0078, 0x4c95, 0xa18d, 0x0100, 0xace0, 0x0010, 0x00f0, | ||
1991 | 0x4c5f, 0xa184, 0x0001, 0x0040, 0x4ca4, 0xa18c, 0xfffe, 0x690e, | ||
1992 | 0x1078, 0x266f, 0x0078, 0x4ca5, 0x690e, 0x007c, 0x00c0, 0x4ca5, | ||
1993 | 0x786c, 0x2c00, 0x687e, 0x6714, 0x6f76, 0x6017, 0x0000, 0x602b, | ||
1994 | 0x0000, 0x601b, 0x0006, 0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, | ||
1995 | 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x1078, | ||
1996 | 0x1e2b, 0x6818, 0xa005, 0x0040, 0x4cc7, 0x8001, 0x681a, 0x6808, | ||
1997 | 0xc0a4, 0x680a, 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x00d0, | ||
1998 | 0x4cd3, 0x1078, 0x29b2, 0x6812, 0x00c0, 0x4cd9, 0x7910, 0xc1a5, | ||
1999 | 0x7912, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x2073, | ||
2000 | 0xd7fc, 0x00c0, 0x4ce7, 0x2069, 0x4f40, 0x0078, 0x4ce9, 0x2069, | ||
2001 | 0x4f80, 0x6910, 0xa184, 0x0100, 0x2001, 0x0006, 0x00c0, 0x4cf3, | ||
2002 | 0x697a, 0x2001, 0x0004, 0x1078, 0x2663, 0x007c, 0x0d7e, 0x694c, | ||
2003 | 0x2160, 0xd7fc, 0x00c0, 0x4d08, 0x7810, 0xd0ec, 0x0040, 0x4d04, | ||
2004 | 0x2069, 0x0100, 0x0078, 0x4d0a, 0x2069, 0x0200, 0x0078, 0x4d0a, | ||
2005 | 0x2069, 0x0100, 0x1078, 0x2926, 0x601b, 0x0006, 0x6858, 0xa084, | ||
2006 | 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, | ||
2007 | 0x602f, 0x0000, 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, | ||
2008 | 0x6830, 0xd0b4, 0x0040, 0x4d3c, 0x684b, 0x0004, 0x20a9, 0x0014, | ||
2009 | 0x6848, 0xd094, 0x0040, 0x4d2e, 0x00f0, 0x4d28, 0x684b, 0x0009, | ||
2010 | 0x20a9, 0x0014, 0x6848, 0xd084, 0x0040, 0x4d38, 0x00f0, 0x4d32, | ||
2011 | 0x20a9, 0x00fa, 0x00f0, 0x4d3a, 0x681b, 0x0047, 0x0d7f, 0x6867, | ||
2012 | 0x0007, 0x007c, 0x2079, 0x4f00, 0x1078, 0x4d76, 0x1078, 0x4d5c, | ||
2013 | 0x1078, 0x4d69, 0x2009, 0x0002, 0x2069, 0x4f80, 0x680f, 0x0000, | ||
2014 | 0x6813, 0x0000, 0x6817, 0x0000, 0x8109, 0x0040, 0x4d5b, 0x2069, | ||
2015 | 0x4f40, 0x0078, 0x4d4e, 0x007c, 0x7810, 0xd0ec, 0x0040, 0x4d64, | ||
2016 | 0x2019, 0x00cc, 0x0078, 0x4d66, 0x2019, 0x007b, 0x7b3a, 0x7b3e, | ||
2017 | 0x007c, 0x7814, 0xd0e4, 0x00c0, 0x4d71, 0x2019, 0x0040, 0x0078, | ||
2018 | 0x4d73, 0x2019, 0x0026, 0x7b42, 0x7b46, 0x007c, 0x7814, 0xd0e4, | ||
2019 | 0x00c0, 0x4d7e, 0x2019, 0x3f94, 0x0078, 0x4d80, 0x2019, 0x2624, | ||
2020 | 0x7b32, 0x7b36, 0x007c, 0x6a50, 0xa285, 0x0000, 0x0040, 0x4daf, | ||
2021 | 0x6954, 0x6bc0, 0xa300, 0x0c7e, 0x2164, 0x6304, 0x83ff, 0x00c0, | ||
2022 | 0x4d9b, 0x8211, 0x0040, 0x4d9f, 0x8108, 0xa11a, 0x0048, 0x4d8c, | ||
2023 | 0x69c0, 0x0078, 0x4d8c, 0x68d3, 0x000a, 0x0c7f, 0x007c, 0x6950, | ||
2024 | 0x6ac0, 0x2264, 0x602b, 0x0000, 0x602f, 0x0000, 0x6008, 0xc0b5, | ||
2025 | 0x600a, 0x8210, 0x8109, 0x00c0, 0x4da1, 0x6952, 0x0c7f, 0x007c, | ||
2026 | 0x00e0, 0x4db0, 0x2091, 0x6000, 0x00e0, 0x4db4, 0x2091, 0x6000, | ||
2027 | 0x70ec, 0xd0dc, 0x00c0, 0x4dc1, 0xd0d4, 0x0040, 0x4dea, 0x0078, | ||
2028 | 0x4ded, 0x2008, 0x7810, 0xd0ec, 0x0040, 0x4dd4, 0xd1c4, 0x00c0, | ||
2029 | 0x4e0e, 0x7814, 0xc0c5, 0x7816, 0x7810, 0xc0f5, 0x7812, 0xd0ec, | ||
2030 | 0x0040, 0x4e0a, 0x0078, 0x4e06, 0xae8e, 0x0100, 0x0040, 0x4de1, | ||
2031 | 0x7814, 0xc0f5, 0xc0c5, 0x7816, 0xd0d4, 0x00c0, 0x4e0a, 0x0078, | ||
2032 | 0x4e06, 0x7814, 0xc0fd, 0xc0c5, 0x7816, 0xd0d4, 0x00c0, 0x4e0a, | ||
2033 | 0x0078, 0x4e06, 0xd0e4, 0x0040, 0x4e0c, 0x00e0, 0x4ded, 0x2091, | ||
2034 | 0x6000, 0x2009, 0x000c, 0x00e0, 0x4df3, 0x2091, 0x6000, 0x8109, | ||
2035 | 0x00c0, 0x4df3, 0x70e4, 0xa084, 0x01ff, 0xa086, 0x01ff, 0x00c0, | ||
2036 | 0x4e04, 0x70ec, 0x0078, 0x4dc1, 0x1078, 0x4e0f, 0x7804, 0xd08c, | ||
2037 | 0x0040, 0x4e0c, 0x681f, 0x000c, 0x70a0, 0x70a2, 0x007c, 0x7910, | ||
2038 | 0xd1ec, 0x0040, 0x4e19, 0x7814, 0xc0c4, 0xc1f4, 0x7912, 0x0078, | ||
2039 | 0x4e2b, 0xae8e, 0x0100, 0x0040, 0x4e25, 0x7814, 0xc0f4, 0xd0fc, | ||
2040 | 0x00c0, 0x4e2b, 0xc0c4, 0x0078, 0x4e2b, 0x7814, 0xc0fc, 0xd0f4, | ||
2041 | 0x00c0, 0x4e2b, 0xc0c4, 0x7816, 0x007c, 0x14e3 | ||
2042 | }; | ||
2043 | #ifdef UNIQUE_FW_NAME | ||
2044 | static unsigned short fw1280ei_length01 = 0x3e2e; | ||
2045 | #else | ||
2046 | static unsigned short risc_code_length01 = 0x3e2e; | ||
2047 | #endif | ||
2048 | |||
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c index df09820e8916..351b56ced925 100644 --- a/drivers/scsi/qla1280.c +++ b/drivers/scsi/qla1280.c | |||
@@ -348,6 +348,7 @@ | |||
348 | #include <linux/interrupt.h> | 348 | #include <linux/interrupt.h> |
349 | #include <linux/init.h> | 349 | #include <linux/init.h> |
350 | #include <linux/dma-mapping.h> | 350 | #include <linux/dma-mapping.h> |
351 | #include <linux/firmware.h> | ||
351 | 352 | ||
352 | #include <asm/io.h> | 353 | #include <asm/io.h> |
353 | #include <asm/irq.h> | 354 | #include <asm/irq.h> |
@@ -384,11 +385,7 @@ | |||
384 | #define MEMORY_MAPPED_IO 1 | 385 | #define MEMORY_MAPPED_IO 1 |
385 | #endif | 386 | #endif |
386 | 387 | ||
387 | #define UNIQUE_FW_NAME | ||
388 | #include "qla1280.h" | 388 | #include "qla1280.h" |
389 | #include "ql12160_fw.h" /* ISP RISC codes */ | ||
390 | #include "ql1280_fw.h" | ||
391 | #include "ql1040_fw.h" | ||
392 | 389 | ||
393 | #ifndef BITS_PER_LONG | 390 | #ifndef BITS_PER_LONG |
394 | #error "BITS_PER_LONG not defined!" | 391 | #error "BITS_PER_LONG not defined!" |
@@ -541,10 +538,7 @@ __setup("qla1280=", qla1280_setup); | |||
541 | struct qla_boards { | 538 | struct qla_boards { |
542 | unsigned char name[9]; /* Board ID String */ | 539 | unsigned char name[9]; /* Board ID String */ |
543 | int numPorts; /* Number of SCSI ports */ | 540 | int numPorts; /* Number of SCSI ports */ |
544 | unsigned short *fwcode; /* pointer to FW array */ | 541 | char *fwname; /* firmware name */ |
545 | unsigned short *fwlen; /* number of words in array */ | ||
546 | unsigned short *fwstart; /* start address for F/W */ | ||
547 | unsigned char *fwver; /* Ptr to F/W version array */ | ||
548 | }; | 542 | }; |
549 | 543 | ||
550 | /* NOTE: the last argument in each entry is used to index ql1280_board_tbl */ | 544 | /* NOTE: the last argument in each entry is used to index ql1280_board_tbl */ |
@@ -567,19 +561,13 @@ MODULE_DEVICE_TABLE(pci, qla1280_pci_tbl); | |||
567 | 561 | ||
568 | static struct qla_boards ql1280_board_tbl[] = { | 562 | static struct qla_boards ql1280_board_tbl[] = { |
569 | /* Name , Number of ports, FW details */ | 563 | /* Name , Number of ports, FW details */ |
570 | {"QLA12160", 2, &fw12160i_code01[0], &fw12160i_length01, | 564 | {"QLA12160", 2, "qlogic/12160.bin"}, |
571 | &fw12160i_addr01, &fw12160i_version_str[0]}, | 565 | {"QLA1040", 1, "qlogic/1040.bin"}, |
572 | {"QLA1040", 1, &risc_code01[0], &risc_code_length01, | 566 | {"QLA1080", 1, "qlogic/1280.bin"}, |
573 | &risc_code_addr01, &firmware_version[0]}, | 567 | {"QLA1240", 2, "qlogic/1280.bin"}, |
574 | {"QLA1080", 1, &fw1280ei_code01[0], &fw1280ei_length01, | 568 | {"QLA1280", 2, "qlogic/1280.bin"}, |
575 | &fw1280ei_addr01, &fw1280ei_version_str[0]}, | 569 | {"QLA10160", 1, "qlogic/12160.bin"}, |
576 | {"QLA1240", 2, &fw1280ei_code01[0], &fw1280ei_length01, | 570 | {" ", 0, " "}, |
577 | &fw1280ei_addr01, &fw1280ei_version_str[0]}, | ||
578 | {"QLA1280", 2, &fw1280ei_code01[0], &fw1280ei_length01, | ||
579 | &fw1280ei_addr01, &fw1280ei_version_str[0]}, | ||
580 | {"QLA10160", 1, &fw12160i_code01[0], &fw12160i_length01, | ||
581 | &fw12160i_addr01, &fw12160i_version_str[0]}, | ||
582 | {" ", 0} | ||
583 | }; | 571 | }; |
584 | 572 | ||
585 | static int qla1280_verbose = 1; | 573 | static int qla1280_verbose = 1; |
@@ -704,7 +692,7 @@ qla1280_info(struct Scsi_Host *host) | |||
704 | sprintf (bp, | 692 | sprintf (bp, |
705 | "QLogic %s PCI to SCSI Host Adapter\n" | 693 | "QLogic %s PCI to SCSI Host Adapter\n" |
706 | " Firmware version: %2d.%02d.%02d, Driver version %s", | 694 | " Firmware version: %2d.%02d.%02d, Driver version %s", |
707 | &bdp->name[0], bdp->fwver[0], bdp->fwver[1], bdp->fwver[2], | 695 | &bdp->name[0], ha->fwver1, ha->fwver2, ha->fwver3, |
708 | QLA1280_VERSION); | 696 | QLA1280_VERSION); |
709 | return bp; | 697 | return bp; |
710 | } | 698 | } |
@@ -1648,36 +1636,60 @@ qla1280_chip_diag(struct scsi_qla_host *ha) | |||
1648 | static int | 1636 | static int |
1649 | qla1280_load_firmware_pio(struct scsi_qla_host *ha) | 1637 | qla1280_load_firmware_pio(struct scsi_qla_host *ha) |
1650 | { | 1638 | { |
1651 | uint16_t risc_address, *risc_code_address, risc_code_size; | 1639 | const struct firmware *fw; |
1640 | const __le16 *fw_data; | ||
1641 | uint16_t risc_address, risc_code_size; | ||
1652 | uint16_t mb[MAILBOX_REGISTER_COUNT], i; | 1642 | uint16_t mb[MAILBOX_REGISTER_COUNT], i; |
1653 | int err; | 1643 | int err; |
1654 | 1644 | ||
1645 | err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname, | ||
1646 | &ha->pdev->dev); | ||
1647 | if (err) { | ||
1648 | printk(KERN_ERR "Failed to load image \"%s\" err %d\n", | ||
1649 | ql1280_board_tbl[ha->devnum].fwname, err); | ||
1650 | return err; | ||
1651 | } | ||
1652 | if ((fw->size % 2) || (fw->size < 6)) { | ||
1653 | printk(KERN_ERR "Bogus length %zu in image \"%s\"\n", | ||
1654 | fw->size, ql1280_board_tbl[ha->devnum].fwname); | ||
1655 | err = -EINVAL; | ||
1656 | goto out; | ||
1657 | } | ||
1658 | ha->fwver1 = fw->data[0]; | ||
1659 | ha->fwver2 = fw->data[1]; | ||
1660 | ha->fwver3 = fw->data[2]; | ||
1661 | fw_data = (const __le16 *)&fw->data[0]; | ||
1662 | ha->fwstart = __le16_to_cpu(fw_data[2]); | ||
1663 | |||
1655 | /* Load RISC code. */ | 1664 | /* Load RISC code. */ |
1656 | risc_address = *ql1280_board_tbl[ha->devnum].fwstart; | 1665 | risc_address = ha->fwstart; |
1657 | risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; | 1666 | fw_data = (const __le16 *)&fw->data[4]; |
1658 | risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; | 1667 | risc_code_size = (fw->size - 6) / 2; |
1659 | 1668 | ||
1660 | for (i = 0; i < risc_code_size; i++) { | 1669 | for (i = 0; i < risc_code_size; i++) { |
1661 | mb[0] = MBC_WRITE_RAM_WORD; | 1670 | mb[0] = MBC_WRITE_RAM_WORD; |
1662 | mb[1] = risc_address + i; | 1671 | mb[1] = risc_address + i; |
1663 | mb[2] = risc_code_address[i]; | 1672 | mb[2] = __le16_to_cpu(fw_data[i]); |
1664 | 1673 | ||
1665 | err = qla1280_mailbox_command(ha, BIT_0 | BIT_1 | BIT_2, mb); | 1674 | err = qla1280_mailbox_command(ha, BIT_0 | BIT_1 | BIT_2, mb); |
1666 | if (err) { | 1675 | if (err) { |
1667 | printk(KERN_ERR "scsi(%li): Failed to load firmware\n", | 1676 | printk(KERN_ERR "scsi(%li): Failed to load firmware\n", |
1668 | ha->host_no); | 1677 | ha->host_no); |
1669 | return err; | 1678 | goto out; |
1670 | } | 1679 | } |
1671 | } | 1680 | } |
1672 | 1681 | out: | |
1673 | return 0; | 1682 | release_firmware(fw); |
1683 | return err; | ||
1674 | } | 1684 | } |
1675 | 1685 | ||
1676 | #define DUMP_IT_BACK 0 /* for debug of RISC loading */ | 1686 | #define DUMP_IT_BACK 0 /* for debug of RISC loading */ |
1677 | static int | 1687 | static int |
1678 | qla1280_load_firmware_dma(struct scsi_qla_host *ha) | 1688 | qla1280_load_firmware_dma(struct scsi_qla_host *ha) |
1679 | { | 1689 | { |
1680 | uint16_t risc_address, *risc_code_address, risc_code_size; | 1690 | const struct firmware *fw; |
1691 | const __le16 *fw_data; | ||
1692 | uint16_t risc_address, risc_code_size; | ||
1681 | uint16_t mb[MAILBOX_REGISTER_COUNT], cnt; | 1693 | uint16_t mb[MAILBOX_REGISTER_COUNT], cnt; |
1682 | int err = 0, num, i; | 1694 | int err = 0, num, i; |
1683 | #if DUMP_IT_BACK | 1695 | #if DUMP_IT_BACK |
@@ -1689,10 +1701,29 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha) | |||
1689 | return -ENOMEM; | 1701 | return -ENOMEM; |
1690 | #endif | 1702 | #endif |
1691 | 1703 | ||
1704 | err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname, | ||
1705 | &ha->pdev->dev); | ||
1706 | if (err) { | ||
1707 | printk(KERN_ERR "Failed to load image \"%s\" err %d\n", | ||
1708 | ql1280_board_tbl[ha->devnum].fwname, err); | ||
1709 | return err; | ||
1710 | } | ||
1711 | if ((fw->size % 2) || (fw->size < 6)) { | ||
1712 | printk(KERN_ERR "Bogus length %zu in image \"%s\"\n", | ||
1713 | fw->size, ql1280_board_tbl[ha->devnum].fwname); | ||
1714 | err = -EINVAL; | ||
1715 | goto out; | ||
1716 | } | ||
1717 | ha->fwver1 = fw->data[0]; | ||
1718 | ha->fwver2 = fw->data[1]; | ||
1719 | ha->fwver3 = fw->data[2]; | ||
1720 | fw_data = (const __le16 *)&fw->data[0]; | ||
1721 | ha->fwstart = __le16_to_cpu(fw_data[2]); | ||
1722 | |||
1692 | /* Load RISC code. */ | 1723 | /* Load RISC code. */ |
1693 | risc_address = *ql1280_board_tbl[ha->devnum].fwstart; | 1724 | risc_address = ha->fwstart; |
1694 | risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; | 1725 | fw_data = (const __le16 *)&fw->data[4]; |
1695 | risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; | 1726 | risc_code_size = (fw->size - 6) / 2; |
1696 | 1727 | ||
1697 | dprintk(1, "%s: DMA RISC code (%i) words\n", | 1728 | dprintk(1, "%s: DMA RISC code (%i) words\n", |
1698 | __func__, risc_code_size); | 1729 | __func__, risc_code_size); |
@@ -1708,10 +1739,9 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha) | |||
1708 | 1739 | ||
1709 | dprintk(2, "qla1280_setup_chip: loading risc @ =(0x%p)," | 1740 | dprintk(2, "qla1280_setup_chip: loading risc @ =(0x%p)," |
1710 | "%d,%d(0x%x)\n", | 1741 | "%d,%d(0x%x)\n", |
1711 | risc_code_address, cnt, num, risc_address); | 1742 | fw_data, cnt, num, risc_address); |
1712 | for(i = 0; i < cnt; i++) | 1743 | for(i = 0; i < cnt; i++) |
1713 | ((__le16 *)ha->request_ring)[i] = | 1744 | ((__le16 *)ha->request_ring)[i] = fw_data[i]; |
1714 | cpu_to_le16(risc_code_address[i]); | ||
1715 | 1745 | ||
1716 | mb[0] = MBC_LOAD_RAM; | 1746 | mb[0] = MBC_LOAD_RAM; |
1717 | mb[1] = risc_address; | 1747 | mb[1] = risc_address; |
@@ -1763,7 +1793,7 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha) | |||
1763 | #endif | 1793 | #endif |
1764 | risc_address += cnt; | 1794 | risc_address += cnt; |
1765 | risc_code_size = risc_code_size - cnt; | 1795 | risc_code_size = risc_code_size - cnt; |
1766 | risc_code_address = risc_code_address + cnt; | 1796 | fw_data = fw_data + cnt; |
1767 | num++; | 1797 | num++; |
1768 | } | 1798 | } |
1769 | 1799 | ||
@@ -1771,6 +1801,7 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha) | |||
1771 | #if DUMP_IT_BACK | 1801 | #if DUMP_IT_BACK |
1772 | pci_free_consistent(ha->pdev, 8000, tbuf, p_tbuf); | 1802 | pci_free_consistent(ha->pdev, 8000, tbuf, p_tbuf); |
1773 | #endif | 1803 | #endif |
1804 | release_firmware(fw); | ||
1774 | return err; | 1805 | return err; |
1775 | } | 1806 | } |
1776 | 1807 | ||
@@ -1786,7 +1817,7 @@ qla1280_start_firmware(struct scsi_qla_host *ha) | |||
1786 | /* Verify checksum of loaded RISC code. */ | 1817 | /* Verify checksum of loaded RISC code. */ |
1787 | mb[0] = MBC_VERIFY_CHECKSUM; | 1818 | mb[0] = MBC_VERIFY_CHECKSUM; |
1788 | /* mb[1] = ql12_risc_code_addr01; */ | 1819 | /* mb[1] = ql12_risc_code_addr01; */ |
1789 | mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; | 1820 | mb[1] = ha->fwstart; |
1790 | err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); | 1821 | err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); |
1791 | if (err) { | 1822 | if (err) { |
1792 | printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no); | 1823 | printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no); |
@@ -1796,7 +1827,7 @@ qla1280_start_firmware(struct scsi_qla_host *ha) | |||
1796 | /* Start firmware execution. */ | 1827 | /* Start firmware execution. */ |
1797 | dprintk(1, "%s: start firmware running.\n", __func__); | 1828 | dprintk(1, "%s: start firmware running.\n", __func__); |
1798 | mb[0] = MBC_EXECUTE_FIRMWARE; | 1829 | mb[0] = MBC_EXECUTE_FIRMWARE; |
1799 | mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; | 1830 | mb[1] = ha->fwstart; |
1800 | err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); | 1831 | err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); |
1801 | if (err) { | 1832 | if (err) { |
1802 | printk(KERN_ERR "scsi(%li): Failed to start firmware\n", | 1833 | printk(KERN_ERR "scsi(%li): Failed to start firmware\n", |
@@ -4450,6 +4481,9 @@ module_exit(qla1280_exit); | |||
4450 | MODULE_AUTHOR("Qlogic & Jes Sorensen"); | 4481 | MODULE_AUTHOR("Qlogic & Jes Sorensen"); |
4451 | MODULE_DESCRIPTION("Qlogic ISP SCSI (qla1x80/qla1x160) driver"); | 4482 | MODULE_DESCRIPTION("Qlogic ISP SCSI (qla1x80/qla1x160) driver"); |
4452 | MODULE_LICENSE("GPL"); | 4483 | MODULE_LICENSE("GPL"); |
4484 | MODULE_FIRMWARE("qlogic/1040.bin"); | ||
4485 | MODULE_FIRMWARE("qlogic/1280.bin"); | ||
4486 | MODULE_FIRMWARE("qlogic/12160.bin"); | ||
4453 | MODULE_VERSION(QLA1280_VERSION); | 4487 | MODULE_VERSION(QLA1280_VERSION); |
4454 | 4488 | ||
4455 | /* | 4489 | /* |
diff --git a/drivers/scsi/qla1280.h b/drivers/scsi/qla1280.h index ff2c363ead26..d7c44b8d2b4f 100644 --- a/drivers/scsi/qla1280.h +++ b/drivers/scsi/qla1280.h | |||
@@ -1069,6 +1069,12 @@ struct scsi_qla_host { | |||
1069 | 1069 | ||
1070 | struct nvram nvram; | 1070 | struct nvram nvram; |
1071 | int nvram_valid; | 1071 | int nvram_valid; |
1072 | |||
1073 | /* Firmware Info */ | ||
1074 | unsigned short fwstart; /* start address for F/W */ | ||
1075 | unsigned char fwver1; /* F/W version first char */ | ||
1076 | unsigned char fwver2; /* F/W version second char */ | ||
1077 | unsigned char fwver3; /* F/W version third char */ | ||
1072 | }; | 1078 | }; |
1073 | 1079 | ||
1074 | #endif /* _QLA1280_H */ | 1080 | #endif /* _QLA1280_H */ |
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index ee9d40152430..b09993a06576 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c | |||
@@ -96,7 +96,9 @@ qla2x00_sysfs_read_nvram(struct kobject *kobj, | |||
96 | if (!capable(CAP_SYS_ADMIN)) | 96 | if (!capable(CAP_SYS_ADMIN)) |
97 | return 0; | 97 | return 0; |
98 | 98 | ||
99 | /* Read NVRAM data from cache. */ | 99 | if (IS_NOCACHE_VPD_TYPE(ha)) |
100 | ha->isp_ops->read_optrom(vha, ha->vpd, ha->flt_region_nvram << 2, | ||
101 | ha->nvram_size); | ||
100 | return memory_read_from_buffer(buf, count, &off, ha->nvram, | 102 | return memory_read_from_buffer(buf, count, &off, ha->nvram, |
101 | ha->nvram_size); | 103 | ha->nvram_size); |
102 | } | 104 | } |
@@ -111,7 +113,8 @@ qla2x00_sysfs_write_nvram(struct kobject *kobj, | |||
111 | struct qla_hw_data *ha = vha->hw; | 113 | struct qla_hw_data *ha = vha->hw; |
112 | uint16_t cnt; | 114 | uint16_t cnt; |
113 | 115 | ||
114 | if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->nvram_size) | 116 | if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->nvram_size || |
117 | !ha->isp_ops->write_nvram) | ||
115 | return 0; | 118 | return 0; |
116 | 119 | ||
117 | /* Checksum NVRAM. */ | 120 | /* Checksum NVRAM. */ |
@@ -137,12 +140,21 @@ qla2x00_sysfs_write_nvram(struct kobject *kobj, | |||
137 | *iter = chksum; | 140 | *iter = chksum; |
138 | } | 141 | } |
139 | 142 | ||
143 | if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { | ||
144 | qla_printk(KERN_WARNING, ha, | ||
145 | "HBA not online, failing NVRAM update.\n"); | ||
146 | return -EAGAIN; | ||
147 | } | ||
148 | |||
140 | /* Write NVRAM. */ | 149 | /* Write NVRAM. */ |
141 | ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->nvram_base, count); | 150 | ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->nvram_base, count); |
142 | ha->isp_ops->read_nvram(vha, (uint8_t *)ha->nvram, ha->nvram_base, | 151 | ha->isp_ops->read_nvram(vha, (uint8_t *)ha->nvram, ha->nvram_base, |
143 | count); | 152 | count); |
144 | 153 | ||
154 | /* NVRAM settings take effect immediately. */ | ||
145 | set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); | 155 | set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); |
156 | qla2xxx_wake_dpc(vha); | ||
157 | qla2x00_wait_for_chip_reset(vha); | ||
146 | 158 | ||
147 | return (count); | 159 | return (count); |
148 | } | 160 | } |
@@ -330,6 +342,12 @@ qla2x00_sysfs_write_optrom_ctl(struct kobject *kobj, | |||
330 | if (ha->optrom_state != QLA_SWRITING) | 342 | if (ha->optrom_state != QLA_SWRITING) |
331 | break; | 343 | break; |
332 | 344 | ||
345 | if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { | ||
346 | qla_printk(KERN_WARNING, ha, | ||
347 | "HBA not online, failing flash update.\n"); | ||
348 | return -EAGAIN; | ||
349 | } | ||
350 | |||
333 | DEBUG2(qla_printk(KERN_INFO, ha, | 351 | DEBUG2(qla_printk(KERN_INFO, ha, |
334 | "Writing flash region -- 0x%x/0x%x.\n", | 352 | "Writing flash region -- 0x%x/0x%x.\n", |
335 | ha->optrom_region_start, ha->optrom_region_size)); | 353 | ha->optrom_region_start, ha->optrom_region_size)); |
@@ -364,7 +382,9 @@ qla2x00_sysfs_read_vpd(struct kobject *kobj, | |||
364 | if (!capable(CAP_SYS_ADMIN)) | 382 | if (!capable(CAP_SYS_ADMIN)) |
365 | return 0; | 383 | return 0; |
366 | 384 | ||
367 | /* Read NVRAM data from cache. */ | 385 | if (IS_NOCACHE_VPD_TYPE(ha)) |
386 | ha->isp_ops->read_optrom(vha, ha->vpd, ha->flt_region_vpd << 2, | ||
387 | ha->vpd_size); | ||
368 | return memory_read_from_buffer(buf, count, &off, ha->vpd, ha->vpd_size); | 388 | return memory_read_from_buffer(buf, count, &off, ha->vpd, ha->vpd_size); |
369 | } | 389 | } |
370 | 390 | ||
@@ -376,14 +396,35 @@ qla2x00_sysfs_write_vpd(struct kobject *kobj, | |||
376 | struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, | 396 | struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, |
377 | struct device, kobj))); | 397 | struct device, kobj))); |
378 | struct qla_hw_data *ha = vha->hw; | 398 | struct qla_hw_data *ha = vha->hw; |
399 | uint8_t *tmp_data; | ||
379 | 400 | ||
380 | if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->vpd_size) | 401 | if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->vpd_size || |
402 | !ha->isp_ops->write_nvram) | ||
381 | return 0; | 403 | return 0; |
382 | 404 | ||
405 | if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { | ||
406 | qla_printk(KERN_WARNING, ha, | ||
407 | "HBA not online, failing VPD update.\n"); | ||
408 | return -EAGAIN; | ||
409 | } | ||
410 | |||
383 | /* Write NVRAM. */ | 411 | /* Write NVRAM. */ |
384 | ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->vpd_base, count); | 412 | ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->vpd_base, count); |
385 | ha->isp_ops->read_nvram(vha, (uint8_t *)ha->vpd, ha->vpd_base, count); | 413 | ha->isp_ops->read_nvram(vha, (uint8_t *)ha->vpd, ha->vpd_base, count); |
386 | 414 | ||
415 | /* Update flash version information for 4Gb & above. */ | ||
416 | if (!IS_FWI2_CAPABLE(ha)) | ||
417 | goto done; | ||
418 | |||
419 | tmp_data = vmalloc(256); | ||
420 | if (!tmp_data) { | ||
421 | qla_printk(KERN_WARNING, ha, | ||
422 | "Unable to allocate memory for VPD information update.\n"); | ||
423 | goto done; | ||
424 | } | ||
425 | ha->isp_ops->get_flash_version(vha, tmp_data); | ||
426 | vfree(tmp_data); | ||
427 | done: | ||
387 | return count; | 428 | return count; |
388 | } | 429 | } |
389 | 430 | ||
@@ -458,6 +499,199 @@ static struct bin_attribute sysfs_sfp_attr = { | |||
458 | .read = qla2x00_sysfs_read_sfp, | 499 | .read = qla2x00_sysfs_read_sfp, |
459 | }; | 500 | }; |
460 | 501 | ||
502 | static ssize_t | ||
503 | qla2x00_sysfs_write_reset(struct kobject *kobj, | ||
504 | struct bin_attribute *bin_attr, | ||
505 | char *buf, loff_t off, size_t count) | ||
506 | { | ||
507 | struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, | ||
508 | struct device, kobj))); | ||
509 | struct qla_hw_data *ha = vha->hw; | ||
510 | int type; | ||
511 | |||
512 | if (off != 0) | ||
513 | return 0; | ||
514 | |||
515 | type = simple_strtol(buf, NULL, 10); | ||
516 | switch (type) { | ||
517 | case 0x2025c: | ||
518 | qla_printk(KERN_INFO, ha, | ||
519 | "Issuing ISP reset on (%ld).\n", vha->host_no); | ||
520 | |||
521 | scsi_block_requests(vha->host); | ||
522 | set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); | ||
523 | qla2xxx_wake_dpc(vha); | ||
524 | qla2x00_wait_for_chip_reset(vha); | ||
525 | scsi_unblock_requests(vha->host); | ||
526 | break; | ||
527 | case 0x2025d: | ||
528 | if (!IS_QLA81XX(ha)) | ||
529 | break; | ||
530 | |||
531 | qla_printk(KERN_INFO, ha, | ||
532 | "Issuing MPI reset on (%ld).\n", vha->host_no); | ||
533 | |||
534 | /* Make sure FC side is not in reset */ | ||
535 | qla2x00_wait_for_hba_online(vha); | ||
536 | |||
537 | /* Issue MPI reset */ | ||
538 | scsi_block_requests(vha->host); | ||
539 | if (qla81xx_restart_mpi_firmware(vha) != QLA_SUCCESS) | ||
540 | qla_printk(KERN_WARNING, ha, | ||
541 | "MPI reset failed on (%ld).\n", vha->host_no); | ||
542 | scsi_unblock_requests(vha->host); | ||
543 | break; | ||
544 | } | ||
545 | return count; | ||
546 | } | ||
547 | |||
548 | static struct bin_attribute sysfs_reset_attr = { | ||
549 | .attr = { | ||
550 | .name = "reset", | ||
551 | .mode = S_IWUSR, | ||
552 | }, | ||
553 | .size = 0, | ||
554 | .write = qla2x00_sysfs_write_reset, | ||
555 | }; | ||
556 | |||
557 | static ssize_t | ||
558 | qla2x00_sysfs_write_edc(struct kobject *kobj, | ||
559 | struct bin_attribute *bin_attr, | ||
560 | char *buf, loff_t off, size_t count) | ||
561 | { | ||
562 | struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, | ||
563 | struct device, kobj))); | ||
564 | struct qla_hw_data *ha = vha->hw; | ||
565 | uint16_t dev, adr, opt, len; | ||
566 | int rval; | ||
567 | |||
568 | ha->edc_data_len = 0; | ||
569 | |||
570 | if (!capable(CAP_SYS_ADMIN) || off != 0 || count < 8) | ||
571 | return 0; | ||
572 | |||
573 | if (!ha->edc_data) { | ||
574 | ha->edc_data = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, | ||
575 | &ha->edc_data_dma); | ||
576 | if (!ha->edc_data) { | ||
577 | DEBUG2(qla_printk(KERN_INFO, ha, | ||
578 | "Unable to allocate memory for EDC write.\n")); | ||
579 | return 0; | ||
580 | } | ||
581 | } | ||
582 | |||
583 | dev = le16_to_cpup((void *)&buf[0]); | ||
584 | adr = le16_to_cpup((void *)&buf[2]); | ||
585 | opt = le16_to_cpup((void *)&buf[4]); | ||
586 | len = le16_to_cpup((void *)&buf[6]); | ||
587 | |||
588 | if (!(opt & BIT_0)) | ||
589 | if (len == 0 || len > DMA_POOL_SIZE || len > count - 8) | ||
590 | return -EINVAL; | ||
591 | |||
592 | memcpy(ha->edc_data, &buf[8], len); | ||
593 | |||
594 | rval = qla2x00_write_edc(vha, dev, adr, ha->edc_data_dma, | ||
595 | ha->edc_data, len, opt); | ||
596 | if (rval != QLA_SUCCESS) { | ||
597 | DEBUG2(qla_printk(KERN_INFO, ha, | ||
598 | "Unable to write EDC (%x) %02x:%02x:%04x:%02x:%02x.\n", | ||
599 | rval, dev, adr, opt, len, *buf)); | ||
600 | return 0; | ||
601 | } | ||
602 | |||
603 | return count; | ||
604 | } | ||
605 | |||
606 | static struct bin_attribute sysfs_edc_attr = { | ||
607 | .attr = { | ||
608 | .name = "edc", | ||
609 | .mode = S_IWUSR, | ||
610 | }, | ||
611 | .size = 0, | ||
612 | .write = qla2x00_sysfs_write_edc, | ||
613 | }; | ||
614 | |||
615 | static ssize_t | ||
616 | qla2x00_sysfs_write_edc_status(struct kobject *kobj, | ||
617 | struct bin_attribute *bin_attr, | ||
618 | char *buf, loff_t off, size_t count) | ||
619 | { | ||
620 | struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, | ||
621 | struct device, kobj))); | ||
622 | struct qla_hw_data *ha = vha->hw; | ||
623 | uint16_t dev, adr, opt, len; | ||
624 | int rval; | ||
625 | |||
626 | ha->edc_data_len = 0; | ||
627 | |||
628 | if (!capable(CAP_SYS_ADMIN) || off != 0 || count < 8) | ||
629 | return 0; | ||
630 | |||
631 | if (!ha->edc_data) { | ||
632 | ha->edc_data = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, | ||
633 | &ha->edc_data_dma); | ||
634 | if (!ha->edc_data) { | ||
635 | DEBUG2(qla_printk(KERN_INFO, ha, | ||
636 | "Unable to allocate memory for EDC status.\n")); | ||
637 | return 0; | ||
638 | } | ||
639 | } | ||
640 | |||
641 | dev = le16_to_cpup((void *)&buf[0]); | ||
642 | adr = le16_to_cpup((void *)&buf[2]); | ||
643 | opt = le16_to_cpup((void *)&buf[4]); | ||
644 | len = le16_to_cpup((void *)&buf[6]); | ||
645 | |||
646 | if (!(opt & BIT_0)) | ||
647 | if (len == 0 || len > DMA_POOL_SIZE) | ||
648 | return -EINVAL; | ||
649 | |||
650 | memset(ha->edc_data, 0, len); | ||
651 | rval = qla2x00_read_edc(vha, dev, adr, ha->edc_data_dma, | ||
652 | ha->edc_data, len, opt); | ||
653 | if (rval != QLA_SUCCESS) { | ||
654 | DEBUG2(qla_printk(KERN_INFO, ha, | ||
655 | "Unable to write EDC status (%x) %02x:%02x:%04x:%02x.\n", | ||
656 | rval, dev, adr, opt, len)); | ||
657 | return 0; | ||
658 | } | ||
659 | |||
660 | ha->edc_data_len = len; | ||
661 | |||
662 | return count; | ||
663 | } | ||
664 | |||
665 | static ssize_t | ||
666 | qla2x00_sysfs_read_edc_status(struct kobject *kobj, | ||
667 | struct bin_attribute *bin_attr, | ||
668 | char *buf, loff_t off, size_t count) | ||
669 | { | ||
670 | struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, | ||
671 | struct device, kobj))); | ||
672 | struct qla_hw_data *ha = vha->hw; | ||
673 | |||
674 | if (!capable(CAP_SYS_ADMIN) || off != 0 || count == 0) | ||
675 | return 0; | ||
676 | |||
677 | if (!ha->edc_data || ha->edc_data_len == 0 || ha->edc_data_len > count) | ||
678 | return -EINVAL; | ||
679 | |||
680 | memcpy(buf, ha->edc_data, ha->edc_data_len); | ||
681 | |||
682 | return ha->edc_data_len; | ||
683 | } | ||
684 | |||
685 | static struct bin_attribute sysfs_edc_status_attr = { | ||
686 | .attr = { | ||
687 | .name = "edc_status", | ||
688 | .mode = S_IRUSR | S_IWUSR, | ||
689 | }, | ||
690 | .size = 0, | ||
691 | .write = qla2x00_sysfs_write_edc_status, | ||
692 | .read = qla2x00_sysfs_read_edc_status, | ||
693 | }; | ||
694 | |||
461 | static struct sysfs_entry { | 695 | static struct sysfs_entry { |
462 | char *name; | 696 | char *name; |
463 | struct bin_attribute *attr; | 697 | struct bin_attribute *attr; |
@@ -469,6 +703,9 @@ static struct sysfs_entry { | |||
469 | { "optrom_ctl", &sysfs_optrom_ctl_attr, }, | 703 | { "optrom_ctl", &sysfs_optrom_ctl_attr, }, |
470 | { "vpd", &sysfs_vpd_attr, 1 }, | 704 | { "vpd", &sysfs_vpd_attr, 1 }, |
471 | { "sfp", &sysfs_sfp_attr, 1 }, | 705 | { "sfp", &sysfs_sfp_attr, 1 }, |
706 | { "reset", &sysfs_reset_attr, }, | ||
707 | { "edc", &sysfs_edc_attr, 2 }, | ||
708 | { "edc_status", &sysfs_edc_status_attr, 2 }, | ||
472 | { NULL }, | 709 | { NULL }, |
473 | }; | 710 | }; |
474 | 711 | ||
@@ -482,6 +719,8 @@ qla2x00_alloc_sysfs_attr(scsi_qla_host_t *vha) | |||
482 | for (iter = bin_file_entries; iter->name; iter++) { | 719 | for (iter = bin_file_entries; iter->name; iter++) { |
483 | if (iter->is4GBp_only && !IS_FWI2_CAPABLE(vha->hw)) | 720 | if (iter->is4GBp_only && !IS_FWI2_CAPABLE(vha->hw)) |
484 | continue; | 721 | continue; |
722 | if (iter->is4GBp_only == 2 && !IS_QLA25XX(vha->hw)) | ||
723 | continue; | ||
485 | 724 | ||
486 | ret = sysfs_create_bin_file(&host->shost_gendev.kobj, | 725 | ret = sysfs_create_bin_file(&host->shost_gendev.kobj, |
487 | iter->attr); | 726 | iter->attr); |
@@ -502,6 +741,8 @@ qla2x00_free_sysfs_attr(scsi_qla_host_t *vha) | |||
502 | for (iter = bin_file_entries; iter->name; iter++) { | 741 | for (iter = bin_file_entries; iter->name; iter++) { |
503 | if (iter->is4GBp_only && !IS_FWI2_CAPABLE(ha)) | 742 | if (iter->is4GBp_only && !IS_FWI2_CAPABLE(ha)) |
504 | continue; | 743 | continue; |
744 | if (iter->is4GBp_only == 2 && !IS_QLA25XX(ha)) | ||
745 | continue; | ||
505 | 746 | ||
506 | sysfs_remove_bin_file(&host->shost_gendev.kobj, | 747 | sysfs_remove_bin_file(&host->shost_gendev.kobj, |
507 | iter->attr); | 748 | iter->attr); |
@@ -818,9 +1059,33 @@ qla2x00_mpi_version_show(struct device *dev, struct device_attribute *attr, | |||
818 | if (!IS_QLA81XX(ha)) | 1059 | if (!IS_QLA81XX(ha)) |
819 | return snprintf(buf, PAGE_SIZE, "\n"); | 1060 | return snprintf(buf, PAGE_SIZE, "\n"); |
820 | 1061 | ||
821 | return snprintf(buf, PAGE_SIZE, "%02x.%02x.%02x.%02x (%x)\n", | 1062 | return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n", |
822 | ha->mpi_version[0], ha->mpi_version[1], ha->mpi_version[2], | 1063 | ha->mpi_version[0], ha->mpi_version[1], ha->mpi_version[2], |
823 | ha->mpi_version[3], ha->mpi_capabilities); | 1064 | ha->mpi_capabilities); |
1065 | } | ||
1066 | |||
1067 | static ssize_t | ||
1068 | qla2x00_phy_version_show(struct device *dev, struct device_attribute *attr, | ||
1069 | char *buf) | ||
1070 | { | ||
1071 | scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); | ||
1072 | struct qla_hw_data *ha = vha->hw; | ||
1073 | |||
1074 | if (!IS_QLA81XX(ha)) | ||
1075 | return snprintf(buf, PAGE_SIZE, "\n"); | ||
1076 | |||
1077 | return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d\n", | ||
1078 | ha->phy_version[0], ha->phy_version[1], ha->phy_version[2]); | ||
1079 | } | ||
1080 | |||
1081 | static ssize_t | ||
1082 | qla2x00_flash_block_size_show(struct device *dev, | ||
1083 | struct device_attribute *attr, char *buf) | ||
1084 | { | ||
1085 | scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); | ||
1086 | struct qla_hw_data *ha = vha->hw; | ||
1087 | |||
1088 | return snprintf(buf, PAGE_SIZE, "0x%x\n", ha->fdt_block_size); | ||
824 | } | 1089 | } |
825 | 1090 | ||
826 | static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL); | 1091 | static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL); |
@@ -848,6 +1113,9 @@ static DEVICE_ATTR(optrom_fw_version, S_IRUGO, qla2x00_optrom_fw_version_show, | |||
848 | static DEVICE_ATTR(total_isp_aborts, S_IRUGO, qla2x00_total_isp_aborts_show, | 1113 | static DEVICE_ATTR(total_isp_aborts, S_IRUGO, qla2x00_total_isp_aborts_show, |
849 | NULL); | 1114 | NULL); |
850 | static DEVICE_ATTR(mpi_version, S_IRUGO, qla2x00_mpi_version_show, NULL); | 1115 | static DEVICE_ATTR(mpi_version, S_IRUGO, qla2x00_mpi_version_show, NULL); |
1116 | static DEVICE_ATTR(phy_version, S_IRUGO, qla2x00_phy_version_show, NULL); | ||
1117 | static DEVICE_ATTR(flash_block_size, S_IRUGO, qla2x00_flash_block_size_show, | ||
1118 | NULL); | ||
851 | 1119 | ||
852 | struct device_attribute *qla2x00_host_attrs[] = { | 1120 | struct device_attribute *qla2x00_host_attrs[] = { |
853 | &dev_attr_driver_version, | 1121 | &dev_attr_driver_version, |
@@ -868,6 +1136,8 @@ struct device_attribute *qla2x00_host_attrs[] = { | |||
868 | &dev_attr_optrom_fw_version, | 1136 | &dev_attr_optrom_fw_version, |
869 | &dev_attr_total_isp_aborts, | 1137 | &dev_attr_total_isp_aborts, |
870 | &dev_attr_mpi_version, | 1138 | &dev_attr_mpi_version, |
1139 | &dev_attr_phy_version, | ||
1140 | &dev_attr_flash_block_size, | ||
871 | NULL, | 1141 | NULL, |
872 | }; | 1142 | }; |
873 | 1143 | ||
@@ -1012,7 +1282,10 @@ qla2x00_dev_loss_tmo_callbk(struct fc_rport *rport) | |||
1012 | if (!fcport) | 1282 | if (!fcport) |
1013 | return; | 1283 | return; |
1014 | 1284 | ||
1015 | qla2x00_abort_fcport_cmds(fcport); | 1285 | if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) |
1286 | qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16); | ||
1287 | else | ||
1288 | qla2x00_abort_fcport_cmds(fcport); | ||
1016 | 1289 | ||
1017 | /* | 1290 | /* |
1018 | * Transport has effectively 'deleted' the rport, clear | 1291 | * Transport has effectively 'deleted' the rport, clear |
@@ -1032,16 +1305,18 @@ qla2x00_terminate_rport_io(struct fc_rport *rport) | |||
1032 | if (!fcport) | 1305 | if (!fcport) |
1033 | return; | 1306 | return; |
1034 | 1307 | ||
1308 | if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) { | ||
1309 | qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16); | ||
1310 | return; | ||
1311 | } | ||
1035 | /* | 1312 | /* |
1036 | * At this point all fcport's software-states are cleared. Perform any | 1313 | * At this point all fcport's software-states are cleared. Perform any |
1037 | * final cleanup of firmware resources (PCBs and XCBs). | 1314 | * final cleanup of firmware resources (PCBs and XCBs). |
1038 | */ | 1315 | */ |
1039 | if (fcport->loop_id != FC_NO_LOOP_ID) { | 1316 | if (fcport->loop_id != FC_NO_LOOP_ID) |
1040 | fcport->vha->hw->isp_ops->fabric_logout(fcport->vha, | 1317 | fcport->vha->hw->isp_ops->fabric_logout(fcport->vha, |
1041 | fcport->loop_id, fcport->d_id.b.domain, | 1318 | fcport->loop_id, fcport->d_id.b.domain, |
1042 | fcport->d_id.b.area, fcport->d_id.b.al_pa); | 1319 | fcport->d_id.b.area, fcport->d_id.b.al_pa); |
1043 | fcport->loop_id = FC_NO_LOOP_ID; | ||
1044 | } | ||
1045 | 1320 | ||
1046 | qla2x00_abort_fcport_cmds(fcport); | 1321 | qla2x00_abort_fcport_cmds(fcport); |
1047 | } | 1322 | } |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index e0c5bb54b258..714ee67567e1 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
@@ -176,8 +176,7 @@ | |||
176 | /* ISP request and response entry counts (37-65535) */ | 176 | /* ISP request and response entry counts (37-65535) */ |
177 | #define REQUEST_ENTRY_CNT_2100 128 /* Number of request entries. */ | 177 | #define REQUEST_ENTRY_CNT_2100 128 /* Number of request entries. */ |
178 | #define REQUEST_ENTRY_CNT_2200 2048 /* Number of request entries. */ | 178 | #define REQUEST_ENTRY_CNT_2200 2048 /* Number of request entries. */ |
179 | #define REQUEST_ENTRY_CNT_2XXX_EXT_MEM 4096 /* Number of request entries. */ | 179 | #define REQUEST_ENTRY_CNT_24XX 2048 /* Number of request entries. */ |
180 | #define REQUEST_ENTRY_CNT_24XX 4096 /* Number of request entries. */ | ||
181 | #define RESPONSE_ENTRY_CNT_2100 64 /* Number of response entries.*/ | 180 | #define RESPONSE_ENTRY_CNT_2100 64 /* Number of response entries.*/ |
182 | #define RESPONSE_ENTRY_CNT_2300 512 /* Number of response entries.*/ | 181 | #define RESPONSE_ENTRY_CNT_2300 512 /* Number of response entries.*/ |
183 | 182 | ||
@@ -201,20 +200,7 @@ typedef struct srb { | |||
201 | /* | 200 | /* |
202 | * SRB flag definitions | 201 | * SRB flag definitions |
203 | */ | 202 | */ |
204 | #define SRB_TIMEOUT BIT_0 /* Command timed out */ | 203 | #define SRB_DMA_VALID BIT_0 /* Command sent to ISP */ |
205 | #define SRB_DMA_VALID BIT_1 /* Command sent to ISP */ | ||
206 | #define SRB_WATCHDOG BIT_2 /* Command on watchdog list */ | ||
207 | #define SRB_ABORT_PENDING BIT_3 /* Command abort sent to device */ | ||
208 | |||
209 | #define SRB_ABORTED BIT_4 /* Command aborted command already */ | ||
210 | #define SRB_RETRY BIT_5 /* Command needs retrying */ | ||
211 | #define SRB_GOT_SENSE BIT_6 /* Command has sense data */ | ||
212 | #define SRB_FAILOVER BIT_7 /* Command in failover state */ | ||
213 | |||
214 | #define SRB_BUSY BIT_8 /* Command is in busy retry state */ | ||
215 | #define SRB_FO_CANCEL BIT_9 /* Command don't need to do failover */ | ||
216 | #define SRB_IOCTL BIT_10 /* IOCTL command. */ | ||
217 | #define SRB_TAPE BIT_11 /* FCP2 (Tape) command. */ | ||
218 | 204 | ||
219 | /* | 205 | /* |
220 | * ISP I/O Register Set structure definitions. | 206 | * ISP I/O Register Set structure definitions. |
@@ -372,10 +358,10 @@ struct device_reg_2xxx { | |||
372 | }; | 358 | }; |
373 | 359 | ||
374 | struct device_reg_25xxmq { | 360 | struct device_reg_25xxmq { |
375 | volatile uint32_t req_q_in; | 361 | uint32_t req_q_in; |
376 | volatile uint32_t req_q_out; | 362 | uint32_t req_q_out; |
377 | volatile uint32_t rsp_q_in; | 363 | uint32_t rsp_q_in; |
378 | volatile uint32_t rsp_q_out; | 364 | uint32_t rsp_q_out; |
379 | }; | 365 | }; |
380 | 366 | ||
381 | typedef union { | 367 | typedef union { |
@@ -620,6 +606,7 @@ typedef struct { | |||
620 | #define MBC_GET_TIMEOUT_PARAMS 0x22 /* Get FW timeouts. */ | 606 | #define MBC_GET_TIMEOUT_PARAMS 0x22 /* Get FW timeouts. */ |
621 | #define MBC_TRACE_CONTROL 0x27 /* Trace control command. */ | 607 | #define MBC_TRACE_CONTROL 0x27 /* Trace control command. */ |
622 | #define MBC_GEN_SYSTEM_ERROR 0x2a /* Generate System Error. */ | 608 | #define MBC_GEN_SYSTEM_ERROR 0x2a /* Generate System Error. */ |
609 | #define MBC_WRITE_SFP 0x30 /* Write SFP Data. */ | ||
623 | #define MBC_READ_SFP 0x31 /* Read SFP Data. */ | 610 | #define MBC_READ_SFP 0x31 /* Read SFP Data. */ |
624 | #define MBC_SET_TIMEOUT_PARAMS 0x32 /* Set FW timeouts. */ | 611 | #define MBC_SET_TIMEOUT_PARAMS 0x32 /* Set FW timeouts. */ |
625 | #define MBC_MID_INITIALIZE_FIRMWARE 0x48 /* MID Initialize firmware. */ | 612 | #define MBC_MID_INITIALIZE_FIRMWARE 0x48 /* MID Initialize firmware. */ |
@@ -1570,39 +1557,13 @@ typedef struct fc_port { | |||
1570 | #define FCS_DEVICE_DEAD 2 | 1557 | #define FCS_DEVICE_DEAD 2 |
1571 | #define FCS_DEVICE_LOST 3 | 1558 | #define FCS_DEVICE_LOST 3 |
1572 | #define FCS_ONLINE 4 | 1559 | #define FCS_ONLINE 4 |
1573 | #define FCS_NOT_SUPPORTED 5 | ||
1574 | #define FCS_FAILOVER 6 | ||
1575 | #define FCS_FAILOVER_FAILED 7 | ||
1576 | 1560 | ||
1577 | /* | 1561 | /* |
1578 | * FC port flags. | 1562 | * FC port flags. |
1579 | */ | 1563 | */ |
1580 | #define FCF_FABRIC_DEVICE BIT_0 | 1564 | #define FCF_FABRIC_DEVICE BIT_0 |
1581 | #define FCF_LOGIN_NEEDED BIT_1 | 1565 | #define FCF_LOGIN_NEEDED BIT_1 |
1582 | #define FCF_FO_MASKED BIT_2 | 1566 | #define FCF_TAPE_PRESENT BIT_2 |
1583 | #define FCF_FAILOVER_NEEDED BIT_3 | ||
1584 | #define FCF_RESET_NEEDED BIT_4 | ||
1585 | #define FCF_PERSISTENT_BOUND BIT_5 | ||
1586 | #define FCF_TAPE_PRESENT BIT_6 | ||
1587 | #define FCF_FARP_DONE BIT_7 | ||
1588 | #define FCF_FARP_FAILED BIT_8 | ||
1589 | #define FCF_FARP_REPLY_NEEDED BIT_9 | ||
1590 | #define FCF_AUTH_REQ BIT_10 | ||
1591 | #define FCF_SEND_AUTH_REQ BIT_11 | ||
1592 | #define FCF_RECEIVE_AUTH_REQ BIT_12 | ||
1593 | #define FCF_AUTH_SUCCESS BIT_13 | ||
1594 | #define FCF_RLC_SUPPORT BIT_14 | ||
1595 | #define FCF_CONFIG BIT_15 /* Needed? */ | ||
1596 | #define FCF_RESCAN_NEEDED BIT_16 | ||
1597 | #define FCF_XP_DEVICE BIT_17 | ||
1598 | #define FCF_MSA_DEVICE BIT_18 | ||
1599 | #define FCF_EVA_DEVICE BIT_19 | ||
1600 | #define FCF_MSA_PORT_ACTIVE BIT_20 | ||
1601 | #define FCF_FAILBACK_DISABLE BIT_21 | ||
1602 | #define FCF_FAILOVER_DISABLE BIT_22 | ||
1603 | #define FCF_DSXXX_DEVICE BIT_23 | ||
1604 | #define FCF_AA_EVA_DEVICE BIT_24 | ||
1605 | #define FCF_AA_MSA_DEVICE BIT_25 | ||
1606 | 1567 | ||
1607 | /* No loop ID flag. */ | 1568 | /* No loop ID flag. */ |
1608 | #define FC_NO_LOOP_ID 0x1000 | 1569 | #define FC_NO_LOOP_ID 0x1000 |
@@ -2102,9 +2063,6 @@ struct isp_operations { | |||
2102 | 2063 | ||
2103 | int (*get_flash_version) (struct scsi_qla_host *, void *); | 2064 | int (*get_flash_version) (struct scsi_qla_host *, void *); |
2104 | int (*start_scsi) (srb_t *); | 2065 | int (*start_scsi) (srb_t *); |
2105 | void (*wrt_req_reg) (struct qla_hw_data *, uint16_t, uint16_t); | ||
2106 | void (*wrt_rsp_reg) (struct qla_hw_data *, uint16_t, uint16_t); | ||
2107 | uint16_t (*rd_req_reg) (struct qla_hw_data *, uint16_t); | ||
2108 | }; | 2066 | }; |
2109 | 2067 | ||
2110 | /* MSI-X Support *************************************************************/ | 2068 | /* MSI-X Support *************************************************************/ |
@@ -2200,6 +2158,8 @@ struct rsp_que { | |||
2200 | dma_addr_t dma; | 2158 | dma_addr_t dma; |
2201 | response_t *ring; | 2159 | response_t *ring; |
2202 | response_t *ring_ptr; | 2160 | response_t *ring_ptr; |
2161 | uint32_t __iomem *rsp_q_in; /* FWI2-capable only. */ | ||
2162 | uint32_t __iomem *rsp_q_out; | ||
2203 | uint16_t ring_index; | 2163 | uint16_t ring_index; |
2204 | uint16_t out_ptr; | 2164 | uint16_t out_ptr; |
2205 | uint16_t length; | 2165 | uint16_t length; |
@@ -2217,6 +2177,8 @@ struct req_que { | |||
2217 | dma_addr_t dma; | 2177 | dma_addr_t dma; |
2218 | request_t *ring; | 2178 | request_t *ring; |
2219 | request_t *ring_ptr; | 2179 | request_t *ring_ptr; |
2180 | uint32_t __iomem *req_q_in; /* FWI2-capable only. */ | ||
2181 | uint32_t __iomem *req_q_out; | ||
2220 | uint16_t ring_index; | 2182 | uint16_t ring_index; |
2221 | uint16_t in_ptr; | 2183 | uint16_t in_ptr; |
2222 | uint16_t cnt; | 2184 | uint16_t cnt; |
@@ -2256,10 +2218,10 @@ struct qla_hw_data { | |||
2256 | uint32_t msix_enabled :1; | 2218 | uint32_t msix_enabled :1; |
2257 | uint32_t disable_serdes :1; | 2219 | uint32_t disable_serdes :1; |
2258 | uint32_t gpsc_supported :1; | 2220 | uint32_t gpsc_supported :1; |
2259 | uint32_t vsan_enabled :1; | ||
2260 | uint32_t npiv_supported :1; | 2221 | uint32_t npiv_supported :1; |
2261 | uint32_t fce_enabled :1; | 2222 | uint32_t fce_enabled :1; |
2262 | uint32_t hw_event_marker_found:1; | 2223 | uint32_t fac_supported :1; |
2224 | uint32_t chip_reset_done :1; | ||
2263 | } flags; | 2225 | } flags; |
2264 | 2226 | ||
2265 | /* This spinlock is used to protect "io transactions", you must | 2227 | /* This spinlock is used to protect "io transactions", you must |
@@ -2277,7 +2239,7 @@ struct qla_hw_data { | |||
2277 | 2239 | ||
2278 | #define MIN_IOBASE_LEN 0x100 | 2240 | #define MIN_IOBASE_LEN 0x100 |
2279 | /* Multi queue data structs */ | 2241 | /* Multi queue data structs */ |
2280 | device_reg_t *mqiobase; | 2242 | device_reg_t __iomem *mqiobase; |
2281 | uint16_t msix_count; | 2243 | uint16_t msix_count; |
2282 | uint8_t mqenable; | 2244 | uint8_t mqenable; |
2283 | struct req_que **req_q_map; | 2245 | struct req_que **req_q_map; |
@@ -2300,7 +2262,6 @@ struct qla_hw_data { | |||
2300 | uint16_t max_loop_id; | 2262 | uint16_t max_loop_id; |
2301 | 2263 | ||
2302 | uint16_t fb_rev; | 2264 | uint16_t fb_rev; |
2303 | uint16_t max_public_loop_ids; | ||
2304 | uint16_t min_external_loopid; /* First external loop Id */ | 2265 | uint16_t min_external_loopid; /* First external loop Id */ |
2305 | 2266 | ||
2306 | #define PORT_SPEED_UNKNOWN 0xFFFF | 2267 | #define PORT_SPEED_UNKNOWN 0xFFFF |
@@ -2381,6 +2342,8 @@ struct qla_hw_data { | |||
2381 | IS_QLA25XX(ha) || IS_QLA81XX(ha)) | 2342 | IS_QLA25XX(ha) || IS_QLA81XX(ha)) |
2382 | #define IS_NOPOLLING_TYPE(ha) ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && \ | 2343 | #define IS_NOPOLLING_TYPE(ha) ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && \ |
2383 | (ha)->flags.msix_enabled) | 2344 | (ha)->flags.msix_enabled) |
2345 | #define IS_FAC_REQUIRED(ha) (IS_QLA81XX(ha)) | ||
2346 | #define IS_NOCACHE_VPD_TYPE(ha) (IS_QLA81XX(ha)) | ||
2384 | 2347 | ||
2385 | #define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA) | 2348 | #define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA) |
2386 | #define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2) | 2349 | #define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2) |
@@ -2425,6 +2388,10 @@ struct qla_hw_data { | |||
2425 | void *sfp_data; | 2388 | void *sfp_data; |
2426 | dma_addr_t sfp_data_dma; | 2389 | dma_addr_t sfp_data_dma; |
2427 | 2390 | ||
2391 | uint8_t *edc_data; | ||
2392 | dma_addr_t edc_data_dma; | ||
2393 | uint16_t edc_data_len; | ||
2394 | |||
2428 | struct task_struct *dpc_thread; | 2395 | struct task_struct *dpc_thread; |
2429 | uint8_t dpc_active; /* DPC routine is active */ | 2396 | uint8_t dpc_active; /* DPC routine is active */ |
2430 | 2397 | ||
@@ -2439,6 +2406,8 @@ struct qla_hw_data { | |||
2439 | dma_addr_t init_cb_dma; | 2406 | dma_addr_t init_cb_dma; |
2440 | init_cb_t *init_cb; | 2407 | init_cb_t *init_cb; |
2441 | int init_cb_size; | 2408 | int init_cb_size; |
2409 | dma_addr_t ex_init_cb_dma; | ||
2410 | struct ex_init_cb_81xx *ex_init_cb; | ||
2442 | 2411 | ||
2443 | /* These are used by mailbox operations. */ | 2412 | /* These are used by mailbox operations. */ |
2444 | volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT]; | 2413 | volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT]; |
@@ -2453,15 +2422,6 @@ struct qla_hw_data { | |||
2453 | struct completion mbx_cmd_comp; /* Serialize mbx access */ | 2422 | struct completion mbx_cmd_comp; /* Serialize mbx access */ |
2454 | struct completion mbx_intr_comp; /* Used for completion notification */ | 2423 | struct completion mbx_intr_comp; /* Used for completion notification */ |
2455 | 2424 | ||
2456 | uint32_t mbx_flags; | ||
2457 | #define MBX_IN_PROGRESS BIT_0 | ||
2458 | #define MBX_BUSY BIT_1 /* Got the Access */ | ||
2459 | #define MBX_SLEEPING_ON_SEM BIT_2 | ||
2460 | #define MBX_POLLING_FOR_COMP BIT_3 | ||
2461 | #define MBX_COMPLETED BIT_4 | ||
2462 | #define MBX_TIMEDOUT BIT_5 | ||
2463 | #define MBX_ACCESS_TIMEDOUT BIT_6 | ||
2464 | |||
2465 | /* Basic firmware related information. */ | 2425 | /* Basic firmware related information. */ |
2466 | uint16_t fw_major_version; | 2426 | uint16_t fw_major_version; |
2467 | uint16_t fw_minor_version; | 2427 | uint16_t fw_minor_version; |
@@ -2473,13 +2433,15 @@ struct qla_hw_data { | |||
2473 | #define RISC_START_ADDRESS_2100 0x1000 | 2433 | #define RISC_START_ADDRESS_2100 0x1000 |
2474 | #define RISC_START_ADDRESS_2300 0x800 | 2434 | #define RISC_START_ADDRESS_2300 0x800 |
2475 | #define RISC_START_ADDRESS_2400 0x100000 | 2435 | #define RISC_START_ADDRESS_2400 0x100000 |
2436 | uint16_t fw_xcb_count; | ||
2476 | 2437 | ||
2477 | uint16_t fw_options[16]; /* slots: 1,2,3,10,11 */ | 2438 | uint16_t fw_options[16]; /* slots: 1,2,3,10,11 */ |
2478 | uint8_t fw_seriallink_options[4]; | 2439 | uint8_t fw_seriallink_options[4]; |
2479 | uint16_t fw_seriallink_options24[4]; | 2440 | uint16_t fw_seriallink_options24[4]; |
2480 | 2441 | ||
2481 | uint8_t mpi_version[4]; | 2442 | uint8_t mpi_version[3]; |
2482 | uint32_t mpi_capabilities; | 2443 | uint32_t mpi_capabilities; |
2444 | uint8_t phy_version[3]; | ||
2483 | 2445 | ||
2484 | /* Firmware dump information. */ | 2446 | /* Firmware dump information. */ |
2485 | struct qla2xxx_fw_dump *fw_dump; | 2447 | struct qla2xxx_fw_dump *fw_dump; |
@@ -2545,6 +2507,8 @@ struct qla_hw_data { | |||
2545 | uint32_t flt_region_boot; | 2507 | uint32_t flt_region_boot; |
2546 | uint32_t flt_region_fw; | 2508 | uint32_t flt_region_fw; |
2547 | uint32_t flt_region_vpd_nvram; | 2509 | uint32_t flt_region_vpd_nvram; |
2510 | uint32_t flt_region_vpd; | ||
2511 | uint32_t flt_region_nvram; | ||
2548 | uint32_t flt_region_npiv_conf; | 2512 | uint32_t flt_region_npiv_conf; |
2549 | 2513 | ||
2550 | /* Needed for BEACON */ | 2514 | /* Needed for BEACON */ |
@@ -2613,36 +2577,19 @@ typedef struct scsi_qla_host { | |||
2613 | #define LOOP_RESYNC_ACTIVE 5 | 2577 | #define LOOP_RESYNC_ACTIVE 5 |
2614 | #define LOCAL_LOOP_UPDATE 6 /* Perform a local loop update. */ | 2578 | #define LOCAL_LOOP_UPDATE 6 /* Perform a local loop update. */ |
2615 | #define RSCN_UPDATE 7 /* Perform an RSCN update. */ | 2579 | #define RSCN_UPDATE 7 /* Perform an RSCN update. */ |
2616 | #define MAILBOX_RETRY 8 | 2580 | #define RELOGIN_NEEDED 8 |
2617 | #define ISP_RESET_NEEDED 9 /* Initiate a ISP reset. */ | 2581 | #define REGISTER_FC4_NEEDED 9 /* SNS FC4 registration required. */ |
2618 | #define FAILOVER_EVENT_NEEDED 10 | 2582 | #define ISP_ABORT_RETRY 10 /* ISP aborted. */ |
2619 | #define FAILOVER_EVENT 11 | 2583 | #define BEACON_BLINK_NEEDED 11 |
2620 | #define FAILOVER_NEEDED 12 | 2584 | #define REGISTER_FDMI_NEEDED 12 |
2621 | #define SCSI_RESTART_NEEDED 13 /* Processes SCSI retry queue. */ | 2585 | #define FCPORT_UPDATE_NEEDED 13 |
2622 | #define PORT_RESTART_NEEDED 14 /* Processes Retry queue. */ | 2586 | #define VP_DPC_NEEDED 14 /* wake up for VP dpc handling */ |
2623 | #define RESTART_QUEUES_NEEDED 15 /* Restarts the Lun queue. */ | 2587 | #define UNLOADING 15 |
2624 | #define ABORT_QUEUES_NEEDED 16 | 2588 | #define NPIV_CONFIG_NEEDED 16 |
2625 | #define RELOGIN_NEEDED 17 | ||
2626 | #define LOGIN_RETRY_NEEDED 18 /* Initiate required fabric logins. */ | ||
2627 | #define REGISTER_FC4_NEEDED 19 /* SNS FC4 registration required. */ | ||
2628 | #define ISP_ABORT_RETRY 20 /* ISP aborted. */ | ||
2629 | #define FCPORT_RESCAN_NEEDED 21 /* IO descriptor processing needed */ | ||
2630 | #define IODESC_PROCESS_NEEDED 22 /* IO descriptor processing needed */ | ||
2631 | #define IOCTL_ERROR_RECOVERY 23 | ||
2632 | #define LOOP_RESET_NEEDED 24 | ||
2633 | #define BEACON_BLINK_NEEDED 25 | ||
2634 | #define REGISTER_FDMI_NEEDED 26 | ||
2635 | #define FCPORT_UPDATE_NEEDED 27 | ||
2636 | #define VP_DPC_NEEDED 28 /* wake up for VP dpc handling */ | ||
2637 | #define UNLOADING 29 | ||
2638 | #define NPIV_CONFIG_NEEDED 30 | ||
2639 | 2589 | ||
2640 | uint32_t device_flags; | 2590 | uint32_t device_flags; |
2641 | #define DFLG_LOCAL_DEVICES BIT_0 | 2591 | #define SWITCH_FOUND BIT_0 |
2642 | #define DFLG_RETRY_LOCAL_DEVICES BIT_1 | 2592 | #define DFLG_NO_CABLE BIT_1 |
2643 | #define DFLG_FABRIC_DEVICES BIT_2 | ||
2644 | #define SWITCH_FOUND BIT_3 | ||
2645 | #define DFLG_NO_CABLE BIT_4 | ||
2646 | 2593 | ||
2647 | srb_t *status_srb; /* Status continuation entry. */ | 2594 | srb_t *status_srb; /* Status continuation entry. */ |
2648 | 2595 | ||
@@ -2755,10 +2702,5 @@ typedef struct scsi_qla_host { | |||
2755 | #include "qla_inline.h" | 2702 | #include "qla_inline.h" |
2756 | 2703 | ||
2757 | #define CMD_SP(Cmnd) ((Cmnd)->SCp.ptr) | 2704 | #define CMD_SP(Cmnd) ((Cmnd)->SCp.ptr) |
2758 | #define CMD_COMPL_STATUS(Cmnd) ((Cmnd)->SCp.this_residual) | ||
2759 | #define CMD_RESID_LEN(Cmnd) ((Cmnd)->SCp.buffers_residual) | ||
2760 | #define CMD_SCSI_STATUS(Cmnd) ((Cmnd)->SCp.Status) | ||
2761 | #define CMD_ACTUAL_SNSLEN(Cmnd) ((Cmnd)->SCp.Message) | ||
2762 | #define CMD_ENTRY_STATUS(Cmnd) ((Cmnd)->SCp.have_data_in) | ||
2763 | 2705 | ||
2764 | #endif | 2706 | #endif |
diff --git a/drivers/scsi/qla2xxx/qla_dfs.c b/drivers/scsi/qla2xxx/qla_dfs.c index c66036da7d2b..3a9a6ca42266 100644 --- a/drivers/scsi/qla2xxx/qla_dfs.c +++ b/drivers/scsi/qla2xxx/qla_dfs.c | |||
@@ -71,7 +71,7 @@ qla2x00_dfs_fce_open(struct inode *inode, struct file *file) | |||
71 | 71 | ||
72 | mutex_unlock(&ha->fce_mutex); | 72 | mutex_unlock(&ha->fce_mutex); |
73 | out: | 73 | out: |
74 | return single_open(file, qla2x00_dfs_fce_show, ha); | 74 | return single_open(file, qla2x00_dfs_fce_show, vha); |
75 | } | 75 | } |
76 | 76 | ||
77 | static int | 77 | static int |
@@ -145,7 +145,7 @@ create_dir: | |||
145 | atomic_inc(&qla2x00_dfs_root_count); | 145 | atomic_inc(&qla2x00_dfs_root_count); |
146 | 146 | ||
147 | create_nodes: | 147 | create_nodes: |
148 | ha->dfs_fce = debugfs_create_file("fce", S_IRUSR, ha->dfs_dir, ha, | 148 | ha->dfs_fce = debugfs_create_file("fce", S_IRUSR, ha->dfs_dir, vha, |
149 | &dfs_fce_ops); | 149 | &dfs_fce_ops); |
150 | if (!ha->dfs_fce) { | 150 | if (!ha->dfs_fce) { |
151 | qla_printk(KERN_NOTICE, ha, | 151 | qla_printk(KERN_NOTICE, ha, |
diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index ffff42554087..96ccb9642ba0 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h | |||
@@ -1403,6 +1403,21 @@ struct access_chip_rsp_84xx { | |||
1403 | #define MBA_IDC_TIME_EXT 0x8102 | 1403 | #define MBA_IDC_TIME_EXT 0x8102 |
1404 | 1404 | ||
1405 | #define MBC_IDC_ACK 0x101 | 1405 | #define MBC_IDC_ACK 0x101 |
1406 | #define MBC_RESTART_MPI_FW 0x3d | ||
1407 | #define MBC_FLASH_ACCESS_CTRL 0x3e /* Control flash access. */ | ||
1408 | |||
1409 | /* Flash access control option field bit definitions */ | ||
1410 | #define FAC_OPT_FORCE_SEMAPHORE BIT_15 | ||
1411 | #define FAC_OPT_REQUESTOR_ID BIT_14 | ||
1412 | #define FAC_OPT_CMD_SUBCODE 0xff | ||
1413 | |||
1414 | /* Flash access control command subcodes */ | ||
1415 | #define FAC_OPT_CMD_WRITE_PROTECT 0x00 | ||
1416 | #define FAC_OPT_CMD_WRITE_ENABLE 0x01 | ||
1417 | #define FAC_OPT_CMD_ERASE_SECTOR 0x02 | ||
1418 | #define FAC_OPT_CMD_LOCK_SEMAPHORE 0x03 | ||
1419 | #define FAC_OPT_CMD_UNLOCK_SEMAPHORE 0x04 | ||
1420 | #define FAC_OPT_CMD_GET_SECTOR_SIZE 0x05 | ||
1406 | 1421 | ||
1407 | struct nvram_81xx { | 1422 | struct nvram_81xx { |
1408 | /* NVRAM header. */ | 1423 | /* NVRAM header. */ |
@@ -1440,7 +1455,17 @@ struct nvram_81xx { | |||
1440 | uint16_t reserved_6[24]; | 1455 | uint16_t reserved_6[24]; |
1441 | 1456 | ||
1442 | /* Offset 128. */ | 1457 | /* Offset 128. */ |
1443 | uint16_t reserved_7[64]; | 1458 | uint16_t ex_version; |
1459 | uint8_t prio_fcf_matching_flags; | ||
1460 | uint8_t reserved_6_1[3]; | ||
1461 | uint16_t pri_fcf_vlan_id; | ||
1462 | uint8_t pri_fcf_fabric_name[8]; | ||
1463 | uint16_t reserved_6_2[7]; | ||
1464 | uint8_t spma_mac_addr[6]; | ||
1465 | uint16_t reserved_6_3[14]; | ||
1466 | |||
1467 | /* Offset 192. */ | ||
1468 | uint16_t reserved_7[32]; | ||
1444 | 1469 | ||
1445 | /* | 1470 | /* |
1446 | * BIT 0 = Enable spinup delay | 1471 | * BIT 0 = Enable spinup delay |
@@ -1664,6 +1689,17 @@ struct mid_init_cb_81xx { | |||
1664 | struct mid_conf_entry_24xx entries[MAX_MULTI_ID_FABRIC]; | 1689 | struct mid_conf_entry_24xx entries[MAX_MULTI_ID_FABRIC]; |
1665 | }; | 1690 | }; |
1666 | 1691 | ||
1692 | struct ex_init_cb_81xx { | ||
1693 | uint16_t ex_version; | ||
1694 | uint8_t prio_fcf_matching_flags; | ||
1695 | uint8_t reserved_1[3]; | ||
1696 | uint16_t pri_fcf_vlan_id; | ||
1697 | uint8_t pri_fcf_fabric_name[8]; | ||
1698 | uint16_t reserved_2[7]; | ||
1699 | uint8_t spma_mac_addr[6]; | ||
1700 | uint16_t reserved_3[14]; | ||
1701 | }; | ||
1702 | |||
1667 | #define FARX_ACCESS_FLASH_CONF_81XX 0x7FFD0000 | 1703 | #define FARX_ACCESS_FLASH_CONF_81XX 0x7FFD0000 |
1668 | #define FARX_ACCESS_FLASH_DATA_81XX 0x7F800000 | 1704 | #define FARX_ACCESS_FLASH_DATA_81XX 0x7F800000 |
1669 | 1705 | ||
@@ -1672,6 +1708,10 @@ struct mid_init_cb_81xx { | |||
1672 | #define FA_RISC_CODE_ADDR_81 0xA0000 | 1708 | #define FA_RISC_CODE_ADDR_81 0xA0000 |
1673 | #define FA_FW_AREA_ADDR_81 0xC0000 | 1709 | #define FA_FW_AREA_ADDR_81 0xC0000 |
1674 | #define FA_VPD_NVRAM_ADDR_81 0xD0000 | 1710 | #define FA_VPD_NVRAM_ADDR_81 0xD0000 |
1711 | #define FA_VPD0_ADDR_81 0xD0000 | ||
1712 | #define FA_VPD1_ADDR_81 0xD0400 | ||
1713 | #define FA_NVRAM0_ADDR_81 0xD0080 | ||
1714 | #define FA_NVRAM1_ADDR_81 0xD0480 | ||
1675 | #define FA_FEATURE_ADDR_81 0xD4000 | 1715 | #define FA_FEATURE_ADDR_81 0xD4000 |
1676 | #define FA_FLASH_DESCR_ADDR_81 0xD8000 | 1716 | #define FA_FLASH_DESCR_ADDR_81 0xD8000 |
1677 | #define FA_FLASH_LAYOUT_ADDR_81 0xD8400 | 1717 | #define FA_FLASH_LAYOUT_ADDR_81 0xD8400 |
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index 6de283f8f111..528913f6bed9 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h | |||
@@ -73,6 +73,7 @@ extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int); | |||
73 | extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum | 73 | extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum |
74 | fc_host_event_code, u32); | 74 | fc_host_event_code, u32); |
75 | extern int qla2x00_post_idc_ack_work(struct scsi_qla_host *, uint16_t *); | 75 | extern int qla2x00_post_idc_ack_work(struct scsi_qla_host *, uint16_t *); |
76 | extern int qla81xx_restart_mpi_firmware(scsi_qla_host_t *); | ||
76 | 77 | ||
77 | extern void qla2x00_abort_fcport_cmds(fc_port_t *); | 78 | extern void qla2x00_abort_fcport_cmds(fc_port_t *); |
78 | extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *, | 79 | extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *, |
@@ -82,7 +83,7 @@ extern void qla2x00_relogin(struct scsi_qla_host *); | |||
82 | /* | 83 | /* |
83 | * Global Functions in qla_mid.c source file. | 84 | * Global Functions in qla_mid.c source file. |
84 | */ | 85 | */ |
85 | extern struct scsi_host_template qla24xx_driver_template; | 86 | extern struct scsi_host_template qla2xxx_driver_template; |
86 | extern struct scsi_transport_template *qla2xxx_transport_vport_template; | 87 | extern struct scsi_transport_template *qla2xxx_transport_vport_template; |
87 | extern void qla2x00_timer(scsi_qla_host_t *); | 88 | extern void qla2x00_timer(scsi_qla_host_t *); |
88 | extern void qla2x00_start_timer(scsi_qla_host_t *, void *, unsigned long); | 89 | extern void qla2x00_start_timer(scsi_qla_host_t *, void *, unsigned long); |
@@ -110,6 +111,7 @@ extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *, int); | |||
110 | extern struct fw_blob *qla2x00_request_firmware(scsi_qla_host_t *); | 111 | extern struct fw_blob *qla2x00_request_firmware(scsi_qla_host_t *); |
111 | 112 | ||
112 | extern int qla2x00_wait_for_hba_online(scsi_qla_host_t *); | 113 | extern int qla2x00_wait_for_hba_online(scsi_qla_host_t *); |
114 | extern int qla2x00_wait_for_chip_reset(scsi_qla_host_t *); | ||
113 | 115 | ||
114 | extern void qla2xxx_wake_dpc(struct scsi_qla_host *); | 116 | extern void qla2xxx_wake_dpc(struct scsi_qla_host *); |
115 | extern void qla2x00_alert_all_vps(struct rsp_que *, uint16_t *); | 117 | extern void qla2x00_alert_all_vps(struct rsp_que *, uint16_t *); |
@@ -144,8 +146,8 @@ extern int | |||
144 | qla2x00_execute_fw(scsi_qla_host_t *, uint32_t); | 146 | qla2x00_execute_fw(scsi_qla_host_t *, uint32_t); |
145 | 147 | ||
146 | extern void | 148 | extern void |
147 | qla2x00_get_fw_version(scsi_qla_host_t *, uint16_t *, | 149 | qla2x00_get_fw_version(scsi_qla_host_t *, uint16_t *, uint16_t *, uint16_t *, |
148 | uint16_t *, uint16_t *, uint16_t *, uint32_t *, uint8_t *, uint32_t *); | 150 | uint16_t *, uint32_t *, uint8_t *, uint32_t *, uint8_t *); |
149 | 151 | ||
150 | extern int | 152 | extern int |
151 | qla2x00_get_fw_options(scsi_qla_host_t *, uint16_t *); | 153 | qla2x00_get_fw_options(scsi_qla_host_t *, uint16_t *); |
@@ -263,12 +265,29 @@ extern int | |||
263 | qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t, uint16_t); | 265 | qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t, uint16_t); |
264 | 266 | ||
265 | extern int | 267 | extern int |
268 | qla2x00_read_edc(scsi_qla_host_t *, uint16_t, uint16_t, dma_addr_t, | ||
269 | uint8_t *, uint16_t, uint16_t); | ||
270 | |||
271 | extern int | ||
272 | qla2x00_write_edc(scsi_qla_host_t *, uint16_t, uint16_t, dma_addr_t, | ||
273 | uint8_t *, uint16_t, uint16_t); | ||
274 | |||
275 | extern int | ||
266 | qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *); | 276 | qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *); |
267 | 277 | ||
268 | extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *); | 278 | extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *); |
269 | 279 | ||
270 | extern int qla81xx_idc_ack(scsi_qla_host_t *, uint16_t *); | 280 | extern int qla81xx_idc_ack(scsi_qla_host_t *, uint16_t *); |
271 | 281 | ||
282 | extern int | ||
283 | qla81xx_fac_get_sector_size(scsi_qla_host_t *, uint32_t *); | ||
284 | |||
285 | extern int | ||
286 | qla81xx_fac_do_write_enable(scsi_qla_host_t *, int); | ||
287 | |||
288 | extern int | ||
289 | qla81xx_fac_erase_sector(scsi_qla_host_t *, uint32_t, uint32_t); | ||
290 | |||
272 | /* | 291 | /* |
273 | * Global Function Prototypes in qla_isr.c source file. | 292 | * Global Function Prototypes in qla_isr.c source file. |
274 | */ | 293 | */ |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 87f9abc71460..bd7dd84c0648 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -20,7 +20,6 @@ | |||
20 | * QLogic ISP2x00 Hardware Support Function Prototypes. | 20 | * QLogic ISP2x00 Hardware Support Function Prototypes. |
21 | */ | 21 | */ |
22 | static int qla2x00_isp_firmware(scsi_qla_host_t *); | 22 | static int qla2x00_isp_firmware(scsi_qla_host_t *); |
23 | static void qla2x00_resize_request_q(scsi_qla_host_t *); | ||
24 | static int qla2x00_setup_chip(scsi_qla_host_t *); | 23 | static int qla2x00_setup_chip(scsi_qla_host_t *); |
25 | static int qla2x00_init_rings(scsi_qla_host_t *); | 24 | static int qla2x00_init_rings(scsi_qla_host_t *); |
26 | static int qla2x00_fw_ready(scsi_qla_host_t *); | 25 | static int qla2x00_fw_ready(scsi_qla_host_t *); |
@@ -61,8 +60,10 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha) | |||
61 | int rval; | 60 | int rval; |
62 | struct qla_hw_data *ha = vha->hw; | 61 | struct qla_hw_data *ha = vha->hw; |
63 | struct req_que *req = ha->req_q_map[0]; | 62 | struct req_que *req = ha->req_q_map[0]; |
63 | |||
64 | /* Clear adapter flags. */ | 64 | /* Clear adapter flags. */ |
65 | vha->flags.online = 0; | 65 | vha->flags.online = 0; |
66 | ha->flags.chip_reset_done = 0; | ||
66 | vha->flags.reset_active = 0; | 67 | vha->flags.reset_active = 0; |
67 | atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); | 68 | atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); |
68 | atomic_set(&vha->loop_state, LOOP_DOWN); | 69 | atomic_set(&vha->loop_state, LOOP_DOWN); |
@@ -70,7 +71,6 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha) | |||
70 | vha->dpc_flags = 0; | 71 | vha->dpc_flags = 0; |
71 | vha->flags.management_server_logged_in = 0; | 72 | vha->flags.management_server_logged_in = 0; |
72 | vha->marker_needed = 0; | 73 | vha->marker_needed = 0; |
73 | ha->mbx_flags = 0; | ||
74 | ha->isp_abort_cnt = 0; | 74 | ha->isp_abort_cnt = 0; |
75 | ha->beacon_blink_led = 0; | 75 | ha->beacon_blink_led = 0; |
76 | set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); | 76 | set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); |
@@ -131,6 +131,7 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha) | |||
131 | } | 131 | } |
132 | } | 132 | } |
133 | rval = qla2x00_init_rings(vha); | 133 | rval = qla2x00_init_rings(vha); |
134 | ha->flags.chip_reset_done = 1; | ||
134 | 135 | ||
135 | return (rval); | 136 | return (rval); |
136 | } | 137 | } |
@@ -512,7 +513,6 @@ qla2x00_reset_chip(scsi_qla_host_t *vha) | |||
512 | static inline void | 513 | static inline void |
513 | qla24xx_reset_risc(scsi_qla_host_t *vha) | 514 | qla24xx_reset_risc(scsi_qla_host_t *vha) |
514 | { | 515 | { |
515 | int hw_evt = 0; | ||
516 | unsigned long flags = 0; | 516 | unsigned long flags = 0; |
517 | struct qla_hw_data *ha = vha->hw; | 517 | struct qla_hw_data *ha = vha->hw; |
518 | struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; | 518 | struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; |
@@ -542,8 +542,6 @@ qla24xx_reset_risc(scsi_qla_host_t *vha) | |||
542 | d2 = (uint32_t) RD_REG_WORD(®->mailbox0); | 542 | d2 = (uint32_t) RD_REG_WORD(®->mailbox0); |
543 | barrier(); | 543 | barrier(); |
544 | } | 544 | } |
545 | if (cnt == 0) | ||
546 | hw_evt = 1; | ||
547 | 545 | ||
548 | /* Wait for soft-reset to complete. */ | 546 | /* Wait for soft-reset to complete. */ |
549 | d2 = RD_REG_DWORD(®->ctrl_status); | 547 | d2 = RD_REG_DWORD(®->ctrl_status); |
@@ -816,7 +814,7 @@ qla2x00_alloc_fw_dump(scsi_qla_host_t *vha) | |||
816 | qla_printk(KERN_INFO, ha, "Allocated (%d KB) for FCE...\n", | 814 | qla_printk(KERN_INFO, ha, "Allocated (%d KB) for FCE...\n", |
817 | FCE_SIZE / 1024); | 815 | FCE_SIZE / 1024); |
818 | 816 | ||
819 | fce_size = sizeof(struct qla2xxx_fce_chain) + EFT_SIZE; | 817 | fce_size = sizeof(struct qla2xxx_fce_chain) + FCE_SIZE; |
820 | ha->flags.fce_enabled = 1; | 818 | ha->flags.fce_enabled = 1; |
821 | ha->fce_dma = tc_dma; | 819 | ha->fce_dma = tc_dma; |
822 | ha->fce = tc; | 820 | ha->fce = tc; |
@@ -894,62 +892,6 @@ cont_alloc: | |||
894 | } | 892 | } |
895 | 893 | ||
896 | /** | 894 | /** |
897 | * qla2x00_resize_request_q() - Resize request queue given available ISP memory. | ||
898 | * @ha: HA context | ||
899 | * | ||
900 | * Returns 0 on success. | ||
901 | */ | ||
902 | static void | ||
903 | qla2x00_resize_request_q(scsi_qla_host_t *vha) | ||
904 | { | ||
905 | int rval; | ||
906 | uint16_t fw_iocb_cnt = 0; | ||
907 | uint16_t request_q_length = REQUEST_ENTRY_CNT_2XXX_EXT_MEM; | ||
908 | dma_addr_t request_dma; | ||
909 | request_t *request_ring; | ||
910 | struct qla_hw_data *ha = vha->hw; | ||
911 | struct req_que *req = ha->req_q_map[0]; | ||
912 | |||
913 | /* Valid only on recent ISPs. */ | ||
914 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) | ||
915 | return; | ||
916 | |||
917 | /* Retrieve IOCB counts available to the firmware. */ | ||
918 | rval = qla2x00_get_resource_cnts(vha, NULL, NULL, NULL, &fw_iocb_cnt, | ||
919 | &ha->max_npiv_vports); | ||
920 | if (rval) | ||
921 | return; | ||
922 | /* No point in continuing if current settings are sufficient. */ | ||
923 | if (fw_iocb_cnt < 1024) | ||
924 | return; | ||
925 | if (req->length >= request_q_length) | ||
926 | return; | ||
927 | |||
928 | /* Attempt to claim larger area for request queue. */ | ||
929 | request_ring = dma_alloc_coherent(&ha->pdev->dev, | ||
930 | (request_q_length + 1) * sizeof(request_t), &request_dma, | ||
931 | GFP_KERNEL); | ||
932 | if (request_ring == NULL) | ||
933 | return; | ||
934 | |||
935 | /* Resize successful, report extensions. */ | ||
936 | qla_printk(KERN_INFO, ha, "Extended memory detected (%d KB)...\n", | ||
937 | (ha->fw_memory_size + 1) / 1024); | ||
938 | qla_printk(KERN_INFO, ha, "Resizing request queue depth " | ||
939 | "(%d -> %d)...\n", req->length, request_q_length); | ||
940 | |||
941 | /* Clear old allocations. */ | ||
942 | dma_free_coherent(&ha->pdev->dev, | ||
943 | (req->length + 1) * sizeof(request_t), req->ring, | ||
944 | req->dma); | ||
945 | |||
946 | /* Begin using larger queue. */ | ||
947 | req->length = request_q_length; | ||
948 | req->ring = request_ring; | ||
949 | req->dma = request_dma; | ||
950 | } | ||
951 | |||
952 | /** | ||
953 | * qla2x00_setup_chip() - Load and start RISC firmware. | 895 | * qla2x00_setup_chip() - Load and start RISC firmware. |
954 | * @ha: HA context | 896 | * @ha: HA context |
955 | * | 897 | * |
@@ -963,6 +905,7 @@ qla2x00_setup_chip(scsi_qla_host_t *vha) | |||
963 | struct qla_hw_data *ha = vha->hw; | 905 | struct qla_hw_data *ha = vha->hw; |
964 | struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; | 906 | struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; |
965 | unsigned long flags; | 907 | unsigned long flags; |
908 | uint16_t fw_major_version; | ||
966 | 909 | ||
967 | if (!IS_FWI2_CAPABLE(ha) && !IS_QLA2100(ha) && !IS_QLA2200(ha)) { | 910 | if (!IS_FWI2_CAPABLE(ha) && !IS_QLA2100(ha) && !IS_QLA2200(ha)) { |
968 | /* Disable SRAM, Instruction RAM and GP RAM parity. */ | 911 | /* Disable SRAM, Instruction RAM and GP RAM parity. */ |
@@ -986,13 +929,15 @@ qla2x00_setup_chip(scsi_qla_host_t *vha) | |||
986 | 929 | ||
987 | rval = qla2x00_execute_fw(vha, srisc_address); | 930 | rval = qla2x00_execute_fw(vha, srisc_address); |
988 | /* Retrieve firmware information. */ | 931 | /* Retrieve firmware information. */ |
989 | if (rval == QLA_SUCCESS && ha->fw_major_version == 0) { | 932 | if (rval == QLA_SUCCESS) { |
933 | fw_major_version = ha->fw_major_version; | ||
990 | qla2x00_get_fw_version(vha, | 934 | qla2x00_get_fw_version(vha, |
991 | &ha->fw_major_version, | 935 | &ha->fw_major_version, |
992 | &ha->fw_minor_version, | 936 | &ha->fw_minor_version, |
993 | &ha->fw_subminor_version, | 937 | &ha->fw_subminor_version, |
994 | &ha->fw_attributes, &ha->fw_memory_size, | 938 | &ha->fw_attributes, &ha->fw_memory_size, |
995 | ha->mpi_version, &ha->mpi_capabilities); | 939 | ha->mpi_version, &ha->mpi_capabilities, |
940 | ha->phy_version); | ||
996 | ha->flags.npiv_supported = 0; | 941 | ha->flags.npiv_supported = 0; |
997 | if (IS_QLA2XXX_MIDTYPE(ha) && | 942 | if (IS_QLA2XXX_MIDTYPE(ha) && |
998 | (ha->fw_attributes & BIT_2)) { | 943 | (ha->fw_attributes & BIT_2)) { |
@@ -1003,9 +948,11 @@ qla2x00_setup_chip(scsi_qla_host_t *vha) | |||
1003 | ha->max_npiv_vports = | 948 | ha->max_npiv_vports = |
1004 | MIN_MULTI_ID_FABRIC - 1; | 949 | MIN_MULTI_ID_FABRIC - 1; |
1005 | } | 950 | } |
1006 | qla2x00_resize_request_q(vha); | 951 | qla2x00_get_resource_cnts(vha, NULL, |
952 | &ha->fw_xcb_count, NULL, NULL, | ||
953 | &ha->max_npiv_vports); | ||
1007 | 954 | ||
1008 | if (ql2xallocfwdump) | 955 | if (!fw_major_version && ql2xallocfwdump) |
1009 | qla2x00_alloc_fw_dump(vha); | 956 | qla2x00_alloc_fw_dump(vha); |
1010 | } | 957 | } |
1011 | } else { | 958 | } else { |
@@ -1028,6 +975,21 @@ qla2x00_setup_chip(scsi_qla_host_t *vha) | |||
1028 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | 975 | spin_unlock_irqrestore(&ha->hardware_lock, flags); |
1029 | } | 976 | } |
1030 | 977 | ||
978 | if (rval == QLA_SUCCESS && IS_FAC_REQUIRED(ha)) { | ||
979 | uint32_t size; | ||
980 | |||
981 | rval = qla81xx_fac_get_sector_size(vha, &size); | ||
982 | if (rval == QLA_SUCCESS) { | ||
983 | ha->flags.fac_supported = 1; | ||
984 | ha->fdt_block_size = size << 2; | ||
985 | } else { | ||
986 | qla_printk(KERN_ERR, ha, | ||
987 | "Unsupported FAC firmware (%d.%02d.%02d).\n", | ||
988 | ha->fw_major_version, ha->fw_minor_version, | ||
989 | ha->fw_subminor_version); | ||
990 | } | ||
991 | } | ||
992 | |||
1031 | if (rval) { | 993 | if (rval) { |
1032 | DEBUG2_3(printk("scsi(%ld): Setup chip **** FAILED ****.\n", | 994 | DEBUG2_3(printk("scsi(%ld): Setup chip **** FAILED ****.\n", |
1033 | vha->host_no)); | 995 | vha->host_no)); |
@@ -1314,8 +1276,11 @@ qla2x00_init_rings(scsi_qla_host_t *vha) | |||
1314 | mid_init_cb->count = cpu_to_le16(ha->max_npiv_vports); | 1276 | mid_init_cb->count = cpu_to_le16(ha->max_npiv_vports); |
1315 | } | 1277 | } |
1316 | 1278 | ||
1317 | 1279 | if (IS_FWI2_CAPABLE(ha)) { | |
1318 | mid_init_cb->options = __constant_cpu_to_le16(BIT_1); | 1280 | mid_init_cb->options = __constant_cpu_to_le16(BIT_1); |
1281 | mid_init_cb->init_cb.execution_throttle = | ||
1282 | cpu_to_le16(ha->fw_xcb_count); | ||
1283 | } | ||
1319 | 1284 | ||
1320 | rval = qla2x00_init_firmware(vha, ha->init_cb_size); | 1285 | rval = qla2x00_init_firmware(vha, ha->init_cb_size); |
1321 | if (rval) { | 1286 | if (rval) { |
@@ -1989,7 +1954,6 @@ qla2x00_alloc_fcport(scsi_qla_host_t *vha, gfp_t flags) | |||
1989 | fcport->port_type = FCT_UNKNOWN; | 1954 | fcport->port_type = FCT_UNKNOWN; |
1990 | fcport->loop_id = FC_NO_LOOP_ID; | 1955 | fcport->loop_id = FC_NO_LOOP_ID; |
1991 | atomic_set(&fcport->state, FCS_UNCONFIGURED); | 1956 | atomic_set(&fcport->state, FCS_UNCONFIGURED); |
1992 | fcport->flags = FCF_RLC_SUPPORT; | ||
1993 | fcport->supported_classes = FC_COS_UNSPECIFIED; | 1957 | fcport->supported_classes = FC_COS_UNSPECIFIED; |
1994 | 1958 | ||
1995 | return fcport; | 1959 | return fcport; |
@@ -2171,7 +2135,6 @@ qla2x00_configure_local_loop(scsi_qla_host_t *vha) | |||
2171 | vha->host_no, fcport->loop_id)); | 2135 | vha->host_no, fcport->loop_id)); |
2172 | 2136 | ||
2173 | atomic_set(&fcport->state, FCS_DEVICE_LOST); | 2137 | atomic_set(&fcport->state, FCS_DEVICE_LOST); |
2174 | fcport->flags &= ~FCF_FARP_DONE; | ||
2175 | } | 2138 | } |
2176 | } | 2139 | } |
2177 | 2140 | ||
@@ -2228,8 +2191,7 @@ qla2x00_configure_local_loop(scsi_qla_host_t *vha) | |||
2228 | WWN_SIZE)) | 2191 | WWN_SIZE)) |
2229 | continue; | 2192 | continue; |
2230 | 2193 | ||
2231 | fcport->flags &= ~(FCF_FABRIC_DEVICE | | 2194 | fcport->flags &= ~FCF_FABRIC_DEVICE; |
2232 | FCF_PERSISTENT_BOUND); | ||
2233 | fcport->loop_id = new_fcport->loop_id; | 2195 | fcport->loop_id = new_fcport->loop_id; |
2234 | fcport->port_type = new_fcport->port_type; | 2196 | fcport->port_type = new_fcport->port_type; |
2235 | fcport->d_id.b24 = new_fcport->d_id.b24; | 2197 | fcport->d_id.b24 = new_fcport->d_id.b24; |
@@ -2242,7 +2204,6 @@ qla2x00_configure_local_loop(scsi_qla_host_t *vha) | |||
2242 | 2204 | ||
2243 | if (!found) { | 2205 | if (!found) { |
2244 | /* New device, add to fcports list. */ | 2206 | /* New device, add to fcports list. */ |
2245 | new_fcport->flags &= ~FCF_PERSISTENT_BOUND; | ||
2246 | if (vha->vp_idx) { | 2207 | if (vha->vp_idx) { |
2247 | new_fcport->vha = vha; | 2208 | new_fcport->vha = vha; |
2248 | new_fcport->vp_idx = vha->vp_idx; | 2209 | new_fcport->vp_idx = vha->vp_idx; |
@@ -2275,11 +2236,6 @@ cleanup_allocation: | |||
2275 | "rval=%x\n", vha->host_no, rval)); | 2236 | "rval=%x\n", vha->host_no, rval)); |
2276 | } | 2237 | } |
2277 | 2238 | ||
2278 | if (found_devs) { | ||
2279 | vha->device_flags |= DFLG_LOCAL_DEVICES; | ||
2280 | vha->device_flags &= ~DFLG_RETRY_LOCAL_DEVICES; | ||
2281 | } | ||
2282 | |||
2283 | return (rval); | 2239 | return (rval); |
2284 | } | 2240 | } |
2285 | 2241 | ||
@@ -2765,7 +2721,6 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha, | |||
2765 | fcport->loop_id = FC_NO_LOOP_ID; | 2721 | fcport->loop_id = FC_NO_LOOP_ID; |
2766 | fcport->flags |= (FCF_FABRIC_DEVICE | | 2722 | fcport->flags |= (FCF_FABRIC_DEVICE | |
2767 | FCF_LOGIN_NEEDED); | 2723 | FCF_LOGIN_NEEDED); |
2768 | fcport->flags &= ~FCF_PERSISTENT_BOUND; | ||
2769 | break; | 2724 | break; |
2770 | } | 2725 | } |
2771 | 2726 | ||
@@ -2808,9 +2763,6 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha, | |||
2808 | kfree(swl); | 2763 | kfree(swl); |
2809 | kfree(new_fcport); | 2764 | kfree(new_fcport); |
2810 | 2765 | ||
2811 | if (!list_empty(new_fcports)) | ||
2812 | vha->device_flags |= DFLG_FABRIC_DEVICES; | ||
2813 | |||
2814 | return (rval); | 2766 | return (rval); |
2815 | } | 2767 | } |
2816 | 2768 | ||
@@ -2993,7 +2945,6 @@ qla2x00_device_resync(scsi_qla_host_t *vha) | |||
2993 | 0, 0); | 2945 | 0, 0); |
2994 | } | 2946 | } |
2995 | } | 2947 | } |
2996 | fcport->flags &= ~FCF_FARP_DONE; | ||
2997 | } | 2948 | } |
2998 | } | 2949 | } |
2999 | return (rval); | 2950 | return (rval); |
@@ -3302,6 +3253,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha) | |||
3302 | 3253 | ||
3303 | if (vha->flags.online) { | 3254 | if (vha->flags.online) { |
3304 | vha->flags.online = 0; | 3255 | vha->flags.online = 0; |
3256 | ha->flags.chip_reset_done = 0; | ||
3305 | clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); | 3257 | clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); |
3306 | ha->qla_stats.total_isp_aborts++; | 3258 | ha->qla_stats.total_isp_aborts++; |
3307 | 3259 | ||
@@ -3451,6 +3403,7 @@ qla2x00_restart_isp(scsi_qla_host_t *vha) | |||
3451 | 3403 | ||
3452 | if (!status && !(status = qla2x00_init_rings(vha))) { | 3404 | if (!status && !(status = qla2x00_init_rings(vha))) { |
3453 | clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); | 3405 | clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); |
3406 | ha->flags.chip_reset_done = 1; | ||
3454 | /* Initialize the queues in use */ | 3407 | /* Initialize the queues in use */ |
3455 | qla25xx_init_queues(ha); | 3408 | qla25xx_init_queues(ha); |
3456 | 3409 | ||
@@ -4338,23 +4291,17 @@ qla81xx_nvram_config(scsi_qla_host_t *vha) | |||
4338 | 4291 | ||
4339 | /* Determine NVRAM starting address. */ | 4292 | /* Determine NVRAM starting address. */ |
4340 | ha->nvram_size = sizeof(struct nvram_81xx); | 4293 | ha->nvram_size = sizeof(struct nvram_81xx); |
4341 | ha->nvram_base = FA_NVRAM_FUNC0_ADDR; | ||
4342 | ha->vpd_size = FA_NVRAM_VPD_SIZE; | 4294 | ha->vpd_size = FA_NVRAM_VPD_SIZE; |
4343 | ha->vpd_base = FA_NVRAM_VPD0_ADDR; | ||
4344 | if (PCI_FUNC(ha->pdev->devfn) & 1) { | ||
4345 | ha->nvram_base = FA_NVRAM_FUNC1_ADDR; | ||
4346 | ha->vpd_base = FA_NVRAM_VPD1_ADDR; | ||
4347 | } | ||
4348 | 4295 | ||
4349 | /* Get VPD data into cache */ | 4296 | /* Get VPD data into cache */ |
4350 | ha->vpd = ha->nvram + VPD_OFFSET; | 4297 | ha->vpd = ha->nvram + VPD_OFFSET; |
4351 | ha->isp_ops->read_nvram(vha, (uint8_t *)ha->vpd, | 4298 | ha->isp_ops->read_optrom(vha, ha->vpd, ha->flt_region_vpd << 2, |
4352 | ha->nvram_base - FA_NVRAM_FUNC0_ADDR, FA_NVRAM_VPD_SIZE * 4); | 4299 | ha->vpd_size); |
4353 | 4300 | ||
4354 | /* Get NVRAM data into cache and calculate checksum. */ | 4301 | /* Get NVRAM data into cache and calculate checksum. */ |
4355 | dptr = (uint32_t *)nv; | 4302 | ha->isp_ops->read_optrom(vha, ha->nvram, ha->flt_region_nvram << 2, |
4356 | ha->isp_ops->read_nvram(vha, (uint8_t *)dptr, ha->nvram_base, | ||
4357 | ha->nvram_size); | 4303 | ha->nvram_size); |
4304 | dptr = (uint32_t *)nv; | ||
4358 | for (cnt = 0, chksum = 0; cnt < ha->nvram_size >> 2; cnt++) | 4305 | for (cnt = 0, chksum = 0; cnt < ha->nvram_size >> 2; cnt++) |
4359 | chksum += le32_to_cpu(*dptr++); | 4306 | chksum += le32_to_cpu(*dptr++); |
4360 | 4307 | ||
@@ -4452,6 +4399,9 @@ qla81xx_nvram_config(scsi_qla_host_t *vha) | |||
4452 | icb->enode_mac[5] = 0x06 + PCI_FUNC(ha->pdev->devfn); | 4399 | icb->enode_mac[5] = 0x06 + PCI_FUNC(ha->pdev->devfn); |
4453 | } | 4400 | } |
4454 | 4401 | ||
4402 | /* Use extended-initialization control block. */ | ||
4403 | memcpy(ha->ex_init_cb, &nv->ex_version, sizeof(*ha->ex_init_cb)); | ||
4404 | |||
4455 | /* | 4405 | /* |
4456 | * Setup driver NVRAM options. | 4406 | * Setup driver NVRAM options. |
4457 | */ | 4407 | */ |
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index 2258152b1f41..a8abbb95730d 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c | |||
@@ -776,7 +776,7 @@ qla24xx_start_scsi(srb_t *sp) | |||
776 | 776 | ||
777 | req_cnt = qla24xx_calc_iocbs(tot_dsds); | 777 | req_cnt = qla24xx_calc_iocbs(tot_dsds); |
778 | if (req->cnt < (req_cnt + 2)) { | 778 | if (req->cnt < (req_cnt + 2)) { |
779 | cnt = ha->isp_ops->rd_req_reg(ha, req->id); | 779 | cnt = RD_REG_DWORD_RELAXED(req->req_q_out); |
780 | 780 | ||
781 | if (req->ring_index < cnt) | 781 | if (req->ring_index < cnt) |
782 | req->cnt = cnt - req->ring_index; | 782 | req->cnt = cnt - req->ring_index; |
@@ -836,7 +836,8 @@ qla24xx_start_scsi(srb_t *sp) | |||
836 | sp->flags |= SRB_DMA_VALID; | 836 | sp->flags |= SRB_DMA_VALID; |
837 | 837 | ||
838 | /* Set chip new ring index. */ | 838 | /* Set chip new ring index. */ |
839 | ha->isp_ops->wrt_req_reg(ha, req->id, req->ring_index); | 839 | WRT_REG_DWORD(req->req_q_in, req->ring_index); |
840 | RD_REG_DWORD_RELAXED(&ha->iobase->isp24.hccr); | ||
840 | 841 | ||
841 | /* Manage unprocessed RIO/ZIO commands in response queue. */ | 842 | /* Manage unprocessed RIO/ZIO commands in response queue. */ |
842 | if (vha->flags.process_response_queue && | 843 | if (vha->flags.process_response_queue && |
@@ -854,35 +855,3 @@ queuing_error: | |||
854 | 855 | ||
855 | return QLA_FUNCTION_FAILED; | 856 | return QLA_FUNCTION_FAILED; |
856 | } | 857 | } |
857 | |||
858 | uint16_t | ||
859 | qla24xx_rd_req_reg(struct qla_hw_data *ha, uint16_t id) | ||
860 | { | ||
861 | device_reg_t __iomem *reg = (void *) ha->iobase; | ||
862 | return RD_REG_DWORD_RELAXED(®->isp24.req_q_out); | ||
863 | } | ||
864 | |||
865 | uint16_t | ||
866 | qla25xx_rd_req_reg(struct qla_hw_data *ha, uint16_t id) | ||
867 | { | ||
868 | device_reg_t __iomem *reg = (void *) ha->mqiobase + QLA_QUE_PAGE * id; | ||
869 | return RD_REG_DWORD_RELAXED(®->isp25mq.req_q_out); | ||
870 | } | ||
871 | |||
872 | void | ||
873 | qla24xx_wrt_req_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index) | ||
874 | { | ||
875 | device_reg_t __iomem *reg = (void *) ha->iobase; | ||
876 | WRT_REG_DWORD(®->isp24.req_q_in, index); | ||
877 | RD_REG_DWORD_RELAXED(®->isp24.req_q_in); | ||
878 | } | ||
879 | |||
880 | void | ||
881 | qla25xx_wrt_req_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index) | ||
882 | { | ||
883 | device_reg_t __iomem *reg = (void *) ha->mqiobase + QLA_QUE_PAGE * id; | ||
884 | struct device_reg_2xxx __iomem *ioreg = &ha->iobase->isp; | ||
885 | WRT_REG_DWORD(®->isp25mq.req_q_in, index); | ||
886 | RD_REG_DWORD(&ioreg->hccr); /* PCI posting */ | ||
887 | } | ||
888 | |||
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index f250e5b7897c..d04981848e56 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -852,9 +852,6 @@ qla2x00_process_completed_request(struct scsi_qla_host *vha, | |||
852 | /* Free outstanding command slot. */ | 852 | /* Free outstanding command slot. */ |
853 | req->outstanding_cmds[index] = NULL; | 853 | req->outstanding_cmds[index] = NULL; |
854 | 854 | ||
855 | CMD_COMPL_STATUS(sp->cmd) = 0L; | ||
856 | CMD_SCSI_STATUS(sp->cmd) = 0L; | ||
857 | |||
858 | /* Save ISP completion status */ | 855 | /* Save ISP completion status */ |
859 | sp->cmd->result = DID_OK << 16; | 856 | sp->cmd->result = DID_OK << 16; |
860 | 857 | ||
@@ -955,7 +952,6 @@ qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t sense_len) | |||
955 | if (sense_len >= SCSI_SENSE_BUFFERSIZE) | 952 | if (sense_len >= SCSI_SENSE_BUFFERSIZE) |
956 | sense_len = SCSI_SENSE_BUFFERSIZE; | 953 | sense_len = SCSI_SENSE_BUFFERSIZE; |
957 | 954 | ||
958 | CMD_ACTUAL_SNSLEN(cp) = sense_len; | ||
959 | sp->request_sense_length = sense_len; | 955 | sp->request_sense_length = sense_len; |
960 | sp->request_sense_ptr = cp->sense_buffer; | 956 | sp->request_sense_ptr = cp->sense_buffer; |
961 | if (sp->request_sense_length > 32) | 957 | if (sp->request_sense_length > 32) |
@@ -973,8 +969,7 @@ qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t sense_len) | |||
973 | cp->device->channel, cp->device->id, cp->device->lun, cp, | 969 | cp->device->channel, cp->device->id, cp->device->lun, cp, |
974 | cp->serial_number)); | 970 | cp->serial_number)); |
975 | if (sense_len) | 971 | if (sense_len) |
976 | DEBUG5(qla2x00_dump_buffer(cp->sense_buffer, | 972 | DEBUG5(qla2x00_dump_buffer(cp->sense_buffer, sense_len)); |
977 | CMD_ACTUAL_SNSLEN(cp))); | ||
978 | } | 973 | } |
979 | 974 | ||
980 | /** | 975 | /** |
@@ -1043,9 +1038,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) | |||
1043 | } | 1038 | } |
1044 | 1039 | ||
1045 | lscsi_status = scsi_status & STATUS_MASK; | 1040 | lscsi_status = scsi_status & STATUS_MASK; |
1046 | CMD_ENTRY_STATUS(cp) = sts->entry_status; | ||
1047 | CMD_COMPL_STATUS(cp) = comp_status; | ||
1048 | CMD_SCSI_STATUS(cp) = scsi_status; | ||
1049 | 1041 | ||
1050 | fcport = sp->fcport; | 1042 | fcport = sp->fcport; |
1051 | 1043 | ||
@@ -1104,7 +1096,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) | |||
1104 | if (scsi_status & (SS_RESIDUAL_UNDER | SS_RESIDUAL_OVER)) { | 1096 | if (scsi_status & (SS_RESIDUAL_UNDER | SS_RESIDUAL_OVER)) { |
1105 | resid = resid_len; | 1097 | resid = resid_len; |
1106 | scsi_set_resid(cp, resid); | 1098 | scsi_set_resid(cp, resid); |
1107 | CMD_RESID_LEN(cp) = resid; | ||
1108 | 1099 | ||
1109 | if (!lscsi_status && | 1100 | if (!lscsi_status && |
1110 | ((unsigned)(scsi_bufflen(cp) - resid) < | 1101 | ((unsigned)(scsi_bufflen(cp) - resid) < |
@@ -1160,7 +1151,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) | |||
1160 | 1151 | ||
1161 | if (scsi_status & SS_RESIDUAL_UNDER) { | 1152 | if (scsi_status & SS_RESIDUAL_UNDER) { |
1162 | scsi_set_resid(cp, resid); | 1153 | scsi_set_resid(cp, resid); |
1163 | CMD_RESID_LEN(cp) = resid; | ||
1164 | } else { | 1154 | } else { |
1165 | DEBUG2(printk(KERN_INFO | 1155 | DEBUG2(printk(KERN_INFO |
1166 | "scsi(%ld:%d:%d) UNDERRUN status detected " | 1156 | "scsi(%ld:%d:%d) UNDERRUN status detected " |
@@ -1499,7 +1489,6 @@ qla24xx_mbx_completion(scsi_qla_host_t *vha, uint16_t mb0) | |||
1499 | void | 1489 | void |
1500 | qla24xx_process_response_queue(struct rsp_que *rsp) | 1490 | qla24xx_process_response_queue(struct rsp_que *rsp) |
1501 | { | 1491 | { |
1502 | struct qla_hw_data *ha = rsp->hw; | ||
1503 | struct sts_entry_24xx *pkt; | 1492 | struct sts_entry_24xx *pkt; |
1504 | struct scsi_qla_host *vha; | 1493 | struct scsi_qla_host *vha; |
1505 | 1494 | ||
@@ -1553,7 +1542,7 @@ qla24xx_process_response_queue(struct rsp_que *rsp) | |||
1553 | } | 1542 | } |
1554 | 1543 | ||
1555 | /* Adjust ring index */ | 1544 | /* Adjust ring index */ |
1556 | ha->isp_ops->wrt_rsp_reg(ha, rsp->id, rsp->ring_index); | 1545 | WRT_REG_DWORD(rsp->rsp_q_out, rsp->ring_index); |
1557 | } | 1546 | } |
1558 | 1547 | ||
1559 | static void | 1548 | static void |
@@ -2029,7 +2018,7 @@ skip_msix: | |||
2029 | skip_msi: | 2018 | skip_msi: |
2030 | 2019 | ||
2031 | ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler, | 2020 | ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler, |
2032 | IRQF_DISABLED|IRQF_SHARED, QLA2XXX_DRIVER_NAME, rsp); | 2021 | IRQF_SHARED, QLA2XXX_DRIVER_NAME, rsp); |
2033 | if (ret) { | 2022 | if (ret) { |
2034 | qla_printk(KERN_WARNING, ha, | 2023 | qla_printk(KERN_WARNING, ha, |
2035 | "Failed to reserve interrupt %d already in use.\n", | 2024 | "Failed to reserve interrupt %d already in use.\n", |
@@ -2117,18 +2106,3 @@ int qla25xx_request_irq(struct rsp_que *rsp) | |||
2117 | msix->rsp = rsp; | 2106 | msix->rsp = rsp; |
2118 | return ret; | 2107 | return ret; |
2119 | } | 2108 | } |
2120 | |||
2121 | void | ||
2122 | qla25xx_wrt_rsp_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index) | ||
2123 | { | ||
2124 | device_reg_t __iomem *reg = (void *) ha->mqiobase + QLA_QUE_PAGE * id; | ||
2125 | WRT_REG_DWORD(®->isp25mq.rsp_q_out, index); | ||
2126 | } | ||
2127 | |||
2128 | void | ||
2129 | qla24xx_wrt_rsp_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index) | ||
2130 | { | ||
2131 | device_reg_t __iomem *reg = (void *) ha->iobase; | ||
2132 | WRT_REG_DWORD(®->isp24.rsp_q_out, index); | ||
2133 | } | ||
2134 | |||
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 4aab7acf7525..e67c1660bf46 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
@@ -45,6 +45,9 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp) | |||
45 | struct qla_hw_data *ha = vha->hw; | 45 | struct qla_hw_data *ha = vha->hw; |
46 | scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev); | 46 | scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev); |
47 | 47 | ||
48 | if (ha->pdev->error_state > pci_channel_io_frozen) | ||
49 | return QLA_FUNCTION_TIMEOUT; | ||
50 | |||
48 | reg = ha->iobase; | 51 | reg = ha->iobase; |
49 | io_lock_on = base_vha->flags.init_done; | 52 | io_lock_on = base_vha->flags.init_done; |
50 | 53 | ||
@@ -408,7 +411,7 @@ qla2x00_execute_fw(scsi_qla_host_t *vha, uint32_t risc_addr) | |||
408 | void | 411 | void |
409 | qla2x00_get_fw_version(scsi_qla_host_t *vha, uint16_t *major, uint16_t *minor, | 412 | qla2x00_get_fw_version(scsi_qla_host_t *vha, uint16_t *major, uint16_t *minor, |
410 | uint16_t *subminor, uint16_t *attributes, uint32_t *memory, uint8_t *mpi, | 413 | uint16_t *subminor, uint16_t *attributes, uint32_t *memory, uint8_t *mpi, |
411 | uint32_t *mpi_caps) | 414 | uint32_t *mpi_caps, uint8_t *phy) |
412 | { | 415 | { |
413 | int rval; | 416 | int rval; |
414 | mbx_cmd_t mc; | 417 | mbx_cmd_t mc; |
@@ -420,7 +423,7 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha, uint16_t *major, uint16_t *minor, | |||
420 | mcp->out_mb = MBX_0; | 423 | mcp->out_mb = MBX_0; |
421 | mcp->in_mb = MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; | 424 | mcp->in_mb = MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; |
422 | if (IS_QLA81XX(vha->hw)) | 425 | if (IS_QLA81XX(vha->hw)) |
423 | mcp->in_mb |= MBX_13|MBX_12|MBX_11|MBX_10; | 426 | mcp->in_mb |= MBX_13|MBX_12|MBX_11|MBX_10|MBX_9|MBX_8; |
424 | mcp->flags = 0; | 427 | mcp->flags = 0; |
425 | mcp->tov = MBX_TOV_SECONDS; | 428 | mcp->tov = MBX_TOV_SECONDS; |
426 | rval = qla2x00_mailbox_command(vha, mcp); | 429 | rval = qla2x00_mailbox_command(vha, mcp); |
@@ -435,11 +438,13 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha, uint16_t *major, uint16_t *minor, | |||
435 | else | 438 | else |
436 | *memory = (mcp->mb[5] << 16) | mcp->mb[4]; | 439 | *memory = (mcp->mb[5] << 16) | mcp->mb[4]; |
437 | if (IS_QLA81XX(vha->hw)) { | 440 | if (IS_QLA81XX(vha->hw)) { |
438 | mpi[0] = mcp->mb[10] >> 8; | 441 | mpi[0] = mcp->mb[10] & 0xff; |
439 | mpi[1] = mcp->mb[10] & 0xff; | 442 | mpi[1] = mcp->mb[11] >> 8; |
440 | mpi[2] = mcp->mb[11] >> 8; | 443 | mpi[2] = mcp->mb[11] & 0xff; |
441 | mpi[3] = mcp->mb[11] & 0xff; | ||
442 | *mpi_caps = (mcp->mb[12] << 16) | mcp->mb[13]; | 444 | *mpi_caps = (mcp->mb[12] << 16) | mcp->mb[13]; |
445 | phy[0] = mcp->mb[8] & 0xff; | ||
446 | phy[1] = mcp->mb[9] >> 8; | ||
447 | phy[2] = mcp->mb[9] & 0xff; | ||
443 | } | 448 | } |
444 | 449 | ||
445 | if (rval != QLA_SUCCESS) { | 450 | if (rval != QLA_SUCCESS) { |
@@ -1043,14 +1048,22 @@ qla2x00_init_firmware(scsi_qla_host_t *vha, uint16_t size) | |||
1043 | else | 1048 | else |
1044 | mcp->mb[0] = MBC_INITIALIZE_FIRMWARE; | 1049 | mcp->mb[0] = MBC_INITIALIZE_FIRMWARE; |
1045 | 1050 | ||
1051 | mcp->mb[1] = 0; | ||
1046 | mcp->mb[2] = MSW(ha->init_cb_dma); | 1052 | mcp->mb[2] = MSW(ha->init_cb_dma); |
1047 | mcp->mb[3] = LSW(ha->init_cb_dma); | 1053 | mcp->mb[3] = LSW(ha->init_cb_dma); |
1048 | mcp->mb[4] = 0; | ||
1049 | mcp->mb[5] = 0; | ||
1050 | mcp->mb[6] = MSW(MSD(ha->init_cb_dma)); | 1054 | mcp->mb[6] = MSW(MSD(ha->init_cb_dma)); |
1051 | mcp->mb[7] = LSW(MSD(ha->init_cb_dma)); | 1055 | mcp->mb[7] = LSW(MSD(ha->init_cb_dma)); |
1052 | mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0; | 1056 | mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; |
1053 | mcp->in_mb = MBX_5|MBX_4|MBX_0; | 1057 | if (IS_QLA81XX(ha) && ha->ex_init_cb->ex_version) { |
1058 | mcp->mb[1] = BIT_0; | ||
1059 | mcp->mb[10] = MSW(ha->ex_init_cb_dma); | ||
1060 | mcp->mb[11] = LSW(ha->ex_init_cb_dma); | ||
1061 | mcp->mb[12] = MSW(MSD(ha->ex_init_cb_dma)); | ||
1062 | mcp->mb[13] = LSW(MSD(ha->ex_init_cb_dma)); | ||
1063 | mcp->mb[14] = sizeof(*ha->ex_init_cb); | ||
1064 | mcp->out_mb |= MBX_14|MBX_13|MBX_12|MBX_11|MBX_10; | ||
1065 | } | ||
1066 | mcp->in_mb = MBX_0; | ||
1054 | mcp->buf_size = size; | 1067 | mcp->buf_size = size; |
1055 | mcp->flags = MBX_DMA_OUT; | 1068 | mcp->flags = MBX_DMA_OUT; |
1056 | mcp->tov = MBX_TOV_SECONDS; | 1069 | mcp->tov = MBX_TOV_SECONDS; |
@@ -1187,10 +1200,6 @@ qla2x00_get_port_database(scsi_qla_host_t *vha, fc_port_t *fcport, uint8_t opt) | |||
1187 | fcport->d_id.b.al_pa = pd->port_id[2]; | 1200 | fcport->d_id.b.al_pa = pd->port_id[2]; |
1188 | fcport->d_id.b.rsvd_1 = 0; | 1201 | fcport->d_id.b.rsvd_1 = 0; |
1189 | 1202 | ||
1190 | /* Check for device require authentication. */ | ||
1191 | pd->common_features & BIT_5 ? (fcport->flags |= FCF_AUTH_REQ) : | ||
1192 | (fcport->flags &= ~FCF_AUTH_REQ); | ||
1193 | |||
1194 | /* If not target must be initiator or unknown type. */ | 1203 | /* If not target must be initiator or unknown type. */ |
1195 | if ((pd->prli_svc_param_word_3[0] & BIT_4) == 0) | 1204 | if ((pd->prli_svc_param_word_3[0] & BIT_4) == 0) |
1196 | fcport->port_type = FCT_INITIATOR; | 1205 | fcport->port_type = FCT_INITIATOR; |
@@ -3218,3 +3227,204 @@ qla81xx_idc_ack(scsi_qla_host_t *vha, uint16_t *mb) | |||
3218 | 3227 | ||
3219 | return rval; | 3228 | return rval; |
3220 | } | 3229 | } |
3230 | |||
3231 | int | ||
3232 | qla81xx_fac_get_sector_size(scsi_qla_host_t *vha, uint32_t *sector_size) | ||
3233 | { | ||
3234 | int rval; | ||
3235 | mbx_cmd_t mc; | ||
3236 | mbx_cmd_t *mcp = &mc; | ||
3237 | |||
3238 | if (!IS_QLA81XX(vha->hw)) | ||
3239 | return QLA_FUNCTION_FAILED; | ||
3240 | |||
3241 | DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no)); | ||
3242 | |||
3243 | mcp->mb[0] = MBC_FLASH_ACCESS_CTRL; | ||
3244 | mcp->mb[1] = FAC_OPT_CMD_GET_SECTOR_SIZE; | ||
3245 | mcp->out_mb = MBX_1|MBX_0; | ||
3246 | mcp->in_mb = MBX_1|MBX_0; | ||
3247 | mcp->tov = MBX_TOV_SECONDS; | ||
3248 | mcp->flags = 0; | ||
3249 | rval = qla2x00_mailbox_command(vha, mcp); | ||
3250 | |||
3251 | if (rval != QLA_SUCCESS) { | ||
3252 | DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x.\n", | ||
3253 | __func__, vha->host_no, rval, mcp->mb[0], mcp->mb[1])); | ||
3254 | } else { | ||
3255 | DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no)); | ||
3256 | *sector_size = mcp->mb[1]; | ||
3257 | } | ||
3258 | |||
3259 | return rval; | ||
3260 | } | ||
3261 | |||
3262 | int | ||
3263 | qla81xx_fac_do_write_enable(scsi_qla_host_t *vha, int enable) | ||
3264 | { | ||
3265 | int rval; | ||
3266 | mbx_cmd_t mc; | ||
3267 | mbx_cmd_t *mcp = &mc; | ||
3268 | |||
3269 | if (!IS_QLA81XX(vha->hw)) | ||
3270 | return QLA_FUNCTION_FAILED; | ||
3271 | |||
3272 | DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no)); | ||
3273 | |||
3274 | mcp->mb[0] = MBC_FLASH_ACCESS_CTRL; | ||
3275 | mcp->mb[1] = enable ? FAC_OPT_CMD_WRITE_ENABLE : | ||
3276 | FAC_OPT_CMD_WRITE_PROTECT; | ||
3277 | mcp->out_mb = MBX_1|MBX_0; | ||
3278 | mcp->in_mb = MBX_1|MBX_0; | ||
3279 | mcp->tov = MBX_TOV_SECONDS; | ||
3280 | mcp->flags = 0; | ||
3281 | rval = qla2x00_mailbox_command(vha, mcp); | ||
3282 | |||
3283 | if (rval != QLA_SUCCESS) { | ||
3284 | DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x.\n", | ||
3285 | __func__, vha->host_no, rval, mcp->mb[0], mcp->mb[1])); | ||
3286 | } else { | ||
3287 | DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no)); | ||
3288 | } | ||
3289 | |||
3290 | return rval; | ||
3291 | } | ||
3292 | |||
3293 | int | ||
3294 | qla81xx_fac_erase_sector(scsi_qla_host_t *vha, uint32_t start, uint32_t finish) | ||
3295 | { | ||
3296 | int rval; | ||
3297 | mbx_cmd_t mc; | ||
3298 | mbx_cmd_t *mcp = &mc; | ||
3299 | |||
3300 | if (!IS_QLA81XX(vha->hw)) | ||
3301 | return QLA_FUNCTION_FAILED; | ||
3302 | |||
3303 | DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no)); | ||
3304 | |||
3305 | mcp->mb[0] = MBC_FLASH_ACCESS_CTRL; | ||
3306 | mcp->mb[1] = FAC_OPT_CMD_ERASE_SECTOR; | ||
3307 | mcp->mb[2] = LSW(start); | ||
3308 | mcp->mb[3] = MSW(start); | ||
3309 | mcp->mb[4] = LSW(finish); | ||
3310 | mcp->mb[5] = MSW(finish); | ||
3311 | mcp->out_mb = MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; | ||
3312 | mcp->in_mb = MBX_2|MBX_1|MBX_0; | ||
3313 | mcp->tov = MBX_TOV_SECONDS; | ||
3314 | mcp->flags = 0; | ||
3315 | rval = qla2x00_mailbox_command(vha, mcp); | ||
3316 | |||
3317 | if (rval != QLA_SUCCESS) { | ||
3318 | DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x " | ||
3319 | "mb[2]=%x.\n", __func__, vha->host_no, rval, mcp->mb[0], | ||
3320 | mcp->mb[1], mcp->mb[2])); | ||
3321 | } else { | ||
3322 | DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no)); | ||
3323 | } | ||
3324 | |||
3325 | return rval; | ||
3326 | } | ||
3327 | |||
3328 | int | ||
3329 | qla81xx_restart_mpi_firmware(scsi_qla_host_t *vha) | ||
3330 | { | ||
3331 | int rval = 0; | ||
3332 | mbx_cmd_t mc; | ||
3333 | mbx_cmd_t *mcp = &mc; | ||
3334 | |||
3335 | DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no)); | ||
3336 | |||
3337 | mcp->mb[0] = MBC_RESTART_MPI_FW; | ||
3338 | mcp->out_mb = MBX_0; | ||
3339 | mcp->in_mb = MBX_0|MBX_1; | ||
3340 | mcp->tov = MBX_TOV_SECONDS; | ||
3341 | mcp->flags = 0; | ||
3342 | rval = qla2x00_mailbox_command(vha, mcp); | ||
3343 | |||
3344 | if (rval != QLA_SUCCESS) { | ||
3345 | DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=0x%x mb[1]=0x%x.\n", | ||
3346 | __func__, vha->host_no, rval, mcp->mb[0], mcp->mb[1])); | ||
3347 | } else { | ||
3348 | DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no)); | ||
3349 | } | ||
3350 | |||
3351 | return rval; | ||
3352 | } | ||
3353 | |||
3354 | int | ||
3355 | qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr, | ||
3356 | dma_addr_t sfp_dma, uint8_t *sfp, uint16_t len, uint16_t opt) | ||
3357 | { | ||
3358 | int rval; | ||
3359 | mbx_cmd_t mc; | ||
3360 | mbx_cmd_t *mcp = &mc; | ||
3361 | |||
3362 | DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no)); | ||
3363 | |||
3364 | mcp->mb[0] = MBC_READ_SFP; | ||
3365 | mcp->mb[1] = dev; | ||
3366 | mcp->mb[2] = MSW(sfp_dma); | ||
3367 | mcp->mb[3] = LSW(sfp_dma); | ||
3368 | mcp->mb[6] = MSW(MSD(sfp_dma)); | ||
3369 | mcp->mb[7] = LSW(MSD(sfp_dma)); | ||
3370 | mcp->mb[8] = len; | ||
3371 | mcp->mb[9] = adr; | ||
3372 | mcp->mb[10] = opt; | ||
3373 | mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; | ||
3374 | mcp->in_mb = MBX_0; | ||
3375 | mcp->tov = MBX_TOV_SECONDS; | ||
3376 | mcp->flags = 0; | ||
3377 | rval = qla2x00_mailbox_command(vha, mcp); | ||
3378 | |||
3379 | if (opt & BIT_0) | ||
3380 | if (sfp) | ||
3381 | *sfp = mcp->mb[8]; | ||
3382 | |||
3383 | if (rval != QLA_SUCCESS) { | ||
3384 | DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__, | ||
3385 | vha->host_no, rval, mcp->mb[0])); | ||
3386 | } else { | ||
3387 | DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no)); | ||
3388 | } | ||
3389 | |||
3390 | return rval; | ||
3391 | } | ||
3392 | |||
3393 | int | ||
3394 | qla2x00_write_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr, | ||
3395 | dma_addr_t sfp_dma, uint8_t *sfp, uint16_t len, uint16_t opt) | ||
3396 | { | ||
3397 | int rval; | ||
3398 | mbx_cmd_t mc; | ||
3399 | mbx_cmd_t *mcp = &mc; | ||
3400 | |||
3401 | DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no)); | ||
3402 | |||
3403 | if (opt & BIT_0) | ||
3404 | if (sfp) | ||
3405 | len = *sfp; | ||
3406 | |||
3407 | mcp->mb[0] = MBC_WRITE_SFP; | ||
3408 | mcp->mb[1] = dev; | ||
3409 | mcp->mb[2] = MSW(sfp_dma); | ||
3410 | mcp->mb[3] = LSW(sfp_dma); | ||
3411 | mcp->mb[6] = MSW(MSD(sfp_dma)); | ||
3412 | mcp->mb[7] = LSW(MSD(sfp_dma)); | ||
3413 | mcp->mb[8] = len; | ||
3414 | mcp->mb[9] = adr; | ||
3415 | mcp->mb[10] = opt; | ||
3416 | mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; | ||
3417 | mcp->in_mb = MBX_0; | ||
3418 | mcp->tov = MBX_TOV_SECONDS; | ||
3419 | mcp->flags = 0; | ||
3420 | rval = qla2x00_mailbox_command(vha, mcp); | ||
3421 | |||
3422 | if (rval != QLA_SUCCESS) { | ||
3423 | DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__, | ||
3424 | vha->host_no, rval, mcp->mb[0])); | ||
3425 | } else { | ||
3426 | DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no)); | ||
3427 | } | ||
3428 | |||
3429 | return rval; | ||
3430 | } | ||
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index 785c61279e6e..51716c7e3008 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c | |||
@@ -359,7 +359,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport) | |||
359 | scsi_qla_host_t *base_vha = shost_priv(fc_vport->shost); | 359 | scsi_qla_host_t *base_vha = shost_priv(fc_vport->shost); |
360 | struct qla_hw_data *ha = base_vha->hw; | 360 | struct qla_hw_data *ha = base_vha->hw; |
361 | scsi_qla_host_t *vha; | 361 | scsi_qla_host_t *vha; |
362 | struct scsi_host_template *sht = &qla24xx_driver_template; | 362 | struct scsi_host_template *sht = &qla2xxx_driver_template; |
363 | struct Scsi_Host *host; | 363 | struct Scsi_Host *host; |
364 | 364 | ||
365 | vha = qla2x00_create_host(sht, ha); | 365 | vha = qla2x00_create_host(sht, ha); |
@@ -584,6 +584,7 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options, | |||
584 | struct req_que *req = NULL; | 584 | struct req_que *req = NULL; |
585 | struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); | 585 | struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); |
586 | uint16_t que_id = 0; | 586 | uint16_t que_id = 0; |
587 | device_reg_t __iomem *reg; | ||
587 | 588 | ||
588 | req = kzalloc(sizeof(struct req_que), GFP_KERNEL); | 589 | req = kzalloc(sizeof(struct req_que), GFP_KERNEL); |
589 | if (req == NULL) { | 590 | if (req == NULL) { |
@@ -631,6 +632,9 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options, | |||
631 | req->ring_index = 0; | 632 | req->ring_index = 0; |
632 | req->cnt = req->length; | 633 | req->cnt = req->length; |
633 | req->id = que_id; | 634 | req->id = que_id; |
635 | reg = ISP_QUE_REG(ha, que_id); | ||
636 | req->req_q_in = ®->isp25mq.req_q_in; | ||
637 | req->req_q_out = ®->isp25mq.req_q_out; | ||
634 | req->max_q_depth = ha->req_q_map[0]->max_q_depth; | 638 | req->max_q_depth = ha->req_q_map[0]->max_q_depth; |
635 | mutex_unlock(&ha->vport_lock); | 639 | mutex_unlock(&ha->vport_lock); |
636 | 640 | ||
@@ -658,7 +662,8 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options, | |||
658 | int ret = 0; | 662 | int ret = 0; |
659 | struct rsp_que *rsp = NULL; | 663 | struct rsp_que *rsp = NULL; |
660 | struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); | 664 | struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); |
661 | uint16_t que_id = 0;; | 665 | uint16_t que_id = 0; |
666 | device_reg_t __iomem *reg; | ||
662 | 667 | ||
663 | rsp = kzalloc(sizeof(struct rsp_que), GFP_KERNEL); | 668 | rsp = kzalloc(sizeof(struct rsp_que), GFP_KERNEL); |
664 | if (rsp == NULL) { | 669 | if (rsp == NULL) { |
@@ -706,6 +711,9 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options, | |||
706 | rsp->ring_ptr = rsp->ring; | 711 | rsp->ring_ptr = rsp->ring; |
707 | rsp->ring_index = 0; | 712 | rsp->ring_index = 0; |
708 | rsp->id = que_id; | 713 | rsp->id = que_id; |
714 | reg = ISP_QUE_REG(ha, que_id); | ||
715 | rsp->rsp_q_in = ®->isp25mq.rsp_q_in; | ||
716 | rsp->rsp_q_out = ®->isp25mq.rsp_q_out; | ||
709 | mutex_unlock(&ha->vport_lock); | 717 | mutex_unlock(&ha->vport_lock); |
710 | 718 | ||
711 | ret = qla25xx_request_irq(rsp); | 719 | ret = qla25xx_request_irq(rsp); |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 3ddfa889e949..efe29924e058 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -104,9 +104,7 @@ static int qla2xxx_slave_alloc(struct scsi_device *); | |||
104 | static int qla2xxx_scan_finished(struct Scsi_Host *, unsigned long time); | 104 | static int qla2xxx_scan_finished(struct Scsi_Host *, unsigned long time); |
105 | static void qla2xxx_scan_start(struct Scsi_Host *); | 105 | static void qla2xxx_scan_start(struct Scsi_Host *); |
106 | static void qla2xxx_slave_destroy(struct scsi_device *); | 106 | static void qla2xxx_slave_destroy(struct scsi_device *); |
107 | static int qla2x00_queuecommand(struct scsi_cmnd *cmd, | 107 | static int qla2xxx_queuecommand(struct scsi_cmnd *cmd, |
108 | void (*fn)(struct scsi_cmnd *)); | ||
109 | static int qla24xx_queuecommand(struct scsi_cmnd *cmd, | ||
110 | void (*fn)(struct scsi_cmnd *)); | 108 | void (*fn)(struct scsi_cmnd *)); |
111 | static int qla2xxx_eh_abort(struct scsi_cmnd *); | 109 | static int qla2xxx_eh_abort(struct scsi_cmnd *); |
112 | static int qla2xxx_eh_device_reset(struct scsi_cmnd *); | 110 | static int qla2xxx_eh_device_reset(struct scsi_cmnd *); |
@@ -117,42 +115,10 @@ static int qla2xxx_eh_host_reset(struct scsi_cmnd *); | |||
117 | static int qla2x00_change_queue_depth(struct scsi_device *, int); | 115 | static int qla2x00_change_queue_depth(struct scsi_device *, int); |
118 | static int qla2x00_change_queue_type(struct scsi_device *, int); | 116 | static int qla2x00_change_queue_type(struct scsi_device *, int); |
119 | 117 | ||
120 | static struct scsi_host_template qla2x00_driver_template = { | 118 | struct scsi_host_template qla2xxx_driver_template = { |
121 | .module = THIS_MODULE, | 119 | .module = THIS_MODULE, |
122 | .name = QLA2XXX_DRIVER_NAME, | 120 | .name = QLA2XXX_DRIVER_NAME, |
123 | .queuecommand = qla2x00_queuecommand, | 121 | .queuecommand = qla2xxx_queuecommand, |
124 | |||
125 | .eh_abort_handler = qla2xxx_eh_abort, | ||
126 | .eh_device_reset_handler = qla2xxx_eh_device_reset, | ||
127 | .eh_target_reset_handler = qla2xxx_eh_target_reset, | ||
128 | .eh_bus_reset_handler = qla2xxx_eh_bus_reset, | ||
129 | .eh_host_reset_handler = qla2xxx_eh_host_reset, | ||
130 | |||
131 | .slave_configure = qla2xxx_slave_configure, | ||
132 | |||
133 | .slave_alloc = qla2xxx_slave_alloc, | ||
134 | .slave_destroy = qla2xxx_slave_destroy, | ||
135 | .scan_finished = qla2xxx_scan_finished, | ||
136 | .scan_start = qla2xxx_scan_start, | ||
137 | .change_queue_depth = qla2x00_change_queue_depth, | ||
138 | .change_queue_type = qla2x00_change_queue_type, | ||
139 | .this_id = -1, | ||
140 | .cmd_per_lun = 3, | ||
141 | .use_clustering = ENABLE_CLUSTERING, | ||
142 | .sg_tablesize = SG_ALL, | ||
143 | |||
144 | /* | ||
145 | * The RISC allows for each command to transfer (2^32-1) bytes of data, | ||
146 | * which equates to 0x800000 sectors. | ||
147 | */ | ||
148 | .max_sectors = 0xFFFF, | ||
149 | .shost_attrs = qla2x00_host_attrs, | ||
150 | }; | ||
151 | |||
152 | struct scsi_host_template qla24xx_driver_template = { | ||
153 | .module = THIS_MODULE, | ||
154 | .name = QLA2XXX_DRIVER_NAME, | ||
155 | .queuecommand = qla24xx_queuecommand, | ||
156 | 122 | ||
157 | .eh_abort_handler = qla2xxx_eh_abort, | 123 | .eh_abort_handler = qla2xxx_eh_abort, |
158 | .eh_device_reset_handler = qla2xxx_eh_device_reset, | 124 | .eh_device_reset_handler = qla2xxx_eh_device_reset, |
@@ -430,73 +396,7 @@ qla2x00_get_new_sp(scsi_qla_host_t *vha, fc_port_t *fcport, | |||
430 | } | 396 | } |
431 | 397 | ||
432 | static int | 398 | static int |
433 | qla2x00_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) | 399 | qla2xxx_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) |
434 | { | ||
435 | scsi_qla_host_t *vha = shost_priv(cmd->device->host); | ||
436 | fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata; | ||
437 | struct fc_rport *rport = starget_to_rport(scsi_target(cmd->device)); | ||
438 | struct qla_hw_data *ha = vha->hw; | ||
439 | srb_t *sp; | ||
440 | int rval; | ||
441 | |||
442 | if (unlikely(pci_channel_offline(ha->pdev))) { | ||
443 | cmd->result = DID_REQUEUE << 16; | ||
444 | goto qc_fail_command; | ||
445 | } | ||
446 | |||
447 | rval = fc_remote_port_chkready(rport); | ||
448 | if (rval) { | ||
449 | cmd->result = rval; | ||
450 | goto qc_fail_command; | ||
451 | } | ||
452 | |||
453 | /* Close window on fcport/rport state-transitioning. */ | ||
454 | if (fcport->drport) | ||
455 | goto qc_target_busy; | ||
456 | |||
457 | if (atomic_read(&fcport->state) != FCS_ONLINE) { | ||
458 | if (atomic_read(&fcport->state) == FCS_DEVICE_DEAD || | ||
459 | atomic_read(&vha->loop_state) == LOOP_DEAD) { | ||
460 | cmd->result = DID_NO_CONNECT << 16; | ||
461 | goto qc_fail_command; | ||
462 | } | ||
463 | goto qc_target_busy; | ||
464 | } | ||
465 | |||
466 | spin_unlock_irq(vha->host->host_lock); | ||
467 | |||
468 | sp = qla2x00_get_new_sp(vha, fcport, cmd, done); | ||
469 | if (!sp) | ||
470 | goto qc_host_busy_lock; | ||
471 | |||
472 | rval = ha->isp_ops->start_scsi(sp); | ||
473 | if (rval != QLA_SUCCESS) | ||
474 | goto qc_host_busy_free_sp; | ||
475 | |||
476 | spin_lock_irq(vha->host->host_lock); | ||
477 | |||
478 | return 0; | ||
479 | |||
480 | qc_host_busy_free_sp: | ||
481 | qla2x00_sp_free_dma(sp); | ||
482 | mempool_free(sp, ha->srb_mempool); | ||
483 | |||
484 | qc_host_busy_lock: | ||
485 | spin_lock_irq(vha->host->host_lock); | ||
486 | return SCSI_MLQUEUE_HOST_BUSY; | ||
487 | |||
488 | qc_target_busy: | ||
489 | return SCSI_MLQUEUE_TARGET_BUSY; | ||
490 | |||
491 | qc_fail_command: | ||
492 | done(cmd); | ||
493 | |||
494 | return 0; | ||
495 | } | ||
496 | |||
497 | |||
498 | static int | ||
499 | qla24xx_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) | ||
500 | { | 400 | { |
501 | scsi_qla_host_t *vha = shost_priv(cmd->device->host); | 401 | scsi_qla_host_t *vha = shost_priv(cmd->device->host); |
502 | fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata; | 402 | fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata; |
@@ -507,7 +407,10 @@ qla24xx_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) | |||
507 | int rval; | 407 | int rval; |
508 | 408 | ||
509 | if (unlikely(pci_channel_offline(ha->pdev))) { | 409 | if (unlikely(pci_channel_offline(ha->pdev))) { |
510 | cmd->result = DID_REQUEUE << 16; | 410 | if (ha->pdev->error_state == pci_channel_io_frozen) |
411 | cmd->result = DID_REQUEUE << 16; | ||
412 | else | ||
413 | cmd->result = DID_NO_CONNECT << 16; | ||
511 | goto qc24_fail_command; | 414 | goto qc24_fail_command; |
512 | } | 415 | } |
513 | 416 | ||
@@ -635,6 +538,34 @@ qla2x00_wait_for_hba_online(scsi_qla_host_t *vha) | |||
635 | return (return_status); | 538 | return (return_status); |
636 | } | 539 | } |
637 | 540 | ||
541 | int | ||
542 | qla2x00_wait_for_chip_reset(scsi_qla_host_t *vha) | ||
543 | { | ||
544 | int return_status; | ||
545 | unsigned long wait_reset; | ||
546 | struct qla_hw_data *ha = vha->hw; | ||
547 | scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev); | ||
548 | |||
549 | wait_reset = jiffies + (MAX_LOOP_TIMEOUT * HZ); | ||
550 | while (((test_bit(ISP_ABORT_NEEDED, &base_vha->dpc_flags)) || | ||
551 | test_bit(ABORT_ISP_ACTIVE, &base_vha->dpc_flags) || | ||
552 | test_bit(ISP_ABORT_RETRY, &base_vha->dpc_flags) || | ||
553 | ha->dpc_active) && time_before(jiffies, wait_reset)) { | ||
554 | |||
555 | msleep(1000); | ||
556 | |||
557 | if (!test_bit(ISP_ABORT_NEEDED, &base_vha->dpc_flags) && | ||
558 | ha->flags.chip_reset_done) | ||
559 | break; | ||
560 | } | ||
561 | if (ha->flags.chip_reset_done) | ||
562 | return_status = QLA_SUCCESS; | ||
563 | else | ||
564 | return_status = QLA_FUNCTION_FAILED; | ||
565 | |||
566 | return return_status; | ||
567 | } | ||
568 | |||
638 | /* | 569 | /* |
639 | * qla2x00_wait_for_loop_ready | 570 | * qla2x00_wait_for_loop_ready |
640 | * Wait for MAX_LOOP_TIMEOUT(5 min) value for loop | 571 | * Wait for MAX_LOOP_TIMEOUT(5 min) value for loop |
@@ -1163,7 +1094,7 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) | |||
1163 | continue; | 1094 | continue; |
1164 | for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { | 1095 | for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { |
1165 | sp = req->outstanding_cmds[cnt]; | 1096 | sp = req->outstanding_cmds[cnt]; |
1166 | if (sp && sp->fcport->vha == vha) { | 1097 | if (sp) { |
1167 | req->outstanding_cmds[cnt] = NULL; | 1098 | req->outstanding_cmds[cnt] = NULL; |
1168 | sp->cmd->result = res; | 1099 | sp->cmd->result = res; |
1169 | qla2x00_sp_compl(ha, sp); | 1100 | qla2x00_sp_compl(ha, sp); |
@@ -1351,9 +1282,6 @@ static struct isp_operations qla2100_isp_ops = { | |||
1351 | .write_optrom = qla2x00_write_optrom_data, | 1282 | .write_optrom = qla2x00_write_optrom_data, |
1352 | .get_flash_version = qla2x00_get_flash_version, | 1283 | .get_flash_version = qla2x00_get_flash_version, |
1353 | .start_scsi = qla2x00_start_scsi, | 1284 | .start_scsi = qla2x00_start_scsi, |
1354 | .wrt_req_reg = NULL, | ||
1355 | .wrt_rsp_reg = NULL, | ||
1356 | .rd_req_reg = NULL, | ||
1357 | }; | 1285 | }; |
1358 | 1286 | ||
1359 | static struct isp_operations qla2300_isp_ops = { | 1287 | static struct isp_operations qla2300_isp_ops = { |
@@ -1389,9 +1317,6 @@ static struct isp_operations qla2300_isp_ops = { | |||
1389 | .write_optrom = qla2x00_write_optrom_data, | 1317 | .write_optrom = qla2x00_write_optrom_data, |
1390 | .get_flash_version = qla2x00_get_flash_version, | 1318 | .get_flash_version = qla2x00_get_flash_version, |
1391 | .start_scsi = qla2x00_start_scsi, | 1319 | .start_scsi = qla2x00_start_scsi, |
1392 | .wrt_req_reg = NULL, | ||
1393 | .wrt_rsp_reg = NULL, | ||
1394 | .rd_req_reg = NULL, | ||
1395 | }; | 1320 | }; |
1396 | 1321 | ||
1397 | static struct isp_operations qla24xx_isp_ops = { | 1322 | static struct isp_operations qla24xx_isp_ops = { |
@@ -1427,9 +1352,6 @@ static struct isp_operations qla24xx_isp_ops = { | |||
1427 | .write_optrom = qla24xx_write_optrom_data, | 1352 | .write_optrom = qla24xx_write_optrom_data, |
1428 | .get_flash_version = qla24xx_get_flash_version, | 1353 | .get_flash_version = qla24xx_get_flash_version, |
1429 | .start_scsi = qla24xx_start_scsi, | 1354 | .start_scsi = qla24xx_start_scsi, |
1430 | .wrt_req_reg = qla24xx_wrt_req_reg, | ||
1431 | .wrt_rsp_reg = qla24xx_wrt_rsp_reg, | ||
1432 | .rd_req_reg = qla24xx_rd_req_reg, | ||
1433 | }; | 1355 | }; |
1434 | 1356 | ||
1435 | static struct isp_operations qla25xx_isp_ops = { | 1357 | static struct isp_operations qla25xx_isp_ops = { |
@@ -1465,9 +1387,6 @@ static struct isp_operations qla25xx_isp_ops = { | |||
1465 | .write_optrom = qla24xx_write_optrom_data, | 1387 | .write_optrom = qla24xx_write_optrom_data, |
1466 | .get_flash_version = qla24xx_get_flash_version, | 1388 | .get_flash_version = qla24xx_get_flash_version, |
1467 | .start_scsi = qla24xx_start_scsi, | 1389 | .start_scsi = qla24xx_start_scsi, |
1468 | .wrt_req_reg = qla24xx_wrt_req_reg, | ||
1469 | .wrt_rsp_reg = qla24xx_wrt_rsp_reg, | ||
1470 | .rd_req_reg = qla24xx_rd_req_reg, | ||
1471 | }; | 1390 | }; |
1472 | 1391 | ||
1473 | static struct isp_operations qla81xx_isp_ops = { | 1392 | static struct isp_operations qla81xx_isp_ops = { |
@@ -1493,8 +1412,8 @@ static struct isp_operations qla81xx_isp_ops = { | |||
1493 | .build_iocbs = NULL, | 1412 | .build_iocbs = NULL, |
1494 | .prep_ms_iocb = qla24xx_prep_ms_iocb, | 1413 | .prep_ms_iocb = qla24xx_prep_ms_iocb, |
1495 | .prep_ms_fdmi_iocb = qla24xx_prep_ms_fdmi_iocb, | 1414 | .prep_ms_fdmi_iocb = qla24xx_prep_ms_fdmi_iocb, |
1496 | .read_nvram = qla25xx_read_nvram_data, | 1415 | .read_nvram = NULL, |
1497 | .write_nvram = qla25xx_write_nvram_data, | 1416 | .write_nvram = NULL, |
1498 | .fw_dump = qla81xx_fw_dump, | 1417 | .fw_dump = qla81xx_fw_dump, |
1499 | .beacon_on = qla24xx_beacon_on, | 1418 | .beacon_on = qla24xx_beacon_on, |
1500 | .beacon_off = qla24xx_beacon_off, | 1419 | .beacon_off = qla24xx_beacon_off, |
@@ -1503,9 +1422,6 @@ static struct isp_operations qla81xx_isp_ops = { | |||
1503 | .write_optrom = qla24xx_write_optrom_data, | 1422 | .write_optrom = qla24xx_write_optrom_data, |
1504 | .get_flash_version = qla24xx_get_flash_version, | 1423 | .get_flash_version = qla24xx_get_flash_version, |
1505 | .start_scsi = qla24xx_start_scsi, | 1424 | .start_scsi = qla24xx_start_scsi, |
1506 | .wrt_req_reg = qla24xx_wrt_req_reg, | ||
1507 | .wrt_rsp_reg = qla24xx_wrt_rsp_reg, | ||
1508 | .rd_req_reg = qla24xx_rd_req_reg, | ||
1509 | }; | 1425 | }; |
1510 | 1426 | ||
1511 | static inline void | 1427 | static inline void |
@@ -1727,7 +1643,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1727 | struct rsp_que *rsp = NULL; | 1643 | struct rsp_que *rsp = NULL; |
1728 | 1644 | ||
1729 | bars = pci_select_bars(pdev, IORESOURCE_MEM | IORESOURCE_IO); | 1645 | bars = pci_select_bars(pdev, IORESOURCE_MEM | IORESOURCE_IO); |
1730 | sht = &qla2x00_driver_template; | 1646 | sht = &qla2xxx_driver_template; |
1731 | if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 || | 1647 | if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 || |
1732 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432 || | 1648 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432 || |
1733 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8432 || | 1649 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8432 || |
@@ -1736,7 +1652,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1736 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2532 || | 1652 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2532 || |
1737 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8001) { | 1653 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8001) { |
1738 | bars = pci_select_bars(pdev, IORESOURCE_MEM); | 1654 | bars = pci_select_bars(pdev, IORESOURCE_MEM); |
1739 | sht = &qla24xx_driver_template; | ||
1740 | mem_only = 1; | 1655 | mem_only = 1; |
1741 | } | 1656 | } |
1742 | 1657 | ||
@@ -1927,10 +1842,16 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1927 | ha->rsp_q_map[0] = rsp; | 1842 | ha->rsp_q_map[0] = rsp; |
1928 | ha->req_q_map[0] = req; | 1843 | ha->req_q_map[0] = req; |
1929 | 1844 | ||
1845 | /* FWI2-capable only. */ | ||
1846 | req->req_q_in = &ha->iobase->isp24.req_q_in; | ||
1847 | req->req_q_out = &ha->iobase->isp24.req_q_out; | ||
1848 | rsp->rsp_q_in = &ha->iobase->isp24.rsp_q_in; | ||
1849 | rsp->rsp_q_out = &ha->iobase->isp24.rsp_q_out; | ||
1930 | if (ha->mqenable) { | 1850 | if (ha->mqenable) { |
1931 | ha->isp_ops->wrt_req_reg = qla25xx_wrt_req_reg; | 1851 | req->req_q_in = &ha->mqiobase->isp25mq.req_q_in; |
1932 | ha->isp_ops->wrt_rsp_reg = qla25xx_wrt_rsp_reg; | 1852 | req->req_q_out = &ha->mqiobase->isp25mq.req_q_out; |
1933 | ha->isp_ops->rd_req_reg = qla25xx_rd_req_reg; | 1853 | rsp->rsp_q_in = &ha->mqiobase->isp25mq.rsp_q_in; |
1854 | rsp->rsp_q_out = &ha->mqiobase->isp25mq.rsp_q_out; | ||
1934 | } | 1855 | } |
1935 | 1856 | ||
1936 | if (qla2x00_initialize_adapter(base_vha)) { | 1857 | if (qla2x00_initialize_adapter(base_vha)) { |
@@ -2000,6 +1921,16 @@ probe_init_failed: | |||
2000 | ha->max_queues = 0; | 1921 | ha->max_queues = 0; |
2001 | 1922 | ||
2002 | probe_failed: | 1923 | probe_failed: |
1924 | if (base_vha->timer_active) | ||
1925 | qla2x00_stop_timer(base_vha); | ||
1926 | base_vha->flags.online = 0; | ||
1927 | if (ha->dpc_thread) { | ||
1928 | struct task_struct *t = ha->dpc_thread; | ||
1929 | |||
1930 | ha->dpc_thread = NULL; | ||
1931 | kthread_stop(t); | ||
1932 | } | ||
1933 | |||
2003 | qla2x00_free_device(base_vha); | 1934 | qla2x00_free_device(base_vha); |
2004 | 1935 | ||
2005 | scsi_host_put(base_vha->host); | 1936 | scsi_host_put(base_vha->host); |
@@ -2033,10 +1964,30 @@ qla2x00_remove_one(struct pci_dev *pdev) | |||
2033 | 1964 | ||
2034 | set_bit(UNLOADING, &base_vha->dpc_flags); | 1965 | set_bit(UNLOADING, &base_vha->dpc_flags); |
2035 | 1966 | ||
1967 | qla2x00_abort_all_cmds(base_vha, DID_NO_CONNECT << 16); | ||
1968 | |||
2036 | qla2x00_dfs_remove(base_vha); | 1969 | qla2x00_dfs_remove(base_vha); |
2037 | 1970 | ||
2038 | qla84xx_put_chip(base_vha); | 1971 | qla84xx_put_chip(base_vha); |
2039 | 1972 | ||
1973 | /* Disable timer */ | ||
1974 | if (base_vha->timer_active) | ||
1975 | qla2x00_stop_timer(base_vha); | ||
1976 | |||
1977 | base_vha->flags.online = 0; | ||
1978 | |||
1979 | /* Kill the kernel thread for this host */ | ||
1980 | if (ha->dpc_thread) { | ||
1981 | struct task_struct *t = ha->dpc_thread; | ||
1982 | |||
1983 | /* | ||
1984 | * qla2xxx_wake_dpc checks for ->dpc_thread | ||
1985 | * so we need to zero it out. | ||
1986 | */ | ||
1987 | ha->dpc_thread = NULL; | ||
1988 | kthread_stop(t); | ||
1989 | } | ||
1990 | |||
2040 | qla2x00_free_sysfs_attr(base_vha); | 1991 | qla2x00_free_sysfs_attr(base_vha); |
2041 | 1992 | ||
2042 | fc_remove_host(base_vha->host); | 1993 | fc_remove_host(base_vha->host); |
@@ -2065,25 +2016,6 @@ static void | |||
2065 | qla2x00_free_device(scsi_qla_host_t *vha) | 2016 | qla2x00_free_device(scsi_qla_host_t *vha) |
2066 | { | 2017 | { |
2067 | struct qla_hw_data *ha = vha->hw; | 2018 | struct qla_hw_data *ha = vha->hw; |
2068 | qla2x00_abort_all_cmds(vha, DID_NO_CONNECT << 16); | ||
2069 | |||
2070 | /* Disable timer */ | ||
2071 | if (vha->timer_active) | ||
2072 | qla2x00_stop_timer(vha); | ||
2073 | |||
2074 | vha->flags.online = 0; | ||
2075 | |||
2076 | /* Kill the kernel thread for this host */ | ||
2077 | if (ha->dpc_thread) { | ||
2078 | struct task_struct *t = ha->dpc_thread; | ||
2079 | |||
2080 | /* | ||
2081 | * qla2xxx_wake_dpc checks for ->dpc_thread | ||
2082 | * so we need to zero it out. | ||
2083 | */ | ||
2084 | ha->dpc_thread = NULL; | ||
2085 | kthread_stop(t); | ||
2086 | } | ||
2087 | 2019 | ||
2088 | if (ha->flags.fce_enabled) | 2020 | if (ha->flags.fce_enabled) |
2089 | qla2x00_disable_fce_trace(vha, NULL, NULL); | 2021 | qla2x00_disable_fce_trace(vha, NULL, NULL); |
@@ -2313,9 +2245,19 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len, | |||
2313 | } else | 2245 | } else |
2314 | ha->npiv_info = NULL; | 2246 | ha->npiv_info = NULL; |
2315 | 2247 | ||
2248 | /* Get consistent memory allocated for EX-INIT-CB. */ | ||
2249 | if (IS_QLA81XX(ha)) { | ||
2250 | ha->ex_init_cb = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, | ||
2251 | &ha->ex_init_cb_dma); | ||
2252 | if (!ha->ex_init_cb) | ||
2253 | goto fail_ex_init_cb; | ||
2254 | } | ||
2255 | |||
2316 | INIT_LIST_HEAD(&ha->vp_list); | 2256 | INIT_LIST_HEAD(&ha->vp_list); |
2317 | return 1; | 2257 | return 1; |
2318 | 2258 | ||
2259 | fail_ex_init_cb: | ||
2260 | kfree(ha->npiv_info); | ||
2319 | fail_npiv_info: | 2261 | fail_npiv_info: |
2320 | dma_free_coherent(&ha->pdev->dev, ((*rsp)->length + 1) * | 2262 | dma_free_coherent(&ha->pdev->dev, ((*rsp)->length + 1) * |
2321 | sizeof(response_t), (*rsp)->ring, (*rsp)->dma); | 2263 | sizeof(response_t), (*rsp)->ring, (*rsp)->dma); |
@@ -2398,18 +2340,22 @@ qla2x00_mem_free(struct qla_hw_data *ha) | |||
2398 | if (ha->sfp_data) | 2340 | if (ha->sfp_data) |
2399 | dma_pool_free(ha->s_dma_pool, ha->sfp_data, ha->sfp_data_dma); | 2341 | dma_pool_free(ha->s_dma_pool, ha->sfp_data, ha->sfp_data_dma); |
2400 | 2342 | ||
2343 | if (ha->edc_data) | ||
2344 | dma_pool_free(ha->s_dma_pool, ha->edc_data, ha->edc_data_dma); | ||
2345 | |||
2401 | if (ha->ms_iocb) | 2346 | if (ha->ms_iocb) |
2402 | dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma); | 2347 | dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma); |
2403 | 2348 | ||
2349 | if (ha->ex_init_cb) | ||
2350 | dma_pool_free(ha->s_dma_pool, ha->ex_init_cb, ha->ex_init_cb_dma); | ||
2351 | |||
2404 | if (ha->s_dma_pool) | 2352 | if (ha->s_dma_pool) |
2405 | dma_pool_destroy(ha->s_dma_pool); | 2353 | dma_pool_destroy(ha->s_dma_pool); |
2406 | 2354 | ||
2407 | |||
2408 | if (ha->gid_list) | 2355 | if (ha->gid_list) |
2409 | dma_free_coherent(&ha->pdev->dev, GID_LIST_SIZE, ha->gid_list, | 2356 | dma_free_coherent(&ha->pdev->dev, GID_LIST_SIZE, ha->gid_list, |
2410 | ha->gid_list_dma); | 2357 | ha->gid_list_dma); |
2411 | 2358 | ||
2412 | |||
2413 | if (ha->init_cb) | 2359 | if (ha->init_cb) |
2414 | dma_free_coherent(&ha->pdev->dev, ha->init_cb_size, | 2360 | dma_free_coherent(&ha->pdev->dev, ha->init_cb_size, |
2415 | ha->init_cb, ha->init_cb_dma); | 2361 | ha->init_cb, ha->init_cb_dma); |
@@ -2428,6 +2374,8 @@ qla2x00_mem_free(struct qla_hw_data *ha) | |||
2428 | ha->ms_iocb_dma = 0; | 2374 | ha->ms_iocb_dma = 0; |
2429 | ha->init_cb = NULL; | 2375 | ha->init_cb = NULL; |
2430 | ha->init_cb_dma = 0; | 2376 | ha->init_cb_dma = 0; |
2377 | ha->ex_init_cb = NULL; | ||
2378 | ha->ex_init_cb_dma = 0; | ||
2431 | 2379 | ||
2432 | ha->s_dma_pool = NULL; | 2380 | ha->s_dma_pool = NULL; |
2433 | 2381 | ||
@@ -2914,19 +2862,11 @@ qla2x00_timer(scsi_qla_host_t *vha) | |||
2914 | spin_unlock_irqrestore(&ha->hardware_lock, | 2862 | spin_unlock_irqrestore(&ha->hardware_lock, |
2915 | cpu_flags); | 2863 | cpu_flags); |
2916 | } | 2864 | } |
2917 | set_bit(ABORT_QUEUES_NEEDED, &vha->dpc_flags); | ||
2918 | start_dpc++; | 2865 | start_dpc++; |
2919 | } | 2866 | } |
2920 | 2867 | ||
2921 | /* if the loop has been down for 4 minutes, reinit adapter */ | 2868 | /* if the loop has been down for 4 minutes, reinit adapter */ |
2922 | if (atomic_dec_and_test(&vha->loop_down_timer) != 0) { | 2869 | if (atomic_dec_and_test(&vha->loop_down_timer) != 0) { |
2923 | DEBUG(printk("scsi(%ld): Loop down exceed 4 mins - " | ||
2924 | "restarting queues.\n", | ||
2925 | vha->host_no)); | ||
2926 | |||
2927 | set_bit(RESTART_QUEUES_NEEDED, &vha->dpc_flags); | ||
2928 | start_dpc++; | ||
2929 | |||
2930 | if (!(vha->device_flags & DFLG_NO_CABLE) && | 2870 | if (!(vha->device_flags & DFLG_NO_CABLE) && |
2931 | !vha->vp_idx) { | 2871 | !vha->vp_idx) { |
2932 | DEBUG(printk("scsi(%ld): Loop down - " | 2872 | DEBUG(printk("scsi(%ld): Loop down - " |
@@ -3053,6 +2993,8 @@ qla2x00_release_firmware(void) | |||
3053 | static pci_ers_result_t | 2993 | static pci_ers_result_t |
3054 | qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state) | 2994 | qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state) |
3055 | { | 2995 | { |
2996 | scsi_qla_host_t *base_vha = pci_get_drvdata(pdev); | ||
2997 | |||
3056 | switch (state) { | 2998 | switch (state) { |
3057 | case pci_channel_io_normal: | 2999 | case pci_channel_io_normal: |
3058 | return PCI_ERS_RESULT_CAN_RECOVER; | 3000 | return PCI_ERS_RESULT_CAN_RECOVER; |
@@ -3060,7 +3002,7 @@ qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state) | |||
3060 | pci_disable_device(pdev); | 3002 | pci_disable_device(pdev); |
3061 | return PCI_ERS_RESULT_NEED_RESET; | 3003 | return PCI_ERS_RESULT_NEED_RESET; |
3062 | case pci_channel_io_perm_failure: | 3004 | case pci_channel_io_perm_failure: |
3063 | qla2x00_remove_one(pdev); | 3005 | qla2x00_abort_all_cmds(base_vha, DID_NO_CONNECT << 16); |
3064 | return PCI_ERS_RESULT_DISCONNECT; | 3006 | return PCI_ERS_RESULT_DISCONNECT; |
3065 | } | 3007 | } |
3066 | return PCI_ERS_RESULT_NEED_RESET; | 3008 | return PCI_ERS_RESULT_NEED_RESET; |
diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index 284827926eff..152ecfc26cd2 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c | |||
@@ -612,8 +612,8 @@ qla2xxx_find_flt_start(scsi_qla_host_t *vha, uint32_t *start) | |||
612 | 612 | ||
613 | /* Good data. Use specified location. */ | 613 | /* Good data. Use specified location. */ |
614 | loc = locations[1]; | 614 | loc = locations[1]; |
615 | *start = le16_to_cpu(fltl->start_hi) << 16 | | 615 | *start = (le16_to_cpu(fltl->start_hi) << 16 | |
616 | le16_to_cpu(fltl->start_lo); | 616 | le16_to_cpu(fltl->start_lo)) >> 2; |
617 | end: | 617 | end: |
618 | DEBUG2(qla_printk(KERN_DEBUG, ha, "FLTL[%s] = 0x%x.\n", loc, *start)); | 618 | DEBUG2(qla_printk(KERN_DEBUG, ha, "FLTL[%s] = 0x%x.\n", loc, *start)); |
619 | return QLA_SUCCESS; | 619 | return QLA_SUCCESS; |
@@ -629,6 +629,14 @@ qla2xxx_get_flt_info(scsi_qla_host_t *vha, uint32_t flt_addr) | |||
629 | { FA_BOOT_CODE_ADDR, FA_BOOT_CODE_ADDR, FA_BOOT_CODE_ADDR_81 }; | 629 | { FA_BOOT_CODE_ADDR, FA_BOOT_CODE_ADDR, FA_BOOT_CODE_ADDR_81 }; |
630 | const uint32_t def_vpd_nvram[] = | 630 | const uint32_t def_vpd_nvram[] = |
631 | { FA_VPD_NVRAM_ADDR, FA_VPD_NVRAM_ADDR, FA_VPD_NVRAM_ADDR_81 }; | 631 | { FA_VPD_NVRAM_ADDR, FA_VPD_NVRAM_ADDR, FA_VPD_NVRAM_ADDR_81 }; |
632 | const uint32_t def_vpd0[] = | ||
633 | { 0, 0, FA_VPD0_ADDR_81 }; | ||
634 | const uint32_t def_vpd1[] = | ||
635 | { 0, 0, FA_VPD1_ADDR_81 }; | ||
636 | const uint32_t def_nvram0[] = | ||
637 | { 0, 0, FA_NVRAM0_ADDR_81 }; | ||
638 | const uint32_t def_nvram1[] = | ||
639 | { 0, 0, FA_NVRAM1_ADDR_81 }; | ||
632 | const uint32_t def_fdt[] = | 640 | const uint32_t def_fdt[] = |
633 | { FA_FLASH_DESCR_ADDR_24, FA_FLASH_DESCR_ADDR, | 641 | { FA_FLASH_DESCR_ADDR_24, FA_FLASH_DESCR_ADDR, |
634 | FA_FLASH_DESCR_ADDR_81 }; | 642 | FA_FLASH_DESCR_ADDR_81 }; |
@@ -693,6 +701,20 @@ qla2xxx_get_flt_info(scsi_qla_host_t *vha, uint32_t flt_addr) | |||
693 | break; | 701 | break; |
694 | case FLT_REG_VPD_0: | 702 | case FLT_REG_VPD_0: |
695 | ha->flt_region_vpd_nvram = start; | 703 | ha->flt_region_vpd_nvram = start; |
704 | if (!(PCI_FUNC(ha->pdev->devfn) & 1)) | ||
705 | ha->flt_region_vpd = start; | ||
706 | break; | ||
707 | case FLT_REG_VPD_1: | ||
708 | if (PCI_FUNC(ha->pdev->devfn) & 1) | ||
709 | ha->flt_region_vpd = start; | ||
710 | break; | ||
711 | case FLT_REG_NVRAM_0: | ||
712 | if (!(PCI_FUNC(ha->pdev->devfn) & 1)) | ||
713 | ha->flt_region_nvram = start; | ||
714 | break; | ||
715 | case FLT_REG_NVRAM_1: | ||
716 | if (PCI_FUNC(ha->pdev->devfn) & 1) | ||
717 | ha->flt_region_nvram = start; | ||
696 | break; | 718 | break; |
697 | case FLT_REG_FDT: | 719 | case FLT_REG_FDT: |
698 | ha->flt_region_fdt = start; | 720 | ha->flt_region_fdt = start; |
@@ -722,13 +744,18 @@ no_flash_data: | |||
722 | ha->flt_region_fw = def_fw[def]; | 744 | ha->flt_region_fw = def_fw[def]; |
723 | ha->flt_region_boot = def_boot[def]; | 745 | ha->flt_region_boot = def_boot[def]; |
724 | ha->flt_region_vpd_nvram = def_vpd_nvram[def]; | 746 | ha->flt_region_vpd_nvram = def_vpd_nvram[def]; |
747 | ha->flt_region_vpd = !(PCI_FUNC(ha->pdev->devfn) & 1) ? | ||
748 | def_vpd0[def]: def_vpd1[def]; | ||
749 | ha->flt_region_nvram = !(PCI_FUNC(ha->pdev->devfn) & 1) ? | ||
750 | def_nvram0[def]: def_nvram1[def]; | ||
725 | ha->flt_region_fdt = def_fdt[def]; | 751 | ha->flt_region_fdt = def_fdt[def]; |
726 | ha->flt_region_npiv_conf = !(PCI_FUNC(ha->pdev->devfn) & 1) ? | 752 | ha->flt_region_npiv_conf = !(PCI_FUNC(ha->pdev->devfn) & 1) ? |
727 | def_npiv_conf0[def]: def_npiv_conf1[def]; | 753 | def_npiv_conf0[def]: def_npiv_conf1[def]; |
728 | done: | 754 | done: |
729 | DEBUG2(qla_printk(KERN_DEBUG, ha, "FLT[%s]: boot=0x%x fw=0x%x " | 755 | DEBUG2(qla_printk(KERN_DEBUG, ha, "FLT[%s]: boot=0x%x fw=0x%x " |
730 | "vpd_nvram=0x%x fdt=0x%x flt=0x%x npiv=0x%x.\n", loc, | 756 | "vpd_nvram=0x%x vpd=0x%x nvram=0x%x fdt=0x%x flt=0x%x " |
731 | ha->flt_region_boot, ha->flt_region_fw, ha->flt_region_vpd_nvram, | 757 | "npiv=0x%x.\n", loc, ha->flt_region_boot, ha->flt_region_fw, |
758 | ha->flt_region_vpd_nvram, ha->flt_region_vpd, ha->flt_region_nvram, | ||
732 | ha->flt_region_fdt, ha->flt_region_flt, ha->flt_region_npiv_conf)); | 759 | ha->flt_region_fdt, ha->flt_region_flt, ha->flt_region_npiv_conf)); |
733 | } | 760 | } |
734 | 761 | ||
@@ -931,31 +958,41 @@ done: | |||
931 | ha->npiv_info = NULL; | 958 | ha->npiv_info = NULL; |
932 | } | 959 | } |
933 | 960 | ||
934 | static void | 961 | static int |
935 | qla24xx_unprotect_flash(struct qla_hw_data *ha) | 962 | qla24xx_unprotect_flash(scsi_qla_host_t *vha) |
936 | { | 963 | { |
964 | struct qla_hw_data *ha = vha->hw; | ||
937 | struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; | 965 | struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; |
938 | 966 | ||
967 | if (ha->flags.fac_supported) | ||
968 | return qla81xx_fac_do_write_enable(vha, 1); | ||
969 | |||
939 | /* Enable flash write. */ | 970 | /* Enable flash write. */ |
940 | WRT_REG_DWORD(®->ctrl_status, | 971 | WRT_REG_DWORD(®->ctrl_status, |
941 | RD_REG_DWORD(®->ctrl_status) | CSRX_FLASH_ENABLE); | 972 | RD_REG_DWORD(®->ctrl_status) | CSRX_FLASH_ENABLE); |
942 | RD_REG_DWORD(®->ctrl_status); /* PCI Posting. */ | 973 | RD_REG_DWORD(®->ctrl_status); /* PCI Posting. */ |
943 | 974 | ||
944 | if (!ha->fdt_wrt_disable) | 975 | if (!ha->fdt_wrt_disable) |
945 | return; | 976 | goto done; |
946 | 977 | ||
947 | /* Disable flash write-protection, first clear SR protection bit */ | 978 | /* Disable flash write-protection, first clear SR protection bit */ |
948 | qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); | 979 | qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); |
949 | /* Then write zero again to clear remaining SR bits.*/ | 980 | /* Then write zero again to clear remaining SR bits.*/ |
950 | qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); | 981 | qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); |
982 | done: | ||
983 | return QLA_SUCCESS; | ||
951 | } | 984 | } |
952 | 985 | ||
953 | static void | 986 | static int |
954 | qla24xx_protect_flash(struct qla_hw_data *ha) | 987 | qla24xx_protect_flash(scsi_qla_host_t *vha) |
955 | { | 988 | { |
956 | uint32_t cnt; | 989 | uint32_t cnt; |
990 | struct qla_hw_data *ha = vha->hw; | ||
957 | struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; | 991 | struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; |
958 | 992 | ||
993 | if (ha->flags.fac_supported) | ||
994 | return qla81xx_fac_do_write_enable(vha, 0); | ||
995 | |||
959 | if (!ha->fdt_wrt_disable) | 996 | if (!ha->fdt_wrt_disable) |
960 | goto skip_wrt_protect; | 997 | goto skip_wrt_protect; |
961 | 998 | ||
@@ -973,6 +1010,26 @@ skip_wrt_protect: | |||
973 | WRT_REG_DWORD(®->ctrl_status, | 1010 | WRT_REG_DWORD(®->ctrl_status, |
974 | RD_REG_DWORD(®->ctrl_status) & ~CSRX_FLASH_ENABLE); | 1011 | RD_REG_DWORD(®->ctrl_status) & ~CSRX_FLASH_ENABLE); |
975 | RD_REG_DWORD(®->ctrl_status); /* PCI Posting. */ | 1012 | RD_REG_DWORD(®->ctrl_status); /* PCI Posting. */ |
1013 | |||
1014 | return QLA_SUCCESS; | ||
1015 | } | ||
1016 | |||
1017 | static int | ||
1018 | qla24xx_erase_sector(scsi_qla_host_t *vha, uint32_t fdata) | ||
1019 | { | ||
1020 | struct qla_hw_data *ha = vha->hw; | ||
1021 | uint32_t start, finish; | ||
1022 | |||
1023 | if (ha->flags.fac_supported) { | ||
1024 | start = fdata >> 2; | ||
1025 | finish = start + (ha->fdt_block_size >> 2) - 1; | ||
1026 | return qla81xx_fac_erase_sector(vha, flash_data_addr(ha, | ||
1027 | start), flash_data_addr(ha, finish)); | ||
1028 | } | ||
1029 | |||
1030 | return qla24xx_write_flash_dword(ha, ha->fdt_erase_cmd, | ||
1031 | (fdata & 0xff00) | ((fdata << 16) & 0xff0000) | | ||
1032 | ((fdata >> 16) & 0xff)); | ||
976 | } | 1033 | } |
977 | 1034 | ||
978 | static int | 1035 | static int |
@@ -987,8 +1044,6 @@ qla24xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr, | |||
987 | void *optrom = NULL; | 1044 | void *optrom = NULL; |
988 | struct qla_hw_data *ha = vha->hw; | 1045 | struct qla_hw_data *ha = vha->hw; |
989 | 1046 | ||
990 | ret = QLA_SUCCESS; | ||
991 | |||
992 | /* Prepare burst-capable write on supported ISPs. */ | 1047 | /* Prepare burst-capable write on supported ISPs. */ |
993 | if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && !(faddr & 0xfff) && | 1048 | if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && !(faddr & 0xfff) && |
994 | dwords > OPTROM_BURST_DWORDS) { | 1049 | dwords > OPTROM_BURST_DWORDS) { |
@@ -1004,7 +1059,12 @@ qla24xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr, | |||
1004 | rest_addr = (ha->fdt_block_size >> 2) - 1; | 1059 | rest_addr = (ha->fdt_block_size >> 2) - 1; |
1005 | sec_mask = ~rest_addr; | 1060 | sec_mask = ~rest_addr; |
1006 | 1061 | ||
1007 | qla24xx_unprotect_flash(ha); | 1062 | ret = qla24xx_unprotect_flash(vha); |
1063 | if (ret != QLA_SUCCESS) { | ||
1064 | qla_printk(KERN_WARNING, ha, | ||
1065 | "Unable to unprotect flash for update.\n"); | ||
1066 | goto done; | ||
1067 | } | ||
1008 | 1068 | ||
1009 | for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) { | 1069 | for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) { |
1010 | fdata = (faddr & sec_mask) << 2; | 1070 | fdata = (faddr & sec_mask) << 2; |
@@ -1017,9 +1077,7 @@ qla24xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr, | |||
1017 | ha->fdt_unprotect_sec_cmd, | 1077 | ha->fdt_unprotect_sec_cmd, |
1018 | (fdata & 0xff00) | ((fdata << 16) & | 1078 | (fdata & 0xff00) | ((fdata << 16) & |
1019 | 0xff0000) | ((fdata >> 16) & 0xff)); | 1079 | 0xff0000) | ((fdata >> 16) & 0xff)); |
1020 | ret = qla24xx_write_flash_dword(ha, ha->fdt_erase_cmd, | 1080 | ret = qla24xx_erase_sector(vha, fdata); |
1021 | (fdata & 0xff00) |((fdata << 16) & | ||
1022 | 0xff0000) | ((fdata >> 16) & 0xff)); | ||
1023 | if (ret != QLA_SUCCESS) { | 1081 | if (ret != QLA_SUCCESS) { |
1024 | DEBUG9(qla_printk("Unable to erase sector: " | 1082 | DEBUG9(qla_printk("Unable to erase sector: " |
1025 | "address=%x.\n", faddr)); | 1083 | "address=%x.\n", faddr)); |
@@ -1073,8 +1131,11 @@ qla24xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr, | |||
1073 | 0xff0000) | ((fdata >> 16) & 0xff)); | 1131 | 0xff0000) | ((fdata >> 16) & 0xff)); |
1074 | } | 1132 | } |
1075 | 1133 | ||
1076 | qla24xx_protect_flash(ha); | 1134 | ret = qla24xx_protect_flash(vha); |
1077 | 1135 | if (ret != QLA_SUCCESS) | |
1136 | qla_printk(KERN_WARNING, ha, | ||
1137 | "Unable to protect flash after update.\n"); | ||
1138 | done: | ||
1078 | if (optrom) | 1139 | if (optrom) |
1079 | dma_free_coherent(&ha->pdev->dev, | 1140 | dma_free_coherent(&ha->pdev->dev, |
1080 | OPTROM_BURST_SIZE, optrom, optrom_dma); | 1141 | OPTROM_BURST_SIZE, optrom, optrom_dma); |
@@ -1915,7 +1976,7 @@ qla2x00_resume_hba(struct scsi_qla_host *vha) | |||
1915 | clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); | 1976 | clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); |
1916 | set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); | 1977 | set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); |
1917 | qla2xxx_wake_dpc(vha); | 1978 | qla2xxx_wake_dpc(vha); |
1918 | qla2x00_wait_for_hba_online(vha); | 1979 | qla2x00_wait_for_chip_reset(vha); |
1919 | scsi_unblock_requests(vha->host); | 1980 | scsi_unblock_requests(vha->host); |
1920 | } | 1981 | } |
1921 | 1982 | ||
@@ -2206,11 +2267,7 @@ qla24xx_write_optrom_data(struct scsi_qla_host *vha, uint8_t *buf, | |||
2206 | rval = qla24xx_write_flash_data(vha, (uint32_t *)buf, offset >> 2, | 2267 | rval = qla24xx_write_flash_data(vha, (uint32_t *)buf, offset >> 2, |
2207 | length >> 2); | 2268 | length >> 2); |
2208 | 2269 | ||
2209 | /* Resume HBA -- RISC reset needed. */ | ||
2210 | clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); | 2270 | clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); |
2211 | set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); | ||
2212 | qla2xxx_wake_dpc(vha); | ||
2213 | qla2x00_wait_for_hba_online(vha); | ||
2214 | scsi_unblock_requests(vha->host); | 2271 | scsi_unblock_requests(vha->host); |
2215 | 2272 | ||
2216 | return rval; | 2273 | return rval; |
@@ -2518,7 +2575,7 @@ qla24xx_get_flash_version(scsi_qla_host_t *vha, void *mbuf) | |||
2518 | dcode = mbuf; | 2575 | dcode = mbuf; |
2519 | 2576 | ||
2520 | /* Begin with first PCI expansion ROM header. */ | 2577 | /* Begin with first PCI expansion ROM header. */ |
2521 | pcihdr = ha->flt_region_boot; | 2578 | pcihdr = ha->flt_region_boot << 2; |
2522 | last_image = 1; | 2579 | last_image = 1; |
2523 | do { | 2580 | do { |
2524 | /* Verify PCI expansion ROM header. */ | 2581 | /* Verify PCI expansion ROM header. */ |
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index a772eab2f0ea..19d1afc3a343 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h | |||
@@ -7,9 +7,9 @@ | |||
7 | /* | 7 | /* |
8 | * Driver version | 8 | * Driver version |
9 | */ | 9 | */ |
10 | #define QLA2XXX_VERSION "8.03.00-k4" | 10 | #define QLA2XXX_VERSION "8.03.01-k1" |
11 | 11 | ||
12 | #define QLA_DRIVER_MAJOR_VER 8 | 12 | #define QLA_DRIVER_MAJOR_VER 8 |
13 | #define QLA_DRIVER_MINOR_VER 3 | 13 | #define QLA_DRIVER_MINOR_VER 3 |
14 | #define QLA_DRIVER_PATCH_VER 0 | 14 | #define QLA_DRIVER_PATCH_VER 1 |
15 | #define QLA_DRIVER_BETA_VER 0 | 15 | #define QLA_DRIVER_BETA_VER 0 |
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c index 69d6ad862b60..fa34b92850a6 100644 --- a/drivers/scsi/qlogicpti.c +++ b/drivers/scsi/qlogicpti.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/dma-mapping.h> | 28 | #include <linux/dma-mapping.h> |
29 | #include <linux/of.h> | 29 | #include <linux/of.h> |
30 | #include <linux/of_device.h> | 30 | #include <linux/of_device.h> |
31 | #include <linux/firmware.h> | ||
31 | 32 | ||
32 | #include <asm/byteorder.h> | 33 | #include <asm/byteorder.h> |
33 | 34 | ||
@@ -53,8 +54,6 @@ | |||
53 | 54 | ||
54 | #define DEFAULT_LOOP_COUNT 10000 | 55 | #define DEFAULT_LOOP_COUNT 10000 |
55 | 56 | ||
56 | #include "qlogicpti_asm.c" | ||
57 | |||
58 | static struct qlogicpti *qptichain = NULL; | 57 | static struct qlogicpti *qptichain = NULL; |
59 | static DEFINE_SPINLOCK(qptichain_lock); | 58 | static DEFINE_SPINLOCK(qptichain_lock); |
60 | 59 | ||
@@ -465,16 +464,32 @@ static int qlogicpti_reset_hardware(struct Scsi_Host *host) | |||
465 | 464 | ||
466 | static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) | 465 | static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) |
467 | { | 466 | { |
467 | const struct firmware *fw; | ||
468 | const char fwname[] = "qlogic/isp1000.bin"; | ||
469 | const __le16 *fw_data; | ||
468 | struct Scsi_Host *host = qpti->qhost; | 470 | struct Scsi_Host *host = qpti->qhost; |
469 | unsigned short csum = 0; | 471 | unsigned short csum = 0; |
470 | unsigned short param[6]; | 472 | unsigned short param[6]; |
471 | unsigned short *risc_code, risc_code_addr, risc_code_length; | 473 | unsigned short risc_code_addr, risc_code_length; |
474 | int err; | ||
472 | unsigned long flags; | 475 | unsigned long flags; |
473 | int i, timeout; | 476 | int i, timeout; |
474 | 477 | ||
475 | risc_code = &sbus_risc_code01[0]; | 478 | err = request_firmware(&fw, fwname, &qpti->op->dev); |
479 | if (err) { | ||
480 | printk(KERN_ERR "Failed to load image \"%s\" err %d\n", | ||
481 | fwname, err); | ||
482 | return err; | ||
483 | } | ||
484 | if (fw->size % 2) { | ||
485 | printk(KERN_ERR "Bogus length %zu in image \"%s\"\n", | ||
486 | fw->size, fwname); | ||
487 | err = -EINVAL; | ||
488 | goto outfirm; | ||
489 | } | ||
490 | fw_data = (const __le16 *)&fw->data[0]; | ||
476 | risc_code_addr = 0x1000; /* all f/w modules load at 0x1000 */ | 491 | risc_code_addr = 0x1000; /* all f/w modules load at 0x1000 */ |
477 | risc_code_length = sbus_risc_code_length01; | 492 | risc_code_length = fw->size / 2; |
478 | 493 | ||
479 | spin_lock_irqsave(host->host_lock, flags); | 494 | spin_lock_irqsave(host->host_lock, flags); |
480 | 495 | ||
@@ -482,12 +497,12 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) | |||
482 | * afterwards via the mailbox commands. | 497 | * afterwards via the mailbox commands. |
483 | */ | 498 | */ |
484 | for (i = 0; i < risc_code_length; i++) | 499 | for (i = 0; i < risc_code_length; i++) |
485 | csum += risc_code[i]; | 500 | csum += __le16_to_cpu(fw_data[i]); |
486 | if (csum) { | 501 | if (csum) { |
487 | spin_unlock_irqrestore(host->host_lock, flags); | ||
488 | printk(KERN_EMERG "qlogicpti%d: Aieee, firmware checksum failed!", | 502 | printk(KERN_EMERG "qlogicpti%d: Aieee, firmware checksum failed!", |
489 | qpti->qpti_id); | 503 | qpti->qpti_id); |
490 | return 1; | 504 | err = 1; |
505 | goto out; | ||
491 | } | 506 | } |
492 | sbus_writew(SBUS_CTRL_RESET, qpti->qregs + SBUS_CTRL); | 507 | sbus_writew(SBUS_CTRL_RESET, qpti->qregs + SBUS_CTRL); |
493 | sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + CMD_DMA_CTRL); | 508 | sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + CMD_DMA_CTRL); |
@@ -496,9 +511,9 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) | |||
496 | while (--timeout && (sbus_readw(qpti->qregs + SBUS_CTRL) & SBUS_CTRL_RESET)) | 511 | while (--timeout && (sbus_readw(qpti->qregs + SBUS_CTRL) & SBUS_CTRL_RESET)) |
497 | udelay(20); | 512 | udelay(20); |
498 | if (!timeout) { | 513 | if (!timeout) { |
499 | spin_unlock_irqrestore(host->host_lock, flags); | ||
500 | printk(KERN_EMERG "qlogicpti%d: Cannot reset the ISP.", qpti->qpti_id); | 514 | printk(KERN_EMERG "qlogicpti%d: Cannot reset the ISP.", qpti->qpti_id); |
501 | return 1; | 515 | err = 1; |
516 | goto out; | ||
502 | } | 517 | } |
503 | 518 | ||
504 | sbus_writew(HCCTRL_RESET, qpti->qregs + HCCTRL); | 519 | sbus_writew(HCCTRL_RESET, qpti->qregs + HCCTRL); |
@@ -536,21 +551,21 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) | |||
536 | if (qlogicpti_mbox_command(qpti, param, 1)) { | 551 | if (qlogicpti_mbox_command(qpti, param, 1)) { |
537 | printk(KERN_EMERG "qlogicpti%d: Cannot stop firmware for reload.\n", | 552 | printk(KERN_EMERG "qlogicpti%d: Cannot stop firmware for reload.\n", |
538 | qpti->qpti_id); | 553 | qpti->qpti_id); |
539 | spin_unlock_irqrestore(host->host_lock, flags); | 554 | err = 1; |
540 | return 1; | 555 | goto out; |
541 | } | 556 | } |
542 | 557 | ||
543 | /* Load it up.. */ | 558 | /* Load it up.. */ |
544 | for (i = 0; i < risc_code_length; i++) { | 559 | for (i = 0; i < risc_code_length; i++) { |
545 | param[0] = MBOX_WRITE_RAM_WORD; | 560 | param[0] = MBOX_WRITE_RAM_WORD; |
546 | param[1] = risc_code_addr + i; | 561 | param[1] = risc_code_addr + i; |
547 | param[2] = risc_code[i]; | 562 | param[2] = __le16_to_cpu(fw_data[i]); |
548 | if (qlogicpti_mbox_command(qpti, param, 1) || | 563 | if (qlogicpti_mbox_command(qpti, param, 1) || |
549 | param[0] != MBOX_COMMAND_COMPLETE) { | 564 | param[0] != MBOX_COMMAND_COMPLETE) { |
550 | printk("qlogicpti%d: Firmware dload failed, I'm bolixed!\n", | 565 | printk("qlogicpti%d: Firmware dload failed, I'm bolixed!\n", |
551 | qpti->qpti_id); | 566 | qpti->qpti_id); |
552 | spin_unlock_irqrestore(host->host_lock, flags); | 567 | err = 1; |
553 | return 1; | 568 | goto out; |
554 | } | 569 | } |
555 | } | 570 | } |
556 | 571 | ||
@@ -569,8 +584,8 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) | |||
569 | (param[0] != MBOX_COMMAND_COMPLETE)) { | 584 | (param[0] != MBOX_COMMAND_COMPLETE)) { |
570 | printk(KERN_EMERG "qlogicpti%d: New firmware csum failure!\n", | 585 | printk(KERN_EMERG "qlogicpti%d: New firmware csum failure!\n", |
571 | qpti->qpti_id); | 586 | qpti->qpti_id); |
572 | spin_unlock_irqrestore(host->host_lock, flags); | 587 | err = 1; |
573 | return 1; | 588 | goto out; |
574 | } | 589 | } |
575 | 590 | ||
576 | /* Start using newly downloaded firmware. */ | 591 | /* Start using newly downloaded firmware. */ |
@@ -583,8 +598,8 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) | |||
583 | (param[0] != MBOX_COMMAND_COMPLETE)) { | 598 | (param[0] != MBOX_COMMAND_COMPLETE)) { |
584 | printk(KERN_EMERG "qlogicpti%d: AboutFirmware cmd fails.\n", | 599 | printk(KERN_EMERG "qlogicpti%d: AboutFirmware cmd fails.\n", |
585 | qpti->qpti_id); | 600 | qpti->qpti_id); |
586 | spin_unlock_irqrestore(host->host_lock, flags); | 601 | err = 1; |
587 | return 1; | 602 | goto out; |
588 | } | 603 | } |
589 | 604 | ||
590 | /* Snag the major and minor revisions from the result. */ | 605 | /* Snag the major and minor revisions from the result. */ |
@@ -599,8 +614,8 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) | |||
599 | (param[0] != MBOX_COMMAND_COMPLETE)) { | 614 | (param[0] != MBOX_COMMAND_COMPLETE)) { |
600 | printk(KERN_EMERG "qlogicpti%d: could not set clock rate.\n", | 615 | printk(KERN_EMERG "qlogicpti%d: could not set clock rate.\n", |
601 | qpti->qpti_id); | 616 | qpti->qpti_id); |
602 | spin_unlock_irqrestore(host->host_lock, flags); | 617 | err = 1; |
603 | return 1; | 618 | goto out; |
604 | } | 619 | } |
605 | 620 | ||
606 | if (qpti->is_pti != 0) { | 621 | if (qpti->is_pti != 0) { |
@@ -616,8 +631,11 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) | |||
616 | qlogicpti_mbox_command(qpti, param, 1); | 631 | qlogicpti_mbox_command(qpti, param, 1); |
617 | } | 632 | } |
618 | 633 | ||
634 | out: | ||
619 | spin_unlock_irqrestore(host->host_lock, flags); | 635 | spin_unlock_irqrestore(host->host_lock, flags); |
620 | return 0; | 636 | outfirm: |
637 | release_firmware(fw); | ||
638 | return err; | ||
621 | } | 639 | } |
622 | 640 | ||
623 | static int qlogicpti_verify_tmon(struct qlogicpti *qpti) | 641 | static int qlogicpti_verify_tmon(struct qlogicpti *qpti) |
@@ -1458,6 +1476,7 @@ MODULE_DESCRIPTION("QlogicISP SBUS driver"); | |||
1458 | MODULE_AUTHOR("David S. Miller (davem@davemloft.net)"); | 1476 | MODULE_AUTHOR("David S. Miller (davem@davemloft.net)"); |
1459 | MODULE_LICENSE("GPL"); | 1477 | MODULE_LICENSE("GPL"); |
1460 | MODULE_VERSION("2.1"); | 1478 | MODULE_VERSION("2.1"); |
1479 | MODULE_FIRMWARE("qlogic/isp1000.bin"); | ||
1461 | 1480 | ||
1462 | module_init(qpti_init); | 1481 | module_init(qpti_init); |
1463 | module_exit(qpti_exit); | 1482 | module_exit(qpti_exit); |
diff --git a/drivers/scsi/qlogicpti_asm.c b/drivers/scsi/qlogicpti_asm.c deleted file mode 100644 index 19aa84f46018..000000000000 --- a/drivers/scsi/qlogicpti_asm.c +++ /dev/null | |||
@@ -1,1160 +0,0 @@ | |||
1 | /* Version 1.31.00 ISP1000 Initiator RISC firmware */ | ||
2 | unsigned short sbus_risc_code01[] __devinitdata = { | ||
3 | 0x0078, 0x1030, 0x0000, 0x2419, 0x0000, 0x12ff, 0x2043, 0x4f50, | ||
4 | 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, | ||
5 | 0x2c31, 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, | ||
6 | 0x4320, 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, | ||
7 | 0x5350, 0x3130, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, | ||
8 | 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3331, 0x2020, | ||
9 | 0x20b9, 0x1212, 0x20c1, 0x0008, 0x2071, 0x0010, 0x70c3, 0x0004, | ||
10 | 0x20c9, 0x3fff, 0x2089, 0x10c8, 0x70c7, 0x4953, 0x70cb, 0x5020, | ||
11 | 0x70cf, 0x2020, 0x70d3, 0x0001, 0x3f00, 0x70d6, 0x2031, 0x0030, | ||
12 | 0x2079, 0x3500, 0x7863, 0x0000, 0x2fa0, 0x2009, 0x0327, 0x2011, | ||
13 | 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x1051, 0x789b, | ||
14 | 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0bb8, 0x2069, | ||
15 | 0x3540, 0x00a8, 0x106a, 0x681b, 0x003c, 0x2009, 0x1313, 0x21b8, | ||
16 | 0x0078, 0x106c, 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, | ||
17 | 0x680f, 0x0008, 0x6813, 0x0005, 0x681f, 0x0000, 0x6823, 0x0006, | ||
18 | 0x6817, 0x0008, 0x6827, 0x0000, 0x2069, 0x3600, 0x2011, 0x0020, | ||
19 | 0x2009, 0x0010, 0x680b, 0x0c19, 0x680f, 0x0019, 0x6803, 0xdd00, | ||
20 | 0x6807, 0x001a, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, | ||
21 | 0x8109, 0x00c0, 0x1082, 0x2069, 0x3680, 0x20a9, 0x0080, 0x6837, | ||
22 | 0x0000, 0x680b, 0x0040, 0x6817, 0x0100, 0x681f, 0x0064, 0xade8, | ||
23 | 0x0010, 0x0070, 0x10a5, 0x0078, 0x1097, 0x1078, 0x1a38, 0x1078, | ||
24 | 0x2f3a, 0x1078, 0x1681, 0x1078, 0x33ba, 0x3200, 0xa085, 0x000d, | ||
25 | 0x2090, 0x70c3, 0x0000, 0x0090, 0x10bc, 0x70c0, 0xa086, 0x0002, | ||
26 | 0x00c0, 0x10bc, 0x1078, 0x11ba, 0x1078, 0x10ec, 0x1078, 0x1817, | ||
27 | 0x1078, 0x19a8, 0x1078, 0x327d, 0x1078, 0x177d, 0x0078, 0x10bc, | ||
28 | 0x10d0, 0x10d2, 0x1bc3, 0x1bc3, 0x2f98, 0x2f98, 0x1bc3, 0x1bc3, | ||
29 | 0x0078, 0x10d0, 0x0078, 0x10d2, 0x0078, 0x10d4, 0x0078, 0x10d6, | ||
30 | 0x7008, 0x800c, 0x00c8, 0x10e7, 0x7007, 0x0002, 0xa08c, 0x000c, | ||
31 | 0x00c0, 0x10e8, 0x8004, 0x8004, 0x00c8, 0x10e7, 0x087a, 0x097a, | ||
32 | 0x70c3, 0x4002, 0x0078, 0x11bd, 0x7814, 0xa005, 0x00c0, 0x10f4, | ||
33 | 0x0010, 0x1130, 0x0078, 0x112f, 0x2009, 0x3568, 0x2104, 0xa005, | ||
34 | 0x00c0, 0x112f, 0x7814, 0xa086, 0x0001, 0x00c0, 0x1101, 0x1078, | ||
35 | 0x1536, 0x7817, 0x0000, 0x2009, 0x356f, 0x2104, 0xa065, 0x0040, | ||
36 | 0x111d, 0x2009, 0x356a, 0x211c, 0x8108, 0x2114, 0x8108, 0x2104, | ||
37 | 0xa210, 0xa399, 0x0000, 0x2009, 0x001c, 0x6083, 0x0103, 0x1078, | ||
38 | 0x1611, 0x00c0, 0x1129, 0x1078, 0x1678, 0x2009, 0x356f, 0x200b, | ||
39 | 0x0000, 0x2009, 0x3569, 0x2104, 0x200b, 0x0000, 0xa005, 0x0040, | ||
40 | 0x112d, 0x2001, 0x4005, 0x0078, 0x11bc, 0x0078, 0x11ba, 0x007c, | ||
41 | 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x0040, 0x1138, 0x007c, | ||
42 | 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000, 0x70cf, 0x0000, | ||
43 | 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1188, 0x2038, 0x0079, 0x1148, | ||
44 | 0x11ba, 0x1205, 0x11d3, 0x1205, 0x1256, 0x1256, 0x11ca, 0x1590, | ||
45 | 0x1261, 0x11c6, 0x11d7, 0x11d9, 0x11db, 0x11dd, 0x1595, 0x11c6, | ||
46 | 0x1267, 0x1283, 0x1544, 0x158a, 0x11df, 0x146b, 0x148d, 0x14a7, | ||
47 | 0x14d0, 0x1424, 0x1432, 0x1446, 0x145a, 0x12ef, 0x11c6, 0x129f, | ||
48 | 0x12a6, 0x12ab, 0x12b0, 0x12b6, 0x12bb, 0x12c0, 0x12c5, 0x12ca, | ||
49 | 0x12ce, 0x12e3, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x12fb, | ||
50 | 0x1304, 0x1313, 0x1339, 0x1343, 0x134a, 0x1370, 0x137f, 0x138e, | ||
51 | 0x13a0, 0x1409, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x1419, | ||
52 | 0xa0bc, 0xffa0, 0x00c0, 0x11c6, 0x2038, 0xa084, 0x001f, 0x0079, | ||
53 | 0x1191, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, | ||
54 | 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, | ||
55 | 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, | ||
56 | 0x11c6, 0x11c6, 0x11c6, 0x15ed, 0x15f7, 0x15fb, 0x1609, 0x11c6, | ||
57 | 0x11c6, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, 0x11bc, 0x73ce, | ||
58 | 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x2061, 0x0000, 0x601b, | ||
59 | 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x007c, 0x70c3, 0x4001, | ||
60 | 0x0078, 0x11bd, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, | ||
61 | 0x53a3, 0x0078, 0x11ba, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, | ||
62 | 0x11ba, 0x0078, 0x11ba, 0x0078, 0x11ba, 0x0078, 0x11ba, 0x2091, | ||
63 | 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, | ||
64 | 0x2020, 0x70d3, 0x0001, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, | ||
65 | 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, | ||
66 | 0x0470, 0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, | ||
67 | 0x5000, 0x2091, 0x4080, 0x0078, 0x0455, 0x71d0, 0x72c8, 0x73cc, | ||
68 | 0x70c4, 0x20a0, 0x2098, 0x2031, 0x0030, 0x81ff, 0x0040, 0x11ba, | ||
69 | 0x7007, 0x0004, 0x731a, 0x721e, 0x2051, 0x0012, 0x2049, 0x1234, | ||
70 | 0x2041, 0x11ba, 0x7003, 0x0002, 0xa786, 0x0001, 0x00c0, 0x1226, | ||
71 | 0x2049, 0x1242, 0x2041, 0x124e, 0x7003, 0x0003, 0x7017, 0x0000, | ||
72 | 0x810b, 0x7112, 0x00c8, 0x122e, 0x7017, 0x0001, 0x7007, 0x0001, | ||
73 | 0xa786, 0x0001, 0x0040, 0x1242, 0x700c, 0xa084, 0x007f, 0x8004, | ||
74 | 0x2009, 0x0020, 0xa102, 0x0942, 0x094a, 0x20a8, 0x26a0, 0x53a6, | ||
75 | 0x0078, 0x10d8, 0x700c, 0xa084, 0x007f, 0x0040, 0x1242, 0x80ac, | ||
76 | 0x0048, 0x1242, 0x2698, 0x53a5, 0x0078, 0x10d8, 0x700c, 0xa084, | ||
77 | 0x007f, 0x80ac, 0x2698, 0x53a5, 0x0078, 0x11ba, 0x71c4, 0x70c8, | ||
78 | 0x2114, 0xa79e, 0x0004, 0x00c0, 0x125e, 0x200a, 0x72ca, 0x0078, | ||
79 | 0x11b9, 0x70c7, 0x0001, 0x70cb, 0x001f, 0x0078, 0x11ba, 0x70c4, | ||
80 | 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, | ||
81 | 0x0040, 0x127d, 0x8001, 0x7872, 0x7a7a, 0x7b7e, 0x7c76, 0x7898, | ||
82 | 0xa084, 0xfffc, 0x789a, 0x0078, 0x1281, 0x7898, 0xa085, 0x0001, | ||
83 | 0x789a, 0x0078, 0x11ba, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, | ||
84 | 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x1299, 0x8001, 0x7886, | ||
85 | 0x7a8e, 0x7b92, 0x7c8a, 0x7898, 0xa084, 0xfcff, 0x789a, 0x0078, | ||
86 | 0x129d, 0x7898, 0xa085, 0x0100, 0x789a, 0x0078, 0x11ba, 0x2009, | ||
87 | 0x3559, 0x210c, 0x2011, 0x0410, 0x0078, 0x11b8, 0x2009, 0x3541, | ||
88 | 0x210c, 0x0078, 0x11b9, 0x2009, 0x3542, 0x210c, 0x0078, 0x11b9, | ||
89 | 0x2061, 0x3540, 0x610c, 0x6210, 0x0078, 0x11b8, 0x2009, 0x3545, | ||
90 | 0x210c, 0x0078, 0x11b9, 0x2009, 0x3546, 0x210c, 0x0078, 0x11b9, | ||
91 | 0x2009, 0x3547, 0x210c, 0x0078, 0x11b9, 0x2009, 0x3548, 0x210c, | ||
92 | 0x0078, 0x11b9, 0x7908, 0x7a0c, 0x0078, 0x11b8, 0x71c4, 0x8107, | ||
93 | 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x3600, 0x6a00, | ||
94 | 0x6804, 0xa084, 0x0008, 0x0040, 0x12e0, 0x6b08, 0x0078, 0x12e1, | ||
95 | 0x6b0c, 0x0078, 0x11b7, 0x77c4, 0x1078, 0x1692, 0x2091, 0x8000, | ||
96 | 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x11b7, 0x77c4, | ||
97 | 0x1078, 0x1692, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091, | ||
98 | 0x8001, 0x0078, 0x11b7, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x11b2, | ||
99 | 0x1078, 0x1abc, 0x0078, 0x11b7, 0x71c4, 0xa182, 0x0010, 0x00c8, | ||
100 | 0x11b2, 0x2011, 0x3541, 0x2204, 0x007e, 0x2112, 0x1078, 0x1a75, | ||
101 | 0x017f, 0x0078, 0x11b9, 0x71c4, 0x2011, 0x1331, 0x20a9, 0x0008, | ||
102 | 0x2204, 0xa106, 0x0040, 0x1323, 0x8210, 0x0070, 0x1321, 0x0078, | ||
103 | 0x1318, 0x0078, 0x11b2, 0xa292, 0x1331, 0x027e, 0x2011, 0x3542, | ||
104 | 0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x1a81, 0x017f, 0x0078, | ||
105 | 0x11b9, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032, | ||
106 | 0x004b, 0x2061, 0x3540, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8, | ||
107 | 0x6012, 0x0078, 0x11b8, 0x2061, 0x3540, 0x6114, 0x70c4, 0x6016, | ||
108 | 0x0078, 0x11b9, 0x71c4, 0x2011, 0x0004, 0x2019, 0x1212, 0xa186, | ||
109 | 0x0028, 0x0040, 0x1363, 0x2011, 0x0005, 0x2019, 0x1212, 0xa186, | ||
110 | 0x0032, 0x0040, 0x1363, 0x2011, 0x0006, 0x2019, 0x1313, 0xa186, | ||
111 | 0x003c, 0x00c0, 0x11b2, 0x2061, 0x3540, 0x6018, 0x007e, 0x611a, | ||
112 | 0x23b8, 0x1078, 0x1a92, 0x1078, 0x33ba, 0x017f, 0x0078, 0x11b9, | ||
113 | 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x11b2, 0x2011, 0x3547, 0x2204, | ||
114 | 0x2112, 0x007e, 0x1078, 0x1ab4, 0x017f, 0x0078, 0x11b9, 0x71c4, | ||
115 | 0xa182, 0x0010, 0x00c8, 0x11b2, 0x2011, 0x3548, 0x2204, 0x007e, | ||
116 | 0x2112, 0x1078, 0x1aa3, 0x017f, 0x0078, 0x11b9, 0x71c4, 0x72c8, | ||
117 | 0xa184, 0xfffd, 0x00c0, 0x11b1, 0xa284, 0xfffd, 0x00c0, 0x11b1, | ||
118 | 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x11b8, | ||
119 | 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, | ||
120 | 0x3600, 0x2019, 0x0000, 0x72c8, 0x6800, 0x007e, 0xa226, 0x0040, | ||
121 | 0x13cf, 0x6a02, 0xa484, 0x2000, 0x0040, 0x13b8, 0xa39d, 0x0010, | ||
122 | 0xa484, 0x1000, 0x0040, 0x13be, 0xa39d, 0x0008, 0xa484, 0x4000, | ||
123 | 0x0040, 0x13cf, 0x810f, 0xa284, 0x4000, 0x0040, 0x13cb, 0x1078, | ||
124 | 0x1ad6, 0x0078, 0x13cf, 0x1078, 0x1ac8, 0x0078, 0x13cf, 0x72cc, | ||
125 | 0x82ff, 0x0040, 0x1401, 0x6808, 0xa206, 0x0040, 0x1401, 0xa2a4, | ||
126 | 0x00ff, 0x2061, 0x3540, 0x6118, 0xa186, 0x0028, 0x0040, 0x13e8, | ||
127 | 0xa186, 0x0032, 0x0040, 0x13ee, 0xa186, 0x003c, 0x0040, 0x13f4, | ||
128 | 0xa482, 0x0064, 0x0048, 0x13fe, 0x0078, 0x13f8, 0xa482, 0x0050, | ||
129 | 0x0048, 0x13fe, 0x0078, 0x13f8, 0xa482, 0x0043, 0x0048, 0x13fe, | ||
130 | 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x11b3, 0x6a0a, 0xa39d, | ||
131 | 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x0078, | ||
132 | 0x11b7, 0x77c4, 0x1078, 0x1692, 0x2091, 0x8000, 0x6a14, 0x6b1c, | ||
133 | 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, | ||
134 | 0x11b7, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x11b2, | ||
135 | 0x1078, 0x1ae4, 0x0078, 0x11b7, 0x77c4, 0x1078, 0x1692, 0x2091, | ||
136 | 0x8000, 0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, | ||
137 | 0x0078, 0x11b8, 0x77c4, 0x1078, 0x1692, 0x2091, 0x8000, 0x6a08, | ||
138 | 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1441, 0x1078, | ||
139 | 0x1a19, 0x2091, 0x8001, 0x2708, 0x0078, 0x11b8, 0x77c4, 0x1078, | ||
140 | 0x1692, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, | ||
141 | 0xa005, 0x0040, 0x1455, 0x1078, 0x1a19, 0x2091, 0x8001, 0x2708, | ||
142 | 0x0078, 0x11b8, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, | ||
143 | 0x0020, 0x2091, 0x8000, 0x1078, 0x169f, 0x2091, 0x8001, 0x2708, | ||
144 | 0x6a08, 0x0078, 0x11b8, 0x77c4, 0x72c8, 0x73cc, 0x77c6, 0x72ca, | ||
145 | 0x73ce, 0x1078, 0x1718, 0x00c0, 0x1489, 0x6818, 0xa005, 0x0040, | ||
146 | 0x1483, 0x2708, 0x1078, 0x1af4, 0x00c0, 0x1483, 0x7817, 0xffff, | ||
147 | 0x2091, 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, | ||
148 | 0x11bc, 0x2091, 0x8001, 0x0078, 0x11ba, 0x77c4, 0x77c6, 0x2041, | ||
149 | 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, | ||
150 | 0x169f, 0x2061, 0x3540, 0x60a3, 0x0003, 0x67b6, 0x60a7, 0x0000, | ||
151 | 0x7817, 0xffff, 0x2091, 0x8001, 0x1078, 0x1a19, 0x007c, 0x77c8, | ||
152 | 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2061, | ||
153 | 0x3540, 0x60a3, 0x0002, 0x60a7, 0x0000, 0x67b6, 0x7817, 0xffff, | ||
154 | 0x1078, 0x1a19, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0004, | ||
155 | 0x2051, 0x0010, 0x2091, 0x8000, 0x1078, 0x169f, 0x70c8, 0x6836, | ||
156 | 0x8738, 0xa784, 0x0007, 0x00c0, 0x14c4, 0x2091, 0x8001, 0x007c, | ||
157 | 0x7898, 0xa084, 0x0003, 0x00c0, 0x14f4, 0x2039, 0x0000, 0x2041, | ||
158 | 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, 0x1692, 0x2091, | ||
159 | 0x8000, 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, | ||
160 | 0x0007, 0x00c0, 0x14dd, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, | ||
161 | 0xa784, 0x0f00, 0x00c0, 0x14dd, 0x2091, 0x8000, 0x2069, 0x0100, | ||
162 | 0x6830, 0xa084, 0x0040, 0x0040, 0x151d, 0x684b, 0x0004, 0x20a9, | ||
163 | 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x150a, 0x0070, 0x150a, | ||
164 | 0x0078, 0x1501, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, | ||
165 | 0x0001, 0x0040, 0x1517, 0x0070, 0x1517, 0x0078, 0x150e, 0x20a9, | ||
166 | 0x00fa, 0x0070, 0x151d, 0x0078, 0x1519, 0x2079, 0x3500, 0x7817, | ||
167 | 0x0001, 0x2061, 0x3540, 0x60a3, 0x0001, 0x60a7, 0x0000, 0x60c3, | ||
168 | 0x000f, 0x7898, 0xa085, 0x0002, 0x789a, 0x6808, 0xa084, 0xfffd, | ||
169 | 0x680a, 0x681b, 0x0046, 0x2091, 0x8001, 0x007c, 0x7898, 0xa084, | ||
170 | 0xfffd, 0x789a, 0xa084, 0x0001, 0x00c0, 0x1540, 0x1078, 0x1760, | ||
171 | 0x71c4, 0x71c6, 0x794a, 0x007c, 0x74c4, 0x73c8, 0x72cc, 0x74c6, | ||
172 | 0x73ca, 0x72ce, 0x2079, 0x3500, 0x2009, 0x0040, 0x1078, 0x166f, | ||
173 | 0x0040, 0x1586, 0x1078, 0x163f, 0x0040, 0x155a, 0x1078, 0x1678, | ||
174 | 0x0078, 0x1586, 0x6010, 0x2091, 0x8001, 0x7817, 0xffff, 0x2009, | ||
175 | 0x3568, 0x200b, 0x0005, 0x8108, 0x200b, 0x0000, 0x8108, 0x230a, | ||
176 | 0x8108, 0x220a, 0x8108, 0x240a, 0x8108, 0x200a, 0x8108, 0x200b, | ||
177 | 0x0000, 0x8108, 0x2c0a, 0xa02e, 0x2530, 0x0e7e, 0x1078, 0x2f13, | ||
178 | 0x0e7f, 0x6592, 0x65a2, 0x6696, 0x66a6, 0x60ab, 0x0000, 0x60af, | ||
179 | 0x0000, 0x2091, 0x8001, 0x1078, 0x1a19, 0x007c, 0x70c3, 0x4005, | ||
180 | 0x0078, 0x11bd, 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x11ba, | ||
181 | 0x71c4, 0x71c6, 0x2168, 0x0078, 0x1597, 0x2069, 0x1000, 0x690c, | ||
182 | 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1599, 0xa285, | ||
183 | 0x0000, 0x00c0, 0x15a7, 0x70c3, 0x4000, 0x0078, 0x15a9, 0x70c3, | ||
184 | 0x4003, 0x70ca, 0x0078, 0x11bd, 0x71c4, 0x72c8, 0x73cc, 0x2100, | ||
185 | 0xa184, 0xfffc, 0x00c0, 0x11c6, 0x2100, 0x0079, 0x15b7, 0x15ce, | ||
186 | 0x15e3, 0x15e5, 0x15e7, 0x70c3, 0x4003, 0x71ce, 0x72d2, 0x73d6, | ||
187 | 0x0078, 0x15ca, 0x70c3, 0x4000, 0x70cf, 0x0000, 0x70d3, 0x0000, | ||
188 | 0x70d7, 0x0000, 0x77c6, 0x71ca, 0x0078, 0x11ba, 0x2031, 0x15e9, | ||
189 | 0x2624, 0x8630, 0x2412, 0x2204, 0xa446, 0x00c0, 0x15bb, 0xa484, | ||
190 | 0xffff, 0x00c0, 0x15d0, 0x2031, 0x15e9, 0x8210, 0x8319, 0xa384, | ||
191 | 0xffff, 0x00c0, 0x15d0, 0x0078, 0x15c2, 0x0078, 0x15c2, 0x0078, | ||
192 | 0x15c2, 0x5555, 0xaaaa, 0xffff, 0x0000, 0x7960, 0x71c6, 0x71c4, | ||
193 | 0xa182, 0x0003, 0x00c8, 0x11b2, 0x7962, 0x0078, 0x11ba, 0x7960, | ||
194 | 0x71c6, 0x0078, 0x11ba, 0x7954, 0x71c6, 0x71c4, 0x7956, 0x7958, | ||
195 | 0x71ca, 0x71c8, 0x795a, 0x795c, 0x71ce, 0x71cc, 0x795e, 0x0078, | ||
196 | 0x11ba, 0x7954, 0x71c6, 0x7958, 0x71ca, 0x795c, 0x71ce, 0x0078, | ||
197 | 0x11ba, 0x700c, 0xa084, 0x007f, 0x0040, 0x161d, 0x7007, 0x0004, | ||
198 | 0x7004, 0xa084, 0x0004, 0x00c0, 0x1618, 0x7017, 0x0000, 0x7112, | ||
199 | 0x721a, 0x731e, 0x8108, 0x810c, 0x81a9, 0x8c98, 0x20a1, 0x0030, | ||
200 | 0x6080, 0x20a2, 0x53a6, 0x780c, 0xa085, 0x0000, 0x7002, 0x7007, | ||
201 | 0x0001, 0x7108, 0x8104, 0x00c8, 0x1631, 0x7007, 0x0002, 0xa184, | ||
202 | 0x000c, 0x710c, 0xa184, 0x0300, 0x7003, 0x0000, 0x007c, 0x700c, | ||
203 | 0xa084, 0x007f, 0x0040, 0x164b, 0x7007, 0x0004, 0x7004, 0xa084, | ||
204 | 0x0004, 0x00c0, 0x1646, 0x7017, 0x0000, 0x7112, 0x721a, 0x731e, | ||
205 | 0x2099, 0x0030, 0x8108, 0x81ac, 0x780c, 0xa085, 0x0001, 0x7002, | ||
206 | 0x7007, 0x0001, 0x7008, 0x800c, 0x00c8, 0x165a, 0x7007, 0x0002, | ||
207 | 0xa08c, 0x000c, 0x00c0, 0x166c, 0x710c, 0xa184, 0x0300, 0x00c0, | ||
208 | 0x166c, 0x2ca0, 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x7850, | ||
209 | 0xa065, 0x0040, 0x1677, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, | ||
210 | 0x0f7e, 0x2079, 0x3500, 0x7850, 0x2062, 0x2c00, 0x7852, 0x0f7f, | ||
211 | 0x007c, 0x2011, 0x4000, 0x7a52, 0x2019, 0x0410, 0x8319, 0x0040, | ||
212 | 0x168f, 0xa280, 0x002f, 0x2012, 0x2010, 0x0078, 0x1686, 0x2013, | ||
213 | 0x0000, 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784, 0x0007, 0x8003, | ||
214 | 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, 0x3680, 0x007c, 0x1078, | ||
215 | 0x1692, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xffef, | ||
216 | 0xa80d, 0x690a, 0x2009, 0x354f, 0x210c, 0x6804, 0xa005, 0x0040, | ||
217 | 0x16bc, 0xa116, 0x00c0, 0x16bc, 0x2060, 0x6000, 0x6806, 0x017e, | ||
218 | 0x200b, 0x0000, 0x0078, 0x16bf, 0x2009, 0x0000, 0x017e, 0x6804, | ||
219 | 0xa065, 0x0040, 0x16ce, 0x6000, 0x6806, 0x1078, 0x16df, 0x1078, | ||
220 | 0x17cb, 0x6810, 0x8001, 0x6812, 0x00c0, 0x16bf, 0x017f, 0x6902, | ||
221 | 0x6906, 0x007c, 0xa065, 0x0040, 0x16de, 0x6098, 0x609b, 0x0000, | ||
222 | 0x2008, 0x1078, 0x1678, 0x2100, 0x0078, 0x16d2, 0x007c, 0x6003, | ||
223 | 0x0103, 0x20a9, 0x001c, 0xac80, 0x0004, 0x20a0, 0x2001, 0x0000, | ||
224 | 0x40a4, 0x6828, 0x6016, 0x682c, 0x601e, 0x007c, 0x0e7e, 0x2071, | ||
225 | 0x3540, 0x7040, 0xa08c, 0x0080, 0x00c0, 0x16fc, 0xa088, 0x3580, | ||
226 | 0x2d0a, 0x8000, 0x7042, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x2071, | ||
227 | 0x3540, 0x2009, 0x3580, 0x7240, 0x8221, 0x8211, 0x0048, 0x1716, | ||
228 | 0x2104, 0x8108, 0xad06, 0x00c0, 0x1705, 0x8119, 0x211e, 0x8108, | ||
229 | 0x8318, 0x8211, 0x00c8, 0x170e, 0x7442, 0xa006, 0x0e7f, 0x007c, | ||
230 | 0x1078, 0x1692, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065, 0x0040, | ||
231 | 0x175f, 0x0078, 0x1729, 0x2c00, 0x781e, 0x6000, 0xa065, 0x0040, | ||
232 | 0x175f, 0x600c, 0xa306, 0x00c0, 0x1723, 0x6008, 0xa206, 0x00c0, | ||
233 | 0x1723, 0x2c28, 0x2001, 0x354f, 0x2004, 0xac06, 0x0040, 0x175f, | ||
234 | 0x6804, 0xac06, 0x00c0, 0x1746, 0x6000, 0x2060, 0x6806, 0xa005, | ||
235 | 0x00c0, 0x1746, 0x6803, 0x0000, 0x0078, 0x1750, 0x6400, 0x781c, | ||
236 | 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1750, 0x2c00, 0x6802, | ||
237 | 0x2560, 0x1078, 0x16df, 0x6017, 0x0005, 0x601f, 0x0020, 0x1078, | ||
238 | 0x17cb, 0x6810, 0x8001, 0x6812, 0x2001, 0xffff, 0xa005, 0x007c, | ||
239 | 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, | ||
240 | 0x2091, 0x8000, 0x1078, 0x169f, 0x8738, 0xa784, 0x0007, 0x00c0, | ||
241 | 0x176a, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, | ||
242 | 0x00c0, 0x176a, 0x2091, 0x8001, 0x007c, 0x2061, 0x0000, 0x6018, | ||
243 | 0xa084, 0x0001, 0x00c0, 0x178a, 0x78ac, 0x78af, 0x0000, 0xa005, | ||
244 | 0x00c0, 0x178b, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1791, 0x1078, | ||
245 | 0x1ba5, 0x0079, 0x1793, 0x17a3, 0x17a5, 0x17ab, 0x17af, 0x17a3, | ||
246 | 0x17b3, 0x17a3, 0x17a3, 0x17a3, 0x17a3, 0x17b9, 0x17bd, 0x17a3, | ||
247 | 0x17a3, 0x17a3, 0x17a3, 0x1078, 0x1ba5, 0x1078, 0x1760, 0x2001, | ||
248 | 0x8001, 0x0078, 0x17c3, 0x2001, 0x8003, 0x0078, 0x17c3, 0x2001, | ||
249 | 0x8004, 0x0078, 0x17c3, 0x1078, 0x1760, 0x2001, 0x8006, 0x0078, | ||
250 | 0x17c3, 0x2001, 0x800c, 0x0078, 0x17c3, 0x1078, 0x1760, 0x2001, | ||
251 | 0x800d, 0x0078, 0x17c3, 0x70c2, 0x2061, 0x0000, 0x601b, 0x0001, | ||
252 | 0x2091, 0x4080, 0x007c, 0x2c04, 0x6082, 0x2c08, 0x2063, 0x0000, | ||
253 | 0x7864, 0x8000, 0x7866, 0x7868, 0xa005, 0x796a, 0x0040, 0x17db, | ||
254 | 0x2c02, 0x0078, 0x17dc, 0x796e, 0x007c, 0x0c7e, 0x2061, 0x3500, | ||
255 | 0x6883, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6064, 0x8000, 0x6066, | ||
256 | 0x6068, 0xa005, 0x616a, 0x0040, 0x17f0, 0x2d02, 0x0078, 0x17f1, | ||
257 | 0x616e, 0x0c7f, 0x007c, 0x1078, 0x1804, 0x0040, 0x1803, 0x0c7e, | ||
258 | 0x6098, 0xa065, 0x0040, 0x17fe, 0x1078, 0x16d2, 0x0c7f, 0x609b, | ||
259 | 0x0000, 0x1078, 0x1678, 0x007c, 0x786c, 0xa065, 0x0040, 0x1816, | ||
260 | 0x2091, 0x8000, 0x7864, 0x8001, 0x7866, 0x2c04, 0x786e, 0xa005, | ||
261 | 0x00c0, 0x1814, 0x786a, 0x8000, 0x2091, 0x8001, 0x007c, 0x7898, | ||
262 | 0xa005, 0x00c0, 0x1865, 0x7974, 0x70d0, 0x0005, 0x0005, 0x72d0, | ||
263 | 0xa206, 0x00c0, 0x181c, 0x2200, 0xa106, 0x00c0, 0x1833, 0x7804, | ||
264 | 0xa005, 0x0040, 0x1865, 0x7807, 0x0000, 0x0068, 0x1865, 0x2091, | ||
265 | 0x4080, 0x0078, 0x1865, 0x1078, 0x166f, 0x0040, 0x1865, 0x7a7c, | ||
266 | 0x7b78, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, 0x0000, 0x2009, | ||
267 | 0x0040, 0x1078, 0x163f, 0x0040, 0x185c, 0x1078, 0x1678, 0x7880, | ||
268 | 0x8000, 0x7882, 0xa086, 0x0002, 0x00c0, 0x1865, 0x2091, 0x8000, | ||
269 | 0x78af, 0x0002, 0x7883, 0x0000, 0x7898, 0xa085, 0x0003, 0x789a, | ||
270 | 0x2091, 0x8001, 0x0078, 0x1865, 0x7883, 0x0000, 0x1078, 0x1992, | ||
271 | 0x6000, 0xa084, 0x0007, 0x0079, 0x1866, 0x007c, 0x186e, 0x187d, | ||
272 | 0x189d, 0x186e, 0x18af, 0x186e, 0x186e, 0x186e, 0x2039, 0x0400, | ||
273 | 0x78a8, 0xa705, 0x78aa, 0x6004, 0xa705, 0x6006, 0x1078, 0x18ed, | ||
274 | 0x6018, 0x78a6, 0x1078, 0x197a, 0x007c, 0x78a8, 0xa084, 0x0100, | ||
275 | 0x0040, 0x1884, 0x0078, 0x186e, 0x78ab, 0x0000, 0x6000, 0x8007, | ||
276 | 0xa084, 0x00ff, 0x789e, 0x8001, 0x609b, 0x0000, 0x0040, 0x189a, | ||
277 | 0x1078, 0x18ed, 0x0040, 0x189a, 0x78a8, 0xa085, 0x0100, 0x78aa, | ||
278 | 0x0078, 0x189c, 0x1078, 0x1911, 0x007c, 0x78a8, 0xa08c, 0x0e00, | ||
279 | 0x00c0, 0x18a6, 0xa084, 0x0100, 0x00c0, 0x18a8, 0x0078, 0x186e, | ||
280 | 0x1078, 0x18ed, 0x00c0, 0x18ae, 0x1078, 0x1911, 0x007c, 0x78a8, | ||
281 | 0xa084, 0x0100, 0x0040, 0x18b6, 0x0078, 0x186e, 0x78ab, 0x0000, | ||
282 | 0x6710, 0x20a9, 0x0001, 0x6014, 0xa084, 0x00ff, 0xa005, 0x0040, | ||
283 | 0x18d3, 0xa7bc, 0xff00, 0x20a9, 0x0008, 0xa08e, 0x0001, 0x0040, | ||
284 | 0x18d3, 0x2039, 0x0000, 0x20a9, 0x0080, 0xa08e, 0x0002, 0x0040, | ||
285 | 0x18d3, 0x0078, 0x18ea, 0x1078, 0x1692, 0x2d00, 0x2091, 0x8000, | ||
286 | 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde, 0x680a, | ||
287 | 0x2d00, 0xa080, 0x0010, 0x2068, 0x2091, 0x8001, 0x0070, 0x18ea, | ||
288 | 0x0078, 0x18d6, 0x1078, 0x1678, 0x007c, 0x78a0, 0xa06d, 0x00c0, | ||
289 | 0x18f8, 0x2c00, 0x78a2, 0x78a6, 0x609b, 0x0000, 0x0078, 0x1904, | ||
290 | 0x2c00, 0x689a, 0x609b, 0x0000, 0x78a2, 0x2d00, 0x6002, 0x78a4, | ||
291 | 0xad06, 0x00c0, 0x1904, 0x6002, 0x789c, 0x8001, 0x789e, 0x00c0, | ||
292 | 0x1910, 0x78a8, 0xa084, 0x0000, 0x78aa, 0x78a4, 0x2060, 0xa006, | ||
293 | 0x007c, 0xa02e, 0x2530, 0x6118, 0xa184, 0x0060, 0x619e, 0x0040, | ||
294 | 0x191d, 0x0e7e, 0x1078, 0x2f13, 0x0e7f, 0x6592, 0x65a2, 0x6696, | ||
295 | 0x66a6, 0x60ab, 0x0000, 0x60af, 0x0000, 0x6710, 0x1078, 0x1692, | ||
296 | 0x2091, 0x8000, 0x6808, 0xa084, 0x0001, 0x0040, 0x193f, 0x2091, | ||
297 | 0x8001, 0x1078, 0x16df, 0x2091, 0x8000, 0x1078, 0x17cb, 0x2091, | ||
298 | 0x8001, 0x78a3, 0x0000, 0x78a7, 0x0000, 0x0078, 0x1979, 0x6020, | ||
299 | 0xa096, 0x0001, 0x00c0, 0x1946, 0x8000, 0x6022, 0x6a10, 0x6814, | ||
300 | 0x2091, 0x8001, 0xa202, 0x0048, 0x1955, 0x0040, 0x1955, 0x2039, | ||
301 | 0x0200, 0x1078, 0x197a, 0x0078, 0x1979, 0x2c08, 0x2091, 0x8000, | ||
302 | 0x6800, 0xa065, 0x0040, 0x195d, 0x6102, 0x6902, 0x00c0, 0x1961, | ||
303 | 0x6906, 0x2160, 0x6003, 0x0000, 0x6810, 0x8000, 0x6812, 0x2091, | ||
304 | 0x8001, 0x6808, 0xa08c, 0x0040, 0x0040, 0x1973, 0xa086, 0x0040, | ||
305 | 0x680a, 0x1078, 0x16ee, 0x1078, 0x1a19, 0x78a7, 0x0000, 0x78a3, | ||
306 | 0x0000, 0x007c, 0x6004, 0xa705, 0x6006, 0x2091, 0x8000, 0x1078, | ||
307 | 0x17cb, 0x2091, 0x8001, 0x78a4, 0xa065, 0x0040, 0x198d, 0x6098, | ||
308 | 0x78a6, 0x609b, 0x0000, 0x0078, 0x197d, 0x78a3, 0x0000, 0x78a7, | ||
309 | 0x0000, 0x007c, 0x7970, 0x7874, 0x8000, 0xa10a, 0x00c8, 0x1999, | ||
310 | 0xa006, 0x7876, 0x70d2, 0x7804, 0xa005, 0x0040, 0x19a7, 0x8001, | ||
311 | 0x7806, 0x00c0, 0x19a7, 0x0068, 0x19a7, 0x2091, 0x4080, 0x007c, | ||
312 | 0x0068, 0x19c2, 0x2029, 0x0000, 0x786c, 0xa065, 0x0040, 0x19bd, | ||
313 | 0x1078, 0x19c3, 0x0040, 0x19bd, 0x057e, 0x1078, 0x19d9, 0x057f, | ||
314 | 0x00c0, 0x19bd, 0x8528, 0x0078, 0x19ac, 0x85ff, 0x0040, 0x19c2, | ||
315 | 0x2091, 0x4080, 0x007c, 0x7b84, 0x7988, 0x72d4, 0x0005, 0x0005, | ||
316 | 0x70d4, 0xa206, 0x00c0, 0x19c5, 0x2200, 0xa102, 0x00c0, 0x19d3, | ||
317 | 0x2300, 0xa005, 0x007c, 0x0048, 0x19d7, 0xa302, 0x007c, 0x8002, | ||
318 | 0x007c, 0x1078, 0x1a0b, 0x2009, 0x001c, 0x6024, 0xa005, 0x0040, | ||
319 | 0x19e3, 0x2009, 0x0040, 0x1078, 0x1611, 0x0040, 0x19fc, 0x7894, | ||
320 | 0x8000, 0x7896, 0xa086, 0x0002, 0x00c0, 0x1a0a, 0x2091, 0x8000, | ||
321 | 0x78af, 0x0003, 0x7897, 0x0000, 0x7898, 0xa085, 0x0300, 0x789a, | ||
322 | 0x2091, 0x8001, 0x0078, 0x1a0a, 0x7897, 0x0000, 0x1078, 0x17f3, | ||
323 | 0x7984, 0x7888, 0x8000, 0xa10a, 0x00c8, 0x1a07, 0xa006, 0x788a, | ||
324 | 0x70d6, 0xa006, 0x007c, 0x8107, 0x8004, 0x8004, 0x7a90, 0x7b8c, | ||
325 | 0xa210, 0xa399, 0x0000, 0x007c, 0x2009, 0x3568, 0x2091, 0x8000, | ||
326 | 0x200a, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3540, 0x2091, 0x8000, | ||
327 | 0x2104, 0xa086, 0x0000, 0x00c0, 0x1a34, 0x2009, 0x3512, 0x2104, | ||
328 | 0xa005, 0x00c0, 0x1a34, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x1a34, | ||
329 | 0x0018, 0x1a34, 0x781b, 0x0044, 0x2091, 0x8001, 0x0f7f, 0x007c, | ||
330 | 0x127e, 0x2091, 0x2300, 0x2071, 0x3540, 0x2079, 0x0100, 0x2019, | ||
331 | 0x2dd8, 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040, 0x1a50, 0x789a, | ||
332 | 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318, 0x0078, 0x1a43, | ||
333 | 0x789b, 0x0020, 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, 0x0220, | ||
334 | 0x0070, 0x1a5c, 0x0078, 0x1a54, 0x7003, 0x0000, 0x1078, 0x1b5b, | ||
335 | 0x7004, 0xa084, 0x000f, 0xa085, 0x6280, 0x7806, 0x780f, 0x9200, | ||
336 | 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x0038, 0x7047, 0x357f, | ||
337 | 0x7043, 0x0000, 0x127f, 0x2000, 0x007c, 0xa18c, 0x000f, 0x2011, | ||
338 | 0x0101, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x1078, 0x1b5b, | ||
339 | 0x007c, 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x0070, 0x1a8a, | ||
340 | 0x0078, 0x1a85, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, | ||
341 | 0x2012, 0x007c, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x0070, | ||
342 | 0x1a9b, 0x0078, 0x1a96, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, | ||
343 | 0xa205, 0x200a, 0x007c, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, | ||
344 | 0x0070, 0x1aac, 0x0078, 0x1aa7, 0xa18c, 0xf000, 0x2204, 0xa084, | ||
345 | 0x0fff, 0xa105, 0x2012, 0x007c, 0x2011, 0x0102, 0x2204, 0xa084, | ||
346 | 0xffcf, 0xa105, 0x2012, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, | ||
347 | 0x0c7e, 0x2061, 0x0100, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, | ||
348 | 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, | ||
349 | 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, | ||
350 | 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa085, | ||
351 | 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, | ||
352 | 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0x62ae, 0x2010, 0x60a4, | ||
353 | 0x63ae, 0x2018, 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, | ||
354 | 0x6818, 0xa005, 0x0040, 0x1b39, 0x2061, 0x3f80, 0x1078, 0x1b41, | ||
355 | 0x0040, 0x1b27, 0x20a9, 0x0000, 0x2061, 0x3e80, 0x0c7e, 0x1078, | ||
356 | 0x1b41, 0x0040, 0x1b13, 0x0c7f, 0x8c60, 0x0070, 0x1b11, 0x0078, | ||
357 | 0x1b06, 0x0078, 0x1b39, 0x007f, 0xa082, 0x3e80, 0x2071, 0x3540, | ||
358 | 0x70ba, 0x601c, 0xa085, 0x0800, 0x601e, 0x71b6, 0x60a7, 0x0000, | ||
359 | 0x2001, 0x0004, 0x70a2, 0x1078, 0x1a14, 0x0078, 0x1b35, 0x2071, | ||
360 | 0x3540, 0x601c, 0xa085, 0x0800, 0x601e, 0x71b6, 0x60a7, 0x0000, | ||
361 | 0x2001, 0x0006, 0x70a2, 0x1078, 0x1a14, 0x2001, 0x0000, 0x0078, | ||
362 | 0x1b3b, 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, | ||
363 | 0x007c, 0x2c04, 0xa005, 0x0040, 0x1b58, 0x2060, 0x600c, 0xa306, | ||
364 | 0x00c0, 0x1b55, 0x6008, 0xa206, 0x00c0, 0x1b55, 0x6010, 0xa106, | ||
365 | 0x00c0, 0x1b55, 0xa006, 0x0078, 0x1b5a, 0x6000, 0x0078, 0x1b42, | ||
366 | 0xa085, 0x0001, 0x007c, 0x2011, 0x3541, 0x220c, 0xa18c, 0x000f, | ||
367 | 0x2011, 0x013b, 0x2204, 0xa084, 0x0100, 0x0040, 0x1b6a, 0x2021, | ||
368 | 0xff80, 0x2122, 0x007c, 0x0e7e, 0x68e4, 0xa08c, 0x0020, 0x0040, | ||
369 | 0x1ba3, 0xa084, 0x0006, 0x00c0, 0x1ba3, 0x6010, 0x8007, 0xa084, | ||
370 | 0x000f, 0x8003, 0x8003, 0x8003, 0xa0f0, 0x3600, 0x7004, 0xa084, | ||
371 | 0x000a, 0x00c0, 0x1ba3, 0x7108, 0xa194, 0xff00, 0x0040, 0x1ba3, | ||
372 | 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106, 0x0040, 0x1b96, 0x2001, | ||
373 | 0x0032, 0xa106, 0x0040, 0x1b9a, 0x0078, 0x1b9e, 0x2009, 0x0020, | ||
374 | 0x0078, 0x1ba0, 0x2009, 0x003f, 0x0078, 0x1ba0, 0x2011, 0x0000, | ||
375 | 0x2100, 0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068, 0x1ba5, 0x007e, | ||
376 | 0x2071, 0x0000, 0x7018, 0xa084, 0x0001, 0x00c0, 0x1baa, 0x007f, | ||
377 | 0x2e08, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, | ||
378 | 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x007f, 0x2070, | ||
379 | 0x007f, 0x0078, 0x1bc1, 0x107e, 0x007e, 0x127e, 0x2091, 0x2300, | ||
380 | 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0xa594, 0x003f, 0xa484, 0x4000, | ||
381 | 0x0040, 0x1bd8, 0xa784, 0x007c, 0x00c0, 0x2d9c, 0x1078, 0x1ba5, | ||
382 | 0xa49c, 0x000f, 0xa382, 0x0004, 0x0050, 0x1be0, 0x1078, 0x1ba5, | ||
383 | 0x8507, 0xa084, 0x000f, 0x0079, 0x1be5, 0x1fea, 0x209a, 0x20c0, | ||
384 | 0x22e6, 0x256b, 0x25b3, 0x25ea, 0x2665, 0x26bf, 0x2744, 0x1c0b, | ||
385 | 0x1bf5, 0x1e53, 0x1f1d, 0x254a, 0x1bf5, 0x1078, 0x1ba5, 0x0018, | ||
386 | 0x1bc8, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7003, | ||
387 | 0x0000, 0x703f, 0x0000, 0x7030, 0xa005, 0x0040, 0x1c09, 0x7033, | ||
388 | 0x0000, 0x0018, 0x1bc8, 0x705c, 0xa005, 0x00c0, 0x1cb6, 0x70a0, | ||
389 | 0xa084, 0x0007, 0x0079, 0x1c14, 0x1cd6, 0x1c1c, 0x1c2a, 0x1c4b, | ||
390 | 0x1c71, 0x1c9d, 0x1c9b, 0x1c1c, 0x7808, 0xa084, 0xfffd, 0x780a, | ||
391 | 0x2009, 0x0046, 0x1078, 0x2412, 0x00c0, 0x1c28, 0x7003, 0x0004, | ||
392 | 0x0078, 0x1bf7, 0x1078, 0x2d5e, 0x00c0, 0x1c49, 0x70b4, 0x8007, | ||
393 | 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010, 0x78ab, 0x000c, 0x789b, | ||
394 | 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, 0x2009, 0x00f7, 0x1078, | ||
395 | 0x2410, 0x00c0, 0x1c49, 0x7003, 0x0004, 0x70c3, 0x000f, 0x7033, | ||
396 | 0x3570, 0x0078, 0x1bf7, 0x1078, 0x2d5e, 0x00c0, 0x1c6f, 0x71b4, | ||
397 | 0x8107, 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x0007, | ||
398 | 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, | ||
399 | 0x0002, 0x785b, 0x0004, 0x2009, 0x00f7, 0x1078, 0x2410, 0x00c0, | ||
400 | 0x1c6f, 0x7003, 0x0004, 0x70c3, 0x000f, 0x7033, 0x3570, 0x0078, | ||
401 | 0x1bf7, 0x1078, 0x2d5e, 0x00c0, 0x1c99, 0x71b4, 0x8107, 0x789b, | ||
402 | 0x007e, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x0007, 0xa18d, 0x00c0, | ||
403 | 0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, 0x78ab, 0x000d, 0x789b, | ||
404 | 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009, 0x00f7, 0x1078, | ||
405 | 0x2410, 0x00c0, 0x1c99, 0x7003, 0x0004, 0x70c3, 0x000f, 0x7033, | ||
406 | 0x3570, 0x0078, 0x1bf7, 0x0078, 0x1c4b, 0x1078, 0x2d5e, 0x00c0, | ||
407 | 0x1bf7, 0x70bc, 0x2068, 0x789b, 0x0010, 0x6f10, 0x1078, 0x2ca1, | ||
408 | 0x2c50, 0x6810, 0xa084, 0x0007, 0xa085, 0x0080, 0x78aa, 0x6e18, | ||
409 | 0x2041, 0x0001, 0x2001, 0x0004, 0x0078, 0x1dde, 0x1078, 0x2d5e, | ||
410 | 0x00c0, 0x1bf7, 0x789b, 0x0010, 0x705c, 0x2068, 0x6f10, 0x1078, | ||
411 | 0x2ca1, 0x2c50, 0x6008, 0xa085, 0x0010, 0x600a, 0x6810, 0xa084, | ||
412 | 0x0007, 0xa085, 0x0080, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, | ||
413 | 0x1078, 0x2dc5, 0x2001, 0x0003, 0x0078, 0x1dc9, 0x0018, 0x1bc8, | ||
414 | 0x7440, 0xa485, 0x0000, 0x0040, 0x1cf0, 0xa080, 0x3580, 0x2030, | ||
415 | 0x7144, 0x8108, 0xa12a, 0x0048, 0x1ce7, 0x2009, 0x3580, 0x2164, | ||
416 | 0x6504, 0x85ff, 0x00c0, 0x1cfd, 0x8421, 0x00c0, 0x1ce1, 0x7146, | ||
417 | 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x1bf7, 0x7640, 0xa6b0, | ||
418 | 0x3580, 0x7144, 0x2600, 0x0078, 0x1cec, 0x7146, 0x2568, 0x2558, | ||
419 | 0x753e, 0x2c50, 0x6034, 0xa085, 0x0000, 0x00c0, 0x1cfa, 0x6708, | ||
420 | 0x7736, 0xa784, 0x013f, 0x0040, 0x1d2f, 0xa784, 0x0021, 0x00c0, | ||
421 | 0x1cfa, 0xa784, 0x0002, 0x0040, 0x1d1c, 0xa784, 0x0004, 0x0040, | ||
422 | 0x1cfa, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008, 0x00c0, 0x1cfa, | ||
423 | 0xa784, 0x0010, 0x00c0, 0x1cfa, 0xa784, 0x0100, 0x0040, 0x1d2f, | ||
424 | 0x6018, 0xa005, 0x00c0, 0x1cfa, 0xa7bc, 0xfeff, 0x670a, 0x681f, | ||
425 | 0x0000, 0x6e18, 0xa684, 0x000e, 0x6118, 0x0040, 0x1d3f, 0x601c, | ||
426 | 0xa102, 0x0048, 0x1d42, 0x0040, 0x1d42, 0x0078, 0x1cf6, 0x81ff, | ||
427 | 0x00c0, 0x1cf6, 0xa784, 0x0080, 0x00c0, 0x1d48, 0x700c, 0x6022, | ||
428 | 0xa7bc, 0xff7f, 0x670a, 0x6b10, 0x8307, 0xa084, 0x000f, 0x8003, | ||
429 | 0x8003, 0x8003, 0xa080, 0x3600, 0x2060, 0x2048, 0x704a, 0x6000, | ||
430 | 0x704e, 0x6004, 0x7052, 0x2a60, 0x0018, 0x1bc8, 0x789b, 0x0010, | ||
431 | 0xa046, 0x1078, 0x2d5e, 0x00c0, 0x1bf7, 0x6b10, 0xa39c, 0x0007, | ||
432 | 0xa39d, 0x00c0, 0x704c, 0xa084, 0x8000, 0x0040, 0x1d73, 0xa684, | ||
433 | 0x0001, 0x0040, 0x1d75, 0xa39c, 0xffbf, 0xa684, 0x0010, 0x0040, | ||
434 | 0x1d7b, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, 0x000e, 0x00c0, | ||
435 | 0x1d86, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x1dc7, 0x714c, 0xa18c, | ||
436 | 0x0800, 0x0040, 0x2902, 0x2011, 0x0021, 0x8004, 0x8004, 0x0048, | ||
437 | 0x1d9d, 0x2011, 0x0022, 0x8004, 0x0048, 0x1d9d, 0x2011, 0x0020, | ||
438 | 0x8004, 0x0048, 0x1d9d, 0x0040, 0x1dc7, 0x7aaa, 0x8840, 0x1078, | ||
439 | 0x2d77, 0x6a10, 0x610c, 0x8108, 0xa18c, 0x00ff, 0xa1e0, 0x3e80, | ||
440 | 0x2c64, 0x8cff, 0x0040, 0x1dbe, 0x6010, 0xa206, 0x00c0, 0x1da8, | ||
441 | 0x60b4, 0x8001, 0x60b6, 0x00c0, 0x1da3, 0x0c7e, 0x2a60, 0x6008, | ||
442 | 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078, 0x1cd6, 0x1078, 0x2d5e, | ||
443 | 0x00c0, 0x1bf7, 0x2a60, 0x610e, 0x79aa, 0x8840, 0x712e, 0x2001, | ||
444 | 0x0001, 0x007e, 0x7150, 0xa184, 0x0018, 0x0040, 0x1ddd, 0xa184, | ||
445 | 0x0010, 0x0040, 0x1dd7, 0x1078, 0x2acc, 0x00c0, 0x1ddd, 0xa184, | ||
446 | 0x0008, 0x0040, 0x1ddd, 0x1078, 0x29e6, 0x007f, 0x7002, 0xa68c, | ||
447 | 0x0060, 0x88ff, 0x0040, 0x1de6, 0xa18d, 0x0004, 0x795a, 0x69b2, | ||
448 | 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b, 0x0061, 0x6814, 0xa085, | ||
449 | 0x8000, 0x6816, 0x78aa, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012c, | ||
450 | 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000a, 0x2098, 0x53a6, | ||
451 | 0x147f, 0x137f, 0x157f, 0x6810, 0x8007, 0x789b, 0x007e, 0x78aa, | ||
452 | 0x6d90, 0x7dd6, 0x7dde, 0x6e94, 0x7ed2, 0x7eda, 0x7830, 0xa084, | ||
453 | 0x00c0, 0x00c0, 0x1e15, 0x0098, 0x1e1d, 0x6008, 0xa084, 0xffef, | ||
454 | 0x600a, 0x1078, 0x2d77, 0x0078, 0x1bff, 0x7200, 0xa284, 0x0007, | ||
455 | 0xa086, 0x0001, 0x00c0, 0x1e2a, 0x781b, 0x0049, 0x1078, 0x2d77, | ||
456 | 0x0078, 0x1e3b, 0x6ab0, 0xa295, 0x2000, 0x7a5a, 0x781b, 0x0049, | ||
457 | 0x1078, 0x2d77, 0x7200, 0x2500, 0xa605, 0x0040, 0x1e3b, 0xa284, | ||
458 | 0x0007, 0x1079, 0x1e49, 0xad80, 0x0008, 0x7032, 0xa284, 0x0007, | ||
459 | 0xa086, 0x0001, 0x00c0, 0x1e47, 0x6018, 0x8000, 0x601a, 0x0078, | ||
460 | 0x1bf7, 0x1e51, 0x30f0, 0x30f0, 0x30df, 0x30f0, 0x1e51, 0x1e51, | ||
461 | 0x1e51, 0x1078, 0x1ba5, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, | ||
462 | 0x2079, 0x3500, 0x7898, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x1e79, | ||
463 | 0x70a0, 0xa086, 0x0001, 0x00c0, 0x1e68, 0x70a2, 0x0078, 0x1f01, | ||
464 | 0x70a0, 0xa086, 0x0005, 0x00c0, 0x1e77, 0x70bc, 0x2068, 0x6817, | ||
465 | 0x0004, 0x6813, 0x0000, 0x681c, 0xa085, 0x0008, 0x681e, 0x70a3, | ||
466 | 0x0000, 0x157e, 0x2011, 0x0004, 0x71a0, 0xa186, 0x0001, 0x0040, | ||
467 | 0x1e9b, 0xa186, 0x0007, 0x00c0, 0x1e8b, 0x2009, 0x352b, 0x200b, | ||
468 | 0x0005, 0x0078, 0x1e9b, 0x2009, 0x3513, 0x2104, 0x2009, 0x3512, | ||
469 | 0x200a, 0x2009, 0x352b, 0x200b, 0x0001, 0x70a3, 0x0000, 0x70a7, | ||
470 | 0x0001, 0x0078, 0x1e9d, 0x70a3, 0x0000, 0x1078, 0x2ec7, 0x20a9, | ||
471 | 0x0010, 0x2039, 0x0000, 0x1078, 0x2ba6, 0xa7b8, 0x0100, 0x0070, | ||
472 | 0x1eab, 0x0078, 0x1ea3, 0x7000, 0x2020, 0x0079, 0x1eaf, 0x1edd, | ||
473 | 0x1ec6, 0x1ec6, 0x1eb9, 0x1edd, 0x1edd, 0x1eb7, 0x1eb7, 0x1078, | ||
474 | 0x1ba5, 0x2021, 0x3557, 0x2404, 0xa005, 0x0040, 0x1ec6, 0xad06, | ||
475 | 0x00c0, 0x1ec6, 0x6800, 0x2022, 0x0078, 0x1ed6, 0x681c, 0xa084, | ||
476 | 0x0001, 0x00c0, 0x1ed2, 0x6f10, 0x1078, 0x2ca1, 0x1078, 0x28d9, | ||
477 | 0x0078, 0x1ed6, 0x7054, 0x2060, 0x6800, 0x6002, 0x6a16, 0x681c, | ||
478 | 0xa085, 0x0008, 0x681e, 0x1078, 0x17dd, 0x2021, 0x3f80, 0x1078, | ||
479 | 0x1f07, 0x2021, 0x3557, 0x1078, 0x1f07, 0x20a9, 0x0000, 0x2021, | ||
480 | 0x3e80, 0x1078, 0x1f07, 0x8420, 0x0070, 0x1ef0, 0x0078, 0x1ee9, | ||
481 | 0x20a9, 0x0080, 0x2061, 0x3680, 0x6018, 0x6110, 0xa102, 0x6012, | ||
482 | 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, 0x1f00, 0x0078, 0x1ef4, | ||
483 | 0x157f, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x1bf7, 0x047e, | ||
484 | 0x2404, 0xa005, 0x0040, 0x1f19, 0x2068, 0x6800, 0x007e, 0x6a16, | ||
485 | 0x681c, 0xa085, 0x0008, 0x681e, 0x1078, 0x17dd, 0x007f, 0x0078, | ||
486 | 0x1f09, 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, | ||
487 | 0x1f23, 0x1078, 0x1ba5, 0x2300, 0x0079, 0x1f26, 0x1f29, 0x1f9c, | ||
488 | 0x1faa, 0xa282, 0x0002, 0x0040, 0x1f2f, 0x1078, 0x1ba5, 0x70a0, | ||
489 | 0x70a3, 0x0000, 0x70c3, 0x0000, 0x0079, 0x1f36, 0x1f3e, 0x1f3e, | ||
490 | 0x1f40, 0x1f74, 0x2908, 0x1f3e, 0x1f74, 0x1f3e, 0x1078, 0x1ba5, | ||
491 | 0x77b4, 0x1078, 0x2ba6, 0x77b4, 0xa7bc, 0x0f00, 0x1078, 0x2ca1, | ||
492 | 0x6018, 0xa005, 0x0040, 0x1f6b, 0x2021, 0x3f80, 0x2009, 0x0004, | ||
493 | 0x2011, 0x0010, 0x1078, 0x1fc5, 0x0040, 0x1f6b, 0x157e, 0x20a9, | ||
494 | 0x0000, 0x2021, 0x3e80, 0x047e, 0x2009, 0x0004, 0x2011, 0x0010, | ||
495 | 0x1078, 0x1fc5, 0x047f, 0x0040, 0x1f6a, 0x8420, 0x0070, 0x1f6a, | ||
496 | 0x0078, 0x1f5b, 0x157f, 0x8738, 0xa784, 0x0007, 0x00c0, 0x1f46, | ||
497 | 0x0078, 0x1bff, 0x0078, 0x1bff, 0x77b4, 0x1078, 0x2ca1, 0x6018, | ||
498 | 0xa005, 0x0040, 0x1f9a, 0x2021, 0x3f80, 0x2009, 0x0005, 0x2011, | ||
499 | 0x0020, 0x1078, 0x1fc5, 0x0040, 0x1f9a, 0x157e, 0x20a9, 0x0000, | ||
500 | 0x2021, 0x3e80, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, | ||
501 | 0x1fc5, 0x047f, 0x0040, 0x1f99, 0x8420, 0x0070, 0x1f99, 0x0078, | ||
502 | 0x1f8a, 0x157f, 0x0078, 0x1bff, 0x2200, 0x0079, 0x1f9f, 0x1fa2, | ||
503 | 0x1fa4, 0x1fa4, 0x1078, 0x1ba5, 0x70a3, 0x0000, 0x70a7, 0x0001, | ||
504 | 0x0078, 0x1bf7, 0x2200, 0x0079, 0x1fad, 0x1fb2, 0x1fa4, 0x1fb0, | ||
505 | 0x1078, 0x1ba5, 0x1078, 0x241f, 0x7000, 0xa086, 0x0001, 0x00c0, | ||
506 | 0x28af, 0x1078, 0x28ef, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, | ||
507 | 0x28a2, 0x0040, 0x28af, 0x0078, 0x1cd6, 0x2404, 0xa005, 0x0040, | ||
508 | 0x1fe6, 0x2068, 0x2d04, 0x007e, 0x6810, 0xa706, 0x0040, 0x1fd4, | ||
509 | 0x2d20, 0x007f, 0x0078, 0x1fc6, 0x007f, 0x2022, 0x6916, 0x681c, | ||
510 | 0xa205, 0x681e, 0x1078, 0x17dd, 0x6010, 0x8001, 0x6012, 0x6008, | ||
511 | 0xa084, 0xffef, 0x600a, 0x1078, 0x28ef, 0x007c, 0xa085, 0x0001, | ||
512 | 0x0078, 0x1fe5, 0x2300, 0x0079, 0x1fed, 0x1ff2, 0x1ff0, 0x2035, | ||
513 | 0x1078, 0x1ba5, 0x78e4, 0xa005, 0x00d0, 0x2015, 0x0018, 0x2015, | ||
514 | 0x2008, 0xa084, 0x0030, 0x00c0, 0x2001, 0x781b, 0x0049, 0x0078, | ||
515 | 0x1bf7, 0x78ec, 0xa084, 0x0003, 0x0040, 0x1ffd, 0x2100, 0xa084, | ||
516 | 0x0007, 0x0079, 0x200b, 0x2023, 0x2029, 0x201d, 0x2013, 0x2d58, | ||
517 | 0x2d58, 0x2013, 0x202f, 0x1078, 0x1ba5, 0x7000, 0xa005, 0x0040, | ||
518 | 0x1bff, 0x2001, 0x0003, 0x0078, 0x22fa, 0x1078, 0x2b89, 0x781b, | ||
519 | 0x0055, 0x0078, 0x1bf7, 0x1078, 0x2b89, 0x781b, 0x00dc, 0x0078, | ||
520 | 0x1bf7, 0x1078, 0x2b89, 0x781b, 0x00e3, 0x0078, 0x1bf7, 0x1078, | ||
521 | 0x2b89, 0x781b, 0x009d, 0x0078, 0x1bf7, 0xa584, 0x000f, 0x00c0, | ||
522 | 0x205f, 0x1078, 0x241f, 0x7000, 0x0079, 0x203e, 0x2046, 0x2053, | ||
523 | 0x2046, 0x28af, 0x2048, 0x28af, 0x2046, 0x2046, 0x1078, 0x1ba5, | ||
524 | 0x71a0, 0x70a3, 0x0000, 0xa186, 0x0004, 0x00c0, 0x2051, 0x0078, | ||
525 | 0x2908, 0x0078, 0x28af, 0x1078, 0x28ef, 0x6008, 0xa084, 0xffef, | ||
526 | 0x600a, 0x1078, 0x28a2, 0x0040, 0x28af, 0x0078, 0x1cd6, 0x78e4, | ||
527 | 0xa005, 0x00d0, 0x2015, 0x0018, 0x2015, 0x2008, 0xa084, 0x0030, | ||
528 | 0x00c0, 0x206e, 0x781b, 0x0049, 0x0078, 0x1bf7, 0x78ec, 0xa084, | ||
529 | 0x0003, 0x0040, 0x206a, 0x2100, 0xa184, 0x0007, 0x0079, 0x2078, | ||
530 | 0x2088, 0x208e, 0x2082, 0x2080, 0x2d58, 0x2d58, 0x2080, 0x2d50, | ||
531 | 0x1078, 0x1ba5, 0x1078, 0x2b91, 0x781b, 0x0055, 0x0078, 0x1bf7, | ||
532 | 0x1078, 0x2b91, 0x781b, 0x00dc, 0x0078, 0x1bf7, 0x1078, 0x2b91, | ||
533 | 0x781b, 0x00e3, 0x0078, 0x1bf7, 0x1078, 0x2b91, 0x781b, 0x009d, | ||
534 | 0x0078, 0x1bf7, 0x2300, 0x0079, 0x209d, 0x20a2, 0x20a0, 0x20a4, | ||
535 | 0x1078, 0x1ba5, 0x0078, 0x2665, 0x6817, 0x0008, 0x78a3, 0x0000, | ||
536 | 0x79e4, 0xa184, 0x0030, 0x0040, 0x2665, 0x78ec, 0xa084, 0x0003, | ||
537 | 0x0040, 0x2665, 0xa184, 0x0007, 0x0079, 0x20b6, 0x2023, 0x2029, | ||
538 | 0x201d, 0x2d30, 0x2d58, 0x2d58, 0x20be, 0x2d50, 0x1078, 0x1ba5, | ||
539 | 0xa282, 0x0005, 0x0050, 0x20c6, 0x1078, 0x1ba5, 0x2300, 0x0079, | ||
540 | 0x20c9, 0x20cc, 0x22ce, 0x22da, 0x2200, 0x0079, 0x20cf, 0x20d4, | ||
541 | 0x20d6, 0x20e9, 0x20d4, 0x22b3, 0x1078, 0x1ba5, 0x789b, 0x0018, | ||
542 | 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0048, 0x2b6a, 0xa08a, | ||
543 | 0x0004, 0x00c8, 0x2b6a, 0x0079, 0x20e5, 0x2b6a, 0x2b6a, 0x2b6a, | ||
544 | 0x2b0c, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x20fe, | ||
545 | 0xa184, 0x0018, 0x0040, 0x20fa, 0x0078, 0x2b6a, 0x7000, 0xa005, | ||
546 | 0x00c0, 0x20f4, 0x2011, 0x0003, 0x0078, 0x2752, 0xa184, 0x00ff, | ||
547 | 0xa08a, 0x0010, 0x00c8, 0x2b6a, 0x0079, 0x2106, 0x2118, 0x2116, | ||
548 | 0x212e, 0x2130, 0x21c2, 0x2b6a, 0x2b6a, 0x21c4, 0x2b6a, 0x2b6a, | ||
549 | 0x22af, 0x22af, 0x2b6a, 0x2b6a, 0x2b6a, 0x22b1, 0x1078, 0x1ba5, | ||
550 | 0xa684, 0x1000, 0x0040, 0x2125, 0x2001, 0x0300, 0x8000, 0x8000, | ||
551 | 0x783a, 0x781b, 0x009a, 0x0078, 0x1bf7, 0x6814, 0xa084, 0x8000, | ||
552 | 0x0040, 0x212c, 0x6817, 0x0003, 0x0078, 0x2d30, 0x1078, 0x1ba5, | ||
553 | 0x691c, 0x691e, 0xa684, 0x1800, 0x00c0, 0x214a, 0x681c, 0xa084, | ||
554 | 0x0001, 0x00c0, 0x2152, 0x6814, 0xa086, 0x0008, 0x00c0, 0x2142, | ||
555 | 0x6817, 0x0000, 0xa684, 0x0400, 0x0040, 0x21be, 0x781b, 0x0058, | ||
556 | 0x0078, 0x1bf7, 0xa684, 0x1000, 0x0040, 0x2152, 0x781b, 0x0058, | ||
557 | 0x0078, 0x1bf7, 0xa684, 0x0060, 0x0040, 0x21ba, 0xa684, 0x0800, | ||
558 | 0x0040, 0x21ba, 0xa684, 0x8000, 0x00c0, 0x2160, 0x0078, 0x217a, | ||
559 | 0xa6b4, 0x7fff, 0x7e5a, 0x6eb2, 0x789b, 0x0074, 0x7aac, 0x79ac, | ||
560 | 0x78ac, 0x801b, 0x00c8, 0x216d, 0x8000, 0xa084, 0x003f, 0xa108, | ||
561 | 0xa291, 0x0000, 0x6b94, 0x2100, 0xa302, 0x68ae, 0x6b90, 0x2200, | ||
562 | 0xa303, 0x68aa, 0xa684, 0x4000, 0x0040, 0x2182, 0xa6b4, 0xbfff, | ||
563 | 0x7e5a, 0x6eb2, 0x7000, 0xa086, 0x0003, 0x00c0, 0x218f, 0x1078, | ||
564 | 0x2f3a, 0x1078, 0x30df, 0x781b, 0x0067, 0x0078, 0x1bf7, 0xa006, | ||
565 | 0x1078, 0x3194, 0x6aac, 0x69a8, 0x6c94, 0x6b90, 0x2200, 0xa105, | ||
566 | 0x0040, 0x219e, 0x2200, 0xa422, 0x2100, 0xa31b, 0x7cd2, 0x7bd6, | ||
567 | 0x2300, 0xa405, 0x00c0, 0x21ac, 0xa6b5, 0x4000, 0x7e5a, 0x6eb2, | ||
568 | 0x781b, 0x0067, 0x0078, 0x1bf7, 0x781b, 0x0067, 0x2200, 0xa115, | ||
569 | 0x00c0, 0x21b6, 0x1078, 0x30f0, 0x0078, 0x1bf7, 0x1078, 0x311d, | ||
570 | 0x0078, 0x1bf7, 0x781b, 0x006a, 0x0078, 0x1bf7, 0x781b, 0x0058, | ||
571 | 0x0078, 0x1bf7, 0x1078, 0x1ba5, 0x0078, 0x2221, 0x691c, 0xa184, | ||
572 | 0x0100, 0x0040, 0x21dc, 0xa18c, 0xfeff, 0x691e, 0x0c7e, 0x7048, | ||
573 | 0x2060, 0x6000, 0xa084, 0xefff, 0x6002, 0x6004, 0xa084, 0xfff5, | ||
574 | 0x6006, 0x0c7f, 0x0078, 0x2210, 0xa184, 0x0200, 0x0040, 0x2210, | ||
575 | 0xa18c, 0xfdff, 0x691e, 0x0c7e, 0x7048, 0x2060, 0x6000, 0xa084, | ||
576 | 0xdfff, 0x6002, 0x6004, 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, | ||
577 | 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2210, 0x1078, 0x2c9d, 0x1078, | ||
578 | 0x29e6, 0x88ff, 0x0040, 0x2210, 0x789b, 0x0060, 0x2800, 0x78aa, | ||
579 | 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x220c, | ||
580 | 0x781b, 0x0055, 0x0078, 0x1bf7, 0x781b, 0x0069, 0x0078, 0x1bf7, | ||
581 | 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2219, 0x781b, 0x0058, 0x0078, | ||
582 | 0x1bf7, 0x781b, 0x006a, 0x0078, 0x1bf7, 0x0078, 0x2b70, 0x0078, | ||
583 | 0x2b70, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x0040, 0x221f, | ||
584 | 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0, | ||
585 | 0x2244, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x223c, | ||
586 | 0x0048, 0x223c, 0x0078, 0x223e, 0x0078, 0x21c6, 0x24a8, 0x7aa8, | ||
587 | 0x00f0, 0x223e, 0x0078, 0x222a, 0xa284, 0x00f0, 0xa086, 0x0020, | ||
588 | 0x00c0, 0x22a0, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040, 0x2254, | ||
589 | 0x0048, 0x2254, 0x0078, 0x229d, 0xa286, 0x0023, 0x0040, 0x221f, | ||
590 | 0x6818, 0xa084, 0xfff1, 0x681a, 0x7e58, 0xa684, 0xfff1, 0xa085, | ||
591 | 0x0010, 0x2030, 0x7e5a, 0x6008, 0xa085, 0x0010, 0x600a, 0x0c7e, | ||
592 | 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0010, | ||
593 | 0x0040, 0x2278, 0x1078, 0x2c9d, 0x1078, 0x2acc, 0x0078, 0x2287, | ||
594 | 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184, | ||
595 | 0x0008, 0x0040, 0x2210, 0x1078, 0x2c9d, 0x1078, 0x29e6, 0x88ff, | ||
596 | 0x0040, 0x2210, 0x789b, 0x0060, 0x2800, 0x78aa, 0xa6b5, 0x0004, | ||
597 | 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2299, 0x781b, 0x0055, 0x0078, | ||
598 | 0x1bf7, 0x781b, 0x0069, 0x0078, 0x1bf7, 0x7aa8, 0x0078, 0x222a, | ||
599 | 0x8318, 0x2300, 0xa102, 0x0040, 0x22a9, 0x0048, 0x22a9, 0x0078, | ||
600 | 0x222a, 0xa284, 0x0080, 0x00c0, 0x2b76, 0x0078, 0x2b70, 0x0078, | ||
601 | 0x2b76, 0x0078, 0x2b6a, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, | ||
602 | 0xa08e, 0x0001, 0x0040, 0x22be, 0x1078, 0x1ba5, 0x7aa8, 0xa294, | ||
603 | 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x2b6a, | ||
604 | 0x0079, 0x22ca, 0x2b6a, 0x2939, 0x2b6a, 0x2a67, 0xa282, 0x0000, | ||
605 | 0x00c0, 0x22d4, 0x1078, 0x1ba5, 0x1078, 0x2b89, 0x781b, 0x0069, | ||
606 | 0x0078, 0x1bf7, 0xa282, 0x0003, 0x00c0, 0x22e0, 0x1078, 0x1ba5, | ||
607 | 0x1078, 0x2b99, 0x781b, 0x0069, 0x0078, 0x1bf7, 0xa282, 0x0004, | ||
608 | 0x0050, 0x22ec, 0x1078, 0x1ba5, 0x2300, 0x0079, 0x22ef, 0x22f2, | ||
609 | 0x23c9, 0x23fa, 0xa286, 0x0003, 0x0040, 0x22f8, 0x1078, 0x1ba5, | ||
610 | 0x2001, 0x0000, 0x703a, 0x7000, 0xa084, 0x0007, 0x0079, 0x2300, | ||
611 | 0x2308, 0x230a, 0x230a, 0x2508, 0x2530, 0x24d2, 0x2308, 0x2308, | ||
612 | 0x1078, 0x1ba5, 0xa684, 0x1000, 0x00c0, 0x2312, 0x1078, 0x2ec7, | ||
613 | 0x0040, 0x23a3, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x235a, 0xa186, | ||
614 | 0x0008, 0x00c0, 0x2329, 0x1078, 0x28ef, 0x6008, 0xa084, 0xffef, | ||
615 | 0x600a, 0x1078, 0x28a2, 0x0040, 0x235a, 0x1078, 0x2ec7, 0x0078, | ||
616 | 0x2341, 0xa186, 0x0028, 0x00c0, 0x235a, 0x1078, 0x2ec7, 0x6008, | ||
617 | 0xa084, 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2341, 0x8001, | ||
618 | 0x601a, 0xa005, 0x0040, 0x2341, 0x8001, 0xa005, 0x0040, 0x2341, | ||
619 | 0x601e, 0x681c, 0xa084, 0x0001, 0x0040, 0x1bff, 0x681c, 0xa084, | ||
620 | 0xfffe, 0x681e, 0x7054, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, | ||
621 | 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2357, 0x6002, 0x6006, | ||
622 | 0x0078, 0x1bff, 0x017e, 0x1078, 0x241f, 0x017f, 0xa684, 0xdf00, | ||
623 | 0x681a, 0x6827, 0x0000, 0x6f10, 0x81ff, 0x0040, 0x23a3, 0xa186, | ||
624 | 0x0002, 0x00c0, 0x239b, 0xa684, 0x0800, 0x00c0, 0x2377, 0xa684, | ||
625 | 0x0060, 0x0040, 0x2377, 0x78d8, 0x7adc, 0x682e, 0x6a2a, 0x8717, | ||
626 | 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xa290, 0x3600, 0xa290, | ||
627 | 0x0000, 0x221c, 0xa384, 0x0100, 0x00c0, 0x2388, 0x0078, 0x238e, | ||
628 | 0x8210, 0x2204, 0xa085, 0x0018, 0x2012, 0x8211, 0xa384, 0x0400, | ||
629 | 0x0040, 0x239b, 0x689c, 0xa084, 0x0100, 0x00c0, 0x239b, 0x1078, | ||
630 | 0x2491, 0x0078, 0x1bff, 0xa186, 0x0018, 0x0040, 0x23a3, 0xa186, | ||
631 | 0x0014, 0x0040, 0x1bff, 0x6912, 0x6814, 0xa084, 0x8000, 0x0040, | ||
632 | 0x23ab, 0x7038, 0x6816, 0xa68c, 0xdf00, 0x691a, 0x1078, 0x28e0, | ||
633 | 0x1078, 0x28ef, 0x00c0, 0x23b8, 0x6008, 0xa084, 0xffef, 0x600a, | ||
634 | 0x681c, 0xa084, 0x0001, 0x00c0, 0x23c1, 0x1078, 0x28d9, 0x0078, | ||
635 | 0x23c5, 0x7054, 0x2060, 0x6800, 0x6002, 0x1078, 0x17dd, 0x0078, | ||
636 | 0x1bff, 0xa282, 0x0004, 0x0048, 0x23cf, 0x1078, 0x1ba5, 0x2200, | ||
637 | 0x0079, 0x23d2, 0x23d6, 0x23d8, 0x23e5, 0x23d8, 0x1078, 0x1ba5, | ||
638 | 0x7000, 0xa086, 0x0005, 0x0040, 0x23e1, 0x1078, 0x2b89, 0x781b, | ||
639 | 0x0069, 0x781b, 0x006a, 0x0078, 0x1bf7, 0x7890, 0x8007, 0x8001, | ||
640 | 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, | ||
641 | 0xa186, 0x0003, 0x0040, 0x23f6, 0x0078, 0x2b6a, 0x781b, 0x006a, | ||
642 | 0x0078, 0x1bf7, 0x681c, 0xa085, 0x0004, 0x681e, 0x82ff, 0x00c0, | ||
643 | 0x2405, 0x1078, 0x2b89, 0x0078, 0x240c, 0x8211, 0x0040, 0x240a, | ||
644 | 0x1078, 0x1ba5, 0x1078, 0x2b99, 0x781b, 0x0069, 0x0078, 0x1bf7, | ||
645 | 0x1078, 0x2d77, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x241c, 0x0018, | ||
646 | 0x241c, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684, | ||
647 | 0x0060, 0x00c0, 0x2429, 0x682f, 0x0000, 0x682b, 0x0000, 0x0078, | ||
648 | 0x2490, 0xa684, 0x0800, 0x00c0, 0x2438, 0x68b0, 0xa084, 0x4800, | ||
649 | 0xa635, 0xa684, 0x0800, 0x00c0, 0x2438, 0x1078, 0x2ec7, 0x007c, | ||
650 | 0xa684, 0x0020, 0x0040, 0x2462, 0x78d0, 0x8003, 0x00c8, 0x2446, | ||
651 | 0xa006, 0x1078, 0x3194, 0x78d4, 0x1078, 0x31f9, 0xa684, 0x4000, | ||
652 | 0x0040, 0x2450, 0x682f, 0x0000, 0x682b, 0x0000, 0x0078, 0x2435, | ||
653 | 0x68b0, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x244a, | ||
654 | 0x7038, 0xa005, 0x00c0, 0x245c, 0x79d8, 0x7adc, 0x692e, 0x6a2a, | ||
655 | 0x0078, 0x2435, 0xa684, 0x4000, 0x0040, 0x246c, 0x682f, 0x0000, | ||
656 | 0x682b, 0x0000, 0x0078, 0x2435, 0x68b0, 0xa084, 0x4800, 0xa635, | ||
657 | 0xa684, 0x4000, 0x00c0, 0x2466, 0x7038, 0xa005, 0x00c0, 0x247a, | ||
658 | 0x703b, 0x0007, 0x79d8, 0x7adc, 0x78d0, 0x80f3, 0x00c8, 0x2481, | ||
659 | 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a2a, | ||
660 | 0x2100, 0xa205, 0x00c0, 0x248e, 0x0078, 0x2435, 0x1078, 0x3194, | ||
661 | 0x007c, 0xa384, 0x0200, 0x0040, 0x2499, 0x6008, 0xa085, 0x0002, | ||
662 | 0x600a, 0x6817, 0x0006, 0x6a28, 0x692c, 0x6a3a, 0x693e, 0x682b, | ||
663 | 0x0300, 0x682f, 0x0000, 0x6833, 0x2000, 0x6893, 0x0000, 0x6897, | ||
664 | 0x0020, 0x7000, 0x0079, 0x24ac, 0x24b4, 0x24b6, 0x24bf, 0x24b4, | ||
665 | 0x24b4, 0x24b4, 0x24b4, 0x24b4, 0x1078, 0x1ba5, 0x681c, 0xa084, | ||
666 | 0x0001, 0x00c0, 0x24bf, 0x1078, 0x28d9, 0x0078, 0x24c5, 0x7054, | ||
667 | 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, 0x2021, 0x3557, 0x2404, | ||
668 | 0xa005, 0x0040, 0x24ce, 0x2020, 0x0078, 0x24c7, 0x2d22, 0x206b, | ||
669 | 0x0000, 0x007c, 0x77b4, 0x1078, 0x2ba6, 0xa7bc, 0x0f00, 0x1078, | ||
670 | 0x2ca1, 0x6018, 0xa005, 0x0040, 0x2501, 0x0d7e, 0x2001, 0x3f90, | ||
671 | 0x2068, 0x0d7f, 0x2021, 0x3f80, 0x2009, 0x0004, 0x2011, 0x0010, | ||
672 | 0x1078, 0x1fc5, 0x0040, 0x2501, 0x157e, 0x20a9, 0x0000, 0x2021, | ||
673 | 0x3e80, 0x047e, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x1fc5, | ||
674 | 0x047f, 0x0040, 0x2500, 0x8420, 0x0070, 0x2500, 0x0078, 0x24f1, | ||
675 | 0x157f, 0x8738, 0xa784, 0x0007, 0x00c0, 0x24d7, 0x0078, 0x1bff, | ||
676 | 0x1078, 0x28e0, 0x1078, 0x28ef, 0x6827, 0x0000, 0x789b, 0x000e, | ||
677 | 0x6f10, 0x6813, 0x0002, 0x1078, 0x31ca, 0xa684, 0x0800, 0x0040, | ||
678 | 0x251d, 0x6918, 0xa18d, 0x2000, 0x691a, 0x6814, 0xa084, 0x8000, | ||
679 | 0x0040, 0x2524, 0x6817, 0x0000, 0x2021, 0x3557, 0x6800, 0x2022, | ||
680 | 0x6a38, 0x693c, 0x6a2a, 0x692e, 0x1078, 0x17dd, 0x0078, 0x1bff, | ||
681 | 0x1078, 0x241f, 0x6827, 0x0000, 0x789b, 0x000e, 0x6f10, 0x1078, | ||
682 | 0x2d7c, 0xa08c, 0x00ff, 0x6912, 0x6814, 0xa084, 0x8000, 0x0040, | ||
683 | 0x2543, 0x7038, 0x6816, 0xa68c, 0xdf00, 0x691a, 0x70a3, 0x0000, | ||
684 | 0x0078, 0x1bff, 0xa006, 0x1078, 0x2ec7, 0x6813, 0x0000, 0x6817, | ||
685 | 0x0001, 0xa68c, 0xdf00, 0x691a, 0x6827, 0x0000, 0x7000, 0x0079, | ||
686 | 0x2559, 0x2561, 0x2563, 0x2563, 0x2565, 0x2565, 0x2565, 0x2561, | ||
687 | 0x2561, 0x1078, 0x1ba5, 0x1078, 0x28ef, 0x6008, 0xa084, 0xffef, | ||
688 | 0x600a, 0x0078, 0x28ba, 0x2300, 0x0079, 0x256e, 0x2571, 0x2573, | ||
689 | 0x25b1, 0x1078, 0x1ba5, 0x7000, 0x0079, 0x2576, 0x257e, 0x2580, | ||
690 | 0x2580, 0x258b, 0x2580, 0x2592, 0x257e, 0x257e, 0x1078, 0x1ba5, | ||
691 | 0xa684, 0x2000, 0x00c0, 0x258b, 0xa6b5, 0x2000, 0x7e5a, 0x1078, | ||
692 | 0x30f0, 0x0078, 0x2d30, 0x6814, 0xa084, 0x8000, 0x0040, 0x2592, | ||
693 | 0x6817, 0x0007, 0x2009, 0x3518, 0x210c, 0xa186, 0x0000, 0x0040, | ||
694 | 0x25a7, 0xa186, 0x0001, 0x0040, 0x25ab, 0x2009, 0x352b, 0x200b, | ||
695 | 0x000b, 0x70a3, 0x0001, 0x781b, 0x0046, 0x0078, 0x1bf7, 0x781b, | ||
696 | 0x00dd, 0x0078, 0x1bf7, 0x2009, 0x352b, 0x200b, 0x000a, 0x0078, | ||
697 | 0x1bf7, 0x1078, 0x1ba5, 0x2300, 0x0079, 0x25b6, 0x25b9, 0x25bb, | ||
698 | 0x25de, 0x1078, 0x1ba5, 0x7000, 0x0079, 0x25be, 0x25c6, 0x25c8, | ||
699 | 0x25c8, 0x25d3, 0x25c8, 0x25da, 0x25c6, 0x25c6, 0x1078, 0x1ba5, | ||
700 | 0xa684, 0x2000, 0x00c0, 0x25d3, 0xa6b5, 0x2000, 0x7e5a, 0x1078, | ||
701 | 0x30f0, 0x0078, 0x2d30, 0x6814, 0xa084, 0x8000, 0x0040, 0x25da, | ||
702 | 0x6817, 0x0007, 0x781b, 0x00e4, 0x0078, 0x1bf7, 0x681c, 0xa085, | ||
703 | 0x0004, 0x681e, 0xa6b5, 0x0800, 0x1078, 0x2b89, 0x781b, 0x0069, | ||
704 | 0x0078, 0x1bf7, 0x2300, 0x0079, 0x25ed, 0x25f0, 0x25f2, 0x25f4, | ||
705 | 0x1078, 0x1ba5, 0x1078, 0x1ba5, 0xa684, 0x0400, 0x00c0, 0x2613, | ||
706 | 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, | ||
707 | 0x785a, 0x79e4, 0xa184, 0x0020, 0x0040, 0x260b, 0x78ec, 0xa084, | ||
708 | 0x0003, 0x00c0, 0x260f, 0x2001, 0x0014, 0x0078, 0x22fa, 0xa184, | ||
709 | 0x0007, 0x0079, 0x264b, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, | ||
710 | 0x79a8, 0x81ff, 0x0040, 0x2649, 0x789b, 0x0010, 0x7ba8, 0xa384, | ||
711 | 0x0001, 0x00c0, 0x263a, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, | ||
712 | 0x262d, 0x2009, 0xfff7, 0x0078, 0x2633, 0xa386, 0x0003, 0x00c0, | ||
713 | 0x263a, 0x2009, 0xffef, 0x0c7e, 0x7048, 0x2060, 0x6004, 0xa104, | ||
714 | 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, | ||
715 | 0x785a, 0x782b, 0x3009, 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff, | ||
716 | 0x691e, 0x0078, 0x2d30, 0x2023, 0x2029, 0x2655, 0x265d, 0x2653, | ||
717 | 0x2653, 0x2653, 0x2d30, 0x1078, 0x1ba5, 0x691c, 0xa18c, 0xfdff, | ||
718 | 0xa18c, 0xfeff, 0x691e, 0x0078, 0x2d38, 0x691c, 0xa18c, 0xfdff, | ||
719 | 0xa18c, 0xfeff, 0x691e, 0x0078, 0x2d30, 0x79e4, 0xa184, 0x0030, | ||
720 | 0x0040, 0x266f, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x2677, 0x6814, | ||
721 | 0xa085, 0x8000, 0x6816, 0x2001, 0x0014, 0x0078, 0x22fa, 0xa184, | ||
722 | 0x0007, 0x0079, 0x267b, 0x2d30, 0x2d30, 0x2683, 0x2d30, 0x2d58, | ||
723 | 0x2d58, 0x2d30, 0x2d30, 0xa684, 0x0400, 0x00c0, 0x26b4, 0x681c, | ||
724 | 0xa084, 0x0001, 0x0040, 0x2d38, 0xa68c, 0x2060, 0xa18c, 0xfffb, | ||
725 | 0x795a, 0x69b2, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, | ||
726 | 0x6814, 0xa085, 0x8000, 0x6816, 0x78aa, 0x157e, 0x137e, 0x147e, | ||
727 | 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000a, | ||
728 | 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6810, 0x8007, 0x789b, | ||
729 | 0x007e, 0x78aa, 0x0078, 0x2d38, 0x6814, 0xa084, 0x8000, 0x0040, | ||
730 | 0x26bb, 0x6817, 0x0008, 0x781b, 0x00d8, 0x0078, 0x1bf7, 0x2300, | ||
731 | 0x0079, 0x26c2, 0x26c7, 0x2742, 0x26c5, 0x1078, 0x1ba5, 0x7000, | ||
732 | 0xa084, 0x0007, 0x0079, 0x26cc, 0x26d4, 0x26d6, 0x26f2, 0x26d4, | ||
733 | 0x26d4, 0x24d2, 0x26d4, 0x26d4, 0x1078, 0x1ba5, 0x691c, 0xa18d, | ||
734 | 0x0001, 0x691e, 0x6800, 0x6006, 0xa005, 0x00c0, 0x26e0, 0x6002, | ||
735 | 0x6818, 0xa084, 0x000e, 0x0040, 0x26ec, 0x7014, 0x68b6, 0x712c, | ||
736 | 0xa188, 0x3e80, 0x0078, 0x26ee, 0x2009, 0x3f80, 0x2104, 0x6802, | ||
737 | 0x2d0a, 0x7156, 0x6eb2, 0xa684, 0x0060, 0x0040, 0x2740, 0xa684, | ||
738 | 0x0800, 0x00c0, 0x2704, 0xa684, 0x7fff, 0x68b2, 0x6890, 0x6894, | ||
739 | 0x1078, 0x2ec7, 0x0078, 0x2740, 0xa684, 0x0020, 0x0040, 0x2716, | ||
740 | 0xa006, 0x1078, 0x3194, 0x78d0, 0x8003, 0x00c8, 0x2712, 0x78d4, | ||
741 | 0x1078, 0x31f9, 0x79d8, 0x7adc, 0x0078, 0x271a, 0x1078, 0x2cae, | ||
742 | 0x1078, 0x3194, 0xa684, 0x8000, 0x0040, 0x2740, 0xa684, 0x7fff, | ||
743 | 0x68b2, 0x789b, 0x0074, 0x1078, 0x2d7c, 0x2010, 0x1078, 0x2d7c, | ||
744 | 0x2008, 0xa684, 0x0020, 0x00c0, 0x2738, 0x1078, 0x2d7c, 0x801b, | ||
745 | 0x00c8, 0x2733, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, | ||
746 | 0x6b94, 0x2100, 0xa302, 0x68ae, 0x6b90, 0x2200, 0xa303, 0x68aa, | ||
747 | 0x0078, 0x1bff, 0x0078, 0x2b76, 0x7033, 0x0000, 0xa282, 0x0005, | ||
748 | 0x0050, 0x274c, 0x1078, 0x1ba5, 0x2300, 0x0079, 0x274f, 0x2752, | ||
749 | 0x275c, 0x277f, 0x2200, 0x0079, 0x2755, 0x275a, 0x2b76, 0x275a, | ||
750 | 0x27a8, 0x27f9, 0x1078, 0x1ba5, 0x7000, 0xa086, 0x0001, 0x00c0, | ||
751 | 0x2769, 0x1078, 0x28ef, 0x1078, 0x2ec7, 0x7034, 0x600a, 0x0078, | ||
752 | 0x276e, 0x7000, 0xa086, 0x0003, 0x0040, 0x2763, 0x7003, 0x0005, | ||
753 | 0x2001, 0x3f90, 0x2068, 0x703e, 0x7032, 0x2200, 0x0079, 0x2778, | ||
754 | 0x2b76, 0x277d, 0x27a8, 0x277d, 0x2b76, 0x1078, 0x1ba5, 0x7000, | ||
755 | 0xa086, 0x0001, 0x00c0, 0x278c, 0x1078, 0x28ef, 0x1078, 0x2ec7, | ||
756 | 0x7034, 0x600a, 0x0078, 0x2791, 0x7000, 0xa086, 0x0003, 0x0040, | ||
757 | 0x2786, 0x7003, 0x0005, 0x2001, 0x3f90, 0x2068, 0x703e, 0x7032, | ||
758 | 0x2200, 0x0079, 0x279b, 0x27a2, 0x27a0, 0x27a2, 0x27a0, 0x27a2, | ||
759 | 0x1078, 0x1ba5, 0x1078, 0x2b99, 0x781b, 0x0069, 0x0078, 0x1bf7, | ||
760 | 0x7000, 0xa086, 0x0001, 0x00c0, 0x27b5, 0x1078, 0x28ef, 0x1078, | ||
761 | 0x2ec7, 0x7034, 0x600a, 0x0078, 0x27ba, 0x7000, 0xa086, 0x0003, | ||
762 | 0x0040, 0x27af, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, | ||
763 | 0x0018, 0x7ca8, 0xa484, 0x0007, 0xa215, 0x2069, 0x3f80, 0x2d04, | ||
764 | 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040, 0x27d5, 0x6810, 0xa206, | ||
765 | 0x0040, 0x27ee, 0x6800, 0x0078, 0x27c8, 0x7003, 0x0005, 0x2001, | ||
766 | 0x3f90, 0x2068, 0x703e, 0x7032, 0x157e, 0x20a9, 0x002f, 0x2003, | ||
767 | 0x0000, 0x8000, 0x0070, 0x27e6, 0x0078, 0x27df, 0x157f, 0x6a12, | ||
768 | 0x68b3, 0x0700, 0x681f, 0x0800, 0x6823, 0x0003, 0x6eb0, 0x7e5a, | ||
769 | 0x681c, 0xa084, 0x0c00, 0x0040, 0x284f, 0x1078, 0x2b91, 0x0078, | ||
770 | 0x284f, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2806, 0x1078, 0x28ef, | ||
771 | 0x1078, 0x2ec7, 0x7034, 0x600a, 0x0078, 0x280b, 0x7000, 0xa086, | ||
772 | 0x0003, 0x0040, 0x2800, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, | ||
773 | 0x789b, 0x0018, 0x7ca8, 0xa484, 0x0007, 0xa215, 0x79a8, 0x79a8, | ||
774 | 0xa18c, 0x00ff, 0xa1e8, 0x3e80, 0x2d04, 0x2d08, 0x7156, 0x2068, | ||
775 | 0xa005, 0x0040, 0x282a, 0x6810, 0xa206, 0x0040, 0x2843, 0x6800, | ||
776 | 0x0078, 0x281d, 0x7003, 0x0005, 0x2001, 0x3f90, 0x2068, 0x703e, | ||
777 | 0x7032, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, | ||
778 | 0x283b, 0x0078, 0x2834, 0x157f, 0x6a12, 0x68b3, 0x0700, 0x681f, | ||
779 | 0x0800, 0x6823, 0x0003, 0x6eb0, 0x7e5a, 0x681c, 0xa084, 0x0c00, | ||
780 | 0x0040, 0x284f, 0x1078, 0x2b8d, 0x7e58, 0x0078, 0x284f, 0x027e, | ||
781 | 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3600, | ||
782 | 0x2060, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0xa684, 0x0060, | ||
783 | 0x0040, 0x2886, 0x6b94, 0x6c90, 0x69a8, 0x68ac, 0xa105, 0x00c0, | ||
784 | 0x2874, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff, 0x7e5a, | ||
785 | 0x1078, 0x30f0, 0x0078, 0x2886, 0x68ac, 0xa31a, 0x2100, 0xa423, | ||
786 | 0x2400, 0xa305, 0x0040, 0x2886, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, | ||
787 | 0x68ac, 0xa6b4, 0xbfff, 0x7e5a, 0x1078, 0x311d, 0x077f, 0x1078, | ||
788 | 0x2ca1, 0x2009, 0x006a, 0xa684, 0x0008, 0x0040, 0x2891, 0x2009, | ||
789 | 0x0069, 0xa6b5, 0x2000, 0x7e5a, 0x791a, 0x2d00, 0x703e, 0x8207, | ||
790 | 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3600, 0x2048, | ||
791 | 0x0078, 0x1bf7, 0x6020, 0xa005, 0x0040, 0x28ae, 0x8001, 0x6022, | ||
792 | 0x6008, 0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, | ||
793 | 0x1078, 0x2ec7, 0x6813, 0x0000, 0x6817, 0x0001, 0x681f, 0x0040, | ||
794 | 0x681b, 0x0100, 0x7000, 0xa084, 0x0007, 0x0079, 0x28bf, 0x28c7, | ||
795 | 0x28c9, 0x28c9, 0x28d5, 0x28d1, 0x28c7, 0x28c7, 0x28c7, 0x1078, | ||
796 | 0x1ba5, 0x1078, 0x28e0, 0x1078, 0x28d9, 0x1078, 0x17dd, 0x0078, | ||
797 | 0x1bff, 0x70a3, 0x0000, 0x0078, 0x1bff, 0x6817, 0x0000, 0x0078, | ||
798 | 0x2508, 0x6800, 0xa005, 0x00c0, 0x28de, 0x6002, 0x6006, 0x007c, | ||
799 | 0x6010, 0xa005, 0x0040, 0x28e9, 0x8001, 0x00d0, 0x28e9, 0x1078, | ||
800 | 0x1ba5, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018, | ||
801 | 0xa005, 0x0040, 0x28f5, 0x8001, 0x601a, 0x007c, 0x1078, 0x2d77, | ||
802 | 0x6817, 0x0018, 0x0078, 0x2926, 0x1078, 0x2d77, 0x6817, 0x0019, | ||
803 | 0x0078, 0x2926, 0x1078, 0x2d77, 0x6817, 0x001a, 0x0078, 0x2926, | ||
804 | 0x77b4, 0x1078, 0x2ca1, 0x71b8, 0xa18c, 0x00ff, 0xa1e8, 0x3e80, | ||
805 | 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x2918, 0x0078, 0x1bff, | ||
806 | 0x6810, 0x72b4, 0xa206, 0x0040, 0x2920, 0x6800, 0x0078, 0x2911, | ||
807 | 0x6800, 0x200a, 0x6817, 0x0005, 0x70bf, 0x0000, 0x1078, 0x28e0, | ||
808 | 0x681c, 0xa084, 0x0001, 0x00c0, 0x292f, 0x1078, 0x28d9, 0x1078, | ||
809 | 0x28ef, 0x681b, 0x0000, 0x681f, 0x0020, 0x1078, 0x17dd, 0x0078, | ||
810 | 0x1bff, 0xa282, 0x0003, 0x00c0, 0x2b6a, 0x7da8, 0xa5ac, 0x00ff, | ||
811 | 0x7ea8, 0xa6b4, 0x00ff, 0x691c, 0xa18d, 0x0080, 0x691e, 0xa184, | ||
812 | 0x0100, 0x0040, 0x2999, 0xa18c, 0xfeff, 0x691e, 0xa6b4, 0x00ff, | ||
813 | 0x0040, 0x2983, 0xa682, 0x000f, 0x0048, 0x295a, 0x0040, 0x295a, | ||
814 | 0x2031, 0x000f, 0x852b, 0x852b, 0x1078, 0x2c24, 0x0040, 0x2964, | ||
815 | 0x1078, 0x2a33, 0x0078, 0x298c, 0x1078, 0x2bdf, 0x0c7e, 0x2960, | ||
816 | 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x2a57, 0x0c7f, 0x691c, | ||
817 | 0xa18d, 0x0100, 0x691e, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, | ||
818 | 0x0400, 0x00c0, 0x297f, 0x781b, 0x0055, 0x0078, 0x1bf7, 0x781b, | ||
819 | 0x0069, 0x0078, 0x1bf7, 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, | ||
820 | 0x6006, 0x1078, 0x2a57, 0x0c7f, 0x7e58, 0xa684, 0x0400, 0x00c0, | ||
821 | 0x2995, 0x781b, 0x0058, 0x0078, 0x1bf7, 0x781b, 0x006a, 0x0078, | ||
822 | 0x1bf7, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c, 0x1000, 0x0040, | ||
823 | 0x29d9, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000f, 0x0048, | ||
824 | 0x29ad, 0x0040, 0x29ad, 0x2011, 0x000f, 0x2600, 0xa202, 0x00c8, | ||
825 | 0x29b2, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, 0x0028, | ||
826 | 0x00c0, 0x29c2, 0xa282, 0x0019, 0x00c8, 0x29c8, 0x2011, 0x0019, | ||
827 | 0x0078, 0x29c8, 0xa282, 0x000c, 0x00c8, 0x29c8, 0x2011, 0x000c, | ||
828 | 0x2200, 0xa502, 0x00c8, 0x29cd, 0x2228, 0x1078, 0x2be3, 0x852b, | ||
829 | 0x852b, 0x1078, 0x2c24, 0x0040, 0x29d9, 0x1078, 0x2a33, 0x0078, | ||
830 | 0x29dd, 0x1078, 0x2bdf, 0x1078, 0x2a57, 0x7858, 0xa085, 0x0004, | ||
831 | 0x785a, 0x0c7f, 0x781b, 0x0069, 0x0078, 0x1bf7, 0x0c7e, 0x2960, | ||
832 | 0x6000, 0xa084, 0x1000, 0x00c0, 0x2a01, 0x6010, 0xa084, 0x000f, | ||
833 | 0x00c0, 0x29fb, 0xa18c, 0x0002, 0x00c0, 0x29fb, 0xa18c, 0xfff5, | ||
834 | 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, | ||
835 | 0x2a23, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, 0x0028, 0x00c0, | ||
836 | 0x2a11, 0xa282, 0x0019, 0x00c8, 0x2a17, 0x2011, 0x0019, 0x0078, | ||
837 | 0x2a17, 0xa282, 0x000c, 0x00c8, 0x2a17, 0x2011, 0x000c, 0x6308, | ||
838 | 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000f, 0x0048, 0x2a23, 0x0040, | ||
839 | 0x2a23, 0x2019, 0x000f, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, | ||
840 | 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x681c, 0xa085, 0x0100, | ||
841 | 0x681e, 0x0c7f, 0x007c, 0x0c7e, 0x7148, 0x2160, 0x2008, 0xa084, | ||
842 | 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, | ||
843 | 0xa084, 0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016, 0x788a, | ||
844 | 0xa6b4, 0x000f, 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605, | ||
845 | 0x600e, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e, | ||
846 | 0x7048, 0x2060, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, | ||
847 | 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x0c7f, 0x007c, 0xa282, | ||
848 | 0x0002, 0x00c0, 0x2b6a, 0x7aa8, 0x691c, 0xa18d, 0x0080, 0x691e, | ||
849 | 0xa184, 0x0200, 0x0040, 0x2aac, 0xa18c, 0xfdff, 0x691e, 0xa294, | ||
850 | 0x00ff, 0xa282, 0x0002, 0x00c8, 0x2b6a, 0x1078, 0x2af3, 0x1078, | ||
851 | 0x2a57, 0xa980, 0x0001, 0x200c, 0x1078, 0x2c9d, 0x1078, 0x29e6, | ||
852 | 0x88ff, 0x0040, 0x2a9f, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, | ||
853 | 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2a9b, 0x781b, | ||
854 | 0x0055, 0x0078, 0x1bf7, 0x781b, 0x0069, 0x0078, 0x1bf7, 0x7e58, | ||
855 | 0xa684, 0x0400, 0x00c0, 0x2aa8, 0x781b, 0x0058, 0x0078, 0x1bf7, | ||
856 | 0x781b, 0x006a, 0x0078, 0x1bf7, 0xa282, 0x0002, 0x00c8, 0x2ab4, | ||
857 | 0xa284, 0x0001, 0x0040, 0x2abe, 0x7148, 0xa188, 0x0000, 0x210c, | ||
858 | 0xa18c, 0x2000, 0x00c0, 0x2abe, 0x2011, 0x0000, 0x1078, 0x2bd1, | ||
859 | 0x1078, 0x2af3, 0x1078, 0x2a57, 0x7858, 0xa085, 0x0004, 0x785a, | ||
860 | 0x781b, 0x0069, 0x0078, 0x1bf7, 0x0c7e, 0x027e, 0x2960, 0x6000, | ||
861 | 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x2ae3, 0x6014, 0xa084, | ||
862 | 0x0040, 0x00c0, 0x2ae1, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, | ||
863 | 0x2af0, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, | ||
864 | 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x681c, 0xa085, 0x0200, 0x681e, | ||
865 | 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040, | ||
866 | 0x2afb, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, | ||
867 | 0xa084, 0xffbf, 0xa205, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084, | ||
868 | 0xffef, 0x6006, 0x0c7f, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, | ||
869 | 0x0040, 0x2b15, 0x007f, 0x0078, 0x2b18, 0x007f, 0x0078, 0x2b66, | ||
870 | 0xa684, 0x0020, 0x0040, 0x2b66, 0x7888, 0xa084, 0x0040, 0x0040, | ||
871 | 0x2b66, 0x78a8, 0x8001, 0x0040, 0x2b25, 0x7bb8, 0xa384, 0x003f, | ||
872 | 0x831b, 0x00c8, 0x2b2c, 0x8000, 0xa005, 0x0040, 0x2b4d, 0x831b, | ||
873 | 0x00c8, 0x2b35, 0x8001, 0x0040, 0x2b62, 0xa006, 0x1078, 0x3194, | ||
874 | 0x78b4, 0x1078, 0x31f9, 0x0078, 0x2b66, 0xa684, 0x4000, 0x0040, | ||
875 | 0x2b4d, 0x78b8, 0x801b, 0x00c8, 0x2b46, 0x8000, 0xa084, 0x003f, | ||
876 | 0x00c0, 0x2b62, 0xa6b4, 0xbfff, 0x7e5a, 0x79d8, 0x7adc, 0x2001, | ||
877 | 0x0001, 0xa108, 0x00c8, 0x2b56, 0xa291, 0x0000, 0x79d2, 0x79da, | ||
878 | 0x7ad6, 0x7ade, 0x1078, 0x3194, 0x781b, 0x0067, 0x1078, 0x305e, | ||
879 | 0x0078, 0x1bf7, 0x781b, 0x0067, 0x0078, 0x1bf7, 0x781b, 0x006a, | ||
880 | 0x0078, 0x1bf7, 0x1078, 0x2b9d, 0x781b, 0x0069, 0x0078, 0x1bf7, | ||
881 | 0x1078, 0x2b89, 0x781b, 0x0069, 0x0078, 0x1bf7, 0x6823, 0x0002, | ||
882 | 0x1078, 0x2b91, 0x691c, 0xa18d, 0x0020, 0x691e, 0x6814, 0xa084, | ||
883 | 0x8000, 0x0040, 0x2b85, 0x6817, 0x0005, 0x781b, 0x0069, 0x0078, | ||
884 | 0x1bf7, 0x2001, 0x0005, 0x0078, 0x2b9f, 0x2001, 0x000c, 0x0078, | ||
885 | 0x2b9f, 0x2001, 0x0006, 0x0078, 0x2b9f, 0x2001, 0x000d, 0x0078, | ||
886 | 0x2b9f, 0x2001, 0x0009, 0x0078, 0x2b9f, 0x2001, 0x0007, 0x789b, | ||
887 | 0x007f, 0x78aa, 0xa6b5, 0x0008, 0x7e5a, 0x007c, 0x077e, 0x873f, | ||
888 | 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0, 0x3600, 0xa7b8, | ||
889 | 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040, 0x2bbf, 0xa184, | ||
890 | 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, 0x0008, 0x6006, 0x8738, | ||
891 | 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040, 0x2bcf, 0xa184, | ||
892 | 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0010, 0x6006, 0x077f, | ||
893 | 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, | ||
894 | 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, 0x007c, 0x2031, | ||
895 | 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, | ||
896 | 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, 0x789b, 0x0060, 0x78ab, | ||
897 | 0x0005, 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, | ||
898 | 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0, 0x2001, 0x3546, | ||
899 | 0x2004, 0xa082, 0x0028, 0x0040, 0x2c0d, 0x2021, 0x2c84, 0x2019, | ||
900 | 0x0014, 0x20a9, 0x000c, 0x0078, 0x2c13, 0x2021, 0x2c90, 0x2019, | ||
901 | 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, 0x2404, 0xa084, 0xfff0, | ||
902 | 0xa106, 0x0040, 0x2c22, 0x8420, 0x2300, 0xa210, 0x0070, 0x2c22, | ||
903 | 0x0078, 0x2c15, 0x157f, 0x007c, 0x157e, 0x2011, 0x3546, 0x2214, | ||
904 | 0xa282, 0x0032, 0x0048, 0x2c38, 0x0040, 0x2c3c, 0x2021, 0x2c76, | ||
905 | 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x0078, 0x2c4c, | ||
906 | 0xa282, 0x0028, 0x0040, 0x2c44, 0x2021, 0x2c84, 0x2019, 0x0014, | ||
907 | 0x20a9, 0x000c, 0x0078, 0x2c4a, 0x2021, 0x2c90, 0x2019, 0x0019, | ||
908 | 0x20a9, 0x000d, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x2c5c, | ||
909 | 0x0048, 0x2c5c, 0x8420, 0x2300, 0xa210, 0x0070, 0x2c59, 0x0078, | ||
910 | 0x2c4c, 0x157f, 0xa006, 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8, | ||
911 | 0x2c65, 0x7808, 0xa085, 0x0070, 0x780a, 0x78ec, 0xa084, 0x0300, | ||
912 | 0x0040, 0x2c73, 0x2404, 0xa09e, 0x1201, 0x00c0, 0x2c73, 0x2001, | ||
913 | 0x2101, 0x0078, 0x2c74, 0x2404, 0xa005, 0x007c, 0x1201, 0x3002, | ||
914 | 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, | ||
915 | 0x7a06, 0x0a07, 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202, | ||
916 | 0x7202, 0x6605, 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05, | ||
917 | 0x2202, 0x3202, 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604, | ||
918 | 0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046, | ||
919 | 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784, 0x0007, 0x8003, 0x8003, | ||
920 | 0x8003, 0x8003, 0xa105, 0xa0e0, 0x3680, 0x007c, 0x79d8, 0x7adc, | ||
921 | 0x78d0, 0x801b, 0x00c8, 0x2cb5, 0x8000, 0xa084, 0x003f, 0xa108, | ||
922 | 0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3540, | ||
923 | 0x2091, 0x8000, 0x2104, 0x0079, 0x2cc5, 0x2cf7, 0x2ccf, 0x2ccf, | ||
924 | 0x2ccf, 0x2ccf, 0x2ccf, 0x2ccd, 0x2ccd, 0x1078, 0x1ba5, 0x784b, | ||
925 | 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0, 0x2cd1, 0x784b, 0x0008, | ||
926 | 0x7848, 0xa084, 0x0008, 0x00c0, 0x2cd8, 0x68b0, 0xa085, 0x4000, | ||
927 | 0x68b2, 0x7858, 0xa085, 0x4000, 0x785a, 0x7830, 0xa084, 0x0080, | ||
928 | 0x00c0, 0x2cf7, 0x0018, 0x2cf7, 0x6818, 0xa084, 0x0020, 0x00c0, | ||
929 | 0x2cf5, 0x781b, 0x00dd, 0x0078, 0x2cf7, 0x781b, 0x00e4, 0x2091, | ||
930 | 0x8001, 0x0f7f, 0x007c, 0x0c7e, 0x6810, 0x8007, 0xa084, 0x000f, | ||
931 | 0x8003, 0x8003, 0x8003, 0xa0e0, 0x3600, 0x6004, 0xa084, 0x000a, | ||
932 | 0x00c0, 0x2d2e, 0x6108, 0xa194, 0xff00, 0x0040, 0x2d2e, 0xa18c, | ||
933 | 0x00ff, 0x2001, 0x0019, 0xa106, 0x0040, 0x2d1d, 0x2001, 0x0032, | ||
934 | 0xa106, 0x0040, 0x2d21, 0x0078, 0x2d25, 0x2009, 0x0020, 0x0078, | ||
935 | 0x2d27, 0x2009, 0x003f, 0x0078, 0x2d27, 0x2011, 0x0000, 0x2100, | ||
936 | 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x0c7f, 0x007c, | ||
937 | 0x781b, 0x006a, 0x0078, 0x1bf7, 0x781b, 0x0069, 0x0078, 0x1bf7, | ||
938 | 0x781b, 0x0058, 0x0078, 0x1bf7, 0x781b, 0x0055, 0x0078, 0x1bf7, | ||
939 | 0x781b, 0x00dd, 0x0078, 0x1bf7, 0x781b, 0x00dc, 0x0078, 0x1bf7, | ||
940 | 0x781b, 0x00e4, 0x0078, 0x1bf7, 0x781b, 0x00e3, 0x0078, 0x1bf7, | ||
941 | 0x781b, 0x009e, 0x0078, 0x1bf7, 0x781b, 0x009d, 0x0078, 0x1bf7, | ||
942 | 0x70a3, 0x0001, 0x781b, 0x0046, 0x0078, 0x1bf7, 0x007e, 0x7830, | ||
943 | 0xa084, 0x00c0, 0x00c0, 0x2d75, 0x7808, 0xa084, 0xfffd, 0x780a, | ||
944 | 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, | ||
945 | 0x2d75, 0x7808, 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0x7808, | ||
946 | 0xa085, 0x0002, 0x780a, 0x007c, 0x7830, 0xa084, 0x0040, 0x00c0, | ||
947 | 0x2d7c, 0x0098, 0x2d85, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, | ||
948 | 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, | ||
949 | 0x0040, 0x2d94, 0x0098, 0x2d92, 0x78ac, 0x007e, 0x7808, 0xa085, | ||
950 | 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, 0x0070, 0x0040, 0x2da8, | ||
951 | 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x1b6b, 0x2d78, 0x2c68, 0x0c7f, | ||
952 | 0x6817, 0x0003, 0x7858, 0xa084, 0x3f00, 0x681a, 0x682f, 0x0000, | ||
953 | 0x682b, 0x0000, 0x784b, 0x0008, 0x78e4, 0xa005, 0x00d0, 0x2015, | ||
954 | 0xa084, 0x0020, 0x0040, 0x2015, 0x78ec, 0xa084, 0x0003, 0x0040, | ||
955 | 0x2015, 0x0018, 0x2015, 0x0078, 0x2b70, 0x0c7e, 0x6810, 0x8007, | ||
956 | 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3600, 0x2060, | ||
957 | 0x2048, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0x0c7f, 0x007c, | ||
958 | 0x0020, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
959 | 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
960 | 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
961 | 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, | ||
962 | 0x0000, 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9847, 0x0014, | ||
963 | 0x0014, 0x98f5, 0x98e7, 0x0014, 0x0014, 0x0080, 0x00bf, 0x0100, | ||
964 | 0x0402, 0x2008, 0xf880, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, | ||
965 | 0xa200, 0x8838, 0x817e, 0x842a, 0x84a0, 0x3806, 0x8839, 0x28c2, | ||
966 | 0x9cc3, 0xa805, 0x0864, 0xa83b, 0x3008, 0x28c1, 0x9cc3, 0xa201, | ||
967 | 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, | ||
968 | 0xa808, 0x28e2, 0x9ca0, 0xa8f3, 0x0864, 0xa829, 0x300c, 0xa801, | ||
969 | 0x3008, 0x28e1, 0x9ca0, 0x280d, 0xa204, 0x64c0, 0x67a0, 0x6fc0, | ||
970 | 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa80f, 0x786e, 0x883e, | ||
971 | 0xa80c, 0x282b, 0xa205, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b, | ||
972 | 0x7023, 0x8576, 0x8677, 0xa801, 0x883e, 0x2069, 0x28c1, 0x9cc3, | ||
973 | 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8dc, 0xa207, 0x0014, 0xa203, | ||
974 | 0x8000, 0x84a8, 0x85a4, 0x1872, 0x849a, 0x883c, 0x1fe2, 0xf601, | ||
975 | 0xa208, 0x856e, 0x866f, 0x0704, 0x3008, 0x9ca0, 0x0014, 0xa202, | ||
976 | 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf848, 0x8174, 0x86eb, | ||
977 | 0x85eb, 0x872e, 0x87a9, 0x883f, 0x08e6, 0xa8f1, 0xf861, 0xa8e8, | ||
978 | 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, | ||
979 | 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, | ||
980 | 0x1fe6, 0x0014, 0xa206, 0x6865, 0x817f, 0x842a, 0x1dc1, 0x8823, | ||
981 | 0x0016, 0x6042, 0x8008, 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, | ||
982 | 0xf021, 0x3008, 0x84a8, 0x1dc6, 0x20d7, 0x8822, 0x0016, 0x8000, | ||
983 | 0x2848, 0x1011, 0xa8fc, 0x3008, 0x8000, 0xa000, 0x2802, 0x1011, | ||
984 | 0xa8fd, 0xa887, 0x3008, 0x283d, 0x1011, 0xa8fd, 0xa209, 0x0017, | ||
985 | 0x300c, 0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, 0x26e0, 0x873a, | ||
986 | 0xfaa2, 0x19f2, 0x1fe2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x817e, | ||
987 | 0x842a, 0x84a0, 0x3806, 0x0210, 0x9ccd, 0x0704, 0x0000, 0x127e, | ||
988 | 0x2091, 0x2200, 0x2049, 0x2ec7, 0x7000, 0x7204, 0xa205, 0x720c, | ||
989 | 0xa215, 0x7008, 0xa084, 0xfffd, 0xa205, 0x0040, 0x2ed9, 0x0078, | ||
990 | 0x2ede, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084, | ||
991 | 0x0001, 0x00c0, 0x2f0c, 0x7108, 0x8104, 0x00c8, 0x2eeb, 0x1078, | ||
992 | 0x2fa8, 0x0078, 0x2ee3, 0x700c, 0xa08c, 0x007f, 0x0040, 0x2f0c, | ||
993 | 0x7004, 0x8004, 0x00c8, 0x2f03, 0x7014, 0xa005, 0x00c0, 0x2eff, | ||
994 | 0x7010, 0xa005, 0x0040, 0x2f03, 0xa102, 0x00c8, 0x2ee3, 0x7007, | ||
995 | 0x0010, 0x0078, 0x2f0c, 0x8aff, 0x0040, 0x2f0c, 0x1078, 0x316b, | ||
996 | 0x00c0, 0x2f06, 0x0040, 0x2ee3, 0x1078, 0x2f56, 0x7003, 0x0000, | ||
997 | 0x127f, 0x2000, 0x007c, 0x6424, 0x84ff, 0x0040, 0x2f30, 0x2c70, | ||
998 | 0x2039, 0x2f35, 0x2704, 0xae68, 0x680c, 0xa630, 0x6808, 0xa529, | ||
999 | 0x8421, 0x0040, 0x2f30, 0x8738, 0x2704, 0xa005, 0x00c0, 0x2f1b, | ||
1000 | 0x7098, 0xa075, 0x0040, 0x2f30, 0x2039, 0x2f32, 0x0078, 0x2f1a, | ||
1001 | 0x007c, 0x0000, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, | ||
1002 | 0x001c, 0x0000, 0x127e, 0x2091, 0x2200, 0x2079, 0x3500, 0x2071, | ||
1003 | 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2071, | ||
1004 | 0x0020, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2049, | ||
1005 | 0x0000, 0x78b3, 0x0000, 0x127f, 0x2000, 0x007c, 0x2049, 0x2f56, | ||
1006 | 0x7004, 0x8004, 0x00c8, 0x2f82, 0x7007, 0x0012, 0x7108, 0x7008, | ||
1007 | 0xa106, 0x00c0, 0x2f5e, 0xa184, 0x0030, 0x0040, 0x2f6b, 0xa086, | ||
1008 | 0x0030, 0x00c0, 0x2f5e, 0x7000, 0xa084, 0x0001, 0x00c0, 0x2f82, | ||
1009 | 0x7008, 0xa084, 0x000c, 0x00c0, 0x2f80, 0x710c, 0xa184, 0x0300, | ||
1010 | 0x00c0, 0x2f80, 0xa184, 0x007f, 0x00c0, 0x2f56, 0x0078, 0x2f82, | ||
1011 | 0x6817, 0x0003, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, | ||
1012 | 0x0008, 0x00c0, 0x2f86, 0x7007, 0x0012, 0x7108, 0x8104, 0x0048, | ||
1013 | 0x2f8b, 0x78b3, 0x0000, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, | ||
1014 | 0x107e, 0x007e, 0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, | ||
1015 | 0x2fa8, 0x157f, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, | ||
1016 | 0x7204, 0x2118, 0x7108, 0x700c, 0xa084, 0x0300, 0x00c0, 0x2fea, | ||
1017 | 0xa184, 0x000c, 0x00c0, 0x2fea, 0x8213, 0x8213, 0x8213, 0x8213, | ||
1018 | 0xa284, 0x0100, 0xa10d, 0x810b, 0x810b, 0x810f, 0xa184, 0x0007, | ||
1019 | 0x0079, 0x2fc2, 0x2fcc, 0x2fdc, 0x2fea, 0x2fdc, 0x2ffe, 0x2ffe, | ||
1020 | 0x2fea, 0x2ffc, 0x1078, 0x1ba5, 0x7007, 0x0002, 0x8aff, 0x00c0, | ||
1021 | 0x2fd5, 0x2049, 0x0000, 0x0078, 0x2fd9, 0x1078, 0x316b, 0x00c0, | ||
1022 | 0x2fd5, 0x78b3, 0x0000, 0x007c, 0x7007, 0x0002, 0x8aff, 0x00c0, | ||
1023 | 0x2fe3, 0x0078, 0x2fe7, 0x1078, 0x316b, 0x00c0, 0x2fe3, 0x78b3, | ||
1024 | 0x0000, 0x007c, 0x7007, 0x0002, 0x1078, 0x2f56, 0x1078, 0x2cbb, | ||
1025 | 0x6814, 0xa084, 0x8000, 0x0040, 0x2ff7, 0x6817, 0x0002, 0x007c, | ||
1026 | 0x1078, 0x1ba5, 0x1078, 0x1ba5, 0x1078, 0x3050, 0x7210, 0x7114, | ||
1027 | 0x700c, 0xa09c, 0x007f, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, | ||
1028 | 0x78b0, 0xa005, 0x0040, 0x3010, 0x78b3, 0x0000, 0x0078, 0x3033, | ||
1029 | 0x1078, 0x3050, 0x2704, 0x2c58, 0xac60, 0x630c, 0x2200, 0xa322, | ||
1030 | 0x6308, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x3029, 0x00c8, | ||
1031 | 0x3029, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, | ||
1032 | 0x3010, 0x2b60, 0x8a07, 0xa7ba, 0x2f32, 0xa73d, 0x2c00, 0x6882, | ||
1033 | 0x6f86, 0x6c8e, 0x6b8a, 0x7007, 0x0012, 0x1078, 0x2f56, 0x007c, | ||
1034 | 0x8738, 0x2704, 0xa005, 0x00c0, 0x3044, 0x6098, 0xa005, 0x0040, | ||
1035 | 0x304d, 0x2060, 0x2039, 0x2f32, 0x8a51, 0x0040, 0x304c, 0x7008, | ||
1036 | 0xa084, 0x00c0, 0xa086, 0x00c0, 0x007c, 0x2051, 0x0000, 0x007c, | ||
1037 | 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x305d, 0x2039, 0x2f38, | ||
1038 | 0x6000, 0xa064, 0x00c0, 0x305d, 0x2d60, 0x007c, 0x127e, 0x0d7e, | ||
1039 | 0x2091, 0x2200, 0x0d7f, 0x6880, 0x2060, 0x6884, 0x6b88, 0x6c8c, | ||
1040 | 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0xa0b8, 0x2f32, 0x7e08, | ||
1041 | 0xa6b5, 0x000c, 0x6818, 0xa084, 0x0040, 0x0040, 0x3079, 0xa6b5, | ||
1042 | 0x0001, 0x0f7e, 0x2079, 0x0100, 0x7858, 0x0f7f, 0xa084, 0x0040, | ||
1043 | 0x0040, 0x3088, 0xa684, 0x0001, 0x00c0, 0x3088, 0xa6b5, 0x0001, | ||
1044 | 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x308a, 0x7000, | ||
1045 | 0xa005, 0x0040, 0x3095, 0x1078, 0x1ba5, 0x2400, 0xa305, 0x00c0, | ||
1046 | 0x309b, 0x0078, 0x30d8, 0x2c58, 0x2704, 0xac60, 0x6004, 0xa400, | ||
1047 | 0x007e, 0x701a, 0x6000, 0xa301, 0x701e, 0x2009, 0x04fd, 0x2104, | ||
1048 | 0xa086, 0x04fd, 0x007f, 0x00c0, 0x30c8, 0xa084, 0x0001, 0x0040, | ||
1049 | 0x30c8, 0xa684, 0x0001, 0x00c0, 0x30c8, 0x7013, 0x0001, 0x7017, | ||
1050 | 0x0000, 0x7602, 0x7007, 0x0001, 0x78b3, 0x0001, 0xa4a0, 0x0001, | ||
1051 | 0xa399, 0x0000, 0x6004, 0xa400, 0x701a, 0x6000, 0xa301, 0x701e, | ||
1052 | 0x620c, 0x2400, 0xa202, 0x7012, 0x6208, 0x2300, 0xa203, 0x7016, | ||
1053 | 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x3038, 0x0078, 0x30da, | ||
1054 | 0x1078, 0x316b, 0x00c0, 0x30d8, 0x127f, 0x2000, 0x007c, 0x127e, | ||
1055 | 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xa084, | ||
1056 | 0x0004, 0x00c0, 0x30e6, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, | ||
1057 | 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, 0x30f0, 0x7007, | ||
1058 | 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x30f9, 0x7000, 0xa005, | ||
1059 | 0x0040, 0x3104, 0x1078, 0x1ba5, 0x7e08, 0xa6b5, 0x000c, 0x6818, | ||
1060 | 0xa084, 0x0040, 0x0040, 0x310e, 0xa6b5, 0x0001, 0x6824, 0xa005, | ||
1061 | 0x0040, 0x311a, 0x2050, 0x2039, 0x2f35, 0x2d60, 0x1078, 0x316b, | ||
1062 | 0x00c0, 0x3116, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e, | ||
1063 | 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5, | ||
1064 | 0x000c, 0x6818, 0xa084, 0x0040, 0x0040, 0x3130, 0xa6b5, 0x0001, | ||
1065 | 0x2049, 0x311d, 0x6824, 0xa055, 0x0040, 0x3168, 0x2d70, 0x2e60, | ||
1066 | 0x2039, 0x2f35, 0x2704, 0xae68, 0x680c, 0xa422, 0x6808, 0xa31b, | ||
1067 | 0x0048, 0x3155, 0x8a51, 0x00c0, 0x3147, 0x1078, 0x1ba5, 0x8738, | ||
1068 | 0x2704, 0xa005, 0x00c0, 0x313b, 0x7098, 0xa075, 0x2060, 0x0040, | ||
1069 | 0x3168, 0x2039, 0x2f32, 0x0078, 0x313a, 0x8422, 0x8420, 0x831a, | ||
1070 | 0xa399, 0x0000, 0x690c, 0x2400, 0xa122, 0x6908, 0x2300, 0xa11b, | ||
1071 | 0x00c8, 0x3164, 0x1078, 0x1ba5, 0x2071, 0x0020, 0x0078, 0x3088, | ||
1072 | 0x127f, 0x2000, 0x007c, 0x7008, 0xa084, 0x00c0, 0xa086, 0x00c0, | ||
1073 | 0x0040, 0x3193, 0x2704, 0xac08, 0x2104, 0x701e, 0x8108, 0x2104, | ||
1074 | 0x701a, 0x8108, 0x2104, 0x7016, 0x8108, 0x2104, 0x7012, 0x0f7e, | ||
1075 | 0x2079, 0x0100, 0x7858, 0x0f7f, 0xa084, 0x0040, 0x0040, 0x318e, | ||
1076 | 0xa684, 0x0001, 0x00c0, 0x318e, 0xa6b5, 0x0001, 0x7602, 0x7007, | ||
1077 | 0x0001, 0x1078, 0x3038, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, | ||
1078 | 0x2200, 0x2049, 0x3194, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x00c0, | ||
1079 | 0x00c0, 0x31aa, 0x6824, 0xa005, 0x0040, 0x31ba, 0x0078, 0x2ede, | ||
1080 | 0x0078, 0x31ba, 0x7108, 0x8104, 0x00c8, 0x31b2, 0x1078, 0x2fa8, | ||
1081 | 0x0078, 0x319d, 0x7007, 0x0010, 0x7108, 0x8104, 0x00c8, 0x31b4, | ||
1082 | 0x1078, 0x2fa8, 0x7008, 0xa086, 0x0002, 0x00c0, 0x319d, 0x7000, | ||
1083 | 0xa005, 0x00c0, 0x319d, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, | ||
1084 | 0x2000, 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0d7e, 0x2091, | ||
1085 | 0x2200, 0x0d7f, 0x2049, 0x31ca, 0xad80, 0x0010, 0x20a0, 0x2099, | ||
1086 | 0x0031, 0x700c, 0xa084, 0x007f, 0x6826, 0x7007, 0x0008, 0x7007, | ||
1087 | 0x0002, 0x7003, 0x0001, 0x0040, 0x31e8, 0x8000, 0x80ac, 0x53a5, | ||
1088 | 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x31ea, 0x2049, | ||
1089 | 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000, | ||
1090 | 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, | ||
1091 | 0x31f9, 0x6880, 0x2060, 0x6884, 0x6b88, 0x6c8c, 0x8057, 0xaad4, | ||
1092 | 0x00ff, 0xa084, 0x00ff, 0xa0b8, 0x2f32, 0x7e08, 0xa6b5, 0x0004, | ||
1093 | 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x3212, 0x2c58, | ||
1094 | 0x2704, 0xac60, 0x6004, 0xa400, 0x701a, 0x6000, 0xa301, 0x701e, | ||
1095 | 0x7013, 0x0001, 0x7017, 0x0000, 0x7602, 0x7007, 0x0001, 0x007f, | ||
1096 | 0x8007, 0x2009, 0x0031, 0x200a, 0x00a0, 0x322c, 0x7108, 0x7007, | ||
1097 | 0x0002, 0x810c, 0x00c8, 0x322c, 0x810c, 0x0048, 0x3239, 0x0078, | ||
1098 | 0x2fea, 0xa4a0, 0x0001, 0xa399, 0x0000, 0x6b8a, 0x6c8e, 0x7007, | ||
1099 | 0x0004, 0x2049, 0x0000, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, | ||
1100 | 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x3251, | ||
1101 | 0xa200, 0x00f0, 0x324c, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9, | ||
1102 | 0x0010, 0xa005, 0x0040, 0x3277, 0xa11a, 0x00c8, 0x3277, 0x8213, | ||
1103 | 0x818d, 0x0048, 0x326a, 0xa11a, 0x00c8, 0x326b, 0x00f0, 0x325f, | ||
1104 | 0x0078, 0x326f, 0xa11a, 0x2308, 0x8210, 0x00f0, 0x325f, 0x007e, | ||
1105 | 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, | ||
1106 | 0x3200, 0xa085, 0x0800, 0x0078, 0x3273, 0x00e0, 0x32bf, 0x2091, | ||
1107 | 0x6000, 0x7820, 0x8001, 0x7822, 0x00c0, 0x32b9, 0x7824, 0x7822, | ||
1108 | 0x2091, 0x8000, 0x2069, 0x3540, 0x6800, 0xa084, 0x0007, 0x0040, | ||
1109 | 0x32a1, 0xa086, 0x0002, 0x0040, 0x32a1, 0x6830, 0xa00d, 0x0040, | ||
1110 | 0x32a1, 0x2104, 0xa005, 0x0040, 0x32a1, 0x8001, 0x200a, 0x0040, | ||
1111 | 0x336f, 0x2061, 0x3680, 0x20a9, 0x0080, 0x6034, 0xa005, 0x0040, | ||
1112 | 0x32b3, 0x8001, 0x6036, 0x00c0, 0x32b3, 0x6010, 0xa005, 0x0040, | ||
1113 | 0x32b3, 0x1078, 0x1a19, 0xace0, 0x0010, 0x0070, 0x32b9, 0x0078, | ||
1114 | 0x32a5, 0x1078, 0x32d4, 0x1078, 0x32c2, 0x1078, 0x32f9, 0x2091, | ||
1115 | 0x8001, 0x007c, 0x783c, 0x8001, 0x783e, 0x00c0, 0x32d3, 0x7840, | ||
1116 | 0x783e, 0x7848, 0xa005, 0x0040, 0x32d3, 0x8001, 0x784a, 0x00c0, | ||
1117 | 0x32d3, 0x1078, 0x1a19, 0x007c, 0x7834, 0x8001, 0x7836, 0x00c0, | ||
1118 | 0x32f8, 0x7838, 0x7836, 0x2091, 0x8000, 0x7844, 0xa005, 0x00c0, | ||
1119 | 0x32e3, 0x2001, 0x0101, 0x8001, 0x7846, 0xa080, 0x3e80, 0x2040, | ||
1120 | 0x2004, 0xa065, 0x0040, 0x32f8, 0x6020, 0xa005, 0x0040, 0x32f4, | ||
1121 | 0x8001, 0x6022, 0x0040, 0x3328, 0x6000, 0x2c40, 0x0078, 0x32e9, | ||
1122 | 0x007c, 0x7828, 0x8001, 0x782a, 0x00c0, 0x3327, 0x782c, 0x782a, | ||
1123 | 0x7830, 0xa005, 0x00c0, 0x3306, 0x2001, 0x0080, 0x8001, 0x7832, | ||
1124 | 0x8003, 0x8003, 0x8003, 0x8003, 0xa090, 0x3680, 0xa298, 0x0002, | ||
1125 | 0x2304, 0xa084, 0x0008, 0x0040, 0x3327, 0xa290, 0x0009, 0x2204, | ||
1126 | 0xa005, 0x0040, 0x331f, 0x8001, 0x2012, 0x00c0, 0x3327, 0x2304, | ||
1127 | 0xa084, 0xfff7, 0xa085, 0x0080, 0x201a, 0x1078, 0x1a19, 0x007c, | ||
1128 | 0x2069, 0x3540, 0x6800, 0xa005, 0x0040, 0x3332, 0x683c, 0xac06, | ||
1129 | 0x0040, 0x336f, 0x6017, 0x0006, 0x60b0, 0xa084, 0x3f00, 0x601a, | ||
1130 | 0x601c, 0xa084, 0x00ff, 0xa085, 0x0060, 0x601e, 0x6000, 0x2042, | ||
1131 | 0x6710, 0x6fb6, 0x1078, 0x1692, 0x6818, 0xa005, 0x0040, 0x334a, | ||
1132 | 0x8001, 0x681a, 0x6808, 0xa084, 0xffef, 0x680a, 0x6810, 0x8001, | ||
1133 | 0x00d0, 0x3354, 0x1078, 0x1ba5, 0x6812, 0x602f, 0x0000, 0x602b, | ||
1134 | 0x0000, 0x2c68, 0x1078, 0x17dd, 0x2069, 0x3540, 0x2001, 0x0006, | ||
1135 | 0x68a2, 0x7944, 0xa184, 0x0100, 0x00c0, 0x336a, 0x69ba, 0x2001, | ||
1136 | 0x0004, 0x68a2, 0x1078, 0x1a14, 0x2091, 0x8001, 0x007c, 0x2009, | ||
1137 | 0x354f, 0x2164, 0x2069, 0x0100, 0x1078, 0x1b6b, 0x6017, 0x0006, | ||
1138 | 0x6858, 0xa084, 0x3f00, 0x601a, 0x601c, 0xa084, 0x00ff, 0xa085, | ||
1139 | 0x0048, 0x601e, 0x602f, 0x0000, 0x602b, 0x0000, 0x6830, 0xa084, | ||
1140 | 0x0040, 0x0040, 0x33ab, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, | ||
1141 | 0xa084, 0x0004, 0x0040, 0x3398, 0x0070, 0x3398, 0x0078, 0x338f, | ||
1142 | 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, | ||
1143 | 0x33a5, 0x0070, 0x33a5, 0x0078, 0x339c, 0x20a9, 0x00fa, 0x0070, | ||
1144 | 0x33ab, 0x0078, 0x33a7, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, | ||
1145 | 0x0046, 0x2009, 0x3568, 0x200b, 0x0007, 0x784c, 0x784a, 0x2091, | ||
1146 | 0x8001, 0x007c, 0x2079, 0x3500, 0x1078, 0x3403, 0x1078, 0x33cb, | ||
1147 | 0x1078, 0x33e0, 0x1078, 0x33f5, 0x7833, 0x0000, 0x7847, 0x0000, | ||
1148 | 0x784b, 0x0000, 0x007c, 0x2019, 0x000a, 0x2011, 0x3546, 0x2204, | ||
1149 | 0xa086, 0x0032, 0x0040, 0x33dd, 0x2019, 0x000c, 0x2204, 0xa086, | ||
1150 | 0x003c, 0x0040, 0x33dd, 0x2019, 0x0008, 0x7b2a, 0x7b2e, 0x007c, | ||
1151 | 0x2019, 0x0030, 0x2011, 0x3546, 0x2204, 0xa086, 0x0032, 0x0040, | ||
1152 | 0x33f2, 0x2019, 0x0039, 0x2204, 0xa086, 0x003c, 0x0040, 0x33f2, | ||
1153 | 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x000d, 0x2011, | ||
1154 | 0x3546, 0x2204, 0xa086, 0x003c, 0x0040, 0x3400, 0x2019, 0x000a, | ||
1155 | 0x7b3e, 0x7b42, 0x007c, 0x2019, 0x2faf, 0x2011, 0x3546, 0x2204, | ||
1156 | 0xa086, 0x0032, 0x0040, 0x3415, 0x2019, 0x3971, 0x2204, 0xa086, | ||
1157 | 0x003c, 0x0040, 0x3415, 0x2019, 0x2626, 0x7b22, 0x7b26, 0x007c, | ||
1158 | 0x92a7 | ||
1159 | }; | ||
1160 | unsigned short __devinitdata sbus_risc_code_length01 = 0x2419; | ||
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index a2ef03243a2c..166417a6afba 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c | |||
@@ -169,12 +169,10 @@ scsi_pool_alloc_command(struct scsi_host_cmd_pool *pool, gfp_t gfp_mask) | |||
169 | { | 169 | { |
170 | struct scsi_cmnd *cmd; | 170 | struct scsi_cmnd *cmd; |
171 | 171 | ||
172 | cmd = kmem_cache_alloc(pool->cmd_slab, gfp_mask | pool->gfp_mask); | 172 | cmd = kmem_cache_zalloc(pool->cmd_slab, gfp_mask | pool->gfp_mask); |
173 | if (!cmd) | 173 | if (!cmd) |
174 | return NULL; | 174 | return NULL; |
175 | 175 | ||
176 | memset(cmd, 0, sizeof(*cmd)); | ||
177 | |||
178 | cmd->sense_buffer = kmem_cache_alloc(pool->sense_slab, | 176 | cmd->sense_buffer = kmem_cache_alloc(pool->sense_slab, |
179 | gfp_mask | pool->gfp_mask); | 177 | gfp_mask | pool->gfp_mask); |
180 | if (!cmd->sense_buffer) { | 178 | if (!cmd->sense_buffer) { |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 4b13e36d3aa0..d1cb64ad1a3f 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -791,7 +791,22 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) | |||
791 | "%d bytes done.\n", | 791 | "%d bytes done.\n", |
792 | req->nr_sectors, good_bytes)); | 792 | req->nr_sectors, good_bytes)); |
793 | 793 | ||
794 | /* A number of bytes were successfully read. If there | 794 | /* |
795 | * Recovered errors need reporting, but they're always treated | ||
796 | * as success, so fiddle the result code here. For BLOCK_PC | ||
797 | * we already took a copy of the original into rq->errors which | ||
798 | * is what gets returned to the user | ||
799 | */ | ||
800 | if (sense_valid && sshdr.sense_key == RECOVERED_ERROR) { | ||
801 | if (!(req->cmd_flags & REQ_QUIET)) | ||
802 | scsi_print_sense("", cmd); | ||
803 | result = 0; | ||
804 | /* BLOCK_PC may have set error */ | ||
805 | error = 0; | ||
806 | } | ||
807 | |||
808 | /* | ||
809 | * A number of bytes were successfully read. If there | ||
795 | * are leftovers and there is some kind of error | 810 | * are leftovers and there is some kind of error |
796 | * (result != 0), retry the rest. | 811 | * (result != 0), retry the rest. |
797 | */ | 812 | */ |
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index aeab5d9dff27..3fcb64b91c43 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
@@ -1051,12 +1051,6 @@ static int sd_done(struct scsi_cmnd *SCpnt) | |||
1051 | good_bytes = sd_completed_bytes(SCpnt); | 1051 | good_bytes = sd_completed_bytes(SCpnt); |
1052 | break; | 1052 | break; |
1053 | case RECOVERED_ERROR: | 1053 | case RECOVERED_ERROR: |
1054 | /* Inform the user, but make sure that it's not treated | ||
1055 | * as a hard error. | ||
1056 | */ | ||
1057 | scsi_print_sense("sd", SCpnt); | ||
1058 | SCpnt->result = 0; | ||
1059 | memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); | ||
1060 | good_bytes = scsi_bufflen(SCpnt); | 1054 | good_bytes = scsi_bufflen(SCpnt); |
1061 | break; | 1055 | break; |
1062 | case NO_SENSE: | 1056 | case NO_SENSE: |
diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c index c9146d751cbf..4f618f487356 100644 --- a/drivers/scsi/ses.c +++ b/drivers/scsi/ses.c | |||
@@ -264,6 +264,7 @@ struct ses_host_edev { | |||
264 | struct enclosure_device *edev; | 264 | struct enclosure_device *edev; |
265 | }; | 265 | }; |
266 | 266 | ||
267 | #if 0 | ||
267 | int ses_match_host(struct enclosure_device *edev, void *data) | 268 | int ses_match_host(struct enclosure_device *edev, void *data) |
268 | { | 269 | { |
269 | struct ses_host_edev *sed = data; | 270 | struct ses_host_edev *sed = data; |
@@ -280,6 +281,7 @@ int ses_match_host(struct enclosure_device *edev, void *data) | |||
280 | sed->edev = edev; | 281 | sed->edev = edev; |
281 | return 1; | 282 | return 1; |
282 | } | 283 | } |
284 | #endif /* 0 */ | ||
283 | 285 | ||
284 | static void ses_process_descriptor(struct enclosure_component *ecomp, | 286 | static void ses_process_descriptor(struct enclosure_component *ecomp, |
285 | unsigned char *desc) | 287 | unsigned char *desc) |
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index ffc87851f2e8..82312df9b0bf 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c | |||
@@ -1312,8 +1312,10 @@ static void sg_rq_end_io(struct request *rq, int uptodate) | |||
1312 | wake_up_interruptible(&sfp->read_wait); | 1312 | wake_up_interruptible(&sfp->read_wait); |
1313 | kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN); | 1313 | kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN); |
1314 | kref_put(&sfp->f_ref, sg_remove_sfp); | 1314 | kref_put(&sfp->f_ref, sg_remove_sfp); |
1315 | } else | 1315 | } else { |
1316 | execute_in_process_context(sg_rq_end_io_usercontext, &srp->ew); | 1316 | INIT_WORK(&srp->ew.work, sg_rq_end_io_usercontext); |
1317 | schedule_work(&srp->ew.work); | ||
1318 | } | ||
1317 | } | 1319 | } |
1318 | 1320 | ||
1319 | static struct file_operations sg_fops = { | 1321 | static struct file_operations sg_fops = { |
@@ -1656,10 +1658,30 @@ static int sg_start_req(Sg_request *srp, unsigned char *cmd) | |||
1656 | md->null_mapped = hp->dxferp ? 0 : 1; | 1658 | md->null_mapped = hp->dxferp ? 0 : 1; |
1657 | } | 1659 | } |
1658 | 1660 | ||
1659 | if (iov_count) | 1661 | if (iov_count) { |
1660 | res = blk_rq_map_user_iov(q, rq, md, hp->dxferp, iov_count, | 1662 | int len, size = sizeof(struct sg_iovec) * iov_count; |
1661 | hp->dxfer_len, GFP_ATOMIC); | 1663 | struct iovec *iov; |
1662 | else | 1664 | |
1665 | iov = kmalloc(size, GFP_ATOMIC); | ||
1666 | if (!iov) | ||
1667 | return -ENOMEM; | ||
1668 | |||
1669 | if (copy_from_user(iov, hp->dxferp, size)) { | ||
1670 | kfree(iov); | ||
1671 | return -EFAULT; | ||
1672 | } | ||
1673 | |||
1674 | len = iov_length(iov, iov_count); | ||
1675 | if (hp->dxfer_len < len) { | ||
1676 | iov_count = iov_shorten(iov, iov_count, hp->dxfer_len); | ||
1677 | len = hp->dxfer_len; | ||
1678 | } | ||
1679 | |||
1680 | res = blk_rq_map_user_iov(q, rq, md, (struct sg_iovec *)iov, | ||
1681 | iov_count, | ||
1682 | len, GFP_ATOMIC); | ||
1683 | kfree(iov); | ||
1684 | } else | ||
1663 | res = blk_rq_map_user(q, rq, md, hp->dxferp, | 1685 | res = blk_rq_map_user(q, rq, md, hp->dxferp, |
1664 | hp->dxfer_len, GFP_ATOMIC); | 1686 | hp->dxfer_len, GFP_ATOMIC); |
1665 | 1687 | ||
@@ -2079,7 +2101,8 @@ static void sg_remove_sfp(struct kref *kref) | |||
2079 | write_unlock_irqrestore(&sg_index_lock, iflags); | 2101 | write_unlock_irqrestore(&sg_index_lock, iflags); |
2080 | wake_up_interruptible(&sdp->o_excl_wait); | 2102 | wake_up_interruptible(&sdp->o_excl_wait); |
2081 | 2103 | ||
2082 | execute_in_process_context(sg_remove_sfp_usercontext, &sfp->ew); | 2104 | INIT_WORK(&sfp->ew.work, sg_remove_sfp_usercontext); |
2105 | schedule_work(&sfp->ew.work); | ||
2083 | } | 2106 | } |
2084 | 2107 | ||
2085 | static int | 2108 | static int |
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index e7fa3caead79..0e1a0f2d2ad5 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c | |||
@@ -309,15 +309,6 @@ static int sr_done(struct scsi_cmnd *SCpnt) | |||
309 | break; | 309 | break; |
310 | 310 | ||
311 | case RECOVERED_ERROR: | 311 | case RECOVERED_ERROR: |
312 | |||
313 | /* | ||
314 | * An error occured, but it recovered. Inform the | ||
315 | * user, but make sure that it's not treated as a | ||
316 | * hard error. | ||
317 | */ | ||
318 | scsi_print_sense("sr", SCpnt); | ||
319 | SCpnt->result = 0; | ||
320 | SCpnt->sense_buffer[0] = 0x0; | ||
321 | good_bytes = this_count; | 312 | good_bytes = this_count; |
322 | break; | 313 | break; |
323 | 314 | ||
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c index 47b614e8580c..df7f96caa1ca 100644 --- a/drivers/scsi/stex.c +++ b/drivers/scsi/stex.c | |||
@@ -36,11 +36,11 @@ | |||
36 | #include <scsi/scsi_eh.h> | 36 | #include <scsi/scsi_eh.h> |
37 | 37 | ||
38 | #define DRV_NAME "stex" | 38 | #define DRV_NAME "stex" |
39 | #define ST_DRIVER_VERSION "4.6.0000.1" | 39 | #define ST_DRIVER_VERSION "4.6.0000.3" |
40 | #define ST_VER_MAJOR 4 | 40 | #define ST_VER_MAJOR 4 |
41 | #define ST_VER_MINOR 6 | 41 | #define ST_VER_MINOR 6 |
42 | #define ST_OEM 0 | 42 | #define ST_OEM 0 |
43 | #define ST_BUILD_VER 1 | 43 | #define ST_BUILD_VER 3 |
44 | 44 | ||
45 | enum { | 45 | enum { |
46 | /* MU register offset */ | 46 | /* MU register offset */ |
@@ -55,6 +55,13 @@ enum { | |||
55 | OIS = 0x30, /* MU_OUTBOUND_INTERRUPT_STATUS */ | 55 | OIS = 0x30, /* MU_OUTBOUND_INTERRUPT_STATUS */ |
56 | OIM = 0x3c, /* MU_OUTBOUND_INTERRUPT_MASK */ | 56 | OIM = 0x3c, /* MU_OUTBOUND_INTERRUPT_MASK */ |
57 | 57 | ||
58 | YH2I_INT = 0x20, | ||
59 | YINT_EN = 0x34, | ||
60 | YI2H_INT = 0x9c, | ||
61 | YI2H_INT_C = 0xa0, | ||
62 | YH2I_REQ = 0xc0, | ||
63 | YH2I_REQ_HI = 0xc4, | ||
64 | |||
58 | /* MU register value */ | 65 | /* MU register value */ |
59 | MU_INBOUND_DOORBELL_HANDSHAKE = 1, | 66 | MU_INBOUND_DOORBELL_HANDSHAKE = 1, |
60 | MU_INBOUND_DOORBELL_REQHEADCHANGED = 2, | 67 | MU_INBOUND_DOORBELL_REQHEADCHANGED = 2, |
@@ -95,20 +102,14 @@ enum { | |||
95 | TASK_ATTRIBUTE_ORDERED = 0x2, | 102 | TASK_ATTRIBUTE_ORDERED = 0x2, |
96 | TASK_ATTRIBUTE_ACA = 0x4, | 103 | TASK_ATTRIBUTE_ACA = 0x4, |
97 | 104 | ||
98 | /* request count, etc. */ | 105 | SS_STS_NORMAL = 0x80000000, |
99 | MU_MAX_REQUEST = 32, | 106 | SS_STS_DONE = 0x40000000, |
107 | SS_STS_HANDSHAKE = 0x20000000, | ||
100 | 108 | ||
101 | /* one message wasted, use MU_MAX_REQUEST+1 | 109 | SS_HEAD_HANDSHAKE = 0x80, |
102 | to handle MU_MAX_REQUEST messages */ | ||
103 | MU_REQ_COUNT = (MU_MAX_REQUEST + 1), | ||
104 | MU_STATUS_COUNT = (MU_MAX_REQUEST + 1), | ||
105 | 110 | ||
106 | STEX_CDB_LENGTH = 16, | 111 | STEX_CDB_LENGTH = 16, |
107 | REQ_VARIABLE_LEN = 1024, | ||
108 | STATUS_VAR_LEN = 128, | 112 | STATUS_VAR_LEN = 128, |
109 | ST_CAN_QUEUE = MU_MAX_REQUEST, | ||
110 | ST_CMD_PER_LUN = MU_MAX_REQUEST, | ||
111 | ST_MAX_SG = 32, | ||
112 | 113 | ||
113 | /* sg flags */ | 114 | /* sg flags */ |
114 | SG_CF_EOT = 0x80, /* end of table */ | 115 | SG_CF_EOT = 0x80, /* end of table */ |
@@ -120,9 +121,9 @@ enum { | |||
120 | 121 | ||
121 | st_shasta = 0, | 122 | st_shasta = 0, |
122 | st_vsc = 1, | 123 | st_vsc = 1, |
123 | st_vsc1 = 2, | 124 | st_yosemite = 2, |
124 | st_yosemite = 3, | 125 | st_seq = 3, |
125 | st_seq = 4, | 126 | st_yel = 4, |
126 | 127 | ||
127 | PASSTHRU_REQ_TYPE = 0x00000001, | 128 | PASSTHRU_REQ_TYPE = 0x00000001, |
128 | PASSTHRU_REQ_NO_WAKEUP = 0x00000100, | 129 | PASSTHRU_REQ_NO_WAKEUP = 0x00000100, |
@@ -160,26 +161,36 @@ struct st_sgitem { | |||
160 | u8 ctrl; /* SG_CF_xxx */ | 161 | u8 ctrl; /* SG_CF_xxx */ |
161 | u8 reserved[3]; | 162 | u8 reserved[3]; |
162 | __le32 count; | 163 | __le32 count; |
164 | __le64 addr; | ||
165 | }; | ||
166 | |||
167 | struct st_ss_sgitem { | ||
163 | __le32 addr; | 168 | __le32 addr; |
164 | __le32 addr_hi; | 169 | __le32 addr_hi; |
170 | __le32 count; | ||
165 | }; | 171 | }; |
166 | 172 | ||
167 | struct st_sgtable { | 173 | struct st_sgtable { |
168 | __le16 sg_count; | 174 | __le16 sg_count; |
169 | __le16 max_sg_count; | 175 | __le16 max_sg_count; |
170 | __le32 sz_in_byte; | 176 | __le32 sz_in_byte; |
171 | struct st_sgitem table[ST_MAX_SG]; | 177 | }; |
178 | |||
179 | struct st_msg_header { | ||
180 | __le64 handle; | ||
181 | u8 flag; | ||
182 | u8 channel; | ||
183 | __le16 timeout; | ||
184 | u32 reserved; | ||
172 | }; | 185 | }; |
173 | 186 | ||
174 | struct handshake_frame { | 187 | struct handshake_frame { |
175 | __le32 rb_phy; /* request payload queue physical address */ | 188 | __le64 rb_phy; /* request payload queue physical address */ |
176 | __le32 rb_phy_hi; | ||
177 | __le16 req_sz; /* size of each request payload */ | 189 | __le16 req_sz; /* size of each request payload */ |
178 | __le16 req_cnt; /* count of reqs the buffer can hold */ | 190 | __le16 req_cnt; /* count of reqs the buffer can hold */ |
179 | __le16 status_sz; /* size of each status payload */ | 191 | __le16 status_sz; /* size of each status payload */ |
180 | __le16 status_cnt; /* count of status the buffer can hold */ | 192 | __le16 status_cnt; /* count of status the buffer can hold */ |
181 | __le32 hosttime; /* seconds from Jan 1, 1970 (GMT) */ | 193 | __le64 hosttime; /* seconds from Jan 1, 1970 (GMT) */ |
182 | __le32 hosttime_hi; | ||
183 | u8 partner_type; /* who sends this frame */ | 194 | u8 partner_type; /* who sends this frame */ |
184 | u8 reserved0[7]; | 195 | u8 reserved0[7]; |
185 | __le32 partner_ver_major; | 196 | __le32 partner_ver_major; |
@@ -188,7 +199,8 @@ struct handshake_frame { | |||
188 | __le32 partner_ver_build; | 199 | __le32 partner_ver_build; |
189 | __le32 extra_offset; /* NEW */ | 200 | __le32 extra_offset; /* NEW */ |
190 | __le32 extra_size; /* NEW */ | 201 | __le32 extra_size; /* NEW */ |
191 | u32 reserved1[2]; | 202 | __le32 scratch_size; |
203 | u32 reserved1; | ||
192 | }; | 204 | }; |
193 | 205 | ||
194 | struct req_msg { | 206 | struct req_msg { |
@@ -200,7 +212,7 @@ struct req_msg { | |||
200 | u8 data_dir; | 212 | u8 data_dir; |
201 | u8 payload_sz; /* payload size in 4-byte, not used */ | 213 | u8 payload_sz; /* payload size in 4-byte, not used */ |
202 | u8 cdb[STEX_CDB_LENGTH]; | 214 | u8 cdb[STEX_CDB_LENGTH]; |
203 | u8 variable[REQ_VARIABLE_LEN]; | 215 | u32 variable[0]; |
204 | }; | 216 | }; |
205 | 217 | ||
206 | struct status_msg { | 218 | struct status_msg { |
@@ -256,12 +268,6 @@ struct st_drvver { | |||
256 | u32 reserved[3]; | 268 | u32 reserved[3]; |
257 | }; | 269 | }; |
258 | 270 | ||
259 | #define MU_REQ_BUFFER_SIZE (MU_REQ_COUNT * sizeof(struct req_msg)) | ||
260 | #define MU_STATUS_BUFFER_SIZE (MU_STATUS_COUNT * sizeof(struct status_msg)) | ||
261 | #define MU_BUFFER_SIZE (MU_REQ_BUFFER_SIZE + MU_STATUS_BUFFER_SIZE) | ||
262 | #define STEX_EXTRA_SIZE sizeof(struct st_frame) | ||
263 | #define STEX_BUFFER_SIZE (MU_BUFFER_SIZE + STEX_EXTRA_SIZE) | ||
264 | |||
265 | struct st_ccb { | 271 | struct st_ccb { |
266 | struct req_msg *req; | 272 | struct req_msg *req; |
267 | struct scsi_cmnd *cmd; | 273 | struct scsi_cmnd *cmd; |
@@ -273,6 +279,7 @@ struct st_ccb { | |||
273 | u32 req_type; | 279 | u32 req_type; |
274 | u8 srb_status; | 280 | u8 srb_status; |
275 | u8 scsi_status; | 281 | u8 scsi_status; |
282 | u8 reserved[2]; | ||
276 | }; | 283 | }; |
277 | 284 | ||
278 | struct st_hba { | 285 | struct st_hba { |
@@ -284,6 +291,10 @@ struct st_hba { | |||
284 | struct Scsi_Host *host; | 291 | struct Scsi_Host *host; |
285 | struct pci_dev *pdev; | 292 | struct pci_dev *pdev; |
286 | 293 | ||
294 | struct req_msg * (*alloc_rq) (struct st_hba *); | ||
295 | int (*map_sg)(struct st_hba *, struct req_msg *, struct st_ccb *); | ||
296 | void (*send) (struct st_hba *, struct req_msg *, u16); | ||
297 | |||
287 | u32 req_head; | 298 | u32 req_head; |
288 | u32 req_tail; | 299 | u32 req_tail; |
289 | u32 status_head; | 300 | u32 status_head; |
@@ -291,16 +302,36 @@ struct st_hba { | |||
291 | 302 | ||
292 | struct status_msg *status_buffer; | 303 | struct status_msg *status_buffer; |
293 | void *copy_buffer; /* temp buffer for driver-handled commands */ | 304 | void *copy_buffer; /* temp buffer for driver-handled commands */ |
294 | struct st_ccb ccb[MU_MAX_REQUEST]; | 305 | struct st_ccb *ccb; |
295 | struct st_ccb *wait_ccb; | 306 | struct st_ccb *wait_ccb; |
296 | wait_queue_head_t waitq; | 307 | __le32 *scratch; |
297 | 308 | ||
298 | unsigned int mu_status; | 309 | unsigned int mu_status; |
310 | unsigned int cardtype; | ||
311 | int msi_enabled; | ||
299 | int out_req_cnt; | 312 | int out_req_cnt; |
313 | u32 extra_offset; | ||
314 | u16 rq_count; | ||
315 | u16 rq_size; | ||
316 | u16 sts_count; | ||
317 | }; | ||
300 | 318 | ||
301 | unsigned int cardtype; | 319 | struct st_card_info { |
320 | struct req_msg * (*alloc_rq) (struct st_hba *); | ||
321 | int (*map_sg)(struct st_hba *, struct req_msg *, struct st_ccb *); | ||
322 | void (*send) (struct st_hba *, struct req_msg *, u16); | ||
323 | unsigned int max_id; | ||
324 | unsigned int max_lun; | ||
325 | unsigned int max_channel; | ||
326 | u16 rq_count; | ||
327 | u16 rq_size; | ||
328 | u16 sts_count; | ||
302 | }; | 329 | }; |
303 | 330 | ||
331 | static int msi; | ||
332 | module_param(msi, int, 0); | ||
333 | MODULE_PARM_DESC(msi, "Enable Message Signaled Interrupts(0=off, 1=on)"); | ||
334 | |||
304 | static const char console_inq_page[] = | 335 | static const char console_inq_page[] = |
305 | { | 336 | { |
306 | 0x03,0x00,0x03,0x03,0xFA,0x00,0x00,0x30, | 337 | 0x03,0x00,0x03,0x03,0xFA,0x00,0x00,0x30, |
@@ -318,22 +349,20 @@ MODULE_DESCRIPTION("Promise Technology SuperTrak EX Controllers"); | |||
318 | MODULE_LICENSE("GPL"); | 349 | MODULE_LICENSE("GPL"); |
319 | MODULE_VERSION(ST_DRIVER_VERSION); | 350 | MODULE_VERSION(ST_DRIVER_VERSION); |
320 | 351 | ||
321 | static void stex_gettime(__le32 *time) | 352 | static void stex_gettime(__le64 *time) |
322 | { | 353 | { |
323 | struct timeval tv; | 354 | struct timeval tv; |
324 | 355 | ||
325 | do_gettimeofday(&tv); | 356 | do_gettimeofday(&tv); |
326 | *time = cpu_to_le32(tv.tv_sec & 0xffffffff); | 357 | *time = cpu_to_le64(tv.tv_sec); |
327 | *(time + 1) = cpu_to_le32((tv.tv_sec >> 16) >> 16); | ||
328 | } | 358 | } |
329 | 359 | ||
330 | static struct status_msg *stex_get_status(struct st_hba *hba) | 360 | static struct status_msg *stex_get_status(struct st_hba *hba) |
331 | { | 361 | { |
332 | struct status_msg *status = | 362 | struct status_msg *status = hba->status_buffer + hba->status_tail; |
333 | hba->status_buffer + hba->status_tail; | ||
334 | 363 | ||
335 | ++hba->status_tail; | 364 | ++hba->status_tail; |
336 | hba->status_tail %= MU_STATUS_COUNT; | 365 | hba->status_tail %= hba->sts_count+1; |
337 | 366 | ||
338 | return status; | 367 | return status; |
339 | } | 368 | } |
@@ -351,47 +380,83 @@ static void stex_invalid_field(struct scsi_cmnd *cmd, | |||
351 | 380 | ||
352 | static struct req_msg *stex_alloc_req(struct st_hba *hba) | 381 | static struct req_msg *stex_alloc_req(struct st_hba *hba) |
353 | { | 382 | { |
354 | struct req_msg *req = ((struct req_msg *)hba->dma_mem) + | 383 | struct req_msg *req = hba->dma_mem + hba->req_head * hba->rq_size; |
355 | hba->req_head; | ||
356 | 384 | ||
357 | ++hba->req_head; | 385 | ++hba->req_head; |
358 | hba->req_head %= MU_REQ_COUNT; | 386 | hba->req_head %= hba->rq_count+1; |
359 | 387 | ||
360 | return req; | 388 | return req; |
361 | } | 389 | } |
362 | 390 | ||
391 | static struct req_msg *stex_ss_alloc_req(struct st_hba *hba) | ||
392 | { | ||
393 | return (struct req_msg *)(hba->dma_mem + | ||
394 | hba->req_head * hba->rq_size + sizeof(struct st_msg_header)); | ||
395 | } | ||
396 | |||
363 | static int stex_map_sg(struct st_hba *hba, | 397 | static int stex_map_sg(struct st_hba *hba, |
364 | struct req_msg *req, struct st_ccb *ccb) | 398 | struct req_msg *req, struct st_ccb *ccb) |
365 | { | 399 | { |
366 | struct scsi_cmnd *cmd; | 400 | struct scsi_cmnd *cmd; |
367 | struct scatterlist *sg; | 401 | struct scatterlist *sg; |
368 | struct st_sgtable *dst; | 402 | struct st_sgtable *dst; |
403 | struct st_sgitem *table; | ||
369 | int i, nseg; | 404 | int i, nseg; |
370 | 405 | ||
371 | cmd = ccb->cmd; | 406 | cmd = ccb->cmd; |
372 | dst = (struct st_sgtable *)req->variable; | 407 | nseg = scsi_dma_map(cmd); |
373 | dst->max_sg_count = cpu_to_le16(ST_MAX_SG); | 408 | BUG_ON(nseg < 0); |
374 | dst->sz_in_byte = cpu_to_le32(scsi_bufflen(cmd)); | 409 | if (nseg) { |
410 | dst = (struct st_sgtable *)req->variable; | ||
411 | |||
412 | ccb->sg_count = nseg; | ||
413 | dst->sg_count = cpu_to_le16((u16)nseg); | ||
414 | dst->max_sg_count = cpu_to_le16(hba->host->sg_tablesize); | ||
415 | dst->sz_in_byte = cpu_to_le32(scsi_bufflen(cmd)); | ||
416 | |||
417 | table = (struct st_sgitem *)(dst + 1); | ||
418 | scsi_for_each_sg(cmd, sg, nseg, i) { | ||
419 | table[i].count = cpu_to_le32((u32)sg_dma_len(sg)); | ||
420 | table[i].addr = cpu_to_le64(sg_dma_address(sg)); | ||
421 | table[i].ctrl = SG_CF_64B | SG_CF_HOST; | ||
422 | } | ||
423 | table[--i].ctrl |= SG_CF_EOT; | ||
424 | } | ||
425 | |||
426 | return nseg; | ||
427 | } | ||
428 | |||
429 | static int stex_ss_map_sg(struct st_hba *hba, | ||
430 | struct req_msg *req, struct st_ccb *ccb) | ||
431 | { | ||
432 | struct scsi_cmnd *cmd; | ||
433 | struct scatterlist *sg; | ||
434 | struct st_sgtable *dst; | ||
435 | struct st_ss_sgitem *table; | ||
436 | int i, nseg; | ||
375 | 437 | ||
438 | cmd = ccb->cmd; | ||
376 | nseg = scsi_dma_map(cmd); | 439 | nseg = scsi_dma_map(cmd); |
377 | if (nseg < 0) | 440 | BUG_ON(nseg < 0); |
378 | return -EIO; | ||
379 | if (nseg) { | 441 | if (nseg) { |
442 | dst = (struct st_sgtable *)req->variable; | ||
443 | |||
380 | ccb->sg_count = nseg; | 444 | ccb->sg_count = nseg; |
381 | dst->sg_count = cpu_to_le16((u16)nseg); | 445 | dst->sg_count = cpu_to_le16((u16)nseg); |
446 | dst->max_sg_count = cpu_to_le16(hba->host->sg_tablesize); | ||
447 | dst->sz_in_byte = cpu_to_le32(scsi_bufflen(cmd)); | ||
382 | 448 | ||
449 | table = (struct st_ss_sgitem *)(dst + 1); | ||
383 | scsi_for_each_sg(cmd, sg, nseg, i) { | 450 | scsi_for_each_sg(cmd, sg, nseg, i) { |
384 | dst->table[i].count = cpu_to_le32((u32)sg_dma_len(sg)); | 451 | table[i].count = cpu_to_le32((u32)sg_dma_len(sg)); |
385 | dst->table[i].addr = | 452 | table[i].addr = |
386 | cpu_to_le32(sg_dma_address(sg) & 0xffffffff); | 453 | cpu_to_le32(sg_dma_address(sg) & 0xffffffff); |
387 | dst->table[i].addr_hi = | 454 | table[i].addr_hi = |
388 | cpu_to_le32((sg_dma_address(sg) >> 16) >> 16); | 455 | cpu_to_le32((sg_dma_address(sg) >> 16) >> 16); |
389 | dst->table[i].ctrl = SG_CF_64B | SG_CF_HOST; | ||
390 | } | 456 | } |
391 | dst->table[--i].ctrl |= SG_CF_EOT; | ||
392 | } | 457 | } |
393 | 458 | ||
394 | return 0; | 459 | return nseg; |
395 | } | 460 | } |
396 | 461 | ||
397 | static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb) | 462 | static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb) |
@@ -400,7 +465,7 @@ static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb) | |||
400 | size_t count = sizeof(struct st_frame); | 465 | size_t count = sizeof(struct st_frame); |
401 | 466 | ||
402 | p = hba->copy_buffer; | 467 | p = hba->copy_buffer; |
403 | count = scsi_sg_copy_to_buffer(ccb->cmd, p, count); | 468 | scsi_sg_copy_to_buffer(ccb->cmd, p, count); |
404 | memset(p->base, 0, sizeof(u32)*6); | 469 | memset(p->base, 0, sizeof(u32)*6); |
405 | *(unsigned long *)(p->base) = pci_resource_start(hba->pdev, 0); | 470 | *(unsigned long *)(p->base) = pci_resource_start(hba->pdev, 0); |
406 | p->rom_addr = 0; | 471 | p->rom_addr = 0; |
@@ -418,15 +483,13 @@ static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb) | |||
418 | p->subid = | 483 | p->subid = |
419 | hba->pdev->subsystem_vendor << 16 | hba->pdev->subsystem_device; | 484 | hba->pdev->subsystem_vendor << 16 | hba->pdev->subsystem_device; |
420 | 485 | ||
421 | count = scsi_sg_copy_from_buffer(ccb->cmd, p, count); | 486 | scsi_sg_copy_from_buffer(ccb->cmd, p, count); |
422 | } | 487 | } |
423 | 488 | ||
424 | static void | 489 | static void |
425 | stex_send_cmd(struct st_hba *hba, struct req_msg *req, u16 tag) | 490 | stex_send_cmd(struct st_hba *hba, struct req_msg *req, u16 tag) |
426 | { | 491 | { |
427 | req->tag = cpu_to_le16(tag); | 492 | req->tag = cpu_to_le16(tag); |
428 | req->task_attr = TASK_ATTRIBUTE_SIMPLE; | ||
429 | req->task_manage = 0; /* not supported yet */ | ||
430 | 493 | ||
431 | hba->ccb[tag].req = req; | 494 | hba->ccb[tag].req = req; |
432 | hba->out_req_cnt++; | 495 | hba->out_req_cnt++; |
@@ -436,13 +499,44 @@ stex_send_cmd(struct st_hba *hba, struct req_msg *req, u16 tag) | |||
436 | readl(hba->mmio_base + IDBL); /* flush */ | 499 | readl(hba->mmio_base + IDBL); /* flush */ |
437 | } | 500 | } |
438 | 501 | ||
502 | static void | ||
503 | stex_ss_send_cmd(struct st_hba *hba, struct req_msg *req, u16 tag) | ||
504 | { | ||
505 | struct scsi_cmnd *cmd; | ||
506 | struct st_msg_header *msg_h; | ||
507 | dma_addr_t addr; | ||
508 | |||
509 | req->tag = cpu_to_le16(tag); | ||
510 | |||
511 | hba->ccb[tag].req = req; | ||
512 | hba->out_req_cnt++; | ||
513 | |||
514 | cmd = hba->ccb[tag].cmd; | ||
515 | msg_h = (struct st_msg_header *)req - 1; | ||
516 | if (likely(cmd)) { | ||
517 | msg_h->channel = (u8)cmd->device->channel; | ||
518 | msg_h->timeout = cpu_to_le16(cmd->request->timeout/HZ); | ||
519 | } | ||
520 | addr = hba->dma_handle + hba->req_head * hba->rq_size; | ||
521 | addr += (hba->ccb[tag].sg_count+4)/11; | ||
522 | msg_h->handle = cpu_to_le64(addr); | ||
523 | |||
524 | ++hba->req_head; | ||
525 | hba->req_head %= hba->rq_count+1; | ||
526 | |||
527 | writel((addr >> 16) >> 16, hba->mmio_base + YH2I_REQ_HI); | ||
528 | readl(hba->mmio_base + YH2I_REQ_HI); /* flush */ | ||
529 | writel(addr, hba->mmio_base + YH2I_REQ); | ||
530 | readl(hba->mmio_base + YH2I_REQ); /* flush */ | ||
531 | } | ||
532 | |||
439 | static int | 533 | static int |
440 | stex_slave_alloc(struct scsi_device *sdev) | 534 | stex_slave_alloc(struct scsi_device *sdev) |
441 | { | 535 | { |
442 | /* Cheat: usually extracted from Inquiry data */ | 536 | /* Cheat: usually extracted from Inquiry data */ |
443 | sdev->tagged_supported = 1; | 537 | sdev->tagged_supported = 1; |
444 | 538 | ||
445 | scsi_activate_tcq(sdev, ST_CMD_PER_LUN); | 539 | scsi_activate_tcq(sdev, sdev->host->can_queue); |
446 | 540 | ||
447 | return 0; | 541 | return 0; |
448 | } | 542 | } |
@@ -469,7 +563,7 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *)) | |||
469 | { | 563 | { |
470 | struct st_hba *hba; | 564 | struct st_hba *hba; |
471 | struct Scsi_Host *host; | 565 | struct Scsi_Host *host; |
472 | unsigned int id,lun; | 566 | unsigned int id, lun; |
473 | struct req_msg *req; | 567 | struct req_msg *req; |
474 | u16 tag; | 568 | u16 tag; |
475 | 569 | ||
@@ -516,7 +610,8 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *)) | |||
516 | case INQUIRY: | 610 | case INQUIRY: |
517 | if (id != host->max_id - 1) | 611 | if (id != host->max_id - 1) |
518 | break; | 612 | break; |
519 | if (lun == 0 && (cmd->cmnd[1] & INQUIRY_EVPD) == 0) { | 613 | if (!lun && !cmd->device->channel && |
614 | (cmd->cmnd[1] & INQUIRY_EVPD) == 0) { | ||
520 | scsi_sg_copy_from_buffer(cmd, (void *)console_inq_page, | 615 | scsi_sg_copy_from_buffer(cmd, (void *)console_inq_page, |
521 | sizeof(console_inq_page)); | 616 | sizeof(console_inq_page)); |
522 | cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; | 617 | cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; |
@@ -554,7 +649,7 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *)) | |||
554 | if (unlikely(tag >= host->can_queue)) | 649 | if (unlikely(tag >= host->can_queue)) |
555 | return SCSI_MLQUEUE_HOST_BUSY; | 650 | return SCSI_MLQUEUE_HOST_BUSY; |
556 | 651 | ||
557 | req = stex_alloc_req(hba); | 652 | req = hba->alloc_rq(hba); |
558 | 653 | ||
559 | req->lun = lun; | 654 | req->lun = lun; |
560 | req->target = id; | 655 | req->target = id; |
@@ -572,12 +667,13 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *)) | |||
572 | hba->ccb[tag].cmd = cmd; | 667 | hba->ccb[tag].cmd = cmd; |
573 | hba->ccb[tag].sense_bufflen = SCSI_SENSE_BUFFERSIZE; | 668 | hba->ccb[tag].sense_bufflen = SCSI_SENSE_BUFFERSIZE; |
574 | hba->ccb[tag].sense_buffer = cmd->sense_buffer; | 669 | hba->ccb[tag].sense_buffer = cmd->sense_buffer; |
575 | hba->ccb[tag].req_type = 0; | ||
576 | 670 | ||
577 | if (cmd->sc_data_direction != DMA_NONE) | 671 | if (!hba->map_sg(hba, req, &hba->ccb[tag])) { |
578 | stex_map_sg(hba, req, &hba->ccb[tag]); | 672 | hba->ccb[tag].sg_count = 0; |
673 | memset(&req->variable[0], 0, 8); | ||
674 | } | ||
579 | 675 | ||
580 | stex_send_cmd(hba, req, tag); | 676 | hba->send(hba, req, tag); |
581 | return 0; | 677 | return 0; |
582 | } | 678 | } |
583 | 679 | ||
@@ -586,7 +682,7 @@ static void stex_scsi_done(struct st_ccb *ccb) | |||
586 | struct scsi_cmnd *cmd = ccb->cmd; | 682 | struct scsi_cmnd *cmd = ccb->cmd; |
587 | int result; | 683 | int result; |
588 | 684 | ||
589 | if (ccb->srb_status == SRB_STATUS_SUCCESS || ccb->srb_status == 0) { | 685 | if (ccb->srb_status == SRB_STATUS_SUCCESS || ccb->srb_status == 0) { |
590 | result = ccb->scsi_status; | 686 | result = ccb->scsi_status; |
591 | switch (ccb->scsi_status) { | 687 | switch (ccb->scsi_status) { |
592 | case SAM_STAT_GOOD: | 688 | case SAM_STAT_GOOD: |
@@ -626,8 +722,6 @@ static void stex_scsi_done(struct st_ccb *ccb) | |||
626 | static void stex_copy_data(struct st_ccb *ccb, | 722 | static void stex_copy_data(struct st_ccb *ccb, |
627 | struct status_msg *resp, unsigned int variable) | 723 | struct status_msg *resp, unsigned int variable) |
628 | { | 724 | { |
629 | size_t count = variable; | ||
630 | |||
631 | if (resp->scsi_status != SAM_STAT_GOOD) { | 725 | if (resp->scsi_status != SAM_STAT_GOOD) { |
632 | if (ccb->sense_buffer != NULL) | 726 | if (ccb->sense_buffer != NULL) |
633 | memcpy(ccb->sense_buffer, resp->variable, | 727 | memcpy(ccb->sense_buffer, resp->variable, |
@@ -637,17 +731,16 @@ static void stex_copy_data(struct st_ccb *ccb, | |||
637 | 731 | ||
638 | if (ccb->cmd == NULL) | 732 | if (ccb->cmd == NULL) |
639 | return; | 733 | return; |
640 | count = scsi_sg_copy_from_buffer(ccb->cmd, resp->variable, count); | 734 | scsi_sg_copy_from_buffer(ccb->cmd, resp->variable, variable); |
641 | } | 735 | } |
642 | 736 | ||
643 | static void stex_ys_commands(struct st_hba *hba, | 737 | static void stex_check_cmd(struct st_hba *hba, |
644 | struct st_ccb *ccb, struct status_msg *resp) | 738 | struct st_ccb *ccb, struct status_msg *resp) |
645 | { | 739 | { |
646 | if (ccb->cmd->cmnd[0] == MGT_CMD && | 740 | if (ccb->cmd->cmnd[0] == MGT_CMD && |
647 | resp->scsi_status != SAM_STAT_CHECK_CONDITION) { | 741 | resp->scsi_status != SAM_STAT_CHECK_CONDITION) |
648 | scsi_set_resid(ccb->cmd, scsi_bufflen(ccb->cmd) - | 742 | scsi_set_resid(ccb->cmd, scsi_bufflen(ccb->cmd) - |
649 | le32_to_cpu(*(__le32 *)&resp->variable[0])); | 743 | le32_to_cpu(*(__le32 *)&resp->variable[0])); |
650 | } | ||
651 | } | 744 | } |
652 | 745 | ||
653 | static void stex_mu_intr(struct st_hba *hba, u32 doorbell) | 746 | static void stex_mu_intr(struct st_hba *hba, u32 doorbell) |
@@ -658,12 +751,12 @@ static void stex_mu_intr(struct st_hba *hba, u32 doorbell) | |||
658 | unsigned int size; | 751 | unsigned int size; |
659 | u16 tag; | 752 | u16 tag; |
660 | 753 | ||
661 | if (!(doorbell & MU_OUTBOUND_DOORBELL_STATUSHEADCHANGED)) | 754 | if (unlikely(!(doorbell & MU_OUTBOUND_DOORBELL_STATUSHEADCHANGED))) |
662 | return; | 755 | return; |
663 | 756 | ||
664 | /* status payloads */ | 757 | /* status payloads */ |
665 | hba->status_head = readl(base + OMR1); | 758 | hba->status_head = readl(base + OMR1); |
666 | if (unlikely(hba->status_head >= MU_STATUS_COUNT)) { | 759 | if (unlikely(hba->status_head > hba->sts_count)) { |
667 | printk(KERN_WARNING DRV_NAME "(%s): invalid status head\n", | 760 | printk(KERN_WARNING DRV_NAME "(%s): invalid status head\n", |
668 | pci_name(hba->pdev)); | 761 | pci_name(hba->pdev)); |
669 | return; | 762 | return; |
@@ -693,13 +786,13 @@ static void stex_mu_intr(struct st_hba *hba, u32 doorbell) | |||
693 | continue; | 786 | continue; |
694 | } | 787 | } |
695 | 788 | ||
789 | hba->out_req_cnt--; | ||
696 | ccb = &hba->ccb[tag]; | 790 | ccb = &hba->ccb[tag]; |
697 | if (hba->wait_ccb == ccb) | 791 | if (unlikely(hba->wait_ccb == ccb)) |
698 | hba->wait_ccb = NULL; | 792 | hba->wait_ccb = NULL; |
699 | if (unlikely(ccb->req == NULL)) { | 793 | if (unlikely(ccb->req == NULL)) { |
700 | printk(KERN_WARNING DRV_NAME | 794 | printk(KERN_WARNING DRV_NAME |
701 | "(%s): lagging req\n", pci_name(hba->pdev)); | 795 | "(%s): lagging req\n", pci_name(hba->pdev)); |
702 | hba->out_req_cnt--; | ||
703 | continue; | 796 | continue; |
704 | } | 797 | } |
705 | 798 | ||
@@ -720,7 +813,7 @@ static void stex_mu_intr(struct st_hba *hba, u32 doorbell) | |||
720 | 813 | ||
721 | if (likely(ccb->cmd != NULL)) { | 814 | if (likely(ccb->cmd != NULL)) { |
722 | if (hba->cardtype == st_yosemite) | 815 | if (hba->cardtype == st_yosemite) |
723 | stex_ys_commands(hba, ccb, resp); | 816 | stex_check_cmd(hba, ccb, resp); |
724 | 817 | ||
725 | if (unlikely(ccb->cmd->cmnd[0] == PASSTHRU_CMD && | 818 | if (unlikely(ccb->cmd->cmnd[0] == PASSTHRU_CMD && |
726 | ccb->cmd->cmnd[1] == PASSTHRU_GET_ADAPTER)) | 819 | ccb->cmd->cmnd[1] == PASSTHRU_GET_ADAPTER)) |
@@ -728,17 +821,8 @@ static void stex_mu_intr(struct st_hba *hba, u32 doorbell) | |||
728 | 821 | ||
729 | scsi_dma_unmap(ccb->cmd); | 822 | scsi_dma_unmap(ccb->cmd); |
730 | stex_scsi_done(ccb); | 823 | stex_scsi_done(ccb); |
731 | hba->out_req_cnt--; | 824 | } else |
732 | } else if (ccb->req_type & PASSTHRU_REQ_TYPE) { | ||
733 | hba->out_req_cnt--; | ||
734 | if (ccb->req_type & PASSTHRU_REQ_NO_WAKEUP) { | ||
735 | ccb->req_type = 0; | ||
736 | continue; | ||
737 | } | ||
738 | ccb->req_type = 0; | 825 | ccb->req_type = 0; |
739 | if (waitqueue_active(&hba->waitq)) | ||
740 | wake_up(&hba->waitq); | ||
741 | } | ||
742 | } | 826 | } |
743 | 827 | ||
744 | update_status: | 828 | update_status: |
@@ -771,7 +855,103 @@ static irqreturn_t stex_intr(int irq, void *__hba) | |||
771 | return IRQ_RETVAL(handled); | 855 | return IRQ_RETVAL(handled); |
772 | } | 856 | } |
773 | 857 | ||
774 | static int stex_handshake(struct st_hba *hba) | 858 | static void stex_ss_mu_intr(struct st_hba *hba) |
859 | { | ||
860 | struct status_msg *resp; | ||
861 | struct st_ccb *ccb; | ||
862 | __le32 *scratch; | ||
863 | unsigned int size; | ||
864 | int count = 0; | ||
865 | u32 value; | ||
866 | u16 tag; | ||
867 | |||
868 | if (unlikely(hba->out_req_cnt <= 0 || | ||
869 | hba->mu_status == MU_STATE_RESETTING)) | ||
870 | return; | ||
871 | |||
872 | while (count < hba->sts_count) { | ||
873 | scratch = hba->scratch + hba->status_tail; | ||
874 | value = le32_to_cpu(*scratch); | ||
875 | if (unlikely(!(value & SS_STS_NORMAL))) | ||
876 | return; | ||
877 | |||
878 | resp = hba->status_buffer + hba->status_tail; | ||
879 | *scratch = 0; | ||
880 | ++count; | ||
881 | ++hba->status_tail; | ||
882 | hba->status_tail %= hba->sts_count+1; | ||
883 | |||
884 | tag = (u16)value; | ||
885 | if (unlikely(tag >= hba->host->can_queue)) { | ||
886 | printk(KERN_WARNING DRV_NAME | ||
887 | "(%s): invalid tag\n", pci_name(hba->pdev)); | ||
888 | continue; | ||
889 | } | ||
890 | |||
891 | hba->out_req_cnt--; | ||
892 | ccb = &hba->ccb[tag]; | ||
893 | if (unlikely(hba->wait_ccb == ccb)) | ||
894 | hba->wait_ccb = NULL; | ||
895 | if (unlikely(ccb->req == NULL)) { | ||
896 | printk(KERN_WARNING DRV_NAME | ||
897 | "(%s): lagging req\n", pci_name(hba->pdev)); | ||
898 | continue; | ||
899 | } | ||
900 | |||
901 | ccb->req = NULL; | ||
902 | if (likely(value & SS_STS_DONE)) { /* normal case */ | ||
903 | ccb->srb_status = SRB_STATUS_SUCCESS; | ||
904 | ccb->scsi_status = SAM_STAT_GOOD; | ||
905 | } else { | ||
906 | ccb->srb_status = resp->srb_status; | ||
907 | ccb->scsi_status = resp->scsi_status; | ||
908 | size = resp->payload_sz * sizeof(u32); | ||
909 | if (unlikely(size < sizeof(*resp) - STATUS_VAR_LEN || | ||
910 | size > sizeof(*resp))) { | ||
911 | printk(KERN_WARNING DRV_NAME | ||
912 | "(%s): bad status size\n", | ||
913 | pci_name(hba->pdev)); | ||
914 | } else { | ||
915 | size -= sizeof(*resp) - STATUS_VAR_LEN; | ||
916 | if (size) | ||
917 | stex_copy_data(ccb, resp, size); | ||
918 | } | ||
919 | if (likely(ccb->cmd != NULL)) | ||
920 | stex_check_cmd(hba, ccb, resp); | ||
921 | } | ||
922 | |||
923 | if (likely(ccb->cmd != NULL)) { | ||
924 | scsi_dma_unmap(ccb->cmd); | ||
925 | stex_scsi_done(ccb); | ||
926 | } else | ||
927 | ccb->req_type = 0; | ||
928 | } | ||
929 | } | ||
930 | |||
931 | static irqreturn_t stex_ss_intr(int irq, void *__hba) | ||
932 | { | ||
933 | struct st_hba *hba = __hba; | ||
934 | void __iomem *base = hba->mmio_base; | ||
935 | u32 data; | ||
936 | unsigned long flags; | ||
937 | int handled = 0; | ||
938 | |||
939 | spin_lock_irqsave(hba->host->host_lock, flags); | ||
940 | |||
941 | data = readl(base + YI2H_INT); | ||
942 | if (data && data != 0xffffffff) { | ||
943 | /* clear the interrupt */ | ||
944 | writel(data, base + YI2H_INT_C); | ||
945 | stex_ss_mu_intr(hba); | ||
946 | handled = 1; | ||
947 | } | ||
948 | |||
949 | spin_unlock_irqrestore(hba->host->host_lock, flags); | ||
950 | |||
951 | return IRQ_RETVAL(handled); | ||
952 | } | ||
953 | |||
954 | static int stex_common_handshake(struct st_hba *hba) | ||
775 | { | 955 | { |
776 | void __iomem *base = hba->mmio_base; | 956 | void __iomem *base = hba->mmio_base; |
777 | struct handshake_frame *h; | 957 | struct handshake_frame *h; |
@@ -800,26 +980,27 @@ static int stex_handshake(struct st_hba *hba) | |||
800 | data = readl(base + OMR1); | 980 | data = readl(base + OMR1); |
801 | if ((data & 0xffff0000) == MU_HANDSHAKE_SIGNATURE_HALF) { | 981 | if ((data & 0xffff0000) == MU_HANDSHAKE_SIGNATURE_HALF) { |
802 | data &= 0x0000ffff; | 982 | data &= 0x0000ffff; |
803 | if (hba->host->can_queue > data) | 983 | if (hba->host->can_queue > data) { |
804 | hba->host->can_queue = data; | 984 | hba->host->can_queue = data; |
985 | hba->host->cmd_per_lun = data; | ||
986 | } | ||
805 | } | 987 | } |
806 | 988 | ||
807 | h = (struct handshake_frame *)(hba->dma_mem + MU_REQ_BUFFER_SIZE); | 989 | h = (struct handshake_frame *)hba->status_buffer; |
808 | h->rb_phy = cpu_to_le32(hba->dma_handle); | 990 | h->rb_phy = cpu_to_le64(hba->dma_handle); |
809 | h->rb_phy_hi = cpu_to_le32((hba->dma_handle >> 16) >> 16); | 991 | h->req_sz = cpu_to_le16(hba->rq_size); |
810 | h->req_sz = cpu_to_le16(sizeof(struct req_msg)); | 992 | h->req_cnt = cpu_to_le16(hba->rq_count+1); |
811 | h->req_cnt = cpu_to_le16(MU_REQ_COUNT); | ||
812 | h->status_sz = cpu_to_le16(sizeof(struct status_msg)); | 993 | h->status_sz = cpu_to_le16(sizeof(struct status_msg)); |
813 | h->status_cnt = cpu_to_le16(MU_STATUS_COUNT); | 994 | h->status_cnt = cpu_to_le16(hba->sts_count+1); |
814 | stex_gettime(&h->hosttime); | 995 | stex_gettime(&h->hosttime); |
815 | h->partner_type = HMU_PARTNER_TYPE; | 996 | h->partner_type = HMU_PARTNER_TYPE; |
816 | if (hba->dma_size > STEX_BUFFER_SIZE) { | 997 | if (hba->extra_offset) { |
817 | h->extra_offset = cpu_to_le32(STEX_BUFFER_SIZE); | 998 | h->extra_offset = cpu_to_le32(hba->extra_offset); |
818 | h->extra_size = cpu_to_le32(ST_ADDITIONAL_MEM); | 999 | h->extra_size = cpu_to_le32(ST_ADDITIONAL_MEM); |
819 | } else | 1000 | } else |
820 | h->extra_offset = h->extra_size = 0; | 1001 | h->extra_offset = h->extra_size = 0; |
821 | 1002 | ||
822 | status_phys = hba->dma_handle + MU_REQ_BUFFER_SIZE; | 1003 | status_phys = hba->dma_handle + (hba->rq_count+1) * hba->rq_size; |
823 | writel(status_phys, base + IMR0); | 1004 | writel(status_phys, base + IMR0); |
824 | readl(base + IMR0); | 1005 | readl(base + IMR0); |
825 | writel((status_phys >> 16) >> 16, base + IMR1); | 1006 | writel((status_phys >> 16) >> 16, base + IMR1); |
@@ -851,10 +1032,79 @@ static int stex_handshake(struct st_hba *hba) | |||
851 | readl(base + IMR1); | 1032 | readl(base + IMR1); |
852 | writel(0, base + OMR1); | 1033 | writel(0, base + OMR1); |
853 | readl(base + OMR1); /* flush */ | 1034 | readl(base + OMR1); /* flush */ |
854 | hba->mu_status = MU_STATE_STARTED; | ||
855 | return 0; | 1035 | return 0; |
856 | } | 1036 | } |
857 | 1037 | ||
1038 | static int stex_ss_handshake(struct st_hba *hba) | ||
1039 | { | ||
1040 | void __iomem *base = hba->mmio_base; | ||
1041 | struct st_msg_header *msg_h; | ||
1042 | struct handshake_frame *h; | ||
1043 | __le32 *scratch = hba->scratch; | ||
1044 | u32 data; | ||
1045 | unsigned long before; | ||
1046 | int ret = 0; | ||
1047 | |||
1048 | h = (struct handshake_frame *)(hba->alloc_rq(hba)); | ||
1049 | msg_h = (struct st_msg_header *)h - 1; | ||
1050 | msg_h->handle = cpu_to_le64(hba->dma_handle); | ||
1051 | msg_h->flag = SS_HEAD_HANDSHAKE; | ||
1052 | |||
1053 | h->rb_phy = cpu_to_le64(hba->dma_handle); | ||
1054 | h->req_sz = cpu_to_le16(hba->rq_size); | ||
1055 | h->req_cnt = cpu_to_le16(hba->rq_count+1); | ||
1056 | h->status_sz = cpu_to_le16(sizeof(struct status_msg)); | ||
1057 | h->status_cnt = cpu_to_le16(hba->sts_count+1); | ||
1058 | stex_gettime(&h->hosttime); | ||
1059 | h->partner_type = HMU_PARTNER_TYPE; | ||
1060 | h->extra_offset = h->extra_size = 0; | ||
1061 | h->scratch_size = cpu_to_le32((hba->sts_count+1)*sizeof(u32)); | ||
1062 | |||
1063 | data = readl(base + YINT_EN); | ||
1064 | data &= ~4; | ||
1065 | writel(data, base + YINT_EN); | ||
1066 | writel((hba->dma_handle >> 16) >> 16, base + YH2I_REQ_HI); | ||
1067 | writel(hba->dma_handle, base + YH2I_REQ); | ||
1068 | |||
1069 | scratch = hba->scratch; | ||
1070 | before = jiffies; | ||
1071 | while (!(le32_to_cpu(*scratch) & SS_STS_HANDSHAKE)) { | ||
1072 | if (time_after(jiffies, before + MU_MAX_DELAY * HZ)) { | ||
1073 | printk(KERN_ERR DRV_NAME | ||
1074 | "(%s): no signature after handshake frame\n", | ||
1075 | pci_name(hba->pdev)); | ||
1076 | ret = -1; | ||
1077 | break; | ||
1078 | } | ||
1079 | rmb(); | ||
1080 | msleep(1); | ||
1081 | } | ||
1082 | |||
1083 | *scratch = 0; | ||
1084 | msg_h->flag = 0; | ||
1085 | return ret; | ||
1086 | } | ||
1087 | |||
1088 | static int stex_handshake(struct st_hba *hba) | ||
1089 | { | ||
1090 | int err; | ||
1091 | unsigned long flags; | ||
1092 | |||
1093 | err = (hba->cardtype == st_yel) ? | ||
1094 | stex_ss_handshake(hba) : stex_common_handshake(hba); | ||
1095 | if (err == 0) { | ||
1096 | spin_lock_irqsave(hba->host->host_lock, flags); | ||
1097 | hba->req_head = 0; | ||
1098 | hba->req_tail = 0; | ||
1099 | hba->status_head = 0; | ||
1100 | hba->status_tail = 0; | ||
1101 | hba->out_req_cnt = 0; | ||
1102 | hba->mu_status = MU_STATE_STARTED; | ||
1103 | spin_unlock_irqrestore(hba->host->host_lock, flags); | ||
1104 | } | ||
1105 | return err; | ||
1106 | } | ||
1107 | |||
858 | static int stex_abort(struct scsi_cmnd *cmd) | 1108 | static int stex_abort(struct scsi_cmnd *cmd) |
859 | { | 1109 | { |
860 | struct Scsi_Host *host = cmd->device->host; | 1110 | struct Scsi_Host *host = cmd->device->host; |
@@ -883,15 +1133,23 @@ static int stex_abort(struct scsi_cmnd *cmd) | |||
883 | goto out; | 1133 | goto out; |
884 | } | 1134 | } |
885 | 1135 | ||
886 | data = readl(base + ODBL); | 1136 | if (hba->cardtype == st_yel) { |
887 | if (data == 0 || data == 0xffffffff) | 1137 | data = readl(base + YI2H_INT); |
888 | goto fail_out; | 1138 | if (data == 0 || data == 0xffffffff) |
1139 | goto fail_out; | ||
889 | 1140 | ||
890 | writel(data, base + ODBL); | 1141 | writel(data, base + YI2H_INT_C); |
891 | readl(base + ODBL); /* flush */ | 1142 | stex_ss_mu_intr(hba); |
1143 | } else { | ||
1144 | data = readl(base + ODBL); | ||
1145 | if (data == 0 || data == 0xffffffff) | ||
1146 | goto fail_out; | ||
892 | 1147 | ||
893 | stex_mu_intr(hba, data); | 1148 | writel(data, base + ODBL); |
1149 | readl(base + ODBL); /* flush */ | ||
894 | 1150 | ||
1151 | stex_mu_intr(hba, data); | ||
1152 | } | ||
895 | if (hba->wait_ccb == NULL) { | 1153 | if (hba->wait_ccb == NULL) { |
896 | printk(KERN_WARNING DRV_NAME | 1154 | printk(KERN_WARNING DRV_NAME |
897 | "(%s): lost interrupt\n", pci_name(hba->pdev)); | 1155 | "(%s): lost interrupt\n", pci_name(hba->pdev)); |
@@ -950,8 +1208,8 @@ static void stex_hard_reset(struct st_hba *hba) | |||
950 | static int stex_reset(struct scsi_cmnd *cmd) | 1208 | static int stex_reset(struct scsi_cmnd *cmd) |
951 | { | 1209 | { |
952 | struct st_hba *hba; | 1210 | struct st_hba *hba; |
953 | unsigned long flags; | 1211 | void __iomem *base; |
954 | unsigned long before; | 1212 | unsigned long flags, before; |
955 | 1213 | ||
956 | hba = (struct st_hba *) &cmd->device->host->hostdata[0]; | 1214 | hba = (struct st_hba *) &cmd->device->host->hostdata[0]; |
957 | 1215 | ||
@@ -971,13 +1229,6 @@ static int stex_reset(struct scsi_cmnd *cmd) | |||
971 | pci_name(hba->pdev)); | 1229 | pci_name(hba->pdev)); |
972 | return FAILED; | 1230 | return FAILED; |
973 | } | 1231 | } |
974 | spin_lock_irqsave(hba->host->host_lock, flags); | ||
975 | hba->req_head = 0; | ||
976 | hba->req_tail = 0; | ||
977 | hba->status_head = 0; | ||
978 | hba->status_tail = 0; | ||
979 | hba->out_req_cnt = 0; | ||
980 | spin_unlock_irqrestore(hba->host->host_lock, flags); | ||
981 | return SUCCESS; | 1232 | return SUCCESS; |
982 | } | 1233 | } |
983 | 1234 | ||
@@ -994,7 +1245,23 @@ static int stex_reset(struct scsi_cmnd *cmd) | |||
994 | msleep(1); | 1245 | msleep(1); |
995 | } | 1246 | } |
996 | 1247 | ||
1248 | base = hba->mmio_base; | ||
1249 | writel(0, base + IMR0); | ||
1250 | readl(base + IMR0); | ||
1251 | writel(0, base + OMR0); | ||
1252 | readl(base + OMR0); | ||
1253 | writel(0, base + IMR1); | ||
1254 | readl(base + IMR1); | ||
1255 | writel(0, base + OMR1); | ||
1256 | readl(base + OMR1); /* flush */ | ||
1257 | spin_lock_irqsave(hba->host->host_lock, flags); | ||
1258 | hba->req_head = 0; | ||
1259 | hba->req_tail = 0; | ||
1260 | hba->status_head = 0; | ||
1261 | hba->status_tail = 0; | ||
1262 | hba->out_req_cnt = 0; | ||
997 | hba->mu_status = MU_STATE_STARTED; | 1263 | hba->mu_status = MU_STATE_STARTED; |
1264 | spin_unlock_irqrestore(hba->host->host_lock, flags); | ||
998 | return SUCCESS; | 1265 | return SUCCESS; |
999 | } | 1266 | } |
1000 | 1267 | ||
@@ -1028,10 +1295,100 @@ static struct scsi_host_template driver_template = { | |||
1028 | .slave_destroy = stex_slave_destroy, | 1295 | .slave_destroy = stex_slave_destroy, |
1029 | .eh_abort_handler = stex_abort, | 1296 | .eh_abort_handler = stex_abort, |
1030 | .eh_host_reset_handler = stex_reset, | 1297 | .eh_host_reset_handler = stex_reset, |
1031 | .can_queue = ST_CAN_QUEUE, | ||
1032 | .this_id = -1, | 1298 | .this_id = -1, |
1033 | .sg_tablesize = ST_MAX_SG, | 1299 | }; |
1034 | .cmd_per_lun = ST_CMD_PER_LUN, | 1300 | |
1301 | static struct pci_device_id stex_pci_tbl[] = { | ||
1302 | /* st_shasta */ | ||
1303 | { 0x105a, 0x8350, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
1304 | st_shasta }, /* SuperTrak EX8350/8300/16350/16300 */ | ||
1305 | { 0x105a, 0xc350, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
1306 | st_shasta }, /* SuperTrak EX12350 */ | ||
1307 | { 0x105a, 0x4302, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
1308 | st_shasta }, /* SuperTrak EX4350 */ | ||
1309 | { 0x105a, 0xe350, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
1310 | st_shasta }, /* SuperTrak EX24350 */ | ||
1311 | |||
1312 | /* st_vsc */ | ||
1313 | { 0x105a, 0x7250, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_vsc }, | ||
1314 | |||
1315 | /* st_yosemite */ | ||
1316 | { 0x105a, 0x8650, 0x105a, PCI_ANY_ID, 0, 0, st_yosemite }, | ||
1317 | |||
1318 | /* st_seq */ | ||
1319 | { 0x105a, 0x3360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_seq }, | ||
1320 | |||
1321 | /* st_yel */ | ||
1322 | { 0x105a, 0x8650, 0x1033, PCI_ANY_ID, 0, 0, st_yel }, | ||
1323 | { 0x105a, 0x8760, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_yel }, | ||
1324 | { } /* terminate list */ | ||
1325 | }; | ||
1326 | |||
1327 | static struct st_card_info stex_card_info[] = { | ||
1328 | /* st_shasta */ | ||
1329 | { | ||
1330 | .max_id = 17, | ||
1331 | .max_lun = 8, | ||
1332 | .max_channel = 0, | ||
1333 | .rq_count = 32, | ||
1334 | .rq_size = 1048, | ||
1335 | .sts_count = 32, | ||
1336 | .alloc_rq = stex_alloc_req, | ||
1337 | .map_sg = stex_map_sg, | ||
1338 | .send = stex_send_cmd, | ||
1339 | }, | ||
1340 | |||
1341 | /* st_vsc */ | ||
1342 | { | ||
1343 | .max_id = 129, | ||
1344 | .max_lun = 1, | ||
1345 | .max_channel = 0, | ||
1346 | .rq_count = 32, | ||
1347 | .rq_size = 1048, | ||
1348 | .sts_count = 32, | ||
1349 | .alloc_rq = stex_alloc_req, | ||
1350 | .map_sg = stex_map_sg, | ||
1351 | .send = stex_send_cmd, | ||
1352 | }, | ||
1353 | |||
1354 | /* st_yosemite */ | ||
1355 | { | ||
1356 | .max_id = 2, | ||
1357 | .max_lun = 256, | ||
1358 | .max_channel = 0, | ||
1359 | .rq_count = 256, | ||
1360 | .rq_size = 1048, | ||
1361 | .sts_count = 256, | ||
1362 | .alloc_rq = stex_alloc_req, | ||
1363 | .map_sg = stex_map_sg, | ||
1364 | .send = stex_send_cmd, | ||
1365 | }, | ||
1366 | |||
1367 | /* st_seq */ | ||
1368 | { | ||
1369 | .max_id = 129, | ||
1370 | .max_lun = 1, | ||
1371 | .max_channel = 0, | ||
1372 | .rq_count = 32, | ||
1373 | .rq_size = 1048, | ||
1374 | .sts_count = 32, | ||
1375 | .alloc_rq = stex_alloc_req, | ||
1376 | .map_sg = stex_map_sg, | ||
1377 | .send = stex_send_cmd, | ||
1378 | }, | ||
1379 | |||
1380 | /* st_yel */ | ||
1381 | { | ||
1382 | .max_id = 129, | ||
1383 | .max_lun = 256, | ||
1384 | .max_channel = 3, | ||
1385 | .rq_count = 801, | ||
1386 | .rq_size = 512, | ||
1387 | .sts_count = 801, | ||
1388 | .alloc_rq = stex_ss_alloc_req, | ||
1389 | .map_sg = stex_ss_map_sg, | ||
1390 | .send = stex_ss_send_cmd, | ||
1391 | }, | ||
1035 | }; | 1392 | }; |
1036 | 1393 | ||
1037 | static int stex_set_dma_mask(struct pci_dev * pdev) | 1394 | static int stex_set_dma_mask(struct pci_dev * pdev) |
@@ -1047,11 +1404,48 @@ static int stex_set_dma_mask(struct pci_dev * pdev) | |||
1047 | return ret; | 1404 | return ret; |
1048 | } | 1405 | } |
1049 | 1406 | ||
1407 | static int stex_request_irq(struct st_hba *hba) | ||
1408 | { | ||
1409 | struct pci_dev *pdev = hba->pdev; | ||
1410 | int status; | ||
1411 | |||
1412 | if (msi) { | ||
1413 | status = pci_enable_msi(pdev); | ||
1414 | if (status != 0) | ||
1415 | printk(KERN_ERR DRV_NAME | ||
1416 | "(%s): error %d setting up MSI\n", | ||
1417 | pci_name(pdev), status); | ||
1418 | else | ||
1419 | hba->msi_enabled = 1; | ||
1420 | } else | ||
1421 | hba->msi_enabled = 0; | ||
1422 | |||
1423 | status = request_irq(pdev->irq, hba->cardtype == st_yel ? | ||
1424 | stex_ss_intr : stex_intr, IRQF_SHARED, DRV_NAME, hba); | ||
1425 | |||
1426 | if (status != 0) { | ||
1427 | if (hba->msi_enabled) | ||
1428 | pci_disable_msi(pdev); | ||
1429 | } | ||
1430 | return status; | ||
1431 | } | ||
1432 | |||
1433 | static void stex_free_irq(struct st_hba *hba) | ||
1434 | { | ||
1435 | struct pci_dev *pdev = hba->pdev; | ||
1436 | |||
1437 | free_irq(pdev->irq, hba); | ||
1438 | if (hba->msi_enabled) | ||
1439 | pci_disable_msi(pdev); | ||
1440 | } | ||
1441 | |||
1050 | static int __devinit | 1442 | static int __devinit |
1051 | stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) | 1443 | stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) |
1052 | { | 1444 | { |
1053 | struct st_hba *hba; | 1445 | struct st_hba *hba; |
1054 | struct Scsi_Host *host; | 1446 | struct Scsi_Host *host; |
1447 | const struct st_card_info *ci = NULL; | ||
1448 | u32 sts_offset, cp_offset, scratch_offset; | ||
1055 | int err; | 1449 | int err; |
1056 | 1450 | ||
1057 | err = pci_enable_device(pdev); | 1451 | err = pci_enable_device(pdev); |
@@ -1095,10 +1489,17 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1095 | } | 1489 | } |
1096 | 1490 | ||
1097 | hba->cardtype = (unsigned int) id->driver_data; | 1491 | hba->cardtype = (unsigned int) id->driver_data; |
1098 | if (hba->cardtype == st_vsc && (pdev->subsystem_device & 1)) | 1492 | ci = &stex_card_info[hba->cardtype]; |
1099 | hba->cardtype = st_vsc1; | 1493 | sts_offset = scratch_offset = (ci->rq_count+1) * ci->rq_size; |
1100 | hba->dma_size = (hba->cardtype == st_vsc1 || hba->cardtype == st_seq) ? | 1494 | if (hba->cardtype == st_yel) |
1101 | (STEX_BUFFER_SIZE + ST_ADDITIONAL_MEM) : (STEX_BUFFER_SIZE); | 1495 | sts_offset += (ci->sts_count+1) * sizeof(u32); |
1496 | cp_offset = sts_offset + (ci->sts_count+1) * sizeof(struct status_msg); | ||
1497 | hba->dma_size = cp_offset + sizeof(struct st_frame); | ||
1498 | if (hba->cardtype == st_seq || | ||
1499 | (hba->cardtype == st_vsc && (pdev->subsystem_device & 1))) { | ||
1500 | hba->extra_offset = hba->dma_size; | ||
1501 | hba->dma_size += ST_ADDITIONAL_MEM; | ||
1502 | } | ||
1102 | hba->dma_mem = dma_alloc_coherent(&pdev->dev, | 1503 | hba->dma_mem = dma_alloc_coherent(&pdev->dev, |
1103 | hba->dma_size, &hba->dma_handle, GFP_KERNEL); | 1504 | hba->dma_size, &hba->dma_handle, GFP_KERNEL); |
1104 | if (!hba->dma_mem) { | 1505 | if (!hba->dma_mem) { |
@@ -1108,35 +1509,46 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1108 | goto out_iounmap; | 1509 | goto out_iounmap; |
1109 | } | 1510 | } |
1110 | 1511 | ||
1111 | hba->status_buffer = | 1512 | hba->ccb = kcalloc(ci->rq_count, sizeof(struct st_ccb), GFP_KERNEL); |
1112 | (struct status_msg *)(hba->dma_mem + MU_REQ_BUFFER_SIZE); | 1513 | if (!hba->ccb) { |
1113 | hba->copy_buffer = hba->dma_mem + MU_BUFFER_SIZE; | 1514 | err = -ENOMEM; |
1515 | printk(KERN_ERR DRV_NAME "(%s): ccb alloc failed\n", | ||
1516 | pci_name(pdev)); | ||
1517 | goto out_pci_free; | ||
1518 | } | ||
1519 | |||
1520 | if (hba->cardtype == st_yel) | ||
1521 | hba->scratch = (__le32 *)(hba->dma_mem + scratch_offset); | ||
1522 | hba->status_buffer = (struct status_msg *)(hba->dma_mem + sts_offset); | ||
1523 | hba->copy_buffer = hba->dma_mem + cp_offset; | ||
1524 | hba->rq_count = ci->rq_count; | ||
1525 | hba->rq_size = ci->rq_size; | ||
1526 | hba->sts_count = ci->sts_count; | ||
1527 | hba->alloc_rq = ci->alloc_rq; | ||
1528 | hba->map_sg = ci->map_sg; | ||
1529 | hba->send = ci->send; | ||
1114 | hba->mu_status = MU_STATE_STARTING; | 1530 | hba->mu_status = MU_STATE_STARTING; |
1115 | 1531 | ||
1116 | if (hba->cardtype == st_shasta) { | 1532 | if (hba->cardtype == st_yel) |
1117 | host->max_lun = 8; | 1533 | host->sg_tablesize = 38; |
1118 | host->max_id = 16 + 1; | 1534 | else |
1119 | } else if (hba->cardtype == st_yosemite) { | 1535 | host->sg_tablesize = 32; |
1120 | host->max_lun = 256; | 1536 | host->can_queue = ci->rq_count; |
1121 | host->max_id = 1 + 1; | 1537 | host->cmd_per_lun = ci->rq_count; |
1122 | } else { | 1538 | host->max_id = ci->max_id; |
1123 | /* st_vsc , st_vsc1 and st_seq */ | 1539 | host->max_lun = ci->max_lun; |
1124 | host->max_lun = 1; | 1540 | host->max_channel = ci->max_channel; |
1125 | host->max_id = 128 + 1; | ||
1126 | } | ||
1127 | host->max_channel = 0; | ||
1128 | host->unique_id = host->host_no; | 1541 | host->unique_id = host->host_no; |
1129 | host->max_cmd_len = STEX_CDB_LENGTH; | 1542 | host->max_cmd_len = STEX_CDB_LENGTH; |
1130 | 1543 | ||
1131 | hba->host = host; | 1544 | hba->host = host; |
1132 | hba->pdev = pdev; | 1545 | hba->pdev = pdev; |
1133 | init_waitqueue_head(&hba->waitq); | ||
1134 | 1546 | ||
1135 | err = request_irq(pdev->irq, stex_intr, IRQF_SHARED, DRV_NAME, hba); | 1547 | err = stex_request_irq(hba); |
1136 | if (err) { | 1548 | if (err) { |
1137 | printk(KERN_ERR DRV_NAME "(%s): request irq failed\n", | 1549 | printk(KERN_ERR DRV_NAME "(%s): request irq failed\n", |
1138 | pci_name(pdev)); | 1550 | pci_name(pdev)); |
1139 | goto out_pci_free; | 1551 | goto out_ccb_free; |
1140 | } | 1552 | } |
1141 | 1553 | ||
1142 | err = stex_handshake(hba); | 1554 | err = stex_handshake(hba); |
@@ -1164,7 +1576,9 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1164 | return 0; | 1576 | return 0; |
1165 | 1577 | ||
1166 | out_free_irq: | 1578 | out_free_irq: |
1167 | free_irq(pdev->irq, hba); | 1579 | stex_free_irq(hba); |
1580 | out_ccb_free: | ||
1581 | kfree(hba->ccb); | ||
1168 | out_pci_free: | 1582 | out_pci_free: |
1169 | dma_free_coherent(&pdev->dev, hba->dma_size, | 1583 | dma_free_coherent(&pdev->dev, hba->dma_size, |
1170 | hba->dma_mem, hba->dma_handle); | 1584 | hba->dma_mem, hba->dma_handle); |
@@ -1183,15 +1597,20 @@ out_disable: | |||
1183 | static void stex_hba_stop(struct st_hba *hba) | 1597 | static void stex_hba_stop(struct st_hba *hba) |
1184 | { | 1598 | { |
1185 | struct req_msg *req; | 1599 | struct req_msg *req; |
1600 | struct st_msg_header *msg_h; | ||
1186 | unsigned long flags; | 1601 | unsigned long flags; |
1187 | unsigned long before; | 1602 | unsigned long before; |
1188 | u16 tag = 0; | 1603 | u16 tag = 0; |
1189 | 1604 | ||
1190 | spin_lock_irqsave(hba->host->host_lock, flags); | 1605 | spin_lock_irqsave(hba->host->host_lock, flags); |
1191 | req = stex_alloc_req(hba); | 1606 | req = hba->alloc_rq(hba); |
1192 | memset(req->cdb, 0, STEX_CDB_LENGTH); | 1607 | if (hba->cardtype == st_yel) { |
1608 | msg_h = (struct st_msg_header *)req - 1; | ||
1609 | memset(msg_h, 0, hba->rq_size); | ||
1610 | } else | ||
1611 | memset(req, 0, hba->rq_size); | ||
1193 | 1612 | ||
1194 | if (hba->cardtype == st_yosemite) { | 1613 | if (hba->cardtype == st_yosemite || hba->cardtype == st_yel) { |
1195 | req->cdb[0] = MGT_CMD; | 1614 | req->cdb[0] = MGT_CMD; |
1196 | req->cdb[1] = MGT_CMD_SIGNATURE; | 1615 | req->cdb[1] = MGT_CMD_SIGNATURE; |
1197 | req->cdb[2] = CTLR_CONFIG_CMD; | 1616 | req->cdb[2] = CTLR_CONFIG_CMD; |
@@ -1206,27 +1625,31 @@ static void stex_hba_stop(struct st_hba *hba) | |||
1206 | hba->ccb[tag].sg_count = 0; | 1625 | hba->ccb[tag].sg_count = 0; |
1207 | hba->ccb[tag].sense_bufflen = 0; | 1626 | hba->ccb[tag].sense_bufflen = 0; |
1208 | hba->ccb[tag].sense_buffer = NULL; | 1627 | hba->ccb[tag].sense_buffer = NULL; |
1209 | hba->ccb[tag].req_type |= PASSTHRU_REQ_TYPE; | 1628 | hba->ccb[tag].req_type = PASSTHRU_REQ_TYPE; |
1210 | 1629 | ||
1211 | stex_send_cmd(hba, req, tag); | 1630 | hba->send(hba, req, tag); |
1212 | spin_unlock_irqrestore(hba->host->host_lock, flags); | 1631 | spin_unlock_irqrestore(hba->host->host_lock, flags); |
1213 | 1632 | ||
1214 | before = jiffies; | 1633 | before = jiffies; |
1215 | while (hba->ccb[tag].req_type & PASSTHRU_REQ_TYPE) { | 1634 | while (hba->ccb[tag].req_type & PASSTHRU_REQ_TYPE) { |
1216 | if (time_after(jiffies, before + ST_INTERNAL_TIMEOUT * HZ)) | 1635 | if (time_after(jiffies, before + ST_INTERNAL_TIMEOUT * HZ)) { |
1636 | hba->ccb[tag].req_type = 0; | ||
1217 | return; | 1637 | return; |
1218 | msleep(10); | 1638 | } |
1639 | msleep(1); | ||
1219 | } | 1640 | } |
1220 | } | 1641 | } |
1221 | 1642 | ||
1222 | static void stex_hba_free(struct st_hba *hba) | 1643 | static void stex_hba_free(struct st_hba *hba) |
1223 | { | 1644 | { |
1224 | free_irq(hba->pdev->irq, hba); | 1645 | stex_free_irq(hba); |
1225 | 1646 | ||
1226 | iounmap(hba->mmio_base); | 1647 | iounmap(hba->mmio_base); |
1227 | 1648 | ||
1228 | pci_release_regions(hba->pdev); | 1649 | pci_release_regions(hba->pdev); |
1229 | 1650 | ||
1651 | kfree(hba->ccb); | ||
1652 | |||
1230 | dma_free_coherent(&hba->pdev->dev, hba->dma_size, | 1653 | dma_free_coherent(&hba->pdev->dev, hba->dma_size, |
1231 | hba->dma_mem, hba->dma_handle); | 1654 | hba->dma_mem, hba->dma_handle); |
1232 | } | 1655 | } |
@@ -1255,27 +1678,6 @@ static void stex_shutdown(struct pci_dev *pdev) | |||
1255 | stex_hba_stop(hba); | 1678 | stex_hba_stop(hba); |
1256 | } | 1679 | } |
1257 | 1680 | ||
1258 | static struct pci_device_id stex_pci_tbl[] = { | ||
1259 | /* st_shasta */ | ||
1260 | { 0x105a, 0x8350, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
1261 | st_shasta }, /* SuperTrak EX8350/8300/16350/16300 */ | ||
1262 | { 0x105a, 0xc350, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
1263 | st_shasta }, /* SuperTrak EX12350 */ | ||
1264 | { 0x105a, 0x4302, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
1265 | st_shasta }, /* SuperTrak EX4350 */ | ||
1266 | { 0x105a, 0xe350, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
1267 | st_shasta }, /* SuperTrak EX24350 */ | ||
1268 | |||
1269 | /* st_vsc */ | ||
1270 | { 0x105a, 0x7250, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_vsc }, | ||
1271 | |||
1272 | /* st_yosemite */ | ||
1273 | { 0x105a, 0x8650, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_yosemite }, | ||
1274 | |||
1275 | /* st_seq */ | ||
1276 | { 0x105a, 0x3360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_seq }, | ||
1277 | { } /* terminate list */ | ||
1278 | }; | ||
1279 | MODULE_DEVICE_TABLE(pci, stex_pci_tbl); | 1681 | MODULE_DEVICE_TABLE(pci, stex_pci_tbl); |
1280 | 1682 | ||
1281 | static struct pci_driver stex_pci_driver = { | 1683 | static struct pci_driver stex_pci_driver = { |
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.h b/drivers/scsi/sym53c8xx_2/sym_glue.h index 567fbe0b4f09..b80bf709f104 100644 --- a/drivers/scsi/sym53c8xx_2/sym_glue.h +++ b/drivers/scsi/sym53c8xx_2/sym_glue.h | |||
@@ -234,7 +234,7 @@ static inline struct sym_hcb * sym_get_hcb(struct Scsi_Host *host) | |||
234 | /* | 234 | /* |
235 | * Set the status field of a CAM CCB. | 235 | * Set the status field of a CAM CCB. |
236 | */ | 236 | */ |
237 | static __inline void | 237 | static inline void |
238 | sym_set_cam_status(struct scsi_cmnd *cmd, int status) | 238 | sym_set_cam_status(struct scsi_cmnd *cmd, int status) |
239 | { | 239 | { |
240 | cmd->result &= ~(0xff << 16); | 240 | cmd->result &= ~(0xff << 16); |
@@ -244,7 +244,7 @@ sym_set_cam_status(struct scsi_cmnd *cmd, int status) | |||
244 | /* | 244 | /* |
245 | * Get the status field of a CAM CCB. | 245 | * Get the status field of a CAM CCB. |
246 | */ | 246 | */ |
247 | static __inline int | 247 | static inline int |
248 | sym_get_cam_status(struct scsi_cmnd *cmd) | 248 | sym_get_cam_status(struct scsi_cmnd *cmd) |
249 | { | 249 | { |
250 | return host_byte(cmd->result); | 250 | return host_byte(cmd->result); |
@@ -253,7 +253,7 @@ sym_get_cam_status(struct scsi_cmnd *cmd) | |||
253 | /* | 253 | /* |
254 | * Build CAM result for a successful IO and for a failed IO. | 254 | * Build CAM result for a successful IO and for a failed IO. |
255 | */ | 255 | */ |
256 | static __inline void sym_set_cam_result_ok(struct sym_ccb *cp, struct scsi_cmnd *cmd, int resid) | 256 | static inline void sym_set_cam_result_ok(struct sym_ccb *cp, struct scsi_cmnd *cmd, int resid) |
257 | { | 257 | { |
258 | scsi_set_resid(cmd, resid); | 258 | scsi_set_resid(cmd, resid); |
259 | cmd->result = (((DID_OK) << 16) + ((cp->ssss_status) & 0x7f)); | 259 | cmd->result = (((DID_OK) << 16) + ((cp->ssss_status) & 0x7f)); |
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c index ccea7db59f49..ffa70d1ed182 100644 --- a/drivers/scsi/sym53c8xx_2/sym_hipd.c +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c | |||
@@ -602,7 +602,7 @@ sym_getsync(struct sym_hcb *np, u_char dt, u_char sfac, u_char *divp, u_char *fa | |||
602 | /* | 602 | /* |
603 | * Set initial io register bits from burst code. | 603 | * Set initial io register bits from burst code. |
604 | */ | 604 | */ |
605 | static __inline void sym_init_burst(struct sym_hcb *np, u_char bc) | 605 | static inline void sym_init_burst(struct sym_hcb *np, u_char bc) |
606 | { | 606 | { |
607 | np->rv_ctest4 &= ~0x80; | 607 | np->rv_ctest4 &= ~0x80; |
608 | np->rv_dmode &= ~(0x3 << 6); | 608 | np->rv_dmode &= ~(0x3 << 6); |
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.h b/drivers/scsi/sym53c8xx_2/sym_hipd.h index 61d28fcfffbf..1588c90518d4 100644 --- a/drivers/scsi/sym53c8xx_2/sym_hipd.h +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.h | |||
@@ -1096,7 +1096,7 @@ do { \ | |||
1096 | #elif SYM_CONF_DMA_ADDRESSING_MODE == 2 | 1096 | #elif SYM_CONF_DMA_ADDRESSING_MODE == 2 |
1097 | #define DMA_DAC_MASK DMA_64BIT_MASK | 1097 | #define DMA_DAC_MASK DMA_64BIT_MASK |
1098 | int sym_lookup_dmap(struct sym_hcb *np, u32 h, int s); | 1098 | int sym_lookup_dmap(struct sym_hcb *np, u32 h, int s); |
1099 | static __inline void | 1099 | static inline void |
1100 | sym_build_sge(struct sym_hcb *np, struct sym_tblmove *data, u64 badd, int len) | 1100 | sym_build_sge(struct sym_hcb *np, struct sym_tblmove *data, u64 badd, int len) |
1101 | { | 1101 | { |
1102 | u32 h = (badd>>32); | 1102 | u32 h = (badd>>32); |
@@ -1201,7 +1201,7 @@ dma_addr_t __vtobus(m_pool_ident_t dev_dmat, void *m); | |||
1201 | 1201 | ||
1202 | #define sym_m_pool_match(mp_id1, mp_id2) (mp_id1 == mp_id2) | 1202 | #define sym_m_pool_match(mp_id1, mp_id2) (mp_id1 == mp_id2) |
1203 | 1203 | ||
1204 | static __inline void *sym_m_get_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp) | 1204 | static inline void *sym_m_get_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp) |
1205 | { | 1205 | { |
1206 | void *vaddr = NULL; | 1206 | void *vaddr = NULL; |
1207 | dma_addr_t baddr = 0; | 1207 | dma_addr_t baddr = 0; |
@@ -1215,7 +1215,7 @@ static __inline void *sym_m_get_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp) | |||
1215 | return vaddr; | 1215 | return vaddr; |
1216 | } | 1216 | } |
1217 | 1217 | ||
1218 | static __inline void sym_m_free_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp) | 1218 | static inline void sym_m_free_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp) |
1219 | { | 1219 | { |
1220 | dma_free_coherent(mp->dev_dmat, SYM_MEM_CLUSTER_SIZE, vbp->vaddr, | 1220 | dma_free_coherent(mp->dev_dmat, SYM_MEM_CLUSTER_SIZE, vbp->vaddr, |
1221 | vbp->baddr); | 1221 | vbp->baddr); |
diff --git a/drivers/scsi/sym53c8xx_2/sym_malloc.c b/drivers/scsi/sym53c8xx_2/sym_malloc.c index 92bf9b14a7a2..883cac10daf9 100644 --- a/drivers/scsi/sym53c8xx_2/sym_malloc.c +++ b/drivers/scsi/sym53c8xx_2/sym_malloc.c | |||
@@ -262,7 +262,7 @@ static void ___free_dma_mem_cluster(m_pool_p mp, void *m) | |||
262 | #endif | 262 | #endif |
263 | 263 | ||
264 | /* Fetch the memory pool for a given pool id (i.e. DMA constraints) */ | 264 | /* Fetch the memory pool for a given pool id (i.e. DMA constraints) */ |
265 | static __inline m_pool_p ___get_dma_pool(m_pool_ident_t dev_dmat) | 265 | static inline m_pool_p ___get_dma_pool(m_pool_ident_t dev_dmat) |
266 | { | 266 | { |
267 | m_pool_p mp; | 267 | m_pool_p mp; |
268 | for (mp = mp0.next; | 268 | for (mp = mp0.next; |
diff --git a/drivers/scsi/sym53c8xx_2/sym_misc.h b/drivers/scsi/sym53c8xx_2/sym_misc.h index 430537183c18..96c15145902c 100644 --- a/drivers/scsi/sym53c8xx_2/sym_misc.h +++ b/drivers/scsi/sym53c8xx_2/sym_misc.h | |||
@@ -52,17 +52,17 @@ typedef struct sym_quehead { | |||
52 | (ptr)->flink = (ptr); (ptr)->blink = (ptr); \ | 52 | (ptr)->flink = (ptr); (ptr)->blink = (ptr); \ |
53 | } while (0) | 53 | } while (0) |
54 | 54 | ||
55 | static __inline struct sym_quehead *sym_que_first(struct sym_quehead *head) | 55 | static inline struct sym_quehead *sym_que_first(struct sym_quehead *head) |
56 | { | 56 | { |
57 | return (head->flink == head) ? 0 : head->flink; | 57 | return (head->flink == head) ? 0 : head->flink; |
58 | } | 58 | } |
59 | 59 | ||
60 | static __inline struct sym_quehead *sym_que_last(struct sym_quehead *head) | 60 | static inline struct sym_quehead *sym_que_last(struct sym_quehead *head) |
61 | { | 61 | { |
62 | return (head->blink == head) ? 0 : head->blink; | 62 | return (head->blink == head) ? 0 : head->blink; |
63 | } | 63 | } |
64 | 64 | ||
65 | static __inline void __sym_que_add(struct sym_quehead * new, | 65 | static inline void __sym_que_add(struct sym_quehead * new, |
66 | struct sym_quehead * blink, | 66 | struct sym_quehead * blink, |
67 | struct sym_quehead * flink) | 67 | struct sym_quehead * flink) |
68 | { | 68 | { |
@@ -72,19 +72,19 @@ static __inline void __sym_que_add(struct sym_quehead * new, | |||
72 | blink->flink = new; | 72 | blink->flink = new; |
73 | } | 73 | } |
74 | 74 | ||
75 | static __inline void __sym_que_del(struct sym_quehead * blink, | 75 | static inline void __sym_que_del(struct sym_quehead * blink, |
76 | struct sym_quehead * flink) | 76 | struct sym_quehead * flink) |
77 | { | 77 | { |
78 | flink->blink = blink; | 78 | flink->blink = blink; |
79 | blink->flink = flink; | 79 | blink->flink = flink; |
80 | } | 80 | } |
81 | 81 | ||
82 | static __inline int sym_que_empty(struct sym_quehead *head) | 82 | static inline int sym_que_empty(struct sym_quehead *head) |
83 | { | 83 | { |
84 | return head->flink == head; | 84 | return head->flink == head; |
85 | } | 85 | } |
86 | 86 | ||
87 | static __inline void sym_que_splice(struct sym_quehead *list, | 87 | static inline void sym_que_splice(struct sym_quehead *list, |
88 | struct sym_quehead *head) | 88 | struct sym_quehead *head) |
89 | { | 89 | { |
90 | struct sym_quehead *first = list->flink; | 90 | struct sym_quehead *first = list->flink; |
@@ -101,7 +101,7 @@ static __inline void sym_que_splice(struct sym_quehead *list, | |||
101 | } | 101 | } |
102 | } | 102 | } |
103 | 103 | ||
104 | static __inline void sym_que_move(struct sym_quehead *orig, | 104 | static inline void sym_que_move(struct sym_quehead *orig, |
105 | struct sym_quehead *dest) | 105 | struct sym_quehead *dest) |
106 | { | 106 | { |
107 | struct sym_quehead *first, *last; | 107 | struct sym_quehead *first, *last; |
@@ -129,7 +129,7 @@ static __inline void sym_que_move(struct sym_quehead *orig, | |||
129 | 129 | ||
130 | #define sym_insque_head(new, head) __sym_que_add(new, head, (head)->flink) | 130 | #define sym_insque_head(new, head) __sym_que_add(new, head, (head)->flink) |
131 | 131 | ||
132 | static __inline struct sym_quehead *sym_remque_head(struct sym_quehead *head) | 132 | static inline struct sym_quehead *sym_remque_head(struct sym_quehead *head) |
133 | { | 133 | { |
134 | struct sym_quehead *elem = head->flink; | 134 | struct sym_quehead *elem = head->flink; |
135 | 135 | ||
@@ -142,7 +142,7 @@ static __inline struct sym_quehead *sym_remque_head(struct sym_quehead *head) | |||
142 | 142 | ||
143 | #define sym_insque_tail(new, head) __sym_que_add(new, (head)->blink, head) | 143 | #define sym_insque_tail(new, head) __sym_que_add(new, (head)->blink, head) |
144 | 144 | ||
145 | static __inline struct sym_quehead *sym_remque_tail(struct sym_quehead *head) | 145 | static inline struct sym_quehead *sym_remque_tail(struct sym_quehead *head) |
146 | { | 146 | { |
147 | struct sym_quehead *elem = head->blink; | 147 | struct sym_quehead *elem = head->blink; |
148 | 148 | ||
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 533f82025adf..7ddff3f55087 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c | |||
@@ -306,6 +306,63 @@ static void __devexit pci_plx9050_exit(struct pci_dev *dev) | |||
306 | } | 306 | } |
307 | } | 307 | } |
308 | 308 | ||
309 | #define NI8420_INT_ENABLE_REG 0x38 | ||
310 | #define NI8420_INT_ENABLE_BIT 0x2000 | ||
311 | |||
312 | static void __devexit pci_ni8420_exit(struct pci_dev *dev) | ||
313 | { | ||
314 | void __iomem *p; | ||
315 | unsigned long base, len; | ||
316 | unsigned int bar = 0; | ||
317 | |||
318 | if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) { | ||
319 | moan_device("no memory in bar", dev); | ||
320 | return; | ||
321 | } | ||
322 | |||
323 | base = pci_resource_start(dev, bar); | ||
324 | len = pci_resource_len(dev, bar); | ||
325 | p = ioremap_nocache(base, len); | ||
326 | if (p == NULL) | ||
327 | return; | ||
328 | |||
329 | /* Disable the CPU Interrupt */ | ||
330 | writel(readl(p + NI8420_INT_ENABLE_REG) & ~(NI8420_INT_ENABLE_BIT), | ||
331 | p + NI8420_INT_ENABLE_REG); | ||
332 | iounmap(p); | ||
333 | } | ||
334 | |||
335 | |||
336 | /* MITE registers */ | ||
337 | #define MITE_IOWBSR1 0xc4 | ||
338 | #define MITE_IOWCR1 0xf4 | ||
339 | #define MITE_LCIMR1 0x08 | ||
340 | #define MITE_LCIMR2 0x10 | ||
341 | |||
342 | #define MITE_LCIMR2_CLR_CPU_IE (1 << 30) | ||
343 | |||
344 | static void __devexit pci_ni8430_exit(struct pci_dev *dev) | ||
345 | { | ||
346 | void __iomem *p; | ||
347 | unsigned long base, len; | ||
348 | unsigned int bar = 0; | ||
349 | |||
350 | if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) { | ||
351 | moan_device("no memory in bar", dev); | ||
352 | return; | ||
353 | } | ||
354 | |||
355 | base = pci_resource_start(dev, bar); | ||
356 | len = pci_resource_len(dev, bar); | ||
357 | p = ioremap_nocache(base, len); | ||
358 | if (p == NULL) | ||
359 | return; | ||
360 | |||
361 | /* Disable the CPU Interrupt */ | ||
362 | writel(MITE_LCIMR2_CLR_CPU_IE, p + MITE_LCIMR2); | ||
363 | iounmap(p); | ||
364 | } | ||
365 | |||
309 | /* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */ | 366 | /* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */ |
310 | static int | 367 | static int |
311 | sbs_setup(struct serial_private *priv, const struct pciserial_board *board, | 368 | sbs_setup(struct serial_private *priv, const struct pciserial_board *board, |
@@ -597,6 +654,108 @@ static int pci_xircom_init(struct pci_dev *dev) | |||
597 | return 0; | 654 | return 0; |
598 | } | 655 | } |
599 | 656 | ||
657 | static int pci_ni8420_init(struct pci_dev *dev) | ||
658 | { | ||
659 | void __iomem *p; | ||
660 | unsigned long base, len; | ||
661 | unsigned int bar = 0; | ||
662 | |||
663 | if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) { | ||
664 | moan_device("no memory in bar", dev); | ||
665 | return 0; | ||
666 | } | ||
667 | |||
668 | base = pci_resource_start(dev, bar); | ||
669 | len = pci_resource_len(dev, bar); | ||
670 | p = ioremap_nocache(base, len); | ||
671 | if (p == NULL) | ||
672 | return -ENOMEM; | ||
673 | |||
674 | /* Enable CPU Interrupt */ | ||
675 | writel(readl(p + NI8420_INT_ENABLE_REG) | NI8420_INT_ENABLE_BIT, | ||
676 | p + NI8420_INT_ENABLE_REG); | ||
677 | |||
678 | iounmap(p); | ||
679 | return 0; | ||
680 | } | ||
681 | |||
682 | #define MITE_IOWBSR1_WSIZE 0xa | ||
683 | #define MITE_IOWBSR1_WIN_OFFSET 0x800 | ||
684 | #define MITE_IOWBSR1_WENAB (1 << 7) | ||
685 | #define MITE_LCIMR1_IO_IE_0 (1 << 24) | ||
686 | #define MITE_LCIMR2_SET_CPU_IE (1 << 31) | ||
687 | #define MITE_IOWCR1_RAMSEL_MASK 0xfffffffe | ||
688 | |||
689 | static int pci_ni8430_init(struct pci_dev *dev) | ||
690 | { | ||
691 | void __iomem *p; | ||
692 | unsigned long base, len; | ||
693 | u32 device_window; | ||
694 | unsigned int bar = 0; | ||
695 | |||
696 | if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) { | ||
697 | moan_device("no memory in bar", dev); | ||
698 | return 0; | ||
699 | } | ||
700 | |||
701 | base = pci_resource_start(dev, bar); | ||
702 | len = pci_resource_len(dev, bar); | ||
703 | p = ioremap_nocache(base, len); | ||
704 | if (p == NULL) | ||
705 | return -ENOMEM; | ||
706 | |||
707 | /* Set device window address and size in BAR0 */ | ||
708 | device_window = ((base + MITE_IOWBSR1_WIN_OFFSET) & 0xffffff00) | ||
709 | | MITE_IOWBSR1_WENAB | MITE_IOWBSR1_WSIZE; | ||
710 | writel(device_window, p + MITE_IOWBSR1); | ||
711 | |||
712 | /* Set window access to go to RAMSEL IO address space */ | ||
713 | writel((readl(p + MITE_IOWCR1) & MITE_IOWCR1_RAMSEL_MASK), | ||
714 | p + MITE_IOWCR1); | ||
715 | |||
716 | /* Enable IO Bus Interrupt 0 */ | ||
717 | writel(MITE_LCIMR1_IO_IE_0, p + MITE_LCIMR1); | ||
718 | |||
719 | /* Enable CPU Interrupt */ | ||
720 | writel(MITE_LCIMR2_SET_CPU_IE, p + MITE_LCIMR2); | ||
721 | |||
722 | iounmap(p); | ||
723 | return 0; | ||
724 | } | ||
725 | |||
726 | /* UART Port Control Register */ | ||
727 | #define NI8430_PORTCON 0x0f | ||
728 | #define NI8430_PORTCON_TXVR_ENABLE (1 << 3) | ||
729 | |||
730 | static int | ||
731 | pci_ni8430_setup(struct serial_private *priv, | ||
732 | const struct pciserial_board *board, | ||
733 | struct uart_port *port, int idx) | ||
734 | { | ||
735 | void __iomem *p; | ||
736 | unsigned long base, len; | ||
737 | unsigned int bar, offset = board->first_offset; | ||
738 | |||
739 | if (idx >= board->num_ports) | ||
740 | return 1; | ||
741 | |||
742 | bar = FL_GET_BASE(board->flags); | ||
743 | offset += idx * board->uart_offset; | ||
744 | |||
745 | base = pci_resource_start(priv->dev, bar); | ||
746 | len = pci_resource_len(priv->dev, bar); | ||
747 | p = ioremap_nocache(base, len); | ||
748 | |||
749 | /* enable the transciever */ | ||
750 | writeb(readb(p + offset + NI8430_PORTCON) | NI8430_PORTCON_TXVR_ENABLE, | ||
751 | p + offset + NI8430_PORTCON); | ||
752 | |||
753 | iounmap(p); | ||
754 | |||
755 | return setup_port(priv, port, bar, offset, board->reg_shift); | ||
756 | } | ||
757 | |||
758 | |||
600 | static int pci_netmos_init(struct pci_dev *dev) | 759 | static int pci_netmos_init(struct pci_dev *dev) |
601 | { | 760 | { |
602 | /* subdevice 0x00PS means <P> parallel, <S> serial */ | 761 | /* subdevice 0x00PS means <P> parallel, <S> serial */ |
@@ -913,6 +1072,126 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { | |||
913 | .exit = __devexit_p(pci_ite887x_exit), | 1072 | .exit = __devexit_p(pci_ite887x_exit), |
914 | }, | 1073 | }, |
915 | /* | 1074 | /* |
1075 | * National Instruments | ||
1076 | */ | ||
1077 | { | ||
1078 | .vendor = PCI_VENDOR_ID_NI, | ||
1079 | .device = PCI_DEVICE_ID_NI_PCI23216, | ||
1080 | .subvendor = PCI_ANY_ID, | ||
1081 | .subdevice = PCI_ANY_ID, | ||
1082 | .init = pci_ni8420_init, | ||
1083 | .setup = pci_default_setup, | ||
1084 | .exit = __devexit_p(pci_ni8420_exit), | ||
1085 | }, | ||
1086 | { | ||
1087 | .vendor = PCI_VENDOR_ID_NI, | ||
1088 | .device = PCI_DEVICE_ID_NI_PCI2328, | ||
1089 | .subvendor = PCI_ANY_ID, | ||
1090 | .subdevice = PCI_ANY_ID, | ||
1091 | .init = pci_ni8420_init, | ||
1092 | .setup = pci_default_setup, | ||
1093 | .exit = __devexit_p(pci_ni8420_exit), | ||
1094 | }, | ||
1095 | { | ||
1096 | .vendor = PCI_VENDOR_ID_NI, | ||
1097 | .device = PCI_DEVICE_ID_NI_PCI2324, | ||
1098 | .subvendor = PCI_ANY_ID, | ||
1099 | .subdevice = PCI_ANY_ID, | ||
1100 | .init = pci_ni8420_init, | ||
1101 | .setup = pci_default_setup, | ||
1102 | .exit = __devexit_p(pci_ni8420_exit), | ||
1103 | }, | ||
1104 | { | ||
1105 | .vendor = PCI_VENDOR_ID_NI, | ||
1106 | .device = PCI_DEVICE_ID_NI_PCI2322, | ||
1107 | .subvendor = PCI_ANY_ID, | ||
1108 | .subdevice = PCI_ANY_ID, | ||
1109 | .init = pci_ni8420_init, | ||
1110 | .setup = pci_default_setup, | ||
1111 | .exit = __devexit_p(pci_ni8420_exit), | ||
1112 | }, | ||
1113 | { | ||
1114 | .vendor = PCI_VENDOR_ID_NI, | ||
1115 | .device = PCI_DEVICE_ID_NI_PCI2324I, | ||
1116 | .subvendor = PCI_ANY_ID, | ||
1117 | .subdevice = PCI_ANY_ID, | ||
1118 | .init = pci_ni8420_init, | ||
1119 | .setup = pci_default_setup, | ||
1120 | .exit = __devexit_p(pci_ni8420_exit), | ||
1121 | }, | ||
1122 | { | ||
1123 | .vendor = PCI_VENDOR_ID_NI, | ||
1124 | .device = PCI_DEVICE_ID_NI_PCI2322I, | ||
1125 | .subvendor = PCI_ANY_ID, | ||
1126 | .subdevice = PCI_ANY_ID, | ||
1127 | .init = pci_ni8420_init, | ||
1128 | .setup = pci_default_setup, | ||
1129 | .exit = __devexit_p(pci_ni8420_exit), | ||
1130 | }, | ||
1131 | { | ||
1132 | .vendor = PCI_VENDOR_ID_NI, | ||
1133 | .device = PCI_DEVICE_ID_NI_PXI8420_23216, | ||
1134 | .subvendor = PCI_ANY_ID, | ||
1135 | .subdevice = PCI_ANY_ID, | ||
1136 | .init = pci_ni8420_init, | ||
1137 | .setup = pci_default_setup, | ||
1138 | .exit = __devexit_p(pci_ni8420_exit), | ||
1139 | }, | ||
1140 | { | ||
1141 | .vendor = PCI_VENDOR_ID_NI, | ||
1142 | .device = PCI_DEVICE_ID_NI_PXI8420_2328, | ||
1143 | .subvendor = PCI_ANY_ID, | ||
1144 | .subdevice = PCI_ANY_ID, | ||
1145 | .init = pci_ni8420_init, | ||
1146 | .setup = pci_default_setup, | ||
1147 | .exit = __devexit_p(pci_ni8420_exit), | ||
1148 | }, | ||
1149 | { | ||
1150 | .vendor = PCI_VENDOR_ID_NI, | ||
1151 | .device = PCI_DEVICE_ID_NI_PXI8420_2324, | ||
1152 | .subvendor = PCI_ANY_ID, | ||
1153 | .subdevice = PCI_ANY_ID, | ||
1154 | .init = pci_ni8420_init, | ||
1155 | .setup = pci_default_setup, | ||
1156 | .exit = __devexit_p(pci_ni8420_exit), | ||
1157 | }, | ||
1158 | { | ||
1159 | .vendor = PCI_VENDOR_ID_NI, | ||
1160 | .device = PCI_DEVICE_ID_NI_PXI8420_2322, | ||
1161 | .subvendor = PCI_ANY_ID, | ||
1162 | .subdevice = PCI_ANY_ID, | ||
1163 | .init = pci_ni8420_init, | ||
1164 | .setup = pci_default_setup, | ||
1165 | .exit = __devexit_p(pci_ni8420_exit), | ||
1166 | }, | ||
1167 | { | ||
1168 | .vendor = PCI_VENDOR_ID_NI, | ||
1169 | .device = PCI_DEVICE_ID_NI_PXI8422_2324, | ||
1170 | .subvendor = PCI_ANY_ID, | ||
1171 | .subdevice = PCI_ANY_ID, | ||
1172 | .init = pci_ni8420_init, | ||
1173 | .setup = pci_default_setup, | ||
1174 | .exit = __devexit_p(pci_ni8420_exit), | ||
1175 | }, | ||
1176 | { | ||
1177 | .vendor = PCI_VENDOR_ID_NI, | ||
1178 | .device = PCI_DEVICE_ID_NI_PXI8422_2322, | ||
1179 | .subvendor = PCI_ANY_ID, | ||
1180 | .subdevice = PCI_ANY_ID, | ||
1181 | .init = pci_ni8420_init, | ||
1182 | .setup = pci_default_setup, | ||
1183 | .exit = __devexit_p(pci_ni8420_exit), | ||
1184 | }, | ||
1185 | { | ||
1186 | .vendor = PCI_VENDOR_ID_NI, | ||
1187 | .device = PCI_ANY_ID, | ||
1188 | .subvendor = PCI_ANY_ID, | ||
1189 | .subdevice = PCI_ANY_ID, | ||
1190 | .init = pci_ni8430_init, | ||
1191 | .setup = pci_ni8430_setup, | ||
1192 | .exit = __devexit_p(pci_ni8430_exit), | ||
1193 | }, | ||
1194 | /* | ||
916 | * Panacom | 1195 | * Panacom |
917 | */ | 1196 | */ |
918 | { | 1197 | { |
@@ -1216,6 +1495,7 @@ enum pci_board_num_t { | |||
1216 | pbn_b1_2_115200, | 1495 | pbn_b1_2_115200, |
1217 | pbn_b1_4_115200, | 1496 | pbn_b1_4_115200, |
1218 | pbn_b1_8_115200, | 1497 | pbn_b1_8_115200, |
1498 | pbn_b1_16_115200, | ||
1219 | 1499 | ||
1220 | pbn_b1_1_921600, | 1500 | pbn_b1_1_921600, |
1221 | pbn_b1_2_921600, | 1501 | pbn_b1_2_921600, |
@@ -1225,6 +1505,9 @@ enum pci_board_num_t { | |||
1225 | pbn_b1_2_1250000, | 1505 | pbn_b1_2_1250000, |
1226 | 1506 | ||
1227 | pbn_b1_bt_1_115200, | 1507 | pbn_b1_bt_1_115200, |
1508 | pbn_b1_bt_2_115200, | ||
1509 | pbn_b1_bt_4_115200, | ||
1510 | |||
1228 | pbn_b1_bt_2_921600, | 1511 | pbn_b1_bt_2_921600, |
1229 | 1512 | ||
1230 | pbn_b1_1_1382400, | 1513 | pbn_b1_1_1382400, |
@@ -1280,6 +1563,10 @@ enum pci_board_num_t { | |||
1280 | pbn_exar_XR17C154, | 1563 | pbn_exar_XR17C154, |
1281 | pbn_exar_XR17C158, | 1564 | pbn_exar_XR17C158, |
1282 | pbn_pasemi_1682M, | 1565 | pbn_pasemi_1682M, |
1566 | pbn_ni8430_2, | ||
1567 | pbn_ni8430_4, | ||
1568 | pbn_ni8430_8, | ||
1569 | pbn_ni8430_16, | ||
1283 | }; | 1570 | }; |
1284 | 1571 | ||
1285 | /* | 1572 | /* |
@@ -1487,6 +1774,12 @@ static struct pciserial_board pci_boards[] __devinitdata = { | |||
1487 | .base_baud = 115200, | 1774 | .base_baud = 115200, |
1488 | .uart_offset = 8, | 1775 | .uart_offset = 8, |
1489 | }, | 1776 | }, |
1777 | [pbn_b1_16_115200] = { | ||
1778 | .flags = FL_BASE1, | ||
1779 | .num_ports = 16, | ||
1780 | .base_baud = 115200, | ||
1781 | .uart_offset = 8, | ||
1782 | }, | ||
1490 | 1783 | ||
1491 | [pbn_b1_1_921600] = { | 1784 | [pbn_b1_1_921600] = { |
1492 | .flags = FL_BASE1, | 1785 | .flags = FL_BASE1, |
@@ -1525,6 +1818,18 @@ static struct pciserial_board pci_boards[] __devinitdata = { | |||
1525 | .base_baud = 115200, | 1818 | .base_baud = 115200, |
1526 | .uart_offset = 8, | 1819 | .uart_offset = 8, |
1527 | }, | 1820 | }, |
1821 | [pbn_b1_bt_2_115200] = { | ||
1822 | .flags = FL_BASE1|FL_BASE_BARS, | ||
1823 | .num_ports = 2, | ||
1824 | .base_baud = 115200, | ||
1825 | .uart_offset = 8, | ||
1826 | }, | ||
1827 | [pbn_b1_bt_4_115200] = { | ||
1828 | .flags = FL_BASE1|FL_BASE_BARS, | ||
1829 | .num_ports = 4, | ||
1830 | .base_baud = 115200, | ||
1831 | .uart_offset = 8, | ||
1832 | }, | ||
1528 | 1833 | ||
1529 | [pbn_b1_bt_2_921600] = { | 1834 | [pbn_b1_bt_2_921600] = { |
1530 | .flags = FL_BASE1|FL_BASE_BARS, | 1835 | .flags = FL_BASE1|FL_BASE_BARS, |
@@ -1850,6 +2155,37 @@ static struct pciserial_board pci_boards[] __devinitdata = { | |||
1850 | .num_ports = 1, | 2155 | .num_ports = 1, |
1851 | .base_baud = 8333333, | 2156 | .base_baud = 8333333, |
1852 | }, | 2157 | }, |
2158 | /* | ||
2159 | * National Instruments 843x | ||
2160 | */ | ||
2161 | [pbn_ni8430_16] = { | ||
2162 | .flags = FL_BASE0, | ||
2163 | .num_ports = 16, | ||
2164 | .base_baud = 3686400, | ||
2165 | .uart_offset = 0x10, | ||
2166 | .first_offset = 0x800, | ||
2167 | }, | ||
2168 | [pbn_ni8430_8] = { | ||
2169 | .flags = FL_BASE0, | ||
2170 | .num_ports = 8, | ||
2171 | .base_baud = 3686400, | ||
2172 | .uart_offset = 0x10, | ||
2173 | .first_offset = 0x800, | ||
2174 | }, | ||
2175 | [pbn_ni8430_4] = { | ||
2176 | .flags = FL_BASE0, | ||
2177 | .num_ports = 4, | ||
2178 | .base_baud = 3686400, | ||
2179 | .uart_offset = 0x10, | ||
2180 | .first_offset = 0x800, | ||
2181 | }, | ||
2182 | [pbn_ni8430_2] = { | ||
2183 | .flags = FL_BASE0, | ||
2184 | .num_ports = 2, | ||
2185 | .base_baud = 3686400, | ||
2186 | .uart_offset = 0x10, | ||
2187 | .first_offset = 0x800, | ||
2188 | }, | ||
1853 | }; | 2189 | }; |
1854 | 2190 | ||
1855 | static const struct pci_device_id softmodem_blacklist[] = { | 2191 | static const struct pci_device_id softmodem_blacklist[] = { |
@@ -3052,6 +3388,82 @@ static struct pci_device_id serial_pci_tbl[] = { | |||
3052 | pbn_pasemi_1682M }, | 3388 | pbn_pasemi_1682M }, |
3053 | 3389 | ||
3054 | /* | 3390 | /* |
3391 | * National Instruments | ||
3392 | */ | ||
3393 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI23216, | ||
3394 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3395 | pbn_b1_16_115200 }, | ||
3396 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2328, | ||
3397 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3398 | pbn_b1_8_115200 }, | ||
3399 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324, | ||
3400 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3401 | pbn_b1_bt_4_115200 }, | ||
3402 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322, | ||
3403 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3404 | pbn_b1_bt_2_115200 }, | ||
3405 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324I, | ||
3406 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3407 | pbn_b1_bt_4_115200 }, | ||
3408 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322I, | ||
3409 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3410 | pbn_b1_bt_2_115200 }, | ||
3411 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_23216, | ||
3412 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3413 | pbn_b1_16_115200 }, | ||
3414 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2328, | ||
3415 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3416 | pbn_b1_8_115200 }, | ||
3417 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2324, | ||
3418 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3419 | pbn_b1_bt_4_115200 }, | ||
3420 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2322, | ||
3421 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3422 | pbn_b1_bt_2_115200 }, | ||
3423 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2324, | ||
3424 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3425 | pbn_b1_bt_4_115200 }, | ||
3426 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2322, | ||
3427 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3428 | pbn_b1_bt_2_115200 }, | ||
3429 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2322, | ||
3430 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3431 | pbn_ni8430_2 }, | ||
3432 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2322, | ||
3433 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3434 | pbn_ni8430_2 }, | ||
3435 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2324, | ||
3436 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3437 | pbn_ni8430_4 }, | ||
3438 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2324, | ||
3439 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3440 | pbn_ni8430_4 }, | ||
3441 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2328, | ||
3442 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3443 | pbn_ni8430_8 }, | ||
3444 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2328, | ||
3445 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3446 | pbn_ni8430_8 }, | ||
3447 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_23216, | ||
3448 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3449 | pbn_ni8430_16 }, | ||
3450 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_23216, | ||
3451 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3452 | pbn_ni8430_16 }, | ||
3453 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2322, | ||
3454 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3455 | pbn_ni8430_2 }, | ||
3456 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2322, | ||
3457 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3458 | pbn_ni8430_2 }, | ||
3459 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2324, | ||
3460 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3461 | pbn_ni8430_4 }, | ||
3462 | { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2324, | ||
3463 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3464 | pbn_ni8430_4 }, | ||
3465 | |||
3466 | /* | ||
3055 | * ADDI-DATA GmbH communication cards <info@addi-data.com> | 3467 | * ADDI-DATA GmbH communication cards <info@addi-data.com> |
3056 | */ | 3468 | */ |
3057 | { PCI_VENDOR_ID_ADDIDATA, | 3469 | { PCI_VENDOR_ID_ADDIDATA, |
diff --git a/drivers/serial/8250_pnp.c b/drivers/serial/8250_pnp.c index bbcfc26a3b6d..d71dfe398940 100644 --- a/drivers/serial/8250_pnp.c +++ b/drivers/serial/8250_pnp.c | |||
@@ -333,6 +333,10 @@ static const struct pnp_device_id pnp_dev_table[] = { | |||
333 | { "WACF006", 0 }, | 333 | { "WACF006", 0 }, |
334 | { "WACF007", 0 }, | 334 | { "WACF007", 0 }, |
335 | { "WACF008", 0 }, | 335 | { "WACF008", 0 }, |
336 | { "WACF009", 0 }, | ||
337 | { "WACF00A", 0 }, | ||
338 | { "WACF00B", 0 }, | ||
339 | { "WACF00C", 0 }, | ||
336 | /* Compaq touchscreen */ | 340 | /* Compaq touchscreen */ |
337 | { "FPI2002", 0 }, | 341 | { "FPI2002", 0 }, |
338 | /* Fujitsu Stylistic touchscreens */ | 342 | /* Fujitsu Stylistic touchscreens */ |
@@ -346,8 +350,9 @@ static const struct pnp_device_id pnp_dev_table[] = { | |||
346 | { "FUJ02B8", 0 }, | 350 | { "FUJ02B8", 0 }, |
347 | { "FUJ02B9", 0 }, | 351 | { "FUJ02B9", 0 }, |
348 | { "FUJ02BC", 0 }, | 352 | { "FUJ02BC", 0 }, |
349 | /* Fujitsu Wacom Tablet PC devices */ | 353 | /* Fujitsu Wacom Tablet PC device */ |
350 | { "FUJ02E5", 0 }, | 354 | { "FUJ02E5", 0 }, |
355 | /* Fujitsu P-series tablet PC device */ | ||
351 | { "FUJ02E6", 0 }, | 356 | { "FUJ02E6", 0 }, |
352 | /* | 357 | /* |
353 | * LG C1 EXPRESS DUAL (C1-PB11A3) touch screen (actually a FUJ02E6 in | 358 | * LG C1 EXPRESS DUAL (C1-PB11A3) touch screen (actually a FUJ02E6 in |
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index aa9d3a4c2d50..07c03b9eb126 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig | |||
@@ -770,7 +770,7 @@ config UART1_RTS_PIN | |||
770 | 770 | ||
771 | config SERIAL_BFIN_UART2 | 771 | config SERIAL_BFIN_UART2 |
772 | bool "Enable UART2" | 772 | bool "Enable UART2" |
773 | depends on SERIAL_BFIN && (BF54x) | 773 | depends on SERIAL_BFIN && (BF54x || BF538 || BF539) |
774 | help | 774 | help |
775 | Enable UART2 | 775 | Enable UART2 |
776 | 776 | ||
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 318d69dce8e1..f9b5a72e261a 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c | |||
@@ -174,10 +174,10 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart) | |||
174 | return; | 174 | return; |
175 | } | 175 | } |
176 | 176 | ||
177 | if (!uart->port.info || !uart->port.info->tty) | 177 | if (!uart->port.info || !uart->port.info->port.tty) |
178 | return; | 178 | return; |
179 | #endif | 179 | #endif |
180 | tty = uart->port.info->tty; | 180 | tty = uart->port.info->port.tty; |
181 | 181 | ||
182 | if (ANOMALY_05000363) { | 182 | if (ANOMALY_05000363) { |
183 | /* The BF533 (and BF561) family of processors have a nice anomaly | 183 | /* The BF533 (and BF561) family of processors have a nice anomaly |
@@ -401,9 +401,11 @@ static void bfin_serial_dma_rx_chars(struct bfin_serial_port *uart) | |||
401 | else | 401 | else |
402 | flg = TTY_NORMAL; | 402 | flg = TTY_NORMAL; |
403 | 403 | ||
404 | for (i = uart->rx_dma_buf.tail; i != uart->rx_dma_buf.head; i++) { | 404 | for (i = uart->rx_dma_buf.tail; ; i++) { |
405 | if (i >= UART_XMIT_SIZE) | 405 | if (i >= UART_XMIT_SIZE) |
406 | i = 0; | 406 | i = 0; |
407 | if (i == uart->rx_dma_buf.head) | ||
408 | break; | ||
407 | if (!uart_handle_sysrq_char(&uart->port, uart->rx_dma_buf.buf[i])) | 409 | if (!uart_handle_sysrq_char(&uart->port, uart->rx_dma_buf.buf[i])) |
408 | uart_insert_char(&uart->port, status, OE, | 410 | uart_insert_char(&uart->port, status, OE, |
409 | uart->rx_dma_buf.buf[i], flg); | 411 | uart->rx_dma_buf.buf[i], flg); |
@@ -415,7 +417,8 @@ static void bfin_serial_dma_rx_chars(struct bfin_serial_port *uart) | |||
415 | 417 | ||
416 | void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart) | 418 | void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart) |
417 | { | 419 | { |
418 | int x_pos, pos, flags; | 420 | int x_pos, pos; |
421 | unsigned long flags; | ||
419 | 422 | ||
420 | spin_lock_irqsave(&uart->port.lock, flags); | 423 | spin_lock_irqsave(&uart->port.lock, flags); |
421 | 424 | ||
@@ -757,7 +760,7 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios, | |||
757 | } | 760 | } |
758 | 761 | ||
759 | baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); | 762 | baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); |
760 | quot = uart_get_divisor(port, baud); | 763 | quot = uart_get_divisor(port, baud) - ANOMALY_05000230; |
761 | spin_lock_irqsave(&uart->port.lock, flags); | 764 | spin_lock_irqsave(&uart->port.lock, flags); |
762 | 765 | ||
763 | UART_SET_ANOMALY_THRESHOLD(uart, USEC_PER_SEC / baud * 15); | 766 | UART_SET_ANOMALY_THRESHOLD(uart, USEC_PER_SEC / baud * 15); |
@@ -1088,7 +1091,7 @@ static void | |||
1088 | bfin_serial_console_write(struct console *co, const char *s, unsigned int count) | 1091 | bfin_serial_console_write(struct console *co, const char *s, unsigned int count) |
1089 | { | 1092 | { |
1090 | struct bfin_serial_port *uart = &bfin_serial_ports[co->index]; | 1093 | struct bfin_serial_port *uart = &bfin_serial_ports[co->index]; |
1091 | int flags = 0; | 1094 | unsigned long flags; |
1092 | 1095 | ||
1093 | spin_lock_irqsave(&uart->port.lock, flags); | 1096 | spin_lock_irqsave(&uart->port.lock, flags); |
1094 | uart_console_write(&uart->port, s, count, bfin_serial_console_putchar); | 1097 | uart_console_write(&uart->port, s, count, bfin_serial_console_putchar); |
diff --git a/drivers/serial/icom.c b/drivers/serial/icom.c index 2b7531d9f6ab..6579e2be1dd1 100644 --- a/drivers/serial/icom.c +++ b/drivers/serial/icom.c | |||
@@ -1098,7 +1098,6 @@ static void icom_set_termios(struct uart_port *port, | |||
1098 | { | 1098 | { |
1099 | int baud; | 1099 | int baud; |
1100 | unsigned cflag, iflag; | 1100 | unsigned cflag, iflag; |
1101 | int bits; | ||
1102 | char new_config2; | 1101 | char new_config2; |
1103 | char new_config3 = 0; | 1102 | char new_config3 = 0; |
1104 | char tmp_byte; | 1103 | char tmp_byte; |
@@ -1119,34 +1118,27 @@ static void icom_set_termios(struct uart_port *port, | |||
1119 | switch (cflag & CSIZE) { | 1118 | switch (cflag & CSIZE) { |
1120 | case CS5: /* 5 bits/char */ | 1119 | case CS5: /* 5 bits/char */ |
1121 | new_config2 |= ICOM_ACFG_5BPC; | 1120 | new_config2 |= ICOM_ACFG_5BPC; |
1122 | bits = 7; | ||
1123 | break; | 1121 | break; |
1124 | case CS6: /* 6 bits/char */ | 1122 | case CS6: /* 6 bits/char */ |
1125 | new_config2 |= ICOM_ACFG_6BPC; | 1123 | new_config2 |= ICOM_ACFG_6BPC; |
1126 | bits = 8; | ||
1127 | break; | 1124 | break; |
1128 | case CS7: /* 7 bits/char */ | 1125 | case CS7: /* 7 bits/char */ |
1129 | new_config2 |= ICOM_ACFG_7BPC; | 1126 | new_config2 |= ICOM_ACFG_7BPC; |
1130 | bits = 9; | ||
1131 | break; | 1127 | break; |
1132 | case CS8: /* 8 bits/char */ | 1128 | case CS8: /* 8 bits/char */ |
1133 | new_config2 |= ICOM_ACFG_8BPC; | 1129 | new_config2 |= ICOM_ACFG_8BPC; |
1134 | bits = 10; | ||
1135 | break; | 1130 | break; |
1136 | default: | 1131 | default: |
1137 | bits = 10; | ||
1138 | break; | 1132 | break; |
1139 | } | 1133 | } |
1140 | if (cflag & CSTOPB) { | 1134 | if (cflag & CSTOPB) { |
1141 | /* 2 stop bits */ | 1135 | /* 2 stop bits */ |
1142 | new_config2 |= ICOM_ACFG_2STOP_BIT; | 1136 | new_config2 |= ICOM_ACFG_2STOP_BIT; |
1143 | bits++; | ||
1144 | } | 1137 | } |
1145 | if (cflag & PARENB) { | 1138 | if (cflag & PARENB) { |
1146 | /* parity bit enabled */ | 1139 | /* parity bit enabled */ |
1147 | new_config2 |= ICOM_ACFG_PARITY_ENAB; | 1140 | new_config2 |= ICOM_ACFG_PARITY_ENAB; |
1148 | trace(ICOM_PORT, "PARENB", 0); | 1141 | trace(ICOM_PORT, "PARENB", 0); |
1149 | bits++; | ||
1150 | } | 1142 | } |
1151 | if (cflag & PARODD) { | 1143 | if (cflag & PARODD) { |
1152 | /* odd parity */ | 1144 | /* odd parity */ |
@@ -1322,7 +1314,6 @@ static struct uart_driver icom_uart_driver = { | |||
1322 | static int __devinit icom_init_ports(struct icom_adapter *icom_adapter) | 1314 | static int __devinit icom_init_ports(struct icom_adapter *icom_adapter) |
1323 | { | 1315 | { |
1324 | u32 subsystem_id = icom_adapter->subsystem_id; | 1316 | u32 subsystem_id = icom_adapter->subsystem_id; |
1325 | int retval = 0; | ||
1326 | int i; | 1317 | int i; |
1327 | struct icom_port *icom_port; | 1318 | struct icom_port *icom_port; |
1328 | 1319 | ||
@@ -1368,7 +1359,7 @@ static int __devinit icom_init_ports(struct icom_adapter *icom_adapter) | |||
1368 | } | 1359 | } |
1369 | } | 1360 | } |
1370 | 1361 | ||
1371 | return retval; | 1362 | return 0; |
1372 | } | 1363 | } |
1373 | 1364 | ||
1374 | static void icom_port_active(struct icom_port *icom_port, struct icom_adapter *icom_adapter, int port_num) | 1365 | static void icom_port_active(struct icom_port *icom_port, struct icom_adapter *icom_adapter, int port_num) |
@@ -1391,7 +1382,6 @@ static int __devinit icom_load_ports(struct icom_adapter *icom_adapter) | |||
1391 | { | 1382 | { |
1392 | struct icom_port *icom_port; | 1383 | struct icom_port *icom_port; |
1393 | int port_num; | 1384 | int port_num; |
1394 | int retval; | ||
1395 | 1385 | ||
1396 | for (port_num = 0; port_num < icom_adapter->numb_ports; port_num++) { | 1386 | for (port_num = 0; port_num < icom_adapter->numb_ports; port_num++) { |
1397 | 1387 | ||
@@ -1405,7 +1395,7 @@ static int __devinit icom_load_ports(struct icom_adapter *icom_adapter) | |||
1405 | icom_port->adapter = icom_adapter; | 1395 | icom_port->adapter = icom_adapter; |
1406 | 1396 | ||
1407 | /* get port memory */ | 1397 | /* get port memory */ |
1408 | if ((retval = get_port_memory(icom_port)) != 0) { | 1398 | if (get_port_memory(icom_port) != 0) { |
1409 | dev_err(&icom_port->adapter->pci_dev->dev, | 1399 | dev_err(&icom_port->adapter->pci_dev->dev, |
1410 | "Memory allocation for port FAILED\n"); | 1400 | "Memory allocation for port FAILED\n"); |
1411 | } | 1401 | } |
diff --git a/drivers/serial/jsm/jsm_driver.c b/drivers/serial/jsm/jsm_driver.c index ac79cbe4c2cf..d2d32a198629 100644 --- a/drivers/serial/jsm/jsm_driver.c +++ b/drivers/serial/jsm/jsm_driver.c | |||
@@ -52,12 +52,11 @@ int jsm_debug; | |||
52 | module_param(jsm_debug, int, 0); | 52 | module_param(jsm_debug, int, 0); |
53 | MODULE_PARM_DESC(jsm_debug, "Driver debugging level"); | 53 | MODULE_PARM_DESC(jsm_debug, "Driver debugging level"); |
54 | 54 | ||
55 | static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent) | 55 | static int __devinit jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent) |
56 | { | 56 | { |
57 | int rc = 0; | 57 | int rc = 0; |
58 | struct jsm_board *brd; | 58 | struct jsm_board *brd; |
59 | static int adapter_count = 0; | 59 | static int adapter_count = 0; |
60 | int retval; | ||
61 | 60 | ||
62 | rc = pci_enable_device(pdev); | 61 | rc = pci_enable_device(pdev); |
63 | if (rc) { | 62 | if (rc) { |
@@ -134,7 +133,7 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
134 | rc = jsm_tty_init(brd); | 133 | rc = jsm_tty_init(brd); |
135 | if (rc < 0) { | 134 | if (rc < 0) { |
136 | dev_err(&pdev->dev, "Can't init tty devices (%d)\n", rc); | 135 | dev_err(&pdev->dev, "Can't init tty devices (%d)\n", rc); |
137 | retval = -ENXIO; | 136 | rc = -ENXIO; |
138 | goto out_free_irq; | 137 | goto out_free_irq; |
139 | } | 138 | } |
140 | 139 | ||
@@ -142,7 +141,7 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
142 | if (rc < 0) { | 141 | if (rc < 0) { |
143 | /* XXX: leaking all resources from jsm_tty_init here! */ | 142 | /* XXX: leaking all resources from jsm_tty_init here! */ |
144 | dev_err(&pdev->dev, "Can't init uart port (%d)\n", rc); | 143 | dev_err(&pdev->dev, "Can't init uart port (%d)\n", rc); |
145 | retval = -ENXIO; | 144 | rc = -ENXIO; |
146 | goto out_free_irq; | 145 | goto out_free_irq; |
147 | } | 146 | } |
148 | 147 | ||
@@ -161,7 +160,7 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
161 | /* XXX: leaking all resources from jsm_tty_init and | 160 | /* XXX: leaking all resources from jsm_tty_init and |
162 | jsm_uart_port_init here! */ | 161 | jsm_uart_port_init here! */ |
163 | dev_err(&pdev->dev, "memory allocation for flipbuf failed\n"); | 162 | dev_err(&pdev->dev, "memory allocation for flipbuf failed\n"); |
164 | retval = -ENOMEM; | 163 | rc = -ENOMEM; |
165 | goto out_free_irq; | 164 | goto out_free_irq; |
166 | } | 165 | } |
167 | 166 | ||
diff --git a/drivers/serial/jsm/jsm_tty.c b/drivers/serial/jsm/jsm_tty.c index 324c74d2f666..330696309f76 100644 --- a/drivers/serial/jsm/jsm_tty.c +++ b/drivers/serial/jsm/jsm_tty.c | |||
@@ -367,7 +367,7 @@ static struct uart_ops jsm_ops = { | |||
367 | * Init the tty subsystem. Called once per board after board has been | 367 | * Init the tty subsystem. Called once per board after board has been |
368 | * downloaded and init'ed. | 368 | * downloaded and init'ed. |
369 | */ | 369 | */ |
370 | int jsm_tty_init(struct jsm_board *brd) | 370 | int __devinit jsm_tty_init(struct jsm_board *brd) |
371 | { | 371 | { |
372 | int i; | 372 | int i; |
373 | void __iomem *vaddr; | 373 | void __iomem *vaddr; |
@@ -431,7 +431,7 @@ int jsm_tty_init(struct jsm_board *brd) | |||
431 | return 0; | 431 | return 0; |
432 | } | 432 | } |
433 | 433 | ||
434 | int jsm_uart_port_init(struct jsm_board *brd) | 434 | int __devinit jsm_uart_port_init(struct jsm_board *brd) |
435 | { | 435 | { |
436 | int i; | 436 | int i; |
437 | struct jsm_channel *ch; | 437 | struct jsm_channel *ch; |
diff --git a/drivers/serial/ucc_uart.c b/drivers/serial/ucc_uart.c index 315a9333ca3c..7de66c06b05d 100644 --- a/drivers/serial/ucc_uart.c +++ b/drivers/serial/ucc_uart.c | |||
@@ -1274,6 +1274,7 @@ static int ucc_uart_probe(struct of_device *ofdev, | |||
1274 | if (!iprop) { | 1274 | if (!iprop) { |
1275 | iprop = of_get_property(np, "device-id", NULL); | 1275 | iprop = of_get_property(np, "device-id", NULL); |
1276 | if (!iprop) { | 1276 | if (!iprop) { |
1277 | kfree(qe_port); | ||
1277 | dev_err(&ofdev->dev, "UCC is unspecified in " | 1278 | dev_err(&ofdev->dev, "UCC is unspecified in " |
1278 | "device tree\n"); | 1279 | "device tree\n"); |
1279 | return -EINVAL; | 1280 | return -EINVAL; |
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index b3d5a23ab56f..869d47cb6db3 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
@@ -1358,6 +1358,9 @@ static struct usb_device_id acm_ids[] = { | |||
1358 | { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */ | 1358 | { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */ |
1359 | .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ | 1359 | .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ |
1360 | }, | 1360 | }, |
1361 | { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */ | ||
1362 | .driver_info = SINGLE_RX_URB, | ||
1363 | }, | ||
1361 | { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */ | 1364 | { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */ |
1362 | .driver_info = SINGLE_RX_URB, /* firmware bug */ | 1365 | .driver_info = SINGLE_RX_URB, /* firmware bug */ |
1363 | }, | 1366 | }, |
@@ -1493,4 +1496,4 @@ module_exit(acm_exit); | |||
1493 | MODULE_AUTHOR( DRIVER_AUTHOR ); | 1496 | MODULE_AUTHOR( DRIVER_AUTHOR ); |
1494 | MODULE_DESCRIPTION( DRIVER_DESC ); | 1497 | MODULE_DESCRIPTION( DRIVER_DESC ); |
1495 | MODULE_LICENSE("GPL"); | 1498 | MODULE_LICENSE("GPL"); |
1496 | 1499 | MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR); | |
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 1aed584be5eb..751a533a4347 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
@@ -79,6 +79,7 @@ static struct usb_device_id id_table [] = { | |||
79 | { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) }, | 79 | { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) }, |
80 | { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) }, | 80 | { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) }, |
81 | { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) }, | 81 | { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) }, |
82 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */ | ||
82 | { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) }, | 83 | { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) }, |
83 | { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) }, | 84 | { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) }, |
84 | { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) }, | 85 | { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) }, |
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h index 54974f446a8c..1d7a22e3a9fd 100644 --- a/drivers/usb/serial/pl2303.h +++ b/drivers/usb/serial/pl2303.h | |||
@@ -7,6 +7,10 @@ | |||
7 | * (at your option) any later version. | 7 | * (at your option) any later version. |
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | |||
11 | #define BENQ_VENDOR_ID 0x04a5 | ||
12 | #define BENQ_PRODUCT_ID_S81 0x4027 | ||
13 | |||
10 | #define PL2303_VENDOR_ID 0x067b | 14 | #define PL2303_VENDOR_ID 0x067b |
11 | #define PL2303_PRODUCT_ID 0x2303 | 15 | #define PL2303_PRODUCT_ID 0x2303 |
12 | #define PL2303_PRODUCT_ID_RSAQ2 0x04bb | 16 | #define PL2303_PRODUCT_ID_RSAQ2 0x04bb |
diff --git a/drivers/usb/serial/symbolserial.c b/drivers/usb/serial/symbolserial.c index 8b3cbc87adc7..69879e437940 100644 --- a/drivers/usb/serial/symbolserial.c +++ b/drivers/usb/serial/symbolserial.c | |||
@@ -139,14 +139,6 @@ static int symbol_open(struct tty_struct *tty, struct usb_serial_port *port, | |||
139 | priv->port = port; | 139 | priv->port = port; |
140 | spin_unlock_irqrestore(&priv->lock, flags); | 140 | spin_unlock_irqrestore(&priv->lock, flags); |
141 | 141 | ||
142 | /* | ||
143 | * Force low_latency on so that our tty_push actually forces the data | ||
144 | * through, otherwise it is scheduled, and with high data rates (like | ||
145 | * with OHCI) data can get lost. | ||
146 | */ | ||
147 | if (tty) | ||
148 | tty->low_latency = 1; | ||
149 | |||
150 | /* Start reading from the device */ | 142 | /* Start reading from the device */ |
151 | usb_fill_int_urb(priv->int_urb, priv->udev, | 143 | usb_fill_int_urb(priv->int_urb, priv->udev, |
152 | usb_rcvintpipe(priv->udev, priv->int_address), | 144 | usb_rcvintpipe(priv->udev, priv->int_address), |
@@ -205,62 +197,6 @@ static void symbol_unthrottle(struct tty_struct *tty) | |||
205 | __func__, result); | 197 | __func__, result); |
206 | } | 198 | } |
207 | 199 | ||
208 | static int symbol_ioctl(struct tty_struct *tty, struct file *file, | ||
209 | unsigned int cmd, unsigned long arg) | ||
210 | { | ||
211 | struct usb_serial_port *port = tty->driver_data; | ||
212 | struct device *dev = &port->dev; | ||
213 | |||
214 | /* | ||
215 | * Right now we need to figure out what commands | ||
216 | * most userspace tools want to see for this driver, | ||
217 | * so just log the things. | ||
218 | */ | ||
219 | switch (cmd) { | ||
220 | case TIOCSERGETLSR: | ||
221 | dev_info(dev, "%s: TIOCSERGETLSR\n", __func__); | ||
222 | break; | ||
223 | |||
224 | case TIOCGSERIAL: | ||
225 | dev_info(dev, "%s: TIOCGSERIAL\n", __func__); | ||
226 | break; | ||
227 | |||
228 | case TIOCMIWAIT: | ||
229 | dev_info(dev, "%s: TIOCMIWAIT\n", __func__); | ||
230 | break; | ||
231 | |||
232 | case TIOCGICOUNT: | ||
233 | dev_info(dev, "%s: TIOCGICOUNT\n", __func__); | ||
234 | break; | ||
235 | default: | ||
236 | dev_info(dev, "%s: unknown (%d)\n", __func__, cmd); | ||
237 | } | ||
238 | return -ENOIOCTLCMD; | ||
239 | } | ||
240 | |||
241 | static int symbol_tiocmget(struct tty_struct *tty, struct file *file) | ||
242 | { | ||
243 | struct usb_serial_port *port = tty->driver_data; | ||
244 | struct device *dev = &port->dev; | ||
245 | |||
246 | /* TODO */ | ||
247 | /* probably just need to shadow whatever was sent to us here */ | ||
248 | dev_info(dev, "%s\n", __func__); | ||
249 | return 0; | ||
250 | } | ||
251 | |||
252 | static int symbol_tiocmset(struct tty_struct *tty, struct file *file, | ||
253 | unsigned int set, unsigned int clear) | ||
254 | { | ||
255 | struct usb_serial_port *port = tty->driver_data; | ||
256 | struct device *dev = &port->dev; | ||
257 | |||
258 | /* TODO */ | ||
259 | /* probably just need to shadow whatever was sent to us here */ | ||
260 | dev_info(dev, "%s\n", __func__); | ||
261 | return 0; | ||
262 | } | ||
263 | |||
264 | static int symbol_startup(struct usb_serial *serial) | 200 | static int symbol_startup(struct usb_serial *serial) |
265 | { | 201 | { |
266 | struct symbol_private *priv; | 202 | struct symbol_private *priv; |
@@ -367,9 +303,6 @@ static struct usb_serial_driver symbol_device = { | |||
367 | .shutdown = symbol_shutdown, | 303 | .shutdown = symbol_shutdown, |
368 | .throttle = symbol_throttle, | 304 | .throttle = symbol_throttle, |
369 | .unthrottle = symbol_unthrottle, | 305 | .unthrottle = symbol_unthrottle, |
370 | .ioctl = symbol_ioctl, | ||
371 | .tiocmget = symbol_tiocmget, | ||
372 | .tiocmset = symbol_tiocmset, | ||
373 | }; | 306 | }; |
374 | 307 | ||
375 | static int __init symbol_init(void) | 308 | static int __init symbol_init(void) |
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig index 72facb9eb7db..f9d19be05540 100644 --- a/drivers/video/backlight/Kconfig +++ b/drivers/video/backlight/Kconfig | |||
@@ -84,6 +84,15 @@ config LCD_TOSA | |||
84 | If you have an Sharp SL-6000 Zaurus say Y to enable a driver | 84 | If you have an Sharp SL-6000 Zaurus say Y to enable a driver |
85 | for its LCD. | 85 | for its LCD. |
86 | 86 | ||
87 | config LCD_HP700 | ||
88 | tristate "HP Jornada 700 series LCD Driver" | ||
89 | depends on LCD_CLASS_DEVICE | ||
90 | depends on SA1100_JORNADA720_SSP && !PREEMPT | ||
91 | default y | ||
92 | help | ||
93 | If you have an HP Jornada 700 series handheld (710/720/728) | ||
94 | say Y to enable LCD control driver. | ||
95 | |||
87 | # | 96 | # |
88 | # Backlight | 97 | # Backlight |
89 | # | 98 | # |
@@ -157,6 +166,15 @@ config BACKLIGHT_HP680 | |||
157 | If you have a HP Jornada 680, say y to enable the | 166 | If you have a HP Jornada 680, say y to enable the |
158 | backlight driver. | 167 | backlight driver. |
159 | 168 | ||
169 | config BACKLIGHT_HP700 | ||
170 | tristate "HP Jornada 700 series Backlight Driver" | ||
171 | depends on BACKLIGHT_CLASS_DEVICE | ||
172 | depends on SA1100_JORNADA720_SSP && !PREEMPT | ||
173 | default y | ||
174 | help | ||
175 | If you have an HP Jornada 700 series, | ||
176 | say Y to include backlight control driver. | ||
177 | |||
160 | config BACKLIGHT_PROGEAR | 178 | config BACKLIGHT_PROGEAR |
161 | tristate "Frontpath ProGear Backlight Driver" | 179 | tristate "Frontpath ProGear Backlight Driver" |
162 | depends on BACKLIGHT_CLASS_DEVICE && PCI && X86 | 180 | depends on BACKLIGHT_CLASS_DEVICE && PCI && X86 |
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile index 63d759498165..4eb178c1d684 100644 --- a/drivers/video/backlight/Makefile +++ b/drivers/video/backlight/Makefile | |||
@@ -2,6 +2,7 @@ | |||
2 | 2 | ||
3 | obj-$(CONFIG_LCD_CLASS_DEVICE) += lcd.o | 3 | obj-$(CONFIG_LCD_CLASS_DEVICE) += lcd.o |
4 | obj-$(CONFIG_LCD_CORGI) += corgi_lcd.o | 4 | obj-$(CONFIG_LCD_CORGI) += corgi_lcd.o |
5 | obj-$(CONFIG_LCD_HP700) += jornada720_lcd.o | ||
5 | obj-$(CONFIG_LCD_LTV350QV) += ltv350qv.o | 6 | obj-$(CONFIG_LCD_LTV350QV) += ltv350qv.o |
6 | obj-$(CONFIG_LCD_ILI9320) += ili9320.o | 7 | obj-$(CONFIG_LCD_ILI9320) += ili9320.o |
7 | obj-$(CONFIG_LCD_PLATFORM) += platform_lcd.o | 8 | obj-$(CONFIG_LCD_PLATFORM) += platform_lcd.o |
@@ -12,6 +13,7 @@ obj-$(CONFIG_LCD_TOSA) += tosa_lcd.o | |||
12 | obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o | 13 | obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o |
13 | obj-$(CONFIG_BACKLIGHT_ATMEL_PWM) += atmel-pwm-bl.o | 14 | obj-$(CONFIG_BACKLIGHT_ATMEL_PWM) += atmel-pwm-bl.o |
14 | obj-$(CONFIG_BACKLIGHT_GENERIC) += generic_bl.o | 15 | obj-$(CONFIG_BACKLIGHT_GENERIC) += generic_bl.o |
16 | obj-$(CONFIG_BACKLIGHT_HP700) += jornada720_bl.o | ||
15 | obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o | 17 | obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o |
16 | obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o | 18 | obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o |
17 | obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o | 19 | obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o |
diff --git a/drivers/video/backlight/jornada720_bl.c b/drivers/video/backlight/jornada720_bl.c new file mode 100644 index 000000000000..c3ebb6b41ce1 --- /dev/null +++ b/drivers/video/backlight/jornada720_bl.c | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Backlight driver for HP Jornada 700 series (710/720/728) | ||
4 | * Copyright (C) 2006-2009 Kristoffer Ericson <kristoffer.ericson@gmail.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License version | ||
8 | * 2 or any later version as published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/backlight.h> | ||
13 | #include <linux/device.h> | ||
14 | #include <linux/fb.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/module.h> | ||
17 | #include <linux/platform_device.h> | ||
18 | |||
19 | #include <mach/jornada720.h> | ||
20 | #include <mach/hardware.h> | ||
21 | |||
22 | #include <video/s1d13xxxfb.h> | ||
23 | |||
24 | #define BL_MAX_BRIGHT 255 | ||
25 | #define BL_DEF_BRIGHT 25 | ||
26 | |||
27 | static int jornada_bl_get_brightness(struct backlight_device *bd) | ||
28 | { | ||
29 | int ret; | ||
30 | |||
31 | /* check if backlight is on */ | ||
32 | if (!(PPSR & PPC_LDD1)) | ||
33 | return 0; | ||
34 | |||
35 | jornada_ssp_start(); | ||
36 | |||
37 | /* cmd should return txdummy */ | ||
38 | ret = jornada_ssp_byte(GETBRIGHTNESS); | ||
39 | |||
40 | if (jornada_ssp_byte(GETBRIGHTNESS) != TXDUMMY) { | ||
41 | printk(KERN_ERR "bl : get brightness timeout\n"); | ||
42 | jornada_ssp_end(); | ||
43 | return -ETIMEDOUT; | ||
44 | } else /* exchange txdummy for value */ | ||
45 | ret = jornada_ssp_byte(TXDUMMY); | ||
46 | |||
47 | jornada_ssp_end(); | ||
48 | |||
49 | return (BL_MAX_BRIGHT - ret); | ||
50 | } | ||
51 | |||
52 | static int jornada_bl_update_status(struct backlight_device *bd) | ||
53 | { | ||
54 | int ret = 0; | ||
55 | |||
56 | jornada_ssp_start(); | ||
57 | |||
58 | /* If backlight is off then really turn it off */ | ||
59 | if ((bd->props.power != FB_BLANK_UNBLANK) || (bd->props.fb_blank != FB_BLANK_UNBLANK)) { | ||
60 | ret = jornada_ssp_byte(BRIGHTNESSOFF); | ||
61 | if (ret != TXDUMMY) { | ||
62 | printk(KERN_INFO "bl : brightness off timeout\n"); | ||
63 | /* turn off backlight */ | ||
64 | PPSR &= ~PPC_LDD1; | ||
65 | PPDR |= PPC_LDD1; | ||
66 | ret = -ETIMEDOUT; | ||
67 | } | ||
68 | } else /* turn on backlight */ | ||
69 | PPSR |= PPC_LDD1; | ||
70 | |||
71 | /* send command to our mcu */ | ||
72 | if (jornada_ssp_byte(SETBRIGHTNESS) != TXDUMMY) { | ||
73 | printk(KERN_INFO "bl : failed to set brightness\n"); | ||
74 | ret = -ETIMEDOUT; | ||
75 | goto out | ||
76 | } | ||
77 | |||
78 | /* at this point we expect that the mcu has accepted | ||
79 | our command and is waiting for our new value | ||
80 | please note that maximum brightness is 255, | ||
81 | but due to physical layout it is equal to 0, so we simply | ||
82 | invert the value (MAX VALUE - NEW VALUE). */ | ||
83 | if (jornada_ssp_byte(BL_MAX_BRIGHT - bd->props.brightness) != TXDUMMY) { | ||
84 | printk(KERN_ERR "bl : set brightness failed\n"); | ||
85 | ret = -ETIMEDOUT; | ||
86 | } | ||
87 | |||
88 | /* If infact we get an TXDUMMY as output we are happy and dont | ||
89 | make any further comments about it */ | ||
90 | out: | ||
91 | jornada_ssp_end(); | ||
92 | |||
93 | return ret; | ||
94 | } | ||
95 | |||
96 | static struct backlight_ops jornada_bl_ops = { | ||
97 | .get_brightness = jornada_bl_get_brightness, | ||
98 | .update_status = jornada_bl_update_status, | ||
99 | .options = BL_CORE_SUSPENDRESUME, | ||
100 | }; | ||
101 | |||
102 | static int jornada_bl_probe(struct platform_device *pdev) | ||
103 | { | ||
104 | int ret; | ||
105 | struct backlight_device *bd; | ||
106 | |||
107 | bd = backlight_device_register(S1D_DEVICENAME, &pdev->dev, NULL, &jornada_bl_ops); | ||
108 | |||
109 | if (IS_ERR(bd)) { | ||
110 | ret = PTR_ERR(bd); | ||
111 | printk(KERN_ERR "bl : failed to register device, err=%x\n", ret); | ||
112 | return ret; | ||
113 | } | ||
114 | |||
115 | bd->props.power = FB_BLANK_UNBLANK; | ||
116 | bd->props.brightness = BL_DEF_BRIGHT; | ||
117 | /* note. make sure max brightness is set otherwise | ||
118 | you will get seemingly non-related errors when | ||
119 | trying to change brightness */ | ||
120 | bd->props.max_brightness = BL_MAX_BRIGHT; | ||
121 | jornada_bl_update_status(bd); | ||
122 | |||
123 | platform_set_drvdata(pdev, bd); | ||
124 | printk(KERN_INFO "HP Jornada 700 series backlight driver\n"); | ||
125 | |||
126 | return 0; | ||
127 | } | ||
128 | |||
129 | static int jornada_bl_remove(struct platform_device *pdev) | ||
130 | { | ||
131 | struct backlight_device *bd = platform_get_drvdata(pdev); | ||
132 | |||
133 | backlight_device_unregister(bd); | ||
134 | |||
135 | return 0; | ||
136 | } | ||
137 | |||
138 | static struct platform_driver jornada_bl_driver = { | ||
139 | .probe = jornada_bl_probe, | ||
140 | .remove = jornada_bl_remove, | ||
141 | .driver = { | ||
142 | .name = "jornada_bl", | ||
143 | }, | ||
144 | }; | ||
145 | |||
146 | int __init jornada_bl_init(void) | ||
147 | { | ||
148 | return platform_driver_register(&jornada_bl_driver); | ||
149 | } | ||
150 | |||
151 | void __exit jornada_bl_exit(void) | ||
152 | { | ||
153 | platform_driver_unregister(&jornada_bl_driver); | ||
154 | } | ||
155 | |||
156 | MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson>"); | ||
157 | MODULE_DESCRIPTION("HP Jornada 710/720/728 Backlight driver"); | ||
158 | MODULE_LICENSE("GPL"); | ||
159 | |||
160 | module_init(jornada_bl_init); | ||
161 | module_exit(jornada_bl_exit); | ||
diff --git a/drivers/video/backlight/jornada720_lcd.c b/drivers/video/backlight/jornada720_lcd.c new file mode 100644 index 000000000000..cbbb167fd268 --- /dev/null +++ b/drivers/video/backlight/jornada720_lcd.c | |||
@@ -0,0 +1,153 @@ | |||
1 | /* | ||
2 | * | ||
3 | * LCD driver for HP Jornada 700 series (710/720/728) | ||
4 | * Copyright (C) 2006-2009 Kristoffer Ericson <kristoffer.ericson@gmail.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License version | ||
8 | * 2 or any later version as published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/device.h> | ||
13 | #include <linux/fb.h> | ||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/lcd.h> | ||
16 | #include <linux/module.h> | ||
17 | #include <linux/platform_device.h> | ||
18 | #include <linux/delay.h> | ||
19 | |||
20 | #include <mach/jornada720.h> | ||
21 | #include <mach/hardware.h> | ||
22 | |||
23 | #include <video/s1d13xxxfb.h> | ||
24 | |||
25 | #define LCD_MAX_CONTRAST 0xff | ||
26 | #define LCD_DEF_CONTRAST 0x80 | ||
27 | |||
28 | static int jornada_lcd_get_power(struct lcd_device *dev) | ||
29 | { | ||
30 | /* LDD2 in PPC = LCD POWER */ | ||
31 | if (PPSR & PPC_LDD2) | ||
32 | return FB_BLANK_UNBLANK; /* PW ON */ | ||
33 | else | ||
34 | return FB_BLANK_POWERDOWN; /* PW OFF */ | ||
35 | } | ||
36 | |||
37 | static int jornada_lcd_get_contrast(struct lcd_device *dev) | ||
38 | { | ||
39 | int ret; | ||
40 | |||
41 | if (jornada_lcd_get_power(dev) != FB_BLANK_UNBLANK) | ||
42 | return 0; | ||
43 | |||
44 | jornada_ssp_start(); | ||
45 | |||
46 | if (jornada_ssp_byte(GETCONTRAST) != TXDUMMY) { | ||
47 | printk(KERN_ERR "lcd: get contrast failed\n"); | ||
48 | jornada_ssp_end(); | ||
49 | return -ETIMEDOUT; | ||
50 | } else { | ||
51 | ret = jornada_ssp_byte(TXDUMMY); | ||
52 | jornada_ssp_end(); | ||
53 | return ret; | ||
54 | } | ||
55 | } | ||
56 | |||
57 | static int jornada_lcd_set_contrast(struct lcd_device *dev, int value) | ||
58 | { | ||
59 | int ret; | ||
60 | |||
61 | jornada_ssp_start(); | ||
62 | |||
63 | /* start by sending our set contrast cmd to mcu */ | ||
64 | ret = jornada_ssp_byte(SETCONTRAST); | ||
65 | |||
66 | /* push the new value */ | ||
67 | if (jornada_ssp_byte(value) != TXDUMMY) { | ||
68 | printk(KERN_ERR "lcd : set contrast failed\n"); | ||
69 | jornada_ssp_end(); | ||
70 | return -ETIMEDOUT; | ||
71 | } | ||
72 | |||
73 | /* if we get here we can assume everything went well */ | ||
74 | jornada_ssp_end(); | ||
75 | |||
76 | return 0; | ||
77 | } | ||
78 | |||
79 | static int jornada_lcd_set_power(struct lcd_device *dev, int power) | ||
80 | { | ||
81 | if (power != FB_BLANK_UNBLANK) { | ||
82 | PPSR &= ~PPC_LDD2; | ||
83 | PPDR |= PPC_LDD2; | ||
84 | } else | ||
85 | PPSR |= PPC_LDD2; | ||
86 | |||
87 | return 0; | ||
88 | } | ||
89 | |||
90 | static struct lcd_ops jornada_lcd_props = { | ||
91 | .get_contrast = jornada_lcd_get_contrast, | ||
92 | .set_contrast = jornada_lcd_set_contrast, | ||
93 | .get_power = jornada_lcd_get_power, | ||
94 | .set_power = jornada_lcd_set_power, | ||
95 | }; | ||
96 | |||
97 | static int jornada_lcd_probe(struct platform_device *pdev) | ||
98 | { | ||
99 | struct lcd_device *lcd_device; | ||
100 | int ret; | ||
101 | |||
102 | lcd_device = lcd_device_register(S1D_DEVICENAME, &pdev->dev, NULL, &jornada_lcd_props); | ||
103 | |||
104 | if (IS_ERR(lcd_device)) { | ||
105 | ret = PTR_ERR(lcd_device); | ||
106 | printk(KERN_ERR "lcd : failed to register device\n"); | ||
107 | return ret; | ||
108 | } | ||
109 | |||
110 | platform_set_drvdata(pdev, lcd_device); | ||
111 | |||
112 | /* lets set our default values */ | ||
113 | jornada_lcd_set_contrast(lcd_device, LCD_DEF_CONTRAST); | ||
114 | jornada_lcd_set_power(lcd_device, FB_BLANK_UNBLANK); | ||
115 | /* give it some time to startup */ | ||
116 | msleep(100); | ||
117 | |||
118 | return 0; | ||
119 | } | ||
120 | |||
121 | static int jornada_lcd_remove(struct platform_device *pdev) | ||
122 | { | ||
123 | struct lcd_device *lcd_device = platform_get_drvdata(pdev); | ||
124 | |||
125 | lcd_device_unregister(lcd_device); | ||
126 | |||
127 | return 0; | ||
128 | } | ||
129 | |||
130 | static struct platform_driver jornada_lcd_driver = { | ||
131 | .probe = jornada_lcd_probe, | ||
132 | .remove = jornada_lcd_remove, | ||
133 | .driver = { | ||
134 | .name = "jornada_lcd", | ||
135 | }, | ||
136 | }; | ||
137 | |||
138 | int __init jornada_lcd_init(void) | ||
139 | { | ||
140 | return platform_driver_register(&jornada_lcd_driver); | ||
141 | } | ||
142 | |||
143 | void __exit jornada_lcd_exit(void) | ||
144 | { | ||
145 | platform_driver_unregister(&jornada_lcd_driver); | ||
146 | } | ||
147 | |||
148 | MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>"); | ||
149 | MODULE_DESCRIPTION("HP Jornada 710/720/728 LCD driver"); | ||
150 | MODULE_LICENSE("GPL"); | ||
151 | |||
152 | module_init(jornada_lcd_init); | ||
153 | module_exit(jornada_lcd_exit); | ||
diff --git a/drivers/video/backlight/mbp_nvidia_bl.c b/drivers/video/backlight/mbp_nvidia_bl.c index 65864c500455..3bb4c0a50c62 100644 --- a/drivers/video/backlight/mbp_nvidia_bl.c +++ b/drivers/video/backlight/mbp_nvidia_bl.c | |||
@@ -27,73 +27,192 @@ | |||
27 | 27 | ||
28 | static struct backlight_device *mbp_backlight_device; | 28 | static struct backlight_device *mbp_backlight_device; |
29 | 29 | ||
30 | static struct dmi_system_id __initdata mbp_device_table[] = { | 30 | /* Structure to be passed to the DMI_MATCH function. */ |
31 | struct dmi_match_data { | ||
32 | /* I/O resource to allocate. */ | ||
33 | unsigned long iostart; | ||
34 | unsigned long iolen; | ||
35 | /* Backlight operations structure. */ | ||
36 | struct backlight_ops backlight_ops; | ||
37 | }; | ||
38 | |||
39 | /* Module parameters. */ | ||
40 | static int debug; | ||
41 | module_param_named(debug, debug, int, 0644); | ||
42 | MODULE_PARM_DESC(debug, "Set to one to enable debugging messages."); | ||
43 | |||
44 | /* | ||
45 | * Implementation for MacBooks with Intel chipset. | ||
46 | */ | ||
47 | static int intel_chipset_send_intensity(struct backlight_device *bd) | ||
48 | { | ||
49 | int intensity = bd->props.brightness; | ||
50 | |||
51 | if (debug) | ||
52 | printk(KERN_DEBUG "mbp_nvidia_bl: setting brightness to %d\n", | ||
53 | intensity); | ||
54 | |||
55 | outb(0x04 | (intensity << 4), 0xb3); | ||
56 | outb(0xbf, 0xb2); | ||
57 | return 0; | ||
58 | } | ||
59 | |||
60 | static int intel_chipset_get_intensity(struct backlight_device *bd) | ||
61 | { | ||
62 | int intensity; | ||
63 | |||
64 | outb(0x03, 0xb3); | ||
65 | outb(0xbf, 0xb2); | ||
66 | intensity = inb(0xb3) >> 4; | ||
67 | |||
68 | if (debug) | ||
69 | printk(KERN_DEBUG "mbp_nvidia_bl: read brightness of %d\n", | ||
70 | intensity); | ||
71 | |||
72 | return intensity; | ||
73 | } | ||
74 | |||
75 | static const struct dmi_match_data intel_chipset_data = { | ||
76 | .iostart = 0xb2, | ||
77 | .iolen = 2, | ||
78 | .backlight_ops = { | ||
79 | .options = BL_CORE_SUSPENDRESUME, | ||
80 | .get_brightness = intel_chipset_get_intensity, | ||
81 | .update_status = intel_chipset_send_intensity, | ||
82 | } | ||
83 | }; | ||
84 | |||
85 | /* | ||
86 | * Implementation for MacBooks with Nvidia chipset. | ||
87 | */ | ||
88 | static int nvidia_chipset_send_intensity(struct backlight_device *bd) | ||
89 | { | ||
90 | int intensity = bd->props.brightness; | ||
91 | |||
92 | if (debug) | ||
93 | printk(KERN_DEBUG "mbp_nvidia_bl: setting brightness to %d\n", | ||
94 | intensity); | ||
95 | |||
96 | outb(0x04 | (intensity << 4), 0x52f); | ||
97 | outb(0xbf, 0x52e); | ||
98 | return 0; | ||
99 | } | ||
100 | |||
101 | static int nvidia_chipset_get_intensity(struct backlight_device *bd) | ||
102 | { | ||
103 | int intensity; | ||
104 | |||
105 | outb(0x03, 0x52f); | ||
106 | outb(0xbf, 0x52e); | ||
107 | intensity = inb(0x52f) >> 4; | ||
108 | |||
109 | if (debug) | ||
110 | printk(KERN_DEBUG "mbp_nvidia_bl: read brightness of %d\n", | ||
111 | intensity); | ||
112 | |||
113 | return intensity; | ||
114 | } | ||
115 | |||
116 | static const struct dmi_match_data nvidia_chipset_data = { | ||
117 | .iostart = 0x52e, | ||
118 | .iolen = 2, | ||
119 | .backlight_ops = { | ||
120 | .options = BL_CORE_SUSPENDRESUME, | ||
121 | .get_brightness = nvidia_chipset_get_intensity, | ||
122 | .update_status = nvidia_chipset_send_intensity | ||
123 | } | ||
124 | }; | ||
125 | |||
126 | /* | ||
127 | * DMI matching. | ||
128 | */ | ||
129 | static /* const */ struct dmi_match_data *driver_data; | ||
130 | |||
131 | static int mbp_dmi_match(const struct dmi_system_id *id) | ||
132 | { | ||
133 | driver_data = id->driver_data; | ||
134 | |||
135 | printk(KERN_INFO "mbp_nvidia_bl: %s detected\n", id->ident); | ||
136 | return 1; | ||
137 | } | ||
138 | |||
139 | static const struct dmi_system_id __initdata mbp_device_table[] = { | ||
31 | { | 140 | { |
32 | .ident = "3,1", | 141 | .callback = mbp_dmi_match, |
33 | .matches = { | 142 | .ident = "MacBookPro 3,1", |
143 | .matches = { | ||
34 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | 144 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
35 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,1"), | 145 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,1"), |
36 | }, | 146 | }, |
147 | .driver_data = (void *)&intel_chipset_data, | ||
37 | }, | 148 | }, |
38 | { | 149 | { |
39 | .ident = "3,2", | 150 | .callback = mbp_dmi_match, |
40 | .matches = { | 151 | .ident = "MacBookPro 3,2", |
152 | .matches = { | ||
41 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | 153 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
42 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,2"), | 154 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,2"), |
43 | }, | 155 | }, |
156 | .driver_data = (void *)&intel_chipset_data, | ||
44 | }, | 157 | }, |
45 | { | 158 | { |
46 | .ident = "4,1", | 159 | .callback = mbp_dmi_match, |
47 | .matches = { | 160 | .ident = "MacBookPro 4,1", |
161 | .matches = { | ||
48 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | 162 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
49 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro4,1"), | 163 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro4,1"), |
50 | }, | 164 | }, |
165 | .driver_data = (void *)&intel_chipset_data, | ||
166 | }, | ||
167 | { | ||
168 | .callback = mbp_dmi_match, | ||
169 | .ident = "MacBook 5,1", | ||
170 | .matches = { | ||
171 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | ||
172 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5,1"), | ||
173 | }, | ||
174 | .driver_data = (void *)&nvidia_chipset_data, | ||
175 | }, | ||
176 | { | ||
177 | .callback = mbp_dmi_match, | ||
178 | .ident = "MacBookAir 2,1", | ||
179 | .matches = { | ||
180 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | ||
181 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir2,1"), | ||
182 | }, | ||
183 | .driver_data = (void *)&nvidia_chipset_data, | ||
184 | }, | ||
185 | { | ||
186 | .callback = mbp_dmi_match, | ||
187 | .ident = "MacBookPro 5,1", | ||
188 | .matches = { | ||
189 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | ||
190 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,1"), | ||
191 | }, | ||
192 | .driver_data = (void *)&nvidia_chipset_data, | ||
51 | }, | 193 | }, |
52 | { } | 194 | { } |
53 | }; | 195 | }; |
54 | 196 | ||
55 | static int mbp_send_intensity(struct backlight_device *bd) | ||
56 | { | ||
57 | int intensity = bd->props.brightness; | ||
58 | |||
59 | outb(0x04 | (intensity << 4), 0xb3); | ||
60 | outb(0xbf, 0xb2); | ||
61 | |||
62 | return 0; | ||
63 | } | ||
64 | |||
65 | static int mbp_get_intensity(struct backlight_device *bd) | ||
66 | { | ||
67 | outb(0x03, 0xb3); | ||
68 | outb(0xbf, 0xb2); | ||
69 | return inb(0xb3) >> 4; | ||
70 | } | ||
71 | |||
72 | static struct backlight_ops mbp_ops = { | ||
73 | .options = BL_CORE_SUSPENDRESUME, | ||
74 | .get_brightness = mbp_get_intensity, | ||
75 | .update_status = mbp_send_intensity, | ||
76 | }; | ||
77 | |||
78 | static int __init mbp_init(void) | 197 | static int __init mbp_init(void) |
79 | { | 198 | { |
80 | if (!dmi_check_system(mbp_device_table)) | 199 | if (!dmi_check_system(mbp_device_table)) |
81 | return -ENODEV; | 200 | return -ENODEV; |
82 | 201 | ||
83 | if (!request_region(0xb2, 2, "Macbook Pro backlight")) | 202 | if (!request_region(driver_data->iostart, driver_data->iolen, |
203 | "Macbook Pro backlight")) | ||
84 | return -ENXIO; | 204 | return -ENXIO; |
85 | 205 | ||
86 | mbp_backlight_device = backlight_device_register("mbp_backlight", | 206 | mbp_backlight_device = backlight_device_register("mbp_backlight", |
87 | NULL, NULL, | 207 | NULL, NULL, &driver_data->backlight_ops); |
88 | &mbp_ops); | ||
89 | if (IS_ERR(mbp_backlight_device)) { | 208 | if (IS_ERR(mbp_backlight_device)) { |
90 | release_region(0xb2, 2); | 209 | release_region(driver_data->iostart, driver_data->iolen); |
91 | return PTR_ERR(mbp_backlight_device); | 210 | return PTR_ERR(mbp_backlight_device); |
92 | } | 211 | } |
93 | 212 | ||
94 | mbp_backlight_device->props.max_brightness = 15; | 213 | mbp_backlight_device->props.max_brightness = 15; |
95 | mbp_backlight_device->props.brightness = | 214 | mbp_backlight_device->props.brightness = |
96 | mbp_get_intensity(mbp_backlight_device); | 215 | driver_data->backlight_ops.get_brightness(mbp_backlight_device); |
97 | backlight_update_status(mbp_backlight_device); | 216 | backlight_update_status(mbp_backlight_device); |
98 | 217 | ||
99 | return 0; | 218 | return 0; |
@@ -103,7 +222,7 @@ static void __exit mbp_exit(void) | |||
103 | { | 222 | { |
104 | backlight_device_unregister(mbp_backlight_device); | 223 | backlight_device_unregister(mbp_backlight_device); |
105 | 224 | ||
106 | release_region(0xb2, 2); | 225 | release_region(driver_data->iostart, driver_data->iolen); |
107 | } | 226 | } |
108 | 227 | ||
109 | module_init(mbp_init); | 228 | module_init(mbp_init); |
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c index ea07258565f0..e641584e212e 100644 --- a/drivers/video/backlight/pwm_bl.c +++ b/drivers/video/backlight/pwm_bl.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * simple PWM based backlight control, board code has to setup | 4 | * simple PWM based backlight control, board code has to setup |
5 | * 1) pin configuration so PWM waveforms can output | 5 | * 1) pin configuration so PWM waveforms can output |
6 | * 2) platform_data casts to the PWM id (0/1/2/3 on PXA) | 6 | * 2) platform_data being correctly configured |
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 |
9 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
@@ -97,7 +97,7 @@ static int pwm_backlight_probe(struct platform_device *pdev) | |||
97 | } else | 97 | } else |
98 | dev_dbg(&pdev->dev, "got pwm for backlight\n"); | 98 | dev_dbg(&pdev->dev, "got pwm for backlight\n"); |
99 | 99 | ||
100 | bl = backlight_device_register(pdev->name, &pdev->dev, | 100 | bl = backlight_device_register(dev_name(&pdev->dev), &pdev->dev, |
101 | pb, &pwm_backlight_ops); | 101 | pb, &pwm_backlight_ops); |
102 | if (IS_ERR(bl)) { | 102 | if (IS_ERR(bl)) { |
103 | dev_err(&pdev->dev, "failed to register backlight\n"); | 103 | dev_err(&pdev->dev, "failed to register backlight\n"); |