diff options
339 files changed, 25938 insertions, 15490 deletions
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index 58c194572c76..d6ac5d61820e 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
@@ -259,7 +259,7 @@ X!Earch/x86/kernel/mca_32.c | |||
259 | !Eblock/blk-tag.c | 259 | !Eblock/blk-tag.c |
260 | !Iblock/blk-tag.c | 260 | !Iblock/blk-tag.c |
261 | !Eblock/blk-integrity.c | 261 | !Eblock/blk-integrity.c |
262 | !Iblock/blktrace.c | 262 | !Ikernel/trace/blktrace.c |
263 | !Iblock/genhd.c | 263 | !Iblock/genhd.c |
264 | !Eblock/genhd.c | 264 | !Eblock/genhd.c |
265 | </chapter> | 265 | </chapter> |
diff --git a/Documentation/devices.txt b/Documentation/devices.txt index 327de1624759..4d70df63d1d3 100644 --- a/Documentation/devices.txt +++ b/Documentation/devices.txt | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | Maintained by Alan Cox <device@lanana.org> | 4 | Maintained by Alan Cox <device@lanana.org> |
5 | 5 | ||
6 | Last revised: 29 November 2006 | 6 | Last revised: 6th April 2009 |
7 | 7 | ||
8 | This list is the Linux Device List, the official registry of allocated | 8 | This list is the Linux Device List, the official registry of allocated |
9 | device numbers and /dev directory nodes for the Linux operating | 9 | device numbers and /dev directory nodes for the Linux operating |
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 39246fc11257..7e2af10e8264 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -354,7 +354,8 @@ Who: Krzysztof Piotr Oledzki <ole@ans.pl> | |||
354 | 354 | ||
355 | --------------------------- | 355 | --------------------------- |
356 | 356 | ||
357 | What: i2c_attach_client(), i2c_detach_client(), i2c_driver->detach_client() | 357 | What: i2c_attach_client(), i2c_detach_client(), i2c_driver->detach_client(), |
358 | i2c_adapter->client_register(), i2c_adapter->client_unregister | ||
358 | When: 2.6.30 | 359 | When: 2.6.30 |
359 | Check: i2c_attach_client i2c_detach_client | 360 | Check: i2c_attach_client i2c_detach_client |
360 | Why: Deprecated by the new (standard) device driver binding model. Use | 361 | Why: Deprecated by the new (standard) device driver binding model. Use |
diff --git a/Documentation/filesystems/knfsd-stats.txt b/Documentation/filesystems/knfsd-stats.txt new file mode 100644 index 000000000000..64ced5149d37 --- /dev/null +++ b/Documentation/filesystems/knfsd-stats.txt | |||
@@ -0,0 +1,159 @@ | |||
1 | |||
2 | Kernel NFS Server Statistics | ||
3 | ============================ | ||
4 | |||
5 | This document describes the format and semantics of the statistics | ||
6 | which the kernel NFS server makes available to userspace. These | ||
7 | statistics are available in several text form pseudo files, each of | ||
8 | which is described separately below. | ||
9 | |||
10 | In most cases you don't need to know these formats, as the nfsstat(8) | ||
11 | program from the nfs-utils distribution provides a helpful command-line | ||
12 | interface for extracting and printing them. | ||
13 | |||
14 | All the files described here are formatted as a sequence of text lines, | ||
15 | separated by newline '\n' characters. Lines beginning with a hash | ||
16 | '#' character are comments intended for humans and should be ignored | ||
17 | by parsing routines. All other lines contain a sequence of fields | ||
18 | separated by whitespace. | ||
19 | |||
20 | /proc/fs/nfsd/pool_stats | ||
21 | ------------------------ | ||
22 | |||
23 | This file is available in kernels from 2.6.30 onwards, if the | ||
24 | /proc/fs/nfsd filesystem is mounted (it almost always should be). | ||
25 | |||
26 | The first line is a comment which describes the fields present in | ||
27 | all the other lines. The other lines present the following data as | ||
28 | a sequence of unsigned decimal numeric fields. One line is shown | ||
29 | for each NFS thread pool. | ||
30 | |||
31 | All counters are 64 bits wide and wrap naturally. There is no way | ||
32 | to zero these counters, instead applications should do their own | ||
33 | rate conversion. | ||
34 | |||
35 | pool | ||
36 | The id number of the NFS thread pool to which this line applies. | ||
37 | This number does not change. | ||
38 | |||
39 | Thread pool ids are a contiguous set of small integers starting | ||
40 | at zero. The maximum value depends on the thread pool mode, but | ||
41 | currently cannot be larger than the number of CPUs in the system. | ||
42 | Note that in the default case there will be a single thread pool | ||
43 | which contains all the nfsd threads and all the CPUs in the system, | ||
44 | and thus this file will have a single line with a pool id of "0". | ||
45 | |||
46 | packets-arrived | ||
47 | Counts how many NFS packets have arrived. More precisely, this | ||
48 | is the number of times that the network stack has notified the | ||
49 | sunrpc server layer that new data may be available on a transport | ||
50 | (e.g. an NFS or UDP socket or an NFS/RDMA endpoint). | ||
51 | |||
52 | Depending on the NFS workload patterns and various network stack | ||
53 | effects (such as Large Receive Offload) which can combine packets | ||
54 | on the wire, this may be either more or less than the number | ||
55 | of NFS calls received (which statistic is available elsewhere). | ||
56 | However this is a more accurate and less workload-dependent measure | ||
57 | of how much CPU load is being placed on the sunrpc server layer | ||
58 | due to NFS network traffic. | ||
59 | |||
60 | sockets-enqueued | ||
61 | Counts how many times an NFS transport is enqueued to wait for | ||
62 | an nfsd thread to service it, i.e. no nfsd thread was considered | ||
63 | available. | ||
64 | |||
65 | The circumstance this statistic tracks indicates that there was NFS | ||
66 | network-facing work to be done but it couldn't be done immediately, | ||
67 | thus introducing a small delay in servicing NFS calls. The ideal | ||
68 | rate of change for this counter is zero; significantly non-zero | ||
69 | values may indicate a performance limitation. | ||
70 | |||
71 | This can happen either because there are too few nfsd threads in the | ||
72 | thread pool for the NFS workload (the workload is thread-limited), | ||
73 | or because the NFS workload needs more CPU time than is available in | ||
74 | the thread pool (the workload is CPU-limited). In the former case, | ||
75 | configuring more nfsd threads will probably improve the performance | ||
76 | of the NFS workload. In the latter case, the sunrpc server layer is | ||
77 | already choosing not to wake idle nfsd threads because there are too | ||
78 | many nfsd threads which want to run but cannot, so configuring more | ||
79 | nfsd threads will make no difference whatsoever. The overloads-avoided | ||
80 | statistic (see below) can be used to distinguish these cases. | ||
81 | |||
82 | threads-woken | ||
83 | Counts how many times an idle nfsd thread is woken to try to | ||
84 | receive some data from an NFS transport. | ||
85 | |||
86 | This statistic tracks the circumstance where incoming | ||
87 | network-facing NFS work is being handled quickly, which is a good | ||
88 | thing. The ideal rate of change for this counter will be close | ||
89 | to but less than the rate of change of the packets-arrived counter. | ||
90 | |||
91 | overloads-avoided | ||
92 | Counts how many times the sunrpc server layer chose not to wake an | ||
93 | nfsd thread, despite the presence of idle nfsd threads, because | ||
94 | too many nfsd threads had been recently woken but could not get | ||
95 | enough CPU time to actually run. | ||
96 | |||
97 | This statistic counts a circumstance where the sunrpc layer | ||
98 | heuristically avoids overloading the CPU scheduler with too many | ||
99 | runnable nfsd threads. The ideal rate of change for this counter | ||
100 | is zero. Significant non-zero values indicate that the workload | ||
101 | is CPU limited. Usually this is associated with heavy CPU usage | ||
102 | on all the CPUs in the nfsd thread pool. | ||
103 | |||
104 | If a sustained large overloads-avoided rate is detected on a pool, | ||
105 | the top(1) utility should be used to check for the following | ||
106 | pattern of CPU usage on all the CPUs associated with the given | ||
107 | nfsd thread pool. | ||
108 | |||
109 | - %us ~= 0 (as you're *NOT* running applications on your NFS server) | ||
110 | |||
111 | - %wa ~= 0 | ||
112 | |||
113 | - %id ~= 0 | ||
114 | |||
115 | - %sy + %hi + %si ~= 100 | ||
116 | |||
117 | If this pattern is seen, configuring more nfsd threads will *not* | ||
118 | improve the performance of the workload. If this patten is not | ||
119 | seen, then something more subtle is wrong. | ||
120 | |||
121 | threads-timedout | ||
122 | Counts how many times an nfsd thread triggered an idle timeout, | ||
123 | i.e. was not woken to handle any incoming network packets for | ||
124 | some time. | ||
125 | |||
126 | This statistic counts a circumstance where there are more nfsd | ||
127 | threads configured than can be used by the NFS workload. This is | ||
128 | a clue that the number of nfsd threads can be reduced without | ||
129 | affecting performance. Unfortunately, it's only a clue and not | ||
130 | a strong indication, for a couple of reasons: | ||
131 | |||
132 | - Currently the rate at which the counter is incremented is quite | ||
133 | slow; the idle timeout is 60 minutes. Unless the NFS workload | ||
134 | remains constant for hours at a time, this counter is unlikely | ||
135 | to be providing information that is still useful. | ||
136 | |||
137 | - It is usually a wise policy to provide some slack, | ||
138 | i.e. configure a few more nfsds than are currently needed, | ||
139 | to allow for future spikes in load. | ||
140 | |||
141 | |||
142 | Note that incoming packets on NFS transports will be dealt with in | ||
143 | one of three ways. An nfsd thread can be woken (threads-woken counts | ||
144 | this case), or the transport can be enqueued for later attention | ||
145 | (sockets-enqueued counts this case), or the packet can be temporarily | ||
146 | deferred because the transport is currently being used by an nfsd | ||
147 | thread. This last case is not very interesting and is not explicitly | ||
148 | counted, but can be inferred from the other counters thus: | ||
149 | |||
150 | packets-deferred = packets-arrived - ( sockets-enqueued + threads-woken ) | ||
151 | |||
152 | |||
153 | More | ||
154 | ---- | ||
155 | Descriptions of the other statistics file should go here. | ||
156 | |||
157 | |||
158 | Greg Banks <gnb@sgi.com> | ||
159 | 26 Mar 2009 | ||
diff --git a/Documentation/filesystems/nfs41-server.txt b/Documentation/filesystems/nfs41-server.txt new file mode 100644 index 000000000000..05d81cbcb2e1 --- /dev/null +++ b/Documentation/filesystems/nfs41-server.txt | |||
@@ -0,0 +1,161 @@ | |||
1 | NFSv4.1 Server Implementation | ||
2 | |||
3 | Server support for minorversion 1 can be controlled using the | ||
4 | /proc/fs/nfsd/versions control file. The string output returned | ||
5 | by reading this file will contain either "+4.1" or "-4.1" | ||
6 | correspondingly. | ||
7 | |||
8 | Currently, server support for minorversion 1 is disabled by default. | ||
9 | It can be enabled at run time by writing the string "+4.1" to | ||
10 | the /proc/fs/nfsd/versions control file. Note that to write this | ||
11 | control file, the nfsd service must be taken down. Use your user-mode | ||
12 | nfs-utils to set this up; see rpc.nfsd(8) | ||
13 | |||
14 | The NFSv4 minorversion 1 (NFSv4.1) implementation in nfsd is based | ||
15 | on the latest NFSv4.1 Internet Draft: | ||
16 | http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-29 | ||
17 | |||
18 | From the many new features in NFSv4.1 the current implementation | ||
19 | focuses on the mandatory-to-implement NFSv4.1 Sessions, providing | ||
20 | "exactly once" semantics and better control and throttling of the | ||
21 | resources allocated for each client. | ||
22 | |||
23 | Other NFSv4.1 features, Parallel NFS operations in particular, | ||
24 | are still under development out of tree. | ||
25 | See http://wiki.linux-nfs.org/wiki/index.php/PNFS_prototype_design | ||
26 | for more information. | ||
27 | |||
28 | The table below, taken from the NFSv4.1 document, lists | ||
29 | the operations that are mandatory to implement (REQ), optional | ||
30 | (OPT), and NFSv4.0 operations that are required not to implement (MNI) | ||
31 | in minor version 1. The first column indicates the operations that | ||
32 | are not supported yet by the linux server implementation. | ||
33 | |||
34 | The OPTIONAL features identified and their abbreviations are as follows: | ||
35 | pNFS Parallel NFS | ||
36 | FDELG File Delegations | ||
37 | DDELG Directory Delegations | ||
38 | |||
39 | The following abbreviations indicate the linux server implementation status. | ||
40 | I Implemented NFSv4.1 operations. | ||
41 | NS Not Supported. | ||
42 | NS* unimplemented optional feature. | ||
43 | P pNFS features implemented out of tree. | ||
44 | PNS pNFS features that are not supported yet (out of tree). | ||
45 | |||
46 | Operations | ||
47 | |||
48 | +----------------------+------------+--------------+----------------+ | ||
49 | | Operation | REQ, REC, | Feature | Definition | | ||
50 | | | OPT, or | (REQ, REC, | | | ||
51 | | | MNI | or OPT) | | | ||
52 | +----------------------+------------+--------------+----------------+ | ||
53 | | ACCESS | REQ | | Section 18.1 | | ||
54 | NS | BACKCHANNEL_CTL | REQ | | Section 18.33 | | ||
55 | NS | BIND_CONN_TO_SESSION | REQ | | Section 18.34 | | ||
56 | | CLOSE | REQ | | Section 18.2 | | ||
57 | | COMMIT | REQ | | Section 18.3 | | ||
58 | | CREATE | REQ | | Section 18.4 | | ||
59 | I | CREATE_SESSION | REQ | | Section 18.36 | | ||
60 | NS*| DELEGPURGE | OPT | FDELG (REQ) | Section 18.5 | | ||
61 | | DELEGRETURN | OPT | FDELG, | Section 18.6 | | ||
62 | | | | DDELG, pNFS | | | ||
63 | | | | (REQ) | | | ||
64 | NS | DESTROY_CLIENTID | REQ | | Section 18.50 | | ||
65 | I | DESTROY_SESSION | REQ | | Section 18.37 | | ||
66 | I | EXCHANGE_ID | REQ | | Section 18.35 | | ||
67 | NS | FREE_STATEID | REQ | | Section 18.38 | | ||
68 | | GETATTR | REQ | | Section 18.7 | | ||
69 | P | GETDEVICEINFO | OPT | pNFS (REQ) | Section 18.40 | | ||
70 | P | GETDEVICELIST | OPT | pNFS (OPT) | Section 18.41 | | ||
71 | | GETFH | REQ | | Section 18.8 | | ||
72 | NS*| GET_DIR_DELEGATION | OPT | DDELG (REQ) | Section 18.39 | | ||
73 | P | LAYOUTCOMMIT | OPT | pNFS (REQ) | Section 18.42 | | ||
74 | P | LAYOUTGET | OPT | pNFS (REQ) | Section 18.43 | | ||
75 | P | LAYOUTRETURN | OPT | pNFS (REQ) | Section 18.44 | | ||
76 | | LINK | OPT | | Section 18.9 | | ||
77 | | LOCK | REQ | | Section 18.10 | | ||
78 | | LOCKT | REQ | | Section 18.11 | | ||
79 | | LOCKU | REQ | | Section 18.12 | | ||
80 | | LOOKUP | REQ | | Section 18.13 | | ||
81 | | LOOKUPP | REQ | | Section 18.14 | | ||
82 | | NVERIFY | REQ | | Section 18.15 | | ||
83 | | OPEN | REQ | | Section 18.16 | | ||
84 | NS*| OPENATTR | OPT | | Section 18.17 | | ||
85 | | OPEN_CONFIRM | MNI | | N/A | | ||
86 | | OPEN_DOWNGRADE | REQ | | Section 18.18 | | ||
87 | | PUTFH | REQ | | Section 18.19 | | ||
88 | | PUTPUBFH | REQ | | Section 18.20 | | ||
89 | | PUTROOTFH | REQ | | Section 18.21 | | ||
90 | | READ | REQ | | Section 18.22 | | ||
91 | | READDIR | REQ | | Section 18.23 | | ||
92 | | READLINK | OPT | | Section 18.24 | | ||
93 | NS | RECLAIM_COMPLETE | REQ | | Section 18.51 | | ||
94 | | RELEASE_LOCKOWNER | MNI | | N/A | | ||
95 | | REMOVE | REQ | | Section 18.25 | | ||
96 | | RENAME | REQ | | Section 18.26 | | ||
97 | | RENEW | MNI | | N/A | | ||
98 | | RESTOREFH | REQ | | Section 18.27 | | ||
99 | | SAVEFH | REQ | | Section 18.28 | | ||
100 | | SECINFO | REQ | | Section 18.29 | | ||
101 | NS | SECINFO_NO_NAME | REC | pNFS files | Section 18.45, | | ||
102 | | | | layout (REQ) | Section 13.12 | | ||
103 | I | SEQUENCE | REQ | | Section 18.46 | | ||
104 | | SETATTR | REQ | | Section 18.30 | | ||
105 | | SETCLIENTID | MNI | | N/A | | ||
106 | | SETCLIENTID_CONFIRM | MNI | | N/A | | ||
107 | NS | SET_SSV | REQ | | Section 18.47 | | ||
108 | NS | TEST_STATEID | REQ | | Section 18.48 | | ||
109 | | VERIFY | REQ | | Section 18.31 | | ||
110 | NS*| WANT_DELEGATION | OPT | FDELG (OPT) | Section 18.49 | | ||
111 | | WRITE | REQ | | Section 18.32 | | ||
112 | |||
113 | Callback Operations | ||
114 | |||
115 | +-------------------------+-----------+-------------+---------------+ | ||
116 | | Operation | REQ, REC, | Feature | Definition | | ||
117 | | | OPT, or | (REQ, REC, | | | ||
118 | | | MNI | or OPT) | | | ||
119 | +-------------------------+-----------+-------------+---------------+ | ||
120 | | CB_GETATTR | OPT | FDELG (REQ) | Section 20.1 | | ||
121 | P | CB_LAYOUTRECALL | OPT | pNFS (REQ) | Section 20.3 | | ||
122 | NS*| CB_NOTIFY | OPT | DDELG (REQ) | Section 20.4 | | ||
123 | P | CB_NOTIFY_DEVICEID | OPT | pNFS (OPT) | Section 20.12 | | ||
124 | NS*| CB_NOTIFY_LOCK | OPT | | Section 20.11 | | ||
125 | NS*| CB_PUSH_DELEG | OPT | FDELG (OPT) | Section 20.5 | | ||
126 | | CB_RECALL | OPT | FDELG, | Section 20.2 | | ||
127 | | | | DDELG, pNFS | | | ||
128 | | | | (REQ) | | | ||
129 | NS*| CB_RECALL_ANY | OPT | FDELG, | Section 20.6 | | ||
130 | | | | DDELG, pNFS | | | ||
131 | | | | (REQ) | | | ||
132 | NS | CB_RECALL_SLOT | REQ | | Section 20.8 | | ||
133 | NS*| CB_RECALLABLE_OBJ_AVAIL | OPT | DDELG, pNFS | Section 20.7 | | ||
134 | | | | (REQ) | | | ||
135 | I | CB_SEQUENCE | OPT | FDELG, | Section 20.9 | | ||
136 | | | | DDELG, pNFS | | | ||
137 | | | | (REQ) | | | ||
138 | NS*| CB_WANTS_CANCELLED | OPT | FDELG, | Section 20.10 | | ||
139 | | | | DDELG, pNFS | | | ||
140 | | | | (REQ) | | | ||
141 | +-------------------------+-----------+-------------+---------------+ | ||
142 | |||
143 | Implementation notes: | ||
144 | |||
145 | EXCHANGE_ID: | ||
146 | * only SP4_NONE state protection supported | ||
147 | * implementation ids are ignored | ||
148 | |||
149 | CREATE_SESSION: | ||
150 | * backchannel attributes are ignored | ||
151 | * backchannel security parameters are ignored | ||
152 | |||
153 | SEQUENCE: | ||
154 | * no support for dynamic slot table renegotiation (optional) | ||
155 | |||
156 | nfsv4.1 COMPOUND rules: | ||
157 | The following cases aren't supported yet: | ||
158 | * Enforcing of NFS4ERR_NOT_ONLY_OP for: BIND_CONN_TO_SESSION, CREATE_SESSION, | ||
159 | DESTROY_CLIENTID, DESTROY_SESSION, EXCHANGE_ID. | ||
160 | * DESTROY_SESSION MUST be the final operation in the COMPOUND request. | ||
161 | |||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 2895ce29dea5..6172e4360f60 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -153,60 +153,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
153 | 1,0: use 1st APIC table | 153 | 1,0: use 1st APIC table |
154 | default: 0 | 154 | default: 0 |
155 | 155 | ||
156 | acpi_sleep= [HW,ACPI] Sleep options | ||
157 | Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig, | ||
158 | old_ordering, s4_nonvs } | ||
159 | See Documentation/power/video.txt for information on | ||
160 | s3_bios and s3_mode. | ||
161 | s3_beep is for debugging; it makes the PC's speaker beep | ||
162 | as soon as the kernel's real-mode entry point is called. | ||
163 | s4_nohwsig prevents ACPI hardware signature from being | ||
164 | used during resume from hibernation. | ||
165 | old_ordering causes the ACPI 1.0 ordering of the _PTS | ||
166 | control method, with respect to putting devices into | ||
167 | low power states, to be enforced (the ACPI 2.0 ordering | ||
168 | of _PTS is used by default). | ||
169 | s4_nonvs prevents the kernel from saving/restoring the | ||
170 | ACPI NVS memory during hibernation. | ||
171 | |||
172 | acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode | ||
173 | Format: { level | edge | high | low } | ||
174 | |||
175 | acpi_irq_balance [HW,ACPI] | ||
176 | ACPI will balance active IRQs | ||
177 | default in APIC mode | ||
178 | |||
179 | acpi_irq_nobalance [HW,ACPI] | ||
180 | ACPI will not move active IRQs (default) | ||
181 | default in PIC mode | ||
182 | |||
183 | acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for | ||
184 | use by PCI | ||
185 | Format: <irq>,<irq>... | ||
186 | |||
187 | acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA | ||
188 | Format: <irq>,<irq>... | ||
189 | |||
190 | acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT | ||
191 | |||
192 | acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS | ||
193 | Format: To spoof as Windows 98: ="Microsoft Windows" | ||
194 | |||
195 | acpi_osi= [HW,ACPI] Modify list of supported OS interface strings | ||
196 | acpi_osi="string1" # add string1 -- only one string | ||
197 | acpi_osi="!string2" # remove built-in string2 | ||
198 | acpi_osi= # disable all strings | ||
199 | |||
200 | acpi_serialize [HW,ACPI] force serialization of AML methods | ||
201 | |||
202 | acpi_skip_timer_override [HW,ACPI] | ||
203 | Recognize and ignore IRQ0/pin2 Interrupt Override. | ||
204 | For broken nForce2 BIOS resulting in XT-PIC timer. | ||
205 | acpi_use_timer_override [HW,ACPI] | ||
206 | Use timer override. For some broken Nvidia NF5 boards | ||
207 | that require a timer override, but don't have | ||
208 | HPET | ||
209 | |||
210 | acpi_backlight= [HW,ACPI] | 156 | acpi_backlight= [HW,ACPI] |
211 | acpi_backlight=vendor | 157 | acpi_backlight=vendor |
212 | acpi_backlight=video | 158 | acpi_backlight=video |
@@ -214,11 +160,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
214 | (e.g. thinkpad_acpi, sony_acpi, etc.) instead | 160 | (e.g. thinkpad_acpi, sony_acpi, etc.) instead |
215 | of the ACPI video.ko driver. | 161 | of the ACPI video.ko driver. |
216 | 162 | ||
217 | acpi_display_output= [HW,ACPI] | ||
218 | acpi_display_output=vendor | ||
219 | acpi_display_output=video | ||
220 | See above. | ||
221 | |||
222 | acpi.debug_layer= [HW,ACPI,ACPI_DEBUG] | 163 | acpi.debug_layer= [HW,ACPI,ACPI_DEBUG] |
223 | acpi.debug_level= [HW,ACPI,ACPI_DEBUG] | 164 | acpi.debug_level= [HW,ACPI,ACPI_DEBUG] |
224 | Format: <int> | 165 | Format: <int> |
@@ -247,6 +188,41 @@ and is between 256 and 4096 characters. It is defined in the file | |||
247 | unusable. The "log_buf_len" parameter may be useful | 188 | unusable. The "log_buf_len" parameter may be useful |
248 | if you need to capture more output. | 189 | if you need to capture more output. |
249 | 190 | ||
191 | acpi_display_output= [HW,ACPI] | ||
192 | acpi_display_output=vendor | ||
193 | acpi_display_output=video | ||
194 | See above. | ||
195 | |||
196 | acpi_irq_balance [HW,ACPI] | ||
197 | ACPI will balance active IRQs | ||
198 | default in APIC mode | ||
199 | |||
200 | acpi_irq_nobalance [HW,ACPI] | ||
201 | ACPI will not move active IRQs (default) | ||
202 | default in PIC mode | ||
203 | |||
204 | acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA | ||
205 | Format: <irq>,<irq>... | ||
206 | |||
207 | acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for | ||
208 | use by PCI | ||
209 | Format: <irq>,<irq>... | ||
210 | |||
211 | acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT | ||
212 | |||
213 | acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS | ||
214 | Format: To spoof as Windows 98: ="Microsoft Windows" | ||
215 | |||
216 | acpi_osi= [HW,ACPI] Modify list of supported OS interface strings | ||
217 | acpi_osi="string1" # add string1 -- only one string | ||
218 | acpi_osi="!string2" # remove built-in string2 | ||
219 | acpi_osi= # disable all strings | ||
220 | |||
221 | acpi_pm_good [X86-32,X86-64] | ||
222 | Override the pmtimer bug detection: force the kernel | ||
223 | to assume that this machine's pmtimer latches its value | ||
224 | and always returns good values. | ||
225 | |||
250 | acpi.power_nocheck= [HW,ACPI] | 226 | acpi.power_nocheck= [HW,ACPI] |
251 | Format: 1/0 enable/disable the check of power state. | 227 | Format: 1/0 enable/disable the check of power state. |
252 | On some bogus BIOS the _PSC object/_STA object of | 228 | On some bogus BIOS the _PSC object/_STA object of |
@@ -255,11 +231,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
255 | power state again in power transition. | 231 | power state again in power transition. |
256 | 1 : disable the power state check | 232 | 1 : disable the power state check |
257 | 233 | ||
258 | acpi_pm_good [X86-32,X86-64] | ||
259 | Override the pmtimer bug detection: force the kernel | ||
260 | to assume that this machine's pmtimer latches its value | ||
261 | and always returns good values. | ||
262 | |||
263 | acpi_enforce_resources= [ACPI] | 234 | acpi_enforce_resources= [ACPI] |
264 | { strict | lax | no } | 235 | { strict | lax | no } |
265 | Check for resource conflicts between native drivers | 236 | Check for resource conflicts between native drivers |
@@ -276,22 +247,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
276 | no: ACPI OperationRegions are not marked as reserved, | 247 | no: ACPI OperationRegions are not marked as reserved, |
277 | no further checks are performed. | 248 | no further checks are performed. |
278 | 249 | ||
279 | agp= [AGP] | ||
280 | { off | try_unsupported } | ||
281 | off: disable AGP support | ||
282 | try_unsupported: try to drive unsupported chipsets | ||
283 | (may crash computer or cause data corruption) | ||
284 | |||
285 | enable_timer_pin_1 [i386,x86-64] | ||
286 | Enable PIN 1 of APIC timer | ||
287 | Can be useful to work around chipset bugs | ||
288 | (in particular on some ATI chipsets). | ||
289 | The kernel tries to set a reasonable default. | ||
290 | |||
291 | disable_timer_pin_1 [i386,x86-64] | ||
292 | Disable PIN 1 of APIC timer | ||
293 | Can be useful to work around chipset bugs. | ||
294 | |||
295 | ad1848= [HW,OSS] | 250 | ad1848= [HW,OSS] |
296 | Format: <io>,<irq>,<dma>,<dma2>,<type> | 251 | Format: <io>,<irq>,<dma>,<dma2>,<type> |
297 | 252 | ||
@@ -305,6 +260,12 @@ and is between 256 and 4096 characters. It is defined in the file | |||
305 | Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> | 260 | Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> |
306 | See also header of sound/oss/aedsp16.c. | 261 | See also header of sound/oss/aedsp16.c. |
307 | 262 | ||
263 | agp= [AGP] | ||
264 | { off | try_unsupported } | ||
265 | off: disable AGP support | ||
266 | try_unsupported: try to drive unsupported chipsets | ||
267 | (may crash computer or cause data corruption) | ||
268 | |||
308 | aha152x= [HW,SCSI] | 269 | aha152x= [HW,SCSI] |
309 | See Documentation/scsi/aha152x.txt. | 270 | See Documentation/scsi/aha152x.txt. |
310 | 271 | ||
@@ -432,12 +393,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
432 | possible to determine what the correct size should be. | 393 | possible to determine what the correct size should be. |
433 | This option provides an override for these situations. | 394 | This option provides an override for these situations. |
434 | 395 | ||
435 | security= [SECURITY] Choose a security module to enable at boot. | ||
436 | If this boot parameter is not specified, only the first | ||
437 | security module asking for security registration will be | ||
438 | loaded. An invalid security module name will be treated | ||
439 | as if no module has been chosen. | ||
440 | |||
441 | capability.disable= | 396 | capability.disable= |
442 | [SECURITY] Disable capabilities. This would normally | 397 | [SECURITY] Disable capabilities. This would normally |
443 | be used only if an alternative security model is to be | 398 | be used only if an alternative security model is to be |
@@ -509,24 +464,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
509 | Range: 0 - 8192 | 464 | Range: 0 - 8192 |
510 | Default: 64 | 465 | Default: 64 |
511 | 466 | ||
512 | dma_debug=off If the kernel is compiled with DMA_API_DEBUG support | ||
513 | this option disables the debugging code at boot. | ||
514 | |||
515 | dma_debug_entries=<number> | ||
516 | This option allows to tune the number of preallocated | ||
517 | entries for DMA-API debugging code. One entry is | ||
518 | required per DMA-API allocation. Use this if the | ||
519 | DMA-API debugging code disables itself because the | ||
520 | architectural default is too low. | ||
521 | |||
522 | hpet= [X86-32,HPET] option to control HPET usage | ||
523 | Format: { enable (default) | disable | force | | ||
524 | verbose } | ||
525 | disable: disable HPET and use PIT instead | ||
526 | force: allow force enabled of undocumented chips (ICH4, | ||
527 | VIA, nVidia) | ||
528 | verbose: show contents of HPET registers during setup | ||
529 | |||
530 | com20020= [HW,NET] ARCnet - COM20020 chipset | 467 | com20020= [HW,NET] ARCnet - COM20020 chipset |
531 | Format: | 468 | Format: |
532 | <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]] | 469 | <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]] |
@@ -570,23 +507,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
570 | console=brl,ttyS0 | 507 | console=brl,ttyS0 |
571 | For now, only VisioBraille is supported. | 508 | For now, only VisioBraille is supported. |
572 | 509 | ||
573 | earlycon= [KNL] Output early console device and options. | ||
574 | uart[8250],io,<addr>[,options] | ||
575 | uart[8250],mmio,<addr>[,options] | ||
576 | Start an early, polled-mode console on the 8250/16550 | ||
577 | UART at the specified I/O port or MMIO address. | ||
578 | The options are the same as for ttyS, above. | ||
579 | |||
580 | no_console_suspend | ||
581 | [HW] Never suspend the console | ||
582 | Disable suspending of consoles during suspend and | ||
583 | hibernate operations. Once disabled, debugging | ||
584 | messages can reach various consoles while the rest | ||
585 | of the system is being put to sleep (ie, while | ||
586 | debugging driver suspend/resume hooks). This may | ||
587 | not work reliably with all consoles, but is known | ||
588 | to work with serial and VGA consoles. | ||
589 | |||
590 | coredump_filter= | 510 | coredump_filter= |
591 | [KNL] Change the default value for | 511 | [KNL] Change the default value for |
592 | /proc/<pid>/coredump_filter. | 512 | /proc/<pid>/coredump_filter. |
@@ -643,30 +563,13 @@ and is between 256 and 4096 characters. It is defined in the file | |||
643 | Format: <area>[,<node>] | 563 | Format: <area>[,<node>] |
644 | See also Documentation/networking/decnet.txt. | 564 | See also Documentation/networking/decnet.txt. |
645 | 565 | ||
646 | vt.default_blu= [VT] | 566 | default_hugepagesz= |
647 | Format: <blue0>,<blue1>,<blue2>,...,<blue15> | 567 | [same as hugepagesz=] The size of the default |
648 | Change the default blue palette of the console. | 568 | HugeTLB page size. This is the size represented by |
649 | This is a 16-member array composed of values | 569 | the legacy /proc/ hugepages APIs, used for SHM, and |
650 | ranging from 0-255. | 570 | default size when mounting hugetlbfs filesystems. |
651 | 571 | Defaults to the default architecture's huge page size | |
652 | vt.default_grn= [VT] | 572 | if not specified. |
653 | Format: <green0>,<green1>,<green2>,...,<green15> | ||
654 | Change the default green palette of the console. | ||
655 | This is a 16-member array composed of values | ||
656 | ranging from 0-255. | ||
657 | |||
658 | vt.default_red= [VT] | ||
659 | Format: <red0>,<red1>,<red2>,...,<red15> | ||
660 | Change the default red palette of the console. | ||
661 | This is a 16-member array composed of values | ||
662 | ranging from 0-255. | ||
663 | |||
664 | vt.default_utf8= | ||
665 | [VT] | ||
666 | Format=<0|1> | ||
667 | Set system-wide default UTF-8 mode for all tty's. | ||
668 | Default is 1, i.e. UTF-8 mode is enabled for all | ||
669 | newly opened terminals. | ||
670 | 573 | ||
671 | dhash_entries= [KNL] | 574 | dhash_entries= [KNL] |
672 | Set number of hash buckets for dentry cache. | 575 | Set number of hash buckets for dentry cache. |
@@ -679,27 +582,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
679 | Documentation/serial/digiepca.txt. | 582 | Documentation/serial/digiepca.txt. |
680 | 583 | ||
681 | disable_mtrr_cleanup [X86] | 584 | disable_mtrr_cleanup [X86] |
682 | enable_mtrr_cleanup [X86] | ||
683 | The kernel tries to adjust MTRR layout from continuous | 585 | The kernel tries to adjust MTRR layout from continuous |
684 | to discrete, to make X server driver able to add WB | 586 | to discrete, to make X server driver able to add WB |
685 | entry later. This parameter enables/disables that. | 587 | entry later. This parameter disables that. |
686 | |||
687 | mtrr_chunk_size=nn[KMG] [X86] | ||
688 | used for mtrr cleanup. It is largest continous chunk | ||
689 | that could hold holes aka. UC entries. | ||
690 | |||
691 | mtrr_gran_size=nn[KMG] [X86] | ||
692 | Used for mtrr cleanup. It is granularity of mtrr block. | ||
693 | Default is 1. | ||
694 | Large value could prevent small alignment from | ||
695 | using up MTRRs. | ||
696 | |||
697 | mtrr_spare_reg_nr=n [X86] | ||
698 | Format: <integer> | ||
699 | Range: 0,7 : spare reg number | ||
700 | Default : 1 | ||
701 | Used for mtrr cleanup. It is spare mtrr entries number. | ||
702 | Set to 2 or more if your graphical card needs more. | ||
703 | 588 | ||
704 | disable_mtrr_trim [X86, Intel and AMD only] | 589 | disable_mtrr_trim [X86, Intel and AMD only] |
705 | By default the kernel will trim any uncacheable | 590 | By default the kernel will trim any uncacheable |
@@ -707,12 +592,38 @@ and is between 256 and 4096 characters. It is defined in the file | |||
707 | MTRR settings. This parameter disables that behavior, | 592 | MTRR settings. This parameter disables that behavior, |
708 | possibly causing your machine to run very slowly. | 593 | possibly causing your machine to run very slowly. |
709 | 594 | ||
595 | disable_timer_pin_1 [i386,x86-64] | ||
596 | Disable PIN 1 of APIC timer | ||
597 | Can be useful to work around chipset bugs. | ||
598 | |||
710 | dmasound= [HW,OSS] Sound subsystem buffers | 599 | dmasound= [HW,OSS] Sound subsystem buffers |
711 | 600 | ||
601 | dma_debug=off If the kernel is compiled with DMA_API_DEBUG support, | ||
602 | this option disables the debugging code at boot. | ||
603 | |||
604 | dma_debug_entries=<number> | ||
605 | This option allows to tune the number of preallocated | ||
606 | entries for DMA-API debugging code. One entry is | ||
607 | required per DMA-API allocation. Use this if the | ||
608 | DMA-API debugging code disables itself because the | ||
609 | architectural default is too low. | ||
610 | |||
712 | dscc4.setup= [NET] | 611 | dscc4.setup= [NET] |
713 | 612 | ||
714 | dtc3181e= [HW,SCSI] | 613 | dtc3181e= [HW,SCSI] |
715 | 614 | ||
615 | dynamic_printk Enables pr_debug()/dev_dbg() calls if | ||
616 | CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. | ||
617 | These can also be switched on/off via | ||
618 | <debugfs>/dynamic_printk/modules | ||
619 | |||
620 | earlycon= [KNL] Output early console device and options. | ||
621 | uart[8250],io,<addr>[,options] | ||
622 | uart[8250],mmio,<addr>[,options] | ||
623 | Start an early, polled-mode console on the 8250/16550 | ||
624 | UART at the specified I/O port or MMIO address. | ||
625 | The options are the same as for ttyS, above. | ||
626 | |||
716 | earlyprintk= [X86-32,X86-64,SH,BLACKFIN] | 627 | earlyprintk= [X86-32,X86-64,SH,BLACKFIN] |
717 | earlyprintk=vga | 628 | earlyprintk=vga |
718 | earlyprintk=serial[,ttySn[,baudrate]] | 629 | earlyprintk=serial[,ttySn[,baudrate]] |
@@ -754,6 +665,17 @@ and is between 256 and 4096 characters. It is defined in the file | |||
754 | pass this option to capture kernel. | 665 | pass this option to capture kernel. |
755 | See Documentation/kdump/kdump.txt for details. | 666 | See Documentation/kdump/kdump.txt for details. |
756 | 667 | ||
668 | enable_mtrr_cleanup [X86] | ||
669 | The kernel tries to adjust MTRR layout from continuous | ||
670 | to discrete, to make X server driver able to add WB | ||
671 | entry later. This parameter enables that. | ||
672 | |||
673 | enable_timer_pin_1 [i386,x86-64] | ||
674 | Enable PIN 1 of APIC timer | ||
675 | Can be useful to work around chipset bugs | ||
676 | (in particular on some ATI chipsets). | ||
677 | The kernel tries to set a reasonable default. | ||
678 | |||
757 | enforcing [SELINUX] Set initial enforcing status. | 679 | enforcing [SELINUX] Set initial enforcing status. |
758 | Format: {"0" | "1"} | 680 | Format: {"0" | "1"} |
759 | See security/selinux/Kconfig help text. | 681 | See security/selinux/Kconfig help text. |
@@ -841,6 +763,16 @@ and is between 256 and 4096 characters. It is defined in the file | |||
841 | hisax= [HW,ISDN] | 763 | hisax= [HW,ISDN] |
842 | See Documentation/isdn/README.HiSax. | 764 | See Documentation/isdn/README.HiSax. |
843 | 765 | ||
766 | hlt [BUGS=ARM,SH] | ||
767 | |||
768 | hpet= [X86-32,HPET] option to control HPET usage | ||
769 | Format: { enable (default) | disable | force | | ||
770 | verbose } | ||
771 | disable: disable HPET and use PIT instead | ||
772 | force: allow force enabled of undocumented chips (ICH4, | ||
773 | VIA, nVidia) | ||
774 | verbose: show contents of HPET registers during setup | ||
775 | |||
844 | hugepages= [HW,X86-32,IA-64] HugeTLB pages to allocate at boot. | 776 | hugepages= [HW,X86-32,IA-64] HugeTLB pages to allocate at boot. |
845 | hugepagesz= [HW,IA-64,PPC,X86-64] The size of the HugeTLB pages. | 777 | hugepagesz= [HW,IA-64,PPC,X86-64] The size of the HugeTLB pages. |
846 | On x86-64 and powerpc, this option can be specified | 778 | On x86-64 and powerpc, this option can be specified |
@@ -850,15 +782,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
850 | (when the CPU supports the "pdpe1gb" cpuinfo flag) | 782 | (when the CPU supports the "pdpe1gb" cpuinfo flag) |
851 | Note that 1GB pages can only be allocated at boot time | 783 | Note that 1GB pages can only be allocated at boot time |
852 | using hugepages= and not freed afterwards. | 784 | using hugepages= and not freed afterwards. |
853 | default_hugepagesz= | ||
854 | [same as hugepagesz=] The size of the default | ||
855 | HugeTLB page size. This is the size represented by | ||
856 | the legacy /proc/ hugepages APIs, used for SHM, and | ||
857 | default size when mounting hugetlbfs filesystems. | ||
858 | Defaults to the default architecture's huge page size | ||
859 | if not specified. | ||
860 | |||
861 | hlt [BUGS=ARM,SH] | ||
862 | 785 | ||
863 | hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC) | 786 | hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC) |
864 | terminal devices. Valid values: 0..8 | 787 | terminal devices. Valid values: 0..8 |
@@ -919,6 +842,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
919 | idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed | 842 | idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed |
920 | See Documentation/ide/ide.txt. | 843 | See Documentation/ide/ide.txt. |
921 | 844 | ||
845 | ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem | ||
846 | Claim all unknown PCI IDE storage controllers. | ||
847 | |||
922 | idle= [X86] | 848 | idle= [X86] |
923 | Format: idle=poll, idle=mwait, idle=halt, idle=nomwait | 849 | Format: idle=poll, idle=mwait, idle=halt, idle=nomwait |
924 | Poll forces a polling idle loop that can slightly | 850 | Poll forces a polling idle loop that can slightly |
@@ -934,9 +860,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
934 | In such case C2/C3 won't be used again. | 860 | In such case C2/C3 won't be used again. |
935 | idle=nomwait: Disable mwait for CPU C-states | 861 | idle=nomwait: Disable mwait for CPU C-states |
936 | 862 | ||
937 | ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem | ||
938 | Claim all unknown PCI IDE storage controllers. | ||
939 | |||
940 | ignore_loglevel [KNL] | 863 | ignore_loglevel [KNL] |
941 | Ignore loglevel setting - this will print /all/ | 864 | Ignore loglevel setting - this will print /all/ |
942 | kernel messages to the console. Useful for debugging. | 865 | kernel messages to the console. Useful for debugging. |
@@ -970,25 +893,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
970 | inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver | 893 | inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver |
971 | Format: <irq> | 894 | Format: <irq> |
972 | 895 | ||
973 | inttest= [IA64] | ||
974 | |||
975 | iomem= Disable strict checking of access to MMIO memory | ||
976 | strict regions from userspace. | ||
977 | relaxed | ||
978 | |||
979 | iommu= [x86] | ||
980 | off | ||
981 | force | ||
982 | noforce | ||
983 | biomerge | ||
984 | panic | ||
985 | nopanic | ||
986 | merge | ||
987 | nomerge | ||
988 | forcesac | ||
989 | soft | ||
990 | |||
991 | |||
992 | intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option | 896 | intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option |
993 | on | 897 | on |
994 | Enable intel iommu driver. | 898 | Enable intel iommu driver. |
@@ -1012,6 +916,28 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1012 | result in a hardware IOTLB flush operation as opposed | 916 | result in a hardware IOTLB flush operation as opposed |
1013 | to batching them for performance. | 917 | to batching them for performance. |
1014 | 918 | ||
919 | inttest= [IA64] | ||
920 | |||
921 | iomem= Disable strict checking of access to MMIO memory | ||
922 | strict regions from userspace. | ||
923 | relaxed | ||
924 | |||
925 | iommu= [x86] | ||
926 | off | ||
927 | force | ||
928 | noforce | ||
929 | biomerge | ||
930 | panic | ||
931 | nopanic | ||
932 | merge | ||
933 | nomerge | ||
934 | forcesac | ||
935 | soft | ||
936 | |||
937 | io7= [HW] IO7 for Marvel based alpha systems | ||
938 | See comment before marvel_specify_io7 in | ||
939 | arch/alpha/kernel/core_marvel.c. | ||
940 | |||
1015 | io_delay= [X86-32,X86-64] I/O delay method | 941 | io_delay= [X86-32,X86-64] I/O delay method |
1016 | 0x80 | 942 | 0x80 |
1017 | Standard port 0x80 based delay | 943 | Standard port 0x80 based delay |
@@ -1022,10 +948,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1022 | none | 948 | none |
1023 | No delay | 949 | No delay |
1024 | 950 | ||
1025 | io7= [HW] IO7 for Marvel based alpha systems | ||
1026 | See comment before marvel_specify_io7 in | ||
1027 | arch/alpha/kernel/core_marvel.c. | ||
1028 | |||
1029 | ip= [IP_PNP] | 951 | ip= [IP_PNP] |
1030 | See Documentation/filesystems/nfsroot.txt. | 952 | See Documentation/filesystems/nfsroot.txt. |
1031 | 953 | ||
@@ -1036,12 +958,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1036 | ips= [HW,SCSI] Adaptec / IBM ServeRAID controller | 958 | ips= [HW,SCSI] Adaptec / IBM ServeRAID controller |
1037 | See header of drivers/scsi/ips.c. | 959 | See header of drivers/scsi/ips.c. |
1038 | 960 | ||
1039 | ports= [IP_VS_FTP] IPVS ftp helper module | ||
1040 | Default is 21. | ||
1041 | Up to 8 (IP_VS_APP_MAX_PORTS) ports | ||
1042 | may be specified. | ||
1043 | Format: <port>,<port>.... | ||
1044 | |||
1045 | irqfixup [HW] | 961 | irqfixup [HW] |
1046 | When an interrupt is not handled search all handlers | 962 | When an interrupt is not handled search all handlers |
1047 | for it. Intended to get systems with badly broken | 963 | for it. Intended to get systems with badly broken |
@@ -1082,6 +998,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1082 | js= [HW,JOY] Analog joystick | 998 | js= [HW,JOY] Analog joystick |
1083 | See Documentation/input/joystick.txt. | 999 | See Documentation/input/joystick.txt. |
1084 | 1000 | ||
1001 | keepinitrd [HW,ARM] | ||
1002 | |||
1085 | kernelcore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter | 1003 | kernelcore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter |
1086 | specifies the amount of memory usable by the kernel | 1004 | specifies the amount of memory usable by the kernel |
1087 | for non-movable allocations. The requested amount is | 1005 | for non-movable allocations. The requested amount is |
@@ -1107,21 +1025,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1107 | higher than default (KMEMTRACE_N_SUBBUFS in code) if | 1025 | higher than default (KMEMTRACE_N_SUBBUFS in code) if |
1108 | you experience buffer overruns. | 1026 | you experience buffer overruns. |
1109 | 1027 | ||
1110 | movablecore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter | ||
1111 | is similar to kernelcore except it specifies the | ||
1112 | amount of memory used for migratable allocations. | ||
1113 | If both kernelcore and movablecore is specified, | ||
1114 | then kernelcore will be at *least* the specified | ||
1115 | value but may be more. If movablecore on its own | ||
1116 | is specified, the administrator must be careful | ||
1117 | that the amount of memory usable for all allocations | ||
1118 | is not too small. | ||
1119 | |||
1120 | keepinitrd [HW,ARM] | ||
1121 | |||
1122 | kstack=N [X86-32,X86-64] Print N words from the kernel stack | ||
1123 | in oops dumps. | ||
1124 | |||
1125 | kgdboc= [HW] kgdb over consoles. | 1028 | kgdboc= [HW] kgdb over consoles. |
1126 | Requires a tty driver that supports console polling. | 1029 | Requires a tty driver that supports console polling. |
1127 | (only serial suported for now) | 1030 | (only serial suported for now) |
@@ -1131,6 +1034,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1131 | Configure the RouterBoard 532 series on-chip | 1034 | Configure the RouterBoard 532 series on-chip |
1132 | Ethernet adapter MAC address. | 1035 | Ethernet adapter MAC address. |
1133 | 1036 | ||
1037 | kstack=N [X86-32,X86-64] Print N words from the kernel stack | ||
1038 | in oops dumps. | ||
1039 | |||
1134 | l2cr= [PPC] | 1040 | l2cr= [PPC] |
1135 | 1041 | ||
1136 | l3cr= [PPC] | 1042 | l3cr= [PPC] |
@@ -1276,9 +1182,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1276 | (machvec) in a generic kernel. | 1182 | (machvec) in a generic kernel. |
1277 | Example: machvec=hpzx1_swiotlb | 1183 | Example: machvec=hpzx1_swiotlb |
1278 | 1184 | ||
1279 | max_loop= [LOOP] Maximum number of loopback devices that can | 1185 | max_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory greater |
1280 | be mounted | 1186 | than or equal to this physical address is ignored. |
1281 | Format: <1-256> | ||
1282 | 1187 | ||
1283 | maxcpus= [SMP] Maximum number of processors that an SMP kernel | 1188 | maxcpus= [SMP] Maximum number of processors that an SMP kernel |
1284 | should make use of. maxcpus=n : n >= 0 limits the | 1189 | should make use of. maxcpus=n : n >= 0 limits the |
@@ -1286,8 +1191,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1286 | it is equivalent to "nosmp", which also disables | 1191 | it is equivalent to "nosmp", which also disables |
1287 | the IO APIC. | 1192 | the IO APIC. |
1288 | 1193 | ||
1289 | max_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory greater than | 1194 | max_loop= [LOOP] Maximum number of loopback devices that can |
1290 | or equal to this physical address is ignored. | 1195 | be mounted |
1196 | Format: <1-256> | ||
1291 | 1197 | ||
1292 | max_luns= [SCSI] Maximum number of LUNs to probe. | 1198 | max_luns= [SCSI] Maximum number of LUNs to probe. |
1293 | Should be between 1 and 2^32-1. | 1199 | Should be between 1 and 2^32-1. |
@@ -1414,6 +1320,16 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1414 | mousedev.yres= [MOUSE] Vertical screen resolution, used for devices | 1320 | mousedev.yres= [MOUSE] Vertical screen resolution, used for devices |
1415 | reporting absolute coordinates, such as tablets | 1321 | reporting absolute coordinates, such as tablets |
1416 | 1322 | ||
1323 | movablecore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter | ||
1324 | is similar to kernelcore except it specifies the | ||
1325 | amount of memory used for migratable allocations. | ||
1326 | If both kernelcore and movablecore is specified, | ||
1327 | then kernelcore will be at *least* the specified | ||
1328 | value but may be more. If movablecore on its own | ||
1329 | is specified, the administrator must be careful | ||
1330 | that the amount of memory usable for all allocations | ||
1331 | is not too small. | ||
1332 | |||
1417 | mpu401= [HW,OSS] | 1333 | mpu401= [HW,OSS] |
1418 | Format: <io>,<irq> | 1334 | Format: <io>,<irq> |
1419 | 1335 | ||
@@ -1435,6 +1351,23 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1435 | [HW] Make the MicroTouch USB driver use raw coordinates | 1351 | [HW] Make the MicroTouch USB driver use raw coordinates |
1436 | ('y', default) or cooked coordinates ('n') | 1352 | ('y', default) or cooked coordinates ('n') |
1437 | 1353 | ||
1354 | mtrr_chunk_size=nn[KMG] [X86] | ||
1355 | used for mtrr cleanup. It is largest continous chunk | ||
1356 | that could hold holes aka. UC entries. | ||
1357 | |||
1358 | mtrr_gran_size=nn[KMG] [X86] | ||
1359 | Used for mtrr cleanup. It is granularity of mtrr block. | ||
1360 | Default is 1. | ||
1361 | Large value could prevent small alignment from | ||
1362 | using up MTRRs. | ||
1363 | |||
1364 | mtrr_spare_reg_nr=n [X86] | ||
1365 | Format: <integer> | ||
1366 | Range: 0,7 : spare reg number | ||
1367 | Default : 1 | ||
1368 | Used for mtrr cleanup. It is spare mtrr entries number. | ||
1369 | Set to 2 or more if your graphical card needs more. | ||
1370 | |||
1438 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card | 1371 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card |
1439 | 1372 | ||
1440 | NCR_D700= [HW,SCSI] | 1373 | NCR_D700= [HW,SCSI] |
@@ -1495,11 +1428,13 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1495 | 0 - turn nmi_watchdog off | 1428 | 0 - turn nmi_watchdog off |
1496 | 1 - use the IO-APIC timer for the NMI watchdog | 1429 | 1 - use the IO-APIC timer for the NMI watchdog |
1497 | 2 - use the local APIC for the NMI watchdog using | 1430 | 2 - use the local APIC for the NMI watchdog using |
1498 | a performance counter. Note: This will use one performance | 1431 | a performance counter. Note: This will use one |
1499 | counter and the local APIC's performance vector. | 1432 | performance counter and the local APIC's performance |
1500 | When panic is specified panic when an NMI watchdog timeout occurs. | 1433 | vector. |
1501 | This is useful when you use a panic=... timeout and need the box | 1434 | When panic is specified, panic when an NMI watchdog |
1502 | quickly up again. | 1435 | timeout occurs. |
1436 | This is useful when you use a panic=... timeout and | ||
1437 | need the box quickly up again. | ||
1503 | Instead of 1 and 2 it is possible to use the following | 1438 | Instead of 1 and 2 it is possible to use the following |
1504 | symbolic names: lapic and ioapic | 1439 | symbolic names: lapic and ioapic |
1505 | Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic | 1440 | Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic |
@@ -1508,6 +1443,16 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1508 | emulation library even if a 387 maths coprocessor | 1443 | emulation library even if a 387 maths coprocessor |
1509 | is present. | 1444 | is present. |
1510 | 1445 | ||
1446 | no_console_suspend | ||
1447 | [HW] Never suspend the console | ||
1448 | Disable suspending of consoles during suspend and | ||
1449 | hibernate operations. Once disabled, debugging | ||
1450 | messages can reach various consoles while the rest | ||
1451 | of the system is being put to sleep (ie, while | ||
1452 | debugging driver suspend/resume hooks). This may | ||
1453 | not work reliably with all consoles, but is known | ||
1454 | to work with serial and VGA consoles. | ||
1455 | |||
1511 | noaliencache [MM, NUMA, SLAB] Disables the allocation of alien | 1456 | noaliencache [MM, NUMA, SLAB] Disables the allocation of alien |
1512 | caches in the slab allocator. Saves per-node memory, | 1457 | caches in the slab allocator. Saves per-node memory, |
1513 | but will impact performance. | 1458 | but will impact performance. |
@@ -1522,6 +1467,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1522 | 1467 | ||
1523 | nocache [ARM] | 1468 | nocache [ARM] |
1524 | 1469 | ||
1470 | noclflush [BUGS=X86] Don't use the CLFLUSH instruction | ||
1471 | |||
1525 | nodelayacct [KNL] Disable per-task delay accounting | 1472 | nodelayacct [KNL] Disable per-task delay accounting |
1526 | 1473 | ||
1527 | nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. | 1474 | nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. |
@@ -1550,8 +1497,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1550 | register save and restore. The kernel will only save | 1497 | register save and restore. The kernel will only save |
1551 | legacy floating-point registers on task switch. | 1498 | legacy floating-point registers on task switch. |
1552 | 1499 | ||
1553 | noclflush [BUGS=X86] Don't use the CLFLUSH instruction | ||
1554 | |||
1555 | nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or | 1500 | nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or |
1556 | wfi(ARM) instruction doesn't work correctly and not to | 1501 | wfi(ARM) instruction doesn't work correctly and not to |
1557 | use it. This is also useful when using JTAG debugger. | 1502 | use it. This is also useful when using JTAG debugger. |
@@ -1596,12 +1541,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1596 | 1541 | ||
1597 | nolapic_timer [X86-32,APIC] Do not use the local APIC timer. | 1542 | nolapic_timer [X86-32,APIC] Do not use the local APIC timer. |
1598 | 1543 | ||
1599 | nox2apic [X86-64,APIC] Do not enable x2APIC mode. | ||
1600 | |||
1601 | x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of | ||
1602 | default x2apic cluster mode on platforms | ||
1603 | supporting x2apic. | ||
1604 | |||
1605 | noltlbs [PPC] Do not use large page/tlb entries for kernel | 1544 | noltlbs [PPC] Do not use large page/tlb entries for kernel |
1606 | lowmem mapping on PPC40x. | 1545 | lowmem mapping on PPC40x. |
1607 | 1546 | ||
@@ -1612,6 +1551,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1612 | nomfgpt [X86-32] Disable Multi-Function General Purpose | 1551 | nomfgpt [X86-32] Disable Multi-Function General Purpose |
1613 | Timer usage (for AMD Geode machines). | 1552 | Timer usage (for AMD Geode machines). |
1614 | 1553 | ||
1554 | norandmaps Don't use address space randomization. Equivalent to | ||
1555 | echo 0 > /proc/sys/kernel/randomize_va_space | ||
1556 | |||
1615 | noreplace-paravirt [X86-32,PV_OPS] Don't patch paravirt_ops | 1557 | noreplace-paravirt [X86-32,PV_OPS] Don't patch paravirt_ops |
1616 | 1558 | ||
1617 | noreplace-smp [X86-32,SMP] Don't replace SMP instructions | 1559 | noreplace-smp [X86-32,SMP] Don't replace SMP instructions |
@@ -1650,13 +1592,13 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1650 | purges which is reported from either PAL_VM_SUMMARY or | 1592 | purges which is reported from either PAL_VM_SUMMARY or |
1651 | SAL PALO. | 1593 | SAL PALO. |
1652 | 1594 | ||
1595 | nr_uarts= [SERIAL] maximum number of UARTs to be registered. | ||
1596 | |||
1653 | numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA. | 1597 | numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA. |
1654 | one of ['zone', 'node', 'default'] can be specified | 1598 | one of ['zone', 'node', 'default'] can be specified |
1655 | This can be set from sysctl after boot. | 1599 | This can be set from sysctl after boot. |
1656 | See Documentation/sysctl/vm.txt for details. | 1600 | See Documentation/sysctl/vm.txt for details. |
1657 | 1601 | ||
1658 | nr_uarts= [SERIAL] maximum number of UARTs to be registered. | ||
1659 | |||
1660 | ohci1394_dma=early [HW] enable debugging via the ohci1394 driver. | 1602 | ohci1394_dma=early [HW] enable debugging via the ohci1394 driver. |
1661 | See Documentation/debugging-via-ohci1394.txt for more | 1603 | See Documentation/debugging-via-ohci1394.txt for more |
1662 | info. | 1604 | info. |
@@ -1905,6 +1847,14 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1905 | printk.time= Show timing data prefixed to each printk message line | 1847 | printk.time= Show timing data prefixed to each printk message line |
1906 | Format: <bool> (1/Y/y=enable, 0/N/n=disable) | 1848 | Format: <bool> (1/Y/y=enable, 0/N/n=disable) |
1907 | 1849 | ||
1850 | processor.max_cstate= [HW,ACPI] | ||
1851 | Limit processor to maximum C-state | ||
1852 | max_cstate=9 overrides any DMI blacklist limit. | ||
1853 | |||
1854 | processor.nocst [HW,ACPI] | ||
1855 | Ignore the _CST method to determine C-states, | ||
1856 | instead using the legacy FADT method | ||
1857 | |||
1908 | profile= [KNL] Enable kernel profiling via /proc/profile | 1858 | profile= [KNL] Enable kernel profiling via /proc/profile |
1909 | Format: [schedule,]<number> | 1859 | Format: [schedule,]<number> |
1910 | Param: "schedule" - profile schedule points. | 1860 | Param: "schedule" - profile schedule points. |
@@ -1914,14 +1864,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1914 | Requires CONFIG_SCHEDSTATS | 1864 | Requires CONFIG_SCHEDSTATS |
1915 | Param: "kvm" - profile VM exits. | 1865 | Param: "kvm" - profile VM exits. |
1916 | 1866 | ||
1917 | processor.max_cstate= [HW,ACPI] | ||
1918 | Limit processor to maximum C-state | ||
1919 | max_cstate=9 overrides any DMI blacklist limit. | ||
1920 | |||
1921 | processor.nocst [HW,ACPI] | ||
1922 | Ignore the _CST method to determine C-states, | ||
1923 | instead using the legacy FADT method | ||
1924 | |||
1925 | prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk | 1867 | prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk |
1926 | before loading. | 1868 | before loading. |
1927 | See Documentation/blockdev/ramdisk.txt. | 1869 | See Documentation/blockdev/ramdisk.txt. |
@@ -2075,7 +2017,13 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2075 | allowing boot to proceed. none ignores them, expecting | 2017 | allowing boot to proceed. none ignores them, expecting |
2076 | user space to do the scan. | 2018 | user space to do the scan. |
2077 | 2019 | ||
2078 | selinux [SELINUX] Disable or enable SELinux at boot time. | 2020 | security= [SECURITY] Choose a security module to enable at boot. |
2021 | If this boot parameter is not specified, only the first | ||
2022 | security module asking for security registration will be | ||
2023 | loaded. An invalid security module name will be treated | ||
2024 | as if no module has been chosen. | ||
2025 | |||
2026 | selinux= [SELINUX] Disable or enable SELinux at boot time. | ||
2079 | Format: { "0" | "1" } | 2027 | Format: { "0" | "1" } |
2080 | See security/selinux/Kconfig help text. | 2028 | See security/selinux/Kconfig help text. |
2081 | 0 -- disable. | 2029 | 0 -- disable. |
@@ -2499,9 +2447,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2499 | medium is write-protected). | 2447 | medium is write-protected). |
2500 | Example: quirks=0419:aaf5:rl,0421:0433:rc | 2448 | Example: quirks=0419:aaf5:rl,0421:0433:rc |
2501 | 2449 | ||
2502 | add_efi_memmap [EFI; x86-32,X86-64] Include EFI memory map in | ||
2503 | kernel's map of available physical RAM. | ||
2504 | |||
2505 | vdso= [X86-32,SH,x86-64] | 2450 | vdso= [X86-32,SH,x86-64] |
2506 | vdso=2: enable compat VDSO (default with COMPAT_VDSO) | 2451 | vdso=2: enable compat VDSO (default with COMPAT_VDSO) |
2507 | vdso=1: enable VDSO (default) | 2452 | vdso=1: enable VDSO (default) |
@@ -2540,6 +2485,31 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2540 | vmpoff= [KNL,S390] Perform z/VM CP command after power off. | 2485 | vmpoff= [KNL,S390] Perform z/VM CP command after power off. |
2541 | Format: <command> | 2486 | Format: <command> |
2542 | 2487 | ||
2488 | vt.default_blu= [VT] | ||
2489 | Format: <blue0>,<blue1>,<blue2>,...,<blue15> | ||
2490 | Change the default blue palette of the console. | ||
2491 | This is a 16-member array composed of values | ||
2492 | ranging from 0-255. | ||
2493 | |||
2494 | vt.default_grn= [VT] | ||
2495 | Format: <green0>,<green1>,<green2>,...,<green15> | ||
2496 | Change the default green palette of the console. | ||
2497 | This is a 16-member array composed of values | ||
2498 | ranging from 0-255. | ||
2499 | |||
2500 | vt.default_red= [VT] | ||
2501 | Format: <red0>,<red1>,<red2>,...,<red15> | ||
2502 | Change the default red palette of the console. | ||
2503 | This is a 16-member array composed of values | ||
2504 | ranging from 0-255. | ||
2505 | |||
2506 | vt.default_utf8= | ||
2507 | [VT] | ||
2508 | Format=<0|1> | ||
2509 | Set system-wide default UTF-8 mode for all tty's. | ||
2510 | Default is 1, i.e. UTF-8 mode is enabled for all | ||
2511 | newly opened terminals. | ||
2512 | |||
2543 | waveartist= [HW,OSS] | 2513 | waveartist= [HW,OSS] |
2544 | Format: <io>,<irq>,<dma>,<dma2> | 2514 | Format: <io>,<irq>,<dma>,<dma2> |
2545 | 2515 | ||
@@ -2552,6 +2522,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2552 | wdt= [WDT] Watchdog | 2522 | wdt= [WDT] Watchdog |
2553 | See Documentation/watchdog/wdt.txt. | 2523 | See Documentation/watchdog/wdt.txt. |
2554 | 2524 | ||
2525 | x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of | ||
2526 | default x2apic cluster mode on platforms | ||
2527 | supporting x2apic. | ||
2528 | |||
2555 | xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. | 2529 | xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. |
2556 | xd_geo= See header of drivers/block/xd.c. | 2530 | xd_geo= See header of drivers/block/xd.c. |
2557 | 2531 | ||
@@ -2559,9 +2533,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2559 | Format: | 2533 | Format: |
2560 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] | 2534 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] |
2561 | 2535 | ||
2562 | norandmaps Don't use address space randomization. Equivalent to | ||
2563 | echo 0 > /proc/sys/kernel/randomize_va_space | ||
2564 | |||
2565 | ______________________________________________________________________ | 2536 | ______________________________________________________________________ |
2566 | 2537 | ||
2567 | TODO: | 2538 | TODO: |
diff --git a/Documentation/powerpc/dts-bindings/fsl/upm-nand.txt b/Documentation/powerpc/dts-bindings/fsl/upm-nand.txt index 84a04d5eb8e6..a48b2cadc7f0 100644 --- a/Documentation/powerpc/dts-bindings/fsl/upm-nand.txt +++ b/Documentation/powerpc/dts-bindings/fsl/upm-nand.txt | |||
@@ -5,9 +5,21 @@ Required properties: | |||
5 | - reg : should specify localbus chip select and size used for the chip. | 5 | - reg : should specify localbus chip select and size used for the chip. |
6 | - fsl,upm-addr-offset : UPM pattern offset for the address latch. | 6 | - fsl,upm-addr-offset : UPM pattern offset for the address latch. |
7 | - fsl,upm-cmd-offset : UPM pattern offset for the command latch. | 7 | - fsl,upm-cmd-offset : UPM pattern offset for the command latch. |
8 | - gpios : may specify optional GPIO connected to the Ready-Not-Busy pin. | ||
9 | 8 | ||
10 | Example: | 9 | Optional properties: |
10 | - fsl,upm-wait-flags : add chip-dependent short delays after running the | ||
11 | UPM pattern (0x1), after writing a data byte (0x2) or after | ||
12 | writing out a buffer (0x4). | ||
13 | - fsl,upm-addr-line-cs-offsets : address offsets for multi-chip support. | ||
14 | The corresponding address lines are used to select the chip. | ||
15 | - gpios : may specify optional GPIOs connected to the Ready-Not-Busy pins | ||
16 | (R/B#). For multi-chip devices, "n" GPIO definitions are required | ||
17 | according to the number of chips. | ||
18 | - chip-delay : chip dependent delay for transfering data from array to | ||
19 | read registers (tR). Required if property "gpios" is not used | ||
20 | (R/B# pins not connected). | ||
21 | |||
22 | Examples: | ||
11 | 23 | ||
12 | upm@1,0 { | 24 | upm@1,0 { |
13 | compatible = "fsl,upm-nand"; | 25 | compatible = "fsl,upm-nand"; |
@@ -26,3 +38,26 @@ upm@1,0 { | |||
26 | }; | 38 | }; |
27 | }; | 39 | }; |
28 | }; | 40 | }; |
41 | |||
42 | upm@3,0 { | ||
43 | #address-cells = <0>; | ||
44 | #size-cells = <0>; | ||
45 | compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand"; | ||
46 | reg = <3 0x0 0x800>; | ||
47 | fsl,upm-addr-offset = <0x10>; | ||
48 | fsl,upm-cmd-offset = <0x08>; | ||
49 | /* Multi-chip NAND device */ | ||
50 | fsl,upm-addr-line-cs-offsets = <0x0 0x200>; | ||
51 | fsl,upm-wait-flags = <0x5>; | ||
52 | chip-delay = <25>; // in micro-seconds | ||
53 | |||
54 | nand@0 { | ||
55 | #address-cells = <1>; | ||
56 | #size-cells = <1>; | ||
57 | |||
58 | partition@0 { | ||
59 | label = "fs"; | ||
60 | reg = <0x00000000 0x10000000>; | ||
61 | }; | ||
62 | }; | ||
63 | }; | ||
diff --git a/Documentation/powerpc/dts-bindings/gpio/led.txt b/Documentation/powerpc/dts-bindings/gpio/led.txt index ff51f4c0fa9d..4fe14deedc0a 100644 --- a/Documentation/powerpc/dts-bindings/gpio/led.txt +++ b/Documentation/powerpc/dts-bindings/gpio/led.txt | |||
@@ -1,15 +1,43 @@ | |||
1 | LED connected to GPIO | 1 | LEDs connected to GPIO lines |
2 | 2 | ||
3 | Required properties: | 3 | Required properties: |
4 | - compatible : should be "gpio-led". | 4 | - compatible : should be "gpio-leds". |
5 | - label : (optional) the label for this LED. If omitted, the label is | 5 | |
6 | Each LED is represented as a sub-node of the gpio-leds device. Each | ||
7 | node's name represents the name of the corresponding LED. | ||
8 | |||
9 | LED sub-node properties: | ||
10 | - gpios : Should specify the LED's GPIO, see "Specifying GPIO information | ||
11 | for devices" in Documentation/powerpc/booting-without-of.txt. Active | ||
12 | low LEDs should be indicated using flags in the GPIO specifier. | ||
13 | - label : (optional) The label for this LED. If omitted, the label is | ||
6 | taken from the node name (excluding the unit address). | 14 | taken from the node name (excluding the unit address). |
7 | - gpios : should specify LED GPIO. | 15 | - linux,default-trigger : (optional) This parameter, if present, is a |
16 | string defining the trigger assigned to the LED. Current triggers are: | ||
17 | "backlight" - LED will act as a back-light, controlled by the framebuffer | ||
18 | system | ||
19 | "default-on" - LED will turn on | ||
20 | "heartbeat" - LED "double" flashes at a load average based rate | ||
21 | "ide-disk" - LED indicates disk activity | ||
22 | "timer" - LED flashes at a fixed, configurable rate | ||
8 | 23 | ||
9 | Example: | 24 | Examples: |
10 | 25 | ||
11 | led@0 { | 26 | leds { |
12 | compatible = "gpio-led"; | 27 | compatible = "gpio-leds"; |
13 | label = "hdd"; | 28 | hdd { |
14 | gpios = <&mcu_pio 0 1>; | 29 | label = "IDE Activity"; |
30 | gpios = <&mcu_pio 0 1>; /* Active low */ | ||
31 | linux,default-trigger = "ide-disk"; | ||
32 | }; | ||
15 | }; | 33 | }; |
34 | |||
35 | run-control { | ||
36 | compatible = "gpio-leds"; | ||
37 | red { | ||
38 | gpios = <&mpc8572 6 0>; | ||
39 | }; | ||
40 | green { | ||
41 | gpios = <&mpc8572 7 0>; | ||
42 | }; | ||
43 | } | ||
diff --git a/Documentation/scsi/aacraid.txt b/Documentation/scsi/aacraid.txt index ddace3afc83b..30f643f611b2 100644 --- a/Documentation/scsi/aacraid.txt +++ b/Documentation/scsi/aacraid.txt | |||
@@ -60,17 +60,9 @@ Supported Cards/Chipsets | |||
60 | 9005:0285:9005:02d5 Adaptec ASR-2405 (Voodoo40 Lite) | 60 | 9005:0285:9005:02d5 Adaptec ASR-2405 (Voodoo40 Lite) |
61 | 9005:0285:9005:02d6 Adaptec ASR-2445 (Voodoo44 Lite) | 61 | 9005:0285:9005:02d6 Adaptec ASR-2445 (Voodoo44 Lite) |
62 | 9005:0285:9005:02d7 Adaptec ASR-2805 (Voodoo80 Lite) | 62 | 9005:0285:9005:02d7 Adaptec ASR-2805 (Voodoo80 Lite) |
63 | 9005:0285:9005:02d8 Adaptec 5405G (Voodoo40 PM) | 63 | 9005:0285:9005:02d8 Adaptec 5405Z (Voodoo40 BLBU) |
64 | 9005:0285:9005:02d9 Adaptec 5445G (Voodoo44 PM) | 64 | 9005:0285:9005:02d9 Adaptec 5445Z (Voodoo44 BLBU) |
65 | 9005:0285:9005:02da Adaptec 5805G (Voodoo80 PM) | 65 | 9005:0285:9005:02da Adaptec 5805Z (Voodoo80 BLBU) |
66 | 9005:0285:9005:02db Adaptec 5085G (Voodoo08 PM) | ||
67 | 9005:0285:9005:02dc Adaptec 51245G (Voodoo124 PM) | ||
68 | 9005:0285:9005:02dd Adaptec 51645G (Voodoo164 PM) | ||
69 | 9005:0285:9005:02de Adaptec 52445G (Voodoo244 PM) | ||
70 | 9005:0285:9005:02df Adaptec ASR-2045G (Voodoo04 Lite PM) | ||
71 | 9005:0285:9005:02e0 Adaptec ASR-2405G (Voodoo40 Lite PM) | ||
72 | 9005:0285:9005:02e1 Adaptec ASR-2445G (Voodoo44 Lite PM) | ||
73 | 9005:0285:9005:02e2 Adaptec ASR-2805G (Voodoo80 Lite PM) | ||
74 | 1011:0046:9005:0364 Adaptec 5400S (Mustang) | 66 | 1011:0046:9005:0364 Adaptec 5400S (Mustang) |
75 | 1011:0046:9005:0365 Adaptec 5400S (Mustang) | 67 | 1011:0046:9005:0365 Adaptec 5400S (Mustang) |
76 | 9005:0287:9005:0800 Adaptec Themisto (Jupiter) | 68 | 9005:0287:9005:0800 Adaptec Themisto (Jupiter) |
@@ -140,6 +132,7 @@ Deanna Bonds (non-DASD support, PAE fibs and 64 bit, | |||
140 | where fibs that go to the hardware are consistently called hw_fibs and | 132 | where fibs that go to the hardware are consistently called hw_fibs and |
141 | not just fibs like the name of the driver tracking structure) | 133 | not just fibs like the name of the driver tracking structure) |
142 | Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. Performance tuning, card failover and bug mitigations. | 134 | Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. Performance tuning, card failover and bug mitigations. |
135 | Achim Leubner <Achim_Leubner@adaptec.com> | ||
143 | 136 | ||
144 | Original Driver | 137 | Original Driver |
145 | ------------------------- | 138 | ------------------------- |
diff --git a/arch/arm/mach-davinci/include/mach/nand.h b/arch/arm/mach-davinci/include/mach/nand.h new file mode 100644 index 000000000000..aa482841270b --- /dev/null +++ b/arch/arm/mach-davinci/include/mach/nand.h | |||
@@ -0,0 +1,80 @@ | |||
1 | /* | ||
2 | * mach-davinci/nand.h | ||
3 | * | ||
4 | * Copyright © 2006 Texas Instruments. | ||
5 | * | ||
6 | * Ported 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 | * -------------------------------------------------------------------------- | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify | ||
14 | * it under the terms of the GNU General Public License as published by | ||
15 | * the Free Software Foundation; either version 2 of the License, or | ||
16 | * (at your option) any later version. | ||
17 | * | ||
18 | * This program is distributed in the hope that it will be useful, | ||
19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
21 | * GNU General Public License for more details. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License | ||
24 | * along with this program; if not, write to the Free Software | ||
25 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #ifndef __ARCH_ARM_DAVINCI_NAND_H | ||
29 | #define __ARCH_ARM_DAVINCI_NAND_H | ||
30 | |||
31 | #include <linux/mtd/nand.h> | ||
32 | |||
33 | #define NRCSR_OFFSET 0x00 | ||
34 | #define AWCCR_OFFSET 0x04 | ||
35 | #define A1CR_OFFSET 0x10 | ||
36 | #define NANDFCR_OFFSET 0x60 | ||
37 | #define NANDFSR_OFFSET 0x64 | ||
38 | #define NANDF1ECC_OFFSET 0x70 | ||
39 | |||
40 | /* 4-bit ECC syndrome registers */ | ||
41 | #define NAND_4BIT_ECC_LOAD_OFFSET 0xbc | ||
42 | #define NAND_4BIT_ECC1_OFFSET 0xc0 | ||
43 | #define NAND_4BIT_ECC2_OFFSET 0xc4 | ||
44 | #define NAND_4BIT_ECC3_OFFSET 0xc8 | ||
45 | #define NAND_4BIT_ECC4_OFFSET 0xcc | ||
46 | #define NAND_ERR_ADD1_OFFSET 0xd0 | ||
47 | #define NAND_ERR_ADD2_OFFSET 0xd4 | ||
48 | #define NAND_ERR_ERRVAL1_OFFSET 0xd8 | ||
49 | #define NAND_ERR_ERRVAL2_OFFSET 0xdc | ||
50 | |||
51 | /* NOTE: boards don't need to use these address bits | ||
52 | * for ALE/CLE unless they support booting from NAND. | ||
53 | * They're used unless platform data overrides them. | ||
54 | */ | ||
55 | #define MASK_ALE 0x08 | ||
56 | #define MASK_CLE 0x10 | ||
57 | |||
58 | struct davinci_nand_pdata { /* platform_data */ | ||
59 | uint32_t mask_ale; | ||
60 | uint32_t mask_cle; | ||
61 | |||
62 | /* for packages using two chipselects */ | ||
63 | uint32_t mask_chipsel; | ||
64 | |||
65 | /* board's default static partition info */ | ||
66 | struct mtd_partition *parts; | ||
67 | unsigned nr_parts; | ||
68 | |||
69 | /* none == NAND_ECC_NONE (strongly *not* advised!!) | ||
70 | * soft == NAND_ECC_SOFT | ||
71 | * 1-bit == NAND_ECC_HW | ||
72 | * 4-bit == NAND_ECC_HW_SYNDROME (not on all chips) | ||
73 | */ | ||
74 | nand_ecc_modes_t ecc_mode; | ||
75 | |||
76 | /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */ | ||
77 | unsigned options; | ||
78 | }; | ||
79 | |||
80 | #endif /* __ARCH_ARM_DAVINCI_NAND_H */ | ||
diff --git a/arch/arm/mach-pxa/include/mach/pxa3xx_nand.h b/arch/arm/mach-pxa/include/mach/pxa3xx_nand.h index eb35fca9aea5..3478eae32d8a 100644 --- a/arch/arm/mach-pxa/include/mach/pxa3xx_nand.h +++ b/arch/arm/mach-pxa/include/mach/pxa3xx_nand.h | |||
@@ -49,6 +49,9 @@ struct pxa3xx_nand_platform_data { | |||
49 | */ | 49 | */ |
50 | int enable_arbiter; | 50 | int enable_arbiter; |
51 | 51 | ||
52 | /* allow platform code to keep OBM/bootloader defined NFC config */ | ||
53 | int keep_config; | ||
54 | |||
52 | const struct mtd_partition *parts; | 55 | const struct mtd_partition *parts; |
53 | unsigned int nr_parts; | 56 | unsigned int nr_parts; |
54 | 57 | ||
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c index f49427293ca1..e040e03335ea 100644 --- a/arch/blackfin/kernel/process.c +++ b/arch/blackfin/kernel/process.c | |||
@@ -337,7 +337,7 @@ int _access_ok(unsigned long addr, unsigned long size) | |||
337 | if (addr >= memory_mtd_end && (addr + size) <= physical_mem_end) | 337 | if (addr >= memory_mtd_end && (addr + size) <= physical_mem_end) |
338 | return 1; | 338 | return 1; |
339 | 339 | ||
340 | #ifdef CONFIG_ROMFS_MTD_FS | 340 | #ifdef CONFIG_ROMFS_ON_MTD |
341 | /* For XIP, allow user space to use pointers within the ROMFS. */ | 341 | /* For XIP, allow user space to use pointers within the ROMFS. */ |
342 | if (addr >= memory_mtd_start && (addr + size) <= memory_mtd_end) | 342 | if (addr >= memory_mtd_start && (addr + size) <= memory_mtd_end) |
343 | return 1; | 343 | return 1; |
diff --git a/arch/frv/mm/tlb-miss.S b/arch/frv/mm/tlb-miss.S index 07643482cad2..7f392bc651a3 100644 --- a/arch/frv/mm/tlb-miss.S +++ b/arch/frv/mm/tlb-miss.S | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <asm/page.h> | 14 | #include <asm/page.h> |
15 | #include <asm/pgtable.h> | 15 | #include <asm/pgtable.h> |
16 | #include <asm/highmem.h> | ||
17 | #include <asm/spr-regs.h> | 16 | #include <asm/spr-regs.h> |
18 | 17 | ||
19 | .section .text.tlbmiss | 18 | .section .text.tlbmiss |
diff --git a/arch/mips/include/asm/txx9/ndfmc.h b/arch/mips/include/asm/txx9/ndfmc.h new file mode 100644 index 000000000000..fa67f3df78fc --- /dev/null +++ b/arch/mips/include/asm/txx9/ndfmc.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License version 2 as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * (C) Copyright TOSHIBA CORPORATION 2007 | ||
7 | */ | ||
8 | #ifndef __ASM_TXX9_NDFMC_H | ||
9 | #define __ASM_TXX9_NDFMC_H | ||
10 | |||
11 | #define NDFMC_PLAT_FLAG_USE_BSPRT 0x01 | ||
12 | #define NDFMC_PLAT_FLAG_NO_RSTR 0x02 | ||
13 | #define NDFMC_PLAT_FLAG_HOLDADD 0x04 | ||
14 | #define NDFMC_PLAT_FLAG_DUMMYWRITE 0x08 | ||
15 | |||
16 | struct txx9ndfmc_platform_data { | ||
17 | unsigned int shift; | ||
18 | unsigned int gbus_clock; | ||
19 | unsigned int hold; /* hold time in nanosecond */ | ||
20 | unsigned int spw; /* strobe pulse width in nanosecond */ | ||
21 | unsigned int flags; | ||
22 | unsigned char ch_mask; /* available channel bitmask */ | ||
23 | unsigned char wp_mask; /* write-protect bitmask */ | ||
24 | unsigned char wide_mask; /* 16bit-nand bitmask */ | ||
25 | }; | ||
26 | |||
27 | void txx9_ndfmc_init(unsigned long baseaddr, | ||
28 | const struct txx9ndfmc_platform_data *plat_data); | ||
29 | |||
30 | #endif /* __ASM_TXX9_NDFMC_H */ | ||
diff --git a/arch/mips/include/asm/txx9/rbtx4939.h b/arch/mips/include/asm/txx9/rbtx4939.h index 1acf428c0b4f..e517899794a8 100644 --- a/arch/mips/include/asm/txx9/rbtx4939.h +++ b/arch/mips/include/asm/txx9/rbtx4939.h | |||
@@ -130,4 +130,13 @@ | |||
130 | void rbtx4939_prom_init(void); | 130 | void rbtx4939_prom_init(void); |
131 | void rbtx4939_irq_setup(void); | 131 | void rbtx4939_irq_setup(void); |
132 | 132 | ||
133 | struct mtd_partition; | ||
134 | struct map_info; | ||
135 | struct rbtx4939_flash_data { | ||
136 | unsigned int width; | ||
137 | unsigned int nr_parts; | ||
138 | struct mtd_partition *parts; | ||
139 | void (*map_init)(struct map_info *map); | ||
140 | }; | ||
141 | |||
133 | #endif /* __ASM_TXX9_RBTX4939_H */ | 142 | #endif /* __ASM_TXX9_RBTX4939_H */ |
diff --git a/arch/mips/include/asm/txx9/tx4938.h b/arch/mips/include/asm/txx9/tx4938.h index 0b068154054c..cd8bc2021755 100644 --- a/arch/mips/include/asm/txx9/tx4938.h +++ b/arch/mips/include/asm/txx9/tx4938.h | |||
@@ -291,6 +291,7 @@ int tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot); | |||
291 | void tx4938_setup_pcierr_irq(void); | 291 | void tx4938_setup_pcierr_irq(void); |
292 | void tx4938_irq_init(void); | 292 | void tx4938_irq_init(void); |
293 | void tx4938_mtd_init(int ch); | 293 | void tx4938_mtd_init(int ch); |
294 | void tx4938_ndfmc_init(unsigned int hold, unsigned int spw); | ||
294 | 295 | ||
295 | struct tx4938ide_platform_info { | 296 | struct tx4938ide_platform_info { |
296 | /* | 297 | /* |
diff --git a/arch/mips/include/asm/txx9/tx4939.h b/arch/mips/include/asm/txx9/tx4939.h index 964ef7ede268..f02c50b3abfb 100644 --- a/arch/mips/include/asm/txx9/tx4939.h +++ b/arch/mips/include/asm/txx9/tx4939.h | |||
@@ -542,5 +542,7 @@ int tx4939_irq(void); | |||
542 | void tx4939_mtd_init(int ch); | 542 | void tx4939_mtd_init(int ch); |
543 | void tx4939_ata_init(void); | 543 | void tx4939_ata_init(void); |
544 | void tx4939_rtc_init(void); | 544 | void tx4939_rtc_init(void); |
545 | void tx4939_ndfmc_init(unsigned int hold, unsigned int spw, | ||
546 | unsigned char ch_mask, unsigned char wide_mask); | ||
545 | 547 | ||
546 | #endif /* __ASM_TXX9_TX4939_H */ | 548 | #endif /* __ASM_TXX9_TX4939_H */ |
diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c index a13a08b8c9ec..8a266c6a3f58 100644 --- a/arch/mips/txx9/generic/setup.c +++ b/arch/mips/txx9/generic/setup.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <asm/txx9/generic.h> | 32 | #include <asm/txx9/generic.h> |
33 | #include <asm/txx9/pci.h> | 33 | #include <asm/txx9/pci.h> |
34 | #include <asm/txx9tmr.h> | 34 | #include <asm/txx9tmr.h> |
35 | #include <asm/txx9/ndfmc.h> | ||
35 | #ifdef CONFIG_CPU_TX49XX | 36 | #ifdef CONFIG_CPU_TX49XX |
36 | #include <asm/txx9/tx4938.h> | 37 | #include <asm/txx9/tx4938.h> |
37 | #endif | 38 | #endif |
@@ -691,6 +692,26 @@ void __init txx9_physmap_flash_init(int no, unsigned long addr, | |||
691 | #endif | 692 | #endif |
692 | } | 693 | } |
693 | 694 | ||
695 | void __init txx9_ndfmc_init(unsigned long baseaddr, | ||
696 | const struct txx9ndfmc_platform_data *pdata) | ||
697 | { | ||
698 | #if defined(CONFIG_MTD_NAND_TXX9NDFMC) || \ | ||
699 | defined(CONFIG_MTD_NAND_TXX9NDFMC_MODULE) | ||
700 | struct resource res = { | ||
701 | .start = baseaddr, | ||
702 | .end = baseaddr + 0x1000 - 1, | ||
703 | .flags = IORESOURCE_MEM, | ||
704 | }; | ||
705 | struct platform_device *pdev = platform_device_alloc("txx9ndfmc", -1); | ||
706 | |||
707 | if (!pdev || | ||
708 | platform_device_add_resources(pdev, &res, 1) || | ||
709 | platform_device_add_data(pdev, pdata, sizeof(*pdata)) || | ||
710 | platform_device_add(pdev)) | ||
711 | platform_device_put(pdev); | ||
712 | #endif | ||
713 | } | ||
714 | |||
694 | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) | 715 | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) |
695 | static DEFINE_SPINLOCK(txx9_iocled_lock); | 716 | static DEFINE_SPINLOCK(txx9_iocled_lock); |
696 | 717 | ||
diff --git a/arch/mips/txx9/generic/setup_tx4938.c b/arch/mips/txx9/generic/setup_tx4938.c index 25819ff1c350..f0844f891f0b 100644 --- a/arch/mips/txx9/generic/setup_tx4938.c +++ b/arch/mips/txx9/generic/setup_tx4938.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <asm/txx9tmr.h> | 23 | #include <asm/txx9tmr.h> |
24 | #include <asm/txx9pio.h> | 24 | #include <asm/txx9pio.h> |
25 | #include <asm/txx9/generic.h> | 25 | #include <asm/txx9/generic.h> |
26 | #include <asm/txx9/ndfmc.h> | ||
26 | #include <asm/txx9/tx4938.h> | 27 | #include <asm/txx9/tx4938.h> |
27 | 28 | ||
28 | static void __init tx4938_wdr_init(void) | 29 | static void __init tx4938_wdr_init(void) |
@@ -382,6 +383,26 @@ void __init tx4938_ata_init(unsigned int irq, unsigned int shift, int tune) | |||
382 | platform_device_put(pdev); | 383 | platform_device_put(pdev); |
383 | } | 384 | } |
384 | 385 | ||
386 | void __init tx4938_ndfmc_init(unsigned int hold, unsigned int spw) | ||
387 | { | ||
388 | struct txx9ndfmc_platform_data plat_data = { | ||
389 | .shift = 1, | ||
390 | .gbus_clock = txx9_gbus_clock, | ||
391 | .hold = hold, | ||
392 | .spw = spw, | ||
393 | .ch_mask = 1, | ||
394 | }; | ||
395 | unsigned long baseaddr = TX4938_NDFMC_REG & 0xfffffffffULL; | ||
396 | |||
397 | #ifdef __BIG_ENDIAN | ||
398 | baseaddr += 4; | ||
399 | #endif | ||
400 | if ((__raw_readq(&tx4938_ccfgptr->pcfg) & | ||
401 | (TX4938_PCFG_ATA_SEL|TX4938_PCFG_ISA_SEL|TX4938_PCFG_NDF_SEL)) == | ||
402 | TX4938_PCFG_NDF_SEL) | ||
403 | txx9_ndfmc_init(baseaddr, &plat_data); | ||
404 | } | ||
405 | |||
385 | static void __init tx4938_stop_unused_modules(void) | 406 | static void __init tx4938_stop_unused_modules(void) |
386 | { | 407 | { |
387 | __u64 pcfg, rst = 0, ckd = 0; | 408 | __u64 pcfg, rst = 0, ckd = 0; |
diff --git a/arch/mips/txx9/generic/setup_tx4939.c b/arch/mips/txx9/generic/setup_tx4939.c index 55440967b3a8..7a25b573e9b0 100644 --- a/arch/mips/txx9/generic/setup_tx4939.c +++ b/arch/mips/txx9/generic/setup_tx4939.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <asm/txx9irq.h> | 27 | #include <asm/txx9irq.h> |
28 | #include <asm/txx9tmr.h> | 28 | #include <asm/txx9tmr.h> |
29 | #include <asm/txx9/generic.h> | 29 | #include <asm/txx9/generic.h> |
30 | #include <asm/txx9/ndfmc.h> | ||
30 | #include <asm/txx9/tx4939.h> | 31 | #include <asm/txx9/tx4939.h> |
31 | 32 | ||
32 | static void __init tx4939_wdr_init(void) | 33 | static void __init tx4939_wdr_init(void) |
@@ -457,6 +458,22 @@ void __init tx4939_rtc_init(void) | |||
457 | platform_device_register(&rtc_dev); | 458 | platform_device_register(&rtc_dev); |
458 | } | 459 | } |
459 | 460 | ||
461 | void __init tx4939_ndfmc_init(unsigned int hold, unsigned int spw, | ||
462 | unsigned char ch_mask, unsigned char wide_mask) | ||
463 | { | ||
464 | struct txx9ndfmc_platform_data plat_data = { | ||
465 | .shift = 1, | ||
466 | .gbus_clock = txx9_gbus_clock, | ||
467 | .hold = hold, | ||
468 | .spw = spw, | ||
469 | .flags = NDFMC_PLAT_FLAG_NO_RSTR | NDFMC_PLAT_FLAG_HOLDADD | | ||
470 | NDFMC_PLAT_FLAG_DUMMYWRITE, | ||
471 | .ch_mask = ch_mask, | ||
472 | .wide_mask = wide_mask, | ||
473 | }; | ||
474 | txx9_ndfmc_init(TX4939_NDFMC_REG & 0xfffffffffULL, &plat_data); | ||
475 | } | ||
476 | |||
460 | static void __init tx4939_stop_unused_modules(void) | 477 | static void __init tx4939_stop_unused_modules(void) |
461 | { | 478 | { |
462 | __u64 pcfg, rst = 0, ckd = 0; | 479 | __u64 pcfg, rst = 0, ckd = 0; |
diff --git a/arch/mips/txx9/rbtx4938/setup.c b/arch/mips/txx9/rbtx4938/setup.c index 547ff2920bf0..65d13df8878a 100644 --- a/arch/mips/txx9/rbtx4938/setup.c +++ b/arch/mips/txx9/rbtx4938/setup.c | |||
@@ -352,6 +352,8 @@ static void __init rbtx4938_device_init(void) | |||
352 | rbtx4938_ne_init(); | 352 | rbtx4938_ne_init(); |
353 | tx4938_wdt_init(); | 353 | tx4938_wdt_init(); |
354 | rbtx4938_mtd_init(); | 354 | rbtx4938_mtd_init(); |
355 | /* TC58DVM82A1FT: tDH=10ns, tWP=tRP=tREADID=35ns */ | ||
356 | tx4938_ndfmc_init(10, 35); | ||
355 | tx4938_ata_init(RBTX4938_IRQ_IOC_ATA, 0, 1); | 357 | tx4938_ata_init(RBTX4938_IRQ_IOC_ATA, 0, 1); |
356 | txx9_iocled_init(RBTX4938_LED_ADDR - IO_BASE, -1, 8, 1, "green", NULL); | 358 | txx9_iocled_init(RBTX4938_LED_ADDR - IO_BASE, -1, 8, 1, "green", NULL); |
357 | } | 359 | } |
diff --git a/arch/mips/txx9/rbtx4939/setup.c b/arch/mips/txx9/rbtx4939/setup.c index 656603b85b71..011e1e332f47 100644 --- a/arch/mips/txx9/rbtx4939/setup.c +++ b/arch/mips/txx9/rbtx4939/setup.c | |||
@@ -16,6 +16,9 @@ | |||
16 | #include <linux/leds.h> | 16 | #include <linux/leds.h> |
17 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
18 | #include <linux/smc91x.h> | 18 | #include <linux/smc91x.h> |
19 | #include <linux/mtd/mtd.h> | ||
20 | #include <linux/mtd/partitions.h> | ||
21 | #include <linux/mtd/map.h> | ||
19 | #include <asm/reboot.h> | 22 | #include <asm/reboot.h> |
20 | #include <asm/txx9/generic.h> | 23 | #include <asm/txx9/generic.h> |
21 | #include <asm/txx9/pci.h> | 24 | #include <asm/txx9/pci.h> |
@@ -282,6 +285,159 @@ static void rbtx4939_7segled_putc(unsigned int pos, unsigned char val) | |||
282 | __rbtx4939_7segled_putc(pos, val); | 285 | __rbtx4939_7segled_putc(pos, val); |
283 | } | 286 | } |
284 | 287 | ||
288 | #if defined(CONFIG_MTD_RBTX4939) || defined(CONFIG_MTD_RBTX4939_MODULE) | ||
289 | /* special mapping for boot rom */ | ||
290 | static unsigned long rbtx4939_flash_fixup_ofs(unsigned long ofs) | ||
291 | { | ||
292 | u8 bdipsw = readb(rbtx4939_bdipsw_addr) & 0x0f; | ||
293 | unsigned char shift; | ||
294 | |||
295 | if (bdipsw & 8) { | ||
296 | /* BOOT Mode: USER ROM1 / USER ROM2 */ | ||
297 | shift = bdipsw & 3; | ||
298 | /* rotate A[23:22] */ | ||
299 | return (ofs & ~0xc00000) | ((((ofs >> 22) + shift) & 3) << 22); | ||
300 | } | ||
301 | #ifdef __BIG_ENDIAN | ||
302 | if (bdipsw == 0) | ||
303 | /* BOOT Mode: Monitor ROM */ | ||
304 | ofs ^= 0x400000; /* swap A[22] */ | ||
305 | #endif | ||
306 | return ofs; | ||
307 | } | ||
308 | |||
309 | static map_word rbtx4939_flash_read16(struct map_info *map, unsigned long ofs) | ||
310 | { | ||
311 | map_word r; | ||
312 | |||
313 | ofs = rbtx4939_flash_fixup_ofs(ofs); | ||
314 | r.x[0] = __raw_readw(map->virt + ofs); | ||
315 | return r; | ||
316 | } | ||
317 | |||
318 | static void rbtx4939_flash_write16(struct map_info *map, const map_word datum, | ||
319 | unsigned long ofs) | ||
320 | { | ||
321 | ofs = rbtx4939_flash_fixup_ofs(ofs); | ||
322 | __raw_writew(datum.x[0], map->virt + ofs); | ||
323 | mb(); /* see inline_map_write() in mtd/map.h */ | ||
324 | } | ||
325 | |||
326 | static void rbtx4939_flash_copy_from(struct map_info *map, void *to, | ||
327 | unsigned long from, ssize_t len) | ||
328 | { | ||
329 | u8 bdipsw = readb(rbtx4939_bdipsw_addr) & 0x0f; | ||
330 | unsigned char shift; | ||
331 | ssize_t curlen; | ||
332 | |||
333 | from += (unsigned long)map->virt; | ||
334 | if (bdipsw & 8) { | ||
335 | /* BOOT Mode: USER ROM1 / USER ROM2 */ | ||
336 | shift = bdipsw & 3; | ||
337 | while (len) { | ||
338 | curlen = min_t(unsigned long, len, | ||
339 | 0x400000 - (from & (0x400000 - 1))); | ||
340 | memcpy(to, | ||
341 | (void *)((from & ~0xc00000) | | ||
342 | ((((from >> 22) + shift) & 3) << 22)), | ||
343 | curlen); | ||
344 | len -= curlen; | ||
345 | from += curlen; | ||
346 | to += curlen; | ||
347 | } | ||
348 | return; | ||
349 | } | ||
350 | #ifdef __BIG_ENDIAN | ||
351 | if (bdipsw == 0) { | ||
352 | /* BOOT Mode: Monitor ROM */ | ||
353 | while (len) { | ||
354 | curlen = min_t(unsigned long, len, | ||
355 | 0x400000 - (from & (0x400000 - 1))); | ||
356 | memcpy(to, (void *)(from ^ 0x400000), curlen); | ||
357 | len -= curlen; | ||
358 | from += curlen; | ||
359 | to += curlen; | ||
360 | } | ||
361 | return; | ||
362 | } | ||
363 | #endif | ||
364 | memcpy(to, (void *)from, len); | ||
365 | } | ||
366 | |||
367 | static void rbtx4939_flash_map_init(struct map_info *map) | ||
368 | { | ||
369 | map->read = rbtx4939_flash_read16; | ||
370 | map->write = rbtx4939_flash_write16; | ||
371 | map->copy_from = rbtx4939_flash_copy_from; | ||
372 | } | ||
373 | |||
374 | static void __init rbtx4939_mtd_init(void) | ||
375 | { | ||
376 | static struct { | ||
377 | struct platform_device dev; | ||
378 | struct resource res; | ||
379 | struct rbtx4939_flash_data data; | ||
380 | } pdevs[4]; | ||
381 | int i; | ||
382 | static char names[4][8]; | ||
383 | static struct mtd_partition parts[4]; | ||
384 | struct rbtx4939_flash_data *boot_pdata = &pdevs[0].data; | ||
385 | u8 bdipsw = readb(rbtx4939_bdipsw_addr) & 0x0f; | ||
386 | |||
387 | if (bdipsw & 8) { | ||
388 | /* BOOT Mode: USER ROM1 / USER ROM2 */ | ||
389 | boot_pdata->nr_parts = 4; | ||
390 | for (i = 0; i < boot_pdata->nr_parts; i++) { | ||
391 | sprintf(names[i], "img%d", 4 - i); | ||
392 | parts[i].name = names[i]; | ||
393 | parts[i].size = 0x400000; | ||
394 | parts[i].offset = MTDPART_OFS_NXTBLK; | ||
395 | } | ||
396 | } else if (bdipsw == 0) { | ||
397 | /* BOOT Mode: Monitor ROM */ | ||
398 | boot_pdata->nr_parts = 2; | ||
399 | strcpy(names[0], "big"); | ||
400 | strcpy(names[1], "little"); | ||
401 | for (i = 0; i < boot_pdata->nr_parts; i++) { | ||
402 | parts[i].name = names[i]; | ||
403 | parts[i].size = 0x400000; | ||
404 | parts[i].offset = MTDPART_OFS_NXTBLK; | ||
405 | } | ||
406 | } else { | ||
407 | /* BOOT Mode: ROM Emulator */ | ||
408 | boot_pdata->nr_parts = 2; | ||
409 | parts[0].name = "boot"; | ||
410 | parts[0].offset = 0xc00000; | ||
411 | parts[0].size = 0x400000; | ||
412 | parts[1].name = "user"; | ||
413 | parts[1].offset = 0; | ||
414 | parts[1].size = 0xc00000; | ||
415 | } | ||
416 | boot_pdata->parts = parts; | ||
417 | boot_pdata->map_init = rbtx4939_flash_map_init; | ||
418 | |||
419 | for (i = 0; i < ARRAY_SIZE(pdevs); i++) { | ||
420 | struct resource *r = &pdevs[i].res; | ||
421 | struct platform_device *dev = &pdevs[i].dev; | ||
422 | |||
423 | r->start = 0x1f000000 - i * 0x1000000; | ||
424 | r->end = r->start + 0x1000000 - 1; | ||
425 | r->flags = IORESOURCE_MEM; | ||
426 | pdevs[i].data.width = 2; | ||
427 | dev->num_resources = 1; | ||
428 | dev->resource = r; | ||
429 | dev->id = i; | ||
430 | dev->name = "rbtx4939-flash"; | ||
431 | dev->dev.platform_data = &pdevs[i].data; | ||
432 | platform_device_register(dev); | ||
433 | } | ||
434 | } | ||
435 | #else | ||
436 | static void __init rbtx4939_mtd_init(void) | ||
437 | { | ||
438 | } | ||
439 | #endif | ||
440 | |||
285 | static void __init rbtx4939_arch_init(void) | 441 | static void __init rbtx4939_arch_init(void) |
286 | { | 442 | { |
287 | rbtx4939_pci_setup(); | 443 | rbtx4939_pci_setup(); |
@@ -333,6 +489,11 @@ static void __init rbtx4939_device_init(void) | |||
333 | platform_device_add_data(pdev, &smc_pdata, sizeof(smc_pdata)) || | 489 | platform_device_add_data(pdev, &smc_pdata, sizeof(smc_pdata)) || |
334 | platform_device_add(pdev)) | 490 | platform_device_add(pdev)) |
335 | platform_device_put(pdev); | 491 | platform_device_put(pdev); |
492 | rbtx4939_mtd_init(); | ||
493 | /* TC58DVM82A1FT: tDH=10ns, tWP=tRP=tREADID=35ns */ | ||
494 | tx4939_ndfmc_init(10, 35, | ||
495 | (1 << 1) | (1 << 2), | ||
496 | (1 << 2)); /* ch1:8bit, ch2:16bit */ | ||
336 | rbtx4939_led_setup(); | 497 | rbtx4939_led_setup(); |
337 | tx4939_wdt_init(); | 498 | tx4939_wdt_init(); |
338 | tx4939_ata_init(); | 499 | tx4939_ata_init(); |
diff --git a/arch/powerpc/boot/dts/tqm8548-bigflash.dts b/arch/powerpc/boot/dts/tqm8548-bigflash.dts index 28b1a95257cd..19aa72301c83 100644 --- a/arch/powerpc/boot/dts/tqm8548-bigflash.dts +++ b/arch/powerpc/boot/dts/tqm8548-bigflash.dts | |||
@@ -397,10 +397,13 @@ | |||
397 | upm@3,0 { | 397 | upm@3,0 { |
398 | #address-cells = <0>; | 398 | #address-cells = <0>; |
399 | #size-cells = <0>; | 399 | #size-cells = <0>; |
400 | compatible = "fsl,upm-nand"; | 400 | compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand"; |
401 | reg = <3 0x0 0x800>; | 401 | reg = <3 0x0 0x800>; |
402 | fsl,upm-addr-offset = <0x10>; | 402 | fsl,upm-addr-offset = <0x10>; |
403 | fsl,upm-cmd-offset = <0x08>; | 403 | fsl,upm-cmd-offset = <0x08>; |
404 | /* Micron MT29F8G08FAB multi-chip device */ | ||
405 | fsl,upm-addr-line-cs-offsets = <0x0 0x200>; | ||
406 | fsl,upm-wait-flags = <0x5>; | ||
404 | chip-delay = <25>; // in micro-seconds | 407 | chip-delay = <25>; // in micro-seconds |
405 | 408 | ||
406 | nand@0 { | 409 | nand@0 { |
@@ -409,7 +412,7 @@ | |||
409 | 412 | ||
410 | partition@0 { | 413 | partition@0 { |
411 | label = "fs"; | 414 | label = "fs"; |
412 | reg = <0x00000000 0x01000000>; | 415 | reg = <0x00000000 0x10000000>; |
413 | }; | 416 | }; |
414 | }; | 417 | }; |
415 | }; | 418 | }; |
diff --git a/arch/powerpc/boot/dts/tqm8548.dts b/arch/powerpc/boot/dts/tqm8548.dts index 826fb622cd3c..49145a04fc6c 100644 --- a/arch/powerpc/boot/dts/tqm8548.dts +++ b/arch/powerpc/boot/dts/tqm8548.dts | |||
@@ -397,10 +397,13 @@ | |||
397 | upm@3,0 { | 397 | upm@3,0 { |
398 | #address-cells = <0>; | 398 | #address-cells = <0>; |
399 | #size-cells = <0>; | 399 | #size-cells = <0>; |
400 | compatible = "fsl,upm-nand"; | 400 | compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand"; |
401 | reg = <3 0x0 0x800>; | 401 | reg = <3 0x0 0x800>; |
402 | fsl,upm-addr-offset = <0x10>; | 402 | fsl,upm-addr-offset = <0x10>; |
403 | fsl,upm-cmd-offset = <0x08>; | 403 | fsl,upm-cmd-offset = <0x08>; |
404 | /* Micron MT29F8G08FAB multi-chip device */ | ||
405 | fsl,upm-addr-line-cs-offsets = <0x0 0x200>; | ||
406 | fsl,upm-wait-flags = <0x5>; | ||
404 | chip-delay = <25>; // in micro-seconds | 407 | chip-delay = <25>; // in micro-seconds |
405 | 408 | ||
406 | nand@0 { | 409 | nand@0 { |
@@ -409,7 +412,7 @@ | |||
409 | 412 | ||
410 | partition@0 { | 413 | partition@0 { |
411 | label = "fs"; | 414 | label = "fs"; |
412 | reg = <0x00000000 0x01000000>; | 415 | reg = <0x00000000 0x10000000>; |
413 | }; | 416 | }; |
414 | }; | 417 | }; |
415 | }; | 418 | }; |
diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c index 0494ee55920f..dceb8d1a843d 100644 --- a/arch/powerpc/sysdev/fsl_lbc.c +++ b/arch/powerpc/sysdev/fsl_lbc.c | |||
@@ -150,7 +150,7 @@ int fsl_upm_run_pattern(struct fsl_upm *upm, void __iomem *io_base, u32 mar) | |||
150 | 150 | ||
151 | spin_lock_irqsave(&fsl_lbc_lock, flags); | 151 | spin_lock_irqsave(&fsl_lbc_lock, flags); |
152 | 152 | ||
153 | out_be32(&fsl_lbc_regs->mar, mar << (32 - upm->width)); | 153 | out_be32(&fsl_lbc_regs->mar, mar); |
154 | 154 | ||
155 | switch (upm->width) { | 155 | switch (upm->width) { |
156 | case 8: | 156 | case 8: |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index bcf4cae711b4..6da24fc6a09e 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -253,6 +253,7 @@ config SMP | |||
253 | config X86_X2APIC | 253 | config X86_X2APIC |
254 | bool "Support x2apic" | 254 | bool "Support x2apic" |
255 | depends on X86_LOCAL_APIC && X86_64 | 255 | depends on X86_LOCAL_APIC && X86_64 |
256 | select INTR_REMAP | ||
256 | ---help--- | 257 | ---help--- |
257 | This enables x2apic support on CPUs that have this feature. | 258 | This enables x2apic support on CPUs that have this feature. |
258 | 259 | ||
@@ -1882,7 +1883,6 @@ config DMAR_FLOPPY_WA | |||
1882 | config INTR_REMAP | 1883 | config INTR_REMAP |
1883 | bool "Support for Interrupt Remapping (EXPERIMENTAL)" | 1884 | bool "Support for Interrupt Remapping (EXPERIMENTAL)" |
1884 | depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI && EXPERIMENTAL | 1885 | depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI && EXPERIMENTAL |
1885 | select X86_X2APIC | ||
1886 | ---help--- | 1886 | ---help--- |
1887 | Supports Interrupt remapping for IO-APIC and MSI devices. | 1887 | Supports Interrupt remapping for IO-APIC and MSI devices. |
1888 | To use x2apic mode in the CPU's which support x2APIC enhancements or | 1888 | To use x2apic mode in the CPU's which support x2APIC enhancements or |
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index df8a300dfe6c..42f2f8377422 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h | |||
@@ -107,6 +107,9 @@ extern u32 native_safe_apic_wait_icr_idle(void); | |||
107 | extern void native_apic_icr_write(u32 low, u32 id); | 107 | extern void native_apic_icr_write(u32 low, u32 id); |
108 | extern u64 native_apic_icr_read(void); | 108 | extern u64 native_apic_icr_read(void); |
109 | 109 | ||
110 | #define EIM_8BIT_APIC_ID 0 | ||
111 | #define EIM_32BIT_APIC_ID 1 | ||
112 | |||
110 | #ifdef CONFIG_X86_X2APIC | 113 | #ifdef CONFIG_X86_X2APIC |
111 | /* | 114 | /* |
112 | * Make previous memory operations globally visible before | 115 | * Make previous memory operations globally visible before |
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h index 373cc2bbcad2..9d826e436010 100644 --- a/arch/x86/include/asm/io_apic.h +++ b/arch/x86/include/asm/io_apic.h | |||
@@ -162,10 +162,13 @@ extern int (*ioapic_renumber_irq)(int ioapic, int irq); | |||
162 | extern void ioapic_init_mappings(void); | 162 | extern void ioapic_init_mappings(void); |
163 | 163 | ||
164 | #ifdef CONFIG_X86_64 | 164 | #ifdef CONFIG_X86_64 |
165 | extern int save_IO_APIC_setup(void); | 165 | extern struct IO_APIC_route_entry **alloc_ioapic_entries(void); |
166 | extern void mask_IO_APIC_setup(void); | 166 | extern void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries); |
167 | extern void restore_IO_APIC_setup(void); | 167 | extern int save_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries); |
168 | extern void reinit_intr_remapped_IO_APIC(int); | 168 | extern void mask_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries); |
169 | extern int restore_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries); | ||
170 | extern void reinit_intr_remapped_IO_APIC(int intr_remapping, | ||
171 | struct IO_APIC_route_entry **ioapic_entries); | ||
169 | #endif | 172 | #endif |
170 | 173 | ||
171 | extern void probe_nr_irqs_gsi(void); | 174 | extern void probe_nr_irqs_gsi(void); |
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index b0e5e712a7af..fb504f843e58 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
@@ -1308,6 +1308,7 @@ void __init enable_IR_x2apic(void) | |||
1308 | #ifdef CONFIG_INTR_REMAP | 1308 | #ifdef CONFIG_INTR_REMAP |
1309 | int ret; | 1309 | int ret; |
1310 | unsigned long flags; | 1310 | unsigned long flags; |
1311 | struct IO_APIC_route_entry **ioapic_entries = NULL; | ||
1311 | 1312 | ||
1312 | if (!cpu_has_x2apic) | 1313 | if (!cpu_has_x2apic) |
1313 | return; | 1314 | return; |
@@ -1338,17 +1339,23 @@ void __init enable_IR_x2apic(void) | |||
1338 | return; | 1339 | return; |
1339 | } | 1340 | } |
1340 | 1341 | ||
1341 | ret = save_IO_APIC_setup(); | 1342 | ioapic_entries = alloc_ioapic_entries(); |
1343 | if (!ioapic_entries) { | ||
1344 | pr_info("Allocate ioapic_entries failed: %d\n", ret); | ||
1345 | goto end; | ||
1346 | } | ||
1347 | |||
1348 | ret = save_IO_APIC_setup(ioapic_entries); | ||
1342 | if (ret) { | 1349 | if (ret) { |
1343 | pr_info("Saving IO-APIC state failed: %d\n", ret); | 1350 | pr_info("Saving IO-APIC state failed: %d\n", ret); |
1344 | goto end; | 1351 | goto end; |
1345 | } | 1352 | } |
1346 | 1353 | ||
1347 | local_irq_save(flags); | 1354 | local_irq_save(flags); |
1348 | mask_IO_APIC_setup(); | 1355 | mask_IO_APIC_setup(ioapic_entries); |
1349 | mask_8259A(); | 1356 | mask_8259A(); |
1350 | 1357 | ||
1351 | ret = enable_intr_remapping(1); | 1358 | ret = enable_intr_remapping(EIM_32BIT_APIC_ID); |
1352 | 1359 | ||
1353 | if (ret && x2apic_preenabled) { | 1360 | if (ret && x2apic_preenabled) { |
1354 | local_irq_restore(flags); | 1361 | local_irq_restore(flags); |
@@ -1368,9 +1375,9 @@ end_restore: | |||
1368 | /* | 1375 | /* |
1369 | * IR enabling failed | 1376 | * IR enabling failed |
1370 | */ | 1377 | */ |
1371 | restore_IO_APIC_setup(); | 1378 | restore_IO_APIC_setup(ioapic_entries); |
1372 | else | 1379 | else |
1373 | reinit_intr_remapped_IO_APIC(x2apic_preenabled); | 1380 | reinit_intr_remapped_IO_APIC(x2apic_preenabled, ioapic_entries); |
1374 | 1381 | ||
1375 | unmask_8259A(); | 1382 | unmask_8259A(); |
1376 | local_irq_restore(flags); | 1383 | local_irq_restore(flags); |
@@ -1383,6 +1390,8 @@ end: | |||
1383 | pr_info("Enabled Interrupt-remapping\n"); | 1390 | pr_info("Enabled Interrupt-remapping\n"); |
1384 | } else | 1391 | } else |
1385 | pr_err("Failed to enable Interrupt-remapping and x2apic\n"); | 1392 | pr_err("Failed to enable Interrupt-remapping and x2apic\n"); |
1393 | if (ioapic_entries) | ||
1394 | free_ioapic_entries(ioapic_entries); | ||
1386 | #else | 1395 | #else |
1387 | if (!cpu_has_x2apic) | 1396 | if (!cpu_has_x2apic) |
1388 | return; | 1397 | return; |
@@ -1958,6 +1967,10 @@ static int lapic_suspend(struct sys_device *dev, pm_message_t state) | |||
1958 | 1967 | ||
1959 | local_irq_save(flags); | 1968 | local_irq_save(flags); |
1960 | disable_local_APIC(); | 1969 | disable_local_APIC(); |
1970 | #ifdef CONFIG_INTR_REMAP | ||
1971 | if (intr_remapping_enabled) | ||
1972 | disable_intr_remapping(); | ||
1973 | #endif | ||
1961 | local_irq_restore(flags); | 1974 | local_irq_restore(flags); |
1962 | return 0; | 1975 | return 0; |
1963 | } | 1976 | } |
@@ -1968,15 +1981,41 @@ static int lapic_resume(struct sys_device *dev) | |||
1968 | unsigned long flags; | 1981 | unsigned long flags; |
1969 | int maxlvt; | 1982 | int maxlvt; |
1970 | 1983 | ||
1984 | #ifdef CONFIG_INTR_REMAP | ||
1985 | int ret; | ||
1986 | struct IO_APIC_route_entry **ioapic_entries = NULL; | ||
1987 | |||
1971 | if (!apic_pm_state.active) | 1988 | if (!apic_pm_state.active) |
1972 | return 0; | 1989 | return 0; |
1973 | 1990 | ||
1974 | maxlvt = lapic_get_maxlvt(); | ||
1975 | |||
1976 | local_irq_save(flags); | 1991 | local_irq_save(flags); |
1992 | if (x2apic) { | ||
1993 | ioapic_entries = alloc_ioapic_entries(); | ||
1994 | if (!ioapic_entries) { | ||
1995 | WARN(1, "Alloc ioapic_entries in lapic resume failed."); | ||
1996 | return -ENOMEM; | ||
1997 | } | ||
1998 | |||
1999 | ret = save_IO_APIC_setup(ioapic_entries); | ||
2000 | if (ret) { | ||
2001 | WARN(1, "Saving IO-APIC state failed: %d\n", ret); | ||
2002 | free_ioapic_entries(ioapic_entries); | ||
2003 | return ret; | ||
2004 | } | ||
2005 | |||
2006 | mask_IO_APIC_setup(ioapic_entries); | ||
2007 | mask_8259A(); | ||
2008 | enable_x2apic(); | ||
2009 | } | ||
2010 | #else | ||
2011 | if (!apic_pm_state.active) | ||
2012 | return 0; | ||
1977 | 2013 | ||
2014 | local_irq_save(flags); | ||
1978 | if (x2apic) | 2015 | if (x2apic) |
1979 | enable_x2apic(); | 2016 | enable_x2apic(); |
2017 | #endif | ||
2018 | |||
1980 | else { | 2019 | else { |
1981 | /* | 2020 | /* |
1982 | * Make sure the APICBASE points to the right address | 2021 | * Make sure the APICBASE points to the right address |
@@ -1990,6 +2029,7 @@ static int lapic_resume(struct sys_device *dev) | |||
1990 | wrmsr(MSR_IA32_APICBASE, l, h); | 2029 | wrmsr(MSR_IA32_APICBASE, l, h); |
1991 | } | 2030 | } |
1992 | 2031 | ||
2032 | maxlvt = lapic_get_maxlvt(); | ||
1993 | apic_write(APIC_LVTERR, ERROR_APIC_VECTOR | APIC_LVT_MASKED); | 2033 | apic_write(APIC_LVTERR, ERROR_APIC_VECTOR | APIC_LVT_MASKED); |
1994 | apic_write(APIC_ID, apic_pm_state.apic_id); | 2034 | apic_write(APIC_ID, apic_pm_state.apic_id); |
1995 | apic_write(APIC_DFR, apic_pm_state.apic_dfr); | 2035 | apic_write(APIC_DFR, apic_pm_state.apic_dfr); |
@@ -2013,8 +2053,20 @@ static int lapic_resume(struct sys_device *dev) | |||
2013 | apic_write(APIC_ESR, 0); | 2053 | apic_write(APIC_ESR, 0); |
2014 | apic_read(APIC_ESR); | 2054 | apic_read(APIC_ESR); |
2015 | 2055 | ||
2056 | #ifdef CONFIG_INTR_REMAP | ||
2057 | if (intr_remapping_enabled) | ||
2058 | reenable_intr_remapping(EIM_32BIT_APIC_ID); | ||
2059 | |||
2060 | if (x2apic) { | ||
2061 | unmask_8259A(); | ||
2062 | restore_IO_APIC_setup(ioapic_entries); | ||
2063 | free_ioapic_entries(ioapic_entries); | ||
2064 | } | ||
2065 | #endif | ||
2066 | |||
2016 | local_irq_restore(flags); | 2067 | local_irq_restore(flags); |
2017 | 2068 | ||
2069 | |||
2018 | return 0; | 2070 | return 0; |
2019 | } | 2071 | } |
2020 | 2072 | ||
@@ -2052,7 +2104,9 @@ static int __init init_lapic_sysfs(void) | |||
2052 | error = sysdev_register(&device_lapic); | 2104 | error = sysdev_register(&device_lapic); |
2053 | return error; | 2105 | return error; |
2054 | } | 2106 | } |
2055 | device_initcall(init_lapic_sysfs); | 2107 | |
2108 | /* local apic needs to resume before other devices access its registers. */ | ||
2109 | core_initcall(init_lapic_sysfs); | ||
2056 | 2110 | ||
2057 | #else /* CONFIG_PM */ | 2111 | #else /* CONFIG_PM */ |
2058 | 2112 | ||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 1bb5c6cee3eb..767fe7e46d68 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -851,63 +851,74 @@ __setup("pirq=", ioapic_pirq_setup); | |||
851 | #endif /* CONFIG_X86_32 */ | 851 | #endif /* CONFIG_X86_32 */ |
852 | 852 | ||
853 | #ifdef CONFIG_INTR_REMAP | 853 | #ifdef CONFIG_INTR_REMAP |
854 | /* I/O APIC RTE contents at the OS boot up */ | 854 | struct IO_APIC_route_entry **alloc_ioapic_entries(void) |
855 | static struct IO_APIC_route_entry *early_ioapic_entries[MAX_IO_APICS]; | 855 | { |
856 | int apic; | ||
857 | struct IO_APIC_route_entry **ioapic_entries; | ||
858 | |||
859 | ioapic_entries = kzalloc(sizeof(*ioapic_entries) * nr_ioapics, | ||
860 | GFP_ATOMIC); | ||
861 | if (!ioapic_entries) | ||
862 | return 0; | ||
863 | |||
864 | for (apic = 0; apic < nr_ioapics; apic++) { | ||
865 | ioapic_entries[apic] = | ||
866 | kzalloc(sizeof(struct IO_APIC_route_entry) * | ||
867 | nr_ioapic_registers[apic], GFP_ATOMIC); | ||
868 | if (!ioapic_entries[apic]) | ||
869 | goto nomem; | ||
870 | } | ||
871 | |||
872 | return ioapic_entries; | ||
873 | |||
874 | nomem: | ||
875 | while (--apic >= 0) | ||
876 | kfree(ioapic_entries[apic]); | ||
877 | kfree(ioapic_entries); | ||
878 | |||
879 | return 0; | ||
880 | } | ||
856 | 881 | ||
857 | /* | 882 | /* |
858 | * Saves all the IO-APIC RTE's | 883 | * Saves all the IO-APIC RTE's |
859 | */ | 884 | */ |
860 | int save_IO_APIC_setup(void) | 885 | int save_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries) |
861 | { | 886 | { |
862 | union IO_APIC_reg_01 reg_01; | ||
863 | unsigned long flags; | ||
864 | int apic, pin; | 887 | int apic, pin; |
865 | 888 | ||
866 | /* | 889 | if (!ioapic_entries) |
867 | * The number of IO-APIC IRQ registers (== #pins): | 890 | return -ENOMEM; |
868 | */ | ||
869 | for (apic = 0; apic < nr_ioapics; apic++) { | ||
870 | spin_lock_irqsave(&ioapic_lock, flags); | ||
871 | reg_01.raw = io_apic_read(apic, 1); | ||
872 | spin_unlock_irqrestore(&ioapic_lock, flags); | ||
873 | nr_ioapic_registers[apic] = reg_01.bits.entries+1; | ||
874 | } | ||
875 | 891 | ||
876 | for (apic = 0; apic < nr_ioapics; apic++) { | 892 | for (apic = 0; apic < nr_ioapics; apic++) { |
877 | early_ioapic_entries[apic] = | 893 | if (!ioapic_entries[apic]) |
878 | kzalloc(sizeof(struct IO_APIC_route_entry) * | 894 | return -ENOMEM; |
879 | nr_ioapic_registers[apic], GFP_KERNEL); | ||
880 | if (!early_ioapic_entries[apic]) | ||
881 | goto nomem; | ||
882 | } | ||
883 | 895 | ||
884 | for (apic = 0; apic < nr_ioapics; apic++) | ||
885 | for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) | 896 | for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) |
886 | early_ioapic_entries[apic][pin] = | 897 | ioapic_entries[apic][pin] = |
887 | ioapic_read_entry(apic, pin); | 898 | ioapic_read_entry(apic, pin); |
899 | } | ||
888 | 900 | ||
889 | return 0; | 901 | return 0; |
890 | |||
891 | nomem: | ||
892 | while (apic >= 0) | ||
893 | kfree(early_ioapic_entries[apic--]); | ||
894 | memset(early_ioapic_entries, 0, | ||
895 | ARRAY_SIZE(early_ioapic_entries)); | ||
896 | |||
897 | return -ENOMEM; | ||
898 | } | 902 | } |
899 | 903 | ||
900 | void mask_IO_APIC_setup(void) | 904 | /* |
905 | * Mask all IO APIC entries. | ||
906 | */ | ||
907 | void mask_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries) | ||
901 | { | 908 | { |
902 | int apic, pin; | 909 | int apic, pin; |
903 | 910 | ||
911 | if (!ioapic_entries) | ||
912 | return; | ||
913 | |||
904 | for (apic = 0; apic < nr_ioapics; apic++) { | 914 | for (apic = 0; apic < nr_ioapics; apic++) { |
905 | if (!early_ioapic_entries[apic]) | 915 | if (!ioapic_entries[apic]) |
906 | break; | 916 | break; |
917 | |||
907 | for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { | 918 | for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { |
908 | struct IO_APIC_route_entry entry; | 919 | struct IO_APIC_route_entry entry; |
909 | 920 | ||
910 | entry = early_ioapic_entries[apic][pin]; | 921 | entry = ioapic_entries[apic][pin]; |
911 | if (!entry.mask) { | 922 | if (!entry.mask) { |
912 | entry.mask = 1; | 923 | entry.mask = 1; |
913 | ioapic_write_entry(apic, pin, entry); | 924 | ioapic_write_entry(apic, pin, entry); |
@@ -916,22 +927,30 @@ void mask_IO_APIC_setup(void) | |||
916 | } | 927 | } |
917 | } | 928 | } |
918 | 929 | ||
919 | void restore_IO_APIC_setup(void) | 930 | /* |
931 | * Restore IO APIC entries which was saved in ioapic_entries. | ||
932 | */ | ||
933 | int restore_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries) | ||
920 | { | 934 | { |
921 | int apic, pin; | 935 | int apic, pin; |
922 | 936 | ||
937 | if (!ioapic_entries) | ||
938 | return -ENOMEM; | ||
939 | |||
923 | for (apic = 0; apic < nr_ioapics; apic++) { | 940 | for (apic = 0; apic < nr_ioapics; apic++) { |
924 | if (!early_ioapic_entries[apic]) | 941 | if (!ioapic_entries[apic]) |
925 | break; | 942 | return -ENOMEM; |
943 | |||
926 | for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) | 944 | for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) |
927 | ioapic_write_entry(apic, pin, | 945 | ioapic_write_entry(apic, pin, |
928 | early_ioapic_entries[apic][pin]); | 946 | ioapic_entries[apic][pin]); |
929 | kfree(early_ioapic_entries[apic]); | ||
930 | early_ioapic_entries[apic] = NULL; | ||
931 | } | 947 | } |
948 | return 0; | ||
932 | } | 949 | } |
933 | 950 | ||
934 | void reinit_intr_remapped_IO_APIC(int intr_remapping) | 951 | void reinit_intr_remapped_IO_APIC(int intr_remapping, |
952 | struct IO_APIC_route_entry **ioapic_entries) | ||
953 | |||
935 | { | 954 | { |
936 | /* | 955 | /* |
937 | * for now plain restore of previous settings. | 956 | * for now plain restore of previous settings. |
@@ -940,7 +959,17 @@ void reinit_intr_remapped_IO_APIC(int intr_remapping) | |||
940 | * table entries. for now, do a plain restore, and wait for | 959 | * table entries. for now, do a plain restore, and wait for |
941 | * the setup_IO_APIC_irqs() to do proper initialization. | 960 | * the setup_IO_APIC_irqs() to do proper initialization. |
942 | */ | 961 | */ |
943 | restore_IO_APIC_setup(); | 962 | restore_IO_APIC_setup(ioapic_entries); |
963 | } | ||
964 | |||
965 | void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries) | ||
966 | { | ||
967 | int apic; | ||
968 | |||
969 | for (apic = 0; apic < nr_ioapics; apic++) | ||
970 | kfree(ioapic_entries[apic]); | ||
971 | |||
972 | kfree(ioapic_entries); | ||
944 | } | 973 | } |
945 | #endif | 974 | #endif |
946 | 975 | ||
@@ -2495,7 +2524,7 @@ static void irq_complete_move(struct irq_desc **descp) | |||
2495 | static inline void irq_complete_move(struct irq_desc **descp) {} | 2524 | static inline void irq_complete_move(struct irq_desc **descp) {} |
2496 | #endif | 2525 | #endif |
2497 | 2526 | ||
2498 | #ifdef CONFIG_INTR_REMAP | 2527 | #ifdef CONFIG_X86_X2APIC |
2499 | static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg) | 2528 | static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg) |
2500 | { | 2529 | { |
2501 | int apic, pin; | 2530 | int apic, pin; |
@@ -2540,7 +2569,6 @@ static void ack_x2apic_edge(unsigned int irq) | |||
2540 | { | 2569 | { |
2541 | ack_x2APIC_irq(); | 2570 | ack_x2APIC_irq(); |
2542 | } | 2571 | } |
2543 | |||
2544 | #endif | 2572 | #endif |
2545 | 2573 | ||
2546 | static void ack_apic_edge(unsigned int irq) | 2574 | static void ack_apic_edge(unsigned int irq) |
@@ -2651,6 +2679,26 @@ static void ack_apic_level(unsigned int irq) | |||
2651 | #endif | 2679 | #endif |
2652 | } | 2680 | } |
2653 | 2681 | ||
2682 | #ifdef CONFIG_INTR_REMAP | ||
2683 | static void ir_ack_apic_edge(unsigned int irq) | ||
2684 | { | ||
2685 | #ifdef CONFIG_X86_X2APIC | ||
2686 | if (x2apic_enabled()) | ||
2687 | return ack_x2apic_edge(irq); | ||
2688 | #endif | ||
2689 | return ack_apic_edge(irq); | ||
2690 | } | ||
2691 | |||
2692 | static void ir_ack_apic_level(unsigned int irq) | ||
2693 | { | ||
2694 | #ifdef CONFIG_X86_X2APIC | ||
2695 | if (x2apic_enabled()) | ||
2696 | return ack_x2apic_level(irq); | ||
2697 | #endif | ||
2698 | return ack_apic_level(irq); | ||
2699 | } | ||
2700 | #endif /* CONFIG_INTR_REMAP */ | ||
2701 | |||
2654 | static struct irq_chip ioapic_chip __read_mostly = { | 2702 | static struct irq_chip ioapic_chip __read_mostly = { |
2655 | .name = "IO-APIC", | 2703 | .name = "IO-APIC", |
2656 | .startup = startup_ioapic_irq, | 2704 | .startup = startup_ioapic_irq, |
@@ -2670,8 +2718,8 @@ static struct irq_chip ir_ioapic_chip __read_mostly = { | |||
2670 | .mask = mask_IO_APIC_irq, | 2718 | .mask = mask_IO_APIC_irq, |
2671 | .unmask = unmask_IO_APIC_irq, | 2719 | .unmask = unmask_IO_APIC_irq, |
2672 | #ifdef CONFIG_INTR_REMAP | 2720 | #ifdef CONFIG_INTR_REMAP |
2673 | .ack = ack_x2apic_edge, | 2721 | .ack = ir_ack_apic_edge, |
2674 | .eoi = ack_x2apic_level, | 2722 | .eoi = ir_ack_apic_level, |
2675 | #ifdef CONFIG_SMP | 2723 | #ifdef CONFIG_SMP |
2676 | .set_affinity = set_ir_ioapic_affinity_irq, | 2724 | .set_affinity = set_ir_ioapic_affinity_irq, |
2677 | #endif | 2725 | #endif |
@@ -3397,7 +3445,7 @@ static struct irq_chip msi_ir_chip = { | |||
3397 | .unmask = unmask_msi_irq, | 3445 | .unmask = unmask_msi_irq, |
3398 | .mask = mask_msi_irq, | 3446 | .mask = mask_msi_irq, |
3399 | #ifdef CONFIG_INTR_REMAP | 3447 | #ifdef CONFIG_INTR_REMAP |
3400 | .ack = ack_x2apic_edge, | 3448 | .ack = ir_ack_apic_edge, |
3401 | #ifdef CONFIG_SMP | 3449 | #ifdef CONFIG_SMP |
3402 | .set_affinity = ir_set_msi_irq_affinity, | 3450 | .set_affinity = ir_set_msi_irq_affinity, |
3403 | #endif | 3451 | #endif |
diff --git a/block/blk-core.c b/block/blk-core.c index 996ed906d8ca..25572802dac2 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
@@ -484,11 +484,11 @@ static int blk_init_free_list(struct request_queue *q) | |||
484 | { | 484 | { |
485 | struct request_list *rl = &q->rq; | 485 | struct request_list *rl = &q->rq; |
486 | 486 | ||
487 | rl->count[READ] = rl->count[WRITE] = 0; | 487 | rl->count[BLK_RW_SYNC] = rl->count[BLK_RW_ASYNC] = 0; |
488 | rl->starved[READ] = rl->starved[WRITE] = 0; | 488 | rl->starved[BLK_RW_SYNC] = rl->starved[BLK_RW_ASYNC] = 0; |
489 | rl->elvpriv = 0; | 489 | rl->elvpriv = 0; |
490 | init_waitqueue_head(&rl->wait[READ]); | 490 | init_waitqueue_head(&rl->wait[BLK_RW_SYNC]); |
491 | init_waitqueue_head(&rl->wait[WRITE]); | 491 | init_waitqueue_head(&rl->wait[BLK_RW_ASYNC]); |
492 | 492 | ||
493 | rl->rq_pool = mempool_create_node(BLKDEV_MIN_RQ, mempool_alloc_slab, | 493 | rl->rq_pool = mempool_create_node(BLKDEV_MIN_RQ, mempool_alloc_slab, |
494 | mempool_free_slab, request_cachep, q->node); | 494 | mempool_free_slab, request_cachep, q->node); |
@@ -699,18 +699,18 @@ static void ioc_set_batching(struct request_queue *q, struct io_context *ioc) | |||
699 | ioc->last_waited = jiffies; | 699 | ioc->last_waited = jiffies; |
700 | } | 700 | } |
701 | 701 | ||
702 | static void __freed_request(struct request_queue *q, int rw) | 702 | static void __freed_request(struct request_queue *q, int sync) |
703 | { | 703 | { |
704 | struct request_list *rl = &q->rq; | 704 | struct request_list *rl = &q->rq; |
705 | 705 | ||
706 | if (rl->count[rw] < queue_congestion_off_threshold(q)) | 706 | if (rl->count[sync] < queue_congestion_off_threshold(q)) |
707 | blk_clear_queue_congested(q, rw); | 707 | blk_clear_queue_congested(q, sync); |
708 | 708 | ||
709 | if (rl->count[rw] + 1 <= q->nr_requests) { | 709 | if (rl->count[sync] + 1 <= q->nr_requests) { |
710 | if (waitqueue_active(&rl->wait[rw])) | 710 | if (waitqueue_active(&rl->wait[sync])) |
711 | wake_up(&rl->wait[rw]); | 711 | wake_up(&rl->wait[sync]); |
712 | 712 | ||
713 | blk_clear_queue_full(q, rw); | 713 | blk_clear_queue_full(q, sync); |
714 | } | 714 | } |
715 | } | 715 | } |
716 | 716 | ||
@@ -718,18 +718,18 @@ static void __freed_request(struct request_queue *q, int rw) | |||
718 | * A request has just been released. Account for it, update the full and | 718 | * A request has just been released. Account for it, update the full and |
719 | * congestion status, wake up any waiters. Called under q->queue_lock. | 719 | * congestion status, wake up any waiters. Called under q->queue_lock. |
720 | */ | 720 | */ |
721 | static void freed_request(struct request_queue *q, int rw, int priv) | 721 | static void freed_request(struct request_queue *q, int sync, int priv) |
722 | { | 722 | { |
723 | struct request_list *rl = &q->rq; | 723 | struct request_list *rl = &q->rq; |
724 | 724 | ||
725 | rl->count[rw]--; | 725 | rl->count[sync]--; |
726 | if (priv) | 726 | if (priv) |
727 | rl->elvpriv--; | 727 | rl->elvpriv--; |
728 | 728 | ||
729 | __freed_request(q, rw); | 729 | __freed_request(q, sync); |
730 | 730 | ||
731 | if (unlikely(rl->starved[rw ^ 1])) | 731 | if (unlikely(rl->starved[sync ^ 1])) |
732 | __freed_request(q, rw ^ 1); | 732 | __freed_request(q, sync ^ 1); |
733 | } | 733 | } |
734 | 734 | ||
735 | /* | 735 | /* |
@@ -743,15 +743,15 @@ static struct request *get_request(struct request_queue *q, int rw_flags, | |||
743 | struct request *rq = NULL; | 743 | struct request *rq = NULL; |
744 | struct request_list *rl = &q->rq; | 744 | struct request_list *rl = &q->rq; |
745 | struct io_context *ioc = NULL; | 745 | struct io_context *ioc = NULL; |
746 | const int rw = rw_flags & 0x01; | 746 | const bool is_sync = rw_is_sync(rw_flags) != 0; |
747 | int may_queue, priv; | 747 | int may_queue, priv; |
748 | 748 | ||
749 | may_queue = elv_may_queue(q, rw_flags); | 749 | may_queue = elv_may_queue(q, rw_flags); |
750 | if (may_queue == ELV_MQUEUE_NO) | 750 | if (may_queue == ELV_MQUEUE_NO) |
751 | goto rq_starved; | 751 | goto rq_starved; |
752 | 752 | ||
753 | if (rl->count[rw]+1 >= queue_congestion_on_threshold(q)) { | 753 | if (rl->count[is_sync]+1 >= queue_congestion_on_threshold(q)) { |
754 | if (rl->count[rw]+1 >= q->nr_requests) { | 754 | if (rl->count[is_sync]+1 >= q->nr_requests) { |
755 | ioc = current_io_context(GFP_ATOMIC, q->node); | 755 | ioc = current_io_context(GFP_ATOMIC, q->node); |
756 | /* | 756 | /* |
757 | * The queue will fill after this allocation, so set | 757 | * The queue will fill after this allocation, so set |
@@ -759,9 +759,9 @@ static struct request *get_request(struct request_queue *q, int rw_flags, | |||
759 | * This process will be allowed to complete a batch of | 759 | * This process will be allowed to complete a batch of |
760 | * requests, others will be blocked. | 760 | * requests, others will be blocked. |
761 | */ | 761 | */ |
762 | if (!blk_queue_full(q, rw)) { | 762 | if (!blk_queue_full(q, is_sync)) { |
763 | ioc_set_batching(q, ioc); | 763 | ioc_set_batching(q, ioc); |
764 | blk_set_queue_full(q, rw); | 764 | blk_set_queue_full(q, is_sync); |
765 | } else { | 765 | } else { |
766 | if (may_queue != ELV_MQUEUE_MUST | 766 | if (may_queue != ELV_MQUEUE_MUST |
767 | && !ioc_batching(q, ioc)) { | 767 | && !ioc_batching(q, ioc)) { |
@@ -774,7 +774,7 @@ static struct request *get_request(struct request_queue *q, int rw_flags, | |||
774 | } | 774 | } |
775 | } | 775 | } |
776 | } | 776 | } |
777 | blk_set_queue_congested(q, rw); | 777 | blk_set_queue_congested(q, is_sync); |
778 | } | 778 | } |
779 | 779 | ||
780 | /* | 780 | /* |
@@ -782,11 +782,11 @@ static struct request *get_request(struct request_queue *q, int rw_flags, | |||
782 | * limit of requests, otherwise we could have thousands of requests | 782 | * limit of requests, otherwise we could have thousands of requests |
783 | * allocated with any setting of ->nr_requests | 783 | * allocated with any setting of ->nr_requests |
784 | */ | 784 | */ |
785 | if (rl->count[rw] >= (3 * q->nr_requests / 2)) | 785 | if (rl->count[is_sync] >= (3 * q->nr_requests / 2)) |
786 | goto out; | 786 | goto out; |
787 | 787 | ||
788 | rl->count[rw]++; | 788 | rl->count[is_sync]++; |
789 | rl->starved[rw] = 0; | 789 | rl->starved[is_sync] = 0; |
790 | 790 | ||
791 | priv = !test_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags); | 791 | priv = !test_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags); |
792 | if (priv) | 792 | if (priv) |
@@ -804,7 +804,7 @@ static struct request *get_request(struct request_queue *q, int rw_flags, | |||
804 | * wait queue, but this is pretty rare. | 804 | * wait queue, but this is pretty rare. |
805 | */ | 805 | */ |
806 | spin_lock_irq(q->queue_lock); | 806 | spin_lock_irq(q->queue_lock); |
807 | freed_request(q, rw, priv); | 807 | freed_request(q, is_sync, priv); |
808 | 808 | ||
809 | /* | 809 | /* |
810 | * in the very unlikely event that allocation failed and no | 810 | * in the very unlikely event that allocation failed and no |
@@ -814,8 +814,8 @@ static struct request *get_request(struct request_queue *q, int rw_flags, | |||
814 | * rq mempool into READ and WRITE | 814 | * rq mempool into READ and WRITE |
815 | */ | 815 | */ |
816 | rq_starved: | 816 | rq_starved: |
817 | if (unlikely(rl->count[rw] == 0)) | 817 | if (unlikely(rl->count[is_sync] == 0)) |
818 | rl->starved[rw] = 1; | 818 | rl->starved[is_sync] = 1; |
819 | 819 | ||
820 | goto out; | 820 | goto out; |
821 | } | 821 | } |
@@ -829,7 +829,7 @@ rq_starved: | |||
829 | if (ioc_batching(q, ioc)) | 829 | if (ioc_batching(q, ioc)) |
830 | ioc->nr_batch_requests--; | 830 | ioc->nr_batch_requests--; |
831 | 831 | ||
832 | trace_block_getrq(q, bio, rw); | 832 | trace_block_getrq(q, bio, rw_flags & 1); |
833 | out: | 833 | out: |
834 | return rq; | 834 | return rq; |
835 | } | 835 | } |
@@ -843,7 +843,7 @@ out: | |||
843 | static struct request *get_request_wait(struct request_queue *q, int rw_flags, | 843 | static struct request *get_request_wait(struct request_queue *q, int rw_flags, |
844 | struct bio *bio) | 844 | struct bio *bio) |
845 | { | 845 | { |
846 | const int rw = rw_flags & 0x01; | 846 | const bool is_sync = rw_is_sync(rw_flags) != 0; |
847 | struct request *rq; | 847 | struct request *rq; |
848 | 848 | ||
849 | rq = get_request(q, rw_flags, bio, GFP_NOIO); | 849 | rq = get_request(q, rw_flags, bio, GFP_NOIO); |
@@ -852,10 +852,10 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags, | |||
852 | struct io_context *ioc; | 852 | struct io_context *ioc; |
853 | struct request_list *rl = &q->rq; | 853 | struct request_list *rl = &q->rq; |
854 | 854 | ||
855 | prepare_to_wait_exclusive(&rl->wait[rw], &wait, | 855 | prepare_to_wait_exclusive(&rl->wait[is_sync], &wait, |
856 | TASK_UNINTERRUPTIBLE); | 856 | TASK_UNINTERRUPTIBLE); |
857 | 857 | ||
858 | trace_block_sleeprq(q, bio, rw); | 858 | trace_block_sleeprq(q, bio, rw_flags & 1); |
859 | 859 | ||
860 | __generic_unplug_device(q); | 860 | __generic_unplug_device(q); |
861 | spin_unlock_irq(q->queue_lock); | 861 | spin_unlock_irq(q->queue_lock); |
@@ -871,7 +871,7 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags, | |||
871 | ioc_set_batching(q, ioc); | 871 | ioc_set_batching(q, ioc); |
872 | 872 | ||
873 | spin_lock_irq(q->queue_lock); | 873 | spin_lock_irq(q->queue_lock); |
874 | finish_wait(&rl->wait[rw], &wait); | 874 | finish_wait(&rl->wait[is_sync], &wait); |
875 | 875 | ||
876 | rq = get_request(q, rw_flags, bio, GFP_NOIO); | 876 | rq = get_request(q, rw_flags, bio, GFP_NOIO); |
877 | }; | 877 | }; |
@@ -1070,14 +1070,14 @@ void __blk_put_request(struct request_queue *q, struct request *req) | |||
1070 | * it didn't come out of our reserved rq pools | 1070 | * it didn't come out of our reserved rq pools |
1071 | */ | 1071 | */ |
1072 | if (req->cmd_flags & REQ_ALLOCED) { | 1072 | if (req->cmd_flags & REQ_ALLOCED) { |
1073 | int rw = rq_data_dir(req); | 1073 | int is_sync = rq_is_sync(req) != 0; |
1074 | int priv = req->cmd_flags & REQ_ELVPRIV; | 1074 | int priv = req->cmd_flags & REQ_ELVPRIV; |
1075 | 1075 | ||
1076 | BUG_ON(!list_empty(&req->queuelist)); | 1076 | BUG_ON(!list_empty(&req->queuelist)); |
1077 | BUG_ON(!hlist_unhashed(&req->hash)); | 1077 | BUG_ON(!hlist_unhashed(&req->hash)); |
1078 | 1078 | ||
1079 | blk_free_request(q, req); | 1079 | blk_free_request(q, req); |
1080 | freed_request(q, rw, priv); | 1080 | freed_request(q, is_sync, priv); |
1081 | } | 1081 | } |
1082 | } | 1082 | } |
1083 | EXPORT_SYMBOL_GPL(__blk_put_request); | 1083 | EXPORT_SYMBOL_GPL(__blk_put_request); |
@@ -1128,6 +1128,8 @@ void init_request_from_bio(struct request *req, struct bio *bio) | |||
1128 | req->cmd_flags |= REQ_UNPLUG; | 1128 | req->cmd_flags |= REQ_UNPLUG; |
1129 | if (bio_rw_meta(bio)) | 1129 | if (bio_rw_meta(bio)) |
1130 | req->cmd_flags |= REQ_RW_META; | 1130 | req->cmd_flags |= REQ_RW_META; |
1131 | if (bio_noidle(bio)) | ||
1132 | req->cmd_flags |= REQ_NOIDLE; | ||
1131 | 1133 | ||
1132 | req->errors = 0; | 1134 | req->errors = 0; |
1133 | req->hard_sector = req->sector = bio->bi_sector; | 1135 | req->hard_sector = req->sector = bio->bi_sector; |
@@ -1136,6 +1138,15 @@ void init_request_from_bio(struct request *req, struct bio *bio) | |||
1136 | blk_rq_bio_prep(req->q, req, bio); | 1138 | blk_rq_bio_prep(req->q, req, bio); |
1137 | } | 1139 | } |
1138 | 1140 | ||
1141 | /* | ||
1142 | * Only disabling plugging for non-rotational devices if it does tagging | ||
1143 | * as well, otherwise we do need the proper merging | ||
1144 | */ | ||
1145 | static inline bool queue_should_plug(struct request_queue *q) | ||
1146 | { | ||
1147 | return !(blk_queue_nonrot(q) && blk_queue_tagged(q)); | ||
1148 | } | ||
1149 | |||
1139 | static int __make_request(struct request_queue *q, struct bio *bio) | 1150 | static int __make_request(struct request_queue *q, struct bio *bio) |
1140 | { | 1151 | { |
1141 | struct request *req; | 1152 | struct request *req; |
@@ -1242,11 +1253,11 @@ get_rq: | |||
1242 | if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags) || | 1253 | if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags) || |
1243 | bio_flagged(bio, BIO_CPU_AFFINE)) | 1254 | bio_flagged(bio, BIO_CPU_AFFINE)) |
1244 | req->cpu = blk_cpu_to_group(smp_processor_id()); | 1255 | req->cpu = blk_cpu_to_group(smp_processor_id()); |
1245 | if (!blk_queue_nonrot(q) && elv_queue_empty(q)) | 1256 | if (queue_should_plug(q) && elv_queue_empty(q)) |
1246 | blk_plug_device(q); | 1257 | blk_plug_device(q); |
1247 | add_request(q, req); | 1258 | add_request(q, req); |
1248 | out: | 1259 | out: |
1249 | if (unplug || blk_queue_nonrot(q)) | 1260 | if (unplug || !queue_should_plug(q)) |
1250 | __generic_unplug_device(q); | 1261 | __generic_unplug_device(q); |
1251 | spin_unlock_irq(q->queue_lock); | 1262 | spin_unlock_irq(q->queue_lock); |
1252 | return 0; | 1263 | return 0; |
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index e29ddfc73cf4..3ff9bba3379a 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c | |||
@@ -48,28 +48,28 @@ queue_requests_store(struct request_queue *q, const char *page, size_t count) | |||
48 | q->nr_requests = nr; | 48 | q->nr_requests = nr; |
49 | blk_queue_congestion_threshold(q); | 49 | blk_queue_congestion_threshold(q); |
50 | 50 | ||
51 | if (rl->count[READ] >= queue_congestion_on_threshold(q)) | 51 | if (rl->count[BLK_RW_SYNC] >= queue_congestion_on_threshold(q)) |
52 | blk_set_queue_congested(q, READ); | 52 | blk_set_queue_congested(q, BLK_RW_SYNC); |
53 | else if (rl->count[READ] < queue_congestion_off_threshold(q)) | 53 | else if (rl->count[BLK_RW_SYNC] < queue_congestion_off_threshold(q)) |
54 | blk_clear_queue_congested(q, READ); | 54 | blk_clear_queue_congested(q, BLK_RW_SYNC); |
55 | 55 | ||
56 | if (rl->count[WRITE] >= queue_congestion_on_threshold(q)) | 56 | if (rl->count[BLK_RW_ASYNC] >= queue_congestion_on_threshold(q)) |
57 | blk_set_queue_congested(q, WRITE); | 57 | blk_set_queue_congested(q, BLK_RW_ASYNC); |
58 | else if (rl->count[WRITE] < queue_congestion_off_threshold(q)) | 58 | else if (rl->count[BLK_RW_ASYNC] < queue_congestion_off_threshold(q)) |
59 | blk_clear_queue_congested(q, WRITE); | 59 | blk_clear_queue_congested(q, BLK_RW_ASYNC); |
60 | 60 | ||
61 | if (rl->count[READ] >= q->nr_requests) { | 61 | if (rl->count[BLK_RW_SYNC] >= q->nr_requests) { |
62 | blk_set_queue_full(q, READ); | 62 | blk_set_queue_full(q, BLK_RW_SYNC); |
63 | } else if (rl->count[READ]+1 <= q->nr_requests) { | 63 | } else if (rl->count[BLK_RW_SYNC]+1 <= q->nr_requests) { |
64 | blk_clear_queue_full(q, READ); | 64 | blk_clear_queue_full(q, BLK_RW_SYNC); |
65 | wake_up(&rl->wait[READ]); | 65 | wake_up(&rl->wait[BLK_RW_SYNC]); |
66 | } | 66 | } |
67 | 67 | ||
68 | if (rl->count[WRITE] >= q->nr_requests) { | 68 | if (rl->count[BLK_RW_ASYNC] >= q->nr_requests) { |
69 | blk_set_queue_full(q, WRITE); | 69 | blk_set_queue_full(q, BLK_RW_ASYNC); |
70 | } else if (rl->count[WRITE]+1 <= q->nr_requests) { | 70 | } else if (rl->count[BLK_RW_ASYNC]+1 <= q->nr_requests) { |
71 | blk_clear_queue_full(q, WRITE); | 71 | blk_clear_queue_full(q, BLK_RW_ASYNC); |
72 | wake_up(&rl->wait[WRITE]); | 72 | wake_up(&rl->wait[BLK_RW_ASYNC]); |
73 | } | 73 | } |
74 | spin_unlock_irq(q->queue_lock); | 74 | spin_unlock_irq(q->queue_lock); |
75 | return ret; | 75 | return ret; |
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 664ebfd092ec..9e809345f71a 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -1992,8 +1992,10 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq) | |||
1992 | } | 1992 | } |
1993 | if (cfq_slice_used(cfqq) || cfq_class_idle(cfqq)) | 1993 | if (cfq_slice_used(cfqq) || cfq_class_idle(cfqq)) |
1994 | cfq_slice_expired(cfqd, 1); | 1994 | cfq_slice_expired(cfqd, 1); |
1995 | else if (sync && RB_EMPTY_ROOT(&cfqq->sort_list)) | 1995 | else if (sync && !rq_noidle(rq) && |
1996 | RB_EMPTY_ROOT(&cfqq->sort_list)) { | ||
1996 | cfq_arm_slice_timer(cfqd); | 1997 | cfq_arm_slice_timer(cfqd); |
1998 | } | ||
1997 | } | 1999 | } |
1998 | 2000 | ||
1999 | if (!cfqd->rq_in_driver) | 2001 | if (!cfqd->rq_in_driver) |
diff --git a/block/elevator.c b/block/elevator.c index 98259eda0ef6..ca6788a0195a 100644 --- a/block/elevator.c +++ b/block/elevator.c | |||
@@ -677,7 +677,7 @@ void elv_insert(struct request_queue *q, struct request *rq, int where) | |||
677 | } | 677 | } |
678 | 678 | ||
679 | if (unplug_it && blk_queue_plugged(q)) { | 679 | if (unplug_it && blk_queue_plugged(q)) { |
680 | int nrq = q->rq.count[READ] + q->rq.count[WRITE] | 680 | int nrq = q->rq.count[BLK_RW_SYNC] + q->rq.count[BLK_RW_ASYNC] |
681 | - q->in_flight; | 681 | - q->in_flight; |
682 | 682 | ||
683 | if (nrq >= q->unplug_thresh) | 683 | if (nrq >= q->unplug_thresh) |
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"); |
diff --git a/firmware/Makefile b/firmware/Makefile index 16664894966d..14fdd073c798 100644 --- a/firmware/Makefile +++ b/firmware/Makefile | |||
@@ -41,6 +41,11 @@ fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin | |||
41 | fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \ | 41 | fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \ |
42 | e100/d102e_ucode.bin | 42 | e100/d102e_ucode.bin |
43 | fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin | 43 | fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin |
44 | fw-shipped-$(CONFIG_SCSI_ADVANSYS) += advansys/mcode.bin advansys/38C1600.bin \ | ||
45 | advansys/3550.bin advansys/38C0800.bin | ||
46 | fw-shipped-$(CONFIG_SCSI_QLOGIC_1280) += qlogic/1040.bin qlogic/1280.bin \ | ||
47 | qlogic/12160.bin | ||
48 | fw-shipped-$(CONFIG_SCSI_QLOGICPTI) += qlogic/isp1000.bin | ||
44 | fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin | 49 | fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin |
45 | fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp | 50 | fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp |
46 | fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \ | 51 | fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \ |
diff --git a/firmware/WHENCE b/firmware/WHENCE index d6c227db37c2..c006af85a1aa 100644 --- a/firmware/WHENCE +++ b/firmware/WHENCE | |||
@@ -45,6 +45,32 @@ Found alsa-firmware package in hex form, with the following comment: | |||
45 | 45 | ||
46 | -------------------------------------------------------------------------- | 46 | -------------------------------------------------------------------------- |
47 | 47 | ||
48 | Driver: SCSI_ADVANSYS - AdvanSys SCSI | ||
49 | |||
50 | File: advansys/mcode.bin | ||
51 | File: advansys/3550.bin | ||
52 | File: advansys/38C0800.bin | ||
53 | File: advansys/38C1600.bin | ||
54 | |||
55 | Licence: BSD, no source available. | ||
56 | |||
57 | Found in hex form in kernel source. | ||
58 | |||
59 | -------------------------------------------------------------------------- | ||
60 | |||
61 | Driver: SCSI_QLOGIC_1280 - Qlogic QLA 1240/1x80/1x160 SCSI support | ||
62 | |||
63 | File: qlogic/1040.bin | ||
64 | File: qlogic/1280.bin | ||
65 | File: qlogic/12160.bin | ||
66 | |||
67 | Licence: Allegedly GPLv2+, but no source visible. Marked: | ||
68 | |||
69 | QLOGIC LINUX SOFTWARE | ||
70 | QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x | ||
71 | Copyright (C) 2001 Qlogic Corporation (www.qlogic.com) | ||
72 | |||
73 | -------------------------------------------------------------------------- | ||
48 | Driver: smctr -- SMC ISA/MCA Token Ring adapter | 74 | Driver: smctr -- SMC ISA/MCA Token Ring adapter |
49 | 75 | ||
50 | File: tr_smctr.bin | 76 | File: tr_smctr.bin |
@@ -596,3 +622,13 @@ Licence: Allegedly GPL, but no source visible. Marked: | |||
596 | Found in hex form in kernel source. | 622 | Found in hex form in kernel source. |
597 | 623 | ||
598 | -------------------------------------------------------------------------- | 624 | -------------------------------------------------------------------------- |
625 | |||
626 | Driver: SCSI_QLOGICPTI - PTI Qlogic, ISP Driver | ||
627 | |||
628 | File: qlogic/isp1000.bin | ||
629 | |||
630 | Licence: Unknown | ||
631 | |||
632 | Found in hex form in kernel source. | ||
633 | |||
634 | -------------------------------------------------------------------------- | ||
diff --git a/firmware/advansys/3550.bin.ihex b/firmware/advansys/3550.bin.ihex new file mode 100644 index 000000000000..6809b0d84e4f --- /dev/null +++ b/firmware/advansys/3550.bin.ihex | |||
@@ -0,0 +1,317 @@ | |||
1 | :10000000DD2DD504000000F200F0001618E400FC1D | ||
2 | :10001000010048E4BE18188003F6020000FAFFFF52 | ||
3 | :10002000280E9EE7FF0082E700EA00F601E609E7F6 | ||
4 | :1000300055F001F601FA08000300040018F410005E | ||
5 | :1000400000EC85F0BC00D5F08E0C385400E61EF0B4 | ||
6 | :1000500086F0B4009857D0010C1C3E1C0C00BB006D | ||
7 | :10006000AA18028032F001FC880CC6120213184054 | ||
8 | :10007000005701EA3C006C016E0104123E570080FB | ||
9 | :1000800003E6B600C00001013E01DA0F221008129B | ||
10 | :10009000024AB95403581B8030E44BE4200032007C | ||
11 | :1000A0003E00800024013C0168016A017001720178 | ||
12 | :1000B000740176017801620A920C2C102E1006133E | ||
13 | :1000C0004C1CBB553C5604804AE402EE5BF0B1F098 | ||
14 | :1000D00003F706F703FC0F004000BE000001B00864 | ||
15 | :1000E00030136415321C381C4E1C10440248004C5E | ||
16 | :1000F00004EA5DF004F602FC0500340036009800C6 | ||
17 | :10010000CC0020014E014E0B1E0E0C100A120413DF | ||
18 | :100110004013301C004EBD56068300DC05F009F08C | ||
19 | :1001200059F0A7F0B8F00EF70600190033009B0055 | ||
20 | :10013000A400B500BA00D000E100E700DE03560AD3 | ||
21 | :10014000140E021004100A1036100A131213521360 | ||
22 | :1001500010151415AC16201C341C361C08443844E9 | ||
23 | :1001600091440A454846014868548355B0570158A0 | ||
24 | :10017000835905E60BF00CF05CF04BF404F805F83D | ||
25 | :1001800002FA03FA04FC05FC07000A000D001C003B | ||
26 | :100190009E00A800AA00B900E00022012601790112 | ||
27 | :1001A0007A01C001C2017C025A03EA04E807680828 | ||
28 | :1001B0006908BA08E909060B3A0E00101A10ED108A | ||
29 | :1001C000F11006120C1316131E1382134214D614C8 | ||
30 | :1001D0008A15C617D2176B18121C461C9C32004099 | ||
31 | :1001E0000E47484741488948804C00544455E555DE | ||
32 | :1001F00014567757BF57405C0680089003A1FE9CB9 | ||
33 | :10020000F02902FEB80CFF100000D0FECC1800CF81 | ||
34 | :10021000FE8001FF030000FE9315FE0F05FF38006E | ||
35 | :1002200000FE572400FE48004FFF04000010FF09A5 | ||
36 | :100230000000FF080101FF08FFFFFF270000FF107B | ||
37 | :10024000FFFFFF0F0000FE7856FE3412FF21000072 | ||
38 | :10025000FE04F7CF2A670B01FECE0EFE04F7CF6730 | ||
39 | :100260000B3C2AFE3DF0FE0202FE20F09CFE91F0C7 | ||
40 | :10027000FEF001FE90F0FEF001FE8FF09C05513B78 | ||
41 | :1002800002FED40C01FE440DFEDD12FEFC10FE2821 | ||
42 | :100290001C05FEA600FED3124718FEA600B5FE48B8 | ||
43 | :1002A000F0FE8602FE49F0FEA002FE4AF0FEBE020B | ||
44 | :1002B000FE46F0FE5002FE47F0FE5602FE43F0FE00 | ||
45 | :1002C0004402FE44F0FE4802FE45F0FE4C02170BCD | ||
46 | :1002D000A0170618960229FE001CDEFE021CDDFE99 | ||
47 | :1002E0001E1CFEE91001FE2017FEE710FE06FCC7EB | ||
48 | :1002F0000A6B019E0229144D379701FE640F0A6BA9 | ||
49 | :100300000182FEBD100A6B0182FEAD10FE161CFEBE | ||
50 | :10031000581C170618962A2529FE3DF0FE020221D8 | ||
51 | :10032000FE9402FE5A1CEAFE141C14FE300037979D | ||
52 | :1003300001FE540F1706189602D01E20071034FE37 | ||
53 | :10034000691017061896FE04EC20463D1220FE05A3 | ||
54 | :10035000F6C701FE5216094A4C35112D3C8A01E6BA | ||
55 | :1003600002290A40010E07005D016FFE1810FE41D0 | ||
56 | :10037000580A99010EFEC85464FE0C0301E60229D6 | ||
57 | :100380002A46FE02E827F8FE9E43F7FE27F0FEDC31 | ||
58 | :1003900001FE074BFE20F09CFE401C25D2FE26F0FD | ||
59 | :1003A000FE5603FEA0F0FE4403FE11F09CFEEF108B | ||
60 | :1003B000FE9FF0FE6403EB0FFE1100025A2AFE4876 | ||
61 | :1003C0001CEB09041DFE1813231E98AC12980A405A | ||
62 | :1003D000010EAC7501FEBC1511CA25D2FE01F0D28A | ||
63 | :1003E000FE82F0FE9203EC11FEE40065FEA40325FC | ||
64 | :1003F000321FFEB4030143FE06F0FEC4038D81FEEE | ||
65 | :100400000AF0FE7A060222056B2816FEF604142C6A | ||
66 | :1004100001338FFE660202D1EB2A671AFE671BF8D2 | ||
67 | :10042000F7FE481C70016E870A40010E070016D3C4 | ||
68 | :100430000ACA010E7460597627056B28FE10121443 | ||
69 | :100440002C01338FFE660202D1BC7DBD7F25226563 | ||
70 | :10045000FE3C041FFE380468FEA000FE9B57FE4EC3 | ||
71 | :10046000122BFF02001001081FFEE0042B01081FE1 | ||
72 | :1004700022302ED5FE4C44FE4C1260FE4448132C14 | ||
73 | :10048000FE4C5464D3467627FAEFFE621309041D2E | ||
74 | :10049000FE2A132F077EA5FE2010132CFE4C546459 | ||
75 | :1004A000D3FAEF8609041DFE08132F077E6E090498 | ||
76 | :1004B0001DFE1C1214920904063B14C401338FFE66 | ||
77 | :1004C000700C02222B11FEE600FE1C90F903149220 | ||
78 | :1004D00001330229FE425B671AFE4659F8F7FE8790 | ||
79 | :1004E00080FE31E44F09040BFE7813FE2080071ACA | ||
80 | :1004F000FE7012490406FE601305FEA2002816FED7 | ||
81 | :100500008005FE31E46A49040BFE4A1305FEA00093 | ||
82 | :1005100028FE42125E01082532F1010826FE9805E8 | ||
83 | :1005200011FEE3002349FE4AF0FE6A05FE49F0FE93 | ||
84 | :1005300064058324FE2100A124FE2200A0244CFE99 | ||
85 | :100540000948010826FE9805FEE2084904C53B015A | ||
86 | :1005500086240612CC37FE270109041DFE2212470D | ||
87 | :1005600001A714920904063B14C401338FFE700CDA | ||
88 | :10057000022205FE9C0028FE3E12055028FE36137E | ||
89 | :100580004701A726FE08060A06490419FE02125F63 | ||
90 | :1005900001FEAA141FFEFE05119A014311FEE5009B | ||
91 | :1005A0000550B40C5005C628FE6212053F28FE5ABD | ||
92 | :1005B0001301FE141801FE6618FE4348B719136CA8 | ||
93 | :1005C000FF020057488B1C3D85B7694701A726FEEF | ||
94 | :1005D000720649041BDF890A4D01FED8141FFE680C | ||
95 | :1005E00006119A014311FEE500053FB40C3F1706C2 | ||
96 | :1005F00001A7EC7270016E8711FEE200010825323E | ||
97 | :10060000FE0AF0FEA6068CFE5C07FE06F0FE6407FE | ||
98 | :100610008D81022209040BFE2E12151A0108150005 | ||
99 | :1006200001081500010815000108FE99A40108152C | ||
100 | :100630000002FE320861041BFE381209041B6E150D | ||
101 | :10064000FE1B000108150001081500010815000136 | ||
102 | :100650000815060108150002D9664CFE3A555FFEE2 | ||
103 | :100660009A814B1DBAFE32070A1DFE096FAFFECA02 | ||
104 | :1006700045FE3212622C85667B01082532FE0AF0A7 | ||
105 | :10068000FE32078D818CFE5C070222014302FE8A46 | ||
106 | :1006900006151902FE8A06FE9CF7D4FE2C90FEAECB | ||
107 | :1006A0009077FECA070C541855094A6A351E200770 | ||
108 | :1006B00010FE0E1274FE808037206327FE0610FEA7 | ||
109 | :1006C00083E7C4A1FE0340094A4F3501A8ADFE1FD0 | ||
110 | :1006D00040125801A5FE0850FE8A50FE4451FEC645 | ||
111 | :1006E0005183FBFE8A900C521853FE0C90FE8E90A4 | ||
112 | :1006F000FE4050FEC2500C39183AFE4A1009046AF6 | ||
113 | :10070000FE2A12FE2C90FEAE900C54185509044F90 | ||
114 | :100710008501A8FE1F801258FE4490FEC6900C561C | ||
115 | :100720001857FBFE8A900C521853FE4090FEC29060 | ||
116 | :100730000C39183A0C38184E094A19352A13FE4E4E | ||
117 | :100740001165FE4808FE9EF0FE5C08B116322A7361 | ||
118 | :10075000DDB8FE8008B9FE9E088CFE7408FE06F027 | ||
119 | :10076000FE7A088D8102220143FEC9101519FEC9C7 | ||
120 | :1007700010610406FE101261040B4509040BFE68AB | ||
121 | :1007800012FE2E1C02FE240A6104064561040BFEC3 | ||
122 | :100790005212FE2C1CFEAAF0FE1E09FEACF0FEBE9C | ||
123 | :1007A00008FE8A10AAFEF310FEADF0FECA0802FE93 | ||
124 | :1007B000240AABFEE710FE2BF09DE91CFE00FEFEB6 | ||
125 | :1007C0001C12B5FED2F09DFE76181C1A169D05CBA4 | ||
126 | :1007D0001C06169DB86DB96DAAABFEB110705E2BEC | ||
127 | :1007E000149201330FFE3500FE01F05A0F7C025ABD | ||
128 | :1007F000FE74181CFE00F8166D671B01FE440D3BCD | ||
129 | :1008000001E61E2774671A026D09040B21FE060A11 | ||
130 | :1008100009046AFE8212090419FE66131E58ACFC14 | ||
131 | :10082000FE8380FEC844FE2E13FE0491FE86916373 | ||
132 | :1008300027FE4059FEC15977D7055431550C7B1816 | ||
133 | :100840007CBE54BF5501A8AD63271258C038C14EB5 | ||
134 | :1008500079566857F4F5FE04FA38FE05FA4E01A5FC | ||
135 | :10086000A2230C7B0C7C79566857FE1210090419E0 | ||
136 | :1008700016D77939683A0904FEF700350552315325 | ||
137 | :10088000FE1058FE9158FE1459FE9559026D090448 | ||
138 | :100890001916D70904FEF70035FE3A55FE19815F97 | ||
139 | :1008A000FE1090FE9290FED7102F079B16FEC608F2 | ||
140 | :1008B000119B09040BFE14130539313A77FEC60863 | ||
141 | :1008C000FE0C58FE8D58026D2347FE1980DE090488 | ||
142 | :1008D0000BFE1A12FE6C19FE1941E9B5FED1F0D9D2 | ||
143 | :1008E000147A01330FFE4400FE8E10FE6C19BE39DF | ||
144 | :1008F000FEED19BF3AFE0C51FE8E51E91CFE00FFC1 | ||
145 | :1009000034FE7410B5FED2F0FEB20AFE76181C1A40 | ||
146 | :100910008405CB1C06FE08130FFE1600025AFED1FA | ||
147 | :10092000F0FEC40A147A01330FFE1700FE4210FED7 | ||
148 | :10093000CEF0FECA0AFE3C10FECDF0FED60A0FFE37 | ||
149 | :100940002200025AFECBF0FEE20A0FFE2400025AF9 | ||
150 | :10095000FED0F0FEEC0A0F93DCFECFF0FEF60A0F9D | ||
151 | :100960004CFE1010FECCF0D96104193B0FFE1200B2 | ||
152 | :100970002A13FE4E1165FE0C0BFE9EF0FE200BB1FD | ||
153 | :1009800016322A73DDB822B9222AEC65FE2C0B251B | ||
154 | :10099000328CFE480B8D81B8D4B9D402220143FEBB | ||
155 | :1009A000DB1011FEE800AAAB70BC7DBD7FFE89F0B4 | ||
156 | :1009B00022302ED8BC7DBD7F01081F22302ED6B13B | ||
157 | :1009C000450FFE4200025A7806FE814916FE380C99 | ||
158 | :1009D00009040BFE44130F004B0BFE54124BFE2870 | ||
159 | :1009E0000021FEA60C0A40010E07005D3EFE280015 | ||
160 | :1009F000FEE21001E701E80A9901FE320E59112DBD | ||
161 | :100A0000016F02290FFE44004B0BDF3E0BFEB410BA | ||
162 | :100A100001863E0BFEAA100186FE1982FE3446A313 | ||
163 | :100A20003E0B0FFE4300FE9610094A0B3501E7010D | ||
164 | :100A3000E859112D016F670B593C8A02FE2A030900 | ||
165 | :100A4000040B843E0B0F00FE5C1061041BFE581269 | ||
166 | :100A500009041BFE5013FE1C1CFE9DF0FE5C0CFEE8 | ||
167 | :100A60001C1CFE9DF0FE620C094A1B35FEA9100FEE | ||
168 | :100A7000FE1500FE04E60B5F5C0FFE1300FE101077 | ||
169 | :100A80000FFE4700A10FFE4100A00FFE240087AA21 | ||
170 | :100A9000AB70056B2821D15FFE04E61BFE9D41FE75 | ||
171 | :100AA0001C425901DA0229EA140B3795A914FE31C8 | ||
172 | :100AB00000379701FE540F02D03CFE06ECC9EE3E13 | ||
173 | :100AC0001DFECE45343CFE06EAC9FE474B89FE7545 | ||
174 | :100AD000570551FE9856FE38120A42010EFE444850 | ||
175 | :100AE0004609041DFE1A130A40010E47FE41580A2A | ||
176 | :100AF00099010EFE49548EFE2A0D02FE2A030A5168 | ||
177 | :100B0000FEEE14EE3E1DFECE45343CFECE47FEAD5D | ||
178 | :100B10001302291E200710FE9E1223124D1294125A | ||
179 | :100B2000CE1E2D47372DB1E0FEBCF0FEEC0D1306B6 | ||
180 | :100B3000124D01FEE21505FE380131FE3A0177FE45 | ||
181 | :100B4000F00DFE02ECCE62005DFE04EC2046FE05D8 | ||
182 | :100B5000F6FE340101FE5216FBFE48F40DFE18139A | ||
183 | :100B6000AFFE02EACE627AFEC513141B3795A95C6C | ||
184 | :100B700005FE38011CFEF0FF0CFE600105FE3A0187 | ||
185 | :100B80000CFE62013D12202406122D112D8A13063F | ||
186 | :100B90000323031E4DFEF7121E94AC1294077AFE37 | ||
187 | :100BA0007113FE241C141A3795A9FED910B6FE0342 | ||
188 | :100BB000DCFE7357FE805D03B6FE03DCFE5B57FE72 | ||
189 | :100BC000805D03FE0357B623FE00CC03FE0357B639 | ||
190 | :100BD000750309044CFE2213FE1C800706FE1A133F | ||
191 | :100BE000FE1E80E1FE1D80A4FE0C90FE0E13FE0E84 | ||
192 | :100BF00090A3FE3C90FE30F40BFE3C50A001FE8220 | ||
193 | :100C0000162F072DE001FEBC1509041D4501E70163 | ||
194 | :100C1000E811FEE90009044CFE2C1301FE1416FE37 | ||
195 | :100C20001E1CFE1490FE96900CFE640118FE6601D8 | ||
196 | :100C300009044FFE1212FE038074FE01EC20FE80B8 | ||
197 | :100C4000401220632711C8591E20ED762003FE08AC | ||
198 | :100C50001C05FEAC00FE065805FEAE00FE0758055A | ||
199 | :100C6000FEB000FE085805FEB200FE0958FE0A1C40 | ||
200 | :100C7000246912C9230C500C3F1340485F171DFE16 | ||
201 | :100C8000904DFE915421FE080F3E10134248174C20 | ||
202 | :100C9000FE904DFE915421FE1E0F24101220782C40 | ||
203 | :100CA000461E20ED762011C8F6FED6F0FE320FEA81 | ||
204 | :100CB00070FE141CFE101CFE181C033CFE0C14EEEF | ||
205 | :100CC000FE07E61DFECE47FEF513030186782C468F | ||
206 | :100CD000FAEFFE42132F072DFE34130A42010EB025 | ||
207 | :100CE000FE3612F0FE454801E3FE00CCB0FEF313E1 | ||
208 | :100CF0003D750710A30A80010EFE805C016FFE0E99 | ||
209 | :100D000010077E45F6FED6F0FE6C0F03FE445874C5 | ||
210 | :100D1000FE01EC97FE9E40FE9DE700FE9CE71B76E1 | ||
211 | :100D20002701DAFEDD102ABC7DBD7F302ED5071BE2 | ||
212 | :100D3000FE4812070BFE5612071AFE301207C216A3 | ||
213 | :100D4000FE3E1107FE230016FE4A11070616FEA8F6 | ||
214 | :100D5000110719FE12120700162214C201339F2B2D | ||
215 | :100D600001088C43032BFE62080ACA01FE320E11F1 | ||
216 | :100D70007E02292B2F079BFED9137939683A77FE1B | ||
217 | :100D8000FC1009046AFE7212C038C14EF4F58EFEE2 | ||
218 | :100D9000C6101E58FE2613057B317C77FE820C0C94 | ||
219 | :100DA000541855230C7B0C7C01A82469731258013C | ||
220 | :100DB000A5C038C14EFE0455FEA555FE04FA38FE06 | ||
221 | :100DC00005FA4EFE911005563157FE4056FEE1568B | ||
222 | :100DD0000C56185783C038C14EF4F505523153FEF6 | ||
223 | :100DE0000056FEA1560C52185309046AFE1E121E2C | ||
224 | :100DF00058FE1F4005543155FE2C50FEAE5005568E | ||
225 | :100E00003157FE4450FEC65005523153FE0850FE85 | ||
226 | :100E10008A500539313AFE4050FEC250025C240629 | ||
227 | :100E200012CD025B2B01081F44302ED5070621444A | ||
228 | :100E30002F079B215B016E1C3D164409040BE279D0 | ||
229 | :100E400039683AFE0A5534FE8B55BE39BF3AFE0C5E | ||
230 | :100E500051FE8E51025BFE1981AFFE1941025B2BE0 | ||
231 | :100E6000010825321FA2302ED84B1AFEA6124B0BBA | ||
232 | :100E70003B0244010825321FA2302ED6071A214416 | ||
233 | :100E800001081FA2302EFEE809FEC2496005FE9C43 | ||
234 | :100E9000002884490419349FFEBB454B00453E069B | ||
235 | :100EA000783DFEDA14016E87FE4B45E22F079AE18A | ||
236 | :100EB00005C62884053F28345E025BFEC05DFEF84F | ||
237 | :100EC00014FE03170550B40C505E2B0108265C017C | ||
238 | :100ED000FEAA14025C010825321F44302ED60706F4 | ||
239 | :100EE000214401FE8E13FE4258FE8214FEA4148794 | ||
240 | :100EF000FE4AF40B1644FE4AF406FE0C122F079A23 | ||
241 | :100F000085025B053FB40C3F5E2B0108265C01FEA9 | ||
242 | :100F1000D814025C130665FECA1226FEE01272F1B6 | ||
243 | :100F200001082372038FFEDC1225FEDC121FFECAAD | ||
244 | :100F3000125E2B0108FED510136CFF020057488B80 | ||
245 | :100F40001CFEFF7FFE3056FE005C03136CFF0200A8 | ||
246 | :100F500057488B1C3DFE3056FE005C03136CFF02AD | ||
247 | :100F60000057488B03136CFF020057488BFE0B5849 | ||
248 | :100F7000030A5001820A3F018203FC1C10FF030098 | ||
249 | :100F800054FE00F41948FE007DFE017DFE027DFE48 | ||
250 | :100F9000037C63270C521853BE56BF5703FE6208EA | ||
251 | :100FA000FE824AFEE11AFE835A740301FE1418FE03 | ||
252 | :100FB00042485F608901081FFEA214302ED8010844 | ||
253 | :100FC0001FFEA214302EFEE80AFEC15905C628FEF7 | ||
254 | :100FD000CC1249041BFEC41323621BE24BC364FE04 | ||
255 | :100FE000E8133B130617C378DBFE7810FF02835526 | ||
256 | :100FF000A1FF028355621AA4BBFE30008EE4172CB9 | ||
257 | :101000001306FE5610620BE1BBFE64008EE40AFE7E | ||
258 | :10101000640017931306FE28106206FE6013BBFEE1 | ||
259 | :10102000C8008EE40AFEC800174D130683BBFE906D | ||
260 | :1010300001BAFE4E1489FE1210FE43F494FE56F0DF | ||
261 | :10104000FE6014FE04F46CFE43F493FEF310F90109 | ||
262 | :10105000FE22131C3DFE1013FE0017FE4DE469BA7C | ||
263 | :10106000FE9C14B769FE1C10FE0017FE4DE419BA71 | ||
264 | :10107000FE9C14B719836023FE4DF400DF8913062C | ||
265 | :10108000FEB456FEC3580360130B03150601082671 | ||
266 | :10109000E5150B010826E5151A010826E572FE89FB | ||
267 | :1010A000490108031506010826A6151A010826A6F7 | ||
268 | :1010B0001506010826A6FE8949010826A672FE89A2 | ||
269 | :1010C0004A01080360031ECC0706FE4413AD12CC90 | ||
270 | :1010D000FE49F4003B729F5EFE01ECFE2701F10128 | ||
271 | :1010E000082F07FEE300FE20131FFE5A152312CD22 | ||
272 | :1010F00001431ECD070645094A0635030A42010E83 | ||
273 | :10110000ED880710A40A80010E880A51019E030A87 | ||
274 | :1011100080010E88FE80E710071084FE455801E329 | ||
275 | :1011200088030A42010E880A51019E030A42010EF9 | ||
276 | :10113000FE8080F2FE49E410A40A80010EF20A51FA | ||
277 | :1011400001820317107166FE6001FE18DFFE19DED2 | ||
278 | :10115000FE241CFE1DF71D90FEF61501FEFC16E098 | ||
279 | :10116000911D66FE2C01FE2F1903AE21FEE615FE31 | ||
280 | :10117000DA1017107105FE6401FE00F419FE18580C | ||
281 | :1011800005FE6601FE19589119FE3C90FE30F406EA | ||
282 | :10119000FE3C5066FE3800FE0F79FE1CF71990FEEB | ||
283 | :1011A0004016FEB6143403AE21FE1816FE9C10172E | ||
284 | :1011B0001071FE835AFE18DFFE19DEFE1DF738900F | ||
285 | :1011C000FE6216FE9414FE10139138661BFEAF19D2 | ||
286 | :1011D000FE98E70003AE21FE5616FE6C1017107144 | ||
287 | :1011E000FE30BCFEB2BC91C5661BFE0F79FE1CF73B | ||
288 | :1011F000C590FE9A16FE5C143403AE21FE8616FEE0 | ||
289 | :101200004210FE02F61071FE18FE54FE19FE55FC47 | ||
290 | :10121000FE1DF74F90FEC016FE3614FE1C13914FB4 | ||
291 | :1012200047FE8358FEAF19FE80E710FE81E71011DC | ||
292 | :10123000FEDD006327036327FE124521FEB016146E | ||
293 | :10124000063795A90229FE39F0FE04172303FE7E16 | ||
294 | :10125000181C1A5D130D037105CB1C06FEEF12FE60 | ||
295 | :10126000E110782C462F072DFE3C13FE8214FE421F | ||
296 | :10127000133C8A0A42010EB0FE3E12F0FE454801C0 | ||
297 | :10128000E3FE00CCB0FEF3133D750710A30A800106 | ||
298 | :101290000EF2016FFE1610077E85FE4014FE24122A | ||
299 | :1012A000F6FED6F0FE2417170B03FE9CE70B0FFE8D | ||
300 | :1012B000150059762701DA1706033C8A094A1D35BD | ||
301 | :1012C000112D016F170603FE3890FEBA9079C7689A | ||
302 | :1012D000C8FE485534FEC955031E98731298030A78 | ||
303 | :1012E00099010EF00A40010EFE494416FEF01773F4 | ||
304 | :1012F00075030A42010E0710450A51019E0A40017A | ||
305 | :101300000E737503FE4EE41A64FE241805FE900069 | ||
306 | :10131000FE3A455BFE4EE4C264FE361805FE9200BE | ||
307 | :10132000FE02E61BDCFE4EE4FE0B0064FE481805E0 | ||
308 | :10133000FE9400FE02E619FE081005FE9600FE026D | ||
309 | :10134000E62CFE4E45FE0C12AFFF046854DE1C690D | ||
310 | :1013500003077AFE5AF0FE741824FE0900FE3410CA | ||
311 | :10136000071BFE5AF0FE821824C3FE2610071A5DE2 | ||
312 | :10137000242CDC070B5D2493FE0E1007065D244D24 | ||
313 | :101380009FAD0314FE09000133FE04FE7D057FF9C5 | ||
314 | :101390000325FECA18FE14F00865FEC61803FF1ADE | ||
315 | :0213A00000004B | ||
316 | :00000001FF | ||
317 | /* Microcode buffer is kept after initialization for error recovery. */ | ||
diff --git a/firmware/advansys/38C0800.bin.ihex b/firmware/advansys/38C0800.bin.ihex new file mode 100644 index 000000000000..a60b447ff74a --- /dev/null +++ b/firmware/advansys/38C0800.bin.ihex | |||
@@ -0,0 +1,336 @@ | |||
1 | :10000000D83F0D05000000F200F000FC001618E4D7 | ||
2 | :10001000010048E4188003F60200CE1900FAFFFF41 | ||
3 | :100020001C0F00F69EE7FF0082E700EA01FA01E6F6 | ||
4 | :1000300009E755F001F60300040010001EF085F0FA | ||
5 | :1000400018F40800BC00385400ECD5F0820D00E62E | ||
6 | :1000500086F0B1F0985701FCB400D4010C1C3E1C92 | ||
7 | :100060003C00BB000010BA19028032F07C0D021374 | ||
8 | :10007000BA131840005701EA02FC03FC3E006C0171 | ||
9 | :100080006E0174017601B9543E57008003E6B60054 | ||
10 | :10009000C00001013E017A01CA08CE1016110412F7 | ||
11 | :1000A0000812024ABB553C5603581B8030E44BE40F | ||
12 | :1000B0005DF002FA200032004000800024013C0183 | ||
13 | :1000C00068016A017001720178017C01620A860D83 | ||
14 | :1000D00006134C1C04804AE402EE5BF003F70C00AC | ||
15 | :1000E0000F004700BE00000120115C16321C381CB6 | ||
16 | :1000F0004E1C1044004C04EA5CF0A7F004F603FA2E | ||
17 | :100100000500340036009800CC0020014E014A0B57 | ||
18 | :10011000420C120F0C1022110A120413301C024858 | ||
19 | :10012000004E42544455BD56068300DC05F009F0EC | ||
20 | :1001300059F0B8F04BF406F70EF704FC05FC060086 | ||
21 | :10014000190033009B00A400B500BA00D000E10004 | ||
22 | :10015000E700E203080F021004100A100A130C1340 | ||
23 | :1001600012132414341404160816A417201C341C6B | ||
24 | :10017000361C0844384491440A45484601486854AE | ||
25 | :100180003A558355E555B0570158835905E60BF0AC | ||
26 | :100190000CF004F805F807000A001C001E009E0081 | ||
27 | :1001A000A800AA00B900E0002201260179017E0121 | ||
28 | :1001B000C401C60180025E03EE049A06F8076208D5 | ||
29 | :1001C00068086908D608E909FA0B2E0F12101A10F0 | ||
30 | :1001D000ED10F1102A1106120C123E121013161314 | ||
31 | :1001E0001E134614761482143615CA156B18BE18E1 | ||
32 | :1001F000CA18E619121C461C9C3200400E47FE9C91 | ||
33 | :10020000F02B02FEAC0DFF100000D7FEE81900D65F | ||
34 | :10021000FE8401FF030000FE9315FE0F05FF38006A | ||
35 | :1002200000FE572400FE4C005BFF04000011FF0994 | ||
36 | :100230000000FF080101FF08FFFFFF270000FF107B | ||
37 | :10024000FFFFFF110000FE7856FE3412FF21000070 | ||
38 | :10025000FE04F7D62C990A01FEC20FFE04F7D699C8 | ||
39 | :100260000A422CFE3DF0FE0602FE20F0A7FE91F0B1 | ||
40 | :10027000FEF401FE90F0FEF401FE8FF0A7035D4D49 | ||
41 | :1002800002FEC80D01FE380EFEDD12FEFC10FE2837 | ||
42 | :100290001C03FEA600FED3124114FEA600C2FE48B7 | ||
43 | :1002A000F0FE8A02FE49F0FEA402FE4AF0FEC202FF | ||
44 | :1002B000FE46F0FE5402FE47F0FE5A02FE43F0FEF8 | ||
45 | :1002C0004802FE44F0FE4C02FE45F0FE5002180AC1 | ||
46 | :1002D000AA180614A1022BFE001CE7FE021CE6FE73 | ||
47 | :1002E0001E1CFEE91001FE1818FEE710FE06FCCEEB | ||
48 | :1002F000097001A8022B155939A201FE5810097086 | ||
49 | :100300000187FEBD1009700187FEAD10FE161CFEB0 | ||
50 | :10031000581C180614A12C1C2BFE3DF0FE060223CF | ||
51 | :10032000FE9802FE5A1CF8FE141C15FE300039A27D | ||
52 | :1003300001FE4810180614A102D72220071135FE2D | ||
53 | :100340006910180614A1FE04EC204F431320FE058B | ||
54 | :10035000F6CE01FE4A1708545837122F429201FE7A | ||
55 | :100360008216022B0946010E0700660173FE181063 | ||
56 | :10037000FE415809A4010EFEC8546BFE100301FE95 | ||
57 | :100380008216022B2C4FFE02E82AFEBF57FE9E4328 | ||
58 | :10039000FE7757FE27F0FEE001FE074BFE20F0A798 | ||
59 | :1003A000FE401C1CD9FE26F0FE5A03FEA0F0FE48BB | ||
60 | :1003B00003FE11F0A7FEEF10FE9FF0FE6803F91098 | ||
61 | :1003C000FE110002652CFE481CF908051BFE1813DF | ||
62 | :1003D0002122A3B713A30946010EB77801FEB41674 | ||
63 | :1003E00012D11CD9FE01F0D9FE82F0FE9603FA125A | ||
64 | :1003F000FEE40027FEA8031C341DFEB803014BFEDB | ||
65 | :1004000006F0FEC8039586FE0AF0FE8A0602240363 | ||
66 | :10041000702817FEFA04156D01367BFE6A0202D8B9 | ||
67 | :10042000F92C9919FE671BFEBF57FE7757FE481C33 | ||
68 | :100430007401AF8C0946010E070017DA09D1010ECD | ||
69 | :100440008D5164792A037028FE1012156D01367BD8 | ||
70 | :10045000FE6A0202D8C781C8831C2427FE40041DFF | ||
71 | :10046000FE3C043BFEA000FE9B57FE4E122DFF02F9 | ||
72 | :100470000010010B1DFEE4042D010B1D243331DEA1 | ||
73 | :10048000FE4C44FE4C1251FE44480F6FFE4C546B20 | ||
74 | :10049000DA4F792AFE0680FE4847FE621308051BE4 | ||
75 | :1004A000FE2A13320782FE5213FE20100F6FFE4CFD | ||
76 | :1004B000546BDAFE0680FE4847FE401308051BFE1B | ||
77 | :1004C0000813320782FE301308051BFE1C12159D0F | ||
78 | :1004D0000805064D15FE0D0001367BFE640D022455 | ||
79 | :1004E0002D12FEE600FE1C90FE405C04159D0136B8 | ||
80 | :1004F000022BFE425B9919FE4659FEBF57FE775705 | ||
81 | :10050000FE8780FE31E45B08050AFE8413FE20802E | ||
82 | :100510000719FE7C12530506FE6C1303FEA2002889 | ||
83 | :1005200017FE9005FE31E45A53050AFE561303FEEA | ||
84 | :10053000A00028FE4E1267FF02001027FE48051C8F | ||
85 | :1005400034FE8948FF02001027FE560526FEA80546 | ||
86 | :1005500012FEE3002153FE4AF0FE7605FE49F0FE4E | ||
87 | :1005600070058825FE2100AB25FE2200AA2558FE35 | ||
88 | :100570000948FF02001027FE860526FEA805FEE2B8 | ||
89 | :10058000085305CB4D01B0250613D339FE270108CA | ||
90 | :10059000051BFE22124101B2159D0805064D15FEF0 | ||
91 | :1005A0000D0001367BFE640D022403FE9C0028EB47 | ||
92 | :1005B000035C28FE36134101B226FE1806090653D5 | ||
93 | :1005C000051FFE02125001FE9E151DFE0E0612A50D | ||
94 | :1005D000014B12FEE500035CC10C5C03CD28FE62FA | ||
95 | :1005E00012034528FE5A1301FE0C1901FE7619FE6E | ||
96 | :1005F0004348C4CC0F71FF02005752931E438BC473 | ||
97 | :100600006E4101B226FE820653051AE9910959018D | ||
98 | :10061000FECC151DFE780612A5014B12FEE5000367 | ||
99 | :1006200045C10C45180601B2FA767401AF8C12FE72 | ||
100 | :10063000E20027DB1C34FE0AF0FEB60694FE6C07CF | ||
101 | :10064000FE06F0FE74079586022408050AFE2E12A7 | ||
102 | :100650001619010B1600010B1600010B1600010BF9 | ||
103 | :10066000FE99A4010B160002FE420868051AFE3826 | ||
104 | :100670001208051AFE301316FE1B00010B160001AE | ||
105 | :100680000B1600010B1600010B1606010B160002DB | ||
106 | :10069000E26C58BE50FE9A81551B7AFE4207091B38 | ||
107 | :1006A000FE096FBAFECA45FE3212696D8B6C7F2758 | ||
108 | :1006B000FE54071C34FE0AF0FE4207958694FE6C39 | ||
109 | :1006C000070224014B02DB161F02DBFE9CF7DCFE57 | ||
110 | :1006D0002C90FEAE9056FEDA070C60146108545A56 | ||
111 | :1006E0003722200711FE0E128DFE808039206A2AE3 | ||
112 | :1006F000FE0610FE83E7FE4800ABFE034008545B95 | ||
113 | :100700003701B3B8FE1F40136201EFFE0850FE8AA6 | ||
114 | :1007100050FE4451FEC65188FE0890FE8A900C5E41 | ||
115 | :10072000145FFE0C90FE8E90FE4050FEC2500C3DB9 | ||
116 | :10073000143EFE4A1008055AFE2A12FE2C90FEAE08 | ||
117 | :10074000900C60146108055B8B01B3FE1F8013627F | ||
118 | :10075000FE4490FEC6900C3F1440FE0890FE8A9026 | ||
119 | :100760000C5E145FFE4090FEC2900C3D143E0C2EB9 | ||
120 | :10077000143C210C490C6308541F372C0FFE4E11FA | ||
121 | :1007800027DDFE9EF0FE7608BC17342C77E6C5FE0A | ||
122 | :100790009A08C6FEB80894FE8E08FE06F0FE94087D | ||
123 | :1007A00095860224014BFEC910161FFEC91068056C | ||
124 | :1007B00006FE101268050A4E08050AFE9012FE2E6B | ||
125 | :1007C0001C02FE180B6805064E68050AFE7A12FE2A | ||
126 | :1007D0002C1CFEAAF0FED209FEACF0FE000902FEBF | ||
127 | :1007E000DE09FEB7F0FEFC08FE02F61A50FE701895 | ||
128 | :1007F000FEF118FE4055FEE155FE1058FE9158FEE0 | ||
129 | :100800001459FE95591C85FE8CF0FEFC08FEACF0D8 | ||
130 | :10081000FEF008B5FECB10FEADF0FE0C0902FE188E | ||
131 | :100820000BB6FEBF10FE2BF085F41EFE00FEFE1C74 | ||
132 | :1008300012C2FED2F085FE76181E19178503D21E4D | ||
133 | :10084000061785C54AC64AB5B6FE891074672D15C8 | ||
134 | :100850009D013610FE3500FE01F06510800265FE38 | ||
135 | :100860009880FE19E40AFE1A1251FE1982FE6C18D5 | ||
136 | :10087000FE4454BEFE1981FE74188F9017FECE08F8 | ||
137 | :10088000024A08055AEC032E293C0C3F14409B2ECB | ||
138 | :100890009C3CFE6C18FEED18FE4454FEE5543A3FB5 | ||
139 | :1008A0003B40034929638FFEE354FE7418FEF5189C | ||
140 | :1008B0008FFEE35490C056FECE08024AFE37F0FE8B | ||
141 | :1008C000DA09FE8BF0FE6009024A08050A23FEFAE7 | ||
142 | :1008D0000A3A493B6356FE3E0A0FFEC007419800A4 | ||
143 | :1008E000ADFE0159FE52F0FE0C0A8F7AFE240A3A40 | ||
144 | :1008F000498FFEE35457497D63FE1458FE95580214 | ||
145 | :100900004A3A493B63FE1459FE9559BE574957630D | ||
146 | :10091000024A08055AFE821208051FFE661322626B | ||
147 | :10092000B7FE03A1FE8380FEC844FE2E13FE049191 | ||
148 | :10093000FE86916A2AFE4059FEC15956E00360299D | ||
149 | :10094000610C7F148057607D6101B3B86A2A13621D | ||
150 | :100950009B2E9C3C3A3F3B4090C0FE04FA2EFE0585 | ||
151 | :10096000FA3C01EFFE3610210C7F0C803A3F3B40F1 | ||
152 | :10097000E408051F17E03A3D3B3E0805FEF7003747 | ||
153 | :10098000035E295FFE1058FE915857497D6302FEB1 | ||
154 | :10099000F40908051F17E00805FEF70037BEFE1929 | ||
155 | :1009A0008150FE1090FE9290FED3103207A617FEE3 | ||
156 | :1009B000080912A608050AFE1413033D293E56FE37 | ||
157 | :1009C0000809FE0C58FE8D58024A2141FE1980E7A5 | ||
158 | :1009D00008050AFE1A12FE6C19FE1941F4C2FED176 | ||
159 | :1009E000F0E2157E013610FE4400FE8E10FE6C19FA | ||
160 | :1009F000573DFEED197D3EFE0C51FE8E51F41EFE5C | ||
161 | :100A000000FF35FE7410C2FED2F0FEA60BFE761873 | ||
162 | :100A10001E198A03D21E06FE081310FE1600026578 | ||
163 | :100A2000FED1F0FEB80B157E013610FE1700FE4217 | ||
164 | :100A300010FECEF0FEBE0BFE3C10FECDF0FECA0B4B | ||
165 | :100A400010FE22000265FECBF0FED60B10FE240045 | ||
166 | :100A50000265FED0F0FEE00B109EE5FECFF0FEEA50 | ||
167 | :100A60000B1058FE1010FECCF0E268051F4D10FE72 | ||
168 | :100A700012002C0FFE4E1127FE000CFE9EF0FE14FD | ||
169 | :100A80000CBC17342C77E6C524C6242CFA27FE208C | ||
170 | :100A90000C1C3494FE3C0C9586C5DCC6DC0224019B | ||
171 | :100AA0004BFEDB1012FEE800B5B674C781C883FEAA | ||
172 | :100AB00089F0243331E1C781C88327FE660C1D24E9 | ||
173 | :100AC0003331DFBC4E10FE420002657C06FE8149D8 | ||
174 | :100AD00017FE2C0D08050AFE44131000550AFE549B | ||
175 | :100AE0001255FE280023FE9A0D0946010E070066E6 | ||
176 | :100AF00044FE2800FEE21001F501F609A401FE26DD | ||
177 | :100B00000F64122F0173022B10FE4400550AE944B2 | ||
178 | :100B10000AFEB41001B0440AFEAA1001B0FE198208 | ||
179 | :100B2000FE3446AC440A10FE4300FE961008540AF8 | ||
180 | :100B30003701F501F664122F0173990A644292029B | ||
181 | :100B4000FE2E0308050A8A440A1000FE5C106805A0 | ||
182 | :100B50001AFE581208051AFE5013FE1C1CFE9DF0CA | ||
183 | :100B6000FE500DFE1C1CFE9DF0FE560D08541A375B | ||
184 | :100B7000FEA91010FE1500FE04E60A50FE2E10100D | ||
185 | :100B8000FE1300FE1010106FAB10FE4100AA10FE05 | ||
186 | :100B900024008CB5B67403702823D850FE04E61ADE | ||
187 | :100BA000FE9D41FE1C426401E3022BF8150A39A0A8 | ||
188 | :100BB000B415FE310039A201FE481002D742FE06EC | ||
189 | :100BC000ECD0FC441BFECE453542FE06EAD0FE4783 | ||
190 | :100BD0004B91FE7557035DFE9856FE381209480189 | ||
191 | :100BE0000EFE44484F08051BFE1A130946010E412C | ||
192 | :100BF000FE415809A4010EFE495496FE1E0E02FE47 | ||
193 | :100C00002E03095DFEEE14FC441BFECE453542FE6C | ||
194 | :100C1000CE47FEAD13022B22200711FE9E12211398 | ||
195 | :100C200059139F13D5222F41392FBCADFEBCF0FEC6 | ||
196 | :100C3000E00E0F06135901FEDA1603FE380129FEF5 | ||
197 | :100C40003A0156FEE40EFE02ECD5690066FE04ECA5 | ||
198 | :100C5000204FFE05F6FE340101FE4A17FE0890FE05 | ||
199 | :100C600048F40DFE1813BAFE02EAD5697EFEC513DC | ||
200 | :100C7000151A39A0B4FE2E1003FE38011EFEF0FF37 | ||
201 | :100C80000CFE600103FE3A010CFE620143132025B5 | ||
202 | :100C900006132F122F920F060421042259FEF71279 | ||
203 | :100CA000229FB7139F077EFE7113FE241C1519396E | ||
204 | :100CB000A0B4FED910C3FE03DCFE7357FE805D04B2 | ||
205 | :100CC000C3FE03DCFE5B57FE805D04FE0357C321B9 | ||
206 | :100CD000FE00CC04FE0357C37804080558FE221317 | ||
207 | :100CE000FE1C800706FE1A13FE1E80EDFE1D80AE60 | ||
208 | :100CF000FE0C90FE0E13FE0E90ACFE3C90FE30F407 | ||
209 | :100D00000AFE3C50AA01FE7A1732072FAD01FEB44D | ||
210 | :100D10001608051B4E01F501F612FEE900080558FC | ||
211 | :100D2000FE2C1301FE0C17FE1E1CFE1490FE969066 | ||
212 | :100D30000CFE640114FE660108055BFE1212FE0340 | ||
213 | :100D4000808DFE01EC20FE804013206A2A12CF64C1 | ||
214 | :100D50002220FB792004FE081C03FEAC00FE06588E | ||
215 | :100D600003FEAE00FE075803FEB000FE085803FE67 | ||
216 | :100D7000B200FE0958FE0A1C256E13D0210C5C0C33 | ||
217 | :100D8000450F465250181BFE904DFE915423FEFC19 | ||
218 | :100D90000F44110F48521858FE904DFE915423E411 | ||
219 | :100DA000251113207C6F4F2220FB792012CFFE14D7 | ||
220 | :100DB00056FED6F0FE2610F874FE141CFE101CFE23 | ||
221 | :100DC000181C0442FE0C14FCFE07E61BFECE47FE78 | ||
222 | :100DD000F5130401B07C6F4FFE0680FE4847FE42CB | ||
223 | :100DE0001332072FFE34130948010EBBFE3612FEE4 | ||
224 | :100DF0004148FE454801F0FE00CCBBFEF3134378AA | ||
225 | :100E00000711AC0984010EFE805C0173FE0E100711 | ||
226 | :100E1000824EFE1456FED6F0FE601004FE44588D3D | ||
227 | :100E2000FE01ECA2FE9E40FE9DE700FE9CE71A79C3 | ||
228 | :100E30002A01E3FEDD102CC781C8833331DE071A97 | ||
229 | :100E4000FE4812070AFE56120719FE301207C9178C | ||
230 | :100E5000FE321207FE230017EB070617FE9C12074F | ||
231 | :100E60001FFE12120700172415C90136A92D010B08 | ||
232 | :100E7000944B042DDD09D101FE260F1282022B2D89 | ||
233 | :100E80003207A6FED9133A3D3B3E56FEF011080547 | ||
234 | :100E90005AFE72129B2E9C3C90C096FEBA112262A2 | ||
235 | :100EA000FE2613037F298056FE760D0C6014612107 | ||
236 | :100EB0000C7F0C8001B3256E77136201EF9B2E9C93 | ||
237 | :100EC0003CFE0455FEA555FE04FA2EFE05FA3CFE36 | ||
238 | :100ED0009110033F2940FE4056FEE1560C3F14405E | ||
239 | :100EE000889B2E9C3C90C0035E295FFE0056FEA1AD | ||
240 | :100EF000560C5E145F08055AFE1E122262FE1F4049 | ||
241 | :100F000003602961FE2C50FEAE50033F2940FE4491 | ||
242 | :100F100050FEC650035E295FFE0850FE8A50033D16 | ||
243 | :100F2000293EFE4050FEC2500289250613D40272AB | ||
244 | :100F30002D010B1D4C3331DE0706234C3207A6234F | ||
245 | :100F40007201AF1E43174C08050AEE3A3D3B3EFEC8 | ||
246 | :100F50000A5535FE8B55573D7D3EFE0C51FE8E5198 | ||
247 | :100F60000272FE1981BAFE194102722D010B1C3466 | ||
248 | :100F70001DE83331E15519FEA612550A4D024C0108 | ||
249 | :100F80000B1C341DE83331DF0719234C010B1DE81E | ||
250 | :100F90003331FEE809FEC2495103FE9C00288A5302 | ||
251 | :100FA000051F35A9FEBB4555004E44067C43FEDABD | ||
252 | :100FB0001401AF8CFE4B45EE3207A5ED03CD288A18 | ||
253 | :100FC00003452835670272FEC05DFEF814FE031764 | ||
254 | :100FD000035CC10C5C672D010B268901FE9E150286 | ||
255 | :100FE00089010B1C341D4C3331DF0706234C01F102 | ||
256 | :100FF000FE4258F1FEA4148CFE4AF40A174CFE4A35 | ||
257 | :10100000F406EA3207A58B02720345C10C45672D31 | ||
258 | :10101000010B268901FECC1502890F0627FEBE139F | ||
259 | :1010200026FED41376FE8948010B2176047BFED080 | ||
260 | :10103000131CFED0131DFEBE13672D010BFED51031 | ||
261 | :101040000F71FF02005752931EFEFF7FFE3056FEC7 | ||
262 | :10105000005C040F71FF02005752931E43FE30568E | ||
263 | :10106000FE005C040F71FF0200575293040F71FFE2 | ||
264 | :101070000200575293FE0B5804095C018709450191 | ||
265 | :101080008704FE03A11E11FF030054FE00F41F524B | ||
266 | :10109000FE007DFE017DFE027DFE037C6A2A0C5E61 | ||
267 | :1010A000145F573F7D4004DDFE824AFEE11AFE8355 | ||
268 | :1010B0005A8D0401FE0C19FE4248505191010B1D3E | ||
269 | :1010C000FE96153331E1010B1DFE96153331FEE816 | ||
270 | :1010D0000AFEC15903CD28FECC1253051AFEC413D3 | ||
271 | :1010E00021691AEE55CA6BFEDC144D0F0618CA7C36 | ||
272 | :1010F00030FE7810FF028355ABFF0283556919AEAD | ||
273 | :1011000098FE300096F2186D0F06FE5610690AED33 | ||
274 | :1011100098FE640096F209FE6400189E0F06FE28F1 | ||
275 | :10112000106906FE601398FEC80096F209FEC8001A | ||
276 | :1011300018590F068898FE90017AFE421591E4FE38 | ||
277 | :1011400043F49FFE56F0FE5415FE04F471FE43F482 | ||
278 | :101150009EFEF310FE405C01FE16141E43ECFE00E2 | ||
279 | :1011600017FE4DE46E7AFE9015C46EFE1C10FE0054 | ||
280 | :1011700017FE4DE4CC7AFE9015C4CC885121FE4D6B | ||
281 | :10118000F400E9910F06FEB456FEC35804510F0A4D | ||
282 | :10119000041606010B26F3160A010B26F316190195 | ||
283 | :1011A0000B26F376FE8949010B041606010B26B1C6 | ||
284 | :1011B0001619010B26B11606010B26B1FE8949014D | ||
285 | :1011C0000B26B176FE894A010B04510422D307068F | ||
286 | :1011D000FE4813B813D3FE49F4004D76A967FE010B | ||
287 | :1011E000ECFE2701FE8948FF02001027FE2E163272 | ||
288 | :1011F00007FEE300FE20131DFE52162113D4014BFF | ||
289 | :1012000022D407064E08540637040948010EFB8E07 | ||
290 | :101210000711AE0984010E8E095D01A8040984013D | ||
291 | :101220000E8EFE80E71107118AFE455801F08E04EC | ||
292 | :101230000948010E8E095D01A8040948010EFE80CF | ||
293 | :1012400080FE804CFE49E411AE0984010EFE804C04 | ||
294 | :10125000095D0187041811756CFE6001FE18DFFE40 | ||
295 | :1012600019DEFE241CFE1DF71B97FEEE1601FEF490 | ||
296 | :1012700017AD9A1B6CFE2C01FE2F1904B923FEDE5C | ||
297 | :1012800016FEDA1018117503FE6401FE00F41FFE4D | ||
298 | :10129000185803FE6601FE19589A1FFE3C90FE3056 | ||
299 | :1012A000F406FE3C506CFE3800FE0F79FE1CF71F62 | ||
300 | :1012B00097FE3817FEB6143504B923FE1017FE9CAE | ||
301 | :1012C00010181175FE835AFE18DFFE19DEFE1DF799 | ||
302 | :1012D0002E97FE5A17FE9414EC9A2E6C1AFEAF1934 | ||
303 | :1012E000FE98E70004B923FE4E17FE6C1018117526 | ||
304 | :1012F000FE30BCFEB2BC9ACB6C1AFE0F79FE1CF716 | ||
305 | :10130000CB97FE9217FE5C143504B923FE7E17FEC0 | ||
306 | :101310004210FE02F61175FE18FE60FE19FE61FE17 | ||
307 | :1013200003A1FE1DF75B97FEB817FE3614FE1C13D3 | ||
308 | :101330009A5B41FE8358FEAF19FE80E711FE81E7FC | ||
309 | :101340001112FEDD006A2A046A2AFE124523FEA855 | ||
310 | :1013500017150639A0B4022BFE39F0FEFC17210444 | ||
311 | :10136000FE7E181E19660F0D047503D21E06FEEFD1 | ||
312 | :1013700012FEE1107C6F4F32072FFE3C13F1FE424C | ||
313 | :101380001342920948010EBBEBFE4148FE4548015D | ||
314 | :10139000F0FE00CCBBFEF31343780711AC098401C7 | ||
315 | :1013A0000EFE804C0173FE161007828BFE4014FE69 | ||
316 | :1013B0002412FE1456FED6F0FE1C18180A04FE9CD9 | ||
317 | :1013C000E70A10FE150064792A01E3180604429228 | ||
318 | :1013D00008541B37122F0173180604FE3890FEBA0A | ||
319 | :1013E000903ACE3BCFFE485535FEC9550422A3772F | ||
320 | :1013F00013A30409A4010EFE41480946010EFE494B | ||
321 | :101400004417FEE8187778040948010E07114E09C1 | ||
322 | :101410005D01A80946010E777804FE4EE4196BFEC3 | ||
323 | :101420001C1903FE9000FE3A45FE2C10FE4EE4C946 | ||
324 | :101430006BFE2E1903FE9200FE02E61AE5FE4EE454 | ||
325 | :10144000FE0B006BFE401903FE9400FE02E61FFE39 | ||
326 | :10145000081003FE9600FE02E66DFE4E45EABAFF56 | ||
327 | :10146000046854E71E6EFE081CFE6719FE0A1CFE87 | ||
328 | :101470001AF4FE0004EAFE48F4197AFE74190F19F2 | ||
329 | :1014800004077EFE5AF0FE841925FE0900FE341082 | ||
330 | :10149000071AFE5AF0FE921925CAFE261007196691 | ||
331 | :1014A000256DE5070A66259EFE0E1007066625597E | ||
332 | :1014B000A9B80415FE09000136FE04FE810383FE6F | ||
333 | :1014C000405C041CF7FE14F00B27FED6191CF77BBA | ||
334 | :0C14D000F7FE82F0FEDA1904FFCC0000E9 | ||
335 | :00000001FF | ||
336 | /* Microcode buffer is kept after initialization for error recovery. */ | ||
diff --git a/firmware/advansys/38C1600.bin.ihex b/firmware/advansys/38C1600.bin.ihex new file mode 100644 index 000000000000..18c7c4862046 --- /dev/null +++ b/firmware/advansys/38C1600.bin.ihex | |||
@@ -0,0 +1,398 @@ | |||
1 | :1000000077EF0406000000F2001600FC001000F07C | ||
2 | :1000100018E40100041E48E403F6F7132E1E020044 | ||
3 | :100020000717C05F00FAFFFF040000F609E782E748 | ||
4 | :1000300085F086F04E109EE7FF0055F001F60300B4 | ||
5 | :10004000985701E600EA00EC01FA18F40800F01DE8 | ||
6 | :10005000385432F01000C20E1EF0D5F0BC004BE454 | ||
7 | :1000600000E6B1F0B40002133E1CC8473E00D801C0 | ||
8 | :1000700006130C1C5E1E0057C85701FCBC0EA212D2 | ||
9 | :10008000B9540080620A5A12C8153E1E1840BD5667 | ||
10 | :1000900003E601EA5CF00F0020006C016E0104121F | ||
11 | :1000A0000413BB553C563E5703584AE44000B60083 | ||
12 | :1000B000BB00C000000101013E01580A44100A12B1 | ||
13 | :1000C0004C1C4E1C024A30E405E60C003C0080004B | ||
14 | :1000D00024013C0168016A0170017201740176011A | ||
15 | :1000E00078017C01C60E0C10AC12AE12161A321C2E | ||
16 | :1000F0006E1E02483A55C95702EE5BF003F706F749 | ||
17 | :1001000003FC06001E00BE00E1000C12181A701A53 | ||
18 | :10011000301C381C1044004CB057405C4DE404EADD | ||
19 | :100120005DF0A7F004F602FC05000900190032009A | ||
20 | :1001300033003400360098009E00CC0020014E01B0 | ||
21 | :1001400079013C09680D021004103A1008120A13D4 | ||
22 | :100150004016501600174A19004E0054015800DC92 | ||
23 | :1001600005F009F059F0B8F048F40EF70A009B00CA | ||
24 | :100170009C00A400B500BA00D000E700F0036908B5 | ||
25 | :10018000E9095C0CB612BC19D81B201C341C361CA7 | ||
26 | :10019000421D0844384491440A45484689486854F9 | ||
27 | :1001A0008355835931E402E607F008F00BF00CF0B8 | ||
28 | :1001B0004BF404F805F802FA03FA04FC05FC070006 | ||
29 | :1001C000A800AA00B900E000E500220126016001B4 | ||
30 | :1001D0007A018201C801CA0186026A031805B207C2 | ||
31 | :1001E0006808100D06100A100E1012106010ED10A5 | ||
32 | :1001F000F310061210121E120C130E131013FE9C95 | ||
33 | :10020000F03505FEEC0EFF100000E9FE341F00E89B | ||
34 | :10021000FE8801FF030000FE9315FE0F05FF380066 | ||
35 | :1002200000FE572400FE4C0065FF0400001AFF0981 | ||
36 | :100230000000FF080101FF08FFFFFF270000FF107B | ||
37 | :10024000FFFFFF130000FE7856FE3412FF2100006E | ||
38 | :10025000FE04F7E8377D0D01FE4A11FE04F7E87D44 | ||
39 | :100260000D5137FE3DF0FE0C02FE20F0BCFE91F079 | ||
40 | :10027000FEF801FE90F0FEF801FE8FF0BC03674D22 | ||
41 | :1002800005FE080F01FE780FFEDD1205FE0E03FECF | ||
42 | :10029000281C03FEA600FED1123E22FEA600ACFEE4 | ||
43 | :1002A00048F0FE9002FE49F0FEAA02FE4AF0FEC8A7 | ||
44 | :1002B00002FE46F0FE5A02FE47F0FE6002FE43F0E8 | ||
45 | :1002C000FE4E02FE44F0FE5202FE45F0FE56021CB7 | ||
46 | :1002D0000DA21C0722B70535FE001CFEF110FE0220 | ||
47 | :1002E0001CF5FE1E1CFEE910015FFEE710FE06FC79 | ||
48 | :1002F000DE0A8101A305351F9547B801FEE4110A06 | ||
49 | :1003000081015CFEBD100A81015CFEAD10FE161C71 | ||
50 | :10031000FE581C1C0722B7372A35FE3DF0FE0C02A2 | ||
51 | :100320002BFE9E02FE5A1CFE121CFE141C1FFE30E9 | ||
52 | :100330000047B801FED4111C0722B705E9212C099A | ||
53 | :100340001A31FE69101C0722B7FE04EC2C6001FE76 | ||
54 | :100350001E1E202CFE05F6DE01FE621B010C614A0A | ||
55 | :100360004415565101FE9E1E01FE961A05350A5788 | ||
56 | :1003700001180900360185FE1810FE41580ABA011D | ||
57 | :1003800018FEC8547BFE1C0301FE961A0535376023 | ||
58 | :10039000FE02E830FEBF57FE9E43FE7757FE27F071 | ||
59 | :1003A000FEE401FE074BFE20F0BCFE401C2AEBFEE3 | ||
60 | :1003B00026F0FE6603FEA0F0FE5403FE11F0BCFE24 | ||
61 | :1003C000EF10FE9FF0FE7403FE461C19FE1100059F | ||
62 | :1003D0007037FE481CFE461C010C0628FE1813262A | ||
63 | :1003E00021B9C720B90A570118C78901FEC81A15D3 | ||
64 | :1003F000E12AEBFE01F0EBFE82F0FEA403FE9C324C | ||
65 | :1004000015FEE4002FFEB6032A3C16FEC60301418A | ||
66 | :10041000FE06F0FED603AFA0FE0AF0FEA2070529F5 | ||
67 | :1004200003811E1BFE24051F6301428FFE7002051F | ||
68 | :10043000EAFE461C377D1DFE671BFEBF57FE775741 | ||
69 | :10044000FE481C7501A6860A57011809001BEC0A14 | ||
70 | :10045000E101187750408D3003811EF81F6301427F | ||
71 | :100460008FFE700205EAD799D89C2A292FFE4E04E8 | ||
72 | :1004700016FE4A047EFEA000FE9B57FE541232FF79 | ||
73 | :10048000020010010816FE02053201081629272570 | ||
74 | :10049000EEFE4C44FE581250FE44481334FE4C54B9 | ||
75 | :1004A0007BEC608D3001FE4E1EFE4847FE7C130142 | ||
76 | :1004B0000C0628FE32130143099BFE6813FE26102A | ||
77 | :1004C0001334FE4C547BEC01FE4E1EFE4847FE5496 | ||
78 | :1004D00013010C0628A50143099BFE4013010C06DD | ||
79 | :1004E00028F91F7F010C06074D1FFE0D0001428FEA | ||
80 | :1004F000FEA40E05293215FEE6000FFE1C9004FE38 | ||
81 | :100500009C933A0B0E8B021F7F01420535FE425B26 | ||
82 | :100510007D1DFE4659FEBF57FE77570FFE878004AC | ||
83 | :10052000FE8783FEC9470B0ED065010C060DFE98B1 | ||
84 | :10053000130FFE208004FEA083330B0E091DFE84E2 | ||
85 | :100540001201380607FE701303FEA2001E1BFEDA1E | ||
86 | :1005500005D0540138060DFE581303FEA0001EFE00 | ||
87 | :1005600050125EFF0200102FFE90052A3CCCFF02C5 | ||
88 | :1005700000102FFE9E0517FEF40515FEE300260170 | ||
89 | :1005800038FE4AF0FEC005FE49F0FEBA05712EFEA7 | ||
90 | :100590002100F12EFE2200A22E4AFE0948FF020091 | ||
91 | :1005A000102FFED00517FEF405FEE208013806FE06 | ||
92 | :1005B0001C004D01A72E0720E447FE2701010C0671 | ||
93 | :1005C00028FE24123E01841F7F010C06074D1FFEEA | ||
94 | :1005D0000D0001428FFEA40E052903E61EFECA137C | ||
95 | :1005E00003B61EFE401203661EFE38133E0184173A | ||
96 | :1005F000FE72060A0701380624FE02124F01FE565B | ||
97 | :100600001916FE68061582014115E203668A106616 | ||
98 | :10061000039A1EFE701203551EFE681301C60912CE | ||
99 | :1006200048FE92062E1201FEAC1DFE434862801366 | ||
100 | :1006300058FF02005752AD233F4E62493E018417D6 | ||
101 | :10064000FEEA0601380612F7450A9501FE841916DE | ||
102 | :10065000FEE0061582014115E203558A10551C077C | ||
103 | :100660000184FEAE10036F1EFE9E133E0184039AAA | ||
104 | :100670001EFE1A1201380612FC01C601FEAC1DFE58 | ||
105 | :1006800043486280F0450A9503B61EF801380624F7 | ||
106 | :1006900036FE02F60771788C004D62493E2D934E6E | ||
107 | :1006A000D00D17FE9A0701FEC01916FE90072620EE | ||
108 | :1006B0009E1582014115E2219E0907FB03E6FE58C3 | ||
109 | :1006C0005710E605FE2A06036F8A106F1C07018487 | ||
110 | :1006D000FE9C325F7501A68615FEE2002FED2A3CD6 | ||
111 | :1006E000FE0AF0FECE07AEFE9608FE06F0FE9E085D | ||
112 | :1006F000AFA00529010C060DFE2E12141D010814D1 | ||
113 | :100700000001081400010814000108FE99A4010862 | ||
114 | :10071000140005FEC60901760612FE3A12010C0607 | ||
115 | :1007200012FE301314FE1B0001081400010814000F | ||
116 | :1007300001081400010814070108140005EF7C4AA1 | ||
117 | :10074000784F0FFE9A8104FE9A83FECB470B0E2D45 | ||
118 | :100750002848FE6C080A28FE096FCAFECA45FE3208 | ||
119 | :100760001253634E7C972FFE7E082A3CFE0AF0FE51 | ||
120 | :100770006C08AFA0AEFE96080529014105ED1424D2 | ||
121 | :1007800005EDFE9CF79F01FEAE1EFE185801FEBE51 | ||
122 | :100790001EFE9958FE7818FEF9188EFE1609106A8A | ||
123 | :1007A000226B010C615444212C091AF87701FE7E5A | ||
124 | :1007B0001E472C7A30F0FE83E7FE3F0071FE0340B7 | ||
125 | :1007C000010C61654401C2C8FE1F40206E01FE6A33 | ||
126 | :1007D00016FE0850FE8A50FE4451FEC651FE10100F | ||
127 | :1007E00001FECE1E01FEDE1E1068226901FEEE1E15 | ||
128 | :1007F00001FEFE1EFE4050FEC250104B224CFE8AEF | ||
129 | :1008000010010C0654FE501201FEAE1E01FEBE1E6B | ||
130 | :10081000106A226B010C06654E01C20FFE1F800498 | ||
131 | :10082000FE9F83330B0E206E0FFE449004FEC49394 | ||
132 | :100830003A0BFEC69004FEC693790B0E106C226D27 | ||
133 | :1008400001FECE1E01FEDE1E106822690FFE4090E2 | ||
134 | :1008500004FEC0933A0BFEC29004FEC293790B0EC5 | ||
135 | :10086000104B224C10642234010C6124443713FED7 | ||
136 | :100870004E112FFEDE09FE9EF0FEF209FE01481B1E | ||
137 | :100880003C3788F5D4FE1E0AD5FE420AD2FE1E0A67 | ||
138 | :10089000D3FE420AAEFE120AFE06F0FE180AAFA010 | ||
139 | :1008A00005290141FEC1101424FEC110017606077E | ||
140 | :1008B000FE14120176060D5D010C060DFE7412FE8B | ||
141 | :1008C0002E1C05FE1A0C017606075D0176060D4109 | ||
142 | :1008D000FE2C1CFEAAF0FECE0AFEACF0FE660AFE5E | ||
143 | :1008E0009210C4F6FEADF0FE720A05FE1A0CC5FEAB | ||
144 | :1008F000E710FE2BF0BFFE6B1823FE00FEFE1C125D | ||
145 | :10090000ACFED2F0BFFE7618231D1BBF03E3230706 | ||
146 | :100910001BBFD45BD55BD25BD35BC4C5FEA910758E | ||
147 | :100920005E321F7F014219FE3500FE01F0701998FA | ||
148 | :100930000570FE741823FE00F81B5B7D1201FE7823 | ||
149 | :100940000F4D01FE961A2130777D1D055B010C06C7 | ||
150 | :100950000D2BFEE20B010C0654FEA612010C062420 | ||
151 | :10096000FE8813216EC701FE1E1F0FFE838004FE4A | ||
152 | :100970008383FEC9470B0EFEC844FE42130FFE04DC | ||
153 | :100980009104FE8493FECA570BFE869104FE869363 | ||
154 | :10099000FECB570B0E7A30FE4059FEC1598E4003F4 | ||
155 | :1009A0006A3B6B10972298D96ADA6B01C2C87A3019 | ||
156 | :1009B000206EDB64DC34916C7E6DFE4455FEE555A3 | ||
157 | :1009C000FE04FA64FE05FA3401FE6A16A3261097A7 | ||
158 | :1009D0001098916C7E6DFE1410010C06241B409142 | ||
159 | :1009E0004B7E4C010C06FEF7004403683B69FE1089 | ||
160 | :1009F00058FE9158FE1459FE9559055B010C0624CA | ||
161 | :100A00001B40010C06FEF700447801FE8E1E4F0FBE | ||
162 | :100A1000FE109004FE90933A0BFE929004FE929387 | ||
163 | :100A2000790B0EFEBD10014309BB1BFE6E0A15BB00 | ||
164 | :100A3000010C060DFE1413034B3B4C8EFE6E0AFE9A | ||
165 | :100A40000C58FE8D58055B263E0FFE198004FE995A | ||
166 | :100A500083330B0EFEE510010C060DFE1A12FE6C20 | ||
167 | :100A600019FE1941FE6B18ACFED1F0EF1F92014246 | ||
168 | :100A700019FE4400FE9010FE6C19D94BFEED19DAF8 | ||
169 | :100A80004CFE0C51FE8E51FE6B1823FE00FF31FE12 | ||
170 | :100A90007610ACFED2F0FEBA0CFE7618231D5D0374 | ||
171 | :100AA000E32307FE081319FE16000570FED1F0FEC1 | ||
172 | :100AB000CC0C1F92014219FE17005CFECEF0FED254 | ||
173 | :100AC0000CFE3E10FECDF0FEDE0C19FE220005707D | ||
174 | :100AD000FECBF0FEEA0C19FE24000570FED0F0FEFD | ||
175 | :100AE000F40C1994FE1C10FECFF0FEFE0C194AF314 | ||
176 | :100AF000FECCF0EF017606244D19FE12003713FEEE | ||
177 | :100B00004E112FFE160DFE9EF0FE2A0DFE01481B13 | ||
178 | :100B10003C3788F5D429D529D229D32937FE9C32F0 | ||
179 | :100B20002FFE3E0D2A3CAEFE620DAFA0D49FD59F96 | ||
180 | :100B3000D29FD39F05290141FED31015FEE800C4C2 | ||
181 | :100B4000C575D799D89CFE89F0292725BED799D895 | ||
182 | :100B50009C2FFE8C0D16292725BDFE0148A419FEE9 | ||
183 | :100B6000420005709007FE81491BFE640E010C06D1 | ||
184 | :100B70000DFE441319002D0DFE54122DFE28002BDE | ||
185 | :100B8000FEDA0E0A57011809003646FE2800FEFA62 | ||
186 | :100B90001001FEF41C01FE001D0ABA01FE581040AF | ||
187 | :100BA00015560185053519FE44002D0DF7460DFE3D | ||
188 | :100BB000CC1001A7460DFEC21001A70FFE1982043A | ||
189 | :100BC000FE9983FECC470B0EFE3446A5460D19FE5A | ||
190 | :100BD0004300FEA210010C610D4401FEF41C01FE55 | ||
191 | :100BE000001D40155601857D0D405101FE9E1E05DC | ||
192 | :100BF000FE3A03010C060D5D460D1900FE62100160 | ||
193 | :100C0000760612FE5C12010C0612FE5213FE1C1C2C | ||
194 | :100C1000FE9DF0FE8E0EFE1C1CFE9DF0FE940E014D | ||
195 | :100C20000C611244FE9F1019FE1500FE04E60D4FE4 | ||
196 | :100C3000FE2E1019FE1300FE101019FE4700F119C8 | ||
197 | :100C4000FE4100A219FE240086C4C57503811E2B37 | ||
198 | :100C5000EA4FFE04E612FE9D41FE1C424001F405EF | ||
199 | :100C600035FE121C1F0D47B5C31FFE310047B801EA | ||
200 | :100C7000FED41105E951FE06ECE0FE0E474628FEC3 | ||
201 | :100C8000CE453151FE06EAE0FE474B45FE7557035F | ||
202 | :100C900067FE9856FE38120A5A0118FE4448600151 | ||
203 | :100CA0000C0628FE18130A5701183EFE41580ABACE | ||
204 | :100CB000FEFA14FE4954B0FE5E0F05FE3A030A67C1 | ||
205 | :100CC000FEE014FE0E474628FECE453151FECE47CB | ||
206 | :100CD000FEAD130535212C091AFE98122620962008 | ||
207 | :100CE000E7FE081CFE7C19FEFD19FE0A1C03E5FE4A | ||
208 | :100CF0004855A53BFE6201FEC95531FE741001FE48 | ||
209 | :100D0000F01A03FE38013BFE3A018EFE1E10FE0271 | ||
210 | :100D1000ECE7530036FE04EC2C60FE05F6FE3401D1 | ||
211 | :100D200001FE621B01FECE1EB211FE1813CAFE02A6 | ||
212 | :100D3000EAE75392FEC3131F1247B5C3FE2A1003FE | ||
213 | :100D4000FE380123FEF0FF10E503FE3A0110FE62BB | ||
214 | :100D50000101FE1E1E202C155601FE9E1E130702C9 | ||
215 | :100D600026022196C720960992FE79131F1D47B5CA | ||
216 | :100D7000C3FEE110CFFE03DCFE7357FE805D02CFA1 | ||
217 | :100D8000FE03DCFE5B57FE805D02FE0357CF26FEAE | ||
218 | :100D900000CC02FE0357CF8902010C064AFE4E1317 | ||
219 | :100DA0000FFE1C8004FE9C83330B0E0907FE3A13D2 | ||
220 | :100DB0000FFE1E8004FE9E83330B0EFE2A130FFED1 | ||
221 | :100DC0001D8004FE9D83FEF9130EFE1C1301FEEE32 | ||
222 | :100DD0001EACFE141301FEFE1EFE8158FA01FE0E2B | ||
223 | :100DE0001FFE30F40DFE3C50A201FE921B01430990 | ||
224 | :100DF00056FB01FEC81A010C0628A401FEF41C01D2 | ||
225 | :100E0000FE001D15FEE900010C064AFE4E1301FE10 | ||
226 | :100E1000221BFE1E1C0FFE149004FE94933A0BFE40 | ||
227 | :100E2000969004FE9693790B0E10FE640122FE66E6 | ||
228 | :100E300001010C0665F90FFE038004FE8383330B6A | ||
229 | :100E40000E77FE01EC2CFE8040202C7A3015DF401E | ||
230 | :100E5000212CFE00408D2C02FE081C03FEAC00FE7F | ||
231 | :100E6000065803FEAE00FE075803FEB000FE085809 | ||
232 | :100E700003FEB200FE0958FE0A1C2E4920E026108F | ||
233 | :100E8000661055106F1357524F1C28FE904DFE915F | ||
234 | :100E9000542BFE8811461A135A521C4AFE904DFEDE | ||
235 | :100EA00091542BFE9E112E1A202C903460212CFE82 | ||
236 | :100EB00000408D2C15DFFE1456FED6F0FEB211FE5A | ||
237 | :100EC000121C75FE141CFE101CFE181C0251FE0C98 | ||
238 | :100ED00014FE0E47FE07E628FECE47FEF51302017C | ||
239 | :100EE000A7903460FE0680FE4847FE4213FE028053 | ||
240 | :100EF0000956FE34130A5A0118CBFE3612FE414839 | ||
241 | :100F0000FE454801FEB216FE00CCCBFEF3133F892E | ||
242 | :100F1000091AA50A9D0118FE805C0185F2099BA4AF | ||
243 | :100F2000FE1456FED6F0FEEC1102FE445877FE0188 | ||
244 | :100F3000ECB8FE9E40FE9DE700FE9CE7128D30015E | ||
245 | :100F4000F4FEDD1037D799D89C2725EE0912FE480C | ||
246 | :100F500012090DFE5612091DFE301209DD1BFEC4DA | ||
247 | :100F60001309FE23001BFED01309071BFE341409CE | ||
248 | :100F700024FE121209001B291FDD0142A1320108C3 | ||
249 | :100F8000AE410232FE62080AE101FE5810159B05CF | ||
250 | :100F90003532014309BBFED713914B7E4C8EFE8048 | ||
251 | :100FA00013010C0654FE7212DB64DC34FE4455FE61 | ||
252 | :100FB000E555B0FE4A13216EFE261303973B988E2B | ||
253 | :100FC000FEB60E106A226B261097109801C22E49A9 | ||
254 | :100FD00088206E01FE6A16DB64DC34FE0455FEA533 | ||
255 | :100FE00055FE04FA64FE05FA34FE8F10036C3B6D67 | ||
256 | :100FF000FE4056FEE156106C226D71DB64DC34FE5F | ||
257 | :101000004455FEE55503683B69FE0056FEA15610A7 | ||
258 | :10101000682269010C0654F9216EFE1F40036A3BE9 | ||
259 | :101020006BFE2C50FEAE50036C3B6DFE4450FEC672 | ||
260 | :101030005003683B69FE0850FE8A50034B3B4CFE50 | ||
261 | :101040004050FEC25005732E07209E0572320108E3 | ||
262 | :10105000163D2725EE09072B3D014309BB2B7201E5 | ||
263 | :10106000A6233F1B3D010C060DFE1E13914B7E4C2B | ||
264 | :10107000FE0A5531FE8B55D94BDA4CFE0C51FE8ED3 | ||
265 | :1010800051057201FE8E1ECAFE1941057232010819 | ||
266 | :101090002A3C16C02725BE2D1DC02D0D832D7F1B7C | ||
267 | :1010A000FE6615053D01082A3C16C02725BD091D11 | ||
268 | :1010B0002B3D010816C02725FEE809FEC249500352 | ||
269 | :1010C000B61E830138062431A1FEBB452D00A4467F | ||
270 | :1010D00007903F01FEF81501A686FE4B45FE201342 | ||
271 | :1010E00001430982FE1613039A1E5D03551E315EED | ||
272 | :1010F0000572FEC05D01A7FE031703668A10665ED7 | ||
273 | :10110000320108177301FE5619057301082A3C16AF | ||
274 | :101110003D2725BD09072B3D01FEBE16FE4258FEA8 | ||
275 | :10112000E81401A686FE4AF40D1B3DFE4AF407FEB4 | ||
276 | :101130000E12014309824E057203558A10555E3224 | ||
277 | :101140000108177301FE8419057301082A3C163D36 | ||
278 | :101150002725BD09122B3D01FEE8178BFEAA14FEC0 | ||
279 | :10116000B61486A8B20D1B3DB207FE0E120143094C | ||
280 | :10117000824E0572036F8A106F5E32010817730189 | ||
281 | :10118000FEC019057313072FFECC1517FEE2155F7D | ||
282 | :10119000CC0108265F028FFEDE152AFEDE1516FE44 | ||
283 | :1011A000CC155E320108FED5101358FF02005752CD | ||
284 | :1011B000AD23FEFF7FFE3056FE005C021358FF0297 | ||
285 | :1011C000005752AD233FFE3056FE005C021358FF1D | ||
286 | :1011D00002005752AD021358FF02005752FE005E44 | ||
287 | :1011E000021358FF02005752ADFE0B58020A660167 | ||
288 | :1011F0005C0A55015C0A6F015C0201FE1E1F231A86 | ||
289 | :10120000FF030054FE00F424520FFE007C04FE078E | ||
290 | :101210007C3A0B0EFE0071FEF918FE7A19FEFB19DE | ||
291 | :10122000FE1AF700FE1BF7007A3010682269D96CAD | ||
292 | :10123000DA6D02FE6208FE824AFEE11AFE835A77E8 | ||
293 | :101240000201C6FE42484F5045010816FEE017272E | ||
294 | :1012500025BE010816FEE0172725FEE80AFEC15943 | ||
295 | :10126000039A1EFEDA1201380612FED0132653121C | ||
296 | :1012700048FE0817D1125312FE1E132DB47BFE2612 | ||
297 | :10128000174D13071CB49004FE7810FF028355F12C | ||
298 | :10129000FF028355531DFE1213D6FE3000B0FE80B0 | ||
299 | :1012A000171C631307FE5610530DFE1613D6FE646B | ||
300 | :1012B00000B0FE80170AFE64001C941307FE28107D | ||
301 | :1012C0005307FE6013D6FEC800B0FE80170AFEC8A2 | ||
302 | :1012D000001C95130771D6FE900148FE8C1745F34C | ||
303 | :1012E000FE43F496FE56F0FE9E17FE04F458FE43AD | ||
304 | :1012F000F494F68B01FE2416233FFCA88C4948FE8B | ||
305 | :10130000DA176249FE1C10A88C8048FEDA1762804A | ||
306 | :10131000715026FE4DF400F7451307FEB456FEC388 | ||
307 | :10132000580250130D02503E784F45010816A92768 | ||
308 | :1013300025BEFE03EAFE7E01010816A92725FEE967 | ||
309 | :101340000A010816A92725FEE90AFE05EAFE7F0123 | ||
310 | :10135000010816A92725FE6909FE02EAFE8001019F | ||
311 | :101360000816A92725FEE80847FE810103B61E835B | ||
312 | :101370000138062431A278F2530736FE34F43FA137 | ||
313 | :1013800078039A1E830138061231F04F45FE901003 | ||
314 | :10139000FE405A233FFB8C4948FEAA186249718CD3 | ||
315 | :1013A0008048FEAA186280FEB456FE405D01C60168 | ||
316 | :1013B000FEAC1DFE0217FEC845FE5AF0FEC018FE28 | ||
317 | :1013C00043482D9336FE34F4FE0011FE40102DB438 | ||
318 | :1013D00036FE34F404FE34102DFE0B00364663FE58 | ||
319 | :1013E0002810FEC049FF020054B2FE900148FEFAE8 | ||
320 | :1013F0001845FE1CF43FF3FE40F496FE56F0FE0C3A | ||
321 | :1014000019FE04F458FE40F494F63E2D934ED00D90 | ||
322 | :1014100021FE7F01FEC846FE24138C005D2621FEBE | ||
323 | :101420007E01FEC845FE141321FE8001FE4845FAE8 | ||
324 | :1014300021FE8101FEC8444E260213070278455062 | ||
325 | :10144000130D021407010817FE8219140D01081765 | ||
326 | :10145000FE8219141D010817FE82195FFE894901D9 | ||
327 | :1014600008021407010817C1141D010817C1140749 | ||
328 | :10147000010817C1FE8949010817C15FFE894A01A9 | ||
329 | :1014800008025002140701081774147F010817742A | ||
330 | :10149000141201081774FE89490108177414000119 | ||
331 | :1014A000081774FE894A01081774FE0949010817D4 | ||
332 | :1014B000745FCC01080221E40907FE4C13C820E444 | ||
333 | :1014C000FE49F4004D5FA15EFE01ECFE2701CCFF5A | ||
334 | :1014D0000200102FFE3E1A014309FEE300FE221314 | ||
335 | :1014E00016FE641A26209E0141219E09075D010C0B | ||
336 | :1014F000610744020A5A0118FE0040AA091AFE12A6 | ||
337 | :10150000130A9D0118AA0A6701A3020A9D0118AADD | ||
338 | :10151000FE80E71A091A5DFE455801FEB216AA02BE | ||
339 | :101520000A5A0118AA0A6701A3020A5A011801FE01 | ||
340 | :101530007E1EFE804CFE49E41AFE12130A9D01181D | ||
341 | :10154000FE804C0A67015C021C1A877CE5FE18DFEE | ||
342 | :10155000FE19DEFE241CFE1DF728B1FE041B01FE51 | ||
343 | :101560002A1CFAB3287CFE2C01FE2F1902C92BFE7F | ||
344 | :10157000F41AFEFA101C1A8703FE6401FE00F4241C | ||
345 | :10158000FE185803FE6601FE1958B32401FE0E1F13 | ||
346 | :10159000FE30F407FE3C507CFE3800FE0F79FE1C46 | ||
347 | :1015A000F724B1FE501BFED4143102C92BFE261BBA | ||
348 | :1015B000FEBA101C1A87FE835AFE18DFFE19DEFEE3 | ||
349 | :1015C0001DF754B1FE721BFEB214FCB3547C12FE24 | ||
350 | :1015D000AF19FE98E70002C92BFE661BFE8A101C9D | ||
351 | :1015E0001A878B0FFE309004FEB0933A0BFE18580A | ||
352 | :1015F000FE329004FEB2933A0BFE19580EA8B34A7D | ||
353 | :101600007C12FE0F79FE1CF74AB1FEC61BFE5E146B | ||
354 | :101610003102C92BFE961B5CFE02F61A87FE18FEED | ||
355 | :101620006AFE19FE6B01FE1E1FFE1DF765B1FEEE80 | ||
356 | :101630001BFE3614FE1C13B3653EFE8358FEAF1925 | ||
357 | :10164000FE80E71AFE81E71A15FEDD007A30027A85 | ||
358 | :1016500030FE12452BFEDC1B1F0747B5C30535FEC8 | ||
359 | :1016600039F0752602FE7E18231D361311028703FA | ||
360 | :10167000E32307FEEF12FEE110903460FE028009C2 | ||
361 | :1016800056FE3C13FE8214FE421351FE06830A5A94 | ||
362 | :101690000118CBFE3E12FE4148FE454801FEB2163F | ||
363 | :1016A000FE00CCCBFEF3133F89091AA50A9D011851 | ||
364 | :1016B000FE804C0185FE1610099B4EFE4014FE2450 | ||
365 | :1016C00012FE1456FED6F0FE521C1C0D02FE9CE7C4 | ||
366 | :1016D0000D19FE1500408D3001F41C070251FE0665 | ||
367 | :1016E00083FE1880612844155601851C0702FE38C8 | ||
368 | :1016F00090FEBA9091DE7EDFFE485531FEC955025C | ||
369 | :1017000021B98820B9020ABA0118FE41480A5701D6 | ||
370 | :1017100018FE49441BFE1E1D8889020A5A01180939 | ||
371 | :101720001AA40A6701A30A570118888902FE4EE429 | ||
372 | :101730001D7BFE521D03FE9000FE3A45FE2C10FE5E | ||
373 | :101740004EE4DD7BFE641D03FE9200D112FE1A10F2 | ||
374 | :10175000FE4EE4FE0B007BFE761D03FE9400D124BA | ||
375 | :10176000FE081003FE9600D163FE4E4583CAFF04B7 | ||
376 | :101770006854FEF1102349FE081CFE6719FE0A1C7E | ||
377 | :10178000FE1AF4FE000483B21D48FEAA1D131D02BA | ||
378 | :101790000992FE5AF0FEBA1D2E93FE34100912FE75 | ||
379 | :1017A0005AF0FEC81D2EB4FE2610091D362E63FE0B | ||
380 | :1017B0001A10090D362E94F20907362E95A1C8028B | ||
381 | :1017C0001F930142FE04FE99039C8B022AFE1C1EFD | ||
382 | :1017D000FE14F0082FFE0C1E2AFE1C1E8FFE1C1E7F | ||
383 | :1017E000FE82F0FE101E020F3F04FE8083330B0EBC | ||
384 | :1017F000020FFE188004FE9883330B0E020FFE02C8 | ||
385 | :101800008004FE8283330B0E020FFE068004FE86E8 | ||
386 | :1018100083330B0E020FFE1B8004FE9B83330B0EE3 | ||
387 | :10182000020FFE048004FE8483330B0E020FFE8041 | ||
388 | :101830008004FE8083FEC9470B0E020FFE1981044F | ||
389 | :10184000FE9983FECA470B0E020FFE068304FE8636 | ||
390 | :1018500083FECE470B0E020FFE2C9004FEAC933A93 | ||
391 | :101860000B0E020FFEAE9004FEAE93790B0E020F2C | ||
392 | :10187000FE089004FE88933A0B0E020FFE8A900435 | ||
393 | :10188000FE8A93790B0E020FFE0C9004FE8C933AA5 | ||
394 | :101890000B0E020FFE8E9004FE8E93790B0E020F3C | ||
395 | :1018A000FE3C9004FEBC933A0B0E028B0FFE0380AD | ||
396 | :0E18B00004FE8383330B770EA802FF66000050 | ||
397 | :00000001FF | ||
398 | /* Microcode buffer is kept after initialization for error recovery. */ | ||
diff --git a/firmware/advansys/mcode.bin.ihex b/firmware/advansys/mcode.bin.ihex new file mode 100644 index 000000000000..cd160d938667 --- /dev/null +++ b/firmware/advansys/mcode.bin.ihex | |||
@@ -0,0 +1,147 @@ | |||
1 | :100000003F452C01010301190F0000000000000012 | ||
2 | :10001000000000000F0F0F0F0F0F0F0F0000000068 | ||
3 | :1000200000000000000000000000000000000000D0 | ||
4 | :1000300000000000000000000000000000000000C0 | ||
5 | :100040000000000000000000C3120D0501000000C8 | ||
6 | :1000500000FF000000000000FF80FFFF0100000023 | ||
7 | :10006000000000000000002300000000000700FF67 | ||
8 | :1000700000000000FFFFFF00000000000000E48817 | ||
9 | :100080000000000080734804360000A2C2008073A4 | ||
10 | :1000900003233640B600360005D60CD212DA00A291 | ||
11 | :1000A000C20092801E985000F5004898DF23366009 | ||
12 | :1000B000B60092804F00F5004898EF233660B600F6 | ||
13 | :1000C000928080629280004615EE13EA020109D800 | ||
14 | :1000D000CD044D0000A3D600A6977F2304618401C0 | ||
15 | :1000E000E684D2C18073CD044D0000A3DA01A69747 | ||
16 | :1000F000C681C28880738077000101A1FE004F0095 | ||
17 | :10010000849707A6080100330300C288030301DEB9 | ||
18 | :10011000C288CE006960CE0002034A6000A2780166 | ||
19 | :10012000806307A62401788103038063E20007A6A9 | ||
20 | :10013000340100330400C2880307020104CA0D23FE | ||
21 | :1001400068984D04048505D80D236898CD041523BF | ||
22 | :10015000F888FB23026182018063020306A3620127 | ||
23 | :1001600000330A00C2884E0007A36E0100330B0063 | ||
24 | :10017000C288CD04362D00331A00C288500488810D | ||
25 | :1001800006AB820188814E0007A39201500000A3B4 | ||
26 | :100190003C0100057C814697020105C60423A001AD | ||
27 | :1001A0001523A101BE81FD23026182010ADA4A0002 | ||
28 | :1001B000066100A0B4018063CD04362D00331B001E | ||
29 | :1001C000C28806236898CD04E684060100A2D40103 | ||
30 | :1001D000576000A0DA01E6848023A001E6848073E2 | ||
31 | :1001E0004B00066100A2000204010CDE020103CCF8 | ||
32 | :1001F0004F008497FC810823024182014F006297DF | ||
33 | :1002000048048480F0970046560003C00123E800AC | ||
34 | :1002100081730629034206E203EE6BEB1123F88893 | ||
35 | :100220000498F0808073807707A42A027C9506A644 | ||
36 | :10023000340203A64C044682040103D8B4986A969B | ||
37 | :100240004682FE95806783038063B62D02A66C020A | ||
38 | :1002500007A65A0206A65E0203A66202C2887C9521 | ||
39 | :100260004882609648820423A0011423A1013C84A3 | ||
40 | :1002700004010CDCE0232561EF0014014F04A80108 | ||
41 | :100280006F00A5010323A40106239C01242B1C015C | ||
42 | :1002900002A6AA0207A65A0206A65E0203A6200428 | ||
43 | :1002A00001A6B40200A6B40200331200C288000EF8 | ||
44 | :1002B0008063004300A08C024D0404010BDCE723A3 | ||
45 | :1002C00004618401103112351401EC006C38003FD8 | ||
46 | :1002D0000000EA821823046118A0E2020401A2C807 | ||
47 | :1002E00000331F00C28808310A350C390E3D7E9854 | ||
48 | :1002F000B62D01A6140300A6140307A60C0306A638 | ||
49 | :10030000100303A6200402A66C0200333300C28847 | ||
50 | :100310007C95EE826096EE82829880427E9864E4BC | ||
51 | :1003200004012DC83105070100A2540300438701D1 | ||
52 | :10033000050586987E9800A6160307A64C0303A61B | ||
53 | :100340003C0406A6500301A6160300332500C2880C | ||
54 | :100350007C95328360963283040110CE07C8050570 | ||
55 | :10036000EB0400330020C020816272830001050588 | ||
56 | :10037000FFA27A03B1010823B2012E8305051501FE | ||
57 | :1003800000A29A03EC006E0095016C38003F00005B | ||
58 | :1003900001A6960300A69603108480427E9801A6CB | ||
59 | :1003A000A40300A6BC031084A898804201A6A4035D | ||
60 | :1003B00007A6B203D4837C95A88300332F00C2889C | ||
61 | :1003C000A898804200A6BC0307A6CA03D4837C95E4 | ||
62 | :1003D000C08300332600C288382B80328036042345 | ||
63 | :1003E000A0011223A101108407F006A4F403806B7E | ||
64 | :1003F000806705238303806303A60E0407A6060413 | ||
65 | :1004000006A60A0400331700C2887C95F483609620 | ||
66 | :10041000F483208407F006A42004806B8067052302 | ||
67 | :1004200083038063B62D03A63C0407A6340406A606 | ||
68 | :10043000380400333000C2887C9520846096208484 | ||
69 | :100440001D0106CC00330084C0200023EA00816235 | ||
70 | :10045000A20D806307A65A0400331800C288030364 | ||
71 | :100460008063A30107A46404230100A286040AA0F8 | ||
72 | :100470007604E00000331D00C2880BA08204E00077 | ||
73 | :1004800000331E00C2884223F888002322A3E6041A | ||
74 | :10049000082322A3A204282322A3AE04022322A31A | ||
75 | :1004A000C4044223F8884A00066100A0AE04452334 | ||
76 | :1004B000F888049800A2C004B49800330082C020D9 | ||
77 | :1004C0008162E8814723F88804010BDE0498B49820 | ||
78 | :1004D00000330081C0208162140100A00002432388 | ||
79 | :1004E000F8880423A0014423A10180734D0003A3D5 | ||
80 | :1004F000F40400332700C288040104DC0223A201B3 | ||
81 | :100500000423A001049826954B00F6004F044F00E9 | ||
82 | :1005100000A3220500057600066100A21C050A85DD | ||
83 | :100520004697CD04248548048480020103DA8023A1 | ||
84 | :10053000820134850223A0014A00066100A2400521 | ||
85 | :100540001D0104D6FF2386414B60CB00FF238001B1 | ||
86 | :1005500049008101040102C830018001F704030150 | ||
87 | :1005600049048001C90000050001FFA0600577046F | ||
88 | :100570000123EA005D00FEC700620023EA00006379 | ||
89 | :1005800007A4F805030302A08E05F48500332D00AF | ||
90 | :10059000C28804A0B80580630023DF004A0006611A | ||
91 | :1005A00000A2A4051D0106D60223024182015000CB | ||
92 | :1005B00062970485042302418201048508A0BE05D8 | ||
93 | :1005C000F48503A0C405F48501A0CE0588008063EE | ||
94 | :1005D000CC8607A0EE055F00002BDF0800A2E60531 | ||
95 | :1005E0008067806301A27A067C8506236898482389 | ||
96 | :1005F000F88807238000068780637C850023DF005E | ||
97 | :1006000000634A00066100A236061D0116D4C0230D | ||
98 | :1006100007418303806306A61C0600333700C288A7 | ||
99 | :100620001D0101D620236360830380630223DF0062 | ||
100 | :1006300007A67C05EF046F0000634B000641CB006A | ||
101 | :100640005200066100A24E061D0103CAC0230741E5 | ||
102 | :1006500000631D0104CC00330083C020816280232D | ||
103 | :1006600007410063806708238303806300630123DD | ||
104 | :10067000DF0006A6840607A67C058067806300333A | ||
105 | :100680000040C020816200630000FE958303806308 | ||
106 | :1006900006A6940607A67C05000001A01407002BFF | ||
107 | :1006A000400E8063010006A6AA0607A67C05400E40 | ||
108 | :1006B0008063004300A0A20606A6BC0607A67C0530 | ||
109 | :1006C0008067400E806307A67C050023DF0000637F | ||
110 | :1006D00007A6D60600332A00C28803038063890078 | ||
111 | :1006E0000A2B07A6E80600332900C288004300A2AF | ||
112 | :1006F000F406C00E8063DE86C00E00330080C0208A | ||
113 | :100700008162040102DA80637C85807B806306A6B7 | ||
114 | :100710008C0600332C00C2880CA22E07FE958303A2 | ||
115 | :10072000806306A62C0707A67C0500333D00C2881F | ||
116 | :1007300000008067830380630CA0440707A67C0544 | ||
117 | :10074000BF2304618401E6840063F0040101F10029 | ||
118 | :100750000001F20001058001720471008101700442 | ||
119 | :10076000800581050063F004F20072040101F100CC | ||
120 | :1007700070008101700471008101720080017104B8 | ||
121 | :100780007000800170040063F004F2007204000144 | ||
122 | :10079000F10070008001700471008001720081011D | ||
123 | :1007A000710470008101700400630023B3018305AC | ||
124 | :1007B000A301A201A1010123A0010001C80003A11E | ||
125 | :1007C000C40700330700C28880058105040111C8F1 | ||
126 | :1007D0004800B001B1010823B201050148040043FB | ||
127 | :1007E00000A2E4070005DA870001C800FF238001AA | ||
128 | :1007F00005050063F7041A09F6086E040002804339 | ||
129 | :100800007608800277040063F7041A09F6086E047C | ||
130 | :10081000000200A0140816880043760880027704BE | ||
131 | :100820000063F3040023F40074008043F400CF401D | ||
132 | :1008300000A2440874040201F7C9F6D9000101A11D | ||
133 | :10084000240804982695248873040063F30475042F | ||
134 | :100850005A88020104D84697049826954A8875005C | ||
135 | :1008600000A3640800054E8873040063807B8063E6 | ||
136 | :1008700006A6760800333E00C28880678303806343 | ||
137 | :100880000063382B9C88382B928832093105929866 | ||
138 | :100890000505B209006300320036003A003E0063ED | ||
139 | :1008A00080328036803A803EB43D0063382B40323F | ||
140 | :1008B0004036403A403E00635A20C94000A0B40888 | ||
141 | :1008C0005D00FEC300638073E6200223E8008273AC | ||
142 | :1008D000FFFD80731323F8886620C0200423A00145 | ||
143 | :1008E000A123A1018162E28880738077680000A261 | ||
144 | :1008F000800003C2F1C74123F8881123A10104231A | ||
145 | :04090000A001E684E8 | ||
146 | :00000001FF | ||
147 | /* Microcode buffer is kept after initialization for error recovery. */ | ||
diff --git a/firmware/qlogic/1040.bin.ihex b/firmware/qlogic/1040.bin.ihex new file mode 100644 index 000000000000..d1213307f713 --- /dev/null +++ b/firmware/qlogic/1040.bin.ihex | |||
@@ -0,0 +1,2111 @@ | |||
1 | :1000000007410600001078003A1000005841000037 | ||
2 | :100010004320504F525947495448312039392035EF | ||
3 | :100020004C51474F43494320524F4F50415249543E | ||
4 | :100030004E4F49205053303130324920542F462002 | ||
5 | :100040007269776D726120655620726569736E6F93 | ||
6 | :1000500030202E3735362020432073756F74656D40 | ||
7 | :1000600020726F4E202E303050206F727564746392 | ||
8 | :100070004E202E6F2020313024200120FD0404204A | ||
9 | :1000800082A005004800451038004B10780047104A | ||
10 | :1000900028004B10B920121278004D10B9202222EE | ||
11 | :1000A000C120080071201000C3700400C920FF782F | ||
12 | :1000B00089208611C7705349CB702050CF70202003 | ||
13 | :1000C000D3700700003FD670C1200800192000003F | ||
14 | :1000D0000920FFFE00210B20A5A5ECA1FF7F642DC8 | ||
15 | :1000E0006B200A0ADCADFF3F542B5B2050501421DB | ||
16 | :1000F00086A2A5A54000BF1086A30F004000851072 | ||
17 | :100100006A2C5A2AC120000019200F0078006510BF | ||
18 | :100110006A2C5A2AC12008000920FF7F482144295F | ||
19 | :100120004B200A0ABCA9FF3F34273B205050142122 | ||
20 | :1001300086A20A0A4000A9104A283A26C1200400D3 | ||
21 | :100140000920FF3F34210B205050142186A250502B | ||
22 | :100150004000AA1078008E114A283A26C09888A13B | ||
23 | :1001600000102C210B20A5A5142186A2A5A54000D6 | ||
24 | :10017000BC100A258AA10010C1987800C1100A2578 | ||
25 | :100180007800C1106A2C5A2A30218AA14000282107 | ||
26 | :10019000A2A10052248424842484248424842484DA | ||
27 | :1001A00092A1007909200000012031007810261D5D | ||
28 | :1001B000182279200052A02F082411200000A92025 | ||
29 | :1001C0004000A4420981C000DC10F27E2885E67D53 | ||
30 | :1001D000EA7CEE7B8378000031203000CF7801018B | ||
31 | :1001E0000B7802000F7802004F780300692040521C | ||
32 | :1001F0000120FD04042082A00500480004113800FD | ||
33 | :100200000011780008111B683C0078000A11A80052 | ||
34 | :1002100008111B683C001B682800076807000B6872 | ||
35 | :10022000FA000F68080013680500236800002768BB | ||
36 | :100230000600176808002B6800001F681900692075 | ||
37 | :10024000805411202000092010000B680C080F6852 | ||
38 | :100250001900036800FD076818001A6A002DE8A05D | ||
39 | :10026000080090A204000981C000221169200055F5 | ||
40 | :1002700009200200A9200001376800000B68400037 | ||
41 | :10028000F07B86A3FFFEC0004811176800011F68BD | ||
42 | :10029000640078004C11176864001F680200E8AD24 | ||
43 | :1002A000100070005211780039110981C000371117 | ||
44 | :1002B0007810A72278103D497810B5197810334E80 | ||
45 | :1002C000003285A00D009020C370000090006C11DA | ||
46 | :1002D000C07086A00200C0006C11781084127810E3 | ||
47 | :1002E0009611CC7805A0C0007A1178104F1D10002F | ||
48 | :1002F000801168008011781086211000801168003C | ||
49 | :1003000080117810B91AE0006C117810BA4C78009E | ||
50 | :100310006C118E119011AC24AC24BE49BE49AC24A2 | ||
51 | :10032000AC2478008E11780090117800921178003A | ||
52 | :1003300094116800011261200000186084A001007F | ||
53 | :10034000C0000112147805A0C000A711100002120D | ||
54 | :100350007800011209205B52042105A0C00001129F | ||
55 | :10036000092064520B200000147986A14200C000CD | ||
56 | :10037000CC1116780920625264210B20000018600D | ||
57 | :10038000C6701460CA701C618CA100FF206084A03C | ||
58 | :10039000FF0005A1CE7078109A197800FF1114782B | ||
59 | :1003A00086A01800C000D3117810781617780000C6 | ||
60 | :1003B00009206252042165A04000EF117E0C9C6070 | ||
61 | :1003C00060207810171A7F0C9F60000078104E177D | ||
62 | :1003D00009200C000760030178107619C000FB119A | ||
63 | :1003E00078109A19092062520B20000009205C52F3 | ||
64 | :1003F00004210B20000005A04000FF110120054052 | ||
65 | :1004000078008612780084127C00C3700000C770E8 | ||
66 | :100410000000CB700000CF700000C070BCA0C0FF17 | ||
67 | :10042000C00052123820790012128412E512A9126B | ||
68 | :10043000FE120D131313A012661717139812AD12A4 | ||
69 | :10044000AF12B112B3126B179812291365139016DD | ||
70 | :100450006017B512AF15CB15E7151216681576158E | ||
71 | :100460008A159E15E913981297139D13A213A713CB | ||
72 | :10047000AD13B213B713BC13C113C513DA13E613CC | ||
73 | :100480009812981298129812F513FE130D14511425 | ||
74 | :100490005B146214A814B714C614D8144815581560 | ||
75 | :1004A00098129812981298125D15BCA0A0FFC00077 | ||
76 | :1004B0009812382084A01F0079005B12A417A71798 | ||
77 | :1004C000B7179812981231194E199812981298125B | ||
78 | :1004D00052195A199812981298129812DB12F412A3 | ||
79 | :1004E0001F135B1386168217961798124718601908 | ||
80 | :1004F0000D1917191B19291998129812CA72C67169 | ||
81 | :100500000120064078008612CE73CA72C67101209F | ||
82 | :100510000040C27068008712612000001B6001006B | ||
83 | :1005200091200050E0008F12E000911268009112BB | ||
84 | :10053000912080407C00C370014078008712C37016 | ||
85 | :1005400006407800871299204100A1204100A9208F | ||
86 | :100550000500A35378008412C470C37004007A00AD | ||
87 | :100560007800841278008412780084127800841253 | ||
88 | :1005700091200080C3700000C7705349CB70205099 | ||
89 | :10058000CF702020D3700700003FD6707920000084 | ||
90 | :100590001B78010031203000592000102920570419 | ||
91 | :1005A0005120700461207204B920FFFFC1200000B7 | ||
92 | :1005B0009120005091208040780055047810C41B91 | ||
93 | :1005C000C0009C12D875DC74DA75DE747800E8120D | ||
94 | :1005D000292000002025D071C873CC72C470781017 | ||
95 | :1005E000FE1A40008412C370024078008412781012 | ||
96 | :1005F000C41BC0009C12D875DC74DA75DE747800F8 | ||
97 | :100600000113292000002025D071C873CC72C4705A | ||
98 | :1006100078105E1B40008412C37002407800841280 | ||
99 | :10062000C471C87014210A2078008212C471142188 | ||
100 | :1006300078008212C7700700CB704100CF700600AF | ||
101 | :10064000780084127810C41BC0009C12D875DC7628 | ||
102 | :10065000DA75DE7678002C13292000003025C4706E | ||
103 | :10066000C872CC73D074C670CA72CE73D27405A02F | ||
104 | :10067000400055130AA440003C13C80046130180F3 | ||
105 | :10068000927884A000FC40004A13CC7885A0010039 | ||
106 | :10069000CE7801200540780086129A7A9E7BA27D52 | ||
107 | :1006A000A67E967CCC7884A0FCFFCE787800591387 | ||
108 | :1006B000CC7885A00100CE78780084127810C41B15 | ||
109 | :1006C000C0009C12D875DC76DA75DE767800681387 | ||
110 | :1006D000292000003025C470C872CC73D474C67051 | ||
111 | :1006E000CA72CE73D67405A0400091130AA44000CC | ||
112 | :1006F0007813C80082130180AE7884A000FC40000B | ||
113 | :100700008613CC7885A00001CE78012005407800C2 | ||
114 | :100710008612B67ABA7BBE7DC27EB27CCC7884A0CB | ||
115 | :10072000FFFCCE7878009513CC7885A00001CE78B8 | ||
116 | :1007300078008412092061520C21EC7A7800821230 | ||
117 | :10074000092041520C2178008312092042520C21C9 | ||
118 | :1007500078008312612040520C611062780082128E | ||
119 | :10076000092045520C2178008312092046520C21A1 | ||
120 | :1007700078008312092048520C2178008312092046 | ||
121 | :1007800049520C217800831208790C7A7800821281 | ||
122 | :10079000C471078184A00F00038003800380E8A058 | ||
123 | :1007A0008054006A046884A008004000D713086BD6 | ||
124 | :1007B0007800D8130C6B78008112C4777810C519B3 | ||
125 | :1007C000912000801C6B146A91200180082778001A | ||
126 | :1007D00081124C7978008312C4777810C519912062 | ||
127 | :1007E00000800869186A106B9120018078008112DE | ||
128 | :1007F000C47182A11000C8007C1278107F23780099 | ||
129 | :100800008112C47182A11000C8007C1211204152D3 | ||
130 | :1008100004227E001221781038237F017800831291 | ||
131 | :10082000C47119200001042382A0060048001B1493 | ||
132 | :1008300011204914A920080078001F141120411428 | ||
133 | :10084000A9200800042206A140002A14108270008A | ||
134 | :10085000281478001F1478007C12042382A006005C | ||
135 | :100860004800331492A249147800351492A241141E | ||
136 | :100870007E0211204252042212217F017E00781054 | ||
137 | :1008800044237F0178008312E803FA00F401EE02AA | ||
138 | :100890006400190032004B00E803FA00F401EE0294 | ||
139 | :1008A0000400010002000300612040520C6110624C | ||
140 | :1008B000C4700E60C87012607800821261204052CD | ||
141 | :1008C0001461C47016607800831261204052C471B4 | ||
142 | :1008D000112004001F6019001920121286A128009F | ||
143 | :1008E00040008314112005001F6019001920121206 | ||
144 | :1008F00086A1320040008314112006001F600C0006 | ||
145 | :100900001920222286A13C00C0007C1218607E00C3 | ||
146 | :100910001A61007884A00100C0009E140120FD042B | ||
147 | :10092000042082A005004800961438009A1478002C | ||
148 | :100930009E1428009A1478009E1419202222780010 | ||
149 | :10094000A01419201212B823781055237810334EB2 | ||
150 | :100950007F0178008312C47184A1CFFFC0007C1294 | ||
151 | :1009600011204852042212217E00781077237F0143 | ||
152 | :1009700078008312C47182A11000C8007C1211207B | ||
153 | :10098000495204227E001221781066237F017800EC | ||
154 | :100990008312C471C87284A1FDFFC0007B1284A2BF | ||
155 | :1009A000FDFFC0007B12002108790A7800220C7A32 | ||
156 | :1009B0000E7878008212C471078184A00F00038032 | ||
157 | :1009C00003800380E8A0805419200000C872BCD2C4 | ||
158 | :1009D0004000E9149DA31000B4D24000EE149DA382 | ||
159 | :1009E000080000687E0026A240001115026A84A457 | ||
160 | :1009F00000204000FA149DA3100084A400104000C1 | ||
161 | :100A000000159DA3080084A40040400011150F812B | ||
162 | :100A100084A2004040000D1578109923780011152C | ||
163 | :100A200078108B2378001115CC72086806A240005C | ||
164 | :100A30004015A4A2FF0061204052186186A1280041 | ||
165 | :100A40004000271586A1320040002D1586A13C00EC | ||
166 | :100A50004000331582A4640048003D157800371526 | ||
167 | :100A600082A4500048003D157800371582A4430049 | ||
168 | :100A700048003D15C471C6717F02CA7278007D12AC | ||
169 | :100A80000A6A9DA30A00046805A306687F020C6B2E | ||
170 | :100A9000C47178008112C4777810C5199120008044 | ||
171 | :100AA000146A1C6B91200180C8701668CC701E6897 | ||
172 | :100AB000082778008112C4704C794E787800831230 | ||
173 | :100AC000C471C872CC7382A11000C8007C12781067 | ||
174 | :100AD000A72378008112C4777810C519912000806F | ||
175 | :100AE000086A95A202000A6A91200180082778000E | ||
176 | :100AF0008212C4777810C51991200080086A94A2E8 | ||
177 | :100B0000F9FF0A6A046805A04000851578106F2275 | ||
178 | :100B100091200180082778008212C4777810C519C7 | ||
179 | :100B200091200080086A95A204000A6A046805A062 | ||
180 | :100B30004000991578106F229120018008277800D5 | ||
181 | :100B40008212C47741200100492005005120200075 | ||
182 | :100B5000912000807810D219912001800827086A1E | ||
183 | :100B600078008212C477C872CC73C677CA72CE730B | ||
184 | :100B70007810521AC000C715186805A04000C715A4 | ||
185 | :100B800008277810B723C000C715177815009120E3 | ||
186 | :100B900001807C009120018078008412C477C677A0 | ||
187 | :100BA0004120210049200500512020009120008093 | ||
188 | :100BB0007810D219612040526F6003008267936001 | ||
189 | :100BC0000F00736000001778160078106F229120D4 | ||
190 | :100BD00001807C00C877CA77C477C677BCA700FFBE | ||
191 | :100BE00091200080612040526F600200736000001D | ||
192 | :100BF000826793600F001778170078106F2291209A | ||
193 | :100C00000180412021004920040051201000912042 | ||
194 | :100C100000807810D219C8703668388784A71F0002 | ||
195 | :100C2000C0000616912001807C00CC7884A00300CF | ||
196 | :100C3000C000361639200000412021004920040060 | ||
197 | :100C4000512008007810C5199120008008680DA86F | ||
198 | :100C50000A6991200180388784A71F00C0001F16F1 | ||
199 | :100C6000BCA700FF3F8738873F8784A7000FC000DD | ||
200 | :100C70001F169120008069200001306884A0400088 | ||
201 | :100C800040005F164B680400A9201400486884A047 | ||
202 | :100C9000040040004C1670004C16780043164B6858 | ||
203 | :100CA0000900A9201400486884A0010040005916DA | ||
204 | :100CB0007000591678005016A920FA0070005F16CF | ||
205 | :100CC00078005B1679200052177818006120405296 | ||
206 | :100CD0006F6001007360000093600F00CC7885A006 | ||
207 | :100CE0000200CE78086884A0FDFF0A681B684800EF | ||
208 | :100CF000912001807C00CC7884A0FDFFCE7884A078 | ||
209 | :100D00000100C000821678109C1AC471C6714A791D | ||
210 | :100D10007C007810C41BC0009C12D875DC74DA7596 | ||
211 | :100D2000DE7478009316292000002025C471C87352 | ||
212 | :100D3000CC72C671CA73CE727920005291200080A5 | ||
213 | :100D4000781080199120018040004A17A9200500E1 | ||
214 | :100D5000A120185291200080A141912001800920FA | ||
215 | :100D6000200078107B194000B61678109A19780088 | ||
216 | :100D70004A17046084A000FF07800980400019170B | ||
217 | :100D80007E0C682C912000807810801991200180C1 | ||
218 | :100D90004000EA16002C9E680981C000BE169F60C4 | ||
219 | :100DA00000007F0C7E0C18721C7320742475682C54 | ||
220 | :100DB0009C6865A0400018170920200078107B1956 | ||
221 | :100DC000C0000117046084A0FF0086A00200C000DC | ||
222 | :100DD000EA16002D02607800D0167F0C7E0C9C6015 | ||
223 | :100DE00060207810171A7F0C9F60000078104E1753 | ||
224 | :100DF00009200C00086085A000020A6078107619AE | ||
225 | :100E000078109A1978004A177F0C7E0C9C6060203D | ||
226 | :100E10007810171A7F0C9F60000078104E17092079 | ||
227 | :100E20000C00076003011B6003007810761978102E | ||
228 | :100E30009A1978004A177F0CC474C873CC72146076 | ||
229 | :100E400091200080177812007E0E712040526F7042 | ||
230 | :100E500005007370000076737A727E7482708770FA | ||
231 | :100E60000000002C8A708F7000002EA030251C61BD | ||
232 | :100E7000A26184A1600040003C177810D3487F0E27 | ||
233 | :100E80009665A6659A66AA66AF600000B36000002A | ||
234 | :100E900078106F22912001807C00C370054078009B | ||
235 | :100EA0008712A920050099201852912000800A532A | ||
236 | :100EB00091200180002110A299A30000A1A40000AC | ||
237 | :100EC000A9A500007C00C471C770000006797800F5 | ||
238 | :100ED0008412C471C671682178006D1769200010F2 | ||
239 | :100EE0000C6916A0042D10A2688D0981C0006F172F | ||
240 | :100EF00085A20000C0007D17C370004078007F17F6 | ||
241 | :100F0000C3700340CA7078008712112067520C2208 | ||
242 | :100F1000C470038048008F177810513C84A1FF7F74 | ||
243 | :100F2000780093177810443C85A100801220780047 | ||
244 | :100F30008312C47178103B3C006101206752042089 | ||
245 | :100F400084A000800DA10462086378008112E47916 | ||
246 | :100F500078008312C471C6719821A1204200A92093 | ||
247 | :100F60000400A353A02199204200A9200400A35308 | ||
248 | :100F700078008412C470682079200052912000808B | ||
249 | :100F8000781080199120018040004318076001000B | ||
250 | :100F90000B6000002B6000001B600600106A8CA232 | ||
251 | :100FA0000F0084A2F000038003800380038005A16A | ||
252 | :100FB000166084A200084000DE171B600A0078005B | ||
253 | :100FC000E41784A200104000E4171B600C0084A208 | ||
254 | :100FD00000034000ED172B600100048004800480B2 | ||
255 | :100FE00085A001001E60236000002760000084A22D | ||
256 | :100FF00000044000FA172B600000A920060080AC16 | ||
257 | :101000000B00A02080AD05009820A35384A200030C | ||
258 | :10101000C0000F1846604A604E60526096609A6049 | ||
259 | :10102000780019180068466004684A60086E4E66C9 | ||
260 | :101030000C6D526596659A66146091200080177851 | ||
261 | :101040004200082C612040526F6005007360000070 | ||
262 | :10105000776000007B6000007F60000082608A6132 | ||
263 | :1010600084A200048E60912001807E0E71202000F9 | ||
264 | :1010700007700A0007700200037000007F0E9120C5 | ||
265 | :10108000008078106F22912001807C00C3700540A1 | ||
266 | :10109000780087127E0C7E0D7E0E7E0F91200080E0 | ||
267 | :1010A000712040527920000161201000A0706DA0D5 | ||
268 | :1010B00040000319046A94A2FF0086A207004000C2 | ||
269 | :1010C000621886A20F00C00003191C6984A1C00029 | ||
270 | :1010D0004000031984A18000C000D318246884A0B4 | ||
271 | :1010E00000FF85A019002668B071FF8140008918B3 | ||
272 | :1010F0007E0D69202000076810000869086806A1B5 | ||
273 | :10110000C0007A180C690C6806A1C0007F1884A181 | ||
274 | :10111000FF00C0007F187F0DB87884A01F80C0003A | ||
275 | :101120008918487885A00C004A78B071FF8140008A | ||
276 | :10113000AC18B37000007E0D69202000076818000D | ||
277 | :10114000046884A00800C0009D18076808000468AF | ||
278 | :1011500084A00800C000A418076802007F0DC461C5 | ||
279 | :10116000C862CC63C661CA62CE637E0E7120005233 | ||
280 | :1011700066726A7380AE19007F0E487884A00C00F6 | ||
281 | :10118000C000BA187810E147A3780000587884A00E | ||
282 | :10119000FFED5A78B47080A0DA001A787F0F7F0EC6 | ||
283 | :1011A0007F0D7F0C9120018078008412246884A038 | ||
284 | :1011B00000FF85A019002668B87884A01F80C000B1 | ||
285 | :1011C000D918487885A00C004A78487884A00C008B | ||
286 | :1011D000C000E218B071FF8140000119B370000037 | ||
287 | :1011E0007E0D6920200007681800046884A00800AC | ||
288 | :1011F000C000F21807680800046884A00800C00056 | ||
289 | :10120000F918076802007F0D7800CB187F0F7F0E5A | ||
290 | :101210007F0D7F0C9120018001200540780086120F | ||
291 | :101220008079C671C47182A10300C8007C128279E2 | ||
292 | :10123000780084128079C671780084127479C6713E | ||
293 | :10124000C47176797879CA71C8717A797C79CE71EE | ||
294 | :10125000CC717E79780084127479C6717879CA71FC | ||
295 | :101260007C79CE71780084120079C671C4710279DC | ||
296 | :101270000120FD04042082A0050048004019380028 | ||
297 | :10128000421978004C19A8004C198CA10100C0002B | ||
298 | :101290004A19B920222278004C19B920121278007C | ||
299 | :1012A00084120079C67178008412092074520421D6 | ||
300 | :1012B000C670C4700A207800841209207452042178 | ||
301 | :1012C000C67078008412C471078184A00F00038067 | ||
302 | :1012D00003800380E8A08054146AB4D240007119DE | ||
303 | :1012E0001120010078007319112000000C6B7800A8 | ||
304 | :1012F000811280AC01007810801B7C0080AC010062 | ||
305 | :101300007810201B7C00507865A040008819042CC0 | ||
306 | :101310005278632000007C007E0F792000525078C4 | ||
307 | :101320006DA040009819042D5278036800000768EA | ||
308 | :1013300000000B6800007F0F7C00912000807E0F72 | ||
309 | :101340007920005250786220002C05A0C000A71917 | ||
310 | :1013500078108C2452787F0F912001807C007E0FC2 | ||
311 | :101360007920005250786A20002D52787F0F7C003F | ||
312 | :1013700011200079527AEC7B19834000C21980A2B7 | ||
313 | :101380003100122010207800B919132000007C00D1 | ||
314 | :1013900084A7000F0B8084A71F00038003800380B5 | ||
315 | :1013A000038005A1E8A000557C007810C51900292C | ||
316 | :1013B0002A68002A2E68086884A0EFFF0DA80A6931 | ||
317 | :1013C000092052520C21046805A04000041A16A1FD | ||
318 | :1013D000C000EF196020006006687E010B2000004D | ||
319 | :1013E0007800F219092000007E01046865A0400021 | ||
320 | :1013F000011A006006687810311A7810CB1C10684A | ||
321 | :1014000001801268C000F2197F01026906697C0040 | ||
322 | :1014100065A04000161A08209C6005A04000131A21 | ||
323 | :1014200062209F60000065A07800091A5078527908 | ||
324 | :1014300062207C0065A04000301A08209C6005A056 | ||
325 | :101440004000251A62209F60000065A078001B1AEA | ||
326 | :101450007E0F7920005291200080507852797F0FC2 | ||
327 | :101460006220912001807C00076003018F600000F2 | ||
328 | :10147000A9201C0080AC0500A02001200000A44091 | ||
329 | :1014800028681A602C6822607C007E0E7120405211 | ||
330 | :101490004C708CA00002C000501A88A080520A2D07 | ||
331 | :1014A00000804E7006A07F0E7C007810C519912038 | ||
332 | :1014B000008004681E7865A040009B1A7800631ABB | ||
333 | :1014C000002C1E78006065A040009B1A0C6006A3EB | ||
334 | :1014D000C0005D1A106006A2C0005D1A282C012011 | ||
335 | :1014E0005252042006ACC000741A7800991A04689D | ||
336 | :1014F00006ACC000811A006065A00668C0008B1AA7 | ||
337 | :101500000368000078008B1A00641C786020026475 | ||
338 | :1015100086A40000C0008B1A002C02686025781099 | ||
339 | :10152000311A1B600500236020007810CB1C106866 | ||
340 | :10153000018050108C24126885A0FFFF7C003920A8 | ||
341 | :101540000000412021004920040051200800912082 | ||
342 | :1015500000807810D219388784A71F00C000A61A0F | ||
343 | :10156000BCA700FF3F8738873F8784A7000FC000D4 | ||
344 | :10157000A61A912001807C0061200000186084A0E0 | ||
345 | :101580000100C000CA1A91200080E078E3780000D2 | ||
346 | :101590009120018005A0C000CB1A7C008CA0F0FF38 | ||
347 | :1015A0004000D11A78108C247900D31AE31AE61A75 | ||
348 | :1015B000EC1AF01AE41AF41AFA1AE41AE41A951C4E | ||
349 | :1015C000B91CBD1CE41AE41AE41AE41A7C00781071 | ||
350 | :1015D0008C2478109C1A012001807800C31C012003 | ||
351 | :1015E00003807800C31C012004807800C31C78109D | ||
352 | :1015F0009C1A012006807800C31C01200780780017 | ||
353 | :10160000C31C3020382182A721004800061B092076 | ||
354 | :10161000200000267810201BC0001F1BBAA7200046 | ||
355 | :1016200048001E1B40001E1B0827B0A6200090A2E9 | ||
356 | :10163000400099A30000A1A40000A9A50000780023 | ||
357 | :10164000001B06A07C00FF8140005B1B992030003E | ||
358 | :10165000A0200C7084A0FF004000321B0770040023 | ||
359 | :10166000047084A00400C0002D1BA8211770000086 | ||
360 | :101670000B8112711A721E73227426750C7885A064 | ||
361 | :1016800001000270077001000120FD04042082A007 | ||
362 | :101690000500C8004F1B09202200042184A000403F | ||
363 | :1016A000C000411B08700B80C800411B077002007E | ||
364 | :1016B0008CA0E001C0005B1BA55306A003700000D6 | ||
365 | :1016C0007C003020382182A721004800661B0920B9 | ||
366 | :1016D000200000267810801BC0007F1BBAA72000C6 | ||
367 | :1016E00048007E1B40007E1B0827B0A6200090A269 | ||
368 | :1016F000400099A30000A1A40000A9A50000780063 | ||
369 | :10170000601B06A07C00FF814000C11B9820A12027 | ||
370 | :1017100030000C7084A0FF004000921B0770040092 | ||
371 | :10172000047084A00400C0008D1BA8211770000065 | ||
372 | :101730000B8112711A721E73227426750C7885A0A3 | ||
373 | :1017400000000270A653077001000120FD04042070 | ||
374 | :1017500082A00500C800B01B09202200042184A03B | ||
375 | :101760000040C000A21B107084A000F04000B91B14 | ||
376 | :10177000077008007800BD1B08710381C800A21B18 | ||
377 | :101780000770020084A1E001037000007C000120CA | ||
378 | :10179000FD04042082A00400C800CD1B7800D01BEB | ||
379 | :1017A00006A07800D21B85A001007C007E0E71206F | ||
380 | :1017B0000052082D5870026805A0C000DD1B5E7144 | ||
381 | :1017C0005A717F0E7C00082C5878026005A0C0007A | ||
382 | :1017D000E71B5E795A797C009120008014617810B3 | ||
383 | :1017E0008021006984A10001C000352084A100028D | ||
384 | :1017F000C00031201C6805A0C0003D20036000002F | ||
385 | :10180000082C5C7865A0C000051C5A797800061C7D | ||
386 | :1018100002615E799120018078108C227C007E0E1E | ||
387 | :101820007120005258706DA040001A1C00685A7058 | ||
388 | :1018300005A0C000191C5E70FF8D7F0E7C007E0D20 | ||
389 | :101840007E0C7E0F7920005280AF16006020006071 | ||
390 | :1018500005A04000431C6820146806A3C000331C88 | ||
391 | :10186000286884A0FF0006A44000361C602D780084 | ||
392 | :10187000241C006805A00260C000421C80AF160056 | ||
393 | :1018800006AC4000411C002C5E78002D7F0F7F0CC1 | ||
394 | :101890007F0D05A07C007E0D7E0C7E0F792000520E | ||
395 | :1018A00080AF16006020006005A040006B1C68201F | ||
396 | :1018B000146884A0FF0006A340005E1C602D780021 | ||
397 | :1018C000501C006805A00260C0006A1C80AF1600B2 | ||
398 | :1018D00006AC4000691C002C5E78002D7F0F7F0C49 | ||
399 | :1018E0007F0D05A07C007E0D7E0C7E0F79200052BE | ||
400 | :1018F00080AF1600602000606DA04000901C14684E | ||
401 | :1019000006A34000831C602D7800781C006805A0A9 | ||
402 | :101910000260C0008F1C80AF160006AC40008E1C19 | ||
403 | :10192000002C5E78002D7F0F7F0C7F0D05A07C00C2 | ||
404 | :101930009120008069204052006886A0000040008D | ||
405 | :10194000A31C91200180E37809007C008068BCA082 | ||
406 | :1019500000FF412021004920040051201000781090 | ||
407 | :10196000D219388784A71F00C000AC1C91200180C9 | ||
408 | :1019700001200A807800C31C01200C807800C31C61 | ||
409 | :1019800078109C1A01200D807800C31CC270612061 | ||
410 | :1019900000001B600100912080407C000460082C46 | ||
411 | :1019A00063200000847800808678887805A08A7992 | ||
412 | :1019B0004000DA1C022C7800DB1C8E797C00076862 | ||
413 | :1019C00003017E0C61200052082D6B200000846012 | ||
414 | :1019D00000808660886005A08A614000EF1C022DAF | ||
415 | :1019E0007800F01C8E617F0C7C007810031D400095 | ||
416 | :1019F000021D7E0C9C6065A04000FD1C7810171A2B | ||
417 | :101A00007F0C9F60000078109A197C008C7865A08C | ||
418 | :101A10004000151D91200080847801808678042C78 | ||
419 | :101A20008E7805A0C000131D8A7800809120018067 | ||
420 | :101A30007C00A920100006A0048086808E81C8004A | ||
421 | :101A40001F1D00A27000231D78001A1D86808E8144 | ||
422 | :101A50007C007E15A920100005A04000491D1AA198 | ||
423 | :101A6000C800491D13828D8148003A1D1AA1C80083 | ||
424 | :101A70003B1D7000411D78002F1D1AA10823108204 | ||
425 | :101A80007000411D78002F1D7E00003284A0FFF7FA | ||
426 | :101A900080207F007F157C007E00003285A000083A | ||
427 | :101AA0007800451D9479D07006A14000BD1D91209D | ||
428 | :101AB000008071202000047005A0C000BD1D0870CA | ||
429 | :101AC000087206A2C000BD1D86A20800C000BD1D90 | ||
430 | :101AD00071201000781080194000BD1D9C7A987B01 | ||
431 | :101AE000A47CA07D84A100FF40008B1D312000005C | ||
432 | :101AF0000B81B5860B81B5860B81B5860B81B586CA | ||
433 | :101B00000B81B5860B81B586002110A2002619A392 | ||
434 | :101B1000A1A40000A9A500007800951D07810480FC | ||
435 | :101B2000048010A299A30000A1A40000A9A50000B0 | ||
436 | :101B30000920200078107B19912001804000B41DFD | ||
437 | :101B400078109A19A8780080AA7886A00200C000B0 | ||
438 | :101B5000BD1D91200080E3780200AB780000CC78B6 | ||
439 | :101B600085A00300CE78912001807800BD1DAB7860 | ||
440 | :101B7000000078104921046084A00F007900C21D84 | ||
441 | :101B800071201000912001807C00D21DF41D1A1ECE | ||
442 | :101B9000D21D371EE11DC91FE41FD21DEE1D141EEC | ||
443 | :101BA0007F1EEE1E571F691FE01F39200004DC78DE | ||
444 | :101BB00005A7DE78086005A70A60781064209C609D | ||
445 | :101BC000DA78781031217C00DC7884A000014000B4 | ||
446 | :101BD000E81D7800D21D1C6085A080001E60780082 | ||
447 | :101BE000FB1D7810C41BC000D21D78106321DC7867 | ||
448 | :101BF00084A000014000FB1D7800D21DDF780000AA | ||
449 | :101C00000460078084A0FF00D27801809F600000FC | ||
450 | :101C10004000111E781064204000111EDC7885A061 | ||
451 | :101C20000001DE787800131E781088207C00781080 | ||
452 | :101C3000C41BC000D21D78105F21DC788CA0000E80 | ||
453 | :101C4000C000231E84A00001C000251E7800D21D04 | ||
454 | :101C500078106420C000361E04618CA1FF0086A1AC | ||
455 | :101C600007004000212086A10F00400021207810AD | ||
456 | :101C700088207C00DC7884A0000140003E1E7800B3 | ||
457 | :101C8000D21DDF780000146711200100A920010097 | ||
458 | :101C9000186084A0FF0005A04000611E1120010013 | ||
459 | :101CA000BCA700FFA92020008EA001004000611EFB | ||
460 | :101CB0003920000011200200A92000018EA002009E | ||
461 | :101CC0004000611E78007C1E7810C51991200080AC | ||
462 | :101CD0002B6800002F680000086884A0DEFF0A68F7 | ||
463 | :101CE000E8AD1000912001807000751E7800631E21 | ||
464 | :101CF000118240007C1EA92000017800631E78102C | ||
465 | :101D00009A197C0001206752042084A000804000C2 | ||
466 | :101D10004920146178108021006984A101004000ED | ||
467 | :101D2000A01E286084A0FF00C0004120006884A09D | ||
468 | :101D3000010040004920036800000B6800000768AC | ||
469 | :101D4000000078005120112001002060F4D04000F4 | ||
470 | :101D5000A81E95A20200C4D04000AD1E95A20800A6 | ||
471 | :101D6000CCD04000B21E95A200041C6084A00200EA | ||
472 | :101D70004000B91E95A204002C608CA0FF0082A137 | ||
473 | :101D8000020048004D2082A11B00C8004D204000E9 | ||
474 | :101D90004D200E692C6007808CA0FF0082A10200FC | ||
475 | :101DA00048004D2082A11B00C8004D2040004D205E | ||
476 | :101DB0001269306005A0C000DC1E01201E000080FA | ||
477 | :101DC0001668286084A0FF0040004920066828604B | ||
478 | :101DD000078084A0FF00400049200A68026A78005A | ||
479 | :101DE000512001204052042086A00700C000531F4C | ||
480 | :101DF00001206752042084A0008040004920146123 | ||
481 | :101E0000781080210120525204201020FF824000CF | ||
482 | :101E10000E1F80A00500042084A0FF0006A1C000C2 | ||
483 | :101E2000531F91200080046A086B186484A4030087 | ||
484 | :101E300040002D1F28618CA1FF000180C000231FDE | ||
485 | :101E4000002110A24800531F78002D1F0180C00000 | ||
486 | :101E5000531F002112A24800531FFF824000531F4E | ||
487 | :101E600084A40C004000471F28610F818CA1FF0053 | ||
488 | :101E700082A00400C0003F1F002118A34800531F88 | ||
489 | :101E80007800471F82A00400C000531F00211AA33E | ||
490 | :101E90004800531F306005A040004D1F00801668A9 | ||
491 | :101EA000066A0A6B91200180780051209120018000 | ||
492 | :101EB00078004D2014617810802191200080086BFB | ||
493 | :101EC00018834800651F0A6B91200180780060200C | ||
494 | :101ED0009120018078004D202460078084A0FF00BD | ||
495 | :101EE0004000871F86A08000C000C71FA9200800EF | ||
496 | :101EF0006920107691200080006884A0FFFC0268B1 | ||
497 | :101F0000E8AD08007000831F7800791F91200180E0 | ||
498 | :101F100078005120286015A04000C71F1461781078 | ||
499 | :101F200080217E0C7E0DE8AD0700912000800068C6 | ||
500 | :101F30000DA04000C31F06A240009E1F682178002C | ||
501 | :101F4000941F602100600268682C7810AC197F0D26 | ||
502 | :101F500018680DA04000BB1F602000621A6A1C6A4E | ||
503 | :101F600002621E6878108919A02D9821A9203100DD | ||
504 | :101F7000A353602D7810CB1C7800BE1F086800802A | ||
505 | :101F80000A68912001807F0C7800602091200180F8 | ||
506 | :101F90007F0D7F0C78004920146178108021006843 | ||
507 | :101FA00084A001004000392091200080046A108242 | ||
508 | :101FB0004800DC1F066A9120018078006020912093 | ||
509 | :101FC000018078004D207810C41BC000D21D146120 | ||
510 | :101FD00078108021BE60BB600000006984A1080009 | ||
511 | :101FE0004000F31F206085A00001226084A1010051 | ||
512 | :101FF0004000492084A10001C000352084A10002D6 | ||
513 | :10200000C00031201C6805A0C0003D20046084A0F1 | ||
514 | :10201000FF0086A00F00C0000C2078106321DF783D | ||
515 | :1020200000000460078084A0FF00D27801809F60D8 | ||
516 | :102030000000400021207810642040002120DC783E | ||
517 | :1020400085A00001DE787C00D7780000DB780000F6 | ||
518 | :10205000246084A000FF26607810AC3A40004F1D39 | ||
519 | :102060007810E91B78004F1D0920170078005320D5 | ||
520 | :1020700009200E0078005320092007007800532023 | ||
521 | :10208000092035007800532009203E0078005320B5 | ||
522 | :10209000092004007800532009200600780053200E | ||
523 | :1020A000092016007800532009200100246084A034 | ||
524 | :1020B00000FF05A12660912000807810CB1C9120A4 | ||
525 | :1020C000018078004F1D78109A1978004F1DD47840 | ||
526 | :1020D0006DA0C0006F20002CD678DA789F600000D9 | ||
527 | :1020E00078007B20002C9E689F600000D678002D31 | ||
528 | :1020F0000260D87806ADC0007B200260D0780180F5 | ||
529 | :10210000D278C0008720DC7884A0FFFEDE78D87803 | ||
530 | :10211000602006A07C002EA030251C61A26184A155 | ||
531 | :10212000FFE11E6084A16000400097207E0E7810C1 | ||
532 | :10213000D3487F0E9665A6659A66AA66AF600000D2 | ||
533 | :10214000B360000014677810C51991200080A0606A | ||
534 | :1021500084A00080C000BE20086884A00100400068 | ||
535 | :10216000BE20912001807810311A912000807810D3 | ||
536 | :10217000CB1C91200180D7780000DB78000078002C | ||
537 | :102180003021246096A00100C000C5200080266098 | ||
538 | :10219000106A14689120018002A24800D4204000F7 | ||
539 | :1021A000D420392000027810312178003021082C09 | ||
540 | :1021B00091200080A06084A0008040000121006880 | ||
541 | :1021C00065A040000621046A7E0E71204052007016 | ||
542 | :1021D00084A001004000FB20487006A2C000FB2044 | ||
543 | :1021E000046B1C2360210263002305A0C000F620BD | ||
544 | :1021F0000269602202617F0E78000D216021026277 | ||
545 | :1022000006697F0E78000D21006865A04000062158 | ||
546 | :1022100002610269C0000A210669602103600000B2 | ||
547 | :102220006021A06084A0008040001721086884A07D | ||
548 | :10223000FCFF0A681068008012689120018008681D | ||
549 | :102240008CA040004000262186A040000A6878103B | ||
550 | :10225000421A9120008078106F2291200180DB7853 | ||
551 | :102260000000D77800007C00086005A70A60912074 | ||
552 | :1022700000807810CB1C91200180D87865A04000A8 | ||
553 | :1022800044219C60DA789F60000078003421D77880 | ||
554 | :102290000000DB7800007C009079947800800AA12F | ||
555 | :1022A000C800502106A09678D270047805A040009E | ||
556 | :1022B0005E2101800678C0005E2168005E219120C9 | ||
557 | :1022C00080407C00392077217800652139207D21EC | ||
558 | :1022D000042705A04000762100AC6820086B0C6C38 | ||
559 | :1022E0001069146A0A690E6A126B166C38877800D6 | ||
560 | :1022F00065217C00030009000F0015001B00000091 | ||
561 | :1023000015001B0000007E0C78103B3C682C7F0CF5 | ||
562 | :102310007C001000F7216800F72129200000CB780D | ||
563 | :1023200000008C7865A04000F0210920745204213F | ||
564 | :1023300084A001004000BE21046086A00301C0000B | ||
565 | :10234000BE21186005A0C000BE21146005A0C00019 | ||
566 | :10235000BE217E0D69200000186884A00100C00025 | ||
567 | :10236000BD210C60C6701060CA70C37020801B68ED | ||
568 | :102370000100912080407F0D7810F21C7800F5213B | ||
569 | :102380007F0D7810F8214000F021046294A2FF0034 | ||
570 | :1023900096A203004000D021046296A21001C00062 | ||
571 | :1023A000DE21CB780100046294A200FF1782118223 | ||
572 | :1023B0004000DE21FF85C000F021108202A2C8008B | ||
573 | :1023C000F0217E05781007227F054000EB21E078A0 | ||
574 | :1023D00086A003004000F0217800DE212885C8781F | ||
575 | :1023E00005A040008E21FF854000F721912080400C | ||
576 | :1023F000B078D6707C00AC7BB079D47002A1C000FC | ||
577 | :102400000122002305A07C004800052202A37C00D5 | ||
578 | :1024100002807C000120FD04042082A00500C80089 | ||
579 | :1024200021229120008071202000047005A0C000AE | ||
580 | :1024300056220870087206A2C000562286A2080022 | ||
581 | :10244000C00056227120100078105B220920200065 | ||
582 | :10245000046086A00301C0003022286005A0C000EF | ||
583 | :10246000302209200C007810761940004922C478E7 | ||
584 | :102470000080C67886A00200C0005622912000800D | ||
585 | :10248000E3780300C7780000CC7885A00003CE78FD | ||
586 | :102490009120018078005622C77800007810F21C45 | ||
587 | :1024A000AC79B07800800AA1C800542206A0B278A6 | ||
588 | :1024B00006A071201000912001807C00078104801B | ||
589 | :1024C0000480B87AB47BC07CBC7D10A299A30000C4 | ||
590 | :1024D000A1A40000A9A500007C0009205B52912066 | ||
591 | :1024E00000800A207E0F7E0E71204052007086A070 | ||
592 | :1024F0000000C000892209201252042105A0C0005A | ||
593 | :10250000892279200001307884A0C000C00089228F | ||
594 | :10251000180089221B784B007F0E7F0F7C007E0FF6 | ||
595 | :102520007E0E7120405291200080007086A0000035 | ||
596 | :10253000C000A22279200001307884A0C000C00031 | ||
597 | :10254000A2221800A2221B784D00912001807F0E4C | ||
598 | :102550007F0F7C007E129120002371204052792051 | ||
599 | :1025600000014B780F009800B52238787800AE2231 | ||
600 | :10257000A9204000007882A004004800BE22A920C3 | ||
601 | :1025800060009B780000AF780000AF78000070001A | ||
602 | :10259000C8227800C022007882A004004800D72218 | ||
603 | :1025A000B77093001920F04F781013232F7001801B | ||
604 | :1025B0007800E322B77000001920704E78101323C2 | ||
605 | :1025C0001920AF4E781013232F7000800370000085 | ||
606 | :1025D00078102024047084A00F007E010920FD04DF | ||
607 | :1025E0000C218AA105004800F8223800FE2285A0AF | ||
608 | :1025F0008062780000232800FE2285A08062780097 | ||
609 | :10260000002385A0C0627F0106780F7804B243786A | ||
610 | :10261000D800537880000B7808004770080053708A | ||
611 | :102620007F524F7000007F1200207C007E137E14CA | ||
612 | :102630007E157E04A1202B01042305A09A7840007A | ||
613 | :1026400033231883242318839823A82484A400FF09 | ||
614 | :1026500040002B2382A40001A92000012020A653C2 | ||
615 | :1026600005A0C00022231833780019237F047F15AA | ||
616 | :102670007F147F137C008CA10F0011200101042224 | ||
617 | :1026800084A0F0FF05A11220781020247C001120E6 | ||
618 | :102690000101A92009000B8170004D237800482317 | ||
619 | :1026A0008CA1000E042284A0FFF105A112207C0061 | ||
620 | :1026B00009200101A9200500138270005E23780023 | ||
621 | :1026C000592394A2E000042184A01FFF05A20A2040 | ||
622 | :1026D0007C0011200101A9200C000B8170006F23E8 | ||
623 | :1026E00078006A238CA100F0042284A0FF0F05A1CA | ||
624 | :1026F00012207C0011200201042284A0CFFF05A13A | ||
625 | :1027000012207C000381038080A020007E0C6120C9 | ||
626 | :1027100000019A60AC62AC637F0C7C000381038093 | ||
627 | :1027200080A022007E0C612000019A60A46084A039 | ||
628 | :10273000DFFFAE607F0C7C000381038080A022005D | ||
629 | :102740007E0C612000019A60A46085A02000AE602C | ||
630 | :102750007F0C7C000381038080A020007E0C612020 | ||
631 | :1027600000019A60A460AE621020A460AE631820DD | ||
632 | :102770007F0C7C00912000807E0C7E0E186805A0E6 | ||
633 | :102780004000FE2361200076781006244000E823F4 | ||
634 | :10279000A9200000612000757E0C781006244000FE | ||
635 | :1027A000D6237F0C608C7000D4237800C923780076 | ||
636 | :1027B000FE237F0082A000757120405286708271D6 | ||
637 | :1027C000012004006E7093700F0073700000781089 | ||
638 | :1027D0006A227800FA23C06005A0C000FE237120A1 | ||
639 | :1027E00040528271002C8A70012006006E70937036 | ||
640 | :1027F0000F007370000078106A220120000078003A | ||
641 | :102800000024012001009120018005A07F0E7F0C93 | ||
642 | :102810007C00042C05A040001D2460200C6006A351 | ||
643 | :10282000C0001A24106006A2C0001A24146006A179 | ||
644 | :10283000C0001A2406A078001F2400607800072436 | ||
645 | :1028400085A001007C00112041520C228CA10F00B8 | ||
646 | :1028500011203B01042284A00001400036242120E5 | ||
647 | :1028600004FF22210B810B810B810B818DA1000FB5 | ||
648 | :1028700004217C007E0EE4688CA0200040008A24A5 | ||
649 | :1028800084A00600C0008A241460078084A00F0082 | ||
650 | :10289000038003800380F0A08054047084A00A00A9 | ||
651 | :1028A000C0008A24087194A100FF40008A248CA1F2 | ||
652 | :1028B000FF0001200C0006A140007124012012003D | ||
653 | :1028C00006A1400075240120140006A140007924CF | ||
654 | :1028D0000120190006A140007D240120320006A13C | ||
655 | :1028E0004000812478008524092012007800872484 | ||
656 | :1028F0000920140078008724092019007800872413 | ||
657 | :10290000092020007800872409203F0078008724D0 | ||
658 | :1029100011200000002105A20A707F0E7C006800D3 | ||
659 | :102920008C2491200080712000007E00187084A00B | ||
660 | :102930000100C00093247F0071201000CA707F0046 | ||
661 | :10294000C670C3700280DB704107DF700600712023 | ||
662 | :1029500000001B700100912080407800AA247E10A6 | ||
663 | :102960007E007E12912000233C7F587E307C387D93 | ||
664 | :10297000C277C674CA76CE7594A53F009CA40300A6 | ||
665 | :1029800084A40F007900C124D324D324D3240D2898 | ||
666 | :10299000093AD12402250C25D124D124D124D124D3 | ||
667 | :1029A000D124D124D124D12478108C24078584A06B | ||
668 | :1029B0001F007900D82416250D28C729C42AEC2A1F | ||
669 | :1029C0008C2D37309A30FB3080313832D6320225A8 | ||
670 | :1029D000E9280C30F824AC3DCC3D8F3F9B3F744040 | ||
671 | :1029E000F824F82449414D41AA3DF824FA3EF82440 | ||
672 | :1029F0005E3C0C25F82478108C241800B1247F123A | ||
673 | :102A0000912001807F007F107C001920494F7810B1 | ||
674 | :102A100013232F7001001B784F007800FA2419202F | ||
675 | :102A2000AF4E781013232F7000801B78CD007800F4 | ||
676 | :102A3000FA24427209200F520B20000084A50100E5 | ||
677 | :102A4000C000723C4000332578108C2403700000D5 | ||
678 | :102A50004B70000043700000377000007810E039C0 | ||
679 | :102A60001800B12409200F520B200000687005A047 | ||
680 | :102A7000C000FE256C7084A0070079003C25352637 | ||
681 | :102A8000442550256D258F25DC25B5254425781056 | ||
682 | :102A9000C839092048007810D82EC0004E25037090 | ||
683 | :102AA00004007800FA247810C839C0006B258070C3 | ||
684 | :102AB000078082789B781000AB780C009B786000D0 | ||
685 | :102AC000AB7801005B7804000920DD007810CC2E83 | ||
686 | :102AD000C0006B250370040093700F007800FA2487 | ||
687 | :102AE0007810C839C0008D258071078182789B7865 | ||
688 | :102AF00010008CA11F008DA1C000AA79AB78060040 | ||
689 | :102B00009B786000AB7802005B7804000920DD0050 | ||
690 | :102B10007810CC2EC0008D250370040093700F0038 | ||
691 | :102B20007800FA247810C839C000B3258071078175 | ||
692 | :102B300082789B7810008CA11F008DA1C000AA791B | ||
693 | :102B4000AB7820008471AA79AB780D009B78600087 | ||
694 | :102B5000AB7804005B7804000920DD007810CC2EEF | ||
695 | :102B6000C000B3250370040093700F007800FA24AE | ||
696 | :102B70007810C839C000DA258071078182789B7887 | ||
697 | :102B800010008CA11F008DA1C000AA79AB780600AF | ||
698 | :102B90009B786000AB7802005B7804000920DD00C0 | ||
699 | :102BA0007810CC2EC000DA2588708B700000682069 | ||
700 | :102BB0004A700370020093700F007800FA247810B6 | ||
701 | :102BC000C839C000FA2488706820146F7810BD38A6 | ||
702 | :102BD000502C78107A3A9B781000146884A01F005B | ||
703 | :102BE00085A08000AA781C6E412001008C7084A012 | ||
704 | :102BF0000004012004004000FC25012006007800AC | ||
705 | :102C00001D277810C839C000FA249B78100068701E | ||
706 | :102C10006820146F7810BD38502C78107A3A08600C | ||
707 | :102C200085A010000A60246805A040001C2682A030 | ||
708 | :102C3000060048001A2678001C2627680500146B39 | ||
709 | :102C40009CA31F009DA3C000587084A0008040007A | ||
710 | :102C50002A2684A6010040002C269CA3BFFFAA7B45 | ||
711 | :102C600031202000412001000120030078001D27B1 | ||
712 | :102C70001800B1244C7485A4000040004F2680A0A9 | ||
713 | :102C800080523020507108812AA148004626092030 | ||
714 | :102C9000805264210465FF85C00060262184C00045 | ||
715 | :102CA00040265271037000004B700000407005A078 | ||
716 | :102CB0004000723C7800FA244C76B0A680525071E5 | ||
717 | :102CC000002678004B265271682558254A75502CED | ||
718 | :102CD000346085A00000C0005D2608673A7784A7AD | ||
719 | :102CE0003F034000962684A72100C0005D2684A7EC | ||
720 | :102CF000020040007F2684A7040040005D26BCA798 | ||
721 | :102D0000FBFF0A6784A70800C0005D2684A71000A7 | ||
722 | :102D1000C0005D2684A70002C0005D2684A70001D4 | ||
723 | :102D200040009626186005A0C0005D26BCA7FFFEE7 | ||
724 | :102D30000A67236800001C6E84A60E00186140001C | ||
725 | :102D4000A6261C6002A14800A9264000A9267800FA | ||
726 | :102D50005926FF81C0005926C368000084A780005F | ||
727 | :102D6000C000B1260C702260BCA77FFF0A677810F4 | ||
728 | :102D70007A3A1800B1249B78100046A07810C83920 | ||
729 | :102D8000C000FA24146B9CA31F009DA3C0005870C0 | ||
730 | :102D900084A000804000CD2684A601004000CF26FC | ||
731 | :102DA0009CA3BFFF84A610004000D5269DA3200051 | ||
732 | :102DB000AA7B408884A60E00C000E026BDA71000B4 | ||
733 | :102DC0000A6778001B2758718CA100084000CB349B | ||
734 | :102DD0001120200084A60800C000F126108284A6DD | ||
735 | :102DE0000200C000F1261082AA7A40887810E039EB | ||
736 | :102DF000146A0C6108818CA1FF00E0A10075642CAD | ||
737 | :102E0000FF8C40001227146006A2C000FC26B860A8 | ||
738 | :102E10000180BA60C000F7267E0C602A086085A099 | ||
739 | :102E200000010A607F0C780035267810C839C00090 | ||
740 | :102E3000FA24602A0E61AA794088327101200100CB | ||
741 | :102E40007E005C7184A118004000382784A1100026 | ||
742 | :102E500040002B277810D036C0005B2784A10800E3 | ||
743 | :102E600040003827A06984A10006C00038277810E8 | ||
744 | :102E7000BB3578005B27A06984A1000840004F277C | ||
745 | :102E80007E0C7E026029006085A000200260046143 | ||
746 | :102E90008DA1100006617F027F0C7810D036C00033 | ||
747 | :102EA0005B27A06984A100024000572778100C36E8 | ||
748 | :102EB00078005B2784A10004C0003427A06984A1A6 | ||
749 | :102EC00000104000662714698CA100FF0F81781064 | ||
750 | :102ED0008B237F0002708CA6E00084A66000400077 | ||
751 | :102EE000742786A06000C00074278DA10040FF8871 | ||
752 | :102EF000400079278DA104005A79B6699B7860005B | ||
753 | :102F00000028AA789B78610018688DA0008084A0B2 | ||
754 | :102F1000FF7F1A698CA680004000982797700000F8 | ||
755 | :102F20008AA00D00500096278AA00C0096710120FF | ||
756 | :102F30000C000C809A71AA7808800C814000D13472 | ||
757 | :102F40008CA1F800C000D1347E157E137E14A12020 | ||
758 | :102F50002B019B7800000080AC8080AD0B00982096 | ||
759 | :102F6000A6537F147F137F15146807808278946DB1 | ||
760 | :102F7000D67DDE7D986ED27EDA7E7810C839C000AC | ||
761 | :102F8000CF272C7003804800C8271920AF4E781037 | ||
762 | :102F900013232F700080307884A0C000C000CF279A | ||
763 | :102FA0009800D727086084A0EFFF0A607810E03906 | ||
764 | :102FB00078002325007284A2070086A00100C000CB | ||
765 | :102FC000E4271B784F007810E0397800F527B46AC1 | ||
766 | :102FD00095A200205A7A1B784F007810E0390072D1 | ||
767 | :102FE000002505A64000F52784A2070079100328D4 | ||
768 | :102FF00080AD0900367084A2070086A00100C000E1 | ||
769 | :10300000FA24186000801A607800FA240B284B4BD1 | ||
770 | :103010004B4B3A4B4B4B0B283A4B0B2878108C24DC | ||
771 | :103020007810C8397E0F79200052CC787F0F84A0A9 | ||
772 | :103030000100400031286C7086A00100C0002028EB | ||
773 | :103040006E707800C4286C7086A00500C0002F2820 | ||
774 | :10305000887068201B68040017680000206885A03D | ||
775 | :10306000080022686F700000112004006C7186A1B6 | ||
776 | :1030700001004000522886A10700C0004228092014 | ||
777 | :1030800038520B20050078005228092013520421E1 | ||
778 | :10309000092012520A20092038520B2001006F70BB | ||
779 | :1030A000000073700100780054286F7000007810E1 | ||
780 | :1030B00087487E15A9201000392000007810B0370D | ||
781 | :1030C000B8A700017000632878005B287F150070A6 | ||
782 | :1030D0007900672895287C287C286F2895289528D2 | ||
783 | :1030E0009528952821205A52042405A040009528AF | ||
784 | :1030F00006ADC0007C280068222078008C2820685B | ||
785 | :1031000084A00100C0008828146F7810BD387810A2 | ||
786 | :10311000A23478008C2860706020006802601A6A0F | ||
787 | :1031200017680000206885A0080022687810DC1C61 | ||
788 | :10313000212000767810D12821205A527810D128E9 | ||
789 | :103140007E15A9200000212000757810D128208448 | ||
790 | :103150007000A9287800A2286120005521200200D3 | ||
791 | :10316000A920000118601061FF814000B82802A169 | ||
792 | :103170005000B82812601B600000E0AC1000700026 | ||
793 | :10318000C0287800AF282184C000AD287F159C702E | ||
794 | :1031900084A000804000CB287810CE3A0370000055 | ||
795 | :1031A0004B7000007800FA247E04042405A040003F | ||
796 | :1031B000E528682000687E001A6A17680000206809 | ||
797 | :1031C00085A0080022687810DC1C7F007800D328D6 | ||
798 | :1031D0007F04232000007C0082A203005000EF281F | ||
799 | :1031E00078108C2400237900F228F5286829852995 | ||
800 | :1031F00082A202004000FB2878108C246C706F7053 | ||
801 | :10320000000093700000790002290A290A290C297C | ||
802 | :103210004029D7340A2940290A2978108C2480773C | ||
803 | :103220007810B0378077BCA7000F7810BD381860D1 | ||
804 | :1032300005A0400037292120007609200400112034 | ||
805 | :1032400010007810A029400037297E15A920000021 | ||
806 | :10325000212000757E040920040011201000781040 | ||
807 | :10326000A0297F0440003629208470003629780088 | ||
808 | :1032700027297F15388784A71F00C00012297800EE | ||
809 | :1032800023257800232580777810BD38186005A0A5 | ||
810 | :103290004000662921200076092005001120200029 | ||
811 | :1032A0007810A029400066297E15A9200000212061 | ||
812 | :1032B00000757E0409200500112020007810A02947 | ||
813 | :1032C0007F04400065292084700065297800562914 | ||
814 | :1032D0007F1578002325002279006B296E2970293B | ||
815 | :1032E000702978108C24092012006C7086A00200CE | ||
816 | :1032F0004000792909200E00186884A00080400051 | ||
817 | :103300007F291A696F7000007370010078005639C8 | ||
818 | :103310000022790088298D2970298B2978108C2426 | ||
819 | :1033200078108748007086A00100C00067347810CC | ||
820 | :10333000B834086084A0EFFF0A6078105A34400067 | ||
821 | :10334000673478003526042405A04000C32968208E | ||
822 | :10335000042D7E00146806A74000AF29202D7F00B1 | ||
823 | :103360007800A1297F0022201A69176800002068D0 | ||
824 | :1033700005A222687810DC1C1060018012600860D1 | ||
825 | :1033800084A0EFFF0A607810B8347C0085A00100AB | ||
826 | :103390007800C22900237900CA29CF29CD29682ABB | ||
827 | :1033A00078108C24EC7884A00100C000E329007020 | ||
828 | :1033B00086A00400C000DB297800062A7810B83403 | ||
829 | :1033C000086084A0EFFF0A6078006734E47805A005 | ||
830 | :1033D000D000062A1800FA24082084A03000C0007B | ||
831 | :1033E000F2291B784F007800FA24EC7884A00300BF | ||
832 | :1033F0004000EE29002184A007007900FC293F2A23 | ||
833 | :103400004A2A302A042ABB39BB39042A592A78109F | ||
834 | :103410008C24007086A00400C000202A6C7086A056 | ||
835 | :103420000200C000162A11200200192000007800B6 | ||
836 | :10343000E9286C7086A006004000102A6C7086A0F7 | ||
837 | :1034400004004000102AE47984A1300040002A2AB8 | ||
838 | :10345000EC7884A00300C0002C2A78000C300120F6 | ||
839 | :1034600003007800A02D186884A000804000372A4F | ||
840 | :103470001B681D0078108F372B7808301B7856009A | ||
841 | :103480007800FA24186884A000804000462A1B684F | ||
842 | :103490001D0078108F3778008639186884A0008066 | ||
843 | :1034A0004000512A1B681D0078108F372B78083098 | ||
844 | :1034B0001B78CA007800FA24186884A000804000B5 | ||
845 | :1034C000602A1B681D0078108F372B7808301B7816 | ||
846 | :1034D0008F007800FA2484A50F00C000852A0070B0 | ||
847 | :1034E00079006F2A2325792A772A6734673467346D | ||
848 | :1034F0006734772A78108C247810B834086084A058 | ||
849 | :10350000EFFF0A6078105A3440006734780035269F | ||
850 | :10351000E47805A0D000062A1800062A082084A016 | ||
851 | :103520003000C000942A1B784F007800FA24EC7811 | ||
852 | :1035300084A003004000902A002184A107007900A4 | ||
853 | :103540009E2AB02AB42AA82AA62ABB39BB39A62AA1 | ||
854 | :10355000B13978108C24781097372B7808301B7885 | ||
855 | :1035600056007800FA24781097377800863978105A | ||
856 | :1035700097372B7808301B78CA007800FA24781027 | ||
857 | :1035800097372B7808301B788F007800FA240023B7 | ||
858 | :103590007900C72ACC2ACA2ACE2A78108C2478002F | ||
859 | :1035A00080311B680800A3780000E47984A1300012 | ||
860 | :1035B00040008031EC7884A003004000803184A179 | ||
861 | :1035C00007007900E02AE82AB42A302A5639BB39A4 | ||
862 | :1035D000BB39E82AB13978106A397800FA2482A216 | ||
863 | :1035E00005005000F22A78108C2400237900F52A77 | ||
864 | :1035F000F82A4D2D5B2D00227900FB2A152B022B7A | ||
865 | :10360000152B002B322D78108C249B781800A8786D | ||
866 | :1036100084A0FF0082A0200048006B378AA004002D | ||
867 | :10362000C8006B377900112B6B376B376B37193745 | ||
868 | :103630009B781800A87984A180004000262B780090 | ||
869 | :103640006B37007005A0C0001C2B1120040078000F | ||
870 | :10365000E93284A1FF008AA01000C8006B3779000E | ||
871 | :103660002E2B402B3E2B582B5C2B172C6B376B379C | ||
872 | :10367000192C6B376B372E2D2E2D6B376B376B3725 | ||
873 | :10368000302D78108C2484A6001040004D2B012092 | ||
874 | :103690000005008000803A781B788D007800FA24BD | ||
875 | :1036A000186884A000804000562B1B681D0078001D | ||
876 | :1036B000442B780056391B681D0078007B37206941 | ||
877 | :1036C000226984A60018C0009D2B206884A00100F8 | ||
878 | :1036D000C000A52B186886A00800C0006E2B1B68D0 | ||
879 | :1036E000000084A600044000132C84A68000400043 | ||
880 | :1036F000992B97700000186884A03F008AA00D00E5 | ||
881 | :103700005000992B8AA00C00967101200C000C80AF | ||
882 | :103710009A719B786100AA787E157E137E14A12091 | ||
883 | :103720002B019B7800000080AC8080AD0B009820BE | ||
884 | :10373000A6537F147F137F151B7858007800FA2456 | ||
885 | :1037400084A600104000A52B1B7865007800FA24A1 | ||
886 | :1037500084A6600040000F2C84A6000840000F2CB7 | ||
887 | :1037600084A60080C000B32B7800CB2BB4A6FF7FCB | ||
888 | :103770005A7EB66EDC7AD879D0781B80C800BE2B12 | ||
889 | :10378000008084A03F0008A191A20000986B002156 | ||
890 | :1037900002A3B268946B002203A3AE6884A6004023 | ||
891 | :1037A0004000D32BB4A6FFBF5A7EB66E007086A031 | ||
892 | :1037B0000300C000E02B78103D4978103A4B1B788D | ||
893 | :1037C00064007800FA2406A07810414CB06AAC6915 | ||
894 | :1037D000986C946B002205A14000EF2B002222A4DC | ||
895 | :1037E00000211BA3AA6CD27CDA7CA66BD67BDE7B85 | ||
896 | :1037F000002305A4C000012CB5A600405A7EB66E79 | ||
897 | :103800001B7864007800FA241B786400002215A15C | ||
898 | :10381000C0000B2C78104B4B7800FA247810964B94 | ||
899 | :103820007800FA241B7865007800FA241B78580089 | ||
900 | :103830007800FA2478108C2478007A2C206984A1EE | ||
901 | :1038400000014000312C8CA1FFFE22697E0C5470D7 | ||
902 | :103850006020006084A0FFEF0260046084A0F5FF98 | ||
903 | :1038600006607F0C7800692C84A100024000692C5E | ||
904 | :103870008CA1FFFD22697E0C54706020006084A042 | ||
905 | :10388000FFDF0260046084A0EFFF06600820482C80 | ||
906 | :103890007F0C84A108004000692C7810B93878109A | ||
907 | :1038A000BB35FF884000692C9B7860000028AA780F | ||
908 | :1038B000587EB5A604005A7E84A60004C000632C7E | ||
909 | :1038C0002B7808301B7856007800FA242B780830C3 | ||
910 | :1038D0001B7865007800FA24587E84A60004C00096 | ||
911 | :1038E000722C1B7858007800FA241B786500780049 | ||
912 | :1038F000FA24780073377800733719200000907924 | ||
913 | :103900008CA10700C000882C206884A00001400022 | ||
914 | :10391000782C092008009B781000A87894A0FF005C | ||
915 | :1039200086A20100C000BF2C0023A87C00A41820A0 | ||
916 | :1039300002A14000B72C48009C2C7800B92C80A331 | ||
917 | :10394000020002A1C800B72C20698CA1FFFC2269EB | ||
918 | :103950007E0C54706020006084A0EFEF0260046071 | ||
919 | :1039600084A0E5FF06607F0C587EB4A6FBFF5A7E5C | ||
920 | :1039700078006A2C78001B2CA824A87AF000B92CB7 | ||
921 | :1039800078008A2C84A2F00086A02000C0001F2DA1 | ||
922 | :1039900018831883002302A14000CF2C4800CF2CAD | ||
923 | :1039A00078001C2D86A223004000782C1C6884A07F | ||
924 | :1039B000F1FF1E68587E84A6F1FF85A0100030201C | ||
925 | :1039C0005A7E086085A010000A607E0C547060204A | ||
926 | :1039D00004600820482C7F0C84A110004000F32CC8 | ||
927 | :1039E0007810B9387810D0367800022D7E0C5470DB | ||
928 | :1039F000602004600820482C7F0C84A1080040004F | ||
929 | :103A0000692C7810B9387810BB35FF884000692CD4 | ||
930 | :103A10009B7860000028AA78B5A604005A7E84A688 | ||
931 | :103A20000004C000162D2B7808301B785600780053 | ||
932 | :103A3000FA242B7808301B7865007800FA24A87ADD | ||
933 | :103A400078008A2C1883002302A14000282D48000A | ||
934 | :103A5000282D78008A2C84A28000C0007B37780053 | ||
935 | :103A6000733778007B3778006B379B781800A8781D | ||
936 | :103A700084A0FF008EA0010040003D2D78108C2412 | ||
937 | :103A8000A87A94A2FF00A87884A0FF008AA004006E | ||
938 | :103A9000C8006B377900492D6B3708356B376536B1 | ||
939 | :103AA00082A20000C000532D78108C2478108F372C | ||
940 | :103AB0002B7808301B7865007800FA2482A2030076 | ||
941 | :103AC000C000612D78108C2484A40080C000842D57 | ||
942 | :103AD0006C7005A040006B2D78108C24146F8277D9 | ||
943 | :103AE000BCA7000F7810BD38086085A021000A60CF | ||
944 | :103AF000388784A71F00C0006F2D781093376F7030 | ||
945 | :103B00000200092038520B2009007800862D781019 | ||
946 | :103B10009F372B7808301B7865007800FA2482A242 | ||
947 | :103B200004005000922D78108C2400237900952DEC | ||
948 | :103B3000982D812EB42E86A2030040009E2D781071 | ||
949 | :103B40008C24012000007E00C06805A04000A72D45 | ||
950 | :103B500003700300A06884A000204000B02D08601E | ||
951 | :103B600085A002000A607F003E70007084A00700FC | ||
952 | :103B70007900B72D2325C12DC12DB62FF22F232576 | ||
953 | :103B8000F22FBF2D78108C2484A60010C000C92D00 | ||
954 | :103B90007810874840005B2E68788CA0FF004000BA | ||
955 | :103BA000112E86A10800C000E02D7810B8340860FE | ||
956 | :103BB00084A0EFFF0A6078105A344000112E78106C | ||
957 | :103BC00087487800F82D86A12800C000112E7810B3 | ||
958 | :103BD0008748086084A0EFFF0A60186005A04000D5 | ||
959 | :103BE000F82D01801A6005A04000F82D018005A085 | ||
960 | :103BF0004000F82D1E60206884A0010040002325AD | ||
961 | :103C0000206884A0FEFF226860707E0C602000683F | ||
962 | :103C100002607F0C0460026805A0002DC0000E2E1B | ||
963 | :103C200002600660780023257E017810E52E7F0172 | ||
964 | :103C300084A600DF1E682B680000146FFF8140001F | ||
965 | :103C40005B2E86A10200C0005B2E84A60008C00087 | ||
966 | :103C50002E2E84A6600040002E2ED878DC7A2E68A6 | ||
967 | :103C6000326A206884A00008C0005B2E178794A2E7 | ||
968 | :103C70000F0013821382138290A2805490A200003E | ||
969 | :103C80001C2284A30001C000442E78004A2E10821A | ||
970 | :103C9000042285A018001220118284A30004400091 | ||
971 | :103CA000572EA06884A00001C000572E7810692FFD | ||
972 | :103CB00078002325086085A002000A60166918684C | ||
973 | :103CC00084A000804000632E3C701A688CA600DF40 | ||
974 | :103CD0001E697810A9347810B834C000702E0860BE | ||
975 | :103CE00084A0EFFF0A60206884A00100C000792E44 | ||
976 | :103CF0007810A23478007D2E607060200068026029 | ||
977 | :103D00007810DC1C7800232582A204004800872E4E | ||
978 | :103D100078108C24002279008A2E852E8E2E9B2EE0 | ||
979 | :103D20008E2E007086A005004000972E78108F37E9 | ||
980 | :103D30002B7808301B7865007800FA24907807808B | ||
981 | :103D4000018084A0070080A018009A78A8798CA12F | ||
982 | :103D5000FF0086A103004000B02E86A100004000B5 | ||
983 | :103D6000B02E78006B371B7865007800FA24206845 | ||
984 | :103D700085A004002268FF82C000BF2E78108F3714 | ||
985 | :103D80007800C62E11824000C42E78108C24781042 | ||
986 | :103D90009F372B7808301B7865007800FA242C7048 | ||
987 | :103DA00003804800D62E1920AF4E781013232F70B1 | ||
988 | :103DB00000807810E039307884A0C000C000E22E86 | ||
989 | :103DC0001800E22E1A7906A07C0085A001007C0074 | ||
990 | :103DD00084A66000C000EF2E2F680000336800004A | ||
991 | :103DE0007800682F84A60008C000112FB46884A052 | ||
992 | :103DF000004835A684A60008C000112F9869946A6F | ||
993 | :103E00002E69326A3C7005A0C000092F002205A16E | ||
994 | :103E10004000102F3F701500007086A00600400083 | ||
995 | :103E2000102F781087487C0084A620004000332F94 | ||
996 | :103E300084A6004040001F2F2F6800003368000058 | ||
997 | :103E40007800092FB46884A0004835A684A60040F5 | ||
998 | :103E5000C000192F3C7005A0C0002D2F3F70150029 | ||
999 | :103E6000D879DC7A2E69326A7800092F84A600405E | ||
1000 | :103E700040003D2F2F680000336800007800092FB4 | ||
1001 | :103E8000B46884A0004835A684A60040C000372F3F | ||
1002 | :103E90003C7005A0C0004B2F3F701500D879DC7A2C | ||
1003 | :103EA000D078FB80C800522F008084A03F0008A17A | ||
1004 | :103EB00091A200002E69326A002105A2C0005F2F86 | ||
1005 | :103EC0007800092F007086A006004000682F781047 | ||
1006 | :103ED000414C7800092F7C00086085A000020A6030 | ||
1007 | :103EE00084A300024000752F086085A002000A60CC | ||
1008 | :103EF0001B6806008F68000093680000306A2C6918 | ||
1009 | :103F00003E6A42692F68030033680000376820006A | ||
1010 | :103F1000976800009B682000B3680000AF6800004D | ||
1011 | :103F200000707900902F23259A2FA32F982F982F78 | ||
1012 | :103F3000982F982F982F78108C24206884A0010047 | ||
1013 | :103F4000C000A32F7810A2347800A92F6070502CE5 | ||
1014 | :103F5000602000680260602A21205A52042405A0D3 | ||
1015 | :103F60004000B22F20207800AB2F222D6B200000C4 | ||
1016 | :103F70007C007810A9347810B834086084A0FFFD64 | ||
1017 | :103F80000A602B6800009B780E00146F176802000F | ||
1018 | :103F90007810894C84A600084000CF2F1C698DA1A1 | ||
1019 | :103FA00000201E69186884A000804000DF2F687818 | ||
1020 | :103FB0008CA0FF004000DD2F1B681E007800DF2F63 | ||
1021 | :103FC0001B68000021205A52042406AD4000E62F51 | ||
1022 | :103FD000607400682220C36800003C6A4069326A4D | ||
1023 | :103FE0002E697810DC1C780023257810E52E2B68CC | ||
1024 | :103FF000000001200E00146F7810E6398CA0FF003D | ||
1025 | :104000001669186884A00080400005303C701A686A | ||
1026 | :104010008CA600DF1E696F700000780023250070F9 | ||
1027 | :1040200005A0C00012307800232506A0781087482C | ||
1028 | :10403000176800001B6814008CA600DF1E692B683F | ||
1029 | :104040000000206885A0FF002268007079002530FC | ||
1030 | :1040500023252F302F3031303130313031302D3079 | ||
1031 | :1040600078108C247810B834086084A0EFFF0A60C0 | ||
1032 | :1040700078007234002379003A303D303F30983078 | ||
1033 | :1040800078108C2484A60080C0007D3000707900F8 | ||
1034 | :1040900046302325503050306C30503079306C3001 | ||
1035 | :1040A0004E3078108C2484A6600086A06000C0008A | ||
1036 | :1040B0006830B4A6DFFFB4A6FFBFB5A600205A7EC5 | ||
1037 | :1040C000B66E1C6884A0DFFF1E68781087487810E1 | ||
1038 | :1040D0004B4B7800563984A6002040005A301868AF | ||
1039 | :1040E00084A00080400079301B68150084A6004041 | ||
1040 | :1040F000400079301B68070078106A397800FA248C | ||
1041 | :10410000B4A6FF7F5A7EDC7AD879D078D2791B802A | ||
1042 | :10411000C8008830008084A03F0008A191A2000060 | ||
1043 | :10412000986B002102A3B268946B002203A3AE68CF | ||
1044 | :104130001B7865007C0078108C24002379009D306A | ||
1045 | :10414000A030A230EB3078108C2484A60080C00010 | ||
1046 | :10415000DA3000707900A9302325B330B330CF3086 | ||
1047 | :10416000B330D630CF30B13078108C2484A66000C4 | ||
1048 | :1041700086A06000C000CB30B4A6BFFFB4A6FFBFCE | ||
1049 | :10418000B5A600205A7EB66E1C6884A0BFFF1E68CC | ||
1050 | :104190007810874878104B4B7800563984A6002059 | ||
1051 | :1041A0004000BD30186884A000804000D6301B68F5 | ||
1052 | :1041B00007001B78CA007800FA24B4A6FF7F5A7E55 | ||
1053 | :1041C000DC7AD879986B002102A3B268946B002244 | ||
1054 | :1041D00003A3AE68D2791B7865007C00206885A0B7 | ||
1055 | :1041E0000400226878102139B5A6000878108F37AE | ||
1056 | :1041F0002B7808301B7865007800FA2400237900BA | ||
1057 | :10420000FE3001310331053178108C2478007B3782 | ||
1058 | :1042100084A60004C0002E31E47984A1200040006F | ||
1059 | :104220001531EC7884A00300400015312B7809305B | ||
1060 | :104230009B786000AB78000084A6FBFF5A78E47995 | ||
1061 | :1042400084A1200040002631EC7884A00300C00047 | ||
1062 | :104250002A31012014007800A02D84A107007900E4 | ||
1063 | :104260006631907A94A207009B786000A879FF815C | ||
1064 | :10427000400064319B781000A87B84A30100C0003B | ||
1065 | :104280005531A87BA87B86A30100C00048310920D6 | ||
1066 | :10429000F7FF78004E3186A30300C0005531092096 | ||
1067 | :1042A000EFFF7E0C54706020046004A106607F0C58 | ||
1068 | :1042B0009B786000AB78000084A6FBFF5A782B78CF | ||
1069 | :1042C000093020698CA1FFFD8CA1FFFE22697800D6 | ||
1070 | :1042D00056393F2A4A2A703178316E316E3156395B | ||
1071 | :1042E000563978108C2420698CA1FFFD8CA1FFFE2B | ||
1072 | :1042F00022697800603920698CA1FFFD8CA1FFFE46 | ||
1073 | :10430000226978005639E47984A1300040008A316E | ||
1074 | :10431000EC7884A00300C000B131007086A00400D6 | ||
1075 | :10432000C000A4316C7086A00200C0009A31112038 | ||
1076 | :104330000200192000007800E9286C7086A00600B1 | ||
1077 | :10434000400094316C7086A00400400094310070ED | ||
1078 | :1043500086A000004000FA24186885A000801A6832 | ||
1079 | :10436000012014007800A02D84A107007900B53148 | ||
1080 | :1043700056395639BD315639BB39BB39563956399C | ||
1081 | :1043800084A680004000EC319471FF814000EC3144 | ||
1082 | :1043900082A10D00D000CD31977000007800D2319D | ||
1083 | :1043A00082A10C00967009200C009B786100AA790C | ||
1084 | :1043B0007E157E137E149870148110A29A7280A0CC | ||
1085 | :1043C0000B0000AD9820A1202B019B7800000881F4 | ||
1086 | :1043D000AC81A6537F147F137F157800603984A6C3 | ||
1087 | :1043E0000004C0002D32206884A001004000603924 | ||
1088 | :1043F0008CA6600084A660004000013286A06000A8 | ||
1089 | :10440000C00001328DA100408CA1FBFF5A79B66932 | ||
1090 | :104410009B786000AB7800009B786100186885A0ED | ||
1091 | :1044200000801A68AA7808800C814000D1348CA1E1 | ||
1092 | :10443000F800C000D1347E157E137E14A1202B011C | ||
1093 | :104440009B7800000080AC8080AD0B009820A653C4 | ||
1094 | :104450007F147F137F151468078082787800603995 | ||
1095 | :10446000186884A00080400034321B6808001B7864 | ||
1096 | :10447000C0007800FA24002379003B324032D43265 | ||
1097 | :104480003E3278108C24007084A0070079004532F9 | ||
1098 | :1044900023254F3284325A324D3223254D324D324C | ||
1099 | :1044A00078108C241C6884A00020400068320860CA | ||
1100 | :1044B00085A002000A6078006832C06805A0C000CC | ||
1101 | :1044C000843220698DA101002269C368010000685F | ||
1102 | :1044D0006A7078007E3220698DA10100226900682F | ||
1103 | :1044E000066005A0C000723202601C6884A00E0045 | ||
1104 | :1044F00040007E321470BA68307188A1007578006F | ||
1105 | :10450000803209200076042102680A2D6271B66E9D | ||
1106 | :1045100084A660004000D23284A60008C000983211 | ||
1107 | :1045200084A6FF7FB6689468A6689868AA68781021 | ||
1108 | :1045300087487800D23284A620004000AD32C0689F | ||
1109 | :1045400005A04000A4327810894C7800A73206A05C | ||
1110 | :104550007810414CD879DC7AAA69A66A7800B3321F | ||
1111 | :104560007810CA38AA69A66A7810414C84A60080DF | ||
1112 | :104570004000D23284A6FF7FB668DC7AD87984A660 | ||
1113 | :104580002000C000CA32D0781B80C800C53200802D | ||
1114 | :1045900084A03F0008A191A20000986B002102A313 | ||
1115 | :1045A000B268946B002203A3AE68780023257800DC | ||
1116 | :1045B0007B373770000082A206005000DE32781090 | ||
1117 | :1045C0008C24007084A00700C0108C3A002379006E | ||
1118 | :1045D000E632E9321233263300227900EC3210330E | ||
1119 | :1045E0007B37F232103342338433037005000120ED | ||
1120 | :1045F000107768204A707E15A92031000320000042 | ||
1121 | :104600000080700002337800FB327F1580AD090016 | ||
1122 | :10461000367017680000B76800072368000827682D | ||
1123 | :10462000030078006B3778108C240370050001209C | ||
1124 | :10463000107768204A7080AD09003670002279003A | ||
1125 | :104640001E337B3724332433423324337B377810B3 | ||
1126 | :104650008C24037005000120107768204A7080AD1B | ||
1127 | :10466000090036700022790032333A333833383358 | ||
1128 | :104670003A3338333A3378108C2478109F372B78BC | ||
1129 | :1046800008301B7865007800FA2403700200807AF5 | ||
1130 | :1046900094A2000F9B781800A87C84A41F0015A288 | ||
1131 | :1046A00069200076042D082D6271682005A0400065 | ||
1132 | :1046B0005D33146806A240007933006878005033F7 | ||
1133 | :1046C000037005000120107768204A7036707E154F | ||
1134 | :1046D000A920310003200000008070006E337800B4 | ||
1135 | :1046E00067337F1580AD09003670166AB76800071A | ||
1136 | :1046F0002368000827680300B46E5A7E206884A0EF | ||
1137 | :10470000000C4000D333781097377800D333037010 | ||
1138 | :104710000200807A94A2000F9B781800A87C84A4E1 | ||
1139 | :104720001F0015A2A879A8798CA1FF00E8A1007547 | ||
1140 | :10473000042D082D6271682005A04000A333146881 | ||
1141 | :1047400006A24000BE33006878009633037005006F | ||
1142 | :104750000120107768204A707E15A92031000320BF | ||
1143 | :10476000000000807000B3337800AC337F1580AD5B | ||
1144 | :1047700009003670166AB7680007236800082768C2 | ||
1145 | :104780000300B46E5A7E206884A0000C4000D3332E | ||
1146 | :1047900084A000084000CD3378109B377800D333D5 | ||
1147 | :1047A000781097378B7000007800D3337E02078231 | ||
1148 | :1047B00084A00F0003800380038080A080546020C9 | ||
1149 | :1047C000567000605A7004605E7084A660004000FD | ||
1150 | :1047D0002B34986B946CAC69B06805A1C0000D34A3 | ||
1151 | :1047E000D27BDA7BD67CDE7CB4A6FFB75A7E84A669 | ||
1152 | :1047F000600086A0600040002B34C06805A0400027 | ||
1153 | :104800000634037003002B68000078103A4B7800E0 | ||
1154 | :10481000083478104B4BB5A600205A7E78002B3414 | ||
1155 | :10482000B0681AA3002123A4002405A340002B3460 | ||
1156 | :10483000D27BDA7BD67CDE7CB068B4A6FFBF5A7E22 | ||
1157 | :104840007E00C06805A07F0040002934037003008B | ||
1158 | :1048500078103A4B78002B347810964B7F077810FD | ||
1159 | :10486000BD380920650084A6040040004C34E4787B | ||
1160 | :1048700084A0300040004434EC7884A00300400061 | ||
1161 | :1048800044342B7808300920650078004C347E0FC2 | ||
1162 | :1048900079200052781087487F0F400023251A792D | ||
1163 | :1048A000002D4A70078284A00F00038003800380DC | ||
1164 | :1048B00080A0805448207800FA24206005A04000A1 | ||
1165 | :1048C000663401802260086085A008000A601070CC | ||
1166 | :1048D00026607C0006A078108748176800001B68D7 | ||
1167 | :1048E0000100236840001F680001007084A00700D9 | ||
1168 | :1048F000790077342325813481349E348934873498 | ||
1169 | :1049000089347F3478108C247810A9347810A2343C | ||
1170 | :104910007810DC1C780023256C706F700000937099 | ||
1171 | :104920000000790090349A349A349834983498344A | ||
1172 | :104930009A3498349A34790002296F700000780014 | ||
1173 | :1049400023251B6800007800B62F006805A0C00072 | ||
1174 | :10495000A734026006607C00106005A04000B234FD | ||
1175 | :104960000180D000B23478108C241260086084A0DA | ||
1176 | :10497000EFFF0A607C00186005A04000BE34018093 | ||
1177 | :104980001A607C007810E0391B6818007800F53454 | ||
1178 | :104990007810E0391B6819007800F5347810E03998 | ||
1179 | :1049A0001B681A007800F5347810E0391B680300A2 | ||
1180 | :1049B0007800F53480777810BD3884718CA1FF00C1 | ||
1181 | :1049C000E8A10075042D082D682005A0C000E7347B | ||
1182 | :1049D000780023251468807206A24000EF34006836 | ||
1183 | :1049E0007800E03400680A201B6805008B70000026 | ||
1184 | :1049F0007810A934206884A00100C000FE3478102B | ||
1185 | :104A0000A2347810B8341F680000236820007810A2 | ||
1186 | :104A1000DC1C7800232582A20300C0006B37A87D30 | ||
1187 | :104A2000ACA5FF00A87CA4A4FF0020698DA1800094 | ||
1188 | :104A3000226984A1000140006C358CA1FFFE22692F | ||
1189 | :104A4000A4A4FF004000563582A40C00480029357C | ||
1190 | :104A50004000293521200C002B852B8578102E381D | ||
1191 | :104A6000400033357810273678005F357810E93705 | ||
1192 | :104A70007E0C6029046084A0F5FF06607810523631 | ||
1193 | :104A80007F0C20698DA100012269587EB5A6040023 | ||
1194 | :104A90005A7E84A60004C00050352B7808301B785D | ||
1195 | :104AA00056007800FA242B7808301B7865007800CF | ||
1196 | :104AB000FA247E0C6029046084A0F5FF066078105B | ||
1197 | :104AC00052367F0C587E84A60004C00068351B78DF | ||
1198 | :104AD00058007800FA241B7865007800FA247E0CD0 | ||
1199 | :104AE0005470602000618CA100104000AC35086259 | ||
1200 | :104AF000178294A2FF0082A20C004800803540007B | ||
1201 | :104B0000803511200C00002402A2C8008535202227 | ||
1202 | :104B1000086294A2FF00187086A02800C000953596 | ||
1203 | :104B200082A21900C8009B351120190078009B351E | ||
1204 | :104B300082A20C00C8009B3511200C00002202A5A7 | ||
1205 | :104B4000C800A03528227810ED372B852B857810EA | ||
1206 | :104B50002E384000AC35781027367800B035781004 | ||
1207 | :104B6000E93778105236587885A004005A787F0CBF | ||
1208 | :104B70002B7808301B7865007800FA247E0C6029B9 | ||
1209 | :104B80000060E4D0C000D535B4D0C000CF3510608F | ||
1210 | :104B900084A00F00C000CF3504618CA1F5FF066131 | ||
1211 | :104BA0007F0C7C0011203200192000007800FC35B9 | ||
1212 | :104BB000A06884A00002C000CF35086294A2FF0064 | ||
1213 | :104BC000187086A02800C000EA3582A21900C8002B | ||
1214 | :104BD000F035112019007800F03582A20C00C800D1 | ||
1215 | :104BE000F03511200C0008631F839CA3FF0082A3F3 | ||
1216 | :104BF0000C004800FC354000FC3519200C00AB7857 | ||
1217 | :104C00000100AB780300AB780100AA7AAA7BC0A8A8 | ||
1218 | :104C10000500206885A0000122687F0C7C007E0CC6 | ||
1219 | :104C200060298CA1F5FF06611120320019200000D7 | ||
1220 | :104C300078001736AB780100AB780300AB78010041 | ||
1221 | :104C4000AA7AAA7BC0A80500206885A00001226876 | ||
1222 | :104C50007F0C7C007E0C5471602178102E367F0C06 | ||
1223 | :104C60007C00082084A0F0FF25A4867C18609A7838 | ||
1224 | :104C7000AE7C1264A47884A0F8FF8CA1070005A183 | ||
1225 | :104C8000A67816608A78A4A40F0027840482048082 | ||
1226 | :104C900084A0FF0005A40E60EC788CD0C0005136D3 | ||
1227 | :104CA000046084A0F5FF06607C007E0C54706020D8 | ||
1228 | :104CB000781059367F0C7C0018609A78A47884A00C | ||
1229 | :104CC000F0FFA6781260847884A0F0FF86787C00DC | ||
1230 | :104CD00082A20200C0006B37A87A20698DA18000F3 | ||
1231 | :104CE000226984A100024000AE368CA1FFFD22693A | ||
1232 | :104CF00094A2FF0082A20200C8006B377810F93638 | ||
1233 | :104D00007810523680A901000C207810B93878103C | ||
1234 | :104D1000BB35FF884000A1369B7860000028AA7848 | ||
1235 | :104D2000587EB5A604005A7E84A60004C0009B36B7 | ||
1236 | :104D30002B7808301B7856007800FA242B7808303E | ||
1237 | :104D40001B7865007800FA24587E84A60004C00011 | ||
1238 | :104D5000AA361B7858007800FA241B786500780082 | ||
1239 | :104D6000FA2482A20200C800B63684A201004000E4 | ||
1240 | :104D7000C036547188A100000C218CA10020C00015 | ||
1241 | :104D8000C036112000007810DB377810F936781023 | ||
1242 | :104D90005236587885A004005A782B7808301B7852 | ||
1243 | :104DA00065007800FA247E0C7E02602900601120E4 | ||
1244 | :104DB0000100ECD0C000E936BCD0C000E73614607A | ||
1245 | :104DC00084A04000C000E7368CA1EFFF066106A07A | ||
1246 | :104DD0007800F63611200000AB780100AB780200B5 | ||
1247 | :104DE000AB780300AA7AC0A80400206885A000025E | ||
1248 | :104DF00022687F027F0C7C007E0C5470602078104B | ||
1249 | :104E000000377F0C7C00FF824000053711204000F6 | ||
1250 | :104E1000186080A002009A78A47884A0BFFF05A241 | ||
1251 | :104E2000A6788A781660EC788CD0C00018370460B9 | ||
1252 | :104E300084A0EFFF06607C007E00007086A0030067 | ||
1253 | :104E4000400022377F00780025377F0078006737E1 | ||
1254 | :104E500084A6200040006737887884A04000400086 | ||
1255 | :104E60006737B87B84A33F001B83C80035370080B9 | ||
1256 | :104E700005A040004B371B83C8003E37018040002F | ||
1257 | :104E8000633784A6004040004B37B8781B80C800C9 | ||
1258 | :104E90004737008084A03F00C0006337B4A6FFBF3F | ||
1259 | :104EA0005A7ED879DC7A0120010008A1C800573762 | ||
1260 | :104EB00091A20000D279DA79D67ADE7A7810414C64 | ||
1261 | :104EC0001B7864007810C64A7800FA241B786400C6 | ||
1262 | :104ED0007800FA241B7865007800FA247810A3374C | ||
1263 | :104EE0002B7808301B7865007800FA2478108F370B | ||
1264 | :104EF0002B7808301B7865007800FA2427680200B8 | ||
1265 | :104F000078109737E47884A0300040002325EC78AF | ||
1266 | :104F100084A00300400023252B7808301B7865000F | ||
1267 | :104F20007800FA24012005007800A53701200C0044 | ||
1268 | :104F30007800A537012006007800A53701200D0074 | ||
1269 | :104F40007800A537012009007800A5370120070067 | ||
1270 | :104F50009B781000AA789B786000AB780100B5A61A | ||
1271 | :104F600004005A7E7C007E073F87BCA70F003B876A | ||
1272 | :104F70003B870387E0A08054B8A720009A7FA479DC | ||
1273 | :104F800084A10F004000C93784A1F0FFA678126009 | ||
1274 | :104F9000046085A008000660388738879A7FA47966 | ||
1275 | :104FA00084A140004000D93784A1BFFFA6781660D5 | ||
1276 | :104FB000046085A0100006607F077C009B781000CD | ||
1277 | :104FC000AB780100AB780200AB780300AA7A9B783B | ||
1278 | :104FD0006000AB7804007C00212000002920320012 | ||
1279 | :104FE0009B781000AB780100AB780300AB78010030 | ||
1280 | :104FF000AA7DAA7C9B786000AB7805007C007E15BA | ||
1281 | :10500000078084A0FF000380038080A020009A789E | ||
1282 | :10501000A4798CA1F0FF01204652042082A0280030 | ||
1283 | :10502000400017382120A03819201400A9200C00B6 | ||
1284 | :1050300078001D382120AC3819201900A9200D0056 | ||
1285 | :1050400011206400042484A0F0FF06A140002C3845 | ||
1286 | :105050002084002310A270002C3878001F387F15A0 | ||
1287 | :105060007C007E15092046520C2182A132004800A6 | ||
1288 | :105070004238400046380920923819201100A920F2 | ||
1289 | :105080000E00112032007800583882A1280040001C | ||
1290 | :1050900050380920A03819201400A9200C00112034 | ||
1291 | :1050A0006400780058380920AC3819201900A9206C | ||
1292 | :1050B0000D0011206400002202A54000683848005D | ||
1293 | :1050C00068380881002310A27000653878005838CD | ||
1294 | :1050D0007F1506A07C007F1582A56400C800773884 | ||
1295 | :1050E000087885A070000A78447085A0700046702A | ||
1296 | :1050F00078007738EC7884A0000340007F380421E2 | ||
1297 | :105100007800903804219EA00211C0009038012040 | ||
1298 | :10511000FD04042082A0050048008F380120011200 | ||
1299 | :1051200078009038042105A07C0002110230023280 | ||
1300 | :105130000342034404540456056605680678067A5B | ||
1301 | :10514000070C070C070E0232024202520262027280 | ||
1302 | :10515000056605760578057A057C057E057F0222C1 | ||
1303 | :105160000232024202520454046404740476047845 | ||
1304 | :10517000047A047C047E047F9B78100046A07C00A7 | ||
1305 | :1051800084A7000F0B8084A71F0003800380038087 | ||
1306 | :10519000038005A1E0A000557C00D879DC7AD078A6 | ||
1307 | :1051A0001B80C800D138008084A03F0008A191A2D4 | ||
1308 | :1051B00000007C007E0F79200001092040529120E0 | ||
1309 | :1051C000008004217900E1381739EB38EB38EB38EF | ||
1310 | :1051D000EB38EB38EB381B3978108C244B78040013 | ||
1311 | :1051E000487884A00400C000ED384B780800487867 | ||
1312 | :1051F00084A00800C000F438B46885A00040B668F8 | ||
1313 | :10520000587885A000405A78307884A08000C0008B | ||
1314 | :105210001739180017391C6884A02000C000153900 | ||
1315 | :105220007E0E7120405278106A397F0E780017394F | ||
1316 | :105230001B78CA00912001807F0F7C00B3700000B2 | ||
1317 | :105240007810443B780017397E0C1468078084A0DE | ||
1318 | :105250000F00038003800380E0A08054046084A0DA | ||
1319 | :105260000A00C0005439086194A100FF400054397D | ||
1320 | :105270008CA1FF000120190006A140004339012044 | ||
1321 | :10528000320006A14000473978004B390920200040 | ||
1322 | :1052900078004D3909203F0078004D391120000079 | ||
1323 | :1052A000002105A20A60046085A0020006607F0C50 | ||
1324 | :1052B0007C001B7865007800FA242B7808301B7876 | ||
1325 | :1052C00065007800FA241B7858007800FA242B78BF | ||
1326 | :1052D00008301B7856007800FA24092020520C214F | ||
1327 | :1052E00086A1000040007E3986A10100400081397E | ||
1328 | :1052F000092038520B200B006F7001001B7848000A | ||
1329 | :105300007C001B78C4007C00092038520B200A0066 | ||
1330 | :105310007C00092020520C2186A100004000A13908 | ||
1331 | :1053200086A1010040009B39092038520B200B0058 | ||
1332 | :105330006F7001001B7848007800FA240920385269 | ||
1333 | :105340000B200A007800FA242B7808301B78C40060 | ||
1334 | :105350007800FA241B78CA007800FA242B780830E9 | ||
1335 | :105360001B78CA007800FA241B788F007800FA2492 | ||
1336 | :105370002B7808301B788F007800FA24186884A0F6 | ||
1337 | :1053800000804000C2391B681D006F7001001B784F | ||
1338 | :1053900048007800FA247E00307884A0C000C00065 | ||
1339 | :1053A000DE39087884A0FCFF0A78050005000500B6 | ||
1340 | :1053B0000500EC7884A021004000DE3944700A78B2 | ||
1341 | :1053C00005A07F007C00447085A0020046700A782A | ||
1342 | :1053D0007C007E00307884A04000C000E73998004F | ||
1343 | :1053E000F2397F009A78AC787C00087884A0FDFFC1 | ||
1344 | :1053F0000A780500050005000500EC7884A021006E | ||
1345 | :105400004000013A9800FF397F009A78AC787E001E | ||
1346 | :1054100044700A787F007C00EC7884A00200C00011 | ||
1347 | :10542000714884A77D00C000153A002778108C24AD | ||
1348 | :1054300084A70100C0000C3084A770004000253A0A | ||
1349 | :105440007E0C602D682F78103724782D682C7F0C07 | ||
1350 | :1054500084A708004000323A4B780800EC7884A01A | ||
1351 | :105460000300400023257800563984A7040040003B | ||
1352 | :10547000653AB87884A001404000653A4B7808004E | ||
1353 | :10548000EC7884A0030040002325E47884A0070082 | ||
1354 | :1054900086A00100C000653AC07885A00048302091 | ||
1355 | :1054A0005A7E1B78CA007800FA244B7808001868E6 | ||
1356 | :1054B00084A000804000613A1B68150084A600406B | ||
1357 | :1054C0004000613A1B68070078106A397800FA24B6 | ||
1358 | :1054D0001B680300587884A0003F1E682F680000F6 | ||
1359 | :1054E000336800004B780800EC7884A0030040008B | ||
1360 | :1054F000062A1800FA2478007337146B078384A0F7 | ||
1361 | :105500000F0003800380038080A080546020482027 | ||
1362 | :10551000567000605A7004605E70602A7C007900EA | ||
1363 | :105520008E3A963A973A963A993A963A963A963AFF | ||
1364 | :105530009E3A7C007810B8347810874838700A603A | ||
1365 | :105540007C00A07005A04000AB3A68207810D31B07 | ||
1366 | :105550007810FE4778100548A37000007C007E0E8E | ||
1367 | :105560009120008071204052007086A00700C0008A | ||
1368 | :10557000C23A1061BC7006A1C000C23A7F0E78101A | ||
1369 | :10558000E01B7810C83A06A07C00912001807F0EB5 | ||
1370 | :1055900085A001007C007E0F7E0E712040527800B5 | ||
1371 | :1055A00097225B780000AF700E00092000017E0199 | ||
1372 | :1055B000A0706DA04000DD3AA37000007800E33ACF | ||
1373 | :1055C000B370000078100C1C4000E93AAC702668FB | ||
1374 | :1055D0007810C63B7800DD3A7F017E157E0C7E0D8B | ||
1375 | :1055E000A920080061201076006005A102601C60FF | ||
1376 | :1055F0006DA04000013B00681E607810AC19086087 | ||
1377 | :1056000000800A607800F43A18606DA040000B3BFF | ||
1378 | :1056100000681A607810AC197800013BE0AC080013 | ||
1379 | :105620007000113B7800F13A9C7084A0008040002B | ||
1380 | :10563000183B7810443C7F0D7F0C7F157C007E1258 | ||
1381 | :1056400091200023046884A00F007900243B343BA0 | ||
1382 | :10565000343B343B343B343B343B363B3C3B343BC8 | ||
1383 | :10566000343B343B343B343B3E3B343B363B78109D | ||
1384 | :105670008C247810D3457810AC197800423B276809 | ||
1385 | :105680000B007810D3457810C63B7F127C007E1249 | ||
1386 | :10569000912000239800603B307884A0C000C000B7 | ||
1387 | :1056A000603B7E0D78101248002D2E680920040002 | ||
1388 | :1056B00001200000276884007810C7477810C63B97 | ||
1389 | :1056C0007F0D7800943B487985A100404A78980086 | ||
1390 | :1056D000693B4A7978004E3B287886A03418C00090 | ||
1391 | :1056E000723B85A104007800793B287886A01418C5 | ||
1392 | :1056F000C000663B85A10C004A789B780E00AB7811 | ||
1393 | :105700000200587884A0FF0085A000045A78B47085 | ||
1394 | :1057100080A091001A78276884022C683668306867 | ||
1395 | :105720003A6809200400012000007810C7477F1262 | ||
1396 | :105730007C007E0D146B7810701C4000A33B682029 | ||
1397 | :10574000276802007810C63B7800983B7F0D7C00EC | ||
1398 | :105750007E0D146B286CA4A4FF0078101C1C400064 | ||
1399 | :10576000B33B6820276802007810C63B7F0D7C00A1 | ||
1400 | :105770007E0D146B9CA3FF007810481C4000C43BB6 | ||
1401 | :105780006820276802007810C63B7800B93B7F0D7F | ||
1402 | :105790007C007E0C146978103B3C04698CA1FF00EE | ||
1403 | :1057A00086A106004000E13B86A10D004000003CC0 | ||
1404 | :1057B00086A11700C000DD3B7810AC197800DF3BF4 | ||
1405 | :1057C0007810DE1C7F0C7C00046001804800FE3BEA | ||
1406 | :1057D00006600920000084A60100C000EE3B8DA1F8 | ||
1407 | :1057E000008084A604004000F43B8DA102001E69E5 | ||
1408 | :1057F0002368000004710F81186805A11A687800F9 | ||
1409 | :10580000DD3B78108C24186005A0C0000F3C0860B8 | ||
1410 | :10581000018048000F3C0A601C600268002D1E6079 | ||
1411 | :105820007800253C88AC0600042105A04000183C07 | ||
1412 | :1058300008207800113C02680A2D086001804800A9 | ||
1413 | :10584000DF3B0A601860682000681A607800093C35 | ||
1414 | :105850007E157E137E147E0C7E0D78108919C00093 | ||
1415 | :10586000303C78108C24A02D7F13A9203100A35345 | ||
1416 | :105870007F0C7F147F137F157800DD3B84A11F0010 | ||
1417 | :1058800003800380038080A0107660207C001920B4 | ||
1418 | :105890005152042385A001001A201920020104237B | ||
1419 | :1058A00085A001001A207C0019205152042384A0F5 | ||
1420 | :1058B000FEFF1A2019200201042384A0FEFF1A20F3 | ||
1421 | :1058C0007C0090798CA1F8FF9279B47080A0D80008 | ||
1422 | :1058D0001A787800FA24A370000003700000437067 | ||
1423 | :1058E0000100377000001800B12478100C1C400033 | ||
1424 | :1058F000993C09200F520B200000BC686020006119 | ||
1425 | :1059000084A1000340008D3C27680E0084A00002A3 | ||
1426 | :105910004000893C276817007810C63B7800683C37 | ||
1427 | :10592000007086A00700C0000D3D002DA27080AD64 | ||
1428 | :105930000F0036707800A03C407086A00100400047 | ||
1429 | :1059400033257800FA24312000001C6984A102006C | ||
1430 | :105950004000A93CB5A6040084A1C00003800380D8 | ||
1431 | :10596000078080A0A63D042035A6206884A00004FE | ||
1432 | :105970004000C13C9B781800AB7803009B78810005 | ||
1433 | :10598000AB780100B5A60050206884A000804000DC | ||
1434 | :10599000CF3CB5A600049B780E0024680780AA7847 | ||
1435 | :1059A0007800EF3C1C68FCD0C000DD3CB5A60008C8 | ||
1436 | :1059B0002068C4D04000EF3CB5A600407800EF3C22 | ||
1437 | :1059C0002068C4D04000E53CB5A600407800EF3C1C | ||
1438 | :1059D0009B781800AB7802009B788100AB780100BF | ||
1439 | :1059E000B5A6001084A600024000093D2C68D278BC | ||
1440 | :1059F0003068D67884A600014000073D2C6884A05A | ||
1441 | :105A000001004000073D887884A040004000073D29 | ||
1442 | :105A1000B5A600807810F6475A7EB66E78003548F5 | ||
1443 | :105A20007810C839C000A03D2C70048048001B3D90 | ||
1444 | :105A30001920494F781013232F70010041200100D5 | ||
1445 | :105A4000312000109B781800146884A01F0085A0E6 | ||
1446 | :105A50008000AA781C6984A102004000343DB5A6EC | ||
1447 | :105A60000400AB7820002868AA78C0A802001C684F | ||
1448 | :105A7000F4D040003D3D502C78107A3A781002471F | ||
1449 | :105A8000206884A0008040004B3DB5A600049B78B0 | ||
1450 | :105A90000E0024680780AA787800523D1C6884A014 | ||
1451 | :105AA0000080C000523DB5A60008206884A0000117 | ||
1452 | :105AB0004000593DB5A600401C6884A0C00003808A | ||
1453 | :105AC0000380078080A0A63D042035A684A600019F | ||
1454 | :105AD0004000733D2C6884A001004000733D88782D | ||
1455 | :105AE00084A040004000733DB5A600809B787E00F6 | ||
1456 | :105AF000AE7EB66E14680780AA7882781028AA7ADB | ||
1457 | :105B0000307884A0C000C000A03D1800A03DB47053 | ||
1458 | :105B100080A0DD001A787810E03984A600024000E9 | ||
1459 | :105B2000943D2C68D2783068D6787810F647002DEE | ||
1460 | :105B3000A2704A701068BE700370070080AD0F003D | ||
1461 | :105B400036707800FA247810D31B7810E03978008A | ||
1462 | :105B5000FA24000000030002000078108C240023C7 | ||
1463 | :105B60007900AF3DB23DB23DB43D78108C24781041 | ||
1464 | :105B70000548246984A1FF0086A00A004000C63DB4 | ||
1465 | :105B800084A100FF85A00A0026687810D31B780046 | ||
1466 | :105B9000683C01200A00781097477800683C82A290 | ||
1467 | :105BA00005005000D23D78108C24007084A00700BE | ||
1468 | :105BB000C0108C3A78108919C000F43D6920FFFFAD | ||
1469 | :105BC00084A604004000E53D012000287800E73D60 | ||
1470 | :105BD00001200008B47188A191009B780E00078015 | ||
1471 | :105BE000AA78312000045A7E1A797800FA240768CE | ||
1472 | :105BF00006010B6800009F6800002768000086A36C | ||
1473 | :105C00000200C000153E86A20200C000153EA0782A | ||
1474 | :105C100005A0C000153E84A40080C000153EE478B5 | ||
1475 | :105C200084A008004000153EB5A608001920000019 | ||
1476 | :105C300078101742002DA2704A7003700700377069 | ||
1477 | :105C40000000246884A080004000273E7810CD42E8 | ||
1478 | :105C50007800FA24002379002A3E2D3EAE3EC73E4E | ||
1479 | :105C600000227900303E353E453E6B3E773E9A3EFF | ||
1480 | :105C70002920010026A0112000007810F3437900AC | ||
1481 | :105C80003E3E433EFA24683C433E433E78108C241B | ||
1482 | :105C900090798CA10700C0004C3E0920080011201B | ||
1483 | :105CA000010084A604004000543E1120030020227D | ||
1484 | :105CB0002AA1112001007810F34379005C3E613E77 | ||
1485 | :105CC000FA24683C693E633E78003B48AB70673E0F | ||
1486 | :105CD0007800FA247800613E78108C2484A61000A5 | ||
1487 | :105CE0004000753E78109C424000753E7800FA24D2 | ||
1488 | :105CF00078000D43006084A002004000943EB47020 | ||
1489 | :105D000080A0CD001A787E0D78101248002D2E68E4 | ||
1490 | :105D1000276800007810C63B7F0D7810AC1903701F | ||
1491 | :105D20000000377000004B7000007800683C84A6CB | ||
1492 | :105D30000400C0009A3E78003B48006084A0040044 | ||
1493 | :105D4000C000AC3E006084A001004000AC3EAB70DF | ||
1494 | :105D5000AC3E0120070078108F477800414878005A | ||
1495 | :105D60003B4800227900B13EB63EB83EB63EB63E54 | ||
1496 | :105D7000B63E78108C24A770BC3E78004748E47883 | ||
1497 | :105D800084A00800C000B83E78108147AB70C53EC3 | ||
1498 | :105D900078003B4800227900CA3ECF3ED13ED13E3A | ||
1499 | :105DA000CF3ECF3E78108C24E47884A008004000D9 | ||
1500 | :105DB000E63EA770DA3E78004748112004007810CC | ||
1501 | :105DC000ED437900E03EE63EFA24683CE63EF03ED4 | ||
1502 | :105DD000F43EAB70EE3E0120030078108F47780050 | ||
1503 | :105DE000414878003B48AB70E63E7800FA24AB703F | ||
1504 | :105DF000F83E7800FA247800EE3E82A203005000BC | ||
1505 | :105E0000003F78108C2486A30200C000193F86A2B0 | ||
1506 | :105E10000200C0001F3FA07805A0C0001F3F84A45F | ||
1507 | :105E20000080C0001F3FE47884A008004000193FB4 | ||
1508 | :105E3000B5A608001920000084A6080040001F3FF6 | ||
1509 | :105E4000781079421068BE70037007000023790053 | ||
1510 | :105E5000263F293F563F5E3F002279002C3F313FCD | ||
1511 | :105E60002F3F4A3F78108C249079ACA1070026A0E0 | ||
1512 | :105E7000112001007810F34379003B3F403FFA24A2 | ||
1513 | :105E8000683C483F423F78003B48AB70463F780053 | ||
1514 | :105E9000FA247800403F78108C2484A6100040003B | ||
1515 | :105EA000543F78109C424000543F7800FA24780018 | ||
1516 | :105EB0000D4300227900593F5C3F5C3F5C3F781006 | ||
1517 | :105EC0008C2400227900613F643F663F663F781072 | ||
1518 | :105ED0008C24E47884A0080040007B3FA7706F3FCB | ||
1519 | :105EE00078004748112004007810ED437900753F91 | ||
1520 | :105EF0007B3FFA24683C7B3F853F893FAB70833F03 | ||
1521 | :105F00000120030078108F477800414878003B4813 | ||
1522 | :105F1000AB707B3F7800FA24AB708D3F7800FA2499 | ||
1523 | :105F20007800833F00237900923F973F993F953F48 | ||
1524 | :105F300078108C24A4707A00A4707A0082A20200E7 | ||
1525 | :105F40005000A13F78108C2484A600024000AB3F93 | ||
1526 | :105F50007810FE477810D543781005480023790063 | ||
1527 | :105F6000AE3FB13FD93F3F4086ADFFFF4000683CA8 | ||
1528 | :105F700086A201004000BB3F78108C2484A600025A | ||
1529 | :105F80004000C33F7810FE4778100548012001000B | ||
1530 | :105F900078109747B87884A001C04000D53F487872 | ||
1531 | :105FA00085A008004A78487884A00800C000D03F47 | ||
1532 | :105FB000037000007800683C00227900DC3FDE3F7F | ||
1533 | :105FC0000F40A770E23F7800474811200D0078107D | ||
1534 | :105FD000ED437900E83FEF3FFA24683CF73FFF3F8D | ||
1535 | :105FE00005400740B4A6FF00B5A60004B66E5A7E71 | ||
1536 | :105FF00078003548B4A6FF00B5A60004B66E5A7EF8 | ||
1537 | :1060000078003548AB7003407800FA247800EF3F01 | ||
1538 | :1060100078108C24AB700B407800FA2478104D482F | ||
1539 | :106020007800FA24A7701340780047481120120026 | ||
1540 | :106030007810ED43790019401F40FA24683C2B404A | ||
1541 | :1060400033403940B4A6FF00B5A60004B66E5A7EB0 | ||
1542 | :10605000B47080A0AA001A787800FA24B4A6FF00D1 | ||
1543 | :10606000B5A60004B66E5A7E78003548AB7037404E | ||
1544 | :106070007800FA2478001F40AB703D407800FA2485 | ||
1545 | :1060800078002B4086A201004000454078108C2407 | ||
1546 | :10609000A770494078004748112015007810ED435B | ||
1547 | :1060A00079004F405440FA24683C62406E40B4A6E8 | ||
1548 | :1060B000FF00B5A60004B66E5A7E3B780113B4709B | ||
1549 | :1060C00080A0B5001A787800FA24B4A6FF00B5A61F | ||
1550 | :1060D0000004B66E5A7EB47080A0AA001A787800C8 | ||
1551 | :1060E000FA24AB7072407800FA247800544082A2FF | ||
1552 | :1060F000030050007A4078108C24002379007D4002 | ||
1553 | :106100008040B740144186A20100400086407810CC | ||
1554 | :106110008C24046884A0FF0086A00600C000934081 | ||
1555 | :106120007810C63B037000007800683C3B680000B4 | ||
1556 | :106130003768000084A600024000A1407810FE47A6 | ||
1557 | :106140007810D54378100548012001007810974752 | ||
1558 | :10615000B87884A001C04000B340487885A008000A | ||
1559 | :106160004A78487884A00800C000AE400370000060 | ||
1560 | :106170007800683C00227900BA40BC40EF40A7702C | ||
1561 | :10618000C0407800474811200D007810ED43790099 | ||
1562 | :10619000C640CD40FA24683CD540DD40E340E540B0 | ||
1563 | :1061A000B4A6FF00B5A60008B66E5A7E7800354842 | ||
1564 | :1061B000B4A6FF00B5A60008B66E5A7E7800354832 | ||
1565 | :1061C000AB70E1407800FA247800CD4078108C2440 | ||
1566 | :1061D000AB70EB40781005487800FA2478104D48F1 | ||
1567 | :1061E0007800FA24A770F340780047481120050092 | ||
1568 | :1061F0007810ED437900F940FE40FA24683C0641EE | ||
1569 | :106200000E41B4A6FF00B5A60008B66E5A7E78000F | ||
1570 | :106210003548B4A6FF00B5A60008B66E5A7E7800D1 | ||
1571 | :106220003548AB7012417800FA247800FE4086A20F | ||
1572 | :10623000010040001A4178108C24A7701E4178009C | ||
1573 | :106240004748112006007810ED4379002441294188 | ||
1574 | :10625000FA24683C2F413941B5A60008B66E5A7E33 | ||
1575 | :1062600078003548B4A6FF00B5A60008B66EB5A6FE | ||
1576 | :1062700000405A7E78003548AB703D417800FA24E2 | ||
1577 | :106280007800294100237900424147414541454179 | ||
1578 | :1062900078108C2478108C240023A87105A07A0132 | ||
1579 | :1062A0001068BE7082A203005000554178108C2403 | ||
1580 | :1062B0000023790058415B4169418B4184A600026B | ||
1581 | :1062C000400063417810FE47781005480120010026 | ||
1582 | :1062D000781097477800FA2496A202004000724195 | ||
1583 | :1062E000FF824000724178108C24A77076417800BC | ||
1584 | :1062F0004748112018007810ED4379007C41814116 | ||
1585 | :10630000FA24683C83418541780035487800354857 | ||
1586 | :10631000AB7089417800FA2478008141002279002D | ||
1587 | :106320008E419041A941A7709441780047481120BF | ||
1588 | :1063300017007810ED4379009A419F41FA24683C98 | ||
1589 | :10634000A141A3417800354878003548AB70A7419A | ||
1590 | :106350007800FA2478009F4184A40080C0000542A0 | ||
1591 | :1063600084A600014000B5417810FE477810D5435F | ||
1592 | :10637000D878D278DC78D678B4A6FFEF5A7EA770AA | ||
1593 | :10638000C0417800474811200D007810ED43790096 | ||
1594 | :10639000C641CD41FA24683CCD41F341F941FB416E | ||
1595 | :1063A000D878DC7905A1C000DF41B87884A01F004F | ||
1596 | :1063B000C000DF41B3700000587884A0FFFD5A7818 | ||
1597 | :1063C0007800354884A600014000F141487885A056 | ||
1598 | :1063D00008004A787810BC472C68D2783068D678A4 | ||
1599 | :1063E000B37000007810F64778003548AB70F7417D | ||
1600 | :1063F0007800FA247800CD4178108C24AB700142EB | ||
1601 | :10640000781005487800FA2478104D487800FA246E | ||
1602 | :1064100078100548AB700F420120030078108F47B9 | ||
1603 | :10642000780041487810F6472C68D2783068D678E2 | ||
1604 | :1064300078003548B8701268BE700080BA701B686A | ||
1605 | :10644000000084A6080040003A427E157E137E14A8 | ||
1606 | :106450009078048004800480048084A00F001A686F | ||
1607 | :10646000AC809B78000080AF2B00982080AD0B00A3 | ||
1608 | :10647000A020A5537F147F137F15C4A6000F84A608 | ||
1609 | :106480000200C00049422C690D810D810D8184A15B | ||
1610 | :106490000700082078005C429B781000AC7984A14A | ||
1611 | :1064A000200040005C427E01092005000120003DE3 | ||
1612 | :1064B0007810C747246885A03B0026687F0184A127 | ||
1613 | :1064C0001F0005A8166878103B3CBE6884A604002F | ||
1614 | :1064D00040006D428CA100FFA87884A0FF0005A1B8 | ||
1615 | :1064E0002A68B4A6FF00006084A00800400077423C | ||
1616 | :1064F000B5A60040B66E7C007E157E137E1418692A | ||
1617 | :106500009078048004800480048084A00F007E00C2 | ||
1618 | :1065100000A11A687F000080048040009842A820F3 | ||
1619 | :10652000048180A00B0000ADA0209B78000080AF0C | ||
1620 | :106530002B009820A5537F147F137F157C002C68B7 | ||
1621 | :1065400084A02000C000A4420C627800A542106222 | ||
1622 | :10655000186B002302A24000C542182082A30E003F | ||
1623 | :106560004800B5424000B54219200E007800B942FB | ||
1624 | :10657000587884A0EFFF5A783B78011B937800008D | ||
1625 | :10658000A27BB47080A08E001A7885A001007C00E8 | ||
1626 | :10659000587884A0EFFF5A789378000006A07C001A | ||
1627 | :1065A00004698CA1FF0096A107004000DA4296A181 | ||
1628 | :1065B0000F004000DA4207681701146978103B3C6D | ||
1629 | :1065C00000610481C800F5421C6005A04000E9425A | ||
1630 | :1065D000012000087800F7427E0D24687E007810C4 | ||
1631 | :1065E00012487F002668002D2E687810C63B7F0D6C | ||
1632 | :1065F0000120000224698CA1FF000DA126690780FB | ||
1633 | :106600009B780E00AA78206885A00080226831203F | ||
1634 | :106610000004B66E5A7EB47188A191001A797C008C | ||
1635 | :10662000C4A6000F84A60200C00021432C690D817E | ||
1636 | :106630000D810D8184A10700082005A81668781037 | ||
1637 | :106640003B3CBE6878002443146978103B3C0061F1 | ||
1638 | :106650000481C800824384A10003400030430768DE | ||
1639 | :10666000170178004E43046005A0C0005743076837 | ||
1640 | :1066700017011C6005A0C00044437E0D781012482D | ||
1641 | :1066800027683400002D2E687810C63B7F0D84A645 | ||
1642 | :10669000040040004E43312000040120002878000F | ||
1643 | :1066A00052433120000401200008B47188A19100F8 | ||
1644 | :1066B0007800B043186005A0C00044431C6005A0EA | ||
1645 | :1066C000C00044439F68000027683D0084A6010085 | ||
1646 | :1066D0004000BE4394D6C0007B430061D4D140004B | ||
1647 | :1066E0007B432C698CA1FF004000BE4386A10300C0 | ||
1648 | :1066F0004000BE4386A112004000BE43B5A600087C | ||
1649 | :10670000B47188A1AE007800B94307681701312041 | ||
1650 | :1067100000042C698CA1FF0086A11200C0009343E5 | ||
1651 | :106720000120CB43092001007800A44386A1030087 | ||
1652 | :10673000C0009D430120CC43092012007800A443EF | ||
1653 | :1067400001200002B47188A191007800B043781054 | ||
1654 | :10675000E147A37800001C6885A040001E68B47162 | ||
1655 | :1067600088A1DA0006A0266807809B780E00AA7828 | ||
1656 | :10677000206885A000802268B66E5A7E1A7978005B | ||
1657 | :10678000FA24B66E7810C63B1068BE70037007001E | ||
1658 | :10679000A37000004B7000007800FA242300700002 | ||
1659 | :1067A00005000000000A00000000250000000000B5 | ||
1660 | :1067B0003B6800003768000084A600024000EC43FC | ||
1661 | :1067C000B8788CA01F0084A000804000E5430881B9 | ||
1662 | :1067D000D87800A13668DC7881A000003A687C0097 | ||
1663 | :1067E00090790F81ACA507002120000080A4100043 | ||
1664 | :1067F0009A78A8798CA1FF0084A18000C0001B4476 | ||
1665 | :1068000082A12000C800394482A11200C80081473B | ||
1666 | :106810000021791009447C008147EB45814781477D | ||
1667 | :10682000464449448344B944ED44F0448147814798 | ||
1668 | :10683000A44414454E4581478147744584A12000F6 | ||
1669 | :10684000C000A8458CA11F00146884A01F0006A1E9 | ||
1670 | :1068500040003644B47080A0CD001A7801201400A6 | ||
1671 | :106860007810974778100548037000000120020057 | ||
1672 | :106870007C00012000007C0082A12400C800814728 | ||
1673 | :1068800084A10300791009447C0081478147814736 | ||
1674 | :106890008147781081477C00002279004C4477457D | ||
1675 | :1068A0007745704470447044704470447044704440 | ||
1676 | :1068B00070446E4470446544704470447044704445 | ||
1677 | :1068C000704478447B4477457B4470447044704402 | ||
1678 | :1068D0007E0C7E07146F7810B0377F077F0C78002E | ||
1679 | :1068E000704478108E462768B30209200B000120FF | ||
1680 | :1068F00000487800AB45781073477C002768930008 | ||
1681 | :1069000009200B000120004878009345582D0468A9 | ||
1682 | :1069100084A0FF0086A00600C0008D440768170110 | ||
1683 | :106920002768020078101248276836003269002D67 | ||
1684 | :106930002E687E0D7810963B7810D345682B781022 | ||
1685 | :10694000C63B7F0D7810C63B012002007C0078100A | ||
1686 | :10695000D3450120170078109747A3700000092045 | ||
1687 | :1069600038520B200600AF70170009200002781083 | ||
1688 | :10697000D43A012001007C0000227900BC44774514 | ||
1689 | :10698000A845A845A845DD44BA45E544BA45BA45F9 | ||
1690 | :10699000BD45BD45C245C245D544D544A845A845D9 | ||
1691 | :1069A000BA45A845E5447745E544E544E544E54472 | ||
1692 | :1069B0002768840009200B00012000437800CC45A3 | ||
1693 | :1069C00027680D0009200B00012000437800AB452B | ||
1694 | :1069D0002768930009200B000120004378009345AD | ||
1695 | :1069E000012000007C0000227900F34477450C452B | ||
1696 | :1069F0000C450C450C45BA45BA45BA45BA45BA45A9 | ||
1697 | :106A0000BA45BA45BA450C450C450C450C45BA4546 | ||
1698 | :106A10000C450C45BA45BA45BA45BA45774527688D | ||
1699 | :106A2000930009200B00012000437800934584A6C1 | ||
1700 | :106A30000400C0002845046884A0FF0086A006006A | ||
1701 | :106A4000C00081477810D345076817017810C63B0E | ||
1702 | :106A5000012002007C00006084A004004000814707 | ||
1703 | :106A6000582D046884A0FF0086A00600C0003745AA | ||
1704 | :106A70000768170127680200781012482768360057 | ||
1705 | :106A80003269002D2E687E0D7810A53B7810D34515 | ||
1706 | :106A9000682B7810C63B7F0D7810C63B01200200A2 | ||
1707 | :106AA0007C00006084A0040040008147046A94A236 | ||
1708 | :106AB000FF0086A20600C0005C4507681701276832 | ||
1709 | :106AC0000200582D78101248276836003269002DD0 | ||
1710 | :106AD0002E687E0D7810B53B7810D345682B781062 | ||
1711 | :106AE000C63B7F0D7810C63B012002007C00781069 | ||
1712 | :106AF00081477C00B47080A0CD001A78012001008D | ||
1713 | :106B000078109747781005480370000001200200B4 | ||
1714 | :106B10007C007810C7477810FE477810D54378106E | ||
1715 | :106B2000CD4278100548012001007C007810C7474D | ||
1716 | :106B30007810FE477810D543B47080A0CD001A7845 | ||
1717 | :106B40000120130078109747781005480370000063 | ||
1718 | :106B5000012002007C00781081477C007810C74734 | ||
1719 | :106B60007810FE477810D5437810CD42781005484C | ||
1720 | :106B700078104D48012001007C00012003007C00BA | ||
1721 | :106B800078108E46012000007C007E0C7E07146F7A | ||
1722 | :106B90007810B0377F077F0C012000007C00781050 | ||
1723 | :106BA000C74778108147012006007C0004698CA14A | ||
1724 | :106BB000FF0086A107004000DE4586A10F00C0004F | ||
1725 | :106BC000E2457810FE477810D543B47080A0CD0020 | ||
1726 | :106BD0001A7878100548037000007C00A87A94A207 | ||
1727 | :106BE000FF00A87884A0FF008AA00400C8008147A5 | ||
1728 | :106BF0007910F8457C008147FC458147954682A283 | ||
1729 | :106C0000030040000346781081477C00A87DACA5B6 | ||
1730 | :106C1000FF00A87CA4A4FF00B86984A10001400083 | ||
1731 | :106C200042468CA1FFFEBA69A07805A0C00042468A | ||
1732 | :106C3000A4A4FF004000364682A40C0040001F467A | ||
1733 | :106C4000C80029462B852B8578102E384000294610 | ||
1734 | :106C5000781027367800384678106047781052361A | ||
1735 | :106C6000B8698DA10001BA69B5A600105A7E7800F6 | ||
1736 | :106C70003B4678105236B4A6FFEF5A7EB47080A01F | ||
1737 | :106C800091001A78012001007C007E0C7810824669 | ||
1738 | :106C90000062E4D2400073460862178294A2FF00AB | ||
1739 | :106CA00082A20C00480055464000554611200C00B9 | ||
1740 | :106CB000002402A2C8005A462022086294A2FF00C3 | ||
1741 | :106CC0001C7002A2C80062461C72002202A5C80005 | ||
1742 | :106CD00067462822781064472B852B8578102E383C | ||
1743 | :106CE0004000734678102E3678007746781060475B | ||
1744 | :106CF00078105936B5A600105A7EB47080A0B9003D | ||
1745 | :106D00001A78012004007F0C7C007E001468078044 | ||
1746 | :106D100084A00F00038003800380E0A080547F00E4 | ||
1747 | :106D20007C007E0C78108246781059367F0C7C00EF | ||
1748 | :106D300082A20200C0008147A87A94A2FF00B8692D | ||
1749 | :106D400084A100024000CC468CA1FFFDBA69A07866 | ||
1750 | :106D500005A0C000CC4682A20200C8006B377810A4 | ||
1751 | :106D60002A477810F9367810523684A60001400080 | ||
1752 | :106D7000C2462C6884A001004000C246FCC6887848 | ||
1753 | :106D800084A040004000C246FDC6B5A600105A7E51 | ||
1754 | :106D9000B47080A091001A78012001007C007E0C64 | ||
1755 | :106DA0007810824684A2FEFF4000D74611200100E1 | ||
1756 | :106DB0007800DB4684A201004000E1460061ECD18E | ||
1757 | :106DC000C000E1461120000078101C477810003701 | ||
1758 | :106DD0007810593684A600014000F7462C6884A03C | ||
1759 | :106DE00001004000F746FCC6887884A040004000BF | ||
1760 | :106DF000F746FDC6B5A600105A7EB47080A0B90053 | ||
1761 | :106E00001A78012004007F0C7C007E0C6029006051 | ||
1762 | :106E10001120010084A00020C0000D4711200000B7 | ||
1763 | :106E2000AB780100AB780200AB780300AA7AC0A867 | ||
1764 | :106E30000400B86885A00002BA687F0C7C009B78CB | ||
1765 | :106E40001800AB780100AB780200AB780300AA7A97 | ||
1766 | :106E50009B788100AB7804007C007E0C547060202D | ||
1767 | :106E6000006084A00010C000384729203200212093 | ||
1768 | :106E70000000780058470865ACA5FF00187086A090 | ||
1769 | :106E80002800C000484782A51900C8004E472920A5 | ||
1770 | :106E9000190078004E4782A50C00C8004E472920F3 | ||
1771 | :106EA0000C0008642784A4A4FF0082A40C004800FE | ||
1772 | :106EB000584721200C0078106447B86885A000016D | ||
1773 | :106EC000BA687F0C7C0021200000292032009B78CA | ||
1774 | :106ED0001800AB780100AB780300AB780100AA7D05 | ||
1775 | :106EE000AA7C9B788100AB7805007C000120030020 | ||
1776 | :106EF00078108F47B5A600105A7EB47080A0B900F4 | ||
1777 | :106F00001A78012005007C000120070078108F47C7 | ||
1778 | :106F1000B5A600105A7EB47080A0B9001A7801207E | ||
1779 | :106F200004007C009B781800AA789B788100AB78DD | ||
1780 | :106F300001007C0004698CA1FF0096A107004000BD | ||
1781 | :106F4000A54796A10F004000A5477810AC197C001A | ||
1782 | :106F5000246994A13F00C000AE478CA1C0FF05A1E9 | ||
1783 | :106F600026687810C63B1C6984A100014000BB471D | ||
1784 | :106F7000146978103B3C0462108206627C002C6924 | ||
1785 | :106F800034682E6812A13069386832681BA100A2EB | ||
1786 | :106F900001A37C007E0CE0AD180003607000066168 | ||
1787 | :106FA0000B6000000F60000A136000001760000013 | ||
1788 | :106FB00007801A601F600000236000007F0C2468B7 | ||
1789 | :106FC00085A0800026687C007E157E137E149820A4 | ||
1790 | :106FD00080AF2D00A020AC814000EC47A65384A1D7 | ||
1791 | :106FE00001004000F2470433BE787F147F137F1501 | ||
1792 | :106FF0007C00B07005A0C0108C24B37000807800B5 | ||
1793 | :107000004B4BB071FF81400004487810414C7C002C | ||
1794 | :10701000B071FF8140001148487885A008004A7887 | ||
1795 | :10702000B3700000781087487C007E0C7E0D7810CD | ||
1796 | :107030008919C0001A4878108C247F0C7E157E13A5 | ||
1797 | :107040007E14A02D982CA9203100A3537F147F1308 | ||
1798 | :107050007F1507680D010B680000047007801A682F | ||
1799 | :10706000236800001F6800009F6800007F0C7C0000 | ||
1800 | :10707000B47080A091001A787800FA24B47080A0CF | ||
1801 | :1070800081001A787800FA24B47080A0B9001A78C8 | ||
1802 | :107090007800FA24B47080A0C3001A787800FA242B | ||
1803 | :1070A00004698CA1FF0096A1070040005A4896A1F0 | ||
1804 | :1070B0000F0040005A4807681701246884A0FF00A9 | ||
1805 | :1070C00085A00002266807809B780E00AA782068B9 | ||
1806 | :1070D00085A00080226831200004B66E5A7EB4710B | ||
1807 | :1070E00088A191001A797C0078100548487885A01D | ||
1808 | :1070F0000C004A78B47080A0CD001A7809200B00EB | ||
1809 | :10710000012000447810C7470120130078109747EA | ||
1810 | :107110007800683C7E129120002249208748007048 | ||
1811 | :10712000047205A20C7215A2087084A0F7FF05A2D4 | ||
1812 | :107130004000994878009E48037000007F120020AC | ||
1813 | :107140007C00007084A00100C000CC48087103815D | ||
1814 | :10715000C800AB487810CE497800A3480C708CA0CA | ||
1815 | :10716000FF004000CC4804700480C800C34814707D | ||
1816 | :1071700005A0C000BF48107005A04000C34802A190 | ||
1817 | :10718000C800A348077010007800CC48FF8A400070 | ||
1818 | :10719000CC487810184CC000C6484000A34878106E | ||
1819 | :1071A0005749037000007F1200207C007E010461BB | ||
1820 | :1071B0008CA1FF0086A107004000DF488EA10F00D0 | ||
1821 | :1071C000C000E24840607800E34828647F01FF8403 | ||
1822 | :1071D00040000D49702C0470BCA00F00B8A71D49D9 | ||
1823 | :1071E0003C27FB87C000FB484800F54878108C24FA | ||
1824 | :1071F0009C6075A040000D497800E848042768AEFF | ||
1825 | :10720000086830A60C6829A5218440000D493887FC | ||
1826 | :10721000042705A0C000FC489C7075A0C000E84889 | ||
1827 | :107220007C000000050009000D0011001500190088 | ||
1828 | :107230001D000000030009000F0015001B000000E6 | ||
1829 | :10724000000012490F4900000000008000001249B0 | ||
1830 | :1072500000001A49174900000000000000001A4908 | ||
1831 | :107260000000154915490000000000800000154984 | ||
1832 | :1072700000001B491B4900000000000000001B49E2 | ||
1833 | :107280007E12912000227920005271201000077098 | ||
1834 | :107290000A000770020003700000712020000770D0 | ||
1835 | :1072A0000A000770020003700000492000007F12EE | ||
1836 | :1072B00000207C00492057491920000004700480F8 | ||
1837 | :1072C000C800AA49077012000871087006A1C00022 | ||
1838 | :1072D000614984A1E00140006C4978108C240120B0 | ||
1839 | :1072E000FD04042082A00500C800774984A1004065 | ||
1840 | :1072F000C00061499CA10C3086A304204000854950 | ||
1841 | :1073000086A308004000904986A30C20C000614974 | ||
1842 | :1073100000720482480090490C7384A3FF0040006F | ||
1843 | :10732000904978108C2407701200007084A001002E | ||
1844 | :10733000C000AA49087084A0E001C000AA491073E7 | ||
1845 | :10734000147005A34000AA490C7184A10003C00079 | ||
1846 | :10735000AA4984A1FF00C0005749077012000770B6 | ||
1847 | :107360000800047084A00800C000AE490770120035 | ||
1848 | :10737000087103814800B3490370000049200000F0 | ||
1849 | :107380007C007E107E007E127E1591200022087106 | ||
1850 | :107390007810CE497F157F12912001807F007F10E9 | ||
1851 | :1073A0007C00047200750C7384A30003C000F549CF | ||
1852 | :1073B00084A1E001C000194A087184A1E001C00065 | ||
1853 | :1073C000194A0120FD04042082A00500C800E949F3 | ||
1854 | :1073D00084A10040C000D94984A107007900ED498B | ||
1855 | :1073E000F749094AF549094AF549554AF549534AC1 | ||
1856 | :1073F00078108C24047084A0100085A00200067010 | ||
1857 | :10740000FF8AC000044A492000007800084A78102A | ||
1858 | :10741000184CC000044A7C00047084A0100085A0B1 | ||
1859 | :1074200002000670FF8AC000144A7800184A7810DB | ||
1860 | :10743000184CC000144A7C00077012000871E0006C | ||
1861 | :107440001C4A91200060E000204A912000600770F3 | ||
1862 | :10745000120007700800047084A00800C000284AC9 | ||
1863 | :10746000077012000871038148002D4A0370000064 | ||
1864 | :10747000007005A0C000414A047005A0C000414A48 | ||
1865 | :107480000C7005A04000434A7800244A49200000BF | ||
1866 | :107490007810D738186884A0008040004E4A1B68D6 | ||
1867 | :1074A00002007C0078108C2478108C247810B14A6B | ||
1868 | :1074B000107214710C709CA0FF00002800A311A290 | ||
1869 | :1074C00089A100007810B14A0427582C60AC0863E9 | ||
1870 | :1074D000002222A30C6300211BA3002405A340006B | ||
1871 | :1074E000784AC800784A128410820A8389A1000071 | ||
1872 | :1074F000602B78005F4A602B078A7E00046084A0BE | ||
1873 | :1075000008004000844ABAA717497800864ABAA7FB | ||
1874 | :107510000F497F003DA7002C86688A6F926C8E6BA6 | ||
1875 | :1075200007701200781057497C003887042705A09F | ||
1876 | :10753000C000A54A9C6005A04000AE4A60200460DF | ||
1877 | :1075400084A00F0080A01D493C20FB8740108C24A4 | ||
1878 | :10755000518A4000AD4A087084A0030086A0030051 | ||
1879 | :107560007C00512000007C00508A3987042704A049 | ||
1880 | :10757000C000C54A006064A0C000BC4A602D046021 | ||
1881 | :1075800084A00F0080A02D493C20FB8740108C2454 | ||
1882 | :107590007C007E127E0D912000227F0D8468602089 | ||
1883 | :1075A00088688C6B906C5780D4AAFF0084A0FF0081 | ||
1884 | :1075B0007E00046884A008007F004000E04AB8A074 | ||
1885 | :1075C00017497800E24AB8A00F49087EB5A60C001A | ||
1886 | :1075D00004698CA1FF0086A107004000F04A8EA13B | ||
1887 | :1075E0000F00C000F94A1C6884A040004000004B16 | ||
1888 | :1075F000B5A601007800004B1C6884A04000400044 | ||
1889 | :10760000004BB5A6010007700400047084A00400BC | ||
1890 | :10761000C000024B002405A3C0000D4B7800334B83 | ||
1891 | :10762000582C0427046160AC006000A41A70046048 | ||
1892 | :1076300001A31E7084A108004000234B106081A0AC | ||
1893 | :1076400000002270146081A00000267008620024EF | ||
1894 | :1076500002A212700C62002303A216700276077059 | ||
1895 | :107660000100602B7810924A7800354B7810184C46 | ||
1896 | :10767000C000334B7F1200207C007E127E0D9120D3 | ||
1897 | :1076800000227F0D07700400047084A00400C00075 | ||
1898 | :10769000414B037008007F1200207C007E127E0D9B | ||
1899 | :1076A000912000227F0D49204B4B0770040004708D | ||
1900 | :1076B00084A00400C000544B087EB5A60C000469E9 | ||
1901 | :1076C0008CA1FF0086A107004000674B8EA10F0030 | ||
1902 | :1076D000C000724B1C6884A0400040006E4BB5A6F1 | ||
1903 | :1076E00001004068502078007B4B1C6884A020007B | ||
1904 | :1076F000C000794BB5A6010028685020602D0460B9 | ||
1905 | :10770000BCA00F00B8A71D493C27FB87C0008F4BCA | ||
1906 | :107710004800894B78108C249C6865A04000934BEE | ||
1907 | :1077200078007C4B7810184CC0008F4B7F120020E3 | ||
1908 | :107730007C007E127E007E017E0D912000227F0D56 | ||
1909 | :107740007F037F04087EB5A60C0004698CA1FF00AE | ||
1910 | :1077500086A107004000AD4B8EA10F00C000B64BC4 | ||
1911 | :107760001C6884A040004000BD4BB5A60100780015 | ||
1912 | :10777000BD4B1C6884A040004000BD4BB5A6010075 | ||
1913 | :107780004920964B7E0104698CA1FF0086A1070069 | ||
1914 | :107790004000CB4B8EA10F00C000CE4B406878005C | ||
1915 | :1077A000CF4B28687F0155A04000154C702D602EEE | ||
1916 | :1077B0000470BCA00F00B8A71D493C27FB87C00080 | ||
1917 | :1077C000E94B4800E24B78108C249C7075A0602037 | ||
1918 | :1077D0004000154C7800D54B042768AE086822A4F9 | ||
1919 | :1077E0000C681BA34800024C518AC000F64B78106D | ||
1920 | :1077F0008C243887042705A0C000EA4B9C7075A034 | ||
1921 | :1078000060204000154C7800D54B228420841A83D8 | ||
1922 | :1078100099A300000869002422A10C6900231BA180 | ||
1923 | :10782000C800114C78108C24712020007800004B87 | ||
1924 | :107830007F1200207C00087084A0030086A0030053 | ||
1925 | :107840004000404C042708AC04211A700881042130 | ||
1926 | :107850001E700881042112700881042116700460D2 | ||
1927 | :1078600084A008004000374C088104212270088160 | ||
1928 | :10787000042126700276047084A0100085A0010007 | ||
1929 | :1078800006707810924A7C007E127E007E0D912058 | ||
1930 | :1078900000224920414C7F0D7F08087184A103001C | ||
1931 | :1078A000C0006B4C7E0104698CA1FF0086A107001B | ||
1932 | :1078B00040005B4C8EA10F00C0005E4C4068780019 | ||
1933 | :1078C0005F4C28687F0105A04000794C78009E48F5 | ||
1934 | :1078D00020006B4C7810554A7800794CA000724C0F | ||
1935 | :1078E00008717810CE4978004A4C07701000A0004B | ||
1936 | :1078F000744C08717810CE49087086A00800C0004A | ||
1937 | :107900004A4C007005A0C0004A4C0370000049209A | ||
1938 | :1079100000007F1200207C007E127E147E137E15F4 | ||
1939 | :107920007E0C7E0D912000227F0D4920894C80AD78 | ||
1940 | :107930001100A020992031000C7084A0FF002A685B | ||
1941 | :107940000770080007700200037001004000A84C97 | ||
1942 | :107950000080AC80A55307700400047084A004006C | ||
1943 | :10796000C000AA4C7F0C49200000037000007F1566 | ||
1944 | :107970007F137F147F1200207C00912000609120F3 | ||
1945 | :107980000080CC7805A04000D14C9479D07006A13D | ||
1946 | :10799000C000D14C047805A04000D14C077800000D | ||
1947 | :1079A0006800D14C91208040207801802278C0006E | ||
1948 | :1079B0002C4D2478227869204052006884A007006A | ||
1949 | :1079C0004000EF4C86A002004000EF4C34680DA050 | ||
1950 | :1079D0004000EF4C042105A04000EF4C01800A203C | ||
1951 | :1079E0004000D44D487805A04000FD4C01804A7805 | ||
1952 | :1079F000C000FD4C0920020144680A2078106F2263 | ||
1953 | :107A0000906805A04000094D01809268C000094DB2 | ||
1954 | :107A10006F6800007368010061200055A920000113 | ||
1955 | :107A200009200200346005A040001F4D018036602F | ||
1956 | :107A3000C0001F4D106005A040001F4D7E01781052 | ||
1957 | :107A40006F227F01E0AC10007000254D78000F4DD3 | ||
1958 | :107A5000098140002C4DA920000178000F4D7810BD | ||
1959 | :107A6000394D78105E4D0920515204210920020140 | ||
1960 | :107A70000A20912001807C00347801803678C00093 | ||
1961 | :107A80005D4D3878367891200080447805A0C0009C | ||
1962 | :107A9000484D012001010180467880A000754020FA | ||
1963 | :107AA000042065A040005D4D246005A04000594DB4 | ||
1964 | :107AB0000180266040008D4D0060402C78004E4DC6 | ||
1965 | :107AC0007C00287801802A78C0008C4D2C782A7898 | ||
1966 | :107AD000307805A0C0006B4D012000020180327893 | ||
1967 | :107AE000038003800380038090A0005598A20200C9 | ||
1968 | :107AF000042384A0080040008C4D90A209000422B9 | ||
1969 | :107B000005A04000844D01801220C0008C4D04234C | ||
1970 | :107B100084A0F7FF85A080001A2078106F227C00D7 | ||
1971 | :107B200069204052006805A04000974D486806ACA7 | ||
1972 | :107B30004000D44D1B600600B46084A0003F1E606E | ||
1973 | :107B4000206084A0FF0085A06000226000604220C9 | ||
1974 | :107B50001467826F7810C519186805A04000AF4DF2 | ||
1975 | :107B600001801A68086884A0EFFF0A681068018025 | ||
1976 | :107B7000D000B94D78108C2412682F60000033605B | ||
1977 | :107B80000000682C7810DC1C69204052447984A1E4 | ||
1978 | :107B90000001012006006E68C000CF4D86690120FB | ||
1979 | :107BA00004006E6878106A22912001807C006920B0 | ||
1980 | :107BB000000109204052042184A007004000304EFB | ||
1981 | :107BC00086A00700C000EA4D7E0D092052526C21AC | ||
1982 | :107BD00078101C3B7F0D7800304E092052526421F2 | ||
1983 | :107BE000781037241B600600586884A0003F1E6090 | ||
1984 | :107BF000206084A0FF0085A0480022602F60000064 | ||
1985 | :107C000033600000306884A040004000244E4B6880 | ||
1986 | :107C10000400A9201400486884A004004000114E0C | ||
1987 | :107C20007000114E7800084E4B680900A92014001E | ||
1988 | :107C3000486884A0010040001E4E70001E4E78006F | ||
1989 | :107C4000154EA920FA007000244E7800204E0868D6 | ||
1990 | :107C500084A0FDFF0A681B68480009205B520B20C6 | ||
1991 | :107C600007004C784A78912001807C0079200052EE | ||
1992 | :107C700078105E4E7810424E7810504E33780000E7 | ||
1993 | :107C8000477800004B7800007C0019200300112089 | ||
1994 | :107C90004652042286A03C0040004D4E19200200AE | ||
1995 | :107CA0002A7B2E7B7C0019203900112046520422A9 | ||
1996 | :107CB00086A03C0040005B4E19202700367B3A7BB3 | ||
1997 | :107CC0007C001920713911204652042286A03C0004 | ||
1998 | :107CD0004000694E19202626227B267B3F78000033 | ||
1999 | :107CE00043780A007C0020002B00000020000000E8 | ||
2000 | :107CF0002000000020000000200000002000000004 | ||
2001 | :107D000020000000200000002000000020000000F3 | ||
2002 | :107D100020000000200000002000000020000000E3 | ||
2003 | :107D200020000000200000002000000014001400CB | ||
2004 | :107D300049981400140014001400140014001400D6 | ||
2005 | :107D400080000F00000001020406080C20212240E0 | ||
2006 | :107D500080F818000B3001A2140000A2140000A249 | ||
2007 | :107D6000140200006C0002001400CD989E009300E5 | ||
2008 | :107D700002A2388806383988C32064088598C1284B | ||
2009 | :107D8000AE9C03A20C30462861816A840083561899 | ||
2010 | :107D90003A886598F228919C58980C30E128919C7B | ||
2011 | :107DA000022806A2C3642E2807A2A064E06DA06783 | ||
2012 | :107DB000C06F14183B882478C16864783E8879982D | ||
2013 | :107DC000768577866B20C128AE9C44200321A220B3 | ||
2014 | :107DD0008120659809A201298D98140005A200A3AD | ||
2015 | :107DE00072189A873C88E21F01C60AA26E850407B2 | ||
2016 | :107DF000919C140004A200A30930E21964F86E8576 | ||
2017 | :107E00003F88E608919881F88C9801C81400C1F861 | ||
2018 | :107E10001600B285F080329502FBE21D1400328517 | ||
2019 | :107E200041F21400E21DA884A0D7E61F140008A2A6 | ||
2020 | :107E300043600880C11D1600008360812A8441F0E0 | ||
2021 | :107E40000830A884D6114270DD201100D520228888 | ||
2022 | :107E50001600008047281110C098008000A002285A | ||
2023 | :107E60001110C69865983E281110CA980BA21700E9 | ||
2024 | :107E70000C3000A3E21D81DB14001002D79814001F | ||
2025 | :107E8000E0263A8702FBF219E21F14000DA2063821 | ||
2026 | :107E90001002B39C040700006C0002004F9814000D | ||
2027 | :107EA0009E00A0001700FF600C30208711A2D09C1C | ||
2028 | :107EB0007287378801217A98D210E278D39C59983A | ||
2029 | :107EC00084D9E2F0A1F0CD981400318866D13088D1 | ||
2030 | :107ED0000F80019420B502C820887A9801237A98EF | ||
2031 | :107EE000D210E478D39C21882088599823F142F15C | ||
2032 | :107EF00001F1C698D210F670328803820C879ED9A1 | ||
2033 | :107F000001601400456814021BA2D09C0120C59892 | ||
2034 | :107F10000182521884D163D1348801808D98273032 | ||
2035 | :107F2000A884561A3388140018A28169BC9C26695B | ||
2036 | :107F30000269341A9998141A2170140000A341613F | ||
2037 | :107F40006469108092852680B984E4692380E116F3 | ||
2038 | :107F50000180F110466913A2621413A20080E11699 | ||
2039 | :107F6000B598696914A2C2610280E1140480E11627 | ||
2040 | :107F700001010A302788140017A2BC9C140000A33A | ||
2041 | :107F800081812A84A884E61C2C88160012A2D09C29 | ||
2042 | :107F9000D210E4700400078024941ACCD39CC598B6 | ||
2043 | :107FA00027880A3013000080A4841600C2111E2105 | ||
2044 | :107FB0000E871DA214008E8716001CA23510919802 | ||
2045 | :107FC00010A200A0108092853B8544D02280073803 | ||
2046 | :107FD000BB84EA9821800738B9840C307E812B87D6 | ||
2047 | :107FE00072879198000020002B0000002000000004 | ||
2048 | :107FF0002000000020000000200000002000000001 | ||
2049 | :1080000020000000200000002000000020000000F0 | ||
2050 | :1080100020000000200000002000000020000000E0 | ||
2051 | :1080200020000000200000002000000014001400C8 | ||
2052 | :10803000499814001400E298CD981400140014001C | ||
2053 | :1080400080003701000001020406080C20212240B4 | ||
2054 | :1080500080F818000B3001A2140000A2140000A246 | ||
2055 | :10806000140202A2388806383988C32064082FA871 | ||
2056 | :10807000C128AE9C03A20C30462861816A8400832B | ||
2057 | :1080800056183A8804A8F228919CF4A80C30E128EC | ||
2058 | :10809000919C022806A2C3642E2807A2A064E06D6A | ||
2059 | :1080A000A067C06F14183B882478C16864783E8844 | ||
2060 | :1080B00002A8768577866B20C128AE9C44200321D8 | ||
2061 | :1080C000A2208120E4A809A2012909A8140005A280 | ||
2062 | :1080D00000A372189A873C88E21F01C60AA26E8527 | ||
2063 | :1080E0000407919C140004A200A30930E21964F86B | ||
2064 | :1080F0006E853F88E608F7A881F8F0A801C814004B | ||
2065 | :10810000C1F81600B285F080329502FBE21D140022 | ||
2066 | :10811000328541F21400E21DA884A0D7E61F1400A6 | ||
2067 | :1081200008A243600880C11D1600008360812A8474 | ||
2068 | :1081300041F00830A884D6114270DD201100D5200E | ||
2069 | :1081400022881600008047281110FCA8008000A09B | ||
2070 | :1081500002281110FDA89BA83E281110FDA80BA213 | ||
2071 | :1081600017000C3000A3E21D81DB1400100201A8EF | ||
2072 | :108170001400E0263A8702FBF219E21F14000DA258 | ||
2073 | :1081800006381002B39C04071700FF600C302087EC | ||
2074 | :1081900011A2639D72873788012121A8D210E2784D | ||
2075 | :1081A000669DFCA884D9E2F0A1F06CA81400318887 | ||
2076 | :1081B00066D130880F80019420B502C820880FA8AE | ||
2077 | :1081C00001230DA8D210E478669D21882088E6A8B6 | ||
2078 | :1081D00023F142F101F14FA8D210F67032880382E8 | ||
2079 | :1081E0000C879ED901601400456814021BA2639D90 | ||
2080 | :1081F000012040A80182521884D163D134880180C3 | ||
2081 | :1082000001A82730A884561A3388140018A281695F | ||
2082 | :108210004F9D26690269341A01A8141A21701400AE | ||
2083 | :1082200000A341616469108092852680B984E46965 | ||
2084 | :108230002380E1160180F110466913A2621413A293 | ||
2085 | :108240000080E11607A8696914A2C2610280E114E6 | ||
2086 | :108250000480E11601010A302788140017A24F9DFF | ||
2087 | :10826000140000A381812A84A884E61C2C881600AF | ||
2088 | :1082700012A2639DD210E4700400078024941ACCEB | ||
2089 | :10828000669DF8A827880A3013000080A484160091 | ||
2090 | :10829000C2111E210E871DA214008E8716001CA27B | ||
2091 | :1082A0003510B4A810A207380C307E812B87728756 | ||
2092 | :0682B000ADA800000C0D5A | ||
2093 | :00000001FF | ||
2094 | /************************************************************************** | ||
2095 | * QLOGIC LINUX SOFTWARE | ||
2096 | * | ||
2097 | * Copyright (C) 2004 QLogic Corporation | ||
2098 | * (www.qlogic.com) | ||
2099 | * | ||
2100 | *************************************************************************/ | ||
2101 | |||
2102 | /************************************************************************ | ||
2103 | * * | ||
2104 | * --- ISP1040 Initiator/Target Firmware --- * | ||
2105 | * 32 LUN Support * | ||
2106 | * * | ||
2107 | ************************************************************************/ | ||
2108 | |||
2109 | /* | ||
2110 | * Firmware Version 7.65.06 (14:38 Jan 07, 2002) | ||
2111 | */ | ||
diff --git a/firmware/qlogic/12160.bin.ihex b/firmware/qlogic/12160.bin.ihex new file mode 100644 index 000000000000..dc800ecdaf3a --- /dev/null +++ b/firmware/qlogic/12160.bin.ihex | |||
@@ -0,0 +1,1771 @@ | |||
1 | :100000000A042A000010040841100000C93600004C | ||
2 | :100010004320504F525947495448312039392C31E7 | ||
3 | :1000200039313239312C39392C3339313439512085 | ||
4 | :100030004F4C494720434F435052524F54414F4930 | ||
5 | :10004000004E492050533231363146207269776D67 | ||
6 | :10005000726120655620726569736E6F31202E3093 | ||
7 | :1000600034302020432073756F74656D20726F4E9D | ||
8 | :10007000202E303050206F72756474634E202E6FC6 | ||
9 | :100080002020303020200024C920FF907120000261 | ||
10 | :10009000A070A2700120FF010420FCD0201171206B | ||
11 | :1000A0000001A070A270C1202000892021127120BF | ||
12 | :1000B0001000C3700400C7705349CB702050CF703C | ||
13 | :1000C0002020D3700A000120FD040420D6700920EE | ||
14 | :1000D000FFFE30212821A2A1004724842484248407 | ||
15 | :1000E00024842484248492A100910920000001200A | ||
16 | :1000F00032000C08051E182279200047A02F082482 | ||
17 | :1001000011200000A9204000A4420981D81D092027 | ||
18 | :1001100000FF003402A118021001A820A4421B789D | ||
19 | :1001200064001478CDC0D5C0167871200002D600C6 | ||
20 | :10013000692040470C085C460120FF010420FCD0E8 | ||
21 | :10014000301169208047712000010C085C4614784A | ||
22 | :10015000D4C01678DE00CA7EC27CC67B67780000F9 | ||
23 | :1001600000788DC0027831203000AF78010123780B | ||
24 | :1001700002002778020009200200692040471B681E | ||
25 | :100180000300236807002768FA002B6808002F681F | ||
26 | :10019000280037680600336808003B6800000981C2 | ||
27 | :1001A0000005CF680A00BF68C04779200047D368C0 | ||
28 | :1001B0002D76C368C04CC768C04BCB68C08CA7689D | ||
29 | :1001C000448FAB68498FAF68448FB368448FA3688E | ||
30 | :1001D00001000120FF010420FCD0C81169208047E4 | ||
31 | :1001E0007008CF680A00BF68C049D3683978C3680F | ||
32 | :1001F000C06CC768404CCB68D08DA768498FAB688E | ||
33 | :100200004E8FAF68498FB368498FA3680100E6003D | ||
34 | :100210006920C04B71200002EC70E4D0192009184D | ||
35 | :1002200021200900201119200C1821200C000C0895 | ||
36 | :10023000751D0120FF010420FCD088116920404C6D | ||
37 | :1002400071200001EC70E4D0192009182120090068 | ||
38 | :10025000201119200C1821200C000C08751DEE002F | ||
39 | :10026000112002006920C04C09200200A9200001D1 | ||
40 | :10027000376800000B684000C87B86A3FFFE28118A | ||
41 | :10028000176800011F6864002000176864001F6879 | ||
42 | :100290000200E8AD1000041F35110981381D01204E | ||
43 | :1002A000FF010420FCD02811118218016920C06CC4 | ||
44 | :1002B000D8080C08F6220C083D400C088C1B0C08D2 | ||
45 | :1002C000154691200022792000477120500091208E | ||
46 | :1002D00000247920004771202000912000267920F9 | ||
47 | :1002E00000027120404791200028792000017120F0 | ||
48 | :1002F00080479120002079200047712010000032B3 | ||
49 | :1003000085A03D30902071201000C37000000410C3 | ||
50 | :100310008C11C07086A0020010110C08BA1339208D | ||
51 | :1003200000000C08AB12AC7805A08011040E9A11E5 | ||
52 | :100330006C7865A010010C08A1200C08261E040E84 | ||
53 | :10034000AF116C7865A010010C08A120040EAF114C | ||
54 | :10035000092047471120874704210C2205A11001DD | ||
55 | :100360000C089B1C71204047A07005A0E8014C744C | ||
56 | :1003700085A40000C8017920000291200080D0727D | ||
57 | :100380008CA23D3090210C084C27912000809120B8 | ||
58 | :100390003D30040ED111792000476C7865A0200112 | ||
59 | :1003A000712010000C08A120041DD91179200047EC | ||
60 | :1003B000712010000C08294471208047A07005A00E | ||
61 | :1003C00088014C7025A070017920000191200080E7 | ||
62 | :1003D000D0728CA23D3090210C084C2791200080D7 | ||
63 | :1003E00091203D307920004771201000040EFA1151 | ||
64 | :1003F0006C7865A010010C08A120041D8E110C085A | ||
65 | :10040000294404088E11003C84A0070002000C124D | ||
66 | :100410000C120E120E1213121312181218120C08CC | ||
67 | :100420007525912000240C08D5400500912000225C | ||
68 | :100430000C08D5400500912000220C08D5409120E1 | ||
69 | :1004400000240C08D540050041124112421242120C | ||
70 | :100450004D124D124D124D1256125612611261126A | ||
71 | :100460004D124D124D124D12701270127012701208 | ||
72 | :10047000701270127012701270127012701270126C | ||
73 | :100480007012701270127012F80C0600060126012C | ||
74 | :10049000912000280C0892252E010E010E000D005F | ||
75 | :1004A0000600060126010C0800122E010E010E00A6 | ||
76 | :1004B0000D00060006012601912000260C08922559 | ||
77 | :1004C0002E010E010E000D000600060126019120EE | ||
78 | :1004D00000260C089225912000280C0892252E0158 | ||
79 | :1004E0000E010E000D00060006012601D600E600F2 | ||
80 | :1004F000F600792000477120000269204047003D46 | ||
81 | :100500008CD03001EC7084A0001CE2780C085C46B2 | ||
82 | :10051000003D84D050016920804771200001EC70BB | ||
83 | :1005200084A0001CE6780C085C460C082625FE001A | ||
84 | :10053000EE00DE002E010E010E000D0008700B8093 | ||
85 | :100540004012077002008CA0E00120119CD008012D | ||
86 | :1005500087089708C37002400408BD13040E1E13D9 | ||
87 | :1005600061200000186084D004191E13287805A0AB | ||
88 | :10057000201104001F1304081E13FCD030010600D4 | ||
89 | :100580000C08291B0E005001280006000C081E1B39 | ||
90 | :100590000E002001012007400408BC131079FCD094 | ||
91 | :1005A0002811612040479CC1FCC720006120804782 | ||
92 | :1005B0009DC1FDC7606005A004191E1312797E60FD | ||
93 | :1005C0002878FCC086A018002011C6000C08261947 | ||
94 | :1005D000CE002B780000786065A0E001C6009C602A | ||
95 | :1005E0000C08F31BCE009F6000000C08601A092065 | ||
96 | :1005F00018008760030110780600FF841011FF8542 | ||
97 | :100600001001C5C012780C08341B0E001278981126 | ||
98 | :100610000C087F1B10789CD01811612040472000E7 | ||
99 | :10062000612080479CC012787B600000D060C4D0FD | ||
100 | :100630003001C4C0D260012005400408BC13040886 | ||
101 | :10064000BA13050006A0C270C670CA70CE70DA7008 | ||
102 | :10065000C0703DA08AA04000041A6C130200BA13B7 | ||
103 | :100660000814D6133C1470147014CE13781A7A142C | ||
104 | :10067000C813DA13DB13DC13DD137C1AC8138714D9 | ||
105 | :10068000DB144119721ADE13C817FE1730187618DA | ||
106 | :1006900085179217A517B717BF15C8130D1518158D | ||
107 | :1006A000261534154B1559155C156E157C158615D8 | ||
108 | :1006B000A515B115C813C813C813C813CC15DD157B | ||
109 | :1006C000F7152B165416661669169316CC16DE16F9 | ||
110 | :1006D00053176317C813C813C813C813751700211D | ||
111 | :1006E0008AA04000041AC8130200C813C813C81314 | ||
112 | :1006F000C813C8139E1AA41AC813C813C813A81A7B | ||
113 | :10070000E81AC813C813C813C81303146B1482144F | ||
114 | :10071000D6143C19C813C8130B19C813EC1A901A35 | ||
115 | :100720009A1AC813C813C813C813C813C813C81318 | ||
116 | :10073000C813C813C813C813C813C813C813C813E1 | ||
117 | :10074000C813C813C813C813C813C813C813C813D1 | ||
118 | :10075000C813C813C813C813C813C813C813C813C1 | ||
119 | :10076000C813C813C813C813C813CA72C6710120AE | ||
120 | :1007700006402800CE73CA72C67101200040C270C4 | ||
121 | :10078000040EBD13612000001B6001009120005089 | ||
122 | :10079000912080400500C3700140900CC37006405A | ||
123 | :1007A000780C99204100A1204100A9200500A35305 | ||
124 | :1007B000200CC470C37004000708F808F008E808AB | ||
125 | :1007C000E00891200080C3700400C7705349CB70CB | ||
126 | :1007D0002050CF702020D3700A0001200400D67072 | ||
127 | :1007E000792000001B7801003120300059200010D2 | ||
128 | :1007F00029201A045120450461204704C12020000B | ||
129 | :10080000912000509120804004081804D875DC74B1 | ||
130 | :10081000DA75DE741800292000002025D071C87216 | ||
131 | :10082000CC73C470A02099203000037001000770C1 | ||
132 | :1008300006001A731E722274267521204000FF8163 | ||
133 | :100840000409BA1382A140001012202106A008203A | ||
134 | :100850000384127007700400077001000870FCD058 | ||
135 | :10086000E80D0770020084A0E0012001C37002407F | ||
136 | :100870000408BD13A824A553100C0408BA1329209A | ||
137 | :1008800000002025D071C872CC73C4709820A120BC | ||
138 | :10089000300003700000077006001A731E72227485 | ||
139 | :1008A00026752120400007700600FF810409BA1355 | ||
140 | :1008B00082A140001012202106A00820038412709B | ||
141 | :1008C000A824A653077001000870FCD0E80D84A08E | ||
142 | :1008D000E001480DC37002400408BD13D875DC74F4 | ||
143 | :1008E000DA75DE747808C471C87014219EA70400FC | ||
144 | :1008F00008110A20CA720408B913C7700A00CB7025 | ||
145 | :100900000400CF702A000408BA13D875DC76DA75B3 | ||
146 | :10091000DE761800292000003025C470C872CC7320 | ||
147 | :10092000D074C670CA72CE73D27405A0E8050AA44A | ||
148 | :10093000080140120180727884A000FC3801AC7874 | ||
149 | :1009400085C0AE78012005400408BC137E7B7A7A0E | ||
150 | :10095000867E827D767C8CA400FF700107840480F3 | ||
151 | :1009600004800C810C810F8118A191A20000B1A616 | ||
152 | :10097000000081A50000500007840480048018A3B3 | ||
153 | :1009800091A20000B1A6000081A500001A731E729A | ||
154 | :100990002276267005A61801107AC5C2127AAC78A4 | ||
155 | :1009A00084A0FCFFAE781800AC7885C0AE7804084F | ||
156 | :1009B000BA13D875DC76DA75DE76180029200000C7 | ||
157 | :1009C0003025C470C872CC73D474C670CA72CE732A | ||
158 | :1009D000D67405A000050AA41001041ABC130180F6 | ||
159 | :1009E000927884A000FC3801AC78C5C0AE780120B4 | ||
160 | :1009F00005400408BC139A7A9E7BA27DA67E002641 | ||
161 | :100A000005A51801107AC5C2127A967CAC7884A02C | ||
162 | :100A1000FFFCAE781800AC78C5C0AE780408BA13F5 | ||
163 | :100A2000092000006C7865A0180108810060D80CCE | ||
164 | :100A3000C47A0408B813092048470C210120FF019B | ||
165 | :100A40000420FCD00419B91311208847142204088B | ||
166 | :100A5000B813092049470C210120FF010420FCD0D4 | ||
167 | :100A60000419B9131120894714220408B81361200E | ||
168 | :100A7000404728612C621482148214820120FF01F5 | ||
169 | :100A80000420FCD04811612080472863DA732C636E | ||
170 | :100A90001C831C831C83DE730408B81309204C4795 | ||
171 | :100AA0000C210120FF010420FCD00419B9131120EE | ||
172 | :100AB0008C4714220408B81318790408B9130920C4 | ||
173 | :100AC00002020C218CA1300F0120FF010420FCD078 | ||
174 | :100AD0000419B91311200201142294A2300F040842 | ||
175 | :100AE000B81309204D470C210120FF010420FCD040 | ||
176 | :100AF0000419B91311208D4714220408B813207962 | ||
177 | :100B00000120FF010420FCD00419B913247A040841 | ||
178 | :100B1000B8131120404CC471FCD110111120C04BEE | ||
179 | :100B2000078184A00F0003800380038068A2006A0D | ||
180 | :100B3000086B1C6CDA74FCD1181121203B021000E8 | ||
181 | :100B400021203B012424A4A4001CDE740408B71354 | ||
182 | :100B5000C4770C089A1B912000801C6B146A9120AA | ||
183 | :100B6000018008270408B71361204047186101205D | ||
184 | :100B7000FF010420FCD00419B913612080471862DA | ||
185 | :100B80000408B813C4770C089A1B912000800869E8 | ||
186 | :100B9000186A106BDA77912001800408B713C471CA | ||
187 | :100BA000102194A20F0082A21000041AB3130C08A3 | ||
188 | :100BB000B42384A30040100195A220000408B713B9 | ||
189 | :100BC000C4710021BCC082A01000041AB313BCD1B0 | ||
190 | :100BD00020111120484704222000112088470422B8 | ||
191 | :100BE000BDC006000021BCC012200C0858231E0006 | ||
192 | :100BF0000408B913C471212049470424C670192080 | ||
193 | :100C000000003000C871212089470424CA70FDC348 | ||
194 | :100C100011202316A9200800042206A13801108201 | ||
195 | :100C2000041F0916C471C8720408B21392A22316D5 | ||
196 | :100C3000260022211E000C086A230120FF01042047 | ||
197 | :100C4000FCD01011FCD3F0090408BA13E803FA0031 | ||
198 | :100C5000F401EE020400010002000300612040479D | ||
199 | :100C600028612C62148214821482C4702A60C870B5 | ||
200 | :100C70000380038003802E600120FF010420FCD04C | ||
201 | :100C8000A011260016006120804728612C62148282 | ||
202 | :100C900014821482D8702A60DC7003800380038081 | ||
203 | :100CA0002E60DA71DE721E002E000408B813612077 | ||
204 | :100CB00040473061C47032600120FF010420FCD045 | ||
205 | :100CC0000419B913612080473062C870326004088B | ||
206 | :100CD000B81318790408B913C47184A1CFF048017E | ||
207 | :100CE0000120FF010420FCD00419B313C8720408CA | ||
208 | :100CF000B213192000000C08A62336000120FF01C2 | ||
209 | :100D00000420FCD018011E000408B913C87184A186 | ||
210 | :100D1000CFF028010E001021C4710408B213FDC3E6 | ||
211 | :100D20000C08A62310231E000408B813C47182A166 | ||
212 | :100D3000100048020120FF010420FCD00419B31365 | ||
213 | :100D4000C8720408B21311204D4704220600048122 | ||
214 | :100D5000081208811221192000000C089323012099 | ||
215 | :100D6000FF010420FCD018011E000408B913C8714B | ||
216 | :100D700082A11000280206001021C4710408B213D9 | ||
217 | :100D800011208D47042206000481081208811221D7 | ||
218 | :100D9000FDC30C0893232E001E000408B813C47171 | ||
219 | :100DA000C87284A1FDFF0419B21384A2FDFF0419C7 | ||
220 | :100DB000B2130021207922780022247A26780408B0 | ||
221 | :100DC000B8131120404CC471FCD110111120C04B3C | ||
222 | :100DD000078184A00F0003800380038068A2C8728B | ||
223 | :100DE000CC73D874C6710068CA70CE73DA7491205F | ||
224 | :100DF0000080026AACD2181121200000900084A467 | ||
225 | :100E0000FF0082A00200041A4F173F84BCA7FF0016 | ||
226 | :100E1000400186A7020004194F1784A4FF000409AB | ||
227 | :100E20004F1761200002FCD1100161200001292030 | ||
228 | :100E30000900312062003F84BCA7FF003001078316 | ||
229 | :100E400084A0FF0010113DA738114120190084A390 | ||
230 | :100E5000FF0082A01A001002A4A4FF00078384A050 | ||
231 | :100E6000FF00880142A8F00286A0100020119CA378 | ||
232 | :100E7000FF009DA3000FBCA3FF00002502A7900266 | ||
233 | :100E8000002602A7781239203A00046805A70668F0 | ||
234 | :100E90000A6B0C6BCE731C68DA701E6C912001809B | ||
235 | :100EA0000408BA13912001800408B413C4770C0815 | ||
236 | :100EB0009A1B91200080146A1C6B91200180C870DD | ||
237 | :100EC0001668CC701E6808270408B713C470612028 | ||
238 | :100ED000404718611A600120FF010420FCD004196A | ||
239 | :100EE000B913C8706120804718621A600408B813EB | ||
240 | :100EF000C471C872CC7382A11000041AB3130C0819 | ||
241 | :100F0000D82384A30040100195A220000408B71341 | ||
242 | :100F1000C4770C089A1B91200080086A8DC20A6A67 | ||
243 | :100F20009120018008270408B813C4770C089A1B85 | ||
244 | :100F300091200080086A94A2F9FF0A6A046805A05B | ||
245 | :100F400010010C08D5229120018008270408B8134D | ||
246 | :100F5000C4770C089A1B91200080086A95C20A6A1F | ||
247 | :100F6000046805A010010C08D522912001800827F3 | ||
248 | :100F70000408B813C477412001004920050051201E | ||
249 | :100F80002000912000800C08B21B912001800827CE | ||
250 | :100F9000086A0408B813C477FCD728010C08291B79 | ||
251 | :100FA00038010408BC130C081E1B10010408BC13F4 | ||
252 | :100FB000C873CC72C677CA73CE720C082A1CE811AB | ||
253 | :100FC000186805A0A001082776000C08F7237E000A | ||
254 | :100FD000701101201500FCD718116120404718003E | ||
255 | :100FE000FDC0612080472A78912001800500912072 | ||
256 | :100FF0000180012005400408BC13912001800408F1 | ||
257 | :10100000BA13C477FCD728010C08291B380104083F | ||
258 | :10101000BC130C081E1B10010408BC13C67741202A | ||
259 | :1010200021004920050051202000912000800C085B | ||
260 | :10103000B21B09201600FCD7181161204047180088 | ||
261 | :1010400061208047FDC1636003007B600000726720 | ||
262 | :101050007F600F002A79D061C4C1D2610C08D5220B | ||
263 | :10106000912001800500C877CA77C477C677FCD77E | ||
264 | :1010700028010C08291B38010408BC130C081E1B8E | ||
265 | :1010800010010408BC13BCA700FF912000800920B8 | ||
266 | :101090001700FCD7181161204047180061208047D5 | ||
267 | :1010A000FDC17B6000006360020072677F600F001B | ||
268 | :1010B0002A79D061C4C1D2610C08D5229120018067 | ||
269 | :1010C000412021004920050051201000912000807E | ||
270 | :1010D000C87005A01801D060FDC0D2600C08B21B1A | ||
271 | :1010E000C8703668388784A71F00C01D9120018012 | ||
272 | :1010F000050019200000C87284D228010C08291BA1 | ||
273 | :1011000038010408BC130C081E1B10010408BC1392 | ||
274 | :10111000C872CA72AC7884A0030018153920000088 | ||
275 | :1011200084D20801FDC7412021004920040051203C | ||
276 | :1011300008000C089A1B912000800868D4C00DA8F4 | ||
277 | :101140000A693768000091200180388784A71F0052 | ||
278 | :10115000801DBCA700FF3F8738873F8784A7000F0B | ||
279 | :10116000401D91200080C8726920000184D21011B6 | ||
280 | :1011700069200002086884A0FDFF0A683068B4D0C6 | ||
281 | :10118000B0014B680400A9201400486894D01001F5 | ||
282 | :10119000041FC2184B680900A9201400486884D0B5 | ||
283 | :1011A0001001041FCB18A920FA00041FD2187920BF | ||
284 | :1011B000004709201800C87284D2181161204047E6 | ||
285 | :1011C000180061208047FDC17B6000002A796360C0 | ||
286 | :1011D00001007F600F00A3600000A460AE60B260F9 | ||
287 | :1011E000D060B4D06001B4C0D260C600B46065A065 | ||
288 | :1011F0000860D4C00A60186001801A60CE00D06018 | ||
289 | :1012000084A0FF7ED260AC788DC0AE78FF830801E9 | ||
290 | :1012100005001B685400912001800500CC730C0868 | ||
291 | :101220007818EC69486A85A100184A6885A14000D1 | ||
292 | :10123000EE68CC7321200400A920FF09041F1B19AC | ||
293 | :101240002184D01D1983B01DEE694A6A9120018066 | ||
294 | :101250000500FCD71811692040471000692080471D | ||
295 | :10126000C471C6711669FF811011A3680100AC78C2 | ||
296 | :101270008CC0AE7884D010110C087A1C0500D8758B | ||
297 | :10128000DC74DA75DE7410002EA02025C471C873DA | ||
298 | :10129000CC72C671CA73CE7279200047DE7DDA7CCB | ||
299 | :1012A000D67BD27A0C08771B04095C1AA9200500AA | ||
300 | :1012B000A120144791200080A141912001800920A4 | ||
301 | :1012C00040000C08411D20010C087F1B04085C1A1B | ||
302 | :1012D00004608CA0FF008EA10900201106000C08FC | ||
303 | :1012E00086200E0084A000FF078009800409F11900 | ||
304 | :1012F000C600682C0C08771BA805002C9E68098185 | ||
305 | :10130000C01D9F600000CE00C600DC7DD87CD47B71 | ||
306 | :10131000D07A90A2400099A30000A1A40000A9A542 | ||
307 | :101320000000DE7DDA7CD67BD27A682C9C6865A0D2 | ||
308 | :101330000409F019092040000C08411DA0150460A3 | ||
309 | :1013400084A0FF0086A002005001046084A0FF007A | ||
310 | :1013500086A00A00381116000C0883201E00002DFC | ||
311 | :1013600002609808CE00C6009C600C08F31BCE00FB | ||
312 | :101370009F6000000C08601A092018000860CDC0AA | ||
313 | :101380000A600460866010780600FF841011FF85F3 | ||
314 | :101390001001C5C012780C08341B0E0012780C081E | ||
315 | :1013A0007F1B04085C1ACE00C6009C600C08F31B6F | ||
316 | :1013B000CE009F6000000C08601A092018008760AA | ||
317 | :1013C00003011B60030010780600FF841011FF85E5 | ||
318 | :1013D0001001C5C012780C08341B0E0012780C08DE | ||
319 | :1013E0007F1B04085C1ACE001461FCD120010C089C | ||
320 | :1013F000291BF00118000C081E1BD0010C08601AF4 | ||
321 | :1014000009201800876003011B6021001078060086 | ||
322 | :10141000FF841011FF851001C5C012780C08341B21 | ||
323 | :101420000E0012780C087F1B012007400408BC1333 | ||
324 | :1014300004618CA1FF0086A1050018111C60BDC0CD | ||
325 | :101440001E60C474C873CC72146091200080E600E2 | ||
326 | :1014500009201200FCD0181171204047180071209B | ||
327 | :101460008047FDC12A7963700500D071C4C1D27173 | ||
328 | :1014700066736A726E74727077700000002C7A70F6 | ||
329 | :101480002EA030251C6184A1600010010C08E93FEA | ||
330 | :10149000EE009665A6659A66AA66AF600000B36026 | ||
331 | :1014A0000000146723600000246096A00100101162 | ||
332 | :1014B000008026600C08D522912001800500C370B1 | ||
333 | :1014C00005400408BD13A920050099201447912068 | ||
334 | :1014D00000800A5391200180002110A299A30000EE | ||
335 | :1014E000A1A40000A9A500000500C471C7700000F8 | ||
336 | :1014F0001E790408BA13C471C671682110006920EE | ||
337 | :1015000000100C6916A0042D10A2688D0981D81D49 | ||
338 | :1015100085A200001811C37000401000C370034082 | ||
339 | :10152000CA700408BD136479C671C47182A1030036 | ||
340 | :10153000041AB31366790408BA136479C6710408EF | ||
341 | :10154000BA130079C671C47102790408BA1300791C | ||
342 | :10155000C6710408BA13C470112000008CA00D00DD | ||
343 | :1015600060010C81300210820C810C81100210820B | ||
344 | :101570000C81FF810419B41310820E7A8CD23805C5 | ||
345 | :101580001079CDC11279092021001920030084D2DD | ||
346 | :10159000C00108811920410011204E8F122319200B | ||
347 | :1015A00042001082122319204300108212231920B6 | ||
348 | :1015B000460010821223192047001082122319209E | ||
349 | :1015C00006001120538F12211120738F12230479EA | ||
350 | :1015D00006780408B9130478C6700408BA13C471F5 | ||
351 | :1015E000FCD118111120C04B10001120404C078174 | ||
352 | :1015F00084A00F0003800380038068A211200000F4 | ||
353 | :101600001468FCD0100195A20002B4D0100195A27C | ||
354 | :1016100001000C6B0068DA700408B7131478F4D07A | ||
355 | :10162000300101200740DB70000005A04800FCD01D | ||
356 | :10163000300101200740DB70010005A0080006A072 | ||
357 | :1016400005001478F4D0300101200740DB70000061 | ||
358 | :1016500005A0080006A005001478FCD03001012088 | ||
359 | :101660000740DB70010005A0080006A0050012710C | ||
360 | :101670001A721E731078C4D010012274267580ACC3 | ||
361 | :10168000010008810C81A9819880A120300003709D | ||
362 | :1016900000008460A220A65307700100747984A121 | ||
363 | :1016A00000FF40010F810C810C81048004800780C1 | ||
364 | :1016B00000A118000781048004807C7908A1787A51 | ||
365 | :1016C00006A011A2107DC4D52001847B19A3807CC3 | ||
366 | :1016D00021A40870FCD0E80D03700100077006001B | ||
367 | :1016E0001A711E72107DC4D510012273267484A055 | ||
368 | :1016F000E0010500487865A02001042C4A786320A9 | ||
369 | :1017000000000500F6007920004748786220002C90 | ||
370 | :1017100005A010110C0875254A78FE00050011205F | ||
371 | :1017200000914A7AC47B1983280180A232001220DA | ||
372 | :101730001020C80C13200000050016002600FCD75E | ||
373 | :1017400018111120C04C10001120C06C84A7000F8C | ||
374 | :101750000B8084A71F002001038003800380038087 | ||
375 | :1017600005A168A22E001E000500390C00292A6878 | ||
376 | :10177000002A2E68086884A0EFF90DA80A69E6001F | ||
377 | :10178000FCD728110920524771204047200009202A | ||
378 | :101790009247712080470C21046805A0480116A1DA | ||
379 | :1017A000381160200060066816000B200000180049 | ||
380 | :1017B000092000001600046865A078010060066832 | ||
381 | :1017C00021040C08B21D1068087909810A7901808A | ||
382 | :1017D0001268881D1079A5C112791E000269066978 | ||
383 | :1017E000002D60200C08BF26EE00050065A06001FA | ||
384 | :1017F00008209C6005A0280162209F60000065A071 | ||
385 | :10180000C00C48784A7962200500076003018F60A8 | ||
386 | :101810000000A9201C0080AC0500A02001200000D1 | ||
387 | :10182000A44028681A602C6822600500E600FCD7F6 | ||
388 | :101830002811712040473120C04720007120804787 | ||
389 | :101840003120C0494C708CA00002281108A60A2D36 | ||
390 | :1018500000804E7006A0EE000500F600FCD71811BF | ||
391 | :10186000792040471000792080470C089A1B91206E | ||
392 | :10187000008004680A7865A0F0053000002C0A7822 | ||
393 | :101880006020006065A0B805106006A3B81D0C605C | ||
394 | :1018900006A2A01D282C487806AC0811480404684C | ||
395 | :1018A00006AC401100606020066805A018110368AE | ||
396 | :1018B00000004800006408786020026486A40000EC | ||
397 | :1018C0001011002C026860250C08021C1B6005002A | ||
398 | :1018D00023602000FE000C08B21DF6000879098183 | ||
399 | :1018E0000A7910680180126818111078A5C0127862 | ||
400 | :1018F0000120FFFF05A0FE0005007600002739202B | ||
401 | :101900000000FCD00801FDC741202100492004004F | ||
402 | :1019100051200800912000800C08B21B388784A752 | ||
403 | :101920001F00D01DBCA700FF3F8738873F8784A7D3 | ||
404 | :10193000000F901D912001807E0005006C78092029 | ||
405 | :10194000748F0C210DA1180165A00408A12061204D | ||
406 | :101950000000186084D0B81110788CD030018CC091 | ||
407 | :101960001278FCC76920404728008DC01278692092 | ||
408 | :101970008047FDC7912000801C681F6800009120EF | ||
409 | :10198000018005A0081105008CA0F0FF10010C08D3 | ||
410 | :1019900075250200D71CDA1CE01CE41CD81CE81CCE | ||
411 | :1019A000D81CD81CD81CEE1C181D1B1D201D291D61 | ||
412 | :1019B000D81CD81C05000C0875250C087A1C0120C1 | ||
413 | :1019C00001800408321D012003800408321D01201B | ||
414 | :1019D00004800408321D0C087A1C012006800408CB | ||
415 | :1019E000321D11200A8091200080FCD71811692037 | ||
416 | :1019F00040471000692080473820006886A000001A | ||
417 | :101A000020011E6F91200180050026007068BCA097 | ||
418 | :101A100000FF4120210049200400512010000C0843 | ||
419 | :101A2000B21B388784A71F00D01D912001800E00B3 | ||
420 | :101A30007069C671D00001200C80B8000C087A1CB7 | ||
421 | :101A400001200D809000FCD71001E4780800E078B8 | ||
422 | :101A5000C67001200E804800FCD71001EC78080009 | ||
423 | :101A6000E878C67001200F800000C270FCD7181102 | ||
424 | :101A7000DB7000001000DB700100612000001B60C3 | ||
425 | :101A8000010091208040050080AC0100FF81180515 | ||
426 | :101A900099203000A0200C7084A0FF07000118706E | ||
427 | :101AA00006001C70060020700600247006001271EB | ||
428 | :101AB000AC811A721E7322742675037001000770C0 | ||
429 | :101AC000010008700B80E81E077002008CA0E00186 | ||
430 | :101AD0001011A55306A003700000077004000E004B | ||
431 | :101AE00026700E0022700E001E700E001A70050087 | ||
432 | :101AF00011202000092010000A6B0E6C1F680102E3 | ||
433 | :101B0000036820FD076838001A6A002DE8A0080065 | ||
434 | :101B100090A204000981801D0500EC70DCD0201526 | ||
435 | :101B2000292001001478CCD06011EC70E4D0192089 | ||
436 | :101B30000A0C21200A00201119200C0C21200C0075 | ||
437 | :101B40007000EC70E4D0281119200C1821200C0032 | ||
438 | :101B500030001920091821200900ADA500020A6BE8 | ||
439 | :101B60000E6C1E6D07683800050004608660082C46 | ||
440 | :101B700063200000687805A06A791001022C080033 | ||
441 | :101B80006E790500C6006120004787680301082DB3 | ||
442 | :101B90006B200000686005A06A611001022D08003A | ||
443 | :101BA0006E61CE00050091200080042C6E7805A0A7 | ||
444 | :101BB00008116A78912001809C6005A08801C60008 | ||
445 | :101BC000602008209C6005A0380162209F60000012 | ||
446 | :101BD00065A09C6005A0C81D48784A796220CE00A7 | ||
447 | :101BE000487862209F60000085AC000010110C084E | ||
448 | :101BF00075254A780500A920100006A0048086807B | ||
449 | :101C00008E81081200A2041FFC1D86808E810500B3 | ||
450 | :101C10005601A920100005A0B8011AA1A81213822C | ||
451 | :101C20008D8128021AA12012041F0C1E28001AA15F | ||
452 | :101C300008231082041F0C1E0600003284A0FFEF50 | ||
453 | :101C400080200E005E0105000600003285A0001015 | ||
454 | :101C5000B80C747DD07006A50409DA1E10785020E7 | ||
455 | :101C60000C08771B0409DA1E46A070790025008055 | ||
456 | :101C700012A10920400008123000D07206A21801FB | ||
457 | :101C8000408809208000C600127107700100992069 | ||
458 | :101C90003000A920200080AC0100A02061200000BD | ||
459 | :101CA000FF8810010C08771B0870FCD0E80D077046 | ||
460 | :101CB0000200912001808CA0E0013815A553FF8C13 | ||
461 | :101CC0002011FF880409C71E5000002C8E78A9201F | ||
462 | :101CD000200080AC0100A020A5530408C71E46A028 | ||
463 | :101CE00018721C73C4DA10012074247592A240008B | ||
464 | :101CF0009BA30000A3A40000ABA500001A721E73F2 | ||
465 | :101D0000C4DA18012274267506A0077004000409BD | ||
466 | :101D1000C71EFF8C10010C087F1BCE000C087F1B18 | ||
467 | :101D200046A0887800808A7886A00200C0017C7A6C | ||
468 | :101D3000787BC4DA1001847C807D7479078104800B | ||
469 | :101D4000048010A299A30000A1A40000A9A500008E | ||
470 | :101D50001A721E73C4DA8805227426757004146022 | ||
471 | :101D6000FCD018116920404710006920804791205D | ||
472 | :101D700000801F680200FF88200146A08C78602048 | ||
473 | :101D8000700C8B780000AC7885A00300AE789120B1 | ||
474 | :101D900001809800CE008B7800000C085C20046065 | ||
475 | :101DA00084A00F005900FF8830018C786020046007 | ||
476 | :101DB00084A00F0019000408261E05000200EC1E76 | ||
477 | :101DC000071F201FEC1E2D1FFD1EEC1EEC1EEC1E1F | ||
478 | :101DD000051F1E1FEC1EEC1EEC1EEC1EEC1E392017 | ||
479 | :101DE0000004BC7805A7BE78086005A70A600C0847 | ||
480 | :101DF000691F9C60BA789F6000000C0848200500AD | ||
481 | :101E0000BC78C4D00801580C1C60BDC01E603000F6 | ||
482 | :101E10000C088620BC78C4D00801080CBF780000EC | ||
483 | :101E20000460078084A0FF00B278018038010C08AC | ||
484 | :101E3000691F2001BC78C5C0BE7810000408841F4B | ||
485 | :101E400005000C088320BC788CA0000E1011C4D0B3 | ||
486 | :101E5000081128080C08691F10110408841F0500C8 | ||
487 | :101E6000BC78C4D010010408EC1EBF7800001467D1 | ||
488 | :101E700011200100A822186084A0FF0005A088019D | ||
489 | :101E8000BCA700FFA92020008EA001005001BCA724 | ||
490 | :101E9000008011200200A92000018EA0020008018C | ||
491 | :101EA000C0000C089A1B002D912000802B680000B8 | ||
492 | :101EB0002F680000086884A0DEFF0A68E8AD100003 | ||
493 | :101EC00091200180041F511F11821801A9200001D7 | ||
494 | :101ED000580C0C087F1B05009F600000B4786DA0B3 | ||
495 | :101EE000002CB6781011BA7838009E68002D026078 | ||
496 | :101EF000B87806AD08110260B0780180B278301170 | ||
497 | :101F0000BC78C4C0BE78B878602006A00500E600A2 | ||
498 | :101F10002EA03025BA7DB67DAE65B2651C60A2608C | ||
499 | :101F2000482084A9FFE11E6084A9600060010C08BC | ||
500 | :101F3000E93FFF864011FF853011392000080C0869 | ||
501 | :101F40004820040846209665A6659A66AA66146726 | ||
502 | :101F500071208047FCD710117120404784A7000FE3 | ||
503 | :101F60000B8084A71F00200103800380038003806F | ||
504 | :101F700005A1C07168A10027078084A00F0003801D | ||
505 | :101F800003800380C47100A1C26091200080147896 | ||
506 | :101F9000C4D03801FCD71811F4D040111000FCD087 | ||
507 | :101FA0002811086E84D6F001FCD9E011912001803F | ||
508 | :101FB0000C08021C912000800C08B21D91200180A9 | ||
509 | :101FC0001478C4D004094620FCD72011F4D0301175 | ||
510 | :101FD00004084620FCD01011040846201B60210094 | ||
511 | :101FE00004084620246096A001001011008026609D | ||
512 | :101FF000106A146802A268026001912001803920F1 | ||
513 | :1020000000029C60BA789F6000000C084820040819 | ||
514 | :102010004620082CFCD9F001006865A0D801046AAC | ||
515 | :10202000007084A002006801487006A25011046B81 | ||
516 | :1020300060210423026005A0081102696022026188 | ||
517 | :102040009800002D60200C08BF26086E60210262F7 | ||
518 | :10205000066950000068026965A01001026108006D | ||
519 | :1020600006696021036000006021FCD91801B4A654 | ||
520 | :10207000FCFF0A6E1068087D28850A7D00801268C2 | ||
521 | :1020800091200180B4D62801B6A640000A6E0C0843 | ||
522 | :10209000131CEE000500086005A70A60912000806F | ||
523 | :1020A0000C08B21D91200180B87865A028019C60C1 | ||
524 | :1020B000BA789F600000780CB678BA78050070791D | ||
525 | :1020C0007478182884D31801008012A1200200809F | ||
526 | :1020D00012A1781284C37C7A1A72787A1E72C4DADA | ||
527 | :1020E0002001847A2272807A267206A084D30801A5 | ||
528 | :1020F00000807678D2701C7805A0380101801E78A7 | ||
529 | :102100002011040E82209120804005003920982063 | ||
530 | :10211000100039209E20042705A0600100AC682033 | ||
531 | :102120000869106812690A680C69146816690E68F3 | ||
532 | :102130003887880C0500030009000F0015001B00FC | ||
533 | :10214000000015001B000000412000000C78020078 | ||
534 | :102150004A222522A92019213920748F3427107D85 | ||
535 | :10216000C000846086A00301041903211461186073 | ||
536 | :1021700005A12001FF86D81104080321038680A051 | ||
537 | :10218000558F0C6202220080106202220C08D01DC2 | ||
538 | :1021900030868EA60F00040984216C7865A0081D86 | ||
539 | :1021A000087802A62012ACD510113A26050082A6A6 | ||
540 | :1021B0000300041A8421912000806920000018681F | ||
541 | :1021C00084D0F8111120558F0422C6701082042289 | ||
542 | :1021D000CA7084D6301110820422DA701082042270 | ||
543 | :1021E000DE7085A62080C2701B68010091208040AF | ||
544 | :1021F000107884A0CFFF1278912001803B2000004E | ||
545 | :1022000005001078ADC01278040884213A260C0825 | ||
546 | :10221000502204196C226C7865A00419AE2091201C | ||
547 | :102220000080107884A0CFFFFF860801ADC012782F | ||
548 | :102230009120018004086C223920748F3427107D8E | ||
549 | :10224000A000846086A0030104196E211461186047 | ||
550 | :1022500005A12001FF86B81104086E2180A6558FC4 | ||
551 | :102260000C6202220C08D01D30868EA61E000409C6 | ||
552 | :1022700084216C7865A0281D087802A62012ACD5B0 | ||
553 | :1022800010113A26050082A60600041A8421912026 | ||
554 | :10229000008069200000186884D0F8111120558F43 | ||
555 | :1022A00009204E8FA8261C2104221A2008811082A2 | ||
556 | :1022B000041F502185A63080C2701B680100912048 | ||
557 | :1022C0008040107884A0CFFF12789120018006A072 | ||
558 | :1022D0000920758F0A203A2005001078ADC01278C9 | ||
559 | :1022E000B0003A260C08502204196C226C7865A0C4 | ||
560 | :1022F00004191E2191200080107884A0CFFFFF8652 | ||
561 | :102300000801ADC012789120018004086C22912050 | ||
562 | :102310000080077004009479D47002A1280268013B | ||
563 | :10232000907B02A350111000028038113A261078D9 | ||
564 | :10233000ADC0127891200180050084A100FF40010A | ||
565 | :102340000F810C810C8104800480078000A118009B | ||
566 | :102350000781048004809C7A10A21A72987A06A0E1 | ||
567 | :1023600011A21E72C4D43001A47A11A22272A07AE2 | ||
568 | :1023700011A22672A1203000037000000920548FA2 | ||
569 | :102380000A2609819821042184D008013386B0A649 | ||
570 | :102390000200A826A65303861270077001009079E8 | ||
571 | :1023A000947800800AA1081206A02820747984A1DC | ||
572 | :1023B00000FF40010F810C810C81048004800780A4 | ||
573 | :1023C00000A118000781048004807C7908A1787A34 | ||
574 | :1023D00006A011A2C4D42001847B19A3807C21A46F | ||
575 | :1023E0000870FCD0E80D84A0E001D001107D312000 | ||
576 | :1023F000548F3426A8780080AA788CD038110770C2 | ||
577 | :102400000600047094D0E81D04088621692047471F | ||
578 | :102410006B200300AC7885A00003AE7806A04800CE | ||
579 | :102420003020D67591208040967D107DACA5CFFFE1 | ||
580 | :10243000127D91200180AA78077006003A26037069 | ||
581 | :1024400001001A711E72C4D5100122732674050092 | ||
582 | :10245000846086A00301D8111461186005A1B81129 | ||
583 | :1024600069200000186884D090110C60C67010605C | ||
584 | :10247000CA70C37020801B680100912080400C0846 | ||
585 | :10248000D01D040E43226C7865A0101D0500590074 | ||
586 | :1024900030156C7865A0E0191004290000156C78DF | ||
587 | :1024A00065A0D81DE000846086A003016811186053 | ||
588 | :1024B000FCC01A6086A0040038110478A4D0200162 | ||
589 | :1024C0000C08D01D06A005007900181185A0010098 | ||
590 | :1024D0000500B900101141200100107D0500FF88A2 | ||
591 | :1024E0001001912080400500907B9479D47002A166 | ||
592 | :1024F000181185A300000500100202A30500028048 | ||
593 | :10250000050084A100FF40010F810C810C81048033 | ||
594 | :102510000480078000A118000781048004809C7A51 | ||
595 | :10252000987BA47CA07D10A206A019A321A429A5B4 | ||
596 | :1025300009201800286005A01001092040000C089F | ||
597 | :10254000341BD001A8780080AA788CD010151460B4 | ||
598 | :10255000FCD0181169204047100069208047912065 | ||
599 | :1025600000801F680300AB780000AC7885A00003F2 | ||
600 | :10257000AE78912001806800AB7800000C08D01D77 | ||
601 | :102580009079947800800AA1081206A09678D670F7 | ||
602 | :1025900006A071201000912001800500FCD71811C1 | ||
603 | :1025A00009205847100009209847912000800A20F0 | ||
604 | :1025B000F6000920804779200001FCD7201109206E | ||
605 | :1025C000404779200002042186A000008011FCD73A | ||
606 | :1025D000181109204547100009208547042105A04E | ||
607 | :1025E0003011307884A0C00010111B785200FE001A | ||
608 | :1025F000050009200200692000470120FF01042096 | ||
609 | :10260000FCD004194B237120804779200001212040 | ||
610 | :10261000BF494B780F000120FF010420FCD01801B6 | ||
611 | :102620001920373E3000A1202B011920373E84D1DC | ||
612 | :102630001001A1202B02042305A040019A781883E1 | ||
613 | :10264000AC2318839823A6531833A80C9B7800005A | ||
614 | :102650009B782000A9201000AF780000AF782020E0 | ||
615 | :10266000041F29230370000016008CD109200000EC | ||
616 | :102670000801BDC10C086C241E00207084A00F004E | ||
617 | :1026800085A0006306780F7800904378D8005378CF | ||
618 | :1026900090000B78082F52744F70000009814001A0 | ||
619 | :1026A00071204047792000022120BF4704080623FB | ||
620 | :1026B0000C0826250500160011200101BCD11011BF | ||
621 | :1026C000112001028CA10F00042284A0F0FF05A1BB | ||
622 | :1026D00012201E000C086C24050011200101FCD3FF | ||
623 | :1026E000101111200102A92009000B81041F72237F | ||
624 | :1026F0008CA1000E042284A0FFF105A11220050088 | ||
625 | :102700001920020009200101A92005001382041FDD | ||
626 | :10271000832394A2E000042184A01FFF05A20A20C5 | ||
627 | :102720001983180109200102780C0500112001010C | ||
628 | :10273000FCD3101111200102A9200C000B81041FF1 | ||
629 | :102740009B238CA100F0042284A0FF0F05A112207E | ||
630 | :10275000050011200201FCD31011112002020422F5 | ||
631 | :102760009CA0300F84A0CFF005A112200500C60068 | ||
632 | :1027700061200001BCD1101161200002BCC10381A5 | ||
633 | :10278000038080A020009A60AC62AC63CE0005009C | ||
634 | :10279000C60061200001BCD1101161200002BCC143 | ||
635 | :1027A0000381038080A022009A60A46084A0DFFFE0 | ||
636 | :1027B000AE60CE000500C60061200001BCD1101142 | ||
637 | :1027C00061200002BCC10381038080A020009A60C8 | ||
638 | :1027D000A4608CA220001801ACC29DA30040ECC3F1 | ||
639 | :1027E000B4D30811EDC3AE621020A460AE6318200C | ||
640 | :1027F000CE00050091200080C600E600186805A004 | ||
641 | :1028000004095024FCD118016120D08E10006120F1 | ||
642 | :10281000C08D0C0858246005A9200101FCD11801C5 | ||
643 | :102820006120D08D10006120C08CC6000C08582497 | ||
644 | :102830002801CE00608C041F1224A8040E00FCD1D5 | ||
645 | :10284000280182A0D08D71208047200082A0C08CFA | ||
646 | :102850007120404776707271382101200400627047 | ||
647 | :102860007F700F00D071C4C1D2710C08CB22C000A0 | ||
648 | :10287000FCD1181171204047100071208047206062 | ||
649 | :10288000DDC0226072713821002C7A7001200600B0 | ||
650 | :1028900062707F700F00D071C4C1D2710C08CB225E | ||
651 | :1028A000012000001000012001009120018005A0FE | ||
652 | :1028B000EE00CE000500042C05A070016020106021 | ||
653 | :1028C00006A340110C6006A22811146006A1101185 | ||
654 | :1028D00006A020000060800C85A001000500F60025 | ||
655 | :1028E000E60016007920804771200001BCD120113C | ||
656 | :1028F000792040477120000220798CA10F00EC70F4 | ||
657 | :10290000C4D010111E0060000B810B810B810B8164 | ||
658 | :102910000E008DA10008BCD010118DA1000F042164 | ||
659 | :10292000EE00FE000500012001470420ACD0381164 | ||
660 | :10293000E468ACD0200184A006000811090005005D | ||
661 | :102940001460E600360018207120404CFCD01011B5 | ||
662 | :102950007120C04B078084A00F0003800380038098 | ||
663 | :1029600070AE047084A00A0004192325087194A194 | ||
664 | :1029700000FF040923258CA1FF001C7084A000FF28 | ||
665 | :10298000C001047085A03A0006700120090002A170 | ||
666 | :10299000D81601200A0002A1D01601200C0002A1C5 | ||
667 | :1029A000C8161C7084A0FF001E70047084A0DFFF96 | ||
668 | :1029B000067001200A0006A1A80101200C0006A152 | ||
669 | :1029C000A0010120120006A198010120140006A117 | ||
670 | :1029D00090010120190006A188010120320006A102 | ||
671 | :1029E0008001D80009200C00D00009201200B80096 | ||
672 | :1029F00009201400A00009201900880009202000E7 | ||
673 | :102A0000700009203F00580009200A0040000920FA | ||
674 | :102A10000C002800092019001000112000000021DE | ||
675 | :102A200005A20A70047085A00A0006707120004794 | ||
676 | :102A30000470BCD05801FCD32011EA7371204047C8 | ||
677 | :102A40001800EE73712080471F700D003E00EE00ED | ||
678 | :102A500005000120FF010420FCD0D0110120FD045D | ||
679 | :102A6000042082A00500A01271200002EC718CA14C | ||
680 | :102A7000001C0F810C810C8179200001EC7884A06E | ||
681 | :102A8000001C07800480048005A18AA007000802BA | ||
682 | :102A90000500020074255B2574255B254E256825FD | ||
683 | :102AA0004E25087084A0FFC385A000300A70087806 | ||
684 | :102AB00084A0FFC385A000300A780500087084A0B8 | ||
685 | :102AC000FFC385A000200A70087884A0FFC385A0FA | ||
686 | :102AD00000200A780500087084A0FFC385A0000CC0 | ||
687 | :102AE0000A70087884A0FFC385A0000C0A7805004E | ||
688 | :102AF000040E7525912000807120000006001870DA | ||
689 | :102B000084D0E81D0E0071201000CA700E00C6703F | ||
690 | :102B1000C3700280DB70040ADF702A00712000009D | ||
691 | :102B20001B70010091208040F80C3C7F587E307C67 | ||
692 | :102B3000387DA0788A708E75927496769A7794A56F | ||
693 | :102B40003F00F4D43801BCD7281184A77D000419B4 | ||
694 | :102B50009C3C71089CA40F0082A304002003A6A340 | ||
695 | :102B6000070030191824078584A00F0002006C2B81 | ||
696 | :102B7000572C952CFB2E7932D03276330534D9344C | ||
697 | :102B8000AB35C725C4259E29852A4D32C4250C089E | ||
698 | :102B90007525050006A0380008788DC00A7806A0C3 | ||
699 | :102BA00002704A704270CE705C7005A0041918273C | ||
700 | :102BB000607084A007000200E12552265A26632691 | ||
701 | :102BC0006C26FE26752652263078BCD0101DD0719A | ||
702 | :102BD000BCD1F819B4D104192F26A07086A0010029 | ||
703 | :102BE000C009147005A0A819B0706DA0006865A098 | ||
704 | :102BF00055A09B7880000C6BAA7B086845A0106DDF | ||
705 | :102C000004686DA05DA086A801001801BC69AA7DBA | ||
706 | :102C1000AA79C0684DA01C6E0120100004084B2842 | ||
707 | :102C20005C7005A00419C625C600D600B0706DA062 | ||
708 | :102C3000006865A055A09B7880000C6BAA7B086893 | ||
709 | :102C400045A0106D04686DA05DA086A80100180164 | ||
710 | :102C5000BC69AA7DAA79C0684DA01C6E0120200025 | ||
711 | :102C600004084B280C085B3C0419C6251B78680037 | ||
712 | :102C7000B8706DA0B4685A789468D678DE78986891 | ||
713 | :102C8000D278DA7808788DC00A78BC683E70B4C112 | ||
714 | :102C9000D271B47065A0C068567003700200002D38 | ||
715 | :102CA0004A7080AD0900427005000C085B3C2011A1 | ||
716 | :102CB0001B7854000370040005000C085B3C2811CD | ||
717 | :102CC00011200C0019040370040005000C085B3C83 | ||
718 | :102CD000281111200600D1000370040005000C0823 | ||
719 | :102CE0005B3C281111200D008900037004000500D1 | ||
720 | :102CF0000C085B3C501111200600410078707B707D | ||
721 | :102D0000000068204A700370040005007071FCC167 | ||
722 | :102D1000078182789B78800086A20C002011AA7A15 | ||
723 | :102D20000120010098008CA11F008DA1C000AA798C | ||
724 | :102D300086A20D002001AA7A012002003800AB789B | ||
725 | :102D400020007471AA79AA7A012004009B7860009F | ||
726 | :102D5000AA785B7804001B7813010C086E3C7F7026 | ||
727 | :102D60000F00D070B4D06801B4C0D270C600B47087 | ||
728 | :102D700065A0086084A0EFFB0A60186001801A60FB | ||
729 | :102D8000CE000500147005A03811D070B4D0280111 | ||
730 | :102D9000B47006AC1011290C05001600A07186A1B4 | ||
731 | :102DA00001002805D600260000211120010012A2F2 | ||
732 | :102DB000B0706820006806AC20011182B001C90023 | ||
733 | :102DC000C80CC60000211120010012A2B0706820BA | ||
734 | :102DD00000686020086084A0EFFB0A601182100187 | ||
735 | :102DE0004100B00CA3700100CE002E00DE001E00DA | ||
736 | :102DF0000500E8AD0500A87006AD1011A4706820AC | ||
737 | :102E000005000C085B3C0419C625787068207077B3 | ||
738 | :102E10000C08953B502C0C08F63C9B7880001468FD | ||
739 | :102E200084A01F00BDC0AA781C6E412001000120B3 | ||
740 | :102E30000400040850280C085B3C0419C6259B7844 | ||
741 | :102E400080005C706820146FD070B4D06801B4C08A | ||
742 | :102E5000D270C600B47065A0086084A0EFFB0A6061 | ||
743 | :102E6000186001801A60CE000C08953B502C0C08AD | ||
744 | :102E7000F63C246805A0300182A00600080210007C | ||
745 | :102E800027680500146884A01F00BDC0AA783120FF | ||
746 | :102E900020004120010001200300040850288DC2B9 | ||
747 | :102EA000D272BC7200A215A0507108812AA108023A | ||
748 | :102EB000BC7164210465FF85701152712184A81DC5 | ||
749 | :102EC000D0708CD02801CC7005A01011CF700A00F2 | ||
750 | :102ED00005000022900CD0708CC0D270CF70000022 | ||
751 | :102EE000346005A0B01D086784A73F07D001D4D780 | ||
752 | :102EF000801D84A72100681D84A70200300184A7DB | ||
753 | :102F00000400380DBCA7FBFF0A6784A71802081D40 | ||
754 | :102F100084A700013001186005A0D819BCA7FFFEE6 | ||
755 | :102F20000A676825236800001C6E84A60E001863DB | ||
756 | :102F300028011C6002A3200218015808FF834819C9 | ||
757 | :102F4000582D502C5271BCD72011287022603A6045 | ||
758 | :102F50001000BCC70A67C06865A04DA00061602A68 | ||
759 | :102F600041200100146B9CA31F009DA3C000FCD155 | ||
760 | :102F7000100184D610019CA3BFFFA4D610019DA30D | ||
761 | :102F8000200084A60E0004190228A5C70A67002C99 | ||
762 | :102F9000C668A07786A701007811D070B4D0601100 | ||
763 | :102FA000007082A0020040123078BCD028119B78BB | ||
764 | :102FB0008000AA7B040849283987A2775027AC777C | ||
765 | :102FC000B0A70500A87006A60811A476AE763A2C24 | ||
766 | :102FD00038873A2D38873A2838873A2338873A2570 | ||
767 | :102FE0003078BCD050019120008091203D30D070CD | ||
768 | :102FF00084A03D30912000809020D5AA00002001BF | ||
769 | :1030000021840022041951270500DCD10409F1377D | ||
770 | :10301000292020009CD6201128858CD608112885CF | ||
771 | :103020004088146F0C6108818CA1FF00C87060A1FA | ||
772 | :10303000642CFF8C8801146006A7D01DB860018045 | ||
773 | :10304000BA60881D602A086085A000010A6000221D | ||
774 | :103050002184041951270500602A0E61BE69002CE5 | ||
775 | :10306000C66840880860D5C00A60A07786A70100BE | ||
776 | :103070000419D927D070B4D00419D927007082A0C0 | ||
777 | :103080000200041AD9273078BCD00419D9279B78BC | ||
778 | :103090008000AA7BAA7DAA790120020006001860A0 | ||
779 | :1030A00000801A600800060060290461602A0C088C | ||
780 | :1030B000093D901584A11800800184A11000180119 | ||
781 | :1030C0000C089A39481584A108003801A06984A128 | ||
782 | :1030D000000618110C08B838F800A06984A1001E79 | ||
783 | :1030E000280584A100087801C6006029006085A039 | ||
784 | :1030F0000020026004618DA110000661CE000C0862 | ||
785 | :103100009A395011A06984A1000218010C08FD38F9 | ||
786 | :10311000180084A10004F019A06984A100103001F6 | ||
787 | :1031200014698CA100FF0F810C08C5232E008CA60A | ||
788 | :10313000E00084A66000280186A0600010118DA127 | ||
789 | :1031400000408DA10401B6699B7860000028AA7830 | ||
790 | :103150001868FDC01A68BCD66801FCC08370000006 | ||
791 | :103160008AA00D0028038AA00C00827101200C00A7 | ||
792 | :103170000C808671AA781835403328340080AC80E2 | ||
793 | :1031800080AF2B00A0209B78000080AD0B00982022 | ||
794 | :10319000A653A8239828A02586A220000815D07041 | ||
795 | :1031A000B5C0D270002CB670002DBA701468FCC087 | ||
796 | :1031B0000780827886A2020004092129A07000807D | ||
797 | :1031C000A270B07498A40500A87006A30811A47397 | ||
798 | :1031D000B27386A210000409C625DE00CE000500E9 | ||
799 | :1031E000007005A0E01986A20200041938290C0815 | ||
800 | :1031F0005B3CA8191468FCC007808278912000808D | ||
801 | :103200001B786800B4685A789468D678DE78986835 | ||
802 | :10321000D278DA789120018008788DC00A7826016A | ||
803 | :10322000D600C600D07084A0002E9020CE00DE0014 | ||
804 | :103230002E0100295670BC683E7003700200002DFC | ||
805 | :103240004A7080AD090042703078BCD040019120B6 | ||
806 | :103250003D30D07084A03D30912000809020A0703F | ||
807 | :1032600005A0081105002184E80D4C72BC7000A275 | ||
808 | :1032700015A00408512786A2100060150C085B3CBD | ||
809 | :103280000419CC281468FCC0078082781B78680079 | ||
810 | :10329000B4685A789468D678DE789868D278DA7804 | ||
811 | :1032A00008788DC00A78A0700080A270B07490A4D5 | ||
812 | :1032B0000500A87006A20811A472B2720029567007 | ||
813 | :1032C000BC683E7003700200002D4A7080AD09009A | ||
814 | :1032D00042700500B46B9DA300205A7B1468FCC0AB | ||
815 | :1032E00007808278946BD67BDE7B986ED27EDA7E06 | ||
816 | :1032F0001B78680000295670027208788DC00A7821 | ||
817 | :10330000002305A67001D07084A0002E86A00026A0 | ||
818 | :1033100018110920000010000920010084A20F00EC | ||
819 | :10332000330080AD09004270002D4A7005009C29D1 | ||
820 | :1033300008420842F64108429C299C299C290C0815 | ||
821 | :103340007525087884A0FDFF0A78F60079200047EB | ||
822 | :10335000AC78FE0084D0C001607186A10100040930 | ||
823 | :10336000612A86A10700700186A1050058117870B6 | ||
824 | :1033700068201B68040017680000206884A0FF0014 | ||
825 | :103380009DC0226863700000A3700000A470AE703E | ||
826 | :10339000B2700C08AE26560111200400607186A19F | ||
827 | :1033A0000100580186A1070018111F7005001000C8 | ||
828 | :1033B0001F700100D070C5C0D27001200A470420E0 | ||
829 | :1033C00084A0FF0086A0180030011870167005A0B8 | ||
830 | :1033D0001011A370010066000C084E3FA9201000D8 | ||
831 | :1033E000392000000C088B3AB8A70001041FEF2910 | ||
832 | :1033F0006E00007002002C2A0A2A0A2A022A2C2AAD | ||
833 | :103400002C2A2C2A002A0C0875255C7005A038058A | ||
834 | :1034100006AD181100685E708000206884D04811E5 | ||
835 | :10342000146F0C08953B0860D4C00A600C08C737BD | ||
836 | :103430002000587060200068026084A6005F1E684B | ||
837 | :103440001868FCD008011A6A176800002B68000091 | ||
838 | :10345000206884A0FF009DC022680C08BF1D1120B9 | ||
839 | :103460000400C874A0A40001B104A0AE1700990420 | ||
840 | :10347000A9200101C87479042084041F382AC0706F | ||
841 | :10348000602021200200A92000011061FF81980125 | ||
842 | :10349000186016000600112002470C2202A112201B | ||
843 | :1034A0000E001E0002A138031260281111200447EB | ||
844 | :1034B0000422A5C012201B600000E0AC1000041F15 | ||
845 | :1034C000422A2184001D5E01637000000370000029 | ||
846 | :1034D0004B70000005004600042405A0A8016820E8 | ||
847 | :1034E000006806001A6A176800002B680000B468BC | ||
848 | :1034F00084A0005F1E68206884A0FF009DC0226831 | ||
849 | :103500000C08BF1D0E00480C4E00232000000500D3 | ||
850 | :1035100082A2030010030C087525002302008F2AE5 | ||
851 | :103520000C2B1A2B82A2020010010C08752560706A | ||
852 | :10353000637000007F7000002200D077C5C7D2778B | ||
853 | :103540000200A62AA62AA82AE02AFB37A62AE02AF1 | ||
854 | :10355000A62A0C08752570770C088B3A7077BCA7E3 | ||
855 | :10356000008F0C08953B186005A02805FCD71811A2 | ||
856 | :103570002120C08D10002120D08E092005001120AF | ||
857 | :1035800010000C08342BB8015601A9200101FCD70A | ||
858 | :1035900018112120C08C10002120D08D4600092058 | ||
859 | :1035A0000500112010000C08342B4E001801208457 | ||
860 | :1035B000041FCB2A5E01388784A71F0090190408D6 | ||
861 | :1035C000C9250408C92570770C08953B186005A02B | ||
862 | :1035D0002005FCD718112120C08D10002120D08E8D | ||
863 | :1035E00009200500112020000C08342BB0015601E1 | ||
864 | :1035F000A9200101FCD718112120C08C1000212026 | ||
865 | :10360000D08D4600092005001120200081044E00C5 | ||
866 | :1036100018012084041FFE2A5E010408C925002227 | ||
867 | :103620000200112B132B132B0C087525637000005F | ||
868 | :10363000D070C5C0D2700408C92500220200212B19 | ||
869 | :10364000132B1F2B0C0875250C084E3F007086A00D | ||
870 | :103650000200041980370C08E137086084A0EFFBF2 | ||
871 | :103660000A600C087237040980370408C92504244D | ||
872 | :1036700005A090056820042D0600146806A718010F | ||
873 | :10368000202D0E00A80C0E0022201A6917680000D9 | ||
874 | :103690002B680000B46884A0005F1E68206884A0C6 | ||
875 | :1036A000FF0005A222680C08BF1D212002471C2430 | ||
876 | :1036B0001983222310600180126028112120044701 | ||
877 | :1036C0000424A5C02220086084A0EFF90A600C0839 | ||
878 | :1036D000CA260C08E137050085A00100E00C002394 | ||
879 | :1036E0000200732B712BEE2B0C087525E47805A0D6 | ||
880 | :1036F000B01708328CA1000818010401C62510007B | ||
881 | :103700000403C625082084A03000101104084D329F | ||
882 | :10371000EC7884A00300D00D8478FCD0181184A12B | ||
883 | :103720000700900084A1070086A004001811012062 | ||
884 | :103730000000500084A1070086A00500180184A1A4 | ||
885 | :1037400007001000012001000200D12BDA2BC72B4B | ||
886 | :10375000AA2B4F3C4F3CAA2BE42B0C08752500707C | ||
887 | :1037600086A004009011607086A002003011112024 | ||
888 | :103770000200192000000408852A607086A0060057 | ||
889 | :10378000B00D607086A00400900DE4790120030064 | ||
890 | :1037900004083B2F1868FCD010011B681D000C08A2 | ||
891 | :1037A000613A1B786E0005001868FCD010011B6898 | ||
892 | :1037B0001D000C08613A04082D3C1868FCD010016B | ||
893 | :1037C0001B681D000C08613A1B78FA000500186898 | ||
894 | :1037D000FCD010011B681D000C08613A1B78CB005F | ||
895 | :1037E000050084A50F00C01100700200C925FB2B45 | ||
896 | :1037F000FD2B803780378037FB2BFB2B0C08752582 | ||
897 | :103800000C08E137086084A0EFFB0A600C087237EF | ||
898 | :10381000040980370408C925E47805A0041BAC2BF3 | ||
899 | :1038200008328CA1000818010401AC2B100004031D | ||
900 | :10383000AC2B082084A0300018111B78680005000C | ||
901 | :10384000EC7884A00300C80D8478FCD0181184A102 | ||
902 | :103850000700900084A1070086A004001811012031 | ||
903 | :103860000000500084A1070086A00500180184A173 | ||
904 | :1038700007001000012001000200492C4D2C442CAF | ||
905 | :10388000422C4F3C4F3C422C493C0C0875250C08FF | ||
906 | :10389000673A1B786E0005000C08673A04082D3C57 | ||
907 | :1038A0000C08673A1B78FA0005000C08673A1B7889 | ||
908 | :1038B000CB000500002302005E2C5C2C602C0C0861 | ||
909 | :1038C0007525040805341B681600A3780000E47908 | ||
910 | :1038D00084A1300004090534EC7884A003000409B5 | ||
911 | :1038E000053484A10001980D8478FCD0181184A1BE | ||
912 | :1038F0000700900084A1070086A004001811012091 | ||
913 | :103900000000500084A1070086A00500180184A1D2 | ||
914 | :1039100007001000012001000200922C4D2CC72B43 | ||
915 | :103920000B3C4F3C4F3C0B3C493C0C08173C050002 | ||
916 | :1039300082A2050010030C0875259878402000230A | ||
917 | :103940000200A12CCB2ED52E00220200BD2CAA2CC9 | ||
918 | :10395000BD2CA82CAD2E0C0875259B781800A878D6 | ||
919 | :10396000102084A0FF0082A02000040A303A8AA020 | ||
920 | :103970000400041A303A0200303A303A303AE4395E | ||
921 | :103980009B781800A87984A1800048010408303A87 | ||
922 | :10399000007005A0D81D112004000408B73584A1CB | ||
923 | :1039A000FF008AA01000041A303A0200E52CE32C34 | ||
924 | :1039B000F72CFB2CA92D303A303AAB2D303A303A67 | ||
925 | :1039C000A92EA92E303A303A303AAB2E0C08752584 | ||
926 | :1039D000E4D6400101200003008000803A781B7883 | ||
927 | :1039E000C70005001868FCD018011B681D00900C6A | ||
928 | :1039F00004080B3C1B681D0004085B3A206922691F | ||
929 | :103A000084A6001804194C2D206884D00419542D64 | ||
930 | :103A1000186886A0080010111B680000D4D668053D | ||
931 | :103A2000BCD6580583700000186884A03F008AA0A7 | ||
932 | :103A30000D0018078AA00C00827101200C000C8078 | ||
933 | :103A400086719B786100AA785601360146011600FE | ||
934 | :103A500008328CA100061801A1202B021000A12021 | ||
935 | :103A60002B011E009B7800000080AC8080AD0B0015 | ||
936 | :103A70009820A6534E013E015E01386005A050110A | ||
937 | :103A80001C6884A00E0004095B3A0C086D3A2B7880 | ||
938 | :103A90000830100001803A601B7871000500E4D600 | ||
939 | :103AA00030011B78830005001B788300050084A685 | ||
940 | :103AB0006000D00DDCD6C00DFCD6A001FCC65A7E3D | ||
941 | :103AC000B66EDC7AD879D078078084A07F0008A110 | ||
942 | :103AD00091A20000986B002102A3B268946B0022AF | ||
943 | :103AE00003A3AE68F4D61801F4C65A7EB66E007011 | ||
944 | :103AF00086A00300481106000C084E3F0C0808423F | ||
945 | :103B00000E001B788000050006A00C08E842B06A91 | ||
946 | :103B1000AC69986C946B002205A12001002222A4BC | ||
947 | :103B200000211BA3AA6CD27CDA7CA66BD67BDE7B41 | ||
948 | :103B3000002305A43011F5C65A7EB66E1B788000AE | ||
949 | :103B400005001B788000002215A118110C080842FE | ||
950 | :103B500005000C08354205000C08752504083F2EA9 | ||
951 | :103B6000C6005470602020698CA1FFEC22690060BF | ||
952 | :103B700084A0DFCF02600C08173906A0402038204F | ||
953 | :103B80000C08BF390408332EC60054706020482C3E | ||
954 | :103B9000A87A94A2FF0086A20400D8112069E4D17B | ||
955 | :103BA000701139200000412000003120000006A0E3 | ||
956 | :103BB00010200C081A390C08BF390408332E8CA1C8 | ||
957 | :103BC000FFEC226904618CA1DDFF06610060ACC0DE | ||
958 | :103BD000026086A20300D001046184A110004805A0 | ||
959 | :103BE0000C08913B0C089A39FF881805CE009B7889 | ||
960 | :103BF00060000028AA78587E95C65A7ED4D618113F | ||
961 | :103C00001B786E0005001B78820005002069CCD16E | ||
962 | :103C100030018CA1FFFD22690060ECC002603920F8 | ||
963 | :103C20000000412000003120000006A010200C08F8 | ||
964 | :103C3000BF3986A201005801046184A10800B001C7 | ||
965 | :103C40000C08913B0C08B838FF888019780020696F | ||
966 | :103C5000C4D130018CA1FFFE22690060E4C0026083 | ||
967 | :103C60003120000006A010200C081A39CE00587E22 | ||
968 | :103C7000D4D618111B78710005001B78830005004D | ||
969 | :103C80000408573A08289B78800019208000A878FB | ||
970 | :103C900094A0FF0086A20100B811002302A186A013 | ||
971 | :103CA00001000409AD2DA87CA4A4FF0080A402009B | ||
972 | :103CB00000A3182002A1040AC12D0409C12DA824C3 | ||
973 | :103CC000A87A041F5D2E180C84A2F00082A02000A8 | ||
974 | :103CD000B806002282A021009816A87A18831883BB | ||
975 | :103CE000002102A3A00A86A2230050091C6884A018 | ||
976 | :103CF000F1FF1E68587E84A6F1FFA5C030205A7ED1 | ||
977 | :103D00000860A5C00A60A07805A00409342EA82088 | ||
978 | :103D100098799B786000AA78112080009A79A87819 | ||
979 | :103D200098799A7AAA78987A041F8B2E95C65A7E2B | ||
980 | :103D3000D4D618111B786E0005001B788200050090 | ||
981 | :103D40001883002102A3040A442E84A280000419CF | ||
982 | :103D50005B3AA07805A0C80804085B3A0408303A2A | ||
983 | :103D600054704DA09B781800A87884A0FF008EA006 | ||
984 | :103D7000010010010C087525A87A94A2FF004B7869 | ||
985 | :103D80000800A87884A0FF008AA00500041A303A31 | ||
986 | :103D90000200303A2F38303A4A39593D82A20000A9 | ||
987 | :103DA00010110C0875250C08613A1B78820005007B | ||
988 | :103DB00082A2030010110C087525FCD4D01160708C | ||
989 | :103DC00005A010010C087525146F7277BCA7008F31 | ||
990 | :103DD0000C08953B086085A021000A60388784A7FD | ||
991 | :103DE0001F00B01D0C08643A637002001F700900C8 | ||
992 | :103DF00010000C08703A1B788200050082A20400B3 | ||
993 | :103E000010030C08752500230200052F9B30D730C6 | ||
994 | :103E100086A2030098050072D87CDC7DD07FD0712B | ||
995 | :103E2000B4D12805BCD11815012001470420C4D005 | ||
996 | :103E3000F011687884A0FF00D01182A20200B812AD | ||
997 | :103E4000D6003B7800831B785900B8706DA0B46829 | ||
998 | :103E50005A789468D678DE789868D278DA78B4C1DF | ||
999 | :103E6000D27103703000DE000120000058003B7862 | ||
1000 | :103E700000131B7857000120000020000072D87C3E | ||
1001 | :103E8000DC7DD07F4670A068ECD0180108608DC042 | ||
1002 | :103E90000A6084A20F0002007C30562F532FA731F6 | ||
1003 | :103EA0003232C925512F512F0C0875250860D4C016 | ||
1004 | :103EB0000A60E4D62001447086A01400E8110C08C2 | ||
1005 | :103EC0004E3F092000001868FCD00801447086A00D | ||
1006 | :103ED00014006801186886A0080004193E3058785C | ||
1007 | :103EE0009CD004093E302068ACD004093E301B68E9 | ||
1008 | :103EF000140009200200A80468788CA0FF0088053F | ||
1009 | :103F000086A1080058110860A4C00A600C08723726 | ||
1010 | :103F100040050C08E1370C084E3F600086A12800E0 | ||
1011 | :103F20000015186005A0780D0180680D0180580DFE | ||
1012 | :103F30001E60480C206884D00409C92584C022680A | ||
1013 | :103F40000C08BF265870C600602000680260CE00D2 | ||
1014 | :103F50000460026805A0002D0811026006600408D4 | ||
1015 | :103F6000C9251600FF81F015007086A03000D0052D | ||
1016 | :103F7000D071BCD1B815B4D1E8115C7005A0901512 | ||
1017 | :103F8000A07086A001007005037000004600560076 | ||
1018 | :103F900076006600C600D6000C08F125DE00CE00D3 | ||
1019 | :103FA0006E007E005E004E00D071B4D1D811037057 | ||
1020 | :103FB0004000C0000C085B3CA8111B786800D600CC | ||
1021 | :103FC000B8706DA0B4685A789468D678DE7898682E | ||
1022 | :103FD000D278DA78B4C1D2710370300008788DC01D | ||
1023 | :103FE0000A78DE000C08FF301E00FF8104093E3015 | ||
1024 | :103FF00084A600DF1E682B680000146F86A10200F3 | ||
1025 | :1040000004193F30186886A0140030110820E4D647 | ||
1026 | :10401000180168788CA0FF000C087A3A0C08CA26B0 | ||
1027 | :104020002068DCD07815178794A20F0013821382C2 | ||
1028 | :10403000138284B20006180190A2C04B100090A217 | ||
1029 | :10404000404C90A200001C22C4D370012068E4D030 | ||
1030 | :10405000280184A0FFEF2268ACC31223108204223F | ||
1031 | :1040600085A0380012201182D4D33801A068C4D0B2 | ||
1032 | :1040700020110C0867310408C92508608DC00A604A | ||
1033 | :1040800008002A6916691868FCD0100144701A6883 | ||
1034 | :104090008CA600DF1E691064FF84680109200247B6 | ||
1035 | :1040A000042101800A202184126428112120044760 | ||
1036 | :1040B0000424A5C02220186005A0180101801A6000 | ||
1037 | :1040C00018110860A4C00A60206884D0301100680C | ||
1038 | :1040D00005A008110260066020005870602000688A | ||
1039 | :1040E00002606120004787680301082D6B200000F3 | ||
1040 | :1040F000686005A06A611001022D08006E610072FF | ||
1041 | :1041000086A23000580186A240000419C925037018 | ||
1042 | :10411000020048706820C468602005000370020037 | ||
1043 | :10412000B8706DA0BC683E70B47065A0C068567071 | ||
1044 | :10413000002D4A7080AD09004270050082A2040083 | ||
1045 | :1041400010020C08752500220200A630B530C130DF | ||
1046 | :10415000B53086A50013600186A50083901D03700D | ||
1047 | :104160000000186001801A60086084A0EFFB0A60FC | ||
1048 | :10417000007086A0050028010C08613A1B788200B7 | ||
1049 | :1041800005001B788300050090780780018084A0DB | ||
1050 | :10419000070080A018009A78A8798CA1FF0086A15A | ||
1051 | :1041A0000300280186A1000010010408303A1B78A2 | ||
1052 | :1041B00083000500206895C02268FF8218110C0852 | ||
1053 | :1041C000613A3000118210010C0875250C08703A14 | ||
1054 | :1041D0001B78820005000C086E3C307884A0C0007B | ||
1055 | :1041E0007011160008328CA100081E00180104018D | ||
1056 | :1041F000FC3010000403FC301A7906A0050085A0ED | ||
1057 | :104200000100050084A6600030112F6800003368AB | ||
1058 | :10421000000004086631DCD69811B468DCD0801147 | ||
1059 | :104220009869946A2E69326A447005A030110022A0 | ||
1060 | :1042300005A104094E3F4770150004084E3F0500D4 | ||
1061 | :10424000ACD6F001F4D630012F68000033680000CE | ||
1062 | :1042500004084E3FB46884A0004035A6F4D6A01DE3 | ||
1063 | :10426000447005A0101147701500DCD62811B46801 | ||
1064 | :10427000DCD01001A86CA46D2E6C326D04084E3F8A | ||
1065 | :10428000F4D630012F6800003368000004084E3F68 | ||
1066 | :10429000B46884A0004835A6F4D6A01D447005A0DB | ||
1067 | :1042A000101147701500082410250027078084A0EE | ||
1068 | :1042B0007F0008A191A200002E69326A002105A2A8 | ||
1069 | :1042C000101104084E3F007086A00600100104087B | ||
1070 | :1042D0004E3F050046690860CDC0CCD308018DC0B3 | ||
1071 | :1042E0000A6018683A681B6806008F6800009368C7 | ||
1072 | :1042F0000000306A2C693E6A42692F680300336807 | ||
1073 | :10430000000037682000976800009B68200000705C | ||
1074 | :104310000200C925963190318E318E318E318E3129 | ||
1075 | :104320008E310C087525206884D018110C08C73709 | ||
1076 | :1043300030005870502C602000680260602AA0AEE7 | ||
1077 | :104340001700042405A010012020D80C222D6B207A | ||
1078 | :10435000000005000C08CD370C08E1370860CCC020 | ||
1079 | :104360000A602B6800009B780E00146F38691A6988 | ||
1080 | :10437000446916690920000086AE404710010920F3 | ||
1081 | :1043800001000C081F43DCD6C8011C69EDC11E6981 | ||
1082 | :10439000286882A00E009002486884A00F0086A0C2 | ||
1083 | :1043A0000B0060115C6886A04700401101200147A6 | ||
1084 | :1043B0000420ACD0181100270C089E241868FCD0EB | ||
1085 | :1043C00040011B68000068788CA0FF0010011B688A | ||
1086 | :1043D0001E00A0AE1700006822203C6A4069326AC5 | ||
1087 | :1043E0002E69C06860200060A4D0800541202100B3 | ||
1088 | :1043F0004920050051202000D600F6005601460154 | ||
1089 | :10440000792000470C08B21B4E015E01FE00C87007 | ||
1090 | :10441000102009200101260004226DA0400114682B | ||
1091 | :1044200006A710010068C80C2068D5C022682E00BD | ||
1092 | :1044300010820981801DDE00637003007B70000024 | ||
1093 | :1044400072777F700F00D071C4C1D271186886A0D6 | ||
1094 | :1044500002003811176800002B6800001C68ECC0CF | ||
1095 | :104460001E680C08BF1D0408C925D87CDC7DD07FE0 | ||
1096 | :104470000C08FF302B6800009B780E00146F0C08AE | ||
1097 | :10448000723C8CA0FF0016691868FCD010014470C3 | ||
1098 | :104490001A688CA600DF1E69637000000408C92535 | ||
1099 | :1044A000007005A010110408C92506A00C084E3F95 | ||
1100 | :1044B0002069ACD110111B6814008CA600DF1E69A6 | ||
1101 | :1044C0002B680000206884A0FF00226800700200B2 | ||
1102 | :1044D000C9256F326F327232723272326D326D3282 | ||
1103 | :1044E0000C087525186804083B2F0860A4C00A60F2 | ||
1104 | :1044F0001768000004089537002302007E328032DE | ||
1105 | :10450000CE320C087525FCD604195B2D00700DA069 | ||
1106 | :104510000200C92590329032BA329032CB328E32BC | ||
1107 | :104520008E320C08752584A66000380586A06000D0 | ||
1108 | :104530001015ACC6F4C6EDC65A7EB66E1C68ACC08B | ||
1109 | :104540001E6886A1020048010C084E3FAC69B068A5 | ||
1110 | :1045500015A118010C08354210000C0808421B7800 | ||
1111 | :104560008300D071B4D10419C625A07086A00100C3 | ||
1112 | :1045700004190D260500ECD6F0091868FCD070016E | ||
1113 | :10458000F4D630111B6815001B7883000408C6257B | ||
1114 | :104590001B6807002F680000336800000C08173CF8 | ||
1115 | :1045A00005000C08752500230200D732F93251337B | ||
1116 | :1045B0000C08752500700200E132E332EA32E13284 | ||
1117 | :1045C000E132E132E132E1320C087525AC69B068C4 | ||
1118 | :1045D00015A118010C08354210000C0808421C688F | ||
1119 | :1045E000B4C01E68D070B4D00419C625A07086A0CF | ||
1120 | :1045F000010004190D260500FCD604194133007092 | ||
1121 | :104600000DA00200C9250F33093339330F333E3370 | ||
1122 | :10461000073307330C0875259468D678DE789868D8 | ||
1123 | :10462000D278DA7884A66000380586A0600010157C | ||
1124 | :10463000B4A6BFBFEDC65A7EB66E86A10200480181 | ||
1125 | :104640000C084E3FAC69B06815A118010C08354242 | ||
1126 | :1046500010000C0808421B7883001C68B4C01E6858 | ||
1127 | :10466000D071B4D10419C625A07086A00100041928 | ||
1128 | :104670000D260500ECD6F0091868FCD010011B6867 | ||
1129 | :1046800007001B78FB000500FCC65A7EDC7AD8794F | ||
1130 | :10469000986B002102A3B268946B002203A3AE685A | ||
1131 | :1046A000D2791B7883000500DCD630012B780930E5 | ||
1132 | :1046B0001B7883000408C6258478ACC08678E4782B | ||
1133 | :1046C00084A00800501184A400020801F5C6DDC6CC | ||
1134 | :1046D0005A7E1B7883000408C625206895C022688E | ||
1135 | :1046E0000C08023CDDC60C08613A1B788200040805 | ||
1136 | :1046F000C625002302007B337D337F330C087525EC | ||
1137 | :1047000004085B3A987DD4D6A815E479ACD1300181 | ||
1138 | :10471000EC7884A0030010012B7809309B786000AE | ||
1139 | :10472000AB78000084A6FBFF5A789A7DE479ACD17F | ||
1140 | :104730002001EC7884A0030020110120140004085B | ||
1141 | :104740003B2F8478FCD0181184A10700900084A12D | ||
1142 | :10475000070086A00400181101200000500084A169 | ||
1143 | :10476000070086A00500180184A1070010000120A1 | ||
1144 | :104770000100C204907A94A207009B786000A87997 | ||
1145 | :10478000FF8168059B788000A87B84A30100D0117D | ||
1146 | :10479000A87BA87B86A3040018110920DFFF58001E | ||
1147 | :1047A00086A3010018110920F7FF280086A3030043 | ||
1148 | :1047B00048110920EFFFC60054706020046004A176 | ||
1149 | :1047C0000660CE009B786000AB78000084A6FBFFFB | ||
1150 | :1047D0005A782B78093020698CA1FFEC22699A7DE8 | ||
1151 | :1047E00004080B3CD12BDA2BF933FF33F733F733C3 | ||
1152 | :1047F0000B3C0B3C0C08752520698CA1FFFC226941 | ||
1153 | :104800000408113C20698CA1FFFC226904080B3CC0 | ||
1154 | :10481000E47984A130002001EC7884A003007015B5 | ||
1155 | :10482000007086A004009011607086A00200301114 | ||
1156 | :1048300011200200192000000408852A607086A05B | ||
1157 | :104840000600B00D607086A00400900D007086A078 | ||
1158 | :1048500000000409C625206984A120042801D4C1D0 | ||
1159 | :104860002269186804083B2F18688EA002002001F6 | ||
1160 | :10487000FDC01A680120140004083B2F8478FCD086 | ||
1161 | :10488000181184A10700900084A1070086A00400ED | ||
1162 | :10489000181101200000500084A1070086A0050027 | ||
1163 | :1048A000180184A1070010000120010002000B3C48 | ||
1164 | :1048B0000B3C5C340B3C4F3C4F3C0B3C0B3CBCD6A4 | ||
1165 | :1048C00070058071FF81580582A10D001813837057 | ||
1166 | :1048D0000000280082A10C00827009200C009B7847 | ||
1167 | :1048E0006100AA795601360146018470148110A234 | ||
1168 | :1048F000867280A00B0000AD982084B200061801DB | ||
1169 | :10490000A1202B021000A1202B019B780000088120 | ||
1170 | :10491000AC81A6534E013E015E010408113CD4D681 | ||
1171 | :104920000419CF34206884D00409113C8CA660009F | ||
1172 | :1049300084A66000200186A060000811F5C194C122 | ||
1173 | :104940005A79B6699B786000AB7800009B7861006B | ||
1174 | :104950001868FDC01A68AA7808800C810409F63727 | ||
1175 | :104960008CA1F8000419F6375601360146011600ED | ||
1176 | :10497000A1202B0108328CA100061001A1202B02DE | ||
1177 | :104980001E009B7800000080AC8080AD0B0098205A | ||
1178 | :10499000A6534E013E015E011468FCC00780827878 | ||
1179 | :1049A0000408113C1868FCD010011B6808000C08B2 | ||
1180 | :1049B000613A1B78ED00050000230200E0349D35CC | ||
1181 | :1049C000DE340C087525D87CDC7DD07FFF8228156D | ||
1182 | :1049D000007286A203000409092FD071BCD1F8111E | ||
1183 | :1049E000B4D1E801012001470420C4D0C011D60091 | ||
1184 | :1049F0003B7800881B785900B8706DA0B468A5C0DA | ||
1185 | :104A00005A789468D678DE789868D278DA78B4C123 | ||
1186 | :104A1000D27103703000DE003000007220003B785D | ||
1187 | :104A200000181B78570084A20F0002008835453516 | ||
1188 | :104A30001D35382F1B3588351B351B350C08752562 | ||
1189 | :104A40001C68ECD0180108608DC00A60206985C11F | ||
1190 | :104A500022690068066005A0081102600860D4C0E1 | ||
1191 | :104A60000A601C6884A00E002011C87188A1000192 | ||
1192 | :104A700028003070BA683C71C87008A1042102682F | ||
1193 | :104A80000A2D5A71DCD62011FCC6B66E0408883592 | ||
1194 | :104A9000B66E84A66000201184A6FF7FB668D80495 | ||
1195 | :104AA000DCD6501184A6FF7FB6689468A668986823 | ||
1196 | :104AB000AA680C084E3F7804ACD6400106A00C084A | ||
1197 | :104AC0004E3F08241025AA69A66A6800082410250C | ||
1198 | :104AD0000027078084A07F0008A191A20000AA6996 | ||
1199 | :104AE000A66A0C084E3FFCD6B00184A6FF7FB668CC | ||
1200 | :104AF00010250824ACD638110027078084A07F0039 | ||
1201 | :104B000008A191A20000986B002102A3B268946BE7 | ||
1202 | :104B1000002203A3AE68007086A030000419C925E6 | ||
1203 | :104B200003700200B8706DA0BC683E70B47065A0E0 | ||
1204 | :104B3000C0685670002D4A7080AD090042700500B3 | ||
1205 | :104B400086A50088481103700000186001801A6073 | ||
1206 | :104B5000086084A0EFFB0A6004085B3A4370000021 | ||
1207 | :104B600082A2060010030C08752500230200B73549 | ||
1208 | :104B7000C835D23500220200BF355B3AC135BF359A | ||
1209 | :104B8000033651360C087525807A94A2000F0C0864 | ||
1210 | :104B9000A5360408303AC10002005B3AD035D03562 | ||
1211 | :104BA0000336D0355B3A0C08752571000200DC3500 | ||
1212 | :104BB000DA35DA35DC35DA35DC350C0875250C08E4 | ||
1213 | :104BC000703A1B7882000500007086A00200501128 | ||
1214 | :104BD0000C08E13710000C084E3F086084A0EFFB82 | ||
1215 | :104BE0000A602000007086A00300A80D0370050075 | ||
1216 | :104BF0000120E08E8EAE404710010120128F682008 | ||
1217 | :104C00004A7080AD0900427000220500007086A045 | ||
1218 | :104C100002005811D070B5C0D270002CB670002DB3 | ||
1219 | :104C2000BA7038000C084E3F2000007086A00300C8 | ||
1220 | :104C3000C80D03700100807A94A2000F9B781800C1 | ||
1221 | :104C4000A87C84A41F0015A26920C08D84B2000630 | ||
1222 | :104C50001811FDC26920D08E042D082D5A716DA047 | ||
1223 | :104C60002801146806A220010068B80C0C08A536BB | ||
1224 | :104C7000B46E5A7E206984A1000C0409CB366070A2 | ||
1225 | :104C800086A006002811707006A2101162707A705A | ||
1226 | :104C90001B680500ADC11B680500ADC1D4C1226908 | ||
1227 | :104CA0000C08673A0408CB36007286A2020058113D | ||
1228 | :104CB000D070B5C0D270002CB670002DBA70300024 | ||
1229 | :104CC0000C084E3F180086A20300D00D03700100AF | ||
1230 | :104CD000807A94A2000F9B781800A87C84A41F00FF | ||
1231 | :104CE00015A286AE40470801FDC2A879A8798CA11B | ||
1232 | :104CF000FF001821C87068A1042D082D5A716DA0FD | ||
1233 | :104D00002801146806A218010068B80C0904B46EE2 | ||
1234 | :104D1000206984A1000C0409CB36DCD078016070D6 | ||
1235 | :104D200086A004004011707006A22811747006A3BA | ||
1236 | :104D3000101162707A700C086D3A80041B680500CF | ||
1237 | :104D4000ADC1D4C122690C08673A7B700000300401 | ||
1238 | :104D50000370050084B2000618010120E08E1000E7 | ||
1239 | :104D60000120128F68204A705601A92032000320CA | ||
1240 | :104D700000000080041FB4365E0184B200061001FA | ||
1241 | :104D8000FCC20800FDC2166A80AD09004270B76817 | ||
1242 | :104D9000000723680008276803000500ECC6ACA6DE | ||
1243 | :104DA000600004091237986B946CAC69B06805A177 | ||
1244 | :104DB000E011D27BDA7BD67CDE7C86A56000C8055C | ||
1245 | :104DC000F4D60811EDC6B4A6FFB75A7E09208300B9 | ||
1246 | :104DD0009CD62801092082001920000020231A797E | ||
1247 | :104DE000ECD688050C0808427004B0681AA30021AC | ||
1248 | :104DF00023A4002405A3F801D27BDA7BD67CDE7CD9 | ||
1249 | :104E0000B068F4D60811EDC6F4C65A7E11208300AE | ||
1250 | :104E10009CD62801112082001920000020231A7A34 | ||
1251 | :104E2000ECD688010C0835427000192000002023C0 | ||
1252 | :104E30001000B4A6FFB75A7E092083009CD610014B | ||
1253 | :104E4000092082001A79C0685670002D4A70C46823 | ||
1254 | :104E50006020D071012001470420C4D0C815D4704F | ||
1255 | :104E60002DA0B801BCD14805807A94A2000FD8705B | ||
1256 | :104E700006A21801E07804A55815D670BCC1D271FD | ||
1257 | :104E80003804312001002C85180233861082D80C9A | ||
1258 | :104E90000500E07D94A500FF3001112008002F855A | ||
1259 | :104EA000810C37860800690C1782807884A0000F77 | ||
1260 | :104EB00006A27001DA72D6765800807A94A2000FAA | ||
1261 | :104EC000D87036A2C00DE07834A5A80DBDC1D2714E | ||
1262 | :104ED000B4D10419C625002305A40409C625A07071 | ||
1263 | :104EE00086A0010004190D260500206005A05001D0 | ||
1264 | :104EF00001802260086085A008000A600F70000130 | ||
1265 | :104F00002C702660050006A00C084E3F007086A09D | ||
1266 | :104F100002002001607086A0050050112B6800007F | ||
1267 | :104F2000176800001B680100236840001F6800012B | ||
1268 | :104F3000007084A00F000200C925A637A337C3372D | ||
1269 | :104F4000AF37C925A137A1370C08752549041104CD | ||
1270 | :104F50002800310458706020006802600C08BF1DF2 | ||
1271 | :104F60000408C9256070637000007F7000000200B3 | ||
1272 | :104F7000BF37BF37BD37BD37BD37BF37BD37BF3789 | ||
1273 | :104F800004089A2A637000000408C9251B68000001 | ||
1274 | :104F90000408A731006805A008110260066005003A | ||
1275 | :104FA0001064FF84680109200247042101800A205F | ||
1276 | :104FB000218412642811212004470424A5C0222042 | ||
1277 | :104FC0000860A4C00A600500186005A010010180F7 | ||
1278 | :104FD0001A6005000C086E3C1B68180090040C0851 | ||
1279 | :104FE0006E3C1B68190068040C086E3C1B681A00B4 | ||
1280 | :104FF00040040C086E3C1B680300180470770C0812 | ||
1281 | :10500000953B74718CA1FF00103294A20006180128 | ||
1282 | :10501000E8A1C08C1000E8A1D08D042D082D6820D7 | ||
1283 | :1050200005A018117A700408C9251468707206A2C8 | ||
1284 | :1050300010010068980C00680A201B6805007B704E | ||
1285 | :1050400000000C08CD37206884D010110C08C73739 | ||
1286 | :105050000C08E1371F680000236820000C08BF1D02 | ||
1287 | :105060000408C92582A203000419353AA87DACA51D | ||
1288 | :10507000FF00A87EB4A6FF002069BDC12269C4D18B | ||
1289 | :10508000B005C4C12269B4A6FF00300582A618008D | ||
1290 | :10509000180210013120180086A610000811308671 | ||
1291 | :1050A0002B852B85412000000C08EE3A18010C08D6 | ||
1292 | :1050B0001A39A0000C08BA3A0C0817392069C5C182 | ||
1293 | :1050C0002269587E95C65A7ED4D618111B786E0078 | ||
1294 | :1050D00005001B78820005000C081739587ED4D6CD | ||
1295 | :1050E00018111B78710005001B7883000500C600AD | ||
1296 | :1050F000547060200061E4D198050862178294A280 | ||
1297 | :10510000FF0082A2180018021001112018000026CA | ||
1298 | :1051100002A20812302286A610000811308608620A | ||
1299 | :1051200094A2FF00EC78E4D0300182A20A00401281 | ||
1300 | :1051300011200A00280082A20C00101211200C007D | ||
1301 | :10514000002202A5081228220C08BE3A2B852B85C6 | ||
1302 | :10515000412000000C08EE3A18010C081A39200012 | ||
1303 | :105160000C08BA3A0C081739587895C05A78CE000E | ||
1304 | :105170001B7882000500C60060290060E4D0881119 | ||
1305 | :10518000B4D05011106084A00F00301104618CA1C4 | ||
1306 | :10519000F5FF0661CE000500112032001920000045 | ||
1307 | :1051A000F000A068CCD0C01D086294A2FF00EC788B | ||
1308 | :1051B000E4D0300182A20B00181211200A0028004E | ||
1309 | :1051C00082A20C00101211200C0008631F839CA304 | ||
1310 | :1051D000FF0082A318001802100119201800AB78F4 | ||
1311 | :1051E0000100AB780300AB780100AA7AAA7BC0A8C3 | ||
1312 | :1051F00005002068C5C022680C087A3ACE00050078 | ||
1313 | :10520000C600602904618CA1F5FF066111203200FF | ||
1314 | :10521000192000000000AB780100AB780300AB78E8 | ||
1315 | :105220000100AA7AAA7BC0A805002068C5C0226830 | ||
1316 | :10523000CE00050006A030201020C6005471602169 | ||
1317 | :105240001820082084A0E0FF35A6867E18609A7892 | ||
1318 | :10525000AE7E1266A47884A070778CA10F0005A1A1 | ||
1319 | :10526000292005472C25CCD54001A4D3100185A0C9 | ||
1320 | :105270000008FCD3100185A08080A67816608A788B | ||
1321 | :10528000B4A61F0037860482048005A60E60046061 | ||
1322 | :1052900084A0D5FF0660CE00050082A2020004199A | ||
1323 | :1052A0003F3AA87A2069BDC12269CCD16805CCC13A | ||
1324 | :1052B000226994A2FF0082A20200041A303A0C086C | ||
1325 | :1052C000C1390C08173980A901000C200C08913B4A | ||
1326 | :1052D0000C08B838FF8878019B7860000028AA780D | ||
1327 | :1052E000587E95C65A7ED4D618111B786E000500DC | ||
1328 | :1052F0001B7882000500587ED4D618111B787100E7 | ||
1329 | :1053000005001B788300050082A20200181284A207 | ||
1330 | :1053100001004001547188A100000C21ECD1101152 | ||
1331 | :10532000112000000C08AC3A79040C0817395878A1 | ||
1332 | :1053300095C05A781B7882000500C60026006029B7 | ||
1333 | :10534000006011200100ECD05811BCD0381114605D | ||
1334 | :10535000B4D02011A4C1066106A08800112000006D | ||
1335 | :10536000AB780100AB780200AB780300AA7AC0A842 | ||
1336 | :1053700004000C087A3A206885A0000222682E00FA | ||
1337 | :10538000CE000500078815A7C6000920000054704C | ||
1338 | :105390006020FF82100109204000186080A00200F8 | ||
1339 | :1053A0009A78A47884A09FFF05A1ECC0B4D008111E | ||
1340 | :1053B000EDC00061F4D1100185A02000A678166030 | ||
1341 | :1053C0008A78046084A0EFFF0660CE000500060026 | ||
1342 | :1053D000007086A0030010010E0010000E0098045B | ||
1343 | :1053E000ACD68805887884A040006805B87B078320 | ||
1344 | :1053F00084A07F001815078284A0FF000409573A93 | ||
1345 | :105400009AA00400041A573AF4D6D011D879DC7A5D | ||
1346 | :1054100008A191A20000D279DA79D67ADE7A0C0856 | ||
1347 | :10542000E8421B78800084B20006180101200000C9 | ||
1348 | :105430001000012001000C089A4105000C08752598 | ||
1349 | :105440001B78800005001B788300050039200000D0 | ||
1350 | :10545000412000003120000006A010200C081A395D | ||
1351 | :105460000C08BF39587E0C08733A1B78820005007F | ||
1352 | :10547000D10C2068C4C02268C600547060200C089B | ||
1353 | :105480004439B000810C2068CCC02268C60054703A | ||
1354 | :1054900060200C08DE396000310C206884A0FFEC2D | ||
1355 | :1054A0002268C60054706020046084A0C5FF0660B6 | ||
1356 | :1054B000CE00050049001B78820005002768020025 | ||
1357 | :1054C00049001B78820005000120050088000120AA | ||
1358 | :1054D0000C0070002068D5C0226801200600400042 | ||
1359 | :1054E00001200D0028000120090010000120070004 | ||
1360 | :1054F0009B787E00AA789DC65A7ED070B4D0680191 | ||
1361 | :10550000B4C0D270C600B47065A0086084A0EFFB80 | ||
1362 | :105510000A60186001801A60CE00050076003F879F | ||
1363 | :10552000BCA70F003B873B870387E0A0C04B8EAE34 | ||
1364 | :1055300040471001E0A0404CB8A720009A7FA47912 | ||
1365 | :1055400084A1E07FAE781260A47984A13F77A67829 | ||
1366 | :105550001660046085A0380006607E0005009B7818 | ||
1367 | :105560008000AB780100AB780200AB780300AA7A28 | ||
1368 | :105570009B786000AB7804000008312000002920EF | ||
1369 | :1055800032009B788000AB780100AB780300AB78E9 | ||
1370 | :105590000100AA7DAA7E9B786000AB780500040814 | ||
1371 | :1055A0007A3A5601078084A0FF000380038080A020 | ||
1372 | :1055B00020009A78A4798CA1E0FF21207A3B192061 | ||
1373 | :1055C0001100A9200E0011203200042484A0E0FF65 | ||
1374 | :1055D00006A128012084002310A2041FE23A5E01E4 | ||
1375 | :1055E000050056010408303B2120883BA920090012 | ||
1376 | :1055F0001120290082A5280050052084A99511209A | ||
1377 | :10560000330082A5330018062084A99519200A00CA | ||
1378 | :1056100011206500002202A5D0022084002310A2E0 | ||
1379 | :10562000041F073B5E01880021207A3B19201100EE | ||
1380 | :10563000A9200E0011203300002202A54002208480 | ||
1381 | :10564000002310A2041F193B5E0106A00500118271 | ||
1382 | :105650005E0182A564002012087885A070000A7897 | ||
1383 | :10566000042405A0050086A80200E8012120663B6D | ||
1384 | :10567000A9200D001120280082A52800480D2084B3 | ||
1385 | :105680001920190011203300002202A5000E2084E9 | ||
1386 | :10569000002310A2041F413B5E011120840182A55A | ||
1387 | :1056A0008501B00A90082120753BA9200300112034 | ||
1388 | :1056B000240086A52400600920841120280086A5E6 | ||
1389 | :1056C0002800300920841920190011203300040813 | ||
1390 | :1056D000193B21100222033404460558066A077C50 | ||
1391 | :1056E000104612461258125A146A146C146E177E21 | ||
1392 | :1056F000219002B004E210E210E2091202300232FC | ||
1393 | :105700000342034404540456056605680678067A85 | ||
1394 | :10571000070C070C070EE1100A330558055A066AF4 | ||
1395 | :10572000066C077C077E000E9B78800046A0050073 | ||
1396 | :1057300084A7000F0B8084A71F00038003800380D1 | ||
1397 | :10574000038005A1FCD71801E0A0C06C1000E0A008 | ||
1398 | :10575000C04C0500E600F60084D038017920000135 | ||
1399 | :105760000920804771208047300009204047792078 | ||
1400 | :1057700000027120404791200080042184A00F0086 | ||
1401 | :105780000200C83BC83BC83BC83BC83BC83BC63B04 | ||
1402 | :10579000C63B0C087525B469F5C18CA19FFFB6699D | ||
1403 | :1057A00005A08005587884A09FFF85A000605A78E6 | ||
1404 | :1057B000287886A0141830154B780400487884A007 | ||
1405 | :1057C0000400E01D4B780800487884A00800E01D24 | ||
1406 | :1057D0003078BCD0B81184B2000818010401FF3B36 | ||
1407 | :1057E00010000403FF3BE47984A130005801EC78F9 | ||
1408 | :1057F00084A0030038011C68ACD01011D90010003F | ||
1409 | :105800001B78FB00FE00EE0005000120014704208C | ||
1410 | :10581000ACD0181114680C089E2405001B78830076 | ||
1411 | :1058200005001B78820005001B78710005001B78BD | ||
1412 | :105830006E000500092019470C2186A100005001C7 | ||
1413 | :1058400086A1010050011F700B00637001001B78DE | ||
1414 | :10585000540005001B78F30005001F700A000500C6 | ||
1415 | :10586000092019470C2186A10000680186A10100CA | ||
1416 | :1058700038011F700B00637001001B785400050095 | ||
1417 | :105880001F700A0005001B78F20005001B78FB0062 | ||
1418 | :1058900005001B78FA0005001B78CC0005001B787A | ||
1419 | :1058A000CB0005001868FCD010011B681D001F709C | ||
1420 | :1058B0000B00637001001B7854000500307884A051 | ||
1421 | :1058C000C000701108788CC00A7800E000E000E0A9 | ||
1422 | :1058D00000E0EC7884A02100180108788DC00A78D7 | ||
1423 | :1058E000050008788DC00A780500307884A0400053 | ||
1424 | :1058F000E01D84B2000818010411803C100004135C | ||
1425 | :10590000803CAC780500087884A0FDFF0A7800E0B0 | ||
1426 | :1059100000E000E000E0EC7884A02100400184B2C7 | ||
1427 | :105920000008180104118F3C10000413923CAC785D | ||
1428 | :105930000600087885A002000A780E00050084A7FA | ||
1429 | :10594000010004194D3284A770004001C600602D8B | ||
1430 | :10595000682F0C089024782D682CCE0084A70800AE | ||
1431 | :1059600048014B780800EC7884A0030004094D320C | ||
1432 | :1059700004080B3C84A70400C801B87884A0008008 | ||
1433 | :10598000A8014B780800EC7884A0030004094D328C | ||
1434 | :10599000E47884A0070086A001004011C07885A6A5 | ||
1435 | :1059A000004830205A7E1B78FB00050084A7800049 | ||
1436 | :1059B00040018478FCD028010C08573A1B6822006B | ||
1437 | :1059C00005001B680300587884A0005F1E682F68DC | ||
1438 | :1059D0000000336800004B780800EC7884A00300D6 | ||
1439 | :1059E0000409AC2B84B2000810010401C62504038D | ||
1440 | :1059F000C625146B078384A00F00038003800380F7 | ||
1441 | :105A0000FCD3180180A0404C100080A0C04B602047 | ||
1442 | :105A100048205670602A0500C60060290060ACD09E | ||
1443 | :105A20000409573DA068ACD1201184A0000E0409E0 | ||
1444 | :105A3000553D086117818CA1FF001C632F83DCD0CA | ||
1445 | :105A400010019DA30100CCD0C81184A5FF0038012E | ||
1446 | :105A5000EC78E4D010011382B8002920000082A164 | ||
1447 | :105A60000C009012EC78E4D0181109200C006000B2 | ||
1448 | :105A700082A10B00481209200A00300009203200E0 | ||
1449 | :105A80001120000029200000AB780100AB7806004F | ||
1450 | :105A9000AB780400AA79AB780000AA7AAA7BAA7D29 | ||
1451 | :105AA000C0A80800206885A0001022680C087A3A77 | ||
1452 | :105AB00085A00100CE00050082A206000419493A23 | ||
1453 | :105AC000A87DAC7E3786ACA5FF00B4A6FF00AC7FF6 | ||
1454 | :105AD0004787BCA7FF00C4A8FF002069BDC1226999 | ||
1455 | :105AE000E4D10409CB3D8CA1FFEC226982A702001E | ||
1456 | :105AF000041A233AB4A6FF000409C83D82A6310067 | ||
1457 | :105B0000041A233A82A50900040A233A82A8030052 | ||
1458 | :105B1000041A233A86A80200D00186A800000419BE | ||
1459 | :105B2000233A01200C00EC79E4D1100101200A0095 | ||
1460 | :105B300002A590120C08233AC6006029046085A0D3 | ||
1461 | :105B40001A0006600060ACC00260CE00050086A7A7 | ||
1462 | :105B500000000409233A348682A618002802200196 | ||
1463 | :105B6000312018000408193E86A61000081130865E | ||
1464 | :105B70002B852B850C08EE3A0409233A0C081A39B8 | ||
1465 | :105B80000C08BF39587ED4D618111B787100050057 | ||
1466 | :105B90001B78830005000C081739900C86A80200BA | ||
1467 | :105BA00008113486547188A100000C21ACD104097D | ||
1468 | :105BB000233AECD120113920000041200000E4D12B | ||
1469 | :105BC0002011312000004120000082A70200C812ED | ||
1470 | :105BD0001C6284A2FF0006A710013920000005A660 | ||
1471 | :105BE000900108611F819CA3FF00680102A30812B5 | ||
1472 | :105BF0003023078805A786A00102600186A800005F | ||
1473 | :105C0000680139200000412000003120000006A07A | ||
1474 | :105C10001020700084A200FF0811402084A1FF0022 | ||
1475 | :105C200002A5080128212B852B850C08EE3A580D7A | ||
1476 | :105C30000C081A390C08BF399B788000AB7801003A | ||
1477 | :105C4000AB780600AB780400AA7DAB780000AA7E92 | ||
1478 | :105C5000AA7F0028AA789B786000AB7808002068AB | ||
1479 | :105C6000E5C022680C087A3A587895C05A781B78B3 | ||
1480 | :105C7000820005002000200000002000000020001D | ||
1481 | :105C80000000200000002000000020000000200094 | ||
1482 | :105C90000000200000002000000020000000200084 | ||
1483 | :105CA0000000200000002000000020000000200074 | ||
1484 | :105CB0000000200000002000620009001400140011 | ||
1485 | :105CC00055984D9814001199FF98140014009000F5 | ||
1486 | :105CD000E70000010204082080F8180017000F8474 | ||
1487 | :105CE000C1D8140016000AA214000B300CA2140034 | ||
1488 | :105CF00000251300002510001000100010001000F7 | ||
1489 | :105D00001000100010001000100010001000100013 | ||
1490 | :105D1000100000A206383988C420640850A8083052 | ||
1491 | :105D2000C128189D01A20C30472861816A84008037 | ||
1492 | :105D3000A48456183A8808A8E228CE9CF3A86408E0 | ||
1493 | :105D40003EA80C3001A80830E128CE9CA22863713F | ||
1494 | :105D500031A8212018A805A20C87DED8A064E06D28 | ||
1495 | :105D6000C06FA467806C120205A23D882B881418AE | ||
1496 | :105D70003B882770F28537A732A503F076857786B2 | ||
1497 | :105D800013A83E8811A88228627114A80A2804A2C8 | ||
1498 | :105D9000C064E06DA067C06F14183B8823707685DF | ||
1499 | :105DA000778602A861783E886A20C128189D422023 | ||
1500 | :105DB0000121CAA802290EA20BA807A2140003A25F | ||
1501 | :105DC0000080A48572189A873C88E21F01F608A219 | ||
1502 | :105DD0006E852171140004070830CE9C140002A2C5 | ||
1503 | :105DE0000080A4850930A884E21944F86E853F88B4 | ||
1504 | :105DF000E608F5A861F8EBA801F8140081F8160090 | ||
1505 | :105E0000B285F0803295A2FAE21D1400328521F2AB | ||
1506 | :105E10001400E21DA884E0D6E61F140008300080BC | ||
1507 | :105E200049281110FCA80830008000A08120022819 | ||
1508 | :105E30001110FCA889A80830A1203C281110FCA84A | ||
1509 | :105E400009A217000C300080A485E21DC1DA1400FD | ||
1510 | :105E5000100201A81400E0263A87A3FAF219E026FE | ||
1511 | :105E6000F21814000BA214000DA206381002229D95 | ||
1512 | :105E7000040706A265687E812A84C11D2388160056 | ||
1513 | :105E800042600880FAA860812A84808121F008306D | ||
1514 | :105E9000A884D7114270DD201100D5202288160079 | ||
1515 | :105EA00000002601D07084A0004C04809020047271 | ||
1516 | :105EB00008709CC005A2A0110C72FF822801FF8A05 | ||
1517 | :105EC0007811007284D260110478CCD010010C08D3 | ||
1518 | :105ED0005B4307700800037008002E0100200500D6 | ||
1519 | :105EE000007084A0030002709CC684D088050871ED | ||
1520 | :105EF00000E0087006A1D81D84A103000409CA3F70 | ||
1521 | :105F000084A1E0010419CA3FF4D1881D84A10030A6 | ||
1522 | :105F100086A00010600D112080010C7111823001EB | ||
1523 | :105F20000870F4D0201D0C7006A1C00D077012007F | ||
1524 | :105F3000087100E0087006A1D81D84A1030068055F | ||
1525 | :105F400094D1B00DF4D148050770020080082804F0 | ||
1526 | :105F50000871FCD130010C08D640FF8A0409543F77 | ||
1527 | :105F6000B80C0C708CA0FF07E801047084D0780195 | ||
1528 | :105F7000147005A048111070107306A3E01D0023D3 | ||
1529 | :105F800005A0280102A1201E077010003000FF8A22 | ||
1530 | :105F900048010C089A42E81DD8090C085C402E0103 | ||
1531 | :105FA00000200500047208719CC10381181207705B | ||
1532 | :105FB0000200C00C05A2881D0770080003700800CD | ||
1533 | :105FC0000600012001470420CCD010010C085B43DF | ||
1534 | :105FD0000E002E01002005002864FF840805702CA7 | ||
1535 | :105FE0000470BCA00F00B8A71D403C27FB874811D8 | ||
1536 | :105FF00010020C0875259C6075A09001880C392052 | ||
1537 | :106000001240042768AE086830A60C6829A52184D0 | ||
1538 | :1060100038013887042705A0A81D9C7075A0001DB5 | ||
1539 | :1060200005000000050009000D0011001500190011 | ||
1540 | :106030001D000000030009000F0015001B000000F8 | ||
1541 | :10604000000012400F4000000000008000001240DD | ||
1542 | :1060500000001A40174000000000000000001A4035 | ||
1543 | :1060600000001540154000000000008000001540B1 | ||
1544 | :1060700000001B401B4000000000000000001B400F | ||
1545 | :10608000792000477120100007700A000770020095 | ||
1546 | :1060900003700100092002007120500007700A00FF | ||
1547 | :1060A00007700200037000000120FF010420FCD0F3 | ||
1548 | :1060B00028110981180171202000800C050004704E | ||
1549 | :1060C0000480041AB2400871087006A1E01D84A182 | ||
1550 | :1060D000E00120010C080E410408D24007701200B4 | ||
1551 | :1060E000192000000871087006A1E01D84A1E001DC | ||
1552 | :1060F00020010C080E410408D2409CA10C3086A35C | ||
1553 | :106100000420900186A30800C001047084D04811C7 | ||
1554 | :106110000871087006A1E01D84A1030010010408A5 | ||
1555 | :106120000E4186A30C20F0190072048230020C7319 | ||
1556 | :1061300084A3FF0710010C0875250871087006A1DB | ||
1557 | :10614000E01D84A1E00118010C080E4170040770E5 | ||
1558 | :106150001200007084D048111073147005A3280138 | ||
1559 | :106160000C7184A1FF0704195C400871087006A136 | ||
1560 | :10617000E01D84A1E00118010C080E41B000077079 | ||
1561 | :1061800012000770080004709CD0E81D08710870A8 | ||
1562 | :1061900006A1E01D84A1E00118010C080E412800B1 | ||
1563 | :1061A0000770120008710381880E03700800050053 | ||
1564 | :1061B000087184A1E001A815087184A1E001881587 | ||
1565 | :1061C00084A107000200EA40F840E840F840E840B7 | ||
1566 | :1061D0004841E84046410C087525047084A0100031 | ||
1567 | :1061E0008DC00670FF8A18114920000005000C08B8 | ||
1568 | :1061F0009A42E81D0500047084A010008DC006704E | ||
1569 | :10620000047084D040110871087006A1E01D84A1BB | ||
1570 | :10621000030008013000FF8A18010C089A42E81DAB | ||
1571 | :106220000500077012000871041D114191200060E3 | ||
1572 | :10623000041D1541912000600770120007700800CE | ||
1573 | :1062400004709CD0E81D077012000871FCD1D81DA5 | ||
1574 | :1062500003700000007005A03011047005A0181133 | ||
1575 | :106260000C7005A00801400C4920000084B2000217 | ||
1576 | :106270001801012000001000012001000C08A73BBC | ||
1577 | :106280001B6802005120000005000C0875250C0851 | ||
1578 | :1062900075250C088741107214710C709CA0FF07C3 | ||
1579 | :1062A000002800A311A289A10000A1040427582CF2 | ||
1580 | :1062B00060AC0863002222A30C6300211BA300240E | ||
1581 | :1062C00005A340013812128410820A8389A10000BC | ||
1582 | :1062D000602B580C602B078A060004609CD01801C4 | ||
1583 | :1062E000BAA717401000BAA70F400E003DA7002C18 | ||
1584 | :1062F00086688A6F926C8E6B0871087006A1E01D2B | ||
1585 | :1063000084A1E00110010C080E41077012000C0876 | ||
1586 | :106310005C400500508A3987042704A0681100609A | ||
1587 | :1063200064A00811602D046084A00F0080A02D409F | ||
1588 | :106330003C20FB870C09752505002601D600D0708E | ||
1589 | :1063400084A0004C04809020DE008468602088686F | ||
1590 | :106350008C6B906C5780D4AAFF0084A0FF000600CD | ||
1591 | :10636000046884A008000E001801B8A017401000AF | ||
1592 | :10637000B8A00F4084B200021001207E0800247EE5 | ||
1593 | :10638000B5A60C001C68B4D0080185C6002405A37E | ||
1594 | :106390005005582C0427046160AC006000A448201C | ||
1595 | :1063A000CCA9040018010C08A34300041A7004606F | ||
1596 | :1063B00001A31E709CD14001106081A000002270DA | ||
1597 | :1063C000146081A0000026700862002402A21270EE | ||
1598 | :1063D0000C62002303A21670027607700100602B86 | ||
1599 | :1063E0000C08C54210000C089A42E81D2E0100203E | ||
1600 | :1063F00005002601D600D07084A0004C04809020B7 | ||
1601 | :10640000DE0007700400047094D0E81D03700800DB | ||
1602 | :106410002E01002005002601D600D07084A0004C7B | ||
1603 | :1064200004809020DE00207E84B200020811247EC9 | ||
1604 | :10643000B5A60C001C68ACD0181185C6037000000E | ||
1605 | :1064400028685020602D0460BCA00F00B8A71D4034 | ||
1606 | :106450003C27FB87381110020C0875259C6865A045 | ||
1607 | :106460002001880C0C089A42E81D2E01002005002E | ||
1608 | :10647000260106001600D600D07084A0004C0480CF | ||
1609 | :106480009020207E84B200020811247EDE003E00AF | ||
1610 | :106490004E00B5A60C001C68B4D0280185C6037058 | ||
1611 | :1064A00000000770040049203542286855A0D60036 | ||
1612 | :1064B00004099642702D602E0470BCA00F00B8A78E | ||
1613 | :1064C0001D403C27FB87401110020C0875259C706D | ||
1614 | :1064D00075A060207005800C042768AE086822A4AF | ||
1615 | :1064E0000C681BA36802518A10110C0875253887A7 | ||
1616 | :1064F000042705A0901D9C7075A06020D001E008C5 | ||
1617 | :10650000228420841A8399A300000869002422A110 | ||
1618 | :106510000C6900231BA110120C08752584B200021F | ||
1619 | :10652000180171205000100071202000DE000408C6 | ||
1620 | :10653000C341DE002E01002005000870060084A083 | ||
1621 | :10654000E0010E00100106A0050084A0030086A053 | ||
1622 | :10655000030008110500042778AC0078082F94D0B8 | ||
1623 | :106560000419A6431A7004781E70087812700C780B | ||
1624 | :10657000167004609CD02001107822701478267068 | ||
1625 | :106580000276047084A0100085C006707920004750 | ||
1626 | :10659000518AE8013887042705A068119C6005A08E | ||
1627 | :1065A000B8016020046084A00F0080A01D403C2042 | ||
1628 | :1065B000FB870C0975250870060084A0E0010E0019 | ||
1629 | :1065C000100106A0280084A0030086A00300050097 | ||
1630 | :1065D00051200000050026010600D600D07084A0DE | ||
1631 | :1065E000004C04809020DE008E00087184A103001E | ||
1632 | :1065F0002811286805A0780104086D3F0871FCD1B6 | ||
1633 | :1066000018010C08D640880C077010000871FCD1E6 | ||
1634 | :10661000E80D0C08D640087086A00800301D0070F8 | ||
1635 | :1066200005A0181D0370000049200000060001208D | ||
1636 | :1066300001470420CCD010010C085B430E002E0152 | ||
1637 | :10664000002005002601460136015601C600D6008D | ||
1638 | :10665000D07084A0004C04809020DE0049201F43AD | ||
1639 | :1066600080AD1100A02084B20002180199203200F0 | ||
1640 | :106670001000992031000C7084A0FF072A68077071 | ||
1641 | :106680000800077002000370010018010080AC8050 | ||
1642 | :10669000A5530C7084A0FF0730010770040004703C | ||
1643 | :1066A00084A00400E01DCE0049200000037000001B | ||
1644 | :1066B0005E013E014E012E01002005001468FCD051 | ||
1645 | :1066C00004099E43007084D0E005247EB5A6040032 | ||
1646 | :1066D00007700400047084A00400E01D1871160007 | ||
1647 | :1066E0001C71160020711600247116001B7000002A | ||
1648 | :1066F0001F70FF3F2370000027700000137004001C | ||
1649 | :10670000177000000276077001000120FFFF0920CA | ||
1650 | :1067100031000A200A200871087006A1E01DFCD192 | ||
1651 | :10672000D00D2E0026722E0022722E001E722E0018 | ||
1652 | :106730001A7207700200087086A008001001040891 | ||
1653 | :106740000E41077004000370000005004920C3419A | ||
1654 | :106750006800087084A00300100106A0050006A0D0 | ||
1655 | :1067600020201820582C602149200000588B0061FF | ||
1656 | :10677000002108A41A71046001A31E700600042BF6 | ||
1657 | :1067800084A008005001106081A000002270060063 | ||
1658 | :10679000146081A000002670060084A1070011206B | ||
1659 | :1067A00008002AA20862002412A226000C624022DD | ||
1660 | :1067B000002343A82E00FF887011002502A20801C3 | ||
1661 | :1067C0005012202241200000042B9CD010010E000A | ||
1662 | :1067D0000E000E005004127517700000027686A994 | ||
1663 | :1067E000C3411811077001002800047084A0100034 | ||
1664 | :1067F00085C00670002500A11A70042B84A0080033 | ||
1665 | :1068000010010E004E001E0089A100001E710C2B0D | ||
1666 | :106810008CA108003001A1A40000227481A0000016 | ||
1667 | :106820002670002522A2C3A8000012742028167426 | ||
1668 | :10683000027686A9C3411811077001002800047070 | ||
1669 | :1068400084A0100085C00670598B602B792000470A | ||
1670 | :106850000C08C54206A00500912000809120006030 | ||
1671 | :10686000AC7805A068117479D07006A148111C7825 | ||
1672 | :1068700005A030011F780000040E3D4491208040A7 | ||
1673 | :1068800069208047FDC7006884A00F009811D06878 | ||
1674 | :10689000B4D08001BCD07011F60079200001FCD783 | ||
1675 | :1068A000101179200002307884A0C00010110C086B | ||
1676 | :1068B000D522FE00FCD7200169204047FCC7180CF8 | ||
1677 | :1068C0003078018032780419C744347832786120F6 | ||
1678 | :1068D000C06C69208047FDC7CC6805A028010180F5 | ||
1679 | :1068E000CE6810110C083946006884A00F006801BA | ||
1680 | :1068F00086A00100500140680DA03801042105A0C8 | ||
1681 | :10690000200101800A200409D645146805A0A801C9 | ||
1682 | :10691000018016689011A3680100F600FCD71811D9 | ||
1683 | :10692000792000021000792000010C086E3CFE0066 | ||
1684 | :10693000606805A010010C08D5227C6805A0400104 | ||
1685 | :1069400001807E68281163680000D068C5C0D268E5 | ||
1686 | :10695000D068FCD0B001FCC0D268A920000234602D | ||
1687 | :1069600005A0580101803660D068FDC0D2682811AA | ||
1688 | :10697000106005A010010C08D522E0AC1000041F27 | ||
1689 | :10698000AC44FCD738016120C04C69204047FCC7AB | ||
1690 | :10699000040869445904387801803A78A0113C7899 | ||
1691 | :1069A0003A786120C04C69204047FCC70C6805A0BC | ||
1692 | :1069B00010010C084345FCD730116120C06C6920E0 | ||
1693 | :1069C0008047FDC7980C1078CCD06801ACD020115E | ||
1694 | :1069D000A4D04801ADC0127891200180040EEF448C | ||
1695 | :1069E0000C08A1200500912001800500407801805D | ||
1696 | :1069F0004278041942454478427869204047FCC7F0 | ||
1697 | :106A000079200002D46805A03801E07D04A520119A | ||
1698 | :106A1000D668D068BCC0D26879200047106805A04D | ||
1699 | :106A200010110120010101801268FCD7180180A01B | ||
1700 | :106A3000D08D100080A0C08C4020042065A0E00113 | ||
1701 | :106A4000246005A0B001018026609811006805A0AF | ||
1702 | :106A50003001486806AC18110C08D645680060681B | ||
1703 | :106A600005A018012760010020000C0884450428B7 | ||
1704 | :106A7000280C0060402C100CFCD73811692080478E | ||
1705 | :106A8000FDC7792000010408FF440500092000002B | ||
1706 | :106A9000A920000208609CD05805246005A01801B8 | ||
1707 | :106AA00001802660180408609CC084D01011ACD00E | ||
1708 | :106AB000C0010A60046005A0D801D600C600160017 | ||
1709 | :106AC00068201060018012600C08C737002D682C08 | ||
1710 | :106AD00060200C08021C0C08B21D1E00CE00DE0057 | ||
1711 | :106AE0003800BDC00A608DA1010010008DA1000119 | ||
1712 | :106AF000E0AC1000041F474584A1010030018CA1C7 | ||
1713 | :106B0000FEFF0E690C08D52208000E690500002C56 | ||
1714 | :106B10007A681467726F176000002B6000001B60BA | ||
1715 | :106B20000600B46084A0005F1E60206084A0FF00A7 | ||
1716 | :106B300085A0600022600060422069208047FCD769 | ||
1717 | :106B4000101169204047586806AC101100285A6897 | ||
1718 | :106B50000C089A1B186805A0100101801A680868C3 | ||
1719 | :106B6000A4C00A681068087909810A7901801013A5 | ||
1720 | :106B70000C087525126818111079A5C112792F60BB | ||
1721 | :106B8000000033600000682C0C08BF1DFCD71811F2 | ||
1722 | :106B900069204047100069208047106984A10001E6 | ||
1723 | :106BA0000120060018117669012004000C08CB2290 | ||
1724 | :106BB0000500D60048696021FCD718116920000241 | ||
1725 | :106BC0001000692000010C0890241B600600586822 | ||
1726 | :106BD00084A0005F1E60206084A0FF0085A04800A4 | ||
1727 | :106BE00022602F60000033600000086884A0FDFF71 | ||
1728 | :106BF0000A683068B4D0B0014B680400A9201400C2 | ||
1729 | :106C0000486894D01001041FFD454B680900A92075 | ||
1730 | :106C10001400486884D01001041F0646A920FA0019 | ||
1731 | :106C2000041F0D461B685400DE0063680700050062 | ||
1732 | :106C300079200047E1008900A900092002006920AD | ||
1733 | :106C400080470F6800001368000017680000098182 | ||
1734 | :106C5000180169204047A80C05001920A3003A7BC1 | ||
1735 | :106C60003E7B050019203300427B467B050019203E | ||
1736 | :106C7000DD32327B367B05004C6A85A20000F001D4 | ||
1737 | :106C80005069BC6B00A3C60064210463FF83381104 | ||
1738 | :106C90001182480108811AA1B80EBC69A80CCF68FE | ||
1739 | :106CA0000A00CE0005004C69BC6A64220860B5C0C9 | ||
1740 | :106CB0000A6010820981C81D4E69CE0005001600C9 | ||
1741 | :106CC000041D5D4691200060041D61469120006016 | ||
1742 | :106CD000EC70DCD01811D4D09001A0008EAE000171 | ||
1743 | :106CE00038011478F5C0C5C01678D4D0801560047A | ||
1744 | :106CF0001478FDC0C5C01678D4D048152804E4D057 | ||
1745 | :106D00000409C446041D7F469120006009200C0040 | ||
1746 | :106D1000041D8546912000600981D01DE47084A087 | ||
1747 | :106D2000FF0186A0FF011011EC70C0088EAE0001BB | ||
1748 | :106D300028011478F4C0FCD0301120001478FCC075 | ||
1749 | :106D4000F4D00811C4C0167804788CD00005C600B1 | ||
1750 | :106D500061200000186084D0B81186AE0002E60001 | ||
1751 | :106D6000712010002001DB700100E4781800DB7056 | ||
1752 | :106D70000000E078C670C3700E801B600100912097 | ||
1753 | :106D80008040EE00CE001800CE001F680C001E00F0 | ||
1754 | :086D9000A070A2700500260CA2 | ||
1755 | :00000001FF | ||
1756 | /***************************************************************************** | ||
1757 | * QLOGIC LINUX SOFTWARE | ||
1758 | * | ||
1759 | * QLogic ISP12160 device driver for Linux 2.2.x and 2.4.x | ||
1760 | * Copyright (C) 2002 Qlogic Corporation (www.qlogic.com) | ||
1761 | * | ||
1762 | *****************************************************************************/ | ||
1763 | |||
1764 | /************************************************************************ | ||
1765 | * --- ISP12160A Initiator Firmware --- * | ||
1766 | * 32 LUN Support * | ||
1767 | ************************************************************************/ | ||
1768 | |||
1769 | /* | ||
1770 | * Firmware Version 10.04.42 (15:44 Apr 18, 2003) | ||
1771 | */ | ||
diff --git a/firmware/qlogic/1280.bin.ihex b/firmware/qlogic/1280.bin.ihex new file mode 100644 index 000000000000..612c2633f8cd --- /dev/null +++ b/firmware/qlogic/1280.bin.ihex | |||
@@ -0,0 +1,2008 @@ | |||
1 | :10000000080F0B0000107800411000002E3E000089 | ||
2 | :100010004320504F525947495448312039392C31E7 | ||
3 | :1000200039313239312C39392C3339313439512085 | ||
4 | :100030004F4C494720434F435052524F54414F4930 | ||
5 | :10004000004E492050533231303446207269776D6A | ||
6 | :10005000726120655620726569736E6F30202E388C | ||
7 | :1000600035312020432073756F74656D20726F4E9B | ||
8 | :10007000202E303050206F72756474634E202E6FC6 | ||
9 | :100080002020303020200024C920FF980120FC04CB | ||
10 | :10009000042086A08010C000541071200001A070C0 | ||
11 | :1000A000A270C12010008920741378006D10012007 | ||
12 | :1000B000FC04042086A08012C00069107120000298 | ||
13 | :1000C000A070A27071200001A070A270C120100069 | ||
14 | :1000D0008920F81378006D10C120200089201C139E | ||
15 | :1000E00071201000C3700400C7705349CB702050BA | ||
16 | :1000F000CF702020D37008000120FE04D670C120EC | ||
17 | :100100002100192000000920FFFE00210B20A5A5D9 | ||
18 | :10011000ECA1FF7F642D6B200A0ADCADFF3F542B5E | ||
19 | :100120005B205050142186A2A5A54000A41086A3F0 | ||
20 | :100130000F004000A0106A2C5A2AC120200019206C | ||
21 | :100140000F00780080106A2C5A2A7800A2106A2CBE | ||
22 | :100150005A2A30212821A2A1004F248424842484F7 | ||
23 | :1001600024842484248492A1009909200000012081 | ||
24 | :1001700032007810C12018227920004FA02F0824C7 | ||
25 | :1001800011200000A9204000A4420981C000BF1036 | ||
26 | :10019000092000FF003402A14800CF104000CF101A | ||
27 | :1001A000A820A4420120FC04042086A08010C000E6 | ||
28 | :1001B000E510712000017E0D6920404F7810B04D90 | ||
29 | :1001C0007F0D1078EDC012781B78640078000A115A | ||
30 | :1001D0000120FC04042086A08012C00005111478C0 | ||
31 | :1001E000EDC0D5C016781B786400712000027E0D2A | ||
32 | :1001F0006920404F7810B04D6920804F7120000178 | ||
33 | :100200007810B04D1478D4C016787F0D78000A119C | ||
34 | :100210001478E5C016781B783C00CA7EC27CC67B89 | ||
35 | :100220006778000000788DC0027831203000AF7808 | ||
36 | :1002300001012378020027780200092002006920CA | ||
37 | :10024000404F1B680300236807002768FA002B68EB | ||
38 | :1002500008002F682800376800003B6806003368F4 | ||
39 | :1002600008003F680000098140005E11D3680A0061 | ||
40 | :10027000C368C04F7920004F1478E4D0C000441107 | ||
41 | :10028000ECD0C0004811D768297378004A11D768AC | ||
42 | :100290000D7378004A11D7682D73C768C054CB68B6 | ||
43 | :1002A000C053CF68C094AB684497AF684997B368B0 | ||
44 | :1002B0004497B7684497A76801006920804F780089 | ||
45 | :1002C0001E11D3680A00C368C0511478E4D0C0007E | ||
46 | :1002D0006A11D768397478006C11D7681974C768C7 | ||
47 | :1002E000C074CB684054CF68D095AB684997AF686D | ||
48 | :1002F0004E97B3684997B7684997A7680100107887 | ||
49 | :10030000ECD0C000C2111478E4D0C000B4117E0E4D | ||
50 | :100310006920C05371200002EC70E4D0C000951138 | ||
51 | :1003200019200C0C21200C007810502078009B1113 | ||
52 | :1003300019200A0C21200A0078105020692040540E | ||
53 | :1003400071200001EC70E4D0C000AB1119200C0C3E | ||
54 | :1003500021200C00781050207800B11119200A0CCF | ||
55 | :1003600021200A00781050207F0E7800DB11192020 | ||
56 | :100370000C0C21200C006920C053781050206920FB | ||
57 | :100380004054781050207800DB116920C0537E0E55 | ||
58 | :1003900071200001EC70E4D0C000D41119200C0CC5 | ||
59 | :1003A00021200C00781050207F0E7800DB111920DE | ||
60 | :1003B0000A0C21200A00781050207F0E1120020024 | ||
61 | :1003C0006920C05409200200A920000137680000FC | ||
62 | :1003D0000B684000C87B86A3FFFEC000F2111768BF | ||
63 | :1003E00000011F6864007800F611176864001F6838 | ||
64 | :1003F0000200E8AD1000F000E3110981C000E11136 | ||
65 | :100400001182400004126920C0747800DF11781056 | ||
66 | :10041000A2267810124778101B1E7810424D9120AA | ||
67 | :1004200000217920004F1078ECD040001812712084 | ||
68 | :10043000200078001A1271205000912000227920AB | ||
69 | :10044000004F71202000912000237920004F107868 | ||
70 | :10045000ECD040002C127920000178002E12792077 | ||
71 | :1004600000027120404F912000247920000171206A | ||
72 | :10047000804F912000207920004F71201000003221 | ||
73 | :1004800085A03D30902071201000C37000009000C6 | ||
74 | :100490004D12C07086A00200C0004D127810C11528 | ||
75 | :1004A000392000001078ECD0C000CF1278108E14E4 | ||
76 | :1004B000AC7805A0C0006B12680061126C7865A072 | ||
77 | :1004C000400061127810DC237810E8206800781270 | ||
78 | :1004D0006C7865A040006B127810DC2368007812FD | ||
79 | :1004E0000920474F1120874F04210C2205A140000D | ||
80 | :1004F00078127810511F7120404FA47005A0400061 | ||
81 | :100500009D12507485A4000040009D1279200002C5 | ||
82 | :1005100091200080D4728CA23D3090217810B12BB4 | ||
83 | :100520009120008091203D3068009D127920004F7D | ||
84 | :100530006C7865A040009D12712010007810DC23BB | ||
85 | :10054000E000A5127920004F712010007810164BA2 | ||
86 | :100550007120804FA47005A04000BD12507025A0EE | ||
87 | :100560004000BD127920000191200080D4728CA23D | ||
88 | :100570003D3090217810B12B9120008091203D30AA | ||
89 | :100580007920004F712010006800C9126C7865A0B6 | ||
90 | :100590004000C9127810DC23E00053127810164B8B | ||
91 | :1005A0007800531278108E14AC7805A0C000E712C2 | ||
92 | :1005B0006800DD126C7865A04000DD127810DC2345 | ||
93 | :1005C0007810E8206800F1126C7865A04000E7120E | ||
94 | :1005D0007810DC236800F1120920474F042105A0A0 | ||
95 | :1005E0004000F1127810511F7120404FA47005A0F7 | ||
96 | :1005F00040000C13507485A4000040000C137920B7 | ||
97 | :10060000000191200080D4728CA23D30902178109E | ||
98 | :10061000B12B9120008091203D307920004F712036 | ||
99 | :100620001000680016136C7865A04000161378104F | ||
100 | :10063000DC23E000CF127810164B7800CF123C1369 | ||
101 | :100640003C133E133E134B134B134B134B135613D8 | ||
102 | :100650005613631363134B134B134B134B133C137E | ||
103 | :100660003C133E133E134B134B134B134B135613B8 | ||
104 | :100670005613631363134B134B134B134B13780035 | ||
105 | :100680003C137E007E107E12912000247810D12928 | ||
106 | :100690007F127F107F00912001807C007E007E1001 | ||
107 | :1006A0007E127810C8137F127F107F009120018086 | ||
108 | :1006B0007C007E007E107E12912000237810D129CC | ||
109 | :1006C0007F127F107F00912001807C007E007E10D1 | ||
110 | :1006D0007E12912000237810D129912000247810D7 | ||
111 | :1006E000D1297F127F107F00912001807C0094131C | ||
112 | :1006F000941396139613A313A313A313A313AE1368 | ||
113 | :10070000AE1396139613A313A313A313A313AF133C | ||
114 | :10071000AF13AF13AF13AF13AF13AF13AF13AF13C9 | ||
115 | :10072000AF13AF13AF13AF13AF13AF13AF13780003 | ||
116 | :1007300094137E007E107E12912000237810D12920 | ||
117 | :100740007F127F107F00912001807C007E007E1050 | ||
118 | :100750007E127810D5137F127F107F0091200180C8 | ||
119 | :100760007C007C007E107E127E0D7E0E7E0F7E0051 | ||
120 | :10077000712000016920404F7920004FEC7084A067 | ||
121 | :10078000001CE2787810B04D7F007F0F7F0E7F0D48 | ||
122 | :100790007F127F107C00003C84A007007900CD13FD | ||
123 | :1007A000DE13DE13E013E013E513E513EA13EA1397 | ||
124 | :1007B000003C84A003007900DA13DE13DE13F31388 | ||
125 | :1007C000F3137810B229912000227810EC477C00B6 | ||
126 | :1007D000912000217810EC477C00912000217810B6 | ||
127 | :1007E000EC47912000227810EC477C0091200021FA | ||
128 | :1007F0007810EC477C00181418141A141A142714D3 | ||
129 | :10080000271427142714321432143F143F142714CA | ||
130 | :100810002714271427145014501450145014501433 | ||
131 | :1008200050145014501450145014501450145014A8 | ||
132 | :10083000501450145014780018147E007E107E124C | ||
133 | :10084000912000247810D1297F127F107F00912001 | ||
134 | :1008500001807C007E007E107E127810C8137F120B | ||
135 | :100860007F107F00912001807C007E007E107E1230 | ||
136 | :10087000912000237810D1297F127F107F009120D2 | ||
137 | :1008800001807C007E007E107E1291200023781073 | ||
138 | :10089000D129912000247810D1297F127F107F0068 | ||
139 | :1008A000912001807C007E007E107E127E0D7E0EE7 | ||
140 | :1008B0007E0F7920004F712000026920404F003DDB | ||
141 | :1008C0008CD040006614EC7084A0001CE278781094 | ||
142 | :1008D000B04D003D84D0400074146920804F7120D9 | ||
143 | :1008E0000001EC7084A0001CE6787810B04D7F0FFA | ||
144 | :1008F0007F0E7F0D7F127F107F007C0008700B80C1 | ||
145 | :10090000C8008914077002008CA0E001C0008A149E | ||
146 | :100910009CD0400089147A087A09C370024078009C | ||
147 | :10092000C41568001A1561200000186084D0C0004A | ||
148 | :100930001A15287805A0C0009E1410001B15780019 | ||
149 | :100940001A151079F4D14000A4147800B914147960 | ||
150 | :10095000ECD14000BD14FCD04000B3147E007810F0 | ||
151 | :10096000AE1D7F004000BD147800B9147E007810E1 | ||
152 | :10097000A11D7F004000BD14012007407800C31571 | ||
153 | :100980001079FCD0C000C7146120404F9CC1FCC747 | ||
154 | :100990007800CB146120804F9DC1FDC7646005A025 | ||
155 | :1009A000C0001A15127982602878FCC086A0180051 | ||
156 | :1009B000C000DB147E0C7810851B7F0C2B780000A8 | ||
157 | :1009C0007C6065A0400000157E0C9C607810901E35 | ||
158 | :1009D0007F0C9F6000007810D51C092018008760EC | ||
159 | :1009E000030110787E00FF84C000F614FF854000EC | ||
160 | :1009F000F814C5C012787810BB1D7F001278C000B3 | ||
161 | :100A0000141578100D1E10789CD0C00008156120B8 | ||
162 | :100A1000404F78000C156120804F9CC012787F6099 | ||
163 | :100A20000000D460DCD040001815DCC0D660012086 | ||
164 | :100A300005407800C3157800C1157C001078F4D00B | ||
165 | :100A400040002315012007407800C31506A0C2709E | ||
166 | :100A5000C670CA70CE70DA70C0703DA08AA0400027 | ||
167 | :100A6000C80031157900381500218AA04000C8005F | ||
168 | :100A7000CF1579007815C1151716E0154F16871692 | ||
169 | :100A80008716D715ED1C9216CF15E415E615E81557 | ||
170 | :100A9000EA15F21CCF15A016FD16A51BE71CEC15D8 | ||
171 | :100AA000EA192C1A671AB81AA519B219C619D91950 | ||
172 | :100AB000EB17CF15341741174D1759176F177B17C1 | ||
173 | :100AC0007E178A1796179E17D317DF17CF15CF15E6 | ||
174 | :100AD000CF15CF15F8170A1826185C188418941823 | ||
175 | :100AE0009718C818F9180B1974198419CF15CF1550 | ||
176 | :100AF000CF15CF159419CF15CF15CF15CF15CF150D | ||
177 | :100B0000171D1D1DCF15CF15CF15211D661DCF1526 | ||
178 | :100B1000CF15CF15CF15111681169A16F7169F1BF4 | ||
179 | :100B2000CF15CF15681BCF156A1D091D131DCF15D5 | ||
180 | :100B3000CF15CF15CF15CF15CF15CF15CF15CF1595 | ||
181 | :100B4000CF15CF15CF15CF15CF15CF15CF15CF1585 | ||
182 | :100B5000CF15CF15CF15CF15CF15CF15CF15CF1575 | ||
183 | :100B6000CF15CF15CF15CF15CF15CF15CF15CF1565 | ||
184 | :100B7000CF15CF15CF15CA72C67101200640780077 | ||
185 | :100B8000C315CE73CA72C67101200040C2706800DE | ||
186 | :100B9000C415612000001B600100912000509120CD | ||
187 | :100BA00080407C00C37001407800C415C3700640CB | ||
188 | :100BB0007800C41599204100A1204100A92005001A | ||
189 | :100BC000A3537800C115C470C37004007A00780084 | ||
190 | :100BD000C1157800C1157800C1157800C1159120A4 | ||
191 | :100BE0000080C3700400C7705349CB702050CF7091 | ||
192 | :100BF0002020D370080001200F00D670792000005B | ||
193 | :100C00001B780100312030005920001029201A04DF | ||
194 | :100C10005120450461204704C1202000912000504C | ||
195 | :100C20009120804078001804D875DC74DA75DE7481 | ||
196 | :100C300078001A16292000002025D071C872CC73C4 | ||
197 | :100C4000C470A020992030000370010007700600D6 | ||
198 | :100C50001A731E722274267521204000FF81400005 | ||
199 | :100C6000C11582A14000C8003416202106A008202A | ||
200 | :100C70000384127007700400077001000870FCD034 | ||
201 | :100C800040003B160770020084A0E00140004916B6 | ||
202 | :100C9000C37002407800C415A824A55378002B1611 | ||
203 | :100CA0007800C115292000002025D071C872CC73AE | ||
204 | :100CB000C4709820A1203000037000000770060067 | ||
205 | :100CC0001A731E72227426752120400007700600D8 | ||
206 | :100CD000FF814000C11582A14000C8006E1620218E | ||
207 | :100CE00006A0082003841270A824A65307700100F0 | ||
208 | :100CF0000870FCD04000751684A0E0014000631627 | ||
209 | :100D0000C37002407800C415D875DC74DA75DE74DF | ||
210 | :100D100078005216C471C87014219EA70400C00048 | ||
211 | :100D20008F160A20CA727800C015C7700800CB70F1 | ||
212 | :100D30000F00CF700B007800C115D875DC76DA751E | ||
213 | :100D4000DE767800A316292000003025C470C87212 | ||
214 | :100D5000CC73D074C670CA72CE73D27405A0400032 | ||
215 | :100D6000F2160AA44000B316C800BC1601807278BF | ||
216 | :100D700084A000FC4000C016AC7885C0AE7801208D | ||
217 | :100D800005407800C3157E7B7A7A867E827D767CEC | ||
218 | :100D90008CA400FF4000D8160784048004800C81D6 | ||
219 | :100DA0000C810F8118A191A20000B1A6000081A5BD | ||
220 | :100DB00000007800E21607840480048018A391A242 | ||
221 | :100DC0000000B1A6000081A500001A731E722276F1 | ||
222 | :100DD000267005A64000EC16107AC5C2127AAC78CF | ||
223 | :100DE00084A0FCFFAE787800F516AC7885C0AE78AC | ||
224 | :100DF0007800C115D875DC76DA75DE7678000017D4 | ||
225 | :100E0000292000003025C470C872CC73D474C67019 | ||
226 | :100E1000CA72CE73D67405A040002F170AA44000F2 | ||
227 | :100E20001017C80019170180927884A000FC4000B8 | ||
228 | :100E30001D17AC78C5C0AE78012005407800C315F9 | ||
229 | :100E40009A7A9E7BA27DA67E002605A540002817E3 | ||
230 | :100E5000107AC5C2127A967CAC7884A0FFFCAE787A | ||
231 | :100E600078003217AC78C5C0AE787800C11509207B | ||
232 | :100E700000006C7865A040003E1708810060780093 | ||
233 | :100E80003717C47A7800BF150920484F0C21107815 | ||
234 | :100E9000ECD0C000C0151120884F14227800BF1577 | ||
235 | :100EA0000920494F0C211078ECD0C000C01511204A | ||
236 | :100EB000894F14227800BF156120404F28612C62B1 | ||
237 | :100EC0001482148214821078ECD0C0006D17612057 | ||
238 | :100ED000804F2863DA732C631C831C831C83DE73AE | ||
239 | :100EE0007800BF1509204C4F0C211078ECD0C000C1 | ||
240 | :100EF000C01511208C4F14227800BF151879780086 | ||
241 | :100F0000C01509204D4F0C211078ECD0C000C01541 | ||
242 | :100F100011208D4F14227800BF1509204E4F0C214F | ||
243 | :100F20001078ECD0C000C01511208E4F142278002C | ||
244 | :100F3000BF1520791078ECD0C000C015247A780055 | ||
245 | :100F4000BF15C471FCD1C000A6171120C053780092 | ||
246 | :100F5000A81711204054078184A00F00038003804C | ||
247 | :100F6000038068A2006A04689CD04000B717086B31 | ||
248 | :100F70007800B8170C6BFCD1C000BF1721203B02D2 | ||
249 | :100F80007800C11721203B0124241479E4D14000CA | ||
250 | :100F9000CD17C4D4C000CC17D5C47800CD17DDC49C | ||
251 | :100FA000A4A4001CDE74C4717800BE15C477781048 | ||
252 | :100FB0002B1E912000801C6B146A91200180082751 | ||
253 | :100FC0007800BE156120404F18611078ECD0C00049 | ||
254 | :100FD000C0156120804F18627800BF15C477781063 | ||
255 | :100FE0002B1E912000800869186A106BDA77912017 | ||
256 | :100FF00001807800BE15C471102194A20F0082A256 | ||
257 | :101000001000C800B9157810C62784A3004040001E | ||
258 | :10101000081895A220007800BE15C4710021BCC03C | ||
259 | :1010200082A01000C800B915BCD1C0001918112049 | ||
260 | :10103000484F042278001D181120884F0422BDC09B | ||
261 | :101040007E000021BCC01220781023277F01780089 | ||
262 | :10105000C015C4712120494F0424C6701920000016 | ||
263 | :1010600078003518C8712120894F0424CA70FDC347 | ||
264 | :1010700011205418A9200800042206A14000441899 | ||
265 | :101080001082F0003918C471C8727800B81592A2A5 | ||
266 | :1010900054187E0222217F01781044271078ECD06A | ||
267 | :1010A000C0005218FCD340002F187800C115E80387 | ||
268 | :1010B000FA00F401EE0204000100020003006120C6 | ||
269 | :1010C000404F28612C62148214821482C4702A60FA | ||
270 | :1010D000C8700380038003802E601078ECD0C000BD | ||
271 | :1010E00082187E027E016120804F28612C6214826A | ||
272 | :1010F00014821482D8702A60DC700380038003801D | ||
273 | :101100002E60DA71DE727F017F027800BF156120E8 | ||
274 | :10111000404F3061C47032601078ECD0C000C01510 | ||
275 | :101120006120804F3062C87032607800BF15187936 | ||
276 | :101130007800C015C47184A1CFFF4000A3181078B7 | ||
277 | :10114000ECD0C000B915C8727800B81511204D4F09 | ||
278 | :10115000042212217E00192000007810AB2710789D | ||
279 | :10116000ECD04000B3187F017800C015C87184A18D | ||
280 | :10117000CFFF4000BC181021C4717800B8151120B1 | ||
281 | :101180008D4F042212217E00FDC37810AB277F0211 | ||
282 | :101190007F017800BF15C47182A110004800D418E7 | ||
283 | :1011A0001078ECD0C000B915C8727800B8151120BD | ||
284 | :1011B0004E4F04227E00122119200000781089274A | ||
285 | :1011C0001078ECD04000E4187F017800C015C87199 | ||
286 | :1011D00082A110004800ED181021C4717800B815E4 | ||
287 | :1011E00011208E4F04227E001221FDC37810892722 | ||
288 | :1011F0007F027F017800BF15C471C87284A1FDFF12 | ||
289 | :10120000C000B81584A2FDFFC000B81500212079E8 | ||
290 | :1012100022780022247A26787800BF15C471FCD188 | ||
291 | :10122000C00013191120C053780015191120405423 | ||
292 | :10123000078184A00F0003800380038068A2192027 | ||
293 | :101240000000C872BCD2400024199DA31000B4D283 | ||
294 | :10125000400029199DA308009120008000687E00AD | ||
295 | :1012600026A240004819026AECD440003519A5C3F3 | ||
296 | :10127000E4D4400039199DC3F4D4400048190F81CB | ||
297 | :10128000F4D24000441978100828780048197810E2 | ||
298 | :10129000E62778004819CC72086806A240006A194F | ||
299 | :1012A000A4A2FF001478E4D0C0005B1982A4280037 | ||
300 | :1012B000480067194000671978005F1982A443004D | ||
301 | :1012C00048006719C471C6717F02CA7291200180FB | ||
302 | :1012D0007800BA150A6A9DA30A00046805A3066887 | ||
303 | :1012E0007F020C6BC471912001807800BE15C47719 | ||
304 | :1012F00078102B1E91200080146A1C6B91200180B5 | ||
305 | :10130000C8701668CC701E6808277800BE15C470B7 | ||
306 | :101310006120404F18611A601078ECD0C000C015F1 | ||
307 | :10132000C8706120804F18621A607800BF15C471C0 | ||
308 | :10133000C872CC7382A11000C800B91578102A2891 | ||
309 | :1013400084A300404000A31995A220007800BE1598 | ||
310 | :10135000C47778102B1E91200080086A8DC20A6A1B | ||
311 | :101360009120018008277800BF15C47778102B1EC4 | ||
312 | :1013700091200080086A94A2F9FF0A6A046805A017 | ||
313 | :101380004000C11978106F2691200180082778004D | ||
314 | :10139000BF15C47778102B1E91200080086A95C273 | ||
315 | :1013A0000A6A046805A04000D41978106F269120BD | ||
316 | :1013B000018008277800BF15C4774120010049202B | ||
317 | :1013C000050051202000912000807810461E9120B9 | ||
318 | :1013D00001800827086A7800BF15C4771478E4D024 | ||
319 | :1013E000C000FE19FCD74000F8197810AE1D40006F | ||
320 | :1013F000FE197800C3157810A11D4000FE19780071 | ||
321 | :10140000C315C873CC72C677CA73CE727810CD1E5E | ||
322 | :10141000C000281A186805A04000221A08277E0775 | ||
323 | :1014200078105A287F07C000221A01201500FCD727 | ||
324 | :10143000C0001B1A6120404F78001E1AFDC06120B9 | ||
325 | :10144000804F2A78912001807C009120018001202A | ||
326 | :1014500005407800C315912001807800C115C4773C | ||
327 | :101460001478E4D0C000401AFCD740003A1A781033 | ||
328 | :10147000AE1D4000401A7800C3157810A11D400031 | ||
329 | :10148000401A7800C315C677412021004920050085 | ||
330 | :1014900051202000912000807810461E092016005F | ||
331 | :1014A000FCD7C000541A6120404F7800571A6120C1 | ||
332 | :1014B000804FFDC1676003007F6000007667836036 | ||
333 | :1014C0000F002A79D461DCC1D66178106F26912093 | ||
334 | :1014D00001807C00C877CA77C477C6771478E4D0D7 | ||
335 | :1014E000C0007E1AFCD74000781A7810AE1D40006C | ||
336 | :1014F0007E1A7800C3157810A11D40007E1A78006E | ||
337 | :10150000C315BCA700FF9120008009201700FCD75D | ||
338 | :10151000C0008B1A6120404F78008E1A6120804FE6 | ||
339 | :10152000FDC17F60000067600200766783600F0086 | ||
340 | :101530002A79D461DCC1D66178106F2691200180B0 | ||
341 | :1015400041202100492005005120100091200080F9 | ||
342 | :10155000C87005A04000AC1AD460FDC0D6607810F9 | ||
343 | :10156000461EC8703668388784A71F00C000AC1AB2 | ||
344 | :10157000912001807C00192000001478E4D0C00084 | ||
345 | :10158000CE1AC87284D24000C81A7810AE1D40002E | ||
346 | :10159000CE1A7800C3157810A11D4000CE1A78002D | ||
347 | :1015A000C315C872CA72AC7884A00300C000F91ACF | ||
348 | :1015B0003920000084D24000DB1AFDC74120210001 | ||
349 | :1015C000492004005120080078102B1E9120008033 | ||
350 | :1015D0000868D4C00DA80A6991200180388784A7C3 | ||
351 | :1015E0001F00C000E11ABCA700FF3F8738873F8774 | ||
352 | :1015F00084A7000FC000E11A91200080C87284D235 | ||
353 | :10160000C0000B1B1078ECD04000071B69200001C4 | ||
354 | :1016100078000D1B6920000278000D1B6920000175 | ||
355 | :10162000086884A0FDFF0A683068B4D040002D1B14 | ||
356 | :101630004B680400A9201400486894D040001F1B88 | ||
357 | :10164000F000191B4B680900A9201400486884D0D9 | ||
358 | :101650004000291BF000231BA920FA00F0002B1BDF | ||
359 | :101660007920004F09201800C87284D2C000391BAD | ||
360 | :101670006120404F78003C1B6120804FFDC17F609E | ||
361 | :1016800000002A796760010083600F00A7600000F6 | ||
362 | :10169000A860B260B660D460B4D04000581BB4C03B | ||
363 | :1016A000D6607E0CB86065A00860D4C00A6018607F | ||
364 | :1016B00001801A607F0CD46084A0FF77D660AC787C | ||
365 | :1016C0008DC0AE78FF834000631B7C001B68470021 | ||
366 | :1016D000912001807C00CC737810BA1AEC69486ABA | ||
367 | :1016E00085A100184A6885A14000EE68CC732120CE | ||
368 | :1016F0000400A920FF09F000781B2184C000761B9C | ||
369 | :101700001983C000741BEE694A6A912001807C0035 | ||
370 | :10171000FCD7C0008C1B6920404F78008E1B6920CD | ||
371 | :10172000804FC471C6711669FF81C000961BA768FF | ||
372 | :101730000100AC788CC0AE7884D0C0009E1B7810BD | ||
373 | :101740002D1F7C00D875DC74DA75DE747800A71B59 | ||
374 | :101750002EA02025C471C873CC72C671CA73CE7214 | ||
375 | :101760007920004FDE7DDA7CD67BD27A7810041E99 | ||
376 | :101770004000D11CA9200500A120144F9120008019 | ||
377 | :10178000A1419120018009204000781018204000DC | ||
378 | :10179000CA1B78100D1E7800D11C04608CA0FF00BD | ||
379 | :1017A0008EA10900C000D51B7E007810BF237F00EA | ||
380 | :1017B00084A000FF078009804000611C7E0C682C1B | ||
381 | :1017C0007810041E40001B1C002C9E680981C0007C | ||
382 | :1017D000DC1B9F6000007F0C7E0CDC7DD87CD47B02 | ||
383 | :1017E000D07A90A2400099A30000A1A40000A9A56E | ||
384 | :1017F0000000DE7DDA7CD67BD27A682C9C6865A0FE | ||
385 | :101800004000601C0920400078101820C0003E1CD9 | ||
386 | :10181000046084A0FF0086A00200C0001B1C0460BE | ||
387 | :1018200084A0FF0086A00A00C000171C7E0178106B | ||
388 | :10183000BB237F01002D02607800EA1B7F0C7E0C29 | ||
389 | :101840009C607810901E7F0C9F6000007810D51C63 | ||
390 | :10185000092018000860CDC00A6004608660107816 | ||
391 | :101860007E00FF84C000341CFF854000361CC5C0CC | ||
392 | :1018700012787810BB1D7F00127878100D1E78004A | ||
393 | :10188000D11C7F0C7E0C9C607810901E7F0C9F609A | ||
394 | :1018900000007810D51C09201800876003011B6028 | ||
395 | :1018A000030010787E00FF84C000561CFF854000B6 | ||
396 | :1018B000581CC5C012787810BB1D7F0012787810B4 | ||
397 | :1018C0000D1E7800D11C7F0C1478E4D0C0008F1C52 | ||
398 | :1018D0001461FCD140006F1C7810AE1D40008F1CBD | ||
399 | :1018E0007800731C7810A11D40008F1C7810D51C47 | ||
400 | :1018F00009201800876003011B60210010787E001A | ||
401 | :10190000FF84C000831CFF854000851CC5C0127881 | ||
402 | :101910007810BB1D7F00127878100D1E0120074043 | ||
403 | :101920007800C315C474C873CC7214609120008011 | ||
404 | :101930007E0E09201200FCD0C0009F1C7120404F79 | ||
405 | :101940007800A21C7120804FFDC12A7967700500C4 | ||
406 | :10195000D471DCC1D6716A736E72727476707B70EA | ||
407 | :101960000000002C7E702EA030251C6184A1600038 | ||
408 | :101970004000B91C7810B6467F0E9665A6659A663B | ||
409 | :10198000AA66AF600000B360000014672360000027 | ||
410 | :10199000246096A00100C000CC1C00802660781056 | ||
411 | :1019A0006F26912001807C00C37005407800C4152B | ||
412 | :1019B000A92005009920144F912000800A539120FE | ||
413 | :1019C0000180002110A299A30000A1A40000A9A5F4 | ||
414 | :1019D00000007C00C471C77000001E797800C1153A | ||
415 | :1019E000C471C67168217800F41C692000100C696C | ||
416 | :1019F00016A0042D10A2688D0981C000F61C85A2D6 | ||
417 | :101A00000000C000041DC37000407800061DC370B4 | ||
418 | :101A10000340CA707800C4156479C671C47182A18C | ||
419 | :101A20000300C800B91566797800C1156479C671DC | ||
420 | :101A30007800C1150079C671C47102797800C115AA | ||
421 | :101A40000079C6717800C115C470112000008CA007 | ||
422 | :101A50000D004000361D0C814800321D10820C81A3 | ||
423 | :101A60000C814800321D10820C81FF81C000BA1524 | ||
424 | :101A700010820E7A8CD24000621D1079CDC112798D | ||
425 | :101A8000092021001920030084D240005C1D088138 | ||
426 | :101A90001920410011204E97122319204200108274 | ||
427 | :101AA00012231920430010821223192046001082AD | ||
428 | :101AB000122319204700108212231920060011203A | ||
429 | :101AC0005397122111207397122304790678780016 | ||
430 | :101AD000C0150478C6707800C115C471FCD1C0006F | ||
431 | :101AE000721D1120C0537800741D112040540781CD | ||
432 | :101AF00084A00F0003800380038068A2146AB4D21C | ||
433 | :101B00004000831D112001007800851D1120000078 | ||
434 | :101B10000C6B0068DA707800BE151478F4D04000C1 | ||
435 | :101B2000951D01200740DB70000005A07800A01D76 | ||
436 | :101B3000FCD040009F1D01200740DB70010005A084 | ||
437 | :101B40007800A01D06A07C001478F4D04000AC1DE5 | ||
438 | :101B500001200740DB70000005A07800AD1D06A045 | ||
439 | :101B60007C001478FCD04000B91D01200740DB70D8 | ||
440 | :101B7000010005A07800BA1D06A07C0012711A723F | ||
441 | :101B80001E731078C4D04000C41D2274267580AC2A | ||
442 | :101B9000010008810C81A9819880A1203000037088 | ||
443 | :101BA00000008460A220A65307700100747984A10C | ||
444 | :101BB00000FF4000E11D0F810C810C810480048036 | ||
445 | :101BC000078000A17800E41D0781048004807C79EF | ||
446 | :101BD00008A1787A06A011A2107DC4D54000F11D9D | ||
447 | :101BE000847B19A3807C21A40870FCD04000F11DE7 | ||
448 | :101BF00003700100077006001A711E72107DC4D5B3 | ||
449 | :101C00004000011E2273267484A0E0017C00487805 | ||
450 | :101C100065A040000C1E042C4A78632000007C0064 | ||
451 | :101C20007E0F7920004F48786220002C05A0C0006C | ||
452 | :101C3000181E7810B2294A787F0F7C001120009975 | ||
453 | :101C40004A7AC47B19834000281E80A232001220E9 | ||
454 | :101C5000102078001F1E132000007C007E017E02F1 | ||
455 | :101C6000FCD7C000341E1120C0547800361E11204D | ||
456 | :101C7000C07484A7000F0B8084A71F004000411E82 | ||
457 | :101C8000038003800380038005A168A27F027F0197 | ||
458 | :101C90007C0078102B1E00292A68002A2E6808680C | ||
459 | :101CA00084A0EFF90DA80A697E0EFCD7C0005B1E68 | ||
460 | :101CB0000920534F7120404F78005F1E0920934F39 | ||
461 | :101CC0007120804F0C21046805A040006F1E16A1F2 | ||
462 | :101CD000C0006F1E6020006006687E010B200000BF | ||
463 | :101CE0007800721E092000007E01046865A0400093 | ||
464 | :101CF000871E006006687810A21E781064201068A5 | ||
465 | :101D0000087909810A7901801268C000721E107971 | ||
466 | :101D1000A5C112797F0102690669002D6020781043 | ||
467 | :101D2000132B7F0E7C0065A04000A11E08209C6044 | ||
468 | :101D300005A040009E1E62209F60000065A0780004 | ||
469 | :101D4000941E48784A7962207C00076003018F6006 | ||
470 | :101D50000000A9201C0080AC0500A020012000008C | ||
471 | :101D6000A44028681A602C6822607C007E0EFCD794 | ||
472 | :101D7000C000BD1E7120404F3120C04F7800C11EF1 | ||
473 | :101D80007120804F3120C05150708CA00002C000E3 | ||
474 | :101D9000CB1E08A60A2D0080527006A07F0E7C0084 | ||
475 | :101DA0007E0FFCD7C000D51E7920404F7800D71E8B | ||
476 | :101DB0007920804F78102B1E9120008004680A78CB | ||
477 | :101DC00065A040002B1F7800E91E002C0A786020D7 | ||
478 | :101DD000006065A040002B1F106006A3C000E21E3B | ||
479 | :101DE0000C6006A2C000E21E282C4C7806ACC00095 | ||
480 | :101DF000F81E7800281F046806ACC000061F0060AB | ||
481 | :101E00006020066805A0C000061F03680000780077 | ||
482 | :101E1000101F006408786020026486A40000C000DF | ||
483 | :101E2000101F002C026860257F0F7810A21E7E0F05 | ||
484 | :101E30001B600500236020007F0F781064207E0F58 | ||
485 | :101E4000087909810A79106801801268C000281F8A | ||
486 | :101E50001078A5C012780120FFFF05A07F0F7C003D | ||
487 | :101E60007E07002739200000FCD04000351FFDC749 | ||
488 | :101E700041202100492004005120080091200080C9 | ||
489 | :101E80007810461E388784A71F00C0003D1FBCA7DE | ||
490 | :101E900000FF3F8738873F8784A7000FC0003D1FA2 | ||
491 | :101EA000912001807F077C006C78092074970C21B9 | ||
492 | :101EB0000DA140005B1F65A07800DC2361200000BD | ||
493 | :101EC000186084D0C0007B1F10788CD040006C1F3D | ||
494 | :101ED0008CC01278FCC76920404F7800711F8DC0FC | ||
495 | :101EE00012786920804FFDC7912000801C681F6810 | ||
496 | :101EF00000009120018005A0C0007C1F7C008CA008 | ||
497 | :101F0000F0FF4000821F7810B2297900841F941FCF | ||
498 | :101F1000971F9D1FA11F951FA51F951F951F951FFB | ||
499 | :101F2000AB1FDC1FE01FE61FFB1F951F951F7C00EA | ||
500 | :101F30007810B22978102D1F012001807800072029 | ||
501 | :101F4000012003807800072001200480780007200A | ||
502 | :101F500078102D1F01200680780007209120008036 | ||
503 | :101F60007E07FCD7C000B71F6920404F3920090009 | ||
504 | :101F70007800BB1F6920804F39200900006886A0C7 | ||
505 | :101F800000004000C51F7F001E6F912001807C0073 | ||
506 | :101F900074687F07BCA000FF412021004920040095 | ||
507 | :101FA000512010007810461E388784A71F00C000FB | ||
508 | :101FB000CF1F9120018001200A8078000720012096 | ||
509 | :101FC0000C807800072078102D1F01200D807800EC | ||
510 | :101FD00007201478E4D0C000F91FECD04000F31FB4 | ||
511 | :101FE000FCD74000F31FE4787800F41FE078C67057 | ||
512 | :101FF00001200E80780007207800951FFCD7400054 | ||
513 | :102000000120EC7878000220E878C67001200F806B | ||
514 | :1020100078000720C270FCD7C0000F20DB700000E2 | ||
515 | :1020200078001120DB700100612000001B600100BE | ||
516 | :10203000912080407C0080AC0100FF814000432063 | ||
517 | :1020400099203000A0200C7084A0FF0340002520C0 | ||
518 | :1020500018707E001C707E0020707E0024707E0050 | ||
519 | :102060001271AC811A721E732274267503700100FE | ||
520 | :102070000770010008700B80C8003720077002004D | ||
521 | :102080008CA0E001C0004320A55306A0037000000F | ||
522 | :10209000077004007F0026707F0022707F001E7092 | ||
523 | :1020A0007F001A707C0011202000092010000A6BAC | ||
524 | :1020B0000E6C036800FD076818001A6A002DE8A07E | ||
525 | :1020C000080090A204000981C00054207C00046034 | ||
526 | :1020D0008660082C63200000687805A06A794000BB | ||
527 | :1020E0007120022C780072206E797C007E0C6120B9 | ||
528 | :1020F000004F87680301082D6B200000686005A071 | ||
529 | :102100006A6140008320022D780084206E617F0C7C | ||
530 | :102110007C0091200080042C6E7805A0C0008E20E9 | ||
531 | :102120006A78912001809C6005A04000A7207E0C69 | ||
532 | :10213000602008209C6005A04000A32062209F60D2 | ||
533 | :10214000000065A09C6005A0C0009B2048784A79EB | ||
534 | :1021500062207F0C487862209F60000085AC000000 | ||
535 | :10216000C000B1207810B2294A787C00A920100064 | ||
536 | :1021700006A0048086808E81C800BC2000A2F000EA | ||
537 | :10218000B72086808E817C007E15A920100005A0D6 | ||
538 | :102190004000E2201AA1C800E22013828D8148008D | ||
539 | :1021A000D5201AA1C800D620F000CA207800DA2075 | ||
540 | :1021B0001AA108231082F000CA207E00003284A0F9 | ||
541 | :1021C000FFF780207F007F157C007E00003285A015 | ||
542 | :1021D00000087800DE20747DD07006A54000CE2176 | ||
543 | :1021E0001078502000788CD040000A21ECDA4000B2 | ||
544 | :1021F0000A217E0E9120008071202000047005A02D | ||
545 | :10220000C000072108707F0E86A0080040000A2148 | ||
546 | :102210007800CE217F0E7800CE217810041E400079 | ||
547 | :10222000CE2146A070790025008012A1092040002F | ||
548 | :10223000C800192178002021D07206A24000202178 | ||
549 | :102240004088092080007E0C1271077001009920DF | ||
550 | :102250003000A920200080AC0100A02061200000F7 | ||
551 | :10226000FF88400032217810041E0870FCD0400026 | ||
552 | :10227000322107700200912001808CA0E001C00093 | ||
553 | :102280006921A553FF8CC0004721FF884000B82179 | ||
554 | :1022900078005121002C8E78A920200080AC01000C | ||
555 | :1022A000A020A5537800B82146A018721C73C4DA88 | ||
556 | :1022B000400059212074247592A240009BA3000085 | ||
557 | :1022C000A3A40000ABA500001A721E73C4DA40007C | ||
558 | :1022D00069212274267506A0077004004000B82109 | ||
559 | :1022E000FF8C4000722178100D1E7F0C78100D1E9F | ||
560 | :1022F00046A0887800808A7886A002004000982155 | ||
561 | :102300007C7A787BC4DA40008421847C807D747977 | ||
562 | :1023100007810480048010A299A30000A1A40000FA | ||
563 | :10232000A9A500001A721E73C4DA4000CE212274DF | ||
564 | :1023300026757800CE211460FCD0C000A021692051 | ||
565 | :10234000404F7800A2216920804F912000801F68B3 | ||
566 | :102350000200FF884000AE2146A08C786020780003 | ||
567 | :1023600098218B780000AC7885A00300AE7891208E | ||
568 | :1023700001807800CE217F0C8B78000078108D23AF | ||
569 | :10238000046084A00F007810CF21FF884000CC218A | ||
570 | :102390008C786020046084A00F007810CF21780032 | ||
571 | :1023A000E8207C007900D121E121FF211D22E121DB | ||
572 | :1023B0002E22F221E121E121E121FD211B22E12157 | ||
573 | :1023C000E121E121E121E12139200004BC7805A7C8 | ||
574 | :1023D000BE78086005A70A60781071229C60BA7800 | ||
575 | :1023E0009F600000781077237C00BC78C4D0400048 | ||
576 | :1023F000F8217800E1211C60BDC01E607800052234 | ||
577 | :102400007810BF23BC78C4D0400005227800E121B9 | ||
578 | :10241000BF7800000460078084A0FF00B2780180CC | ||
579 | :10242000400018227810712240001822BC78C5C0E4 | ||
580 | :10243000BE7878001A22780090227C007810BB23A6 | ||
581 | :10244000BC788CA0000EC0002522C4D0C00027227A | ||
582 | :102450007800E12178107122C0002D2278009022AE | ||
583 | :102460007C00BC78C4D0400034227800E121BF78E1 | ||
584 | :102470000000146711200100A822186084A0FF004A | ||
585 | :1024800005A040005422BCA700FFA92020008EA078 | ||
586 | :10249000010040005422BCA7008011200200A920A6 | ||
587 | :1024A00000018EA002004000542278006E227810B5 | ||
588 | :1024B0002B1E002D912000802B6800002F6800004B | ||
589 | :1024C000086884A0DEFF0A68E8AD10009120018052 | ||
590 | :1024D000F0005722118240006E22A92000017800EE | ||
591 | :1024E000572278100D1E7C009F600000B4786DA00C | ||
592 | :1024F000002CB678C0007C22BA78780084229E68CE | ||
593 | :10250000002D0260B87806ADC00084220260B07869 | ||
594 | :102510000180B278C0008F22BC78C4C0BE78B87881 | ||
595 | :10252000602006A07C007E0E2EA03025BA7DB67DF0 | ||
596 | :10253000AE65B2651C60A260482084A9FFE11E6000 | ||
597 | :1025400084A960004000A3227810B6469665A6656F | ||
598 | :102550009A66AA6614677120804FFCD7C000AF222C | ||
599 | :102560007120404F84A7000F0B8084A71F004000FC | ||
600 | :10257000BA22038003800380038005A1C47168A18F | ||
601 | :102580000027078084A00F00038003800380C871A8 | ||
602 | :1025900000A1C260912000801478C4D04000DF22E6 | ||
603 | :1025A000ECD04000DB22FCD7C000D822F4D0C00021 | ||
604 | :1025B000E6227800DF22FCD0C000E6221078F4D0BA | ||
605 | :1025C000C000E622086E84D640001023FCD9C0006B | ||
606 | :1025D0001023912001807810A21E91200080781095 | ||
607 | :1025E0006420912001801478E4D0C0007523147811 | ||
608 | :1025F000C4D040007523ECD040000823FCD7C000B5 | ||
609 | :102600000323F4D0C0000C2378007523FCD0C00055 | ||
610 | :102610000C23780075231078F4D0400075231B60DC | ||
611 | :10262000210078007523246096A00100C0001723C4 | ||
612 | :1026300000802660106A146802A248002A23400025 | ||
613 | :102640002A2391200180392000029C60BA789F6083 | ||
614 | :1026500000007810772378007523082CFCD94000FF | ||
615 | :102660005223006865A040005223046A007084A0D1 | ||
616 | :102670000200400048234C7006A2C0004823046BAF | ||
617 | :1026800060210423026005A0C00044230269602287 | ||
618 | :10269000026178005E23002D60207810132B086EF5 | ||
619 | :1026A00060210262066978005E230068026965A005 | ||
620 | :1026B00040005A23026178005B23066960210360B1 | ||
621 | :1026C00000006021FCD940006523B4A6FCFF0A6E1F | ||
622 | :1026D0001068087D28850A7D00801268912001809D | ||
623 | :1026E000B4D640007523B6A640000A6E7810B31E1B | ||
624 | :1026F0007F0E7C00086005A70A609120008078109A | ||
625 | :10270000642091200180B87865A040008A239C60F5 | ||
626 | :10271000BA789F60000078007723B678BA787C009A | ||
627 | :1027200070797478182884D340009723008012A110 | ||
628 | :1027300048009C23008012A1C800AC2384C37C7A8B | ||
629 | :102740001A72787A1E72C4DA4000A723847A227241 | ||
630 | :10275000807A267206A084D34000AC23008076786D | ||
631 | :10276000D2701C7805A04000BA2301801E78C000FA | ||
632 | :10277000BA236800BA23912080407C003920D323FB | ||
633 | :102780007800C1233920D923042705A04000D22393 | ||
634 | :1027900000AC68200869106812690A680C6914683E | ||
635 | :1027A00016690E6838877800C1237C000300090091 | ||
636 | :1027B0000F0015001B00000015001B000000412049 | ||
637 | :1027C00000000C787900E123B3258625E5235E24FB | ||
638 | :1027D000392074973427107D78000524846086A002 | ||
639 | :1027E0000301C00047241461186005A14000FA23CA | ||
640 | :1027F000FF86C000162478004724038680A05597E2 | ||
641 | :102800000C6202220080106202227810862030863C | ||
642 | :102810008EA60F004000D2246C7865A0C000EB2388 | ||
643 | :10282000087802A6C8001624ACD5C00016243A26A3 | ||
644 | :102830007C0082A60300C800D22491200080692079 | ||
645 | :102840000000186884D0C00042241120559704224B | ||
646 | :10285000C67010820422CA7084D6C000322410824E | ||
647 | :102860000422DA7010820422DE7085A62080C270F5 | ||
648 | :102870001B68010091208040107884A0CFFF12785F | ||
649 | :10288000912001803B2000007C001078ADC01278C0 | ||
650 | :102890007800D2243A267810BD25C000E0256C7857 | ||
651 | :1028A00065A0C000EB2391200080107884A0CFFFAA | ||
652 | :1028B000FF8640005924ADC0127891200180780035 | ||
653 | :1028C000E025392074973427107D78007A248460BD | ||
654 | :1028D00086A00301C000BB241461186005A140005C | ||
655 | :1028E0007324FF86C0008B247800BB2480A65597F4 | ||
656 | :1028F0000C6202227810862030868EA61E004000D0 | ||
657 | :10290000D2246C7865A0C0006424087802A6C800B0 | ||
658 | :102910008B24ACD5C0008B243A267C0082A606000E | ||
659 | :10292000C800D2249120008069200000186884D05B | ||
660 | :10293000C000B6241120559709204E97A8261C21C7 | ||
661 | :1029400004221A2008811082F0009C2485A6308081 | ||
662 | :10295000C2701B68010091208040107884A0CFFFD6 | ||
663 | :1029600012789120018006A0092075970A203A204C | ||
664 | :102970007C001078ADC012787800D2243A26781006 | ||
665 | :10298000BD25C000E0256C7865A0C00064249120BE | ||
666 | :102990000080107884A0CFFFFF864000CD24ADC01A | ||
667 | :1029A0001278912001807800E02591200080077046 | ||
668 | :1029B00004009479D47002A14800E3244000ED247F | ||
669 | :1029C000907B02A3C000ED247800E6240280C000C2 | ||
670 | :1029D000ED243A261078ADC01278912001807C0059 | ||
671 | :1029E00084A100FF4000FA240F810C810C81048037 | ||
672 | :1029F0000480078000A17800FD2407810480048002 | ||
673 | :102A00009C7A10A21A72987A06A011A21E72C4D4DF | ||
674 | :102A100040000D25A47A11A22272A07A11A226727A | ||
675 | :102A2000A120300003700000092054970A26098174 | ||
676 | :102A30009821042184D040001B253386B0A60200D3 | ||
677 | :102A4000A826A65303861270077001009079947827 | ||
678 | :102A500000800AA1C8002A2506A02820747984A134 | ||
679 | :102A600000FF400039250F810C810C810480048017 | ||
680 | :102A7000078000A178003C250781048004807C79D0 | ||
681 | :102A800008A1787A06A011A2C4D440004825847B0E | ||
682 | :102A900019A3807C21A40870FCD04000482584A0A4 | ||
683 | :102AA000E00140006D25107D312054973426A87830 | ||
684 | :102AB0000080AA788CD0C0006225077006000470E0 | ||
685 | :102AC00094D0C0005C257800D4246920474F6B2047 | ||
686 | :102AD0000300AC7885A00003AE7806A078007625C8 | ||
687 | :102AE0003020D67591208040967D107DACA5CFFF1B | ||
688 | :102AF000127D91200180AA78077006003A260370A3 | ||
689 | :102B000001001A711E72C4D54000852522732674F7 | ||
690 | :102B10007C00846086A00301C000A92514611860B0 | ||
691 | :102B200005A1C000A92569200000186884D0C00054 | ||
692 | :102B3000A9250C60C6701060CA70C37020801B6825 | ||
693 | :102B4000010091208040781086206800A8256C78CC | ||
694 | :102B500065A0C00086257C007810BD25C000E0255A | ||
695 | :102B60006C7865A0C00086257800E0257810BD252A | ||
696 | :102B7000C000E0256C7865A0C000B3257800E02592 | ||
697 | :102B8000846086A00301C000D1251860FCC01A60D3 | ||
698 | :102B900086A00400C000D1250478A4D04000D1252F | ||
699 | :102BA0007810862006A07C007810E625C000D82585 | ||
700 | :102BB00085A001007C007810F525C000DE254120AD | ||
701 | :102BC0000100107D7C00FF884000E52591208040B9 | ||
702 | :102BD0007C00907B9479D47002A1C000EF2585A37E | ||
703 | :102BE00000007C004800F32502A37C0002807C00EA | ||
704 | :102BF0001078ECD040000D267E0E912000807120D0 | ||
705 | :102C00002000047005A0C0000A2608707F0E86A070 | ||
706 | :102C1000080040000D2678005E267F0E78005E26B4 | ||
707 | :102C200084A100FF40001A260F810C810C810480D2 | ||
708 | :102C30000480078000A178001D260781048004809D | ||
709 | :102C40009C7A987BA47CA07D10A206A019A321A445 | ||
710 | :102C500029A509201800286005A040002E2609207B | ||
711 | :102C600040007810BB1D40005026A8780080AA784C | ||
712 | :102C70008CD0C0005E261460FCD0C00040266920C5 | ||
713 | :102C8000404F780042266920804F912000801F68C5 | ||
714 | :102C90000300AB780000AC7885A00003AE789120EB | ||
715 | :102CA000018078005E26AB7800007810862090794D | ||
716 | :102CB000947800800AA1C8005B2606A09678D6709A | ||
717 | :102CC00006A071201000912001807C00FCD7C0007C | ||
718 | :102CD0006A260920594F78006C260920994F9120C7 | ||
719 | :102CE00000800A207E0FFCD7C00083260920404FB9 | ||
720 | :102CF0000120044F0420ECD040007F267920000101 | ||
721 | :102D00007800872679200002780087260920804FE6 | ||
722 | :102D100079200001042186A00000C000A026FCD775 | ||
723 | :102D2000C00093260920454F780095260920854F3D | ||
724 | :102D3000042105A0C000A026307884A0C000C000F7 | ||
725 | :102D4000A0261B7845007F0F7C0009200200692027 | ||
726 | :102D5000004F1068ECD0C0000F277120804F792001 | ||
727 | :102D600000012120BF514B780F001920A74484D1C6 | ||
728 | :102D70004000C3261068ECD04000BF26A1202B01E4 | ||
729 | :102D80007800C526A1202B027800C526A1202B01A2 | ||
730 | :102D9000042305A04000D2269A781883AC23188318 | ||
731 | :102DA0009823A65318337800C5269B782000A920C5 | ||
732 | :102DB00010001468E4D04000E226AF780000AF783D | ||
733 | :102DC0002090F000DA267800E826AF780000AF788F | ||
734 | :102DD0002080F000E226037000007E018CD10920E3 | ||
735 | :102DE00000004000F126BDC17810E2287F0120706C | ||
736 | :102DF00084A00F007E001468E4D07F00C00001278B | ||
737 | :102E000085A040637800032785A0C06206780F780C | ||
738 | :102E100000924378D800537880000B7808005674ED | ||
739 | :102E2000537000000981400022277120404F106834 | ||
740 | :102E3000ECD040001C277920000178001E27792063 | ||
741 | :102E400000022120BF4F7800B0267C007E01BCD15B | ||
742 | :102E5000C00037277E000120044F0420ECD07F0003 | ||
743 | :102E60004000332711200101780039271120010289 | ||
744 | :102E700078003927112001018CA10F00042284A0C1 | ||
745 | :102E8000F0FF05A112207F017810E2287C00FCD31E | ||
746 | :102E9000C00057277E000120044F0420ECD07F00A3 | ||
747 | :102EA0004000532711200101780059271120010209 | ||
748 | :102EB0007800592711200101A92009000B81F00099 | ||
749 | :102EC0005B278CA1000E042284A0FFF105A1122033 | ||
750 | :102ED0007C00192002000120044F0420ECD04000A7 | ||
751 | :102EE0007327198309200101780075270920010142 | ||
752 | :102EF000A92005001382F000772794A2E0000421A6 | ||
753 | :102F000084A01FFF05A20A201983400088270920FA | ||
754 | :102F10000102780075277C00FCD3C0009C277E004E | ||
755 | :102F20000120044F0420ECD07F004000982711209E | ||
756 | :102F3000010178009E271120010278009E271120B0 | ||
757 | :102F40000101A9200C000B81F000A0278CA100F04A | ||
758 | :102F5000042284A0FF0F05A112207C00FCD3C00036 | ||
759 | :102F6000BE277E000120044F0420ECD07F004000EB | ||
760 | :102F7000BA27112002017800C02711200202780030 | ||
761 | :102F8000C02711200201042284A0CFFF05A1122036 | ||
762 | :102F90007C007E0CBCD1C000DA277E000120044FEB | ||
763 | :102FA0000420ECD07F004000D6276120000178008B | ||
764 | :102FB000DC27612000027800DC2761200001BCC111 | ||
765 | :102FC0000381038080A020009A60AC62AC637F0C18 | ||
766 | :102FD0007C007E0CBCD1C000FA277E000120044F8B | ||
767 | :102FE0000420ECD07F004000F6276120000178002B | ||
768 | :102FF000FC27612000027800FC2761200001BCC191 | ||
769 | :103000000381038080A022009A60A46084A0DFFF77 | ||
770 | :10301000AE607F0C7C007E0CBCD1C0001C287E0002 | ||
771 | :103020000120044F0420ECD07F00400018286120CC | ||
772 | :10303000000178001E286120000278001E2861200F | ||
773 | :103040000001BCC10381038080A022009A60A460BB | ||
774 | :1030500085A02000AE607F0C7C007E0CBCD1C0003F | ||
775 | :103060003E287E000120044F0420ECD07F00400069 | ||
776 | :103070003A28612000017800402861200002780091 | ||
777 | :10308000402861200001BCC10381038080A0200092 | ||
778 | :103090009A60A4608CA2200040004E28ACC29DA380 | ||
779 | :1030A0000040FCC3B4D3C0005328FDC3AE6210205F | ||
780 | :1030B000A460AE6318207F0C7C00912000807E0C01 | ||
781 | :1030C0007E0E186805A04000C028FCD14000692889 | ||
782 | :1030D0006120D09678006B286120C0957810C828B0 | ||
783 | :1030E0004000A228A9200101FCD1400078286120DD | ||
784 | :1030F000D09578007A286120C0947E0C7810C8287A | ||
785 | :10310000400085287F0C608CF0007A287800C02869 | ||
786 | :103110007F00FCD140008F2882A0D0957120804F85 | ||
787 | :103120007800932882A0C0947120404F7A70767105 | ||
788 | :10313000382101200400667083700F00D471DCC157 | ||
789 | :10314000D671781063267800BC28FCD1C000A9286D | ||
790 | :103150007120404F7800AB287120804F2060DDC087 | ||
791 | :10316000226076713821002C7E7001200600667086 | ||
792 | :1031700083700F00D471DCC1D671781063260120F2 | ||
793 | :1031800000007800C228012001009120018005A0E4 | ||
794 | :103190007F0E7F0C7C00042C05A04000DF286020FF | ||
795 | :1031A000106006A3C000DC280C6006A2C000DC286A | ||
796 | :1031B000146006A1C000DC2806A07800E1280060A9 | ||
797 | :1031C0007800C92885A001007C007E0F7E0E7E015C | ||
798 | :1031D000BCD1C000FA287920404F7E000120044F66 | ||
799 | :1031E0000420ECD07F004000F62871200001780018 | ||
800 | :1031F000FE28712000027800FE287920804F71207F | ||
801 | :10320000000120798CA10F00EC70C4D0C000082907 | ||
802 | :103210007F01780023290B810B810B810B817F00BB | ||
803 | :10322000BCD0C00020297E000120044F0420ECD037 | ||
804 | :103230007F0040001C298DA1000F780022298DA15C | ||
805 | :10324000000F780022298DA1000804217F0E7F0F36 | ||
806 | :103250007C007E0E0120014F0420ACD0C000A329C9 | ||
807 | :10326000E468ACD04000A32984A00600C000A329D4 | ||
808 | :103270001460FCD0C0003D297120C05378003F2964 | ||
809 | :1032800071204054078084A00F00038003800380D6 | ||
810 | :1032900070AE047084A00A00C000A329087194A134 | ||
811 | :1032A00000FF4000A3298CA1FF0001200A0006A115 | ||
812 | :1032B0004000722901200C0006A14000762901205F | ||
813 | :1032C000120006A140007A290120140006A1400046 | ||
814 | :1032D0007E290120190006A1400082290120320028 | ||
815 | :1032E00006A14000862978008A2909200C00780070 | ||
816 | :1032F0008C290920120078008C29092014007800FC | ||
817 | :103300008C290920190078008C29092020007800D8 | ||
818 | :103310008C2909203F0078008C2911200000002111 | ||
819 | :1033200005A20A707120004F0470BCD04000A32990 | ||
820 | :103330001460FCD0C0009E29EA707120404F7800D4 | ||
821 | :10334000A129EE707120804F1F700D007F0E7C0050 | ||
822 | :103350000120054F0420E4D0C000B129047884A0E6 | ||
823 | :103360001FFF85A0406306787C006800B229912089 | ||
824 | :103370000080712000007E00187084D0C000B92940 | ||
825 | :103380007F0071201000CA707F00C670C370028079 | ||
826 | :10339000DB700F08DF700B00712000001B70010054 | ||
827 | :1033A000912080407800CF293C7F587E307C387D4A | ||
828 | :1033B000A0788E70927596749A769E7794A53F0049 | ||
829 | :1033C000F4D44000E62984A77D00C0001D44781095 | ||
830 | :1033D000B2299CA40F0082A304005000F129A6A3E7 | ||
831 | :1033E0000700C000B2291824078584A00F007900C7 | ||
832 | :1033F000F629713062318D31FF33E8376238173981 | ||
833 | :10340000A839963A853B092A062A422E652FB937F4 | ||
834 | :10341000062A7810B2297C0006A07800132A0878C2 | ||
835 | :103420008DC00A7806A002704E704670D27060702F | ||
836 | :1034300005A0C000792B647084A0070079001D2AC4 | ||
837 | :10344000252A982AA12AAC2AB72A5F2BC22A982AB1 | ||
838 | :103450003078BCD0C000082AD471BCD1C000082A82 | ||
839 | :10346000B4D1C000752AA47086A001004000082ACB | ||
840 | :10347000B4706DA0006865A055A09B7810000C6B1F | ||
841 | :10348000AA7B086845A0106D04686DA05DA086A8A1 | ||
842 | :10349000010040004B2ABC69AA7DAA79C0684DA0F2 | ||
843 | :1034A0001C6E012010007800D32C607005A0C000B5 | ||
844 | :1034B000082A7E0C7E0DB4706DA0006865A055A032 | ||
845 | :1034C0009B7810000C6BAA7B086845A0106D0468FF | ||
846 | :1034D0006DA05DA086A8010040006E2ABC69AA7D8F | ||
847 | :1034E000AA79C0684DA01C6E012020007800D32C62 | ||
848 | :1034F0007810B043C000082A1B785B00BC706DA038 | ||
849 | :10350000B4685A789468D678DE789868D278DA7891 | ||
850 | :1035100008788DC00A78BC684270B4C1D671B870A2 | ||
851 | :1035200065A0C0685A7003700200002D4E7080AD17 | ||
852 | :10353000090046707C007810B043C000A02A1B78B8 | ||
853 | :103540004700037004007C007810B043C000AB2A31 | ||
854 | :1035500011200C007810D22A037004007C0078102F | ||
855 | :10356000B043C000B62A112006007810D22A03709A | ||
856 | :1035700004007C007810B043C000C12A11200D0067 | ||
857 | :103580007810D22A037004007C007810B043C00089 | ||
858 | :10359000D12A112006007810D22A7C707F7000009A | ||
859 | :1035A00068204E70037001007C007471FCC10781BB | ||
860 | :1035B00082789B78100086A20C00C000E12AAA7ACB | ||
861 | :1035C000012001007800F62A8CA11F008DA1C00007 | ||
862 | :1035D000AA7986A20D004000EF2AAA7A01200200F3 | ||
863 | :1035E0007800F62AAB7820007871AA79AA7A0120AF | ||
864 | :1035F00004009B786000AA785B7804001B781601B1 | ||
865 | :103600007810D34383700F00D470B4D04000122BD5 | ||
866 | :10361000B4C0D6707E0CB87065A0086084A0EFFBC3 | ||
867 | :103620000A60186001801A607F0C7C00147005A08D | ||
868 | :10363000C000212BD470B4D04000222BB87006AC4F | ||
869 | :10364000C000222B7810012B7C007E01A47186A182 | ||
870 | :1036500001004000542B7E0D7E020021112001004C | ||
871 | :1036600012A2B4706820006806AC40003B2B1182A7 | ||
872 | :103670004000522B7810562B7800302B7E0C002106 | ||
873 | :103680001120010012A2B470682000686020086058 | ||
874 | :1036900084A0EFFB0A60118240004F2B7810562B5C | ||
875 | :1036A0007800422BA77001007F0C7F027F0D7F0105 | ||
876 | :1036B0007C00E8AD0500AC7006ADC0005E2BA870C4 | ||
877 | :1036C00068207C007810B043C000082A7C70682015 | ||
878 | :1036D000747778104E42502C781092449B781000EA | ||
879 | :1036E000146884A01F00BDC0AA781C6E4120010090 | ||
880 | :1036F000012004007800D92C7810B043C000082ABB | ||
881 | :103700009B78100060706820146FD470B4D04000B3 | ||
882 | :10371000932BB4C0D6707E0CB87065A0086084A0EE | ||
883 | :10372000EFFB0A60186001801A607F0C78104E422F | ||
884 | :10373000502C78109244246805A04000A42B82A04D | ||
885 | :1037400006004800A22B7800A42B27680500146807 | ||
886 | :1037500084A01F00BDC0AA783120200041200100B4 | ||
887 | :10376000012003007800D92C8DC2D672C07200A24D | ||
888 | :1037700015A0547108812AA14800BC2BC071642196 | ||
889 | :103780000465FF85C000D32B56712184C000B72B80 | ||
890 | :10379000D4708CD04000CF2BD07005A0C000CF2BB0 | ||
891 | :1037A000D3700A007C0000227800C12BD4708CC03A | ||
892 | :1037B000D670D3700000346005A0C000D02B08671D | ||
893 | :1037C00084A73F074000022CD4D7C000D02B84A789 | ||
894 | :1037D0002100C000D02B84A702004000F32B84A757 | ||
895 | :1037E00004004000D02BBCA7FBFF0A6784A7180287 | ||
896 | :1037F000C000D02B84A700014000022C186005A057 | ||
897 | :10380000C000D02BBCA7FFFE0A6768252368000014 | ||
898 | :103810001C6E84A60E0018634000132C1C6002A3CB | ||
899 | :103820004800162C4000162C7800D02BFF83C000D7 | ||
900 | :10383000D02B582D502C5671BCD7C0001F2C28708F | ||
901 | :1038400022603A60BCC70A67C06865A04DA00061ED | ||
902 | :10385000602A41200100146B9CA31F009DA3C0009F | ||
903 | :10386000FCD14000332C84D64000352C9CA3BFFFF4 | ||
904 | :10387000A4D640003A2C9DA3200084A60E00C000D0 | ||
905 | :10388000852CA5C70A67002CC668A47786A7010007 | ||
906 | :10389000C000592CD470B4D0C000592C007082A044 | ||
907 | :1038A0000200C800592C3078BCD0C000592C9B783D | ||
908 | :1038B0001000AA7B7800D12C3987A6775027B077E3 | ||
909 | :1038C000B0A70500AC7006A6C000642CA876B2763E | ||
910 | :1038D0003A2C38873A2D38873A2838873A23388760 | ||
911 | :1038E0003A253078BCD040007C2C9120008091207B | ||
912 | :1038F0003D30D47084A03D30912000809020D5AA26 | ||
913 | :1039000000004000842C21840022C000B62B7C00E3 | ||
914 | :10391000DCD14000493E292020009CD6C000922CDA | ||
915 | :1039200028858CD6C000922C28854088146F0C61A5 | ||
916 | :1039300008818CA1FF00CC7060A1642CFF8C40003A | ||
917 | :10394000B12C146006A7C0009A2CB8600180BA6040 | ||
918 | :10395000C000952C602A086085A000010A60002242 | ||
919 | :103960002184C000B62B7C00602A0E61BE69002C49 | ||
920 | :10397000C66840880860D5C00A60A47786A70100A1 | ||
921 | :10398000C000592CD470B4D0C000592C007082A053 | ||
922 | :103990000200C800592C3078BCD0C000592C9B784C | ||
923 | :1039A0001000AA7BAA7DAA79012002007E0018607F | ||
924 | :1039B00000801A607800DA2C7E0060290461602A99 | ||
925 | :1039C00084A118004000F62C84A110004000E92CCE | ||
926 | :1039D00078105E40C0001B2D84A108004000F62C2A | ||
927 | :1039E000A06984A10006C000F62C78103E3F780044 | ||
928 | :1039F0001B2DA06984A1001E4000262D84A1000873 | ||
929 | :103A000040000F2D7E0C6029006085A00020026020 | ||
930 | :103A100004618DA1100006617F0C78105E40C0002B | ||
931 | :103A20001B2DA06984A100024000172D7810A13F32 | ||
932 | :103A300078001B2D84A10004C000F22CA06984A191 | ||
933 | :103A400000104000262D14698CA100FF0F81781012 | ||
934 | :103A5000E6277F028CA6E00084A660004000332D9C | ||
935 | :103A600086A06000C000332D8DA100408DA104010F | ||
936 | :103A7000B6699B7860000028AA781868FDC01A68AB | ||
937 | :103A8000BCD640004E2DFCC0877000008AA00D00FF | ||
938 | :103A900050004C2D8AA00C00867101200C000C8077 | ||
939 | :103AA0008A71AA781835403328340080AC8080AF02 | ||
940 | :103AB0002B00A0209B78000080AD0B009820A6531F | ||
941 | :103AC000A8239828A02586A22000C000862DD470A7 | ||
942 | :103AD000B5C0D670002CBA70002DBE701468FCC042 | ||
943 | :103AE0000780827886A202004000BC2DA47000806E | ||
944 | :103AF000A670B47498A40500AC7006A3C0007E2D17 | ||
945 | :103B0000A873B67386A210004000082A7F0D7F0CB0 | ||
946 | :103B10007C00007005A0C000642D86A20200C000D9 | ||
947 | :103B2000D62D7810B043C000642D1468FCC0078007 | ||
948 | :103B30008278912000801B785B00B4685A78946882 | ||
949 | :103B4000D678DE789868D278DA7891200180087883 | ||
950 | :103B50008DC00A787E127E0D7E0CD47084A0002762 | ||
951 | :103B600090207F0C7F0D7F1200295A70BC68427034 | ||
952 | :103B700003700200002D4E7080AD09004670307851 | ||
953 | :103B8000BCD04000C82D91203D30D47084A03D3081 | ||
954 | :103B9000912000809020A47005A0C000CD2D7C0055 | ||
955 | :103BA00021844000CC2D5072C07000A215A0780076 | ||
956 | :103BB000B62B86A21000C000072E7810B043C000BC | ||
957 | :103BC000642D1468FCC0078082781B785B00B468A1 | ||
958 | :103BD0005A789468D678DE789868D278DA78087857 | ||
959 | :103BE0008DC00A78A4700080A670B47490A40500FB | ||
960 | :103BF000AC7006A2C000FA2DA872B67200295A70E5 | ||
961 | :103C0000BC68427003700200002D4E7080AD090048 | ||
962 | :103C100046707C00B46B9DA300205A7B1468FCC0E6 | ||
963 | :103C200007808278946BD67BDE7B986ED27EDA7EBC | ||
964 | :103C30001B785B0000295A70027208788DC00A78E0 | ||
965 | :103C4000002305A64000322ED47084A0002786A051 | ||
966 | :103C50000023C0002C2E0920000078002E2E092001 | ||
967 | :103C6000010084A20F007910382E80AD0900467043 | ||
968 | :103C7000002D4E707C00402E3F493F492C493F4962 | ||
969 | :103C8000402E402E402E7810B229087884A0FDFFE7 | ||
970 | :103C90000A787810A5297E0F7920004FAC787F0F25 | ||
971 | :103CA00084D040006A2E647086A00100C000582EA7 | ||
972 | :103CB00066707800412F647086A00500C000682EF1 | ||
973 | :103CC0007C7068201B68040017680000206884A0CE | ||
974 | :103CD000FF009DC0226867700000A7700000A870F8 | ||
975 | :103CE000B270B6707810012B7E151120040064713B | ||
976 | :103CF00086A1010040008A2E86A10700C000812E07 | ||
977 | :103D00001F70050078008A2E1F7001006770000088 | ||
978 | :103D1000D470DDC0D67078008C2E67700000012052 | ||
979 | :103D20000A4F042084A0FF0086A0180040009C2EAB | ||
980 | :103D30001870167005A0C0009C2EA77001007E06AA | ||
981 | :103D40007810D645A920100039200000781048418D | ||
982 | :103D5000B8A70001F000A32E7F0600707900AD2EF9 | ||
983 | :103D6000E72EC22EC22EB72EE72EE72EE72EB52E57 | ||
984 | :103D70007810B229607005A04000E72E06ADC000A3 | ||
985 | :103D8000C22E006862707800D42E206884D0C000F3 | ||
986 | :103D9000D02E146F78104E420860D4C00A6078109C | ||
987 | :103DA000193E7800D42E5C7060200068026084A602 | ||
988 | :103DB000005F1E681868FCD04000DC2E1A6A176885 | ||
989 | :103DC00000002B680000206884A0FF009DC02268CE | ||
990 | :103DD0007810732084B200044000EF2E2120D0968A | ||
991 | :103DE0007800F12E2120C0957810462F84B200046F | ||
992 | :103DF0004000FB2E2120984F7800FD2E2120584FA7 | ||
993 | :103E00007810462FA920010184B200044000092F38 | ||
994 | :103E10002120D09578000B2F2120C0947810462FB8 | ||
995 | :103E20002084F0000B2F84B200034000182F612083 | ||
996 | :103E3000C05478001A2F6120C07421200200A920EC | ||
997 | :103E400000011061FF814000372F18607E017E0065 | ||
998 | :103E50001120024F0C2202A112207F007F0102A13B | ||
999 | :103E60005000372F1260C000372F1120044F04225A | ||
1000 | :103E7000A5C012201B600000E0AC1000F0001E2F57 | ||
1001 | :103E80002184C0001C2F7F15037000004F700000BC | ||
1002 | :103E90007C007E04042405A04000612F6820006897 | ||
1003 | :103EA0007E001A6A176800002B680000B46884A0BE | ||
1004 | :103EB000005F1E68206884A0FF009DC02268781003 | ||
1005 | :103EC00073207F007800482F7F04232000007C00AF | ||
1006 | :103ED00082A2030050006B2F7810B22900237900D2 | ||
1007 | :103EE0006E2F712FFC2F193082A202004000772F15 | ||
1008 | :103EF0007810B22964706770000083700000790048 | ||
1009 | :103F00007E2F862F862F882FC82F553E862FC82FAD | ||
1010 | :103F1000862F7810B2297477781048417477BCA73F | ||
1011 | :103F2000008F78104E42186005A04000BF2FFCD7CC | ||
1012 | :103F3000C0009B2F2120C09578009D2F2120D09676 | ||
1013 | :103F40000920050011201000781034304000BF2FE8 | ||
1014 | :103F50007E15A9200101FCD7C000AF2F2120C094FD | ||
1015 | :103F60007800B12F2120D0957E0409200500112072 | ||
1016 | :103F70001000781034307F044000BE2F2084F00001 | ||
1017 | :103F8000B12F7F15388784A71F00C0008E2F7800BF | ||
1018 | :103F90000C2A78000C2A747778104E42186005A01D | ||
1019 | :103FA0004000FA2FFCD7C000D62F2120C095780002 | ||
1020 | :103FB000D82F2120D096092005001120200078104C | ||
1021 | :103FC00034304000FA2F7E15A9200101FCD7C00033 | ||
1022 | :103FD000EA2F2120C0947800EC2F2120D0957E0478 | ||
1023 | :103FE0000920050011202000781034307F044000A3 | ||
1024 | :103FF000F92F2084F000EC2F7F1578000C2A002286 | ||
1025 | :104000007900FF2F0230043004307810B2290920E3 | ||
1026 | :104010001200647086A0020040000D3009200E00DE | ||
1027 | :104020001868FCD0400012301A6967700000D47024 | ||
1028 | :10403000DDC0D67078005D43002279001C3021304D | ||
1029 | :1040400004301F307810B2297810D645007086A051 | ||
1030 | :104050000200C000C73D7810363E086084A0EFFB28 | ||
1031 | :104060000A607810B83D4000C73D78000C2A04244F | ||
1032 | :1040700005A040006D306820042D7E00146806A75E | ||
1033 | :1040800040004330202D7F00780035307F00222013 | ||
1034 | :104090001A69176800002B680000B46884A0005FEC | ||
1035 | :1040A0001E68206884A0FF0005A222687810732093 | ||
1036 | :1040B0002120024F1C2419832223106001801260EA | ||
1037 | :1040C000C00064302120044F0424A5C022200860D1 | ||
1038 | :1040D00084A0EFF90A607810222B7810363E7C001D | ||
1039 | :1040E00085A0010078006C300023790074307930AD | ||
1040 | :1040F0007730F9307810B229E47805A0D000AF30DD | ||
1041 | :1041000008327E000120044F0420ECD07F004000E4 | ||
1042 | :104110008A308CA1000378008C308CA10004400010 | ||
1043 | :1041200092301800082A780094302800082A0820C5 | ||
1044 | :1041300084A03000C0009B307800B937EC7884A0B0 | ||
1045 | :10414000030040009930002184A007007900A530C9 | ||
1046 | :10415000D930E330CE30AD30A543A543AD30EE309D | ||
1047 | :104160007810B229007086A00400C000C9306470C5 | ||
1048 | :1041700086A00200C000BF301120020019200000FC | ||
1049 | :104180007800652F647086A006004000B930647026 | ||
1050 | :1041900086A004004000B930E479012003007800D3 | ||
1051 | :1041A00043341868FCD04000D4301B681D007810E0 | ||
1052 | :1041B00018411B7864007C001868FCD04000DF3098 | ||
1053 | :1041C0001B681D0078101841780081431868FCD0E6 | ||
1054 | :1041D0004000E9301B681D00781018411B78F8007A | ||
1055 | :1041E0007C001868FCD04000F4301B681D0078107B | ||
1056 | :1041F00018411B78C8007C0084A50F00C00018314E | ||
1057 | :104200007810A5290070790002310C2A0A310C318E | ||
1058 | :10421000C73DC73DC73D0A310A317810B229781031 | ||
1059 | :10422000363E086084A0EFFB0A607810B83D40007D | ||
1060 | :10423000C73D78000C2AE47805A0D000AF300832E2 | ||
1061 | :104240007E000120044F0420ECD07F004000293183 | ||
1062 | :104250008CA1000378002B318CA100044000313187 | ||
1063 | :104260001800AF30780033312800AF30082084A028 | ||
1064 | :104270003000C0003B311B785B007C00EC7884A0F0 | ||
1065 | :10428000030040003831002184A107007900453146 | ||
1066 | :10429000543158314F314D31A543A5434D319F43E2 | ||
1067 | :1042A0007810B229781020411B7864007C007810C7 | ||
1068 | :1042B000204178008143781020411B78F8007C0071 | ||
1069 | :1042C000781020411B78C8007C00002379006531FC | ||
1070 | :1042D0006A3168316C317810B2297800A8391B68CE | ||
1071 | :1042E0001600A3780000E47984A130004000A839CA | ||
1072 | :1042F000EC7884A003004000A83984A100014000AC | ||
1073 | :10430000703184A10700790082318A315831CE3072 | ||
1074 | :104310005D43A543A5435D439F43781069437C00FB | ||
1075 | :1043200082A20500500093317810B2290023790051 | ||
1076 | :1043300096319931C933D433002279009C31B6319A | ||
1077 | :10434000A331B631A131AC337810B2299B78180073 | ||
1078 | :10435000A87884A0FF0082A02000480007418AA01E | ||
1079 | :104360000400C80007417900B23107410741074105 | ||
1080 | :10437000B1409B781800A87984A180004000C73123 | ||
1081 | :1043800078000741007005A0C000BD311120040075 | ||
1082 | :104390007800933B84A1FF008AA01000C800074169 | ||
1083 | :1043A0007900CF31E131DF31F631FA31CD320741D9 | ||
1084 | :1043B0000741CF3207410741A833A83307410741DE | ||
1085 | :1043C0000741AA337810B229E4D64000EC3101202D | ||
1086 | :1043D0000003008000803A781B78C3007C001868D6 | ||
1087 | :1043E000FCD04000F4311B681D007800E4317800F7 | ||
1088 | :1043F0005D431B681D00780011412069226984A675 | ||
1089 | :104400000018C0005F32206884D0C0006532186890 | ||
1090 | :1044100086A00800C0000B321B680000D4D6400004 | ||
1091 | :10442000CA32BCD640004B3287700000186884A0A6 | ||
1092 | :104430003F008AA00D0050004B328AA00C0086710C | ||
1093 | :1044400001200C000C808A719B786100AA787E158F | ||
1094 | :104450007E137E147E0108328CA1000340003D32A1 | ||
1095 | :104460007E000120044F0420ECD07F004000393250 | ||
1096 | :10447000A1202B0178003F32A1202B0278003F328F | ||
1097 | :10448000A1202B017F019B7800000080AC8080ADD3 | ||
1098 | :104490000B009820A6537F147F137F15386005A06A | ||
1099 | :1044A000C0005A321C6884A00E00400011417810F0 | ||
1100 | :1044B00027412B78083078005C3201803A601B7805 | ||
1101 | :1044C00067007C00E4D6400065321B7879007C00F0 | ||
1102 | :1044D00084A660004000C732DCD64000C732FCD65C | ||
1103 | :1044E000C000713278008832FCC65A7EB66EDC7A23 | ||
1104 | :1044F000D879D0781B80C8007B32008084A03F0030 | ||
1105 | :1045000008A191A20000986B002102A3B268946BED | ||
1106 | :10451000002203A3AE68F4D640008E32F4C65A7E61 | ||
1107 | :10452000B66E007086A00300C0009C327E0078103A | ||
1108 | :10453000D64578103F497F001B7876007C0006A0A6 | ||
1109 | :104540007810444AB06AAC69986C946B002205A15B | ||
1110 | :104550004000AB32002222A400211BA3AA6CD27C13 | ||
1111 | :10456000DA7CA66BD67BDE7B002305A4C000BB32C1 | ||
1112 | :10457000F5C65A7EB66E1B7876007C001B787600F6 | ||
1113 | :10458000002215A1C000C43278103F497C00781089 | ||
1114 | :1045900077497C001B7879007C001B7867007C00E1 | ||
1115 | :1045A0007810B22978001B332069C4D14000E4326E | ||
1116 | :1045B000C4C122697E0C587060200060E4C00260B3 | ||
1117 | :1045C000046084A0F5FF06607F0C78000F33CCD127 | ||
1118 | :1045D00040000F33CCC122697E0C5870602000600F | ||
1119 | :1045E000ECC002600460A4C006600820482C7F0C68 | ||
1120 | :1045F0009CD140000F3378104A4278103E3FFF882C | ||
1121 | :1046000040000F339B7860000028AA78587E95C63A | ||
1122 | :104610005A7ED4D6C0000C331B7864007C001B7813 | ||
1123 | :1046200078007C00587ED4D6C00016331B78670013 | ||
1124 | :104630007C001B7879007C0078000C411920000078 | ||
1125 | :1046400090798CA10700C0002933206884A0000164 | ||
1126 | :1046500040001933092008009B781000A87894A026 | ||
1127 | :10466000FF0086A20100C00045330023A87C00A4FF | ||
1128 | :10467000182002A140003D3348003D3378003F330D | ||
1129 | :104680007800D132A824A87AF0003F3378002B3389 | ||
1130 | :1046900084A2F00086A02000C000993318831883FC | ||
1131 | :1046A000002302A14000553348005533780096336B | ||
1132 | :1046B00086A22300400019331C6884A0F1FF1E6805 | ||
1133 | :1046C000587E84A6F1FFA5C030205A7E0860A5C0A0 | ||
1134 | :1046D0000A607E0C5870602004600820482C7F0C13 | ||
1135 | :1046E000A4D14000763378104A4278105E407800BA | ||
1136 | :1046F00084337E0C5870602004600820482C7F0CA6 | ||
1137 | :104700009CD140000F3378104A4278103E3FFF881A | ||
1138 | :1047100040000F339B7860000028AA7895C65A7E27 | ||
1139 | :10472000D4D6C00093331B7864007C001B787800DB | ||
1140 | :104730007C00A87A78002B331883002302A1400064 | ||
1141 | :10474000A2334800A23378002B3384A28000C0003B | ||
1142 | :10475000114178000C4178001141780007415870F0 | ||
1143 | :104760004DA09B781800A87884A0FF008EA00100BF | ||
1144 | :104770004000B9337810B229A87A94A2FF00A87833 | ||
1145 | :1047800084A0FF008AA00400C80007417900C53357 | ||
1146 | :1047900007418F3E0741064082A20000C000CF3390 | ||
1147 | :1047A0007810B229781018411B7878007C0082A21A | ||
1148 | :1047B0000300C000DA337810B229FCD4C000FA3309 | ||
1149 | :1047C000647005A04000E3337810B229146F767747 | ||
1150 | :1047D000BCA7008F78104E42086085A021000A60B7 | ||
1151 | :1047E000388784A71F00C000E73378101C4167702A | ||
1152 | :1047F00002001F7009007800FC3378102B411B78F1 | ||
1153 | :1048000078007C0082A20400500005347810B229A0 | ||
1154 | :104810000023790008340B34CB350E3686A2030012 | ||
1155 | :10482000400043340072D87CDC7DD07FD471BCD191 | ||
1156 | :10483000C0003B34B4D140003B34687884A0FF0012 | ||
1157 | :10484000C0003B3482A20200C8003B347E0D3B789E | ||
1158 | :1048500000831B784C00BC706DA0B4685A789468D3 | ||
1159 | :10486000D678DE789868D278DA78B4C1D6710370D9 | ||
1160 | :1048700030007F0D01200000780047343B780013A2 | ||
1161 | :104880001B784A0001200000780047340072D87C71 | ||
1162 | :10489000DC7DD07F4A70A068ECD040004F340860C7 | ||
1163 | :1048A0008DC00A6084A20F0079005334AB356034A8 | ||
1164 | :1048B0005D3411379D370C2A5B345B347810B22994 | ||
1165 | :1048C0000860D4C00A60E4D640006834487086A00E | ||
1166 | :1048D0001400C00088347810D645092000001868FC | ||
1167 | :1048E000FCD040007134487086A01400400082342F | ||
1168 | :1048F000186886A00800C000633558789CD0400036 | ||
1169 | :1049000063352068ACD0400063351B681400092073 | ||
1170 | :1049100002007800C73468788CA0FF004000C734DC | ||
1171 | :1049200086A10800C0009E340860A4C00A60781008 | ||
1172 | :10493000B83D4000C7347810363E7810D645780030 | ||
1173 | :10494000AF3486A12800C000C734186005A040001D | ||
1174 | :1049500091340180400091340180400091341E6008 | ||
1175 | :1049600078009134206884D040000C2A84C02268EA | ||
1176 | :104970007810132B5C707E0C6020006802607F0C46 | ||
1177 | :104980000460026805A0002DC000C4340260066007 | ||
1178 | :1049900078000C2A7E01FF81C0001135007086A0CE | ||
1179 | :1049A000300040001135D471BCD1C0001135B4D1F4 | ||
1180 | :1049B000C000F834607005A0C0001135A47086A056 | ||
1181 | :1049C000010040001135037000007E047E057E0763 | ||
1182 | :1049D0007E067E0C7E0D7810352A7F0D7F0C7F06BB | ||
1183 | :1049E0007F077F057F04D471B4D1C00011350370F7 | ||
1184 | :1049F0004000780011357810B043C00011351B78A5 | ||
1185 | :104A00005B007E0DBC706DA0B4685A789468D6784F | ||
1186 | :104A1000DE789868D278DA78B4C1D6710370300045 | ||
1187 | :104A200008788DC00A787F0D781048367F01FF81A5 | ||
1188 | :104A30004000633584A600DF1E682B680000146FF9 | ||
1189 | :104A400086A10200C0006435186886A01400C0006A | ||
1190 | :104A50002D350820E4D640002D3568788CA0FF0065 | ||
1191 | :104A60007810012B7810222B2068DCD0C000643530 | ||
1192 | :104A7000178794A20F0013821382138284B200035B | ||
1193 | :104A80004000433590A2C0537800453590A2405471 | ||
1194 | :104A900090A200001C22C4D3C0004D3578005335CD | ||
1195 | :104AA0001082042285A0180012201182D4D3400065 | ||
1196 | :104AB0005E35A068C4D0C0005E357810C23678007C | ||
1197 | :104AC0000C2A08608DC00A60780064352A6916696E | ||
1198 | :104AD0001868FCD040006B3548701A688CA600DF5F | ||
1199 | :104AE0001E691064FF84400080350920024F0421B4 | ||
1200 | :104AF00001800A2021841264C00080352120044FE7 | ||
1201 | :104B00000424A5C02220186005A04000883501803B | ||
1202 | :104B10001A60C0008B350860A4C00A60206884D089 | ||
1203 | :104B2000C0009735006805A0C0009435026006609B | ||
1204 | :104B300078009B355C706020006802606120004F47 | ||
1205 | :104B400087680301082D6B200000686005A06A617A | ||
1206 | :104B50004000AA35022D7800AB356E61007286A246 | ||
1207 | :104B600030004000BB3586A24000C0000C2A037014 | ||
1208 | :104B700002004C706820C46860207C000370020052 | ||
1209 | :104B8000BC706DA0BC684270B87065A0C0685A70F7 | ||
1210 | :104B9000002D4E7080AD090046707C0082A204009A | ||
1211 | :104BA0004800D1357810B22900227900D435D835A3 | ||
1212 | :104BB000E935F635E93586A500134000E93586A5C7 | ||
1213 | :104BC0000083C000CF3503700000186001801A60B8 | ||
1214 | :104BD000086084A0EFFB0A60007086A0050040001A | ||
1215 | :104BE000F335781018411B7878007C001B78790029 | ||
1216 | :104BF0007C0090780780018084A0070080A01800C6 | ||
1217 | :104C00009A78A8798CA1FF0086A1030040000B369A | ||
1218 | :104C100086A1000040000B36780007411B78790020 | ||
1219 | :104C20007C00206895C02268FF82C000183678108A | ||
1220 | :104C3000184178001F36118240001D367810B229C5 | ||
1221 | :104C400078102B411B7878007C007810D3433078A3 | ||
1222 | :104C500084A0C000C00045367E0108327E000120DD | ||
1223 | :104C6000044F0420ECD07F00400037368CA10003B5 | ||
1224 | :104C7000780039368CA100047F01400040361800CE | ||
1225 | :104C8000453678004236280045361A7906A07C0061 | ||
1226 | :104C900085A001007C0084A66000C00052362F6809 | ||
1227 | :104CA0000000336800007800C136DCD6C0006A36E8 | ||
1228 | :104CB000B468DCD0C0006A369869946A2E69326A9A | ||
1229 | :104CC000487005A0C0006736002205A14000D64507 | ||
1230 | :104CD0004B7015007800D6457C00ACD6400090366D | ||
1231 | :104CE000F4D6400076362F68000033680000780064 | ||
1232 | :104CF000D645B46884A0004035A6F4D6C00070360E | ||
1233 | :104D0000487005A0C00083364B701500DCD6C0008B | ||
1234 | :104D10008C36B468DCD040008C36A86CA46D2E6C48 | ||
1235 | :104D2000326D7800D645F4D6400099362F680000E1 | ||
1236 | :104D3000336800007800D645B46884A0004835A6E2 | ||
1237 | :104D4000F4D6C0009336487005A0C000A6364B705C | ||
1238 | :104D50001500082410250027FB80C800AD36008010 | ||
1239 | :104D600084A03F0008A191A200002E69326A0021B0 | ||
1240 | :104D700005A2C000BA367800D645007086A00600AD | ||
1241 | :104D80004000C1367800D6457C0046690860CDC039 | ||
1242 | :104D9000CCD34000C9368DC00A6018683A681B68D9 | ||
1243 | :104DA00006008F68000093680000306A2C693E6A34 | ||
1244 | :104DB00042692F6803003368000037682000976855 | ||
1245 | :104DC00000009B68200000707900E3360C2AF5365D | ||
1246 | :104DD000ED36EB36EB36EB36EB36EB367810B229A8 | ||
1247 | :104DE000206884D0C000F5367810193E7800FB3674 | ||
1248 | :104DF0005C70502C602000680260602A08328CA130 | ||
1249 | :104E00000003400004372120584F78000637212046 | ||
1250 | :104E1000984F042405A040000D3720207800063765 | ||
1251 | :104E2000222D6B2000007C007810203E7810363E4A | ||
1252 | :104E30000860CCC00A602B6800009B780E00146FDD | ||
1253 | :104E400038691A694469166908328CA10003400068 | ||
1254 | :104E50002A370920000078002C370920010078103B | ||
1255 | :104E6000814ADCD6400034371C69EDC11E691868E0 | ||
1256 | :104E7000FCD04000433768788CA0FF0040004137E9 | ||
1257 | :104E80001B681E00780043371B68000084B20003D3 | ||
1258 | :104E9000C0004B372120984F78004D372120584FC4 | ||
1259 | :104EA000006822203C6A4069326A2E69C06860202E | ||
1260 | :104EB0000060A4D040008D3741202100492005002A | ||
1261 | :104EC000512020007E0D7E0F7E157E147920004F2C | ||
1262 | :104ED0007810461E7F147F157F0FCC70102009209C | ||
1263 | :104EE00001017E0204226DA040007D37146806A7F0 | ||
1264 | :104EF00040007A370068780070372068D5C0226893 | ||
1265 | :104F00007F0210820981C0006E377F0D6770030039 | ||
1266 | :104F10007F700000767783700F00D471DCC1D6718A | ||
1267 | :104F2000186886A00200C0009937176800002B6837 | ||
1268 | :104F300000001C68ECC01E687810732078000C2AF2 | ||
1269 | :104F4000D87CDC7DD07F781048362B6800009B78B9 | ||
1270 | :104F50000E00146F7810D7438CA0FF0016691868F4 | ||
1271 | :104F6000FCD04000B23748701A688CA600DF1E697A | ||
1272 | :104F70006770000078000C2A007005A0C000BF37E1 | ||
1273 | :104F800078000C2A06A07810D6452069ACD1C00064 | ||
1274 | :104F9000C8371B6814008CA600DF1E692B68000050 | ||
1275 | :104FA000206884A0FF00226800707900D4370C2AA2 | ||
1276 | :104FB000DE37DE37E137E137E137DC37DC377810D1 | ||
1277 | :104FC000B2291868780043340860A4C00A601768E2 | ||
1278 | :104FD00000007800DE3D00237900EB37EE37F03734 | ||
1279 | :104FE00060387810B229FCD6C000473800700DA098 | ||
1280 | :104FF0007900F7370C2A0138013831380138443844 | ||
1281 | :10500000FF37FF377810B22984A66000400031389E | ||
1282 | :1050100086A06000C0002E38ACC6F4C6EDC65A7E2D | ||
1283 | :10502000B66E1C68ACC01E6886A102004000203825 | ||
1284 | :105030007810D645AC69B06815A1400020387810CA | ||
1285 | :1050400077497800223878103F491B787900D4716D | ||
1286 | :10505000B4D1C000082AA47086A00100C000522A62 | ||
1287 | :105060007C00ECD640000B381868FCD04000443877 | ||
1288 | :10507000F4D6C0003E381B6815001B787900780014 | ||
1289 | :10508000082A1B6807002F680000336800007810AA | ||
1290 | :1050900069437C00FCC65A7EDC7AD879D0781B80C4 | ||
1291 | :1050A000C8005038008084A03F0008A191A20000F1 | ||
1292 | :1050B000986B002102A3B268946B002203A3AE6830 | ||
1293 | :1050C0001B7879007C007810B229002379006538BC | ||
1294 | :1050D0006A388F38EF387810B229007079006D384F | ||
1295 | :1050E000753877388038753875387538753875384B | ||
1296 | :1050F0007810B229AC69B06815A1400080387810EA | ||
1297 | :1051000077497800823878103F491C68B4C01E681F | ||
1298 | :10511000D470B4D0C000082AA47086A00100C000DA | ||
1299 | :10512000522A7C00FCD6C000DF3800700DA0790048 | ||
1300 | :1051300096380C2AA638A038D638A638DC389E38DF | ||
1301 | :105140009E387810B2299468D678DE789868D2783C | ||
1302 | :10515000DA7884A660004000D63886A06000C000DF | ||
1303 | :10516000D338B4A6BFBFEDC65A7EB66E86A1020084 | ||
1304 | :105170004000C2387810D645AC69B06815A140002F | ||
1305 | :10518000C238781077497800C43878103F491B78C6 | ||
1306 | :1051900079001C68B4C01E68D471B4D1C000082A5C | ||
1307 | :1051A000A47086A00100C000522A7C00ECD640000A | ||
1308 | :1051B000B0381868FCD04000DC381B6807001B784A | ||
1309 | :1051C000F9007C00FCC65A7EDC7AD879986B002105 | ||
1310 | :1051D00002A3B268946B002203A3AE68D2791B7855 | ||
1311 | :1051E00079007C00DCD64000F8382B7809301B7839 | ||
1312 | :1051F00079007800082A8478ACC08678E47884A0A6 | ||
1313 | :105200000800C0000B3984A4000240000539F5C62F | ||
1314 | :10521000DDC65A7E1B7879007800082A206895C080 | ||
1315 | :1052200022687810E242DDC6781018411B787800B9 | ||
1316 | :105230007800082A002379001A391D391F392139CD | ||
1317 | :105240007810B22978001141D4D6C0005C39E479D5 | ||
1318 | :10525000ACD140002F39EC7884A0030040002F39F6 | ||
1319 | :105260002B7809309B786000AB78000084A6FBFFA8 | ||
1320 | :105270005A78E479ACD140003F39EC7884A003003F | ||
1321 | :10528000C00058390120044F0420E4D0C000543934 | ||
1322 | :105290002068C4D0400054397E0C587060200460EF | ||
1323 | :1052A0009DC00660086084A0FF000A607F0C01209A | ||
1324 | :1052B00014007800433484A1070079009239907A71 | ||
1325 | :1052C00094A207009B786000A879FF814000903984 | ||
1326 | :1052D0009B781000A87B84A30100C0008339A87BC1 | ||
1327 | :1052E000A87B86A30100C00076390920F7FF78006B | ||
1328 | :1052F0007C3986A30300C00083390920EFFF7E0CB0 | ||
1329 | :1053000058706020046004A106607F0C9B786000E8 | ||
1330 | :10531000AB78000084A6FBFF5A782B78093020690F | ||
1331 | :105320008CA1FFFC226978005D43D930E3309C39C1 | ||
1332 | :10533000A2399A399A395D435D437810B2292069C0 | ||
1333 | :105340008CA1FFFC22697800634320698CA1FFFCDB | ||
1334 | :10535000226978005D43E47984A130004000B239CD | ||
1335 | :10536000EC7884A00300C000E639007086A0040039 | ||
1336 | :10537000C000CC39647086A00200C000C239112080 | ||
1337 | :105380000200192000007800652F647086A00600D6 | ||
1338 | :105390004000BC39647086A004004000BC39007035 | ||
1339 | :1053A00086A000004000082A206984A12004400053 | ||
1340 | :1053B000DB39D4C1226918687800433418688EA09C | ||
1341 | :1053C00002004000E439FDC01A6801201400780092 | ||
1342 | :1053D000433484A107007900EA395D435D43F23923 | ||
1343 | :1053E0005D43A543A5435D435D43BCD64000343ACD | ||
1344 | :1053F0008471FF814000343A82A10D00D000013A4F | ||
1345 | :10540000877000007800063A82A10C00867009209F | ||
1346 | :105410000C009B786100AA797E157E137E1488703B | ||
1347 | :10542000148110A28A7280A00B0000AD982084B273 | ||
1348 | :1054300000034000283A7E000120044F0420ECD0F5 | ||
1349 | :105440007F004000243AA1202B0178002A3AA120B5 | ||
1350 | :105450002B0278002A3AA1202B019B7800000881BA | ||
1351 | :10546000AC81A6537F147F137F1578006343D4D695 | ||
1352 | :10547000C000883A206884D0400063438CA6600056 | ||
1353 | :1054800084A660004000463A86A06000C000463A0C | ||
1354 | :10549000F5C194C15A79B6699B786000AB78000079 | ||
1355 | :1054A0009B7861001868FDC01A68AA7808800C8192 | ||
1356 | :1054B00040004F3E8CA1F800C0004F3E7E157E1389 | ||
1357 | :1054C0007E147E0108328CA100034000743A7E00F5 | ||
1358 | :1054D0000120044F0420ECD07F004000703AA1204E | ||
1359 | :1054E0002B017800763AA1202B027800763AA12091 | ||
1360 | :1054F0002B017F019B7800000080AC8080AD0B0009 | ||
1361 | :105500009820A6537F147F137F151468FCC0078072 | ||
1362 | :105510008278780063431868FCD040008E3A1B689C | ||
1363 | :1055200008002068ADC02268781020411B78EA008E | ||
1364 | :105530007C0000237900993A9E3A763B9C3A781099 | ||
1365 | :10554000B229D87CDC7DD07FFF82C000C73A0072D0 | ||
1366 | :1055500086A2030040001034D471BCD1C000CA3A06 | ||
1367 | :10556000B4D14000CA3A7E0D3B7800881B784C00CD | ||
1368 | :10557000BC706DA0B468A5C05A789468D678DE78FF | ||
1369 | :105580009868D278DA78B4C1D671037030007F0D94 | ||
1370 | :105590007800CE3A00727800CE3A3B7800181B783B | ||
1371 | :1055A0004A0084A20F007900D23A613B103BDC3AFA | ||
1372 | :1055B0003F34DA3A613BDA3ADA3A7810B2291C68B9 | ||
1373 | :1055C000ECD04000E33A08608DC00A60206985C1D4 | ||
1374 | :1055D00022690068066005A0C000EC3A026008601D | ||
1375 | :1055E000D4C00A601C6884A00E00C000003B84B2D6 | ||
1376 | :1055F00000034000FC3A0920C0957800053B0920D3 | ||
1377 | :10560000D0967800053B3070BA684071CC7008A124 | ||
1378 | :10561000042102680A2D5E71DCD6C000103BFCC676 | ||
1379 | :10562000B66E7800613BB66E84A66000C0001A3B7F | ||
1380 | :1056300084A6FF7FB6687800613BDCD6C000283BBB | ||
1381 | :1056400084A6FF7FB6689468A6689868AA687810F0 | ||
1382 | :10565000D6457800613BACD64000343B06A07810BC | ||
1383 | :10566000D64508241025AA69A66A7800443B082478 | ||
1384 | :10567000102500271B80C8003B3B008084A03F0012 | ||
1385 | :1056800008A191A20000AA69A66A7810D645FCD6A6 | ||
1386 | :105690004000613B84A6FF7FB66810250824ACD685 | ||
1387 | :1056A000C000593B00271B80C800543B008084A0E9 | ||
1388 | :1056B0003F0008A191A20000986B002102A3B268EC | ||
1389 | :1056C000946B002203A3AE68007086A03000C00077 | ||
1390 | :1056D0000C2A03700200BC706DA0BC684270B870E8 | ||
1391 | :1056E00065A0C0685A70002D4E7080AD09004670EC | ||
1392 | :1056F0007C0086A50088C000833B03700000186012 | ||
1393 | :1057000001801A60086084A0EFFB0A6078001141F4 | ||
1394 | :105710004770000082A2060050008D3B7810B2292D | ||
1395 | :1057200000237900903B933BA53BB13B00227900DD | ||
1396 | :10573000963B9C3B11419E3B9C3BEB3B403C781095 | ||
1397 | :10574000B229807A94A2000F7810CA3C78000741F1 | ||
1398 | :105750007810C23B7900A93B1141AF3BAF3BEB3B1B | ||
1399 | :10576000AF3B11417810B2297810C23B7900B53BAC | ||
1400 | :10577000BD3BBB3BBB3BBD3BBB3BBD3B7810B229FC | ||
1401 | :1057800078102B411B7878007C00007086A0020006 | ||
1402 | :10579000C000D33B7810363E7800CD3B7810D6451C | ||
1403 | :1057A000086084A0EFFB0A607800D83B007086A0F8 | ||
1404 | :1057B00003004000CB3B0370050084B200034000AF | ||
1405 | :1057C000E23B0120E0967800E43B0120129768203C | ||
1406 | :1057D0004E7080AD0900467000227C00007086A0EB | ||
1407 | :1057E0000200C000FD3BD470B5C0D670002CBA706A | ||
1408 | :1057F000002DBE707800023C7810D6457800023C3F | ||
1409 | :10580000007086A003004000F93B03700100807A1D | ||
1410 | :1058100094A2000F9B781800A87C84A41F0015A2F6 | ||
1411 | :105820006920C09584B20003C000163CFDC2692007 | ||
1412 | :10583000D096042D082D5E716DA04000233C1468A5 | ||
1413 | :1058400006A24000253C00687800173C7810CA3C4E | ||
1414 | :10585000B46E5A7E206984A1000C4000F43C647050 | ||
1415 | :1058600086A00600C000373C747006A2C000373C1A | ||
1416 | :1058700066707E701B680500ADC1D4C122697810C6 | ||
1417 | :1058800020417800F43C007286A20200C000523C25 | ||
1418 | :10589000D470B5C0D670002CBA70002DBE707800E0 | ||
1419 | :1058A000563C7810D6457800563C86A2030040004E | ||
1420 | :1058B0004E3C03700100807A94A2000F9B78180080 | ||
1421 | :1058C000A87C84A41F0015A284B20003C000663C1B | ||
1422 | :1058D000FDC2A879A8798CA1FF001821CC7068A11D | ||
1423 | :1058E000042D082D5E716DA040007A3C146806A25C | ||
1424 | :1058F0004000A33C006878006E3C0370050084B251 | ||
1425 | :1059000000034000843C0120E0967800863C0120A2 | ||
1426 | :10591000129768204E707E15A920320003200000E7 | ||
1427 | :105920000080F0008B3C7F1584B200034000983C5F | ||
1428 | :10593000FCC27800993CFDC2166A80AD0900467031 | ||
1429 | :10594000B76800072368000827680300B46E206961 | ||
1430 | :1059500084A1000C4000F43CDCD04000BF3C6470EB | ||
1431 | :1059600086A00400C000BB3C747006A2C000BB3C13 | ||
1432 | :10597000787006A3C000BB3C66707E70781027412B | ||
1433 | :105980007800F43C1B680500ADC1D4C122697810D1 | ||
1434 | :1059900020417F7000007800F43C0370050084B261 | ||
1435 | :1059A00000034000D43C0120E0967800D63C012062 | ||
1436 | :1059B000129768204E707E15A92032000320000047 | ||
1437 | :1059C0000080F000DB3C7F1584B200034000E83C1F | ||
1438 | :1059D000FCC27800E93CFDC2166A80AD0900467041 | ||
1439 | :1059E000B768000723680008276803007C00ECC63E | ||
1440 | :1059F000ACA660004000463D986B946CAC69B06802 | ||
1441 | :105A000005A1C000213DD27BDA7BD67CDE7C86A559 | ||
1442 | :105A1000600040004B3DF4D6C0000C3DEDC6B4A67E | ||
1443 | :105A2000FFB75A7E092079009CD64000193D092015 | ||
1444 | :105A300078001920000020231A79ECD64000563D4A | ||
1445 | :105A400078103F497800563DB0681AA3002123A47E | ||
1446 | :105A5000002405A340004D3DD27BDA7BD67CDE7C62 | ||
1447 | :105A6000B068F4D6C000323DEDC6F4C65A7E1120AF | ||
1448 | :105A700079009CD640003E3D11207800192000009E | ||
1449 | :105A800020231A7AECD64000563D781077497800EA | ||
1450 | :105A9000563D19200000202378004D3DB4A6FFB7E5 | ||
1451 | :105AA0005A7E092079009CD64000553D0920780097 | ||
1452 | :105AB0001A79C0685A70002D4E70C4686020D47185 | ||
1453 | :105AC0000120014F0420C4D0C000AB3DD8702DA0F0 | ||
1454 | :105AD0004000843DBCD140009E3D807A94A2000FDE | ||
1455 | :105AE000DC7006A24000753DE07804A5C000AB3D27 | ||
1456 | :105AF000DA70BCC1D6717800AB3D312001002C8535 | ||
1457 | :105B00004800833D3386108278007C3D7C00E07D38 | ||
1458 | :105B100094A500FF4000913D112008002F857810CA | ||
1459 | :105B20007A3D37867800933D78107A3D17828078E9 | ||
1460 | :105B300084A0000F06A24000AB3DDE72DA7678004A | ||
1461 | :105B4000AB3D807A94A2000FDC7036A240009B3DF2 | ||
1462 | :105B5000E07834A540009B3DBDC1D671B4D1C000F2 | ||
1463 | :105B6000082A002305A44000082AA47086A001008A | ||
1464 | :105B7000C000522A7C00206005A04000C63D018084 | ||
1465 | :105B80002260086085A008000A600F7000012C7078 | ||
1466 | :105B900026607C0006A07810D645007086A0020022 | ||
1467 | :105BA0004000D43D647086A00500C000DE3D2B6837 | ||
1468 | :105BB0000000176800001B680100236840001F6890 | ||
1469 | :105BC0000001007084A00F007900E33D0C2AF33D32 | ||
1470 | :105BD000ED3D153EFD3D0C2AEB3DEB3D7810B22925 | ||
1471 | :105BE0007810203E7810193E7800F93D7810203E5C | ||
1472 | :105BF0005C706020006802607810732078000C2AC6 | ||
1473 | :105C0000647067700000837000007900043E113EEC | ||
1474 | :105C1000113E0C3E0C3E0C3E113E0C3E113ED47724 | ||
1475 | :105C2000DDC7D67779007E2F6770000078000C2AD8 | ||
1476 | :105C30001B68000078001137006805A0C0001E3EF8 | ||
1477 | :105C4000026006607C001064FF844000323E092040 | ||
1478 | :105C5000024F042101800A2021841264C000323ED8 | ||
1479 | :105C60002120044F0424A5C022200860A4C00A609B | ||
1480 | :105C70007C00186005A040003C3E01801A607C005A | ||
1481 | :105C80007810D3431B68180078007D3E7810D3430A | ||
1482 | :105C90001B68190078007D3E7810D3431B681A00FA | ||
1483 | :105CA00078007D3E7810D3431B68030078007D3E6A | ||
1484 | :105CB000747778104E4278718CA1FF00103294A254 | ||
1485 | :105CC00000034000643EE8A1C0947800663EE8A16D | ||
1486 | :105CD000D095042D082D682005A0C0006F3E7E7071 | ||
1487 | :105CE00078000C2A1468747206A24000773E00689F | ||
1488 | :105CF0007800673E00680A201B6805007F7000007E | ||
1489 | :105D00007810203E206884D0C000853E7810193E6F | ||
1490 | :105D10007810363E1F68000023682000781073203A | ||
1491 | :105D200078000C2A82A20300C0000741A87DACA520 | ||
1492 | :105D3000FF005A7EA87EB4A6FF002069BDC122697B | ||
1493 | :105D4000C4D14000EA3EC4C12269B4A6FF004000AD | ||
1494 | :105D5000D73E82A60C004800AE3E4000AE3E312049 | ||
1495 | :105D60000C00002586A00A004000B53E2B852B853F | ||
1496 | :105D70007810E0414000BD3E7810BC3F7800E03E26 | ||
1497 | :105D800078109B417E0C6029046084A0F5FF0660BA | ||
1498 | :105D90007810F23F7F0C2069C5C12269587E95C6F4 | ||
1499 | :105DA0005A7ED4D6C000D43E1B7864007C001B7899 | ||
1500 | :105DB00078007C007E0C6029046084A0F5FF0660FA | ||
1501 | :105DC0007810F23F7F0C587ED4D6C000E73E1B7897 | ||
1502 | :105DD00067007C001B7879007C007E0C5870602086 | ||
1503 | :105DE0000061E4D14000333F0862178294A2FF00B3 | ||
1504 | :105DF00082A20C004800FD3E4000FD3E11200C0038 | ||
1505 | :105E0000002602A2C800023F3022086294A2FF00CE | ||
1506 | :105E10000120054F0420E4D0C000173FEC78E4D007 | ||
1507 | :105E20004000173F82A20A00C8001D3F11200A004F | ||
1508 | :105E300078001D3F82A20C00C8001D3F11200C00FD | ||
1509 | :105E4000002202A5C800223F282278109F41002589 | ||
1510 | :105E500086A00A0040002B3F2B852B857810E0415F | ||
1511 | :105E60004000333F7810BC3F7800373F78109B41AB | ||
1512 | :105E70007810F23F587895C05A787F0C1B787800DC | ||
1513 | :105E80007C007E0C60290060E4D0C000583FB4D094 | ||
1514 | :105E9000C000523F106084A00F00C000523F046158 | ||
1515 | :105EA0008CA1F5FF06617F0C7C00112032001920C7 | ||
1516 | :105EB00000007800833FA068CCD0C000523F086249 | ||
1517 | :105EC00094A2FF000120054F0420E4D0C000713FE0 | ||
1518 | :105ED000EC78E4D04000713F82A20B00C800713F13 | ||
1519 | :105EE00011200A007800773F82A20C00C800773F9B | ||
1520 | :105EF00011200C0008631F839CA3FF0082A30C00E9 | ||
1521 | :105F00004800833F4000833F19200C00AB7801001C | ||
1522 | :105F1000AB780300AB780100AA7AAA7BC0A8050081 | ||
1523 | :105F20002068C5C02268D470B4D040009F3FB4C080 | ||
1524 | :105F3000D670B87065A0086084A0EFFB0A60186096 | ||
1525 | :105F400001801A607F0C7C007E0C602904618CA1AA | ||
1526 | :105F5000F5FF066111203200192000007800AD3FE6 | ||
1527 | :105F6000AB780100AB780300AB780100AA7AAA7B7A | ||
1528 | :105F7000C0A805002068C5C022687F0C7C007E0C8C | ||
1529 | :105F80005871602118208CA020004000C53FACC093 | ||
1530 | :105F9000082084A0F0FF35A6867E18609A78AE7E31 | ||
1531 | :105FA0001266A47884A0F0FF8CA10F0005A1F4C0B4 | ||
1532 | :105FB0009CA320004000DB3F85A00040FCC0B4D083 | ||
1533 | :105FC000C000E03FFDC0A67816608A78B4A60F0036 | ||
1534 | :105FD00037860482048084A0FF0005A60E6004605A | ||
1535 | :105FE00084A0F5FF06607F0C7C007E0C587060205A | ||
1536 | :105FF00018609A78A47884A0F0FFA678126084785C | ||
1537 | :1060000084A0F0FF86780C6084A0FF000E607F0CF7 | ||
1538 | :106010007C0082A20200C0000741A87A2069BDC1AD | ||
1539 | :106020002269CCD140004140CCC1226994A2FF003A | ||
1540 | :1060300082A20200C8000741781094407810F23F15 | ||
1541 | :1060400080A901000C2078104A4278103E3FFF885A | ||
1542 | :10605000400037409B7860000028AA78587E95C69B | ||
1543 | :106060005A7ED4D6C00034401B7864007C001B7874 | ||
1544 | :1060700078007C00587ED4D6C0003E401B78670074 | ||
1545 | :106080007C001B7879007C0082A20200C800494095 | ||
1546 | :1060900084A2010040005240587188A100000C21E8 | ||
1547 | :1060A000ECD1C00052401120000078107C417810E3 | ||
1548 | :1060B00094407810F23F587895C05A781B78780051 | ||
1549 | :1060C0007C007E0C7E026029006011200100ECD073 | ||
1550 | :1060D000C0007540BCD0C00073401460B4D0C00094 | ||
1551 | :1060E0007340A4C1066106A0780091401120000011 | ||
1552 | :1060F000AB780100AB780200AB780300AA7AC0A8A5 | ||
1553 | :106100000400D470B4D040008D40B4C0D670B870D4 | ||
1554 | :1061100065A0086084A0EFFB0A60186001801A6027 | ||
1555 | :10612000206885A0000222687F027F0C7C007E0C24 | ||
1556 | :1061300058706020FF8240009C4011204000186091 | ||
1557 | :1061400080A002009A78A47884A0BFFF05A2FCC0BA | ||
1558 | :10615000B4D0C000A940FDC0A67816608A7804605B | ||
1559 | :10616000A4C006607F0C7C007E00007086A0030047 | ||
1560 | :106170004000BA407F007800BD407F0078000441B5 | ||
1561 | :10618000ACD640000441887884A04000400004411F | ||
1562 | :10619000B87B84A33F001B83C800CC40008005A0CF | ||
1563 | :1061A0004000E1401B83C800D54001804000014110 | ||
1564 | :1061B000F4D64000E140B8781B80C800DD40008084 | ||
1565 | :1061C00084A03F00C0000141F4C65A7ED879DC7A31 | ||
1566 | :1061D0000120010008A1C800EC4091A20000D27982 | ||
1567 | :1061E000DA79D67ADE7A7810444A1B78760084B25F | ||
1568 | :1061F00000034000FC40012000007800FE40012028 | ||
1569 | :1062000001007810CE487C001B7876007C001B785B | ||
1570 | :1062100079007C0078102F411B7878007C00781082 | ||
1571 | :1062200018411B7878007C00276802007810204114 | ||
1572 | :106230001B7878007C0001200500780031410120A6 | ||
1573 | :106240000C00780031412068D5C02268012006008A | ||
1574 | :106250007800314101200D00780031410120090012 | ||
1575 | :1062600078003141012007009B787E00AA789DC606 | ||
1576 | :106270005A7ED470B4D040004741B4C0D6707E0C72 | ||
1577 | :10628000B87065A0086084A0EFFB0A601860018008 | ||
1578 | :106290001A607F0C7C007E073F87BCA70F003B87FE | ||
1579 | :1062A0003B8703877E018CB2000340005841E0A089 | ||
1580 | :1062B000C05378005A41E0A040547F01B8A72000A5 | ||
1581 | :1062C0009A7FA47984A10F0040006A4184A1F0FF65 | ||
1582 | :1062D000A678126004609DC00660388738879A7F70 | ||
1583 | :1062E000A47984A1400040007A4184A1BFFFFDC091 | ||
1584 | :1062F000A67816600460A5C006607F077C009B78C6 | ||
1585 | :106300001000AB780100AB780200AB780300AA7AEA | ||
1586 | :106310009B786000AB780400D470B4D040009A4100 | ||
1587 | :10632000B4C0D6707E0CB87065A0086084A0EFFB86 | ||
1588 | :106330000A60186001801A607F0C7C003120000028 | ||
1589 | :10634000292032009B781000AB780100AB78030065 | ||
1590 | :10635000AB780100AA7DAA7E9B786000AB7805002F | ||
1591 | :10636000D470B4D04000BE41B4C0D6707E0CB870BA | ||
1592 | :1063700065A0086084A0EFFB0A60186001801A60C5 | ||
1593 | :106380007F0C7C007E15078084A0FF0003800380C3 | ||
1594 | :1063900080A020009A78A4798CA1F0FF21203342BC | ||
1595 | :1063A00019201100A9200E0011203200042484A01D | ||
1596 | :1063B000F0FF06A14000DE412084002310A2F0007F | ||
1597 | :1063C000D3417F157C007E150120054F0420E4D0C9 | ||
1598 | :1063D000C000114221204142A920090011202800BB | ||
1599 | :1063E00082A5190040002742480027422084A99531 | ||
1600 | :1063F0001120320082A53200400027424800274287 | ||
1601 | :106400002084A99519200A0011206400002202A509 | ||
1602 | :1064100040002742480027422084002310A2F000B9 | ||
1603 | :1064200003427F15780025422120334219201100B4 | ||
1604 | :10643000A9200E0011203200002202A540002742B0 | ||
1605 | :10644000480027422084002310A2F00019427F1543 | ||
1606 | :1064500006A07C007F1582A56400C8003042087841 | ||
1607 | :1064600085A070000A78042405A07C00091202307F | ||
1608 | :106470000232034203440454045605660568067854 | ||
1609 | :10648000067A070C070C070EE1100A330558055A67 | ||
1610 | :10649000066A066C077C077E000E9B78100046A0FB | ||
1611 | :1064A0007C0084A7000F0B8084A71F00038003805B | ||
1612 | :1064B0000380038005A1FCD740005F42E0A0C074C8 | ||
1613 | :1064C00078006142E0A0C0547C007E0E7E0F84D034 | ||
1614 | :1064D00040006F42792000010920804F7120804FD9 | ||
1615 | :1064E00078007F420920404F7120404F0120044F27 | ||
1616 | :1064F0000420ECD040007D427920000178007F42EA | ||
1617 | :106500007920000291200080042184A00F007900EE | ||
1618 | :1065100086429042904290429042904290428E42F7 | ||
1619 | :106520008E427810B229B469F5C18CA19FFFB6697B | ||
1620 | :1065300005A04000DF42587884A09FFF85A000603E | ||
1621 | :106540005A78287886A01418C000DF424B780400DF | ||
1622 | :10655000487884A00400C000A5424B780800487821 | ||
1623 | :1065600084A00800C000AC423078BCD0C000DF423C | ||
1624 | :106570007E000120044F0420ECD07F004000C14287 | ||
1625 | :1065800084B200037800C34284B200044000C942D0 | ||
1626 | :106590001800DF427800CB422800DF42E47984A172 | ||
1627 | :1065A00030004000DF42EC7884A003004000DF426E | ||
1628 | :1065B0001C68ACD0C000DD42781069437800DF422F | ||
1629 | :1065C0001B78F9007F0F7F0E7C007E0C0120014FAD | ||
1630 | :1065D0000420ACD0C0005B431468078084A00F0087 | ||
1631 | :1065E0000380038003808CB200034000F842E0A0E7 | ||
1632 | :1065F000C0537800FA42E0A04054046084A00A002E | ||
1633 | :10660000C0005B43086194A100FF40005B438CA184 | ||
1634 | :10661000FF0001200A0006A14000264301200C00D3 | ||
1635 | :1066200006A140002A430120120006A140002E438B | ||
1636 | :106630000120140006A1400032430120190006A1E8 | ||
1637 | :10664000400036430120320006A140003A43780062 | ||
1638 | :106650003E4309200C0078004043092012007800D6 | ||
1639 | :1066600040430920140078004043092019007800B5 | ||
1640 | :106670004043092020007800404309203F00780073 | ||
1641 | :10668000404311200000002105A20A60046085A09B | ||
1642 | :10669000020006606120004F0460BCD040005B43F4 | ||
1643 | :1066A0001468FCD0C0005643EA606120404F780077 | ||
1644 | :1066B0005943EE606120804F1F600F807F0C7C008B | ||
1645 | :1066C0001B7879007C001B7878007C001B786700C1 | ||
1646 | :1066D0007C001B7864007C000920194F0C2186A1E6 | ||
1647 | :1066E000000040007B4386A1010040007E431F70F4 | ||
1648 | :1066F0000B00677001001B7847007C001B78F000DE | ||
1649 | :106700007C001F700A007C000920194F0C2186A113 | ||
1650 | :1067100000004000964386A10100400093431F7093 | ||
1651 | :106720000B00677001001B7847007C001F700A0097 | ||
1652 | :106730007C001B78EF007C001B78F9007C001B7844 | ||
1653 | :10674000F8007C001B78C9007C001B78C8007C0026 | ||
1654 | :106750001868FCD04000AB431B681D006770010047 | ||
1655 | :106760001B7847007C00307884A0C000C000D24372 | ||
1656 | :1067700008788CC00A780500050005000500EC7853 | ||
1657 | :1067800084A02100C000CF430120054F0420E4D0A5 | ||
1658 | :10679000C000CD43047884A01FFF85A0E0000678E8 | ||
1659 | :1067A00006A07C0008788DC00A787C0008788DC02F | ||
1660 | :1067B0000A787C00307884A04000C000D7430120D4 | ||
1661 | :1067C000044F0420ECD04000E64384B2000378007C | ||
1662 | :1067D000E84384B200044000EE439800F24378009E | ||
1663 | :1067E000F043A800F243AC787C00087884A0FDFF59 | ||
1664 | :1067F0000A780500050005000500EC7884A021005A | ||
1665 | :10680000400015447E000120044F0420ECD07F009E | ||
1666 | :1068100040000B4484B2000378000D4484B20004AD | ||
1667 | :106820004000134498000F4478001544A800134416 | ||
1668 | :10683000AC787E00087885A002000A787F007C0092 | ||
1669 | :1068400084A70100C000B93784A7700040002D4420 | ||
1670 | :106850007E0C602D682F78102629782D682C7F0CEF | ||
1671 | :1068600084A7080040003A444B780800EC7884A0E4 | ||
1672 | :1068700003004000B93778005D4384A7040040005E | ||
1673 | :106880006944B87884A00140400069444B7808000E | ||
1674 | :10689000EC7884A003004000B937E47884A00700B6 | ||
1675 | :1068A00086A00100C0006944C07885A60048302059 | ||
1676 | :1068B0005A7E1B78F9007C004B7808001868FCD0E1 | ||
1677 | :1068C000400066441B681500F4D6400066441B680F | ||
1678 | :1068D0000700781069437C001B680300587884A087 | ||
1679 | :1068E000003F1E682F680000336800004B780800E6 | ||
1680 | :1068F000EC7884A003004000AF307E000120044FFC | ||
1681 | :106900000420ECD07F004000864484B2000378006D | ||
1682 | :10691000884484B2000440008E441800082A78009D | ||
1683 | :1069200090442800082A78000C41146B078384A047 | ||
1684 | :106930000F00038003800380FCD34000A04480A0AC | ||
1685 | :1069400040547800A24480A0C053602048205A7070 | ||
1686 | :10695000602A7C00200020000000200000002000B1 | ||
1687 | :1069600000002000000020000000200000002000A7 | ||
1688 | :106970000000200000002000000020000000200097 | ||
1689 | :106980000000200000002000000020000000200087 | ||
1690 | :106990000000200000002000620009001400140024 | ||
1691 | :1069A0004898140014001499FD98140014008000F5 | ||
1692 | :1069B000FF0000010204082080F818000AA2140059 | ||
1693 | :1069C0000B300CA21400002513000025100010004D | ||
1694 | :1069D0001000100010001000100010001000100037 | ||
1695 | :1069E000100010001000100000A2063802715F8035 | ||
1696 | :1069F00081943988C420640856A80830C1281B9D9A | ||
1697 | :106A000001A20C30472861816A840080A484561852 | ||
1698 | :106A10003A8808A8E228CB9CF3A8640844A80C3064 | ||
1699 | :106A200001A80830E128CB9C21201DA805A20C87D5 | ||
1700 | :106A3000DED8A064E06DC06FA463806C120205A272 | ||
1701 | :106A40003D8842792080A1A42B8814183B88DF80E0 | ||
1702 | :106A5000A1942770F28537A732A503F07685778653 | ||
1703 | :106A600016A83E8814A8012012A804A2C064E06DF4 | ||
1704 | :106A7000A067C06F42792080A1A41418DF80A19480 | ||
1705 | :106A80003B8823707685778602A861783E886B20E4 | ||
1706 | :106A9000C1281B9D44200321A2208120C3A807A256 | ||
1707 | :106AA00004090EA209A803A20080A48572189A877F | ||
1708 | :106AB0003C88E21F01F608A26E856F8661711400A2 | ||
1709 | :106AC00004070830CB9C140002A20080A485093082 | ||
1710 | :106AD000A884E21944F86E853F88E608F5A861F8B5 | ||
1711 | :106AE000EAA801F8140081F81600B285F08032950A | ||
1712 | :106AF000A2FAE21D1400328521F21400E21DA884DE | ||
1713 | :106B0000E0D6E61F1400083000804A281110FCA8C7 | ||
1714 | :106B10000830339D008000A002281110FDA8399D87 | ||
1715 | :106B2000BDA80830339D3B281110FDA809A20271B1 | ||
1716 | :106B30005F80819417000C3009A20080A485E21DBB | ||
1717 | :106B400009A2C1DA1400100201A81400E0263A8755 | ||
1718 | :106B5000A3FAF219E026F21814000BA214000DA2F9 | ||
1719 | :106B600006381002259D040706A265687E812A84E6 | ||
1720 | :106B7000C11D2388160042600880FAA80080A48402 | ||
1721 | :106B800060812A8421F00830A884D6114270DD206B | ||
1722 | :106B90001100D420228816004479218420A032A537 | ||
1723 | :106BA000A184160044792184DFA03295A1841600C7 | ||
1724 | :106BB00000007E12D47084A00046048090200472ED | ||
1725 | :106BC00008709CC005A2C00002460C72FF82400003 | ||
1726 | :106BD000ED45FF8AC0000246007284D2C000024622 | ||
1727 | :106BE0000478CCD04000F3457810CC4A23700000E4 | ||
1728 | :106BF00027700000007084D04000FD45077004003D | ||
1729 | :106C0000037008007F1200207C00007084A0030045 | ||
1730 | :106C100002709CC684D040005B4608710500087075 | ||
1731 | :106C200006A1C0000A4684A1030040008C4684A14E | ||
1732 | :106C3000E001C0008C46F4D1C0000A4684A10030B7 | ||
1733 | :106C400086A0001040000A460120054F0420E4D031 | ||
1734 | :106C500040003746112080010C71118240004546EA | ||
1735 | :106C60000870F4D0C0000A460C7006A140002A4605 | ||
1736 | :106C700078002746112080010C71118240004546A2 | ||
1737 | :106C80000870F4D0C0000A460C7006A140003A46D5 | ||
1738 | :106C90000770120008710500087006A1C000474681 | ||
1739 | :106CA00084A1030040008C4694D140004746F4D1B3 | ||
1740 | :106CB00040008C460770020078000A460871FCD13B | ||
1741 | :106CC000400066467810ED47FF8A4000DC457800BA | ||
1742 | :106CD0005B460C708CA0FF0340009146047084D08A | ||
1743 | :106CE00040008346147005A0C0007F4610701073EA | ||
1744 | :106CF00006A3C0007346002305A04000834602A1FE | ||
1745 | :106D0000C8005B460770100078008C46FF8A400080 | ||
1746 | :106D100091467810F249C000864640005B467810E4 | ||
1747 | :106D200038477F1200207C00047208719CC10381E7 | ||
1748 | :106D3000C800A04607700200780091460370080062 | ||
1749 | :106D40007F1200207C0005A2C0008C46237000004A | ||
1750 | :106D500027700000037008007E000120014F04200E | ||
1751 | :106D6000CCD04000B2467810CC4A7F007F12002081 | ||
1752 | :106D70007C002864FF844000E246702C0470BCA0B4 | ||
1753 | :106D80000F00B8A7F2463C27FB87C000D04648005A | ||
1754 | :106D9000C8467810B2299C6075A04000E246780091 | ||
1755 | :106DA000BB463920E746042768AE086830A60C6861 | ||
1756 | :106DB00029A521844000E2463887042705A0C000A9 | ||
1757 | :106DC000D1469C7075A0C000BB467C000000050049 | ||
1758 | :106DD00009000D001100150019001D00000003003E | ||
1759 | :106DE00009000F0015001B0000000000E746E44604 | ||
1760 | :106DF0000000000000800000E7460000EF46EC467F | ||
1761 | :106E00000000000000000000EF460000EA46EA46ED | ||
1762 | :106E10000000000000800000EA460000F046F04656 | ||
1763 | :106E20000000000000000000F0467920004F7120B3 | ||
1764 | :106E3000100007700A00077002000370010010784C | ||
1765 | :106E4000ECD0400026470920010071202000780086 | ||
1766 | :106E50002A47092002007120500007700A000770BD | ||
1767 | :106E600002000370000009814000374771202000B4 | ||
1768 | :106E700078002A477C0004700480C800C14708716C | ||
1769 | :106E8000087006A1C0003C4784A1E00140004947CA | ||
1770 | :106E9000781030487800E947077012001920000088 | ||
1771 | :106EA0000871087006A1C0004D4784A1E0014000B0 | ||
1772 | :106EB0005A47781030487800E9471078ECD0400005 | ||
1773 | :106EC00074470120FD04042086A00300C000784719 | ||
1774 | :106ED00084A1004040007C4782A30300C8007C4797 | ||
1775 | :106EE00084A1040040004D47188378004D47147872 | ||
1776 | :106EF000ECD0C0007C4784A10040C0004D479CA15D | ||
1777 | :106F00000C3086A304204000994786A30800400067 | ||
1778 | :106F1000A447047084D0C00095470871087006A18A | ||
1779 | :106F2000C0008A4784A1030040009547780030489C | ||
1780 | :106F300086A30C20C0004D47007204824800A4477D | ||
1781 | :106F40000C7384A3FF034000A4477810B229087192 | ||
1782 | :106F5000087006A1C000A44784A1E0014000B14729 | ||
1783 | :106F6000781030487800E94707701200007084D02C | ||
1784 | :106F7000C000C1471073147005A34000C1470C71D5 | ||
1785 | :106F800084A1FF03C00038470871087006A1C00043 | ||
1786 | :106F9000C14784A1E0014000CE4778103048780016 | ||
1787 | :106FA000E947077012000770080004709CD0C00009 | ||
1788 | :106FB000D2470871087006A1C000D64784A1E0013D | ||
1789 | :106FC0004000E347781030487800E9470770120026 | ||
1790 | :106FD000087103814800D647037008007C000871DF | ||
1791 | :106FE00084A1E001C0003048087184A1E001C00024 | ||
1792 | :106FF000304884A107007900FA4704481448024841 | ||
1793 | :10700000144802487248024870487810B229047047 | ||
1794 | :1070100084A010008DC00670FF8AC0000F48492070 | ||
1795 | :1070200000007C007810F249C0000F487C0004701A | ||
1796 | :1070300084A010008DC00670047084D0C000284861 | ||
1797 | :107040000871087006A1C0001D4884A1030040001B | ||
1798 | :10705000284878003048FF8A40002F487810F249CD | ||
1799 | :10706000C0002B487C00077012000871E000334814 | ||
1800 | :1070700091200060E0003748912000600770120006 | ||
1801 | :107080000770080004709CD0C0003F4807701200D1 | ||
1802 | :107090000871FCD1C000434803700000007005A0D7 | ||
1803 | :1070A000C0005748047005A0C00057480C7005A0E8 | ||
1804 | :1070B0004000594878003B484920000084B2000154 | ||
1805 | :1070C000400063480120000078006548012001006D | ||
1806 | :1070D000781062421B680200512000007C0078108A | ||
1807 | :1070E000B2297810B2297810B948107214710C7056 | ||
1808 | :1070F0009CA0FF03002800A311A289A10000781022 | ||
1809 | :10710000B9480427582C60AC0863002222A30C6302 | ||
1810 | :1071100000211BA3002405A340009548C800954802 | ||
1811 | :10712000128410820A8389A10000602B78007C48B9 | ||
1812 | :10713000602B078A7E0004609CD04000A048BAA75C | ||
1813 | :10714000EC467800A248BAA7E4467F003DA7002C91 | ||
1814 | :1071500086688A6F926C8E6B0871087006A1C000F9 | ||
1815 | :10716000A94884A1E0014000B44878103048077075 | ||
1816 | :107170001200781038477C00508A3987042704A011 | ||
1817 | :10718000C000CD48006064A0C000C448602D046009 | ||
1818 | :1071900084A00F0080A002473C20FB874010B2294A | ||
1819 | :1071A0007C007E127E0DD47084A000460480902066 | ||
1820 | :1071B0007F0D8468602088688C6B906C5780D4AA9F | ||
1821 | :1071C000FF0084A0FF007E00046884A008007F0008 | ||
1822 | :1071D0004000EB48B8A0EC467800ED48B8A0E44683 | ||
1823 | :1071E00084B200014000F448207E7800F548247EF7 | ||
1824 | :1071F000B5A60C001C68B4D04000FC4885C600242D | ||
1825 | :1072000005A340002549582C0427046160AC0060A8 | ||
1826 | :1072100000A41A70046001A31E709CD1400015499F | ||
1827 | :10722000106081A000002270146081A00000267010 | ||
1828 | :107230000862002402A212700C62002303A21670DE | ||
1829 | :10724000027607700100602B78101C4A78002749ED | ||
1830 | :107250007810F249C00025497F1200207C007E1280 | ||
1831 | :107260007E0DD47084A00046048090207F0D0770AE | ||
1832 | :107270000400047094D0C0003649037008007F12E7 | ||
1833 | :1072800000207C007E127E0DD47084A00046048015 | ||
1834 | :107290007E0090207F007F0D207E84B20001C00020 | ||
1835 | :1072A0004F49247EB5A60C001C68ACD0C0005A49DA | ||
1836 | :1072B00085C6037000000770040028685020602D08 | ||
1837 | :1072C0000460BCA00F00B8A7F2463C27FB87C000B3 | ||
1838 | :1072D000704948006A497810B2299C6865A040004E | ||
1839 | :1072E000744978005D497810F249C00070497F12F6 | ||
1840 | :1072F00000207C007E127E007E017E0DD47084A072 | ||
1841 | :10730000004604807E0090207F00207E84B2000131 | ||
1842 | :10731000C0008849247E7F0D7F037F04B5A60C0042 | ||
1843 | :107320001C68B4D04000964985C603700000077001 | ||
1844 | :10733000040049207749286855A07E0D4000EE4999 | ||
1845 | :10734000702D602E0470BCA00F00B8A7F2463C2739 | ||
1846 | :10735000FB87C000B3494800AC497810B2299C7043 | ||
1847 | :1073600075A060204000EE4978009F49042768AE70 | ||
1848 | :10737000086822A40C681BA34800CC49518AC000AD | ||
1849 | :10738000C0497810B2293887042705A0C000B44945 | ||
1850 | :107390009C7075A060204000EE4978009F492284CF | ||
1851 | :1073A00020841A8399A300000869002422A10C6993 | ||
1852 | :1073B00000231BA1C800DB497810B22984B2000168 | ||
1853 | :1073C0004000E9490120044F0420ECD0C000E94905 | ||
1854 | :1073D000712050007800EB49712020007F0D78006B | ||
1855 | :1073E000FC487F0D7F1200207C0008707E0084A086 | ||
1856 | :1073F000E0017F004000FB4906A07C0084A0030060 | ||
1857 | :1074000086A00300C000024A7C00042778AC007804 | ||
1858 | :107410001A7004781E70087812700C781670046068 | ||
1859 | :107420009CD04000144A107822701478267002769E | ||
1860 | :10743000047084A0100085C006707920004F388742 | ||
1861 | :10744000518A4000404A042705A0C000324A9C608F | ||
1862 | :1074500005A04000414A6020046084A00F0080A085 | ||
1863 | :10746000F2463C20FB874010B22908707E0084A0C1 | ||
1864 | :10747000E0017F0040003C4A06A07800414A84A019 | ||
1865 | :10748000030086A003007C00512000007C007E12D7 | ||
1866 | :107490007E007E0DD47084A00046048090207F0D75 | ||
1867 | :1074A0007F08087184A10300C000594A286805A01C | ||
1868 | :1074B0004000694A780002460871FCD14000614AE8 | ||
1869 | :1074C0007810ED4778004E4A077010000871FCD123 | ||
1870 | :1074D0004000634A7810ED47087086A00800C0009D | ||
1871 | :1074E0004E4A007005A0C0004E4A037000004920BB | ||
1872 | :1074F00000007E000478CCD040007D4A7810CC4A51 | ||
1873 | :107500007F007F1200207C007E127E147E137E1589 | ||
1874 | :107510007E0C7E0DD47084A00046048090207F0DE8 | ||
1875 | :107520004920814A80AD1100A02084B200014000B2 | ||
1876 | :10753000A44A0120044F0420ECD04000A04A992026 | ||
1877 | :1075400031007800A64A992032007800A64A992096 | ||
1878 | :1075500031000C7084A0FF032A68077008000770D0 | ||
1879 | :107560000200037001004000B54A0080AC80A553C2 | ||
1880 | :107570000C7084A0FF034000C14A0770040004702F | ||
1881 | :1075800084A00400C000BC4A7F0C492000000370A6 | ||
1882 | :1075900000007F157F137F147F1200207C00146889 | ||
1883 | :1075A000FCD04000114B007084D04000114B247E71 | ||
1884 | :1075B000B5A6040007700400047084A00400C00095 | ||
1885 | :1075C000D94A18717E011C717E0120717E012471DF | ||
1886 | :1075D0007E010EA01A711F70FF3F22712671137079 | ||
1887 | :1075E000040016710276077001000120FFFF0920D8 | ||
1888 | :1075F00031000A200A200871087006A1C000F84A6C | ||
1889 | :10760000FCD14000F84A7F0226727F0222727F027C | ||
1890 | :107610001E727F021A7207700200087086A00800AE | ||
1891 | :107620004000114B780030480770040003700000E0 | ||
1892 | :107630007C009120008091200060AC7805A0C00003 | ||
1893 | :107640002D4B7479D07006A1C0002D4B1C7805A07D | ||
1894 | :1076500040002D4B1F78000068002D4B912080408A | ||
1895 | :10766000307801803278C000B54B347832781078A9 | ||
1896 | :10767000ECD0C000AE4B6120C0746920804FFDC7C4 | ||
1897 | :10768000D06805A04000474B0180D268C000474B3E | ||
1898 | :107690007810834D006884A00F0040005C4B86A0EA | ||
1899 | :1076A000010040005C4B44680DA040005C4B04218D | ||
1900 | :1076B00005A040005C4B01800A204000F64C146895 | ||
1901 | :1076C00005A04000814B01801668C000814BA7686F | ||
1902 | :1076D00001007E0FFCD7C000764B1078ECD0400044 | ||
1903 | :1076E000724B792000017800784B792000027800F5 | ||
1904 | :1076F000784B792000017810D3437F0F646805A090 | ||
1905 | :107700004000814B78106F26806805A040008E4BAA | ||
1906 | :1077100001808268C0008E4B67680000D468DDC0BD | ||
1907 | :10772000D668D468FCD04000AB4BFCC0D668A9201A | ||
1908 | :107730000002346005A04000A74B01803660D46889 | ||
1909 | :10774000FDC0D668C000A74B106005A04000A74B45 | ||
1910 | :1077500078106F26E0AC1000F000964BFCD740008C | ||
1911 | :10776000B54B6120C0546920404FFCC778003D4BA9 | ||
1912 | :107770007810F14B387801803A78C000D74B3C78CC | ||
1913 | :107780003A786120C0546920404FFCC70C6805A0BE | ||
1914 | :107790004000C94B78105B4CFCD7C000D74B107829 | ||
1915 | :1077A000ECD0C000D74B6120C0746920804FFDC76A | ||
1916 | :1077B0007800C34B1478E4D0C000DB4B1078CCD0F9 | ||
1917 | :1077C0004000EE4BACD0C000E74BA4D04000EE4BE5 | ||
1918 | :1077D000ADC01278912001806800ED4B7810DC2359 | ||
1919 | :1077E0007C00912001807C00407801804278C000BC | ||
1920 | :1077F0005A4C447842786920404FFCC71078792071 | ||
1921 | :107800000002ECD04000034C79200001D86805A0AC | ||
1922 | :1078100040000F4CE07D04A5C0000F4CDA68D4682E | ||
1923 | :10782000BCC0D6687920004F106805A0C000174C76 | ||
1924 | :107830000120010101801268FCD74000204C80A08B | ||
1925 | :10784000D0957800224C80A0C0944020042065A0F0 | ||
1926 | :1078500040004C4C246005A04000484C018026604C | ||
1927 | :10786000C000484C006805A040003B4C4C6806AC8A | ||
1928 | :10787000C0003B4C7810F64C78004C4C646805A076 | ||
1929 | :107880004000434C276001007800484C7810A94C18 | ||
1930 | :1078900004287800244C0060402C7800244CFCD74D | ||
1931 | :1078A000C0005A4C1078ECD0C0005A4C6920804F70 | ||
1932 | :1078B000FDC7792000017800034C7C0009200000FE | ||
1933 | :1078C000A920000208609CD04000954C246005A0CF | ||
1934 | :1078D00040006B4C018026607800934C08609CC08F | ||
1935 | :1078E00084D0C000734CACD040008D4C0A60046062 | ||
1936 | :1078F00005A04000954C7E0D7E0C7E016820106036 | ||
1937 | :10790000018012607810193E002D682C60207810DC | ||
1938 | :10791000A21E781064207F017F0C7F0D7800954CAB | ||
1939 | :10792000BDC00A608DA101007800954C8DA10001B9 | ||
1940 | :10793000E0AC1000F0005F4C84A101004000A44CBA | ||
1941 | :107940008CA1FEFF0E6978106F267800A54C0E6999 | ||
1942 | :107950007C00C000A54C6C78002C7E681467766FA4 | ||
1943 | :10796000176000002B6000001B600600B46084A05C | ||
1944 | :10797000003F1E60206084A0FF0085A060002260A0 | ||
1945 | :107980000060422078102B1E186805A04000C74CEC | ||
1946 | :1079900001801A680868A4C00A681068087909811B | ||
1947 | :1079A0000A790180D000D34C7810B2291268C00047 | ||
1948 | :1079B000D94C1079A5C112792F6000003360000006 | ||
1949 | :1079C000682C78107320FCD7C000E74C6920404F2A | ||
1950 | :1079D0007800E94C6920804F106984A100010120E2 | ||
1951 | :1079E0000600C000F34C7A69012004007810632679 | ||
1952 | :1079F0007C007E0D4C696021FCD7C000084D1078DA | ||
1953 | :107A0000ECD04000044D6920000178000A4D692047 | ||
1954 | :107A1000000278000A4D69200001781026291B60B9 | ||
1955 | :107A20000600586884A0003F1E60206084A0FF000C | ||
1956 | :107A300085A0480022602F600000336000000868C5 | ||
1957 | :107A400084A0FDFF0A683068B4D040003C4D4B680C | ||
1958 | :107A50000400A9201400486894D040002E4DF00086 | ||
1959 | :107A6000284D4B680900A9201400486884D04000C4 | ||
1960 | :107A7000384DF000324DA920FA00F0003A4D1B6855 | ||
1961 | :107A800047007F0D676807007C007920004F781061 | ||
1962 | :107A9000764D78105C4D7810694D09200200692000 | ||
1963 | :107AA000804F0F680000136800001768000009810C | ||
1964 | :107AB00040005B4D6920404F78004E4D7C001078AF | ||
1965 | :107AC000ECD04000644D1920CC007800664D1920A0 | ||
1966 | :107AD0007B003A7B3E7B7C001478E4D0C000714D83 | ||
1967 | :107AE000192040007800734D19202600427B467B08 | ||
1968 | :107AF0007C001478E4D0C0007E4D1920943F7800BB | ||
1969 | :107B0000804D19202426327B367B7C00506A85A26A | ||
1970 | :107B100000004000AF4D5469C06B00A37E0C64218F | ||
1971 | :107B20000463FF83C0009B4D118240009F4D08817C | ||
1972 | :107B30001AA148008C4DC06978008C4DD3680A00AA | ||
1973 | :107B40007F0C7C005069C06A64222B6000002F60AB | ||
1974 | :107B500000000860B5C00A6010820981C000A14D14 | ||
1975 | :107B600052697F0C7C00E000B04D91200060E00085 | ||
1976 | :107B7000B44D91200060EC70DCD0C000C14DD4D079 | ||
1977 | :107B80004000EA4D7800ED4D08201078ECD0400020 | ||
1978 | :107B9000D44DC4D1C0000E4E1478C5C016781078EC | ||
1979 | :107BA000F5C01278ECD040000A4E7800064E8EAE3A | ||
1980 | :107BB00000014000E14D1478F5C0C5C01678D4D05E | ||
1981 | :107BC000C0000A4E7800064E1478FDC0C5C0167875 | ||
1982 | :107BD000D4D0C0000A4E7800064EE4D040000C4ECF | ||
1983 | :107BE000E000ED4D9120006009200C00E000F34D15 | ||
1984 | :107BF000912000600981C000F34DE47084A0FF0172 | ||
1985 | :107C000086A0FF01C000044EEC707800C14D7810D2 | ||
1986 | :107C10000F4E04788CD040000C4E1F680C00A070F2 | ||
1987 | :107C2000A2707C001079ECD14000194E1478C4C0C9 | ||
1988 | :107C3000F4C1127978002B4E8EAE00014000254E23 | ||
1989 | :107C40001478F4C0FCD0C0002B4EC4C078002B4E7A | ||
1990 | :107C50001478FCC0F4D0C0002B4EC4C016787C0051 | ||
1991 | :027C6000E3142B | ||
1992 | :00000001FF | ||
1993 | /***************************************************************************** | ||
1994 | * QLOGIC LINUX SOFTWARE | ||
1995 | * | ||
1996 | * QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x | ||
1997 | * Copyright (C) 2001 Qlogic Corporation (www.qlogic.com) | ||
1998 | * | ||
1999 | *****************************************************************************/ | ||
2000 | |||
2001 | /************************************************************************ | ||
2002 | * --- ISP1240/1080/1280 Initiator Firmware --- * | ||
2003 | * 32 LUN Support * | ||
2004 | ************************************************************************/ | ||
2005 | |||
2006 | /* | ||
2007 | * Firmware Version 8.15.11 (10:20 Jan 02, 2002) | ||
2008 | */ | ||
diff --git a/firmware/qlogic/isp1000.bin.ihex b/firmware/qlogic/isp1000.bin.ihex new file mode 100644 index 000000000000..a5c242cda220 --- /dev/null +++ b/firmware/qlogic/isp1000.bin.ihex | |||
@@ -0,0 +1,1158 @@ | |||
1 | :1000000078003010000019240000FF124320504FE8 | ||
2 | :10001000525947495448312039392C313931323914 | ||
3 | :10002000312C39392C333931343951204F4C49472F | ||
4 | :1000300020434F435052524F54414F49004E4920A4 | ||
5 | :1000400050533031303046207269776D72612065CF | ||
6 | :100050005620726569736E6F30202E313133202047 | ||
7 | :10006000B9201212C120080071201000C3700400D2 | ||
8 | :10007000C920FF3F8920C810C7705349CB7020505A | ||
9 | :10008000CF702020D3700100003FD67031203000A7 | ||
10 | :100090007920003563780000A02F09202703112064 | ||
11 | :1000A0000000A9204000A4420981C00051109B78A3 | ||
12 | :1000B00001010B7802000F7802004F78B80B69201D | ||
13 | :1000C0004035A8006A101B683C0009201313B821B2 | ||
14 | :1000D00078006C101B682800076807000B68FA009E | ||
15 | :1000E0000F680800136805001F68000023680600F9 | ||
16 | :1000F00017680800276800006920003611202000DA | ||
17 | :10010000092010000B68190C0F681900036800DD46 | ||
18 | :1001100007681A001A6A002DE8A0080090A20400DF | ||
19 | :100120000981C000821069208036A92080003768CC | ||
20 | :1001300000000B684000176800011F686400E8AD0C | ||
21 | :1001400010007000A510780097107810381A7810F9 | ||
22 | :100150003A2F781081167810BA33003285A00D003E | ||
23 | :100160009020C37000009000BC10C07086A00200F8 | ||
24 | :10017000C000BC107810BA117810EC107810171865 | ||
25 | :100180007810A81978107D3278107D177800BC108F | ||
26 | :10019000D010D210C31BC31B982F982FC31BC31B97 | ||
27 | :1001A0007800D0107800D2107800D4107800D610E3 | ||
28 | :1001B00008700C80C800E710077002008CA00C00CB | ||
29 | :1001C000C000E81004800480C800E7107A087A09AB | ||
30 | :1001D000C37002407800BD11147805A0C000F4106F | ||
31 | :1001E0001000301178002F1109206835042105A076 | ||
32 | :1001F000C0002F11147886A00100C00001117810F2 | ||
33 | :1002000036151778000009206F35042165A04000DD | ||
34 | :100210001D1109206A351C2108811421088104213F | ||
35 | :1002200010A299A3000009201C008360030178102C | ||
36 | :100230001116C00029117810781609206F350B208F | ||
37 | :1002400000000920693504210B20000005A04000B2 | ||
38 | :100250002D11012005407800BC117800BA117C00F6 | ||
39 | :1002600061200000186084A00100400038117C006B | ||
40 | :10027000C3700000C7700000CB700000CF7000009A | ||
41 | :10028000C070BCA0C0FFC0008811382079004811A0 | ||
42 | :10029000BA110512D311051256125612CA11901531 | ||
43 | :1002A0006112C611D711D911DB11DD119515C611D7 | ||
44 | :1002B0006712831244158A15DF116B148D14A7146D | ||
45 | :1002C000D0142414321446145A14EF12C6119F127B | ||
46 | :1002D000A612AB12B012B612BB12C012C512CA12CD | ||
47 | :1002E000CE12E312C611C611C611C611C611FB12F9 | ||
48 | :1002F00004131313391343134A1370137F138E130C | ||
49 | :10030000A0130914C611C611C611C611C6111914BD | ||
50 | :10031000BCA0A0FFC000C611382084A01F00790037 | ||
51 | :100320009111C611C611C611C611C611C611C6114A | ||
52 | :10033000C611C611C611C611C611C611C611C61105 | ||
53 | :10034000C611C611C611C611C611C611C611C611F5 | ||
54 | :10035000C611C611C611ED15F715FB150916C61104 | ||
55 | :10036000C611CA72C671012006407800BC11CE7356 | ||
56 | :10037000CA72C67101200040C270612000001B607B | ||
57 | :10038000010091200050912080407C00C37001400A | ||
58 | :100390007800BD1199204100A1204100A92005004D | ||
59 | :1003A000A3537800BA11C470C37004007A007800B7 | ||
60 | :1003B000BA117800BA117800BA117800BA119120F8 | ||
61 | :1003C0000080C3700000C7705349CB702050CF70BD | ||
62 | :1003D0002020D3700100003FD670792000001B78E8 | ||
63 | :1003E00001003120300059200010292057045120ED | ||
64 | :1003F000700461207204B920FFFFC1200000912029 | ||
65 | :1004000000509120804078005504D071C872CC73A0 | ||
66 | :10041000C470A020982031203000FF814000BA1124 | ||
67 | :10042000077004001A731E72512012004920341202 | ||
68 | :100430004120BA110370020086A70100C0002612F5 | ||
69 | :100440004920421241204E12037003001770000031 | ||
70 | :100450000B811271C8002E12177001000770010085 | ||
71 | :1004600086A70100400042120C7084A07F00048027 | ||
72 | :100470000920200002A142094A09A820A026A6536B | ||
73 | :100480007800D8100C7084A07F0040004212AC802D | ||
74 | :10049000480042129826A5537800D8100C7084A00A | ||
75 | :1004A0007F00AC809826A5537800BA11C471C8703B | ||
76 | :1004B00014219EA70400C0005E120A20CA727800B0 | ||
77 | :1004C000B911C7700100CB701F007800BA11C47059 | ||
78 | :1004D000C872CC73D074C670CA72CE73D27405A0C1 | ||
79 | :1004E00040007D12018072787A7A7E7B767C9878E3 | ||
80 | :1004F00084A0FCFF9A7878008112987885A001008A | ||
81 | :100500009A787800BA11C470C872CC73D474C6706B | ||
82 | :10051000CA72CE73D67405A0400099120180867805 | ||
83 | :100520008E7A927B8A7C987884A0FFFC9A787800F7 | ||
84 | :100530009D12987885A000019A787800BA11092058 | ||
85 | :1005400059350C21112010047800B81109204135CB | ||
86 | :100550000C217800B911092042350C217800B9111D | ||
87 | :10056000612040350C6110627800B81109204535D2 | ||
88 | :100570000C217800B911092046350C217800B911F9 | ||
89 | :10058000092047350C217800B911092048350C2184 | ||
90 | :100590007800B91108790C7A7800B811C471078114 | ||
91 | :1005A00084A00F00038003800380E8A00036006A67 | ||
92 | :1005B000046884A008004000E012086B7800E11293 | ||
93 | :1005C0000C6B7800B711C4777810921691200080D8 | ||
94 | :1005D0001C6B146A9120018008277800B711C4773A | ||
95 | :1005E00078109216912000800869186A106B91208B | ||
96 | :1005F00001807800B711C47182A11000C800B21147 | ||
97 | :100600007810BC1A7800B711C47182A11000C8001C | ||
98 | :10061000B2111120413504227E0012217810751A82 | ||
99 | :100620007F017800B911C47111203113A92008008D | ||
100 | :10063000042206A1400023131082700021137800C9 | ||
101 | :1006400018137800B21192A231137E0211204235A4 | ||
102 | :10065000042212217F017E007810811A7F01780028 | ||
103 | :10066000B911E803FA00F401EE0264001900320047 | ||
104 | :100670004B00612040350C611062C4700E60C87080 | ||
105 | :1006800012607800B811612040351461C4701660A2 | ||
106 | :100690007800B911C471112004001920121286A12A | ||
107 | :1006A000280040006313112005001920121286A1B2 | ||
108 | :1006B000320040006313112006001920131386A195 | ||
109 | :1006C0003C00C000B2116120403518607E001A6104 | ||
110 | :1006D000B8237810921A7810BA337F017800B911D4 | ||
111 | :1006E000C47184A1CFFFC000B2111120473504228C | ||
112 | :1006F00012217E007810B41A7F017800B911C471FC | ||
113 | :1007000082A11000C800B2111120483504227E00D9 | ||
114 | :1007100012217810A31A7F017800B911C471C87230 | ||
115 | :1007200084A1FDFFC000B11184A2FDFFC000B11182 | ||
116 | :10073000002108790A7800220C7A0E787800B81126 | ||
117 | :10074000C471078184A00F00038003800380E8A0A8 | ||
118 | :10075000003619200000C87200687E0026A2400002 | ||
119 | :10076000CF13026A84A400204000B8139DA3100098 | ||
120 | :1007700084A400104000BE139DA3080084A4004080 | ||
121 | :100780004000CF130F8184A200404000CB137810AB | ||
122 | :10079000D61A7800CF137810C81A7800CF13CC720D | ||
123 | :1007A000FF8240000114086806A240000114A4A2C0 | ||
124 | :1007B000FF0061204035186186A128004000E81341 | ||
125 | :1007C00086A132004000EE1386A13C004000F413E5 | ||
126 | :1007D00082A464004800FE137800F81382A450003D | ||
127 | :1007E0004800FE137800F81382A443004800FE136B | ||
128 | :1007F000C471C6717F02CA727800B3110A6A9DA3E0 | ||
129 | :100800000A00046805A306687F020C6BC4717800B7 | ||
130 | :10081000B711C4777810921691200080146A1C6B6F | ||
131 | :1008200091200180C8701668CC701E680827780077 | ||
132 | :10083000B711C471C872CC7382A11000C800B21184 | ||
133 | :100840007810E41A7800B711C477781092169120C6 | ||
134 | :100850000080086A95A202000A6A91200180082798 | ||
135 | :100860007800B811C4777810921691200080086A39 | ||
136 | :1008700094A2F9FF0A6A046805A0400041147810A8 | ||
137 | :10088000191A9120018008277800B811C4777810D0 | ||
138 | :10089000921691200080086A95A204000A6A0468F2 | ||
139 | :1008A00005A0400055147810191A912001800827DE | ||
140 | :1008B0007800B811C477412001004920050051207B | ||
141 | :1008C00020009120008078109F1691200180082739 | ||
142 | :1008D000086A7800B811C477C872CC73C677CA7238 | ||
143 | :1008E000CE7378101817C0008914186805A040004E | ||
144 | :1008F000831408277810F41AC00083141778FFFFB8 | ||
145 | :10090000912001807C009120018001200540780029 | ||
146 | :10091000BC11912001807800BA11C477C6774120BC | ||
147 | :1009200021004920050051202000912000807810EE | ||
148 | :100930009F1661204035A3600300B667A7600000E2 | ||
149 | :100940001778FFFF912001807810191A7C00C87772 | ||
150 | :10095000CA77C477C677BCA700FF912000806120CA | ||
151 | :100960004035A3600200A7600000B6671778FFFF5C | ||
152 | :100970007810191A9120018041202100492004009B | ||
153 | :10098000512010009120008078109F16C8703668A2 | ||
154 | :10099000388784A70700C000C414912001807C0020 | ||
155 | :1009A000987884A00300C000F4143920000041208E | ||
156 | :1009B000210049200400512008007810921691204F | ||
157 | :1009C000008008680DA80A6991200180388784A7F3 | ||
158 | :1009D0000700C000DD14BCA700FF3F8738873F87B2 | ||
159 | :1009E00084A7000FC000DD14912000806920000161 | ||
160 | :1009F000306884A0400040001D154B680400A92009 | ||
161 | :100A00001400486884A0040040000A1570000A150C | ||
162 | :100A1000780001154B680900A9201400486884A0DB | ||
163 | :100A20000100400017157000171578000E15A92059 | ||
164 | :100A3000FA0070001D157800191579200035177817 | ||
165 | :100A4000010061204035A3600100A7600000C36081 | ||
166 | :100A50000F00987885A002009A78086884A0FDFFAE | ||
167 | :100A60000A681B684600912001807C00987884A069 | ||
168 | :100A7000FDFF9A7884A00100C0004015781060172F | ||
169 | :100A8000C471C6714A797C00C474C873CC72C674D0 | ||
170 | :100A9000CA73CE72792000350920400078106F1695 | ||
171 | :100AA0004000861578103F1640005A1578107816C9 | ||
172 | :100AB000780086151060912001801778FFFF0920CB | ||
173 | :100AC00068350B20050008810B20000008810A23EF | ||
174 | :100AD00008810A2208810A2408810A2008810B2043 | ||
175 | :100AE000000008810A2C2EA030257E0E7810132FCE | ||
176 | :100AF0007F0E9265A2659666A666AB600000AF6049 | ||
177 | :100B00000000912001807810191A7C00C370054004 | ||
178 | :100B10007800BD11C471C770000006797800BA1161 | ||
179 | :100B2000C471C671682178009715692000100C699E | ||
180 | :100B300016A0042D10A2688D0981C000991585A208 | ||
181 | :100B40000000C000A715C37000407800A915C3704D | ||
182 | :100B50000340CA707800BD11C471C872CC73002103 | ||
183 | :100B600084A1FCFFC000C61100217900B715CE1585 | ||
184 | :100B7000E315E515E715C3700340CE71D272D67345 | ||
185 | :100B80007800CA15C3700040CF700000D370000019 | ||
186 | :100B9000D7700000C677CA717800BA113120E91504 | ||
187 | :100BA000242630861224042246A4C000BB1584A447 | ||
188 | :100BB000FFFFC000D0153120E9151082198384A3EE | ||
189 | :100BC000FFFFC000D0157800C2157800C21578006C | ||
190 | :100BD000C2155555AAAAFFFF00006079C671C471FD | ||
191 | :100BE00082A10300C800B21162797800BA1160795D | ||
192 | :100BF000C6717800BA115479C671C47156795879A2 | ||
193 | :100C0000CA71C8715A795C79CE71CC715E797800FD | ||
194 | :100C1000BA115479C6715879CA715C79CE7178006D | ||
195 | :100C2000BA110C7084A07F0040001D1607700400EC | ||
196 | :100C3000047084A00400C000181617700000127120 | ||
197 | :100C40001A721E7308810C81A981988CA120300032 | ||
198 | :100C50008060A220A6530C7885A000000270077067 | ||
199 | :100C6000010008710481C80031160770020084A1D8 | ||
200 | :100C70000C000C7184A10003037000007C000C7058 | ||
201 | :100C800084A07F0040004B1607700400047084A00D | ||
202 | :100C90000400C00046161770000012711A721E730D | ||
203 | :100CA000992030000881AC810C7885A00100027089 | ||
204 | :100CB0000770010008700C80C8005A160770020007 | ||
205 | :100CC0008CA00C00C0006C160C7184A10003C00045 | ||
206 | :100CD0006C16A02CA55306A0037000007C00507871 | ||
207 | :100CE00065A040007716042C5278632000007C0039 | ||
208 | :100CF0007E0F7920003550786220002C52787F0FCB | ||
209 | :100D00007C0011200040527A192010041983400001 | ||
210 | :100D10008F1680A22F001220102078008616132034 | ||
211 | :100D200000007C0084A7000F0C8084A707000380CC | ||
212 | :100D300003800380038005A1E8A080367C00781042 | ||
213 | :100D4000921600292A68002A2E68086884A0EFFFFE | ||
214 | :100D50000DA80A6909204F350C21046805A0400040 | ||
215 | :100D6000BC1616A1C000BC166020006006687E019B | ||
216 | :100D70000B2000007800BF16092000007E010468E7 | ||
217 | :100D800065A04000CE16006006687810DF16781067 | ||
218 | :100D9000CB17106801801268C000BF167F0102697E | ||
219 | :100DA00006697C0065A04000DE1698609B6000002C | ||
220 | :100DB00008207810781600217800D2167C00036095 | ||
221 | :100DC0000301A9201C0080AC0400A0200120000029 | ||
222 | :100DD000A440286816602C681E607C007E0E71207E | ||
223 | :100DE000403540708CA08000C000FC1688A0803583 | ||
224 | :100DF0000A2D0080427006A07F0E7C007E0E7120BE | ||
225 | :100E00004035092080354072218211824800161732 | ||
226 | :100E10000421088106ADC000051719811E21088133 | ||
227 | :100E200018831182C8000E17427406A07F0E7C0042 | ||
228 | :100E3000781092169120008004681E7865A040000A | ||
229 | :100E40005F1778002917002C1E78006065A040000D | ||
230 | :100E50005F170C6006A3C0002317086006A2C0003D | ||
231 | :100E60002317282C01204F35042006AC40005F17C3 | ||
232 | :100E7000046806ACC000461700606020066805A044 | ||
233 | :100E8000C0004617036800007800501700641C7803 | ||
234 | :100E90006020026486A40000C0005017002C026885 | ||
235 | :100EA00060257810DF16176005001F60200078109D | ||
236 | :100EB000CB171068018012680120FFFF05A07C009D | ||
237 | :100EC0003920000041202100492004005120080061 | ||
238 | :100ED0009120008078109F16388784A70700C000F3 | ||
239 | :100EE0006A17BCA700FF3F8738873F8784A7000F9A | ||
240 | :100EF000C0006A17912001807C006120000018600A | ||
241 | :100F000084A00100C0008A17AC78AF78000005A06B | ||
242 | :100F1000C0008B177C008CA0F0FF40009117781068 | ||
243 | :100F2000A51B79009317A317A517AB17AF17A31726 | ||
244 | :100F3000B317A317A317A317A317B917BD17A317A1 | ||
245 | :100F4000A317A317A3177810A51B7810601701200B | ||
246 | :100F500001807800C317012003807800C3170120A7 | ||
247 | :100F600004807800C317781060170120068078008D | ||
248 | :100F7000C31701200C807800C31778106017012078 | ||
249 | :100F80000D807800C317C270612000001B60010053 | ||
250 | :100F9000912080407C00042C8260082C632000009B | ||
251 | :100FA000647800806678687805A06A794000DB176D | ||
252 | :100FB000022C7800DC176E797C007E0C61200035F5 | ||
253 | :100FC00083680301082D6B20000064600080666068 | ||
254 | :100FD000686005A06A614000F017022D7800F117E3 | ||
255 | :100FE0006E617F0C7C0078100418400003187E0CA2 | ||
256 | :100FF000986065A04000FE177810D2167F0C9B60A9 | ||
257 | :101000000000781078167C006C7865A040001618F7 | ||
258 | :1010100091200080647801806678042C6E7805A0A9 | ||
259 | :10102000C00014186A780080912001807C009878B4 | ||
260 | :1010300005A0C00065187479D07005000500D07255 | ||
261 | :1010400006A2C0001C18002206A1C00033180478B4 | ||
262 | :1010500005A0400065180778000068006518912019 | ||
263 | :1010600080407800651878106F16400065187C7A0B | ||
264 | :10107000787B07810480048010A299A300000920D6 | ||
265 | :10108000400078103F1640005C1878107816807881 | ||
266 | :101090000080827886A00200C00065189120008040 | ||
267 | :1010A000AF78020083780000987885A003009A78D2 | ||
268 | :1010B00091200180780065188378000078109219DB | ||
269 | :1010C000006084A00700790066187C006E187D1807 | ||
270 | :1010D0009D186E18AF186E186E186E18392000041F | ||
271 | :1010E000A87805A7AA78046005A706607810ED180F | ||
272 | :1010F0001860A67878107A197C00A87884A000017E | ||
273 | :101100004000841878006E18AB78000000600780FB | ||
274 | :1011100084A0FF009E7801809B60000040009A1828 | ||
275 | :101120007810ED1840009A18A87885A00001AA78D8 | ||
276 | :1011300078009C18781011197C00A8788CA0000EFB | ||
277 | :10114000C000A61884A00001C000A81878006E187E | ||
278 | :101150007810ED18C000AE18781011197C00A8782E | ||
279 | :1011600084A000014000B61878006E18AB7800002B | ||
280 | :101170001067A9200100146084A0FF0005A04000B2 | ||
281 | :10118000D318BCA700FFA92008008EA001004000D2 | ||
282 | :10119000D31839200000A92080008EA00200400052 | ||
283 | :1011A000D3187800EA1878109216002D912000804C | ||
284 | :1011B0002B6800002F680000086884A0DEFF0A6822 | ||
285 | :1011C000002D80A010006820912001807000EA1896 | ||
286 | :1011D0007800D618781078167C00A0786DA0C00032 | ||
287 | :1011E000F818002CA278A6789B60000078000419FB | ||
288 | :1011F000002C9A689B600000A278002D0260A47801 | ||
289 | :1012000006ADC000041902609C7801809E78C00081 | ||
290 | :101210001019A87884A00000AA78A478602006A0FD | ||
291 | :101220007C002EA03025186184A160009E614000E2 | ||
292 | :101230001D197E0E7810132F7F0E9265A26596669B | ||
293 | :10124000A666AB600000AF600000106778109216D1 | ||
294 | :1012500091200080086884A0010040003F1991207F | ||
295 | :1012600001807810DF16912000807810CB17912034 | ||
296 | :101270000180A3780000A778000078007919206029 | ||
297 | :1012800096A00100C000461900802260106A146810 | ||
298 | :101290009120018002A248005519400055193920BB | ||
299 | :1012A000000278107A1978007919082C91200080B2 | ||
300 | :1012B000006865A040005D1902610269C000611903 | ||
301 | :1012C00006696021036000001068008012689120A8 | ||
302 | :1012D000018008688CA040004000731986A040007F | ||
303 | :1012E0000A687810EE167810191AA7780000A3780B | ||
304 | :1012F00000007C00046005A7066091200080781043 | ||
305 | :10130000CB1791200180A47865A040008D199860CA | ||
306 | :10131000A6789B60000078007D19A3780000A7786C | ||
307 | :1013200000007C007079747800800AA1C8009919C7 | ||
308 | :1013300006A07678D270047805A04000A719018035 | ||
309 | :101340000678C000A7196800A719912080407C008A | ||
310 | :101350006800C219292000006C7865A04000BD1902 | ||
311 | :101360007810C3194000BD197E057810D9197F0582 | ||
312 | :10137000C000BD1928857800AC19FF854000C2194E | ||
313 | :10138000912080407C00847B8879D4720500050020 | ||
314 | :10139000D47006A2C000C519002202A1C000D31952 | ||
315 | :1013A000002305A07C004800D71902A37C0002801E | ||
316 | :1013B0007C0078100B1A09201C00246005A0400056 | ||
317 | :1013C000E31909204000781011164000FC199478A8 | ||
318 | :1013D0000080967886A00200C0000A1A9120008042 | ||
319 | :1013E000AF78030097780000987885A000039A787A | ||
320 | :1013F0009120018078000A1A977800007810F3177E | ||
321 | :101400008479887800800AA1C800071A06A08A7823 | ||
322 | :10141000D67006A07C00078104800480907A8C7BC3 | ||
323 | :1014200010A299A300007C0009206835912000805B | ||
324 | :101430000A207E0F7920000109204035912000808C | ||
325 | :10144000042186A00000C000341A092012350421AE | ||
326 | :1014500005A0C000341A307884A0C000C000341A3F | ||
327 | :101460001800341A1B784400912001807F0F7C0003 | ||
328 | :101470007E1291200023712040357920000119202F | ||
329 | :10148000D82DA1202B01042305A04000501A9A78E2 | ||
330 | :101490001883AC2318839823A65318337800431A73 | ||
331 | :1014A0009B782000A9201000AF780000AF782002C0 | ||
332 | :1014B00070005C1A7800541A0370000078105B1BEF | ||
333 | :1014C000047084A00F0085A0806206780F780092D7 | ||
334 | :1014D0004378D800537880000B78380047707F3508 | ||
335 | :1014E000437000007F1200207C008CA10F001120AF | ||
336 | :1014F0000101042284A0F0FF05A1122078105B1BDB | ||
337 | :101500007C0011200101A92009000B8170008A1ABA | ||
338 | :101510007800851A8CA1000E042284A0FFF105A199 | ||
339 | :1015200012207C0009200101A9200500138270000F | ||
340 | :101530009B1A7800961A94A2E000042184A01FFF51 | ||
341 | :1015400005A20A207C0011200101A9200C000B81BA | ||
342 | :101550007000AC1A7800A71A8CA100F0042284A0B5 | ||
343 | :10156000FF0F05A112207C0011200201042284A09B | ||
344 | :10157000CFFF05A112207C000381038080A0200002 | ||
345 | :101580007E0C612000019A60AC62AC637F0C7C0031 | ||
346 | :101590000381038080A022007E0C612000019A60FC | ||
347 | :1015A000A46084A0DFFFAE607F0C7C000381038019 | ||
348 | :1015B00080A022007E0C612000019A60A46085A0BA | ||
349 | :1015C0002000AE607F0C7C000381038080A020009F | ||
350 | :1015D0007E0C612000019A60A460AE621020A460BD | ||
351 | :1015E000AE6318207F0C7C00912000807E0C7E0E64 | ||
352 | :1015F000186805A04000391B6120803F7810411B0E | ||
353 | :101600004000271BA92000006120803E7E0C78103E | ||
354 | :10161000411B4000131B7F0C608C7000111B780075 | ||
355 | :10162000061B7800391B7F0082A0803E7120403568 | ||
356 | :10163000BA701C6085A000081E60B671A76000002B | ||
357 | :1016400001200400A2707810141A7800351B712054 | ||
358 | :1016500040351C6085A000081E60B671A7600000C0 | ||
359 | :1016600001200600A2707810141A012000007800F2 | ||
360 | :101670003B1B012001009120018005A07F0E7F0C03 | ||
361 | :101680007C00042C05A04000581B60200C6006A3C1 | ||
362 | :10169000C000551B086006A2C000551B106006A1C3 | ||
363 | :1016A000C000551B06A078005A1B00607800421B42 | ||
364 | :1016B00085A001007C00112041350C228CA10F0077 | ||
365 | :1016C00011203B01042284A0000140006A1B21205C | ||
366 | :1016D00080FF22217C007E0EE4688CA02000400068 | ||
367 | :1016E000A31B84A00600C000A31B1060078084A079 | ||
368 | :1016F0000F00038003800380F0A00036047084A0F4 | ||
369 | :101700000A00C000A31B087194A100FF4000A31BA6 | ||
370 | :101710008CA1FF000120190006A14000961B0120AA | ||
371 | :10172000320006A140009A1B78009E1B0920200071 | ||
372 | :101730007800A01B09203F007800A01B11200000AA | ||
373 | :10174000002105A20A707F0E7C006800A51B7E00A8 | ||
374 | :1017500071200000187084A00100C000AA1B7F0047 | ||
375 | :10176000082E71201000CA707F00C670C3700280FE | ||
376 | :10177000712000001B700100912080407F007020CC | ||
377 | :101780007F007800C11B7E107E007E129120002316 | ||
378 | :101790003C7F587E307C387D94A53F0084A4004077 | ||
379 | :1017A0004000D81B84A77C00C0009C2D7810A51B8E | ||
380 | :1017B0009CA40F0082A304005000E01B7810A51B1E | ||
381 | :1017C000078584A00F007900E51BEA1F9A20C0203E | ||
382 | :1017D000E6226B25B325EA256526BF2644270B1C88 | ||
383 | :1017E000F51B531E1D1F4A25F51B7810A51B18005D | ||
384 | :1017F000C81B7F12912001807F007F107C00037046 | ||
385 | :1018000000003F700000307005A04000091C3370DC | ||
386 | :1018100000001800C81B5C7005A0C000B61CA070BA | ||
387 | :1018200084A007007900141CD61C1C1C2A1C4B1C0D | ||
388 | :10183000711C9D1C9B1C1C1C087884A0FDFF0A7851 | ||
389 | :101840000920460078101224C000281C03700400F0 | ||
390 | :101850007800F71B78105E2DC000491CB47007801B | ||
391 | :101860009B787E00AA789B781000AB780C009B7860 | ||
392 | :101870006000AB7801005B7804000920F700781065 | ||
393 | :101880001024C000491C03700400C3700F003370A3 | ||
394 | :1018900070357800F71B78105E2DC0006F1CB47196 | ||
395 | :1018A00007819B787E00AA789B7810008CA10700A6 | ||
396 | :1018B0008DA1C000AA79AB7806009B786000AB7858 | ||
397 | :1018C00002005B7804000920F70078101024C000A3 | ||
398 | :1018D0006F1C03700400C3700F0033707035780004 | ||
399 | :1018E000F71B78105E2DC000991CB47107819B789E | ||
400 | :1018F0007E00AA789B7810008CA107008DA1C00003 | ||
401 | :10190000AA79AB782000B871AA79AB780D009B78E2 | ||
402 | :101910006000AB7804005B7804000920F7007810C1 | ||
403 | :101920001024C000991C03700400C3700F003370B2 | ||
404 | :1019300070357800F71B78004B1C78105E2DC000C6 | ||
405 | :10194000F71BBC7068209B781000106F7810A12CDA | ||
406 | :10195000502C106884A0070085A08000AA78186E1B | ||
407 | :1019600041200100012004007800DE1D78105E2D6A | ||
408 | :10197000C000F71B9B7810005C706820106F781017 | ||
409 | :10198000A12C502C086085A010000A60106884A06B | ||
410 | :10199000070085A08000AA783120200041200100A6 | ||
411 | :1019A0007810C52D012003007800C91D1800C81B40 | ||
412 | :1019B000407485A400004000F01C80A080353020D9 | ||
413 | :1019C000447108812AA14800E71C09208035642160 | ||
414 | :1019D0000465FF85C000FD1C2184C000E11C467128 | ||
415 | :1019E000037000003F7000007800F71B4076B0A63F | ||
416 | :1019F0008035447100267800EC1C46716825582516 | ||
417 | :101A00003E75502C346085A00000C000FA1C0867A9 | ||
418 | :101A1000367784A73F0140002F1D84A72100C00016 | ||
419 | :101A2000FA1C84A7020040001C1D84A7040040008B | ||
420 | :101A3000FA1CBCA7FBFF0A6784A70800C000FA1CB9 | ||
421 | :101A400084A71000C000FA1C84A7000140002F1DCD | ||
422 | :101A5000186005A0C000FA1CBCA7FFFE0A671F683B | ||
423 | :101A60000000186E84A60E00186140003F1D1C6027 | ||
424 | :101A700002A14800421D4000421D7800F61CFF8173 | ||
425 | :101A8000C000F61C84A78000C000481D0C702260B6 | ||
426 | :101A9000BCA77FFF0A67106B078384A00F00038039 | ||
427 | :101AA0000380038080A00036602048204A700060D8 | ||
428 | :101AB0004E7004605270602A1800C81B9B7810009A | ||
429 | :101AC00046A078105E2DC000F71B106B9CA307008A | ||
430 | :101AD0009DA3C0004C7084A000804000731D84A6AC | ||
431 | :101AE00001004000751D9CA3BFFF84A610004000AC | ||
432 | :101AF0007B1D9DA32000AA7B408884A60E00C00009 | ||
433 | :101B0000861DBDA710000A677800C71D4C718CA107 | ||
434 | :101B100000084000022911202100048004804800B0 | ||
435 | :101B20009D1D11202200048048009D1D11202000D1 | ||
436 | :101B3000048048009D1D4000C71DAA7A4088781087 | ||
437 | :101B4000772D106A0C6108818CA1FF00E0A1803E16 | ||
438 | :101B5000642CFF8C4000BE1D106006A2C000A81DB2 | ||
439 | :101B6000B4600180B660C000A31D7E0C602A0860CE | ||
440 | :101B700085A000010A607F0C7800D61C78105E2DCD | ||
441 | :101B8000C000F71B602A0E61AA7940882E710120DF | ||
442 | :101B900001007E00507184A118004000DD1D84A169 | ||
443 | :101BA00010004000D71D7810CC2AC000DD1D84A194 | ||
444 | :101BB00008004000DD1D7810E6297F0002708CA629 | ||
445 | :101BC0006000FF884000E61D8DA104005A79B269CB | ||
446 | :101BD0009B7860000028AA789B786100146885A033 | ||
447 | :101BE00000801668AA787E157E137E14A1202C0131 | ||
448 | :101BF0009B7800000080AC8080AD0A009820A6533E | ||
449 | :101C00007F147F137F15106807809B787E00AA7869 | ||
450 | :101C1000906DD67DDE7D946ED27EDA7E307884A0A3 | ||
451 | :101C2000C000C000151E98001D1E086084A0EFFFB4 | ||
452 | :101C30000A607810772D7800FF1B007284A20700DD | ||
453 | :101C400086A00100C0002A1E1B7849007810772D5D | ||
454 | :101C500078003B1EB06A95A200205A7A1B78490092 | ||
455 | :101C60007810772D0072002505A640003B1E84A247 | ||
456 | :101C700007007910491E80AD0800327084A2070069 | ||
457 | :101C800086A00100C000471E186000801A6078001E | ||
458 | :101C9000F71B511EF030F030DF30F030511E511E76 | ||
459 | :101CA000511E7810A51B087884A0FDFF0A787E0FCE | ||
460 | :101CB0007920003598787F0F84A001004000791EBC | ||
461 | :101CC000A07086A00100C000681EA2707800011FED | ||
462 | :101CD000A07086A00500C000771EBC706820176841 | ||
463 | :101CE0000400136800001C6885A008001E68A3702B | ||
464 | :101CF00000007E1511200400A07186A101004000A3 | ||
465 | :101D00009B1E86A10700C0008B1E09202B350B20CF | ||
466 | :101D1000050078009B1E0920133504210920123587 | ||
467 | :101D20000A2009202B350B200100A3700000A770AA | ||
468 | :101D3000010078009D1EA37000007810C72EA92016 | ||
469 | :101D40001000392000007810A62BB8A70001700001 | ||
470 | :101D5000AB1E7800A31E007020207900AF1EDD1E90 | ||
471 | :101D6000C61EC61EB91EDD1EDD1EB71EB71E7810AC | ||
472 | :101D7000A51B21205735042405A04000C61E06AD32 | ||
473 | :101D8000C000C61E006822207800D61E1C6884A0F1 | ||
474 | :101D90000100C000D21E106F7810A12C7810D92835 | ||
475 | :101DA0007800D61E5470602000680260166A1C68B5 | ||
476 | :101DB00085A008001E687810DD172120803F78106C | ||
477 | :101DC000071F212057357810071FA9200000212068 | ||
478 | :101DD000803E7810071F20847000F01E7800E91EF6 | ||
479 | :101DE000A9208000612080361860106102A1126075 | ||
480 | :101DF0001B600000E0AC10007000001F7800F41EB3 | ||
481 | :101E00007F15037000003F7000007800F71B7E0410 | ||
482 | :101E1000042405A04000191F682000687E00166A8F | ||
483 | :101E20001C6885A008001E687810DD177F00780008 | ||
484 | :101E3000091F7F04232000007C0082A203005000C1 | ||
485 | :101E4000231F7810A51B00237900261F291F9C1F24 | ||
486 | :101E5000AA1F82A2020040002F1F7810A51BA070AD | ||
487 | :101E6000A3700000C37000007900361F3E1F3E1FA4 | ||
488 | :101E7000401F741F08293E1F741F3E1F7810A51BAA | ||
489 | :101E8000B4777810A62BB477BCA7000F7810A12CDC | ||
490 | :101E9000186005A040006B1F2120803F092004002E | ||
491 | :101EA000112010007810C51F40006B1F7E15A9205F | ||
492 | :101EB00000002120803E7E04092004001120100033 | ||
493 | :101EC0007810C51F7F0440006A1F208470006A1FBD | ||
494 | :101ED00078005B1F7F15388784A70700C000461F66 | ||
495 | :101EE0007800FF1B7800FF1BB4777810A12C1860D6 | ||
496 | :101EF00005A040009A1F2120803F092005001120E5 | ||
497 | :101F000020007810C51F40009A1F7E15A9200000F0 | ||
498 | :101F10002120803E7E040920050011202000781039 | ||
499 | :101F2000C51F7F044000991F20847000991F78000E | ||
500 | :101F30008A1F7F157800FF1B002279009F1FA21FB8 | ||
501 | :101F4000A41FA41F7810A51BA3700000A770010098 | ||
502 | :101F50007800F71B00227900AD1FB21FA41FB01F2D | ||
503 | :101F60007810A51B78101F24007086A00100C00007 | ||
504 | :101F7000AF287810EF28086084A0EFFF0A6078107F | ||
505 | :101F8000A2284000AF287800D61C042405A04000F9 | ||
506 | :101F9000E61F6820042D7E00106806A74000D41FAD | ||
507 | :101FA000202D7F007800C61F7F00222016691C6844 | ||
508 | :101FB00005A21E687810DD171060018012600860AD | ||
509 | :101FC00084A0EFFF0A607810EF287C0085A0010054 | ||
510 | :101FD0007800E51F00237900ED1FF21FF01F352068 | ||
511 | :101FE0007810A51BE47805A0D00015201800152056 | ||
512 | :101FF000082084A03000C00001201B784900780030 | ||
513 | :10200000F71BEC7884A003004000FD1F002184A092 | ||
514 | :10201000070079000B20232029201D201320582D94 | ||
515 | :10202000582D13202F207810A51B007005A040000C | ||
516 | :10203000FF1B012003007800FA227810892B1B78FF | ||
517 | :1020400055007800F71B7810892B1B78DC0078008E | ||
518 | :10205000F71B7810892B1B78E3007800F71B7810AA | ||
519 | :10206000892B1B789D007800F71B84A50F00C0000A | ||
520 | :102070005F2078101F24007079003E2046205320F6 | ||
521 | :102080004620AF284820AF28462046207810A51BC0 | ||
522 | :10209000A071A370000086A10400C0005120780048 | ||
523 | :1020A00008297800AF287810EF28086084A0EFFF97 | ||
524 | :1020B0000A607810A2284000AF287800D61CE47887 | ||
525 | :1020C00005A0D000152018001520082084A030009D | ||
526 | :1020D000C0006E201B7849007800F71BEC7884A0C4 | ||
527 | :1020E000030040006A20002184A1070079007820C5 | ||
528 | :1020F00088208E2082208020582D582D8020502D21 | ||
529 | :102100007810A51B7810912B1B7855007800F71BD1 | ||
530 | :102110007810912B1B78DC007800F71B7810912B3E | ||
531 | :102120001B78E3007800F71B7810912B1B789D003B | ||
532 | :102130007800F71B002379009D20A220A020A42076 | ||
533 | :102140007810A51B7800652617680800A3780000A2 | ||
534 | :10215000E47984A1300040006526EC7884A0030077 | ||
535 | :102160004000652684A107007900B620232029209D | ||
536 | :102170001D20302D582D582DBE20502D7810A51B18 | ||
537 | :1021800082A205005000C6207810A51B002379000C | ||
538 | :10219000C920CC20CE22DA2200227900CF20D42000 | ||
539 | :1021A000D620E920D420B3227810A51B9B781800F4 | ||
540 | :1021B000A87884A0FF0082A0200048006A2B8AA093 | ||
541 | :1021C0000400C8006A2B7900E5206A2B6A2B6A2B71 | ||
542 | :1021D0000C2B9B781800A87984A180004000FE2079 | ||
543 | :1021E00084A118004000FA2078006A2B007005A036 | ||
544 | :1021F000C000F420112003007800522784A1FF00C2 | ||
545 | :102200008AA01000C8006A2B790006211821162127 | ||
546 | :102210002E213021C2216A2B6A2BC4216A2B6A2B02 | ||
547 | :10222000AF22AF226A2B6A2B6A2BB1227810A51B32 | ||
548 | :1022300084A60010400025210120000300800080BA | ||
549 | :102240003A781B789A007800F71B146884A0008005 | ||
550 | :1022500040002C21176803007800302D7810A51B52 | ||
551 | :102260001C691E6984A60018C0004A211C6884A04D | ||
552 | :102270000100C0005221146886A00800C00042215D | ||
553 | :102280001768000084A600044000BE211B78580097 | ||
554 | :102290007800F71B84A60010400052211B785800DC | ||
555 | :1022A0007800F71B84A660004000BA2184A60008CD | ||
556 | :1022B0004000BA2184A60080C000602178007A2105 | ||
557 | :1022C000B4A6FF7F5A7EB26E9B787400AC7AAC796C | ||
558 | :1022D000AC781B80C8006D21008084A03F0008A15D | ||
559 | :1022E00091A20000946B002102A3AE68906B0022C3 | ||
560 | :1022F00003A3AA6884A6004040008221B4A6FFBFC1 | ||
561 | :102300005A7EB26E007086A00300C0008F21781044 | ||
562 | :102310003A2F7810DF301B7867007800F71B06A093 | ||
563 | :1023200078109431AC6AA869946C906B002205A176 | ||
564 | :1023300040009E21002222A400211BA3D27CD67B38 | ||
565 | :10234000002305A4C000AC21B5A600405A7EB26EA1 | ||
566 | :102350001B7867007800F71B1B786700002215A127 | ||
567 | :10236000C000B6217810F0307800F71B78101D31CE | ||
568 | :102370007800F71B1B786A007800F71B1B78580061 | ||
569 | :102380007800F71B7810A51B780021221C6984A116 | ||
570 | :1023900000014000DC218CA1FFFE1E697E0C48700C | ||
571 | :1023A0006020006084A0FFEF0260046084A0F5FF5D | ||
572 | :1023B00006607F0C7800102284A1000240001022E9 | ||
573 | :1023C0008CA1FFFD1E697E0C48706020006084A017 | ||
574 | :1023D000FFDF0260046084A0EFFF06600820482C45 | ||
575 | :1023E0007F0C84A108004000102278109D2C7810EA | ||
576 | :1023F000E629FF88400010229B7860000028AA7818 | ||
577 | :10240000587EB5A604005A7E84A60004C0000C22A3 | ||
578 | :102410001B7855007800F71B1B7869007800F71BC4 | ||
579 | :10242000587E84A60004C00019221B78580078004A | ||
580 | :10243000F71B1B786A007800F71B7800702B780078 | ||
581 | :10244000702B1920000090798CA1070040001F22FA | ||
582 | :102450009B781000A87894A0FF0086A20100C0001D | ||
583 | :1024600044220023A87C00A4182002A140003C22A2 | ||
584 | :1024700048003C2278003E227800C621A824A87A91 | ||
585 | :10248000F0003E2278002A2284A2F00086A02000DC | ||
586 | :10249000C000A02218831883002302A14000542208 | ||
587 | :1024A0004800542278009D2286A2230040001F226B | ||
588 | :1024B000186884A0F1FF1A68587E84A6F1FF85A0F1 | ||
589 | :1024C000100030205A7E086085A010000A607E0C43 | ||
590 | :1024D0004870602004600820482C7F0C84A1100004 | ||
591 | :1024E0004000782278109D2C7810CC2A7800872222 | ||
592 | :1024F0007E0C4870602004600820482C7F0C84A16A | ||
593 | :1025000008004000102278109D2C7810E629FF88E2 | ||
594 | :10251000400010229B7860000028AA78B5A604002D | ||
595 | :102520005A7E84A60004C00099221B7855007800CA | ||
596 | :10253000F71B1B7869007800F71BA87A78002A221D | ||
597 | :102540001883002302A14000A9224800A922780094 | ||
598 | :102550002A2284A28000C000762B7800702B78009D | ||
599 | :10256000762B78006A2B9B781800A87884A0FF004F | ||
600 | :102570008EA001004000BE227810A51BA87A94A26C | ||
601 | :10258000FF00A87884A0FF008AA00400C8006A2B7E | ||
602 | :102590007900CA226A2B39296A2B672A82A2000095 | ||
603 | :1025A000C000D4227810A51B7810892B1B786900F5 | ||
604 | :1025B0007800F71B82A20300C000E0227810A51B60 | ||
605 | :1025C0007810992B1B7869007800F71B82A2040011 | ||
606 | :1025D0005000EC227810A51B00237900EF22F22294 | ||
607 | :1025E000C923FA2386A203004000F8227810A51B15 | ||
608 | :1025F000012000003A70007084A0070079000023D9 | ||
609 | :1026000008230A230A2308253025D2240823082377 | ||
610 | :102610007810A51B84A60010C00012237810C72EC6 | ||
611 | :102620004000A32368788CA0FF0040005A2386A1B5 | ||
612 | :102630000800C00029237810EF28086084A0EFFF6D | ||
613 | :102640000A607810A22840005A237810C72E78001C | ||
614 | :10265000412386A12800C0005A237810C72E0860A5 | ||
615 | :1026600084A0EFFF0A60186005A0400041230180AC | ||
616 | :102670001A6005A040004123018005A040004123CD | ||
617 | :102680001E601C6884A001004000FF1B1C6884A021 | ||
618 | :10269000FEFF1E6854707E0C6020006802607F0C94 | ||
619 | :1026A0000460026805A0002DC00057230260066088 | ||
620 | :1026B0007800FF1B7E0178101F247F0184A600DFB5 | ||
621 | :1026C0001A6827680000106FFF814000A32386A1CD | ||
622 | :1026D0000200C0009B2384A60008C000772384A6C4 | ||
623 | :1026E000600040007723D878DC7A2E682A6A178742 | ||
624 | :1026F00094A20F0013821382138290A2003690A23C | ||
625 | :1027000000001C2284A30001C000882378008E23CF | ||
626 | :102710001082042285A018001220118284A30004D4 | ||
627 | :1027200040009B239C6884A00001C0009B2378107C | ||
628 | :1027300091247800FF1B86A118004000A32386A1E6 | ||
629 | :1027400014004000FF1B1269146884A00080400040 | ||
630 | :10275000AB23387016688CA600DF1A697810E02861 | ||
631 | :102760007810EF28C000B823086084A0EFFF0A604B | ||
632 | :102770001C6884A00100C000C1237810D92878000B | ||
633 | :10278000C52354706020006802607810DD1778005F | ||
634 | :10279000FF1B82A204004800CF237810A51B002253 | ||
635 | :1027A0007900D223D623D823E523D8237810A51B7C | ||
636 | :1027B000007086A005004000E1237810892B1B786B | ||
637 | :1027C00069001B786A007800F71B90780780018009 | ||
638 | :1027D00084A0070080A018009A78A8798CA1FF0037 | ||
639 | :1027E00086A103004000F62378006A2B1B786A005C | ||
640 | :1027F0007800F71B1C6885A004001E68FF82C000DB | ||
641 | :1028000005247810892B78000C24118240000A24BA | ||
642 | :102810007810A51B7810992B1B7869007800F71B9E | ||
643 | :102820007810772D307884A0C000C0001C241800D8 | ||
644 | :102830001C241A7906A07C0085A001007C0084A6D7 | ||
645 | :102840006000C00029242F6800002B680000780079 | ||
646 | :10285000902484A60008C0003824B06884A00048F2 | ||
647 | :1028600035A684A60008C00038247810C72E7C0046 | ||
648 | :1028700084A6200040006224D0780380C80046244B | ||
649 | :1028800006A078109431D4787810F93184A60040ED | ||
650 | :10289000400050242F6800002B6800007800352489 | ||
651 | :1028A000B06884A0004835A684A60040C0004A2431 | ||
652 | :1028B000387005A0C0005C24D879DC7A2E692A6AB9 | ||
653 | :1028C0007800352484A6004040006C242F68000066 | ||
654 | :1028D0002B68000078003524B06884A0004835A635 | ||
655 | :1028E00084A60040C0006624387005A0C0007A2489 | ||
656 | :1028F0003B700700D879DC7AD078F380C800812457 | ||
657 | :10290000008084A03F0008A191A200002E692A6ADD | ||
658 | :10291000002105A2C0008E2478003524781094315F | ||
659 | :102920007C0084A3000240009924086085A0020076 | ||
660 | :102930000A6017680600286A2C693A6A3E692B68A3 | ||
661 | :1029400000032F6800003368002093680000976838 | ||
662 | :10295000200000707900AC24B424B624BF24B42431 | ||
663 | :10296000B424B424B424B4247810A51B1C6884A017 | ||
664 | :102970000100C000BF247810D9287800C524547005 | ||
665 | :10298000502C602000680260602A21205735042402 | ||
666 | :1029900005A04000CE2420207800C724222D6B20E3 | ||
667 | :1029A00000007C00B4777810A62BBCA7000F78102D | ||
668 | :1029B000A12C186005A0400001257E0D0120903F4C | ||
669 | :1029C00068207F0D2120803F092004001120100085 | ||
670 | :1029D0007810C51F400001257E15A9200000212088 | ||
671 | :1029E000803E7E0409200400112010007810C51FCD | ||
672 | :1029F0007F04400000252084700000257800F12429 | ||
673 | :102A00007F15388784A70700C000D7247800FF1BF4 | ||
674 | :102A10007810E0287810EF28276800009B780E00D7 | ||
675 | :102A2000106F136802007810CA3184A600084000B5 | ||
676 | :102A30001D2518698DA100201A69146884A00080E2 | ||
677 | :102A40004000242517680000212057350068222007 | ||
678 | :102A5000386A3C692A6A2E697810DD177800FF1BF6 | ||
679 | :102A600078101F24276800009B780E00106F7810E4 | ||
680 | :102A70007C2D8CA0FF001269146884A000804000A7 | ||
681 | :102A80004325387016688CA600DF1A69A370000011 | ||
682 | :102A90007800FF1B06A07810C72E13680000176887 | ||
683 | :102AA00001008CA600DF1A69276800000070790019 | ||
684 | :102AB00059256125632563256525652565256125DE | ||
685 | :102AC00061257810A51B7810EF28086084A0EFFF1F | ||
686 | :102AD0000A607800BA28002379006E2571257325D5 | ||
687 | :102AE000B1257810A51B0070790076257E258025FC | ||
688 | :102AF00080258B25802592257E257E257810A51B97 | ||
689 | :102B000084A60020C0008B25B5A600205A7E781030 | ||
690 | :102B1000F0307800302D146884A0008040009225A9 | ||
691 | :102B200017680700092018350C2186A10000400015 | ||
692 | :102B3000A72586A101004000AB2509202B350B20DD | ||
693 | :102B40000B00A37001001B7846007800F71B1B7870 | ||
694 | :102B5000DD007800F71B09202B350B200A007800D8 | ||
695 | :102B6000F71B7810A51B00237900B625B925BB25D6 | ||
696 | :102B7000DE257810A51B00707900BE25C625C82566 | ||
697 | :102B8000C825D325C825DA25C625C6257810A51B56 | ||
698 | :102B900084A60020C000D325B5A600205A7E781058 | ||
699 | :102BA000F0307800302D146884A000804000DA25D1 | ||
700 | :102BB000176807001B78E4007800F71B1C6885A0E5 | ||
701 | :102BC00004001E68B5A600087810892B1B786900E0 | ||
702 | :102BD0007800F71B00237900ED25F025F225F42578 | ||
703 | :102BE0007810A51B7810A51B84A60004C00013262E | ||
704 | :102BF0002B7809309B786000AB78000084A6FBFF3F | ||
705 | :102C00005A78E47984A1200040000B26EC7884A057 | ||
706 | :102C10000300C0000F26012014007800FA2284A1CE | ||
707 | :102C2000070079004B26907A94A207009B786000F9 | ||
708 | :102C3000A879FF81400049269B781000A87B84A3D7 | ||
709 | :102C40000100C0003A26A87BA87B86A30100C00033 | ||
710 | :102C50002D260920F7FF7800332686A30300C00045 | ||
711 | :102C60003A260920EFFF7E0C48706020046004A122 | ||
712 | :102C700006607F0C9B786000AB78000084A6FBFFA9 | ||
713 | :102C80005A782B7809301C698CA1FFFD8CA1FFFEBE | ||
714 | :102C90001E697800302D2320292055265D265326D5 | ||
715 | :102CA00053265326302D7810A51B1C698CA1FFFDDF | ||
716 | :102CB0008CA1FFFE1E697800382D1C698CA1FFFDD8 | ||
717 | :102CC0008CA1FFFE1E697800302DE47984A13000CC | ||
718 | :102CD00040006F26EC7884A00300C00077261468BB | ||
719 | :102CE00085A000801668012014007800FA2284A1D3 | ||
720 | :102CF000070079007B26302D302D8326302D582D6E | ||
721 | :102D0000582D302D302D84A60004C000B4261C6838 | ||
722 | :102D100084A001004000382D8CA660208CA1FBFF10 | ||
723 | :102D20005A79B2699B786000AB7800009B786100AB | ||
724 | :102D3000146885A000801668AA787E157E137E141C | ||
725 | :102D4000A1202C019B7800000080AC8080AD0A009F | ||
726 | :102D50009820A6537F147F137F15106807809B78F7 | ||
727 | :102D60007E00AA787800382D146884A00080400086 | ||
728 | :102D7000BB26176808001B78D8007800F71B0023D3 | ||
729 | :102D80007900C226C7264227C5267810A51B0070E9 | ||
730 | :102D900084A007007900CC26D426D626F226D42695 | ||
731 | :102DA000D426D224D426D4267810A51B1C698DA144 | ||
732 | :102DB00001001E690068066005A0C000E0260260F0 | ||
733 | :102DC000186884A00E004000EC261470B6682C71C0 | ||
734 | :102DD00088A1803E7800EE260920803F0421026809 | ||
735 | :102DE0000A2D5671B26E84A660004000402784A66A | ||
736 | :102DF0000008C000042784A6FF7FB268906894682A | ||
737 | :102E00007810C72E7800402784A62000400016279F | ||
738 | :102E100006A078109431D0780380C8001227D478A7 | ||
739 | :102E20007810F931D879DC7A78001A277810AE2C2E | ||
740 | :102E30007810943184A600804000402784A6FF7F4C | ||
741 | :102E4000B2689B78740078107C2D102078107C2D4F | ||
742 | :102E5000082084A62000C000382778107C2D1B8015 | ||
743 | :102E6000C8003327008084A03F0008A191A2000081 | ||
744 | :102E7000946B002102A3AE68906B002203A3AA68A2 | ||
745 | :102E80007800FF1B7800762B3370000082A20500CB | ||
746 | :102E900050004C277810A51B002379004F2752279C | ||
747 | :102EA0005C277F270022790055275A27762B5A273F | ||
748 | :102EB000A827F9277810A51B007086A00100C00084 | ||
749 | :102EC00069277810EF287810C72E34700A607800D0 | ||
750 | :102ED0006E27007086A00300400063270370050082 | ||
751 | :102EE0000120903F68203E703270002279007827E0 | ||
752 | :102EF000762B7D27A8277D27762B7810A51B0070C1 | ||
753 | :102F000086A00100C0008C277810EF287810C72E0B | ||
754 | :102F100034700A6078009127007086A0030040009A | ||
755 | :102F20008627037005000120903F68203E703270B4 | ||
756 | :102F3000002279009B27A227A027A227A027A2274B | ||
757 | :102F40007810A51B7810992B1B7869007800F71B67 | ||
758 | :102F5000007086A00100C000B5277810EF28781017 | ||
759 | :102F6000C72E34700A607800BA27007086A003006C | ||
760 | :102F70004000AF2703700200807A94A2000F9B7874 | ||
761 | :102F80001800A87C84A4070015A26920803F042DA6 | ||
762 | :102F9000082D5671682005A04000D527106806A2AC | ||
763 | :102FA0004000EE2700687800C82703700500012064 | ||
764 | :102FB000903F68203E7032707E15A9202F000320BC | ||
765 | :102FC000000000807000E6277800DF277F15126A76 | ||
766 | :102FD000B36800071F68000823680300B06E5A7EBC | ||
767 | :102FE0001C6884A0000C40004F287810912B7800BA | ||
768 | :102FF0004F28007086A00100C00006287810EF2836 | ||
769 | :103000007810C72E34700A6078000B28007086A0F4 | ||
770 | :1030100003004000002803700200807A94A2000F91 | ||
771 | :103020009B781800A87C84A4070015A2A879A87929 | ||
772 | :103030008CA1FF00E8A1803E042D082D5671682068 | ||
773 | :1030400005A040002A28106806A240004328006816 | ||
774 | :1030500078001D28037005000120903F68203E7015 | ||
775 | :1030600032707E15A9202F00032000000080700020 | ||
776 | :103070003B28780034287F15126AB36800071F6860 | ||
777 | :10308000000823680300B06E5A7E1C6884A0000C00 | ||
778 | :1030900040004F2878108D2B587E78004F287E02F4 | ||
779 | :1030A000078284A00F0003800380038080A0003685 | ||
780 | :1030B00060204A7000604E700460527084A6600008 | ||
781 | :1030C00040008628946B906CA869AC6805A1C0008C | ||
782 | :1030D0007428D27BDA7BD67CDE7CB4A6FFB75A7E1E | ||
783 | :1030E0007810F03078008628AC681AA3002123A459 | ||
784 | :1030F000002405A340008628D27BDA7BD67CDE7CC8 | ||
785 | :10310000AC68B4A6FFBF5A7E78101D317F077810D7 | ||
786 | :10311000A12C09206A0084A60800400091280920FB | ||
787 | :103120006900B5A600205A7E1A79002D3E700782EC | ||
788 | :1031300084A00F0003800380038080A00036482015 | ||
789 | :103140007800F71B206005A04000AE2801802260B7 | ||
790 | :10315000086085A008000A60107026607C0006A048 | ||
791 | :103160007810C72E13680000176801001F68400020 | ||
792 | :103170001B680001007084A007007900BF28C728E1 | ||
793 | :10318000C928C928D528D128C728C728C728781012 | ||
794 | :10319000A51B7810E0287810D9287810DD17780062 | ||
795 | :1031A000FF1BA37000007800FF1B17680000780069 | ||
796 | :1031B0000825006805A0C000DE28026006607C00CB | ||
797 | :1031C000106005A04000E9280180D000E9287810AF | ||
798 | :1031D000A51B1260086084A0EFFF0A607C001860E5 | ||
799 | :1031E00005A04000F52801801A607C007810772D3A | ||
800 | :1031F00017681800780026297810772D17681900AD | ||
801 | :10320000780026297810772D17681A00780026296B | ||
802 | :10321000B4777810A12CB8718CA1FF00E8A1803E92 | ||
803 | :10322000042D082D682005A0C00018297800FF1B78 | ||
804 | :103230001068B47206A240002029006878001129A5 | ||
805 | :1032400000680A2017680500BF7000007810E028A9 | ||
806 | :103250001C6884A00100C0002F297810D92878109C | ||
807 | :10326000EF281B6800001F6820007810DD17780029 | ||
808 | :10327000FF1B82A20300C0006A2BA87DACA5FF0043 | ||
809 | :10328000A87EB4A6FF001C698DA180001E6984A1E0 | ||
810 | :103290000001400099298CA1FFFE1E69B4A6FF0021 | ||
811 | :1032A0004000832982A60F0048005A2940005A296D | ||
812 | :1032B00031200F002B852B857810242C40006429A9 | ||
813 | :1032C0007810332A78008C297810DF2B7E0C602947 | ||
814 | :1032D000046084A0F5FF06607810572A7F0C1C69F3 | ||
815 | :1032E0008DA100011E69587EB5A604005A7E84A6F1 | ||
816 | :1032F0000004C0007F291B7855007800F71B1B785D | ||
817 | :1033000069007800F71B7E0C6029046084A0F5FF3B | ||
818 | :1033100006607810572A7F0C587E84A60004C000EF | ||
819 | :1033200095291B7858007800F71B1B786A007800F5 | ||
820 | :10333000F71B7E0C4870602000618CA100104000DB | ||
821 | :10334000D9290862178294A2FF0082A20F004800C8 | ||
822 | :10335000AD294000AD2911200F00002602A2C800AF | ||
823 | :10336000B2293022086294A2FF00187086A02800BB | ||
824 | :10337000C000C22982A21900C800C8291120190062 | ||
825 | :103380007800C82982A20C00C800C82911200C00AE | ||
826 | :10339000002202A5C800CD2928227810E32B2B8516 | ||
827 | :1033A0002B857810242C4000D9297810332A7800F6 | ||
828 | :1033B000DD297810DF2B7810572A587885A0040073 | ||
829 | :1033C0005A787F0C1B7869007800F71B7E0C602907 | ||
830 | :1033D000006084A00010C000012A106084A00F00CB | ||
831 | :1033E000C000FB298CA10200C000FB298CA1F5FFC5 | ||
832 | :1033F00006617F0C7C00112032001920000078004B | ||
833 | :10340000232A086294A2FF00187086A02800C0003A | ||
834 | :10341000112A82A21900C800172A11201900780069 | ||
835 | :10342000172A82A20C00C800172A11200C0008637A | ||
836 | :103430001F839CA3FF0082A30F004800232A4000A3 | ||
837 | :10344000232A19200F00AB780100AB780300AB787A | ||
838 | :103450000100AA7AAA7BC0A805001C6885A000010B | ||
839 | :103460001E687F0C7C007E0C48716021082084A0BF | ||
840 | :10347000F0FF35A6867E18609A78AE7E1266A47834 | ||
841 | :1034800084A0F8FF8CA1070005A1A67816608A78B1 | ||
842 | :10349000B4A60F0037860482048084A0FF0005A62E | ||
843 | :1034A0000E60046084A0F5FF06607F0C7C007E0C3B | ||
844 | :1034B0004870602018609A78A47884A0F0FFA678FD | ||
845 | :1034C0001260847884A0F0FF86787F0C7C0082A252 | ||
846 | :1034D0000200C0006A2BA87A1C698DA180001E69B9 | ||
847 | :1034E00084A100024000AC2A8CA1FFFD1E6994A2B9 | ||
848 | :1034F000FF0082A20200C8006A2B7810F32A78101D | ||
849 | :10350000572A80A901000C2078109D2C7810E629FC | ||
850 | :10351000FF8840009F2A9B7860000028AA78587E88 | ||
851 | :10352000B5A604005A7E84A60004C0009B2A1B781E | ||
852 | :1035300055007800F71B1B7869007800F71B587E50 | ||
853 | :1035400084A60004C000A82A1B7858007800F71B46 | ||
854 | :103550001B786A007800F71B82A20200C800B42A18 | ||
855 | :1035600084A201004000BE2A487188A100000C21FD | ||
856 | :103570008CA10020C000BE2A112000007810D12BA1 | ||
857 | :103580007810F32A7810572A587885A004005A78C2 | ||
858 | :103590001B7869007800F71B7E0C7E0260290060B2 | ||
859 | :1035A0001120010084A00020C000E32A146084A040 | ||
860 | :1035B0004000C000E12A8CA1EFFF066106A0780060 | ||
861 | :1035C000F02A11200000AB780100AB780200AB7844 | ||
862 | :1035D0000300AA7AC0A804001C6885A000021E6827 | ||
863 | :1035E0007F027F0C7C007E0C48706020FF824000D0 | ||
864 | :1035F000FB2A11204000186080A002009A78A4786D | ||
865 | :1036000084A0BFFF05A2A67816608A78046084A013 | ||
866 | :10361000EFFF06607F0C7C007E00007086A0030038 | ||
867 | :103620004000152B7F007800182B7F007800662B58 | ||
868 | :1036300084A620004000662B887884A040004000CB | ||
869 | :10364000662BA87801804000252BB87B84A33F001F | ||
870 | :103650001B83C8002C2B008005A040004D2B1B8332 | ||
871 | :10366000C800352B01804000622B06A078109431F1 | ||
872 | :10367000B4787810F9317800662B84A600404000B9 | ||
873 | :103680004D2BB8781B80C800462B008084A03F00DB | ||
874 | :10369000C000622BB4A6FFBF5A7ED879DC7A012025 | ||
875 | :1036A000010008A1C800562B91A20000D279DA7956 | ||
876 | :1036B000D67ADE7A781094311B78670078105E3005 | ||
877 | :1036C0007800F71B1B7867007800F71B1B786A00EF | ||
878 | :1036D0007800F71B78109D2B1B7869007800F71B8A | ||
879 | :1036E0007810892B1B7869007800F71B236802008B | ||
880 | :1036F0007810912B1C698DA120001E69146884A08C | ||
881 | :1037000000804000852B176805001B786900780051 | ||
882 | :10371000F71B0120050078009F2B01200C0078008A | ||
883 | :103720009F2B0120060078009F2B01200D007800C0 | ||
884 | :103730009F2B0120090078009F2B012007009B7818 | ||
885 | :103740007F00AA78B5A608005A7E7C007E073F87D6 | ||
886 | :10375000BCA70F003B873B870387E0A00036B8A7D4 | ||
887 | :1037600020009A7FA47984A10F004000BF2B84A180 | ||
888 | :10377000F0FFA6781260046085A008000660388714 | ||
889 | :1037800038879A7FA47984A140004000CF2B84A180 | ||
890 | :10379000BFFFA6781660046085A0100006607F0752 | ||
891 | :1037A0007C009B781000AB780100AB780200AB780E | ||
892 | :1037B0000300AA7A9B786000AB7804007C0031207B | ||
893 | :1037C0000000292032009B781000AB780100AB7814 | ||
894 | :1037D0000300AB780100AA7DAA7E9B786000AB78DD | ||
895 | :1037E00005007C007E15078084A0FF000380038015 | ||
896 | :1037F00080A020009A78A4798CA1F0FF01204635A2 | ||
897 | :10380000042082A0280040000D2C2120842C1920A7 | ||
898 | :103810001400A9200C007800132C2120902C1920D2 | ||
899 | :103820001900A9200D0011206400042484A0F0FFD9 | ||
900 | :1038300006A14000222C2084002310A27000222C1C | ||
901 | :103840007800152C7F157C007E151120463514223A | ||
902 | :1038500082A232004800382C40003C2C2120762CDB | ||
903 | :1038600019201100A9200E001120320078004C2CE4 | ||
904 | :1038700082A228004000442C2120842C192014000E | ||
905 | :10388000A9200C0078004A2C2120902C1920190026 | ||
906 | :10389000A9200D0011206400002202A540005C2C2C | ||
907 | :1038A00048005C2C2084002310A27000592C780062 | ||
908 | :1038B0004C2C7F1506A07C007F1582A56400C800F3 | ||
909 | :1038C000652C087885A070000A78EC7884A0000345 | ||
910 | :1038D0004000732C04249EA00112C000732C012010 | ||
911 | :1038E00001217800742C042405A07C000112023010 | ||
912 | :1038F0000232034203440454045605660568067800 | ||
913 | :10390000067A070A070C070E0232024202520262CE | ||
914 | :103910000272056605760578057A057C057E057FC9 | ||
915 | :1039200002220232024202520454046404740476F5 | ||
916 | :103930000478047A047C047E047F9B78100046A0FF | ||
917 | :103940007C0084A7000F0C8084A7070003800380FD | ||
918 | :103950000380038005A1E0A080367C00D879DC7A62 | ||
919 | :10396000D0781B80C800B52C008084A03F0008A13F | ||
920 | :1039700091A200007C007E0F7920000109204035D3 | ||
921 | :103980009120008004217900C52CF72CCF2CCF2C5E | ||
922 | :10399000CF2CCF2CCF2CCD2CCD2C7810A51B4B7839 | ||
923 | :1039A0000400487884A00400C000D12C4B780800A3 | ||
924 | :1039B000487884A00800C000D82CB06885A00040DA | ||
925 | :1039C000B268587885A000405A78307884A080008A | ||
926 | :1039D000C000F72C1800F72C186884A02000C00045 | ||
927 | :1039E000F52C1B78DD007800F72C1B78E400912083 | ||
928 | :1039F00001807F0F7C007E0C1068078084A00F0080 | ||
929 | :103A0000038003800380E0A00036046084A00A00E5 | ||
930 | :103A1000C0002E2D086194A100FF40002E2D8CA126 | ||
931 | :103A2000FF000120190006A140001D2D01203200D9 | ||
932 | :103A300006A14000212D7800252D092020007800C6 | ||
933 | :103A4000272D09203F007800272D1120000000219C | ||
934 | :103A500005A20A60046085A0020006607F0C7C005D | ||
935 | :103A60001B786A007800F71B1B7869007800F71B49 | ||
936 | :103A70001B7858007800F71B1B7855007800F71B5F | ||
937 | :103A80001B78DD007800F71B1B78DC007800F71B43 | ||
938 | :103A90001B78E4007800F71B1B78E3007800F71B25 | ||
939 | :103AA0001B789E007800F71B1B789D007800F71BA1 | ||
940 | :103AB000A37001001B7846007800F71B7E00307869 | ||
941 | :103AC00084A0C000C000752D087884A0FDFF0A788E | ||
942 | :103AD0000500050005000500EC7884A021004000E9 | ||
943 | :103AE000752D087885A002000A787F007C00087890 | ||
944 | :103AF00085A002000A787C00307884A04000C000D5 | ||
945 | :103B00007C2D9800852DAC787C00087884A0FDFF82 | ||
946 | :103B10000A780500050005000500EC7884A0210066 | ||
947 | :103B20004000942D9800922DAC787E00087885A0F6 | ||
948 | :103B300002000A787F007C0084A770004000A82D56 | ||
949 | :103B40007E0C602D682F78106B1B782D682C7F0CF5 | ||
950 | :103B500017680300587884A0003F1A682F68000097 | ||
951 | :103B60002B6800004B780800E47805A0D0001520F1 | ||
952 | :103B700084A0200040001520EC7884A003004000C1 | ||
953 | :103B80001520180015207800702B7E0C1068078017 | ||
954 | :103B900084A00F0003800380038080A00036602093 | ||
955 | :103BA00048204A7000604E70046052707F0C7C00A8 | ||
956 | :103BB0002000200000002000000020000000200065 | ||
957 | :103BC0000000200000002000000020000000200075 | ||
958 | :103BD0000000200000002000000020000000200065 | ||
959 | :103BE0000000200000002000000020000000200055 | ||
960 | :103BF000000020006200090014001400479814001F | ||
961 | :103C00001400F598E798140014008000BF0000012C | ||
962 | :103C10000204082080F80AA214000B300CA2140041 | ||
963 | :103C200000A238887E812A84A08406383988C22878 | ||
964 | :103C3000C39C05A864083BA80830C128C39C01A206 | ||
965 | :103C40000C30472861816A840080A48456183A8821 | ||
966 | :103C500008A8E228A09CF3A8640829A80C3001A8B1 | ||
967 | :103C60000830E128A09C0D2804A2C064A067C06FA2 | ||
968 | :103C700014183B882370768577860FA86E783E8867 | ||
969 | :103C80000CA82B2805A2A064A067C06F14183B885D | ||
970 | :103C900023707685778601A83E886920C128C39C59 | ||
971 | :103CA00044200321A2208120DCA807A2140003A243 | ||
972 | :103CB0000080A884A48572189A843C88E21F01F6CB | ||
973 | :103CC00008A26E856F8604070830A09C140002A22B | ||
974 | :103CD0000080A4850930A884E21948F87481EB8635 | ||
975 | :103CE000EB852E87A9873F88E608F1A861F8E8A848 | ||
976 | :103CF00001F8140081F81600B285F0803295A2FA1E | ||
977 | :103D0000E21D1400328521F21400E21DA884E0D6E1 | ||
978 | :103D1000E61F140006A265687F812A84C11D2388DE | ||
979 | :103D2000160042600880FAA80080A48460812A847A | ||
980 | :103D300021F00830A884C61DD720228816000080F4 | ||
981 | :103D400048281110FCA80830008000A0022811109B | ||
982 | :103D5000FDA887A808303D281110FDA809A217006A | ||
983 | :103D60000C300080A485E21DC1DA1400E0263A87F9 | ||
984 | :103D7000A2FAF219E21F14000BA214000DA27E8118 | ||
985 | :103D80002A84A08406381002CD9C040700007E120D | ||
986 | :103D9000912000224920C72E0070047205A20C72E7 | ||
987 | :103DA00015A2087084A0FDFF05A24000D92E78005E | ||
988 | :103DB000DE2E037000007F1200207C00007084A0C3 | ||
989 | :103DC0000100C0000C2F08710481C800EB2E781090 | ||
990 | :103DD000A82F7800E32E0C708CA07F0040000C2FE1 | ||
991 | :103DE00004700480C800032F147005A0C000FF2ECB | ||
992 | :103DF000107005A04000032F02A1C800E32E077039 | ||
993 | :103E0000100078000C2FFF8A40000C2F78106B31C7 | ||
994 | :103E1000C000062F4000E32E7810562F03700000DC | ||
995 | :103E20007F1200207C002464FF844000302F702C1F | ||
996 | :103E30003920352F042768AE0C6830A6086829A5FC | ||
997 | :103E400021844000302F3887042705A0C0001B2F95 | ||
998 | :103E5000987075A04000302F3920322F78001A2F2B | ||
999 | :103E60007C000000040008000C0010001400180082 | ||
1000 | :103E70001C0000007E129120002279200035712064 | ||
1001 | :103E8000100007700A000770020003700000712024 | ||
1002 | :103E9000200007700A00077002000370000049202C | ||
1003 | :103EA0000000B37800007F1200207C004920562FCC | ||
1004 | :103EB00004700480C800822F077012000871087017 | ||
1005 | :103EC00006A1C0005E2F84A1300040006B2F86A0A9 | ||
1006 | :103ED0003000C0005E2F007084A00100C000822F5F | ||
1007 | :103EE000087084A00C00C000802F0C7184A1000316 | ||
1008 | :103EF000C000802F84A17F00C000562F7800822F41 | ||
1009 | :103F0000176803000770120007700800047084A08F | ||
1010 | :103F10000800C000862F0770120008710481480055 | ||
1011 | :103F20008B2FB378000003700000492000007C0054 | ||
1012 | :103F30007E107E007E127E1591200022087178107E | ||
1013 | :103F4000A82F7F157F12912001807F007F107C00B9 | ||
1014 | :103F50000472182108710C7084A00003C000EA2FBD | ||
1015 | :103F600084A10C00C000EA2F1382138213821382F3 | ||
1016 | :103F700084A200010DA10B810B810F8184A1070098 | ||
1017 | :103F80007900C22FCC2FDC2FEA2FDC2FFE2FFE2F43 | ||
1018 | :103F9000EA2FFC2F7810A51B07700200FF8AC000D3 | ||
1019 | :103FA000D52F492000007800D92F78106B31C00040 | ||
1020 | :103FB000D52FB37800007C0007700200FF8AC00094 | ||
1021 | :103FC000E32F7800E72F78106B31C000E32FB37830 | ||
1022 | :103FD00000007C00077002007810562F7810BB2C70 | ||
1023 | :103FE000146884A000804000F72F176802007C004E | ||
1024 | :103FF0007810A51B7810A51B781050301072147122 | ||
1025 | :104000000C709CA07F00002800A311A289A10000D1 | ||
1026 | :10401000B07805A040001030B3780000780033304D | ||
1027 | :10402000781050300427582C60AC0C63002222A377 | ||
1028 | :10403000086300211BA3002405A340002930C80009 | ||
1029 | :104040002930128410820A8389A10000602B780035 | ||
1030 | :104050001030602B078ABAA7322F3DA7002C826848 | ||
1031 | :10406000866F8E6C8A6B077012007810562F7C005A | ||
1032 | :104070003887042705A0C0004430986005A04000A0 | ||
1033 | :104080004D3060203920322F518A40004C3008706A | ||
1034 | :1040900084A0C00086A0C0007C00512000007C00ED | ||
1035 | :1040A000508A3987042704A0C0005D303920382F9A | ||
1036 | :1040B000006064A0C0005D30602D7C007E127E0D2B | ||
1037 | :1040C000912000227F0D806860208468886B8C6C52 | ||
1038 | :1040D0005780D4AAFF0084A0FF00B8A0322F087E2A | ||
1039 | :1040E000B5A60C00186884A0400040007930B5A641 | ||
1040 | :1040F00001007E0F7920000158787F0F84A04000D6 | ||
1041 | :104100004000883084A60100C0008830B5A60100B8 | ||
1042 | :1041100007700400047084A00400C0008A3000709E | ||
1043 | :1041200005A0400095307810A51B002405A3C00011 | ||
1044 | :104130009B307800D830582C042760AC046000A471 | ||
1045 | :104140007E001A70006001A31E700920FD04042186 | ||
1046 | :1041500086A0FD047F00C000C83084A0010040009C | ||
1047 | :10416000C83084A60100C000C83013700100177069 | ||
1048 | :104170000000027607700100B3780100A0A40100DE | ||
1049 | :1041800099A30000046000A41A70006001A31E70CF | ||
1050 | :104190000C62002402A212700862002303A21670AF | ||
1051 | :1041A000027607700100602B781038307800DA3022 | ||
1052 | :1041B00078106B31C000D8307F1200207C007E1256 | ||
1053 | :1041C0007E0D912000227F0D07700400047084A0F2 | ||
1054 | :1041D0000400C000E630037008007F1200207C005D | ||
1055 | :1041E0007E127E0D912000227F0D4920F030077055 | ||
1056 | :1041F0000400047084A00400C000F930007005A021 | ||
1057 | :10420000400004317810A51B087EB5A60C00186884 | ||
1058 | :1042100084A0400040000E31B5A60100246805A02E | ||
1059 | :1042200040001A3150203920352F602D78106B3125 | ||
1060 | :10423000C00016317F1200207C007E127E007E01BD | ||
1061 | :104240007E0D912000227F0D7F037F04087EB5A69E | ||
1062 | :104250000C00186884A0400040003031B5A6010071 | ||
1063 | :1042600049201D31246855A040006831702D602E12 | ||
1064 | :104270003920352F042768AE0C6822A408681BA3D8 | ||
1065 | :1042800048005531518AC00047317810A51B388746 | ||
1066 | :10429000042705A0C0003B31987075A06020400045 | ||
1067 | :1042A00068313920322F78003A31228420841A83F1 | ||
1068 | :1042B00099A300000C69002422A1086900231BA116 | ||
1069 | :1042C000C80064317810A51B712020007800883068 | ||
1070 | :1042D0007F1200207C00087084A0C00086A0C0006F | ||
1071 | :1042E00040009331042708AC04211E70088104218A | ||
1072 | :1042F0001A700881042116700881042112707E0F43 | ||
1073 | :104300007920000158787F0F84A0400040008E3152 | ||
1074 | :1043100084A60100C0008E31B5A6010002760770A8 | ||
1075 | :104320000100781038307C007E127E007E0D9120D6 | ||
1076 | :104330000022492094317F0D7F08087184A1C000BC | ||
1077 | :10434000C000AA31246805A04000BA317800DE2EF2 | ||
1078 | :104350007800BA3108710481C800B2317810A82FF2 | ||
1079 | :1043600078009D310770100008710481C800B431D5 | ||
1080 | :104370007810A82F087086A00200C0009D31007040 | ||
1081 | :1043800005A0C0009D3103700000492000007F128D | ||
1082 | :1043900000207C007E127E147E137E157E0D9120FF | ||
1083 | :1043A00000227F0D4920CA3180AD1000A020992045 | ||
1084 | :1043B00031000C7084A07F00266807700800077029 | ||
1085 | :1043C0000200037001004000E8310080AC80A5537A | ||
1086 | :1043D00007700400047084A00400C000EA31492082 | ||
1087 | :1043E0000000037000007F157F137F147F120020F0 | ||
1088 | :1043F0007C007E127E007E0D912000227F0D4920E0 | ||
1089 | :10440000F931806860208468886B8C6C5780D4AAEE | ||
1090 | :10441000FF0084A0FF00B8A0322F087EB5A60400DC | ||
1091 | :1044200007700400047084A00400C0001232582CED | ||
1092 | :10443000042760AC046000A41A70006001A31E7021 | ||
1093 | :1044400013700100177000000276077001007F00F2 | ||
1094 | :104450000780092031000A20A0002C320871077063 | ||
1095 | :1044600002000C81C8002C320C81480039327800DF | ||
1096 | :10447000EA2FA0A4010099A300008A6B8E6C07703C | ||
1097 | :10448000040049200000037000007F1200207C001F | ||
1098 | :10449000A920100006A0048086808E81C8005132B9 | ||
1099 | :1044A00000A2F0004C3286808E817C007E15A9200F | ||
1100 | :1044B000100005A0400077321AA1C800773213829D | ||
1101 | :1044C0008D8148006A321AA1C8006B32F0005F3259 | ||
1102 | :1044D00078006F321AA108231082F0005F327E004C | ||
1103 | :1044E000003284A0FFF780207F007F157C007E00D3 | ||
1104 | :1044F000003285A0000878007332E000BF329120BE | ||
1105 | :104500000060207801802278C000B93224782278B7 | ||
1106 | :104510009120008069204035006884A00700400099 | ||
1107 | :10452000A13286A002004000A13230680DA04000F8 | ||
1108 | :10453000A132042105A04000A13201800A204000E0 | ||
1109 | :104540006F3361208036A9208000346005A04000D0 | ||
1110 | :10455000B33201803660C000B332106005A0400065 | ||
1111 | :10456000B3327810191AE0AC10007000B93278003C | ||
1112 | :10457000A5327810D4327810C2327810F9329120F6 | ||
1113 | :1045800001807C003C7801803E78C000D3324078C6 | ||
1114 | :104590003E78487805A04000D33201804A78C000B8 | ||
1115 | :1045A000D3327810191A7C00347801803678C00034 | ||
1116 | :1045B000F8323878367891200080447805A0C00021 | ||
1117 | :1045C000E332012001010180467880A0803E402036 | ||
1118 | :1045D000042065A04000F832206005A04000F432BD | ||
1119 | :1045E00001802260400028330060402C7800E932CE | ||
1120 | :1045F0007C00287801802A78C00027332C782A781C | ||
1121 | :10460000307805A0C0000633012080000180327898 | ||
1122 | :10461000038003800380038090A0803698A202006C | ||
1123 | :10462000042384A008004000273390A2090004223C | ||
1124 | :1046300005A040001F3301801220C000273304234F | ||
1125 | :1046400084A0F7FF85A080001A207810191A7C003A | ||
1126 | :1046500069204035006805A0400032333C6806AC54 | ||
1127 | :1046600040006F3317600600B06084A0003F1A60FE | ||
1128 | :104670001C6084A0FF0085A060001E6000604220D6 | ||
1129 | :104680001067B66F78109216186805A040004A337C | ||
1130 | :1046900001801A68086884A0EFFF0A68106801802A | ||
1131 | :1046A000D00054337810A51B12682F6000002B60D7 | ||
1132 | :1046B0000000682C7810DD176920403501200600C5 | ||
1133 | :1046C000A268447984A10001C0006A33BA6901205C | ||
1134 | :1046D0000400A2687810141A912001807C0009203F | ||
1135 | :1046E0004F3564216920000178106B1B17600600AC | ||
1136 | :1046F000586884A0003F1A601C6084A0FF0085A059 | ||
1137 | :1047000048001E602F6000002B600000306884A00D | ||
1138 | :1047100040004000AB334B680400A92014004868F7 | ||
1139 | :1047200084A00400400098337000983378008F33E1 | ||
1140 | :104730004B680900A9201400486884A001004000CB | ||
1141 | :10474000A5337000A53378009C33A920FA007000CF | ||
1142 | :10475000AB337800A733086884A0FDFF0A681B68A4 | ||
1143 | :104760004600092068350B2007004C784A789120D4 | ||
1144 | :1047700001807C0079200035781003347810CB3329 | ||
1145 | :104780007810E0337810F533337800004778000074 | ||
1146 | :104790004B7800007C0019200A00112046350422C5 | ||
1147 | :1047A00086A032004000DD3319200C00042286A0D0 | ||
1148 | :1047B0003C004000DD33192008002A7B2E7B7C0062 | ||
1149 | :1047C0001920300011204635042286A03200400016 | ||
1150 | :1047D000F23319203900042286A03C004000F23355 | ||
1151 | :1047E00019202700367B3A7B7C0019200D00112010 | ||
1152 | :1047F0004635042286A03C004000003419200A00FF | ||
1153 | :104800003E7B427B7C001920AF2F112046350422CD | ||
1154 | :1048100086A032004000153419207139042286A088 | ||
1155 | :104820003C004000153419202626227B267B7C0084 | ||
1156 | :02483000A7924D | ||
1157 | :00000001FF | ||
1158 | /* Version 1.31.00 ISP1000 Initiator RISC firmware */ | ||
diff --git a/fs/befs/debug.c b/fs/befs/debug.c index b8e304a0661e..622e73775c83 100644 --- a/fs/befs/debug.c +++ b/fs/befs/debug.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/spinlock.h> | 17 | #include <linux/spinlock.h> |
18 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
19 | #include <linux/fs.h> | 19 | #include <linux/fs.h> |
20 | #include <linux/slab.h> | ||
20 | 21 | ||
21 | #endif /* __KERNEL__ */ | 22 | #endif /* __KERNEL__ */ |
22 | 23 | ||
diff --git a/fs/buffer.c b/fs/buffer.c index 5d55a896ff78..6e35762b6169 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
@@ -737,7 +737,7 @@ static int fsync_buffers_list(spinlock_t *lock, struct list_head *list) | |||
737 | { | 737 | { |
738 | struct buffer_head *bh; | 738 | struct buffer_head *bh; |
739 | struct list_head tmp; | 739 | struct list_head tmp; |
740 | struct address_space *mapping; | 740 | struct address_space *mapping, *prev_mapping = NULL; |
741 | int err = 0, err2; | 741 | int err = 0, err2; |
742 | 742 | ||
743 | INIT_LIST_HEAD(&tmp); | 743 | INIT_LIST_HEAD(&tmp); |
@@ -762,7 +762,18 @@ static int fsync_buffers_list(spinlock_t *lock, struct list_head *list) | |||
762 | * contents - it is a noop if I/O is still in | 762 | * contents - it is a noop if I/O is still in |
763 | * flight on potentially older contents. | 763 | * flight on potentially older contents. |
764 | */ | 764 | */ |
765 | ll_rw_block(SWRITE_SYNC, 1, &bh); | 765 | ll_rw_block(SWRITE_SYNC_PLUG, 1, &bh); |
766 | |||
767 | /* | ||
768 | * Kick off IO for the previous mapping. Note | ||
769 | * that we will not run the very last mapping, | ||
770 | * wait_on_buffer() will do that for us | ||
771 | * through sync_buffer(). | ||
772 | */ | ||
773 | if (prev_mapping && prev_mapping != mapping) | ||
774 | blk_run_address_space(prev_mapping); | ||
775 | prev_mapping = mapping; | ||
776 | |||
766 | brelse(bh); | 777 | brelse(bh); |
767 | spin_lock(lock); | 778 | spin_lock(lock); |
768 | } | 779 | } |
@@ -2957,12 +2968,13 @@ void ll_rw_block(int rw, int nr, struct buffer_head *bhs[]) | |||
2957 | for (i = 0; i < nr; i++) { | 2968 | for (i = 0; i < nr; i++) { |
2958 | struct buffer_head *bh = bhs[i]; | 2969 | struct buffer_head *bh = bhs[i]; |
2959 | 2970 | ||
2960 | if (rw == SWRITE || rw == SWRITE_SYNC) | 2971 | if (rw == SWRITE || rw == SWRITE_SYNC || rw == SWRITE_SYNC_PLUG) |
2961 | lock_buffer(bh); | 2972 | lock_buffer(bh); |
2962 | else if (!trylock_buffer(bh)) | 2973 | else if (!trylock_buffer(bh)) |
2963 | continue; | 2974 | continue; |
2964 | 2975 | ||
2965 | if (rw == WRITE || rw == SWRITE || rw == SWRITE_SYNC) { | 2976 | if (rw == WRITE || rw == SWRITE || rw == SWRITE_SYNC || |
2977 | rw == SWRITE_SYNC_PLUG) { | ||
2966 | if (test_clear_buffer_dirty(bh)) { | 2978 | if (test_clear_buffer_dirty(bh)) { |
2967 | bh->b_end_io = end_buffer_write_sync; | 2979 | bh->b_end_io = end_buffer_write_sync; |
2968 | get_bh(bh); | 2980 | get_bh(bh); |
@@ -2998,7 +3010,7 @@ int sync_dirty_buffer(struct buffer_head *bh) | |||
2998 | if (test_clear_buffer_dirty(bh)) { | 3010 | if (test_clear_buffer_dirty(bh)) { |
2999 | get_bh(bh); | 3011 | get_bh(bh); |
3000 | bh->b_end_io = end_buffer_write_sync; | 3012 | bh->b_end_io = end_buffer_write_sync; |
3001 | ret = submit_bh(WRITE, bh); | 3013 | ret = submit_bh(WRITE_SYNC, bh); |
3002 | wait_on_buffer(bh); | 3014 | wait_on_buffer(bh); |
3003 | if (buffer_eopnotsupp(bh)) { | 3015 | if (buffer_eopnotsupp(bh)) { |
3004 | clear_buffer_eopnotsupp(bh); | 3016 | clear_buffer_eopnotsupp(bh); |
diff --git a/fs/direct-io.c b/fs/direct-io.c index b6d43908ff7a..da258e7249cc 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c | |||
@@ -1126,7 +1126,7 @@ __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, | |||
1126 | int acquire_i_mutex = 0; | 1126 | int acquire_i_mutex = 0; |
1127 | 1127 | ||
1128 | if (rw & WRITE) | 1128 | if (rw & WRITE) |
1129 | rw = WRITE_SYNC; | 1129 | rw = WRITE_ODIRECT; |
1130 | 1130 | ||
1131 | if (bdev) | 1131 | if (bdev) |
1132 | bdev_blkbits = blksize_bits(bdev_hardsect_size(bdev)); | 1132 | bdev_blkbits = blksize_bits(bdev_hardsect_size(bdev)); |
diff --git a/fs/ext3/Kconfig b/fs/ext3/Kconfig index 8e0cfe44b0fc..fb3c1a21b135 100644 --- a/fs/ext3/Kconfig +++ b/fs/ext3/Kconfig | |||
@@ -28,6 +28,25 @@ config EXT3_FS | |||
28 | To compile this file system support as a module, choose M here: the | 28 | To compile this file system support as a module, choose M here: the |
29 | module will be called ext3. | 29 | module will be called ext3. |
30 | 30 | ||
31 | config EXT3_DEFAULTS_TO_ORDERED | ||
32 | bool "Default to 'data=ordered' in ext3 (legacy option)" | ||
33 | depends on EXT3_FS | ||
34 | help | ||
35 | If a filesystem does not explicitly specify a data ordering | ||
36 | mode, and the journal capability allowed it, ext3 used to | ||
37 | historically default to 'data=ordered'. | ||
38 | |||
39 | That was a rather unfortunate choice, because it leads to all | ||
40 | kinds of latency problems, and the 'data=writeback' mode is more | ||
41 | appropriate these days. | ||
42 | |||
43 | You should probably always answer 'n' here, and if you really | ||
44 | want to use 'data=ordered' mode, set it in the filesystem itself | ||
45 | with 'tune2fs -o journal_data_ordered'. | ||
46 | |||
47 | But if you really want to enable the legacy default, you can do | ||
48 | so by answering 'y' to this question. | ||
49 | |||
31 | config EXT3_FS_XATTR | 50 | config EXT3_FS_XATTR |
32 | bool "Ext3 extended attributes" | 51 | bool "Ext3 extended attributes" |
33 | depends on EXT3_FS | 52 | depends on EXT3_FS |
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 9e5b8e387e1e..599dbfe504c3 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
@@ -44,6 +44,12 @@ | |||
44 | #include "acl.h" | 44 | #include "acl.h" |
45 | #include "namei.h" | 45 | #include "namei.h" |
46 | 46 | ||
47 | #ifdef CONFIG_EXT3_DEFAULTS_TO_ORDERED | ||
48 | #define EXT3_MOUNT_DEFAULT_DATA_MODE EXT3_MOUNT_ORDERED_DATA | ||
49 | #else | ||
50 | #define EXT3_MOUNT_DEFAULT_DATA_MODE EXT3_MOUNT_WRITEBACK_DATA | ||
51 | #endif | ||
52 | |||
47 | static int ext3_load_journal(struct super_block *, struct ext3_super_block *, | 53 | static int ext3_load_journal(struct super_block *, struct ext3_super_block *, |
48 | unsigned long journal_devnum); | 54 | unsigned long journal_devnum); |
49 | static int ext3_create_journal(struct super_block *, struct ext3_super_block *, | 55 | static int ext3_create_journal(struct super_block *, struct ext3_super_block *, |
@@ -1919,7 +1925,7 @@ static int ext3_fill_super (struct super_block *sb, void *data, int silent) | |||
1919 | cope, else JOURNAL_DATA */ | 1925 | cope, else JOURNAL_DATA */ |
1920 | if (journal_check_available_features | 1926 | if (journal_check_available_features |
1921 | (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE)) | 1927 | (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE)) |
1922 | set_opt(sbi->s_mount_opt, ORDERED_DATA); | 1928 | set_opt(sbi->s_mount_opt, DEFAULT_DATA_MODE); |
1923 | else | 1929 | else |
1924 | set_opt(sbi->s_mount_opt, JOURNAL_DATA); | 1930 | set_opt(sbi->s_mount_opt, JOURNAL_DATA); |
1925 | break; | 1931 | break; |
diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c index f8077b9c8981..a8e8513a78a9 100644 --- a/fs/jbd/commit.c +++ b/fs/jbd/commit.c | |||
@@ -351,8 +351,13 @@ void journal_commit_transaction(journal_t *journal) | |||
351 | spin_lock(&journal->j_state_lock); | 351 | spin_lock(&journal->j_state_lock); |
352 | commit_transaction->t_state = T_LOCKED; | 352 | commit_transaction->t_state = T_LOCKED; |
353 | 353 | ||
354 | /* | ||
355 | * Use plugged writes here, since we want to submit several before | ||
356 | * we unplug the device. We don't do explicit unplugging in here, | ||
357 | * instead we rely on sync_buffer() doing the unplug for us. | ||
358 | */ | ||
354 | if (commit_transaction->t_synchronous_commit) | 359 | if (commit_transaction->t_synchronous_commit) |
355 | write_op = WRITE_SYNC; | 360 | write_op = WRITE_SYNC_PLUG; |
356 | spin_lock(&commit_transaction->t_handle_lock); | 361 | spin_lock(&commit_transaction->t_handle_lock); |
357 | while (commit_transaction->t_updates) { | 362 | while (commit_transaction->t_updates) { |
358 | DEFINE_WAIT(wait); | 363 | DEFINE_WAIT(wait); |
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index 4ea72377c7a2..073c8c3df7cd 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c | |||
@@ -138,7 +138,7 @@ static int journal_submit_commit_record(journal_t *journal, | |||
138 | set_buffer_ordered(bh); | 138 | set_buffer_ordered(bh); |
139 | barrier_done = 1; | 139 | barrier_done = 1; |
140 | } | 140 | } |
141 | ret = submit_bh(WRITE_SYNC, bh); | 141 | ret = submit_bh(WRITE_SYNC_PLUG, bh); |
142 | if (barrier_done) | 142 | if (barrier_done) |
143 | clear_buffer_ordered(bh); | 143 | clear_buffer_ordered(bh); |
144 | 144 | ||
@@ -159,7 +159,7 @@ static int journal_submit_commit_record(journal_t *journal, | |||
159 | lock_buffer(bh); | 159 | lock_buffer(bh); |
160 | set_buffer_uptodate(bh); | 160 | set_buffer_uptodate(bh); |
161 | clear_buffer_dirty(bh); | 161 | clear_buffer_dirty(bh); |
162 | ret = submit_bh(WRITE_SYNC, bh); | 162 | ret = submit_bh(WRITE_SYNC_PLUG, bh); |
163 | } | 163 | } |
164 | *cbh = bh; | 164 | *cbh = bh; |
165 | return ret; | 165 | return ret; |
@@ -190,7 +190,7 @@ retry: | |||
190 | set_buffer_uptodate(bh); | 190 | set_buffer_uptodate(bh); |
191 | bh->b_end_io = journal_end_buffer_io_sync; | 191 | bh->b_end_io = journal_end_buffer_io_sync; |
192 | 192 | ||
193 | ret = submit_bh(WRITE_SYNC, bh); | 193 | ret = submit_bh(WRITE_SYNC_PLUG, bh); |
194 | if (ret) { | 194 | if (ret) { |
195 | unlock_buffer(bh); | 195 | unlock_buffer(bh); |
196 | return ret; | 196 | return ret; |
@@ -402,8 +402,13 @@ void jbd2_journal_commit_transaction(journal_t *journal) | |||
402 | spin_lock(&journal->j_state_lock); | 402 | spin_lock(&journal->j_state_lock); |
403 | commit_transaction->t_state = T_LOCKED; | 403 | commit_transaction->t_state = T_LOCKED; |
404 | 404 | ||
405 | /* | ||
406 | * Use plugged writes here, since we want to submit several before | ||
407 | * we unplug the device. We don't do explicit unplugging in here, | ||
408 | * instead we rely on sync_buffer() doing the unplug for us. | ||
409 | */ | ||
405 | if (commit_transaction->t_synchronous_commit) | 410 | if (commit_transaction->t_synchronous_commit) |
406 | write_op = WRITE_SYNC; | 411 | write_op = WRITE_SYNC_PLUG; |
407 | stats.u.run.rs_wait = commit_transaction->t_max_wait; | 412 | stats.u.run.rs_wait = commit_transaction->t_max_wait; |
408 | stats.u.run.rs_locked = jiffies; | 413 | stats.u.run.rs_locked = jiffies; |
409 | stats.u.run.rs_running = jbd2_time_diff(commit_transaction->t_start, | 414 | stats.u.run.rs_running = jbd2_time_diff(commit_transaction->t_start, |
diff --git a/fs/jffs2/acl.c b/fs/jffs2/acl.c index 77ccf8cb0823..043740dde20c 100644 --- a/fs/jffs2/acl.c +++ b/fs/jffs2/acl.c | |||
@@ -38,12 +38,12 @@ static int jffs2_acl_count(size_t size) | |||
38 | size_t s; | 38 | size_t s; |
39 | 39 | ||
40 | size -= sizeof(struct jffs2_acl_header); | 40 | size -= sizeof(struct jffs2_acl_header); |
41 | s = size - 4 * sizeof(struct jffs2_acl_entry_short); | 41 | if (size < 4 * sizeof(struct jffs2_acl_entry_short)) { |
42 | if (s < 0) { | ||
43 | if (size % sizeof(struct jffs2_acl_entry_short)) | 42 | if (size % sizeof(struct jffs2_acl_entry_short)) |
44 | return -1; | 43 | return -1; |
45 | return size / sizeof(struct jffs2_acl_entry_short); | 44 | return size / sizeof(struct jffs2_acl_entry_short); |
46 | } else { | 45 | } else { |
46 | s = size - 4 * sizeof(struct jffs2_acl_entry_short); | ||
47 | if (s % sizeof(struct jffs2_acl_entry)) | 47 | if (s % sizeof(struct jffs2_acl_entry)) |
48 | return -1; | 48 | return -1; |
49 | return s / sizeof(struct jffs2_acl_entry) + 4; | 49 | return s / sizeof(struct jffs2_acl_entry) + 4; |
diff --git a/fs/jffs2/malloc.c b/fs/jffs2/malloc.c index f9211252b5f1..9eff2bdae8a7 100644 --- a/fs/jffs2/malloc.c +++ b/fs/jffs2/malloc.c | |||
@@ -284,10 +284,9 @@ void jffs2_free_inode_cache(struct jffs2_inode_cache *x) | |||
284 | struct jffs2_xattr_datum *jffs2_alloc_xattr_datum(void) | 284 | struct jffs2_xattr_datum *jffs2_alloc_xattr_datum(void) |
285 | { | 285 | { |
286 | struct jffs2_xattr_datum *xd; | 286 | struct jffs2_xattr_datum *xd; |
287 | xd = kmem_cache_alloc(xattr_datum_cache, GFP_KERNEL); | 287 | xd = kmem_cache_zalloc(xattr_datum_cache, GFP_KERNEL); |
288 | dbg_memalloc("%p\n", xd); | 288 | dbg_memalloc("%p\n", xd); |
289 | 289 | ||
290 | memset(xd, 0, sizeof(struct jffs2_xattr_datum)); | ||
291 | xd->class = RAWNODE_CLASS_XATTR_DATUM; | 290 | xd->class = RAWNODE_CLASS_XATTR_DATUM; |
292 | xd->node = (void *)xd; | 291 | xd->node = (void *)xd; |
293 | INIT_LIST_HEAD(&xd->xindex); | 292 | INIT_LIST_HEAD(&xd->xindex); |
@@ -303,10 +302,9 @@ void jffs2_free_xattr_datum(struct jffs2_xattr_datum *xd) | |||
303 | struct jffs2_xattr_ref *jffs2_alloc_xattr_ref(void) | 302 | struct jffs2_xattr_ref *jffs2_alloc_xattr_ref(void) |
304 | { | 303 | { |
305 | struct jffs2_xattr_ref *ref; | 304 | struct jffs2_xattr_ref *ref; |
306 | ref = kmem_cache_alloc(xattr_ref_cache, GFP_KERNEL); | 305 | ref = kmem_cache_zalloc(xattr_ref_cache, GFP_KERNEL); |
307 | dbg_memalloc("%p\n", ref); | 306 | dbg_memalloc("%p\n", ref); |
308 | 307 | ||
309 | memset(ref, 0, sizeof(struct jffs2_xattr_ref)); | ||
310 | ref->class = RAWNODE_CLASS_XATTR_REF; | 308 | ref->class = RAWNODE_CLASS_XATTR_REF; |
311 | ref->node = (void *)ref; | 309 | ref->node = (void *)ref; |
312 | return ref; | 310 | return ref; |
diff --git a/fs/libfs.c b/fs/libfs.c index 4910a36f516e..cd223190c4e9 100644 --- a/fs/libfs.c +++ b/fs/libfs.c | |||
@@ -575,6 +575,21 @@ ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos, | |||
575 | * possibly a read which collects the result - which is stored in a | 575 | * possibly a read which collects the result - which is stored in a |
576 | * file-local buffer. | 576 | * file-local buffer. |
577 | */ | 577 | */ |
578 | |||
579 | void simple_transaction_set(struct file *file, size_t n) | ||
580 | { | ||
581 | struct simple_transaction_argresp *ar = file->private_data; | ||
582 | |||
583 | BUG_ON(n > SIMPLE_TRANSACTION_LIMIT); | ||
584 | |||
585 | /* | ||
586 | * The barrier ensures that ar->size will really remain zero until | ||
587 | * ar->data is ready for reading. | ||
588 | */ | ||
589 | smp_mb(); | ||
590 | ar->size = n; | ||
591 | } | ||
592 | |||
578 | char *simple_transaction_get(struct file *file, const char __user *buf, size_t size) | 593 | char *simple_transaction_get(struct file *file, const char __user *buf, size_t size) |
579 | { | 594 | { |
580 | struct simple_transaction_argresp *ar; | 595 | struct simple_transaction_argresp *ar; |
@@ -820,6 +835,7 @@ EXPORT_SYMBOL(simple_sync_file); | |||
820 | EXPORT_SYMBOL(simple_unlink); | 835 | EXPORT_SYMBOL(simple_unlink); |
821 | EXPORT_SYMBOL(simple_read_from_buffer); | 836 | EXPORT_SYMBOL(simple_read_from_buffer); |
822 | EXPORT_SYMBOL(memory_read_from_buffer); | 837 | EXPORT_SYMBOL(memory_read_from_buffer); |
838 | EXPORT_SYMBOL(simple_transaction_set); | ||
823 | EXPORT_SYMBOL(simple_transaction_get); | 839 | EXPORT_SYMBOL(simple_transaction_get); |
824 | EXPORT_SYMBOL(simple_transaction_read); | 840 | EXPORT_SYMBOL(simple_transaction_read); |
825 | EXPORT_SYMBOL(simple_transaction_release); | 841 | EXPORT_SYMBOL(simple_transaction_release); |
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c index 763b78a6e9de..83ee34203bd7 100644 --- a/fs/lockd/svclock.c +++ b/fs/lockd/svclock.c | |||
@@ -426,8 +426,15 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, | |||
426 | ret = nlm_granted; | 426 | ret = nlm_granted; |
427 | goto out; | 427 | goto out; |
428 | case -EAGAIN: | 428 | case -EAGAIN: |
429 | /* | ||
430 | * If this is a blocking request for an | ||
431 | * already pending lock request then we need | ||
432 | * to put it back on lockd's block list | ||
433 | */ | ||
434 | if (wait) | ||
435 | break; | ||
429 | ret = nlm_lck_denied; | 436 | ret = nlm_lck_denied; |
430 | break; | 437 | goto out; |
431 | case FILE_LOCK_DEFERRED: | 438 | case FILE_LOCK_DEFERRED: |
432 | if (wait) | 439 | if (wait) |
433 | break; | 440 | break; |
@@ -443,10 +450,6 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, | |||
443 | goto out; | 450 | goto out; |
444 | } | 451 | } |
445 | 452 | ||
446 | ret = nlm_lck_denied; | ||
447 | if (!wait) | ||
448 | goto out; | ||
449 | |||
450 | ret = nlm_lck_blocked; | 453 | ret = nlm_lck_blocked; |
451 | 454 | ||
452 | /* Append to list of blocked */ | 455 | /* Append to list of blocked */ |
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 82eaadbff408..6717200923fe 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
@@ -1228,7 +1228,6 @@ static int nfs_parse_mount_options(char *raw, | |||
1228 | goto out_nomem; | 1228 | goto out_nomem; |
1229 | token = match_token(string, | 1229 | token = match_token(string, |
1230 | nfs_xprt_protocol_tokens, args); | 1230 | nfs_xprt_protocol_tokens, args); |
1231 | kfree(string); | ||
1232 | 1231 | ||
1233 | switch (token) { | 1232 | switch (token) { |
1234 | case Opt_xprt_udp: | 1233 | case Opt_xprt_udp: |
@@ -1258,6 +1257,7 @@ static int nfs_parse_mount_options(char *raw, | |||
1258 | goto out_nomem; | 1257 | goto out_nomem; |
1259 | token = match_token(string, | 1258 | token = match_token(string, |
1260 | nfs_xprt_protocol_tokens, args); | 1259 | nfs_xprt_protocol_tokens, args); |
1260 | kfree(string); | ||
1261 | 1261 | ||
1262 | switch (token) { | 1262 | switch (token) { |
1263 | case Opt_xprt_udp: | 1263 | case Opt_xprt_udp: |
diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig index 44d7d04dab95..503b9da159a3 100644 --- a/fs/nfsd/Kconfig +++ b/fs/nfsd/Kconfig | |||
@@ -1,6 +1,7 @@ | |||
1 | config NFSD | 1 | config NFSD |
2 | tristate "NFS server support" | 2 | tristate "NFS server support" |
3 | depends on INET | 3 | depends on INET |
4 | depends on FILE_LOCKING | ||
4 | select LOCKD | 5 | select LOCKD |
5 | select SUNRPC | 6 | select SUNRPC |
6 | select EXPORTFS | 7 | select EXPORTFS |
diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c index 9dbd2eb91281..7c9fe838f038 100644 --- a/fs/nfsd/nfs3proc.c +++ b/fs/nfsd/nfs3proc.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/unistd.h> | 18 | #include <linux/unistd.h> |
19 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
20 | #include <linux/major.h> | 20 | #include <linux/major.h> |
21 | #include <linux/magic.h> | ||
21 | 22 | ||
22 | #include <linux/sunrpc/svc.h> | 23 | #include <linux/sunrpc/svc.h> |
23 | #include <linux/nfsd/nfsd.h> | 24 | #include <linux/nfsd/nfsd.h> |
@@ -202,6 +203,7 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, | |||
202 | struct nfsd3_writeres *resp) | 203 | struct nfsd3_writeres *resp) |
203 | { | 204 | { |
204 | __be32 nfserr; | 205 | __be32 nfserr; |
206 | unsigned long cnt = argp->len; | ||
205 | 207 | ||
206 | dprintk("nfsd: WRITE(3) %s %d bytes at %ld%s\n", | 208 | dprintk("nfsd: WRITE(3) %s %d bytes at %ld%s\n", |
207 | SVCFH_fmt(&argp->fh), | 209 | SVCFH_fmt(&argp->fh), |
@@ -214,9 +216,9 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, | |||
214 | nfserr = nfsd_write(rqstp, &resp->fh, NULL, | 216 | nfserr = nfsd_write(rqstp, &resp->fh, NULL, |
215 | argp->offset, | 217 | argp->offset, |
216 | rqstp->rq_vec, argp->vlen, | 218 | rqstp->rq_vec, argp->vlen, |
217 | argp->len, | 219 | &cnt, |
218 | &resp->committed); | 220 | &resp->committed); |
219 | resp->count = argp->count; | 221 | resp->count = cnt; |
220 | RETURN_STATUS(nfserr); | 222 | RETURN_STATUS(nfserr); |
221 | } | 223 | } |
222 | 224 | ||
@@ -569,7 +571,7 @@ nfsd3_proc_fsinfo(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, | |||
569 | struct super_block *sb = argp->fh.fh_dentry->d_inode->i_sb; | 571 | struct super_block *sb = argp->fh.fh_dentry->d_inode->i_sb; |
570 | 572 | ||
571 | /* Note that we don't care for remote fs's here */ | 573 | /* Note that we don't care for remote fs's here */ |
572 | if (sb->s_magic == 0x4d44 /* MSDOS_SUPER_MAGIC */) { | 574 | if (sb->s_magic == MSDOS_SUPER_MAGIC) { |
573 | resp->f_properties = NFS3_FSF_BILLYBOY; | 575 | resp->f_properties = NFS3_FSF_BILLYBOY; |
574 | } | 576 | } |
575 | resp->f_maxfilesize = sb->s_maxbytes; | 577 | resp->f_maxfilesize = sb->s_maxbytes; |
@@ -610,7 +612,7 @@ nfsd3_proc_pathconf(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, | |||
610 | resp->p_link_max = EXT2_LINK_MAX; | 612 | resp->p_link_max = EXT2_LINK_MAX; |
611 | resp->p_name_max = EXT2_NAME_LEN; | 613 | resp->p_name_max = EXT2_NAME_LEN; |
612 | break; | 614 | break; |
613 | case 0x4d44: /* MSDOS_SUPER_MAGIC */ | 615 | case MSDOS_SUPER_MAGIC: |
614 | resp->p_case_insensitive = 1; | 616 | resp->p_case_insensitive = 1; |
615 | resp->p_case_preserving = 0; | 617 | resp->p_case_preserving = 0; |
616 | break; | 618 | break; |
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index c464181b5994..290289bd44f7 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c | |||
@@ -218,7 +218,7 @@ static int | |||
218 | encode_cb_recall(struct xdr_stream *xdr, struct nfs4_cb_recall *cb_rec) | 218 | encode_cb_recall(struct xdr_stream *xdr, struct nfs4_cb_recall *cb_rec) |
219 | { | 219 | { |
220 | __be32 *p; | 220 | __be32 *p; |
221 | int len = cb_rec->cbr_fhlen; | 221 | int len = cb_rec->cbr_fh.fh_size; |
222 | 222 | ||
223 | RESERVE_SPACE(12+sizeof(cb_rec->cbr_stateid) + len); | 223 | RESERVE_SPACE(12+sizeof(cb_rec->cbr_stateid) + len); |
224 | WRITE32(OP_CB_RECALL); | 224 | WRITE32(OP_CB_RECALL); |
@@ -226,7 +226,7 @@ encode_cb_recall(struct xdr_stream *xdr, struct nfs4_cb_recall *cb_rec) | |||
226 | WRITEMEM(&cb_rec->cbr_stateid.si_opaque, sizeof(stateid_opaque_t)); | 226 | WRITEMEM(&cb_rec->cbr_stateid.si_opaque, sizeof(stateid_opaque_t)); |
227 | WRITE32(cb_rec->cbr_trunc); | 227 | WRITE32(cb_rec->cbr_trunc); |
228 | WRITE32(len); | 228 | WRITE32(len); |
229 | WRITEMEM(cb_rec->cbr_fhval, len); | 229 | WRITEMEM(&cb_rec->cbr_fh.fh_base, len); |
230 | return 0; | 230 | return 0; |
231 | } | 231 | } |
232 | 232 | ||
@@ -361,9 +361,8 @@ static struct rpc_program cb_program = { | |||
361 | /* Reference counting, callback cleanup, etc., all look racy as heck. | 361 | /* Reference counting, callback cleanup, etc., all look racy as heck. |
362 | * And why is cb_set an atomic? */ | 362 | * And why is cb_set an atomic? */ |
363 | 363 | ||
364 | static int do_probe_callback(void *data) | 364 | static struct rpc_clnt *setup_callback_client(struct nfs4_client *clp) |
365 | { | 365 | { |
366 | struct nfs4_client *clp = data; | ||
367 | struct sockaddr_in addr; | 366 | struct sockaddr_in addr; |
368 | struct nfs4_callback *cb = &clp->cl_callback; | 367 | struct nfs4_callback *cb = &clp->cl_callback; |
369 | struct rpc_timeout timeparms = { | 368 | struct rpc_timeout timeparms = { |
@@ -384,17 +383,10 @@ static int do_probe_callback(void *data) | |||
384 | .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET), | 383 | .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET), |
385 | .client_name = clp->cl_principal, | 384 | .client_name = clp->cl_principal, |
386 | }; | 385 | }; |
387 | struct rpc_message msg = { | ||
388 | .rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL], | ||
389 | .rpc_argp = clp, | ||
390 | }; | ||
391 | struct rpc_clnt *client; | 386 | struct rpc_clnt *client; |
392 | int status; | ||
393 | 387 | ||
394 | if (!clp->cl_principal && (clp->cl_flavor >= RPC_AUTH_GSS_KRB5)) { | 388 | if (!clp->cl_principal && (clp->cl_flavor >= RPC_AUTH_GSS_KRB5)) |
395 | status = nfserr_cb_path_down; | 389 | return ERR_PTR(-EINVAL); |
396 | goto out_err; | ||
397 | } | ||
398 | 390 | ||
399 | /* Initialize address */ | 391 | /* Initialize address */ |
400 | memset(&addr, 0, sizeof(addr)); | 392 | memset(&addr, 0, sizeof(addr)); |
@@ -404,9 +396,29 @@ static int do_probe_callback(void *data) | |||
404 | 396 | ||
405 | /* Create RPC client */ | 397 | /* Create RPC client */ |
406 | client = rpc_create(&args); | 398 | client = rpc_create(&args); |
399 | if (IS_ERR(client)) | ||
400 | dprintk("NFSD: couldn't create callback client: %ld\n", | ||
401 | PTR_ERR(client)); | ||
402 | return client; | ||
403 | |||
404 | } | ||
405 | |||
406 | static int do_probe_callback(void *data) | ||
407 | { | ||
408 | struct nfs4_client *clp = data; | ||
409 | struct nfs4_callback *cb = &clp->cl_callback; | ||
410 | struct rpc_message msg = { | ||
411 | .rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL], | ||
412 | .rpc_argp = clp, | ||
413 | }; | ||
414 | struct rpc_clnt *client; | ||
415 | int status; | ||
416 | |||
417 | client = setup_callback_client(clp); | ||
407 | if (IS_ERR(client)) { | 418 | if (IS_ERR(client)) { |
408 | dprintk("NFSD: couldn't create callback client\n"); | ||
409 | status = PTR_ERR(client); | 419 | status = PTR_ERR(client); |
420 | dprintk("NFSD: couldn't create callback client: %d\n", | ||
421 | status); | ||
410 | goto out_err; | 422 | goto out_err; |
411 | } | 423 | } |
412 | 424 | ||
@@ -422,10 +434,10 @@ static int do_probe_callback(void *data) | |||
422 | out_release_client: | 434 | out_release_client: |
423 | rpc_shutdown_client(client); | 435 | rpc_shutdown_client(client); |
424 | out_err: | 436 | out_err: |
425 | dprintk("NFSD: warning: no callback path to client %.*s\n", | 437 | dprintk("NFSD: warning: no callback path to client %.*s: error %d\n", |
426 | (int)clp->cl_name.len, clp->cl_name.data); | 438 | (int)clp->cl_name.len, clp->cl_name.data, status); |
427 | put_nfs4_client(clp); | 439 | put_nfs4_client(clp); |
428 | return status; | 440 | return 0; |
429 | } | 441 | } |
430 | 442 | ||
431 | /* | 443 | /* |
@@ -451,7 +463,6 @@ nfsd4_probe_callback(struct nfs4_client *clp) | |||
451 | 463 | ||
452 | /* | 464 | /* |
453 | * called with dp->dl_count inc'ed. | 465 | * called with dp->dl_count inc'ed. |
454 | * nfs4_lock_state() may or may not have been called. | ||
455 | */ | 466 | */ |
456 | void | 467 | void |
457 | nfsd4_cb_recall(struct nfs4_delegation *dp) | 468 | nfsd4_cb_recall(struct nfs4_delegation *dp) |
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 9fa60a3ad48c..b2883e9c6381 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c | |||
@@ -93,6 +93,21 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o | |||
93 | open->op_truncate = 0; | 93 | open->op_truncate = 0; |
94 | 94 | ||
95 | if (open->op_create) { | 95 | if (open->op_create) { |
96 | /* FIXME: check session persistence and pnfs flags. | ||
97 | * The nfsv4.1 spec requires the following semantics: | ||
98 | * | ||
99 | * Persistent | pNFS | Server REQUIRED | Client Allowed | ||
100 | * Reply Cache | server | | | ||
101 | * -------------+--------+-----------------+-------------------- | ||
102 | * no | no | EXCLUSIVE4_1 | EXCLUSIVE4_1 | ||
103 | * | | | (SHOULD) | ||
104 | * | | and EXCLUSIVE4 | or EXCLUSIVE4 | ||
105 | * | | | (SHOULD NOT) | ||
106 | * no | yes | EXCLUSIVE4_1 | EXCLUSIVE4_1 | ||
107 | * yes | no | GUARDED4 | GUARDED4 | ||
108 | * yes | yes | GUARDED4 | GUARDED4 | ||
109 | */ | ||
110 | |||
96 | /* | 111 | /* |
97 | * Note: create modes (UNCHECKED,GUARDED...) are the same | 112 | * Note: create modes (UNCHECKED,GUARDED...) are the same |
98 | * in NFSv4 as in v3. | 113 | * in NFSv4 as in v3. |
@@ -103,11 +118,13 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o | |||
103 | (u32 *)open->op_verf.data, | 118 | (u32 *)open->op_verf.data, |
104 | &open->op_truncate, &created); | 119 | &open->op_truncate, &created); |
105 | 120 | ||
106 | /* If we ever decide to use different attrs to store the | 121 | /* |
107 | * verifier in nfsd_create_v3, then we'll need to change this | 122 | * Following rfc 3530 14.2.16, use the returned bitmask |
123 | * to indicate which attributes we used to store the | ||
124 | * verifier: | ||
108 | */ | 125 | */ |
109 | if (open->op_createmode == NFS4_CREATE_EXCLUSIVE && status == 0) | 126 | if (open->op_createmode == NFS4_CREATE_EXCLUSIVE && status == 0) |
110 | open->op_bmval[1] |= (FATTR4_WORD1_TIME_ACCESS | | 127 | open->op_bmval[1] = (FATTR4_WORD1_TIME_ACCESS | |
111 | FATTR4_WORD1_TIME_MODIFY); | 128 | FATTR4_WORD1_TIME_MODIFY); |
112 | } else { | 129 | } else { |
113 | status = nfsd_lookup(rqstp, current_fh, | 130 | status = nfsd_lookup(rqstp, current_fh, |
@@ -118,13 +135,11 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o | |||
118 | goto out; | 135 | goto out; |
119 | 136 | ||
120 | set_change_info(&open->op_cinfo, current_fh); | 137 | set_change_info(&open->op_cinfo, current_fh); |
121 | |||
122 | /* set reply cache */ | ||
123 | fh_dup2(current_fh, &resfh); | 138 | fh_dup2(current_fh, &resfh); |
124 | open->op_stateowner->so_replay.rp_openfh_len = resfh.fh_handle.fh_size; | ||
125 | memcpy(open->op_stateowner->so_replay.rp_openfh, | ||
126 | &resfh.fh_handle.fh_base, resfh.fh_handle.fh_size); | ||
127 | 139 | ||
140 | /* set reply cache */ | ||
141 | fh_copy_shallow(&open->op_stateowner->so_replay.rp_openfh, | ||
142 | &resfh.fh_handle); | ||
128 | if (!created) | 143 | if (!created) |
129 | status = do_open_permission(rqstp, current_fh, open, | 144 | status = do_open_permission(rqstp, current_fh, open, |
130 | NFSD_MAY_NOP); | 145 | NFSD_MAY_NOP); |
@@ -150,10 +165,8 @@ do_open_fhandle(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_ | |||
150 | memset(&open->op_cinfo, 0, sizeof(struct nfsd4_change_info)); | 165 | memset(&open->op_cinfo, 0, sizeof(struct nfsd4_change_info)); |
151 | 166 | ||
152 | /* set replay cache */ | 167 | /* set replay cache */ |
153 | open->op_stateowner->so_replay.rp_openfh_len = current_fh->fh_handle.fh_size; | 168 | fh_copy_shallow(&open->op_stateowner->so_replay.rp_openfh, |
154 | memcpy(open->op_stateowner->so_replay.rp_openfh, | 169 | ¤t_fh->fh_handle); |
155 | ¤t_fh->fh_handle.fh_base, | ||
156 | current_fh->fh_handle.fh_size); | ||
157 | 170 | ||
158 | open->op_truncate = (open->op_iattr.ia_valid & ATTR_SIZE) && | 171 | open->op_truncate = (open->op_iattr.ia_valid & ATTR_SIZE) && |
159 | (open->op_iattr.ia_size == 0); | 172 | (open->op_iattr.ia_size == 0); |
@@ -164,12 +177,23 @@ do_open_fhandle(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_ | |||
164 | return status; | 177 | return status; |
165 | } | 178 | } |
166 | 179 | ||
180 | static void | ||
181 | copy_clientid(clientid_t *clid, struct nfsd4_session *session) | ||
182 | { | ||
183 | struct nfsd4_sessionid *sid = | ||
184 | (struct nfsd4_sessionid *)session->se_sessionid.data; | ||
185 | |||
186 | clid->cl_boot = sid->clientid.cl_boot; | ||
187 | clid->cl_id = sid->clientid.cl_id; | ||
188 | } | ||
167 | 189 | ||
168 | static __be32 | 190 | static __be32 |
169 | nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | 191 | nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, |
170 | struct nfsd4_open *open) | 192 | struct nfsd4_open *open) |
171 | { | 193 | { |
172 | __be32 status; | 194 | __be32 status; |
195 | struct nfsd4_compoundres *resp; | ||
196 | |||
173 | dprintk("NFSD: nfsd4_open filename %.*s op_stateowner %p\n", | 197 | dprintk("NFSD: nfsd4_open filename %.*s op_stateowner %p\n", |
174 | (int)open->op_fname.len, open->op_fname.data, | 198 | (int)open->op_fname.len, open->op_fname.data, |
175 | open->op_stateowner); | 199 | open->op_stateowner); |
@@ -178,16 +202,19 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
178 | if (open->op_create && open->op_claim_type != NFS4_OPEN_CLAIM_NULL) | 202 | if (open->op_create && open->op_claim_type != NFS4_OPEN_CLAIM_NULL) |
179 | return nfserr_inval; | 203 | return nfserr_inval; |
180 | 204 | ||
205 | if (nfsd4_has_session(cstate)) | ||
206 | copy_clientid(&open->op_clientid, cstate->session); | ||
207 | |||
181 | nfs4_lock_state(); | 208 | nfs4_lock_state(); |
182 | 209 | ||
183 | /* check seqid for replay. set nfs4_owner */ | 210 | /* check seqid for replay. set nfs4_owner */ |
184 | status = nfsd4_process_open1(open); | 211 | resp = rqstp->rq_resp; |
212 | status = nfsd4_process_open1(&resp->cstate, open); | ||
185 | if (status == nfserr_replay_me) { | 213 | if (status == nfserr_replay_me) { |
186 | struct nfs4_replay *rp = &open->op_stateowner->so_replay; | 214 | struct nfs4_replay *rp = &open->op_stateowner->so_replay; |
187 | fh_put(&cstate->current_fh); | 215 | fh_put(&cstate->current_fh); |
188 | cstate->current_fh.fh_handle.fh_size = rp->rp_openfh_len; | 216 | fh_copy_shallow(&cstate->current_fh.fh_handle, |
189 | memcpy(&cstate->current_fh.fh_handle.fh_base, rp->rp_openfh, | 217 | &rp->rp_openfh); |
190 | rp->rp_openfh_len); | ||
191 | status = fh_verify(rqstp, &cstate->current_fh, 0, NFSD_MAY_NOP); | 218 | status = fh_verify(rqstp, &cstate->current_fh, 0, NFSD_MAY_NOP); |
192 | if (status) | 219 | if (status) |
193 | dprintk("nfsd4_open: replay failed" | 220 | dprintk("nfsd4_open: replay failed" |
@@ -209,10 +236,6 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
209 | 236 | ||
210 | switch (open->op_claim_type) { | 237 | switch (open->op_claim_type) { |
211 | case NFS4_OPEN_CLAIM_DELEGATE_CUR: | 238 | case NFS4_OPEN_CLAIM_DELEGATE_CUR: |
212 | status = nfserr_inval; | ||
213 | if (open->op_create) | ||
214 | goto out; | ||
215 | /* fall through */ | ||
216 | case NFS4_OPEN_CLAIM_NULL: | 239 | case NFS4_OPEN_CLAIM_NULL: |
217 | /* | 240 | /* |
218 | * (1) set CURRENT_FH to the file being opened, | 241 | * (1) set CURRENT_FH to the file being opened, |
@@ -455,8 +478,9 @@ nfsd4_getattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
455 | if (getattr->ga_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1) | 478 | if (getattr->ga_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1) |
456 | return nfserr_inval; | 479 | return nfserr_inval; |
457 | 480 | ||
458 | getattr->ga_bmval[0] &= NFSD_SUPPORTED_ATTRS_WORD0; | 481 | getattr->ga_bmval[0] &= nfsd_suppattrs0(cstate->minorversion); |
459 | getattr->ga_bmval[1] &= NFSD_SUPPORTED_ATTRS_WORD1; | 482 | getattr->ga_bmval[1] &= nfsd_suppattrs1(cstate->minorversion); |
483 | getattr->ga_bmval[2] &= nfsd_suppattrs2(cstate->minorversion); | ||
460 | 484 | ||
461 | getattr->ga_fhp = &cstate->current_fh; | 485 | getattr->ga_fhp = &cstate->current_fh; |
462 | return nfs_ok; | 486 | return nfs_ok; |
@@ -520,9 +544,8 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
520 | 544 | ||
521 | nfs4_lock_state(); | 545 | nfs4_lock_state(); |
522 | /* check stateid */ | 546 | /* check stateid */ |
523 | if ((status = nfs4_preprocess_stateid_op(&cstate->current_fh, | 547 | if ((status = nfs4_preprocess_stateid_op(cstate, &read->rd_stateid, |
524 | &read->rd_stateid, | 548 | RD_STATE, &read->rd_filp))) { |
525 | CHECK_FH | RD_STATE, &read->rd_filp))) { | ||
526 | dprintk("NFSD: nfsd4_read: couldn't process stateid!\n"); | 549 | dprintk("NFSD: nfsd4_read: couldn't process stateid!\n"); |
527 | goto out; | 550 | goto out; |
528 | } | 551 | } |
@@ -548,8 +571,9 @@ nfsd4_readdir(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
548 | if (readdir->rd_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1) | 571 | if (readdir->rd_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1) |
549 | return nfserr_inval; | 572 | return nfserr_inval; |
550 | 573 | ||
551 | readdir->rd_bmval[0] &= NFSD_SUPPORTED_ATTRS_WORD0; | 574 | readdir->rd_bmval[0] &= nfsd_suppattrs0(cstate->minorversion); |
552 | readdir->rd_bmval[1] &= NFSD_SUPPORTED_ATTRS_WORD1; | 575 | readdir->rd_bmval[1] &= nfsd_suppattrs1(cstate->minorversion); |
576 | readdir->rd_bmval[2] &= nfsd_suppattrs2(cstate->minorversion); | ||
553 | 577 | ||
554 | if ((cookie > ~(u32)0) || (cookie == 1) || (cookie == 2) || | 578 | if ((cookie > ~(u32)0) || (cookie == 1) || (cookie == 2) || |
555 | (cookie == 0 && memcmp(readdir->rd_verf.data, zeroverf.data, NFS4_VERIFIER_SIZE))) | 579 | (cookie == 0 && memcmp(readdir->rd_verf.data, zeroverf.data, NFS4_VERIFIER_SIZE))) |
@@ -653,8 +677,8 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
653 | 677 | ||
654 | if (setattr->sa_iattr.ia_valid & ATTR_SIZE) { | 678 | if (setattr->sa_iattr.ia_valid & ATTR_SIZE) { |
655 | nfs4_lock_state(); | 679 | nfs4_lock_state(); |
656 | status = nfs4_preprocess_stateid_op(&cstate->current_fh, | 680 | status = nfs4_preprocess_stateid_op(cstate, |
657 | &setattr->sa_stateid, CHECK_FH | WR_STATE, NULL); | 681 | &setattr->sa_stateid, WR_STATE, NULL); |
658 | nfs4_unlock_state(); | 682 | nfs4_unlock_state(); |
659 | if (status) { | 683 | if (status) { |
660 | dprintk("NFSD: nfsd4_setattr: couldn't process stateid!\n"); | 684 | dprintk("NFSD: nfsd4_setattr: couldn't process stateid!\n"); |
@@ -685,6 +709,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
685 | struct file *filp = NULL; | 709 | struct file *filp = NULL; |
686 | u32 *p; | 710 | u32 *p; |
687 | __be32 status = nfs_ok; | 711 | __be32 status = nfs_ok; |
712 | unsigned long cnt; | ||
688 | 713 | ||
689 | /* no need to check permission - this will be done in nfsd_write() */ | 714 | /* no need to check permission - this will be done in nfsd_write() */ |
690 | 715 | ||
@@ -692,8 +717,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
692 | return nfserr_inval; | 717 | return nfserr_inval; |
693 | 718 | ||
694 | nfs4_lock_state(); | 719 | nfs4_lock_state(); |
695 | status = nfs4_preprocess_stateid_op(&cstate->current_fh, stateid, | 720 | status = nfs4_preprocess_stateid_op(cstate, stateid, WR_STATE, &filp); |
696 | CHECK_FH | WR_STATE, &filp); | ||
697 | if (filp) | 721 | if (filp) |
698 | get_file(filp); | 722 | get_file(filp); |
699 | nfs4_unlock_state(); | 723 | nfs4_unlock_state(); |
@@ -703,7 +727,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
703 | return status; | 727 | return status; |
704 | } | 728 | } |
705 | 729 | ||
706 | write->wr_bytes_written = write->wr_buflen; | 730 | cnt = write->wr_buflen; |
707 | write->wr_how_written = write->wr_stable_how; | 731 | write->wr_how_written = write->wr_stable_how; |
708 | p = (u32 *)write->wr_verifier.data; | 732 | p = (u32 *)write->wr_verifier.data; |
709 | *p++ = nfssvc_boot.tv_sec; | 733 | *p++ = nfssvc_boot.tv_sec; |
@@ -711,10 +735,12 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
711 | 735 | ||
712 | status = nfsd_write(rqstp, &cstate->current_fh, filp, | 736 | status = nfsd_write(rqstp, &cstate->current_fh, filp, |
713 | write->wr_offset, rqstp->rq_vec, write->wr_vlen, | 737 | write->wr_offset, rqstp->rq_vec, write->wr_vlen, |
714 | write->wr_buflen, &write->wr_how_written); | 738 | &cnt, &write->wr_how_written); |
715 | if (filp) | 739 | if (filp) |
716 | fput(filp); | 740 | fput(filp); |
717 | 741 | ||
742 | write->wr_bytes_written = cnt; | ||
743 | |||
718 | if (status == nfserr_symlink) | 744 | if (status == nfserr_symlink) |
719 | status = nfserr_inval; | 745 | status = nfserr_inval; |
720 | return status; | 746 | return status; |
@@ -737,8 +763,9 @@ _nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
737 | if (status) | 763 | if (status) |
738 | return status; | 764 | return status; |
739 | 765 | ||
740 | if ((verify->ve_bmval[0] & ~NFSD_SUPPORTED_ATTRS_WORD0) | 766 | if ((verify->ve_bmval[0] & ~nfsd_suppattrs0(cstate->minorversion)) |
741 | || (verify->ve_bmval[1] & ~NFSD_SUPPORTED_ATTRS_WORD1)) | 767 | || (verify->ve_bmval[1] & ~nfsd_suppattrs1(cstate->minorversion)) |
768 | || (verify->ve_bmval[2] & ~nfsd_suppattrs2(cstate->minorversion))) | ||
742 | return nfserr_attrnotsupp; | 769 | return nfserr_attrnotsupp; |
743 | if ((verify->ve_bmval[0] & FATTR4_WORD0_RDATTR_ERROR) | 770 | if ((verify->ve_bmval[0] & FATTR4_WORD0_RDATTR_ERROR) |
744 | || (verify->ve_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1)) | 771 | || (verify->ve_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1)) |
@@ -766,7 +793,8 @@ _nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
766 | if (status) | 793 | if (status) |
767 | goto out_kfree; | 794 | goto out_kfree; |
768 | 795 | ||
769 | p = buf + 3; | 796 | /* skip bitmap */ |
797 | p = buf + 1 + ntohl(buf[0]); | ||
770 | status = nfserr_not_same; | 798 | status = nfserr_not_same; |
771 | if (ntohl(*p++) != verify->ve_attrlen) | 799 | if (ntohl(*p++) != verify->ve_attrlen) |
772 | goto out_kfree; | 800 | goto out_kfree; |
@@ -813,39 +841,17 @@ static inline void nfsd4_increment_op_stats(u32 opnum) | |||
813 | nfsdstats.nfs4_opcount[opnum]++; | 841 | nfsdstats.nfs4_opcount[opnum]++; |
814 | } | 842 | } |
815 | 843 | ||
816 | static void cstate_free(struct nfsd4_compound_state *cstate) | ||
817 | { | ||
818 | if (cstate == NULL) | ||
819 | return; | ||
820 | fh_put(&cstate->current_fh); | ||
821 | fh_put(&cstate->save_fh); | ||
822 | BUG_ON(cstate->replay_owner); | ||
823 | kfree(cstate); | ||
824 | } | ||
825 | |||
826 | static struct nfsd4_compound_state *cstate_alloc(void) | ||
827 | { | ||
828 | struct nfsd4_compound_state *cstate; | ||
829 | |||
830 | cstate = kmalloc(sizeof(struct nfsd4_compound_state), GFP_KERNEL); | ||
831 | if (cstate == NULL) | ||
832 | return NULL; | ||
833 | fh_init(&cstate->current_fh, NFS4_FHSIZE); | ||
834 | fh_init(&cstate->save_fh, NFS4_FHSIZE); | ||
835 | cstate->replay_owner = NULL; | ||
836 | return cstate; | ||
837 | } | ||
838 | |||
839 | typedef __be32(*nfsd4op_func)(struct svc_rqst *, struct nfsd4_compound_state *, | 844 | typedef __be32(*nfsd4op_func)(struct svc_rqst *, struct nfsd4_compound_state *, |
840 | void *); | 845 | void *); |
846 | enum nfsd4_op_flags { | ||
847 | ALLOWED_WITHOUT_FH = 1 << 0, /* No current filehandle required */ | ||
848 | ALLOWED_ON_ABSENT_FS = 2 << 0, /* ops processed on absent fs */ | ||
849 | ALLOWED_AS_FIRST_OP = 3 << 0, /* ops reqired first in compound */ | ||
850 | }; | ||
841 | 851 | ||
842 | struct nfsd4_operation { | 852 | struct nfsd4_operation { |
843 | nfsd4op_func op_func; | 853 | nfsd4op_func op_func; |
844 | u32 op_flags; | 854 | u32 op_flags; |
845 | /* Most ops require a valid current filehandle; a few don't: */ | ||
846 | #define ALLOWED_WITHOUT_FH 1 | ||
847 | /* GETATTR and ops not listed as returning NFS4ERR_MOVED: */ | ||
848 | #define ALLOWED_ON_ABSENT_FS 2 | ||
849 | char *op_name; | 855 | char *op_name; |
850 | }; | 856 | }; |
851 | 857 | ||
@@ -854,6 +860,51 @@ static struct nfsd4_operation nfsd4_ops[]; | |||
854 | static const char *nfsd4_op_name(unsigned opnum); | 860 | static const char *nfsd4_op_name(unsigned opnum); |
855 | 861 | ||
856 | /* | 862 | /* |
863 | * This is a replay of a compound for which no cache entry pages | ||
864 | * were used. Encode the sequence operation, and if cachethis is FALSE | ||
865 | * encode the uncache rep error on the next operation. | ||
866 | */ | ||
867 | static __be32 | ||
868 | nfsd4_enc_uncached_replay(struct nfsd4_compoundargs *args, | ||
869 | struct nfsd4_compoundres *resp) | ||
870 | { | ||
871 | struct nfsd4_op *op; | ||
872 | |||
873 | dprintk("--> %s resp->opcnt %d ce_cachethis %u \n", __func__, | ||
874 | resp->opcnt, resp->cstate.slot->sl_cache_entry.ce_cachethis); | ||
875 | |||
876 | /* Encode the replayed sequence operation */ | ||
877 | BUG_ON(resp->opcnt != 1); | ||
878 | op = &args->ops[resp->opcnt - 1]; | ||
879 | nfsd4_encode_operation(resp, op); | ||
880 | |||
881 | /*return nfserr_retry_uncached_rep in next operation. */ | ||
882 | if (resp->cstate.slot->sl_cache_entry.ce_cachethis == 0) { | ||
883 | op = &args->ops[resp->opcnt++]; | ||
884 | op->status = nfserr_retry_uncached_rep; | ||
885 | nfsd4_encode_operation(resp, op); | ||
886 | } | ||
887 | return op->status; | ||
888 | } | ||
889 | |||
890 | /* | ||
891 | * Enforce NFSv4.1 COMPOUND ordering rules. | ||
892 | * | ||
893 | * TODO: | ||
894 | * - enforce NFS4ERR_NOT_ONLY_OP, | ||
895 | * - DESTROY_SESSION MUST be the final operation in the COMPOUND request. | ||
896 | */ | ||
897 | static bool nfs41_op_ordering_ok(struct nfsd4_compoundargs *args) | ||
898 | { | ||
899 | if (args->minorversion && args->opcnt > 0) { | ||
900 | struct nfsd4_op *op = &args->ops[0]; | ||
901 | return (op->status == nfserr_op_illegal) || | ||
902 | (nfsd4_ops[op->opnum].op_flags & ALLOWED_AS_FIRST_OP); | ||
903 | } | ||
904 | return true; | ||
905 | } | ||
906 | |||
907 | /* | ||
857 | * COMPOUND call. | 908 | * COMPOUND call. |
858 | */ | 909 | */ |
859 | static __be32 | 910 | static __be32 |
@@ -863,12 +914,13 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, | |||
863 | { | 914 | { |
864 | struct nfsd4_op *op; | 915 | struct nfsd4_op *op; |
865 | struct nfsd4_operation *opdesc; | 916 | struct nfsd4_operation *opdesc; |
866 | struct nfsd4_compound_state *cstate = NULL; | 917 | struct nfsd4_compound_state *cstate = &resp->cstate; |
867 | int slack_bytes; | 918 | int slack_bytes; |
868 | __be32 status; | 919 | __be32 status; |
869 | 920 | ||
870 | resp->xbuf = &rqstp->rq_res; | 921 | resp->xbuf = &rqstp->rq_res; |
871 | resp->p = rqstp->rq_res.head[0].iov_base + rqstp->rq_res.head[0].iov_len; | 922 | resp->p = rqstp->rq_res.head[0].iov_base + |
923 | rqstp->rq_res.head[0].iov_len; | ||
872 | resp->tagp = resp->p; | 924 | resp->tagp = resp->p; |
873 | /* reserve space for: taglen, tag, and opcnt */ | 925 | /* reserve space for: taglen, tag, and opcnt */ |
874 | resp->p += 2 + XDR_QUADLEN(args->taglen); | 926 | resp->p += 2 + XDR_QUADLEN(args->taglen); |
@@ -877,18 +929,25 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, | |||
877 | resp->tag = args->tag; | 929 | resp->tag = args->tag; |
878 | resp->opcnt = 0; | 930 | resp->opcnt = 0; |
879 | resp->rqstp = rqstp; | 931 | resp->rqstp = rqstp; |
932 | resp->cstate.minorversion = args->minorversion; | ||
933 | resp->cstate.replay_owner = NULL; | ||
934 | fh_init(&resp->cstate.current_fh, NFS4_FHSIZE); | ||
935 | fh_init(&resp->cstate.save_fh, NFS4_FHSIZE); | ||
936 | /* Use the deferral mechanism only for NFSv4.0 compounds */ | ||
937 | rqstp->rq_usedeferral = (args->minorversion == 0); | ||
880 | 938 | ||
881 | /* | 939 | /* |
882 | * According to RFC3010, this takes precedence over all other errors. | 940 | * According to RFC3010, this takes precedence over all other errors. |
883 | */ | 941 | */ |
884 | status = nfserr_minor_vers_mismatch; | 942 | status = nfserr_minor_vers_mismatch; |
885 | if (args->minorversion > NFSD_SUPPORTED_MINOR_VERSION) | 943 | if (args->minorversion > nfsd_supported_minorversion) |
886 | goto out; | 944 | goto out; |
887 | 945 | ||
888 | status = nfserr_resource; | 946 | if (!nfs41_op_ordering_ok(args)) { |
889 | cstate = cstate_alloc(); | 947 | op = &args->ops[0]; |
890 | if (cstate == NULL) | 948 | op->status = nfserr_sequence_pos; |
891 | goto out; | 949 | goto encode_op; |
950 | } | ||
892 | 951 | ||
893 | status = nfs_ok; | 952 | status = nfs_ok; |
894 | while (!status && resp->opcnt < args->opcnt) { | 953 | while (!status && resp->opcnt < args->opcnt) { |
@@ -897,7 +956,6 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, | |||
897 | dprintk("nfsv4 compound op #%d/%d: %d (%s)\n", | 956 | dprintk("nfsv4 compound op #%d/%d: %d (%s)\n", |
898 | resp->opcnt, args->opcnt, op->opnum, | 957 | resp->opcnt, args->opcnt, op->opnum, |
899 | nfsd4_op_name(op->opnum)); | 958 | nfsd4_op_name(op->opnum)); |
900 | |||
901 | /* | 959 | /* |
902 | * The XDR decode routines may have pre-set op->status; | 960 | * The XDR decode routines may have pre-set op->status; |
903 | * for example, if there is a miscellaneous XDR error | 961 | * for example, if there is a miscellaneous XDR error |
@@ -938,6 +996,15 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, | |||
938 | BUG_ON(op->status == nfs_ok); | 996 | BUG_ON(op->status == nfs_ok); |
939 | 997 | ||
940 | encode_op: | 998 | encode_op: |
999 | /* Only from SEQUENCE or CREATE_SESSION */ | ||
1000 | if (resp->cstate.status == nfserr_replay_cache) { | ||
1001 | dprintk("%s NFS4.1 replay from cache\n", __func__); | ||
1002 | if (nfsd4_not_cached(resp)) | ||
1003 | status = nfsd4_enc_uncached_replay(args, resp); | ||
1004 | else | ||
1005 | status = op->status; | ||
1006 | goto out; | ||
1007 | } | ||
941 | if (op->status == nfserr_replay_me) { | 1008 | if (op->status == nfserr_replay_me) { |
942 | op->replay = &cstate->replay_owner->so_replay; | 1009 | op->replay = &cstate->replay_owner->so_replay; |
943 | nfsd4_encode_replay(resp, op); | 1010 | nfsd4_encode_replay(resp, op); |
@@ -961,15 +1028,24 @@ encode_op: | |||
961 | 1028 | ||
962 | nfsd4_increment_op_stats(op->opnum); | 1029 | nfsd4_increment_op_stats(op->opnum); |
963 | } | 1030 | } |
1031 | if (!rqstp->rq_usedeferral && status == nfserr_dropit) { | ||
1032 | dprintk("%s Dropit - send NFS4ERR_DELAY\n", __func__); | ||
1033 | status = nfserr_jukebox; | ||
1034 | } | ||
964 | 1035 | ||
965 | cstate_free(cstate); | 1036 | resp->cstate.status = status; |
1037 | fh_put(&resp->cstate.current_fh); | ||
1038 | fh_put(&resp->cstate.save_fh); | ||
1039 | BUG_ON(resp->cstate.replay_owner); | ||
966 | out: | 1040 | out: |
967 | nfsd4_release_compoundargs(args); | 1041 | nfsd4_release_compoundargs(args); |
1042 | /* Reset deferral mechanism for RPC deferrals */ | ||
1043 | rqstp->rq_usedeferral = 1; | ||
968 | dprintk("nfsv4 compound returned %d\n", ntohl(status)); | 1044 | dprintk("nfsv4 compound returned %d\n", ntohl(status)); |
969 | return status; | 1045 | return status; |
970 | } | 1046 | } |
971 | 1047 | ||
972 | static struct nfsd4_operation nfsd4_ops[OP_RELEASE_LOCKOWNER+1] = { | 1048 | static struct nfsd4_operation nfsd4_ops[] = { |
973 | [OP_ACCESS] = { | 1049 | [OP_ACCESS] = { |
974 | .op_func = (nfsd4op_func)nfsd4_access, | 1050 | .op_func = (nfsd4op_func)nfsd4_access, |
975 | .op_name = "OP_ACCESS", | 1051 | .op_name = "OP_ACCESS", |
@@ -1045,7 +1121,7 @@ static struct nfsd4_operation nfsd4_ops[OP_RELEASE_LOCKOWNER+1] = { | |||
1045 | .op_name = "OP_PUTFH", | 1121 | .op_name = "OP_PUTFH", |
1046 | }, | 1122 | }, |
1047 | [OP_PUTPUBFH] = { | 1123 | [OP_PUTPUBFH] = { |
1048 | /* unsupported, just for future reference: */ | 1124 | .op_func = (nfsd4op_func)nfsd4_putrootfh, |
1049 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS, | 1125 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS, |
1050 | .op_name = "OP_PUTPUBFH", | 1126 | .op_name = "OP_PUTPUBFH", |
1051 | }, | 1127 | }, |
@@ -1119,6 +1195,28 @@ static struct nfsd4_operation nfsd4_ops[OP_RELEASE_LOCKOWNER+1] = { | |||
1119 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS, | 1195 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS, |
1120 | .op_name = "OP_RELEASE_LOCKOWNER", | 1196 | .op_name = "OP_RELEASE_LOCKOWNER", |
1121 | }, | 1197 | }, |
1198 | |||
1199 | /* NFSv4.1 operations */ | ||
1200 | [OP_EXCHANGE_ID] = { | ||
1201 | .op_func = (nfsd4op_func)nfsd4_exchange_id, | ||
1202 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP, | ||
1203 | .op_name = "OP_EXCHANGE_ID", | ||
1204 | }, | ||
1205 | [OP_CREATE_SESSION] = { | ||
1206 | .op_func = (nfsd4op_func)nfsd4_create_session, | ||
1207 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP, | ||
1208 | .op_name = "OP_CREATE_SESSION", | ||
1209 | }, | ||
1210 | [OP_DESTROY_SESSION] = { | ||
1211 | .op_func = (nfsd4op_func)nfsd4_destroy_session, | ||
1212 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP, | ||
1213 | .op_name = "OP_DESTROY_SESSION", | ||
1214 | }, | ||
1215 | [OP_SEQUENCE] = { | ||
1216 | .op_func = (nfsd4op_func)nfsd4_sequence, | ||
1217 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP, | ||
1218 | .op_name = "OP_SEQUENCE", | ||
1219 | }, | ||
1122 | }; | 1220 | }; |
1123 | 1221 | ||
1124 | static const char *nfsd4_op_name(unsigned opnum) | 1222 | static const char *nfsd4_op_name(unsigned opnum) |
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index 74f7b67567fd..3444c0052a87 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c | |||
@@ -182,36 +182,26 @@ out_unlock: | |||
182 | 182 | ||
183 | typedef int (recdir_func)(struct dentry *, struct dentry *); | 183 | typedef int (recdir_func)(struct dentry *, struct dentry *); |
184 | 184 | ||
185 | struct dentry_list { | 185 | struct name_list { |
186 | struct dentry *dentry; | 186 | char name[HEXDIR_LEN]; |
187 | struct list_head list; | 187 | struct list_head list; |
188 | }; | 188 | }; |
189 | 189 | ||
190 | struct dentry_list_arg { | ||
191 | struct list_head dentries; | ||
192 | struct dentry *parent; | ||
193 | }; | ||
194 | |||
195 | static int | 190 | static int |
196 | nfsd4_build_dentrylist(void *arg, const char *name, int namlen, | 191 | nfsd4_build_namelist(void *arg, const char *name, int namlen, |
197 | loff_t offset, u64 ino, unsigned int d_type) | 192 | loff_t offset, u64 ino, unsigned int d_type) |
198 | { | 193 | { |
199 | struct dentry_list_arg *dla = arg; | 194 | struct list_head *names = arg; |
200 | struct list_head *dentries = &dla->dentries; | 195 | struct name_list *entry; |
201 | struct dentry *parent = dla->parent; | ||
202 | struct dentry *dentry; | ||
203 | struct dentry_list *child; | ||
204 | 196 | ||
205 | if (name && isdotent(name, namlen)) | 197 | if (namlen != HEXDIR_LEN - 1) |
206 | return 0; | 198 | return 0; |
207 | dentry = lookup_one_len(name, parent, namlen); | 199 | entry = kmalloc(sizeof(struct name_list), GFP_KERNEL); |
208 | if (IS_ERR(dentry)) | 200 | if (entry == NULL) |
209 | return PTR_ERR(dentry); | ||
210 | child = kmalloc(sizeof(*child), GFP_KERNEL); | ||
211 | if (child == NULL) | ||
212 | return -ENOMEM; | 201 | return -ENOMEM; |
213 | child->dentry = dentry; | 202 | memcpy(entry->name, name, HEXDIR_LEN - 1); |
214 | list_add(&child->list, dentries); | 203 | entry->name[HEXDIR_LEN - 1] = '\0'; |
204 | list_add(&entry->list, names); | ||
215 | return 0; | 205 | return 0; |
216 | } | 206 | } |
217 | 207 | ||
@@ -220,11 +210,9 @@ nfsd4_list_rec_dir(struct dentry *dir, recdir_func *f) | |||
220 | { | 210 | { |
221 | const struct cred *original_cred; | 211 | const struct cred *original_cred; |
222 | struct file *filp; | 212 | struct file *filp; |
223 | struct dentry_list_arg dla = { | 213 | LIST_HEAD(names); |
224 | .parent = dir, | 214 | struct name_list *entry; |
225 | }; | 215 | struct dentry *dentry; |
226 | struct list_head *dentries = &dla.dentries; | ||
227 | struct dentry_list *child; | ||
228 | int status; | 216 | int status; |
229 | 217 | ||
230 | if (!rec_dir_init) | 218 | if (!rec_dir_init) |
@@ -233,31 +221,34 @@ nfsd4_list_rec_dir(struct dentry *dir, recdir_func *f) | |||
233 | status = nfs4_save_creds(&original_cred); | 221 | status = nfs4_save_creds(&original_cred); |
234 | if (status < 0) | 222 | if (status < 0) |
235 | return status; | 223 | return status; |
236 | INIT_LIST_HEAD(dentries); | ||
237 | 224 | ||
238 | filp = dentry_open(dget(dir), mntget(rec_dir.mnt), O_RDONLY, | 225 | filp = dentry_open(dget(dir), mntget(rec_dir.mnt), O_RDONLY, |
239 | current_cred()); | 226 | current_cred()); |
240 | status = PTR_ERR(filp); | 227 | status = PTR_ERR(filp); |
241 | if (IS_ERR(filp)) | 228 | if (IS_ERR(filp)) |
242 | goto out; | 229 | goto out; |
243 | INIT_LIST_HEAD(dentries); | 230 | status = vfs_readdir(filp, nfsd4_build_namelist, &names); |
244 | status = vfs_readdir(filp, nfsd4_build_dentrylist, &dla); | ||
245 | fput(filp); | 231 | fput(filp); |
246 | while (!list_empty(dentries)) { | 232 | while (!list_empty(&names)) { |
247 | child = list_entry(dentries->next, struct dentry_list, list); | 233 | entry = list_entry(names.next, struct name_list, list); |
248 | status = f(dir, child->dentry); | 234 | |
235 | dentry = lookup_one_len(entry->name, dir, HEXDIR_LEN-1); | ||
236 | if (IS_ERR(dentry)) { | ||
237 | status = PTR_ERR(dentry); | ||
238 | goto out; | ||
239 | } | ||
240 | status = f(dir, dentry); | ||
241 | dput(dentry); | ||
249 | if (status) | 242 | if (status) |
250 | goto out; | 243 | goto out; |
251 | list_del(&child->list); | 244 | list_del(&entry->list); |
252 | dput(child->dentry); | 245 | kfree(entry); |
253 | kfree(child); | ||
254 | } | 246 | } |
255 | out: | 247 | out: |
256 | while (!list_empty(dentries)) { | 248 | while (!list_empty(&names)) { |
257 | child = list_entry(dentries->next, struct dentry_list, list); | 249 | entry = list_entry(names.next, struct name_list, list); |
258 | list_del(&child->list); | 250 | list_del(&entry->list); |
259 | dput(child->dentry); | 251 | kfree(entry); |
260 | kfree(child); | ||
261 | } | 252 | } |
262 | nfs4_reset_creds(original_cred); | 253 | nfs4_reset_creds(original_cred); |
263 | return status; | 254 | return status; |
@@ -353,7 +344,8 @@ purge_old(struct dentry *parent, struct dentry *child) | |||
353 | { | 344 | { |
354 | int status; | 345 | int status; |
355 | 346 | ||
356 | if (nfs4_has_reclaimed_state(child->d_name.name)) | 347 | /* note: we currently use this path only for minorversion 0 */ |
348 | if (nfs4_has_reclaimed_state(child->d_name.name, false)) | ||
357 | return 0; | 349 | return 0; |
358 | 350 | ||
359 | status = nfsd4_clear_clid_dir(parent, child); | 351 | status = nfsd4_clear_clid_dir(parent, child); |
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index b6f60f48e94b..c65a27b76a9d 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -68,6 +68,7 @@ static u32 current_delegid = 1; | |||
68 | static u32 nfs4_init; | 68 | static u32 nfs4_init; |
69 | static stateid_t zerostateid; /* bits all 0 */ | 69 | static stateid_t zerostateid; /* bits all 0 */ |
70 | static stateid_t onestateid; /* bits all 1 */ | 70 | static stateid_t onestateid; /* bits all 1 */ |
71 | static u64 current_sessionid = 1; | ||
71 | 72 | ||
72 | #define ZERO_STATEID(stateid) (!memcmp((stateid), &zerostateid, sizeof(stateid_t))) | 73 | #define ZERO_STATEID(stateid) (!memcmp((stateid), &zerostateid, sizeof(stateid_t))) |
73 | #define ONE_STATEID(stateid) (!memcmp((stateid), &onestateid, sizeof(stateid_t))) | 74 | #define ONE_STATEID(stateid) (!memcmp((stateid), &onestateid, sizeof(stateid_t))) |
@@ -75,18 +76,21 @@ static stateid_t onestateid; /* bits all 1 */ | |||
75 | /* forward declarations */ | 76 | /* forward declarations */ |
76 | static struct nfs4_stateid * find_stateid(stateid_t *stid, int flags); | 77 | static struct nfs4_stateid * find_stateid(stateid_t *stid, int flags); |
77 | static struct nfs4_delegation * find_delegation_stateid(struct inode *ino, stateid_t *stid); | 78 | static struct nfs4_delegation * find_delegation_stateid(struct inode *ino, stateid_t *stid); |
78 | static void release_stateid_lockowners(struct nfs4_stateid *open_stp); | ||
79 | static char user_recovery_dirname[PATH_MAX] = "/var/lib/nfs/v4recovery"; | 79 | static char user_recovery_dirname[PATH_MAX] = "/var/lib/nfs/v4recovery"; |
80 | static void nfs4_set_recdir(char *recdir); | 80 | static void nfs4_set_recdir(char *recdir); |
81 | 81 | ||
82 | /* Locking: | 82 | /* Locking: */ |
83 | * | 83 | |
84 | * client_mutex: | 84 | /* Currently used for almost all code touching nfsv4 state: */ |
85 | * protects clientid_hashtbl[], clientstr_hashtbl[], | ||
86 | * unconfstr_hashtbl[], uncofid_hashtbl[]. | ||
87 | */ | ||
88 | static DEFINE_MUTEX(client_mutex); | 85 | static DEFINE_MUTEX(client_mutex); |
89 | 86 | ||
87 | /* | ||
88 | * Currently used for the del_recall_lru and file hash table. In an | ||
89 | * effort to decrease the scope of the client_mutex, this spinlock may | ||
90 | * eventually cover more: | ||
91 | */ | ||
92 | static DEFINE_SPINLOCK(recall_lock); | ||
93 | |||
90 | static struct kmem_cache *stateowner_slab = NULL; | 94 | static struct kmem_cache *stateowner_slab = NULL; |
91 | static struct kmem_cache *file_slab = NULL; | 95 | static struct kmem_cache *file_slab = NULL; |
92 | static struct kmem_cache *stateid_slab = NULL; | 96 | static struct kmem_cache *stateid_slab = NULL; |
@@ -117,37 +121,23 @@ opaque_hashval(const void *ptr, int nbytes) | |||
117 | return x; | 121 | return x; |
118 | } | 122 | } |
119 | 123 | ||
120 | /* forward declarations */ | ||
121 | static void release_stateowner(struct nfs4_stateowner *sop); | ||
122 | static void release_stateid(struct nfs4_stateid *stp, int flags); | ||
123 | |||
124 | /* | ||
125 | * Delegation state | ||
126 | */ | ||
127 | |||
128 | /* recall_lock protects the del_recall_lru */ | ||
129 | static DEFINE_SPINLOCK(recall_lock); | ||
130 | static struct list_head del_recall_lru; | 124 | static struct list_head del_recall_lru; |
131 | 125 | ||
132 | static void | ||
133 | free_nfs4_file(struct kref *kref) | ||
134 | { | ||
135 | struct nfs4_file *fp = container_of(kref, struct nfs4_file, fi_ref); | ||
136 | list_del(&fp->fi_hash); | ||
137 | iput(fp->fi_inode); | ||
138 | kmem_cache_free(file_slab, fp); | ||
139 | } | ||
140 | |||
141 | static inline void | 126 | static inline void |
142 | put_nfs4_file(struct nfs4_file *fi) | 127 | put_nfs4_file(struct nfs4_file *fi) |
143 | { | 128 | { |
144 | kref_put(&fi->fi_ref, free_nfs4_file); | 129 | if (atomic_dec_and_lock(&fi->fi_ref, &recall_lock)) { |
130 | list_del(&fi->fi_hash); | ||
131 | spin_unlock(&recall_lock); | ||
132 | iput(fi->fi_inode); | ||
133 | kmem_cache_free(file_slab, fi); | ||
134 | } | ||
145 | } | 135 | } |
146 | 136 | ||
147 | static inline void | 137 | static inline void |
148 | get_nfs4_file(struct nfs4_file *fi) | 138 | get_nfs4_file(struct nfs4_file *fi) |
149 | { | 139 | { |
150 | kref_get(&fi->fi_ref); | 140 | atomic_inc(&fi->fi_ref); |
151 | } | 141 | } |
152 | 142 | ||
153 | static int num_delegations; | 143 | static int num_delegations; |
@@ -220,9 +210,7 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_stateid *stp, struct svc_f | |||
220 | dp->dl_stateid.si_stateownerid = current_delegid++; | 210 | dp->dl_stateid.si_stateownerid = current_delegid++; |
221 | dp->dl_stateid.si_fileid = 0; | 211 | dp->dl_stateid.si_fileid = 0; |
222 | dp->dl_stateid.si_generation = 0; | 212 | dp->dl_stateid.si_generation = 0; |
223 | dp->dl_fhlen = current_fh->fh_handle.fh_size; | 213 | fh_copy_shallow(&dp->dl_fh, ¤t_fh->fh_handle); |
224 | memcpy(dp->dl_fhval, ¤t_fh->fh_handle.fh_base, | ||
225 | current_fh->fh_handle.fh_size); | ||
226 | dp->dl_time = 0; | 214 | dp->dl_time = 0; |
227 | atomic_set(&dp->dl_count, 1); | 215 | atomic_set(&dp->dl_count, 1); |
228 | list_add(&dp->dl_perfile, &fp->fi_delegations); | 216 | list_add(&dp->dl_perfile, &fp->fi_delegations); |
@@ -311,6 +299,291 @@ static struct list_head unconf_id_hashtbl[CLIENT_HASH_SIZE]; | |||
311 | static struct list_head client_lru; | 299 | static struct list_head client_lru; |
312 | static struct list_head close_lru; | 300 | static struct list_head close_lru; |
313 | 301 | ||
302 | static void unhash_generic_stateid(struct nfs4_stateid *stp) | ||
303 | { | ||
304 | list_del(&stp->st_hash); | ||
305 | list_del(&stp->st_perfile); | ||
306 | list_del(&stp->st_perstateowner); | ||
307 | } | ||
308 | |||
309 | static void free_generic_stateid(struct nfs4_stateid *stp) | ||
310 | { | ||
311 | put_nfs4_file(stp->st_file); | ||
312 | kmem_cache_free(stateid_slab, stp); | ||
313 | } | ||
314 | |||
315 | static void release_lock_stateid(struct nfs4_stateid *stp) | ||
316 | { | ||
317 | unhash_generic_stateid(stp); | ||
318 | locks_remove_posix(stp->st_vfs_file, (fl_owner_t)stp->st_stateowner); | ||
319 | free_generic_stateid(stp); | ||
320 | } | ||
321 | |||
322 | static void unhash_lockowner(struct nfs4_stateowner *sop) | ||
323 | { | ||
324 | struct nfs4_stateid *stp; | ||
325 | |||
326 | list_del(&sop->so_idhash); | ||
327 | list_del(&sop->so_strhash); | ||
328 | list_del(&sop->so_perstateid); | ||
329 | while (!list_empty(&sop->so_stateids)) { | ||
330 | stp = list_first_entry(&sop->so_stateids, | ||
331 | struct nfs4_stateid, st_perstateowner); | ||
332 | release_lock_stateid(stp); | ||
333 | } | ||
334 | } | ||
335 | |||
336 | static void release_lockowner(struct nfs4_stateowner *sop) | ||
337 | { | ||
338 | unhash_lockowner(sop); | ||
339 | nfs4_put_stateowner(sop); | ||
340 | } | ||
341 | |||
342 | static void | ||
343 | release_stateid_lockowners(struct nfs4_stateid *open_stp) | ||
344 | { | ||
345 | struct nfs4_stateowner *lock_sop; | ||
346 | |||
347 | while (!list_empty(&open_stp->st_lockowners)) { | ||
348 | lock_sop = list_entry(open_stp->st_lockowners.next, | ||
349 | struct nfs4_stateowner, so_perstateid); | ||
350 | /* list_del(&open_stp->st_lockowners); */ | ||
351 | BUG_ON(lock_sop->so_is_open_owner); | ||
352 | release_lockowner(lock_sop); | ||
353 | } | ||
354 | } | ||
355 | |||
356 | static void release_open_stateid(struct nfs4_stateid *stp) | ||
357 | { | ||
358 | unhash_generic_stateid(stp); | ||
359 | release_stateid_lockowners(stp); | ||
360 | nfsd_close(stp->st_vfs_file); | ||
361 | free_generic_stateid(stp); | ||
362 | } | ||
363 | |||
364 | static void unhash_openowner(struct nfs4_stateowner *sop) | ||
365 | { | ||
366 | struct nfs4_stateid *stp; | ||
367 | |||
368 | list_del(&sop->so_idhash); | ||
369 | list_del(&sop->so_strhash); | ||
370 | list_del(&sop->so_perclient); | ||
371 | list_del(&sop->so_perstateid); /* XXX: necessary? */ | ||
372 | while (!list_empty(&sop->so_stateids)) { | ||
373 | stp = list_first_entry(&sop->so_stateids, | ||
374 | struct nfs4_stateid, st_perstateowner); | ||
375 | release_open_stateid(stp); | ||
376 | } | ||
377 | } | ||
378 | |||
379 | static void release_openowner(struct nfs4_stateowner *sop) | ||
380 | { | ||
381 | unhash_openowner(sop); | ||
382 | list_del(&sop->so_close_lru); | ||
383 | nfs4_put_stateowner(sop); | ||
384 | } | ||
385 | |||
386 | static DEFINE_SPINLOCK(sessionid_lock); | ||
387 | #define SESSION_HASH_SIZE 512 | ||
388 | static struct list_head sessionid_hashtbl[SESSION_HASH_SIZE]; | ||
389 | |||
390 | static inline int | ||
391 | hash_sessionid(struct nfs4_sessionid *sessionid) | ||
392 | { | ||
393 | struct nfsd4_sessionid *sid = (struct nfsd4_sessionid *)sessionid; | ||
394 | |||
395 | return sid->sequence % SESSION_HASH_SIZE; | ||
396 | } | ||
397 | |||
398 | static inline void | ||
399 | dump_sessionid(const char *fn, struct nfs4_sessionid *sessionid) | ||
400 | { | ||
401 | u32 *ptr = (u32 *)(&sessionid->data[0]); | ||
402 | dprintk("%s: %u:%u:%u:%u\n", fn, ptr[0], ptr[1], ptr[2], ptr[3]); | ||
403 | } | ||
404 | |||
405 | static void | ||
406 | gen_sessionid(struct nfsd4_session *ses) | ||
407 | { | ||
408 | struct nfs4_client *clp = ses->se_client; | ||
409 | struct nfsd4_sessionid *sid; | ||
410 | |||
411 | sid = (struct nfsd4_sessionid *)ses->se_sessionid.data; | ||
412 | sid->clientid = clp->cl_clientid; | ||
413 | sid->sequence = current_sessionid++; | ||
414 | sid->reserved = 0; | ||
415 | } | ||
416 | |||
417 | /* | ||
418 | * Give the client the number of slots it requests bound by | ||
419 | * NFSD_MAX_SLOTS_PER_SESSION and by sv_drc_max_pages. | ||
420 | * | ||
421 | * If we run out of pages (sv_drc_pages_used == sv_drc_max_pages) we | ||
422 | * should (up to a point) re-negotiate active sessions and reduce their | ||
423 | * slot usage to make rooom for new connections. For now we just fail the | ||
424 | * create session. | ||
425 | */ | ||
426 | static int set_forechannel_maxreqs(struct nfsd4_channel_attrs *fchan) | ||
427 | { | ||
428 | int status = 0, np = fchan->maxreqs * NFSD_PAGES_PER_SLOT; | ||
429 | |||
430 | spin_lock(&nfsd_serv->sv_lock); | ||
431 | if (np + nfsd_serv->sv_drc_pages_used > nfsd_serv->sv_drc_max_pages) | ||
432 | np = nfsd_serv->sv_drc_max_pages - nfsd_serv->sv_drc_pages_used; | ||
433 | nfsd_serv->sv_drc_pages_used += np; | ||
434 | spin_unlock(&nfsd_serv->sv_lock); | ||
435 | |||
436 | if (np <= 0) { | ||
437 | status = nfserr_resource; | ||
438 | fchan->maxreqs = 0; | ||
439 | } else | ||
440 | fchan->maxreqs = np / NFSD_PAGES_PER_SLOT; | ||
441 | |||
442 | return status; | ||
443 | } | ||
444 | |||
445 | /* | ||
446 | * fchan holds the client values on input, and the server values on output | ||
447 | */ | ||
448 | static int init_forechannel_attrs(struct svc_rqst *rqstp, | ||
449 | struct nfsd4_session *session, | ||
450 | struct nfsd4_channel_attrs *fchan) | ||
451 | { | ||
452 | int status = 0; | ||
453 | __u32 maxcount = svc_max_payload(rqstp); | ||
454 | |||
455 | /* headerpadsz set to zero in encode routine */ | ||
456 | |||
457 | /* Use the client's max request and max response size if possible */ | ||
458 | if (fchan->maxreq_sz > maxcount) | ||
459 | fchan->maxreq_sz = maxcount; | ||
460 | session->se_fmaxreq_sz = fchan->maxreq_sz; | ||
461 | |||
462 | if (fchan->maxresp_sz > maxcount) | ||
463 | fchan->maxresp_sz = maxcount; | ||
464 | session->se_fmaxresp_sz = fchan->maxresp_sz; | ||
465 | |||
466 | /* Set the max response cached size our default which is | ||
467 | * a multiple of PAGE_SIZE and small */ | ||
468 | session->se_fmaxresp_cached = NFSD_PAGES_PER_SLOT * PAGE_SIZE; | ||
469 | fchan->maxresp_cached = session->se_fmaxresp_cached; | ||
470 | |||
471 | /* Use the client's maxops if possible */ | ||
472 | if (fchan->maxops > NFSD_MAX_OPS_PER_COMPOUND) | ||
473 | fchan->maxops = NFSD_MAX_OPS_PER_COMPOUND; | ||
474 | session->se_fmaxops = fchan->maxops; | ||
475 | |||
476 | /* try to use the client requested number of slots */ | ||
477 | if (fchan->maxreqs > NFSD_MAX_SLOTS_PER_SESSION) | ||
478 | fchan->maxreqs = NFSD_MAX_SLOTS_PER_SESSION; | ||
479 | |||
480 | /* FIXME: Error means no more DRC pages so the server should | ||
481 | * recover pages from existing sessions. For now fail session | ||
482 | * creation. | ||
483 | */ | ||
484 | status = set_forechannel_maxreqs(fchan); | ||
485 | |||
486 | session->se_fnumslots = fchan->maxreqs; | ||
487 | return status; | ||
488 | } | ||
489 | |||
490 | static int | ||
491 | alloc_init_session(struct svc_rqst *rqstp, struct nfs4_client *clp, | ||
492 | struct nfsd4_create_session *cses) | ||
493 | { | ||
494 | struct nfsd4_session *new, tmp; | ||
495 | int idx, status = nfserr_resource, slotsize; | ||
496 | |||
497 | memset(&tmp, 0, sizeof(tmp)); | ||
498 | |||
499 | /* FIXME: For now, we just accept the client back channel attributes. */ | ||
500 | status = init_forechannel_attrs(rqstp, &tmp, &cses->fore_channel); | ||
501 | if (status) | ||
502 | goto out; | ||
503 | |||
504 | /* allocate struct nfsd4_session and slot table in one piece */ | ||
505 | slotsize = tmp.se_fnumslots * sizeof(struct nfsd4_slot); | ||
506 | new = kzalloc(sizeof(*new) + slotsize, GFP_KERNEL); | ||
507 | if (!new) | ||
508 | goto out; | ||
509 | |||
510 | memcpy(new, &tmp, sizeof(*new)); | ||
511 | |||
512 | new->se_client = clp; | ||
513 | gen_sessionid(new); | ||
514 | idx = hash_sessionid(&new->se_sessionid); | ||
515 | memcpy(clp->cl_sessionid.data, new->se_sessionid.data, | ||
516 | NFS4_MAX_SESSIONID_LEN); | ||
517 | |||
518 | new->se_flags = cses->flags; | ||
519 | kref_init(&new->se_ref); | ||
520 | spin_lock(&sessionid_lock); | ||
521 | list_add(&new->se_hash, &sessionid_hashtbl[idx]); | ||
522 | list_add(&new->se_perclnt, &clp->cl_sessions); | ||
523 | spin_unlock(&sessionid_lock); | ||
524 | |||
525 | status = nfs_ok; | ||
526 | out: | ||
527 | return status; | ||
528 | } | ||
529 | |||
530 | /* caller must hold sessionid_lock */ | ||
531 | static struct nfsd4_session * | ||
532 | find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid) | ||
533 | { | ||
534 | struct nfsd4_session *elem; | ||
535 | int idx; | ||
536 | |||
537 | dump_sessionid(__func__, sessionid); | ||
538 | idx = hash_sessionid(sessionid); | ||
539 | dprintk("%s: idx is %d\n", __func__, idx); | ||
540 | /* Search in the appropriate list */ | ||
541 | list_for_each_entry(elem, &sessionid_hashtbl[idx], se_hash) { | ||
542 | dump_sessionid("list traversal", &elem->se_sessionid); | ||
543 | if (!memcmp(elem->se_sessionid.data, sessionid->data, | ||
544 | NFS4_MAX_SESSIONID_LEN)) { | ||
545 | return elem; | ||
546 | } | ||
547 | } | ||
548 | |||
549 | dprintk("%s: session not found\n", __func__); | ||
550 | return NULL; | ||
551 | } | ||
552 | |||
553 | /* caller must hold sessionid_lock */ | ||
554 | static void | ||
555 | unhash_session(struct nfsd4_session *ses) | ||
556 | { | ||
557 | list_del(&ses->se_hash); | ||
558 | list_del(&ses->se_perclnt); | ||
559 | } | ||
560 | |||
561 | static void | ||
562 | release_session(struct nfsd4_session *ses) | ||
563 | { | ||
564 | spin_lock(&sessionid_lock); | ||
565 | unhash_session(ses); | ||
566 | spin_unlock(&sessionid_lock); | ||
567 | nfsd4_put_session(ses); | ||
568 | } | ||
569 | |||
570 | static void nfsd4_release_respages(struct page **respages, short resused); | ||
571 | |||
572 | void | ||
573 | free_session(struct kref *kref) | ||
574 | { | ||
575 | struct nfsd4_session *ses; | ||
576 | int i; | ||
577 | |||
578 | ses = container_of(kref, struct nfsd4_session, se_ref); | ||
579 | for (i = 0; i < ses->se_fnumslots; i++) { | ||
580 | struct nfsd4_cache_entry *e = &ses->se_slots[i].sl_cache_entry; | ||
581 | nfsd4_release_respages(e->ce_respages, e->ce_resused); | ||
582 | } | ||
583 | kfree(ses->se_slots); | ||
584 | kfree(ses); | ||
585 | } | ||
586 | |||
314 | static inline void | 587 | static inline void |
315 | renew_client(struct nfs4_client *clp) | 588 | renew_client(struct nfs4_client *clp) |
316 | { | 589 | { |
@@ -330,8 +603,8 @@ STALE_CLIENTID(clientid_t *clid) | |||
330 | { | 603 | { |
331 | if (clid->cl_boot == boot_time) | 604 | if (clid->cl_boot == boot_time) |
332 | return 0; | 605 | return 0; |
333 | dprintk("NFSD stale clientid (%08x/%08x)\n", | 606 | dprintk("NFSD stale clientid (%08x/%08x) boot_time %08lx\n", |
334 | clid->cl_boot, clid->cl_id); | 607 | clid->cl_boot, clid->cl_id, boot_time); |
335 | return 1; | 608 | return 1; |
336 | } | 609 | } |
337 | 610 | ||
@@ -376,6 +649,8 @@ static inline void | |||
376 | free_client(struct nfs4_client *clp) | 649 | free_client(struct nfs4_client *clp) |
377 | { | 650 | { |
378 | shutdown_callback_client(clp); | 651 | shutdown_callback_client(clp); |
652 | nfsd4_release_respages(clp->cl_slot.sl_cache_entry.ce_respages, | ||
653 | clp->cl_slot.sl_cache_entry.ce_resused); | ||
379 | if (clp->cl_cred.cr_group_info) | 654 | if (clp->cl_cred.cr_group_info) |
380 | put_group_info(clp->cl_cred.cr_group_info); | 655 | put_group_info(clp->cl_cred.cr_group_info); |
381 | kfree(clp->cl_principal); | 656 | kfree(clp->cl_principal); |
@@ -420,7 +695,13 @@ expire_client(struct nfs4_client *clp) | |||
420 | list_del(&clp->cl_lru); | 695 | list_del(&clp->cl_lru); |
421 | while (!list_empty(&clp->cl_openowners)) { | 696 | while (!list_empty(&clp->cl_openowners)) { |
422 | sop = list_entry(clp->cl_openowners.next, struct nfs4_stateowner, so_perclient); | 697 | sop = list_entry(clp->cl_openowners.next, struct nfs4_stateowner, so_perclient); |
423 | release_stateowner(sop); | 698 | release_openowner(sop); |
699 | } | ||
700 | while (!list_empty(&clp->cl_sessions)) { | ||
701 | struct nfsd4_session *ses; | ||
702 | ses = list_entry(clp->cl_sessions.next, struct nfsd4_session, | ||
703 | se_perclnt); | ||
704 | release_session(ses); | ||
424 | } | 705 | } |
425 | put_nfs4_client(clp); | 706 | put_nfs4_client(clp); |
426 | } | 707 | } |
@@ -439,6 +720,7 @@ static struct nfs4_client *create_client(struct xdr_netobj name, char *recdir) | |||
439 | INIT_LIST_HEAD(&clp->cl_strhash); | 720 | INIT_LIST_HEAD(&clp->cl_strhash); |
440 | INIT_LIST_HEAD(&clp->cl_openowners); | 721 | INIT_LIST_HEAD(&clp->cl_openowners); |
441 | INIT_LIST_HEAD(&clp->cl_delegations); | 722 | INIT_LIST_HEAD(&clp->cl_delegations); |
723 | INIT_LIST_HEAD(&clp->cl_sessions); | ||
442 | INIT_LIST_HEAD(&clp->cl_lru); | 724 | INIT_LIST_HEAD(&clp->cl_lru); |
443 | return clp; | 725 | return clp; |
444 | } | 726 | } |
@@ -568,25 +850,45 @@ find_unconfirmed_client(clientid_t *clid) | |||
568 | return NULL; | 850 | return NULL; |
569 | } | 851 | } |
570 | 852 | ||
853 | /* | ||
854 | * Return 1 iff clp's clientid establishment method matches the use_exchange_id | ||
855 | * parameter. Matching is based on the fact the at least one of the | ||
856 | * EXCHGID4_FLAG_USE_{NON_PNFS,PNFS_MDS,PNFS_DS} flags must be set for v4.1 | ||
857 | * | ||
858 | * FIXME: we need to unify the clientid namespaces for nfsv4.x | ||
859 | * and correctly deal with client upgrade/downgrade in EXCHANGE_ID | ||
860 | * and SET_CLIENTID{,_CONFIRM} | ||
861 | */ | ||
862 | static inline int | ||
863 | match_clientid_establishment(struct nfs4_client *clp, bool use_exchange_id) | ||
864 | { | ||
865 | bool has_exchange_flags = (clp->cl_exchange_flags != 0); | ||
866 | return use_exchange_id == has_exchange_flags; | ||
867 | } | ||
868 | |||
571 | static struct nfs4_client * | 869 | static struct nfs4_client * |
572 | find_confirmed_client_by_str(const char *dname, unsigned int hashval) | 870 | find_confirmed_client_by_str(const char *dname, unsigned int hashval, |
871 | bool use_exchange_id) | ||
573 | { | 872 | { |
574 | struct nfs4_client *clp; | 873 | struct nfs4_client *clp; |
575 | 874 | ||
576 | list_for_each_entry(clp, &conf_str_hashtbl[hashval], cl_strhash) { | 875 | list_for_each_entry(clp, &conf_str_hashtbl[hashval], cl_strhash) { |
577 | if (same_name(clp->cl_recdir, dname)) | 876 | if (same_name(clp->cl_recdir, dname) && |
877 | match_clientid_establishment(clp, use_exchange_id)) | ||
578 | return clp; | 878 | return clp; |
579 | } | 879 | } |
580 | return NULL; | 880 | return NULL; |
581 | } | 881 | } |
582 | 882 | ||
583 | static struct nfs4_client * | 883 | static struct nfs4_client * |
584 | find_unconfirmed_client_by_str(const char *dname, unsigned int hashval) | 884 | find_unconfirmed_client_by_str(const char *dname, unsigned int hashval, |
885 | bool use_exchange_id) | ||
585 | { | 886 | { |
586 | struct nfs4_client *clp; | 887 | struct nfs4_client *clp; |
587 | 888 | ||
588 | list_for_each_entry(clp, &unconf_str_hashtbl[hashval], cl_strhash) { | 889 | list_for_each_entry(clp, &unconf_str_hashtbl[hashval], cl_strhash) { |
589 | if (same_name(clp->cl_recdir, dname)) | 890 | if (same_name(clp->cl_recdir, dname) && |
891 | match_clientid_establishment(clp, use_exchange_id)) | ||
590 | return clp; | 892 | return clp; |
591 | } | 893 | } |
592 | return NULL; | 894 | return NULL; |
@@ -685,6 +987,534 @@ out_err: | |||
685 | return; | 987 | return; |
686 | } | 988 | } |
687 | 989 | ||
990 | void | ||
991 | nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp) | ||
992 | { | ||
993 | struct nfsd4_compoundres *resp = rqstp->rq_resp; | ||
994 | |||
995 | resp->cstate.statp = statp; | ||
996 | } | ||
997 | |||
998 | /* | ||
999 | * Dereference the result pages. | ||
1000 | */ | ||
1001 | static void | ||
1002 | nfsd4_release_respages(struct page **respages, short resused) | ||
1003 | { | ||
1004 | int i; | ||
1005 | |||
1006 | dprintk("--> %s\n", __func__); | ||
1007 | for (i = 0; i < resused; i++) { | ||
1008 | if (!respages[i]) | ||
1009 | continue; | ||
1010 | put_page(respages[i]); | ||
1011 | respages[i] = NULL; | ||
1012 | } | ||
1013 | } | ||
1014 | |||
1015 | static void | ||
1016 | nfsd4_copy_pages(struct page **topages, struct page **frompages, short count) | ||
1017 | { | ||
1018 | int i; | ||
1019 | |||
1020 | for (i = 0; i < count; i++) { | ||
1021 | topages[i] = frompages[i]; | ||
1022 | if (!topages[i]) | ||
1023 | continue; | ||
1024 | get_page(topages[i]); | ||
1025 | } | ||
1026 | } | ||
1027 | |||
1028 | /* | ||
1029 | * Cache the reply pages up to NFSD_PAGES_PER_SLOT + 1, clearing the previous | ||
1030 | * pages. We add a page to NFSD_PAGES_PER_SLOT for the case where the total | ||
1031 | * length of the XDR response is less than se_fmaxresp_cached | ||
1032 | * (NFSD_PAGES_PER_SLOT * PAGE_SIZE) but the xdr_buf pages is used for a | ||
1033 | * of the reply (e.g. readdir). | ||
1034 | * | ||
1035 | * Store the base and length of the rq_req.head[0] page | ||
1036 | * of the NFSv4.1 data, just past the rpc header. | ||
1037 | */ | ||
1038 | void | ||
1039 | nfsd4_store_cache_entry(struct nfsd4_compoundres *resp) | ||
1040 | { | ||
1041 | struct nfsd4_cache_entry *entry = &resp->cstate.slot->sl_cache_entry; | ||
1042 | struct svc_rqst *rqstp = resp->rqstp; | ||
1043 | struct nfsd4_compoundargs *args = rqstp->rq_argp; | ||
1044 | struct nfsd4_op *op = &args->ops[resp->opcnt]; | ||
1045 | struct kvec *resv = &rqstp->rq_res.head[0]; | ||
1046 | |||
1047 | dprintk("--> %s entry %p\n", __func__, entry); | ||
1048 | |||
1049 | /* Don't cache a failed OP_SEQUENCE. */ | ||
1050 | if (resp->opcnt == 1 && op->opnum == OP_SEQUENCE && resp->cstate.status) | ||
1051 | return; | ||
1052 | |||
1053 | nfsd4_release_respages(entry->ce_respages, entry->ce_resused); | ||
1054 | entry->ce_opcnt = resp->opcnt; | ||
1055 | entry->ce_status = resp->cstate.status; | ||
1056 | |||
1057 | /* | ||
1058 | * Don't need a page to cache just the sequence operation - the slot | ||
1059 | * does this for us! | ||
1060 | */ | ||
1061 | |||
1062 | if (nfsd4_not_cached(resp)) { | ||
1063 | entry->ce_resused = 0; | ||
1064 | entry->ce_rpchdrlen = 0; | ||
1065 | dprintk("%s Just cache SEQUENCE. ce_cachethis %d\n", __func__, | ||
1066 | resp->cstate.slot->sl_cache_entry.ce_cachethis); | ||
1067 | return; | ||
1068 | } | ||
1069 | entry->ce_resused = rqstp->rq_resused; | ||
1070 | if (entry->ce_resused > NFSD_PAGES_PER_SLOT + 1) | ||
1071 | entry->ce_resused = NFSD_PAGES_PER_SLOT + 1; | ||
1072 | nfsd4_copy_pages(entry->ce_respages, rqstp->rq_respages, | ||
1073 | entry->ce_resused); | ||
1074 | entry->ce_datav.iov_base = resp->cstate.statp; | ||
1075 | entry->ce_datav.iov_len = resv->iov_len - ((char *)resp->cstate.statp - | ||
1076 | (char *)page_address(rqstp->rq_respages[0])); | ||
1077 | /* Current request rpc header length*/ | ||
1078 | entry->ce_rpchdrlen = (char *)resp->cstate.statp - | ||
1079 | (char *)page_address(rqstp->rq_respages[0]); | ||
1080 | } | ||
1081 | |||
1082 | /* | ||
1083 | * We keep the rpc header, but take the nfs reply from the replycache. | ||
1084 | */ | ||
1085 | static int | ||
1086 | nfsd41_copy_replay_data(struct nfsd4_compoundres *resp, | ||
1087 | struct nfsd4_cache_entry *entry) | ||
1088 | { | ||
1089 | struct svc_rqst *rqstp = resp->rqstp; | ||
1090 | struct kvec *resv = &resp->rqstp->rq_res.head[0]; | ||
1091 | int len; | ||
1092 | |||
1093 | /* Current request rpc header length*/ | ||
1094 | len = (char *)resp->cstate.statp - | ||
1095 | (char *)page_address(rqstp->rq_respages[0]); | ||
1096 | if (entry->ce_datav.iov_len + len > PAGE_SIZE) { | ||
1097 | dprintk("%s v41 cached reply too large (%Zd).\n", __func__, | ||
1098 | entry->ce_datav.iov_len); | ||
1099 | return 0; | ||
1100 | } | ||
1101 | /* copy the cached reply nfsd data past the current rpc header */ | ||
1102 | memcpy((char *)resv->iov_base + len, entry->ce_datav.iov_base, | ||
1103 | entry->ce_datav.iov_len); | ||
1104 | resv->iov_len = len + entry->ce_datav.iov_len; | ||
1105 | return 1; | ||
1106 | } | ||
1107 | |||
1108 | /* | ||
1109 | * Keep the first page of the replay. Copy the NFSv4.1 data from the first | ||
1110 | * cached page. Replace any futher replay pages from the cache. | ||
1111 | */ | ||
1112 | __be32 | ||
1113 | nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp, | ||
1114 | struct nfsd4_sequence *seq) | ||
1115 | { | ||
1116 | struct nfsd4_cache_entry *entry = &resp->cstate.slot->sl_cache_entry; | ||
1117 | __be32 status; | ||
1118 | |||
1119 | dprintk("--> %s entry %p\n", __func__, entry); | ||
1120 | |||
1121 | /* | ||
1122 | * If this is just the sequence operation, we did not keep | ||
1123 | * a page in the cache entry because we can just use the | ||
1124 | * slot info stored in struct nfsd4_sequence that was checked | ||
1125 | * against the slot in nfsd4_sequence(). | ||
1126 | * | ||
1127 | * This occurs when seq->cachethis is FALSE, or when the client | ||
1128 | * session inactivity timer fires and a solo sequence operation | ||
1129 | * is sent (lease renewal). | ||
1130 | */ | ||
1131 | if (seq && nfsd4_not_cached(resp)) { | ||
1132 | seq->maxslots = resp->cstate.session->se_fnumslots; | ||
1133 | return nfs_ok; | ||
1134 | } | ||
1135 | |||
1136 | if (!nfsd41_copy_replay_data(resp, entry)) { | ||
1137 | /* | ||
1138 | * Not enough room to use the replay rpc header, send the | ||
1139 | * cached header. Release all the allocated result pages. | ||
1140 | */ | ||
1141 | svc_free_res_pages(resp->rqstp); | ||
1142 | nfsd4_copy_pages(resp->rqstp->rq_respages, entry->ce_respages, | ||
1143 | entry->ce_resused); | ||
1144 | } else { | ||
1145 | /* Release all but the first allocated result page */ | ||
1146 | |||
1147 | resp->rqstp->rq_resused--; | ||
1148 | svc_free_res_pages(resp->rqstp); | ||
1149 | |||
1150 | nfsd4_copy_pages(&resp->rqstp->rq_respages[1], | ||
1151 | &entry->ce_respages[1], | ||
1152 | entry->ce_resused - 1); | ||
1153 | } | ||
1154 | |||
1155 | resp->rqstp->rq_resused = entry->ce_resused; | ||
1156 | resp->opcnt = entry->ce_opcnt; | ||
1157 | resp->cstate.iovlen = entry->ce_datav.iov_len + entry->ce_rpchdrlen; | ||
1158 | status = entry->ce_status; | ||
1159 | |||
1160 | return status; | ||
1161 | } | ||
1162 | |||
1163 | /* | ||
1164 | * Set the exchange_id flags returned by the server. | ||
1165 | */ | ||
1166 | static void | ||
1167 | nfsd4_set_ex_flags(struct nfs4_client *new, struct nfsd4_exchange_id *clid) | ||
1168 | { | ||
1169 | /* pNFS is not supported */ | ||
1170 | new->cl_exchange_flags |= EXCHGID4_FLAG_USE_NON_PNFS; | ||
1171 | |||
1172 | /* Referrals are supported, Migration is not. */ | ||
1173 | new->cl_exchange_flags |= EXCHGID4_FLAG_SUPP_MOVED_REFER; | ||
1174 | |||
1175 | /* set the wire flags to return to client. */ | ||
1176 | clid->flags = new->cl_exchange_flags; | ||
1177 | } | ||
1178 | |||
1179 | __be32 | ||
1180 | nfsd4_exchange_id(struct svc_rqst *rqstp, | ||
1181 | struct nfsd4_compound_state *cstate, | ||
1182 | struct nfsd4_exchange_id *exid) | ||
1183 | { | ||
1184 | struct nfs4_client *unconf, *conf, *new; | ||
1185 | int status; | ||
1186 | unsigned int strhashval; | ||
1187 | char dname[HEXDIR_LEN]; | ||
1188 | nfs4_verifier verf = exid->verifier; | ||
1189 | u32 ip_addr = svc_addr_in(rqstp)->sin_addr.s_addr; | ||
1190 | |||
1191 | dprintk("%s rqstp=%p exid=%p clname.len=%u clname.data=%p " | ||
1192 | " ip_addr=%u flags %x, spa_how %d\n", | ||
1193 | __func__, rqstp, exid, exid->clname.len, exid->clname.data, | ||
1194 | ip_addr, exid->flags, exid->spa_how); | ||
1195 | |||
1196 | if (!check_name(exid->clname) || (exid->flags & ~EXCHGID4_FLAG_MASK_A)) | ||
1197 | return nfserr_inval; | ||
1198 | |||
1199 | /* Currently only support SP4_NONE */ | ||
1200 | switch (exid->spa_how) { | ||
1201 | case SP4_NONE: | ||
1202 | break; | ||
1203 | case SP4_SSV: | ||
1204 | return nfserr_encr_alg_unsupp; | ||
1205 | default: | ||
1206 | BUG(); /* checked by xdr code */ | ||
1207 | case SP4_MACH_CRED: | ||
1208 | return nfserr_serverfault; /* no excuse :-/ */ | ||
1209 | } | ||
1210 | |||
1211 | status = nfs4_make_rec_clidname(dname, &exid->clname); | ||
1212 | |||
1213 | if (status) | ||
1214 | goto error; | ||
1215 | |||
1216 | strhashval = clientstr_hashval(dname); | ||
1217 | |||
1218 | nfs4_lock_state(); | ||
1219 | status = nfs_ok; | ||
1220 | |||
1221 | conf = find_confirmed_client_by_str(dname, strhashval, true); | ||
1222 | if (conf) { | ||
1223 | if (!same_verf(&verf, &conf->cl_verifier)) { | ||
1224 | /* 18.35.4 case 8 */ | ||
1225 | if (exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A) { | ||
1226 | status = nfserr_not_same; | ||
1227 | goto out; | ||
1228 | } | ||
1229 | /* Client reboot: destroy old state */ | ||
1230 | expire_client(conf); | ||
1231 | goto out_new; | ||
1232 | } | ||
1233 | if (!same_creds(&conf->cl_cred, &rqstp->rq_cred)) { | ||
1234 | /* 18.35.4 case 9 */ | ||
1235 | if (exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A) { | ||
1236 | status = nfserr_perm; | ||
1237 | goto out; | ||
1238 | } | ||
1239 | expire_client(conf); | ||
1240 | goto out_new; | ||
1241 | } | ||
1242 | if (ip_addr != conf->cl_addr && | ||
1243 | !(exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A)) { | ||
1244 | /* Client collision. 18.35.4 case 3 */ | ||
1245 | status = nfserr_clid_inuse; | ||
1246 | goto out; | ||
1247 | } | ||
1248 | /* | ||
1249 | * Set bit when the owner id and verifier map to an already | ||
1250 | * confirmed client id (18.35.3). | ||
1251 | */ | ||
1252 | exid->flags |= EXCHGID4_FLAG_CONFIRMED_R; | ||
1253 | |||
1254 | /* | ||
1255 | * Falling into 18.35.4 case 2, possible router replay. | ||
1256 | * Leave confirmed record intact and return same result. | ||
1257 | */ | ||
1258 | copy_verf(conf, &verf); | ||
1259 | new = conf; | ||
1260 | goto out_copy; | ||
1261 | } else { | ||
1262 | /* 18.35.4 case 7 */ | ||
1263 | if (exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A) { | ||
1264 | status = nfserr_noent; | ||
1265 | goto out; | ||
1266 | } | ||
1267 | } | ||
1268 | |||
1269 | unconf = find_unconfirmed_client_by_str(dname, strhashval, true); | ||
1270 | if (unconf) { | ||
1271 | /* | ||
1272 | * Possible retry or client restart. Per 18.35.4 case 4, | ||
1273 | * a new unconfirmed record should be generated regardless | ||
1274 | * of whether any properties have changed. | ||
1275 | */ | ||
1276 | expire_client(unconf); | ||
1277 | } | ||
1278 | |||
1279 | out_new: | ||
1280 | /* Normal case */ | ||
1281 | new = create_client(exid->clname, dname); | ||
1282 | if (new == NULL) { | ||
1283 | status = nfserr_resource; | ||
1284 | goto out; | ||
1285 | } | ||
1286 | |||
1287 | copy_verf(new, &verf); | ||
1288 | copy_cred(&new->cl_cred, &rqstp->rq_cred); | ||
1289 | new->cl_addr = ip_addr; | ||
1290 | gen_clid(new); | ||
1291 | gen_confirm(new); | ||
1292 | add_to_unconfirmed(new, strhashval); | ||
1293 | out_copy: | ||
1294 | exid->clientid.cl_boot = new->cl_clientid.cl_boot; | ||
1295 | exid->clientid.cl_id = new->cl_clientid.cl_id; | ||
1296 | |||
1297 | new->cl_slot.sl_seqid = 0; | ||
1298 | exid->seqid = 1; | ||
1299 | nfsd4_set_ex_flags(new, exid); | ||
1300 | |||
1301 | dprintk("nfsd4_exchange_id seqid %d flags %x\n", | ||
1302 | new->cl_slot.sl_seqid, new->cl_exchange_flags); | ||
1303 | status = nfs_ok; | ||
1304 | |||
1305 | out: | ||
1306 | nfs4_unlock_state(); | ||
1307 | error: | ||
1308 | dprintk("nfsd4_exchange_id returns %d\n", ntohl(status)); | ||
1309 | return status; | ||
1310 | } | ||
1311 | |||
1312 | static int | ||
1313 | check_slot_seqid(u32 seqid, struct nfsd4_slot *slot) | ||
1314 | { | ||
1315 | dprintk("%s enter. seqid %d slot->sl_seqid %d\n", __func__, seqid, | ||
1316 | slot->sl_seqid); | ||
1317 | |||
1318 | /* The slot is in use, and no response has been sent. */ | ||
1319 | if (slot->sl_inuse) { | ||
1320 | if (seqid == slot->sl_seqid) | ||
1321 | return nfserr_jukebox; | ||
1322 | else | ||
1323 | return nfserr_seq_misordered; | ||
1324 | } | ||
1325 | /* Normal */ | ||
1326 | if (likely(seqid == slot->sl_seqid + 1)) | ||
1327 | return nfs_ok; | ||
1328 | /* Replay */ | ||
1329 | if (seqid == slot->sl_seqid) | ||
1330 | return nfserr_replay_cache; | ||
1331 | /* Wraparound */ | ||
1332 | if (seqid == 1 && (slot->sl_seqid + 1) == 0) | ||
1333 | return nfs_ok; | ||
1334 | /* Misordered replay or misordered new request */ | ||
1335 | return nfserr_seq_misordered; | ||
1336 | } | ||
1337 | |||
1338 | __be32 | ||
1339 | nfsd4_create_session(struct svc_rqst *rqstp, | ||
1340 | struct nfsd4_compound_state *cstate, | ||
1341 | struct nfsd4_create_session *cr_ses) | ||
1342 | { | ||
1343 | u32 ip_addr = svc_addr_in(rqstp)->sin_addr.s_addr; | ||
1344 | struct nfsd4_compoundres *resp = rqstp->rq_resp; | ||
1345 | struct nfs4_client *conf, *unconf; | ||
1346 | struct nfsd4_slot *slot = NULL; | ||
1347 | int status = 0; | ||
1348 | |||
1349 | nfs4_lock_state(); | ||
1350 | unconf = find_unconfirmed_client(&cr_ses->clientid); | ||
1351 | conf = find_confirmed_client(&cr_ses->clientid); | ||
1352 | |||
1353 | if (conf) { | ||
1354 | slot = &conf->cl_slot; | ||
1355 | status = check_slot_seqid(cr_ses->seqid, slot); | ||
1356 | if (status == nfserr_replay_cache) { | ||
1357 | dprintk("Got a create_session replay! seqid= %d\n", | ||
1358 | slot->sl_seqid); | ||
1359 | cstate->slot = slot; | ||
1360 | cstate->status = status; | ||
1361 | /* Return the cached reply status */ | ||
1362 | status = nfsd4_replay_cache_entry(resp, NULL); | ||
1363 | goto out; | ||
1364 | } else if (cr_ses->seqid != conf->cl_slot.sl_seqid + 1) { | ||
1365 | status = nfserr_seq_misordered; | ||
1366 | dprintk("Sequence misordered!\n"); | ||
1367 | dprintk("Expected seqid= %d but got seqid= %d\n", | ||
1368 | slot->sl_seqid, cr_ses->seqid); | ||
1369 | goto out; | ||
1370 | } | ||
1371 | conf->cl_slot.sl_seqid++; | ||
1372 | } else if (unconf) { | ||
1373 | if (!same_creds(&unconf->cl_cred, &rqstp->rq_cred) || | ||
1374 | (ip_addr != unconf->cl_addr)) { | ||
1375 | status = nfserr_clid_inuse; | ||
1376 | goto out; | ||
1377 | } | ||
1378 | |||
1379 | slot = &unconf->cl_slot; | ||
1380 | status = check_slot_seqid(cr_ses->seqid, slot); | ||
1381 | if (status) { | ||
1382 | /* an unconfirmed replay returns misordered */ | ||
1383 | status = nfserr_seq_misordered; | ||
1384 | goto out; | ||
1385 | } | ||
1386 | |||
1387 | slot->sl_seqid++; /* from 0 to 1 */ | ||
1388 | move_to_confirmed(unconf); | ||
1389 | |||
1390 | /* | ||
1391 | * We do not support RDMA or persistent sessions | ||
1392 | */ | ||
1393 | cr_ses->flags &= ~SESSION4_PERSIST; | ||
1394 | cr_ses->flags &= ~SESSION4_RDMA; | ||
1395 | |||
1396 | conf = unconf; | ||
1397 | } else { | ||
1398 | status = nfserr_stale_clientid; | ||
1399 | goto out; | ||
1400 | } | ||
1401 | |||
1402 | status = alloc_init_session(rqstp, conf, cr_ses); | ||
1403 | if (status) | ||
1404 | goto out; | ||
1405 | |||
1406 | memcpy(cr_ses->sessionid.data, conf->cl_sessionid.data, | ||
1407 | NFS4_MAX_SESSIONID_LEN); | ||
1408 | cr_ses->seqid = slot->sl_seqid; | ||
1409 | |||
1410 | slot->sl_inuse = true; | ||
1411 | cstate->slot = slot; | ||
1412 | /* Ensure a page is used for the cache */ | ||
1413 | slot->sl_cache_entry.ce_cachethis = 1; | ||
1414 | out: | ||
1415 | nfs4_unlock_state(); | ||
1416 | dprintk("%s returns %d\n", __func__, ntohl(status)); | ||
1417 | return status; | ||
1418 | } | ||
1419 | |||
1420 | __be32 | ||
1421 | nfsd4_destroy_session(struct svc_rqst *r, | ||
1422 | struct nfsd4_compound_state *cstate, | ||
1423 | struct nfsd4_destroy_session *sessionid) | ||
1424 | { | ||
1425 | struct nfsd4_session *ses; | ||
1426 | u32 status = nfserr_badsession; | ||
1427 | |||
1428 | /* Notes: | ||
1429 | * - The confirmed nfs4_client->cl_sessionid holds destroyed sessinid | ||
1430 | * - Should we return nfserr_back_chan_busy if waiting for | ||
1431 | * callbacks on to-be-destroyed session? | ||
1432 | * - Do we need to clear any callback info from previous session? | ||
1433 | */ | ||
1434 | |||
1435 | dump_sessionid(__func__, &sessionid->sessionid); | ||
1436 | spin_lock(&sessionid_lock); | ||
1437 | ses = find_in_sessionid_hashtbl(&sessionid->sessionid); | ||
1438 | if (!ses) { | ||
1439 | spin_unlock(&sessionid_lock); | ||
1440 | goto out; | ||
1441 | } | ||
1442 | |||
1443 | unhash_session(ses); | ||
1444 | spin_unlock(&sessionid_lock); | ||
1445 | |||
1446 | /* wait for callbacks */ | ||
1447 | shutdown_callback_client(ses->se_client); | ||
1448 | nfsd4_put_session(ses); | ||
1449 | status = nfs_ok; | ||
1450 | out: | ||
1451 | dprintk("%s returns %d\n", __func__, ntohl(status)); | ||
1452 | return status; | ||
1453 | } | ||
1454 | |||
1455 | __be32 | ||
1456 | nfsd4_sequence(struct svc_rqst *rqstp, | ||
1457 | struct nfsd4_compound_state *cstate, | ||
1458 | struct nfsd4_sequence *seq) | ||
1459 | { | ||
1460 | struct nfsd4_compoundres *resp = rqstp->rq_resp; | ||
1461 | struct nfsd4_session *session; | ||
1462 | struct nfsd4_slot *slot; | ||
1463 | int status; | ||
1464 | |||
1465 | if (resp->opcnt != 1) | ||
1466 | return nfserr_sequence_pos; | ||
1467 | |||
1468 | spin_lock(&sessionid_lock); | ||
1469 | status = nfserr_badsession; | ||
1470 | session = find_in_sessionid_hashtbl(&seq->sessionid); | ||
1471 | if (!session) | ||
1472 | goto out; | ||
1473 | |||
1474 | status = nfserr_badslot; | ||
1475 | if (seq->slotid >= session->se_fnumslots) | ||
1476 | goto out; | ||
1477 | |||
1478 | slot = &session->se_slots[seq->slotid]; | ||
1479 | dprintk("%s: slotid %d\n", __func__, seq->slotid); | ||
1480 | |||
1481 | status = check_slot_seqid(seq->seqid, slot); | ||
1482 | if (status == nfserr_replay_cache) { | ||
1483 | cstate->slot = slot; | ||
1484 | cstate->session = session; | ||
1485 | /* Return the cached reply status and set cstate->status | ||
1486 | * for nfsd4_svc_encode_compoundres processing */ | ||
1487 | status = nfsd4_replay_cache_entry(resp, seq); | ||
1488 | cstate->status = nfserr_replay_cache; | ||
1489 | goto replay_cache; | ||
1490 | } | ||
1491 | if (status) | ||
1492 | goto out; | ||
1493 | |||
1494 | /* Success! bump slot seqid */ | ||
1495 | slot->sl_inuse = true; | ||
1496 | slot->sl_seqid = seq->seqid; | ||
1497 | slot->sl_cache_entry.ce_cachethis = seq->cachethis; | ||
1498 | /* Always set the cache entry cachethis for solo sequence */ | ||
1499 | if (nfsd4_is_solo_sequence(resp)) | ||
1500 | slot->sl_cache_entry.ce_cachethis = 1; | ||
1501 | |||
1502 | cstate->slot = slot; | ||
1503 | cstate->session = session; | ||
1504 | |||
1505 | replay_cache: | ||
1506 | /* Renew the clientid on success and on replay. | ||
1507 | * Hold a session reference until done processing the compound: | ||
1508 | * nfsd4_put_session called only if the cstate slot is set. | ||
1509 | */ | ||
1510 | renew_client(session->se_client); | ||
1511 | nfsd4_get_session(session); | ||
1512 | out: | ||
1513 | spin_unlock(&sessionid_lock); | ||
1514 | dprintk("%s: return %d\n", __func__, ntohl(status)); | ||
1515 | return status; | ||
1516 | } | ||
1517 | |||
688 | __be32 | 1518 | __be32 |
689 | nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | 1519 | nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, |
690 | struct nfsd4_setclientid *setclid) | 1520 | struct nfsd4_setclientid *setclid) |
@@ -716,14 +1546,13 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
716 | strhashval = clientstr_hashval(dname); | 1546 | strhashval = clientstr_hashval(dname); |
717 | 1547 | ||
718 | nfs4_lock_state(); | 1548 | nfs4_lock_state(); |
719 | conf = find_confirmed_client_by_str(dname, strhashval); | 1549 | conf = find_confirmed_client_by_str(dname, strhashval, false); |
720 | if (conf) { | 1550 | if (conf) { |
721 | /* RFC 3530 14.2.33 CASE 0: */ | 1551 | /* RFC 3530 14.2.33 CASE 0: */ |
722 | status = nfserr_clid_inuse; | 1552 | status = nfserr_clid_inuse; |
723 | if (!same_creds(&conf->cl_cred, &rqstp->rq_cred) | 1553 | if (!same_creds(&conf->cl_cred, &rqstp->rq_cred)) { |
724 | || conf->cl_addr != sin->sin_addr.s_addr) { | 1554 | dprintk("NFSD: setclientid: string in use by client" |
725 | dprintk("NFSD: setclientid: string in use by clientat %pI4\n", | 1555 | " at %pI4\n", &conf->cl_addr); |
726 | &conf->cl_addr); | ||
727 | goto out; | 1556 | goto out; |
728 | } | 1557 | } |
729 | } | 1558 | } |
@@ -732,7 +1561,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
732 | * has a description of SETCLIENTID request processing consisting | 1561 | * has a description of SETCLIENTID request processing consisting |
733 | * of 5 bullet points, labeled as CASE0 - CASE4 below. | 1562 | * of 5 bullet points, labeled as CASE0 - CASE4 below. |
734 | */ | 1563 | */ |
735 | unconf = find_unconfirmed_client_by_str(dname, strhashval); | 1564 | unconf = find_unconfirmed_client_by_str(dname, strhashval, false); |
736 | status = nfserr_resource; | 1565 | status = nfserr_resource; |
737 | if (!conf) { | 1566 | if (!conf) { |
738 | /* | 1567 | /* |
@@ -887,7 +1716,7 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, | |||
887 | unsigned int hash = | 1716 | unsigned int hash = |
888 | clientstr_hashval(unconf->cl_recdir); | 1717 | clientstr_hashval(unconf->cl_recdir); |
889 | conf = find_confirmed_client_by_str(unconf->cl_recdir, | 1718 | conf = find_confirmed_client_by_str(unconf->cl_recdir, |
890 | hash); | 1719 | hash, false); |
891 | if (conf) { | 1720 | if (conf) { |
892 | nfsd4_remove_clid_dir(conf); | 1721 | nfsd4_remove_clid_dir(conf); |
893 | expire_client(conf); | 1722 | expire_client(conf); |
@@ -923,11 +1752,13 @@ alloc_init_file(struct inode *ino) | |||
923 | 1752 | ||
924 | fp = kmem_cache_alloc(file_slab, GFP_KERNEL); | 1753 | fp = kmem_cache_alloc(file_slab, GFP_KERNEL); |
925 | if (fp) { | 1754 | if (fp) { |
926 | kref_init(&fp->fi_ref); | 1755 | atomic_set(&fp->fi_ref, 1); |
927 | INIT_LIST_HEAD(&fp->fi_hash); | 1756 | INIT_LIST_HEAD(&fp->fi_hash); |
928 | INIT_LIST_HEAD(&fp->fi_stateids); | 1757 | INIT_LIST_HEAD(&fp->fi_stateids); |
929 | INIT_LIST_HEAD(&fp->fi_delegations); | 1758 | INIT_LIST_HEAD(&fp->fi_delegations); |
1759 | spin_lock(&recall_lock); | ||
930 | list_add(&fp->fi_hash, &file_hashtbl[hashval]); | 1760 | list_add(&fp->fi_hash, &file_hashtbl[hashval]); |
1761 | spin_unlock(&recall_lock); | ||
931 | fp->fi_inode = igrab(ino); | 1762 | fp->fi_inode = igrab(ino); |
932 | fp->fi_id = current_fileid++; | 1763 | fp->fi_id = current_fileid++; |
933 | fp->fi_had_conflict = false; | 1764 | fp->fi_had_conflict = false; |
@@ -1037,48 +1868,6 @@ alloc_init_open_stateowner(unsigned int strhashval, struct nfs4_client *clp, str | |||
1037 | return sop; | 1868 | return sop; |
1038 | } | 1869 | } |
1039 | 1870 | ||
1040 | static void | ||
1041 | release_stateid_lockowners(struct nfs4_stateid *open_stp) | ||
1042 | { | ||
1043 | struct nfs4_stateowner *lock_sop; | ||
1044 | |||
1045 | while (!list_empty(&open_stp->st_lockowners)) { | ||
1046 | lock_sop = list_entry(open_stp->st_lockowners.next, | ||
1047 | struct nfs4_stateowner, so_perstateid); | ||
1048 | /* list_del(&open_stp->st_lockowners); */ | ||
1049 | BUG_ON(lock_sop->so_is_open_owner); | ||
1050 | release_stateowner(lock_sop); | ||
1051 | } | ||
1052 | } | ||
1053 | |||
1054 | static void | ||
1055 | unhash_stateowner(struct nfs4_stateowner *sop) | ||
1056 | { | ||
1057 | struct nfs4_stateid *stp; | ||
1058 | |||
1059 | list_del(&sop->so_idhash); | ||
1060 | list_del(&sop->so_strhash); | ||
1061 | if (sop->so_is_open_owner) | ||
1062 | list_del(&sop->so_perclient); | ||
1063 | list_del(&sop->so_perstateid); | ||
1064 | while (!list_empty(&sop->so_stateids)) { | ||
1065 | stp = list_entry(sop->so_stateids.next, | ||
1066 | struct nfs4_stateid, st_perstateowner); | ||
1067 | if (sop->so_is_open_owner) | ||
1068 | release_stateid(stp, OPEN_STATE); | ||
1069 | else | ||
1070 | release_stateid(stp, LOCK_STATE); | ||
1071 | } | ||
1072 | } | ||
1073 | |||
1074 | static void | ||
1075 | release_stateowner(struct nfs4_stateowner *sop) | ||
1076 | { | ||
1077 | unhash_stateowner(sop); | ||
1078 | list_del(&sop->so_close_lru); | ||
1079 | nfs4_put_stateowner(sop); | ||
1080 | } | ||
1081 | |||
1082 | static inline void | 1871 | static inline void |
1083 | init_stateid(struct nfs4_stateid *stp, struct nfs4_file *fp, struct nfsd4_open *open) { | 1872 | init_stateid(struct nfs4_stateid *stp, struct nfs4_file *fp, struct nfsd4_open *open) { |
1084 | struct nfs4_stateowner *sop = open->op_stateowner; | 1873 | struct nfs4_stateowner *sop = open->op_stateowner; |
@@ -1100,30 +1889,13 @@ init_stateid(struct nfs4_stateid *stp, struct nfs4_file *fp, struct nfsd4_open * | |||
1100 | stp->st_stateid.si_generation = 0; | 1889 | stp->st_stateid.si_generation = 0; |
1101 | stp->st_access_bmap = 0; | 1890 | stp->st_access_bmap = 0; |
1102 | stp->st_deny_bmap = 0; | 1891 | stp->st_deny_bmap = 0; |
1103 | __set_bit(open->op_share_access, &stp->st_access_bmap); | 1892 | __set_bit(open->op_share_access & ~NFS4_SHARE_WANT_MASK, |
1893 | &stp->st_access_bmap); | ||
1104 | __set_bit(open->op_share_deny, &stp->st_deny_bmap); | 1894 | __set_bit(open->op_share_deny, &stp->st_deny_bmap); |
1105 | stp->st_openstp = NULL; | 1895 | stp->st_openstp = NULL; |
1106 | } | 1896 | } |
1107 | 1897 | ||
1108 | static void | 1898 | static void |
1109 | release_stateid(struct nfs4_stateid *stp, int flags) | ||
1110 | { | ||
1111 | struct file *filp = stp->st_vfs_file; | ||
1112 | |||
1113 | list_del(&stp->st_hash); | ||
1114 | list_del(&stp->st_perfile); | ||
1115 | list_del(&stp->st_perstateowner); | ||
1116 | if (flags & OPEN_STATE) { | ||
1117 | release_stateid_lockowners(stp); | ||
1118 | stp->st_vfs_file = NULL; | ||
1119 | nfsd_close(filp); | ||
1120 | } else if (flags & LOCK_STATE) | ||
1121 | locks_remove_posix(filp, (fl_owner_t) stp->st_stateowner); | ||
1122 | put_nfs4_file(stp->st_file); | ||
1123 | kmem_cache_free(stateid_slab, stp); | ||
1124 | } | ||
1125 | |||
1126 | static void | ||
1127 | move_to_close_lru(struct nfs4_stateowner *sop) | 1899 | move_to_close_lru(struct nfs4_stateowner *sop) |
1128 | { | 1900 | { |
1129 | dprintk("NFSD: move_to_close_lru nfs4_stateowner %p\n", sop); | 1901 | dprintk("NFSD: move_to_close_lru nfs4_stateowner %p\n", sop); |
@@ -1160,20 +1932,33 @@ find_file(struct inode *ino) | |||
1160 | unsigned int hashval = file_hashval(ino); | 1932 | unsigned int hashval = file_hashval(ino); |
1161 | struct nfs4_file *fp; | 1933 | struct nfs4_file *fp; |
1162 | 1934 | ||
1935 | spin_lock(&recall_lock); | ||
1163 | list_for_each_entry(fp, &file_hashtbl[hashval], fi_hash) { | 1936 | list_for_each_entry(fp, &file_hashtbl[hashval], fi_hash) { |
1164 | if (fp->fi_inode == ino) { | 1937 | if (fp->fi_inode == ino) { |
1165 | get_nfs4_file(fp); | 1938 | get_nfs4_file(fp); |
1939 | spin_unlock(&recall_lock); | ||
1166 | return fp; | 1940 | return fp; |
1167 | } | 1941 | } |
1168 | } | 1942 | } |
1943 | spin_unlock(&recall_lock); | ||
1169 | return NULL; | 1944 | return NULL; |
1170 | } | 1945 | } |
1171 | 1946 | ||
1172 | static inline int access_valid(u32 x) | 1947 | static inline int access_valid(u32 x, u32 minorversion) |
1173 | { | 1948 | { |
1174 | if (x < NFS4_SHARE_ACCESS_READ) | 1949 | if ((x & NFS4_SHARE_ACCESS_MASK) < NFS4_SHARE_ACCESS_READ) |
1175 | return 0; | 1950 | return 0; |
1176 | if (x > NFS4_SHARE_ACCESS_BOTH) | 1951 | if ((x & NFS4_SHARE_ACCESS_MASK) > NFS4_SHARE_ACCESS_BOTH) |
1952 | return 0; | ||
1953 | x &= ~NFS4_SHARE_ACCESS_MASK; | ||
1954 | if (minorversion && x) { | ||
1955 | if ((x & NFS4_SHARE_WANT_MASK) > NFS4_SHARE_WANT_CANCEL) | ||
1956 | return 0; | ||
1957 | if ((x & NFS4_SHARE_WHEN_MASK) > NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED) | ||
1958 | return 0; | ||
1959 | x &= ~(NFS4_SHARE_WANT_MASK | NFS4_SHARE_WHEN_MASK); | ||
1960 | } | ||
1961 | if (x) | ||
1177 | return 0; | 1962 | return 0; |
1178 | return 1; | 1963 | return 1; |
1179 | } | 1964 | } |
@@ -1409,7 +2194,8 @@ static struct lock_manager_operations nfsd_lease_mng_ops = { | |||
1409 | 2194 | ||
1410 | 2195 | ||
1411 | __be32 | 2196 | __be32 |
1412 | nfsd4_process_open1(struct nfsd4_open *open) | 2197 | nfsd4_process_open1(struct nfsd4_compound_state *cstate, |
2198 | struct nfsd4_open *open) | ||
1413 | { | 2199 | { |
1414 | clientid_t *clientid = &open->op_clientid; | 2200 | clientid_t *clientid = &open->op_clientid; |
1415 | struct nfs4_client *clp = NULL; | 2201 | struct nfs4_client *clp = NULL; |
@@ -1432,10 +2218,13 @@ nfsd4_process_open1(struct nfsd4_open *open) | |||
1432 | return nfserr_expired; | 2218 | return nfserr_expired; |
1433 | goto renew; | 2219 | goto renew; |
1434 | } | 2220 | } |
2221 | /* When sessions are used, skip open sequenceid processing */ | ||
2222 | if (nfsd4_has_session(cstate)) | ||
2223 | goto renew; | ||
1435 | if (!sop->so_confirmed) { | 2224 | if (!sop->so_confirmed) { |
1436 | /* Replace unconfirmed owners without checking for replay. */ | 2225 | /* Replace unconfirmed owners without checking for replay. */ |
1437 | clp = sop->so_client; | 2226 | clp = sop->so_client; |
1438 | release_stateowner(sop); | 2227 | release_openowner(sop); |
1439 | open->op_stateowner = NULL; | 2228 | open->op_stateowner = NULL; |
1440 | goto renew; | 2229 | goto renew; |
1441 | } | 2230 | } |
@@ -1709,6 +2498,7 @@ out: | |||
1709 | __be32 | 2498 | __be32 |
1710 | nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open) | 2499 | nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open) |
1711 | { | 2500 | { |
2501 | struct nfsd4_compoundres *resp = rqstp->rq_resp; | ||
1712 | struct nfs4_file *fp = NULL; | 2502 | struct nfs4_file *fp = NULL; |
1713 | struct inode *ino = current_fh->fh_dentry->d_inode; | 2503 | struct inode *ino = current_fh->fh_dentry->d_inode; |
1714 | struct nfs4_stateid *stp = NULL; | 2504 | struct nfs4_stateid *stp = NULL; |
@@ -1716,7 +2506,7 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf | |||
1716 | __be32 status; | 2506 | __be32 status; |
1717 | 2507 | ||
1718 | status = nfserr_inval; | 2508 | status = nfserr_inval; |
1719 | if (!access_valid(open->op_share_access) | 2509 | if (!access_valid(open->op_share_access, resp->cstate.minorversion) |
1720 | || !deny_valid(open->op_share_deny)) | 2510 | || !deny_valid(open->op_share_deny)) |
1721 | goto out; | 2511 | goto out; |
1722 | /* | 2512 | /* |
@@ -1764,12 +2554,17 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf | |||
1764 | init_stateid(stp, fp, open); | 2554 | init_stateid(stp, fp, open); |
1765 | status = nfsd4_truncate(rqstp, current_fh, open); | 2555 | status = nfsd4_truncate(rqstp, current_fh, open); |
1766 | if (status) { | 2556 | if (status) { |
1767 | release_stateid(stp, OPEN_STATE); | 2557 | release_open_stateid(stp); |
1768 | goto out; | 2558 | goto out; |
1769 | } | 2559 | } |
2560 | if (nfsd4_has_session(&resp->cstate)) | ||
2561 | update_stateid(&stp->st_stateid); | ||
1770 | } | 2562 | } |
1771 | memcpy(&open->op_stateid, &stp->st_stateid, sizeof(stateid_t)); | 2563 | memcpy(&open->op_stateid, &stp->st_stateid, sizeof(stateid_t)); |
1772 | 2564 | ||
2565 | if (nfsd4_has_session(&resp->cstate)) | ||
2566 | open->op_stateowner->so_confirmed = 1; | ||
2567 | |||
1773 | /* | 2568 | /* |
1774 | * Attempt to hand out a delegation. No error return, because the | 2569 | * Attempt to hand out a delegation. No error return, because the |
1775 | * OPEN succeeds even if we fail. | 2570 | * OPEN succeeds even if we fail. |
@@ -1790,7 +2585,8 @@ out: | |||
1790 | * To finish the open response, we just need to set the rflags. | 2585 | * To finish the open response, we just need to set the rflags. |
1791 | */ | 2586 | */ |
1792 | open->op_rflags = NFS4_OPEN_RESULT_LOCKTYPE_POSIX; | 2587 | open->op_rflags = NFS4_OPEN_RESULT_LOCKTYPE_POSIX; |
1793 | if (!open->op_stateowner->so_confirmed) | 2588 | if (!open->op_stateowner->so_confirmed && |
2589 | !nfsd4_has_session(&resp->cstate)) | ||
1794 | open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM; | 2590 | open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM; |
1795 | 2591 | ||
1796 | return status; | 2592 | return status; |
@@ -1898,7 +2694,7 @@ nfs4_laundromat(void) | |||
1898 | } | 2694 | } |
1899 | dprintk("NFSD: purging unused open stateowner (so_id %d)\n", | 2695 | dprintk("NFSD: purging unused open stateowner (so_id %d)\n", |
1900 | sop->so_id); | 2696 | sop->so_id); |
1901 | release_stateowner(sop); | 2697 | release_openowner(sop); |
1902 | } | 2698 | } |
1903 | if (clientid_val < NFSD_LAUNDROMAT_MINTIMEOUT) | 2699 | if (clientid_val < NFSD_LAUNDROMAT_MINTIMEOUT) |
1904 | clientid_val = NFSD_LAUNDROMAT_MINTIMEOUT; | 2700 | clientid_val = NFSD_LAUNDROMAT_MINTIMEOUT; |
@@ -1983,10 +2779,7 @@ out: | |||
1983 | static inline __be32 | 2779 | static inline __be32 |
1984 | check_special_stateids(svc_fh *current_fh, stateid_t *stateid, int flags) | 2780 | check_special_stateids(svc_fh *current_fh, stateid_t *stateid, int flags) |
1985 | { | 2781 | { |
1986 | /* Trying to call delegreturn with a special stateid? Yuch: */ | 2782 | if (ONE_STATEID(stateid) && (flags & RD_STATE)) |
1987 | if (!(flags & (RD_STATE | WR_STATE))) | ||
1988 | return nfserr_bad_stateid; | ||
1989 | else if (ONE_STATEID(stateid) && (flags & RD_STATE)) | ||
1990 | return nfs_ok; | 2783 | return nfs_ok; |
1991 | else if (locks_in_grace()) { | 2784 | else if (locks_in_grace()) { |
1992 | /* Answer in remaining cases depends on existance of | 2785 | /* Answer in remaining cases depends on existance of |
@@ -2005,14 +2798,20 @@ check_special_stateids(svc_fh *current_fh, stateid_t *stateid, int flags) | |||
2005 | * that are not able to provide mandatory locking. | 2798 | * that are not able to provide mandatory locking. |
2006 | */ | 2799 | */ |
2007 | static inline int | 2800 | static inline int |
2008 | io_during_grace_disallowed(struct inode *inode, int flags) | 2801 | grace_disallows_io(struct inode *inode) |
2009 | { | 2802 | { |
2010 | return locks_in_grace() && (flags & (RD_STATE | WR_STATE)) | 2803 | return locks_in_grace() && mandatory_lock(inode); |
2011 | && mandatory_lock(inode); | ||
2012 | } | 2804 | } |
2013 | 2805 | ||
2014 | static int check_stateid_generation(stateid_t *in, stateid_t *ref) | 2806 | static int check_stateid_generation(stateid_t *in, stateid_t *ref, int flags) |
2015 | { | 2807 | { |
2808 | /* | ||
2809 | * When sessions are used the stateid generation number is ignored | ||
2810 | * when it is zero. | ||
2811 | */ | ||
2812 | if ((flags & HAS_SESSION) && in->si_generation == 0) | ||
2813 | goto out; | ||
2814 | |||
2016 | /* If the client sends us a stateid from the future, it's buggy: */ | 2815 | /* If the client sends us a stateid from the future, it's buggy: */ |
2017 | if (in->si_generation > ref->si_generation) | 2816 | if (in->si_generation > ref->si_generation) |
2018 | return nfserr_bad_stateid; | 2817 | return nfserr_bad_stateid; |
@@ -2028,74 +2827,77 @@ static int check_stateid_generation(stateid_t *in, stateid_t *ref) | |||
2028 | */ | 2827 | */ |
2029 | if (in->si_generation < ref->si_generation) | 2828 | if (in->si_generation < ref->si_generation) |
2030 | return nfserr_old_stateid; | 2829 | return nfserr_old_stateid; |
2830 | out: | ||
2031 | return nfs_ok; | 2831 | return nfs_ok; |
2032 | } | 2832 | } |
2033 | 2833 | ||
2834 | static int is_delegation_stateid(stateid_t *stateid) | ||
2835 | { | ||
2836 | return stateid->si_fileid == 0; | ||
2837 | } | ||
2838 | |||
2034 | /* | 2839 | /* |
2035 | * Checks for stateid operations | 2840 | * Checks for stateid operations |
2036 | */ | 2841 | */ |
2037 | __be32 | 2842 | __be32 |
2038 | nfs4_preprocess_stateid_op(struct svc_fh *current_fh, stateid_t *stateid, int flags, struct file **filpp) | 2843 | nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate, |
2844 | stateid_t *stateid, int flags, struct file **filpp) | ||
2039 | { | 2845 | { |
2040 | struct nfs4_stateid *stp = NULL; | 2846 | struct nfs4_stateid *stp = NULL; |
2041 | struct nfs4_delegation *dp = NULL; | 2847 | struct nfs4_delegation *dp = NULL; |
2042 | stateid_t *stidp; | 2848 | struct svc_fh *current_fh = &cstate->current_fh; |
2043 | struct inode *ino = current_fh->fh_dentry->d_inode; | 2849 | struct inode *ino = current_fh->fh_dentry->d_inode; |
2044 | __be32 status; | 2850 | __be32 status; |
2045 | 2851 | ||
2046 | dprintk("NFSD: preprocess_stateid_op: stateid = (%08x/%08x/%08x/%08x)\n", | ||
2047 | stateid->si_boot, stateid->si_stateownerid, | ||
2048 | stateid->si_fileid, stateid->si_generation); | ||
2049 | if (filpp) | 2852 | if (filpp) |
2050 | *filpp = NULL; | 2853 | *filpp = NULL; |
2051 | 2854 | ||
2052 | if (io_during_grace_disallowed(ino, flags)) | 2855 | if (grace_disallows_io(ino)) |
2053 | return nfserr_grace; | 2856 | return nfserr_grace; |
2054 | 2857 | ||
2858 | if (nfsd4_has_session(cstate)) | ||
2859 | flags |= HAS_SESSION; | ||
2860 | |||
2055 | if (ZERO_STATEID(stateid) || ONE_STATEID(stateid)) | 2861 | if (ZERO_STATEID(stateid) || ONE_STATEID(stateid)) |
2056 | return check_special_stateids(current_fh, stateid, flags); | 2862 | return check_special_stateids(current_fh, stateid, flags); |
2057 | 2863 | ||
2058 | /* STALE STATEID */ | ||
2059 | status = nfserr_stale_stateid; | 2864 | status = nfserr_stale_stateid; |
2060 | if (STALE_STATEID(stateid)) | 2865 | if (STALE_STATEID(stateid)) |
2061 | goto out; | 2866 | goto out; |
2062 | 2867 | ||
2063 | /* BAD STATEID */ | ||
2064 | status = nfserr_bad_stateid; | 2868 | status = nfserr_bad_stateid; |
2065 | if (!stateid->si_fileid) { /* delegation stateid */ | 2869 | if (is_delegation_stateid(stateid)) { |
2066 | if(!(dp = find_delegation_stateid(ino, stateid))) { | 2870 | dp = find_delegation_stateid(ino, stateid); |
2067 | dprintk("NFSD: delegation stateid not found\n"); | 2871 | if (!dp) |
2068 | goto out; | 2872 | goto out; |
2069 | } | 2873 | status = check_stateid_generation(stateid, &dp->dl_stateid, |
2070 | stidp = &dp->dl_stateid; | 2874 | flags); |
2875 | if (status) | ||
2876 | goto out; | ||
2877 | status = nfs4_check_delegmode(dp, flags); | ||
2878 | if (status) | ||
2879 | goto out; | ||
2880 | renew_client(dp->dl_client); | ||
2881 | if (filpp) | ||
2882 | *filpp = dp->dl_vfs_file; | ||
2071 | } else { /* open or lock stateid */ | 2883 | } else { /* open or lock stateid */ |
2072 | if (!(stp = find_stateid(stateid, flags))) { | 2884 | stp = find_stateid(stateid, flags); |
2073 | dprintk("NFSD: open or lock stateid not found\n"); | 2885 | if (!stp) |
2074 | goto out; | 2886 | goto out; |
2075 | } | 2887 | if (nfs4_check_fh(current_fh, stp)) |
2076 | if ((flags & CHECK_FH) && nfs4_check_fh(current_fh, stp)) | ||
2077 | goto out; | 2888 | goto out; |
2078 | if (!stp->st_stateowner->so_confirmed) | 2889 | if (!stp->st_stateowner->so_confirmed) |
2079 | goto out; | 2890 | goto out; |
2080 | stidp = &stp->st_stateid; | 2891 | status = check_stateid_generation(stateid, &stp->st_stateid, |
2081 | } | 2892 | flags); |
2082 | status = check_stateid_generation(stateid, stidp); | 2893 | if (status) |
2083 | if (status) | 2894 | goto out; |
2084 | goto out; | 2895 | status = nfs4_check_openmode(stp, flags); |
2085 | if (stp) { | 2896 | if (status) |
2086 | if ((status = nfs4_check_openmode(stp,flags))) | ||
2087 | goto out; | 2897 | goto out; |
2088 | renew_client(stp->st_stateowner->so_client); | 2898 | renew_client(stp->st_stateowner->so_client); |
2089 | if (filpp) | 2899 | if (filpp) |
2090 | *filpp = stp->st_vfs_file; | 2900 | *filpp = stp->st_vfs_file; |
2091 | } else { | ||
2092 | if ((status = nfs4_check_delegmode(dp, flags))) | ||
2093 | goto out; | ||
2094 | renew_client(dp->dl_client); | ||
2095 | if (flags & DELEG_RET) | ||
2096 | unhash_delegation(dp); | ||
2097 | if (filpp) | ||
2098 | *filpp = dp->dl_vfs_file; | ||
2099 | } | 2901 | } |
2100 | status = nfs_ok; | 2902 | status = nfs_ok; |
2101 | out: | 2903 | out: |
@@ -2113,10 +2915,14 @@ setlkflg (int type) | |||
2113 | * Checks for sequence id mutating operations. | 2915 | * Checks for sequence id mutating operations. |
2114 | */ | 2916 | */ |
2115 | static __be32 | 2917 | static __be32 |
2116 | nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *stateid, int flags, struct nfs4_stateowner **sopp, struct nfs4_stateid **stpp, struct nfsd4_lock *lock) | 2918 | nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid, |
2919 | stateid_t *stateid, int flags, | ||
2920 | struct nfs4_stateowner **sopp, | ||
2921 | struct nfs4_stateid **stpp, struct nfsd4_lock *lock) | ||
2117 | { | 2922 | { |
2118 | struct nfs4_stateid *stp; | 2923 | struct nfs4_stateid *stp; |
2119 | struct nfs4_stateowner *sop; | 2924 | struct nfs4_stateowner *sop; |
2925 | struct svc_fh *current_fh = &cstate->current_fh; | ||
2120 | __be32 status; | 2926 | __be32 status; |
2121 | 2927 | ||
2122 | dprintk("NFSD: preprocess_seqid_op: seqid=%d " | 2928 | dprintk("NFSD: preprocess_seqid_op: seqid=%d " |
@@ -2134,6 +2940,10 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei | |||
2134 | 2940 | ||
2135 | if (STALE_STATEID(stateid)) | 2941 | if (STALE_STATEID(stateid)) |
2136 | return nfserr_stale_stateid; | 2942 | return nfserr_stale_stateid; |
2943 | |||
2944 | if (nfsd4_has_session(cstate)) | ||
2945 | flags |= HAS_SESSION; | ||
2946 | |||
2137 | /* | 2947 | /* |
2138 | * We return BAD_STATEID if filehandle doesn't match stateid, | 2948 | * We return BAD_STATEID if filehandle doesn't match stateid, |
2139 | * the confirmed flag is incorrecly set, or the generation | 2949 | * the confirmed flag is incorrecly set, or the generation |
@@ -2166,8 +2976,9 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei | |||
2166 | if (lock->lk_is_new) { | 2976 | if (lock->lk_is_new) { |
2167 | if (!sop->so_is_open_owner) | 2977 | if (!sop->so_is_open_owner) |
2168 | return nfserr_bad_stateid; | 2978 | return nfserr_bad_stateid; |
2169 | if (!same_clid(&clp->cl_clientid, lockclid)) | 2979 | if (!(flags & HAS_SESSION) && |
2170 | return nfserr_bad_stateid; | 2980 | !same_clid(&clp->cl_clientid, lockclid)) |
2981 | return nfserr_bad_stateid; | ||
2171 | /* stp is the open stateid */ | 2982 | /* stp is the open stateid */ |
2172 | status = nfs4_check_openmode(stp, lkflg); | 2983 | status = nfs4_check_openmode(stp, lkflg); |
2173 | if (status) | 2984 | if (status) |
@@ -2190,7 +3001,7 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei | |||
2190 | * For the moment, we ignore the possibility of | 3001 | * For the moment, we ignore the possibility of |
2191 | * generation number wraparound. | 3002 | * generation number wraparound. |
2192 | */ | 3003 | */ |
2193 | if (seqid != sop->so_seqid) | 3004 | if (!(flags & HAS_SESSION) && seqid != sop->so_seqid) |
2194 | goto check_replay; | 3005 | goto check_replay; |
2195 | 3006 | ||
2196 | if (sop->so_confirmed && flags & CONFIRM) { | 3007 | if (sop->so_confirmed && flags & CONFIRM) { |
@@ -2203,7 +3014,7 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei | |||
2203 | " confirmed yet!\n"); | 3014 | " confirmed yet!\n"); |
2204 | return nfserr_bad_stateid; | 3015 | return nfserr_bad_stateid; |
2205 | } | 3016 | } |
2206 | status = check_stateid_generation(stateid, &stp->st_stateid); | 3017 | status = check_stateid_generation(stateid, &stp->st_stateid, flags); |
2207 | if (status) | 3018 | if (status) |
2208 | return status; | 3019 | return status; |
2209 | renew_client(sop->so_client); | 3020 | renew_client(sop->so_client); |
@@ -2239,7 +3050,7 @@ nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
2239 | 3050 | ||
2240 | nfs4_lock_state(); | 3051 | nfs4_lock_state(); |
2241 | 3052 | ||
2242 | if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh, | 3053 | if ((status = nfs4_preprocess_seqid_op(cstate, |
2243 | oc->oc_seqid, &oc->oc_req_stateid, | 3054 | oc->oc_seqid, &oc->oc_req_stateid, |
2244 | CONFIRM | OPEN_STATE, | 3055 | CONFIRM | OPEN_STATE, |
2245 | &oc->oc_stateowner, &stp, NULL))) | 3056 | &oc->oc_stateowner, &stp, NULL))) |
@@ -2304,12 +3115,12 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp, | |||
2304 | (int)cstate->current_fh.fh_dentry->d_name.len, | 3115 | (int)cstate->current_fh.fh_dentry->d_name.len, |
2305 | cstate->current_fh.fh_dentry->d_name.name); | 3116 | cstate->current_fh.fh_dentry->d_name.name); |
2306 | 3117 | ||
2307 | if (!access_valid(od->od_share_access) | 3118 | if (!access_valid(od->od_share_access, cstate->minorversion) |
2308 | || !deny_valid(od->od_share_deny)) | 3119 | || !deny_valid(od->od_share_deny)) |
2309 | return nfserr_inval; | 3120 | return nfserr_inval; |
2310 | 3121 | ||
2311 | nfs4_lock_state(); | 3122 | nfs4_lock_state(); |
2312 | if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh, | 3123 | if ((status = nfs4_preprocess_seqid_op(cstate, |
2313 | od->od_seqid, | 3124 | od->od_seqid, |
2314 | &od->od_stateid, | 3125 | &od->od_stateid, |
2315 | OPEN_STATE, | 3126 | OPEN_STATE, |
@@ -2362,7 +3173,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
2362 | 3173 | ||
2363 | nfs4_lock_state(); | 3174 | nfs4_lock_state(); |
2364 | /* check close_lru for replay */ | 3175 | /* check close_lru for replay */ |
2365 | if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh, | 3176 | if ((status = nfs4_preprocess_seqid_op(cstate, |
2366 | close->cl_seqid, | 3177 | close->cl_seqid, |
2367 | &close->cl_stateid, | 3178 | &close->cl_stateid, |
2368 | OPEN_STATE | CLOSE_STATE, | 3179 | OPEN_STATE | CLOSE_STATE, |
@@ -2373,7 +3184,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
2373 | memcpy(&close->cl_stateid, &stp->st_stateid, sizeof(stateid_t)); | 3184 | memcpy(&close->cl_stateid, &stp->st_stateid, sizeof(stateid_t)); |
2374 | 3185 | ||
2375 | /* release_stateid() calls nfsd_close() if needed */ | 3186 | /* release_stateid() calls nfsd_close() if needed */ |
2376 | release_stateid(stp, OPEN_STATE); | 3187 | release_open_stateid(stp); |
2377 | 3188 | ||
2378 | /* place unused nfs4_stateowners on so_close_lru list to be | 3189 | /* place unused nfs4_stateowners on so_close_lru list to be |
2379 | * released by the laundromat service after the lease period | 3190 | * released by the laundromat service after the lease period |
@@ -2394,16 +3205,40 @@ __be32 | |||
2394 | nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | 3205 | nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, |
2395 | struct nfsd4_delegreturn *dr) | 3206 | struct nfsd4_delegreturn *dr) |
2396 | { | 3207 | { |
3208 | struct nfs4_delegation *dp; | ||
3209 | stateid_t *stateid = &dr->dr_stateid; | ||
3210 | struct inode *inode; | ||
2397 | __be32 status; | 3211 | __be32 status; |
3212 | int flags = 0; | ||
2398 | 3213 | ||
2399 | if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) | 3214 | if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) |
2400 | goto out; | 3215 | return status; |
3216 | inode = cstate->current_fh.fh_dentry->d_inode; | ||
2401 | 3217 | ||
3218 | if (nfsd4_has_session(cstate)) | ||
3219 | flags |= HAS_SESSION; | ||
2402 | nfs4_lock_state(); | 3220 | nfs4_lock_state(); |
2403 | status = nfs4_preprocess_stateid_op(&cstate->current_fh, | 3221 | status = nfserr_bad_stateid; |
2404 | &dr->dr_stateid, DELEG_RET, NULL); | 3222 | if (ZERO_STATEID(stateid) || ONE_STATEID(stateid)) |
2405 | nfs4_unlock_state(); | 3223 | goto out; |
3224 | status = nfserr_stale_stateid; | ||
3225 | if (STALE_STATEID(stateid)) | ||
3226 | goto out; | ||
3227 | status = nfserr_bad_stateid; | ||
3228 | if (!is_delegation_stateid(stateid)) | ||
3229 | goto out; | ||
3230 | dp = find_delegation_stateid(inode, stateid); | ||
3231 | if (!dp) | ||
3232 | goto out; | ||
3233 | status = check_stateid_generation(stateid, &dp->dl_stateid, flags); | ||
3234 | if (status) | ||
3235 | goto out; | ||
3236 | renew_client(dp->dl_client); | ||
3237 | |||
3238 | unhash_delegation(dp); | ||
2406 | out: | 3239 | out: |
3240 | nfs4_unlock_state(); | ||
3241 | |||
2407 | return status; | 3242 | return status; |
2408 | } | 3243 | } |
2409 | 3244 | ||
@@ -2684,11 +3519,12 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
2684 | struct nfs4_file *fp; | 3519 | struct nfs4_file *fp; |
2685 | 3520 | ||
2686 | status = nfserr_stale_clientid; | 3521 | status = nfserr_stale_clientid; |
2687 | if (STALE_CLIENTID(&lock->lk_new_clientid)) | 3522 | if (!nfsd4_has_session(cstate) && |
3523 | STALE_CLIENTID(&lock->lk_new_clientid)) | ||
2688 | goto out; | 3524 | goto out; |
2689 | 3525 | ||
2690 | /* validate and update open stateid and open seqid */ | 3526 | /* validate and update open stateid and open seqid */ |
2691 | status = nfs4_preprocess_seqid_op(&cstate->current_fh, | 3527 | status = nfs4_preprocess_seqid_op(cstate, |
2692 | lock->lk_new_open_seqid, | 3528 | lock->lk_new_open_seqid, |
2693 | &lock->lk_new_open_stateid, | 3529 | &lock->lk_new_open_stateid, |
2694 | OPEN_STATE, | 3530 | OPEN_STATE, |
@@ -2715,7 +3551,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
2715 | goto out; | 3551 | goto out; |
2716 | } else { | 3552 | } else { |
2717 | /* lock (lock owner + lock stateid) already exists */ | 3553 | /* lock (lock owner + lock stateid) already exists */ |
2718 | status = nfs4_preprocess_seqid_op(&cstate->current_fh, | 3554 | status = nfs4_preprocess_seqid_op(cstate, |
2719 | lock->lk_old_lock_seqid, | 3555 | lock->lk_old_lock_seqid, |
2720 | &lock->lk_old_lock_stateid, | 3556 | &lock->lk_old_lock_stateid, |
2721 | LOCK_STATE, | 3557 | LOCK_STATE, |
@@ -2788,7 +3624,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
2788 | } | 3624 | } |
2789 | out: | 3625 | out: |
2790 | if (status && lock->lk_is_new && lock_sop) | 3626 | if (status && lock->lk_is_new && lock_sop) |
2791 | release_stateowner(lock_sop); | 3627 | release_lockowner(lock_sop); |
2792 | if (lock->lk_replay_owner) { | 3628 | if (lock->lk_replay_owner) { |
2793 | nfs4_get_stateowner(lock->lk_replay_owner); | 3629 | nfs4_get_stateowner(lock->lk_replay_owner); |
2794 | cstate->replay_owner = lock->lk_replay_owner; | 3630 | cstate->replay_owner = lock->lk_replay_owner; |
@@ -2838,7 +3674,7 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
2838 | nfs4_lock_state(); | 3674 | nfs4_lock_state(); |
2839 | 3675 | ||
2840 | status = nfserr_stale_clientid; | 3676 | status = nfserr_stale_clientid; |
2841 | if (STALE_CLIENTID(&lockt->lt_clientid)) | 3677 | if (!nfsd4_has_session(cstate) && STALE_CLIENTID(&lockt->lt_clientid)) |
2842 | goto out; | 3678 | goto out; |
2843 | 3679 | ||
2844 | if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) { | 3680 | if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) { |
@@ -2911,7 +3747,7 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
2911 | 3747 | ||
2912 | nfs4_lock_state(); | 3748 | nfs4_lock_state(); |
2913 | 3749 | ||
2914 | if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh, | 3750 | if ((status = nfs4_preprocess_seqid_op(cstate, |
2915 | locku->lu_seqid, | 3751 | locku->lu_seqid, |
2916 | &locku->lu_stateid, | 3752 | &locku->lu_stateid, |
2917 | LOCK_STATE, | 3753 | LOCK_STATE, |
@@ -3037,7 +3873,7 @@ nfsd4_release_lockowner(struct svc_rqst *rqstp, | |||
3037 | /* unhash_stateowner deletes so_perclient only | 3873 | /* unhash_stateowner deletes so_perclient only |
3038 | * for openowners. */ | 3874 | * for openowners. */ |
3039 | list_del(&sop->so_perclient); | 3875 | list_del(&sop->so_perclient); |
3040 | release_stateowner(sop); | 3876 | release_lockowner(sop); |
3041 | } | 3877 | } |
3042 | out: | 3878 | out: |
3043 | nfs4_unlock_state(); | 3879 | nfs4_unlock_state(); |
@@ -3051,12 +3887,12 @@ alloc_reclaim(void) | |||
3051 | } | 3887 | } |
3052 | 3888 | ||
3053 | int | 3889 | int |
3054 | nfs4_has_reclaimed_state(const char *name) | 3890 | nfs4_has_reclaimed_state(const char *name, bool use_exchange_id) |
3055 | { | 3891 | { |
3056 | unsigned int strhashval = clientstr_hashval(name); | 3892 | unsigned int strhashval = clientstr_hashval(name); |
3057 | struct nfs4_client *clp; | 3893 | struct nfs4_client *clp; |
3058 | 3894 | ||
3059 | clp = find_confirmed_client_by_str(name, strhashval); | 3895 | clp = find_confirmed_client_by_str(name, strhashval, use_exchange_id); |
3060 | return clp ? 1 : 0; | 3896 | return clp ? 1 : 0; |
3061 | } | 3897 | } |
3062 | 3898 | ||
@@ -3153,6 +3989,8 @@ nfs4_state_init(void) | |||
3153 | INIT_LIST_HEAD(&unconf_str_hashtbl[i]); | 3989 | INIT_LIST_HEAD(&unconf_str_hashtbl[i]); |
3154 | INIT_LIST_HEAD(&unconf_id_hashtbl[i]); | 3990 | INIT_LIST_HEAD(&unconf_id_hashtbl[i]); |
3155 | } | 3991 | } |
3992 | for (i = 0; i < SESSION_HASH_SIZE; i++) | ||
3993 | INIT_LIST_HEAD(&sessionid_hashtbl[i]); | ||
3156 | for (i = 0; i < FILE_HASH_SIZE; i++) { | 3994 | for (i = 0; i < FILE_HASH_SIZE; i++) { |
3157 | INIT_LIST_HEAD(&file_hashtbl[i]); | 3995 | INIT_LIST_HEAD(&file_hashtbl[i]); |
3158 | } | 3996 | } |
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 9250067943d8..b820c311931c 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <linux/fs.h> | 45 | #include <linux/fs.h> |
46 | #include <linux/namei.h> | 46 | #include <linux/namei.h> |
47 | #include <linux/vfs.h> | 47 | #include <linux/vfs.h> |
48 | #include <linux/utsname.h> | ||
48 | #include <linux/sunrpc/xdr.h> | 49 | #include <linux/sunrpc/xdr.h> |
49 | #include <linux/sunrpc/svc.h> | 50 | #include <linux/sunrpc/svc.h> |
50 | #include <linux/sunrpc/clnt.h> | 51 | #include <linux/sunrpc/clnt.h> |
@@ -188,6 +189,11 @@ static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes) | |||
188 | return p; | 189 | return p; |
189 | } | 190 | } |
190 | 191 | ||
192 | static int zero_clientid(clientid_t *clid) | ||
193 | { | ||
194 | return (clid->cl_boot == 0) && (clid->cl_id == 0); | ||
195 | } | ||
196 | |||
191 | static int | 197 | static int |
192 | defer_free(struct nfsd4_compoundargs *argp, | 198 | defer_free(struct nfsd4_compoundargs *argp, |
193 | void (*release)(const void *), void *p) | 199 | void (*release)(const void *), void *p) |
@@ -230,6 +236,7 @@ nfsd4_decode_bitmap(struct nfsd4_compoundargs *argp, u32 *bmval) | |||
230 | 236 | ||
231 | bmval[0] = 0; | 237 | bmval[0] = 0; |
232 | bmval[1] = 0; | 238 | bmval[1] = 0; |
239 | bmval[2] = 0; | ||
233 | 240 | ||
234 | READ_BUF(4); | 241 | READ_BUF(4); |
235 | READ32(bmlen); | 242 | READ32(bmlen); |
@@ -241,13 +248,27 @@ nfsd4_decode_bitmap(struct nfsd4_compoundargs *argp, u32 *bmval) | |||
241 | READ32(bmval[0]); | 248 | READ32(bmval[0]); |
242 | if (bmlen > 1) | 249 | if (bmlen > 1) |
243 | READ32(bmval[1]); | 250 | READ32(bmval[1]); |
251 | if (bmlen > 2) | ||
252 | READ32(bmval[2]); | ||
244 | 253 | ||
245 | DECODE_TAIL; | 254 | DECODE_TAIL; |
246 | } | 255 | } |
247 | 256 | ||
257 | static u32 nfsd_attrmask[] = { | ||
258 | NFSD_WRITEABLE_ATTRS_WORD0, | ||
259 | NFSD_WRITEABLE_ATTRS_WORD1, | ||
260 | NFSD_WRITEABLE_ATTRS_WORD2 | ||
261 | }; | ||
262 | |||
263 | static u32 nfsd41_ex_attrmask[] = { | ||
264 | NFSD_SUPPATTR_EXCLCREAT_WORD0, | ||
265 | NFSD_SUPPATTR_EXCLCREAT_WORD1, | ||
266 | NFSD_SUPPATTR_EXCLCREAT_WORD2 | ||
267 | }; | ||
268 | |||
248 | static __be32 | 269 | static __be32 |
249 | nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, struct iattr *iattr, | 270 | nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, u32 *writable, |
250 | struct nfs4_acl **acl) | 271 | struct iattr *iattr, struct nfs4_acl **acl) |
251 | { | 272 | { |
252 | int expected_len, len = 0; | 273 | int expected_len, len = 0; |
253 | u32 dummy32; | 274 | u32 dummy32; |
@@ -263,9 +284,12 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, struct iattr *ia | |||
263 | * According to spec, unsupported attributes return ERR_ATTRNOTSUPP; | 284 | * According to spec, unsupported attributes return ERR_ATTRNOTSUPP; |
264 | * read-only attributes return ERR_INVAL. | 285 | * read-only attributes return ERR_INVAL. |
265 | */ | 286 | */ |
266 | if ((bmval[0] & ~NFSD_SUPPORTED_ATTRS_WORD0) || (bmval[1] & ~NFSD_SUPPORTED_ATTRS_WORD1)) | 287 | if ((bmval[0] & ~nfsd_suppattrs0(argp->minorversion)) || |
288 | (bmval[1] & ~nfsd_suppattrs1(argp->minorversion)) || | ||
289 | (bmval[2] & ~nfsd_suppattrs2(argp->minorversion))) | ||
267 | return nfserr_attrnotsupp; | 290 | return nfserr_attrnotsupp; |
268 | if ((bmval[0] & ~NFSD_WRITEABLE_ATTRS_WORD0) || (bmval[1] & ~NFSD_WRITEABLE_ATTRS_WORD1)) | 291 | if ((bmval[0] & ~writable[0]) || (bmval[1] & ~writable[1]) || |
292 | (bmval[2] & ~writable[2])) | ||
269 | return nfserr_inval; | 293 | return nfserr_inval; |
270 | 294 | ||
271 | READ_BUF(4); | 295 | READ_BUF(4); |
@@ -400,6 +424,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, struct iattr *ia | |||
400 | goto xdr_error; | 424 | goto xdr_error; |
401 | } | 425 | } |
402 | } | 426 | } |
427 | BUG_ON(bmval[2]); /* no such writeable attr supported yet */ | ||
403 | if (len != expected_len) | 428 | if (len != expected_len) |
404 | goto xdr_error; | 429 | goto xdr_error; |
405 | 430 | ||
@@ -493,7 +518,9 @@ nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create | |||
493 | if ((status = check_filename(create->cr_name, create->cr_namelen, nfserr_inval))) | 518 | if ((status = check_filename(create->cr_name, create->cr_namelen, nfserr_inval))) |
494 | return status; | 519 | return status; |
495 | 520 | ||
496 | if ((status = nfsd4_decode_fattr(argp, create->cr_bmval, &create->cr_iattr, &create->cr_acl))) | 521 | status = nfsd4_decode_fattr(argp, create->cr_bmval, nfsd_attrmask, |
522 | &create->cr_iattr, &create->cr_acl); | ||
523 | if (status) | ||
497 | goto out; | 524 | goto out; |
498 | 525 | ||
499 | DECODE_TAIL; | 526 | DECODE_TAIL; |
@@ -583,6 +610,8 @@ nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, struct nfsd4_lockt *lockt) | |||
583 | READ_BUF(lockt->lt_owner.len); | 610 | READ_BUF(lockt->lt_owner.len); |
584 | READMEM(lockt->lt_owner.data, lockt->lt_owner.len); | 611 | READMEM(lockt->lt_owner.data, lockt->lt_owner.len); |
585 | 612 | ||
613 | if (argp->minorversion && !zero_clientid(&lockt->lt_clientid)) | ||
614 | return nfserr_inval; | ||
586 | DECODE_TAIL; | 615 | DECODE_TAIL; |
587 | } | 616 | } |
588 | 617 | ||
@@ -652,13 +681,26 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) | |||
652 | switch (open->op_createmode) { | 681 | switch (open->op_createmode) { |
653 | case NFS4_CREATE_UNCHECKED: | 682 | case NFS4_CREATE_UNCHECKED: |
654 | case NFS4_CREATE_GUARDED: | 683 | case NFS4_CREATE_GUARDED: |
655 | if ((status = nfsd4_decode_fattr(argp, open->op_bmval, &open->op_iattr, &open->op_acl))) | 684 | status = nfsd4_decode_fattr(argp, open->op_bmval, |
685 | nfsd_attrmask, &open->op_iattr, &open->op_acl); | ||
686 | if (status) | ||
656 | goto out; | 687 | goto out; |
657 | break; | 688 | break; |
658 | case NFS4_CREATE_EXCLUSIVE: | 689 | case NFS4_CREATE_EXCLUSIVE: |
659 | READ_BUF(8); | 690 | READ_BUF(8); |
660 | COPYMEM(open->op_verf.data, 8); | 691 | COPYMEM(open->op_verf.data, 8); |
661 | break; | 692 | break; |
693 | case NFS4_CREATE_EXCLUSIVE4_1: | ||
694 | if (argp->minorversion < 1) | ||
695 | goto xdr_error; | ||
696 | READ_BUF(8); | ||
697 | COPYMEM(open->op_verf.data, 8); | ||
698 | status = nfsd4_decode_fattr(argp, open->op_bmval, | ||
699 | nfsd41_ex_attrmask, &open->op_iattr, | ||
700 | &open->op_acl); | ||
701 | if (status) | ||
702 | goto out; | ||
703 | break; | ||
662 | default: | 704 | default: |
663 | goto xdr_error; | 705 | goto xdr_error; |
664 | } | 706 | } |
@@ -851,7 +893,7 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta | |||
851 | status = nfsd4_decode_stateid(argp, &setattr->sa_stateid); | 893 | status = nfsd4_decode_stateid(argp, &setattr->sa_stateid); |
852 | if (status) | 894 | if (status) |
853 | return status; | 895 | return status; |
854 | return nfsd4_decode_fattr(argp, setattr->sa_bmval, | 896 | return nfsd4_decode_fattr(argp, setattr->sa_bmval, nfsd_attrmask, |
855 | &setattr->sa_iattr, &setattr->sa_acl); | 897 | &setattr->sa_iattr, &setattr->sa_acl); |
856 | } | 898 | } |
857 | 899 | ||
@@ -993,6 +1035,241 @@ nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_rel | |||
993 | READ_BUF(rlockowner->rl_owner.len); | 1035 | READ_BUF(rlockowner->rl_owner.len); |
994 | READMEM(rlockowner->rl_owner.data, rlockowner->rl_owner.len); | 1036 | READMEM(rlockowner->rl_owner.data, rlockowner->rl_owner.len); |
995 | 1037 | ||
1038 | if (argp->minorversion && !zero_clientid(&rlockowner->rl_clientid)) | ||
1039 | return nfserr_inval; | ||
1040 | DECODE_TAIL; | ||
1041 | } | ||
1042 | |||
1043 | static __be32 | ||
1044 | nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, | ||
1045 | struct nfsd4_exchange_id *exid) | ||
1046 | { | ||
1047 | int dummy; | ||
1048 | DECODE_HEAD; | ||
1049 | |||
1050 | READ_BUF(NFS4_VERIFIER_SIZE); | ||
1051 | COPYMEM(exid->verifier.data, NFS4_VERIFIER_SIZE); | ||
1052 | |||
1053 | READ_BUF(4); | ||
1054 | READ32(exid->clname.len); | ||
1055 | |||
1056 | READ_BUF(exid->clname.len); | ||
1057 | SAVEMEM(exid->clname.data, exid->clname.len); | ||
1058 | |||
1059 | READ_BUF(4); | ||
1060 | READ32(exid->flags); | ||
1061 | |||
1062 | /* Ignore state_protect4_a */ | ||
1063 | READ_BUF(4); | ||
1064 | READ32(exid->spa_how); | ||
1065 | switch (exid->spa_how) { | ||
1066 | case SP4_NONE: | ||
1067 | break; | ||
1068 | case SP4_MACH_CRED: | ||
1069 | /* spo_must_enforce */ | ||
1070 | READ_BUF(4); | ||
1071 | READ32(dummy); | ||
1072 | READ_BUF(dummy * 4); | ||
1073 | p += dummy; | ||
1074 | |||
1075 | /* spo_must_allow */ | ||
1076 | READ_BUF(4); | ||
1077 | READ32(dummy); | ||
1078 | READ_BUF(dummy * 4); | ||
1079 | p += dummy; | ||
1080 | break; | ||
1081 | case SP4_SSV: | ||
1082 | /* ssp_ops */ | ||
1083 | READ_BUF(4); | ||
1084 | READ32(dummy); | ||
1085 | READ_BUF(dummy * 4); | ||
1086 | p += dummy; | ||
1087 | |||
1088 | READ_BUF(4); | ||
1089 | READ32(dummy); | ||
1090 | READ_BUF(dummy * 4); | ||
1091 | p += dummy; | ||
1092 | |||
1093 | /* ssp_hash_algs<> */ | ||
1094 | READ_BUF(4); | ||
1095 | READ32(dummy); | ||
1096 | READ_BUF(dummy); | ||
1097 | p += XDR_QUADLEN(dummy); | ||
1098 | |||
1099 | /* ssp_encr_algs<> */ | ||
1100 | READ_BUF(4); | ||
1101 | READ32(dummy); | ||
1102 | READ_BUF(dummy); | ||
1103 | p += XDR_QUADLEN(dummy); | ||
1104 | |||
1105 | /* ssp_window and ssp_num_gss_handles */ | ||
1106 | READ_BUF(8); | ||
1107 | READ32(dummy); | ||
1108 | READ32(dummy); | ||
1109 | break; | ||
1110 | default: | ||
1111 | goto xdr_error; | ||
1112 | } | ||
1113 | |||
1114 | /* Ignore Implementation ID */ | ||
1115 | READ_BUF(4); /* nfs_impl_id4 array length */ | ||
1116 | READ32(dummy); | ||
1117 | |||
1118 | if (dummy > 1) | ||
1119 | goto xdr_error; | ||
1120 | |||
1121 | if (dummy == 1) { | ||
1122 | /* nii_domain */ | ||
1123 | READ_BUF(4); | ||
1124 | READ32(dummy); | ||
1125 | READ_BUF(dummy); | ||
1126 | p += XDR_QUADLEN(dummy); | ||
1127 | |||
1128 | /* nii_name */ | ||
1129 | READ_BUF(4); | ||
1130 | READ32(dummy); | ||
1131 | READ_BUF(dummy); | ||
1132 | p += XDR_QUADLEN(dummy); | ||
1133 | |||
1134 | /* nii_date */ | ||
1135 | READ_BUF(12); | ||
1136 | p += 3; | ||
1137 | } | ||
1138 | DECODE_TAIL; | ||
1139 | } | ||
1140 | |||
1141 | static __be32 | ||
1142 | nfsd4_decode_create_session(struct nfsd4_compoundargs *argp, | ||
1143 | struct nfsd4_create_session *sess) | ||
1144 | { | ||
1145 | DECODE_HEAD; | ||
1146 | |||
1147 | u32 dummy; | ||
1148 | char *machine_name; | ||
1149 | int i; | ||
1150 | int nr_secflavs; | ||
1151 | |||
1152 | READ_BUF(16); | ||
1153 | COPYMEM(&sess->clientid, 8); | ||
1154 | READ32(sess->seqid); | ||
1155 | READ32(sess->flags); | ||
1156 | |||
1157 | /* Fore channel attrs */ | ||
1158 | READ_BUF(28); | ||
1159 | READ32(dummy); /* headerpadsz is always 0 */ | ||
1160 | READ32(sess->fore_channel.maxreq_sz); | ||
1161 | READ32(sess->fore_channel.maxresp_sz); | ||
1162 | READ32(sess->fore_channel.maxresp_cached); | ||
1163 | READ32(sess->fore_channel.maxops); | ||
1164 | READ32(sess->fore_channel.maxreqs); | ||
1165 | READ32(sess->fore_channel.nr_rdma_attrs); | ||
1166 | if (sess->fore_channel.nr_rdma_attrs == 1) { | ||
1167 | READ_BUF(4); | ||
1168 | READ32(sess->fore_channel.rdma_attrs); | ||
1169 | } else if (sess->fore_channel.nr_rdma_attrs > 1) { | ||
1170 | dprintk("Too many fore channel attr bitmaps!\n"); | ||
1171 | goto xdr_error; | ||
1172 | } | ||
1173 | |||
1174 | /* Back channel attrs */ | ||
1175 | READ_BUF(28); | ||
1176 | READ32(dummy); /* headerpadsz is always 0 */ | ||
1177 | READ32(sess->back_channel.maxreq_sz); | ||
1178 | READ32(sess->back_channel.maxresp_sz); | ||
1179 | READ32(sess->back_channel.maxresp_cached); | ||
1180 | READ32(sess->back_channel.maxops); | ||
1181 | READ32(sess->back_channel.maxreqs); | ||
1182 | READ32(sess->back_channel.nr_rdma_attrs); | ||
1183 | if (sess->back_channel.nr_rdma_attrs == 1) { | ||
1184 | READ_BUF(4); | ||
1185 | READ32(sess->back_channel.rdma_attrs); | ||
1186 | } else if (sess->back_channel.nr_rdma_attrs > 1) { | ||
1187 | dprintk("Too many back channel attr bitmaps!\n"); | ||
1188 | goto xdr_error; | ||
1189 | } | ||
1190 | |||
1191 | READ_BUF(8); | ||
1192 | READ32(sess->callback_prog); | ||
1193 | |||
1194 | /* callback_sec_params4 */ | ||
1195 | READ32(nr_secflavs); | ||
1196 | for (i = 0; i < nr_secflavs; ++i) { | ||
1197 | READ_BUF(4); | ||
1198 | READ32(dummy); | ||
1199 | switch (dummy) { | ||
1200 | case RPC_AUTH_NULL: | ||
1201 | /* Nothing to read */ | ||
1202 | break; | ||
1203 | case RPC_AUTH_UNIX: | ||
1204 | READ_BUF(8); | ||
1205 | /* stamp */ | ||
1206 | READ32(dummy); | ||
1207 | |||
1208 | /* machine name */ | ||
1209 | READ32(dummy); | ||
1210 | READ_BUF(dummy); | ||
1211 | SAVEMEM(machine_name, dummy); | ||
1212 | |||
1213 | /* uid, gid */ | ||
1214 | READ_BUF(8); | ||
1215 | READ32(sess->uid); | ||
1216 | READ32(sess->gid); | ||
1217 | |||
1218 | /* more gids */ | ||
1219 | READ_BUF(4); | ||
1220 | READ32(dummy); | ||
1221 | READ_BUF(dummy * 4); | ||
1222 | for (i = 0; i < dummy; ++i) | ||
1223 | READ32(dummy); | ||
1224 | break; | ||
1225 | case RPC_AUTH_GSS: | ||
1226 | dprintk("RPC_AUTH_GSS callback secflavor " | ||
1227 | "not supported!\n"); | ||
1228 | READ_BUF(8); | ||
1229 | /* gcbp_service */ | ||
1230 | READ32(dummy); | ||
1231 | /* gcbp_handle_from_server */ | ||
1232 | READ32(dummy); | ||
1233 | READ_BUF(dummy); | ||
1234 | p += XDR_QUADLEN(dummy); | ||
1235 | /* gcbp_handle_from_client */ | ||
1236 | READ_BUF(4); | ||
1237 | READ32(dummy); | ||
1238 | READ_BUF(dummy); | ||
1239 | p += XDR_QUADLEN(dummy); | ||
1240 | break; | ||
1241 | default: | ||
1242 | dprintk("Illegal callback secflavor\n"); | ||
1243 | return nfserr_inval; | ||
1244 | } | ||
1245 | } | ||
1246 | DECODE_TAIL; | ||
1247 | } | ||
1248 | |||
1249 | static __be32 | ||
1250 | nfsd4_decode_destroy_session(struct nfsd4_compoundargs *argp, | ||
1251 | struct nfsd4_destroy_session *destroy_session) | ||
1252 | { | ||
1253 | DECODE_HEAD; | ||
1254 | READ_BUF(NFS4_MAX_SESSIONID_LEN); | ||
1255 | COPYMEM(destroy_session->sessionid.data, NFS4_MAX_SESSIONID_LEN); | ||
1256 | |||
1257 | DECODE_TAIL; | ||
1258 | } | ||
1259 | |||
1260 | static __be32 | ||
1261 | nfsd4_decode_sequence(struct nfsd4_compoundargs *argp, | ||
1262 | struct nfsd4_sequence *seq) | ||
1263 | { | ||
1264 | DECODE_HEAD; | ||
1265 | |||
1266 | READ_BUF(NFS4_MAX_SESSIONID_LEN + 16); | ||
1267 | COPYMEM(seq->sessionid.data, NFS4_MAX_SESSIONID_LEN); | ||
1268 | READ32(seq->seqid); | ||
1269 | READ32(seq->slotid); | ||
1270 | READ32(seq->maxslots); | ||
1271 | READ32(seq->cachethis); | ||
1272 | |||
996 | DECODE_TAIL; | 1273 | DECODE_TAIL; |
997 | } | 1274 | } |
998 | 1275 | ||
@@ -1005,7 +1282,7 @@ nfsd4_decode_noop(struct nfsd4_compoundargs *argp, void *p) | |||
1005 | static __be32 | 1282 | static __be32 |
1006 | nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p) | 1283 | nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p) |
1007 | { | 1284 | { |
1008 | return nfserr_opnotsupp; | 1285 | return nfserr_notsupp; |
1009 | } | 1286 | } |
1010 | 1287 | ||
1011 | typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *); | 1288 | typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *); |
@@ -1031,7 +1308,7 @@ static nfsd4_dec nfsd4_dec_ops[] = { | |||
1031 | [OP_OPEN_CONFIRM] = (nfsd4_dec)nfsd4_decode_open_confirm, | 1308 | [OP_OPEN_CONFIRM] = (nfsd4_dec)nfsd4_decode_open_confirm, |
1032 | [OP_OPEN_DOWNGRADE] = (nfsd4_dec)nfsd4_decode_open_downgrade, | 1309 | [OP_OPEN_DOWNGRADE] = (nfsd4_dec)nfsd4_decode_open_downgrade, |
1033 | [OP_PUTFH] = (nfsd4_dec)nfsd4_decode_putfh, | 1310 | [OP_PUTFH] = (nfsd4_dec)nfsd4_decode_putfh, |
1034 | [OP_PUTPUBFH] = (nfsd4_dec)nfsd4_decode_notsupp, | 1311 | [OP_PUTPUBFH] = (nfsd4_dec)nfsd4_decode_noop, |
1035 | [OP_PUTROOTFH] = (nfsd4_dec)nfsd4_decode_noop, | 1312 | [OP_PUTROOTFH] = (nfsd4_dec)nfsd4_decode_noop, |
1036 | [OP_READ] = (nfsd4_dec)nfsd4_decode_read, | 1313 | [OP_READ] = (nfsd4_dec)nfsd4_decode_read, |
1037 | [OP_READDIR] = (nfsd4_dec)nfsd4_decode_readdir, | 1314 | [OP_READDIR] = (nfsd4_dec)nfsd4_decode_readdir, |
@@ -1050,6 +1327,67 @@ static nfsd4_dec nfsd4_dec_ops[] = { | |||
1050 | [OP_RELEASE_LOCKOWNER] = (nfsd4_dec)nfsd4_decode_release_lockowner, | 1327 | [OP_RELEASE_LOCKOWNER] = (nfsd4_dec)nfsd4_decode_release_lockowner, |
1051 | }; | 1328 | }; |
1052 | 1329 | ||
1330 | static nfsd4_dec nfsd41_dec_ops[] = { | ||
1331 | [OP_ACCESS] (nfsd4_dec)nfsd4_decode_access, | ||
1332 | [OP_CLOSE] (nfsd4_dec)nfsd4_decode_close, | ||
1333 | [OP_COMMIT] (nfsd4_dec)nfsd4_decode_commit, | ||
1334 | [OP_CREATE] (nfsd4_dec)nfsd4_decode_create, | ||
1335 | [OP_DELEGPURGE] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1336 | [OP_DELEGRETURN] (nfsd4_dec)nfsd4_decode_delegreturn, | ||
1337 | [OP_GETATTR] (nfsd4_dec)nfsd4_decode_getattr, | ||
1338 | [OP_GETFH] (nfsd4_dec)nfsd4_decode_noop, | ||
1339 | [OP_LINK] (nfsd4_dec)nfsd4_decode_link, | ||
1340 | [OP_LOCK] (nfsd4_dec)nfsd4_decode_lock, | ||
1341 | [OP_LOCKT] (nfsd4_dec)nfsd4_decode_lockt, | ||
1342 | [OP_LOCKU] (nfsd4_dec)nfsd4_decode_locku, | ||
1343 | [OP_LOOKUP] (nfsd4_dec)nfsd4_decode_lookup, | ||
1344 | [OP_LOOKUPP] (nfsd4_dec)nfsd4_decode_noop, | ||
1345 | [OP_NVERIFY] (nfsd4_dec)nfsd4_decode_verify, | ||
1346 | [OP_OPEN] (nfsd4_dec)nfsd4_decode_open, | ||
1347 | [OP_OPENATTR] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1348 | [OP_OPEN_CONFIRM] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1349 | [OP_OPEN_DOWNGRADE] (nfsd4_dec)nfsd4_decode_open_downgrade, | ||
1350 | [OP_PUTFH] (nfsd4_dec)nfsd4_decode_putfh, | ||
1351 | [OP_PUTPUBFH] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1352 | [OP_PUTROOTFH] (nfsd4_dec)nfsd4_decode_noop, | ||
1353 | [OP_READ] (nfsd4_dec)nfsd4_decode_read, | ||
1354 | [OP_READDIR] (nfsd4_dec)nfsd4_decode_readdir, | ||
1355 | [OP_READLINK] (nfsd4_dec)nfsd4_decode_noop, | ||
1356 | [OP_REMOVE] (nfsd4_dec)nfsd4_decode_remove, | ||
1357 | [OP_RENAME] (nfsd4_dec)nfsd4_decode_rename, | ||
1358 | [OP_RENEW] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1359 | [OP_RESTOREFH] (nfsd4_dec)nfsd4_decode_noop, | ||
1360 | [OP_SAVEFH] (nfsd4_dec)nfsd4_decode_noop, | ||
1361 | [OP_SECINFO] (nfsd4_dec)nfsd4_decode_secinfo, | ||
1362 | [OP_SETATTR] (nfsd4_dec)nfsd4_decode_setattr, | ||
1363 | [OP_SETCLIENTID] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1364 | [OP_SETCLIENTID_CONFIRM](nfsd4_dec)nfsd4_decode_notsupp, | ||
1365 | [OP_VERIFY] (nfsd4_dec)nfsd4_decode_verify, | ||
1366 | [OP_WRITE] (nfsd4_dec)nfsd4_decode_write, | ||
1367 | [OP_RELEASE_LOCKOWNER] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1368 | |||
1369 | /* new operations for NFSv4.1 */ | ||
1370 | [OP_BACKCHANNEL_CTL] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1371 | [OP_BIND_CONN_TO_SESSION](nfsd4_dec)nfsd4_decode_notsupp, | ||
1372 | [OP_EXCHANGE_ID] (nfsd4_dec)nfsd4_decode_exchange_id, | ||
1373 | [OP_CREATE_SESSION] (nfsd4_dec)nfsd4_decode_create_session, | ||
1374 | [OP_DESTROY_SESSION] (nfsd4_dec)nfsd4_decode_destroy_session, | ||
1375 | [OP_FREE_STATEID] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1376 | [OP_GET_DIR_DELEGATION] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1377 | [OP_GETDEVICEINFO] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1378 | [OP_GETDEVICELIST] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1379 | [OP_LAYOUTCOMMIT] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1380 | [OP_LAYOUTGET] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1381 | [OP_LAYOUTRETURN] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1382 | [OP_SECINFO_NO_NAME] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1383 | [OP_SEQUENCE] (nfsd4_dec)nfsd4_decode_sequence, | ||
1384 | [OP_SET_SSV] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1385 | [OP_TEST_STATEID] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1386 | [OP_WANT_DELEGATION] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1387 | [OP_DESTROY_CLIENTID] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1388 | [OP_RECLAIM_COMPLETE] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1389 | }; | ||
1390 | |||
1053 | struct nfsd4_minorversion_ops { | 1391 | struct nfsd4_minorversion_ops { |
1054 | nfsd4_dec *decoders; | 1392 | nfsd4_dec *decoders; |
1055 | int nops; | 1393 | int nops; |
@@ -1057,6 +1395,7 @@ struct nfsd4_minorversion_ops { | |||
1057 | 1395 | ||
1058 | static struct nfsd4_minorversion_ops nfsd4_minorversion[] = { | 1396 | static struct nfsd4_minorversion_ops nfsd4_minorversion[] = { |
1059 | [0] = { nfsd4_dec_ops, ARRAY_SIZE(nfsd4_dec_ops) }, | 1397 | [0] = { nfsd4_dec_ops, ARRAY_SIZE(nfsd4_dec_ops) }, |
1398 | [1] = { nfsd41_dec_ops, ARRAY_SIZE(nfsd41_dec_ops) }, | ||
1060 | }; | 1399 | }; |
1061 | 1400 | ||
1062 | static __be32 | 1401 | static __be32 |
@@ -1412,6 +1751,7 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | |||
1412 | { | 1751 | { |
1413 | u32 bmval0 = bmval[0]; | 1752 | u32 bmval0 = bmval[0]; |
1414 | u32 bmval1 = bmval[1]; | 1753 | u32 bmval1 = bmval[1]; |
1754 | u32 bmval2 = bmval[2]; | ||
1415 | struct kstat stat; | 1755 | struct kstat stat; |
1416 | struct svc_fh tempfh; | 1756 | struct svc_fh tempfh; |
1417 | struct kstatfs statfs; | 1757 | struct kstatfs statfs; |
@@ -1425,12 +1765,16 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | |||
1425 | int err; | 1765 | int err; |
1426 | int aclsupport = 0; | 1766 | int aclsupport = 0; |
1427 | struct nfs4_acl *acl = NULL; | 1767 | struct nfs4_acl *acl = NULL; |
1768 | struct nfsd4_compoundres *resp = rqstp->rq_resp; | ||
1769 | u32 minorversion = resp->cstate.minorversion; | ||
1428 | 1770 | ||
1429 | BUG_ON(bmval1 & NFSD_WRITEONLY_ATTRS_WORD1); | 1771 | BUG_ON(bmval1 & NFSD_WRITEONLY_ATTRS_WORD1); |
1430 | BUG_ON(bmval0 & ~NFSD_SUPPORTED_ATTRS_WORD0); | 1772 | BUG_ON(bmval0 & ~nfsd_suppattrs0(minorversion)); |
1431 | BUG_ON(bmval1 & ~NFSD_SUPPORTED_ATTRS_WORD1); | 1773 | BUG_ON(bmval1 & ~nfsd_suppattrs1(minorversion)); |
1774 | BUG_ON(bmval2 & ~nfsd_suppattrs2(minorversion)); | ||
1432 | 1775 | ||
1433 | if (exp->ex_fslocs.migrated) { | 1776 | if (exp->ex_fslocs.migrated) { |
1777 | BUG_ON(bmval[2]); | ||
1434 | status = fattr_handle_absent_fs(&bmval0, &bmval1, &rdattr_err); | 1778 | status = fattr_handle_absent_fs(&bmval0, &bmval1, &rdattr_err); |
1435 | if (status) | 1779 | if (status) |
1436 | goto out; | 1780 | goto out; |
@@ -1476,22 +1820,42 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | |||
1476 | if ((buflen -= 16) < 0) | 1820 | if ((buflen -= 16) < 0) |
1477 | goto out_resource; | 1821 | goto out_resource; |
1478 | 1822 | ||
1479 | WRITE32(2); | 1823 | if (unlikely(bmval2)) { |
1480 | WRITE32(bmval0); | 1824 | WRITE32(3); |
1481 | WRITE32(bmval1); | 1825 | WRITE32(bmval0); |
1826 | WRITE32(bmval1); | ||
1827 | WRITE32(bmval2); | ||
1828 | } else if (likely(bmval1)) { | ||
1829 | WRITE32(2); | ||
1830 | WRITE32(bmval0); | ||
1831 | WRITE32(bmval1); | ||
1832 | } else { | ||
1833 | WRITE32(1); | ||
1834 | WRITE32(bmval0); | ||
1835 | } | ||
1482 | attrlenp = p++; /* to be backfilled later */ | 1836 | attrlenp = p++; /* to be backfilled later */ |
1483 | 1837 | ||
1484 | if (bmval0 & FATTR4_WORD0_SUPPORTED_ATTRS) { | 1838 | if (bmval0 & FATTR4_WORD0_SUPPORTED_ATTRS) { |
1485 | u32 word0 = NFSD_SUPPORTED_ATTRS_WORD0; | 1839 | u32 word0 = nfsd_suppattrs0(minorversion); |
1840 | u32 word1 = nfsd_suppattrs1(minorversion); | ||
1841 | u32 word2 = nfsd_suppattrs2(minorversion); | ||
1842 | |||
1486 | if ((buflen -= 12) < 0) | 1843 | if ((buflen -= 12) < 0) |
1487 | goto out_resource; | 1844 | goto out_resource; |
1488 | if (!aclsupport) | 1845 | if (!aclsupport) |
1489 | word0 &= ~FATTR4_WORD0_ACL; | 1846 | word0 &= ~FATTR4_WORD0_ACL; |
1490 | if (!exp->ex_fslocs.locations) | 1847 | if (!exp->ex_fslocs.locations) |
1491 | word0 &= ~FATTR4_WORD0_FS_LOCATIONS; | 1848 | word0 &= ~FATTR4_WORD0_FS_LOCATIONS; |
1492 | WRITE32(2); | 1849 | if (!word2) { |
1493 | WRITE32(word0); | 1850 | WRITE32(2); |
1494 | WRITE32(NFSD_SUPPORTED_ATTRS_WORD1); | 1851 | WRITE32(word0); |
1852 | WRITE32(word1); | ||
1853 | } else { | ||
1854 | WRITE32(3); | ||
1855 | WRITE32(word0); | ||
1856 | WRITE32(word1); | ||
1857 | WRITE32(word2); | ||
1858 | } | ||
1495 | } | 1859 | } |
1496 | if (bmval0 & FATTR4_WORD0_TYPE) { | 1860 | if (bmval0 & FATTR4_WORD0_TYPE) { |
1497 | if ((buflen -= 4) < 0) | 1861 | if ((buflen -= 4) < 0) |
@@ -1801,6 +2165,13 @@ out_acl: | |||
1801 | } | 2165 | } |
1802 | WRITE64(stat.ino); | 2166 | WRITE64(stat.ino); |
1803 | } | 2167 | } |
2168 | if (bmval2 & FATTR4_WORD2_SUPPATTR_EXCLCREAT) { | ||
2169 | WRITE32(3); | ||
2170 | WRITE32(NFSD_SUPPATTR_EXCLCREAT_WORD0); | ||
2171 | WRITE32(NFSD_SUPPATTR_EXCLCREAT_WORD1); | ||
2172 | WRITE32(NFSD_SUPPATTR_EXCLCREAT_WORD2); | ||
2173 | } | ||
2174 | |||
1804 | *attrlenp = htonl((char *)p - (char *)attrlenp - 4); | 2175 | *attrlenp = htonl((char *)p - (char *)attrlenp - 4); |
1805 | *countp = p - buffer; | 2176 | *countp = p - buffer; |
1806 | status = nfs_ok; | 2177 | status = nfs_ok; |
@@ -2572,6 +2943,143 @@ nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_w | |||
2572 | } | 2943 | } |
2573 | 2944 | ||
2574 | static __be32 | 2945 | static __be32 |
2946 | nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, int nfserr, | ||
2947 | struct nfsd4_exchange_id *exid) | ||
2948 | { | ||
2949 | ENCODE_HEAD; | ||
2950 | char *major_id; | ||
2951 | char *server_scope; | ||
2952 | int major_id_sz; | ||
2953 | int server_scope_sz; | ||
2954 | uint64_t minor_id = 0; | ||
2955 | |||
2956 | if (nfserr) | ||
2957 | return nfserr; | ||
2958 | |||
2959 | major_id = utsname()->nodename; | ||
2960 | major_id_sz = strlen(major_id); | ||
2961 | server_scope = utsname()->nodename; | ||
2962 | server_scope_sz = strlen(server_scope); | ||
2963 | |||
2964 | RESERVE_SPACE( | ||
2965 | 8 /* eir_clientid */ + | ||
2966 | 4 /* eir_sequenceid */ + | ||
2967 | 4 /* eir_flags */ + | ||
2968 | 4 /* spr_how (SP4_NONE) */ + | ||
2969 | 8 /* so_minor_id */ + | ||
2970 | 4 /* so_major_id.len */ + | ||
2971 | (XDR_QUADLEN(major_id_sz) * 4) + | ||
2972 | 4 /* eir_server_scope.len */ + | ||
2973 | (XDR_QUADLEN(server_scope_sz) * 4) + | ||
2974 | 4 /* eir_server_impl_id.count (0) */); | ||
2975 | |||
2976 | WRITEMEM(&exid->clientid, 8); | ||
2977 | WRITE32(exid->seqid); | ||
2978 | WRITE32(exid->flags); | ||
2979 | |||
2980 | /* state_protect4_r. Currently only support SP4_NONE */ | ||
2981 | BUG_ON(exid->spa_how != SP4_NONE); | ||
2982 | WRITE32(exid->spa_how); | ||
2983 | |||
2984 | /* The server_owner struct */ | ||
2985 | WRITE64(minor_id); /* Minor id */ | ||
2986 | /* major id */ | ||
2987 | WRITE32(major_id_sz); | ||
2988 | WRITEMEM(major_id, major_id_sz); | ||
2989 | |||
2990 | /* Server scope */ | ||
2991 | WRITE32(server_scope_sz); | ||
2992 | WRITEMEM(server_scope, server_scope_sz); | ||
2993 | |||
2994 | /* Implementation id */ | ||
2995 | WRITE32(0); /* zero length nfs_impl_id4 array */ | ||
2996 | ADJUST_ARGS(); | ||
2997 | return 0; | ||
2998 | } | ||
2999 | |||
3000 | static __be32 | ||
3001 | nfsd4_encode_create_session(struct nfsd4_compoundres *resp, int nfserr, | ||
3002 | struct nfsd4_create_session *sess) | ||
3003 | { | ||
3004 | ENCODE_HEAD; | ||
3005 | |||
3006 | if (nfserr) | ||
3007 | return nfserr; | ||
3008 | |||
3009 | RESERVE_SPACE(24); | ||
3010 | WRITEMEM(sess->sessionid.data, NFS4_MAX_SESSIONID_LEN); | ||
3011 | WRITE32(sess->seqid); | ||
3012 | WRITE32(sess->flags); | ||
3013 | ADJUST_ARGS(); | ||
3014 | |||
3015 | RESERVE_SPACE(28); | ||
3016 | WRITE32(0); /* headerpadsz */ | ||
3017 | WRITE32(sess->fore_channel.maxreq_sz); | ||
3018 | WRITE32(sess->fore_channel.maxresp_sz); | ||
3019 | WRITE32(sess->fore_channel.maxresp_cached); | ||
3020 | WRITE32(sess->fore_channel.maxops); | ||
3021 | WRITE32(sess->fore_channel.maxreqs); | ||
3022 | WRITE32(sess->fore_channel.nr_rdma_attrs); | ||
3023 | ADJUST_ARGS(); | ||
3024 | |||
3025 | if (sess->fore_channel.nr_rdma_attrs) { | ||
3026 | RESERVE_SPACE(4); | ||
3027 | WRITE32(sess->fore_channel.rdma_attrs); | ||
3028 | ADJUST_ARGS(); | ||
3029 | } | ||
3030 | |||
3031 | RESERVE_SPACE(28); | ||
3032 | WRITE32(0); /* headerpadsz */ | ||
3033 | WRITE32(sess->back_channel.maxreq_sz); | ||
3034 | WRITE32(sess->back_channel.maxresp_sz); | ||
3035 | WRITE32(sess->back_channel.maxresp_cached); | ||
3036 | WRITE32(sess->back_channel.maxops); | ||
3037 | WRITE32(sess->back_channel.maxreqs); | ||
3038 | WRITE32(sess->back_channel.nr_rdma_attrs); | ||
3039 | ADJUST_ARGS(); | ||
3040 | |||
3041 | if (sess->back_channel.nr_rdma_attrs) { | ||
3042 | RESERVE_SPACE(4); | ||
3043 | WRITE32(sess->back_channel.rdma_attrs); | ||
3044 | ADJUST_ARGS(); | ||
3045 | } | ||
3046 | return 0; | ||
3047 | } | ||
3048 | |||
3049 | static __be32 | ||
3050 | nfsd4_encode_destroy_session(struct nfsd4_compoundres *resp, int nfserr, | ||
3051 | struct nfsd4_destroy_session *destroy_session) | ||
3052 | { | ||
3053 | return nfserr; | ||
3054 | } | ||
3055 | |||
3056 | __be32 | ||
3057 | nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr, | ||
3058 | struct nfsd4_sequence *seq) | ||
3059 | { | ||
3060 | ENCODE_HEAD; | ||
3061 | |||
3062 | if (nfserr) | ||
3063 | return nfserr; | ||
3064 | |||
3065 | RESERVE_SPACE(NFS4_MAX_SESSIONID_LEN + 20); | ||
3066 | WRITEMEM(seq->sessionid.data, NFS4_MAX_SESSIONID_LEN); | ||
3067 | WRITE32(seq->seqid); | ||
3068 | WRITE32(seq->slotid); | ||
3069 | WRITE32(seq->maxslots); | ||
3070 | /* | ||
3071 | * FIXME: for now: | ||
3072 | * target_maxslots = maxslots | ||
3073 | * status_flags = 0 | ||
3074 | */ | ||
3075 | WRITE32(seq->maxslots); | ||
3076 | WRITE32(0); | ||
3077 | |||
3078 | ADJUST_ARGS(); | ||
3079 | return 0; | ||
3080 | } | ||
3081 | |||
3082 | static __be32 | ||
2575 | nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p) | 3083 | nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p) |
2576 | { | 3084 | { |
2577 | return nfserr; | 3085 | return nfserr; |
@@ -2579,6 +3087,11 @@ nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p) | |||
2579 | 3087 | ||
2580 | typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *); | 3088 | typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *); |
2581 | 3089 | ||
3090 | /* | ||
3091 | * Note: nfsd4_enc_ops vector is shared for v4.0 and v4.1 | ||
3092 | * since we don't need to filter out obsolete ops as this is | ||
3093 | * done in the decoding phase. | ||
3094 | */ | ||
2582 | static nfsd4_enc nfsd4_enc_ops[] = { | 3095 | static nfsd4_enc nfsd4_enc_ops[] = { |
2583 | [OP_ACCESS] = (nfsd4_enc)nfsd4_encode_access, | 3096 | [OP_ACCESS] = (nfsd4_enc)nfsd4_encode_access, |
2584 | [OP_CLOSE] = (nfsd4_enc)nfsd4_encode_close, | 3097 | [OP_CLOSE] = (nfsd4_enc)nfsd4_encode_close, |
@@ -2617,8 +3130,77 @@ static nfsd4_enc nfsd4_enc_ops[] = { | |||
2617 | [OP_VERIFY] = (nfsd4_enc)nfsd4_encode_noop, | 3130 | [OP_VERIFY] = (nfsd4_enc)nfsd4_encode_noop, |
2618 | [OP_WRITE] = (nfsd4_enc)nfsd4_encode_write, | 3131 | [OP_WRITE] = (nfsd4_enc)nfsd4_encode_write, |
2619 | [OP_RELEASE_LOCKOWNER] = (nfsd4_enc)nfsd4_encode_noop, | 3132 | [OP_RELEASE_LOCKOWNER] = (nfsd4_enc)nfsd4_encode_noop, |
3133 | |||
3134 | /* NFSv4.1 operations */ | ||
3135 | [OP_BACKCHANNEL_CTL] = (nfsd4_enc)nfsd4_encode_noop, | ||
3136 | [OP_BIND_CONN_TO_SESSION] = (nfsd4_enc)nfsd4_encode_noop, | ||
3137 | [OP_EXCHANGE_ID] = (nfsd4_enc)nfsd4_encode_exchange_id, | ||
3138 | [OP_CREATE_SESSION] = (nfsd4_enc)nfsd4_encode_create_session, | ||
3139 | [OP_DESTROY_SESSION] = (nfsd4_enc)nfsd4_encode_destroy_session, | ||
3140 | [OP_FREE_STATEID] = (nfsd4_enc)nfsd4_encode_noop, | ||
3141 | [OP_GET_DIR_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop, | ||
3142 | [OP_GETDEVICEINFO] = (nfsd4_enc)nfsd4_encode_noop, | ||
3143 | [OP_GETDEVICELIST] = (nfsd4_enc)nfsd4_encode_noop, | ||
3144 | [OP_LAYOUTCOMMIT] = (nfsd4_enc)nfsd4_encode_noop, | ||
3145 | [OP_LAYOUTGET] = (nfsd4_enc)nfsd4_encode_noop, | ||
3146 | [OP_LAYOUTRETURN] = (nfsd4_enc)nfsd4_encode_noop, | ||
3147 | [OP_SECINFO_NO_NAME] = (nfsd4_enc)nfsd4_encode_noop, | ||
3148 | [OP_SEQUENCE] = (nfsd4_enc)nfsd4_encode_sequence, | ||
3149 | [OP_SET_SSV] = (nfsd4_enc)nfsd4_encode_noop, | ||
3150 | [OP_TEST_STATEID] = (nfsd4_enc)nfsd4_encode_noop, | ||
3151 | [OP_WANT_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop, | ||
3152 | [OP_DESTROY_CLIENTID] = (nfsd4_enc)nfsd4_encode_noop, | ||
3153 | [OP_RECLAIM_COMPLETE] = (nfsd4_enc)nfsd4_encode_noop, | ||
2620 | }; | 3154 | }; |
2621 | 3155 | ||
3156 | /* | ||
3157 | * Calculate the total amount of memory that the compound response has taken | ||
3158 | * after encoding the current operation. | ||
3159 | * | ||
3160 | * pad: add on 8 bytes for the next operation's op_code and status so that | ||
3161 | * there is room to cache a failure on the next operation. | ||
3162 | * | ||
3163 | * Compare this length to the session se_fmaxresp_cached. | ||
3164 | * | ||
3165 | * Our se_fmaxresp_cached will always be a multiple of PAGE_SIZE, and so | ||
3166 | * will be at least a page and will therefore hold the xdr_buf head. | ||
3167 | */ | ||
3168 | static int nfsd4_check_drc_limit(struct nfsd4_compoundres *resp) | ||
3169 | { | ||
3170 | int status = 0; | ||
3171 | struct xdr_buf *xb = &resp->rqstp->rq_res; | ||
3172 | struct nfsd4_compoundargs *args = resp->rqstp->rq_argp; | ||
3173 | struct nfsd4_session *session = NULL; | ||
3174 | struct nfsd4_slot *slot = resp->cstate.slot; | ||
3175 | u32 length, tlen = 0, pad = 8; | ||
3176 | |||
3177 | if (!nfsd4_has_session(&resp->cstate)) | ||
3178 | return status; | ||
3179 | |||
3180 | session = resp->cstate.session; | ||
3181 | if (session == NULL || slot->sl_cache_entry.ce_cachethis == 0) | ||
3182 | return status; | ||
3183 | |||
3184 | if (resp->opcnt >= args->opcnt) | ||
3185 | pad = 0; /* this is the last operation */ | ||
3186 | |||
3187 | if (xb->page_len == 0) { | ||
3188 | length = (char *)resp->p - (char *)xb->head[0].iov_base + pad; | ||
3189 | } else { | ||
3190 | if (xb->tail[0].iov_base && xb->tail[0].iov_len > 0) | ||
3191 | tlen = (char *)resp->p - (char *)xb->tail[0].iov_base; | ||
3192 | |||
3193 | length = xb->head[0].iov_len + xb->page_len + tlen + pad; | ||
3194 | } | ||
3195 | dprintk("%s length %u, xb->page_len %u tlen %u pad %u\n", __func__, | ||
3196 | length, xb->page_len, tlen, pad); | ||
3197 | |||
3198 | if (length <= session->se_fmaxresp_cached) | ||
3199 | return status; | ||
3200 | else | ||
3201 | return nfserr_rep_too_big_to_cache; | ||
3202 | } | ||
3203 | |||
2622 | void | 3204 | void |
2623 | nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op) | 3205 | nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op) |
2624 | { | 3206 | { |
@@ -2635,6 +3217,9 @@ nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op) | |||
2635 | BUG_ON(op->opnum < 0 || op->opnum >= ARRAY_SIZE(nfsd4_enc_ops) || | 3217 | BUG_ON(op->opnum < 0 || op->opnum >= ARRAY_SIZE(nfsd4_enc_ops) || |
2636 | !nfsd4_enc_ops[op->opnum]); | 3218 | !nfsd4_enc_ops[op->opnum]); |
2637 | op->status = nfsd4_enc_ops[op->opnum](resp, op->status, &op->u); | 3219 | op->status = nfsd4_enc_ops[op->opnum](resp, op->status, &op->u); |
3220 | /* nfsd4_check_drc_limit guarantees enough room for error status */ | ||
3221 | if (!op->status && nfsd4_check_drc_limit(resp)) | ||
3222 | op->status = nfserr_rep_too_big_to_cache; | ||
2638 | status: | 3223 | status: |
2639 | /* | 3224 | /* |
2640 | * Note: We write the status directly, instead of using WRITE32(), | 3225 | * Note: We write the status directly, instead of using WRITE32(), |
@@ -2735,6 +3320,18 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo | |||
2735 | iov = &rqstp->rq_res.head[0]; | 3320 | iov = &rqstp->rq_res.head[0]; |
2736 | iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base; | 3321 | iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base; |
2737 | BUG_ON(iov->iov_len > PAGE_SIZE); | 3322 | BUG_ON(iov->iov_len > PAGE_SIZE); |
3323 | if (nfsd4_has_session(&resp->cstate)) { | ||
3324 | if (resp->cstate.status == nfserr_replay_cache && | ||
3325 | !nfsd4_not_cached(resp)) { | ||
3326 | iov->iov_len = resp->cstate.iovlen; | ||
3327 | } else { | ||
3328 | nfsd4_store_cache_entry(resp); | ||
3329 | dprintk("%s: SET SLOT STATE TO AVAILABLE\n", __func__); | ||
3330 | resp->cstate.slot->sl_inuse = 0; | ||
3331 | } | ||
3332 | if (resp->cstate.session) | ||
3333 | nfsd4_put_session(resp->cstate.session); | ||
3334 | } | ||
2738 | return 1; | 3335 | return 1; |
2739 | } | 3336 | } |
2740 | 3337 | ||
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c index a4ed8644d69c..af16849d243a 100644 --- a/fs/nfsd/nfsctl.c +++ b/fs/nfsd/nfsctl.c | |||
@@ -60,6 +60,7 @@ enum { | |||
60 | NFSD_FO_UnlockFS, | 60 | NFSD_FO_UnlockFS, |
61 | NFSD_Threads, | 61 | NFSD_Threads, |
62 | NFSD_Pool_Threads, | 62 | NFSD_Pool_Threads, |
63 | NFSD_Pool_Stats, | ||
63 | NFSD_Versions, | 64 | NFSD_Versions, |
64 | NFSD_Ports, | 65 | NFSD_Ports, |
65 | NFSD_MaxBlkSize, | 66 | NFSD_MaxBlkSize, |
@@ -172,6 +173,16 @@ static const struct file_operations exports_operations = { | |||
172 | .owner = THIS_MODULE, | 173 | .owner = THIS_MODULE, |
173 | }; | 174 | }; |
174 | 175 | ||
176 | extern int nfsd_pool_stats_open(struct inode *inode, struct file *file); | ||
177 | |||
178 | static struct file_operations pool_stats_operations = { | ||
179 | .open = nfsd_pool_stats_open, | ||
180 | .read = seq_read, | ||
181 | .llseek = seq_lseek, | ||
182 | .release = seq_release, | ||
183 | .owner = THIS_MODULE, | ||
184 | }; | ||
185 | |||
175 | /*----------------------------------------------------------------------------*/ | 186 | /*----------------------------------------------------------------------------*/ |
176 | /* | 187 | /* |
177 | * payload - write methods | 188 | * payload - write methods |
@@ -781,8 +792,9 @@ out_free: | |||
781 | static ssize_t __write_versions(struct file *file, char *buf, size_t size) | 792 | static ssize_t __write_versions(struct file *file, char *buf, size_t size) |
782 | { | 793 | { |
783 | char *mesg = buf; | 794 | char *mesg = buf; |
784 | char *vers, sign; | 795 | char *vers, *minorp, sign; |
785 | int len, num; | 796 | int len, num; |
797 | unsigned minor; | ||
786 | ssize_t tlen = 0; | 798 | ssize_t tlen = 0; |
787 | char *sep; | 799 | char *sep; |
788 | 800 | ||
@@ -803,9 +815,20 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) | |||
803 | do { | 815 | do { |
804 | sign = *vers; | 816 | sign = *vers; |
805 | if (sign == '+' || sign == '-') | 817 | if (sign == '+' || sign == '-') |
806 | num = simple_strtol((vers+1), NULL, 0); | 818 | num = simple_strtol((vers+1), &minorp, 0); |
807 | else | 819 | else |
808 | num = simple_strtol(vers, NULL, 0); | 820 | num = simple_strtol(vers, &minorp, 0); |
821 | if (*minorp == '.') { | ||
822 | if (num < 4) | ||
823 | return -EINVAL; | ||
824 | minor = simple_strtoul(minorp+1, NULL, 0); | ||
825 | if (minor == 0) | ||
826 | return -EINVAL; | ||
827 | if (nfsd_minorversion(minor, sign == '-' ? | ||
828 | NFSD_CLEAR : NFSD_SET) < 0) | ||
829 | return -EINVAL; | ||
830 | goto next; | ||
831 | } | ||
809 | switch(num) { | 832 | switch(num) { |
810 | case 2: | 833 | case 2: |
811 | case 3: | 834 | case 3: |
@@ -815,6 +838,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) | |||
815 | default: | 838 | default: |
816 | return -EINVAL; | 839 | return -EINVAL; |
817 | } | 840 | } |
841 | next: | ||
818 | vers += len + 1; | 842 | vers += len + 1; |
819 | tlen += len; | 843 | tlen += len; |
820 | } while ((len = qword_get(&mesg, vers, size)) > 0); | 844 | } while ((len = qword_get(&mesg, vers, size)) > 0); |
@@ -833,6 +857,13 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) | |||
833 | num); | 857 | num); |
834 | sep = " "; | 858 | sep = " "; |
835 | } | 859 | } |
860 | if (nfsd_vers(4, NFSD_AVAIL)) | ||
861 | for (minor = 1; minor <= NFSD_SUPPORTED_MINOR_VERSION; minor++) | ||
862 | len += sprintf(buf+len, " %c4.%u", | ||
863 | (nfsd_vers(4, NFSD_TEST) && | ||
864 | nfsd_minorversion(minor, NFSD_TEST)) ? | ||
865 | '+' : '-', | ||
866 | minor); | ||
836 | len += sprintf(buf+len, "\n"); | 867 | len += sprintf(buf+len, "\n"); |
837 | return len; | 868 | return len; |
838 | } | 869 | } |
@@ -1248,6 +1279,7 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent) | |||
1248 | [NFSD_Fh] = {"filehandle", &transaction_ops, S_IWUSR|S_IRUSR}, | 1279 | [NFSD_Fh] = {"filehandle", &transaction_ops, S_IWUSR|S_IRUSR}, |
1249 | [NFSD_Threads] = {"threads", &transaction_ops, S_IWUSR|S_IRUSR}, | 1280 | [NFSD_Threads] = {"threads", &transaction_ops, S_IWUSR|S_IRUSR}, |
1250 | [NFSD_Pool_Threads] = {"pool_threads", &transaction_ops, S_IWUSR|S_IRUSR}, | 1281 | [NFSD_Pool_Threads] = {"pool_threads", &transaction_ops, S_IWUSR|S_IRUSR}, |
1282 | [NFSD_Pool_Stats] = {"pool_stats", &pool_stats_operations, S_IRUGO}, | ||
1251 | [NFSD_Versions] = {"versions", &transaction_ops, S_IWUSR|S_IRUSR}, | 1283 | [NFSD_Versions] = {"versions", &transaction_ops, S_IWUSR|S_IRUSR}, |
1252 | [NFSD_Ports] = {"portlist", &transaction_ops, S_IWUSR|S_IRUGO}, | 1284 | [NFSD_Ports] = {"portlist", &transaction_ops, S_IWUSR|S_IRUGO}, |
1253 | [NFSD_MaxBlkSize] = {"max_block_size", &transaction_ops, S_IWUSR|S_IRUGO}, | 1285 | [NFSD_MaxBlkSize] = {"max_block_size", &transaction_ops, S_IWUSR|S_IRUGO}, |
diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c index 6f7f26351227..e298e260b5f1 100644 --- a/fs/nfsd/nfsproc.c +++ b/fs/nfsd/nfsproc.c | |||
@@ -180,6 +180,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp, | |||
180 | { | 180 | { |
181 | __be32 nfserr; | 181 | __be32 nfserr; |
182 | int stable = 1; | 182 | int stable = 1; |
183 | unsigned long cnt = argp->len; | ||
183 | 184 | ||
184 | dprintk("nfsd: WRITE %s %d bytes at %d\n", | 185 | dprintk("nfsd: WRITE %s %d bytes at %d\n", |
185 | SVCFH_fmt(&argp->fh), | 186 | SVCFH_fmt(&argp->fh), |
@@ -188,7 +189,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp, | |||
188 | nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), NULL, | 189 | nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), NULL, |
189 | argp->offset, | 190 | argp->offset, |
190 | rqstp->rq_vec, argp->vlen, | 191 | rqstp->rq_vec, argp->vlen, |
191 | argp->len, | 192 | &cnt, |
192 | &stable); | 193 | &stable); |
193 | return nfsd_return_attrs(nfserr, resp); | 194 | return nfsd_return_attrs(nfserr, resp); |
194 | } | 195 | } |
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 7c09852be713..cbba4a935786 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/freezer.h> | 22 | #include <linux/freezer.h> |
23 | #include <linux/fs_struct.h> | 23 | #include <linux/fs_struct.h> |
24 | #include <linux/kthread.h> | 24 | #include <linux/kthread.h> |
25 | #include <linux/swap.h> | ||
25 | 26 | ||
26 | #include <linux/sunrpc/types.h> | 27 | #include <linux/sunrpc/types.h> |
27 | #include <linux/sunrpc/stats.h> | 28 | #include <linux/sunrpc/stats.h> |
@@ -40,9 +41,6 @@ | |||
40 | extern struct svc_program nfsd_program; | 41 | extern struct svc_program nfsd_program; |
41 | static int nfsd(void *vrqstp); | 42 | static int nfsd(void *vrqstp); |
42 | struct timeval nfssvc_boot; | 43 | struct timeval nfssvc_boot; |
43 | static atomic_t nfsd_busy; | ||
44 | static unsigned long nfsd_last_call; | ||
45 | static DEFINE_SPINLOCK(nfsd_call_lock); | ||
46 | 44 | ||
47 | /* | 45 | /* |
48 | * nfsd_mutex protects nfsd_serv -- both the pointer itself and the members | 46 | * nfsd_mutex protects nfsd_serv -- both the pointer itself and the members |
@@ -123,6 +121,8 @@ struct svc_program nfsd_program = { | |||
123 | 121 | ||
124 | }; | 122 | }; |
125 | 123 | ||
124 | u32 nfsd_supported_minorversion; | ||
125 | |||
126 | int nfsd_vers(int vers, enum vers_op change) | 126 | int nfsd_vers(int vers, enum vers_op change) |
127 | { | 127 | { |
128 | if (vers < NFSD_MINVERS || vers >= NFSD_NRVERS) | 128 | if (vers < NFSD_MINVERS || vers >= NFSD_NRVERS) |
@@ -149,6 +149,28 @@ int nfsd_vers(int vers, enum vers_op change) | |||
149 | } | 149 | } |
150 | return 0; | 150 | return 0; |
151 | } | 151 | } |
152 | |||
153 | int nfsd_minorversion(u32 minorversion, enum vers_op change) | ||
154 | { | ||
155 | if (minorversion > NFSD_SUPPORTED_MINOR_VERSION) | ||
156 | return -1; | ||
157 | switch(change) { | ||
158 | case NFSD_SET: | ||
159 | nfsd_supported_minorversion = minorversion; | ||
160 | break; | ||
161 | case NFSD_CLEAR: | ||
162 | if (minorversion == 0) | ||
163 | return -1; | ||
164 | nfsd_supported_minorversion = minorversion - 1; | ||
165 | break; | ||
166 | case NFSD_TEST: | ||
167 | return minorversion <= nfsd_supported_minorversion; | ||
168 | case NFSD_AVAIL: | ||
169 | return minorversion <= NFSD_SUPPORTED_MINOR_VERSION; | ||
170 | } | ||
171 | return 0; | ||
172 | } | ||
173 | |||
152 | /* | 174 | /* |
153 | * Maximum number of nfsd processes | 175 | * Maximum number of nfsd processes |
154 | */ | 176 | */ |
@@ -200,6 +222,28 @@ void nfsd_reset_versions(void) | |||
200 | } | 222 | } |
201 | } | 223 | } |
202 | 224 | ||
225 | /* | ||
226 | * Each session guarantees a negotiated per slot memory cache for replies | ||
227 | * which in turn consumes memory beyond the v2/v3/v4.0 server. A dedicated | ||
228 | * NFSv4.1 server might want to use more memory for a DRC than a machine | ||
229 | * with mutiple services. | ||
230 | * | ||
231 | * Impose a hard limit on the number of pages for the DRC which varies | ||
232 | * according to the machines free pages. This is of course only a default. | ||
233 | * | ||
234 | * For now this is a #defined shift which could be under admin control | ||
235 | * in the future. | ||
236 | */ | ||
237 | static void set_max_drc(void) | ||
238 | { | ||
239 | /* The percent of nr_free_buffer_pages used by the V4.1 server DRC */ | ||
240 | #define NFSD_DRC_SIZE_SHIFT 7 | ||
241 | nfsd_serv->sv_drc_max_pages = nr_free_buffer_pages() | ||
242 | >> NFSD_DRC_SIZE_SHIFT; | ||
243 | nfsd_serv->sv_drc_pages_used = 0; | ||
244 | dprintk("%s svc_drc_max_pages %u\n", __func__, | ||
245 | nfsd_serv->sv_drc_max_pages); | ||
246 | } | ||
203 | 247 | ||
204 | int nfsd_create_serv(void) | 248 | int nfsd_create_serv(void) |
205 | { | 249 | { |
@@ -227,11 +271,12 @@ int nfsd_create_serv(void) | |||
227 | nfsd_max_blksize /= 2; | 271 | nfsd_max_blksize /= 2; |
228 | } | 272 | } |
229 | 273 | ||
230 | atomic_set(&nfsd_busy, 0); | ||
231 | nfsd_serv = svc_create_pooled(&nfsd_program, nfsd_max_blksize, | 274 | nfsd_serv = svc_create_pooled(&nfsd_program, nfsd_max_blksize, |
232 | nfsd_last_thread, nfsd, THIS_MODULE); | 275 | nfsd_last_thread, nfsd, THIS_MODULE); |
233 | if (nfsd_serv == NULL) | 276 | if (nfsd_serv == NULL) |
234 | err = -ENOMEM; | 277 | err = -ENOMEM; |
278 | else | ||
279 | set_max_drc(); | ||
235 | 280 | ||
236 | do_gettimeofday(&nfssvc_boot); /* record boot time */ | 281 | do_gettimeofday(&nfssvc_boot); /* record boot time */ |
237 | return err; | 282 | return err; |
@@ -375,26 +420,6 @@ nfsd_svc(unsigned short port, int nrservs) | |||
375 | return error; | 420 | return error; |
376 | } | 421 | } |
377 | 422 | ||
378 | static inline void | ||
379 | update_thread_usage(int busy_threads) | ||
380 | { | ||
381 | unsigned long prev_call; | ||
382 | unsigned long diff; | ||
383 | int decile; | ||
384 | |||
385 | spin_lock(&nfsd_call_lock); | ||
386 | prev_call = nfsd_last_call; | ||
387 | nfsd_last_call = jiffies; | ||
388 | decile = busy_threads*10/nfsdstats.th_cnt; | ||
389 | if (decile>0 && decile <= 10) { | ||
390 | diff = nfsd_last_call - prev_call; | ||
391 | if ( (nfsdstats.th_usage[decile-1] += diff) >= NFSD_USAGE_WRAP) | ||
392 | nfsdstats.th_usage[decile-1] -= NFSD_USAGE_WRAP; | ||
393 | if (decile == 10) | ||
394 | nfsdstats.th_fullcnt++; | ||
395 | } | ||
396 | spin_unlock(&nfsd_call_lock); | ||
397 | } | ||
398 | 423 | ||
399 | /* | 424 | /* |
400 | * This is the NFS server kernel thread | 425 | * This is the NFS server kernel thread |
@@ -460,8 +485,6 @@ nfsd(void *vrqstp) | |||
460 | continue; | 485 | continue; |
461 | } | 486 | } |
462 | 487 | ||
463 | update_thread_usage(atomic_read(&nfsd_busy)); | ||
464 | atomic_inc(&nfsd_busy); | ||
465 | 488 | ||
466 | /* Lock the export hash tables for reading. */ | 489 | /* Lock the export hash tables for reading. */ |
467 | exp_readlock(); | 490 | exp_readlock(); |
@@ -470,8 +493,6 @@ nfsd(void *vrqstp) | |||
470 | 493 | ||
471 | /* Unlock export hash tables */ | 494 | /* Unlock export hash tables */ |
472 | exp_readunlock(); | 495 | exp_readunlock(); |
473 | update_thread_usage(atomic_read(&nfsd_busy)); | ||
474 | atomic_dec(&nfsd_busy); | ||
475 | } | 496 | } |
476 | 497 | ||
477 | /* Clear signals before calling svc_exit_thread() */ | 498 | /* Clear signals before calling svc_exit_thread() */ |
@@ -539,6 +560,10 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp) | |||
539 | + rqstp->rq_res.head[0].iov_len; | 560 | + rqstp->rq_res.head[0].iov_len; |
540 | rqstp->rq_res.head[0].iov_len += sizeof(__be32); | 561 | rqstp->rq_res.head[0].iov_len += sizeof(__be32); |
541 | 562 | ||
563 | /* NFSv4.1 DRC requires statp */ | ||
564 | if (rqstp->rq_vers == 4) | ||
565 | nfsd4_set_statp(rqstp, statp); | ||
566 | |||
542 | /* Now call the procedure handler, and encode NFS status. */ | 567 | /* Now call the procedure handler, and encode NFS status. */ |
543 | nfserr = proc->pc_func(rqstp, rqstp->rq_argp, rqstp->rq_resp); | 568 | nfserr = proc->pc_func(rqstp, rqstp->rq_argp, rqstp->rq_resp); |
544 | nfserr = map_new_errors(rqstp->rq_vers, nfserr); | 569 | nfserr = map_new_errors(rqstp->rq_vers, nfserr); |
@@ -570,3 +595,10 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp) | |||
570 | nfsd_cache_update(rqstp, proc->pc_cachetype, statp + 1); | 595 | nfsd_cache_update(rqstp, proc->pc_cachetype, statp + 1); |
571 | return 1; | 596 | return 1; |
572 | } | 597 | } |
598 | |||
599 | int nfsd_pool_stats_open(struct inode *inode, struct file *file) | ||
600 | { | ||
601 | if (nfsd_serv == NULL) | ||
602 | return -ENODEV; | ||
603 | return svc_pool_stats_open(nfsd_serv, file); | ||
604 | } | ||
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 78376b6c0236..ab93fcfef254 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c | |||
@@ -366,8 +366,9 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, | |||
366 | } | 366 | } |
367 | 367 | ||
368 | /* Revoke setuid/setgid on chown */ | 368 | /* Revoke setuid/setgid on chown */ |
369 | if (((iap->ia_valid & ATTR_UID) && iap->ia_uid != inode->i_uid) || | 369 | if (!S_ISDIR(inode->i_mode) && |
370 | ((iap->ia_valid & ATTR_GID) && iap->ia_gid != inode->i_gid)) { | 370 | (((iap->ia_valid & ATTR_UID) && iap->ia_uid != inode->i_uid) || |
371 | ((iap->ia_valid & ATTR_GID) && iap->ia_gid != inode->i_gid))) { | ||
371 | iap->ia_valid |= ATTR_KILL_PRIV; | 372 | iap->ia_valid |= ATTR_KILL_PRIV; |
372 | if (iap->ia_valid & ATTR_MODE) { | 373 | if (iap->ia_valid & ATTR_MODE) { |
373 | /* we're setting mode too, just clear the s*id bits */ | 374 | /* we're setting mode too, just clear the s*id bits */ |
@@ -960,7 +961,7 @@ static void kill_suid(struct dentry *dentry) | |||
960 | static __be32 | 961 | static __be32 |
961 | nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | 962 | nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
962 | loff_t offset, struct kvec *vec, int vlen, | 963 | loff_t offset, struct kvec *vec, int vlen, |
963 | unsigned long cnt, int *stablep) | 964 | unsigned long *cnt, int *stablep) |
964 | { | 965 | { |
965 | struct svc_export *exp; | 966 | struct svc_export *exp; |
966 | struct dentry *dentry; | 967 | struct dentry *dentry; |
@@ -974,7 +975,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | |||
974 | err = nfserr_perm; | 975 | err = nfserr_perm; |
975 | 976 | ||
976 | if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) && | 977 | if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) && |
977 | (!lock_may_write(file->f_path.dentry->d_inode, offset, cnt))) | 978 | (!lock_may_write(file->f_path.dentry->d_inode, offset, *cnt))) |
978 | goto out; | 979 | goto out; |
979 | #endif | 980 | #endif |
980 | 981 | ||
@@ -1009,7 +1010,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | |||
1009 | host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &offset); | 1010 | host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &offset); |
1010 | set_fs(oldfs); | 1011 | set_fs(oldfs); |
1011 | if (host_err >= 0) { | 1012 | if (host_err >= 0) { |
1012 | nfsdstats.io_write += cnt; | 1013 | nfsdstats.io_write += host_err; |
1013 | fsnotify_modify(file->f_path.dentry); | 1014 | fsnotify_modify(file->f_path.dentry); |
1014 | } | 1015 | } |
1015 | 1016 | ||
@@ -1054,9 +1055,10 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | |||
1054 | } | 1055 | } |
1055 | 1056 | ||
1056 | dprintk("nfsd: write complete host_err=%d\n", host_err); | 1057 | dprintk("nfsd: write complete host_err=%d\n", host_err); |
1057 | if (host_err >= 0) | 1058 | if (host_err >= 0) { |
1058 | err = 0; | 1059 | err = 0; |
1059 | else | 1060 | *cnt = host_err; |
1061 | } else | ||
1060 | err = nfserrno(host_err); | 1062 | err = nfserrno(host_err); |
1061 | out: | 1063 | out: |
1062 | return err; | 1064 | return err; |
@@ -1098,7 +1100,7 @@ out: | |||
1098 | */ | 1100 | */ |
1099 | __be32 | 1101 | __be32 |
1100 | nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | 1102 | nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
1101 | loff_t offset, struct kvec *vec, int vlen, unsigned long cnt, | 1103 | loff_t offset, struct kvec *vec, int vlen, unsigned long *cnt, |
1102 | int *stablep) | 1104 | int *stablep) |
1103 | { | 1105 | { |
1104 | __be32 err = 0; | 1106 | __be32 err = 0; |
@@ -1179,6 +1181,21 @@ nfsd_create_setattr(struct svc_rqst *rqstp, struct svc_fh *resfhp, | |||
1179 | return 0; | 1181 | return 0; |
1180 | } | 1182 | } |
1181 | 1183 | ||
1184 | /* HPUX client sometimes creates a file in mode 000, and sets size to 0. | ||
1185 | * setting size to 0 may fail for some specific file systems by the permission | ||
1186 | * checking which requires WRITE permission but the mode is 000. | ||
1187 | * we ignore the resizing(to 0) on the just new created file, since the size is | ||
1188 | * 0 after file created. | ||
1189 | * | ||
1190 | * call this only after vfs_create() is called. | ||
1191 | * */ | ||
1192 | static void | ||
1193 | nfsd_check_ignore_resizing(struct iattr *iap) | ||
1194 | { | ||
1195 | if ((iap->ia_valid & ATTR_SIZE) && (iap->ia_size == 0)) | ||
1196 | iap->ia_valid &= ~ATTR_SIZE; | ||
1197 | } | ||
1198 | |||
1182 | /* | 1199 | /* |
1183 | * Create a file (regular, directory, device, fifo); UNIX sockets | 1200 | * Create a file (regular, directory, device, fifo); UNIX sockets |
1184 | * not yet implemented. | 1201 | * not yet implemented. |
@@ -1274,6 +1291,8 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, | |||
1274 | switch (type) { | 1291 | switch (type) { |
1275 | case S_IFREG: | 1292 | case S_IFREG: |
1276 | host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL); | 1293 | host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL); |
1294 | if (!host_err) | ||
1295 | nfsd_check_ignore_resizing(iap); | ||
1277 | break; | 1296 | break; |
1278 | case S_IFDIR: | 1297 | case S_IFDIR: |
1279 | host_err = vfs_mkdir(dirp, dchild, iap->ia_mode); | 1298 | host_err = vfs_mkdir(dirp, dchild, iap->ia_mode); |
@@ -1427,6 +1446,8 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, | |||
1427 | /* setattr will sync the child (or not) */ | 1446 | /* setattr will sync the child (or not) */ |
1428 | } | 1447 | } |
1429 | 1448 | ||
1449 | nfsd_check_ignore_resizing(iap); | ||
1450 | |||
1430 | if (createmode == NFS3_CREATE_EXCLUSIVE) { | 1451 | if (createmode == NFS3_CREATE_EXCLUSIVE) { |
1431 | /* Cram the verifier into atime/mtime */ | 1452 | /* Cram the verifier into atime/mtime */ |
1432 | iap->ia_valid = ATTR_MTIME|ATTR_ATIME | 1453 | iap->ia_valid = ATTR_MTIME|ATTR_ATIME |
diff --git a/fs/romfs/Kconfig b/fs/romfs/Kconfig index 1a17020f9faf..ce2d6bcc6266 100644 --- a/fs/romfs/Kconfig +++ b/fs/romfs/Kconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | config ROMFS_FS | 1 | config ROMFS_FS |
2 | tristate "ROM file system support" | 2 | tristate "ROM file system support" |
3 | depends on BLOCK | 3 | depends on BLOCK || MTD |
4 | ---help--- | 4 | ---help--- |
5 | This is a very small read-only file system mainly intended for | 5 | This is a very small read-only file system mainly intended for |
6 | initial ram disks of installation disks, but it could be used for | 6 | initial ram disks of installation disks, but it could be used for |
@@ -14,3 +14,49 @@ config ROMFS_FS | |||
14 | 14 | ||
15 | If you don't know whether you need it, then you don't need it: | 15 | If you don't know whether you need it, then you don't need it: |
16 | answer N. | 16 | answer N. |
17 | |||
18 | # | ||
19 | # Select the backing stores to be supported | ||
20 | # | ||
21 | choice | ||
22 | prompt "RomFS backing stores" | ||
23 | depends on ROMFS_FS | ||
24 | default ROMFS_BACKED_BY_BLOCK | ||
25 | help | ||
26 | Select the backing stores to be supported. | ||
27 | |||
28 | config ROMFS_BACKED_BY_BLOCK | ||
29 | bool "Block device-backed ROM file system support" | ||
30 | depends on BLOCK | ||
31 | help | ||
32 | This permits ROMFS to use block devices buffered through the page | ||
33 | cache as the medium from which to retrieve data. It does not allow | ||
34 | direct mapping of the medium. | ||
35 | |||
36 | If unsure, answer Y. | ||
37 | |||
38 | config ROMFS_BACKED_BY_MTD | ||
39 | bool "MTD-backed ROM file system support" | ||
40 | depends on MTD=y || (ROMFS_FS=m && MTD) | ||
41 | help | ||
42 | This permits ROMFS to use MTD based devices directly, without the | ||
43 | intercession of the block layer (which may have been disabled). It | ||
44 | also allows direct mapping of MTD devices through romfs files under | ||
45 | NOMMU conditions if the underlying device is directly addressable by | ||
46 | the CPU. | ||
47 | |||
48 | If unsure, answer Y. | ||
49 | |||
50 | config ROMFS_BACKED_BY_BOTH | ||
51 | bool "Both the above" | ||
52 | depends on BLOCK && (MTD=y || (ROMFS_FS=m && MTD)) | ||
53 | endchoice | ||
54 | |||
55 | |||
56 | config ROMFS_ON_BLOCK | ||
57 | bool | ||
58 | default y if ROMFS_BACKED_BY_BLOCK || ROMFS_BACKED_BY_BOTH | ||
59 | |||
60 | config ROMFS_ON_MTD | ||
61 | bool | ||
62 | default y if ROMFS_BACKED_BY_MTD || ROMFS_BACKED_BY_BOTH | ||
diff --git a/fs/romfs/Makefile b/fs/romfs/Makefile index c95b21cf49a3..420beb7d495c 100644 --- a/fs/romfs/Makefile +++ b/fs/romfs/Makefile | |||
@@ -1,7 +1,12 @@ | |||
1 | # | 1 | # |
2 | # Makefile for the linux romfs filesystem routines. | 2 | # Makefile for the linux RomFS filesystem routines. |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-$(CONFIG_ROMFS_FS) += romfs.o | 5 | obj-$(CONFIG_ROMFS_FS) += romfs.o |
6 | 6 | ||
7 | romfs-objs := inode.o | 7 | romfs-y := storage.o super.o |
8 | |||
9 | ifneq ($(CONFIG_MMU),y) | ||
10 | romfs-$(CONFIG_ROMFS_ON_MTD) += mmap-nommu.o | ||
11 | endif | ||
12 | |||
diff --git a/fs/romfs/inode.c b/fs/romfs/inode.c deleted file mode 100644 index 98a232f7196b..000000000000 --- a/fs/romfs/inode.c +++ /dev/null | |||
@@ -1,665 +0,0 @@ | |||
1 | /* | ||
2 | * ROMFS file system, Linux implementation | ||
3 | * | ||
4 | * Copyright (C) 1997-1999 Janos Farkas <chexum@shadow.banki.hu> | ||
5 | * | ||
6 | * Using parts of the minix filesystem | ||
7 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
8 | * | ||
9 | * and parts of the affs filesystem additionally | ||
10 | * Copyright (C) 1993 Ray Burr | ||
11 | * Copyright (C) 1996 Hans-Joachim Widmaier | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or | ||
14 | * modify it under the terms of the GNU General Public License | ||
15 | * as published by the Free Software Foundation; either version | ||
16 | * 2 of the License, or (at your option) any later version. | ||
17 | * | ||
18 | * Changes | ||
19 | * Changed for 2.1.19 modules | ||
20 | * Jan 1997 Initial release | ||
21 | * Jun 1997 2.1.43+ changes | ||
22 | * Proper page locking in readpage | ||
23 | * Changed to work with 2.1.45+ fs | ||
24 | * Jul 1997 Fixed follow_link | ||
25 | * 2.1.47 | ||
26 | * lookup shouldn't return -ENOENT | ||
27 | * from Horst von Brand: | ||
28 | * fail on wrong checksum | ||
29 | * double unlock_super was possible | ||
30 | * correct namelen for statfs | ||
31 | * spotted by Bill Hawes: | ||
32 | * readlink shouldn't iput() | ||
33 | * Jun 1998 2.1.106 from Avery Pennarun: glibc scandir() | ||
34 | * exposed a problem in readdir | ||
35 | * 2.1.107 code-freeze spellchecker run | ||
36 | * Aug 1998 2.1.118+ VFS changes | ||
37 | * Sep 1998 2.1.122 another VFS change (follow_link) | ||
38 | * Apr 1999 2.2.7 no more EBADF checking in | ||
39 | * lookup/readdir, use ERR_PTR | ||
40 | * Jun 1999 2.3.6 d_alloc_root use changed | ||
41 | * 2.3.9 clean up usage of ENOENT/negative | ||
42 | * dentries in lookup | ||
43 | * clean up page flags setting | ||
44 | * (error, uptodate, locking) in | ||
45 | * in readpage | ||
46 | * use init_special_inode for | ||
47 | * fifos/sockets (and streamline) in | ||
48 | * read_inode, fix _ops table order | ||
49 | * Aug 1999 2.3.16 __initfunc() => __init change | ||
50 | * Oct 1999 2.3.24 page->owner hack obsoleted | ||
51 | * Nov 1999 2.3.27 2.3.25+ page->offset => index change | ||
52 | */ | ||
53 | |||
54 | /* todo: | ||
55 | * - see Documentation/filesystems/romfs.txt | ||
56 | * - use allocated, not stack memory for file names? | ||
57 | * - considering write access... | ||
58 | * - network (tftp) files? | ||
59 | * - merge back some _op tables | ||
60 | */ | ||
61 | |||
62 | /* | ||
63 | * Sorry about some optimizations and for some goto's. I just wanted | ||
64 | * to squeeze some more bytes out of this code.. :) | ||
65 | */ | ||
66 | |||
67 | #include <linux/module.h> | ||
68 | #include <linux/types.h> | ||
69 | #include <linux/errno.h> | ||
70 | #include <linux/slab.h> | ||
71 | #include <linux/romfs_fs.h> | ||
72 | #include <linux/fs.h> | ||
73 | #include <linux/init.h> | ||
74 | #include <linux/pagemap.h> | ||
75 | #include <linux/smp_lock.h> | ||
76 | #include <linux/buffer_head.h> | ||
77 | #include <linux/vfs.h> | ||
78 | |||
79 | #include <asm/uaccess.h> | ||
80 | |||
81 | struct romfs_inode_info { | ||
82 | unsigned long i_metasize; /* size of non-data area */ | ||
83 | unsigned long i_dataoffset; /* from the start of fs */ | ||
84 | struct inode vfs_inode; | ||
85 | }; | ||
86 | |||
87 | static struct inode *romfs_iget(struct super_block *, unsigned long); | ||
88 | |||
89 | /* instead of private superblock data */ | ||
90 | static inline unsigned long romfs_maxsize(struct super_block *sb) | ||
91 | { | ||
92 | return (unsigned long)sb->s_fs_info; | ||
93 | } | ||
94 | |||
95 | static inline struct romfs_inode_info *ROMFS_I(struct inode *inode) | ||
96 | { | ||
97 | return container_of(inode, struct romfs_inode_info, vfs_inode); | ||
98 | } | ||
99 | |||
100 | static __u32 | ||
101 | romfs_checksum(void *data, int size) | ||
102 | { | ||
103 | __u32 sum; | ||
104 | __be32 *ptr; | ||
105 | |||
106 | sum = 0; ptr = data; | ||
107 | size>>=2; | ||
108 | while (size>0) { | ||
109 | sum += be32_to_cpu(*ptr++); | ||
110 | size--; | ||
111 | } | ||
112 | return sum; | ||
113 | } | ||
114 | |||
115 | static const struct super_operations romfs_ops; | ||
116 | |||
117 | static int romfs_fill_super(struct super_block *s, void *data, int silent) | ||
118 | { | ||
119 | struct buffer_head *bh; | ||
120 | struct romfs_super_block *rsb; | ||
121 | struct inode *root; | ||
122 | int sz, ret = -EINVAL; | ||
123 | |||
124 | /* I would parse the options here, but there are none.. :) */ | ||
125 | |||
126 | sb_set_blocksize(s, ROMBSIZE); | ||
127 | s->s_maxbytes = 0xFFFFFFFF; | ||
128 | |||
129 | bh = sb_bread(s, 0); | ||
130 | if (!bh) { | ||
131 | /* XXX merge with other printk? */ | ||
132 | printk ("romfs: unable to read superblock\n"); | ||
133 | goto outnobh; | ||
134 | } | ||
135 | |||
136 | rsb = (struct romfs_super_block *)bh->b_data; | ||
137 | sz = be32_to_cpu(rsb->size); | ||
138 | if (rsb->word0 != ROMSB_WORD0 || rsb->word1 != ROMSB_WORD1 | ||
139 | || sz < ROMFH_SIZE) { | ||
140 | if (!silent) | ||
141 | printk ("VFS: Can't find a romfs filesystem on dev " | ||
142 | "%s.\n", s->s_id); | ||
143 | goto out; | ||
144 | } | ||
145 | if (romfs_checksum(rsb, min_t(int, sz, 512))) { | ||
146 | printk ("romfs: bad initial checksum on dev " | ||
147 | "%s.\n", s->s_id); | ||
148 | goto out; | ||
149 | } | ||
150 | |||
151 | s->s_magic = ROMFS_MAGIC; | ||
152 | s->s_fs_info = (void *)(long)sz; | ||
153 | |||
154 | s->s_flags |= MS_RDONLY; | ||
155 | |||
156 | /* Find the start of the fs */ | ||
157 | sz = (ROMFH_SIZE + | ||
158 | strnlen(rsb->name, ROMFS_MAXFN) + 1 + ROMFH_PAD) | ||
159 | & ROMFH_MASK; | ||
160 | |||
161 | s->s_op = &romfs_ops; | ||
162 | root = romfs_iget(s, sz); | ||
163 | if (IS_ERR(root)) { | ||
164 | ret = PTR_ERR(root); | ||
165 | goto out; | ||
166 | } | ||
167 | |||
168 | ret = -ENOMEM; | ||
169 | s->s_root = d_alloc_root(root); | ||
170 | if (!s->s_root) | ||
171 | goto outiput; | ||
172 | |||
173 | brelse(bh); | ||
174 | return 0; | ||
175 | |||
176 | outiput: | ||
177 | iput(root); | ||
178 | out: | ||
179 | brelse(bh); | ||
180 | outnobh: | ||
181 | return ret; | ||
182 | } | ||
183 | |||
184 | /* That's simple too. */ | ||
185 | |||
186 | static int | ||
187 | romfs_statfs(struct dentry *dentry, struct kstatfs *buf) | ||
188 | { | ||
189 | buf->f_type = ROMFS_MAGIC; | ||
190 | buf->f_bsize = ROMBSIZE; | ||
191 | buf->f_bfree = buf->f_bavail = buf->f_ffree; | ||
192 | buf->f_blocks = (romfs_maxsize(dentry->d_sb)+ROMBSIZE-1)>>ROMBSBITS; | ||
193 | buf->f_namelen = ROMFS_MAXFN; | ||
194 | return 0; | ||
195 | } | ||
196 | |||
197 | /* some helper routines */ | ||
198 | |||
199 | static int | ||
200 | romfs_strnlen(struct inode *i, unsigned long offset, unsigned long count) | ||
201 | { | ||
202 | struct buffer_head *bh; | ||
203 | unsigned long avail, maxsize, res; | ||
204 | |||
205 | maxsize = romfs_maxsize(i->i_sb); | ||
206 | if (offset >= maxsize) | ||
207 | return -1; | ||
208 | |||
209 | /* strnlen is almost always valid */ | ||
210 | if (count > maxsize || offset+count > maxsize) | ||
211 | count = maxsize-offset; | ||
212 | |||
213 | bh = sb_bread(i->i_sb, offset>>ROMBSBITS); | ||
214 | if (!bh) | ||
215 | return -1; /* error */ | ||
216 | |||
217 | avail = ROMBSIZE - (offset & ROMBMASK); | ||
218 | maxsize = min_t(unsigned long, count, avail); | ||
219 | res = strnlen(((char *)bh->b_data)+(offset&ROMBMASK), maxsize); | ||
220 | brelse(bh); | ||
221 | |||
222 | if (res < maxsize) | ||
223 | return res; /* found all of it */ | ||
224 | |||
225 | while (res < count) { | ||
226 | offset += maxsize; | ||
227 | |||
228 | bh = sb_bread(i->i_sb, offset>>ROMBSBITS); | ||
229 | if (!bh) | ||
230 | return -1; | ||
231 | maxsize = min_t(unsigned long, count - res, ROMBSIZE); | ||
232 | avail = strnlen(bh->b_data, maxsize); | ||
233 | res += avail; | ||
234 | brelse(bh); | ||
235 | if (avail < maxsize) | ||
236 | return res; | ||
237 | } | ||
238 | return res; | ||
239 | } | ||
240 | |||
241 | static int | ||
242 | romfs_copyfrom(struct inode *i, void *dest, unsigned long offset, unsigned long count) | ||
243 | { | ||
244 | struct buffer_head *bh; | ||
245 | unsigned long avail, maxsize, res; | ||
246 | |||
247 | maxsize = romfs_maxsize(i->i_sb); | ||
248 | if (offset >= maxsize || count > maxsize || offset+count>maxsize) | ||
249 | return -1; | ||
250 | |||
251 | bh = sb_bread(i->i_sb, offset>>ROMBSBITS); | ||
252 | if (!bh) | ||
253 | return -1; /* error */ | ||
254 | |||
255 | avail = ROMBSIZE - (offset & ROMBMASK); | ||
256 | maxsize = min_t(unsigned long, count, avail); | ||
257 | memcpy(dest, ((char *)bh->b_data) + (offset & ROMBMASK), maxsize); | ||
258 | brelse(bh); | ||
259 | |||
260 | res = maxsize; /* all of it */ | ||
261 | |||
262 | while (res < count) { | ||
263 | offset += maxsize; | ||
264 | dest += maxsize; | ||
265 | |||
266 | bh = sb_bread(i->i_sb, offset>>ROMBSBITS); | ||
267 | if (!bh) | ||
268 | return -1; | ||
269 | maxsize = min_t(unsigned long, count - res, ROMBSIZE); | ||
270 | memcpy(dest, bh->b_data, maxsize); | ||
271 | brelse(bh); | ||
272 | res += maxsize; | ||
273 | } | ||
274 | return res; | ||
275 | } | ||
276 | |||
277 | static unsigned char romfs_dtype_table[] = { | ||
278 | DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_SOCK, DT_FIFO | ||
279 | }; | ||
280 | |||
281 | static int | ||
282 | romfs_readdir(struct file *filp, void *dirent, filldir_t filldir) | ||
283 | { | ||
284 | struct inode *i = filp->f_path.dentry->d_inode; | ||
285 | struct romfs_inode ri; | ||
286 | unsigned long offset, maxoff; | ||
287 | int j, ino, nextfh; | ||
288 | int stored = 0; | ||
289 | char fsname[ROMFS_MAXFN]; /* XXX dynamic? */ | ||
290 | |||
291 | lock_kernel(); | ||
292 | |||
293 | maxoff = romfs_maxsize(i->i_sb); | ||
294 | |||
295 | offset = filp->f_pos; | ||
296 | if (!offset) { | ||
297 | offset = i->i_ino & ROMFH_MASK; | ||
298 | if (romfs_copyfrom(i, &ri, offset, ROMFH_SIZE) <= 0) | ||
299 | goto out; | ||
300 | offset = be32_to_cpu(ri.spec) & ROMFH_MASK; | ||
301 | } | ||
302 | |||
303 | /* Not really failsafe, but we are read-only... */ | ||
304 | for(;;) { | ||
305 | if (!offset || offset >= maxoff) { | ||
306 | offset = maxoff; | ||
307 | filp->f_pos = offset; | ||
308 | goto out; | ||
309 | } | ||
310 | filp->f_pos = offset; | ||
311 | |||
312 | /* Fetch inode info */ | ||
313 | if (romfs_copyfrom(i, &ri, offset, ROMFH_SIZE) <= 0) | ||
314 | goto out; | ||
315 | |||
316 | j = romfs_strnlen(i, offset+ROMFH_SIZE, sizeof(fsname)-1); | ||
317 | if (j < 0) | ||
318 | goto out; | ||
319 | |||
320 | fsname[j]=0; | ||
321 | romfs_copyfrom(i, fsname, offset+ROMFH_SIZE, j); | ||
322 | |||
323 | ino = offset; | ||
324 | nextfh = be32_to_cpu(ri.next); | ||
325 | if ((nextfh & ROMFH_TYPE) == ROMFH_HRD) | ||
326 | ino = be32_to_cpu(ri.spec); | ||
327 | if (filldir(dirent, fsname, j, offset, ino, | ||
328 | romfs_dtype_table[nextfh & ROMFH_TYPE]) < 0) { | ||
329 | goto out; | ||
330 | } | ||
331 | stored++; | ||
332 | offset = nextfh & ROMFH_MASK; | ||
333 | } | ||
334 | out: | ||
335 | unlock_kernel(); | ||
336 | return stored; | ||
337 | } | ||
338 | |||
339 | static struct dentry * | ||
340 | romfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) | ||
341 | { | ||
342 | unsigned long offset, maxoff; | ||
343 | long res; | ||
344 | int fslen; | ||
345 | struct inode *inode = NULL; | ||
346 | char fsname[ROMFS_MAXFN]; /* XXX dynamic? */ | ||
347 | struct romfs_inode ri; | ||
348 | const char *name; /* got from dentry */ | ||
349 | int len; | ||
350 | |||
351 | res = -EACCES; /* placeholder for "no data here" */ | ||
352 | offset = dir->i_ino & ROMFH_MASK; | ||
353 | lock_kernel(); | ||
354 | if (romfs_copyfrom(dir, &ri, offset, ROMFH_SIZE) <= 0) | ||
355 | goto error; | ||
356 | |||
357 | maxoff = romfs_maxsize(dir->i_sb); | ||
358 | offset = be32_to_cpu(ri.spec) & ROMFH_MASK; | ||
359 | |||
360 | /* OK, now find the file whose name is in "dentry" in the | ||
361 | * directory specified by "dir". */ | ||
362 | |||
363 | name = dentry->d_name.name; | ||
364 | len = dentry->d_name.len; | ||
365 | |||
366 | for(;;) { | ||
367 | if (!offset || offset >= maxoff) | ||
368 | goto success; /* negative success */ | ||
369 | if (romfs_copyfrom(dir, &ri, offset, ROMFH_SIZE) <= 0) | ||
370 | goto error; | ||
371 | |||
372 | /* try to match the first 16 bytes of name */ | ||
373 | fslen = romfs_strnlen(dir, offset+ROMFH_SIZE, ROMFH_SIZE); | ||
374 | if (len < ROMFH_SIZE) { | ||
375 | if (len == fslen) { | ||
376 | /* both are shorter, and same size */ | ||
377 | romfs_copyfrom(dir, fsname, offset+ROMFH_SIZE, len+1); | ||
378 | if (strncmp (name, fsname, len) == 0) | ||
379 | break; | ||
380 | } | ||
381 | } else if (fslen >= ROMFH_SIZE) { | ||
382 | /* both are longer; XXX optimize max size */ | ||
383 | fslen = romfs_strnlen(dir, offset+ROMFH_SIZE, sizeof(fsname)-1); | ||
384 | if (len == fslen) { | ||
385 | romfs_copyfrom(dir, fsname, offset+ROMFH_SIZE, len+1); | ||
386 | if (strncmp(name, fsname, len) == 0) | ||
387 | break; | ||
388 | } | ||
389 | } | ||
390 | /* next entry */ | ||
391 | offset = be32_to_cpu(ri.next) & ROMFH_MASK; | ||
392 | } | ||
393 | |||
394 | /* Hard link handling */ | ||
395 | if ((be32_to_cpu(ri.next) & ROMFH_TYPE) == ROMFH_HRD) | ||
396 | offset = be32_to_cpu(ri.spec) & ROMFH_MASK; | ||
397 | |||
398 | inode = romfs_iget(dir->i_sb, offset); | ||
399 | if (IS_ERR(inode)) { | ||
400 | res = PTR_ERR(inode); | ||
401 | goto error; | ||
402 | } | ||
403 | |||
404 | success: | ||
405 | d_add(dentry, inode); | ||
406 | res = 0; | ||
407 | error: | ||
408 | unlock_kernel(); | ||
409 | return ERR_PTR(res); | ||
410 | } | ||
411 | |||
412 | /* | ||
413 | * Ok, we do readpage, to be able to execute programs. Unfortunately, | ||
414 | * we can't use bmap, since we may have looser alignments. | ||
415 | */ | ||
416 | |||
417 | static int | ||
418 | romfs_readpage(struct file *file, struct page * page) | ||
419 | { | ||
420 | struct inode *inode = page->mapping->host; | ||
421 | loff_t offset, size; | ||
422 | unsigned long filled; | ||
423 | void *buf; | ||
424 | int result = -EIO; | ||
425 | |||
426 | page_cache_get(page); | ||
427 | lock_kernel(); | ||
428 | buf = kmap(page); | ||
429 | if (!buf) | ||
430 | goto err_out; | ||
431 | |||
432 | /* 32 bit warning -- but not for us :) */ | ||
433 | offset = page_offset(page); | ||
434 | size = i_size_read(inode); | ||
435 | filled = 0; | ||
436 | result = 0; | ||
437 | if (offset < size) { | ||
438 | unsigned long readlen; | ||
439 | |||
440 | size -= offset; | ||
441 | readlen = size > PAGE_SIZE ? PAGE_SIZE : size; | ||
442 | |||
443 | filled = romfs_copyfrom(inode, buf, ROMFS_I(inode)->i_dataoffset+offset, readlen); | ||
444 | |||
445 | if (filled != readlen) { | ||
446 | SetPageError(page); | ||
447 | filled = 0; | ||
448 | result = -EIO; | ||
449 | } | ||
450 | } | ||
451 | |||
452 | if (filled < PAGE_SIZE) | ||
453 | memset(buf + filled, 0, PAGE_SIZE-filled); | ||
454 | |||
455 | if (!result) | ||
456 | SetPageUptodate(page); | ||
457 | flush_dcache_page(page); | ||
458 | |||
459 | unlock_page(page); | ||
460 | |||
461 | kunmap(page); | ||
462 | err_out: | ||
463 | page_cache_release(page); | ||
464 | unlock_kernel(); | ||
465 | |||
466 | return result; | ||
467 | } | ||
468 | |||
469 | /* Mapping from our types to the kernel */ | ||
470 | |||
471 | static const struct address_space_operations romfs_aops = { | ||
472 | .readpage = romfs_readpage | ||
473 | }; | ||
474 | |||
475 | static const struct file_operations romfs_dir_operations = { | ||
476 | .read = generic_read_dir, | ||
477 | .readdir = romfs_readdir, | ||
478 | }; | ||
479 | |||
480 | static const struct inode_operations romfs_dir_inode_operations = { | ||
481 | .lookup = romfs_lookup, | ||
482 | }; | ||
483 | |||
484 | static mode_t romfs_modemap[] = | ||
485 | { | ||
486 | 0, S_IFDIR+0644, S_IFREG+0644, S_IFLNK+0777, | ||
487 | S_IFBLK+0600, S_IFCHR+0600, S_IFSOCK+0644, S_IFIFO+0644 | ||
488 | }; | ||
489 | |||
490 | static struct inode * | ||
491 | romfs_iget(struct super_block *sb, unsigned long ino) | ||
492 | { | ||
493 | int nextfh, ret; | ||
494 | struct romfs_inode ri; | ||
495 | struct inode *i; | ||
496 | |||
497 | ino &= ROMFH_MASK; | ||
498 | i = iget_locked(sb, ino); | ||
499 | if (!i) | ||
500 | return ERR_PTR(-ENOMEM); | ||
501 | if (!(i->i_state & I_NEW)) | ||
502 | return i; | ||
503 | |||
504 | i->i_mode = 0; | ||
505 | |||
506 | /* Loop for finding the real hard link */ | ||
507 | for(;;) { | ||
508 | if (romfs_copyfrom(i, &ri, ino, ROMFH_SIZE) <= 0) { | ||
509 | printk(KERN_ERR "romfs: read error for inode 0x%lx\n", | ||
510 | ino); | ||
511 | iget_failed(i); | ||
512 | return ERR_PTR(-EIO); | ||
513 | } | ||
514 | /* XXX: do romfs_checksum here too (with name) */ | ||
515 | |||
516 | nextfh = be32_to_cpu(ri.next); | ||
517 | if ((nextfh & ROMFH_TYPE) != ROMFH_HRD) | ||
518 | break; | ||
519 | |||
520 | ino = be32_to_cpu(ri.spec) & ROMFH_MASK; | ||
521 | } | ||
522 | |||
523 | i->i_nlink = 1; /* Hard to decide.. */ | ||
524 | i->i_size = be32_to_cpu(ri.size); | ||
525 | i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0; | ||
526 | i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0; | ||
527 | |||
528 | /* Precalculate the data offset */ | ||
529 | ret = romfs_strnlen(i, ino + ROMFH_SIZE, ROMFS_MAXFN); | ||
530 | if (ret >= 0) | ||
531 | ino = (ROMFH_SIZE + ret + 1 + ROMFH_PAD) & ROMFH_MASK; | ||
532 | else | ||
533 | ino = 0; | ||
534 | |||
535 | ROMFS_I(i)->i_metasize = ino; | ||
536 | ROMFS_I(i)->i_dataoffset = ino+(i->i_ino&ROMFH_MASK); | ||
537 | |||
538 | /* Compute permissions */ | ||
539 | ino = romfs_modemap[nextfh & ROMFH_TYPE]; | ||
540 | /* only "normal" files have ops */ | ||
541 | switch (nextfh & ROMFH_TYPE) { | ||
542 | case 1: | ||
543 | i->i_size = ROMFS_I(i)->i_metasize; | ||
544 | i->i_op = &romfs_dir_inode_operations; | ||
545 | i->i_fop = &romfs_dir_operations; | ||
546 | if (nextfh & ROMFH_EXEC) | ||
547 | ino |= S_IXUGO; | ||
548 | i->i_mode = ino; | ||
549 | break; | ||
550 | case 2: | ||
551 | i->i_fop = &generic_ro_fops; | ||
552 | i->i_data.a_ops = &romfs_aops; | ||
553 | if (nextfh & ROMFH_EXEC) | ||
554 | ino |= S_IXUGO; | ||
555 | i->i_mode = ino; | ||
556 | break; | ||
557 | case 3: | ||
558 | i->i_op = &page_symlink_inode_operations; | ||
559 | i->i_data.a_ops = &romfs_aops; | ||
560 | i->i_mode = ino | S_IRWXUGO; | ||
561 | break; | ||
562 | default: | ||
563 | /* depending on MBZ for sock/fifos */ | ||
564 | nextfh = be32_to_cpu(ri.spec); | ||
565 | init_special_inode(i, ino, | ||
566 | MKDEV(nextfh>>16,nextfh&0xffff)); | ||
567 | } | ||
568 | unlock_new_inode(i); | ||
569 | return i; | ||
570 | } | ||
571 | |||
572 | static struct kmem_cache * romfs_inode_cachep; | ||
573 | |||
574 | static struct inode *romfs_alloc_inode(struct super_block *sb) | ||
575 | { | ||
576 | struct romfs_inode_info *ei; | ||
577 | ei = kmem_cache_alloc(romfs_inode_cachep, GFP_KERNEL); | ||
578 | if (!ei) | ||
579 | return NULL; | ||
580 | return &ei->vfs_inode; | ||
581 | } | ||
582 | |||
583 | static void romfs_destroy_inode(struct inode *inode) | ||
584 | { | ||
585 | kmem_cache_free(romfs_inode_cachep, ROMFS_I(inode)); | ||
586 | } | ||
587 | |||
588 | static void init_once(void *foo) | ||
589 | { | ||
590 | struct romfs_inode_info *ei = foo; | ||
591 | |||
592 | inode_init_once(&ei->vfs_inode); | ||
593 | } | ||
594 | |||
595 | static int init_inodecache(void) | ||
596 | { | ||
597 | romfs_inode_cachep = kmem_cache_create("romfs_inode_cache", | ||
598 | sizeof(struct romfs_inode_info), | ||
599 | 0, (SLAB_RECLAIM_ACCOUNT| | ||
600 | SLAB_MEM_SPREAD), | ||
601 | init_once); | ||
602 | if (romfs_inode_cachep == NULL) | ||
603 | return -ENOMEM; | ||
604 | return 0; | ||
605 | } | ||
606 | |||
607 | static void destroy_inodecache(void) | ||
608 | { | ||
609 | kmem_cache_destroy(romfs_inode_cachep); | ||
610 | } | ||
611 | |||
612 | static int romfs_remount(struct super_block *sb, int *flags, char *data) | ||
613 | { | ||
614 | *flags |= MS_RDONLY; | ||
615 | return 0; | ||
616 | } | ||
617 | |||
618 | static const struct super_operations romfs_ops = { | ||
619 | .alloc_inode = romfs_alloc_inode, | ||
620 | .destroy_inode = romfs_destroy_inode, | ||
621 | .statfs = romfs_statfs, | ||
622 | .remount_fs = romfs_remount, | ||
623 | }; | ||
624 | |||
625 | static int romfs_get_sb(struct file_system_type *fs_type, | ||
626 | int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||
627 | { | ||
628 | return get_sb_bdev(fs_type, flags, dev_name, data, romfs_fill_super, | ||
629 | mnt); | ||
630 | } | ||
631 | |||
632 | static struct file_system_type romfs_fs_type = { | ||
633 | .owner = THIS_MODULE, | ||
634 | .name = "romfs", | ||
635 | .get_sb = romfs_get_sb, | ||
636 | .kill_sb = kill_block_super, | ||
637 | .fs_flags = FS_REQUIRES_DEV, | ||
638 | }; | ||
639 | |||
640 | static int __init init_romfs_fs(void) | ||
641 | { | ||
642 | int err = init_inodecache(); | ||
643 | if (err) | ||
644 | goto out1; | ||
645 | err = register_filesystem(&romfs_fs_type); | ||
646 | if (err) | ||
647 | goto out; | ||
648 | return 0; | ||
649 | out: | ||
650 | destroy_inodecache(); | ||
651 | out1: | ||
652 | return err; | ||
653 | } | ||
654 | |||
655 | static void __exit exit_romfs_fs(void) | ||
656 | { | ||
657 | unregister_filesystem(&romfs_fs_type); | ||
658 | destroy_inodecache(); | ||
659 | } | ||
660 | |||
661 | /* Yes, works even as a module... :) */ | ||
662 | |||
663 | module_init(init_romfs_fs) | ||
664 | module_exit(exit_romfs_fs) | ||
665 | MODULE_LICENSE("GPL"); | ||
diff --git a/fs/romfs/internal.h b/fs/romfs/internal.h new file mode 100644 index 000000000000..06044a9dc62d --- /dev/null +++ b/fs/romfs/internal.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* RomFS internal definitions | ||
2 | * | ||
3 | * Copyright © 2007 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/romfs_fs.h> | ||
13 | |||
14 | struct romfs_inode_info { | ||
15 | struct inode vfs_inode; | ||
16 | unsigned long i_metasize; /* size of non-data area */ | ||
17 | unsigned long i_dataoffset; /* from the start of fs */ | ||
18 | }; | ||
19 | |||
20 | static inline size_t romfs_maxsize(struct super_block *sb) | ||
21 | { | ||
22 | return (size_t) (unsigned long) sb->s_fs_info; | ||
23 | } | ||
24 | |||
25 | static inline struct romfs_inode_info *ROMFS_I(struct inode *inode) | ||
26 | { | ||
27 | return container_of(inode, struct romfs_inode_info, vfs_inode); | ||
28 | } | ||
29 | |||
30 | /* | ||
31 | * mmap-nommu.c | ||
32 | */ | ||
33 | #if !defined(CONFIG_MMU) && defined(CONFIG_ROMFS_ON_MTD) | ||
34 | extern const struct file_operations romfs_ro_fops; | ||
35 | #else | ||
36 | #define romfs_ro_fops generic_ro_fops | ||
37 | #endif | ||
38 | |||
39 | /* | ||
40 | * storage.c | ||
41 | */ | ||
42 | extern int romfs_dev_read(struct super_block *sb, unsigned long pos, | ||
43 | void *buf, size_t buflen); | ||
44 | extern ssize_t romfs_dev_strnlen(struct super_block *sb, | ||
45 | unsigned long pos, size_t maxlen); | ||
46 | extern int romfs_dev_strncmp(struct super_block *sb, unsigned long pos, | ||
47 | const char *str, size_t size); | ||
diff --git a/fs/romfs/mmap-nommu.c b/fs/romfs/mmap-nommu.c new file mode 100644 index 000000000000..f0511e816967 --- /dev/null +++ b/fs/romfs/mmap-nommu.c | |||
@@ -0,0 +1,75 @@ | |||
1 | /* NOMMU mmap support for RomFS on MTD devices | ||
2 | * | ||
3 | * Copyright © 2007 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/mm.h> | ||
13 | #include <linux/mtd/super.h> | ||
14 | #include "internal.h" | ||
15 | |||
16 | /* | ||
17 | * try to determine where a shared mapping can be made | ||
18 | * - only supported for NOMMU at the moment (MMU can't doesn't copy private | ||
19 | * mappings) | ||
20 | * - attempts to map through to the underlying MTD device | ||
21 | */ | ||
22 | static unsigned long romfs_get_unmapped_area(struct file *file, | ||
23 | unsigned long addr, | ||
24 | unsigned long len, | ||
25 | unsigned long pgoff, | ||
26 | unsigned long flags) | ||
27 | { | ||
28 | struct inode *inode = file->f_mapping->host; | ||
29 | struct mtd_info *mtd = inode->i_sb->s_mtd; | ||
30 | unsigned long isize, offset; | ||
31 | |||
32 | if (!mtd) | ||
33 | goto cant_map_directly; | ||
34 | |||
35 | isize = i_size_read(inode); | ||
36 | offset = pgoff << PAGE_SHIFT; | ||
37 | if (offset > isize || len > isize || offset > isize - len) | ||
38 | return (unsigned long) -EINVAL; | ||
39 | |||
40 | /* we need to call down to the MTD layer to do the actual mapping */ | ||
41 | if (mtd->get_unmapped_area) { | ||
42 | if (addr != 0) | ||
43 | return (unsigned long) -EINVAL; | ||
44 | |||
45 | if (len > mtd->size || pgoff >= (mtd->size >> PAGE_SHIFT)) | ||
46 | return (unsigned long) -EINVAL; | ||
47 | |||
48 | offset += ROMFS_I(inode)->i_dataoffset; | ||
49 | if (offset > mtd->size - len) | ||
50 | return (unsigned long) -EINVAL; | ||
51 | |||
52 | return mtd->get_unmapped_area(mtd, len, offset, flags); | ||
53 | } | ||
54 | |||
55 | cant_map_directly: | ||
56 | return (unsigned long) -ENOSYS; | ||
57 | } | ||
58 | |||
59 | /* | ||
60 | * permit a R/O mapping to be made directly through onto an MTD device if | ||
61 | * possible | ||
62 | */ | ||
63 | static int romfs_mmap(struct file *file, struct vm_area_struct *vma) | ||
64 | { | ||
65 | return vma->vm_flags & (VM_SHARED | VM_MAYSHARE) ? 0 : -ENOSYS; | ||
66 | } | ||
67 | |||
68 | const struct file_operations romfs_ro_fops = { | ||
69 | .llseek = generic_file_llseek, | ||
70 | .read = do_sync_read, | ||
71 | .aio_read = generic_file_aio_read, | ||
72 | .splice_read = generic_file_splice_read, | ||
73 | .mmap = romfs_mmap, | ||
74 | .get_unmapped_area = romfs_get_unmapped_area, | ||
75 | }; | ||
diff --git a/fs/romfs/storage.c b/fs/romfs/storage.c new file mode 100644 index 000000000000..7e3e1e12a081 --- /dev/null +++ b/fs/romfs/storage.c | |||
@@ -0,0 +1,261 @@ | |||
1 | /* RomFS storage access routines | ||
2 | * | ||
3 | * Copyright © 2007 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/fs.h> | ||
13 | #include <linux/mtd/super.h> | ||
14 | #include <linux/buffer_head.h> | ||
15 | #include "internal.h" | ||
16 | |||
17 | #if !defined(CONFIG_ROMFS_ON_MTD) && !defined(CONFIG_ROMFS_ON_BLOCK) | ||
18 | #error no ROMFS backing store interface configured | ||
19 | #endif | ||
20 | |||
21 | #ifdef CONFIG_ROMFS_ON_MTD | ||
22 | #define ROMFS_MTD_READ(sb, ...) ((sb)->s_mtd->read((sb)->s_mtd, ##__VA_ARGS__)) | ||
23 | |||
24 | /* | ||
25 | * read data from an romfs image on an MTD device | ||
26 | */ | ||
27 | static int romfs_mtd_read(struct super_block *sb, unsigned long pos, | ||
28 | void *buf, size_t buflen) | ||
29 | { | ||
30 | size_t rlen; | ||
31 | int ret; | ||
32 | |||
33 | ret = ROMFS_MTD_READ(sb, pos, buflen, &rlen, buf); | ||
34 | return (ret < 0 || rlen != buflen) ? -EIO : 0; | ||
35 | } | ||
36 | |||
37 | /* | ||
38 | * determine the length of a string in a romfs image on an MTD device | ||
39 | */ | ||
40 | static ssize_t romfs_mtd_strnlen(struct super_block *sb, | ||
41 | unsigned long pos, size_t maxlen) | ||
42 | { | ||
43 | ssize_t n = 0; | ||
44 | size_t segment; | ||
45 | u_char buf[16], *p; | ||
46 | size_t len; | ||
47 | int ret; | ||
48 | |||
49 | /* scan the string up to 16 bytes at a time */ | ||
50 | while (maxlen > 0) { | ||
51 | segment = min_t(size_t, maxlen, 16); | ||
52 | ret = ROMFS_MTD_READ(sb, pos, segment, &len, buf); | ||
53 | if (ret < 0) | ||
54 | return ret; | ||
55 | p = memchr(buf, 0, len); | ||
56 | if (p) | ||
57 | return n + (p - buf); | ||
58 | maxlen -= len; | ||
59 | pos += len; | ||
60 | n += len; | ||
61 | } | ||
62 | |||
63 | return n; | ||
64 | } | ||
65 | |||
66 | /* | ||
67 | * compare a string to one in a romfs image on MTD | ||
68 | * - return 1 if matched, 0 if differ, -ve if error | ||
69 | */ | ||
70 | static int romfs_mtd_strncmp(struct super_block *sb, unsigned long pos, | ||
71 | const char *str, size_t size) | ||
72 | { | ||
73 | u_char buf[16]; | ||
74 | size_t len, segment; | ||
75 | int ret; | ||
76 | |||
77 | /* scan the string up to 16 bytes at a time */ | ||
78 | while (size > 0) { | ||
79 | segment = min_t(size_t, size, 16); | ||
80 | ret = ROMFS_MTD_READ(sb, pos, segment, &len, buf); | ||
81 | if (ret < 0) | ||
82 | return ret; | ||
83 | if (memcmp(buf, str, len) != 0) | ||
84 | return 0; | ||
85 | size -= len; | ||
86 | pos += len; | ||
87 | str += len; | ||
88 | } | ||
89 | |||
90 | return 1; | ||
91 | } | ||
92 | #endif /* CONFIG_ROMFS_ON_MTD */ | ||
93 | |||
94 | #ifdef CONFIG_ROMFS_ON_BLOCK | ||
95 | /* | ||
96 | * read data from an romfs image on a block device | ||
97 | */ | ||
98 | static int romfs_blk_read(struct super_block *sb, unsigned long pos, | ||
99 | void *buf, size_t buflen) | ||
100 | { | ||
101 | struct buffer_head *bh; | ||
102 | unsigned long offset; | ||
103 | size_t segment; | ||
104 | |||
105 | /* copy the string up to blocksize bytes at a time */ | ||
106 | while (buflen > 0) { | ||
107 | offset = pos & (ROMBSIZE - 1); | ||
108 | segment = min_t(size_t, buflen, ROMBSIZE - offset); | ||
109 | bh = sb_bread(sb, pos >> ROMBSBITS); | ||
110 | if (!bh) | ||
111 | return -EIO; | ||
112 | memcpy(buf, bh->b_data + offset, segment); | ||
113 | brelse(bh); | ||
114 | buflen -= segment; | ||
115 | pos += segment; | ||
116 | } | ||
117 | |||
118 | return 0; | ||
119 | } | ||
120 | |||
121 | /* | ||
122 | * determine the length of a string in romfs on a block device | ||
123 | */ | ||
124 | static ssize_t romfs_blk_strnlen(struct super_block *sb, | ||
125 | unsigned long pos, size_t limit) | ||
126 | { | ||
127 | struct buffer_head *bh; | ||
128 | unsigned long offset; | ||
129 | ssize_t n = 0; | ||
130 | size_t segment; | ||
131 | u_char *buf, *p; | ||
132 | |||
133 | /* scan the string up to blocksize bytes at a time */ | ||
134 | while (limit > 0) { | ||
135 | offset = pos & (ROMBSIZE - 1); | ||
136 | segment = min_t(size_t, limit, ROMBSIZE - offset); | ||
137 | bh = sb_bread(sb, pos >> ROMBSBITS); | ||
138 | if (!bh) | ||
139 | return -EIO; | ||
140 | buf = bh->b_data + offset; | ||
141 | p = memchr(buf, 0, segment); | ||
142 | brelse(bh); | ||
143 | if (p) | ||
144 | return n + (p - buf); | ||
145 | limit -= segment; | ||
146 | pos += segment; | ||
147 | n += segment; | ||
148 | } | ||
149 | |||
150 | return n; | ||
151 | } | ||
152 | |||
153 | /* | ||
154 | * compare a string to one in a romfs image on a block device | ||
155 | * - return 1 if matched, 0 if differ, -ve if error | ||
156 | */ | ||
157 | static int romfs_blk_strncmp(struct super_block *sb, unsigned long pos, | ||
158 | const char *str, size_t size) | ||
159 | { | ||
160 | struct buffer_head *bh; | ||
161 | unsigned long offset; | ||
162 | size_t segment; | ||
163 | bool x; | ||
164 | |||
165 | /* scan the string up to 16 bytes at a time */ | ||
166 | while (size > 0) { | ||
167 | offset = pos & (ROMBSIZE - 1); | ||
168 | segment = min_t(size_t, size, ROMBSIZE - offset); | ||
169 | bh = sb_bread(sb, pos >> ROMBSBITS); | ||
170 | if (!bh) | ||
171 | return -EIO; | ||
172 | x = (memcmp(bh->b_data + offset, str, segment) != 0); | ||
173 | brelse(bh); | ||
174 | if (x) | ||
175 | return 0; | ||
176 | size -= segment; | ||
177 | pos += segment; | ||
178 | str += segment; | ||
179 | } | ||
180 | |||
181 | return 1; | ||
182 | } | ||
183 | #endif /* CONFIG_ROMFS_ON_BLOCK */ | ||
184 | |||
185 | /* | ||
186 | * read data from the romfs image | ||
187 | */ | ||
188 | int romfs_dev_read(struct super_block *sb, unsigned long pos, | ||
189 | void *buf, size_t buflen) | ||
190 | { | ||
191 | size_t limit; | ||
192 | |||
193 | limit = romfs_maxsize(sb); | ||
194 | if (pos >= limit) | ||
195 | return -EIO; | ||
196 | if (buflen > limit - pos) | ||
197 | buflen = limit - pos; | ||
198 | |||
199 | #ifdef CONFIG_ROMFS_ON_MTD | ||
200 | if (sb->s_mtd) | ||
201 | return romfs_mtd_read(sb, pos, buf, buflen); | ||
202 | #endif | ||
203 | #ifdef CONFIG_ROMFS_ON_BLOCK | ||
204 | if (sb->s_bdev) | ||
205 | return romfs_blk_read(sb, pos, buf, buflen); | ||
206 | #endif | ||
207 | return -EIO; | ||
208 | } | ||
209 | |||
210 | /* | ||
211 | * determine the length of a string in romfs | ||
212 | */ | ||
213 | ssize_t romfs_dev_strnlen(struct super_block *sb, | ||
214 | unsigned long pos, size_t maxlen) | ||
215 | { | ||
216 | size_t limit; | ||
217 | |||
218 | limit = romfs_maxsize(sb); | ||
219 | if (pos >= limit) | ||
220 | return -EIO; | ||
221 | if (maxlen > limit - pos) | ||
222 | maxlen = limit - pos; | ||
223 | |||
224 | #ifdef CONFIG_ROMFS_ON_MTD | ||
225 | if (sb->s_mtd) | ||
226 | return romfs_mtd_strnlen(sb, pos, limit); | ||
227 | #endif | ||
228 | #ifdef CONFIG_ROMFS_ON_BLOCK | ||
229 | if (sb->s_bdev) | ||
230 | return romfs_blk_strnlen(sb, pos, limit); | ||
231 | #endif | ||
232 | return -EIO; | ||
233 | } | ||
234 | |||
235 | /* | ||
236 | * compare a string to one in romfs | ||
237 | * - return 1 if matched, 0 if differ, -ve if error | ||
238 | */ | ||
239 | int romfs_dev_strncmp(struct super_block *sb, unsigned long pos, | ||
240 | const char *str, size_t size) | ||
241 | { | ||
242 | size_t limit; | ||
243 | |||
244 | limit = romfs_maxsize(sb); | ||
245 | if (pos >= limit) | ||
246 | return -EIO; | ||
247 | if (size > ROMFS_MAXFN) | ||
248 | return -ENAMETOOLONG; | ||
249 | if (size > limit - pos) | ||
250 | return -EIO; | ||
251 | |||
252 | #ifdef CONFIG_ROMFS_ON_MTD | ||
253 | if (sb->s_mtd) | ||
254 | return romfs_mtd_strncmp(sb, pos, str, size); | ||
255 | #endif | ||
256 | #ifdef CONFIG_ROMFS_ON_BLOCK | ||
257 | if (sb->s_bdev) | ||
258 | return romfs_blk_strncmp(sb, pos, str, size); | ||
259 | #endif | ||
260 | return -EIO; | ||
261 | } | ||
diff --git a/fs/romfs/super.c b/fs/romfs/super.c new file mode 100644 index 000000000000..1e548a4975ba --- /dev/null +++ b/fs/romfs/super.c | |||
@@ -0,0 +1,648 @@ | |||
1 | /* Block- or MTD-based romfs | ||
2 | * | ||
3 | * Copyright © 2007 Red Hat, Inc. All Rights Reserved. | ||
4 | * Written by David Howells (dhowells@redhat.com) | ||
5 | * | ||
6 | * Derived from: ROMFS file system, Linux implementation | ||
7 | * | ||
8 | * Copyright © 1997-1999 Janos Farkas <chexum@shadow.banki.hu> | ||
9 | * | ||
10 | * Using parts of the minix filesystem | ||
11 | * Copyright © 1991, 1992 Linus Torvalds | ||
12 | * | ||
13 | * and parts of the affs filesystem additionally | ||
14 | * Copyright © 1993 Ray Burr | ||
15 | * Copyright © 1996 Hans-Joachim Widmaier | ||
16 | * | ||
17 | * Changes | ||
18 | * Changed for 2.1.19 modules | ||
19 | * Jan 1997 Initial release | ||
20 | * Jun 1997 2.1.43+ changes | ||
21 | * Proper page locking in readpage | ||
22 | * Changed to work with 2.1.45+ fs | ||
23 | * Jul 1997 Fixed follow_link | ||
24 | * 2.1.47 | ||
25 | * lookup shouldn't return -ENOENT | ||
26 | * from Horst von Brand: | ||
27 | * fail on wrong checksum | ||
28 | * double unlock_super was possible | ||
29 | * correct namelen for statfs | ||
30 | * spotted by Bill Hawes: | ||
31 | * readlink shouldn't iput() | ||
32 | * Jun 1998 2.1.106 from Avery Pennarun: glibc scandir() | ||
33 | * exposed a problem in readdir | ||
34 | * 2.1.107 code-freeze spellchecker run | ||
35 | * Aug 1998 2.1.118+ VFS changes | ||
36 | * Sep 1998 2.1.122 another VFS change (follow_link) | ||
37 | * Apr 1999 2.2.7 no more EBADF checking in | ||
38 | * lookup/readdir, use ERR_PTR | ||
39 | * Jun 1999 2.3.6 d_alloc_root use changed | ||
40 | * 2.3.9 clean up usage of ENOENT/negative | ||
41 | * dentries in lookup | ||
42 | * clean up page flags setting | ||
43 | * (error, uptodate, locking) in | ||
44 | * in readpage | ||
45 | * use init_special_inode for | ||
46 | * fifos/sockets (and streamline) in | ||
47 | * read_inode, fix _ops table order | ||
48 | * Aug 1999 2.3.16 __initfunc() => __init change | ||
49 | * Oct 1999 2.3.24 page->owner hack obsoleted | ||
50 | * Nov 1999 2.3.27 2.3.25+ page->offset => index change | ||
51 | * | ||
52 | * | ||
53 | * This program is free software; you can redistribute it and/or | ||
54 | * modify it under the terms of the GNU General Public Licence | ||
55 | * as published by the Free Software Foundation; either version | ||
56 | * 2 of the Licence, or (at your option) any later version. | ||
57 | */ | ||
58 | |||
59 | #include <linux/module.h> | ||
60 | #include <linux/string.h> | ||
61 | #include <linux/fs.h> | ||
62 | #include <linux/time.h> | ||
63 | #include <linux/slab.h> | ||
64 | #include <linux/init.h> | ||
65 | #include <linux/blkdev.h> | ||
66 | #include <linux/parser.h> | ||
67 | #include <linux/mount.h> | ||
68 | #include <linux/namei.h> | ||
69 | #include <linux/statfs.h> | ||
70 | #include <linux/mtd/super.h> | ||
71 | #include <linux/ctype.h> | ||
72 | #include <linux/highmem.h> | ||
73 | #include <linux/pagemap.h> | ||
74 | #include <linux/uaccess.h> | ||
75 | #include "internal.h" | ||
76 | |||
77 | static struct kmem_cache *romfs_inode_cachep; | ||
78 | |||
79 | static const umode_t romfs_modemap[8] = { | ||
80 | 0, /* hard link */ | ||
81 | S_IFDIR | 0644, /* directory */ | ||
82 | S_IFREG | 0644, /* regular file */ | ||
83 | S_IFLNK | 0777, /* symlink */ | ||
84 | S_IFBLK | 0600, /* blockdev */ | ||
85 | S_IFCHR | 0600, /* chardev */ | ||
86 | S_IFSOCK | 0644, /* socket */ | ||
87 | S_IFIFO | 0644 /* FIFO */ | ||
88 | }; | ||
89 | |||
90 | static const unsigned char romfs_dtype_table[] = { | ||
91 | DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_SOCK, DT_FIFO | ||
92 | }; | ||
93 | |||
94 | static struct inode *romfs_iget(struct super_block *sb, unsigned long pos); | ||
95 | |||
96 | /* | ||
97 | * read a page worth of data from the image | ||
98 | */ | ||
99 | static int romfs_readpage(struct file *file, struct page *page) | ||
100 | { | ||
101 | struct inode *inode = page->mapping->host; | ||
102 | loff_t offset, size; | ||
103 | unsigned long fillsize, pos; | ||
104 | void *buf; | ||
105 | int ret; | ||
106 | |||
107 | buf = kmap(page); | ||
108 | if (!buf) | ||
109 | return -ENOMEM; | ||
110 | |||
111 | /* 32 bit warning -- but not for us :) */ | ||
112 | offset = page_offset(page); | ||
113 | size = i_size_read(inode); | ||
114 | fillsize = 0; | ||
115 | ret = 0; | ||
116 | if (offset < size) { | ||
117 | size -= offset; | ||
118 | fillsize = size > PAGE_SIZE ? PAGE_SIZE : size; | ||
119 | |||
120 | pos = ROMFS_I(inode)->i_dataoffset + offset; | ||
121 | |||
122 | ret = romfs_dev_read(inode->i_sb, pos, buf, fillsize); | ||
123 | if (ret < 0) { | ||
124 | SetPageError(page); | ||
125 | fillsize = 0; | ||
126 | ret = -EIO; | ||
127 | } | ||
128 | } | ||
129 | |||
130 | if (fillsize < PAGE_SIZE) | ||
131 | memset(buf + fillsize, 0, PAGE_SIZE - fillsize); | ||
132 | if (ret == 0) | ||
133 | SetPageUptodate(page); | ||
134 | |||
135 | flush_dcache_page(page); | ||
136 | kunmap(page); | ||
137 | unlock_page(page); | ||
138 | return ret; | ||
139 | } | ||
140 | |||
141 | static const struct address_space_operations romfs_aops = { | ||
142 | .readpage = romfs_readpage | ||
143 | }; | ||
144 | |||
145 | /* | ||
146 | * read the entries from a directory | ||
147 | */ | ||
148 | static int romfs_readdir(struct file *filp, void *dirent, filldir_t filldir) | ||
149 | { | ||
150 | struct inode *i = filp->f_dentry->d_inode; | ||
151 | struct romfs_inode ri; | ||
152 | unsigned long offset, maxoff; | ||
153 | int j, ino, nextfh; | ||
154 | int stored = 0; | ||
155 | char fsname[ROMFS_MAXFN]; /* XXX dynamic? */ | ||
156 | int ret; | ||
157 | |||
158 | maxoff = romfs_maxsize(i->i_sb); | ||
159 | |||
160 | offset = filp->f_pos; | ||
161 | if (!offset) { | ||
162 | offset = i->i_ino & ROMFH_MASK; | ||
163 | ret = romfs_dev_read(i->i_sb, offset, &ri, ROMFH_SIZE); | ||
164 | if (ret < 0) | ||
165 | goto out; | ||
166 | offset = be32_to_cpu(ri.spec) & ROMFH_MASK; | ||
167 | } | ||
168 | |||
169 | /* Not really failsafe, but we are read-only... */ | ||
170 | for (;;) { | ||
171 | if (!offset || offset >= maxoff) { | ||
172 | offset = maxoff; | ||
173 | filp->f_pos = offset; | ||
174 | goto out; | ||
175 | } | ||
176 | filp->f_pos = offset; | ||
177 | |||
178 | /* Fetch inode info */ | ||
179 | ret = romfs_dev_read(i->i_sb, offset, &ri, ROMFH_SIZE); | ||
180 | if (ret < 0) | ||
181 | goto out; | ||
182 | |||
183 | j = romfs_dev_strnlen(i->i_sb, offset + ROMFH_SIZE, | ||
184 | sizeof(fsname) - 1); | ||
185 | if (j < 0) | ||
186 | goto out; | ||
187 | |||
188 | ret = romfs_dev_read(i->i_sb, offset + ROMFH_SIZE, fsname, j); | ||
189 | if (ret < 0) | ||
190 | goto out; | ||
191 | fsname[j] = '\0'; | ||
192 | |||
193 | ino = offset; | ||
194 | nextfh = be32_to_cpu(ri.next); | ||
195 | if ((nextfh & ROMFH_TYPE) == ROMFH_HRD) | ||
196 | ino = be32_to_cpu(ri.spec); | ||
197 | if (filldir(dirent, fsname, j, offset, ino, | ||
198 | romfs_dtype_table[nextfh & ROMFH_TYPE]) < 0) | ||
199 | goto out; | ||
200 | |||
201 | stored++; | ||
202 | offset = nextfh & ROMFH_MASK; | ||
203 | } | ||
204 | |||
205 | out: | ||
206 | return stored; | ||
207 | } | ||
208 | |||
209 | /* | ||
210 | * look up an entry in a directory | ||
211 | */ | ||
212 | static struct dentry *romfs_lookup(struct inode *dir, struct dentry *dentry, | ||
213 | struct nameidata *nd) | ||
214 | { | ||
215 | unsigned long offset, maxoff; | ||
216 | struct inode *inode; | ||
217 | struct romfs_inode ri; | ||
218 | const char *name; /* got from dentry */ | ||
219 | int len, ret; | ||
220 | |||
221 | offset = dir->i_ino & ROMFH_MASK; | ||
222 | ret = romfs_dev_read(dir->i_sb, offset, &ri, ROMFH_SIZE); | ||
223 | if (ret < 0) | ||
224 | goto error; | ||
225 | |||
226 | /* search all the file entries in the list starting from the one | ||
227 | * pointed to by the directory's special data */ | ||
228 | maxoff = romfs_maxsize(dir->i_sb); | ||
229 | offset = be32_to_cpu(ri.spec) & ROMFH_MASK; | ||
230 | |||
231 | name = dentry->d_name.name; | ||
232 | len = dentry->d_name.len; | ||
233 | |||
234 | for (;;) { | ||
235 | if (!offset || offset >= maxoff) | ||
236 | goto out0; | ||
237 | |||
238 | ret = romfs_dev_read(dir->i_sb, offset, &ri, sizeof(ri)); | ||
239 | if (ret < 0) | ||
240 | goto error; | ||
241 | |||
242 | /* try to match the first 16 bytes of name */ | ||
243 | ret = romfs_dev_strncmp(dir->i_sb, offset + ROMFH_SIZE, name, | ||
244 | len); | ||
245 | if (ret < 0) | ||
246 | goto error; | ||
247 | if (ret == 1) | ||
248 | break; | ||
249 | |||
250 | /* next entry */ | ||
251 | offset = be32_to_cpu(ri.next) & ROMFH_MASK; | ||
252 | } | ||
253 | |||
254 | /* Hard link handling */ | ||
255 | if ((be32_to_cpu(ri.next) & ROMFH_TYPE) == ROMFH_HRD) | ||
256 | offset = be32_to_cpu(ri.spec) & ROMFH_MASK; | ||
257 | |||
258 | inode = romfs_iget(dir->i_sb, offset); | ||
259 | if (IS_ERR(inode)) { | ||
260 | ret = PTR_ERR(inode); | ||
261 | goto error; | ||
262 | } | ||
263 | goto outi; | ||
264 | |||
265 | /* | ||
266 | * it's a bit funky, _lookup needs to return an error code | ||
267 | * (negative) or a NULL, both as a dentry. ENOENT should not | ||
268 | * be returned, instead we need to create a negative dentry by | ||
269 | * d_add(dentry, NULL); and return 0 as no error. | ||
270 | * (Although as I see, it only matters on writable file | ||
271 | * systems). | ||
272 | */ | ||
273 | out0: | ||
274 | inode = NULL; | ||
275 | outi: | ||
276 | d_add(dentry, inode); | ||
277 | ret = 0; | ||
278 | error: | ||
279 | return ERR_PTR(ret); | ||
280 | } | ||
281 | |||
282 | static const struct file_operations romfs_dir_operations = { | ||
283 | .read = generic_read_dir, | ||
284 | .readdir = romfs_readdir, | ||
285 | }; | ||
286 | |||
287 | static struct inode_operations romfs_dir_inode_operations = { | ||
288 | .lookup = romfs_lookup, | ||
289 | }; | ||
290 | |||
291 | /* | ||
292 | * get a romfs inode based on its position in the image (which doubles as the | ||
293 | * inode number) | ||
294 | */ | ||
295 | static struct inode *romfs_iget(struct super_block *sb, unsigned long pos) | ||
296 | { | ||
297 | struct romfs_inode_info *inode; | ||
298 | struct romfs_inode ri; | ||
299 | struct inode *i; | ||
300 | unsigned long nlen; | ||
301 | unsigned nextfh, ret; | ||
302 | umode_t mode; | ||
303 | |||
304 | /* we might have to traverse a chain of "hard link" file entries to get | ||
305 | * to the actual file */ | ||
306 | for (;;) { | ||
307 | ret = romfs_dev_read(sb, pos, &ri, sizeof(ri)); | ||
308 | if (ret < 0) | ||
309 | goto error; | ||
310 | |||
311 | /* XXX: do romfs_checksum here too (with name) */ | ||
312 | |||
313 | nextfh = be32_to_cpu(ri.next); | ||
314 | if ((nextfh & ROMFH_TYPE) != ROMFH_HRD) | ||
315 | break; | ||
316 | |||
317 | pos = be32_to_cpu(ri.spec) & ROMFH_MASK; | ||
318 | } | ||
319 | |||
320 | /* determine the length of the filename */ | ||
321 | nlen = romfs_dev_strnlen(sb, pos + ROMFH_SIZE, ROMFS_MAXFN); | ||
322 | if (IS_ERR_VALUE(nlen)) | ||
323 | goto eio; | ||
324 | |||
325 | /* get an inode for this image position */ | ||
326 | i = iget_locked(sb, pos); | ||
327 | if (!i) | ||
328 | return ERR_PTR(-ENOMEM); | ||
329 | |||
330 | if (!(i->i_state & I_NEW)) | ||
331 | return i; | ||
332 | |||
333 | /* precalculate the data offset */ | ||
334 | inode = ROMFS_I(i); | ||
335 | inode->i_metasize = (ROMFH_SIZE + nlen + 1 + ROMFH_PAD) & ROMFH_MASK; | ||
336 | inode->i_dataoffset = pos + inode->i_metasize; | ||
337 | |||
338 | i->i_nlink = 1; /* Hard to decide.. */ | ||
339 | i->i_size = be32_to_cpu(ri.size); | ||
340 | i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0; | ||
341 | i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0; | ||
342 | |||
343 | /* set up mode and ops */ | ||
344 | mode = romfs_modemap[nextfh & ROMFH_TYPE]; | ||
345 | |||
346 | switch (nextfh & ROMFH_TYPE) { | ||
347 | case ROMFH_DIR: | ||
348 | i->i_size = ROMFS_I(i)->i_metasize; | ||
349 | i->i_op = &romfs_dir_inode_operations; | ||
350 | i->i_fop = &romfs_dir_operations; | ||
351 | if (nextfh & ROMFH_EXEC) | ||
352 | mode |= S_IXUGO; | ||
353 | break; | ||
354 | case ROMFH_REG: | ||
355 | i->i_fop = &romfs_ro_fops; | ||
356 | i->i_data.a_ops = &romfs_aops; | ||
357 | if (i->i_sb->s_mtd) | ||
358 | i->i_data.backing_dev_info = | ||
359 | i->i_sb->s_mtd->backing_dev_info; | ||
360 | if (nextfh & ROMFH_EXEC) | ||
361 | mode |= S_IXUGO; | ||
362 | break; | ||
363 | case ROMFH_SYM: | ||
364 | i->i_op = &page_symlink_inode_operations; | ||
365 | i->i_data.a_ops = &romfs_aops; | ||
366 | mode |= S_IRWXUGO; | ||
367 | break; | ||
368 | default: | ||
369 | /* depending on MBZ for sock/fifos */ | ||
370 | nextfh = be32_to_cpu(ri.spec); | ||
371 | init_special_inode(i, mode, MKDEV(nextfh >> 16, | ||
372 | nextfh & 0xffff)); | ||
373 | break; | ||
374 | } | ||
375 | |||
376 | i->i_mode = mode; | ||
377 | |||
378 | unlock_new_inode(i); | ||
379 | return i; | ||
380 | |||
381 | eio: | ||
382 | ret = -EIO; | ||
383 | error: | ||
384 | printk(KERN_ERR "ROMFS: read error for inode 0x%lx\n", pos); | ||
385 | return ERR_PTR(ret); | ||
386 | } | ||
387 | |||
388 | /* | ||
389 | * allocate a new inode | ||
390 | */ | ||
391 | static struct inode *romfs_alloc_inode(struct super_block *sb) | ||
392 | { | ||
393 | struct romfs_inode_info *inode; | ||
394 | inode = kmem_cache_alloc(romfs_inode_cachep, GFP_KERNEL); | ||
395 | return inode ? &inode->vfs_inode : NULL; | ||
396 | } | ||
397 | |||
398 | /* | ||
399 | * return a spent inode to the slab cache | ||
400 | */ | ||
401 | static void romfs_destroy_inode(struct inode *inode) | ||
402 | { | ||
403 | kmem_cache_free(romfs_inode_cachep, ROMFS_I(inode)); | ||
404 | } | ||
405 | |||
406 | /* | ||
407 | * get filesystem statistics | ||
408 | */ | ||
409 | static int romfs_statfs(struct dentry *dentry, struct kstatfs *buf) | ||
410 | { | ||
411 | buf->f_type = ROMFS_MAGIC; | ||
412 | buf->f_namelen = ROMFS_MAXFN; | ||
413 | buf->f_bsize = ROMBSIZE; | ||
414 | buf->f_bfree = buf->f_bavail = buf->f_ffree; | ||
415 | buf->f_blocks = | ||
416 | (romfs_maxsize(dentry->d_sb) + ROMBSIZE - 1) >> ROMBSBITS; | ||
417 | return 0; | ||
418 | } | ||
419 | |||
420 | /* | ||
421 | * remounting must involve read-only | ||
422 | */ | ||
423 | static int romfs_remount(struct super_block *sb, int *flags, char *data) | ||
424 | { | ||
425 | *flags |= MS_RDONLY; | ||
426 | return 0; | ||
427 | } | ||
428 | |||
429 | static const struct super_operations romfs_super_ops = { | ||
430 | .alloc_inode = romfs_alloc_inode, | ||
431 | .destroy_inode = romfs_destroy_inode, | ||
432 | .statfs = romfs_statfs, | ||
433 | .remount_fs = romfs_remount, | ||
434 | }; | ||
435 | |||
436 | /* | ||
437 | * checksum check on part of a romfs filesystem | ||
438 | */ | ||
439 | static __u32 romfs_checksum(const void *data, int size) | ||
440 | { | ||
441 | const __be32 *ptr = data; | ||
442 | __u32 sum; | ||
443 | |||
444 | sum = 0; | ||
445 | size >>= 2; | ||
446 | while (size > 0) { | ||
447 | sum += be32_to_cpu(*ptr++); | ||
448 | size--; | ||
449 | } | ||
450 | return sum; | ||
451 | } | ||
452 | |||
453 | /* | ||
454 | * fill in the superblock | ||
455 | */ | ||
456 | static int romfs_fill_super(struct super_block *sb, void *data, int silent) | ||
457 | { | ||
458 | struct romfs_super_block *rsb; | ||
459 | struct inode *root; | ||
460 | unsigned long pos, img_size; | ||
461 | const char *storage; | ||
462 | size_t len; | ||
463 | int ret; | ||
464 | |||
465 | #ifdef CONFIG_BLOCK | ||
466 | if (!sb->s_mtd) { | ||
467 | sb_set_blocksize(sb, ROMBSIZE); | ||
468 | } else { | ||
469 | sb->s_blocksize = ROMBSIZE; | ||
470 | sb->s_blocksize_bits = blksize_bits(ROMBSIZE); | ||
471 | } | ||
472 | #endif | ||
473 | |||
474 | sb->s_maxbytes = 0xFFFFFFFF; | ||
475 | sb->s_magic = ROMFS_MAGIC; | ||
476 | sb->s_flags |= MS_RDONLY | MS_NOATIME; | ||
477 | sb->s_op = &romfs_super_ops; | ||
478 | |||
479 | /* read the image superblock and check it */ | ||
480 | rsb = kmalloc(512, GFP_KERNEL); | ||
481 | if (!rsb) | ||
482 | return -ENOMEM; | ||
483 | |||
484 | sb->s_fs_info = (void *) 512; | ||
485 | ret = romfs_dev_read(sb, 0, rsb, 512); | ||
486 | if (ret < 0) | ||
487 | goto error_rsb; | ||
488 | |||
489 | img_size = be32_to_cpu(rsb->size); | ||
490 | |||
491 | if (sb->s_mtd && img_size > sb->s_mtd->size) | ||
492 | goto error_rsb_inval; | ||
493 | |||
494 | sb->s_fs_info = (void *) img_size; | ||
495 | |||
496 | if (rsb->word0 != ROMSB_WORD0 || rsb->word1 != ROMSB_WORD1 || | ||
497 | img_size < ROMFH_SIZE) { | ||
498 | if (!silent) | ||
499 | printk(KERN_WARNING "VFS:" | ||
500 | " Can't find a romfs filesystem on dev %s.\n", | ||
501 | sb->s_id); | ||
502 | goto error_rsb_inval; | ||
503 | } | ||
504 | |||
505 | if (romfs_checksum(rsb, min_t(size_t, img_size, 512))) { | ||
506 | printk(KERN_ERR "ROMFS: bad initial checksum on dev %s.\n", | ||
507 | sb->s_id); | ||
508 | goto error_rsb_inval; | ||
509 | } | ||
510 | |||
511 | storage = sb->s_mtd ? "MTD" : "the block layer"; | ||
512 | |||
513 | len = strnlen(rsb->name, ROMFS_MAXFN); | ||
514 | if (!silent) | ||
515 | printk(KERN_NOTICE "ROMFS: Mounting image '%*.*s' through %s\n", | ||
516 | (unsigned) len, (unsigned) len, rsb->name, storage); | ||
517 | |||
518 | kfree(rsb); | ||
519 | rsb = NULL; | ||
520 | |||
521 | /* find the root directory */ | ||
522 | pos = (ROMFH_SIZE + len + 1 + ROMFH_PAD) & ROMFH_MASK; | ||
523 | |||
524 | root = romfs_iget(sb, pos); | ||
525 | if (!root) | ||
526 | goto error; | ||
527 | |||
528 | sb->s_root = d_alloc_root(root); | ||
529 | if (!sb->s_root) | ||
530 | goto error_i; | ||
531 | |||
532 | return 0; | ||
533 | |||
534 | error_i: | ||
535 | iput(root); | ||
536 | error: | ||
537 | return -EINVAL; | ||
538 | error_rsb_inval: | ||
539 | ret = -EINVAL; | ||
540 | error_rsb: | ||
541 | return ret; | ||
542 | } | ||
543 | |||
544 | /* | ||
545 | * get a superblock for mounting | ||
546 | */ | ||
547 | static int romfs_get_sb(struct file_system_type *fs_type, | ||
548 | int flags, const char *dev_name, | ||
549 | void *data, struct vfsmount *mnt) | ||
550 | { | ||
551 | int ret = -EINVAL; | ||
552 | |||
553 | #ifdef CONFIG_ROMFS_ON_MTD | ||
554 | ret = get_sb_mtd(fs_type, flags, dev_name, data, romfs_fill_super, | ||
555 | mnt); | ||
556 | #endif | ||
557 | #ifdef CONFIG_ROMFS_ON_BLOCK | ||
558 | if (ret == -EINVAL) | ||
559 | ret = get_sb_bdev(fs_type, flags, dev_name, data, | ||
560 | romfs_fill_super, mnt); | ||
561 | #endif | ||
562 | return ret; | ||
563 | } | ||
564 | |||
565 | /* | ||
566 | * destroy a romfs superblock in the appropriate manner | ||
567 | */ | ||
568 | static void romfs_kill_sb(struct super_block *sb) | ||
569 | { | ||
570 | #ifdef CONFIG_ROMFS_ON_MTD | ||
571 | if (sb->s_mtd) { | ||
572 | kill_mtd_super(sb); | ||
573 | return; | ||
574 | } | ||
575 | #endif | ||
576 | #ifdef CONFIG_ROMFS_ON_BLOCK | ||
577 | if (sb->s_bdev) { | ||
578 | kill_block_super(sb); | ||
579 | return; | ||
580 | } | ||
581 | #endif | ||
582 | } | ||
583 | |||
584 | static struct file_system_type romfs_fs_type = { | ||
585 | .owner = THIS_MODULE, | ||
586 | .name = "romfs", | ||
587 | .get_sb = romfs_get_sb, | ||
588 | .kill_sb = romfs_kill_sb, | ||
589 | .fs_flags = FS_REQUIRES_DEV, | ||
590 | }; | ||
591 | |||
592 | /* | ||
593 | * inode storage initialiser | ||
594 | */ | ||
595 | static void romfs_i_init_once(void *_inode) | ||
596 | { | ||
597 | struct romfs_inode_info *inode = _inode; | ||
598 | |||
599 | inode_init_once(&inode->vfs_inode); | ||
600 | } | ||
601 | |||
602 | /* | ||
603 | * romfs module initialisation | ||
604 | */ | ||
605 | static int __init init_romfs_fs(void) | ||
606 | { | ||
607 | int ret; | ||
608 | |||
609 | printk(KERN_INFO "ROMFS MTD (C) 2007 Red Hat, Inc.\n"); | ||
610 | |||
611 | romfs_inode_cachep = | ||
612 | kmem_cache_create("romfs_i", | ||
613 | sizeof(struct romfs_inode_info), 0, | ||
614 | SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, | ||
615 | romfs_i_init_once); | ||
616 | |||
617 | if (!romfs_inode_cachep) { | ||
618 | printk(KERN_ERR | ||
619 | "ROMFS error: Failed to initialise inode cache\n"); | ||
620 | return -ENOMEM; | ||
621 | } | ||
622 | ret = register_filesystem(&romfs_fs_type); | ||
623 | if (ret) { | ||
624 | printk(KERN_ERR "ROMFS error: Failed to register filesystem\n"); | ||
625 | goto error_register; | ||
626 | } | ||
627 | return 0; | ||
628 | |||
629 | error_register: | ||
630 | kmem_cache_destroy(romfs_inode_cachep); | ||
631 | return ret; | ||
632 | } | ||
633 | |||
634 | /* | ||
635 | * romfs module removal | ||
636 | */ | ||
637 | static void __exit exit_romfs_fs(void) | ||
638 | { | ||
639 | unregister_filesystem(&romfs_fs_type); | ||
640 | kmem_cache_destroy(romfs_inode_cachep); | ||
641 | } | ||
642 | |||
643 | module_init(init_romfs_fs); | ||
644 | module_exit(exit_romfs_fs); | ||
645 | |||
646 | MODULE_DESCRIPTION("Direct-MTD Capable RomFS"); | ||
647 | MODULE_AUTHOR("Red Hat, Inc."); | ||
648 | MODULE_LICENSE("GPL"); /* Actually dual-licensed, but it doesn't matter for */ | ||
diff --git a/fs/squashfs/export.c b/fs/squashfs/export.c index 69e971d5ddc1..2b1b8fe5e037 100644 --- a/fs/squashfs/export.c +++ b/fs/squashfs/export.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <linux/dcache.h> | 40 | #include <linux/dcache.h> |
41 | #include <linux/exportfs.h> | 41 | #include <linux/exportfs.h> |
42 | #include <linux/zlib.h> | 42 | #include <linux/zlib.h> |
43 | #include <linux/slab.h> | ||
43 | 44 | ||
44 | #include "squashfs_fs.h" | 45 | #include "squashfs_fs.h" |
45 | #include "squashfs_fs_sb.h" | 46 | #include "squashfs_fs_sb.h" |
diff --git a/fs/ubifs/budget.c b/fs/ubifs/budget.c index f393620890ee..af1914462f02 100644 --- a/fs/ubifs/budget.c +++ b/fs/ubifs/budget.c | |||
@@ -194,29 +194,26 @@ static int make_free_space(struct ubifs_info *c) | |||
194 | } | 194 | } |
195 | 195 | ||
196 | /** | 196 | /** |
197 | * ubifs_calc_min_idx_lebs - calculate amount of eraseblocks for the index. | 197 | * ubifs_calc_min_idx_lebs - calculate amount of LEBs for the index. |
198 | * @c: UBIFS file-system description object | 198 | * @c: UBIFS file-system description object |
199 | * | 199 | * |
200 | * This function calculates and returns the number of eraseblocks which should | 200 | * This function calculates and returns the number of LEBs which should be kept |
201 | * be kept for index usage. | 201 | * for index usage. |
202 | */ | 202 | */ |
203 | int ubifs_calc_min_idx_lebs(struct ubifs_info *c) | 203 | int ubifs_calc_min_idx_lebs(struct ubifs_info *c) |
204 | { | 204 | { |
205 | int idx_lebs, eff_leb_size = c->leb_size - c->max_idx_node_sz; | 205 | int idx_lebs; |
206 | long long idx_size; | 206 | long long idx_size; |
207 | 207 | ||
208 | idx_size = c->old_idx_sz + c->budg_idx_growth + c->budg_uncommitted_idx; | 208 | idx_size = c->old_idx_sz + c->budg_idx_growth + c->budg_uncommitted_idx; |
209 | |||
210 | /* And make sure we have thrice the index size of space reserved */ | 209 | /* And make sure we have thrice the index size of space reserved */ |
211 | idx_size = idx_size + (idx_size << 1); | 210 | idx_size += idx_size << 1; |
212 | |||
213 | /* | 211 | /* |
214 | * We do not maintain 'old_idx_size' as 'old_idx_lebs'/'old_idx_bytes' | 212 | * We do not maintain 'old_idx_size' as 'old_idx_lebs'/'old_idx_bytes' |
215 | * pair, nor similarly the two variables for the new index size, so we | 213 | * pair, nor similarly the two variables for the new index size, so we |
216 | * have to do this costly 64-bit division on fast-path. | 214 | * have to do this costly 64-bit division on fast-path. |
217 | */ | 215 | */ |
218 | idx_size += eff_leb_size - 1; | 216 | idx_lebs = div_u64(idx_size + c->idx_leb_size - 1, c->idx_leb_size); |
219 | idx_lebs = div_u64(idx_size, eff_leb_size); | ||
220 | /* | 217 | /* |
221 | * The index head is not available for the in-the-gaps method, so add an | 218 | * The index head is not available for the in-the-gaps method, so add an |
222 | * extra LEB to compensate. | 219 | * extra LEB to compensate. |
@@ -310,23 +307,23 @@ static int can_use_rp(struct ubifs_info *c) | |||
310 | * do_budget_space - reserve flash space for index and data growth. | 307 | * do_budget_space - reserve flash space for index and data growth. |
311 | * @c: UBIFS file-system description object | 308 | * @c: UBIFS file-system description object |
312 | * | 309 | * |
313 | * This function makes sure UBIFS has enough free eraseblocks for index growth | 310 | * This function makes sure UBIFS has enough free LEBs for index growth and |
314 | * and data. | 311 | * data. |
315 | * | 312 | * |
316 | * When budgeting index space, UBIFS reserves thrice as many LEBs as the index | 313 | * When budgeting index space, UBIFS reserves thrice as many LEBs as the index |
317 | * would take if it was consolidated and written to the flash. This guarantees | 314 | * would take if it was consolidated and written to the flash. This guarantees |
318 | * that the "in-the-gaps" commit method always succeeds and UBIFS will always | 315 | * that the "in-the-gaps" commit method always succeeds and UBIFS will always |
319 | * be able to commit dirty index. So this function basically adds amount of | 316 | * be able to commit dirty index. So this function basically adds amount of |
320 | * budgeted index space to the size of the current index, multiplies this by 3, | 317 | * budgeted index space to the size of the current index, multiplies this by 3, |
321 | * and makes sure this does not exceed the amount of free eraseblocks. | 318 | * and makes sure this does not exceed the amount of free LEBs. |
322 | * | 319 | * |
323 | * Notes about @c->min_idx_lebs and @c->lst.idx_lebs variables: | 320 | * Notes about @c->min_idx_lebs and @c->lst.idx_lebs variables: |
324 | * o @c->lst.idx_lebs is the number of LEBs the index currently uses. It might | 321 | * o @c->lst.idx_lebs is the number of LEBs the index currently uses. It might |
325 | * be large, because UBIFS does not do any index consolidation as long as | 322 | * be large, because UBIFS does not do any index consolidation as long as |
326 | * there is free space. IOW, the index may take a lot of LEBs, but the LEBs | 323 | * there is free space. IOW, the index may take a lot of LEBs, but the LEBs |
327 | * will contain a lot of dirt. | 324 | * will contain a lot of dirt. |
328 | * o @c->min_idx_lebs is the the index presumably takes. IOW, the index may be | 325 | * o @c->min_idx_lebs is the number of LEBS the index presumably takes. IOW, |
329 | * consolidated to take up to @c->min_idx_lebs LEBs. | 326 | * the index may be consolidated to take up to @c->min_idx_lebs LEBs. |
330 | * | 327 | * |
331 | * This function returns zero in case of success, and %-ENOSPC in case of | 328 | * This function returns zero in case of success, and %-ENOSPC in case of |
332 | * failure. | 329 | * failure. |
@@ -695,12 +692,12 @@ long long ubifs_reported_space(const struct ubifs_info *c, long long free) | |||
695 | * This function calculates amount of free space to report to user-space. | 692 | * This function calculates amount of free space to report to user-space. |
696 | * | 693 | * |
697 | * Because UBIFS may introduce substantial overhead (the index, node headers, | 694 | * Because UBIFS may introduce substantial overhead (the index, node headers, |
698 | * alignment, wastage at the end of eraseblocks, etc), it cannot report real | 695 | * alignment, wastage at the end of LEBs, etc), it cannot report real amount of |
699 | * amount of free flash space it has (well, because not all dirty space is | 696 | * free flash space it has (well, because not all dirty space is reclaimable, |
700 | * reclaimable, UBIFS does not actually know the real amount). If UBIFS did so, | 697 | * UBIFS does not actually know the real amount). If UBIFS did so, it would |
701 | * it would bread user expectations about what free space is. Users seem to | 698 | * bread user expectations about what free space is. Users seem to accustomed |
702 | * accustomed to assume that if the file-system reports N bytes of free space, | 699 | * to assume that if the file-system reports N bytes of free space, they would |
703 | * they would be able to fit a file of N bytes to the FS. This almost works for | 700 | * be able to fit a file of N bytes to the FS. This almost works for |
704 | * traditional file-systems, because they have way less overhead than UBIFS. | 701 | * traditional file-systems, because they have way less overhead than UBIFS. |
705 | * So, to keep users happy, UBIFS tries to take the overhead into account. | 702 | * So, to keep users happy, UBIFS tries to take the overhead into account. |
706 | */ | 703 | */ |
diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c index e975bd82f38b..ce2cd8343618 100644 --- a/fs/ubifs/debug.c +++ b/fs/ubifs/debug.c | |||
@@ -479,9 +479,9 @@ void dbg_dump_node(const struct ubifs_info *c, const void *node) | |||
479 | "bad or corrupted node)"); | 479 | "bad or corrupted node)"); |
480 | else { | 480 | else { |
481 | for (i = 0; i < nlen && dent->name[i]; i++) | 481 | for (i = 0; i < nlen && dent->name[i]; i++) |
482 | printk("%c", dent->name[i]); | 482 | printk(KERN_CONT "%c", dent->name[i]); |
483 | } | 483 | } |
484 | printk("\n"); | 484 | printk(KERN_CONT "\n"); |
485 | 485 | ||
486 | break; | 486 | break; |
487 | } | 487 | } |
@@ -1214,7 +1214,7 @@ static int dbg_check_znode(struct ubifs_info *c, struct ubifs_zbranch *zbr) | |||
1214 | 1214 | ||
1215 | /* | 1215 | /* |
1216 | * Make sure the last key in our znode is less or | 1216 | * Make sure the last key in our znode is less or |
1217 | * equivalent than the the key in zbranch which goes | 1217 | * equivalent than the key in the zbranch which goes |
1218 | * after our pointing zbranch. | 1218 | * after our pointing zbranch. |
1219 | */ | 1219 | */ |
1220 | cmp = keys_cmp(c, max, | 1220 | cmp = keys_cmp(c, max, |
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index 0ff89fe71e51..6d34dc7e33e1 100644 --- a/fs/ubifs/file.c +++ b/fs/ubifs/file.c | |||
@@ -430,6 +430,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping, | |||
430 | struct ubifs_inode *ui = ubifs_inode(inode); | 430 | struct ubifs_inode *ui = ubifs_inode(inode); |
431 | pgoff_t index = pos >> PAGE_CACHE_SHIFT; | 431 | pgoff_t index = pos >> PAGE_CACHE_SHIFT; |
432 | int uninitialized_var(err), appending = !!(pos + len > inode->i_size); | 432 | int uninitialized_var(err), appending = !!(pos + len > inode->i_size); |
433 | int skipped_read = 0; | ||
433 | struct page *page; | 434 | struct page *page; |
434 | 435 | ||
435 | ubifs_assert(ubifs_inode(inode)->ui_size == inode->i_size); | 436 | ubifs_assert(ubifs_inode(inode)->ui_size == inode->i_size); |
@@ -444,7 +445,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping, | |||
444 | 445 | ||
445 | if (!PageUptodate(page)) { | 446 | if (!PageUptodate(page)) { |
446 | /* The page is not loaded from the flash */ | 447 | /* The page is not loaded from the flash */ |
447 | if (!(pos & ~PAGE_CACHE_MASK) && len == PAGE_CACHE_SIZE) | 448 | if (!(pos & ~PAGE_CACHE_MASK) && len == PAGE_CACHE_SIZE) { |
448 | /* | 449 | /* |
449 | * We change whole page so no need to load it. But we | 450 | * We change whole page so no need to load it. But we |
450 | * have to set the @PG_checked flag to make the further | 451 | * have to set the @PG_checked flag to make the further |
@@ -453,7 +454,8 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping, | |||
453 | * the media. | 454 | * the media. |
454 | */ | 455 | */ |
455 | SetPageChecked(page); | 456 | SetPageChecked(page); |
456 | else { | 457 | skipped_read = 1; |
458 | } else { | ||
457 | err = do_readpage(page); | 459 | err = do_readpage(page); |
458 | if (err) { | 460 | if (err) { |
459 | unlock_page(page); | 461 | unlock_page(page); |
@@ -470,6 +472,14 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping, | |||
470 | if (unlikely(err)) { | 472 | if (unlikely(err)) { |
471 | ubifs_assert(err == -ENOSPC); | 473 | ubifs_assert(err == -ENOSPC); |
472 | /* | 474 | /* |
475 | * If we skipped reading the page because we were going to | ||
476 | * write all of it, then it is not up to date. | ||
477 | */ | ||
478 | if (skipped_read) { | ||
479 | ClearPageChecked(page); | ||
480 | ClearPageUptodate(page); | ||
481 | } | ||
482 | /* | ||
473 | * Budgeting failed which means it would have to force | 483 | * Budgeting failed which means it would have to force |
474 | * write-back but didn't, because we set the @fast flag in the | 484 | * write-back but didn't, because we set the @fast flag in the |
475 | * request. Write-back cannot be done now, while we have the | 485 | * request. Write-back cannot be done now, while we have the |
@@ -949,7 +959,7 @@ static int do_writepage(struct page *page, int len) | |||
949 | * whole index and correct all inode sizes, which is long an unacceptable. | 959 | * whole index and correct all inode sizes, which is long an unacceptable. |
950 | * | 960 | * |
951 | * To prevent situations like this, UBIFS writes pages back only if they are | 961 | * To prevent situations like this, UBIFS writes pages back only if they are |
952 | * within last synchronized inode size, i.e. the the size which has been | 962 | * within the last synchronized inode size, i.e. the size which has been |
953 | * written to the flash media last time. Otherwise, UBIFS forces inode | 963 | * written to the flash media last time. Otherwise, UBIFS forces inode |
954 | * write-back, thus making sure the on-flash inode contains current inode size, | 964 | * write-back, thus making sure the on-flash inode contains current inode size, |
955 | * and then keeps writing pages back. | 965 | * and then keeps writing pages back. |
diff --git a/fs/ubifs/find.c b/fs/ubifs/find.c index 717d79c97c5e..1d54383d1269 100644 --- a/fs/ubifs/find.c +++ b/fs/ubifs/find.c | |||
@@ -478,7 +478,7 @@ const struct ubifs_lprops *do_find_free_space(struct ubifs_info *c, | |||
478 | * ubifs_find_free_space - find a data LEB with free space. | 478 | * ubifs_find_free_space - find a data LEB with free space. |
479 | * @c: the UBIFS file-system description object | 479 | * @c: the UBIFS file-system description object |
480 | * @min_space: minimum amount of required free space | 480 | * @min_space: minimum amount of required free space |
481 | * @free: contains amount of free space in the LEB on exit | 481 | * @offs: contains offset of where free space starts on exit |
482 | * @squeeze: whether to try to find space in a non-empty LEB first | 482 | * @squeeze: whether to try to find space in a non-empty LEB first |
483 | * | 483 | * |
484 | * This function looks for an LEB with at least @min_space bytes of free space. | 484 | * This function looks for an LEB with at least @min_space bytes of free space. |
@@ -490,7 +490,7 @@ const struct ubifs_lprops *do_find_free_space(struct ubifs_info *c, | |||
490 | * failed to find a LEB with @min_space bytes of free space and other a negative | 490 | * failed to find a LEB with @min_space bytes of free space and other a negative |
491 | * error codes in case of failure. | 491 | * error codes in case of failure. |
492 | */ | 492 | */ |
493 | int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free, | 493 | int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *offs, |
494 | int squeeze) | 494 | int squeeze) |
495 | { | 495 | { |
496 | const struct ubifs_lprops *lprops; | 496 | const struct ubifs_lprops *lprops; |
@@ -558,10 +558,10 @@ int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free, | |||
558 | spin_unlock(&c->space_lock); | 558 | spin_unlock(&c->space_lock); |
559 | } | 559 | } |
560 | 560 | ||
561 | *free = lprops->free; | 561 | *offs = c->leb_size - lprops->free; |
562 | ubifs_release_lprops(c); | 562 | ubifs_release_lprops(c); |
563 | 563 | ||
564 | if (*free == c->leb_size) { | 564 | if (*offs == 0) { |
565 | /* | 565 | /* |
566 | * Ensure that empty LEBs have been unmapped. They may not have | 566 | * Ensure that empty LEBs have been unmapped. They may not have |
567 | * been, for example, because of an unclean unmount. Also | 567 | * been, for example, because of an unclean unmount. Also |
@@ -573,8 +573,8 @@ int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free, | |||
573 | return err; | 573 | return err; |
574 | } | 574 | } |
575 | 575 | ||
576 | dbg_find("found LEB %d, free %d", lnum, *free); | 576 | dbg_find("found LEB %d, free %d", lnum, c->leb_size - *offs); |
577 | ubifs_assert(*free >= min_space); | 577 | ubifs_assert(*offs <= c->leb_size - min_space); |
578 | return lnum; | 578 | return lnum; |
579 | 579 | ||
580 | out: | 580 | out: |
diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c index a711d33b3d3e..f0f5f15d384e 100644 --- a/fs/ubifs/gc.c +++ b/fs/ubifs/gc.c | |||
@@ -47,7 +47,7 @@ | |||
47 | * have to waste large pieces of free space at the end of LEB B, because nodes | 47 | * have to waste large pieces of free space at the end of LEB B, because nodes |
48 | * from LEB A would not fit. And the worst situation is when all nodes are of | 48 | * from LEB A would not fit. And the worst situation is when all nodes are of |
49 | * maximum size. So dark watermark is the amount of free + dirty space in LEB | 49 | * maximum size. So dark watermark is the amount of free + dirty space in LEB |
50 | * which are guaranteed to be reclaimable. If LEB has less space, the GC migh | 50 | * which are guaranteed to be reclaimable. If LEB has less space, the GC might |
51 | * be unable to reclaim it. So, LEBs with free + dirty greater than dark | 51 | * be unable to reclaim it. So, LEBs with free + dirty greater than dark |
52 | * watermark are "good" LEBs from GC's point of few. The other LEBs are not so | 52 | * watermark are "good" LEBs from GC's point of few. The other LEBs are not so |
53 | * good, and GC takes extra care when moving them. | 53 | * good, and GC takes extra care when moving them. |
@@ -57,14 +57,6 @@ | |||
57 | #include "ubifs.h" | 57 | #include "ubifs.h" |
58 | 58 | ||
59 | /* | 59 | /* |
60 | * GC tries to optimize the way it fit nodes to available space, and it sorts | ||
61 | * nodes a little. The below constants are watermarks which define "large", | ||
62 | * "medium", and "small" nodes. | ||
63 | */ | ||
64 | #define MEDIUM_NODE_WM (UBIFS_BLOCK_SIZE / 4) | ||
65 | #define SMALL_NODE_WM UBIFS_MAX_DENT_NODE_SZ | ||
66 | |||
67 | /* | ||
68 | * GC may need to move more than one LEB to make progress. The below constants | 60 | * GC may need to move more than one LEB to make progress. The below constants |
69 | * define "soft" and "hard" limits on the number of LEBs the garbage collector | 61 | * define "soft" and "hard" limits on the number of LEBs the garbage collector |
70 | * may move. | 62 | * may move. |
@@ -116,83 +108,222 @@ static int switch_gc_head(struct ubifs_info *c) | |||
116 | } | 108 | } |
117 | 109 | ||
118 | /** | 110 | /** |
119 | * joinup - bring data nodes for an inode together. | 111 | * list_sort - sort a list. |
120 | * @c: UBIFS file-system description object | 112 | * @priv: private data, passed to @cmp |
121 | * @sleb: describes scanned LEB | 113 | * @head: the list to sort |
122 | * @inum: inode number | 114 | * @cmp: the elements comparison function |
123 | * @blk: block number | ||
124 | * @data: list to which to add data nodes | ||
125 | * | 115 | * |
126 | * This function looks at the first few nodes in the scanned LEB @sleb and adds | 116 | * This function has been implemented by Mark J Roberts <mjr@znex.org>. It |
127 | * them to @data if they are data nodes from @inum and have a larger block | 117 | * implements "merge sort" which has O(nlog(n)) complexity. The list is sorted |
128 | * number than @blk. This function returns %0 on success and a negative error | 118 | * in ascending order. |
129 | * code on failure. | 119 | * |
120 | * The comparison function @cmp is supposed to return a negative value if @a is | ||
121 | * than @b, and a positive value if @a is greater than @b. If @a and @b are | ||
122 | * equivalent, then it does not matter what this function returns. | ||
130 | */ | 123 | */ |
131 | static int joinup(struct ubifs_info *c, struct ubifs_scan_leb *sleb, ino_t inum, | 124 | static void list_sort(void *priv, struct list_head *head, |
132 | unsigned int blk, struct list_head *data) | 125 | int (*cmp)(void *priv, struct list_head *a, |
126 | struct list_head *b)) | ||
133 | { | 127 | { |
134 | int err, cnt = 6, lnum = sleb->lnum, offs; | 128 | struct list_head *p, *q, *e, *list, *tail, *oldhead; |
135 | struct ubifs_scan_node *snod, *tmp; | 129 | int insize, nmerges, psize, qsize, i; |
136 | union ubifs_key *key; | 130 | |
131 | if (list_empty(head)) | ||
132 | return; | ||
133 | |||
134 | list = head->next; | ||
135 | list_del(head); | ||
136 | insize = 1; | ||
137 | for (;;) { | ||
138 | p = oldhead = list; | ||
139 | list = tail = NULL; | ||
140 | nmerges = 0; | ||
141 | |||
142 | while (p) { | ||
143 | nmerges++; | ||
144 | q = p; | ||
145 | psize = 0; | ||
146 | for (i = 0; i < insize; i++) { | ||
147 | psize++; | ||
148 | q = q->next == oldhead ? NULL : q->next; | ||
149 | if (!q) | ||
150 | break; | ||
151 | } | ||
137 | 152 | ||
138 | list_for_each_entry_safe(snod, tmp, &sleb->nodes, list) { | 153 | qsize = insize; |
139 | key = &snod->key; | 154 | while (psize > 0 || (qsize > 0 && q)) { |
140 | if (key_inum(c, key) == inum && | 155 | if (!psize) { |
141 | key_type(c, key) == UBIFS_DATA_KEY && | 156 | e = q; |
142 | key_block(c, key) > blk) { | 157 | q = q->next; |
143 | offs = snod->offs; | 158 | qsize--; |
144 | err = ubifs_tnc_has_node(c, key, 0, lnum, offs, 0); | 159 | if (q == oldhead) |
145 | if (err < 0) | 160 | q = NULL; |
146 | return err; | 161 | } else if (!qsize || !q) { |
147 | list_del(&snod->list); | 162 | e = p; |
148 | if (err) { | 163 | p = p->next; |
149 | list_add_tail(&snod->list, data); | 164 | psize--; |
150 | blk = key_block(c, key); | 165 | if (p == oldhead) |
151 | } else | 166 | p = NULL; |
152 | kfree(snod); | 167 | } else if (cmp(priv, p, q) <= 0) { |
153 | cnt = 6; | 168 | e = p; |
154 | } else if (--cnt == 0) | 169 | p = p->next; |
170 | psize--; | ||
171 | if (p == oldhead) | ||
172 | p = NULL; | ||
173 | } else { | ||
174 | e = q; | ||
175 | q = q->next; | ||
176 | qsize--; | ||
177 | if (q == oldhead) | ||
178 | q = NULL; | ||
179 | } | ||
180 | if (tail) | ||
181 | tail->next = e; | ||
182 | else | ||
183 | list = e; | ||
184 | e->prev = tail; | ||
185 | tail = e; | ||
186 | } | ||
187 | p = q; | ||
188 | } | ||
189 | |||
190 | tail->next = list; | ||
191 | list->prev = tail; | ||
192 | |||
193 | if (nmerges <= 1) | ||
155 | break; | 194 | break; |
195 | |||
196 | insize *= 2; | ||
156 | } | 197 | } |
157 | return 0; | 198 | |
199 | head->next = list; | ||
200 | head->prev = list->prev; | ||
201 | list->prev->next = head; | ||
202 | list->prev = head; | ||
158 | } | 203 | } |
159 | 204 | ||
160 | /** | 205 | /** |
161 | * move_nodes - move nodes. | 206 | * data_nodes_cmp - compare 2 data nodes. |
207 | * @priv: UBIFS file-system description object | ||
208 | * @a: first data node | ||
209 | * @a: second data node | ||
210 | * | ||
211 | * This function compares data nodes @a and @b. Returns %1 if @a has greater | ||
212 | * inode or block number, and %-1 otherwise. | ||
213 | */ | ||
214 | int data_nodes_cmp(void *priv, struct list_head *a, struct list_head *b) | ||
215 | { | ||
216 | ino_t inuma, inumb; | ||
217 | struct ubifs_info *c = priv; | ||
218 | struct ubifs_scan_node *sa, *sb; | ||
219 | |||
220 | cond_resched(); | ||
221 | sa = list_entry(a, struct ubifs_scan_node, list); | ||
222 | sb = list_entry(b, struct ubifs_scan_node, list); | ||
223 | ubifs_assert(key_type(c, &sa->key) == UBIFS_DATA_KEY); | ||
224 | ubifs_assert(key_type(c, &sb->key) == UBIFS_DATA_KEY); | ||
225 | |||
226 | inuma = key_inum(c, &sa->key); | ||
227 | inumb = key_inum(c, &sb->key); | ||
228 | |||
229 | if (inuma == inumb) { | ||
230 | unsigned int blka = key_block(c, &sa->key); | ||
231 | unsigned int blkb = key_block(c, &sb->key); | ||
232 | |||
233 | if (blka <= blkb) | ||
234 | return -1; | ||
235 | } else if (inuma <= inumb) | ||
236 | return -1; | ||
237 | |||
238 | return 1; | ||
239 | } | ||
240 | |||
241 | /* | ||
242 | * nondata_nodes_cmp - compare 2 non-data nodes. | ||
243 | * @priv: UBIFS file-system description object | ||
244 | * @a: first node | ||
245 | * @a: second node | ||
246 | * | ||
247 | * This function compares nodes @a and @b. It makes sure that inode nodes go | ||
248 | * first and sorted by length in descending order. Directory entry nodes go | ||
249 | * after inode nodes and are sorted in ascending hash valuer order. | ||
250 | */ | ||
251 | int nondata_nodes_cmp(void *priv, struct list_head *a, struct list_head *b) | ||
252 | { | ||
253 | int typea, typeb; | ||
254 | ino_t inuma, inumb; | ||
255 | struct ubifs_info *c = priv; | ||
256 | struct ubifs_scan_node *sa, *sb; | ||
257 | |||
258 | cond_resched(); | ||
259 | sa = list_entry(a, struct ubifs_scan_node, list); | ||
260 | sb = list_entry(b, struct ubifs_scan_node, list); | ||
261 | typea = key_type(c, &sa->key); | ||
262 | typeb = key_type(c, &sb->key); | ||
263 | ubifs_assert(typea != UBIFS_DATA_KEY && typeb != UBIFS_DATA_KEY); | ||
264 | |||
265 | /* Inodes go before directory entries */ | ||
266 | if (typea == UBIFS_INO_KEY) { | ||
267 | if (typeb == UBIFS_INO_KEY) | ||
268 | return sb->len - sa->len; | ||
269 | return -1; | ||
270 | } | ||
271 | if (typeb == UBIFS_INO_KEY) | ||
272 | return 1; | ||
273 | |||
274 | ubifs_assert(typea == UBIFS_DENT_KEY && typeb == UBIFS_DENT_KEY); | ||
275 | inuma = key_inum(c, &sa->key); | ||
276 | inumb = key_inum(c, &sb->key); | ||
277 | |||
278 | if (inuma == inumb) { | ||
279 | uint32_t hasha = key_hash(c, &sa->key); | ||
280 | uint32_t hashb = key_hash(c, &sb->key); | ||
281 | |||
282 | if (hasha <= hashb) | ||
283 | return -1; | ||
284 | } else if (inuma <= inumb) | ||
285 | return -1; | ||
286 | |||
287 | return 1; | ||
288 | } | ||
289 | |||
290 | /** | ||
291 | * sort_nodes - sort nodes for GC. | ||
162 | * @c: UBIFS file-system description object | 292 | * @c: UBIFS file-system description object |
163 | * @sleb: describes nodes to move | 293 | * @sleb: describes nodes to sort and contains the result on exit |
294 | * @nondata: contains non-data nodes on exit | ||
295 | * @min: minimum node size is returned here | ||
164 | * | 296 | * |
165 | * This function moves valid nodes from data LEB described by @sleb to the GC | 297 | * This function sorts the list of inodes to garbage collect. First of all, it |
166 | * journal head. The obsolete nodes are dropped. | 298 | * kills obsolete nodes and separates data and non-data nodes to the |
299 | * @sleb->nodes and @nondata lists correspondingly. | ||
300 | * | ||
301 | * Data nodes are then sorted in block number order - this is important for | ||
302 | * bulk-read; data nodes with lower inode number go before data nodes with | ||
303 | * higher inode number, and data nodes with lower block number go before data | ||
304 | * nodes with higher block number; | ||
167 | * | 305 | * |
168 | * When moving nodes we have to deal with classical bin-packing problem: the | 306 | * Non-data nodes are sorted as follows. |
169 | * space in the current GC journal head LEB and in @c->gc_lnum are the "bins", | 307 | * o First go inode nodes - they are sorted in descending length order. |
170 | * where the nodes in the @sleb->nodes list are the elements which should be | 308 | * o Then go directory entry nodes - they are sorted in hash order, which |
171 | * fit optimally to the bins. This function uses the "first fit decreasing" | 309 | * should supposedly optimize 'readdir()'. Direntry nodes with lower parent |
172 | * strategy, although it does not really sort the nodes but just split them on | 310 | * inode number go before direntry nodes with higher parent inode number, |
173 | * 3 classes - large, medium, and small, so they are roughly sorted. | 311 | * and direntry nodes with lower name hash values go before direntry nodes |
312 | * with higher name hash values. | ||
174 | * | 313 | * |
175 | * This function returns zero in case of success, %-EAGAIN if commit is | 314 | * This function returns zero in case of success and a negative error code in |
176 | * required, and other negative error codes in case of other failures. | 315 | * case of failure. |
177 | */ | 316 | */ |
178 | static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb) | 317 | static int sort_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb, |
318 | struct list_head *nondata, int *min) | ||
179 | { | 319 | { |
180 | struct ubifs_scan_node *snod, *tmp; | 320 | struct ubifs_scan_node *snod, *tmp; |
181 | struct list_head data, large, medium, small; | ||
182 | struct ubifs_wbuf *wbuf = &c->jheads[GCHD].wbuf; | ||
183 | int avail, err, min = INT_MAX; | ||
184 | unsigned int blk = 0; | ||
185 | ino_t inum = 0; | ||
186 | 321 | ||
187 | INIT_LIST_HEAD(&data); | 322 | *min = INT_MAX; |
188 | INIT_LIST_HEAD(&large); | ||
189 | INIT_LIST_HEAD(&medium); | ||
190 | INIT_LIST_HEAD(&small); | ||
191 | 323 | ||
192 | while (!list_empty(&sleb->nodes)) { | 324 | /* Separate data nodes and non-data nodes */ |
193 | struct list_head *lst = sleb->nodes.next; | 325 | list_for_each_entry_safe(snod, tmp, &sleb->nodes, list) { |
194 | 326 | int err; | |
195 | snod = list_entry(lst, struct ubifs_scan_node, list); | ||
196 | 327 | ||
197 | ubifs_assert(snod->type != UBIFS_IDX_NODE); | 328 | ubifs_assert(snod->type != UBIFS_IDX_NODE); |
198 | ubifs_assert(snod->type != UBIFS_REF_NODE); | 329 | ubifs_assert(snod->type != UBIFS_REF_NODE); |
@@ -201,53 +332,72 @@ static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb) | |||
201 | err = ubifs_tnc_has_node(c, &snod->key, 0, sleb->lnum, | 332 | err = ubifs_tnc_has_node(c, &snod->key, 0, sleb->lnum, |
202 | snod->offs, 0); | 333 | snod->offs, 0); |
203 | if (err < 0) | 334 | if (err < 0) |
204 | goto out; | 335 | return err; |
205 | 336 | ||
206 | list_del(lst); | ||
207 | if (!err) { | 337 | if (!err) { |
208 | /* The node is obsolete, remove it from the list */ | 338 | /* The node is obsolete, remove it from the list */ |
339 | list_del(&snod->list); | ||
209 | kfree(snod); | 340 | kfree(snod); |
210 | continue; | 341 | continue; |
211 | } | 342 | } |
212 | 343 | ||
213 | /* | 344 | if (snod->len < *min) |
214 | * Sort the list of nodes so that data nodes go first, large | 345 | *min = snod->len; |
215 | * nodes go second, and small nodes go last. | 346 | |
216 | */ | 347 | if (key_type(c, &snod->key) != UBIFS_DATA_KEY) |
217 | if (key_type(c, &snod->key) == UBIFS_DATA_KEY) { | 348 | list_move_tail(&snod->list, nondata); |
218 | if (inum != key_inum(c, &snod->key)) { | ||
219 | if (inum) { | ||
220 | /* | ||
221 | * Try to move data nodes from the same | ||
222 | * inode together. | ||
223 | */ | ||
224 | err = joinup(c, sleb, inum, blk, &data); | ||
225 | if (err) | ||
226 | goto out; | ||
227 | } | ||
228 | inum = key_inum(c, &snod->key); | ||
229 | blk = key_block(c, &snod->key); | ||
230 | } | ||
231 | list_add_tail(lst, &data); | ||
232 | } else if (snod->len > MEDIUM_NODE_WM) | ||
233 | list_add_tail(lst, &large); | ||
234 | else if (snod->len > SMALL_NODE_WM) | ||
235 | list_add_tail(lst, &medium); | ||
236 | else | ||
237 | list_add_tail(lst, &small); | ||
238 | |||
239 | /* And find the smallest node */ | ||
240 | if (snod->len < min) | ||
241 | min = snod->len; | ||
242 | } | 349 | } |
243 | 350 | ||
244 | /* | 351 | /* Sort data and non-data nodes */ |
245 | * Join the tree lists so that we'd have one roughly sorted list | 352 | list_sort(c, &sleb->nodes, &data_nodes_cmp); |
246 | * ('large' will be the head of the joined list). | 353 | list_sort(c, nondata, &nondata_nodes_cmp); |
247 | */ | 354 | return 0; |
248 | list_splice(&data, &large); | 355 | } |
249 | list_splice(&medium, large.prev); | 356 | |
250 | list_splice(&small, large.prev); | 357 | /** |
358 | * move_node - move a node. | ||
359 | * @c: UBIFS file-system description object | ||
360 | * @sleb: describes the LEB to move nodes from | ||
361 | * @snod: the mode to move | ||
362 | * @wbuf: write-buffer to move node to | ||
363 | * | ||
364 | * This function moves node @snod to @wbuf, changes TNC correspondingly, and | ||
365 | * destroys @snod. Returns zero in case of success and a negative error code in | ||
366 | * case of failure. | ||
367 | */ | ||
368 | static int move_node(struct ubifs_info *c, struct ubifs_scan_leb *sleb, | ||
369 | struct ubifs_scan_node *snod, struct ubifs_wbuf *wbuf) | ||
370 | { | ||
371 | int err, new_lnum = wbuf->lnum, new_offs = wbuf->offs + wbuf->used; | ||
372 | |||
373 | cond_resched(); | ||
374 | err = ubifs_wbuf_write_nolock(wbuf, snod->node, snod->len); | ||
375 | if (err) | ||
376 | return err; | ||
377 | |||
378 | err = ubifs_tnc_replace(c, &snod->key, sleb->lnum, | ||
379 | snod->offs, new_lnum, new_offs, | ||
380 | snod->len); | ||
381 | list_del(&snod->list); | ||
382 | kfree(snod); | ||
383 | return err; | ||
384 | } | ||
385 | |||
386 | /** | ||
387 | * move_nodes - move nodes. | ||
388 | * @c: UBIFS file-system description object | ||
389 | * @sleb: describes the LEB to move nodes from | ||
390 | * | ||
391 | * This function moves valid nodes from data LEB described by @sleb to the GC | ||
392 | * journal head. This function returns zero in case of success, %-EAGAIN if | ||
393 | * commit is required, and other negative error codes in case of other | ||
394 | * failures. | ||
395 | */ | ||
396 | static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb) | ||
397 | { | ||
398 | int err, min; | ||
399 | LIST_HEAD(nondata); | ||
400 | struct ubifs_wbuf *wbuf = &c->jheads[GCHD].wbuf; | ||
251 | 401 | ||
252 | if (wbuf->lnum == -1) { | 402 | if (wbuf->lnum == -1) { |
253 | /* | 403 | /* |
@@ -256,42 +406,59 @@ static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb) | |||
256 | */ | 406 | */ |
257 | err = switch_gc_head(c); | 407 | err = switch_gc_head(c); |
258 | if (err) | 408 | if (err) |
259 | goto out; | 409 | return err; |
260 | } | 410 | } |
261 | 411 | ||
412 | err = sort_nodes(c, sleb, &nondata, &min); | ||
413 | if (err) | ||
414 | goto out; | ||
415 | |||
262 | /* Write nodes to their new location. Use the first-fit strategy */ | 416 | /* Write nodes to their new location. Use the first-fit strategy */ |
263 | while (1) { | 417 | while (1) { |
264 | avail = c->leb_size - wbuf->offs - wbuf->used; | 418 | int avail; |
265 | list_for_each_entry_safe(snod, tmp, &large, list) { | 419 | struct ubifs_scan_node *snod, *tmp; |
266 | int new_lnum, new_offs; | 420 | |
421 | /* Move data nodes */ | ||
422 | list_for_each_entry_safe(snod, tmp, &sleb->nodes, list) { | ||
423 | avail = c->leb_size - wbuf->offs - wbuf->used; | ||
424 | if (snod->len > avail) | ||
425 | /* | ||
426 | * Do not skip data nodes in order to optimize | ||
427 | * bulk-read. | ||
428 | */ | ||
429 | break; | ||
430 | |||
431 | err = move_node(c, sleb, snod, wbuf); | ||
432 | if (err) | ||
433 | goto out; | ||
434 | } | ||
267 | 435 | ||
436 | /* Move non-data nodes */ | ||
437 | list_for_each_entry_safe(snod, tmp, &nondata, list) { | ||
438 | avail = c->leb_size - wbuf->offs - wbuf->used; | ||
268 | if (avail < min) | 439 | if (avail < min) |
269 | break; | 440 | break; |
270 | 441 | ||
271 | if (snod->len > avail) | 442 | if (snod->len > avail) { |
272 | /* This node does not fit */ | 443 | /* |
444 | * Keep going only if this is an inode with | ||
445 | * some data. Otherwise stop and switch the GC | ||
446 | * head. IOW, we assume that data-less inode | ||
447 | * nodes and direntry nodes are roughly of the | ||
448 | * same size. | ||
449 | */ | ||
450 | if (key_type(c, &snod->key) == UBIFS_DENT_KEY || | ||
451 | snod->len == UBIFS_INO_NODE_SZ) | ||
452 | break; | ||
273 | continue; | 453 | continue; |
454 | } | ||
274 | 455 | ||
275 | cond_resched(); | 456 | err = move_node(c, sleb, snod, wbuf); |
276 | |||
277 | new_lnum = wbuf->lnum; | ||
278 | new_offs = wbuf->offs + wbuf->used; | ||
279 | err = ubifs_wbuf_write_nolock(wbuf, snod->node, | ||
280 | snod->len); | ||
281 | if (err) | 457 | if (err) |
282 | goto out; | 458 | goto out; |
283 | err = ubifs_tnc_replace(c, &snod->key, sleb->lnum, | ||
284 | snod->offs, new_lnum, new_offs, | ||
285 | snod->len); | ||
286 | if (err) | ||
287 | goto out; | ||
288 | |||
289 | avail = c->leb_size - wbuf->offs - wbuf->used; | ||
290 | list_del(&snod->list); | ||
291 | kfree(snod); | ||
292 | } | 459 | } |
293 | 460 | ||
294 | if (list_empty(&large)) | 461 | if (list_empty(&sleb->nodes) && list_empty(&nondata)) |
295 | break; | 462 | break; |
296 | 463 | ||
297 | /* | 464 | /* |
@@ -306,10 +473,7 @@ static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb) | |||
306 | return 0; | 473 | return 0; |
307 | 474 | ||
308 | out: | 475 | out: |
309 | list_for_each_entry_safe(snod, tmp, &large, list) { | 476 | list_splice_tail(&nondata, &sleb->nodes); |
310 | list_del(&snod->list); | ||
311 | kfree(snod); | ||
312 | } | ||
313 | return err; | 477 | return err; |
314 | } | 478 | } |
315 | 479 | ||
diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c index a11ca0958a23..64b5f3a309f5 100644 --- a/fs/ubifs/journal.c +++ b/fs/ubifs/journal.c | |||
@@ -114,7 +114,7 @@ static inline void zero_trun_node_unused(struct ubifs_trun_node *trun) | |||
114 | */ | 114 | */ |
115 | static int reserve_space(struct ubifs_info *c, int jhead, int len) | 115 | static int reserve_space(struct ubifs_info *c, int jhead, int len) |
116 | { | 116 | { |
117 | int err = 0, err1, retries = 0, avail, lnum, offs, free, squeeze; | 117 | int err = 0, err1, retries = 0, avail, lnum, offs, squeeze; |
118 | struct ubifs_wbuf *wbuf = &c->jheads[jhead].wbuf; | 118 | struct ubifs_wbuf *wbuf = &c->jheads[jhead].wbuf; |
119 | 119 | ||
120 | /* | 120 | /* |
@@ -139,10 +139,9 @@ again: | |||
139 | * Write buffer wasn't seek'ed or there is no enough space - look for an | 139 | * Write buffer wasn't seek'ed or there is no enough space - look for an |
140 | * LEB with some empty space. | 140 | * LEB with some empty space. |
141 | */ | 141 | */ |
142 | lnum = ubifs_find_free_space(c, len, &free, squeeze); | 142 | lnum = ubifs_find_free_space(c, len, &offs, squeeze); |
143 | if (lnum >= 0) { | 143 | if (lnum >= 0) { |
144 | /* Found an LEB, add it to the journal head */ | 144 | /* Found an LEB, add it to the journal head */ |
145 | offs = c->leb_size - free; | ||
146 | err = ubifs_add_bud_to_log(c, jhead, lnum, offs); | 145 | err = ubifs_add_bud_to_log(c, jhead, lnum, offs); |
147 | if (err) | 146 | if (err) |
148 | goto out_return; | 147 | goto out_return; |
@@ -1366,7 +1365,7 @@ out_ro: | |||
1366 | * @host: host inode | 1365 | * @host: host inode |
1367 | * | 1366 | * |
1368 | * This function writes the updated version of an extended attribute inode and | 1367 | * This function writes the updated version of an extended attribute inode and |
1369 | * the host inode tho the journal (to the base head). The host inode is written | 1368 | * the host inode to the journal (to the base head). The host inode is written |
1370 | * after the extended attribute inode in order to guarantee that the extended | 1369 | * after the extended attribute inode in order to guarantee that the extended |
1371 | * attribute will be flushed when the inode is synchronized by 'fsync()' and | 1370 | * attribute will be flushed when the inode is synchronized by 'fsync()' and |
1372 | * consequently, the write-buffer is synchronized. This function returns zero | 1371 | * consequently, the write-buffer is synchronized. This function returns zero |
diff --git a/fs/ubifs/key.h b/fs/ubifs/key.h index efb3430a2581..5fa27ea031ba 100644 --- a/fs/ubifs/key.h +++ b/fs/ubifs/key.h | |||
@@ -381,8 +381,8 @@ static inline ino_t key_inum_flash(const struct ubifs_info *c, const void *k) | |||
381 | * @c: UBIFS file-system description object | 381 | * @c: UBIFS file-system description object |
382 | * @key: the key to get hash from | 382 | * @key: the key to get hash from |
383 | */ | 383 | */ |
384 | static inline int key_hash(const struct ubifs_info *c, | 384 | static inline uint32_t key_hash(const struct ubifs_info *c, |
385 | const union ubifs_key *key) | 385 | const union ubifs_key *key) |
386 | { | 386 | { |
387 | return key->u32[1] & UBIFS_S_KEY_HASH_MASK; | 387 | return key->u32[1] & UBIFS_S_KEY_HASH_MASK; |
388 | } | 388 | } |
@@ -392,7 +392,7 @@ static inline int key_hash(const struct ubifs_info *c, | |||
392 | * @c: UBIFS file-system description object | 392 | * @c: UBIFS file-system description object |
393 | * @k: the key to get hash from | 393 | * @k: the key to get hash from |
394 | */ | 394 | */ |
395 | static inline int key_hash_flash(const struct ubifs_info *c, const void *k) | 395 | static inline uint32_t key_hash_flash(const struct ubifs_info *c, const void *k) |
396 | { | 396 | { |
397 | const union ubifs_key *key = k; | 397 | const union ubifs_key *key = k; |
398 | 398 | ||
diff --git a/fs/ubifs/log.c b/fs/ubifs/log.c index 3e0aa7367556..56e33772a1ee 100644 --- a/fs/ubifs/log.c +++ b/fs/ubifs/log.c | |||
@@ -239,7 +239,7 @@ int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs) | |||
239 | } | 239 | } |
240 | 240 | ||
241 | /* | 241 | /* |
242 | * Make sure the the amount of space in buds will not exceed | 242 | * Make sure the amount of space in buds will not exceed the |
243 | * 'c->max_bud_bytes' limit, because we want to guarantee mount time | 243 | * 'c->max_bud_bytes' limit, because we want to guarantee mount time |
244 | * limits. | 244 | * limits. |
245 | * | 245 | * |
@@ -367,7 +367,6 @@ static void remove_buds(struct ubifs_info *c) | |||
367 | bud->jhead, c->leb_size - bud->start, | 367 | bud->jhead, c->leb_size - bud->start, |
368 | c->cmt_bud_bytes); | 368 | c->cmt_bud_bytes); |
369 | rb_erase(p1, &c->buds); | 369 | rb_erase(p1, &c->buds); |
370 | list_del(&bud->list); | ||
371 | /* | 370 | /* |
372 | * If the commit does not finish, the recovery will need | 371 | * If the commit does not finish, the recovery will need |
373 | * to replay the journal, in which case the old buds | 372 | * to replay the journal, in which case the old buds |
@@ -375,7 +374,7 @@ static void remove_buds(struct ubifs_info *c) | |||
375 | * commit i.e. do not allow them to be garbage | 374 | * commit i.e. do not allow them to be garbage |
376 | * collected. | 375 | * collected. |
377 | */ | 376 | */ |
378 | list_add(&bud->list, &c->old_buds); | 377 | list_move(&bud->list, &c->old_buds); |
379 | } | 378 | } |
380 | } | 379 | } |
381 | spin_unlock(&c->buds_lock); | 380 | spin_unlock(&c->buds_lock); |
diff --git a/fs/ubifs/lpt_commit.c b/fs/ubifs/lpt_commit.c index 3216a1f277f8..8cbfb8248025 100644 --- a/fs/ubifs/lpt_commit.c +++ b/fs/ubifs/lpt_commit.c | |||
@@ -229,7 +229,7 @@ static int layout_cnodes(struct ubifs_info *c) | |||
229 | while (offs + len > c->leb_size) { | 229 | while (offs + len > c->leb_size) { |
230 | alen = ALIGN(offs, c->min_io_size); | 230 | alen = ALIGN(offs, c->min_io_size); |
231 | upd_ltab(c, lnum, c->leb_size - alen, alen - offs); | 231 | upd_ltab(c, lnum, c->leb_size - alen, alen - offs); |
232 | dbg_chk_lpt_sz(c, 2, alen - offs); | 232 | dbg_chk_lpt_sz(c, 2, c->leb_size - offs); |
233 | err = alloc_lpt_leb(c, &lnum); | 233 | err = alloc_lpt_leb(c, &lnum); |
234 | if (err) | 234 | if (err) |
235 | goto no_space; | 235 | goto no_space; |
@@ -272,7 +272,7 @@ static int layout_cnodes(struct ubifs_info *c) | |||
272 | if (offs + c->lsave_sz > c->leb_size) { | 272 | if (offs + c->lsave_sz > c->leb_size) { |
273 | alen = ALIGN(offs, c->min_io_size); | 273 | alen = ALIGN(offs, c->min_io_size); |
274 | upd_ltab(c, lnum, c->leb_size - alen, alen - offs); | 274 | upd_ltab(c, lnum, c->leb_size - alen, alen - offs); |
275 | dbg_chk_lpt_sz(c, 2, alen - offs); | 275 | dbg_chk_lpt_sz(c, 2, c->leb_size - offs); |
276 | err = alloc_lpt_leb(c, &lnum); | 276 | err = alloc_lpt_leb(c, &lnum); |
277 | if (err) | 277 | if (err) |
278 | goto no_space; | 278 | goto no_space; |
@@ -292,7 +292,7 @@ static int layout_cnodes(struct ubifs_info *c) | |||
292 | if (offs + c->ltab_sz > c->leb_size) { | 292 | if (offs + c->ltab_sz > c->leb_size) { |
293 | alen = ALIGN(offs, c->min_io_size); | 293 | alen = ALIGN(offs, c->min_io_size); |
294 | upd_ltab(c, lnum, c->leb_size - alen, alen - offs); | 294 | upd_ltab(c, lnum, c->leb_size - alen, alen - offs); |
295 | dbg_chk_lpt_sz(c, 2, alen - offs); | 295 | dbg_chk_lpt_sz(c, 2, c->leb_size - offs); |
296 | err = alloc_lpt_leb(c, &lnum); | 296 | err = alloc_lpt_leb(c, &lnum); |
297 | if (err) | 297 | if (err) |
298 | goto no_space; | 298 | goto no_space; |
@@ -416,14 +416,12 @@ static int write_cnodes(struct ubifs_info *c) | |||
416 | alen, UBI_SHORTTERM); | 416 | alen, UBI_SHORTTERM); |
417 | if (err) | 417 | if (err) |
418 | return err; | 418 | return err; |
419 | dbg_chk_lpt_sz(c, 4, alen - wlen); | ||
420 | } | 419 | } |
421 | dbg_chk_lpt_sz(c, 2, 0); | 420 | dbg_chk_lpt_sz(c, 2, c->leb_size - offs); |
422 | err = realloc_lpt_leb(c, &lnum); | 421 | err = realloc_lpt_leb(c, &lnum); |
423 | if (err) | 422 | if (err) |
424 | goto no_space; | 423 | goto no_space; |
425 | offs = 0; | 424 | offs = from = 0; |
426 | from = 0; | ||
427 | ubifs_assert(lnum >= c->lpt_first && | 425 | ubifs_assert(lnum >= c->lpt_first && |
428 | lnum <= c->lpt_last); | 426 | lnum <= c->lpt_last); |
429 | err = ubifs_leb_unmap(c, lnum); | 427 | err = ubifs_leb_unmap(c, lnum); |
@@ -477,11 +475,11 @@ static int write_cnodes(struct ubifs_info *c) | |||
477 | UBI_SHORTTERM); | 475 | UBI_SHORTTERM); |
478 | if (err) | 476 | if (err) |
479 | return err; | 477 | return err; |
480 | dbg_chk_lpt_sz(c, 2, alen - wlen); | 478 | dbg_chk_lpt_sz(c, 2, c->leb_size - offs); |
481 | err = realloc_lpt_leb(c, &lnum); | 479 | err = realloc_lpt_leb(c, &lnum); |
482 | if (err) | 480 | if (err) |
483 | goto no_space; | 481 | goto no_space; |
484 | offs = 0; | 482 | offs = from = 0; |
485 | ubifs_assert(lnum >= c->lpt_first && | 483 | ubifs_assert(lnum >= c->lpt_first && |
486 | lnum <= c->lpt_last); | 484 | lnum <= c->lpt_last); |
487 | err = ubifs_leb_unmap(c, lnum); | 485 | err = ubifs_leb_unmap(c, lnum); |
@@ -504,11 +502,11 @@ static int write_cnodes(struct ubifs_info *c) | |||
504 | UBI_SHORTTERM); | 502 | UBI_SHORTTERM); |
505 | if (err) | 503 | if (err) |
506 | return err; | 504 | return err; |
507 | dbg_chk_lpt_sz(c, 2, alen - wlen); | 505 | dbg_chk_lpt_sz(c, 2, c->leb_size - offs); |
508 | err = realloc_lpt_leb(c, &lnum); | 506 | err = realloc_lpt_leb(c, &lnum); |
509 | if (err) | 507 | if (err) |
510 | goto no_space; | 508 | goto no_space; |
511 | offs = 0; | 509 | offs = from = 0; |
512 | ubifs_assert(lnum >= c->lpt_first && | 510 | ubifs_assert(lnum >= c->lpt_first && |
513 | lnum <= c->lpt_last); | 511 | lnum <= c->lpt_last); |
514 | err = ubifs_leb_unmap(c, lnum); | 512 | err = ubifs_leb_unmap(c, lnum); |
@@ -1756,10 +1754,16 @@ int dbg_chk_lpt_free_spc(struct ubifs_info *c) | |||
1756 | /** | 1754 | /** |
1757 | * dbg_chk_lpt_sz - check LPT does not write more than LPT size. | 1755 | * dbg_chk_lpt_sz - check LPT does not write more than LPT size. |
1758 | * @c: the UBIFS file-system description object | 1756 | * @c: the UBIFS file-system description object |
1759 | * @action: action | 1757 | * @action: what to do |
1760 | * @len: length written | 1758 | * @len: length written |
1761 | * | 1759 | * |
1762 | * This function returns %0 on success and a negative error code on failure. | 1760 | * This function returns %0 on success and a negative error code on failure. |
1761 | * The @action argument may be one of: | ||
1762 | * o %0 - LPT debugging checking starts, initialize debugging variables; | ||
1763 | * o %1 - wrote an LPT node, increase LPT size by @len bytes; | ||
1764 | * o %2 - switched to a different LEB and wasted @len bytes; | ||
1765 | * o %3 - check that we've written the right number of bytes. | ||
1766 | * o %4 - wasted @len bytes; | ||
1763 | */ | 1767 | */ |
1764 | int dbg_chk_lpt_sz(struct ubifs_info *c, int action, int len) | 1768 | int dbg_chk_lpt_sz(struct ubifs_info *c, int action, int len) |
1765 | { | 1769 | { |
@@ -1917,12 +1921,12 @@ static void dump_lpt_leb(const struct ubifs_info *c, int lnum) | |||
1917 | lnum, offs); | 1921 | lnum, offs); |
1918 | err = ubifs_unpack_nnode(c, buf, &nnode); | 1922 | err = ubifs_unpack_nnode(c, buf, &nnode); |
1919 | for (i = 0; i < UBIFS_LPT_FANOUT; i++) { | 1923 | for (i = 0; i < UBIFS_LPT_FANOUT; i++) { |
1920 | printk("%d:%d", nnode.nbranch[i].lnum, | 1924 | printk(KERN_CONT "%d:%d", nnode.nbranch[i].lnum, |
1921 | nnode.nbranch[i].offs); | 1925 | nnode.nbranch[i].offs); |
1922 | if (i != UBIFS_LPT_FANOUT - 1) | 1926 | if (i != UBIFS_LPT_FANOUT - 1) |
1923 | printk(", "); | 1927 | printk(KERN_CONT ", "); |
1924 | } | 1928 | } |
1925 | printk("\n"); | 1929 | printk(KERN_CONT "\n"); |
1926 | break; | 1930 | break; |
1927 | } | 1931 | } |
1928 | case UBIFS_LPT_LTAB: | 1932 | case UBIFS_LPT_LTAB: |
diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c index 90acac603e63..10662975d2ef 100644 --- a/fs/ubifs/recovery.c +++ b/fs/ubifs/recovery.c | |||
@@ -425,59 +425,35 @@ static void clean_buf(const struct ubifs_info *c, void **buf, int lnum, | |||
425 | * @lnum: LEB number of the LEB from which @buf was read | 425 | * @lnum: LEB number of the LEB from which @buf was read |
426 | * @offs: offset from which @buf was read | 426 | * @offs: offset from which @buf was read |
427 | * | 427 | * |
428 | * This function scans @buf for more nodes and returns %0 is a node is found and | 428 | * This function ensures that the corrupted node at @offs is the last thing |
429 | * %1 if no more nodes are found. | 429 | * written to a LEB. This function returns %1 if more data is not found and |
430 | * %0 if more data is found. | ||
430 | */ | 431 | */ |
431 | static int no_more_nodes(const struct ubifs_info *c, void *buf, int len, | 432 | static int no_more_nodes(const struct ubifs_info *c, void *buf, int len, |
432 | int lnum, int offs) | 433 | int lnum, int offs) |
433 | { | 434 | { |
434 | int skip, next_offs = 0; | 435 | struct ubifs_ch *ch = buf; |
436 | int skip, dlen = le32_to_cpu(ch->len); | ||
435 | 437 | ||
436 | if (len > UBIFS_DATA_NODE_SZ) { | 438 | /* Check for empty space after the corrupt node's common header */ |
437 | struct ubifs_ch *ch = buf; | 439 | skip = ALIGN(offs + UBIFS_CH_SZ, c->min_io_size) - offs; |
438 | int dlen = le32_to_cpu(ch->len); | 440 | if (is_empty(buf + skip, len - skip)) |
439 | 441 | return 1; | |
440 | if (ch->node_type == UBIFS_DATA_NODE && dlen >= UBIFS_CH_SZ && | 442 | /* |
441 | dlen <= UBIFS_MAX_DATA_NODE_SZ) | 443 | * The area after the common header size is not empty, so the common |
442 | /* The corrupt node looks like a data node */ | 444 | * header must be intact. Check it. |
443 | next_offs = ALIGN(offs + dlen, 8); | 445 | */ |
444 | } | 446 | if (ubifs_check_node(c, buf, lnum, offs, 1, 0) != -EUCLEAN) { |
445 | 447 | dbg_rcvry("unexpected bad common header at %d:%d", lnum, offs); | |
446 | if (c->min_io_size == 1) | 448 | return 0; |
447 | skip = 8; | ||
448 | else | ||
449 | skip = ALIGN(offs + 1, c->min_io_size) - offs; | ||
450 | |||
451 | offs += skip; | ||
452 | buf += skip; | ||
453 | len -= skip; | ||
454 | while (len > 8) { | ||
455 | struct ubifs_ch *ch = buf; | ||
456 | uint32_t magic = le32_to_cpu(ch->magic); | ||
457 | int ret; | ||
458 | |||
459 | if (magic == UBIFS_NODE_MAGIC) { | ||
460 | ret = ubifs_scan_a_node(c, buf, len, lnum, offs, 1); | ||
461 | if (ret == SCANNED_A_NODE || ret > 0) { | ||
462 | /* | ||
463 | * There is a small chance this is just data in | ||
464 | * a data node, so check that possibility. e.g. | ||
465 | * this is part of a file that itself contains | ||
466 | * a UBIFS image. | ||
467 | */ | ||
468 | if (next_offs && offs + le32_to_cpu(ch->len) <= | ||
469 | next_offs) | ||
470 | continue; | ||
471 | dbg_rcvry("unexpected node at %d:%d", lnum, | ||
472 | offs); | ||
473 | return 0; | ||
474 | } | ||
475 | } | ||
476 | offs += 8; | ||
477 | buf += 8; | ||
478 | len -= 8; | ||
479 | } | 449 | } |
480 | return 1; | 450 | /* Now we know the corrupt node's length we can skip over it */ |
451 | skip = ALIGN(offs + dlen, c->min_io_size) - offs; | ||
452 | /* After which there should be empty space */ | ||
453 | if (is_empty(buf + skip, len - skip)) | ||
454 | return 1; | ||
455 | dbg_rcvry("unexpected data at %d:%d", lnum, offs + skip); | ||
456 | return 0; | ||
481 | } | 457 | } |
482 | 458 | ||
483 | /** | 459 | /** |
diff --git a/fs/ubifs/replay.c b/fs/ubifs/replay.c index ce42a7b0ca5a..11cc80125a49 100644 --- a/fs/ubifs/replay.c +++ b/fs/ubifs/replay.c | |||
@@ -143,7 +143,7 @@ static int set_bud_lprops(struct ubifs_info *c, struct replay_entry *r) | |||
143 | dirty -= c->leb_size - lp->free; | 143 | dirty -= c->leb_size - lp->free; |
144 | /* | 144 | /* |
145 | * If the replay order was perfect the dirty space would now be | 145 | * If the replay order was perfect the dirty space would now be |
146 | * zero. The order is not perfect because the the journal heads | 146 | * zero. The order is not perfect because the journal heads |
147 | * race with each other. This is not a problem but is does mean | 147 | * race with each other. This is not a problem but is does mean |
148 | * that the dirty space may temporarily exceed c->leb_size | 148 | * that the dirty space may temporarily exceed c->leb_size |
149 | * during the replay. | 149 | * during the replay. |
diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c index e070c643d1bb..57085e43320f 100644 --- a/fs/ubifs/sb.c +++ b/fs/ubifs/sb.c | |||
@@ -193,6 +193,7 @@ static int create_default_filesystem(struct ubifs_info *c) | |||
193 | if (tmp64 > DEFAULT_MAX_RP_SIZE) | 193 | if (tmp64 > DEFAULT_MAX_RP_SIZE) |
194 | tmp64 = DEFAULT_MAX_RP_SIZE; | 194 | tmp64 = DEFAULT_MAX_RP_SIZE; |
195 | sup->rp_size = cpu_to_le64(tmp64); | 195 | sup->rp_size = cpu_to_le64(tmp64); |
196 | sup->ro_compat_version = cpu_to_le32(UBIFS_RO_COMPAT_VERSION); | ||
196 | 197 | ||
197 | err = ubifs_write_node(c, sup, UBIFS_SB_NODE_SZ, 0, 0, UBI_LONGTERM); | 198 | err = ubifs_write_node(c, sup, UBIFS_SB_NODE_SZ, 0, 0, UBI_LONGTERM); |
198 | kfree(sup); | 199 | kfree(sup); |
@@ -532,17 +533,39 @@ int ubifs_read_superblock(struct ubifs_info *c) | |||
532 | if (IS_ERR(sup)) | 533 | if (IS_ERR(sup)) |
533 | return PTR_ERR(sup); | 534 | return PTR_ERR(sup); |
534 | 535 | ||
536 | c->fmt_version = le32_to_cpu(sup->fmt_version); | ||
537 | c->ro_compat_version = le32_to_cpu(sup->ro_compat_version); | ||
538 | |||
535 | /* | 539 | /* |
536 | * The software supports all previous versions but not future versions, | 540 | * The software supports all previous versions but not future versions, |
537 | * due to the unavailability of time-travelling equipment. | 541 | * due to the unavailability of time-travelling equipment. |
538 | */ | 542 | */ |
539 | c->fmt_version = le32_to_cpu(sup->fmt_version); | ||
540 | if (c->fmt_version > UBIFS_FORMAT_VERSION) { | 543 | if (c->fmt_version > UBIFS_FORMAT_VERSION) { |
541 | ubifs_err("on-flash format version is %d, but software only " | 544 | struct super_block *sb = c->vfs_sb; |
542 | "supports up to version %d", c->fmt_version, | 545 | int mounting_ro = sb->s_flags & MS_RDONLY; |
543 | UBIFS_FORMAT_VERSION); | 546 | |
544 | err = -EINVAL; | 547 | ubifs_assert(!c->ro_media || mounting_ro); |
545 | goto out; | 548 | if (!mounting_ro || |
549 | c->ro_compat_version > UBIFS_RO_COMPAT_VERSION) { | ||
550 | ubifs_err("on-flash format version is w%d/r%d, but " | ||
551 | "software only supports up to version " | ||
552 | "w%d/r%d", c->fmt_version, | ||
553 | c->ro_compat_version, UBIFS_FORMAT_VERSION, | ||
554 | UBIFS_RO_COMPAT_VERSION); | ||
555 | if (c->ro_compat_version <= UBIFS_RO_COMPAT_VERSION) { | ||
556 | ubifs_msg("only R/O mounting is possible"); | ||
557 | err = -EROFS; | ||
558 | } else | ||
559 | err = -EINVAL; | ||
560 | goto out; | ||
561 | } | ||
562 | |||
563 | /* | ||
564 | * The FS is mounted R/O, and the media format is | ||
565 | * R/O-compatible with the UBIFS implementation, so we can | ||
566 | * mount. | ||
567 | */ | ||
568 | c->rw_incompat = 1; | ||
546 | } | 569 | } |
547 | 570 | ||
548 | if (c->fmt_version < 3) { | 571 | if (c->fmt_version < 3) { |
@@ -623,7 +646,6 @@ int ubifs_read_superblock(struct ubifs_info *c) | |||
623 | c->main_lebs = c->leb_cnt - UBIFS_SB_LEBS - UBIFS_MST_LEBS; | 646 | c->main_lebs = c->leb_cnt - UBIFS_SB_LEBS - UBIFS_MST_LEBS; |
624 | c->main_lebs -= c->log_lebs + c->lpt_lebs + c->orph_lebs; | 647 | c->main_lebs -= c->log_lebs + c->lpt_lebs + c->orph_lebs; |
625 | c->main_first = c->leb_cnt - c->main_lebs; | 648 | c->main_first = c->leb_cnt - c->main_lebs; |
626 | c->report_rp_size = ubifs_reported_space(c, c->rp_size); | ||
627 | 649 | ||
628 | err = validate_sb(c, sup); | 650 | err = validate_sb(c, sup); |
629 | out: | 651 | out: |
diff --git a/fs/ubifs/shrinker.c b/fs/ubifs/shrinker.c index e7bab52a1410..02feb59cefca 100644 --- a/fs/ubifs/shrinker.c +++ b/fs/ubifs/shrinker.c | |||
@@ -206,8 +206,7 @@ static int shrink_tnc_trees(int nr, int age, int *contention) | |||
206 | * Move this one to the end of the list to provide some | 206 | * Move this one to the end of the list to provide some |
207 | * fairness. | 207 | * fairness. |
208 | */ | 208 | */ |
209 | list_del(&c->infos_list); | 209 | list_move_tail(&c->infos_list, &ubifs_infos); |
210 | list_add_tail(&c->infos_list, &ubifs_infos); | ||
211 | mutex_unlock(&c->umount_mutex); | 210 | mutex_unlock(&c->umount_mutex); |
212 | if (freed >= nr) | 211 | if (freed >= nr) |
213 | break; | 212 | break; |
@@ -263,8 +262,7 @@ static int kick_a_thread(void) | |||
263 | } | 262 | } |
264 | 263 | ||
265 | if (i == 1) { | 264 | if (i == 1) { |
266 | list_del(&c->infos_list); | 265 | list_move_tail(&c->infos_list, &ubifs_infos); |
267 | list_add_tail(&c->infos_list, &ubifs_infos); | ||
268 | spin_unlock(&ubifs_infos_lock); | 266 | spin_unlock(&ubifs_infos_lock); |
269 | 267 | ||
270 | ubifs_request_bg_commit(c); | 268 | ubifs_request_bg_commit(c); |
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index c5c98355459a..faa44f90608a 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c | |||
@@ -421,8 +421,8 @@ static int ubifs_show_options(struct seq_file *s, struct vfsmount *mnt) | |||
421 | seq_printf(s, ",no_chk_data_crc"); | 421 | seq_printf(s, ",no_chk_data_crc"); |
422 | 422 | ||
423 | if (c->mount_opts.override_compr) { | 423 | if (c->mount_opts.override_compr) { |
424 | seq_printf(s, ",compr="); | 424 | seq_printf(s, ",compr=%s", |
425 | seq_printf(s, ubifs_compr_name(c->mount_opts.compr_type)); | 425 | ubifs_compr_name(c->mount_opts.compr_type)); |
426 | } | 426 | } |
427 | 427 | ||
428 | return 0; | 428 | return 0; |
@@ -700,6 +700,8 @@ static int init_constants_sb(struct ubifs_info *c) | |||
700 | if (err) | 700 | if (err) |
701 | return err; | 701 | return err; |
702 | 702 | ||
703 | /* Initialize effective LEB size used in budgeting calculations */ | ||
704 | c->idx_leb_size = c->leb_size - c->max_idx_node_sz; | ||
703 | return 0; | 705 | return 0; |
704 | } | 706 | } |
705 | 707 | ||
@@ -716,6 +718,7 @@ static void init_constants_master(struct ubifs_info *c) | |||
716 | long long tmp64; | 718 | long long tmp64; |
717 | 719 | ||
718 | c->min_idx_lebs = ubifs_calc_min_idx_lebs(c); | 720 | c->min_idx_lebs = ubifs_calc_min_idx_lebs(c); |
721 | c->report_rp_size = ubifs_reported_space(c, c->rp_size); | ||
719 | 722 | ||
720 | /* | 723 | /* |
721 | * Calculate total amount of FS blocks. This number is not used | 724 | * Calculate total amount of FS blocks. This number is not used |
@@ -1201,7 +1204,7 @@ static int mount_ubifs(struct ubifs_info *c) | |||
1201 | goto out_cbuf; | 1204 | goto out_cbuf; |
1202 | 1205 | ||
1203 | /* Create background thread */ | 1206 | /* Create background thread */ |
1204 | c->bgt = kthread_create(ubifs_bg_thread, c, c->bgt_name); | 1207 | c->bgt = kthread_create(ubifs_bg_thread, c, "%s", c->bgt_name); |
1205 | if (IS_ERR(c->bgt)) { | 1208 | if (IS_ERR(c->bgt)) { |
1206 | err = PTR_ERR(c->bgt); | 1209 | err = PTR_ERR(c->bgt); |
1207 | c->bgt = NULL; | 1210 | c->bgt = NULL; |
@@ -1318,11 +1321,15 @@ static int mount_ubifs(struct ubifs_info *c) | |||
1318 | else { | 1321 | else { |
1319 | c->need_recovery = 0; | 1322 | c->need_recovery = 0; |
1320 | ubifs_msg("recovery completed"); | 1323 | ubifs_msg("recovery completed"); |
1321 | /* GC LEB has to be empty and taken at this point */ | 1324 | /* |
1322 | ubifs_assert(c->lst.taken_empty_lebs == 1); | 1325 | * GC LEB has to be empty and taken at this point. But |
1326 | * the journal head LEBs may also be accounted as | ||
1327 | * "empty taken" if they are empty. | ||
1328 | */ | ||
1329 | ubifs_assert(c->lst.taken_empty_lebs > 0); | ||
1323 | } | 1330 | } |
1324 | } else | 1331 | } else |
1325 | ubifs_assert(c->lst.taken_empty_lebs == 1); | 1332 | ubifs_assert(c->lst.taken_empty_lebs > 0); |
1326 | 1333 | ||
1327 | err = dbg_check_filesystem(c); | 1334 | err = dbg_check_filesystem(c); |
1328 | if (err) | 1335 | if (err) |
@@ -1344,8 +1351,9 @@ static int mount_ubifs(struct ubifs_info *c) | |||
1344 | x = (long long)c->log_lebs * c->leb_size + c->max_bud_bytes; | 1351 | x = (long long)c->log_lebs * c->leb_size + c->max_bud_bytes; |
1345 | ubifs_msg("journal size: %lld bytes (%lld KiB, %lld MiB, %d " | 1352 | ubifs_msg("journal size: %lld bytes (%lld KiB, %lld MiB, %d " |
1346 | "LEBs)", x, x >> 10, x >> 20, c->log_lebs + c->max_bud_cnt); | 1353 | "LEBs)", x, x >> 10, x >> 20, c->log_lebs + c->max_bud_cnt); |
1347 | ubifs_msg("media format: %d (latest is %d)", | 1354 | ubifs_msg("media format: w%d/r%d (latest is w%d/r%d)", |
1348 | c->fmt_version, UBIFS_FORMAT_VERSION); | 1355 | c->fmt_version, c->ro_compat_version, |
1356 | UBIFS_FORMAT_VERSION, UBIFS_RO_COMPAT_VERSION); | ||
1349 | ubifs_msg("default compressor: %s", ubifs_compr_name(c->default_compr)); | 1357 | ubifs_msg("default compressor: %s", ubifs_compr_name(c->default_compr)); |
1350 | ubifs_msg("reserved for root: %llu bytes (%llu KiB)", | 1358 | ubifs_msg("reserved for root: %llu bytes (%llu KiB)", |
1351 | c->report_rp_size, c->report_rp_size >> 10); | 1359 | c->report_rp_size, c->report_rp_size >> 10); |
@@ -1485,6 +1493,15 @@ static int ubifs_remount_rw(struct ubifs_info *c) | |||
1485 | { | 1493 | { |
1486 | int err, lnum; | 1494 | int err, lnum; |
1487 | 1495 | ||
1496 | if (c->rw_incompat) { | ||
1497 | ubifs_err("the file-system is not R/W-compatible"); | ||
1498 | ubifs_msg("on-flash format version is w%d/r%d, but software " | ||
1499 | "only supports up to version w%d/r%d", c->fmt_version, | ||
1500 | c->ro_compat_version, UBIFS_FORMAT_VERSION, | ||
1501 | UBIFS_RO_COMPAT_VERSION); | ||
1502 | return -EROFS; | ||
1503 | } | ||
1504 | |||
1488 | mutex_lock(&c->umount_mutex); | 1505 | mutex_lock(&c->umount_mutex); |
1489 | dbg_save_space_info(c); | 1506 | dbg_save_space_info(c); |
1490 | c->remounting_rw = 1; | 1507 | c->remounting_rw = 1; |
@@ -1554,7 +1571,7 @@ static int ubifs_remount_rw(struct ubifs_info *c) | |||
1554 | ubifs_create_buds_lists(c); | 1571 | ubifs_create_buds_lists(c); |
1555 | 1572 | ||
1556 | /* Create background thread */ | 1573 | /* Create background thread */ |
1557 | c->bgt = kthread_create(ubifs_bg_thread, c, c->bgt_name); | 1574 | c->bgt = kthread_create(ubifs_bg_thread, c, "%s", c->bgt_name); |
1558 | if (IS_ERR(c->bgt)) { | 1575 | if (IS_ERR(c->bgt)) { |
1559 | err = PTR_ERR(c->bgt); | 1576 | err = PTR_ERR(c->bgt); |
1560 | c->bgt = NULL; | 1577 | c->bgt = NULL; |
@@ -1775,7 +1792,7 @@ static int ubifs_remount_fs(struct super_block *sb, int *flags, char *data) | |||
1775 | c->bu.buf = NULL; | 1792 | c->bu.buf = NULL; |
1776 | } | 1793 | } |
1777 | 1794 | ||
1778 | ubifs_assert(c->lst.taken_empty_lebs == 1); | 1795 | ubifs_assert(c->lst.taken_empty_lebs > 0); |
1779 | return 0; | 1796 | return 0; |
1780 | } | 1797 | } |
1781 | 1798 | ||
diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c index fa28a84c6a1b..f249f7b0d656 100644 --- a/fs/ubifs/tnc.c +++ b/fs/ubifs/tnc.c | |||
@@ -1252,7 +1252,7 @@ int ubifs_lookup_level0(struct ubifs_info *c, const union ubifs_key *key, | |||
1252 | * splitting in the middle of the colliding sequence. Also, when | 1252 | * splitting in the middle of the colliding sequence. Also, when |
1253 | * removing the leftmost key, we would have to correct the key of the | 1253 | * removing the leftmost key, we would have to correct the key of the |
1254 | * parent node, which would introduce additional complications. Namely, | 1254 | * parent node, which would introduce additional complications. Namely, |
1255 | * if we changed the the leftmost key of the parent znode, the garbage | 1255 | * if we changed the leftmost key of the parent znode, the garbage |
1256 | * collector would be unable to find it (GC is doing this when GC'ing | 1256 | * collector would be unable to find it (GC is doing this when GC'ing |
1257 | * indexing LEBs). Although we already have an additional RB-tree where | 1257 | * indexing LEBs). Although we already have an additional RB-tree where |
1258 | * we save such changed znodes (see 'ins_clr_old_idx_znode()') until | 1258 | * we save such changed znodes (see 'ins_clr_old_idx_znode()') until |
diff --git a/fs/ubifs/ubifs-media.h b/fs/ubifs/ubifs-media.h index b25fc36cf72f..3eee07e0c495 100644 --- a/fs/ubifs/ubifs-media.h +++ b/fs/ubifs/ubifs-media.h | |||
@@ -36,9 +36,31 @@ | |||
36 | /* UBIFS node magic number (must not have the padding byte first or last) */ | 36 | /* UBIFS node magic number (must not have the padding byte first or last) */ |
37 | #define UBIFS_NODE_MAGIC 0x06101831 | 37 | #define UBIFS_NODE_MAGIC 0x06101831 |
38 | 38 | ||
39 | /* UBIFS on-flash format version */ | 39 | /* |
40 | * UBIFS on-flash format version. This version is increased when the on-flash | ||
41 | * format is changing. If this happens, UBIFS is will support older versions as | ||
42 | * well. But older UBIFS code will not support newer formats. Format changes | ||
43 | * will be rare and only when absolutely necessary, e.g. to fix a bug or to add | ||
44 | * a new feature. | ||
45 | * | ||
46 | * UBIFS went into mainline kernel with format version 4. The older formats | ||
47 | * were development formats. | ||
48 | */ | ||
40 | #define UBIFS_FORMAT_VERSION 4 | 49 | #define UBIFS_FORMAT_VERSION 4 |
41 | 50 | ||
51 | /* | ||
52 | * Read-only compatibility version. If the UBIFS format is changed, older UBIFS | ||
53 | * implementations will not be able to mount newer formats in read-write mode. | ||
54 | * However, depending on the change, it may be possible to mount newer formats | ||
55 | * in R/O mode. This is indicated by the R/O compatibility version which is | ||
56 | * stored in the super-block. | ||
57 | * | ||
58 | * This is needed to support boot-loaders which only need R/O mounting. With | ||
59 | * this flag it is possible to do UBIFS format changes without a need to update | ||
60 | * boot-loaders. | ||
61 | */ | ||
62 | #define UBIFS_RO_COMPAT_VERSION 0 | ||
63 | |||
42 | /* Minimum logical eraseblock size in bytes */ | 64 | /* Minimum logical eraseblock size in bytes */ |
43 | #define UBIFS_MIN_LEB_SZ (15*1024) | 65 | #define UBIFS_MIN_LEB_SZ (15*1024) |
44 | 66 | ||
@@ -53,7 +75,7 @@ | |||
53 | 75 | ||
54 | /* | 76 | /* |
55 | * If compressed data length is less than %UBIFS_MIN_COMPRESS_DIFF bytes | 77 | * If compressed data length is less than %UBIFS_MIN_COMPRESS_DIFF bytes |
56 | * shorter than uncompressed data length, UBIFS preferes to leave this data | 78 | * shorter than uncompressed data length, UBIFS prefers to leave this data |
57 | * node uncompress, because it'll be read faster. | 79 | * node uncompress, because it'll be read faster. |
58 | */ | 80 | */ |
59 | #define UBIFS_MIN_COMPRESS_DIFF 64 | 81 | #define UBIFS_MIN_COMPRESS_DIFF 64 |
@@ -586,6 +608,7 @@ struct ubifs_pad_node { | |||
586 | * @padding2: reserved for future, zeroes | 608 | * @padding2: reserved for future, zeroes |
587 | * @time_gran: time granularity in nanoseconds | 609 | * @time_gran: time granularity in nanoseconds |
588 | * @uuid: UUID generated when the file system image was created | 610 | * @uuid: UUID generated when the file system image was created |
611 | * @ro_compat_version: UBIFS R/O compatibility version | ||
589 | */ | 612 | */ |
590 | struct ubifs_sb_node { | 613 | struct ubifs_sb_node { |
591 | struct ubifs_ch ch; | 614 | struct ubifs_ch ch; |
@@ -612,7 +635,8 @@ struct ubifs_sb_node { | |||
612 | __le64 rp_size; | 635 | __le64 rp_size; |
613 | __le32 time_gran; | 636 | __le32 time_gran; |
614 | __u8 uuid[16]; | 637 | __u8 uuid[16]; |
615 | __u8 padding2[3972]; | 638 | __le32 ro_compat_version; |
639 | __u8 padding2[3968]; | ||
616 | } __attribute__ ((packed)); | 640 | } __attribute__ ((packed)); |
617 | 641 | ||
618 | /** | 642 | /** |
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index 039a68bee29a..0a8341e14088 100644 --- a/fs/ubifs/ubifs.h +++ b/fs/ubifs/ubifs.h | |||
@@ -934,6 +934,7 @@ struct ubifs_debug_info; | |||
934 | * by @commit_sem | 934 | * by @commit_sem |
935 | * @cnt_lock: protects @highest_inum and @max_sqnum counters | 935 | * @cnt_lock: protects @highest_inum and @max_sqnum counters |
936 | * @fmt_version: UBIFS on-flash format version | 936 | * @fmt_version: UBIFS on-flash format version |
937 | * @ro_compat_version: R/O compatibility version | ||
937 | * @uuid: UUID from super block | 938 | * @uuid: UUID from super block |
938 | * | 939 | * |
939 | * @lhead_lnum: log head logical eraseblock number | 940 | * @lhead_lnum: log head logical eraseblock number |
@@ -966,6 +967,7 @@ struct ubifs_debug_info; | |||
966 | * recovery) | 967 | * recovery) |
967 | * @bulk_read: enable bulk-reads | 968 | * @bulk_read: enable bulk-reads |
968 | * @default_compr: default compression algorithm (%UBIFS_COMPR_LZO, etc) | 969 | * @default_compr: default compression algorithm (%UBIFS_COMPR_LZO, etc) |
970 | * @rw_incompat: the media is not R/W compatible | ||
969 | * | 971 | * |
970 | * @tnc_mutex: protects the Tree Node Cache (TNC), @zroot, @cnext, @enext, and | 972 | * @tnc_mutex: protects the Tree Node Cache (TNC), @zroot, @cnext, @enext, and |
971 | * @calc_idx_sz | 973 | * @calc_idx_sz |
@@ -1015,6 +1017,8 @@ struct ubifs_debug_info; | |||
1015 | * @min_io_shift: number of bits in @min_io_size minus one | 1017 | * @min_io_shift: number of bits in @min_io_size minus one |
1016 | * @leb_size: logical eraseblock size in bytes | 1018 | * @leb_size: logical eraseblock size in bytes |
1017 | * @half_leb_size: half LEB size | 1019 | * @half_leb_size: half LEB size |
1020 | * @idx_leb_size: how many bytes of an LEB are effectively available when it is | ||
1021 | * used to store indexing nodes (@leb_size - @max_idx_node_sz) | ||
1018 | * @leb_cnt: count of logical eraseblocks | 1022 | * @leb_cnt: count of logical eraseblocks |
1019 | * @max_leb_cnt: maximum count of logical eraseblocks | 1023 | * @max_leb_cnt: maximum count of logical eraseblocks |
1020 | * @old_leb_cnt: count of logical eraseblocks before re-size | 1024 | * @old_leb_cnt: count of logical eraseblocks before re-size |
@@ -1132,8 +1136,8 @@ struct ubifs_debug_info; | |||
1132 | * previous commit start | 1136 | * previous commit start |
1133 | * @uncat_list: list of un-categorized LEBs | 1137 | * @uncat_list: list of un-categorized LEBs |
1134 | * @empty_list: list of empty LEBs | 1138 | * @empty_list: list of empty LEBs |
1135 | * @freeable_list: list of freeable non-index LEBs (free + dirty == leb_size) | 1139 | * @freeable_list: list of freeable non-index LEBs (free + dirty == @leb_size) |
1136 | * @frdi_idx_list: list of freeable index LEBs (free + dirty == leb_size) | 1140 | * @frdi_idx_list: list of freeable index LEBs (free + dirty == @leb_size) |
1137 | * @freeable_cnt: number of freeable LEBs in @freeable_list | 1141 | * @freeable_cnt: number of freeable LEBs in @freeable_list |
1138 | * | 1142 | * |
1139 | * @ltab_lnum: LEB number of LPT's own lprops table | 1143 | * @ltab_lnum: LEB number of LPT's own lprops table |
@@ -1177,6 +1181,7 @@ struct ubifs_info { | |||
1177 | unsigned long long cmt_no; | 1181 | unsigned long long cmt_no; |
1178 | spinlock_t cnt_lock; | 1182 | spinlock_t cnt_lock; |
1179 | int fmt_version; | 1183 | int fmt_version; |
1184 | int ro_compat_version; | ||
1180 | unsigned char uuid[16]; | 1185 | unsigned char uuid[16]; |
1181 | 1186 | ||
1182 | int lhead_lnum; | 1187 | int lhead_lnum; |
@@ -1205,6 +1210,7 @@ struct ubifs_info { | |||
1205 | unsigned int no_chk_data_crc:1; | 1210 | unsigned int no_chk_data_crc:1; |
1206 | unsigned int bulk_read:1; | 1211 | unsigned int bulk_read:1; |
1207 | unsigned int default_compr:2; | 1212 | unsigned int default_compr:2; |
1213 | unsigned int rw_incompat:1; | ||
1208 | 1214 | ||
1209 | struct mutex tnc_mutex; | 1215 | struct mutex tnc_mutex; |
1210 | struct ubifs_zbranch zroot; | 1216 | struct ubifs_zbranch zroot; |
@@ -1253,6 +1259,7 @@ struct ubifs_info { | |||
1253 | int min_io_shift; | 1259 | int min_io_shift; |
1254 | int leb_size; | 1260 | int leb_size; |
1255 | int half_leb_size; | 1261 | int half_leb_size; |
1262 | int idx_leb_size; | ||
1256 | int leb_cnt; | 1263 | int leb_cnt; |
1257 | int max_leb_cnt; | 1264 | int max_leb_cnt; |
1258 | int old_leb_cnt; | 1265 | int old_leb_cnt; |
@@ -1500,7 +1507,7 @@ long long ubifs_reported_space(const struct ubifs_info *c, long long free); | |||
1500 | long long ubifs_calc_available(const struct ubifs_info *c, int min_idx_lebs); | 1507 | long long ubifs_calc_available(const struct ubifs_info *c, int min_idx_lebs); |
1501 | 1508 | ||
1502 | /* find.c */ | 1509 | /* find.c */ |
1503 | int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free, | 1510 | int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *offs, |
1504 | int squeeze); | 1511 | int squeeze); |
1505 | int ubifs_find_free_leb_for_idx(struct ubifs_info *c); | 1512 | int ubifs_find_free_leb_for_idx(struct ubifs_info *c); |
1506 | int ubifs_find_dirty_leb(struct ubifs_info *c, struct ubifs_lprops *ret_lp, | 1513 | int ubifs_find_dirty_leb(struct ubifs_info *c, struct ubifs_lprops *ret_lp, |
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index bee52abb8a4d..0ec2c594868e 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
@@ -24,8 +24,8 @@ struct dentry; | |||
24 | */ | 24 | */ |
25 | enum bdi_state { | 25 | enum bdi_state { |
26 | BDI_pdflush, /* A pdflush thread is working this device */ | 26 | BDI_pdflush, /* A pdflush thread is working this device */ |
27 | BDI_write_congested, /* The write queue is getting full */ | 27 | BDI_async_congested, /* The async (write) queue is getting full */ |
28 | BDI_read_congested, /* The read queue is getting full */ | 28 | BDI_sync_congested, /* The sync queue is getting full */ |
29 | BDI_unused, /* Available bits start here */ | 29 | BDI_unused, /* Available bits start here */ |
30 | }; | 30 | }; |
31 | 31 | ||
@@ -215,18 +215,18 @@ static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits) | |||
215 | 215 | ||
216 | static inline int bdi_read_congested(struct backing_dev_info *bdi) | 216 | static inline int bdi_read_congested(struct backing_dev_info *bdi) |
217 | { | 217 | { |
218 | return bdi_congested(bdi, 1 << BDI_read_congested); | 218 | return bdi_congested(bdi, 1 << BDI_sync_congested); |
219 | } | 219 | } |
220 | 220 | ||
221 | static inline int bdi_write_congested(struct backing_dev_info *bdi) | 221 | static inline int bdi_write_congested(struct backing_dev_info *bdi) |
222 | { | 222 | { |
223 | return bdi_congested(bdi, 1 << BDI_write_congested); | 223 | return bdi_congested(bdi, 1 << BDI_async_congested); |
224 | } | 224 | } |
225 | 225 | ||
226 | static inline int bdi_rw_congested(struct backing_dev_info *bdi) | 226 | static inline int bdi_rw_congested(struct backing_dev_info *bdi) |
227 | { | 227 | { |
228 | return bdi_congested(bdi, (1 << BDI_read_congested)| | 228 | return bdi_congested(bdi, (1 << BDI_sync_congested) | |
229 | (1 << BDI_write_congested)); | 229 | (1 << BDI_async_congested)); |
230 | } | 230 | } |
231 | 231 | ||
232 | void clear_bdi_congested(struct backing_dev_info *bdi, int rw); | 232 | void clear_bdi_congested(struct backing_dev_info *bdi, int rw); |
diff --git a/include/linux/bio.h b/include/linux/bio.h index b05b1d4d17d2..b900d2c67d29 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -145,20 +145,21 @@ struct bio { | |||
145 | * bit 2 -- barrier | 145 | * bit 2 -- barrier |
146 | * Insert a serialization point in the IO queue, forcing previously | 146 | * Insert a serialization point in the IO queue, forcing previously |
147 | * submitted IO to be completed before this one is issued. | 147 | * submitted IO to be completed before this one is issued. |
148 | * bit 3 -- synchronous I/O hint: the block layer will unplug immediately | 148 | * bit 3 -- synchronous I/O hint. |
149 | * Note that this does NOT indicate that the IO itself is sync, just | 149 | * bit 4 -- Unplug the device immediately after submitting this bio. |
150 | * that the block layer will not postpone issue of this IO by plugging. | 150 | * bit 5 -- metadata request |
151 | * bit 4 -- metadata request | ||
152 | * Used for tracing to differentiate metadata and data IO. May also | 151 | * Used for tracing to differentiate metadata and data IO. May also |
153 | * get some preferential treatment in the IO scheduler | 152 | * get some preferential treatment in the IO scheduler |
154 | * bit 5 -- discard sectors | 153 | * bit 6 -- discard sectors |
155 | * Informs the lower level device that this range of sectors is no longer | 154 | * Informs the lower level device that this range of sectors is no longer |
156 | * used by the file system and may thus be freed by the device. Used | 155 | * used by the file system and may thus be freed by the device. Used |
157 | * for flash based storage. | 156 | * for flash based storage. |
158 | * bit 6 -- fail fast device errors | 157 | * bit 7 -- fail fast device errors |
159 | * bit 7 -- fail fast transport errors | 158 | * bit 8 -- fail fast transport errors |
160 | * bit 8 -- fail fast driver errors | 159 | * bit 9 -- fail fast driver errors |
161 | * Don't want driver retries for any fast fail whatever the reason. | 160 | * Don't want driver retries for any fast fail whatever the reason. |
161 | * bit 10 -- Tell the IO scheduler not to wait for more requests after this | ||
162 | one has been submitted, even if it is a SYNC request. | ||
162 | */ | 163 | */ |
163 | #define BIO_RW 0 /* Must match RW in req flags (blkdev.h) */ | 164 | #define BIO_RW 0 /* Must match RW in req flags (blkdev.h) */ |
164 | #define BIO_RW_AHEAD 1 /* Must match FAILFAST in req flags */ | 165 | #define BIO_RW_AHEAD 1 /* Must match FAILFAST in req flags */ |
@@ -170,6 +171,7 @@ struct bio { | |||
170 | #define BIO_RW_FAILFAST_DEV 7 | 171 | #define BIO_RW_FAILFAST_DEV 7 |
171 | #define BIO_RW_FAILFAST_TRANSPORT 8 | 172 | #define BIO_RW_FAILFAST_TRANSPORT 8 |
172 | #define BIO_RW_FAILFAST_DRIVER 9 | 173 | #define BIO_RW_FAILFAST_DRIVER 9 |
174 | #define BIO_RW_NOIDLE 10 | ||
173 | 175 | ||
174 | #define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag))) | 176 | #define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag))) |
175 | 177 | ||
@@ -188,6 +190,7 @@ struct bio { | |||
188 | #define bio_rw_ahead(bio) bio_rw_flagged(bio, BIO_RW_AHEAD) | 190 | #define bio_rw_ahead(bio) bio_rw_flagged(bio, BIO_RW_AHEAD) |
189 | #define bio_rw_meta(bio) bio_rw_flagged(bio, BIO_RW_META) | 191 | #define bio_rw_meta(bio) bio_rw_flagged(bio, BIO_RW_META) |
190 | #define bio_discard(bio) bio_rw_flagged(bio, BIO_RW_DISCARD) | 192 | #define bio_discard(bio) bio_rw_flagged(bio, BIO_RW_DISCARD) |
193 | #define bio_noidle(bio) bio_rw_flagged(bio, BIO_RW_NOIDLE) | ||
191 | 194 | ||
192 | /* | 195 | /* |
193 | * upper 16 bits of bi_rw define the io priority of this bio | 196 | * upper 16 bits of bi_rw define the io priority of this bio |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 465d6babc847..e03660964e02 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -38,6 +38,10 @@ struct request; | |||
38 | typedef void (rq_end_io_fn)(struct request *, int); | 38 | typedef void (rq_end_io_fn)(struct request *, int); |
39 | 39 | ||
40 | struct request_list { | 40 | struct request_list { |
41 | /* | ||
42 | * count[], starved[], and wait[] are indexed by | ||
43 | * BLK_RW_SYNC/BLK_RW_ASYNC | ||
44 | */ | ||
41 | int count[2]; | 45 | int count[2]; |
42 | int starved[2]; | 46 | int starved[2]; |
43 | int elvpriv; | 47 | int elvpriv; |
@@ -66,6 +70,11 @@ enum rq_cmd_type_bits { | |||
66 | REQ_TYPE_ATA_PC, | 70 | REQ_TYPE_ATA_PC, |
67 | }; | 71 | }; |
68 | 72 | ||
73 | enum { | ||
74 | BLK_RW_ASYNC = 0, | ||
75 | BLK_RW_SYNC = 1, | ||
76 | }; | ||
77 | |||
69 | /* | 78 | /* |
70 | * For request of type REQ_TYPE_LINUX_BLOCK, rq->cmd[0] is the opcode being | 79 | * For request of type REQ_TYPE_LINUX_BLOCK, rq->cmd[0] is the opcode being |
71 | * sent down (similar to how REQ_TYPE_BLOCK_PC means that ->cmd[] holds a | 80 | * sent down (similar to how REQ_TYPE_BLOCK_PC means that ->cmd[] holds a |
@@ -103,12 +112,13 @@ enum rq_flag_bits { | |||
103 | __REQ_QUIET, /* don't worry about errors */ | 112 | __REQ_QUIET, /* don't worry about errors */ |
104 | __REQ_PREEMPT, /* set for "ide_preempt" requests */ | 113 | __REQ_PREEMPT, /* set for "ide_preempt" requests */ |
105 | __REQ_ORDERED_COLOR, /* is before or after barrier */ | 114 | __REQ_ORDERED_COLOR, /* is before or after barrier */ |
106 | __REQ_RW_SYNC, /* request is sync (O_DIRECT) */ | 115 | __REQ_RW_SYNC, /* request is sync (sync write or read) */ |
107 | __REQ_ALLOCED, /* request came from our alloc pool */ | 116 | __REQ_ALLOCED, /* request came from our alloc pool */ |
108 | __REQ_RW_META, /* metadata io request */ | 117 | __REQ_RW_META, /* metadata io request */ |
109 | __REQ_COPY_USER, /* contains copies of user pages */ | 118 | __REQ_COPY_USER, /* contains copies of user pages */ |
110 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ | 119 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ |
111 | __REQ_UNPLUG, /* unplug queue on submission */ | 120 | __REQ_UNPLUG, /* unplug queue on submission */ |
121 | __REQ_NOIDLE, /* Don't anticipate more IO after this one */ | ||
112 | __REQ_NR_BITS, /* stops here */ | 122 | __REQ_NR_BITS, /* stops here */ |
113 | }; | 123 | }; |
114 | 124 | ||
@@ -136,6 +146,7 @@ enum rq_flag_bits { | |||
136 | #define REQ_COPY_USER (1 << __REQ_COPY_USER) | 146 | #define REQ_COPY_USER (1 << __REQ_COPY_USER) |
137 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) | 147 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) |
138 | #define REQ_UNPLUG (1 << __REQ_UNPLUG) | 148 | #define REQ_UNPLUG (1 << __REQ_UNPLUG) |
149 | #define REQ_NOIDLE (1 << __REQ_NOIDLE) | ||
139 | 150 | ||
140 | #define BLK_MAX_CDB 16 | 151 | #define BLK_MAX_CDB 16 |
141 | 152 | ||
@@ -438,8 +449,8 @@ struct request_queue | |||
438 | #define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */ | 449 | #define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */ |
439 | #define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */ | 450 | #define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */ |
440 | #define QUEUE_FLAG_STOPPED 2 /* queue is stopped */ | 451 | #define QUEUE_FLAG_STOPPED 2 /* queue is stopped */ |
441 | #define QUEUE_FLAG_READFULL 3 /* read queue has been filled */ | 452 | #define QUEUE_FLAG_SYNCFULL 3 /* read queue has been filled */ |
442 | #define QUEUE_FLAG_WRITEFULL 4 /* write queue has been filled */ | 453 | #define QUEUE_FLAG_ASYNCFULL 4 /* write queue has been filled */ |
443 | #define QUEUE_FLAG_DEAD 5 /* queue being torn down */ | 454 | #define QUEUE_FLAG_DEAD 5 /* queue being torn down */ |
444 | #define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ | 455 | #define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ |
445 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ | 456 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ |
@@ -611,32 +622,42 @@ enum { | |||
611 | #define rq_data_dir(rq) ((rq)->cmd_flags & 1) | 622 | #define rq_data_dir(rq) ((rq)->cmd_flags & 1) |
612 | 623 | ||
613 | /* | 624 | /* |
614 | * We regard a request as sync, if it's a READ or a SYNC write. | 625 | * We regard a request as sync, if either a read or a sync write |
615 | */ | 626 | */ |
616 | #define rq_is_sync(rq) (rq_data_dir((rq)) == READ || (rq)->cmd_flags & REQ_RW_SYNC) | 627 | static inline bool rw_is_sync(unsigned int rw_flags) |
628 | { | ||
629 | return !(rw_flags & REQ_RW) || (rw_flags & REQ_RW_SYNC); | ||
630 | } | ||
631 | |||
632 | static inline bool rq_is_sync(struct request *rq) | ||
633 | { | ||
634 | return rw_is_sync(rq->cmd_flags); | ||
635 | } | ||
636 | |||
617 | #define rq_is_meta(rq) ((rq)->cmd_flags & REQ_RW_META) | 637 | #define rq_is_meta(rq) ((rq)->cmd_flags & REQ_RW_META) |
638 | #define rq_noidle(rq) ((rq)->cmd_flags & REQ_NOIDLE) | ||
618 | 639 | ||
619 | static inline int blk_queue_full(struct request_queue *q, int rw) | 640 | static inline int blk_queue_full(struct request_queue *q, int sync) |
620 | { | 641 | { |
621 | if (rw == READ) | 642 | if (sync) |
622 | return test_bit(QUEUE_FLAG_READFULL, &q->queue_flags); | 643 | return test_bit(QUEUE_FLAG_SYNCFULL, &q->queue_flags); |
623 | return test_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags); | 644 | return test_bit(QUEUE_FLAG_ASYNCFULL, &q->queue_flags); |
624 | } | 645 | } |
625 | 646 | ||
626 | static inline void blk_set_queue_full(struct request_queue *q, int rw) | 647 | static inline void blk_set_queue_full(struct request_queue *q, int sync) |
627 | { | 648 | { |
628 | if (rw == READ) | 649 | if (sync) |
629 | queue_flag_set(QUEUE_FLAG_READFULL, q); | 650 | queue_flag_set(QUEUE_FLAG_SYNCFULL, q); |
630 | else | 651 | else |
631 | queue_flag_set(QUEUE_FLAG_WRITEFULL, q); | 652 | queue_flag_set(QUEUE_FLAG_ASYNCFULL, q); |
632 | } | 653 | } |
633 | 654 | ||
634 | static inline void blk_clear_queue_full(struct request_queue *q, int rw) | 655 | static inline void blk_clear_queue_full(struct request_queue *q, int sync) |
635 | { | 656 | { |
636 | if (rw == READ) | 657 | if (sync) |
637 | queue_flag_clear(QUEUE_FLAG_READFULL, q); | 658 | queue_flag_clear(QUEUE_FLAG_SYNCFULL, q); |
638 | else | 659 | else |
639 | queue_flag_clear(QUEUE_FLAG_WRITEFULL, q); | 660 | queue_flag_clear(QUEUE_FLAG_ASYNCFULL, q); |
640 | } | 661 | } |
641 | 662 | ||
642 | 663 | ||
diff --git a/include/linux/dmar.h b/include/linux/dmar.h index 2f3427468956..e397dc342cda 100644 --- a/include/linux/dmar.h +++ b/include/linux/dmar.h | |||
@@ -34,6 +34,7 @@ struct dmar_drhd_unit { | |||
34 | u64 reg_base_addr; /* register base address*/ | 34 | u64 reg_base_addr; /* register base address*/ |
35 | struct pci_dev **devices; /* target device array */ | 35 | struct pci_dev **devices; /* target device array */ |
36 | int devices_cnt; /* target device count */ | 36 | int devices_cnt; /* target device count */ |
37 | u16 segment; /* PCI domain */ | ||
37 | u8 ignored:1; /* ignore drhd */ | 38 | u8 ignored:1; /* ignore drhd */ |
38 | u8 include_all:1; | 39 | u8 include_all:1; |
39 | struct intel_iommu *iommu; | 40 | struct intel_iommu *iommu; |
@@ -44,6 +45,14 @@ extern struct list_head dmar_drhd_units; | |||
44 | #define for_each_drhd_unit(drhd) \ | 45 | #define for_each_drhd_unit(drhd) \ |
45 | list_for_each_entry(drhd, &dmar_drhd_units, list) | 46 | list_for_each_entry(drhd, &dmar_drhd_units, list) |
46 | 47 | ||
48 | #define for_each_active_iommu(i, drhd) \ | ||
49 | list_for_each_entry(drhd, &dmar_drhd_units, list) \ | ||
50 | if (i=drhd->iommu, drhd->ignored) {} else | ||
51 | |||
52 | #define for_each_iommu(i, drhd) \ | ||
53 | list_for_each_entry(drhd, &dmar_drhd_units, list) \ | ||
54 | if (i=drhd->iommu, 0) {} else | ||
55 | |||
47 | extern int dmar_table_init(void); | 56 | extern int dmar_table_init(void); |
48 | extern int dmar_dev_scope_init(void); | 57 | extern int dmar_dev_scope_init(void); |
49 | 58 | ||
@@ -100,6 +109,8 @@ struct irte { | |||
100 | #ifdef CONFIG_INTR_REMAP | 109 | #ifdef CONFIG_INTR_REMAP |
101 | extern int intr_remapping_enabled; | 110 | extern int intr_remapping_enabled; |
102 | extern int enable_intr_remapping(int); | 111 | extern int enable_intr_remapping(int); |
112 | extern void disable_intr_remapping(void); | ||
113 | extern int reenable_intr_remapping(int); | ||
103 | 114 | ||
104 | extern int get_irte(int irq, struct irte *entry); | 115 | extern int get_irte(int irq, struct irte *entry); |
105 | extern int modify_irte(int irq, struct irte *irte_modified); | 116 | extern int modify_irte(int irq, struct irte *irte_modified); |
diff --git a/include/linux/fdtable.h b/include/linux/fdtable.h index 09d6c5bbdddd..a2ec74bc4812 100644 --- a/include/linux/fdtable.h +++ b/include/linux/fdtable.h | |||
@@ -5,12 +5,14 @@ | |||
5 | #ifndef __LINUX_FDTABLE_H | 5 | #ifndef __LINUX_FDTABLE_H |
6 | #define __LINUX_FDTABLE_H | 6 | #define __LINUX_FDTABLE_H |
7 | 7 | ||
8 | #include <asm/atomic.h> | ||
9 | #include <linux/posix_types.h> | 8 | #include <linux/posix_types.h> |
10 | #include <linux/compiler.h> | 9 | #include <linux/compiler.h> |
11 | #include <linux/spinlock.h> | 10 | #include <linux/spinlock.h> |
12 | #include <linux/rcupdate.h> | 11 | #include <linux/rcupdate.h> |
13 | #include <linux/types.h> | 12 | #include <linux/types.h> |
13 | #include <linux/init.h> | ||
14 | |||
15 | #include <asm/atomic.h> | ||
14 | 16 | ||
15 | /* | 17 | /* |
16 | * The default fd array needs to be at least BITS_PER_LONG, | 18 | * The default fd array needs to be at least BITS_PER_LONG, |
diff --git a/include/linux/fs.h b/include/linux/fs.h index a09e17c8f5fd..bce40a2207ee 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -95,8 +95,12 @@ struct inodes_stat_t { | |||
95 | #define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */ | 95 | #define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */ |
96 | #define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) | 96 | #define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) |
97 | #define READ_META (READ | (1 << BIO_RW_META)) | 97 | #define READ_META (READ | (1 << BIO_RW_META)) |
98 | #define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) | 98 | #define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE)) |
99 | #define SWRITE_SYNC (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) | 99 | #define WRITE_SYNC (WRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG)) |
100 | #define WRITE_ODIRECT (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) | ||
101 | #define SWRITE_SYNC_PLUG \ | ||
102 | (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE)) | ||
103 | #define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG)) | ||
100 | #define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) | 104 | #define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) |
101 | #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) | 105 | #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) |
102 | #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) | 106 | #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) |
@@ -2337,19 +2341,7 @@ ssize_t simple_transaction_read(struct file *file, char __user *buf, | |||
2337 | size_t size, loff_t *pos); | 2341 | size_t size, loff_t *pos); |
2338 | int simple_transaction_release(struct inode *inode, struct file *file); | 2342 | int simple_transaction_release(struct inode *inode, struct file *file); |
2339 | 2343 | ||
2340 | static inline void simple_transaction_set(struct file *file, size_t n) | 2344 | void simple_transaction_set(struct file *file, size_t n); |
2341 | { | ||
2342 | struct simple_transaction_argresp *ar = file->private_data; | ||
2343 | |||
2344 | BUG_ON(n > SIMPLE_TRANSACTION_LIMIT); | ||
2345 | |||
2346 | /* | ||
2347 | * The barrier ensures that ar->size will really remain zero until | ||
2348 | * ar->data is ready for reading. | ||
2349 | */ | ||
2350 | smp_mb(); | ||
2351 | ar->size = n; | ||
2352 | } | ||
2353 | 2345 | ||
2354 | /* | 2346 | /* |
2355 | * simple attribute files | 2347 | * simple attribute files |
@@ -2396,27 +2388,6 @@ ssize_t simple_attr_read(struct file *file, char __user *buf, | |||
2396 | ssize_t simple_attr_write(struct file *file, const char __user *buf, | 2388 | ssize_t simple_attr_write(struct file *file, const char __user *buf, |
2397 | size_t len, loff_t *ppos); | 2389 | size_t len, loff_t *ppos); |
2398 | 2390 | ||
2399 | |||
2400 | #ifdef CONFIG_SECURITY | ||
2401 | static inline char *alloc_secdata(void) | ||
2402 | { | ||
2403 | return (char *)get_zeroed_page(GFP_KERNEL); | ||
2404 | } | ||
2405 | |||
2406 | static inline void free_secdata(void *secdata) | ||
2407 | { | ||
2408 | free_page((unsigned long)secdata); | ||
2409 | } | ||
2410 | #else | ||
2411 | static inline char *alloc_secdata(void) | ||
2412 | { | ||
2413 | return (char *)1; | ||
2414 | } | ||
2415 | |||
2416 | static inline void free_secdata(void *secdata) | ||
2417 | { } | ||
2418 | #endif /* CONFIG_SECURITY */ | ||
2419 | |||
2420 | struct ctl_table; | 2391 | struct ctl_table; |
2421 | int proc_nr_files(struct ctl_table *table, int write, struct file *filp, | 2392 | int proc_nr_files(struct ctl_table *table, int write, struct file *filp, |
2422 | void __user *buffer, size_t *lenp, loff_t *ppos); | 2393 | void __user *buffer, size_t *lenp, loff_t *ppos); |
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index bd37078c2d7d..0d2f7c8a33d6 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
@@ -336,6 +336,11 @@ extern int hrtimer_start(struct hrtimer *timer, ktime_t tim, | |||
336 | const enum hrtimer_mode mode); | 336 | const enum hrtimer_mode mode); |
337 | extern int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, | 337 | extern int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, |
338 | unsigned long range_ns, const enum hrtimer_mode mode); | 338 | unsigned long range_ns, const enum hrtimer_mode mode); |
339 | extern int | ||
340 | __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, | ||
341 | unsigned long delta_ns, | ||
342 | const enum hrtimer_mode mode, int wakeup); | ||
343 | |||
339 | extern int hrtimer_cancel(struct hrtimer *timer); | 344 | extern int hrtimer_cancel(struct hrtimer *timer); |
340 | extern int hrtimer_try_to_cancel(struct hrtimer *timer); | 345 | extern int hrtimer_try_to_cancel(struct hrtimer *timer); |
341 | 346 | ||
diff --git a/include/linux/i2c-algo-sgi.h b/include/linux/i2c-algo-sgi.h deleted file mode 100644 index 3b7715024e69..000000000000 --- a/include/linux/i2c-algo-sgi.h +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License version 2 as published by the Free Software Foundation. | ||
4 | * | ||
5 | * Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org> | ||
6 | */ | ||
7 | |||
8 | #ifndef I2C_ALGO_SGI_H | ||
9 | #define I2C_ALGO_SGI_H 1 | ||
10 | |||
11 | #include <linux/i2c.h> | ||
12 | |||
13 | struct i2c_algo_sgi_data { | ||
14 | void *data; /* private data for lowlevel routines */ | ||
15 | unsigned (*getctrl)(void *data); | ||
16 | void (*setctrl)(void *data, unsigned val); | ||
17 | unsigned (*rdata)(void *data); | ||
18 | void (*wdata)(void *data, unsigned val); | ||
19 | |||
20 | int xfer_timeout; | ||
21 | int ack_timeout; | ||
22 | }; | ||
23 | |||
24 | int i2c_sgi_add_bus(struct i2c_adapter *); | ||
25 | |||
26 | #endif /* I2C_ALGO_SGI_H */ | ||
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index f27604af8378..ee9fbc172405 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
@@ -33,47 +33,10 @@ | |||
33 | 33 | ||
34 | #define I2C_DRIVERID_MSP3400 1 | 34 | #define I2C_DRIVERID_MSP3400 1 |
35 | #define I2C_DRIVERID_TUNER 2 | 35 | #define I2C_DRIVERID_TUNER 2 |
36 | #define I2C_DRIVERID_TEA6420 5 /* audio matrix switch */ | ||
37 | #define I2C_DRIVERID_TEA6415C 6 /* video matrix switch */ | ||
38 | #define I2C_DRIVERID_TDA9840 7 /* stereo sound processor */ | ||
39 | #define I2C_DRIVERID_SAA7111A 8 /* video input processor */ | ||
40 | #define I2C_DRIVERID_SAA7185B 13 /* video encoder */ | ||
41 | #define I2C_DRIVERID_SAA7110 22 /* video decoder */ | ||
42 | #define I2C_DRIVERID_SAA5249 24 /* SAA5249 and compatibles */ | ||
43 | #define I2C_DRIVERID_TDA7432 27 /* Stereo sound processor */ | 36 | #define I2C_DRIVERID_TDA7432 27 /* Stereo sound processor */ |
44 | #define I2C_DRIVERID_TVAUDIO 29 /* Generic TV sound driver */ | 37 | #define I2C_DRIVERID_TVAUDIO 29 /* Generic TV sound driver */ |
45 | #define I2C_DRIVERID_TDA9875 32 /* TV sound decoder chip */ | ||
46 | #define I2C_DRIVERID_BT819 40 /* video decoder */ | ||
47 | #define I2C_DRIVERID_BT856 41 /* video encoder */ | ||
48 | #define I2C_DRIVERID_VPX3220 42 /* video decoder+vbi/vtxt */ | ||
49 | #define I2C_DRIVERID_ADV7175 48 /* ADV 7175/7176 video encoder */ | ||
50 | #define I2C_DRIVERID_SAA7114 49 /* video decoder */ | ||
51 | #define I2C_DRIVERID_ADV7170 54 /* video encoder */ | ||
52 | #define I2C_DRIVERID_SAA7191 57 /* video decoder */ | ||
53 | #define I2C_DRIVERID_INDYCAM 58 /* SGI IndyCam */ | ||
54 | #define I2C_DRIVERID_OVCAMCHIP 61 /* OmniVision CMOS image sens. */ | ||
55 | #define I2C_DRIVERID_SAA6752HS 67 /* MPEG2 encoder */ | ||
56 | #define I2C_DRIVERID_TVEEPROM 68 /* TV EEPROM */ | ||
57 | #define I2C_DRIVERID_WM8775 69 /* wm8775 audio processor */ | ||
58 | #define I2C_DRIVERID_CS53L32A 70 /* cs53l32a audio processor */ | ||
59 | #define I2C_DRIVERID_CX25840 71 /* cx2584x video encoder */ | ||
60 | #define I2C_DRIVERID_SAA7127 72 /* saa7127 video encoder */ | ||
61 | #define I2C_DRIVERID_SAA711X 73 /* saa711x video encoders */ | 38 | #define I2C_DRIVERID_SAA711X 73 /* saa711x video encoders */ |
62 | #define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */ | 39 | #define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */ |
63 | #define I2C_DRIVERID_TVP5150 76 /* TVP5150 video decoder */ | ||
64 | #define I2C_DRIVERID_WM8739 77 /* wm8739 audio processor */ | ||
65 | #define I2C_DRIVERID_UPD64083 78 /* upd64083 video processor */ | ||
66 | #define I2C_DRIVERID_UPD64031A 79 /* upd64031a video processor */ | ||
67 | #define I2C_DRIVERID_SAA717X 80 /* saa717x video encoder */ | ||
68 | #define I2C_DRIVERID_BT866 85 /* Conexant bt866 video encoder */ | ||
69 | #define I2C_DRIVERID_KS0127 86 /* Samsung ks0127 video decoder */ | ||
70 | #define I2C_DRIVERID_TLV320AIC23B 87 /* TI TLV320AIC23B audio codec */ | ||
71 | #define I2C_DRIVERID_VP27SMPX 93 /* Panasonic VP27s tuner internal MPX */ | ||
72 | #define I2C_DRIVERID_M52790 95 /* Mitsubishi M52790SP/FP AV switch */ | ||
73 | #define I2C_DRIVERID_CS5345 96 /* cs5345 audio processor */ | ||
74 | #define I2C_DRIVERID_AU8522 97 /* Auvitek au8522 */ | ||
75 | |||
76 | #define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */ | ||
77 | 40 | ||
78 | /* | 41 | /* |
79 | * ---- Adapter types ---------------------------------------------------- | 42 | * ---- Adapter types ---------------------------------------------------- |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index c86c3b07604c..00ee11eb9092 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
@@ -353,8 +353,8 @@ struct i2c_adapter { | |||
353 | void *algo_data; | 353 | void *algo_data; |
354 | 354 | ||
355 | /* --- administration stuff. */ | 355 | /* --- administration stuff. */ |
356 | int (*client_register)(struct i2c_client *); | 356 | int (*client_register)(struct i2c_client *) __deprecated; |
357 | int (*client_unregister)(struct i2c_client *); | 357 | int (*client_unregister)(struct i2c_client *) __deprecated; |
358 | 358 | ||
359 | /* data fields that are valid for all devices */ | 359 | /* data fields that are valid for all devices */ |
360 | u8 level; /* nesting level for lockdep */ | 360 | u8 level; /* nesting level for lockdep */ |
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 77214ead1a36..aa8c53171233 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
@@ -164,6 +164,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val) | |||
164 | #define DMA_GCMD_QIE (((u32)1) << 26) | 164 | #define DMA_GCMD_QIE (((u32)1) << 26) |
165 | #define DMA_GCMD_SIRTP (((u32)1) << 24) | 165 | #define DMA_GCMD_SIRTP (((u32)1) << 24) |
166 | #define DMA_GCMD_IRE (((u32) 1) << 25) | 166 | #define DMA_GCMD_IRE (((u32) 1) << 25) |
167 | #define DMA_GCMD_CFI (((u32) 1) << 23) | ||
167 | 168 | ||
168 | /* GSTS_REG */ | 169 | /* GSTS_REG */ |
169 | #define DMA_GSTS_TES (((u32)1) << 31) | 170 | #define DMA_GSTS_TES (((u32)1) << 31) |
@@ -174,6 +175,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val) | |||
174 | #define DMA_GSTS_QIES (((u32)1) << 26) | 175 | #define DMA_GSTS_QIES (((u32)1) << 26) |
175 | #define DMA_GSTS_IRTPS (((u32)1) << 24) | 176 | #define DMA_GSTS_IRTPS (((u32)1) << 24) |
176 | #define DMA_GSTS_IRES (((u32)1) << 25) | 177 | #define DMA_GSTS_IRES (((u32)1) << 25) |
178 | #define DMA_GSTS_CFIS (((u32)1) << 23) | ||
177 | 179 | ||
178 | /* CCMD_REG */ | 180 | /* CCMD_REG */ |
179 | #define DMA_CCMD_ICC (((u64)1) << 63) | 181 | #define DMA_CCMD_ICC (((u64)1) << 63) |
@@ -284,6 +286,14 @@ struct iommu_flush { | |||
284 | unsigned int size_order, u64 type, int non_present_entry_flush); | 286 | unsigned int size_order, u64 type, int non_present_entry_flush); |
285 | }; | 287 | }; |
286 | 288 | ||
289 | enum { | ||
290 | SR_DMAR_FECTL_REG, | ||
291 | SR_DMAR_FEDATA_REG, | ||
292 | SR_DMAR_FEADDR_REG, | ||
293 | SR_DMAR_FEUADDR_REG, | ||
294 | MAX_SR_DMAR_REGS | ||
295 | }; | ||
296 | |||
287 | struct intel_iommu { | 297 | struct intel_iommu { |
288 | void __iomem *reg; /* Pointer to hardware regs, virtual addr */ | 298 | void __iomem *reg; /* Pointer to hardware regs, virtual addr */ |
289 | u64 cap; | 299 | u64 cap; |
@@ -304,6 +314,8 @@ struct intel_iommu { | |||
304 | struct iommu_flush flush; | 314 | struct iommu_flush flush; |
305 | #endif | 315 | #endif |
306 | struct q_inval *qi; /* Queued invalidation info */ | 316 | struct q_inval *qi; /* Queued invalidation info */ |
317 | u32 *iommu_state; /* Store iommu states between suspend and resume.*/ | ||
318 | |||
307 | #ifdef CONFIG_INTR_REMAP | 319 | #ifdef CONFIG_INTR_REMAP |
308 | struct ir_table *ir_table; /* Interrupt remapping info */ | 320 | struct ir_table *ir_table; /* Interrupt remapping info */ |
309 | #endif | 321 | #endif |
@@ -322,6 +334,7 @@ extern int alloc_iommu(struct dmar_drhd_unit *drhd); | |||
322 | extern void free_iommu(struct intel_iommu *iommu); | 334 | extern void free_iommu(struct intel_iommu *iommu); |
323 | extern int dmar_enable_qi(struct intel_iommu *iommu); | 335 | extern int dmar_enable_qi(struct intel_iommu *iommu); |
324 | extern void dmar_disable_qi(struct intel_iommu *iommu); | 336 | extern void dmar_disable_qi(struct intel_iommu *iommu); |
337 | extern int dmar_reenable_qi(struct intel_iommu *iommu); | ||
325 | extern void qi_global_iec(struct intel_iommu *iommu); | 338 | extern void qi_global_iec(struct intel_iommu *iommu); |
326 | 339 | ||
327 | extern int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, | 340 | extern int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index ce2c07d99fc3..8a9613d0c674 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -299,6 +299,7 @@ extern void softirq_init(void); | |||
299 | #define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0) | 299 | #define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0) |
300 | extern void raise_softirq_irqoff(unsigned int nr); | 300 | extern void raise_softirq_irqoff(unsigned int nr); |
301 | extern void raise_softirq(unsigned int nr); | 301 | extern void raise_softirq(unsigned int nr); |
302 | extern void wakeup_softirqd(void); | ||
302 | 303 | ||
303 | /* This is the worklist that queues up per-cpu softirq work. | 304 | /* This is the worklist that queues up per-cpu softirq work. |
304 | * | 305 | * |
diff --git a/include/linux/key.h b/include/linux/key.h index 21d32a142c00..e544f466d69a 100644 --- a/include/linux/key.h +++ b/include/linux/key.h | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/rbtree.h> | 20 | #include <linux/rbtree.h> |
21 | #include <linux/rcupdate.h> | 21 | #include <linux/rcupdate.h> |
22 | #include <linux/sysctl.h> | 22 | #include <linux/sysctl.h> |
23 | #include <linux/rwsem.h> | ||
23 | #include <asm/atomic.h> | 24 | #include <asm/atomic.h> |
24 | 25 | ||
25 | #ifdef __KERNEL__ | 26 | #ifdef __KERNEL__ |
diff --git a/include/linux/leds-bd2802.h b/include/linux/leds-bd2802.h new file mode 100644 index 000000000000..42f854a1a199 --- /dev/null +++ b/include/linux/leds-bd2802.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * leds-bd2802.h - 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 | #ifndef _LEDS_BD2802_H_ | ||
15 | #define _LEDS_BD2802_H_ | ||
16 | |||
17 | struct bd2802_led_platform_data{ | ||
18 | int reset_gpio; | ||
19 | u8 rgb_time; | ||
20 | }; | ||
21 | |||
22 | #define RGB_TIME(slopedown, slopeup, waveform) \ | ||
23 | ((slopedown) << 6 | (slopeup) << 4 | (waveform)) | ||
24 | |||
25 | #endif /* _LEDS_BD2802_H_ */ | ||
26 | |||
diff --git a/include/linux/leds.h b/include/linux/leds.h index 24489da701e3..376fe07732ea 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h | |||
@@ -30,6 +30,7 @@ enum led_brightness { | |||
30 | struct led_classdev { | 30 | struct led_classdev { |
31 | const char *name; | 31 | const char *name; |
32 | int brightness; | 32 | int brightness; |
33 | int max_brightness; | ||
33 | int flags; | 34 | int flags; |
34 | 35 | ||
35 | /* Lower 16 bits reflect status */ | 36 | /* Lower 16 bits reflect status */ |
@@ -140,7 +141,8 @@ struct gpio_led { | |||
140 | const char *name; | 141 | const char *name; |
141 | const char *default_trigger; | 142 | const char *default_trigger; |
142 | unsigned gpio; | 143 | unsigned gpio; |
143 | u8 active_low; | 144 | u8 active_low : 1; |
145 | u8 retain_state_suspended : 1; | ||
144 | }; | 146 | }; |
145 | 147 | ||
146 | struct gpio_led_platform_data { | 148 | struct gpio_led_platform_data { |
diff --git a/include/linux/leds_pwm.h b/include/linux/leds_pwm.h new file mode 100644 index 000000000000..33a071167489 --- /dev/null +++ b/include/linux/leds_pwm.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * PWM LED driver data - see drivers/leds/leds-pwm.c | ||
3 | */ | ||
4 | #ifndef __LINUX_LEDS_PWM_H | ||
5 | #define __LINUX_LEDS_PWM_H | ||
6 | |||
7 | struct led_pwm { | ||
8 | const char *name; | ||
9 | const char *default_trigger; | ||
10 | unsigned pwm_id; | ||
11 | u8 active_low; | ||
12 | unsigned max_brightness; | ||
13 | unsigned pwm_period_ns; | ||
14 | }; | ||
15 | |||
16 | struct led_pwm_platform_data { | ||
17 | int num_leds; | ||
18 | struct led_pwm *leds; | ||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/include/linux/lockd/xdr.h b/include/linux/lockd/xdr.h index 7dc5b6cb44cd..d39ed1cc5fbf 100644 --- a/include/linux/lockd/xdr.h +++ b/include/linux/lockd/xdr.h | |||
@@ -25,13 +25,13 @@ struct svc_rqst; | |||
25 | #define NLM_MAXCOOKIELEN 32 | 25 | #define NLM_MAXCOOKIELEN 32 |
26 | #define NLM_MAXSTRLEN 1024 | 26 | #define NLM_MAXSTRLEN 1024 |
27 | 27 | ||
28 | #define nlm_granted __constant_htonl(NLM_LCK_GRANTED) | 28 | #define nlm_granted cpu_to_be32(NLM_LCK_GRANTED) |
29 | #define nlm_lck_denied __constant_htonl(NLM_LCK_DENIED) | 29 | #define nlm_lck_denied cpu_to_be32(NLM_LCK_DENIED) |
30 | #define nlm_lck_denied_nolocks __constant_htonl(NLM_LCK_DENIED_NOLOCKS) | 30 | #define nlm_lck_denied_nolocks cpu_to_be32(NLM_LCK_DENIED_NOLOCKS) |
31 | #define nlm_lck_blocked __constant_htonl(NLM_LCK_BLOCKED) | 31 | #define nlm_lck_blocked cpu_to_be32(NLM_LCK_BLOCKED) |
32 | #define nlm_lck_denied_grace_period __constant_htonl(NLM_LCK_DENIED_GRACE_PERIOD) | 32 | #define nlm_lck_denied_grace_period cpu_to_be32(NLM_LCK_DENIED_GRACE_PERIOD) |
33 | 33 | ||
34 | #define nlm_drop_reply __constant_htonl(30000) | 34 | #define nlm_drop_reply cpu_to_be32(30000) |
35 | 35 | ||
36 | /* Lock info passed via NLM */ | 36 | /* Lock info passed via NLM */ |
37 | struct nlm_lock { | 37 | struct nlm_lock { |
diff --git a/include/linux/lockd/xdr4.h b/include/linux/lockd/xdr4.h index 12bfe09de2b1..7353821341ed 100644 --- a/include/linux/lockd/xdr4.h +++ b/include/linux/lockd/xdr4.h | |||
@@ -15,11 +15,11 @@ | |||
15 | #include <linux/lockd/xdr.h> | 15 | #include <linux/lockd/xdr.h> |
16 | 16 | ||
17 | /* error codes new to NLMv4 */ | 17 | /* error codes new to NLMv4 */ |
18 | #define nlm4_deadlock __constant_htonl(NLM_DEADLCK) | 18 | #define nlm4_deadlock cpu_to_be32(NLM_DEADLCK) |
19 | #define nlm4_rofs __constant_htonl(NLM_ROFS) | 19 | #define nlm4_rofs cpu_to_be32(NLM_ROFS) |
20 | #define nlm4_stale_fh __constant_htonl(NLM_STALE_FH) | 20 | #define nlm4_stale_fh cpu_to_be32(NLM_STALE_FH) |
21 | #define nlm4_fbig __constant_htonl(NLM_FBIG) | 21 | #define nlm4_fbig cpu_to_be32(NLM_FBIG) |
22 | #define nlm4_failed __constant_htonl(NLM_FAILED) | 22 | #define nlm4_failed cpu_to_be32(NLM_FAILED) |
23 | 23 | ||
24 | 24 | ||
25 | 25 | ||
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 3aa5d77c2cdb..5675b63a0631 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
12 | #include <linux/uio.h> | 12 | #include <linux/uio.h> |
13 | #include <linux/notifier.h> | 13 | #include <linux/notifier.h> |
14 | #include <linux/device.h> | ||
14 | 15 | ||
15 | #include <linux/mtd/compatmac.h> | 16 | #include <linux/mtd/compatmac.h> |
16 | #include <mtd/mtd-abi.h> | 17 | #include <mtd/mtd-abi.h> |
@@ -162,6 +163,20 @@ struct mtd_info { | |||
162 | /* We probably shouldn't allow XIP if the unpoint isn't a NULL */ | 163 | /* We probably shouldn't allow XIP if the unpoint isn't a NULL */ |
163 | void (*unpoint) (struct mtd_info *mtd, loff_t from, size_t len); | 164 | void (*unpoint) (struct mtd_info *mtd, loff_t from, size_t len); |
164 | 165 | ||
166 | /* Allow NOMMU mmap() to directly map the device (if not NULL) | ||
167 | * - return the address to which the offset maps | ||
168 | * - return -ENOSYS to indicate refusal to do the mapping | ||
169 | */ | ||
170 | unsigned long (*get_unmapped_area) (struct mtd_info *mtd, | ||
171 | unsigned long len, | ||
172 | unsigned long offset, | ||
173 | unsigned long flags); | ||
174 | |||
175 | /* Backing device capabilities for this device | ||
176 | * - provides mmap capabilities | ||
177 | */ | ||
178 | struct backing_dev_info *backing_dev_info; | ||
179 | |||
165 | 180 | ||
166 | int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); | 181 | int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); |
167 | int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); | 182 | int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); |
@@ -223,6 +238,7 @@ struct mtd_info { | |||
223 | void *priv; | 238 | void *priv; |
224 | 239 | ||
225 | struct module *owner; | 240 | struct module *owner; |
241 | struct device dev; | ||
226 | int usecount; | 242 | int usecount; |
227 | 243 | ||
228 | /* If the driver is something smart, like UBI, it may need to maintain | 244 | /* If the driver is something smart, like UBI, it may need to maintain |
@@ -233,6 +249,11 @@ struct mtd_info { | |||
233 | void (*put_device) (struct mtd_info *mtd); | 249 | void (*put_device) (struct mtd_info *mtd); |
234 | }; | 250 | }; |
235 | 251 | ||
252 | static inline struct mtd_info *dev_to_mtd(struct device *dev) | ||
253 | { | ||
254 | return dev ? container_of(dev, struct mtd_info, dev) : NULL; | ||
255 | } | ||
256 | |||
236 | static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd) | 257 | static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd) |
237 | { | 258 | { |
238 | if (mtd->erasesize_shift) | 259 | if (mtd->erasesize_shift) |
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index db5b63da2a7e..7efb9be34662 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
@@ -43,8 +43,8 @@ extern void nand_wait_ready(struct mtd_info *mtd); | |||
43 | * is supported now. If you add a chip with bigger oobsize/page | 43 | * is supported now. If you add a chip with bigger oobsize/page |
44 | * adjust this accordingly. | 44 | * adjust this accordingly. |
45 | */ | 45 | */ |
46 | #define NAND_MAX_OOBSIZE 64 | 46 | #define NAND_MAX_OOBSIZE 128 |
47 | #define NAND_MAX_PAGESIZE 2048 | 47 | #define NAND_MAX_PAGESIZE 4096 |
48 | 48 | ||
49 | /* | 49 | /* |
50 | * Constants for hardware specific CLE/ALE/NCE function | 50 | * Constants for hardware specific CLE/ALE/NCE function |
diff --git a/include/linux/mtd/partitions.h b/include/linux/mtd/partitions.h index a45dd831b3f8..7535a74083b9 100644 --- a/include/linux/mtd/partitions.h +++ b/include/linux/mtd/partitions.h | |||
@@ -76,4 +76,16 @@ int __devinit of_mtd_parse_partitions(struct device *dev, | |||
76 | struct device_node *node, | 76 | struct device_node *node, |
77 | struct mtd_partition **pparts); | 77 | struct mtd_partition **pparts); |
78 | 78 | ||
79 | #ifdef CONFIG_MTD_PARTITIONS | ||
80 | static inline int mtd_has_partitions(void) { return 1; } | ||
81 | #else | ||
82 | static inline int mtd_has_partitions(void) { return 0; } | ||
83 | #endif | ||
84 | |||
85 | #ifdef CONFIG_MTD_CMDLINE_PARTS | ||
86 | static inline int mtd_has_cmdlinepart(void) { return 1; } | ||
87 | #else | ||
88 | static inline int mtd_has_cmdlinepart(void) { return 0; } | ||
89 | #endif | ||
90 | |||
79 | #endif | 91 | #endif |
diff --git a/include/linux/nfs.h b/include/linux/nfs.h index 54af92c1c70b..214d499718f7 100644 --- a/include/linux/nfs.h +++ b/include/linux/nfs.h | |||
@@ -109,7 +109,6 @@ | |||
109 | NFSERR_FILE_OPEN = 10046, /* v4 */ | 109 | NFSERR_FILE_OPEN = 10046, /* v4 */ |
110 | NFSERR_ADMIN_REVOKED = 10047, /* v4 */ | 110 | NFSERR_ADMIN_REVOKED = 10047, /* v4 */ |
111 | NFSERR_CB_PATH_DOWN = 10048, /* v4 */ | 111 | NFSERR_CB_PATH_DOWN = 10048, /* v4 */ |
112 | NFSERR_REPLAY_ME = 10049 /* v4 */ | ||
113 | }; | 112 | }; |
114 | 113 | ||
115 | /* NFSv2 file types - beware, these are not the same in NFSv3 */ | 114 | /* NFSv2 file types - beware, these are not the same in NFSv3 */ |
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index b912311a56b1..e3f0cbcbd0db 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #define NFS4_FHSIZE 128 | 21 | #define NFS4_FHSIZE 128 |
22 | #define NFS4_MAXPATHLEN PATH_MAX | 22 | #define NFS4_MAXPATHLEN PATH_MAX |
23 | #define NFS4_MAXNAMLEN NAME_MAX | 23 | #define NFS4_MAXNAMLEN NAME_MAX |
24 | #define NFS4_MAX_SESSIONID_LEN 16 | ||
24 | 25 | ||
25 | #define NFS4_ACCESS_READ 0x0001 | 26 | #define NFS4_ACCESS_READ 0x0001 |
26 | #define NFS4_ACCESS_LOOKUP 0x0002 | 27 | #define NFS4_ACCESS_LOOKUP 0x0002 |
@@ -38,6 +39,7 @@ | |||
38 | #define NFS4_OPEN_RESULT_CONFIRM 0x0002 | 39 | #define NFS4_OPEN_RESULT_CONFIRM 0x0002 |
39 | #define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004 | 40 | #define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004 |
40 | 41 | ||
42 | #define NFS4_SHARE_ACCESS_MASK 0x000F | ||
41 | #define NFS4_SHARE_ACCESS_READ 0x0001 | 43 | #define NFS4_SHARE_ACCESS_READ 0x0001 |
42 | #define NFS4_SHARE_ACCESS_WRITE 0x0002 | 44 | #define NFS4_SHARE_ACCESS_WRITE 0x0002 |
43 | #define NFS4_SHARE_ACCESS_BOTH 0x0003 | 45 | #define NFS4_SHARE_ACCESS_BOTH 0x0003 |
@@ -45,6 +47,19 @@ | |||
45 | #define NFS4_SHARE_DENY_WRITE 0x0002 | 47 | #define NFS4_SHARE_DENY_WRITE 0x0002 |
46 | #define NFS4_SHARE_DENY_BOTH 0x0003 | 48 | #define NFS4_SHARE_DENY_BOTH 0x0003 |
47 | 49 | ||
50 | /* nfs41 */ | ||
51 | #define NFS4_SHARE_WANT_MASK 0xFF00 | ||
52 | #define NFS4_SHARE_WANT_NO_PREFERENCE 0x0000 | ||
53 | #define NFS4_SHARE_WANT_READ_DELEG 0x0100 | ||
54 | #define NFS4_SHARE_WANT_WRITE_DELEG 0x0200 | ||
55 | #define NFS4_SHARE_WANT_ANY_DELEG 0x0300 | ||
56 | #define NFS4_SHARE_WANT_NO_DELEG 0x0400 | ||
57 | #define NFS4_SHARE_WANT_CANCEL 0x0500 | ||
58 | |||
59 | #define NFS4_SHARE_WHEN_MASK 0xF0000 | ||
60 | #define NFS4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL 0x10000 | ||
61 | #define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED 0x20000 | ||
62 | |||
48 | #define NFS4_SET_TO_SERVER_TIME 0 | 63 | #define NFS4_SET_TO_SERVER_TIME 0 |
49 | #define NFS4_SET_TO_CLIENT_TIME 1 | 64 | #define NFS4_SET_TO_CLIENT_TIME 1 |
50 | 65 | ||
@@ -88,6 +103,31 @@ | |||
88 | #define NFS4_ACE_GENERIC_EXECUTE 0x001200A0 | 103 | #define NFS4_ACE_GENERIC_EXECUTE 0x001200A0 |
89 | #define NFS4_ACE_MASK_ALL 0x001F01FF | 104 | #define NFS4_ACE_MASK_ALL 0x001F01FF |
90 | 105 | ||
106 | #define EXCHGID4_FLAG_SUPP_MOVED_REFER 0x00000001 | ||
107 | #define EXCHGID4_FLAG_SUPP_MOVED_MIGR 0x00000002 | ||
108 | #define EXCHGID4_FLAG_USE_NON_PNFS 0x00010000 | ||
109 | #define EXCHGID4_FLAG_USE_PNFS_MDS 0x00020000 | ||
110 | #define EXCHGID4_FLAG_USE_PNFS_DS 0x00040000 | ||
111 | #define EXCHGID4_FLAG_UPD_CONFIRMED_REC_A 0x40000000 | ||
112 | #define EXCHGID4_FLAG_CONFIRMED_R 0x80000000 | ||
113 | /* | ||
114 | * Since the validity of these bits depends on whether | ||
115 | * they're set in the argument or response, have separate | ||
116 | * invalid flag masks for arg (_A) and resp (_R). | ||
117 | */ | ||
118 | #define EXCHGID4_FLAG_MASK_A 0x40070003 | ||
119 | #define EXCHGID4_FLAG_MASK_R 0x80070003 | ||
120 | |||
121 | #define SEQ4_STATUS_CB_PATH_DOWN 0x00000001 | ||
122 | #define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING 0x00000002 | ||
123 | #define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED 0x00000004 | ||
124 | #define SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED 0x00000008 | ||
125 | #define SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED 0x00000010 | ||
126 | #define SEQ4_STATUS_ADMIN_STATE_REVOKED 0x00000020 | ||
127 | #define SEQ4_STATUS_RECALLABLE_STATE_REVOKED 0x00000040 | ||
128 | #define SEQ4_STATUS_LEASE_MOVED 0x00000080 | ||
129 | #define SEQ4_STATUS_RESTART_RECLAIM_NEEDED 0x00000100 | ||
130 | |||
91 | #define NFS4_MAX_UINT64 (~(u64)0) | 131 | #define NFS4_MAX_UINT64 (~(u64)0) |
92 | 132 | ||
93 | enum nfs4_acl_whotype { | 133 | enum nfs4_acl_whotype { |
@@ -154,6 +194,28 @@ enum nfs_opnum4 { | |||
154 | OP_VERIFY = 37, | 194 | OP_VERIFY = 37, |
155 | OP_WRITE = 38, | 195 | OP_WRITE = 38, |
156 | OP_RELEASE_LOCKOWNER = 39, | 196 | OP_RELEASE_LOCKOWNER = 39, |
197 | |||
198 | /* nfs41 */ | ||
199 | OP_BACKCHANNEL_CTL = 40, | ||
200 | OP_BIND_CONN_TO_SESSION = 41, | ||
201 | OP_EXCHANGE_ID = 42, | ||
202 | OP_CREATE_SESSION = 43, | ||
203 | OP_DESTROY_SESSION = 44, | ||
204 | OP_FREE_STATEID = 45, | ||
205 | OP_GET_DIR_DELEGATION = 46, | ||
206 | OP_GETDEVICEINFO = 47, | ||
207 | OP_GETDEVICELIST = 48, | ||
208 | OP_LAYOUTCOMMIT = 49, | ||
209 | OP_LAYOUTGET = 50, | ||
210 | OP_LAYOUTRETURN = 51, | ||
211 | OP_SECINFO_NO_NAME = 52, | ||
212 | OP_SEQUENCE = 53, | ||
213 | OP_SET_SSV = 54, | ||
214 | OP_TEST_STATEID = 55, | ||
215 | OP_WANT_DELEGATION = 56, | ||
216 | OP_DESTROY_CLIENTID = 57, | ||
217 | OP_RECLAIM_COMPLETE = 58, | ||
218 | |||
157 | OP_ILLEGAL = 10044, | 219 | OP_ILLEGAL = 10044, |
158 | }; | 220 | }; |
159 | 221 | ||
@@ -230,7 +292,48 @@ enum nfsstat4 { | |||
230 | NFS4ERR_DEADLOCK = 10045, | 292 | NFS4ERR_DEADLOCK = 10045, |
231 | NFS4ERR_FILE_OPEN = 10046, | 293 | NFS4ERR_FILE_OPEN = 10046, |
232 | NFS4ERR_ADMIN_REVOKED = 10047, | 294 | NFS4ERR_ADMIN_REVOKED = 10047, |
233 | NFS4ERR_CB_PATH_DOWN = 10048 | 295 | NFS4ERR_CB_PATH_DOWN = 10048, |
296 | |||
297 | /* nfs41 */ | ||
298 | NFS4ERR_BADIOMODE = 10049, | ||
299 | NFS4ERR_BADLAYOUT = 10050, | ||
300 | NFS4ERR_BAD_SESSION_DIGEST = 10051, | ||
301 | NFS4ERR_BADSESSION = 10052, | ||
302 | NFS4ERR_BADSLOT = 10053, | ||
303 | NFS4ERR_COMPLETE_ALREADY = 10054, | ||
304 | NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055, | ||
305 | NFS4ERR_DELEG_ALREADY_WANTED = 10056, | ||
306 | NFS4ERR_BACK_CHAN_BUSY = 10057, /* backchan reqs outstanding */ | ||
307 | NFS4ERR_LAYOUTTRYLATER = 10058, | ||
308 | NFS4ERR_LAYOUTUNAVAILABLE = 10059, | ||
309 | NFS4ERR_NOMATCHING_LAYOUT = 10060, | ||
310 | NFS4ERR_RECALLCONFLICT = 10061, | ||
311 | NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062, | ||
312 | NFS4ERR_SEQ_MISORDERED = 10063, /* unexpected seq.id in req */ | ||
313 | NFS4ERR_SEQUENCE_POS = 10064, /* [CB_]SEQ. op not 1st op */ | ||
314 | NFS4ERR_REQ_TOO_BIG = 10065, /* request too big */ | ||
315 | NFS4ERR_REP_TOO_BIG = 10066, /* reply too big */ | ||
316 | NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067, /* rep. not all cached */ | ||
317 | NFS4ERR_RETRY_UNCACHED_REP = 10068, /* retry & rep. uncached */ | ||
318 | NFS4ERR_UNSAFE_COMPOUND = 10069, /* retry/recovery too hard */ | ||
319 | NFS4ERR_TOO_MANY_OPS = 10070, /* too many ops in [CB_]COMP */ | ||
320 | NFS4ERR_OP_NOT_IN_SESSION = 10071, /* op needs [CB_]SEQ. op */ | ||
321 | NFS4ERR_HASH_ALG_UNSUPP = 10072, /* hash alg. not supp. */ | ||
322 | /* Error 10073 is unused. */ | ||
323 | NFS4ERR_CLIENTID_BUSY = 10074, /* clientid has state */ | ||
324 | NFS4ERR_PNFS_IO_HOLE = 10075, /* IO to _SPARSE file hole */ | ||
325 | NFS4ERR_SEQ_FALSE_RETRY = 10076, /* retry not origional */ | ||
326 | NFS4ERR_BAD_HIGH_SLOT = 10077, /* sequence arg bad */ | ||
327 | NFS4ERR_DEADSESSION = 10078, /* persistent session dead */ | ||
328 | NFS4ERR_ENCR_ALG_UNSUPP = 10079, /* SSV alg mismatch */ | ||
329 | NFS4ERR_PNFS_NO_LAYOUT = 10080, /* direct I/O with no layout */ | ||
330 | NFS4ERR_NOT_ONLY_OP = 10081, /* bad compound */ | ||
331 | NFS4ERR_WRONG_CRED = 10082, /* permissions:state change */ | ||
332 | NFS4ERR_WRONG_TYPE = 10083, /* current operation mismatch */ | ||
333 | NFS4ERR_DIRDELEG_UNAVAIL = 10084, /* no directory delegation */ | ||
334 | NFS4ERR_REJECT_DELEG = 10085, /* on callback */ | ||
335 | NFS4ERR_RETURNCONFLICT = 10086, /* outstanding layoutreturn */ | ||
336 | NFS4ERR_DELEG_REVOKED = 10087, /* deleg./layout revoked */ | ||
234 | }; | 337 | }; |
235 | 338 | ||
236 | /* | 339 | /* |
@@ -265,7 +368,13 @@ enum opentype4 { | |||
265 | enum createmode4 { | 368 | enum createmode4 { |
266 | NFS4_CREATE_UNCHECKED = 0, | 369 | NFS4_CREATE_UNCHECKED = 0, |
267 | NFS4_CREATE_GUARDED = 1, | 370 | NFS4_CREATE_GUARDED = 1, |
268 | NFS4_CREATE_EXCLUSIVE = 2 | 371 | NFS4_CREATE_EXCLUSIVE = 2, |
372 | /* | ||
373 | * New to NFSv4.1. If session is persistent, | ||
374 | * GUARDED4 MUST be used. Otherwise, use | ||
375 | * EXCLUSIVE4_1 instead of EXCLUSIVE4. | ||
376 | */ | ||
377 | NFS4_CREATE_EXCLUSIVE4_1 = 3 | ||
269 | }; | 378 | }; |
270 | 379 | ||
271 | enum limit_by4 { | 380 | enum limit_by4 { |
@@ -301,6 +410,8 @@ enum lock_type4 { | |||
301 | #define FATTR4_WORD0_UNIQUE_HANDLES (1UL << 9) | 410 | #define FATTR4_WORD0_UNIQUE_HANDLES (1UL << 9) |
302 | #define FATTR4_WORD0_LEASE_TIME (1UL << 10) | 411 | #define FATTR4_WORD0_LEASE_TIME (1UL << 10) |
303 | #define FATTR4_WORD0_RDATTR_ERROR (1UL << 11) | 412 | #define FATTR4_WORD0_RDATTR_ERROR (1UL << 11) |
413 | /* Mandatory in NFSv4.1 */ | ||
414 | #define FATTR4_WORD2_SUPPATTR_EXCLCREAT (1UL << 11) | ||
304 | 415 | ||
305 | /* Recommended Attributes */ | 416 | /* Recommended Attributes */ |
306 | #define FATTR4_WORD0_ACL (1UL << 12) | 417 | #define FATTR4_WORD0_ACL (1UL << 12) |
@@ -391,6 +502,29 @@ enum { | |||
391 | NFSPROC4_CLNT_GETACL, | 502 | NFSPROC4_CLNT_GETACL, |
392 | NFSPROC4_CLNT_SETACL, | 503 | NFSPROC4_CLNT_SETACL, |
393 | NFSPROC4_CLNT_FS_LOCATIONS, | 504 | NFSPROC4_CLNT_FS_LOCATIONS, |
505 | |||
506 | /* nfs41 */ | ||
507 | NFSPROC4_CLNT_EXCHANGE_ID, | ||
508 | NFSPROC4_CLNT_CREATE_SESSION, | ||
509 | NFSPROC4_CLNT_DESTROY_SESSION, | ||
510 | NFSPROC4_CLNT_SEQUENCE, | ||
511 | NFSPROC4_CLNT_GET_LEASE_TIME, | ||
512 | }; | ||
513 | |||
514 | /* nfs41 types */ | ||
515 | struct nfs4_sessionid { | ||
516 | unsigned char data[NFS4_MAX_SESSIONID_LEN]; | ||
517 | }; | ||
518 | |||
519 | /* Create Session Flags */ | ||
520 | #define SESSION4_PERSIST 0x001 | ||
521 | #define SESSION4_BACK_CHAN 0x002 | ||
522 | #define SESSION4_RDMA 0x004 | ||
523 | |||
524 | enum state_protect_how4 { | ||
525 | SP4_NONE = 0, | ||
526 | SP4_MACH_CRED = 1, | ||
527 | SP4_SSV = 2 | ||
394 | }; | 528 | }; |
395 | 529 | ||
396 | #endif | 530 | #endif |
diff --git a/include/linux/nfsd/cache.h b/include/linux/nfsd/cache.h index 04b355c801d8..5bccaab81056 100644 --- a/include/linux/nfsd/cache.h +++ b/include/linux/nfsd/cache.h | |||
@@ -76,4 +76,12 @@ void nfsd_reply_cache_shutdown(void); | |||
76 | int nfsd_cache_lookup(struct svc_rqst *, int); | 76 | int nfsd_cache_lookup(struct svc_rqst *, int); |
77 | void nfsd_cache_update(struct svc_rqst *, int, __be32 *); | 77 | void nfsd_cache_update(struct svc_rqst *, int, __be32 *); |
78 | 78 | ||
79 | #ifdef CONFIG_NFSD_V4 | ||
80 | void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp); | ||
81 | #else /* CONFIG_NFSD_V4 */ | ||
82 | static inline void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp) | ||
83 | { | ||
84 | } | ||
85 | #endif /* CONFIG_NFSD_V4 */ | ||
86 | |||
79 | #endif /* NFSCACHE_H */ | 87 | #endif /* NFSCACHE_H */ |
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h index e19f45991b2e..2b49d676d0c9 100644 --- a/include/linux/nfsd/nfsd.h +++ b/include/linux/nfsd/nfsd.h | |||
@@ -23,7 +23,7 @@ | |||
23 | /* | 23 | /* |
24 | * nfsd version | 24 | * nfsd version |
25 | */ | 25 | */ |
26 | #define NFSD_SUPPORTED_MINOR_VERSION 0 | 26 | #define NFSD_SUPPORTED_MINOR_VERSION 1 |
27 | 27 | ||
28 | /* | 28 | /* |
29 | * Flags for nfsd_permission | 29 | * Flags for nfsd_permission |
@@ -53,6 +53,7 @@ typedef int (*nfsd_dirop_t)(struct inode *, struct dentry *, int, int); | |||
53 | extern struct svc_program nfsd_program; | 53 | extern struct svc_program nfsd_program; |
54 | extern struct svc_version nfsd_version2, nfsd_version3, | 54 | extern struct svc_version nfsd_version2, nfsd_version3, |
55 | nfsd_version4; | 55 | nfsd_version4; |
56 | extern u32 nfsd_supported_minorversion; | ||
56 | extern struct mutex nfsd_mutex; | 57 | extern struct mutex nfsd_mutex; |
57 | extern struct svc_serv *nfsd_serv; | 58 | extern struct svc_serv *nfsd_serv; |
58 | 59 | ||
@@ -105,7 +106,7 @@ void nfsd_close(struct file *); | |||
105 | __be32 nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *, | 106 | __be32 nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *, |
106 | loff_t, struct kvec *, int, unsigned long *); | 107 | loff_t, struct kvec *, int, unsigned long *); |
107 | __be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, | 108 | __be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, |
108 | loff_t, struct kvec *,int, unsigned long, int *); | 109 | loff_t, struct kvec *,int, unsigned long *, int *); |
109 | __be32 nfsd_readlink(struct svc_rqst *, struct svc_fh *, | 110 | __be32 nfsd_readlink(struct svc_rqst *, struct svc_fh *, |
110 | char *, int *); | 111 | char *, int *); |
111 | __be32 nfsd_symlink(struct svc_rqst *, struct svc_fh *, | 112 | __be32 nfsd_symlink(struct svc_rqst *, struct svc_fh *, |
@@ -149,6 +150,7 @@ int nfsd_set_posix_acl(struct svc_fh *, int, struct posix_acl *); | |||
149 | 150 | ||
150 | enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL }; | 151 | enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL }; |
151 | int nfsd_vers(int vers, enum vers_op change); | 152 | int nfsd_vers(int vers, enum vers_op change); |
153 | int nfsd_minorversion(u32 minorversion, enum vers_op change); | ||
152 | void nfsd_reset_versions(void); | 154 | void nfsd_reset_versions(void); |
153 | int nfsd_create_serv(void); | 155 | int nfsd_create_serv(void); |
154 | 156 | ||
@@ -186,78 +188,119 @@ void nfsd_lockd_shutdown(void); | |||
186 | /* | 188 | /* |
187 | * These macros provide pre-xdr'ed values for faster operation. | 189 | * These macros provide pre-xdr'ed values for faster operation. |
188 | */ | 190 | */ |
189 | #define nfs_ok __constant_htonl(NFS_OK) | 191 | #define nfs_ok cpu_to_be32(NFS_OK) |
190 | #define nfserr_perm __constant_htonl(NFSERR_PERM) | 192 | #define nfserr_perm cpu_to_be32(NFSERR_PERM) |
191 | #define nfserr_noent __constant_htonl(NFSERR_NOENT) | 193 | #define nfserr_noent cpu_to_be32(NFSERR_NOENT) |
192 | #define nfserr_io __constant_htonl(NFSERR_IO) | 194 | #define nfserr_io cpu_to_be32(NFSERR_IO) |
193 | #define nfserr_nxio __constant_htonl(NFSERR_NXIO) | 195 | #define nfserr_nxio cpu_to_be32(NFSERR_NXIO) |
194 | #define nfserr_eagain __constant_htonl(NFSERR_EAGAIN) | 196 | #define nfserr_eagain cpu_to_be32(NFSERR_EAGAIN) |
195 | #define nfserr_acces __constant_htonl(NFSERR_ACCES) | 197 | #define nfserr_acces cpu_to_be32(NFSERR_ACCES) |
196 | #define nfserr_exist __constant_htonl(NFSERR_EXIST) | 198 | #define nfserr_exist cpu_to_be32(NFSERR_EXIST) |
197 | #define nfserr_xdev __constant_htonl(NFSERR_XDEV) | 199 | #define nfserr_xdev cpu_to_be32(NFSERR_XDEV) |
198 | #define nfserr_nodev __constant_htonl(NFSERR_NODEV) | 200 | #define nfserr_nodev cpu_to_be32(NFSERR_NODEV) |
199 | #define nfserr_notdir __constant_htonl(NFSERR_NOTDIR) | 201 | #define nfserr_notdir cpu_to_be32(NFSERR_NOTDIR) |
200 | #define nfserr_isdir __constant_htonl(NFSERR_ISDIR) | 202 | #define nfserr_isdir cpu_to_be32(NFSERR_ISDIR) |
201 | #define nfserr_inval __constant_htonl(NFSERR_INVAL) | 203 | #define nfserr_inval cpu_to_be32(NFSERR_INVAL) |
202 | #define nfserr_fbig __constant_htonl(NFSERR_FBIG) | 204 | #define nfserr_fbig cpu_to_be32(NFSERR_FBIG) |
203 | #define nfserr_nospc __constant_htonl(NFSERR_NOSPC) | 205 | #define nfserr_nospc cpu_to_be32(NFSERR_NOSPC) |
204 | #define nfserr_rofs __constant_htonl(NFSERR_ROFS) | 206 | #define nfserr_rofs cpu_to_be32(NFSERR_ROFS) |
205 | #define nfserr_mlink __constant_htonl(NFSERR_MLINK) | 207 | #define nfserr_mlink cpu_to_be32(NFSERR_MLINK) |
206 | #define nfserr_opnotsupp __constant_htonl(NFSERR_OPNOTSUPP) | 208 | #define nfserr_opnotsupp cpu_to_be32(NFSERR_OPNOTSUPP) |
207 | #define nfserr_nametoolong __constant_htonl(NFSERR_NAMETOOLONG) | 209 | #define nfserr_nametoolong cpu_to_be32(NFSERR_NAMETOOLONG) |
208 | #define nfserr_notempty __constant_htonl(NFSERR_NOTEMPTY) | 210 | #define nfserr_notempty cpu_to_be32(NFSERR_NOTEMPTY) |
209 | #define nfserr_dquot __constant_htonl(NFSERR_DQUOT) | 211 | #define nfserr_dquot cpu_to_be32(NFSERR_DQUOT) |
210 | #define nfserr_stale __constant_htonl(NFSERR_STALE) | 212 | #define nfserr_stale cpu_to_be32(NFSERR_STALE) |
211 | #define nfserr_remote __constant_htonl(NFSERR_REMOTE) | 213 | #define nfserr_remote cpu_to_be32(NFSERR_REMOTE) |
212 | #define nfserr_wflush __constant_htonl(NFSERR_WFLUSH) | 214 | #define nfserr_wflush cpu_to_be32(NFSERR_WFLUSH) |
213 | #define nfserr_badhandle __constant_htonl(NFSERR_BADHANDLE) | 215 | #define nfserr_badhandle cpu_to_be32(NFSERR_BADHANDLE) |
214 | #define nfserr_notsync __constant_htonl(NFSERR_NOT_SYNC) | 216 | #define nfserr_notsync cpu_to_be32(NFSERR_NOT_SYNC) |
215 | #define nfserr_badcookie __constant_htonl(NFSERR_BAD_COOKIE) | 217 | #define nfserr_badcookie cpu_to_be32(NFSERR_BAD_COOKIE) |
216 | #define nfserr_notsupp __constant_htonl(NFSERR_NOTSUPP) | 218 | #define nfserr_notsupp cpu_to_be32(NFSERR_NOTSUPP) |
217 | #define nfserr_toosmall __constant_htonl(NFSERR_TOOSMALL) | 219 | #define nfserr_toosmall cpu_to_be32(NFSERR_TOOSMALL) |
218 | #define nfserr_serverfault __constant_htonl(NFSERR_SERVERFAULT) | 220 | #define nfserr_serverfault cpu_to_be32(NFSERR_SERVERFAULT) |
219 | #define nfserr_badtype __constant_htonl(NFSERR_BADTYPE) | 221 | #define nfserr_badtype cpu_to_be32(NFSERR_BADTYPE) |
220 | #define nfserr_jukebox __constant_htonl(NFSERR_JUKEBOX) | 222 | #define nfserr_jukebox cpu_to_be32(NFSERR_JUKEBOX) |
221 | #define nfserr_denied __constant_htonl(NFSERR_DENIED) | 223 | #define nfserr_denied cpu_to_be32(NFSERR_DENIED) |
222 | #define nfserr_deadlock __constant_htonl(NFSERR_DEADLOCK) | 224 | #define nfserr_deadlock cpu_to_be32(NFSERR_DEADLOCK) |
223 | #define nfserr_expired __constant_htonl(NFSERR_EXPIRED) | 225 | #define nfserr_expired cpu_to_be32(NFSERR_EXPIRED) |
224 | #define nfserr_bad_cookie __constant_htonl(NFSERR_BAD_COOKIE) | 226 | #define nfserr_bad_cookie cpu_to_be32(NFSERR_BAD_COOKIE) |
225 | #define nfserr_same __constant_htonl(NFSERR_SAME) | 227 | #define nfserr_same cpu_to_be32(NFSERR_SAME) |
226 | #define nfserr_clid_inuse __constant_htonl(NFSERR_CLID_INUSE) | 228 | #define nfserr_clid_inuse cpu_to_be32(NFSERR_CLID_INUSE) |
227 | #define nfserr_stale_clientid __constant_htonl(NFSERR_STALE_CLIENTID) | 229 | #define nfserr_stale_clientid cpu_to_be32(NFSERR_STALE_CLIENTID) |
228 | #define nfserr_resource __constant_htonl(NFSERR_RESOURCE) | 230 | #define nfserr_resource cpu_to_be32(NFSERR_RESOURCE) |
229 | #define nfserr_moved __constant_htonl(NFSERR_MOVED) | 231 | #define nfserr_moved cpu_to_be32(NFSERR_MOVED) |
230 | #define nfserr_nofilehandle __constant_htonl(NFSERR_NOFILEHANDLE) | 232 | #define nfserr_nofilehandle cpu_to_be32(NFSERR_NOFILEHANDLE) |
231 | #define nfserr_minor_vers_mismatch __constant_htonl(NFSERR_MINOR_VERS_MISMATCH) | 233 | #define nfserr_minor_vers_mismatch cpu_to_be32(NFSERR_MINOR_VERS_MISMATCH) |
232 | #define nfserr_share_denied __constant_htonl(NFSERR_SHARE_DENIED) | 234 | #define nfserr_share_denied cpu_to_be32(NFSERR_SHARE_DENIED) |
233 | #define nfserr_stale_stateid __constant_htonl(NFSERR_STALE_STATEID) | 235 | #define nfserr_stale_stateid cpu_to_be32(NFSERR_STALE_STATEID) |
234 | #define nfserr_old_stateid __constant_htonl(NFSERR_OLD_STATEID) | 236 | #define nfserr_old_stateid cpu_to_be32(NFSERR_OLD_STATEID) |
235 | #define nfserr_bad_stateid __constant_htonl(NFSERR_BAD_STATEID) | 237 | #define nfserr_bad_stateid cpu_to_be32(NFSERR_BAD_STATEID) |
236 | #define nfserr_bad_seqid __constant_htonl(NFSERR_BAD_SEQID) | 238 | #define nfserr_bad_seqid cpu_to_be32(NFSERR_BAD_SEQID) |
237 | #define nfserr_symlink __constant_htonl(NFSERR_SYMLINK) | 239 | #define nfserr_symlink cpu_to_be32(NFSERR_SYMLINK) |
238 | #define nfserr_not_same __constant_htonl(NFSERR_NOT_SAME) | 240 | #define nfserr_not_same cpu_to_be32(NFSERR_NOT_SAME) |
239 | #define nfserr_restorefh __constant_htonl(NFSERR_RESTOREFH) | 241 | #define nfserr_restorefh cpu_to_be32(NFSERR_RESTOREFH) |
240 | #define nfserr_attrnotsupp __constant_htonl(NFSERR_ATTRNOTSUPP) | 242 | #define nfserr_attrnotsupp cpu_to_be32(NFSERR_ATTRNOTSUPP) |
241 | #define nfserr_bad_xdr __constant_htonl(NFSERR_BAD_XDR) | 243 | #define nfserr_bad_xdr cpu_to_be32(NFSERR_BAD_XDR) |
242 | #define nfserr_openmode __constant_htonl(NFSERR_OPENMODE) | 244 | #define nfserr_openmode cpu_to_be32(NFSERR_OPENMODE) |
243 | #define nfserr_locks_held __constant_htonl(NFSERR_LOCKS_HELD) | 245 | #define nfserr_locks_held cpu_to_be32(NFSERR_LOCKS_HELD) |
244 | #define nfserr_op_illegal __constant_htonl(NFSERR_OP_ILLEGAL) | 246 | #define nfserr_op_illegal cpu_to_be32(NFSERR_OP_ILLEGAL) |
245 | #define nfserr_grace __constant_htonl(NFSERR_GRACE) | 247 | #define nfserr_grace cpu_to_be32(NFSERR_GRACE) |
246 | #define nfserr_no_grace __constant_htonl(NFSERR_NO_GRACE) | 248 | #define nfserr_no_grace cpu_to_be32(NFSERR_NO_GRACE) |
247 | #define nfserr_reclaim_bad __constant_htonl(NFSERR_RECLAIM_BAD) | 249 | #define nfserr_reclaim_bad cpu_to_be32(NFSERR_RECLAIM_BAD) |
248 | #define nfserr_badname __constant_htonl(NFSERR_BADNAME) | 250 | #define nfserr_badname cpu_to_be32(NFSERR_BADNAME) |
249 | #define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN) | 251 | #define nfserr_cb_path_down cpu_to_be32(NFSERR_CB_PATH_DOWN) |
250 | #define nfserr_locked __constant_htonl(NFSERR_LOCKED) | 252 | #define nfserr_locked cpu_to_be32(NFSERR_LOCKED) |
251 | #define nfserr_wrongsec __constant_htonl(NFSERR_WRONGSEC) | 253 | #define nfserr_wrongsec cpu_to_be32(NFSERR_WRONGSEC) |
252 | #define nfserr_replay_me __constant_htonl(NFSERR_REPLAY_ME) | 254 | #define nfserr_badiomode cpu_to_be32(NFS4ERR_BADIOMODE) |
255 | #define nfserr_badlayout cpu_to_be32(NFS4ERR_BADLAYOUT) | ||
256 | #define nfserr_bad_session_digest cpu_to_be32(NFS4ERR_BAD_SESSION_DIGEST) | ||
257 | #define nfserr_badsession cpu_to_be32(NFS4ERR_BADSESSION) | ||
258 | #define nfserr_badslot cpu_to_be32(NFS4ERR_BADSLOT) | ||
259 | #define nfserr_complete_already cpu_to_be32(NFS4ERR_COMPLETE_ALREADY) | ||
260 | #define nfserr_conn_not_bound_to_session cpu_to_be32(NFS4ERR_CONN_NOT_BOUND_TO_SESSION) | ||
261 | #define nfserr_deleg_already_wanted cpu_to_be32(NFS4ERR_DELEG_ALREADY_WANTED) | ||
262 | #define nfserr_back_chan_busy cpu_to_be32(NFS4ERR_BACK_CHAN_BUSY) | ||
263 | #define nfserr_layouttrylater cpu_to_be32(NFS4ERR_LAYOUTTRYLATER) | ||
264 | #define nfserr_layoutunavailable cpu_to_be32(NFS4ERR_LAYOUTUNAVAILABLE) | ||
265 | #define nfserr_nomatching_layout cpu_to_be32(NFS4ERR_NOMATCHING_LAYOUT) | ||
266 | #define nfserr_recallconflict cpu_to_be32(NFS4ERR_RECALLCONFLICT) | ||
267 | #define nfserr_unknown_layouttype cpu_to_be32(NFS4ERR_UNKNOWN_LAYOUTTYPE) | ||
268 | #define nfserr_seq_misordered cpu_to_be32(NFS4ERR_SEQ_MISORDERED) | ||
269 | #define nfserr_sequence_pos cpu_to_be32(NFS4ERR_SEQUENCE_POS) | ||
270 | #define nfserr_req_too_big cpu_to_be32(NFS4ERR_REQ_TOO_BIG) | ||
271 | #define nfserr_rep_too_big cpu_to_be32(NFS4ERR_REP_TOO_BIG) | ||
272 | #define nfserr_rep_too_big_to_cache cpu_to_be32(NFS4ERR_REP_TOO_BIG_TO_CACHE) | ||
273 | #define nfserr_retry_uncached_rep cpu_to_be32(NFS4ERR_RETRY_UNCACHED_REP) | ||
274 | #define nfserr_unsafe_compound cpu_to_be32(NFS4ERR_UNSAFE_COMPOUND) | ||
275 | #define nfserr_too_many_ops cpu_to_be32(NFS4ERR_TOO_MANY_OPS) | ||
276 | #define nfserr_op_not_in_session cpu_to_be32(NFS4ERR_OP_NOT_IN_SESSION) | ||
277 | #define nfserr_hash_alg_unsupp cpu_to_be32(NFS4ERR_HASH_ALG_UNSUPP) | ||
278 | #define nfserr_clientid_busy cpu_to_be32(NFS4ERR_CLIENTID_BUSY) | ||
279 | #define nfserr_pnfs_io_hole cpu_to_be32(NFS4ERR_PNFS_IO_HOLE) | ||
280 | #define nfserr_seq_false_retry cpu_to_be32(NFS4ERR_SEQ_FALSE_RETRY) | ||
281 | #define nfserr_bad_high_slot cpu_to_be32(NFS4ERR_BAD_HIGH_SLOT) | ||
282 | #define nfserr_deadsession cpu_to_be32(NFS4ERR_DEADSESSION) | ||
283 | #define nfserr_encr_alg_unsupp cpu_to_be32(NFS4ERR_ENCR_ALG_UNSUPP) | ||
284 | #define nfserr_pnfs_no_layout cpu_to_be32(NFS4ERR_PNFS_NO_LAYOUT) | ||
285 | #define nfserr_not_only_op cpu_to_be32(NFS4ERR_NOT_ONLY_OP) | ||
286 | #define nfserr_wrong_cred cpu_to_be32(NFS4ERR_WRONG_CRED) | ||
287 | #define nfserr_wrong_type cpu_to_be32(NFS4ERR_WRONG_TYPE) | ||
288 | #define nfserr_dirdeleg_unavail cpu_to_be32(NFS4ERR_DIRDELEG_UNAVAIL) | ||
289 | #define nfserr_reject_deleg cpu_to_be32(NFS4ERR_REJECT_DELEG) | ||
290 | #define nfserr_returnconflict cpu_to_be32(NFS4ERR_RETURNCONFLICT) | ||
291 | #define nfserr_deleg_revoked cpu_to_be32(NFS4ERR_DELEG_REVOKED) | ||
253 | 292 | ||
254 | /* error codes for internal use */ | 293 | /* error codes for internal use */ |
255 | /* if a request fails due to kmalloc failure, it gets dropped. | 294 | /* if a request fails due to kmalloc failure, it gets dropped. |
256 | * Client should resend eventually | 295 | * Client should resend eventually |
257 | */ | 296 | */ |
258 | #define nfserr_dropit __constant_htonl(30000) | 297 | #define nfserr_dropit cpu_to_be32(30000) |
259 | /* end-of-file indicator in readdir */ | 298 | /* end-of-file indicator in readdir */ |
260 | #define nfserr_eof __constant_htonl(30001) | 299 | #define nfserr_eof cpu_to_be32(30001) |
300 | /* replay detected */ | ||
301 | #define nfserr_replay_me cpu_to_be32(11001) | ||
302 | /* nfs41 replay detected */ | ||
303 | #define nfserr_replay_cache cpu_to_be32(11002) | ||
261 | 304 | ||
262 | /* Check for dir entries '.' and '..' */ | 305 | /* Check for dir entries '.' and '..' */ |
263 | #define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.')) | 306 | #define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.')) |
@@ -300,7 +343,7 @@ extern struct timeval nfssvc_boot; | |||
300 | * TIME_BACKUP (unlikely to be supported any time soon) | 343 | * TIME_BACKUP (unlikely to be supported any time soon) |
301 | * TIME_CREATE (unlikely to be supported any time soon) | 344 | * TIME_CREATE (unlikely to be supported any time soon) |
302 | */ | 345 | */ |
303 | #define NFSD_SUPPORTED_ATTRS_WORD0 \ | 346 | #define NFSD4_SUPPORTED_ATTRS_WORD0 \ |
304 | (FATTR4_WORD0_SUPPORTED_ATTRS | FATTR4_WORD0_TYPE | FATTR4_WORD0_FH_EXPIRE_TYPE \ | 347 | (FATTR4_WORD0_SUPPORTED_ATTRS | FATTR4_WORD0_TYPE | FATTR4_WORD0_FH_EXPIRE_TYPE \ |
305 | | FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE | FATTR4_WORD0_LINK_SUPPORT \ | 348 | | FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE | FATTR4_WORD0_LINK_SUPPORT \ |
306 | | FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR | FATTR4_WORD0_FSID \ | 349 | | FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR | FATTR4_WORD0_FSID \ |
@@ -312,7 +355,7 @@ extern struct timeval nfssvc_boot; | |||
312 | | FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \ | 355 | | FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \ |
313 | | FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL) | 356 | | FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL) |
314 | 357 | ||
315 | #define NFSD_SUPPORTED_ATTRS_WORD1 \ | 358 | #define NFSD4_SUPPORTED_ATTRS_WORD1 \ |
316 | (FATTR4_WORD1_MODE | FATTR4_WORD1_NO_TRUNC | FATTR4_WORD1_NUMLINKS \ | 359 | (FATTR4_WORD1_MODE | FATTR4_WORD1_NO_TRUNC | FATTR4_WORD1_NUMLINKS \ |
317 | | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \ | 360 | | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \ |
318 | | FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \ | 361 | | FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \ |
@@ -320,6 +363,35 @@ extern struct timeval nfssvc_boot; | |||
320 | | FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA \ | 363 | | FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA \ |
321 | | FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID) | 364 | | FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID) |
322 | 365 | ||
366 | #define NFSD4_SUPPORTED_ATTRS_WORD2 0 | ||
367 | |||
368 | #define NFSD4_1_SUPPORTED_ATTRS_WORD0 \ | ||
369 | NFSD4_SUPPORTED_ATTRS_WORD0 | ||
370 | |||
371 | #define NFSD4_1_SUPPORTED_ATTRS_WORD1 \ | ||
372 | NFSD4_SUPPORTED_ATTRS_WORD1 | ||
373 | |||
374 | #define NFSD4_1_SUPPORTED_ATTRS_WORD2 \ | ||
375 | (NFSD4_SUPPORTED_ATTRS_WORD2 | FATTR4_WORD2_SUPPATTR_EXCLCREAT) | ||
376 | |||
377 | static inline u32 nfsd_suppattrs0(u32 minorversion) | ||
378 | { | ||
379 | return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD0 | ||
380 | : NFSD4_SUPPORTED_ATTRS_WORD0; | ||
381 | } | ||
382 | |||
383 | static inline u32 nfsd_suppattrs1(u32 minorversion) | ||
384 | { | ||
385 | return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD1 | ||
386 | : NFSD4_SUPPORTED_ATTRS_WORD1; | ||
387 | } | ||
388 | |||
389 | static inline u32 nfsd_suppattrs2(u32 minorversion) | ||
390 | { | ||
391 | return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD2 | ||
392 | : NFSD4_SUPPORTED_ATTRS_WORD2; | ||
393 | } | ||
394 | |||
323 | /* These will return ERR_INVAL if specified in GETATTR or READDIR. */ | 395 | /* These will return ERR_INVAL if specified in GETATTR or READDIR. */ |
324 | #define NFSD_WRITEONLY_ATTRS_WORD1 \ | 396 | #define NFSD_WRITEONLY_ATTRS_WORD1 \ |
325 | (FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET) | 397 | (FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET) |
@@ -330,6 +402,19 @@ extern struct timeval nfssvc_boot; | |||
330 | #define NFSD_WRITEABLE_ATTRS_WORD1 \ | 402 | #define NFSD_WRITEABLE_ATTRS_WORD1 \ |
331 | (FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP \ | 403 | (FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP \ |
332 | | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET) | 404 | | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET) |
405 | #define NFSD_WRITEABLE_ATTRS_WORD2 0 | ||
406 | |||
407 | #define NFSD_SUPPATTR_EXCLCREAT_WORD0 \ | ||
408 | NFSD_WRITEABLE_ATTRS_WORD0 | ||
409 | /* | ||
410 | * we currently store the exclusive create verifier in the v_{a,m}time | ||
411 | * attributes so the client can't set these at create time using EXCLUSIVE4_1 | ||
412 | */ | ||
413 | #define NFSD_SUPPATTR_EXCLCREAT_WORD1 \ | ||
414 | (NFSD_WRITEABLE_ATTRS_WORD1 & \ | ||
415 | ~(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)) | ||
416 | #define NFSD_SUPPATTR_EXCLCREAT_WORD2 \ | ||
417 | NFSD_WRITEABLE_ATTRS_WORD2 | ||
333 | 418 | ||
334 | #endif /* CONFIG_NFSD_V4 */ | 419 | #endif /* CONFIG_NFSD_V4 */ |
335 | 420 | ||
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h index fa317f6c154b..afa19016c4a8 100644 --- a/include/linux/nfsd/nfsfh.h +++ b/include/linux/nfsd/nfsfh.h | |||
@@ -269,6 +269,13 @@ fh_copy(struct svc_fh *dst, struct svc_fh *src) | |||
269 | return dst; | 269 | return dst; |
270 | } | 270 | } |
271 | 271 | ||
272 | static inline void | ||
273 | fh_copy_shallow(struct knfsd_fh *dst, struct knfsd_fh *src) | ||
274 | { | ||
275 | dst->fh_size = src->fh_size; | ||
276 | memcpy(&dst->fh_base, &src->fh_base, src->fh_size); | ||
277 | } | ||
278 | |||
272 | static __inline__ struct svc_fh * | 279 | static __inline__ struct svc_fh * |
273 | fh_init(struct svc_fh *fhp, int maxsize) | 280 | fh_init(struct svc_fh *fhp, int maxsize) |
274 | { | 281 | { |
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h index 128298c0362d..4d61c873feed 100644 --- a/include/linux/nfsd/state.h +++ b/include/linux/nfsd/state.h | |||
@@ -66,8 +66,7 @@ struct nfs4_cb_recall { | |||
66 | u32 cbr_ident; | 66 | u32 cbr_ident; |
67 | int cbr_trunc; | 67 | int cbr_trunc; |
68 | stateid_t cbr_stateid; | 68 | stateid_t cbr_stateid; |
69 | u32 cbr_fhlen; | 69 | struct knfsd_fh cbr_fh; |
70 | char cbr_fhval[NFS4_FHSIZE]; | ||
71 | struct nfs4_delegation *cbr_dp; | 70 | struct nfs4_delegation *cbr_dp; |
72 | }; | 71 | }; |
73 | 72 | ||
@@ -86,8 +85,7 @@ struct nfs4_delegation { | |||
86 | }; | 85 | }; |
87 | 86 | ||
88 | #define dl_stateid dl_recall.cbr_stateid | 87 | #define dl_stateid dl_recall.cbr_stateid |
89 | #define dl_fhlen dl_recall.cbr_fhlen | 88 | #define dl_fh dl_recall.cbr_fh |
90 | #define dl_fhval dl_recall.cbr_fhval | ||
91 | 89 | ||
92 | /* client delegation callback info */ | 90 | /* client delegation callback info */ |
93 | struct nfs4_callback { | 91 | struct nfs4_callback { |
@@ -101,6 +99,64 @@ struct nfs4_callback { | |||
101 | struct rpc_clnt * cb_client; | 99 | struct rpc_clnt * cb_client; |
102 | }; | 100 | }; |
103 | 101 | ||
102 | /* Maximum number of slots per session. 128 is useful for long haul TCP */ | ||
103 | #define NFSD_MAX_SLOTS_PER_SESSION 128 | ||
104 | /* Maximum number of pages per slot cache entry */ | ||
105 | #define NFSD_PAGES_PER_SLOT 1 | ||
106 | /* Maximum number of operations per session compound */ | ||
107 | #define NFSD_MAX_OPS_PER_COMPOUND 16 | ||
108 | |||
109 | struct nfsd4_cache_entry { | ||
110 | __be32 ce_status; | ||
111 | struct kvec ce_datav; /* encoded NFSv4.1 data in rq_res.head[0] */ | ||
112 | struct page *ce_respages[NFSD_PAGES_PER_SLOT + 1]; | ||
113 | int ce_cachethis; | ||
114 | short ce_resused; | ||
115 | int ce_opcnt; | ||
116 | int ce_rpchdrlen; | ||
117 | }; | ||
118 | |||
119 | struct nfsd4_slot { | ||
120 | bool sl_inuse; | ||
121 | u32 sl_seqid; | ||
122 | struct nfsd4_cache_entry sl_cache_entry; | ||
123 | }; | ||
124 | |||
125 | struct nfsd4_session { | ||
126 | struct kref se_ref; | ||
127 | struct list_head se_hash; /* hash by sessionid */ | ||
128 | struct list_head se_perclnt; | ||
129 | u32 se_flags; | ||
130 | struct nfs4_client *se_client; /* for expire_client */ | ||
131 | struct nfs4_sessionid se_sessionid; | ||
132 | u32 se_fmaxreq_sz; | ||
133 | u32 se_fmaxresp_sz; | ||
134 | u32 se_fmaxresp_cached; | ||
135 | u32 se_fmaxops; | ||
136 | u32 se_fnumslots; | ||
137 | struct nfsd4_slot se_slots[]; /* forward channel slots */ | ||
138 | }; | ||
139 | |||
140 | static inline void | ||
141 | nfsd4_put_session(struct nfsd4_session *ses) | ||
142 | { | ||
143 | extern void free_session(struct kref *kref); | ||
144 | kref_put(&ses->se_ref, free_session); | ||
145 | } | ||
146 | |||
147 | static inline void | ||
148 | nfsd4_get_session(struct nfsd4_session *ses) | ||
149 | { | ||
150 | kref_get(&ses->se_ref); | ||
151 | } | ||
152 | |||
153 | /* formatted contents of nfs4_sessionid */ | ||
154 | struct nfsd4_sessionid { | ||
155 | clientid_t clientid; | ||
156 | u32 sequence; | ||
157 | u32 reserved; | ||
158 | }; | ||
159 | |||
104 | #define HEXDIR_LEN 33 /* hex version of 16 byte md5 of cl_name plus '\0' */ | 160 | #define HEXDIR_LEN 33 /* hex version of 16 byte md5 of cl_name plus '\0' */ |
105 | 161 | ||
106 | /* | 162 | /* |
@@ -132,6 +188,12 @@ struct nfs4_client { | |||
132 | struct nfs4_callback cl_callback; /* callback info */ | 188 | struct nfs4_callback cl_callback; /* callback info */ |
133 | atomic_t cl_count; /* ref count */ | 189 | atomic_t cl_count; /* ref count */ |
134 | u32 cl_firststate; /* recovery dir creation */ | 190 | u32 cl_firststate; /* recovery dir creation */ |
191 | |||
192 | /* for nfs41 */ | ||
193 | struct list_head cl_sessions; | ||
194 | struct nfsd4_slot cl_slot; /* create_session slot */ | ||
195 | u32 cl_exchange_flags; | ||
196 | struct nfs4_sessionid cl_sessionid; | ||
135 | }; | 197 | }; |
136 | 198 | ||
137 | /* struct nfs4_client_reset | 199 | /* struct nfs4_client_reset |
@@ -168,8 +230,7 @@ struct nfs4_replay { | |||
168 | unsigned int rp_buflen; | 230 | unsigned int rp_buflen; |
169 | char *rp_buf; | 231 | char *rp_buf; |
170 | unsigned intrp_allocated; | 232 | unsigned intrp_allocated; |
171 | int rp_openfh_len; | 233 | struct knfsd_fh rp_openfh; |
172 | char rp_openfh[NFS4_FHSIZE]; | ||
173 | char rp_ibuf[NFSD4_REPLAY_ISIZE]; | 234 | char rp_ibuf[NFSD4_REPLAY_ISIZE]; |
174 | }; | 235 | }; |
175 | 236 | ||
@@ -217,7 +278,7 @@ struct nfs4_stateowner { | |||
217 | * share_acces, share_deny on the file. | 278 | * share_acces, share_deny on the file. |
218 | */ | 279 | */ |
219 | struct nfs4_file { | 280 | struct nfs4_file { |
220 | struct kref fi_ref; | 281 | atomic_t fi_ref; |
221 | struct list_head fi_hash; /* hash by "struct inode *" */ | 282 | struct list_head fi_hash; /* hash by "struct inode *" */ |
222 | struct list_head fi_stateids; | 283 | struct list_head fi_stateids; |
223 | struct list_head fi_delegations; | 284 | struct list_head fi_delegations; |
@@ -259,14 +320,13 @@ struct nfs4_stateid { | |||
259 | }; | 320 | }; |
260 | 321 | ||
261 | /* flags for preprocess_seqid_op() */ | 322 | /* flags for preprocess_seqid_op() */ |
262 | #define CHECK_FH 0x00000001 | 323 | #define HAS_SESSION 0x00000001 |
263 | #define CONFIRM 0x00000002 | 324 | #define CONFIRM 0x00000002 |
264 | #define OPEN_STATE 0x00000004 | 325 | #define OPEN_STATE 0x00000004 |
265 | #define LOCK_STATE 0x00000008 | 326 | #define LOCK_STATE 0x00000008 |
266 | #define RD_STATE 0x00000010 | 327 | #define RD_STATE 0x00000010 |
267 | #define WR_STATE 0x00000020 | 328 | #define WR_STATE 0x00000020 |
268 | #define CLOSE_STATE 0x00000040 | 329 | #define CLOSE_STATE 0x00000040 |
269 | #define DELEG_RET 0x00000080 | ||
270 | 330 | ||
271 | #define seqid_mutating_err(err) \ | 331 | #define seqid_mutating_err(err) \ |
272 | (((err) != nfserr_stale_clientid) && \ | 332 | (((err) != nfserr_stale_clientid) && \ |
@@ -274,7 +334,9 @@ struct nfs4_stateid { | |||
274 | ((err) != nfserr_stale_stateid) && \ | 334 | ((err) != nfserr_stale_stateid) && \ |
275 | ((err) != nfserr_bad_stateid)) | 335 | ((err) != nfserr_bad_stateid)) |
276 | 336 | ||
277 | extern __be32 nfs4_preprocess_stateid_op(struct svc_fh *current_fh, | 337 | struct nfsd4_compound_state; |
338 | |||
339 | extern __be32 nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate, | ||
278 | stateid_t *stateid, int flags, struct file **filp); | 340 | stateid_t *stateid, int flags, struct file **filp); |
279 | extern void nfs4_lock_state(void); | 341 | extern void nfs4_lock_state(void); |
280 | extern void nfs4_unlock_state(void); | 342 | extern void nfs4_unlock_state(void); |
@@ -290,7 +352,7 @@ extern void nfsd4_init_recdir(char *recdir_name); | |||
290 | extern int nfsd4_recdir_load(void); | 352 | extern int nfsd4_recdir_load(void); |
291 | extern void nfsd4_shutdown_recdir(void); | 353 | extern void nfsd4_shutdown_recdir(void); |
292 | extern int nfs4_client_to_reclaim(const char *name); | 354 | extern int nfs4_client_to_reclaim(const char *name); |
293 | extern int nfs4_has_reclaimed_state(const char *name); | 355 | extern int nfs4_has_reclaimed_state(const char *name, bool use_exchange_id); |
294 | extern void nfsd4_recdir_purge_old(void); | 356 | extern void nfsd4_recdir_purge_old(void); |
295 | extern int nfsd4_create_clid_dir(struct nfs4_client *clp); | 357 | extern int nfsd4_create_clid_dir(struct nfs4_client *clp); |
296 | extern void nfsd4_remove_clid_dir(struct nfs4_client *clp); | 358 | extern void nfsd4_remove_clid_dir(struct nfs4_client *clp); |
diff --git a/include/linux/nfsd/stats.h b/include/linux/nfsd/stats.h index 7678cfbe9960..2693ef647df6 100644 --- a/include/linux/nfsd/stats.h +++ b/include/linux/nfsd/stats.h | |||
@@ -11,6 +11,11 @@ | |||
11 | 11 | ||
12 | #include <linux/nfs4.h> | 12 | #include <linux/nfs4.h> |
13 | 13 | ||
14 | /* thread usage wraps very million seconds (approx one fortnight) */ | ||
15 | #define NFSD_USAGE_WRAP (HZ*1000000) | ||
16 | |||
17 | #ifdef __KERNEL__ | ||
18 | |||
14 | struct nfsd_stats { | 19 | struct nfsd_stats { |
15 | unsigned int rchits; /* repcache hits */ | 20 | unsigned int rchits; /* repcache hits */ |
16 | unsigned int rcmisses; /* repcache hits */ | 21 | unsigned int rcmisses; /* repcache hits */ |
@@ -35,10 +40,6 @@ struct nfsd_stats { | |||
35 | 40 | ||
36 | }; | 41 | }; |
37 | 42 | ||
38 | /* thread usage wraps very million seconds (approx one fortnight) */ | ||
39 | #define NFSD_USAGE_WRAP (HZ*1000000) | ||
40 | |||
41 | #ifdef __KERNEL__ | ||
42 | 43 | ||
43 | extern struct nfsd_stats nfsdstats; | 44 | extern struct nfsd_stats nfsdstats; |
44 | extern struct svc_stat nfsd_svcstats; | 45 | extern struct svc_stat nfsd_svcstats; |
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h index 27bd3e38ec5a..f80d6013fdc3 100644 --- a/include/linux/nfsd/xdr4.h +++ b/include/linux/nfsd/xdr4.h | |||
@@ -45,10 +45,22 @@ | |||
45 | #define XDR_LEN(n) (((n) + 3) & ~3) | 45 | #define XDR_LEN(n) (((n) + 3) & ~3) |
46 | 46 | ||
47 | struct nfsd4_compound_state { | 47 | struct nfsd4_compound_state { |
48 | struct svc_fh current_fh; | 48 | struct svc_fh current_fh; |
49 | struct svc_fh save_fh; | 49 | struct svc_fh save_fh; |
50 | struct nfs4_stateowner *replay_owner; | 50 | struct nfs4_stateowner *replay_owner; |
51 | }; | 51 | /* For sessions DRC */ |
52 | struct nfsd4_session *session; | ||
53 | struct nfsd4_slot *slot; | ||
54 | __be32 *statp; | ||
55 | size_t iovlen; | ||
56 | u32 minorversion; | ||
57 | u32 status; | ||
58 | }; | ||
59 | |||
60 | static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs) | ||
61 | { | ||
62 | return cs->slot != NULL; | ||
63 | } | ||
52 | 64 | ||
53 | struct nfsd4_change_info { | 65 | struct nfsd4_change_info { |
54 | u32 atomic; | 66 | u32 atomic; |
@@ -90,7 +102,7 @@ struct nfsd4_create { | |||
90 | u32 specdata2; | 102 | u32 specdata2; |
91 | } dev; /* NF4BLK, NF4CHR */ | 103 | } dev; /* NF4BLK, NF4CHR */ |
92 | } u; | 104 | } u; |
93 | u32 cr_bmval[2]; /* request */ | 105 | u32 cr_bmval[3]; /* request */ |
94 | struct iattr cr_iattr; /* request */ | 106 | struct iattr cr_iattr; /* request */ |
95 | struct nfsd4_change_info cr_cinfo; /* response */ | 107 | struct nfsd4_change_info cr_cinfo; /* response */ |
96 | struct nfs4_acl *cr_acl; | 108 | struct nfs4_acl *cr_acl; |
@@ -105,7 +117,7 @@ struct nfsd4_delegreturn { | |||
105 | }; | 117 | }; |
106 | 118 | ||
107 | struct nfsd4_getattr { | 119 | struct nfsd4_getattr { |
108 | u32 ga_bmval[2]; /* request */ | 120 | u32 ga_bmval[3]; /* request */ |
109 | struct svc_fh *ga_fhp; /* response */ | 121 | struct svc_fh *ga_fhp; /* response */ |
110 | }; | 122 | }; |
111 | 123 | ||
@@ -206,11 +218,9 @@ struct nfsd4_open { | |||
206 | stateid_t op_delegate_stateid; /* request - response */ | 218 | stateid_t op_delegate_stateid; /* request - response */ |
207 | u32 op_create; /* request */ | 219 | u32 op_create; /* request */ |
208 | u32 op_createmode; /* request */ | 220 | u32 op_createmode; /* request */ |
209 | u32 op_bmval[2]; /* request */ | 221 | u32 op_bmval[3]; /* request */ |
210 | union { /* request */ | 222 | struct iattr iattr; /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */ |
211 | struct iattr iattr; /* UNCHECKED4,GUARDED4 */ | 223 | nfs4_verifier verf; /* EXCLUSIVE4 */ |
212 | nfs4_verifier verf; /* EXCLUSIVE4 */ | ||
213 | } u; | ||
214 | clientid_t op_clientid; /* request */ | 224 | clientid_t op_clientid; /* request */ |
215 | struct xdr_netobj op_owner; /* request */ | 225 | struct xdr_netobj op_owner; /* request */ |
216 | u32 op_seqid; /* request */ | 226 | u32 op_seqid; /* request */ |
@@ -224,8 +234,8 @@ struct nfsd4_open { | |||
224 | struct nfs4_stateowner *op_stateowner; /* used during processing */ | 234 | struct nfs4_stateowner *op_stateowner; /* used during processing */ |
225 | struct nfs4_acl *op_acl; | 235 | struct nfs4_acl *op_acl; |
226 | }; | 236 | }; |
227 | #define op_iattr u.iattr | 237 | #define op_iattr iattr |
228 | #define op_verf u.verf | 238 | #define op_verf verf |
229 | 239 | ||
230 | struct nfsd4_open_confirm { | 240 | struct nfsd4_open_confirm { |
231 | stateid_t oc_req_stateid /* request */; | 241 | stateid_t oc_req_stateid /* request */; |
@@ -259,7 +269,7 @@ struct nfsd4_readdir { | |||
259 | nfs4_verifier rd_verf; /* request */ | 269 | nfs4_verifier rd_verf; /* request */ |
260 | u32 rd_dircount; /* request */ | 270 | u32 rd_dircount; /* request */ |
261 | u32 rd_maxcount; /* request */ | 271 | u32 rd_maxcount; /* request */ |
262 | u32 rd_bmval[2]; /* request */ | 272 | u32 rd_bmval[3]; /* request */ |
263 | struct svc_rqst *rd_rqstp; /* response */ | 273 | struct svc_rqst *rd_rqstp; /* response */ |
264 | struct svc_fh * rd_fhp; /* response */ | 274 | struct svc_fh * rd_fhp; /* response */ |
265 | 275 | ||
@@ -301,7 +311,7 @@ struct nfsd4_secinfo { | |||
301 | 311 | ||
302 | struct nfsd4_setattr { | 312 | struct nfsd4_setattr { |
303 | stateid_t sa_stateid; /* request */ | 313 | stateid_t sa_stateid; /* request */ |
304 | u32 sa_bmval[2]; /* request */ | 314 | u32 sa_bmval[3]; /* request */ |
305 | struct iattr sa_iattr; /* request */ | 315 | struct iattr sa_iattr; /* request */ |
306 | struct nfs4_acl *sa_acl; | 316 | struct nfs4_acl *sa_acl; |
307 | }; | 317 | }; |
@@ -327,7 +337,7 @@ struct nfsd4_setclientid_confirm { | |||
327 | 337 | ||
328 | /* also used for NVERIFY */ | 338 | /* also used for NVERIFY */ |
329 | struct nfsd4_verify { | 339 | struct nfsd4_verify { |
330 | u32 ve_bmval[2]; /* request */ | 340 | u32 ve_bmval[3]; /* request */ |
331 | u32 ve_attrlen; /* request */ | 341 | u32 ve_attrlen; /* request */ |
332 | char * ve_attrval; /* request */ | 342 | char * ve_attrval; /* request */ |
333 | }; | 343 | }; |
@@ -344,6 +354,54 @@ struct nfsd4_write { | |||
344 | nfs4_verifier wr_verifier; /* response */ | 354 | nfs4_verifier wr_verifier; /* response */ |
345 | }; | 355 | }; |
346 | 356 | ||
357 | struct nfsd4_exchange_id { | ||
358 | nfs4_verifier verifier; | ||
359 | struct xdr_netobj clname; | ||
360 | u32 flags; | ||
361 | clientid_t clientid; | ||
362 | u32 seqid; | ||
363 | int spa_how; | ||
364 | }; | ||
365 | |||
366 | struct nfsd4_channel_attrs { | ||
367 | u32 headerpadsz; | ||
368 | u32 maxreq_sz; | ||
369 | u32 maxresp_sz; | ||
370 | u32 maxresp_cached; | ||
371 | u32 maxops; | ||
372 | u32 maxreqs; | ||
373 | u32 nr_rdma_attrs; | ||
374 | u32 rdma_attrs; | ||
375 | }; | ||
376 | |||
377 | struct nfsd4_create_session { | ||
378 | clientid_t clientid; | ||
379 | struct nfs4_sessionid sessionid; | ||
380 | u32 seqid; | ||
381 | u32 flags; | ||
382 | struct nfsd4_channel_attrs fore_channel; | ||
383 | struct nfsd4_channel_attrs back_channel; | ||
384 | u32 callback_prog; | ||
385 | u32 uid; | ||
386 | u32 gid; | ||
387 | }; | ||
388 | |||
389 | struct nfsd4_sequence { | ||
390 | struct nfs4_sessionid sessionid; /* request/response */ | ||
391 | u32 seqid; /* request/response */ | ||
392 | u32 slotid; /* request/response */ | ||
393 | u32 maxslots; /* request/response */ | ||
394 | u32 cachethis; /* request */ | ||
395 | #if 0 | ||
396 | u32 target_maxslots; /* response */ | ||
397 | u32 status_flags; /* response */ | ||
398 | #endif /* not yet */ | ||
399 | }; | ||
400 | |||
401 | struct nfsd4_destroy_session { | ||
402 | struct nfs4_sessionid sessionid; | ||
403 | }; | ||
404 | |||
347 | struct nfsd4_op { | 405 | struct nfsd4_op { |
348 | int opnum; | 406 | int opnum; |
349 | __be32 status; | 407 | __be32 status; |
@@ -378,6 +436,12 @@ struct nfsd4_op { | |||
378 | struct nfsd4_verify verify; | 436 | struct nfsd4_verify verify; |
379 | struct nfsd4_write write; | 437 | struct nfsd4_write write; |
380 | struct nfsd4_release_lockowner release_lockowner; | 438 | struct nfsd4_release_lockowner release_lockowner; |
439 | |||
440 | /* NFSv4.1 */ | ||
441 | struct nfsd4_exchange_id exchange_id; | ||
442 | struct nfsd4_create_session create_session; | ||
443 | struct nfsd4_destroy_session destroy_session; | ||
444 | struct nfsd4_sequence sequence; | ||
381 | } u; | 445 | } u; |
382 | struct nfs4_replay * replay; | 446 | struct nfs4_replay * replay; |
383 | }; | 447 | }; |
@@ -416,9 +480,22 @@ struct nfsd4_compoundres { | |||
416 | u32 taglen; | 480 | u32 taglen; |
417 | char * tag; | 481 | char * tag; |
418 | u32 opcnt; | 482 | u32 opcnt; |
419 | __be32 * tagp; /* where to encode tag and opcount */ | 483 | __be32 * tagp; /* tag, opcount encode location */ |
484 | struct nfsd4_compound_state cstate; | ||
420 | }; | 485 | }; |
421 | 486 | ||
487 | static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp) | ||
488 | { | ||
489 | struct nfsd4_compoundargs *args = resp->rqstp->rq_argp; | ||
490 | return args->opcnt == 1; | ||
491 | } | ||
492 | |||
493 | static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp) | ||
494 | { | ||
495 | return !resp->cstate.slot->sl_cache_entry.ce_cachethis || | ||
496 | nfsd4_is_solo_sequence(resp); | ||
497 | } | ||
498 | |||
422 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) | 499 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) |
423 | 500 | ||
424 | static inline void | 501 | static inline void |
@@ -448,7 +525,23 @@ extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp, | |||
448 | extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp, | 525 | extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp, |
449 | struct nfsd4_compound_state *, | 526 | struct nfsd4_compound_state *, |
450 | struct nfsd4_setclientid_confirm *setclientid_confirm); | 527 | struct nfsd4_setclientid_confirm *setclientid_confirm); |
451 | extern __be32 nfsd4_process_open1(struct nfsd4_open *open); | 528 | extern void nfsd4_store_cache_entry(struct nfsd4_compoundres *resp); |
529 | extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp, | ||
530 | struct nfsd4_sequence *seq); | ||
531 | extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp, | ||
532 | struct nfsd4_compound_state *, | ||
533 | struct nfsd4_exchange_id *); | ||
534 | extern __be32 nfsd4_create_session(struct svc_rqst *, | ||
535 | struct nfsd4_compound_state *, | ||
536 | struct nfsd4_create_session *); | ||
537 | extern __be32 nfsd4_sequence(struct svc_rqst *, | ||
538 | struct nfsd4_compound_state *, | ||
539 | struct nfsd4_sequence *); | ||
540 | extern __be32 nfsd4_destroy_session(struct svc_rqst *, | ||
541 | struct nfsd4_compound_state *, | ||
542 | struct nfsd4_destroy_session *); | ||
543 | extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *, | ||
544 | struct nfsd4_open *open); | ||
452 | extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp, | 545 | extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp, |
453 | struct svc_fh *current_fh, struct nfsd4_open *open); | 546 | struct svc_fh *current_fh, struct nfsd4_open *open); |
454 | extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp, | 547 | extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp, |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 170f8b1f22db..ee98cd570885 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -944,6 +944,32 @@ | |||
944 | #define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801 | 944 | #define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801 |
945 | #define PCI_DEVICE_ID_SUN_CASSINI 0xabba | 945 | #define PCI_DEVICE_ID_SUN_CASSINI 0xabba |
946 | 946 | ||
947 | #define PCI_VENDOR_ID_NI 0x1093 | ||
948 | #define PCI_DEVICE_ID_NI_PCI2322 0xd130 | ||
949 | #define PCI_DEVICE_ID_NI_PCI2324 0xd140 | ||
950 | #define PCI_DEVICE_ID_NI_PCI2328 0xd150 | ||
951 | #define PCI_DEVICE_ID_NI_PXI8422_2322 0xd190 | ||
952 | #define PCI_DEVICE_ID_NI_PXI8422_2324 0xd1a0 | ||
953 | #define PCI_DEVICE_ID_NI_PXI8420_2322 0xd1d0 | ||
954 | #define PCI_DEVICE_ID_NI_PXI8420_2324 0xd1e0 | ||
955 | #define PCI_DEVICE_ID_NI_PXI8420_2328 0xd1f0 | ||
956 | #define PCI_DEVICE_ID_NI_PXI8420_23216 0xd1f1 | ||
957 | #define PCI_DEVICE_ID_NI_PCI2322I 0xd250 | ||
958 | #define PCI_DEVICE_ID_NI_PCI2324I 0xd270 | ||
959 | #define PCI_DEVICE_ID_NI_PCI23216 0xd2b0 | ||
960 | #define PCI_DEVICE_ID_NI_PXI8430_2322 0x7080 | ||
961 | #define PCI_DEVICE_ID_NI_PCI8430_2322 0x70db | ||
962 | #define PCI_DEVICE_ID_NI_PXI8430_2324 0x70dd | ||
963 | #define PCI_DEVICE_ID_NI_PCI8430_2324 0x70df | ||
964 | #define PCI_DEVICE_ID_NI_PXI8430_2328 0x70e2 | ||
965 | #define PCI_DEVICE_ID_NI_PCI8430_2328 0x70e4 | ||
966 | #define PCI_DEVICE_ID_NI_PXI8430_23216 0x70e6 | ||
967 | #define PCI_DEVICE_ID_NI_PCI8430_23216 0x70e7 | ||
968 | #define PCI_DEVICE_ID_NI_PXI8432_2322 0x70e8 | ||
969 | #define PCI_DEVICE_ID_NI_PCI8432_2322 0x70ea | ||
970 | #define PCI_DEVICE_ID_NI_PXI8432_2324 0x70ec | ||
971 | #define PCI_DEVICE_ID_NI_PCI8432_2324 0x70ee | ||
972 | |||
947 | #define PCI_VENDOR_ID_CMD 0x1095 | 973 | #define PCI_VENDOR_ID_CMD 0x1095 |
948 | #define PCI_DEVICE_ID_CMD_643 0x0643 | 974 | #define PCI_DEVICE_ID_CMD_643 0x0643 |
949 | #define PCI_DEVICE_ID_CMD_646 0x0646 | 975 | #define PCI_DEVICE_ID_CMD_646 0x0646 |
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h index 80044a4f3ab9..bfd92e1e5d2c 100644 --- a/include/linux/rcuclassic.h +++ b/include/linux/rcuclassic.h | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <linux/cache.h> | 36 | #include <linux/cache.h> |
37 | #include <linux/spinlock.h> | 37 | #include <linux/spinlock.h> |
38 | #include <linux/threads.h> | 38 | #include <linux/threads.h> |
39 | #include <linux/percpu.h> | ||
40 | #include <linux/cpumask.h> | 39 | #include <linux/cpumask.h> |
41 | #include <linux/seqlock.h> | 40 | #include <linux/seqlock.h> |
42 | 41 | ||
@@ -108,25 +107,14 @@ struct rcu_data { | |||
108 | struct rcu_head barrier; | 107 | struct rcu_head barrier; |
109 | }; | 108 | }; |
110 | 109 | ||
111 | DECLARE_PER_CPU(struct rcu_data, rcu_data); | ||
112 | DECLARE_PER_CPU(struct rcu_data, rcu_bh_data); | ||
113 | |||
114 | /* | 110 | /* |
115 | * Increment the quiescent state counter. | 111 | * Increment the quiescent state counter. |
116 | * The counter is a bit degenerated: We do not need to know | 112 | * The counter is a bit degenerated: We do not need to know |
117 | * how many quiescent states passed, just if there was at least | 113 | * how many quiescent states passed, just if there was at least |
118 | * one since the start of the grace period. Thus just a flag. | 114 | * one since the start of the grace period. Thus just a flag. |
119 | */ | 115 | */ |
120 | static inline void rcu_qsctr_inc(int cpu) | 116 | extern void rcu_qsctr_inc(int cpu); |
121 | { | 117 | extern void rcu_bh_qsctr_inc(int cpu); |
122 | struct rcu_data *rdp = &per_cpu(rcu_data, cpu); | ||
123 | rdp->passed_quiesc = 1; | ||
124 | } | ||
125 | static inline void rcu_bh_qsctr_inc(int cpu) | ||
126 | { | ||
127 | struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu); | ||
128 | rdp->passed_quiesc = 1; | ||
129 | } | ||
130 | 118 | ||
131 | extern int rcu_pending(int cpu); | 119 | extern int rcu_pending(int cpu); |
132 | extern int rcu_needs_cpu(int cpu); | 120 | extern int rcu_needs_cpu(int cpu); |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 528343e6da51..15fbb3ca634d 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <linux/cache.h> | 36 | #include <linux/cache.h> |
37 | #include <linux/spinlock.h> | 37 | #include <linux/spinlock.h> |
38 | #include <linux/threads.h> | 38 | #include <linux/threads.h> |
39 | #include <linux/percpu.h> | ||
40 | #include <linux/cpumask.h> | 39 | #include <linux/cpumask.h> |
41 | #include <linux/seqlock.h> | 40 | #include <linux/seqlock.h> |
42 | #include <linux/lockdep.h> | 41 | #include <linux/lockdep.h> |
diff --git a/include/linux/rcupreempt.h b/include/linux/rcupreempt.h index 74304b4538d8..fce522782ffa 100644 --- a/include/linux/rcupreempt.h +++ b/include/linux/rcupreempt.h | |||
@@ -36,34 +36,19 @@ | |||
36 | #include <linux/cache.h> | 36 | #include <linux/cache.h> |
37 | #include <linux/spinlock.h> | 37 | #include <linux/spinlock.h> |
38 | #include <linux/threads.h> | 38 | #include <linux/threads.h> |
39 | #include <linux/percpu.h> | 39 | #include <linux/smp.h> |
40 | #include <linux/cpumask.h> | 40 | #include <linux/cpumask.h> |
41 | #include <linux/seqlock.h> | 41 | #include <linux/seqlock.h> |
42 | 42 | ||
43 | struct rcu_dyntick_sched { | 43 | extern void rcu_qsctr_inc(int cpu); |
44 | int dynticks; | 44 | static inline void rcu_bh_qsctr_inc(int cpu) { } |
45 | int dynticks_snap; | ||
46 | int sched_qs; | ||
47 | int sched_qs_snap; | ||
48 | int sched_dynticks_snap; | ||
49 | }; | ||
50 | |||
51 | DECLARE_PER_CPU(struct rcu_dyntick_sched, rcu_dyntick_sched); | ||
52 | |||
53 | static inline void rcu_qsctr_inc(int cpu) | ||
54 | { | ||
55 | struct rcu_dyntick_sched *rdssp = &per_cpu(rcu_dyntick_sched, cpu); | ||
56 | |||
57 | rdssp->sched_qs++; | ||
58 | } | ||
59 | #define rcu_bh_qsctr_inc(cpu) | ||
60 | 45 | ||
61 | /* | 46 | /* |
62 | * Someone might want to pass call_rcu_bh as a function pointer. | 47 | * Someone might want to pass call_rcu_bh as a function pointer. |
63 | * So this needs to just be a rename and not a macro function. | 48 | * So this needs to just be a rename and not a macro function. |
64 | * (no parentheses) | 49 | * (no parentheses) |
65 | */ | 50 | */ |
66 | #define call_rcu_bh call_rcu | 51 | #define call_rcu_bh call_rcu |
67 | 52 | ||
68 | /** | 53 | /** |
69 | * call_rcu_sched - Queue RCU callback for invocation after sched grace period. | 54 | * call_rcu_sched - Queue RCU callback for invocation after sched grace period. |
@@ -117,30 +102,12 @@ extern struct rcupreempt_trace *rcupreempt_trace_cpu(int cpu); | |||
117 | struct softirq_action; | 102 | struct softirq_action; |
118 | 103 | ||
119 | #ifdef CONFIG_NO_HZ | 104 | #ifdef CONFIG_NO_HZ |
120 | 105 | extern void rcu_enter_nohz(void); | |
121 | static inline void rcu_enter_nohz(void) | 106 | extern void rcu_exit_nohz(void); |
122 | { | 107 | #else |
123 | static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1); | 108 | # define rcu_enter_nohz() do { } while (0) |
124 | 109 | # define rcu_exit_nohz() do { } while (0) | |
125 | smp_mb(); /* CPUs seeing ++ must see prior RCU read-side crit sects */ | 110 | #endif |
126 | __get_cpu_var(rcu_dyntick_sched).dynticks++; | ||
127 | WARN_ON_RATELIMIT(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1, &rs); | ||
128 | } | ||
129 | |||
130 | static inline void rcu_exit_nohz(void) | ||
131 | { | ||
132 | static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1); | ||
133 | |||
134 | __get_cpu_var(rcu_dyntick_sched).dynticks++; | ||
135 | smp_mb(); /* CPUs seeing ++ must see later RCU read-side crit sects */ | ||
136 | WARN_ON_RATELIMIT(!(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1), | ||
137 | &rs); | ||
138 | } | ||
139 | |||
140 | #else /* CONFIG_NO_HZ */ | ||
141 | #define rcu_enter_nohz() do { } while (0) | ||
142 | #define rcu_exit_nohz() do { } while (0) | ||
143 | #endif /* CONFIG_NO_HZ */ | ||
144 | 111 | ||
145 | /* | 112 | /* |
146 | * A context switch is a grace period for rcupreempt synchronize_rcu() | 113 | * A context switch is a grace period for rcupreempt synchronize_rcu() |
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h index a722fb67bb2d..0cdda00f2b2a 100644 --- a/include/linux/rcutree.h +++ b/include/linux/rcutree.h | |||
@@ -33,7 +33,6 @@ | |||
33 | #include <linux/cache.h> | 33 | #include <linux/cache.h> |
34 | #include <linux/spinlock.h> | 34 | #include <linux/spinlock.h> |
35 | #include <linux/threads.h> | 35 | #include <linux/threads.h> |
36 | #include <linux/percpu.h> | ||
37 | #include <linux/cpumask.h> | 36 | #include <linux/cpumask.h> |
38 | #include <linux/seqlock.h> | 37 | #include <linux/seqlock.h> |
39 | 38 | ||
@@ -236,30 +235,8 @@ struct rcu_state { | |||
236 | #endif /* #ifdef CONFIG_NO_HZ */ | 235 | #endif /* #ifdef CONFIG_NO_HZ */ |
237 | }; | 236 | }; |
238 | 237 | ||
239 | extern struct rcu_state rcu_state; | 238 | extern void rcu_qsctr_inc(int cpu); |
240 | DECLARE_PER_CPU(struct rcu_data, rcu_data); | 239 | extern void rcu_bh_qsctr_inc(int cpu); |
241 | |||
242 | extern struct rcu_state rcu_bh_state; | ||
243 | DECLARE_PER_CPU(struct rcu_data, rcu_bh_data); | ||
244 | |||
245 | /* | ||
246 | * Increment the quiescent state counter. | ||
247 | * The counter is a bit degenerated: We do not need to know | ||
248 | * how many quiescent states passed, just if there was at least | ||
249 | * one since the start of the grace period. Thus just a flag. | ||
250 | */ | ||
251 | static inline void rcu_qsctr_inc(int cpu) | ||
252 | { | ||
253 | struct rcu_data *rdp = &per_cpu(rcu_data, cpu); | ||
254 | rdp->passed_quiesc = 1; | ||
255 | rdp->passed_quiesc_completed = rdp->completed; | ||
256 | } | ||
257 | static inline void rcu_bh_qsctr_inc(int cpu) | ||
258 | { | ||
259 | struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu); | ||
260 | rdp->passed_quiesc = 1; | ||
261 | rdp->passed_quiesc_completed = rdp->completed; | ||
262 | } | ||
263 | 240 | ||
264 | extern int rcu_pending(int cpu); | 241 | extern int rcu_pending(int cpu); |
265 | extern int rcu_needs_cpu(int cpu); | 242 | extern int rcu_needs_cpu(int cpu); |
diff --git a/include/linux/security.h b/include/linux/security.h index 54ed15799a83..d5fd6163606f 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/sched.h> | 32 | #include <linux/sched.h> |
33 | #include <linux/key.h> | 33 | #include <linux/key.h> |
34 | #include <linux/xfrm.h> | 34 | #include <linux/xfrm.h> |
35 | #include <linux/gfp.h> | ||
35 | #include <net/flow.h> | 36 | #include <net/flow.h> |
36 | 37 | ||
37 | /* Maximum number of letters for an LSM name string */ | 38 | /* Maximum number of letters for an LSM name string */ |
@@ -2953,5 +2954,28 @@ static inline void securityfs_remove(struct dentry *dentry) | |||
2953 | 2954 | ||
2954 | #endif | 2955 | #endif |
2955 | 2956 | ||
2957 | #ifdef CONFIG_SECURITY | ||
2958 | |||
2959 | static inline char *alloc_secdata(void) | ||
2960 | { | ||
2961 | return (char *)get_zeroed_page(GFP_KERNEL); | ||
2962 | } | ||
2963 | |||
2964 | static inline void free_secdata(void *secdata) | ||
2965 | { | ||
2966 | free_page((unsigned long)secdata); | ||
2967 | } | ||
2968 | |||
2969 | #else | ||
2970 | |||
2971 | static inline char *alloc_secdata(void) | ||
2972 | { | ||
2973 | return (char *)1; | ||
2974 | } | ||
2975 | |||
2976 | static inline void free_secdata(void *secdata) | ||
2977 | { } | ||
2978 | #endif /* CONFIG_SECURITY */ | ||
2979 | |||
2956 | #endif /* ! __LINUX_SECURITY_H */ | 2980 | #endif /* ! __LINUX_SECURITY_H */ |
2957 | 2981 | ||
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index df9245c7bd3b..83e4b3ff9cda 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -277,7 +277,7 @@ struct uart_port { | |||
277 | struct uart_icount icount; /* statistics */ | 277 | struct uart_icount icount; /* statistics */ |
278 | 278 | ||
279 | struct console *cons; /* struct console, if any */ | 279 | struct console *cons; /* struct console, if any */ |
280 | #ifdef CONFIG_SERIAL_CORE_CONSOLE | 280 | #if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(SUPPORT_SYSRQ) |
281 | unsigned long sysrq; /* sysrq timeout */ | 281 | unsigned long sysrq; /* sysrq timeout */ |
282 | #endif | 282 | #endif |
283 | 283 | ||
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h index f4523651fa42..5ac9b0bcaf9a 100644 --- a/include/linux/slab_def.h +++ b/include/linux/slab_def.h | |||
@@ -73,8 +73,8 @@ found: | |||
73 | 73 | ||
74 | ret = kmem_cache_alloc_notrace(cachep, flags); | 74 | ret = kmem_cache_alloc_notrace(cachep, flags); |
75 | 75 | ||
76 | kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, _THIS_IP_, ret, | 76 | trace_kmalloc(_THIS_IP_, ret, |
77 | size, slab_buffer_size(cachep), flags); | 77 | size, slab_buffer_size(cachep), flags); |
78 | 78 | ||
79 | return ret; | 79 | return ret; |
80 | } | 80 | } |
@@ -128,9 +128,9 @@ found: | |||
128 | 128 | ||
129 | ret = kmem_cache_alloc_node_notrace(cachep, flags, node); | 129 | ret = kmem_cache_alloc_node_notrace(cachep, flags, node); |
130 | 130 | ||
131 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, _THIS_IP_, | 131 | trace_kmalloc_node(_THIS_IP_, ret, |
132 | ret, size, slab_buffer_size(cachep), | 132 | size, slab_buffer_size(cachep), |
133 | flags, node); | 133 | flags, node); |
134 | 134 | ||
135 | return ret; | 135 | return ret; |
136 | } | 136 | } |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index a1f90528e70b..5046f90c1171 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
@@ -233,8 +233,7 @@ static __always_inline void *kmalloc_large(size_t size, gfp_t flags) | |||
233 | unsigned int order = get_order(size); | 233 | unsigned int order = get_order(size); |
234 | void *ret = (void *) __get_free_pages(flags | __GFP_COMP, order); | 234 | void *ret = (void *) __get_free_pages(flags | __GFP_COMP, order); |
235 | 235 | ||
236 | kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, _THIS_IP_, ret, | 236 | trace_kmalloc(_THIS_IP_, ret, size, PAGE_SIZE << order, flags); |
237 | size, PAGE_SIZE << order, flags); | ||
238 | 237 | ||
239 | return ret; | 238 | return ret; |
240 | } | 239 | } |
@@ -255,9 +254,7 @@ static __always_inline void *kmalloc(size_t size, gfp_t flags) | |||
255 | 254 | ||
256 | ret = kmem_cache_alloc_notrace(s, flags); | 255 | ret = kmem_cache_alloc_notrace(s, flags); |
257 | 256 | ||
258 | kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, | 257 | trace_kmalloc(_THIS_IP_, ret, size, s->size, flags); |
259 | _THIS_IP_, ret, | ||
260 | size, s->size, flags); | ||
261 | 258 | ||
262 | return ret; | 259 | return ret; |
263 | } | 260 | } |
@@ -296,9 +293,8 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
296 | 293 | ||
297 | ret = kmem_cache_alloc_node_notrace(s, flags, node); | 294 | ret = kmem_cache_alloc_node_notrace(s, flags, node); |
298 | 295 | ||
299 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, | 296 | trace_kmalloc_node(_THIS_IP_, ret, |
300 | _THIS_IP_, ret, | 297 | size, s->size, flags, node); |
301 | size, s->size, flags, node); | ||
302 | 298 | ||
303 | return ret; | 299 | return ret; |
304 | } | 300 | } |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index d3a4c0231933..2a30775959e9 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
@@ -24,6 +24,15 @@ | |||
24 | */ | 24 | */ |
25 | typedef int (*svc_thread_fn)(void *); | 25 | typedef int (*svc_thread_fn)(void *); |
26 | 26 | ||
27 | /* statistics for svc_pool structures */ | ||
28 | struct svc_pool_stats { | ||
29 | unsigned long packets; | ||
30 | unsigned long sockets_queued; | ||
31 | unsigned long threads_woken; | ||
32 | unsigned long overloads_avoided; | ||
33 | unsigned long threads_timedout; | ||
34 | }; | ||
35 | |||
27 | /* | 36 | /* |
28 | * | 37 | * |
29 | * RPC service thread pool. | 38 | * RPC service thread pool. |
@@ -41,6 +50,8 @@ struct svc_pool { | |||
41 | struct list_head sp_sockets; /* pending sockets */ | 50 | struct list_head sp_sockets; /* pending sockets */ |
42 | unsigned int sp_nrthreads; /* # of threads in pool */ | 51 | unsigned int sp_nrthreads; /* # of threads in pool */ |
43 | struct list_head sp_all_threads; /* all server threads */ | 52 | struct list_head sp_all_threads; /* all server threads */ |
53 | int sp_nwaking; /* number of threads woken but not yet active */ | ||
54 | struct svc_pool_stats sp_stats; /* statistics on pool operation */ | ||
44 | } ____cacheline_aligned_in_smp; | 55 | } ____cacheline_aligned_in_smp; |
45 | 56 | ||
46 | /* | 57 | /* |
@@ -83,6 +94,8 @@ struct svc_serv { | |||
83 | struct module * sv_module; /* optional module to count when | 94 | struct module * sv_module; /* optional module to count when |
84 | * adding threads */ | 95 | * adding threads */ |
85 | svc_thread_fn sv_function; /* main function for threads */ | 96 | svc_thread_fn sv_function; /* main function for threads */ |
97 | unsigned int sv_drc_max_pages; /* Total pages for DRC */ | ||
98 | unsigned int sv_drc_pages_used;/* DRC pages used */ | ||
86 | }; | 99 | }; |
87 | 100 | ||
88 | /* | 101 | /* |
@@ -218,6 +231,7 @@ struct svc_rqst { | |||
218 | struct svc_cred rq_cred; /* auth info */ | 231 | struct svc_cred rq_cred; /* auth info */ |
219 | void * rq_xprt_ctxt; /* transport specific context ptr */ | 232 | void * rq_xprt_ctxt; /* transport specific context ptr */ |
220 | struct svc_deferred_req*rq_deferred; /* deferred request we are replaying */ | 233 | struct svc_deferred_req*rq_deferred; /* deferred request we are replaying */ |
234 | int rq_usedeferral; /* use deferral */ | ||
221 | 235 | ||
222 | size_t rq_xprt_hlen; /* xprt header len */ | 236 | size_t rq_xprt_hlen; /* xprt header len */ |
223 | struct xdr_buf rq_arg; | 237 | struct xdr_buf rq_arg; |
@@ -263,6 +277,7 @@ struct svc_rqst { | |||
263 | * cache pages */ | 277 | * cache pages */ |
264 | wait_queue_head_t rq_wait; /* synchronization */ | 278 | wait_queue_head_t rq_wait; /* synchronization */ |
265 | struct task_struct *rq_task; /* service thread */ | 279 | struct task_struct *rq_task; /* service thread */ |
280 | int rq_waking; /* 1 if thread is being woken */ | ||
266 | }; | 281 | }; |
267 | 282 | ||
268 | /* | 283 | /* |
@@ -393,6 +408,7 @@ struct svc_serv * svc_create_pooled(struct svc_program *, unsigned int, | |||
393 | void (*shutdown)(struct svc_serv *), | 408 | void (*shutdown)(struct svc_serv *), |
394 | svc_thread_fn, struct module *); | 409 | svc_thread_fn, struct module *); |
395 | int svc_set_num_threads(struct svc_serv *, struct svc_pool *, int); | 410 | int svc_set_num_threads(struct svc_serv *, struct svc_pool *, int); |
411 | int svc_pool_stats_open(struct svc_serv *serv, struct file *file); | ||
396 | void svc_destroy(struct svc_serv *); | 412 | void svc_destroy(struct svc_serv *); |
397 | int svc_process(struct svc_rqst *); | 413 | int svc_process(struct svc_rqst *); |
398 | int svc_register(const struct svc_serv *, const int, | 414 | int svc_register(const struct svc_serv *, const int, |
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index 49e1eb454465..d8910b68e1bd 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
@@ -69,27 +69,27 @@ struct xdr_buf { | |||
69 | * pre-xdr'ed macros. | 69 | * pre-xdr'ed macros. |
70 | */ | 70 | */ |
71 | 71 | ||
72 | #define xdr_zero __constant_htonl(0) | 72 | #define xdr_zero cpu_to_be32(0) |
73 | #define xdr_one __constant_htonl(1) | 73 | #define xdr_one cpu_to_be32(1) |
74 | #define xdr_two __constant_htonl(2) | 74 | #define xdr_two cpu_to_be32(2) |
75 | 75 | ||
76 | #define rpc_success __constant_htonl(RPC_SUCCESS) | 76 | #define rpc_success cpu_to_be32(RPC_SUCCESS) |
77 | #define rpc_prog_unavail __constant_htonl(RPC_PROG_UNAVAIL) | 77 | #define rpc_prog_unavail cpu_to_be32(RPC_PROG_UNAVAIL) |
78 | #define rpc_prog_mismatch __constant_htonl(RPC_PROG_MISMATCH) | 78 | #define rpc_prog_mismatch cpu_to_be32(RPC_PROG_MISMATCH) |
79 | #define rpc_proc_unavail __constant_htonl(RPC_PROC_UNAVAIL) | 79 | #define rpc_proc_unavail cpu_to_be32(RPC_PROC_UNAVAIL) |
80 | #define rpc_garbage_args __constant_htonl(RPC_GARBAGE_ARGS) | 80 | #define rpc_garbage_args cpu_to_be32(RPC_GARBAGE_ARGS) |
81 | #define rpc_system_err __constant_htonl(RPC_SYSTEM_ERR) | 81 | #define rpc_system_err cpu_to_be32(RPC_SYSTEM_ERR) |
82 | #define rpc_drop_reply __constant_htonl(RPC_DROP_REPLY) | 82 | #define rpc_drop_reply cpu_to_be32(RPC_DROP_REPLY) |
83 | 83 | ||
84 | #define rpc_auth_ok __constant_htonl(RPC_AUTH_OK) | 84 | #define rpc_auth_ok cpu_to_be32(RPC_AUTH_OK) |
85 | #define rpc_autherr_badcred __constant_htonl(RPC_AUTH_BADCRED) | 85 | #define rpc_autherr_badcred cpu_to_be32(RPC_AUTH_BADCRED) |
86 | #define rpc_autherr_rejectedcred __constant_htonl(RPC_AUTH_REJECTEDCRED) | 86 | #define rpc_autherr_rejectedcred cpu_to_be32(RPC_AUTH_REJECTEDCRED) |
87 | #define rpc_autherr_badverf __constant_htonl(RPC_AUTH_BADVERF) | 87 | #define rpc_autherr_badverf cpu_to_be32(RPC_AUTH_BADVERF) |
88 | #define rpc_autherr_rejectedverf __constant_htonl(RPC_AUTH_REJECTEDVERF) | 88 | #define rpc_autherr_rejectedverf cpu_to_be32(RPC_AUTH_REJECTEDVERF) |
89 | #define rpc_autherr_tooweak __constant_htonl(RPC_AUTH_TOOWEAK) | 89 | #define rpc_autherr_tooweak cpu_to_be32(RPC_AUTH_TOOWEAK) |
90 | #define rpcsec_gsserr_credproblem __constant_htonl(RPCSEC_GSS_CREDPROBLEM) | 90 | #define rpcsec_gsserr_credproblem cpu_to_be32(RPCSEC_GSS_CREDPROBLEM) |
91 | #define rpcsec_gsserr_ctxproblem __constant_htonl(RPCSEC_GSS_CTXPROBLEM) | 91 | #define rpcsec_gsserr_ctxproblem cpu_to_be32(RPCSEC_GSS_CTXPROBLEM) |
92 | #define rpc_autherr_oldseqnum __constant_htonl(101) | 92 | #define rpc_autherr_oldseqnum cpu_to_be32(101) |
93 | 93 | ||
94 | /* | 94 | /* |
95 | * Miscellaneous XDR helper functions | 95 | * Miscellaneous XDR helper functions |
diff --git a/include/scsi/fc/fc_fip.h b/include/scsi/fc/fc_fip.h new file mode 100644 index 000000000000..0627a9ae6347 --- /dev/null +++ b/include/scsi/fc/fc_fip.h | |||
@@ -0,0 +1,237 @@ | |||
1 | /* | ||
2 | * Copyright 2008 Cisco Systems, Inc. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you may redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; version 2 of the License. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
9 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
10 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
11 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||
12 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
13 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
14 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
15 | * SOFTWARE. | ||
16 | */ | ||
17 | #ifndef _FC_FIP_H_ | ||
18 | #define _FC_FIP_H_ | ||
19 | |||
20 | /* | ||
21 | * This version is based on: | ||
22 | * http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf | ||
23 | */ | ||
24 | |||
25 | /* | ||
26 | * The FIP ethertype eventually goes in net/if_ether.h. | ||
27 | */ | ||
28 | #ifndef ETH_P_FIP | ||
29 | #define ETH_P_FIP 0x8914 /* FIP Ethertype */ | ||
30 | #endif | ||
31 | |||
32 | #define FIP_DEF_PRI 128 /* default selection priority */ | ||
33 | #define FIP_DEF_FC_MAP 0x0efc00 /* default FCoE MAP (MAC OUI) value */ | ||
34 | #define FIP_DEF_FKA 8000 /* default FCF keep-alive/advert period (mS) */ | ||
35 | #define FIP_VN_KA_PERIOD 90000 /* required VN_port keep-alive period (mS) */ | ||
36 | #define FIP_FCF_FUZZ 100 /* random time added by FCF (mS) */ | ||
37 | |||
38 | /* | ||
39 | * Multicast MAC addresses. T11-adopted. | ||
40 | */ | ||
41 | #define FIP_ALL_FCOE_MACS ((u8[6]) { 1, 0x10, 0x18, 1, 0, 0 }) | ||
42 | #define FIP_ALL_ENODE_MACS ((u8[6]) { 1, 0x10, 0x18, 1, 0, 1 }) | ||
43 | #define FIP_ALL_FCF_MACS ((u8[6]) { 1, 0x10, 0x18, 1, 0, 2 }) | ||
44 | |||
45 | #define FIP_VER 1 /* version for fip_header */ | ||
46 | |||
47 | struct fip_header { | ||
48 | __u8 fip_ver; /* upper 4 bits are the version */ | ||
49 | __u8 fip_resv1; /* reserved */ | ||
50 | __be16 fip_op; /* operation code */ | ||
51 | __u8 fip_resv2; /* reserved */ | ||
52 | __u8 fip_subcode; /* lower 4 bits are sub-code */ | ||
53 | __be16 fip_dl_len; /* length of descriptors in words */ | ||
54 | __be16 fip_flags; /* header flags */ | ||
55 | } __attribute__((packed)); | ||
56 | |||
57 | #define FIP_VER_SHIFT 4 | ||
58 | #define FIP_VER_ENCAPS(v) ((v) << FIP_VER_SHIFT) | ||
59 | #define FIP_VER_DECAPS(v) ((v) >> FIP_VER_SHIFT) | ||
60 | #define FIP_BPW 4 /* bytes per word for lengths */ | ||
61 | |||
62 | /* | ||
63 | * fip_op. | ||
64 | */ | ||
65 | enum fip_opcode { | ||
66 | FIP_OP_DISC = 1, /* discovery, advertisement, etc. */ | ||
67 | FIP_OP_LS = 2, /* Link Service request or reply */ | ||
68 | FIP_OP_CTRL = 3, /* Keep Alive / Link Reset */ | ||
69 | FIP_OP_VLAN = 4, /* VLAN discovery */ | ||
70 | FIP_OP_VENDOR_MIN = 0xfff8, /* min vendor-specific opcode */ | ||
71 | FIP_OP_VENDOR_MAX = 0xfffe, /* max vendor-specific opcode */ | ||
72 | }; | ||
73 | |||
74 | /* | ||
75 | * Subcodes for FIP_OP_DISC. | ||
76 | */ | ||
77 | enum fip_disc_subcode { | ||
78 | FIP_SC_SOL = 1, /* solicitation */ | ||
79 | FIP_SC_ADV = 2, /* advertisement */ | ||
80 | }; | ||
81 | |||
82 | /* | ||
83 | * Subcodes for FIP_OP_LS. | ||
84 | */ | ||
85 | enum fip_trans_subcode { | ||
86 | FIP_SC_REQ = 1, /* request */ | ||
87 | FIP_SC_REP = 2, /* reply */ | ||
88 | }; | ||
89 | |||
90 | /* | ||
91 | * Subcodes for FIP_OP_RESET. | ||
92 | */ | ||
93 | enum fip_reset_subcode { | ||
94 | FIP_SC_KEEP_ALIVE = 1, /* keep-alive from VN_Port */ | ||
95 | FIP_SC_CLR_VLINK = 2, /* clear virtual link from VF_Port */ | ||
96 | }; | ||
97 | |||
98 | /* | ||
99 | * Subcodes for FIP_OP_VLAN. | ||
100 | */ | ||
101 | enum fip_vlan_subcode { | ||
102 | FIP_SC_VL_REQ = 1, /* request */ | ||
103 | FIP_SC_VL_REP = 2, /* reply */ | ||
104 | }; | ||
105 | |||
106 | /* | ||
107 | * flags in header fip_flags. | ||
108 | */ | ||
109 | enum fip_flag { | ||
110 | FIP_FL_FPMA = 0x8000, /* supports FPMA fabric-provided MACs */ | ||
111 | FIP_FL_SPMA = 0x4000, /* supports SPMA server-provided MACs */ | ||
112 | FIP_FL_AVAIL = 0x0004, /* available for FLOGI/ELP */ | ||
113 | FIP_FL_SOL = 0x0002, /* this is a solicited message */ | ||
114 | FIP_FL_FPORT = 0x0001, /* sent from an F port */ | ||
115 | }; | ||
116 | |||
117 | /* | ||
118 | * Common descriptor header format. | ||
119 | */ | ||
120 | struct fip_desc { | ||
121 | __u8 fip_dtype; /* type - see below */ | ||
122 | __u8 fip_dlen; /* length - in 32-bit words */ | ||
123 | }; | ||
124 | |||
125 | enum fip_desc_type { | ||
126 | FIP_DT_PRI = 1, /* priority for forwarder selection */ | ||
127 | FIP_DT_MAC = 2, /* MAC address */ | ||
128 | FIP_DT_MAP_OUI = 3, /* FC-MAP OUI */ | ||
129 | FIP_DT_NAME = 4, /* switch name or node name */ | ||
130 | FIP_DT_FAB = 5, /* fabric descriptor */ | ||
131 | FIP_DT_FCOE_SIZE = 6, /* max FCoE frame size */ | ||
132 | FIP_DT_FLOGI = 7, /* FLOGI request or response */ | ||
133 | FIP_DT_FDISC = 8, /* FDISC request or response */ | ||
134 | FIP_DT_LOGO = 9, /* LOGO request or response */ | ||
135 | FIP_DT_ELP = 10, /* ELP request or response */ | ||
136 | FIP_DT_VN_ID = 11, /* VN_Node Identifier */ | ||
137 | FIP_DT_FKA = 12, /* advertisement keep-alive period */ | ||
138 | FIP_DT_VENDOR = 13, /* vendor ID */ | ||
139 | FIP_DT_VLAN = 14, /* vlan number */ | ||
140 | FIP_DT_LIMIT, /* max defined desc_type + 1 */ | ||
141 | FIP_DT_VENDOR_BASE = 128, /* first vendor-specific desc_type */ | ||
142 | }; | ||
143 | |||
144 | /* | ||
145 | * FIP_DT_PRI - priority descriptor. | ||
146 | */ | ||
147 | struct fip_pri_desc { | ||
148 | struct fip_desc fd_desc; | ||
149 | __u8 fd_resvd; | ||
150 | __u8 fd_pri; /* FCF priority: higher is better */ | ||
151 | } __attribute__((packed)); | ||
152 | |||
153 | /* | ||
154 | * FIP_DT_MAC - MAC address descriptor. | ||
155 | */ | ||
156 | struct fip_mac_desc { | ||
157 | struct fip_desc fd_desc; | ||
158 | __u8 fd_mac[ETH_ALEN]; | ||
159 | } __attribute__((packed)); | ||
160 | |||
161 | /* | ||
162 | * FIP_DT_MAP - descriptor. | ||
163 | */ | ||
164 | struct fip_map_desc { | ||
165 | struct fip_desc fd_desc; | ||
166 | __u8 fd_resvd[3]; | ||
167 | __u8 fd_map[3]; | ||
168 | } __attribute__((packed)); | ||
169 | |||
170 | /* | ||
171 | * FIP_DT_NAME descriptor. | ||
172 | */ | ||
173 | struct fip_wwn_desc { | ||
174 | struct fip_desc fd_desc; | ||
175 | __u8 fd_resvd[2]; | ||
176 | __be64 fd_wwn; /* 64-bit WWN, unaligned */ | ||
177 | } __attribute__((packed)); | ||
178 | |||
179 | /* | ||
180 | * FIP_DT_FAB descriptor. | ||
181 | */ | ||
182 | struct fip_fab_desc { | ||
183 | struct fip_desc fd_desc; | ||
184 | __be16 fd_vfid; /* virtual fabric ID */ | ||
185 | __u8 fd_resvd; | ||
186 | __u8 fd_map[3]; /* FC-MAP value */ | ||
187 | __be64 fd_wwn; /* fabric name, unaligned */ | ||
188 | } __attribute__((packed)); | ||
189 | |||
190 | /* | ||
191 | * FIP_DT_FCOE_SIZE descriptor. | ||
192 | */ | ||
193 | struct fip_size_desc { | ||
194 | struct fip_desc fd_desc; | ||
195 | __be16 fd_size; | ||
196 | } __attribute__((packed)); | ||
197 | |||
198 | /* | ||
199 | * Descriptor that encapsulates an ELS or ILS frame. | ||
200 | * The encapsulated frame immediately follows this header, without | ||
201 | * SOF, EOF, or CRC. | ||
202 | */ | ||
203 | struct fip_encaps { | ||
204 | struct fip_desc fd_desc; | ||
205 | __u8 fd_resvd[2]; | ||
206 | } __attribute__((packed)); | ||
207 | |||
208 | /* | ||
209 | * FIP_DT_VN_ID - VN_Node Identifier descriptor. | ||
210 | */ | ||
211 | struct fip_vn_desc { | ||
212 | struct fip_desc fd_desc; | ||
213 | __u8 fd_mac[ETH_ALEN]; | ||
214 | __u8 fd_resvd; | ||
215 | __u8 fd_fc_id[3]; | ||
216 | __be64 fd_wwpn; /* port name, unaligned */ | ||
217 | } __attribute__((packed)); | ||
218 | |||
219 | /* | ||
220 | * FIP_DT_FKA - Advertisement keep-alive period. | ||
221 | */ | ||
222 | struct fip_fka_desc { | ||
223 | struct fip_desc fd_desc; | ||
224 | __u8 fd_resvd[2]; | ||
225 | __be32 fd_fka_period; /* adv./keep-alive period in mS */ | ||
226 | } __attribute__((packed)); | ||
227 | |||
228 | /* | ||
229 | * FIP_DT_VENDOR descriptor. | ||
230 | */ | ||
231 | struct fip_vendor_desc { | ||
232 | struct fip_desc fd_desc; | ||
233 | __u8 fd_resvd[2]; | ||
234 | __u8 fd_vendor_id[8]; | ||
235 | } __attribute__((packed)); | ||
236 | |||
237 | #endif /* _FC_FIP_H_ */ | ||
diff --git a/include/scsi/fc_transport_fcoe.h b/include/scsi/fc_transport_fcoe.h deleted file mode 100644 index 8dca2af14ffc..000000000000 --- a/include/scsi/fc_transport_fcoe.h +++ /dev/null | |||
@@ -1,54 +0,0 @@ | |||
1 | #ifndef FC_TRANSPORT_FCOE_H | ||
2 | #define FC_TRANSPORT_FCOE_H | ||
3 | |||
4 | #include <linux/device.h> | ||
5 | #include <linux/netdevice.h> | ||
6 | #include <scsi/scsi_host.h> | ||
7 | #include <scsi/libfc.h> | ||
8 | |||
9 | /** | ||
10 | * struct fcoe_transport - FCoE transport struct for generic transport | ||
11 | * for Ethernet devices as well as pure HBAs | ||
12 | * | ||
13 | * @name: name for thsi transport | ||
14 | * @bus: physical bus type (pci_bus_type) | ||
15 | * @driver: physical bus driver for network device | ||
16 | * @create: entry create function | ||
17 | * @destroy: exit destroy function | ||
18 | * @list: list of transports | ||
19 | */ | ||
20 | struct fcoe_transport { | ||
21 | char *name; | ||
22 | unsigned short vendor; | ||
23 | unsigned short device; | ||
24 | struct bus_type *bus; | ||
25 | struct device_driver *driver; | ||
26 | int (*create)(struct net_device *device); | ||
27 | int (*destroy)(struct net_device *device); | ||
28 | bool (*match)(struct net_device *device); | ||
29 | struct list_head list; | ||
30 | struct list_head devlist; | ||
31 | struct mutex devlock; | ||
32 | }; | ||
33 | |||
34 | /** | ||
35 | * MODULE_ALIAS_FCOE_PCI | ||
36 | * | ||
37 | * some care must be taken with this, vendor and device MUST be a hex value | ||
38 | * preceded with 0x and with letters in lower case (0x12ab, not 0x12AB or 12AB) | ||
39 | */ | ||
40 | #define MODULE_ALIAS_FCOE_PCI(vendor, device) \ | ||
41 | MODULE_ALIAS("fcoe-pci-" __stringify(vendor) "-" __stringify(device)) | ||
42 | |||
43 | /* exported funcs */ | ||
44 | int fcoe_transport_attach(struct net_device *netdev); | ||
45 | int fcoe_transport_release(struct net_device *netdev); | ||
46 | int fcoe_transport_register(struct fcoe_transport *t); | ||
47 | int fcoe_transport_unregister(struct fcoe_transport *t); | ||
48 | int fcoe_load_transport_driver(struct net_device *netdev); | ||
49 | int __init fcoe_transport_init(void); | ||
50 | int __exit fcoe_transport_exit(void); | ||
51 | |||
52 | /* fcow_sw is the default transport */ | ||
53 | extern struct fcoe_transport fcoe_sw_transport; | ||
54 | #endif /* FC_TRANSPORT_FCOE_H */ | ||
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index a70eafaad084..0303a6a098cc 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | #include <linux/timer.h> | 23 | #include <linux/timer.h> |
24 | #include <linux/if.h> | 24 | #include <linux/if.h> |
25 | #include <linux/percpu.h> | ||
25 | 26 | ||
26 | #include <scsi/scsi_transport.h> | 27 | #include <scsi/scsi_transport.h> |
27 | #include <scsi/scsi_transport_fc.h> | 28 | #include <scsi/scsi_transport_fc.h> |
@@ -661,7 +662,8 @@ struct fc_lport { | |||
661 | unsigned long boot_time; | 662 | unsigned long boot_time; |
662 | 663 | ||
663 | struct fc_host_statistics host_stats; | 664 | struct fc_host_statistics host_stats; |
664 | struct fcoe_dev_stats *dev_stats[NR_CPUS]; | 665 | struct fcoe_dev_stats *dev_stats; |
666 | |||
665 | u64 wwpn; | 667 | u64 wwpn; |
666 | u64 wwnn; | 668 | u64 wwnn; |
667 | u8 retry_count; | 669 | u8 retry_count; |
@@ -694,11 +696,6 @@ struct fc_lport { | |||
694 | /* | 696 | /* |
695 | * FC_LPORT HELPER FUNCTIONS | 697 | * FC_LPORT HELPER FUNCTIONS |
696 | *****************************/ | 698 | *****************************/ |
697 | static inline void *lport_priv(const struct fc_lport *lp) | ||
698 | { | ||
699 | return (void *)(lp + 1); | ||
700 | } | ||
701 | |||
702 | static inline int fc_lport_test_ready(struct fc_lport *lp) | 699 | static inline int fc_lport_test_ready(struct fc_lport *lp) |
703 | { | 700 | { |
704 | return lp->state == LPORT_ST_READY; | 701 | return lp->state == LPORT_ST_READY; |
@@ -722,6 +719,42 @@ static inline void fc_lport_state_enter(struct fc_lport *lp, | |||
722 | lp->state = state; | 719 | lp->state = state; |
723 | } | 720 | } |
724 | 721 | ||
722 | static inline int fc_lport_init_stats(struct fc_lport *lp) | ||
723 | { | ||
724 | /* allocate per cpu stats block */ | ||
725 | lp->dev_stats = alloc_percpu(struct fcoe_dev_stats); | ||
726 | if (!lp->dev_stats) | ||
727 | return -ENOMEM; | ||
728 | return 0; | ||
729 | } | ||
730 | |||
731 | static inline void fc_lport_free_stats(struct fc_lport *lp) | ||
732 | { | ||
733 | free_percpu(lp->dev_stats); | ||
734 | } | ||
735 | |||
736 | static inline struct fcoe_dev_stats *fc_lport_get_stats(struct fc_lport *lp) | ||
737 | { | ||
738 | return per_cpu_ptr(lp->dev_stats, smp_processor_id()); | ||
739 | } | ||
740 | |||
741 | static inline void *lport_priv(const struct fc_lport *lp) | ||
742 | { | ||
743 | return (void *)(lp + 1); | ||
744 | } | ||
745 | |||
746 | /** | ||
747 | * libfc_host_alloc() - Allocate a Scsi_Host with room for the fc_lport | ||
748 | * @sht: ptr to the scsi host templ | ||
749 | * @priv_size: size of private data after fc_lport | ||
750 | * | ||
751 | * Returns: ptr to Scsi_Host | ||
752 | */ | ||
753 | static inline struct Scsi_Host * | ||
754 | libfc_host_alloc(struct scsi_host_template *sht, int priv_size) | ||
755 | { | ||
756 | return scsi_host_alloc(sht, sizeof(struct fc_lport) + priv_size); | ||
757 | } | ||
725 | 758 | ||
726 | /* | 759 | /* |
727 | * LOCAL PORT LAYER | 760 | * LOCAL PORT LAYER |
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h index c41f7d0c6efc..666cc131732e 100644 --- a/include/scsi/libfcoe.h +++ b/include/scsi/libfcoe.h | |||
@@ -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) 2007-2008 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, |
@@ -20,134 +21,144 @@ | |||
20 | #ifndef _LIBFCOE_H | 21 | #ifndef _LIBFCOE_H |
21 | #define _LIBFCOE_H | 22 | #define _LIBFCOE_H |
22 | 23 | ||
24 | #include <linux/etherdevice.h> | ||
25 | #include <linux/if_ether.h> | ||
23 | #include <linux/netdevice.h> | 26 | #include <linux/netdevice.h> |
24 | #include <linux/skbuff.h> | 27 | #include <linux/skbuff.h> |
28 | #include <linux/workqueue.h> | ||
25 | #include <scsi/fc/fc_fcoe.h> | 29 | #include <scsi/fc/fc_fcoe.h> |
26 | #include <scsi/libfc.h> | 30 | #include <scsi/libfc.h> |
27 | 31 | ||
28 | /* | 32 | /* |
29 | * this percpu struct for fcoe | 33 | * FIP tunable parameters. |
30 | */ | 34 | */ |
31 | struct fcoe_percpu_s { | 35 | #define FCOE_CTLR_START_DELAY 2000 /* mS after first adv. to choose FCF */ |
32 | int cpu; | 36 | #define FCOE_CTRL_SOL_TOV 2000 /* min. solicitation interval (mS) */ |
33 | struct task_struct *thread; | 37 | #define FCOE_CTLR_FCF_LIMIT 20 /* max. number of FCF entries */ |
34 | struct sk_buff_head fcoe_rx_list; | 38 | |
35 | struct page *crc_eof_page; | 39 | /** |
36 | int crc_eof_offset; | 40 | * enum fip_state - internal state of FCoE controller. |
41 | * @FIP_ST_DISABLED: controller has been disabled or not yet enabled. | ||
42 | * @FIP_ST_LINK_WAIT: the physical link is down or unusable. | ||
43 | * @FIP_ST_AUTO: determining whether to use FIP or non-FIP mode. | ||
44 | * @FIP_ST_NON_FIP: non-FIP mode selected. | ||
45 | * @FIP_ST_ENABLED: FIP mode selected. | ||
46 | */ | ||
47 | enum fip_state { | ||
48 | FIP_ST_DISABLED, | ||
49 | FIP_ST_LINK_WAIT, | ||
50 | FIP_ST_AUTO, | ||
51 | FIP_ST_NON_FIP, | ||
52 | FIP_ST_ENABLED, | ||
37 | }; | 53 | }; |
38 | 54 | ||
39 | /* | 55 | /** |
40 | * the fcoe sw transport private data | 56 | * struct fcoe_ctlr - FCoE Controller and FIP state. |
57 | * @state: internal FIP state for network link and FIP or non-FIP mode. | ||
58 | * @lp: &fc_lport: libfc local port. | ||
59 | * @sel_fcf: currently selected FCF, or NULL. | ||
60 | * @fcfs: list of discovered FCFs. | ||
61 | * @fcf_count: number of discovered FCF entries. | ||
62 | * @sol_time: time when a multicast solicitation was last sent. | ||
63 | * @sel_time: time after which to select an FCF. | ||
64 | * @port_ka_time: time of next port keep-alive. | ||
65 | * @ctlr_ka_time: time of next controller keep-alive. | ||
66 | * @timer: timer struct used for all delayed events. | ||
67 | * @link_work: &work_struct for doing FCF selection. | ||
68 | * @recv_work: &work_struct for receiving FIP frames. | ||
69 | * @fip_recv_list: list of received FIP frames. | ||
70 | * @user_mfs: configured maximum FC frame size, including FC header. | ||
71 | * @flogi_oxid: exchange ID of most recent fabric login. | ||
72 | * @flogi_count: number of FLOGI attempts in AUTO mode. | ||
73 | * @link: current link status for libfc. | ||
74 | * @last_link: last link state reported to libfc. | ||
75 | * @map_dest: use the FC_MAP mode for destination MAC addresses. | ||
76 | * @dest_addr: MAC address of the selected FC forwarder. | ||
77 | * @ctl_src_addr: the native MAC address of our local port. | ||
78 | * @data_src_addr: the assigned MAC address for the local port after FLOGI. | ||
79 | * @send: LLD-supplied function to handle sending of FIP Ethernet frames. | ||
80 | * @update_mac: LLD-supplied function to handle changes to MAC addresses. | ||
81 | * @lock: lock protecting this structure. | ||
82 | * | ||
83 | * This structure is used by all FCoE drivers. It contains information | ||
84 | * needed by all FCoE low-level drivers (LLDs) as well as internal state | ||
85 | * for FIP, and fields shared with the LLDS. | ||
41 | */ | 86 | */ |
42 | struct fcoe_softc { | 87 | struct fcoe_ctlr { |
43 | struct list_head list; | 88 | enum fip_state state; |
44 | struct fc_lport *lp; | 89 | struct fc_lport *lp; |
45 | struct net_device *real_dev; | 90 | struct fcoe_fcf *sel_fcf; |
46 | struct net_device *phys_dev; /* device with ethtool_ops */ | 91 | struct list_head fcfs; |
47 | struct packet_type fcoe_packet_type; | 92 | u16 fcf_count; |
48 | struct sk_buff_head fcoe_pending_queue; | 93 | unsigned long sol_time; |
49 | u8 fcoe_pending_queue_active; | 94 | unsigned long sel_time; |
50 | 95 | unsigned long port_ka_time; | |
96 | unsigned long ctlr_ka_time; | ||
97 | struct timer_list timer; | ||
98 | struct work_struct link_work; | ||
99 | struct work_struct recv_work; | ||
100 | struct sk_buff_head fip_recv_list; | ||
101 | u16 user_mfs; | ||
102 | u16 flogi_oxid; | ||
103 | u8 flogi_count; | ||
104 | u8 link; | ||
105 | u8 last_link; | ||
106 | u8 map_dest; | ||
51 | u8 dest_addr[ETH_ALEN]; | 107 | u8 dest_addr[ETH_ALEN]; |
52 | u8 ctl_src_addr[ETH_ALEN]; | 108 | u8 ctl_src_addr[ETH_ALEN]; |
53 | u8 data_src_addr[ETH_ALEN]; | 109 | u8 data_src_addr[ETH_ALEN]; |
54 | /* | ||
55 | * fcoe protocol address learning related stuff | ||
56 | */ | ||
57 | u16 flogi_oxid; | ||
58 | u8 flogi_progress; | ||
59 | u8 address_mode; | ||
60 | }; | ||
61 | |||
62 | static inline struct net_device *fcoe_netdev( | ||
63 | const struct fc_lport *lp) | ||
64 | { | ||
65 | return ((struct fcoe_softc *)lport_priv(lp))->real_dev; | ||
66 | } | ||
67 | |||
68 | static inline struct fcoe_hdr *skb_fcoe_header(const struct sk_buff *skb) | ||
69 | { | ||
70 | return (struct fcoe_hdr *)skb_network_header(skb); | ||
71 | } | ||
72 | |||
73 | static inline int skb_fcoe_offset(const struct sk_buff *skb) | ||
74 | { | ||
75 | return skb_network_offset(skb); | ||
76 | } | ||
77 | |||
78 | static inline struct fc_frame_header *skb_fc_header(const struct sk_buff *skb) | ||
79 | { | ||
80 | return (struct fc_frame_header *)skb_transport_header(skb); | ||
81 | } | ||
82 | |||
83 | static inline int skb_fc_offset(const struct sk_buff *skb) | ||
84 | { | ||
85 | return skb_transport_offset(skb); | ||
86 | } | ||
87 | 110 | ||
88 | static inline void skb_reset_fc_header(struct sk_buff *skb) | 111 | void (*send)(struct fcoe_ctlr *, struct sk_buff *); |
89 | { | 112 | void (*update_mac)(struct fcoe_ctlr *, u8 *old, u8 *new); |
90 | skb_reset_network_header(skb); | 113 | spinlock_t lock; |
91 | skb_set_transport_header(skb, skb_network_offset(skb) + | 114 | }; |
92 | sizeof(struct fcoe_hdr)); | ||
93 | } | ||
94 | |||
95 | static inline bool skb_fc_is_data(const struct sk_buff *skb) | ||
96 | { | ||
97 | return skb_fc_header(skb)->fh_r_ctl == FC_RCTL_DD_SOL_DATA; | ||
98 | } | ||
99 | |||
100 | static inline bool skb_fc_is_cmd(const struct sk_buff *skb) | ||
101 | { | ||
102 | return skb_fc_header(skb)->fh_r_ctl == FC_RCTL_DD_UNSOL_CMD; | ||
103 | } | ||
104 | 115 | ||
105 | static inline bool skb_fc_has_exthdr(const struct sk_buff *skb) | 116 | /* |
106 | { | 117 | * struct fcoe_fcf - Fibre-Channel Forwarder. |
107 | return (skb_fc_header(skb)->fh_r_ctl == FC_RCTL_VFTH) || | 118 | * @list: list linkage. |
108 | (skb_fc_header(skb)->fh_r_ctl == FC_RCTL_IFRH) || | 119 | * @time: system time (jiffies) when an advertisement was last received. |
109 | (skb_fc_header(skb)->fh_r_ctl == FC_RCTL_ENCH); | 120 | * @switch_name: WWN of switch from advertisement. |
110 | } | 121 | * @fabric_name: WWN of fabric from advertisement. |
122 | * @fc_map: FC_MAP value from advertisement. | ||
123 | * @fcf_mac: Ethernet address of the FCF. | ||
124 | * @vfid: virtual fabric ID. | ||
125 | * @pri: seletion priority, smaller values are better. | ||
126 | * @flags: flags received from advertisement. | ||
127 | * @fka_period: keep-alive period, in jiffies. | ||
128 | * | ||
129 | * A Fibre-Channel Forwarder (FCF) is the entity on the Ethernet that | ||
130 | * passes FCoE frames on to an FC fabric. This structure represents | ||
131 | * one FCF from which advertisements have been received. | ||
132 | * | ||
133 | * When looking up an FCF, @switch_name, @fabric_name, @fc_map, @vfid, and | ||
134 | * @fcf_mac together form the lookup key. | ||
135 | */ | ||
136 | struct fcoe_fcf { | ||
137 | struct list_head list; | ||
138 | unsigned long time; | ||
111 | 139 | ||
112 | static inline bool skb_fc_is_roff(const struct sk_buff *skb) | 140 | u64 switch_name; |
113 | { | 141 | u64 fabric_name; |
114 | return skb_fc_header(skb)->fh_f_ctl[2] & FC_FC_REL_OFF; | 142 | u32 fc_map; |
115 | } | 143 | u16 vfid; |
144 | u8 fcf_mac[ETH_ALEN]; | ||
116 | 145 | ||
117 | static inline u16 skb_fc_oxid(const struct sk_buff *skb) | 146 | u8 pri; |
118 | { | 147 | u16 flags; |
119 | return be16_to_cpu(skb_fc_header(skb)->fh_ox_id); | 148 | u32 fka_period; |
120 | } | 149 | }; |
121 | 150 | ||
122 | static inline u16 skb_fc_rxid(const struct sk_buff *skb) | 151 | /* FIP API functions */ |
123 | { | 152 | void fcoe_ctlr_init(struct fcoe_ctlr *); |
124 | return be16_to_cpu(skb_fc_header(skb)->fh_rx_id); | 153 | void fcoe_ctlr_destroy(struct fcoe_ctlr *); |
125 | } | 154 | void fcoe_ctlr_link_up(struct fcoe_ctlr *); |
155 | int fcoe_ctlr_link_down(struct fcoe_ctlr *); | ||
156 | int fcoe_ctlr_els_send(struct fcoe_ctlr *, struct sk_buff *); | ||
157 | void fcoe_ctlr_recv(struct fcoe_ctlr *, struct sk_buff *); | ||
158 | int fcoe_ctlr_recv_flogi(struct fcoe_ctlr *, struct fc_frame *fp, u8 *sa); | ||
126 | 159 | ||
127 | /* libfcoe funcs */ | 160 | /* libfcoe funcs */ |
128 | int fcoe_reset(struct Scsi_Host *shost); | 161 | u64 fcoe_wwn_from_mac(unsigned char mac[], unsigned int, unsigned int); |
129 | u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], | ||
130 | unsigned int scheme, unsigned int port); | ||
131 | |||
132 | u32 fcoe_fc_crc(struct fc_frame *fp); | ||
133 | int fcoe_xmit(struct fc_lport *, struct fc_frame *); | ||
134 | int fcoe_rcv(struct sk_buff *, struct net_device *, | ||
135 | struct packet_type *, struct net_device *); | ||
136 | |||
137 | int fcoe_percpu_receive_thread(void *arg); | ||
138 | void fcoe_clean_pending_queue(struct fc_lport *lp); | ||
139 | void fcoe_percpu_clean(struct fc_lport *lp); | ||
140 | void fcoe_watchdog(ulong vp); | ||
141 | int fcoe_link_ok(struct fc_lport *lp); | ||
142 | |||
143 | struct fc_lport *fcoe_hostlist_lookup(const struct net_device *); | ||
144 | int fcoe_hostlist_add(const struct fc_lport *); | ||
145 | int fcoe_hostlist_remove(const struct fc_lport *); | ||
146 | |||
147 | struct Scsi_Host *fcoe_host_alloc(struct scsi_host_template *, int); | ||
148 | int fcoe_libfc_config(struct fc_lport *, struct libfc_function_template *); | 162 | int fcoe_libfc_config(struct fc_lport *, struct libfc_function_template *); |
149 | 163 | ||
150 | /* fcoe sw hba */ | ||
151 | int __init fcoe_sw_init(void); | ||
152 | int __exit fcoe_sw_exit(void); | ||
153 | #endif /* _LIBFCOE_H */ | 164 | #endif /* _LIBFCOE_H */ |
diff --git a/include/trace/kmemtrace.h b/include/trace/kmemtrace.h index ad8b7857855a..28ee69f9cd46 100644 --- a/include/trace/kmemtrace.h +++ b/include/trace/kmemtrace.h | |||
@@ -9,65 +9,53 @@ | |||
9 | 9 | ||
10 | #ifdef __KERNEL__ | 10 | #ifdef __KERNEL__ |
11 | 11 | ||
12 | #include <linux/tracepoint.h> | ||
12 | #include <linux/types.h> | 13 | #include <linux/types.h> |
13 | #include <linux/marker.h> | ||
14 | |||
15 | enum kmemtrace_type_id { | ||
16 | KMEMTRACE_TYPE_KMALLOC = 0, /* kmalloc() or kfree(). */ | ||
17 | KMEMTRACE_TYPE_CACHE, /* kmem_cache_*(). */ | ||
18 | KMEMTRACE_TYPE_PAGES, /* __get_free_pages() and friends. */ | ||
19 | }; | ||
20 | 14 | ||
21 | #ifdef CONFIG_KMEMTRACE | 15 | #ifdef CONFIG_KMEMTRACE |
22 | |||
23 | extern void kmemtrace_init(void); | 16 | extern void kmemtrace_init(void); |
24 | 17 | #else | |
25 | extern void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id, | ||
26 | unsigned long call_site, | ||
27 | const void *ptr, | ||
28 | size_t bytes_req, | ||
29 | size_t bytes_alloc, | ||
30 | gfp_t gfp_flags, | ||
31 | int node); | ||
32 | |||
33 | extern void kmemtrace_mark_free(enum kmemtrace_type_id type_id, | ||
34 | unsigned long call_site, | ||
35 | const void *ptr); | ||
36 | |||
37 | #else /* CONFIG_KMEMTRACE */ | ||
38 | |||
39 | static inline void kmemtrace_init(void) | 18 | static inline void kmemtrace_init(void) |
40 | { | 19 | { |
41 | } | 20 | } |
42 | 21 | #endif | |
43 | static inline void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id, | 22 | |
44 | unsigned long call_site, | 23 | DECLARE_TRACE(kmalloc, |
45 | const void *ptr, | 24 | TP_PROTO(unsigned long call_site, |
46 | size_t bytes_req, | 25 | const void *ptr, |
47 | size_t bytes_alloc, | 26 | size_t bytes_req, |
48 | gfp_t gfp_flags, | 27 | size_t bytes_alloc, |
49 | int node) | 28 | gfp_t gfp_flags), |
50 | { | 29 | TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)); |
51 | } | 30 | DECLARE_TRACE(kmem_cache_alloc, |
52 | 31 | TP_PROTO(unsigned long call_site, | |
53 | static inline void kmemtrace_mark_free(enum kmemtrace_type_id type_id, | 32 | const void *ptr, |
54 | unsigned long call_site, | 33 | size_t bytes_req, |
55 | const void *ptr) | 34 | size_t bytes_alloc, |
56 | { | 35 | gfp_t gfp_flags), |
57 | } | 36 | TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)); |
58 | 37 | DECLARE_TRACE(kmalloc_node, | |
59 | #endif /* CONFIG_KMEMTRACE */ | 38 | TP_PROTO(unsigned long call_site, |
60 | 39 | const void *ptr, | |
61 | static inline void kmemtrace_mark_alloc(enum kmemtrace_type_id type_id, | 40 | size_t bytes_req, |
62 | unsigned long call_site, | 41 | size_t bytes_alloc, |
63 | const void *ptr, | 42 | gfp_t gfp_flags, |
64 | size_t bytes_req, | 43 | int node), |
65 | size_t bytes_alloc, | 44 | TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)); |
66 | gfp_t gfp_flags) | 45 | DECLARE_TRACE(kmem_cache_alloc_node, |
67 | { | 46 | TP_PROTO(unsigned long call_site, |
68 | kmemtrace_mark_alloc_node(type_id, call_site, ptr, | 47 | const void *ptr, |
69 | bytes_req, bytes_alloc, gfp_flags, -1); | 48 | size_t bytes_req, |
70 | } | 49 | size_t bytes_alloc, |
50 | gfp_t gfp_flags, | ||
51 | int node), | ||
52 | TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)); | ||
53 | DECLARE_TRACE(kfree, | ||
54 | TP_PROTO(unsigned long call_site, const void *ptr), | ||
55 | TP_ARGS(call_site, ptr)); | ||
56 | DECLARE_TRACE(kmem_cache_free, | ||
57 | TP_PROTO(unsigned long call_site, const void *ptr), | ||
58 | TP_ARGS(call_site, ptr)); | ||
71 | 59 | ||
72 | #endif /* __KERNEL__ */ | 60 | #endif /* __KERNEL__ */ |
73 | 61 | ||
diff --git a/init/Kconfig b/init/Kconfig index 4f647142f2e6..35659ed442e5 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -1051,7 +1051,7 @@ source "arch/Kconfig" | |||
1051 | 1051 | ||
1052 | config SLOW_WORK | 1052 | config SLOW_WORK |
1053 | default n | 1053 | default n |
1054 | bool "Enable slow work thread pool" | 1054 | bool |
1055 | help | 1055 | help |
1056 | The slow work thread pool provides a number of dynamically allocated | 1056 | The slow work thread pool provides a number of dynamically allocated |
1057 | threads that can be used by the kernel to perform operations that | 1057 | threads that can be used by the kernel to perform operations that |
@@ -1061,6 +1061,8 @@ config SLOW_WORK | |||
1061 | by a series of mkdirs and a create call, all of which have to touch | 1061 | by a series of mkdirs and a create call, all of which have to touch |
1062 | disk. | 1062 | disk. |
1063 | 1063 | ||
1064 | See Documentation/slow-work.txt. | ||
1065 | |||
1064 | endmenu # General setup | 1066 | endmenu # General setup |
1065 | 1067 | ||
1066 | config HAVE_GENERIC_DMA_COHERENT | 1068 | config HAVE_GENERIC_DMA_COHERENT |
diff --git a/kernel/exit.c b/kernel/exit.c index 7a14a2b504f5..fbb5d94c8bbc 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -840,8 +840,7 @@ static void exit_notify(struct task_struct *tsk, int group_dead) | |||
840 | */ | 840 | */ |
841 | if (tsk->exit_signal != SIGCHLD && !task_detached(tsk) && | 841 | if (tsk->exit_signal != SIGCHLD && !task_detached(tsk) && |
842 | (tsk->parent_exec_id != tsk->real_parent->self_exec_id || | 842 | (tsk->parent_exec_id != tsk->real_parent->self_exec_id || |
843 | tsk->self_exec_id != tsk->parent_exec_id) && | 843 | tsk->self_exec_id != tsk->parent_exec_id)) |
844 | !capable(CAP_KILL)) | ||
845 | tsk->exit_signal = SIGCHLD; | 844 | tsk->exit_signal = SIGCHLD; |
846 | 845 | ||
847 | signal = tracehook_notify_death(tsk, &cookie, group_dead); | 846 | signal = tracehook_notify_death(tsk, &cookie, group_dead); |
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index f394d2a42ca3..cb8a15c19583 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
@@ -651,14 +651,20 @@ static inline void hrtimer_init_timer_hres(struct hrtimer *timer) | |||
651 | * and expiry check is done in the hrtimer_interrupt or in the softirq. | 651 | * and expiry check is done in the hrtimer_interrupt or in the softirq. |
652 | */ | 652 | */ |
653 | static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, | 653 | static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, |
654 | struct hrtimer_clock_base *base) | 654 | struct hrtimer_clock_base *base, |
655 | int wakeup) | ||
655 | { | 656 | { |
656 | if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) { | 657 | if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) { |
657 | spin_unlock(&base->cpu_base->lock); | 658 | if (wakeup) { |
658 | raise_softirq_irqoff(HRTIMER_SOFTIRQ); | 659 | spin_unlock(&base->cpu_base->lock); |
659 | spin_lock(&base->cpu_base->lock); | 660 | raise_softirq_irqoff(HRTIMER_SOFTIRQ); |
661 | spin_lock(&base->cpu_base->lock); | ||
662 | } else | ||
663 | __raise_softirq_irqoff(HRTIMER_SOFTIRQ); | ||
664 | |||
660 | return 1; | 665 | return 1; |
661 | } | 666 | } |
667 | |||
662 | return 0; | 668 | return 0; |
663 | } | 669 | } |
664 | 670 | ||
@@ -703,7 +709,8 @@ static inline int hrtimer_is_hres_enabled(void) { return 0; } | |||
703 | static inline int hrtimer_switch_to_hres(void) { return 0; } | 709 | static inline int hrtimer_switch_to_hres(void) { return 0; } |
704 | static inline void hrtimer_force_reprogram(struct hrtimer_cpu_base *base) { } | 710 | static inline void hrtimer_force_reprogram(struct hrtimer_cpu_base *base) { } |
705 | static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, | 711 | static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, |
706 | struct hrtimer_clock_base *base) | 712 | struct hrtimer_clock_base *base, |
713 | int wakeup) | ||
707 | { | 714 | { |
708 | return 0; | 715 | return 0; |
709 | } | 716 | } |
@@ -886,20 +893,9 @@ remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base) | |||
886 | return 0; | 893 | return 0; |
887 | } | 894 | } |
888 | 895 | ||
889 | /** | 896 | int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, |
890 | * hrtimer_start_range_ns - (re)start an hrtimer on the current CPU | 897 | unsigned long delta_ns, const enum hrtimer_mode mode, |
891 | * @timer: the timer to be added | 898 | int wakeup) |
892 | * @tim: expiry time | ||
893 | * @delta_ns: "slack" range for the timer | ||
894 | * @mode: expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL) | ||
895 | * | ||
896 | * Returns: | ||
897 | * 0 on success | ||
898 | * 1 when the timer was active | ||
899 | */ | ||
900 | int | ||
901 | hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, unsigned long delta_ns, | ||
902 | const enum hrtimer_mode mode) | ||
903 | { | 899 | { |
904 | struct hrtimer_clock_base *base, *new_base; | 900 | struct hrtimer_clock_base *base, *new_base; |
905 | unsigned long flags; | 901 | unsigned long flags; |
@@ -940,12 +936,29 @@ hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, unsigned long delta_n | |||
940 | * XXX send_remote_softirq() ? | 936 | * XXX send_remote_softirq() ? |
941 | */ | 937 | */ |
942 | if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases)) | 938 | if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases)) |
943 | hrtimer_enqueue_reprogram(timer, new_base); | 939 | hrtimer_enqueue_reprogram(timer, new_base, wakeup); |
944 | 940 | ||
945 | unlock_hrtimer_base(timer, &flags); | 941 | unlock_hrtimer_base(timer, &flags); |
946 | 942 | ||
947 | return ret; | 943 | return ret; |
948 | } | 944 | } |
945 | |||
946 | /** | ||
947 | * hrtimer_start_range_ns - (re)start an hrtimer on the current CPU | ||
948 | * @timer: the timer to be added | ||
949 | * @tim: expiry time | ||
950 | * @delta_ns: "slack" range for the timer | ||
951 | * @mode: expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL) | ||
952 | * | ||
953 | * Returns: | ||
954 | * 0 on success | ||
955 | * 1 when the timer was active | ||
956 | */ | ||
957 | int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, | ||
958 | unsigned long delta_ns, const enum hrtimer_mode mode) | ||
959 | { | ||
960 | return __hrtimer_start_range_ns(timer, tim, delta_ns, mode, 1); | ||
961 | } | ||
949 | EXPORT_SYMBOL_GPL(hrtimer_start_range_ns); | 962 | EXPORT_SYMBOL_GPL(hrtimer_start_range_ns); |
950 | 963 | ||
951 | /** | 964 | /** |
@@ -961,7 +974,7 @@ EXPORT_SYMBOL_GPL(hrtimer_start_range_ns); | |||
961 | int | 974 | int |
962 | hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode) | 975 | hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode) |
963 | { | 976 | { |
964 | return hrtimer_start_range_ns(timer, tim, 0, mode); | 977 | return __hrtimer_start_range_ns(timer, tim, 0, mode, 1); |
965 | } | 978 | } |
966 | EXPORT_SYMBOL_GPL(hrtimer_start); | 979 | EXPORT_SYMBOL_GPL(hrtimer_start); |
967 | 980 | ||
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index 81b5f33970b8..b0f011866969 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
@@ -793,6 +793,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force) | |||
793 | 793 | ||
794 | printk("BUG: MAX_LOCKDEP_KEYS too low!\n"); | 794 | printk("BUG: MAX_LOCKDEP_KEYS too low!\n"); |
795 | printk("turning off the locking correctness validator.\n"); | 795 | printk("turning off the locking correctness validator.\n"); |
796 | dump_stack(); | ||
796 | return NULL; | 797 | return NULL; |
797 | } | 798 | } |
798 | class = lock_classes + nr_lock_classes++; | 799 | class = lock_classes + nr_lock_classes++; |
@@ -856,6 +857,7 @@ static struct lock_list *alloc_list_entry(void) | |||
856 | 857 | ||
857 | printk("BUG: MAX_LOCKDEP_ENTRIES too low!\n"); | 858 | printk("BUG: MAX_LOCKDEP_ENTRIES too low!\n"); |
858 | printk("turning off the locking correctness validator.\n"); | 859 | printk("turning off the locking correctness validator.\n"); |
860 | dump_stack(); | ||
859 | return NULL; | 861 | return NULL; |
860 | } | 862 | } |
861 | return list_entries + nr_list_entries++; | 863 | return list_entries + nr_list_entries++; |
@@ -1682,6 +1684,7 @@ cache_hit: | |||
1682 | 1684 | ||
1683 | printk("BUG: MAX_LOCKDEP_CHAINS too low!\n"); | 1685 | printk("BUG: MAX_LOCKDEP_CHAINS too low!\n"); |
1684 | printk("turning off the locking correctness validator.\n"); | 1686 | printk("turning off the locking correctness validator.\n"); |
1687 | dump_stack(); | ||
1685 | return 0; | 1688 | return 0; |
1686 | } | 1689 | } |
1687 | chain = lock_chains + nr_lock_chains++; | 1690 | chain = lock_chains + nr_lock_chains++; |
@@ -2541,6 +2544,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
2541 | debug_locks_off(); | 2544 | debug_locks_off(); |
2542 | printk("BUG: MAX_LOCKDEP_SUBCLASSES too low!\n"); | 2545 | printk("BUG: MAX_LOCKDEP_SUBCLASSES too low!\n"); |
2543 | printk("turning off the locking correctness validator.\n"); | 2546 | printk("turning off the locking correctness validator.\n"); |
2547 | dump_stack(); | ||
2544 | return 0; | 2548 | return 0; |
2545 | } | 2549 | } |
2546 | 2550 | ||
@@ -2637,6 +2641,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
2637 | debug_locks_off(); | 2641 | debug_locks_off(); |
2638 | printk("BUG: MAX_LOCK_DEPTH too low!\n"); | 2642 | printk("BUG: MAX_LOCK_DEPTH too low!\n"); |
2639 | printk("turning off the locking correctness validator.\n"); | 2643 | printk("turning off the locking correctness validator.\n"); |
2644 | dump_stack(); | ||
2640 | return 0; | 2645 | return 0; |
2641 | } | 2646 | } |
2642 | 2647 | ||
diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c index 654c640a6b9c..0f2b0b311304 100644 --- a/kernel/rcuclassic.c +++ b/kernel/rcuclassic.c | |||
@@ -65,6 +65,7 @@ static struct rcu_ctrlblk rcu_ctrlblk = { | |||
65 | .lock = __SPIN_LOCK_UNLOCKED(&rcu_ctrlblk.lock), | 65 | .lock = __SPIN_LOCK_UNLOCKED(&rcu_ctrlblk.lock), |
66 | .cpumask = CPU_BITS_NONE, | 66 | .cpumask = CPU_BITS_NONE, |
67 | }; | 67 | }; |
68 | |||
68 | static struct rcu_ctrlblk rcu_bh_ctrlblk = { | 69 | static struct rcu_ctrlblk rcu_bh_ctrlblk = { |
69 | .cur = -300, | 70 | .cur = -300, |
70 | .completed = -300, | 71 | .completed = -300, |
@@ -73,8 +74,26 @@ static struct rcu_ctrlblk rcu_bh_ctrlblk = { | |||
73 | .cpumask = CPU_BITS_NONE, | 74 | .cpumask = CPU_BITS_NONE, |
74 | }; | 75 | }; |
75 | 76 | ||
76 | DEFINE_PER_CPU(struct rcu_data, rcu_data) = { 0L }; | 77 | static DEFINE_PER_CPU(struct rcu_data, rcu_data); |
77 | DEFINE_PER_CPU(struct rcu_data, rcu_bh_data) = { 0L }; | 78 | static DEFINE_PER_CPU(struct rcu_data, rcu_bh_data); |
79 | |||
80 | /* | ||
81 | * Increment the quiescent state counter. | ||
82 | * The counter is a bit degenerated: We do not need to know | ||
83 | * how many quiescent states passed, just if there was at least | ||
84 | * one since the start of the grace period. Thus just a flag. | ||
85 | */ | ||
86 | void rcu_qsctr_inc(int cpu) | ||
87 | { | ||
88 | struct rcu_data *rdp = &per_cpu(rcu_data, cpu); | ||
89 | rdp->passed_quiesc = 1; | ||
90 | } | ||
91 | |||
92 | void rcu_bh_qsctr_inc(int cpu) | ||
93 | { | ||
94 | struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu); | ||
95 | rdp->passed_quiesc = 1; | ||
96 | } | ||
78 | 97 | ||
79 | static int blimit = 10; | 98 | static int blimit = 10; |
80 | static int qhimark = 10000; | 99 | static int qhimark = 10000; |
diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c index 5d59e850fb71..ce97a4df64d3 100644 --- a/kernel/rcupreempt.c +++ b/kernel/rcupreempt.c | |||
@@ -147,7 +147,51 @@ struct rcu_ctrlblk { | |||
147 | wait_queue_head_t sched_wq; /* Place for rcu_sched to sleep. */ | 147 | wait_queue_head_t sched_wq; /* Place for rcu_sched to sleep. */ |
148 | }; | 148 | }; |
149 | 149 | ||
150 | struct rcu_dyntick_sched { | ||
151 | int dynticks; | ||
152 | int dynticks_snap; | ||
153 | int sched_qs; | ||
154 | int sched_qs_snap; | ||
155 | int sched_dynticks_snap; | ||
156 | }; | ||
157 | |||
158 | static DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched) = { | ||
159 | .dynticks = 1, | ||
160 | }; | ||
161 | |||
162 | void rcu_qsctr_inc(int cpu) | ||
163 | { | ||
164 | struct rcu_dyntick_sched *rdssp = &per_cpu(rcu_dyntick_sched, cpu); | ||
165 | |||
166 | rdssp->sched_qs++; | ||
167 | } | ||
168 | |||
169 | #ifdef CONFIG_NO_HZ | ||
170 | |||
171 | void rcu_enter_nohz(void) | ||
172 | { | ||
173 | static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1); | ||
174 | |||
175 | smp_mb(); /* CPUs seeing ++ must see prior RCU read-side crit sects */ | ||
176 | __get_cpu_var(rcu_dyntick_sched).dynticks++; | ||
177 | WARN_ON_RATELIMIT(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1, &rs); | ||
178 | } | ||
179 | |||
180 | void rcu_exit_nohz(void) | ||
181 | { | ||
182 | static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1); | ||
183 | |||
184 | __get_cpu_var(rcu_dyntick_sched).dynticks++; | ||
185 | smp_mb(); /* CPUs seeing ++ must see later RCU read-side crit sects */ | ||
186 | WARN_ON_RATELIMIT(!(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1), | ||
187 | &rs); | ||
188 | } | ||
189 | |||
190 | #endif /* CONFIG_NO_HZ */ | ||
191 | |||
192 | |||
150 | static DEFINE_PER_CPU(struct rcu_data, rcu_data); | 193 | static DEFINE_PER_CPU(struct rcu_data, rcu_data); |
194 | |||
151 | static struct rcu_ctrlblk rcu_ctrlblk = { | 195 | static struct rcu_ctrlblk rcu_ctrlblk = { |
152 | .fliplock = __SPIN_LOCK_UNLOCKED(rcu_ctrlblk.fliplock), | 196 | .fliplock = __SPIN_LOCK_UNLOCKED(rcu_ctrlblk.fliplock), |
153 | .completed = 0, | 197 | .completed = 0, |
@@ -427,10 +471,6 @@ static void __rcu_advance_callbacks(struct rcu_data *rdp) | |||
427 | } | 471 | } |
428 | } | 472 | } |
429 | 473 | ||
430 | DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched) = { | ||
431 | .dynticks = 1, | ||
432 | }; | ||
433 | |||
434 | #ifdef CONFIG_NO_HZ | 474 | #ifdef CONFIG_NO_HZ |
435 | static DEFINE_PER_CPU(int, rcu_update_flag); | 475 | static DEFINE_PER_CPU(int, rcu_update_flag); |
436 | 476 | ||
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 97ce31579ec0..7f3266922572 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
@@ -78,6 +78,26 @@ DEFINE_PER_CPU(struct rcu_data, rcu_data); | |||
78 | struct rcu_state rcu_bh_state = RCU_STATE_INITIALIZER(rcu_bh_state); | 78 | struct rcu_state rcu_bh_state = RCU_STATE_INITIALIZER(rcu_bh_state); |
79 | DEFINE_PER_CPU(struct rcu_data, rcu_bh_data); | 79 | DEFINE_PER_CPU(struct rcu_data, rcu_bh_data); |
80 | 80 | ||
81 | /* | ||
82 | * Increment the quiescent state counter. | ||
83 | * The counter is a bit degenerated: We do not need to know | ||
84 | * how many quiescent states passed, just if there was at least | ||
85 | * one since the start of the grace period. Thus just a flag. | ||
86 | */ | ||
87 | void rcu_qsctr_inc(int cpu) | ||
88 | { | ||
89 | struct rcu_data *rdp = &per_cpu(rcu_data, cpu); | ||
90 | rdp->passed_quiesc = 1; | ||
91 | rdp->passed_quiesc_completed = rdp->completed; | ||
92 | } | ||
93 | |||
94 | void rcu_bh_qsctr_inc(int cpu) | ||
95 | { | ||
96 | struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu); | ||
97 | rdp->passed_quiesc = 1; | ||
98 | rdp->passed_quiesc_completed = rdp->completed; | ||
99 | } | ||
100 | |||
81 | #ifdef CONFIG_NO_HZ | 101 | #ifdef CONFIG_NO_HZ |
82 | DEFINE_PER_CPU(struct rcu_dynticks, rcu_dynticks) = { | 102 | DEFINE_PER_CPU(struct rcu_dynticks, rcu_dynticks) = { |
83 | .dynticks_nesting = 1, | 103 | .dynticks_nesting = 1, |
diff --git a/kernel/rcutree.h b/kernel/rcutree.h new file mode 100644 index 000000000000..5e872bbf07f5 --- /dev/null +++ b/kernel/rcutree.h | |||
@@ -0,0 +1,10 @@ | |||
1 | |||
2 | /* | ||
3 | * RCU implementation internal declarations: | ||
4 | */ | ||
5 | extern struct rcu_state rcu_state; | ||
6 | DECLARE_PER_CPU(struct rcu_data, rcu_data); | ||
7 | |||
8 | extern struct rcu_state rcu_bh_state; | ||
9 | DECLARE_PER_CPU(struct rcu_data, rcu_bh_data); | ||
10 | |||
diff --git a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c index d6db3e837826..4ee954f6a8d5 100644 --- a/kernel/rcutree_trace.c +++ b/kernel/rcutree_trace.c | |||
@@ -43,6 +43,8 @@ | |||
43 | #include <linux/debugfs.h> | 43 | #include <linux/debugfs.h> |
44 | #include <linux/seq_file.h> | 44 | #include <linux/seq_file.h> |
45 | 45 | ||
46 | #include "rcutree.h" | ||
47 | |||
46 | static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp) | 48 | static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp) |
47 | { | 49 | { |
48 | if (!rdp->beenonline) | 50 | if (!rdp->beenonline) |
diff --git a/kernel/sched.c b/kernel/sched.c index 0de2f814fb18..b66a08c2480e 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -231,13 +231,20 @@ static void start_rt_bandwidth(struct rt_bandwidth *rt_b) | |||
231 | 231 | ||
232 | spin_lock(&rt_b->rt_runtime_lock); | 232 | spin_lock(&rt_b->rt_runtime_lock); |
233 | for (;;) { | 233 | for (;;) { |
234 | unsigned long delta; | ||
235 | ktime_t soft, hard; | ||
236 | |||
234 | if (hrtimer_active(&rt_b->rt_period_timer)) | 237 | if (hrtimer_active(&rt_b->rt_period_timer)) |
235 | break; | 238 | break; |
236 | 239 | ||
237 | now = hrtimer_cb_get_time(&rt_b->rt_period_timer); | 240 | now = hrtimer_cb_get_time(&rt_b->rt_period_timer); |
238 | hrtimer_forward(&rt_b->rt_period_timer, now, rt_b->rt_period); | 241 | hrtimer_forward(&rt_b->rt_period_timer, now, rt_b->rt_period); |
239 | hrtimer_start_expires(&rt_b->rt_period_timer, | 242 | |
240 | HRTIMER_MODE_ABS); | 243 | soft = hrtimer_get_softexpires(&rt_b->rt_period_timer); |
244 | hard = hrtimer_get_expires(&rt_b->rt_period_timer); | ||
245 | delta = ktime_to_ns(ktime_sub(hard, soft)); | ||
246 | __hrtimer_start_range_ns(&rt_b->rt_period_timer, soft, delta, | ||
247 | HRTIMER_MODE_ABS, 0); | ||
241 | } | 248 | } |
242 | spin_unlock(&rt_b->rt_runtime_lock); | 249 | spin_unlock(&rt_b->rt_runtime_lock); |
243 | } | 250 | } |
@@ -1147,7 +1154,8 @@ static __init void init_hrtick(void) | |||
1147 | */ | 1154 | */ |
1148 | static void hrtick_start(struct rq *rq, u64 delay) | 1155 | static void hrtick_start(struct rq *rq, u64 delay) |
1149 | { | 1156 | { |
1150 | hrtimer_start(&rq->hrtick_timer, ns_to_ktime(delay), HRTIMER_MODE_REL); | 1157 | __hrtimer_start_range_ns(&rq->hrtick_timer, ns_to_ktime(delay), 0, |
1158 | HRTIMER_MODE_REL, 0); | ||
1151 | } | 1159 | } |
1152 | 1160 | ||
1153 | static inline void init_hrtick(void) | 1161 | static inline void init_hrtick(void) |
diff --git a/kernel/softirq.c b/kernel/softirq.c index d105a82543d0..2fecefacdc5b 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c | |||
@@ -65,7 +65,7 @@ char *softirq_to_name[NR_SOFTIRQS] = { | |||
65 | * to the pending events, so lets the scheduler to balance | 65 | * to the pending events, so lets the scheduler to balance |
66 | * the softirq load for us. | 66 | * the softirq load for us. |
67 | */ | 67 | */ |
68 | static inline void wakeup_softirqd(void) | 68 | void wakeup_softirqd(void) |
69 | { | 69 | { |
70 | /* Interrupts are disabled: no need to stop preemption */ | 70 | /* Interrupts are disabled: no need to stop preemption */ |
71 | struct task_struct *tsk = __get_cpu_var(ksoftirqd); | 71 | struct task_struct *tsk = __get_cpu_var(ksoftirqd); |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 82350f8f04f6..b125e3387568 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -97,8 +97,8 @@ static int neg_one = -1; | |||
97 | #endif | 97 | #endif |
98 | 98 | ||
99 | static int zero; | 99 | static int zero; |
100 | static int one = 1; | 100 | static int __maybe_unused one = 1; |
101 | static int two = 2; | 101 | static int __maybe_unused two = 2; |
102 | static unsigned long one_ul = 1; | 102 | static unsigned long one_ul = 1; |
103 | static int one_hundred = 100; | 103 | static int one_hundred = 100; |
104 | 104 | ||
diff --git a/kernel/trace/kmemtrace.c b/kernel/trace/kmemtrace.c index ae201b3eda89..5011f4d91e37 100644 --- a/kernel/trace/kmemtrace.c +++ b/kernel/trace/kmemtrace.c | |||
@@ -6,14 +6,16 @@ | |||
6 | * Copyright (C) 2008 Frederic Weisbecker <fweisbec@gmail.com> | 6 | * Copyright (C) 2008 Frederic Weisbecker <fweisbec@gmail.com> |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/dcache.h> | 9 | #include <linux/tracepoint.h> |
10 | #include <linux/seq_file.h> | ||
10 | #include <linux/debugfs.h> | 11 | #include <linux/debugfs.h> |
12 | #include <linux/dcache.h> | ||
11 | #include <linux/fs.h> | 13 | #include <linux/fs.h> |
12 | #include <linux/seq_file.h> | 14 | |
13 | #include <trace/kmemtrace.h> | 15 | #include <trace/kmemtrace.h> |
14 | 16 | ||
15 | #include "trace.h" | ||
16 | #include "trace_output.h" | 17 | #include "trace_output.h" |
18 | #include "trace.h" | ||
17 | 19 | ||
18 | /* Select an alternative, minimalistic output than the original one */ | 20 | /* Select an alternative, minimalistic output than the original one */ |
19 | #define TRACE_KMEM_OPT_MINIMAL 0x1 | 21 | #define TRACE_KMEM_OPT_MINIMAL 0x1 |
@@ -25,14 +27,156 @@ static struct tracer_opt kmem_opts[] = { | |||
25 | }; | 27 | }; |
26 | 28 | ||
27 | static struct tracer_flags kmem_tracer_flags = { | 29 | static struct tracer_flags kmem_tracer_flags = { |
28 | .val = 0, | 30 | .val = 0, |
29 | .opts = kmem_opts | 31 | .opts = kmem_opts |
30 | }; | 32 | }; |
31 | 33 | ||
32 | |||
33 | static bool kmem_tracing_enabled __read_mostly; | ||
34 | static struct trace_array *kmemtrace_array; | 34 | static struct trace_array *kmemtrace_array; |
35 | 35 | ||
36 | /* Trace allocations */ | ||
37 | static inline void kmemtrace_alloc(enum kmemtrace_type_id type_id, | ||
38 | unsigned long call_site, | ||
39 | const void *ptr, | ||
40 | size_t bytes_req, | ||
41 | size_t bytes_alloc, | ||
42 | gfp_t gfp_flags, | ||
43 | int node) | ||
44 | { | ||
45 | struct trace_array *tr = kmemtrace_array; | ||
46 | struct kmemtrace_alloc_entry *entry; | ||
47 | struct ring_buffer_event *event; | ||
48 | |||
49 | event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry)); | ||
50 | if (!event) | ||
51 | return; | ||
52 | |||
53 | entry = ring_buffer_event_data(event); | ||
54 | tracing_generic_entry_update(&entry->ent, 0, 0); | ||
55 | |||
56 | entry->ent.type = TRACE_KMEM_ALLOC; | ||
57 | entry->type_id = type_id; | ||
58 | entry->call_site = call_site; | ||
59 | entry->ptr = ptr; | ||
60 | entry->bytes_req = bytes_req; | ||
61 | entry->bytes_alloc = bytes_alloc; | ||
62 | entry->gfp_flags = gfp_flags; | ||
63 | entry->node = node; | ||
64 | |||
65 | ring_buffer_unlock_commit(tr->buffer, event); | ||
66 | |||
67 | trace_wake_up(); | ||
68 | } | ||
69 | |||
70 | static inline void kmemtrace_free(enum kmemtrace_type_id type_id, | ||
71 | unsigned long call_site, | ||
72 | const void *ptr) | ||
73 | { | ||
74 | struct trace_array *tr = kmemtrace_array; | ||
75 | struct kmemtrace_free_entry *entry; | ||
76 | struct ring_buffer_event *event; | ||
77 | |||
78 | event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry)); | ||
79 | if (!event) | ||
80 | return; | ||
81 | entry = ring_buffer_event_data(event); | ||
82 | tracing_generic_entry_update(&entry->ent, 0, 0); | ||
83 | |||
84 | entry->ent.type = TRACE_KMEM_FREE; | ||
85 | entry->type_id = type_id; | ||
86 | entry->call_site = call_site; | ||
87 | entry->ptr = ptr; | ||
88 | |||
89 | ring_buffer_unlock_commit(tr->buffer, event); | ||
90 | |||
91 | trace_wake_up(); | ||
92 | } | ||
93 | |||
94 | static void kmemtrace_kmalloc(unsigned long call_site, | ||
95 | const void *ptr, | ||
96 | size_t bytes_req, | ||
97 | size_t bytes_alloc, | ||
98 | gfp_t gfp_flags) | ||
99 | { | ||
100 | kmemtrace_alloc(KMEMTRACE_TYPE_KMALLOC, call_site, ptr, | ||
101 | bytes_req, bytes_alloc, gfp_flags, -1); | ||
102 | } | ||
103 | |||
104 | static void kmemtrace_kmem_cache_alloc(unsigned long call_site, | ||
105 | const void *ptr, | ||
106 | size_t bytes_req, | ||
107 | size_t bytes_alloc, | ||
108 | gfp_t gfp_flags) | ||
109 | { | ||
110 | kmemtrace_alloc(KMEMTRACE_TYPE_CACHE, call_site, ptr, | ||
111 | bytes_req, bytes_alloc, gfp_flags, -1); | ||
112 | } | ||
113 | |||
114 | static void kmemtrace_kmalloc_node(unsigned long call_site, | ||
115 | const void *ptr, | ||
116 | size_t bytes_req, | ||
117 | size_t bytes_alloc, | ||
118 | gfp_t gfp_flags, | ||
119 | int node) | ||
120 | { | ||
121 | kmemtrace_alloc(KMEMTRACE_TYPE_KMALLOC, call_site, ptr, | ||
122 | bytes_req, bytes_alloc, gfp_flags, node); | ||
123 | } | ||
124 | |||
125 | static void kmemtrace_kmem_cache_alloc_node(unsigned long call_site, | ||
126 | const void *ptr, | ||
127 | size_t bytes_req, | ||
128 | size_t bytes_alloc, | ||
129 | gfp_t gfp_flags, | ||
130 | int node) | ||
131 | { | ||
132 | kmemtrace_alloc(KMEMTRACE_TYPE_CACHE, call_site, ptr, | ||
133 | bytes_req, bytes_alloc, gfp_flags, node); | ||
134 | } | ||
135 | |||
136 | static void kmemtrace_kfree(unsigned long call_site, const void *ptr) | ||
137 | { | ||
138 | kmemtrace_free(KMEMTRACE_TYPE_KMALLOC, call_site, ptr); | ||
139 | } | ||
140 | |||
141 | static void kmemtrace_kmem_cache_free(unsigned long call_site, const void *ptr) | ||
142 | { | ||
143 | kmemtrace_free(KMEMTRACE_TYPE_CACHE, call_site, ptr); | ||
144 | } | ||
145 | |||
146 | static int kmemtrace_start_probes(void) | ||
147 | { | ||
148 | int err; | ||
149 | |||
150 | err = register_trace_kmalloc(kmemtrace_kmalloc); | ||
151 | if (err) | ||
152 | return err; | ||
153 | err = register_trace_kmem_cache_alloc(kmemtrace_kmem_cache_alloc); | ||
154 | if (err) | ||
155 | return err; | ||
156 | err = register_trace_kmalloc_node(kmemtrace_kmalloc_node); | ||
157 | if (err) | ||
158 | return err; | ||
159 | err = register_trace_kmem_cache_alloc_node(kmemtrace_kmem_cache_alloc_node); | ||
160 | if (err) | ||
161 | return err; | ||
162 | err = register_trace_kfree(kmemtrace_kfree); | ||
163 | if (err) | ||
164 | return err; | ||
165 | err = register_trace_kmem_cache_free(kmemtrace_kmem_cache_free); | ||
166 | |||
167 | return err; | ||
168 | } | ||
169 | |||
170 | static void kmemtrace_stop_probes(void) | ||
171 | { | ||
172 | unregister_trace_kmalloc(kmemtrace_kmalloc); | ||
173 | unregister_trace_kmem_cache_alloc(kmemtrace_kmem_cache_alloc); | ||
174 | unregister_trace_kmalloc_node(kmemtrace_kmalloc_node); | ||
175 | unregister_trace_kmem_cache_alloc_node(kmemtrace_kmem_cache_alloc_node); | ||
176 | unregister_trace_kfree(kmemtrace_kfree); | ||
177 | unregister_trace_kmem_cache_free(kmemtrace_kmem_cache_free); | ||
178 | } | ||
179 | |||
36 | static int kmem_trace_init(struct trace_array *tr) | 180 | static int kmem_trace_init(struct trace_array *tr) |
37 | { | 181 | { |
38 | int cpu; | 182 | int cpu; |
@@ -41,14 +185,14 @@ static int kmem_trace_init(struct trace_array *tr) | |||
41 | for_each_cpu_mask(cpu, cpu_possible_map) | 185 | for_each_cpu_mask(cpu, cpu_possible_map) |
42 | tracing_reset(tr, cpu); | 186 | tracing_reset(tr, cpu); |
43 | 187 | ||
44 | kmem_tracing_enabled = true; | 188 | kmemtrace_start_probes(); |
45 | 189 | ||
46 | return 0; | 190 | return 0; |
47 | } | 191 | } |
48 | 192 | ||
49 | static void kmem_trace_reset(struct trace_array *tr) | 193 | static void kmem_trace_reset(struct trace_array *tr) |
50 | { | 194 | { |
51 | kmem_tracing_enabled = false; | 195 | kmemtrace_stop_probes(); |
52 | } | 196 | } |
53 | 197 | ||
54 | static void kmemtrace_headers(struct seq_file *s) | 198 | static void kmemtrace_headers(struct seq_file *s) |
@@ -66,47 +210,84 @@ static void kmemtrace_headers(struct seq_file *s) | |||
66 | } | 210 | } |
67 | 211 | ||
68 | /* | 212 | /* |
69 | * The two following functions give the original output from kmemtrace, | 213 | * The following functions give the original output from kmemtrace, |
70 | * or something close to....perhaps they need some missing things | 214 | * plus the origin CPU, since reordering occurs in-kernel now. |
71 | */ | 215 | */ |
216 | |||
217 | #define KMEMTRACE_USER_ALLOC 0 | ||
218 | #define KMEMTRACE_USER_FREE 1 | ||
219 | |||
220 | struct kmemtrace_user_event { | ||
221 | u8 event_id; | ||
222 | u8 type_id; | ||
223 | u16 event_size; | ||
224 | u32 cpu; | ||
225 | u64 timestamp; | ||
226 | unsigned long call_site; | ||
227 | unsigned long ptr; | ||
228 | }; | ||
229 | |||
230 | struct kmemtrace_user_event_alloc { | ||
231 | size_t bytes_req; | ||
232 | size_t bytes_alloc; | ||
233 | unsigned gfp_flags; | ||
234 | int node; | ||
235 | }; | ||
236 | |||
72 | static enum print_line_t | 237 | static enum print_line_t |
73 | kmemtrace_print_alloc_original(struct trace_iterator *iter, | 238 | kmemtrace_print_alloc_user(struct trace_iterator *iter, |
74 | struct kmemtrace_alloc_entry *entry) | 239 | struct kmemtrace_alloc_entry *entry) |
75 | { | 240 | { |
241 | struct kmemtrace_user_event_alloc *ev_alloc; | ||
76 | struct trace_seq *s = &iter->seq; | 242 | struct trace_seq *s = &iter->seq; |
77 | int ret; | 243 | struct kmemtrace_user_event *ev; |
244 | |||
245 | ev = trace_seq_reserve(s, sizeof(*ev)); | ||
246 | if (!ev) | ||
247 | return TRACE_TYPE_PARTIAL_LINE; | ||
78 | 248 | ||
79 | /* Taken from the old linux/kmemtrace.h */ | 249 | ev->event_id = KMEMTRACE_USER_ALLOC; |
80 | ret = trace_seq_printf(s, "type_id %d call_site %lu ptr %lu " | 250 | ev->type_id = entry->type_id; |
81 | "bytes_req %lu bytes_alloc %lu gfp_flags %lu node %d\n", | 251 | ev->event_size = sizeof(*ev) + sizeof(*ev_alloc); |
82 | entry->type_id, entry->call_site, (unsigned long) entry->ptr, | 252 | ev->cpu = iter->cpu; |
83 | (unsigned long) entry->bytes_req, (unsigned long) entry->bytes_alloc, | 253 | ev->timestamp = iter->ts; |
84 | (unsigned long) entry->gfp_flags, entry->node); | 254 | ev->call_site = entry->call_site; |
255 | ev->ptr = (unsigned long)entry->ptr; | ||
85 | 256 | ||
86 | if (!ret) | 257 | ev_alloc = trace_seq_reserve(s, sizeof(*ev_alloc)); |
258 | if (!ev_alloc) | ||
87 | return TRACE_TYPE_PARTIAL_LINE; | 259 | return TRACE_TYPE_PARTIAL_LINE; |
88 | 260 | ||
261 | ev_alloc->bytes_req = entry->bytes_req; | ||
262 | ev_alloc->bytes_alloc = entry->bytes_alloc; | ||
263 | ev_alloc->gfp_flags = entry->gfp_flags; | ||
264 | ev_alloc->node = entry->node; | ||
265 | |||
89 | return TRACE_TYPE_HANDLED; | 266 | return TRACE_TYPE_HANDLED; |
90 | } | 267 | } |
91 | 268 | ||
92 | static enum print_line_t | 269 | static enum print_line_t |
93 | kmemtrace_print_free_original(struct trace_iterator *iter, | 270 | kmemtrace_print_free_user(struct trace_iterator *iter, |
94 | struct kmemtrace_free_entry *entry) | 271 | struct kmemtrace_free_entry *entry) |
95 | { | 272 | { |
96 | struct trace_seq *s = &iter->seq; | 273 | struct trace_seq *s = &iter->seq; |
97 | int ret; | 274 | struct kmemtrace_user_event *ev; |
98 | 275 | ||
99 | /* Taken from the old linux/kmemtrace.h */ | 276 | ev = trace_seq_reserve(s, sizeof(*ev)); |
100 | ret = trace_seq_printf(s, "type_id %d call_site %lu ptr %lu\n", | 277 | if (!ev) |
101 | entry->type_id, entry->call_site, (unsigned long) entry->ptr); | ||
102 | |||
103 | if (!ret) | ||
104 | return TRACE_TYPE_PARTIAL_LINE; | 278 | return TRACE_TYPE_PARTIAL_LINE; |
105 | 279 | ||
280 | ev->event_id = KMEMTRACE_USER_FREE; | ||
281 | ev->type_id = entry->type_id; | ||
282 | ev->event_size = sizeof(*ev); | ||
283 | ev->cpu = iter->cpu; | ||
284 | ev->timestamp = iter->ts; | ||
285 | ev->call_site = entry->call_site; | ||
286 | ev->ptr = (unsigned long)entry->ptr; | ||
287 | |||
106 | return TRACE_TYPE_HANDLED; | 288 | return TRACE_TYPE_HANDLED; |
107 | } | 289 | } |
108 | 290 | ||
109 | |||
110 | /* The two other following provide a more minimalistic output */ | 291 | /* The two other following provide a more minimalistic output */ |
111 | static enum print_line_t | 292 | static enum print_line_t |
112 | kmemtrace_print_alloc_compress(struct trace_iterator *iter, | 293 | kmemtrace_print_alloc_compress(struct trace_iterator *iter, |
@@ -178,7 +359,7 @@ kmemtrace_print_alloc_compress(struct trace_iterator *iter, | |||
178 | 359 | ||
179 | static enum print_line_t | 360 | static enum print_line_t |
180 | kmemtrace_print_free_compress(struct trace_iterator *iter, | 361 | kmemtrace_print_free_compress(struct trace_iterator *iter, |
181 | struct kmemtrace_free_entry *entry) | 362 | struct kmemtrace_free_entry *entry) |
182 | { | 363 | { |
183 | struct trace_seq *s = &iter->seq; | 364 | struct trace_seq *s = &iter->seq; |
184 | int ret; | 365 | int ret; |
@@ -239,20 +420,22 @@ static enum print_line_t kmemtrace_print_line(struct trace_iterator *iter) | |||
239 | switch (entry->type) { | 420 | switch (entry->type) { |
240 | case TRACE_KMEM_ALLOC: { | 421 | case TRACE_KMEM_ALLOC: { |
241 | struct kmemtrace_alloc_entry *field; | 422 | struct kmemtrace_alloc_entry *field; |
423 | |||
242 | trace_assign_type(field, entry); | 424 | trace_assign_type(field, entry); |
243 | if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL) | 425 | if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL) |
244 | return kmemtrace_print_alloc_compress(iter, field); | 426 | return kmemtrace_print_alloc_compress(iter, field); |
245 | else | 427 | else |
246 | return kmemtrace_print_alloc_original(iter, field); | 428 | return kmemtrace_print_alloc_user(iter, field); |
247 | } | 429 | } |
248 | 430 | ||
249 | case TRACE_KMEM_FREE: { | 431 | case TRACE_KMEM_FREE: { |
250 | struct kmemtrace_free_entry *field; | 432 | struct kmemtrace_free_entry *field; |
433 | |||
251 | trace_assign_type(field, entry); | 434 | trace_assign_type(field, entry); |
252 | if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL) | 435 | if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL) |
253 | return kmemtrace_print_free_compress(iter, field); | 436 | return kmemtrace_print_free_compress(iter, field); |
254 | else | 437 | else |
255 | return kmemtrace_print_free_original(iter, field); | 438 | return kmemtrace_print_free_user(iter, field); |
256 | } | 439 | } |
257 | 440 | ||
258 | default: | 441 | default: |
@@ -260,70 +443,13 @@ static enum print_line_t kmemtrace_print_line(struct trace_iterator *iter) | |||
260 | } | 443 | } |
261 | } | 444 | } |
262 | 445 | ||
263 | /* Trace allocations */ | ||
264 | void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id, | ||
265 | unsigned long call_site, | ||
266 | const void *ptr, | ||
267 | size_t bytes_req, | ||
268 | size_t bytes_alloc, | ||
269 | gfp_t gfp_flags, | ||
270 | int node) | ||
271 | { | ||
272 | struct ring_buffer_event *event; | ||
273 | struct kmemtrace_alloc_entry *entry; | ||
274 | struct trace_array *tr = kmemtrace_array; | ||
275 | |||
276 | if (!kmem_tracing_enabled) | ||
277 | return; | ||
278 | |||
279 | event = trace_buffer_lock_reserve(tr, TRACE_KMEM_ALLOC, | ||
280 | sizeof(*entry), 0, 0); | ||
281 | if (!event) | ||
282 | return; | ||
283 | entry = ring_buffer_event_data(event); | ||
284 | |||
285 | entry->call_site = call_site; | ||
286 | entry->ptr = ptr; | ||
287 | entry->bytes_req = bytes_req; | ||
288 | entry->bytes_alloc = bytes_alloc; | ||
289 | entry->gfp_flags = gfp_flags; | ||
290 | entry->node = node; | ||
291 | |||
292 | trace_buffer_unlock_commit(tr, event, 0, 0); | ||
293 | } | ||
294 | EXPORT_SYMBOL(kmemtrace_mark_alloc_node); | ||
295 | |||
296 | void kmemtrace_mark_free(enum kmemtrace_type_id type_id, | ||
297 | unsigned long call_site, | ||
298 | const void *ptr) | ||
299 | { | ||
300 | struct ring_buffer_event *event; | ||
301 | struct kmemtrace_free_entry *entry; | ||
302 | struct trace_array *tr = kmemtrace_array; | ||
303 | |||
304 | if (!kmem_tracing_enabled) | ||
305 | return; | ||
306 | |||
307 | event = trace_buffer_lock_reserve(tr, TRACE_KMEM_FREE, | ||
308 | sizeof(*entry), 0, 0); | ||
309 | if (!event) | ||
310 | return; | ||
311 | entry = ring_buffer_event_data(event); | ||
312 | entry->type_id = type_id; | ||
313 | entry->call_site = call_site; | ||
314 | entry->ptr = ptr; | ||
315 | |||
316 | trace_buffer_unlock_commit(tr, event, 0, 0); | ||
317 | } | ||
318 | EXPORT_SYMBOL(kmemtrace_mark_free); | ||
319 | |||
320 | static struct tracer kmem_tracer __read_mostly = { | 446 | static struct tracer kmem_tracer __read_mostly = { |
321 | .name = "kmemtrace", | 447 | .name = "kmemtrace", |
322 | .init = kmem_trace_init, | 448 | .init = kmem_trace_init, |
323 | .reset = kmem_trace_reset, | 449 | .reset = kmem_trace_reset, |
324 | .print_line = kmemtrace_print_line, | 450 | .print_line = kmemtrace_print_line, |
325 | .print_header = kmemtrace_headers, | 451 | .print_header = kmemtrace_headers, |
326 | .flags = &kmem_tracer_flags | 452 | .flags = &kmem_tracer_flags |
327 | }; | 453 | }; |
328 | 454 | ||
329 | void kmemtrace_init(void) | 455 | void kmemtrace_init(void) |
@@ -335,5 +461,4 @@ static int __init init_kmem_tracer(void) | |||
335 | { | 461 | { |
336 | return register_tracer(&kmem_tracer); | 462 | return register_tracer(&kmem_tracer); |
337 | } | 463 | } |
338 | |||
339 | device_initcall(init_kmem_tracer); | 464 | device_initcall(init_kmem_tracer); |
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index cb0ce3fc36d3..cbc168f1e43d 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
@@ -182,6 +182,12 @@ struct trace_power { | |||
182 | struct power_trace state_data; | 182 | struct power_trace state_data; |
183 | }; | 183 | }; |
184 | 184 | ||
185 | enum kmemtrace_type_id { | ||
186 | KMEMTRACE_TYPE_KMALLOC = 0, /* kmalloc() or kfree(). */ | ||
187 | KMEMTRACE_TYPE_CACHE, /* kmem_cache_*(). */ | ||
188 | KMEMTRACE_TYPE_PAGES, /* __get_free_pages() and friends. */ | ||
189 | }; | ||
190 | |||
185 | struct kmemtrace_alloc_entry { | 191 | struct kmemtrace_alloc_entry { |
186 | struct trace_entry ent; | 192 | struct trace_entry ent; |
187 | enum kmemtrace_type_id type_id; | 193 | enum kmemtrace_type_id type_id; |
diff --git a/lib/decompress_bunzip2.c b/lib/decompress_bunzip2.c index 5d3ddb5fcfd9..708e2a86d87b 100644 --- a/lib/decompress_bunzip2.c +++ b/lib/decompress_bunzip2.c | |||
@@ -50,6 +50,7 @@ | |||
50 | #endif /* !STATIC */ | 50 | #endif /* !STATIC */ |
51 | 51 | ||
52 | #include <linux/decompress/mm.h> | 52 | #include <linux/decompress/mm.h> |
53 | #include <linux/slab.h> | ||
53 | 54 | ||
54 | #ifndef INT_MAX | 55 | #ifndef INT_MAX |
55 | #define INT_MAX 0x7fffffff | 56 | #define INT_MAX 0x7fffffff |
diff --git a/lib/decompress_inflate.c b/lib/decompress_inflate.c index 839a329b4fc4..e36b296fc9f8 100644 --- a/lib/decompress_inflate.c +++ b/lib/decompress_inflate.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #endif /* STATIC */ | 23 | #endif /* STATIC */ |
24 | 24 | ||
25 | #include <linux/decompress/mm.h> | 25 | #include <linux/decompress/mm.h> |
26 | #include <linux/slab.h> | ||
26 | 27 | ||
27 | #define INBUF_LEN (16*1024) | 28 | #define INBUF_LEN (16*1024) |
28 | 29 | ||
diff --git a/lib/decompress_unlzma.c b/lib/decompress_unlzma.c index 546f2f4c157e..32123a1340e6 100644 --- a/lib/decompress_unlzma.c +++ b/lib/decompress_unlzma.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #endif /* STATIC */ | 34 | #endif /* STATIC */ |
35 | 35 | ||
36 | #include <linux/decompress/mm.h> | 36 | #include <linux/decompress/mm.h> |
37 | #include <linux/slab.h> | ||
37 | 38 | ||
38 | #define MIN(a, b) (((a) < (b)) ? (a) : (b)) | 39 | #define MIN(a, b) (((a) < (b)) ? (a) : (b)) |
39 | 40 | ||
diff --git a/mm/allocpercpu.c b/mm/allocpercpu.c index 139d5b7b6621..dfdee6a47359 100644 --- a/mm/allocpercpu.c +++ b/mm/allocpercpu.c | |||
@@ -31,7 +31,7 @@ static void percpu_depopulate(void *__pdata, int cpu) | |||
31 | * @__pdata: per-cpu data to depopulate | 31 | * @__pdata: per-cpu data to depopulate |
32 | * @mask: depopulate per-cpu data for cpu's selected through mask bits | 32 | * @mask: depopulate per-cpu data for cpu's selected through mask bits |
33 | */ | 33 | */ |
34 | static void __percpu_depopulate_mask(void *__pdata, cpumask_t *mask) | 34 | static void __percpu_depopulate_mask(void *__pdata, const cpumask_t *mask) |
35 | { | 35 | { |
36 | int cpu; | 36 | int cpu; |
37 | for_each_cpu_mask_nr(cpu, *mask) | 37 | for_each_cpu_mask_nr(cpu, *mask) |
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index be68c956a660..493b468a5035 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c | |||
@@ -284,12 +284,12 @@ static wait_queue_head_t congestion_wqh[2] = { | |||
284 | }; | 284 | }; |
285 | 285 | ||
286 | 286 | ||
287 | void clear_bdi_congested(struct backing_dev_info *bdi, int rw) | 287 | void clear_bdi_congested(struct backing_dev_info *bdi, int sync) |
288 | { | 288 | { |
289 | enum bdi_state bit; | 289 | enum bdi_state bit; |
290 | wait_queue_head_t *wqh = &congestion_wqh[rw]; | 290 | wait_queue_head_t *wqh = &congestion_wqh[sync]; |
291 | 291 | ||
292 | bit = (rw == WRITE) ? BDI_write_congested : BDI_read_congested; | 292 | bit = sync ? BDI_sync_congested : BDI_async_congested; |
293 | clear_bit(bit, &bdi->state); | 293 | clear_bit(bit, &bdi->state); |
294 | smp_mb__after_clear_bit(); | 294 | smp_mb__after_clear_bit(); |
295 | if (waitqueue_active(wqh)) | 295 | if (waitqueue_active(wqh)) |
@@ -297,11 +297,11 @@ void clear_bdi_congested(struct backing_dev_info *bdi, int rw) | |||
297 | } | 297 | } |
298 | EXPORT_SYMBOL(clear_bdi_congested); | 298 | EXPORT_SYMBOL(clear_bdi_congested); |
299 | 299 | ||
300 | void set_bdi_congested(struct backing_dev_info *bdi, int rw) | 300 | void set_bdi_congested(struct backing_dev_info *bdi, int sync) |
301 | { | 301 | { |
302 | enum bdi_state bit; | 302 | enum bdi_state bit; |
303 | 303 | ||
304 | bit = (rw == WRITE) ? BDI_write_congested : BDI_read_congested; | 304 | bit = sync ? BDI_sync_congested : BDI_async_congested; |
305 | set_bit(bit, &bdi->state); | 305 | set_bit(bit, &bdi->state); |
306 | } | 306 | } |
307 | EXPORT_SYMBOL(set_bdi_congested); | 307 | EXPORT_SYMBOL(set_bdi_congested); |
diff --git a/mm/failslab.c b/mm/failslab.c index 7c6ea6493f80..9339de5f0a91 100644 --- a/mm/failslab.c +++ b/mm/failslab.c | |||
@@ -1,4 +1,5 @@ | |||
1 | #include <linux/fault-inject.h> | 1 | #include <linux/fault-inject.h> |
2 | #include <linux/gfp.h> | ||
2 | 3 | ||
3 | static struct { | 4 | static struct { |
4 | struct fault_attr attr; | 5 | struct fault_attr attr; |
@@ -3565,8 +3565,8 @@ void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags) | |||
3565 | { | 3565 | { |
3566 | void *ret = __cache_alloc(cachep, flags, __builtin_return_address(0)); | 3566 | void *ret = __cache_alloc(cachep, flags, __builtin_return_address(0)); |
3567 | 3567 | ||
3568 | kmemtrace_mark_alloc(KMEMTRACE_TYPE_CACHE, _RET_IP_, ret, | 3568 | trace_kmem_cache_alloc(_RET_IP_, ret, |
3569 | obj_size(cachep), cachep->buffer_size, flags); | 3569 | obj_size(cachep), cachep->buffer_size, flags); |
3570 | 3570 | ||
3571 | return ret; | 3571 | return ret; |
3572 | } | 3572 | } |
@@ -3627,9 +3627,9 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid) | |||
3627 | void *ret = __cache_alloc_node(cachep, flags, nodeid, | 3627 | void *ret = __cache_alloc_node(cachep, flags, nodeid, |
3628 | __builtin_return_address(0)); | 3628 | __builtin_return_address(0)); |
3629 | 3629 | ||
3630 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_CACHE, _RET_IP_, ret, | 3630 | trace_kmem_cache_alloc_node(_RET_IP_, ret, |
3631 | obj_size(cachep), cachep->buffer_size, | 3631 | obj_size(cachep), cachep->buffer_size, |
3632 | flags, nodeid); | 3632 | flags, nodeid); |
3633 | 3633 | ||
3634 | return ret; | 3634 | return ret; |
3635 | } | 3635 | } |
@@ -3657,9 +3657,8 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, void *caller) | |||
3657 | return cachep; | 3657 | return cachep; |
3658 | ret = kmem_cache_alloc_node_notrace(cachep, flags, node); | 3658 | ret = kmem_cache_alloc_node_notrace(cachep, flags, node); |
3659 | 3659 | ||
3660 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, | 3660 | trace_kmalloc_node((unsigned long) caller, ret, |
3661 | (unsigned long) caller, ret, | 3661 | size, cachep->buffer_size, flags, node); |
3662 | size, cachep->buffer_size, flags, node); | ||
3663 | 3662 | ||
3664 | return ret; | 3663 | return ret; |
3665 | } | 3664 | } |
@@ -3709,9 +3708,8 @@ static __always_inline void *__do_kmalloc(size_t size, gfp_t flags, | |||
3709 | return cachep; | 3708 | return cachep; |
3710 | ret = __cache_alloc(cachep, flags, caller); | 3709 | ret = __cache_alloc(cachep, flags, caller); |
3711 | 3710 | ||
3712 | kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, | 3711 | trace_kmalloc((unsigned long) caller, ret, |
3713 | (unsigned long) caller, ret, | 3712 | size, cachep->buffer_size, flags); |
3714 | size, cachep->buffer_size, flags); | ||
3715 | 3713 | ||
3716 | return ret; | 3714 | return ret; |
3717 | } | 3715 | } |
@@ -3757,7 +3755,7 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp) | |||
3757 | __cache_free(cachep, objp); | 3755 | __cache_free(cachep, objp); |
3758 | local_irq_restore(flags); | 3756 | local_irq_restore(flags); |
3759 | 3757 | ||
3760 | kmemtrace_mark_free(KMEMTRACE_TYPE_CACHE, _RET_IP_, objp); | 3758 | trace_kmem_cache_free(_RET_IP_, objp); |
3761 | } | 3759 | } |
3762 | EXPORT_SYMBOL(kmem_cache_free); | 3760 | EXPORT_SYMBOL(kmem_cache_free); |
3763 | 3761 | ||
@@ -3775,6 +3773,8 @@ void kfree(const void *objp) | |||
3775 | struct kmem_cache *c; | 3773 | struct kmem_cache *c; |
3776 | unsigned long flags; | 3774 | unsigned long flags; |
3777 | 3775 | ||
3776 | trace_kfree(_RET_IP_, objp); | ||
3777 | |||
3778 | if (unlikely(ZERO_OR_NULL_PTR(objp))) | 3778 | if (unlikely(ZERO_OR_NULL_PTR(objp))) |
3779 | return; | 3779 | return; |
3780 | local_irq_save(flags); | 3780 | local_irq_save(flags); |
@@ -3784,8 +3784,6 @@ void kfree(const void *objp) | |||
3784 | debug_check_no_obj_freed(objp, obj_size(c)); | 3784 | debug_check_no_obj_freed(objp, obj_size(c)); |
3785 | __cache_free(c, (void *)objp); | 3785 | __cache_free(c, (void *)objp); |
3786 | local_irq_restore(flags); | 3786 | local_irq_restore(flags); |
3787 | |||
3788 | kmemtrace_mark_free(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, objp); | ||
3789 | } | 3787 | } |
3790 | EXPORT_SYMBOL(kfree); | 3788 | EXPORT_SYMBOL(kfree); |
3791 | 3789 | ||
@@ -490,9 +490,8 @@ void *__kmalloc_node(size_t size, gfp_t gfp, int node) | |||
490 | *m = size; | 490 | *m = size; |
491 | ret = (void *)m + align; | 491 | ret = (void *)m + align; |
492 | 492 | ||
493 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, | 493 | trace_kmalloc_node(_RET_IP_, ret, |
494 | _RET_IP_, ret, | 494 | size, size + align, gfp, node); |
495 | size, size + align, gfp, node); | ||
496 | } else { | 495 | } else { |
497 | unsigned int order = get_order(size); | 496 | unsigned int order = get_order(size); |
498 | 497 | ||
@@ -503,9 +502,8 @@ void *__kmalloc_node(size_t size, gfp_t gfp, int node) | |||
503 | page->private = size; | 502 | page->private = size; |
504 | } | 503 | } |
505 | 504 | ||
506 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, | 505 | trace_kmalloc_node(_RET_IP_, ret, |
507 | _RET_IP_, ret, | 506 | size, PAGE_SIZE << order, gfp, node); |
508 | size, PAGE_SIZE << order, gfp, node); | ||
509 | } | 507 | } |
510 | 508 | ||
511 | return ret; | 509 | return ret; |
@@ -516,6 +514,8 @@ void kfree(const void *block) | |||
516 | { | 514 | { |
517 | struct slob_page *sp; | 515 | struct slob_page *sp; |
518 | 516 | ||
517 | trace_kfree(_RET_IP_, block); | ||
518 | |||
519 | if (unlikely(ZERO_OR_NULL_PTR(block))) | 519 | if (unlikely(ZERO_OR_NULL_PTR(block))) |
520 | return; | 520 | return; |
521 | 521 | ||
@@ -526,8 +526,6 @@ void kfree(const void *block) | |||
526 | slob_free(m, *m + align); | 526 | slob_free(m, *m + align); |
527 | } else | 527 | } else |
528 | put_page(&sp->page); | 528 | put_page(&sp->page); |
529 | |||
530 | kmemtrace_mark_free(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, block); | ||
531 | } | 529 | } |
532 | EXPORT_SYMBOL(kfree); | 530 | EXPORT_SYMBOL(kfree); |
533 | 531 | ||
@@ -599,16 +597,14 @@ void *kmem_cache_alloc_node(struct kmem_cache *c, gfp_t flags, int node) | |||
599 | 597 | ||
600 | if (c->size < PAGE_SIZE) { | 598 | if (c->size < PAGE_SIZE) { |
601 | b = slob_alloc(c->size, flags, c->align, node); | 599 | b = slob_alloc(c->size, flags, c->align, node); |
602 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_CACHE, | 600 | trace_kmem_cache_alloc_node(_RET_IP_, b, c->size, |
603 | _RET_IP_, b, c->size, | 601 | SLOB_UNITS(c->size) * SLOB_UNIT, |
604 | SLOB_UNITS(c->size) * SLOB_UNIT, | 602 | flags, node); |
605 | flags, node); | ||
606 | } else { | 603 | } else { |
607 | b = slob_new_pages(flags, get_order(c->size), node); | 604 | b = slob_new_pages(flags, get_order(c->size), node); |
608 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_CACHE, | 605 | trace_kmem_cache_alloc_node(_RET_IP_, b, c->size, |
609 | _RET_IP_, b, c->size, | 606 | PAGE_SIZE << get_order(c->size), |
610 | PAGE_SIZE << get_order(c->size), | 607 | flags, node); |
611 | flags, node); | ||
612 | } | 608 | } |
613 | 609 | ||
614 | if (c->ctor) | 610 | if (c->ctor) |
@@ -646,7 +642,7 @@ void kmem_cache_free(struct kmem_cache *c, void *b) | |||
646 | __kmem_cache_free(b, c->size); | 642 | __kmem_cache_free(b, c->size); |
647 | } | 643 | } |
648 | 644 | ||
649 | kmemtrace_mark_free(KMEMTRACE_TYPE_CACHE, _RET_IP_, b); | 645 | trace_kmem_cache_free(_RET_IP_, b); |
650 | } | 646 | } |
651 | EXPORT_SYMBOL(kmem_cache_free); | 647 | EXPORT_SYMBOL(kmem_cache_free); |
652 | 648 | ||
@@ -1621,8 +1621,7 @@ void *kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags) | |||
1621 | { | 1621 | { |
1622 | void *ret = slab_alloc(s, gfpflags, -1, _RET_IP_); | 1622 | void *ret = slab_alloc(s, gfpflags, -1, _RET_IP_); |
1623 | 1623 | ||
1624 | kmemtrace_mark_alloc(KMEMTRACE_TYPE_CACHE, _RET_IP_, ret, | 1624 | trace_kmem_cache_alloc(_RET_IP_, ret, s->objsize, s->size, gfpflags); |
1625 | s->objsize, s->size, gfpflags); | ||
1626 | 1625 | ||
1627 | return ret; | 1626 | return ret; |
1628 | } | 1627 | } |
@@ -1641,8 +1640,8 @@ void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t gfpflags, int node) | |||
1641 | { | 1640 | { |
1642 | void *ret = slab_alloc(s, gfpflags, node, _RET_IP_); | 1641 | void *ret = slab_alloc(s, gfpflags, node, _RET_IP_); |
1643 | 1642 | ||
1644 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_CACHE, _RET_IP_, ret, | 1643 | trace_kmem_cache_alloc_node(_RET_IP_, ret, |
1645 | s->objsize, s->size, gfpflags, node); | 1644 | s->objsize, s->size, gfpflags, node); |
1646 | 1645 | ||
1647 | return ret; | 1646 | return ret; |
1648 | } | 1647 | } |
@@ -1767,7 +1766,7 @@ void kmem_cache_free(struct kmem_cache *s, void *x) | |||
1767 | 1766 | ||
1768 | slab_free(s, page, x, _RET_IP_); | 1767 | slab_free(s, page, x, _RET_IP_); |
1769 | 1768 | ||
1770 | kmemtrace_mark_free(KMEMTRACE_TYPE_CACHE, _RET_IP_, x); | 1769 | trace_kmem_cache_free(_RET_IP_, x); |
1771 | } | 1770 | } |
1772 | EXPORT_SYMBOL(kmem_cache_free); | 1771 | EXPORT_SYMBOL(kmem_cache_free); |
1773 | 1772 | ||
@@ -2702,8 +2701,7 @@ void *__kmalloc(size_t size, gfp_t flags) | |||
2702 | 2701 | ||
2703 | ret = slab_alloc(s, flags, -1, _RET_IP_); | 2702 | ret = slab_alloc(s, flags, -1, _RET_IP_); |
2704 | 2703 | ||
2705 | kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, ret, | 2704 | trace_kmalloc(_RET_IP_, ret, size, s->size, flags); |
2706 | size, s->size, flags); | ||
2707 | 2705 | ||
2708 | return ret; | 2706 | return ret; |
2709 | } | 2707 | } |
@@ -2729,10 +2727,9 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node) | |||
2729 | if (unlikely(size > SLUB_MAX_SIZE)) { | 2727 | if (unlikely(size > SLUB_MAX_SIZE)) { |
2730 | ret = kmalloc_large_node(size, flags, node); | 2728 | ret = kmalloc_large_node(size, flags, node); |
2731 | 2729 | ||
2732 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, | 2730 | trace_kmalloc_node(_RET_IP_, ret, |
2733 | _RET_IP_, ret, | 2731 | size, PAGE_SIZE << get_order(size), |
2734 | size, PAGE_SIZE << get_order(size), | 2732 | flags, node); |
2735 | flags, node); | ||
2736 | 2733 | ||
2737 | return ret; | 2734 | return ret; |
2738 | } | 2735 | } |
@@ -2744,8 +2741,7 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node) | |||
2744 | 2741 | ||
2745 | ret = slab_alloc(s, flags, node, _RET_IP_); | 2742 | ret = slab_alloc(s, flags, node, _RET_IP_); |
2746 | 2743 | ||
2747 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, ret, | 2744 | trace_kmalloc_node(_RET_IP_, ret, size, s->size, flags, node); |
2748 | size, s->size, flags, node); | ||
2749 | 2745 | ||
2750 | return ret; | 2746 | return ret; |
2751 | } | 2747 | } |
@@ -2796,6 +2792,8 @@ void kfree(const void *x) | |||
2796 | struct page *page; | 2792 | struct page *page; |
2797 | void *object = (void *)x; | 2793 | void *object = (void *)x; |
2798 | 2794 | ||
2795 | trace_kfree(_RET_IP_, x); | ||
2796 | |||
2799 | if (unlikely(ZERO_OR_NULL_PTR(x))) | 2797 | if (unlikely(ZERO_OR_NULL_PTR(x))) |
2800 | return; | 2798 | return; |
2801 | 2799 | ||
@@ -2806,8 +2804,6 @@ void kfree(const void *x) | |||
2806 | return; | 2804 | return; |
2807 | } | 2805 | } |
2808 | slab_free(page->slab, page, object, _RET_IP_); | 2806 | slab_free(page->slab, page, object, _RET_IP_); |
2809 | |||
2810 | kmemtrace_mark_free(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, x); | ||
2811 | } | 2807 | } |
2812 | EXPORT_SYMBOL(kfree); | 2808 | EXPORT_SYMBOL(kfree); |
2813 | 2809 | ||
@@ -3290,8 +3286,7 @@ void *__kmalloc_track_caller(size_t size, gfp_t gfpflags, unsigned long caller) | |||
3290 | ret = slab_alloc(s, gfpflags, -1, caller); | 3286 | ret = slab_alloc(s, gfpflags, -1, caller); |
3291 | 3287 | ||
3292 | /* Honor the call site pointer we recieved. */ | 3288 | /* Honor the call site pointer we recieved. */ |
3293 | kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, caller, ret, size, | 3289 | trace_kmalloc(caller, ret, size, s->size, gfpflags); |
3294 | s->size, gfpflags); | ||
3295 | 3290 | ||
3296 | return ret; | 3291 | return ret; |
3297 | } | 3292 | } |
@@ -3313,8 +3308,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags, | |||
3313 | ret = slab_alloc(s, gfpflags, node, caller); | 3308 | ret = slab_alloc(s, gfpflags, node, caller); |
3314 | 3309 | ||
3315 | /* Honor the call site pointer we recieved. */ | 3310 | /* Honor the call site pointer we recieved. */ |
3316 | kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, caller, ret, | 3311 | trace_kmalloc_node(caller, ret, size, s->size, gfpflags, node); |
3317 | size, s->size, gfpflags, node); | ||
3318 | 3312 | ||
3319 | return ret; | 3313 | return ret; |
3320 | } | 3314 | } |
@@ -4,6 +4,7 @@ | |||
4 | #include <linux/module.h> | 4 | #include <linux/module.h> |
5 | #include <linux/err.h> | 5 | #include <linux/err.h> |
6 | #include <linux/sched.h> | 6 | #include <linux/sched.h> |
7 | #include <linux/tracepoint.h> | ||
7 | #include <asm/uaccess.h> | 8 | #include <asm/uaccess.h> |
8 | 9 | ||
9 | /** | 10 | /** |
@@ -236,3 +237,18 @@ int __attribute__((weak)) get_user_pages_fast(unsigned long start, | |||
236 | return ret; | 237 | return ret; |
237 | } | 238 | } |
238 | EXPORT_SYMBOL_GPL(get_user_pages_fast); | 239 | EXPORT_SYMBOL_GPL(get_user_pages_fast); |
240 | |||
241 | /* Tracepoints definitions. */ | ||
242 | DEFINE_TRACE(kmalloc); | ||
243 | DEFINE_TRACE(kmem_cache_alloc); | ||
244 | DEFINE_TRACE(kmalloc_node); | ||
245 | DEFINE_TRACE(kmem_cache_alloc_node); | ||
246 | DEFINE_TRACE(kfree); | ||
247 | DEFINE_TRACE(kmem_cache_free); | ||
248 | |||
249 | EXPORT_TRACEPOINT_SYMBOL(kmalloc); | ||
250 | EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc); | ||
251 | EXPORT_TRACEPOINT_SYMBOL(kmalloc_node); | ||
252 | EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc_node); | ||
253 | EXPORT_TRACEPOINT_SYMBOL(kfree); | ||
254 | EXPORT_TRACEPOINT_SYMBOL(kmem_cache_free); | ||
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 9b49a6ab8ded..8847add6ca16 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c | |||
@@ -1008,6 +1008,8 @@ svc_process(struct svc_rqst *rqstp) | |||
1008 | rqstp->rq_res.tail[0].iov_len = 0; | 1008 | rqstp->rq_res.tail[0].iov_len = 0; |
1009 | /* Will be turned off only in gss privacy case: */ | 1009 | /* Will be turned off only in gss privacy case: */ |
1010 | rqstp->rq_splice_ok = 1; | 1010 | rqstp->rq_splice_ok = 1; |
1011 | /* Will be turned off only when NFSv4 Sessions are used */ | ||
1012 | rqstp->rq_usedeferral = 1; | ||
1011 | 1013 | ||
1012 | /* Setup reply header */ | 1014 | /* Setup reply header */ |
1013 | rqstp->rq_xprt->xpt_ops->xpo_prep_reply_hdr(rqstp); | 1015 | rqstp->rq_xprt->xpt_ops->xpo_prep_reply_hdr(rqstp); |
@@ -1078,7 +1080,6 @@ svc_process(struct svc_rqst *rqstp) | |||
1078 | procp = versp->vs_proc + proc; | 1080 | procp = versp->vs_proc + proc; |
1079 | if (proc >= versp->vs_nproc || !procp->pc_func) | 1081 | if (proc >= versp->vs_nproc || !procp->pc_func) |
1080 | goto err_bad_proc; | 1082 | goto err_bad_proc; |
1081 | rqstp->rq_server = serv; | ||
1082 | rqstp->rq_procinfo = procp; | 1083 | rqstp->rq_procinfo = procp; |
1083 | 1084 | ||
1084 | /* Syntactic check complete */ | 1085 | /* Syntactic check complete */ |
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index 2819ee093f36..c200d92e57e4 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c | |||
@@ -14,6 +14,8 @@ | |||
14 | 14 | ||
15 | #define RPCDBG_FACILITY RPCDBG_SVCXPRT | 15 | #define RPCDBG_FACILITY RPCDBG_SVCXPRT |
16 | 16 | ||
17 | #define SVC_MAX_WAKING 5 | ||
18 | |||
17 | static struct svc_deferred_req *svc_deferred_dequeue(struct svc_xprt *xprt); | 19 | static struct svc_deferred_req *svc_deferred_dequeue(struct svc_xprt *xprt); |
18 | static int svc_deferred_recv(struct svc_rqst *rqstp); | 20 | static int svc_deferred_recv(struct svc_rqst *rqstp); |
19 | static struct cache_deferred_req *svc_defer(struct cache_req *req); | 21 | static struct cache_deferred_req *svc_defer(struct cache_req *req); |
@@ -301,6 +303,7 @@ void svc_xprt_enqueue(struct svc_xprt *xprt) | |||
301 | struct svc_pool *pool; | 303 | struct svc_pool *pool; |
302 | struct svc_rqst *rqstp; | 304 | struct svc_rqst *rqstp; |
303 | int cpu; | 305 | int cpu; |
306 | int thread_avail; | ||
304 | 307 | ||
305 | if (!(xprt->xpt_flags & | 308 | if (!(xprt->xpt_flags & |
306 | ((1<<XPT_CONN)|(1<<XPT_DATA)|(1<<XPT_CLOSE)|(1<<XPT_DEFERRED)))) | 309 | ((1<<XPT_CONN)|(1<<XPT_DATA)|(1<<XPT_CLOSE)|(1<<XPT_DEFERRED)))) |
@@ -312,18 +315,14 @@ void svc_xprt_enqueue(struct svc_xprt *xprt) | |||
312 | 315 | ||
313 | spin_lock_bh(&pool->sp_lock); | 316 | spin_lock_bh(&pool->sp_lock); |
314 | 317 | ||
315 | if (!list_empty(&pool->sp_threads) && | ||
316 | !list_empty(&pool->sp_sockets)) | ||
317 | printk(KERN_ERR | ||
318 | "svc_xprt_enqueue: " | ||
319 | "threads and transports both waiting??\n"); | ||
320 | |||
321 | if (test_bit(XPT_DEAD, &xprt->xpt_flags)) { | 318 | if (test_bit(XPT_DEAD, &xprt->xpt_flags)) { |
322 | /* Don't enqueue dead transports */ | 319 | /* Don't enqueue dead transports */ |
323 | dprintk("svc: transport %p is dead, not enqueued\n", xprt); | 320 | dprintk("svc: transport %p is dead, not enqueued\n", xprt); |
324 | goto out_unlock; | 321 | goto out_unlock; |
325 | } | 322 | } |
326 | 323 | ||
324 | pool->sp_stats.packets++; | ||
325 | |||
327 | /* Mark transport as busy. It will remain in this state until | 326 | /* Mark transport as busy. It will remain in this state until |
328 | * the provider calls svc_xprt_received. We update XPT_BUSY | 327 | * the provider calls svc_xprt_received. We update XPT_BUSY |
329 | * atomically because it also guards against trying to enqueue | 328 | * atomically because it also guards against trying to enqueue |
@@ -356,7 +355,15 @@ void svc_xprt_enqueue(struct svc_xprt *xprt) | |||
356 | } | 355 | } |
357 | 356 | ||
358 | process: | 357 | process: |
359 | if (!list_empty(&pool->sp_threads)) { | 358 | /* Work out whether threads are available */ |
359 | thread_avail = !list_empty(&pool->sp_threads); /* threads are asleep */ | ||
360 | if (pool->sp_nwaking >= SVC_MAX_WAKING) { | ||
361 | /* too many threads are runnable and trying to wake up */ | ||
362 | thread_avail = 0; | ||
363 | pool->sp_stats.overloads_avoided++; | ||
364 | } | ||
365 | |||
366 | if (thread_avail) { | ||
360 | rqstp = list_entry(pool->sp_threads.next, | 367 | rqstp = list_entry(pool->sp_threads.next, |
361 | struct svc_rqst, | 368 | struct svc_rqst, |
362 | rq_list); | 369 | rq_list); |
@@ -371,11 +378,15 @@ void svc_xprt_enqueue(struct svc_xprt *xprt) | |||
371 | svc_xprt_get(xprt); | 378 | svc_xprt_get(xprt); |
372 | rqstp->rq_reserved = serv->sv_max_mesg; | 379 | rqstp->rq_reserved = serv->sv_max_mesg; |
373 | atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved); | 380 | atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved); |
381 | rqstp->rq_waking = 1; | ||
382 | pool->sp_nwaking++; | ||
383 | pool->sp_stats.threads_woken++; | ||
374 | BUG_ON(xprt->xpt_pool != pool); | 384 | BUG_ON(xprt->xpt_pool != pool); |
375 | wake_up(&rqstp->rq_wait); | 385 | wake_up(&rqstp->rq_wait); |
376 | } else { | 386 | } else { |
377 | dprintk("svc: transport %p put into queue\n", xprt); | 387 | dprintk("svc: transport %p put into queue\n", xprt); |
378 | list_add_tail(&xprt->xpt_ready, &pool->sp_sockets); | 388 | list_add_tail(&xprt->xpt_ready, &pool->sp_sockets); |
389 | pool->sp_stats.sockets_queued++; | ||
379 | BUG_ON(xprt->xpt_pool != pool); | 390 | BUG_ON(xprt->xpt_pool != pool); |
380 | } | 391 | } |
381 | 392 | ||
@@ -588,6 +599,7 @@ int svc_recv(struct svc_rqst *rqstp, long timeout) | |||
588 | int pages; | 599 | int pages; |
589 | struct xdr_buf *arg; | 600 | struct xdr_buf *arg; |
590 | DECLARE_WAITQUEUE(wait, current); | 601 | DECLARE_WAITQUEUE(wait, current); |
602 | long time_left; | ||
591 | 603 | ||
592 | dprintk("svc: server %p waiting for data (to = %ld)\n", | 604 | dprintk("svc: server %p waiting for data (to = %ld)\n", |
593 | rqstp, timeout); | 605 | rqstp, timeout); |
@@ -636,6 +648,11 @@ int svc_recv(struct svc_rqst *rqstp, long timeout) | |||
636 | return -EINTR; | 648 | return -EINTR; |
637 | 649 | ||
638 | spin_lock_bh(&pool->sp_lock); | 650 | spin_lock_bh(&pool->sp_lock); |
651 | if (rqstp->rq_waking) { | ||
652 | rqstp->rq_waking = 0; | ||
653 | pool->sp_nwaking--; | ||
654 | BUG_ON(pool->sp_nwaking < 0); | ||
655 | } | ||
639 | xprt = svc_xprt_dequeue(pool); | 656 | xprt = svc_xprt_dequeue(pool); |
640 | if (xprt) { | 657 | if (xprt) { |
641 | rqstp->rq_xprt = xprt; | 658 | rqstp->rq_xprt = xprt; |
@@ -668,12 +685,14 @@ int svc_recv(struct svc_rqst *rqstp, long timeout) | |||
668 | add_wait_queue(&rqstp->rq_wait, &wait); | 685 | add_wait_queue(&rqstp->rq_wait, &wait); |
669 | spin_unlock_bh(&pool->sp_lock); | 686 | spin_unlock_bh(&pool->sp_lock); |
670 | 687 | ||
671 | schedule_timeout(timeout); | 688 | time_left = schedule_timeout(timeout); |
672 | 689 | ||
673 | try_to_freeze(); | 690 | try_to_freeze(); |
674 | 691 | ||
675 | spin_lock_bh(&pool->sp_lock); | 692 | spin_lock_bh(&pool->sp_lock); |
676 | remove_wait_queue(&rqstp->rq_wait, &wait); | 693 | remove_wait_queue(&rqstp->rq_wait, &wait); |
694 | if (!time_left) | ||
695 | pool->sp_stats.threads_timedout++; | ||
677 | 696 | ||
678 | xprt = rqstp->rq_xprt; | 697 | xprt = rqstp->rq_xprt; |
679 | if (!xprt) { | 698 | if (!xprt) { |
@@ -958,7 +977,7 @@ static struct cache_deferred_req *svc_defer(struct cache_req *req) | |||
958 | struct svc_rqst *rqstp = container_of(req, struct svc_rqst, rq_chandle); | 977 | struct svc_rqst *rqstp = container_of(req, struct svc_rqst, rq_chandle); |
959 | struct svc_deferred_req *dr; | 978 | struct svc_deferred_req *dr; |
960 | 979 | ||
961 | if (rqstp->rq_arg.page_len) | 980 | if (rqstp->rq_arg.page_len || !rqstp->rq_usedeferral) |
962 | return NULL; /* if more than a page, give up FIXME */ | 981 | return NULL; /* if more than a page, give up FIXME */ |
963 | if (rqstp->rq_deferred) { | 982 | if (rqstp->rq_deferred) { |
964 | dr = rqstp->rq_deferred; | 983 | dr = rqstp->rq_deferred; |
@@ -1112,3 +1131,93 @@ int svc_xprt_names(struct svc_serv *serv, char *buf, int buflen) | |||
1112 | return totlen; | 1131 | return totlen; |
1113 | } | 1132 | } |
1114 | EXPORT_SYMBOL_GPL(svc_xprt_names); | 1133 | EXPORT_SYMBOL_GPL(svc_xprt_names); |
1134 | |||
1135 | |||
1136 | /*----------------------------------------------------------------------------*/ | ||
1137 | |||
1138 | static void *svc_pool_stats_start(struct seq_file *m, loff_t *pos) | ||
1139 | { | ||
1140 | unsigned int pidx = (unsigned int)*pos; | ||
1141 | struct svc_serv *serv = m->private; | ||
1142 | |||
1143 | dprintk("svc_pool_stats_start, *pidx=%u\n", pidx); | ||
1144 | |||
1145 | lock_kernel(); | ||
1146 | /* bump up the pseudo refcount while traversing */ | ||
1147 | svc_get(serv); | ||
1148 | unlock_kernel(); | ||
1149 | |||
1150 | if (!pidx) | ||
1151 | return SEQ_START_TOKEN; | ||
1152 | return (pidx > serv->sv_nrpools ? NULL : &serv->sv_pools[pidx-1]); | ||
1153 | } | ||
1154 | |||
1155 | static void *svc_pool_stats_next(struct seq_file *m, void *p, loff_t *pos) | ||
1156 | { | ||
1157 | struct svc_pool *pool = p; | ||
1158 | struct svc_serv *serv = m->private; | ||
1159 | |||
1160 | dprintk("svc_pool_stats_next, *pos=%llu\n", *pos); | ||
1161 | |||
1162 | if (p == SEQ_START_TOKEN) { | ||
1163 | pool = &serv->sv_pools[0]; | ||
1164 | } else { | ||
1165 | unsigned int pidx = (pool - &serv->sv_pools[0]); | ||
1166 | if (pidx < serv->sv_nrpools-1) | ||
1167 | pool = &serv->sv_pools[pidx+1]; | ||
1168 | else | ||
1169 | pool = NULL; | ||
1170 | } | ||
1171 | ++*pos; | ||
1172 | return pool; | ||
1173 | } | ||
1174 | |||
1175 | static void svc_pool_stats_stop(struct seq_file *m, void *p) | ||
1176 | { | ||
1177 | struct svc_serv *serv = m->private; | ||
1178 | |||
1179 | lock_kernel(); | ||
1180 | /* this function really, really should have been called svc_put() */ | ||
1181 | svc_destroy(serv); | ||
1182 | unlock_kernel(); | ||
1183 | } | ||
1184 | |||
1185 | static int svc_pool_stats_show(struct seq_file *m, void *p) | ||
1186 | { | ||
1187 | struct svc_pool *pool = p; | ||
1188 | |||
1189 | if (p == SEQ_START_TOKEN) { | ||
1190 | seq_puts(m, "# pool packets-arrived sockets-enqueued threads-woken overloads-avoided threads-timedout\n"); | ||
1191 | return 0; | ||
1192 | } | ||
1193 | |||
1194 | seq_printf(m, "%u %lu %lu %lu %lu %lu\n", | ||
1195 | pool->sp_id, | ||
1196 | pool->sp_stats.packets, | ||
1197 | pool->sp_stats.sockets_queued, | ||
1198 | pool->sp_stats.threads_woken, | ||
1199 | pool->sp_stats.overloads_avoided, | ||
1200 | pool->sp_stats.threads_timedout); | ||
1201 | |||
1202 | return 0; | ||
1203 | } | ||
1204 | |||
1205 | static const struct seq_operations svc_pool_stats_seq_ops = { | ||
1206 | .start = svc_pool_stats_start, | ||
1207 | .next = svc_pool_stats_next, | ||
1208 | .stop = svc_pool_stats_stop, | ||
1209 | .show = svc_pool_stats_show, | ||
1210 | }; | ||
1211 | |||
1212 | int svc_pool_stats_open(struct svc_serv *serv, struct file *file) | ||
1213 | { | ||
1214 | int err; | ||
1215 | |||
1216 | err = seq_open(file, &svc_pool_stats_seq_ops); | ||
1217 | if (!err) | ||
1218 | ((struct seq_file *) file->private_data)->private = serv; | ||
1219 | return err; | ||
1220 | } | ||
1221 | EXPORT_SYMBOL(svc_pool_stats_open); | ||
1222 | |||
1223 | /*----------------------------------------------------------------------------*/ | ||
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 9d504234af4a..af3198814c15 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -345,7 +345,6 @@ static void svc_sock_setbufsize(struct socket *sock, unsigned int snd, | |||
345 | lock_sock(sock->sk); | 345 | lock_sock(sock->sk); |
346 | sock->sk->sk_sndbuf = snd * 2; | 346 | sock->sk->sk_sndbuf = snd * 2; |
347 | sock->sk->sk_rcvbuf = rcv * 2; | 347 | sock->sk->sk_rcvbuf = rcv * 2; |
348 | sock->sk->sk_userlocks |= SOCK_SNDBUF_LOCK|SOCK_RCVBUF_LOCK; | ||
349 | release_sock(sock->sk); | 348 | release_sock(sock->sk); |
350 | #endif | 349 | #endif |
351 | } | 350 | } |
@@ -797,23 +796,6 @@ static int svc_tcp_recvfrom(struct svc_rqst *rqstp) | |||
797 | test_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags), | 796 | test_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags), |
798 | test_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags)); | 797 | test_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags)); |
799 | 798 | ||
800 | if (test_and_clear_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags)) | ||
801 | /* sndbuf needs to have room for one request | ||
802 | * per thread, otherwise we can stall even when the | ||
803 | * network isn't a bottleneck. | ||
804 | * | ||
805 | * We count all threads rather than threads in a | ||
806 | * particular pool, which provides an upper bound | ||
807 | * on the number of threads which will access the socket. | ||
808 | * | ||
809 | * rcvbuf just needs to be able to hold a few requests. | ||
810 | * Normally they will be removed from the queue | ||
811 | * as soon a a complete request arrives. | ||
812 | */ | ||
813 | svc_sock_setbufsize(svsk->sk_sock, | ||
814 | (serv->sv_nrthreads+3) * serv->sv_max_mesg, | ||
815 | 3 * serv->sv_max_mesg); | ||
816 | |||
817 | clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); | 799 | clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); |
818 | 800 | ||
819 | /* Receive data. If we haven't got the record length yet, get | 801 | /* Receive data. If we haven't got the record length yet, get |
@@ -1061,15 +1043,6 @@ static void svc_tcp_init(struct svc_sock *svsk, struct svc_serv *serv) | |||
1061 | 1043 | ||
1062 | tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF; | 1044 | tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF; |
1063 | 1045 | ||
1064 | /* initialise setting must have enough space to | ||
1065 | * receive and respond to one request. | ||
1066 | * svc_tcp_recvfrom will re-adjust if necessary | ||
1067 | */ | ||
1068 | svc_sock_setbufsize(svsk->sk_sock, | ||
1069 | 3 * svsk->sk_xprt.xpt_server->sv_max_mesg, | ||
1070 | 3 * svsk->sk_xprt.xpt_server->sv_max_mesg); | ||
1071 | |||
1072 | set_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags); | ||
1073 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); | 1046 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); |
1074 | if (sk->sk_state != TCP_ESTABLISHED) | 1047 | if (sk->sk_state != TCP_ESTABLISHED) |
1075 | set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); | 1048 | set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); |
@@ -1139,8 +1112,14 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv, | |||
1139 | /* Initialize the socket */ | 1112 | /* Initialize the socket */ |
1140 | if (sock->type == SOCK_DGRAM) | 1113 | if (sock->type == SOCK_DGRAM) |
1141 | svc_udp_init(svsk, serv); | 1114 | svc_udp_init(svsk, serv); |
1142 | else | 1115 | else { |
1116 | /* initialise setting must have enough space to | ||
1117 | * receive and respond to one request. | ||
1118 | */ | ||
1119 | svc_sock_setbufsize(svsk->sk_sock, 4 * serv->sv_max_mesg, | ||
1120 | 4 * serv->sv_max_mesg); | ||
1143 | svc_tcp_init(svsk, serv); | 1121 | svc_tcp_init(svsk, serv); |
1122 | } | ||
1144 | 1123 | ||
1145 | dprintk("svc: svc_setup_socket created %p (inet %p)\n", | 1124 | dprintk("svc: svc_setup_socket created %p (inet %p)\n", |
1146 | svsk, svsk->sk_sk); | 1125 | svsk, svsk->sk_sk); |